# HG changeset patch # User cin # Date 1484553887 -10800 # Node ID 0c59e7a7782a294d286d99c70b47012dceb70a4b # Parent a0b14b11ad9fdc7ed5533ecf434390d305a2f216 Working on GPIO and RCC diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/.cproject --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/.cproject Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/.mxproject --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/.mxproject Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,17 @@ +[PreviousGenFiles] +HeaderPath=/home/sergey/Projects/ARM_workspace_7.0/f103c8/Inc +HeaderFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h; +SourcePath=/home/sergey/Projects/ARM_workspace_7.0/f103c8/Src +SourceFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h;stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/cmsis_gcc.h; + +[PreviousUsedIarFiles] +SourceFiles=../Src/main.c;../Src/stm32f1xx_it.c;../Src/stm32f1xx_hal_msp.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/iar/startup_stm32f103xb.s; +HeaderPath=../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include; + +[PreviousUsedTStudioFiles] +SourceFiles=../Src/main.c;../Src/stm32f1xx_it.c;../Src/stm32f1xx_hal_msp.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103xb.s; +HeaderPath=../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include; + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/.project --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/.project Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,80 @@ + + + f103c8 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?children? + ?name?=outputEntries\|?children?=?name?=entry\\\\\\\|\\\|\|| + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/STM32100B-EVAL/Debug} + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + + + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/.settings/com.atollic.truestudio.debug.hardware_device.prefs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/.settings/com.atollic.truestudio.debug.hardware_device.prefs Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,11 @@ +BOARD=None +CODE_LOCATION=FLASH +ENDIAN=Little-endian +MCU=STM32F103C8 +MCU_VENDOR=STMicroelectronics +MODEL=Lite +PROBE=ST-LINK +PROJECT_FORMAT_VERSION=2 +TARGET=ARM\u00AE +VERSION=4.1.0 +eclipse.preferences.version=1 diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/.settings/language.settings.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/.settings/language.settings.xml Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_class_marks_example/ARM/arm_class_marks_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_class_marks_example/ARM/arm_class_marks_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,211 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_class_marks_example_f32.c +* +* Description: Example code to calculate Minimum, Maximum +* Mean, std and variance of marks obtained in a class +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup ClassMarks Class Marks Example + * + * \par Description: + * \par + * Demonstrates the use the Maximum, Minimum, Mean, Standard Deviation, Variance + * and Matrix functions to calculate statistical values of marks obtained in a class. + * + * \note This example also demonstrates the usage of static initialization. + * + * \par Variables Description: + * \par + * \li \c testMarks_f32 points to the marks scored by 20 students in 4 subjects + * \li \c max_marks Maximum of all marks + * \li \c min_marks Minimum of all marks + * \li \c mean Mean of all marks + * \li \c var Variance of the marks + * \li \c std Standard deviation of the marks + * \li \c numStudents Total number of students in the class + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_mat_init_f32() + * - arm_mat_mult_f32() + * - arm_max_f32() + * - arm_min_f32() + * - arm_mean_f32() + * - arm_std_f32() + * - arm_var_f32() + * + * Refer + * \link arm_class_marks_example_f32.c \endlink + * + */ + + +/** \example arm_class_marks_example_f32.c + */ +#include "arm_math.h" + +#define USE_STATIC_INIT + + /* ---------------------------------------------------------------------- +** Global defines +** ------------------------------------------------------------------- */ + +#define TEST_LENGTH_SAMPLES (20*4) + +/* ---------------------------------------------------------------------- +** List of Marks scored by 20 students for 4 subjects +** ------------------------------------------------------------------- */ +const float32_t testMarks_f32[TEST_LENGTH_SAMPLES] = +{ + 42.000000, 37.000000, 81.000000, 28.000000, + 83.000000, 72.000000, 36.000000, 38.000000, + 32.000000, 51.000000, 63.000000, 64.000000, + 97.000000, 82.000000, 95.000000, 90.000000, + 66.000000, 51.000000, 54.000000, 42.000000, + 67.000000, 56.000000, 45.000000, 57.000000, + 67.000000, 69.000000, 35.000000, 52.000000, + 29.000000, 81.000000, 58.000000, 47.000000, + 38.000000, 76.000000, 100.000000, 29.000000, + 33.000000, 47.000000, 29.000000, 50.000000, + 34.000000, 41.000000, 61.000000, 46.000000, + 52.000000, 50.000000, 48.000000, 36.000000, + 47.000000, 55.000000, 44.000000, 40.000000, + 100.000000, 94.000000, 84.000000, 37.000000, + 32.000000, 71.000000, 47.000000, 77.000000, + 31.000000, 50.000000, 49.000000, 35.000000, + 63.000000, 67.000000, 40.000000, 31.000000, + 29.000000, 68.000000, 61.000000, 38.000000, + 31.000000, 28.000000, 28.000000, 76.000000, + 55.000000, 33.000000, 29.000000, 39.000000 +}; + + +/* ---------------------------------------------------------------------- +* Number of subjects X 1 +* ------------------------------------------------------------------- */ +const float32_t testUnity_f32[4] = +{ + 1.000, 1.000, 1.000, 1.000 +}; + + +/* ---------------------------------------------------------------------- +** f32 Output buffer +** ------------------------------------------------------------------- */ +static float32_t testOutput[TEST_LENGTH_SAMPLES]; + + +/* ------------------------------------------------------------------ +* Global defines +*------------------------------------------------------------------- */ +#define NUMSTUDENTS 20 +#define NUMSUBJECTS 4 + +/* ------------------------------------------------------------------ +* Global variables +*------------------------------------------------------------------- */ + + uint32_t numStudents = 20; + uint32_t numSubjects = 4; +float32_t max_marks, min_marks, mean, std, var; + uint32_t student_num; + +/* ---------------------------------------------------------------------------------- +* Main f32 test function. It returns maximum marks secured and student number +* ------------------------------------------------------------------------------- */ + +int32_t main() +{ + +#ifndef USE_STATIC_INIT + + arm_matrix_instance_f32 srcA; + arm_matrix_instance_f32 srcB; + arm_matrix_instance_f32 dstC; + + /* Input and output matrices initializations */ + arm_mat_init_f32(&srcA, numStudents, numSubjects, (float32_t *)testMarks_f32); + arm_mat_init_f32(&srcB, numSubjects, 1, (float32_t *)testUnity_f32); + arm_mat_init_f32(&dstC, numStudents, 1, testOutput); + +#else + + /* Static Initializations of Input and output matrix sizes and array */ + arm_matrix_instance_f32 srcA = {NUMSTUDENTS, NUMSUBJECTS, (float32_t *)testMarks_f32}; + arm_matrix_instance_f32 srcB = {NUMSUBJECTS, 1, (float32_t *)testUnity_f32}; + arm_matrix_instance_f32 dstC = {NUMSTUDENTS, 1, testOutput}; + +#endif + + + /* ---------------------------------------------------------------------- + *Call the Matrix multiplication process function + * ------------------------------------------------------------------- */ + arm_mat_mult_f32(&srcA, &srcB, &dstC); + + /* ---------------------------------------------------------------------- + ** Call the Max function to calculate max marks among numStudents + ** ------------------------------------------------------------------- */ + arm_max_f32(testOutput, numStudents, &max_marks, &student_num); + + /* ---------------------------------------------------------------------- + ** Call the Min function to calculate min marks among numStudents + ** ------------------------------------------------------------------- */ + arm_min_f32(testOutput, numStudents, &min_marks, &student_num); + + /* ---------------------------------------------------------------------- + ** Call the Mean function to calculate mean + ** ------------------------------------------------------------------- */ + arm_mean_f32(testOutput, numStudents, &mean); + + /* ---------------------------------------------------------------------- + ** Call the std function to calculate standard deviation + ** ------------------------------------------------------------------- */ + arm_std_f32(testOutput, numStudents, &std); + + /* ---------------------------------------------------------------------- + ** Call the var function to calculate variance + ** ------------------------------------------------------------------- */ + arm_var_f32(testOutput, numStudents, &var); + + while(1); /* main function does not return */ +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_class_marks_example/GCC/arm_class_marks_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_class_marks_example/GCC/arm_class_marks_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,211 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_class_marks_example_f32.c +* +* Description: Example code to calculate Minimum, Maximum +* Mean, std and variance of marks obtained in a class +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup ClassMarks Class Marks Example + * + * \par Description: + * \par + * Demonstrates the use the Maximum, Minimum, Mean, Standard Deviation, Variance + * and Matrix functions to calculate statistical values of marks obtained in a class. + * + * \note This example also demonstrates the usage of static initialization. + * + * \par Variables Description: + * \par + * \li \c testMarks_f32 points to the marks scored by 20 students in 4 subjects + * \li \c max_marks Maximum of all marks + * \li \c min_marks Minimum of all marks + * \li \c mean Mean of all marks + * \li \c var Variance of the marks + * \li \c std Standard deviation of the marks + * \li \c numStudents Total number of students in the class + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_mat_init_f32() + * - arm_mat_mult_f32() + * - arm_max_f32() + * - arm_min_f32() + * - arm_mean_f32() + * - arm_std_f32() + * - arm_var_f32() + * + * Refer + * \link arm_class_marks_example_f32.c \endlink + * + */ + + +/** \example arm_class_marks_example_f32.c + */ +#include "arm_math.h" + +#define USE_STATIC_INIT + + /* ---------------------------------------------------------------------- +** Global defines +** ------------------------------------------------------------------- */ + +#define TEST_LENGTH_SAMPLES (20*4) + +/* ---------------------------------------------------------------------- +** List of Marks scored by 20 students for 4 subjects +** ------------------------------------------------------------------- */ +const float32_t testMarks_f32[TEST_LENGTH_SAMPLES] = +{ + 42.000000, 37.000000, 81.000000, 28.000000, + 83.000000, 72.000000, 36.000000, 38.000000, + 32.000000, 51.000000, 63.000000, 64.000000, + 97.000000, 82.000000, 95.000000, 90.000000, + 66.000000, 51.000000, 54.000000, 42.000000, + 67.000000, 56.000000, 45.000000, 57.000000, + 67.000000, 69.000000, 35.000000, 52.000000, + 29.000000, 81.000000, 58.000000, 47.000000, + 38.000000, 76.000000, 100.000000, 29.000000, + 33.000000, 47.000000, 29.000000, 50.000000, + 34.000000, 41.000000, 61.000000, 46.000000, + 52.000000, 50.000000, 48.000000, 36.000000, + 47.000000, 55.000000, 44.000000, 40.000000, + 100.000000, 94.000000, 84.000000, 37.000000, + 32.000000, 71.000000, 47.000000, 77.000000, + 31.000000, 50.000000, 49.000000, 35.000000, + 63.000000, 67.000000, 40.000000, 31.000000, + 29.000000, 68.000000, 61.000000, 38.000000, + 31.000000, 28.000000, 28.000000, 76.000000, + 55.000000, 33.000000, 29.000000, 39.000000 +}; + + +/* ---------------------------------------------------------------------- +* Number of subjects X 1 +* ------------------------------------------------------------------- */ +const float32_t testUnity_f32[4] = +{ + 1.000, 1.000, 1.000, 1.000 +}; + + +/* ---------------------------------------------------------------------- +** f32 Output buffer +** ------------------------------------------------------------------- */ +static float32_t testOutput[TEST_LENGTH_SAMPLES]; + + +/* ------------------------------------------------------------------ +* Global defines +*------------------------------------------------------------------- */ +#define NUMSTUDENTS 20 +#define NUMSUBJECTS 4 + +/* ------------------------------------------------------------------ +* Global variables +*------------------------------------------------------------------- */ + + uint32_t numStudents = 20; + uint32_t numSubjects = 4; +float32_t max_marks, min_marks, mean, std, var; + uint32_t student_num; + +/* ---------------------------------------------------------------------------------- +* Main f32 test function. It returns maximum marks secured and student number +* ------------------------------------------------------------------------------- */ + +int32_t main() +{ + +#ifndef USE_STATIC_INIT + + arm_matrix_instance_f32 srcA; + arm_matrix_instance_f32 srcB; + arm_matrix_instance_f32 dstC; + + /* Input and output matrices initializations */ + arm_mat_init_f32(&srcA, numStudents, numSubjects, (float32_t *)testMarks_f32); + arm_mat_init_f32(&srcB, numSubjects, 1, (float32_t *)testUnity_f32); + arm_mat_init_f32(&dstC, numStudents, 1, testOutput); + +#else + + /* Static Initializations of Input and output matrix sizes and array */ + arm_matrix_instance_f32 srcA = {NUMSTUDENTS, NUMSUBJECTS, (float32_t *)testMarks_f32}; + arm_matrix_instance_f32 srcB = {NUMSUBJECTS, 1, (float32_t *)testUnity_f32}; + arm_matrix_instance_f32 dstC = {NUMSTUDENTS, 1, testOutput}; + +#endif + + + /* ---------------------------------------------------------------------- + *Call the Matrix multiplication process function + * ------------------------------------------------------------------- */ + arm_mat_mult_f32(&srcA, &srcB, &dstC); + + /* ---------------------------------------------------------------------- + ** Call the Max function to calculate max marks among numStudents + ** ------------------------------------------------------------------- */ + arm_max_f32(testOutput, numStudents, &max_marks, &student_num); + + /* ---------------------------------------------------------------------- + ** Call the Min function to calculate min marks among numStudents + ** ------------------------------------------------------------------- */ + arm_min_f32(testOutput, numStudents, &min_marks, &student_num); + + /* ---------------------------------------------------------------------- + ** Call the Mean function to calculate mean + ** ------------------------------------------------------------------- */ + arm_mean_f32(testOutput, numStudents, &mean); + + /* ---------------------------------------------------------------------- + ** Call the std function to calculate standard deviation + ** ------------------------------------------------------------------- */ + arm_std_f32(testOutput, numStudents, &std); + + /* ---------------------------------------------------------------------- + ** Call the var function to calculate variance + ** ------------------------------------------------------------------- */ + arm_var_f32(testOutput, numStudents, &var); + + while(1); /* main function does not return */ +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/ARM/arm_convolution_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/ARM/arm_convolution_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,247 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_convolution_example_f32.c +* +* Description: Example code demonstrating Convolution of two input signals using fft. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup ConvolutionExample Convolution Example + * + * \par Description: + * \par + * Demonstrates the convolution theorem with the use of the Complex FFT, Complex-by-Complex + * Multiplication, and Support Functions. + * + * \par Algorithm: + * \par + * The convolution theorem states that convolution in the time domain corresponds to + * multiplication in the frequency domain. Therefore, the Fourier transform of the convoution of + * two signals is equal to the product of their individual Fourier transforms. + * The Fourier transform of a signal can be evaluated efficiently using the Fast Fourier Transform (FFT). + * \par + * Two input signals, a[n] and b[n], with lengths \c n1 and \c n2 respectively, + * are zero padded so that their lengths become \c N, which is greater than or equal to (n1+n2-1) + * and is a power of 4 as FFT implementation is radix-4. + * The convolution of a[n] and b[n] is obtained by taking the FFT of the input + * signals, multiplying the Fourier transforms of the two signals, and taking the inverse FFT of + * the multiplied result. + * \par + * This is denoted by the following equations: + *
 A[k] = FFT(a[n],N)
+ * B[k] = FFT(b[n],N)
+ * conv(a[n], b[n]) = IFFT(A[k] * B[k], N)
+ * where A[k] and B[k] are the N-point FFTs of the signals a[n] + * and b[n] respectively. + * The length of the convolved signal is (n1+n2-1). + * + * \par Block Diagram: + * \par + * \image html Convolution.gif + * + * \par Variables Description: + * \par + * \li \c testInputA_f32 points to the first input sequence + * \li \c srcALen length of the first input sequence + * \li \c testInputB_f32 points to the second input sequence + * \li \c srcBLen length of the second input sequence + * \li \c outLen length of convolution output sequence, (srcALen + srcBLen - 1) + * \li \c AxB points to the output array where the product of individual FFTs of inputs is stored. + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_fill_f32() + * - arm_copy_f32() + * - arm_cfft_radix4_init_f32() + * - arm_cfft_radix4_f32() + * - arm_cmplx_mult_cmplx_f32() + * + * Refer + * \link arm_convolution_example_f32.c \endlink + * + */ + + +/** \example arm_convolution_example_f32.c + */ + +#include "arm_math.h" +#include "math_helper.h" + +/* ---------------------------------------------------------------------- +* Defines each of the tests performed +* ------------------------------------------------------------------- */ +#define MAX_BLOCKSIZE 128 +#define DELTA (0.000001f) +#define SNR_THRESHOLD 90 + +/* ---------------------------------------------------------------------- +* Declare I/O buffers +* ------------------------------------------------------------------- */ +float32_t Ak[MAX_BLOCKSIZE]; /* Input A */ +float32_t Bk[MAX_BLOCKSIZE]; /* Input B */ +float32_t AxB[MAX_BLOCKSIZE * 2]; /* Output */ + +/* ---------------------------------------------------------------------- +* Test input data for Floating point Convolution example for 32-blockSize +* Generated by the MATLAB randn() function +* ------------------------------------------------------------------- */ +float32_t testInputA_f32[64] = +{ + -0.808920, 1.357369, 1.180861, -0.504544, 1.762637, -0.703285, + 1.696966, 0.620571, -0.151093, -0.100235, -0.872382, -0.403579, + -0.860749, -0.382648, -1.052338, 0.128113, -0.646269, 1.093377, + -2.209198, 0.471706, 0.408901, 1.266242, 0.598252, 1.176827, + -0.203421, 0.213596, -0.851964, -0.466958, 0.021841, -0.698938, + -0.604107, 0.461778, -0.318219, 0.942520, 0.577585, 0.417619, + 0.614665, 0.563679, -1.295073, -0.764437, 0.952194, -0.859222, + -0.618554, -2.268542, -1.210592, 1.655853, -2.627219, -0.994249, + -1.374704, 0.343799, 0.025619, 1.227481, -0.708031, 0.069355, + -1.845228, -1.570886, 1.010668, -1.802084, 1.630088, 1.286090, + -0.161050, -0.940794, 0.367961, 0.291907 + +}; + +float32_t testInputB_f32[64] = +{ + 0.933724, 0.046881, 1.316470, 0.438345, 0.332682, 2.094885, + 0.512081, 0.035546, 0.050894, -2.320371, 0.168711, -1.830493, + -0.444834, -1.003242, -0.531494, -1.365600, -0.155420, -0.757692, + -0.431880, -0.380021, 0.096243, -0.695835, 0.558850, -1.648962, + 0.020369, -0.363630, 0.887146, 0.845503, -0.252864, -0.330397, + 1.269131, -1.109295, -1.027876, 0.135940, 0.116721, -0.293399, + -1.349799, 0.166078, -0.802201, 0.369367, -0.964568, -2.266011, + 0.465178, 0.651222, -0.325426, 0.320245, -0.784178, -0.579456, + 0.093374, 0.604778, -0.048225, 0.376297, -0.394412, 0.578182, + -1.218141, -1.387326, 0.692462, -0.631297, 0.153137, -0.638952, + 0.635474, -0.970468, 1.334057, -0.111370 +}; + +const float testRefOutput_f32[127] = +{ + -0.818943, 1.229484, -0.533664, 1.016604, 0.341875, -1.963656, + 5.171476, 3.478033, 7.616361, 6.648384, 0.479069, 1.792012, + -1.295591, -7.447818, 0.315830, -10.657445, -2.483469, -6.524236, + -7.380591, -3.739005, -8.388957, 0.184147, -1.554888, 3.786508, + -1.684421, 5.400610, -1.578126, 7.403361, 8.315999, 2.080267, + 11.077776, 2.749673, 7.138962, 2.748762, 0.660363, 0.981552, + 1.442275, 0.552721, -2.576892, 4.703989, 0.989156, 8.759344, + -0.564825, -3.994680, 0.954710, -5.014144, 6.592329, 1.599488, + -13.979146, -0.391891, -4.453369, -2.311242, -2.948764, 1.761415, + -0.138322, 10.433007, -2.309103, 4.297153, 8.535523, 3.209462, + 8.695819, 5.569919, 2.514304, 5.582029, 2.060199, 0.642280, + 7.024616, 1.686615, -6.481756, 1.343084, -3.526451, 1.099073, + -2.965764, -0.173723, -4.111484, 6.528384, -6.965658, 1.726291, + 1.535172, 11.023435, 2.338401, -4.690188, 1.298210, 3.943885, + 8.407885, 5.168365, 0.684131, 1.559181, 1.859998, 2.852417, + 8.574070, -6.369078, 6.023458, 11.837963, -6.027632, 4.469678, + -6.799093, -2.674048, 6.250367, -6.809971, -3.459360, 9.112410, + -2.711621, -1.336678, 1.564249, -1.564297, -1.296760, 8.904013, + -3.230109, 6.878013, -7.819823, 3.369909, -1.657410, -2.007358, + -4.112825, 1.370685, -3.420525, -6.276605, 3.244873, -3.352638, + 1.545372, 0.902211, 0.197489, -1.408732, 0.523390, 0.348440, 0 +}; + + +/* ---------------------------------------------------------------------- +* Declare Global variables +* ------------------------------------------------------------------- */ +uint32_t srcALen = 64; /* Length of Input A */ +uint32_t srcBLen = 64; /* Length of Input B */ +uint32_t outLen; /* Length of convolution output */ +float32_t snr; /* output SNR */ + +int32_t main(void) +{ + arm_status status; /* Status of the example */ + arm_cfft_radix4_instance_f32 cfft_instance; /* CFFT Structure instance */ + + /* CFFT Structure instance pointer */ + arm_cfft_radix4_instance_f32 *cfft_instance_ptr = + (arm_cfft_radix4_instance_f32*) &cfft_instance; + + /* output length of convolution */ + outLen = srcALen + srcBLen - 1; + + /* Initialise the fft input buffers with all zeros */ + arm_fill_f32(0.0, Ak, MAX_BLOCKSIZE); + arm_fill_f32(0.0, Bk, MAX_BLOCKSIZE); + + /* Copy the input values to the fft input buffers */ + arm_copy_f32(testInputA_f32, Ak, MAX_BLOCKSIZE/2); + arm_copy_f32(testInputB_f32, Bk, MAX_BLOCKSIZE/2); + + /* Initialize the CFFT function to compute 64 point fft */ + status = arm_cfft_radix4_init_f32(cfft_instance_ptr, 64, 0, 1); + + /* Transform input a[n] from time domain to frequency domain A[k] */ + arm_cfft_radix4_f32(cfft_instance_ptr, Ak); + /* Transform input b[n] from time domain to frequency domain B[k] */ + arm_cfft_radix4_f32(cfft_instance_ptr, Bk); + + /* Complex Multiplication of the two input buffers in frequency domain */ + arm_cmplx_mult_cmplx_f32(Ak, Bk, AxB, MAX_BLOCKSIZE/2); + + /* Initialize the CIFFT function to compute 64 point ifft */ + status = arm_cfft_radix4_init_f32(cfft_instance_ptr, 64, 1, 1); + + /* Transform the multiplication output from frequency domain to time domain, + that gives the convolved output */ + arm_cfft_radix4_f32(cfft_instance_ptr, AxB); + + /* SNR Calculation */ + snr = arm_snr_f32((float32_t *)testRefOutput_f32, AxB, srcALen + srcBLen - 1); + + /* Compare the SNR with threshold to test whether the + computed output is matched with the reference output values. */ + if( snr > SNR_THRESHOLD) + { + status = ARM_MATH_SUCCESS; + } + + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/ARM/math_helper.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/ARM/math_helper.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,458 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param float* Pointer to the reference buffer + * @param float* Pointer to the test buffer + * @param uint32_t total number of samples + * @return float SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param q15_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q15_t* Pointer to Ref buffer + * @param q15_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q31_t* Pointer to Ref buffer + * @param q31_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param uint32_t number of additions + * @return none + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Converts Q15 to floating-point + * @param uint32_t number of samples in the buffer + * @return none + */ + +void arm_apply_guard_bits (float32_t * pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param uint32_t number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param pIn input buffer + * @param numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if(pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/ARM/math_helper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/ARM/math_helper.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/GCC/arm_convolution_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/GCC/arm_convolution_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,247 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_convolution_example_f32.c +* +* Description: Example code demonstrating Convolution of two input signals using fft. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup ConvolutionExample Convolution Example + * + * \par Description: + * \par + * Demonstrates the convolution theorem with the use of the Complex FFT, Complex-by-Complex + * Multiplication, and Support Functions. + * + * \par Algorithm: + * \par + * The convolution theorem states that convolution in the time domain corresponds to + * multiplication in the frequency domain. Therefore, the Fourier transform of the convoution of + * two signals is equal to the product of their individual Fourier transforms. + * The Fourier transform of a signal can be evaluated efficiently using the Fast Fourier Transform (FFT). + * \par + * Two input signals, a[n] and b[n], with lengths \c n1 and \c n2 respectively, + * are zero padded so that their lengths become \c N, which is greater than or equal to (n1+n2-1) + * and is a power of 4 as FFT implementation is radix-4. + * The convolution of a[n] and b[n] is obtained by taking the FFT of the input + * signals, multiplying the Fourier transforms of the two signals, and taking the inverse FFT of + * the multiplied result. + * \par + * This is denoted by the following equations: + *
 A[k] = FFT(a[n],N)
+ * B[k] = FFT(b[n],N)
+ * conv(a[n], b[n]) = IFFT(A[k] * B[k], N)
+ * where A[k] and B[k] are the N-point FFTs of the signals a[n] + * and b[n] respectively. + * The length of the convolved signal is (n1+n2-1). + * + * \par Block Diagram: + * \par + * \image html Convolution.gif + * + * \par Variables Description: + * \par + * \li \c testInputA_f32 points to the first input sequence + * \li \c srcALen length of the first input sequence + * \li \c testInputB_f32 points to the second input sequence + * \li \c srcBLen length of the second input sequence + * \li \c outLen length of convolution output sequence, (srcALen + srcBLen - 1) + * \li \c AxB points to the output array where the product of individual FFTs of inputs is stored. + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_fill_f32() + * - arm_copy_f32() + * - arm_cfft_radix4_init_f32() + * - arm_cfft_radix4_f32() + * - arm_cmplx_mult_cmplx_f32() + * + * Refer + * \link arm_convolution_example_f32.c \endlink + * + */ + + +/** \example arm_convolution_example_f32.c + */ + +#include "arm_math.h" +#include "math_helper.h" + +/* ---------------------------------------------------------------------- +* Defines each of the tests performed +* ------------------------------------------------------------------- */ +#define MAX_BLOCKSIZE 128 +#define DELTA (0.000001f) +#define SNR_THRESHOLD 90 + +/* ---------------------------------------------------------------------- +* Declare I/O buffers +* ------------------------------------------------------------------- */ +float32_t Ak[MAX_BLOCKSIZE]; /* Input A */ +float32_t Bk[MAX_BLOCKSIZE]; /* Input B */ +float32_t AxB[MAX_BLOCKSIZE * 2]; /* Output */ + +/* ---------------------------------------------------------------------- +* Test input data for Floating point Convolution example for 32-blockSize +* Generated by the MATLAB randn() function +* ------------------------------------------------------------------- */ +float32_t testInputA_f32[64] = +{ + -0.808920, 1.357369, 1.180861, -0.504544, 1.762637, -0.703285, + 1.696966, 0.620571, -0.151093, -0.100235, -0.872382, -0.403579, + -0.860749, -0.382648, -1.052338, 0.128113, -0.646269, 1.093377, + -2.209198, 0.471706, 0.408901, 1.266242, 0.598252, 1.176827, + -0.203421, 0.213596, -0.851964, -0.466958, 0.021841, -0.698938, + -0.604107, 0.461778, -0.318219, 0.942520, 0.577585, 0.417619, + 0.614665, 0.563679, -1.295073, -0.764437, 0.952194, -0.859222, + -0.618554, -2.268542, -1.210592, 1.655853, -2.627219, -0.994249, + -1.374704, 0.343799, 0.025619, 1.227481, -0.708031, 0.069355, + -1.845228, -1.570886, 1.010668, -1.802084, 1.630088, 1.286090, + -0.161050, -0.940794, 0.367961, 0.291907 + +}; + +float32_t testInputB_f32[64] = +{ + 0.933724, 0.046881, 1.316470, 0.438345, 0.332682, 2.094885, + 0.512081, 0.035546, 0.050894, -2.320371, 0.168711, -1.830493, + -0.444834, -1.003242, -0.531494, -1.365600, -0.155420, -0.757692, + -0.431880, -0.380021, 0.096243, -0.695835, 0.558850, -1.648962, + 0.020369, -0.363630, 0.887146, 0.845503, -0.252864, -0.330397, + 1.269131, -1.109295, -1.027876, 0.135940, 0.116721, -0.293399, + -1.349799, 0.166078, -0.802201, 0.369367, -0.964568, -2.266011, + 0.465178, 0.651222, -0.325426, 0.320245, -0.784178, -0.579456, + 0.093374, 0.604778, -0.048225, 0.376297, -0.394412, 0.578182, + -1.218141, -1.387326, 0.692462, -0.631297, 0.153137, -0.638952, + 0.635474, -0.970468, 1.334057, -0.111370 +}; + +const float testRefOutput_f32[127] = +{ + -0.818943, 1.229484, -0.533664, 1.016604, 0.341875, -1.963656, + 5.171476, 3.478033, 7.616361, 6.648384, 0.479069, 1.792012, + -1.295591, -7.447818, 0.315830, -10.657445, -2.483469, -6.524236, + -7.380591, -3.739005, -8.388957, 0.184147, -1.554888, 3.786508, + -1.684421, 5.400610, -1.578126, 7.403361, 8.315999, 2.080267, + 11.077776, 2.749673, 7.138962, 2.748762, 0.660363, 0.981552, + 1.442275, 0.552721, -2.576892, 4.703989, 0.989156, 8.759344, + -0.564825, -3.994680, 0.954710, -5.014144, 6.592329, 1.599488, + -13.979146, -0.391891, -4.453369, -2.311242, -2.948764, 1.761415, + -0.138322, 10.433007, -2.309103, 4.297153, 8.535523, 3.209462, + 8.695819, 5.569919, 2.514304, 5.582029, 2.060199, 0.642280, + 7.024616, 1.686615, -6.481756, 1.343084, -3.526451, 1.099073, + -2.965764, -0.173723, -4.111484, 6.528384, -6.965658, 1.726291, + 1.535172, 11.023435, 2.338401, -4.690188, 1.298210, 3.943885, + 8.407885, 5.168365, 0.684131, 1.559181, 1.859998, 2.852417, + 8.574070, -6.369078, 6.023458, 11.837963, -6.027632, 4.469678, + -6.799093, -2.674048, 6.250367, -6.809971, -3.459360, 9.112410, + -2.711621, -1.336678, 1.564249, -1.564297, -1.296760, 8.904013, + -3.230109, 6.878013, -7.819823, 3.369909, -1.657410, -2.007358, + -4.112825, 1.370685, -3.420525, -6.276605, 3.244873, -3.352638, + 1.545372, 0.902211, 0.197489, -1.408732, 0.523390, 0.348440, 0 +}; + + +/* ---------------------------------------------------------------------- +* Declare Global variables +* ------------------------------------------------------------------- */ +uint32_t srcALen = 64; /* Length of Input A */ +uint32_t srcBLen = 64; /* Length of Input B */ +uint32_t outLen; /* Length of convolution output */ +float32_t snr; /* output SNR */ + +int32_t main(void) +{ + arm_status status; /* Status of the example */ + arm_cfft_radix4_instance_f32 cfft_instance; /* CFFT Structure instance */ + + /* CFFT Structure instance pointer */ + arm_cfft_radix4_instance_f32 *cfft_instance_ptr = + (arm_cfft_radix4_instance_f32*) &cfft_instance; + + /* output length of convolution */ + outLen = srcALen + srcBLen - 1; + + /* Initialise the fft input buffers with all zeros */ + arm_fill_f32(0.0, Ak, MAX_BLOCKSIZE); + arm_fill_f32(0.0, Bk, MAX_BLOCKSIZE); + + /* Copy the input values to the fft input buffers */ + arm_copy_f32(testInputA_f32, Ak, MAX_BLOCKSIZE/2); + arm_copy_f32(testInputB_f32, Bk, MAX_BLOCKSIZE/2); + + /* Initialize the CFFT function to compute 64 point fft */ + status = arm_cfft_radix4_init_f32(cfft_instance_ptr, 64, 0, 1); + + /* Transform input a[n] from time domain to frequency domain A[k] */ + arm_cfft_radix4_f32(cfft_instance_ptr, Ak); + /* Transform input b[n] from time domain to frequency domain B[k] */ + arm_cfft_radix4_f32(cfft_instance_ptr, Bk); + + /* Complex Multiplication of the two input buffers in frequency domain */ + arm_cmplx_mult_cmplx_f32(Ak, Bk, AxB, MAX_BLOCKSIZE/2); + + /* Initialize the CIFFT function to compute 64 point ifft */ + status = arm_cfft_radix4_init_f32(cfft_instance_ptr, 64, 1, 1); + + /* Transform the multiplication output from frequency domain to time domain, + that gives the convolved output */ + arm_cfft_radix4_f32(cfft_instance_ptr, AxB); + + /* SNR Calculation */ + snr = arm_snr_f32((float32_t *)testRefOutput_f32, AxB, srcALen + srcBLen - 1); + + /* Compare the SNR with threshold to test whether the + computed output is matched with the reference output values. */ + if( snr > SNR_THRESHOLD) + { + status = ARM_MATH_SUCCESS; + } + + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/GCC/math_helper.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/GCC/math_helper.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,458 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param float* Pointer to the reference buffer + * @param float* Pointer to the test buffer + * @param uint32_t total number of samples + * @return float SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param q15_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q15_t* Pointer to Ref buffer + * @param q15_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q31_t* Pointer to Ref buffer + * @param q31_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param uint32_t number of additions + * @return none + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Converts Q15 to floating-point + * @param uint32_t number of samples in the buffer + * @return none + */ + +void arm_apply_guard_bits (float32_t * pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param uint32_t number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param pIn input buffer + * @param numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if(pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/GCC/math_helper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_convolution_example/GCC/math_helper.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_dotproduct_example/ARM/arm_dotproduct_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_dotproduct_example/ARM/arm_dotproduct_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,178 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_dotproduct_example_f32.c +* +* Description: Example code computing dot product of two vectors. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup DotproductExample Dot Product Example + * + * \par Description: + * \par + * Demonstrates the use of the Multiply and Add functions to perform the dot product. + * The dot product of two vectors is obtained by multiplying corresponding elements + * and summing the products. + + * \par Algorithm: + * \par + * The two input vectors \c A and \c B with length \c n, are multiplied element-by-element + * and then added to obtain dot product. + * \par + * This is denoted by the following equation: + *
  dotProduct = A[0] * B[0] + A[1] * B[1] + ... + A[n-1] * B[n-1]
+ * + * \par Block Diagram: + * \par + * \image html dotProduct.gif + * + * \par Variables Description: + * \par + * \li \c srcA_buf_f32 points to first input vector + * \li \c srcB_buf_f32 points to second input vector + * \li \c testOutput stores dot product of the two input vectors. + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_mult_f32() + * - arm_add_f32() + * + * Refer + * \link arm_dotproduct_example_f32.c \endlink + * + */ + + +/** \example arm_dotproduct_example_f32.c + */ + +#include +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +* Defines each of the tests performed +* ------------------------------------------------------------------- */ +#define MAX_BLOCKSIZE 32 +#define DELTA (0.000001f) + +/* ---------------------------------------------------------------------- +* Test input data for Floating point Dot Product example for 32-blockSize +* Generated by the MATLAB randn() function +* ------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- +** Test input data of srcA for blockSize 32 +** ------------------------------------------------------------------- */ +float32_t srcA_buf_f32[MAX_BLOCKSIZE] = +{ + -0.4325648115282207, -1.6655843782380970, 0.1253323064748307, + 0.2876764203585489, -1.1464713506814637, 1.1909154656429988, + 1.1891642016521031, -0.0376332765933176, 0.3272923614086541, + 0.1746391428209245, -0.1867085776814394, 0.7257905482933027, + -0.5883165430141887, 2.1831858181971011, -0.1363958830865957, + 0.1139313135208096, 1.0667682113591888, 0.0592814605236053, + -0.0956484054836690, -0.8323494636500225, 0.2944108163926404, + -1.3361818579378040, 0.7143245518189522, 1.6235620644462707, + -0.6917757017022868, 0.8579966728282626, 1.2540014216025324, + -1.5937295764474768, -1.4409644319010200, 0.5711476236581780, + -0.3998855777153632, 0.6899973754643451 +}; + +/* ---------------------------------------------------------------------- +** Test input data of srcB for blockSize 32 +** ------------------------------------------------------------------- */ +float32_t srcB_buf_f32[MAX_BLOCKSIZE] = +{ + 1.7491401329284098, 0.1325982188803279, 0.3252281811989881, + -0.7938091410349637, 0.3149236145048914, -0.5272704888029532, + 0.9322666565031119, 1.1646643544607362, -2.0456694357357357, + -0.6443728590041911, 1.7410657940825480, 0.4867684246821860, + 1.0488288293660140, 1.4885752747099299, 1.2705014969484090, + -1.8561241921210170, 2.1343209047321410, 1.4358467535865909, + -0.9173023332875400, -1.1060770780029008, 0.8105708062681296, + 0.6985430696369063, -0.4015827425012831, 1.2687512030669628, + -0.7836083053674872, 0.2132664971465569, 0.7878984786088954, + 0.8966819356782295, -0.1869172943544062, 1.0131816724341454, + 0.2484350696132857, 0.0596083377937976 +}; + +/* Reference dot product output */ +float32_t refDotProdOut = 5.9273644806352142; + +/* ---------------------------------------------------------------------- +* Declare Global variables +* ------------------------------------------------------------------- */ +float32_t multOutput[MAX_BLOCKSIZE]; /* Intermediate output */ +float32_t testOutput; /* Final ouput */ + +arm_status status; /* Status of the example */ + +int32_t main(void) +{ + uint32_t i; /* Loop counter */ + float32_t diff; /* Difference between reference and test outputs */ + + /* Multiplication of two input buffers */ + arm_mult_f32(srcA_buf_f32, srcB_buf_f32, multOutput, MAX_BLOCKSIZE); + + /* Accumulate the multiplication output values to + get the dot product of the two inputs */ + for(i=0; i< MAX_BLOCKSIZE; i++) + { + arm_add_f32(&testOutput, &multOutput[i], &testOutput, 1); + } + + /* absolute value of difference between ref and test */ + diff = fabsf(refDotProdOut - testOutput); + + /* Comparison of dot product value with reference */ + if(diff > DELTA) + { + status = ARM_MATH_TEST_FAILURE; + } + + if( status == ARM_MATH_TEST_FAILURE) + { + while(1); + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_dotproduct_example/GCC/arm_dotproduct_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_dotproduct_example/GCC/arm_dotproduct_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,178 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_dotproduct_example_f32.c +* +* Description: Example code computing dot product of two vectors. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup DotproductExample Dot Product Example + * + * \par Description: + * \par + * Demonstrates the use of the Multiply and Add functions to perform the dot product. + * The dot product of two vectors is obtained by multiplying corresponding elements + * and summing the products. + + * \par Algorithm: + * \par + * The two input vectors \c A and \c B with length \c n, are multiplied element-by-element + * and then added to obtain dot product. + * \par + * This is denoted by the following equation: + *
  dotProduct = A[0] * B[0] + A[1] * B[1] + ... + A[n-1] * B[n-1]
+ * + * \par Block Diagram: + * \par + * \image html dotProduct.gif + * + * \par Variables Description: + * \par + * \li \c srcA_buf_f32 points to first input vector + * \li \c srcB_buf_f32 points to second input vector + * \li \c testOutput stores dot product of the two input vectors. + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_mult_f32() + * - arm_add_f32() + * + * Refer + * \link arm_dotproduct_example_f32.c \endlink + * + */ + + +/** \example arm_dotproduct_example_f32.c + */ + +#include +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +* Defines each of the tests performed +* ------------------------------------------------------------------- */ +#define MAX_BLOCKSIZE 32 +#define DELTA (0.000001f) + +/* ---------------------------------------------------------------------- +* Test input data for Floating point Dot Product example for 32-blockSize +* Generated by the MATLAB randn() function +* ------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- +** Test input data of srcA for blockSize 32 +** ------------------------------------------------------------------- */ +float32_t srcA_buf_f32[MAX_BLOCKSIZE] = +{ + -0.4325648115282207, -1.6655843782380970, 0.1253323064748307, + 0.2876764203585489, -1.1464713506814637, 1.1909154656429988, + 1.1891642016521031, -0.0376332765933176, 0.3272923614086541, + 0.1746391428209245, -0.1867085776814394, 0.7257905482933027, + -0.5883165430141887, 2.1831858181971011, -0.1363958830865957, + 0.1139313135208096, 1.0667682113591888, 0.0592814605236053, + -0.0956484054836690, -0.8323494636500225, 0.2944108163926404, + -1.3361818579378040, 0.7143245518189522, 1.6235620644462707, + -0.6917757017022868, 0.8579966728282626, 1.2540014216025324, + -1.5937295764474768, -1.4409644319010200, 0.5711476236581780, + -0.3998855777153632, 0.6899973754643451 +}; + +/* ---------------------------------------------------------------------- +** Test input data of srcB for blockSize 32 +** ------------------------------------------------------------------- */ +float32_t srcB_buf_f32[MAX_BLOCKSIZE] = +{ + 1.7491401329284098, 0.1325982188803279, 0.3252281811989881, + -0.7938091410349637, 0.3149236145048914, -0.5272704888029532, + 0.9322666565031119, 1.1646643544607362, -2.0456694357357357, + -0.6443728590041911, 1.7410657940825480, 0.4867684246821860, + 1.0488288293660140, 1.4885752747099299, 1.2705014969484090, + -1.8561241921210170, 2.1343209047321410, 1.4358467535865909, + -0.9173023332875400, -1.1060770780029008, 0.8105708062681296, + 0.6985430696369063, -0.4015827425012831, 1.2687512030669628, + -0.7836083053674872, 0.2132664971465569, 0.7878984786088954, + 0.8966819356782295, -0.1869172943544062, 1.0131816724341454, + 0.2484350696132857, 0.0596083377937976 +}; + +/* Reference dot product output */ +float32_t refDotProdOut = 5.9273644806352142; + +/* ---------------------------------------------------------------------- +* Declare Global variables +* ------------------------------------------------------------------- */ +float32_t multOutput[MAX_BLOCKSIZE]; /* Intermediate output */ +float32_t testOutput; /* Final ouput */ + +arm_status status; /* Status of the example */ + +int32_t main(void) +{ + uint32_t i; /* Loop counter */ + float32_t diff; /* Difference between reference and test outputs */ + + /* Multiplication of two input buffers */ + arm_mult_f32(srcA_buf_f32, srcB_buf_f32, multOutput, MAX_BLOCKSIZE); + + /* Accumulate the multiplication output values to + get the dot product of the two inputs */ + for(i=0; i< MAX_BLOCKSIZE; i++) + { + arm_add_f32(&testOutput, &multOutput[i], &testOutput, 1); + } + + /* absolute value of difference between ref and test */ + diff = fabsf(refDotProdOut - testOutput); + + /* Comparison of dot product value with reference */ + if(diff > DELTA) + { + status = ARM_MATH_TEST_FAILURE; + } + + if( status == ARM_MATH_TEST_FAILURE) + { + while(1); + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fft_bin_example/ARM/arm_fft_bin_data.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fft_bin_example/ARM/arm_fft_bin_data.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,308 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_fft_bin_data.c +* +* Description: Data file used for example code +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +Test Input signal contains 10KHz signal + Uniformly distributed white noise +** ------------------------------------------------------------------- */ + +float32_t testInput_f32_10khz[2048] = +{ +-0.865129623056441, 0.000000000000000, -2.655020678073846, 0.000000000000000, 0.600664612949661, 0.000000000000000, 0.080378093886515, 0.000000000000000, +-2.899160484012034, 0.000000000000000, 2.563004262857762, 0.000000000000000, 3.078328403304206, 0.000000000000000, 0.105906778385130, 0.000000000000000, +0.048366940168201, 0.000000000000000, -0.145696461188734, 0.000000000000000, -0.023417155362879, 0.000000000000000, 2.127729174988954, 0.000000000000000, +-1.176633086028377, 0.000000000000000, 3.690223557991855, 0.000000000000000, -0.622791766173194, 0.000000000000000, 0.722837373872203, 0.000000000000000, +2.739754205367484, 0.000000000000000, -0.062610410524552, 0.000000000000000, -0.891296810967338, 0.000000000000000, -1.845872258871811, 0.000000000000000, +1.195039415434387, 0.000000000000000, -2.177388969045026, 0.000000000000000, 1.078649103637905, 0.000000000000000, 2.570976050490193, 0.000000000000000, +-1.383551403404574, 0.000000000000000, 2.392141424058873, 0.000000000000000, 2.858002843205065, 0.000000000000000, -3.682433899725536, 0.000000000000000, +-3.488146646451150, 0.000000000000000, 1.323468578888120, 0.000000000000000, -0.099771155430726, 0.000000000000000, 1.561168082500454, 0.000000000000000, +1.025026795103179, 0.000000000000000, 0.928841900171200, 0.000000000000000, 2.930499509864950, 0.000000000000000, 2.013349089766430, 0.000000000000000, +2.381676148486737, 0.000000000000000, -3.081062307950236, 0.000000000000000, -0.389579115537544, 0.000000000000000, 0.181540149166620, 0.000000000000000, +-2.601953341353208, 0.000000000000000, 0.333435137783218, 0.000000000000000, -2.812945856162965, 0.000000000000000, 2.649109640172910, 0.000000000000000, +-1.003963025744654, 0.000000000000000, 1.552460768755035, 0.000000000000000, 0.088641345335247, 0.000000000000000, -2.519951327113426, 0.000000000000000, +-4.341348988610527, 0.000000000000000, 0.557772429359965, 0.000000000000000, -1.671267412948494, 0.000000000000000, 0.733951350960387, 0.000000000000000, +0.409263788034864, 0.000000000000000, 3.566033071952806, 0.000000000000000, 1.882565173848352, 0.000000000000000, -1.106017073793287, 0.000000000000000, +0.154456720778718, 0.000000000000000, -2.513205795512153, 0.000000000000000, 0.310978660939421, 0.000000000000000, 0.579706500111723, 0.000000000000000, +0.000086383683251, 0.000000000000000, -1.311866980897721, 0.000000000000000, 1.840007477574986, 0.000000000000000, -3.253005768451345, 0.000000000000000, +1.462584328739432, 0.000000000000000, 1.610103610851738, 0.000000000000000, 0.761914676858907, 0.000000000000000, 0.974541361089834, 0.000000000000000, +0.686845845885983, 0.000000000000000, 1.849153122025191, 0.000000000000000, 0.787800410401453, 0.000000000000000, -1.187438909666279, 0.000000000000000, +-0.754937911044720, 0.000000000000000, 0.084373858395232, 0.000000000000000, -2.600269011710521, 0.000000000000000, -0.962982842142644, 0.000000000000000, +-0.369328108540868, 0.000000000000000, 0.810791418361879, 0.000000000000000, 3.587016488699641, 0.000000000000000, -0.520776145083723, 0.000000000000000, +0.640249919627884, 0.000000000000000, 1.103122489464969, 0.000000000000000, 2.231779881455556, 0.000000000000000, -1.308035392685241, 0.000000000000000, +0.424070304330106, 0.000000000000000, -0.200383932651189, 0.000000000000000, -2.365526783356541, 0.000000000000000, -0.989114757436628, 0.000000000000000, +2.770807688959777, 0.000000000000000, -0.444172737462307, 0.000000000000000, 0.079760979374078, 0.000000000000000, -0.005199118412183, 0.000000000000000, +-0.664712668309527, 0.000000000000000, -0.624171857561896, 0.000000000000000, 0.537306979007338, 0.000000000000000, -2.575955675497642, 0.000000000000000, +1.562363235756780, 0.000000000000000, 1.814069369848895, 0.000000000000000, -1.293428583392509, 0.000000000000000, -1.026188449495686, 0.000000000000000, +-2.981771815588717, 0.000000000000000, -4.223468103075124, 0.000000000000000, 2.672674782004045, 0.000000000000000, -0.856096801117735, 0.000000000000000, +0.048517345512563, 0.000000000000000, -0.026860721136222, 0.000000000000000, 0.392932277758187, 0.000000000000000, -1.331740855093099, 0.000000000000000, +-1.894292129477081, 0.000000000000000, -1.425006468460681, 0.000000000000000, -2.721772427617057, 0.000000000000000, -1.616831100216806, 0.000000000000000, +3.551177651488947, 0.000000000000000, -0.069685667896087, 0.000000000000000, -3.134634907409102, 0.000000000000000, -0.263627598944639, 0.000000000000000, +-1.650469945991350, 0.000000000000000, -2.203580339374399, 0.000000000000000, -0.872203246123242, 0.000000000000000, 1.230782812607287, 0.000000000000000, +0.257288860093291, 0.000000000000000, 1.989083106173137, 0.000000000000000, -1.985638729453261, 0.000000000000000, -1.416185105842892, 0.000000000000000, +-1.131097688325772, 0.000000000000000, -2.245130805416057, 0.000000000000000, -1.938873996219074, 0.000000000000000, 2.043608361562645, 0.000000000000000, +-0.583727989880841, 0.000000000000000, -1.785266378212929, 0.000000000000000, 1.961457586224753, 0.000000000000000, 1.139400099963223, 0.000000000000000, +-1.979519343363991, 0.000000000000000, 2.003023322818429, 0.000000000000000, 0.229004069076829, 0.000000000000000, 3.452808862193135, 0.000000000000000, +2.882273808365857, 0.000000000000000, -1.549450501844438, 0.000000000000000, -3.283872089931876, 0.000000000000000, -0.327025884099064, 0.000000000000000, +-0.054979977136430, 0.000000000000000, -1.192280531479012, 0.000000000000000, 0.645539328365578, 0.000000000000000, 2.300832863404618, 0.000000000000000, +-1.092951789535240, 0.000000000000000, -1.017368249363773, 0.000000000000000, -0.142673056169787, 0.000000000000000, 0.831073544881250, 0.000000000000000, +-2.314612531587064, 0.000000000000000, -2.221456299106321, 0.000000000000000, 0.460261143885226, 0.000000000000000, 0.050585301888595, 0.000000000000000, +0.364373329183988, 0.000000000000000, -1.685956552069538, 0.000000000000000, 0.050664512351055, 0.000000000000000, -0.193355783902718, 0.000000000000000, +-0.158660446046828, 0.000000000000000, 2.394156453841953, 0.000000000000000, -1.562965718554525, 0.000000000000000, -2.199750600869900, 0.000000000000000, +1.544984022381773, 0.000000000000000, -1.988307216807315, 0.000000000000000, -0.628240722541046, 0.000000000000000, -1.436235771505429, 0.000000000000000, +1.677013691147313, 0.000000000000000, 1.600741781678228, 0.000000000000000, -0.757380959134706, 0.000000000000000, -4.784797439515566, 0.000000000000000, +0.265121462834569, 0.000000000000000, 3.862029485934378, 0.000000000000000, 2.386823577249430, 0.000000000000000, -3.655779745436893, 0.000000000000000, +-0.763541621368016, 0.000000000000000, -1.182140388432962, 0.000000000000000, -1.349106114858063, 0.000000000000000, -2.287533624396759, 0.000000000000000, +-0.028603745188423, 0.000000000000000, -1.353580755934427, 0.000000000000000, 0.461602380352937, 0.000000000000000, -0.059599055078928, 0.000000000000000, +-0.929946734342228, 0.000000000000000, 0.065773089295561, 0.000000000000000, 1.106565863102982, 0.000000000000000, 4.719295086373593, 0.000000000000000, +-2.108377703544395, 0.000000000000000, -2.226393620240159, 0.000000000000000, 1.375668397437521, 0.000000000000000, -0.960772428525443, 0.000000000000000, +-2.156313465390571, 0.000000000000000, 1.126060012375311, 0.000000000000000, 2.756485137030720, 0.000000000000000, 0.739639690862600, 0.000000000000000, +3.914769510295006, 0.000000000000000, 1.685232785586675, 0.000000000000000, 4.079058040970612, 0.000000000000000, -1.174598301660513, 0.000000000000000, +-2.885776587275580, 0.000000000000000, -0.241073635188767, 0.000000000000000, 3.080489872502403, 0.000000000000000, -2.051244183999421, 0.000000000000000, +0.664330486845139, 0.000000000000000, -1.697798999370016, 0.000000000000000, 1.452369423649782, 0.000000000000000, -1.523532831019280, 0.000000000000000, +0.171981186587481, 0.000000000000000, -4.685274721583927, 0.000000000000000, -1.336175835319380, 0.000000000000000, 1.419070770428945, 0.000000000000000, +-0.035791601713475, 0.000000000000000, 2.291937971632081, 0.000000000000000, -1.962559313450293, 0.000000000000000, -4.831595589339301, 0.000000000000000, +-1.857055284000925, 0.000000000000000, 2.606271522635512, 0.000000000000000, -0.576447978738030, 0.000000000000000, 0.082299166967720, 0.000000000000000, +1.888399453494614, 0.000000000000000, -3.564705298046079, 0.000000000000000, -0.939357831083889, 0.000000000000000, -1.903578203697778, 0.000000000000000, +-2.642492215447250, 0.000000000000000, -0.182990405251017, 0.000000000000000, 3.742026478011174, 0.000000000000000, 0.104295803798333, 0.000000000000000, +1.848678195370347, 0.000000000000000, -1.887384346896369, 0.000000000000000, 0.365048973046045, 0.000000000000000, -0.889638010354219, 0.000000000000000, +1.173877118428863, 0.000000000000000, -1.178562827540109, 0.000000000000000, 0.610271645685184, 0.000000000000000, 1.831284815697871, 0.000000000000000, +0.449575390102283, 0.000000000000000, 1.597171905253443, 0.000000000000000, 3.918574971904773, 0.000000000000000, 0.868104027970404, 0.000000000000000, +0.582643134746494, 0.000000000000000, 2.321256382353331, 0.000000000000000, -0.238118642223180, 0.000000000000000, -2.890287868054370, 0.000000000000000, +0.970995414625622, 0.000000000000000, 0.666137930891283, 0.000000000000000, -0.202435718709502, 0.000000000000000, 2.057930200518194, 0.000000000000000, +3.120583443719949, 0.000000000000000, -0.863945271701041, 0.000000000000000, 0.906848893874630, 0.000000000000000, -1.434124930222570, 0.000000000000000, +0.754659384848783, 0.000000000000000, -5.224154442713778, 0.000000000000000, 2.330229744098967, 0.000000000000000, 1.113946320164698, 0.000000000000000, +0.523324920322840, 0.000000000000000, 1.750740911548348, 0.000000000000000, -0.899333972913577, 0.000000000000000, 0.228705845203506, 0.000000000000000, +-1.934782624767648, 0.000000000000000, -3.508386237231303, 0.000000000000000, -2.107108523073510, 0.000000000000000, 0.380587645474815, 0.000000000000000, +-0.476200877183279, 0.000000000000000, -2.172086712642198, 0.000000000000000, 1.795372535780299, 0.000000000000000, -2.100318983391055, 0.000000000000000, +-0.022571122461405, 0.000000000000000, 0.674514020010955, 0.000000000000000, -0.148872569390857, 0.000000000000000, 0.298175890592737, 0.000000000000000, +-1.134244492493590, 0.000000000000000, -3.146848422289455, 0.000000000000000, -1.357950199087602, 0.000000000000000, 0.667362732020878, 0.000000000000000, +-3.119397998316724, 0.000000000000000, -1.189341126297637, 0.000000000000000, -1.532744386856668, 0.000000000000000, -1.672972484202534, 0.000000000000000, +-2.042283373871558, 0.000000000000000, -1.479481547595924, 0.000000000000000, -0.002668662875396, 0.000000000000000, 0.262737760129546, 0.000000000000000, +2.734456080621830, 0.000000000000000, -0.671945925075102, 0.000000000000000, -3.735078262179111, 0.000000000000000, -0.161705013319883, 0.000000000000000, +0.748963512361001, 0.000000000000000, 1.128046374367600, 0.000000000000000, 0.649651335592966, 0.000000000000000, 1.880020215025867, 0.000000000000000, +-1.095632293842306, 0.000000000000000, 1.197764876160487, 0.000000000000000, 0.323646656252985, 0.000000000000000, -1.655502751114502, 0.000000000000000, +3.666399062961496, 0.000000000000000, -0.334060899735197, 0.000000000000000, -2.119056978738397, 0.000000000000000, 3.721375117275012, 0.000000000000000, +0.044874186872307, 0.000000000000000, -2.733053897593234, 0.000000000000000, 1.590700278891042, 0.000000000000000, 3.215711772781902, 0.000000000000000, +-1.792085012843801, 0.000000000000000, -0.405797188885475, 0.000000000000000, -0.628080020080892, 0.000000000000000, -1.831815840843960, 0.000000000000000, +2.973656862522834, 0.000000000000000, -0.212032655138417, 0.000000000000000, 0.372437389437234, 0.000000000000000, -1.614030579023492, 0.000000000000000, +-0.704900996358698, 0.000000000000000, 1.123700273452105, 0.000000000000000, -0.136371848130819, 0.000000000000000, 3.020284357635585, 0.000000000000000, +-0.550211350877649, 0.000000000000000, 5.101256236381711, 0.000000000000000, 3.367051512192333, 0.000000000000000, -4.385131946669234, 0.000000000000000, +-3.967303337694391, 0.000000000000000, -0.965894936640022, 0.000000000000000, 0.328366945264681, 0.000000000000000, 0.199041562924914, 0.000000000000000, +1.067681999025495, 0.000000000000000, -1.939516091697170, 0.000000000000000, -1.092980954328824, 0.000000000000000, 0.273786079368066, 0.000000000000000, +-0.040928322190265, 0.000000000000000, -0.118368078577437, 0.000000000000000, 1.766589628899997, 0.000000000000000, 1.738321311635393, 0.000000000000000, +-2.895012794321649, 0.000000000000000, 1.213521771395142, 0.000000000000000, 0.922971726633985, 0.000000000000000, 1.091516563636489, 0.000000000000000, +3.226378465469620, 0.000000000000000, 1.149169778666974, 0.000000000000000, -1.695986327709386, 0.000000000000000, -0.974803077355813, 0.000000000000000, +-4.898035507513607, 0.000000000000000, 1.622719302889447, 0.000000000000000, 0.583891313586579, 0.000000000000000, -1.677182424094957, 0.000000000000000, +-1.915633132814685, 0.000000000000000, -1.980150370851616, 0.000000000000000, 0.604538269404190, 0.000000000000000, 0.939862406149365, 0.000000000000000, +-1.266939874246416, 0.000000000000000, -1.494771249200063, 0.000000000000000, 0.278042784093988, 0.000000000000000, 0.326627416008916, 0.000000000000000, +-1.914530157643303, 0.000000000000000, 1.908947721862196, 0.000000000000000, 0.531819285694044, 0.000000000000000, 3.056856632319658, 0.000000000000000, +-0.389241827774643, 0.000000000000000, -2.418606606780420, 0.000000000000000, 0.915299238878703, 0.000000000000000, -0.098774174295283, 0.000000000000000, +-0.906199428444304, 0.000000000000000, 0.316716451217743, 0.000000000000000, -4.367700643578311, 0.000000000000000, 1.491687997515293, 0.000000000000000, +-1.962381126288365, 0.000000000000000, -0.700829196527045, 0.000000000000000, 3.028958963615630, 0.000000000000000, -2.313461067462598, 0.000000000000000, +-1.431933239886712, 0.000000000000000, -0.831153039725342, 0.000000000000000, 3.939495598250743, 0.000000000000000, 0.342974753984771, 0.000000000000000, +-2.768330763002974, 0.000000000000000, -2.744010370019008, 0.000000000000000, 3.821352685212561, 0.000000000000000, 4.551065271455856, 0.000000000000000, +3.270136437041298, 0.000000000000000, -3.188028411950982, 0.000000000000000, -0.777075012417436, 0.000000000000000, 0.097110650265216, 0.000000000000000, +1.221216137608812, 0.000000000000000, -1.325824244541822, 0.000000000000000, -2.655296734084113, 0.000000000000000, -1.074792144885704, 0.000000000000000, +2.770401584439407, 0.000000000000000, 5.240270645610543, 0.000000000000000, 0.108576672208892, 0.000000000000000, -1.209394350650142, 0.000000000000000, +1.403344353838785, 0.000000000000000, -0.299032904177277, 0.000000000000000, 4.074959450638227, 0.000000000000000, 1.718727473952107, 0.000000000000000, +-3.061349227080806, 0.000000000000000, -1.158596888541269, 0.000000000000000, 3.381858904662625, 0.000000000000000, 0.957339964054052, 0.000000000000000, +0.179900074904899, 0.000000000000000, -3.909641902506081, 0.000000000000000, 0.805717289408649, 0.000000000000000, 2.047413793928261, 0.000000000000000, +-1.273580225826614, 0.000000000000000, -2.681359186869971, 0.000000000000000, -0.721241345822093, 0.000000000000000, -1.613090681569475, 0.000000000000000, +0.463138804815955, 0.000000000000000, 0.377223507800954, 0.000000000000000, 2.046550684968141, 0.000000000000000, 0.178508732797712, 0.000000000000000, +-0.477815330358845, 0.000000000000000, 3.763355908332053, 0.000000000000000, 1.300430303035163, 0.000000000000000, -0.214625793857725, 0.000000000000000, +1.343267891864081, 0.000000000000000, -0.340007682433245, 0.000000000000000, 2.062703194680005, 0.000000000000000, 0.042032160234235, 0.000000000000000, +0.643732569732250, 0.000000000000000, -1.913502543857589, 0.000000000000000, 3.771340762937158, 0.000000000000000, 1.050024807363386, 0.000000000000000, +-4.440489488592649, 0.000000000000000, 0.444904302066643, 0.000000000000000, 2.898702265650048, 0.000000000000000, 1.953232980548558, 0.000000000000000, +2.761564952735079, 0.000000000000000, 1.963537633260397, 0.000000000000000, -2.168858472916215, 0.000000000000000, -4.116235357699841, 0.000000000000000, +4.183678271896528, 0.000000000000000, 0.600422284944681, 0.000000000000000, -0.659352647255126, 0.000000000000000, -0.993127338218109, 0.000000000000000, +-2.463571314945747, 0.000000000000000, 0.937720951545881, 0.000000000000000, -3.098957308429730, 0.000000000000000, -2.354719140045463, 0.000000000000000, +-0.417285119323949, 0.000000000000000, 2.187974075975947, 0.000000000000000, 1.101468905172585, 0.000000000000000, -3.185800678152109, 0.000000000000000, +2.357534709345083, 0.000000000000000, 0.246645606729407, 0.000000000000000, 4.440905650784504, 0.000000000000000, -2.236807716637866, 0.000000000000000, +-2.171481518317550, 0.000000000000000, -2.029571795072690, 0.000000000000000, 0.135599790431348, 0.000000000000000, -1.277965265520191, 0.000000000000000, +-1.927976233157507, 0.000000000000000, -5.434492783745394, 0.000000000000000, -2.026375829312657, 0.000000000000000, 1.009666016819321, 0.000000000000000, +0.238549782367247, 0.000000000000000, -0.516403923971309, 0.000000000000000, -0.933977817429352, 0.000000000000000, 0.155803015935614, 0.000000000000000, +-0.396194809997929, 0.000000000000000, -0.915178100253214, 0.000000000000000, 0.666329367985015, 0.000000000000000, -1.517991149945785, 0.000000000000000, +0.458266744144822, 0.000000000000000, -1.242845974381418, 0.000000000000000, 0.057914823556477, 0.000000000000000, 0.994101307476875, 0.000000000000000, +-2.387209849199325, 0.000000000000000, 0.459297048883826, 0.000000000000000, 0.227711405683905, 0.000000000000000, 0.030255073506117, 0.000000000000000, +-1.323361608181337, 0.000000000000000, -4.650244457426706, 0.000000000000000, 0.062908579526021, 0.000000000000000, 3.462831028244432, 0.000000000000000, +1.303608183314856, 0.000000000000000, -1.430415193881612, 0.000000000000000, -1.672886118942142, 0.000000000000000, 0.992890699210099, 0.000000000000000, +-0.160814531784247, 0.000000000000000, -1.238132939350430, 0.000000000000000, -0.589223271459376, 0.000000000000000, 2.326363810561534, 0.000000000000000, +-4.433789496230785, 0.000000000000000, 1.664686987538929, 0.000000000000000, -2.366128834617921, 0.000000000000000, 1.212421570743837, 0.000000000000000, +-4.847914267690055, 0.000000000000000, 0.228485221404712, 0.000000000000000, 0.466139765470957, 0.000000000000000, -1.344202776943546, 0.000000000000000, +-1.012053673330574, 0.000000000000000, -2.844980626424742, 0.000000000000000, -1.552703722026340, 0.000000000000000, -1.448830983885038, 0.000000000000000, +0.127010756753980, 0.000000000000000, -1.667188263752299, 0.000000000000000, 3.424818052085100, 0.000000000000000, 0.956291135453840, 0.000000000000000, +-3.725533331754662, 0.000000000000000, -1.584534272368832, 0.000000000000000, -1.654148210472472, 0.000000000000000, 0.701610500675698, 0.000000000000000, +0.164954538683927, 0.000000000000000, -0.739260064712987, 0.000000000000000, -2.167324026090101, 0.000000000000000, -0.310240491909496, 0.000000000000000, +-2.281790349106906, 0.000000000000000, 1.719655331305361, 0.000000000000000, -2.997005923606441, 0.000000000000000, -1.999301431556852, 0.000000000000000, +-0.292229010068828, 0.000000000000000, 1.172317994855851, 0.000000000000000, 0.196734885241533, 0.000000000000000, 2.981365193477068, 0.000000000000000, +2.637726016926352, 0.000000000000000, 1.434045125217982, 0.000000000000000, 0.883627180451827, 0.000000000000000, -1.434040761445747, 0.000000000000000, +-1.528891971086553, 0.000000000000000, -3.306913135367542, 0.000000000000000, -0.399059265470646, 0.000000000000000, -0.265674394285178, 0.000000000000000, +3.502591252855384, 0.000000000000000, 0.830301156604454, 0.000000000000000, -0.220021317046083, 0.000000000000000, -0.090553770476646, 0.000000000000000, +0.771863477047951, 0.000000000000000, 1.351209629105760, 0.000000000000000, 3.773699756201963, 0.000000000000000, 0.472600118752329, 0.000000000000000, +2.332825668012222, 0.000000000000000, 1.853747950314528, 0.000000000000000, 0.759515251766178, 0.000000000000000, 1.327112776215496, 0.000000000000000, +2.518730296237868, 0.000000000000000, 0.764450208786353, 0.000000000000000, -0.278275349491296, 0.000000000000000, -0.041559465082020, 0.000000000000000, +1.387166083167787, 0.000000000000000, 2.612996769598122, 0.000000000000000, -0.385404831721799, 0.000000000000000, 2.005630016170309, 0.000000000000000, +-0.950500047307998, 0.000000000000000, -1.166884021392492, 0.000000000000000, 1.432973552928162, 0.000000000000000, 2.540370505384567, 0.000000000000000, +-1.140505295054501, 0.000000000000000, -3.673358835201185, 0.000000000000000, -0.450691288038056, 0.000000000000000, 1.601024294408014, 0.000000000000000, +0.773213556014045, 0.000000000000000, 2.973873693246168, 0.000000000000000, -1.361548406382279, 0.000000000000000, 1.409136332424815, 0.000000000000000, +-0.963382518314713, 0.000000000000000, -2.031268227368161, 0.000000000000000, 0.983309972085586, 0.000000000000000, -3.461412488471631, 0.000000000000000, +-2.601124929406039, 0.000000000000000, -0.533896239766343, 0.000000000000000, -2.627129008866350, 0.000000000000000, 0.622111169161305, 0.000000000000000, +-1.160926365580422, 0.000000000000000, -2.406196188132628, 0.000000000000000, -1.076870362758737, 0.000000000000000, -1.791866820937175, 0.000000000000000, +-0.749453071522325, 0.000000000000000, -5.324156615990973, 0.000000000000000, -1.038698022238289, 0.000000000000000, -2.106629944730630, 0.000000000000000, +0.659295598564773, 0.000000000000000, 0.520940881580988, 0.000000000000000, -0.055649203928700, 0.000000000000000, 0.292096765423137, 0.000000000000000, +-4.663743901790872, 0.000000000000000, -0.125066503391666, 0.000000000000000, -2.452620252445380, 0.000000000000000, -0.712128227397468, 0.000000000000000, +-0.048938037970968, 0.000000000000000, -1.821520226003361, 0.000000000000000, 0.810106421304257, 0.000000000000000, -0.196636623956257, 0.000000000000000, +-0.701769836763804, 0.000000000000000, 2.460345045649201, 0.000000000000000, 3.506597671641116, 0.000000000000000, -2.711322611972225, 0.000000000000000, +-0.658079876600542, 0.000000000000000, -2.040082099646173, 0.000000000000000, 2.201668355395807, 0.000000000000000, 1.181507395879711, 0.000000000000000, +-1.640739552179682, 0.000000000000000, -1.613393726467190, 0.000000000000000, -1.156741241731352, 0.000000000000000, 2.527773464519963, 0.000000000000000, +-0.497040638009502, 0.000000000000000, -0.975817112895589, 0.000000000000000, -2.866830755546166, 0.000000000000000, 1.120214498507878, 0.000000000000000, +5.986771654661698, 0.000000000000000, 0.398219252656757, 0.000000000000000, -3.545606013198135, 0.000000000000000, 0.312398099396191, 0.000000000000000, +-2.265327979531788, 0.000000000000000, 0.792121001107366, 0.000000000000000, -3.736145137670100, 0.000000000000000, 0.762228883650802, 0.000000000000000, +2.283545661214646, 0.000000000000000, 3.780020629583529, 0.000000000000000, 3.117260228608810, 0.000000000000000, -2.011159255609613, 0.000000000000000, +0.279107700476072, 0.000000000000000, 2.003369134246936, 0.000000000000000, -1.448171234480257, 0.000000000000000, 0.584697150310140, 0.000000000000000, +0.919508663636197, 0.000000000000000, -3.071349141675388, 0.000000000000000, -1.555923649263667, 0.000000000000000, 2.232497079438850, 0.000000000000000, +-0.012662139119883, 0.000000000000000, 0.372825540734715, 0.000000000000000, 2.378543590847629, 0.000000000000000, 1.459053407813062, 0.000000000000000, +-0.967913907390927, 0.000000000000000, 1.322825200678212, 0.000000000000000, -1.033775820061824, 0.000000000000000, -1.813629552693142, 0.000000000000000, +4.794348161661486, 0.000000000000000, 0.655279811518676, 0.000000000000000, -2.224590138589720, 0.000000000000000, 0.595329481295766, 0.000000000000000, +3.364055988866225, 0.000000000000000, 1.863416422998127, 0.000000000000000, 1.930305751828105, 0.000000000000000, -0.284467053432545, 0.000000000000000, +-0.923374905878938, 0.000000000000000, 1.922988234041399, 0.000000000000000, 0.310482143432719, 0.000000000000000, 0.332122302397134, 0.000000000000000, +-1.659487472408966, 0.000000000000000, -1.865943507877961, 0.000000000000000, -0.186775297569864, 0.000000000000000, -1.700543850628361, 0.000000000000000, +0.497157959366735, 0.000000000000000, -0.471244843957418, 0.000000000000000, -0.432013753969948, 0.000000000000000, -4.000189880113231, 0.000000000000000, +-0.415335170016467, 0.000000000000000, 0.317311950972859, 0.000000000000000, 0.038393428927595, 0.000000000000000, 0.177219909465206, 0.000000000000000, +0.531650958095143, 0.000000000000000, -2.711644985175806, 0.000000000000000, 0.328744077805156, 0.000000000000000, -0.938417707547928, 0.000000000000000, +0.970379584897379, 0.000000000000000, 1.873649473917137, 0.000000000000000, 0.177938226987023, 0.000000000000000, 0.155609346302393, 0.000000000000000, +-1.276504241867208, 0.000000000000000, -0.463725075928807, 0.000000000000000, -0.064748250389500, 0.000000000000000, -1.725568534062385, 0.000000000000000, +-0.139066584804067, 0.000000000000000, 1.975514554117767, 0.000000000000000, -0.807063199499478, 0.000000000000000, -0.326926659682788, 0.000000000000000, +1.445727032487938, 0.000000000000000, -0.597151107739100, 0.000000000000000, 2.732557531709386, 0.000000000000000, -2.907130934109188, 0.000000000000000, +-1.461264832679981, 0.000000000000000, -1.708588604968163, 0.000000000000000, 3.652851925431363, 0.000000000000000, 0.682050868282879, 0.000000000000000, +-0.281312579963294, 0.000000000000000, 0.554966483307825, 0.000000000000000, -0.981341739340932, 0.000000000000000, 1.279543331141603, 0.000000000000000, +0.036589747826856, 0.000000000000000, 2.312073745896073, 0.000000000000000, 1.754682200732425, 0.000000000000000, -0.957515875428627, 0.000000000000000, +-0.833596942819695, 0.000000000000000, 0.437054368791033, 0.000000000000000, -0.898819399360279, 0.000000000000000, -0.296050580896839, 0.000000000000000, +-0.785144257649601, 0.000000000000000, -2.541503089003311, 0.000000000000000, 2.225075846758761, 0.000000000000000, -1.587290487902002, 0.000000000000000, +-1.421404172056462, 0.000000000000000, -3.015149802293631, 0.000000000000000, 1.780874288867949, 0.000000000000000, -0.865812740882613, 0.000000000000000, +-2.845327531197112, 0.000000000000000, 1.445225867774367, 0.000000000000000, 2.183733236584647, 0.000000000000000, 1.163371072749080, 0.000000000000000, +0.883547693520409, 0.000000000000000, -1.224093106684675, 0.000000000000000, -1.854501116331044, 0.000000000000000, 1.783082089255796, 0.000000000000000, +2.301508706196191, 0.000000000000000, -0.539901944139077, 0.000000000000000, 1.962315832319967, 0.000000000000000, -0.060709041870503, 0.000000000000000, +-1.353139923300238, 0.000000000000000, -1.482887537805234, 0.000000000000000, 1.273732601967176, 0.000000000000000, -3.456609915556321, 0.000000000000000, +-3.752320586540873, 0.000000000000000, 3.536356614978951, 0.000000000000000, 0.206035952043233, 0.000000000000000, 5.933966913773842, 0.000000000000000, +-0.486633898075490, 0.000000000000000, -0.329595089863342, 0.000000000000000, 1.496414153905337, 0.000000000000000, 0.137868749388880, 0.000000000000000, +-0.437192030996792, 0.000000000000000, 2.682750615210656, 0.000000000000000, -2.440234892848570, 0.000000000000000, 1.433910252426186, 0.000000000000000, +-0.415051506104074, 0.000000000000000, 1.982003013708649, 0.000000000000000, 1.345796609972435, 0.000000000000000, -2.335949513404370, 0.000000000000000, +1.065988867433025, 0.000000000000000, 2.741844905000464, 0.000000000000000, -1.754047930934362, 0.000000000000000, 0.229252730015575, 0.000000000000000, +-0.679791016408669, 0.000000000000000, -2.274097820043743, 0.000000000000000, 0.149802252231876, 0.000000000000000, -0.139697151364830, 0.000000000000000, +-2.773367420505435, 0.000000000000000, -4.403400246165611, 0.000000000000000, -1.468974515184135, 0.000000000000000, 0.664990623095844, 0.000000000000000, +-3.446979775557143, 0.000000000000000, 1.850006428987618, 0.000000000000000, -1.550866747921936, 0.000000000000000, -3.632874882935257, 0.000000000000000, +0.828039662992464, 0.000000000000000, 2.794055182632816, 0.000000000000000, -0.593995716682633, 0.000000000000000, 0.142788156054200, 0.000000000000000, +0.552461945119668, 0.000000000000000, 0.842127129738758, 0.000000000000000, 1.414335509600077, 0.000000000000000, -0.311559241382430, 0.000000000000000, +1.510590844695250, 0.000000000000000, 1.692217183824300, 0.000000000000000, 0.613760285711957, 0.000000000000000, 0.065233463207770, 0.000000000000000, +-2.571912893711505, 0.000000000000000, -1.707001531141341, 0.000000000000000, 0.673884968382041, 0.000000000000000, 0.889863883420103, 0.000000000000000, +-2.395635435233346, 0.000000000000000, 1.129247296359819, 0.000000000000000, 0.569074704779735, 0.000000000000000, 6.139436017480722, 0.000000000000000, +0.822158309259017, 0.000000000000000, -3.289872016222589, 0.000000000000000, 0.417612988384414, 0.000000000000000, 1.493982103868165, 0.000000000000000, +-0.415353391377005, 0.000000000000000, 0.288670764933155, 0.000000000000000, -1.895650228872272, 0.000000000000000, -0.139631694475020, 0.000000000000000, +1.445103299005436, 0.000000000000000, 2.877182243683429, 0.000000000000000, 1.192428490172580, 0.000000000000000, -5.964591921763842, 0.000000000000000, +0.570859795882959, 0.000000000000000, 2.328333316356666, 0.000000000000000, 0.333755014930026, 0.000000000000000, 1.221901577771909, 0.000000000000000, +0.943358697415568, 0.000000000000000, 2.793063983613067, 0.000000000000000, 3.163005066073616, 0.000000000000000, 2.098300664513867, 0.000000000000000, +-3.915313164333447, 0.000000000000000, -2.475766769064539, 0.000000000000000, 1.720472044894277, 0.000000000000000, -1.273591949275665, 0.000000000000000, +-1.213451272938616, 0.000000000000000, 0.697439404325690, 0.000000000000000, -0.309902287574293, 0.000000000000000, 2.622575852162781, 0.000000000000000, +-2.075881936219060, 0.000000000000000, 0.777847545691770, 0.000000000000000, -3.967947986440650, 0.000000000000000, -3.066503371806472, 0.000000000000000, +1.193780625937845, 0.000000000000000, 0.214246579281311, 0.000000000000000, -2.610681491162162, 0.000000000000000, -1.261224183972745, 0.000000000000000, +-1.165071748544285, 0.000000000000000, -1.116548474834374, 0.000000000000000, 0.847202164846982, 0.000000000000000, -3.474301529532390, 0.000000000000000, +0.020799541946476, 0.000000000000000, -3.868995473288166, 0.000000000000000, 1.757979409638067, 0.000000000000000, 0.868115130183109, 0.000000000000000, +0.910167436737958, 0.000000000000000, -1.878855115563720, 0.000000000000000, 1.710357104174161, 0.000000000000000, -1.468933980990902, 0.000000000000000, +1.799544171601169, 0.000000000000000, -4.922332880027887, 0.000000000000000, 0.219424548939720, 0.000000000000000, -0.971671113451924, 0.000000000000000, +-0.940533475616266, 0.000000000000000, 0.122510114412152, 0.000000000000000, -1.373686254916911, 0.000000000000000, 1.760348103896323, 0.000000000000000, +0.391745067829643, 0.000000000000000, 2.521958505327354, 0.000000000000000, -1.300693516405092, 0.000000000000000, -0.538251788309178, 0.000000000000000, +0.797184135810173, 0.000000000000000, 2.908800548982588, 0.000000000000000, 1.590902251655215, 0.000000000000000, -1.070323714487264, 0.000000000000000, +-3.349764443340999, 0.000000000000000, -1.190563529731447, 0.000000000000000, 1.363369471291963, 0.000000000000000, -1.814270299924576, 0.000000000000000, +-0.023381588315711, 0.000000000000000, 1.719182048679569, 0.000000000000000, 0.839917213252626, 0.000000000000000, 1.006099633839122, 0.000000000000000, +0.812462674381527, 0.000000000000000, 1.755814336346739, 0.000000000000000, 2.546848681206319, 0.000000000000000, -1.555300208869455, 0.000000000000000, +1.017053811631167, 0.000000000000000, 0.996591039170903, 0.000000000000000, -1.228047247924881, 0.000000000000000, 4.809462271463009, 0.000000000000000, +2.318113116151685, 0.000000000000000, -1.206932520679733, 0.000000000000000, 1.273757685623312, 0.000000000000000, 0.724335352481802, 0.000000000000000, +1.519876652073198, 0.000000000000000, -2.749670314714158, 0.000000000000000, 3.424042481847581, 0.000000000000000, -3.714668360421517, 0.000000000000000, +1.612834197004014, 0.000000000000000, -2.038234723985566, 0.000000000000000, 1.470938786562152, 0.000000000000000, 2.111634918450302, 0.000000000000000, +1.030376670151787, 0.000000000000000, -0.420877189003829, 0.000000000000000, -1.502024800532894, 0.000000000000000, 0.452310749163804, 0.000000000000000, +-1.606059382300987, 0.000000000000000, -4.006159967834147, 0.000000000000000, -2.152801208196508, 0.000000000000000, 1.671674089372579, 0.000000000000000, +1.714536333564101, 0.000000000000000, -1.011518543005344, 0.000000000000000, -0.576410282180584, 0.000000000000000, 0.733689809480836, 0.000000000000000, +1.004245602717974, 0.000000000000000, 1.010090391888449, 0.000000000000000, 3.811459513385621, 0.000000000000000, -5.230621089271954, 0.000000000000000, +0.678044861034399, 0.000000000000000, 1.255935859598107, 0.000000000000000, 1.674521701615288, 0.000000000000000, -1.656695216761705, 0.000000000000000, +1.169286028869693, 0.000000000000000, 0.524915416191998, 0.000000000000000, 2.397642885039520, 0.000000000000000, 2.108711400616072, 0.000000000000000, +2.037618211018084, 0.000000000000000, -0.623664553406925, 0.000000000000000, 2.984106170984409, 0.000000000000000, 1.132182737400932, 0.000000000000000, +-2.859274340352130, 0.000000000000000, -0.975550071398723, 0.000000000000000, -1.359935119997407, 0.000000000000000, -2.963308211050121, 0.000000000000000, +-0.228726662781163, 0.000000000000000, -1.411110379682043, 0.000000000000000, 0.741553355734225, 0.000000000000000, 0.497554254758309, 0.000000000000000, +2.371907950598855, 0.000000000000000, 1.063465168988748, 0.000000000000000, -0.641082692081488, 0.000000000000000, -0.855439878540726, 0.000000000000000, +0.578321738578726, 0.000000000000000, 3.005809768796194, 0.000000000000000, 1.961458699064065, 0.000000000000000, -3.206261663772745, 0.000000000000000, +-0.364431989095434, 0.000000000000000, -0.263182496622273, 0.000000000000000, 1.843464680631139, 0.000000000000000, -0.419107530229249, 0.000000000000000, +1.662335873298487, 0.000000000000000, -0.853687563304005, 0.000000000000000, -2.584133404357169, 0.000000000000000, 3.466839568922895, 0.000000000000000, +0.881671345091973, 0.000000000000000, 0.454620014206908, 0.000000000000000, -1.737245187402739, 0.000000000000000, 2.162713238369243, 0.000000000000000, +-3.868539002714486, 0.000000000000000, 2.014114855933826, 0.000000000000000, -0.703233831811006, 0.000000000000000, -3.410319935997574, 0.000000000000000, +-1.851235811006584, 0.000000000000000, 0.909783907894036, 0.000000000000000, 0.091884002136728, 0.000000000000000, -2.688294201131650, 0.000000000000000, +-0.906134178460955, 0.000000000000000, 3.475054609035133, 0.000000000000000, -0.573927964170323, 0.000000000000000, -0.429542937515399, 0.000000000000000, +0.991348618739939, 0.000000000000000, 1.974804904926325, 0.000000000000000, 0.975783450796698, 0.000000000000000, -3.057119549071503, 0.000000000000000, +-3.899429237481194, 0.000000000000000, 0.362439009175350, 0.000000000000000, -1.124461670265618, 0.000000000000000, 1.806000360163583, 0.000000000000000, +-2.768333362600288, 0.000000000000000, 0.244387897900379, 0.000000000000000, 0.908767296720926, 0.000000000000000, 1.254669374391882, 0.000000000000000, +-1.420441929463686, 0.000000000000000, -0.875658895966293, 0.000000000000000, 0.183824603376167, 0.000000000000000, -3.361653917011686, 0.000000000000000, +-0.796615630227952, 0.000000000000000, -1.660226542658673, 0.000000000000000, 1.654439358307226, 0.000000000000000, 2.782812946709771, 0.000000000000000, +1.418064412811531, 0.000000000000000, -0.819645647243761, 0.000000000000000, 0.807724772592699, 0.000000000000000, -0.941967976379298, 0.000000000000000, +-2.312768306047469, 0.000000000000000, 0.872426936477443, 0.000000000000000, 0.919528961530845, 0.000000000000000, -2.084904575264847, 0.000000000000000, +-1.972464868459322, 0.000000000000000, -1.050687203338466, 0.000000000000000, 1.659579707007902, 0.000000000000000, -1.820640014705855, 0.000000000000000, +-1.195078061671045, 0.000000000000000, -1.639773173762048, 0.000000000000000, 1.616744338157063, 0.000000000000000, 4.019216096811563, 0.000000000000000, +3.461021102549681, 0.000000000000000, 1.642352734361484, 0.000000000000000, -0.046354693720813, 0.000000000000000, -0.041936252359677, 0.000000000000000, +-2.393307519480551, 0.000000000000000, -0.341471634615121, 0.000000000000000, -0.392073595257017, 0.000000000000000, -0.219299018372730, 0.000000000000000, +-2.016391579662071, 0.000000000000000, -0.653096251969787, 0.000000000000000, 1.466353155666821, 0.000000000000000, -2.872058864320412, 0.000000000000000, +-2.157180779503830, 0.000000000000000, 0.723257479841560, 0.000000000000000, 3.769951308104384, 0.000000000000000, -1.923392042420024, 0.000000000000000, +0.644899359942840, 0.000000000000000, -2.090226891621437, 0.000000000000000, -0.277043982890403, 0.000000000000000, -0.528271428321112, 0.000000000000000, +2.518120645960652, 0.000000000000000, 1.040820431111488, 0.000000000000000, -4.560583754742486, 0.000000000000000, -0.226899614918836, 0.000000000000000, +1.713331231108959, 0.000000000000000, -3.293941019163642, 0.000000000000000, -1.113331444648290, 0.000000000000000, -1.032308423149906, 0.000000000000000, +1.593774272982443, 0.000000000000000, -1.246840475090529, 0.000000000000000, -0.190344684920137, 0.000000000000000, -1.719386356896355, 0.000000000000000, +-2.827721754659679, 0.000000000000000, -0.092438285279020, 0.000000000000000, -0.565844430675246, 0.000000000000000, -1.077916121691716, 0.000000000000000, +-1.208665809504693, 0.000000000000000, -2.996014266381254, 0.000000000000000, 2.888573323402423, 0.000000000000000, 2.829507048720695, 0.000000000000000, +-0.859177034120755, 0.000000000000000, -1.969302377743254, 0.000000000000000, 0.777437674525362, 0.000000000000000, -0.124910190157646, 0.000000000000000, +0.129875493115290, 0.000000000000000, -4.192139262163992, 0.000000000000000, 3.023496047962126, 0.000000000000000, 1.149775163736637, 0.000000000000000, +2.038151304801731, 0.000000000000000, 3.016122489841263, 0.000000000000000, -4.829481812137012, 0.000000000000000, -1.668436615909279, 0.000000000000000, +0.958586784636918, 0.000000000000000, 1.550652410058678, 0.000000000000000, -1.456305257976716, 0.000000000000000, -0.079588392344731, 0.000000000000000, +-2.453213599392345, 0.000000000000000, 0.296795909127105, 0.000000000000000, -0.253426616607643, 0.000000000000000, 1.418937160028195, 0.000000000000000, +-1.672949529066915, 0.000000000000000, -1.620990298572947, 0.000000000000000, -1.085103073196045, 0.000000000000000, 0.738606361195386, 0.000000000000000, +-2.097831202853255, 0.000000000000000, 2.711952282071310, 0.000000000000000, 1.498539238246888, 0.000000000000000, 1.317457282535915, 0.000000000000000, +-0.302765938349717, 0.000000000000000, -0.044623707947201, 0.000000000000000, 2.337405215062395, 0.000000000000000, -3.980689173859100, 0.000000000000000, + + +}; + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fft_bin_example/ARM/arm_fft_bin_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fft_bin_example/ARM/arm_fft_bin_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,158 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_fft_bin_example_f32.c +* +* Description: Example code demonstrating calculation of Max energy bin of +* frequency domain of input signal. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup FrequencyBin Frequency Bin Example + * + * \par Description + * \par + * Demonstrates the calculation of the maximum energy bin in the frequency + * domain of the input signal with the use of Complex FFT, Complex + * Magnitude, and Maximum functions. + * + * \par Algorithm: + * \par + * The input test signal contains a 10 kHz signal with uniformly distributed white noise. + * Calculating the FFT of the input signal will give us the maximum energy of the + * bin corresponding to the input frequency of 10 kHz. + * + * \par Block Diagram: + * \image html FFTBin.gif "Block Diagram" + * \par + * The figure below shows the time domain signal of 10 kHz signal with + * uniformly distributed white noise, and the next figure shows the input + * in the frequency domain. The bin with maximum energy corresponds to 10 kHz signal. + * \par + * \image html FFTBinInput.gif "Input signal in Time domain" + * \image html FFTBinOutput.gif "Input signal in Frequency domain" + * + * \par Variables Description: + * \par + * \li \c testInput_f32_10khz points to the input data + * \li \c testOutput points to the output data + * \li \c fftSize length of FFT + * \li \c ifftFlag flag for the selection of CFFT/CIFFT + * \li \c doBitReverse Flag for selection of normal order or bit reversed order + * \li \c refIndex reference index value at which maximum energy of bin ocuurs + * \li \c testIndex calculated index value at which maximum energy of bin ocuurs + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_cfft_f32() + * - arm_cmplx_mag_f32() + * - arm_max_f32() + * + * Refer + * \link arm_fft_bin_example_f32.c \endlink + * + */ + + +/** \example arm_fft_bin_example_f32.c + */ + + +#include "arm_math.h" +#include "arm_const_structs.h" + +#define TEST_LENGTH_SAMPLES 2048 + +/* ------------------------------------------------------------------- +* External Input and Output buffer Declarations for FFT Bin Example +* ------------------------------------------------------------------- */ +extern float32_t testInput_f32_10khz[TEST_LENGTH_SAMPLES]; +static float32_t testOutput[TEST_LENGTH_SAMPLES/2]; + +/* ------------------------------------------------------------------ +* Global variables for FFT Bin Example +* ------------------------------------------------------------------- */ +uint32_t fftSize = 1024; +uint32_t ifftFlag = 0; +uint32_t doBitReverse = 1; + +/* Reference index at which max energy of bin ocuurs */ +uint32_t refIndex = 213, testIndex = 0; + +/* ---------------------------------------------------------------------- +* Max magnitude FFT Bin test +* ------------------------------------------------------------------- */ + +int32_t main(void) +{ + + arm_status status; + float32_t maxValue; + + status = ARM_MATH_SUCCESS; + + /* Process the data through the CFFT/CIFFT module */ + arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse); + + /* Process the data through the Complex Magnitude Module for + calculating the magnitude at each bin */ + arm_cmplx_mag_f32(testInput_f32_10khz, testOutput, fftSize); + + /* Calculates maxValue and returns corresponding BIN value */ + arm_max_f32(testOutput, fftSize, &maxValue, &testIndex); + + if(testIndex != refIndex) + { + status = ARM_MATH_TEST_FAILURE; + } + + /* ---------------------------------------------------------------------- + ** Loop here if the signals fail the PASS check. + ** This denotes a test failure + ** ------------------------------------------------------------------- */ + + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fft_bin_example/GCC/arm_fft_bin_data.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fft_bin_example/GCC/arm_fft_bin_data.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,308 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_fft_bin_data.c +* +* Description: Data file used for example code +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +Test Input signal contains 10KHz signal + Uniformly distributed white noise +** ------------------------------------------------------------------- */ + +float32_t testInput_f32_10khz[2048] = +{ +-0.865129623056441, 0.000000000000000, -2.655020678073846, 0.000000000000000, 0.600664612949661, 0.000000000000000, 0.080378093886515, 0.000000000000000, +-2.899160484012034, 0.000000000000000, 2.563004262857762, 0.000000000000000, 3.078328403304206, 0.000000000000000, 0.105906778385130, 0.000000000000000, +0.048366940168201, 0.000000000000000, -0.145696461188734, 0.000000000000000, -0.023417155362879, 0.000000000000000, 2.127729174988954, 0.000000000000000, +-1.176633086028377, 0.000000000000000, 3.690223557991855, 0.000000000000000, -0.622791766173194, 0.000000000000000, 0.722837373872203, 0.000000000000000, +2.739754205367484, 0.000000000000000, -0.062610410524552, 0.000000000000000, -0.891296810967338, 0.000000000000000, -1.845872258871811, 0.000000000000000, +1.195039415434387, 0.000000000000000, -2.177388969045026, 0.000000000000000, 1.078649103637905, 0.000000000000000, 2.570976050490193, 0.000000000000000, +-1.383551403404574, 0.000000000000000, 2.392141424058873, 0.000000000000000, 2.858002843205065, 0.000000000000000, -3.682433899725536, 0.000000000000000, +-3.488146646451150, 0.000000000000000, 1.323468578888120, 0.000000000000000, -0.099771155430726, 0.000000000000000, 1.561168082500454, 0.000000000000000, +1.025026795103179, 0.000000000000000, 0.928841900171200, 0.000000000000000, 2.930499509864950, 0.000000000000000, 2.013349089766430, 0.000000000000000, +2.381676148486737, 0.000000000000000, -3.081062307950236, 0.000000000000000, -0.389579115537544, 0.000000000000000, 0.181540149166620, 0.000000000000000, +-2.601953341353208, 0.000000000000000, 0.333435137783218, 0.000000000000000, -2.812945856162965, 0.000000000000000, 2.649109640172910, 0.000000000000000, +-1.003963025744654, 0.000000000000000, 1.552460768755035, 0.000000000000000, 0.088641345335247, 0.000000000000000, -2.519951327113426, 0.000000000000000, +-4.341348988610527, 0.000000000000000, 0.557772429359965, 0.000000000000000, -1.671267412948494, 0.000000000000000, 0.733951350960387, 0.000000000000000, +0.409263788034864, 0.000000000000000, 3.566033071952806, 0.000000000000000, 1.882565173848352, 0.000000000000000, -1.106017073793287, 0.000000000000000, +0.154456720778718, 0.000000000000000, -2.513205795512153, 0.000000000000000, 0.310978660939421, 0.000000000000000, 0.579706500111723, 0.000000000000000, +0.000086383683251, 0.000000000000000, -1.311866980897721, 0.000000000000000, 1.840007477574986, 0.000000000000000, -3.253005768451345, 0.000000000000000, +1.462584328739432, 0.000000000000000, 1.610103610851738, 0.000000000000000, 0.761914676858907, 0.000000000000000, 0.974541361089834, 0.000000000000000, +0.686845845885983, 0.000000000000000, 1.849153122025191, 0.000000000000000, 0.787800410401453, 0.000000000000000, -1.187438909666279, 0.000000000000000, +-0.754937911044720, 0.000000000000000, 0.084373858395232, 0.000000000000000, -2.600269011710521, 0.000000000000000, -0.962982842142644, 0.000000000000000, +-0.369328108540868, 0.000000000000000, 0.810791418361879, 0.000000000000000, 3.587016488699641, 0.000000000000000, -0.520776145083723, 0.000000000000000, +0.640249919627884, 0.000000000000000, 1.103122489464969, 0.000000000000000, 2.231779881455556, 0.000000000000000, -1.308035392685241, 0.000000000000000, +0.424070304330106, 0.000000000000000, -0.200383932651189, 0.000000000000000, -2.365526783356541, 0.000000000000000, -0.989114757436628, 0.000000000000000, +2.770807688959777, 0.000000000000000, -0.444172737462307, 0.000000000000000, 0.079760979374078, 0.000000000000000, -0.005199118412183, 0.000000000000000, +-0.664712668309527, 0.000000000000000, -0.624171857561896, 0.000000000000000, 0.537306979007338, 0.000000000000000, -2.575955675497642, 0.000000000000000, +1.562363235756780, 0.000000000000000, 1.814069369848895, 0.000000000000000, -1.293428583392509, 0.000000000000000, -1.026188449495686, 0.000000000000000, +-2.981771815588717, 0.000000000000000, -4.223468103075124, 0.000000000000000, 2.672674782004045, 0.000000000000000, -0.856096801117735, 0.000000000000000, +0.048517345512563, 0.000000000000000, -0.026860721136222, 0.000000000000000, 0.392932277758187, 0.000000000000000, -1.331740855093099, 0.000000000000000, +-1.894292129477081, 0.000000000000000, -1.425006468460681, 0.000000000000000, -2.721772427617057, 0.000000000000000, -1.616831100216806, 0.000000000000000, +3.551177651488947, 0.000000000000000, -0.069685667896087, 0.000000000000000, -3.134634907409102, 0.000000000000000, -0.263627598944639, 0.000000000000000, +-1.650469945991350, 0.000000000000000, -2.203580339374399, 0.000000000000000, -0.872203246123242, 0.000000000000000, 1.230782812607287, 0.000000000000000, +0.257288860093291, 0.000000000000000, 1.989083106173137, 0.000000000000000, -1.985638729453261, 0.000000000000000, -1.416185105842892, 0.000000000000000, +-1.131097688325772, 0.000000000000000, -2.245130805416057, 0.000000000000000, -1.938873996219074, 0.000000000000000, 2.043608361562645, 0.000000000000000, +-0.583727989880841, 0.000000000000000, -1.785266378212929, 0.000000000000000, 1.961457586224753, 0.000000000000000, 1.139400099963223, 0.000000000000000, +-1.979519343363991, 0.000000000000000, 2.003023322818429, 0.000000000000000, 0.229004069076829, 0.000000000000000, 3.452808862193135, 0.000000000000000, +2.882273808365857, 0.000000000000000, -1.549450501844438, 0.000000000000000, -3.283872089931876, 0.000000000000000, -0.327025884099064, 0.000000000000000, +-0.054979977136430, 0.000000000000000, -1.192280531479012, 0.000000000000000, 0.645539328365578, 0.000000000000000, 2.300832863404618, 0.000000000000000, +-1.092951789535240, 0.000000000000000, -1.017368249363773, 0.000000000000000, -0.142673056169787, 0.000000000000000, 0.831073544881250, 0.000000000000000, +-2.314612531587064, 0.000000000000000, -2.221456299106321, 0.000000000000000, 0.460261143885226, 0.000000000000000, 0.050585301888595, 0.000000000000000, +0.364373329183988, 0.000000000000000, -1.685956552069538, 0.000000000000000, 0.050664512351055, 0.000000000000000, -0.193355783902718, 0.000000000000000, +-0.158660446046828, 0.000000000000000, 2.394156453841953, 0.000000000000000, -1.562965718554525, 0.000000000000000, -2.199750600869900, 0.000000000000000, +1.544984022381773, 0.000000000000000, -1.988307216807315, 0.000000000000000, -0.628240722541046, 0.000000000000000, -1.436235771505429, 0.000000000000000, +1.677013691147313, 0.000000000000000, 1.600741781678228, 0.000000000000000, -0.757380959134706, 0.000000000000000, -4.784797439515566, 0.000000000000000, +0.265121462834569, 0.000000000000000, 3.862029485934378, 0.000000000000000, 2.386823577249430, 0.000000000000000, -3.655779745436893, 0.000000000000000, +-0.763541621368016, 0.000000000000000, -1.182140388432962, 0.000000000000000, -1.349106114858063, 0.000000000000000, -2.287533624396759, 0.000000000000000, +-0.028603745188423, 0.000000000000000, -1.353580755934427, 0.000000000000000, 0.461602380352937, 0.000000000000000, -0.059599055078928, 0.000000000000000, +-0.929946734342228, 0.000000000000000, 0.065773089295561, 0.000000000000000, 1.106565863102982, 0.000000000000000, 4.719295086373593, 0.000000000000000, +-2.108377703544395, 0.000000000000000, -2.226393620240159, 0.000000000000000, 1.375668397437521, 0.000000000000000, -0.960772428525443, 0.000000000000000, +-2.156313465390571, 0.000000000000000, 1.126060012375311, 0.000000000000000, 2.756485137030720, 0.000000000000000, 0.739639690862600, 0.000000000000000, +3.914769510295006, 0.000000000000000, 1.685232785586675, 0.000000000000000, 4.079058040970612, 0.000000000000000, -1.174598301660513, 0.000000000000000, +-2.885776587275580, 0.000000000000000, -0.241073635188767, 0.000000000000000, 3.080489872502403, 0.000000000000000, -2.051244183999421, 0.000000000000000, +0.664330486845139, 0.000000000000000, -1.697798999370016, 0.000000000000000, 1.452369423649782, 0.000000000000000, -1.523532831019280, 0.000000000000000, +0.171981186587481, 0.000000000000000, -4.685274721583927, 0.000000000000000, -1.336175835319380, 0.000000000000000, 1.419070770428945, 0.000000000000000, +-0.035791601713475, 0.000000000000000, 2.291937971632081, 0.000000000000000, -1.962559313450293, 0.000000000000000, -4.831595589339301, 0.000000000000000, +-1.857055284000925, 0.000000000000000, 2.606271522635512, 0.000000000000000, -0.576447978738030, 0.000000000000000, 0.082299166967720, 0.000000000000000, +1.888399453494614, 0.000000000000000, -3.564705298046079, 0.000000000000000, -0.939357831083889, 0.000000000000000, -1.903578203697778, 0.000000000000000, +-2.642492215447250, 0.000000000000000, -0.182990405251017, 0.000000000000000, 3.742026478011174, 0.000000000000000, 0.104295803798333, 0.000000000000000, +1.848678195370347, 0.000000000000000, -1.887384346896369, 0.000000000000000, 0.365048973046045, 0.000000000000000, -0.889638010354219, 0.000000000000000, +1.173877118428863, 0.000000000000000, -1.178562827540109, 0.000000000000000, 0.610271645685184, 0.000000000000000, 1.831284815697871, 0.000000000000000, +0.449575390102283, 0.000000000000000, 1.597171905253443, 0.000000000000000, 3.918574971904773, 0.000000000000000, 0.868104027970404, 0.000000000000000, +0.582643134746494, 0.000000000000000, 2.321256382353331, 0.000000000000000, -0.238118642223180, 0.000000000000000, -2.890287868054370, 0.000000000000000, +0.970995414625622, 0.000000000000000, 0.666137930891283, 0.000000000000000, -0.202435718709502, 0.000000000000000, 2.057930200518194, 0.000000000000000, +3.120583443719949, 0.000000000000000, -0.863945271701041, 0.000000000000000, 0.906848893874630, 0.000000000000000, -1.434124930222570, 0.000000000000000, +0.754659384848783, 0.000000000000000, -5.224154442713778, 0.000000000000000, 2.330229744098967, 0.000000000000000, 1.113946320164698, 0.000000000000000, +0.523324920322840, 0.000000000000000, 1.750740911548348, 0.000000000000000, -0.899333972913577, 0.000000000000000, 0.228705845203506, 0.000000000000000, +-1.934782624767648, 0.000000000000000, -3.508386237231303, 0.000000000000000, -2.107108523073510, 0.000000000000000, 0.380587645474815, 0.000000000000000, +-0.476200877183279, 0.000000000000000, -2.172086712642198, 0.000000000000000, 1.795372535780299, 0.000000000000000, -2.100318983391055, 0.000000000000000, +-0.022571122461405, 0.000000000000000, 0.674514020010955, 0.000000000000000, -0.148872569390857, 0.000000000000000, 0.298175890592737, 0.000000000000000, +-1.134244492493590, 0.000000000000000, -3.146848422289455, 0.000000000000000, -1.357950199087602, 0.000000000000000, 0.667362732020878, 0.000000000000000, +-3.119397998316724, 0.000000000000000, -1.189341126297637, 0.000000000000000, -1.532744386856668, 0.000000000000000, -1.672972484202534, 0.000000000000000, +-2.042283373871558, 0.000000000000000, -1.479481547595924, 0.000000000000000, -0.002668662875396, 0.000000000000000, 0.262737760129546, 0.000000000000000, +2.734456080621830, 0.000000000000000, -0.671945925075102, 0.000000000000000, -3.735078262179111, 0.000000000000000, -0.161705013319883, 0.000000000000000, +0.748963512361001, 0.000000000000000, 1.128046374367600, 0.000000000000000, 0.649651335592966, 0.000000000000000, 1.880020215025867, 0.000000000000000, +-1.095632293842306, 0.000000000000000, 1.197764876160487, 0.000000000000000, 0.323646656252985, 0.000000000000000, -1.655502751114502, 0.000000000000000, +3.666399062961496, 0.000000000000000, -0.334060899735197, 0.000000000000000, -2.119056978738397, 0.000000000000000, 3.721375117275012, 0.000000000000000, +0.044874186872307, 0.000000000000000, -2.733053897593234, 0.000000000000000, 1.590700278891042, 0.000000000000000, 3.215711772781902, 0.000000000000000, +-1.792085012843801, 0.000000000000000, -0.405797188885475, 0.000000000000000, -0.628080020080892, 0.000000000000000, -1.831815840843960, 0.000000000000000, +2.973656862522834, 0.000000000000000, -0.212032655138417, 0.000000000000000, 0.372437389437234, 0.000000000000000, -1.614030579023492, 0.000000000000000, +-0.704900996358698, 0.000000000000000, 1.123700273452105, 0.000000000000000, -0.136371848130819, 0.000000000000000, 3.020284357635585, 0.000000000000000, +-0.550211350877649, 0.000000000000000, 5.101256236381711, 0.000000000000000, 3.367051512192333, 0.000000000000000, -4.385131946669234, 0.000000000000000, +-3.967303337694391, 0.000000000000000, -0.965894936640022, 0.000000000000000, 0.328366945264681, 0.000000000000000, 0.199041562924914, 0.000000000000000, +1.067681999025495, 0.000000000000000, -1.939516091697170, 0.000000000000000, -1.092980954328824, 0.000000000000000, 0.273786079368066, 0.000000000000000, +-0.040928322190265, 0.000000000000000, -0.118368078577437, 0.000000000000000, 1.766589628899997, 0.000000000000000, 1.738321311635393, 0.000000000000000, +-2.895012794321649, 0.000000000000000, 1.213521771395142, 0.000000000000000, 0.922971726633985, 0.000000000000000, 1.091516563636489, 0.000000000000000, +3.226378465469620, 0.000000000000000, 1.149169778666974, 0.000000000000000, -1.695986327709386, 0.000000000000000, -0.974803077355813, 0.000000000000000, +-4.898035507513607, 0.000000000000000, 1.622719302889447, 0.000000000000000, 0.583891313586579, 0.000000000000000, -1.677182424094957, 0.000000000000000, +-1.915633132814685, 0.000000000000000, -1.980150370851616, 0.000000000000000, 0.604538269404190, 0.000000000000000, 0.939862406149365, 0.000000000000000, +-1.266939874246416, 0.000000000000000, -1.494771249200063, 0.000000000000000, 0.278042784093988, 0.000000000000000, 0.326627416008916, 0.000000000000000, +-1.914530157643303, 0.000000000000000, 1.908947721862196, 0.000000000000000, 0.531819285694044, 0.000000000000000, 3.056856632319658, 0.000000000000000, +-0.389241827774643, 0.000000000000000, -2.418606606780420, 0.000000000000000, 0.915299238878703, 0.000000000000000, -0.098774174295283, 0.000000000000000, +-0.906199428444304, 0.000000000000000, 0.316716451217743, 0.000000000000000, -4.367700643578311, 0.000000000000000, 1.491687997515293, 0.000000000000000, +-1.962381126288365, 0.000000000000000, -0.700829196527045, 0.000000000000000, 3.028958963615630, 0.000000000000000, -2.313461067462598, 0.000000000000000, +-1.431933239886712, 0.000000000000000, -0.831153039725342, 0.000000000000000, 3.939495598250743, 0.000000000000000, 0.342974753984771, 0.000000000000000, +-2.768330763002974, 0.000000000000000, -2.744010370019008, 0.000000000000000, 3.821352685212561, 0.000000000000000, 4.551065271455856, 0.000000000000000, +3.270136437041298, 0.000000000000000, -3.188028411950982, 0.000000000000000, -0.777075012417436, 0.000000000000000, 0.097110650265216, 0.000000000000000, +1.221216137608812, 0.000000000000000, -1.325824244541822, 0.000000000000000, -2.655296734084113, 0.000000000000000, -1.074792144885704, 0.000000000000000, +2.770401584439407, 0.000000000000000, 5.240270645610543, 0.000000000000000, 0.108576672208892, 0.000000000000000, -1.209394350650142, 0.000000000000000, +1.403344353838785, 0.000000000000000, -0.299032904177277, 0.000000000000000, 4.074959450638227, 0.000000000000000, 1.718727473952107, 0.000000000000000, +-3.061349227080806, 0.000000000000000, -1.158596888541269, 0.000000000000000, 3.381858904662625, 0.000000000000000, 0.957339964054052, 0.000000000000000, +0.179900074904899, 0.000000000000000, -3.909641902506081, 0.000000000000000, 0.805717289408649, 0.000000000000000, 2.047413793928261, 0.000000000000000, +-1.273580225826614, 0.000000000000000, -2.681359186869971, 0.000000000000000, -0.721241345822093, 0.000000000000000, -1.613090681569475, 0.000000000000000, +0.463138804815955, 0.000000000000000, 0.377223507800954, 0.000000000000000, 2.046550684968141, 0.000000000000000, 0.178508732797712, 0.000000000000000, +-0.477815330358845, 0.000000000000000, 3.763355908332053, 0.000000000000000, 1.300430303035163, 0.000000000000000, -0.214625793857725, 0.000000000000000, +1.343267891864081, 0.000000000000000, -0.340007682433245, 0.000000000000000, 2.062703194680005, 0.000000000000000, 0.042032160234235, 0.000000000000000, +0.643732569732250, 0.000000000000000, -1.913502543857589, 0.000000000000000, 3.771340762937158, 0.000000000000000, 1.050024807363386, 0.000000000000000, +-4.440489488592649, 0.000000000000000, 0.444904302066643, 0.000000000000000, 2.898702265650048, 0.000000000000000, 1.953232980548558, 0.000000000000000, +2.761564952735079, 0.000000000000000, 1.963537633260397, 0.000000000000000, -2.168858472916215, 0.000000000000000, -4.116235357699841, 0.000000000000000, +4.183678271896528, 0.000000000000000, 0.600422284944681, 0.000000000000000, -0.659352647255126, 0.000000000000000, -0.993127338218109, 0.000000000000000, +-2.463571314945747, 0.000000000000000, 0.937720951545881, 0.000000000000000, -3.098957308429730, 0.000000000000000, -2.354719140045463, 0.000000000000000, +-0.417285119323949, 0.000000000000000, 2.187974075975947, 0.000000000000000, 1.101468905172585, 0.000000000000000, -3.185800678152109, 0.000000000000000, +2.357534709345083, 0.000000000000000, 0.246645606729407, 0.000000000000000, 4.440905650784504, 0.000000000000000, -2.236807716637866, 0.000000000000000, +-2.171481518317550, 0.000000000000000, -2.029571795072690, 0.000000000000000, 0.135599790431348, 0.000000000000000, -1.277965265520191, 0.000000000000000, +-1.927976233157507, 0.000000000000000, -5.434492783745394, 0.000000000000000, -2.026375829312657, 0.000000000000000, 1.009666016819321, 0.000000000000000, +0.238549782367247, 0.000000000000000, -0.516403923971309, 0.000000000000000, -0.933977817429352, 0.000000000000000, 0.155803015935614, 0.000000000000000, +-0.396194809997929, 0.000000000000000, -0.915178100253214, 0.000000000000000, 0.666329367985015, 0.000000000000000, -1.517991149945785, 0.000000000000000, +0.458266744144822, 0.000000000000000, -1.242845974381418, 0.000000000000000, 0.057914823556477, 0.000000000000000, 0.994101307476875, 0.000000000000000, +-2.387209849199325, 0.000000000000000, 0.459297048883826, 0.000000000000000, 0.227711405683905, 0.000000000000000, 0.030255073506117, 0.000000000000000, +-1.323361608181337, 0.000000000000000, -4.650244457426706, 0.000000000000000, 0.062908579526021, 0.000000000000000, 3.462831028244432, 0.000000000000000, +1.303608183314856, 0.000000000000000, -1.430415193881612, 0.000000000000000, -1.672886118942142, 0.000000000000000, 0.992890699210099, 0.000000000000000, +-0.160814531784247, 0.000000000000000, -1.238132939350430, 0.000000000000000, -0.589223271459376, 0.000000000000000, 2.326363810561534, 0.000000000000000, +-4.433789496230785, 0.000000000000000, 1.664686987538929, 0.000000000000000, -2.366128834617921, 0.000000000000000, 1.212421570743837, 0.000000000000000, +-4.847914267690055, 0.000000000000000, 0.228485221404712, 0.000000000000000, 0.466139765470957, 0.000000000000000, -1.344202776943546, 0.000000000000000, +-1.012053673330574, 0.000000000000000, -2.844980626424742, 0.000000000000000, -1.552703722026340, 0.000000000000000, -1.448830983885038, 0.000000000000000, +0.127010756753980, 0.000000000000000, -1.667188263752299, 0.000000000000000, 3.424818052085100, 0.000000000000000, 0.956291135453840, 0.000000000000000, +-3.725533331754662, 0.000000000000000, -1.584534272368832, 0.000000000000000, -1.654148210472472, 0.000000000000000, 0.701610500675698, 0.000000000000000, +0.164954538683927, 0.000000000000000, -0.739260064712987, 0.000000000000000, -2.167324026090101, 0.000000000000000, -0.310240491909496, 0.000000000000000, +-2.281790349106906, 0.000000000000000, 1.719655331305361, 0.000000000000000, -2.997005923606441, 0.000000000000000, -1.999301431556852, 0.000000000000000, +-0.292229010068828, 0.000000000000000, 1.172317994855851, 0.000000000000000, 0.196734885241533, 0.000000000000000, 2.981365193477068, 0.000000000000000, +2.637726016926352, 0.000000000000000, 1.434045125217982, 0.000000000000000, 0.883627180451827, 0.000000000000000, -1.434040761445747, 0.000000000000000, +-1.528891971086553, 0.000000000000000, -3.306913135367542, 0.000000000000000, -0.399059265470646, 0.000000000000000, -0.265674394285178, 0.000000000000000, +3.502591252855384, 0.000000000000000, 0.830301156604454, 0.000000000000000, -0.220021317046083, 0.000000000000000, -0.090553770476646, 0.000000000000000, +0.771863477047951, 0.000000000000000, 1.351209629105760, 0.000000000000000, 3.773699756201963, 0.000000000000000, 0.472600118752329, 0.000000000000000, +2.332825668012222, 0.000000000000000, 1.853747950314528, 0.000000000000000, 0.759515251766178, 0.000000000000000, 1.327112776215496, 0.000000000000000, +2.518730296237868, 0.000000000000000, 0.764450208786353, 0.000000000000000, -0.278275349491296, 0.000000000000000, -0.041559465082020, 0.000000000000000, +1.387166083167787, 0.000000000000000, 2.612996769598122, 0.000000000000000, -0.385404831721799, 0.000000000000000, 2.005630016170309, 0.000000000000000, +-0.950500047307998, 0.000000000000000, -1.166884021392492, 0.000000000000000, 1.432973552928162, 0.000000000000000, 2.540370505384567, 0.000000000000000, +-1.140505295054501, 0.000000000000000, -3.673358835201185, 0.000000000000000, -0.450691288038056, 0.000000000000000, 1.601024294408014, 0.000000000000000, +0.773213556014045, 0.000000000000000, 2.973873693246168, 0.000000000000000, -1.361548406382279, 0.000000000000000, 1.409136332424815, 0.000000000000000, +-0.963382518314713, 0.000000000000000, -2.031268227368161, 0.000000000000000, 0.983309972085586, 0.000000000000000, -3.461412488471631, 0.000000000000000, +-2.601124929406039, 0.000000000000000, -0.533896239766343, 0.000000000000000, -2.627129008866350, 0.000000000000000, 0.622111169161305, 0.000000000000000, +-1.160926365580422, 0.000000000000000, -2.406196188132628, 0.000000000000000, -1.076870362758737, 0.000000000000000, -1.791866820937175, 0.000000000000000, +-0.749453071522325, 0.000000000000000, -5.324156615990973, 0.000000000000000, -1.038698022238289, 0.000000000000000, -2.106629944730630, 0.000000000000000, +0.659295598564773, 0.000000000000000, 0.520940881580988, 0.000000000000000, -0.055649203928700, 0.000000000000000, 0.292096765423137, 0.000000000000000, +-4.663743901790872, 0.000000000000000, -0.125066503391666, 0.000000000000000, -2.452620252445380, 0.000000000000000, -0.712128227397468, 0.000000000000000, +-0.048938037970968, 0.000000000000000, -1.821520226003361, 0.000000000000000, 0.810106421304257, 0.000000000000000, -0.196636623956257, 0.000000000000000, +-0.701769836763804, 0.000000000000000, 2.460345045649201, 0.000000000000000, 3.506597671641116, 0.000000000000000, -2.711322611972225, 0.000000000000000, +-0.658079876600542, 0.000000000000000, -2.040082099646173, 0.000000000000000, 2.201668355395807, 0.000000000000000, 1.181507395879711, 0.000000000000000, +-1.640739552179682, 0.000000000000000, -1.613393726467190, 0.000000000000000, -1.156741241731352, 0.000000000000000, 2.527773464519963, 0.000000000000000, +-0.497040638009502, 0.000000000000000, -0.975817112895589, 0.000000000000000, -2.866830755546166, 0.000000000000000, 1.120214498507878, 0.000000000000000, +5.986771654661698, 0.000000000000000, 0.398219252656757, 0.000000000000000, -3.545606013198135, 0.000000000000000, 0.312398099396191, 0.000000000000000, +-2.265327979531788, 0.000000000000000, 0.792121001107366, 0.000000000000000, -3.736145137670100, 0.000000000000000, 0.762228883650802, 0.000000000000000, +2.283545661214646, 0.000000000000000, 3.780020629583529, 0.000000000000000, 3.117260228608810, 0.000000000000000, -2.011159255609613, 0.000000000000000, +0.279107700476072, 0.000000000000000, 2.003369134246936, 0.000000000000000, -1.448171234480257, 0.000000000000000, 0.584697150310140, 0.000000000000000, +0.919508663636197, 0.000000000000000, -3.071349141675388, 0.000000000000000, -1.555923649263667, 0.000000000000000, 2.232497079438850, 0.000000000000000, +-0.012662139119883, 0.000000000000000, 0.372825540734715, 0.000000000000000, 2.378543590847629, 0.000000000000000, 1.459053407813062, 0.000000000000000, +-0.967913907390927, 0.000000000000000, 1.322825200678212, 0.000000000000000, -1.033775820061824, 0.000000000000000, -1.813629552693142, 0.000000000000000, +4.794348161661486, 0.000000000000000, 0.655279811518676, 0.000000000000000, -2.224590138589720, 0.000000000000000, 0.595329481295766, 0.000000000000000, +3.364055988866225, 0.000000000000000, 1.863416422998127, 0.000000000000000, 1.930305751828105, 0.000000000000000, -0.284467053432545, 0.000000000000000, +-0.923374905878938, 0.000000000000000, 1.922988234041399, 0.000000000000000, 0.310482143432719, 0.000000000000000, 0.332122302397134, 0.000000000000000, +-1.659487472408966, 0.000000000000000, -1.865943507877961, 0.000000000000000, -0.186775297569864, 0.000000000000000, -1.700543850628361, 0.000000000000000, +0.497157959366735, 0.000000000000000, -0.471244843957418, 0.000000000000000, -0.432013753969948, 0.000000000000000, -4.000189880113231, 0.000000000000000, +-0.415335170016467, 0.000000000000000, 0.317311950972859, 0.000000000000000, 0.038393428927595, 0.000000000000000, 0.177219909465206, 0.000000000000000, +0.531650958095143, 0.000000000000000, -2.711644985175806, 0.000000000000000, 0.328744077805156, 0.000000000000000, -0.938417707547928, 0.000000000000000, +0.970379584897379, 0.000000000000000, 1.873649473917137, 0.000000000000000, 0.177938226987023, 0.000000000000000, 0.155609346302393, 0.000000000000000, +-1.276504241867208, 0.000000000000000, -0.463725075928807, 0.000000000000000, -0.064748250389500, 0.000000000000000, -1.725568534062385, 0.000000000000000, +-0.139066584804067, 0.000000000000000, 1.975514554117767, 0.000000000000000, -0.807063199499478, 0.000000000000000, -0.326926659682788, 0.000000000000000, +1.445727032487938, 0.000000000000000, -0.597151107739100, 0.000000000000000, 2.732557531709386, 0.000000000000000, -2.907130934109188, 0.000000000000000, +-1.461264832679981, 0.000000000000000, -1.708588604968163, 0.000000000000000, 3.652851925431363, 0.000000000000000, 0.682050868282879, 0.000000000000000, +-0.281312579963294, 0.000000000000000, 0.554966483307825, 0.000000000000000, -0.981341739340932, 0.000000000000000, 1.279543331141603, 0.000000000000000, +0.036589747826856, 0.000000000000000, 2.312073745896073, 0.000000000000000, 1.754682200732425, 0.000000000000000, -0.957515875428627, 0.000000000000000, +-0.833596942819695, 0.000000000000000, 0.437054368791033, 0.000000000000000, -0.898819399360279, 0.000000000000000, -0.296050580896839, 0.000000000000000, +-0.785144257649601, 0.000000000000000, -2.541503089003311, 0.000000000000000, 2.225075846758761, 0.000000000000000, -1.587290487902002, 0.000000000000000, +-1.421404172056462, 0.000000000000000, -3.015149802293631, 0.000000000000000, 1.780874288867949, 0.000000000000000, -0.865812740882613, 0.000000000000000, +-2.845327531197112, 0.000000000000000, 1.445225867774367, 0.000000000000000, 2.183733236584647, 0.000000000000000, 1.163371072749080, 0.000000000000000, +0.883547693520409, 0.000000000000000, -1.224093106684675, 0.000000000000000, -1.854501116331044, 0.000000000000000, 1.783082089255796, 0.000000000000000, +2.301508706196191, 0.000000000000000, -0.539901944139077, 0.000000000000000, 1.962315832319967, 0.000000000000000, -0.060709041870503, 0.000000000000000, +-1.353139923300238, 0.000000000000000, -1.482887537805234, 0.000000000000000, 1.273732601967176, 0.000000000000000, -3.456609915556321, 0.000000000000000, +-3.752320586540873, 0.000000000000000, 3.536356614978951, 0.000000000000000, 0.206035952043233, 0.000000000000000, 5.933966913773842, 0.000000000000000, +-0.486633898075490, 0.000000000000000, -0.329595089863342, 0.000000000000000, 1.496414153905337, 0.000000000000000, 0.137868749388880, 0.000000000000000, +-0.437192030996792, 0.000000000000000, 2.682750615210656, 0.000000000000000, -2.440234892848570, 0.000000000000000, 1.433910252426186, 0.000000000000000, +-0.415051506104074, 0.000000000000000, 1.982003013708649, 0.000000000000000, 1.345796609972435, 0.000000000000000, -2.335949513404370, 0.000000000000000, +1.065988867433025, 0.000000000000000, 2.741844905000464, 0.000000000000000, -1.754047930934362, 0.000000000000000, 0.229252730015575, 0.000000000000000, +-0.679791016408669, 0.000000000000000, -2.274097820043743, 0.000000000000000, 0.149802252231876, 0.000000000000000, -0.139697151364830, 0.000000000000000, +-2.773367420505435, 0.000000000000000, -4.403400246165611, 0.000000000000000, -1.468974515184135, 0.000000000000000, 0.664990623095844, 0.000000000000000, +-3.446979775557143, 0.000000000000000, 1.850006428987618, 0.000000000000000, -1.550866747921936, 0.000000000000000, -3.632874882935257, 0.000000000000000, +0.828039662992464, 0.000000000000000, 2.794055182632816, 0.000000000000000, -0.593995716682633, 0.000000000000000, 0.142788156054200, 0.000000000000000, +0.552461945119668, 0.000000000000000, 0.842127129738758, 0.000000000000000, 1.414335509600077, 0.000000000000000, -0.311559241382430, 0.000000000000000, +1.510590844695250, 0.000000000000000, 1.692217183824300, 0.000000000000000, 0.613760285711957, 0.000000000000000, 0.065233463207770, 0.000000000000000, +-2.571912893711505, 0.000000000000000, -1.707001531141341, 0.000000000000000, 0.673884968382041, 0.000000000000000, 0.889863883420103, 0.000000000000000, +-2.395635435233346, 0.000000000000000, 1.129247296359819, 0.000000000000000, 0.569074704779735, 0.000000000000000, 6.139436017480722, 0.000000000000000, +0.822158309259017, 0.000000000000000, -3.289872016222589, 0.000000000000000, 0.417612988384414, 0.000000000000000, 1.493982103868165, 0.000000000000000, +-0.415353391377005, 0.000000000000000, 0.288670764933155, 0.000000000000000, -1.895650228872272, 0.000000000000000, -0.139631694475020, 0.000000000000000, +1.445103299005436, 0.000000000000000, 2.877182243683429, 0.000000000000000, 1.192428490172580, 0.000000000000000, -5.964591921763842, 0.000000000000000, +0.570859795882959, 0.000000000000000, 2.328333316356666, 0.000000000000000, 0.333755014930026, 0.000000000000000, 1.221901577771909, 0.000000000000000, +0.943358697415568, 0.000000000000000, 2.793063983613067, 0.000000000000000, 3.163005066073616, 0.000000000000000, 2.098300664513867, 0.000000000000000, +-3.915313164333447, 0.000000000000000, -2.475766769064539, 0.000000000000000, 1.720472044894277, 0.000000000000000, -1.273591949275665, 0.000000000000000, +-1.213451272938616, 0.000000000000000, 0.697439404325690, 0.000000000000000, -0.309902287574293, 0.000000000000000, 2.622575852162781, 0.000000000000000, +-2.075881936219060, 0.000000000000000, 0.777847545691770, 0.000000000000000, -3.967947986440650, 0.000000000000000, -3.066503371806472, 0.000000000000000, +1.193780625937845, 0.000000000000000, 0.214246579281311, 0.000000000000000, -2.610681491162162, 0.000000000000000, -1.261224183972745, 0.000000000000000, +-1.165071748544285, 0.000000000000000, -1.116548474834374, 0.000000000000000, 0.847202164846982, 0.000000000000000, -3.474301529532390, 0.000000000000000, +0.020799541946476, 0.000000000000000, -3.868995473288166, 0.000000000000000, 1.757979409638067, 0.000000000000000, 0.868115130183109, 0.000000000000000, +0.910167436737958, 0.000000000000000, -1.878855115563720, 0.000000000000000, 1.710357104174161, 0.000000000000000, -1.468933980990902, 0.000000000000000, +1.799544171601169, 0.000000000000000, -4.922332880027887, 0.000000000000000, 0.219424548939720, 0.000000000000000, -0.971671113451924, 0.000000000000000, +-0.940533475616266, 0.000000000000000, 0.122510114412152, 0.000000000000000, -1.373686254916911, 0.000000000000000, 1.760348103896323, 0.000000000000000, +0.391745067829643, 0.000000000000000, 2.521958505327354, 0.000000000000000, -1.300693516405092, 0.000000000000000, -0.538251788309178, 0.000000000000000, +0.797184135810173, 0.000000000000000, 2.908800548982588, 0.000000000000000, 1.590902251655215, 0.000000000000000, -1.070323714487264, 0.000000000000000, +-3.349764443340999, 0.000000000000000, -1.190563529731447, 0.000000000000000, 1.363369471291963, 0.000000000000000, -1.814270299924576, 0.000000000000000, +-0.023381588315711, 0.000000000000000, 1.719182048679569, 0.000000000000000, 0.839917213252626, 0.000000000000000, 1.006099633839122, 0.000000000000000, +0.812462674381527, 0.000000000000000, 1.755814336346739, 0.000000000000000, 2.546848681206319, 0.000000000000000, -1.555300208869455, 0.000000000000000, +1.017053811631167, 0.000000000000000, 0.996591039170903, 0.000000000000000, -1.228047247924881, 0.000000000000000, 4.809462271463009, 0.000000000000000, +2.318113116151685, 0.000000000000000, -1.206932520679733, 0.000000000000000, 1.273757685623312, 0.000000000000000, 0.724335352481802, 0.000000000000000, +1.519876652073198, 0.000000000000000, -2.749670314714158, 0.000000000000000, 3.424042481847581, 0.000000000000000, -3.714668360421517, 0.000000000000000, +1.612834197004014, 0.000000000000000, -2.038234723985566, 0.000000000000000, 1.470938786562152, 0.000000000000000, 2.111634918450302, 0.000000000000000, +1.030376670151787, 0.000000000000000, -0.420877189003829, 0.000000000000000, -1.502024800532894, 0.000000000000000, 0.452310749163804, 0.000000000000000, +-1.606059382300987, 0.000000000000000, -4.006159967834147, 0.000000000000000, -2.152801208196508, 0.000000000000000, 1.671674089372579, 0.000000000000000, +1.714536333564101, 0.000000000000000, -1.011518543005344, 0.000000000000000, -0.576410282180584, 0.000000000000000, 0.733689809480836, 0.000000000000000, +1.004245602717974, 0.000000000000000, 1.010090391888449, 0.000000000000000, 3.811459513385621, 0.000000000000000, -5.230621089271954, 0.000000000000000, +0.678044861034399, 0.000000000000000, 1.255935859598107, 0.000000000000000, 1.674521701615288, 0.000000000000000, -1.656695216761705, 0.000000000000000, +1.169286028869693, 0.000000000000000, 0.524915416191998, 0.000000000000000, 2.397642885039520, 0.000000000000000, 2.108711400616072, 0.000000000000000, +2.037618211018084, 0.000000000000000, -0.623664553406925, 0.000000000000000, 2.984106170984409, 0.000000000000000, 1.132182737400932, 0.000000000000000, +-2.859274340352130, 0.000000000000000, -0.975550071398723, 0.000000000000000, -1.359935119997407, 0.000000000000000, -2.963308211050121, 0.000000000000000, +-0.228726662781163, 0.000000000000000, -1.411110379682043, 0.000000000000000, 0.741553355734225, 0.000000000000000, 0.497554254758309, 0.000000000000000, +2.371907950598855, 0.000000000000000, 1.063465168988748, 0.000000000000000, -0.641082692081488, 0.000000000000000, -0.855439878540726, 0.000000000000000, +0.578321738578726, 0.000000000000000, 3.005809768796194, 0.000000000000000, 1.961458699064065, 0.000000000000000, -3.206261663772745, 0.000000000000000, +-0.364431989095434, 0.000000000000000, -0.263182496622273, 0.000000000000000, 1.843464680631139, 0.000000000000000, -0.419107530229249, 0.000000000000000, +1.662335873298487, 0.000000000000000, -0.853687563304005, 0.000000000000000, -2.584133404357169, 0.000000000000000, 3.466839568922895, 0.000000000000000, +0.881671345091973, 0.000000000000000, 0.454620014206908, 0.000000000000000, -1.737245187402739, 0.000000000000000, 2.162713238369243, 0.000000000000000, +-3.868539002714486, 0.000000000000000, 2.014114855933826, 0.000000000000000, -0.703233831811006, 0.000000000000000, -3.410319935997574, 0.000000000000000, +-1.851235811006584, 0.000000000000000, 0.909783907894036, 0.000000000000000, 0.091884002136728, 0.000000000000000, -2.688294201131650, 0.000000000000000, +-0.906134178460955, 0.000000000000000, 3.475054609035133, 0.000000000000000, -0.573927964170323, 0.000000000000000, -0.429542937515399, 0.000000000000000, +0.991348618739939, 0.000000000000000, 1.974804904926325, 0.000000000000000, 0.975783450796698, 0.000000000000000, -3.057119549071503, 0.000000000000000, +-3.899429237481194, 0.000000000000000, 0.362439009175350, 0.000000000000000, -1.124461670265618, 0.000000000000000, 1.806000360163583, 0.000000000000000, +-2.768333362600288, 0.000000000000000, 0.244387897900379, 0.000000000000000, 0.908767296720926, 0.000000000000000, 1.254669374391882, 0.000000000000000, +-1.420441929463686, 0.000000000000000, -0.875658895966293, 0.000000000000000, 0.183824603376167, 0.000000000000000, -3.361653917011686, 0.000000000000000, +-0.796615630227952, 0.000000000000000, -1.660226542658673, 0.000000000000000, 1.654439358307226, 0.000000000000000, 2.782812946709771, 0.000000000000000, +1.418064412811531, 0.000000000000000, -0.819645647243761, 0.000000000000000, 0.807724772592699, 0.000000000000000, -0.941967976379298, 0.000000000000000, +-2.312768306047469, 0.000000000000000, 0.872426936477443, 0.000000000000000, 0.919528961530845, 0.000000000000000, -2.084904575264847, 0.000000000000000, +-1.972464868459322, 0.000000000000000, -1.050687203338466, 0.000000000000000, 1.659579707007902, 0.000000000000000, -1.820640014705855, 0.000000000000000, +-1.195078061671045, 0.000000000000000, -1.639773173762048, 0.000000000000000, 1.616744338157063, 0.000000000000000, 4.019216096811563, 0.000000000000000, +3.461021102549681, 0.000000000000000, 1.642352734361484, 0.000000000000000, -0.046354693720813, 0.000000000000000, -0.041936252359677, 0.000000000000000, +-2.393307519480551, 0.000000000000000, -0.341471634615121, 0.000000000000000, -0.392073595257017, 0.000000000000000, -0.219299018372730, 0.000000000000000, +-2.016391579662071, 0.000000000000000, -0.653096251969787, 0.000000000000000, 1.466353155666821, 0.000000000000000, -2.872058864320412, 0.000000000000000, +-2.157180779503830, 0.000000000000000, 0.723257479841560, 0.000000000000000, 3.769951308104384, 0.000000000000000, -1.923392042420024, 0.000000000000000, +0.644899359942840, 0.000000000000000, -2.090226891621437, 0.000000000000000, -0.277043982890403, 0.000000000000000, -0.528271428321112, 0.000000000000000, +2.518120645960652, 0.000000000000000, 1.040820431111488, 0.000000000000000, -4.560583754742486, 0.000000000000000, -0.226899614918836, 0.000000000000000, +1.713331231108959, 0.000000000000000, -3.293941019163642, 0.000000000000000, -1.113331444648290, 0.000000000000000, -1.032308423149906, 0.000000000000000, +1.593774272982443, 0.000000000000000, -1.246840475090529, 0.000000000000000, -0.190344684920137, 0.000000000000000, -1.719386356896355, 0.000000000000000, +-2.827721754659679, 0.000000000000000, -0.092438285279020, 0.000000000000000, -0.565844430675246, 0.000000000000000, -1.077916121691716, 0.000000000000000, +-1.208665809504693, 0.000000000000000, -2.996014266381254, 0.000000000000000, 2.888573323402423, 0.000000000000000, 2.829507048720695, 0.000000000000000, +-0.859177034120755, 0.000000000000000, -1.969302377743254, 0.000000000000000, 0.777437674525362, 0.000000000000000, -0.124910190157646, 0.000000000000000, +0.129875493115290, 0.000000000000000, -4.192139262163992, 0.000000000000000, 3.023496047962126, 0.000000000000000, 1.149775163736637, 0.000000000000000, +2.038151304801731, 0.000000000000000, 3.016122489841263, 0.000000000000000, -4.829481812137012, 0.000000000000000, -1.668436615909279, 0.000000000000000, +0.958586784636918, 0.000000000000000, 1.550652410058678, 0.000000000000000, -1.456305257976716, 0.000000000000000, -0.079588392344731, 0.000000000000000, +-2.453213599392345, 0.000000000000000, 0.296795909127105, 0.000000000000000, -0.253426616607643, 0.000000000000000, 1.418937160028195, 0.000000000000000, +-1.672949529066915, 0.000000000000000, -1.620990298572947, 0.000000000000000, -1.085103073196045, 0.000000000000000, 0.738606361195386, 0.000000000000000, +-2.097831202853255, 0.000000000000000, 2.711952282071310, 0.000000000000000, 1.498539238246888, 0.000000000000000, 1.317457282535915, 0.000000000000000, +-0.302765938349717, 0.000000000000000, -0.044623707947201, 0.000000000000000, 2.337405215062395, 0.000000000000000, -3.980689173859100, 0.000000000000000, + + +}; + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fft_bin_example/GCC/arm_fft_bin_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fft_bin_example/GCC/arm_fft_bin_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,158 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_fft_bin_example_f32.c +* +* Description: Example code demonstrating calculation of Max energy bin of +* frequency domain of input signal. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup FrequencyBin Frequency Bin Example + * + * \par Description + * \par + * Demonstrates the calculation of the maximum energy bin in the frequency + * domain of the input signal with the use of Complex FFT, Complex + * Magnitude, and Maximum functions. + * + * \par Algorithm: + * \par + * The input test signal contains a 10 kHz signal with uniformly distributed white noise. + * Calculating the FFT of the input signal will give us the maximum energy of the + * bin corresponding to the input frequency of 10 kHz. + * + * \par Block Diagram: + * \image html FFTBin.gif "Block Diagram" + * \par + * The figure below shows the time domain signal of 10 kHz signal with + * uniformly distributed white noise, and the next figure shows the input + * in the frequency domain. The bin with maximum energy corresponds to 10 kHz signal. + * \par + * \image html FFTBinInput.gif "Input signal in Time domain" + * \image html FFTBinOutput.gif "Input signal in Frequency domain" + * + * \par Variables Description: + * \par + * \li \c testInput_f32_10khz points to the input data + * \li \c testOutput points to the output data + * \li \c fftSize length of FFT + * \li \c ifftFlag flag for the selection of CFFT/CIFFT + * \li \c doBitReverse Flag for selection of normal order or bit reversed order + * \li \c refIndex reference index value at which maximum energy of bin ocuurs + * \li \c testIndex calculated index value at which maximum energy of bin ocuurs + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_cfft_f32() + * - arm_cmplx_mag_f32() + * - arm_max_f32() + * + * Refer + * \link arm_fft_bin_example_f32.c \endlink + * + */ + + +/** \example arm_fft_bin_example_f32.c + */ + + +#include "arm_math.h" +#include "arm_const_structs.h" + +#define TEST_LENGTH_SAMPLES 2048 + +/* ------------------------------------------------------------------- +* External Input and Output buffer Declarations for FFT Bin Example +* ------------------------------------------------------------------- */ +extern float32_t testInput_f32_10khz[TEST_LENGTH_SAMPLES]; +static float32_t testOutput[TEST_LENGTH_SAMPLES/2]; + +/* ------------------------------------------------------------------ +* Global variables for FFT Bin Example +* ------------------------------------------------------------------- */ +uint32_t fftSize = 1024; +uint32_t ifftFlag = 0; +uint32_t doBitReverse = 1; + +/* Reference index at which max energy of bin ocuurs */ +uint32_t refIndex = 213, testIndex = 0; + +/* ---------------------------------------------------------------------- +* Max magnitude FFT Bin test +* ------------------------------------------------------------------- */ + +int32_t main(void) +{ + + arm_status status; + float32_t maxValue; + + status = ARM_MATH_SUCCESS; + + /* Process the data through the CFFT/CIFFT module */ + arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse); + + /* Process the data through the Complex Magnitude Module for + calculating the magnitude at each bin */ + arm_cmplx_mag_f32(testInput_f32_10khz, testOutput, fftSize); + + /* Calculates maxValue and returns corresponding BIN value */ + arm_max_f32(testOutput, fftSize, &maxValue, &testIndex); + + if(testIndex != refIndex) + { + status = ARM_MATH_TEST_FAILURE; + } + + /* ---------------------------------------------------------------------- + ** Loop here if the signals fail the PASS check. + ** This denotes a test failure + ** ------------------------------------------------------------------- */ + + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fir_example/ARM/arm_fir_data.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fir_example/ARM/arm_fir_data.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_fir_data.c +* +* Description: Data file used for example code +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +** Test input signal contains 1000Hz + 15000 Hz +** ------------------------------------------------------------------- */ + +float32_t testInput_f32_1kHz_15kHz[320] = +{ ++0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, +-0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, ++0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, ++0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, ++0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, ++0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, +-0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, +-0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, ++0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, ++0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, +-0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, ++0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, +-0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, ++0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +}; + +float32_t refOutput[320] = +{ ++0.0000000000f, -0.0010797829f, -0.0007681386f, -0.0001982932f, +0.0000644313f, +0.0020854271f, +0.0036891871f, +0.0015855941f, +-0.0026280805f, -0.0075907658f, -0.0119390538f, -0.0086665968f, +0.0088981202f, +0.0430539279f, +0.0974468742f, +0.1740405600f, ++0.2681416601f, +0.3747720089f, +0.4893362230f, +0.6024154672f, +0.7058740791f, +0.7968348987f, +0.8715901940f, +0.9277881093f, ++0.9682182661f, +0.9934674267f, +1.0012052245f, +0.9925859371f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, -0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f +}; + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fir_example/ARM/arm_fir_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fir_example/ARM/arm_fir_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,233 @@ +/* ---------------------------------------------------------------------- + * Copyright (C) 2010-2012 ARM Limited. All rights reserved. + * +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library + * Title: arm_fir_example_f32.c + * + * Description: Example code demonstrating how an FIR filter can be used + * as a low pass filter. + * + * Target Processor: Cortex-M4/Cortex-M3 + * +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup FIRLPF FIR Lowpass Filter Example + * + * \par Description: + * \par + * Removes high frequency signal components from the input using an FIR lowpass filter. + * The example demonstrates how to configure an FIR filter and then pass data through + * it in a block-by-block fashion. + * \image html FIRLPF_signalflow.gif + * + * \par Algorithm: + * \par + * The input signal is a sum of two sine waves: 1 kHz and 15 kHz. + * This is processed by an FIR lowpass filter with cutoff frequency 6 kHz. + * The lowpass filter eliminates the 15 kHz signal leaving only the 1 kHz sine wave at the output. + * \par + * The lowpass filter was designed using MATLAB with a sample rate of 48 kHz and + * a length of 29 points. + * The MATLAB code to generate the filter coefficients is shown below: + *
+ *     h = fir1(28, 6/24);
+ * 
+ * The first argument is the "order" of the filter and is always one less than the desired length. + * The second argument is the normalized cutoff frequency. This is in the range 0 (DC) to 1.0 (Nyquist). + * A 6 kHz cutoff with a Nyquist frequency of 24 kHz lies at a normalized frequency of 6/24 = 0.25. + * The CMSIS FIR filter function requires the coefficients to be in time reversed order. + *
+ *     fliplr(h)
+ * 
+ * The resulting filter coefficients and are shown below. + * Note that the filter is symmetric (a property of linear phase FIR filters) + * and the point of symmetry is sample 14. Thus the filter will have a delay of + * 14 samples for all frequencies. + * \par + * \image html FIRLPF_coeffs.gif + * \par + * The frequency response of the filter is shown next. + * The passband gain of the filter is 1.0 and it reaches 0.5 at the cutoff frequency 6 kHz. + * \par + * \image html FIRLPF_response.gif + * \par + * The input signal is shown below. + * The left hand side shows the signal in the time domain while the right hand side is a frequency domain representation. + * The two sine wave components can be clearly seen. + * \par + * \image html FIRLPF_input.gif + * \par + * The output of the filter is shown below. The 15 kHz component has been eliminated. + * \par + * \image html FIRLPF_output.gif + * + * \par Variables Description: + * \par + * \li \c testInput_f32_1kHz_15kHz points to the input data + * \li \c refOutput points to the reference output data + * \li \c testOutput points to the test output data + * \li \c firStateF32 points to state buffer + * \li \c firCoeffs32 points to coefficient buffer + * \li \c blockSize number of samples processed at a time + * \li \c numBlocks number of frames + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_fir_init_f32() + * - arm_fir_f32() + * + * Refer + * \link arm_fir_example_f32.c \endlink + * + */ + + +/** \example arm_fir_example_f32.c + */ + +/* ---------------------------------------------------------------------- +** Include Files +** ------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "math_helper.h" + +/* ---------------------------------------------------------------------- +** Macro Defines +** ------------------------------------------------------------------- */ + +#define TEST_LENGTH_SAMPLES 320 +#define SNR_THRESHOLD_F32 140.0f +#define BLOCK_SIZE 32 +#define NUM_TAPS 29 + +/* ------------------------------------------------------------------- + * The input signal and reference output (computed with MATLAB) + * are defined externally in arm_fir_lpf_data.c. + * ------------------------------------------------------------------- */ + +extern float32_t testInput_f32_1kHz_15kHz[TEST_LENGTH_SAMPLES]; +extern float32_t refOutput[TEST_LENGTH_SAMPLES]; + +/* ------------------------------------------------------------------- + * Declare Test output buffer + * ------------------------------------------------------------------- */ + +static float32_t testOutput[TEST_LENGTH_SAMPLES]; + +/* ------------------------------------------------------------------- + * Declare State buffer of size (numTaps + blockSize - 1) + * ------------------------------------------------------------------- */ + +static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1]; + +/* ---------------------------------------------------------------------- +** FIR Coefficients buffer generated using fir1() MATLAB function. +** fir1(28, 6/24) +** ------------------------------------------------------------------- */ + +const float32_t firCoeffs32[NUM_TAPS] = { + -0.0018225230f, -0.0015879294f, +0.0000000000f, +0.0036977508f, +0.0080754303f, +0.0085302217f, -0.0000000000f, -0.0173976984f, + -0.0341458607f, -0.0333591565f, +0.0000000000f, +0.0676308395f, +0.1522061835f, +0.2229246956f, +0.2504960933f, +0.2229246956f, + +0.1522061835f, +0.0676308395f, +0.0000000000f, -0.0333591565f, -0.0341458607f, -0.0173976984f, -0.0000000000f, +0.0085302217f, + +0.0080754303f, +0.0036977508f, +0.0000000000f, -0.0015879294f, -0.0018225230f +}; + +/* ------------------------------------------------------------------ + * Global variables for FIR LPF Example + * ------------------------------------------------------------------- */ + +uint32_t blockSize = BLOCK_SIZE; +uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE; + +float32_t snr; + +/* ---------------------------------------------------------------------- + * FIR LPF Example + * ------------------------------------------------------------------- */ + +int32_t main(void) +{ + uint32_t i; + arm_fir_instance_f32 S; + arm_status status; + float32_t *inputF32, *outputF32; + + /* Initialize input and output buffer pointers */ + inputF32 = &testInput_f32_1kHz_15kHz[0]; + outputF32 = &testOutput[0]; + + /* Call FIR init function to initialize the instance structure. */ + arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32[0], &firStateF32[0], blockSize); + + /* ---------------------------------------------------------------------- + ** Call the FIR process function for every blockSize samples + ** ------------------------------------------------------------------- */ + + for(i=0; i < numBlocks; i++) + { + arm_fir_f32(&S, inputF32 + (i * blockSize), outputF32 + (i * blockSize), blockSize); + } + + /* ---------------------------------------------------------------------- + ** Compare the generated output against the reference output computed + ** in MATLAB. + ** ------------------------------------------------------------------- */ + + snr = arm_snr_f32(&refOutput[0], &testOutput[0], TEST_LENGTH_SAMPLES); + + if (snr < SNR_THRESHOLD_F32) + { + status = ARM_MATH_TEST_FAILURE; + } + else + { + status = ARM_MATH_SUCCESS; + } + + /* ---------------------------------------------------------------------- + ** Loop here if the signal does not match the reference output. + ** ------------------------------------------------------------------- */ + + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ +} + +/** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fir_example/ARM/math_helper.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fir_example/ARM/math_helper.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,458 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param float* Pointer to the reference buffer + * @param float* Pointer to the test buffer + * @param uint32_t total number of samples + * @return float SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param q15_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q15_t* Pointer to Ref buffer + * @param q15_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q31_t* Pointer to Ref buffer + * @param q31_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param uint32_t number of additions + * @return none + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Converts Q15 to floating-point + * @param uint32_t number of samples in the buffer + * @return none + */ + +void arm_apply_guard_bits (float32_t * pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param uint32_t number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param pIn input buffer + * @param numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if(pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fir_example/ARM/math_helper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_fir_example/ARM/math_helper.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_graphic_equalizer_example/ARM/arm_graphic_equalizer_data.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_graphic_equalizer_example/ARM/arm_graphic_equalizer_data.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_graphic_equalizer_data.c +* +* Description: Data file used for example code +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +#include "arm_math.h" + +float32_t testRefOutput_f32[320] = { + +0.000000000000000000, 0.001898396760225296, 0.004215449094772339, 0.007432077080011368, 0.010948467999696732, 0.015026375651359558, 0.019191544502973557, 0.023574527353048325, +0.027919445186853409, 0.032277785241603851, 0.036551639437675476, 0.040732793509960175, 0.044799156486988068, 0.048710610717535019, 0.052476800978183746, 0.056059073656797409, +0.059482168406248093, 0.062726479023694992, 0.065821025520563126, 0.068763464689254761, 0.071577839553356171, 0.074270240962505341, 0.076856281608343124, 0.079344697296619415, +0.081745062023401260, 0.084067162126302719, 0.086318407207727432, 0.088509257882833481, 0.090647127479314804, 0.092742368578910828, 0.094802625477313995, 0.096837285906076431, +0.098853722214698792, 0.100859899073839190, 0.102862443774938580, 0.104867763817310330, 0.106881409883499150, 0.108908228576183320, 0.110952425748109820, 0.113017357885837550, +0.115105822682380680, 0.117219865322113040, 0.119361080229282380, 0.121530555188655850, 0.123729091137647630, 0.125957202166318890, 0.128215309232473370, 0.130503740161657330, +0.132822841405868530, 0.135173004120588300, 0.137554679065942760, 0.139968376606702800, 0.142414685338735580, 0.144894234836101530, 0.147407654672861100, 0.149955596774816510, +0.152538605034351350, 0.155157200992107390, 0.157811731100082400, 0.160502441227436070, 0.163229387253522870, 0.165992442518472670, 0.168791320174932480, 0.171625509858131410, +0.174494370818138120, 0.177397061139345170, 0.180332608520984650, 0.183299910277128220, 0.186297744512557980, 0.189324837177991870, 0.192379791289567950, 0.195461250841617580, +0.198567759245634080, 0.201697919517755510, 0.204850304871797560, 0.208023533225059510, 0.211216274648904800, 0.214427210390567780, 0.217655111104249950, 0.220898788422346120, +0.224157124757766720, 0.227429077029228210, 0.230713658034801480, 0.234009962528944020, 0.237317133694887160, 0.240634419023990630, 0.243961080908775330, 0.247296508401632310, +0.250640105456113820, 0.253991369158029560, 0.257349837571382520, 0.260715119540691380, 0.264086868613958360, 0.267464816570281980, 0.270848698914051060, 0.274238351732492450, +0.277633611112833020, 0.281034380197525020, 0.284440591931343080, 0.287852220237255100, 0.291269283741712570, 0.294691801071166990, 0.298119872808456420, 0.301553562283515930, +0.304993014782667160, 0.308438356965780260, 0.311889752745628360, 0.315347377210855480, 0.318811416625976560, 0.322282072156667710, 0.325759567320346830, 0.329244095832109450, +0.332735907286405560, 0.336235217750072480, 0.339742250740528110, 0.343257248401641850, 0.346780419349670410, 0.350311983376741410, 0.353852160274982450, 0.357401121407747270, +0.360959105193614960, 0.364526227116584780, 0.368102725595235820, 0.371688675135374070, 0.375284302979707720, 0.378889638930559160, 0.382504884153604510, 0.386130042374134060, +0.389765247702598570, 0.393410529941320420, 0.397065933793783190, 0.400731507688760760, 0.404407206922769550, 0.408093083649873730, 0.411789052188396450, 0.415495119988918300, +0.419211201369762420, 0.422937240451574330, 0.426673140376806260, 0.430418811738491060, 0.434174135327339170, 0.437938995659351350, 0.441713258624076840, 0.445496778935194020, +0.449289388954639430, 0.453090950846672060, 0.456901267170906070, 0.460720170289278030, 0.464547459036111830, 0.468382950872182850, 0.472226426005363460, 0.476077698171138760, +0.479936532676219940, 0.483802750706672670, 0.487676106393337250, 0.491556398570537570, 0.495443399995565410, 0.499336875975131990, 0.503236617892980580, 0.507142387330532070, +0.511053957045078280, 0.514971107244491580, 0.518893606960773470, 0.522821225225925450, 0.526753749698400500, 0.530690938234329220, 0.534632585942745210, 0.538578454405069350, +0.542528338730335240, 0.546481993049383160, 0.550439231097698210, 0.554399792104959490, 0.558363504707813260, 0.562330115586519240, 0.566299438476562500, 0.570271246135234830, +0.574245333671569820, 0.578221492469310760, 0.582199502736330030, 0.586179181933403020, 0.590160276740789410, 0.594142623245716090, 0.598125983029603960, 0.602110169827938080, +0.606094967573881150, 0.610080175101757050, 0.614065583795309070, 0.618050977587699890, 0.622036151587963100, 0.626020893454551700, 0.630004994571208950, 0.633988231420516970, +0.637970402836799620, 0.641951277852058410, 0.645930647850036620, 0.649908289313316350, 0.653883971273899080, 0.657857488840818410, 0.661828581243753430, 0.665797054767608640, +0.669762641191482540, 0.673725124448537830, 0.677684243768453600, 0.681639779359102250, 0.685591462999582290, 0.689539063721895220, 0.693482317030429840, 0.697420965880155560, +0.701354760676622390, 0.705283410847187040, 0.709206689149141310, 0.713124278932809830, 0.717035952955484390, 0.720941375941038130, 0.724840316921472550, 0.728732451796531680, +0.732617516070604320, 0.736495196819305420, 0.740365199744701390, 0.744227230548858640, 0.748080968856811520, 0.751926124095916750, 0.755762357264757160, 0.759589381515979770, +0.763406842947006230, 0.767214450985193250, 0.771011855453252790, 0.774798732250928880, 0.778574761003255840, 0.782339565455913540, 0.786092851310968400, 0.789834223687648770, +0.793563373386859890, 0.797279909253120420, 0.800983514636754990, 0.804673787206411360, 0.808350402861833570, 0.812012966722249980, 0.815661124885082240, 0.819294504821300510, +0.822912722826004030, 0.826515413820743560, 0.830102190375328060, 0.833672653883695600, 0.837226435542106630, 0.840763118118047710, 0.844282336533069610, 0.847783654928207400, +0.851266715675592420, 0.854731071740388870, 0.858176350593566890, 0.861602116376161580, 0.865007970482110980, 0.868393491953611370, 0.871758259832859040, 0.875101849436759950, +0.878423850983381270, 0.881723806262016300, 0.885001312941312790, 0.888255912810564040, 0.891487173736095430, 0.894694659858942030, 0.897877920418977740, 0.901036512106657030, +0.904169965535402300, 0.907277844846248630, 0.910359673202037810, 0.913415014743804930, 0.916443370282649990, 0.919444311410188670, 0.922417331486940380, 0.925361987203359600, +0.928277771919965740, 0.931164238601922990, 0.934020876884460450, 0.936847217381000520, 0.939642757177352910, 0.942407000809907910, 0.945139460265636440, 0.947839632630348210, +0.950507018715143200, 0.953141096979379650, 0.955741371959447860, 0.958307322114706040, 0.960838429629802700, 0.963334184139966960, 0.965794049203395840, 0.968217510730028150, +0.970604017376899720, 0.972953058779239650, 0.975264083594083790, 0.977536566555500030, 0.979769956320524220, 0.981963708996772770, 0.984117280691862110, 0.986230112612247470, +0.988301653414964680, 0.990331344306468960, 0.992318630218505860, 0.994262944906950000, 0.996163722127676010, 0.998020399361848830, 0.999832402914762500, 1.001599155366420700, +1.003320086747407900, 1.004994612187147100, 1.006622135639190700, 1.008202098309993700, 1.009733878076076500, 1.011216927319765100, 1.012650609016418500, 1.014034371823072400, +1.015367589890956900, 1.016649682074785200, 1.017880033701658200, 1.019058048725128200, 1.020183108747005500, 1.021254621446132700, 1.022271949797868700, 1.023234523832798000, + +}; +/* ---------------------------------------------------------------------- +** Test input - logarithmic chirp signal +** ------------------------------------------------------------------- */ + +float32_t testInput_f32[320] = + { + 0.000000000000000061, 0.002622410992047861, 0.005253663973466970, 0.007893770384930297, 0.010542741395035495, 0.013200587895525877, 0.015867320496454066, 0.018542949521290073, +0.021227485001971542, 0.023920936673895138, 0.026623313970853074, 0.029334626019908643, 0.032054881636210709, 0.034784089317753723, 0.037522257240071598, 0.040269393250875855, +0.043025504864628375, 0.045790599257054837, 0.048564683259595690, 0.051347763353792118, 0.054139845665610427, 0.056940935959702531, 0.059751039633601337, 0.062570161711849828, +0.065398306840066575, 0.068235479278943648, 0.071081682898178900, 0.073936921170339814, 0.076801197164660218, 0.079674513540768196, 0.082556872542344922, 0.085448275990715375, +0.088348725278367082, 0.091258221362398390, 0.094176764757897533, 0.097104355531246703, 0.100040993293358240, 0.102986677192832010, 0.105941405909045980, 0.108905177645166230, +0.111877990121087980, 0.114859840566297130, 0.117850725712659680, 0.120850641787131110, 0.123859584504392860, 0.126877549059407400, 0.129904530119898690, 0.132940521818751430, +0.135985517746334080, 0.139039510942737950, 0.142102493889940090, 0.145174458503884160, 0.148255396126476810, 0.151345297517508140, 0.154444152846483080, 0.157551951684374300, +0.160668682995289720, 0.163794335128054890, 0.166928895807713030, 0.170072352126936720, 0.173224690537355760, 0.176385896840798810, 0.179555956180445340, 0.182734853031894270, +0.185922571194139130, 0.189119093780459800, 0.192324403209221870, 0.195538481194587030, 0.198761308737133020, 0.201992866114384050, 0.205233132871247170, 0.208482087810360570, +0.211739708982344370, 0.215005973675965020, 0.218280858408200220, 0.221564338914212730, 0.224856390137231970, 0.228156986218334190, 0.231466100486134670, 0.234783705446379690, +0.238109772771442410, 0.241444273289723230, 0.244787176974952890, 0.248138452935395580, 0.251498069402956710, 0.254865993722190930, 0.258242192339209860, 0.261626630790492030, +0.265019273691591620, 0.268420084725748410, 0.271829026632395280, 0.275246061195565440, 0.278671149232197430, 0.282104250580339830, 0.285545324087251580, 0.288994327597401960, +0.292451217940364990, 0.295915950918612280, 0.299388481295203350, 0.302868762781368150, 0.306356748023990040, 0.309852388592980640, 0.313355634968552230, 0.316866436528383590, +0.320384741534681720, 0.323910497121136620, 0.327443649279772870, 0.330984142847692230, 0.334531921493712690, 0.338086927704900790, 0.341649102772995210, 0.345218386780727190, +0.348794718588032520, 0.352378035818156910, 0.355968274843654950, 0.359565370772282730, 0.363169257432780890, 0.366779867360555120, 0.370397131783246010, 0.374020980606193880, +0.377651342397795690, 0.381288144374756830, 0.384931312387234990, 0.388580770903877330, 0.392236442996751310, 0.395898250326170650, 0.399566113125414350, 0.403239950185338420, +0.406919678838884410, 0.410605214945482130, 0.414296472875345100, 0.417993365493664670, 0.421695804144698540, 0.425403698635752780, 0.429116957221065130, 0.432835486585582130, +0.436559191828633180, 0.440287976447505720, 0.444021742320914510, 0.447760389692375140, 0.451503817153472210, 0.455251921627031540, 0.459004598350192470, 0.462761740857380200, +0.466523240963184150, 0.470288988745136360, 0.474058872526396560, 0.477832778858340690, 0.481610592503056990, 0.485392196415748600, 0.489177471727042850, 0.492966297725213780, +0.496758551838309250, 0.500554109616195060, 0.504352844712508190, 0.508154628866524960, 0.511959331884944910, 0.515766821623591440, 0.519576963969030530, 0.523389622820107150, +0.527204660069405030, 0.531021935584629400, 0.534841307189911630, 0.538662630647041900, 0.542485759636628150, 0.546310545739186690, 0.550136838416161340, 0.553964484990880020, +0.557793330629441700, 0.561623218321546380, 0.565453988861259300, 0.569285480827721570, 0.573117530565801950, 0.576949972166696630, 0.580782637448476910, 0.584615355936589420, +0.588447954844309340, 0.592280259053150400, 0.596112091093235260, 0.599943271123626440, 0.603773616912622660, 0.607602943818024150, 0.611431064767369080, 0.615257790238142090, +0.619082928237961740, 0.622906284284749700, 0.626727661386881850, 0.630546860023327600, 0.634363678123782030, 0.638177911048790960, 0.641989351569874020, 0.645797789849653410, +0.649603013421986450, 0.653404807172108140, 0.657202953316791350, 0.660997231384523490, 0.664787418195706640, 0.668573287842887610, 0.672354611671016960, 0.676131158257749170, +0.679902693393781730, 0.683668980063242500, 0.687429778424128110, 0.691184845788802130, 0.694933936604551380, 0.698676802434213370, 0.702413191936877570, 0.706142850848662460, +0.709865521963579990, 0.713580945114492330, 0.717288857154159800, 0.720988991936399870, 0.724681080297347790, 0.728364850036839040, 0.732040025899910680, 0.735706329558433620, +0.739363479592880620, 0.743011191474238440, 0.746649177546067850, 0.750277147006723990, 0.753894805891742180, 0.757501857056394940, 0.761098000158428880, 0.764682931640995540, +0.768256344715771980, 0.771817929346292900, 0.775367372231492210, 0.778904356789468790, 0.782428563141483460, 0.785939668096195860, 0.789437345134148760, 0.792921264392515420, +0.796391092650110770, 0.799846493312681210, 0.803287126398485760, 0.806712648524170680, 0.810122712890953390, 0.813516969271127150, 0.816895063994893090, 0.820256639937531280, +0.823601336506926020, 0.826928789631450890, 0.830238631748229430, 0.833530491791779850, 0.836803995183058700, 0.840058763818912760, 0.843294416061954100, 0.846510566730867220, +0.849706827091166740, 0.852882804846411770, 0.856038104129895340, 0.859172325496819990, 0.862285065916973510, 0.865375918767918860, 0.868444473828712590, 0.871490317274166260, +0.874513031669661770, 0.877512195966544280, 0.880487385498096800, 0.883438171976119850, 0.886364123488128100, 0.889264804495180530, 0.892139775830360640, 0.894988594697921020, +0.897810814673113080, 0.900605985702712770, 0.903373654106265470, 0.906113362578062300, 0.908824650189867690, 0.911507052394417540, 0.914160101029702910, 0.916783324324059180, +0.919376246902079860, 0.921938389791372770, 0.924469270430179120, 0.926968402675872660, 0.929435296814361430, 0.931869459570409790, 0.934270394118903560, 0.936637600097074200, +0.938970573617708970, 0.941268807283364040, 0.943531790201601380, 0.945759008001275100, 0.947949942849885320, 0.950104073472023970, 0.952220875168933280, 0.954299819839202090, +0.956340376000621160, 0.958342008813221960, 0.960304180103520260, 0.962226348389994210, 0.964107968909812760, 0.965948493646846980, 0.967747371360983650, 0.969504047618768740, +0.971217964825405680, 0.972888562258134030, 0.974515276101013520, 0.976097539481141750, 0.977634782506330400, 0.979126432304266880, 0.980571913063189360, 0.981970646074102120, +0.983322049774557390, 0.984625539794035220, 0.985880529000944810, 0.987086427551279730, 0.988242642938953360, 0.989348580047844540, 0.990403641205582440, 0.991407226239099710, +0.992358732531984260, 0.993257555083659870, 0.994103086570423680, 0.994894717408374870, 0.995631835818261310, 0.996313827892278070, 0.996940077662846650, 0.997509967173408010, + + }; diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_graphic_equalizer_example/ARM/arm_graphic_equalizer_example_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_graphic_equalizer_example/ARM/arm_graphic_equalizer_example_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,411 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_graphic_equalizer_example_q31.c +* +* Description: Example showing an audio graphic equalizer constructed +* out of Biquad filters. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup GEQ5Band Graphic Audio Equalizer Example + * + * \par Description: + * \par + * This example demonstrates how a 5-band graphic equalizer can be constructed + * using the Biquad cascade functions. + * A graphic equalizer is used in audio applications to vary the tonal quality + * of the audio. + * + * \par Block Diagram: + * \par + * The design is based on a cascade of 5 filter sections. + * \image html GEQ_signalflow.gif + * Each filter section is 4th order and consists of a cascade of two Biquads. + * Each filter has a nominal gain of 0 dB (1.0 in linear units) and + * boosts or cuts signals within a specific frequency range. + * The edge frequencies between the 5 bands are 100, 500, 2000, and 6000 Hz. + * Each band has an adjustable boost or cut in the range of +/- 9 dB. + * For example, the band that extends from 500 to 2000 Hz has the response shown below: + * \par + * \image html GEQ_bandresponse.gif + * \par + * With 1 dB steps, each filter has a total of 19 different settings. + * The filter coefficients for all possible 19 settings were precomputed + * in MATLAB and stored in a table. With 5 different tables, there are + * a total of 5 x 19 = 95 different 4th order filters. + * All 95 responses are shown below: + * \par + * \image html GEQ_allbandresponse.gif + * \par + * Each 4th order filter has 10 coefficents for a grand total of 950 different filter + * coefficients that must be tabulated. The input and output data is in Q31 format. + * For better noise performance, the two low frequency bands are implemented using the high + * precision 32x64-bit Biquad filters. The remaining 3 high frequency bands use standard + * 32x32-bit Biquad filters. The input signal used in the example is a logarithmic chirp. + * \par + * \image html GEQ_inputchirp.gif + * \par + * The array bandGains specifies the gain in dB to apply in each band. + * For example, if bandGains={0, -3, 6, 4, -6}; then the output signal will be: + * \par + * \image html GEQ_outputchirp.gif + * \par + * \note The output chirp signal follows the gain or boost of each band. + * \par + * + * \par Variables Description: + * \par + * \li \c testInput_f32 points to the input data + * \li \c testRefOutput_f32 points to the reference output data + * \li \c testOutput points to the test output data + * \li \c inputQ31 temporary input buffer + * \li \c outputQ31 temporary output buffer + * \li \c biquadStateBand1Q31 points to state buffer for band1 + * \li \c biquadStateBand2Q31 points to state buffer for band2 + * \li \c biquadStateBand3Q31 points to state buffer for band3 + * \li \c biquadStateBand4Q31 points to state buffer for band4 + * \li \c biquadStateBand5Q31 points to state buffer for band5 + * \li \c coeffTable points to coefficient buffer for all bands + * \li \c gainDB gain buffer which has gains applied for all the bands + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_biquad_cas_df1_32x64_init_q31() + * - arm_biquad_cas_df1_32x64_q31() + * - arm_biquad_cascade_df1_init_q31() + * - arm_biquad_cascade_df1_q31() + * - arm_scale_q31() + * - arm_scale_f32() + * - arm_float_to_q31() + * - arm_q31_to_float() + * + * Refer + * \link arm_graphic_equalizer_example_q31.c \endlink + * + */ + + +/** \example arm_graphic_equalizer_example_q31.c + */ + + +#include "arm_math.h" +#include "math_helper.h" + +/* Length of the overall data in the test */ +#define TESTLENGTH 320 + +/* Block size for the underlying processing */ +#define BLOCKSIZE 32 + +/* Total number of blocks to run */ +#define NUMBLOCKS (TESTLENGTH/BLOCKSIZE) + +/* Number of 2nd order Biquad stages per filter */ +#define NUMSTAGES 2 + +#define SNR_THRESHOLD_F32 98 + +/* ------------------------------------------------------------------- + * External Declarations for Input and Output buffers + * ------------------------------------------------------------------- */ + +extern float32_t testInput_f32[TESTLENGTH]; +static float32_t testOutput[TESTLENGTH]; + +extern float32_t testRefOutput_f32[TESTLENGTH]; + +/* ---------------------------------------------------------------------- +** Q31 state buffers for Band1, Band2, Band3, Band4, Band5 +** ------------------------------------------------------------------- */ + +static q63_t biquadStateBand1Q31[4 * 2]; +static q63_t biquadStateBand2Q31[4 * 2]; +static q31_t biquadStateBand3Q31[4 * 2]; +static q31_t biquadStateBand4Q31[4 * 2]; +static q31_t biquadStateBand5Q31[4 * 2]; + +/* ---------------------------------------------------------------------- +** Q31 input and output buffers +** ------------------------------------------------------------------- */ + +q31_t inputQ31[BLOCKSIZE]; +q31_t outputQ31[BLOCKSIZE]; + +/* ---------------------------------------------------------------------- +** Entire coefficient table. There are 10 coefficients per 4th order Biquad +** cascade filter. The first 10 coefficients correspond to the -9 dB gain +** setting of band 1; the next 10 coefficient correspond to the -8 dB gain +** setting of band 1; and so on. There are 10*19=190 coefficients in total +** for band 1 (gains = -9, -8, -7, ..., 9). After this come the 190 coefficients +** for band 2. +** +** The coefficients are in Q29 format and require a postShift of 2. +** ------------------------------------------------------------------- */ + +const q31_t coeffTable[950] = { + + /* Band 1, -9 dB gain */ + 535576962, -1071153923, 535576962, 1073741824, -536870912, 535576962, -1063501998, 527979313, 1060865294, -524146981, + /* Band 1, -8 dB gain */ + 535723226, -1071446451, 535723226, 1073741824, -536870912, 535723226, -1063568947, 527903217, 1061230578, -524503778, + 535868593, -1071737186, 535868593, 1073741824, -536870912, 535868593, -1063627467, 527819780, 1061585502, -524850686, + 536013181, -1072026363, 536013181, 1073741824, -536870912, 536013181, -1063677598, 527728935, 1061930361, -525187972, + 536157109, -1072314217, 536157109, 1073741824, -536870912, 536157109, -1063719372, 527630607, 1062265438, -525515897, + 536300492, -1072600983, 536300492, 1073741824, -536870912, 536300492, -1063752815, 527524720, 1062591011, -525834716, + 536443447, -1072886894, 536443447, 1073741824, -536870912, 536443447, -1063777945, 527411186, 1062907350, -526144676, + 536586091, -1073172183, 536586091, 1073741824, -536870912, 536586091, -1063794775, 527289917, 1063214717, -526446017, + 536728541, -1073457082, 536728541, 1073741824, -536870912, 536728541, -1063803308, 527160815, 1063513366, -526738975, + 536870912, -1073741824, 536870912, 1073741824, -536870912, 536870912, -1063803543, 527023777, 1063803543, -527023777, + 537013321, -1074026642, 537013321, 1073741824, -536870912, 537013321, -1063795470, 526878696, 1064085490, -527300648, + 537155884, -1074311768, 537155884, 1073741824, -536870912, 537155884, -1063779073, 526725455, 1064359439, -527569803, + 537298718, -1074597435, 537298718, 1073741824, -536870912, 537298718, -1063754328, 526563934, 1064625617, -527831454, + 537441939, -1074883878, 537441939, 1073741824, -536870912, 537441939, -1063721205, 526394005, 1064884245, -528085806, + 537585666, -1075171331, 537585666, 1073741824, -536870912, 537585666, -1063679666, 526215534, 1065135536, -528333059, + 537730015, -1075460030, 537730015, 1073741824, -536870912, 537730015, -1063629666, 526028380, 1065379699, -528573409, + 537875106, -1075750212, 537875106, 1073741824, -536870912, 537875106, -1063571152, 525832396, 1065616936, -528807045, + 538021057, -1076042114, 538021057, 1073741824, -536870912, 538021057, -1063504065, 525627429, 1065847444, -529034151, + 538167989, -1076335977, 538167989, 1073741824, -536870912, 538167989, -1063428338, 525413317, 1066071412, -529254907, + + /* Band 2, -9 dB gain */ + 531784976, -1055497692, 523873415, 1066213307, -529420241, 531784976, -1040357886, 509828014, 1028908252, -494627367, + /* Band 2, -8 dB gain */ + 532357636, -1056601982, 524400080, 1066115844, -529326645, 532357636, -1040623406, 509562600, 1030462237, -496062122, + 532927392, -1057707729, 524931110, 1066024274, -529239070, 532927392, -1040848253, 509262081, 1031969246, -497457090, + 533494678, -1058816094, 525467240, 1065939047, -529157961, 533494678, -1041032161, 508925950, 1033429976, -498812573, + 534059929, -1059928204, 526009170, 1065860582, -529083734, 534059929, -1041174868, 508553717, 1034845124, -500128887, + 534623580, -1061045148, 526557561, 1065789260, -529016764, 534623580, -1041276126, 508144920, 1036215393, -501406373, + 535186068, -1062167969, 527113032, 1065725420, -528957385, 535186068, -1041335703, 507699125, 1037541500, -502645399, + 535747827, -1063297666, 527676151, 1065669351, -528905879, 535747827, -1041353386, 507215934, 1038824183, -503846368, + 536309295, -1064435183, 528247436, 1065621289, -528862476, 536309295, -1041328990, 506694984, 1040064203, -505009724, + 536870912, -1065581413, 528827349, 1065581413, -528827349, 536870912, -1041262354, 506135953, 1041262354, -506135953, + 537433117, -1066737194, 529416295, 1065549847, -528800610, 537433117, -1041153346, 505538564, 1042419457, -507225588, + 537996352, -1067903307, 530014622, 1065526651, -528782316, 537996352, -1041001864, 504902578, 1043536370, -508279208, + 538561061, -1069080480, 530622620, 1065511830, -528772462, 538561061, -1040807833, 504227800, 1044613981, -509297437, + 539127690, -1070269387, 531240527, 1065505333, -528770987, 539127690, -1040571205, 503514074, 1045653211, -510280946, + 539696690, -1071470656, 531868525, 1065507054, -528777778, 539696690, -1040291951, 502761277, 1046655011, -511230450, + 540268512, -1072684867, 532506750, 1065516837, -528792672, 540268512, -1039970063, 501969320, 1047620358, -512146700, + 540843613, -1073912567, 533155297, 1065534483, -528815459, 540843613, -1039605542, 501138139, 1048550251, -513030484, + 541422451, -1075154268, 533814224, 1065559750, -528845892, 541422451, -1039198394, 500267687, 1049445708, -513882621, + 542005489, -1076410460, 534483561, 1065592362, -528883686, 542005489, -1038748624, 499357932, 1050307760, -514703956, + 518903861, -1001986830, 486725277, 1037235801, -502367695, 518903861, -945834422, 446371043, 902366163, -400700571, + 520899989, -1005630916, 488289126, 1036926846, -502147311, 520899989, -946490935, 445581846, 907921945, -404936158, + 522893209, -1009290002, 489869792, 1036650484, -501961419, 522893209, -947006359, 444685310, 913306106, -409075225, + 524884763, -1012968199, 491470256, 1036407567, -501810737, 524884763, -947377809, 443679533, 918521018, -413116221, + 526875910, -1016669649, 493093518, 1036198712, -501695739, 526875910, -947602324, 442562672, 923569247, -417057897, + 528867927, -1020398503, 494742575, 1036024293, -501616651, 528867927, -947676875, 441332970, 928453558, -420899319, + 530862111, -1024158905, 496420407, 1035884447, -501573457, 530862111, -947598385, 439988777, 933176909, -424639872, + 532859778, -1027954970, 498129955, 1035779077, -501565907, 532859778, -947363742, 438528571, 937742446, -428279254, + 534862260, -1031790763, 499874098, 1035707863, -501593525, 534862260, -946969823, 436950987, 942153486, -431817474, + 536870912, -1035670279, 501655630, 1035670279, -501655630, 536870912, -946413508, 435254839, 946413508, -435254839, + 538887107, -1039597419, 503477238, 1035665609, -501751354, 538887107, -945691703, 433439146, 950526127, -438591937, + 540912240, -1043575967, 505341475, 1035692963, -501879659, 540912240, -944801359, 431503152, 954495080, -441829621, + 542947726, -1047609569, 507250741, 1035751307, -502039364, 542947726, -943739490, 429446349, 958324201, -444968987, + 544995000, -1051701717, 509207261, 1035839473, -502229165, 544995000, -942503190, 427268492, 962017400, -448011351, + 547055523, -1055855728, 511213065, 1035956193, -502447657, 547055523, -941089647, 424969617, 965578640, -450958226, + 549130774, -1060074734, 513269973, 1036100110, -502693359, 549130774, -939496155, 422550049, 969011913, -453811298, + 551222259, -1064361672, 515379585, 1036269804, -502964731, 551222259, -937720119, 420010407, 972321228, -456572401, + 553331507, -1068719280, 517543273, 1036463810, -503260192, 553331507, -935759057, 417351601, 975510582, -459243495, + 555460072, -1073150100, 519762181, 1036680633, -503578144, 555460072, -933610600, 414574832, 978583948, -461826644, + 494084017, -851422604, 404056273, 930151631, -423619864, 494084017, -673714108, 339502486, 561843007, -265801750, + 498713542, -859177141, 406587077, 929211656, -423786402, 498713542, -673274906, 338185129, 573719128, -272222942, + 503369016, -867012190, 409148384, 928362985, -424054784, 503369016, -672533059, 336693984, 585290277, -278599028, + 508052536, -874935599, 411746438, 927604291, -424422151, 508052536, -671478538, 335026905, 596558312, -284920289, + 512766286, -882955583, 414387826, 926933782, -424885216, 512766286, -670100998, 333182045, 607525792, -291177811, + 517512534, -891080712, 417079474, 926349262, -425440318, 517512534, -668389789, 331157902, 618195914, -297363485, + 522293635, -899319903, 419828635, 925848177, -426083491, 522293635, -666333963, 328953368, 628572440, -303470012, + 527112032, -907682405, 422642886, 925427679, -426810526, 527112032, -663922286, 326567785, 638659631, -309490882, + 531970251, -916177781, 425530105, 925084675, -427617023, 531970251, -661143261, 324000998, 648462180, -315420352, + 536870912, -924815881, 428498454, 924815881, -428498454, 536870912, -657985147, 321253420, 657985147, -321253420, + 541816719, -933606817, 431556352, 924617870, -429450209, 541816719, -654435997, 318326093, 667233900, -326985786, + 546810467, -942560921, 434712438, 924487114, -430467639, 546810467, -650483688, 315220754, 676214053, -332613816, + 551855042, -951688708, 437975532, 924420027, -431546101, 551855042, -646115970, 311939896, 684931422, -338134495, + 556953421, -961000826, 441354588, 924413001, -432680993, 556953421, -641320513, 308486839, 693391970, -343545389, + 562108672, -970508005, 444858642, 924462435, -433867780, 562108672, -636084967, 304865786, 701601770, -348844597, + 567323959, -980220994, 448496743, 924564764, -435102022, 567323959, -630397020, 301081886, 709566963, -354030710, + 572602539, -990150500, 452277894, 924716482, -436379394, 572602539, -624244471, 297141281, 717293726, -359102767, + 577947763, -1000307125, 456210977, 924914158, -437695705, 577947763, -617615296, 293051155, 724788245, -364060214, + 583363084, -1010701292, 460304674, 925154455, -439046908, 583363084, -610497723, 288819761, 732056685, -368902865, + 387379495, -506912469, 196933274, 840112184, -347208270, 387379495, 506912469, 196933274, -840112184, -347208270, + 401658082, -532275898, 207149427, 833765363, -343175316, 401658082, 532275898, 207149427, -833765363, -343175316, + 416472483, -558722695, 217902617, 827270154, -339107319, 416472483, 558722695, 217902617, -827270154, -339107319, + 431841949, -586290861, 229212798, 820624988, -335007540, 431841949, 586290861, 229212798, -820624988, -335007540, + 447786335, -615019650, 241100489, 813828443, -330879528, 447786335, 615019650, 241100489, -813828443, -330879528, + 464326111, -644949597, 253586805, 806879270, -326727141, 464326111, 644949597, 253586805, -806879270, -326727141, + 481482377, -676122557, 266693475, 799776409, -322554559, 481482377, 676122557, 266693475, -799776409, -322554559, + 499276882, -708581728, 280442865, 792519013, -318366296, 499276882, 708581728, 280442865, -792519013, -318366296, + 517732032, -742371685, 294857996, 785106465, -314167221, 517732032, 742371685, 294857996, -785106465, -314167221, + 536870912, -777538408, 309962566, 777538408, -309962566, 536870912, 777538408, 309962566, -777538408, -309962566, + 556717294, -814129313, 325780968, 769814766, -305757943, 556717294, 814129313, 325780968, -769814766, -305757943, + 577295658, -852193284, 342338310, 761935777, -301559360, 577295658, 852193284, 342338310, -761935777, -301559360, + 598631206, -891780698, 359660433, 753902014, -297373230, 598631206, 891780698, 359660433, -753902014, -297373230, + 620749877, -932943463, 377773927, 745714425, -293206383, 620749877, 932943463, 377773927, -745714425, -293206383, + 643678365, -975735041, 396706151, 737374355, -289066077, 643678365, 975735041, 396706151, -737374355, -289066077, + 667444134, -1020210487, 416485252, 728883588, -284960004, 667444134, 1020210487, 416485252, -728883588, -284960004, + 692075438, -1066426476, 437140179, 720244375, -280896294, 692075438, 1066426476, 437140179, -720244375, -280896294, + 717601336, -1114441339, 458700704, 711459472, -276883515, 717601336, 1114441339, 458700704, -711459472, -276883515, + 744051710, -1164315096, 481197437, 702532174, -272930673, 744051710, 1164315096, 481197437, -702532174, -272930673 + +}; + +/* ---------------------------------------------------------------------- +** Desired gains, in dB, per band +** ------------------------------------------------------------------- */ + +int gainDB[5] = {0, -3, 6, 4, -6}; + +float32_t snr; + + +/* ---------------------------------------------------------------------- + * Graphic equalizer Example + * ------------------------------------------------------------------- */ + +int32_t main(void) +{ + float32_t *inputF32, *outputF32; + arm_biquad_cas_df1_32x64_ins_q31 S1; + arm_biquad_cas_df1_32x64_ins_q31 S2; + arm_biquad_casd_df1_inst_q31 S3; + arm_biquad_casd_df1_inst_q31 S4; + arm_biquad_casd_df1_inst_q31 S5; + int i; + int32_t status; + + inputF32 = &testInput_f32[0]; + outputF32 = &testOutput[0]; + + /* Initialize the state and coefficient buffers for all Biquad sections */ + + arm_biquad_cas_df1_32x64_init_q31(&S1, NUMSTAGES, + (q31_t *) &coeffTable[190*0 + 10*(gainDB[0] + 9)], + &biquadStateBand1Q31[0], 2); + + arm_biquad_cas_df1_32x64_init_q31(&S2, NUMSTAGES, + (q31_t *) &coeffTable[190*1 + 10*(gainDB[1] + 9)], + &biquadStateBand2Q31[0], 2); + + arm_biquad_cascade_df1_init_q31(&S3, NUMSTAGES, + (q31_t *) &coeffTable[190*2 + 10*(gainDB[2] + 9)], + &biquadStateBand3Q31[0], 2); + + arm_biquad_cascade_df1_init_q31(&S4, NUMSTAGES, + (q31_t *) &coeffTable[190*3 + 10*(gainDB[3] + 9)], + &biquadStateBand4Q31[0], 2); + + arm_biquad_cascade_df1_init_q31(&S5, NUMSTAGES, + (q31_t *) &coeffTable[190*4 + 10*(gainDB[4] + 9)], + &biquadStateBand5Q31[0], 2); + + + /* Call the process functions and needs to change filter coefficients + for varying the gain of each band */ + + for(i=0; i < NUMBLOCKS; i++) + { + + /* ---------------------------------------------------------------------- + ** Convert block of input data from float to Q31 + ** ------------------------------------------------------------------- */ + + arm_float_to_q31(inputF32 + (i*BLOCKSIZE), inputQ31, BLOCKSIZE); + + /* ---------------------------------------------------------------------- + ** Scale down by 1/8. This provides additional headroom so that the + ** graphic EQ can apply gain. + ** ------------------------------------------------------------------- */ + + arm_scale_q31(inputQ31, 0x7FFFFFFF, -3, inputQ31, BLOCKSIZE); + + /* ---------------------------------------------------------------------- + ** Call the Q31 Biquad Cascade DF1 32x64 process function for band1, band2 + ** ------------------------------------------------------------------- */ + + arm_biquad_cas_df1_32x64_q31(&S1, inputQ31, outputQ31, BLOCKSIZE); + arm_biquad_cas_df1_32x64_q31(&S2, outputQ31, outputQ31, BLOCKSIZE); + + /* ---------------------------------------------------------------------- + ** Call the Q31 Biquad Cascade DF1 process function for band3, band4, band5 + ** ------------------------------------------------------------------- */ + + arm_biquad_cascade_df1_q31(&S3, outputQ31, outputQ31, BLOCKSIZE); + arm_biquad_cascade_df1_q31(&S4, outputQ31, outputQ31, BLOCKSIZE); + arm_biquad_cascade_df1_q31(&S5, outputQ31, outputQ31, BLOCKSIZE); + + /* ---------------------------------------------------------------------- + ** Convert Q31 result back to float + ** ------------------------------------------------------------------- */ + + arm_q31_to_float(outputQ31, outputF32 + (i * BLOCKSIZE), BLOCKSIZE); + + /* ---------------------------------------------------------------------- + ** Scale back up + ** ------------------------------------------------------------------- */ + + arm_scale_f32(outputF32 + (i * BLOCKSIZE), 8.0f, outputF32 + (i * BLOCKSIZE), BLOCKSIZE); + }; + + snr = arm_snr_f32(testRefOutput_f32, testOutput, TESTLENGTH); + + if (snr < SNR_THRESHOLD_F32) + { + status = ARM_MATH_TEST_FAILURE; + } + else + { + status = ARM_MATH_SUCCESS; + } + + /* ---------------------------------------------------------------------- + ** Loop here if the signal does not match the reference output. + ** ------------------------------------------------------------------- */ + + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ +} + +/** \endlink */ + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_graphic_equalizer_example/ARM/math_helper.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_graphic_equalizer_example/ARM/math_helper.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,458 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param float* Pointer to the reference buffer + * @param float* Pointer to the test buffer + * @param uint32_t total number of samples + * @return float SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param q15_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q15_t* Pointer to Ref buffer + * @param q15_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q31_t* Pointer to Ref buffer + * @param q31_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param uint32_t number of additions + * @return none + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Converts Q15 to floating-point + * @param uint32_t number of samples in the buffer + * @return none + */ + +void arm_apply_guard_bits (float32_t * pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param uint32_t number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param pIn input buffer + * @param numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if(pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_graphic_equalizer_example/ARM/math_helper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_graphic_equalizer_example/ARM/math_helper.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_linear_interp_example/ARM/arm_linear_interp_data.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_linear_interp_example/ARM/arm_linear_interp_data.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,23616 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_linear_interp_data.c +* +* Description: Data file used for example. Generation method described +* below +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Table generated from following MATLAB Command +* x = -pi: 0.00005 : (2*pi - 0.00005); +* y = sin(x); +* where pi value is 3.141592653589793 +* --------------------------------------------------------------------*/ + +float arm_linear_interep_table[188495] = { + + +-0.000000000000000122, -0.000049999999979173, -0.000099999999833667, -0.000149999999437717, -0.000199999998666767, -0.000249999997395817, -0.000299999995500311, -0.000349999992854362, +-0.000399999989333412, -0.000449999984812462, -0.000499999979166956, -0.000549999972271007, -0.000599999964000057, -0.000649999954229107, -0.000699999942833602, -0.000749999929687653, +-0.000799999914666704, -0.000849999897645755, -0.000899999878500250, -0.000949999857104302, -0.000999999833333354, -0.001049999807062851, -0.001099999778166904, -0.001149999746520957, +-0.001199999712000011, -0.001249999674479510, -0.001299999633833566, -0.001349999589937622, -0.001399999542666680, -0.001449999491896183, -0.001499999437500243, -0.001549999379354304, +-0.001599999317333367, -0.001649999251312876, -0.001699999181166942, -0.001749999106771011, -0.001799999028000082, -0.001849998944729599, -0.001899998856833675, -0.001949998764187754, +-0.001999998666666836, -0.002049998564146365, -0.002099998456500453, -0.002149998343604546, -0.002199998225334087, -0.002249998101563188, -0.002299997972167294, -0.002349997837021405, +-0.002399997696000966, -0.002449997548980088, -0.002499997395834216, -0.002549997236438351, -0.002599997070667937, -0.002649996898397086, -0.002699996719501243, -0.002749996533855408, +-0.002799996341335026, -0.002849996141814208, -0.002899995935168401, -0.002949995721272604, -0.002999995500002261, -0.003049995271231486, -0.003099995034835722, -0.003149994790690415, +-0.003199994538669677, -0.003249994278648952, -0.003299994010503243, -0.003349993734107991, -0.003399993449337312, -0.003449993156066649, -0.003499992854171003, -0.003549992543525819, +-0.003599992224005209, -0.003649991895484619, -0.003699991557839049, -0.003749991210943944, -0.003799990854673418, -0.003849990488902914, -0.003899990113507434, -0.003949989728362423, +-0.003999989333341993, -0.004049988928321590, -0.004099988513176658, -0.004149988087781312, -0.004199987652010995, -0.004249987205740709, -0.004299986748845899, -0.004349986281200678, +-0.004399985802680492, -0.004449985313160341, -0.004499984812515671, -0.004549984300620594, -0.004599983777350557, -0.004649983242580561, -0.004699982696186050, -0.004749982138041138, +-0.004799981568021272, -0.004849980986001451, -0.004899980391857122, -0.004949979785462398, -0.004999979166692725, -0.005049978535423547, -0.005099977891528979, -0.005149977234884466, +-0.005199976565365011, -0.005249975882846058, -0.005299975187201721, -0.005349974478307446, -0.005399973756038235, -0.005449973020269535, -0.005499972270875456, -0.005549971507731448, +-0.005599970730712511, -0.005649969939694091, -0.005699969134550302, -0.005749968315156590, -0.005799967481387958, -0.005849966633119851, -0.005899965770226383, -0.005949964892583000, +-0.005999964000064706, -0.006049963092546945, -0.006099962169903833, -0.006149961232010816, -0.006199960278743339, -0.006249959309975518, -0.006299958325582797, -0.006349957325440182, +-0.006399956309423117, -0.006449955277405718, -0.006499954229263430, -0.006549953164871257, -0.006599952084104644, -0.006649950986837708, -0.006699949872945895, -0.006749948742304206, +-0.006799947594788089, -0.006849946430271660, -0.006899945248630365, -0.006949944049739206, -0.006999942833473632, -0.007049941599707755, -0.007099940348317025, -0.007149939079176889, +-0.007199937792161461, -0.007249936487146187, -0.007299935164006074, -0.007349933822616566, -0.007399932462851779, -0.007449931084587162, -0.007499929687697716, -0.007549928272058891, +-0.007599926837544801, -0.007649925384030893, -0.007699923911392173, -0.007749922419504085, -0.007799920908240749, -0.007849919377477610, -0.007899917827089672, -0.007949916256952384, +-0.007999914666939863, -0.008049913056927554, -0.008099911426790906, -0.008149909776404035, -0.008199908105642390, -0.008249906414380975, -0.008299904702495238, -0.008349902969859295, +-0.008399901216348595, -0.008449899441838141, -0.008499897646203384, -0.008549895829318437, -0.008599893991058752, -0.008649892131299332, -0.008699890249915625, -0.008749888346781748, +-0.008799886421773151, -0.008849884474764837, -0.008899882505632256, -0.008949880514249525, -0.008999878500492093, -0.009049876464234965, -0.009099874405353590, -0.009149872323722084, +-0.009199870219215898, -0.009249868091710479, -0.009299865941079948, -0.009349863767199750, -0.009399861569944894, -0.009449859349190827, -0.009499857104811669, -0.009549854836682867, +-0.009599852544679429, -0.009649850228676803, -0.009699847888549109, -0.009749845524171793, -0.009799843135419864, -0.009849840722168771, -0.009899838284292632, -0.009949835821666898, +-0.009999833334166574, -0.010049830821667110, -0.010099828284042626, -0.010149825721168572, -0.010199823132920397, -0.010249820519172219, -0.010299817879799491, -0.010349815214677217, +-0.010399812523680850, -0.010449809806684508, -0.010499807063563642, -0.010549804294193258, -0.010599801498448806, -0.010649798676204407, -0.010699795827335511, -0.010749792951717126, +-0.010799790049224703, -0.010849787119732359, -0.010899784163115548, -0.010949781179249277, -0.010999778168008997, -0.011049775129268828, -0.011099772062904221, -0.011149768968790628, +-0.011199765846802169, -0.011249762696814294, -0.011299759518702013, -0.011349756312340777, -0.011399753077604706, -0.011449749814369253, -0.011499746522509425, -0.011549743201900674, +-0.011599739852417123, -0.011649736473934221, -0.011699733066326979, -0.011749729629470847, -0.011799726163239948, -0.011849722667509732, -0.011899719142155211, -0.011949715587051834, +-0.011999712002073726, -0.012049708387096337, -0.012099704741995123, -0.012149701066644201, -0.012199697360919026, -0.012249693624694609, -0.012299689857846402, -0.012349686060248525, +-0.012399682231776434, -0.012449678372305137, -0.012499674481710089, -0.012549670559865410, -0.012599666606646555, -0.012649662621928532, -0.012699658605586799, -0.012749654557495473, +-0.012799650477530011, -0.012849646365565424, -0.012899642221477166, -0.012949638045139357, -0.012999633836427452, -0.013049629595216463, -0.013099625321381845, -0.013149621014797719, +-0.013199616675339540, -0.013249612302882765, -0.013299607897301514, -0.013349603458471243, -0.013399598986266964, -0.013449594480564131, -0.013499589941236869, -0.013549585368160630, +-0.013599580761210430, -0.013649576120261721, -0.013699571445188626, -0.013749566735866605, -0.013799561992170667, -0.013849557213976266, -0.013899552401157530, -0.013949547553589911, +-0.013999542671148425, -0.014049537753708525, -0.014099532801144338, -0.014149527813331319, -0.014199522790144923, -0.014249517731459277, -0.014299512637149837, -0.014349507507091614, +-0.014399502341160067, -0.014449497139229321, -0.014499491901174831, -0.014549486626871612, -0.014599481316195120, -0.014649475969019481, -0.014699470585220153, -0.014749465164672147, +-0.014799459707250922, -0.014849454212830605, -0.014899448681286651, -0.014949443112494076, -0.014999437506328338, -0.015049431862663561, -0.015099426181375206, -0.015149420462338728, +-0.015199414705428255, -0.015249408910519246, -0.015299403077486715, -0.015349397206206119, -0.015399391296551587, -0.015449385348398575, -0.015499379361622101, -0.015549373336097624, +-0.015599367271699268, -0.015649361168302494, -0.015699355025782315, -0.015749348844014195, -0.015799342622872262, -0.015849336362231969, -0.015899330061968333, -0.015949323721956819, +-0.015999317342071551, -0.016049310922187990, -0.016099304462181149, -0.016149297961926493, -0.016199291421298147, -0.016249284840171574, -0.016299278218422232, -0.016349271555924253, +-0.016399264852553091, -0.016449258108183769, -0.016499251322691748, -0.016549244495951149, -0.016599237627837445, -0.016649230718225643, -0.016699223766991209, -0.016749216774008271, +-0.016799209739152290, -0.016849202662298290, -0.016899195543321723, -0.016949188382096723, -0.016999181178498753, -0.017049173932402829, -0.017099166643684417, -0.017149159312217641, +-0.017199151937877969, -0.017249144520540861, -0.017299137060080447, -0.017349129556372193, -0.017399122009291113, -0.017449114418712670, -0.017499106784510998, -0.017549099106561560, +-0.017599091384739373, -0.017649083618919904, -0.017699075808977279, -0.017749067954786969, -0.017799060056223986, -0.017849052113163795, -0.017899044125480532, -0.017949036093049660, +-0.017999028015746196, -0.018049019893445605, -0.018099011726022022, -0.018149003513350907, -0.018198995255307732, -0.018248986951766622, -0.018298978602603044, -0.018348970207692019, +-0.018398961766909014, -0.018448953280128161, -0.018498944747224924, -0.018548936168074327, -0.018598927542551831, -0.018648918870531574, -0.018698910151889018, -0.018748901386499189, +-0.018798892574237547, -0.018848883714978233, -0.018898874808596710, -0.018948865854967998, -0.018998856853967565, -0.019048847805469546, -0.019098838709349409, -0.019148829565482174, +-0.019198820373743309, -0.019248811134006949, -0.019298801846148562, -0.019348792510043615, -0.019398783125566241, -0.019448773692591910, -0.019498764210995646, -0.019548754680652914, +-0.019598745101437852, -0.019648735473225928, -0.019698725795892161, -0.019748716069312028, -0.019798706293359659, -0.019848696467910525, -0.019898686592839651, -0.019948676668022504, +-0.019998666693333219, -0.020048656668647271, -0.020098646593839677, -0.020148636468785914, -0.020198626293360115, -0.020248616067437750, -0.020298605790894288, -0.020348595463603868, +-0.020398585085441959, -0.020448574656283587, -0.020498564176004225, -0.020548553644478006, -0.020598543061580404, -0.020648532427186443, -0.020698521741171597, -0.020748511003410002, +-0.020798500213777129, -0.020848489372148005, -0.020898478478398104, -0.020948467532401559, -0.020998456534033847, -0.021048445483169996, -0.021098434379685473, -0.021148423223454418, +-0.021198412014352307, -0.021248400752254610, -0.021298389437035468, -0.021348378068570352, -0.021398366646734290, -0.021448355171402755, -0.021498343642449892, -0.021548332059751166, +-0.021598320423181612, -0.021648308732616698, -0.021698296987930570, -0.021748285188998701, -0.021798273335696117, -0.021848261427898294, -0.021898249465479372, -0.021948237448314829, +-0.021998225376279691, -0.022048213249249434, -0.022098201067098200, -0.022148188829701463, -0.022198176536934698, -0.022248164188672048, -0.022298151784788989, -0.022348139325160547, +-0.022398126809662203, -0.022448114238168098, -0.022498101610553708, -0.022548088926694063, -0.022598076186464637, -0.022648063389739580, -0.022698050536394364, -0.022748037626304021, +-0.022798024659344031, -0.022848011635388531, -0.022897998554313004, -0.022947985415992481, -0.022997972220302438, -0.023047958967117019, -0.023097945656311705, -0.023147932287761526, +-0.023197918861341957, -0.023247905376927152, -0.023297891834392580, -0.023347878233613725, -0.023397864574464730, -0.023447850856821072, -0.023497837080557787, -0.023547823245550353, +-0.023597809351672917, -0.023647795398800960, -0.023697781386809513, -0.023747767315574056, -0.023797753184968740, -0.023847738994869038, -0.023897724745149989, -0.023947710435687070, +-0.023997696066354435, -0.024047681637027557, -0.024097667147581475, -0.024147652597891669, -0.024197637987832289, -0.024247623317278814, -0.024297608586106724, -0.024347593794190169, +-0.024397578941404627, -0.024447564027625143, -0.024497549052727188, -0.024547534016584920, -0.024597518919073816, -0.024647503760068912, -0.024697488539445693, -0.024747473257078312, +-0.024797457912842245, -0.024847442506612534, -0.024897427038264662, -0.024947411507672778, -0.024997395914712364, -0.025047380259258463, -0.025097364541186551, -0.025147348760370787, +-0.025197332916686650, -0.025247317010009623, -0.025297301040213861, -0.025347285007174848, -0.025397268910767622, -0.025447252750867667, -0.025497236527349136, -0.025547220240087511, +-0.025597203888957840, -0.025647187473835601, -0.025697170994594950, -0.025747154451111372, -0.025797137843259908, -0.025847121170916042, -0.025897104433953929, -0.025947087632249056, +-0.025997070765676464, -0.026047053834111638, -0.026097036837428735, -0.026147019775503239, -0.026197002648210635, -0.026246985455425084, -0.026296968197022069, -0.026346950872876633, +-0.026396933482864263, -0.026446916026859116, -0.026496898504736681, -0.026546880916371998, -0.026596863261640555, -0.026646845540416509, -0.026696827752575352, -0.026746809897992125, +-0.026796791976542320, -0.026846773988100085, -0.026896755932540921, -0.026946737809739864, -0.026996719619572406, -0.027046701361912708, -0.027096683036636253, -0.027146664643618094, +-0.027196646182733715, -0.027246627653857276, -0.027296609056864270, -0.027346590391630184, -0.027396571658029178, -0.027446552855936744, -0.027496533985227927, -0.027546515045778219, +-0.027596496037461778, -0.027646476960154098, -0.027696457813730226, -0.027746438598065654, -0.027796419313034542, -0.027846399958512381, -0.027896380534374220, -0.027946361040495551, +-0.027996341476750536, -0.028046321843014668, -0.028096302139162994, -0.028146282365071010, -0.028196262520612875, -0.028246242605664086, -0.028296222620100130, -0.028346202563795178, +-0.028396182436624718, -0.028446162238463801, -0.028496141969187923, -0.028546121628671248, -0.028596101216789266, -0.028646080733417033, -0.028696060178430041, -0.028746039551702456, +-0.028796018853109770, -0.028845998082527038, -0.028895977239829753, -0.028945956324892084, -0.028995935337589523, -0.029045914277797125, -0.029095893145390381, -0.029145871940243463, +-0.029195850662231865, -0.029245829311231087, -0.029295807887115288, -0.029345786389759970, -0.029395764819040188, -0.029445743174831437, -0.029495721457007882, -0.029545699665445027, +-0.029595677800017921, -0.029645655860602062, -0.029695633847071624, -0.029745611759302099, -0.029795589597168545, -0.029845567360546461, -0.029895545049310013, -0.029945522663334705, +-0.029995500202495588, -0.030045477666668166, -0.030095455055726604, -0.030145432369546407, -0.030195409608002627, -0.030245386770970769, -0.030295363858325000, -0.030345340869940819, +-0.030395317805693732, -0.030445294665457905, -0.030495271449108841, -0.030545248156521602, -0.030595224787571682, -0.030645201342133260, -0.030695177820081833, -0.030745154221292460, +-0.030795130545640648, -0.030845106793000565, -0.030895082963247715, -0.030945059056257156, -0.030995035071904393, -0.031045011010063600, -0.031094986870610280, -0.031144962653419490, +-0.031194938358366741, -0.031244913985326202, -0.031294889534173378, -0.031344865004783770, -0.031394840397031561, -0.031444815710792245, -0.031494790945940897, -0.031544766102353010, +-0.031594741179902762, -0.031644716178465669, -0.031694691097916783, -0.031744665938131605, -0.031794640698984328, -0.031844615380350445, -0.031894589982105023, -0.031944564504123571, +-0.031994538946280265, -0.032044513308450616, -0.032094487590509674, -0.032144461792332962, -0.032194435913794651, -0.032244409954770251, -0.032294383915135269, -0.032344357794763884, +-0.032394331593531604, -0.032444305311313495, -0.032494278947985067, -0.032544252503420502, -0.032594225977495297, -0.032644199370084531, -0.032694172681063713, -0.032744145910307020, +-0.032794119057689960, -0.032844092123087601, -0.032894065106375457, -0.032944038007427706, -0.032994010826119857, -0.033043983562326990, -0.033093956215924598, -0.033143928786786875, +-0.033193901274789335, -0.033243873679807037, -0.033293846001715498, -0.033343818240388901, -0.033393790395702755, -0.033443762467532584, -0.033493734455752558, -0.033543706360238200, +-0.033593678180864575, -0.033643649917507193, -0.033693621570040251, -0.033743593138339245, -0.033793564622279268, -0.033843536021735815, -0.033893507336583077, -0.033943478566696578, +-0.033993449711951375, -0.034043420772222999, -0.034093391747385619, -0.034143362637314767, -0.034193333441885507, -0.034243304160973355, -0.034293274794452495, -0.034343245342198452, +-0.034393215804086739, -0.034443186179991543, -0.034493156469788386, -0.034543126673352333, -0.034593096790558907, -0.034643066821282299, -0.034693036765398019, -0.034743006622781153, +-0.034792976393307209, -0.034842946076850380, -0.034892915673286187, -0.034942885182489711, -0.034992854604336460, -0.035042823938700625, -0.035092793185457737, -0.035142762344482860, +-0.035192731415651525, -0.035242700398837916, -0.035292669293917563, -0.035342638100765975, -0.035392606819257343, -0.035442575449267197, -0.035492543990670616, -0.035542512443343117, +-0.035592480807158891, -0.035642449081993467, -0.035692417267721918, -0.035742385364219767, -0.035792353371361212, -0.035842321289021775, -0.035892289117076537, -0.035942256855401013, +-0.035992224503869408, -0.036042192062357238, -0.036092159530739590, -0.036142126908891986, -0.036192094196688625, -0.036242061394005022, -0.036292028500716271, -0.036341995516697888, +-0.036391962441824077, -0.036441929275970356, -0.036491896019012260, -0.036541862670823974, -0.036591829231281035, -0.036641795700258523, -0.036691762077631966, -0.036741728363275557, +-0.036791694557064832, -0.036841660658874870, -0.036891626668581194, -0.036941592586058017, -0.036991558411180854, -0.037041524143824792, -0.037091489783865367, -0.037141455331176770, +-0.037191420785634539, -0.037241386147113753, -0.037291351415489948, -0.037341316590637316, -0.037391281672431401, -0.037441246660747718, -0.037491211555460480, -0.037541176356445209, +-0.037591141063576999, -0.037641105676731380, -0.037691070195782550, -0.037741034620606045, -0.037790998951076960, -0.037840963187070815, -0.037890927328461818, -0.037940891375125504, +-0.037990855326936968, -0.038040819183771730, -0.038090782945504005, -0.038140746612009321, -0.038190710183162765, -0.038240673658839881, -0.038290637038914874, -0.038340600323263266, +-0.038390563511760609, -0.038440526604281093, -0.038490489600700263, -0.038540452500893212, -0.038590415304735469, -0.038640378012101247, -0.038690340622866082, -0.038740303136905060, +-0.038790265554093727, -0.038840227874306285, -0.038890190097418273, -0.038940152223304790, -0.038990114251841367, -0.039040076182902214, -0.039090038016362870, -0.039139999752098434, +-0.039189961389984436, -0.039239922929895095, -0.039289884371705948, -0.039339845715292532, -0.039389806960529065, -0.039439768107291072, -0.039489729155453658, -0.039539690104892368, +-0.039589650955481413, -0.039639611707096324, -0.039689572359612207, -0.039739532912904607, -0.039789493366847728, -0.039839453721317121, -0.039889413976187872, -0.039939374131335532, +-0.039989334186634320, -0.040039294141959766, -0.040089253997186977, -0.040139213752191497, -0.040189173406847543, -0.040239132961030655, -0.040289092414616375, -0.040339051767478921, +-0.040389011019493840, -0.040438970170536229, -0.040488929220481633, -0.040538888169204278, -0.040588847016579700, -0.040638805762483000, -0.040688764406789736, -0.040738722949374112, +-0.040788681390111679, -0.040838639728877552, -0.040888597965547259, -0.040938556099995034, -0.040988514132096414, -0.041038472061726512, -0.041088429888760873, -0.041138387613073715, +-0.041188345234540590, -0.041238302753036603, -0.041288260168437299, -0.041338217480616897, -0.041388174689450961, -0.041438131794815029, -0.041488088796583319, -0.041538045694631390, +-0.041588002488834347, -0.041637959179067742, -0.041687915765205794, -0.041737872247124060, -0.041787828624697640, -0.041837784897802099, -0.041887741066311650, -0.041937697130101842, +-0.041987653089047797, -0.042037608943025065, -0.042087564691907858, -0.042137520335571749, -0.042187475873891836, -0.042237431306743671, -0.042287386634001493, -0.042337341855540847, +-0.042387296971237283, -0.042437251980965041, -0.042487206884599664, -0.042537161682016274, -0.042587116373090421, -0.042637070957696331, -0.042687025435709569, -0.042736979807005242, +-0.042786934071458907, -0.042836888228944790, -0.042886842279338457, -0.042936796222515020, -0.042986750058350030, -0.043036703786717728, -0.043086657407493664, -0.043136610920552952, +-0.043186564325771164, -0.043236517623022518, -0.043286470812182579, -0.043336423893126905, -0.043386376865729728, -0.043436329729866607, -0.043486282485412663, -0.043536235132243459, +-0.043586187670233222, -0.043636140099257516, -0.043686092419191462, -0.043736044629910618, -0.043785996731289217, -0.043835948723202824, -0.043885900605526565, -0.043935852378135992, +-0.043985804040905345, -0.044035755593710195, -0.044085707036425649, -0.044135658368927279, -0.044185609591089324, -0.044235560702787342, -0.044285511703896455, -0.044335462594292240, +-0.044385413373848923, -0.044435364042442069, -0.044485314599947250, -0.044535265046238698, -0.044585215381191985, -0.044635165604682239, -0.044685115716585018, -0.044735065716774568, +-0.044785015605126446, -0.044834965381515789, -0.044884915045818166, -0.044934864597907805, -0.044984814037660290, -0.045034763364950735, -0.045084712579654712, -0.045134661681646468, +-0.045184610670801574, -0.045234559546995151, -0.045284508310102771, -0.045334456959998673, -0.045384405496558436, -0.045434353919657632, -0.045484302229170492, -0.045534250424972604, +-0.045584198506939087, -0.045634146474945521, -0.045684094328866137, -0.045734042068576522, -0.045783989693951803, -0.045833937204867552, -0.045883884601198015, -0.045933831882818764, +-0.045983779049604941, -0.046033726101432110, -0.046083673038174518, -0.046133619859707743, -0.046183566565906921, -0.046233513156647622, -0.046283459631804101, -0.046333405991251929, +-0.046383352234866684, -0.046433298362522614, -0.046483244374095303, -0.046533190269459880, -0.046583136048491923, -0.046633081711065685, -0.046683027257056739, -0.046732972686340225, +-0.046782917998791723, -0.046832863194285486, -0.046882808272697092, -0.046932753233901670, -0.046982698077774818, -0.047032642804190769, -0.047082587413025116, -0.047132531904152994, +-0.047182476277449988, -0.047232420532790344, -0.047282364670049655, -0.047332308689103049, -0.047382252589826118, -0.047432196372093109, -0.047482140035779608, -0.047532083580761206, +-0.047582027006912150, -0.047631970314108020, -0.047681913502223970, -0.047731856571135579, -0.047781799520717101, -0.047831742350844128, -0.047881685061391802, -0.047931627652235700, +-0.047981570123250085, -0.048031512474310548, -0.048081454705292230, -0.048131396816070718, -0.048181338806520271, -0.048231280676516476, -0.048281222425934481, -0.048331164054649871, +-0.048381105562536907, -0.048431046949471181, -0.048480988215328286, -0.048530929359982468, -0.048580870383309334, -0.048630811285184018, -0.048680752065482120, -0.048730692724077894, +-0.048780633260846945, -0.048830573675664408, -0.048880513968405877, -0.048930454138945624, -0.048980394187159236, -0.049030334112921854, -0.049080273916109085, -0.049130213596595189, +-0.049180153154255758, -0.049230092588965949, -0.049280031900601345, -0.049329971089036223, -0.049379910154146167, -0.049429849095806784, -0.049479787913892334, -0.049529726608278417, +-0.049579665178840181, -0.049629603625453225, -0.049679541947991818, -0.049729480146331551, -0.049779418220347586, -0.049829356169915524, -0.049879293994909625, -0.049929231695205488, +-0.049979169270678275, -0.050029106721203580, -0.050079044046655675, -0.050128981246910162, -0.050178918321842195, -0.050228855271327380, -0.050278792095239978, -0.050328728793455596, +-0.050378665365849389, -0.050428601812296969, -0.050478538132672598, -0.050528474326851883, -0.050578410394710421, -0.050628346336122496, -0.050678282150963705, -0.050728217839109205, +-0.050778153400434602, -0.050828088834814177, -0.050878024142123529, -0.050927959322237815, -0.050977894375032654, -0.051027829300382306, -0.051077764098162393, -0.051127698768248062, +-0.051177633310514933, -0.051227567724837275, -0.051277502011090700, -0.051327436169150371, -0.051377370198891888, -0.051427304100189544, -0.051477237872918934, -0.051527171516955676, +-0.051577105032174046, -0.051627038418449650, -0.051676971675657664, -0.051726904803673687, -0.051776837802372008, -0.051826770671628226, -0.051876703411317525, -0.051926636021315510, +-0.051976568501496463, -0.052026500851735991, -0.052076433071909262, -0.052126365161891904, -0.052176297121558184, -0.052226228950783722, -0.052276160649443688, -0.052326092217413696, +-0.052376023654568026, -0.052425954960782298, -0.052475886135932133, -0.052525817179891805, -0.052575748092536935, -0.052625678873742691, -0.052675609523384695, -0.052725540041337234, +-0.052775470427475921, -0.052825400681675933, -0.052875330803812882, -0.052925260793761066, -0.052975190651396095, -0.053025120376593154, -0.053075049969227850, -0.053124979429174476, +-0.053174908756308654, -0.053224837950505567, -0.053274767011640821, -0.053324695939588718, -0.053374624734224871, -0.053424553395424908, -0.053474481923063123, -0.053524410317015131, +-0.053574338577156107, -0.053624266703361685, -0.053674194695506154, -0.053724122553465134, -0.053774050277113808, -0.053823977866327796, -0.053873905320981401, -0.053923832640950242, +-0.053973759826109496, -0.054023686876334805, -0.054073613791500441, -0.054123540571482054, -0.054173467216154805, -0.054223393725394337, -0.054273320099074943, -0.054323246337072244, +-0.054373172439261881, -0.054423098405518136, -0.054473024235716642, -0.054522949929732598, -0.054572875487441615, -0.054622800908718003, -0.054672726193437382, -0.054722651341474957, +-0.054772576352706340, -0.054822501227005840, -0.054872425964249086, -0.054922350564311266, -0.054972275027068015, -0.055022199352393636, -0.055072123540163755, -0.055122047590253562, +-0.055171971502538698, -0.055221895276893460, -0.055271818913193486, -0.055321742411313962, -0.055371665771130528, -0.055421588992517486, -0.055471512075350470, -0.055521435019505121, +-0.055571357824855741, -0.055621280491277958, -0.055671203018646982, -0.055721125406838441, -0.055771047655726637, -0.055820969765187224, -0.055870891735095379, -0.055920813565326750, +-0.055970735255755640, -0.056020656806257701, -0.056070578216708113, -0.056120499486982521, -0.056170420616955243, -0.056220341606501911, -0.056270262455497724, -0.056320183163818323, +-0.056370103731338023, -0.056420024157932465, -0.056469944443477291, -0.056519864587846809, -0.056569784590916668, -0.056619704452562064, -0.056669624172658639, -0.056719543751080716, +-0.056769463187703935, -0.056819382482403487, -0.056869301635055033, -0.056919220645532884, -0.056969139513712679, -0.057019058239469622, -0.057068976822679369, -0.057118895263216229, +-0.057168813560955850, -0.057218731715773435, -0.057268649727544640, -0.057318567596143774, -0.057368485321446491, -0.057418402903328433, -0.057468320341663930, -0.057518237636328622, +-0.057568154787197720, -0.057618071794146873, -0.057667988657050410, -0.057717905375783973, -0.057767821950222766, -0.057817738380242456, -0.057867654665717354, -0.057917570806523114, +-0.057967486802534947, -0.058017402653628508, -0.058067318359678120, -0.058117233920559432, -0.058167149336147660, -0.058217064606318460, -0.058266979730946154, -0.058316894709906399, +-0.058366809543074410, -0.058416724230325838, -0.058466638771535011, -0.058516553166577591, -0.058566467415329226, -0.058616381517664254, -0.058666295473458328, -0.058716209282586661, +-0.058766122944924913, -0.058816036460347415, -0.058865949828729829, -0.058915863049947365, -0.058965776123875685, -0.059015689050389127, -0.059065601829363344, -0.059115514460673556, +-0.059165426944195423, -0.059215339279803283, -0.059265251467372798, -0.059315163506779178, -0.059365075397898093, -0.059414987140603878, -0.059464898734772197, -0.059514810180278710, +-0.059564721476997755, -0.059614632624804993, -0.059664543623575657, -0.059714454473185401, -0.059764365173508562, -0.059814275724420815, -0.059864186125797379, -0.059914096377513916, +-0.059964006479444776, -0.060013916431465614, -0.060063826233451661, -0.060113735885278588, -0.060163645386820737, -0.060213554737953763, -0.060263463938552905, -0.060313372988493832, +-0.060363281887650888, -0.060413190635899734, -0.060463099233116047, -0.060513007679174169, -0.060562915973949770, -0.060612824117318082, -0.060662732109154779, -0.060712639949334200, +-0.060762547637732020, -0.060812455174223477, -0.060862362558684234, -0.060912269790988648, -0.060962176871012380, -0.061012083798630670, -0.061061990573719201, -0.061111897196152308, +-0.061161803665805668, -0.061211709982554520, -0.061261616146274546, -0.061311522156840083, -0.061361428014126820, -0.061411333718009983, -0.061461239268365254, -0.061511144665066991, +-0.061561049907990856, -0.061610954997012544, -0.061660859932006401, -0.061710764712848115, -0.061760669339412912, -0.061810573811576473, -0.061860478129213164, -0.061910382292198654, +-0.061960286300408195, -0.062010190153717455, -0.062060093852000807, -0.062109997395133919, -0.062159900782992036, -0.062209804015450842, -0.062259707092384702, -0.062309610013669289, +-0.062359512779179851, -0.062409415388792078, -0.062459317842380319, -0.062509220139820271, -0.062559122280987617, -0.062609024265756708, -0.062658926094003239, -0.062708827765602451, +-0.062758729280430040, -0.062808630638360369, -0.062858531839269122, -0.062908432883031537, -0.062958333769523311, -0.063008234498618809, -0.063058135070193727, -0.063108035484123304, +-0.063157935740283236, -0.063207835838547888, -0.063257735778792956, -0.063307635560893666, -0.063357535184725741, -0.063407434650163547, -0.063457333957082751, -0.063507233105359065, +-0.063557132094866853, -0.063607030925481811, -0.063656929597079193, -0.063706828109534694, -0.063756726462722679, -0.063806624656518859, -0.063856522690798473, -0.063906420565437216, +-0.063956318280309468, -0.064006215835290925, -0.064056113230256839, -0.064106010465082922, -0.064155907539643522, -0.064205804453814366, -0.064255701207470692, -0.064305597800488210, +-0.064355494232741298, -0.064405390504105639, -0.064455286614456500, -0.064505182563669605, -0.064555078351619291, -0.064604973978181296, -0.064654869443231303, -0.064704764746643703, +-0.064754659888294180, -0.064804554868058001, -0.064854449685810889, -0.064904344341427209, -0.064954238834782671, -0.065004133165752528, -0.065054027334212505, -0.065103921340036966, +-0.065153815183101621, -0.065203708863281737, -0.065253602380453024, -0.065303495734489861, -0.065353388925267972, -0.065403281952663039, -0.065453174816549470, -0.065503067516802946, +-0.065552960053298776, -0.065602852425912628, -0.065652744634518923, -0.065702636678993342, -0.065752528559211182, -0.065802420275048137, -0.065852311826378601, -0.065902203213078284, +-0.065952094435022451, -0.066001985492086829, -0.066051876384145808, -0.066101767111075085, -0.066151657672749956, -0.066201548069046129, -0.066251438299837970, -0.066301328365001230, +-0.066351218264411163, -0.066401107997943493, -0.066450997565472611, -0.066500886966874243, -0.066550776202024098, -0.066600665270796555, -0.066650554173067367, -0.066700442908711785, +-0.066750331477605535, -0.066800219879623021, -0.066850108114639956, -0.066899996182531618, -0.066949884083173733, -0.066999771816440706, -0.067049659382208235, -0.067099546780351613, +-0.067149434010746578, -0.067199321073267509, -0.067249207967790145, -0.067299094694189751, -0.067348981252342066, -0.067398867642121496, -0.067448753863403738, -0.067498639916064113, +-0.067548525799978318, -0.067598411515020773, -0.067648297061067189, -0.067698182437993318, -0.067748067645673551, -0.067797952683983601, -0.067847837552798773, -0.067897722251994794, +-0.067947606781446068, -0.067997491141028335, -0.068047375330616861, -0.068097259350087397, -0.068147143199314336, -0.068197026878173431, -0.068246910386539947, -0.068296793724289637, +-0.068346676891296892, -0.068396559887437453, -0.068446442712587069, -0.068496325366620134, -0.068546207849412372, -0.068596090160839104, -0.068645972300776043, -0.068695854269097620, +-0.068745736065679547, -0.068795617690397146, -0.068845499143126140, -0.068895380423740937, -0.068945261532117288, -0.068995142468130488, -0.069045023231656275, -0.069094903822569068, +-0.069144784240744592, -0.069194664486058155, -0.069244544558385496, -0.069294424457601034, -0.069344304183580521, -0.069394183736199239, -0.069444063115332938, -0.069493942320856039, +-0.069543821352644294, -0.069593700210573428, -0.069643578894517874, -0.069693457404353371, -0.069743335739955226, -0.069793213901199178, -0.069843091887959660, -0.069892969700112398, +-0.069942847337532726, -0.069992724800096370, -0.070042602087677777, -0.070092479200152658, -0.070142356137396347, -0.070192232899284598, -0.070242109485691817, -0.070291985896493756, +-0.070341862131565736, -0.070391738190783509, -0.070441614074021483, -0.070491489781155436, -0.070541365312061094, -0.070591240666612903, -0.070641115844686603, -0.070690990846157514, +-0.070740865670901404, -0.070790740318792678, -0.070840614789707101, -0.070890489083519984, -0.070940363200107090, -0.070990237139342854, -0.071040110901103015, -0.071089984485262894, +-0.071139857891698272, -0.071189731120283539, -0.071239604170894505, -0.071289477043406435, -0.071339349737695137, -0.071389222253635004, -0.071439094591101829, -0.071488966749971350, +-0.071538838730118015, -0.071588710531417590, -0.071638582153745384, -0.071688453596977161, -0.071738324860987371, -0.071788195945651764, -0.071838066850845664, -0.071887937576444835, +-0.071937808122323726, -0.071987678488358103, -0.072037548674423274, -0.072087418680395018, -0.072137288506147770, -0.072187158151557310, -0.072237027616498944, -0.072286896900848469, +-0.072336766004480288, -0.072386634927270210, -0.072436503669093530, -0.072486372229826040, -0.072536240609342176, -0.072586108807517716, -0.072635976824228413, -0.072685844659348742, +-0.072735712312754441, -0.072785579784320875, -0.072835447073923795, -0.072885314181437663, -0.072935181106738231, -0.072985047849700863, -0.073034914410201310, -0.073084780788114020, +-0.073134646983314788, -0.073184512995678935, -0.073234378825082241, -0.073284244471399168, -0.073334109934505468, -0.073383975214276503, -0.073433840310588042, -0.073483705223314544, +-0.073533569952331776, -0.073583434497515518, -0.073633298858740245, -0.073683163035881710, -0.073733027028815276, -0.073782890837416723, -0.073832754461560485, -0.073882617901122369, +-0.073932481155977711, -0.073982344226002292, -0.074032207111070572, -0.074082069811058332, -0.074131932325840921, -0.074181794655294106, -0.074231656799292375, -0.074281518757711509, +-0.074331380530426830, -0.074381242117314159, -0.074431103518247929, -0.074480964733103935, -0.074530825761757985, -0.074580686604084512, -0.074630547259959337, -0.074680407729257797, +-0.074730268011855672, -0.074780128107627436, -0.074829988016448870, -0.074879847738195351, -0.074929707272742646, -0.074979566619965229, -0.075029425779738895, -0.075079284751938993, +-0.075129143536441331, -0.075179002133120371, -0.075228860541851891, -0.075278718762511271, -0.075328576794974303, -0.075378434639115435, -0.075428292294810489, -0.075478149761934815, +-0.075528007040364192, -0.075577864129973124, -0.075627721030637390, -0.075677577742232813, -0.075727434264633825, -0.075777290597716263, -0.075827146741355475, -0.075877002695427256, +-0.075926858459806096, -0.075976714034367787, -0.076026569418987694, -0.076076424613541610, -0.076126279617904039, -0.076176134431950759, -0.076225989055557150, -0.076275843488599004, +-0.076325697730950798, -0.076375551782488366, -0.076425405643087044, -0.076475259312622654, -0.076525112790969671, -0.076574966078003903, -0.076624819173601172, -0.076674672077635939, +-0.076724524789984039, -0.076774377310520822, -0.076824229639122096, -0.076874081775662365, -0.076923933720017421, -0.076973785472062642, -0.077023637031673850, -0.077073488398725520, +-0.077123339573093461, -0.077173190554653062, -0.077223041343280133, -0.077272891938849148, -0.077322742341235942, -0.077372592550315866, -0.077422442565964769, -0.077472292388057112, +-0.077522142016468731, -0.077571991451075434, -0.077621840691751709, -0.077671689738373392, -0.077721538590815847, -0.077771387248954896, -0.077821235712665041, -0.077871083981822090, +-0.077920932056301434, -0.077970779935978882, -0.078020627620728950, -0.078070475110427445, -0.078120322404949746, -0.078170169504171688, -0.078220016407967760, -0.078269863116213798, +-0.078319709628785178, -0.078369555945557723, -0.078419402066405935, -0.078469247991205637, -0.078519093719832234, -0.078568939252161518, -0.078618784588068036, -0.078668629727427580, +-0.078718474670115987, -0.078768319416007773, -0.078818163964978760, -0.078868008316904326, -0.078917852471660319, -0.078967696429121242, -0.079017540189162933, -0.079067383751660766, +-0.079117227116490579, -0.079167070283526875, -0.079216913252645516, -0.079266756023721852, -0.079316598596631746, -0.079366440971249716, -0.079416283147451569, -0.079466125125113155, +-0.079515966904108989, -0.079565808484314909, -0.079615649865606306, -0.079665491047859027, -0.079715332030947578, -0.079765172814747792, -0.079815013399135076, -0.079864853783985265, +-0.079914693969172876, -0.079964533954573758, -0.080014373740063302, -0.080064213325517358, -0.080114052710810443, -0.080163891895818393, -0.080213730880416598, -0.080263569664480935, +-0.080313408247885895, -0.080363246630507340, -0.080413084812220675, -0.080462922792901737, -0.080512760572425041, -0.080562598150666451, -0.080612435527501802, -0.080662272702805626, +-0.080712109676453772, -0.080761946448321645, -0.080811783018285080, -0.080861619386218636, -0.080911455551998121, -0.080961291515498982, -0.081011127276597053, -0.081060962835166867, +-0.081110798191084271, -0.081160633344224672, -0.081210468294463947, -0.081260303041676599, -0.081310137585738490, -0.081359971926525040, -0.081409806063912113, -0.081459639997774225, +-0.081509473727987225, -0.081559307254426547, -0.081609140576968053, -0.081658973695486248, -0.081708806609857021, -0.081758639319956222, -0.081808471825658369, -0.081858304126839351, +-0.081908136223374561, -0.081957968115139876, -0.082007799802009840, -0.082057631283860288, -0.082107462560566669, -0.082157293632004830, -0.082207124498049317, -0.082256955158575992, +-0.082306785613460276, -0.082356615862578045, -0.082406445905803830, -0.082456275743013493, -0.082506105374082914, -0.082555934798886635, -0.082605764017300506, -0.082655593029199975, +-0.082705421834460904, -0.082755250432957839, -0.082805078824566655, -0.082854907009162759, -0.082904734986622042, -0.082954562756819047, -0.083004390319629640, -0.083054217674929265, +-0.083104044822593787, -0.083153871762497750, -0.083203698494517031, -0.083253525018527078, -0.083303351334403752, -0.083353177442021600, -0.083403003341256499, -0.083452829031983894, +-0.083502654514079663, -0.083552479787418352, -0.083602304851875850, -0.083652129707328007, -0.083701954353649410, -0.083751778790715936, -0.083801603018403004, -0.083851427036586504, +-0.083901250845141009, -0.083951074443942370, -0.084000897832866059, -0.084050721011787927, -0.084100543980582573, -0.084150366739125848, -0.084200189287293198, -0.084250011624960527, +-0.084299833752002382, -0.084349655668294651, -0.084399477373712783, -0.084449298868132669, -0.084499120151428866, -0.084548941223477253, -0.084598762084153289, -0.084648582733332867, +-0.084698403170890543, -0.084748223396702210, -0.084798043410643759, -0.084847863212589761, -0.084897682802416108, -0.084947502179998247, -0.084997321345212068, -0.085047140297932144, +-0.085096959038034381, -0.085146777565394210, -0.085196595879887538, -0.085246413981388935, -0.085296231869774294, -0.085346049544919075, -0.085395867006699169, -0.085445684254989163, +-0.085495501289664946, -0.085545318110602411, -0.085595134717676144, -0.085644951110762035, -0.085694767289735560, -0.085744583254472595, -0.085794399004847741, -0.085844214540736888, +-0.085894029862015484, -0.085943844968559460, -0.085993659860243390, -0.086043474536943151, -0.086093288998534245, -0.086143103244892549, -0.086192917275892650, -0.086242731091410452, +-0.086292544691321443, -0.086342358075501502, -0.086392171243825228, -0.086441984196168525, -0.086491796932406870, -0.086541609452416152, -0.086591421756070971, -0.086641233843247234, +-0.086691045713820872, -0.086740857367666430, -0.086790668804659854, -0.086840480024676606, -0.086890291027592603, -0.086940101813282433, -0.086989912381622000, -0.087039722732486793, +-0.087089532865752717, -0.087139342781294371, -0.087189152478987661, -0.087238961958708075, -0.087288771220331532, -0.087338580263732604, -0.087388389088787238, -0.087438197695370895, +-0.087488006083359507, -0.087537814252627646, -0.087587622203051260, -0.087637429934506253, -0.087687237446867239, -0.087737044740010137, -0.087786851813810407, -0.087836658668143996, +-0.087886465302885491, -0.087936271717910838, -0.087986077913095498, -0.088035883888315403, -0.088085689643445153, -0.088135495178360682, -0.088185300492937477, -0.088235105587051457, +-0.088284910460577223, -0.088334715113390735, -0.088384519545367440, -0.088434323756383298, -0.088484127746312896, -0.088533931515032194, -0.088583735062417082, -0.088633538388342203, +-0.088683341492683476, -0.088733144375316403, -0.088782947036116902, -0.088832749474959588, -0.088882551691720407, -0.088932353686274848, -0.088982155458498843, -0.089031957008267007, +-0.089081758335455272, -0.089131559439939154, -0.089181360321594572, -0.089231160980296154, -0.089280961415919832, -0.089330761628341096, -0.089380561617435905, -0.089430361383078874, +-0.089480160925145935, -0.089529960243512591, -0.089579759338054787, -0.089629558208647153, -0.089679356855165607, -0.089729155277486122, -0.089778953475483314, -0.089828751449033115, +-0.089878549198011026, -0.089928346722293023, -0.089978144021753706, -0.090027941096269021, -0.090077737945714498, -0.090127534569966056, -0.090177330968898350, -0.090227127142387301, +-0.090276923090308450, -0.090326718812537732, -0.090376514308949760, -0.090426309579420522, -0.090476104623825493, -0.090525899442040647, -0.090575694033940626, -0.090625488399401349, +-0.090675282538298804, -0.090725076450507619, -0.090774870135903726, -0.090824663594362670, -0.090874456825760383, -0.090924249829971521, -0.090974042606872044, -0.091023835156337454, +-0.091073627478243713, -0.091123419572465461, -0.091173211438878660, -0.091223003077358839, -0.091272794487781944, -0.091322585670022619, -0.091372376623956836, -0.091422167349460112, +-0.091471957846408408, -0.091521748114676379, -0.091571538154139959, -0.091621327964675148, -0.091671117546156575, -0.091720906898460214, -0.091770696021461567, -0.091820484915036638, +-0.091870273579060052, -0.091920062013407786, -0.091969850217955354, -0.092019638192578745, -0.092069425937152602, -0.092119213451552884, -0.092169000735655135, -0.092218787789335330, +-0.092268574612468124, -0.092318361204929464, -0.092368147566594908, -0.092417933697340429, -0.092467719597040671, -0.092517505265571606, -0.092567290702808780, -0.092617075908628180, +-0.092666860882904434, -0.092716645625513544, -0.092766430136331485, -0.092816214415232912, -0.092865998462093799, -0.092915782276789677, -0.092965565859196561, -0.093015349209189080, +-0.093065132326643221, -0.093114915211434529, -0.093164697863439005, -0.093214480282531278, -0.093264262468587364, -0.093314044421482792, -0.093363826141093550, -0.093413607627294296, +-0.093463388879961029, -0.093513169898969725, -0.093562950684195054, -0.093612731235513016, -0.093662511552799144, -0.093712291635929437, -0.093762071484778553, -0.093811851099222493, +-0.093861630479136815, -0.093911409624397493, -0.093961188534879211, -0.094010967210457944, -0.094060745651009275, -0.094110523856409167, -0.094160301826532330, -0.094210079561254725, +-0.094259857060451924, -0.094309634323999914, -0.094359411351773378, -0.094409188143648320, -0.094458964699500297, -0.094508741019205297, -0.094558517102638004, -0.094608292949674419, +-0.094658068560190545, -0.094707843934061051, -0.094757619071161953, -0.094807393971368809, -0.094857168634557607, -0.094906943060603058, -0.094956717249381151, -0.095006491200767443, +-0.095056264914637950, -0.095106038390867356, -0.095155811629331663, -0.095205584629906442, -0.095255357392467710, -0.095305129916890136, -0.095354902203049735, -0.095404674250822080, +-0.095454446060083187, -0.095504217630707725, -0.095553988962571723, -0.095603760055550754, -0.095653530909520820, -0.095703301524356618, -0.095753071899934178, -0.095802842036129487, +-0.095852611932817244, -0.095902381589873478, -0.095952151007173761, -0.096001920184594094, -0.096051689122009204, -0.096101457819295077, -0.096151226276327315, -0.096200994492981917, +-0.096250762469133597, -0.096300530204658383, -0.096350297699431819, -0.096400064953329978, -0.096449831966227514, -0.096499598738000486, -0.096549365268524895, -0.096599131557675438, +-0.096648897605328174, -0.096698663411358646, -0.096748428975642911, -0.096798194298055668, -0.096847959378472931, -0.096897724216770301, -0.096947488812823793, -0.096997253166508118, +-0.097047017277699321, -0.097096781146272987, -0.097146544772105131, -0.097196308155070479, -0.097246071295045047, -0.097295834191904434, -0.097345596845524685, -0.097395359255780509, +-0.097445121422547923, -0.097494883345702540, -0.097544645025120391, -0.097594406460676186, -0.097644167652245956, -0.097693928599705757, -0.097743689302930301, -0.097793449761795617, +-0.097843209976177306, -0.097892969945951411, -0.097942729670992656, -0.097992489151177073, -0.098042248386380260, -0.098092007376478274, -0.098141766121345828, -0.098191524620858978, +-0.098241282874893296, -0.098291040883324854, -0.098340798646028377, -0.098390556162879894, -0.098440313433755033, -0.098490070458529824, -0.098539827237078992, -0.098589583769278594, +-0.098639340055004243, -0.098689096094131970, -0.098738851886536527, -0.098788607432093958, -0.098838362730680307, -0.098888117782170298, -0.098937872586440004, -0.098987627143365023, +-0.099037381452821427, -0.099087135514683927, -0.099136889328828595, -0.099186642895131030, -0.099236396213467304, -0.099286149283712141, -0.099335902105741614, -0.099385654679431334, +-0.099435407004657347, -0.099485159081294405, -0.099534910909218566, -0.099584662488305900, -0.099634413818431120, -0.099684164899470323, -0.099733915731299097, -0.099783666313793540, +-0.099833416646828363, -0.099883166730279652, -0.099932916564023019, -0.099982666147934537, -0.100032415481888940, -0.100082164565762330, -0.100131913399430280, -0.100181661982768900, +-0.100231410315652930, -0.100281158397958430, -0.100330906229561020, -0.100380653810336800, -0.100430401140160510, -0.100480148218908200, -0.100529895046455530, -0.100579641622678570, +-0.100629387947452050, -0.100679134020652070, -0.100728879842154700, -0.100778625411834670, -0.100828370729568100, -0.100878115795230590, -0.100927860608698240, -0.100977605169845790, +-0.101027349478549330, -0.101077093534684480, -0.101126837338127360, -0.101176580888752700, -0.101226324186436580, -0.101276067231054660, -0.101325810022483000, -0.101375552560596400, +-0.101425294845270890, -0.101475036876382150, -0.101524778653806270, -0.101574520177418000, -0.101624261447093430, -0.101674002462708630, -0.101723743224138390, -0.101773483731258800, +-0.101823223983945500, -0.101872963982074590, -0.101922703725520810, -0.101972443214160280, -0.102022182447868630, -0.102071921426521980, -0.102121660149995090, -0.102171398618164040, +-0.102221136830904490, -0.102270874788092550, -0.102320612489602970, -0.102370349935311870, -0.102420087125094890, -0.102469824058828120, -0.102519560736386360, -0.102569297157645710, +-0.102619033322482250, -0.102668769230770760, -0.102718504882387360, -0.102768240277207680, -0.102817975415107860, -0.102867710295962640, -0.102917444919648160, -0.102967179286040060, +-0.103016913395014450, -0.103066647246446120, -0.103116380840211170, -0.103166114176185280, -0.103215847254244530, -0.103265580074263730, -0.103315312636118970, -0.103365044939685930, +-0.103414776984840720, -0.103464508771458140, -0.103514240299414280, -0.103563971568584810, -0.103613702578845860, -0.103663433330072220, -0.103713163822139990, -0.103762894054925280, +-0.103812624028302910, -0.103862353742148970, -0.103912083196339160, -0.103961812390749570, -0.104011541325255020, -0.104061269999731600, -0.104110998414055010, -0.104160726568101370, +-0.104210454461745470, -0.104260182094863430, -0.104309909467330940, -0.104359636579024130, -0.104409363429817770, -0.104459090019588000, -0.104508816348210510, -0.104558542415561420, +-0.104608268221515530, -0.104657993765948980, -0.104707719048737880, -0.104757444069757040, -0.104807168828882590, -0.104856893325990230, -0.104906617560956070, -0.104956341533654920, +-0.105006065243962910, -0.105055788691755750, -0.105105511876909560, -0.105155234799299140, -0.105204957458800640, -0.105254679855289730, -0.105304401988642590, -0.105354123858733980, +-0.105403845465440070, -0.105453566808636550, -0.105503287888199540, -0.105553008704003890, -0.105602729255925700, -0.105652449543841150, -0.105702169567625020, -0.105751889327153460, +-0.105801608822302190, -0.105851328052947320, -0.105901047018963700, -0.105950765720227480, -0.106000484156614320, -0.106050202328000400, -0.106099920234260540, -0.106149637875270870, +-0.106199355250907110, -0.106249072361045400, -0.106298789205560570, -0.106348505784328760, -0.106398222097225700, -0.106447938144127520, -0.106497653924909050, -0.106547369439446440, +-0.106597084687615420, -0.106646799669292120, -0.106696514384351390, -0.106746228832669360, -0.106795943014122210, -0.106845656928584750, -0.106895370575933170, -0.106945083956043140, +-0.106994797068790850, -0.107044509914051120, -0.107094222491700130, -0.107143934801613580, -0.107193646843667630, -0.107243358617737110, -0.107293070123698210, -0.107342781361426620, +-0.107392492330798530, -0.107442203031688760, -0.107491913463973490, -0.107541623627528430, -0.107591333522229770, -0.107641043147952320, -0.107690752504572260, -0.107740461591965760, +-0.107790170410007670, -0.107839878958574160, -0.107889587237540940, -0.107939295246784210, -0.107989002986178780, -0.108038710455600860, -0.108088417654926150, -0.108138124584030840, +-0.108187831242789790, -0.108237537631079140, -0.108287243748774660, -0.108336949595752520, -0.108386655171887540, -0.108436360477055950, -0.108486065511133430, -0.108535770273996220, +-0.108585474765519120, -0.108635178985578340, -0.108684882934050060, -0.108734586610809120, -0.108784290015731710, -0.108833993148693590, -0.108883696009570920, -0.108933398598238570, +-0.108983100914572720, -0.109032802958449120, -0.109082504729743970, -0.109132206228332100, -0.109181907454089720, -0.109231608406892570, -0.109281309086616830, -0.109331009493137380, +-0.109380709626330420, -0.109430409486071680, -0.109480109072237350, -0.109529808384702320, -0.109579507423342760, -0.109629206188034430, -0.109678904678653530, -0.109728602895074930, +-0.109778300837174810, -0.109827998504829380, -0.109877695897913520, -0.109927393016303430, -0.109977089859874840, -0.110026786428503970, -0.110076482722065700, -0.110126178740436220, +-0.110175874483491300, -0.110225569951107120, -0.110275265143158580, -0.110324960059521890, -0.110374654700072780, -0.110424349064687480, -0.110474043153240870, -0.110523736965609160, +-0.110573430501668540, -0.110623123761293910, -0.110672816744361450, -0.110722509450746960, -0.110772201880326650, -0.110821894032975390, -0.110871585908569380, -0.110921277506984410, +-0.110970968828096710, -0.111020659871781110, -0.111070350637913890, -0.111120041126370780, -0.111169731337028010, -0.111219421269760480, -0.111269110924444390, -0.111318800300955510, +-0.111368489399170090, -0.111418178218962990, -0.111467866760210450, -0.111517555022788250, -0.111567243006572600, -0.111616930711438400, -0.111666618137261860, -0.111716305283919240, +-0.111765992151285400, -0.111815678739236590, -0.111865365047648570, -0.111915051076397580, -0.111964736825358540, -0.112014422294407640, -0.112064107483420690, -0.112113792392273910, +-0.112163477020842210, -0.112213161369001820, -0.112262845436628520, -0.112312529223598560, -0.112362212729786830, -0.112411895955069560, -0.112461578899322550, -0.112511261562422040, +-0.112560943944242940, -0.112610626044661470, -0.112660307863553450, -0.112709989400795090, -0.112759670656261320, -0.112809351629828370, -0.112859032321372480, -0.112908712730768570, +-0.112958392857892890, -0.113008072702621210, -0.113057752264829790, -0.113107431544393550, -0.113157110541188740, -0.113206789255091160, -0.113256467685977020, -0.113306145833721300, +-0.113355823698200200, -0.113405501279289540, -0.113455178576865570, -0.113504855590803210, -0.113554532320978730, -0.113604208767268340, -0.113653884929546990, -0.113703560807690940, +-0.113753236401575970, -0.113802911711078360, -0.113852586736073030, -0.113902261476436230, -0.113951935932043780, -0.114001610102771930, -0.114051283988495610, -0.114100957589091080, +-0.114150630904434160, -0.114200303934401100, -0.114249976678866840, -0.114299649137707640, -0.114349321310799320, -0.114398993198018130, -0.114448664799239030, -0.114498336114338270, +-0.114548007143191650, -0.114597677885675460, -0.114647348341664640, -0.114697018511035450, -0.114746688393664140, -0.114796357989425680, -0.114846027298196330, -0.114895696319851900, +-0.114945365054268680, -0.114995033501321610, -0.115044701660886940, -0.115094369532840520, -0.115144037117058630, -0.115193704413416200, -0.115243371421789500, -0.115293038142054380, +-0.115342704574087100, -0.115392370717762640, -0.115442036572957220, -0.115491702139546720, -0.115541367417407420, -0.115591032406414250, -0.115640697106443490, -0.115690361517371440, +-0.115740025639073050, -0.115789689471424580, -0.115839353014301900, -0.115889016267581270, -0.115938679231137670, -0.115988341904847360, -0.116038004288586200, -0.116087666382230480, +-0.116137328185655130, -0.116186989698736480, -0.116236650921350340, -0.116286311853373030, -0.116335972494679490, -0.116385632845146010, -0.116435292904648460, -0.116484952673063120, +-0.116534612150264960, -0.116584271336130270, -0.116633930230535320, -0.116683588833355130, -0.116733247144465950, -0.116782905163743660, -0.116832562891064560, -0.116882220326303590, +-0.116931877469337090, -0.116981534320040880, -0.117031190878291280, -0.117080847143963260, -0.117130503116933130, -0.117180158797076740, -0.117229814184270390, -0.117279469278389060, +-0.117329124079309070, -0.117378778586906260, -0.117428432801056940, -0.117478086721636110, -0.117527740348520050, -0.117577393681584650, -0.117627046720706200, -0.117676699465759700, +-0.117726351916621450, -0.117776004073167750, -0.117825655935273610, -0.117875307502815330, -0.117924958775668780, -0.117974609753710270, -0.118024260436814800, -0.118073910824858670, +-0.118123560917717770, -0.118173210715268410, -0.118222860217385580, -0.118272509423945600, -0.118322158334824350, -0.118371806949898140, -0.118421455269041960, -0.118471103292132160, +-0.118520751019044610, -0.118570398449655600, -0.118620045583840160, -0.118669692421474610, -0.118719338962435280, -0.118768985206597150, -0.118818631153836550, -0.118868276804029380, +-0.118917922157051960, -0.118967567212779290, -0.119017211971087710, -0.119066856431853090, -0.119116500594951780, -0.119166144460258780, -0.119215788027650400, -0.119265431297002570, +-0.119315074268191590, -0.119364716941092490, -0.119414359315581590, -0.119464001391534800, -0.119513643168828440, -0.119563284647337540, -0.119612925826938430, -0.119662566707507440, +-0.119712207288919580, -0.119761847571051220, -0.119811487553778240, -0.119861127236976980, -0.119910766620522450, -0.119960405704291020, -0.120010044488158570, -0.120059682972001450, +-0.120109321155694670, -0.120158959039114610, -0.120208596622137130, -0.120258233904638610, -0.120307870886494070, -0.120357507567579850, -0.120407143947771860, -0.120456780026946440, +-0.120506415804978630, -0.120556051281744790, -0.120605686457120830, -0.120655321330983080, -0.120704955903206600, -0.120754590173667710, -0.120804224142242800, -0.120853857808806880, +-0.120903491173236330, -0.120953124235407040, -0.121002756995195390, -0.121052389452476390, -0.121102021607126420, -0.121151653459021420, -0.121201285008037700, -0.121250916254050340, +-0.121300547196935680, -0.121350177836569660, -0.121399808172828640, -0.121449438205587650, -0.121499067934723070, -0.121548697360110810, -0.121598326481627260, -0.121647955299147440, +-0.121697583812547750, -0.121747212021704530, -0.121796839926492840, -0.121846467526789060, -0.121896094822469090, -0.121945721813409350, -0.121995348499484850, -0.122044974880571980, +-0.122094600956546660, -0.122144226727285300, -0.122193852192662920, -0.122243477352555920, -0.122293102206840210, -0.122342726755392190, -0.122392350998086930, -0.122441974934800770, +-0.122491598565409680, -0.122541221889790040, -0.122590844907816910, -0.122640467619366660, -0.122690090024315680, -0.122739712122539040, -0.122789333913913110, -0.122838955398313850, +-0.122888576575617640, -0.122938197445699550, -0.122987818008435970, -0.123037438263702840, -0.123087058211376550, -0.123136677851332190, -0.123186297183446130, -0.123235916207594320, +-0.123285534923653170, -0.123335153331497730, -0.123384771431004420, -0.123434389222049160, -0.123484006704508390, -0.123533623878257160, -0.123583240743171850, -0.123632857299128460, +-0.123682473546003370, -0.123732089483671630, -0.123781705112009700, -0.123831320430893930, -0.123880935440199420, -0.123930550139802560, -0.123980164529579340, -0.124029778609406140, +-0.124079392379158060, -0.124129005838711490, -0.124178618987942410, -0.124228231826727240, -0.124277844354941030, -0.124327456572460210, -0.124377068479160760, -0.124426680074919070, +-0.124476291359610230, -0.124525902333110690, -0.124575512995296820, -0.124625123346043710, -0.124674733385227820, -0.124724343112725080, -0.124773952528411920, -0.124823561632163450, +-0.124873170423856070, -0.124922778903365760, -0.124972387070568940, -0.125021994925340720, -0.125071602467557520, -0.125121209697095310, -0.125170816613830500, -0.125220423217638240, +-0.125270029508394890, -0.125319635485976490, -0.125369241150259410, -0.125418846501118810, -0.125468451538431110, -0.125518056262072240, -0.125567660671918710, -0.125617264767845570, +-0.125666868549729280, -0.125716472017446230, -0.125766075170871570, -0.125815678009881750, -0.125865280534352700, -0.125914882744160910, -0.125964484639181470, -0.126014086219290810, +-0.126063687484364940, -0.126113288434280300, -0.126162889068911990, -0.126212489388136450, -0.126262089391829670, -0.126311689079868140, -0.126361288452126940, -0.126410887508482530, +-0.126460486248810870, -0.126510084672988470, -0.126559682780890390, -0.126609280572393120, -0.126658878047372640, -0.126708475205705410, -0.126758072047266550, -0.126807668571932510, +-0.126857264779579730, -0.126906860670083360, -0.126956456243319830, -0.127006051499165160, -0.127055646437495810, -0.127105241058186910, -0.127154835361114880, -0.127204429346155780, +-0.127254023013186060, -0.127303616362080820, -0.127353209392716550, -0.127402802104969240, -0.127452394498715400, -0.127501986573830110, -0.127551578330189850, -0.127601169767671080, +-0.127650760886148960, -0.127700351685499920, -0.127749942165600040, -0.127799532326325710, -0.127849122167552120, -0.127898711689155730, -0.127948300891012560, -0.127997889772999060, +-0.128047478334990390, -0.128097066576863040, -0.128146654498493050, -0.128196242099756830, -0.128245829380529560, -0.128295416340687750, -0.128345002980107370, -0.128394589298664930, +-0.128444175296235590, -0.128493760972695800, -0.128543346327921610, -0.128592931361789480, -0.128642516074174600, -0.128692100464953410, -0.128741684534002420, -0.128791268281196800, +-0.128840851706412990, -0.128890434809527050, -0.128940017590415460, -0.128989600048953410, -0.129039182185017340, -0.129088763998483290, -0.129138345489227810, -0.129187926657126000, +-0.129237507502054400, -0.129287088023889000, -0.129336668222506330, -0.129386248097781570, -0.129435827649591190, -0.129485406877811210, -0.129534985782318170, -0.129584564362987240, +-0.129634142619694890, -0.129683720552317170, -0.129733298160730590, -0.129782875444810320, -0.129832452404432890, -0.129882029039474740, -0.129931605349811100, -0.129981181335318440, +-0.130030756995872830, -0.130080332331350750, -0.130129907341627410, -0.130179482026579310, -0.130229056386082480, -0.130278630420013470, -0.130328204128247440, -0.130377777510660900, +-0.130427350567129920, -0.130476923297530990, -0.130526495701739330, -0.130576067779631410, -0.130625639531083780, -0.130675210955971590, -0.130724782054171400, -0.130774352825559240, +-0.130823923270011630, -0.130873493387403780, -0.130923063177612210, -0.130972632640512980, -0.131022201775982590, -0.131071770583896270, -0.131121339064130510, -0.131170907216561410, +-0.131220475041065490, -0.131270042537517920, -0.131319609705795260, -0.131369176545773570, -0.131418743057329400, -0.131468309240337890, -0.131517875094675660, -0.131567440620218690, +-0.131617005816843600, -0.131666570684425530, -0.131716135222841040, -0.131765699431966670, -0.131815263311677590, -0.131864826861850360, -0.131914390082361050, -0.131963952973086220, +-0.132013515533901060, -0.132063077764682120, -0.132112639665305480, -0.132162201235647670, -0.132211762475583940, -0.132261323384990780, -0.132310883963744320, -0.132360444211721110, +-0.132410004128796330, -0.132459563714846550, -0.132509122969748290, -0.132558681893376770, -0.132608240485608570, -0.132657798746319750, -0.132707356675386440, -0.132756914272685180, +-0.132806471538091220, -0.132856028471481040, -0.132905585072731260, -0.132955141341717040, -0.133004697278315010, -0.133054252882401220, -0.133103808153852230, -0.133153363092543280, +-0.133202917698350940, -0.133252471971151280, -0.133302025910820880, -0.133351579517235000, -0.133401132790270160, -0.133450685729802480, -0.133500238335708540, -0.133549790607863570, +-0.133599342546144110, -0.133648894150426720, -0.133698445420586680, -0.133747996356500500, -0.133797546958044360, -0.133847097225094770, -0.133896647157527000, -0.133946196755217630, +-0.133995746018042760, -0.134045294945878940, -0.134094843538601460, -0.134144391796086890, -0.134193939718211310, -0.134243487304851330, -0.134293034555882210, -0.134342581471180500, +-0.134392128050622310, -0.134441674294084270, -0.134491220201441580, -0.134540765772570870, -0.134590311007348220, -0.134639855905650250, -0.134689400467352170, -0.134738944692330610, +-0.134788488580462130, -0.134838032131621990, -0.134887575345686770, -0.134937118222532600, -0.134986660762036080, -0.135036202964072480, -0.135085744828518340, -0.135135286355249880, +-0.135184827544143630, -0.135234368395074860, -0.135283908907920160, -0.135333449082555710, -0.135382988918858080, -0.135432528416702530, -0.135482067575965650, -0.135531606396524030, +-0.135581144878252980, -0.135630683021029070, -0.135680220824728440, -0.135729758289227260, -0.135779295414402120, -0.135828832200128310, -0.135878368646282420, -0.135927904752741050, +-0.135977440519379460, -0.136026975946074300, -0.136076511032701660, -0.136126045779138200, -0.136175580185259220, -0.136225114250941250, -0.136274647976060510, -0.136324181360493570, +-0.136373714404115750, -0.136423247106803650, -0.136472779468433420, -0.136522311488881690, -0.136571843168023730, -0.136621374505736190, -0.136670905501895620, -0.136720436156377360, +-0.136769966469058010, -0.136819496439813750, -0.136869026068521190, -0.136918555355055620, -0.136968084299293660, -0.137017612901111500, -0.137067141160385740, -0.137116669076991690, +-0.137166196650805950, -0.137215723881704720, -0.137265250769564640, -0.137314777314260980, -0.137364303515670390, -0.137413829373669030, -0.137463354888133550, -0.137512880058939220, +-0.137562404885962690, -0.137611929369080180, -0.137661453508168250, -0.137710977303102280, -0.137760500753758840, -0.137810023860014590, -0.137859546621744850, -0.137909069038826240, +-0.137958591111134980, -0.138008112838547640, -0.138057634220939610, -0.138107155258187480, -0.138156675950167480, -0.138206196296756210, -0.138255716297829010, -0.138305235953262520, +-0.138354755262932950, -0.138404274226716920, -0.138453792844489780, -0.138503311116128150, -0.138552829041508670, -0.138602346620506690, -0.138651863852998850, -0.138701380738861350, +-0.138750897277970820, -0.138800413470202640, -0.138849929315433380, -0.138899444813539330, -0.138948959964397100, -0.138998474767882020, -0.139047989223870770, -0.139097503332239550, +-0.139147017092865010, -0.139196530505622470, -0.139246043570388610, -0.139295556287039630, -0.139345068655452240, -0.139394580675501700, -0.139444092347064730, -0.139493603670017510, +-0.139543114644236720, -0.139592625269597730, -0.139642135545977150, -0.139691645473251690, -0.139741155051296670, -0.139790664279988760, -0.139840173159204190, -0.139889681688819630, +-0.139939189868710400, -0.139988697698753220, -0.140038205178824320, -0.140087712308800290, -0.140137219088556590, -0.140186725517969820, -0.140236231596916230, -0.140285737325272520, +-0.140335242702914000, -0.140384747729717400, -0.140434252405558930, -0.140483756730315270, -0.140533260703861770, -0.140582764326075110, -0.140632267596831530, -0.140681770516007750, +-0.140731273083479070, -0.140780775299122250, -0.140830277162813900, -0.140879778674429440, -0.140929279833845510, -0.140978780640938380, -0.141028281095584770, -0.141077781197659980, +-0.141127280947040770, -0.141176780343603340, -0.141226279387224400, -0.141275778077779330, -0.141325276415144810, -0.141374774399197070, -0.141424272029812860, -0.141473769306867560, +-0.141523266230237780, -0.141572762799800300, -0.141622259015430490, -0.141671754877005010, -0.141721250384400140, -0.141770745537492610, -0.141820240336157750, -0.141869734780272320, +-0.141919228869712530, -0.141968722604355110, -0.142018215984075440, -0.142067709008750240, -0.142117201678255760, -0.142166693992468700, -0.142216185951264510, -0.142265677554519830, +-0.142315168802110950, -0.142364659693914600, -0.142414150229806140, -0.142463640409662310, -0.142513130233359400, -0.142562619700774080, -0.142612108811781800, -0.142661597566259210, +-0.142711085964083080, -0.142760574005128820, -0.142810061689273100, -0.142859549016392220, -0.142909035986362930, -0.142958522599060610, -0.143008008854361960, -0.143057494752143300, +-0.143106980292281360, -0.143156465474651500, -0.143205950299130500, -0.143255434765594600, -0.143304918873920580, -0.143354402623983800, -0.143403886015661040, -0.143453369048828550, +-0.143502851723363080, -0.143552334039140030, -0.143601815996036160, -0.143651297593927750, -0.143700778832691530, -0.143750259712202900, -0.143799740232338660, -0.143849220392975490, +-0.143898700193988820, -0.143948179635255410, -0.143997658716651540, -0.144047137438054000, -0.144096615799338130, -0.144146093800380760, -0.144195571441058130, -0.144245048721247020, +-0.144294525640822850, -0.144344002199662370, -0.144393478397641880, -0.144442954234638130, -0.144492429710526560, -0.144541904825183890, -0.144591379578486940, -0.144640853970311070, +-0.144690328000533080, -0.144739801669029280, -0.144789274975676400, -0.144838747920349900, -0.144888220502926520, -0.144937692723282580, -0.144987164581294880, -0.145036636076838810, +-0.145086107209791150, -0.145135577980028210, -0.145185048387426800, -0.145234518431862300, -0.145283988113211500, -0.145333457431350730, -0.145382926386156800, -0.145432394977505070, +-0.145481863205272370, -0.145531331069335000, -0.145580798569569740, -0.145630265705852050, -0.145679732478058710, -0.145729198886066470, -0.145778664929750780, -0.145828130608988440, +-0.145877595923655760, -0.145927060873629550, -0.145976525458785260, -0.146025989678999630, -0.146075453534149020, -0.146124917024110230, -0.146174380148758720, -0.146223842907971250, +-0.146273305301624160, -0.146322767329594230, -0.146372228991756980, -0.146421690287989150, -0.146471151218167530, -0.146520611782167580, -0.146570071979866130, -0.146619531811139460, +-0.146668991275864000, -0.146718450373916480, -0.146767909105172400, -0.146817367469508550, -0.146866825466801710, -0.146916283096927360, -0.146965740359762310, -0.147015197255182940, +-0.147064653783065990, -0.147114109943286970, -0.147163565735722670, -0.147213021160249450, -0.147262476216744130, -0.147311930905082180, -0.147361385225140390, -0.147410839176795150, +-0.147460292759923230, -0.147509745974400170, -0.147559198820102740, -0.147608651296907730, -0.147658103404690650, -0.147707555143328340, -0.147757006512697130, -0.147806457512673850, +-0.147855908143133980, -0.147905358403954330, -0.147954808295011290, -0.148004257816181680, -0.148053706967340960, -0.148103155748365990, -0.148152604159133140, -0.148202052199519210, +-0.148251499869399730, -0.148300947168651470, -0.148350394097150840, -0.148399840654774680, -0.148449286841398490, -0.148498732656899060, -0.148548178101152810, -0.148597623174036550, +-0.148647067875425810, -0.148696512205197360, -0.148745956163228110, -0.148795399749393510, -0.148844842963570420, -0.148894285805635210, -0.148943728275464730, -0.148993170372934500, +-0.149042612097921330, -0.149092053450301630, -0.149141494429952250, -0.149190935036748680, -0.149240375270567800, -0.149289815131285950, -0.149339254618780000, -0.149388693732925510, +-0.149438132473599240, -0.149487570840678120, -0.149537008834037620, -0.149586446453554590, -0.149635883699105440, -0.149685320570566580, -0.149734757067814860, -0.149784193190725830, +-0.149833628939176290, -0.149883064313043130, -0.149932499312201870, -0.149981933936529370, -0.150031368185902010, -0.150080802060196690, -0.150130235559288920, -0.150179668683055570, +-0.150229101431373020, -0.150278533804118180, -0.150327965801166560, -0.150377397422395030, -0.150426828667680010, -0.150476259536898360, -0.150525690029925610, -0.150575120146638620, +-0.150624549886914290, -0.150673979250628140, -0.150723408237657060, -0.150772836847877430, -0.150822265081166170, -0.150871692937398800, -0.150921120416452200, -0.150970547518202800, +-0.151019974242527470, -0.151069400589301740, -0.151118826558402530, -0.151168252149706280, -0.151217677363089800, -0.151267102198428700, -0.151316526655599860, -0.151365950734479670, +-0.151415374434945070, -0.151464797756871580, -0.151514220700136090, -0.151563643264615080, -0.151613065450185380, -0.151662487256722570, -0.151711908684103560, -0.151761329732205210, +-0.151810750400903080, -0.151860170690074100, -0.151909590599594690, -0.151959010129341710, -0.152008429279190810, -0.152057848049018810, -0.152107266438702200, -0.152156684448117860, +-0.152206102077141360, -0.152255519325649620, -0.152304936193519090, -0.152354352680626640, -0.152403768786847860, -0.152453184512059690, -0.152502599856138980, -0.152552014818961330, +-0.152601429400403640, -0.152650843600342370, -0.152700257418654450, -0.152749670855215430, -0.152799083909902270, -0.152848496582591360, -0.152897908873159650, -0.152947320781482740, +-0.152996732307437540, -0.153046143450900480, -0.153095554211748530, -0.153144964589857240, -0.153194374585103540, -0.153243784197363900, -0.153293193426515260, -0.153342602272433180, +-0.153392010734994590, -0.153441418814075970, -0.153490826509554260, -0.153540233821305020, -0.153589640749205230, -0.153639047293131740, -0.153688453452960230, -0.153737859228567560, +-0.153787264619830250, -0.153836669626625210, -0.153886074248828050, -0.153935478486315720, -0.153984882338964710, -0.154034285806651900, -0.154083688889252970, -0.154133091586644790, +-0.154182493898703890, -0.154231895825307190, -0.154281297366330340, -0.154330698521650210, -0.154380099291143350, -0.154429499674686670, -0.154478899672155810, -0.154528299283427710, +-0.154577698508378850, -0.154627097346886180, -0.154676495798825340, -0.154725893864073260, -0.154775291542506880, -0.154824688834001830, -0.154874085738435060, -0.154923482255683060, +-0.154972878385622820, -0.155022274128129940, -0.155071669483081350, -0.155121064450353620, -0.155170459029823630, -0.155219853221367080, -0.155269247024860890, -0.155318640440181590, +-0.155368033467206120, -0.155417426105810140, -0.155466818355870590, -0.155516210217264420, -0.155565601689867300, -0.155614992773556170, -0.155664383468207550, -0.155713773773698410, +-0.155763163689904420, -0.155812553216702510, -0.155861942353969190, -0.155911331101581480, -0.155960719459415000, -0.156010107427346720, -0.156059495005253180, -0.156108882193011330, +-0.156158268990496840, -0.156207655397586690, -0.156257041414157390, -0.156306427040085900, -0.156355812275247950, -0.156405197119520440, -0.156454581572779940, -0.156503965634903430, +-0.156553349305766560, -0.156602732585246350, -0.156652115473219690, -0.156701497969562340, -0.156750880074151250, -0.156800261786862930, -0.156849643107574430, -0.156899024036161380, +-0.156948404572500750, -0.156997784716469110, -0.157047164467943450, -0.157096543826799440, -0.157145922792914060, -0.157195301366163890, -0.157244679546425900, -0.157294057333575790, +-0.157343434727490520, -0.157392811728046670, -0.157442188335121220, -0.157491564548589870, -0.157540940368329580, -0.157590315794216980, -0.157639690826129000, -0.157689065463941370, +-0.157738439707531070, -0.157787813556775100, -0.157837187011549170, -0.157886560071730270, -0.157935932737194970, -0.157985305007820290, -0.158034676883481880, -0.158084048364056820, +-0.158133419449421610, -0.158182790139453300, -0.158232160434027550, -0.158281530333021420, -0.158330899836311460, -0.158380268943774720, -0.158429637655286840, -0.158479005970724840, +-0.158528373889965800, -0.158577741412885390, -0.158627108539360600, -0.158676475269268060, -0.158725841602484760, -0.158775207538886440, -0.158824573078350070, -0.158873938220752270, +-0.158923302965970070, -0.158972667313879180, -0.159022031264356630, -0.159071394817279000, -0.159120757972523310, -0.159170120729965280, -0.159219483089481970, -0.159268845050949930, +-0.159318206614246230, -0.159367567779246570, -0.159416928545827980, -0.159466288913867080, -0.159515648883240910, -0.159565008453825150, -0.159614367625496880, -0.159663726398133140, +-0.159713084771609640, -0.159762442745803420, -0.159811800320591110, -0.159861157495849730, -0.159910514271455030, -0.159959870647284040, -0.160009226623213350, -0.160058582199120060, +-0.160107937374879860, -0.160157292150369810, -0.160206646525466540, -0.160256000500047100, -0.160305354073987190, -0.160354707247163940, -0.160404060019454310, -0.160453412390734130, +-0.160502764360880400, -0.160552115929769780, -0.160601467097278850, -0.160650817863284700, -0.160700168227663060, -0.160749518190291010, -0.160798867751045600, -0.160848216909802580, +-0.160897565666439010, -0.160946914020831560, -0.160996261972857210, -0.161045609522391800, -0.161094956669312370, -0.161144303413495530, -0.161193649754818370, -0.161242995693156670, +-0.161292341228387450, -0.161341686360387400, -0.161391031089033580, -0.161440375414201730, -0.161489719335768940, -0.161539062853612280, -0.161588405967607540, -0.161637748677631780, +-0.161687090983561650, -0.161736432885274230, -0.161785774382645300, -0.161835115475551930, -0.161884456163870760, -0.161933796447478880, -0.161983136326252110, -0.162032475800067470, +-0.162081814868801630, -0.162131153532331710, -0.162180491790533450, -0.162229829643284000, -0.162279167090459950, -0.162328504131938420, -0.162377840767595180, -0.162427176997307350, +-0.162476512820951570, -0.162525848238404960, -0.162575183249543290, -0.162624517854243640, -0.162673852052383160, -0.162723185843837600, -0.162772519228484100, -0.162821852206199270, +-0.162871184776860270, -0.162920516940342850, -0.162969848696524140, -0.163019180045280820, -0.163068510986489970, -0.163117841520027420, -0.163167171645770270, -0.163216501363595200, +-0.163265830673379300, -0.163315159574998370, -0.163364488068329570, -0.163413816153249960, -0.163463143829635390, -0.163512471097362940, -0.163561797956309350, -0.163611124406351230, +-0.163660450447365740, -0.163709776079228710, -0.163759101301817230, -0.163808426115008430, -0.163857750518678120, -0.163907074512703450, -0.163956398096961080, -0.164005721271328150, +-0.164055044035680500, -0.164104366389895230, -0.164153688333849020, -0.164203009867419060, -0.164252330990481120, -0.164301651702912360, -0.164350972004589480, -0.164400291895389600, +-0.164449611375188540, -0.164498930443863460, -0.164548249101291480, -0.164597567347348460, -0.164646885181911510, -0.164696202604857370, -0.164745519616063120, -0.164794836215404670, +-0.164844152402759130, -0.164893468178003180, -0.164942783541014020, -0.164992098491667460, -0.165041413029840630, -0.165090727155410290, -0.165140040868253570, -0.165189354168246320, +-0.165238667055265660, -0.165287979529188330, -0.165337291589891520, -0.165386603237251020, -0.165435914471144030, -0.165485225291447240, -0.165534535698037830, -0.165583845690791630, +-0.165633155269585830, -0.165682464434297570, -0.165731773184802730, -0.165781081520978420, -0.165830389442701450, -0.165879696949848910, -0.165929004042296710, -0.165978310719922000, +-0.166027616982601520, -0.166076922830212410, -0.166126228262630570, -0.166175533279733170, -0.166224837881396910, -0.166274142067499020, -0.166323445837915310, -0.166372749192523010, +-0.166422052131199260, -0.166471354653819960, -0.166520656760262260, -0.166569958450402900, -0.166619259724119120, -0.166668560581286730, -0.166717861021782930, -0.166767161045484500, +-0.166816460652268600, -0.166865759842011100, -0.166915058614589190, -0.166964356969879660, -0.167013654907759660, -0.167062952428105090, -0.167112249530793150, -0.167161546215700560, +-0.167210842482704570, -0.167260138331681020, -0.167309433762507120, -0.167358728775059670, -0.167408023369215790, -0.167457317544851440, -0.167506611301843800, -0.167555904640070060, +-0.167605197559406120, -0.167654490059729180, -0.167703782140916020, -0.167753073802843850, -0.167802365045388540, -0.167851655868427350, -0.167900946271836990, -0.167950236255494710, +-0.167999525819276410, -0.168048814963059290, -0.168098103686720120, -0.168147391990136150, -0.168196679873183240, -0.168245967335738660, -0.168295254377679140, -0.168344540998881910, +-0.168393827199222910, -0.168443112978579330, -0.168492398336828000, -0.168541683273846080, -0.168590967789509520, -0.168640251883695550, -0.168689535556281380, -0.168738818807142920, +-0.168788101636157430, -0.168837384043201700, -0.168886666028152920, -0.168935947590887060, -0.168985228731281300, -0.169034509449212500, -0.169083789744557840, -0.169133069617193290, +-0.169182349066996060, -0.169231628093842960, -0.169280906697611230, -0.169330184878176780, -0.169379462635416870, -0.169428739969208740, -0.169478016879428340, -0.169527293365952870, +-0.169576569428659200, -0.169625845067424510, -0.169675120282124810, -0.169724395072637290, -0.169773669438838760, -0.169822943380606520, -0.169872216897816480, -0.169921489990345900, +-0.169970762658071570, -0.170020034900870810, -0.170069306718619500, -0.170118578111194930, -0.170167849078473900, -0.170217119620333700, -0.170266389736650260, -0.170315659427300870, +-0.170364928692162300, -0.170414197531111870, -0.170463465944025480, -0.170512733930780450, -0.170562001491254000, -0.170611268625322140, -0.170660535332862070, -0.170709801613750680, +-0.170759067467865230, -0.170808332895081680, -0.170857597895277270, -0.170906862468328900, -0.170956126614113770, -0.171005390332507920, -0.171054653623388590, -0.171103916486632620, +-0.171153178922117290, -0.171202440929718590, -0.171251702509313790, -0.171300963660779710, -0.171350224383993670, -0.171399484678831650, -0.171448744545170890, -0.171498003982888280, +-0.171547262991861100, -0.171596521571965310, -0.171645779723078230, -0.171695037445077160, -0.171744294737838030, -0.171793551601238160, -0.171842808035154420, -0.171892064039464110, +-0.171941319614043190, -0.171990574758768970, -0.172039829473518310, -0.172089083758168530, -0.172138337612595590, -0.172187591036676800, -0.172236844030289050, -0.172286096593309620, +-0.172335348725614510, -0.172384600427081040, -0.172433851697586490, -0.172483102537006850, -0.172532352945219490, -0.172581602922101260, -0.172630852467529430, -0.172680101581380030, +-0.172729350263530400, -0.172778598513857380, -0.172827846332238300, -0.172877093718549170, -0.172926340672667290, -0.172975587194469590, -0.173024833283833330, -0.173074078940634590, +-0.173123324164750620, -0.173172568956058340, -0.173221813314435090, -0.173271057239756860, -0.173320300731900970, -0.173369543790744350, -0.173418786416164320, -0.173468028608036840, +-0.173517270366239320, -0.173566511690649070, -0.173615752581142090, -0.173664993037595750, -0.173714233059886900, -0.173763472647892910, -0.173812711801489800, -0.173861950520554920, +-0.173911188804965170, -0.173960426654597880, -0.174009664069329080, -0.174058901049036100, -0.174108137593595890, -0.174157373702885780, -0.174206609376781780, -0.174255844615161280, +-0.174305079417901160, -0.174354313784878760, -0.174403547715970160, -0.174452781211052680, -0.174502014270003250, -0.174551246892699240, -0.174600479079016660, -0.174649710828832880, +-0.174698942142025250, -0.174748173018469840, -0.174797403458043980, -0.174846633460624650, -0.174895863026089140, -0.174945092154313560, -0.174994320845175220, -0.175043549098551100, +-0.175092776914318540, -0.175142004292353600, -0.175191231232533630, -0.175240457734735620, -0.175289683798836890, -0.175338909424713500, -0.175388134612242840, -0.175437359361302280, +-0.175486583671767890, -0.175535807543517050, -0.175585030976426660, -0.175634253970374160, -0.175683476525235580, -0.175732698640888310, -0.175781920317209290, -0.175831141554075920, +-0.175880362351364230, -0.175929582708951650, -0.175978802626715110, -0.176028022104532000, -0.176077241142278410, -0.176126459739831710, -0.176175677897068870, -0.176224895613867260, +-0.176274112890102970, -0.176323329725653400, -0.176372546120395520, -0.176421762074206710, -0.176470977586963030, -0.176520192658541940, -0.176569407288820780, -0.176618621477675680, +-0.176667835224984030, -0.176717048530622780, -0.176766261394469350, -0.176815473816399840, -0.176864685796291640, -0.176913897334021710, -0.176963108429467500, -0.177012319082505060, +-0.177061529293011830, -0.177110739060864770, -0.177159948385941320, -0.177209157268117530, -0.177258365707270880, -0.177307573703278740, -0.177356781256017230, -0.177405988365363750, +-0.177455195031195310, -0.177504401253388870, -0.177553607031821880, -0.177602812366370460, -0.177652017256911960, -0.177701221703323890, -0.177750425705482330, -0.177799629263264670, +-0.177848832376547970, -0.177898035045209620, -0.177947237269125730, -0.177996439048173780, -0.178045640382230700, -0.178094841271173950, -0.178144041714879690, -0.178193241713225310, +-0.178242441266087820, -0.178291640373344690, -0.178340839034872000, -0.178390037250547220, -0.178439235020247780, -0.178488432343849810, -0.178537629221230760, -0.178586825652267630, +-0.178636021636837890, -0.178685217174817670, -0.178734412266084390, -0.178783606910515090, -0.178832801107987190, -0.178881994858376860, -0.178931188161561530, -0.178980381017418260, +-0.179029573425824460, -0.179078765386656290, -0.179127956899791190, -0.179177147965106230, -0.179226338582478800, -0.179275528751785120, -0.179324718472902600, -0.179373907745708300, +-0.179423096570079650, -0.179472284945892820, -0.179521472873025280, -0.179570660351354520, -0.179619847380756650, -0.179669033961109170, -0.179718220092289080, -0.179767405774173910, +-0.179816591006639770, -0.179865775789564140, -0.179914960122824100, -0.179964144006297090, -0.180013327439859290, -0.180062510423388140, -0.180111692956760740, -0.180160875039854530, +-0.180210056672545720, -0.180259237854711730, -0.180308418586230120, -0.180357598866977000, -0.180406778696829890, -0.180455958075665860, -0.180505137003362350, -0.180554315479795560, +-0.180603493504842980, -0.180652671078381650, -0.180701848200289120, -0.180751024870441510, -0.180800201088716330, -0.180849376854990640, -0.180898552169141970, -0.180947727031046470, +-0.180996901440581640, -0.181046075397624600, -0.181095248902052780, -0.181144421953742390, -0.181193594552570950, -0.181242766698415550, -0.181291938391153620, -0.181341109630661440, +-0.181390280416816490, -0.181439450749496270, -0.181488620628576990, -0.181537790053936170, -0.181586959025450860, -0.181636127542998570, -0.181685295606455550, -0.181734463215699280, +-0.181783630370606850, -0.181832797071055790, -0.181881963316922300, -0.181931129108083900, -0.181980294444417680, -0.182029459325801170, -0.182078623752110540, -0.182127787723223380, +-0.182176951239016750, -0.182226114299368160, -0.182275276904153880, -0.182324439053251380, -0.182373600746537800, -0.182422761983890620, -0.182471922765186150, -0.182521083090301850, +-0.182570242959115250, -0.182619402371502650, -0.182668561327341520, -0.182717719826509000, -0.182766877868882600, -0.182816035454338580, -0.182865192582754470, -0.182914349254007370, +-0.182963505467974850, -0.183012661224533140, -0.183061816523559740, -0.183110971364931820, -0.183160125748526910, -0.183209279674221260, -0.183258433141892390, -0.183307586151417870, +-0.183356738702673970, -0.183405890795538210, -0.183455042429887720, -0.183504193605600080, -0.183553344322551490, -0.183602494580619560, -0.183651644379681400, -0.183700793719614540, +-0.183749942600295290, -0.183799091021601160, -0.183848238983409300, -0.183897386485597310, -0.183946533528041380, -0.183995680110619150, -0.184044826233207700, -0.184093971895684600, +-0.184143117097926160, -0.184192261839809940, -0.184241406121213040, -0.184290549942013080, -0.184339693302086300, -0.184388836201310270, -0.184437978639562600, -0.184487120616719570, +-0.184536262132658700, -0.184585403187257190, -0.184634543780392620, -0.184683683911941260, -0.184732823581780670, -0.184781962789788030, -0.184831101535840920, -0.184880239819815610, +-0.184929377641589700, -0.184978515001040340, -0.185027651898045150, -0.185076788332480400, -0.185125924304223670, -0.185175059813152100, -0.185224194859143350, -0.185273329442073670, +-0.185322463561820670, -0.185371597218261520, -0.185420730411273800, -0.185469863140733800, -0.185518995406519170, -0.185568127208507460, -0.185617258546575010, -0.185666389420599430, +-0.185715519830457860, -0.185764649776027940, -0.185813779257185950, -0.185862908273809500, -0.185912036825775780, -0.185961164912962440, -0.186010292535245730, -0.186059419692503280, +-0.186108546384612270, -0.186157672611450360, -0.186206798372893810, -0.186255923668820270, -0.186305048499107370, -0.186354172863631400, -0.186403296762269990, -0.186452420194900350, +-0.186501543161400110, -0.186550665661645550, -0.186599787695514360, -0.186648909262883660, -0.186698030363631140, -0.186747150997633120, -0.186796271164767210, -0.186845390864910620, +-0.186894510097941000, -0.186943628863734670, -0.186992747162169240, -0.187041864993121980, -0.187090982356470450, -0.187140099252091070, -0.187189215679861410, -0.187238331639658750, +-0.187287447131360670, -0.187336562154843540, -0.187385676709984990, -0.187434790796662700, -0.187483904414752990, -0.187533017564133540, -0.187582130244681510, -0.187631242456274630, +-0.187680354198789170, -0.187729465472102870, -0.187778576276092870, -0.187827686610636870, -0.187876796475611230, -0.187925905870893580, -0.187975014796361200, -0.188024123251891690, +-0.188073231237361440, -0.188122338752648110, -0.188171445797628960, -0.188220552372181600, -0.188269658476182430, -0.188318764109509120, -0.188367869272038880, -0.188416973963649430, +-0.188466078184217100, -0.188515181933619570, -0.188564285211734520, -0.188613388018438330, -0.188662490353608660, -0.188711592217122780, -0.188760693608858330, -0.188809794528691730, +-0.188858894976500660, -0.188907994952162320, -0.188957094455554450, -0.189006193486553400, -0.189055292045036850, -0.189104390130882090, -0.189153487743966790, -0.189202584884167330, +-0.189251681551361410, -0.189300777745426720, -0.189349873466239630, -0.189398968713677900, -0.189448063487618720, -0.189497157787939820, -0.189546251614517600, -0.189595344967229740, +-0.189644437845953530, -0.189693530250566650, -0.189742622180945510, -0.189791713636967810, -0.189840804618510830, -0.189889895125452260, -0.189938985157668550, -0.189988074715037340, +-0.190037163797435990, -0.190086252404742110, -0.190135340536832200, -0.190184428193583940, -0.190233515374874600, -0.190282602080581900, -0.190331688310582280, -0.190380774064753430, +-0.190429859342973070, -0.190478944145117620, -0.190528028471064840, -0.190577112320691970, -0.190626195693876760, -0.190675278590495630, -0.190724361010426280, -0.190773442953546060, +-0.190822524419732630, -0.190871605408862500, -0.190920685920813320, -0.190969765955462440, -0.191018845512687580, -0.191067924592365160, -0.191117003194372940, -0.191166081318588640, +-0.191215158964888720, -0.191264236133150880, -0.191313312823252450, -0.191362389035070750, -0.191411464768483530, -0.191460540023367180, -0.191509614799599490, -0.191558689097058200, +-0.191607762915619760, -0.191656836255161890, -0.191705909115561960, -0.191754981496697670, -0.191804053398445500, -0.191853124820683200, -0.191902195763288070, -0.191951266226137920, +-0.192000336209109140, -0.192049405712079540, -0.192098474734926420, -0.192147543277527530, -0.192196611339759350, -0.192245678921499660, -0.192294746022626200, -0.192343812643015450, +-0.192392878782545160, -0.192441944441092670, -0.192491009618535740, -0.192540074314750870, -0.192589138529615820, -0.192638202263007900, -0.192687265514804920, -0.192736328284883350, +-0.192785390573120940, -0.192834452379395090, -0.192883513703583500, -0.192932574545562730, -0.192981634905210500, -0.193030694782404200, -0.193079754177021580, -0.193128813088939140, +-0.193177871518034670, -0.193226929464185540, -0.193275986927269490, -0.193325043907163070, -0.193374100403744030, -0.193423156416890170, -0.193472211946477980, -0.193521266992385250, +-0.193570321554489390, -0.193619375632668120, -0.193668429226798000, -0.193717482336756790, -0.193766534962421880, -0.193815587103671080, -0.193864638760380880, -0.193913689932429080, +-0.193962740619693040, -0.194011790822050580, -0.194060840539378220, -0.194109889771553770, -0.194158938518455000, -0.194207986779958490, -0.194257034555941980, -0.194306081846282900, +-0.194355128650858610, -0.194404174969546930, -0.194453220802224380, -0.194502266148768780, -0.194551311009057950, -0.194600355382968410, -0.194649399270377970, -0.194698442671164040, +-0.194747485585204440, -0.194796528012375710, -0.194845569952555640, -0.194894611405621640, -0.194943652371451560, -0.194992692849921910, -0.195041732840910500, -0.195090772344294780, +-0.195139811359952590, -0.195188849887760390, -0.195237887927596110, -0.195286925479337510, -0.195335962542861170, -0.195384999118044940, -0.195434035204766210, -0.195483070802902810, +-0.195532105912331310, -0.195581140532929550, -0.195630174664574910, -0.195679208307145300, -0.195728241460517230, -0.195777274124568550, -0.195826306299176660, -0.195875337984219470, +-0.195924369179573510, -0.195973399885116610, -0.196022430100726200, -0.196071459826280160, -0.196120489061655050, -0.196169517806728700, -0.196218546061378560, -0.196267573825482490, +-0.196316601098917050, -0.196365627881560120, -0.196414654173289540, -0.196463679973981900, -0.196512705283515030, -0.196561730101766420, -0.196610754428613920, -0.196659778263934100, +-0.196708801607604840, -0.196757824459503570, -0.196806846819508160, -0.196855868687495220, -0.196904890063342610, -0.196953910946927770, -0.197002931338128570, -0.197051951236821620, +-0.197100970642884790, -0.197149989556195980, -0.197199007976631730, -0.197248025904070010, -0.197297043338388180, -0.197346060279464190, -0.197395076727174630, -0.197444092681397340, +-0.197493108142009850, -0.197542123108890020, -0.197591137581914460, -0.197640151560961040, -0.197689165045907250, -0.197738178036630960, -0.197787190533008810, -0.197836202534918680, +-0.197885214042238050, -0.197934225054844810, -0.197983235572615570, -0.198032245595428260, -0.198081255123160330, -0.198130264155689680, -0.198179272692892950, -0.198228280734648040, +-0.198277288280832850, -0.198326295331324010, -0.198375301885999440, -0.198424307944736590, -0.198473313507413430, -0.198522318573906560, -0.198571323144093870, -0.198620327217852890, +-0.198669330795061520, -0.198718333875596370, -0.198767336459335420, -0.198816338546156100, -0.198865340135936370, -0.198914341228552870, -0.198963341823883500, -0.199012341921805810, +-0.199061341522197680, -0.199110340624935740, -0.199159339229897980, -0.199208337336961860, -0.199257334946005310, -0.199306332056905010, -0.199355328669538890, -0.199404324783784860, +-0.199453320399519600, -0.199502315516621040, -0.199551310134966690, -0.199600304254434480, -0.199649297874901100, -0.199698290996244480, -0.199747283618342100, -0.199796275741071980, +-0.199845267364310710, -0.199894258487936290, -0.199943249111826200, -0.199992239235858430, -0.200041228859909660, -0.200090217983857790, -0.200139206607580810, -0.200188194730955370, +-0.200237182353859460, -0.200286169476170590, -0.200335156097766730, -0.200384142218524550, -0.200433127838322010, -0.200482112957036630, -0.200531097574546430, -0.200580081690728050, +-0.200629065305459460, -0.200678048418618190, -0.200727031030082270, -0.200776013139728320, -0.200824994747434320, -0.200873975853077870, -0.200922956456536880, -0.200971936557688080, +-0.201020916156409430, -0.201069895252578510, -0.201118873846073270, -0.201167851936770420, -0.201216829524547920, -0.201265806609283810, -0.201314783190854720, -0.201363759269138690, +-0.201412734844013260, -0.201461709915356420, -0.201510684483044880, -0.201559658546956620, -0.201608632106969220, -0.201657605162960690, -0.201706577714807680, -0.201755549762388240, +-0.201804521305579940, -0.201853492344260750, -0.201902462878307400, -0.201951432907597900, -0.202000402432009810, -0.202049371451421160, -0.202098339965708640, -0.202147307974750280, +-0.202196275478423640, -0.202245242476606750, -0.202294208969176300, -0.202343174956010340, -0.202392140436986890, -0.202441105411982650, -0.202490069880875640, -0.202539033843543460, +-0.202587997299864130, -0.202636960249714370, -0.202685922692972200, -0.202734884629515220, -0.202783846059221480, -0.202832806981967710, -0.202881767397631890, -0.202930727306091660, +-0.202979686707225050, -0.203028645600908770, -0.203077603987020900, -0.203126561865439450, -0.203175519236041160, -0.203224476098704060, -0.203273432453305790, -0.203322388299724350, +-0.203371343637836520, -0.203420298467520330, -0.203469252788653380, -0.203518206601113750, -0.203567159904778170, -0.203616112699524680, -0.203665064985230900, -0.203714016761774920, +-0.203762968029033460, -0.203811918786884570, -0.203860869035205870, -0.203909818773875460, -0.203958768002770050, -0.204007716721767710, -0.204056664930746090, -0.204105612629583240, +-0.204154559818155920, -0.204203506496342220, -0.204252452664020170, -0.204301398321066560, -0.204350343467359450, -0.204399288102776490, -0.204448232227195740, -0.204497175840493980, +-0.204546118942549260, -0.204595061533239280, -0.204644003612442060, -0.204692945180034390, -0.204741886235894370, -0.204790826779899630, -0.204839766811928250, -0.204888706331857020, +-0.204937645339564020, -0.204986583834927350, -0.205035521817823780, -0.205084459288131400, -0.205133396245727910, -0.205182332690490880, -0.205231268622298480, -0.205280204041027480, +-0.205329138946555970, -0.205378073338762010, -0.205427007217522470, -0.205475940582715400, -0.205524873434218490, -0.205573805771909810, -0.205622737595666180, -0.205671668905365730, +-0.205720599700886100, -0.205769529982105400, -0.205818459748900450, -0.205867389001149340, -0.205916317738729760, -0.205965245961519800, -0.206014173669396310, -0.206063100862237390, +-0.206112027539921170, -0.206160953702324400, -0.206209879349325280, -0.206258804480801440, -0.206307729096631060, -0.206356653196690890, -0.206405576780859110, -0.206454499849013370, +-0.206503422401031810, -0.206552344436791270, -0.206601265956169870, -0.206650186959045300, -0.206699107445295710, -0.206748027414797920, -0.206796946867430030, -0.206845865803069790, +-0.206894784221595320, -0.206943702122883460, -0.206992619506812360, -0.207041536373259670, -0.207090452722103610, -0.207139368553220990, -0.207188283866489910, -0.207237198661788580, +-0.207286112938993820, -0.207335026697983760, -0.207383939938636160, -0.207432852660829110, -0.207481764864439530, -0.207530676549345510, -0.207579587715424810, -0.207628498362555590, +-0.207677408490614670, -0.207726318099480220, -0.207775227189029990, -0.207824135759142130, -0.207873043809693490, -0.207921951340562240, -0.207970858351626570, -0.208019764842763300, +-0.208068670813850610, -0.208117576264766240, -0.208166481195387940, -0.208215385605593880, -0.208264289495260910, -0.208313192864267220, -0.208362095712490980, -0.208410998039809060, +-0.208459899846099670, -0.208508801131240510, -0.208557701895109780, -0.208606602137584360, -0.208655501858542450, -0.208704401057861750, -0.208753299735420530, -0.208802197891095610, +-0.208851095524765190, -0.208899992636307010, -0.208948889225599320, -0.208997785292518940, -0.209046680836944110, -0.209095575858753020, -0.209144470357822550, -0.209193364334030910, +-0.209242257787255860, -0.209291150717375580, -0.209340043124267020, -0.209388935007808340, -0.209437826367877310, -0.209486717204352160, -0.209535607517109780, -0.209584497306028380, +-0.209633386570985740, -0.209682275311860070, -0.209731163528528270, -0.209780051220868570, -0.209828938388758740, -0.209877825032077000, -0.209926711150700250, -0.209975596744506720, +-0.210024481813374210, -0.210073366357180940, -0.210122250375803820, -0.210171133869121060, -0.210220016837010890, -0.210268899279350270, -0.210317781196017380, -0.210366662586890050, +-0.210415543451846490, -0.210464423790763630, -0.210513303603519750, -0.210562182889992570, -0.210611061650060380, -0.210659939883600100, -0.210708817590489980, -0.210757694770607800, +-0.210806571423831830, -0.210855447550038990, -0.210904323149107540, -0.210953198220915710, -0.211002072765340440, -0.211050946782260000, -0.211099820271552190, -0.211148693233095260, +-0.211197565666766170, -0.211246437572443190, -0.211295308950004090, -0.211344179799327150, -0.211393050120289330, -0.211441919912768870, -0.211490789176643630, -0.211539657911791860, +-0.211588526118090480, -0.211637393795417790, -0.211686260943651640, -0.211735127562670270, -0.211783993652350620, -0.211832859212571000, -0.211881724243209250, -0.211930588744143610, +-0.211979452715251070, -0.212028316156409880, -0.212077179067498340, -0.212126041448393420, -0.212174903298973400, -0.212223764619116130, -0.212272625408699870, -0.212321485667601620, +-0.212370345395699660, -0.212419204592871810, -0.212468063258996390, -0.212516921393950400, -0.212565778997612090, -0.212614636069859340, -0.212663492610570440, -0.212712348619622380, +-0.212761204096893420, -0.212810059042261470, -0.212858913455604790, -0.212907767336800420, -0.212956620685726600, -0.213005473502261260, -0.213054325786282640, -0.213103177537667800, +-0.213152028756294990, -0.213200879442042580, -0.213249729594787500, -0.213298579214408120, -0.213347428300782270, -0.213396276853788290, -0.213445124873303190, -0.213493972359205280, +-0.213542819311372420, -0.213591665729682970, -0.213640511614013930, -0.213689356964243570, -0.213738201780249850, -0.213787046061911040, -0.213835889809104200, -0.213884733021707630, +-0.213933575699599670, -0.213982417842657310, -0.214031259450758930, -0.214080100523782400, -0.214128941061606040, -0.214177781064106900, -0.214226620531163310, -0.214275459462653170, +-0.214324297858454800, -0.214373135718445270, -0.214421973042502880, -0.214470809830505590, -0.214519646082331680, -0.214568481797858230, -0.214617316976963600, -0.214666151619525620, +-0.214714985725422750, -0.214763819294531950, -0.214812652326731630, -0.214861484821899650, -0.214910316779914400, -0.214959148200652930, -0.215007979083993610, -0.215056809429814750, +-0.215105639237993420, -0.215154468508408030, -0.215203297240936430, -0.215252125435457050, -0.215300953091846910, -0.215349780209984380, -0.215398606789747430, -0.215447432831014360, +-0.215496258333662290, -0.215545083297569580, -0.215593907722614160, -0.215642731608674390, -0.215691554955627360, -0.215740377763351480, -0.215789200031724610, -0.215838021760625190, +-0.215886842949930300, -0.215935663599518270, -0.215984483709267090, -0.216033303279055150, -0.216082122308759510, -0.216130940798258560, -0.216179758747430700, -0.216228576156153010, +-0.216277393024303880, -0.216326209351761250, -0.216375025138403540, -0.216423840384107840, -0.216472655088752520, -0.216521469252215580, -0.216570282874375410, -0.216619095955109090, +-0.216667908494295010, -0.216716720491811180, -0.216765531947535980, -0.216814342861346520, -0.216863153233121190, -0.216911963062738440, -0.216960772350075330, -0.217009581095010280, +-0.217058389297421270, -0.217107196957186750, -0.217156004074183780, -0.217204810648290810, -0.217253616679385810, -0.217302422167347210, -0.217351227112052130, -0.217400031513378940, +-0.217448835371205710, -0.217497638685410830, -0.217546441455871400, -0.217595243682465860, -0.217644045365072230, -0.217692846503568900, -0.217741647097833060, -0.217790447147743070, +-0.217839246653176940, -0.217888045614013180, -0.217936844030128830, -0.217985641901402400, -0.218034439227712290, -0.218083236008935640, -0.218132032244950900, -0.218180827935636090, +-0.218229623080869630, -0.218278417680528690, -0.218327211734491710, -0.218376005242636670, -0.218424798204842090, -0.218473590620985060, -0.218522382490944050, -0.218571173814597090, +-0.218619964591822650, -0.218668754822497840, -0.218717544506501160, -0.218766333643711040, -0.218815122234004650, -0.218863910277260460, -0.218912697773356480, -0.218961484722170780, +-0.219010271123581790, -0.219059056977466690, -0.219107842283703950, -0.219156627042172040, -0.219205411252748120, -0.219254194915310670, -0.219302978029737750, -0.219351760595907800, +-0.219400542613698010, -0.219449324082986900, -0.219498105003652440, -0.219546885375573180, -0.219595665198626250, -0.219644444472690160, -0.219693223197642980, -0.219742001373363170, +-0.219790778999727900, -0.219839556076615710, -0.219888332603905030, -0.219937108581473110, -0.219985884009198410, -0.220034658886959030, -0.220083433214633390, -0.220132206992098760, +-0.220180980219233600, -0.220229752895916010, -0.220278525022024470, -0.220327296597436160, -0.220376067622029630, -0.220424838095682920, -0.220473608018274540, -0.220522377389681720, +-0.220571146209782960, -0.220619914478456330, -0.220668682195580330, -0.220717449361032210, -0.220766215974690480, -0.220814982036433180, -0.220863747546138880, -0.220912512503684770, +-0.220961276908949370, -0.221010040761811240, -0.221058804062147530, -0.221107566809836840, -0.221156329004757230, -0.221205090646787230, -0.221253851735804090, -0.221302612271686290, +-0.221351372254311980, -0.221400131683559650, -0.221448890559306580, -0.221497648881431250, -0.221546406649811840, -0.221595163864326820, -0.221643920524853460, -0.221692676631270320, +-0.221741432183455910, -0.221790187181287480, -0.221838941624643570, -0.221887695513402320, -0.221936448847441850, -0.221985201626640680, -0.222033953850876040, -0.222082705520026540, +-0.222131456633970710, -0.222180207192585830, -0.222228957195750390, -0.222277706643342590, -0.222326455535240940, -0.222375203871322730, -0.222423951651466500, -0.222472698875550380, +-0.222521445543452960, -0.222570191655051490, -0.222618937210224550, -0.222667682208850250, -0.222716426650807180, -0.222765170535972640, -0.222813913864225140, -0.222862656635443300, +-0.222911398849504390, -0.222960140506286990, -0.223008881605669200, -0.223057622147529670, -0.223106362131745640, -0.223155101558195730, -0.223203840426758030, -0.223252578737311190, +-0.223301316489732480, -0.223350053683900460, -0.223398790319693290, -0.223447526396989590, -0.223496261915666660, -0.223544996875603060, -0.223593731276676950, -0.223642465118766980, +-0.223691198401750390, -0.223739931125505800, -0.223788663289911400, -0.223837394894845780, -0.223886125940186230, -0.223934856425811350, -0.223983586351599790, -0.224032315717428790, +-0.224081044523177040, -0.224129772768722670, -0.224178500453944300, -0.224227227578719240, -0.224275954142926110, -0.224324680146443110, -0.224373405589148840, -0.224422130470920610, +-0.224470854791637060, -0.224519578551176350, -0.224568301749417170, -0.224617024386236760, -0.224665746461513830, -0.224714467975126950, -0.224763188926953460, -0.224811909316872010, +-0.224860629144760770, -0.224909348410498390, -0.224958067113962240, -0.225006785255030900, -0.225055502833582580, -0.225104219849495970, -0.225152936302648350, -0.225201652192918410, +-0.225250367520184320, -0.225299082284324740, -0.225347796485217050, -0.225396510122739840, -0.225445223196771380, -0.225493935707190260, -0.225542647653873910, -0.225591359036700910, +-0.225640069855549520, -0.225688780110298390, -0.225737489800824890, -0.225786198927007660, -0.225834907488725340, -0.225883615485855340, -0.225932322918276310, -0.225981029785866460, +-0.226029736088504490, -0.226078441826067710, -0.226127146998434860, -0.226175851605484120, -0.226224555647094180, -0.226273259123142450, -0.226321962033507550, -0.226370664378067740, +-0.226419366156701720, -0.226468067369286820, -0.226516768015701780, -0.226565468095824810, -0.226614167609534590, -0.226662866556708560, -0.226711564937225330, -0.226760262750963200, +-0.226808959997800820, -0.226857656677615650, -0.226906352790286310, -0.226955048335691520, -0.227003743313708680, -0.227052437724216490, -0.227101131567093190, -0.227149824842217520, +-0.227198517549466850, -0.227247209688719860, -0.227295901259854880, -0.227344592262750560, -0.227393282697284320, -0.227441972563334870, -0.227490661860780510, -0.227539350589499920, +-0.227588038749370530, -0.227636726340271020, -0.227685413362080150, -0.227734099814675290, -0.227782785697935200, -0.227831471011738150, -0.227880155755962850, -0.227928839930486710, +-0.227977523535188490, -0.228026206569946460, -0.228074889034639350, -0.228123570929144560, -0.228172252253340870, -0.228220933007106550, -0.228269613190320330, -0.228318292802859620, +-0.228366971844603190, -0.228415650315429320, -0.228464328215216780, -0.228513005543842990, -0.228561682301186670, -0.228610358487126130, -0.228659034101540150, -0.228707709144306160, +-0.228756383615302870, -0.228805057514409080, -0.228853730841502210, -0.228902403596461000, -0.228951075779163770, -0.228999747389489310, -0.229048418427315020, -0.229097088892519700, +-0.229145758784981670, -0.229194428104579660, -0.229243096851191150, -0.229291765024694890, -0.229340432624969250, -0.229389099651892940, -0.229437766105343440, -0.229486431985199520, +-0.229535097291339560, -0.229583762023642250, -0.229632426181985120, -0.229681089766246900, -0.229729752776305970, -0.229778415212041120, -0.229827077073329780, -0.229875738360050740, +-0.229924399072082790, -0.229973059209303390, -0.230021718771591360, -0.230070377758825050, -0.230119036170883200, -0.230167694007643340, -0.230216351268984270, -0.230265007954784270, +-0.230313664064922210, -0.230362319599275560, -0.230410974557723110, -0.230459628940143210, -0.230508282746414690, -0.230556935976415020, -0.230605588630023030, -0.230654240707117490, +-0.230702892207575890, -0.230751543131277080, -0.230800193478099410, -0.230848843247921710, -0.230897492440621440, -0.230946141056077440, -0.230994789094168100, -0.231043436554772220, +-0.231092083437767330, -0.231140729743032210, -0.231189375470445270, -0.231238020619885330, -0.231286665191229900, -0.231335309184357800, -0.231383952599147430, -0.231432595435477620, +-0.231481237693225870, -0.231529879372271040, -0.231578520472491530, -0.231627160993766120, -0.231675800935972400, -0.231724440298989170, -0.231773079082695260, -0.231821717286968240, +-0.231870354911686890, -0.231918991956729690, -0.231967628421975440, -0.232016264307301680, -0.232064899612587250, -0.232113534337710590, -0.232162168482550500, -0.232210802046984580, +-0.232259435030891640, -0.232308067434150110, -0.232356699256638850, -0.232405330498235420, -0.232453961158818670, -0.232502591238267000, -0.232551220736459290, -0.232599849653273070, +-0.232648477988587260, -0.232697105742280250, -0.232745732914230900, -0.232794359504316790, -0.232842985512416780, -0.232891610938409740, -0.232940235782173240, -0.232988860043586150, +-0.233037483722526920, -0.233086106818874400, -0.233134729332506170, -0.233183351263301140, -0.233231972611137710, -0.233280593375894800, -0.233329213557449950, -0.233377833155682110, +-0.233426452170469640, -0.233475070601691510, -0.233523688449225250, -0.233572305712949760, -0.233620922392743960, -0.233669538488485430, -0.233718154000053020, -0.233766768927325260, +-0.233815383270180980, -0.233863997028497830, -0.233912610202154670, -0.233961222791029990, -0.234009834795002700, -0.234058446213950390, -0.234107057047751950, -0.234155667296285870, +-0.234204276959431050, -0.234252886037065120, -0.234301494529066960, -0.234350102435315070, -0.234398709755688360, -0.234447316490064450, -0.234495922638322220, -0.234544528200340220, +-0.234593133175997310, -0.234641737565171150, -0.234690341367740610, -0.234738944583584690, -0.234787547212580970, -0.234836149254608360, -0.234884750709545400, -0.234933351577270990, +-0.234981951857662770, -0.235030551550599650, -0.235079150655960160, -0.235127749173623250, -0.235176347103466520, -0.235224944445368900, -0.235273541199208960, -0.235322137364865570, +-0.235370732942216420, -0.235419327931140430, -0.235467922331516530, -0.235516516143222420, -0.235565109366137030, -0.235613702000138840, -0.235662294045106410, -0.235710885500918680, +-0.235759476367453290, -0.235808066644589230, -0.235856656332205400, -0.235905245430179540, -0.235953833938390530, -0.236002421856716970, -0.236051009185037770, -0.236099595923230600, +-0.236148182071174470, -0.236196767628747860, -0.236245352595829770, -0.236293936972297860, -0.236342520758031140, -0.236391103952908080, -0.236439686556807720, -0.236488268569607700, +-0.236536849991187010, -0.236585430821424610, -0.236634011060198210, -0.236682590707386810, -0.236731169762868900, -0.236779748226523510, -0.236828326098228320, -0.236876903377862320, +-0.236925480065304060, -0.236974056160432520, -0.237022631663125400, -0.237071206573261720, -0.237119780890720030, -0.237168354615379300, -0.237216927747117250, -0.237265500285812890, +-0.237314072231344790, -0.237362643583591940, -0.237411214342432040, -0.237459784507744100, -0.237508354079406710, -0.237556923057298860, -0.237605491441298280, -0.237654059231283940, +-0.237702626427134910, -0.237751193028728880, -0.237799759035944860, -0.237848324448661470, -0.237896889266757670, -0.237945453490111230, -0.237994017118601160, -0.238042580152106030, +-0.238091142590504870, -0.238139704433675460, -0.238188265681496760, -0.238236826333847410, -0.238285386390606420, -0.238333945851651550, -0.238382504716861790, -0.238431062986116220, +-0.238479620659292540, -0.238528177736269830, -0.238576734216926660, -0.238625290101142080, -0.238673845388793880, -0.238722400079761030, -0.238770954173922190, -0.238819507671156390, +-0.238868060571341410, -0.238916612874356280, -0.238965164580079600, -0.239013715688390440, -0.239062266199166570, -0.239110816112287020, -0.239159365427630440, -0.239207914145075890, +-0.239256462264501090, -0.239305009785785170, -0.239353556708806700, -0.239402103033444780, -0.239450648759577170, -0.239499193887082930, -0.239547738415841150, -0.239596282345729610, +-0.239644825676627340, -0.239693368408413020, -0.239741910540965690, -0.239790452074163160, -0.239838993007884500, -0.239887533342008350, -0.239936073076413820, -0.239984612210978670, +-0.240033150745581960, -0.240081688680102410, -0.240130226014419050, -0.240178762748409710, -0.240227298881953430, -0.240275834414928950, -0.240324369347215290, -0.240372903678690270, +-0.240421437409233000, -0.240469970538722130, -0.240518503067036760, -0.240567034994054710, -0.240615566319655080, -0.240664097043716970, -0.240712627166118160, -0.240761156686737810, +-0.240809685605454540, -0.240858213922147510, -0.240906741636694510, -0.240955268748974660, -0.241003795258866640, -0.241052321166249560, -0.241100846471001220, -0.241149371173000780, +-0.241197895272126930, -0.241246418768258750, -0.241294941661274100, -0.241343463951052110, -0.241391985637471880, -0.241440506720411260, -0.241489027199749350, -0.241537547075364900, +-0.241586066347137000, -0.241634585014943500, -0.241683103078663560, -0.241731620538175850, -0.241780137393359520, -0.241828653644092400, -0.241877169290253660, -0.241925684331721990, +-0.241974198768376560, -0.242022712600095170, -0.242071225826757020, -0.242119738448240810, -0.242168250464425670, -0.242216761875189480, -0.242265272680411370, -0.242313782879970100, +-0.242362292473744800, -0.242410801461613340, -0.242459309843454870, -0.242507817619148550, -0.242556324788572280, -0.242604831351605180, -0.242653337308125990, -0.242701842658013920, +-0.242750347401146790, -0.242798851537403800, -0.242847355066663660, -0.242895857988805590, -0.242944360303707420, -0.242992862011248370, -0.243041363111307170, -0.243089863603762970, +-0.243138363488493690, -0.243186862765378510, -0.243235361434296170, -0.243283859495125850, -0.243332356947745470, -0.243380853792034170, -0.243429350027870750, -0.243477845655134390, +-0.243526340673702960, -0.243574835083455700, -0.243623328884271790, -0.243671822076029110, -0.243720314658606880, -0.243768806631883880, -0.243817297995739280, -0.243865788750050990, +-0.243914278894698240, -0.243962768429559800, -0.244011257354514870, -0.244059745669441360, -0.244108233374218500, -0.244156720468725050, -0.244205206952840200, -0.244253692826441940, +-0.244302178089409430, -0.244350662741621930, -0.244399146782957290, -0.244447630213294830, -0.244496113032513280, -0.244544595240491880, -0.244593076837108570, -0.244641557822242560, +-0.244690038195772650, -0.244738517957578060, -0.244786997107536760, -0.244835475645527990, -0.244883953571430500, -0.244932430885123560, -0.244980907586485140, -0.245029383675394420, +-0.245077859151730250, -0.245126334015371870, -0.245174808266197230, -0.245223281904085540, -0.245271754928915680, -0.245320227340566850, -0.245368699138917010, -0.245417170323845440, +-0.245465640895231370, -0.245514110852952770, -0.245562580196888870, -0.245611048926918540, -0.245659517042921020, -0.245707984544774270, -0.245756451432357550, -0.245804917705549740, +-0.245853383364230020, -0.245901848408276450, -0.245950312837568240, -0.245998776651984250, -0.246047239851403730, -0.246095702435704690, -0.246144164404766410, -0.246192625758467700, +-0.246241086496687880, -0.246289546619304880, -0.246338006126198050, -0.246386465017246180, -0.246434923292328580, -0.246483380951323240, -0.246531837994109470, -0.246580294420566530, +-0.246628750230572400, -0.246677205424006420, -0.246725660000747420, -0.246774113960674670, -0.246822567303666250, -0.246871020029601370, -0.246919472138358960, -0.246967923629818310, +-0.247016374503857410, -0.247064824760355600, -0.247113274399191700, -0.247161723420245030, -0.247210171823393670, -0.247258619608516830, -0.247307066775493910, -0.247355513324202860, +-0.247403959254523050, -0.247452404566333330, -0.247500849259512600, -0.247549293333940180, -0.247597736789494090, -0.247646179626053680, -0.247694621843498250, -0.247743063441705800, +-0.247791504420555720, -0.247839944779926880, -0.247888384519698610, -0.247936823639748920, -0.247985262139957200, -0.248033700020202750, -0.248082137280363600, -0.248130573920319120, +-0.248179009939948210, -0.248227445339129770, -0.248275880117743150, -0.248324314275666400, -0.248372747812778880, -0.248421180728959880, -0.248469613024087540, -0.248518044698041150, +-0.248566475750699650, -0.248614906181942400, -0.248663335991647440, -0.248711765179694150, -0.248760193745961420, -0.248808621690328660, -0.248857049012673910, -0.248905475712876550, +-0.248953901790815500, -0.249002327246370110, -0.249050752079418490, -0.249099176289839960, -0.249147599877513950, -0.249196022842318510, -0.249244445184133000, -0.249292866902836360, +-0.249341287998307570, -0.249389708470425990, -0.249438128319069720, -0.249486547544118110, -0.249534966145450590, -0.249583384122945200, -0.249631801476481370, -0.249680218205938030, +-0.249728634311194550, -0.249777049792129090, -0.249825464648620960, -0.249873878880549210, -0.249922292487793190, -0.249970705470230980, -0.250019117827742050, -0.250067529560205280, +-0.250115940667500150, -0.250164351149504690, -0.250212761006098410, -0.250261170237160660, -0.250309578842569490, -0.250357986822204450, -0.250406394175944400, -0.250454800903668340, +-0.250503207005255750, -0.250551612480584720, -0.250600017329534630, -0.250648421551984910, -0.250696825147813720, -0.250745228116900480, -0.250793630459124170, -0.250842032174364240, +-0.250890433262498770, -0.250938833723407200, -0.250987233556969000, -0.251035632763062290, -0.251084031341566480, -0.251132429292360630, -0.251180826615323650, -0.251229223310335090, +-0.251277619377273000, -0.251326014816016910, -0.251374409626446140, -0.251422803808438950, -0.251471197361874790, -0.251519590286632570, -0.251567982582591830, -0.251616374249630740, +-0.251664765287628660, -0.251713155696464690, -0.251761545476018260, -0.251809934626167580, -0.251858323146792020, -0.251906711037770630, -0.251955098298982940, -0.252003484930307050, +-0.252051870931622460, -0.252100256302808580, -0.252148641043743680, -0.252197025154307140, -0.252245408634378050, -0.252293791483835460, -0.252342173702558790, -0.252390555290426310, +-0.252438936247317390, -0.252487316573111580, -0.252535696267687020, -0.252584075330923250, -0.252632453762699270, -0.252680831562894610, -0.252729208731387430, -0.252777585268057270, +-0.252825961172783110, -0.252874336445444440, -0.252922711085919520, -0.252971085094087830, -0.253019458469828480, -0.253067831213020840, -0.253116203323543230, -0.253164574801275080, +-0.253212945646095980, -0.253261315857884030, -0.253309685436518830, -0.253358054381879360, -0.253406422693845220, -0.253454790372294620, -0.253503157417106990, -0.253551523828161480, +-0.253599889605337640, -0.253648254748513600, -0.253696619257568920, -0.253744983132382750, -0.253793346372834520, -0.253841708978802430, -0.253890070950166140, -0.253938432286805070, +-0.253986792988597500, -0.254035153055422960, -0.254083512487160550, -0.254131871283689300, -0.254180229444888880, -0.254228586970637380, -0.254276943860814450, -0.254325300115299640, +-0.254373655733971080, -0.254422010716708390, -0.254470365063390660, -0.254518718773897480, -0.254567071848107060, -0.254615424285899010, -0.254663776087152350, -0.254712127251746630, +-0.254760477779560230, -0.254808827670472640, -0.254857176924362940, -0.254905525541110790, -0.254953873520594340, -0.255002220862693200, -0.255050567567286950, -0.255098913634253910, +-0.255147259063473520, -0.255195603854824980, -0.255243948008187450, -0.255292291523440520, -0.255340634400462340, -0.255388976639132630, -0.255437318239330910, -0.255485659200935470, +-0.255533999523825880, -0.255582339207881260, -0.255630678252981250, -0.255679016659004110, -0.255727354425829450, -0.255775691553336350, -0.255824028041404530, -0.255872363889912140, +-0.255920699098738880, -0.255969033667763860, -0.256017367596866660, -0.256065700885925620, -0.256114033534820370, -0.256162365543430410, -0.256210696911634170, -0.256259027639311130, +-0.256307357726340560, -0.256355687172601990, -0.256404015977973800, -0.256452344142335530, -0.256500671665566450, -0.256548998547546090, -0.256597324788152840, -0.256645650387266220, +-0.256693975344765510, -0.256742299660530300, -0.256790623334438920, -0.256838946366370950, -0.256887268756206040, -0.256935590503822590, -0.256983911609100110, -0.257032232071917830, +-0.257080551892155010, -0.257128871069691230, -0.257177189604404830, -0.257225507496175450, -0.257273824744882810, -0.257322141350405100, -0.257370457312622040, -0.257418772631412830, +-0.257467087306657180, -0.257515401338233310, -0.257563714726020960, -0.257612027469899360, -0.257660339569748100, -0.257708651025445550, -0.257756961836871360, -0.257805272003904800, +-0.257853581526425460, -0.257901890404311770, -0.257950198637443340, -0.257998506225699810, -0.258046813168959610, -0.258095119467102400, -0.258143425120007370, -0.258191730127553750, +-0.258240034489621300, -0.258288338206088260, -0.258336641276834420, -0.258384943701739420, -0.258433245480681580, -0.258481546613540670, -0.258529847100195890, -0.258578146940526890, +-0.258626446134412100, -0.258674744681731240, -0.258723042582363500, -0.258771339836188550, -0.258819636443084870, -0.258867932402932040, -0.258916227715609400, -0.258964522380996650, +-0.259012816398972170, -0.259061109769415600, -0.259109402492206710, -0.259157694567223870, -0.259205985994346800, -0.259254276773454810, -0.259302566904427490, -0.259350856387143340, +-0.259399145221482110, -0.259447433407322960, -0.259495720944545650, -0.259544007833028610, -0.259592294072651550, -0.259640579663293790, -0.259688864604834980, -0.259737148897153600, +-0.259785432540129370, -0.259833715533641930, -0.259881997877569830, -0.259930279571792660, -0.259978560616189850, -0.260026841010640610, -0.260075120755024700, -0.260123399849220560, +-0.260171678293107940, -0.260219956086566560, -0.260268233229474840, -0.260316509721712550, -0.260364785563158950, -0.260413060753693860, -0.260461335293195650, -0.260509609181544140, +-0.260557882418618600, -0.260606155004298790, -0.260654426938463140, -0.260702698220991400, -0.260750968851762970, -0.260799238830657530, -0.260847508157553530, -0.260895776832330780, +-0.260944044854869050, -0.260992312225046710, -0.261040578942743630, -0.261088845007839130, -0.261137110420212480, -0.261185375179743500, -0.261233639286310660, -0.261281902739793680, +-0.261330165540072430, -0.261378427687025290, -0.261426689180532080, -0.261474950020472160, -0.261523210206725310, -0.261571469739170000, -0.261619728617686010, -0.261667986842152700, +-0.261716244412449890, -0.261764501328455970, -0.261812757590050850, -0.261861013197113800, -0.261909268149524700, -0.261957522447161920, -0.262005776089905380, -0.262054029077634810, +-0.262102281410228790, -0.262150533087567030, -0.262198784109528900, -0.262247034475994290, -0.262295284186841670, -0.262343533241950810, -0.262391781641201140, -0.262440029384472420, +-0.262488276471643240, -0.262536522902593330, -0.262584768677202100, -0.262633013795349420, -0.262681258256913740, -0.262729502061774920, -0.262777745209812790, -0.262825987700905870, +-0.262874229534934000, -0.262922470711776550, -0.262970711231312880, -0.263018951093422880, -0.263067190297985090, -0.263115428844879320, -0.263163666733985390, -0.263211903965181850, +-0.263260140538348620, -0.263308376453364970, -0.263356611710110820, -0.263404846308464720, -0.263453080248306550, -0.263501313529515610, -0.263549546151971850, -0.263597778115553790, +-0.263646009420141270, -0.263694240065613760, -0.263742470051851030, -0.263790699378731730, -0.263838928046135680, -0.263887156053942750, -0.263935383402031490, -0.263983610090281760, +-0.264031836118573000, -0.264080061486784650, -0.264128286194796610, -0.264176510242487390, -0.264224733629736920, -0.264272956356425060, -0.264321178422430300, -0.264369399827632690, +-0.264417620571911540, -0.264465840655146780, -0.264514060077216950, -0.264562278838001990, -0.264610496937381760, -0.264658714375234860, -0.264706931151441170, -0.264755147265880180, +-0.264803362718431300, -0.264851577508974480, -0.264899791637388250, -0.264948005103552540, -0.264996217907347230, -0.265044430048650970, -0.265092641527343630, -0.265140852343304700, +-0.265189062496414050, -0.265237271986550340, -0.265285480813593430, -0.265333688977422820, -0.265381896477918430, -0.265430103314958870, -0.265478309488423990, -0.265526514998193410, +-0.265574719844146930, -0.265622924026163280, -0.265671127544122250, -0.265719330397903850, -0.265767532587386720, -0.265815734112450740, -0.265863934972975450, -0.265912135168840270, +-0.265960334699925250, -0.266008533566108930, -0.266056731767271240, -0.266104929303292210, -0.266153126174050400, -0.266201322379425730, -0.266249517919297850, -0.266297712793546530, +-0.266345907002050520, -0.266394100544689760, -0.266442293421343730, -0.266490485631892370, -0.266538677176214430, -0.266586868054189740, -0.266635058265697940, -0.266683247810618860, +-0.266731436688831260, -0.266779624900215060, -0.266827812444650260, -0.266875999322015440, -0.266924185532190660, -0.266972371075055450, -0.267020555950489680, -0.267068740158372120, +-0.267116923698582700, -0.267165106571000950, -0.267213288775506930, -0.267261470311979220, -0.267309651180297810, -0.267357831380342300, -0.267406010911992620, -0.267454189775127530, +-0.267502367969626900, -0.267550545495370830, -0.267598722352237970, -0.267646898540108260, -0.267695074058861340, -0.267743248908376750, -0.267791423088534430, -0.267839596599213140, +-0.267887769440292860, -0.267935941611653570, -0.267984113113173990, -0.268032283944734160, -0.268080454106213560, -0.268128623597492340, -0.268176792418449050, -0.268224960568963830, +-0.268273128048916230, -0.268321294858186180, -0.268369460996652490, -0.268417626464195150, -0.268465791260693750, -0.268513955386028290, -0.268562118840077520, -0.268610281622721440, +-0.268658443733840120, -0.268706605173312240, -0.268754765941017830, -0.268802926036836530, -0.268851085460647900, -0.268899244212331970, -0.268947402291767500, -0.268995559698834540, +-0.269043716433413130, -0.269091872495381970, -0.269140027884621160, -0.269188182601010240, -0.269236336644429360, -0.269284490014757130, -0.269332642711873740, -0.269380794735658680, +-0.269428946085992100, -0.269477096762752720, -0.269525246765820630, -0.269573396095075360, -0.269621544750397070, -0.269669692731664470, -0.269717840038757650, -0.269765986671556660, +-0.269814132629940310, -0.269862277913788580, -0.269910422522981140, -0.269958566457398130, -0.270006709716918260, -0.270054852301421570, -0.270102994210787820, -0.270151135444896940, +-0.270199276003627810, -0.270247415886860520, -0.270295555094474670, -0.270343693626350360, -0.270391831482366400, -0.270439968662402890, -0.270488105166339870, -0.270536240994056100, +-0.270584376145431790, -0.270632510620346490, -0.270680644418679950, -0.270728777540312220, -0.270776909985122160, -0.270825041752989770, -0.270873172843795200, -0.270921303257417310, +-0.270969432993736100, -0.271017562052631390, -0.271065690433983150, -0.271113818137670270, -0.271161945163572840, -0.271210071511570560, -0.271258197181543480, -0.271306322173370530, +-0.271354446486931740, -0.271402570122106890, -0.271450693078776010, -0.271498815356817970, -0.271546936956112870, -0.271595057876540870, -0.271643178117980830, -0.271691297680312800, +-0.271739416563416550, -0.271787534767171770, -0.271835652291458560, -0.271883769136155810, -0.271931885301143590, -0.271980000786302130, -0.272028115591510240, -0.272076229716648020, +-0.272124343161595280, -0.272172455926232070, -0.272220568010437310, -0.272268679414091110, -0.272316790137073270, -0.272364900179263850, -0.272413009540541710, -0.272461118220787110, +-0.272509226219879660, -0.272557333537699620, -0.272605440174125800, -0.272653546129038360, -0.272701651402317500, -0.272749755993842050, -0.272797859903492260, -0.272845963131147780, +-0.272894065676688890, -0.272942167539994340, -0.272990268720944400, -0.273038369219418760, -0.273086469035297650, -0.273134568168459930, -0.273182666618785820, -0.273230764386155010, +-0.273278861470447720, -0.273326957871542870, -0.273375053589320570, -0.273423148623661130, -0.273471242974443360, -0.273519336641547480, -0.273567429624853250, -0.273615521924240490, +-0.273663613539589290, -0.273711704470778690, -0.273759794717688800, -0.273807884280199860, -0.273855973158190770, -0.273904061351541770, -0.273952148860132580, -0.274000235683843460, +-0.274048321822553340, -0.274096407276142370, -0.274144492044490430, -0.274192576127477660, -0.274240659524983050, -0.274288742236886760, -0.274336824263068660, -0.274384905603408890, +-0.274432986257786450, -0.274481066226081540, -0.274529145508174370, -0.274577224103943920, -0.274625302013270400, -0.274673379236033630, -0.274721455772113430, -0.274769531621390010, +-0.274817606783742340, -0.274865681259050640, -0.274913755047195170, -0.274961828148054870, -0.275009900561510030, -0.275057972287440390, -0.275106043325726300, -0.275154113676246650, +-0.275202183338881750, -0.275250252313511360, -0.275298320600015740, -0.275346388198273890, -0.275394455108166130, -0.275442521329572200, -0.275490586862372380, -0.275538651706445700, +-0.275586715861672380, -0.275634779327932680, -0.275682842105105630, -0.275730904193071450, -0.275778965591710000, -0.275827026300901610, -0.275875086320525150, -0.275923145650461050, +-0.275971204290589080, -0.276019262240789490, -0.276067319500941320, -0.276115376070924900, -0.276163431950619990, -0.276211487139906950, -0.276259541638664730, -0.276307595446773690, +-0.276355648564114100, -0.276403700990564940, -0.276451752726006530, -0.276499803770318740, -0.276547854123381450, -0.276595903785074930, -0.276643952755278260, -0.276692001033871650, +-0.276740048620735530, -0.276788095515748790, -0.276836141718791890, -0.276884187229744560, -0.276932232048487270, -0.276980276174898900, -0.277028319608859870, -0.277076362350250070, +-0.277124404398949750, -0.277172445754838010, -0.277220486417795120, -0.277268526387701050, -0.277316565664436080, -0.277364604247879290, -0.277412642137910950, -0.277460679334411490, +-0.277508715837259830, -0.277556751646336420, -0.277604786761521170, -0.277652821182693910, -0.277700854909735010, -0.277748887942523560, -0.277796920280939890, -0.277844951924864360, +-0.277892982874176020, -0.277941013128755240, -0.277989042688481900, -0.278037071553236370, -0.278085099722897740, -0.278133127197346400, -0.278181153976462650, -0.278229180060125540, +-0.278277205448215550, -0.278325230140612500, -0.278373254137196380, -0.278421277437847560, -0.278469300042445130, -0.278517321950869420, -0.278565343163000860, -0.278613363678718530, +-0.278661383497902760, -0.278709402620433530, -0.278757421046191220, -0.278805438775054980, -0.278853455806905070, -0.278901472141621590, -0.278949487779084790, -0.278997502719173900, +-0.279045516961769210, -0.279093530506750790, -0.279141543353998880, -0.279189555503392750, -0.279237566954812720, -0.279285577708139220, -0.279333587763251290, -0.279381597120029410, +-0.279429605778353570, -0.279477613738103700, -0.279525620999160230, -0.279573627561402250, -0.279621633424710250, -0.279669638588964540, -0.279717643054044340, -0.279765646819830020, +-0.279813649886201610, -0.279861652253039440, -0.279909653920222770, -0.279957654887631970, -0.280005655155146970, -0.280053654722648320, -0.280101653590015100, -0.280149651757127690, +-0.280197649223866200, -0.280245645990111040, -0.280293642055741310, -0.280341637420637450, -0.280389632084679930, -0.280437626047747910, -0.280485619309721880, -0.280533611870481760, +-0.280581603729907590, -0.280629594887879860, -0.280677585344277670, -0.280725575098981550, -0.280773564151871930, -0.280821552502827980, -0.280869540151730160, -0.280917527098458460, +-0.280965513342893380, -0.281013498884914060, -0.281061483724401040, -0.281109467861234700, -0.281157451295294290, -0.281205434026460200, -0.281253416054612570, -0.281301397379631450, +-0.281349378001397200, -0.281397357919789090, -0.281445337134687560, -0.281493315645973130, -0.281541293453525020, -0.281589270557223600, -0.281637246956949080, -0.281685222652581830, +-0.281733197644001120, -0.281781171931087430, -0.281829145513720740, -0.281877118391781700, -0.281925090565149360, -0.281973062033704310, -0.282021032797326650, -0.282069002855896810, +-0.282116972209294050, -0.282164940857398850, -0.282212908800091700, -0.282260876037251860, -0.282308842568759880, -0.282356808394495730, -0.282404773514339570, -0.282452737928171940, +-0.282500701635871990, -0.282548664637320310, -0.282596626932397400, -0.282644588520982510, -0.282692549402956130, -0.282740509578198350, -0.282788469046589770, -0.282836427808009610, +-0.282884385862338330, -0.282932343209456090, -0.282980299849243440, -0.283028255781579590, -0.283076211006345110, -0.283124165523420070, -0.283172119332685100, -0.283220072434019370, +-0.283268024827303510, -0.283315976512417970, -0.283363927489242050, -0.283411877757656310, -0.283459827317540940, -0.283507776168776370, -0.283555724311241930, -0.283603671744818210, +-0.283651618469385300, -0.283699564484823750, -0.283747509791012880, -0.283795454387833270, -0.283843398275164970, -0.283891341452888630, -0.283939283920883470, -0.283987225679030120, +-0.284035166727209190, -0.284083107065299880, -0.284131046693182790, -0.284178985610738070, -0.284226923817845870, -0.284274861314386840, -0.284322798100240190, -0.284370734175286580, +-0.284418669539406530, -0.284466604192479430, -0.284514538134385760, -0.284562471365005790, -0.284610403884220040, -0.284658335691907850, -0.284706266787949860, -0.284754197172226160, +-0.284802126844617420, -0.284850055805002940, -0.284897984053263280, -0.284945911589278680, -0.284993838412929750, -0.285041764524095800, -0.285089689922657430, -0.285137614608495240, +-0.285185538581488600, -0.285233461841518100, -0.285281384388463950, -0.285329306222206370, -0.285377227342625940, -0.285425147749601980, -0.285473067443015200, -0.285520986422746150, +-0.285568904688674190, -0.285616822240680020, -0.285664739078643760, -0.285712655202446100, -0.285760570611966360, -0.285808485307085190, -0.285856399287682810, -0.285904312553639850, +-0.285952225104835700, -0.286000136941150950, -0.286048048062465920, -0.286095958468661150, -0.286143868159616070, -0.286191777135211320, -0.286239685395327570, -0.286287592939844130, +-0.286335499768641750, -0.286383405881600610, -0.286431311278601390, -0.286479215959523470, -0.286527119924247510, -0.286575023172653710, -0.286622925704622830, -0.286670827520034140, +-0.286718728618768460, -0.286766629000705930, -0.286814528665727260, -0.286862427613711830, -0.286910325844540350, -0.286958223358093460, -0.287006120154250590, -0.287054016232892390, +-0.287101911593899200, -0.287149806237151200, -0.287197700162529160, -0.287245593369912400, -0.287293485859181690, -0.287341377630217610, -0.287389268682899710, -0.287437159017108650, +-0.287485048632724730, -0.287532937529628550, -0.287580825707699610, -0.287628713166818650, -0.287676599906865840, -0.287724485927721980, -0.287772371229266520, -0.287820255811380100, +-0.287868139673943040, -0.287916022816836090, -0.287963905239938590, -0.288011786943131400, -0.288059667926295120, -0.288107548189309230, -0.288155427732054490, -0.288203306554411230, +-0.288251184656259650, -0.288299062037480570, -0.288346938697953360, -0.288394814637558840, -0.288442689856177710, -0.288490564353689420, -0.288538438129974710, -0.288586311184913900, +-0.288634183518387770, -0.288682055130275730, -0.288729926020458550, -0.288777796188816550, -0.288825665635230490, -0.288873534359579850, -0.288921402361745410, -0.288969269641607410, +-0.289017136199046680, -0.289065002033942700, -0.289112867146176180, -0.289160731535627940, -0.289208595202177450, -0.289256458145705440, -0.289304320366092330, -0.289352181863218820, +-0.289400042636964390, -0.289447902687209930, -0.289495762013835700, -0.289543620616722450, -0.289591478495749730, -0.289639335650798360, -0.289687192081748590, -0.289735047788481300, +-0.289782902770875980, -0.289830757028813390, -0.289878610562174290, -0.289926463370838270, -0.289974315454686100, -0.290022166813598160, -0.290070017447454750, -0.290117867356136760, +-0.290165716539523670, -0.290213564997496290, -0.290261412729935440, -0.290309259736720620, -0.290357106017732620, -0.290404951572851900, -0.290452796401959200, -0.290500640504934070, +-0.290548483881657380, -0.290596326532009450, -0.290644168455871150, -0.290692009653121970, -0.290739850123642780, -0.290787689867314010, -0.290835528884016370, -0.290883367173629560, +-0.290931204736034290, -0.290979041571111430, -0.291026877678740530, -0.291074713058802450, -0.291122547711177570, -0.291170381635746320, -0.291218214832389580, -0.291266047300986870, +-0.291313879041419030, -0.291361710053566920, -0.291409540337310090, -0.291457369892529410, -0.291505198719105350, -0.291553026816918690, -0.291600854185849020, -0.291648680825777220, +-0.291696506736584150, -0.291744331918149410, -0.291792156370353830, -0.291839980093077880, -0.291887803086201940, -0.291935625349606930, -0.291983446883172400, -0.292031267686779280, +-0.292079087760308440, -0.292126907103639420, -0.292174725716653150, -0.292222543599230110, -0.292270360751251070, -0.292318177172595730, -0.292365992863144910, -0.292413807822779150, +-0.292461622051379320, -0.292509435548824970, -0.292557248314997020, -0.292605060349775960, -0.292652871653042710, -0.292700682224676820, -0.292748492064559220, -0.292796301172570830, +-0.292844109548591250, -0.292891917192501410, -0.292939724104181790, -0.292987530283512820, -0.293035335730375490, -0.293083140444649340, -0.293130944426215400, -0.293178747674954500, +-0.293226550190746280, -0.293274351973471740, -0.293322153023011290, -0.293369953339245870, -0.293417752922055190, -0.293465551771320050, -0.293513349886921070, -0.293561147268739160, +-0.293608943916653930, -0.293656739830546350, -0.293704535010296920, -0.293752329455786610, -0.293800123166895020, -0.293847916143503090, -0.293895708385491840, -0.293943499892740880, +-0.293991290665131190, -0.294039080702543250, -0.294086870004857610, -0.294134658571955250, -0.294182446403715770, -0.294230233500020200, -0.294278019860749470, -0.294325805485783240, +-0.294373590375002550, -0.294421374528287870, -0.294469157945520140, -0.294516940626579130, -0.294564722571345750, -0.294612503779701000, -0.294660284251524520, -0.294708063986697410, +-0.294755842985100100, -0.294803621246613130, -0.294851398771117600, -0.294899175558493150, -0.294946951608620720, -0.294994726921381340, -0.295042501496654790, -0.295090275334321920, +-0.295138048434263330, -0.295185820796360130, -0.295233592420491910, -0.295281363306539700, -0.295329133454384110, -0.295376902863906050, -0.295424671534985360, -0.295472439467503010, +-0.295520206661339550, -0.295567973116375950, -0.295615738832492040, -0.295663503809568740, -0.295711268047487150, -0.295759031546126930, -0.295806794305369160, -0.295854556325094390, +-0.295902317605183260, -0.295950078145516720, -0.295997837945974560, -0.296045597006437840, -0.296093355326787540, -0.296141112906903430, -0.296188869746666530, -0.296236625845957450, +-0.296284381204657220, -0.296332135822645610, -0.296379889699803670, -0.296427642836012030, -0.296475395231151680, -0.296523146885102450, -0.296570897797745310, -0.296618647968960980, +-0.296666397398630380, -0.296714146086633430, -0.296761894032851080, -0.296809641237164410, -0.296857387699453250, -0.296905133419598620, -0.296952878397481130, -0.297000622632981880, +-0.297048366125980620, -0.297096108876358460, -0.297143850883996030, -0.297191592148774440, -0.297239332670573400, -0.297287072449274050, -0.297334811484756990, -0.297382549776903370, +-0.297430287325592900, -0.297478024130706730, -0.297525760192125950, -0.297573495509730330, -0.297621230083400970, -0.297668963913018500, -0.297716696998463700, -0.297764429339617500, +-0.297812160936359870, -0.297859891788571810, -0.297907621896134400, -0.297955351258927580, -0.298003079876832330, -0.298050807749729420, -0.298098534877499880, -0.298146261260023640, +-0.298193986897181680, -0.298241711788854780, -0.298289435934924020, -0.298337159335269280, -0.298384881989771590, -0.298432603898311720, -0.298480325060770770, -0.298528045477028550, +-0.298575765146966270, -0.298623484070464960, -0.298671202247404510, -0.298718919677666060, -0.298766636361130320, -0.298814352297678000, -0.298862067487190240, -0.298909781929546870, +-0.298957495624629030, -0.299005208572317880, -0.299052920772493290, -0.299100632225036410, -0.299148342929827950, -0.299196052886749000, -0.299243762095679540, -0.299291470556500680, +-0.299339178269093120, -0.299386885233338060, -0.299434591449115380, -0.299482296916306180, -0.299530001634791270, -0.299577705604451740, -0.299625408825167580, -0.299673111296819840, +-0.299720813019289770, -0.299768513992457300, -0.299816214216203470, -0.299863913690409100, -0.299911612414955400, -0.299959310389722230, -0.300007007614590810, -0.300054704089441850, +-0.300102399814156600, -0.300150094788614870, -0.300197789012697950, -0.300245482486286520, -0.300293175209261800, -0.300340867181503710, -0.300388558402893470, -0.300436248873312270, +-0.300483938592640050, -0.300531627560757960, -0.300579315777546760, -0.300627003242887330, -0.300674689956660800, -0.300722375918747060, -0.300770061129027490, -0.300817745587383110, +-0.300865429293693980, -0.300913112247841230, -0.300960794449705750, -0.301008475899168680, -0.301056156596110010, -0.301103836540410950, -0.301151515731952310, -0.301199194170615250, +-0.301246871856279850, -0.301294548788827220, -0.301342224968138230, -0.301389900394094130, -0.301437575066574810, -0.301485248985461580, -0.301532922150635650, -0.301580594561977000, +-0.301628266219366890, -0.301675937122686030, -0.301723607271815410, -0.301771276666636170, -0.301818945307028300, -0.301866613192873060, -0.301914280324051710, -0.301961946700444240, +-0.302009612321931910, -0.302057277188395590, -0.302104941299716430, -0.302152604655774540, -0.302200267256451100, -0.302247929101627070, -0.302295590191183570, -0.302343250525000660, +-0.302390910102959650, -0.302438568924941420, -0.302486226990827110, -0.302533884300496820, -0.302581540853831880, -0.302629196650713470, -0.302676851691021650, -0.302724505974637680, +-0.302772159501442430, -0.302819812271317270, -0.302867464284142130, -0.302915115539798270, -0.302962766038166690, -0.303010415779128630, -0.303058064762564080, -0.303105712988354370, +-0.303153360456380360, -0.303201007166523370, -0.303248653118663450, -0.303296298312681900, -0.303343942748460050, -0.303391586425877880, -0.303439229344816760, -0.303486871505157570, +-0.303534512906781240, -0.303582153549569020, -0.303629793433400960, -0.303677432558158430, -0.303725070923722750, -0.303772708529974010, -0.303820345376793480, -0.303867981464062020, +-0.303915616791661130, -0.303963251359470720, -0.304010885167372180, -0.304058518215246430, -0.304106150502974790, -0.304153782030437360, -0.304201412797515500, -0.304249042804090100, +-0.304296672050042520, -0.304344300535252850, -0.304391928259602370, -0.304439555222972560, -0.304487181425243390, -0.304534806866296300, -0.304582431546012170, -0.304630055464271960, +-0.304677678620957070, -0.304725301015947530, -0.304772922649124760, -0.304820543520370080, -0.304868163629563590, -0.304915782976586780, -0.304963401561320460, -0.305011019383646050, +-0.305058636443443660, -0.305106252740594720, -0.305153868274980530, -0.305201483046481260, -0.305249097054978320, -0.305296710300352600, -0.305344322782485080, -0.305391934501257230, +-0.305439545456549110, -0.305487155648242080, -0.305534765076217630, -0.305582373740355850, -0.305629981640538120, -0.305677588776645410, -0.305725195148559170, -0.305772800756159540, +-0.305820405599327880, -0.305868009677945250, -0.305915612991892960, -0.305963215541051270, -0.306010817325301500, -0.306058418344524740, -0.306106018598602310, -0.306153618087414430, +-0.306201216810842450, -0.306248814768767920, -0.306296411961070880, -0.306344008387632870, -0.306391604048334760, -0.306439198943057710, -0.306486793071683080, -0.306534386434091030, +-0.306581979030162990, -0.306629570859780430, -0.306677161922823570, -0.306724752219173780, -0.306772341748712100, -0.306819930511319950, -0.306867518506877600, -0.306915105735266420, +-0.306962692196367510, -0.307010277890062300, -0.307057862816230930, -0.307105446974754950, -0.307153030365515330, -0.307200612988393570, -0.307248194843269820, -0.307295775930025610, +-0.307343356248542420, -0.307390935798700360, -0.307438514580380960, -0.307486092593465320, -0.307533669837834420, -0.307581246313369750, -0.307628822019951560, -0.307676396957461300, +-0.307723971125780480, -0.307771544524789330, -0.307819117154369270, -0.307866689014401450, -0.307914260104767360, -0.307961830425347140, -0.308009399976022390, -0.308056968756674540, +-0.308104536767183860, -0.308152104007431820, -0.308199670477299510, -0.308247236176668050, -0.308294801105418960, -0.308342365263432390, -0.308389928650589900, -0.308437491266773060, +-0.308485053111862030, -0.308532614185738350, -0.308580174488283180, -0.308627734019377930, -0.308675292778902990, -0.308722850766739780, -0.308770407982769500, -0.308817964426873590, +-0.308865520098932310, -0.308913074998827250, -0.308960629126439510, -0.309008182481650630, -0.309055735064340860, -0.309103286874391760, -0.309150837911684850, -0.309198388176100460, +-0.309245937667520070, -0.309293486385824820, -0.309341034330895880, -0.309388581502614780, -0.309436127900861780, -0.309483673525518480, -0.309531218376466410, -0.309578762453585900, +-0.309626305756758420, -0.309673848285865250, -0.309721390040787860, -0.309768931021406570, -0.309816471227602920, -0.309864010659258120, -0.309911549316253700, -0.309959087198469980, +-0.310006624305788570, -0.310054160638090600, -0.310101696195257630, -0.310149230977170010, -0.310196764983709290, -0.310244298214757130, -0.310291830670193720, -0.310339362349900780, +-0.310386893253759450, -0.310434423381651340, -0.310481952733456690, -0.310529481309057160, -0.310577009108333970, -0.310624536131168640, -0.310672062377441550, -0.310719587847034300, +-0.310767112539828080, -0.310814636455704560, -0.310862159594543940, -0.310909681956227980, -0.310957203540638220, -0.311004724347655030, -0.311052244377160000, -0.311099763629034410, +-0.311147282103159390, -0.311194799799416610, -0.311242316717686370, -0.311289832857850330, -0.311337348219790140, -0.311384862803386180, -0.311432376608520080, -0.311479889635073000, +-0.311527401882926660, -0.311574913351961360, -0.311622424042058750, -0.311669933953100110, -0.311717443084967070, -0.311764951437540020, -0.311812459010700540, -0.311859965804329900, +-0.311907471818309800, -0.311954977052520620, -0.312002481506843950, -0.312049985181161560, -0.312097488075353760, -0.312144990189302200, -0.312192491522888190, -0.312239992075992960, +-0.312287491848498190, -0.312334990840284210, -0.312382489051232840, -0.312429986481225610, -0.312477483130143010, -0.312524978997866690, -0.312572474084277910, -0.312619968389258370, +-0.312667461912688520, -0.312714954654449980, -0.312762446614424090, -0.312809937792492440, -0.312857428188535570, -0.312904917802435180, -0.312952406634072420, -0.312999894683329060, +-0.313047381950085580, -0.313094868434223630, -0.313142354135624970, -0.313189839054169970, -0.313237323189740350, -0.313284806542217460, -0.313332289111482980, -0.313379770897417310, +-0.313427251899902230, -0.313474732118819040, -0.313522211554049410, -0.313569690205473870, -0.313617168072974070, -0.313664645156431390, -0.313712121455727470, -0.313759596970742850, +-0.313807071701359240, -0.313854545647458400, -0.313902018808920710, -0.313949491185628040, -0.313996962777461590, -0.314044433584302730, -0.314091903606033230, -0.314139372842533570, +-0.314186841293685460, -0.314234308959370660, -0.314281775839469700, -0.314329241933864250, -0.314376707242435720, -0.314424171765065820, -0.314471635501635090, -0.314519098452025300, +-0.314566560616117710, -0.314614021993794180, -0.314661482584935150, -0.314708942389422430, -0.314756401407137340, -0.314803859637961700, -0.314851317081775940, -0.314898773738461920, +-0.314946229607901420, -0.314993684689974850, -0.315041138984564100, -0.315088592491550520, -0.315136045210815450, -0.315183497142240700, -0.315230948285706750, -0.315278398641095470, +-0.315325848208288570, -0.315373296987166650, -0.315420744977611520, -0.315468192179504450, -0.315515638592727410, -0.315563084217160780, -0.315610529052686490, -0.315657973099185860, +-0.315705416356540700, -0.315752858824631610, -0.315800300503340350, -0.315847741392548340, -0.315895181492137410, -0.315942620801988090, -0.315990059321982260, -0.316037497052001680, +-0.316084933991926890, -0.316132370141639810, -0.316179805501021820, -0.316227240069954670, -0.316274673848319090, -0.316322106835996760, -0.316369539032869180, -0.316416970438818170, +-0.316464401053724310, -0.316511830877469480, -0.316559259909935050, -0.316606688151002900, -0.316654115600553570, -0.316701542258469030, -0.316748968124630990, -0.316796393198920110, +-0.316843817481218260, -0.316891240971406860, -0.316938663669367400, -0.316986085574981650, -0.317033506688130300, -0.317080927008695170, -0.317128346536558140, -0.317175765271599800, +-0.317223183213702080, -0.317270600362746400, -0.317318016718614650, -0.317365432281187410, -0.317412847050346610, -0.317460261025973690, -0.317507674207950510, -0.317555086596157720, +-0.317602498190477260, -0.317649908990790540, -0.317697318996979450, -0.317744728208924630, -0.317792136626508070, -0.317839544249611530, -0.317886951078115710, -0.317934357111902490, +-0.317981762350853400, -0.318029166794849940, -0.318076570443773910, -0.318123973297506080, -0.318171375355928320, -0.318218776618922510, -0.318266177086369400, -0.318313576758150810, +-0.318360975634148220, -0.318408373714243690, -0.318455770998317790, -0.318503167486252460, -0.318550563177929180, -0.318597958073229990, -0.318645352172035430, -0.318692745474227490, +-0.318740137979687700, -0.318787529688297930, -0.318834920599939010, -0.318882310714492690, -0.318929700031841070, -0.318977088551864800, -0.319024476274445800, -0.319071863199465570, +-0.319119249326806130, -0.319166634656348150, -0.319214019187973540, -0.319261402921563910, -0.319308785857001230, -0.319356167994166110, -0.319403549332940630, -0.319450929873206220, +-0.319498309614844930, -0.319545688557737460, -0.319593066701765740, -0.319640444046811800, -0.319687820592756300, -0.319735196339481280, -0.319782571286868270, -0.319829945434798810, +-0.319877318783154900, -0.319924691331817280, -0.319972063080667950, -0.320019434029588880, -0.320066804178460780, -0.320114173527165700, -0.320161542075585170, -0.320208909823601170, +-0.320256276771094530, -0.320303642917947160, -0.320351008264040730, -0.320398372809257150, -0.320445736553477250, -0.320493099496583000, -0.320540461638456010, -0.320587822978978250, +-0.320635183518030550, -0.320682543255494890, -0.320729902191253300, -0.320777260325186500, -0.320824617657176570, -0.320871974187105110, -0.320919329914853670, -0.320966684840304380, +-0.321014038963337910, -0.321061392283836400, -0.321108744801681780, -0.321156096516754860, -0.321203447428937750, -0.321250797538112030, -0.321298146844159690, -0.321345495346961610, +-0.321392843046399760, -0.321440189942356180, -0.321487536034711750, -0.321534881323348510, -0.321582225808148050, -0.321629569488992020, -0.321676912365762460, -0.321724254438340240, +-0.321771595706607350, -0.321818936170445880, -0.321866275829736700, -0.321913614684361800, -0.321960952734202890, -0.322008289979141990, -0.322055626419059940, -0.322102962053838810, +-0.322150296883360330, -0.322197630907506470, -0.322244964126158160, -0.322292296539197440, -0.322339628146505960, -0.322386958947965820, -0.322434288943457880, -0.322481618132864190, +-0.322528946516066890, -0.322576274092946810, -0.322623600863386040, -0.322670926827266280, -0.322718251984469180, -0.322765576334876900, -0.322812899878370250, -0.322860222614831380, +-0.322907544544142330, -0.322954865666183980, -0.323002185980838520, -0.323049505487987550, -0.323096824187513290, -0.323144142079296480, -0.323191459163219340, -0.323238775439163570, +-0.323286090907011270, -0.323333405566643360, -0.323380719417941890, -0.323428032460788660, -0.323475344695065730, -0.323522656120654010, -0.323569966737435710, -0.323617276545292880, +-0.323664585544106430, -0.323711893733758530, -0.323759201114130870, -0.323806507685105600, -0.323853813446563720, -0.323901118398387260, -0.323948422540458030, -0.323995725872658120, +-0.324043028394868540, -0.324090330106971360, -0.324137631008848350, -0.324184931100381660, -0.324232230381452270, -0.324279528851942280, -0.324326826511733890, -0.324374123360707980, +-0.324421419398746800, -0.324468714625732070, -0.324516009041545540, -0.324563302646069420, -0.324610595439184630, -0.324657887420773340, -0.324705178590717740, -0.324752468948898750, +-0.324799758495198650, -0.324847047229499140, -0.324894335151682420, -0.324941622261629430, -0.324988908559222410, -0.325036194044343090, -0.325083478716873710, -0.325130762576695260, +-0.325178045623689850, -0.325225327857739330, -0.325272609278725920, -0.325319889886530600, -0.325367169681035520, -0.325414448662122930, -0.325461726829673840, -0.325509004183570370, +-0.325556280723694410, -0.325603556449927780, -0.325650831362152670, -0.325698105460250020, -0.325745378744102140, -0.325792651213591240, -0.325839922868598310, -0.325887193709005540, +-0.325934463734694810, -0.325981732945548330, -0.326029001341447080, -0.326076268922273320, -0.326123535687908920, -0.326170801638236090, -0.326218066773135810, -0.326265331092490400, +-0.326312594596181670, -0.326359857284091840, -0.326407119156101930, -0.326454380212094280, -0.326501640451951070, -0.326548899875553360, -0.326596158482783390, -0.326643416273523000, +-0.326690673247654500, -0.326737929405058910, -0.326785184745618460, -0.326832439269215120, -0.326879692975731050, -0.326926945865047340, -0.326974197937046240, -0.327021449191609690, +-0.327068699628619900, -0.327115949247957950, -0.327163198049506110, -0.327210446033146750, -0.327257693198760800, -0.327304939546230630, -0.327352185075438170, -0.327399429786265180, +-0.327446673678594040, -0.327493916752305820, -0.327541159007282810, -0.327588400443407310, -0.327635641060560370, -0.327682880858624350, -0.327730119837481130, -0.327777357997013020, +-0.327824595337101120, -0.327871831857627690, -0.327919067558474720, -0.327966302439524520, -0.328013536500658060, -0.328060769741757850, -0.328108002162705640, -0.328155233763383900, +-0.328202464543673630, -0.328249694503457200, -0.328296923642616980, -0.328344151961034000, -0.328391379458590650, -0.328438606135168840, -0.328485831990650510, -0.328533057024918030, +-0.328580281237852550, -0.328627504629336260, -0.328674727199251670, -0.328721948947479860, -0.328769169873903200, -0.328816389978403570, -0.328863609260863390, -0.328910827721163810, +-0.328958045359187100, -0.329005262174815290, -0.329052478167930760, -0.329099693338414660, -0.329146907686149240, -0.329194121211016600, -0.329241333912899060, -0.329288545791677770, +-0.329335756847235150, -0.329382967079453530, -0.329430176488214040, -0.329477385073399130, -0.329524592834890770, -0.329571799772571340, -0.329619005886322040, -0.329666211176025180, +-0.329713415641562760, -0.329760619282817250, -0.329807822099669800, -0.329855024092002790, -0.329902225259698200, -0.329949425602638460, -0.329996625120704710, -0.330043823813779450, +-0.330091021681745030, -0.330138218724482620, -0.330185414941874700, -0.330232610333803240, -0.330279804900150240, -0.330326998640798120, -0.330374191555628140, -0.330421383644522610, +-0.330468574907364090, -0.330515765344033710, -0.330562954954413960, -0.330610143738386760, -0.330657331695834610, -0.330704518826638760, -0.330751705130681580, -0.330798890607845120, +-0.330846075258011910, -0.330893259081063040, -0.330940442076881060, -0.330987624245347940, -0.331034805586346240, -0.331081986099757030, -0.331129165785462920, -0.331176344643346280, +-0.331223522673288360, -0.331270699875171660, -0.331317876248878150, -0.331365051794289990, -0.331412226511289650, -0.331459400399758300, -0.331506573459578460, -0.331553745690632560, +-0.331600917092801930, -0.331648087665968980, -0.331695257410015760, -0.331742426324824920, -0.331789594410277500, -0.331836761666256140, -0.331883928092642890, -0.331931093689320220, +-0.331978258456169410, -0.332025422393072980, -0.332072585499912920, -0.332119747776571880, -0.332166909222931020, -0.332214069838872860, -0.332261229624280010, -0.332308388579033610, +-0.332355546703016260, -0.332402703996110050, -0.332449860458197520, -0.332497016089159880, -0.332544170888879720, -0.332591324857239130, -0.332638477994120660, -0.332685630299405570, +-0.332732781772976380, -0.332779932414715260, -0.332827082224504740, -0.332874231202226030, -0.332921379347761840, -0.332968526660994520, -0.333015673141805520, -0.333062818790077380, +-0.333109963605692120, -0.333157107588531950, -0.333204250738479480, -0.333251393055415960, -0.333298534539223920, -0.333345675189785970, -0.333392815006983420, -0.333439953990698870, +-0.333487092140814400, -0.333534229457212620, -0.333581365939774830, -0.333628501588383640, -0.333675636402921190, -0.333722770383270080, -0.333769903529311630, -0.333817035840928420, +-0.333864167318002610, -0.333911297960416800, -0.333958427768052350, -0.334005556740791800, -0.334052684878517800, -0.334099812181111620, -0.334146938648455960, -0.334194064280432970, +-0.334241189076924790, -0.334288313037814030, -0.334335436162982110, -0.334382558452311570, -0.334429679905685120, -0.334476800522983950, -0.334523920304090840, -0.334571039248887920, +-0.334618157357257860, -0.334665274629081910, -0.334712391064242830, -0.334759506662623160, -0.334806621424104330, -0.334853735348568940, -0.334900848435899180, -0.334947960685977320, +-0.334995072098686010, -0.335042182673906560, -0.335089292411521690, -0.335136401311413980, -0.335183509373464860, -0.335230616597556930, -0.335277722983572500, -0.335324828531394170, +-0.335371933240903360, -0.335419037111982680, -0.335466140144514480, -0.335513242338381260, -0.335560343693464600, -0.335607444209647000, -0.335654543886810870, -0.335701642724838710, +-0.335748740723612100, -0.335795837883013590, -0.335842934202925940, -0.335890029683230510, -0.335937124323810010, -0.335984218124546760, -0.336031311085322910, -0.336078403206021170, +-0.336125494486523070, -0.336172584926711200, -0.336219674526468280, -0.336266763285675730, -0.336313851204216310, -0.336360938281972280, -0.336408024518826290, -0.336455109914659820, +-0.336502194469355590, -0.336549278182795900, -0.336596361054863400, -0.336643443085439530, -0.336690524274407150, -0.336737604621648370, -0.336784684127046040, -0.336831762790481600, +-0.336878840611837760, -0.336925917590997210, -0.336972993727841450, -0.337020069022253180, -0.337067143474114760, -0.337114217083308520, -0.337161289849717110, -0.337208361773222050, +-0.337255432853706130, -0.337302503091051980, -0.337349572485141190, -0.337396641035856480, -0.337443708743080160, -0.337490775606694990, -0.337537841626582460, -0.337584906802625320, +-0.337631971134706390, -0.337679034622707040, -0.337726097266510090, -0.337773159065997970, -0.337820220021052890, -0.337867280131557700, -0.337914339397393900, -0.337961397818444250, +-0.338008455394591510, -0.338055512125717270, -0.338102568011704190, -0.338149623052434680, -0.338196677247791570, -0.338243730597656330, -0.338290783101911800, -0.338337834760440270, +-0.338384885573124570, -0.338431935539846240, -0.338478984660488090, -0.338526032934932440, -0.338573080363062160, -0.338620126944758790, -0.338667172679905040, -0.338714217568383820, +-0.338761261610076640, -0.338808304804866290, -0.338855347152635160, -0.338902388653265660, -0.338949429306640630, -0.338996469112641640, -0.339043508071151410, -0.339090546182052870, +-0.339137583445227540, -0.339184619860558260, -0.339231655427927440, -0.339278690147217840, -0.339325724018311130, -0.339372757041090160, -0.339419789215437250, -0.339466820541235280, +-0.339513851018365840, -0.339560880646711800, -0.339607909426155540, -0.339654937356579920, -0.339701964437866540, -0.339748990669898280, -0.339796016052557880, -0.339843040585727120, +-0.339890064269288690, -0.339937087103125150, -0.339984109087119290, -0.340031130221152720, -0.340078150505108310, -0.340125169938868600, -0.340172188522316340, -0.340219206255333200, +-0.340266223137802030, -0.340313239169605260, -0.340360254350625890, -0.340407268680745390, -0.340454282159846800, -0.340501294787812880, -0.340548306564525280, -0.340595317489866930, +-0.340642327563720320, -0.340689336785967860, -0.340736345156492480, -0.340783352675175840, -0.340830359341900810, -0.340877365156550320, -0.340924370119005950, -0.340971374229150690, +-0.341018377486866970, -0.341065379892037720, -0.341112381444544640, -0.341159382144270550, -0.341206381991098100, -0.341253380984910040, -0.341300379125588080, -0.341347376413015270, +-0.341394372847073910, -0.341441368427647110, -0.341488363154616450, -0.341535357027864920, -0.341582350047275330, -0.341629342212729500, -0.341676333524110310, -0.341723323981300290, +-0.341770313584181970, -0.341817302332638300, -0.341864290226550900, -0.341911277265802840, -0.341958263450276970, -0.342005248779855000, -0.342052233254419910, -0.342099216873854250, +-0.342146199638040990, -0.342193181546861790, -0.342240162600199630, -0.342287142797937090, -0.342334122139957120, -0.342381100626141410, -0.342428078256372950, -0.342475055030534270, +-0.342522030948508360, -0.342569006010176980, -0.342615980215423110, -0.342662953564129680, -0.342709926056178450, -0.342756897691452400, -0.342803868469834130, -0.342850838391206610, +-0.342897807455451560, -0.342944775662451960, -0.342991743012090460, -0.343038709504250030, -0.343085675138812380, -0.343132639915660560, -0.343179603834677100, -0.343226566895745100, +-0.343273529098746260, -0.343320490443563550, -0.343367450930080090, -0.343414410558177560, -0.343461369327739020, -0.343508327238647050, -0.343555284290784250, -0.343602240484033650, +-0.343649195818277020, -0.343696150293397450, -0.343743103909277870, -0.343790056665800150, -0.343837008562847270, -0.343883959600301880, -0.343930909778047020, -0.343977859095964460, +-0.344024807553937220, -0.344071755151847960, -0.344118701889579770, -0.344165647767014420, -0.344212592784034880, -0.344259536940523910, -0.344306480236364510, -0.344353422671438480, +-0.344400364245628920, -0.344447304958818870, -0.344494244810890080, -0.344541183801725710, -0.344588121931208410, -0.344635059199220770, -0.344681995605645940, -0.344728931150365680, +-0.344775865833263080, -0.344822799654221250, -0.344869732613121980, -0.344916664709848390, -0.344963595944283160, -0.345010526316309350, -0.345057455825808770, -0.345104384472664620, +-0.345151312256759430, -0.345198239177976430, -0.345245165236197420, -0.345292090431305490, -0.345339014763183290, -0.345385938231713980, -0.345432860836779430, -0.345479782578262730, +-0.345526703456047020, -0.345573623470014080, -0.345620542620047100, -0.345667460906028790, -0.345714378327842240, -0.345761294885369270, -0.345808210578493090, -0.345855125407096400, +-0.345902039371062340, -0.345948952470272740, -0.345995864704610740, -0.346042776073959110, -0.346089686578200940, -0.346136596217218100, -0.346183504990893840, -0.346230412899111160, +-0.346277319941752090, -0.346324226118699730, -0.346371131429836780, -0.346418035875045990, -0.346464939454210530, -0.346511842167212310, -0.346558744013934490, -0.346605644994260220, +-0.346652545108071420, -0.346699444355251240, -0.346746342735682500, -0.346793240249248290, -0.346840136895830540, -0.346887032675312460, -0.346933927587576800, -0.346980821632506760, +-0.347027714809984230, -0.347074607119892410, -0.347121498562114110, -0.347168389136532420, -0.347215278843029380, -0.347262167681488150, -0.347309055651791930, -0.347355942753822590, +-0.347402828987463440, -0.347449714352597190, -0.347496598849106720, -0.347543482476875110, -0.347590365235784400, -0.347637247125717750, -0.347684128146558410, -0.347731008298188370, +-0.347777887580490770, -0.347824765993348440, -0.347871643536644630, -0.347918520210261320, -0.347965396014081660, -0.348012270947988980, -0.348059145011865190, -0.348106018205593500, +-0.348152890529056790, -0.348199761982137870, -0.348246632564719940, -0.348293502276684990, -0.348340371117916330, -0.348387239088297160, -0.348434106187709420, -0.348480972416036480, +-0.348527837773161100, -0.348574702258966530, -0.348621565873334760, -0.348668428616149110, -0.348715290487292380, -0.348762151486647850, -0.348809011614097500, -0.348855870869524630, +-0.348902729252812070, -0.348949586763843130, -0.348996443402499800, -0.349043299168665330, -0.349090154062223100, -0.349137008083055030, -0.349183861231044390, -0.349230713506074150, +-0.349277564908027140, -0.349324415436786610, -0.349371265092234650, -0.349418113874254480, -0.349464961782729460, -0.349511808817541620, -0.349558654978574300, -0.349605500265710300, +-0.349652344678832990, -0.349699188217824360, -0.349746030882567780, -0.349792872672946120, -0.349839713588842750, -0.349886553630139600, -0.349933392796720090, -0.349980231088467150, +-0.350027068505263990, -0.350073905046992760, -0.350120740713536770, -0.350167575504779340, -0.350214409420602560, -0.350261242460889740, -0.350308074625523820, -0.350354905914387730, +-0.350401736327364770, -0.350448565864337090, -0.350495394525187960, -0.350542222309800760, -0.350589049218057610, -0.350635875249841860, -0.350682700405036350, -0.350729524683524580, +-0.350776348085188540, -0.350823170609911640, -0.350869992257577200, -0.350916813028067380, -0.350963632921265530, -0.351010451937054660, -0.351057270075317560, -0.351104087335937790, +-0.351150903718797310, -0.351197719223779630, -0.351244533850768040, -0.351291347599644700, -0.351338160470292980, -0.351384972462595870, -0.351431783576436730, -0.351478593811697770, +-0.351525403168262250, -0.351572211646013270, -0.351619019244834190, -0.351665825964607100, -0.351712631805215450, -0.351759436766542260, -0.351806240848470900, -0.351853044050883470, +-0.351899846373663450, -0.351946647816694210, -0.351993448379857960, -0.352040248063038130, -0.352087046866117640, -0.352133844788979520, -0.352180641831507210, -0.352227437993582910, +-0.352274233275090000, -0.352321027675911890, -0.352367821195930800, -0.352414613835030200, -0.352461405593093020, -0.352508196470002750, -0.352554986465641600, -0.352601775579892970, +-0.352648563812639930, -0.352695351163765880, -0.352742137633152990, -0.352788923220684780, -0.352835707926244300, -0.352882491749714920, -0.352929274690978960, -0.352976056749919720, +-0.353022837926420810, -0.353069618220364420, -0.353116397631633940, -0.353163176160112450, -0.353209953805683490, -0.353256730568229150, -0.353303506447633030, -0.353350281443778170, +-0.353397055556547990, -0.353443828785824750, -0.353490601131492000, -0.353537372593432650, -0.353584143171530360, -0.353630912865667280, -0.353677681675726880, -0.353724449601592720, +-0.353771216643147040, -0.353817982800273320, -0.353864748072854620, -0.353911512460774010, -0.353958275963915100, -0.354005038582160040, -0.354051800315392410, -0.354098561163495700, +-0.354145321126352160, -0.354192080203845350, -0.354238838395858290, -0.354285595702274580, -0.354332352122976420, -0.354379107657847410, -0.354425862306770640, -0.354472616069629650, +-0.354519368946306700, -0.354566120936685270, -0.354612872040648560, -0.354659622258080120, -0.354706371588862200, -0.354753120032878340, -0.354799867590012090, -0.354846614260145740, +-0.354893360043162910, -0.354940104938946620, -0.354986848947380140, -0.355033592068346890, -0.355080334301729250, -0.355127075647410810, -0.355173816105275040, -0.355220555675204390, +-0.355267294357082260, -0.355314032150791990, -0.355360769056217000, -0.355407505073239650, -0.355454240201743600, -0.355500974441611880, -0.355547707792728210, -0.355594440254974830, +-0.355641171828235350, -0.355687902512392910, -0.355734632307331160, -0.355781361212932410, -0.355828089229080270, -0.355874816355658260, -0.355921542592548880, -0.355968267939635600, +-0.356014992396801620, -0.356061715963930600, -0.356108438640904910, -0.356155160427608090, -0.356201881323923390, -0.356248601329734400, -0.356295320444923460, -0.356342038669374250, +-0.356388756002969930, -0.356435472445594150, -0.356482187997129220, -0.356528902657458900, -0.356575616426466680, -0.356622329304035040, -0.356669041290047560, -0.356715752384387460, +-0.356762462586938000, -0.356809171897582820, -0.356855880316204240, -0.356902587842686030, -0.356949294476911700, -0.356996000218763760, -0.357042705068125800, -0.357089409024881070, +-0.357136112088913270, -0.357182814260104730, -0.357229515538339200, -0.357276215923499840, -0.357322915415470340, -0.357369614014133200, -0.357416311719371990, -0.357463008531069990, +-0.357509704449110900, -0.357556399473377140, -0.357603093603752360, -0.357649786840120280, -0.357696479182363300, -0.357743170630365150, -0.357789861184009070, -0.357836550843178340, +-0.357883239607756640, -0.357929927477626420, -0.357976614452671370, -0.358023300532775200, -0.358069985717820390, -0.358116670007690600, -0.358163353402269120, -0.358210035901439680, +-0.358256717505084750, -0.358303398213088040, -0.358350078025332810, -0.358396756941702810, -0.358443434962080480, -0.358490112086349570, -0.358536788314393400, -0.358583463646095670, +-0.358630138081338870, -0.358676811620006700, -0.358723484261982920, -0.358770156007150070, -0.358816826855391740, -0.358863496806591410, -0.358910165860632730, -0.358956834017398200, +-0.359003501276771610, -0.359050167638636290, -0.359096833102875930, -0.359143497669373090, -0.359190161338011520, -0.359236824108674520, -0.359283485981245880, -0.359330146955608110, +-0.359376807031644980, -0.359423466209240210, -0.359470124488276420, -0.359516781868637280, -0.359563438350206210, -0.359610093932866530, -0.359656748616501990, -0.359703402400995240, +-0.359750055286229940, -0.359796707272089900, -0.359843358358457710, -0.359890008545217130, -0.359936657832251540, -0.359983306219444690, -0.360029953706679170, -0.360076600293838760, +-0.360123245980806860, -0.360169890767467250, -0.360216534653702460, -0.360263177639396410, -0.360309819724432380, -0.360356460908694220, -0.360403101192064480, -0.360449740574426970, +-0.360496379055665560, -0.360543016635662790, -0.360589653314302430, -0.360636289091468000, -0.360682923967042820, -0.360729557940910720, -0.360776191012954330, -0.360822823183057470, +-0.360869454451103970, -0.360916084816976460, -0.360962714280558650, -0.361009342841734140, -0.361055970500386620, -0.361102597256398760, -0.361149223109654470, -0.361195848060037460, +-0.361242472107430490, -0.361289095251717260, -0.361335717492781370, -0.361382338830506130, -0.361428959264775470, -0.361475578795472040, -0.361522197422479600, -0.361568815145682120, +-0.361615431964962210, -0.361662047880203670, -0.361708662891290060, -0.361755276998105170, -0.361801890200531660, -0.361848502498453460, -0.361895113891753990, -0.361941724380317130, +-0.361988333964025580, -0.362034942642763150, -0.362081550416413430, -0.362128157284860200, -0.362174763247986140, -0.362221368305675250, -0.362267972457811280, -0.362314575704277000, +-0.362361178044956270, -0.362407779479732630, -0.362454380008489510, -0.362500979631110830, -0.362547578347479300, -0.362594176157478850, -0.362640773060993350, -0.362687369057905550, +-0.362733964148099270, -0.362780558331458110, -0.362827151607865940, -0.362873743977205510, -0.362920335439360700, -0.362966925994215090, -0.363013515641652520, -0.363060104381555780, +-0.363106692213808810, -0.363153279138295040, -0.363199865154898550, -0.363246450263501940, -0.363293034463989200, -0.363339617756244350, -0.363386200140150000, -0.363432781615590120, +-0.363479362182448310, -0.363525941840608100, -0.363572520589953490, -0.363619098430367100, -0.363665675361733000, -0.363712251383935090, -0.363758826496856150, -0.363805400700380200, +-0.363851973994390680, -0.363898546378771670, -0.363945117853405890, -0.363991688418177250, -0.364038258072969860, -0.364084826817666410, -0.364131394652150890, -0.364177961576306890, +-0.364224527590018000, -0.364271092693168150, -0.364317656885640220, -0.364364220167318060, -0.364410782538085840, -0.364457343997826260, -0.364503904546423290, -0.364550464183760530, +-0.364597022909722070, -0.364643580724190560, -0.364690137627050210, -0.364736693618184450, -0.364783248697477360, -0.364829802864811760, -0.364876356120071690, -0.364922908463140680, +-0.364969459893902840, -0.365016010412240910, -0.365062560018038940, -0.365109108711181020, -0.365155656491549910, -0.365202203359029640, -0.365248749313503870, -0.365295294354856250, +-0.365341838482970750, -0.365388381697730300, -0.365434923999018890, -0.365481465386720550, -0.365528005860718150, -0.365574545420895740, -0.365621084067137000, -0.365667621799325880, +-0.365714158617345350, -0.365760694521079450, -0.365807229510411780, -0.365853763585226420, -0.365900296745406250, -0.365946828990835360, -0.365993360321397400, -0.366039890736976460, +-0.366086420237455360, -0.366132948822718180, -0.366179476492649090, -0.366226003247130890, -0.366272529086047680, -0.366319054009283110, -0.366365578016721370, -0.366412101108245240, +-0.366458623283738900, -0.366505144543085970, -0.366551664886170580, -0.366598184312875610, -0.366644702823085200, -0.366691220416683060, -0.366737737093553230, -0.366784252853578690, +-0.366830767696643470, -0.366877281622631780, -0.366923794631426440, -0.366970306722911640, -0.367016817896971050, -0.367063328153488470, -0.367109837492347930, -0.367156345913432380, +-0.367202853416626010, -0.367249360001812910, -0.367295865668875950, -0.367342370417699350, -0.367388874248166850, -0.367435377160162560, -0.367481879153569450, -0.367528380228271560, +-0.367574880384152760, -0.367621379621097200, -0.367667877938987750, -0.367714375337708620, -0.367760871817143560, -0.367807367377176730, -0.367853862017691050, -0.367900355738570720, +-0.367946848539699890, -0.367993340420961550, -0.368039831382239890, -0.368086321423418570, -0.368132810544381520, -0.368179298745012820, -0.368225786025195510, -0.368272272384813690, +-0.368318757823751620, -0.368365242341892220, -0.368411725939119750, -0.368458208615317920, -0.368504690370371040, -0.368551171204161980, -0.368597651116575000, -0.368644130107493860, +-0.368690608176802880, -0.368737085324384930, -0.368783561550124260, -0.368830036853904700, -0.368876511235610440, -0.368922984695124470, -0.368969457232331100, -0.369015928847114480, +-0.369062399539357600, -0.369108869308944710, -0.369155338155759680, -0.369201806079686720, -0.369248273080608810, -0.369294739158410270, -0.369341204312974790, -0.369387668544186810, +-0.369434131851929190, -0.369480594236086260, -0.369527055696541820, -0.369573516233180190, -0.369619975845884300, -0.369666434534538510, -0.369712892299027040, -0.369759349139232920, +-0.369805805055040460, -0.369852260046333480, -0.369898714112995800, -0.369945167254911830, -0.369991619471964460, -0.370038070764038050, -0.370084521131016920, -0.370130970572784050, +-0.370177419089223750, -0.370223866680219890, -0.370270313345656740, -0.370316759085417500, -0.370363203899386260, -0.370409647787447060, -0.370456090749484160, -0.370502532785380590, +-0.370548973895020730, -0.370595414078288390, -0.370641853335067940, -0.370688291665242480, -0.370734729068696260, -0.370781165545313650, -0.370827601094977700, -0.370874035717572710, +-0.370920469412982680, -0.370966902181091460, -0.371013334021783440, -0.371059764934941580, -0.371106194920450380, -0.371152623978194100, -0.371199052108055820, -0.371245479309919910, +-0.371291905583670310, -0.371338330929191380, -0.371384755346366220, -0.371431178835079150, -0.371477601395214130, -0.371524023026655490, -0.371570443729286440, -0.371616863502991220, +-0.371663282347653890, -0.371709700263158750, -0.371756117249388950, -0.371802533306228870, -0.371848948433562810, -0.371895362631274040, -0.371941775899246820, -0.371988188237365180, +-0.372034599645513440, -0.372081010123574860, -0.372127419671433700, -0.372173828288974000, -0.372220235976080170, -0.372266642732635320, -0.372313048558523870, -0.372359453453629750, +-0.372405857417837490, -0.372452260451030140, -0.372498662553092110, -0.372545063723907890, -0.372591463963360570, -0.372637863271334580, -0.372684261647713900, -0.372730659092382620, +-0.372777055605225120, -0.372823451186124530, -0.372869845834965300, -0.372916239551631890, -0.372962632336007460, -0.373009024187976490, -0.373055415107422910, -0.373101805094231240, +-0.373148194148284600, -0.373194582269467500, -0.373240969457664000, -0.373287355712758400, -0.373333741034634070, -0.373380125423175340, -0.373426508878266280, -0.373472891399791400, +-0.373519272987633880, -0.373565653641678150, -0.373612033361808700, -0.373658412147908790, -0.373704789999862840, -0.373751166917554890, -0.373797542900869030, -0.373843917949689740, +-0.373890292063900230, -0.373936665243385040, -0.373983037488028520, -0.374029408797714070, -0.374075779172326040, -0.374122148611748580, -0.374168517115866130, -0.374214884684562040, +-0.374261251317720700, -0.374307617015226250, -0.374353981776963110, -0.374400345602814650, -0.374446708492665370, -0.374493070446399230, -0.374539431463900900, -0.374585791545053560, +-0.374632150689741710, -0.374678508897849930, -0.374724866169261430, -0.374771222503860800, -0.374817577901532140, -0.374863932362159870, -0.374910285885627410, -0.374956638471819200, +-0.375002990120619440, -0.375049340831912600, -0.375095690605581960, -0.375142039441512140, -0.375188387339587200, -0.375234734299691730, -0.375281080321708980, -0.375327425405523550, +-0.375373769551019980, -0.375420112758081510, -0.375466455026592820, -0.375512796356437970, -0.375559136747501130, -0.375605476199666890, -0.375651814712818500, -0.375698152286840610, +-0.375744488921617710, -0.375790824617033230, -0.375837159372971630, -0.375883493189317190, -0.375929826065954380, -0.375976158002766630, -0.376022488999638470, -0.376068819056454060, +-0.376115148173098050, -0.376161476349453740, -0.376207803585405790, -0.376254129880838280, -0.376300455235635880, -0.376346779649681880, -0.376393103122861010, -0.376439425655057720, +-0.376485747246155520, -0.376532067896038880, -0.376578387604592110, -0.376624706371699370, -0.376671024197245300, -0.376717341081113210, -0.376763657023187810, -0.376809972023353700, +-0.376856286081494190, -0.376902599197493970, -0.376948911371237260, -0.376995222602608700, -0.377041532891491670, -0.377087842237770810, -0.377134150641330770, -0.377180458102054920, +-0.377226764619827900, -0.377273070194533990, -0.377319374826057430, -0.377365678514282820, -0.377411981259093590, -0.377458283060374430, -0.377504583918009950, -0.377550883831883620, +-0.377597182801880090, -0.377643480827883570, -0.377689777909778810, -0.377736074047449130, -0.377782369240779290, -0.377828663489653550, -0.377874956793956550, -0.377921249153571730, +-0.377967540568383830, -0.378013831038277020, -0.378060120563136090, -0.378106409142844440, -0.378152696777286750, -0.378198983466347730, -0.378245269209910860, -0.378291554007860800, +-0.378337837860081850, -0.378384120766458330, -0.378430402726874890, -0.378476683741215070, -0.378522963809363510, -0.378569242931204970, -0.378615521106622890, -0.378661798335502060, +-0.378708074617726650, -0.378754349953181520, -0.378800624341750100, -0.378846897783317090, -0.378893170277766870, -0.378939441824984120, -0.378985712424852350, -0.379031982077256360, +-0.379078250782080350, -0.379124518539209140, -0.379170785348526220, -0.379217051209916330, -0.379263316123264250, -0.379309580088453450, -0.379355843105368680, -0.379402105173894330, +-0.379448366293915100, -0.379494626465314570, -0.379540885687977450, -0.379587143961788160, -0.379633401286631370, -0.379679657662390700, -0.379725913088950870, -0.379772167566196250, +-0.379818421094011650, -0.379864673672280610, -0.379910925300887830, -0.379957175979718180, -0.380003425708655140, -0.380049674487583590, -0.380095922316387780, -0.380142169194952250, +-0.380188415123161650, -0.380234660100899620, -0.380280904128050930, -0.380327147204500390, -0.380373389330131590, -0.380419630504829350, -0.380465870728477980, -0.380512110000962360, +-0.380558348322166060, -0.380604585691973860, -0.380650822110270240, -0.380697057576939950, -0.380743292091866580, -0.380789525654935010, -0.380835758266029610, -0.380881989925035250, +-0.380928220631835510, -0.380974450386315220, -0.381020679188359190, -0.381066907037851070, -0.381113133934675660, -0.381159359878717410, -0.381205584869860780, -0.381251808907990600, +-0.381298031992990500, -0.381344254124745260, -0.381390475303139850, -0.381436695528057870, -0.381482914799384070, -0.381529133117003040, -0.381575350480799600, -0.381621566890657290, +-0.381667782346461150, -0.381713996848095540, -0.381760210395445330, -0.381806422988394180, -0.381852634626826950, -0.381898845310628180, -0.381945055039682680, -0.381991263813874160, +-0.382037471633087430, -0.382083678497207480, -0.382129884406117950, -0.382176089359703650, -0.382222293357849130, -0.382268496400439310, -0.382314698487357830, -0.382360899618489570, +-0.382407099793719120, -0.382453299012931290, -0.382499497276009850, -0.382545694582839600, -0.382591890933305150, -0.382638086327291400, -0.382684280764682030, -0.382730474245361940, +-0.382776666769216070, -0.382822858336128110, -0.382869048945983000, -0.382915238598665280, -0.382961427294059460, -0.383007615032050500, -0.383053801812522080, -0.383099987635359180, +-0.383146172500446690, -0.383192356407668360, -0.383238539356909160, -0.383284721348053580, -0.383330902380986660, -0.383377082455592040, -0.383423261571754710, -0.383469439729359210, +-0.383515616928290560, -0.383561793168432420, -0.383607968449669820, -0.383654142771887310, -0.383700316134969850, -0.383746488538801170, -0.383792659983266280, -0.383838830468250130, +-0.383884999993636510, -0.383931168559310420, -0.383977336165156390, -0.384023502811058960, -0.384069668496903270, -0.384115833222572980, -0.384161996987953060, -0.384208159792928610, +-0.384254321637383320, -0.384300482521202250, -0.384346642444269910, -0.384392801406471470, -0.384438959407690570, -0.384485116447812250, -0.384531272526721150, -0.384577427644302310, +-0.384623581800439480, -0.384669734995017660, -0.384715887227921550, -0.384762038499036120, -0.384808188808245130, -0.384854338155433740, -0.384900486540486860, -0.384946633963288430, +-0.384992780423723370, -0.385038925921676320, -0.385085070457032440, -0.385131214029675430, -0.385177356639490380, -0.385223498286361930, -0.385269638970175190, -0.385315778690813900, +-0.385361917448163170, -0.385408055242107640, -0.385454192072532400, -0.385500327939321320, -0.385546462842359330, -0.385592596781531630, -0.385638729756722030, -0.385684861767815630, +-0.385730992814697030, -0.385777122897250970, -0.385823252015362550, -0.385869380168915530, -0.385915507357795060, -0.385961633581886290, -0.386007758841072970, -0.386053883135240310, +-0.386100006464272890, -0.386146128828055880, -0.386192250226473130, -0.386238370659409750, -0.386284490126750480, -0.386330608628380370, -0.386376726164183340, -0.386422842734044480, +-0.386468958337848500, -0.386515072975480540, -0.386561186646824540, -0.386607299351765520, -0.386653411090188690, -0.386699521861977870, -0.386745631667018310, -0.386791740505194660, +-0.386837848376391620, -0.386883955280494410, -0.386930061217386880, -0.386976166186954180, -0.387022270189081530, -0.387068373223652730, -0.387114475290553040, -0.387160576389667170, +-0.387206676520880260, -0.387252775684076230, -0.387298873879140250, -0.387344971105957110, -0.387391067364411980, -0.387437162654388710, -0.387483256975772570, -0.387529350328448260, +-0.387575442712301040, -0.387621534127214780, -0.387667624573074630, -0.387713714049765900, -0.387759802557172460, -0.387805890095179460, -0.387851976663671830, -0.387898062262534590, +-0.387944146891651800, -0.387990230550908640, -0.388036313240189950, -0.388082394959380850, -0.388128475708365340, -0.388174555487028670, -0.388220634295255610, -0.388266712132931350, +-0.388312788999939930, -0.388358864896166500, -0.388404939821496320, -0.388451013775813430, -0.388497086759002960, -0.388543158770949800, -0.388589229811538710, -0.388635299880654980, +-0.388681368978182620, -0.388727437104006810, -0.388773504258012770, -0.388819570440084640, -0.388865635650107510, -0.388911699887966370, -0.388957763153546350, -0.389003825446731510, +-0.389049886767407090, -0.389095947115457970, -0.389142006490769410, -0.389188064893225380, -0.389234122322711210, -0.389280178779111750, -0.389326234262312280, -0.389372288772196760, +-0.389418342308650520, -0.389464394871558870, -0.389510446460805790, -0.389556497076276600, -0.389602546717856160, -0.389648595385429400, -0.389694643078881520, -0.389740689798096620, +-0.389786735542960010, -0.389832780313357000, -0.389878824109171570, -0.389924866930289100, -0.389970908776594460, -0.390016949647973010, -0.390062989544308740, -0.390109028465486950, +-0.390155066411393080, -0.390201103381911050, -0.390247139376926340, -0.390293174396323720, -0.390339208439988210, -0.390385241507805070, -0.390431273599658460, -0.390477304715433570, +-0.390523334855015890, -0.390569364018289460, -0.390615392205139630, -0.390661419415451290, -0.390707445649109860, -0.390753470905999380, -0.390799495186005210, -0.390845518489012280, +-0.390891540814906010, -0.390937562163570450, -0.390983582534891020, -0.391029601928752580, -0.391075620345040620, -0.391121637783639120, -0.391167654244433560, -0.391213669727309310, +-0.391259684232150410, -0.391305697758842330, -0.391351710307270010, -0.391397721877318420, -0.391443732468872930, -0.391489742081817690, -0.391535750716038080, -0.391581758371419510, +-0.391627765047846190, -0.391673770745203380, -0.391719775463376220, -0.391765779202249980, -0.391811781961708900, -0.391857783741638320, -0.391903784541923320, -0.391949784362449320, +-0.391995783203100360, -0.392041781063761970, -0.392087777944319150, -0.392133773844657310, -0.392179768764660600, -0.392225762704214440, -0.392271755663204320, -0.392317747641514390, +-0.392363738639030070, -0.392409728655636450, -0.392455717691218450, -0.392501705745661620, -0.392547692818850100, -0.392593678910669320, -0.392639664021004810, -0.392685648149740660, +-0.392731631296762470, -0.392777613461955170, -0.392823594645204220, -0.392869574846393840, -0.392915554065409620, -0.392961532302136870, -0.393007509556459860, -0.393053485828264100, +-0.393099461117434660, -0.393145435423856550, -0.393191408747415210, -0.393237381087995000, -0.393283352445481290, -0.393329322819759630, -0.393375292210714270, -0.393421260618230680, +-0.393467228042193920, -0.393513194482489500, -0.393559159939001700, -0.393605124411615990, -0.393651087900217470, -0.393697050404691610, -0.393743011924922730, -0.393788972460796360, +-0.393834932012197490, -0.393880890579011770, -0.393926848161123390, -0.393972804758417890, -0.394018760370780760, -0.394064714998096370, -0.394110668640250130, -0.394156621297127250, +-0.394202572968612830, -0.394248523654592400, -0.394294473354950210, -0.394340422069571870, -0.394386369798342850, -0.394432316541147520, -0.394478262297871420, -0.394524207068399630, +-0.394570150852617760, -0.394616093650410060, -0.394662035461662180, -0.394707976286259200, -0.394753916124086670, -0.394799854975028900, -0.394845792838971590, -0.394891729715799720, +-0.394937665605398950, -0.394983600507653630, -0.395029534422449310, -0.395075467349671530, -0.395121399289204700, -0.395167330240934370, -0.395213260204745680, -0.395259189180524270, +-0.395305117168154470, -0.395351044167521930, -0.395396970178511720, -0.395442895201009500, -0.395488819234899700, -0.395534742280067800, -0.395580664336399050, -0.395626585403779040, +-0.395672505482092150, -0.395718424571224030, -0.395764342671060200, -0.395810259781485150, -0.395856175902384420, -0.395902091033643270, -0.395948005175146890, -0.395993918326780940, +-0.396039830488429720, -0.396085741659979010, -0.396131651841314270, -0.396177561032320050, -0.396223469232881880, -0.396269376442885070, -0.396315282662215220, -0.396361187890756750, +-0.396407092128395310, -0.396452995375016160, -0.396498897630504940, -0.396544798894746030, -0.396590699167625130, -0.396636598449027490, -0.396682496738838760, -0.396728394036943380, +-0.396774290343227030, -0.396820185657575320, -0.396866079979872780, -0.396911973310005000, -0.396957865647857340, -0.397003756993314970, -0.397049647346263630, -0.397095536706587760, +-0.397141425074173100, -0.397187312448905210, -0.397233198830668650, -0.397279084219349150, -0.397324968614831910, -0.397370852017002620, -0.397416734425745820, -0.397462615840947160, +-0.397508496262492020, -0.397554375690265970, -0.397600254124153620, -0.397646131564040610, -0.397692008009812300, -0.397737883461354360, -0.397783757918551310, -0.397829631381288850, +-0.397875503849452750, -0.397921375322927480, -0.397967245801598760, -0.398013115285351940, -0.398058983774072670, -0.398104851267645610, -0.398150717765956400, -0.398196583268890400, +-0.398242447776333330, -0.398288311288169770, -0.398334173804285370, -0.398380035324565620, -0.398425895848896150, -0.398471755377161510, -0.398517613909247500, -0.398563471445039840, +-0.398609327984423110, -0.398655183527283070, -0.398701038073505100, -0.398746891622974500, -0.398792744175577090, -0.398838595731197400, -0.398884446289721200, -0.398930295851034340, +-0.398976144415021330, -0.399021991981567900, -0.399067838550559550, -0.399113684121881970, -0.399159528695419820, -0.399205372271058790, -0.399251214848684370, -0.399297056428182310, +-0.399342897009437200, -0.399388736592334870, -0.399434575176760680, -0.399480412762600430, -0.399526249349738790, -0.399572084938061510, -0.399617919527454400, -0.399663753117802110, +-0.399709585708990460, -0.399755417300904800, -0.399801247893430630, -0.399847077486453760, -0.399892906079858720, -0.399938733673531500, -0.399984560267357790, -0.400030385861222300, +-0.400076210455010850, -0.400122034048608850, -0.400167856641902190, -0.400213678234775490, -0.400259498827114590, -0.400305318418804900, -0.400351137009732350, -0.400396954599781580, +-0.400442771188838420, -0.400488586776788280, -0.400534401363517150, -0.400580214948909550, -0.400626027532851430, -0.400671839115228630, -0.400717649695925880, -0.400763459274828980, +-0.400809267851823410, -0.400855075426795100, -0.400900881999628700, -0.400946687570210070, -0.400992492138424750, -0.401038295704158610, -0.401084098267296300, -0.401129899827723730, +-0.401175700385326460, -0.401221499939990290, -0.401267298491600030, -0.401313096040041450, -0.401358892585200580, -0.401404688126962060, -0.401450482665211830, -0.401496276199835410, +-0.401542068730718240, -0.401587860257746340, -0.401633650780804430, -0.401679440299778310, -0.401725228814554080, -0.401771016325016330, -0.401816802831051030, -0.401862588332543740, +-0.401908372829380360, -0.401954156321445650, -0.401999938808625560, -0.402045720290805600, -0.402091500767871760, -0.402137280239708790, -0.402183058706202580, -0.402228836167238760, +-0.402274612622703250, -0.402320388072480770, -0.402366162516457350, -0.402411935954518910, -0.402457708386550210, -0.402503479812437280, -0.402549250232065610, -0.402595019645320850, +-0.402640788052088970, -0.402686555452254680, -0.402732321845703960, -0.402778087232322890, -0.402823851611996190, -0.402869614984609880, -0.402915377350049510, -0.402961138708201110, +-0.403006899058949430, -0.403052658402180520, -0.403098416737780410, -0.403144174065633800, -0.403189930385626780, -0.403235685697644900, -0.403281440001573840, -0.403327193297299600, +-0.403372945584706930, -0.403418696863681920, -0.403464447134110560, -0.403510196395877710, -0.403555944648869350, -0.403601691892971130, -0.403647438128069080, -0.403693183354048020, +-0.403738927570793990, -0.403784670778192690, -0.403830412976130090, -0.403876154164491070, -0.403921894343161610, -0.403967633512027470, -0.404013371670974620, -0.404059108819887990, +-0.404104844958653510, -0.404150580087157370, -0.404196314205284400, -0.404242047312920570, -0.404287779409951700, -0.404333510496263320, -0.404379240571741630, -0.404424969636271390, +-0.404470697689738700, -0.404516424732029760, -0.404562150763029260, -0.404607875782623420, -0.404653599790697930, -0.404699322787138770, -0.404745044771830930, -0.404790765744660500, +-0.404836485705513170, -0.404882204654274990, -0.404927922590830880, -0.404973639515066990, -0.405019355426869010, -0.405065070326123040, -0.405110784212713960, -0.405156497086527960, +-0.405202208947451130, -0.405247919795368340, -0.405293629630165740, -0.405339338451729090, -0.405385046259944090, -0.405430753054696890, -0.405476458835872410, -0.405522163603356740, +-0.405567867357036150, -0.405613570096795380, -0.405659271822520760, -0.405704972534097930, -0.405750672231413090, -0.405796370914351170, -0.405842068582798310, -0.405887765236640660, +-0.405933460875763210, -0.405979155500052090, -0.406024849109393130, -0.406070541703672020, -0.406116233282774960, -0.406161923846586890, -0.406207613394994060, -0.406253301927882560, +-0.406298989445137430, -0.406344675946644810, -0.406390361432290510, -0.406436045901960700, -0.406481729355540390, -0.406527411792915740, -0.406573093213972560, -0.406618773618597050, +-0.406664453006674200, -0.406710131378090260, -0.406755808732730930, -0.406801485070482530, -0.406847160391229980, -0.406892834694859540, -0.406938507981257410, -0.406984180250308640, +-0.407029851501899350, -0.407075521735915490, -0.407121190952242810, -0.407166859150767560, -0.407212526331374780, -0.407258192493950620, -0.407303857638381450, -0.407349521764552190, +-0.407395184872349160, -0.407440846961658170, -0.407486508032365410, -0.407532168084356050, -0.407577827117516220, -0.407623485131731800, -0.407669142126889150, -0.407714798102873200, +-0.407760453059570260, -0.407806106996866150, -0.407851759914647230, -0.407897411812798480, -0.407943062691206170, -0.407988712549756660, -0.408034361388334930, -0.408080009206827350, +-0.408125656005119690, -0.408171301783098290, -0.408216946540648270, -0.408262590277655880, -0.408308232994006980, -0.408353874689587950, -0.408399515364283820, -0.408445155017980900, +-0.408490793650565060, -0.408536431261922680, -0.408582067851938790, -0.408627703420499750, -0.408673337967491830, -0.408718971492800180, -0.408764603996311090, -0.408810235477910510, +-0.408855865937484300, -0.408901495374918880, -0.408947123790099290, -0.408992751182911900, -0.409038377553243020, -0.409084002900977790, -0.409129627226002600, -0.409175250528203300, +-0.409220872807466270, -0.409266494063676710, -0.409312114296720870, -0.409357733506484740, -0.409403351692854690, -0.409448968855715860, -0.409494584994954610, -0.409540200110456890, +-0.409585814202109100, -0.409631427269796340, -0.409677039313405040, -0.409722650332821510, -0.409768260327930960, -0.409813869298619790, -0.409859477244773900, -0.409905084166279350, +-0.409950690063022480, -0.409996294934888480, -0.410041898781763780, -0.410087501603534690, -0.410133103400086460, -0.410178704171305470, -0.410224303917077760, -0.410269902637289630, +-0.410315500331826340, -0.410361097000574330, -0.410406692643419610, -0.410452287260248520, -0.410497880850946300, -0.410543473415399370, -0.410589064953493790, -0.410634655465115960, +-0.410680244950151040, -0.410725833408485560, -0.410771420840005840, -0.410817007244597240, -0.410862592622146080, -0.410908176972538450, -0.410953760295660770, -0.410999342591398250, +-0.411044923859637420, -0.411090504100264260, -0.411136083313165260, -0.411181661498225660, -0.411227238655331890, -0.411272814784370060, -0.411318389885226510, -0.411363963957786630, +-0.411409537001936890, -0.411455109017563660, -0.411500680004552260, -0.411546249962789160, -0.411591818892160400, -0.411637386792552130, -0.411682953663850830, -0.411728519505941690, +-0.411774084318711260, -0.411819648102046020, -0.411865210855831280, -0.411910772579953510, -0.411956333274298760, -0.412001892938753670, -0.412047451573203380, -0.412093009177534440, +-0.412138565751633050, -0.412184121295385620, -0.412229675808677480, -0.412275229291395100, -0.412320781743424680, -0.412366333164652770, -0.412411883554964550, -0.412457432914246640, +-0.412502981242385550, -0.412548528539266660, -0.412594074804776390, -0.412639620038800950, -0.412685164241226420, -0.412730707411939460, -0.412776249550825260, -0.412821790657770470, +-0.412867330732661570, -0.412912869775383990, -0.412958407785824210, -0.413003944763868420, -0.413049480709403170, -0.413095015622313820, -0.413140549502486910, -0.413186082349808640, +-0.413231614164165590, -0.413277144945443040, -0.413322674693527680, -0.413368203408305600, -0.413413731089663450, -0.413459257737486600, -0.413504783351661520, -0.413550307932074920, +-0.413595831478612170, -0.413641353991159810, -0.413686875469604090, -0.413732395913831600, -0.413777915323727650, -0.413823433699178960, -0.413868951040071710, -0.413914467346292450, +-0.413959982617726600, -0.414005496854260800, -0.414051010055781320, -0.414096522222174630, -0.414142033353326330, -0.414187543449122840, -0.414233052509450970, -0.414278560534196040, +-0.414324067523244740, -0.414369573476483230, -0.414415078393797760, -0.414460582275075100, -0.414506085120200480, -0.414551586929060690, -0.414597087701542360, -0.414642587437530850, +-0.414688086136912880, -0.414733583799574760, -0.414779080425403010, -0.414824576014283190, -0.414870070566101920, -0.414915564080745480, -0.414961056558100560, -0.415006547998052530, +-0.415052038400488210, -0.415097527765293740, -0.415143016092355880, -0.415188503381560050, -0.415233989632792950, -0.415279474845941350, -0.415324959020890620, -0.415370442157527440, +-0.415415924255738260, -0.415461405315409200, -0.415506885336427050, -0.415552364318677260, -0.415597842262046550, -0.415643319166421670, -0.415688795031688100, -0.415734269857732490, +-0.415779743644441260, -0.415825216391701060, -0.415870688099397420, -0.415916158767417050, -0.415961628395646650, -0.416007096983971870, -0.416052564532279230, -0.416098031040455290, +-0.416143496508386220, -0.416188960935958810, -0.416234424323058570, -0.416279886669572330, -0.416325347975386730, -0.416370808240387360, -0.416416267464460980, -0.416461725647493950, +-0.416507182789372990, -0.416552638889983670, -0.416598093949212770, -0.416643547966946640, -0.416689000943071990, -0.416734452877474460, -0.416779903770040820, -0.416825353620657420, +-0.416870802429211040, -0.416916250195587200, -0.416961696919672780, -0.417007142601354520, -0.417052587240518020, -0.417098030837049990, -0.417143473390836960, -0.417188914901765180, +-0.417234355369721530, -0.417279794794591650, -0.417325233176262190, -0.417370670514620120, -0.417416106809550940, -0.417461542060941490, -0.417506976268678220, -0.417552409432647880, +-0.417597841552736100, -0.417643272628829780, -0.417688702660815200, -0.417734131648579310, -0.417779559592007690, -0.417824986490987150, -0.417870412345404170, -0.417915837155145520, +-0.417961260920096890, -0.418006683640145150, -0.418052105315177060, -0.418097525945078320, -0.418142945529735800, -0.418188364069035870, -0.418233781562865000, -0.418279198011110130, +-0.418324613413656840, -0.418370027770392060, -0.418415441081202600, -0.418460853345974100, -0.418506264564593500, -0.418551674736947210, -0.418597083862922160, -0.418642491942403940, +-0.418687898975279580, -0.418733304961435790, -0.418778709900758380, -0.418824113793134220, -0.418869516638449730, -0.418914918436591450, -0.418960319187446310, -0.419005718890899990, +-0.419051117546839320, -0.419096515155151280, -0.419141911715721520, -0.419187307228437000, -0.419232701693184220, -0.419278095109850090, -0.419323487478320320, -0.419368878798481840, +-0.419414269070221170, -0.419459658293425190, -0.419505046467979700, -0.419550433593771530, -0.419595819670687380, -0.419641204698613990, -0.419686588677437240, -0.419731971607044010, +-0.419777353487321260, -0.419822734318154700, -0.419868114099431310, -0.419913492831037630, -0.419958870512860240, -0.420004247144786070, -0.420049622726700820, -0.420094997258491590, +-0.420140370740045230, -0.420185743171247570, -0.420231114551985530, -0.420276484882145750, -0.420321854161615100, -0.420367222390279460, -0.420412589568025740, -0.420457955694740540, +-0.420503320770310830, -0.420548684794622480, -0.420594047767562370, -0.420639409689017140, -0.420684770558873820, -0.420730130377018170, -0.420775489143337180, -0.420820846857717870, +-0.420866203520046000, -0.420911559130208670, -0.420956913688092460, -0.421002267193584300, -0.421047619646570110, -0.421092971046936880, -0.421138321394571250, -0.421183670689360190, +-0.421229018931189520, -0.421274366119946340, -0.421319712255517230, -0.421365057337789230, -0.421410401366648200, -0.421455744341981190, -0.421501086263675160, -0.421546427131616050, +-0.421591766945690890, -0.421637105705786270, -0.421682443411788950, -0.421727780063585860, -0.421773115661062960, -0.421818450204107240, -0.421863783692605850, -0.421909116126444550, +-0.421954447505510480, -0.421999777829690280, -0.422045107098871000, -0.422090435312938610, -0.422135762471780080, -0.422181088575282190, -0.422226413623331960, -0.422271737615815320, +-0.422317060552619310, -0.422362382433630670, -0.422407703258736440, -0.422453023027822620, -0.422498341740776160, -0.422543659397484280, -0.422588975997832850, -0.422634291541709010, +-0.422679606028999400, -0.422724919459590790, -0.422770231833370260, -0.422815543150223790, -0.422860853410038430, -0.422906162612701360, -0.422951470758098470, -0.422996777846116890, +-0.423042083876643380, -0.423087388849565090, -0.423132692764767890, -0.423177995622138980, -0.423223297421565060, -0.423268598162933330, -0.423313897846129660, -0.423359196471041310, +-0.423404494037554920, -0.423449790545557700, -0.423495085994935570, -0.423540380385575790, -0.423585673717365440, -0.423630965990190460, -0.423676257203938140, -0.423721547358495100, +-0.423766836453748630, -0.423812124489584720, -0.423857411465890400, -0.423902697382552600, -0.423947982239458510, -0.423993266036494010, -0.424038548773546300, -0.424083830450502300, +-0.424129111067249100, -0.424174390623672680, -0.424219669119660300, -0.424264946555099160, -0.424310222929875300, -0.424355498243875810, -0.424400772496987600, -0.424446045689097500, +-0.424491317820092640, -0.424536588889859070, -0.424581858898284090, -0.424627127845254800, -0.424672395730657350, -0.424717662554378870, -0.424762928316306240, -0.424808193016326660, +-0.424853456654326220, -0.424898719230192180, -0.424943980743811290, -0.424989241195070870, -0.425034500583856940, -0.425079758910056780, -0.425125016173557190, -0.425170272374245480, +-0.425215527512007700, -0.425260781586731080, -0.425306034598302910, -0.425351286546609250, -0.425396537431537380, -0.425441787252974160, -0.425487036010806510, -0.425532283704921630, +-0.425577530335205680, -0.425622775901545850, -0.425668020403829510, -0.425713263841942690, -0.425758506215772770, -0.425803747525206560, -0.425848987770131360, -0.425894226950433270, +-0.425939465065999670, -0.425984702116717350, -0.426029938102473750, -0.426075173023154840, -0.426120406878648050, -0.426165639668840190, -0.426210871393618680, -0.426256102052869570, +-0.426301331646480150, -0.426346560174337860, -0.426391787636328790, -0.426437014032340190, -0.426482239362259100, -0.426527463625972820, -0.426572686823367460, -0.426617908954330380, +-0.426663130018748560, -0.426708350016509250, -0.426753568947498720, -0.426798786811604270, -0.426844003608712830, -0.426889219338711770, -0.426934434001487280, -0.426979647596926690, +-0.427024860124917420, -0.427070071585345550, -0.427115281978098500, -0.427160491303063270, -0.427205699560126830, -0.427250906749176540, -0.427296112870098550, -0.427341317922780290, +-0.427386521907109130, -0.427431724822971320, -0.427476926670254110, -0.427522127448844660, -0.427567327158630270, -0.427612525799497160, -0.427657723371332680, -0.427702919874023980, +-0.427748115307458320, -0.427793309671521960, -0.427838502966102370, -0.427883695191086540, -0.427928886346361840, -0.427974076431814510, -0.428019265447331990, -0.428064453392801750, +-0.428109640268109940, -0.428154826073144030, -0.428200010807791080, -0.428245194471938100, -0.428290377065472520, -0.428335558588280600, -0.428380739040249760, -0.428425918421267480, +-0.428471096731220020, -0.428516273969994810, -0.428561450137478930, -0.428606625233559860, -0.428651799258123740, -0.428696972211058180, -0.428742144092250200, -0.428787314901587220, +-0.428832484638955570, -0.428877653304242710, -0.428922820897335690, -0.428967987418122090, -0.429013152866488060, -0.429058317242321130, -0.429103480545508840, -0.429148642775937450, +-0.429193803933494490, -0.429238964018066940, -0.429284123029542440, -0.429329280967807200, -0.429374437832748810, -0.429419593624254250, -0.429464748342211160, -0.429509901986505790, +-0.429555054557025640, -0.429600206053657900, -0.429645356476289990, -0.429690505824808330, -0.429735654099100420, -0.429780801299053720, -0.429825947424554660, -0.429871092475490710, +-0.429916236451749030, -0.429961379353216770, -0.430006521179781440, -0.430051661931329430, -0.430096801607748270, -0.430141940208925490, -0.430187077734747460, -0.430232214185101770, +-0.430277349559875510, -0.430322483858956270, -0.430367617082230420, -0.430412749229585560, -0.430457880300908810, -0.430503010296087730, -0.430548139215008780, -0.430593267057559460, +-0.430638393823626950, -0.430683519513098860, -0.430728644125861590, -0.430773767661802700, -0.430818890120809820, -0.430864011502769260, -0.430909131807568730, -0.430954251035095330, +-0.430999369185236290, -0.431044486257879280, -0.431089602252910600, -0.431134717170217950, -0.431179831009688930, -0.431224943771209900, -0.431270055454668510, -0.431315166059951960, +-0.431360275586947890, -0.431405384035542790, -0.431450491405624190, -0.431495597697079790, -0.431540702909795960, -0.431585807043660400, -0.431630910098560310, -0.431676012074382940, +-0.431721112971015950, -0.431766212788345760, -0.431811311526260070, -0.431856409184646520, -0.431901505763391480, -0.431946601262382710, -0.431991695681507410, -0.432036789020653340, +-0.432081881279706810, -0.432126972458555640, -0.432172062557087010, -0.432217151575188640, -0.432262239512747000, -0.432307326369649750, -0.432352412145784180, -0.432397496841037950, +-0.432442580455297650, -0.432487662988450820, -0.432532744440385310, -0.432577824810987500, -0.432622904100145090, -0.432667982307745500, -0.432713059433675880, -0.432758135477824050, +-0.432803210440076470, -0.432848284320320850, -0.432893357118444950, -0.432938428834335250, -0.432983499467879510, -0.433028569018964970, -0.433073637487479400, -0.433118704873309390, +-0.433163771176342580, -0.433208836396466350, -0.433253900533568440, -0.433298963587535340, -0.433344025558254850, -0.433389086445614360, -0.433434146249501500, -0.433479204969802860, +-0.433524262606406200, -0.433569319159199330, -0.433614374628068730, -0.433659429012902220, -0.433704482313587100, -0.433749534530011190, -0.433794585662061030, -0.433839635709624470, +-0.433884684672588780, -0.433929732550841770, -0.433974779344270030, -0.434019825052761320, -0.434064869676203060, -0.434109913214483060, -0.434154955667487850, -0.434199997035105260, +-0.434245037317223080, -0.434290076513727920, -0.434335114624507520, -0.434380151649449380, -0.434425187588440840, -0.434470222441369740, -0.434515256208122700, -0.434560288888587500, +-0.434605320482651940, -0.434650350990202720, -0.434695380411127650, -0.434740408745314060, -0.434785435992649900, -0.434830462153021740, -0.434875487226317410, -0.434920511212424420, +-0.434965534111230460, -0.435010555922622330, -0.435055576646487810, -0.435100596282714300, -0.435145614831189740, -0.435190632291800720, -0.435235648664435150, -0.435280663948980850, +-0.435325678145324470, -0.435370691253353930, -0.435415703272956640, -0.435460714204020050, -0.435505724046432120, -0.435550732800079500, -0.435595740464850000, -0.435640747040631600, +-0.435685752527310900, -0.435730756924775810, -0.435775760232913870, -0.435820762451612890, -0.435865763580759620, -0.435910763620241950, -0.435955762569947340, -0.436000760429763770, +-0.436045757199577830, -0.436090752879277570, -0.436135747468750390, -0.436180740967884230, -0.436225733376565840, -0.436270724694683140, -0.436315714922124010, -0.436360704058775140, +-0.436405692104524570, -0.436450679059259770, -0.436495664922868620, -0.436540649695237980, -0.436585633376255670, -0.436630615965809320, -0.436675597463786760, -0.436720577870074840, +-0.436765557184561500, -0.436810535407134220, -0.436855512537681070, -0.436900488576088710, -0.436945463522245110, -0.436990437376038270, -0.437035410137354920, -0.437080381806083000, +-0.437125352382110200, -0.437170321865324010, -0.437215290255612400, -0.437260257552862130, -0.437305223756961290, -0.437350188867797750, -0.437395152885258320, -0.437440115809231030, +-0.437485077639603430, -0.437530038376263590, -0.437574998019098220, -0.437619956567995350, -0.437664914022842580, -0.437709870383527930, -0.437754825649938230, -0.437799779821961440, +-0.437844732899485220, -0.437889684882397550, -0.437934635770585280, -0.437979585563936400, -0.438024534262339000, -0.438069481865679840, -0.438114428373846950, -0.438159373786728030, +-0.438204318104210680, -0.438249261326182860, -0.438294203452531560, -0.438339144483144760, -0.438384084417910440, -0.438429023256715570, -0.438473960999448080, -0.438518897645995720, +-0.438563833196246530, -0.438608767650087330, -0.438653701007406250, -0.438698633268090890, -0.438743564432029330, -0.438788494499108510, -0.438833423469216390, -0.438878351342240740, +-0.438923278118069640, -0.438968203796589910, -0.439013128377689690, -0.439058051861257010, -0.439102974247178870, -0.439147895535343220, -0.439192815725637900, -0.439237734817950860, +-0.439282652812169160, -0.439327569708180820, -0.439372485505873490, -0.439417400205135420, -0.439462313805853430, -0.439507226307915610, -0.439552137711209770, -0.439597048015623990, +-0.439641957221045150, -0.439686865327361450, -0.439731772334460980, -0.439776678242230710, -0.439821583050558680, -0.439866486759332760, -0.439911389368440600, -0.439956290877770330, +-0.440001191287208990, -0.440046090596644620, -0.440090988805965480, -0.440135885915058420, -0.440180781923811660, -0.440225676832112940, -0.440270570639850420, -0.440315463346911130, +-0.440360354953183100, -0.440405245458554250, -0.440450134862912620, -0.440495023166145310, -0.440539910368140440, -0.440584796468785790, -0.440629681467969550, -0.440674565365578700, +-0.440719448161501380, -0.440764329855625910, -0.440809210447839220, -0.440854089938029440, -0.440898968326084490, -0.440943845611892150, -0.440988721795340540, -0.441033596876316710, +-0.441078470854708920, -0.441123343730405350, -0.441168215503293050, -0.441213086173260160, -0.441257955740194550, -0.441302824203984480, -0.441347691564516980, -0.441392557821680190, +-0.441437422975362040, -0.441482287025450730, -0.441527149971833290, -0.441572011814397980, -0.441616872553032670, -0.441661732187625560, -0.441706590718063670, -0.441751448144235390, +-0.441796304466028860, -0.441841159683331150, -0.441886013796030540, -0.441930866804014890, -0.441975718707172500, -0.442020569505390370, -0.442065419198556850, -0.442110267786559820, +-0.442155115269287470, -0.442199961646626890, -0.442244806918466460, -0.442289651084694040, -0.442334494145197880, -0.442379336099865070, -0.442424176948583880, -0.442469016691242720, +-0.442513855327728580, -0.442558692857929810, -0.442603529281734300, -0.442648364599029950, -0.442693198809705090, -0.442738031913646910, -0.442782863910743560, -0.442827694800883460, +-0.442872524583953760, -0.442917353259842770, -0.442962180828438360, -0.443007007289628880, -0.443051832643301500, -0.443096656889344580, -0.443141480027645970, -0.443186302058094060, +-0.443231122980575990, -0.443275942794980120, -0.443320761501194430, -0.443365579099107180, -0.443410395588605620, -0.443455210969578070, -0.443500025241912900, -0.443544838405497240, +-0.443589650460219480, -0.443634461405967630, -0.443679271242629570, -0.443724079970093780, -0.443768887588247400, -0.443813694096978790, -0.443858499496176280, -0.443903303785727230, +-0.443948106965519840, -0.443992909035442200, -0.444037709995382720, -0.444082509845228510, -0.444127308584868100, -0.444172106214189790, -0.444216902733080790, -0.444261698141429520, +-0.444306492439124010, -0.444351285626052310, -0.444396077702102770, -0.444440868667162650, -0.444485658521120370, -0.444530447263864310, -0.444575234895281720, -0.444620021415261080, +-0.444664806823690360, -0.444709591120458050, -0.444754374305451390, -0.444799156378558710, -0.444843937339668210, -0.444888717188668240, -0.444933495925446070, -0.444978273549890170, +-0.445023050061888580, -0.445067825461329780, -0.445112599748101020, -0.445157372922090730, -0.445202144983187440, -0.445246915931278350, -0.445291685766252000, -0.445336454487996470, +-0.445381222096399740, -0.445425988591350410, -0.445470753972735670, -0.445515518240444050, -0.445560281394364040, -0.445605043434382900, -0.445649804360389200, -0.445694564172270940, +-0.445739322869916690, -0.445784080453213770, -0.445828836922050610, -0.445873592276315340, -0.445918346515896510, -0.445963099640681430, -0.446007851650558620, -0.446052602545416120, +-0.446097352325142580, -0.446142100989625200, -0.446186848538752570, -0.446231594972413270, -0.446276340290494570, -0.446321084492884990, -0.446365827579472680, -0.446410569550145850, +-0.446455310404792970, -0.446500050143301460, -0.446544788765559750, -0.446589526271456540, -0.446634262660879080, -0.446678997933715960, -0.446723732089855330, -0.446768465129185830, +-0.446813197051594720, -0.446857927856970650, -0.446902657545202090, -0.446947386116176570, -0.446992113569782520, -0.447036839905908200, -0.447081565124441800, -0.447126289225271920, +-0.447171012208285870, -0.447215734073372280, -0.447260454820419760, -0.447305174449315720, -0.447349892959948760, -0.447394610352207070, -0.447439326625979240, -0.447484041781152640, +-0.447528755817616030, -0.447573468735257440, -0.447618180533965630, -0.447662891213627960, -0.447707600774133070, -0.447752309215369180, -0.447797016537224920, -0.447841722739587720, +-0.447886427822346170, -0.447931131785389010, -0.447975834628603580, -0.448020536351878550, -0.448065236955102250, -0.448109936438162770, -0.448154634800948910, -0.448199332043348050, +-0.448244028165248830, -0.448288723166540000, -0.448333417047108940, -0.448378109806844280, -0.448422801445634400, -0.448467491963367940, -0.448512181359932320, -0.448556869635216240, +-0.448601556789107960, -0.448646242821496230, -0.448690927732268490, -0.448735611521313420, -0.448780294188519340, -0.448824975733774890, -0.448869656156967610, -0.448914335457986200, +-0.448959013636719360, -0.449003690693054570, -0.449048366626880580, -0.449093041438085650, -0.449137715126558530, -0.449182387692186710, -0.449227059134858940, -0.449271729454463480, +-0.449316398650889130, -0.449361066724023370, -0.449405733673754970, -0.449450399499972230, -0.449495064202563850, -0.449539727781417490, -0.449584390236421720, -0.449629051567465410, +-0.449673711774436100, -0.449718370857222490, -0.449763028815712950, -0.449807685649795840, -0.449852341359359920, -0.449896995944292720, -0.449941649404483060, -0.449986301739819680, +-0.450030952950190130, -0.450075603035483160, -0.450120251995587250, -0.450164899830391100, -0.450209546539782290, -0.450254192123649590, -0.450298836581881410, -0.450343479914366570, +-0.450388122120992610, -0.450432763201648380, -0.450477403156222200, -0.450522041984602940, -0.450566679686678130, -0.450611316262336690, -0.450655951711467330, -0.450700586033957680, +-0.450745219229696570, -0.450789851298572410, -0.450834482240473620, -0.450879112055289020, -0.450923740742906250, -0.450968368303214130, -0.451012994736101460, -0.451057620041455940, +-0.451102244219166340, -0.451146867269121180, -0.451191489191209220, -0.451236109985318160, -0.451280729651336750, -0.451325348189153600, -0.451369965598657440, -0.451414581879735990, +-0.451459197032278050, -0.451503811056172160, -0.451548423951307120, -0.451593035717570590, -0.451637646354851540, -0.451682255863038730, -0.451726864242019910, -0.451771471491683900, +-0.451816077611919220, -0.451860682602614750, -0.451905286463658130, -0.451949889194938340, -0.451994490796343850, -0.452039091267763480, -0.452083690609084990, -0.452128288820197290, +-0.452172885900988920, -0.452217481851348630, -0.452262076671164300, -0.452306670360324790, -0.452351262918718970, -0.452395854346234580, -0.452440444642760620, -0.452485033808185500, +-0.452529621842397810, -0.452574208745286420, -0.452618794516739200, -0.452663379156644900, -0.452707962664892600, -0.452752545041369970, -0.452797126285966020, -0.452841706398569240, +-0.452886285379068550, -0.452930863227351820, -0.452975439943307860, -0.453020015526825360, -0.453064589977793200, -0.453109163296099130, -0.453153735481632180, -0.453198306534280890, +-0.453242876453934240, -0.453287445240480040, -0.453332012893807150, -0.453376579413804660, -0.453421144800360330, -0.453465709053363140, -0.453510272172701680, -0.453554834158264530, +-0.453599395009940680, -0.453643954727617980, -0.453688513311185370, -0.453733070760531820, -0.453777627075545250, -0.453822182256114650, -0.453866736302128540, -0.453911289213476010, +-0.453955840990044880, -0.454000391631724120, -0.454044941138402380, -0.454089489509968690, -0.454134036746310870, -0.454178582847317940, -0.454223127812878600, -0.454267671642881840, +-0.454312214337215470, -0.454356755895768570, -0.454401296318430180, -0.454445835605088170, -0.454490373755631500, -0.454534910769949010, -0.454579446647929540, -0.454623981389461140, +-0.454668514994432730, -0.454713047462733060, -0.454757578794251160, -0.454802108988874910, -0.454846638046493390, -0.454891165966995250, -0.454935692750269630, -0.454980218396204390, +-0.455024742904688580, -0.455069266275611280, -0.455113788508860470, -0.455158309604325180, -0.455202829561894120, -0.455247348381455970, -0.455291866062899840, -0.455336382606113640, +-0.455380898010986520, -0.455425412277407520, -0.455469925405264600, -0.455514437394446860, -0.455558948244843050, -0.455603457956342270, -0.455647966528832440, -0.455692473962202690, +-0.455736980256341740, -0.455781485411138780, -0.455825989426481670, -0.455870492302259570, -0.455914994038361280, -0.455959494634675890, -0.456003994091091380, -0.456048492407496840, +-0.456092989583781530, -0.456137485619833300, -0.456181980515541370, -0.456226474270794490, -0.456270966885481410, -0.456315458359491330, -0.456359948692712240, -0.456404437885033210, +-0.456448925936343510, -0.456493412846531110, -0.456537898615485160, -0.456582383243094470, -0.456626866729248240, -0.456671349073834440, -0.456715830276742230, -0.456760310337860850, +-0.456804789257078350, -0.456849267034283860, -0.456893743669366190, -0.456938219162214110, -0.456982693512716920, -0.457027166720762660, -0.457071638786240410, -0.457116109709039490, +-0.457160579489047870, -0.457205048126154810, -0.457249515620249130, -0.457293981971220060, -0.457338447178955660, -0.457382911243345120, -0.457427374164277310, -0.457471835941641480, +-0.457516296575325660, -0.457560756065219070, -0.457605214411210600, -0.457649671613189480, -0.457694127671043840, -0.457738582584662820, -0.457783036353935750, -0.457827488978750700, +-0.457871940458996930, -0.457916390794563310, -0.457960839985338760, -0.458005288031212430, -0.458049734932072520, -0.458094180687808270, -0.458138625298308950, -0.458183068763462710, +-0.458227511083158730, -0.458271952257286060, -0.458316392285733840, -0.458360831168390270, -0.458405268905144600, -0.458449705495885820, -0.458494140940503110, -0.458538575238884640, +-0.458583008390919760, -0.458627440396497390, -0.458671871255506790, -0.458716300967836110, -0.458760729533374660, -0.458805156952011790, -0.458849583223635670, -0.458894008348135540, +-0.458938432325400440, -0.458982855155319220, -0.459027276837781270, -0.459071697372674730, -0.459116116759888950, -0.459160534999313310, -0.459204952090835890, -0.459249368034346070, +-0.459293782829732880, -0.459338196476885620, -0.459382608975692440, -0.459427020326042770, -0.459471430527825960, -0.459515839580930120, -0.459560247485244710, -0.459604654240658720, +-0.459649059847061060, -0.459693464304341160, -0.459737867612387160, -0.459782269771088550, -0.459826670780334620, -0.459871070640013650, -0.459915469350014980, -0.459959866910227670, +-0.460004263320541060, -0.460048658580843370, -0.460093052691024070, -0.460137445650972140, -0.460181837460576950, -0.460226228119726850, -0.460270617628311120, -0.460315005986218880, +-0.460359393193339460, -0.460403779249561220, -0.460448164154773520, -0.460492547908865790, -0.460536930511726340, -0.460581311963244480, -0.460625692263309410, -0.460670071411810100, +-0.460714449408635980, -0.460758826253675370, -0.460803201946817680, -0.460847576487952380, -0.460891949876967740, -0.460936322113753240, -0.460980693198197900, -0.461025063130191260, +-0.461069431909621570, -0.461113799536378320, -0.461158166010350530, -0.461202531331427690, -0.461246895499498210, -0.461291258514451410, -0.461335620376176540, -0.461379981084562960, +-0.461424340639499050, -0.461468699040874290, -0.461513056288578140, -0.461557412382499030, -0.461601767322526340, -0.461646121108549250, -0.461690473740457240, -0.461734825218138630, +-0.461779175541482960, -0.461823524710379410, -0.461867872724717410, -0.461912219584385330, -0.461956565289272700, -0.462000909839268610, -0.462045253234262710, -0.462089595474143240, +-0.462133936558799810, -0.462178276488121930, -0.462222615261997980, -0.462266952880317440, -0.462311289342969560, -0.462355624649843480, -0.462399958800828680, -0.462444291795813590, +-0.462488623634687790, -0.462532954317340820, -0.462577283843661090, -0.462621612213538150, -0.462665939426861180, -0.462710265483519730, -0.462754590383402220, -0.462798914126398230, +-0.462843236712397020, -0.462887558141288010, -0.462931878412959800, -0.462976197527301850, -0.463020515484203420, -0.463064832283554110, -0.463109147925242270, -0.463153462409157610, +-0.463197775735189670, -0.463242087903226910, -0.463286398913158930, -0.463330708764874980, -0.463375017458264200, -0.463419324993216310, -0.463463631369619710, -0.463507936587364000, +-0.463552240646338880, -0.463596543546432700, -0.463640845287535240, -0.463685145869535630, -0.463729445292323570, -0.463773743555787490, -0.463818040659817020, -0.463862336604301480, +-0.463906631389130520, -0.463950925014192550, -0.463995217479377280, -0.464039508784573950, -0.464083798929672280, -0.464128087914560670, -0.464172375739128900, -0.464216662403266530, +-0.464260947906862120, -0.464305232249805360, -0.464349515431985550, -0.464393797453292290, -0.464438078313614170, -0.464482358012840820, -0.464526636550861630, -0.464570913927566160, +-0.464615190142843080, -0.464659465196582020, -0.464703739088672300, -0.464748011819003600, -0.464792283387464480, -0.464836553793944670, -0.464880823038333830, -0.464925091120520610, +-0.464969358040394630, -0.465013623797845220, -0.465057888392761800, -0.465102151825034000, -0.465146414094550490, -0.465190675201200890, -0.465234935144875020, -0.465279193925461410, +-0.465323451542849820, -0.465367707996929610, -0.465411963287590490, -0.465456217414721100, -0.465500470378211180, -0.465544722177950070, -0.465588972813827550, -0.465633222285732230, +-0.465677470593553800, -0.465721717737181740, -0.465765963716505750, -0.465810208531414470, -0.465854452181797660, -0.465898694667545080, -0.465942935988545410, -0.465987176144688430, +-0.466031415135863440, -0.466075652961959960, -0.466119889622867770, -0.466164125118475380, -0.466208359448672730, -0.466252592613349560, -0.466296824612394520, -0.466341055445697430, +-0.466385285113147700, -0.466429513614635140, -0.466473740950048400, -0.466517967119277340, -0.466562192122211340, -0.466606415958740250, -0.466650638628752720, -0.466694860132138570, +-0.466739080468787320, -0.466783299638588720, -0.466827517641431490, -0.466871734477205480, -0.466915950145800560, -0.466960164647105320, -0.467004377981009690, -0.467048590147403130, +-0.467092801146175460, -0.467137010977215380, -0.467181219640412810, -0.467225427135657180, -0.467269633462838340, -0.467313838621845060, -0.467358042612567190, -0.467402245434894230, +-0.467446447088716020, -0.467490647573921280, -0.467534846890399920, -0.467579045038041870, -0.467623242016735830, -0.467667437826371660, -0.467711632466838890, -0.467755825938027000, +-0.467800018239826030, -0.467844209372124560, -0.467888399334812580, -0.467932588127779990, -0.467976775750915560, -0.468020962204109160, -0.468065147487250370, -0.468109331600229110, +-0.468153514542934080, -0.468197696315255320, -0.468241876917082300, -0.468286056348305000, -0.468330234608812120, -0.468374411698493700, -0.468418587617239260, -0.468462762364938720, +-0.468506935941480850, -0.468551108346755670, -0.468595279580653110, -0.468639449643061980, -0.468683618533872190, -0.468727786252973400, -0.468771952800255130, -0.468816118175607310, +-0.468860282378918860, -0.468904445410079700, -0.468948607268979800, -0.468992767955508040, -0.469036927469554330, -0.469081085811008270, -0.469125242979759940, -0.469169398975698090, +-0.469213553798712710, -0.469257707448693880, -0.469301859925530360, -0.469346011229112180, -0.469390161359329040, -0.469434310316070410, -0.469478458099226450, -0.469522604708685950, +-0.469566750144338960, -0.469610894406075450, -0.469655037493784290, -0.469699179407355560, -0.469743320146678910, -0.469787459711644320, -0.469831598102140700, -0.469875735318058100, +-0.469919871359286150, -0.469964006225714880, -0.470008139917233230, -0.470052272433731270, -0.470096403775098590, -0.470140533941225290, -0.470184662932000290, -0.470228790747313610, +-0.470272917387055340, -0.470317042851114360, -0.470361167139380810, -0.470405290251744320, -0.470449412188094660, -0.470493532948321800, -0.470537652532314780, -0.470581770939963560, +-0.470625888171158360, -0.470670004225787970, -0.470714119103742670, -0.470758232804912020, -0.470802345329186190, -0.470846456676454080, -0.470890566846605850, -0.470934675839531190, +-0.470978783655120250, -0.471022890293261940, -0.471066995753846420, -0.471111100036763430, -0.471155203141903070, -0.471199305069154250, -0.471243405818407230, -0.471287505389552110, +-0.471331603782477790, -0.471375700997074430, -0.471419797033231890, -0.471463891890839810, -0.471507985569788400, -0.471552078069966680, -0.471596169391264700, -0.471640259533572690, +-0.471684348496779700, -0.471728436280775820, -0.471772522885450800, -0.471816608310694940, -0.471860692556397120, -0.471904775622447540, -0.471948857508736500, -0.471992938215152870, +-0.472037017741586850, -0.472081096087928360, -0.472125173254067110, -0.472169249239893280, -0.472213324045295980, -0.472257397670165390, -0.472301470114391660, -0.472345541377863830, +-0.472389611460472200, -0.472433680362106530, -0.472477748082657080, -0.472521814622012810, -0.472565879980064050, -0.472609944156700550, -0.472654007151812610, -0.472698068965289260, +-0.472742129597020720, -0.472786189046896900, -0.472830247314807940, -0.472874304400642990, -0.472918360304292300, -0.472962415025646070, -0.473006468564593440, -0.473050520921024620, +-0.473094572094829520, -0.473138622085897960, -0.473182670894120250, -0.473226718519385470, -0.473270764961583930, -0.473314810220605840, -0.473358854296340340, -0.473402897188677670, +-0.473446938897507770, -0.473490979422720950, -0.473535018764206280, -0.473579056921854040, -0.473623093895554180, -0.473667129685196920, -0.473711164290671500, -0.473755197711868190, +-0.473799229948676850, -0.473843261000987840, -0.473887290868690250, -0.473931319551674450, -0.473975347049830800, -0.474019373363048340, -0.474063398491217420, -0.474107422434228040, +-0.474151445191970500, -0.474195466764333940, -0.474239487151208730, -0.474283506352484780, -0.474327524368052480, -0.474371541197800950, -0.474415556841620620, -0.474459571299401360, +-0.474503584571033530, -0.474547596656406390, -0.474591607555410240, -0.474635617267935520, -0.474679625793871300, -0.474723633133108060, -0.474767639285535670, -0.474811644251044220, +-0.474855648029524070, -0.474899650620864420, -0.474943652024955590, -0.474987652241688040, -0.475031651270950980, -0.475075649112634830, -0.475119645766629520, -0.475163641232825450, +-0.475207635511111950, -0.475251628601379320, -0.475295620503517650, -0.475339611217417300, -0.475383600742967540, -0.475427589080058780, -0.475471576228580990, -0.475515562188424720, +-0.475559546959479110, -0.475603530541634680, -0.475647512934781800, -0.475691494138809730, -0.475735474153608950, -0.475779452979069430, -0.475823430615081310, -0.475867407061535020, +-0.475911382318319810, -0.475955356385326160, -0.475999329262444480, -0.476043300949564100, -0.476087271446575480, -0.476131240753368660, -0.476175208869834170, -0.476219175795861260, +-0.476263141531340360, -0.476307106076161610, -0.476351069430215550, -0.476395031593391360, -0.476438992565579640, -0.476482952346670430, -0.476526910936554190, -0.476570868335120300, +-0.476614824542259290, -0.476658779557861570, -0.476702733381816510, -0.476746686014014600, -0.476790637454345970, -0.476834587702701150, -0.476878536758969520, -0.476922484623041490, +-0.476966431294807260, -0.477010376774157360, -0.477054321060981110, -0.477098264155169090, -0.477142206056611340, -0.477186146765198550, -0.477230086280819920, -0.477274024603366150, +-0.477317961732727670, -0.477361897668793890, -0.477405832411455400, -0.477449765960602290, -0.477493698316124760, -0.477537629477913450, -0.477581559445857620, -0.477625488219847850, +-0.477669415799774840, -0.477713342185527860, -0.477757267376997470, -0.477801191374074010, -0.477845114176647880, -0.477889035784608620, -0.477932956197846760, -0.477976875416252500, +-0.478020793439716480, -0.478064710268128020, -0.478108625901377820, -0.478152540339356060, -0.478196453581953340, -0.478240365629059080, -0.478284276480563930, -0.478328186136358470, +-0.478372094596332180, -0.478416001860375580, -0.478459907928379060, -0.478503812800232740, -0.478547716475827280, -0.478591618955052090, -0.478635520237797930, -0.478679420323955330, +-0.478723319213413770, -0.478767216906063940, -0.478811113401796050, -0.478855008700500740, -0.478898902802067540, -0.478942795706387090, -0.478986687413349650, -0.479030577922845920, +-0.479074467234765320, -0.479118355348998550, -0.479162242265435860, -0.479206127983968000, -0.479250012504484400, -0.479293895826875820, -0.479337777951032830, -0.479381658876845030, +-0.479425538604203120, -0.479469417132997340, -0.479513294463117970, -0.479557170594455790, -0.479601045526900300, -0.479644919260342200, -0.479688791794672160, -0.479732663129779800, +-0.479776533265555750, -0.479820402201890370, -0.479864269938674370, -0.479908136475797330, -0.479952001813149950, -0.479995865950622940, -0.480039728888105870, -0.480083590625489500, +-0.480127451162664090, -0.480171310499520110, -0.480215168635948260, -0.480259025571838080, -0.480302881307080320, -0.480346735841565730, -0.480390589175183960, -0.480434441307825700, +-0.480478292239381320, -0.480522141969741190, -0.480565990498796110, -0.480609837826435680, -0.480653683952551090, -0.480697528877031820, -0.480741372599768790, -0.480785215120652310, +-0.480829056439572740, -0.480872896556421010, -0.480916735471086600, -0.480960573183460360, -0.481004409693433050, -0.481048245000894330, -0.481092079105735040, -0.481135912007845500, +-0.481179743707116250, -0.481223574203437980, -0.481267403496700390, -0.481311231586794290, -0.481355058473610490, -0.481398884157038690, -0.481442708636969640, -0.481486531913293820, +-0.481530353985902100, -0.481574174854684070, -0.481617994519530630, -0.481661812980332560, -0.481705630236979600, -0.481749446289362560, -0.481793261137371920, -0.481837074780898100, +-0.481880887219831970, -0.481924698454063270, -0.481968508483482770, -0.482012317307981440, -0.482056124927448930, -0.482099931341776090, -0.482143736550853410, -0.482187540554571410, +-0.482231343352820920, -0.482275144945491730, -0.482318945332474600, -0.482362744513660570, -0.482406542488939270, -0.482450339258201580, -0.482494134821338070, -0.482537929178239620, +-0.482581722328795980, -0.482625514272898020, -0.482669305010436640, -0.482713094541301620, -0.482756882865383820, -0.482800669982573870, -0.482844455892762260, -0.482888240595839850, +-0.482932024091696440, -0.482975806380223030, -0.483019587461310460, -0.483063367334848560, -0.483107146000728180, -0.483150923458839980, -0.483194699709074470, -0.483238474751322590, +-0.483282248585474140, -0.483326021211420430, -0.483369792629051330, -0.483413562838257700, -0.483457331838930190, -0.483501099630959390, -0.483544866214236150, -0.483588631588650400, +-0.483632395754093060, -0.483676158710455160, -0.483719920457626410, -0.483763680995497880, -0.483807440323960170, -0.483851198442903860, -0.483894955352219940, -0.483938711051798200, +-0.483982465541529740, -0.484026218821305480, -0.484069970891015280, -0.484113721750550120, -0.484157471399800700, -0.484201219838657990, -0.484244967067011810, -0.484288713084753240, +-0.484332457891773320, -0.484376201487961790, -0.484419943873209800, -0.484463685047407940, -0.484507425010446860, -0.484551163762217630, -0.484594901302610070, -0.484638637631515270, +-0.484682372748824250, -0.484726106654426950, -0.484769839348214330, -0.484813570830077150, -0.484857301099906050, -0.484901030157592060, -0.484944758003025110, -0.484988484636096670, +-0.485032210056696610, -0.485075934264716010, -0.485119657260045630, -0.485163379042576060, -0.485207099612198430, -0.485250818968802730, -0.485294537112279930, -0.485338254042521180, +-0.485381969759416390, -0.485425684262856700, -0.485469397552732770, -0.485513109628935400, -0.485556820491355570, -0.485600530139883360, -0.485644238574409800, -0.485687945794826050, +-0.485731651801022070, -0.485775356592888900, -0.485819060170317400, -0.485862762533198600, -0.485906463681422480, -0.485950163614880250, -0.485993862333462980, -0.486037559837060650, +-0.486081256125564460, -0.486124951198865120, -0.486168645056853370, -0.486212337699420400, -0.486256029126456210, -0.486299719337851990, -0.486343408333498820, -0.486387096113286730, +-0.486430782677106930, -0.486474468024850120, -0.486518152156407200, -0.486561835071669280, -0.486605516770526330, -0.486649197252869650, -0.486692876518590330, -0.486736554567578470, +-0.486780231399725150, -0.486823907014921340, -0.486867581413058080, -0.486911254594025510, -0.486954926557714830, -0.486998597304017180, -0.487042266832822650, -0.487085935144022490, +-0.487129602237507450, -0.487173268113168410, -0.487216932770896620, -0.487260596210582100, -0.487304258432116060, -0.487347919435389800, -0.487391579220293360, -0.487435237786717930, +-0.487478895134554390, -0.487522551263693650, -0.487566206174026960, -0.487609859865444310, -0.487653512337837440, -0.487697163591096330, -0.487740813625112350, -0.487784462439776360, +-0.487828110034979220, -0.487871756410612150, -0.487915401566565320, -0.487959045502730000, -0.488002688218997450, -0.488046329715257740, -0.488089969991402250, -0.488133609047321840, +-0.488177246882907420, -0.488220883498050260, -0.488264518892640500, -0.488308153066569440, -0.488351786019728400, -0.488395417752007450, -0.488439048263297980, -0.488482677553490950, +-0.488526305622477560, -0.488569932470148020, -0.488613558096393670, -0.488657182501105790, -0.488700805684174570, -0.488744427645491360, -0.488788048384947050, -0.488831667902432650, +-0.488875286197839490, -0.488918903271057640, -0.488962519121978580, -0.489006133750493620, -0.489049747156492960, -0.489093359339867860, -0.489136970300509450, -0.489180580038308550, +-0.489224188553156640, -0.489267795844943840, -0.489311401913561540, -0.489355006758901090, -0.489398610380852810, -0.489442212779307990, -0.489485813954157580, -0.489529413905293090, +-0.489573012632604660, -0.489616610135983680, -0.489660206415321540, -0.489703801470508570, -0.489747395301436020, -0.489790987907995020, -0.489834579290076570, -0.489878169447572010, +-0.489921758380371660, -0.489965346088366950, -0.490008932571449230, -0.490052517829508820, -0.490096101862437070, -0.490139684670125090, -0.490183266252463890, -0.490226846609344900, +-0.490270425740658430, -0.490314003646296290, -0.490357580326148730, -0.490401155780107230, -0.490444730008062880, -0.490488303009906650, -0.490531874785530060, -0.490575445334823390, +-0.490619014657678100, -0.490662582753985720, -0.490706149623636460, -0.490749715266521780, -0.490793279682532890, -0.490836842871560760, -0.490880404833496930, -0.490923965568231650, +-0.490967525075656500, -0.491011083355662900, -0.491054640408141230, -0.491098196232982950, -0.491141750830079220, -0.491185304199321440, -0.491228856340600040, -0.491272407253806500, +-0.491315956938832290, -0.491359505395567830, -0.491403052623904660, -0.491446598623733800, -0.491490143394946450, -0.491533686937434100, -0.491577229251087210, -0.491620770335797210, +-0.491664310191455680, -0.491707848817952990, -0.491751386215180660, -0.491794922383029850, -0.491838457321391750, -0.491881991030157950, -0.491925523509218750, -0.491969054758465700, +-0.492012584777790420, -0.492056113567083340, -0.492099641126235940, -0.492143167455139420, -0.492186692553685410, -0.492230216421764230, -0.492273739059267520, -0.492317260466086930, +-0.492360780642112690, -0.492404299587236580, -0.492447817301349680, -0.492491333784343230, -0.492534849036108830, -0.492578363056536960, -0.492621875845519200, -0.492665387402947070, +-0.492708897728711130, -0.492752406822702940, -0.492795914684813710, -0.492839421314934690, -0.492882926712957530, -0.492926430878772640, -0.492969933812272110, -0.493013435513346310, +-0.493056935981886930, -0.493100435217785240, -0.493143933220932420, -0.493187429991220170, -0.493230925528538980, -0.493274419832780480, -0.493317912903836250, -0.493361404741596900, +-0.493404895345954050, -0.493448384716798970, -0.493491872854022910, -0.493535359757517500, -0.493578845427173400, -0.493622329862882130, -0.493665813064535440, -0.493709295032023820, +-0.493752775765238960, -0.493796255264072170, -0.493839733528415150, -0.493883210558158370, -0.493926686353193590, -0.493970160913412450, -0.494013634238705530, -0.494057106328964550, +-0.494100577184080790, -0.494144046803945640, -0.494187515188450670, -0.494230982337486580, -0.494274448250945020, -0.494317912928717740, -0.494361376370695270, -0.494404838576769370, +-0.494448299546831340, -0.494491759280772600, -0.494535217778484860, -0.494578675039858640, -0.494622131064785810, -0.494665585853157950, -0.494709039404865770, -0.494752491719801010, +-0.494795942797855050, -0.494839392638919570, -0.494882841242885230, -0.494926288609643770, -0.494969734739087010, -0.495013179631105530, -0.495056623285591080, -0.495100065702435090, +-0.495143506881528920, -0.495186946822764370, -0.495230385526032050, -0.495273822991223800, -0.495317259218231390, -0.495360694206945400, -0.495404127957257690, -0.495447560469059690, +-0.495490991742242760, -0.495534421776698760, -0.495577850572318290, -0.495621278128993590, -0.495664704446615310, -0.495708129525075260, -0.495751553364264910, -0.495794975964075680, +-0.495838397324399380, -0.495881817445126660, -0.495925236326149430, -0.495968653967359560, -0.496012070368647580, -0.496055485529905470, -0.496098899451024640, -0.496142312131896520, +-0.496185723572413080, -0.496229133772464910, -0.496272542731943880, -0.496315950450741890, -0.496359356928749660, -0.496402762165859050, -0.496446166161961520, -0.496489568916948950, +-0.496532970430712040, -0.496576370703142760, -0.496619769734132910, -0.496663167523573260, -0.496706564071355720, -0.496749959377371710, -0.496793353441512820, -0.496836746263670970, +-0.496880137843736860, -0.496923528181602350, -0.496966917277159470, -0.497010305130298870, -0.497053691740912520, -0.497097077108891950, -0.497140461234128690, -0.497183844116514670, +-0.497227225755940640, -0.497270606152298900, -0.497313985305480320, -0.497357363215376710, -0.497400739881879770, -0.497444115304880920, -0.497487489484272180, -0.497530862419944320, +-0.497574234111789360, -0.497617604559699170, -0.497660973763564550, -0.497704341723277540, -0.497747708438729620, -0.497791073909812480, -0.497834438136418030, -0.497877801118437100, +-0.497921162855761660, -0.497964523348283730, -0.498007882595894070, -0.498051240598484710, -0.498094597355947240, -0.498137952868173690, -0.498181307135054870, -0.498224660156482760, +-0.498268011932349380, -0.498311362462545590, -0.498354711746963440, -0.498398059785494450, -0.498441406578030380, -0.498484752124463140, -0.498528096424683600, -0.498571439478583840, +-0.498614781286055910, -0.498658121846990600, -0.498701461161280000, -0.498744799228815710, -0.498788136049489460, -0.498831471623193250, -0.498874805949817980, -0.498918139029255690, +-0.498961470861398420, -0.499004801446137130, -0.499048130783363800, -0.499091458872970130, -0.499134785714848260, -0.499178111308889010, -0.499221435654984450, -0.499264758753026730, +-0.499308080602906710, -0.499351401204516490, -0.499394720557747750, -0.499438038662492260, -0.499481355518642030, -0.499524671126088000, -0.499567985484722310, -0.499611298594437040, +-0.499654610455123160, -0.499697921066672710, -0.499741230428977500, -0.499784538541929220, -0.499827845405419970, -0.499871151019340710, -0.499914455383583920, -0.499957758498040640, +-0.500001060362602940, -0.500044360977162650, -0.500087660341611450, -0.500130958455841430, -0.500174255319743690, -0.500217550933210300, -0.500260845296133350, -0.500304138408403930, +-0.500347430269914240, -0.500390720880555920, -0.500434010240220830, -0.500477298348801060, -0.500520585206187580, -0.500563870812272830, -0.500607155166948650, -0.500650438270106250, +-0.500693720121637710, -0.500737000721434900, -0.500780280069389900, -0.500823558165393920, -0.500866835009339040, -0.500910110601117450, -0.500953384940620140, -0.500996658027739410, +-0.501039929862367010, -0.501083200444394810, -0.501126469773715000, -0.501169737850218570, -0.501213004673797920, -0.501256270244345050, -0.501299534561751140, -0.501342797625908390, +-0.501386059436708660, -0.501429319994043720, -0.501472579297805980, -0.501515837347886300, -0.501559094144177100, -0.501602349686570470, -0.501645603974957610, -0.501688857009230830, +-0.501732108789281760, -0.501775359315002940, -0.501818608586285240, -0.501861856603021070, -0.501905103365102630, -0.501948348872421010, -0.501991593124868630, -0.502034836122337120, +-0.502078077864718590, -0.502121318351905320, -0.502164557583788310, -0.502207795560259850, -0.502251032281212370, -0.502294267746536850, -0.502337501956125700, -0.502380734909870790, +-0.502423966607664090, -0.502467197049397800, -0.502510426234963110, -0.502553654164252790, -0.502596880837157920, -0.502640106253570920, -0.502683330413383640, -0.502726553316487970, +-0.502769774962776310, -0.502812995352139860, -0.502856214484470930, -0.502899432359661840, -0.502942648977603770, -0.502985864338189040, -0.503029078441309730, -0.503072291286857600, +-0.503115502874725280, -0.503158713204803760, -0.503201922276985460, -0.503245130091162670, -0.503288336647226720, -0.503331541945069900, -0.503374745984584320, -0.503417948765662150, +-0.503461150288194830, -0.503504350552074540, -0.503547549557193830, -0.503590747303443780, -0.503633943790716910, -0.503677139018905210, -0.503720332987900640, -0.503763525697595640, +-0.503806717147881390, -0.503849907338650320, -0.503893096269794950, -0.503936283941206490, -0.503979470352777240, -0.504022655504399290, -0.504065839395964720, -0.504109022027365960, +-0.504152203398494310, -0.504195383509242090, -0.504238562359501820, -0.504281739949164700, -0.504324916278123260, -0.504368091346269590, -0.504411265153495990, -0.504454437699693890, +-0.504497608984755710, -0.504540779008573860, -0.504583947771039760, -0.504627115272045730, -0.504670281511483850, -0.504713446489246320, -0.504756610205225550, -0.504799772659312860, +-0.504842933851400780, -0.504886093781381720, -0.504929252449147100, -0.504972409854589240, -0.505015565997600450, -0.505058720878072690, -0.505101874495898610, -0.505145026850969290, +-0.505188177943177940, -0.505231327772415750, -0.505274476338575140, -0.505317623641548420, -0.505360769681227560, -0.505403914457505210, -0.505447057970272670, -0.505490200219422590, +-0.505533341204847280, -0.505576480926438250, -0.505619619384088060, -0.505662756577688780, -0.505705892507132600, -0.505749027172312180, -0.505792160573118710, -0.505835292709444830, +-0.505878423581183070, -0.505921553188224960, -0.505964681530462920, -0.506007808607789160, -0.506050934420096300, -0.506094058967275770, -0.506137182249220000, -0.506180304265821720, +-0.506223425016972260, -0.506266544502564250, -0.506309662722489890, -0.506352779676641380, -0.506395895364911250, -0.506439009787191030, -0.506482122943373250, -0.506525234833350660, +-0.506568345457014460, -0.506611454814257510, -0.506654562904971790, -0.506697669729049840, -0.506740775286383950, -0.506783879576865770, -0.506826982600387940, -0.506870084356843000, +-0.506913184846122470, -0.506956284068118990, -0.506999382022724880, -0.507042478709832540, -0.507085574129333750, -0.507128668281120910, -0.507171761165086890, -0.507214852781122990, +-0.507257943129121980, -0.507301032208976150, -0.507344120020577720, -0.507387206563819420, -0.507430291838592670, -0.507473375844790240, -0.507516458582304650, -0.507559540051027660, +-0.507602620250851790, -0.507645699181669240, -0.507688776843372550, -0.507731853235854350, -0.507774928359006060, -0.507818002212720890, -0.507861074796890240, -0.507904146111407000, +-0.507947216156163340, -0.507990284931051580, -0.508033352435964590, -0.508076418670793780, -0.508119483635431910, -0.508162547329771840, -0.508205609753704880, -0.508248670907124000, +-0.508291730789921400, -0.508334789401989400, -0.508377846743220840, -0.508420902813507380, -0.508463957612741550, -0.508507011140816310, -0.508550063397623100, -0.508593114383054770, +-0.508636164097003520, -0.508679212539362440, -0.508722259710022830, -0.508765305608877560, -0.508808350235819380, -0.508851393590740050, -0.508894435673532210, -0.508937476484088270, +-0.508980516022300660, -0.509023554288062010, -0.509066591281264190, -0.509109627001799960, -0.509152661449561950, -0.509195694624441920, -0.509238726526332730, -0.509281757155126580, +-0.509324786510716220, -0.509367814592994070, -0.509410841401852110, -0.509453866937183530, -0.509496891198879750, -0.509539914186833750, -0.509582935900938060, -0.509625956341084980, +-0.509668975507167390, -0.509711993399076910, -0.509755010016706530, -0.509798025359949000, -0.509841039428696070, -0.509884052222840390, -0.509927063742274700, -0.509970073986891310, +-0.510013082956583210, -0.510056090651241910, -0.510099097070760400, -0.510142102215031530, -0.510185106083947070, -0.510228108677399870, -0.510271109995282250, -0.510314110037486950, +-0.510357108803906830, -0.510400106294433440, -0.510443102508960190, -0.510486097447378830, -0.510529091109582220, -0.510572083495462900, -0.510615074604913400, -0.510658064437826460, +-0.510701052994094070, -0.510744040273609090, -0.510787026276264380, -0.510830011001951690, -0.510872994450563890, -0.510915976621993730, -0.510958957516133520, -0.511001937132876450, +-0.511044915472114060, -0.511087892533739320, -0.511130868317645310, -0.511173842823723800, -0.511216816051867640, -0.511259788001969360, -0.511302758673922050, -0.511345728067617470, +-0.511388696182948580, -0.511431663019808360, -0.511474628578088450, -0.511517592857682170, -0.511560555858481810, -0.511603517580380030, -0.511646478023269900, -0.511689437187043180, +-0.511732395071592850, -0.511775351676811870, -0.511818307002592230, -0.511861261048826680, -0.511904213815408070, -0.511947165302228950, -0.511990115509182280, -0.512033064436159920, +-0.512076012083055310, -0.512118958449760300, -0.512161903536167860, -0.512204847342170640, -0.512247789867661290, -0.512290731112532870, -0.512333671076677270, -0.512376609759987560, +-0.512419547162356600, -0.512462483283676380, -0.512505418123839980, -0.512548351682740040, -0.512591283960269210, -0.512634214956320670, -0.512677144670786070, -0.512720073103558600, +-0.512763000254531360, -0.512805926123596320, -0.512848850710646340, -0.512891774015574290, -0.512934696038273240, -0.512977616778634960, -0.513020536236552750, -0.513063454411919470, +-0.513106371304627330, -0.513149286914569070, -0.513192201241637780, -0.513235114285725880, -0.513278026046726570, -0.513320936524531810, -0.513363845719034710, -0.513406753630128440, +-0.513449660257704890, -0.513492565601657120, -0.513535469661878020, -0.513578372438260210, -0.513621273930696790, -0.513664174139079830, -0.513707073063302540, -0.513749970703257790, +-0.513792867058837870, -0.513835762129935760, -0.513878655916444220, -0.513921548418256320, -0.513964439635264280, -0.514007329567361170, -0.514050218214440080, -0.514093105576392980, +-0.514135991653113190, -0.514178876444493450, -0.514221759950426520, -0.514264642170805590, -0.514307523105522520, -0.514350402754470860, -0.514393281117543450, -0.514436158194632400, +-0.514479033985631110, -0.514521908490432110, -0.514564781708928390, -0.514607653641013020, -0.514650524286578200, -0.514693393645517470, -0.514736261717722910, -0.514779128503087600, +-0.514821994001504520, -0.514864858212866430, -0.514907721137066620, -0.514950582773997080, -0.514993443123551110, -0.515036302185621910, -0.515079159960101560, -0.515122016446883380, +-0.515164871645860110, -0.515207725556924620, -0.515250578179970220, -0.515293429514888990, -0.515336279561574240, -0.515379128319919060, -0.515421975789815750, -0.515464821971157510, +-0.515507666863837200, -0.515550510467748140, -0.515593352782782400, -0.515636193808833300, -0.515679033545794030, -0.515721871993556790, -0.515764709152015000, -0.515807545021061300, +-0.515850379600588770, -0.515893212890490730, -0.515936044890659250, -0.515978875600987650, -0.516021705021369240, -0.516064533151696200, -0.516107359991861750, -0.516150185541758950, +-0.516193009801280690, -0.516235832770320370, -0.516278654448769970, -0.516321474836523020, -0.516364293933472720, -0.516407111739511260, -0.516449928254532060, -0.516492743478428110, +-0.516535557411092580, -0.516578370052417800, -0.516621181402297180, -0.516663991460623920, -0.516706800227290210, -0.516749607702189580, -0.516792413885215020, -0.516835218776259260, +-0.516878022375215960, -0.516920824681977200, -0.516963625696436390, -0.517006425418486850, -0.517049223848020880, -0.517092020984931900, -0.517134816829112780, -0.517177611380456700, +-0.517220404638856880, -0.517263196604205720, -0.517305987276396980, -0.517348776655322860, -0.517391564740876770, -0.517434351532951810, -0.517477137031440940, -0.517519921236237690, +-0.517562704147234150, -0.517605485764323860, -0.517648266087400330, -0.517691045116355660, -0.517733822851083380, -0.517776599291476570, -0.517819374437428310, -0.517862148288831920, +-0.517904920845579820, -0.517947692107565420, -0.517990462074682250, -0.518033230746822390, -0.518075998123879500, -0.518118764205746650, -0.518161528992317270, -0.518204292483483650, +-0.518247054679139340, -0.518289815579177750, -0.518332575183491300, -0.518375333491973290, -0.518418090504517040, -0.518460846221015510, -0.518503600641362250, -0.518546353765449660, +-0.518589105593171170, -0.518631856124420310, -0.518674605359089380, -0.518717353297071910, -0.518760099938261110, -0.518802845282550160, -0.518845589329832270, -0.518888332080000180, +-0.518931073532947210, -0.518973813688566990, -0.519016552546751720, -0.519059290107395150, -0.519102026370390380, -0.519144761335630920, -0.519187495003009200, -0.519230227372418640, +-0.519272958443752990, -0.519315688216904550, -0.519358416691766860, -0.519401143868233110, -0.519443869746196500, -0.519486594325550670, -0.519529317606187920, -0.519572039588001910, +-0.519614760270886160, -0.519657479654733080, -0.519700197739436320, -0.519742914524889080, -0.519785630010984660, -0.519828344197616370, -0.519871057084676960, -0.519913768672060290, +-0.519956478959658800, -0.519999187947365990, -0.520041895635075300, -0.520084602022679920, -0.520127307110073380, -0.520170010897148210, -0.520212713383797930, -0.520255414569916420, +-0.520298114455395870, -0.520340813040130020, -0.520383510324012200, -0.520426206306935480, -0.520468900988793730, -0.520511594369479360, -0.520554286448886020, -0.520596977226907230, +-0.520639666703435760, -0.520682354878365010, -0.520725041751588400, -0.520767727322999590, -0.520810411592491080, -0.520853094559956540, -0.520895776225289600, -0.520938456588382890, +-0.520981135649130070, -0.521023813407424320, -0.521066489863159070, -0.521109165016228060, -0.521151838866523610, -0.521194511413939690, -0.521237182658369820, -0.521279852599706550, +-0.521322521237843730, -0.521365188572674660, -0.521407854604092560, -0.521450519331991160, -0.521493182756263110, -0.521535844876802050, -0.521578505693501840, -0.521621165206255010, +-0.521663823414955210, -0.521706480319495850, -0.521749135919770680, -0.521791790215672350, -0.521834443207094490, -0.521877094893930860, -0.521919745276074100, -0.521962394353418070, +-0.522005042125855970, -0.522047688593281320, -0.522090333755587890, -0.522132977612668080, -0.522175620164415990, -0.522218261410725140, -0.522260901351488280, -0.522303539986599170, +-0.522346177315951230, -0.522388813339437760, -0.522431448056952740, -0.522474081468388700, -0.522516713573639820, -0.522559344372598770, -0.522601973865159270, -0.522644602051214990, +-0.522687228930659110, -0.522729854503385600, -0.522772478769287010, -0.522815101728257290, -0.522857723380190100, -0.522900343724978290, -0.522942962762515620, -0.522985580492695610, +-0.523028196915411580, -0.523070812030557390, -0.523113425838025780, -0.523156038337710740, -0.523198649529505900, -0.523241259413304020, -0.523283867988999060, -0.523326475256484350, +-0.523369081215653950, -0.523411685866400410, -0.523454289208617580, -0.523496891242199560, -0.523539491967038860, -0.523582091383029360, -0.523624689490064690, -0.523667286288038270, +-0.523709881776844080, -0.523752475956374750, -0.523795068826524270, -0.523837660387186490, -0.523880250638254160, -0.523922839579621160, -0.523965427211181110, -0.524008013532827550, +-0.524050598544454240, -0.524093182245954140, -0.524135764637221340, -0.524178345718148920, -0.524220925488630530, -0.524263503948559810, -0.524306081097830390, -0.524348656936336030, +-0.524391231463969820, -0.524433804680625390, -0.524476376586196950, -0.524518947180577120, -0.524561516463659890, -0.524604084435338900, -0.524646651095507680, -0.524689216444060300, +-0.524731780480889420, -0.524774343205889120, -0.524816904618953250, -0.524859464719974910, -0.524902023508847740, -0.524944580985465590, -0.524987137149722340, -0.525029692001510950, +-0.525072245540725290, -0.525114797767259330, -0.525157348681006050, -0.525199898281859420, -0.525242446569712970, -0.525284993544460450, -0.525327539205995840, -0.525370083554212000, +-0.525412626589002900, -0.525455168310262730, -0.525497708717884150, -0.525540247811761340, -0.525582785591787950, -0.525625322057857500, -0.525667857209864200, -0.525710391047700790, +-0.525752923571261470, -0.525795454780440210, -0.525837984675129990, -0.525880513255224780, -0.525923040520618220, -0.525965566471204520, -0.526008091106876410, -0.526050614427528210, +-0.526093136433053780, -0.526135657123346090, -0.526178176498299340, -0.526220694557807180, -0.526263211301763230, -0.526305726730061600, -0.526348240842595240, -0.526390753639258360, +-0.526433265119944930, -0.526475775284548030, -0.526518284132961640, -0.526560791665079520, -0.526603297880795520, -0.526645802780003500, -0.526688306362596670, -0.526730808628469440, +-0.526773309577514890, -0.526815809209627010, -0.526858307524699530, -0.526900804522626440, -0.526943300203301600, -0.526985794566618200, -0.527028287612470230, -0.527070779340751970, +-0.527113269751356420, -0.527155758844177650, -0.527198246619109410, -0.527240733076045690, -0.527283218214880440, -0.527325702035506770, -0.527368184537818860, -0.527410665721710910, +-0.527453145587075790, -0.527495624133807910, -0.527538101361801020, -0.527580577270949090, -0.527623051861145440, -0.527665525132284150, -0.527707997084259530, -0.527750467716964430, +-0.527792937030293170, -0.527835405024139500, -0.527877871698397390, -0.527920337052961040, -0.527962801087723310, -0.528005263802578730, -0.528047725197421270, -0.528090185272144240, +-0.528132644026641620, -0.528175101460807370, -0.528217557574535480, -0.528260012367720020, -0.528302465840254200, -0.528344917992032200, -0.528387368822948230, -0.528429818332895480, +-0.528472266521768150, -0.528514713389460210, -0.528557158935865860, -0.528599603160878280, -0.528642046064391580, -0.528684487646300270, -0.528726927906497220, -0.528769366844876960, +-0.528811804461333250, -0.528854240755760040, -0.528896675728051550, -0.528939109378101070, -0.528981541705802800, -0.529023972711051060, -0.529066402393738920, -0.529108830753760920, +-0.529151257791010690, -0.529193683505382430, -0.529236107896770340, -0.529278530965067500, -0.529320952710168770, -0.529363373131967350, -0.529405792230357440, -0.529448210005233010, +-0.529490626456488030, -0.529533041584016930, -0.529575455387712890, -0.529617867867470120, -0.529660279023183130, -0.529702688854745030, -0.529745097362050220, -0.529787504544992680, +-0.529829910403466280, -0.529872314937365640, -0.529914718146583750, -0.529957120031015030, -0.529999520590553890, -0.530041919825093630, -0.530084317734528580, -0.530126714318752690, +-0.530169109577660390, -0.530211503511144990, -0.530253896119100790, -0.530296287401422210, -0.530338677358002550, -0.530381065988736240, -0.530423453293517260, -0.530465839272239560, +-0.530508223924797680, -0.530550607251084940, -0.530592989250995630, -0.530635369924424170, -0.530677749271263990, -0.530720127291409380, -0.530762503984754440, -0.530804879351193360, +-0.530847253390620330, -0.530889626102928890, -0.530931997488013340, -0.530974367545768100, -0.531016736276086590, -0.531059103678863330, -0.531101469753992310, -0.531143834501367930, +-0.531186197920883510, -0.531228560012433680, -0.531270920775912870, -0.531313280211214380, -0.531355638318232630, -0.531397995096861810, -0.531440350546996010, -0.531482704668529650, +-0.531525057461356250, -0.531567408925370130, -0.531609759060465930, -0.531652107866536830, -0.531694455343477590, -0.531736801491182190, -0.531779146309544810, -0.531821489798459890, +-0.531863831957820830, -0.531906172787522610, -0.531948512287458650, -0.531990850457523260, -0.532033187297610840, -0.532075522807615500, -0.532117856987431640, -0.532160189836952790, +-0.532202521356073490, -0.532244851544688260, -0.532287180402690520, -0.532329507929974800, -0.532371834126435290, -0.532414158991966200, -0.532456482526462160, -0.532498804729816480, +-0.532541125601923790, -0.532583445142678750, -0.532625763351974650, -0.532668080229706130, -0.532710395775767400, -0.532752709990053090, -0.532795022872456610, -0.532837334422872620, +-0.532879644641195640, -0.532921953527319080, -0.532964261081137810, -0.533006567302545810, -0.533048872191437370, -0.533091175747707150, -0.533133477971248550, -0.533175778861956330, +-0.533218078419725020, -0.533260376644448140, -0.533302673536020230, -0.533344969094335710, -0.533387263319288870, -0.533429556210774150, -0.533471847768685170, -0.533514137992916580, +-0.533556426883363020, -0.533598714439917910, -0.533641000662476110, -0.533683285550931920, -0.533725569105179760, -0.533767851325113290, -0.533810132210627230, -0.533852411761616240, +-0.533894689977973740, -0.533936966859594580, -0.533979242406373070, -0.534021516618203410, -0.534063789494980350, -0.534106061036597410, -0.534148331242949250, -0.534190600113930710, +-0.534232867649435340, -0.534275133849357760, -0.534317398713592300, -0.534359662242033460, -0.534401924434575680, -0.534444185291112820, -0.534486444811539840, -0.534528702995750390, +-0.534570959843639230, -0.534613215355100650, -0.534655469530028960, -0.534697722368319030, -0.534739973869864380, -0.534782224034559770, -0.534824472862300060, -0.534866720352978780, +-0.534908966506490670, -0.534951211322730160, -0.534993454801591550, -0.535035696942969820, -0.535077937746758380, -0.535120177212852100, -0.535162415341145730, -0.535204652131533010, +-0.535246887583908590, -0.535289121698167000, -0.535331354474202990, -0.535373585911910200, -0.535415816011183380, -0.535458044771917500, -0.535500272194006090, -0.535542498277344010, +-0.535584723021825690, -0.535626946427345540, -0.535669168493798420, -0.535711389221077970, -0.535753608609079060, -0.535795826657696540, -0.535838043366824060, -0.535880258736356470, +-0.535922472766188210, -0.535964685456213790, -0.536006896806327960, -0.536049106816424590, -0.536091315486398880, -0.536133522816144460, -0.536175728805556200, -0.536217933454528620, +-0.536260136762956250, -0.536302338730733850, -0.536344539357755280, -0.536386738643915280, -0.536428936589108950, -0.536471133193229810, -0.536513328456172830, -0.536555522377832550, +-0.536597714958103490, -0.536639906196880510, -0.536682096094057370, -0.536724284649529040, -0.536766471863190260, -0.536808657734935020, -0.536850842264658180, -0.536893025452254150, +-0.536935207297617900, -0.536977387800643300, -0.537019566961225210, -0.537061744779258610, -0.537103921254637350, -0.537146096387256190, -0.537188270177009760, -0.537230442623792710, +-0.537272613727499900, -0.537314783488025190, -0.537356951905263560, -0.537399118979109970, -0.537441284709458070, -0.537483449096203050, -0.537525612139239330, -0.537567773838461660, +-0.537609934193764900, -0.537652093205042920, -0.537694250872190690, -0.537736407195103290, -0.537778562173674480, -0.537820715807799220, -0.537862868097372160, -0.537905019042288270, +-0.537947168642441520, -0.537989316897726890, -0.538031463808039230, -0.538073609373272640, -0.538115753593321980, -0.538157896468081990, -0.538200037997447200, -0.538242178181312700, +-0.538284317019572360, -0.538326454512121240, -0.538368590658854340, -0.538410725459665620, -0.538452858914450160, -0.538494991023102390, -0.538537121785517270, -0.538579251201589670, +-0.538621379271213560, -0.538663505994284470, -0.538705631370696160, -0.538747755400343700, -0.538789878083121950, -0.538831999418925460, -0.538874119407649400, -0.538916238049187650, +-0.538958355343435280, -0.539000471290287390, -0.539042585889638050, -0.539084699141382130, -0.539126811045414490, -0.539168921601629770, -0.539211030809923280, -0.539253138670188650, +-0.539295245182321300, -0.539337350346216220, -0.539379454161767250, -0.539421556628869810, -0.539463657747418330, -0.539505757517308230, -0.539547855938433240, -0.539589953010688680, +-0.539632048733969640, -0.539674143108169970, -0.539716236133185090, -0.539758327808909530, -0.539800418135238160, -0.539842507112066160, -0.539884594739287520, -0.539926681016797310, +-0.539968765944490840, -0.540010849522262080, -0.540052931750006240, -0.540095012627617940, -0.540137092154992170, -0.540179170332024120, -0.540221247158607750, -0.540263322634638170, +-0.540305396760010770, -0.540347469534619430, -0.540389540958359450, -0.540431611031125580, -0.540473679752813020, -0.540515747123315960, -0.540557813142529490, -0.540599877810348910, +-0.540641941126668300, -0.540684003091382760, -0.540726063704387250, -0.540768122965576530, -0.540810180874845890, -0.540852237432089430, -0.540894292637202460, -0.540936346490080040, +-0.540978398990616390, -0.541020450138706700, -0.541062499934245930, -0.541104548377128960, -0.541146595467250970, -0.541188641204506050, -0.541230685588789950, -0.541272728619996870, +-0.541314770298021770, -0.541356810622759870, -0.541398849594105890, -0.541440887211955160, -0.541482923476201970, -0.541524958386741310, -0.541566991943468690, -0.541609024146278210, +-0.541651054995065160, -0.541693084489724420, -0.541735112630151060, -0.541777139416240280, -0.541819164847886280, -0.541861188924984360, -0.541903211647429830, -0.541945233015116880, +-0.541987253027940820, -0.542029271685796730, -0.542071288988579700, -0.542113304936184150, -0.542155319528505380, -0.542197332765438690, -0.542239344646878170, -0.542281355172719360, +-0.542323364342857220, -0.542365372157186610, -0.542407378615602950, -0.542449383718000440, -0.542491387464274500, -0.542533389854320540, -0.542575390888032640, -0.542617390565306220, +-0.542659388886036490, -0.542701385850118180, -0.542743381457446720, -0.542785375707916520, -0.542827368601422890, -0.542869360137861130, -0.542911350317125670, -0.542953339139111810, +-0.542995326603714630, -0.543037312710829450, -0.543079297460350660, -0.543121280852173590, -0.543163262886193770, -0.543205243562305370, -0.543247222880403830, -0.543289200840384230, +-0.543331177442141660, -0.543373152685571510, -0.543415126570568120, -0.543457099097026890, -0.543499070264843340, -0.543541040073911690, -0.543583008524127440, -0.543624975615385700, +-0.543666941347581530, -0.543708905720610370, -0.543750868734366510, -0.543792830388745930, -0.543834790683642820, -0.543876749618952830, -0.543918707194570920, -0.543960663410392180, +-0.544002618266312240, -0.544044571762225320, -0.544086523898027030, -0.544128474673612810, -0.544170424088877060, -0.544212372143715100, -0.544254318838022330, -0.544296264171693740, +-0.544338208144624860, -0.544380150756710090, -0.544422092007844970, -0.544464031897924920, -0.544505970426844450, -0.544547907594499110, -0.544589843400783980, -0.544631777845594580, +-0.544673710928825330, -0.544715642650371870, -0.544757573010129610, -0.544799502007993100, -0.544841429643857840, -0.544883355917618940, -0.544925280829171800, -0.544967204378411730, +-0.545009126565233260, -0.545051047389531920, -0.545092966851203450, -0.545134884950142170, -0.545176801686243610, -0.545218717059403170, -0.545260631069515830, -0.545302543716477240, +-0.545344455000182030, -0.545386364920525610, -0.545428273477403750, -0.545470180670710740, -0.545512086500342330, -0.545553990966193610, -0.545595894068160450, -0.545637795806137030, +-0.545679696180019210, -0.545721595189702420, -0.545763492835081410, -0.545805389116051590, -0.545847284032508260, -0.545889177584346850, -0.545931069771462770, -0.545972960593750670, +-0.546014850051106170, -0.546056738143424920, -0.546098624870601350, -0.546140510232531300, -0.546182394229110080, -0.546224276860232780, -0.546266158125795150, -0.546308038025691720, +-0.546349916559818570, -0.546391793728070340, -0.546433669530342560, -0.546475543966530640, -0.546517417036529900, -0.546559288740235850, -0.546601159077543360, -0.546643028048347860, +-0.546684895652545190, -0.546726761890030000, -0.546768626760697820, -0.546810490264444060, -0.546852352401164140, -0.546894213170753600, -0.546936072573107280, -0.546977930608120720, +-0.547019787275689670, -0.547061642575708880, -0.547103496508073880, -0.547145349072680200, -0.547187200269423470, -0.547229050098198440, -0.547270898558900760, -0.547312745651426180, +-0.547354591375669330, -0.547396435731526080, -0.547438278718891720, -0.547480120337661690, -0.547521960587731620, -0.547563799468996360, -0.547605636981351560, -0.547647473124693080, +-0.547689307898915570, -0.547731141303914760, -0.547772973339586080, -0.547814804005825050, -0.547856633302527320, -0.547898461229587630, -0.547940287786902180, -0.547982112974365610, +-0.548023936791873780, -0.548065759239321990, -0.548107580316606000, -0.548149400023621340, -0.548191218360262740, -0.548233035326426200, -0.548274850922007340, -0.548316665146901140, +-0.548358478001003120, -0.548400289484208940, -0.548442099596414100, -0.548483908337514370, -0.548525715707404490, -0.548567521705980220, -0.548609326333137640, -0.548651129588771380, +-0.548692931472777200, -0.548734731985050740, -0.548776531125487850, -0.548818328893983300, -0.548860125290432820, -0.548901920314732390, -0.548943713966776880, -0.548985506246462030, +-0.549027297153683480, -0.549069086688336650, -0.549110874850317400, -0.549152661639520700, -0.549194447055842310, -0.549236231099178180, -0.549278013769423090, -0.549319795066472990, +-0.549361574990223310, -0.549403353540569790, -0.549445130717408190, -0.549486906520633480, -0.549528680950141400, -0.549570454005828050, -0.549612225687588160, -0.549653995995317720, +-0.549695764928912370, -0.549737532488267950, -0.549779298673279240, -0.549821063483842300, -0.549862826919853110, -0.549904588981206530, -0.549946349667798430, -0.549988108979524440, +-0.550029866916280200, -0.550071623477961680, -0.550113378664463640, -0.550155132475682260, -0.550196884911513310, -0.550238635971851850, -0.550280385656593870, -0.550322133965634790, +-0.550363880898870450, -0.550405626456196730, -0.550447370637508700, -0.550489113442702460, -0.550530854871673190, -0.550572594924316650, -0.550614333600528690, -0.550656070900204960, +-0.550697806823241320, -0.550739541369532850, -0.550781274538975520, -0.550823006331465410, -0.550864736746897400, -0.550906465785167440, -0.550948193446171410, -0.550989919729804930, +-0.551031644635963990, -0.551073368164543550, -0.551115090315439700, -0.551156811088548420, -0.551198530483764880, -0.551240248500984850, -0.551281965140104410, -0.551323680401019310, +-0.551365394283624630, -0.551407106787816460, -0.551448817913490870, -0.551490527660542960, -0.551532236028868580, -0.551573943018363710, -0.551615648628924090, -0.551657352860445590, +-0.551699055712823290, -0.551740757185953390, -0.551782457279732070, -0.551824155994054100, -0.551865853328815880, -0.551907549283912950, -0.551949243859241050, -0.551990937054696600, +-0.552032628870174350, -0.552074319305570490, -0.552116008360781230, -0.552157696035701530, -0.552199382330227690, -0.552241067244255370, -0.552282750777680740, -0.552324432930398790, +-0.552366113702305820, -0.552407793093298020, -0.552449471103270250, -0.552491147732118830, -0.552532822979739490, -0.552574496846028220, -0.552616169330880980, -0.552657840434192970, +-0.552699510155860390, -0.552741178495779420, -0.552782845453845040, -0.552824511029953560, -0.552866175224000940, -0.552907838035882730, -0.552949499465495320, -0.552991159512733810, +-0.553032818177494830, -0.553074475459673360, -0.553116131359165820, -0.553157785875867840, -0.553199439009675390, -0.553241090760484780, -0.553282741128190980, -0.553324390112690410, +-0.553366037713879160, -0.553407683931652520, -0.553449328765906690, -0.553490972216537420, -0.553532614283440800, -0.553574254966513020, -0.553615894265649280, -0.553657532180745650, +-0.553699168711698660, -0.553740803858403410, -0.553782437620756070, -0.553824069998652750, -0.553865700991989510, -0.553907330600661660, -0.553948958824565520, -0.553990585663597380, +-0.554032211117652440, -0.554073835186626900, -0.554115457870416720, -0.554157079168917990, -0.554198699082026900, -0.554240317609638660, -0.554281934751649660, -0.554323550507956230, +-0.554365164878453440, -0.554406777863037830, -0.554448389461605240, -0.554489999674051770, -0.554531608500273610, -0.554573215940165950, -0.554614821993625440, -0.554656426660548150, +-0.554698029940829400, -0.554739631834365590, -0.554781232341052700, -0.554822831460787150, -0.554864429193464130, -0.554906025538979940, -0.554947620497231120, -0.554989214068112970, +-0.555030806251521680, -0.555072397047353340, -0.555113986455504140, -0.555155574475870270, -0.555197161108347050, -0.555238746352830990, -0.555280330209218410, -0.555321912677404720, +-0.555363493757286110, -0.555405073448758890, -0.555446651751718920, -0.555488228666062730, -0.555529804191685520, -0.555571378328484240, -0.555612951076354110, -0.555654522435191640, +-0.555696092404892820, -0.555737660985353820, -0.555779228176470960, -0.555820793978139660, -0.555862358390256440, -0.555903921412717720, -0.555945483045418800, -0.555987043288256100, +-0.556028602141125820, -0.556070159603924140, -0.556111715676547270, -0.556153270358890840, -0.556194823650851270, -0.556236375552324970, -0.556277926063207360, -0.556319475183394860, +-0.556361022912783780, -0.556402569251270410, -0.556444114198750390, -0.556485657755119930, -0.556527199920275770, -0.556568740694113330, -0.556610280076528910, -0.556651818067418810, +-0.556693354666679130, -0.556734889874206500, -0.556776423689896330, -0.556817956113645040, -0.556859487145349160, -0.556901016784904330, -0.556942545032206860, -0.556984071887153040, +-0.557025597349639080, -0.557067121419561380, -0.557108644096815600, -0.557150165381298250, -0.557191685272905860, -0.557233203771533850, -0.557274720877078740, -0.557316236589436960, +-0.557357750908504920, -0.557399263834178040, -0.557440775366353170, -0.557482285504926620, -0.557523794249794040, -0.557565301600851940, -0.557606807557996520, -0.557648312121124200, +-0.557689815290131400, -0.557731317064913750, -0.557772817445367770, -0.557814316431390120, -0.557855814022876320, -0.557897310219722890, -0.557938805021826360, -0.557980298429082700, +-0.558021790441388670, -0.558063281058639780, -0.558104770280733130, -0.558146258107564130, -0.558187744539029530, -0.558229229575025520, -0.558270713215448520, -0.558312195460194950, +-0.558353676309160660, -0.558395155762242080, -0.558436633819336060, -0.558478110480338130, -0.558519585745144820, -0.558561059613652540, -0.558602532085757720, -0.558644003161356870, +-0.558685472840345640, -0.558726941122620670, -0.558768408008078810, -0.558809873496615590, -0.558851337588127550, -0.558892800282511320, -0.558934261579663310, -0.558975721479479380, +-0.559017179981856070, -0.559058637086690240, -0.559100092793877510, -0.559141547103314430, -0.559183000014897510, -0.559224451528523180, -0.559265901644087960, -0.559307350361487710, +-0.559348797680619070, -0.559390243601378680, -0.559431688123662510, -0.559473131247366970, -0.559514572972388710, -0.559556013298623920, -0.559597452225969460, -0.559638889754321080, +-0.559680325883575860, -0.559721760613629440, -0.559763193944378570, -0.559804625875719660, -0.559846056407549360, -0.559887485539764200, -0.559928913272259910, -0.559970339604933360, +-0.560011764537681310, -0.560053188070399610, -0.560094610202984790, -0.560136030935333480, -0.560177450267342110, -0.560218868198907540, -0.560260284729925400, -0.560301699860292550, +-0.560343113589905740, -0.560384525918660840, -0.560425936846454590, -0.560467346373183520, -0.560508754498744160, -0.560550161223033140, -0.560591566545946440, -0.560632970467381140, +-0.560674372987233110, -0.560715774105399190, -0.560757173821775700, -0.560798572136259390, -0.560839969048746890, -0.560881364559134180, -0.560922758667318110, -0.560964151373195440, +-0.561005542676662030, -0.561046932577614840, -0.561088321075950190, -0.561129708171564820, -0.561171093864355600, -0.561212478154218150, -0.561253861041049570, -0.561295242524746720, +-0.561336622605205340, -0.561378001282322400, -0.561419378555994550, -0.561460754426118540, -0.561502128892590320, -0.561543501955306780, -0.561584873614164870, -0.561626243869060350, +-0.561667612719890190, -0.561708980166551130, -0.561750346208939490, -0.561791710846952450, -0.561833074080485660, -0.561874435909436310, -0.561915796333701150, -0.561957155353176140, +-0.561998512967758270, -0.562039869177344050, -0.562081223981830250, -0.562122577381113710, -0.562163929375090410, -0.562205279963657540, -0.562246629146711200, -0.562287976924148340, +-0.562329323295865380, -0.562370668261759190, -0.562412011821726730, -0.562453353975663870, -0.562494694723467580, -0.562536034065034940, -0.562577372000261810, -0.562618708529045390, +-0.562660043651282080, -0.562701377366868650, -0.562742709675702170, -0.562784040577678500, -0.562825370072694840, -0.562866698160648050, -0.562908024841434210, -0.562949350114950180, +-0.562990673981092930, -0.563031996439759210, -0.563073317490845220, -0.563114637134247920, -0.563155955369864400, -0.563197272197590640, -0.563238587617323700, -0.563279901628960240, +-0.563321214232397120, -0.563362525427531290, -0.563403835214258740, -0.563445143592476660, -0.563486450562082020, -0.563527756122970900, -0.563569060275040390, -0.563610363018187230, +-0.563651664352308290, -0.563692964277300420, -0.563734262793059830, -0.563775559899483470, -0.563816855596468660, -0.563858149883911360, -0.563899442761708670, -0.563940734229757430, +-0.563982024287954630, -0.564023312936196450, -0.564064600174379980, -0.564105886002402410, -0.564147170420159720, -0.564188453427549090, -0.564229735024467380, -0.564271015210811240, +-0.564312293986477980, -0.564353571351363660, -0.564394847305365380, -0.564436121848380320, -0.564477394980304580, -0.564518666701035450, -0.564559937010469580, -0.564601205908503930, +-0.564642473395035480, -0.564683739469960640, -0.564725004133176720, -0.564766267384580020, -0.564807529224067520, -0.564848789651536290, -0.564890048666883080, -0.564931306270005100, +-0.564972562460798520, -0.565013817239160550, -0.565055070604988270, -0.565096322558178100, -0.565137573098627000, -0.565178822226232060, -0.565220069940890020, -0.565261316242498200, +-0.565302561130952670, -0.565343804606150860, -0.565385046667989830, -0.565426287316365790, -0.565467526551176050, -0.565508764372317450, -0.565550000779687310, -0.565591235773181930, +-0.565632469352698290, -0.565673701518134010, -0.565714932269384960, -0.565756161606348670, -0.565797389528922000, -0.565838616037001810, -0.565879841130485390, -0.565921064809269070, +-0.565962287073250030, -0.566003507922325680, -0.566044727356392220, -0.566085945375346960, -0.566127161979086750, -0.566168377167508670, -0.566209590940510040, -0.566250803297987050, +-0.566292014239837100, -0.566333223765957410, -0.566374431876244370, -0.566415638570595180, -0.566456843848906930, -0.566498047711076920, -0.566539250157001350, -0.566580451186577740, +-0.566621650799703390, -0.566662848996274500, -0.566704045776188490, -0.566745241139342440, -0.566786435085633200, -0.566827627614958200, -0.566868818727213840, -0.566910008422297440, +-0.566951196700106410, -0.566992383560536940, -0.567033569003486560, -0.567074753028852240, -0.567115935636531070, -0.567157116826420450, -0.567198296598416580, -0.567239474952417440, +-0.567280651888319110, -0.567321827406019220, -0.567363001505414850, -0.567404174186402880, -0.567445345448880810, -0.567486515292745080, -0.567527683717893080, -0.567568850724222250, +-0.567610016311628770, -0.567651180480010400, -0.567692343229264100, -0.567733504559286840, -0.567774664469976150, -0.567815822961228570, -0.567856980032941380, -0.567898135685012130, +-0.567939289917337110, -0.567980442729813850, -0.568021594122339550, -0.568062744094811610, -0.568103892647126460, -0.568145039779181520, -0.568186185490874410, -0.568227329782101440, +-0.568268472652760150, -0.568309614102747720, -0.568350754131961230, -0.568391892740298220, -0.568433029927655100, -0.568474165693929390, -0.568515300039018620, -0.568556432962819320, +-0.568597564465228800, -0.568638694546144460, -0.568679823205463400, -0.568720950443083130, -0.568762076258900070, -0.568803200652811870, -0.568844323624716040, -0.568885445174509010, +-0.568926565302088410, -0.568967684007351430, -0.569008801290195490, -0.569049917150517230, -0.569091031588214170, -0.569132144603183950, -0.569173256195323000, -0.569214366364528820, +-0.569255475110698740, -0.569296582433730050, -0.569337688333520160, -0.569378792809965840, -0.569419895862964380, -0.569460997492413630, -0.569502097698210030, -0.569543196480251200, +-0.569584293838434340, -0.569625389772656750, -0.569666484282816080, -0.569707577368808730, -0.569748669030532890, -0.569789759267885000, -0.569830848080762680, -0.569871935469063340, +-0.569913021432684070, -0.569954105971522630, -0.569995189085475530, -0.570036270774440520, -0.570077351038315140, -0.570118429876996120, -0.570159507290380900, -0.570200583278366980, +-0.570241657840851570, -0.570282730977732410, -0.570323802688906030, -0.570364872974270190, -0.570405941833722510, -0.570447009267159630, -0.570488075274479200, -0.570529139855578520, +-0.570570203010355440, -0.570611264738706490, -0.570652325040529320, -0.570693383915721770, -0.570734441364180390, -0.570775497385802800, -0.570816551980486530, -0.570857605148128890, +-0.570898656888627620, -0.570939707201879370, -0.570980756087781760, -0.571021803546232780, -0.571062849577128830, -0.571103894180367670, -0.571144937355846930, -0.571185979103463690, +-0.571227019423115930, -0.571268058314700290, -0.571309095778114510, -0.571350131813256330, -0.571391166420022520, -0.571432199598310710, -0.571473231348018420, -0.571514261669043400, +-0.571555290561282400, -0.571596318024633180, -0.571637344058993580, -0.571678368664260140, -0.571719391840330830, -0.571760413587103060, -0.571801433904474240, -0.571842452792342140, +-0.571883470250603600, -0.571924486279156370, -0.571965500877898330, -0.572006514046726200, -0.572047525785537640, -0.572088536094230380, -0.572129544972701740, -0.572170552420849690, +-0.572211558438570740, -0.572252563025763330, -0.572293566182324190, -0.572334567908151070, -0.572375568203141620, -0.572416567067193240, -0.572457564500203690, -0.572498560502069930, +-0.572539555072689830, -0.572580548211961140, -0.572621539919780710, -0.572662530196046520, -0.572703519040655860, -0.572744506453506500, -0.572785492434496170, -0.572826476983521850, +-0.572867460100481280, -0.572908441785272340, -0.572949422037792090, -0.572990400857938180, -0.573031378245608350, -0.573072354200700350, -0.573113328723111160, -0.573154301812738630, +-0.573195273469480630, -0.573236243693234230, -0.573277212483897070, -0.573318179841367010, -0.573359145765541480, -0.573400110256318430, -0.573441073313594730, -0.573482034937268240, +-0.573522995127237150, -0.573563953883398200, -0.573604911205649380, -0.573645867093888210, -0.573686821548012430, -0.573727774567920010, -0.573768726153507710, -0.573809676304673940, +-0.573850625021315670, -0.573891572303330880, -0.573932518150617080, -0.573973462563072020, -0.574014405540593690, -0.574055347083078930, -0.574096287190425820, -0.574137225862532350, +-0.574178163099295480, -0.574219098900613180, -0.574260033266383090, -0.574300966196502950, -0.574341897690870740, -0.574382827749383540, -0.574423756371939100, -0.574464683558435720, +-0.574505609308770260, -0.574546533622840800, -0.574587456500544990, -0.574628377941780900, -0.574669297946445500, -0.574710216514436880, -0.574751133645653110, -0.574792049339991060, +-0.574832963597348920, -0.574873876417624330, -0.574914787800715140, -0.574955697746519220, -0.574996606254933870, -0.575037513325856840, -0.575078418959186430, -0.575119323154819620, +-0.575160225912654590, -0.575201127232588870, -0.575242027114520440, -0.575282925558347260, -0.575323822563966300, -0.575364718131275880, -0.575405612260174060, -0.575446504950557820, +-0.575487396202325250, -0.575528286015374310, -0.575569174389602980, -0.575610061324908330, -0.575650946821188450, -0.575691830878341640, -0.575732713496264870, -0.575773594674856340, +-0.575814474414013900, -0.575855352713635190, -0.575896229573618410, -0.575937104993860750, -0.575977978974260400, -0.576018851514715320, -0.576059722615122840, -0.576100592275381020, +-0.576141460495387720, -0.576182327275040820, -0.576223192614238490, -0.576264056512877710, -0.576304918970857230, -0.576345779988074010, -0.576386639564426370, -0.576427497699812160, +-0.576468354394129250, -0.576509209647275700, -0.576550063459148830, -0.576590915829646830, -0.576631766758667790, -0.576672616246109100, -0.576713464291868870, -0.576754310895844840, +-0.576795156057935190, -0.576835999778037900, -0.576876842056050280, -0.576917682891870620, -0.576958522285397010, -0.576999360236526870, -0.577040196745158160, -0.577081031811189080, +-0.577121865434517820, -0.577162697615041460, -0.577203528352658310, -0.577244357647266780, -0.577285185498763950, -0.577326011907048130, -0.577366836872017400, -0.577407660393569500, +-0.577448482471602740, -0.577489303106014540, -0.577530122296702970, -0.577570940043566570, -0.577611756346502410, -0.577652571205408800, -0.577693384620183830, -0.577734196590725340, +-0.577775007116931750, -0.577815816198700370, -0.577856623835929280, -0.577897430028517120, -0.577938234776360970, -0.577979038079359240, -0.578019839937410020, -0.578060640350411380, +-0.578101439318260860, -0.578142236840856860, -0.578183032918097470, -0.578223827549880220, -0.578264620736103300, -0.578305412476664890, -0.578346202771462980, -0.578386991620395860, +-0.578427779023360960, -0.578468564980256560, -0.578509349490981210, -0.578550132555432080, -0.578590914173507500, -0.578631694345105750, -0.578672473070124820, -0.578713250348462990, +-0.578754026180017590, -0.578794800564687570, -0.578835573502370250, -0.578876344992963920, -0.578917115036366780, -0.578957883632476800, -0.578998650781192500, -0.579039416482411200, +-0.579080180736031290, -0.579120943541951430, -0.579161704900068800, -0.579202464810281810, -0.579243223272488780, -0.579283980286587670, -0.579324735852476900, -0.579365489970053990, +-0.579406242639217360, -0.579446993859865420, -0.579487743631895700, -0.579528491955206610, -0.579569238829696240, -0.579609984255263220, -0.579650728231804860, -0.579691470759219670, +-0.579732211837406200, -0.579772951466261730, -0.579813689645684920, -0.579854426375573940, -0.579895161655826890, -0.579935895486342280, -0.579976627867017540, -0.580017358797751290, +-0.580058088278441960, -0.580098816308987080, -0.580139542889285040, -0.580180268019234280, -0.580220991698732760, -0.580261713927679220, -0.580302434705970980, -0.580343154033506670, +-0.580383871910184810, -0.580424588335902940, -0.580465303310559570, -0.580506016834053010, -0.580546728906281670, -0.580587439527143200, -0.580628148696536120, -0.580668856414359060, +-0.580709562680509440, -0.580750267494885900, -0.580790970857386730, -0.580831672767910150, -0.580872373226354770, -0.580913072232618120, -0.580953769786598630, -0.580994465888195260, +-0.581035160537305310, -0.581075853733827420, -0.581116545477659900, -0.581157235768701040, -0.581197924606849380, -0.581238611992002660, -0.581279297924059750, -0.581319982402918160, +-0.581360665428476640, -0.581401347000633510, -0.581442027119286940, -0.581482705784335700, -0.581523382995677300, -0.581564058753210490, -0.581604733056833910, -0.581645405906445090, +-0.581686077301942770, -0.581726747243225260, -0.581767415730190860, -0.581808082762738320, -0.581848748340765280, -0.581889412464170250, -0.581930075132852110, -0.581970736346708370, +-0.582011396105637790, -0.582052054409538780, -0.582092711258309970, -0.582133366651849000, -0.582174020590054630, -0.582214673072825590, -0.582255324100059420, -0.582295973671655090, +-0.582336621787510780, -0.582377268447524800, -0.582417913651596120, -0.582458557399622270, -0.582499199691501990, -0.582539840527134150, -0.582580479906416260, -0.582621117829247190, +-0.582661754295525360, -0.582702389305149170, -0.582743022858017270, -0.582783654954027510, -0.582824285593078640, -0.582864914775069410, -0.582905542499897460, -0.582946168767461750, +-0.582986793577660590, -0.583027416930392840, -0.583068038825556020, -0.583108659263049330, -0.583149278242771190, -0.583189895764619550, -0.583230511828493170, -0.583271126434290580, +-0.583311739581910070, -0.583352351271250620, -0.583392961502209870, -0.583433570274686790, -0.583474177588580110, -0.583514783443787710, -0.583555387840208220, -0.583595990777740380, +-0.583636592256282500, -0.583677192275733450, -0.583717790835991070, -0.583758387936954670, -0.583798983578521890, -0.583839577760591590, -0.583880170483062400, -0.583920761745832850, +-0.583961351548801690, -0.584001939891866770, -0.584042526774927070, -0.584083112197881340, -0.584123696160627540, -0.584164278663064420, -0.584204859705090620, -0.584245439286604660, +-0.584286017407505520, -0.584326594067690940, -0.584367169267059890, -0.584407743005511350, -0.584448315282942940, -0.584488886099253870, -0.584529455454342540, -0.584570023348107930, +-0.584610589780447890, -0.584651154751261390, -0.584691718260447300, -0.584732280307903700, -0.584772840893529210, -0.584813400017222820, -0.584853957678882820, -0.584894513878408300, +-0.584935068615697110, -0.584975621890648220, -0.585016173703160720, -0.585056724053132360, -0.585097272940462210, -0.585137820365048910, -0.585178366326791100, -0.585218910825587630, +-0.585259453861336600, -0.585299995433937290, -0.585340535543287580, -0.585381074189286530, -0.585421611371832800, -0.585462147090825110, -0.585502681346162350, -0.585543214137742570, +-0.585583745465464660, -0.585624275329227780, -0.585664803728929930, -0.585705330664470060, -0.585745856135746810, -0.585786380142658940, -0.585826902685105510, -0.585867423762984400, +-0.585907943376194780, -0.585948461524635640, -0.585988978208204950, -0.586029493426801880, -0.586070007180325090, -0.586110519468673540, -0.586151030291745420, -0.586191539649439710, +-0.586232047541655590, -0.586272553968290810, -0.586313058929244790, -0.586353562424416050, -0.586394064453703460, -0.586434565017005970, -0.586475064114221790, -0.586515561745249990, +-0.586556057909989550, -0.586596552608338650, -0.586637045840196380, -0.586677537605461490, -0.586718027904032710, -0.586758516735809250, -0.586799004100689190, -0.586839489998571610, +-0.586879974429355580, -0.586920457392939300, -0.586960938889221960, -0.587001418918102200, -0.587041897479479210, -0.587082374573251190, -0.587122850199317200, -0.587163324357576450, +-0.587203797047927020, -0.587244268270268100, -0.587284738024498430, -0.587325206310516990, -0.587365673128222960, -0.587406138477514330, -0.587446602358290380, -0.587487064770450210, +-0.587527525713892110, -0.587567985188515160, -0.587608443194218230, -0.587648899730900180, -0.587689354798460300, -0.587729808396796560, -0.587770260525808720, -0.587810711185394960, +-0.587851160375454260, -0.587891608095885810, -0.587932054346588240, -0.587972499127460970, -0.588012942438402080, -0.588053384279310750, -0.588093824650086420, -0.588134263550627150, +-0.588174700980832130, -0.588215136940600460, -0.588255571429830870, -0.588296004448422780, -0.588336435996274280, -0.588376866073284650, -0.588417294679353330, -0.588457721814378390, +-0.588498147478259010, -0.588538571670894410, -0.588578994392183750, -0.588619415642025130, -0.588659835420318080, -0.588700253726961660, -0.588740670561854420, -0.588781085924895420, +-0.588821499815983640, -0.588861912235018160, -0.588902323181898280, -0.588942732656522190, -0.588983140658789320, -0.589023547188598950, -0.589063952245849400, -0.589104355830439850, +-0.589144757942269500, -0.589185158581237210, -0.589225557747242500, -0.589265955440183340, -0.589306351659959480, -0.589346746406470000, -0.589387139679613310, -0.589427531479288720, +-0.589467921805395420, -0.589508310657832600, -0.589548698036498560, -0.589589083941292950, -0.589629468372114830, -0.589669851328862850, -0.589710232811436090, -0.589750612819733840, +-0.589790991353654980, -0.589831368413099020, -0.589871743997964380, -0.589912118108150250, -0.589952490743556270, -0.589992861904080620, -0.590033231589622950, -0.590073599800082120, +-0.590113966535357300, -0.590154331795347930, -0.590194695579952300, -0.590235057889070380, -0.590275418722600360, -0.590315778080441890, -0.590356135962493920, -0.590396492368655660, +-0.590436847298826510, -0.590477200752904880, -0.590517552730790210, -0.590557903232382110, -0.590598252257578780, -0.590638599806279860, -0.590678945878384540, -0.590719290473791680, +-0.590759633592401130, -0.590799975234110990, -0.590840315398820980, -0.590880654086430530, -0.590920991296838060, -0.590961327029943200, -0.591001661285644910, -0.591041994063842950, +-0.591082325364435500, -0.591122655187322320, -0.591162983532402930, -0.591203310399575630, -0.591243635788740060, -0.591283959699795410, -0.591324282132640880, -0.591364603087175980, +-0.591404922563299240, -0.591445240560910190, -0.591485557079908350, -0.591525872120192250, -0.591566185681661530, -0.591606497764215370, -0.591646808367752850, -0.591687117492173840, +-0.591727425137376530, -0.591767731303260660, -0.591808035989725870, -0.591848339196670680, -0.591888640923994620, -0.591928941171596890, -0.591969239939377220, -0.592009537227234040, +-0.592049833035067090, -0.592090127362775890, -0.592130420210258970, -0.592170711577416080, -0.592211001464146290, -0.592251289870349140, -0.592291576795924040, -0.592331862240769610, +-0.592372146204785620, -0.592412428687871580, -0.592452709689926140, -0.592492989210848810, -0.592533267250539120, -0.592573543808896260, -0.592613818885819880, -0.592654092481208480, +-0.592694364594962390, -0.592734635226979890, -0.592774904377160960, -0.592815172045404570, -0.592855438231610350, -0.592895702935677950, -0.592935966157505880, -0.592976227896993890, +-0.593016488154041730, -0.593056746928547930, -0.593097004220412230, -0.593137260029534150, -0.593177514355812780, -0.593217767199148090, -0.593258018559438600, -0.593298268436584060, +-0.593338516830484220, -0.593378763741037710, -0.593419009168144270, -0.593459253111703330, -0.593499495571614630, -0.593539736547776810, -0.593579976040089610, -0.593620214048452890, +-0.593660450572765290, -0.593700685612926550, -0.593740919168836090, -0.593781151240393210, -0.593821381827498000, -0.593861610930048860, -0.593901838547945760, -0.593942064681088340, +-0.593982289329375470, -0.594022512492706880, -0.594062734170981990, -0.594102954364100320, -0.594143173071961520, -0.594183390294464430, -0.594223606031508920, -0.594263820282994850, +-0.594304033048820730, -0.594344244328886550, -0.594384454123091820, -0.594424662431336180, -0.594464869253518600, -0.594505074589538940, -0.594545278439296830, -0.594585480802691250, +-0.594625681679621930, -0.594665881069988410, -0.594706078973690100, -0.594746275390627080, -0.594786470320697980, -0.594826663763802670, -0.594866855719841100, -0.594907046188712040, +-0.594947235170315340, -0.594987422664550510, -0.595027608671317210, -0.595067793190515170, -0.595107976222043260, -0.595148157765801880, -0.595188337821689670, -0.595228516389606610, +-0.595268693469452330, -0.595308869061126230, -0.595349043164528410, -0.595389215779557610, -0.595429386906113690, -0.595469556544096720, -0.595509724693405460, -0.595549891353939990, +-0.595590056525599710, -0.595630220208284270, -0.595670382401893630, -0.595710543106326760, -0.595750702321483530, -0.595790860047263780, -0.595831016283566610, -0.595871171030291860, +-0.595911324287339280, -0.595951476054608630, -0.595991626331998980, -0.596031775119410300, -0.596071922416742560, -0.596112068223894510, -0.596152212540766450, -0.596192355367257790, +-0.596232496703268280, -0.596272636548697780, -0.596312774903445360, -0.596352911767411120, -0.596393047140494900, -0.596433181022595680, -0.596473313413613540, -0.596513444313448100, +-0.596553573721999020, -0.596593701639166360, -0.596633828064849100, -0.596673952998947650, -0.596714076441360990, -0.596754198391989070, -0.596794318850731640, -0.596834437817488460, +-0.596874555292159600, -0.596914671274643930, -0.596954785764841620, -0.596994898762652660, -0.597035010267976120, -0.597075120280711970, -0.597115228800760180, -0.597155335828020160, +-0.597195441362392220, -0.597235545403775330, -0.597275647952069550, -0.597315749007175100, -0.597355848568990820, -0.597395946637417020, -0.597436043212353220, -0.597476138293699720, +-0.597516231881355610, -0.597556323975220850, -0.597596414575195630, -0.597636503681178930, -0.597676591293071050, -0.597716677410771720, -0.597756762034180710, -0.597796845163198090, +-0.597836926797723050, -0.597877006937655660, -0.597917085582896140, -0.597957162733343540, -0.597997238388898070, -0.598037312549459470, -0.598077385214927480, -0.598117456385202530, +-0.598157526060183580, -0.598197594239770700, -0.598237660923864320, -0.598277726112363410, -0.598317789805168140, -0.598357852002178390, -0.598397912703294340, -0.598437971908415190, +-0.598478029617441120, -0.598518085830272330, -0.598558140546808000, -0.598598193766948230, -0.598638245490593080, -0.598678295717642310, -0.598718344447996100, -0.598758391681553650, +-0.598798437418215260, -0.598838481657881120, -0.598878524400450420, -0.598918565645823460, -0.598958605393900000, -0.598998643644580110, -0.599038680397763980, -0.599078715653350690, +-0.599118749411240990, -0.599158781671334180, -0.599198812433530350, -0.599238841697729450, -0.599278869463831470, -0.599318895731736580, -0.599358920501344210, -0.599398943772554540, +-0.599438965545267880, -0.599478985819383410, -0.599519004594801450, -0.599559021871421960, -0.599599037649145020, -0.599639051927870700, -0.599679064707498540, -0.599719075987928620, +-0.599759085769061450, -0.599799094050796120, -0.599839100833033050, -0.599879106115672300, -0.599919109898614080, -0.599959112181757790, -0.599999112965003740, -0.600039112248252240, +-0.600079110031402570, -0.600119106314355170, -0.600159101097009870, -0.600199094379267000, -0.600239086161026610, -0.600279076442188250, -0.600319065222652100, -0.600359052502318800, +-0.600399038281087320, -0.600439022558858390, -0.600479005335531890, -0.600518986611007780, -0.600558966385186690, -0.600598944657967700, -0.600638921429251460, -0.600678896698938150, +-0.600718870466927290, -0.600758842733119300, -0.600798813497414150, -0.600838782759712360, -0.600878750519913350, -0.600918716777917310, -0.600958681533624860, -0.600998644786935430, +-0.601038606537749320, -0.601078566785966720, -0.601118525531487700, -0.601158482774212690, -0.601198438514041200, -0.601238392750873540, -0.601278345484610230, -0.601318296715150800, +-0.601358246442395550, -0.601398194666244670, -0.601438141386598350, -0.601478086603357000, -0.601518030316420150, -0.601557972525688540, -0.601597913231061600, -0.601637852432439950, +-0.601677790129723560, -0.601717726322812840, -0.601757661011607990, -0.601797594196008760, -0.601837525875915550, -0.601877456051228780, -0.601917384721848080, -0.601957311887673980, +-0.601997237548606570, -0.602037161704546020, -0.602077084355392870, -0.602117005501046740, -0.602156925141408060, -0.602196843276377460, -0.602236759905854350, -0.602276675029739360, +-0.602316588647932690, -0.602356500760334980, -0.602396411366845520, -0.602436320467365170, -0.602476228061794240, -0.602516134150032470, -0.602556038731980380, -0.602595941807538060, +-0.602635843376606030, -0.602675743439084700, -0.602715641994873600, -0.602755539043873470, -0.602795434585984840, -0.602835328621107220, -0.602875221149141380, -0.602915112169987390, +-0.602955001683545650, -0.602994889689716820, -0.603034776188400290, -0.603074661179496930, -0.603114544662907260, -0.603154426638530810, -0.603194307106268310, -0.603234186066020080, +-0.603274063517686640, -0.603313939461167850, -0.603353813896364110, -0.603393686823176180, -0.603433558241503690, -0.603473428151247380, -0.603513296552307340, -0.603553163444584210, +-0.603593028827978490, -0.603632892702389840, -0.603672755067718890, -0.603712615923866490, -0.603752475270732170, -0.603792333108216670, -0.603832189436220300, -0.603872044254643470, +-0.603911897563386920, -0.603951749362350300, -0.603991599651434560, -0.604031448430539570, -0.604071295699565860, -0.604111141458414050, -0.604150985706984220, -0.604190828445177350, +-0.604230669672893070, -0.604270509390032130, -0.604310347596495270, -0.604350184292182120, -0.604390019476993560, -0.604429853150829980, -0.604469685313591800, -0.604509515965179660, +-0.604549345105493410, -0.604589172734433800, -0.604628998851901580, -0.604668823457796600, -0.604708646552019500, -0.604748468134470700, -0.604788288205051260, -0.604828106763660610, +-0.604867923810199710, -0.604907739344569430, -0.604947553366669390, -0.604987365876400450, -0.605027176873663140, -0.605066986358357870, -0.605106794330385500, -0.605146600789645770, +-0.605186405736039550, -0.605226209169467680, -0.605266011089829910, -0.605305811497027110, -0.605345610390959800, -0.605385407771528490, -0.605425203638634060, -0.605464997992176120, +-0.605504790832055770, -0.605544582158173860, -0.605584371970430020, -0.605624160268725340, -0.605663947052960230, -0.605703732323035540, -0.605743516078851240, -0.605783298320308080, +-0.605823079047307140, -0.605862858259748060, -0.605902635957531910, -0.605942412140559110, -0.605982186808730280, -0.606021959961946300, -0.606061731600107120, -0.606101501723113610, +-0.606141270330866730, -0.606181037423266340, -0.606220803000213300, -0.606260567061608250, -0.606300329607351810, -0.606340090637344840, -0.606379850151487320, -0.606419608149680540, +-0.606459364631824370, -0.606499119597819880, -0.606538873047567480, -0.606578624980967930, -0.606618375397922180, -0.606658124298330100, -0.606697871682092770, -0.606737617549111040, +-0.606777361899284990, -0.606817104732515490, -0.606856846048703270, -0.606896585847748970, -0.606936324129553450, -0.606976060894016790, -0.607015796141040060, -0.607055529870524140, +-0.607095262082368970, -0.607134992776475760, -0.607174721952745020, -0.607214449611077840, -0.607254175751374190, -0.607293900373535030, -0.607333623477461560, -0.607373345063053630, +-0.607413065130212430, -0.607452783678838480, -0.607492500708832540, -0.607532216220095790, -0.607571930212528090, -0.607611642686030520, -0.607651353640504270, -0.607691063075849300, +-0.607730770991966600, -0.607770477388757000, -0.607810182266121270, -0.607849885623960360, -0.607889587462174360, -0.607929287780664800, -0.607968986579331740, -0.608008683858076050, +-0.608048379616798810, -0.608088073855400530, -0.608127766573782420, -0.608167457771844560, -0.608207147449488120, -0.608246835606614080, -0.608286522243122520, -0.608326207358914850, +-0.608365890953891490, -0.608405573027953510, -0.608445253581001880, -0.608484932612936790, -0.608524610123659440, -0.608564286113070900, -0.608603960581071140, -0.608643633527561680, +-0.608683304952442940, -0.608722974855616110, -0.608762643236982150, -0.608802310096441150, -0.608841975433894840, -0.608881639249243210, -0.608921301542387440, -0.608960962313228380, +-0.609000621561667010, -0.609040279287604400, -0.609079935490940750, -0.609119590171577240, -0.609159243329415070, -0.609198894964354530, -0.609238545076296710, -0.609278193665142460, +-0.609317840730792870, -0.609357486273148900, -0.609397130292110960, -0.609436772787580130, -0.609476413759457710, -0.609516053207643900, -0.609555691132040000, -0.609595327532546860, +-0.609634962409065780, -0.609674595761496960, -0.609714227589741590, -0.609753857893700960, -0.609793486673275490, -0.609833113928366140, -0.609872739658874120, -0.609912363864700160, +-0.609951986545745670, -0.609991607701910970, -0.610031227333097110, -0.610070845439205640, -0.610110462020136630, -0.610150077075791500, -0.610189690606071090, -0.610229302610876600, +-0.610268913090109110, -0.610308522043669030, -0.610348129471458000, -0.610387735373376210, -0.610427339749325170, -0.610466942599205750, -0.610506543922918920, -0.610546143720366200, +-0.610585741991447660, -0.610625338736064840, -0.610664933954119030, -0.610704527645510530, -0.610744119810140650, -0.610783710447910470, -0.610823299558721060, -0.610862887142473720, +-0.610902473199068870, -0.610942057728407820, -0.610981640730391960, -0.611021222204921610, -0.611060802151898290, -0.611100380571222850, -0.611139957462796920, -0.611179532826520710, +-0.611219106662295620, -0.611258678970023170, -0.611298249749603670, -0.611337819000938530, -0.611377386723928830, -0.611416952918475640, -0.611456517584480500, -0.611496080721843690, +-0.611535642330466640, -0.611575202410250870, -0.611614760961096680, -0.611654317982905700, -0.611693873475578800, -0.611733427439017370, -0.611772979873122620, -0.611812530777795070, +-0.611852080152936240, -0.611891627998447430, -0.611931174314229390, -0.611970719100183300, -0.612010262356210370, -0.612049804082212210, -0.612089344278089250, -0.612128882943742790, +-0.612168420079074570, -0.612207955683984890, -0.612247489758375400, -0.612287022302147150, -0.612326553315201250, -0.612366082797439430, -0.612405610748762100, -0.612445137169070560, +-0.612484662058266680, -0.612524185416250750, -0.612563707242924300, -0.612603227538188740, -0.612642746301944930, -0.612682263534094720, -0.612721779234538410, -0.612761293403178090, +-0.612800806039914160, -0.612840317144648260, -0.612879826717281470, -0.612919334757715210, -0.612958841265850870, -0.612998346241589110, -0.613037849684831550, -0.613077351595479600, +-0.613116851973434020, -0.613156350818596210, -0.613195848130867580, -0.613235343910149330, -0.613274838156343090, -0.613314330869349390, -0.613353822049069960, -0.613393311695406230, +-0.613432799808258820, -0.613472286387529490, -0.613511771433119410, -0.613551254944930240, -0.613590736922862590, -0.613630217366818110, -0.613669696276698430, -0.613709173652404180, +-0.613748649493837010, -0.613788123800898200, -0.613827596573489060, -0.613867067811511240, -0.613906537514865460, -0.613946005683453370, -0.613985472317176480, -0.614024937415935670, +-0.614064400979632550, -0.614103863008168330, -0.614143323501444520, -0.614182782459362750, -0.614222239881823670, -0.614261695768728910, -0.614301150119980320, -0.614340602935478540, +-0.614380054215125200, -0.614419503958821830, -0.614458952166469950, -0.614498398837970310, -0.614537843973224750, -0.614577287572134920, -0.614616729634601460, -0.614656170160526210, +-0.614695609149810580, -0.614735046602355890, -0.614774482518063990, -0.614813916896835400, -0.614853349738572090, -0.614892781043175800, -0.614932210810547160, -0.614971639040588050, +-0.615011065733199750, -0.615050490888283900, -0.615089914505742020, -0.615129336585475080, -0.615168757127385170, -0.615208176131373020, -0.615247593597340490, -0.615287009525188890, +-0.615326423914819730, -0.615365836766134990, -0.615405248079035180, -0.615444657853422280, -0.615484066089198150, -0.615523472786263400, -0.615562877944520030, -0.615602281563869540, +-0.615641683644213230, -0.615681084185453090, -0.615720483187489950, -0.615759880650225470, -0.615799276573561820, -0.615838670957399530, -0.615878063801640560, -0.615917455106186450, +-0.615956844870938940, -0.615996233095799100, -0.616035619780668680, -0.616075004925449530, -0.616114388530042520, -0.616153770594349500, -0.616193151118272110, -0.616232530101711750, +-0.616271907544570510, -0.616311283446749130, -0.616350657808149570, -0.616390030628673700, -0.616429401908222370, -0.616468771646697560, -0.616508139844000770, -0.616547506500033650, +-0.616586871614698160, -0.616626235187895170, -0.616665597219526520, -0.616704957709494180, -0.616744316657699240, -0.616783674064043440, -0.616823029928428410, -0.616862384250756230, +-0.616901737030927650, -0.616941088268844750, -0.616980437964409600, -0.617019786117522840, -0.617059132728086770, -0.617098477796002800, -0.617137821321172560, -0.617177163303498140, +-0.617216503742880510, -0.617255842639221620, -0.617295179992423560, -0.617334515802387070, -0.617373850069014350, -0.617413182792206920, -0.617452513971866620, -0.617491843607895330, +-0.617531171700194110, -0.617570498248665390, -0.617609823253210010, -0.617649146713730060, -0.617688468630127270, -0.617727789002303300, -0.617767107830160090, -0.617806425113598960, +-0.617845740852521640, -0.617885055046830330, -0.617924367696426110, -0.617963678801210840, -0.618002988361086470, -0.618042296375954650, -0.618081602845717340, -0.618120907770275730, +-0.618160211149531900, -0.618199512983387820, -0.618238813271744570, -0.618278112014504440, -0.618317409211568860, -0.618356704862840220, -0.618395998968219400, -0.618435291527608680, +-0.618474582540910030, -0.618513872008024550, -0.618553159928854400, -0.618592446303301350, -0.618631731131267130, -0.618671014412654040, -0.618710296147362950, -0.618749576335296260, +-0.618788854976355830, -0.618828132070443070, -0.618867407617459840, -0.618906681617308110, -0.618945954069889730, -0.618985224975106770, -0.619024494332860440, -0.619063762143052920, +-0.619103028405586290, -0.619142293120361730, -0.619181556287281440, -0.619220817906247280, -0.619260077977161430, -0.619299336499924970, -0.619338593474440200, -0.619377848900609320, +-0.619417102778333510, -0.619456355107514840, -0.619495605888055300, -0.619534855119856840, -0.619574102802821550, -0.619613348936850610, -0.619652593521846320, -0.619691836557710870, +-0.619731078044345570, -0.619770317981652500, -0.619809556369533610, -0.619848793207890880, -0.619888028496626500, -0.619927262235641650, -0.619966494424839090, -0.620005725064119880, +-0.620044954153386450, -0.620084181692540540, -0.620123407681484220, -0.620162632120119680, -0.620201855008348240, -0.620241076346072170, -0.620280296133193800, -0.620319514369614300, +-0.620358731055235980, -0.620397946189960800, -0.620437159773690850, -0.620476371806328310, -0.620515582287774480, -0.620554791217931780, -0.620593998596702390, -0.620633204423987620, +-0.620672408699689870, -0.620711611423711120, -0.620750812595953660, -0.620790012216318800, -0.620829210284708940, -0.620868406801026400, -0.620907601765172570, -0.620946795177049650, +-0.620985987036559720, -0.621025177343604850, -0.621064366098087460, -0.621103553299908740, -0.621142738948971100, -0.621181923045176940, -0.621221105588427690, -0.621260286578625640, +-0.621299466015672990, -0.621338643899471580, -0.621377820229923940, -0.621416995006931370, -0.621456168230396620, -0.621495339900221210, -0.621534510016307330, -0.621573678578557280, +-0.621612845586873020, -0.621652011041156860, -0.621691174941310430, -0.621730337287236150, -0.621769498078836300, -0.621808657316012310, -0.621847814998666700, -0.621886971126701550, +-0.621926125700019040, -0.621965278718521470, -0.622004430182110380, -0.622043580090688280, -0.622082728444157460, -0.622121875242419580, -0.622161020485377030, -0.622200164172931780, +-0.622239306304986580, -0.622278446881442740, -0.622317585902202760, -0.622356723367169300, -0.622395859276243520, -0.622434993629328190, -0.622474126426325270, -0.622513257667137170, +-0.622552387351666180, -0.622591515479813840, -0.622630642051482770, -0.622669767066575510, -0.622708890524993340, -0.622748012426639130, -0.622787132771414730, -0.622826251559222550, +-0.622865368789965120, -0.622904484463543850, -0.622943598579861370, -0.622982711138820310, -0.623021822140322090, -0.623060931584269340, -0.623100039470564250, -0.623139145799109340, +-0.623178250569806360, -0.623217353782557600, -0.623256455437265930, -0.623295555533832760, -0.623334654072160600, -0.623373751052151870, -0.623412846473708760, -0.623451940336733900, +-0.623491032641128820, -0.623530123386796140, -0.623569212573638510, -0.623608300201557550, -0.623647386270455790, -0.623686470780235540, -0.623725553730799190, -0.623764635122049270, +-0.623803714953887420, -0.623842793226216610, -0.623881869938938460, -0.623920945091955610, -0.623960018685170480, -0.623999090718485250, -0.624038161191802660, -0.624077230105024360, +-0.624116297458052970, -0.624155363250791130, -0.624194427483140580, -0.624233490155003960, -0.624272551266283560, -0.624311610816881800, -0.624350668806701430, -0.624389725235643960, +-0.624428780103612250, -0.624467833410508820, -0.624506885156235540, -0.624545935340695020, -0.624584983963789700, -0.624624031025422300, -0.624663076525494350, -0.624702120463908830, +-0.624741162840568350, -0.624780203655374570, -0.624819242908230320, -0.624858280599037920, -0.624897316727699770, -0.624936351294118730, -0.624975384298196550, -0.625014415739835740, +-0.625053445618939390, -0.625092473935409010, -0.625131500689147470, -0.625170525880057170, -0.625209549508040530, -0.625248571573000400, -0.625287592074838420, -0.625326611013457550, +-0.625365628388760530, -0.625404644200649010, -0.625443658449025830, -0.625482671133793630, -0.625521682254855050, -0.625560691812111940, -0.625599699805467040, -0.625638706234823210, +-0.625677711100082410, -0.625716714401147180, -0.625755716137920250, -0.625794716310304030, -0.625833714918201390, -0.625872711961514060, -0.625911707440144900, -0.625950701353996890, +-0.625989693702971860, -0.626028684486972460, -0.626067673705901440, -0.626106661359661200, -0.626145647448154600, -0.626184631971283600, -0.626223614928951290, -0.626262596321059740, +-0.626301576147511590, -0.626340554408209570, -0.626379531103056110, -0.626418506231954160, -0.626457479794805590, -0.626496451791513360, -0.626535422221980330, -0.626574391086108460, +-0.626613358383800500, -0.626652324114959190, -0.626691288279487170, -0.626730250877287180, -0.626769211908261180, -0.626808171372312260, -0.626847129269343160, -0.626886085599255960, +-0.626925040361953510, -0.626963993557338450, -0.627002945185313740, -0.627041895245781360, -0.627080843738644260, -0.627119790663805300, -0.627158736021166560, -0.627197679810631010, +-0.627236622032101290, -0.627275562685480010, -0.627314501770670050, -0.627353439287573590, -0.627392375236093590, -0.627431309616132920, -0.627470242427593640, -0.627509173670378730, +-0.627548103344390930, -0.627587031449532870, -0.627625957985707530, -0.627664882952816970, -0.627703806350764170, -0.627742728179452310, -0.627781648438783150, -0.627820567128659970, +-0.627859484248985300, -0.627898399799662330, -0.627937313780593030, -0.627976226191680360, -0.628015137032827520, -0.628054046303936460, -0.628092954004910390, -0.628131860135651810, +-0.628170764696063590, -0.628209667686048910, -0.628248569105509640, -0.628287468954348950, -0.628326367232469930, -0.628365263939774650, -0.628404159076166200, -0.628443052641547430, +-0.628481944635820860, -0.628520835058889890, -0.628559723910656510, -0.628598611191024110, -0.628637496899894900, -0.628676381037171940, -0.628715263602757980, -0.628754144596555880, +-0.628793024018468700, -0.628831901868398770, -0.628870778146248920, -0.628909652851922570, -0.628948525985321690, -0.628987397546349580, -0.629026267534908870, -0.629065135950902520, +-0.629104002794233730, -0.629142868064804570, -0.629181731762518240, -0.629220593887277910, -0.629259454438985680, -0.629298313417544940, -0.629337170822858340, -0.629376026654829170, +-0.629414880913359620, -0.629453733598352770, -0.629492584709712030, -0.629531434247339480, -0.629570282211138310, -0.629609128601011480, -0.629647973416861740, -0.629686816658592500, +-0.629725658326105830, -0.629764498419305040, -0.629803336938093320, -0.629842173882372960, -0.629881009252047150, -0.629919843047018760, -0.629958675267190850, -0.629997505912466500, +-0.630036334982748140, -0.630075162477938930, -0.630113988397942080, -0.630152812742660000, -0.630191635511995860, -0.630230456705852540, -0.630269276324133540, -0.630308094366740960, +-0.630346910833578190, -0.630385725724548430, -0.630424539039553980, -0.630463350778498240, -0.630502160941284200, -0.630540969527814580, -0.630579776537993020, -0.630618581971721600, +-0.630657385828903850, -0.630696188109442830, -0.630734988813241080, -0.630773787940201780, -0.630812585490228120, -0.630851381463222950, -0.630890175859089570, -0.630928968677730520, +-0.630967759919049410, -0.631006549582948550, -0.631045337669331240, -0.631084124178100670, -0.631122909109159690, -0.631161692462411830, -0.631200474237759380, -0.631239254435105760, +-0.631278033054354370, -0.631316810095407630, -0.631355585558168730, -0.631394359442540850, -0.631433131748427190, -0.631471902475731040, -0.631510671624354700, -0.631549439194201700, +-0.631588205185175440, -0.631626969597178340, -0.631665732430113810, -0.631704493683885040, -0.631743253358395320, -0.631782011453547070, -0.631820767969243800, -0.631859522905389050, +-0.631898276261885110, -0.631937028038635380, -0.631975778235543180, -0.632014526852511470, -0.632053273889443880, -0.632092019346242710, -0.632130763222811480, -0.632169505519053710, +-0.632208246234871820, -0.632246985370169320, -0.632285722924849300, -0.632324458898815060, -0.632363193291969990, -0.632401926104216530, -0.632440657335458620, -0.632479386985598800, +-0.632518115054540480, -0.632556841542186830, -0.632595566448441170, -0.632634289773206790, -0.632673011516386440, -0.632711731677883530, -0.632750450257601680, -0.632789167255443320, +-0.632827882671312070, -0.632866596505111120, -0.632905308756743670, -0.632944019426113340, -0.632982728513122540, -0.633021436017674910, -0.633060141939674080, -0.633098846279022460, +-0.633137549035623800, -0.633176250209381290, -0.633214949800198550, -0.633253647807977990, -0.633292344232623260, -0.633331039074038090, -0.633369732332125010, -0.633408424006787540, +-0.633447114097929090, -0.633485802605452840, -0.633524489529262320, -0.633563174869260390, -0.633601858625350460, -0.633640540797436150, -0.633679221385420210, -0.633717900389206170, +-0.633756577808697430, -0.633795253643797300, -0.633833927894409290, -0.633872600560436150, -0.633911271641781400, -0.633949941138349020, -0.633988609050041290, -0.634027275376762070, +-0.634065940118414660, -0.634104603274902810, -0.634143264846129040, -0.634181924831997090, -0.634220583232410710, -0.634259240047272520, -0.634297895276486280, -0.634336548919955280, +-0.634375200977582930, -0.634413851449272760, -0.634452500334927840, -0.634491147634451580, -0.634529793347747730, -0.634568437474719140, -0.634607080015269440, -0.634645720969301940, +-0.634684360336720270, -0.634722998117427940, -0.634761634311327820, -0.634800268918323970, -0.634838901938319160, -0.634877533371217000, -0.634916163216921010, -0.634954791475334620, +-0.634993418146361680, -0.635032043229904810, -0.635070666725867760, -0.635109288634154500, -0.635147908954667550, -0.635186527687310990, -0.635225144831988000, -0.635263760388602110, +-0.635302374357057160, -0.635340986737256030, -0.635379597529102450, -0.635418206732500050, -0.635456814347351910, -0.635495420373561770, -0.635534024811033050, -0.635572627659669600, +-0.635611228919374160, -0.635649828590050700, -0.635688426671603080, -0.635727023163934040, -0.635765618066947420, -0.635804211380546660, -0.635842803104635480, -0.635881393239117630, +-0.635919981783895860, -0.635958568738874240, -0.635997154103956520, -0.636035737879045550, -0.636074320064045300, -0.636112900658859170, -0.636151479663390810, -0.636190057077544060, +-0.636228632901221890, -0.636267207134328160, -0.636305779776766720, -0.636344350828440430, -0.636382920289253360, -0.636421488159108930, -0.636460054437911090, -0.636498619125562830, +-0.636537182221967980, -0.636575743727030520, -0.636614303640653410, -0.636652861962740510, -0.636691418693195450, -0.636729973831921870, -0.636768527378823720, -0.636807079333803870, +-0.636845629696766280, -0.636884178467615030, -0.636922725646252960, -0.636961271232584060, -0.636999815226511950, -0.637038357627940370, -0.637076898436773290, -0.637115437652913450, +-0.637153975276265490, -0.637192511306732270, -0.637231045744217740, -0.637269578588625540, -0.637308109839859420, -0.637346639497823330, -0.637385167562420360, -0.637423694033554480, +-0.637462218911129750, -0.637500742195049040, -0.637539263885216530, -0.637577783981535860, -0.637616302483910660, -0.637654819392245110, -0.637693334706442180, -0.637731848426405850, +-0.637770360552040280, -0.637808871083248460, -0.637847380019934460, -0.637885887362002020, -0.637924393109355230, -0.637962897261897030, -0.638001399819531630, -0.638039900782163110, +-0.638078400149694520, -0.638116897922029860, -0.638155394099072960, -0.638193888680727570, -0.638232381666897890, -0.638270873057486750, -0.638309362852398590, -0.638347851051537240, +-0.638386337654806010, -0.638424822662108980, -0.638463306073349780, -0.638501787888432370, -0.638540268107260830, -0.638578746729738240, -0.638617223755768790, -0.638655699185256660, +-0.638694173018104940, -0.638732645254217800, -0.638771115893499000, -0.638809584935852710, -0.638848052381182250, -0.638886518229391580, -0.638924982480384870, -0.638963445134065560, +-0.639001906190337480, -0.639040365649104710, -0.639078823510271010, -0.639117279773740550, -0.639155734439416650, -0.639194187507203360, -0.639232638977004890, -0.639271088848724520, +-0.639309537122266460, -0.639347983797534550, -0.639386428874432640, -0.639424872352865050, -0.639463314232734840, -0.639501754513946750, -0.639540193196403980, -0.639578630280010610, +-0.639617065764670810, -0.639655499650288230, -0.639693931936767270, -0.639732362624011230, -0.639770791711924190, -0.639809219200410560, -0.639847645089373530, -0.639886069378717390, +-0.639924492068346010, -0.639962913158163450, -0.640001332648073910, -0.640039750537980790, -0.640078166827788180, -0.640116581517400580, -0.640154994606721210, -0.640193406095654230, +-0.640231815984103840, -0.640270224271974220, -0.640308630959168680, -0.640347036045591620, -0.640385439531147240, -0.640423841415738940, -0.640462241699271130, -0.640500640381647560, +-0.640539037462772520, -0.640577432942550100, -0.640615826820883920, -0.640654219097678060, -0.640692609772837040, -0.640730998846264050, -0.640769386317863730, -0.640807772187539810, +-0.640846156455196490, -0.640884539120738170, -0.640922920184068160, -0.640961299645090850, -0.640999677503710560, -0.641038053759830810, -0.641076428413355880, -0.641114801464189870, +-0.641153172912237170, -0.641191542757401310, -0.641229910999586480, -0.641268277638697310, -0.641306642674637000, -0.641345006107310160, -0.641383367936620870, -0.641421728162473000, +-0.641460086784771290, -0.641498443803418920, -0.641536799218320520, -0.641575153029380400, -0.641613505236502070, -0.641651855839590060, -0.641690204838548330, -0.641728552233281070, +-0.641766898023692800, -0.641805242209686930, -0.641843584791168320, -0.641881925768040370, -0.641920265140207720, -0.641958602907574340, -0.641996939070044400, -0.642035273627522440, +-0.642073606579912080, -0.642111937927117630, -0.642150267669043600, -0.642188595805593730, -0.642226922336672220, -0.642265247262183480, -0.642303570582031580, -0.642341892296121150, +-0.642380212404355610, -0.642418530906639470, -0.642456847802877480, -0.642495163092972940, -0.642533476776830590, -0.642571788854354400, -0.642610099325449210, -0.642648408190018340, +-0.642686715447966520, -0.642725021099198160, -0.642763325143617000, -0.642801627581127580, -0.642839928411633950, -0.642878227635040540, -0.642916525251251980, -0.642954821260171670, +-0.642993115661704360, -0.643031408455754570, -0.643069699642225930, -0.643107989221023080, -0.643146277192050200, -0.643184563555211700, -0.643222848310411990, -0.643261131457554920, +-0.643299412996545360, -0.643337692927286930, -0.643375971249684260, -0.643414247963641660, -0.643452523069063420, -0.643490796565854280, -0.643529068453917770, -0.643567338733158520, +-0.643605607403481380, -0.643643874464789880, -0.643682139916988530, -0.643720403759981960, -0.643758665993674370, -0.643796926617970500, -0.643835185632773870, -0.643873443037989320, +-0.643911698833521510, -0.643949953019274160, -0.643988205595151910, -0.644026456561059060, -0.644064705916900460, -0.644102953662579750, -0.644141199798001660, -0.644179444323070950, +-0.644217687237691240, -0.644255928541767390, -0.644294168235203690, -0.644332406317904450, -0.644370642789774630, -0.644408877650717860, -0.644447110900638890, -0.644485342539442560, +-0.644523572567032410, -0.644561800983313390, -0.644600027788189920, -0.644638252981566300, -0.644676476563347370, -0.644714698533436990, -0.644752918891739800, -0.644791137638160650, +-0.644829354772603390, -0.644867570294972660, -0.644905784205173080, -0.644943996503109300, -0.644982207188685260, -0.645020416261805620, -0.645058623722375320, -0.645096829570298120, +-0.645135033805478870, -0.645173236427821980, -0.645211437437232080, -0.645249636833613920, -0.645287834616871230, -0.645326030786909090, -0.645364225343632140, -0.645402418286944220, +-0.645440609616750430, -0.645478799332954930, -0.645516987435462490, -0.645555173924178050, -0.645593358799005150, -0.645631542059849290, -0.645669723706614240, -0.645707903739204840, +-0.645746082157525710, -0.645784258961481390, -0.645822434150976730, -0.645860607725915690, -0.645898779686203020, -0.645936950031743900, -0.645975118762441960, -0.646013285878202170, +-0.646051451378929280, -0.646089615264527680, -0.646127777534902470, -0.646165938189957380, -0.646204097229597600, -0.646242254653727750, -0.646280410462252040, -0.646318564655075200, +-0.646356717232101970, -0.646394868193237330, -0.646433017538385220, -0.646471165267450520, -0.646509311380338180, -0.646547455876952280, -0.646585598757197790, -0.646623740020979220, +-0.646661879668201320, -0.646700017698769170, -0.646738154112586510, -0.646776288909558520, -0.646814422089590060, -0.646852553652585320, -0.646890683598449150, -0.646928811927086290, +-0.646966938638401380, -0.647005063732299380, -0.647043187208684480, -0.647081309067461640, -0.647119429308535830, -0.647157547931811130, -0.647195664937192490, -0.647233780324584670, +-0.647271894093892850, -0.647310006245020890, -0.647348116777873960, -0.647386225692357040, -0.647424332988374210, -0.647462438665830530, -0.647500542724630870, -0.647538645164679740, +-0.647576745985882330, -0.647614845188142720, -0.647652942771366090, -0.647691038735457410, -0.647729133080320760, -0.647767225805861320, -0.647805316911983730, -0.647843406398592950, +-0.647881494265593940, -0.647919580512890780, -0.647957665140389110, -0.647995748147992880, -0.648033829535607400, -0.648071909303137180, -0.648109987450487310, -0.648148063977562750, +-0.648186138884267680, -0.648224212170507300, -0.648262283836186780, -0.648300353881210100, -0.648338422305482550, -0.648376489108908990, -0.648414554291394270, -0.648452617852843470, +-0.648490679793160660, -0.648528740112251260, -0.648566798810020330, -0.648604855886372070, -0.648642911341211660, -0.648680965174443960, -0.648719017385974260, -0.648757067975706650, +-0.648795116943546300, -0.648833164289398520, -0.648871210013167500, -0.648909254114758530, -0.648947296594076350, -0.648985337451025930, -0.649023376685512470, -0.649061414297440350, +-0.649099450286714560, -0.649137484653240620, -0.649175517396922470, -0.649213548517665660, -0.649251578015374920, -0.649289605889955210, -0.649327632141311840, -0.649365656769349100, +-0.649403679773972180, -0.649441701155086480, -0.649479720912596090, -0.649517739046406420, -0.649555755556422420, -0.649593770442549290, -0.649631783704691550, -0.649669795342754150, +-0.649707805356642740, -0.649745813746261500, -0.649783820511515620, -0.649821825652310280, -0.649859829168550340, -0.649897831060141210, -0.649935831326987070, -0.649973829968993440, +-0.650011826986065520, -0.650049822378107710, -0.650087816145025420, -0.650125808286723510, -0.650163798803107040, -0.650201787694081430, -0.650239774959551100, -0.650277760599421660, +-0.650315744613597420, -0.650353727001983790, -0.650391707764485850, -0.650429686901008770, -0.650467664411457650, -0.650505640295737100, -0.650543614553752430, -0.650581587185409150, +-0.650619558190611460, -0.650657527569264870, -0.650695495321274580, -0.650733461446545420, -0.650771425944983050, -0.650809388816491640, -0.650847350060976940, -0.650885309678344020, +-0.650923267668497620, -0.650961224031343040, -0.650999178766785370, -0.651037131874730110, -0.651075083355081570, -0.651113033207745500, -0.651150981432627060, -0.651188928029630910, +-0.651226872998662330, -0.651264816339626630, -0.651302758052428880, -0.651340698136974590, -0.651378636593168300, -0.651416573420915300, -0.651454508620121220, -0.651492442190690580, +-0.651530374132528790, -0.651568304445541040, -0.651606233129632620, -0.651644160184708940, -0.651682085610674420, -0.651720009407434800, -0.651757931574895370, -0.651795852112960870, +-0.651833771021536720, -0.651871688300528220, -0.651909603949840650, -0.651947517969378890, -0.651985430359048320, -0.652023341118754480, -0.652061250248402000, -0.652099157747896290, +-0.652137063617142740, -0.652174967856046560, -0.652212870464513260, -0.652250771442447470, -0.652288670789754720, -0.652326568506340630, -0.652364464592109840, -0.652402359046967860, +-0.652440251870819890, -0.652478143063571440, -0.652516032625127920, -0.652553920555393960, -0.652591806854275540, -0.652629691521677270, -0.652667574557504790, -0.652705455961663290, +-0.652743335734058180, -0.652781213874595200, -0.652819090383178760, -0.652856965259714480, -0.652894838504108230, -0.652932710116264640, -0.652970580096089100, -0.653008448443487270, +-0.653046315158364200, -0.653084180240625760, -0.653122043690176460, -0.653159905506922040, -0.653197765690768260, -0.653235624241619740, -0.653273481159382110, -0.653311336443960780, +-0.653349190095261490, -0.653387042113188880, -0.653424892497648570, -0.653462741248546530, -0.653500588365787170, -0.653538433849276350, -0.653576277698919460, -0.653614119914621930, +-0.653651960496289370, -0.653689799443826660, -0.653727636757139410, -0.653765472436133370, -0.653803306480713280, -0.653841138890784990, -0.653878969666253810, -0.653916798807025250, +-0.653954626313005050, -0.653992452184097850, -0.654030276420209940, -0.654068099021245960, -0.654105919987111760, -0.654143739317712750, -0.654181557012954440, -0.654219373072742580, +-0.654257187496981810, -0.654295000285578190, -0.654332811438437360, -0.654370620955464170, -0.654408428836564470, -0.654446235081643680, -0.654484039690607310, -0.654521842663361110, +-0.654559643999810040, -0.654597443699859840, -0.654635241763416360, -0.654673038190384470, -0.654710832980670010, -0.654748626134178390, -0.654786417650815240, -0.654824207530486310, +-0.654861995773096670, -0.654899782378552290, -0.654937567346758120, -0.654975350677620030, -0.655013132371043530, -0.655050912426934250, -0.655088690845198050, -0.655126467625739780, +-0.655164242768465300, -0.655202016273280560, -0.655239788140090430, -0.655277558368800860, -0.655315326959317380, -0.655353093911545610, -0.655390859225391420, -0.655428622900759650, +-0.655466384937556490, -0.655504145335687570, -0.655541904095058080, -0.655579661215573760, -0.655617416697140240, -0.655655170539663600, -0.655692922743048690, -0.655730673307201360, +-0.655768422232027800, -0.655806169517432870, -0.655843915163322410, -0.655881659169602170, -0.655919401536177890, -0.655957142262955430, -0.655994881349839630, -0.656032618796736800, +-0.656070354603552670, -0.656108088770192330, -0.656145821296561740, -0.656183552182566630, -0.656221281428112650, -0.656259009033105740, -0.656296734997451110, -0.656334459321054830, +-0.656372182003822190, -0.656409903045659050, -0.656447622446471150, -0.656485340206164110, -0.656523056324644140, -0.656560770801816180, -0.656598483637586330, -0.656636194831860530, +-0.656673904384543980, -0.656711612295542650, -0.656749318564762260, -0.656787023192108580, -0.656824726177487660, -0.656862427520804590, -0.656900127221965560, -0.656937825280876410, +-0.656975521697442440, -0.657013216471569630, -0.657050909603163810, -0.657088601092131070, -0.657126290938376490, -0.657163979141806130, -0.657201665702326190, -0.657239350619841730, +-0.657277033894258840, -0.657314715525483480, -0.657352395513421280, -0.657390073857978430, -0.657427750559060000, -0.657465425616572290, -0.657503099030421370, -0.657540770800512210, +-0.657578440926751330, -0.657616109409044140, -0.657653776247296820, -0.657691441441415340, -0.657729104991304990, -0.657766766896871750, -0.657804427158022010, -0.657842085774660860, +-0.657879742746694470, -0.657917398074028830, -0.657955051756569990, -0.657992703794223030, -0.658030354186894480, -0.658068002934490300, -0.658105650036915790, -0.658143295494077240, +-0.658180939305880290, -0.658218581472231110, -0.658256221993035790, -0.658293860868199630, -0.658331498097628700, -0.658369133681229400, -0.658406767618907040, -0.658444399910567690, +-0.658482030556117310, -0.658519659555461880, -0.658557286908507570, -0.658594912615159790, -0.658632536675325060, -0.658670159088908580, -0.658707779855816740, -0.658745398975955520, +-0.658783016449230760, -0.658820632275548770, -0.658858246454814830, -0.658895858986935370, -0.658933469871816560, -0.658971079109363700, -0.659008686699483200, -0.659046292642080920, +-0.659083896937062930, -0.659121499584335520, -0.659159100583804110, -0.659196699935374890, -0.659234297638954250, -0.659271893694447500, -0.659309488101761040, -0.659347080860800960, +-0.659384671971473440, -0.659422261433683880, -0.659459849247338690, -0.659497435412344180, -0.659535019928605750, -0.659572602796029810, -0.659610184014522320, -0.659647763583989350, +-0.659685341504337440, -0.659722917775471760, -0.659760492397298730, -0.659798065369724850, -0.659835636692655440, -0.659873206365997000, -0.659910774389655510, -0.659948340763537140, +-0.659985905487548210, -0.660023468561594110, -0.660061029985581470, -0.660098589759416490, -0.660136147883004790, -0.660173704356252670, -0.660211259179066200, -0.660248812351352020, +-0.660286363873015420, -0.660323913743963040, -0.660361461964101060, -0.660399008533335220, -0.660436553451571710, -0.660474096718716930, -0.660511638334676850, -0.660549178299358110, +-0.660586716612665990, -0.660624253274507130, -0.660661788284787940, -0.660699321643413940, -0.660736853350291640, -0.660774383405327240, -0.660811911808426800, -0.660849438559496960, +-0.660886963658443240, -0.660924487105172380, -0.660962008899590000, -0.660999529041602640, -0.661037047531116360, -0.661074564368037580, -0.661112079552272580, -0.661149593083727120, +-0.661187104962307700, -0.661224615187920860, -0.661262123760472110, -0.661299630679868080, -0.661337135946014950, -0.661374639558818920, -0.661412141518186720, -0.661449641824023770, +-0.661487140476236800, -0.661524637474732220, -0.661562132819415780, -0.661599626510193990, -0.661637118546973160, -0.661674608929659790, -0.661712097658159640, -0.661749584732379210, +-0.661787070152225150, -0.661824553917603090, -0.661862036028419640, -0.661899516484581120, -0.661936995285993810, -0.661974472432564240, -0.662011947924198260, -0.662049421760802390, +-0.662086893942283370, -0.662124364468546720, -0.662161833339499180, -0.662199300555046940, -0.662236766115096630, -0.662274230019554650, -0.662311692268326760, -0.662349152861319570, +-0.662386611798439940, -0.662424069079593390, -0.662461524704686670, -0.662498978673626170, -0.662536430986318540, -0.662573881642669500, -0.662611330642585820, -0.662648777985974100, +-0.662686223672740100, -0.662723667702790450, -0.662761110076031780, -0.662798550792370270, -0.662835989851712660, -0.662873427253964810, -0.662910862999033350, -0.662948297086825120, +-0.662985729517245770, -0.663023160290202140, -0.663060589405600530, -0.663098016863347570, -0.663135442663349780, -0.663172866805513130, -0.663210289289744680, -0.663247710115950070, +-0.663285129284036270, -0.663322546793909560, -0.663359962645476590, -0.663397376838643970, -0.663434789373317570, -0.663472200249404230, -0.663509609466810700, -0.663547017025442830, +-0.663584422925207360, -0.663621827166010920, -0.663659229747759930, -0.663696630670361110, -0.663734029933720440, -0.663771427537744650, -0.663808823482340600, -0.663846217767414260, +-0.663883610392872360, -0.663921001358621310, -0.663958390664568190, -0.663995778310618730, -0.664033164296679910, -0.664070548622658350, -0.664107931288460240, -0.664145312293992210, +-0.664182691639160990, -0.664220069323873010, -0.664257445348035100, -0.664294819711553350, -0.664332192414334500, -0.664369563456285510, -0.664406932837312230, -0.664444300557321730, +-0.664481666616220430, -0.664519031013914960, -0.664556393750312170, -0.664593754825318130, -0.664631114238839690, -0.664668471990783830, -0.664705828081056490, -0.664743182509564430, +-0.664780535276214610, -0.664817886380913660, -0.664855235823567650, -0.664892583604083650, -0.664929929722368420, -0.664967274178328130, -0.665004616971869520, -0.665041958102899460, +-0.665079297571324560, -0.665116635377051680, -0.665153971519986900, -0.665191306000037170, -0.665228638817109470, -0.665265969971109870, -0.665303299461945330, -0.665340627289522590, +-0.665377953453748280, -0.665415277954529370, -0.665452600791772040, -0.665489921965383480, -0.665527241475269760, -0.665564559321337960, -0.665601875503494700, -0.665639190021646730, +-0.665676502875701240, -0.665713814065564070, -0.665751123591142410, -0.665788431452343340, -0.665825737649072710, -0.665863042181237820, -0.665900345048745400, -0.665937646251501980, +-0.665974945789414850, -0.666012243662389980, -0.666049539870334550, -0.666086834413155530, -0.666124127290759200, -0.666161418503052440, -0.666198708049942190, -0.666235995931335530, +-0.666273282147138550, -0.666310566697258300, -0.666347849581601980, -0.666385130800075780, -0.666422410352586650, -0.666459688239041560, -0.666496964459347250, -0.666534239013410800, +-0.666571511901138500, -0.666608783122437320, -0.666646052677214660, -0.666683320565376380, -0.666720586786829880, -0.666757851341481910, -0.666795114229239320, -0.666832375450009280, +-0.666869635003698000, -0.666906892890212880, -0.666944149109460200, -0.666981403661347170, -0.667018656545780740, -0.667055907762667540, -0.667093157311914870, -0.667130405193429140, +-0.667167651407117200, -0.667204895952886570, -0.667242138830643430, -0.667279380040294860, -0.667316619581747820, -0.667353857454909270, -0.667391093659686410, -0.667428328195985520, +-0.667465561063713800, -0.667502792262778420, -0.667540021793085800, -0.667577249654543130, -0.667614475847057240, -0.667651700370535670, -0.667688923224884380, -0.667726144410010770, +-0.667763363925822250, -0.667800581772224900, -0.667837797949126120, -0.667875012456432880, -0.667912225294052030, -0.667949436461890980, -0.667986645959856020, -0.668023853787854450, +-0.668061059945793570, -0.668098264433579780, -0.668135467251120160, -0.668172668398322010, -0.668209867875092180, -0.668247065681337960, -0.668284261816965760, -0.668321456281882890, +-0.668358649075996740, -0.668395840199213610, -0.668433029651440910, -0.668470217432585610, -0.668507403542555110, -0.668544587981255820, -0.668581770748595040, -0.668618951844480170, +-0.668656131268817510, -0.668693309021514580, -0.668730485102478340, -0.668767659511615990, -0.668804832248834690, -0.668842003314041090, -0.668879172707142370, -0.668916340428046150, +-0.668953506476658740, -0.668990670852887440, -0.669027833556639640, -0.669064994587822090, -0.669102153946342540, -0.669139311632107160, -0.669176467645023920, -0.669213621984999120, +-0.669250774651940270, -0.669287925645754460, -0.669325074966348850, -0.669362222613630990, -0.669399368587507150, -0.669436512887884860, -0.669473655514671640, -0.669510796467774010, +-0.669547935747099250, -0.669585073352554790, -0.669622209284047590, -0.669659343541485260, -0.669696476124774120, -0.669733607033821900, -0.669770736268536000, -0.669807863828822850, +-0.669844989714590060, -0.669882113925744820, -0.669919236462194640, -0.669956357323845950, -0.669993476510606480, -0.670030594022383630, -0.670067709859083930, -0.670104824020614890, +-0.670141936506883920, -0.670179047317798090, -0.670216156453264930, -0.670253263913191070, -0.670290369697484010, -0.670327473806051290, -0.670364576238799750, -0.670401676995636690, +-0.670438776076469290, -0.670475873481205080, -0.670512969209751560, -0.670550063262015270, -0.670587155637903720, -0.670624246337324650, -0.670661335360184680, -0.670698422706391460, +-0.670735508375852050, -0.670772592368474200, -0.670809674684164530, -0.670846755322830780, -0.670883834284380360, -0.670920911568720140, -0.670957987175757500, -0.670995061105399970, +-0.671032133357554850, -0.671069203932129540, -0.671106272829031130, -0.671143340048166890, -0.671180405589444580, -0.671217469452771050, -0.671254531638053820, -0.671291592145200180, +-0.671328650974117650, -0.671365708124713860, -0.671402763596895320, -0.671439817390570350, -0.671476869505645450, -0.671513919942028360, -0.671550968699626490, -0.671588015778347150, +-0.671625061178098170, -0.671662104898786190, -0.671699146940318850, -0.671736187302604090, -0.671773225985548450, -0.671810262989059880, -0.671847298313045570, -0.671884331957413040, +-0.671921363922069910, -0.671958394206923160, -0.671995422811880290, -0.672032449736849280, -0.672069474981736860, -0.672106498546450770, -0.672143520430898310, -0.672180540634987440, +-0.672217559158624910, -0.672254576001718450, -0.672291591164175920, -0.672328604645904050, -0.672365616446810700, -0.672402626566803270, -0.672439635005789290, -0.672476641763676500, +-0.672513646840371850, -0.672550650235783090, -0.672587651949818070, -0.672624651982383530, -0.672661650333387320, -0.672698647002736960, -0.672735641990340080, -0.672772635296104430, +-0.672809626919936840, -0.672846616861745070, -0.672883605121437300, -0.672920591698920050, -0.672957576594101270, -0.672994559806888600, -0.673031541337189900, -0.673068521184912010, +-0.673105499349962780, -0.673142475832250180, -0.673179450631681050, -0.673216423748163260, -0.673253395181604430, -0.673290364931912190, -0.673327332998994280, -0.673364299382757660, +-0.673401264083110410, -0.673438227099960260, -0.673475188433214190, -0.673512148082780260, -0.673549106048565880, -0.673586062330478690, -0.673623016928426740, -0.673659969842316910, +-0.673696921072057480, -0.673733870617555410, -0.673770818478718670, -0.673807764655454890, -0.673844709147671690, -0.673881651955277050, -0.673918593078177920, -0.673955532516282370, +-0.673992470269498270, -0.674029406337732670, -0.674066340720893550, -0.674103273418888650, -0.674140204431625480, -0.674177133759012230, -0.674214061400955740, -0.674250987357364110, +-0.674287911628145280, -0.674324834213206440, -0.674361755112455440, -0.674398674325800140, -0.674435591853148390, -0.674472507694407360, -0.674509421849485150, -0.674546334318289590, +-0.674583245100727870, -0.674620154196708070, -0.674657061606137920, -0.674693967328925170, -0.674730871364977670, -0.674767773714202820, -0.674804674376508370, -0.674841573351802730, +-0.674878470639992730, -0.674915366240986580, -0.674952260154692010, -0.674989152381016750, -0.675026042919869010, -0.675062931771155840, -0.675099818934785210, -0.675136704410665530, +-0.675173588198703660, -0.675210470298807870, -0.675247350710885820, -0.675284229434845900, -0.675321106470594960, -0.675357981818041190, -0.675394855477092880, -0.675431727447657120, +-0.675468597729641960, -0.675505466322955380, -0.675542333227505120, -0.675579198443199360, -0.675616061969945170, -0.675652923807650960, -0.675689783956224700, -0.675726642415573680, +-0.675763499185606080, -0.675800354266229640, -0.675837207657352450, -0.675874059358882450, -0.675910909370727060, -0.675947757692794690, -0.675984604324992520, -0.676021449267228960, +-0.676058292519411740, -0.676095134081448720, -0.676131973953248310, -0.676168812134717580, -0.676205648625764820, -0.676242483426298220, -0.676279316536225080, -0.676316147955453810, +-0.676352977683892020, -0.676389805721447800, -0.676426632068029440, -0.676463456723544130, -0.676500279687900160, -0.676537100961005940, -0.676573920542768550, -0.676610738433096380, +-0.676647554631897300, -0.676684369139079700, -0.676721181954550890, -0.676757993078219040, -0.676794802509992690, -0.676831610249778890, -0.676868416297486060, -0.676905220653022170, +-0.676942023316295270, -0.676978824287213680, -0.677015623565684680, -0.677052421151616570, -0.677089217044917870, -0.677126011245495650, -0.677162803753258440, -0.677199594568114290, +-0.677236383689971080, -0.677273171118737190, -0.677309956854320160, -0.677346740896628500, -0.677383523245569720, -0.677420303901052120, -0.677457082862983670, -0.677493860131272550, +-0.677530635705827170, -0.677567409586554810, -0.677604181773364010, -0.677640952266163050, -0.677677721064859240, -0.677714488169361310, -0.677751253579577110, -0.677788017295414710, +-0.677824779316782640, -0.677861539643588310, -0.677898298275740220, -0.677935055213146560, -0.677971810455714970, -0.678008564003353850, -0.678045315855971390, -0.678082066013475870, +-0.678118814475774930, -0.678155561242776980, -0.678192306314390430, -0.678229049690522780, -0.678265791371082450, -0.678302531355977620, -0.678339269645116590, -0.678376006238407660, +-0.678412741135758330, -0.678449474337077250, -0.678486205842272700, -0.678522935651252430, -0.678559663763924740, -0.678596390180197910, -0.678633114899980020, -0.678669837923179810, +-0.678706559249704580, -0.678743278879463060, -0.678779996812363560, -0.678816713048313810, -0.678853427587222220, -0.678890140428997090, -0.678926851573546930, -0.678963561020779370, +-0.679000268770602820, -0.679036974822926020, -0.679073679177656380, -0.679110381834702630, -0.679147082793972840, -0.679183782055375330, -0.679220479618818710, -0.679257175484210610, +-0.679293869651459550, -0.679330562120474160, -0.679367252891161950, -0.679403941963431680, -0.679440629337191520, -0.679477315012349870, -0.679513998988815150, -0.679550681266495200, +-0.679587361845298890, -0.679624040725133720, -0.679660717905908540, -0.679697393387531550, -0.679734067169911030, -0.679770739252955720, -0.679807409636573270, -0.679844078320672280, +-0.679880745305161400, -0.679917410589948370, -0.679954074174941690, -0.679990736060049890, -0.680027396245181270, -0.680064054730244560, -0.680100711515147280, -0.680137366599798290, +-0.680174019984106090, -0.680210671667978660, -0.680247321651324510, -0.680283969934051940, -0.680320616516069900, -0.680357261397285920, -0.680393904577608840, -0.680430546056947310, +-0.680467185835209150, -0.680503823912302910, -0.680540460288137190, -0.680577094962620310, -0.680613727935660990, -0.680650359207166990, -0.680686988777047140, -0.680723616645210190, +-0.680760242811563780, -0.680796867276016850, -0.680833490038477710, -0.680870111098854870, -0.680906730457057070, -0.680943348112992060, -0.680979964066568800, -0.681016578317695800, +-0.681053190866281130, -0.681089801712233430, -0.681126410855461330, -0.681163018295873450, -0.681199624033377750, -0.681236228067882870, -0.681272830399297870, -0.681309431027530390, +-0.681346029952489380, -0.681382627174083270, -0.681419222692220660, -0.681455816506810200, -0.681492408617759950, -0.681528999024978650, -0.681565587728375170, -0.681602174727857450, +-0.681638760023334230, -0.681675343614714160, -0.681711925501905740, -0.681748505684817820, -0.681785084163358260, -0.681821660937436350, -0.681858236006959940, -0.681894809371838000, +-0.681931381031979030, -0.681967950987291570, -0.682004519237684570, -0.682041085783065880, -0.682077650623344580, -0.682114213758429400, -0.682150775188228420, -0.682187334912650490, +-0.682223892931604240, -0.682260449244998180, -0.682297003852741390, -0.682333556754741720, -0.682370107950908240, -0.682406657441149810, -0.682443205225374380, -0.682479751303490810, +-0.682516295675408060, -0.682552838341034750, -0.682589379300279080, -0.682625918553049990, -0.682662456099256460, -0.682698991938806340, -0.682735526071608810, -0.682772058497572500, +-0.682808589216606030, -0.682845118228618380, -0.682881645533517600, -0.682918171131212780, -0.682954695021612770, -0.682991217204625740, -0.683027737680160670, -0.683064256448126180, +-0.683100773508431120, -0.683137288860984460, -0.683173802505694260, -0.683210314442469490, -0.683246824671219330, -0.683283333191851750, -0.683319840004275920, -0.683356345108400380, +-0.683392848504134290, -0.683429350191385840, -0.683465850170064000, -0.683502348440077840, -0.683538845001335440, -0.683575339853745970, -0.683611832997218170, -0.683648324431660790, +-0.683684814156982900, -0.683721302173092570, -0.683757788479899100, -0.683794273077311440, -0.683830755965237790, -0.683867237143587210, -0.683903716612268560, -0.683940194371190690, +-0.683976670420262560, -0.684013144759392460, -0.684049617388489910, -0.684086088307462870, -0.684122557516220640, -0.684159025014672070, -0.684195490802725900, -0.684231954880291320, +-0.684268417247276490, -0.684304877903590740, -0.684341336849143000, -0.684377794083841580, -0.684414249607595780, -0.684450703420314330, -0.684487155521906090, -0.684523605912280230, +-0.684560054591345170, -0.684596501559009860, -0.684632946815183720, -0.684669390359774810, -0.684705832192692430, -0.684742272313845430, -0.684778710723143110, -0.684815147420493760, +-0.684851582405806460, -0.684888015678990600, -0.684924447239954270, -0.684960877088606980, -0.684997305224857360, -0.685033731648614590, -0.685070156359787630, -0.685106579358285120, +-0.685143000644016120, -0.685179420216889930, -0.685215838076814850, -0.685252254223700170, -0.685288668657454970, -0.685325081377987980, -0.685361492385208600, -0.685397901679025260, +-0.685434309259347120, -0.685470715126083490, -0.685507119279142760, -0.685543521718434250, -0.685579922443867010, -0.685616321455350230, -0.685652718752792320, -0.685689114336102580, +-0.685725508205190400, -0.685761900359964090, -0.685798290800333050, -0.685834679526206360, -0.685871066537492970, -0.685907451834102180, -0.685943835415942390, -0.685980217282923020, +-0.686016597434953470, -0.686052975871942140, -0.686089352593798330, -0.686125727600431110, -0.686162100891749670, -0.686198472467663190, -0.686234842328080300, -0.686271210472910510, +-0.686307576902062460, -0.686343941615445540, -0.686380304612968620, -0.686416665894540980, -0.686453025460072030, -0.686489383309470180, -0.686525739442644830, -0.686562093859505510, +-0.686598446559960610, -0.686634797543919650, -0.686671146811291600, -0.686707494361985750, -0.686743840195911500, -0.686780184312977270, -0.686816526713092570, -0.686852867396166910, +-0.686889206362108820, -0.686925543610827690, -0.686961879142232610, -0.686998212956233200, -0.687034545052737980, -0.687070875431656350, -0.687107204092897830, -0.687143531036371050, +-0.687179856261985410, -0.687216179769650100, -0.687252501559274420, -0.687288821630767770, -0.687325139984038770, -0.687361456618996840, -0.687397771535551590, -0.687434084733611670, +-0.687470396213086480, -0.687506705973885300, -0.687543014015917440, -0.687579320339092300, -0.687615624943318520, -0.687651927828506040, -0.687688228994563390, -0.687724528441400200, +-0.687760826168925640, -0.687797122177049030, -0.687833416465679970, -0.687869709034726990, -0.687905999884099840, -0.687942289013707910, -0.687978576423459940, -0.688014862113265570, +-0.688051146083034080, -0.688087428332674670, -0.688123708862097060, -0.688159987671209780, -0.688196264759922570, -0.688232540128145050, -0.688268813775785860, -0.688305085702754620, +-0.688341355908960620, -0.688377624394313600, -0.688413891158722090, -0.688450156202096040, -0.688486419524344750, -0.688522681125377180, -0.688558941005102950, -0.688595199163431260, +-0.688631455600271610, -0.688667710315533640, -0.688703963309126090, -0.688740214580958690, -0.688776464130941070, -0.688812711958981860, -0.688848958064990910, -0.688885202448877630, +-0.688921445110551200, -0.688957686049921580, -0.688993925266897510, -0.689030162761388510, -0.689066398533304430, -0.689102632582554110, -0.689138864909047080, -0.689175095512692960, +-0.689211324393401490, -0.689247551551081310, -0.689283776985642250, -0.689320000696994060, -0.689356222685045590, -0.689392442949706590, -0.689428661490886440, -0.689464878308494570, +-0.689501093402440920, -0.689537306772634140, -0.689573518418984180, -0.689609728341400660, -0.689645936539792560, -0.689682143014069600, -0.689718347764141320, -0.689754550789917100, +-0.689790752091306910, -0.689826951668219390, -0.689863149520564930, -0.689899345648252280, -0.689935540051191180, -0.689971732729291240, -0.690007923682462000, -0.690044112910613290, +-0.690080300413653980, -0.690116486191493910, -0.690152670244042920, -0.690188852571209990, -0.690225033172904840, -0.690261212049037120, -0.690297389199516440, -0.690333564624252550, +-0.690369738323154510, -0.690405910296132070, -0.690442080543095190, -0.690478249063952720, -0.690514415858614730, -0.690550580926990620, -0.690586744268990360, -0.690622905884523020, +-0.690659065773498340, -0.690695223935826390, -0.690731380371415900, -0.690767535080177080, -0.690803688062019420, -0.690839839316852560, -0.690875988844586340, -0.690912136645129960, +-0.690948282718393150, -0.690984427064285980, -0.691020569682717410, -0.691056710573597410, -0.691092849736835600, -0.691128987172341720, -0.691165122880025630, -0.691201256859796500, +-0.691237389111564180, -0.691273519635238640, -0.691309648430729060, -0.691345775497945400, -0.691381900836797290, -0.691418024447194690, -0.691454146329046780, -0.691490266482263420, +-0.691526384906754780, -0.691562501602429820, -0.691598616569198630, -0.691634729806970830, -0.691670841315656260, -0.691706951095164890, -0.691743059145405900, -0.691779165466289150, +-0.691815270057724920, -0.691851372919622070, -0.691887474051890880, -0.691923573454441000, -0.691959671127182150, -0.691995767070024530, -0.692031861282877080, -0.692067953765650220, +-0.692104044518253360, -0.692140133540596230, -0.692176220832588780, -0.692212306394140890, -0.692248390225162490, -0.692284472325562780, -0.692320552695251830, -0.692356631334139940, +-0.692392708242136060, -0.692428783419150480, -0.692464856865092850, -0.692500928579873110, -0.692536998563401450, -0.692573066815586950, -0.692609133336339780, -0.692645198125570020, +-0.692681261183186960, -0.692717322509100790, -0.692753382103221350, -0.692789439965458720, -0.692825496095722190, -0.692861550493921950, -0.692897603159968070, -0.692933654093769950, +-0.692969703295237550, -0.693005750764281060, -0.693041796500810100, -0.693077840504734980, -0.693113882775964970, -0.693149923314410280, -0.693185962119981070, -0.693221999192586650, +-0.693258034532137190, -0.693294068138542660, -0.693330100011712910, -0.693366130151558350, -0.693402158557988040, -0.693438185230912390, -0.693474210170241580, -0.693510233375884910, +-0.693546254847752670, -0.693582274585754830, -0.693618292589801570, -0.693654308859802280, -0.693690323395667270, -0.693726336197306730, -0.693762347264629930, -0.693798356597547410, +-0.693834364195968890, -0.693870370059804560, -0.693906374188964500, -0.693942376583358330, -0.693978377242896130, -0.694014376167488290, -0.694050373357044230, -0.694086368811474230, +-0.694122362530688370, -0.694158354514596510, -0.694194344763109150, -0.694230333276135590, -0.694266320053586460, -0.694302305095371270, -0.694338288401400330, -0.694374269971583580, +-0.694410249805831210, -0.694446227904053530, -0.694482204266160030, -0.694518178892060910, -0.694554151781666800, -0.694590122934886870, -0.694626092351631640, -0.694662060031811300, +-0.694698025975335700, -0.694733990182115350, -0.694769952652059760, -0.694805913385079240, -0.694841872381084300, -0.694877829639984230, -0.694913785161689780, -0.694949738946110780, +-0.694985690993157770, -0.695021641302740130, -0.695057589874768510, -0.695093536709153190, -0.695129481805803700, -0.695165425164630420, -0.695201366785543670, -0.695237306668453510, +-0.695273244813270350, -0.695309181219903820, -0.695345115888264310, -0.695381048818262350, -0.695416980009807450, -0.695452909462810130, -0.695488837177180460, -0.695524763152828740, +-0.695560687389665370, -0.695596609887600080, -0.695632530646543180, -0.695668449666405290, -0.695704366947095920, -0.695740282488525710, -0.695776196290604720, -0.695812108353243590, +-0.695848018676351820, -0.695883927259840050, -0.695919834103618800, -0.695955739207597680, -0.695991642571687220, -0.696027544195797490, -0.696063444079839110, -0.696099342223722270, +-0.696135238627356820, -0.696171133290653280, -0.696207026213522260, -0.696242917395873300, -0.696278806837617110, -0.696314694538663790, -0.696350580498923840, -0.696386464718307780, +-0.696422347196725130, -0.696458227934086960, -0.696494106930302890, -0.696529984185283670, -0.696565859698939360, -0.696601733471180480, -0.696637605501917560, -0.696673475791060310, +-0.696709344338519390, -0.696745211144205400, -0.696781076208027980, -0.696816939529897980, -0.696852801109725580, -0.696888660947421300, -0.696924519042895540, -0.696960375396058260, +-0.696996230006819980, -0.697032082875091440, -0.697067934000782370, -0.697103783383803520, -0.697139631024065180, -0.697175476921478080, -0.697211321075951960, -0.697247163487397570, +-0.697283004155725530, -0.697318843080845690, -0.697354680262668780, -0.697390515701105220, -0.697426349396065290, -0.697462181347459740, -0.697498011555198530, -0.697533840019192270, +-0.697569666739351720, -0.697605491715586610, -0.697641314947807900, -0.697677136435925770, -0.697712956179850960, -0.697748774179493990, -0.697784590434764710, -0.697820404945574290, +-0.697856217711832590, -0.697892028733450350, -0.697927838010338090, -0.697963645542406090, -0.697999451329565420, -0.698035255371725730, -0.698071057668797960, -0.698106858220692850, +-0.698142657027320150, -0.698178454088590920, -0.698214249404415570, -0.698250042974704610, -0.698285834799368790, -0.698321624878318170, -0.698357413211463380, -0.698393199798715390, +-0.698428984639984150, -0.698464767735180400, -0.698500549084214770, -0.698536328686997780, -0.698572106543440150, -0.698607882653452080, -0.698643657016944530, -0.698679429633827560, +-0.698715200504012040, -0.698750969627408570, -0.698786737003927570, -0.698822502633480000, -0.698858266515975930, -0.698894028651326330, -0.698929789039441810, -0.698965547680232560, +-0.699001304573609320, -0.699037059719482930, -0.699072813117763920, -0.699108564768363140, -0.699144314671190650, -0.699180062826157300, -0.699215809233174170, -0.699251553892151320, +-0.699287296802999390, -0.699323037965629330, -0.699358777379952000, -0.699394515045877350, -0.699430250963316460, -0.699465985132180170, -0.699501717552378670, -0.699537448223822910, +-0.699573177146423530, -0.699608904320091150, -0.699644629744736850, -0.699680353420270680, -0.699716075346603520, -0.699751795523646640, -0.699787513951309890, -0.699823230629504360, +-0.699858945558140770, -0.699894658737129750, -0.699930370166382380, -0.699966079845808940, -0.700001787775320410, -0.700037493954827280, -0.700073198384240310, -0.700108901063470350, +-0.700144601992428120, -0.700180301171024700, -0.700215998599170280, -0.700251694276775800, -0.700287388203752470, -0.700323080380010340, -0.700358770805460500, -0.700394459480013660, +-0.700430146403580700, -0.700465831576072780, -0.700501514997399880, -0.700537196667473160, -0.700572876586203820, -0.700608554753502030, -0.700644231169278760, -0.700679905833444970, +-0.700715578745911730, -0.700751249906589210, -0.700786919315388610, -0.700822586972220880, -0.700858252876996550, -0.700893917029626450, -0.700929579430021650, -0.700965240078092800, +-0.701000898973751290, -0.701036556116907180, -0.701072211507471680, -0.701107865145355950, -0.701143517030470180, -0.701179167162725660, -0.701214815542033240, -0.701250462168303780, +-0.701286107041448450, -0.701321750161377650, -0.701357391528002360, -0.701393031141233970, -0.701428669000982660, -0.701464305107159620, -0.701499939459675930, -0.701535572058442640, +-0.701571202903370050, -0.701606831994369570, -0.701642459331352280, -0.701678084914228560, -0.701713708742909500, -0.701749330817306280, -0.701784951137329750, -0.701820569702891080, +-0.701856186513900690, -0.701891801570269870, -0.701927414871909790, -0.701963026418730980, -0.701998636210644510, -0.702034244247561560, -0.702069850529392860, -0.702105455056049930, +-0.702141057827442960, -0.702176658843483790, -0.702212258104082610, -0.702247855609150710, -0.702283451358599260, -0.702319045352339130, -0.702354637590281720, -0.702390228072337420, +-0.702425816798417530, -0.702461403768433360, -0.702496988982295510, -0.702532572439915070, -0.702568154141203220, -0.702603734086071020, -0.702639312274429770, -0.702674888706189880, +-0.702710463381262860, -0.702746036299559900, -0.702781607460991610, -0.702817176865469300, -0.702852744512904030, -0.702888310403207210, -0.702923874536289350, -0.702959436912061750, +-0.702994997530435820, -0.703030556391322170, -0.703066113494632110, -0.703101668840276810, -0.703137222428167230, -0.703172774258215010, -0.703208324330330430, -0.703243872644425120, +-0.703279419200410480, -0.703314963998196930, -0.703350507037695970, -0.703386048318818680, -0.703421587841476350, -0.703457125605580380, -0.703492661611041180, -0.703528195857770380, +-0.703563728345679480, -0.703599259074678910, -0.703634788044680160, -0.703670315255594430, -0.703705840707333220, -0.703741364399807170, -0.703776886332927560, -0.703812406506606150, +-0.703847924920753430, -0.703883441575280930, -0.703918956470099720, -0.703954469605121200, -0.703989980980256780, -0.704025490595417080, -0.704060998450513730, -0.704096504545458140, +-0.704132008880160920, -0.704167511454533710, -0.704203012268487800, -0.704238511321934270, -0.704274008614784840, -0.704309504146950040, -0.704344997918341820, -0.704380489928870810, +-0.704415980178448530, -0.704451468666986270, -0.704486955394395430, -0.704522440360587420, -0.704557923565473090, -0.704593405008963840, -0.704628884690971510, -0.704664362611406640, +-0.704699838770180830, -0.704735313167205390, -0.704770785802391720, -0.704806256675651330, -0.704841725786895080, -0.704877193136034360, -0.704912658722981140, -0.704948122547645940, +-0.704983584609940370, -0.705019044909775850, -0.705054503447064000, -0.705089960221715660, -0.705125415233642360, -0.705160868482755830, -0.705196319968966810, -0.705231769692187040, +-0.705267217652327800, -0.705302663849300520, -0.705338108283017020, -0.705373550953387830, -0.705408991860324800, -0.705444431003739550, -0.705479868383542930, -0.705515303999646570, +-0.705550737851962100, -0.705586169940400690, -0.705621600264874190, -0.705657028825293350, -0.705692455621569900, -0.705727880653615690, -0.705763303921341460, -0.705798725424658930, +-0.705834145163479640, -0.705869563137715320, -0.705904979347276810, -0.705940393792075740, -0.705975806472024070, -0.706011217387032540, -0.706046626537013000, -0.706082033921876850, +-0.706117439541535610, -0.706152843395901120, -0.706188245484884240, -0.706223645808396690, -0.706259044366350340, -0.706294441158656030, -0.706329836185225710, -0.706365229445970690, +-0.706400620940802690, -0.706436010669633460, -0.706471398632373850, -0.706506784828936030, -0.706542169259230970, -0.706577551923170510, -0.706612932820666170, -0.706648311951629470, +-0.706683689315972250, -0.706719064913605590, -0.706754438744441220, -0.706789810808391090, -0.706825181105366070, -0.706860549635278220, -0.706895916398038840, -0.706931281393559760, +-0.706966644621752740, -0.707002006082528830, -0.707037365775799900, -0.707072723701477890, -0.707108079859473770, -0.707143434249699390, -0.707178786872066480, -0.707214137726486890, +-0.707249486812871590, -0.707284834131132630, -0.707320179681181880, -0.707355523462930400, -0.707390865476290150, -0.707426205721172650, -0.707461544197489630, -0.707496880905153170, +-0.707532215844074110, -0.707567549014164520, -0.707602880415336370, -0.707638210047500720, -0.707673537910569530, -0.707708864004454540, -0.707744188329067380, -0.707779510884319900, +-0.707814831670123490, -0.707850150686390010, -0.707885467933031420, -0.707920783409958900, -0.707956097117084400, -0.707991409054319680, -0.708026719221576670, -0.708062027618766580, +-0.708097334245801460, -0.708132639102593280, -0.708167942189053210, -0.708203243505093230, -0.708238543050625170, -0.708273840825560770, -0.708309136829812110, -0.708344431063290260, +-0.708379723525907280, -0.708415014217575360, -0.708450303138205670, -0.708485590287710190, -0.708520875666000640, -0.708556159272988980, -0.708591441108587180, -0.708626721172706530, +-0.708661999465259320, -0.708697275986156840, -0.708732550735311160, -0.708767823712634140, -0.708803094918037500, -0.708838364351433440, -0.708873632012733120, -0.708908897901848860, +-0.708944162018692590, -0.708979424363175630, -0.709014684935210030, -0.709049943734707750, -0.709085200761580660, -0.709120456015740810, -0.709155709497099610, -0.709190961205569010, +-0.709226211141061440, -0.709261459303487940, -0.709296705692760820, -0.709331950308791930, -0.709367193151493550, -0.709402434220776760, -0.709437673516553960, -0.709472911038737330, +-0.709508146787237950, -0.709543380761968320, -0.709578612962840300, -0.709613843389765630, -0.709649072042656700, -0.709684298921424820, -0.709719524025982150, -0.709754747356240890, +-0.709789968912112550, -0.709825188693509300, -0.709860406700343120, -0.709895622932525840, -0.709930837389969870, -0.709966050072586510, -0.710001260980288260, -0.710036470112986540, +-0.710071677470593740, -0.710106883053021720, -0.710142086860182430, -0.710177288891988170, -0.710212489148350560, -0.710247687629181670, -0.710282884334393790, -0.710318079263898450, +-0.710353272417607930, -0.710388463795434190, -0.710423653397289300, -0.710458841223085560, -0.710494027272734470, -0.710529211546148340, -0.710564394043239340, -0.710599574763919220, +-0.710634753708100030, -0.710669930875694080, -0.710705106266613540, -0.710740279880769820, -0.710775451718075550, -0.710810621778442900, -0.710845790061783500, -0.710880956568009540, +-0.710916121297033190, -0.710951284248766520, -0.710986445423121950, -0.711021604820010870, -0.711056762439345900, -0.711091918281039350, -0.711127072345002610, -0.711162224631148200, +-0.711197375139388300, -0.711232523869634870, -0.711267670821800540, -0.711302815995796700, -0.711337959391535770, -0.711373101008930250, -0.711408240847891780, -0.711443378908332540, +-0.711478515190165030, -0.711513649693301440, -0.711548782417653400, -0.711583913363133420, -0.711619042529654020, -0.711654169917126600, -0.711689295525463890, -0.711724419354577750, +-0.711759541404380800, -0.711794661674785110, -0.711829780165702530, -0.711864896877045460, -0.711900011808726530, -0.711935124960657250, -0.711970236332750140, -0.712005345924917380, +-0.712040453737071370, -0.712075559769124510, -0.712110664020988440, -0.712145766492575990, -0.712180867183798800, -0.712215966094569500, -0.712251063224800250, -0.712286158574403250, +-0.712321252143291340, -0.712356343931375810, -0.712391433938569520, -0.712426522164784970, -0.712461608609933790, -0.712496693273928620, -0.712531776156681620, -0.712566857258105200, +-0.712601936578111990, -0.712637014116613620, -0.712672089873522710, -0.712707163848751880, -0.712742236042212870, -0.712777306453818320, -0.712812375083480390, -0.712847441931111940, +-0.712882506996624480, -0.712917570279930750, -0.712952631780943370, -0.712987691499574190, -0.713022749435735740, -0.713057805589340510, -0.713092859960300700, -0.713127912548529030, +-0.713162963353937250, -0.713198012376438100, -0.713233059615944190, -0.713268105072367380, -0.713303148745620290, -0.713338190635615320, -0.713373230742264890, -0.713408269065481710, +-0.713443305605177440, -0.713478340361265010, -0.713513373333657050, -0.713548404522265310, -0.713583433927002520, -0.713618461547781190, -0.713653487384513950, -0.713688511437112760, +-0.713723533705490350, -0.713758554189559250, -0.713793572889231620, -0.713828589804419880, -0.713863604935036870, -0.713898618280994770, -0.713933629842206320, -0.713968639618583590, +-0.714003647610039200, -0.714038653816486120, -0.714073658237835970, -0.714108660874001710, -0.714143661724895850, -0.714178660790430800, -0.714213658070519400, -0.714248653565073610, +-0.714283647274006390, -0.714318639197229820, -0.714353629334656630, -0.714388617686199320, -0.714423604251770540, -0.714458589031283120, -0.714493572024648800, -0.714528553231780550, +-0.714563532652591200, -0.714598510286992840, -0.714633486134898080, -0.714668460196219660, -0.714703432470870090, -0.714738402958762230, -0.714773371659808030, -0.714808338573920450, +-0.714843303701012340, -0.714878267040995660, -0.714913228593783370, -0.714948188359287860, -0.714983146337422330, -0.715018102528098500, -0.715053056931229450, -0.715088009546728130, +-0.715122960374506400, -0.715157909414477320, -0.715192856666553520, -0.715227802130647410, -0.715262745806672260, -0.715297687694539830, -0.715332627794163290, -0.715367566105455490, +-0.715402502628328390, -0.715437437362695050, -0.715472370308468110, -0.715507301465560190, -0.715542230833884460, -0.715577158413352790, -0.715612084203878230, -0.715647008205373640, +-0.715681930417751410, -0.715716850840924290, -0.715751769474805010, -0.715786686319306640, -0.715821601374341250, -0.715856514639821810, -0.715891426115661370, -0.715926335801772120, +-0.715961243698067020, -0.715996149804458910, -0.716031054120860320, -0.716065956647184310, -0.716100857383343280, -0.716135756329250080, -0.716170653484817680, -0.716205548849958460, +-0.716240442424585290, -0.716275334208611000, -0.716310224201948450, -0.716345112404510600, -0.716379998816209730, -0.716414883436959030, -0.716449766266670900, -0.716484647305258400, +-0.716519526552634290, -0.716554404008711290, -0.716589279673402580, -0.716624153546620460, -0.716659025628277880, -0.716693895918288030, -0.716728764416563190, -0.716763631123016330, +-0.716798496037560520, -0.716833359160108370, -0.716868220490573190, -0.716903080028867160, -0.716937937774903440, -0.716972793728595130, -0.717007647889854600, -0.717042500258594840, +-0.717077350834728900, -0.717112199618169850, -0.717147046608830110, -0.717181891806622620, -0.717216735211460790, -0.717251576823256800, -0.717286416641923830, -0.717321254667374840, +-0.717356090899522790, -0.717390925338280640, -0.717425757983561010, -0.717460588835276970, -0.717495417893341700, -0.717530245157667610, -0.717565070628167990, -0.717599894304755680, +-0.717634716187343540, -0.717669536275844950, -0.717704354570172230, -0.717739171070238550, -0.717773985775957300, -0.717808798687240790, -0.717843609804002300, -0.717878419126154800, +-0.717913226653611570, -0.717948032386284910, -0.717982836324088210, -0.718017638466934670, -0.718052438814736790, -0.718087237367407760, -0.718122034124860640, -0.718156829087008510, +-0.718191622253764540, -0.718226413625041250, -0.718261203200751930, -0.718295990980809870, -0.718330776965127480, -0.718365561153618270, -0.718400343546195090, -0.718435124142771110, +-0.718469902943259520, -0.718504679947572940, -0.718539455155624900, -0.718574228567328000, -0.718609000182595440, -0.718643770001340500, -0.718678538023476030, -0.718713304248915550, +-0.718748068677571570, -0.718782831309357380, -0.718817592144186390, -0.718852351181971110, -0.718887108422624930, -0.718921863866061050, -0.718956617512192420, -0.718991369360932660, +-0.719026119412194080, -0.719060867665890280, -0.719095614121934570, -0.719130358780239560, -0.719165101640718560, -0.719199842703284850, -0.719234581967851950, -0.719269319434332250, +-0.719304055102639170, -0.719338788972686330, -0.719373521044386120, -0.719408251317652070, -0.719442979792397570, -0.719477706468535480, -0.719512431345979530, -0.719547154424642120, +-0.719581875704436880, -0.719616595185277210, -0.719651312867075840, -0.719686028749745970, -0.719720742833201200, -0.719755455117354610, -0.719790165602119610, -0.719824874287408930, +-0.719859581173136310, -0.719894286259214480, -0.719928989545556950, -0.719963691032076800, -0.719998390718687540, -0.720033088605302680, -0.720067784691834740, -0.720102478978197350, +-0.720137171464304000, -0.720171862150067450, -0.720206551035401210, -0.720241238120218670, -0.720275923404433030, -0.720310606887957890, -0.720345288570705790, -0.720379968452590670, +-0.720414646533525830, -0.720449322813424110, -0.720483997292199030, -0.720518669969763880, -0.720553340846032510, -0.720588009920917430, -0.720622677194332370, -0.720657342666190860, +-0.720692006336405620, -0.720726668204890510, -0.720761328271558700, -0.720795986536323490, -0.720830642999098710, -0.720865297659797010, -0.720899950518332000, -0.720934601574617420, +-0.720969250828566110, -0.721003898280091590, -0.721038543929107380, -0.721073187775526760, -0.721107829819263470, -0.721142470060230470, -0.721177108498341160, -0.721211745133509390, +-0.721246379965647890, -0.721281012994670510, -0.721315644220490660, -0.721350273643021960, -0.721384901262177140, -0.721419527077870270, -0.721454151090014760, -0.721488773298523570, +-0.721523393703310530, -0.721558012304288840, -0.721592629101372230, -0.721627244094474430, -0.721661857283508180, -0.721696468668387210, -0.721731078249025380, -0.721765686025335640, +-0.721800291997231610, -0.721834896164626820, -0.721869498527434870, -0.721904099085569410, -0.721938697838943490, -0.721973294787471080, -0.722007889931065130, -0.722042483269639380, +-0.722077074803107570, -0.722111664531382870, -0.722146252454379580, -0.722180838572010100, -0.722215422884188610, -0.722250005390828950, -0.722284586091843980, -0.722319164987147430, +-0.722353742076653040, -0.722388317360274200, -0.722422890837924990, -0.722457462509518140, -0.722492032374967730, -0.722526600434187590, -0.722561166687090580, -0.722595731133590550, +-0.722630293773601330, -0.722664854607036670, -0.722699413633809410, -0.722733970853833840, -0.722768526267023480, -0.722803079873291620, -0.722837631672551990, -0.722872181664718340, +-0.722906729849704170, -0.722941276227423550, -0.722975820797789330, -0.723010363560715570, -0.723044904516116360, -0.723079443663904420, -0.723113981003993930, -0.723148516536298520, +-0.723183050260731710, -0.723217582177207770, -0.723252112285639350, -0.723286640585940830, -0.723321167078025960, -0.723355691761807810, -0.723390214637200430, -0.723424735704117580, +-0.723459254962473210, -0.723493772412180380, -0.723528288053153060, -0.723562801885305310, -0.723597313908550310, -0.723631824122802030, -0.723666332527974190, -0.723700839123980530, +-0.723735343910735020, -0.723769846888150940, -0.723804348056142130, -0.723838847414622900, -0.723873344963506080, -0.723907840702705970, -0.723942334632136310, -0.723976826751710710, +-0.724011317061343470, -0.724045805560947550, -0.724080292250437460, -0.724114777129726270, -0.724149260198728160, -0.724183741457356980, -0.724218220905526340, -0.724252698543150550, +-0.724287174370142670, -0.724321648386416770, -0.724356120591887140, -0.724390590986466850, -0.724425059570070200, -0.724459526342610790, -0.724493991304002600, -0.724528454454159700, +-0.724562915792995480, -0.724597375320423900, -0.724631833036359140, -0.724666288940714500, -0.724700743033404260, -0.724735195314341940, -0.724769645783442160, -0.724804094440617890, +-0.724838541285783400, -0.724872986318852770, -0.724907429539739410, -0.724941870948357490, -0.724976310544620860, -0.725010748328443590, -0.725045184299739630, -0.725079618458422390, +-0.725114050804406160, -0.725148481337605010, -0.725182910057932450, -0.725217336965302660, -0.725251762059629490, -0.725286185340826780, -0.725320606808809050, -0.725355026463489480, +-0.725389444304782360, -0.725423860332601870, -0.725458274546861510, -0.725492686947475370, -0.725527097534357620, -0.725561506307422330, -0.725595913266583010, -0.725630318411753960, +-0.725664721742849350, -0.725699123259782590, -0.725733522962468180, -0.725767920850819760, -0.725802316924751610, -0.725836711184178030, -0.725871103629012420, -0.725905494259168950, +-0.725939883074562140, -0.725974270075105180, -0.726008655260712680, -0.726043038631298380, -0.726077420186776570, -0.726111799927061650, -0.726146177852066700, -0.726180553961706780, +-0.726214928255895060, -0.726249300734546080, -0.726283671397573770, -0.726318040244892440, -0.726352407276416150, -0.726386772492058630, -0.726421135891734180, -0.726455497475357200, +-0.726489857242841100, -0.726524215194100380, -0.726558571329049220, -0.726592925647601470, -0.726627278149671870, -0.726661628835173710, -0.726695977704021390, -0.726730324756129530, +-0.726764669991411540, -0.726799013409781920, -0.726833355011154650, -0.726867694795444440, -0.726902032762564600, -0.726936368912429630, -0.726970703244954050, -0.727005035760051490, +-0.727039366457636340, -0.727073695337622670, -0.727108022399924890, -0.727142347644457290, -0.727176671071133600, -0.727210992679868110, -0.727245312470575440, -0.727279630443169340, +-0.727313946597563990, -0.727348260933673880, -0.727382573451413110, -0.727416884150696160, -0.727451193031436680, -0.727485500093549290, -0.727519805336948490, -0.727554108761547800, +-0.727588410367261850, -0.727622710154004810, -0.727657008121691320, -0.727691304270235100, -0.727725598599550550, -0.727759891109552300, -0.727794181800154090, -0.727828470671270320, +-0.727862757722815500, -0.727897042954703700, -0.727931326366849650, -0.727965607959166870, -0.727999887731570210, -0.728034165683974050, -0.728068441816292160, -0.728102716128439240, +-0.728136988620329490, -0.728171259291877200, -0.728205528142997220, -0.728239795173603040, -0.728274060383609640, -0.728308323772930870, -0.728342585341481220, -0.728376845089175000, +-0.728411103015926820, -0.728445359121651200, -0.728479613406261880, -0.728513865869673370, -0.728548116511800630, -0.728582365332557380, -0.728616612331858040, -0.728650857509617220, +-0.728685100865749340, -0.728719342400168890, -0.728753582112789840, -0.728787820003526820, -0.728822056072294560, -0.728856290319006890, -0.728890522743578460, -0.728924753345923770, +-0.728958982125957440, -0.728993209083593330, -0.729027434218746270, -0.729061657531330900, -0.729095879021261160, -0.729130098688451690, -0.729164316532816880, -0.729198532554271360, +-0.729232746752729750, -0.729266959128106020, -0.729301169680314890, -0.729335378409271100, -0.729369585314888490, -0.729403790397082140, -0.729437993655766110, -0.729472195090855260, +-0.729506394702264080, -0.729540592489906660, -0.729574788453698050, -0.729608982593552220, -0.729643174909383910, -0.729677365401107720, -0.729711554068637970, -0.729745740911889710, +-0.729779925930776900, -0.729814109125214160, -0.729848290495116460, -0.729882470040397750, -0.729916647760972870, -0.729950823656756340, -0.729984997727662790, -0.730019169973606940, +-0.730053340394502980, -0.730087508990265640, -0.730121675760809890, -0.730155840706049550, -0.730190003825899710, -0.730224165120274770, -0.730258324589089680, -0.730292482232258620, +-0.730326638049696330, -0.730360792041317650, -0.730394944207036770, -0.730429094546768410, -0.730463243060427430, -0.730497389747928330, -0.730531534609186070, -0.730565677644114620, +-0.730599818852629030, -0.730633958234644170, -0.730668095790074080, -0.730702231518833730, -0.730736365420837860, -0.730770497496001090, -0.730804627744238380, -0.730838756165463790, +-0.730872882759592280, -0.730907007526538920, -0.730941130466217670, -0.730975251578543590, -0.731009370863431430, -0.731043488320796130, -0.731077603950551770, -0.731111717752613410, +-0.731145829726896120, -0.731179939873313980, -0.731214048191781930, -0.731248154682214710, -0.731282259344527170, -0.731316362178634270, -0.731350463184450180, -0.731384562361889980, +-0.731418659710868500, -0.731452755231300270, -0.731486848923100010, -0.731520940786182680, -0.731555030820463030, -0.731589119025855990, -0.731623205402275990, -0.731657289949638190, +-0.731691372667856890, -0.731725453556847150, -0.731759532616523820, -0.731793609846801640, -0.731827685247595780, -0.731861758818820320, -0.731895830560390540, -0.731929900472221510, +-0.731963968554227300, -0.731998034806323190, -0.732032099228424050, -0.732066161820444710, -0.732100222582300120, -0.732134281513904810, -0.732168338615173720, -0.732202393886022040, +-0.732236447326364170, -0.732270498936115180, -0.732304548715189910, -0.732338596663503650, -0.732372642780970470, -0.732406687067505780, -0.732440729523024640, -0.732474770147441330, +-0.732508808940671050, -0.732542845902628860, -0.732576881033229600, -0.732610914332388340, -0.732644945800019490, -0.732678975436038330, -0.732713003240359930, -0.732747029212898800, +-0.732781053353570130, -0.732815075662288870, -0.732849096138969760, -0.732883114783528300, -0.732917131595878790, -0.732951146575936410, -0.732985159723616440, -0.733019171038833290, +-0.733053180521502260, -0.733087188171538170, -0.733121193988856560, -0.733155197973371480, -0.733189200124998550, -0.733223200443652860, -0.733257198929248900, -0.733291195581701970, +-0.733325190400927030, -0.733359183386839030, -0.733393174539353490, -0.733427163858384580, -0.733461151343847930, -0.733495136995658600, -0.733529120813731120, -0.733563102797980870, +-0.733597082948322820, -0.733631061264672150, -0.733665037746944030, -0.733699012395053090, -0.733732985208914830, -0.733766956188443900, -0.733800925333555560, -0.733834892644164900, +-0.733868858120186980, -0.733902821761537210, -0.733936783568130190, -0.733970743539881120, -0.734004701676705510, -0.734038657978517860, -0.734072612445233470, -0.734106565076767640, +-0.734140515873035420, -0.734174464833952100, -0.734208411959432430, -0.734242357249391690, -0.734276300703745390, -0.734310242322408050, -0.734344182105295060, -0.734378120052321610, +-0.734412056163403100, -0.734445990438454270, -0.734479922877390390, -0.734513853480126990, -0.734547782246578800, -0.734581709176660990, -0.734615634270288980, -0.734649557527377820, +-0.734683478947843140, -0.734717398531599450, -0.734751316278562270, -0.734785232188647110, -0.734819146261768590, -0.734853058497842100, -0.734886968896783070, -0.734920877458506540, +-0.734954784182928140, -0.734988689069962400, -0.735022592119525030, -0.735056493331531560, -0.735090392705896490, -0.735124290242535450, -0.735158185941363620, -0.735192079802296620, +-0.735225971825249180, -0.735259862010136820, -0.735293750356875050, -0.735327636865378610, -0.735361521535563110, -0.735395404367343850, -0.735429285360636010, -0.735463164515355210, +-0.735497041831416290, -0.735530917308734770, -0.735564790947226270, -0.735598662746805410, -0.735632532707387930, -0.735666400828889120, -0.735700267111224270, -0.735734131554309110, +-0.735767994158058380, -0.735801854922387810, -0.735835713847212360, -0.735869570932447650, -0.735903426178009080, -0.735937279583811830, -0.735971131149771750, -0.736004980875803570, +-0.736038828761822810, -0.736072674807745410, -0.736106519013485890, -0.736140361378960220, -0.736174201904083560, -0.736208040588771430, -0.736241877432939450, -0.736275712436502580, +-0.736309545599376340, -0.736343376921476560, -0.736377206402717980, -0.736411034043016440, -0.736444859842287360, -0.736478683800446340, -0.736512505917408360, -0.736546326193089130, +-0.736580144627404400, -0.736613961220268900, -0.736647775971598580, -0.736681588881308860, -0.736715399949315120, -0.736749209175533220, -0.736783016559877880, -0.736816822102265070, +-0.736850625802610510, -0.736884427660829180, -0.736918227676836680, -0.736952025850548530, -0.736985822181880470, -0.737019616670748110, -0.737053409317066420, -0.737087200120751130, +-0.737120989081718190, -0.737154776199882460, -0.737188561475159760, -0.737222344907465740, -0.737256126496716120, -0.737289906242825870, -0.737323684145710920, -0.737357460205287030, +-0.737391234421469140, -0.737425006794173220, -0.737458777323314770, -0.737492546008809310, -0.737526312850572800, -0.737560077848520290, -0.737593841002567530, -0.737627602312630470, +-0.737661361778624180, -0.737695119400464390, -0.737728875178066850, -0.737762629111347050, -0.737796381200221060, -0.737830131444603850, -0.737863879844411490, -0.737897626399559140, +-0.737931371109962870, -0.737965113975538100, -0.737998854996200440, -0.738032594171866060, -0.738066331502449820, -0.738100066987867900, -0.738133800628036020, -0.738167532422869250, +-0.738201262372283780, -0.738234990476195120, -0.738268716734518990, -0.738302441147171250, -0.738336163714067180, -0.738369884435122750, -0.738403603310253900, -0.738437320339375700, +-0.738471035522404230, -0.738504748859255210, -0.738538460349844610, -0.738572169994087480, -0.738605877791900010, -0.738639583743198050, -0.738673287847896880, -0.738706990105912450, +-0.738740690517160630, -0.738774389081557010, -0.738808085799017800, -0.738841780669458050, -0.738875473692793830, -0.738909164868941200, -0.738942854197815360, -0.738976541679332470, +-0.739010227313408150, -0.739043911099958260, -0.739077593038898860, -0.739111273130145240, -0.739144951373613690, -0.739178627769219500, -0.739212302316878840, -0.739245975016507240, +-0.739279645868020860, -0.739313314871335560, -0.739346982026366620, -0.739380647333030330, -0.739414310791242760, -0.739447972400919080, -0.739481632161975380, -0.739515290074327700, +-0.739548946137891680, -0.739582600352583720, -0.739616252718318990, -0.739649903235013450, -0.739683551902583610, -0.739717198720944550, -0.739750843690012430, -0.739784486809703210, +-0.739818128079932860, -0.739851767500617430, -0.739885405071672330, -0.739919040793013960, -0.739952674664557720, -0.739986306686219790, -0.740019936857916120, -0.740053565179562560, +-0.740087191651075390, -0.740120816272369920, -0.740154439043362420, -0.740188059963969190, -0.740221679034105410, -0.740255296253687580, -0.740288911622631330, -0.740322525140852950, +-0.740356136808268510, -0.740389746624793400, -0.740423354590343920, -0.740456960704836350, -0.740490564968186100, -0.740524167380309460, -0.740557767941122380, -0.740591366650541150, +-0.740624963508481280, -0.740658558514858960, -0.740692151669590570, -0.740725742972591420, -0.740759332423778010, -0.740792920023066180, -0.740826505770372120, -0.740860089665612120, +-0.740893671708701460, -0.740927251899556770, -0.740960830238094230, -0.740994406724229230, -0.741027981357878280, -0.741061554138957360, -0.741095125067382510, -0.741128694143070140, +-0.741162261365935880, -0.741195826735896120, -0.741229390252866600, -0.741262951916763500, -0.741296511727503100, -0.741330069685001370, -0.741363625789174810, -0.741397180039938820, +-0.741430732437210030, -0.741464282980904500, -0.741497831670938080, -0.741531378507227060, -0.741564923489687610, -0.741598466618235810, -0.741632007892788160, -0.741665547313260290, +-0.741699084879568480, -0.741732620591629250, -0.741766154449358120, -0.741799686452671690, -0.741833216601486050, -0.741866744895717580, -0.741900271335282020, -0.741933795920095670, +-0.741967318650075260, -0.742000839525136180, -0.742034358545195060, -0.742067875710167970, -0.742101391019971300, -0.742134904474521350, -0.742168416073733850, -0.742201925817525420, +-0.742235433705812350, -0.742268939738510490, -0.742302443915536130, -0.742335946236805770, -0.742369446702235480, -0.742402945311742000, -0.742436442065240840, -0.742469936962648510, +-0.742503430003881640, -0.742536921188855840, -0.742570410517487840, -0.742603897989693730, -0.742637383605390220, -0.742670867364493060, -0.742704349266918530, -0.742737829312583590, +-0.742771307501403630, -0.742804783833295510, -0.742838258308175400, -0.742871730925959710, -0.742905201686564930, -0.742938670589906810, -0.742972137635902090, -0.743005602824467260, +-0.743039066155518180, -0.743072527628971360, -0.743105987244743300, -0.743139445002750200, -0.743172900902908880, -0.743206354945134870, -0.743239807129345340, -0.743273257455456140, +-0.743306705923383550, -0.743340152533044310, -0.743373597284354700, -0.743407040177231470, -0.743440481211590230, -0.743473920387347720, -0.743507357704420890, -0.743540793162725260, +-0.743574226762177660, -0.743607658502694500, -0.743641088384192180, -0.743674516406587440, -0.743707942569796220, -0.743741366873734930, -0.743774789318320640, -0.743808209903469190, +-0.743841628629097080, -0.743875045495120850, -0.743908460501457420, -0.743941873648022560, -0.743975284934732860, -0.744008694361505410, -0.744042101928255820, -0.744075507634901050, +-0.744108911481357490, -0.744142313467541670, -0.744175713593370200, -0.744209111858759380, -0.744242508263625700, -0.744275902807886030, -0.744309295491456300, -0.744342686314253270, +-0.744376075276193650, -0.744409462377193740, -0.744442847617170500, -0.744476230996039880, -0.744509612513718720, -0.744542992170123650, -0.744576369965170960, -0.744609745898777260, +-0.744643119970859300, -0.744676492181333800, -0.744709862530116730, -0.744743231017125030, -0.744776597642275550, -0.744809962405484250, -0.744843325306668080, -0.744876686345743670, +-0.744910045522627410, -0.744943402837236370, -0.744976758289486510, -0.745010111879294780, -0.745043463606578140, -0.745076813471252430, -0.745110161473234720, -0.745143507612441640, +-0.745176851888789790, -0.745210194302196150, -0.745243534852576660, -0.745276873539848510, -0.745310210363928080, -0.745343545324732020, -0.745376878422177150, -0.745410209656180100, +-0.745443539026657720, -0.745476866533526290, -0.745510192176702670, -0.745543515956103910, -0.745576837871645970, -0.745610157923245920, -0.745643476110820600, -0.745676792434286530, +-0.745710106893560760, -0.745743419488559490, -0.745776730219199660, -0.745810039085398220, -0.745843346087071370, -0.745876651224136270, -0.745909954496509540, -0.745943255904108150, +-0.745976555446848270, -0.746009853124647070, -0.746043148937421520, -0.746076442885087900, -0.746109734967563050, -0.746143025184763940, -0.746176313536607180, -0.746209600023010070, +-0.746242884643888550, -0.746276167399159810, -0.746309448288741020, -0.746342727312548250, -0.746376004470498790, -0.746409279762509150, -0.746442553188496390, -0.746475824748377480, +-0.746509094442068810, -0.746542362269487340, -0.746575628230550240, -0.746608892325173910, -0.746642154553275210, -0.746675414914771180, -0.746708673409578920, -0.746741930037614690, +-0.746775184798795570, -0.746808437693038840, -0.746841688720260690, -0.746874937880378290, -0.746908185173308590, -0.746941430598968450, -0.746974674157275030, -0.747007915848144630, +-0.747041155671494430, -0.747074393627241480, -0.747107629715302420, -0.747140863935594310, -0.747174096288034000, -0.747207326772538430, -0.747240555389024900, -0.747273782137409580, +-0.747307007017610100, -0.747340230029542860, -0.747373451173125040, -0.747406670448273690, -0.747439887854905560, -0.747473103392937930, -0.747506317062287430, -0.747539528862871010, +-0.747572738794606060, -0.747605946857409000, -0.747639153051197100, -0.747672357375887330, -0.747705559831396640, -0.747738760417642310, -0.747771959134540860, -0.747805155982009360, +-0.747838350959965430, -0.747871544068325230, -0.747904735307006190, -0.747937924675925350, -0.747971112175000010, -0.748004297804146570, -0.748037481563282310, -0.748070663452324760, +-0.748103843471190190, -0.748137021619796010, -0.748170197898059270, -0.748203372305897170, -0.748236544843226770, -0.748269715509964680, -0.748302884306028430, -0.748336051231335290, +-0.748369216285801660, -0.748402379469344960, -0.748435540781882350, -0.748468700223330900, -0.748501857793608010, -0.748535013492630070, -0.748568167320314730, -0.748601319276579140, +-0.748634469361340040, -0.748667617574514720, -0.748700763916020470, -0.748733908385774470, -0.748767050983693450, -0.748800191709694810, -0.748833330563695940, -0.748866467545613590, +-0.748899602655364930, -0.748932735892867350, -0.748965867258037930, -0.748998996750794070, -0.749032124371052490, -0.749065250118730490, -0.749098373993745680, -0.749131495996014810, +-0.749164616125455040, -0.749197734381983780, -0.749230850765518100, -0.749263965275975720, -0.749297077913273050, -0.749330188677328040, -0.749363297568057200, -0.749396404585378150, +-0.749429509729208080, -0.749462612999464260, -0.749495714396064220, -0.749528813918924560, -0.749561911567962920, -0.749595007343096700, -0.749628101244242730, -0.749661193271318420, +-0.749694283424241270, -0.749727371702928360, -0.749760458107297300, -0.749793542637264720, -0.749826625292748460, -0.749859706073665810, -0.749892784979933610, -0.749925862011469490, +-0.749958937168190620, -0.749992010450014850, -0.750025081856858680, -0.750058151388639740, -0.750091219045275760, -0.750124284826683470, -0.750157348732780500, -0.750190410763484140, +-0.750223470918711670, -0.750256529198380930, -0.750289585602408550, -0.750322640130712150, -0.750355692783209460, -0.750388743559817220, -0.750421792460453150, -0.750454839485034660, +-0.750487884633478930, -0.750520927905703910, -0.750553969301626210, -0.750587008821163910, -0.750620046464233860, -0.750653082230753550, -0.750686116120640730, -0.750719148133812460, +-0.750752178270186700, -0.750785206529680060, -0.750818232912210610, -0.750851257417695650, -0.750884280046052450, -0.750917300797198430, -0.750950319671051190, -0.750983336667528150, +-0.751016351786547020, -0.751049365028024880, -0.751082376391879250, -0.751115385878027840, -0.751148393486387730, -0.751181399216876770, -0.751214403069412230, -0.751247405043911960, +-0.751280405140292820, -0.751313403358472740, -0.751346399698369470, -0.751379394159899850, -0.751412386742981830, -0.751445377447532700, -0.751478366273470310, -0.751511353220712160, +-0.751544338289175330, -0.751577321478777760, -0.751610302789437080, -0.751643282221070460, -0.751676259773595530, -0.751709235446930020, -0.751742209240991330, -0.751775181155697410, +-0.751808151190965330, -0.751841119346712940, -0.751874085622857850, -0.751907050019317460, -0.751940012536009280, -0.751972973172851170, -0.752005931929760840, -0.752038888806655480, +-0.752071843803452820, -0.752104796920070930, -0.752137748156426640, -0.752170697512438040, -0.752203644988022720, -0.752236590583098220, -0.752269534297582590, -0.752302476131392780, +-0.752335416084446870, -0.752368354156662590, -0.752401290347957220, -0.752434224658248610, -0.752467157087454490, -0.752500087635492370, -0.752533016302280310, -0.752565943087735610, +-0.752598867991776110, -0.752631791014319320, -0.752664712155282970, -0.752697631414584900, -0.752730548792142740, -0.752763464287874440, -0.752796377901697290, -0.752829289633529020, +-0.752862199483287920, -0.752895107450891050, -0.752928013536256380, -0.752960917739301740, -0.752993820059944750, -0.753026720498103490, -0.753059619053695120, -0.753092515726637710, +-0.753125410516849450, -0.753158303424247280, -0.753191194448749270, -0.753224083590273370, -0.753256970848737440, -0.753289856224058860, -0.753322739716155710, -0.753355621324945930, +-0.753388501050346830, -0.753421378892276450, -0.753454254850652650, -0.753487128925393160, -0.753520001116416150, -0.753552871423638910, -0.753585739846979520, -0.753618606386355920, +-0.753651471041685620, -0.753684333812886690, -0.753717194699876750, -0.753750053702573970, -0.753782910820896320, -0.753815766054761080, -0.753848619404086540, -0.753881470868790540, +-0.753914320448790700, -0.753947168144005090, -0.753980013954351440, -0.754012857879748140, -0.754045699920112390, -0.754078540075362350, -0.754111378345416310, -0.754144214730191440, +-0.754177049229606160, -0.754209881843578180, -0.754242712572025460, -0.754275541414866300, -0.754308368372017980, -0.754341193443398780, -0.754374016628926890, -0.754406837928519590, +-0.754439657342095280, -0.754472474869571700, -0.754505290510867120, -0.754538104265899510, -0.754570916134586380, -0.754603726116846120, -0.754636534212596350, -0.754669340421755260, +-0.754702144744240800, -0.754734947179971030, -0.754767747728864120, -0.754800546390837600, -0.754833343165809630, -0.754866138053698620, -0.754898931054422070, -0.754931722167898060, +-0.754964511394044860, -0.754997298732780320, -0.755030084184022840, -0.755062867747689830, -0.755095649423699670, -0.755128429211970760, -0.755161207112420410, -0.755193983124966990, +-0.755226757249528700, -0.755259529486023710, -0.755292299834369740, -0.755325068294484980, -0.755357834866287710, -0.755390599549695670, -0.755423362344627150, -0.755456123251000200, +-0.755488882268732900, -0.755521639397743750, -0.755554394637950160, -0.755587147989270620, -0.755619899451623560, -0.755652649024926350, -0.755685396709097510, -0.755718142504055330, +-0.755750886409717660, -0.755783628426003110, -0.755816368552829190, -0.755849106790114300, -0.755881843137776950, -0.755914577595734770, -0.755947310163906150, -0.755980040842209160, +-0.756012769630562410, -0.756045496528883530, -0.756078221537090810, -0.756110944655102870, -0.756143665882837210, -0.756176385220212350, -0.756209102667146690, -0.756241818223558180, +-0.756274531889365440, -0.756307243664485980, -0.756339953548838540, -0.756372661542341510, -0.756405367644912510, -0.756438071856470050, -0.756470774176932430, -0.756503474606217810, +-0.756536173144244820, -0.756568869790931190, -0.756601564546195650, -0.756634257409955930, -0.756666948382130560, -0.756699637462637800, -0.756732324651395950, -0.756765009948323520, +-0.756797693353338240, -0.756830374866358850, -0.756863054487303840, -0.756895732216090740, -0.756928408052638390, -0.756961081996865070, -0.756993754048689070, -0.757026424208028900, +-0.757059092474802410, -0.757091758848928100, -0.757124423330324810, -0.757157085918910070, -0.757189746614602700, -0.757222405417320890, -0.757255062326983470, -0.757287717343507970, +-0.757320370466813220, -0.757353021696817840, -0.757385671033439680, -0.757418318476597240, -0.757450964026209150, -0.757483607682193470, -0.757516249444469160, -0.757548889312953940, +-0.757581527287566450, -0.757614163368225510, -0.757646797554848870, -0.757679429847355150, -0.757712060245662840, -0.757744688749690480, -0.757777315359356660, -0.757809940074579250, +-0.757842562895276960, -0.757875183821368650, -0.757907802852771930, -0.757940419989405870, -0.757973035231188640, -0.758005648578039090, -0.758038260029875290, -0.758070869586615740, +-0.758103477248179280, -0.758136083014483870, -0.758168686885448250, -0.758201288860990920, -0.758233888941030390, -0.758266487125485390, -0.758299083414273880, -0.758331677807314700, +-0.758364270304526580, -0.758396860905827470, -0.758429449611136340, -0.758462036420371470, -0.758494621333451470, -0.758527204350295300, -0.758559785470820810, -0.758592364694947060, +-0.758624942022592230, -0.758657517453675050, -0.758690090988114020, -0.758722662625827770, -0.758755232366735140, -0.758787800210754090, -0.758820366157803680, -0.758852930207802530, +-0.758885492360668820, -0.758918052616321390, -0.758950610974678750, -0.758983167435659630, -0.759015721999182880, -0.759048274665166560, -0.759080825433529500, -0.759113374304190680, +-0.759145921277068150, -0.759178466352080860, -0.759211009529147330, -0.759243550808186620, -0.759276090189116790, -0.759308627671856580, -0.759341163256325280, -0.759373696942440720, +-0.759406228730121760, -0.759438758619287450, -0.759471286609856080, -0.759503812701746940, -0.759536336894877760, -0.759568859189167940, -0.759601379584536220, -0.759633898080900650, +-0.759666414678180520, -0.759698929376294240, -0.759731442175160530, -0.759763953074698680, -0.759796462074826650, -0.759828969175463610, -0.759861474376527960, -0.759893977677938650, +-0.759926479079614300, -0.759958978581473880, -0.759991476183436210, -0.760023971885419590, -0.760056465687343090, -0.760088957589125650, -0.760121447590685450, -0.760153935691941780, +-0.760186421892813270, -0.760218906193218640, -0.760251388593077060, -0.760283869092306720, -0.760316347690826680, -0.760348824388556110, -0.760381299185413080, -0.760413772081316890, +-0.760446243076186250, -0.760478712169940340, -0.760511179362497240, -0.760543644653776330, -0.760576108043696460, -0.760608569532176150, -0.760641029119134340, -0.760673486804489980, +-0.760705942588161930, -0.760738396470069360, -0.760770848450130430, -0.760803298528264450, -0.760835746704390360, -0.760868192978426780, -0.760900637350292670, -0.760933079819906990, +-0.760965520387188450, -0.760997959052056580, -0.761030395814429440, -0.761062830674226310, -0.761095263631366480, -0.761127694685768130, -0.761160123837350540, -0.761192551086032680, +-0.761224976431733700, -0.761257399874372020, -0.761289821413866810, -0.761322241050137350, -0.761354658783101930, -0.761387074612679960, -0.761419488538790270, -0.761451900561351810, +-0.761484310680283990, -0.761516718895505100, -0.761549125206934300, -0.761581529614490990, -0.761613932118093690, -0.761646332717661470, -0.761678731413113490, -0.761711128204368590, +-0.761743523091346190, -0.761775916073964670, -0.761808307152143650, -0.761840696325801650, -0.761873083594857840, -0.761905468959231390, -0.761937852418841270, -0.761970233973606750, +-0.762002613623446350, -0.762034991368279350, -0.762067367208025260, -0.762099741142602480, -0.762132113171930300, -0.762164483295927900, -0.762196851514514220, -0.762229217827608770, +-0.762261582235129960, -0.762293944736997080, -0.762326305333129730, -0.762358664023446320, -0.762391020807866250, -0.762423375686308690, -0.762455728658692930, -0.762488079724937600, +-0.762520428884961960, -0.762552776138685550, -0.762585121486026970, -0.762617464926905630, -0.762649806461240590, -0.762682146088951020, -0.762714483809956320, -0.762746819624175230, +-0.762779153531527030, -0.762811485531931230, -0.762843815625306450, -0.762876143811572090, -0.762908470090647440, -0.762940794462451550, -0.762973116926904060, -0.763005437483923350, +-0.763037756133429170, -0.763070072875340790, -0.763102387709576950, -0.763134700636057260, -0.763167011654700690, -0.763199320765426960, -0.763231627968154580, -0.763263933262803170, +-0.763296236649292140, -0.763328538127540310, -0.763360837697467210, -0.763393135358991890, -0.763425431112033760, -0.763457724956512320, -0.763490016892346300, -0.763522306919455220, +-0.763554595037758690, -0.763586881247175440, -0.763619165547624880, -0.763651447939026510, -0.763683728421299390, -0.763716006994363370, -0.763748283658136960, -0.763780558412540110, +-0.763812831257491660, -0.763845102192911130, -0.763877371218717790, -0.763909638334831050, -0.763941903541170530, -0.763974166837654840, -0.764006428224203840, -0.764038687700737020, +-0.764070945267173230, -0.764103200923432090, -0.764135454669432890, -0.764167706505095130, -0.764199956430338330, -0.764232204445081330, -0.764264450549243860, -0.764296694742745530, +-0.764328937025505200, -0.764361177397442580, -0.764393415858476870, -0.764425652408528000, -0.764457887047514720, -0.764490119775356750, -0.764522350591973710, -0.764554579497284560, +-0.764586806491208910, -0.764619031573666290, -0.764651254744576070, -0.764683476003858000, -0.764715695351430910, -0.764747912787214550, -0.764780128311128850, -0.764812341923092440, +-0.764844553623025170, -0.764876763410846540, -0.764908971286475950, -0.764941177249833350, -0.764973381300837360, -0.765005583439408050, -0.765037783665465040, -0.765069981978927280, +-0.765102178379714500, -0.765134372867746330, -0.765166565442942480, -0.765198756105221920, -0.765230944854504490, -0.765263131690710030, -0.765295316613757490, -0.765327499623566500, +-0.765359680720056890, -0.765391859903148060, -0.765424037172759860, -0.765456212528811240, -0.765488385971222150, -0.765520557499912320, -0.765552727114800820, -0.765584894815807600, +-0.765617060602852060, -0.765649224475853820, -0.765681386434732940, -0.765713546479408150, -0.765745704609799960, -0.765777860825827110, -0.765810015127409540, -0.765842167514466990, +-0.765874317986919070, -0.765906466544685640, -0.765938613187685750, -0.765970757915839240, -0.766002900729066290, -0.766035041627285640, -0.766067180610417450, -0.766099317678381350, +-0.766131452831096960, -0.766163586068484110, -0.766195717390462110, -0.766227846796950770, -0.766259974287870180, -0.766292099863139290, -0.766324223522678150, -0.766356345266406390, +-0.766388465094244190, -0.766420583006110490, -0.766452699001925360, -0.766484813081608760, -0.766516925245079750, -0.766549035492258500, -0.766581143823064640, -0.766613250237418000, +-0.766645354735238430, -0.766677457316445210, -0.766709557980958410, -0.766741656728697870, -0.766773753559582990, -0.766805848473533720, -0.766837941470469800, -0.766870032550311050, +-0.766902121712977560, -0.766934208958388370, -0.766966294286463680, -0.766998377697123650, -0.767030459190287230, -0.767062538765874820, -0.767094616423805940, -0.767126692164000870, +-0.767158765986378780, -0.767190837890859730, -0.767222907877363910, -0.767254975945810600, -0.767287042096119750, -0.767319106328211320, -0.767351168642005140, -0.767383229037421290, +-0.767415287514379150, -0.767447344072798690, -0.767479398712600290, -0.767511451433703030, -0.767543502236027080, -0.767575551119492490, -0.767607598084018910, -0.767639643129526710, +-0.767671686255935070, -0.767703727463164620, -0.767735766751134420, -0.767767804119764860, -0.767799839568975790, -0.767831873098687060, -0.767863904708819050, -0.767895934399290820, +-0.767927962170022900, -0.767959988020935350, -0.767992011951947550, -0.768024033962979690, -0.768056054053951720, -0.768088072224783590, -0.768120088475395590, -0.768152102805707120, +-0.768184115215638450, -0.768216125705109660, -0.768248134274040370, -0.768280140922350640, -0.768312145649960640, -0.768344148456790550, -0.768376149342759770, -0.768408148307788700, +-0.768440145351797390, -0.768472140474705580, -0.768504133676433330, -0.768536124956900820, -0.768568114316027890, -0.768600101753735050, -0.768632087269941700, -0.768664070864568010, +-0.768696052537534480, -0.768728032288760630, -0.768760010118166530, -0.768791986025672560, -0.768823960011198570, -0.768855932074664960, -0.768887902215991240, -0.768919870435098020, +-0.768951836731904810, -0.768983801106332130, -0.769015763558299810, -0.769047724087728150, -0.769079682694537530, -0.769111639378647350, -0.769143594139978020, -0.769175546978450030, +-0.769207497893982910, -0.769239446886497040, -0.769271393955912600, -0.769303339102149540, -0.769335282325128600, -0.769367223624769060, -0.769399163000991430, -0.769431100453716210, +-0.769463035982863030, -0.769494969588352170, -0.769526901270103920, -0.769558831028038680, -0.769590758862076060, -0.769622684772136580, -0.769654608758140730, -0.769686530820007930, +-0.769718450957658900, -0.769750369171013800, -0.769782285459992720, -0.769814199824516150, -0.769846112264503830, -0.769878022779876270, -0.769909931370553970, -0.769941838036456440, +-0.769973742777504410, -0.770005645593617950, -0.770037546484717450, -0.770069445450723310, -0.770101342491555260, -0.770133237607133920, -0.770165130797379800, -0.770197022062212520, +-0.770228911401552590, -0.770260798815320500, -0.770292684303436670, -0.770324567865820820, -0.770356449502393570, -0.770388329213075540, -0.770420206997786350, -0.770452082856446620, +-0.770483956788976740, -0.770515828795296900, -0.770547698875327810, -0.770579567028989110, -0.770611433256201630, -0.770643297556885760, -0.770675159930961360, -0.770707020378349150, +-0.770738878898969300, -0.770770735492742330, -0.770802590159588740, -0.770834442899428370, -0.770866293712182180, -0.770898142597770120, -0.770929989556112580, -0.770961834587130080, +-0.770993677690742900, -0.771025518866871980, -0.771057358115436850, -0.771089195436358340, -0.771121030829557190, -0.771152864294953220, -0.771184695832466960, -0.771216525442019020, +-0.771248353123529800, -0.771280178876919910, -0.771312002702109420, -0.771343824599018730, -0.771375644567568910, -0.771407462607679670, -0.771439278719271760, -0.771471092902265680, +-0.771502905156582040, -0.771534715482140920, -0.771566523878863040, -0.771598330346669140, -0.771630134885479050, -0.771661937495213720, -0.771693738175793560, -0.771725536927138970, +-0.771757333749170880, -0.771789128641809150, -0.771820921604974620, -0.771852712638588010, -0.771884501742569400, -0.771916288916839500, -0.771948074161318940, -0.771979857475928120, +-0.772011638860587990, -0.772043418315218390, -0.772075195839740270, -0.772106971434074470, -0.772138745098141070, -0.772170516831860660, -0.772202286635154000, -0.772234054507941910, +-0.772265820450144470, -0.772297584461682400, -0.772329346542476650, -0.772361106692447290, -0.772392864911515150, -0.772424621199600760, -0.772456375556624940, -0.772488127982508430, +-0.772519878477171300, -0.772551627040534480, -0.772583373672518950, -0.772615118373044530, -0.772646861142032400, -0.772678601979403190, -0.772710340885077400, -0.772742077858976080, +-0.772773812901019320, -0.772805546011128160, -0.772837277189223020, -0.772869006435224600, -0.772900733749053660, -0.772932459130630910, -0.772964182579877310, -0.772995904096712930, +-0.773027623681058820, -0.773059341332835940, -0.773091057051964350, -0.773122770838365230, -0.773154482691959080, -0.773186192612666860, -0.773217900600409290, -0.773249606655106780, +-0.773281310776680160, -0.773313012965050620, -0.773344713220138310, -0.773376411541864210, -0.773408107930149020, -0.773439802384913830, -0.773471494906078920, -0.773503185493565230, +-0.773534874147293830, -0.773566560867185000, -0.773598245653159710, -0.773629928505138900, -0.773661609423043180, -0.773693288406793860, -0.773724965456310980, -0.773756640571515610, +-0.773788313752328930, -0.773819984998671220, -0.773851654310463540, -0.773883321687626750, -0.773914987130081670, -0.773946650637749260, -0.773978312210550130, -0.774009971848405140, +-0.774041629551235450, -0.774073285318961470, -0.774104939151504360, -0.774136591048784740, -0.774168241010724010, -0.774199889037242350, -0.774231535128261040, -0.774263179283701140, +-0.774294821503482940, -0.774326461787527840, -0.774358100135756460, -0.774389736548089850, -0.774421371024449190, -0.774453003564754880, -0.774484634168927990, -0.774516262836889790, +-0.774547889568560690, -0.774579514363861850, -0.774611137222714240, -0.774642758145038800, -0.774674377130756710, -0.774705994179788360, -0.774737609292055370, -0.774769222467478040, +-0.774800833705977740, -0.774832443007475220, -0.774864050371891660, -0.774895655799148320, -0.774927259289165500, -0.774958860841864490, -0.774990460457166690, -0.775022058134992360, +-0.775053653875263040, -0.775085247677899440, -0.775116839542822730, -0.775148429469954330, -0.775180017459214500, -0.775211603510524540, -0.775243187623805950, -0.775274769798979140, +-0.775306350035965260, -0.775337928334685620, -0.775369504695061500, -0.775401079117013170, -0.775432651600462260, -0.775464222145329950, -0.775495790751536850, -0.775527357419004250, +-0.775558922147653320, -0.775590484937405010, -0.775622045788180730, -0.775653604699901080, -0.775685161672487470, -0.775716716705861180, -0.775748269799942940, -0.775779820954653920, +-0.775811370169915300, -0.775842917445648370, -0.775874462781774410, -0.775906006178213930, -0.775937547634888540, -0.775969087151719530, -0.776000624728627410, -0.776032160365533800, +-0.776063694062359870, -0.776095225819026900, -0.776126755635455630, -0.776158283511567460, -0.776189809447283770, -0.776221333442525420, -0.776252855497213680, -0.776284375611269840, +-0.776315893784614960, -0.776347410017170670, -0.776378924308857580, -0.776410436659597190, -0.776441947069311020, -0.776473455537919690, -0.776504962065344690, -0.776536466651507330, +-0.776567969296328760, -0.776599469999730510, -0.776630968761633400, -0.776662465581959060, -0.776693960460628330, -0.776725453397562720, -0.776756944392683390, -0.776788433445911750, +-0.776819920557169310, -0.776851405726376790, -0.776882888953455810, -0.776914370238327770, -0.776945849580913620, -0.776977326981134750, -0.777008802438912680, -0.777040275954168580, +-0.777071747526824060, -0.777103217156799860, -0.777134684844017600, -0.777166150588398890, -0.777197614389864680, -0.777229076248336260, -0.777260536163735250, -0.777291994135983160, +-0.777323450165000820, -0.777354904250709740, -0.777386356393031770, -0.777417806591887640, -0.777449254847198960, -0.777480701158887230, -0.777512145526873640, -0.777543587951080030, +-0.777575028431427120, -0.777606466967836750, -0.777637903560230330, -0.777669338208529020, -0.777700770912654220, -0.777732201672527660, -0.777763630488070400, -0.777795057359204510, +-0.777826482285850610, -0.777857905267930860, -0.777889326305366000, -0.777920745398077870, -0.777952162545987870, -0.777983577749017390, -0.778014991007088370, -0.778046402320121460, +-0.778077811688038580, -0.778109219110761470, -0.778140624588211090, -0.778172028120309060, -0.778203429706977090, -0.778234829348136480, -0.778266227043708960, -0.778297622793615700, +-0.778329016597778420, -0.778360408456118870, -0.778391798368557990, -0.778423186335017500, -0.778454572355419150, -0.778485956429684430, -0.778517338557734970, -0.778548718739491940, +-0.778580096974877400, -0.778611473263812410, -0.778642847606218710, -0.778674220002017800, -0.778705590451131410, -0.778736958953481270, -0.778768325508988560, -0.778799690117574880, +-0.778831052779162420, -0.778862413493671910, -0.778893772261025410, -0.778925129081144530, -0.778956483953950780, -0.778987836879366120, -0.779019187857311610, -0.779050536887709090, +-0.779081883970480500, -0.779113229105546920, -0.779144572292830300, -0.779175913532252240, -0.779207252823734710, -0.779238590167198760, -0.779269925562566250, -0.779301259009759330, +-0.779332590508698850, -0.779363920059306990, -0.779395247661505360, -0.779426573315215480, -0.779457897020359610, -0.779489218776858620, -0.779520538584634550, -0.779551856443609470, +-0.779583172353704450, -0.779614486314841540, -0.779645798326942360, -0.779677108389928650, -0.779708416503722580, -0.779739722668245090, -0.779771026883418590, -0.779802329149164250, +-0.779833629465404020, -0.779864927832059850, -0.779896224249053250, -0.779927518716306500, -0.779958811233740560, -0.779990101801277590, -0.780021390418839670, -0.780052677086348070, +-0.780083961803724630, -0.780115244570891430, -0.780146525387769960, -0.780177804254282630, -0.780209081170350370, -0.780240356135895490, -0.780271629150840030, -0.780302900215105180, +-0.780334169328612990, -0.780365436491285420, -0.780396701703044650, -0.780427964963811730, -0.780459226273508940, -0.780490485632058360, -0.780521743039381270, -0.780552998495399830, +-0.780584252000036010, -0.780615503553211410, -0.780646753154848330, -0.780678000804868160, -0.780709246503192960, -0.780740490249744900, -0.780771732044445390, -0.780802971887216480, +-0.780834209777980240, -0.780865445716658390, -0.780896679703173220, -0.780927911737446130, -0.780959141819399180, -0.780990369948954770, -0.781021596126034060, -0.781052820350559340, +-0.781084042622452570, -0.781115262941636020, -0.781146481308031100, -0.781177697721559870, -0.781208912182144720, -0.781240124689706940, -0.781271335244168920, -0.781302543845452610, +-0.781333750493479860, -0.781364955188173060, -0.781396157929453490, -0.781427358717243670, -0.781458557551465650, -0.781489754432040940, -0.781520949358891940, -0.781552142331940480, +-0.781583333351108630, -0.781614522416318790, -0.781645709527492350, -0.781676894684551930, -0.781708077887419030, -0.781739259136015830, -0.781770438430264610, -0.781801615770087220, +-0.781832791155406050, -0.781863964586142710, -0.781895136062219390, -0.781926305583558470, -0.781957473150081570, -0.781988638761710990, -0.782019802418368880, -0.782050964119977100, +-0.782082123866458370, -0.782113281657733860, -0.782144437493726310, -0.782175591374357880, -0.782206743299550200, -0.782237893269225660, -0.782269041283306320, -0.782300187341714690, +-0.782331331444372390, -0.782362473591201700, -0.782393613782125130, -0.782424752017064180, -0.782455888295941480, -0.782487022618678970, -0.782518154985198940, -0.782549285395423790, +-0.782580413849275120, -0.782611540346675460, -0.782642664887547190, -0.782673787471811930, -0.782704908099392300, -0.782736026770210370, -0.782767143484188410, -0.782798258241248820, +-0.782829371041313230, -0.782860481884304350, -0.782891590770144470, -0.782922697698755330, -0.782953802670059540, -0.782984905683979160, -0.783016006740436810, -0.783047105839354110, +-0.783078202980653780, -0.783109298164258120, -0.783140391390088950, -0.783171482658068800, -0.783202571968119930, -0.783233659320164640, -0.783264744714125550, -0.783295828149924270, +-0.783326909627483410, -0.783357989146725610, -0.783389066707572470, -0.783420142309946720, -0.783451215953770540, -0.783482287638966430, -0.783513357365456800, -0.783544425133163580, +-0.783575490942009510, -0.783606554791916430, -0.783637616682806960, -0.783668676614603490, -0.783699734587228300, -0.783730790600604020, -0.783761844654652600, -0.783792896749296420, +-0.783823946884458440, -0.783854995060060180, -0.783886041276024460, -0.783917085532273680, -0.783948127828730130, -0.783979168165316650, -0.784010206541954860, -0.784041242958567590, +-0.784072277415077460, -0.784103309911406420, -0.784134340447477100, -0.784165369023211880, -0.784196395638533490, -0.784227420293363900, -0.784258442987625810, -0.784289463721241750, +-0.784320482494133890, -0.784351499306224720, -0.784382514157436870, -0.784413527047692740, -0.784444537976914940, -0.784475546945025640, -0.784506553951947460, -0.784537558997603130, +-0.784568562081914720, -0.784599563204804840, -0.784630562366196100, -0.784661559566010910, -0.784692554804172100, -0.784723548080601630, -0.784754539395222220, -0.784785528747956820, +-0.784816516138727270, -0.784847501567456530, -0.784878485034066880, -0.784909466538481480, -0.784940446080621970, -0.784971423660411500, -0.785002399277772600, -0.785033372932627540, +-0.785064344624899050, -0.785095314354509630, -0.785126282121381910, -0.785157247925438840, -0.785188211766602250, -0.785219173644795210, -0.785250133559940560, -0.785281091511960240, +-0.785312047500777210, -0.785343001526314090, -0.785373953588493380, -0.785404903687238140, -0.785435851822470330, -0.785466797994113230, -0.785497742202088790, -0.785528684446319960, +-0.785559624726729470, -0.785590563043239930, -0.785621499395774300, -0.785652433784254530, -0.785683366208603800, -0.785714296668744820, -0.785745225164599880, -0.785776151696091940, +-0.785807076263143500, -0.785837998865677400, -0.785868919503616590, -0.785899838176883250, -0.785930754885400320, -0.785961669629090750, -0.785992582407876730, -0.786023493221681190, +-0.786054402070426980, -0.786085308954037050, -0.786116213872433580, -0.786147116825539500, -0.786178017813278010, -0.786208916835571150, -0.786239813892341990, -0.786270708983513260, +-0.786301602109007790, -0.786332493268748660, -0.786363382462657910, -0.786394269690658840, -0.786425154952674180, -0.786456038248626530, -0.786486919578438750, -0.786517798942033550, +-0.786548676339334010, -0.786579551770262950, -0.786610425234742780, -0.786641296732696560, -0.786672166264047350, -0.786703033828717420, -0.786733899426629970, -0.786764763057707710, +-0.786795624721873920, -0.786826484419050680, -0.786857342149161370, -0.786888197912128830, -0.786919051707875570, -0.786949903536324660, -0.786980753397399040, -0.787011601291021550, +-0.787042447217115250, -0.787073291175602650, -0.787104133166406710, -0.787134973189450800, -0.787165811244657120, -0.787196647331949050, -0.787227481451249210, -0.787258313602480770, +-0.787289143785566800, -0.787319972000429580, -0.787350798246992830, -0.787381622525178740, -0.787412444834910690, -0.787443265176111410, -0.787474083548704070, -0.787504899952611750, +-0.787535714387756940, -0.787566526854062810, -0.787597337351452650, -0.787628145879848860, -0.787658952439174610, -0.787689757029353180, -0.787720559650307180, -0.787751360301960140, +-0.787782158984234430, -0.787812955697053340, -0.787843750440340050, -0.787874543214017180, -0.787905334018008000, -0.787936122852235350, -0.787966909716622750, -0.787997694611092590, +-0.788028477535568150, -0.788059258489972940, -0.788090037474229230, -0.788120814488260320, -0.788151589531989490, -0.788182362605339690, -0.788213133708234200, -0.788243902840595640, +-0.788274670002347300, -0.788305435193412560, -0.788336198413713940, -0.788366959663174830, -0.788397718941718400, -0.788428476249267600, -0.788459231585745820, -0.788489984951075810, +-0.788520736345181050, -0.788551485767984170, -0.788582233219408680, -0.788612978699377520, -0.788643722207813870, -0.788674463744641230, -0.788705203309782220, -0.788735940903160130, +-0.788766676524698450, -0.788797410174319920, -0.788828141851947720, -0.788858871557505230, -0.788889599290915510, -0.788920325052102190, -0.788951048840987660, -0.788981770657495530, +-0.789012490501549310, -0.789043208373071630, -0.789073924271985750, -0.789104638198215190, -0.789135350151683350, -0.789166060132312720, -0.789196768140027040, -0.789227474174749700, +-0.789258178236403320, -0.789288880324911620, -0.789319580440197680, -0.789350278582184760, -0.789380974750796380, -0.789411668945955380, -0.789442361167585150, -0.789473051415609310, +-0.789503739689950580, -0.789534425990532470, -0.789565110317278270, -0.789595792670111370, -0.789626473048955280, -0.789657151453732610, -0.789687827884367200, -0.789718502340782450, +-0.789749174822901080, -0.789779845330646930, -0.789810513863943080, -0.789841180422713230, -0.789871845006880120, -0.789902507616367380, -0.789933168251098720, -0.789963826910996870, +-0.789994483595985340, -0.790025138305987750, -0.790055791040927160, -0.790086441800727510, -0.790117090585311430, -0.790147737394602650, -0.790178382228524660, -0.790209025087000640, +-0.790239665969953880, -0.790270304877308090, -0.790300941808986470, -0.790331576764912840, -0.790362209745009920, -0.790392840749201800, -0.790423469777411290, -0.790454096829562030, +-0.790484721905577610, -0.790515345005381450, -0.790545966128897050, -0.790576585276047570, -0.790607202446756530, -0.790637817640947870, -0.790668430858544320, -0.790699042099469730, +-0.790729651363647480, -0.790760258651001190, -0.790790863961454480, -0.790821467294930300, -0.790852068651352490, -0.790882668030644780, -0.790913265432730110, -0.790943860857532320, +-0.790974454304974820, -0.791005045774981540, -0.791035635267475330, -0.791066222782380040, -0.791096808319619370, -0.791127391879116510, -0.791157973460795190, -0.791188553064578910, +-0.791219130690391180, -0.791249706338155940, -0.791280280007796270, -0.791310851699235760, -0.791341421412398380, -0.791371989147207300, -0.791402554903586130, -0.791433118681458600, +-0.791463680480748330, -0.791494240301379050, -0.791524798143274030, -0.791555354006356900, -0.791585907890551720, -0.791616459795781440, -0.791647009721970000, -0.791677557669041130, +-0.791708103636918570, -0.791738647625525480, -0.791769189634785820, -0.791799729664623310, -0.791830267714961340, -0.791860803785723650, -0.791891337876833970, -0.791921869988216010, +-0.791952400119793510, -0.791982928271489860, -0.792013454443228900, -0.792043978634934480, -0.792074500846529860, -0.792105021077939010, -0.792135539329085650, -0.792166055599893390, +-0.792196569890286310, -0.792227082200187450, -0.792257592529521220, -0.792288100878210780, -0.792318607246179970, -0.792349111633352750, -0.792379614039652740, -0.792410114465003870, +-0.792440612909329540, -0.792471109372553610, -0.792501603854600220, -0.792532096355392570, -0.792562586874854590, -0.792593075412910240, -0.792623561969483140, -0.792654046544497450, +-0.792684529137876350, -0.792715009749543900, -0.792745488379424270, -0.792775965027440630, -0.792806439693517050, -0.792836912377577360, -0.792867383079545630, -0.792897851799345240, +-0.792928318536900270, -0.792958783292134650, -0.792989246064971900, -0.793019706855335960, -0.793050165663150790, -0.793080622488340210, -0.793111077330828310, -0.793141530190538460, +-0.793171981067394840, -0.793202429961321510, -0.793232876872241750, -0.793263321800079860, -0.793293764744759770, -0.793324205706205100, -0.793354644684340250, -0.793385081679088610, +-0.793415516690374130, -0.793445949718121210, -0.793476380762253130, -0.793506809822694060, -0.793537236899368060, -0.793567661992199080, -0.793598085101110850, -0.793628506226027320, +-0.793658925366872770, -0.793689342523570710, -0.793719757696045190, -0.793750170884220290, -0.793780582088020050, -0.793810991307368650, -0.793841398542189380, -0.793871803792406630, +-0.793902207057944790, -0.793932608338727030, -0.793963007634677750, -0.793993404945721020, -0.794023800271780660, -0.794054193612781180, -0.794084584968645870, -0.794114974339299450, +-0.794145361724665320, -0.794175747124667760, -0.794206130539230730, -0.794236511968278490, -0.794266891411735230, -0.794297268869524450, -0.794327644341570550, -0.794358017827797690, +-0.794388389328129610, -0.794418758842490580, -0.794449126370804560, -0.794479491912995830, -0.794509855468988560, -0.794540217038706480, -0.794570576622073750, -0.794600934219014900, +-0.794631289829453410, -0.794661643453313690, -0.794691995090519910, -0.794722344740996340, -0.794752692404666730, -0.794783038081455340, -0.794813381771286690, -0.794843723474084270, +-0.794874063189772500, -0.794904400918275630, -0.794934736659517640, -0.794965070413423240, -0.794995402179915820, -0.795025731958919900, -0.795056059750359980, -0.795086385554159560, +-0.795116709370243150, -0.795147031198535030, -0.795177351038959260, -0.795207668891440460, -0.795237984755902240, -0.795268298632269000, -0.795298610520465350, -0.795328920420414810, +-0.795359228332041980, -0.795389534255271150, -0.795419838190026710, -0.795450140136232390, -0.795480440093812800, -0.795510738062692350, -0.795541034042794750, -0.795571328034044510, +-0.795601620036366030, -0.795631910049683480, -0.795662198073921470, -0.795692484109003620, -0.795722768154854650, -0.795753050211398970, -0.795783330278560410, -0.795813608356263470, +-0.795843884444432550, -0.795874158542991930, -0.795904430651866220, -0.795934700770979160, -0.795964968900255590, -0.795995235039619220, -0.796025499188994900, -0.796055761348306800, +-0.796086021517479310, -0.796116279696436950, -0.796146535885103760, -0.796176790083404140, -0.796207042291262820, -0.796237292508603640, -0.796267540735351220, -0.796297786971429940, +-0.796328031216764210, -0.796358273471278740, -0.796388513734897160, -0.796418752007544420, -0.796448988289145120, -0.796479222579623000, -0.796509454878902790, -0.796539685186908990, +-0.796569913503566210, -0.796600139828798400, -0.796630364162530190, -0.796660586504686410, -0.796690806855190890, -0.796721025213968370, -0.796751241580943240, -0.796781455956040000, +-0.796811668339183380, -0.796841878730297330, -0.796872087129306680, -0.796902293536135950, -0.796932497950709310, -0.796962700372951360, -0.796992900802786730, -0.797023099240139810, +-0.797053295684935330, -0.797083490137097450, -0.797113682596551130, -0.797143873063220210, -0.797174061537029740, -0.797204248017904020, -0.797234432505767750, -0.797264615000545680, +-0.797294795502161760, -0.797324974010540810, -0.797355150525607790, -0.797385325047286540, -0.797415497575502010, -0.797445668110178700, -0.797475836651241330, -0.797506003198614530, +-0.797536167752222580, -0.797566330311990090, -0.797596490877842010, -0.797626649449702520, -0.797656806027496450, -0.797686960611148300, -0.797717113200583030, -0.797747263795724690, +-0.797777412396498130, -0.797807559002828400, -0.797837703614639460, -0.797867846231856360, -0.797897986854403500, -0.797928125482205820, -0.797958262115187940, -0.797988396753274270, +-0.798018529396389510, -0.798048660044458740, -0.798078788697406120, -0.798108915355156380, -0.798139040017634470, -0.798169162684764900, -0.798199283356472720, -0.798229402032682110, +-0.798259518713317910, -0.798289633398305170, -0.798319746087568170, -0.798349856781031760, -0.798379965478620670, -0.798410072180260060, -0.798440176885873880, -0.798470279595387300, +-0.798500380308725280, -0.798530479025811980, -0.798560575746572580, -0.798590670470931690, -0.798620763198814140, -0.798650853930144900, -0.798680942664848350, -0.798711029402849440, +-0.798741114144073120, -0.798771196888443890, -0.798801277635886600, -0.798831356386326070, -0.798861433139687160, -0.798891507895895030, -0.798921580654873730, -0.798951651416548890, +-0.798981720180844570, -0.799011786947685930, -0.799041851716997820, -0.799071914488705070, -0.799101975262732860, -0.799132034039005460, -0.799162090817447930, -0.799192145597985460, +-0.799222198380542430, -0.799252249165043780, -0.799282297951414590, -0.799312344739579570, -0.799342389529464010, -0.799372432320992200, -0.799402473114089300, -0.799432511908680480, +-0.799462548704690130, -0.799492583502043440, -0.799522616300665230, -0.799552647100480800, -0.799582675901414520, -0.799612702703391460, -0.799642727506336910, -0.799672750310175370, +-0.799702771114831900, -0.799732789920231560, -0.799762806726299180, -0.799792821532960050, -0.799822834340138570, -0.799852845147760010, -0.799882853955749650, -0.799912860764031900, +-0.799942865572531910, -0.799972868381174870, -0.800002869189885610, -0.800032867998589410, -0.800062864807210780, -0.800092859615675000, -0.800122852423907460, -0.800152843231832330, +-0.800182832039375240, -0.800212818846461000, -0.800242803653014920, -0.800272786458961720, -0.800302767264226440, -0.800332746068734500, -0.800362722872410500, -0.800392697675179620, +-0.800422670476967020, -0.800452641277697770, -0.800482610077297150, -0.800512576875689770, -0.800542541672800920, -0.800572504468556100, -0.800602465262879590, -0.800632424055697010, +-0.800662380846933310, -0.800692335636513760, -0.800722288424363550, -0.800752239210407280, -0.800782187994570790, -0.800812134776778590, -0.800842079556955970, -0.800872022335028190, +-0.800901963110920320, -0.800931901884557870, -0.800961838655865450, -0.800991773424768240, -0.801021706191192060, -0.801051636955061210, -0.801081565716301400, -0.801111492474837590, +-0.801141417230595070, -0.801171339983499210, -0.801201260733474860, -0.801231179480447200, -0.801261096224341940, -0.801291010965083710, -0.801320923702597890, -0.801350834436809880, +-0.801380743167644960, -0.801410649895027860, -0.801440554618884190, -0.801470457339139350, -0.801500358055718180, -0.801530256768546170, -0.801560153477548390, -0.801590048182650340, +-0.801619940883777300, -0.801649831580854230, -0.801679720273806520, -0.801709606962559880, -0.801739491647038840, -0.801769374327169220, -0.801799255002876080, -0.801829133674084700, +-0.801859010340720930, -0.801888885002709270, -0.801918757659975450, -0.801948628312444960, -0.801978496960042640, -0.802008363602694010, -0.802038228240324560, -0.802068090872859800, +-0.802097951500224560, -0.802127810122344350, -0.802157666739145010, -0.802187521350551160, -0.802217373956488510, -0.802247224556882470, -0.802277073151658300, -0.802306919740741750, +-0.802336764324057650, -0.802366606901531610, -0.802396447473089360, -0.802426286038655730, -0.802456122598156350, -0.802485957151516600, -0.802515789698662110, -0.802545620239518250, +-0.802575448774010210, -0.802605275302063710, -0.802635099823603810, -0.802664922338556130, -0.802694742846846170, -0.802724561348399420, -0.802754377843141410, -0.802784192330997290, +-0.802814004811892580, -0.802843815285753220, -0.802873623752504040, -0.802903430212070780, -0.802933234664378940, -0.802963037109354020, -0.802992837546921740, -0.803022635977007180, +-0.803052432399535940, -0.803082226814433970, -0.803112019221626120, -0.803141809621038320, -0.803171598012595860, -0.803201384396224680, -0.803231168771849860, -0.803260951139397110, +-0.803290731498792150, -0.803320509849960170, -0.803350286192826890, -0.803380060527317920, -0.803409832853358760, -0.803439603170875370, -0.803469371479792580, -0.803499137780036450, +-0.803528902071532710, -0.803558664354206530, -0.803588424627983630, -0.803618182892789630, -0.803647939148550260, -0.803677693395191130, -0.803707445632637630, -0.803737195860815490, +-0.803766944079650660, -0.803796690289068310, -0.803826434488994050, -0.803856176679353720, -0.803885916860073270, -0.803915655031077760, -0.803945391192293140, -0.803975125343645350, +-0.804004857485059340, -0.804034587616461290, -0.804064315737776700, -0.804094041848931410, -0.804123765949851130, -0.804153488040461270, -0.804183208120687780, -0.804212926190456370, +-0.804242642249692440, -0.804272356298321940, -0.804302068336270600, -0.804331778363463920, -0.804361486379828180, -0.804391192385288440, -0.804420896379770990, -0.804450598363200990, +-0.804480298335504610, -0.804509996296607350, -0.804539692246435180, -0.804569386184914030, -0.804599078111969180, -0.804628768027526590, -0.804658455931512310, -0.804688141823851620, +-0.804717825704470700, -0.804747507573295050, -0.804777187430250730, -0.804806865275263790, -0.804836541108259310, -0.804866214929163440, -0.804895886737902360, -0.804925556534401340, +-0.804955224318586350, -0.804984890090383320, -0.805014553849718320, -0.805044215596516730, -0.805073875330704510, -0.805103533052207940, -0.805133188760952300, -0.805162842456863650, +-0.805192494139867820, -0.805222143809890880, -0.805251791466858770, -0.805281437110697000, -0.805311080741331510, -0.805340722358688700, -0.805370361962693740, -0.805399999553272910, +-0.805429635130352040, -0.805459268693857090, -0.805488900243714220, -0.805518529779848950, -0.805548157302187540, -0.805577782810655510, -0.805607406305178910, -0.805637027785683910, +-0.805666647252096360, -0.805696264704342300, -0.805725880142347470, -0.805755493566037930, -0.805785104975339840, -0.805814714370178710, -0.805844321750480930, -0.805873927116172230, +-0.805903530467178770, -0.805933131803426630, -0.805962731124841510, -0.805992328431349600, -0.806021923722877070, -0.806051516999349400, -0.806081108260693010, -0.806110697506833950, +-0.806140284737698280, -0.806169869953211600, -0.806199453153300330, -0.806229034337890730, -0.806258613506908190, -0.806288190660279120, -0.806317765797929690, -0.806347338919785720, +-0.806376910025773720, -0.806406479115819200, -0.806436046189848430, -0.806465611247787820, -0.806495174289562860, -0.806524735315100050, -0.806554294324325350, -0.806583851317165030, +-0.806613406293545280, -0.806642959253391690, -0.806672510196630780, -0.806702059123188820, -0.806731606032991430, -0.806761150925965010, -0.806790693802035830, -0.806820234661130060, +-0.806849773503173440, -0.806879310328092460, -0.806908845135813510, -0.806938377926262110, -0.806967908699364740, -0.806997437455047590, -0.807026964193236940, -0.807056488913859060, +-0.807086011616839680, -0.807115532302105310, -0.807145050969582440, -0.807174567619196590, -0.807204082250874370, -0.807233594864541940, -0.807263105460125470, -0.807292614037551590, +-0.807322120596745800, -0.807351625137635030, -0.807381127660144910, -0.807410628164202060, -0.807440126649732530, -0.807469623116662700, -0.807499117564919210, -0.807528609994427550, +-0.807558100405114330, -0.807587588796906180, -0.807617075169728800, -0.807646559523508720, -0.807676041858172210, -0.807705522173645550, -0.807735000469855470, -0.807764476746727580, +-0.807793951004188490, -0.807823423242164830, -0.807852893460582310, -0.807882361659367550, -0.807911827838446840, -0.807941291997746890, -0.807970754137193440, -0.808000214256713090, +-0.808029672356232460, -0.808059128435677400, -0.808088582494974510, -0.808118034534050180, -0.808147484552830810, -0.808176932551242900, -0.808206378529212510, -0.808235822486666030, +-0.808265264423530420, -0.808294704339731270, -0.808324142235195330, -0.808353578109849090, -0.808383011963618950, -0.808412443796431510, -0.808441873608212620, -0.808471301398889120, +-0.808500727168387720, -0.808530150916634050, -0.808559572643555160, -0.808588992349077220, -0.808618410033127180, -0.808647825695630760, -0.808677239336514810, -0.808706650955706040, +-0.808736060553130410, -0.808765468128714530, -0.808794873682385010, -0.808824277214068350, -0.808853678723691180, -0.808883078211179660, -0.808912475676460410, -0.808941871119460140, +-0.808971264540105040, -0.809000655938321710, -0.809030045314036880, -0.809059432667176730, -0.809088817997668410, -0.809118201305437770, -0.809147582590411860, -0.809176961852516640, +-0.809206339091679160, -0.809235714307825820, -0.809265087500883110, -0.809294458670777980, -0.809323827817436500, -0.809353194940785390, -0.809382560040751490, -0.809411923117261070, +-0.809441284170240750, -0.809470643199617260, -0.809500000205317090, -0.809529355187267320, -0.809558708145393770, -0.809588059079623500, -0.809617407989883350, -0.809646754876099380, +-0.809676099738198540, -0.809705442576107550, -0.809734783389753130, -0.809764122179061460, -0.809793458943959490, -0.809822793684374150, -0.809852126400231630, -0.809881457091458760, +-0.809910785757982250, -0.809940112399728740, -0.809969437016625160, -0.809998759608597800, -0.810028080175573590, -0.810057398717479390, -0.810086715234241360, -0.810116029725786670, +-0.810145342192041820, -0.810174652632933650, -0.810203961048389100, -0.810233267438334350, -0.810262571802696450, -0.810291874141402470, -0.810321174454378460, -0.810350472741551480, +-0.810379769002848360, -0.810409063238196170, -0.810438355447520960, -0.810467645630749800, -0.810496933787809960, -0.810526219918627390, -0.810555504023129370, -0.810584786101242520, +-0.810614066152893660, -0.810643344178009980, -0.810672620176517640, -0.810701894148343820, -0.810731166093415450, -0.810760436011658920, -0.810789703903001310, -0.810818969767369450, +-0.810848233604690160, -0.810877495414890510, -0.810906755197896900, -0.810936012953636600, -0.810965268682036110, -0.810994522383022390, -0.811023774056522370, -0.811053023702462910, +-0.811082271320771150, -0.811111516911373510, -0.811140760474197030, -0.811170002009168890, -0.811199241516215470, -0.811228478995263960, -0.811257714446241280, -0.811286947869074290, +-0.811316179263690260, -0.811345408630015470, -0.811374635967977210, -0.811403861277502520, -0.811433084558517930, -0.811462305810950690, -0.811491525034727660, -0.811520742229776100, +-0.811549957396022430, -0.811579170533393790, -0.811608381641817590, -0.811637590721220100, -0.811666797771528610, -0.811696002792670180, -0.811725205784571750, -0.811754406747160600, +-0.811783605680363120, -0.811812802584106600, -0.811841997458318420, -0.811871190302924870, -0.811900381117853450, -0.811929569903031000, -0.811958756658384680, -0.811987941383841670, +-0.812017124079328580, -0.812046304744772800, -0.812075483380101380, -0.812104659985240950, -0.812133834560119010, -0.812163007104662380, -0.812192177618798470, -0.812221346102453890, +-0.812250512555556030, -0.812279676978032050, -0.812308839369808690, -0.812337999730813220, -0.812367158060972700, -0.812396314360214310, -0.812425468628465320, -0.812454620865652570, +-0.812483771071703110, -0.812512919246544560, -0.812542065390103430, -0.812571209502307210, -0.812600351583082860, -0.812629491632357650, -0.812658629650058970, -0.812687765636113560, +-0.812716899590448900, -0.812746031512991740, -0.812775161403669570, -0.812804289262409440, -0.812833415089138530, -0.812862538883784350, -0.812891660646273720, -0.812920780376533700, +-0.812949898074492140, -0.812979013740075640, -0.813008127373211490, -0.813037238973827070, -0.813066348541849450, -0.813095456077206350, -0.813124561579824270, -0.813153665049630820, +-0.813182766486553520, -0.813211865890518970, -0.813240963261454790, -0.813270058599288140, -0.813299151903946640, -0.813328243175357010, -0.813357332413446880, -0.813386419618143510, +-0.813415504789373970, -0.813444587927065530, -0.813473669031145710, -0.813502748101541660, -0.813531825138181120, -0.813560900140990580, -0.813589973109897890, -0.813619044044830540, +-0.813648112945715370, -0.813677179812479780, -0.813706244645051370, -0.813735307443357200, -0.813764368207325120, -0.813793426936881840, -0.813822483631955310, -0.813851538292472250, +-0.813880590918360400, -0.813909641509547030, -0.813938690065959540, -0.813967736587525640, -0.813996781074172060, -0.814025823525826530, -0.814054863942416770, -0.814083902323869620, +-0.814112938670112580, -0.814141972981073270, -0.814171005256679070, -0.814200035496857600, -0.814229063701535690, -0.814258089870641190, -0.814287114004101810, -0.814316136101844280, +-0.814345156163796440, -0.814374174189885670, -0.814403190180039480, -0.814432204134185600, -0.814461216052250970, -0.814490225934163540, -0.814519233779850250, -0.814548239589238940, +-0.814577243362257010, -0.814606245098831950, -0.814635244798891490, -0.814664242462362690, -0.814693238089173380, -0.814722231679251170, -0.814751223232523030, -0.814780212748916990, +-0.814809200228360340, -0.814838185670780700, -0.814867169076105790, -0.814896150444262780, -0.814925129775179390, -0.814954107068783350, -0.814983082325001940, -0.815012055543762660, +-0.815041026724993340, -0.815069995868621720, -0.815098962974574850, -0.815127928042780560, -0.815156891073166690, -0.815185852065660300, -0.815214811020189330, -0.815243767936681300, +-0.815272722815063910, -0.815301675655264900, -0.815330626457211440, -0.815359575220831470, -0.815388521946052820, -0.815417466632802570, -0.815446409281008640, -0.815475349890598780, +-0.815504288461500470, -0.815533224993641670, -0.815562159486949660, -0.815591091941352380, -0.815620022356777220, -0.815648950733151910, -0.815677877070404290, -0.815706801368461960, +-0.815735723627252880, -0.815764643846704330, -0.815793562026744020, -0.815822478167300140, -0.815851392268299720, -0.815880304329670960, -0.815909214351341340, -0.815938122333238700, +-0.815967028275291110, -0.815995932177425500, -0.816024834039570270, -0.816053733861653030, -0.816082631643601290, -0.816111527385342980, -0.816140421086805850, -0.816169312747917930, +-0.816198202368606410, -0.816227089948799440, -0.816255975488424990, -0.816284858987410320, -0.816313740445683500, -0.816342619863172360, -0.816371497239804730, -0.816400372575508460, +-0.816429245870211150, -0.816458117123840640, -0.816486986336325100, -0.816515853507591930, -0.816544718637569060, -0.816573581726184330, -0.816602442773365690, -0.816631301779041310, +-0.816660158743138240, -0.816689013665584880, -0.816717866546309180, -0.816746717385238630, -0.816775566182301290, -0.816804412937425010, -0.816833257650537940, -0.816862100321567470, +-0.816890940950441790, -0.816919779537088940, -0.816948616081436430, -0.816977450583412310, -0.817006283042944650, -0.817035113459961270, -0.817063941834390350, -0.817092768166159390, +-0.817121592455196440, -0.817150414701429680, -0.817179234904786720, -0.817208053065195730, -0.817236869182584540, -0.817265683256881200, -0.817294495288013900, -0.817323305275910130, +-0.817352113220498280, -0.817380919121705960, -0.817409722979461240, -0.817438524793692390, -0.817467324564327140, -0.817496122291293760, -0.817524917974519870, -0.817553711613933750, +-0.817582503209463570, -0.817611292761036830, -0.817640080268581930, -0.817668865732026680, -0.817697649151299390, -0.817726430526328320, -0.817755209857040750, -0.817783987143365200, +-0.817812762385229930, -0.817841535582562560, -0.817870306735291370, -0.817899075843344310, -0.817927842906649880, -0.817956607925135580, -0.817985370898729800, -0.818014131827360820, +-0.818042890710956260, -0.818071647549444390, -0.818100402342753500, -0.818129155090811630, -0.818157905793546970, -0.818186654450887450, -0.818215401062761250, -0.818244145629096750, +-0.818272888149821690, -0.818301628624864330, -0.818330367054152960, -0.818359103437615750, -0.818387837775180980, -0.818416570066776260, -0.818445300312330200, -0.818474028511771200, +-0.818502754665026750, -0.818531478772025480, -0.818560200832695540, -0.818588920846965330, -0.818617638814762570, -0.818646354736015660, -0.818675068610653200, -0.818703780438602810, +-0.818732490219792890, -0.818761197954151810, -0.818789903641607750, -0.818818607282089110, -0.818847308875523710, -0.818876008421840050, -0.818904705920966650, -0.818933401372831220, +-0.818962094777362370, -0.818990786134488170, -0.819019475444137000, -0.819048162706237480, -0.819076847920717220, -0.819105531087505170, -0.819134212206528930, -0.819162891277717240, +-0.819191568300998260, -0.819220243276300500, -0.819248916203552220, -0.819277587082681500, -0.819306255913616830, -0.819334922696286720, -0.819363587430618990, -0.819392250116542380, +-0.819420910753985150, -0.819449569342875610, -0.819478225883142340, -0.819506880374713420, -0.819535532817517120, -0.819564183211482390, -0.819592831556536840, -0.819621477852609300, +-0.819650122099627950, -0.819678764297521620, -0.819707404446218150, -0.819736042545646140, -0.819764678595734320, -0.819793312596410530, -0.819821944547603380, -0.819850574449241480, +-0.819879202301253110, -0.819907828103566880, -0.819936451856110970, -0.819965073558813870, -0.819993693211604310, -0.820022310814410350, -0.820050926367160480, -0.820079539869783440, +-0.820108151322207490, -0.820136760724361480, -0.820165368076173240, -0.820193973377571610, -0.820222576628485190, -0.820251177828842160, -0.820279776978571240, -0.820308374077600820, +-0.820336969125859740, -0.820365562123275940, -0.820394153069778250, -0.820422741965295520, -0.820451328809755580, -0.820479913603087360, -0.820508496345219380, -0.820537077036080030, +-0.820565655675598360, -0.820594232263702320, -0.820622806800320630, -0.820651379285382230, -0.820679949718815080, -0.820708518100548120, -0.820737084430509740, -0.820765648708628780, +-0.820794210934833960, -0.820822771109053220, -0.820851329231215950, -0.820879885301250000, -0.820908439319084420, -0.820936991284647700, -0.820965541197868460, -0.820994089058675660, +-0.821022634866997450, -0.821051178622762560, -0.821079720325900040, -0.821108259976337960, -0.821136797574005150, -0.821165333118830440, -0.821193866610742340, -0.821222398049669790, +-0.821250927435541070, -0.821279454768285010, -0.821307980047830570, -0.821336503274106010, -0.821365024447040070, -0.821393543566561580, -0.821422060632599480, -0.821450575645082060, +-0.821479088603938150, -0.821507599509096800, -0.821536108360486180, -0.821564615158035250, -0.821593119901672830, -0.821621622591327540, -0.821650123226928540, -0.821678621808403900, +-0.821707118335682770, -0.821735612808694120, -0.821764105227366090, -0.821792595591627870, -0.821821083901408180, -0.821849570156635730, -0.821878054357239600, -0.821906536503148040, +-0.821935016594290250, -0.821963494630595040, -0.821991970611990920, -0.822020444538406950, -0.822048916409771730, -0.822077386226014560, -0.822105853987063600, -0.822134319692848110, +-0.822162783343297070, -0.822191244938338730, -0.822219704477902270, -0.822248161961916630, -0.822276617390310550, -0.822305070763013180, -0.822333522079952810, -0.822361971341058710, +-0.822390418546259940, -0.822418863695484890, -0.822447306788662620, -0.822475747825722190, -0.822504186806592320, -0.822532623731202170, -0.822561058599480250, -0.822589491411355960, +-0.822617922166757780, -0.822646350865614660, -0.822674777507855670, -0.822703202093409750, -0.822731624622206170, -0.822760045094173220, -0.822788463509240060, -0.822816879867336090, +-0.822845294168389700, -0.822873706412330040, -0.822902116599086080, -0.822930524728586850, -0.822958930800761550, -0.822987334815538650, -0.823015736772847450, -0.823044136672617220, +-0.823072534514776350, -0.823100930299254130, -0.823129324025979600, -0.823157715694881940, -0.823186105305889870, -0.823214492858932450, -0.823242878353939060, -0.823271261790838200, +-0.823299643169559170, -0.823328022490031120, -0.823356399752183000, -0.823384774955944090, -0.823413148101243000, -0.823441519188009010, -0.823469888216171510, -0.823498255185659000, +-0.823526620096400990, -0.823554982948326300, -0.823583343741364100, -0.823611702475443910, -0.823640059150494210, -0.823668413766444620, -0.823696766323223640, -0.823725116820760880, +-0.823753465258985180, -0.823781811637825930, -0.823810155957212410, -0.823838498217073110, -0.823866838417337650, -0.823895176557935430, -0.823923512638794930, -0.823951846659845670, +-0.823980178621016800, -0.824008508522237500, -0.824036836363437160, -0.824065162144544390, -0.824093485865488810, -0.824121807526199790, -0.824150127126605960, -0.824178444666636810, +-0.824206760146221520, -0.824235073565289690, -0.824263384923769830, -0.824291694221591540, -0.824320001458684230, -0.824348306634976710, -0.824376609750398390, -0.824404910804878540, +-0.824433209798346440, -0.824461506730731600, -0.824489801601962610, -0.824518094411969330, -0.824546385160680910, -0.824574673848026300, -0.824602960473935000, -0.824631245038336290, +-0.824659527541159560, -0.824687807982334210, -0.824716086361789060, -0.824744362679453720, -0.824772636935257710, -0.824800909129129840, -0.824829179260999750, -0.824857447330796690, +-0.824885713338450290, -0.824913977283889270, -0.824942239167043350, -0.824970498987842140, -0.824998756746214370, -0.825027012442089650, -0.825055266075397480, -0.825083517646067240, +-0.825111767154028340, -0.825140014599209710, -0.825168259981541200, -0.825196503300952180, -0.825224744557371710, -0.825252983750729310, -0.825281220880954570, -0.825309455947976670, +-0.825337688951725430, -0.825365919892129710, -0.825394148769119430, -0.825422375582623440, -0.825450600332571670, -0.825478823018893300, -0.825507043641517950, -0.825535262200375100, +-0.825563478695394040, -0.825591693126504160, -0.825619905493635290, -0.825648115796716490, -0.825676324035677260, -0.825704530210447320, -0.825732734320956060, -0.825760936367133210, +-0.825789136348907830, -0.825817334266209510, -0.825845530118968110, -0.825873723907112670, -0.825901915630572910, -0.825930105289278350, -0.825958292883158810, -0.825986478412143230, +-0.826014661876161460, -0.826042843275143320, -0.826071022609017880, -0.826099199877714850, -0.826127375081163740, -0.826155548219294270, -0.826183719292036160, -0.826211888299318460, +-0.826240055241071140, -0.826268220117223780, -0.826296382927705800, -0.826324543672446680, -0.826352702351376370, -0.826380858964424150, -0.826409013511520190, -0.826437165992593310, +-0.826465316407573590, -0.826493464756390850, -0.826521611038974150, -0.826549755255253430, -0.826577897405158300, -0.826606037488618720, -0.826634175505563840, -0.826662311455923390, +-0.826690445339627540, -0.826718577156605240, -0.826746706906786530, -0.826774834590101040, -0.826802960206478480, -0.826831083755848790, -0.826859205238141160, -0.826887324653285400, +-0.826915442001211700, -0.826943557281849100, -0.826971670495127540, -0.826999781640976870, -0.827027890719326810, -0.827055997730107180, -0.827084102673247390, -0.827112205548677480, +-0.827140306356326850, -0.827168405096125550, -0.827196501768003080, -0.827224596371889500, -0.827252688907714640, -0.827280779375407670, -0.827308867774898870, -0.827336954106118180, +-0.827365038368994780, -0.827393120563458930, -0.827421200689440140, -0.827449278746868360, -0.827477354735673630, -0.827505428655785360, -0.827533500507133370, -0.827561570289648050, +-0.827589638003258350, -0.827617703647894780, -0.827645767223486820, -0.827673828729964640, -0.827701888167257760, -0.827729945535296110, -0.827758000834009850, -0.827786054063328280, +-0.827814105223181660, -0.827842154313499720, -0.827870201334212520, -0.827898246285249880, -0.827926289166541540, -0.827954329978017320, -0.827982368719607620, -0.828010405391241820, +-0.828038439992849870, -0.828066472524361830, -0.828094502985707640, -0.828122531376817460, -0.828150557697620690, -0.828178581948047610, -0.828206604128028270, -0.828234624237492060, +-0.828262642276369480, -0.828290658244590140, -0.828318672142084430, -0.828346683968781860, -0.828374693724612590, -0.828402701409506780, -0.828430707023393940, -0.828458710566204350, +-0.828486712037868060, -0.828514711438314900, -0.828542708767475160, -0.828570704025278550, -0.828598697211655130, -0.828626688326535190, -0.828654677369848210, -0.828682664341524710, +-0.828710649241494400, -0.828738632069687560, -0.828766612826034250, -0.828794591510464310, -0.828822568122908110, -0.828850542663295160, -0.828878515131555970, -0.828906485527620470, +-0.828934453851418730, -0.828962420102881010, -0.828990384281937160, -0.829018346388517240, -0.829046306422551730, -0.829074264383970250, -0.829102220272703080, -0.829130174088680280, +-0.829158125831832130, -0.829186075502088890, -0.829214023099380300, -0.829241968623636530, -0.829269912074788170, -0.829297853452764630, -0.829325792757496630, -0.829353729988914100, +-0.829381665146947440, -0.829409598231526490, -0.829437529242581410, -0.829465458180042800, -0.829493385043840290, -0.829521309833904370, -0.829549232550165110, -0.829577153192552870, +-0.829605071760997960, -0.829632988255430080, -0.829660902675779740, -0.829688815021977330, -0.829716725293952680, -0.829744633491636300, -0.829772539614958230, -0.829800443663848860, +-0.829828345638238600, -0.829856245538057260, -0.829884143363235350, -0.829912039113703260, -0.829939932789390820, -0.829967824390228540, -0.829995713916146790, -0.830023601367075870, +-0.830051486742945820, -0.830079370043686930, -0.830107251269230020, -0.830135130419504600, -0.830163007494441390, -0.830190882493970770, -0.830218755418022810, -0.830246626266528230, +-0.830274495039416860, -0.830302361736619310, -0.830330226358066080, -0.830358088903686900, -0.830385949373412590, -0.830413807767173440, -0.830441664084899720, -0.830469518326522160, +-0.830497370491970480, -0.830525220581175730, -0.830553068594067520, -0.830580914530576810, -0.830608758390633750, -0.830636600174168740, -0.830664439881112490, -0.830692277511394960, +-0.830720113064946640, -0.830747946541698370, -0.830775777941579970, -0.830803607264522070, -0.830831434510455270, -0.830859259679309740, -0.830887082771016420, -0.830914903785505030, +-0.830942722722706420, -0.830970539582551290, -0.830998354364969600, -0.831026167069891960, -0.831053977697248980, -0.831081786246971270, -0.831109592718988770, -0.831137397113232310, +-0.831165199429632630, -0.831192999668119770, -0.831220797828624350, -0.831248593911076970, -0.831276387915408030, -0.831304179841548360, -0.831331969689428130, -0.831359757458977830, +-0.831387543150128530, -0.831415326762810050, -0.831443108296953230, -0.831470887752488670, -0.831498665129346890, -0.831526440427458600, -0.831554213646754080, -0.831581984787164270, +-0.831609753848619130, -0.831637520831049800, -0.831665285734386470, -0.831693048558560080, -0.831720809303501230, -0.831748567969140100, -0.831776324555407620, -0.831804079062234520, +-0.831831831489551090, -0.831859581837287920, -0.831887330105375860, -0.831915076293745500, -0.831942820402327700, -0.831970562431052500, -0.831998302379851060, -0.832026040248654010, +-0.832053776037391610, -0.832081509745994820, -0.832109241374394240, -0.832136970922520700, -0.832164698390304600, -0.832192423777676770, -0.832220147084568040, -0.832247868310908800, +-0.832275587456629770, -0.832303304521661900, -0.832331019505935690, -0.832358732409382180, -0.832386443231931560, -0.832414151973514870, -0.832441858634063060, -0.832469563213506400, +-0.832497265711775740, -0.832524966128802000, -0.832552664464515810, -0.832580360718848220, -0.832608054891729400, -0.832635746983090510, -0.832663436992862490, -0.832691124920975630, +-0.832718810767360980, -0.832746494531949380, -0.832774176214671650, -0.832801855815458290, -0.832829533334240260, -0.832857208770948710, -0.832884882125513810, -0.832912553397866740, +-0.832940222587938320, -0.832967889695659270, -0.832995554720960760, -0.833023217663773190, -0.833050878524027590, -0.833078537301654930, -0.833106193996585700, -0.833133848608751060, +-0.833161501138081740, -0.833189151584508680, -0.833216799947963050, -0.833244446228375120, -0.833272090425676290, -0.833299732539797060, -0.833327372570668360, -0.833355010518221360, +-0.833382646382386790, -0.833410280163095820, -0.833437911860279050, -0.833465541473867310, -0.833493169003792110, -0.833520794449983620, -0.833548417812373210, -0.833576039090891730, +-0.833603658285470230, -0.833631275396039760, -0.833658890422530830, -0.833686503364874710, -0.833714114223002570, -0.833741722996844900, -0.833769329686332990, -0.833796934291397670, +-0.833824536811970330, -0.833852137247981350, -0.833879735599362020, -0.833907331866043600, -0.833934926047956600, -0.833962518145032420, -0.833990108157201760, -0.834017696084395910, +-0.834045281926546030, -0.834072865683582740, -0.834100447355437310, -0.834128026942040910, -0.834155604443324260, -0.834183179859218640, -0.834210753189654990, -0.834238324434564580, +-0.834265893593878480, -0.834293460667527410, -0.834321025655442750, -0.834348588557555780, -0.834376149373797000, -0.834403708104097920, -0.834431264748389580, -0.834458819306603260, +-0.834486371778669690, -0.834513922164520140, -0.834541470464086110, -0.834569016677298100, -0.834596560804087620, -0.834624102844385710, -0.834651642798123540, -0.834679180665232500, +-0.834706716445643200, -0.834734250139287150, -0.834761781746095720, -0.834789311265999650, -0.834816838698930310, -0.834844364044818770, -0.834871887303596400, -0.834899408475194500, +-0.834926927559543900, -0.834954444556576190, -0.834981959466222110, -0.835009472288413160, -0.835036983023080490, -0.835064491670155400, -0.835091998229569370, -0.835119502701253010, +-0.835147005085137950, -0.835174505381155560, -0.835202003589236690, -0.835229499709312820, -0.835256993741315230, -0.835284485685175100, -0.835311975540824040, -0.835339463308192860, +-0.835366948987212980, -0.835394432577815870, -0.835421914079932600, -0.835449393493494450, -0.835476870818432800, -0.835504346054679160, -0.835531819202164570, -0.835559290260820320, +-0.835586759230578120, -0.835614226111368820, -0.835641690903123900, -0.835669153605774760, -0.835696614219252680, -0.835724072743489480, -0.835751529178415660, -0.835778983523963180, +-0.835806435780063420, -0.835833885946647310, -0.835861334023646490, -0.835888780010992320, -0.835916223908616200, -0.835943665716449850, -0.835971105434423990, -0.835998543062470350, +-0.836025978600520750, -0.836053412048505810, -0.836080843406357350, -0.836108272674006890, -0.836135699851385920, -0.836163124938425480, -0.836190547935057200, -0.836217968841212800, +-0.836245387656823210, -0.836272804381820170, -0.836300219016135160, -0.836327631559699580, -0.836355042012445150, -0.836382450374302920, -0.836409856645204510, -0.836437260825081740, +-0.836464662913865450, -0.836492062911487700, -0.836519460817879650, -0.836546856632973010, -0.836574250356699410, -0.836601641988990010, -0.836629031529776750, -0.836656418978990680, +-0.836683804336563530, -0.836711187602426800, -0.836738568776512200, -0.836765947858751360, -0.836793324849075540, -0.836820699747416240, -0.836848072553705520, -0.836875443267874330, +-0.836902811889854600, -0.836930178419577840, -0.836957542856975540, -0.836984905201979660, -0.837012265454521340, -0.837039623614532320, -0.837066979681944430, -0.837094333656688950, +-0.837121685538697590, -0.837149035327901970, -0.837176383024234030, -0.837203728627624930, -0.837231072138006520, -0.837258413555310610, -0.837285752879468490, -0.837313090110411880, +-0.837340425248072620, -0.837367758292382300, -0.837395089243272770, -0.837422418100675410, -0.837449744864521950, -0.837477069534744320, -0.837504392111273810, -0.837531712594042240, +-0.837559030982981460, -0.837586347278023060, -0.837613661479099100, -0.837640973586140760, -0.837668283599079850, -0.837695591517848560, -0.837722897342378150, -0.837750201072600340, +-0.837777502708447090, -0.837804802249850320, -0.837832099696741330, -0.837859395049052050, -0.837886688306714530, -0.837913979469660060, -0.837941268537820690, -0.837968555511128140, +-0.837995840389514140, -0.838023123172910830, -0.838050403861249400, -0.838077682454462010, -0.838104958952480610, -0.838132233355236680, -0.838159505662662060, -0.838186775874688710, +-0.838214043991248440, -0.838241310012273310, -0.838268573937694610, -0.838295835767444820, -0.838323095501455120, -0.838350353139657670, -0.838377608681984300, -0.838404862128367070, +-0.838432113478737810, -0.838459362733028010, -0.838486609891169850, -0.838513854953095380, -0.838541097918735990, -0.838568338788023950, -0.838595577560890980, -0.838622814237269140, +-0.838650048817090490, -0.838677281300286400, -0.838704511686789170, -0.838731739976530940, -0.838758966169443120, -0.838786190265457860, -0.838813412264507010, -0.838840632166523050, +-0.838867849971437150, -0.838895065679181710, -0.838922279289688770, -0.838949490802889940, -0.838976700218717400, -0.839003907537103080, -0.839031112757978930, -0.839058315881277330, +-0.839085516906929670, -0.839112715834868240, -0.839139912665025190, -0.839167107397332130, -0.839194300031721350, -0.839221490568124890, -0.839248679006474600, -0.839275865346702840, +-0.839303049588741250, -0.839330231732522190, -0.839357411777977400, -0.839384589725039040, -0.839411765573639170, -0.839438939323709940, -0.839466110975183640, -0.839493280527991770, +-0.839520447982066600, -0.839547613337340740, -0.839574776593745460, -0.839601937751213280, -0.839629096809676350, -0.839656253769066610, -0.839683408629316450, -0.839710561390357490, +-0.839737712052122220, -0.839764860614542810, -0.839792007077551080, -0.839819151441079330, -0.839846293705059700, -0.839873433869424590, -0.839900571934105610, -0.839927707899035260, +-0.839954841764145810, -0.839981973529369100, -0.840009103194637400, -0.840036230759882980, -0.840063356225037920, -0.840090479590034690, -0.840117600854805140, -0.840144720019281530, +-0.840171837083396380, -0.840198952047081280, -0.840226064910268970, -0.840253175672891370, -0.840280284334880890, -0.840307390896170010, -0.840334495356690250, -0.840361597716374310, +-0.840388697975154700, -0.840415796132963020, -0.840442892189731890, -0.840469986145393590, -0.840497077999880490, -0.840524167753124440, -0.840551255405058040, -0.840578340955613680, +-0.840605424404723190, -0.840632505752319180, -0.840659584998333930, -0.840686662142699710, -0.840713737185349030, -0.840740810126213820, -0.840767880965226590, -0.840794949702319940, +-0.840822016337425590, -0.840849080870476160, -0.840876143301404140, -0.840903203630141700, -0.840930261856621560, -0.840957317980775440, -0.840984372002536280, -0.841011423921836030, +-0.841038473738607180, -0.841065521452782020, -0.841092567064293250, -0.841119610573073160, -0.841146651979053920, -0.841173691282168010, -0.841200728482348060, -0.841227763579526000, +-0.841254796573634670, -0.841281827464606340, -0.841308856252373390, -0.841335882936868560, -0.841362907518023670, -0.841389929995771670, -0.841416950370045050, -0.841443968640775750, +-0.841470984807896620, -0.841497998871339910, -0.841525010831038260, -0.841552020686924360, -0.841579028438930180, -0.841606034086988640, -0.841633037631031700, -0.841660039070992290, +-0.841687038406802700, -0.841714035638395530, -0.841741030765703280, -0.841768023788658670, -0.841795014707194090, -0.841822003521241590, -0.841848990230734230, -0.841875974835604280, +-0.841902957335784460, -0.841929937731207280, -0.841956916021805450, -0.841983892207511020, -0.842010866288257160, -0.842037838263975940, -0.842064808134600050, -0.842091775900062120, +-0.842118741560294870, -0.842145705115230680, -0.842172666564802500, -0.842199625908942370, -0.842226583147583470, -0.842253538280657850, -0.842280491308098340, -0.842307442229837670, +-0.842334391045808430, -0.842361337755943350, -0.842388282360174710, -0.842415224858435670, -0.842442165250658290, -0.842469103536775510, -0.842496039716719940, -0.842522973790424290, +-0.842549905757821180, -0.842576835618843560, -0.842603763373423580, -0.842630689021494520, -0.842657612562988430, -0.842684533997838270, -0.842711453325976860, -0.842738370547336800, +-0.842765285661850830, -0.842792198669451880, -0.842819109570072110, -0.842846018363644920, -0.842872925050102360, -0.842899829629377480, -0.842926732101403120, -0.842953632466111880, +-0.842980530723436820, -0.843007426873310100, -0.843034320915665210, -0.843061212850434120, -0.843088102677550080, -0.843114990396945820, -0.843141876008553950, -0.843168759512307520, +-0.843195640908139370, -0.843222520195981980, -0.843249397375768430, -0.843276272447431200, -0.843303145410903230, -0.843330016266117370, -0.843356885013006540, -0.843383751651503480, +-0.843410616181541340, -0.843437478603052520, -0.843464338915969840, -0.843491197120226350, -0.843518053215754790, -0.843544907202488200, -0.843571759080359310, -0.843598608849301160, +-0.843625456509246360, -0.843652302060128090, -0.843679145501878950, -0.843705986834431760, -0.843732826057719710, -0.843759663171675610, -0.843786498176232410, -0.843813331071323060, +-0.843840161856880160, -0.843866990532837200, -0.843893817099126480, -0.843920641555681250, -0.843947463902434250, -0.843974284139318740, -0.844001102266267790, -0.844027918283213770, +-0.844054732190090200, -0.844081543986829550, -0.844108353673365120, -0.844135161249629730, -0.844161966715556430, -0.844188770071078290, -0.844215571316128340, -0.844242370450639320, +-0.844269167474544610, -0.844295962387776710, -0.844322755190268890, -0.844349545881954210, -0.844376334462765720, -0.844403120932636360, -0.844429905291499420, -0.844456687539287380, +-0.844483467675933960, -0.844510245701371680, -0.844537021615533680, -0.844563795418353250, -0.844590567109763210, -0.844617336689697070, -0.844644104158087330, -0.844670869514867580, +-0.844697632759970340, -0.844724393893329100, -0.844751152914876900, -0.844777909824546700, -0.844804664622271880, -0.844831417307985500, -0.844858167881620380, -0.844884916343110140, +-0.844911662692387270, -0.844938406929385270, -0.844965149054037300, -0.844991889066276540, -0.845018626966035910, -0.845045362753249040, -0.845072096427848640, -0.845098827989767880, +-0.845125557438940020, -0.845152284775298250, -0.845179009998775820, -0.845205733109305800, -0.845232454106821680, -0.845259172991256190, -0.845285889762543040, -0.845312604420614950, +-0.845339316965405320, -0.845366027396847410, -0.845392735714874390, -0.845419441919419530, -0.845446146010416340, -0.845472847987797650, -0.845499547851496950, -0.845526245601447180, +-0.845552941237581730, -0.845579634759834000, -0.845606326168137130, -0.845633015462424750, -0.845659702642629570, -0.845686387708685320, -0.845713070660524920, -0.845739751498081780, +-0.845766430221289390, -0.845793106830080800, -0.845819781324389510, -0.845846453704149010, -0.845873123969292040, -0.845899792119752640, -0.845926458155463410, -0.845953122076358090, +-0.845979783882369940, -0.846006443573432350, -0.846033101149478610, -0.846059756610442410, -0.846086409956256610, -0.846113061186854920, -0.846139710302170390, -0.846166357302136630, +-0.846193002186686920, -0.846219644955754750, -0.846246285609273620, -0.846272924147176590, -0.846299560569397480, -0.846326194875869240, -0.846352827066525590, -0.846379457141299810, +-0.846406085100125270, -0.846432710942935710, -0.846459334669664500, -0.846485956280244700, -0.846512575774610370, -0.846539193152694210, -0.846565808414430190, -0.846592421559751560, +-0.846619032588591950, -0.846645641500884950, -0.846672248296563620, -0.846698852975561910, -0.846725455537812870, -0.846752055983250100, -0.846778654311807210, -0.846805250523417710, +-0.846831844618015190, -0.846858436595533170, -0.846885026455904800, -0.846911614199064130, -0.846938199824944230, -0.846964783333478800, -0.846991364724601460, -0.847017943998245700, +-0.847044521154345030, -0.847071096192833270, -0.847097669113643590, -0.847124239916709930, -0.847150808601965450, -0.847177375169343990, -0.847203939618779160, -0.847230501950204330, +-0.847257062163553560, -0.847283620258759810, -0.847310176235757330, -0.847336730094479180, -0.847363281834859210, -0.847389831456831000, -0.847416378960328180, -0.847442924345284450, +-0.847469467611633660, -0.847496008759308970, -0.847522547788244540, -0.847549084698373420, -0.847575619489629560, -0.847602152161946790, -0.847628682715258490, -0.847655211149498600, +-0.847681737464600850, -0.847708261660498510, -0.847734783737125850, -0.847761303694415820, -0.847787821532302700, -0.847814337250719970, -0.847840850849601370, -0.847867362328880940, +-0.847893871688491840, -0.847920378928368250, -0.847946884048443540, -0.847973387048651550, -0.847999887928926110, -0.848026386689201050, -0.848052883329409870, -0.848079377849486840, +-0.848105870249365120, -0.848132360528978890, -0.848158848688261520, -0.848185334727147190, -0.848211818645569380, -0.848238300443462050, -0.848264780120759230, -0.848291257677394110, +-0.848317733113301160, -0.848344206428413680, -0.848370677622665600, -0.848397146695990980, -0.848423613648323420, -0.848450078479596750, -0.848476541189745140, -0.848503001778702080, +-0.848529460246401520, -0.848555916592777290, -0.848582370817763110, -0.848608822921293140, -0.848635272903300990, -0.848661720763720710, -0.848688166502486350, -0.848714610119531420, +-0.848741051614790190, -0.848767490988196040, -0.848793928239683140, -0.848820363369185430, -0.848846796376636850, -0.848873227261971450, -0.848899656025122850, -0.848926082666025210, +-0.848952507184612240, -0.848978929580818000, -0.849005349854576320, -0.849031768005821360, -0.849058184034486960, -0.849084597940507390, -0.849111009723816030, -0.849137419384347390, +-0.849163826922034960, -0.849190232336813010, -0.849216635628615490, -0.849243036797376340, -0.849269435843029610, -0.849295832765509460, -0.849322227564749840, -0.849348620240684250, +-0.849375010793247290, -0.849401399222372680, -0.849427785527994690, -0.849454169710047170, -0.849480551768464380, -0.849506931703180150, -0.849533309514128640, -0.849559685201243700, +-0.849586058764459580, -0.849612430203710360, -0.849638799518929950, -0.849665166710052660, -0.849691531777012620, -0.849717894719743460, -0.849744255538179890, -0.849770614232255420, +-0.849796970801904420, -0.849823325247060950, -0.849849677567659170, -0.849876027763633470, -0.849902375834917460, -0.849928721781445740, -0.849955065603152040, -0.849981407299970630, +-0.850007746871835670, -0.850034084318681330, -0.850060419640441770, -0.850086752837051480, -0.850113083908444090, -0.850139412854554080, -0.850165739675315390, -0.850192064370662410, +-0.850218386940529200, -0.850244707384850030, -0.850271025703559060, -0.850297341896590900, -0.850323655963878930, -0.850349967905358220, -0.850376277720962360, -0.850402585410625740, +-0.850428890974282650, -0.850455194411867340, -0.850481495723314330, -0.850507794908557320, -0.850534091967531050, -0.850560386900169330, -0.850586679706406560, -0.850612970386177230, +-0.850639258939415390, -0.850665545366055430, -0.850691829666031850, -0.850718111839278370, -0.850744391885729920, -0.850770669805320230, -0.850796945597983910, -0.850823219263655230, +-0.850849490802268460, -0.850875760213757990, -0.850902027498058320, -0.850928292655103610, -0.850954555684828030, -0.850980816587165960, -0.851007075362051780, -0.851033332009420000, +-0.851059586529204880, -0.851085838921341040, -0.851112089185762310, -0.851138337322403630, -0.851164583331198930, -0.851190827212082720, -0.851217068964989390, -0.851243308589853420, +-0.851269546086609210, -0.851295781455191360, -0.851322014695533810, -0.851348245807571510, -0.851374474791238290, -0.851400701646468970, -0.851426926373197830, -0.851453148971359370, +-0.851479369440888310, -0.851505587781718590, -0.851531803993785030, -0.851558018077021810, -0.851584230031363630, -0.851610439856744780, -0.851636647553099760, -0.851662853120363270, +-0.851689056558469830, -0.851715257867353470, -0.851741457046949260, -0.851767654097191130, -0.851793849018013920, -0.851820041809352000, -0.851846232471140000, -0.851872421003312510, +-0.851898607405804030, -0.851924791678548950, -0.851950973821482100, -0.851977153834537540, -0.852003331717650080, -0.852029507470754340, -0.852055681093784820, -0.852081852586676350, +-0.852108021949362970, -0.852134189181779860, -0.852160354283860940, -0.852186517255541180, -0.852212678096755050, -0.852238836807437390, -0.852264993387522480, -0.852291147836945370, +-0.852317300155640220, -0.852343450343541980, -0.852369598400584900, -0.852395744326703840, -0.852421888121833390, -0.852448029785908280, -0.852474169318863110, -0.852500306720632710, +-0.852526441991151460, -0.852552575130353980, -0.852578706138174990, -0.852604835014549310, -0.852630961759411440, -0.852657086372696220, -0.852683208854338570, -0.852709329204272560, +-0.852735447422433570, -0.852761563508755650, -0.852787677463173850, -0.852813789285622900, -0.852839898976037400, -0.852866006534352180, -0.852892111960502300, -0.852918215254421690, +-0.852944316416045960, -0.852970415445309050, -0.852996512342146240, -0.853022607106492030, -0.853048699738281350, -0.853074790237449250, -0.853100878603929800, -0.853126964837658490, +-0.853153048938569470, -0.853179130906597800, -0.853205210741678320, -0.853231288443745850, -0.853257364012735220, -0.853283437448581370, -0.853309508751218580, -0.853335577920582460, +-0.853361644956607050, -0.853387709859227410, -0.853413772628378700, -0.853439833263995420, -0.853465891766012620, -0.853491948134365350, -0.853518002368987890, -0.853544054469815740, +-0.853570104436783160, -0.853596152269825330, -0.853622197968877170, -0.853648241533873420, -0.853674282964749340, -0.853700322261439330, -0.853726359423878760, -0.853752394452002130, +-0.853778427345744380, -0.853804458105040690, -0.853830486729825750, -0.853856513220034640, -0.853882537575602510, -0.853908559796463740, -0.853934579882553830, -0.853960597833807180, +-0.853986613650159150, -0.854012627331544480, -0.854038638877898330, -0.854064648289155740, -0.854090655565251320, -0.854116660706120580, -0.854142663711697890, -0.854168664581918420, +-0.854194663316717450, -0.854220659916029800, -0.854246654379790420, -0.854272646707934790, -0.854298636900397200, -0.854324624957113250, -0.854350610878017450, -0.854376594663045270, +-0.854402576312131460, -0.854428555825211270, -0.854454533202219760, -0.854480508443092090, -0.854506481547762880, -0.854532452516167720, -0.854558421348241230, -0.854584388043918670, +-0.854610352603135110, -0.854636315025825710, -0.854662275311925730, -0.854688233461369910, -0.854714189474093610, -0.854740143350031680, -0.854766095089119380, -0.854792044691291890, +-0.854817992156484240, -0.854843937484631610, -0.854869880675669380, -0.854895821729532160, -0.854921760646155660, -0.854947697425474500, -0.854973632067424160, -0.854999564571939710, +-0.855025494938956410, -0.855051423168409320, -0.855077349260233820, -0.855103273214364860, -0.855129195030737810, -0.855155114709287620, -0.855181032249949680, -0.855206947652659030, +-0.855232860917351180, -0.855258772043961280, -0.855284681032424280, -0.855310587882675780, -0.855336492594650610, -0.855362395168284160, -0.855388295603511710, -0.855414193900268630, +-0.855440090058489980, -0.855465984078111360, -0.855491875959067620, -0.855517765701294230, -0.855543653304726370, -0.855569538769299310, -0.855595422094948430, -0.855621303281608900, +-0.855647182329216440, -0.855673059237705870, -0.855698934007012690, -0.855724806637072070, -0.855750677127819380, -0.855776545479190130, -0.855802411691119370, -0.855828275763542590, +-0.855854137696395400, -0.855879997489612630, -0.855905855143130110, -0.855931710656882670, -0.855957564030806030, -0.855983415264835350, -0.856009264358906230, -0.856035111312953960, +-0.856060956126914130, -0.856086798800721690, -0.856112639334312480, -0.856138477727621420, -0.856164313980584120, -0.856190148093136090, -0.856215980065212710, -0.856241809896749580, +-0.856267637587681650, -0.856293463137944970, -0.856319286547474360, -0.856345107816205430, -0.856370926944073910, -0.856396743931014950, -0.856422558776964160, -0.856448371481857150, +-0.856474182045629080, -0.856499990468215680, -0.856525796749552200, -0.856551600889574160, -0.856577402888217150, -0.856603202745416570, -0.856629000461108010, -0.856654796035227210, +-0.856680589467709310, -0.856706380758489820, -0.856732169907504340, -0.856757956914688480, -0.856783741779977740, -0.856809524503307610, -0.856835305084613810, -0.856861083523831610, +-0.856886859820896960, -0.856912633975744910, -0.856938405988311280, -0.856964175858531570, -0.856989943586341510, -0.857015709171676470, -0.857041472614472500, -0.857067233914664550, +-0.857092993072188780, -0.857118750086980240, -0.857144504958974980, -0.857170257688108280, -0.857196008274316080, -0.857221756717533980, -0.857247503017697370, -0.857273247174742070, +-0.857298989188603590, -0.857324729059217530, -0.857350466786519720, -0.857376202370445650, -0.857401935810931160, -0.857427667107912070, -0.857453396261323550, -0.857479123271101760, +-0.857504848137181860, -0.857530570859500020, -0.857556291437991610, -0.857582009872592480, -0.857607726163238330, -0.857633440309865210, -0.857659152312408080, -0.857684862170803420, +-0.857710569884986400, -0.857736275454892840, -0.857761978880458690, -0.857787680161619550, -0.857813379298311470, -0.857839076290469630, -0.857864771138030390, -0.857890463840929040, +-0.857916154399101520, -0.857941842812483530, -0.857967529081010930, -0.857993213204619630, -0.858018895183245480, -0.858044575016823850, -0.858070252705290910, -0.858095928248582270, +-0.858121601646633760, -0.858147272899381200, -0.858172942006760420, -0.858198608968707370, -0.858224273785158090, -0.858249936456047970, -0.858275596981312840, -0.858301255360888750, +-0.858326911594711530, -0.858352565682717010, -0.858378217624841120, -0.858403867421019820, -0.858429515071188700, -0.858455160575283930, -0.858480803933241110, -0.858506445144996300, +-0.858532084210485320, -0.858557721129644120, -0.858583355902408640, -0.858608988528715030, -0.858634619008498690, -0.858660247341695990, -0.858685873528242550, -0.858711497568074410, +-0.858737119461127410, -0.858762739207337700, -0.858788356806641340, -0.858813972258973930, -0.858839585564271760, -0.858865196722470410, -0.858890805733506070, -0.858916412597314660, +-0.858942017313832350, -0.858967619882994860, -0.858993220304738680, -0.859018818578999090, -0.859044414705712690, -0.859070008684815090, -0.859095600516242450, -0.859121190199930830, +-0.859146777735816270, -0.859172363123834710, -0.859197946363922440, -0.859223527456015160, -0.859249106400049150, -0.859274683195960230, -0.859300257843684690, -0.859325830343158350, +-0.859351400694317590, -0.859376968897098470, -0.859402534951436700, -0.859428098857268790, -0.859453660614530430, -0.859479220223157920, -0.859504777683087420, -0.859530332994254850, +-0.859555886156596620, -0.859581437170048760, -0.859606986034547100, -0.859632532750028270, -0.859658077316427850, -0.859683619733682240, -0.859709160001727590, -0.859734698120499960, +-0.859760234089935630, -0.859785767909970970, -0.859811299580541920, -0.859836829101584320, -0.859862356473034660, -0.859887881694829210, -0.859913404766903920, -0.859938925689195170, +-0.859964444461639330, -0.859989961084172250, -0.860015475556730300, -0.860040987879249540, -0.860066498051666350, -0.860092006073916890, -0.860117511945937440, -0.860143015667664160, +-0.860168517239033540, -0.860194016659981520, -0.860219513930444490, -0.860245009050358610, -0.860270502019660150, -0.860295992838285510, -0.860321481506170830, -0.860346968023252610, +-0.860372452389466800, -0.860397934604750110, -0.860423414669038380, -0.860448892582267980, -0.860474368344375520, -0.860499841955297050, -0.860525313414968960, -0.860550782723327860, +-0.860576249880309560, -0.860601714885850800, -0.860627177739887620, -0.860652638442356510, -0.860678096993193640, -0.860703553392335730, -0.860729007639718820, -0.860754459735279640, +-0.860779909678954120, -0.860805357470678990, -0.860830803110390290, -0.860856246598024620, -0.860881687933518270, -0.860907127116807720, -0.860932564147829480, -0.860957999026519700, +-0.860983431752815220, -0.861008862326651860, -0.861034290747966340, -0.861059717016695040, -0.861085141132774570, -0.861110563096141090, -0.861135982906731550, -0.861161400564481870, +-0.861186816069328790, -0.861212229421208560, -0.861237640620057700, -0.861263049665812690, -0.861288456558410130, -0.861313861297786310, -0.861339263883878160, -0.861364664316621840, +-0.861390062595953740, -0.861415458721810360, -0.861440852694128290, -0.861466244512844150, -0.861491634177894430, -0.861517021689215850, -0.861542407046744450, -0.861567790250417300, +-0.861593171300170440, -0.861618550195940580, -0.861643926937664450, -0.861669301525278430, -0.861694673958719130, -0.861720044237923480, -0.861745412362827420, -0.861770778333368010, +-0.861796142149481530, -0.861821503811104670, -0.861846863318174060, -0.861872220670626190, -0.861897575868398100, -0.861922928911425860, -0.861948279799646390, -0.861973628532996190, +-0.861998975111411770, -0.862024319534829940, -0.862049661803187320, -0.862075001916420610, -0.862100339874466550, -0.862125675677261390, -0.862151009324742310, -0.862176340816845470, +-0.862201670153507790, -0.862226997334666010, -0.862252322360256620, -0.862277645230216440, -0.862302965944482410, -0.862328284502990710, -0.862353600905678590, -0.862378915152482220, +-0.862404227243338430, -0.862429537178184270, -0.862454844956956120, -0.862480150579591150, -0.862505454046025630, -0.862530755356196610, -0.862556054510040470, -0.862581351507494270, +-0.862606646348494600, -0.862631939032978410, -0.862657229560882310, -0.862682517932143340, -0.862707804146697900, -0.862733088204483240, -0.862758370105435550, -0.862783649849491960, +-0.862808927436589210, -0.862834202866664120, -0.862859476139653860, -0.862884747255494580, -0.862910016214123670, -0.862935283015477510, -0.862960547659493150, -0.862985810146107420, +-0.863011070475257270, -0.863036328646879290, -0.863061584660910760, -0.863086838517288070, -0.863112090215948480, -0.863137339756828490, -0.863162587139865050, -0.863187832364995190, +-0.863213075432155860, -0.863238316341283670, -0.863263555092316000, -0.863288791685189240, -0.863314026119840650, -0.863339258396206840, -0.863364488514224870, -0.863389716473831670, +-0.863414942274964180, -0.863440165917559570, -0.863465387401554320, -0.863490606726885820, -0.863515823893490580, -0.863541038901305740, -0.863566251750268350, -0.863591462440315260, +-0.863616670971383620, -0.863641877343410470, -0.863667081556332430, -0.863692283610086880, -0.863717483504610420, -0.863742681239840220, -0.863767876815713320, -0.863793070232166780, +-0.863818261489137540, -0.863843450586562870, -0.863868637524379590, -0.863893822302524430, -0.863919004920934760, -0.863944185379547540, -0.863969363678299910, -0.863994539817128810, +-0.864019713795971640, -0.864044885614765000, -0.864070055273446270, -0.864095222771952280, -0.864120388110220180, -0.864145551288187150, -0.864170712305790120, -0.864195871162966480, +-0.864221027859653270, -0.864246182395787320, -0.864271334771306020, -0.864296484986146310, -0.864321633040245340, -0.864346778933540280, -0.864371922665968300, -0.864397064237466650, +-0.864422203647972180, -0.864447340897422480, -0.864472475985754050, -0.864497608912904610, -0.864522739678811100, -0.864547868283410680, -0.864572994726640620, -0.864598119008438300, +-0.864623241128740450, -0.864648361087484660, -0.864673478884607880, -0.864698594520047270, -0.864723707993740210, -0.864748819305623970, -0.864773928455635610, -0.864799035443712620, +-0.864824140269791930, -0.864849242933811050, -0.864874343435706790, -0.864899441775416670, -0.864924537952878050, -0.864949631968027990, -0.864974723820804090, -0.864999813511143190, +-0.865024901038983000, -0.865049986404260340, -0.865075069606912610, -0.865100150646877290, -0.865125229524091540, -0.865150306238492760, -0.865175380790018430, -0.865200453178605500, +-0.865225523404191570, -0.865250591466713570, -0.865275657366109120, -0.865300721102315600, -0.865325782675270270, -0.865350842084910420, -0.865375899331173760, -0.865400954413997230, +-0.865426007333318200, -0.865451058089074080, -0.865476106681202450, -0.865501153109640380, -0.865526197374325570, -0.865551239475195410, -0.865576279412186960, -0.865601317185238030, +-0.865626352794285570, -0.865651386239267180, -0.865676417520120370, -0.865701446636782500, -0.865726473589191080, -0.865751498377283710, -0.865776521000997330, -0.865801541460269770, +-0.865826559755038190, -0.865851575885240310, -0.865876589850813390, -0.865901601651695050, -0.865926611287822890, -0.865951618759134070, -0.865976624065566300, -0.866001627207056870, +-0.866026628183543260, -0.866051626994963190, -0.866076623641253930, -0.866101618122353200, -0.866126610438198610, -0.866151600588727310, -0.866176588573877140, -0.866201574393585360, +-0.866226558047789700, -0.866251539536427530, -0.866276518859436570, -0.866301496016754210, -0.866326471008318500, -0.866351443834066260, -0.866376414493935650, -0.866401382987863840, +-0.866426349315788550, -0.866451313477647370, -0.866476275473377910, -0.866501235302918000, -0.866526192966204810, -0.866551148463176270, -0.866576101793769760, -0.866601052957922890, +-0.866626001955573380, -0.866650948786658940, -0.866675893451117170, -0.866700835948885810, -0.866725776279902100, -0.866750714444104230, -0.866775650441429350, -0.866800584271815280, +-0.866825515935199850, -0.866850445431520570, -0.866875372760715250, -0.866900297922721610, -0.866925220917477260, -0.866950141744919690, -0.866975060404986730, -0.866999976897616100, +-0.867024891222745510, -0.867049803380312790, -0.867074713370255660, -0.867099621192511600, -0.867124526847018680, -0.867149430333714280, -0.867174331652536210, -0.867199230803422430, +-0.867224127786310530, -0.867249022601138230, -0.867273915247843700, -0.867298805726364090, -0.867323694036637670, -0.867348580178601950, -0.867373464152194630, -0.867398345957353660, +-0.867423225594016860, -0.867448103062122280, -0.867472978361607080, -0.867497851492409770, -0.867522722454467600, -0.867547591247718520, -0.867572457872100580, -0.867597322327551380, +-0.867622184614008970, -0.867647044731411300, -0.867671902679695850, -0.867696758458800790, -0.867721612068663610, -0.867746463509222470, -0.867771312780415080, -0.867796159882179400, +-0.867821004814453460, -0.867845847577175090, -0.867870688170281900, -0.867895526593712270, -0.867920362847403590, -0.867945196931294020, -0.867970028845321370, -0.867994858589423710, +-0.868019686163539190, -0.868044511567605090, -0.868069334801560010, -0.868094155865341440, -0.868118974758887330, -0.868143791482135940, -0.868168606035024990, -0.868193418417492540, +-0.868218228629476730, -0.868243036670915180, -0.868267842541746270, -0.868292646241907500, -0.868317447771337130, -0.868342247129973100, -0.868367044317753470, -0.868391839334616170, +-0.868416632180499580, -0.868441422855341430, -0.868466211359079420, -0.868490997691651940, -0.868515781852996940, -0.868540563843052560, -0.868565343661756640, -0.868590121309047670, +-0.868614896784863140, -0.868639670089141670, -0.868664441221820630, -0.868689210182838620, -0.868713976972133590, -0.868738741589643590, -0.868763504035306780, -0.868788264309061310, +-0.868813022410845020, -0.868837778340596500, -0.868862532098253150, -0.868887283683753560, -0.868912033097035800, -0.868936780338037900, -0.868961525406698240, -0.868986268302954560, +-0.869011009026745440, -0.869035747578008610, -0.869060483956682450, -0.869085218162705010, -0.869109950196014560, -0.869134680056549150, -0.869159407744247380, -0.869184133259046750, +-0.869208856600886090, -0.869233577769703000, -0.869258296765436090, -0.869283013588023290, -0.869307728237403100, -0.869332440713513450, -0.869357151016293070, -0.869381859145679450, +-0.869406565101611520, -0.869431268884026890, -0.869455970492864050, -0.869480669928061390, -0.869505367189556950, -0.869530062277289350, -0.869554755191196400, -0.869579445931216830, +-0.869604134497288350, -0.869628820889349560, -0.869653505107338630, -0.869678187151194050, -0.869702867020853980, -0.869727544716256910, -0.869752220237340890, -0.869776893584044420, +-0.869801564756305550, -0.869826233754062650, -0.869850900577254340, -0.869875565225818660, -0.869900227699694330, -0.869924887998819170, -0.869949546123132130, -0.869974202072570920, +-0.869998855847074150, -0.870023507446580300, -0.870048156871027660, -0.870072804120354700, -0.870097449194499940, -0.870122092093401190, -0.870146732816997610, -0.870171371365226930, +-0.870196007738027740, -0.870220641935338660, -0.870245273957097830, -0.870269903803243870, -0.870294531473715490, -0.870319156968450410, -0.870343780287387680, -0.870368401430465340, +-0.870393020397622010, -0.870417637188796060, -0.870442251803925980, -0.870466864242950610, -0.870491474505807770, -0.870516082592436510, -0.870540688502774770, -0.870565292236761380, +-0.870589893794334710, -0.870614493175433380, -0.870639090379995760, -0.870663685407960690, -0.870688278259266090, -0.870712868933851030, -0.870737457431653650, -0.870762043752612570, +-0.870786627896666390, -0.870811209863753710, -0.870835789653812920, -0.870860367266782840, -0.870884942702601970, -0.870909515961208470, -0.870934087042541160, -0.870958655946538650, +-0.870983222673139430, -0.871007787222282230, -0.871032349593905740, -0.871056909787948250, -0.871081467804348590, -0.871106023643045120, -0.871130577303976580, -0.871155128787081570, +-0.871179678092298680, -0.871204225219566750, -0.871228770168824380, -0.871253312940009850, -0.871277853533062310, -0.871302391947919920, -0.871326928184521510, -0.871351462242805800, +-0.871375994122711380, -0.871400523824177210, -0.871425051347141540, -0.871449576691543440, -0.871474099857321270, -0.871498620844413760, -0.871523139652759740, -0.871547656282297800, +-0.871572170732966780, -0.871596683004705610, -0.871621193097452450, -0.871645701011146470, -0.871670206745726150, -0.871694710301130220, -0.871719211677297490, -0.871743710874166800, +-0.871768207891676750, -0.871792702729766500, -0.871817195388374210, -0.871841685867439150, -0.871866174166899710, -0.871890660286694820, -0.871915144226763310, -0.871939625987043890, +-0.871964105567475610, -0.871988582967996860, -0.872013058188546910, -0.872037531229064020, -0.872062002089487360, -0.872086470769755650, -0.872110937269807820, -0.872135401589582580, +-0.872159863729019100, -0.872184323688055760, -0.872208781466631830, -0.872233237064685700, -0.872257690482156510, -0.872282141718983110, -0.872306590775104310, -0.872331037650458940, +-0.872355482344986390, -0.872379924858625030, -0.872404365191313590, -0.872428803342991330, -0.872453239313596970, -0.872477673103069670, -0.872502104711348040, -0.872526534138371450, +-0.872550961384078280, -0.872575386448407820, -0.872599809331298880, -0.872624230032690300, -0.872648648552521110, -0.872673064890730380, -0.872697479047256920, -0.872721891022040010, +-0.872746300815018140, -0.872770708426130800, -0.872795113855316380, -0.872819517102514260, -0.872843918167663380, -0.872868317050702560, -0.872892713751571290, -0.872917108270207960, +-0.872941500606552070, -0.872965890760542210, -0.872990278732117650, -0.873014664521217340, -0.873039048127780440, -0.873063429551745980, -0.873087808793053030, -0.873112185851640410, +-0.873136560727447500, -0.873160933420413010, -0.873185303930476220, -0.873209672257576060, -0.873234038401651810, -0.873258402362642410, -0.873282764140487220, -0.873307123735124980, +-0.873331481146495060, -0.873355836374536290, -0.873380189419187940, -0.873404540280389050, -0.873428888958078800, -0.873453235452196550, -0.873477579762681030, -0.873501921889471840, +-0.873526261832507590, -0.873550599591727650, -0.873574935167071190, -0.873599268558477360, -0.873623599765885440, -0.873647928789234810, -0.873672255628463960, -0.873696580283512820, +-0.873720902754320020, -0.873745223040824910, -0.873769541142966680, -0.873793857060684690, -0.873818170793917990, -0.873842482342606200, -0.873866791706688130, -0.873891098886102840, +-0.873915403880789810, -0.873939706690688320, -0.873964007315737530, -0.873988305755876720, -0.874012602011045360, -0.874036896081182290, -0.874061187966227230, -0.874085477666118880, +-0.874109765180796860, -0.874134050510200540, -0.874158333654268980, -0.874182614612941670, -0.874206893386157980, -0.874231169973856860, -0.874255444375978020, -0.874279716592460400, +-0.874303986623243490, -0.874328254468266560, -0.874352520127469000, -0.874376783600790410, -0.874401044888169610, -0.874425303989546320, -0.874449560904859700, -0.874473815634049130, +-0.874498068177054000, -0.874522318533813680, -0.874546566704267560, -0.874570812688355350, -0.874595056486015760, -0.874619298097188860, -0.874643537521813450, -0.874667774759829150, +-0.874692009811175450, -0.874716242675791730, -0.874740473353617490, -0.874764701844592100, -0.874788928148654830, -0.874813152265745520, -0.874837374195803100, -0.874861593938767170, +-0.874885811494577340, -0.874910026863172870, -0.874934240044493610, -0.874958451038478580, -0.874982659845067510, -0.875006866464199670, -0.875031070895814670, -0.875055273139851990, +-0.875079473196251120, -0.875103671064951570, -0.875127866745893050, -0.875152060239014600, -0.875176251544256270, -0.875200440661557110, -0.875224627590856840, -0.875248812332094950, +-0.875272994885211040, -0.875297175250144720, -0.875321353426835590, -0.875345529415223140, -0.875369703215246650, -0.875393874826845830, -0.875418044249960390, -0.875442211484529830, +-0.875466376530493750, -0.875490539387791870, -0.875514700056363560, -0.875538858536148660, -0.875563014827086320, -0.875587168929116480, -0.875611320842178740, -0.875635470566212710, +-0.875659618101158000, -0.875683763446954420, -0.875707906603541250, -0.875732047570858540, -0.875756186348845560, -0.875780322937442010, -0.875804457336587630, -0.875828589546222220, +-0.875852719566285520, -0.875876847396716780, -0.875900973037456070, -0.875925096488442860, -0.875949217749616760, -0.875973336820917710, -0.875997453702285320, -0.876021568393659190, +-0.876045680894979470, -0.876069791206185330, -0.876093899327216820, -0.876118005258013420, -0.876142108998515080, -0.876166210548661390, -0.876190309908392200, -0.876214407077647190, +-0.876238502056366440, -0.876262594844489100, -0.876286685441955650, -0.876310773848705150, -0.876334860064677760, -0.876358944089813190, -0.876383025924051260, -0.876407105567332030, +-0.876431183019594880, -0.876455258280779860, -0.876479331350826560, -0.876503402229674930, -0.876527470917264680, -0.876551537413535860, -0.876575601718428190, -0.876599663831881700, +-0.876623723753835900, -0.876647781484230950, -0.876671837023006330, -0.876695890370102090, -0.876719941525458180, -0.876743990489014410, -0.876768037260710840, -0.876792081840487070, +-0.876816124228283260, -0.876840164424038890, -0.876864202427694140, -0.876888238239188820, -0.876912271858462990, -0.876936303285456350, -0.876960332520109300, -0.876984359562361200, +-0.877008384412152340, -0.877032407069422320, -0.877056427534111280, -0.877080445806159180, -0.877104461885506060, -0.877128475772091630, -0.877152487465856390, -0.877176496966739610, +-0.877200504274681770, -0.877224509389622490, -0.877248512311502030, -0.877272513040260220, -0.877296511575837100, -0.877320507918172950, -0.877344502067207270, -0.877368494022880640, +-0.877392483785132460, -0.877416471353903100, -0.877440456729132620, -0.877464439910760950, -0.877488420898728140, -0.877512399692974570, -0.877536376293439720, -0.877560350700064220, +-0.877584322912787650, -0.877608292931550180, -0.877632260756291970, -0.877656226386953180, -0.877680189823473840, -0.877704151065794140, -0.877728110113853880, -0.877752066967593560, +-0.877776021626952900, -0.877799974091872160, -0.877823924362291510, -0.877847872438151100, -0.877871818319391100, -0.877895762005951430, -0.877919703497772490, -0.877943642794794200, +-0.877967579896956730, -0.877991514804200230, -0.878015447516464990, -0.878039378033691250, -0.878063306355819200, -0.878087232482788640, -0.878111156414540180, -0.878135078151013770, +-0.878158997692149560, -0.878182915037887810, -0.878206830188168810, -0.878230743142933030, -0.878254653902120100, -0.878278562465670710, -0.878302468833524810, -0.878326373005622660, +-0.878350274981904540, -0.878374174762310830, -0.878398072346781690, -0.878421967735257490, -0.878445860927678180, -0.878469751923984470, -0.878493640724116180, -0.878517527328013800, +-0.878541411735617510, -0.878565293946867780, -0.878589173961704770, -0.878613051780069100, -0.878636927401900470, -0.878660800827139820, -0.878684672055726980, -0.878708541087602430, +-0.878732407922706460, -0.878756272560979550, -0.878780135002362180, -0.878803995246794200, -0.878827853294216530, -0.878851709144568890, -0.878875562797792110, -0.878899414253826340, +-0.878923263512612070, -0.878947110574089590, -0.878970955438199590, -0.878994798104882010, -0.879018638574077580, -0.879042476845726450, -0.879066312919769000, -0.879090146796145830, +-0.879113978474797330, -0.879137807955663870, -0.879161635238686070, -0.879185460323804180, -0.879209283210958480, -0.879233103900089460, -0.879256922391137730, -0.879280738684043770, +-0.879304552778747860, -0.879328364675190930, -0.879352174373312700, -0.879375981873054320, -0.879399787174355850, -0.879423590277157770, -0.879447391181400810, -0.879471189887025330, +-0.879494986393971940, -0.879518780702181260, -0.879542572811593430, -0.879566362722149280, -0.879590150433789190, -0.879613935946453540, -0.879637719260083160, -0.879661500374618430, +-0.879685279290000180, -0.879709056006168550, -0.879732830523064500, -0.879756602840628180, -0.879780372958800290, -0.879804140877521460, -0.879827906596732270, -0.879851670116373330, +-0.879875431436385470, -0.879899190556708840, -0.879922947477284390, -0.879946702198052380, -0.879970454718953630, -0.879994205039928650, -0.880017953160918240, -0.880041699081862920, +-0.880065442802703600, -0.880089184323380460, -0.880112923643834530, -0.880136660764006100, -0.880160395683835970, -0.880184128403264990, -0.880207858922233520, -0.880231587240682730, +-0.880255313358552780, -0.880279037275784710, -0.880302758992318800, -0.880326478508095980, -0.880350195823057070, -0.880373910937142570, -0.880397623850293300, -0.880421334562450310, +-0.880445043073553650, -0.880468749383544580, -0.880492453492363490, -0.880516155399951210, -0.880539855106248550, -0.880563552611196340, -0.880587247914735190, -0.880610941016806150, +-0.880634631917349700, -0.880658320616306440, -0.880682007113617440, -0.880705691409223500, -0.880729373503065240, -0.880753053395083580, -0.880776731085219480, -0.880800406573413300, +-0.880824079859606310, -0.880847750943739020, -0.880871419825752230, -0.880895086505587010, -0.880918750983183950, -0.880942413258484100, -0.880966073331428400, -0.880989731201957340, +-0.881013386870012070, -0.881037040335533210, -0.881060691598461680, -0.881084340658738530, -0.881107987516304370, -0.881131632171100580, -0.881155274623067530, -0.881178914872146390, +-0.881202552918277760, -0.881226188761402800, -0.881249822401462430, -0.881273453838397390, -0.881297083072148710, -0.881320710102657670, -0.881344334929864530, -0.881367957553710780, +-0.881391577974136920, -0.881415196191084100, -0.881438812204493380, -0.881462426014305580, -0.881486037620461740, -0.881509647022902910, -0.881533254221569810, -0.881556859216403810, +-0.881580462007345520, -0.881604062594335990, -0.881627660977316260, -0.881651257156227500, -0.881674851131010740, -0.881698442901606590, -0.881722032467956550, -0.881745619830001330, +-0.881769204987681960, -0.881792787940939630, -0.881816368689715360, -0.881839947233950090, -0.881863523573585220, -0.881887097708561220, -0.881910669638819810, -0.881934239364301490, +-0.881957806884947510, -0.881981372200699170, -0.882004935311497260, -0.882028496217283080, -0.882052054917997760, -0.882075611413582370, -0.882099165703977840, -0.882122717789125210, +-0.882146267668965980, -0.882169815343440970, -0.882193360812491440, -0.882216904076058680, -0.882240445134083510, -0.882263983986507410, -0.882287520633271090, -0.882311055074316060, +-0.882334587309583360, -0.882358117339014150, -0.882381645162549690, -0.882405170780131360, -0.882428694191699890, -0.882452215397196760, -0.882475734396563020, -0.882499251189739930, +-0.882522765776668660, -0.882546278157290480, -0.882569788331546870, -0.882593296299378550, -0.882616802060727230, -0.882640305615533640, -0.882663806963739360, -0.882687306105285450, +-0.882710803040113400, -0.882734297768164260, -0.882757790289379620, -0.882781280603700310, -0.882804768711067940, -0.882828254611423450, -0.882851738304708420, -0.882875219790863920, +-0.882898699069831430, -0.882922176141552220, -0.882945651005967780, -0.882969123663018940, -0.882992594112647520, -0.883016062354794460, -0.883039528389401140, -0.883062992216409160, +-0.883086453835759570, -0.883109913247394070, -0.883133370451253620, -0.883156825447279910, -0.883180278235414010, -0.883203728815597280, -0.883227177187771330, -0.883250623351877430, +-0.883274067307856960, -0.883297509055651520, -0.883320948595202160, -0.883344385926450480, -0.883367821049337750, -0.883391253963805470, -0.883414684669795000, -0.883438113167247850, +-0.883461539456105620, -0.883484963536309340, -0.883508385407800860, -0.883531805070521200, -0.883555222524412100, -0.883578637769414920, -0.883602050805471050, -0.883625461632522090, +-0.883648870250509750, -0.883672276659374980, -0.883695680859059700, -0.883719082849505070, -0.883742482630652690, -0.883765880202444070, -0.883789275564820900, -0.883812668717724350, +-0.883836059661096460, -0.883859448394878180, -0.883882834919011540, -0.883906219233437480, -0.883929601338097950, -0.883952981232934420, -0.883976358917888390, -0.883999734392901690, +-0.884023107657915470, -0.884046478712871790, -0.884069847557711560, -0.884093214192376740, -0.884116578616808920, -0.884139940830949600, -0.884163300834740480, -0.884186658628123290, +-0.884210014211039290, -0.884233367583430410, -0.884256718745237920, -0.884280067696403550, -0.884303414436869110, -0.884326758966576200, -0.884350101285466210, -0.884373441393481290, +-0.884396779290562600, -0.884420114976652070, -0.884443448451691090, -0.884466779715621490, -0.884490108768384960, -0.884513435609923130, -0.884536760240177910, -0.884560082659090590, +-0.884583402866603310, -0.884606720862657350, -0.884630036647194420, -0.884653350220156560, -0.884676661581485280, -0.884699970731122280, -0.884723277669009600, -0.884746582395088630, +-0.884769884909301310, -0.884793185211589010, -0.884816483301893890, -0.884839779180157440, -0.884863072846321600, -0.884886364300328300, -0.884909653542118810, -0.884932940571635520, +-0.884956225388819570, -0.884979507993613020, -0.885002788385957810, -0.885026066565795520, -0.885049342533068220, -0.885072616287717610, -0.885095887829685290, -0.885119157158913540, +-0.885142424275343620, -0.885165689178917690, -0.885188951869577470, -0.885212212347264880, -0.885235470611921870, -0.885258726663490260, -0.885281980501911650, -0.885305232127128310, +-0.885328481539081720, -0.885351728737713950, -0.885374973722966810, -0.885398216494782230, -0.885421457053102270, -0.885444695397868520, -0.885467931529023260, -0.885491165446507860, +-0.885514397150264700, -0.885537626640235390, -0.885560853916362080, -0.885584078978586710, -0.885607301826851320, -0.885630522461097410, -0.885653740881267360, -0.885676957087302870, +-0.885700171079145890, -0.885723382856738570, -0.885746592420022740, -0.885769799768940440, -0.885793004903433820, -0.885816207823444720, -0.885839408528914960, -0.885862607019786590, +-0.885885803296001750, -0.885908997357502390, -0.885932189204230450, -0.885955378836128400, -0.885978566253137640, -0.886001751455200550, -0.886024934442259050, -0.886048115214255080, +-0.886071293771130920, -0.886094470112828490, -0.886117644239289850, -0.886140816150457370, -0.886163985846272540, -0.886187153326678080, -0.886210318591615480, -0.886233481641027110, +-0.886256642474854920, -0.886279801093041280, -0.886302957495528230, -0.886326111682257610, -0.886349263653171900, -0.886372413408212930, -0.886395560947322860, -0.886418706270443830, +-0.886441849377518130, -0.886464990268487680, -0.886488128943295100, -0.886511265401881960, -0.886534399644190780, -0.886557531670163490, -0.886580661479742350, -0.886603789072869520, +-0.886626914449487270, -0.886650037609537640, -0.886673158552963250, -0.886696277279705680, -0.886719393789707540, -0.886742508082910890, -0.886765620159257860, -0.886788730018690850, +-0.886811837661151900, -0.886834943086583620, -0.886858046294927820, -0.886881147286127100, -0.886904246060123300, -0.886927342616858900, -0.886950436956276070, -0.886973529078317170, +-0.886996618982924480, -0.887019706670040490, -0.887042792139607020, -0.887065875391566670, -0.887088956425861500, -0.887112035242433980, -0.887135111841226290, -0.887158186222180900, +-0.887181258385239980, -0.887204328330346130, -0.887227396057441500, -0.887250461566468140, -0.887273524857368550, -0.887296585930085310, -0.887319644784560490, -0.887342701420736570, +-0.887365755838556150, -0.887388808037961050, -0.887411858018894220, -0.887434905781297580, -0.887457951325113630, -0.887480994650284740, -0.887504035756753410, -0.887527074644462010, +-0.887550111313353040, -0.887573145763368650, -0.887596177994451670, -0.887619208006543920, -0.887642235799588230, -0.887665261373526970, -0.887688284728302520, -0.887711305863857490, +-0.887734324780134140, -0.887757341477075080, -0.887780355954622460, -0.887803368212718990, -0.887826378251307060, -0.887849386070329260, -0.887872391669727980, -0.887895395049445810, +-0.887918396209425030, -0.887941395149608460, -0.887964391869938250, -0.887987386370357010, -0.888010378650807340, -0.888033368711231620, -0.888056356551572560, -0.888079342171772870, +-0.888102325571774490, -0.888125306751520570, -0.888148285710953170, -0.888171262450015100, -0.888194236968648850, -0.888217209266796930, -0.888240179344402250, -0.888263147201406980, +-0.888286112837753940, -0.888309076253385510, -0.888332037448244290, -0.888354996422273110, -0.888377953175414350, -0.888400907707610710, -0.888423860018805020, -0.888446810108939440, +-0.888469757977957130, -0.888492703625800130, -0.888515647052411370, -0.888538588257733570, -0.888561527241709230, -0.888584464004281150, -0.888607398545392060, -0.888630330864984440, +-0.888653260963000790, -0.888676188839384040, -0.888699114494076790, -0.888722037927021760, -0.888744959138161650, -0.888767878127439290, -0.888790794894797180, -0.888813709440178120, +-0.888836621763524630, -0.888859531864779620, -0.888882439743885810, -0.888905345400785810, -0.888928248835422540, -0.888951150047738840, -0.888974049037676960, -0.888996945805180290, +-0.889019840350190990, -0.889042732672651990, -0.889065622772506340, -0.889088510649696520, -0.889111396304165690, -0.889134279735856130, -0.889157160944711090, -0.889180039930672960, +-0.889202916693684680, -0.889225791233689170, -0.889248663550629040, -0.889271533644447440, -0.889294401515087100, -0.889317267162490600, -0.889340130586601110, -0.889362991787361110, +-0.889385850764713550, -0.889408707518601460, -0.889431562048967560, -0.889454414355754790, -0.889477264438906180, -0.889500112298364230, -0.889522957934072100, -0.889545801345972500, +-0.889568642534008360, -0.889591481498122500, -0.889614318238258090, -0.889637152754358060, -0.889659985046364900, -0.889682815114221980, -0.889705642957871800, -0.889728468577257510, +-0.889751291972322170, -0.889774113143008470, -0.889796932089259580, -0.889819748811018440, -0.889842563308227860, -0.889865375580831010, -0.889888185628770480, -0.889910993451989540, +-0.889933799050431130, -0.889956602424038180, -0.889979403572753740, -0.890002202496521070, -0.890024999195282770, -0.890047793668981790, -0.890070585917561390, -0.890093375940964490, +-0.890116163739134160, -0.890138949312013430, -0.890161732659545460, -0.890184513781673070, -0.890207292678339530, -0.890230069349487560, -0.890252843795060420, -0.890275616015001160, +-0.890298386009252930, -0.890321153777758670, -0.890343919320461750, -0.890366682637304780, -0.890389443728231370, -0.890412202593184100, -0.890434959232106360, -0.890457713644941200, +-0.890480465831631760, -0.890503215792121440, -0.890525963526352720, -0.890548709034269410, -0.890571452315814140, -0.890594193370930150, -0.890616932199560730, -0.890639668801648910, +-0.890662403177138070, -0.890685135325971270, -0.890707865248091530, -0.890730592943442260, -0.890753318411966370, -0.890776041653607130, -0.890798762668307820, -0.890821481456011590, +-0.890844198016661700, -0.890866912350201430, -0.890889624456573710, -0.890912334335722140, -0.890935041987589550, -0.890957747412119420, -0.890980450609254790, -0.891003151578939170, +-0.891025850321115700, -0.891048546835727540, -0.891071241122718180, -0.891093933182030450, -0.891116623013607940, -0.891139310617393930, -0.891161995993331570, -0.891184679141364230, +-0.891207360061435420, -0.891230038753488050, -0.891252715217465740, -0.891275389453311420, -0.891298061460968570, -0.891320731240380690, -0.891343398791490940, -0.891366064114242910, +-0.891388727208579420, -0.891411388074444420, -0.891434046711780730, -0.891456703120531820, -0.891479357300641320, -0.891502009252052360, -0.891524658974708340, -0.891547306468552850, +-0.891569951733528930, -0.891592594769580420, -0.891615235576650120, -0.891637874154681760, -0.891660510503618720, -0.891683144623404370, -0.891705776513982200, -0.891728406175295810, +-0.891751033607288130, -0.891773658809903110, -0.891796281783083790, -0.891818902526773650, -0.891841521040916410, -0.891864137325455220, -0.891886751380333910, -0.891909363205495630, +-0.891931972800884100, -0.891954580166442360, -0.891977185302114230, -0.891999788207843090, -0.892022388883572550, -0.892044987329245980, -0.892067583544807200, -0.892090177530199260, +-0.892112769285365980, -0.892135358810250630, -0.892157946104796930, -0.892180531168948350, -0.892203114002648400, -0.892225694605840670, -0.892248272978468980, -0.892270849120476490, +-0.892293423031806810, -0.892315994712403420, -0.892338564162210130, -0.892361131381170460, -0.892383696369227870, -0.892406259126326320, -0.892428819652408940, -0.892451377947419690, +-0.892473934011301710, -0.892496487843999040, -0.892519039445455080, -0.892541588815613520, -0.892564135954417970, -0.892586680861812250, -0.892609223537739640, -0.892631763982144280, +-0.892654302194969220, -0.892676838176158390, -0.892699371925655520, -0.892721903443404190, -0.892744432729348340, -0.892766959783431120, -0.892789484605596820, -0.892812007195788460, +-0.892834527553950210, -0.892857045680025550, -0.892879561573958420, -0.892902075235692210, -0.892924586665171160, -0.892947095862338340, -0.892969602827138000, -0.892992107559513530, +-0.893014610059408740, -0.893037110326767360, -0.893059608361533310, -0.893082104163650190, -0.893104597733061940, -0.893127089069712170, -0.893149578173544680, -0.893172065044503190, +-0.893194549682531540, -0.893217032087573410, -0.893239512259572770, -0.893261990198473520, -0.893284465904219170, -0.893306939376753760, -0.893329410616020780, -0.893351879621964380, +-0.893374346394528280, -0.893396810933656190, -0.893419273239292160, -0.893441733311380220, -0.893464191149863640, -0.893486646754686810, -0.893509100125793100, -0.893531551263126780, +-0.893554000166631450, -0.893576446836251260, -0.893598891271929820, -0.893621333473611390, -0.893643773441239690, -0.893666211174758310, -0.893688646674111300, -0.893711079939242810, +-0.893733510970096570, -0.893755939766616600, -0.893778366328746960, -0.893800790656431140, -0.893823212749613630, -0.893845632608237790, -0.893868050232248020, -0.893890465621588030, +-0.893912878776201850, -0.893935289696033530, -0.893957698381027120, -0.893980104831126330, -0.894002509046275430, -0.894024911026418120, -0.894047310771498460, -0.894069708281460600, +-0.894092103556248460, -0.894114496595806220, -0.894136887400077570, -0.894159275969006790, -0.894181662302537820, -0.894204046400614570, -0.894226428263181220, -0.894248807890181800, +-0.894271185281560350, -0.894293560437261160, -0.894315933357227810, -0.894338304041404910, -0.894360672489736050, -0.894383038702165400, -0.894405402678637220, -0.894427764419095550, +-0.894450123923484550, -0.894472481191748270, -0.894494836223830750, -0.894517189019676250, -0.894539539579228600, -0.894561887902432070, -0.894584233989230810, -0.894606577839568980, +-0.894628919453390960, -0.894651258830640340, -0.894673595971261840, -0.894695930875199160, -0.894718263542396700, -0.894740593972798480, -0.894762922166348900, -0.894785248122991870, +-0.894807571842672010, -0.894829893325333030, -0.894852212570919400, -0.894874529579375190, -0.894896844350644540, -0.894919156884671830, -0.894941467181401220, -0.894963775240776970, +-0.894986081062743470, -0.895008384647244750, -0.895030685994224860, -0.895052985103628300, -0.895075281975399210, -0.895097576609481970, -0.895119869005820750, -0.895142159164360130, +-0.895164447085043840, -0.895186732767816680, -0.895209016212622500, -0.895231297419405660, -0.895253576388110650, -0.895275853118681740, -0.895298127611063200, -0.895320399865199510, +-0.895342669881034610, -0.895364937658513220, -0.895387203197579360, -0.895409466498177430, -0.895431727560251910, -0.895453986383746960, -0.895476242968607280, -0.895498497314776820, +-0.895520749422200280, -0.895542999290821710, -0.895565246920585700, -0.895587492311436420, -0.895609735463318570, -0.895631976376176310, -0.895654215049954240, -0.895676451484596510, +-0.895698685680047850, -0.895720917636252280, -0.895743147353154410, -0.895765374830698620, -0.895787600068829400, -0.895809823067491240, -0.895832043826628730, -0.895854262346185810, +-0.895876478626107530, -0.895898692666337810, -0.895920904466821380, -0.895943114027502710, -0.895965321348326180, -0.895987526429236620, -0.896009729270178080, -0.896031929871095370, +-0.896054128231932530, -0.896076324352634510, -0.896098518233145680, -0.896120709873410410, -0.896142899273373540, -0.896165086432979540, -0.896187271352172580, -0.896209454030897690, +-0.896231634469099040, -0.896253812666721220, -0.896275988623708830, -0.896298162340006590, -0.896320333815558870, -0.896342503050310490, -0.896364670044205840, -0.896386834797189390, +-0.896408997309205870, -0.896431157580199760, -0.896453315610115880, -0.896475471398898600, -0.896497624946492880, -0.896519776252842850, -0.896541925317893670, -0.896564072141589400, +-0.896586216723875060, -0.896608359064695050, -0.896630499163994180, -0.896652637021717050, -0.896674772637808590, -0.896696906012212970, -0.896719037144875330, -0.896741166035739830, +-0.896763292684751410, -0.896785417091854780, -0.896807539256994630, -0.896829659180115810, -0.896851776861162690, -0.896873892300080190, -0.896896005496812920, -0.896918116451305590, +-0.896940225163502910, -0.896962331633349710, -0.896984435860790690, -0.897006537845770780, -0.897028637588234260, -0.897050735088126380, -0.897072830345391540, -0.897094923359974540, +-0.897117014131820320, -0.897139102660873490, -0.897161188947078970, -0.897183272990381590, -0.897205354790725830, -0.897227434348056960, -0.897249511662319250, -0.897271586733457750, +-0.897293659561417380, -0.897315730146142740, -0.897337798487579000, -0.897359864585670630, -0.897381928440362690, -0.897403990051599880, -0.897426049419327020, -0.897448106543488940, +-0.897470161424030800, -0.897492214060897080, -0.897514264454033040, -0.897536312603383290, -0.897558358508892760, -0.897580402170506280, -0.897602443588168760, -0.897624482761825050, +-0.897646519691420290, -0.897668554376899300, -0.897690586818206790, -0.897712617015287930, -0.897734644968087410, -0.897756670676550290, -0.897778694140621390, -0.897800715360245860, +-0.897822734335368520, -0.897844751065934530, -0.897866765551888490, -0.897888777793175660, -0.897910787789740760, -0.897932795541528830, -0.897954801048485020, -0.897976804310554160, +-0.897998805327681170, -0.898020804099811550, -0.898042800626889570, -0.898064794908860820, -0.898086786945670010, -0.898108776737262080, -0.898130764283582290, -0.898152749584575580, +-0.898174732640187210, -0.898196713450361780, -0.898218692015044670, -0.898240668334180810, -0.898262642407715140, -0.898284614235592920, -0.898306583817759190, -0.898328551154158990, +-0.898350516244737610, -0.898372479089439730, -0.898394439688210870, -0.898416398040995710, -0.898438354147739540, -0.898460308008387500, -0.898482259622884640, -0.898504208991176220, +-0.898526156113207410, -0.898548100988923240, -0.898570043618268530, -0.898591984001188780, -0.898613922137629140, -0.898635858027534650, -0.898657791670850470, -0.898679723067521970, +-0.898701652217494100, -0.898723579120712210, -0.898745503777121150, -0.898767426186666380, -0.898789346349293080, -0.898811264264946400, -0.898833179933571480, -0.898855093355113930, +-0.898877004529518350, -0.898898913456730450, -0.898920820136695160, -0.898942724569357750, -0.898964626754663600, -0.898986526692557740, -0.899008424382985890, -0.899030319825892770, +-0.899052213021223960, -0.899074103968924510, -0.899095992668939800, -0.899117879121215100, -0.899139763325695670, -0.899161645282326890, -0.899183524991054140, -0.899205402451822340, +-0.899227277664577330, -0.899249150629263800, -0.899271021345827480, -0.899292889814213630, -0.899314756034367500, -0.899336620006234600, -0.899358481729760180, -0.899380341204889520, +-0.899402198431568100, -0.899424053409740960, -0.899445906139353820, -0.899467756620351830, -0.899489604852680370, -0.899511450836285250, -0.899533294571111200, -0.899555136057104130, +-0.899576975294208990, -0.899598812282371480, -0.899620647021536990, -0.899642479511650770, -0.899664309752658430, -0.899686137744505450, -0.899707963487136890, -0.899729786980498770, +-0.899751608224535810, -0.899773427219193960, -0.899795243964418570, -0.899817058460154920, -0.899838870706348710, -0.899860680702945560, -0.899882488449890610, -0.899904293947129340, +-0.899926097194607260, -0.899947898192270060, -0.899969696940063010, -0.899991493437931720, -0.900013287685821890, -0.900035079683678680, -0.900056869431447910, -0.900078656929074850, +-0.900100442176505090, -0.900122225173684230, -0.900144005920557880, -0.900165784417071400, -0.900187560663170740, -0.900209334658800930, -0.900231106403908020, -0.900252875898437170, +-0.900274643142334070, -0.900296408135544350, -0.900318170878013690, -0.900339931369687710, -0.900361689610511770, -0.900383445600431820, -0.900405199339393000, -0.900426950827341250, +-0.900448700064222060, -0.900470447049981140, -0.900492191784564080, -0.900513934267916820, -0.900535674499984400, -0.900557412480713080, -0.900579148210048030, -0.900600881687935060, +-0.900622612914320000, -0.900644341889148330, -0.900666068612365760, -0.900687793083918220, -0.900709515303751100, -0.900731235271810320, -0.900752952988041260, -0.900774668452389850, +-0.900796381664801690, -0.900818092625222610, -0.900839801333598530, -0.900861507789874730, -0.900883211993997350, -0.900904913945911770, -0.900926613645563920, -0.900948311092899520, +-0.900970006287864280, -0.900991699230404120, -0.901013389920464870, -0.901035078357991900, -0.901056764542931490, -0.901078448475229000, -0.901100130154830370, -0.901121809581681310, +-0.901143486755727860, -0.901165161676915630, -0.901186834345190760, -0.901208504760498740, -0.901230172922785180, -0.901251838831996330, -0.901273502488077800, -0.901295163890975640, +-0.901316823040635430, -0.901338479937003450, -0.901360134580024950, -0.901381786969646440, -0.901403437105813170, -0.901425084988471400, -0.901446730617566860, -0.901468373993045470, +-0.901490015114853270, -0.901511653982936090, -0.901533290597239630, -0.901554924957710170, -0.901576557064293180, -0.901598186916934720, -0.901619814515580930, -0.901641439860177530, +-0.901663062950670780, -0.901684683787006060, -0.901706302369129960, -0.901727918696987760, -0.901749532770525940, -0.901771144589690210, -0.901792754154426610, -0.901814361464681080, +-0.901835966520399880, -0.901857569321528610, -0.901879169868013530, -0.901900768159800360, -0.901922364196835360, -0.901943957979064350, -0.901965549506433480, -0.901987138778888700, +-0.902008725796376360, -0.902030310558841970, -0.902051893066231900, -0.902073473318491970, -0.902095051315568440, -0.902116627057407250, -0.902138200543954440, -0.902159771775156270, +-0.902181340750958570, -0.902202907471307710, -0.902224471936149300, -0.902246034145429810, -0.902267594099095180, -0.902289151797091570, -0.902310707239365130, -0.902332260425862120, +-0.902353811356528260, -0.902375360031310030, -0.902396906450153140, -0.902418450613004080, -0.902439992519808890, -0.902461532170513720, -0.902483069565064630, -0.902504604703408210, +-0.902526137585490160, -0.902547668211256650, -0.902569196580653930, -0.902590722693628170, -0.902612246550125620, -0.902633768150092550, -0.902655287493475230, -0.902676804580219370, +-0.902698319410271790, -0.902719831983578190, -0.902741342300085070, -0.902762850359738580, -0.902784356162484980, -0.902805859708270430, -0.902827360997041420, -0.902848860028743870, +-0.902870356803324280, -0.902891851320728690, -0.902913343580903470, -0.902934833583794780, -0.902956321329349110, -0.902977806817512830, -0.902999290048231870, -0.903020771021452840, +-0.903042249737121660, -0.903063726195184820, -0.903085200395588710, -0.903106672338279680, -0.903128142023203910, -0.903149609450307870, -0.903171074619537720, -0.903192537530840060, +-0.903213998184160930, -0.903235456579446700, -0.903256912716643880, -0.903278366595698820, -0.903299818216557800, -0.903321267579167420, -0.903342714683473710, -0.903364159529423390, +-0.903385602116962390, -0.903407042446037530, -0.903428480516594970, -0.903449916328581290, -0.903471349881942890, -0.903492781176626010, -0.903514210212577380, -0.903535636989742930, +-0.903557061508069470, -0.903578483767503380, -0.903599903767991040, -0.903621321509478940, -0.903642736991913780, -0.903664150215241600, -0.903685561179409120, -0.903706969884362610, +-0.903728376330048650, -0.903749780516413860, -0.903771182443404490, -0.903792582110967360, -0.903813979519048630, -0.903835374667595230, -0.903856767556553090, -0.903878158185869030, +-0.903899546555489540, -0.903920932665361330, -0.903942316515430670, -0.903963698105644480, -0.903985077435948800, -0.904006454506290580, -0.904027829316616070, -0.904049201866871990, +-0.904070572157004930, -0.904091940186961480, -0.904113305956688150, -0.904134669466131750, -0.904156030715238420, -0.904177389703955230, -0.904198746432228420, -0.904220100900004710, +-0.904241453107230700, -0.904262803053853090, -0.904284150739818720, -0.904305496165073720, -0.904326839329565260, -0.904348180233239480, -0.904369518876043220, -0.904390855257923070, +-0.904412189378825950, -0.904433521238698250, -0.904454850837487000, -0.904476178175138370, -0.904497503251599500, -0.904518826066816770, -0.904540146620736900, -0.904561464913306580, +-0.904582780944472750, -0.904604094714181910, -0.904625406222380970, -0.904646715469016430, -0.904668022454035210, -0.904689327177383820, -0.904710629639009060, -0.904731929838857640, +-0.904753227776876500, -0.904774523453012570, -0.904795816867212000, -0.904817108019422060, -0.904838396909589230, -0.904859683537660440, -0.904880967903582410, -0.904902250007301960, +-0.904923529848765780, -0.904944807427921160, -0.904966082744714130, -0.904987355799092170, -0.905008626591001670, -0.905029895120389670, -0.905051161387202760, -0.905072425391388100, +-0.905093687132892400, -0.905114946611662470, -0.905136203827645260, -0.905157458780787350, -0.905178711471035790, -0.905199961898337510, -0.905221210062639340, -0.905242455963888080, +-0.905263699602030900, -0.905284940977014290, -0.905306180088785490, -0.905327416937291020, -0.905348651522478120, -0.905369883844293510, -0.905391113902684120, -0.905412341697597100, +-0.905433567228979270, -0.905454790496777460, -0.905476011500938820, -0.905497230241409930, -0.905518446718137970, -0.905539660931069970, -0.905560872880152750, -0.905582082565333460, +-0.905603289986558920, -0.905624495143776300, -0.905645698036932180, -0.905666898665973940, -0.905688097030848400, -0.905709293131502500, -0.905730486967883500, -0.905751678539938430, +-0.905772867847614020, -0.905794054890857630, -0.905815239669615860, -0.905836422183836090, -0.905857602433465140, -0.905878780418450270, -0.905899956138738420, -0.905921129594276840, +-0.905942300785012480, -0.905963469710892140, -0.905984636371863110, -0.906005800767872520, -0.906026962898867420, -0.906048122764794960, -0.906069280365602300, -0.906090435701236370, +-0.906111588771644440, -0.906132739576773430, -0.906153888116570490, -0.906175034390982900, -0.906196178399957700, -0.906217320143442030, -0.906238459621383160, -0.906259596833728140, +-0.906280731780424230, -0.906301864461418250, -0.906322994876657680, -0.906344123026089580, -0.906365248909661190, -0.906386372527319910, -0.906407493879012430, -0.906428612964686460, +-0.906449729784288840, -0.906470844337766810, -0.906491956625067650, -0.906513066646138620, -0.906534174400926870, -0.906555279889380010, -0.906576383111444620, -0.906597484067068530, +-0.906618582756198550, -0.906639679178782080, -0.906660773334766470, -0.906681865224098880, -0.906702954846726580, -0.906724042202597170, -0.906745127291657460, -0.906766210113855050, +-0.906787290669136990, -0.906808368957450760, -0.906829444978743520, -0.906850518732962630, -0.906871590220055700, -0.906892659439969550, -0.906913726392652000, -0.906934791078049970, +-0.906955853496110850, -0.906976913646782230, -0.906997971530011270, -0.907019027145745340, -0.907040080493932030, -0.907061131574518400, -0.907082180387452140, -0.907103226932680200, +-0.907124271210150160, -0.907145313219809510, -0.907166352961605530, -0.907187390435485690, -0.907208425641397480, -0.907229458579288270, -0.907250489249105230, -0.907271517650796060, +-0.907292543784308010, -0.907313567649588590, -0.907334589246585280, -0.907355608575245550, -0.907376625635516800, -0.907397640427346610, -0.907418652950682140, -0.907439663205470980, +-0.907460671191660740, -0.907481676909198790, -0.907502680358032610, -0.907523681538109920, -0.907544680449377860, -0.907565677091784260, -0.907586671465276380, -0.907607663569801710, +-0.907628653405307960, -0.907649640971742610, -0.907670626269053260, -0.907691609297187170, -0.907712590056092280, -0.907733568545715630, -0.907754544766005140, -0.907775518716908310, +-0.907796490398372620, -0.907817459810345780, -0.907838426952775390, -0.907859391825608820, -0.907880354428793890, -0.907901314762277980, -0.907922272826008680, -0.907943228619933820, +-0.907964182144000760, -0.907985133398157340, -0.908006082382351250, -0.908027029096529770, -0.908047973540640820, -0.908068915714631890, -0.908089855618450570, -0.908110793252044580, +-0.908131728615361730, -0.908152661708349630, -0.908173592530955750, -0.908194521083128150, -0.908215447364813970, -0.908236371375961140, -0.908257293116517480, -0.908278212586430490, +-0.908299129785647970, -0.908320044714117870, -0.908340957371787440, -0.908361867758604840, -0.908382775874517430, -0.908403681719472940, -0.908424585293419410, -0.908445486596304310, +-0.908466385628075470, -0.908487282388680930, -0.908508176878068170, -0.908529069096184690, -0.908549959042978640, -0.908570846718397610, -0.908591732122389530, -0.908612615254902110, +-0.908633496115883400, -0.908654374705280650, -0.908675251023042250, -0.908696125069115460, -0.908716996843448420, -0.908737866345988850, -0.908758733576684570, -0.908779598535483510, +-0.908800461222333600, -0.908821321637182430, -0.908842179779978050, -0.908863035650668060, -0.908883889249200600, -0.908904740575523280, -0.908925589629584140, -0.908946436411331220, +-0.908967280920712000, -0.908988123157674850, -0.909008963122167170, -0.909029800814136980, -0.909050636233532440, -0.909071469380301140, -0.909092300254391360, -0.909113128855750910, +-0.909133955184327490, -0.909154779240069270, -0.909175601022924050, -0.909196420532839780, -0.909217237769764370, -0.909238052733646000, -0.909258865424432350, -0.909279675842071810, +-0.909300483986511980, -0.909321289857700890, -0.909342093455586700, -0.909362894780117110, -0.909383693831240400, -0.909404490608904270, -0.909425285113057090, -0.909446077343646580, +-0.909466867300621100, -0.909487654983928140, -0.909508440393516300, -0.909529223529333190, -0.909550004391327160, -0.909570782979446050, -0.909591559293638000, -0.909612333333850940, +-0.909633105100033260, -0.909653874592132650, -0.909674641810097380, -0.909695406753875500, -0.909716169423415270, -0.909736929818664500, -0.909757687939571350, -0.909778443786084080, +-0.909799197358150510, -0.909819948655719140, -0.909840697678737760, -0.909861444427154780, -0.909882188900918100, -0.909902931099976000, -0.909923671024276510, -0.909944408673767910, +-0.909965144048398230, -0.909985877148115740, -0.910006607972868480, -0.910027336522604810, -0.910048062797272680, -0.910068786796820460, -0.910089508521196300, -0.910110227970348350, +-0.910130945144224770, -0.910151660042773920, -0.910172372665943970, -0.910193083013682850, -0.910213791085939250, -0.910234496882661000, -0.910255200403796700, -0.910275901649294280, +-0.910296600619102110, -0.910317297313168460, -0.910337991731441590, -0.910358683873869650, -0.910379373740401120, -0.910400061330984060, -0.910420746645566940, -0.910441429684097800, +-0.910462110446525250, -0.910482788932797330, -0.910503465142862510, -0.910524139076668960, -0.910544810734165160, -0.910565480115299140, -0.910586147220019630, -0.910606812048274760, +-0.910627474600012700, -0.910648134875182040, -0.910668792873730930, -0.910689448595608080, -0.910710102040761300, -0.910730753209139540, -0.910751402100690720, -0.910772048715363550, +-0.910792693053106060, -0.910813335113866970, -0.910833974897594540, -0.910854612404237150, -0.910875247633743170, -0.910895880586061190, -0.910916511261139370, -0.910937139658926420, +-0.910957765779370490, -0.910978389622420280, -0.910999011188024070, -0.911019630476130220, -0.911040247486687440, -0.911060862219643890, -0.911081474674948380, -0.911102084852548950, +-0.911122692752394550, -0.911143298374433200, -0.911163901718613720, -0.911184502784884390, -0.911205101573194010, -0.911225698083490630, -0.911246292315723180, -0.911266884269839930, +-0.911287473945789460, -0.911308061343520270, -0.911328646462981060, -0.911349229304120100, -0.911369809866886200, -0.911390388151227640, -0.911410964157093220, -0.911431537884431320, +-0.911452109333190540, -0.911472678503319590, -0.911493245394766840, -0.911513810007481110, -0.911534372341410770, -0.911554932396504540, -0.911575490172710890, -0.911596045669978540, +-0.911616598888256080, -0.911637149827492220, -0.911657698487635340, -0.911678244868634360, -0.911698788970437660, -0.911719330792994050, -0.911739870336252030, -0.911760407600160530, +-0.911780942584667800, -0.911801475289722770, -0.911822005715274160, -0.911842533861270450, -0.911863059727660460, -0.911883583314392680, -0.911904104621416020, -0.911924623648679100, +-0.911945140396130730, -0.911965654863719280, -0.911986167051393900, -0.912006676959102980, -0.912027184586795440, -0.912047689934419870, -0.912068193001925210, -0.912088693789259830, +-0.912109192296372990, -0.912129688523212970, -0.912150182469728790, -0.912170674135869160, -0.912191163521582920, -0.912211650626818640, -0.912232135451525370, -0.912252617995651720, +-0.912273098259146380, -0.912293576241958500, -0.912314051944036470, -0.912334525365329550, -0.912354996505786110, -0.912375465365355300, -0.912395931943985720, -0.912416396241626520, +-0.912436858258226070, -0.912457317993733640, -0.912477775448097830, -0.912498230621267670, -0.912518683513191880, -0.912539134123819370, -0.912559582453099090, -0.912580028500979750, +-0.912600472267410370, -0.912620913752339890, -0.912641352955717020, -0.912661789877490910, -0.912682224517610270, -0.912702656876024030, -0.912723086952681120, -0.912743514747530570, +-0.912763940260521210, -0.912784363491601860, -0.912804784440721770, -0.912825203107829660, -0.912845619492874570, -0.912866033595805430, -0.912886445416571270, -0.912906854955120810, +-0.912927262211403410, -0.912947667185367680, -0.912968069876962880, -0.912988470286137940, -0.913008868412841790, -0.913029264257023470, -0.913049657818632010, -0.913070049097616350, +-0.913090438093925540, -0.913110824807508830, -0.913131209238314810, -0.913151591386292870, -0.913171971251391930, -0.913192348833561150, -0.913212724132749450, -0.913233097148905880, +-0.913253467881979590, -0.913273836331919720, -0.913294202498675210, -0.913314566382195210, -0.913334927982428660, -0.913355287299324910, -0.913375644332832910, -0.913395999082901920, +-0.913416351549480750, -0.913436701732518790, -0.913457049631965060, -0.913477395247768720, -0.913497738579878930, -0.913518079628244720, -0.913538418392815350, -0.913558754873539990, +-0.913579089070367670, -0.913599420983247650, -0.913619750612129080, -0.913640077956961010, -0.913660403017692910, -0.913680725794273730, -0.913701046286652830, -0.913721364494779140, +-0.913741680418602260, -0.913761994058071010, -0.913782305413134770, -0.913802614483742780, -0.913822921269844430, -0.913843225771388550, -0.913863527988324710, -0.913883827920602080, +-0.913904125568169800, -0.913924420930977250, -0.913944714008973700, -0.913965004802108290, -0.913985293310330400, -0.914005579533589300, -0.914025863471834120, -0.914046145125014480, +-0.914066424493079290, -0.914086701575978160, -0.914106976373660230, -0.914127248886074880, -0.914147519113171380, -0.914167787054899090, -0.914188052711207400, -0.914208316082045560, +-0.914228577167362830, -0.914248835967108710, -0.914269092481232450, -0.914289346709683650, -0.914309598652411350, -0.914329848309365030, -0.914350095680494190, -0.914370340765747970, +-0.914390583565075970, -0.914410824078427440, -0.914431062305752000, -0.914451298246998780, -0.914471531902117380, -0.914491763271057080, -0.914511992353767460, -0.914532219150197780, +-0.914552443660297640, -0.914572665884016310, -0.914592885821303380, -0.914613103472108220, -0.914633318836380330, -0.914653531914069060, -0.914673742705124030, -0.914693951209494700, +-0.914714157427130360, -0.914734361357980700, -0.914754563001995090, -0.914774762359123140, -0.914794959429314210, -0.914815154212517910, -0.914835346708683720, -0.914855536917761230, +-0.914875724839699700, -0.914895910474449070, -0.914916093821958600, -0.914936274882177880, -0.914956453655056400, -0.914976630140543980, -0.914996804338589760, -0.915016976249143690, +-0.915037145872155120, -0.915057313207573770, -0.915077478255349020, -0.915097641015430670, -0.915117801487768220, -0.915137959672311150, -0.915158115569009280, -0.915178269177812090, +-0.915198420498669170, -0.915218569531530250, -0.915238716276345010, -0.915258860733062840, -0.915279002901633550, -0.915299142782006750, -0.915319280374132130, -0.915339415677959290, +-0.915359548693437940, -0.915379679420517570, -0.915399807859148210, -0.915419934009279230, -0.915440057870860470, -0.915460179443841390, -0.915480298728172050, -0.915500415723801920, +-0.915520530430680710, -0.915540642848758250, -0.915560752977984120, -0.915580860818308140, -0.915600966369680020, -0.915621069632049480, -0.915641170605366210, -0.915661269289580030, +-0.915681365684640650, -0.915701459790498000, -0.915721551607101560, -0.915741641134401260, -0.915761728372346820, -0.915781813320888150, -0.915801895979974970, -0.915821976349556980, +-0.915842054429584000, -0.915862130220006070, -0.915882203720772560, -0.915902274931833740, -0.915922343853139200, -0.915942410484638760, -0.915962474826282350, -0.915982536878019670, +-0.916002596639800770, -0.916022654111575240, -0.916042709293293120, -0.916062762184904230, -0.916082812786358500, -0.916102861097605640, -0.916122907118595680, -0.916142950849278440, +-0.916162992289603850, -0.916183031439521730, -0.916203068298982130, -0.916223102867934740, -0.916243135146329600, -0.916263165134116650, -0.916283192831245820, -0.916303218237666920, +-0.916323241353330100, -0.916343262178185180, -0.916363280712181980, -0.916383296955270770, -0.916403310907401130, -0.916423322568523320, -0.916443331938587070, -0.916463339017542620, +-0.916483343805339800, -0.916503346301928650, -0.916523346507258970, -0.916543344421281160, -0.916563340043944800, -0.916583333375200260, -0.916603324414997140, -0.916623313163285940, +-0.916643299620016340, -0.916663283785138620, -0.916683265658602480, -0.916703245240358400, -0.916723222530356100, -0.916743197528545720, -0.916763170234877410, -0.916783140649301110, +-0.916803108771767070, -0.916823074602225120, -0.916843038140625620, -0.916862999386918290, -0.916882958341053710, -0.916902915002981600, -0.916922869372652330, -0.916942821450015710, +-0.916962771235022120, -0.916982718727621600, -0.917002663927764420, -0.917022606835400380, -0.917042547450479970, -0.917062485772953020, -0.917082421802770000, -0.917102355539880840, +-0.917122286984235920, -0.917142216135785170, -0.917162142994478960, -0.917182067560267320, -0.917201989833100530, -0.917221909812928730, -0.917241827499702180, -0.917261742893371150, +-0.917281655993885670, -0.917301566801196120, -0.917321475315252540, -0.917341381536005310, -0.917361285463404670, -0.917381187097400800, -0.917401086437943940, -0.917420983484984460, +-0.917440878238472310, -0.917460770698358190, -0.917480660864592010, -0.917500548737124280, -0.917520434315905130, -0.917540317600884950, -0.917560198592013880, -0.917580077289242290, +-0.917599953692520680, -0.917619827801798960, -0.917639699617027850, -0.917659569138157380, -0.917679436365138050, -0.917699301297920100, -0.917719163936453920, -0.917739024280689760, +-0.917758882330578230, -0.917778738086069250, -0.917798591547113630, -0.917818442713661420, -0.917838291585663100, -0.917858138163069050, -0.917877982445829740, -0.917897824433895340, +-0.917917664127216540, -0.917937501525743490, -0.917957336629426690, -0.917977169438216610, -0.917996999952063520, -0.918016828170918010, -0.918036654094730230, -0.918056477723451000, +-0.918076299057030590, -0.918096118095419360, -0.918115934838567790, -0.918135749286426490, -0.918155561438945830, -0.918175371296076180, -0.918195178857768140, -0.918214984123972180, +-0.918234787094638680, -0.918254587769718360, -0.918274386149161350, -0.918294182232918590, -0.918313976020940230, -0.918333767513177080, -0.918353556709579410, -0.918373343610097810, +-0.918393128214682890, -0.918412910523285220, -0.918432690535855190, -0.918452468252343390, -0.918472243672700530, -0.918492016796876980, -0.918511787624823440, -0.918531556156490400, +-0.918551322391828570, -0.918571086330788320, -0.918590847973320360, -0.918610607319375270, -0.918630364368903770, -0.918650119121856230, -0.918669871578183470, -0.918689621737835970, +-0.918709369600764550, -0.918729115166919690, -0.918748858436251870, -0.918768599408712030, -0.918788338084250640, -0.918808074462818420, -0.918827808544366080, -0.918847540328844190, +-0.918867269816203370, -0.918886997006394420, -0.918906721899367950, -0.918926444495074770, -0.918946164793465360, -0.918965882794490650, -0.918985598498101130, -0.919005311904247720, +-0.919025023012880920, -0.919044731823951740, -0.919064438337410470, -0.919084142553208360, -0.919103844471295670, -0.919123544091623560, -0.919143241414142500, -0.919162936438803310, +-0.919182629165556930, -0.919202319594353830, -0.919222007725144950, -0.919241693557880990, -0.919261377092512990, -0.919281058328991320, -0.919300737267267240, -0.919320413907291130, +-0.919340088249014030, -0.919359760292386750, -0.919379430037360110, -0.919399097483884710, -0.919418762631911800, -0.919438425481391760, -0.919458086032275860, -0.919477744284514560, +-0.919497400238059150, -0.919517053892860090, -0.919536705248868320, -0.919556354306034880, -0.919576001064310480, -0.919595645523646250, -0.919615287683992700, -0.919634927545301070, +-0.919654565107521970, -0.919674200370606650, -0.919693833334505720, -0.919713463999170200, -0.919733092364551030, -0.919752718430599250, -0.919772342197265450, -0.919791963664501000, +-0.919811582832256500, -0.919831199700483100, -0.919850814269131730, -0.919870426538153320, -0.919890036507498790, -0.919909644177119180, -0.919929249546965530, -0.919948852616988670, +-0.919968453387139840, -0.919988051857369650, -0.920007648027629470, -0.920027241897870110, -0.920046833468042720, -0.920066422738098130, -0.920086009707987600, -0.920105594377661930, +-0.920125176747072390, -0.920144756816169810, -0.920164334584905430, -0.920183910053230190, -0.920203483221095130, -0.920223054088451400, -0.920242622655250030, -0.920262188921442070, +-0.920281752886978670, -0.920301314551810970, -0.920320873915889790, -0.920340430979166620, -0.920359985741592280, -0.920379538203118020, -0.920399088363694770, -0.920418636223274020, +-0.920438181781806470, -0.920457725039243610, -0.920477265995536360, -0.920496804650635990, -0.920516341004493530, -0.920535875057060360, -0.920555406808287400, -0.920574936258126030, +-0.920594463406527170, -0.920613988253442320, -0.920633510798822270, -0.920653031042618640, -0.920672548984782350, -0.920692064625264760, -0.920711577964016930, -0.920731089000990210, +-0.920750597736135770, -0.920770104169404750, -0.920789608300748520, -0.920809110130118240, -0.920828609657465270, -0.920848106882740660, -0.920867601805895890, -0.920887094426882100, +-0.920906584745650570, -0.920926072762152550, -0.920945558476339410, -0.920965041888162190, -0.920984522997572610, -0.921004001804521580, -0.921023478308960590, -0.921042952510840780, +-0.921062424410113770, -0.921081894006730570, -0.921101361300642800, -0.921120826291801590, -0.921140288980158100, -0.921159749365664140, -0.921179207448270640, -0.921198663227929200, +-0.921218116704591080, -0.921237567878207760, -0.921257016748730400, -0.921276463316110570, -0.921295907580299440, -0.921315349541248720, -0.921334789198909540, -0.921354226553233400, +-0.921373661604171670, -0.921393094351675820, -0.921412524795697240, -0.921431952936187290, -0.921451378773097460, -0.921470802306379340, -0.921490223535984090, -0.921509642461863290, +-0.921529059083968430, -0.921548473402250880, -0.921567885416662120, -0.921587295127153650, -0.921606702533677050, -0.921626107636183580, -0.921645510434624840, -0.921664910928952310, +-0.921684309119117580, -0.921703705005072040, -0.921723098586767260, -0.921742489864154750, -0.921761878837185970, -0.921781265505812520, -0.921800649869985890, -0.921820031929657670, +-0.921839411684779340, -0.921858789135302390, -0.921878164281178640, -0.921897537122359450, -0.921916907658796300, -0.921936275890441030, -0.921955641817244990, -0.921975005439159780, +-0.921994366756137110, -0.922013725768128570, -0.922033082475085640, -0.922052436876960150, -0.922071788973703340, -0.922091138765267270, -0.922110486251603190, -0.922129831432663030, +-0.922149174308398270, -0.922168514878760500, -0.922187853143701440, -0.922207189103172900, -0.922226522757126240, -0.922245854105513300, -0.922265183148285760, -0.922284509885395230, +-0.922303834316793520, -0.922323156442432010, -0.922342476262262840, -0.922361793776237280, -0.922381108984307360, -0.922400421886424680, -0.922419732482540940, -0.922439040772607740, +-0.922458346756577120, -0.922477650434400550, -0.922496951806029860, -0.922516250871416750, -0.922535547630513040, -0.922554842083270430, -0.922574134229640850, -0.922593424069575780, +-0.922612711603027270, -0.922631996829946900, -0.922651279750286600, -0.922670560363998080, -0.922689838671033050, -0.922709114671343640, -0.922728388364881250, -0.922747659751598000, +-0.922766928831445510, -0.922786195604375800, -0.922805460070340480, -0.922824722229291570, -0.922843982081180900, -0.922863239625960290, -0.922882494863581430, -0.922901747793996470, +-0.922920998417157130, -0.922940246733015220, -0.922959492741522780, -0.922978736442631620, -0.922997977836293450, -0.923017216922460530, -0.923036453701084560, -0.923055688172117360, +-0.923074920335510970, -0.923094150191217210, -0.923113377739188220, -0.923132602979375720, -0.923151825911731730, -0.923171046536208070, -0.923190264852756900, -0.923209480861330030, +-0.923228694561879500, -0.923247905954357240, -0.923267115038715170, -0.923286321814905330, -0.923305526282879650, -0.923324728442590170, -0.923343928293988920, -0.923363125837027840, +-0.923382321071658960, -0.923401513997834100, -0.923420704615505630, -0.923439892924625470, -0.923459078925145450, -0.923478262617017710, -0.923497444000194400, -0.923516623074627450, +-0.923535799840268900, -0.923554974297070900, -0.923574146444985370, -0.923593316283964680, -0.923612483813960440, -0.923631649034925230, -0.923650811946810760, -0.923669972549569280, +-0.923689130843152850, -0.923708286827513710, -0.923727440502603690, -0.923746591868375160, -0.923765740924780140, -0.923784887671770800, -0.923804032109299180, -0.923823174237317520, +-0.923842314055777880, -0.923861451564632510, -0.923880586763833560, -0.923899719653332950, -0.923918850233083290, -0.923937978503036270, -0.923957104463144500, -0.923976228113359780, +-0.923995349453634710, -0.924014468483921100, -0.924033585204171340, -0.924052699614337670, -0.924071811714372250, -0.924090921504227230, -0.924110028983854970, -0.924129134153207630, +-0.924148237012237470, -0.924167337560896640, -0.924186435799137620, -0.924205531726912440, -0.924224625344173270, -0.924243716650872790, -0.924262805646962840, -0.924281892332395990, +-0.924300976707124300, -0.924320058771100240, -0.924339138524275960, -0.924358215966603950, -0.924377291098036350, -0.924396363918525530, -0.924415434428023760, -0.924434502626483410, +-0.924453568513856850, -0.924472632090096340, -0.924491693355154240, -0.924510752308982940, -0.924529808951534690, -0.924548863282762090, -0.924567915302617060, -0.924586965011052530, +-0.924606012408020430, -0.924625057493473350, -0.924644100267363540, -0.924663140729643510, -0.924682178880265710, -0.924701214719182430, -0.924720248246346130, -0.924739279461709080, +-0.924758308365223990, -0.924777334956843000, -0.924796359236518820, -0.924815381204203590, -0.924834400859850030, -0.924853418203410380, -0.924872433234837250, -0.924891445954083010, +-0.924910456361100140, -0.924929464455841120, -0.924948470238258440, -0.924967473708304680, -0.924986474865932110, -0.925005473711093540, -0.925024470243741010, -0.925043464463827570, +-0.925062456371305240, -0.925081445966126960, -0.925100433248244980, -0.925119418217611900, -0.925138400874180310, -0.925157381217902700, -0.925176359248731650, -0.925195334966619650, +-0.925214308371519300, -0.925233279463383300, -0.925252248242164010, -0.925271214707814150, -0.925290178860286190, -0.925309140699532850, -0.925328100225506600, -0.925347057438160260, +-0.925366012337446090, -0.925384964923317010, -0.925403915195725400, -0.925422863154624080, -0.925441808799965630, -0.925460752131702540, -0.925479693149787730, -0.925498631854173470, +-0.925517568244812790, -0.925536502321658180, -0.925555434084662340, -0.925574363533777870, -0.925593290668957460, -0.925612215490153820, -0.925631137997319780, -0.925650058190407690, +-0.925668976069370600, -0.925687891634160990, -0.925706804884731780, -0.925725715821035360, -0.925744624443024850, -0.925763530750652760, -0.925782434743871670, -0.925801336422634620, +-0.925820235786894210, -0.925839132836603240, -0.925858027571714310, -0.925876919992180470, -0.925895810097954190, -0.925914697888988500, -0.925933583365236010, -0.925952466526649640, +-0.925971347373181990, -0.925990225904786080, -0.926009102121414520, -0.926027976023020230, -0.926046847609556020, -0.926065716880974720, -0.926084583837229030, -0.926103448478271970, +-0.926122310804056270, -0.926141170814534730, -0.926160028509660390, -0.926178883889385850, -0.926197736953664250, -0.926216587702448080, -0.926235436135690700, -0.926254282253344500, +-0.926273126055362720, -0.926291967541698070, -0.926310806712303590, -0.926329643567131990, -0.926348478106136410, -0.926367310329269440, -0.926386140236484360, -0.926404967827733850, +-0.926423793102971070, -0.926442616062148620, -0.926461436705219740, -0.926480255032137160, -0.926499071042854120, -0.926517884737323330, -0.926536696115497720, -0.926555505177330430, +-0.926574311922774400, -0.926593116351782650, -0.926611918464307900, -0.926630718260303630, -0.926649515739722320, -0.926668310902517440, -0.926687103748641610, -0.926705894278048060, +-0.926724682490689840, -0.926743468386519890, -0.926762251965491220, -0.926781033227557010, -0.926799812172670050, -0.926818588800783720, -0.926837363111850830, -0.926856135105824650, +-0.926874904782658100, -0.926893672142304230, -0.926912437184716160, -0.926931199909846960, -0.926949960317649870, -0.926968718408077820, -0.926987474181084070, -0.927006227636621550, +-0.927024978774643520, -0.927043727595102900, -0.927062474097953060, -0.927081218283147050, -0.927099960150638000, -0.927118699700378970, -0.927137436932323310, -0.927156171846423960, +-0.927174904442634280, -0.927193634720907210, -0.927212362681196110, -0.927231088323454130, -0.927249811647634430, -0.927268532653690250, -0.927287251341574640, -0.927305967711240960, +-0.927324681762642270, -0.927343393495732030, -0.927362102910463170, -0.927380810006789180, -0.927399514784662980, -0.927418217244038170, -0.927436917384867780, -0.927455615207105070, +-0.927474310710703300, -0.927493003895615730, -0.927511694761795740, -0.927530383309196460, -0.927549069537771160, -0.927567753447473330, -0.927586435038256000, -0.927605114310072640, +-0.927623791262876530, -0.927642465896620920, -0.927661138211259060, -0.927679808206744450, -0.927698475883030340, -0.927717141240069880, -0.927735804277816770, -0.927754464996223940, +-0.927773123395245090, -0.927791779474833380, -0.927810433234942280, -0.927829084675525050, -0.927847733796535180, -0.927866380597925810, -0.927885025079650650, -0.927903667241662840, +-0.927922307083915990, -0.927940944606363230, -0.927959579808958160, -0.927978212691654150, -0.927996843254404570, -0.928015471497163010, -0.928034097419882630, -0.928052721022517010, +-0.928071342305019640, -0.928089961267343890, -0.928108577909443230, -0.928127192231271160, -0.928145804232781040, -0.928164413913926570, -0.928183021274660900, -0.928201626314937740, +-0.928220229034710460, -0.928238829433932770, -0.928257427512557800, -0.928276023270539370, -0.928294616707830870, -0.928313207824385870, -0.928331796620157750, -0.928350383095100320, +-0.928368967249166730, -0.928387549082310800, -0.928406128594486120, -0.928424705785645950, -0.928443280655744110, -0.928461853204733960, -0.928480423432569310, -0.928498991339203440, +-0.928517556924590260, -0.928536120188683030, -0.928554681131435690, -0.928573239752801480, -0.928591796052734230, -0.928610350031187530, -0.928628901688114850, -0.928647451023470020, +-0.928665998037206510, -0.928684542729278030, -0.928703085099638170, -0.928721625148240640, -0.928740162875039020, -0.928758698279987030, -0.928777231363038250, -0.928795762124146500, +-0.928814290563265140, -0.928832816680348230, -0.928851340475349120, -0.928869861948221850, -0.928888381098919800, -0.928906897927396780, -0.928925412433606600, -0.928943924617502860, +-0.928962434479039260, -0.928980942018169610, -0.928999447234847620, -0.929017950129026990, -0.929036450700661430, -0.929054948949704860, -0.929073444876110880, -0.929091938479833290, +-0.929110429760825810, -0.929128918719042350, -0.929147405354436520, -0.929165889666962120, -0.929184371656573190, -0.929202851323223110, -0.929221328666866020, -0.929239803687455620, +-0.929258276384945630, -0.929276746759289950, -0.929295214810442530, -0.929313680538356950, -0.929332143942987240, -0.929350605024287120, -0.929369063782210510, -0.929387520216711230, +-0.929405974327743190, -0.929424426115260100, -0.929442875579216120, -0.929461322719564830, -0.929479767536260270, -0.929498210029256370, -0.929516650198506820, -0.929535088043965670, +-0.929553523565586850, -0.929571956763324270, -0.929590387637131640, -0.929608816186963120, -0.929627242412772500, -0.929645666314513950, -0.929664087892141060, -0.929682507145608070, +-0.929700924074868710, -0.929719338679877110, -0.929737750960587080, -0.929756160916952790, -0.929774568548928040, -0.929792973856466860, -0.929811376839523200, -0.929829777498051180, +-0.929848175832004630, -0.929866571841337810, -0.929884965526004410, -0.929903356885958600, -0.929921745921154510, -0.929940132631545960, -0.929958517017087090, -0.929976899077731960, +-0.929995278813434580, -0.930013656224148890, -0.930032031309829250, -0.930050404070429380, -0.930068774505903640, -0.930087142616205840, -0.930105508401290250, -0.930123871861110780, +-0.930142232995621710, -0.930160591804777060, -0.930178948288530980, -0.930197302446837400, -0.930215654279650690, -0.930234003786924890, -0.930252350968613920, -0.930270695824672260, +-0.930289038355053720, -0.930307378559712570, -0.930325716438602960, -0.930344051991679240, -0.930362385218895140, -0.930380716120205340, -0.930399044695563560, -0.930417370944924270, +-0.930435694868241400, -0.930454016465469440, -0.930472335736562410, -0.930490652681474570, -0.930508967300159970, -0.930527279592573090, -0.930545589558667950, -0.930563897198398830, +-0.930582202511719970, -0.930600505498585640, -0.930618806158950100, -0.930637104492767490, -0.930655400499992070, -0.930673694180578100, -0.930691985534480070, -0.930710274561651900, +-0.930728561262048170, -0.930746845635622930, -0.930765127682330770, -0.930783407402125620, -0.930801684794961950, -0.930819959860794130, -0.930838232599576430, -0.930856503011263100, +-0.930874771095808520, -0.930893036853166930, -0.930911300283292940, -0.930929561386140580, -0.930947820161664330, -0.930966076609818450, -0.930984330730557530, -0.931002582523835720, +-0.931020831989607500, -0.931039079127827130, -0.931057323938449090, -0.931075566421427750, -0.931093806576717480, -0.931112044404272640, -0.931130279904047730, -0.931148513075997220, +-0.931166743920075260, -0.931184972436236550, -0.931203198624435350, -0.931221422484626250, -0.931239644016763510, -0.931257863220801730, -0.931276080096695160, -0.931294294644398500, +-0.931312506863866020, -0.931330716755052410, -0.931348924317911940, -0.931367129552399090, -0.931385332458468550, -0.931403533036074590, -0.931421731285171810, -0.931439927205714670, +-0.931458120797657770, -0.931476312060955490, -0.931494500995562520, -0.931512687601433240, -0.931530871878522350, -0.931549053826784100, -0.931567233446173320, -0.931585410736644470, +-0.931603585698152050, -0.931621758330650640, -0.931639928634094950, -0.931658096608439350, -0.931676262253638530, -0.931694425569646990, -0.931712586556419530, -0.931730745213910530, +-0.931748901542074680, -0.931767055540866580, -0.931785207210240830, -0.931803356550152010, -0.931821503560554820, -0.931839648241403970, -0.931857790592653830, -0.931875930614259330, +-0.931894068306174940, -0.931912203668355480, -0.931930336700755420, -0.931948467403329590, -0.931966595776032580, -0.931984721818819080, -0.932002845531643700, -0.932020966914461240, +-0.932039085967226400, -0.932057202689893890, -0.932075317082418310, -0.932093429144754350, -0.932111538876856940, -0.932129646278680670, -0.932147751350180240, -0.932165854091310480, +-0.932183954502026070, -0.932202052582281730, -0.932220148332032370, -0.932238241751232490, -0.932256332839837110, -0.932274421597800830, -0.932292508025078570, -0.932310592121624930, +-0.932328673887394930, -0.932346753322343180, -0.932364830426424600, -0.932382905199593880, -0.932400977641805960, -0.932419047753015540, -0.932437115533177540, -0.932455180982246780, +-0.932473244100178070, -0.932491304886926220, -0.932509363342446050, -0.932527419466692600, -0.932545473259620450, -0.932563524721184640, -0.932581573851340110, -0.932599620650041650, +-0.932617665117243980, -0.932635707252902350, -0.932653747056971350, -0.932671784529406020, -0.932689819670161180, -0.932707852479191860, -0.932725882956452760, -0.932743911101899140, +-0.932761936915485590, -0.932779960397167260, -0.932797981546899080, -0.932816000364635860, -0.932834016850332740, -0.932852031003944540, -0.932870042825426180, -0.932888052314732820, +-0.932906059471819260, -0.932924064296640540, -0.932942066789151810, -0.932960066949307780, -0.932978064777063580, -0.932996060272374250, -0.933014053435194720, -0.933032044265480140, +-0.933050032763185430, -0.933068018928265520, -0.933086002760675770, -0.933103984260370890, -0.933121963427306020, -0.933139940261436320, -0.933157914762716700, -0.933175886931102430, +-0.933193856766548310, -0.933211824269009620, -0.933229789438441260, -0.933247752274798500, -0.933265712778036380, -0.933283670948109930, -0.933301626784974300, -0.933319580288584750, +-0.933337531458896090, -0.933355480295863680, -0.933373426799442460, -0.933391370969587800, -0.933409312806254610, -0.933427252309398270, -0.933445189478973700, -0.933463124314936170, +-0.933481056817240810, -0.933498986985842880, -0.933516914820697430, -0.933534840321759710, -0.933552763488984860, -0.933570684322328150, -0.933588602821744720, -0.933606518987189720, +-0.933624432818618510, -0.933642344315986140, -0.933660253479247970, -0.933678160308359150, -0.933696064803274940, -0.933713966963950480, -0.933731866790341260, -0.933749764282402190, +-0.933767659440088880, -0.933785552263356360, -0.933803442752159980, -0.933821330906454920, -0.933839216726196630, -0.933857100211340160, -0.933874981361841110, -0.933892860177654490, +-0.933910736658735700, -0.933928610805040190, -0.933946482616523020, -0.933964352093139770, -0.933982219234845590, -0.934000084041595850, -0.934017946513345910, -0.934035806650051040, +-0.934053664451666710, -0.934071519918148300, -0.934089373049450940, -0.934107223845530240, -0.934125072306341450, -0.934142918431840050, -0.934160762221981190, -0.934178603676720560, +-0.934196442796013330, -0.934214279579815180, -0.934232114028081150, -0.934249946140766950, -0.934267775917827840, -0.934285603359219170, -0.934303428464896670, -0.934321251234815460, +-0.934339071668931260, -0.934356889767199330, -0.934374705529575130, -0.934392518956014160, -0.934410330046472000, -0.934428138800903920, -0.934445945219265490, -0.934463749301512210, +-0.934481551047599560, -0.934499350457483000, -0.934517147531118250, -0.934534942268460340, -0.934552734669465310, -0.934570524734088300, -0.934588312462285130, -0.934606097854011050, +-0.934623880909221770, -0.934641661627872770, -0.934659440009919630, -0.934677216055317950, -0.934694989764023100, -0.934712761135990890, -0.934730530171176690, -0.934748296869536200, +-0.934766061231025010, -0.934783823255598610, -0.934801582943212690, -0.934819340293822850, -0.934837095307384570, -0.934854847983853540, -0.934872598323185480, -0.934890346325335850, +-0.934908091990260370, -0.934925835317914730, -0.934943576308254420, -0.934961314961235250, -0.934979051276812800, -0.934996785254942560, -0.935014516895580570, -0.935032246198682080, +-0.935049973164203130, -0.935067697792099200, -0.935085420082325980, -0.935103140034839300, -0.935120857649594740, -0.935138572926548010, -0.935156285865654800, -0.935173996466870940, +-0.935191704730152120, -0.935209410655453930, -0.935227114242732300, -0.935244815491942830, -0.935262514403041420, -0.935280210975983680, -0.935297905210725420, -0.935315597107222340, +-0.935333286665430360, -0.935350973885305080, -0.935368658766802420, -0.935386341309878080, -0.935404021514487870, -0.935421699380587610, -0.935439374908133110, -0.935457048097080190, +-0.935474718947384650, -0.935492387459002320, -0.935510053631888990, -0.935527717466000610, -0.935545378961292860, -0.935563038117721680, -0.935580694935242870, -0.935598349413812370, +-0.935616001553385980, -0.935633651353919630, -0.935651298815369010, -0.935668943937690290, -0.935686586720839260, -0.935704227164771640, -0.935721865269443450, -0.935739501034810630, +-0.935757134460829090, -0.935774765547454650, -0.935792394294643340, -0.935810020702350980, -0.935827644770533710, -0.935845266499147230, -0.935862885888147590, -0.935880502937490700, +-0.935898117647132600, -0.935915730017029210, -0.935933340047136460, -0.935950947737410390, -0.935968553087807020, -0.935986156098282060, -0.936003756768791880, -0.936021355099292300, +-0.936038951089739340, -0.936056544740089040, -0.936074136050297210, -0.936091725020320230, -0.936109311650113800, -0.936126895939634160, -0.936144477888837260, -0.936162057497679110, +-0.936179634766115880, -0.936197209694103580, -0.936214782281598160, -0.936232352528555970, -0.936249920434932710, -0.936267486000684770, -0.936285049225768050, -0.936302610110138710, +-0.936320168653752780, -0.936337724856566630, -0.936355278718535970, -0.936372830239617260, -0.936390379419766440, -0.936407926258939540, -0.936425470757093040, -0.936443012914182640, +-0.936460552730164820, -0.936478090204995620, -0.936495625338631290, -0.936513158131027760, -0.936530688582141390, -0.936548216691928230, -0.936565742460344630, -0.936583265887346530, +-0.936600786972890400, -0.936618305716932280, -0.936635822119428420, -0.936653336180334860, -0.936670847899608080, -0.936688357277204120, -0.936705864313079340, -0.936723369007189890, +-0.936740871359492020, -0.936758371369942000, -0.936775869038495970, -0.936793364365110290, -0.936810857349741230, -0.936828347992345050, -0.936845836292877880, -0.936863322251296200, +-0.936880805867556180, -0.936898287141614270, -0.936915766073426530, -0.936933242662949420, -0.936950716910139090, -0.936968188814952140, -0.936985658377344600, -0.937003125597272950, +-0.937020590474693440, -0.937038053009562550, -0.937055513201836440, -0.937072971051471690, -0.937090426558424450, -0.937107879722651080, -0.937125330544108070, -0.937142779022751670, +-0.937160225158538360, -0.937177668951424400, -0.937195110401366380, -0.937212549508320560, -0.937229986272243410, -0.937247420693091190, -0.937264852770820500, -0.937282282505387590, +-0.937299709896749160, -0.937317134944861240, -0.937334557649680660, -0.937351978011163540, -0.937369396029266610, -0.937386811703946000, -0.937404225035158520, -0.937421636022860440, +-0.937439044667008230, -0.937456450967558470, -0.937473854924467550, -0.937491256537692050, -0.937508655807188340, -0.937526052732913010, -0.937543447314822530, -0.937560839552873500, +-0.937578229447022290, -0.937595616997225600, -0.937613002203439790, -0.937630385065621460, -0.937647765583727200, -0.937665143757713590, -0.937682519587537010, -0.937699893073154270, +-0.937717264214521620, -0.937734633011595990, -0.937751999464333630, -0.937769363572691360, -0.937786725336625550, -0.937804084756093110, -0.937821441831050430, -0.937838796561454080, +-0.937856148947260770, -0.937873498988426980, -0.937890846684909630, -0.937908192036664980, -0.937925535043649950, -0.937942875705821020, -0.937960214023135010, -0.937977549995548390, +-0.937994883623017970, -0.938012214905500240, -0.938029543842952010, -0.938046870435329970, -0.938064194682590720, -0.938081516584690860, -0.938098836141587400, -0.938116153353236730, +-0.938133468219595760, -0.938150780740621080, -0.938168090916269510, -0.938185398746497650, -0.938202704231262290, -0.938220007370520140, -0.938237308164228010, -0.938254606612342610, +-0.938271902714820750, -0.938289196471619010, -0.938306487882694330, -0.938323776948003510, -0.938341063667503140, -0.938358348041150260, -0.938375630068901350, -0.938392909750713430, +-0.938410187086543220, -0.938427462076347530, -0.938444734720083160, -0.938462005017707050, -0.938479272969175880, -0.938496538574446590, -0.938513801833475880, -0.938531062746220670, +-0.938548321312637770, -0.938565577532684100, -0.938582831406316600, -0.938600082933491840, -0.938617332114166980, -0.938634578948298710, -0.938651823435844080, -0.938669065576759780, +-0.938686305371002950, -0.938703542818530300, -0.938720777919298750, -0.938738010673265340, -0.938755241080386880, -0.938772469140620290, -0.938789694853922500, -0.938806918220250530, +-0.938824139239561210, -0.938841357911811670, -0.938858574236958620, -0.938875788214959210, -0.938892999845770240, -0.938910209129348750, -0.938927416065651780, -0.938944620654636350, +-0.938961822896259290, -0.938979022790477740, -0.938996220337248500, -0.939013415536528840, -0.939030608388275570, -0.939047798892445830, -0.939064987048996550, -0.939082172857884870, +-0.939099356319067600, -0.939116537432502120, -0.939133716198145120, -0.939150892615953970, -0.939168066685885590, -0.939185238407897030, -0.939202407781945410, -0.939219574807987680, +-0.939236739485981080, -0.939253901815882530, -0.939271061797649300, -0.939288219431238410, -0.939305374716607020, -0.939322527653712050, -0.939339678242510970, -0.939356826482960480, +-0.939373972375018070, -0.939391115918640660, -0.939408257113785510, -0.939425395960409640, -0.939442532458470430, -0.939459666607924680, -0.939476798408729890, -0.939493927860843070, +-0.939511054964221490, -0.939528179718822300, -0.939545302124602520, -0.939562422181519640, -0.939579539889530580, -0.939596655248592820, -0.939613768258663270, -0.939630878919699320, +-0.939647987231658210, -0.939665093194497090, -0.939682196808173330, -0.939699298072643960, -0.939716396987866460, -0.939733493553797870, -0.939750587770395550, -0.939767679637616870, +-0.939784769155418860, -0.939801856323759120, -0.939818941142594570, -0.939836023611882680, -0.939853103731580710, -0.939870181501646140, -0.939887256922036010, -0.939904329992707680, +-0.939921400713618630, -0.939938469084726000, -0.939955535105987280, -0.939972598777359610, -0.939989660098800580, -0.940006719070267230, -0.940023775691717240, -0.940040829963107670, +-0.940057881884396210, -0.940074931455539890, -0.940091978676496300, -0.940109023547222700, -0.940126066067676680, -0.940143106237815380, -0.940160144057596400, -0.940177179526976880, +-0.940194212645914630, -0.940211243414366680, -0.940228271832290740, -0.940245297899644170, -0.940262321616384230, -0.940279342982468510, -0.940296361997854380, -0.940313378662499530, +-0.940330392976361010, -0.940347404939396720, -0.940364414551563720, -0.940381421812819810, -0.940398426723122350, -0.940415429282428830, -0.940432429490696610, -0.940449427347883390, +-0.940466422853946660, -0.940483416008843780, -0.940500406812532440, -0.940517395264970020, -0.940534381366114110, -0.940551365115922300, -0.940568346514352170, -0.940585325561360990, +-0.940602302256906550, -0.940619276600946350, -0.940636248593438080, -0.940653218234339010, -0.940670185523607040, -0.940687150461199440, -0.940704113047074130, -0.940721073281188480, +-0.940738031163500190, -0.940754986693966730, -0.940771939872545810, -0.940788890699195020, -0.940805839173872170, -0.940822785296534510, -0.940839729067140080, -0.940856670485646250, +-0.940873609552010710, -0.940890546266191170, -0.940907480628145330, -0.940924412637830660, -0.940941342295204990, -0.940958269600226100, -0.940975194552851390, -0.940992117153038770, +-0.941009037400745820, -0.941025955295930250, -0.941042870838549870, -0.941059784028562270, -0.941076694865925160, -0.941093603350596440, -0.941110509482533500, -0.941127413261694470, +-0.941144314688036830, -0.941161213761518510, -0.941178110482096990, -0.941195004849730400, -0.941211896864376120, -0.941228786525992180, -0.941245673834536280, -0.941262558789966120, +-0.941279441392239620, -0.941296321641314490, -0.941313199537148650, -0.941330075079699680, -0.941346948268925620, -0.941363819104784170, -0.941380687587233140, -0.941397553716230350, +-0.941414417491733820, -0.941431278913701040, -0.941448137982090260, -0.941464994696859070, -0.941481849057965390, -0.941498701065367040, -0.941515550719022040, -0.941532398018887990, +-0.941549242964923150, -0.941566085557085100, -0.941582925795331870, -0.941599763679621280, -0.941616599209911250, -0.941633432386159820, -0.941650263208324790, -0.941667091676364090, +-0.941683917790235640, -0.941700741549897360, -0.941717562955307290, -0.941734382006423340, -0.941751198703203340, -0.941768013045605420, -0.941784825033587400, -0.941801634667107420, +-0.941818441946123190, -0.941835246870593060, -0.941852049440474630, -0.941868849655726150, -0.941885647516305550, -0.941902443022170850, -0.941919236173280110, -0.941936026969591110, +-0.941952815411062240, -0.941969601497651190, -0.941986385229316210, -0.942003166606015130, -0.942019945627706300, -0.942036722294347540, -0.942053496605896990, -0.942070268562312570, +-0.942087038163552660, -0.942103805409575060, -0.942120570300338020, -0.942137332835799480, -0.942154093015917680, -0.942170850840650550, -0.942187606309956350, -0.942204359423793100, +-0.942221110182119070, -0.942237858584892170, -0.942254604632070670, -0.942271348323612590, -0.942288089659476190, -0.942304828639619510, -0.942321565264000790, -0.942338299532578190, +-0.942355031445309850, -0.942371761002153920, -0.942388488203068530, -0.942405213048011950, -0.942421935536942310, -0.942438655669817880, -0.942455373446596800, -0.942472088867237320, +-0.942488801931697600, -0.942505512639935870, -0.942522220991910300, -0.942538926987579240, -0.942555630626900840, -0.942572331909833360, -0.942589030836335050, -0.942605727406364170, +-0.942622421619879080, -0.942639113476837820, -0.942655802977198750, -0.942672490120920250, -0.942689174907960450, -0.942705857338277720, -0.942722537411830430, -0.942739215128576720, +-0.942755890488475080, -0.942772563491483530, -0.942789234137560770, -0.942805902426664730, -0.942822568358754110, -0.942839231933786940, -0.942855893151721800, -0.942872552012516850, +-0.942889208516130560, -0.942905862662521190, -0.942922514451647210, -0.942939163883466990, -0.942955810957938790, -0.942972455675021080, -0.942989098034672240, -0.943005738036850730, +-0.943022375681514700, -0.943039010968622860, -0.943055643898133460, -0.943072274470004970, -0.943088902684195760, -0.943105528540664320, -0.943122152039369000, -0.943138773180268400, +-0.943155391963320770, -0.943172008388484810, -0.943188622455718660, -0.943205234164981030, -0.943221843516230280, -0.943238450509425010, -0.943255055144523460, -0.943271657421484440, +-0.943288257340266220, -0.943304854900827270, -0.943321450103126290, -0.943338042947121650, -0.943354633432771930, -0.943371221560035610, -0.943387807328871290, -0.943404390739237320, +-0.943420971791092410, -0.943437550484395150, -0.943454126819103900, -0.943470700795177360, -0.943487272412574240, -0.943503841671252670, -0.943520408571171700, -0.943536973112289680, +-0.943553535294565200, -0.943570095117956860, -0.943586652582423250, -0.943603207687923160, -0.943619760434414870, -0.943636310821857280, -0.943652858850208890, -0.943669404519428380, +-0.943685947829474240, -0.943702488780305380, -0.943719027371880180, -0.943735563604157560, -0.943752097477095870, -0.943768628990654060, -0.943785158144790580, -0.943801684939464370, +-0.943818209374633790, -0.943834731450257760, -0.943851251166294760, -0.943867768522703820, -0.943884283519443310, -0.943900796156472270, -0.943917306433749050, -0.943933814351232690, +-0.943950319908881790, -0.943966823106655030, -0.943983323944511230, -0.943999822422409100, -0.944016318540307540, -0.944032812298165050, -0.944049303695940530, -0.944065792733592810, +-0.944082279411080580, -0.944098763728362660, -0.944115245685397840, -0.944131725282144840, -0.944148202518562680, -0.944164677394609850, -0.944181149910245380, -0.944197620065428070, +-0.944214087860116740, -0.944230553294270080, -0.944247016367847140, -0.944263477080806600, -0.944279935433107400, -0.944296391424708340, -0.944312845055568340, -0.944329296325646220, +-0.944345745234900780, -0.944362191783291060, -0.944378635970775760, -0.944395077797314020, -0.944411517262864430, -0.944427954367386250, -0.944444389110837950, -0.944460821493178890, +-0.944477251514367570, -0.944493679174363330, -0.944510104473124780, -0.944526527410610940, -0.944542947986780850, -0.944559366201593310, -0.944575782055007470, -0.944592195546982150, +-0.944608606677476260, -0.944625015446448950, -0.944641421853859020, -0.944657825899665520, -0.944674227583827570, -0.944690626906303900, -0.944707023867053850, -0.944723418466036140, +-0.944739810703209890, -0.944756200578534040, -0.944772588091967850, -0.944788973243470000, -0.944805356032999870, -0.944821736460516260, -0.944838114525978320, -0.944854490229345090, +-0.944870863570575700, -0.944887234549629080, -0.944903603166464490, -0.944919969421040730, -0.944936333313317170, -0.944952694843252840, -0.944969054010806550, -0.944985410815937790, +-0.945001765258605460, -0.945018117338768730, -0.945034467056386610, -0.945050814411418470, -0.945067159403823240, -0.945083502033560060, -0.945099842300588190, -0.945116180204866650, +-0.945132515746354710, -0.945148848925011500, -0.945165179740796170, -0.945181508193667860, -0.945197834283585720, -0.945214158010509120, -0.945230479374396970, -0.945246798375208750, +-0.945263115012903610, -0.945279429287440460, -0.945295741198778900, -0.945312050746877960, -0.945328357931696890, -0.945344662753194840, -0.945360965211331280, -0.945377265306065140, +-0.945393563037356000, -0.945409858405162780, -0.945426151409445080, -0.945442442050161920, -0.945458730327272680, -0.945475016240736600, -0.945491299790512940, -0.945507580976561070, +-0.945523859798840350, -0.945540136257309820, -0.945556410351929060, -0.945572682082657100, -0.945588951449453650, -0.945605218452277740, -0.945621483091088730, -0.945637745365846110, +-0.945654005276509110, -0.945670262823037120, -0.945686518005389280, -0.945702770823525380, -0.945719021277404370, -0.945735269366985930, -0.945751515092229320, -0.945767758453093910, +-0.945783999449539060, -0.945800238081524250, -0.945816474349008730, -0.945832708251952200, -0.945848939790313810, -0.945865168964053040, -0.945881395773129350, -0.945897620217502340, +-0.945913842297131160, -0.945930062011975270, -0.945946279361994380, -0.945962494347147740, -0.945978706967394830, -0.945994917222695240, -0.946011125113008330, -0.946027330638293470, +-0.946043533798510470, -0.946059734593618470, -0.946075933023577290, -0.946092129088346170, -0.946108322787884810, -0.946124514122152590, -0.946140703091109090, -0.946156889694713790, +-0.946173073932926380, -0.946189255805706120, -0.946205435313012930, -0.946221612454805960, -0.946237787231045120, -0.946253959641689790, -0.946270129686699430, -0.946286297366033870, +-0.946302462679652460, -0.946318625627515010, -0.946334786209580890, -0.946350944425809910, -0.946367100276161440, -0.946383253760595400, -0.946399404879071040, -0.946415553631548280, +-0.946431700017986600, -0.946447844038345700, -0.946463985692585160, -0.946480124980664690, -0.946496261902543770, -0.946512396458182410, -0.946528528647539890, -0.946544658470576120, +-0.946560785927250680, -0.946576911017523280, -0.946593033741353730, -0.946609154098701390, -0.946625272089526290, -0.946641387713788030, -0.946657500971446190, -0.946673611862460680, +-0.946689720386791110, -0.946705826544397280, -0.946721930335238880, -0.946738031759275510, -0.946754130816467310, -0.946770227506773530, -0.946786321830154430, -0.946802413786569260, +-0.946818503375978280, -0.946834590598340960, -0.946850675453617120, -0.946866757941766670, -0.946882838062749310, -0.946898915816524860, -0.946914991203053000, -0.946931064222293890, +-0.946947134874206900, -0.946963203158752150, -0.946979269075889360, -0.946995332625578560, -0.947011393807779210, -0.947027452622451580, -0.947043509069555140, -0.947059563149050040, +-0.947075614860895980, -0.947091664205052860, -0.947107711181480630, -0.947123755790139190, -0.947139798030988240, -0.947155837903987830, -0.947171875409097860, -0.947187910546278160, +-0.947203943315488630, -0.947219973716689420, -0.947236001749840130, -0.947252027414900890, -0.947268050711831620, -0.947284071640592140, -0.947300090201142480, -0.947316106393442660, +-0.947332120217452500, -0.947348131673132030, -0.947364140760441400, -0.947380147479340180, -0.947396151829788760, -0.947412153811746930, -0.947428153425174720, -0.947444150670032070, +-0.947460145546279110, -0.947476138053875760, -0.947492128192782060, -0.947508115962958030, -0.947524101364363710, -0.947540084396959250, -0.947556065060704440, -0.947572043355559450, +-0.947588019281484390, -0.947603992838439320, -0.947619964026384260, -0.947635932845279360, -0.947651899295084420, -0.947667863375759920, -0.947683825087265670, -0.947699784429561930, +-0.947715741402608720, -0.947731696006366090, -0.947747648240794270, -0.947763598105853310, -0.947779545601503350, -0.947795490727704530, -0.947811433484416990, -0.947827373871600880, +-0.947843311889216330, -0.947859247537223500, -0.947875180815582640, -0.947891111724253670, -0.947907040263197050, -0.947922966432372730, -0.947938890231741050, -0.947954811661262050, +-0.947970730720896100, -0.947986647410603340, -0.948002561730344030, -0.948018473680078190, -0.948034383259766190, -0.948050290469368170, -0.948066195308844620, -0.948082097778155440, +-0.948097997877261010, -0.948113895606121580, -0.948129790964697520, -0.948145683952948850, -0.948161574570836050, -0.948177462818319380, -0.948193348695358870, -0.948209232201915220, +-0.948225113337948230, -0.948240992103418610, -0.948256868498286500, -0.948272742522512260, -0.948288614176056030, -0.948304483458878410, -0.948320350370939420, -0.948336214912199770, +-0.948352077082619370, -0.948367936882158920, -0.948383794310778570, -0.948399649368438790, -0.948415502055099720, -0.948431352370722070, -0.948447200315265970, -0.948463045888691900, +-0.948478889090960230, -0.948494729922031320, -0.948510568381865650, -0.948526404470423360, -0.948542238187665250, -0.948558069533551480, -0.948573898508042520, -0.948589725111098850, +-0.948605549342680820, -0.948621371202748920, -0.948637190691263730, -0.948653007808185400, -0.948668822553474620, -0.948684634927091760, -0.948700444928997300, -0.948716252559151710, +-0.948732057817515570, -0.948747860704049260, -0.948763661218713250, -0.948779459361468120, -0.948795255132274360, -0.948811048531092440, -0.948826839557882940, -0.948842628212606340, +-0.948858414495223010, -0.948874198405693870, -0.948889979943979060, -0.948905759110039380, -0.948921535903835320, -0.948937310325327470, -0.948953082374476180, -0.948968852051242370, +-0.948984619355586200, -0.949000384287468690, -0.949016146846850090, -0.949031907033691220, -0.949047664847952550, -0.949063420289594780, -0.949079173358578280, -0.949094924054864060, +-0.949110672378412400, -0.949126418329184100, -0.949142161907139740, -0.949157903112240020, -0.949173641944445530, -0.949189378403716870, -0.949205112490014820, -0.949220844203299880, +-0.949236573543532970, -0.949252300510674550, -0.949268025104685440, -0.949283747325526230, -0.949299467173157720, -0.949315184647540390, -0.949330899748635270, -0.949346612476402730, +-0.949362322830803800, -0.949378030811798950, -0.949393736419349210, -0.949409439653414950, -0.949425140513957210, -0.949440839000936450, -0.949456535114313720, -0.949472228854049690, +-0.949487920220104980, -0.949503609212440590, -0.949519295831017130, -0.949534980075795400, -0.949550661946736210, -0.949566341443800370, -0.949582018566948680, -0.949597693316141970, +-0.949613365691341030, -0.949629035692506670, -0.949644703319599710, -0.949660368572580960, -0.949676031451411330, -0.949691691956051630, -0.949707350086462680, -0.949723005842605380, +-0.949738659224440450, -0.949754310231929020, -0.949769958865031790, -0.949785605123709690, -0.949801249007923510, -0.949816890517634180, -0.949832529652802740, -0.949848166413389870, +-0.949863800799356620, -0.949879432810663780, -0.949895062447272510, -0.949910689709143500, -0.949926314596237780, -0.949941937108516270, -0.949957557245940000, -0.949973175008469670, +-0.949988790396066540, -0.950004403408691410, -0.950020014046305320, -0.950035622308869070, -0.950051228196343800, -0.950066831708690440, -0.950082432845870130, -0.950098031607843670, +-0.950113627994572110, -0.950129222006016460, -0.950144813642137760, -0.950160402902897050, -0.950175989788255350, -0.950191574298173690, -0.950207156432613000, -0.950222736191534520, +-0.950238313574899180, -0.950253888582668020, -0.950269461214802160, -0.950285031471262640, -0.950300599352010500, -0.950316164857006980, -0.950331727986212900, -0.950347288739589620, +-0.950362847117098060, -0.950378403118699480, -0.950393956744354780, -0.950409507994025240, -0.950425056867671870, -0.950440603365255930, -0.950456147486738460, -0.950471689232080590, +-0.950487228601243570, -0.950502765594188340, -0.950518300210876350, -0.950533832451268430, -0.950549362315326160, -0.950564889803010350, -0.950580414914282360, -0.950595937649103220, +-0.950611458007434410, -0.950626975989236840, -0.950642491594471890, -0.950658004823100590, -0.950673515675084400, -0.950689024150384370, -0.950704530248961840, -0.950720033970777980, +-0.950735535315794020, -0.950751034283971230, -0.950766530875270740, -0.950782025089654040, -0.950797516927082250, -0.950813006387516650, -0.950828493470918580, -0.950843978177249300, +-0.950859460506469970, -0.950874940458542040, -0.950890418033426780, -0.950905893231085430, -0.950921366051479370, -0.950936836494569950, -0.950952304560318320, -0.950967770248686060, +-0.950983233559634320, -0.950998694493124460, -0.951014153049117850, -0.951029609227575960, -0.951045063028460040, -0.951060514451731340, -0.951075963497351460, -0.951091410165281650, +-0.951106854455483370, -0.951122296367917790, -0.951137735902546690, -0.951153173059331000, -0.951168607838232540, -0.951184040239212550, -0.951199470262232500, -0.951214897907253660, +-0.951230323174237610, -0.951245746063145830, -0.951261166573939550, -0.951276584706580500, -0.951292000461029910, -0.951307413837249260, -0.951322824835200250, -0.951338233454844030, +-0.951353639696142280, -0.951369043559056490, -0.951384445043547910, -0.951399844149578340, -0.951415240877109160, -0.951430635226101940, -0.951446027196518050, -0.951461416788319080, +-0.951476804001466610, -0.951492188835922130, -0.951507571291647090, -0.951522951368603210, -0.951538329066751950, -0.951553704386054910, -0.951569077326473440, -0.951584447887969480, +-0.951599816070504260, -0.951615181874039600, -0.951630545298536860, -0.951645906343957850, -0.951661265010264160, -0.951676621297417150, -0.951691975205378630, -0.951707326734110180, +-0.951722675883573510, -0.951738022653729980, -0.951753367044541500, -0.951768709055969550, -0.951784048687975950, -0.951799385940522050, -0.951814720813569770, -0.951830053307080700, +-0.951845383421016540, -0.951860711155338770, -0.951876036510009400, -0.951891359484989820, -0.951906680080241930, -0.951921998295727210, -0.951937314131407590, -0.951952627587244750, +-0.951967938663200290, -0.951983247359235900, -0.951998553675313500, -0.952013857611394680, -0.952029159167441130, -0.952044458343414780, -0.952059755139277210, -0.952075049554990340, +-0.952090341590515750, -0.952105631245815490, -0.952120918520850900, -0.952136203415584250, -0.952151485929976890, -0.952166766063990980, -0.952182043817588090, -0.952197319190730030, +-0.952212592183378730, -0.952227862795495980, -0.952243131027043500, -0.952258396877983300, -0.952273660348277100, -0.952288921437886680, -0.952304180146773980, -0.952319436474900800, +-0.952334690422229070, -0.952349941988720470, -0.952365191174337270, -0.952380437979040930, -0.952395682402793490, -0.952410924445556860, -0.952426164107292970, -0.952441401387963630, +-0.952456636287530860, -0.952471868805956360, -0.952487098943202270, -0.952502326699230410, -0.952517552074002790, -0.952532775067481240, -0.952547995679627780, -0.952563213910404330, +-0.952578429759772800, -0.952593643227695350, -0.952608854314133560, -0.952624063019049780, -0.952639269342405840, -0.952654473284163750, -0.952669674844285330, -0.952684874022732830, +-0.952700070819468170, -0.952715265234453270, -0.952730457267650270, -0.952745646919021080, -0.952760834188527750, -0.952776019076132410, -0.952791201581796980, -0.952806381705483480, +-0.952821559447154080, -0.952836734806770890, -0.952851907784295740, -0.952867078379690870, -0.952882246592918310, -0.952897412423940100, -0.952912575872718380, -0.952927736939215180, +-0.952942895623392740, -0.952958051925212880, -0.952973205844638070, -0.952988357381630120, -0.953003506536151400, -0.953018653308163820, -0.953033797697629640, -0.953048939704510990, +-0.953064079328769910, -0.953079216570368650, -0.953094351429269460, -0.953109483905434260, -0.953124613998825420, -0.953139741709405080, -0.953154867037135370, -0.953169989981978330, +-0.953185110543896540, -0.953200228722851930, -0.953215344518806630, -0.953230457931723120, -0.953245568961563320, -0.953260677608289700, -0.953275783871864290, -0.953290887752249460, +-0.953305989249407460, -0.953321088363300430, -0.953336185093890730, -0.953351279441140620, -0.953366371405012130, -0.953381460985467830, -0.953396548182469880, -0.953411632995980530, +-0.953426715425962130, -0.953441795472376950, -0.953456873135187230, -0.953471948414355340, -0.953487021309843640, -0.953502091821614380, -0.953517159949629820, -0.953532225693852430, +-0.953547289054244460, -0.953562350030768170, -0.953577408623386140, -0.953592464832060500, -0.953607518656753750, -0.953622570097428120, -0.953637619154046210, -0.953652665826570160, +-0.953667710114962430, -0.953682752019185510, -0.953697791539201640, -0.953712828674973310, -0.953727863426462870, -0.953742895793632810, -0.953757925776445580, -0.953772953374863340, +-0.953787978588848890, -0.953803001418364490, -0.953818021863372500, -0.953833039923835610, -0.953848055599715970, -0.953863068890976270, -0.953878079797578770, -0.953893088319486160, +-0.953908094456660800, -0.953923098209065290, -0.953938099576661980, -0.953953098559413460, -0.953968095157282090, -0.953983089370230570, -0.953998081198221270, -0.954013070641216880, +-0.954028057699179640, -0.954043042372072380, -0.954058024659857450, -0.954073004562497550, -0.954087982079955150, -0.954102957212192630, -0.954117929959172880, -0.954132900320858180, +-0.954147868297211430, -0.954162833888194780, -0.954177797093771150, -0.954192757913903010, -0.954207716348553060, -0.954222672397683660, -0.954237626061257730, -0.954252577339237630, +-0.954267526231586170, -0.954282472738265720, -0.954297416859239300, -0.954312358594469170, -0.954327297943918350, -0.954342234907549100, -0.954357169485324340, -0.954372101677206650, +-0.954387031483158730, -0.954401958903143170, -0.954416883937122760, -0.954431806585060110, -0.954446726846918000, -0.954461644722659040, -0.954476560212245920, -0.954491473315641440, +-0.954506384032808300, -0.954521292363709200, -0.954536198308306830, -0.954551101866564000, -0.954566003038443410, -0.954580901823907760, -0.954595798222919960, -0.954610692235442590, +-0.954625583861438480, -0.954640473100870410, -0.954655359953701210, -0.954670244419893570, -0.954685126499410290, -0.954700006192214290, -0.954714883498268270, -0.954729758417534930, +-0.954744630949977300, -0.954759501095558070, -0.954774368854240050, -0.954789234225986160, -0.954804097210759100, -0.954818957808521880, -0.954833816019237220, -0.954848671842868040, +-0.954863525279377230, -0.954878376328727520, -0.954893224990881920, -0.954908071265803240, -0.954922915153454400, -0.954937756653798210, -0.954952595766797700, -0.954967432492415670, +-0.954982266830615050, -0.954997098781358860, -0.955011928344609800, -0.955026755520331010, -0.955041580308485180, -0.955056402709035580, -0.955071222721944890, -0.955086040347176150, +-0.955100855584692270, -0.955115668434456390, -0.955130478896431100, -0.955145286970579880, -0.955160092656865300, -0.955174895955250510, -0.955189696865698430, -0.955204495388172200, +-0.955219291522634630, -0.955234085269048960, -0.955248876627377900, -0.955263665597584800, -0.955278452179632480, -0.955293236373484070, -0.955308018179102600, -0.955322797596451000, +-0.955337574625492400, -0.955352349266189950, -0.955367121518506560, -0.955381891382405370, -0.955396658857849520, -0.955411423944801940, -0.955426186643225870, -0.955440946953084240, +-0.955455704874340280, -0.955470460406957050, -0.955485213550897770, -0.955499964306125270, -0.955514712672603020, -0.955529458650293930, -0.955544202239161260, -0.955558943439167920, +-0.955573682250277390, -0.955588418672452590, -0.955603152705656770, -0.955617884349853060, -0.955632613605004620, -0.955647340471074690, -0.955662064948026300, -0.955676787035822930, +-0.955691506734427380, -0.955706224043803230, -0.955720938963913410, -0.955735651494721280, -0.955750361636189980, -0.955765069388282870, -0.955779774750963100, -0.955794477724193790, +-0.955809178307938320, -0.955823876502159940, -0.955838572306821900, -0.955853265721887340, -0.955867956747319610, -0.955882645383082100, -0.955897331629137930, -0.955912015485450350, +-0.955926696951982850, -0.955941376028698550, -0.955956052715560830, -0.955970727012532940, -0.955985398919578230, -0.956000068436660080, -0.956014735563741720, -0.956029400300786540, +-0.956044062647757880, -0.956058722604618990, -0.956073380171333360, -0.956088035347864240, -0.956102688134175090, -0.956117338530229070, -0.956131986535989850, -0.956146632151420590, +-0.956161275376484880, -0.956175916211145840, -0.956190554655367060, -0.956205190709111920, -0.956219824372343760, -0.956234455645026070, -0.956249084527122210, -0.956263711018595640, +-0.956278335119409850, -0.956292956829528200, -0.956307576148914150, -0.956322193077531190, -0.956336807615342680, -0.956351419762312190, -0.956366029518403100, -0.956380636883578990, +-0.956395241857803220, -0.956409844441039490, -0.956424444633250940, -0.956439042434401480, -0.956453637844454250, -0.956468230863373070, -0.956482821491121290, -0.956497409727662400, +-0.956511995572960070, -0.956526579026977570, -0.956541160089678820, -0.956555738761027060, -0.956570315040986000, -0.956584888929519090, -0.956599460426590050, -0.956614029532162350, +-0.956628596246199560, -0.956643160568665160, -0.956657722499523080, -0.956672282038736440, -0.956686839186269290, -0.956701393942084980, -0.956715946306147200, -0.956730496278419550, +-0.956745043858865610, -0.956759589047449180, -0.956774131844133620, -0.956788672248882870, -0.956803210261660380, -0.956817745882429850, -0.956832279111154980, -0.956846809947799470, +-0.956861338392326790, -0.956875864444700850, -0.956890388104885250, -0.956904909372843780, -0.956919428248539820, -0.956933944731937490, -0.956948458823000170, -0.956962970521691770, +-0.956977479827975870, -0.956991986741816400, -0.957006491263176830, -0.957020993392021070, -0.957035493128312820, -0.957049990472015890, -0.957064485423093970, -0.957078977981510870, +-0.957093468147230290, -0.957107955920216020, -0.957122441300431890, -0.957136924287841580, -0.957151404882409020, -0.957165883084097890, -0.957180358892872230, -0.957194832308695510, +-0.957209303331531760, -0.957223771961344670, -0.957238238198098280, -0.957252702041756160, -0.957267163492282470, -0.957281622549640670, -0.957296079213795000, -0.957310533484708960, +-0.957324985362346670, -0.957339434846671940, -0.957353881937648590, -0.957368326635240630, -0.957382768939411650, -0.957397208850125910, -0.957411646367347100, -0.957426081491039250, +-0.957440514221166050, -0.957454944557691650, -0.957469372500579840, -0.957483798049794670, -0.957498221205300040, -0.957512641967059760, -0.957527060335037870, -0.957541476309198390, +-0.957555889889505240, -0.957570301075922340, -0.957584709868413600, -0.957599116266943160, -0.957613520271474950, -0.957627921881972880, -0.957642321098401080, -0.957656717920723490, +-0.957671112348904010, -0.957685504382906780, -0.957699894022695840, -0.957714281268235100, -0.957728666119488700, -0.957743048576420560, -0.957757428638994930, -0.957771806307175620, +-0.957786181580926880, -0.957800554460212620, -0.957814924944996980, -0.957829293035244110, -0.957843658730917920, -0.957858022031982560, -0.957872382938402270, -0.957886741450140860, +-0.957901097567162680, -0.957915451289431790, -0.957929802616912300, -0.957944151549568250, -0.957958498087363770, -0.957972842230263130, -0.957987183978230350, -0.958001523331229570, +-0.958015860289225030, -0.958030194852180880, -0.958044527020061150, -0.958058856792830090, -0.958073184170451950, -0.958087509152890870, -0.958101831740110990, -0.958116151932076550, +-0.958130469728751710, -0.958144785130100710, -0.958159098136087680, -0.958173408746677000, -0.958187716961832690, -0.958202022781519220, -0.958216326205700630, -0.958230627234341270, +-0.958244925867405280, -0.958259222104857030, -0.958273515946660660, -0.958287807392780520, -0.958302096443180870, -0.958316383097825960, -0.958330667356680150, -0.958344949219707590, +-0.958359228686872730, -0.958373505758139730, -0.958387780433473060, -0.958402052712836850, -0.958416322596195580, -0.958430590083513500, -0.958444855174754970, -0.958459117869884140, +-0.958473378168865690, -0.958487636071663650, -0.958501891578242730, -0.958516144688566940, -0.958530395402600770, -0.958544643720308680, -0.958558889641654920, -0.958573133166603970, +-0.958587374295120200, -0.958601613027167950, -0.958615849362711710, -0.958630083301715840, -0.958644314844144700, -0.958658543989962860, -0.958672770739134590, -0.958686995091624470, +-0.958701217047396750, -0.958715436606416120, -0.958729653768646830, -0.958743868534053360, -0.958758080902600280, -0.958772290874251980, -0.958786498448973010, -0.958800703626727760, +-0.958814906407480790, -0.958829106791196480, -0.958843304777839410, -0.958857500367374050, -0.958871693559765090, -0.958885884354976680, -0.958900072752973730, -0.958914258753720490, +-0.958928442357181670, -0.958942623563321720, -0.958956802372105230, -0.958970978783496690, -0.958985152797460770, -0.958999324413961960, -0.959013493632964840, -0.959027660454433880, +-0.959041824878333890, -0.959055986904629340, -0.959070146533284820, -0.959084303764264900, -0.959098458597534180, -0.959112611033057340, -0.959126761070798970, -0.959140908710723770, +-0.959155053952796210, -0.959169196796981090, -0.959183337243242900, -0.959197475291546420, -0.959211610941856250, -0.959225744194137090, -0.959239875048353400, -0.959254003504470210, +-0.959268129562451890, -0.959282253222263350, -0.959296374483869060, -0.959310493347233950, -0.959324609812322590, -0.959338723879099690, -0.959352835547529930, -0.959366944817578120, +-0.959381051689208950, -0.959395156162387130, -0.959409258237077460, -0.959423357913244620, -0.959437455190853440, -0.959451550069868600, -0.959465642550254790, -0.959479732631976940, +-0.959493820314999860, -0.959507905599288000, -0.959521988484806520, -0.959536068971520110, -0.959550147059393450, -0.959564222748391480, -0.959578296038478880, -0.959592366929620580, +-0.959606435421781370, -0.959620501514926060, -0.959634565209019570, -0.959648626504026600, -0.959662685399912060, -0.959676741896640760, -0.959690795994177610, -0.959704847692487650, +-0.959718896991535340, -0.959732943891285940, -0.959746988391704140, -0.959761030492754850, -0.959775070194403000, -0.959789107496613390, -0.959803142399351160, -0.959817174902581010, +-0.959831205006267840, -0.959845232710376810, -0.959859258014872600, -0.959873280919720240, -0.959887301424884650, -0.959901319530330980, -0.959915335236023790, -0.959929348541928460, +-0.959943359448009680, -0.959957367954232480, -0.959971374060561880, -0.959985377766962800, -0.959999379073400270, -0.960013377979839320, -0.960027374486244980, -0.960041368592582160, +-0.960055360298816000, -0.960069349604911300, -0.960083336510833330, -0.960097321016546880, -0.960111303122017310, -0.960125282827209330, -0.960139260132088280, -0.960153235036618980, +-0.960167207540766680, -0.960181177644496180, -0.960195145347772950, -0.960209110650561800, -0.960223073552827770, -0.960237034054536200, -0.960250992155651910, -0.960264947856140250, +-0.960278901155966150, -0.960292852055094850, -0.960306800553491380, -0.960320746651120990, -0.960334690347948610, -0.960348631643939580, -0.960362570539058940, -0.960376507033271930, +-0.960390441126543590, -0.960404372818839170, -0.960418302110123800, -0.960432229000362740, -0.960446153489521000, -0.960460075577563970, -0.960473995264456650, -0.960487912550164410, +-0.960501827434652510, -0.960515739917885860, -0.960529649999829930, -0.960543557680449860, -0.960557462959710890, -0.960571365837578290, -0.960585266314017310, -0.960599164388993070, +-0.960613060062470940, -0.960626953334416170, -0.960640844204794120, -0.960654732673569820, -0.960668618740708750, -0.960682502406176140, -0.960696383669937260, -0.960710262531957350, +-0.960724138992201880, -0.960738013050636110, -0.960751884707225170, -0.960765753961934640, -0.960779620814729670, -0.960793485265575730, -0.960807347314437950, -0.960821206961281820, +-0.960835064206072680, -0.960848919048776010, -0.960862771489356840, -0.960876621527780860, -0.960890469164013330, -0.960904314398019600, -0.960918157229765040, -0.960931997659215220, +-0.960945835686335290, -0.960959671311090840, -0.960973504533447100, -0.960987335353369660, -0.961001163770823900, -0.961014989785775260, -0.961028813398189130, -0.961042634608030970, +-0.961056453415266130, -0.961070269819860210, -0.961084083821778680, -0.961097895420986890, -0.961111704617450440, -0.961125511411134560, -0.961139315802005070, -0.961153117790027210, +-0.961166917375166570, -0.961180714557388630, -0.961194509336658950, -0.961208301712942910, -0.961222091686206200, -0.961235879256414180, -0.961249664423532550, -0.961263447187526650, +-0.961277227548362200, -0.961291005506004660, -0.961304781060419720, -0.961318554211572640, -0.961332324959429330, -0.961346093303955150, -0.961359859245115690, -0.961373622782876640, +-0.961387383917203580, -0.961401142648061980, -0.961414898975417540, -0.961428652899235850, -0.961442404419482480, -0.961456153536123240, -0.961469900249123490, -0.961483644558449040, +-0.961497386464065460, -0.961511125965938460, -0.961524863064033620, -0.961538597758316630, -0.961552330048753070, -0.961566059935308750, -0.961579787417949250, -0.961593512496640380, +-0.961607235171347610, -0.961620955442036850, -0.961634673308673690, -0.961648388771223720, -0.961662101829652950, -0.961675812483926750, -0.961689520734011150, -0.961703226579871730, +-0.961716930021474180, -0.961730631058784420, -0.961744329691768040, -0.961758025920390720, -0.961771719744618500, -0.961785411164416850, -0.961799100179751790, -0.961812786790588900, +-0.961826470996894000, -0.961840152798633000, -0.961853832195771590, -0.961867509188275570, -0.961881183776110870, -0.961894855959243290, -0.961908525737638300, -0.961922193111262260, +-0.961935858080080530, -0.961949520644059250, -0.961963180803164120, -0.961976838557361160, -0.961990493906615950, -0.962004146850894640, -0.962017797390162910, -0.962031445524386690, +-0.962045091253531770, -0.962058734577564300, -0.962072375496449860, -0.962086014010154480, -0.962099650118644070, -0.962113283821884660, -0.962126915119841940, -0.962140544012481950, +-0.962154170499770590, -0.962167794581673790, -0.962181416258157560, -0.962195035529187730, -0.962208652394730300, -0.962222266854751320, -0.962235878909216580, -0.962249488558092110, +-0.962263095801344060, -0.962276700638938220, -0.962290303070840620, -0.962303903097017190, -0.962317500717434160, -0.962331095932057230, -0.962344688740852660, -0.962358279143786350, +-0.962371867140824340, -0.962385452731932540, -0.962399035917077320, -0.962412616696224350, -0.962426195069339910, -0.962439771036390000, -0.962453344597340550, -0.962466915752157930, +-0.962480484500807810, -0.962494050843256680, -0.962507614779470220, -0.962521176309414920, -0.962534735433056450, -0.962548292150361310, -0.962561846461295390, -0.962575398365824950, +-0.962588947863915910, -0.962602494955534520, -0.962616039640646900, -0.962629581919219210, -0.962643121791217470, -0.962656659256608040, -0.962670194315356830, -0.962683726967430320, +-0.962697257212794310, -0.962710785051415270, -0.962724310483259240, -0.962737833508292450, -0.962751354126481050, -0.962764872337791290, -0.962778388142189410, -0.962791901539641450, +-0.962805412530113760, -0.962818921113572480, -0.962832427289983970, -0.962845931059314370, -0.962859432421530050, -0.962872931376597020, -0.962886427924481760, -0.962899922065150290, +-0.962913413798569210, -0.962926903124704410, -0.962940390043522500, -0.962953874554989490, -0.962967356659071850, -0.962980836355735840, -0.962994313644947700, -0.963007788526673790, +-0.963021261000880370, -0.963034731067533900, -0.963048198726600520, -0.963061663978046710, -0.963075126821838600, -0.963088587257942890, -0.963102045286325480, -0.963115500906953190, +-0.963128954119791940, -0.963142404924808400, -0.963155853321968850, -0.963169299311239730, -0.963182742892587210, -0.963196184065977960, -0.963209622831378120, -0.963223059188754390, +-0.963236493138072910, -0.963249924679300260, -0.963263353812402800, -0.963276780537346890, -0.963290204854099000, -0.963303626762625600, -0.963317046262893270, -0.963330463354868160, +-0.963343878038517070, -0.963357290313806120, -0.963370700180702030, -0.963384107639171150, -0.963397512689180060, -0.963410915330695120, -0.963424315563682910, -0.963437713388109910, +-0.963451108803942690, -0.963464501811147620, -0.963477892409691390, -0.963491280599540370, -0.963504666380661120, -0.963518049753020240, -0.963531430716584200, -0.963544809271319690, +-0.963558185417193070, -0.963571559154170920, -0.963584930482219940, -0.963598299401306700, -0.963611665911397570, -0.963625030012459470, -0.963638391704458640, -0.963651750987361890, +-0.963665107861135680, -0.963678462325746830, -0.963691814381161690, -0.963705164027347180, -0.963718511264269660, -0.963731856091895820, -0.963745198510192360, -0.963758538519125960, +-0.963771876118663220, -0.963785211308770820, -0.963798544089415340, -0.963811874460563490, -0.963825202422181950, -0.963838527974237410, -0.963851851116696580, -0.963865171849526030, +-0.963878490172692670, -0.963891806086162980, -0.963905119589903880, -0.963918430683881830, -0.963931739368063870, -0.963945045642416450, -0.963958349506906510, -0.963971650961500610, +-0.963984950006165690, -0.963998246640868190, -0.964011540865575280, -0.964024832680253410, -0.964038122084869500, -0.964051409079390240, -0.964064693663782560, -0.964077975838013130, +-0.964091255602048670, -0.964104532955856190, -0.964117807899402270, -0.964131080432653830, -0.964144350555577790, -0.964157618268140840, -0.964170883570309780, -0.964184146462051530, +-0.964197406943332890, -0.964210665014120780, -0.964223920674382010, -0.964237173924083480, -0.964250424763191890, -0.964263673191674390, -0.964276919209497540, -0.964290162816628600, +-0.964303404013034050, -0.964316642798681120, -0.964329879173536630, -0.964343113137567260, -0.964356344690740270, -0.964369573833022240, -0.964382800564380420, -0.964396024884781600, +-0.964409246794192710, -0.964422466292580660, -0.964435683379912480, -0.964448898056155080, -0.964462110321275380, -0.964475320175240510, -0.964488527618017290, -0.964501732649572730, +-0.964514935269873860, -0.964528135478887600, -0.964541333276581090, -0.964554528662921130, -0.964567721637874960, -0.964580912201409510, -0.964594100353491690, -0.964607286094088750, +-0.964620469423167370, -0.964633650340695040, -0.964646828846638440, -0.964660004940964820, -0.964673178623641210, -0.964686349894634640, -0.964699518753912130, -0.964712685201440930, +-0.964725849237187960, -0.964739010861120350, -0.964752170073205240, -0.964765326873409770, -0.964778481261700850, -0.964791633238045840, -0.964804782802411660, -0.964817929954765560, +-0.964831074695074560, -0.964844217023306030, -0.964857356939426870, -0.964870494443404340, -0.964883629535205570, -0.964896762214797700, -0.964909892482147980, -0.964923020337223440, +-0.964936145779991430, -0.964949268810419090, -0.964962389428473570, -0.964975507634121990, -0.964988623427331600, -0.965001736808069780, -0.965014847776303530, -0.965027956332000230, +-0.965041062475127000, -0.965054166205651100, -0.965067267523539880, -0.965080366428760380, -0.965093462921279950, -0.965106557001065960, -0.965119648668085530, -0.965132737922306030, +-0.965145824763694590, -0.965158909192218690, -0.965171991207845470, -0.965185070810542280, -0.965198148000276370, -0.965211222777015100, -0.965224295140725830, -0.965237365091375810, +-0.965250432628932290, -0.965263497753362840, -0.965276560464634500, -0.965289620762714850, -0.965302678647571020, -0.965315734119170710, -0.965328787177480940, -0.965341837822469180, +-0.965354886054102800, -0.965367931872349370, -0.965380975277176030, -0.965394016268550150, -0.965407054846439290, -0.965420091010810830, -0.965433124761632120, -0.965446156098870630, +-0.965459185022493730, -0.965472211532468760, -0.965485235628763430, -0.965498257311344980, -0.965511276580180770, -0.965524293435238490, -0.965537307876485400, -0.965550319903889060, +-0.965563329517416970, -0.965576336717036470, -0.965589341502715250, -0.965602343874420570, -0.965615343832120110, -0.965628341375781240, -0.965641336505371540, -0.965654329220858480, +-0.965667319522209630, -0.965680307409392480, -0.965693292882374490, -0.965706275941123350, -0.965719256585606420, -0.965732234815791510, -0.965745210631645870, -0.965758184033137290, +-0.965771155020233140, -0.965784123592901220, -0.965797089751108890, -0.965810053494823960, -0.965823014824013780, -0.965835973738646160, -0.965848930238688560, -0.965861884324108690, +-0.965874835994874000, -0.965887785250952310, -0.965900732092311090, -0.965913676518918020, -0.965926618530740910, -0.965939558127747120, -0.965952495309904460, -0.965965430077180610, +-0.965978362429543160, -0.965991292366959800, -0.966004219889398220, -0.966017144996826000, -0.966030067689211070, -0.966042987966520770, -0.966055905828723250, -0.966068821275785750, +-0.966081734307676300, -0.966094644924362480, -0.966107553125812090, -0.966120458911992830, -0.966133362282872390, -0.966146263238418460, -0.966159161778599060, -0.966172057903381680, +-0.966184951612734100, -0.966197842906624140, -0.966210731785019590, -0.966223618247888270, -0.966236502295197860, -0.966249383926916170, -0.966262263143011000, -0.966275139943450270, +-0.966288014328201660, -0.966300886297232990, -0.966313755850512050, -0.966326622988006870, -0.966339487709685030, -0.966352350015514450, -0.966365209905463040, -0.966378067379498610, +-0.966390922437588950, -0.966403775079702100, -0.966416625305805630, -0.966429473115867800, -0.966442318509856180, -0.966455161487738800, -0.966468002049483580, -0.966480840195058200, +-0.966493675924430810, -0.966506509237569200, -0.966519340134441410, -0.966532168615015120, -0.966544994679258470, -0.966557818327139380, -0.966570639558625770, -0.966583458373685420, +-0.966596274772286490, -0.966609088754396880, -0.966621900319984630, -0.966634709469017530, -0.966647516201463720, -0.966660320517291010, -0.966673122416467630, -0.966685921898961410, +-0.966698718964740360, -0.966711513613772500, -0.966724305846025870, -0.966737095661468480, -0.966749883060068370, -0.966762668041793560, -0.966775450606611960, -0.966788230754491940, +-0.966801008485401180, -0.966813783799307940, -0.966826556696180230, -0.966839327175986200, -0.966852095238693750, -0.966864860884271150, -0.966877624112686410, -0.966890384923907550, +-0.966903143317902720, -0.966915899294640060, -0.966928652854087690, -0.966941403996213640, -0.966954152720986060, -0.966966899028373180, -0.966979642918343040, -0.966992384390863660, +-0.967005123445903500, -0.967017860083430380, -0.967030594303412650, -0.967043326105818450, -0.967056055490616020, -0.967068782457773280, -0.967081507007258700, -0.967094229139040310, +-0.967106948853086460, -0.967119666149365060, -0.967132381027844600, -0.967145093488493200, -0.967157803531279110, -0.967170511156170360, -0.967183216363135420, -0.967195919152142540, +-0.967208619523159620, -0.967221317476155360, -0.967234013011097680, -0.967246706127955050, -0.967259396826695590, -0.967272085107287790, -0.967284770969699560, -0.967297454413899580, +-0.967310135439855890, -0.967322814047536840, -0.967335490236910790, -0.967348164007945990, -0.967360835360610790, -0.967373504294873570, -0.967386170810702440, -0.967398834908066000, +-0.967411496586932370, -0.967424155847270150, -0.967436812689047470, -0.967449467112232670, -0.967462119116794360, -0.967474768702700660, -0.967487415869920040, -0.967500060618420870, +-0.967512702948171600, -0.967525342859140600, -0.967537980351296230, -0.967550615424606740, -0.967563248079040930, -0.967575878314566930, -0.967588506131153210, -0.967601131528768140, +-0.967613754507380410, -0.967626375066958140, -0.967638993207470040, -0.967651608928884470, -0.967664222231169880, -0.967676833114294640, -0.967689441578227340, -0.967702047622936550, +-0.967714651248390510, -0.967727252454557930, -0.967739851241407160, -0.967752447608906770, -0.967765041557025250, -0.967777633085731170, -0.967790222194993000, -0.967802808884779320, +-0.967815393155058490, -0.967827975005799310, -0.967840554436970040, -0.967853131448539570, -0.967865706040476170, -0.967878278212748520, -0.967890847965325100, -0.967903415298174700, +-0.967915980211265680, -0.967928542704566740, -0.967941102778046350, -0.967953660431673300, -0.967966215665416070, -0.967978768479243360, -0.967991318873123730, -0.968003866847025660, +-0.968016412400918070, -0.968028955534769310, -0.968041496248548290, -0.968054034542223500, -0.968066570415763610, -0.968079103869137310, -0.968091634902313200, -0.968104163515260070, +-0.968116689707946510, -0.968129213480341200, -0.968141734832412840, -0.968154253764130220, -0.968166770275461940, -0.968179284366376680, -0.968191796036843240, -0.968204305286830320, +-0.968216812116306610, -0.968229316525241020, -0.968241818513601920, -0.968254318081358420, -0.968266815228479020, -0.968279309954932720, -0.968291802260688010, -0.968304292145713900, +-0.968316779609978970, -0.968329264653452150, -0.968341747276102120, -0.968354227477897790, -0.968366705258807860, -0.968379180618801130, -0.968391653557846510, -0.968404124075912700, +-0.968416592172968600, -0.968429057848983030, -0.968441521103924790, -0.968453981937762780, -0.968466440350465810, -0.968478896342002790, -0.968491349912342430, -0.968503801061453730, +-0.968516249789305620, -0.968528696095866670, -0.968541139981106140, -0.968553581444992710, -0.968566020487495400, -0.968578457108583040, -0.968590891308224510, -0.968603323086388630, +-0.968615752443044540, -0.968628179378161150, -0.968640603891707250, -0.968653025983651770, -0.968665445653963840, -0.968677862902612150, -0.968690277729565950, -0.968702690134793930, +-0.968715100118265340, -0.968727507679948860, -0.968739912819813640, -0.968752315537828700, -0.968764715833962950, -0.968777113708185420, -0.968789509160465020, -0.968801902190771000, +-0.968814292799072050, -0.968826680985337530, -0.968839066749536130, -0.968851450091637200, -0.968863831011609560, -0.968876209509422440, -0.968888585585044760, -0.968900959238445660, +-0.968913330469594050, -0.968925699278459170, -0.968938065665010060, -0.968950429629215740, -0.968962791171045450, -0.968975150290468100, -0.968987506987452840, -0.968999861261968910, +-0.969012213113985220, -0.969024562543471020, -0.969036909550395560, -0.969049254134727640, -0.969061596296436730, -0.969073936035491750, -0.969086273351861930, -0.969098608245516410, +-0.969110940716424450, -0.969123270764554960, -0.969135598389877510, -0.969147923592360900, -0.969160246371974620, -0.969172566728687570, -0.969184884662469330, -0.969197200173288700, +-0.969209513261115040, -0.969221823925917710, -0.969234132167665740, -0.969246437986328590, -0.969258741381875180, -0.969271042354274970, -0.969283340903497100, -0.969295637029511050, +-0.969307930732285720, -0.969320222011790690, -0.969332510867994990, -0.969344797300868090, -0.969357081310379230, -0.969369362896497560, -0.969381642059192530, -0.969393918798433510, +-0.969406193114189520, -0.969418465006430140, -0.969430734475124510, -0.969443001520242210, -0.969455266141752260, -0.969467528339624240, -0.969479788113827400, -0.969492045464330990, +-0.969504300391104580, -0.969516552894117310, -0.969528802973338650, -0.969541050628738080, -0.969553295860284830, -0.969565538667948370, -0.969577779051698060, -0.969590017011503270, +-0.969602252547333450, -0.969614485659157980, -0.969626716346946420, -0.969638944610667910, -0.969651170450292140, -0.969663393865788370, -0.969675614857126170, -0.969687833424274890, +-0.969700049567204130, -0.969712263285883220, -0.969724474580281550, -0.969736683450368790, -0.969748889896114190, -0.969761093917487550, -0.969773295514458010, -0.969785494686995380, +-0.969797691435068890, -0.969809885758648240, -0.969822077657702790, -0.969834267132202220, -0.969846454182116010, -0.969858638807413630, -0.969870821008064650, -0.969883000784038660, +-0.969895178135305120, -0.969907353061833620, -0.969919525563593730, -0.969931695640555150, -0.969943863292687110, -0.969956028519959660, -0.969968191322342020, -0.969980351699803900, +-0.969992509652314870, -0.970004665179844630, -0.970016818282362750, -0.970028968959838700, -0.970041117212242290, -0.970053263039543090, -0.970065406441710800, -0.970077547418714880, +-0.970089685970525140, -0.970101822097111270, -0.970113955798442730, -0.970126087074489330, -0.970138215925220760, -0.970150342350606600, -0.970162466350616650, -0.970174587925220380, +-0.970186707074387810, -0.970198823798088420, -0.970210938096291890, -0.970223049968968130, -0.970235159416086730, -0.970247266437617380, -0.970259371033529880, -0.970271473203793920, +-0.970283572948379300, -0.970295670267255830, -0.970307765160393080, -0.970319857627760960, -0.970331947669329180, -0.970344035285067630, -0.970356120474945790, -0.970368203238933800, +-0.970380283577001230, -0.970392361489118120, -0.970404436975253910, -0.970416510035378650, -0.970428580669462140, -0.970440648877474170, -0.970452714659384650, -0.970464778015163290, +-0.970476838944779980, -0.970488897448204550, -0.970500953525406880, -0.970513007176356800, -0.970525058401024320, -0.970537107199379130, -0.970549153571391150, -0.970561197517030290, +-0.970573239036266470, -0.970585278129069470, -0.970597314795409340, -0.970609349035255970, -0.970621380848579180, -0.970633410235348880, -0.970645437195535090, -0.970657461729107720, +-0.970669483836036790, -0.970681503516292010, -0.970693520769843500, -0.970705535596661280, -0.970717547996715170, -0.970729557969975180, -0.970741565516411220, -0.970753570635993430, +-0.970765573328691730, -0.970777573594476140, -0.970789571433316460, -0.970801566845182930, -0.970813559830045470, -0.970825550387874210, -0.970837538518638970, -0.970849524222309970, +-0.970861507498857020, -0.970873488348250380, -0.970885466770460060, -0.970897442765455980, -0.970909416333208370, -0.970921387473687280, -0.970933356186862610, -0.970945322472704600, +-0.970957286331183280, -0.970969247762268670, -0.970981206765931030, -0.970993163342140360, -0.971005117490866710, -0.971017069212080310, -0.971029018505751300, -0.971040965371849700, +-0.971052909810345640, -0.971064851821209380, -0.971076791404410940, -0.971088728559920570, -0.971100663287708390, -0.971112595587744430, -0.971124525459999060, -0.971136452904442390, +-0.971148377921044580, -0.971160300509775860, -0.971172220670606380, -0.971184138403506260, -0.971196053708445860, -0.971207966585395430, -0.971219877034324890, -0.971231785055204800, +-0.971243690648005200, -0.971255593812696330, -0.971267494549248540, -0.971279392857631980, -0.971291288737816890, -0.971303182189773630, -0.971315073213472440, -0.971326961808883560, +-0.971338847975977250, -0.971350731714723860, -0.971362613025093640, -0.971374491907056830, -0.971386368360583790, -0.971398242385644870, -0.971410113982210440, -0.971421983150250520, +-0.971433849889735800, -0.971445714200636410, -0.971457576082922710, -0.971469435536565060, -0.971481292561533930, -0.971493147157799440, -0.971504999325332190, -0.971516849064102290, +-0.971528696374080350, -0.971540541255236700, -0.971552383707541710, -0.971564223730965740, -0.971576061325479130, -0.971587896491052480, -0.971599729227656030, -0.971611559535260240, +-0.971623387413835580, -0.971635212863352530, -0.971647035883781320, -0.971658856475092650, -0.971670674637256760, -0.971682490370244230, -0.971694303674025320, -0.971706114548570810, +-0.971717922993850960, -0.971729729009836340, -0.971741532596497310, -0.971753333753804570, -0.971765132481728470, -0.971776928780239470, -0.971788722649308160, -0.971800514088905110, +-0.971812303099000680, -0.971824089679565570, -0.971835873830570240, -0.971847655551985160, -0.971859434843781010, -0.971871211705928270, -0.971882986138397520, -0.971894758141159220, +-0.971906527714184070, -0.971918294857442520, -0.971930059570905390, -0.971941821854543030, -0.971953581708326130, -0.971965339132225160, -0.971977094126211030, -0.971988846690253980, +-0.972000596824324940, -0.972012344528394360, -0.972024089802433040, -0.972035832646411360, -0.972047573060300100, -0.972059311044069950, -0.972071046597691610, -0.972082779721135440, +-0.972094510414372560, -0.972106238677373220, -0.972117964510108350, -0.972129687912548610, -0.972141408884664600, -0.972153127426427120, -0.972164843537806740, -0.972176557218774270, +-0.972188268469300400, -0.972199977289355920, -0.972211683678911420, -0.972223387637937810, -0.972235089166405660, -0.972246788264285900, -0.972258484931548980, -0.972270179168166050, +-0.972281870974107450, -0.972293560349344330, -0.972305247293847260, -0.972316931807587160, -0.972328613890534600, -0.972340293542660610, -0.972351970763935760, -0.972363645554331080, +-0.972375317913817260, -0.972386987842365210, -0.972398655339945630, -0.972410320406529420, -0.972421983042087380, -0.972433643246590430, -0.972445301020009370, -0.972456956362314990, +-0.972468609273478330, -0.972480259753469970, -0.972491907802261140, -0.972503553419822420, -0.972515196606124950, -0.972526837361139320, -0.972538475684836760, -0.972550111577187960, +-0.972561745038163840, -0.972573376067735310, -0.972585004665873500, -0.972596630832549100, -0.972608254567733140, -0.972619875871396530, -0.972631494743510180, -0.972643111184045120, +-0.972654725192972250, -0.972666336770262710, -0.972677945915887190, -0.972689552629816820, -0.972701156912022640, -0.972712758762475540, -0.972724358181146440, -0.972735955168006590, +-0.972747549723026790, -0.972759141846178070, -0.972770731537431540, -0.972782318796758250, -0.972793903624129100, -0.972805486019515220, -0.972817065982887530, -0.972828643514217270, +-0.972840218613475360, -0.972851791280632930, -0.972863361515661110, -0.972874929318530700, -0.972886494689213070, -0.972898057627679220, -0.972909618133900200, -0.972921176207847130, +-0.972932731849491140, -0.972944285058803260, -0.972955835835754730, -0.972967384180316590, -0.972978930092459950, -0.972990473572156070, -0.973002014619375970, -0.973013553234090780, +-0.973025089416271750, -0.973036623165890010, -0.973048154482916710, -0.973059683367323070, -0.973071209819080130, -0.973082733838159240, -0.973094255424531430, -0.973105774578168050, +-0.973117291299040230, -0.973128805587119230, -0.973140317442376060, -0.973151826864782300, -0.973163333854308750, -0.973174838410927000, -0.973186340534608170, -0.973197840225323520, +-0.973209337483044170, -0.973220832307741480, -0.973232324699386700, -0.973243814657951180, -0.973255302183406170, -0.973266787275722800, -0.973278269934872430, -0.973289750160826530, +-0.973301227953556230, -0.973312703313032770, -0.973324176239227620, -0.973335646732111930, -0.973347114791657250, -0.973358580417834630, -0.973370043610615740, -0.973381504369971620, +-0.973392962695873830, -0.973404418588293520, -0.973415872047202260, -0.973427323072571180, -0.973438771664371980, -0.973450217822575680, -0.973461661547153970, -0.973473102838078090, +-0.973484541695319390, -0.973495978118849360, -0.973507412108639450, -0.973518843664661020, -0.973530272786885310, -0.973541699475284130, -0.973553123729828500, -0.973564545550490210, +-0.973575964937240410, -0.973587381890050900, -0.973598796408892800, -0.973610208493737690, -0.973621618144557170, -0.973633025361322570, -0.973644430144005260, -0.973655832492577030, +-0.973667232407009250, -0.973678629887273270, -0.973690024933340780, -0.973701417545183250, -0.973712807722772130, -0.973724195466079020, -0.973735580775075380, -0.973746963649732790, +-0.973758344090022820, -0.973769722095917060, -0.973781097667386850, -0.973792470804404010, -0.973803841506939990, -0.973815209774966270, -0.973826575608454650, -0.973837939007376470, +-0.973849299971703550, -0.973860658501407240, -0.973872014596459450, -0.973883368256831530, -0.973894719482495170, -0.973906068273422080, -0.973917414629583810, -0.973928758550951960, +-0.973940100037498200, -0.973951439089194240, -0.973962775706011750, -0.973974109887922210, -0.973985441634897420, -0.973996770946909060, -0.974008097823928720, -0.974019422265928190, +-0.974030744272879060, -0.974042063844753110, -0.974053380981521940, -0.974064695683157340, -0.974076007949631010, -0.974087317780914730, -0.974098625176980090, -0.974109930137798900, +-0.974121232663342830, -0.974132532753583800, -0.974143830408493280, -0.974155125628043290, -0.974166418412205530, -0.974177708760951670, -0.974188996674253520, -0.974200282152082870, +-0.974211565194411540, -0.974222845801211320, -0.974234123972453900, -0.974245399708111190, -0.974256673008155110, -0.974267943872557220, -0.974279212301289550, -0.974290478294323800, +-0.974301741851631880, -0.974313002973185570, -0.974324261658956800, -0.974335517908917260, -0.974346771723039070, -0.974358023101293820, -0.974369272043653640, -0.974380518550090220, +-0.974391762620575590, -0.974403004255081420, -0.974414243453579740, -0.974425480216042580, -0.974436714542441630, -0.974447946432748900, -0.974459175886936310, -0.974470402904975770, +-0.974481627486839310, -0.974492849632498710, -0.974504069341925900, -0.974515286615093120, -0.974526501451971950, -0.974537713852534630, -0.974548923816752950, -0.974560131344598960, +-0.974571336436044660, -0.974582539091062070, -0.974593739309623120, -0.974604937091699820, -0.974616132437264080, -0.974627325346288150, -0.974638515818743830, -0.974649703854603260, +-0.974660889453838440, -0.974672072616421300, -0.974683253342324090, -0.974694431631518700, -0.974705607483977170, -0.974716780899671730, -0.974727951878574310, -0.974739120420656910, +-0.974750286525891800, -0.974761450194250980, -0.974772611425706590, -0.974783770220230550, -0.974794926577795100, -0.974806080498372360, -0.974817231981934480, -0.974828381028453480, +-0.974839527637901490, -0.974850671810250760, -0.974861813545473300, -0.974872952843541250, -0.974884089704426860, -0.974895224128102370, -0.974906356114539690, -0.974917485663711170, +-0.974928612775588840, -0.974939737450145060, -0.974950859687351960, -0.974961979487181660, -0.974973096849606420, -0.974984211774598490, -0.974995324262129870, -0.975006434312173150, +-0.975017541924700250, -0.975028647099683510, -0.975039749837095070, -0.975050850136907400, -0.975061947999092520, -0.975073043423622780, -0.975084136410470430, -0.975095226959607710, +-0.975106315071006980, -0.975117400744640370, -0.975128483980480350, -0.975139564778499170, -0.975150643138668950, -0.975161719060962160, -0.975172792545351160, -0.975183863591808090, +-0.975194932200305400, -0.975205998370815340, -0.975217062103310270, -0.975228123397762660, -0.975239182254144630, -0.975250238672428660, -0.975261292652587100, -0.975272344194592300, +-0.975283393298416730, -0.975294439964032530, -0.975305484191412390, -0.975316525980528430, -0.975327565331353230, -0.975338602243859040, -0.975349636718018330, -0.975360668753803670, +-0.975371698351187200, -0.975382725510141600, -0.975393750230639010, -0.975404772512652230, -0.975415792356153390, -0.975426809761115180, -0.975437824727509840, -0.975448837255309950, +-0.975459847344487980, -0.975470854995016510, -0.975481860206867780, -0.975492862980014470, -0.975503863314428950, -0.975514861210083790, -0.975525856666951460, -0.975536849685004540, +-0.975547840264215370, -0.975558828404556650, -0.975569814106000970, -0.975580797368520660, -0.975591778192088420, -0.975602756576676610, -0.975613732522258030, -0.975624706028805130, +-0.975635677096290400, -0.975646645724686510, -0.975657611913965940, -0.975668575664101370, -0.975679536975065380, -0.975690495846830540, -0.975701452279369550, -0.975712406272654760, +-0.975723357826659090, -0.975734306941354990, -0.975745253616715160, -0.975756197852712060, -0.975767139649318600, -0.975778079006507260, -0.975789015924250710, -0.975799950402521650, +-0.975810882441292660, -0.975821812040536530, -0.975832739200225840, -0.975843663920333280, -0.975854586200831540, -0.975865506041693420, -0.975876423442891380, -0.975887338404398450, +-0.975898250926187090, -0.975909161008230220, -0.975920068650500290, -0.975930973852970230, -0.975941876615612710, -0.975952776938400660, -0.975963674821306530, -0.975974570264303230, +-0.975985463267363460, -0.975996353830460130, -0.976007241953565920, -0.976018127636653520, -0.976029010879695850, -0.976039891682665580, -0.976050770045535750, -0.976061645968278820, +-0.976072519450867810, -0.976083390493275530, -0.976094259095474870, -0.976105125257438420, -0.976115988979139200, -0.976126850260550020, -0.976137709101643770, -0.976148565502393150, +-0.976159419462771180, -0.976170270982750550, -0.976181120062304400, -0.976191966701405400, -0.976202810900026470, -0.976213652658140530, -0.976224491975720370, -0.976235328852739110, +-0.976246163289169470, -0.976256995284984440, -0.976267824840156840, -0.976278651954659790, -0.976289476628465990, -0.976300298861548680, -0.976311118653880430, -0.976321936005434490, +-0.976332750916183660, -0.976343563386101070, -0.976354373415159400, -0.976365181003331920, -0.976375986150591400, -0.976386788856910990, -0.976397589122263600, -0.976408386946622240, +-0.976419182329959830, -0.976429975272249510, -0.976440765773464390, -0.976451553833577180, -0.976462339452561110, -0.976473122630389210, -0.976483903367034610, -0.976494681662470110, +-0.976505457516668950, -0.976516230929604160, -0.976527001901248750, -0.976537770431575860, -0.976548536520558620, -0.976559300168169940, -0.976570061374383070, -0.976580820139171020, +-0.976591576462506940, -0.976602330344363830, -0.976613081784715060, -0.976623830783533430, -0.976634577340792290, -0.976645321456464770, -0.976656063130523780, -0.976666802362942790, +-0.976677539153694710, -0.976688273502752890, -0.976699005410090250, -0.976709734875680140, -0.976720461899495680, -0.976731186481510140, -0.976741908621696520, -0.976752628320028290, +-0.976763345576478370, -0.976774060391020100, -0.976784772763626740, -0.976795482694271410, -0.976806190182927250, -0.976816895229567830, -0.976827597834166060, -0.976838297996695300, +-0.976848995717128800, -0.976859690995439790, -0.976870383831601630, -0.976881074225587450, -0.976891762177370620, -0.976902447686924250, -0.976913130754221930, -0.976923811379236670, +-0.976934489561941950, -0.976945165302311010, -0.976955838600317210, -0.976966509455933660, -0.976977177869133960, -0.976987843839891230, -0.976998507368178950, -0.977009168453970340, +-0.977019827097238890, -0.977030483297957830, -0.977041137056100630, -0.977051788371640530, -0.977062437244551000, -0.977073083674805280, -0.977083727662376940, -0.977094369207239240, +-0.977105008309365640, -0.977115644968729490, -0.977126279185304260, -0.977136910959063300, -0.977147540289980080, -0.977158167178028060, -0.977168791623180490, -0.977179413625411050, +-0.977190033184693110, -0.977200650301000010, -0.977211264974305330, -0.977221877204582420, -0.977232486991804870, -0.977243094335946140, -0.977253699236979580, -0.977264301694878880, +-0.977274901709617280, -0.977285499281168590, -0.977296094409506040, -0.977306687094603330, -0.977317277336433810, -0.977327865134971160, -0.977338450490188860, -0.977349033402060360, +-0.977359613870559360, -0.977370191895659320, -0.977380767477333710, -0.977391340615556330, -0.977401911310300520, -0.977412479561539870, -0.977423045369248070, -0.977433608733398680, +-0.977444169653965300, -0.977454728130921380, -0.977465284164240720, -0.977475837753896790, -0.977486388899863390, -0.977496937602113980, -0.977507483860622140, -0.977518027675361670, +-0.977528569046306140, -0.977539107973429130, -0.977549644456704340, -0.977560178496105550, -0.977570710091606120, -0.977581239243180080, -0.977591765950800880, -0.977602290214442340, +-0.977612812034078020, -0.977623331409681610, -0.977633848341226910, -0.977644362828687610, -0.977654874872037390, -0.977665384471250070, -0.977675891626299200, -0.977686396337158590, +-0.977696898603802040, -0.977707398426203240, -0.977717895804335880, -0.977728390738173860, -0.977738883227690870, -0.977749373272860600, -0.977759860873656960, -0.977770346030053530, +-0.977780828742024430, -0.977791309009543140, -0.977801786832583560, -0.977812262211119610, -0.977822735145124970, -0.977833205634573430, -0.977843673679438920, -0.977854139279695220, +-0.977864602435316250, -0.977875063146275700, -0.977885521412547480, -0.977895977234105480, -0.977906430610923530, -0.977916881542975510, -0.977927330030235350, -0.977937776072676730, +-0.977948219670273790, -0.977958660823000200, -0.977969099530830000, -0.977979535793737090, -0.977989969611695380, -0.978000400984678660, -0.978010829912660860, -0.978021256395616210, +-0.978031680433518180, -0.978042102026341120, -0.978052521174058720, -0.978062937876645110, -0.978073352134074090, -0.978083763946319680, -0.978094173313355800, -0.978104580235156670, +-0.978114984711695890, -0.978125386742947800, -0.978135786328886090, -0.978146183469485120, -0.978156578164718570, -0.978166970414560580, -0.978177360218985160, -0.978187747577966340, +-0.978198132491478130, -0.978208514959494680, -0.978218894981989880, -0.978229272558937770, -0.978239647690312570, -0.978250020376088210, -0.978260390616238930, -0.978270758410738520, +-0.978281123759561220, -0.978291486662681180, -0.978301847120072400, -0.978312205131709020, -0.978322560697565070, -0.978332913817614780, -0.978343264491832180, -0.978353612720191500, +-0.978363958502666660, -0.978374301839232020, -0.978384642729861590, -0.978394981174529500, -0.978405317173210000, -0.978415650725877220, -0.978425981832505290, -0.978436310493068450, +-0.978446636707540840, -0.978456960475896590, -0.978467281798109930, -0.978477600674155120, -0.978487917104006180, -0.978498231087637560, -0.978508542625023400, -0.978518851716137840, +-0.978529158360955110, -0.978539462559449570, -0.978549764311595240, -0.978560063617366580, -0.978570360476737840, -0.978580654889683150, -0.978590946856176760, -0.978601236376193010, +-0.978611523449706260, -0.978621808076690640, -0.978632090257120500, -0.978642369990970100, -0.978652647278213880, -0.978662922118825880, -0.978673194512780680, -0.978683464460052500, +-0.978693731960615710, -0.978703997014444440, -0.978714259621513260, -0.978724519781796420, -0.978734777495268380, -0.978745032761903280, -0.978755285581675570, -0.978765535954559730, +-0.978775783880530100, -0.978786029359560940, -0.978796272391626700, -0.978806512976701740, -0.978816751114760520, -0.978826986805777510, -0.978837220049726950, -0.978847450846583310, +-0.978857679196321160, -0.978867905098914750, -0.978878128554338530, -0.978888349562566980, -0.978898568123574670, -0.978908784237335850, -0.978918997903825080, -0.978929209123016840, +-0.978939417894885590, -0.978949624219405790, -0.978959828096551910, -0.978970029526298520, -0.978980228508619990, -0.978990425043490880, -0.979000619130885760, -0.979010810770779010, +-0.979020999963145290, -0.979031186707959080, -0.979041371005194950, -0.979051552854827260, -0.979061732256830800, -0.979071909211179920, -0.979082083717849330, -0.979092255776813580, +-0.979102425388047150, -0.979112592551524610, -0.979122757267220640, -0.979132919535109720, -0.979143079355166530, -0.979153236727365650, -0.979163391651681760, -0.979173544128089320, +-0.979183694156562920, -0.979193841737077460, -0.979203986869607300, -0.979214129554127120, -0.979224269790611720, -0.979234407579035570, -0.979244542919373460, -0.979254675811599970, +-0.979264806255689790, -0.979274934251617600, -0.979285059799358090, -0.979295182898885950, -0.979305303550175750, -0.979315421753202410, -0.979325537507940380, -0.979335650814364690, +-0.979345761672449690, -0.979355870082170400, -0.979365976043501400, -0.979376079556417480, -0.979386180620893440, -0.979396279236903760, -0.979406375404423550, -0.979416469123427280, +-0.979426560393889870, -0.979436649215786100, -0.979446735589090680, -0.979456819513778500, -0.979466900989824140, -0.979476980017202630, -0.979487056595888640, -0.979497130725856980, +-0.979507202407082560, -0.979517271639540050, -0.979527338423204390, -0.979537402758050350, -0.979547464644052850, -0.979557524081186680, -0.979567581069426760, -0.979577635608747780, +-0.979587687699124740, -0.979597737340532570, -0.979607784532945950, -0.979617829276340000, -0.979627871570689310, -0.979637911415969010, -0.979647948812154000, -0.979657983759219090, +-0.979668016257139170, -0.979678046305889170, -0.979688073905444100, -0.979698099055778870, -0.979708121756868390, -0.979718142008687680, -0.979728159811211530, -0.979738175164414970, +-0.979748188068273020, -0.979758198522760580, -0.979768206527852570, -0.979778212083524110, -0.979788215189750120, -0.979798215846505620, -0.979808214053765610, -0.979818209811504910, +-0.979828203119698870, -0.979838193978322170, -0.979848182387350050, -0.979858168346757540, -0.979868151856519540, -0.979878132916611080, -0.979888111527007500, -0.979898087687683490, +-0.979908061398614310, -0.979918032659774840, -0.979928001471140450, -0.979937967832686050, -0.979947931744386660, -0.979957893206217510, -0.979967852218153520, -0.979977808780170050, +-0.979987762892241990, -0.979997714554344480, -0.980007663766452760, -0.980017610528541860, -0.980027554840586900, -0.980037496702563020, -0.980047436114445450, -0.980057373076209330, +-0.980067307587829670, -0.980077239649281840, -0.980087169260540850, -0.980097096421581940, -0.980107021132380350, -0.980116943392911220, -0.980126863203149570, -0.980136780563070960, +-0.980146695472650320, -0.980156607931862880, -0.980166517940683990, -0.980176425499088790, -0.980186330607052510, -0.980196233264550410, -0.980206133471557830, -0.980216031228049790, +-0.980225926534001760, -0.980235819389388750, -0.980245709794186350, -0.980255597748369680, -0.980265483251913980, -0.980275366304794500, -0.980285246906986710, -0.980295125058465720, +-0.980305000759207010, -0.980314874009185710, -0.980324744808377280, -0.980334613156756960, -0.980344479054300110, -0.980354342500982080, -0.980364203496778220, -0.980374062041663770, +-0.980383918135614210, -0.980393771778604870, -0.980403622970611120, -0.980413471711608200, -0.980423318001571680, -0.980433161840476910, -0.980443003228299140, -0.980452842165013940, +-0.980462678650596660, -0.980472512685022670, -0.980482344268267300, -0.980492173400306140, -0.980502000081114540, -0.980511824310667970, -0.980521646088941770, -0.980531465415911520, +-0.980541282291552570, -0.980551096715840400, -0.980560908688750570, -0.980570718210258430, -0.980580525280339450, -0.980590329898969220, -0.980600132066123060, -0.980609931781776690, +-0.980619729045905440, -0.980629523858484900, -0.980639316219490520, -0.980649106128897770, -0.980658893586682350, -0.980668678592819700, -0.980678461147285410, -0.980688241250054830, +-0.980698018901103750, -0.980707794100407540, -0.980717566847941870, -0.980727337143682320, -0.980737104987604470, -0.980746870379683780, -0.980756633319895930, -0.980766393808216510, +-0.980776151844621080, -0.980785907429085340, -0.980795660561584740, -0.980805411242095080, -0.980815159470591840, -0.980824905247050680, -0.980834648571447310, -0.980844389443757290, +-0.980854127863956200, -0.980863863832019960, -0.980873597347924010, -0.980883328411644050, -0.980893057023155770, -0.980902783182434850, -0.980912506889456860, -0.980922228144197830, +-0.980931946946632990, -0.980941663296738490, -0.980951377194489660, -0.980961088639862530, -0.980970797632832570, -0.980980504173375790, -0.980990208261467540, -0.980999909897083850, +-0.981009609080200410, -0.981019305810793000, -0.981029000088837200, -0.981038691914308920, -0.981048381287183970, -0.981058068207438130, -0.981067752675046980, -0.981077434689986540, +-0.981087114252232500, -0.981096791361760650, -0.981106466018546790, -0.981116138222566820, -0.981125807973796450, -0.981135475272211570, -0.981145140117788080, -0.981154802510501690, +-0.981164462450328290, -0.981174119937243790, -0.981183774971223890, -0.981193427552244590, -0.981203077680281700, -0.981212725355311230, -0.981222370577308880, -0.981232013346250540, +-0.981241653662112250, -0.981251291524869780, -0.981260926934499070, -0.981270559890976110, -0.981280190394276720, -0.981289818444376790, -0.981299444041252360, -0.981309067184879420, +-0.981318687875233690, -0.981328306112291270, -0.981337921896028090, -0.981347535226420040, -0.981357146103443270, -0.981366754527073560, -0.981376360497287050, -0.981385964014059530, +-0.981395565077367140, -0.981405163687185890, -0.981414759843491690, -0.981424353546260560, -0.981433944795468530, -0.981443533591091710, -0.981453119933106020, -0.981462703821487590, +-0.981472285256212330, -0.981481864237256360, -0.981491440764595710, -0.981501014838206510, -0.981510586458064770, -0.981520155624146520, -0.981529722336427990, -0.981539286594884990, +-0.981548848399493970, -0.981558407750230730, -0.981567964647071410, -0.981577519089992250, -0.981587071078969250, -0.981596620613978570, -0.981606167694996420, -0.981615712321998850, +-0.981625254494961850, -0.981634794213861910, -0.981644331478674800, -0.981653866289377010, -0.981663398645944430, -0.981672928548353420, -0.981682455996580110, -0.981691980990600620, +-0.981701503530391210, -0.981711023615927990, -0.981720541247187330, -0.981730056424145240, -0.981739569146777960, -0.981749079415061840, -0.981758587228973020, -0.981768092588487630, +-0.981777595493582120, -0.981787095944232520, -0.981796593940415300, -0.981806089482106460, -0.981815582569282470, -0.981825073201919580, -0.981834561379993920, -0.981844047103481940, +-0.981853530372359780, -0.981863011186603800, -0.981872489546190330, -0.981881965451095520, -0.981891438901295930, -0.981900909896767700, -0.981910378437487190, -0.981919844523430730, +-0.981929308154574690, -0.981938769330895410, -0.981948228052369140, -0.981957684318972230, -0.981967138130681260, -0.981976589487472350, -0.981986038389321970, -0.981995484836206580, +-0.982004928828102420, -0.982014370364985960, -0.982023809446833430, -0.982033246073621520, -0.982042680245326480, -0.982052111961924770, -0.982061541223392730, -0.982070968029706840, +-0.982080392380843550, -0.982089814276779330, -0.982099233717490420, -0.982108650702953610, -0.982118065233145040, -0.982127477308041400, -0.982136886927619020, -0.982146294091854390, +-0.982155698800724060, -0.982165101054204510, -0.982174500852272200, -0.982183898194903590, -0.982193293082075260, -0.982202685513763660, -0.982212075489945490, -0.982221463010596980, +-0.982230848075694830, -0.982240230685215600, -0.982249610839135870, -0.982258988537431990, -0.982268363780080640, -0.982277736567058410, -0.982287106898341870, -0.982296474773907580, +-0.982305840193732020, -0.982315203157791970, -0.982324563666063800, -0.982333921718524290, -0.982343277315149920, -0.982352630455917470, -0.982361981140803310, -0.982371329369784330, +-0.982380675142836890, -0.982390018459937900, -0.982399359321063700, -0.982408697726191220, -0.982418033675297010, -0.982427367168357660, -0.982436698205349850, -0.982446026786250370, +-0.982455352911035810, -0.982464676579682950, -0.982473997792168260, -0.982483316548468650, -0.982492632848560700, -0.982501946692421190, -0.982511258080026820, -0.982520567011354370, +-0.982529873486380430, -0.982539177505081800, -0.982548479067435250, -0.982557778173417500, -0.982567074823005320, -0.982576369016175400, -0.982585660752904650, -0.982594950033169660, +-0.982604236856947310, -0.982613521224214410, -0.982622803134947650, -0.982632082589123930, -0.982641359586719940, -0.982650634127712590, -0.982659906212078770, -0.982669175839794960, +-0.982678443010838400, -0.982687707725185660, -0.982696969982813640, -0.982706229783699260, -0.982715487127819200, -0.982724742015150590, -0.982733994445669890, -0.982743244419354460, +-0.982752491936180750, -0.982761736996125790, -0.982770979599166590, -0.982780219745279850, -0.982789457434442680, -0.982798692666631780, -0.982807925441824160, -0.982817155759996730, +-0.982826383621126400, -0.982835609025190180, -0.982844831972164880, -0.982854052462027510, -0.982863270494754970, -0.982872486070324290, -0.982881699188712380, -0.982890909849896240, +-0.982900118053852800, -0.982909323800559060, -0.982918527089992170, -0.982927727922128790, -0.982936926296946070, -0.982946122214421130, -0.982955315674530870, -0.982964506677252330, +-0.982973695222562500, -0.982982881310438430, -0.982992064940857110, -0.983001246113795690, -0.983010424829231180, -0.983019601087140480, -0.983028774887500960, -0.983037946230289390, +-0.983047115115482930, -0.983056281543058690, -0.983065445512993800, -0.983074607025265390, -0.983083766079850260, -0.983092922676725880, -0.983102076815869030, -0.983111228497257180, +-0.983120377720867130, -0.983129524486676120, -0.983138668794661390, -0.983147810644799950, -0.983156950037068930, -0.983166086971445590, -0.983175221447907030, -0.983184353466430410, +-0.983193483026992940, -0.983202610129571770, -0.983211734774144030, -0.983220856960686950, -0.983229976689177660, -0.983239093959593520, -0.983248208771911660, -0.983257321126109310, +-0.983266431022163600, -0.983275538460051780, -0.983284643439751190, -0.983293745961238860, -0.983302846024492360, -0.983311943629488590, -0.983321038776205030, -0.983330131464618780, +-0.983339221694707330, -0.983348309466447800, -0.983357394779817430, -0.983366477634793680, -0.983375558031353680, -0.983384635969474670, -0.983393711449134230, -0.983402784470309490, +-0.983411855032977790, -0.983420923137116380, -0.983429988782702710, -0.983439051969714040, -0.983448112698127820, -0.983457170967921290, -0.983466226779071690, -0.983475280131556720, +-0.983484331025353490, -0.983493379460439350, -0.983502425436791780, -0.983511468954388230, -0.983520510013205950, -0.983529548613222500, -0.983538584754415020, -0.983547618436761200, +-0.983556649660238260, -0.983565678424823790, -0.983574704730495020, -0.983583728577229530, -0.983592749965004680, -0.983601768893798020, -0.983610785363586930, -0.983619799374348850, +-0.983628810926061250, -0.983637820018701700, -0.983646826652247560, -0.983655830826676290, -0.983664832541965460, -0.983673831798092650, -0.983682828595035200, -0.983691822932770690, +-0.983700814811276580, -0.983709804230530450, -0.983718791190509870, -0.983727775691192190, -0.983736757732555200, -0.983745737314576260, -0.983754714437232950, -0.983763689100502940, +-0.983772661304363690, -0.983781631048792680, -0.983790598333767700, -0.983799563159266200, -0.983808525525265760, -0.983817485431744080, -0.983826442878678600, -0.983835397866047010, +-0.983844350393827010, -0.983853300461996040, -0.983862248070531910, -0.983871193219412080, -0.983880135908614340, -0.983889076138116270, -0.983898013907895440, -0.983906949217929540, +-0.983915882068196360, -0.983924812458673470, -0.983933740389338450, -0.983942665860169210, -0.983951588871143200, -0.983960509422238340, -0.983969427513432080, -0.983978343144702340, +-0.983987256316026790, -0.983996167027382910, -0.984005075278748810, -0.984013981070101850, -0.984022884401420050, -0.984031785272680980, -0.984040683683862550, -0.984049579634942330, +-0.984058473125898230, -0.984067364156707810, -0.984076252727349110, -0.984085138837799690, -0.984094022488037460, -0.984102903678040210, -0.984111782407785630, -0.984120658677251630, +-0.984129532486415990, -0.984138403835256530, -0.984147272723751020, -0.984156139151877380, -0.984165003119613410, -0.984173864626936900, -0.984182723673825640, -0.984191580260257660, +-0.984200434386210740, -0.984209286051662690, -0.984218135256591520, -0.984226982000974910, -0.984235826284790890, -0.984244668108017250, -0.984253507470632010, -0.984262344372612950, +-0.984271178813938110, -0.984280010794585270, -0.984288840314532340, -0.984297667373757460, -0.984306491972238300, -0.984315314109952880, -0.984324133786879220, -0.984332951002995230, +-0.984341765758278920, -0.984350578052708090, -0.984359387886260980, -0.984368195258915280, -0.984377000170649110, -0.984385802621440380, -0.984394602611267210, -0.984403400140107520, +-0.984412195207939320, -0.984420987814740630, -0.984429777960489470, -0.984438565645163850, -0.984447350868741910, -0.984456133631201550, -0.984464913932520780, -0.984473691772677850, +-0.984482467151650550, -0.984491240069417240, -0.984500010525955700, -0.984508778521244190, -0.984517544055260710, -0.984526307127983390, -0.984535067739390370, -0.984543825889459550, +-0.984552581578169270, -0.984561334805497460, -0.984570085571422340, -0.984578833875922040, -0.984587579718974590, -0.984596323100558220, -0.984605064020651070, -0.984613802479231250, +-0.984622538476276900, -0.984631272011766260, -0.984640003085677340, -0.984648731697988500, -0.984657457848677750, -0.984666181537723450, -0.984674902765103720, -0.984683621530796580, +-0.984692337834780610, -0.984701051677033590, -0.984709763057533990, -0.984718471976260060, -0.984727178433189910, -0.984735882428301790, -0.984744583961573940, -0.984753283032984710, +-0.984761979642512220, -0.984770673790134720, -0.984779365475830670, -0.984788054699578090, -0.984796741461355540, -0.984805425761140940, -0.984814107598912860, -0.984822786974649530, +-0.984831463888329210, -0.984840138339930230, -0.984848810329430950, -0.984857479856809600, -0.984866146922044550, -0.984874811525114140, -0.984883473665996710, -0.984892133344670630, +-0.984900790561114130, -0.984909445315305780, -0.984918097607223710, -0.984926747436846380, -0.984935394804152260, -0.984944039709119590, -0.984952682151726820, -0.984961322131952420, +-0.984969959649774630, -0.984978594705172020, -0.984987227298122820, -0.984995857428605740, -0.985004485096598770, -0.985013110302080830, -0.985021733045029930, -0.985030353325424770, +-0.985038971143243790, -0.985047586498465240, -0.985056199391067810, -0.985064809821029840, -0.985073417788329910, -0.985082023292946360, -0.985090626334857890, -0.985099226914042720, +-0.985107825030479560, -0.985116420684146730, -0.985125013875022940, -0.985133604603086630, -0.985142192868316280, -0.985150778670690450, -0.985159362010187610, -0.985167942886786440, +-0.985176521300465400, -0.985185097251203070, -0.985193670738978010, -0.985202241763768690, -0.985210810325553910, -0.985219376424312010, -0.985227940060021680, -0.985236501232661490, +-0.985245059942210010, -0.985253616188645930, -0.985262169971947820, -0.985270721292094250, -0.985279270149063910, -0.985287816542835370, -0.985296360473387310, -0.985304901940698310, +-0.985313440944747040, -0.985321977485512310, -0.985330511562972470, -0.985339043177106520, -0.985347572327892830, -0.985356099015310180, -0.985364623239337380, -0.985373144999952990, +-0.985381664297135810, -0.985390181130864300, -0.985398695501117470, -0.985407207407873910, -0.985415716851112290, -0.985424223830811300, -0.985432728346949840, -0.985441230399506600, +-0.985449729988460250, -0.985458227113789500, -0.985466721775473230, -0.985475213973490140, -0.985483703707819130, -0.985492190978438760, -0.985500675785327960, -0.985509158128465400, +-0.985517638007829990, -0.985526115423400410, -0.985534590375155670, -0.985543062863074360, -0.985551532887135480, -0.985560000447317730, -0.985568465543599890, -0.985576928175960990, +-0.985585388344379810, -0.985593846048835040, -0.985602301289305700, -0.985610754065770590, -0.985619204378208600, -0.985627652226598650, -0.985636097610919530, -0.985644540531150250, +-0.985652980987269500, -0.985661418979256410, -0.985669854507089660, -0.985678287570748380, -0.985686718170211250, -0.985695146305457400, -0.985703571976465630, -0.985711995183215060, +-0.985720415925684380, -0.985728834203852710, -0.985737250017698960, -0.985745663367202150, -0.985754074252341070, -0.985762482673094850, -0.985770888629442400, -0.985779292121362730, +-0.985787693148834850, -0.985796091711837800, -0.985804487810350460, -0.985812881444351860, -0.985821272613821130, -0.985829661318737170, -0.985838047559079000, -0.985846431334825860, +-0.985854812645956540, -0.985863191492450160, -0.985871567874285870, -0.985879941791442670, -0.985888313243899580, -0.985896682231635730, -0.985905048754630140, -0.985913412812862040, +-0.985921774406310240, -0.985930133534954070, -0.985938490198772670, -0.985946844397744940, -0.985955196131850120, -0.985963545401067230, -0.985971892205375620, -0.985980236544754200, +-0.985988578419182190, -0.985996917828638740, -0.986005254773102970, -0.986013589252554110, -0.986021921266971300, -0.986030250816333660, -0.986038577900620330, -0.986046902519810640, +-0.986055224673883620, -0.986063544362818620, -0.986071861586594770, -0.986080176345191180, -0.986088488638587220, -0.986096798466762010, -0.986105105829694790, -0.986113410727364800, +-0.986121713159751280, -0.986130013126833570, -0.986138310628590700, -0.986146605665002120, -0.986154898236047070, -0.986163188341704690, -0.986171475981954430, -0.986179761156775300, +-0.986188043866147000, -0.986196324110048430, -0.986204601888459150, -0.986212877201358310, -0.986221150048725240, -0.986229420430539410, -0.986237688346779940, -0.986245953797426300, +-0.986254216782457730, -0.986262477301853570, -0.986270735355593290, -0.986278990943656230, -0.986287244066021530, -0.986295494722668860, -0.986303742913577360, -0.986311988638726600, +-0.986320231898095810, -0.986328472691664460, -0.986336711019411890, -0.986344946881317690, -0.986353180277360960, -0.986361411207521300, -0.986369639671778150, -0.986377865670110880, +-0.986386089202498930, -0.986394310268921880, -0.986402528869358970, -0.986410745003789670, -0.986418958672193540, -0.986427169874550040, -0.986435378610838630, -0.986443584881038780, +-0.986451788685129950, -0.986459990023091590, -0.986468188894903400, -0.986476385300544600, -0.986484579239994890, -0.986492770713233710, -0.986500959720240660, -0.986509146260995170, +-0.986517330335476840, -0.986525511943665110, -0.986533691085539680, -0.986541867761079990, -0.986550041970265750, -0.986558213713076280, -0.986566382989491290, -0.986574549799490330, +-0.986582714143052990, -0.986590876020158940, -0.986599035430787640, -0.986607192374918780, -0.986615346852531830, -0.986623498863606670, -0.986631648408122670, -0.986639795486059620, +-0.986647940097396980, -0.986656082242114540, -0.986664221920191880, -0.986672359131608670, -0.986680493876344600, -0.986688626154379360, -0.986696755965692400, -0.986704883310263630, +-0.986713008188072620, -0.986721130599099160, -0.986729250543322830, -0.986737368020723320, -0.986745483031280510, -0.986753595574973890, -0.986761705651783340, -0.986769813261688440, +-0.986777918404669110, -0.986786021080704900, -0.986794121289775730, -0.986802219031861160, -0.986810314306941220, -0.986818407114995240, -0.986826497456003480, -0.986834585329945280, +-0.986842670736800760, -0.986850753676549510, -0.986858834149171420, -0.986866912154646170, -0.986874987692953680, -0.986883060764073620, -0.986891131367986010, -0.986899199504670640, +-0.986907265174107210, -0.986915328376275600, -0.986923389111155620, -0.986931447378727290, -0.986939503178970170, -0.986947556511864500, -0.986955607377389740, -0.986963655775526140, +-0.986971701706253260, -0.986979745169551230, -0.986987786165399730, -0.986995824693778890, -0.987003860754668390, -0.987011894348048260, -0.987019925473898390, -0.987027954132198790, +-0.987035980322929160, -0.987044004046069730, -0.987052025301600190, -0.987060044089500650, -0.987068060409750920, -0.987076074262331130, -0.987084085647221050, -0.987092094564400830, +-0.987100101013850370, -0.987108104995549680, -0.987116106509478670, -0.987124105555617360, -0.987132102133945870, -0.987140096244444100, -0.987148087887092180, -0.987156077061869920, +-0.987164063768757540, -0.987172048007734950, -0.987180029778782280, -0.987188009081879430, -0.987195985917006640, -0.987203960284143920, -0.987211932183271300, -0.987219901614368790, +-0.987227868577416510, -0.987235833072394600, -0.987243795099283170, -0.987251754658062140, -0.987259711748711740, -0.987267666371212100, -0.987275618525543350, -0.987283568211685500, +-0.987291515429618680, -0.987299460179323130, -0.987307402460778860, -0.987315342273966220, -0.987323279618865120, -0.987331214495455800, -0.987339146903718490, -0.987347076843633320, +-0.987355004315180420, -0.987362929318340130, -0.987370851853092370, -0.987378771919417590, -0.987386689517295800, -0.987394604646707360, -0.987402517307632400, -0.987410427500051040, +-0.987418335223943730, -0.987426240479290510, -0.987434143266071710, -0.987442043584267570, -0.987449941433858340, -0.987457836814824130, -0.987465729727145520, -0.987473620170802420, +-0.987481508145775400, -0.987489393652044580, -0.987497276689590200, -0.987505157258392720, -0.987513035358432270, -0.987520910989689300, -0.987528784152143960, -0.987536654845776800, +-0.987544523070567840, -0.987552388826497650, -0.987560252113546590, -0.987568112931694770, -0.987575971280922670, -0.987583827161210740, -0.987591680572539100, -0.987599531514888330, +-0.987607379988238780, -0.987615225992570790, -0.987623069527864610, -0.987630910594100910, -0.987638749191259820, -0.987646585319321920, -0.987654418978267450, -0.987662250168077070, +-0.987670078888730930, -0.987677905140209700, -0.987685728922493730, -0.987693550235563380, -0.987701369079399210, -0.987709185453981560, -0.987716999359290910, -0.987724810795307830, +-0.987732619762012650, -0.987740426259385960, -0.987748230287408320, -0.987756031846059980, -0.987763830935321610, -0.987771627555173560, -0.987779421705596520, -0.987787213386570940, +-0.987795002598077290, -0.987802789340096240, -0.987810573612608160, -0.987818355415593600, -0.987826134749033140, -0.987833911612907340, -0.987841686007196800, -0.987849457931882060, +-0.987857227386943700, -0.987864994372362190, -0.987872758888118210, -0.987880520934192430, -0.987888280510565210, -0.987896037617217450, -0.987903792254129390, -0.987911544421282040, +-0.987919294118655760, -0.987927041346231220, -0.987934786103989100, -0.987942528391909990, -0.987950268209974560, -0.987958005558163490, -0.987965740436457350, -0.987973472844836940, +-0.987981202783282830, -0.987988930251775700, -0.987996655250296230, -0.988004377778825100, -0.988012097837343120, -0.988019815425830840, -0.988027530544269060, -0.988035243192638360, +-0.988042953370919630, -0.988050661079093450, -0.988058366317140720, -0.988066069085042020, -0.988073769382778130, -0.988081467210329740, -0.988089162567677870, -0.988096855454802970, +-0.988104545871685950, -0.988112233818307590, -0.988119919294648600, -0.988127602300689860, -0.988135282836412050, -0.988142960901796100, -0.988150636496822780, -0.988158309621472770, +-0.988165980275727110, -0.988173648459566350, -0.988181314172971610, -0.988188977415923490, -0.988196638188402980, -0.988204296490390880, -0.988211952321867980, -0.988219605682815190, +-0.988227256573213420, -0.988234904993043560, -0.988242550942286300, -0.988250194420922770, -0.988257835428933750, -0.988265473966300160, -0.988273110033002890, -0.988280743629022850, +-0.988288374754340840, -0.988296003408937970, -0.988303629592795050, -0.988311253305893200, -0.988318874548213100, -0.988326493319735770, -0.988334109620442320, -0.988341723450313570, +-0.988349334809330400, -0.988356943697473960, -0.988364550114725240, -0.988372154061065040, -0.988379755536474500, -0.988387354540934630, -0.988394951074426320, -0.988402545136930600, +-0.988410136728428590, -0.988417725848901200, -0.988425312498329430, -0.988432896676694430, -0.988440478383977190, -0.988448057620158750, -0.988455634385220220, -0.988463208679142610, +-0.988470780501906840, -0.988478349853494250, -0.988485916733885750, -0.988493481143062460, -0.988501043081005500, -0.988508602547695900, -0.988516159543114780, -0.988523714067243260, +-0.988531266120062480, -0.988538815701553550, -0.988546362811697500, -0.988553907450475670, -0.988561449617868960, -0.988568989313858610, -0.988576526538425870, -0.988584061291551850, +-0.988591593573217580, -0.988599123383404390, -0.988606650722093310, -0.988614175589265680, -0.988621697984902630, -0.988629217908985280, -0.988636735361494880, -0.988644250342412660, +-0.988651762851719850, -0.988659272889397590, -0.988666780455427110, -0.988674285549789760, -0.988681788172466660, -0.988689288323439050, -0.988696786002688290, -0.988704281210195600, +-0.988711773945942120, -0.988719264209909190, -0.988726752002078160, -0.988734237322430260, -0.988741720170946750, -0.988749200547608950, -0.988756678452398120, -0.988764153885295590, +-0.988771626846282730, -0.988779097335340750, -0.988786565352451020, -0.988794030897594880, -0.988801493970753680, -0.988808954571908760, -0.988816412701041480, -0.988823868358133070, +-0.988831321543165110, -0.988838772256118710, -0.988846220496975460, -0.988853666265716690, -0.988861109562323760, -0.988868550386778010, -0.988875988739060910, -0.988883424619153790, +-0.988890858027038130, -0.988898288962695380, -0.988905717426106780, -0.988913143417254000, -0.988920566936118410, -0.988927987982681220, -0.988935406556924250, -0.988942822658828600, +-0.988950236288375970, -0.988957647445547820, -0.988965056130325480, -0.988972462342690430, -0.988979866082624340, -0.988987267350108560, -0.988994666145124550, -0.989002062467653990, +-0.989009456317678230, -0.989016847695178720, -0.989024236600137270, -0.989031623032535110, -0.989039006992353920, -0.989046388479575160, -0.989053767494180500, -0.989061144036151420, +-0.989068518105469470, -0.989075889702116240, -0.989083258826073290, -0.989090625477322180, -0.989097989655844390, -0.989105351361621810, -0.989112710594635790, -0.989120067354867900, +-0.989127421642299940, -0.989134773456913470, -0.989142122798689960, -0.989149469667611190, -0.989156814063658740, -0.989164155986814290, -0.989171495437059400, -0.989178832414375760, +-0.989186166918745060, -0.989193498950148960, -0.989200828508569160, -0.989208155593987230, -0.989215480206384950, -0.989222802345743890, -0.989230122012045850, -0.989237439205272520, +-0.989244753925405670, -0.989252066172426780, -0.989259375946317850, -0.989266683247060460, -0.989273988074636400, -0.989281290429027240, -0.989288590310214990, -0.989295887718181110, +-0.989303182652907620, -0.989310475114376200, -0.989317765102568520, -0.989325052617466500, -0.989332337659051820, -0.989339620227306260, -0.989346900322211730, -0.989354177943749800, +-0.989361453091902600, -0.989368725766651690, -0.989375995967978980, -0.989383263695866270, -0.989390528950295330, -0.989397791731248200, -0.989405052038706430, -0.989412309872652160, +-0.989419565233067070, -0.989426818119933160, -0.989434068533232010, -0.989441316472945860, -0.989448561939056390, -0.989455804931545500, -0.989463045450395100, -0.989470283495587080, +-0.989477519067103240, -0.989484752164925820, -0.989491982789036380, -0.989499210939416950, -0.989506436616049640, -0.989513659818916150, -0.989520880547998470, -0.989528098803278630, +-0.989535314584738530, -0.989542527892360190, -0.989549738726125510, -0.989556947086016490, -0.989564152972015050, -0.989571356384103320, -0.989578557322263070, -0.989585755786476560, +-0.989592951776725570, -0.989600145292992230, -0.989607336335258550, -0.989614524903506540, -0.989621710997718230, -0.989628894617875510, -0.989636075763960730, -0.989643254435955580, +-0.989650430633842500, -0.989657604357603190, -0.989664775607219880, -0.989671944382674700, -0.989679110683949650, -0.989686274511026750, -0.989693435863888250, -0.989700594742516150, +-0.989707751146892580, -0.989714905076999550, -0.989722056532819310, -0.989729205514333970, -0.989736352021525550, -0.989743496054376280, -0.989750637612868190, -0.989757776696983620, +-0.989764913306704460, -0.989772047442013190, -0.989779179102891700, -0.989786308289322350, -0.989793435001287140, -0.989800559238768420, -0.989807681001748210, -0.989814800290208850, +-0.989821917104132480, -0.989829031443501320, -0.989836143308297610, -0.989843252698503480, -0.989850359614101280, -0.989857464055073240, -0.989864566021401380, -0.989871665513068270, +-0.989878762530055910, -0.989885857072346550, -0.989892949139922760, -0.989900038732766440, -0.989907125850860050, -0.989914210494185820, -0.989921292662726100, -0.989928372356463250, +-0.989935449575379380, -0.989942524319456840, -0.989949596588677980, -0.989956666383025260, -0.989963733702480810, -0.989970798547026960, -0.989977860916646190, -0.989984920811320720, +-0.989991978231033020, -0.989999033175765320, -0.990006085645499970, -0.990013135640219530, -0.990020183159906140, -0.990027228204542480, -0.990034270774110550, -0.990041310868593040, +-0.990048348487972190, -0.990055383632230560, -0.990062416301350390, -0.990069446495314250, -0.990076474214104390, -0.990083499457703460, -0.990090522226093730, -0.990097542519257750, +-0.990104560337177860, -0.990111575679836540, -0.990118588547216350, -0.990125598939299630, -0.990132606856068960, -0.990139612297506690, -0.990146615263595490, -0.990153615754317710, +-0.990160613769655920, -0.990167609309592470, -0.990174602374110150, -0.990181592963191300, -0.990188581076818400, -0.990195566714974110, -0.990202549877640890, -0.990209530564801210, +-0.990216508776437850, -0.990223484512533170, -0.990230457773069730, -0.990237428558030210, -0.990244396867397070, -0.990251362701152880, -0.990258326059280440, -0.990265286941762080, +-0.990272245348580490, -0.990279201279718360, -0.990286154735158130, -0.990293105714882600, -0.990300054218874240, -0.990307000247115820, -0.990313943799589810, -0.990320884876279120, +-0.990327823477165970, -0.990334759602233490, -0.990341693251463930, -0.990348624424840280, -0.990355553122344910, -0.990362479343960820, -0.990369403089670470, -0.990376324359456550, +-0.990383243153301950, -0.990390159471189140, -0.990397073313101010, -0.990403984679020130, -0.990410893568929310, -0.990417799982811210, -0.990424703920648630, -0.990431605382424360, +-0.990438504368120980, -0.990445400877721370, -0.990452294911208340, -0.990459186468564460, -0.990466075549772730, -0.990472962154815730, -0.990479846283676360, -0.990486727936337300, +-0.990493607112781560, -0.990500483812991720, -0.990507358036950670, -0.990514229784641210, -0.990521099056046130, -0.990527965851148440, -0.990534830169930710, -0.990541692012375960, +-0.990548551378466980, -0.990555408268186670, -0.990562262681517700, -0.990569114618443210, -0.990575964078945880, -0.990582811063008720, -0.990589655570614400, -0.990596497601746060, +-0.990603337156386380, -0.990610174234518360, -0.990617008836124910, -0.990623840961189050, -0.990630670609693450, -0.990637497781621250, -0.990644322476955330, -0.990651144695678500, +-0.990657964437773870, -0.990664781703224360, -0.990671596492012860, -0.990678408804122390, -0.990685218639535960, -0.990692025998236360, -0.990698830880206720, -0.990705633285430040, +-0.990712433213889240, -0.990719230665567440, -0.990726025640447430, -0.990732818138512440, -0.990739608159745490, -0.990746395704129370, -0.990753180771647310, -0.990759963362282340, +-0.990766743476017450, -0.990773521112835680, -0.990780296272720020, -0.990787068955653720, -0.990793839161619780, -0.990800606890601230, -0.990807372142581080, -0.990814134917542550, +-0.990820895215468680, -0.990827653036342570, -0.990834408380147360, -0.990841161246866160, -0.990847911636482000, -0.990854659548978000, -0.990861404984337390, -0.990868147942543410, +-0.990874888423578850, -0.990881626427427160, -0.990888361954071480, -0.990895095003494820, -0.990901825575680410, -0.990908553670611480, -0.990915279288271170, -0.990922002428642590, +-0.990928723091709100, -0.990935441277453700, -0.990942156985859750, -0.990948870216910360, -0.990955580970588890, -0.990962289246878350, -0.990968995045762190, -0.990975698367223550, +-0.990982399211245650, -0.990989097577811620, -0.990995793466905030, -0.991002486878508890, -0.991009177812606450, -0.991015866269181140, -0.991022552248216230, -0.991029235749694810, +-0.991035916773600370, -0.991042595319916120, -0.991049271388625420, -0.991055944979711610, -0.991062616093157820, -0.991069284728947510, -0.991075950887064020, -0.991082614567490580, +-0.991089275770210660, -0.991095934495207500, -0.991102590742464540, -0.991109244511965140, -0.991115895803692640, -0.991122544617630390, -0.991129190953761730, -0.991135834812070130, +-0.991142476192538810, -0.991149115095151470, -0.991155751519891330, -0.991162385466741740, -0.991169016935686260, -0.991175645926708150, -0.991182272439790960, -0.991188896474918150, +-0.991195518032073060, -0.991202137111239170, -0.991208753712399910, -0.991215367835538760, -0.991221979480639280, -0.991228588647684710, -0.991235195336658830, -0.991241799547544880, +-0.991248401280326430, -0.991255000534986940, -0.991261597311509980, -0.991268191609879110, -0.991274783430077690, -0.991281372772089280, -0.991287959635897440, -0.991294544021485760, +-0.991301125928837680, -0.991307705357936770, -0.991314282308766730, -0.991320856781310880, -0.991327428775552800, -0.991333998291476280, -0.991340565329064670, -0.991347129888301760, +-0.991353691969171000, -0.991360251571655970, -0.991366808695740230, -0.991373363341407580, -0.991379915508641570, -0.991386465197425680, -0.991393012407743580, -0.991399557139579060, +-0.991406099392915570, -0.991412639167736920, -0.991419176464026550, -0.991425711281768370, -0.991432243620945840, -0.991438773481542750, -0.991445300863542660, -0.991451825766929360, +-0.991458348191686540, -0.991464868137797770, -0.991471385605246840, -0.991477900594017410, -0.991484413104093300, -0.991490923135458170, -0.991497430688095700, -0.991503935761989590, +-0.991510438357123820, -0.991516938473481770, -0.991523436111047430, -0.991529931269804490, -0.991536423949736840, -0.991542914150827960, -0.991549401873061950, -0.991555887116422290, +-0.991562369880892970, -0.991568850166457790, -0.991575327973100440, -0.991581803300804810, -0.991588276149554580, -0.991594746519333660, -0.991601214410125940, -0.991607679821915220, +-0.991614142754685180, -0.991620603208419830, -0.991627061183103060, -0.991633516678718570, -0.991639969695250260, -0.991646420232682010, -0.991652868290997750, -0.991659313870181360, +-0.991665756970216640, -0.991672197591087600, -0.991678635732777920, -0.991685071395271730, -0.991691504578552930, -0.991697935282605300, -0.991704363507412870, -0.991710789252959410, +-0.991717212519229170, -0.991723633306205720, -0.991730051613873290, -0.991736467442215660, -0.991742880791216970, -0.991749291660861010, -0.991755700051131780, -0.991762105962013420, +-0.991768509393489710, -0.991774910345544770, -0.991781308818162510, -0.991787704811326940, -0.991794098325022190, -0.991800489359232150, -0.991806877913940950, -0.991813263989132500, +-0.991819647584790910, -0.991826028700900200, -0.991832407337444380, -0.991838783494407570, -0.991845157171773790, -0.991851528369527170, -0.991857897087651710, -0.991864263326131420, +-0.991870627084950550, -0.991876988364093100, -0.991883347163543210, -0.991889703483284980, -0.991896057323302440, -0.991902408683579710, -0.991908757564101020, -0.991915103964850390, +-0.991921447885812050, -0.991927789326970120, -0.991934128288308630, -0.991940464769811900, -0.991946798771463860, -0.991953130293248940, -0.991959459335151170, -0.991965785897154780, +-0.991972109979244010, -0.991978431581402860, -0.991984750703615580, -0.991991067345866510, -0.991997381508139760, -0.992003693190419590, -0.992010002392690100, -0.992016309114935660, +-0.992022613357140370, -0.992028915119288700, -0.992035214401364660, -0.992041511203352490, -0.992047805525236640, -0.992054097367001340, -0.992060386728630730, -0.992066673610109140, +-0.992072958011420810, -0.992079239932550210, -0.992085519373481440, -0.992091796334198860, -0.992098070814686820, -0.992104342814929650, -0.992110612334911490, -0.992116879374616900, +-0.992123143934030120, -0.992129406013135480, -0.992135665611917240, -0.992141922730359950, -0.992148177368447740, -0.992154429526165170, -0.992160679203496490, -0.992166926400426140, +-0.992173171116938480, -0.992179413353017850, -0.992185653108648700, -0.992191890383815390, -0.992198125178502370, -0.992204357492694090, -0.992210587326374900, -0.992216814679529270, +-0.992223039552141530, -0.992229261944196250, -0.992235481855677780, -0.992241699286570580, -0.992247914236859210, -0.992254126706528020, -0.992260336695561460, -0.992266544203944110, +-0.992272749231660420, -0.992278951778694850, -0.992285151845031850, -0.992291349430656000, -0.992297544535551750, -0.992303737159703660, -0.992309927303096310, -0.992316114965714040, +-0.992322300147541530, -0.992328482848563230, -0.992334663068763720, -0.992340840808127570, -0.992347016066639330, -0.992353188844283580, -0.992359359141044890, -0.992365526956907720, +-0.992371692291856730, -0.992377855145876510, -0.992384015518951720, -0.992390173411066830, -0.992396328822206520, -0.992402481752355350, -0.992408632201498000, -0.992414780169619150, +-0.992420925656703260, -0.992427068662735110, -0.992433209187699280, -0.992439347231580450, -0.992445482794363180, -0.992451615876032260, -0.992457746476572260, -0.992463874595967850, +-0.992470000234203840, -0.992476123391264790, -0.992482244067135480, -0.992488362261800480, -0.992494477975244700, -0.992500591207452600, -0.992506701958409070, -0.992512810228098790, +-0.992518916016506550, -0.992525019323616920, -0.992531120149414800, -0.992537218493884770, -0.992543314357011820, -0.992549407738780530, -0.992555498639175800, -0.992561587058182200, +-0.992567672995784740, -0.992573756451967990, -0.992579837426716960, -0.992585915920016220, -0.992591991931850770, -0.992598065462205410, -0.992604136511064720, -0.992610205078413800, +-0.992616271164237340, -0.992622334768520240, -0.992628395891247180, -0.992634454532403290, -0.992640510691973120, -0.992646564369941810, -0.992652615566294030, -0.992658664281014680, +-0.992664710514088670, -0.992670754265501000, -0.992676795535236360, -0.992682834323279640, -0.992688870629615970, -0.992694904454230030, -0.992700935797106940, -0.992706964658231380, +-0.992712991037588590, -0.992719014935163120, -0.992725036350940230, -0.992731055284904680, -0.992737071737041620, -0.992743085707335720, -0.992749097195772200, -0.992755106202335870, +-0.992761112727011840, -0.992767116769785020, -0.992773118330640410, -0.992779117409563040, -0.992785114006537790, -0.992791108121549800, -0.992797099754584080, -0.992803088905625520, +-0.992809075574659360, -0.992815059761670390, -0.992821041466643850, -0.992827020689564630, -0.992832997430417970, -0.992838971689188780, -0.992844943465862050, -0.992850912760423030, +-0.992856879572856730, -0.992862843903148270, -0.992868805751282670, -0.992874765117245150, -0.992880722001020620, -0.992886676402594310, -0.992892628321951240, -0.992898577759076640, +-0.992904524713955630, -0.992910469186573330, -0.992916411176914760, -0.992922350684965260, -0.992928287710709840, -0.992934222254133750, -0.992940154315221980, -0.992946083893960000, +-0.992952010990332700, -0.992957935604325330, -0.992963857735923220, -0.992969777385111390, -0.992975694551875180, -0.992981609236199710, -0.992987521438070230, -0.992993431157471960, +-0.992999338394390030, -0.993005243148809780, -0.993011145420716450, -0.993017045210095260, -0.993022942516931460, -0.993028837341210280, -0.993034729682917060, -0.993040619542037040, +-0.993046506918555340, -0.993052391812457520, -0.993058274223728610, -0.993064154152354050, -0.993070031598319190, -0.993075906561609160, -0.993081779042209290, -0.993087649040105160, +-0.993093516555281770, -0.993099381587724590, -0.993105244137418960, -0.993111104204350340, -0.993116961788503840, -0.993122816889864920, -0.993128669508419050, -0.993134519644151450, +-0.993140367297047580, -0.993146212467092780, -0.993152055154272410, -0.993157895358572020, -0.993163733079976740, -0.993169568318472250, -0.993175401074043780, -0.993181231346676800, +-0.993187059136356740, -0.993192884443069080, -0.993198707266799150, -0.993204527607532530, -0.993210345465254550, -0.993216160839950680, -0.993221973731606480, -0.993227784140207290, +-0.993233592065738580, -0.993239397508186020, -0.993245200467534840, -0.993251000943770720, -0.993256798936879130, -0.993262594446845500, -0.993268387473655420, -0.993274178017294340, +-0.993279966077747820, -0.993285751655001440, -0.993291534749040640, -0.993297315359851000, -0.993303093487418080, -0.993308869131727330, -0.993314642292764560, -0.993320412970515100, +-0.993326181164964630, -0.993331946876098710, -0.993337710103902930, -0.993343470848362830, -0.993349229109464100, -0.993354984887192320, -0.993360738181533030, -0.993366488992471930, +-0.993372237319994580, -0.993377983164086650, -0.993383726524733720, -0.993389467401921470, -0.993395205795635560, -0.993400941705861680, -0.993406675132585510, -0.993412406075792510, +-0.993418134535468570, -0.993423860511599250, -0.993429584004170360, -0.993435305013167460, -0.993441023538576330, -0.993446739580382650, -0.993452453138572000, -0.993458164213130380, +-0.993463872804043250, -0.993469578911296500, -0.993475282534875710, -0.993480983674766780, -0.993486682330955380, -0.993492378503427310, -0.993498072192168240, -0.993503763397163950, +-0.993509452118400360, -0.993515138355863140, -0.993520822109537960, -0.993526503379410840, -0.993532182165467350, -0.993537858467693490, -0.993543532286074950, -0.993549203620597620, +-0.993554872471247300, -0.993560538838009770, -0.993566202720870820, -0.993571864119816460, -0.993577523034832380, -0.993583179465904460, -0.993588833413018730, -0.993594484876160760, +-0.993600133855316650, -0.993605780350472310, -0.993611424361613320, -0.993617065888725890, -0.993622704931795830, -0.993628341490808920, -0.993633975565751170, -0.993639607156608480, +-0.993645236263366760, -0.993650862886012010, -0.993656487024530130, -0.993662108678906920, -0.993667727849128600, -0.993673344535180750, -0.993678958737049700, -0.993684570454721140, +-0.993690179688181300, -0.993695786437415850, -0.993701390702411040, -0.993706992483152750, -0.993712591779627010, -0.993718188591819710, -0.993723782919716970, -0.993729374763304700, +-0.993734964122569120, -0.993740550997496030, -0.993746135388071660, -0.993751717294281800, -0.993757296716112790, -0.993762873653550540, -0.993768448106581050, -0.993774020075190450, +-0.993779589559364740, -0.993785156559090170, -0.993790721074352620, -0.993796283105138340, -0.993801842651433230, -0.993807399713223630, -0.993812954290495540, -0.993818506383234990, +-0.993824055991428200, -0.993829603115061300, -0.993835147754120410, -0.993840689908591650, -0.993846229578461030, -0.993851766763715010, -0.993857301464339480, -0.993862833680320690, +-0.993868363411644860, -0.993873890658298120, -0.993879415420266590, -0.993884937697536610, -0.993890457490094300, -0.993895974797925800, -0.993901489621017320, -0.993907001959355110, +-0.993912511812925500, -0.993918019181714520, -0.993923524065708500, -0.993929026464893670, -0.993934526379256390, -0.993940023808782660, -0.993945518753458930, -0.993951011213271340, +-0.993956501188206330, -0.993961988678249920, -0.993967473683388670, -0.993972956203608700, -0.993978436238896370, -0.993983913789237890, -0.993989388854619630, -0.993994861435027910, +-0.994000331530449090, -0.994005799140869390, -0.994011264266275170, -0.994016726906652880, -0.994022187061988640, -0.994027644732269010, -0.994033099917480230, -0.994038552617608760, +-0.994044002832640940, -0.994049450562563000, -0.994054895807361500, -0.994060338567022810, -0.994065778841533130, -0.994071216630879160, -0.994076651935047020, -0.994082084754023380, +-0.994087515087794360, -0.994092942936346760, -0.994098368299666690, -0.994103791177740610, -0.994109211570555210, -0.994114629478096700, -0.994120044900351660, -0.994125457837306440, +-0.994130868288947590, -0.994136276255261690, -0.994141681736234960, -0.994147084731854090, -0.994152485242105530, -0.994157883266975630, -0.994163278806451170, -0.994168671860518380, +-0.994174062429164060, -0.994179450512374440, -0.994184836110136310, -0.994190219222436000, -0.994195599849260200, -0.994200977990595370, -0.994206353646428180, -0.994211726816745080, +-0.994217097501532530, -0.994222465700777440, -0.994227831414466020, -0.994233194642585080, -0.994238555385121180, -0.994243913642060880, -0.994249269413390760, -0.994254622699097480, +-0.994259973499167620, -0.994265321813587840, -0.994270667642344840, -0.994276010985425060, -0.994281351842815300, -0.994286690214502220, -0.994292026100472290, -0.994297359500712410, +-0.994302690415209020, -0.994308018843949040, -0.994313344786918910, -0.994318668244105420, -0.994323989215495360, -0.994329307701075190, -0.994334623700831810, -0.994339937214751890, +-0.994345248242822110, -0.994350556785029260, -0.994355862841360020, -0.994361166411801060, -0.994366467496339170, -0.994371766094961140, -0.994377062207653650, -0.994382355834403600, +-0.994387646975197660, -0.994392935630022510, -0.994398221798865060, -0.994403505481712080, -0.994408786678550370, -0.994414065389366610, -0.994419341614147690, -0.994424615352880510, +-0.994429886605551760, -0.994435155372148220, -0.994440421652656780, -0.994445685447064350, -0.994450946755357720, -0.994456205577523790, -0.994461461913549230, -0.994466715763421050, +-0.994471967127126040, -0.994477216004651220, -0.994482462395983260, -0.994487706301109160, -0.994492947720015840, -0.994498186652690070, -0.994503423099118880, -0.994508657059289150, +-0.994513888533187780, -0.994519117520801690, -0.994524344022117760, -0.994529568037123000, -0.994534789565804320, -0.994540008608148730, -0.994545225164143010, -0.994550439233774290, +-0.994555650817029460, -0.994560859913895530, -0.994566066524359420, -0.994571270648408110, -0.994576472286028750, -0.994581671437208100, -0.994586868101933310, -0.994592062280191260, +-0.994597253971969190, -0.994602443177253880, -0.994607629896032570, -0.994612814128292060, -0.994617995874019560, -0.994623175133202090, -0.994628351905826660, -0.994633526191880390, +-0.994638697991350300, -0.994643867304223490, -0.994649034130487000, -0.994654198470127810, -0.994659360323133290, -0.994664519689490320, -0.994669676569185920, -0.994674830962207550, +-0.994679982868541980, -0.994685132288176450, -0.994690279221098090, -0.994695423667294020, -0.994700565626751350, -0.994705705099457440, -0.994710842085399060, -0.994715976584563680, +-0.994721108596938410, -0.994726238122510260, -0.994731365161266590, -0.994736489713194500, -0.994741611778281240, -0.994746731356513810, -0.994751848447879670, -0.994756963052365830, +-0.994762075169959630, -0.994767184800648190, -0.994772291944418850, -0.994777396601258750, -0.994782498771155210, -0.994787598454095370, -0.994792695650066560, -0.994797790359055910, +-0.994802882581050980, -0.994807972316038680, -0.994813059564006560, -0.994818144324941640, -0.994823226598831490, -0.994828306385663220, -0.994833383685424290, -0.994838458498101820, +-0.994843530823683150, -0.994848600662155750, -0.994853668013506720, -0.994858732877723640, -0.994863795254793740, -0.994868855144704240, -0.994873912547442730, -0.994878967462996310, +-0.994884019891352560, -0.994889069832498700, -0.994894117286422300, -0.994899162253110480, -0.994904204732550810, -0.994909244724730520, -0.994914282229637290, -0.994919317247258240, +-0.994924349777580930, -0.994929379820592710, -0.994934407376281140, -0.994939432444633450, -0.994944455025637220, -0.994949475119279780, -0.994954492725548810, -0.994959507844431430, +-0.994964520475915440, -0.994969530619988050, -0.994974538276636840, -0.994979543445849380, -0.994984546127613000, -0.994989546321915160, -0.994994544028743540, -0.994999539248085600, +-0.995004531979928770, -0.995009522224260650, -0.995014509981068660, -0.995019495250340390, -0.995024478032063510, -0.995029458326225250, -0.995034436132813500, -0.995039411451815630, +-0.995044384283219170, -0.995049354627011720, -0.995054322483180930, -0.995059287851714380, -0.995064250732599630, -0.995069211125824140, -0.995074169031375690, -0.995079124449241850, +-0.995084077379410180, -0.995089027821868250, -0.995093975776603860, -0.995098921243604440, -0.995103864222857680, -0.995108804714351370, -0.995113742718073070, -0.995118678234010350, +-0.995123611262150880, -0.995128541802482450, -0.995133469854992620, -0.995138395419669200, -0.995143318496499730, -0.995148239085472010, -0.995153157186573600, -0.995158072799792400, +-0.995162985925115980, -0.995167896562532020, -0.995172804712028400, -0.995177710373592820, -0.995182613547212940, -0.995187514232876440, -0.995192412430571220, -0.995197308140284950, +-0.995202201362005430, -0.995207092095720340, -0.995211980341417560, -0.995216866099084880, -0.995221749368710000, -0.995226630150280680, -0.995231508443784940, -0.995236384249210350, +-0.995241257566544690, -0.995246128395776090, -0.995250996736891990, -0.995255862589880520, -0.995260725954729360, -0.995265586831426300, -0.995270445219959330, -0.995275301120316370, +-0.995280154532484970, -0.995285005456453260, -0.995289853892209030, -0.995294699839740170, -0.995299543299034580, -0.995304384270080170, -0.995309222752864710, -0.995314058747376220, +-0.995318892253602590, -0.995323723271531850, -0.995328551801151650, -0.995333377842450130, -0.995338201395415180, -0.995343022460034590, -0.995347841036296590, -0.995352657124188970, +-0.995357470723699620, -0.995362281834816680, -0.995367090457528030, -0.995371896591821680, -0.995376700237685540, -0.995381501395107620, -0.995386300064076020, -0.995391096244578550, +-0.995395889936603440, -0.995400681140138580, -0.995405469855172090, -0.995410256081691870, -0.995415039819686040, -0.995419821069142510, -0.995424599830049490, -0.995429376102395010, +-0.995434149886167070, -0.995438921181353690, -0.995443689987943080, -0.995448456305923270, -0.995453220135282260, -0.995457981476008170, -0.995462740328089240, -0.995467496691513350, +-0.995472250566268760, -0.995477001952343570, -0.995481750849725790, -0.995486497258403770, -0.995491241178365400, -0.995495982609598930, -0.995500721552092570, -0.995505458005834340, +-0.995510191970812470, -0.995514923447015200, -0.995519652434430520, -0.995524378933046790, -0.995529102942852020, -0.995533824463834540, -0.995538543495982590, -0.995543260039284170, +-0.995547974093727640, -0.995552685659301110, -0.995557394735992920, -0.995562101323791300, -0.995566805422684390, -0.995571507032660400, -0.995576206153707680, -0.995580902785814460, +-0.995585596928969090, -0.995590288583159570, -0.995594977748374350, -0.995599664424601680, -0.995604348611830000, -0.995609030310047330, -0.995613709519242000, -0.995618386239402580, +-0.995623060470517070, -0.995627732212573950, -0.995632401465561420, -0.995637068229468070, -0.995641732504281900, -0.995646394289991470, -0.995651053586585010, -0.995655710394050870, +-0.995660364712377510, -0.995665016541553260, -0.995669665881566470, -0.995674312732405480, -0.995678957094058740, -0.995683598966514590, -0.995688238349761390, -0.995692875243787690, +-0.995697509648581720, -0.995702141564132060, -0.995706770990427040, -0.995711397927455000, -0.995716022375204620, -0.995720644333664030, -0.995725263802821890, -0.995729880782666550, +-0.995734495273186580, -0.995739107274370320, -0.995743716786206320, -0.995748323808683060, -0.995752928341788970, -0.995757530385512510, -0.995762129939842260, -0.995766727004766650, +-0.995771321580274260, -0.995775913666353650, -0.995780503262993170, -0.995785090370181370, -0.995789674987906940, -0.995794257116158320, -0.995798836754923980, -0.995803413904192580, +-0.995807988563952700, -0.995812560734192780, -0.995817130414901500, -0.995821697606067420, -0.995826262307679010, -0.995830824519725040, -0.995835384242193980, -0.995839941475074370, +-0.995844496218355020, -0.995849048472024380, -0.995853598236071110, -0.995858145510483910, -0.995862690295251320, -0.995867232590361920, -0.995871772395804490, -0.995876309711567710, +-0.995880844537640030, -0.995885376874010350, -0.995889906720667130, -0.995894434077599260, -0.995898958944795190, -0.995903481322243820, -0.995908001209933720, -0.995912518607853570, +-0.995917033515992140, -0.995921545934338130, -0.995926055862880300, -0.995930563301607230, -0.995935068250507820, -0.995939570709570730, -0.995944070678784770, -0.995948568158138590, +-0.995953063147621000, -0.995957555647220660, -0.995962045656926590, -0.995966533176727230, -0.995971018206611710, -0.995975500746568490, -0.995979980796586670, -0.995984458356654830, +-0.995988933426761760, -0.995993406006896450, -0.995997876097047600, -0.996002343697204080, -0.996006808807354700, -0.996011271427488350, -0.996015731557593710, -0.996020189197659780, +-0.996024644347675460, -0.996029097007629430, -0.996033547177510690, -0.996037994857308040, -0.996042440047010480, -0.996046882746606800, -0.996051322956085890, -0.996055760675436660, +-0.996060195904648000, -0.996064628643708930, -0.996069058892608330, -0.996073486651334990, -0.996077911919877930, -0.996082334698226160, -0.996086754986368450, -0.996091172784293930, +-0.996095588091991500, -0.996100000909450060, -0.996104411236658600, -0.996108819073606160, -0.996113224420281610, -0.996117627276674080, -0.996122027642772470, -0.996126425518565670, +-0.996130820904042920, -0.996135213799193120, -0.996139604204005270, -0.996143992118468380, -0.996148377542571570, -0.996152760476303740, -0.996157140919654130, -0.996161518872611510, +-0.996165894335165230, -0.996170267307304070, -0.996174637789017380, -0.996179005780294060, -0.996183371281123220, -0.996187734291493880, -0.996192094811395260, -0.996196452840816480, +-0.996200808379746450, -0.996205161428174500, -0.996209511986089540, -0.996213860053480890, -0.996218205630337470, -0.996222548716648730, -0.996226889312403440, -0.996231227417591070, +-0.996235563032200510, -0.996239896156221110, -0.996244226789641970, -0.996248554932452230, -0.996252880584641120, -0.996257203746197750, -0.996261524417111470, -0.996265842597371390, +-0.996270158286966630, -0.996274471485886440, -0.996278782194120140, -0.996283090411656860, -0.996287396138485940, -0.996291699374596380, -0.996296000119977650, -0.996300298374618980, +-0.996304594138509470, -0.996308887411638590, -0.996313178193995340, -0.996317466485569290, -0.996321752286349450, -0.996326035596325270, -0.996330316415486080, -0.996334594743821020, +-0.996338870581319420, -0.996343143927970740, -0.996347414783764210, -0.996351683148689050, -0.996355949022734720, -0.996360212405890570, -0.996364473298145930, -0.996368731699490030, +-0.996372987609912220, -0.996377241029402060, -0.996381491957948780, -0.996385740395541730, -0.996389986342170350, -0.996394229797823990, -0.996398470762492110, -0.996402709236164030, +-0.996406945218829110, -0.996411178710476910, -0.996415409711096770, -0.996419638220678030, -0.996423864239210260, -0.996428087766682790, -0.996432308803085200, -0.996436527348406710, +-0.996440743402637000, -0.996444956965765290, -0.996449168037781270, -0.996453376618674390, -0.996457582708433990, -0.996461786307049740, -0.996465987414510870, -0.996470186030807170, +-0.996474382155927870, -0.996478575789862760, -0.996482766932601070, -0.996486955584132580, -0.996491141744446640, -0.996495325413532920, -0.996499506591380760, -0.996503685277979940, +-0.996507861473319820, -0.996512035177390180, -0.996516206390180350, -0.996520375111680010, -0.996524541341878730, -0.996528705080766190, -0.996532866328331710, -0.996537025084565210, +-0.996541181349456130, -0.996545335122994040, -0.996549486405168610, -0.996553635195969510, -0.996557781495386320, -0.996561925303408700, -0.996566066620026230, -0.996570205445228560, +-0.996574341779005390, -0.996578475621346490, -0.996582606972241210, -0.996586735831679560, -0.996590862199650980, -0.996594986076145380, -0.996599107461152210, -0.996603226354661250, +-0.996607342756662300, -0.996611456667144900, -0.996615568086098860, -0.996619677013513950, -0.996623783449379850, -0.996627887393686350, -0.996631988846423010, -0.996636087807579840, +-0.996640184277146290, -0.996644278255112370, -0.996648369741467750, -0.996652458736202230, -0.996656545239305470, -0.996660629250767480, -0.996664710770577830, -0.996668789798726420, +-0.996672866335203020, -0.996676940379997430, -0.996681011933099550, -0.996685080994499150, -0.996689147564186030, -0.996693211642150080, -0.996697273228380980, -0.996701332322868840, +-0.996705388925603230, -0.996709443036574270, -0.996713494655771640, -0.996717543783185330, -0.996721590418805040, -0.996725634562620870, -0.996729676214622610, -0.996733715374800160, +-0.996737752043143410, -0.996741786219642270, -0.996745817904286620, -0.996749847097066490, -0.996753873797971760, -0.996757898006992330, -0.996761919724118210, -0.996765938949339180, +-0.996769955682645370, -0.996773969924026560, -0.996777981673472980, -0.996781990930974420, -0.996785997696520760, -0.996790001970102260, -0.996794003751708680, -0.996798003041330040, +-0.996801999838956450, -0.996805994144577930, -0.996809985958184370, -0.996813975279765780, -0.996817962109312280, -0.996821946446813880, -0.996825928292260690, -0.996829907645642610, +-0.996833884506949760, -0.996837858876172270, -0.996841830753300020, -0.996845800138323250, -0.996849767031231960, -0.996853731432016280, -0.996857693340666320, -0.996861652757172090, +-0.996865609681523710, -0.996869564113711300, -0.996873516053724980, -0.996877465501554870, -0.996881412457191090, -0.996885356920623860, -0.996889298891843080, -0.996893238370839210, +-0.996897175357602140, -0.996901109852122210, -0.996905041854389440, -0.996908971364394160, -0.996912898382126380, -0.996916822907576330, -0.996920744940734240, -0.996924664481590340, +-0.996928581530134750, -0.996932496086357700, -0.996936408150249420, -0.996940317721800030, -0.996944224800999980, -0.996948129387839280, -0.996952031482308270, -0.996955931084397280, +-0.996959828194096340, -0.996963722811395890, -0.996967614936286160, -0.996971504568757270, -0.996975391708799790, -0.996979276356403710, -0.996983158511559500, -0.996987038174257380, +-0.996990915344487580, -0.996994790022240560, -0.996998662207506550, -0.997002531900275990, -0.997006399100539010, -0.997010263808286060, -0.997014126023507360, -0.997017985746193490, +-0.997021842976334560, -0.997025697713921020, -0.997029549958943220, -0.997033399711391600, -0.997037246971256510, -0.997041091738528280, -0.997044934013197270, -0.997048773795253920, +-0.997052611084688680, -0.997056445881491890, -0.997060278185654010, -0.997064107997165490, -0.997067935316016560, -0.997071760142197890, -0.997075582475699830, -0.997079402316512820, +-0.997083219664627210, -0.997087034520033670, -0.997090846882722430, -0.997094656752684160, -0.997098464129909210, -0.997102269014388030, -0.997106071406111290, -0.997109871305069340, +-0.997113668711252730, -0.997117463624651920, -0.997121256045257480, -0.997125045973059840, -0.997128833408049700, -0.997132618350217380, -0.997136400799553460, -0.997140180756048710, +-0.997143958219693370, -0.997147733190478110, -0.997151505668393610, -0.997155275653430430, -0.997159043145578900, -0.997162808144829830, -0.997166570651173760, -0.997170330664601150, +-0.997174088185102780, -0.997177843212669220, -0.997181595747291040, -0.997185345788958900, -0.997189093337663370, -0.997192838393395120, -0.997196580956144720, -0.997200321025902950, +-0.997204058602660260, -0.997207793686407550, -0.997211526277135270, -0.997215256374834210, -0.997218983979495040, -0.997222709091108330, -0.997226431709664960, -0.997230151835155400, +-0.997233869467570530, -0.997237584606900930, -0.997241297253137370, -0.997245007406270640, -0.997248715066291310, -0.997252420233190270, -0.997256122906958200, -0.997259823087585760, +-0.997263520775063750, -0.997267215969382950, -0.997270908670534140, -0.997274598878508000, -0.997278286593295430, -0.997281971814887090, -0.997285654543273890, -0.997289334778446500, +-0.997293012520395820, -0.997296687769112510, -0.997300360524587590, -0.997304030786811730, -0.997307698555775720, -0.997311363831470570, -0.997315026613886930, -0.997318686903015840, +-0.997322344698847950, -0.997326000001374170, -0.997329652810585500, -0.997333303126472610, -0.997336950949026410, -0.997340596278238010, -0.997344239114097970, -0.997347879456597420, +-0.997351517305727020, -0.997355152661478010, -0.997358785523841050, -0.997362415892807050, -0.997366043768367130, -0.997369669150512060, -0.997373292039232750, -0.997376912434520310, +-0.997380530336365530, -0.997384145744759530, -0.997387758659693090, -0.997391369081157220, -0.997394977009142920, -0.997398582443641210, -0.997402185384643090, -0.997405785832139460, +-0.997409383786121320, -0.997412979246579790, -0.997416572213505770, -0.997420162686890380, -0.997423750666724510, -0.997427336152999280, -0.997430919145705810, -0.997434499644834880, +-0.997438077650377840, -0.997441653162325580, -0.997445226180669110, -0.997448796705399650, -0.997452364736508110, -0.997455930273985820, -0.997459493317823580, -0.997463053868012590, +-0.997466611924544000, -0.997470167487408910, -0.997473720556598440, -0.997477271132103600, -0.997480819213915510, -0.997484364802025510, -0.997487907896424500, -0.997491448497103810, +-0.997494986604054450, -0.997498522217267650, -0.997502055336734530, -0.997505585962446210, -0.997509114094394020, -0.997512639732568980, -0.997516162876962320, -0.997519683527565370, +-0.997523201684369140, -0.997526717347364870, -0.997530230516543880, -0.997533741191897310, -0.997537249373416370, -0.997540755061092300, -0.997544258254916330, -0.997547758954879680, +-0.997551257160973700, -0.997554752873189510, -0.997558246091518550, -0.997561736815951840, -0.997565225046480930, -0.997568710783096830, -0.997572194025791000, -0.997575674774554670, +-0.997579153029379160, -0.997582628790255830, -0.997586102057175910, -0.997589572830130720, -0.997593041109111510, -0.997596506894109840, -0.997599970185116810, -0.997603430982123900, +-0.997606889285122420, -0.997610345094103620, -0.997613798409059060, -0.997617249229979960, -0.997620697556857780, -0.997624143389683860, -0.997627586728449530, -0.997631027573146260, +-0.997634465923765370, -0.997637901780298430, -0.997641335142736560, -0.997644766011071550, -0.997648194385294510, -0.997651620265397000, -0.997655043651370480, -0.997658464543206280, +-0.997661882940895970, -0.997665298844431000, -0.997668712253802710, -0.997672123169002670, -0.997675531590022310, -0.997678937516853100, -0.997682340949486600, -0.997685741887914150, +-0.997689140332127410, -0.997692536282117850, -0.997695929737876910, -0.997699320699396150, -0.997702709166667150, -0.997706095139681340, -0.997709478618430180, -0.997712859602905460, +-0.997716238093098620, -0.997719614089001010, -0.997722987590604520, -0.997726358597900490, -0.997729727110880590, -0.997733093129536400, -0.997736456653859460, -0.997739817683841350, +-0.997743176219473730, -0.997746532260748160, -0.997749885807656220, -0.997753236860189570, -0.997756585418339890, -0.997759931482098740, -0.997763275051457680, -0.997766616126408600, +-0.997769954706942850, -0.997773290793052210, -0.997776624384728360, -0.997779955481962970, -0.997783284084747700, -0.997786610193074130, -0.997789933806934150, -0.997793254926319320, +-0.997796573551221310, -0.997799889681631800, -0.997803203317542690, -0.997806514458945530, -0.997809823105832110, -0.997813129258194100, -0.997816432916023290, -0.997819734079311350, +-0.997823032748050180, -0.997826328922231330, -0.997829622601846600, -0.997832913786887990, -0.997836202477346950, -0.997839488673215480, -0.997842772374485270, -0.997846053581148080, +-0.997849332293195830, -0.997852608510620190, -0.997855882233413150, -0.997859153461566280, -0.997862422195071600, -0.997865688433920760, -0.997868952178105780, -0.997872213427618450, +-0.997875472182450540, -0.997878728442593950, -0.997881982208040470, -0.997885233478782220, -0.997888482254810750, -0.997891728536118070, -0.997894972322696080, -0.997898213614536680, +-0.997901452411631750, -0.997904688713973200, -0.997907922521552910, -0.997911153834362800, -0.997914382652394850, -0.997917608975640970, -0.997920832804092940, -0.997924054137742990, +-0.997927272976582790, -0.997930489320604460, -0.997933703169799900, -0.997936914524161000, -0.997940123383679880, -0.997943329748348430, -0.997946533618158770, -0.997949734993102690, +-0.997952933873172190, -0.997956130258359500, -0.997959324148656400, -0.997962515544055020, -0.997965704444547350, -0.997968890850125410, -0.997972074760781200, -0.997975256176506840, +-0.997978435097294450, -0.997981611523135800, -0.997984785454023250, -0.997987956889948680, -0.997991125830904210, -0.997994292276881970, -0.997997456227873950, -0.998000617683872270, +-0.998003776644869060, -0.998006933110856420, -0.998010087081826480, -0.998013238557771350, -0.998016387538683050, -0.998019534024553790, -0.998022678015375700, -0.998025819511141000, +-0.998028958511841590, -0.998032095017469920, -0.998035229028018000, -0.998038360543477940, -0.998041489563841980, -0.998044616089102330, -0.998047740119251130, -0.998050861654280590, +-0.998053980694182940, -0.998057097238950310, -0.998060211288574920, -0.998063322843048990, -0.998066431902364770, -0.998069538466514470, -0.998072642535490330, -0.998075744109284570, +-0.998078843187889420, -0.998081939771297220, -0.998085033859500200, -0.998088125452490480, -0.998091214550260620, -0.998094301152802510, -0.998097385260108830, -0.998100466872171580, +-0.998103545988983210, -0.998106622610535950, -0.998109696736822150, -0.998112768367834140, -0.998115837503564140, -0.998118904144004620, -0.998121968289147790, -0.998125029938986110, +-0.998128089093511690, -0.998131145752717220, -0.998134199916594800, -0.998137251585136890, -0.998140300758335930, -0.998143347436184160, -0.998146391618673910, -0.998149433305797860, +-0.998152472497548130, -0.998155509193917270, -0.998158543394897620, -0.998161575100481540, -0.998164604310661560, -0.998167631025430160, -0.998170655244779550, -0.998173676968702410, +-0.998176696197191070, -0.998179712930237990, -0.998182727167835520, -0.998185738909976310, -0.998188748156652820, -0.998191754907857390, -0.998194759163582580, -0.998197760923820840, +-0.998200760188564740, -0.998203756957806720, -0.998206751231539350, -0.998209743009755070, -0.998212732292446340, -0.998215719079605930, -0.998218703371226090, -0.998221685167299590, +-0.998224664467818880, -0.998227641272776520, -0.998230615582164970, -0.998233587395976900, -0.998236556714204970, -0.998239523536841530, -0.998242487863879370, -0.998245449695310930, +-0.998248409031128880, -0.998251365871325790, -0.998254320215894330, -0.998257272064827060, -0.998260221418116540, -0.998263168275755560, -0.998266112637736570, -0.998269054504052340, +-0.998271993874695560, -0.998274930749658670, -0.998277865128934460, -0.998280797012515710, -0.998283726400394870, -0.998286653292564720, -0.998289577689017940, -0.998292499589747200, +-0.998295418994745280, -0.998298335904004740, -0.998301250317518480, -0.998304162235278960, -0.998307071657279050, -0.998309978583511560, -0.998312883013969030, -0.998315784948644370, +-0.998318684387530130, -0.998321581330619210, -0.998324475777904400, -0.998327367729378360, -0.998330257185033990, -0.998333144144863850, -0.998336028608860950, -0.998338910577017960, +-0.998341790049327660, -0.998344667025782840, -0.998347541506376390, -0.998350413491101100, -0.998353282979949850, -0.998356149972915330, -0.998359014469990420, -0.998361876471168030, +-0.998364735976440820, -0.998367592985801910, -0.998370447499243970, -0.998373299516759900, -0.998376149038342600, -0.998378996063984840, -0.998381840593679740, -0.998384682627419970, +-0.998387522165198440, -0.998390359207008140, -0.998393193752841970, -0.998396025802692820, -0.998398855356553590, -0.998401682414417180, -0.998404506976276580, -0.998407329042124810, +-0.998410148611954540, -0.998412965685759100, -0.998415780263531170, -0.998418592345263760, -0.998421401930949860, -0.998424209020582490, -0.998427013614154530, -0.998429815711659120, +-0.998432615313089130, -0.998435412418437580, -0.998438207027697590, -0.998440999140862040, -0.998443788757923940, -0.998446575878876420, -0.998449360503712470, -0.998452142632425100, +-0.998454922265007320, -0.998457699401452240, -0.998460474041752980, -0.998463246185902540, -0.998466015833893940, -0.998468782985720280, -0.998471547641374800, -0.998474309800850280, +-0.998477069464140050, -0.998479826631237240, -0.998482581302134740, -0.998485333476825780, -0.998488083155303570, -0.998490830337561140, -0.998493575023591600, -0.998496317213388160, +-0.998499056906943850, -0.998501794104251990, -0.998504528805305600, -0.998507261010097900, -0.998509990718622010, -0.998512717930871150, -0.998515442646838560, -0.998518164866517340, +-0.998520884589900630, -0.998523601816981850, -0.998526316547753920, -0.998529028782210280, -0.998531738520344050, -0.998534445762148560, -0.998537150507616820, -0.998539852756742290, +-0.998542552509518070, -0.998545249765937500, -0.998547944525993820, -0.998550636789680260, -0.998553326556990140, -0.998556013827916700, -0.998558698602453170, -0.998561380880592870, +-0.998564060662329170, -0.998566737947655380, -0.998569412736564630, -0.998572085029050480, -0.998574754825106050, -0.998577422124724670, -0.998580086927899790, -0.998582749234624760, +-0.998585409044892790, -0.998588066358697350, -0.998590721176031650, -0.998593373496889150, -0.998596023321263290, -0.998598670649147310, -0.998601315480534770, -0.998603957815418770, +-0.998606597653793000, -0.998609234995650690, -0.998611869840985380, -0.998614502189790310, -0.998617132042058930, -0.998619759397784800, -0.998622384256961260, -0.998625006619581760, +-0.998627626485639740, -0.998630243855128660, -0.998632858728041970, -0.998635471104373120, -0.998638080984115660, -0.998640688367262940, -0.998643293253808520, -0.998645895643745840, +-0.998648495537068360, -0.998651092933769750, -0.998653687833843340, -0.998656280237282810, -0.998658870144081500, -0.998661457554232970, -0.998664042467730880, -0.998666624884568700, +-0.998669204804739860, -0.998671782228238050, -0.998674357155056810, -0.998676929585189720, -0.998679499518630220, -0.998682066955371980, -0.998684631895408680, -0.998687194338733650, +-0.998689754285340680, -0.998692311735223440, -0.998694866688375260, -0.998697419144790040, -0.998699969104461240, -0.998702516567382400, -0.998705061533547430, -0.998707604002949670, +-0.998710143975583000, -0.998712681451440990, -0.998715216430517190, -0.998717748912805400, -0.998720278898299170, -0.998722806386992400, -0.998725331378878420, -0.998727853873951240, +-0.998730373872204420, -0.998732891373631640, -0.998735406378226550, -0.998737918885983070, -0.998740428896894740, -0.998742936410955350, -0.998745441428158690, -0.998747943948498310, +-0.998750443971968100, -0.998752941498561750, -0.998755436528273140, -0.998757929061095840, -0.998760419097023840, -0.998762906636050720, -0.998765391678170360, -0.998767874223376430, +-0.998770354271662940, -0.998772831823023450, -0.998775306877451970, -0.998777779434942170, -0.998780249495487940, -0.998782717059083060, -0.998785182125721430, -0.998787644695396830, +-0.998790104768103150, -0.998792562343834180, -0.998795017422583810, -0.998797470004345820, -0.998799920089114220, -0.998802367676882910, -0.998804812767645540, -0.998807255361396250, +-0.998809695458128700, -0.998812133057837000, -0.998814568160514950, -0.998817000766156540, -0.998819430874755550, -0.998821858486306000, -0.998824283600801780, -0.998826706218236880, +-0.998829126338605210, -0.998831543961900660, -0.998833959088117340, -0.998836371717249150, -0.998838781849289980, -0.998841189484233840, -0.998843594622074730, -0.998845997262806650, +-0.998848397406423620, -0.998850795052919520, -0.998853190202288470, -0.998855582854524470, -0.998857973009621420, -0.998860360667573550, -0.998862745828374640, -0.998865128492019030, +-0.998867508658500490, -0.998869886327813260, -0.998872261499951230, -0.998874634174908630, -0.998877004352679340, -0.998879372033257610, -0.998881737216637420, -0.998884099902812910, +-0.998886460091778170, -0.998888817783527230, -0.998891172978054300, -0.998893525675353390, -0.998895875875418730, -0.998898223578244320, -0.998900568783824380, -0.998902911492153050, +-0.998905251703224310, -0.998907589417032620, -0.998909924633571870, -0.998912257352836290, -0.998914587574820100, -0.998916915299517430, -0.998919240526922380, -0.998921563257029410, +-0.998923883489832410, -0.998926201225325720, -0.998928516463503560, -0.998930829204360050, -0.998933139447889530, -0.998935447194086110, -0.998937752442944140, -0.998940055194457720, +-0.998942355448621200, -0.998944653205428800, -0.998946948464874750, -0.998949241226953390, -0.998951531491658830, -0.998953819258985520, -0.998956104528927580, -0.998958387301479460, +-0.998960667576635260, -0.998962945354389450, -0.998965220634736360, -0.998967493417670100, -0.998969763703185240, -0.998972031491275890, -0.998974296781936390, -0.998976559575161290, +-0.998978819870944720, -0.998981077669281130, -0.998983332970164730, -0.998985585773590090, -0.998987836079551550, -0.998990083888043330, -0.998992329199059890, -0.998994572012595670, +-0.998996812328645010, -0.998999050147202360, -0.999001285468262060, -0.999003518291818550, -0.999005748617866170, -0.999007976446399490, -0.999010201777412840, -0.999012424610900780, +-0.999014644946857540, -0.999016862785277790, -0.999019078126155760, -0.999021290969486110, -0.999023501315263300, -0.999025709163481550, -0.999027914514135640, -0.999030117367220030, +-0.999032317722729050, -0.999034515580657260, -0.999036710940999110, -0.999038903803749270, -0.999041094168902190, -0.999043282036452320, -0.999045467406394330, -0.999047650278722550, +-0.999049830653431780, -0.999052008530516340, -0.999054183909970920, -0.999056356791789950, -0.999058527175968210, -0.999060695062500060, -0.999062860451380260, -0.999065023342603280, +-0.999067183736163770, -0.999069341632056180, -0.999071497030275310, -0.999073649930815710, -0.999075800333672050, -0.999077948238838780, -0.999080093646310670, -0.999082236556082300, +-0.999084376968148450, -0.999086514882503550, -0.999088650299142400, -0.999090783218059660, -0.999092913639249900, -0.999095041562707900, -0.999097166988428210, -0.999099289916405730, +-0.999101410346634910, -0.999103528279110640, -0.999105643713827480, -0.999107756650780330, -0.999109867089963740, -0.999111975031372390, -0.999114080475001280, -0.999116183420844850, +-0.999118283868897890, -0.999120381819155300, -0.999122477271611850, -0.999124570226262110, -0.999126660683100960, -0.999128748642123090, -0.999130834103323480, -0.999132917066696710, +-0.999134997532237670, -0.999137075499941130, -0.999139150969801880, -0.999141223941814700, -0.999143294415974600, -0.999145362392276140, -0.999147427870714310, -0.999149490851284020, +-0.999151551333979930, -0.999153609318796930, -0.999155664805729930, -0.999157717794773690, -0.999159768285923230, -0.999161816279173330, -0.999163861774518990, -0.999165904771954880, +-0.999167945271476010, -0.999169983273077380, -0.999172018776753660, -0.999174051782499960, -0.999176082290311070, -0.999178110300182110, -0.999180135812107740, -0.999182158826083080, +-0.999184179342103020, -0.999186197360162560, -0.999188212880256610, -0.999190225902380050, -0.999192236426527990, -0.999194244452695330, -0.999196249980876970, -0.999198253011068130, +-0.999200253543263580, -0.999202251577458340, -0.999204247113647530, -0.999206240151826130, -0.999208230691989160, -0.999210218734131520, -0.999212204278248420, -0.999214187324334760, +-0.999216167872385540, -0.999218145922395990, -0.999220121474361120, -0.999222094528275930, -0.999224065084135530, -0.999226033141934810, -0.999227998701669230, -0.999229961763333450, +-0.999231922326922930, -0.999233880392432550, -0.999235835959857430, -0.999237789029192690, -0.999239739600433550, -0.999241687673575020, -0.999243633248612320, -0.999245576325540560, +-0.999247516904354760, -0.999249454985050240, -0.999251390567622020, -0.999253323652065430, -0.999255254238375470, -0.999257182326547370, -0.999259107916576240, -0.999261031008457420, +-0.999262951602186030, -0.999264869697757300, -0.999266785295166330, -0.999268698394408460, -0.999270608995478820, -0.999272517098372610, -0.999274422703085090, -0.999276325809611570, +-0.999278226417947280, -0.999280124528087340, -0.999282020140027090, -0.999283913253761870, -0.999285803869286780, -0.999287691986597280, -0.999289577605688480, -0.999291460726555720, +-0.999293341349194340, -0.999295219473599560, -0.999297095099766830, -0.999298968227691260, -0.999300838857368310, -0.999302706988793310, -0.999304572621961480, -0.999306435756868280, +-0.999308296393508930, -0.999310154531878880, -0.999312010171973350, -0.999313863313787910, -0.999315713957317770, -0.999317562102558400, -0.999319407749505010, -0.999321250898153160, +-0.999323091548498190, -0.999324929700535550, -0.999326765354260460, -0.999328598509668600, -0.999330429166755190, -0.999332257325515670, -0.999334082985945500, -0.999335906148040130, +-0.999337726811795000, -0.999339544977205560, -0.999341360644267260, -0.999343173812975550, -0.999344984483325980, -0.999346792655313900, -0.999348598328934750, -0.999350401504184190, +-0.999352202181057690, -0.999354000359550580, -0.999355796039658520, -0.999357589221376960, -0.999359379904701360, -0.999361168089627380, -0.999362953776150480, -0.999364736964266200, +-0.999366517653970110, -0.999368295845257660, -0.999370071538124520, -0.999371844732566130, -0.999373615428578170, -0.999375383626156190, -0.999377149325295750, -0.999378912525992420, +-0.999380673228241760, -0.999382431432039530, -0.999384187137381090, -0.999385940344262310, -0.999387691052678660, -0.999389439262625690, -0.999391184974099180, -0.999392928187094690, +-0.999394668901607890, -0.999396407117634440, -0.999398142835170030, -0.999399876054210100, -0.999401606774750650, -0.999403334996787130, -0.999405060720315210, -0.999406783945330670, +-0.999408504671829180, -0.999410222899806410, -0.999411938629258150, -0.999413651860179940, -0.999415362592567690, -0.999417070826416950, -0.999418776561723620, -0.999420479798483250, +-0.999422180536691850, -0.999423878776344870, -0.999425574517438190, -0.999427267759967600, -0.999428958503928880, -0.999430646749317700, -0.999432332496129950, -0.999434015744361300, +-0.999435696494007650, -0.999437374745064780, -0.999439050497528460, -0.999440723751394590, -0.999442394506658840, -0.999444062763317100, -0.999445728521365150, -0.999447391780798890, +-0.999449052541614200, -0.999450710803806870, -0.999452366567372800, -0.999454019832307860, -0.999455670598607740, -0.999457318866268540, -0.999458964635285940, -0.999460607905656050, +-0.999462248677374540, -0.999463886950437420, -0.999465522724840680, -0.999467156000580000, -0.999468786777651500, -0.999470415056051050, -0.999472040835774570, -0.999473664116817930, +-0.999475284899177140, -0.999476903182848210, -0.999478518967826910, -0.999480132254109480, -0.999481743041691570, -0.999483351330569310, -0.999484957120738700, -0.999486560412195750, +-0.999488161204936330, -0.999489759498956580, -0.999491355294252370, -0.999492948590819830, -0.999494539388654850, -0.999496127687753530, -0.999497713488111890, -0.999499296789726040, +-0.999500877592591870, -0.999502455896705500, -0.999504031702063030, -0.999505605008660480, -0.999507175816493950, -0.999508744125559460, -0.999510309935853100, -0.999511873247371010, +-0.999513434060109170, -0.999514992374063720, -0.999516548189230860, -0.999518101505606600, -0.999519652323187070, -0.999521200641968480, -0.999522746461946830, -0.999524289783118250, +-0.999525830605479060, -0.999527368929025270, -0.999528904753753000, -0.999530438079658580, -0.999531968906737900, -0.999533497234987410, -0.999535023064403230, -0.999536546394981350, +-0.999538067226718230, -0.999539585559609870, -0.999541101393652600, -0.999542614728842540, -0.999544125565175910, -0.999545633902649060, -0.999547139741258080, -0.999548643080999220, +-0.999550143921868810, -0.999551642263862950, -0.999553138106978100, -0.999554631451210260, -0.999556122296555990, -0.999557610643011300, -0.999559096490572620, -0.999560579839236300, +-0.999562060688998440, -0.999563539039855400, -0.999565014891803600, -0.999566488244839180, -0.999567959098958570, -0.999569427454158000, -0.999570893310434030, -0.999572356667782660, +-0.999573817526200450, -0.999575275885683730, -0.999576731746228850, -0.999578185107832030, -0.999579635970489820, -0.999581084334198570, -0.999582530198954490, -0.999583973564754150, +-0.999585414431593880, -0.999586852799470020, -0.999588288668379120, -0.999589722038317420, -0.999591152909281470, -0.999592581281267600, -0.999594007154272270, -0.999595430528292030, +-0.999596851403323110, -0.999598269779362060, -0.999599685656405330, -0.999601099034449380, -0.999602509913490760, -0.999603918293525790, -0.999605324174551060, -0.999606727556563100, +-0.999608128439558150, -0.999609526823532990, -0.999610922708484060, -0.999612316094407700, -0.999613706981300590, -0.999615095369159270, -0.999616481257980190, -0.999617864647759920, +-0.999619245538494900, -0.999620623930181810, -0.999621999822817190, -0.999623373216397600, -0.999624744110919510, -0.999626112506379560, -0.999627478402774330, -0.999628841800100480, +-0.999630202698354450, -0.999631561097532930, -0.999632916997632570, -0.999634270398649830, -0.999635621300581480, -0.999636969703423970, -0.999638315607174200, -0.999639659011828500, +-0.999640999917383750, -0.999642338323836420, -0.999643674231183280, -0.999645007639420990, -0.999646338548546120, -0.999647666958555450, -0.999648992869445530, -0.999650316281213260, +-0.999651637193855080, -0.999652955607367890, -0.999654271521748240, -0.999655584936993020, -0.999656895853098800, -0.999658204270062250, -0.999659510187880240, -0.999660813606549460, +-0.999662114526066680, -0.999663412946428580, -0.999664708867632030, -0.999666002289673620, -0.999667293212550210, -0.999668581636258600, -0.999669867560795460, -0.999671150986157660, +-0.999672431912342120, -0.999673710339345380, -0.999674986267164440, -0.999676259695795990, -0.999677530625236900, -0.999678799055483960, -0.999680064986533940, -0.999681328418383860, +-0.999682589351030490, -0.999683847784470610, -0.999685103718701120, -0.999686357153718900, -0.999687608089520730, -0.999688856526103510, -0.999690102463464240, -0.999691345901599690, +-0.999692586840506770, -0.999693825280182360, -0.999695061220623350, -0.999696294661826750, -0.999697525603789440, -0.999698754046508320, -0.999699979989980280, -0.999701203434202210, +-0.999702424379171230, -0.999703642824884220, -0.999704858771337970, -0.999706072218529700, -0.999707283166456180, -0.999708491615114550, -0.999709697564501560, -0.999710901014614350, +-0.999712101965450020, -0.999713300417005240, -0.999714496369277340, -0.999715689822263220, -0.999716880775959770, -0.999718069230364210, -0.999719255185473440, -0.999720438641284570, +-0.999721619597794490, -0.999722798055000420, -0.999723974012899360, -0.999725147471488440, -0.999726318430764540, -0.999727486890724990, -0.999728652851366580, -0.999729816312686540, +-0.999730977274682080, -0.999732135737350090, -0.999733291700687810, -0.999734445164692230, -0.999735596129360580, -0.999736744594689860, -0.999737890560677410, -0.999739034027320230, +-0.999740174994615320, -0.999741313462560120, -0.999742449431151540, -0.999743582900386900, -0.999744713870263310, -0.999745842340777900, -0.999746968311927890, -0.999748091783710490, +-0.999749212756122830, -0.999750331229162130, -0.999751447202825600, -0.999752560677110490, -0.999753671652013900, -0.999754780127533270, -0.999755886103665500, -0.999756989580408150, +-0.999758090557758330, -0.999759189035713260, -0.999760285014270170, -0.999761378493426500, -0.999762469473179260, -0.999763557953525890, -0.999764643934463630, -0.999765727415989680, +-0.999766808398101500, -0.999767886880796320, -0.999768962864071350, -0.999770036347924050, -0.999771107332351530, -0.999772175817351340, -0.999773241802920710, -0.999774305289056970, +-0.999775366275757470, -0.999776424763019530, -0.999777480750840610, -0.999778534239217920, -0.999779585228148800, -0.999780633717630930, -0.999781679707661300, -0.999782723198237580, +-0.999783764189356990, -0.999784802681016990, -0.999785838673215020, -0.999786872165948410, -0.999787903159214620, -0.999788931653011080, -0.999789957647335250, -0.999790981142184560, +-0.999792002137556370, -0.999793020633448100, -0.999794036629857330, -0.999795050126781490, -0.999796061124218040, -0.999797069622164410, -0.999798075620618180, -0.999799079119576660, +-0.999800080119037430, -0.999801078618998140, -0.999802074619456030, -0.999803068120408760, -0.999804059121853770, -0.999805047623788750, -0.999806033626211010, -0.999807017129118240, +-0.999807998132507980, -0.999808976636377580, -0.999809952640724810, -0.999810926145547230, -0.999811897150842290, -0.999812865656607540, -0.999813831662840660, -0.999814795169539310, +-0.999815756176700820, -0.999816714684322980, -0.999817670692403460, -0.999818624200939590, -0.999819575209929260, -0.999820523719370020, -0.999821469729259450, -0.999822413239595200, +-0.999823354250374830, -0.999824292761596230, -0.999825228773256750, -0.999826162285354260, -0.999827093297886440, -0.999828021810850840, -0.999828947824245140, -0.999829871338067110, +-0.999830792352314310, -0.999831710866984640, -0.999832626882075640, -0.999833540397585100, -0.999834451413510790, -0.999835359929850180, -0.999836265946601240, -0.999837169463761670, +-0.999838070481329220, -0.999838968999301470, -0.999839865017676410, -0.999840758536451600, -0.999841649555624930, -0.999842538075194190, -0.999843424095157030, -0.999844307615511350, +-0.999845188636254930, -0.999846067157385440, -0.999846943178900880, -0.999847816700798920, -0.999848687723077440, -0.999849556245734240, -0.999850422268767080, -0.999851285792173970, +-0.999852146815952580, -0.999853005340100800, -0.999853861364616510, -0.999854714889497620, -0.999855565914742010, -0.999856414440347340, -0.999857260466311740, -0.999858103992632860, +-0.999858945019308830, -0.999859783546337420, -0.999860619573716520, -0.999861453101444140, -0.999862284129518050, -0.999863112657936370, -0.999863938686696760, -0.999864762215797340, +-0.999865583245236110, -0.999866401775010850, -0.999867217805119560, -0.999868031335560240, -0.999868842366330890, -0.999869650897429410, -0.999870456928853790, -0.999871260460602040, +-0.999872061492672160, -0.999872860025062040, -0.999873656057769900, -0.999874449590793520, -0.999875240624131020, -0.999876029157780510, -0.999876815191739880, -0.999877598726007120, +-0.999878379760580470, -0.999879158295457810, -0.999879934330637270, -0.999880707866116940, -0.999881478901894830, -0.999882247437969050, -0.999883013474337610, -0.999883777010998620, +-0.999884538047950190, -0.999885296585190430, -0.999886052622717350, -0.999886806160529270, -0.999887557198624100, -0.999888305737000050, -0.999889051775655240, -0.999889795314587880, +-0.999890536353795880, -0.999891274893277670, -0.999892010933031260, -0.999892744473054760, -0.999893475513346400, -0.999894204053904390, -0.999894930094726850, -0.999895653635812010, +-0.999896374677157970, -0.999897093218763080, -0.999897809260625440, -0.999898522802743160, -0.999899233845114700, -0.999899942387738160, -0.999900648430611770, -0.999901351973733640, +-0.999902053017102220, -0.999902751560715730, -0.999903447604572280, -0.999904141148670210, -0.999904832193007740, -0.999905520737583320, -0.999906206782394950, -0.999906890327441180, +-0.999907571372720130, -0.999908249918230130, -0.999908925963969630, -0.999909599509936740, -0.999910270556129800, -0.999910939102547250, -0.999911605149187310, -0.999912268696048320, +-0.999912929743128730, -0.999913588290426870, -0.999914244337940960, -0.999914897885669450, -0.999915548933610680, -0.999916197481763080, -0.999916843530124890, -0.999917487078694660, +-0.999918128127470720, -0.999918766676451520, -0.999919402725635290, -0.999920036275020570, -0.999920667324605830, -0.999921295874389380, -0.999921921924369680, -0.999922545474545180, +-0.999923166524914420, -0.999923785075475640, -0.999924401126227380, -0.999925014677168100, -0.999925625728296350, -0.999926234279610580, -0.999926840331109120, -0.999927443882790650, +-0.999928044934653480, -0.999928643486696300, -0.999929239538917440, -0.999929833091315450, -0.999930424143888890, -0.999931012696636310, -0.999931598749556280, -0.999932182302647130, +-0.999932763355907530, -0.999933341909336030, -0.999933917962931180, -0.999934491516691560, -0.999935062570615710, -0.999935631124702300, -0.999936197178949660, -0.999936760733356580, +-0.999937321787921610, -0.999937880342643300, -0.999938436397520340, -0.999938989952551260, -0.999939541007734740, -0.999940089563069350, -0.999940635618553620, -0.999941179174186460, +-0.999941720229966300, -0.999942258785891820, -0.999942794841961690, -0.999943328398174680, -0.999943859454529240, -0.999944388011024140, -0.999944914067658170, -0.999945437624429780, +-0.999945958681337840, -0.999946477238381040, -0.999946993295558140, -0.999947506852867600, -0.999948017910308410, -0.999948526467879020, -0.999949032525578430, -0.999949536083405310, +-0.999950037141358220, -0.999950535699436150, -0.999951031757637670, -0.999951525315961650, -0.999952016374406780, -0.999952504932971830, -0.999952990991655690, -0.999953474550457130, +-0.999953955609374720, -0.999954434168407570, -0.999954910227554230, -0.999955383786813700, -0.999955854846184660, -0.999956323405665980, -0.999956789465256570, -0.999957253024955080, +-0.999957714084760530, -0.999958172644671680, -0.999958628704687440, -0.999959082264806560, -0.999959533325027960, -0.999959981885350510, -0.999960427945773220, -0.999960871506294760, +-0.999961312566914230, -0.999961751127630310, -0.999962187188441990, -0.999962620749348270, -0.999963051810348060, -0.999963480371440120, -0.999963906432623560, -0.999964329993897170, +-0.999964751055259950, -0.999965169616710890, -0.999965585678248890, -0.999965999239872950, -0.999966410301581950, -0.999966818863375020, -0.999967224925250920, -0.999967628487208880, +-0.999968029549247680, -0.999968428111366440, -0.999968824173564140, -0.999969217735839800, -0.999969608798192410, -0.999969997360620980, -0.999970383423124500, -0.999970766985702090, +-0.999971148048352850, -0.999971526611075690, -0.999971902673869710, -0.999972276236733900, -0.999972647299667510, -0.999973015862669400, -0.999973381925738810, -0.999973745488874850, +-0.999974106552076410, -0.999974465115342710, -0.999974821178672870, -0.999975174742065990, -0.999975525805521180, -0.999975874369037570, -0.999976220432614250, -0.999976563996250340, +-0.999976905059945080, -0.999977243623697550, -0.999977579687506890, -0.999977913251372310, -0.999978244315292920, -0.999978572879267950, -0.999978898943296500, -0.999979222507377810, +-0.999979543571511090, -0.999979862135695450, -0.999980178199930240, -0.999980491764214550, -0.999980802828547620, -0.999981111392928670, -0.999981417457357020, -0.999981721021831800, +-0.999982022086352230, -0.999982320650917630, -0.999982616715527240, -0.999982910280180270, -0.999983201344876060, -0.999983489909613830, -0.999983775974392920, -0.999984059539212540, +-0.999984340604071930, -0.999984619168970630, -0.999984895233907660, -0.999985168798882550, -0.999985439863894430, -0.999985708428942740, -0.999985974494026710, -0.999986238059145880, +-0.999986499124299380, -0.999986757689486640, -0.999987013754707000, -0.999987267319959790, -0.999987518385244470, -0.999987766950560350, -0.999988013015906780, -0.999988256581283210, +-0.999988497646689070, -0.999988736212123590, -0.999988972277586320, -0.999989205843076490, -0.999989436908593770, -0.999989665474137480, -0.999989891539706970, -0.999990115105301780, +-0.999990336170921260, -0.999990554736564840, -0.999990770802232090, -0.999990984367922440, -0.999991195433635350, -0.999991403999370140, -0.999991610065126600, -0.999991813630903950, +-0.999992014696701740, -0.999992213262519520, -0.999992409328356760, -0.999992602894212990, -0.999992793960087670, -0.999992982525980460, -0.999993168591890690, -0.999993352157818040, +-0.999993533223762050, -0.999993711789722180, -0.999993887855698090, -0.999994061421689230, -0.999994232487695140, -0.999994401053715620, -0.999994567119749990, -0.999994730685798030, +-0.999994891751859180, -0.999995050317933120, -0.999995206384019400, -0.999995359950117680, -0.999995511016227630, -0.999995659582348710, -0.999995805648480670, -0.999995949214623090, +-0.999996090280775740, -0.999996228846938060, -0.999996364913109840, -0.999996498479290730, -0.999996629545480410, -0.999996758111678430, -0.999996884177884570, -0.999997007744098500, +-0.999997128810319990, -0.999997247376548600, -0.999997363442784120, -0.999997477009026190, -0.999997588075274610, -0.999997696641529040, -0.999997802707789150, -0.999997906274054830, +-0.999998007340325730, -0.999998105906601650, -0.999998201972882250, -0.999998295539167410, -0.999998386605456810, -0.999998475171750220, -0.999998561238047420, -0.999998644804348300, +-0.999998725870652530, -0.999998804436959880, -0.999998880503270350, -0.999998954069583500, -0.999999025135899330, -0.999999093702217620, -0.999999159768538040, -0.999999223334860690, +-0.999999284401185240, -0.999999342967511580, -0.999999399033839610, -0.999999452600169090, -0.999999503666499920, -0.999999552232832100, -0.999999598299165290, -0.999999641865499500, +-0.999999682931834610, -0.999999721498170510, -0.999999757564507100, -0.999999791130844360, -0.999999822197182090, -0.999999850763520270, -0.999999876829858910, -0.999999900396197680, +-0.999999921462536800, -0.999999940028876160, -0.999999956095215640, -0.999999969661555240, -0.999999980727894870, -0.999999989294234610, -0.999999995360574270, -0.999999998926914050, +-0.999999999993253730, -0.999999998559593540, -0.999999994625933250, -0.999999988192273090, -0.999999979258612840, -0.999999967824952710, -0.999999953891292590, -0.999999937457632600, +-0.999999918523972850, -0.999999897090313230, -0.999999873156653950, -0.999999846722994910, -0.999999817789336220, -0.999999786355678100, -0.999999752422020440, -0.999999715988363350, +-0.999999677054707050, -0.999999635621051540, -0.999999591687396940, -0.999999545253743350, -0.999999496320091000, -0.999999444886439770, -0.999999390952790000, -0.999999334519141690, +-0.999999275585495170, -0.999999214151850340, -0.999999150218207510, -0.999999083784566810, -0.999999014850928350, -0.999998943417292450, -0.999998869483659130, -0.999998793050028700, +-0.999998714116401180, -0.999998632682777000, -0.999998548749156170, -0.999998462315538910, -0.999998373381925540, -0.999998281948316300, -0.999998188014711300, -0.999998091581110860, +-0.999997992647515100, -0.999997891213924460, -0.999997787280339060, -0.999997680846759220, -0.999997571913185170, -0.999997460479617130, -0.999997346546055540, -0.999997230112500520, +-0.999997111178952400, -0.999996989745411510, -0.999996865811878190, -0.999996739378352760, -0.999996610444835340, -0.999996479011326490, -0.999996345077826420, -0.999996208644335470, +-0.999996069710853970, -0.999995928277382370, -0.999995784343920890, -0.999995637910470080, -0.999995488977030060, -0.999995337543601260, -0.999995183610184250, -0.999995027176779240, +-0.999994868243386570, -0.999994706810006790, -0.999994542876640360, -0.999994376443287370, -0.999994207509948610, -0.999994036076624290, -0.999993862143314760, -0.999993685710020670, +-0.999993506776742370, -0.999993325343480290, -0.999993141410234990, -0.999992954977006690, -0.999992766043796060, -0.999992574610603540, -0.999992380677429570, -0.999992184244274610, +-0.999991985311139310, -0.999991783878023900, -0.999991579944929150, -0.999991373511855300, -0.999991164578803100, -0.999990953145773020, -0.999990739212765600, -0.999990522779781290, +-0.999990303846820640, -0.999990082413884210, -0.999989858480972550, -0.999989632048086330, -0.999989403115225990, -0.999989171682392210, -0.999988937749585420, -0.999988701316806280, +-0.999988462384055480, -0.999988220951333440, -0.999987977018640840, -0.999987730585978340, -0.999987481653346500, -0.999987230220745980, -0.999986976288177340, -0.999986719855641360, +-0.999986460923138480, -0.999986199490669470, -0.999985935558234900, -0.999985669125835640, -0.999985400193472040, -0.999985128761145090, -0.999984854828855240, -0.999984578396603260, +-0.999984299464389830, -0.999984018032215700, -0.999983734100081460, -0.999983447667987970, -0.999983158735935800, -0.999982867303925720, -0.999982573371958510, -0.999982276940034830, +-0.999981978008155470, -0.999981676576321200, -0.999981372644532680, -0.999981066212790700, -0.999980757281096140, -0.999980445849449670, -0.999980131917852070, -0.999979815486304210, +-0.999979496554806670, -0.999979175123360540, -0.999978851191966390, -0.999978524760625100, -0.999978195829337560, -0.999977864398104430, -0.999977530466926720, -0.999977194035805210, +-0.999976855104740660, -0.999976513673733970, -0.999976169742786030, -0.999975823311897600, -0.999975474381069710, -0.999975122950303110, -0.999974769019598700, -0.999974412588957250, +-0.999974053658379880, -0.999973692227867360, -0.999973328297420690, -0.999972961867040540, -0.999972592936728130, -0.999972221506484130, -0.999971847576309640, -0.999971471146205550, +-0.999971092216172750, -0.999970710786212250, -0.999970326856324920, -0.999969940426511770, -0.999969551496773800, -0.999969160067111900, -0.999968766137527170, -0.999968369708020500, +-0.999967970778592900, -0.999967569349245360, -0.999967165419978990, -0.999966758990794570, -0.999966350061693320, -0.999965938632676240, -0.999965524703744220, -0.999965108274898480, +-0.999964689346139910, -0.999964267917469620, -0.999963843988888710, -0.999963417560398080, -0.999962988631999060, -0.999962557203692430, -0.999962123275479510, -0.999961686847361200, +-0.999961247919338710, -0.999960806491413170, -0.999960362563585560, -0.999959916135857000, -0.999959467208228700, -0.999959015780701680, -0.999958561853277140, -0.999958105425956200, +-0.999957646498740080, -0.999957185071629780, -0.999956721144626530, -0.999956254717731420, -0.999955785790945680, -0.999955314364270540, -0.999954840437707100, -0.999954364011256480, +-0.999953885084920000, -0.999953403658698890, -0.999952919732594150, -0.999952433306607210, -0.999951944380739090, -0.999951452954991220, -0.999950959029364590, -0.999950462603860670, +-0.999949963678480550, -0.999949462253225560, -0.999948958328096830, -0.999948451903095780, -0.999947942978223540, -0.999947431553481540, -0.999946917628870890, -0.999946401204392930, +-0.999945882280048990, -0.999945360855840400, -0.999944836931768390, -0.999944310507834170, -0.999943781584039290, -0.999943250160384990, -0.999942716236872480, -0.999942179813503200, +-0.999941640890278480, -0.999941099467199670, -0.999940555544268080, -0.999940009121485060, -0.999939460198852050, -0.999938908776370480, -0.999938354854041590, -0.999937798431866810, +-0.999937239509847480, -0.999936678087985030, -0.999936114166281030, -0.999935547744736590, -0.999934978823353360, -0.999934407402132690, -0.999933833481076010, -0.999933257060184770, +-0.999932678139460300, -0.999932096718904150, -0.999931512798517770, -0.999930926378302610, -0.999930337458260210, -0.999929746038391910, -0.999929152118699260, -0.999928555699183710, +-0.999927956779846800, -0.999927355360689880, -0.999926751441714720, -0.999926145022922650, -0.999925536104315120, -0.999924924685893890, -0.999924310767660310, -0.999923694349615920, +-0.999923075431762290, -0.999922454014100960, -0.999921830096633490, -0.999921203679361550, -0.999920574762286460, -0.999919943345410010, -0.999919309428733750, -0.999918673012259120, +-0.999918034095987780, -0.999917392679921520, -0.999916748764061670, -0.999916102348409890, -0.999915453432967950, -0.999914802017737410, -0.999914148102719720, -0.999913491687916770, +-0.999912832773330100, -0.999912171358961270, -0.999911507444812050, -0.999910841030884120, -0.999910172117179030, -0.999909500703698550, -0.999908826790444240, -0.999908150377417980, +-0.999907471464621220, -0.999906790052055850, -0.999906106139723530, -0.999905419727625810, -0.999904730815764700, -0.999904039404141740, -0.999903345492758610, -0.999902649081617190, +-0.999901950170719030, -0.999901248760066140, -0.999900544849660070, -0.999899838439502590, -0.999899129529595590, -0.999898418119940740, -0.999897704210539810, -0.999896987801394690, +-0.999896268892507050, -0.999895547483878660, -0.999894823575511520, -0.999894097167407290, -0.999893368259567870, -0.999892636851994920, -0.999891902944690440, -0.999891166537656200, +-0.999890427630894090, -0.999889686224405880, -0.999888942318193360, -0.999888195912258640, -0.999887447006603370, -0.999886695601229450, -0.999885941696138760, -0.999885185291333300, +-0.999884426386814850, -0.999883664982585300, -0.999882901078646640, -0.999882134675000640, -0.999881365771649430, -0.999880594368594780, -0.999879820465838560, -0.999879044063382790, +-0.999878265161229460, -0.999877483759380570, -0.999876699857837780, -0.999875913456603320, -0.999875124555679170, -0.999874333155067130, -0.999873539254769180, -0.999872742854787440, +-0.999871943955123910, -0.999871142555780470, -0.999870338656759120, -0.999869532258061970, -0.999868723359691010, -0.999867911961648260, -0.999867098063935700, -0.999866281666555450, +-0.999865462769509380, -0.999864641372799730, -0.999863817476428500, -0.999862991080397670, -0.999862162184709360, -0.999861330789365680, -0.999860496894368620, -0.999859660499720420, +-0.999858821605422940, -0.999857980211478540, -0.999857136317889080, -0.999856289924656800, -0.999855441031783810, -0.999854589639272210, -0.999853735747124220, -0.999852879355341840, +-0.999852020463927180, -0.999851159072882580, -0.999850295182210020, -0.999849428791911740, -0.999848559901989840, -0.999847688512446650, -0.999846814623284170, -0.999845938234504630, +-0.999845059346110340, -0.999844177958103320, -0.999843294070485890, -0.999842407683260160, -0.999841518796428460, -0.999840627409993020, -0.999839733523955940, -0.999838837138319560, +-0.999837938253086090, -0.999837036868257760, -0.999836132983836780, -0.999835226599825600, -0.999834317716226220, -0.999833406333041070, -0.999832492450272500, -0.999831576067922610, +-0.999830657185993840, -0.999829735804488420, -0.999828811923408560, -0.999827885542756810, -0.999826956662535290, -0.999826025282746330, -0.999825091403392370, -0.999824155024475640, +-0.999823216145998560, -0.999822274767963480, -0.999821330890372620, -0.999820384513228520, -0.999819435636533420, -0.999818484260289630, -0.999817530384499720, -0.999816574009166010, +-0.999815615134290850, -0.999814653759876660, -0.999813689885925780, -0.999812723512440770, -0.999811754639423840, -0.999810783266877670, -0.999809809394804460, -0.999808833023206670, +-0.999807854152086840, -0.999806872781447420, -0.999805888911290740, -0.999804902541619470, -0.999803913672435820, -0.999802922303742460, -0.999801928435541720, -0.999800932067836160, +-0.999799933200628320, -0.999798931833920660, -0.999797927967715610, -0.999796921602015830, -0.999795912736823670, -0.999794901372141780, -0.999793887507972600, -0.999792871144318700, +-0.999791852281182610, -0.999790830918566910, -0.999789807056474130, -0.999788780694906840, -0.999787751833867590, -0.999786720473359040, -0.999785686613383630, -0.999784650253943920, +-0.999783611395042680, -0.999782570036682360, -0.999781526178865730, -0.999780479821595120, -0.999779430964873430, -0.999778379608703190, -0.999777325753086870, -0.999776269398027330, +-0.999775210543527030, -0.999774149189588850, -0.999773085336215120, -0.999772018983408840, -0.999770950131172450, -0.999769878779508630, -0.999768804928420130, -0.999767728577909740, +-0.999766649727979910, -0.999765568378633510, -0.999764484529873100, -0.999763398181701570, -0.999762309334121470, -0.999761217987135690, -0.999760124140746780, -0.999759027794957620, +-0.999757928949770890, -0.999756827605189360, -0.999755723761215690, -0.999754617417852760, -0.999753508575103260, -0.999752397232969940, -0.999751283391455690, -0.999750167050563300, +-0.999749048210295420, -0.999747926870654830, -0.999746803031644540, -0.999745676693267190, -0.999744547855525690, -0.999743416518422800, -0.999742282681961410, -0.999741146346144300, +-0.999740007510974250, -0.999738866176454240, -0.999737722342587070, -0.999736576009375600, -0.999735427176822730, -0.999734275844931240, -0.999733122013704010, -0.999731965683144040, +-0.999730806853254110, -0.999729645524037200, -0.999728481695496220, -0.999727315367633930, -0.999726146540453440, -0.999724975213957530, -0.999723801388149200, -0.999722625063031440, +-0.999721446238607040, -0.999720264914878980, -0.999719081091850370, -0.999717894769524000, -0.999716705947902850, -0.999715514626990040, -0.999714320806788350, -0.999713124487300870, +-0.999711925668530620, -0.999710724350480580, -0.999709520533153650, -0.999708314216552930, -0.999707105400681530, -0.999705894085542220, -0.999704680271138240, -0.999703463957472670, +-0.999702245144548310, -0.999701023832368360, -0.999699800020935840, -0.999698573710253830, -0.999697344900325360, -0.999696113591153620, -0.999694879782741520, -0.999693643475092260, +-0.999692404668208860, -0.999691163362094400, -0.999689919556752130, -0.999688673252185020, -0.999687424448396200, -0.999686173145388880, -0.999684919343166060, -0.999683663041731060, +-0.999682404241086790, -0.999681142941236560, -0.999679879142183370, -0.999678612843930670, -0.999677344046481230, -0.999676072749838610, -0.999674798954005680, -0.999673522658985790, +-0.999672243864782150, -0.999670962571397870, -0.999669678778836170, -0.999668392487100270, -0.999667103696193380, -0.999665812406118850, -0.999664518616879660, -0.999663222328479150, +-0.999661923540920650, -0.999660622254207380, -0.999659318468342440, -0.999658012183329280, -0.999656703399171120, -0.999655392115871180, -0.999654078333432670, -0.999652762051859050, +-0.999651443271153520, -0.999650121991319420, -0.999648798212359970, -0.999647471934278500, -0.999646143157078340, -0.999644811880762930, -0.999643478105335380, -0.999642141830799140, +-0.999640803057157630, -0.999639461784414100, -0.999638118012571850, -0.999636771741634340, -0.999635422971604900, -0.999634071702486860, -0.999632717934283650, -0.999631361666998730, +-0.999630002900635310, -0.999628641635196940, -0.999627277870686950, -0.999625911607108790, -0.999624542844465780, -0.999623171582761480, -0.999621797821999230, -0.999620421562182560, +-0.999619042803314710, -0.999617661545399330, -0.999616277788439760, -0.999614891532439540, -0.999613502777402020, -0.999612111523330850, -0.999610717770229360, -0.999609321518101000, +-0.999607922766949430, -0.999606521516777980, -0.999605117767590310, -0.999603711519389760, -0.999602302772179980, -0.999600891525964430, -0.999599477780746650, -0.999598061536530190, +-0.999596642793318610, -0.999595221551115350, -0.999593797809924080, -0.999592371569748340, -0.999590942830591580, -0.999589511592457570, -0.999588077855349750, -0.999586641619271690, +-0.999585202884227030, -0.999583761650219450, -0.999582317917252380, -0.999580871685329500, -0.999579422954454460, -0.999577971724630920, -0.999576517995862450, -0.999575061768152580, +-0.999573603041505110, -0.999572141815923690, -0.999570678091411870, -0.999569211867973430, -0.999567743145611810, -0.999566271924330900, -0.999564798204134350, -0.999563321985025840, +-0.999561843267008920, -0.999560362050087470, -0.999558878334265040, -0.999557392119545530, -0.999555903405932370, -0.999554412193429550, -0.999552918482040750, -0.999551422271769630, +-0.999549923562619960, -0.999548422354595400, -0.999546918647699840, -0.999545412441936950, -0.999543903737310610, -0.999542392533824490, -0.999540878831482350, -0.999539362630287980, +-0.999537843930245250, -0.999536322731357950, -0.999534799033629740, -0.999533272837064610, -0.999531744141666230, -0.999530212947438600, -0.999528679254385380, -0.999527143062510450, +-0.999525604371817700, -0.999524063182310910, -0.999522519493993960, -0.999520973306870730, -0.999519424620945010, -0.999517873436220780, -0.999516319752701940, -0.999514763570392150, +-0.999513204889295510, -0.999511643709415920, -0.999510080030757140, -0.999508513853323290, -0.999506945177118020, -0.999505374002145450, -0.999503800328409350, -0.999502224155913830, +-0.999500645484662780, -0.999499064314660070, -0.999497480645909710, -0.999495894478415690, -0.999494305812181900, -0.999492714647212340, -0.999491120983511010, -0.999489524821081890, +-0.999487926159928870, -0.999486325000056080, -0.999484721341467490, -0.999483115184167100, -0.999481506528158930, -0.999479895373447060, -0.999478281720035390, -0.999476665567927910, +-0.999475046917128850, -0.999473425767642200, -0.999471802119472060, -0.999470175972622330, -0.999468547327097110, -0.999466916182900620, -0.999465282540036750, -0.999463646398509710, +-0.999462007758323610, -0.999460366619482340, -0.999458722981990340, -0.999457076845851390, -0.999455428211069810, -0.999453777077649710, -0.999452123445595090, -0.999450467314910160, +-0.999448808685599150, -0.999447147557666060, -0.999445483931115100, -0.999443817805950370, -0.999442149182176220, -0.999440478059796520, -0.999438804438815830, -0.999437128319238030, +-0.999435449701067350, -0.999433768584308100, -0.999432084968964520, -0.999430398855040590, -0.999428710242540760, -0.999427019131469140, -0.999425325521829940, -0.999423629413627390, +-0.999421930806865810, -0.999420229701549420, -0.999418526097682450, -0.999416819995269210, -0.999415111394313830, -0.999413400294820730, -0.999411686696794140, -0.999409970600238280, +-0.999408252005157480, -0.999406530911556180, -0.999404807319438370, -0.999403081228808720, -0.999401352639671230, -0.999399621552030440, -0.999397887965890570, -0.999396151881255970, +-0.999394413298131060, -0.999392672216520060, -0.999390928636427310, -0.999389182557857360, -0.999387433980814420, -0.999385682905302830, -0.999383929331327030, -0.999382173258891560, +-0.999380414688000540, -0.999378653618658410, -0.999376890050869830, -0.999375123984638900, -0.999373355419970190, -0.999371584356868130, -0.999369810795337040, -0.999368034735381380, +-0.999366256177005810, -0.999364475120214420, -0.999362691565012010, -0.999360905511402780, -0.999359116959391280, -0.999357325908981960, -0.999355532360179380, -0.999353736312987960, +-0.999351937767412160, -0.999350136723456520, -0.999348333181125590, -0.999346527140423820, -0.999344718601355760, -0.999342907563925850, -0.999341094028138640, -0.999339277993998800, +-0.999337459461510650, -0.999335638430678960, -0.999333814901508080, -0.999331988874002760, -0.999330160348167350, -0.999328329324006610, -0.999326495801525110, -0.999324659780727260, +-0.999322821261617760, -0.999320980244201240, -0.999319136728482270, -0.999317290714465510, -0.999315442202155510, -0.999313591191556830, -0.999311737682674230, -0.999309881675512270, +-0.999308023170075610, -0.999306162166368920, -0.999304298664396850, -0.999302432664163960, -0.999300564165675030, -0.999298693168934600, -0.999296819673947570, -0.999294943680718360, +-0.999293065189251870, -0.999291184199552760, -0.999289300711625690, -0.999287414725475220, -0.999285526241106340, -0.999283635258523590, -0.999281741777731880, -0.999279845798735630, +-0.999277947321539850, -0.999276046346149190, -0.999274142872568440, -0.999272236900802360, -0.999270328430855610, -0.999268417462733090, -0.999266503996439570, -0.999264588031979710, +-0.999262669569358390, -0.999260748608580500, -0.999258825149650590, -0.999256899192573660, -0.999254970737354590, -0.999253039783997930, -0.999251106332508800, -0.999249170382891850, +-0.999247231935151970, -0.999245290989294040, -0.999243347545322850, -0.999241401603243260, -0.999239453163060290, -0.999237502224778580, -0.999235548788403150, -0.999233592853938870, +-0.999231634421390510, -0.999229673490763190, -0.999227710062061570, -0.999225744135290750, -0.999223775710455510, -0.999221804787560950, -0.999219831366611740, -0.999217855447613100, +-0.999215877030569690, -0.999213896115486610, -0.999211912702368870, -0.999209926791221340, -0.999207938382048910, -0.999205947474856690, -0.999203954069649570, -0.999201958166432540, +-0.999199959765210700, -0.999197958865988940, -0.999195955468772270, -0.999193949573565670, -0.999191941180374240, -0.999189930289202890, -0.999187916900056820, -0.999185901012940910, +-0.999183882627860290, -0.999181861744819930, -0.999179838363824850, -0.999177812484880250, -0.999175784107991130, -0.999173753233162490, -0.999171719860399540, -0.999169683989707180, +-0.999167645621090730, -0.999165604754555070, -0.999163561390105540, -0.999161515527747010, -0.999159467167484610, -0.999157416309323640, -0.999155362953269120, -0.999153307099326260, +-0.999151248747500050, -0.999149187897795720, -0.999147124550218370, -0.999145058704773330, -0.999142990361465590, -0.999140919520300370, -0.999138846181282900, -0.999136770344418170, +-0.999134692009711610, -0.999132611177168340, -0.999130527846793570, -0.999128442018592410, -0.999126353692570190, -0.999124262868732020, -0.999122169547083330, -0.999120073727629120, +-0.999117975410374730, -0.999115874595325360, -0.999113771282486350, -0.999111665471862920, -0.999109557163460280, -0.999107446357283880, -0.999105333053338710, -0.999103217251630320, +-0.999101098952163810, -0.999098978154944530, -0.999096854859977900, -0.999094729067269150, -0.999092600776823490, -0.999090469988646370, -0.999088336702743000, -0.999086200919118930, +-0.999084062637779270, -0.999081921858729460, -0.999079778581974830, -0.999077632807520710, -0.999075484535372650, -0.999073333765535750, -0.999071180498015580, -0.999069024732817450, +-0.999066866469946690, -0.999064705709408860, -0.999062542451209290, -0.999060376695353300, -0.999058208441846340, -0.999056037690693950, -0.999053864441901360, -0.999051688695474120, +-0.999049510451417770, -0.999047329709737530, -0.999045146470439070, -0.999042960733527610, -0.999040772499008910, -0.999038581766888200, -0.999036388537171030, -0.999034192809862830, +-0.999031994584969270, -0.999029793862495570, -0.999027590642447500, -0.999025384924830510, -0.999023176709649910, -0.999020965996911480, -0.999018752786620560, -0.999016537078782800, +-0.999014318873403750, -0.999012098170488750, -0.999009874970043680, -0.999007649272073750, -0.999005421076584850, -0.999003190383582320, -0.999000957193071800, -0.998998721505058970, +-0.998996483319549270, -0.998994242636548350, -0.998991999456061870, -0.998989753778095400, -0.998987505602654480, -0.998985254929744880, -0.998983001759372050, -0.998980746091541860, +-0.998978487926259650, -0.998976227263531300, -0.998973964103362370, -0.998971698445758500, -0.998969430290725380, -0.998967159638268760, -0.998964886488394210, -0.998962610841107380, +-0.998960332696414150, -0.998958052054319980, -0.998955768914830730, -0.998953483277951970, -0.998951195143689570, -0.998948904512049210, -0.998946611383036640, -0.998944315756657430, +-0.998942017632917460, -0.998939717011822490, -0.998937413893378200, -0.998935108277590360, -0.998932800164464730, -0.998930489554007090, -0.998928176446223340, -0.998925860841119010, +-0.998923542738700100, -0.998921222138972280, -0.998918899041941530, -0.998916573447613420, -0.998914245355993930, -0.998911914767088850, -0.998909581680903940, -0.998907246097445080, +-0.998904908016718050, -0.998902567438728850, -0.998900224363483140, -0.998897878790986900, -0.998895530721246040, -0.998893180154266200, -0.998890827090053500, -0.998888471528613820, +-0.998886113469952820, -0.998883752914076610, -0.998881389860991060, -0.998879024310701970, -0.998876656263215310, -0.998874285718536980, -0.998871912676672970, -0.998869537137629270, +-0.998867159101411660, -0.998864778568026130, -0.998862395537478690, -0.998860010009775200, -0.998857621984921670, -0.998855231462924210, -0.998852838443788580, -0.998850442927520900, +-0.998848044914127040, -0.998845644403613120, -0.998843241395985130, -0.998840835891248950, -0.998838427889410800, -0.998836017390476450, -0.998833604394452120, -0.998831188901343810, +-0.998828770911157520, -0.998826350423899220, -0.998823927439575040, -0.998821501958191190, -0.998819073979753450, -0.998816643504268130, -0.998814210531741130, -0.998811775062178550, +-0.998809337095586610, -0.998806896631971310, -0.998804453671338850, -0.998802008213695140, -0.998799560259046480, -0.998797109807398890, -0.998794656858758460, -0.998792201413131520, +-0.998789743470523960, -0.998787283030942110, -0.998784820094392070, -0.998782354660879950, -0.998779886730411960, -0.998777416302994210, -0.998774943378632930, -0.998772467957334320, +-0.998769990039104600, -0.998767509623949780, -0.998765026711876280, -0.998762541302890110, -0.998760053396997690, -0.998757562994205150, -0.998755070094518580, -0.998752574697944430, +-0.998750076804488800, -0.998747576414158010, -0.998745073526958290, -0.998742568142895860, -0.998740060261977040, -0.998737549884208040, -0.998735037009595210, -0.998732521638144740, +-0.998730003769862980, -0.998727483404756140, -0.998724960542830660, -0.998722435184092760, -0.998719907328548870, -0.998717376976205110, -0.998714844127067900, -0.998712308781143590, +-0.998709770938438600, -0.998707230598959050, -0.998704687762711480, -0.998702142429702230, -0.998699594599937620, -0.998697044273423980, -0.998694491450167750, -0.998691936130175260, +-0.998689378313452950, -0.998686818000007250, -0.998684255189844490, -0.998681689882971010, -0.998679122079393360, -0.998676551779117960, -0.998673978982151040, -0.998671403688499270, +-0.998668825898168970, -0.998666245611166680, -0.998663662827498740, -0.998661077547171590, -0.998658489770191780, -0.998655899496565750, -0.998653306726299930, -0.998650711459400870, +-0.998648113695875030, -0.998645513435728940, -0.998642910678969040, -0.998640305425601780, -0.998637697675633930, -0.998635087429071700, -0.998632474685921760, -0.998629859446190760, +-0.998627241709884930, -0.998624621477011140, -0.998621998747575730, -0.998619373521585360, -0.998616745799046470, -0.998614115579965820, -0.998611482864349860, -0.998608847652205140, +-0.998606209943538330, -0.998603569738356070, -0.998600927036664810, -0.998598281838471210, -0.998595634143781940, -0.998592983952603650, -0.998590331264942790, -0.998587676080806120, +-0.998585018400200310, -0.998582358223131910, -0.998579695549607680, -0.998577030379634190, -0.998574362713218090, -0.998571692550366040, -0.998569019891084820, -0.998566344735381080, +-0.998563667083261500, -0.998560986934732610, -0.998558304289801410, -0.998555619148474350, -0.998552931510758300, -0.998550241376659820, -0.998547548746185900, -0.998544853619342980, +-0.998542155996137940, -0.998539455876577550, -0.998536753260668600, -0.998534048148417620, -0.998531340539831610, -0.998528630434917130, -0.998525917833681160, -0.998523202736130490, +-0.998520485142271650, -0.998517765052111650, -0.998515042465657250, -0.998512317382915350, -0.998509589803892480, -0.998506859728595760, -0.998504127157031850, -0.998501392089207630, +-0.998498654525129870, -0.998495914464805570, -0.998493171908241380, -0.998490426855444310, -0.998487679306421240, -0.998484929261178930, -0.998482176719724280, -0.998479421682064160, +-0.998476664148205460, -0.998473904118155180, -0.998471141591920070, -0.998468376569507270, -0.998465609050923300, -0.998462839036175500, -0.998460066525270530, -0.998457291518215380, +-0.998454514015016950, -0.998451734015682320, -0.998448951520218290, -0.998446166528631940, -0.998443379040930170, -0.998440589057119960, -0.998437796577208210, -0.998435001601202020, +-0.998432204129108380, -0.998429404160934180, -0.998426601696686400, -0.998423796736372160, -0.998420989279998450, -0.998418179327572260, -0.998415366879100710, -0.998412551934590550, +-0.998409734494049130, -0.998406914557483430, -0.998404092124900330, -0.998401267196307060, -0.998398439771710610, -0.998395609851118080, -0.998392777434536470, -0.998389942521973000, +-0.998387105113434650, -0.998384265208928530, -0.998381422808461650, -0.998378577912041320, -0.998375730519674540, -0.998372880631368420, -0.998370028247130060, -0.998367173366966680, +-0.998364315990885380, -0.998361456118893260, -0.998358593750997450, -0.998355728887205250, -0.998352861527523670, -0.998349991671960040, -0.998347119320521340, -0.998344244473214790, +-0.998341367130047730, -0.998338487291027140, -0.998335604956160470, -0.998332720125454710, -0.998329832798917180, -0.998326942976555000, -0.998324050658375480, -0.998321155844385970, +-0.998318258534593440, -0.998315358729005230, -0.998312456427628780, -0.998309551630471080, -0.998306644337539460, -0.998303734548841360, -0.998300822264383770, -0.998297907484174240, +-0.998294990208219880, -0.998292070436528120, -0.998289148169106080, -0.998286223405961290, -0.998283296147100870, -0.998280366392532150, -0.998277434142262670, -0.998274499396299530, +-0.998271562154650070, -0.998268622417321730, -0.998265680184321940, -0.998262735455657910, -0.998259788231336990, -0.998256838511366600, -0.998253886295754180, -0.998250931584506950, +-0.998247974377632460, -0.998245014675138040, -0.998242052477031020, -0.998239087783318930, -0.998236120594009120, -0.998233150909108910, -0.998230178728625960, -0.998227204052567480, +-0.998224226880941030, -0.998221247213754050, -0.998218265051013850, -0.998215280392728000, -0.998212293238904040, -0.998209303589549290, -0.998206311444671310, -0.998203316804277540, +-0.998200319668375410, -0.998197320036972590, -0.998194317910076400, -0.998191313287694500, -0.998188306169834230, -0.998185296556503230, -0.998182284447708960, -0.998179269843458950, +-0.998176252743760870, -0.998173233148622050, -0.998170211058050260, -0.998167186472052830, -0.998164159390637520, -0.998161129813811780, -0.998158097741583260, -0.998155063173959410, +-0.998152026110948000, -0.998148986552556460, -0.998145944498792460, -0.998142899949663540, -0.998139852905177480, -0.998136803365341720, -0.998133751330164020, -0.998130696799651830, +-0.998127639773813020, -0.998124580252655050, -0.998121518236185670, -0.998118453724412440, -0.998115386717343120, -0.998112317214985280, -0.998109245217346670, -0.998106170724434970, +-0.998103093736257830, -0.998100014252822910, -0.998096932274137980, -0.998093847800210820, -0.998090760831048970, -0.998087671366660210, -0.998084579407052200, -0.998081484952232810, +-0.998078388002209720, -0.998075288556990680, -0.998072186616583370, -0.998069082180995660, -0.998065975250235220, -0.998062865824309810, -0.998059753903227210, -0.998056639486995300, +-0.998053522575621740, -0.998050403169114420, -0.998047281267481100, -0.998044156870729450, -0.998041029978867570, -0.998037900591903000, -0.998034768709843760, -0.998031634332697480, +-0.998028497460472290, -0.998025358093175720, -0.998022216230815770, -0.998019071873400330, -0.998015925020937170, -0.998012775673434270, -0.998009623830899420, -0.998006469493340380, +-0.998003312660765250, -0.998000153333181930, -0.997996991510598060, -0.997993827193021880, -0.997990660380461030, -0.997987491072923500, -0.997984319270417310, -0.997981144972950320, +-0.997977968180530420, -0.997974788893165600, -0.997971607110863860, -0.997968422833633070, -0.997965236061481240, -0.997962046794416360, -0.997958855032446300, -0.997955660775579180, +-0.997952464023822760, -0.997949264777185260, -0.997946063035674680, -0.997942858799298890, -0.997939652068065900, -0.997936442841983800, -0.997933231121060690, -0.997930016905304360, +-0.997926800194723020, -0.997923580989324770, -0.997920359289117490, -0.997917135094109290, -0.997913908404308380, -0.997910679219722540, -0.997907447540360090, -0.997904213366229030, +-0.997900976697337460, -0.997897737533693370, -0.997894495875304990, -0.997891251722180290, -0.997888005074327510, -0.997884755931754740, -0.997881504294470090, -0.997878250162481660, +-0.997874993535797670, -0.997871734414426110, -0.997868472798375210, -0.997865208687653160, -0.997861942082268080, -0.997858672982228190, -0.997855401387541590, -0.997852127298216480, +-0.997848850714260990, -0.997845571635683440, -0.997842290062491920, -0.997839005994694770, -0.997835719432299980, -0.997832430375315990, -0.997829138823750910, -0.997825844777612940, +-0.997822548236910410, -0.997819249201651440, -0.997815947671844450, -0.997812643647497440, -0.997809337128618970, -0.997806028115217130, -0.997802716607300130, -0.997799402604876430, +-0.997796086107954230, -0.997792767116541750, -0.997789445630647310, -0.997786121650279360, -0.997782795175446100, -0.997779466206155760, -0.997776134742416890, -0.997772800784237580, +-0.997769464331626280, -0.997766125384591420, -0.997762783943141110, -0.997759440007283890, -0.997756093577028100, -0.997752744652382060, -0.997749393233354210, -0.997746039319952760, +-0.997742682912186260, -0.997739324010063160, -0.997735962613591650, -0.997732598722780200, -0.997729232337637330, -0.997725863458171380, -0.997722492084390680, -0.997719118216303770, +-0.997715741853919200, -0.997712362997245080, -0.997708981646290180, -0.997705597801062830, -0.997702211461571450, -0.997698822627824500, -0.997695431299830630, -0.997692037477598050, +-0.997688641161135430, -0.997685242350451200, -0.997681841045553910, -0.997678437246451890, -0.997675030953153910, -0.997671622165668290, -0.997668210884003590, -0.997664797108168470, +-0.997661380838171240, -0.997657962074020580, -0.997654540815725130, -0.997651117063293240, -0.997647690816733550, -0.997644262076054610, -0.997640830841264980, -0.997637397112373430, +-0.997633960889388270, -0.997630522172318180, -0.997627080961171920, -0.997623637255957820, -0.997620191056684760, -0.997616742363361060, -0.997613291175995620, -0.997609837494596970, +-0.997606381319173670, -0.997602922649734380, -0.997599461486287860, -0.997595997828842670, -0.997592531677407470, -0.997589063031991020, -0.997585591892601760, -0.997582118259248580, +-0.997578642131940140, -0.997575163510685090, -0.997571682395492100, -0.997568198786369930, -0.997564712683327360, -0.997561224086372820, -0.997557732995515310, -0.997554239410763490, +-0.997550743332126120, -0.997547244759611760, -0.997543743693229400, -0.997540240132987590, -0.997536734078895200, -0.997533225530961020, -0.997529714489193810, -0.997526200953602230, +-0.997522684924195160, -0.997519166400981370, -0.997515645383969750, -0.997512121873168960, -0.997508595868587870, -0.997505067370235250, -0.997501536378120000, -0.997498002892250880, +-0.997494466912636770, -0.997490928439286550, -0.997487387472209000, -0.997483844011412880, -0.997480298056907190, -0.997476749608700810, -0.997473198666802510, -0.997469645231221280, +-0.997466089301965900, -0.997462530879045240, -0.997458969962468300, -0.997455406552243960, -0.997451840648381110, -0.997448272250888610, -0.997444701359775480, -0.997441127975050470, +-0.997437552096722800, -0.997433973724801140, -0.997430392859294580, -0.997426809500212120, -0.997423223647562530, -0.997419635301354910, -0.997416044461598260, -0.997412451128301460, +-0.997408855301473500, -0.997405256981123370, -0.997401656167260180, -0.997398052859892800, -0.997394447059030350, -0.997390838764681710, -0.997387227976856080, -0.997383614695562250, +-0.997379998920809420, -0.997376380652606590, -0.997372759890962860, -0.997369136635887220, -0.997365510887388780, -0.997361882645476430, -0.997358251910159480, -0.997354618681446920, +-0.997350982959347760, -0.997347344743871100, -0.997343704035026150, -0.997340060832821900, -0.997336415137267560, -0.997332766948372140, -0.997329116266144730, -0.997325463090594670, +-0.997321807421730820, -0.997318149259562530, -0.997314488604098880, -0.997310825455348990, -0.997307159813321960, -0.997303491678027120, -0.997299821049473570, -0.997296147927670410, +-0.997292472312626970, -0.997288794204352240, -0.997285113602855540, -0.997281430508146110, -0.997277744920233020, -0.997274056839125620, -0.997270366264833120, -0.997266673197364620, +-0.997262977636729550, -0.997259279582936920, -0.997255579035996150, -0.997251875995916470, -0.997248170462707080, -0.997244462436377210, -0.997240751916936170, -0.997237038904393300, +-0.997233323398757920, -0.997229605400039130, -0.997225884908246260, -0.997222161923388750, -0.997218436445475920, -0.997214708474516880, -0.997210978010521170, -0.997207245053497890, +-0.997203509603456610, -0.997199771660406520, -0.997196031224356960, -0.997192288295317360, -0.997188542873297060, -0.997184794958305360, -0.997181044550351730, -0.997177291649445350, +-0.997173536255595900, -0.997169778368812600, -0.997166017989104760, -0.997162255116481930, -0.997158489750953450, -0.997154721892528740, -0.997150951541217250, -0.997147178697028400, +-0.997143403359971540, -0.997139625530056200, -0.997135845207291820, -0.997132062391687720, -0.997128277083253580, -0.997124489281998700, -0.997120698987932650, -0.997116906201064860, +-0.997113110921404750, -0.997109313148961900, -0.997105512883745710, -0.997101710125765760, -0.997097904875031580, -0.997094097131552610, -0.997090286895338410, -0.997086474166398510, +-0.997082658944742350, -0.997078841230379600, -0.997075021023319690, -0.997071198323572270, -0.997067373131146910, -0.997063545446053020, -0.997059715268300280, -0.997055882597898350, +-0.997052047434856650, -0.997048209779184850, -0.997044369630892490, -0.997040526989989240, -0.997036681856484640, -0.997032834230388350, -0.997028984111709930, -0.997025131500459130, +-0.997021276396645510, -0.997017418800278610, -0.997013558711368210, -0.997009696129923960, -0.997005831055955420, -0.997001963489472340, -0.996998093430484290, -0.996994220879001030, +-0.996990345835032210, -0.996986468298587500, -0.996982588269676670, -0.996978705748309380, -0.996974820734495280, -0.996970933228244150, -0.996967043229565750, -0.996963150738469640, +-0.996959255754965800, -0.996955358279063670, -0.996951458310773140, -0.996947555850104080, -0.996943650897066050, -0.996939743451668910, -0.996935833513922450, -0.996931921083836330, +-0.996928006161420520, -0.996924088746684590, -0.996920168839638520, -0.996916246440291980, -0.996912321548654830, -0.996908394164736870, -0.996904464288547840, -0.996900531920097750, +-0.996896597059396370, -0.996892659706453470, -0.996888719861278920, -0.996884777523882490, -0.996880832694274190, -0.996876885372463770, -0.996872935558461130, -0.996868983252276240, +-0.996865028453918780, -0.996861071163398840, -0.996857111380726190, -0.996853149105910830, -0.996849184338962520, -0.996845217079891270, -0.996841247328706940, -0.996837275085419530, +-0.996833300350038920, -0.996829323122575000, -0.996825343403037860, -0.996821361191437380, -0.996817376487783460, -0.996813389292086070, -0.996809399604355220, -0.996805407424600890, +-0.996801412752832960, -0.996797415589061650, -0.996793415933296730, -0.996789413785548200, -0.996785409145826250, -0.996781402014140670, -0.996777392390501670, -0.996773380274919130, +-0.996769365667403260, -0.996765348567963840, -0.996761328976611070, -0.996757306893355070, -0.996753282318205700, -0.996749255251173190, -0.996745225692267530, -0.996741193641498710, +-0.996737159098877060, -0.996733122064412450, -0.996729082538114990, -0.996725040519994890, -0.996720996010062140, -0.996716949008326970, -0.996712899514799360, -0.996708847529489520, +-0.996704793052407560, -0.996700736083563580, -0.996696676622967790, -0.996692614670630310, -0.996688550226561330, -0.996684483290770970, -0.996680413863269330, -0.996676341944066730, +-0.996672267533173280, -0.996668190630599080, -0.996664111236354460, -0.996660029350449620, -0.996655944972894670, -0.996651858103699830, -0.996647768742875310, -0.996643676890431430, +-0.996639582546378300, -0.996635485710726240, -0.996631386383485470, -0.996627284564666320, -0.996623180254278870, -0.996619073452333470, -0.996614964158840430, -0.996610852373809860, +-0.996606738097252310, -0.996602621329177870, -0.996598502069596880, -0.996594380318519550, -0.996590256075956420, -0.996586129341917480, -0.996582000116413290, -0.996577868399454170, +-0.996573734191050330, -0.996569597491212100, -0.996565458299949910, -0.996561316617274100, -0.996557172443194970, -0.996553025777722980, -0.996548876620868330, -0.996544724972641570, +-0.996540570833052920, -0.996536414202112920, -0.996532255079831900, -0.996528093466220180, -0.996523929361288200, -0.996519762765046500, -0.996515593677505310, -0.996511422098675160, +-0.996507248028566380, -0.996503071467189640, -0.996498892414555030, -0.996494710870673320, -0.996490526835554840, -0.996486340309210020, -0.996482151291649300, -0.996477959782883230, +-0.996473765782922350, -0.996469569291776880, -0.996465370309457700, -0.996461168835974910, -0.996456964871339280, -0.996452758415561250, -0.996448549468651250, -0.996444338030619940, +-0.996440124101477750, -0.996435907681235360, -0.996431688769903070, -0.996427467367491660, -0.996423243474011460, -0.996419017089473220, -0.996414788213887510, -0.996410556847264760, +-0.996406322989615510, -0.996402086640950650, -0.996397847801280490, -0.996393606470615700, -0.996389362648966830, -0.996385116336344630, -0.996380867532759670, -0.996376616238222490, +-0.996372362452743740, -0.996368106176334200, -0.996363847409004300, -0.996359586150764810, -0.996355322401626280, -0.996351056161599580, -0.996346787430695160, -0.996342516208923780, +-0.996338242496296100, -0.996333966292822890, -0.996329687598514700, -0.996325406413382300, -0.996321122737436340, -0.996316836570687590, -0.996312547913146830, -0.996308256764824600, +-0.996303963125731770, -0.996299666995879020, -0.996295368375277210, -0.996291067263936790, -0.996286763661868860, -0.996282457569083960, -0.996278148985592860, -0.996273837911406450, +-0.996269524346535480, -0.996265208290990630, -0.996260889744782880, -0.996256568707922780, -0.996252245180421330, -0.996247919162289160, -0.996243590653537290, -0.996239259654176480, +-0.996234926164217380, -0.996230590183671110, -0.996226251712548310, -0.996221910750859860, -0.996217567298616660, -0.996213221355829460, -0.996208872922509260, -0.996204521998666940, +-0.996200168584313260, -0.996195812679459220, -0.996191454284115600, -0.996187093398293370, -0.996182730022003300, -0.996178364155256510, -0.996173995798063760, -0.996169624950436040, +-0.996165251612384340, -0.996160875783919430, -0.996156497465052300, -0.996152116655793950, -0.996147733356155360, -0.996143347566147420, -0.996138959285781000, -0.996134568515067320, +-0.996130175254017150, -0.996125779502641580, -0.996121381260951620, -0.996116980528958030, -0.996112577306672130, -0.996108171594104810, -0.996103763391266940, -0.996099352698169740, +-0.996094939514824200, -0.996090523841241190, -0.996086105677431940, -0.996081685023407440, -0.996077261879178670, -0.996072836244756840, -0.996068408120152850, -0.996063977505377900, +-0.996059544400442860, -0.996055108805359080, -0.996050670720137530, -0.996046230144789320, -0.996041787079325450, -0.996037341523757220, -0.996032893478095540, -0.996028442942351710, +-0.996023989916536730, -0.996019534400661710, -0.996015076394737960, -0.996010615898776490, -0.996006152912788490, -0.996001687436785080, -0.995997219470777460, -0.995992749014776750, +-0.995988276068794250, -0.995983800632840980, -0.995979322706928240, -0.995974842291067250, -0.995970359385269120, -0.995965873989545060, -0.995961386103906390, -0.995956895728364100, +-0.995952402862929740, -0.995947907507614310, -0.995943409662429110, -0.995938909327385380, -0.995934406502494320, -0.995929901187767360, -0.995925393383215620, -0.995920883088850300, +-0.995916370304682830, -0.995911855030724440, -0.995907337266986440, -0.995902817013480160, -0.995898294270216700, -0.995893769037207610, -0.995889241314463990, -0.995884711101997390, +-0.995880178399818900, -0.995875643207939980, -0.995871105526372040, -0.995866565355126300, -0.995862022694214090, -0.995857477543646840, -0.995852929903435990, -0.995848379773592750, +-0.995843827154128450, -0.995839272045054740, -0.995834714446382830, -0.995830154358124050, -0.995825591780289950, -0.995821026712891850, -0.995816459155941190, -0.995811889109449400, +-0.995807316573427910, -0.995802741547888060, -0.995798164032841380, -0.995793584028299320, -0.995789001534273300, -0.995784416550774760, -0.995779829077815150, -0.995775239115406000, +-0.995770646663558750, -0.995766051722284830, -0.995761454291595900, -0.995756854371503300, -0.995752251962018440, -0.995747647063153110, -0.995743039674918620, -0.995738429797326410, +-0.995733817430388250, -0.995729202574115570, -0.995724585228519810, -0.995719965393612630, -0.995715343069405460, -0.995710718255910070, -0.995706090953137780, -0.995701461161100250, +-0.995696828879809150, -0.995692194109275900, -0.995687556849512160, -0.995682917100529590, -0.995678274862339730, -0.995673630134954140, -0.995668982918384460, -0.995664333212642470, +-0.995659681017739500, -0.995655026333687300, -0.995650369160497650, -0.995645709498181990, -0.995641047346752070, -0.995636382706219570, -0.995631715576596130, -0.995627045957893420, +-0.995622373850122980, -0.995617699253296680, -0.995613022167426090, -0.995608342592523070, -0.995603660528599050, -0.995598975975665930, -0.995594288933735360, -0.995589599402819100, +-0.995584907382928820, -0.995580212874076280, -0.995575515876273240, -0.995570816389531380, -0.995566114413862450, -0.995561409949278220, -0.995556702995790580, -0.995551993553411060, +-0.995547281622151560, -0.995542567202023940, -0.995537850293039870, -0.995533130895211120, -0.995528409008549660, -0.995523684633067060, -0.995518957768775300, -0.995514228415686150, +-0.995509496573811380, -0.995504762243162980, -0.995500025423752600, -0.995495286115592130, -0.995490544318693440, -0.995485800033068520, -0.995481053258728930, -0.995476303995686870, +-0.995471552243953890, -0.995466798003542100, -0.995462041274463360, -0.995457282056729450, -0.995452520350352370, -0.995447756155343980, -0.995442989471716280, -0.995438220299481040, +-0.995433448638650240, -0.995428674489235780, -0.995423897851249630, -0.995419118724703790, -0.995414337109610140, -0.995409553005980660, -0.995404766413827360, -0.995399977333161990, +-0.995395185763996770, -0.995390391706343580, -0.995385595160214410, -0.995380796125621250, -0.995375994602576090, -0.995371190591091030, -0.995366384091177950, -0.995361575102848840, +-0.995356763626115800, -0.995351949660990940, -0.995347133207486130, -0.995342314265613480, -0.995337492835385080, -0.995332668916812930, -0.995327842509909130, -0.995323013614685670, +-0.995318182231154760, -0.995313348359328390, -0.995308511999218550, -0.995303673150837560, -0.995298831814197320, -0.995293987989310010, -0.995289141676187650, -0.995284292874842550, +-0.995279441585286690, -0.995274587807532200, -0.995269731541591260, -0.995264872787476000, -0.995260011545198500, -0.995255147814771090, -0.995250281596205770, -0.995245412889514620, +-0.995240541694710100, -0.995235668011804190, -0.995230791840808980, -0.995225913181736920, -0.995221032034600110, -0.995216148399410640, -0.995211262276180840, -0.995206373664922820, +-0.995201482565648890, -0.995196588978371270, -0.995191692903102280, -0.995186794339853910, -0.995181893288638600, -0.995176989749468550, -0.995172083722356100, -0.995167175207313350, +-0.995162264204352720, -0.995157350713486320, -0.995152434734726700, -0.995147516268085840, -0.995142595313576290, -0.995137671871210270, -0.995132745940999990, -0.995127817522957980, +-0.995122886617096250, -0.995117953223427440, -0.995113017341963670, -0.995108078972717360, -0.995103138115700950, -0.995098194770926540, -0.995093248938406780, -0.995088300618153900, +-0.995083349810180100, -0.995078396514498140, -0.995073440731120030, -0.995068482460058410, -0.995063521701325500, -0.995058558454933850, -0.995053592720895770, -0.995048624499223820, +-0.995043653789930200, -0.995038680593027470, -0.995033704908528050, -0.995028726736444380, -0.995023746076788780, -0.995018762929573920, -0.995013777294812110, -0.995008789172515900, +-0.995003798562697720, -0.994998805465370010, -0.994993809880545310, -0.994988811808236060, -0.994983811248454810, -0.994978808201213980, -0.994973802666526240, -0.994968794644403910, +-0.994963784134859640, -0.994958771137905870, -0.994953755653555150, -0.994948737681820130, -0.994943717222713130, -0.994938694276246930, -0.994933668842434060, -0.994928640921286860, +-0.994923610512818190, -0.994918577617040390, -0.994913542233966220, -0.994908504363608230, -0.994903464005978840, -0.994898421161090950, -0.994893375828956870, -0.994888328009589480, +-0.994883277703001110, -0.994878224909204740, -0.994873169628212590, -0.994868111860037650, -0.994863051604692460, -0.994857988862189570, -0.994852923632541740, -0.994847855915761640, +-0.994842785711861800, -0.994837713020855110, -0.994832637842754110, -0.994827560177571460, -0.994822480025319920, -0.994817397386012160, -0.994812312259660940, -0.994807224646279020, +-0.994802134545878960, -0.994797041958473520, -0.994791946884075570, -0.994786849322697670, -0.994781749274352700, -0.994776646739053310, -0.994771541716812370, -0.994766434207642550, +-0.994761324211556610, -0.994756211728567430, -0.994751096758687670, -0.994745979301930090, -0.994740859358307690, -0.994735736927833130, -0.994730612010519160, -0.994725484606378770, +-0.994720354715424530, -0.994715222337669510, -0.994710087473126390, -0.994704950121808040, -0.994699810283727340, -0.994694667958897160, -0.994689523147330170, -0.994684375849039460, +-0.994679226064037800, -0.994674073792338190, -0.994668919033953270, -0.994663761788896040, -0.994658602057179490, -0.994653439838816380, -0.994648275133819700, -0.994643107942202230, +-0.994637938263977060, -0.994632766099157070, -0.994627591447755140, -0.994622414309784260, -0.994617234685257310, -0.994612052574187390, -0.994606867976587150, -0.994601680892469920, +-0.994596491321848350, -0.994591299264735660, -0.994586104721144610, -0.994580907691088310, -0.994575708174579850, -0.994570506171632010, -0.994565301682257990, -0.994560094706470670, +-0.994554885244283150, -0.994549673295708310, -0.994544458860759480, -0.994539241939449310, -0.994534022531791130, -0.994528800637797920, -0.994523576257482670, -0.994518349390858480, +-0.994513120037938350, -0.994507888198735480, -0.994502653873262870, -0.994497417061533720, -0.994492177763560910, -0.994486935979357780, -0.994481691708937190, -0.994476444952312470, +-0.994471195709496490, -0.994465943980502700, -0.994460689765343960, -0.994455433064033500, -0.994450173876584410, -0.994444912203010010, -0.994439648043323190, -0.994434381397537370, +-0.994429112265665550, -0.994423840647720940, -0.994418566543716740, -0.994413289953666070, -0.994408010877582240, -0.994402729315478350, -0.994397445267367620, -0.994392158733263360, +-0.994386869713178690, -0.994381578207126800, -0.994376284215120920, -0.994370987737174360, -0.994365688773300450, -0.994360387323512170, -0.994355083387822970, -0.994349776966246050, +-0.994344468058794730, -0.994339156665482230, -0.994333842786321860, -0.994328526421326850, -0.994323207570510510, -0.994317886233886170, -0.994312562411467040, -0.994307236103266660, +-0.994301907309298130, -0.994296576029574770, -0.994291242264109920, -0.994285906012917110, -0.994280567276009440, -0.994275226053400460, -0.994269882345103270, -0.994264536151131530, +-0.994259187471498330, -0.994253836306217220, -0.994248482655301520, -0.994243126518764560, -0.994237767896619880, -0.994232406788880700, -0.994227043195560540, -0.994221677116672750, +-0.994216308552230750, -0.994210937502247980, -0.994205563966737870, -0.994200187945713960, -0.994194809439189480, -0.994189428447177950, -0.994184044969692930, -0.994178659006747730, +-0.994173270558355910, -0.994167879624530900, -0.994162486205286240, -0.994157090300635260, -0.994151691910591720, -0.994146291035168830, -0.994140887674380250, -0.994135481828239410, +-0.994130073496759860, -0.994124662679955250, -0.994119249377838910, -0.994113833590424380, -0.994108415317725310, -0.994102994559755260, -0.994097571316527650, -0.994092145588056140, +-0.994086717374354280, -0.994081286675435600, -0.994075853491313670, -0.994070417822002230, -0.994064979667514610, -0.994059539027864590, -0.994054095903065700, -0.994048650293131720, +-0.994043202198075960, -0.994037751617912190, -0.994032298552654070, -0.994026843002315250, -0.994021384966909280, -0.994015924446449930, -0.994010461440950620, -0.994004995950425240, +-0.993999527974887440, -0.993994057514350770, -0.993988584568828880, -0.993983109138335540, -0.993977631222884520, -0.993972150822489350, -0.993966667937163820, -0.993961182566921670, +-0.993955694711776470, -0.993950204371742090, -0.993944711546832280, -0.993939216237060500, -0.993933718442440830, -0.993928218162986820, -0.993922715398712240, -0.993917210149630970, +-0.993911702415756550, -0.993906192197102970, -0.993900679493683880, -0.993895164305513060, -0.993889646632604370, -0.993884126474971490, -0.993878603832628380, -0.993873078705588720, +-0.993867551093866370, -0.993862020997475120, -0.993856488416428930, -0.993850953350741360, -0.993845415800426510, -0.993839875765498150, -0.993834333245969930, -0.993828788241856050, +-0.993823240753170080, -0.993817690779926100, -0.993812138322137880, -0.993806583379819310, -0.993801025952984250, -0.993795466041646700, -0.993789903645820430, -0.993784338765519410, +-0.993778771400757430, -0.993773201551548690, -0.993767629217906840, -0.993762054399846000, -0.993756477097380020, -0.993750897310522800, -0.993745315039288310, -0.993739730283690560, +-0.993734143043743520, -0.993728553319461080, -0.993722961110857340, -0.993717366417946060, -0.993711769240741450, -0.993706169579257390, -0.993700567433507990, -0.993694962803507110, +-0.993689355689268860, -0.993683746090807120, -0.993678134008136090, -0.993672519441269660, -0.993666902390222040, -0.993661282855007100, -0.993655660835638940, -0.993650036332131670, +-0.993644409344499270, -0.993638779872755950, -0.993633147916915590, -0.993627513476992300, -0.993621876553000270, -0.993616237144953620, -0.993610595252866320, -0.993604950876752600, +-0.993599304016626440, -0.993593654672502050, -0.993588002844393410, -0.993582348532314860, -0.993576691736280490, -0.993571032456304290, -0.993565370692400580, -0.993559706444583470, +-0.993554039712867040, -0.993548370497265520, -0.993542698797793000, -0.993537024614463800, -0.993531347947292030, -0.993525668796292010, -0.993519987161477600, -0.993514303042863370, +-0.993508616440463400, -0.993502927354291800, -0.993497235784362890, -0.993491541730690990, -0.993485845193290080, -0.993480146172174730, -0.993474444667358900, -0.993468740678856930, +-0.993463034206683250, -0.993457325250851840, -0.993451613811377250, -0.993445899888273480, -0.993440183481555050, -0.993434464591236190, -0.993428743217331100, -0.993423019359854220, +-0.993417293018819760, -0.993411564194242040, -0.993405832886135380, -0.993400099094514210, -0.993394362819392750, -0.993388624060785430, -0.993382882818706460, -0.993377139093170380, +-0.993371392884191410, -0.993365644191783970, -0.993359893015962390, -0.993354139356741220, -0.993348383214134540, -0.993342624588156920, -0.993336863478822770, -0.993331099886146540, +-0.993325333810142430, -0.993319565250824990, -0.993313794208208760, -0.993308020682307950, -0.993302244673137100, -0.993296466180710660, -0.993290685205043040, -0.993284901746148700, +-0.993279115804042160, -0.993273327378737750, -0.993267536470250010, -0.993261743078593500, -0.993255947203782630, -0.993250148845831850, -0.993244348004755810, -0.993238544680568710, +-0.993232738873285450, -0.993226930582920220, -0.993221119809487680, -0.993215306553002390, -0.993209490813478760, -0.993203672590931450, -0.993197851885374900, -0.993192028696823770, +-0.993186203025292590, -0.993180374870795910, -0.993174544233348280, -0.993168711112964230, -0.993162875509658430, -0.993157037423445520, -0.993151196854339950, -0.993145353802356360, +-0.993139508267509410, -0.993133660249813750, -0.993127809749283830, -0.993121956765934510, -0.993116101299780120, -0.993110243350835640, -0.993104382919115510, -0.993098520004634390, +-0.993092654607407030, -0.993086786727447990, -0.993080916364772030, -0.993075043519393690, -0.993069168191327840, -0.993063290380589050, -0.993057410087191950, -0.993051527311151430, +-0.993045642052482020, -0.993039754311198510, -0.993033864087315640, -0.993027971380848080, -0.993022076191810710, -0.993016178520218060, -0.993010278366084910, -0.993004375729426130, +-0.992998470610256370, -0.992992563008590510, -0.992986652924443210, -0.992980740357829240, -0.992974825308763460, -0.992968907777260550, -0.992962987763335470, -0.992957065267002890, +-0.992951140288277580, -0.992945212827174520, -0.992939282883708360, -0.992933350457893990, -0.992927415549746280, -0.992921478159280000, -0.992915538286510020, -0.992909595931451340, +-0.992903651094118490, -0.992897703774526570, -0.992891753972690360, -0.992885801688624840, -0.992879846922344770, -0.992873889673865140, -0.992867929943200720, -0.992861967730366500, +-0.992856003035377350, -0.992850035858248160, -0.992844066198993900, -0.992838094057629570, -0.992832119434169820, -0.992826142328629980, -0.992820162741024580, -0.992814180671368950, +-0.992808196119677740, -0.992802209085966170, -0.992796219570248990, -0.992790227572541210, -0.992784233092858020, -0.992778236131214080, -0.992772236687624600, -0.992766234762104570, +-0.992760230354668980, -0.992754223465332710, -0.992748214094110960, -0.992742202241018720, -0.992736187906070880, -0.992730171089282630, -0.992724151790668970, -0.992718130010244780, +-0.992712105748025490, -0.992706079004025740, -0.992700049778260870, -0.992694018070745860, -0.992687983881495930, -0.992681947210525830, -0.992675908057851000, -0.992669866423486420, +-0.992663822307447100, -0.992657775709748220, -0.992651726630404910, -0.992645675069432350, -0.992639621026845550, -0.992633564502659720, -0.992627505496889940, -0.992621444009551430, +-0.992615380040659300, -0.992609313590228750, -0.992603244658274870, -0.992597173244812890, -0.992591099349858010, -0.992585022973425320, -0.992578944115530050, -0.992572862776187500, +-0.992566778955412790, -0.992560692653221110, -0.992554603869627680, -0.992548512604647830, -0.992542418858296640, -0.992536322630589330, -0.992530223921541330, -0.992524122731167750, +-0.992518019059483780, -0.992511912906504870, -0.992505804272246110, -0.992499693156722820, -0.992493579559950320, -0.992487463481943940, -0.992481344922718890, -0.992475223882290370, +-0.992469100360673820, -0.992462974357884550, -0.992456845873937900, -0.992450714908849060, -0.992444581462633480, -0.992438445535306470, -0.992432307126883240, -0.992426166237379340, +-0.992420022866809970, -0.992413877015190570, -0.992407728682536460, -0.992401577868863070, -0.992395424574185720, -0.992389268798519740, -0.992383110541880660, -0.992376949804283810, +-0.992370786585744510, -0.992364620886278410, -0.992358452705900620, -0.992352282044626670, -0.992346108902472100, -0.992339933279452250, -0.992333755175582530, -0.992327574590878500, +-0.992321391525355370, -0.992315205979028890, -0.992309017951914400, -0.992302827444027310, -0.992296634455383190, -0.992290438985997450, -0.992284241035885640, -0.992278040605063190, +-0.992271837693545770, -0.992265632301348570, -0.992259424428487470, -0.992253214074977690, -0.992247001240834870, -0.992240785926074560, -0.992234568130712310, -0.992228347854763660, +-0.992222125098244150, -0.992215899861169310, -0.992209672143554710, -0.992203441945415880, -0.992197209266768580, -0.992190974107628130, -0.992184736468010200, -0.992178496347930540, +-0.992172253747404590, -0.992166008666448110, -0.992159761105076530, -0.992153511063305520, -0.992147258541150710, -0.992141003538627890, -0.992134746055752470, -0.992128486092540120, +-0.992122223649006710, -0.992115958725167670, -0.992109691321038660, -0.992103421436635550, -0.992097149071973770, -0.992090874227069210, -0.992084596901937400, -0.992078317096594110, +-0.992072034811054990, -0.992065750045335810, -0.992059462799452340, -0.992053173073420110, -0.992046880867255010, -0.992040586180972680, -0.992034289014588900, -0.992027989368119420, +-0.992021687241579910, -0.992015382634986230, -0.992009075548354050, -0.992002765981699230, -0.991996453935037440, -0.991990139408384540, -0.991983822401756310, -0.991977502915168510, +-0.991971180948637010, -0.991964856502177470, -0.991958529575805880, -0.991952200169537890, -0.991945868283389380, -0.991939533917376210, -0.991933197071514280, -0.991926857745819350, +-0.991920515940307170, -0.991914171654993850, -0.991907824889894930, -0.991901475645026620, -0.991895123920404460, -0.991888769716044670, -0.991882413031962780, -0.991876053868175010, +-0.991869692224697010, -0.991863328101544760, -0.991856961498734260, -0.991850592416281370, -0.991844220854201990, -0.991837846812511970, -0.991831470291227420, -0.991825091290364110, +-0.991818709809938140, -0.991812325849965370, -0.991805939410461800, -0.991799550491443420, -0.991793159092926090, -0.991786765214925920, -0.991780368857458790, -0.991773970020540800, +-0.991767568704187810, -0.991761164908415930, -0.991754758633241250, -0.991748349878679550, -0.991741938644747020, -0.991735524931459560, -0.991729108738833350, -0.991722690066884400, +-0.991716268915628700, -0.991709845285082330, -0.991703419175261280, -0.991696990586181770, -0.991690559517859780, -0.991684125970311300, -0.991677689943552650, -0.991671251437599710, +-0.991664810452468570, -0.991658366988175440, -0.991651921044736430, -0.991645472622167620, -0.991639021720485130, -0.991632568339705030, -0.991626112479843560, -0.991619654140916800, +-0.991613193322940960, -0.991606730025932030, -0.991600264249906330, -0.991593795994879960, -0.991587325260869120, -0.991580852047890040, -0.991574376355958690, -0.991567898185091500, +-0.991561417535304470, -0.991554934406614020, -0.991548448799036140, -0.991541960712587160, -0.991535470147283270, -0.991528977103140700, -0.991522481580175640, -0.991515983578404430, +-0.991509483097843370, -0.991502980138508460, -0.991496474700416130, -0.991489966783582590, -0.991483456388024260, -0.991476943513757150, -0.991470428160797780, -0.991463910329162260, +-0.991457390018867010, -0.991450867229928260, -0.991444341962362310, -0.991437814216185600, -0.991431283991414340, -0.991424751288064840, -0.991418216106153440, -0.991411678445696440, +-0.991405138306710400, -0.991398595689211400, -0.991392050593215890, -0.991385503018740400, -0.991378952965801030, -0.991372400434414320, -0.991365845424596600, -0.991359287936364300, +-0.991352727969733730, -0.991346165524721320, -0.991339600601343630, -0.991333033199616850, -0.991326463319557430, -0.991319890961181890, -0.991313316124506680, -0.991306738809548120, +-0.991300159016322740, -0.991293576744846970, -0.991286991995137260, -0.991280404767210020, -0.991273815061081810, -0.991267222876769050, -0.991260628214288290, -0.991254031073655840, +-0.991247431454888470, -0.991240829358002400, -0.991234224783014260, -0.991227617729940610, -0.991221008198797880, -0.991214396189602610, -0.991207781702371450, -0.991201164737120720, +-0.991194545293867190, -0.991187923372627180, -0.991181298973417450, -0.991174672096254430, -0.991168042741154780, -0.991161410908135030, -0.991154776597211630, -0.991148139808401440, +-0.991141500541720790, -0.991134858797186440, -0.991128214574814930, -0.991121567874622910, -0.991114918696626930, -0.991108267040843650, -0.991101612907289710, -0.991094956295981770, +-0.991088297206936470, -0.991081635640170380, -0.991074971595700130, -0.991068305073542600, -0.991061636073714220, -0.991054964596231770, -0.991048290641111880, -0.991041614208371340, +-0.991034935298026660, -0.991028253910094750, -0.991021570044592130, -0.991014883701535560, -0.991008194880941830, -0.991001503582827570, -0.990994809807209660, -0.990988113554104650, +-0.990981414823529310, -0.990974713615500490, -0.990968009930034870, -0.990961303767149300, -0.990954595126860350, -0.990947884009184990, -0.990941170414139980, -0.990934454341741880, +-0.990927735792007770, -0.990921014764954310, -0.990914291260598270, -0.990907565278956510, -0.990900836820045820, -0.990894105883883050, -0.990887372470485080, -0.990880636579868580, +-0.990873898212050520, -0.990867157367047780, -0.990860414044877120, -0.990853668245555430, -0.990846919969099460, -0.990840169215526310, -0.990833415984852750, -0.990826660277095540, +-0.990819902092271780, -0.990813141430398230, -0.990806378291491870, -0.990799612675569490, -0.990792844582648160, -0.990786074012744660, -0.990779300965875960, -0.990772525442059070, +-0.990765747441310740, -0.990758966963648180, -0.990752184009088150, -0.990745398577647650, -0.990738610669343660, -0.990731820284193150, -0.990725027422213130, -0.990718232083420470, +-0.990711434267832260, -0.990704633975465490, -0.990697831206337140, -0.990691025960464210, -0.990684218237863680, -0.990677408038552640, -0.990670595362547980, -0.990663780209866900, +-0.990656962580526490, -0.990650142474543530, -0.990643319891935210, -0.990636494832718650, -0.990629667296910820, -0.990622837284528820, -0.990616004795589760, -0.990609169830110710, +-0.990602332388108690, -0.990595492469600880, -0.990588650074604280, -0.990581805203136100, -0.990574957855213320, -0.990568108030853270, -0.990561255730072920, -0.990554400952889380, +-0.990547543699319850, -0.990540683969381440, -0.990533821763091350, -0.990526957080466790, -0.990520089921524740, -0.990513220286282530, -0.990506348174757130, -0.990499473586965990, +-0.990492596522926090, -0.990485716982654860, -0.990478834966169170, -0.990471950473486460, -0.990465063504623820, -0.990458174059598570, -0.990451282138427920, -0.990444387741128970, +-0.990437490867719150, -0.990430591518215550, -0.990423689692635500, -0.990416785390996090, -0.990409878613314860, -0.990402969359608920, -0.990396057629895580, -0.990389143424192040, +-0.990382226742515640, -0.990375307584883680, -0.990368385951313490, -0.990361461841822280, -0.990354535256427470, -0.990347606195146280, -0.990340674657996130, -0.990333740644994240, +-0.990326804156158040, -0.990319865191504830, -0.990312923751051840, -0.990305979834816720, -0.990299033442816560, -0.990292084575068790, -0.990285133231590840, -0.990278179412400040, +-0.990271223117513810, -0.990264264346949590, -0.990257303100724570, -0.990250339378856430, -0.990243373181362350, -0.990236404508259890, -0.990229433359566370, -0.990222459735299320, +-0.990215483635476070, -0.990208505060114150, -0.990201524009230890, -0.990194540482843940, -0.990187554480970620, -0.990180566003628360, -0.990173575050834700, -0.990166581622607070, +-0.990159585718963010, -0.990152587339920070, -0.990145586485495550, -0.990138583155707130, -0.990131577350572220, -0.990124569070108370, -0.990117558314333120, -0.990110545083263900, +-0.990103529376918370, -0.990096511195314060, -0.990089490538468400, -0.990082467406399050, -0.990075441799123550, -0.990068413716659430, -0.990061383159024260, -0.990054350126235660, +-0.990047314618311190, -0.990040276635268390, -0.990033236177124910, -0.990026193243898400, -0.990019147835606290, -0.990012099952266470, -0.990005049593896240, -0.989997996760513480, +-0.989990941452135730, -0.989983883668780650, -0.989976823410465780, -0.989969760677208880, -0.989962695469027600, -0.989955627785939600, -0.989948557627962410, -0.989941484995114030, +-0.989934409887411770, -0.989927332304873510, -0.989920252247517010, -0.989913169715359810, -0.989906084708419680, -0.989898997226714370, -0.989891907270261550, -0.989884814839078970, +-0.989877719933184300, -0.989870622552595390, -0.989863522697329910, -0.989856420367405620, -0.989849315562840280, -0.989842208283651660, -0.989835098529857520, -0.989827986301475620, +-0.989820871598523830, -0.989813754421019710, -0.989806634768981340, -0.989799512642426380, -0.989792388041372590, -0.989785260965837850, -0.989778131415839920, -0.989770999391396680, +-0.989763864892525880, -0.989756727919245520, -0.989749588471573350, -0.989742446549527140, -0.989735302153124770, -0.989728155282384340, -0.989721005937323370, -0.989713854117959870, +-0.989706699824311810, -0.989699543056396960, -0.989692383814233300, -0.989685222097838600, -0.989678057907230850, -0.989670891242428020, -0.989663722103448000, -0.989656550490308540, +-0.989649376403027750, -0.989642199841623600, -0.989635020806113870, -0.989627839296516650, -0.989620655312849820, -0.989613468855131240, -0.989606279923379130, -0.989599088517611250, +-0.989591894637845690, -0.989584698284100340, -0.989577499456393280, -0.989570298154742510, -0.989563094379165900, -0.989555888129681650, -0.989548679406307640, -0.989541468209061970, +-0.989534254537962510, -0.989527038393027580, -0.989519819774274940, -0.989512598681722810, -0.989505375115389160, -0.989498149075291990, -0.989490920561449610, -0.989483689573879780, +-0.989476456112600820, -0.989469220177630620, -0.989461981768987480, -0.989454740886689390, -0.989447497530754340, -0.989440251701200650, -0.989433003398046300, -0.989425752621309380, +-0.989418499371008120, -0.989411243647160710, -0.989403985449785030, -0.989396724778899510, -0.989389461634522130, -0.989382196016671100, -0.989374927925364520, -0.989367657360620710, +-0.989360384322457760, -0.989353108810893780, -0.989345830825947070, -0.989338550367635850, -0.989331267435978100, -0.989323982030992250, -0.989316694152696520, -0.989309403801108990, +-0.989302110976247980, -0.989294815678131600, -0.989287517906778270, -0.989280217662206200, -0.989272914944433480, -0.989265609753478550, -0.989258302089359500, -0.989250991952094760, +-0.989243679341702540, -0.989236364258201050, -0.989229046701608830, -0.989221726671943860, -0.989214404169224570, -0.989207079193469290, -0.989199751744696320, -0.989192421822923880, +-0.989185089428170520, -0.989177754560454430, -0.989170417219793820, -0.989163077406207350, -0.989155735119713000, -0.989148390360329420, -0.989141043128074830, -0.989133693422967750, +-0.989126341245026300, -0.989118986594269000, -0.989111629470714290, -0.989104269874380490, -0.989096907805286030, -0.989089543263449330, -0.989082176248888720, -0.989074806761622630, +-0.989067434801669590, -0.989060060369047920, -0.989052683463776170, -0.989045304085872660, -0.989037922235355920, -0.989030537912244270, -0.989023151116556360, -0.989015761848310640, +-0.989008370107525400, -0.989000975894219310, -0.988993579208410690, -0.988986180050118180, -0.988978778419360330, -0.988971374316155340, -0.988963967740522090, -0.988956558692478780, +-0.988949147172044190, -0.988941733179236620, -0.988934316714074830, -0.988926897776577160, -0.988919476366762250, -0.988912052484648640, -0.988904626130254980, -0.988897197303599710, +-0.988889766004701460, -0.988882332233578800, -0.988874895990250250, -0.988867457274734460, -0.988860016087050100, -0.988852572427215690, -0.988845126295249790, -0.988837677691171150, +-0.988830226614998200, -0.988822773066749820, -0.988815317046444430, -0.988807858554100800, -0.988800397589737480, -0.988792934153373220, -0.988785468245026560, -0.988777999864716260, +-0.988770529012460990, -0.988763055688279380, -0.988755579892190100, -0.988748101624211890, -0.988740620884363430, -0.988733137672663350, -0.988725651989130540, -0.988718163833783530, +-0.988710673206641080, -0.988703180107721960, -0.988695684537045040, -0.988688186494628750, -0.988680685980492080, -0.988673182994653570, -0.988665677537132190, -0.988658169607946610, +-0.988650659207115700, -0.988643146334658000, -0.988635630990592480, -0.988628113174937930, -0.988620592887713090, -0.988613070128936730, -0.988605544898627730, -0.988598017196804730, +-0.988590487023486840, -0.988582954378692700, -0.988575419262441190, -0.988567881674751070, -0.988560341615641320, -0.988552799085130610, -0.988545254083238010, -0.988537706609982300, +-0.988530156665382240, -0.988522604249456820, -0.988515049362224900, -0.988507492003705250, -0.988499932173916960, -0.988492369872878920, -0.988484805100609880, -0.988477237857128820, +-0.988469668142454630, -0.988462095956606280, -0.988454521299602760, -0.988446944171462950, -0.988439364572205710, -0.988431782501850040, -0.988424197960414920, -0.988416610947919330, +-0.988409021464382250, -0.988401429509822570, -0.988393835084259380, -0.988386238187711540, -0.988378638820198160, -0.988371036981738120, -0.988363432672350490, -0.988355825892054280, +-0.988348216640868580, -0.988340604918812260, -0.988332990725904410, -0.988325374062164140, -0.988317754927610430, -0.988310133322262360, -0.988302509246138940, -0.988294882699259250, +-0.988287253681642270, -0.988279622193307230, -0.988271988234273090, -0.988264351804559070, -0.988256712904184040, -0.988249071533167320, -0.988241427691527900, -0.988233781379284970, +-0.988226132596457530, -0.988218481343064780, -0.988210827619125820, -0.988203171424659740, -0.988195512759685760, -0.988187851624223070, -0.988180188018290660, -0.988172521941907860, +-0.988164853395093750, -0.988157182377867430, -0.988149508890248220, -0.988141832932255220, -0.988134154503907620, -0.988126473605224650, -0.988118790236225400, -0.988111104396929290, +-0.988103416087355410, -0.988095725307522990, -0.988088032057451220, -0.988080336337159420, -0.988072638146666790, -0.988064937485992440, -0.988057234355155910, -0.988049528754176180, +-0.988041820683072670, -0.988034110141864600, -0.988026397130571280, -0.988018681649211920, -0.988010963697805940, -0.988003243276372460, -0.987995520384930880, -0.987987795023500540, +-0.987980067192100740, -0.987972336890750700, -0.987964604119469850, -0.987956868878277490, -0.987949131167192960, -0.987941390986235680, -0.987933648335424740, -0.987925903214779800, +-0.987918155624320060, -0.987910405564065060, -0.987902653034033910, -0.987894898034246130, -0.987887140564721160, -0.987879380625478310, -0.987871618216537020, -0.987863853337916710, +-0.987856085989636700, -0.987848316171716530, -0.987840543884175530, -0.987832769127033220, -0.987824991900309040, -0.987817212204022300, -0.987809430038192550, -0.987801645402839100, +-0.987793858297981720, -0.987786068723639610, -0.987778276679832310, -0.987770482166579370, -0.987762685183900200, -0.987754885731814360, -0.987747083810341260, -0.987739279419500460, +-0.987731472559311490, -0.987723663229793770, -0.987715851430966960, -0.987708037162850490, -0.987700220425463900, -0.987692401218826840, -0.987684579542958740, -0.987676755397879140, +-0.987668928783607680, -0.987661099700163910, -0.987653268147567380, -0.987645434125837720, -0.987637597634994480, -0.987629758675057200, -0.987621917246045530, -0.987614073347979130, +-0.987606226980877410, -0.987598378144760260, -0.987590526839647100, -0.987582673065557580, -0.987574816822511470, -0.987566958110528300, -0.987559096929627730, -0.987551233279829410, +-0.987543367161152990, -0.987535498573618110, -0.987527627517244540, -0.987519753992051940, -0.987511877998059950, -0.987503999535288220, -0.987496118603756520, -0.987488235203484390, +-0.987480349334491910, -0.987472460996798420, -0.987464570190423770, -0.987456676915387740, -0.987448781171709980, -0.987440882959410240, -0.987432982278508400, -0.987425079129024000, +-0.987417173510977020, -0.987409265424387010, -0.987401354869273830, -0.987393441845657250, -0.987385526353557140, -0.987377608392993160, -0.987369687963985280, -0.987361765066553040, +-0.987353839700716440, -0.987345911866495230, -0.987337981563909170, -0.987330048792978250, -0.987322113553722240, -0.987314175846160880, -0.987306235670314060, -0.987298293026201760, +-0.987290347913843620, -0.987282400333259650, -0.987274450284469700, -0.987266497767493530, -0.987258542782351260, -0.987250585329062510, -0.987242625407647400, -0.987234663018125680, +-0.987226698160517220, -0.987218730834842130, -0.987210761041120160, -0.987202788779371400, -0.987194814049615510, -0.987186836851872700, -0.987178857186162720, -0.987170875052505560, +-0.987162890450921320, -0.987154903381429750, -0.987146913844051070, -0.987138921838805030, -0.987130927365711620, -0.987122930424790930, -0.987114931016062960, -0.987106929139547670, +-0.987098924795264950, -0.987090917983235010, -0.987082908703477810, -0.987074896956013250, -0.987066882740861520, -0.987058866058042490, -0.987050846907576380, -0.987042825289483170, +-0.987034801203782840, -0.987026774650495490, -0.987018745629641310, -0.987010714141240090, -0.987002680185312230, -0.986994643761877620, -0.986986604870956350, -0.986978563512568740, +-0.986970519686734550, -0.986962473393474090, -0.986954424632807470, -0.986946373404754880, -0.986938319709336210, -0.986930263546571870, -0.986922204916481750, -0.986914143819086150, +-0.986906080254405180, -0.986898014222459150, -0.986889945723267940, -0.986881874756851960, -0.986873801323231210, -0.986865725422426010, -0.986857647054456440, -0.986849566219342720, +-0.986841482917105160, -0.986833397147763860, -0.986825308911339130, -0.986817218207851070, -0.986809125037319990, -0.986801029399766110, -0.986792931295209620, -0.986784830723670850, +-0.986776727685170000, -0.986768622179727270, -0.986760514207362990, -0.986752403768097470, -0.986744290861950920, -0.986736175488943660, -0.986728057649095990, -0.986719937342428130, +-0.986711814568960510, -0.986703689328713220, -0.986695561621706800, -0.986687431447961450, -0.986679298807497500, -0.986671163700335250, -0.986663026126495150, -0.986654886085997610, +-0.986646743578862620, -0.986638598605110940, -0.986630451164762780, -0.986622301257838340, -0.986614148884358280, -0.986605994044342790, -0.986597836737812320, -0.986589676964787280, +-0.986581514725288100, -0.986573350019334990, -0.986565182846948610, -0.986557013208149260, -0.986548841102957370, -0.986540666531393380, -0.986532489493477720, -0.986524309989230800, +-0.986516128018673170, -0.986507943581825140, -0.986499756678707370, -0.986491567309340180, -0.986483375473743980, -0.986475181171939440, -0.986466984403946870, -0.986458785169786910, +-0.986450583469479890, -0.986442379303046460, -0.986434172670507150, -0.986425963571882390, -0.986417752007192620, -0.986409537976458580, -0.986401321479700610, -0.986393102516939350, +-0.986384881088195440, -0.986376657193489210, -0.986368430832841430, -0.986360202006272500, -0.986351970713803090, -0.986343736955453740, -0.986335500731244990, -0.986327262041197580, +-0.986319020885331970, -0.986310777263668890, -0.986302531176228790, -0.986294282623032430, -0.986286031604100330, -0.986277778119453160, -0.986269522169111460, -0.986261263753096080, +-0.986253002871427360, -0.986244739524126280, -0.986236473711213370, -0.986228205432709280, -0.986219934688634560, -0.986211661479010070, -0.986203385803856470, -0.986195107663194290, +-0.986186827057044410, -0.986178543985427480, -0.986170258448364260, -0.986161970445875280, -0.986153679977981420, -0.986145387044703340, -0.986137091646061780, -0.986128793782077520, +-0.986120493452771310, -0.986112190658163800, -0.986103885398275760, -0.986095577673128170, -0.986087267482741560, -0.986078954827136700, -0.986070639706334570, -0.986062322120355830, +-0.986054002069221220, -0.986045679552951640, -0.986037354571567830, -0.986029027125090660, -0.986020697213540910, -0.986012364836939440, -0.986004029995307120, -0.985995692688664600, +-0.985987352917032880, -0.985979010680432920, -0.985970665978885270, -0.985962318812411030, -0.985953969181030950, -0.985945617084765910, -0.985937262523636890, -0.985928905497664760, +-0.985920546006870290, -0.985912184051274450, -0.985903819630898240, -0.985895452745762400, -0.985887083395887930, -0.985878711581295810, -0.985870337302006900, -0.985861960558042090, +-0.985853581349422360, -0.985845199676168790, -0.985836815538302160, -0.985828428935843440, -0.985820039868813720, -0.985811648337233890, -0.985803254341124920, -0.985794857880507800, +-0.985786458955403620, -0.985778057565833250, -0.985769653711817680, -0.985761247393378000, -0.985752838610535200, -0.985744427363310360, -0.985736013651724470, -0.985727597475798410, +-0.985719178835553490, -0.985710757731010580, -0.985702334162190770, -0.985693908129115060, -0.985685479631804640, -0.985677048670280500, -0.985668615244563840, -0.985660179354675540, +-0.985651741000636790, -0.985643300182468710, -0.985634856900192370, -0.985626411153828990, -0.985617962943399430, -0.985609512268925010, -0.985601059130426840, -0.985592603527926100, +-0.985584145461443680, -0.985575684931001010, -0.985567221936619050, -0.985558756478319140, -0.985550288556122260, -0.985541818170049710, -0.985533345320122600, -0.985524870006362130, +-0.985516392228789400, -0.985507911987425820, -0.985499429282292390, -0.985490944113410320, -0.985482456480801020, -0.985473966384485480, -0.985465473824485130, -0.985456978800821060, +-0.985448481313514480, -0.985439981362586700, -0.985431478948059050, -0.985422974069952720, -0.985414466728288920, -0.985405956923088850, -0.985397444654373960, -0.985388929922165540, +-0.985380412726484690, -0.985371893067352840, -0.985363370944791210, -0.985354846358821200, -0.985346319309464040, -0.985337789796741140, -0.985329257820673820, -0.985320723381283290, +-0.985312186478590870, -0.985303647112618090, -0.985295105283386150, -0.985286560990916490, -0.985278014235230310, -0.985269465016349270, -0.985260913334294440, -0.985252359189087380, +-0.985243802580749390, -0.985235243509301920, -0.985226681974766370, -0.985218117977164080, -0.985209551516516460, -0.985200982592844940, -0.985192411206171070, -0.985183837356516160, +-0.985175261043901520, -0.985166682268348910, -0.985158101029879440, -0.985149517328514860, -0.985140931164276370, -0.985132342537185620, -0.985123751447264050, -0.985115157894532970, +-0.985106561879014130, -0.985097963400728750, -0.985089362459698580, -0.985080759055944940, -0.985072153189489490, -0.985063544860353520, -0.985054934068558820, -0.985046320814126690, +-0.985037705097078780, -0.985029086917436620, -0.985020466275221770, -0.985011843170455760, -0.985003217603160120, -0.984994589573356390, -0.984985959081066230, -0.984977326126311170, +-0.984968690709112750, -0.984960052829492730, -0.984951412487472420, -0.984942769683073700, -0.984934124416318000, -0.984925476687227070, -0.984916826495822350, -0.984908173842125590, +-0.984899518726158440, -0.984890861147942440, -0.984882201107499240, -0.984873538604850610, -0.984864873640018180, -0.984856206213023500, -0.984847536323888330, -0.984838863972634320, +-0.984830189159283110, -0.984821511883856470, -0.984812832146376050, -0.984804149946863490, -0.984795465285340570, -0.984786778161829020, -0.984778088576350520, -0.984769396528926810, +-0.984760702019579660, -0.984752005048330710, -0.984743305615201740, -0.984734603720214490, -0.984725899363390720, -0.984717192544752210, -0.984708483264320700, -0.984699771522118070, +-0.984691057318165970, -0.984682340652486170, -0.984673621525100630, -0.984664899936030900, -0.984656175885299080, -0.984647449372926700, -0.984638720398935630, -0.984629988963347970, +-0.984621255066185140, -0.984612518707469350, -0.984603779887222140, -0.984595038605465490, -0.984586294862221270, -0.984577548657511350, -0.984568799991357490, -0.984560048863781680, +-0.984551295274805670, -0.984542539224451560, -0.984533780712741000, -0.984525019739695970, -0.984516256305338460, -0.984507490409690320, -0.984498722052773330, -0.984489951234609690, +-0.984481177955221050, -0.984472402214629510, -0.984463624012857030, -0.984454843349925390, -0.984446060225856790, -0.984437274640672880, -0.984428486594395860, -0.984419696087047600, +-0.984410903118650090, -0.984402107689225310, -0.984393309798795360, -0.984384509447382090, -0.984375706635007510, -0.984366901361693690, -0.984358093627462630, -0.984349283432336300, +-0.984340470776336800, -0.984331655659485990, -0.984322838081806210, -0.984314018043319190, -0.984305195544047270, -0.984296370584012310, -0.984287543163236410, -0.984278713281741660, +-0.984269880939550150, -0.984261046136683860, -0.984252208873165000, -0.984243369149015670, -0.984234526964257840, -0.984225682318913720, -0.984216835213005400, -0.984207985646555090, +-0.984199133619584670, -0.984190279132116430, -0.984181422184172590, -0.984172562775775140, -0.984163700906946270, -0.984154836577708190, -0.984145969788082890, -0.984137100538092780, +-0.984128228827759970, -0.984119354657106430, -0.984110478026154590, -0.984101598934926550, -0.984092717383444620, -0.984083833371730780, -0.984074946899807350, -0.984066057967696530, +-0.984057166575420640, -0.984048272723001770, -0.984039376410462350, -0.984030477637824360, -0.984021576405110230, -0.984012672712342160, -0.984003766559542360, -0.983994857946733140, +-0.983985946873936920, -0.983977033341175700, -0.983968117348471890, -0.983959198895847820, -0.983950277983325790, -0.983941354610928020, -0.983932428778676820, -0.983923500486594600, +-0.983914569734703590, -0.983905636523026320, -0.983896700851584760, -0.983887762720401570, -0.983878822129498840, -0.983869879078899220, -0.983860933568624810, -0.983851985598698130, +-0.983843035169141400, -0.983834082279977150, -0.983825126931227590, -0.983816169122915360, -0.983807208855062560, -0.983798246127691840, -0.983789280940825520, -0.983780313294486010, +-0.983771343188695640, -0.983762370623476930, -0.983753395598852220, -0.983744418114844140, -0.983735438171475020, -0.983726455768767270, -0.983717470906743330, -0.983708483585425730, +-0.983699493804837010, -0.983690501564999490, -0.983681506865935700, -0.983672509707668170, -0.983663510090219350, -0.983654508013611760, -0.983645503477867940, -0.983636496483010330, +-0.983627487029061440, -0.983618475116043940, -0.983609460743980150, -0.983600443912892700, -0.983591424622804240, -0.983582402873737220, -0.983573378665714040, -0.983564351998757580, +-0.983555322872890160, -0.983546291288134420, -0.983537257244513020, -0.983528220742048380, -0.983519181780763250, -0.983510140360680190, -0.983501096481821710, -0.983492050144210590, +-0.983483001347869260, -0.983473950092820460, -0.983464896379086740, -0.983455840206690860, -0.983446781575655240, -0.983437720486002860, -0.983428656937756050, -0.983419590930937670, +-0.983410522465570260, -0.983401451541676570, -0.983392378159279160, -0.983383302318400880, -0.983374224019064380, -0.983365143261292320, -0.983356060045107340, -0.983346974370532200, +-0.983337886237589660, -0.983328795646302490, -0.983319702596693210, -0.983310607088784700, -0.983301509122599730, -0.983292408698160920, -0.983283305815491170, -0.983274200474613000, +-0.983265092675549510, -0.983255982418323130, -0.983246869702956940, -0.983237754529473480, -0.983228636897895750, -0.983219516808246260, -0.983210394260548020, -0.983201269254823870, +-0.983192141791096490, -0.983183011869388830, -0.983173879489723570, -0.983164744652123670, -0.983155607356611890, -0.983146467603211010, -0.983137325391943980, -0.983128180722833810, +-0.983119033595903020, -0.983109884011174720, -0.983100731968671650, -0.983091577468416800, -0.983082420510432930, -0.983073261094743130, -0.983064099221370060, -0.983054934890336800, +-0.983045768101666220, -0.983036598855381190, -0.983027427151504600, -0.983018252990059520, -0.983009076371068820, -0.982999897294555390, -0.982990715760542310, -0.982981531769052340, +-0.982972345320108580, -0.982963156413733890, -0.982953965049951470, -0.982944771228783990, -0.982935574950254630, -0.982926376214386280, -0.982917175021202130, -0.982907971370724940, +-0.982898765262977810, -0.982889556697983830, -0.982880345675765880, -0.982871132196347140, -0.982861916259750500, -0.982852697865999160, -0.982843477015115980, -0.982834253707124180, +-0.982825027942046630, -0.982815799719906620, -0.982806569040727160, -0.982797335904531220, -0.982788100311341890, -0.982778862261182380, -0.982769621754075670, -0.982760378790044960, +-0.982751133369113240, -0.982741885491303700, -0.982732635156639440, -0.982723382365143670, -0.982714127116839360, -0.982704869411749730, -0.982695609249897960, -0.982686346631307160, +-0.982677081556000530, -0.982667814024001160, -0.982658544035332260, -0.982649271590016920, -0.982639996688078550, -0.982630719329540050, -0.982621439514424820, -0.982612157242755970, +-0.982602872514556800, -0.982593585329850420, -0.982584295688660010, -0.982575003591008910, -0.982565709036920310, -0.982556412026417410, -0.982547112559523540, -0.982537810636261780, +-0.982528506256655660, -0.982519199420728070, -0.982509890128502650, -0.982500578380002490, -0.982491264175250790, -0.982481947514270980, -0.982472628397086270, -0.982463306823720070, +-0.982453982794195490, -0.982444656308536060, -0.982435327366764870, -0.982425995968905450, -0.982416662114981020, -0.982407325805015000, -0.982397987039030580, -0.982388645817051210, +-0.982379302139100300, -0.982369956005201050, -0.982360607415376900, -0.982351256369651260, -0.982341902868047570, -0.982332546910589020, -0.982323188497299050, -0.982313827628201190, +-0.982304464303318750, -0.982295098522675160, -0.982285730286293850, -0.982276359594198120, -0.982266986446411640, -0.982257610842957600, -0.982248232783859530, -0.982238852269140870, +-0.982229469298825150, -0.982220083872935690, -0.982210695991496020, -0.982201305654529570, -0.982191912862059980, -0.982182517614110460, -0.982173119910704770, -0.982163719751866230, +-0.982154317137618470, -0.982144912067984820, -0.982135504542988920, -0.982126094562654210, -0.982116682127004310, -0.982107267236062790, -0.982097849889852940, -0.982088430088398520, +-0.982079007831723080, -0.982069583119850150, -0.982060155952803160, -0.982050726330605860, -0.982041294253281680, -0.982031859720854270, -0.982022422733347280, -0.982012983290784240, +-0.982003541393188570, -0.981994097040584270, -0.981984650232994530, -0.981975200970443330, -0.981965749252953990, -0.981956295080550380, -0.981946838453256030, -0.981937379371094600, +-0.981927917834089610, -0.981918453842264950, -0.981908987395644030, -0.981899518494250720, -0.981890047138108570, -0.981880573327241320, -0.981871097061672750, -0.981861618341426270, +-0.981852137166525860, -0.981842653536995070, -0.981833167452857650, -0.981823678914137240, -0.981814187920857730, -0.981804694473042750, -0.981795198570715950, -0.981785700213901210, +-0.981776199402622280, -0.981766696136902710, -0.981757190416766570, -0.981747682242237300, -0.981738171613338870, -0.981728658530095060, -0.981719142992529600, -0.981709625000666160, +-0.981700104554528830, -0.981690581654141140, -0.981681056299526960, -0.981671528490710270, -0.981661998227714610, -0.981652465510564070, -0.981642930339282290, -0.981633392713893270, +-0.981623852634420760, -0.981614310100888510, -0.981604765113320620, -0.981595217671740740, -0.981585667776172840, -0.981576115426640810, -0.981566560623168380, -0.981557003365779670, +-0.981547443654498310, -0.981537881489348510, -0.981528316870353910, -0.981518749797538500, -0.981509180270926260, -0.981499608290541060, -0.981490033856406760, -0.981480456968547470, +-0.981470877626987040, -0.981461295831749460, -0.981451711582858490, -0.981442124880338330, -0.981432535724212960, -0.981422944114506040, -0.981413350051241970, -0.981403753534444420, +-0.981394154564137480, -0.981384553140345120, -0.981374949263091430, -0.981365342932400410, -0.981355734148295910, -0.981346122910802140, -0.981336509219943090, -0.981326893075742830, +-0.981317274478225140, -0.981307653427414440, -0.981298029923334590, -0.981288403966009580, -0.981278775555463610, -0.981269144691720660, -0.981259511374804940, -0.981249875604740420, +-0.981240237381551080, -0.981230596705261360, -0.981220953575895010, -0.981211307993476330, -0.981201659958029330, -0.981192009469578190, -0.981182356528147000, -0.981172701133759980, +-0.981163043286441220, -0.981153382986214790, -0.981143720233104920, -0.981134055027135800, -0.981124387368331520, -0.981114717256716170, -0.981105044692314190, -0.981095369675149430, +-0.981085692205246440, -0.981076012282629080, -0.981066329907321680, -0.981056645079348530, -0.981046957798733740, -0.981037268065501510, -0.981027575879676260, -0.981017881241281970, +-0.981008184150342970, -0.980998484606883440, -0.980988782610927810, -0.980979078162500180, -0.980969371261624870, -0.980959661908326170, -0.980949950102628310, -0.980940235844555470, +-0.980930519134132100, -0.980920799971382480, -0.980911078356330850, -0.980901354289001490, -0.980891627769418740, -0.980881898797606900, -0.980872167373590400, -0.980862433497393440, +-0.980852697169040330, -0.980842958388555510, -0.980833217155963390, -0.980823473471288180, -0.980813727334554190, -0.980803978745785950, -0.980794227705007790, -0.980784474212244020, +-0.980774718267519050, -0.980764959870857430, -0.980755199022283250, -0.980745435721821160, -0.980735669969495350, -0.980725901765330480, -0.980716131109350850, -0.980706358001580900, +-0.980696582442045050, -0.980686804430767720, -0.980677023967773340, -0.980667241053086450, -0.980657455686731460, -0.980647667868732810, -0.980637877599115030, -0.980628084877902540, +-0.980618289705119880, -0.980608492080791370, -0.980598692004941760, -0.980588889477595370, -0.980579084498776730, -0.980569277068510380, -0.980559467186820970, -0.980549654853732690, +-0.980539840069270420, -0.980530022833458470, -0.980520203146321490, -0.980510381007884010, -0.980500556418170580, -0.980490729377205830, -0.980480899885014080, -0.980471067941620200, +-0.980461233547048620, -0.980451396701323970, -0.980441557404470920, -0.980431715656513880, -0.980421871457477500, -0.980412024807386540, -0.980402175706265420, -0.980392324154139020, +-0.980382470151031640, -0.980372613696968150, -0.980362754791973100, -0.980352893436071240, -0.980343029629287100, -0.980333163371645330, -0.980323294663170810, -0.980313423503887840, +-0.980303549893821510, -0.980293673832996150, -0.980283795321436720, -0.980273914359167780, -0.980264030946214060, -0.980254145082600110, -0.980244256768351030, -0.980234366003491120, +-0.980224472788045480, -0.980214577122038520, -0.980204679005495130, -0.980194778438440050, -0.980184875420898050, -0.980174969952893880, -0.980165062034452310, -0.980155151665597970, +-0.980145238846355850, -0.980135323576750590, -0.980125405856806960, -0.980115485686549940, -0.980105563066004160, -0.980095637995194500, -0.980085710474145610, -0.980075780502882580, +-0.980065848081430050, -0.980055913209813000, -0.980045975888055980, -0.980036036116184170, -0.980026093894222240, -0.980016149222195040, -0.980006202100127450, -0.979996252528044450, +-0.979986300505970800, -0.979976346033931360, -0.979966389111951000, -0.979956429740054700, -0.979946467918267340, -0.979936503646613890, -0.979926536925119110, -0.979916567753807980, +-0.979906596132705480, -0.979896622061836360, -0.979886645541225840, -0.979876666570898560, -0.979866685150879710, -0.979856701281194180, -0.979846714961866820, -0.979836726192922720, +-0.979826734974386770, -0.979816741306284040, -0.979806745188639420, -0.979796746621477980, -0.979786745604824590, -0.979776742138704360, -0.979766736223142360, -0.979756727858163370, +-0.979746717043792680, -0.979736703780055170, -0.979726688066975940, -0.979716669904579950, -0.979706649292892200, -0.979696626231937980, -0.979686600721742070, -0.979676572762329780, +-0.979666542353725970, -0.979656509495955840, -0.979646474189044380, -0.979636436433016790, -0.979626396227898040, -0.979616353573713460, -0.979606308470487800, -0.979596260918246480, +-0.979586210917014480, -0.979576158466817000, -0.979566103567679040, -0.979556046219625890, -0.979545986422682650, -0.979535924176874300, -0.979525859482226260, -0.979515792338763510, +-0.979505722746511380, -0.979495650705494820, -0.979485576215739280, -0.979475499277269730, -0.979465419890111380, -0.979455338054289530, -0.979445253769829380, -0.979435167036756040, +-0.979425077855094810, -0.979414986224870780, -0.979404892146109370, -0.979394795618835690, -0.979384696643075150, -0.979374595218852730, -0.979364491346193860, -0.979354385025123730, +-0.979344276255667780, -0.979334165037850980, -0.979324051371698760, -0.979313935257236530, -0.979303816694489400, -0.979293695683482790, -0.979283572224241890, -0.979273446316792030, +-0.979263317961158620, -0.979253187157366870, -0.979243053905442080, -0.979232918205409810, -0.979222780057295130, -0.979212639461123580, -0.979202496416920360, -0.979192350924711020, +-0.979182202984520630, -0.979172052596374850, -0.979161899760298880, -0.979151744476318250, -0.979141586744458170, -0.979131426564744170, -0.979121263937201560, -0.979111098861855880, +-0.979100931338732330, -0.979090761367856550, -0.979080588949253870, -0.979070414082949590, -0.979060236768969470, -0.979050057007338600, -0.979039874798082630, -0.979029690141226980, +-0.979019503036797190, -0.979009313484818570, -0.978999121485316650, -0.978988927038316860, -0.978978730143844840, -0.978968530801926030, -0.978958329012585840, -0.978948124775849800, +-0.978937918091743580, -0.978927708960292460, -0.978917497381522010, -0.978907283355457960, -0.978897066882125520, -0.978886847961550570, -0.978876626593758400, -0.978866402778774790, +-0.978856176516625040, -0.978845947807334920, -0.978835716650929940, -0.978825483047435660, -0.978815246996877610, -0.978805008499281540, -0.978794767554672870, -0.978784524163077370, +-0.978774278324520460, -0.978764030039028010, -0.978753779306625330, -0.978743526127338280, -0.978733270501192300, -0.978723012428213250, -0.978712751908426660, -0.978702488941858180, +-0.978692223528533470, -0.978681955668478150, -0.978671685361718110, -0.978661412608278660, -0.978651137408185770, -0.978640859761465090, -0.978630579668142150, -0.978620297128242830, +-0.978610012141792770, -0.978599724708817620, -0.978589434829343240, -0.978579142503395170, -0.978568847730999390, -0.978558550512181440, -0.978548250846967060, -0.978537948735382020, +-0.978527644177452190, -0.978517337173203220, -0.978507027722660960, -0.978496715825851070, -0.978486401482799420, -0.978476084693531760, -0.978465765458073840, -0.978455443776451550, +-0.978445119648690630, -0.978434793074816960, -0.978424464054856280, -0.978414132588834470, -0.978403798676777290, -0.978393462318710600, -0.978383123514660280, -0.978372782264652190, +-0.978362438568712080, -0.978352092426865940, -0.978341743839139410, -0.978331392805558700, -0.978321039326149440, -0.978310683400937630, -0.978300325029949010, -0.978289964213209680, +-0.978279600950745400, -0.978269235242582020, -0.978258867088745760, -0.978248496489262150, -0.978238123444157390, -0.978227747953457350, -0.978217370017187890, -0.978206989635375000, +-0.978196606808044660, -0.978186221535222720, -0.978175833816935290, -0.978165443653208340, -0.978155051044067750, -0.978144655989539480, -0.978134258489649630, -0.978123858544424070, +-0.978113456153888890, -0.978103051318070070, -0.978092644036993590, -0.978082234310685530, -0.978071822139171880, -0.978061407522478720, -0.978050990460632040, -0.978040570953657820, +-0.978030149001582250, -0.978019724604431210, -0.978009297762230890, -0.977998868475007390, -0.977988436742786680, -0.977978002565594860, -0.977967565943458130, -0.977957126876402350, +-0.977946685364453840, -0.977936241407638570, -0.977925795005982760, -0.977915346159512370, -0.977904894868253720, -0.977894441132232780, -0.977883984951475660, -0.977873526326008660, +-0.977863065255857870, -0.977852601741049380, -0.977842135781609390, -0.977831667377564000, -0.977821196528939510, -0.977810723235762010, -0.977800247498057830, -0.977789769315852820, +-0.977779288689173520, -0.977768805618045910, -0.977758320102496410, -0.977747832142551010, -0.977737341738236120, -0.977726848889577730, -0.977716353596602360, -0.977705855859336000, +-0.977695355677805080, -0.977684853052035780, -0.977674347982054210, -0.977663840467886900, -0.977653330509559940, -0.977642818107099740, -0.977632303260532410, -0.977621785969884360, +-0.977611266235181800, -0.977600744056451140, -0.977590219433718600, -0.977579692367010480, -0.977569162856353090, -0.977558630901772860, -0.977548096503296100, -0.977537559660949020, +-0.977527020374758030, -0.977516478644749550, -0.977505934470949800, -0.977495387853385300, -0.977484838792082260, -0.977474287287067200, -0.977463733338366340, -0.977453176946006200, +-0.977442618110013100, -0.977432056830413450, -0.977421493107233700, -0.977410926940500140, -0.977400358330239310, -0.977389787276477630, -0.977379213779241420, -0.977368637838557210, +-0.977358059454451420, -0.977347478626950370, -0.977336895356080700, -0.977326309641868840, -0.977315721484341200, -0.977305130883524110, -0.977294537839444310, -0.977283942352128230, +-0.977273344421602190, -0.977262744047892820, -0.977252141231026660, -0.977241535971030030, -0.977230928267929570, -0.977220318121751810, -0.977209705532523290, -0.977199090500270540, +-0.977188473025019990, -0.977177853106798280, -0.977167230745631940, -0.977156605941547520, -0.977145978694571540, -0.977135349004730760, -0.977124716872051490, -0.977114082296560380, +-0.977103445278284190, -0.977092805817249330, -0.977082163913482460, -0.977071519567010220, -0.977060872777859020, -0.977050223546055860, -0.977039571871627040, -0.977028917754599210, +-0.977018261194999240, -0.977007602192853540, -0.976996940748188770, -0.976986276861031790, -0.976975610531409020, -0.976964941759347230, -0.976954270544873160, -0.976943596888013350, +-0.976932920788794570, -0.976922242247243440, -0.976911561263386740, -0.976900877837251100, -0.976890191968863400, -0.976879503658250050, -0.976868812905438030, -0.976858119710454000, +-0.976847424073324590, -0.976836725994076670, -0.976826025472737000, -0.976815322509332120, -0.976804617103888990, -0.976793909256434390, -0.976783198966994950, -0.976772486235597540, +-0.976761771062268910, -0.976751053447035830, -0.976740333389925160, -0.976729610890963660, -0.976718885950178080, -0.976708158567595410, -0.976697428743242170, -0.976686696477145460, +-0.976675961769331910, -0.976665224619828630, -0.976654485028662140, -0.976643742995859540, -0.976632998521447470, -0.976622251605453020, -0.976611502247902830, -0.976600750448824000, +-0.976589996208243160, -0.976579239526187410, -0.976568480402683630, -0.976557718837758550, -0.976546954831439160, -0.976536188383752450, -0.976525419494725270, -0.976514648164384490, +-0.976503874392757100, -0.976493098179870070, -0.976482319525750260, -0.976471538430424670, -0.976460754893920260, -0.976449968916263900, -0.976439180497482680, -0.976428389637603370, +-0.976417596336653260, -0.976406800594659010, -0.976396002411647920, -0.976385201787646650, -0.976374398722682500, -0.976363593216782340, -0.976352785269973160, -0.976341974882282030, +-0.976331162053735930, -0.976320346784362080, -0.976309529074187220, -0.976298708923238560, -0.976287886331543060, -0.976277061299127950, -0.976266233826020180, -0.976255403912246860, +-0.976244571557834950, -0.976233736762811670, -0.976222899527203980, -0.976212059851039090, -0.976201217734343980, -0.976190373177145960, -0.976179526179471900, -0.976168676741349000, +-0.976157824862804450, -0.976146970543865340, -0.976136113784558890, -0.976125254584912060, -0.976114392944952170, -0.976103528864706190, -0.976092662344201440, -0.976081793383465010, +-0.976070921982524210, -0.976060048141405900, -0.976049171860137620, -0.976038293138746350, -0.976027411977259400, -0.976016528375703960, -0.976005642334107140, -0.975994753852496230, +-0.975983862930898450, -0.975972969569340880, -0.975962073767851050, -0.975951175526455940, -0.975940274845182860, -0.975929371724059250, -0.975918466163112060, -0.975907558162368850, +-0.975896647721856580, -0.975885734841602790, -0.975874819521634680, -0.975863901761979460, -0.975852981562664530, -0.975842058923717110, -0.975831133845164620, -0.975820206327034260, +-0.975809276369353330, -0.975798343972149260, -0.975787409135449260, -0.975776471859280850, -0.975765532143671120, -0.975754589988647720, -0.975743645394237750, -0.975732698360468720, +-0.975721748887367850, -0.975710796974962660, -0.975699842623280470, -0.975688885832348700, -0.975677926602194770, -0.975666964932845880, -0.975656000824329680, -0.975645034276673480, +-0.975634065289904710, -0.975623093864050660, -0.975612119999138990, -0.975601143695197020, -0.975590164952252150, -0.975579183770331810, -0.975568200149463660, -0.975557214089674880, +-0.975546225590993130, -0.975535234653445830, -0.975524241277060390, -0.975513245461864350, -0.975502247207885140, -0.975491246515150510, -0.975480243383687550, -0.975469237813524130, +-0.975458229804687550, -0.975447219357205460, -0.975436206471105180, -0.975425191146414460, -0.975414173383160830, -0.975403153181371720, -0.975392130541074650, -0.975381105462297390, +-0.975370077945067250, -0.975359047989411980, -0.975348015595359110, -0.975336980762936180, -0.975325943492170720, -0.975314903783090490, -0.975303861635723020, -0.975292817050095850, +-0.975281770026236620, -0.975270720564172970, -0.975259668663932540, -0.975248614325543000, -0.975237557549031850, -0.975226498334426760, -0.975215436681755590, -0.975204372591045640, +-0.975193306062324900, -0.975182237095620800, -0.975171165690961180, -0.975160091848373600, -0.975149015567885800, -0.975137936849525430, -0.975126855693320250, -0.975115772099298010, +-0.975104686067486240, -0.975093597597912810, -0.975082506690605370, -0.975071413345591550, -0.975060317562899350, -0.975049219342556280, -0.975038118684590120, -0.975027015589028820, +-0.975015910055899830, -0.975004802085231210, -0.974993691677050410, -0.974982578831385500, -0.974971463548264140, -0.974960345827714070, -0.974949225669763160, -0.974938103074439290, +-0.974926978041769980, -0.974915850571783320, -0.974904720664507060, -0.974893588319968970, -0.974882453538196800, -0.974871316319218640, -0.974860176663062130, -0.974849034569755250, +-0.974837890039325750, -0.974826743071801390, -0.974815593667210380, -0.974804441825580240, -0.974793287546939060, -0.974782130831314710, -0.974770971678734940, -0.974759810089227740, +-0.974748646062821080, -0.974737479599542820, -0.974726310699420840, -0.974715139362483000, -0.974703965588757380, -0.974692789378271860, -0.974681610731054300, -0.974670429647132800, +-0.974659246126535210, -0.974648060169289510, -0.974636871775423570, -0.974625680944965490, -0.974614487677943230, -0.974603291974384780, -0.974592093834318110, -0.974580893257771200, +-0.974569690244771910, -0.974558484795348570, -0.974547276909528910, -0.974536066587341150, -0.974524853828813150, -0.974513638633973110, -0.974502421002848900, -0.974491200935468700, +-0.974479978431860410, -0.974468753492052200, -0.974457526116072170, -0.974446296303948300, -0.974435064055708570, -0.974423829371381390, -0.974412592250994410, -0.974401352694576170, +-0.974390110702154420, -0.974378866273757360, -0.974367619409413190, -0.974356370109149990, -0.974345118372995870, -0.974333864200978890, -0.974322607593127280, -0.974311348549469210, +-0.974300087070032680, -0.974288823154846000, -0.974277556803937240, -0.974266288017334610, -0.974255016795066210, -0.974243743137160330, -0.974232467043645080, -0.974221188514548640, +-0.974209907549899220, -0.974198624149725020, -0.974187338314054350, -0.974176050042915190, -0.974164759336336060, -0.974153466194344950, -0.974142170616970060, -0.974130872604239920, +-0.974119572156182500, -0.974108269272826230, -0.974096963954199200, -0.974085656200329940, -0.974074346011246320, -0.974063033386976970, -0.974051718327550000, -0.974040400832993700, +-0.974029080903336400, -0.974017758538606500, -0.974006433738832110, -0.973995106504041640, -0.973983776834263400, -0.973972444729525820, -0.973961110189856980, -0.973949773215285420, +-0.973938433805839440, -0.973927091961547360, -0.973915747682437600, -0.973904400968538360, -0.973893051819878290, -0.973881700236485460, -0.973870346218388420, -0.973858989765615470, +-0.973847630878195150, -0.973836269556155650, -0.973824905799525520, -0.973813539608333170, -0.973802170982606910, -0.973790799922375270, -0.973779426427666570, -0.973768050498509340, +-0.973756672134932000, -0.973745291336962860, -0.973733908104630670, -0.973722522437963640, -0.973711134336990300, -0.973699743801739070, -0.973688350832238480, -0.973676955428517180, +-0.973665557590603250, -0.973654157318525670, -0.973642754612312530, -0.973631349471992590, -0.973619941897594150, -0.973608531889145980, -0.973597119446676480, -0.973585704570214090, +-0.973574287259787560, -0.973562867515425200, -0.973551445337155760, -0.973540020725007670, -0.973528593679009460, -0.973517164199189880, -0.973505732285577350, -0.973494297938200530, +-0.973482861157087820, -0.973471421942268100, -0.973459980293769790, -0.973448536211621530, -0.973437089695851960, -0.973425640746489520, -0.973414189363563160, -0.973402735547101220, +-0.973391279297132540, -0.973379820613685550, -0.973368359496789130, -0.973356895946471680, -0.973345429962762080, -0.973333961545688850, -0.973322490695280760, -0.973311017411566450, +-0.973299541694574550, -0.973288063544333840, -0.973276582960872940, -0.973265099944220500, -0.973253614494405510, -0.973242126611456370, -0.973230636295401850, -0.973219143546270820, +-0.973207648364091900, -0.973196150748893980, -0.973184650700705480, -0.973173148219555470, -0.973161643305472610, -0.973150135958485650, -0.973138626178623230, -0.973127113965914450, +-0.973115599320387710, -0.973104082242072010, -0.973092562730996090, -0.973081040787188820, -0.973069516410678960, -0.973057989601495250, -0.973046460359666580, -0.973034928685221790, +-0.973023394578189650, -0.973011858038599020, -0.973000319066478770, -0.972988777661857650, -0.972977233824764750, -0.972965687555228610, -0.972954138853278310, -0.972942587718942600, +-0.972931034152250570, -0.972919478153230770, -0.972907919721912480, -0.972896358858324260, -0.972884795562495190, -0.972873229834454010, -0.972861661674229940, -0.972850091081851610, +-0.972838518057348000, -0.972826942600748200, -0.972815364712081080, -0.972803784391375380, -0.972792201638660430, -0.972780616453964740, -0.972769028837317640, -0.972757438788747990, +-0.972745846308284760, -0.972734251395956820, -0.972722654051793260, -0.972711054275823160, -0.972699452068075400, -0.972687847428578940, -0.972676240357362890, -0.972664630854456310, +-0.972653018919888090, -0.972641404553687310, -0.972629787755883050, -0.972618168526504290, -0.972606546865580120, -0.972594922773139640, -0.972583296249211800, -0.972571667293825710, +-0.972560035907010460, -0.972548402088795120, -0.972536765839208780, -0.972525127158280540, -0.972513486046039490, -0.972501842502514700, -0.972490196527735380, -0.972478548121730400, +-0.972466897284529170, -0.972455244016160680, -0.972443588316654120, -0.972431930186038570, -0.972420269624343140, -0.972408606631597120, -0.972396941207829490, -0.972385273353069570, +-0.972373603067346440, -0.972361930350689300, -0.972350255203127340, -0.972338577624689780, -0.972326897615405810, -0.972315215175304500, -0.972303530304415080, -0.972291843002767050, +-0.972280153270389190, -0.972268461107311130, -0.972256766513561850, -0.972245069489170670, -0.972233370034166770, -0.972221668148579470, -0.972209963832437960, -0.972198257085771680, +-0.972186547908609590, -0.972174836300981230, -0.972163122262915790, -0.972151405794442480, -0.972139686895590720, -0.972127965566389700, -0.972116241806868730, -0.972104515617057240, +-0.972092786996984430, -0.972081055946679710, -0.972069322466172170, -0.972057586555491460, -0.972045848214666770, -0.972034107443727420, -0.972022364242702940, -0.972010618611622410, +-0.971998870550515370, -0.971987120059411120, -0.971975367138339100, -0.971963611787328710, -0.971951854006409270, -0.971940093795610080, -0.971928331154960800, -0.971916566084490620, +-0.971904798584229070, -0.971893028654205460, -0.971881256294449440, -0.971869481504990080, -0.971857704285857160, -0.971845924637079860, -0.971834142558687830, -0.971822358050710380, +-0.971810571113177040, -0.971798781746117330, -0.971786989949560700, -0.971775195723536540, -0.971763399068074300, -0.971751599983203710, -0.971739798468954090, -0.971727994525354970, +-0.971716188152435770, -0.971704379350226240, -0.971692568118755710, -0.971680754458053690, -0.971668938368149830, -0.971657119849073660, -0.971645298900854600, -0.971633475523522420, +-0.971621649717106520, -0.971609821481636440, -0.971597990817141820, -0.971586157723652200, -0.971574322201197330, -0.971562484249806510, -0.971550643869509510, -0.971538801060335850, +-0.971526955822315300, -0.971515108155477260, -0.971503258059851600, -0.971491405535467640, -0.971479550582355240, -0.971467693200543940, -0.971455833390063360, -0.971443971150943280, +-0.971432106483213210, -0.971420239386902920, -0.971408369862042040, -0.971396497908660230, -0.971384623526787120, -0.971372746716452460, -0.971360867477686020, -0.971348985810517320, +-0.971337101714976230, -0.971325215191092380, -0.971313326238895440, -0.971301434858415250, -0.971289541049681350, -0.971277644812723720, -0.971265746147571880, -0.971253845054255830, +-0.971241941532804960, -0.971230035583249380, -0.971218127205618620, -0.971206216399942650, -0.971194303166251100, -0.971182387504573750, -0.971170469414940450, -0.971158548897381070, +-0.971146625951925250, -0.971134700578602850, -0.971122772777443630, -0.971110842548477570, -0.971098909891734420, -0.971086974807243930, -0.971075037295036080, -0.971063097355140510, +-0.971051154987587320, -0.971039210192406130, -0.971027262969627050, -0.971015313319279700, -0.971003361241394190, -0.970991406736000150, -0.970979449803127670, -0.970967490442806500, +-0.970955528655066740, -0.970943564439938010, -0.970931597797450530, -0.970919628727633930, -0.970907657230518310, -0.970895683306133410, -0.970883706954509430, -0.970871728175676240, +-0.970859746969663600, -0.970847763336501690, -0.970835777276220280, -0.970823788788849450, -0.970811797874419180, -0.970799804532959440, -0.970787808764500100, -0.970775810569071360, +-0.970763809946703080, -0.970751806897425240, -0.970739801421267810, -0.970727793518261000, -0.970715783188434540, -0.970703770431818770, -0.970691755248443530, -0.970679737638338920, +-0.970667717601534920, -0.970655695138061710, -0.970643670247949180, -0.970631642931227500, -0.970619613187926780, -0.970607581018076870, -0.970595546421708200, -0.970583509398850520, +-0.970571469949534140, -0.970559428073789030, -0.970547383771645400, -0.970535337043133330, -0.970523287888282900, -0.970511236307124210, -0.970499182299687460, -0.970487125866002720, +-0.970475067006100200, -0.970463005720009990, -0.970450942007762270, -0.970438875869387260, -0.970426807304915040, -0.970414736314375690, -0.970402662897799640, -0.970390587055216860, +-0.970378508786657550, -0.970366428092152120, -0.970354344971730450, -0.970342259425423070, -0.970330171453259950, -0.970318081055271510, -0.970305988231487730, -0.970293892981939130, +-0.970281795306655590, -0.970269695205667750, -0.970257592679005580, -0.970245487726699500, -0.970233380348779590, -0.970221270545276400, -0.970209158316219900, -0.970197043661640500, +-0.970184926581568520, -0.970172807076034260, -0.970160685145067920, -0.970148560788699930, -0.970136434006960480, -0.970124304799879990, -0.970112173167488770, -0.970100039109817010, +-0.970087902626895260, -0.970075763718753700, -0.970063622385422760, -0.970051478626932750, -0.970039332443313970, -0.970027183834596960, -0.970015032800811920, -0.970002879341989370, +-0.969990723458159620, -0.969978565149352990, -0.969966404415600000, -0.969954241256930970, -0.969942075673376420, -0.969929907664966560, -0.969917737231732020, -0.969905564373703120, +-0.969893389090910270, -0.969881211383384010, -0.969869031251154650, -0.969856848694252700, -0.969844663712708720, -0.969832476306553000, -0.969820286475816080, -0.969808094220528600, +-0.969795899540720760, -0.969783702436423200, -0.969771502907666340, -0.969759300954480820, -0.969747096576896950, -0.969734889774945370, -0.969722680548656510, -0.969710468898061120, +-0.969698254823189390, -0.969686038324072070, -0.969673819400739600, -0.969661598053222720, -0.969649374281551730, -0.969637148085757290, -0.969624919465870150, -0.969612688421920500, +-0.969600454953939320, -0.969588219061956910, -0.969575980746003930, -0.969563740006111010, -0.969551496842308790, -0.969539251254627700, -0.969527003243098710, -0.969514752807752010, +-0.969502499948618480, -0.969490244665728750, -0.969477986959113360, -0.969465726828802940, -0.969453464274828370, -0.969441199297220060, -0.969428931896008760, -0.969416662071225010, +-0.969404389822899780, -0.969392115151063490, -0.969379838055746900, -0.969367558536980760, -0.969355276594795700, -0.969342992229222490, -0.969330705440291760, -0.969318416228034270, +-0.969306124592480670, -0.969293830533661920, -0.969281534051608440, -0.969269235146351220, -0.969256933817920880, -0.969244630066348200, -0.969232323891664030, -0.969220015293898900, +-0.969207704273083780, -0.969195390829249550, -0.969183074962426620, -0.969170756672646180, -0.969158435959938780, -0.969146112824335160, -0.969133787265866410, -0.969121459284563170, +-0.969109128880456310, -0.969096796053576570, -0.969084460803954940, -0.969072123131622050, -0.969059783036608890, -0.969047440518946200, -0.969035095578665070, -0.969022748215796040, +-0.969010398430370290, -0.968998046222418470, -0.968985691591971570, -0.968973334539060320, -0.968960975063715810, -0.968948613165968920, -0.968936248845850390, -0.968923882103391310, +-0.968911512938622430, -0.968899141351574960, -0.968886767342279520, -0.968874390910767100, -0.968862012057068790, -0.968849630781215440, -0.968837247083238040, -0.968824860963167440, +-0.968812472421034740, -0.968800081456870910, -0.968787688070706810, -0.968775292262573530, -0.968762894032501930, -0.968750493380523210, -0.968738090306668130, -0.968725684810967990, +-0.968713276893453430, -0.968700866554155880, -0.968688453793106090, -0.968676038610335130, -0.968663621005874110, -0.968651200979753990, -0.968638778532005970, -0.968626353662660920, +-0.968613926371750030, -0.968601496659304280, -0.968589064525354760, -0.968576629969932660, -0.968564192993068950, -0.968551753594794730, -0.968539311775141190, -0.968526867534139300, +-0.968514420871820380, -0.968501971788215290, -0.968489520283355220, -0.968477066357271490, -0.968464610009994950, -0.968452151241557040, -0.968439690051988710, -0.968427226441321070, +-0.968414760409585410, -0.968402291956812820, -0.968389821083034510, -0.968377347788281660, -0.968364872072585480, -0.968352393935977160, -0.968339913378487680, -0.968327430400148570, +-0.968314945000990800, -0.968302457181045790, -0.968289966940344530, -0.968277474278918420, -0.968264979196798550, -0.968252481694016230, -0.968239981770602780, -0.968227479426589380, +-0.968214974662007230, -0.968202467476887650, -0.968189957871261830, -0.968177445845161300, -0.968164931398616920, -0.968152414531660340, -0.968139895244322760, -0.968127373536635360, +-0.968114849408629690, -0.968102322860336710, -0.968089793891788060, -0.968077262503014730, -0.968064728694048470, -0.968052192464920250, -0.968039653815661590, -0.968027112746303820, +-0.968014569256878230, -0.968002023347416250, -0.967989475017949190, -0.967976924268508450, -0.967964371099125480, -0.967951815509831450, -0.967939257500657900, -0.967926697071636260, +-0.967914134222797820, -0.967901568954174120, -0.967889001265796470, -0.967876431157696280, -0.967863858629904980, -0.967851283682454210, -0.967838706315375050, -0.967826126528699260, +-0.967813544322458030, -0.967800959696683010, -0.967788372651405490, -0.967775783186657250, -0.967763191302469350, -0.967750596998873560, -0.967738000275901290, -0.967725401133583960, +-0.967712799571953220, -0.967700195591040370, -0.967687589190877160, -0.967674980371494910, -0.967662369132925140, -0.967649755475199490, -0.967637139398349500, -0.967624520902406580, +-0.967611899987402490, -0.967599276653368530, -0.967586650900336460, -0.967574022728337700, -0.967561392137404000, -0.967548759127566660, -0.967536123698857550, -0.967523485851307980, +-0.967510845584949820, -0.967498202899814470, -0.967485557795933700, -0.967472910273339040, -0.967460260332062120, -0.967447607972134360, -0.967434953193587740, -0.967422295996453680, +-0.967409636380763940, -0.967396974346550140, -0.967384309893843830, -0.967371643022676750, -0.967358973733080550, -0.967346302025086980, -0.967333627898727570, -0.967320951354034180, +-0.967308272391038340, -0.967295591009771800, -0.967282907210266330, -0.967270220992553660, -0.967257532356665340, -0.967244841302633220, -0.967232147830488940, -0.967219451940264370, +-0.967206753631991160, -0.967194052905701150, -0.967181349761425890, -0.967168644199197240, -0.967155936219047050, -0.967143225821006870, -0.967130513005108880, -0.967117797771384400, +-0.967105080119865510, -0.967092360050583850, -0.967079637563571400, -0.967066912658859800, -0.967054185336480910, -0.967041455596466590, -0.967028723438848600, -0.967015988863658800, +-0.967003251870929060, -0.966990512460691230, -0.966977770632977070, -0.966965026387818450, -0.966952279725247330, -0.966939530645295480, -0.966926779147994740, -0.966914025233377110, +-0.966901268901474430, -0.966888510152318580, -0.966875748985941420, -0.966862985402374920, -0.966850219401650950, -0.966837450983801470, -0.966824680148858250, -0.966811906896853480, +-0.966799131227818800, -0.966786353141786400, -0.966773572638788050, -0.966760789718855820, -0.966748004382021580, -0.966735216628317300, -0.966722426457775060, -0.966709633870426740, +-0.966696838866304200, -0.966684041445439730, -0.966671241607865110, -0.966658439353612400, -0.966645634682713580, -0.966632827595200640, -0.966620018091105650, -0.966607206170460590, +-0.966594391833297540, -0.966581575079648480, -0.966568755909545610, -0.966555934323020670, -0.966543110320105980, -0.966530283900833510, -0.966517455065235340, -0.966504623813343570, +-0.966491790145190270, -0.966478954060807420, -0.966466115560227210, -0.966453274643481630, -0.966440431310602980, -0.966427585561623110, -0.966414737396574460, -0.966401886815488780, +-0.966389033818398580, -0.966376178405335630, -0.966363320576332230, -0.966350460331420690, -0.966337597670632880, -0.966324732594001090, -0.966311865101557420, -0.966298995193334180, +-0.966286122869363440, -0.966273248129677410, -0.966260370974308170, -0.966247491403288140, -0.966234609416649180, -0.966221725014423940, -0.966208838196644160, -0.966195948963342490, +-0.966183057314550790, -0.966170163250301580, -0.966157266770626850, -0.966144367875559020, -0.966131466565130160, -0.966118562839372810, -0.966105656698318940, -0.966092748142000860, +-0.966079837170451090, -0.966066923783701510, -0.966054007981784870, -0.966041089764733020, -0.966028169132578500, -0.966015246085353610, -0.966002320623090550, -0.965989392745821740, +-0.965976462453579380, -0.965963529746395880, -0.965950594624303660, -0.965937657087334810, -0.965924717135521860, -0.965911774768897110, -0.965898829987492990, -0.965885882791341800, +-0.965872933180475850, -0.965859981154927550, -0.965847026714729330, -0.965834069859913490, -0.965821110590512570, -0.965808148906558860, -0.965795184808084680, -0.965782218295122670, +-0.965769249367705030, -0.965756278025864280, -0.965743304269632840, -0.965730328099043130, -0.965717349514127580, -0.965704368514918700, -0.965691385101448920, -0.965678399273750650, +-0.965665411031856320, -0.965652420375798570, -0.965639427305609700, -0.965626431821322240, -0.965613433922968720, -0.965600433610581680, -0.965587430884193520, -0.965574425743836780, +-0.965561418189544000, -0.965548408221347580, -0.965535395839280270, -0.965522381043374400, -0.965509363833662590, -0.965496344210177380, -0.965483322172951300, -0.965470297722016870, +-0.965457270857406740, -0.965444241579153430, -0.965431209887289590, -0.965418175781847630, -0.965405139262860200, -0.965392100330359940, -0.965379058984379590, -0.965366015224951360, +-0.965352969052108320, -0.965339920465882680, -0.965326869466307300, -0.965313816053414710, -0.965300760227237650, -0.965287701987808670, -0.965274641335160390, -0.965261578269325570, +-0.965248512790336740, -0.965235444898226660, -0.965222374593027950, -0.965209301874773380, -0.965196226743495480, -0.965183149199227100, -0.965170069242000770, -0.965156986871849250, +-0.965143902088805290, -0.965130814892901650, -0.965117725284170840, -0.965104633262645840, -0.965091538828359070, -0.965078441981343630, -0.965065342721632020, -0.965052241049257020, +-0.965039136964251590, -0.965026030466648140, -0.965012921556479660, -0.964999810233778900, -0.964986696498578600, -0.964973580350911520, -0.964960461790810630, -0.964947340818308460, +-0.964934217433437990, -0.964921091636231850, -0.964907963426723140, -0.964894832804944480, -0.964881699770928750, -0.964868564324708690, -0.964855426466317280, -0.964842286195787270, +-0.964829143513151630, -0.964815998418443010, -0.964802850911694490, -0.964789700992938810, -0.964776548662208850, -0.964763393919537580, -0.964750236764957750, -0.964737077198502440, +-0.964723915220204290, -0.964710750830096500, -0.964697584028211710, -0.964684414814583110, -0.964671243189243350, -0.964658069152225520, -0.964644892703562460, -0.964631713843287280, +-0.964618532571432710, -0.964605348888031950, -0.964592162793117660, -0.964578974286723010, -0.964565783368880990, -0.964552590039624460, -0.964539394298986390, -0.964526196146999970, +-0.964512995583697960, -0.964499792609113450, -0.964486587223279510, -0.964473379426229130, -0.964460169217995270, -0.964446956598611020, -0.964433741568109350, -0.964420524126523240, +-0.964407304273885990, -0.964394082010230360, -0.964380857335589540, -0.964367630249996610, -0.964354400753484660, -0.964341168846086560, -0.964327934527835720, -0.964314697798764890, +-0.964301458658907370, -0.964288217108296150, -0.964274973146964530, -0.964261726774945260, -0.964248477992271870, -0.964235226798977220, -0.964221973195094510, -0.964208717180656820, +-0.964195458755697340, -0.964182197920249280, -0.964168934674345720, -0.964155669018019750, -0.964142400951304660, -0.964129130474233540, -0.964115857586839600, -0.964102582289156130, +-0.964089304581216110, -0.964076024463052850, -0.964062741934699430, -0.964049456996189270, -0.964036169647555450, -0.964022879888831170, -0.964009587720049630, -0.963996293141244240, +-0.963982996152448090, -0.963969696753694370, -0.963956394945016500, -0.963943090726447680, -0.963929784098021100, -0.963916475059769960, -0.963903163611727790, -0.963889849753927550, +-0.963876533486402790, -0.963863214809186690, -0.963849893722312560, -0.963836570225813590, -0.963823244319723330, -0.963809916004074840, -0.963796585278901660, -0.963783252144236990, +-0.963769916600114240, -0.963756578646566610, -0.963743238283627510, -0.963729895511330370, -0.963716550329708490, -0.963703202738795280, -0.963689852738623950, -0.963676500329228140, +-0.963663145510640920, -0.963649788282895940, -0.963636428646026500, -0.963623066600065910, -0.963609702145047710, -0.963596335281005300, -0.963582966007972000, -0.963569594325981220, +-0.963556220235066490, -0.963542843735261330, -0.963529464826598850, -0.963516083509112890, -0.963502699782836650, -0.963489313647803660, -0.963475925104047450, -0.963462534151601320, +-0.963449140790498930, -0.963435745020773560, -0.963422346842458980, -0.963408946255588480, -0.963395543260195720, -0.963382137856313880, -0.963368730043976940, -0.963355319823217980, +-0.963341907194070870, -0.963328492156568910, -0.963315074710745730, -0.963301654856634770, -0.963288232594269880, -0.963274807923684250, -0.963261380844911640, -0.963247951357985580, +-0.963234519462939700, -0.963221085159807420, -0.963207648448622500, -0.963194209329418350, -0.963180767802228830, -0.963167323867087250, -0.963153877524027480, -0.963140428773082920, +-0.963126977614287340, -0.963113524047674360, -0.963100068073277530, -0.963086609691130580, -0.963073148901266940, -0.963059685703720580, -0.963046220098525030, -0.963032752085713820, +-0.963019281665320800, -0.963005808837379520, -0.962992333601923710, -0.962978855958987130, -0.962965375908603430, -0.962951893450806230, -0.962938408585629290, -0.962924921313106470, +-0.962911431633271200, -0.962897939546157320, -0.962884445051798710, -0.962870948150228890, -0.962857448841481720, -0.962843947125590960, -0.962830443002590350, -0.962816936472513650, +-0.962803427535394500, -0.962789916191266860, -0.962776402440164490, -0.962762886282121030, -0.962749367717170350, -0.962735846745346290, -0.962722323366682620, -0.962708797581213080, +-0.962695269388971540, -0.962681738789991860, -0.962668205784307900, -0.962654670371953290, -0.962641132552962130, -0.962627592327368050, -0.962614049695205030, -0.962600504656506930, +-0.962586957211307490, -0.962573407359640700, -0.962559855101540410, -0.962546300437040480, -0.962532743366174780, -0.962519183888977280, -0.962505622005481730, -0.962492057715722100, +-0.962478491019732370, -0.962464921917546510, -0.962451350409198270, -0.962437776494721620, -0.962424200174150530, -0.962410621447518990, -0.962397040314860840, -0.962383456776210180, +-0.962369870831600750, -0.962356282481066750, -0.962342691724642040, -0.962329098562360490, -0.962315502994256280, -0.962301905020363280, -0.962288304640715570, -0.962274701855347140, +-0.962261096664291830, -0.962247489067583840, -0.962233879065257150, -0.962220266657345720, -0.962206651843883650, -0.962193034624904910, -0.962179415000443680, -0.962165792970533840, +-0.962152168535209570, -0.962138541694504750, -0.962124912448453770, -0.962111280797090300, -0.962097646740448730, -0.962084010278563050, -0.962070371411467340, -0.962056730139195790, +-0.962043086461782270, -0.962029440379261080, -0.962015791891666310, -0.962002140999032030, -0.961988487701392450, -0.961974831998781640, -0.961961173891233700, -0.961947513378782930, +-0.961933850461463290, -0.961920185139308990, -0.961906517412354330, -0.961892847280633290, -0.961879174744180170, -0.961865499803029160, -0.961851822457214340, -0.961838142706769930, +-0.961824460551730210, -0.961810775992129270, -0.961797089028001540, -0.961783399659380980, -0.961769707886302010, -0.961756013708798600, -0.961742317126905280, -0.961728618140656130, +-0.961714916750085580, -0.961701212955227590, -0.961687506756116580, -0.961673798152786750, -0.961660087145272510, -0.961646373733608060, -0.961632657917827700, -0.961618939697965640, +-0.961605219074056270, -0.961591496046133810, -0.961577770614232550, -0.961564042778386920, -0.961550312538631210, -0.961536579894999740, -0.961522844847526810, -0.961509107396246730, +-0.961495367541193910, -0.961481625282402660, -0.961467880619907290, -0.961454133553742320, -0.961440384083941950, -0.961426632210540700, -0.961412877933572770, -0.961399121253072700, +-0.961385362169074780, -0.961371600681613540, -0.961357836790723290, -0.961344070496438440, -0.961330301798793310, -0.961316530697822520, -0.961302757193560400, -0.961288981286041340, +-0.961275202975299890, -0.961261422261370350, -0.961247639144287350, -0.961233853624085200, -0.961220065700798430, -0.961206275374461460, -0.961192482645108930, -0.961178687512775020, +-0.961164889977494500, -0.961151090039301660, -0.961137287698231260, -0.961123482954317490, -0.961109675807595100, -0.961095866258098400, -0.961082054305862240, -0.961068239950920720, +-0.961054423193308800, -0.961040604033060690, -0.961026782470211120, -0.961012958504794510, -0.960999132136845620, -0.960985303366398870, -0.960971472193488770, -0.960957638618150200, +-0.960943802640417340, -0.960929964260325060, -0.960916123477907780, -0.960902280293200350, -0.960888434706237080, -0.960874586717052840, -0.960860736325682030, -0.960846883532159410, +-0.960833028336519620, -0.960819170738797190, -0.960805310739026860, -0.960791448337243280, -0.960777583533481080, -0.960763716327774910, -0.960749846720159400, -0.960735974710669400, +-0.960722100299339350, -0.960708223486203990, -0.960694344271298300, -0.960680462654656560, -0.960666578636313770, -0.960652692216304450, -0.960638803394663450, -0.960624912171425430, +-0.960611018546625120, -0.960597122520297160, -0.960583224092476540, -0.960569323263197880, -0.960555420032495830, -0.960541514400405250, -0.960527606366960880, -0.960513695932197490, +-0.960499783096149920, -0.960485867858852820, -0.960471950220341150, -0.960458030180649460, -0.960444107739812810, -0.960430182897865860, -0.960416255654843450, -0.960402326010780350, +-0.960388393965711520, -0.960374459519671710, -0.960360522672695670, -0.960346583424818380, -0.960332641776074580, -0.960318697726499250, -0.960304751276127020, -0.960290802424993100, +-0.960276851173132110, -0.960262897520579030, -0.960248941467368610, -0.960234983013535940, -0.960221022159115760, -0.960207058904143040, -0.960193093248652540, -0.960179125192679560, +-0.960165154736258520, -0.960151181879424720, -0.960137206622213020, -0.960123228964658180, -0.960109248906795390, -0.960095266448659390, -0.960081281590285270, -0.960067294331707900, +-0.960053304672962350, -0.960039312614083480, -0.960025318155106390, -0.960011321296065920, -0.959997322036997280, -0.959983320377935210, -0.959969316318914910, -0.959955309859971240, +-0.959941301001139390, -0.959927289742454230, -0.959913276083950830, -0.959899260025664280, -0.959885241567629670, -0.959871220709881840, -0.959857197452455900, -0.959843171795387030, +-0.959829143738710310, -0.959815113282460720, -0.959801080426673230, -0.959787045171383140, -0.959773007516625310, -0.959758967462435160, -0.959744925008847450, -0.959730880155897470, +-0.959716832903620310, -0.959702783252051050, -0.959688731201224780, -0.959674676751176790, -0.959660619901941960, -0.959646560653555800, -0.959632499006052960, -0.959618434959469080, +-0.959604368513839010, -0.959590299669198070, -0.959576228425581430, -0.959562154783024090, -0.959548078741561560, -0.959534000301228600, -0.959519919462060830, -0.959505836224093130, +-0.959491750587360910, -0.959477662551899260, -0.959463572117743580, -0.959449479284928850, -0.959435384053490490, -0.959421286423463580, -0.959407186394883540, -0.959393083967785440, +-0.959378979142204710, -0.959364871918176540, -0.959350762295736240, -0.959336650274918880, -0.959322535855759990, -0.959308419038294780, -0.959294299822558430, -0.959280178208586460, +-0.959266054196413860, -0.959251927786076260, -0.959237798977608860, -0.959223667771046950, -0.959209534166425850, -0.959195398163780850, -0.959181259763147390, -0.959167118964560860, +-0.959152975768056470, -0.959138830173669740, -0.959124682181435760, -0.959110531791390160, -0.959096379003568260, -0.959082223818005450, -0.959068066234736950, -0.959053906253798380, +-0.959039743875224950, -0.959025579099052280, -0.959011411925315580, -0.958997242354050370, -0.958983070385292070, -0.958968896019076090, -0.958954719255437850, -0.958940540094412870, +-0.958926358536036470, -0.958912174580344170, -0.958897988227371600, -0.958883799477153850, -0.958869608329726670, -0.958855414785125480, -0.958841218843385800, -0.958827020504543050, +-0.958812819768632750, -0.958798616635690330, -0.958784411105751410, -0.958770203178851420, -0.958755992855026110, -0.958741780134310550, -0.958727565016740720, -0.958713347502351930, +-0.958699127591179700, -0.958684905283259780, -0.958670680578627590, -0.958656453477318650, -0.958642223979368490, -0.958627992084812970, -0.958613757793687290, -0.958599521106027310, +-0.958585282021868430, -0.958571040541246530, -0.958556796664196800, -0.958542550390755310, -0.958528301720957270, -0.958514050654838520, -0.958499797192434720, -0.958485541333781390, +-0.958471283078914160, -0.958457022427868790, -0.958442759380680690, -0.958428493937385830, -0.958414226098019740, -0.958399955862618060, -0.958385683231216530, -0.958371408203850810, +-0.958357130780556510, -0.958342850961369400, -0.958328568746325220, -0.958314284135459490, -0.958299997128808200, -0.958285707726406750, -0.958271415928291130, -0.958257121734496950, +-0.958242825145059980, -0.958228526160015970, -0.958214224779400660, -0.958199921003249690, -0.958185614831599030, -0.958171306264484210, -0.958156995301941210, -0.958142681944005760, +-0.958128366190713510, -0.958114048042100430, -0.958099727498202160, -0.958085404559054670, -0.958071079224693480, -0.958056751495154790, -0.958042421370474130, -0.958028088850687460, +-0.958013753935830550, -0.957999416625939240, -0.957985076921049390, -0.957970734821196880, -0.957956390326417440, -0.957942043436747160, -0.957927694152221680, -0.957913342472876960, +-0.957898988398748870, -0.957884631929873390, -0.957870273066286250, -0.957855911808023430, -0.957841548155121010, -0.957827182107614530, -0.957812813665540160, -0.957798442828933670, +-0.957784069597831240, -0.957769693972268520, -0.957755315952281580, -0.957740935537906290, -0.957726552729178840, -0.957712167526134860, -0.957697779928810560, -0.957683389937241670, +-0.957668997551464400, -0.957654602771514600, -0.957640205597428350, -0.957625806029241520, -0.957611404066990300, -0.957596999710710440, -0.957582592960438130, -0.957568183816209340, +-0.957553772278060040, -0.957539358346026330, -0.957524942020144270, -0.957510523300449830, -0.957496102186979000, -0.957481678679768080, -0.957467252778852810, -0.957452824484269490, +-0.957438393796054110, -0.957423960714242740, -0.957409525238871460, -0.957395087369976470, -0.957380647107593630, -0.957366204451759240, -0.957351759402509270, -0.957337311959879920, +-0.957322862123907270, -0.957308409894627510, -0.957293955272076720, -0.957279498256290990, -0.957265038847306630, -0.957250577045159590, -0.957236112849886190, -0.957221646261522400, +-0.957207177280104520, -0.957192705905668740, -0.957178232138251150, -0.957163755977888050, -0.957149277424615530, -0.957134796478469770, -0.957120313139487090, -0.957105827407703560, +-0.957091339283155480, -0.957076848765879060, -0.957062355855910600, -0.957047860553286060, -0.957033362858042080, -0.957018862770214530, -0.957004360289839930, -0.956989855416954360, +-0.956975348151594130, -0.956960838493795650, -0.956946326443594900, -0.956931812001028500, -0.956917295166132440, -0.956902775938943240, -0.956888254319497090, -0.956873730307830290, +-0.956859203903979160, -0.956844675107980100, -0.956830143919869200, -0.956815610339683100, -0.956801074367457760, -0.956786536003229940, -0.956771995247035710, -0.956757452098911500, +-0.956742906558893600, -0.956728358627018550, -0.956713808303322530, -0.956699255587841970, -0.956684700480613270, -0.956670142981672860, -0.956655583091057030, -0.956641020808802310, +-0.956626456134945010, -0.956611889069521550, -0.956597319612568440, -0.956582747764122000, -0.956568173524218750, -0.956553596892894880, -0.956539017870187250, -0.956524436456131940, +-0.956509852650765600, -0.956495266454124530, -0.956480677866245350, -0.956466086887164500, -0.956451493516918380, -0.956436897755543520, -0.956422299603076560, -0.956407699059553700, +-0.956393096125011550, -0.956378490799486890, -0.956363883083015790, -0.956349272975635100, -0.956334660477381140, -0.956320045588290650, -0.956305428308399930, -0.956290808637745740, +-0.956276186576364370, -0.956261562124292700, -0.956246935281567010, -0.956232306048224070, -0.956217674424300280, -0.956203040409832390, -0.956188404004856830, -0.956173765209410330, +-0.956159124023529320, -0.956144480447250640, -0.956129834480610620, -0.956115186123646100, -0.956100535376393610, -0.956085882238889680, -0.956071226711171170, -0.956056568793274500, +-0.956041908485236510, -0.956027245787093640, -0.956012580698882840, -0.955997913220640430, -0.955983243352403260, -0.955968571094207960, -0.955953896446091300, -0.955939219408089790, +-0.955924539980240410, -0.955909858162579450, -0.955895173955144010, -0.955880487357970600, -0.955865798371095980, -0.955851106994556890, -0.955836413228389970, -0.955821717072631970, +-0.955807018527319750, -0.955792317592490060, -0.955777614268179420, -0.955762908554424920, -0.955748200451262960, -0.955733489958730640, -0.955718777076864590, -0.955704061805701550, +-0.955689344145278400, -0.955674624095631860, -0.955659901656798700, -0.955645176828815890, -0.955630449611720060, -0.955615720005548170, -0.955600988010336880, -0.955586253626123260, +-0.955571516852943840, -0.955556777690835800, -0.955542036139835680, -0.955527292199980560, -0.955512545871307180, -0.955497797153852410, -0.955483046047653220, -0.955468292552746350, +-0.955453536669168770, -0.955438778396957340, -0.955424017736148930, -0.955409254686780510, -0.955394489248889030, -0.955379721422511260, -0.955364951207684170, -0.955350178604444710, +-0.955335403612829760, -0.955320626232876390, -0.955305846464621470, -0.955291064308101840, -0.955276279763354610, -0.955261492830416610, -0.955246703509324950, -0.955231911800116460, +-0.955217117702828240, -0.955202321217497260, -0.955187522344160490, -0.955172721082854890, -0.955157917433617440, -0.955143111396485220, -0.955128302971495200, -0.955113492158684460, +-0.955098678958089970, -0.955083863369748820, -0.955069045393697970, -0.955054225029974500, -0.955039402278615500, -0.955024577139658050, -0.955009749613139000, -0.954994919699095780, +-0.954980087397565120, -0.954965252708584230, -0.954950415632190300, -0.954935576168420290, -0.954920734317311280, -0.954905890078900480, -0.954891043453224950, -0.954876194440321790, +-0.954861343040228290, -0.954846489252981320, -0.954831633078618070, -0.954816774517175840, -0.954801913568691600, -0.954787050233202650, -0.954772184510746080, -0.954757316401358970, +-0.954742445905078620, -0.954727573021942110, -0.954712697751986750, -0.954697820095249510, -0.954682940051767790, -0.954668057621578800, -0.954653172804719620, -0.954638285601227430, +-0.954623396011139550, -0.954608504034493270, -0.954593609671325670, -0.954578712921674070, -0.954563813785575640, -0.954548912263067710, -0.954534008354187450, -0.954519102058972280, +-0.954504193377459290, -0.954489282309685770, -0.954474368855689040, -0.954459453015506500, -0.954444534789175240, -0.954429614176732780, -0.954414691178216090, -0.954399765793662810, +-0.954384838023110030, -0.954369907866595260, -0.954354975324155590, -0.954340040395828540, -0.954325103081651420, -0.954310163381661410, -0.954295221295896170, -0.954280276824392760, +-0.954265329967188710, -0.954250380724321330, -0.954235429095828040, -0.954220475081746120, -0.954205518682113010, -0.954190559896966110, -0.954175598726342940, -0.954160635170280600, +-0.954145669228816720, -0.954130700901988700, -0.954115730189833870, -0.954100757092389730, -0.954085781609693820, -0.954070803741783320, -0.954055823488695890, -0.954040840850468810, +-0.954025855827139610, -0.954010868418745830, -0.953995878625324870, -0.953980886446914260, -0.953965891883551410, -0.953950894935273850, -0.953935895602119000, -0.953920893884124490, +-0.953905889781327620, -0.953890883293766150, -0.953875874421477370, -0.953860863164499030, -0.953845849522868440, -0.953830833496623230, -0.953815815085800930, -0.953800794290439180, +-0.953785771110575390, -0.953770745546247190, -0.953755717597492000, -0.953740687264347690, -0.953725654546851540, -0.953710619445041320, -0.953695581958954540, -0.953680542088628850, +-0.953665499834101760, -0.953650455195410810, -0.953635408172593960, -0.953620358765688400, -0.953605306974732000, -0.953590252799762280, -0.953575196240817100, -0.953560137297933760, +-0.953545075971150120, -0.953530012260503820, -0.953514946166032500, -0.953499877687773780, -0.953484806825765420, -0.953469733580044940, -0.953454657950650210, -0.953439579937618740, +-0.953424499540988510, -0.953409416760796820, -0.953394331597081650, -0.953379244049880730, -0.953364154119231590, -0.953349061805172200, -0.953333967107740100, -0.953318870026973020, +-0.953303770562908830, -0.953288668715585260, -0.953273564485039860, -0.953258457871310690, -0.953243348874435290, -0.953228237494451620, -0.953213123731397220, -0.953198007585310150, +-0.953182889056227940, -0.953167768144188690, -0.953152644849229790, -0.953137519171389450, -0.953122391110705180, -0.953107260667214960, -0.953092127840956760, -0.953076992631967990, +-0.953061855040286950, -0.953046715065951180, -0.953031572708998630, -0.953016427969467060, -0.953001280847394550, -0.952986131342818730, -0.952970979455777690, -0.952955825186309170, +-0.952940668534451140, -0.952925509500241350, -0.952910348083717770, -0.952895184284918370, -0.952880018103881010, -0.952864849540643540, -0.952849678595244050, -0.952834505267720290, +-0.952819329558110330, -0.952804151466452030, -0.952788970992783260, -0.952773788137142200, -0.952758602899566490, -0.952743415280094430, -0.952728225278763770, -0.952713032895612600, +-0.952697838130678760, -0.952682640984000460, -0.952667441455615440, -0.952652239545561890, -0.952637035253877660, -0.952621828580600960, -0.952606619525769640, -0.952591408089421780, +-0.952576194271595340, -0.952560978072328420, -0.952545759491659090, -0.952530538529625330, -0.952515315186265200, -0.952500089461616790, -0.952484861355718300, -0.952469630868607480, +-0.952454398000322720, -0.952439162750901900, -0.952423925120383210, -0.952408685108804610, -0.952393442716204410, -0.952378197942620460, -0.952362950788091190, -0.952347701252654440, +-0.952332449336348530, -0.952317195039211310, -0.952301938361281300, -0.952286679302596360, -0.952271417863194690, -0.952256154043114480, -0.952240887842394020, -0.952225619261071190, +-0.952210348299184380, -0.952195074956771690, -0.952179799233871300, -0.952164521130521410, -0.952149240646760210, -0.952133957782625990, -0.952118672538156740, -0.952103384913390860, +-0.952088094908366540, -0.952072802523121990, -0.952057507757695380, -0.952042210612125130, -0.952026911086449210, -0.952011609180706150, -0.951996304894933920, -0.951980998229171040, +-0.951965689183455590, -0.951950377757825980, -0.951935063952320410, -0.951919747766977190, -0.951904429201834600, -0.951889108256930850, -0.951873784932304460, -0.951858459227993500, +-0.951843131144036400, -0.951827800680471460, -0.951812467837337190, -0.951797132614671580, -0.951781795012513250, -0.951766455030900290, -0.951751112669871340, -0.951735767929464460, +-0.951720420809718300, -0.951705071310671060, -0.951689719432361140, -0.951674365174826840, -0.951659008538106700, -0.951643649522239010, -0.951628288127262190, -0.951612924353214650, +-0.951597558200134920, -0.951582189668061070, -0.951566818757031860, -0.951551445467085700, -0.951536069798260780, -0.951520691750595840, -0.951505311324128970, -0.951489928518899020, +-0.951474543334944080, -0.951459155772302890, -0.951443765831013750, -0.951428373511115310, -0.951412978812645750, -0.951397581735643930, -0.951382182280148040, -0.951366780446196820, +-0.951351376233828480, -0.951335969643081870, -0.951320560673995170, -0.951305149326607150, -0.951289735600956200, -0.951274319497081080, -0.951258901015019980, -0.951243480154811640, +-0.951228056916494700, -0.951212631300107580, -0.951197203305688910, -0.951181772933277100, -0.951166340182911020, -0.951150905054628960, -0.951135467548469780, -0.951120027664471790, +-0.951104585402673840, -0.951089140763114350, -0.951073693745832060, -0.951058244350865500, -0.951042792578253420, -0.951027338428034220, -0.951011881900246770, -0.950996422994929590, +-0.950980961712121320, -0.950965498051860700, -0.950950032014186260, -0.950934563599136860, -0.950919092806750910, -0.950903619637067380, -0.950888144090124680, -0.950872666165961670, +-0.950857185864616980, -0.950841703186129370, -0.950826218130537360, -0.950810730697880020, -0.950795240888195670, -0.950779748701523380, -0.950764254137901550, -0.950748757197369180, +-0.950733257879964880, -0.950717756185727510, -0.950702252114695720, -0.950686745666908250, -0.950671236842403950, -0.950655725641221580, -0.950640212063399880, -0.950624696108977600, +-0.950609177777993590, -0.950593657070486710, -0.950578133986495600, -0.950562608526059230, -0.950547080689216340, -0.950531550476005680, -0.950516017886466220, -0.950500482920636600, +-0.950484945578555900, -0.950469405860262740, -0.950453863765796210, -0.950438319295194840, -0.950422772448497820, -0.950407223225743780, -0.950391671626971690, -0.950376117652220410, +-0.950360561301528910, -0.950345002574935930, -0.950329441472480440, -0.950313877994201420, -0.950298312140137710, -0.950282743910328190, -0.950267173304811810, -0.950251600323627540, +-0.950236024966814140, -0.950220447234410790, -0.950204867126456240, -0.950189284642989570, -0.950173699784049750, -0.950158112549675640, -0.950142522939906200, -0.950126930954780510, +-0.950111336594337440, -0.950095739858616060, -0.950080140747655340, -0.950064539261494260, -0.950048935400171770, -0.950033329163727070, -0.950017720552198910, -0.950002109565626470, +-0.949986496204048850, -0.949970880467505000, -0.949955262356033890, -0.949939641869674610, -0.949924019008466240, -0.949908393772447850, -0.949892766161658410, -0.949877136176137120, +-0.949861503815922940, -0.949845869081055060, -0.949830231971572460, -0.949814592487514320, -0.949798950628919720, -0.949783306395827640, -0.949767659788277370, -0.949752010806307890, +-0.949736359449958490, -0.949720705719268140, -0.949705049614275930, -0.949689391135021270, -0.949673730281543000, -0.949658067053880450, -0.949642401452072680, -0.949626733476159000, +-0.949611063126178490, -0.949595390402170230, -0.949579715304173510, -0.949564037832227650, -0.949548357986371490, -0.949532675766644570, -0.949516991173085860, -0.949501304205734860, +-0.949485614864630350, -0.949469923149812050, -0.949454229061318710, -0.949438532599189980, -0.949422833763464810, -0.949407132554182630, -0.949391428971382510, -0.949375723015103870, +-0.949360014685386000, -0.949344303982267990, -0.949328590905789360, -0.949312875455989080, -0.949297157632906670, -0.949281437436581440, -0.949265714867052580, -0.949249989924359380, +-0.949234262608541270, -0.949218532919637430, -0.949202800857687380, -0.949187066422730210, -0.949171329614805440, -0.949155590433952260, -0.949139848880210190, -0.949124104953618430, +-0.949108358654216500, -0.949092609982043590, -0.949076858937139220, -0.949061105519542700, -0.949045349729293330, -0.949029591566430740, -0.949013831030994020, -0.948998068123022790, +-0.948982302842556360, -0.948966535189634250, -0.948950765164295770, -0.948934992766580330, -0.948919217996527450, -0.948903440854176550, -0.948887661339566920, -0.948871879452738320, +-0.948856095193729930, -0.948840308562581280, -0.948824519559331890, -0.948808728184021180, -0.948792934436688660, -0.948777138317373870, -0.948761339826116100, -0.948745538962954990, +-0.948729735727930180, -0.948713930121080850, -0.948698122142446860, -0.948682311792067520, -0.948666499069982350, -0.948650683976230980, -0.948634866510852940, -0.948619046673887630, +-0.948603224465374820, -0.948587399885353790, -0.948571572933864400, -0.948555743610945970, -0.948539911916638330, -0.948524077850980700, -0.948508241414013130, -0.948492402605774720, +-0.948476561426305430, -0.948460717875644680, -0.948444871953832200, -0.948429023660907530, -0.948413172996910190, -0.948397319961880040, -0.948381464555856590, -0.948365606778879490, +-0.948349746630988260, -0.948333884112222750, -0.948318019222622490, -0.948302151962227340, -0.948286282331076590, -0.948270410329210220, -0.948254535956667870, -0.948238659213489150, +-0.948222780099713720, -0.948206898615381430, -0.948191014760531800, -0.948175128535204800, -0.948159239939439850, -0.948143348973276790, -0.948127455636755380, -0.948111559929915360, +-0.948095661852796370, -0.948079761405438260, -0.948063858587880780, -0.948047953400163680, -0.948032045842326700, -0.948016135914409470, -0.948000223616452090, -0.947984308948493950, +-0.947968391910575250, -0.947952472502735400, -0.947936550725014480, -0.947920626577452020, -0.947904700060088200, -0.947888771172962440, -0.947872839916114930, -0.947856906289585190, +-0.947840970293413300, -0.947825031927638890, -0.947809091192301940, -0.947793148087442190, -0.947777202613099610, -0.947761254769314170, -0.947745304556125380, -0.947729351973573440, +-0.947713397021698100, -0.947697439700539320, -0.947681480010136860, -0.947665517950530780, -0.947649553521760830, -0.947633586723866990, -0.947617617556889220, -0.947601646020867490, +-0.947585672115841550, -0.947569695841851470, -0.947553717198937000, -0.947537736187138440, -0.947521752806495420, -0.947505767057048140, -0.947489778938836240, -0.947473788451900110, +-0.947457795596279410, -0.947441800372014090, -0.947425802779144450, -0.947409802817710260, -0.947393800487751570, -0.947377795789308360, -0.947361788722420720, -0.947345779287128490, +-0.947329767483471970, -0.947313753311490920, -0.947297736771225530, -0.947281717862715760, -0.947265696586001680, -0.947249672941123390, -0.947233646928120950, -0.947217618547034350, +-0.947201587797903750, -0.947185554680769150, -0.947169519195670720, -0.947153481342648320, -0.947137441121742360, -0.947121398532992820, -0.947105353576439660, -0.947089306252123290, +-0.947073256560083450, -0.947057204500360680, -0.947041150072994720, -0.947025093278025980, -0.947009034115494530, -0.946992972585440460, -0.946976908687903850, -0.946960842422925110, +-0.946944773790544200, -0.946928702790801440, -0.946912629423736880, -0.946896553689390740, -0.946880475587803190, -0.946864395119014430, -0.946848312283064760, -0.946832227079994260, +-0.946816139509843220, -0.946800049572651740, -0.946783957268460320, -0.946767862597308830, -0.946751765559237790, -0.946735666154287280, -0.946719564382497600, -0.946703460243909060, +-0.946687353738561830, -0.946671244866496230, -0.946655133627752550, -0.946639020022370990, -0.946622904050391960, -0.946606785711855530, -0.946590665006802220, -0.946574541935272240, +-0.946558416497305990, -0.946542288692943550, -0.946526158522225550, -0.946510025985191960, -0.946493891081883420, -0.946477753812340120, -0.946461614176602460, -0.946445472174710760, +-0.946429327806705410, -0.946413181072626730, -0.946397031972515010, -0.946380880506410780, -0.946364726674354340, -0.946348570476386100, -0.946332411912546470, -0.946316250982875750, +-0.946300087687414360, -0.946283922026202930, -0.946267753999281540, -0.946251583606690820, -0.946235410848471070, -0.946219235724662930, -0.946203058235306590, -0.946186878380442580, +-0.946170696160111400, -0.946154511574353490, -0.946138324623209350, -0.946122135306719400, -0.946105943624924060, -0.946089749577863850, -0.946073553165579400, -0.946057354388110890, +-0.946041153245499090, -0.946024949737784390, -0.946008743865007330, -0.945992535627208310, -0.945976325024428080, -0.945960112056706940, -0.945943896724085630, -0.945927679026604570, +-0.945911458964304290, -0.945895236537225290, -0.945879011745408230, -0.945862784588893610, -0.945846555067722080, -0.945830323181934160, -0.945814088931570480, -0.945797852316671570, +-0.945781613337277950, -0.945765371993430360, -0.945749128285169330, -0.945732882212535490, -0.945716633775569360, -0.945700382974311690, -0.945684129808803120, -0.945667874279084160, +-0.945651616385195570, -0.945635356127177970, -0.945619093505071890, -0.945602828518918080, -0.945586561168757280, -0.945570291454630010, -0.945554019376577020, -0.945537744934639050, +-0.945521468128856620, -0.945505188959270490, -0.945488907425921510, -0.945472623528850200, -0.945456337268097300, -0.945440048643703570, -0.945423757655709850, -0.945407464304156560, +-0.945391168589084670, -0.945374870510534930, -0.945358570068547950, -0.945342267263164500, -0.945325962094425540, -0.945309654562371480, -0.945293344667043400, -0.945277032408481930, +-0.945260717786727930, -0.945244400801822040, -0.945228081453805210, -0.945211759742718090, -0.945195435668601760, -0.945179109231496620, -0.945162780431443860, -0.945146449268484120, +-0.945130115742658150, -0.945113779854007020, -0.945097441602571360, -0.945081100988392260, -0.945064758011510240, -0.945048412671966380, -0.945032064969801410, -0.945015714905056430, +-0.944999362477772050, -0.944983007687989370, -0.944966650535749020, -0.944950291021092180, -0.944933929144059490, -0.944917564904692140, -0.944901198303030650, -0.944884829339116330, +-0.944868458012989910, -0.944852084324692250, -0.944835708274264550, -0.944819329861747440, -0.944802949087182100, -0.944786565950609390, -0.944770180452070170, -0.944753792591605520, +-0.944737402369256520, -0.944721009785063900, -0.944704614839068760, -0.944688217531312050, -0.944671817861834960, -0.944655415830678140, -0.944639011437882870, -0.944622604683490020, +-0.944606195567540770, -0.944589784090075880, -0.944573370251136630, -0.944556954050763900, -0.944540535488998860, -0.944524114565882480, -0.944507691281455730, -0.944491265635759800, +-0.944474837628835660, -0.944458407260724500, -0.944441974531467280, -0.944425539441105190, -0.944409101989679090, -0.944392662177230390, -0.944376220003799950, -0.944359775469429060, +-0.944343328574158590, -0.944326879318029940, -0.944310427701083980, -0.944293973723361990, -0.944277517384905060, -0.944261058685754380, -0.944244597625951030, -0.944228134205536200, +-0.944211668424551060, -0.944195200283036610, -0.944178729781034340, -0.944162256918585130, -0.944145781695730270, -0.944129304112511060, -0.944112824168968470, -0.944096341865143910, +-0.944079857201078450, -0.944063370176813410, -0.944046880792389850, -0.944030389047849080, -0.944013894943232510, -0.943997398478581000, -0.943980899653936170, -0.943964398469338880, +-0.943947894924830780, -0.943931389020452930, -0.943914880756246520, -0.943898370132252970, -0.943881857148513470, -0.943865341805069310, -0.943848824101961800, -0.943832304039232240, +-0.943815781616921920, -0.943799256835072150, -0.943782729693724230, -0.943766200192919570, -0.943749668332699240, -0.943733134113104890, -0.943716597534177580, -0.943700058595958960, +-0.943683517298489980, -0.943666973641812400, -0.943650427625967180, -0.943633879250996070, -0.943617328516940250, -0.943600775423841020, -0.943584219971739910, -0.943567662160678220, +-0.943551101990697360, -0.943534539461838740, -0.943517974574143880, -0.943501407327653970, -0.943484837722410540, -0.943468265758455100, -0.943451691435828970, -0.943435114754573530, +-0.943418535714730440, -0.943401954316340880, -0.943385370559446490, -0.943368784444088670, -0.943352195970308950, -0.943335605138148630, -0.943319011947649440, -0.943302416398852590, +-0.943285818491799710, -0.943269218226532310, -0.943252615603091930, -0.943236010621519960, -0.943219403281857940, -0.943202793584147380, -0.943186181528429920, -0.943169567114746980, +-0.943152950343140060, -0.943136331213650920, -0.943119709726320750, -0.943103085881191520, -0.943086459678304400, -0.943069831117701260, -0.943053200199423400, -0.943036566923512680, +-0.943019931290010490, -0.943003293298958490, -0.942986652950398190, -0.942970010244371330, -0.942953365180919430, -0.942936717760084140, -0.942920067981906970, -0.942903415846429670, +-0.942886761353693870, -0.942870104503741090, -0.942853445296613080, -0.942836783732351470, -0.942820119810997890, -0.942803453532593980, -0.942786784897181600, -0.942770113904802140, +-0.942753440555497370, -0.942736764849309020, -0.942720086786278830, -0.942703406366448230, -0.942686723589859280, -0.942670038456553510, -0.942653350966572660, -0.942636661119958360, +-0.942619968916752480, -0.942603274356996530, -0.942586577440732600, -0.942569878168002080, -0.942553176538846960, -0.942536472553308860, -0.942519766211429520, -0.942503057513250810, +-0.942486346458814460, -0.942469633048162340, -0.942452917281335960, -0.942436199158377400, -0.942419478679328290, -0.942402755844230500, -0.942386030653125870, -0.942369303106056160, +-0.942352573203063090, -0.942335840944188650, -0.942319106329474690, -0.942302369358962830, -0.942285630032695170, -0.942268888350713320, -0.942252144313059260, -0.942235397919774950, +-0.942218649170902030, -0.942201898066482580, -0.942185144606558330, -0.942168388791171150, -0.942151630620363110, -0.942134870094175960, -0.942118107212651660, -0.942101341975832060, +-0.942084574383759140, -0.942067804436474750, -0.942051032134020860, -0.942034257476439320, -0.942017480463772320, -0.942000701096061380, -0.941983919373348910, -0.941967135295676440, +-0.941950348863086370, -0.941933560075620240, -0.941916768933320330, -0.941899975436228390, -0.941883179584386500, -0.941866381377836740, -0.941849580816620960, -0.941832777900781350, +-0.941815972630359650, -0.941799165005398060, -0.941782355025938540, -0.941765542692023280, -0.941748728003694020, -0.941731910960993070, -0.941715091563962160, -0.941698269812643710, +-0.941681445707079460, -0.941664619247311600, -0.941647790433382200, -0.941630959265333360, -0.941614125743207130, -0.941597289867045610, -0.941580451636890750, -0.941563611052784850, +-0.941546768114769890, -0.941529922822888050, -0.941513075177181300, -0.941496225177691940, -0.941479372824462040, -0.941462518117533680, -0.941445661056949050, -0.941428801642750220, +-0.941411939874979400, -0.941395075753678760, -0.941378209278890490, -0.941361340450656560, -0.941344469269019380, -0.941327595734020920, -0.941310719845703580, -0.941293841604109450, +-0.941276961009280710, -0.941260078061259440, -0.941243192760088050, -0.941226305105808740, -0.941209415098463680, -0.941192522738094950, -0.941175628024744970, -0.941158730958455920, +-0.941141831539270000, -0.941124929767229610, -0.941108025642376830, -0.941091119164754080, -0.941074210334403420, -0.941057299151367270, -0.941040385615687810, -0.941023469727407580, +-0.941006551486568420, -0.940989630893213080, -0.940972707947383520, -0.940955782649122390, -0.940938854998471630, -0.940921924995473780, -0.940904992640171020, -0.940888057932605990, +-0.940871120872820650, -0.940854181460857640, -0.940837239696759030, -0.940820295580567350, -0.940803349112324990, -0.940786400292074170, -0.940769449119857490, -0.940752495595717050, +-0.940735539719695480, -0.940718581491834960, -0.940701620912178130, -0.940684657980767060, -0.940667692697644500, -0.940650725062852630, -0.940633755076434100, -0.940616782738430970, +-0.940599808048885990, -0.940582831007841460, -0.940565851615339900, -0.940548869871423610, -0.940531885776135220, -0.940514899329517150, -0.940497910531611800, -0.940480919382461590, +-0.940463925882109140, -0.940446930030596980, -0.940429931827967300, -0.940412931274262950, -0.940395928369526240, -0.940378923113799670, -0.940361915507125780, -0.940344905549547190, +-0.940327893241106220, -0.940310878581845590, -0.940293861571807720, -0.940276842211035360, -0.940259820499570690, -0.940242796437456560, -0.940225770024735400, -0.940208741261449820, +-0.940191710147642470, -0.940174676683355750, -0.940157640868632290, -0.940140602703514850, -0.940123562188045820, -0.940106519322267960, -0.940089474106223790, -0.940072426539955820, +-0.940055376623507020, -0.940038324356919590, -0.940021269740236360, -0.940004212773499990, -0.939987153456753100, -0.939970091790038320, -0.939953027773398290, -0.939935961406875740, +-0.939918892690513320, -0.939901821624353540, -0.939884748208439260, -0.939867672442813110, -0.939850594327517830, -0.939833513862595950, -0.939816431048090430, -0.939799345884043790, +-0.939782258370498670, -0.939765168507498030, -0.939748076295084390, -0.939730981733300720, -0.939713884822189430, -0.939696785561793480, -0.939679683952155510, -0.939662579993318480, +-0.939645473685324810, -0.939628365028217560, -0.939611254022039380, -0.939594140666833110, -0.939577024962641390, -0.939559906909507300, -0.939542786507473250, -0.939525663756582310, +-0.939508538656877220, -0.939491411208400740, -0.939474281411195710, -0.939457149265304990, -0.939440014770771550, -0.939422877927637900, -0.939405738735947130, -0.939388597195741970, +-0.939371453307065400, -0.939354307069960040, -0.939337158484469080, -0.939320007550635160, -0.939302854268501240, -0.939285698638110070, -0.939268540659504820, -0.939251380332728150, +-0.939234217657823000, -0.939217052634832350, -0.939199885263799050, -0.939182715544765960, -0.939165543477776250, -0.939148369062872580, -0.939131192300098010, -0.939114013189495390, +-0.939096831731107810, -0.939079647924978110, -0.939062461771149270, -0.939045273269664360, -0.939028082420566230, -0.939010889223897970, -0.938993693679702310, -0.938976495788022560, +-0.938959295548901560, -0.938942092962382290, -0.938924888028507710, -0.938907680747321120, -0.938890471118865140, -0.938873259143183090, -0.938856044820317810, -0.938838828150312500, +-0.938821609133210000, -0.938804387769053620, -0.938787164057886090, -0.938769937999750840, -0.938752709594690590, -0.938735478842748660, -0.938718245743968010, -0.938701010298391810, +-0.938683772506063050, -0.938666532367024800, -0.938649289881320240, -0.938632045048992450, -0.938614797870084620, -0.938597548344639710, -0.938580296472701030, -0.938563042254311530, +-0.938545785689514410, -0.938528526778352860, -0.938511265520870050, -0.938494001917108970, -0.938476735967112900, -0.938459467670925030, -0.938442197028588550, -0.938424924040146440, +-0.938407648705642080, -0.938390371025118690, -0.938373090998619210, -0.938355808626187170, -0.938338523907865430, -0.938321236843697500, -0.938303947433726470, -0.938286655677995630, +-0.938269361576547940, -0.938252065129427050, -0.938234766336675910, -0.938217465198337930, -0.938200161714456190, -0.938182855885074110, -0.938165547710234860, -0.938148237189981750, +-0.938130924324358070, -0.938113609113407130, -0.938096291557172000, -0.938078971655696310, -0.938061649409023040, -0.938044324817195680, -0.938026997880257670, -0.938009668598251970, +-0.937992336971222200, -0.937975002999211550, -0.937957666682263440, -0.937940328020421150, -0.937922987013728000, -0.937905643662227400, -0.937888297965962740, -0.937870949924977330, +-0.937853599539314460, -0.937836246809017670, -0.937818891734130240, -0.937801534314695480, -0.937784174550757130, -0.937766812442358160, -0.937749447989542180, -0.937732081192352520, +-0.937714712050832790, -0.937697340565026180, -0.937679966734976220, -0.937662590560726540, -0.937645212042320100, -0.937627831179800860, -0.937610447973211910, -0.937593062422596880, +-0.937575674527999170, -0.937558284289462310, -0.937540891707029700, -0.937523496780744870, -0.937506099510651340, -0.937488699896792620, -0.937471297939212020, -0.937453893637953170, +-0.937436486993059590, -0.937419078004574910, -0.937401666672542430, -0.937384252997005900, -0.937366836978008600, -0.937349418615594290, -0.937331997909806370, -0.937314574860688480, +-0.937297149468284240, -0.937279721732636960, -0.937262291653790490, -0.937244859231788240, -0.937227424466673950, -0.937209987358491040, -0.937192547907283120, -0.937175106113093850, +-0.937157661975966840, -0.937140215495945620, -0.937122766673073930, -0.937105315507395290, -0.937087861998953440, -0.937070406147791800, -0.937052947953954220, -0.937035487417484210, +-0.937018024538425530, -0.937000559316821800, -0.936983091752716660, -0.936965621846153840, -0.936948149597176870, -0.936930675005829610, -0.936913198072155560, -0.936895718796198600, +-0.936878237178002340, -0.936860753217610530, -0.936843266915066700, -0.936825778270414800, -0.936808287283698470, -0.936790793954961340, -0.936773298284247270, -0.936755800271599990, +-0.936738299917063140, -0.936720797220680690, -0.936703292182496040, -0.936685784802553380, -0.936668275080896010, -0.936650763017568110, -0.936633248612613320, -0.936615731866075270, +-0.936598212777998040, -0.936580691348425140, -0.936563167577400660, -0.936545641464968210, -0.936528113011171670, -0.936510582216054770, -0.936493049079661470, -0.936475513602035510, +-0.936457975783220880, -0.936440435623261180, -0.936422893122200510, -0.936405348280082480, -0.936387801096951190, -0.936370251572850250, -0.936352699707823870, -0.936335145501915660, +-0.936317588955169590, -0.936300030067629520, -0.936282468839339300, -0.936264905270343010, -0.936247339360684490, -0.936229771110407620, -0.936212200519556230, -0.936194627588174400, +-0.936177052316305990, -0.936159474703994960, -0.936141894751285180, -0.936124312458220810, -0.936106727824845500, -0.936089140851203430, -0.936071551537338560, -0.936053959883294760, +-0.936036365889115980, -0.936018769554846420, -0.936001170880529920, -0.935983569866210450, -0.935965966511932090, -0.935948360817738690, -0.935930752783674550, -0.935913142409783520, +-0.935895529696109560, -0.935877914642696760, -0.935860297249589300, -0.935842677516830920, -0.935825055444466040, -0.935807431032538380, -0.935789804281092150, -0.935772175190171420, +-0.935754543759820370, -0.935736909990082850, -0.935719273881003070, -0.935701635432625080, -0.935683994644993080, -0.935666351518151030, -0.935648706052143120, -0.935631058247013430, +-0.935613408102806130, -0.935595755619565210, -0.935578100797334940, -0.935560443636159530, -0.935542784136082940, -0.935525122297149460, -0.935507458119403060, -0.935489791602888030, +-0.935472122747648570, -0.935454451553728750, -0.935436778021172870, -0.935419102150024990, -0.935401423940329320, -0.935383743392130260, -0.935366060505471660, -0.935348375280398050, +-0.935330687716953380, -0.935312997815182070, -0.935295305575128190, -0.935277610996836150, -0.935259914080350030, -0.935242214825714010, -0.935224513232972620, -0.935206809302169930, +-0.935189103033350120, -0.935171394426557610, -0.935153683481836700, -0.935135970199231450, -0.935118254578786390, -0.935100536620545600, -0.935082816324553480, -0.935065093690854330, +-0.935047368719492460, -0.935029641410512150, -0.935011911763957810, -0.934994179779873540, -0.934976445458303940, -0.934958708799293210, -0.934940969802885770, -0.934923228469125790, +-0.934905484798057800, -0.934887738789726090, -0.934869990444174960, -0.934852239761448930, -0.934834486741592310, -0.934816731384649380, -0.934798973690664670, -0.934781213659682590, +-0.934763451291747430, -0.934745686586903710, -0.934727919545195630, -0.934710150166667920, -0.934692378451364660, -0.934674604399330590, -0.934656828010610010, -0.934639049285247330, +-0.934621268223286950, -0.934603484824773510, -0.934585699089751310, -0.934567911018264860, -0.934550120610358580, -0.934532327866077090, -0.934514532785464700, -0.934496735368566030, +-0.934478935615425610, -0.934461133526087620, -0.934443329100597020, -0.934425522338998000, -0.934407713241335200, -0.934389901807653130, -0.934372088037996210, -0.934354271932409160, +-0.934336453490936410, -0.934318632713622590, -0.934300809600512090, -0.934282984151649560, -0.934265156367079630, -0.934247326246846810, -0.934229493790995740, -0.934211658999570820, +-0.934193821872616790, -0.934175982410178190, -0.934158140612299630, -0.934140296479025740, -0.934122450010401060, -0.934104601206470320, -0.934086750067278040, -0.934068896592868960, +-0.934051040783287490, -0.934033182638578600, -0.934015322158786580, -0.933997459343956390, -0.933979594194132460, -0.933961726709359620, -0.933943856889682400, -0.933925984735145650, +-0.933908110245793790, -0.933890233421671770, -0.933872354262824110, -0.933854472769295560, -0.933836588941130860, -0.933818702778374750, -0.933800814281071760, -0.933782923449266720, +-0.933765030283004500, -0.933747134782329510, -0.933729236947286930, -0.933711336777921060, -0.933693434274276980, -0.933675529436399200, -0.933657622264332690, -0.933639712758122080, +-0.933621800917812220, -0.933603886743447850, -0.933585970235073730, -0.933568051392734690, -0.933550130216475590, -0.933532206706341070, -0.933514280862376090, -0.933496352684625390, +-0.933478422173133930, -0.933460489327946230, -0.933442554149107370, -0.933424616636662100, -0.933406676790655250, -0.933388734611131920, -0.933370790098136500, -0.933352843251714300, +-0.933334894071909840, -0.933316942558768290, -0.933298988712334300, -0.933281032532652820, -0.933263074019768820, -0.933245113173727160, -0.933227149994572570, -0.933209184482350240, +-0.933191216637104910, -0.933173246458881560, -0.933155273947725020, -0.933137299103680370, -0.933119321926792480, -0.933101342417106290, -0.933083360574666680, -0.933065376399518590, +-0.933047389891707210, -0.933029401051277300, -0.933011409878273910, -0.932993416372742020, -0.932975420534726600, -0.932957422364272480, -0.932939421861424980, -0.932921419026228830, +-0.932903413858729210, -0.932885406358970990, -0.932867396526999240, -0.932849384362859020, -0.932831369866595430, -0.932813353038253300, -0.932795333877877830, -0.932777312385513980, +-0.932759288561206930, -0.932741262405001550, -0.932723233916943010, -0.932705203097076500, -0.932687169945446980, -0.932669134462099540, -0.932651096647079130, -0.932633056500431160, +-0.932615014022200370, -0.932596969212432180, -0.932578922071171550, -0.932560872598463540, -0.932542820794353360, -0.932524766658886280, -0.932506710192107070, -0.932488651394061230, +-0.932470590264793620, -0.932452526804349760, -0.932434461012774380, -0.932416392890112910, -0.932398322436410520, -0.932380249651712290, -0.932362174536063400, -0.932344097089509050, +-0.932326017312094520, -0.932307935203864900, -0.932289850764865480, -0.932271763995141440, -0.932253674894737980, -0.932235583463700280, -0.932217489702073740, -0.932199393609903340, +-0.932181295187234580, -0.932163194434112440, -0.932145091350582430, -0.932126985936689630, -0.932108878192479450, -0.932090768117996960, -0.932072655713287680, -0.932054540978396680, +-0.932036423913369380, -0.932018304518250960, -0.932000182793086720, -0.931982058737922170, -0.931963932352802390, -0.931945803637772800, -0.931927672592878680, -0.931909539218165440, +-0.931891403513678270, -0.931873265479462700, -0.931855125115563900, -0.931836982422027280, -0.931818837398898150, -0.931800690046222010, -0.931782540364044180, -0.931764388352409930, +-0.931746234011364690, -0.931728077340953980, -0.931709918341222960, -0.931691757012217180, -0.931673593353981920, -0.931655427366562820, -0.931637259050005050, -0.931619088404354150, +-0.931600915429655620, -0.931582740125954770, -0.931564562493297000, -0.931546382531727830, -0.931528200241292790, -0.931510015622037170, -0.931491828674006590, -0.931473639397246370, +-0.931455447791802120, -0.931437253857719140, -0.931419057595043180, -0.931400859003819410, -0.931382658084093600, -0.931364454835911130, -0.931346249259317530, -0.931328041354358200, +-0.931309831121078900, -0.931291618559524910, -0.931273403669741980, -0.931255186451775520, -0.931236966905671040, -0.931218745031474170, -0.931200520829230440, -0.931182294298985470, +-0.931164065440784670, -0.931145834254673790, -0.931127600740698220, -0.931109364898903720, -0.931091126729335810, -0.931072886232040100, -0.931054643407062120, -0.931036398254447620, +-0.931018150774241990, -0.930999900966491100, -0.930981648831240350, -0.930963394368535590, -0.930945137578422340, -0.930926878460946240, -0.930908617016152800, -0.930890353244087860, +-0.930872087144797190, -0.930853818718326180, -0.930835547964720680, -0.930817274884026320, -0.930798999476288750, -0.930780721741553570, -0.930762441679866770, -0.930744159291273740, +-0.930725874575820460, -0.930707587533552320, -0.930689298164515290, -0.930671006468755000, -0.930652712446317310, -0.930634416097247620, -0.930616117421592120, -0.930597816419396100, +-0.930579513090705750, -0.930561207435566470, -0.930542899454024240, -0.930524589146124680, -0.930506276511913640, -0.930487961551437090, -0.930469644264740440, -0.930451324651869860, +-0.930433002712870880, -0.930414678447789360, -0.930396351856671130, -0.930378022939562180, -0.930359691696508010, -0.930341358127554700, -0.930323022232747880, -0.930304684012133620, +-0.930286343465757560, -0.930268000593665770, -0.930249655395903870, -0.930231307872517840, -0.930212958023553530, -0.930194605849056890, -0.930176251349073670, -0.930157894523649830, +-0.930139535372831340, -0.930121173896663930, -0.930102810095193580, -0.930084443968466230, -0.930066075516527760, -0.930047704739424110, -0.930029331637201250, -0.930010956209905040, +-0.929992578457581430, -0.929974198380276280, -0.929955815978035780, -0.929937431250905670, -0.929919044198932010, -0.929900654822160670, -0.929882263120637820, -0.929863869094409100, +-0.929845472743520920, -0.929827074068019010, -0.929808673067949340, -0.929790269743357990, -0.929771864094291020, -0.929753456120794410, -0.929735045822914110, -0.929716633200696200, +-0.929698218254186750, -0.929679800983431730, -0.929661381388477200, -0.929642959469369260, -0.929624535226153850, -0.929606108658877160, -0.929587679767585160, -0.929569248552324030, +-0.929550815013139630, -0.929532379150078360, -0.929513940963186070, -0.929495500452508950, -0.929477057618092960, -0.929458612459984510, -0.929440164978229340, -0.929421715172873860, +-0.929403263043964150, -0.929384808591546150, -0.929366351815666290, -0.929347892716370420, -0.929329431293704930, -0.929310967547715690, -0.929292501478449220, -0.929274033085951360, +-0.929255562370268520, -0.929237089331446780, -0.929218613969532200, -0.929200136284571210, -0.929181656276609870, -0.929163173945694250, -0.929144689291870880, -0.929126202315185610, +-0.929107713015684960, -0.929089221393414990, -0.929070727448422010, -0.929052231180752090, -0.929033732590451630, -0.929015231677566940, -0.928996728442144090, -0.928978222884229380, +-0.928959715003869200, -0.928941204801109750, -0.928922692275997220, -0.928904177428578000, -0.928885660258898290, -0.928867140767004500, -0.928848618952942790, -0.928830094816759600, +-0.928811568358501090, -0.928793039578213690, -0.928774508475943670, -0.928755975051737460, -0.928737439305641230, -0.928718901237701510, -0.928700360847964480, -0.928681818136476540, +-0.928663273103284000, -0.928644725748433260, -0.928626176071970840, -0.928607624073942930, -0.928589069754395920, -0.928570513113376240, -0.928551954150930390, -0.928533392867104460, +-0.928514829261945170, -0.928496263335498840, -0.928477695087811860, -0.928459124518930530, -0.928440551628901490, -0.928421976417770910, -0.928403398885585540, -0.928384819032391670, +-0.928366236858235720, -0.928347652363164190, -0.928329065547223500, -0.928310476410460160, -0.928291884952920590, -0.928273291174651400, -0.928254695075698910, -0.928236096656109730, +-0.928217495915930280, -0.928198892855207070, -0.928180287473986620, -0.928161679772315560, -0.928143069750240190, -0.928124457407807250, -0.928105842745063030, -0.928087225762054380, +-0.928068606458827490, -0.928049984835429220, -0.928031360891905850, -0.928012734628304250, -0.927994106044670590, -0.927975475141051830, -0.927956841917494390, -0.927938206374044780, +-0.927919568510749640, -0.927900928327655580, -0.927882285824809250, -0.927863641002257160, -0.927844993860046040, -0.927826344398222420, -0.927807692616832940, -0.927789038515924090, +-0.927770382095542860, -0.927751723355735520, -0.927733062296548950, -0.927714398918029650, -0.927695733220224470, -0.927677065203179830, -0.927658394866942680, -0.927639722211559440, +-0.927621047237076950, -0.927602369943541730, -0.927583690331000630, -0.927565008399500290, -0.927546324149087440, -0.927527637579808830, -0.927508948691711080, -0.927490257484841040, +-0.927471563959245240, -0.927452868114970630, -0.927434169952063850, -0.927415469470571630, -0.927396766670540610, -0.927378061552017850, -0.927359354115049880, -0.927340644359683550, +-0.927321932285965490, -0.927303217893942770, -0.927284501183661790, -0.927265782155169750, -0.927247060808513160, -0.927228337143738980, -0.927209611160893840, -0.927190882860024820, +-0.927172152241178550, -0.927153419304401760, -0.927134684049741640, -0.927115946477244600, -0.927097206586957930, -0.927078464378928050, -0.927059719853202120, -0.927040973009826800, +-0.927022223848849140, -0.927003472370315880, -0.926984718574273890, -0.926965962460770120, -0.926947204029851530, -0.926928443281564870, -0.926909680215957100, -0.926890914833075170, +-0.926872147132965950, -0.926853377115676280, -0.926834604781253240, -0.926815830129743670, -0.926797053161194540, -0.926778273875652700, -0.926759492273165230, -0.926740708353779090, +-0.926721922117541120, -0.926703133564498400, -0.926684342694697680, -0.926665549508186360, -0.926646754005010950, -0.926627956185218760, -0.926609156048856630, -0.926590353595971640, +-0.926571548826610750, -0.926552741740821030, -0.926533932338649450, -0.926515120620143070, -0.926496306585348760, -0.926477490234313810, -0.926458671567085060, -0.926439850583709700, +-0.926421027284234590, -0.926402201668707010, -0.926383373737173940, -0.926364543489682330, -0.926345710926279490, -0.926326876047012250, -0.926308038851927920, -0.926289199341073450, +-0.926270357514496050, -0.926251513372242650, -0.926232666914360570, -0.926213818140896760, -0.926194967051898410, -0.926176113647412700, -0.926157257927486600, -0.926138399892167400, +-0.926119539541502280, -0.926100676875538210, -0.926081811894322480, -0.926062944597902280, -0.926044074986324680, -0.926025203059636760, -0.926006328817885920, -0.925987452261119340, +-0.925968573389384100, -0.925949692202727380, -0.925930808701196480, -0.925911922884838590, -0.925893034753700770, -0.925874144307830440, -0.925855251547274770, -0.925836356472080960, +-0.925817459082296180, -0.925798559377967840, -0.925779657359143030, -0.925760753025869130, -0.925741846378193340, -0.925722937416162960, -0.925704026139825160, -0.925685112549227470, +-0.925666196644416850, -0.925647278425440700, -0.925628357892346430, -0.925609435045181230, -0.925590509883992500, -0.925571582408827420, -0.925552652619733520, -0.925533720516757860, +-0.925514786099947970, -0.925495849369351030, -0.925476910325014560, -0.925457968966985730, -0.925439025295312080, -0.925420079310040780, -0.925401131011219350, -0.925382180398894970, +-0.925363227473115280, -0.925344272233927460, -0.925325314681379020, -0.925306354815517150, -0.925287392636389480, -0.925268428144043310, -0.925249461338526040, -0.925230492219885290, +-0.925211520788168150, -0.925192547043422240, -0.925173570985694970, -0.925154592615033740, -0.925135611931486080, -0.925116628935099380, -0.925097643625921060, -0.925078656003998740, +-0.925059666069379730, -0.925040673822111530, -0.925021679262241660, -0.925002682389817530, -0.924983683204886780, -0.924964681707496790, -0.924945677897695110, -0.924926671775529230, +-0.924907663341046680, -0.924888652594294870, -0.924869639535321530, -0.924850624164174070, -0.924831606480900130, -0.924812586485547090, -0.924793564178162610, -0.924774539558794180, +-0.924755512627489450, -0.924736483384295930, -0.924717451829261240, -0.924698417962432790, -0.924679381783858450, -0.924660343293585480, -0.924641302491661770, -0.924622259378134800, +-0.924603213953052230, -0.924584166216461560, -0.924565116168410530, -0.924546063808946550, -0.924527009138117580, -0.924507952155971040, -0.924488892862554530, -0.924469831257915930, +-0.924450767342102630, -0.924431701115162490, -0.924412632577143010, -0.924393561728092060, -0.924374488568057150, -0.924355413097086130, -0.924336335315226410, -0.924317255222525950, +-0.924298172819032260, -0.924279088104793310, -0.924260001079856510, -0.924240911744269810, -0.924221820098080630, -0.924202726141337140, -0.924183629874086640, -0.924164531296377210, +-0.924145430408256360, -0.924126327209771950, -0.924107221700971700, -0.924088113881903370, -0.924069003752614910, -0.924049891313153850, -0.924030776563568020, -0.924011659503905290, +-0.923992540134213500, -0.923973418454540170, -0.923954294464933490, -0.923935168165440860, -0.923916039556110570, -0.923896908636989920, -0.923877775408127210, -0.923858639869569950, +-0.923839502021366110, -0.923820361863563530, -0.923801219396210070, -0.923782074619353470, -0.923762927533041790, -0.923743778137322670, -0.923724626432244180, -0.923705472417854170, +-0.923686316094200380, -0.923667157461330880, -0.923647996519293410, -0.923628833268136050, -0.923609667707906530, -0.923590499838652930, -0.923571329660422990, -0.923552157173264780, +-0.923532982377226030, -0.923513805272355050, -0.923494625858699350, -0.923475444136307330, -0.923456260105226520, -0.923437073765505100, -0.923417885117190920, -0.923398694160332160, +-0.923379500894976560, -0.923360305321172300, -0.923341107438967250, -0.923321907248409350, -0.923302704749546790, -0.923283499942427310, -0.923264292827099320, -0.923245083403610440, +-0.923225871672008870, -0.923206657632342660, -0.923187441284659790, -0.923168222629008330, -0.923149001665436340, -0.923129778393991680, -0.923110552814722760, -0.923091324927677430, +-0.923072094732903750, -0.923052862230449800, -0.923033627420363770, -0.923014390302693610, -0.922995150877487510, -0.922975909144793550, -0.922956665104659680, -0.922937418757134310, +-0.922918170102265290, -0.922898919140100920, -0.922879665870689260, -0.922860410294078390, -0.922841152410316500, -0.922821892219451770, -0.922802629721532260, -0.922783364916606170, +-0.922764097804721680, -0.922744828385926970, -0.922725556660270230, -0.922706282627799520, -0.922687006288563150, -0.922667727642609290, -0.922648446689986020, -0.922629163430741750, +-0.922609877864924430, -0.922590589992582480, -0.922571299813764070, -0.922552007328517390, -0.922532712536890730, -0.922513415438932170, -0.922494116034690230, -0.922474814324212970, +-0.922455510307548690, -0.922436203984745460, -0.922416895355851920, -0.922397584420916020, -0.922378271179986280, -0.922358955633110770, -0.922339637780337900, -0.922320317621715960, +-0.922300995157293250, -0.922281670387117950, -0.922262343311238570, -0.922243013929703200, -0.922223682242560460, -0.922204348249858310, -0.922185011951645370, -0.922165673347970060, +-0.922146332438880450, -0.922126989224425040, -0.922107643704652040, -0.922088295879610050, -0.922068945749347280, -0.922049593313912230, -0.922030238573353090, -0.922010881527718370, +-0.921991522177056490, -0.921972160521415840, -0.921952796560844610, -0.921933430295391540, -0.921914061725104820, -0.921894690850033060, -0.921875317670224460, -0.921855942185727750, +-0.921836564396590900, -0.921817184302862860, -0.921797801904591820, -0.921778417201826180, -0.921759030194614580, -0.921739640883005310, -0.921720249267047100, -0.921700855346788140, +-0.921681459122277060, -0.921662060593562370, -0.921642659760692480, -0.921623256623716030, -0.921603851182681400, -0.921584443437637010, -0.921565033388631720, -0.921545621035713690, +-0.921526206378931790, -0.921506789418334190, -0.921487370153969750, -0.921467948585886760, -0.921448524714133970, -0.921429098538759870, -0.921409670059813000, -0.921390239277341980, +-0.921370806191395220, -0.921351370802021670, -0.921331933109269530, -0.921312493113187640, -0.921293050813824510, -0.921273606211228780, -0.921254159305448960, -0.921234710096533790, +-0.921215258584531790, -0.921195804769491810, -0.921176348651462140, -0.921156890230491740, -0.921137429506628910, -0.921117966479922720, -0.921098501150421470, -0.921079033518174110, +-0.921059563583229050, -0.921040091345635140, -0.921020616805440890, -0.921001139962695170, -0.920981660817446590, -0.920962179369743890, -0.920942695619635820, -0.920923209567170890, +-0.920903721212397940, -0.920884230555365720, -0.920864737596122970, -0.920845242334718210, -0.920825744771200600, -0.920806244905618350, -0.920786742738020750, -0.920767238268456080, +-0.920747731496973530, -0.920728222423621400, -0.920708711048448980, -0.920689197371504560, -0.920669681392837220, -0.920650163112495700, -0.920630642530528840, -0.920611119646985280, +-0.920591594461913850, -0.920572066975363530, -0.920552537187383060, -0.920533005098021270, -0.920513470707326810, -0.920493934015348850, -0.920474395022136020, -0.920454853727737170, +-0.920435310132201150, -0.920415764235576920, -0.920396216037913220, -0.920376665539259120, -0.920357112739663140, -0.920337557639174570, -0.920318000237841940, -0.920298440535714520, +-0.920278878532840850, -0.920259314229269990, -0.920239747625050790, -0.920220178720232320, -0.920200607514863430, -0.920181034008992870, -0.920161458202669920, -0.920141880095943220, +-0.920122299688861830, -0.920102716981474720, -0.920083131973830740, -0.920063544665978950, -0.920043955057968430, -0.920024363149847810, -0.920004768941666500, -0.919985172433473110, +-0.919965573625316950, -0.919945972517246640, -0.919926369109311580, -0.919906763401560520, -0.919887155394042530, -0.919867545086806680, -0.919847932479902040, -0.919828317573377460, +-0.919808700367282020, -0.919789080861665000, -0.919769459056575140, -0.919749834952061750, -0.919730208548173780, -0.919710579844960300, -0.919690948842470160, -0.919671315540752880, +-0.919651679939857190, -0.919632042039832400, -0.919612401840727340, -0.919592759342591440, -0.919573114545473520, -0.919553467449423010, -0.919533818054488640, -0.919514166360719810, +-0.919494512368165480, -0.919474856076874960, -0.919455197486897300, -0.919435536598281590, -0.919415873411077110, -0.919396207925332830, -0.919376540141098150, -0.919356870058422040, +-0.919337197677353780, -0.919317522997942560, -0.919297846020237560, -0.919278166744287750, -0.919258485170142750, -0.919238801297851400, -0.919219115127463130, -0.919199426659027100, +-0.919179735892592390, -0.919160042828208400, -0.919140347465924320, -0.919120649805789340, -0.919100949847852840, -0.919081247592163810, -0.919061543038771740, -0.919041836187725720, +-0.919022127039075150, -0.919002415592869440, -0.918982701849157420, -0.918962985807988850, -0.918943267469412680, -0.918923546833478540, -0.918903823900235280, -0.918884098669732640, +-0.918864371142019690, -0.918844641317145830, -0.918824909195160360, -0.918805174776112680, -0.918785438060051860, -0.918765699047027650, -0.918745957737089110, -0.918726214130285770, +-0.918706468226666790, -0.918686720026281600, -0.918666969529179700, -0.918647216735410390, -0.918627461645022960, -0.918607704258066930, -0.918587944574591590, -0.918568182594646450, +-0.918548418318280820, -0.918528651745544100, -0.918508882876485910, -0.918489111711155330, -0.918469338249602090, -0.918449562491875480, -0.918429784438024920, -0.918410004088099920, +-0.918390221442149990, -0.918370436500224430, -0.918350649262372750, -0.918330859728644480, -0.918311067899089120, -0.918291273773755970, -0.918271477352694760, -0.918251678635954690, +-0.918231877623585490, -0.918212074315636780, -0.918192268712157640, -0.918172460813198030, -0.918152650618807130, -0.918132838129034680, -0.918113023343930080, -0.918093206263542960, +-0.918073386887922730, -0.918053565217119120, -0.918033741251181650, -0.918013914990159720, -0.917994086434103070, -0.917974255583061230, -0.917954422437083580, -0.917934586996220100, +-0.917914749260519970, -0.917894909230033140, -0.917875066904808910, -0.917855222284897020, -0.917835375370347100, -0.917815526161208760, -0.917795674657531650, -0.917775820859365150, +-0.917755964766759360, -0.917736106379763440, -0.917716245698427470, -0.917696382722800740, -0.917676517452933100, -0.917656649888874080, -0.917636780030673620, -0.917616907878381020, +-0.917597033432046240, -0.917577156691718800, -0.917557277657448660, -0.917537396329285100, -0.917517512707278220, -0.917497626791477510, -0.917477738581932710, -0.917457848078693460, +-0.917437955281809710, -0.917418060191331100, -0.917398162807307240, -0.917378263129788100, -0.917358361158823190, -0.917338456894462470, -0.917318550336755580, -0.917298641485752240, +-0.917278730341502310, -0.917258816904055640, -0.917238901173461850, -0.917218983149770910, -0.917199062833032430, -0.917179140223296390, -0.917159215320612290, -0.917139288125030430, +-0.917119358636600100, -0.917099426855371490, -0.917079492781394330, -0.917059556414718370, -0.917039617755393550, -0.917019676803469630, -0.916999733558996670, -0.916979788022024290, +-0.916959840192602460, -0.916939890070780920, -0.916919937656609840, -0.916899982950138750, -0.916880025951417820, -0.916860066660496690, -0.916840105077425530, -0.916820141202254080, +-0.916800175035032310, -0.916780206575809940, -0.916760235824637280, -0.916740262781563840, -0.916720287446639910, -0.916700309819915130, -0.916680329901439660, -0.916660347691263260, +-0.916640363189436090, -0.916620376396007910, -0.916600387311028890, -0.916580395934548870, -0.916560402266617840, -0.916540406307285840, -0.916520408056602730, -0.916500407514618700, +-0.916480404681383700, -0.916460399556947580, -0.916440392141360530, -0.916420382434672500, -0.916400370436933450, -0.916380356148193580, -0.916360339568502600, -0.916340320697911050, +-0.916320299536468540, -0.916300276084225370, -0.916280250341231390, -0.916260222307536900, -0.916240191983191730, -0.916220159368246080, -0.916200124462750120, -0.916180087266753820, +-0.916160047780307350, -0.916140006003460680, -0.916119961936264100, -0.916099915578767580, -0.916079866931021280, -0.916059815993075180, -0.916039762764979670, -0.916019707246784720, +-0.915999649438540620, -0.915979589340297220, -0.915959526952104920, -0.915939462274013790, -0.915919395306074020, -0.915899326048335680, -0.915879254500849170, -0.915859180663664450, +-0.915839104536831820, -0.915819026120401340, -0.915798945414423300, -0.915778862418948010, -0.915758777134025430, -0.915738689559706050, -0.915718599696039750, -0.915698507543077130, +-0.915678413100868170, -0.915658316369463270, -0.915638217348912490, -0.915618116039266130, -0.915598012440574480, -0.915577906552887950, -0.915557798376256500, -0.915537687910730650, +-0.915517575156360450, -0.915497460113196440, -0.915477342781288780, -0.915457223160687780, -0.915437101251443620, -0.915416977053606700, -0.915396850567227420, -0.915376721792355960, +-0.915356590729042740, -0.915336457377337930, -0.915316321737292160, -0.915296183808955500, -0.915276043592378350, -0.915255901087611120, -0.915235756294704220, -0.915215609213707810, +-0.915195459844672430, -0.915175308187648360, -0.915155154242686120, -0.915134998009835780, -0.915114839489148180, -0.915094678680673400, -0.915074515584461960, -0.915054350200564140, +-0.915034182529030460, -0.915014012569911330, -0.914993840323257150, -0.914973665789118430, -0.914953488967545470, -0.914933309858588890, -0.914913128462299000, -0.914892944778726290, +-0.914872758807921180, -0.914852570549934300, -0.914832380004815810, -0.914812187172616590, -0.914791992053386680, -0.914771794647176950, -0.914751594954037570, -0.914731392974019400, +-0.914711188707172610, -0.914690982153547940, -0.914670773313195680, -0.914650562186166580, -0.914630348772511040, -0.914610133072279560, -0.914589915085522900, -0.914569694812291330, +-0.914549472252635720, -0.914529247406606240, -0.914509020274253740, -0.914488790855628620, -0.914468559150781510, -0.914448325159763040, -0.914428088882623840, -0.914407850319414290, +-0.914387609470185160, -0.914367366334986940, -0.914347120913870490, -0.914326873206886100, -0.914306623214084510, -0.914286370935516350, -0.914266116371232450, -0.914245859521283010, +-0.914225600385719090, -0.914205338964591110, -0.914185075257949680, -0.914164809265845760, -0.914144540988329650, -0.914124270425452300, -0.914103997577264240, -0.914083722443816190, +-0.914063445025158790, -0.914043165321342890, -0.914022883332418990, -0.914002599058437950, -0.913982312499450280, -0.913962023655507050, -0.913941732526658560, -0.913921439112955870, +-0.913901143414449390, -0.913880845431190300, -0.913860545163228900, -0.913840242610616250, -0.913819937773402870, -0.913799630651639830, -0.913779321245377530, -0.913759009554666930, +-0.913738695579559000, -0.913718379320104130, -0.913698060776353520, -0.913677739948357550, -0.913657416836167410, -0.913637091439833520, -0.913616763759407150, -0.913596433794938710, +-0.913576101546479170, -0.913555767014079480, -0.913535430197790270, -0.913515091097662490, -0.913494749713747110, -0.913474406046094760, -0.913454060094756380, -0.913433711859782840, +-0.913413361341225190, -0.913393008539133970, -0.913372653453560220, -0.913352296084554930, -0.913331936432168810, -0.913311574496452840, -0.913291210277457970, -0.913270843775235150, +-0.913250474989835140, -0.913230103921308990, -0.913209730569707560, -0.913189354935081800, -0.913168977017482560, -0.913148596816961030, -0.913128214333567940, -0.913107829567354370, +-0.913087442518371150, -0.913067053186669360, -0.913046661572299970, -0.913026267675313920, -0.913005871495762070, -0.912985473033695700, -0.912965072289165570, -0.912944669262222730, +-0.912924263952918260, -0.912903856361303110, -0.912883446487428360, -0.912863034331344970, -0.912842619893104110, -0.912822203172756530, -0.912801784170353510, -0.912781362885946020, +-0.912760939319585130, -0.912740513471321900, -0.912720085341207410, -0.912699654929292610, -0.912679222235628810, -0.912658787260266830, -0.912638350003257990, -0.912617910464653240, +-0.912597468644503750, -0.912577024542860490, -0.912556578159774650, -0.912536129495297500, -0.912515678549479900, -0.912495225322373150, -0.912474769814028310, -0.912454312024496670, +-0.912433851953829090, -0.912413389602077070, -0.912392924969291360, -0.912372458055523470, -0.912351988860824360, -0.912331517385245430, -0.912311043628837530, -0.912290567591652170, +-0.912270089273740200, -0.912249608675153260, -0.912229125795942060, -0.912208640636158250, -0.912188153195852670, -0.912167663475076830, -0.912147171473881690, -0.912126677192318660, +-0.912106180630439020, -0.912085681788293860, -0.912065180665934560, -0.912044677263412320, -0.912024171580778310, -0.912003663618083940, -0.911983153375380380, -0.911962640852718830, +-0.911942126050150900, -0.911921608967727450, -0.911901089605500090, -0.911880567963520020, -0.911860044041838510, -0.911839517840506870, -0.911818989359576390, -0.911798458599098470, +-0.911777925559124510, -0.911757390239705590, -0.911736852640893210, -0.911716312762738790, -0.911695770605293500, -0.911675226168608850, -0.911654679452736040, -0.911634130457726680, +-0.911613579183631840, -0.911593025630503150, -0.911572469798391900, -0.911551911687349500, -0.911531351297427240, -0.911510788628676630, -0.911490223681149070, -0.911469656454895970, +-0.911449086949968620, -0.911428515166418650, -0.911407941104297350, -0.911387364763656230, -0.911366786144546690, -0.911346205247020260, -0.911325622071128110, -0.911305036616921970, +-0.911284448884453370, -0.911263858873773590, -0.911243266584934150, -0.911222672017986570, -0.911202075172982240, -0.911181476049972790, -0.911160874649009630, -0.911140270970144270, +-0.911119665013428340, -0.911099056778913010, -0.911078446266650240, -0.911057833476691340, -0.911037218409087800, -0.911016601063891260, -0.910995981441153240, -0.910975359540925120, +-0.910954735363258770, -0.910934108908205480, -0.910913480175816970, -0.910892849166144660, -0.910872215879240280, -0.910851580315155450, -0.910830942473941470, -0.910810302355650410, +-0.910789659960333340, -0.910769015288042330, -0.910748368338828660, -0.910727719112744080, -0.910707067609840220, -0.910686413830168680, -0.910665757773781110, -0.910645099440729240, +-0.910624438831064480, -0.910603775944838660, -0.910583110782103410, -0.910562443342910480, -0.910541773627311260, -0.910521101635357710, -0.910500427367101350, -0.910479750822593910, +-0.910459072001887250, -0.910438390905032760, -0.910417707532082400, -0.910397021883087690, -0.910376333958100470, -0.910355643757172370, -0.910334951280355240, -0.910314256527700590, +-0.910293559499260500, -0.910272860195086350, -0.910252158615230120, -0.910231454759743430, -0.910210748628678230, -0.910190040222086050, -0.910169329540018830, -0.910148616582528210, +-0.910127901349666150, -0.910107183841484260, -0.910086464058034390, -0.910065741999368400, -0.910045017665538030, -0.910024291056595210, -0.910003562172591480, -0.909982831013579020, +-0.909962097579609440, -0.909941361870734600, -0.909920623887006340, -0.909899883628476620, -0.909879141095197070, -0.909858396287219760, -0.909837649204596310, -0.909816899847378900, +-0.909796148215619160, -0.909775394309369050, -0.909754638128680520, -0.909733879673605310, -0.909713118944195380, -0.909692355940502790, -0.909671590662579190, -0.909650823110476630, +-0.909630053284247060, -0.909609281183942240, -0.909588506809614450, -0.909567730161315200, -0.909546951239096680, -0.909526170043010730, -0.909505386573109530, -0.909484600829444600, +-0.909463812812068450, -0.909443022521032480, -0.909422229956389220, -0.909401435118190270, -0.909380638006487720, -0.909359838621333520, -0.909339036962779850, -0.909318233030878440, +-0.909297426825681600, -0.909276618347241270, -0.909255807595609090, -0.909234994570837560, -0.909214179272978650, -0.909193361702083980, -0.909172541858206170, -0.909151719741396970, +-0.909130895351708550, -0.909110068689192640, -0.909089239753901770, -0.909068408545887770, -0.909047575065202730, -0.909026739311898590, -0.909005901286027870, -0.908985060987642310, +-0.908964218416794090, -0.908943373573535160, -0.908922526457918050, -0.908901677069994470, -0.908880825409816850, -0.908859971477436910, -0.908839115272907170, -0.908818256796279810, +-0.908797396047606450, -0.908776533026939840, -0.908755667734331920, -0.908734800169834880, -0.908713930333500560, -0.908693058225381710, -0.908672183845530060, -0.908651307193998110, +-0.908630428270837620, -0.908609547076101200, -0.908588663609841030, -0.908567777872109070, -0.908546889862957620, -0.908525999582439070, -0.908505107030605500, -0.908484212207509190, +-0.908463315113202110, -0.908442415747736990, -0.908421514111165780, -0.908400610203540900, -0.908379704024914190, -0.908358795575338500, -0.908337884854865770, -0.908316971863548090, +-0.908296056601438200, -0.908275139068588140, -0.908254219265050340, -0.908233297190876750, -0.908212372846120110, -0.908191446230832480, -0.908170517345066260, -0.908149586188873650, +-0.908128652762307140, -0.908107717065419040, -0.908086779098261740, -0.908065838860887210, -0.908044896353348290, -0.908023951575697040, -0.908003004527985990, -0.907982055210267310, +-0.907961103622593630, -0.907940149765017130, -0.907919193637590110, -0.907898235240365390, -0.907877274573394950, -0.907856311636731310, -0.907835346430426850, -0.907814378954534100, +-0.907793409209105450, -0.907772437194193200, -0.907751462909849760, -0.907730486356127740, -0.907709507533079660, -0.907688526440757700, -0.907667543079214270, -0.907646557448502200, +-0.907625569548673680, -0.907604579379781230, -0.907583586941877240, -0.907562592235014340, -0.907541595259245050, -0.907520596014621540, -0.907499594501196770, -0.907478590719023040, +-0.907457584668152740, -0.907436576348638390, -0.907415565760532730, -0.907394552903888150, -0.907373537778757180, -0.907352520385192210, -0.907331500723246090, -0.907310478792971220, +-0.907289454594420230, -0.907268428127645300, -0.907247399392699600, -0.907226368389635330, -0.907205335118505210, -0.907184299579361530, -0.907163261772257260, -0.907142221697244790, +-0.907121179354376640, -0.907100134743705770, -0.907079087865284570, -0.907058038719165570, -0.907036987305401280, -0.907015933624044760, -0.906994877675148410, -0.906973819458764870, +-0.906952758974946540, -0.906931696223746590, -0.906910631205217310, -0.906889563919411560, -0.906868494366381620, -0.906847422546180670, -0.906826348458861120, -0.906805272104475700, +-0.906784193483077040, -0.906763112594717980, -0.906742029439451150, -0.906720944017329170, -0.906699856328404770, -0.906678766372730820, -0.906657674150360030, -0.906636579661344810, +-0.906615482905738350, -0.906594383883593260, -0.906573282594962060, -0.906552179039897600, -0.906531073218452830, -0.906509965130680270, -0.906488854776632990, -0.906467742156363280, +-0.906446627269924420, -0.906425510117368940, -0.906404390698749780, -0.906383269014119360, -0.906362145063531080, -0.906341018847037330, -0.906319890364691070, -0.906298759616544940, +-0.906277626602651990, -0.906256491323065070, -0.906235353777836710, -0.906214213967020180, -0.906193071890668000, -0.906171927548833240, -0.906150780941568530, -0.906129632068926940, +-0.906108480930961300, -0.906087327527724470, -0.906066171859269190, -0.906045013925648620, -0.906023853726915410, -0.906002691263122720, -0.905981526534323070, -0.905960359540569750, +-0.905939190281915610, -0.905918018758413380, -0.905896844970116020, -0.905875668917076720, -0.905854490599348190, -0.905833310016983310, -0.905812127170035340, -0.905790942058557040, +-0.905769754682601350, -0.905748565042221120, -0.905727373137469650, -0.905706178968399780, -0.905684982535064460, -0.905663783837516450, -0.905642582875809230, -0.905621379649995450, +-0.905600174160128280, -0.905578966406260570, -0.905557756388445490, -0.905536544106736120, -0.905515329561185300, -0.905494112751846100, -0.905472893678771710, -0.905451672342015070, +-0.905430448741629370, -0.905409222877667230, -0.905387994750182280, -0.905366764359227360, -0.905345531704855320, -0.905324296787119560, -0.905303059606073160, -0.905281820161769060, +-0.905260578454260220, -0.905239334483600170, -0.905218088249841850, -0.905196839753038220, -0.905175588993242240, -0.905154335970507540, -0.905133080684887070, -0.905111823136433790, +-0.905090563325200770, -0.905069301251241630, -0.905048036914609110, -0.905026770315356610, -0.905005501453536980, -0.904984230329203720, -0.904962956942409910, -0.904941681293208510, +-0.904920403381653140, -0.904899123207796750, -0.904877840771692530, -0.904856556073393550, -0.904835269112953310, -0.904813979890424890, -0.904792688405861580, -0.904771394659316330, +-0.904750098650842880, -0.904728800380494080, -0.904707499848323330, -0.904686197054383580, -0.904664891998728570, -0.904643584681411260, -0.904622275102485050, -0.904600963262003010, +-0.904579649160018650, -0.904558332796585260, -0.904537014171755800, -0.904515693285584010, -0.904494370138123060, -0.904473044729426020, -0.904451717059546300, -0.904430387128537410, +-0.904409054936452630, -0.904387720483345150, -0.904366383769268260, -0.904345044794275470, -0.904323703558420180, -0.904302360061755570, -0.904281014304334940, -0.904259666286211910, +-0.904238316007439650, -0.904216963468071680, -0.904195608668161180, -0.904174251607761770, -0.904152892286926750, -0.904131530705709290, -0.904110166864163120, -0.904088800762341660, +-0.904067432400298080, -0.904046061778085890, -0.904024688895758600, -0.904003313753369620, -0.903981936350972350, -0.903960556688620080, -0.903939174766366650, -0.903917790584265250, +-0.903896404142369270, -0.903875015440732230, -0.903853624479407760, -0.903832231258449250, -0.903810835777910220, -0.903789438037843840, -0.903768038038304080, -0.903746635779344220, +-0.903725231261017780, -0.903703824483378050, -0.903682415446478980, -0.903661004150373870, -0.903639590595116000, -0.903618174780759340, -0.903596756707357280, -0.903575336374963340, +-0.903553913783630920, -0.903532488933413870, -0.903511061824365580, -0.903489632456539680, -0.903468200829989470, -0.903446766944768890, -0.903425330800931460, -0.903403892398530690, +-0.903382451737620000, -0.903361008818253430, -0.903339563640484290, -0.903318116204366190, -0.903296666509952660, -0.903275214557297650, -0.903253760346454550, -0.903232303877476990, +-0.903210845150418720, -0.903189384165333450, -0.903167920922274710, -0.903146455421295900, -0.903124987662451200, -0.903103517645794000, -0.903082045371378040, -0.903060570839256730, +-0.903039094049484240, -0.903017615002113970, -0.902996133697199670, -0.902974650134794830, -0.902953164314953540, -0.902931676237729410, -0.902910185903176070, -0.902888693311347020, +-0.902867198462296460, -0.902845701356078000, -0.902824201992744930, -0.902802700372351660, -0.902781196494951590, -0.902759690360598550, -0.902738181969346080, -0.902716671321248440, +-0.902695158416359060, -0.902673643254731760, -0.902652125836420070, -0.902630606161478390, -0.902609084229960220, -0.902587560041919200, -0.902566033597409170, -0.902544504896484300, +-0.902522973939198110, -0.902501440725604450, -0.902479905255757050, -0.902458367529710090, -0.902436827547517200, -0.902415285309232210, -0.902393740814908860, -0.902372194064601230, +-0.902350645058363270, -0.902329093796248370, -0.902307540278311060, -0.902285984504604840, -0.902264426475183680, -0.902242866190101190, -0.902221303649411780, -0.902199738853169180, +-0.902178171801427120, -0.902156602494239460, -0.902135030931660590, -0.902113457113744020, -0.902091881040543830, -0.902070302712113750, -0.902048722128508170, -0.902027139289780730, +-0.902005554195985490, -0.901983966847176080, -0.901962377243407000, -0.901940785384731990, -0.901919191271204790, -0.901897594902879800, -0.901875996279810850, -0.901854395402051920, +-0.901832792269656850, -0.901811186882679920, -0.901789579241175090, -0.901767969345196210, -0.901746357194797230, -0.901724742790032670, -0.901703126130956160, -0.901681507217621860, +-0.901659886050083630, -0.901638262628395750, -0.901616636952612290, -0.901595009022787330, -0.901573378838974480, -0.901551746401228480, -0.901530111709603180, -0.901508474764152300, +-0.901486835564930480, -0.901465194111991550, -0.901443550405389590, -0.901421904445178670, -0.901400256231413070, -0.901378605764146860, -0.901356953043434220, -0.901335298069328880, +-0.901313640841885590, -0.901291981361158180, -0.901270319627200720, -0.901248655640067400, -0.901226989399812610, -0.901205320906490300, -0.901183650160154670, -0.901161977160859770, +-0.901140301908660120, -0.901118624403609680, -0.901096944645762510, -0.901075262635173120, -0.901053578371895700, -0.901031891855984200, -0.901010203087492910, -0.900988512066476120, +-0.900966818792988230, -0.900945123267083200, -0.900923425488815210, -0.900901725458238770, -0.900880023175408160, -0.900858318640377350, -0.900836611853200630, -0.900814902813932620, +-0.900793191522627270, -0.900771477979338990, -0.900749762184121730, -0.900728044137030340, -0.900706323838118880, -0.900684601287441540, -0.900662876485052500, -0.900641149431006480, +-0.900619420125357560, -0.900597688568159920, -0.900575954759468280, -0.900554218699336720, -0.900532480387819630, -0.900510739824971100, -0.900488997010845950, -0.900467251945498370, +-0.900445504628982650, -0.900423755061352860, -0.900402003242663950, -0.900380249172969990, -0.900358492852325500, -0.900336734280784530, -0.900314973458401950, -0.900293210385231910, +-0.900271445061328830, -0.900249677486746890, -0.900227907661541040, -0.900206135585765450, -0.900184361259474210, -0.900162584682722370, -0.900140805855564000, -0.900119024778053610, +-0.900097241450245500, -0.900075455872194510, -0.900053668043954810, -0.900031877965581040, -0.900010085637127260, -0.899988291058648530, -0.899966494230199030, -0.899944695151833400, +-0.899922893823605690, -0.899901090245571080, -0.899879284417783640, -0.899857476340298000, -0.899835666013168560, -0.899813853436450040, -0.899792038610196960, -0.899770221534463620, +-0.899748402209304850, -0.899726580634775060, -0.899704756810928870, -0.899682930737820570, -0.899661102415505120, -0.899639271844037030, -0.899617439023470580, -0.899595603953860510, +-0.899573766635261450, -0.899551927067728130, -0.899530085251314950, -0.899508241186076310, -0.899486394872067270, -0.899464546309342360, -0.899442695497955970, -0.899420842437962610, +-0.899398987129417460, -0.899377129572374810, -0.899355269766889290, -0.899333407713015400, -0.899311543410808210, -0.899289676860322130, -0.899267808061611660, -0.899245937014731990, +-0.899224063719737400, -0.899202188176682630, -0.899180310385622180, -0.899158430346611140, -0.899136548059704110, -0.899114663524955620, -0.899092776742420270, -0.899070887712153270, +-0.899048996434208990, -0.899027102908642180, -0.899005207135507470, -0.898983309114860020, -0.898961408846754130, -0.898939506331244860, -0.898917601568386520, -0.898895694558234480, +-0.898873785300843050, -0.898851873796267080, -0.898829960044561620, -0.898808044045781300, -0.898786125799980740, -0.898764205307214790, -0.898742282567538410, -0.898720357581006430, +-0.898698430347673490, -0.898676500867594320, -0.898654569140824090, -0.898632635167417430, -0.898610698947429180, -0.898588760480913960, -0.898566819767927070, -0.898544876808523130, +-0.898522931602756980, -0.898500984150683250, -0.898479034452357330, -0.898457082507833850, -0.898435128317167430, -0.898413171880413360, -0.898391213197626380, -0.898369252268861440, +-0.898347289094173050, -0.898325323673616730, -0.898303356007247090, -0.898281386095118980, -0.898259413937287250, -0.898237439533807190, -0.898215462884733530, -0.898193483990121220, +-0.898171502850025010, -0.898149519464500280, -0.898127533833601670, -0.898105545957384340, -0.898083555835902820, -0.898061563469212620, -0.898039568857368580, -0.898017572000425420, +-0.897995572898438450, -0.897973571551462620, -0.897951567959552890, -0.897929562122763980, -0.897907554041151300, -0.897885543714769810, -0.897863531143674450, -0.897841516327920090, +-0.897819499267562100, -0.897797479962655460, -0.897775458413255010, -0.897753434619415810, -0.897731408581193160, -0.897709380298642000, -0.897687349771817300, -0.897665317000774120, +-0.897643281985567860, -0.897621244726253380, -0.897599205222885830, -0.897577163475519970, -0.897555119484211520, -0.897533073249015210, -0.897511024769986010, -0.897488974047179420, +-0.897466921080650400, -0.897444865870454130, -0.897422808416645460, -0.897400748719279990, -0.897378686778412590, -0.897356622594098540, -0.897334556166392680, -0.897312487495350640, +-0.897290416581027480, -0.897268343423478170, -0.897246268022757860, -0.897224190378922090, -0.897202110492025810, -0.897180028362124180, -0.897157943989272400, -0.897135857373525860, +-0.897113768514939740, -0.897091677413568990, -0.897069584069469240, -0.897047488482695550, -0.897025390653303110, -0.897003290581347090, -0.896981188266883000, -0.896959083709965800, +-0.896936976910651000, -0.896914867868993660, -0.896892756585049190, -0.896870643058872870, -0.896848527290520000, -0.896826409280045530, -0.896804289027505310, -0.896782166532954280, +-0.896760041796447970, -0.896737914818041220, -0.896715785597789970, -0.896693654135749200, -0.896671520431974180, -0.896649384486520430, -0.896627246299443350, -0.896605105870798000, +-0.896582963200639790, -0.896560818289024450, -0.896538671136006940, -0.896516521741642760, -0.896494370105987090, -0.896472216229095790, -0.896450060111023790, -0.896427901751826740, +-0.896405741151559800, -0.896383578310278590, -0.896361413228038420, -0.896339245904894780, -0.896317076340902850, -0.896294904536118380, -0.896272730490596640, -0.896250554204393150, +-0.896228375677562970, -0.896206194910162070, -0.896184011902245730, -0.896161826653869120, -0.896139639165088210, -0.896117449435958170, -0.896095257466534510, -0.896073063256872530, +-0.896050866807028060, -0.896028668117056390, -0.896006467187013040, -0.895984264016953410, -0.895962058606933230, -0.895939850957008010, -0.895917641067233040, -0.895895428937663830, +-0.895873214568356220, -0.895850997959365620, -0.895828779110747540, -0.895806558022557260, -0.895784334694850860, -0.895762109127683500, -0.895739881321110820, -0.895717651275188540, +-0.895695418989972070, -0.895673184465517140, -0.895650947701879030, -0.895628708699113820, -0.895606467457276790, -0.895584223976423570, -0.895561978256609550, -0.895539730297890910, +-0.895517480100322840, -0.895495227663961060, -0.895472972988861080, -0.895450716075078870, -0.895428456922669810, -0.895406195531689650, -0.895383931902193790, -0.895361666034238280, +-0.895339397927878640, -0.895317127583170280, -0.895294855000169370, -0.895272580178931190, -0.895250303119511700, -0.895228023821966200, -0.895205742286350750, -0.895183458512721080, +-0.895161172501132700, -0.895138884251641230, -0.895116593764302640, -0.895094301039172650, -0.895072006076306880, -0.895049708875760960, -0.895027409437590960, -0.895005107761852380, +-0.894982803848601070, -0.894960497697892540, -0.894938189309782970, -0.894915878684327870, -0.894893565821582970, -0.894871250721604230, -0.894848933384447490, -0.894826613810168370, +-0.894804291998822500, -0.894781967950466160, -0.894759641665154760, -0.894737313142944360, -0.894714982383890470, -0.894692649388049380, -0.894670314155476600, -0.894647976686227970, +-0.894625636980359350, -0.894603295037926790, -0.894580950858985920, -0.894558604443592700, -0.894536255791802850, -0.894513904903672440, -0.894491551779257320, -0.894469196418613330, +-0.894446838821796210, -0.894424478988862130, -0.894402116919866820, -0.894379752614866020, -0.894357386073916130, -0.894335017297072650, -0.894312646284391780, -0.894290273035928900, +-0.894267897551740740, -0.894245519831882720, -0.894223139876410890, -0.894200757685381100, -0.894178373258849520, -0.894155986596872010, -0.894133597699504620, -0.894111206566802990, +-0.894088813198823500, -0.894066417595622000, -0.894044019757254560, -0.894021619683776800, -0.893999217375245130, -0.893976812831715480, -0.893954406053243610, -0.893931997039885800, +-0.893909585791698100, -0.893887172308736490, -0.893864756591056690, -0.893842338638715210, -0.893819918451767890, -0.893797496030270700, -0.893775071374279690, -0.893752644483851060, +-0.893730215359040960, -0.893707783999905250, -0.893685350406499880, -0.893662914578881360, -0.893640476517105540, -0.893618036221228600, -0.893595593691306260, -0.893573148927395140, +-0.893550701929551220, -0.893528252697830320, -0.893505801232288950, -0.893483347532983090, -0.893460891599968890, -0.893438433433302310, -0.893415973033039770, -0.893393510399237310, +-0.893371045531951010, -0.893348578431237050, -0.893326109097151710, -0.893303637529751170, -0.893281163729091500, -0.893258687695228760, -0.893236209428219460, -0.893213728928119680, +-0.893191246194985580, -0.893168761228873120, -0.893146274029838930, -0.893123784597939060, -0.893101292933229820, -0.893078799035767150, -0.893056302905607560, -0.893033804542807340, +-0.893011303947422340, -0.892988801119509290, -0.892966296059124250, -0.892943788766323410, -0.892921279241162940, -0.892898767483699560, -0.892876253493989140, -0.892853737272088170, +-0.892831218818052610, -0.892808698131939190, -0.892786175213803990, -0.892763650063703510, -0.892741122681693590, -0.892718593067831080, -0.892696061222172040, -0.892673527144772880, +-0.892650990835689770, -0.892628452294979220, -0.892605911522697750, -0.892583368518901190, -0.892560823283646390, -0.892538275816989520, -0.892515726118987110, -0.892493174189694980, +-0.892470620029170210, -0.892448063637468980, -0.892425505014647460, -0.892402944160762050, -0.892380381075869480, -0.892357815760025820, -0.892335248213287800, -0.892312678435711380, +-0.892290106427353510, -0.892267532188270260, -0.892244955718518360, -0.892222377018153770, -0.892199796087233430, -0.892177212925813530, -0.892154627533950470, -0.892132039911701090, +-0.892109450059121570, -0.892086857976268410, -0.892064263663197910, -0.892041667119967020, -0.892019068346631920, -0.891996467343249110, -0.891973864109874890, -0.891951258646566330, +-0.891928650953379590, -0.891906041030371190, -0.891883428877597530, -0.891860814495115450, -0.891838197882981350, -0.891815579041251750, -0.891792957969983040, -0.891770334669232060, +-0.891747709139055320, -0.891725081379509120, -0.891702451390650300, -0.891679819172535470, -0.891657184725221040, -0.891634548048763410, -0.891611909143219750, -0.891589268008646130, +-0.891566624645099500, -0.891543979052636050, -0.891521331231312830, -0.891498681181186360, -0.891476028902313030, -0.891453374394749590, -0.891430717658552860, -0.891408058693779260, +-0.891385397500485620, -0.891362734078728240, -0.891340068428564280, -0.891317400550050040, -0.891294730443242370, -0.891272058108197650, -0.891249383544973070, -0.891226706753624920, +-0.891204027734209920, -0.891181346486784930, -0.891158663011406670, -0.891135977308131650, -0.891113289377016500, -0.891090599218118400, -0.891067906831493840, -0.891045212217199340, +-0.891022515375291760, -0.890999816305828030, -0.890977115008864780, -0.890954411484458750, -0.890931705732666450, -0.890908997753545150, -0.890886287547151380, -0.890863575113541860, +-0.890840860452773110, -0.890818143564902520, -0.890795424449986490, -0.890772703108081760, -0.890749979539245400, -0.890727253743534230, -0.890704525721004780, -0.890681795471713890, +-0.890659062995718730, -0.890636328293075820, -0.890613591363842220, -0.890590852208074320, -0.890568110825829540, -0.890545367217164490, -0.890522621382136000, -0.890499873320800830, +-0.890477123033216130, -0.890454370519438540, -0.890431615779525120, -0.890408858813532490, -0.890386099621517820, -0.890363338203537970, -0.890340574559649540, -0.890317808689909840, +-0.890295040594375700, -0.890272270273103960, -0.890249497726151250, -0.890226722953575080, -0.890203945955432060, -0.890181166731779160, -0.890158385282673210, -0.890135601608171510, +-0.890112815708330670, -0.890090027583207990, -0.890067237232859850, -0.890044444657343890, -0.890021649856716830, -0.889998852831035640, -0.889976053580357140, -0.889953252104738750, +-0.889930448404237180, -0.889907642478909410, -0.889884834328812380, -0.889862023954003490, -0.889839211354539580, -0.889816396530477390, -0.889793579481874430, -0.889770760208787540, +-0.889747938711273670, -0.889725114989389780, -0.889702289043193370, -0.889679460872741190, -0.889656630478090400, -0.889633797859297750, -0.889610963016420840, -0.889588125949516530, +-0.889565286658641980, -0.889542445143853940, -0.889519601405209910, -0.889496755442766960, -0.889473907256582150, -0.889451056846712330, -0.889428204213215110, -0.889405349356147350, +-0.889382492275565980, -0.889359632971528650, -0.889336771444092180, -0.889313907693313870, -0.889291041719250550, -0.889268173521959750, -0.889245303101498630, -0.889222430457924150, +-0.889199555591293490, -0.889176678501664040, -0.889153799189092990, -0.889130917653637390, -0.889108033895354310, -0.889085147914301270, -0.889062259710535430, -0.889039369284113980, +-0.889016476635093870, -0.888993581763532830, -0.888970684669487700, -0.888947785353015770, -0.888924883814174560, -0.888901980053021120, -0.888879074069612640, -0.888856165864006400, +-0.888833255436259910, -0.888810342786430340, -0.888787427914574880, -0.888764510820750590, -0.888741591505015300, -0.888718669967425990, -0.888695746208039930, -0.888672820226914410, +-0.888649892024107050, -0.888626961599674910, -0.888604028953675410, -0.888581094086165590, -0.888558156997203200, -0.888535217686845510, -0.888512276155149490, -0.888489332402173090, +-0.888466386427973260, -0.888443438232607520, -0.888420487816133030, -0.888397535178607420, -0.888374580320087980, -0.888351623240632100, -0.888328663940296970, -0.888305702419140420, +-0.888282738677219630, -0.888259772714591890, -0.888236804531314590, -0.888213834127445480, -0.888190861503041830, -0.888167886658160930, -0.888144909592860190, -0.888121930307197330, +-0.888098948801229640, -0.888075965075014630, -0.888052979128609480, -0.888029990962072020, -0.888007000575459670, -0.887984007968829590, -0.887961013142239630, -0.887938016095747300, +-0.887915016829409760, -0.887892015343284550, -0.887869011637429480, -0.887846005711901980, -0.887822997566759310, -0.887799987202058990, -0.887776974617858980, -0.887753959814216450, +-0.887730942791189140, -0.887707923548834100, -0.887684902087209630, -0.887661878406372780, -0.887638852506381300, -0.887615824387292470, -0.887592794049164250, -0.887569761492054020, +-0.887546726716019310, -0.887523689721117840, -0.887500650507407230, -0.887477609074945000, -0.887454565423788530, -0.887431519553995800, -0.887408471465624290, -0.887385421158731650, +-0.887362368633375250, -0.887339313889613070, -0.887316256927502710, -0.887293197747101580, -0.887270136348467410, -0.887247072731657930, -0.887224006896730870, -0.887200938843743850, +-0.887177868572754160, -0.887154796083819970, -0.887131721376998920, -0.887108644452348270, -0.887085565309926330, -0.887062483949790370, -0.887039400371998240, -0.887016314576607350, +-0.886993226563675960, -0.886970136333261490, -0.886947043885421670, -0.886923949220214000, -0.886900852337696670, -0.886877753237927280, -0.886854651920963470, -0.886831548386862730, +-0.886808442635683370, -0.886785334667482990, -0.886762224482319230, -0.886739112080249690, -0.886715997461332560, -0.886692880625625460, -0.886669761573186220, -0.886646640304072250, +-0.886623516818341950, -0.886600391116052820, -0.886577263197262600, -0.886554133062029350, -0.886531000710410800, -0.886507866142464680, -0.886484729358248740, -0.886461590357821240, +-0.886438449141239700, -0.886415305708562080, -0.886392160059845890, -0.886369012195149630, -0.886345862114530700, -0.886322709818047280, -0.886299555305756770, -0.886276398577717560, +-0.886253239633987500, -0.886230078474624210, -0.886206915099685520, -0.886183749509229850, -0.886160581703314690, -0.886137411681997890, -0.886114239445337850, -0.886091064993392070, +-0.886067888326218740, -0.886044709443875480, -0.886021528346420670, -0.885998345033911950, -0.885975159506407480, -0.885951971763964790, -0.885928781806642470, -0.885905589634498170, +-0.885882395247589830, -0.885859198645975400, -0.885835999829713060, -0.885812798798860770, -0.885789595553476580, -0.885766390093618130, -0.885743182419343910, -0.885719972530711660, +-0.885696760427779340, -0.885673546110605340, -0.885650329579247500, -0.885627110833763780, -0.885603889874212010, -0.885580666700650830, -0.885557441313137960, -0.885534213711731470, +-0.885510983896489300, -0.885487751867469860, -0.885464517624731000, -0.885441281168330870, -0.885418042498327230, -0.885394801614778790, -0.885371558517743410, -0.885348313207279030, +-0.885325065683443710, -0.885301815946295870, -0.885278563995893550, -0.885255309832294610, -0.885232053455557550, -0.885208794865740440, -0.885185534062901350, -0.885162271047098100, +-0.885139005818389450, -0.885115738376833330, -0.885092468722487810, -0.885069196855410970, -0.885045922775661300, -0.885022646483296760, -0.884999367978375640, -0.884976087260956000, +-0.884952804331096240, -0.884929519188854430, -0.884906231834288960, -0.884882942267457560, -0.884859650488419190, -0.884836356497231580, -0.884813060293953010, -0.884789761878641670, +-0.884766461251356160, -0.884743158412154450, -0.884719853361094710, -0.884696546098235450, -0.884673236623634840, -0.884649924937351170, -0.884626611039442510, -0.884603294929967480, +-0.884579976608984240, -0.884556656076550980, -0.884533333332725990, -0.884510008377567770, -0.884486681211134610, -0.884463351833484680, -0.884440020244676160, -0.884416686444767900, +-0.884393350433817840, -0.884370012211884380, -0.884346671779025820, -0.884323329135300650, -0.884299984280767170, -0.884276637215483550, -0.884253287939508640, -0.884229936452900380, +-0.884206582755717290, -0.884183226848017530, -0.884159868729859970, -0.884136508401302760, -0.884113145862404190, -0.884089781113222670, -0.884066414153816820, -0.884043044984244910, +-0.884019673604565460, -0.883996300014836530, -0.883972924215117080, -0.883949546205465400, -0.883926165985939760, -0.883902783556598570, -0.883879398917500670, -0.883856012068704120, +-0.883832623010267440, -0.883809231742249460, -0.883785838264708250, -0.883762442577702530, -0.883739044681290500, -0.883715644575531090, -0.883692242260482490, -0.883668837736203310, +-0.883645431002751840, -0.883622022060187030, -0.883598610908567170, -0.883575197547950770, -0.883551781978396120, -0.883528364199962280, -0.883504944212707530, -0.883481522016690390, +-0.883458097611969250, -0.883434670998603070, -0.883411242176650240, -0.883387811146169270, -0.883364377907218560, -0.883340942459857060, -0.883317504804143280, -0.883294064940135510, +-0.883270622867892820, -0.883247178587473590, -0.883223732098936340, -0.883200283402339580, -0.883176832497742370, -0.883153379385203000, -0.883129924064780300, -0.883106466536532460, +-0.883083006800518660, -0.883059544856797380, -0.883036080705427270, -0.883012614346466720, -0.882989145779974890, -0.882965675006010200, -0.882942202024631250, -0.882918726835896560, +-0.882895249439865300, -0.882871769836595990, -0.882848288026147010, -0.882824804008577440, -0.882801317783945990, -0.882777829352311190, -0.882754338713731550, -0.882730845868266330, +-0.882707350815973960, -0.882683853556913260, -0.882660354091142630, -0.882636852418721470, -0.882613348539708080, -0.882589842454161280, -0.882566334162139810, -0.882542823663702620, +-0.882519310958908340, -0.882495796047815810, -0.882472278930483630, -0.882448759606970890, -0.882425238077336300, -0.882401714341638390, -0.882378188399936430, -0.882354660252288920, +-0.882331129898754840, -0.882307597339392680, -0.882284062574261730, -0.882260525603420720, -0.882236986426928270, -0.882213445044843230, -0.882189901457224760, -0.882166355664131490, +-0.882142807665622470, -0.882119257461756120, -0.882095705052591830, -0.882072150438188320, -0.882048593618604330, -0.882025034593898800, -0.882001473364130820, -0.881977909929359090, +-0.881954344289642700, -0.881930776445040140, -0.881907206395610930, -0.881883634141413690, -0.881860059682507140, -0.881836483018950680, -0.881812904150802930, -0.881789323078122970, +-0.881765739800969510, -0.881742154319401950, -0.881718566633478920, -0.881694976743259470, -0.881671384648802460, -0.881647790350167160, -0.881624193847412310, -0.881600595140597080, +-0.881576994229780090, -0.881553391115020850, -0.881529785796378080, -0.881506178273910870, -0.881482568547678040, -0.881458956617738990, -0.881435342484152560, -0.881411726146977600, +-0.881388107606273510, -0.881364486862099120, -0.881340863914513490, -0.881317238763575480, -0.881293611409344590, -0.881269981851879770, -0.881246350091239860, -0.881222716127483930, +-0.881199079960671480, -0.881175441590861250, -0.881151801018112410, -0.881128158242483920, -0.881104513264035270, -0.881080866082825210, -0.881057216698913130, -0.881033565112357640, +-0.881009911323218600, -0.880986255331554720, -0.880962597137424970, -0.880938936740888970, -0.880915274142005660, -0.880891609340834100, -0.880867942337433260, -0.880844273131862860, +-0.880820601724181750, -0.880796928114449210, -0.880773252302724070, -0.880749574289065970, -0.880725894073533970, -0.880702211656187230, -0.880678527037084820, -0.880654840216286260, +-0.880631151193850600, -0.880607459969837030, -0.880583766544304590, -0.880560070917313030, -0.880536373088921190, -0.880512673059188230, -0.880488970828173900, -0.880465266395937030, +-0.880441559762537020, -0.880417850928032930, -0.880394139892484380, -0.880370426655950560, -0.880346711218490620, -0.880322993580163640, -0.880299273741029450, -0.880275551701147130, +-0.880251827460575840, -0.880228101019374760, -0.880204372377603740, -0.880180641535321720, -0.880156908492588100, -0.880133173249461940, -0.880109435806003200, -0.880085696162270730, +-0.880061954318324120, -0.880038210274222350, -0.880014464030025260, -0.879990715585792120, -0.879966964941581890, -0.879943212097454410, -0.879919457053468970, -0.879895699809684850, +-0.879871940366161340, -0.879848178722958170, -0.879824414880134520, -0.879800648837749890, -0.879776880595863340, -0.879753110154534830, -0.879729337513823540, -0.879705562673788970, +-0.879681785634490180, -0.879658006395987240, -0.879634224958339210, -0.879610441321605710, -0.879586655485845800, -0.879562867451119450, -0.879539077217486030, -0.879515284785004630, +-0.879491490153735290, -0.879467693323737200, -0.879443894295069860, -0.879420093067792560, -0.879396289641965260, -0.879372484017647230, -0.879348676194897980, -0.879324866173776920, +-0.879301053954343770, -0.879277239536658040, -0.879253422920779240, -0.879229604106766650, -0.879205783094680230, -0.879181959884579370, -0.879158134476523690, -0.879134306870572370, +-0.879110477066785580, -0.879086645065222490, -0.879062810865942620, -0.879038974469005920, -0.879015135874471890, -0.878991295082399930, -0.878967452092849430, -0.878943606905880690, +-0.878919759521552770, -0.878895909939925610, -0.878872058161058400, -0.878848204185011190, -0.878824348011843500, -0.878800489641615060, -0.878776629074385030, -0.878752766310213710, +-0.878728901349160480, -0.878705034191284980, -0.878681164836646710, -0.878657293285305620, -0.878633419537321440, -0.878609543592753670, -0.878585665451661830, -0.878561785114105990, +-0.878537902580145750, -0.878514017849840510, -0.878490130923250460, -0.878466241800435090, -0.878442350481454140, -0.878418456966367000, -0.878394561255233960, -0.878370663348114640, +-0.878346763245068550, -0.878322860946155300, -0.878298956451435190, -0.878275049760967710, -0.878251140874812600, -0.878227229793029360, -0.878203316515678290, -0.878179401042818890, +-0.878155483374511100, -0.878131563510814230, -0.878107641451788770, -0.878083717197494230, -0.878059790747990120, -0.878035862103336730, -0.878011931263593780, -0.877987998228820900, +-0.877964062999077920, -0.877940125574424910, -0.877916185954921600, -0.877892244140627830, -0.877868300131603220, -0.877844353927908160, -0.877820405529602170, -0.877796454936745070, +-0.877772502149396730, -0.877748547167617300, -0.877724589991466520, -0.877700630621004340, -0.877676669056290270, -0.877652705297384710, -0.877628739344347490, -0.877604771197238120, +-0.877580800856117120, -0.877556828321044090, -0.877532853592079000, -0.877508876669281460, -0.877484897552712080, -0.877460916242430390, -0.877436932738496430, -0.877412947040969840, +-0.877388959149911220, -0.877364969065380200, -0.877340976787436720, -0.877316982316140530, -0.877292985651552120, -0.877268986793731330, -0.877244985742737900, -0.877220982498632010, +-0.877196977061473700, -0.877172969431323060, -0.877148959608239800, -0.877124947592284210, -0.877100933383516360, -0.877076916981996190, -0.877052898387783440, -0.877028877600938730, +-0.877004854621521780, -0.876980829449592770, -0.876956802085211320, -0.876932772528438260, -0.876908740779333120, -0.876884706837956270, -0.876860670704367350, -0.876836632378626970, +-0.876812591860794970, -0.876788549150931520, -0.876764504249096580, -0.876740457155350540, -0.876716407869753240, -0.876692356392365090, -0.876668302723245700, -0.876644246862455790, +-0.876620188810055320, -0.876596128566104140, -0.876572066130662850, -0.876548001503791420, -0.876523934685550010, -0.876499865675998470, -0.876475794475197520, -0.876451721083207120, +-0.876427645500087340, -0.876403567725898340, -0.876379487760700520, -0.876355405604554050, -0.876331321257519000, -0.876307234719655550, -0.876283145991024190, -0.876259055071684890, +-0.876234961961698030, -0.876210866661123470, -0.876186769170022030, -0.876162669488453670, -0.876138567616478350, -0.876114463554156900, -0.876090357301549270, -0.876066248858715760, +-0.876042138225716300, -0.876018025402611870, -0.875993910389462280, -0.875969793186327950, -0.875945673793268930, -0.875921552210345960, -0.875897428437619090, -0.875873302475148610, +-0.875849174322994690, -0.875825043981217970, -0.875800911449878820, -0.875776776729037200, -0.875752639818753510, -0.875728500719088480, -0.875704359430102160, -0.875680215951854750, +-0.875656070284406950, -0.875631922427819060, -0.875607772382151260, -0.875583620147463940, -0.875559465723817710, -0.875535309111272750, -0.875511150309889690, -0.875486989319728350, +-0.875462826140849910, -0.875438660773314340, -0.875414493217182120, -0.875390323472513440, -0.875366151539369140, -0.875341977417809500, -0.875317801107894920, -0.875293622609685680, +-0.875269441923242520, -0.875245259048625710, -0.875221073985895880, -0.875196886735113090, -0.875172697296338290, -0.875148505669631760, -0.875124311855053680, -0.875100115852665120, +-0.875075917662526240, -0.875051717284697660, -0.875027514719239450, -0.875003309966212670, -0.874979103025677720, -0.874954893897694870, -0.874930682582324650, -0.874906469079627990, +-0.874882253389665080, -0.874858035512496520, -0.874833815448182730, -0.874809593196784530, -0.874785368758362440, -0.874761142132976950, -0.874736913320688260, -0.874712682321557630, +-0.874688449135645250, -0.874664213763011510, -0.874639976203717360, -0.874615736457823420, -0.874591494525390090, -0.874567250406477760, -0.874543004101147600, -0.874518755609459910, +-0.874494504931475400, -0.874470252067254260, -0.874445997016857770, -0.874421739780346320, -0.874397480357780530, -0.874373218749220800, -0.874348954954728200, -0.874324688974363220, +-0.874300420808186600, -0.874276150456258620, -0.874251877918640450, -0.874227603195392720, -0.874203326286575710, -0.874179047192250590, -0.874154765912477760, -0.874130482447318170, +-0.874106196796832100, -0.874081908961080730, -0.874057618940124570, -0.874033326734024450, -0.874009032342840770, -0.873984735766634710, -0.873960437005466770, -0.873936136059397790, +-0.873911832928488170, -0.873887527612799310, -0.873863220112391590, -0.873838910427325750, -0.873814598557662410, -0.873790284503462970, -0.873765968264787700, -0.873741649841697220, +-0.873717329234252940, -0.873693006442515240, -0.873668681466545080, -0.873644354306403080, -0.873620024962150300, -0.873595693433847460, -0.873571359721555530, -0.873547023825334780, +-0.873522685745246830, -0.873498345481352080, -0.873474003033711590, -0.873449658402385750, -0.873425311587436080, -0.873400962588923080, -0.873376611406907590, -0.873352258041450450, +-0.873327902492612940, -0.873303544760455570, -0.873279184845039300, -0.873254822746424960, -0.873230458464673730, -0.873206091999846330, -0.873181723352003610, -0.873157352521206740, +-0.873132979507516340, -0.873108604310993690, -0.873084226931699180, -0.873059847369694440, -0.873035465625039970, -0.873011081697796950, -0.872986695588025880, -0.872962307295788390, +-0.872937916821145080, -0.872913524164157020, -0.872889129324884830, -0.872864732303390120, -0.872840333099733630, -0.872815931713976200, -0.872791528146178770, -0.872767122396402750, +-0.872742714464708860, -0.872718304351158050, -0.872693892055811720, -0.872669477578730590, -0.872645060919975730, -0.872620642079608100, -0.872596221057688970, -0.872571797854279410, +-0.872547372469440250, -0.872522944903232570, -0.872498515155717640, -0.872474083226956410, -0.872449649117010060, -0.872425212825939320, -0.872400774353805700, -0.872376333700670250, +-0.872351890866593930, -0.872327445851637680, -0.872302998655862920, -0.872278549279330790, -0.872254097722102050, -0.872229643984238300, -0.872205188065800390, -0.872180729966849590, +-0.872156269687446640, -0.872131807227653270, -0.872107342587530420, -0.872082875767139170, -0.872058406766540560, -0.872033935585796120, -0.872009462224966890, -0.871984986684113950, +-0.871960508963298350, -0.871936029062581720, -0.871911546982024890, -0.871887062721689370, -0.871862576281635880, -0.871838087661926160, -0.871813596862621280, -0.871789103883782280, +-0.871764608725470460, -0.871740111387747210, -0.871715611870673810, -0.871691110174311110, -0.871666606298720730, -0.871642100243963940, -0.871617592010101920, -0.871593081597195730, +-0.871568569005306990, -0.871544054234496880, -0.871519537284826560, -0.871495018156357220, -0.871470496849150570, -0.871445973363267680, -0.871421447698769840, -0.871396919855718100, +-0.871372389834174420, -0.871347857634199640, -0.871323323255855260, -0.871298786699202350, -0.871274247964302750, -0.871249707051217400, -0.871225163960007710, -0.871200618690735280, +-0.871176071243461190, -0.871151521618247050, -0.871126969815153920, -0.871102415834243530, -0.871077859675577050, -0.871053301339215990, -0.871028740825221410, -0.871004178133655160, +-0.870979613264578620, -0.870955046218052860, -0.870930476994139390, -0.870905905592899930, -0.870881332014395660, -0.870856756258688080, -0.870832178325838480, -0.870807598215908580, +-0.870783015928959680, -0.870758431465052940, -0.870733844824250420, -0.870709256006613310, -0.870684665012203100, -0.870660071841080960, -0.870635476493308860, -0.870610878968947950, +-0.870586279268059980, -0.870561677390706110, -0.870537073336948190, -0.870512467106847600, -0.870487858700465860, -0.870463248117864350, -0.870438635359104820, -0.870414020424248760, +-0.870389403313357570, -0.870364784026492640, -0.870340162563716050, -0.870315538925089060, -0.870290913110672970, -0.870266285120529840, -0.870241654954720940, -0.870217022613308020, +-0.870192388096352240, -0.870167751403915670, -0.870143112536059800, -0.870118471492846160, -0.870093828274336010, -0.870069182880591650, -0.870044535311674250, -0.870019885567645530, +-0.869995233648566790, -0.869970579554500300, -0.869945923285507350, -0.869921264841649560, -0.869896604222988420, -0.869871941429586020, -0.869847276461503730, -0.869822609318803170, +-0.869797940001545980, -0.869773268509794080, -0.869748594843609110, -0.869723919003052350, -0.869699240988185960, -0.869674560799071570, -0.869649878435770800, -0.869625193898345030, +-0.869600507186856550, -0.869575818301366770, -0.869551127241937500, -0.869526434008630060, -0.869501738601506920, -0.869477041020629280, -0.869452341266059080, -0.869427639337857940, +-0.869402935236087800, -0.869378228960810300, -0.869353520512087250, -0.869328809889980290, -0.869304097094551360, -0.869279382125862310, -0.869254664983974520, -0.869229945668950400, +-0.869205224180851220, -0.869180500519739160, -0.869155774685675510, -0.869131046678722760, -0.869106316498942320, -0.869081584146396020, -0.869056849621145600, -0.869032112923253330, +-0.869007374052780720, -0.868982633009789730, -0.868957889794341850, -0.868933144406499600, -0.868908396846324370, -0.868883647113878220, -0.868858895209222660, -0.868834141132420080, +-0.868809384883532210, -0.868784626462620670, -0.868759865869747740, -0.868735103104975150, -0.868710338168364850, -0.868685571059978460, -0.868660801779878260, -0.868636030328126200, +-0.868611256704784010, -0.868586480909913420, -0.868561702943576930, -0.868536922805836050, -0.868512140496752960, -0.868487356016389270, -0.868462569364807480, -0.868437780542069220, +-0.868412989548236540, -0.868388196383371060, -0.868363401047535400, -0.868338603540791290, -0.868313803863200560, -0.868289002014825170, -0.868264197995727400, -0.868239391805969210, +-0.868214583445612310, -0.868189772914719220, -0.868164960213351660, -0.868140145341571690, -0.868115328299441160, -0.868090509087022450, -0.868065687704377530, -0.868040864151568450, +-0.868016038428656930, -0.867991210535705490, -0.867966380472776080, -0.867941548239930750, -0.867916713837231240, -0.867891877264740260, -0.867867038522519450, -0.867842197610631190, +-0.867817354529137110, -0.867792509278099920, -0.867767661857581470, -0.867742812267643600, -0.867717960508349040, -0.867693106579759400, -0.867668250481937080, -0.867643392214943910, +-0.867618531778842520, -0.867593669173694740, -0.867568804399562850, -0.867543937456508710, -0.867519068344594910, -0.867494197063883420, -0.867469323614436520, -0.867444447996316040, +-0.867419570209584710, -0.867394690254304380, -0.867369808130537320, -0.867344923838345610, -0.867320037377791730, -0.867295148748937760, -0.867270257951845760, -0.867245364986578340, +-0.867220469853197450, -0.867195572551765380, -0.867170673082344190, -0.867145771444996490, -0.867120867639784470, -0.867095961666770170, -0.867071053526015770, -0.867046143217584000, +-0.867021230741536920, -0.866996316097936700, -0.866971399286845410, -0.866946480308325880, -0.866921559162440180, -0.866896635849250590, -0.866871710368819160, -0.866846782721208630, +-0.866821852906481280, -0.866796920924698950, -0.866771986775924600, -0.866747050460220270, -0.866722111977648370, -0.866697171328270840, -0.866672228512150640, -0.866647283529349940, +-0.866622336379931020, -0.866597387063956060, -0.866572435581487780, -0.866547481932588460, -0.866522526117320390, -0.866497568135745740, -0.866472607987927470, -0.866447645673927740, +-0.866422681193808830, -0.866397714547632920, -0.866372745735463080, -0.866347774757361360, -0.866322801613390150, -0.866297826303611630, -0.866272848828088860, -0.866247869186884010, +-0.866222887380059260, -0.866197903407677440, -0.866172917269800950, -0.866147928966492060, -0.866122938497813190, -0.866097945863827160, -0.866072951064596360, -0.866047954100183090, +-0.866022954970649740, -0.865997953676059250, -0.865972950216473800, -0.865947944591956010, -0.865922936802568160, -0.865897926848373190, -0.865872914729433400, -0.865847900445811390, +-0.865822883997569240, -0.865797865384770220, -0.865772844607476610, -0.865747821665750480, -0.865722796559655120, -0.865697769289252790, -0.865672739854606020, -0.865647708255777190, +-0.865622674492829260, -0.865597638565824720, -0.865572600474825980, -0.865547560219895540, -0.865522517801096460, -0.865497473218491130, -0.865472426472142060, -0.865447377562111760, +-0.865422326488463180, -0.865397273251258810, -0.865372217850561180, -0.865347160286432880, -0.865322100558936880, -0.865297038668135570, -0.865271974614091550, -0.865246908396867690, +-0.865221840016526690, -0.865196769473130960, -0.865171696766743210, -0.865146621897426420, -0.865121544865242950, -0.865096465670255780, -0.865071384312527060, -0.865046300792120190, +-0.865021215109097570, -0.864996127263521930, -0.864971037255455770, -0.864945945084962140, -0.864920850752103790, -0.864895754256943210, -0.864870655599543010, -0.864845554779966500, +-0.864820451798275940, -0.864795346654534390, -0.864770239348804150, -0.864745129881148600, -0.864720018251630250, -0.864694904460311610, -0.864669788507255950, -0.864644670392525790, +-0.864619550116183970, -0.864594427678292980, -0.864569303078916220, -0.864544176318116200, -0.864519047395955640, -0.864493916312497390, -0.864468783067804500, -0.864443647661939600, +-0.864418510094965730, -0.864393370366945190, -0.864368228477941590, -0.864343084428017330, -0.864317938217235350, -0.864292789845658380, -0.864267639313349600, -0.864242486620371730, +-0.864217331766787390, -0.864192174752660080, -0.864167015578052200, -0.864141854243026810, -0.864116690747646520, -0.864091525091974840, -0.864066357276074280, -0.864041187300007780, +-0.864016015163838190, -0.863990840867628670, -0.863965664411442180, -0.863940485795341440, -0.863915305019389290, -0.863890122083649130, -0.863864936988183670, -0.863839749733055770, +-0.863814560318328370, -0.863789368744064760, -0.863764175010327650, -0.863738979117180010, -0.863713781064685100, -0.863688580852905790, -0.863663378481904890, -0.863638173951745470, +-0.863612967262490700, -0.863587758414203540, -0.863562547406947050, -0.863537334240783940, -0.863512118915777730, -0.863486901431991250, -0.863461681789487460, -0.863436459988329300, +-0.863411236028580160, -0.863386009910302900, -0.863360781633560670, -0.863335551198416320, -0.863310318604933240, -0.863285083853174370, -0.863259846943202570, -0.863234607875081330, +-0.863209366648873600, -0.863184123264642560, -0.863158877722450920, -0.863133630022362320, -0.863108380164439580, -0.863083128148745880, -0.863057873975344170, -0.863032617644298060, +-0.863007359155670390, -0.862982098509524230, -0.862956835705922630, -0.862931570744929210, -0.862906303626606920, -0.862881034351018820, -0.862855762918227850, -0.862830489328297760, +-0.862805213581291470, -0.862779935677272070, -0.862754655616302600, -0.862729373398446800, -0.862704089023767500, -0.862678802492327760, -0.862653513804191310, -0.862628222959420990, +-0.862602929958080190, -0.862577634800231750, -0.862552337485939510, -0.862527038015266420, -0.862501736388275760, -0.862476432605030490, -0.862451126665594310, -0.862425818570030420, +-0.862400508318401980, -0.862375195910771940, -0.862349881347204250, -0.862324564627761750, -0.862299245752507940, -0.862273924721505770, -0.862248601534818970, -0.862223276192510710, +-0.862197948694644060, -0.862172619041282730, -0.862147287232489790, -0.862121953268328740, -0.862096617148862430, -0.862071278874154910, -0.862045938444269240, -0.862020595859268600, +-0.861995251119216380, -0.861969904224176190, -0.861944555174211200, -0.861919203969384930, -0.861893850609760310, -0.861868495095401310, -0.861843137426371090, -0.861817777602733040, +-0.861792415624550330, -0.861767051491886820, -0.861741685204805650, -0.861716316763370130, -0.861690946167643860, -0.861665573417690340, -0.861640198513572870, -0.861614821455354730, +-0.861589442243099750, -0.861564060876871100, -0.861538677356732290, -0.861513291682746600, -0.861487903854977870, -0.861462513873489490, -0.861437121738344750, -0.861411727449607030, +-0.861386331007340080, -0.861360932411607380, -0.861335531662472450, -0.861310128759998350, -0.861284723704249130, -0.861259316495288200, -0.861233907133178930, -0.861208495617984630, +-0.861183081949769450, -0.861157666128596460, -0.861132248154529050, -0.861106828027631280, -0.861081405747966430, -0.861055981315598130, -0.861030554730589650, -0.861005125993004940, +-0.860979695102907390, -0.860954262060360740, -0.860928826865428040, -0.860903389518173580, -0.860877950018660740, -0.860852508366952930, -0.860827064563113640, -0.860801618607206830, +-0.860776170499296110, -0.860750720239444880, -0.860725267827716630, -0.860699813264175440, -0.860674356548884690, -0.860648897681907890, -0.860623436663309090, -0.860597973493151590, +-0.860572508171499220, -0.860547040698415370, -0.860521571073964210, -0.860496099298209030, -0.860470625371213550, -0.860445149293041390, -0.860419671063756500, -0.860394190683422490, +-0.860368708152102980, -0.860343223469861470, -0.860317736636762140, -0.860292247652868490, -0.860266756518244250, -0.860241263232952800, -0.860215767797058440, -0.860190270210624660, +-0.860164770473714980, -0.860139268586393670, -0.860113764548724120, -0.860088258360770190, -0.860062750022595360, -0.860037239534263920, -0.860011726895839380, -0.859986212107385460, +-0.859960695168965890, -0.859935176080644740, -0.859909654842485600, -0.859884131454552340, -0.859858605916908660, -0.859833078229618520, -0.859807548392745760, -0.859782016406354210, +-0.859756482270507270, -0.859730945985269450, -0.859705407550704130, -0.859679866966875150, -0.859654324233846800, -0.859628779351682470, -0.859603232320446330, -0.859577683140201780, +-0.859552131811013310, -0.859526578332944550, -0.859501022706059330, -0.859475464930421260, -0.859449905006094860, -0.859424342933143630, -0.859398778711631510, -0.859373212341622230, +-0.859347643823180190, -0.859322073156368990, -0.859296500341252710, -0.859270925377894850, -0.859245348266359900, -0.859219769006711600, -0.859194187599014000, -0.859168604043330510, +-0.859143018339725840, -0.859117430488263610, -0.859091840489007550, -0.859066248342022170, -0.859040654047371180, -0.859015057605118540, -0.858989459015327970, -0.858963858278063990, +-0.858938255393390420, -0.858912650361371210, -0.858887043182070100, -0.858861433855551580, -0.858835822381879610, -0.858810208761118020, -0.858784592993330540, -0.858758975078582010, +-0.858733355016935930, -0.858707732808456470, -0.858682108453207470, -0.858656481951253440, -0.858630853302658200, -0.858605222507485610, -0.858579589565800160, -0.858553954477665800, +-0.858528317243146490, -0.858502677862306160, -0.858477036335209440, -0.858451392661920050, -0.858425746842502170, -0.858400098877019730, -0.858374448765537260, -0.858348796508118680, +-0.858323142104828070, -0.858297485555729490, -0.858271826860887320, -0.858246166020365630, -0.858220503034228480, -0.858194837902539920, -0.858169170625364350, -0.858143501202766060, +-0.858117829634808650, -0.858092155921556850, -0.858066480063074730, -0.858040802059426460, -0.858015121910675860, -0.857989439616887780, -0.857963755178126060, -0.857938068594454980, +-0.857912379865938380, -0.857886688992641200, -0.857860995974627280, -0.857835300811960800, -0.857809603504705920, -0.857783904052927150, -0.857758202456688770, -0.857732498716054730, +-0.857706792831089300, -0.857681084801857120, -0.857655374628422230, -0.857629662310848810, -0.857603947849201130, -0.857578231243543710, -0.857552512493940820, -0.857526791600456420, +-0.857501068563155110, -0.857475343382101300, -0.857449616057359030, -0.857423886588992490, -0.857398154977066510, -0.857372421221645140, -0.857346685322792680, -0.857320947280573400, +-0.857295207095051800, -0.857269464766292290, -0.857243720294359140, -0.857217973679316400, -0.857192224921229040, -0.857166474020161000, -0.857140720976176770, -0.857114965789340650, +-0.857089208459717260, -0.857063448987370860, -0.857037687372365520, -0.857011923614766300, -0.856986157714637260, -0.856960389672042800, -0.856934619487047190, -0.856908847159715160, +-0.856883072690111100, -0.856857296078299300, -0.856831517324344150, -0.856805736428310260, -0.856779953390262140, -0.856754168210264070, -0.856728380888380440, -0.856702591424676090, +-0.856676799819215180, -0.856651006072062350, -0.856625210183281640, -0.856599412152938220, -0.856573611981096270, -0.856547809667820070, -0.856522005213174680, -0.856496198617224150, +-0.856470389880033100, -0.856444579001665930, -0.856418765982187470, -0.856392950821662110, -0.856367133520154370, -0.856341314077728620, -0.856315492494449830, -0.856289668770382150, +-0.856263842905590430, -0.856238014900138960, -0.856212184754092550, -0.856186352467515730, -0.856160518040472880, -0.856134681473028740, -0.856108842765248010, -0.856083001917195110, +-0.856057158928934530, -0.856031313800531320, -0.856005466532049790, -0.855979617123554640, -0.855953765575110160, -0.855927911886781520, -0.855902056058633120, -0.855876198090729570, +-0.855850337983135260, -0.855824475735915470, -0.855798611349134370, -0.855772744822856700, -0.855746876157146950, -0.855721005352070410, -0.855695132407691130, -0.855669257324074170, +-0.855643380101283820, -0.855617500739385140, -0.855591619238442850, -0.855565735598521450, -0.855539849819685450, -0.855513961902000130, -0.855488071845529880, -0.855462179650339220, +-0.855436285316493290, -0.855410388844056620, -0.855384490233094040, -0.855358589483670050, -0.855332686595849820, -0.855306781569697750, -0.855280874405278890, -0.855254965102657420, +-0.855229053661898940, -0.855203140083067750, -0.855177224366228780, -0.855151306511446440, -0.855125386518786110, -0.855099464388312190, -0.855073540120089740, -0.855047613714183140, +-0.855021685170657800, -0.854995754489578320, -0.854969821671009100, -0.854943886715015530, -0.854917949621662340, -0.854892010391014150, -0.854866069023135890, -0.854840125518092520, +-0.854814179875948990, -0.854788232096769800, -0.854762282180620000, -0.854736330127564670, -0.854710375937668410, -0.854684419610996390, -0.854658461147612900, -0.854632500547583660, +-0.854606537810973070, -0.854580572937846170, -0.854554605928267600, -0.854528636782302730, -0.854502665500016300, -0.854476692081472920, -0.854450716526738100, -0.854424738835876440, +-0.854398759008953010, -0.854372777046032320, -0.854346792947180080, -0.854320806712460690, -0.854294818341939430, -0.854268827835680810, -0.854242835193750440, -0.854216840416212930, +-0.854190843503133230, -0.854164844454576300, -0.854138843270607520, -0.854112839951291500, -0.854086834496693430, -0.854060826906878120, -0.854034817181910990, -0.854008805321856750, +-0.853982791326780450, -0.853956775196746950, -0.853930756931821740, -0.853904736532069770, -0.853878713997555660, -0.853852689328344900, -0.853826662524502570, -0.853800633586093480, +-0.853774602513182600, -0.853748569305835430, -0.853722533964116790, -0.853696496488091870, -0.853670456877825500, -0.853644415133383290, -0.853618371254829870, -0.853592325242230610, +-0.853566277095650360, -0.853540226815154620, -0.853514174400808230, -0.853488119852676470, -0.853462063170824180, -0.853436004355316970, -0.853409943406219780, -0.853383880323597350, +-0.853357815107515630, -0.853331747758039330, -0.853305678275233630, -0.853279606659163470, -0.853253532909894590, -0.853227457027491810, -0.853201379012020420, -0.853175298863545370, +-0.853149216582132270, -0.853123132167846190, -0.853097045620752280, -0.853070956940915390, -0.853044866128401470, -0.853018773183275350, -0.852992678105602310, -0.852966580895447300, +-0.852940481552876160, -0.852914380077953730, -0.852888276470745170, -0.852862170731316090, -0.852836062859731680, -0.852809952856056990, -0.852783840720357290, -0.852757726452698210, +-0.852731610053144800, -0.852705491521762340, -0.852679370858615890, -0.852653248063771300, -0.852627123137293610, -0.852600996079248000, -0.852574866889699750, -0.852548735568714580, +-0.852522602116357550, -0.852496466532694060, -0.852470328817789060, -0.852444188971708590, -0.852418046994517620, -0.852391902886281530, -0.852365756647065380, -0.852339608276935110, +-0.852313457775955910, -0.852287305144192710, -0.852261150381711570, -0.852234993488577450, -0.852208834464855960, -0.852182673310612150, -0.852156510025911750, -0.852130344610820160, +-0.852104177065402760, -0.852078007389724610, -0.852051835583851780, -0.852025661647849210, -0.851999485581782620, -0.851973307385716970, -0.851947127059718420, -0.851920944603851930, +-0.851894760018183090, -0.851868573302777210, -0.851842384457700000, -0.851816193483016960, -0.851790000378793160, -0.851763805145094530, -0.851737607781986480, -0.851711408289534290, +-0.851685206667803450, -0.851659002916859810, -0.851632797036768640, -0.851606589027595450, -0.851580378889405630, -0.851554166622265130, -0.851527952226239120, -0.851501735701393200, +-0.851475517047792780, -0.851449296265503810, -0.851423073354591550, -0.851396848315121630, -0.851370621147159330, -0.851344391850770820, -0.851318160426021150, -0.851291926872976060, +-0.851265691191701260, -0.851239453382262260, -0.851213213444724560, -0.851186971379153670, -0.851160727185615530, -0.851134480864175650, -0.851108232414899520, -0.851081981837852550, +-0.851055729133100900, -0.851029474300709850, -0.851003217340745240, -0.850976958253272240, -0.850950697038357130, -0.850924433696065300, -0.850898168226462360, -0.850871900629613820, +-0.850845630905585630, -0.850819359054443500, -0.850793085076252620, -0.850766808971079370, -0.850740530738989030, -0.850714250380047440, -0.850687967894319890, -0.850661683281872750, +-0.850635396542771320, -0.850609107677081420, -0.850582816684868570, -0.850556523566198820, -0.850530228321137890, -0.850503930949751300, -0.850477631452104640, -0.850451329828264210, +-0.850425026078295400, -0.850398720202264040, -0.850372412200235630, -0.850346102072276340, -0.850319789818451910, -0.850293475438828050, -0.850267158933470160, -0.850240840302444620, +-0.850214519545817060, -0.850188196663652860, -0.850161871656018530, -0.850135544522979460, -0.850109215264601480, -0.850082883880950320, -0.850056550372092050, -0.850030214738092480, +-0.850003876979017470, -0.849977537094932400, -0.849951195085903780, -0.849924850951997100, -0.849898504693278320, -0.849872156309813160, -0.849845805801667690, -0.849819453168907830, +-0.849793098411599220, -0.849766741529807800, -0.849740382523599620, -0.849714021393040530, -0.849687658138196130, -0.849661292759132820, -0.849634925255916330, -0.849608555628612480, +-0.849582183877287010, -0.849555810002006310, -0.849529434002836090, -0.849503055879842320, -0.849476675633090590, -0.849450293262647430, -0.849423908768578650, -0.849397522150949990, +-0.849371133409827280, -0.849344742545277030, -0.849318349557364850, -0.849291954446156900, -0.849265557211718810, -0.849239157854116970, -0.849212756373417310, -0.849186352769685460, +-0.849159947042988030, -0.849133539193390740, -0.849107129220959660, -0.849080717125760390, -0.849054302907859660, -0.849027886567323090, -0.849001468104216840, -0.848975047518606640, +-0.848948624810559100, -0.848922199980140070, -0.848895773027415480, -0.848869343952451170, -0.848842912755313760, -0.848816479436069080, -0.848790043994783310, -0.848763606431522040, +-0.848737166746352020, -0.848710724939339190, -0.848684281010549380, -0.848657834960048760, -0.848631386787903730, -0.848604936494180230, -0.848578484078944210, -0.848552029542262170, +-0.848525572884200050, -0.848499114104824040, -0.848472653204199960, -0.848446190182394530, -0.848419725039473600, -0.848393257775503340, -0.848366788390549800, -0.848340316884679480, +-0.848313843257958330, -0.848287367510452530, -0.848260889642228120, -0.848234409653351730, -0.848207927543889300, -0.848181443313907100, -0.848154956963470990, -0.848128468492647780, +-0.848101977901503430, -0.848075485190103780, -0.848048990358515780, -0.848022493406805240, -0.847995994335038470, -0.847969493143281410, -0.847942989831600990, -0.847916484400062950, +-0.847889976848733800, -0.847863467177679460, -0.847836955386966680, -0.847810441476661510, -0.847783925446830230, -0.847757407297538900, -0.847730887028854350, -0.847704364640842530, +-0.847677840133569730, -0.847651313507102210, -0.847624784761506600, -0.847598253896848950, -0.847571720913195550, -0.847545185810613000, -0.847518648589167590, -0.847492109248925480, +-0.847465567789952860, -0.847439024212316540, -0.847412478516082700, -0.847385930701317620, -0.847359380768087480, -0.847332828716459210, -0.847306274546498760, -0.847279718258272750, +-0.847253159851847130, -0.847226599327288830, -0.847200036684664040, -0.847173471924039250, -0.847146905045480400, -0.847120336049054570, -0.847093764934828020, -0.847067191702866710, +-0.847040616353237690, -0.847014038886007010, -0.846987459301241420, -0.846960877599006840, -0.846934293779370350, -0.846907707842398110, -0.846881119788156500, -0.846854529616712040, +-0.846827937328131330, -0.846801342922480880, -0.846774746399826970, -0.846748147760236100, -0.846721547003775000, -0.846694944130510050, -0.846668339140507760, -0.846641732033834420, +-0.846615122810556840, -0.846588511470741660, -0.846561898014455030, -0.846535282441763460, -0.846508664752734010, -0.846482044947432840, -0.846455423025926250, -0.846428798988281380, +-0.846402172834564540, -0.846375544564842320, -0.846348914179180900, -0.846322281677647560, -0.846295647060308460, -0.846269010327230120, -0.846242371478479140, -0.846215730514122470, +-0.846189087434226490, -0.846162442238857730, -0.846135794928082660, -0.846109145501968250, -0.846082493960581110, -0.846055840303987730, -0.846029184532254400, -0.846002526645448390, +-0.845975866643636110, -0.845949204526883940, -0.845922540295258930, -0.845895873948827590, -0.845869205487656540, -0.845842534911812270, -0.845815862221361960, -0.845789187416371880, +-0.845762510496908870, -0.845735831463039430, -0.845709150314830630, -0.845682467052348840, -0.845655781675661020, -0.845629094184833340, -0.845602404579933300, -0.845575712861027280, +-0.845549019028181800, -0.845522323081463690, -0.845495625020940000, -0.845468924846677240, -0.845442222558741910, -0.845415518157201170, -0.845388811642121760, -0.845362103013570290, +-0.845335392271613360, -0.845308679416318150, -0.845281964447751170, -0.845255247365979350, -0.845228528171069190, -0.845201806863087990, -0.845175083442102130, -0.845148357908178660, +-0.845121630261384090, -0.845094900501785600, -0.845068168629449890, -0.845041434644443810, -0.845014698546833750, -0.844987960336687330, -0.844961220014071030, -0.844934477579051600, +-0.844907733031695750, -0.844880986372070760, -0.844854237600243470, -0.844827486716280160, -0.844800733720248440, -0.844773978612214930, -0.844747221392246450, -0.844720462060409630, +-0.844693700616771960, -0.844666937061399950, -0.844640171394360650, -0.844613403615720790, -0.844586633725547540, -0.844559861723907730, -0.844533087610868320, -0.844506311386495790, +-0.844479533050857880, -0.844452752604021080, -0.844425970046052350, -0.844399185377018520, -0.844372398596986980, -0.844345609706024460, -0.844318818704197670, -0.844292025591574010, +-0.844265230368220320, -0.844238433034203540, -0.844211633589590390, -0.844184832034448500, -0.844158028368844460, -0.844131222592845450, -0.844104414706517980, -0.844077604709929870, +-0.844050792603147640, -0.844023978386238550, -0.843997162059269110, -0.843970343622307160, -0.843943523075419310, -0.843916700418672620, -0.843889875652133910, -0.843863048775870820, +-0.843836219789950050, -0.843809388694438440, -0.843782555489403730, -0.843755720174912520, -0.843728882751032080, -0.843702043217829270, -0.843675201575371460, -0.843648357823725710, +-0.843621511962958980, -0.843594663993138320, -0.843567813914331220, -0.843540961726604640, -0.843514107430025530, -0.843487251024661040, -0.843460392510578580, -0.843433531887845090, +-0.843406669156527840, -0.843379804316693680, -0.843352937368410330, -0.843326068311744500, -0.843299197146763380, -0.843272323873534460, -0.843245448492124680, -0.843218571002601340, +-0.843191691405031250, -0.843164809699482260, -0.843137925886021210, -0.843111039964715370, -0.843084151935631580, -0.843057261798837780, -0.843030369554400800, -0.843003475202387940, +-0.842976578742866020, -0.842949680175902990, -0.842922779501565690, -0.842895876719921610, -0.842868971831037370, -0.842842064834981140, -0.842815155731819640, -0.842788244521620270, +-0.842761331204450070, -0.842734415780376670, -0.842707498249467330, -0.842680578611789020, -0.842653656867409450, -0.842626733016395790, -0.842599807058815320, -0.842572878994734990, +-0.842545948824222850, -0.842519016547345730, -0.842492082164171040, -0.842465145674766050, -0.842438207079198250, -0.842411266377535050, -0.842384323569843610, -0.842357378656191200, +-0.842330431636645560, -0.842303482511273850, -0.842276531280143460, -0.842249577943321450, -0.842222622500875760, -0.842195664952873460, -0.842168705299381810, -0.842141743540468670, +-0.842114779676201080, -0.842087813706646650, -0.842060845631872330, -0.842033875451946190, -0.842006903166935380, -0.841979928776907300, -0.841952952281929120, -0.841925973682068900, +-0.841898992977393680, -0.841872010167970970, -0.841845025253867950, -0.841818038235152670, -0.841791049111892290, -0.841764057884154320, -0.841737064552005920, -0.841710069115515160, +-0.841683071574749090, -0.841656071929775210, -0.841629070180661350, -0.841602066327474920, -0.841575060370283180, -0.841548052309153640, -0.841521042144154130, -0.841494029875352050, +-0.841467015502815000, -0.841439999026610040, -0.841412980446805350, -0.841385959763468190, -0.841358936976666190, -0.841331912086466630, -0.841304885092937440, -0.841277855996146130, +-0.841250824796160090, -0.841223791493046820, -0.841196756086874280, -0.841169718577709840, -0.841142678965621120, -0.841115637250675400, -0.841088593432940960, -0.841061547512484960, +-0.841034499489374810, -0.841007449363678660, -0.840980397135463910, -0.840953342804798280, -0.840926286371748930, -0.840899227836384040, -0.840872167198771230, -0.840845104458977980, +-0.840818039617071690, -0.840790972673120530, -0.840763903627191890, -0.840736832479353600, -0.840709759229672950, -0.840682683878218100, -0.840655606425056550, -0.840628526870256020, +-0.840601445213883910, -0.840574361456008500, -0.840547275596697060, -0.840520187636017320, -0.840493097574037230, -0.840466005410824500, -0.840438911146446750, -0.840411814780971380, +-0.840384716314466760, -0.840357615747000410, -0.840330513078639930, -0.840303408309453050, -0.840276301439507820, -0.840249192468871750, -0.840222081397612790, -0.840194968225798420, +-0.840167852953496830, -0.840140735580775620, -0.840113616107702520, -0.840086494534345140, -0.840059370860771870, -0.840032245087050100, -0.840005117213247440, -0.839977987239432290, +-0.839950855165672140, -0.839923720992034940, -0.839896584718588080, -0.839869446345400060, -0.839842305872538390, -0.839815163300071000, -0.839788018628065400, -0.839760871856590100, +-0.839733722985712470, -0.839706572015500700, -0.839679418946022160, -0.839652263777345250, -0.839625106509537810, -0.839597947142667560, -0.839570785676802210, -0.839543622112010060, +-0.839516456448358930, -0.839489288685916430, -0.839462118824750860, -0.839434946864930140, -0.839407772806521900, -0.839380596649594080, -0.839353418394214960, -0.839326238040452370, +-0.839299055588374140, -0.839271871038048010, -0.839244684389542470, -0.839217495642925250, -0.839190304798264290, -0.839163111855627200, -0.839135916815082710, -0.839108719676698310, +-0.839081520440542180, -0.839054319106682040, -0.839027115675186290, -0.838999910146122850, -0.838972702519559580, -0.838945492795564180, -0.838918280974205510, -0.838891067055550940, +-0.838863851039668540, -0.838836632926626800, -0.838809412716493450, -0.838782190409336550, -0.838754966005223920, -0.838727739504224190, -0.838700510906405070, -0.838673280211834630, +-0.838646047420580800, -0.838618812532712090, -0.838591575548296330, -0.838564336467401690, -0.838537095290095900, -0.838509852016447680, -0.838482606646524740, -0.838455359180395380, +-0.838428109618127190, -0.838400857959789140, -0.838373604205448930, -0.838346348355174410, -0.838319090409034300, -0.838291830367096540, -0.838264568229429070, -0.838237303996099970, +-0.838210037667177940, -0.838182769242730720, -0.838155498722826690, -0.838128226107533570, -0.838100951396920090, -0.838073674591054310, -0.838046395690004390, -0.838019114693838160, +-0.837991831602624360, -0.837964546416431030, -0.837937259135326350, -0.837909969759378260, -0.837882678288655480, -0.837855384723225960, -0.837828089063157870, -0.837800791308519700, +-0.837773491459379520, -0.837746189515805710, -0.837718885477866100, -0.837691579345629540, -0.837664271119164080, -0.837636960798537890, -0.837609648383819130, -0.837582333875076410, +-0.837555017272377910, -0.837527698575791790, -0.837500377785386220, -0.837473054901230030, -0.837445729923391060, -0.837418402851937920, -0.837391073686938440, -0.837363742428461450, +-0.837336409076575250, -0.837309073631347990, -0.837281736092847730, -0.837254396461143410, -0.837227054736303100, -0.837199710918394960, -0.837172365007487710, -0.837145017003649630, +-0.837117666906948890, -0.837090314717453880, -0.837062960435233210, -0.837035604060355260, -0.837008245592888220, -0.836980885032900250, -0.836953522380460390, -0.836926157635636820, +-0.836898790798497720, -0.836871421869111450, -0.836844050847546870, -0.836816677733872140, -0.836789302528155750, -0.836761925230465780, -0.836734545840871370, -0.836707164359440480, +-0.836679780786241500, -0.836652395121343260, -0.836625007364814040, -0.836597617516722350, -0.836570225577136340, -0.836542831546125080, -0.836515435423756730, -0.836488037210099680, +-0.836460636905222430, -0.836433234509193710, -0.836405830022081910, -0.836378423443955630, -0.836351014774883050, -0.836323604014933110, -0.836296191164174090, -0.836268776222674700, +-0.836241359190503130, -0.836213940067728420, -0.836186518854418750, -0.836159095550642610, -0.836131670156469050, -0.836104242671966260, -0.836076813097202830, -0.836049381432247050, +-0.836021947677168200, -0.835994511832034440, -0.835967073896914380, -0.835939633871876420, -0.835912191756989610, -0.835884747552322340, -0.835857301257943110, -0.835829852873920530, +-0.835802402400323440, -0.835774949837220450, -0.835747495184679940, -0.835720038442770540, -0.835692579611561290, -0.835665118691120590, -0.835637655681516820, -0.835610190582819270, +-0.835582723395096090, -0.835555254118416140, -0.835527782752847890, -0.835500309298460310, -0.835472833755322000, -0.835445356123501680, -0.835417876403067640, -0.835390394594089150, +-0.835362910696634710, -0.835335424710773040, -0.835307936636572550, -0.835280446474102380, -0.835252954223431150, -0.835225459884627490, -0.835197963457759980, -0.835170464942897820, +-0.835142964340109480, -0.835115461649463710, -0.835087956871029100, -0.835060450004874830, -0.835032941051069400, -0.835005430009681300, -0.834977916880780050, -0.834950401664433910, +-0.834922884360711710, -0.834895364969682090, -0.834867843491414300, -0.834840319925976960, -0.834812794273438800, -0.834785266533868420, -0.834757736707335110, -0.834730204793907470, +-0.834702670793654230, -0.834675134706644120, -0.834647596532946510, -0.834620056272629810, -0.834592513925762950, -0.834564969492414650, -0.834537422972654100, -0.834509874366550000, +-0.834482323674170970, -0.834454770895586400, -0.834427216030864890, -0.834399659080075300, -0.834372100043286320, -0.834344538920567480, -0.834316975711987150, -0.834289410417614400, +-0.834261843037517940, -0.834234273571767050, -0.834206702020430460, -0.834179128383577220, -0.834151552661275830, -0.834123974853595800, -0.834096394960605950, -0.834068812982375010, +-0.834041228918971810, -0.834013642770465750, -0.833986054536925540, -0.833958464218420130, -0.833930871815018680, -0.833903277326790040, -0.833875680753803250, -0.833848082096127040, +-0.833820481353830800, -0.833792878526983360, -0.833765273615653780, -0.833737666619910670, -0.833710057539823750, -0.833682446375461630, -0.833654833126893480, -0.833627217794187910, +-0.833599600377414540, -0.833571980876642190, -0.833544359291939930, -0.833516735623376470, -0.833489109871021430, -0.833461482034943630, -0.833433852115212150, -0.833406220111895690, +-0.833378586025063980, -0.833350949854785860, -0.833323311601130160, -0.833295671264166260, -0.833268028843963340, -0.833240384340590220, -0.833212737754115970, -0.833185089084610090, +-0.833157438332141510, -0.833129785496779300, -0.833102130578592500, -0.833074473577650520, -0.833046814494022290, -0.833019153327777100, -0.832991490078983880, -0.832963824747712020, +-0.832936157334030700, -0.832908487838008970, -0.832880816259715660, -0.832853142599220720, -0.832825466856592870, -0.832797789031901050, -0.832770109125215100, -0.832742427136603740, +-0.832714743066136460, -0.832687056913882010, -0.832659368679910080, -0.832631678364289860, -0.832603985967090400, -0.832576291488380750, -0.832548594928230630, -0.832520896286708890, +-0.832493195563885010, -0.832465492759827950, -0.832437787874607320, -0.832410080908292270, -0.832382371860951990, -0.832354660732655520, -0.832326947523472690, -0.832299232233472460, +-0.832271514862723880, -0.832243795411296780, -0.832216073879260220, -0.832188350266683470, -0.832160624573635600, -0.832132896800186430, -0.832105166946405020, -0.832077435012360640, +-0.832049700998122480, -0.832021964903760240, -0.831994226729343200, -0.831966486474940430, -0.831938744140621300, -0.831910999726455550, -0.831883253232512330, -0.831855504658860930, +-0.831827754005570630, -0.831800001272711030, -0.831772246460351530, -0.831744489568561170, -0.831716730597409800, -0.831688969546966580, -0.831661206417300900, -0.831633441208482040, +-0.831605673920579820, -0.831577904553663430, -0.831550133107802240, -0.831522359583065530, -0.831494583979523030, -0.831466806297244230, -0.831439026536298310, -0.831411244696754650, +-0.831383460778683080, -0.831355674782152780, -0.831327886707233450, -0.831300096553994060, -0.831272304322504760, -0.831244510012834610, -0.831216713625053230, -0.831188915159229770, +-0.831161114615434290, -0.831133311993736080, -0.831105507294204290, -0.831077700516908990, -0.831049891661919450, -0.831022080729305170, -0.830994267719135430, -0.830966452631480280, +-0.830938635466409000, -0.830910816223991100, -0.830882994904295960, -0.830855171507393630, -0.830827346033353290, -0.830799518482244650, -0.830771688854136880, -0.830743857149100150, +-0.830716023367203740, -0.830688187508517360, -0.830660349573110300, -0.830632509561052500, -0.830604667472413460, -0.830576823307262570, -0.830548977065669770, -0.830521128747704670, +-0.830493278353436670, -0.830465425882935150, -0.830437571336270390, -0.830409714713511770, -0.830381856014728690, -0.830353995239990870, -0.830326132389368250, -0.830298267462930340, +-0.830270400460746740, -0.830242531382886840, -0.830214660229420920, -0.830186787000418260, -0.830158911695948800, -0.830131034316081710, -0.830103154860887260, -0.830075273330434960, +-0.830047389724794190, -0.830019504044035240, -0.829991616288227490, -0.829963726457440760, -0.829935834551744470, -0.829907940571208760, -0.829880044515903250, -0.829852146385897660, +-0.829824246181261380, -0.829796343902064800, -0.829768439548377310, -0.829740533120268740, -0.829712624617808590, -0.829684714041067140, -0.829656801390113880, -0.829628886665018660, +-0.829600969865850970, -0.829573050992681080, -0.829545130045578500, -0.829517207024613180, -0.829489281929854600, -0.829461354761373060, -0.829433425519238040, -0.829405494203519390, +-0.829377560814287040, -0.829349625351610940, -0.829321687815560700, -0.829293748206206050, -0.829265806523617250, -0.829237862767863930, -0.829209916939016020, -0.829181969037142920, +-0.829154019062315230, -0.829126067014602560, -0.829098112894074650, -0.829070156700801200, -0.829042198434852610, -0.829014238096298590, -0.828986275685208880, -0.828958311201653310, +-0.828930344645702140, -0.828902376017425220, -0.828874405316892050, -0.828846432544173120, -0.828818457699338040, -0.828790480782456870, -0.828762501793599230, -0.828734520732835600, +-0.828706537600235720, -0.828678552395869410, -0.828650565119806500, -0.828622575772117510, -0.828594584352872030, -0.828566590862140020, -0.828538595299991300, -0.828510597666496370, +-0.828482597961724960, -0.828454596185747130, -0.828426592338632470, -0.828398586420451500, -0.828370578431274150, -0.828342568371170150, -0.828314556240209890, -0.828286542038463300, +-0.828258525766000340, -0.828230507422890840, -0.828202487009205290, -0.828174464525013530, -0.828146439970385620, -0.828118413345391380, -0.828090384650101320, -0.828062353884585270, +-0.828034321048913390, -0.828006286143155410, -0.827978249167382050, -0.827950210121662920, -0.827922169006068410, -0.827894125820668240, -0.827866080565532900, -0.827838033240732350, +-0.827809983846336530, -0.827781932382416040, -0.827753878849040610, -0.827725823246280520, -0.827697765574205710, -0.827669705832886680, -0.827641644022393370, -0.827613580142795960, +-0.827585514194164370, -0.827557446176569230, -0.827529376090080370, -0.827501303934768170, -0.827473229710702470, -0.827445153417953990, -0.827417075056592570, -0.827388994626688470, +-0.827360912128311640, -0.827332827561532700, -0.827304740926421810, -0.827276652223049020, -0.827248561451484290, -0.827220468611798430, -0.827192373704061510, -0.827164276728343360, +-0.827136177684714700, -0.827108076573245590, -0.827079973394006410, -0.827051868147066880, -0.827023760832498070, -0.826995651450369800, -0.826967540000752450, -0.826939426483715880, +-0.826911310899331120, -0.826883193247668010, -0.826855073528796950, -0.826826951742787970, -0.826798827889711820, -0.826770701969638640, -0.826742573982638620, -0.826714443928782020, +-0.826686311808139560, -0.826658177620781310, -0.826630041366777310, -0.826601903046198520, -0.826573762659114860, -0.826545620205596960, -0.826517475685714650, -0.826489329099538870, +-0.826461180447139900, -0.826433029728587900, -0.826404876943953040, -0.826376722093306260, -0.826348565176717730, -0.826320406194257730, -0.826292245145996530, -0.826264082032004850, +-0.826235916852353090, -0.826207749607111520, -0.826179580296350300, -0.826151408920140270, -0.826123235478551820, -0.826095059971655110, -0.826066882399520860, -0.826038702762219470, +-0.826010521059821310, -0.825982337292396670, -0.825954151460016380, -0.825925963562750720, -0.825897773600670070, -0.825869581573844820, -0.825841387482345920, -0.825813191326243420, +-0.825784993105608050, -0.825756792820509840, -0.825728590471019990, -0.825700386057208640, -0.825672179579146290, -0.825643971036903350, -0.825615760430550630, -0.825587547760158520, +-0.825559333025797540, -0.825531116227538050, -0.825502897365450910, -0.825474676439606590, -0.825446453450075390, -0.825418228396928130, -0.825390001280235430, -0.825361772100067670, +-0.825333540856495350, -0.825305307549589310, -0.825277072179420030, -0.825248834746058040, -0.825220595249573810, -0.825192353690038290, -0.825164110067521880, -0.825135864382095190, +-0.825107616633828590, -0.825079366822793150, -0.825051114949059360, -0.825022861012697730, -0.824994605013778750, -0.824966346952373470, -0.824938086828552410, -0.824909824642385820, +-0.824881560393944890, -0.824853294083300100, -0.824825025710522080, -0.824796755275681190, -0.824768482778848730, -0.824740208220094970, -0.824711931599490740, -0.824683652917106550, +-0.824655372173013320, -0.824627089367281680, -0.824598804499982350, -0.824570517571185820, -0.824542228580963150, -0.824513937529384950, -0.824485644416521830, -0.824457349242444510, +-0.824429052007223940, -0.824400752710930830, -0.824372451353635460, -0.824344147935409330, -0.824315842456322830, -0.824287534916446680, -0.824259225315851380, -0.824230913654608320, +-0.824202599932787990, -0.824174284150461230, -0.824145966307698430, -0.824117646404570970, -0.824089324441149350, -0.824061000417504520, -0.824032674333706860, -0.824004346189827760, +-0.823976015985937840, -0.823947683722107920, -0.823919349398408500, -0.823891013014910970, -0.823862674571685830, -0.823834334068803800, -0.823805991506336150, -0.823777646884353620, +-0.823749300202926920, -0.823720951462126760, -0.823692600662024430, -0.823664247802690540, -0.823635892884196140, -0.823607535906611730, -0.823579176870008700, -0.823550815774457770, +-0.823522452620029770, -0.823494087406795310, -0.823465720134826000, -0.823437350804192340, -0.823408979414965270, -0.823380605967215520, -0.823352230461014580, -0.823323852896433060, +-0.823295473273541800, -0.823267091592411630, -0.823238707853114040, -0.823210322055719650, -0.823181934200299280, -0.823153544286924220, -0.823125152315665410, -0.823096758286593570, +-0.823068362199779750, -0.823039964055295110, -0.823011563853210730, -0.822983161593597300, -0.822954757276525780, -0.822926350902067560, -0.822897942470293580, -0.822869531981274660, +-0.822841119435081650, -0.822812704831786150, -0.822784288171458880, -0.822755869454170790, -0.822727448679992920, -0.822699025848996570, -0.822670600961252660, -0.822642174016832040, +-0.822613745015806200, -0.822585313958246080, -0.822556880844222630, -0.822528445673806670, -0.822500008447069940, -0.822471569164083150, -0.822443127824917460, -0.822414684429643610, +-0.822386238978333410, -0.822357791471057590, -0.822329341907887200, -0.822300890288893300, -0.822272436614147400, -0.822243980883720420, -0.822215523097683420, -0.822187063256107460, +-0.822158601359064050, -0.822130137406624110, -0.822101671398858700, -0.822073203335839220, -0.822044733217636820, -0.822016261044322460, -0.821987786815967290, -0.821959310532642930, +-0.821930832194420310, -0.821902351801370500, -0.821873869353564660, -0.821845384851074390, -0.821816898293970640, -0.821788409682324580, -0.821759919016207260, -0.821731426295690400, +-0.821702931520845060, -0.821674434691742280, -0.821645935808453240, -0.821617434871049660, -0.821588931879602360, -0.821560426834182840, -0.821531919734861950, -0.821503410581711500, +-0.821474899374802560, -0.821446386114206060, -0.821417870799993950, -0.821389353432237180, -0.821360834011006900, -0.821332312536374290, -0.821303789008411280, -0.821275263427188710, +-0.821246735792777960, -0.821218206105250090, -0.821189674364677050, -0.821161140571129770, -0.821132604724679640, -0.821104066825397830, -0.821075526873356050, -0.821046984868625370, +-0.821018440811277280, -0.820989894701382950, -0.820961346539013980, -0.820932796324241760, -0.820904244057137240, -0.820875689737772360, -0.820847133366218170, -0.820818574942546290, +-0.820790014466827640, -0.820761451939134300, -0.820732887359537310, -0.820704320728107950, -0.820675752044917720, -0.820647181310038220, -0.820618608523540850, -0.820590033685496990, +-0.820561456795977700, -0.820532877855055130, -0.820504296862800240, -0.820475713819284750, -0.820447128724579590, -0.820418541578756930, -0.820389952381887940, -0.820361361134043790, +-0.820332767835296410, -0.820304172485717190, -0.820275575085377520, -0.820246975634348670, -0.820218374132702710, -0.820189770580510680, -0.820161164977844300, -0.820132557324774750, +-0.820103947621374060, -0.820075335867713530, -0.820046722063864530, -0.820018106209898570, -0.819989488305887580, -0.819960868351902960, -0.819932246348016090, -0.819903622294298360, +-0.819874996190821830, -0.819846368037657760, -0.819817737834877770, -0.819789105582553250, -0.819760471280756240, -0.819731834929557920, -0.819703196529029900, -0.819674556079244110, +-0.819645913580271830, -0.819617269032184900, -0.819588622435054480, -0.819559973788952730, -0.819531323093951160, -0.819502670350121140, -0.819474015557534300, -0.819445358716262670, +-0.819416699826377550, -0.819388038887950750, -0.819359375901053570, -0.819330710865758260, -0.819302043782136110, -0.819273374650258850, -0.819244703470197950, -0.819216030242025490, +-0.819187354965812960, -0.819158677641631860, -0.819129998269554240, -0.819101316849651710, -0.819072633381995760, -0.819043947866658130, -0.819015260303710750, -0.818986570693225340, +-0.818957879035273400, -0.818929185329926530, -0.818900489577257030, -0.818871791777336160, -0.818843091930235970, -0.818814390036027740, -0.818785686094783750, -0.818756980106575490, +-0.818728272071474920, -0.818699561989553400, -0.818670849860883120, -0.818642135685535790, -0.818613419463582900, -0.818584701195096630, -0.818555980880148580, -0.818527258518810700, +-0.818498534111154360, -0.818469807657251970, -0.818441079157175010, -0.818412348610995430, -0.818383616018784620, -0.818354881380615070, -0.818326144696558400, -0.818297405966686210, +-0.818268665191070330, -0.818239922369783050, -0.818211177502895960, -0.818182430590481010, -0.818153681632609600, -0.818124930629354320, -0.818096177580786680, -0.818067422486978390, +-0.818038665348001740, -0.818009906163928440, -0.817981144934830320, -0.817952381660779220, -0.817923616341847290, -0.817894848978106380, -0.817866079569628310, -0.817837308116484810, +-0.817808534618748360, -0.817779759076490480, -0.817750981489783200, -0.817722201858698260, -0.817693420183308040, -0.817664636463684370, -0.817635850699898970, -0.817607062892023780, +-0.817578273040131090, -0.817549481144292820, -0.817520687204580820, -0.817491891221066800, -0.817463093193823380, -0.817434293122922150, -0.817405491008434960, -0.817376686850434410, +-0.817347880648992000, -0.817319072404179890, -0.817290262116069920, -0.817261449784734580, -0.817232635410245490, -0.817203818992674910, -0.817175000532094460, -0.817146180028576860, +-0.817117357482193720, -0.817088532893017190, -0.817059706261119120, -0.817030877586572000, -0.817002046869447770, -0.816973214109818380, -0.816944379307755650, -0.816915542463332200, +-0.816886703576619970, -0.816857862647690670, -0.816829019676617030, -0.816800174663470770, -0.816771327608324160, -0.816742478511248930, -0.816713627372317790, -0.816684774191602570, +-0.816655918969175440, -0.816627061705108130, -0.816598202399473560, -0.816569341052343470, -0.816540477663790010, -0.816511612233885020, -0.816482744762701330, -0.816453875250310770, +-0.816425003696785500, -0.816396130102197470, -0.816367254466619400, -0.816338376790123220, -0.816309497072780780, -0.816280615314664890, -0.816251731515847510, -0.816222845676400690, +-0.816193957796396590, -0.816165067875907810, -0.816136175915006310, -0.816107281913764470, -0.816078385872254120, -0.816049487790548090, -0.816020587668718320, -0.815991685506837090, +-0.815962781304976350, -0.815933875063208910, -0.815904966781606840, -0.815876056460242300, -0.815847144099187460, -0.815818229698514920, -0.815789313258296840, -0.815760394778605510, +-0.815731474259512870, -0.815702551701091850, -0.815673627103414400, -0.815644700466552690, -0.815615771790579420, -0.815586841075566780, -0.815557908321587030, -0.815528973528712230, +-0.815500036697015210, -0.815471097826568130, -0.815442156917443370, -0.815413213969712890, -0.815384268983449730, -0.815355321958725730, -0.815326372895613600, -0.815297421794185180, +-0.815268468654513520, -0.815239513476670560, -0.815210556260728910, -0.815181597006760630, -0.815152635714838650, -0.815123672385035030, -0.815094707017421930, -0.815065739612072400, +-0.815036770169058510, -0.815007798688452630, -0.814978825170327050, -0.814949849614754700, -0.814920872021807630, -0.814891892391558350, -0.814862910724079240, -0.814833927019443020, +-0.814804941277721960, -0.814775953498988570, -0.814746963683315120, -0.814717971830774430, -0.814688977941438800, -0.814659982015380810, -0.814630984052672540, -0.814601984053387020, +-0.814572982017596650, -0.814543977945373480, -0.814514971836790670, -0.814485963691920390, -0.814456953510835250, -0.814427941293607520, -0.814398927040310030, -0.814369910751015390, +-0.814340892425795880, -0.814311872064723890, -0.814282849667872570, -0.814253825235313980, -0.814224798767120950, -0.814195770263365540, -0.814166739724121010, -0.814137707149459660, +-0.814108672539454070, -0.814079635894176530, -0.814050597213700100, -0.814021556498097270, -0.813992513747440190, -0.813963468961802160, -0.813934422141255440, -0.813905373285872650, +-0.813876322395726160, -0.813847269470889150, -0.813818214511433880, -0.813789157517433190, -0.813760098488959360, -0.813731037426085440, -0.813701974328884030, -0.813672909197427520, +-0.813643842031788630, -0.813614772832040420, -0.813585701598255160, -0.813556628330505680, -0.813527553028864370, -0.813498475693404500, -0.813469396324198350, -0.813440314921318740, +-0.813411231484838180, -0.813382146014829720, -0.813353058511365860, -0.813323968974519080, -0.813294877404362680, -0.813265783800969140, -0.813236688164411080, -0.813207590494761100, +-0.813178490792092370, -0.813149389056477380, -0.813120285287988960, -0.813091179486699510, -0.813062071652682410, -0.813032961786010140, -0.813003849886755450, -0.812974735954990920, +-0.812945619990789740, -0.812916501994224490, -0.812887381965368140, -0.812858259904292950, -0.812829135811072410, -0.812800009685778920, -0.812770881528485310, -0.812741751339264630, +-0.812712619118189710, -0.812683484865333150, -0.812654348580767570, -0.812625210264566470, -0.812596069916802330, -0.812566927537548000, -0.812537783126876080, -0.812508636684859950, +-0.812479488211572340, -0.812450337707085860, -0.812421185171473330, -0.812392030604808140, -0.812362874007162890, -0.812333715378610320, -0.812304554719223360, -0.812275392029075170, +-0.812246227308238590, -0.812217060556786110, -0.812187891774791230, -0.812158720962326660, -0.812129548119465250, -0.812100373246279710, -0.812071196342843530, -0.812042017409229320, +-0.812012836445510140, -0.811983653451758600, -0.811954468428048080, -0.811925281374451520, -0.811896092291041650, -0.811866901177891400, -0.811837708035074050, -0.811808512862662530, +-0.811779315660729580, -0.811750116429348250, -0.811720915168591790, -0.811691711878533060, -0.811662506559245100, -0.811633299210800520, -0.811604089833273030, -0.811574878426735260, +-0.811545664991260130, -0.811516449526921040, -0.811487232033790810, -0.811458012511942490, -0.811428790961448930, -0.811399567382383610, -0.811370341774819370, -0.811341114138829260, +-0.811311884474486210, -0.811282652781863620, -0.811253419061034430, -0.811224183312071580, -0.811194945535048120, -0.811165705730037550, -0.811136463897112690, -0.811107220036346720, +-0.811077974147812460, -0.811048726231583420, -0.811019476287732630, -0.810990224316332940, -0.810960970317457840, -0.810931714291180380, -0.810902456237573620, -0.810873196156710500, +-0.810843934048664620, -0.810814669913508810, -0.810785403751316470, -0.810756135562160310, -0.810726865346114050, -0.810697593103250620, -0.810668318833643210, -0.810639042537364850, +-0.810609764214488940, -0.810580483865088740, -0.810551201489237320, -0.810521917087007710, -0.810492630658473430, -0.810463342203707750, -0.810434051722783270, -0.810404759215774040, +-0.810375464682752900, -0.810346168123793010, -0.810316869538967530, -0.810287568928350080, -0.810258266292013700, -0.810228961630031770, -0.810199654942477030, -0.810170346229423520, +-0.810141035490944070, -0.810111722727112180, -0.810082407938000570, -0.810053091123683180, -0.810023772284233170, -0.809994451419723700, -0.809965128530227840, -0.809935803615819410, +-0.809906476676571450, -0.809877147712557030, -0.809847816723849980, -0.809818483710523450, -0.809789148672650730, -0.809759811610304860, -0.809730472523559670, -0.809701131412488340, +-0.809671788277164240, -0.809642443117660320, -0.809613095934050620, -0.809583746726408090, -0.809554395494806230, -0.809525042239318090, -0.809495686960017720, -0.809466329656978070, +-0.809436970330272510, -0.809407608979974440, -0.809378245606157450, -0.809348880208894950, -0.809319512788260200, -0.809290143344326360, -0.809260771877167500, -0.809231398386856650, +-0.809202022873467100, -0.809172645337072780, -0.809143265777746760, -0.809113884195562630, -0.809084500590593560, -0.809055114962913490, -0.809025727312595590, -0.808996337639713350, +-0.808966945944340040, -0.808937552226549620, -0.808908156486415340, -0.808878758724010720, -0.808849358939408790, -0.808819957132683840, -0.808790553303909030, -0.808761147453157750, +-0.808731739580503370, -0.808702329686019850, -0.808672917769780560, -0.808643503831858680, -0.808614087872328360, -0.808584669891262760, -0.808555249888735620, -0.808525827864819970, +-0.808496403819589980, -0.808466977753119040, -0.808437549665480650, -0.808408119556748180, -0.808378687426995590, -0.808349253276296360, -0.808319817104723890, -0.808290378912351670, +-0.808260938699253860, -0.808231496465503520, -0.808202052211174580, -0.808172605936340220, -0.808143157641074580, -0.808113707325451070, -0.808084254989542950, -0.808054800633424500, +-0.808025344257169100, -0.807995885860850360, -0.807966425444541560, -0.807936963008316970, -0.807907498552249970, -0.807878032076414290, -0.807848563580883190, -0.807819093065731080, +-0.807789620531031090, -0.807760145976857080, -0.807730669403282530, -0.807701190810381500, -0.807671710198227480, -0.807642227566894190, -0.807612742916455020, -0.807583256246984350, +-0.807553767558555460, -0.807524276851242170, -0.807494784125117990, -0.807465289380257080, -0.807435792616732930, -0.807406293834619040, -0.807376793033989680, -0.807347290214918360, +-0.807317785377478780, -0.807288278521744560, -0.807258769647789750, -0.807229258755688180, -0.807199745845513350, -0.807170230917338970, -0.807140713971239210, -0.807111195007287670, +-0.807081674025558190, -0.807052151026124260, -0.807022626009060160, -0.806993098974439490, -0.806963569922336200, -0.806934038852823550, -0.806904505765976170, -0.806874970661867530, +-0.806845433540571140, -0.806815894402161500, -0.806786353246712110, -0.806756810074296780, -0.806727264884989250, -0.806697717678863780, -0.806668168455993980, -0.806638617216453800, +-0.806609063960316730, -0.806579508687657380, -0.806549951398549240, -0.806520392093066140, -0.806490830771281920, -0.806461267433270850, -0.806431702079106530, -0.806402134708863020, +-0.806372565322613920, -0.806342993920433630, -0.806313420502395850, -0.806283845068574310, -0.806254267619043400, -0.806224688153876820, -0.806195106673148420, -0.806165523176932130, +-0.806135937665302230, -0.806106350138332540, -0.806076760596096900, -0.806047169038669130, -0.806017575466123740, -0.805987979878534320, -0.805958382275975050, -0.805928782658519530, +-0.805899181026242360, -0.805869577379217160, -0.805839971717517980, -0.805810364041218750, -0.805780754350393760, -0.805751142645116940, -0.805721528925462000, -0.805691913191503460, +-0.805662295443315140, -0.805632675680971080, -0.805603053904545120, -0.805573430114111750, -0.805543804309744820, -0.805514176491518350, -0.805484546659506200, -0.805454914813782950, +-0.805425280954422340, -0.805395645081498630, -0.805366007195085550, -0.805336367295257590, -0.805306725382088810, -0.805277081455653240, -0.805247435516024730, -0.805217787563277780, +-0.805188137597486420, -0.805158485618724720, -0.805128831627066500, -0.805099175622586480, -0.805069517605358610, -0.805039857575456600, -0.805010195532955160, -0.804980531477928360, +-0.804950865410450130, -0.804921197330594530, -0.804891527238436160, -0.804861855134048950, -0.804832181017507200, -0.804802504888884720, -0.804772826748256230, -0.804743146595695570, +-0.804713464431277110, -0.804683780255074810, -0.804654094067163150, -0.804624405867616410, -0.804594715656508640, -0.804565023433913670, -0.804535329199906560, -0.804505632954561120, +-0.804475934697951310, -0.804446234430151840, -0.804416532151236870, -0.804386827861280570, -0.804357121560356880, -0.804327413248540730, -0.804297702925905970, -0.804267990592527070, +-0.804238276248477880, -0.804208559893833220, -0.804178841528667140, -0.804149121153054040, -0.804119398767067730, -0.804089674370783380, -0.804059947964274710, -0.804030219547616220, +-0.804000489120881840, -0.803970756684146640, -0.803941022237484430, -0.803911285780969490, -0.803881547314676540, -0.803851806838679740, -0.803822064353053370, -0.803792319857871700, +-0.803762573353209440, -0.803732824839140660, -0.803703074315739950, -0.803673321783081150, -0.803643567241239420, -0.803613810690288810, -0.803584052130303590, -0.803554291561357940, +-0.803524528983526890, -0.803494764396884500, -0.803464997801505270, -0.803435229197463130, -0.803405458584833370, -0.803375685963689800, -0.803345911334107150, -0.803316134696159370, +-0.803286356049921490, -0.803256575395467800, -0.803226792732872340, -0.803197008062210170, -0.803167221383555560, -0.803137432696982790, -0.803107642002566240, -0.803077849300380840, +-0.803048054590500770, -0.803018257873000630, -0.802988459147954580, -0.802958658415437570, -0.802928855675524080, -0.802899050928288280, -0.802869244173804670, -0.802839435412148190, +-0.802809624643393120, -0.802779811867614050, -0.802749997084885040, -0.802720180295281470, -0.802690361498877400, -0.802660540695747100, -0.802630717885965740, -0.802600893069607580, +-0.802571066246747230, -0.802541237417458860, -0.802511406581817740, -0.802481573739898150, -0.802451738891774570, -0.802421902037521280, -0.802392063177213680, -0.802362222310925800, +-0.802332379438732370, -0.802302534560707770, -0.802272687676927050, -0.802242838787464720, -0.802212987892395150, -0.802183134991792950, -0.802153280085733170, -0.802123423174290200, +-0.802093564257538310, -0.802063703335552880, -0.802033840408408080, -0.802003975476178740, -0.801974108538939250, -0.801944239596764640, -0.801914368649729540, -0.801884495697908540, +-0.801854620741375920, -0.801824743780207070, -0.801794864814476370, -0.801764983844258540, -0.801735100869627960, -0.801705215890659790, -0.801675328907428650, -0.801645439920009250, +-0.801615548928475970, -0.801585655932903980, -0.801555760933368000, -0.801525863929942290, -0.801495964922702140, -0.801466063911722150, -0.801436160897076920, -0.801406255878841070, +-0.801376348857089860, -0.801346439831897790, -0.801316528803339480, -0.801286615771489740, -0.801256700736423740, -0.801226783698215870, -0.801196864656941070, -0.801166943612673930, +-0.801137020565489630, -0.801107095515462770, -0.801077168462668190, -0.801047239407180480, -0.801017308349074810, -0.800987375288426010, -0.800957440225308680, -0.800927503159797440, +-0.800897564091967880, -0.800867623021894290, -0.800837679949651380, -0.800807734875314540, -0.800777787798958360, -0.800747838720657690, -0.800717887640487240, -0.800687934558522270, +-0.800657979474837520, -0.800628022389507700, -0.800598063302607740, -0.800568102214212820, -0.800538139124397530, -0.800508174033236930, -0.800478206940805740, -0.800448237847179220, +-0.800418266752432110, -0.800388293656639330, -0.800358318559875600, -0.800328341462216320, -0.800298362363736190, -0.800268381264509830, -0.800238398164612840, -0.800208413064119830, +-0.800178425963105840, -0.800148436861645500, -0.800118445759814280, -0.800088452657686910, -0.800058457555338550, -0.800028460452843700, -0.799998461350277970, -0.799968460247716060, +-0.799938457145233040, -0.799908452042903620, -0.799878444940803290, -0.799848435839006890, -0.799818424737589350, -0.799788411636625510, -0.799758396536190960, -0.799728379436360330, +-0.799698360337208540, -0.799668339238811090, -0.799638316141242810, -0.799608291044578760, -0.799578263948893750, -0.799548234854263300, -0.799518203760762210, -0.799488170668465670, +-0.799458135577448380, -0.799428098487786070, -0.799398059399553550, -0.799368018312825780, -0.799337975227677800, -0.799307930144185110, -0.799277883062422530, -0.799247833982465350, +-0.799217782904388270, -0.799187729828267020, -0.799157674754176430, -0.799127617682191650, -0.799097558612387520, -0.799067497544839860, -0.799037434479623390, -0.799007369416813050, +-0.798977302356484560, -0.798947233298712870, -0.798917162243573010, -0.798887089191140040, -0.798857014141489570, -0.798826937094696650, -0.798796858050836330, -0.798766777009983550, +-0.798736693972214250, -0.798706608937603040, -0.798676521906225400, -0.798646432878156180, -0.798616341853471080, -0.798586248832245270, -0.798556153814553690, -0.798526056800471510, +-0.798495957790074540, -0.798465856783437510, -0.798435753780635690, -0.798405648781744800, -0.798375541786839670, -0.798345432795995680, -0.798315321809287880, -0.798285208826792100, +-0.798255093848583290, -0.798224976874736700, -0.798194857905327400, -0.798164736940431220, -0.798134613980123200, -0.798104489024478610, -0.798074362073572630, -0.798044233127480960, +-0.798014102186278660, -0.797983969250041230, -0.797953834318843480, -0.797923697392761480, -0.797893558471870160, -0.797863417556244790, -0.797833274645961100, -0.797803129741094240, +-0.797772982841719490, -0.797742833947912010, -0.797712683059747850, -0.797682530177301840, -0.797652375300649590, -0.797622218429866030, -0.797592059565027320, -0.797561898706208420, +-0.797531735853484690, -0.797501571006931420, -0.797471404166624540, -0.797441235332639110, -0.797411064505050620, -0.797380891683934110, -0.797350716869365650, -0.797320540061420500, +-0.797290361260173610, -0.797260180465701240, -0.797229997678078340, -0.797199812897380400, -0.797169626123682700, -0.797139437357061160, -0.797109246597591080, -0.797079053845347830, +-0.797048859100406790, -0.797018662362843800, -0.796988463632734120, -0.796958262910153260, -0.796928060195176590, -0.796897855487879950, -0.796867648788338710, -0.796837440096628380, +-0.796807229412824110, -0.796777016737002080, -0.796746802069237430, -0.796716585409605880, -0.796686366758182610, -0.796656146115043650, -0.796625923480264290, -0.796595698853919900, +-0.796565472236086420, -0.796535243626839360, -0.796505013026254200, -0.796474780434406230, -0.796444545851371590, -0.796414309277225560, -0.796384070712043760, -0.796353830155901440, +-0.796323587608874890, -0.796293343071039380, -0.796263096542470520, -0.796232848023243680, -0.796202597513434920, -0.796172345013119730, -0.796142090522373610, -0.796111834041271950, +-0.796081575569891120, -0.796051315108306290, -0.796021052656592840, -0.795990788214827050, -0.795960521783084410, -0.795930253361440300, -0.795899982949970440, -0.795869710548750780, +-0.795839436157856910, -0.795809159777364330, -0.795778881407348760, -0.795748601047886140, -0.795718318699051960, -0.795688034360922170, -0.795657748033571920, -0.795627459717077600, +-0.795597169411514590, -0.795566877116958620, -0.795536582833485270, -0.795506286561170730, -0.795475988300090360, -0.795445688050319900, -0.795415385811935380, -0.795385081585012530, +-0.795354775369626840, -0.795324467165854030, -0.795294156973770260, -0.795263844793451140, -0.795233530624972370, -0.795203214468409470, -0.795172896323838920, -0.795142576191335990, +-0.795112254070976740, -0.795081929962836550, -0.795051603866991810, -0.795021275783518000, -0.794990945712491070, -0.794960613653986510, -0.794930279608080600, -0.794899943574849050, +-0.794869605554367700, -0.794839265546712030, -0.794808923551958420, -0.794778579570182500, -0.794748233601459960, -0.794717885645866980, -0.794687535703479390, -0.794657183774372890, +-0.794626829858623210, -0.794596473956306730, -0.794566116067499050, -0.794535756192276010, -0.794505394330713320, -0.794475030482887480, -0.794444664648874090, -0.794414296828748980, +-0.794383927022587870, -0.794353555230467250, -0.794323181452462720, -0.794292805688650240, -0.794262427939105400, -0.794232048203904810, -0.794201666483124180, -0.794171282776839020, +-0.794140897085125920, -0.794110509408060610, -0.794080119745719020, -0.794049728098176870, -0.794019334465510650, -0.793988938847796090, -0.793958541245109230, -0.793928141657525790, +-0.793897740085122150, -0.793867336527974250, -0.793836930986157930, -0.793806523459749000, -0.793776113948824080, -0.793745702453458880, -0.793715288973729450, -0.793684873509711510, +-0.793654456061481660, -0.793624036629115630, -0.793593615212689230, -0.793563191812279190, -0.793532766427961000, -0.793502339059811050, -0.793471909707904820, -0.793441478372319150, +-0.793411045053129870, -0.793380609750412910, -0.793350172464244110, -0.793319733194700280, -0.793289291941856930, -0.793258848705790550, -0.793228403486576640, -0.793197956284292020, +-0.793167507099012510, -0.793137055930814290, -0.793106602779773180, -0.793076147645965680, -0.793045690529467940, -0.793015231430355680, -0.792984770348705630, -0.792954307284593600, +-0.792923842238095870, -0.792893375209288150, -0.792862906198247400, -0.792832435205049310, -0.792801962229770170, -0.792771487272485810, -0.792741010333272930, -0.792710531412207600, +-0.792680050509366070, -0.792649567624823970, -0.792619082758658330, -0.792588595910944880, -0.792558107081760000, -0.792527616271179620, -0.792497123479280360, -0.792466628706138380, +-0.792436131951829830, -0.792405633216430650, -0.792375132500017680, -0.792344629802666840, -0.792314125124454200, -0.792283618465456470, -0.792253109825749700, -0.792222599205410160, +-0.792192086604513900, -0.792161572023137640, -0.792131055461357540, -0.792100536919249750, -0.792070016396890340, -0.792039493894356130, -0.792008969411723160, -0.791978442949067830, +-0.791947914506466180, -0.791917384083994920, -0.791886851681730230, -0.791856317299748370, -0.791825780938125500, -0.791795242596938450, -0.791764702276263280, -0.791734159976176020, +-0.791703615696753740, -0.791673069438072360, -0.791642521200208280, -0.791611970983237660, -0.791581418787237420, -0.791550864612283630, -0.791520308458452670, -0.791489750325820580, +-0.791459190214464540, -0.791428628124460350, -0.791398064055884750, -0.791367498008813560, -0.791336929983324060, -0.791306359979492170, -0.791275787997394290, -0.791245214037106790, +-0.791214638098706510, -0.791184060182269610, -0.791153480287872250, -0.791122898415591580, -0.791092314565503550, -0.791061728737684770, -0.791031140932211390, -0.791000551149160460, +-0.790969959388608030, -0.790939365650630830, -0.790908769935305010, -0.790878172242707400, -0.790847572572914380, -0.790816970926002450, -0.790786367302047880, -0.790755761701127600, +-0.790725154123317900, -0.790694544568695370, -0.790663933037336180, -0.790633319529317370, -0.790602704044715330, -0.790572086583606560, -0.790541467146067210, -0.790510845732174560, +-0.790480222342004660, -0.790449596975634110, -0.790418969633139730, -0.790388340314597930, -0.790357709020085290, -0.790327075749678090, -0.790296440503453490, -0.790265803281487880, +-0.790235164083857630, -0.790204522910639250, -0.790173879761909780, -0.790143234637745720, -0.790112587538223550, -0.790081938463419560, -0.790051287413411020, -0.790020634388274300, +-0.789989979388086020, -0.789959322412922440, -0.789928663462860840, -0.789898002537977590, -0.789867339638349100, -0.789836674764052500, -0.789806007915164310, -0.789775339091761010, +-0.789744668293919090, -0.789713995521715730, -0.789683320775227400, -0.789652644054530840, -0.789621965359702300, -0.789591284690819300, -0.789560602047957970, -0.789529917431195050, +-0.789499230840607140, -0.789468542276271500, -0.789437851738264420, -0.789407159226662710, -0.789376464741542880, -0.789345768282982090, -0.789315069851056930, -0.789284369445843790, +-0.789253667067420060, -0.789222962715862120, -0.789192256391246790, -0.789161548093650470, -0.789130837823150630, -0.789100125579823670, -0.789069411363746420, -0.789038695174995360, +-0.789007977013647780, -0.788977256879780380, -0.788946534773469770, -0.788915810694792550, -0.788885084643826010, -0.788854356620646850, -0.788823626625331790, -0.788792894657957430, +-0.788762160718600950, -0.788731424807339150, -0.788700686924248550, -0.788669947069406520, -0.788639205242889660, -0.788608461444774700, -0.788577715675138350, -0.788546967934057990, +-0.788516218221610110, -0.788485466537871770, -0.788454712882919460, -0.788423957256830680, -0.788393199659682020, -0.788362440091550320, -0.788331678552512290, -0.788300915042645320, +-0.788270149562026010, -0.788239382110731410, -0.788208612688838020, -0.788177841296423430, -0.788147067933564150, -0.788116292600337220, -0.788085515296819360, -0.788054736023087950, +-0.788023954779219720, -0.787993171565291250, -0.787962386381380160, -0.787931599227563170, -0.787900810103917100, -0.787870019010518790, -0.787839225947445710, -0.787808430914774480, +-0.787777633912582260, -0.787746834940945660, -0.787716033999942280, -0.787685231089648720, -0.787654426210142140, -0.787623619361499160, -0.787592810543797480, -0.787561999757113830, +-0.787531187001525020, -0.787500372277108120, -0.787469555583940490, -0.787438736922098980, -0.787407916291660400, -0.787377093692702260, -0.787346269125301370, -0.787315442589534790, +-0.787284614085479340, -0.787253783613212740, -0.787222951172811490, -0.787192116764353080, -0.787161280387914000, -0.787130442043571970, -0.787099601731403810, -0.787068759451486690, +-0.787037915203897430, -0.787007068988713530, -0.786976220806012150, -0.786945370655870110, -0.786914518538364360, -0.786883664453572610, -0.786852808401571680, -0.786821950382438520, +-0.786791090396250610, -0.786760228443085130, -0.786729364523019000, -0.786698498636129170, -0.786667630782493470, -0.786636760962188600, -0.786605889175291840, -0.786575015421880130, +-0.786544139702031080, -0.786513262015821720, -0.786482382363329240, -0.786451500744630550, -0.786420617159803270, -0.786389731608924560, -0.786358844092071460, -0.786327954609321030, +-0.786297063160750880, -0.786266169746438150, -0.786235274366460010, -0.786204377020893410, -0.786173477709816050, -0.786142576433305100, -0.786111673191437380, -0.786080767984290830, +-0.786049860811942280, -0.786018951674469110, -0.785988040571948270, -0.785957127504457560, -0.785926212472074170, -0.785895295474875130, -0.785864376512937610, -0.785833455586339440, +-0.785802532695157650, -0.785771607839469420, -0.785740681019352020, -0.785709752234883150, -0.785678821486139880, -0.785647888773199580, -0.785616954096139190, -0.785586017455036870, +-0.785555078849969330, -0.785524138281013970, -0.785493195748248390, -0.785462251251749950, -0.785431304791595840, -0.785400356367863210, -0.785369405980629880, -0.785338453629973120, +-0.785307499315970210, -0.785276543038698200, -0.785245584798235250, -0.785214624594658180, -0.785183662428044720, -0.785152698298471670, -0.785121732206017220, -0.785090764150758510, +-0.785059794132772830, -0.785028822152137320, -0.784997848208930150, -0.784966872303228260, -0.784935894435108920, -0.784904914604650170, -0.784873932811929190, -0.784842949057023230, +-0.784811963340009690, -0.784780975660966610, -0.784749986019970920, -0.784718994417100360, -0.784688000852432070, -0.784657005326043990, -0.784626007838013400, -0.784595008388417890, +-0.784564006977334530, -0.784533003604841350, -0.784501998271015740, -0.784470990975935090, -0.784439981719676770, -0.784408970502318610, -0.784377957323938220, -0.784346942184612760, +-0.784315925084419830, -0.784284906023437260, -0.784253885001742420, -0.784222862019412600, -0.784191837076525950, -0.784160810173159750, -0.784129781309391370, -0.784098750485298420, +-0.784067717700958730, -0.784036682956449900, -0.784005646251849210, -0.783974607587234250, -0.783943566962682970, -0.783912524378272750, -0.783881479834081300, -0.783850433330185890, +-0.783819384866664580, -0.783788334443594860, -0.783757282061054330, -0.783726227719120260, -0.783695171417870930, -0.783664113157383600, -0.783633052937735890, -0.783601990759005720, +-0.783570926621270480, -0.783539860524608000, -0.783508792469095660, -0.783477722454811510, -0.783446650481833150, -0.783415576550238080, -0.783384500660103790, -0.783353422811508660, +-0.783322343004529850, -0.783291261239245200, -0.783260177515732070, -0.783229091834068860, -0.783198004194332940, -0.783166914596601930, -0.783135823040953420, -0.783104729527465570, +-0.783073634056215990, -0.783042536627281960, -0.783011437240741850, -0.782980335896673150, -0.782949232595153700, -0.782918127336260870, -0.782887020120072940, -0.782855910946667510, +-0.782824799816122300, -0.782793686728514790, -0.782762571683923270, -0.782731454682425440, -0.782700335724098920, -0.782669214809021300, -0.782638091937270960, -0.782606967108925300, +-0.782575840324062360, -0.782544711582759400, -0.782513580885095040, -0.782482448231146650, -0.782451313620991850, -0.782420177054709120, -0.782389038532375960, -0.782357898054070080, +-0.782326755619869310, -0.782295611229851810, -0.782264464884095400, -0.782233316582677810, -0.782202166325676520, -0.782171014113170250, -0.782139859945236380, -0.782108703821952860, +-0.782077545743397270, -0.782046385709648130, -0.782015223720783030, -0.781984059776879900, -0.781952893878016250, -0.781921726024270790, -0.781890556215720900, -0.781859384452444630, +-0.781828210734519690, -0.781797035062024470, -0.781765857435036570, -0.781734677853633820, -0.781703496317894710, -0.781672312827896840, -0.781641127383718160, -0.781609939985436370, +-0.781578750633129980, -0.781547559326876810, -0.781516366066754680, -0.781485170852841300, -0.781453973685215300, -0.781422774563954480, -0.781391573489136570, -0.781360370460839610, +-0.781329165479141880, -0.781297958544121320, -0.781266749655855740, -0.781235538814423090, -0.781204326019901860, -0.781173111272369880, -0.781141894571904750, -0.781110675918585180, +-0.781079455312488900, -0.781048232753694060, -0.781017008242278380, -0.780985781778320340, -0.780954553361897900, -0.780923322993089090, -0.780892090671971740, -0.780860856398624350, +-0.780829620173124850, -0.780798381995551290, -0.780767141865981510, -0.780735899784494200, -0.780704655751167100, -0.780673409766078350, -0.780642161829305790, -0.780610911940928130, +-0.780579660101023200, -0.780548406309668820, -0.780517150566943710, -0.780485892872925690, -0.780454633227692930, -0.780423371631323360, -0.780392108083895700, -0.780360842585487660, +-0.780329575136177510, -0.780298305736043200, -0.780267034385163430, -0.780235761083616030, -0.780204485831479280, -0.780173208628830990, -0.780141929475749900, -0.780110648372314030, +-0.780079365318601560, -0.780048080314690420, -0.780016793360659320, -0.779985504456586210, -0.779954213602549460, -0.779922920798626800, -0.779891626044897150, -0.779860329341438340, +-0.779829030688328540, -0.779797730085646460, -0.779766427533469920, -0.779735123031877420, -0.779703816580946780, -0.779672508180756950, -0.779641197831385860, -0.779609885532911660, +-0.779578571285412520, -0.779547255088967270, -0.779515936943653840, -0.779484616849550620, -0.779453294806735530, -0.779421970815287410, -0.779390644875284530, -0.779359316986804940, +-0.779327987149926790, -0.779296655364728920, -0.779265321631289480, -0.779233985949686400, -0.779202648319998640, -0.779171308742304340, -0.779139967216681660, -0.779108623743208880, +-0.779077278321964720, -0.779045930953027430, -0.779014581636475300, -0.778983230372386480, -0.778951877160839800, -0.778920522001913420, -0.778889164895685830, -0.778857805842234960, +-0.778826444841639880, -0.778795081893978610, -0.778763716999329780, -0.778732350157771310, -0.778700981369382150, -0.778669610634240670, -0.778638237952424930, -0.778606863324013740, +-0.778575486749085390, -0.778544108227718470, -0.778512727759990810, -0.778481345345981790, -0.778449960985769240, -0.778418574679431870, -0.778387186427047850, -0.778355796228696000, +-0.778324404084454800, -0.778293009994402540, -0.778261613958617480, -0.778230215977178560, -0.778198816050164280, -0.778167414177652890, -0.778136010359722570, -0.778104604596452700, +-0.778073196887921200, -0.778041787234206470, -0.778010375635387440, -0.777978962091542600, -0.777947546602750340, -0.777916129169088920, -0.777884709790637400, -0.777853288467474150, +-0.777821865199677660, -0.777790439987326330, -0.777759012830499090, -0.777727583729274310, -0.777696152683730600, -0.777664719693946240, -0.777633284760000270, -0.777601847881971180, +-0.777570409059937460, -0.777538968293977390, -0.777507525584170240, -0.777476080930594280, -0.777444634333328110, -0.777413185792450000, -0.777381735308039220, -0.777350282880174160, +-0.777318828508933190, -0.777287372194395250, -0.777255913936638950, -0.777224453735742890, -0.777192991591785450, -0.777161527504845790, -0.777130061475002300, -0.777098593502333570, +-0.777067123586918210, -0.777035651728835260, -0.777004177928163120, -0.776972702184980710, -0.776941224499366090, -0.776909744871398740, -0.776878263301157060, -0.776846779788719740, +-0.776815294334165190, -0.776783806937572650, -0.776752317599020530, -0.776720826318587410, -0.776689333096352460, -0.776657837932394290, -0.776626340826791380, -0.776594841779622460, +-0.776563340790966670, -0.776531837860902520, -0.776500332989508710, -0.776468826176863970, -0.776437317423047220, -0.776405806728137300, -0.776374294092212920, -0.776342779515352470, +-0.776311262997635310, -0.776279744539140060, -0.776248224139945320, -0.776216701800129920, -0.776185177519772900, -0.776153651298952970, -0.776122123137748640, -0.776090593036239400, +-0.776059060994503500, -0.776027527012620010, -0.775995991090667530, -0.775964453228725200, -0.775932913426871760, -0.775901371685186140, -0.775869828003746710, -0.775838282382632970, +-0.775806734821923640, -0.775775185321697420, -0.775743633882032930, -0.775712080503009660, -0.775680525184706200, -0.775648967927201390, -0.775617408730573940, -0.775585847594903120, +-0.775554284520267870, -0.775522719506746780, -0.775491152554418580, -0.775459583663362870, -0.775428012833658140, -0.775396440065383220, -0.775364865358617370, -0.775333288713439320, +-0.775301710129928210, -0.775270129608162440, -0.775238547148221600, -0.775206962750184410, -0.775175376414129810, -0.775143788140136510, -0.775112197928284010, -0.775080605778651010, +-0.775049011691316570, -0.775017415666359180, -0.774985817703858660, -0.774954217803893510, -0.774922615966542880, -0.774891012191885390, -0.774859406480000620, -0.774827798830967420, +-0.774796189244864380, -0.774764577721771210, -0.774732964261766520, -0.774701348864929470, -0.774669731531338780, -0.774638112261073930, -0.774606491054213860, -0.774574867910837630, +-0.774543242831023940, -0.774511615814852390, -0.774479986862401710, -0.774448355973751170, -0.774416723148979470, -0.774385088388166220, -0.774353451691390250, -0.774321813058730600, +-0.774290172490266220, -0.774258529986076690, -0.774226885546240750, -0.774195239170837320, -0.774163590859946240, -0.774131940613645990, -0.774100288432015950, -0.774068634315134950, +-0.774036978263082600, -0.774005320275937820, -0.773973660353779680, -0.773941998496687210, -0.773910334704740020, -0.773878668978016940, -0.773847001316597230, -0.773815331720559610, +-0.773783660189984120, -0.773751986724949380, -0.773720311325534650, -0.773688633991818970, -0.773656954723881850, -0.773625273521802440, -0.773593590385659560, -0.773561905315532930, +-0.773530218311501590, -0.773498529373644720, -0.773466838502041230, -0.773435145696770850, -0.773403450957912630, -0.773371754285545940, -0.773340055679749390, -0.773308355140603030, +-0.773276652668185790, -0.773244948262577060, -0.773213241923855540, -0.773181533652101180, -0.773149823447393030, -0.773118111309810230, -0.773086397239431950, -0.773054681236338030, +-0.773022963300607380, -0.772991243432319170, -0.772959521631552680, -0.772927797898387730, -0.772896072232903240, -0.772864344635178280, -0.772832615105292660, -0.772800883643325550, +-0.772769150249356330, -0.772737414923463820, -0.772705677665728170, -0.772673938476228230, -0.772642197355043470, -0.772610454302252950, -0.772578709317936600, -0.772546962402173460, +-0.772515213555042930, -0.772483462776624050, -0.772451710066996760, -0.772419955426240310, -0.772388198854433880, -0.772356440351656740, -0.772324679917988700, -0.772292917553508930, +-0.772261153258296700, -0.772229387032431820, -0.772197618875993470, -0.772165848789061030, -0.772134076771713750, -0.772102302824031580, -0.772070526946093570, -0.772038749137979320, +-0.772006969399767870, -0.771975187731539280, -0.771943404133372810, -0.771911618605347740, -0.771879831147543330, -0.771848041760039630, -0.771816250442915910, -0.771784457196251440, +-0.771752662020125600, -0.771720864914618440, -0.771689065879809010, -0.771657264915776690, -0.771625462022601520, -0.771593657200362770, -0.771561850449139720, -0.771530041769011850, +-0.771498231160059110, -0.771466418622360760, -0.771434604155996410, -0.771402787761045320, -0.771370969437587430, -0.771339149185702230, -0.771307327005469110, -0.771275502896967450, +-0.771243676860277170, -0.771211848895477780, -0.771180019002648760, -0.771148187181869500, -0.771116353433219940, -0.771084517756779550, -0.771052680152627850, -0.771020840620844190, +-0.770988999161508650, -0.770957155774700700, -0.770925310460499500, -0.770893463218985330, -0.770861614050237560, -0.770829762954335700, -0.770797909931359100, -0.770766054981388060, +-0.770734198104501940, -0.770702339300780250, -0.770670478570302460, -0.770638615913148750, -0.770606751329398490, -0.770574884819131390, -0.770543016382426730, -0.770511146019364880, +-0.770479273730025120, -0.770447399514487150, -0.770415523372830480, -0.770383645305135260, -0.770351765311480970, -0.770319883391946900, -0.770287999546613420, -0.770256113775559910, +-0.770224226078866200, -0.770192336456611560, -0.770160444908876470, -0.770128551435740220, -0.770096656037282500, -0.770064758713582930, -0.770032859464721780, -0.770000958290778410, +-0.769969055191832670, -0.769937150167964050, -0.769905243219252800, -0.769873334345778430, -0.769841423547620750, -0.769809510824859270, -0.769777596177574240, -0.769745679605845280, +-0.769713761109751760, -0.769681840689374170, -0.769649918344791910, -0.769617994076085000, -0.769586067883332610, -0.769554139766615460, -0.769522209726013040, -0.769490277761604950, +-0.769458343873470900, -0.769426408061691380, -0.769394470326345780, -0.769362530667513920, -0.769330589085275520, -0.769298645579711060, -0.769266700150899820, -0.769234752798921840, +-0.769202803523856730, -0.769170852325784970, -0.769138899204785950, -0.769106944160939500, -0.769074987194325880, -0.769043028305024910, -0.769011067493116210, -0.768979104758679700, +-0.768947140101795660, -0.768915173522543790, -0.768883205021003930, -0.768851234597255790, -0.768819262251379860, -0.768787287983455860, -0.768755311793563490, -0.768723333681782690, +-0.768691353648193740, -0.768659371692876460, -0.768627387815910780, -0.768595402017376310, -0.768563414297353640, -0.768531424655922390, -0.768499433093162600, -0.768467439609153870, +-0.768435444203976910, -0.768403446877711340, -0.768371447630436850, -0.768339446462234070, -0.768307443373182570, -0.768275438363362540, -0.768243431432853670, -0.768211422581736470, +-0.768179411810090640, -0.768147399117996340, -0.768115384505533290, -0.768083367972781980, -0.768051349519822350, -0.768019329146734320, -0.767987306853597620, -0.767955282640493060, +-0.767923256507500150, -0.767891228454699150, -0.767859198482169880, -0.767827166589992840, -0.767795132778247850, -0.767763097047014730, -0.767731059396374200, -0.767699019826405980, +-0.767666978337190220, -0.767634934928806740, -0.767602889601336270, -0.767570842354858510, -0.767538793189453620, -0.767506742105201530, -0.767474689102182860, -0.767442634180477420, +-0.767410577340165490, -0.767378518581326660, -0.767346457904041990, -0.767314395308391070, -0.767282330794454290, -0.767250264362311250, -0.767218196012042890, -0.767186125743729020, +-0.767154053557449590, -0.767121979453285310, -0.767089903431316110, -0.767057825491622050, -0.767025745634283270, -0.766993663859380280, -0.766961580166993230, -0.766929494557202160, +-0.766897407030087130, -0.766865317585728850, -0.766833226224207240, -0.766801132945602590, -0.766769037749994830, -0.766736940637464780, -0.766704841608092380, -0.766672740661957790, +-0.766640637799141160, -0.766608533019723200, -0.766576426323783870, -0.766544317711403520, -0.766512207182662110, -0.766480094737640340, -0.766447980376418480, -0.766415864099076360, +-0.766383745905694800, -0.766351625796353850, -0.766319503771133890, -0.766287379830114970, -0.766255253973377790, -0.766223126201002410, -0.766190996513069320, -0.766158864909658450, +-0.766126731390850630, -0.766094595956726130, -0.766062458607364990, -0.766030319342847490, -0.765998178163254440, -0.765966035068666010, -0.765933890059162460, -0.765901743134823840, +-0.765869594295731200, -0.765837443541964590, -0.765805290873604050, -0.765773136290730630, -0.765740979793424260, -0.765708821381765550, -0.765676661055834430, -0.765644498815711950, +-0.765612334661478270, -0.765580168593213760, -0.765548000610998480, -0.765515830714913470, -0.765483658905039000, -0.765451485181455340, -0.765419309544242640, -0.765387131993481960, +-0.765354952529253450, -0.765322771151637490, -0.765290587860714470, -0.765258402656565200, -0.765226215539269840, -0.765194026508908780, -0.765161835565562940, -0.765129642709312390, +-0.765097447940237820, -0.765065251258419290, -0.765033052663937950, -0.765000852156874080, -0.764968649737307940, -0.764936445405319910, -0.764904239160991150, -0.764872031004401710, +-0.764839820935632190, -0.764807608954762850, -0.764775395061874750, -0.764743179257048160, -0.764710961540363670, -0.764678741911901440, -0.764646520371742630, -0.764614296919967630, +-0.764582071556656470, -0.764549844281890540, -0.764517615095749890, -0.764485383998315230, -0.764453150989666930, -0.764420916069885940, -0.764388679239052630, -0.764356440497247710, +-0.764324199844551360, -0.764291957281044710, -0.764259712806808270, -0.764227466421922520, -0.764195218126467850, -0.764162967920525400, -0.764130715804175580, -0.764098461777498850, +-0.764066205840575720, -0.764033947993487450, -0.764001688236314200, -0.763969426569136800, -0.763937162992035510, -0.763904897505091610, -0.763872630108385580, -0.763840360801997580, +-0.763808089586008990, -0.763775816460500080, -0.763743541425551790, -0.763711264481244270, -0.763678985627658790, -0.763646704864875960, -0.763614422192976370, -0.763582137612040410, +-0.763549851122149350, -0.763517562723383780, -0.763485272415824200, -0.763452980199551210, -0.763420686074645970, -0.763388390041189080, -0.763356092099261250, -0.763323792248942870, +-0.763291490490315310, -0.763259186823458950, -0.763226881248454390, -0.763194573765382910, -0.763162264374325110, -0.763129953075361470, -0.763097639868572710, -0.763065324754040210, +-0.763033007731844350, -0.763000688802065950, -0.762968367964785620, -0.762936045220084620, -0.762903720568043450, -0.762871394008743040, -0.762839065542263770, -0.762806735168687240, +-0.762774402888093840, -0.762742068700564380, -0.762709732606179470, -0.762677394605020600, -0.762645054697168150, -0.762612712882702830, -0.762580369161705910, -0.762548023534258210, +-0.762515676000440350, -0.762483326560333130, -0.762450975214017830, -0.762418621961575060, -0.762386266803085740, -0.762353909738630490, -0.762321550768290670, -0.762289189892147110, +-0.762256827110280530, -0.762224462422771530, -0.762192095829701710, -0.762159727331151670, -0.762127356927202240, -0.762094984617934120, -0.762062610403428930, -0.762030234283767150, +-0.761997856259029830, -0.761965476329297560, -0.761933094494651850, -0.761900710755173520, -0.761868325110943050, -0.761835937562042040, -0.761803548108551110, -0.761771156750551400, +-0.761738763488123530, -0.761706368321349080, -0.761673971250308560, -0.761641572275083220, -0.761609171395753680, -0.761576768612401420, -0.761544363925107270, -0.761511957333952270, +-0.761479548839017030, -0.761447138440383140, -0.761414726138131550, -0.761382311932343070, -0.761349895823098530, -0.761317477810479540, -0.761285057894566800, -0.761252636075441250, +-0.761220212353184270, -0.761187786727876790, -0.761155359199599870, -0.761122929768434320, -0.761090498434461640, -0.761058065197762760, -0.761025630058418720, -0.760993193016510250, +-0.760960754072119160, -0.760928313225326170, -0.760895870476212430, -0.760863425824858660, -0.760830979271346690, -0.760798530815757210, -0.760766080458171400, -0.760733628198670080, +-0.760701174037335060, -0.760668717974247070, -0.760636260009487030, -0.760603800143136550, -0.760571338375276570, -0.760538874705988350, -0.760506409135352610, -0.760473941663451060, +-0.760441472290364740, -0.760409001016174700, -0.760376527840961880, -0.760344052764807990, -0.760311575787794070, -0.760279096910001170, -0.760246616131510230, -0.760214133452402960, +-0.760181648872760410, -0.760149162392663840, -0.760116674012193960, -0.760084183731432720, -0.760051691550461040, -0.760019197469359750, -0.759986701488210900, -0.759954203607095200, +-0.759921703826093920, -0.759889202145288210, -0.759856698564759790, -0.759824193084589590, -0.759791685704858890, -0.759759176425648720, -0.759726665247040910, -0.759694152169116400, +-0.759661637191956450, -0.759629120315642230, -0.759596601540255430, -0.759564080865877230, -0.759531558292588670, -0.759499033820471010, -0.759466507449606090, -0.759433979180074940, +-0.759401449011958720, -0.759368916945338590, -0.759336382980296490, -0.759303847116913460, -0.759271309355270540, -0.759238769695449680, -0.759206228137531800, -0.759173684681598290, +-0.759141139327730310, -0.759108592076009890, -0.759076042926517980, -0.759043491879335840, -0.759010938934544740, -0.758978384092226620, -0.758945827352462520, -0.758913268715333820, +-0.758880708180921680, -0.758848145749308150, -0.758815581420574150, -0.758783015194801180, -0.758750447072070400, -0.758717877052463850, -0.758685305136062470, -0.758652731322947640, +-0.758620155613201290, -0.758587578006904570, -0.758554998504138880, -0.758522417104985360, -0.758489833809526060, -0.758457248617842250, -0.758424661530015310, -0.758392072546126390, +-0.758359481666257660, -0.758326888890490160, -0.758294294218905480, -0.758261697651584690, -0.758229099188610030, -0.758196498830062570, -0.758163896576023900, -0.758131292426575180, +-0.758098686381798450, -0.758066078441775200, -0.758033468606586270, -0.758000856876314020, -0.757968243251039730, -0.757935627730844660, -0.757903010315810310, -0.757870391006018720, +-0.757837769801551260, -0.757805146702489220, -0.757772521708914070, -0.757739894820907980, -0.757707266038552100, -0.757674635361928030, -0.757642002791117040, -0.757609368326201400, +-0.757576731967262380, -0.757544093714381470, -0.757511453567640050, -0.757478811527120270, -0.757446167592903400, -0.757413521765071260, -0.757380874043704910, -0.757348224428886720, +-0.757315572920697950, -0.757282919519220000, -0.757250264224535010, -0.757217607036724360, -0.757184947955869660, -0.757152286982052390, -0.757119624115354610, -0.757086959355857790, +-0.757054292703643550, -0.757021624158793260, -0.756988953721389300, -0.756956281391512940, -0.756923607169245780, -0.756890931054669420, -0.756858253047866030, -0.756825573148916850, +-0.756792891357903950, -0.756760207674908370, -0.756727522100012600, -0.756694834633298120, -0.756662145274846100, -0.756629454024739130, -0.756596760883058490, -0.756564065849886000, +-0.756531368925303040, -0.756498670109391870, -0.756465969402234100, -0.756433266803911320, -0.756400562314505140, -0.756367855934097830, -0.756335147662770990, -0.756302437500606110, +-0.756269725447684890, -0.756237011504089730, -0.756204295669901990, -0.756171577945203510, -0.756138858330075880, -0.756106136824601260, -0.756073413428861360, -0.756040688142937570, +-0.756007960966912470, -0.755975231900867350, -0.755942500944884130, -0.755909768099044530, -0.755877033363430710, -0.755844296738124250, -0.755811558223207220, -0.755778817818760880, +-0.755746075524867830, -0.755713331341609560, -0.755680585269067890, -0.755647837307324540, -0.755615087456461890, -0.755582335716561530, -0.755549582087705400, -0.755516826569974880, +-0.755484069163452680, -0.755451309868220290, -0.755418548684359310, -0.755385785611952240, -0.755353020651080680, -0.755320253801826660, -0.755287485064271680, -0.755254714438498230, +-0.755221941924588020, -0.755189167522622990, -0.755156391232684740, -0.755123613054855760, -0.755090832989217860, -0.755058051035852770, -0.755025267194842310, -0.754992481466268960, +-0.754959693850214440, -0.754926904346760570, -0.754894112955989180, -0.754861319677982980, -0.754828524512823230, -0.754795727460592310, -0.754762928521371830, -0.754730127695244170, +-0.754697324982291360, -0.754664520382594790, -0.754631713896237290, -0.754598905523300440, -0.754566095263866420, -0.754533283118016820, -0.754500469085834350, -0.754467653167400610, +-0.754434835362797870, -0.754402015672107630, -0.754369194095412700, -0.754336370632794790, -0.754303545284335960, -0.754270718050117920, -0.754237888930223480, -0.754205057924734130, +-0.754172225033732270, -0.754139390257299590, -0.754106553595518700, -0.754073715048471430, -0.754040874616239480, -0.754008032298905780, -0.753975188096551950, -0.753942342009260140, +-0.753909494037112160, -0.753876644180190740, -0.753843792438577690, -0.753810938812355170, -0.753778083301605120, -0.753745225906410020, -0.753712366626851930, -0.753679505463012880, +-0.753646642414974810, -0.753613777482820320, -0.753580910666631460, -0.753548041966490390, -0.753515171382478920, -0.753482298914679770, -0.753449424563174870, -0.753416548328046050, +-0.753383670209376240, -0.753350790207247160, -0.753317908321741170, -0.753285024552940220, -0.753252138900926900, -0.753219251365783160, -0.753186361947591370, -0.753153470646433450, +-0.753120577462392030, -0.753087682395549240, -0.753054785445987250, -0.753021886613787990, -0.752988985899034290, -0.752956083301808080, -0.752923178822191730, -0.752890272460267070, +-0.752857364216117150, -0.752824454089823680, -0.752791542081469260, -0.752758628191135480, -0.752725712418905510, -0.752692794764861280, -0.752659875229084730, -0.752626953811658890, +-0.752594030512665490, -0.752561105332187120, -0.752528178270305710, -0.752495249327104100, -0.752462318502664430, -0.752429385797068860, -0.752396451210399660, -0.752363514742739550, +-0.752330576394170670, -0.752297636164775300, -0.752264694054635590, -0.752231750063834470, -0.752198804192453880, -0.752165856440576430, -0.752132906808283930, -0.752099955295659430, +-0.752067001902785080, -0.752034046629743050, -0.752001089476616040, -0.751968130443486320, -0.751935169530436380, -0.751902206737548150, -0.751869242064904690, -0.751836275512588140, +-0.751803307080680880, -0.751770336769265080, -0.751737364578423770, -0.751704390508239010, -0.751671414558793270, -0.751638436730168720, -0.751605457022448410, -0.751572475435714370, +-0.751539491970049210, -0.751506506625534980, -0.751473519402254820, -0.751440530300290790, -0.751407539319725260, -0.751374546460641060, -0.751341551723120560, -0.751308555107246150, +-0.751275556613100080, -0.751242556240765410, -0.751209553990324300, -0.751176549861859330, -0.751143543855452680, -0.751110535971187600, -0.751077526209146030, -0.751044514569410680, +-0.751011501052063710, -0.750978485657188390, -0.750945468384866750, -0.750912449235181520, -0.750879428208214850, -0.750846405304049780, -0.750813380522768910, -0.750780353864454190, +-0.750747325329188860, -0.750714294917055210, -0.750681262628135840, -0.750648228462513110, -0.750615192420269970, -0.750582154501489020, -0.750549114706252520, -0.750516073034642960, +-0.750483029486743500, -0.750449984062636520, -0.750416936762404620, -0.750383887586129950, -0.750350836533896000, -0.750317783605784940, -0.750284728801879350, -0.750251672122261630, +-0.750218613567015140, -0.750185553136222040, -0.750152490829965050, -0.750119426648326540, -0.750086360591389780, -0.750053292659237150, -0.750020222851950910, -0.749987151169614450, +-0.749954077612310140, -0.749921002180120590, -0.749887924873128280, -0.749854845691416360, -0.749821764635067440, -0.749788681704164130, -0.749755596898788680, -0.749722510219024580, +-0.749689421664954340, -0.749656331236660420, -0.749623238934225330, -0.749590144757732560, -0.749557048707264360, -0.749523950782903570, -0.749490850984732560, -0.749457749312834820, +-0.749424645767292620, -0.749391540348188560, -0.749358433055605900, -0.749325323889627140, -0.749292212850335090, -0.749259099937812260, -0.749225985152141890, -0.749192868493406610, +-0.749159749961689210, -0.749126629557072100, -0.749093507279638640, -0.749060383129471430, -0.749027257106653410, -0.748994129211266850, -0.748960999443395230, -0.748927867803121150, +-0.748894734290527330, -0.748861598905696480, -0.748828461648711860, -0.748795322519656080, -0.748762181518611850, -0.748729038645662200, -0.748695893900890200, -0.748662747284378320, +-0.748629598796209380, -0.748596448436466670, -0.748563296205232880, -0.748530142102590830, -0.748496986128623030, -0.748463828283413180, -0.748430668567043770, -0.748397506979597620, +-0.748364343521157440, -0.748331178191806720, -0.748298010991627960, -0.748264841920704300, -0.748231670979118140, -0.748198498166953160, -0.748165323484291880, -0.748132146931217320, +-0.748098968507812100, -0.748065788214159810, -0.748032606050343050, -0.747999422016444430, -0.747966236112547530, -0.747933048338734970, -0.747899858695089900, -0.747866667181694920, +-0.747833473798633520, -0.747800278545988410, -0.747767081423842630, -0.747733882432278900, -0.747700681571380700, -0.747667478841230750, -0.747634274241912200, -0.747601067773507650, +-0.747567859436100710, -0.747534649229774080, -0.747501437154610810, -0.747468223210693730, -0.747435007398106420, -0.747401789716931500, -0.747368570167251890, -0.747335348749151080, +-0.747302125462711910, -0.747268900308017400, -0.747235673285150390, -0.747202444394194480, -0.747169213635232480, -0.747135981008347440, -0.747102746513622180, -0.747069510151140310, +-0.747036271920984650, -0.747003031823238350, -0.746969789857984120, -0.746936546025305680, -0.746903300325286070, -0.746870052758008110, -0.746836803323554620, -0.746803552022009540, +-0.746770298853455470, -0.746737043817975450, -0.746703786915653090, -0.746670528146571200, -0.746637267510813050, -0.746604005008461470, -0.746570740639600160, -0.746537474404311950, +-0.746504206302680110, -0.746470936334787450, -0.746437664500717690, -0.746404390800553870, -0.746371115234378930, -0.746337837802276030, -0.746304558504328750, -0.746271277340620150, +-0.746237994311233280, -0.746204709416251170, -0.746171422655757640, -0.746138134029835420, -0.746104843538567990, -0.746071551182038050, -0.746038256960329660, -0.746004960873525520, +-0.745971662921708690, -0.745938363104962980, -0.745905061423371430, -0.745871757877017210, -0.745838452465983350, -0.745805145190353570, -0.745771836050210910, -0.745738525045638760, +-0.745705212176719920, -0.745671897443538350, -0.745638580846177070, -0.745605262384719360, -0.745571942059248150, -0.745538619869847370, -0.745505295816600080, -0.745471969899589530, +-0.745438642118898760, -0.745405312474611730, -0.745371980966811340, -0.745338647595580770, -0.745305312361003840, -0.745271975263163580, -0.745238636302143490, -0.745205295478026500, +-0.745171952790896540, -0.745138608240836660, -0.745105261827930240, -0.745071913552260430, -0.745038563413911170, -0.745005211412965500, -0.744971857549506680, -0.744938501823617980, +-0.744905144235383340, -0.744871784784885800, -0.744838423472208970, -0.744805060297435540, -0.744771695260649900, -0.744738328361934990, -0.744704959601373950, -0.744671588979050840, +-0.744638216495048690, -0.744604842149451110, -0.744571465942341030, -0.744538087873802600, -0.744504707943918990, -0.744471326152773560, -0.744437942500449590, -0.744404556987031010, +-0.744371169612601080, -0.744337780377243190, -0.744304389281040480, -0.744270996324077230, -0.744237601506436360, -0.744204204828201600, -0.744170806289455980, -0.744137405890283650, +-0.744104003630767790, -0.744070599510991640, -0.744037193531039250, -0.744003785690994010, -0.743970375990939180, -0.743936964430958140, -0.743903551011135030, -0.743870135731553030, +-0.743836718592295610, -0.743803299593446150, -0.743769878735088710, -0.743736456017306650, -0.743703031440183350, -0.743669605003802190, -0.743636176708247440, -0.743602746553602150, +-0.743569314539950010, -0.743535880667374300, -0.743502444935959180, -0.743469007345787910, -0.743435567896944090, -0.743402126589511210, -0.743368683423573100, -0.743335238399213450, +-0.743301791516515320, -0.743268342775563080, -0.743234892176439900, -0.743201439719229580, -0.743167985404015300, -0.743134529230881300, -0.743101071199911090, -0.743067611311188150, +-0.743034149564795960, -0.743000685960818590, -0.742967220499339610, -0.742933753180442520, -0.742900284004210710, -0.742866812970728540, -0.742833340080079290, -0.742799865332346650, +-0.742766388727614140, -0.742732910265966000, -0.742699429947485500, -0.742665947772256140, -0.742632463740362180, -0.742598977851887110, -0.742565490106914640, -0.742532000505528030, +-0.742498509047811780, -0.742465015733849270, -0.742431520563724190, -0.742398023537520050, -0.742364524655321210, -0.742331023917210950, -0.742297521323273090, -0.742264016873591230, +-0.742230510568249620, -0.742197002407331660, -0.742163492390921280, -0.742129980519101840, -0.742096466791957620, -0.742062951209572440, -0.742029433772029570, -0.741995914479413270, +-0.741962393331807250, -0.741928870329295220, -0.741895345471960790, -0.741861818759888210, -0.741828290193161210, -0.741794759771863380, -0.741761227496078310, -0.741727693365890620, +-0.741694157381383560, -0.741660619542641180, -0.741627079849746960, -0.741593538302785290, -0.741559994901839770, -0.741526449646994320, -0.741492902538332330, -0.741459353575938510, +-0.741425802759896220, -0.741392250090289530, -0.741358695567201800, -0.741325139190717740, -0.741291580960920740, -0.741258020877894610, -0.741224458941723620, -0.741190895152491480, +-0.741157329510282130, -0.741123762015179150, -0.741090192667267060, -0.741056621466629540, -0.741023048413350430, -0.740989473507513320, -0.740955896749202920, -0.740922318138502730, +-0.740888737675496900, -0.740855155360268690, -0.740821571192903040, -0.740787985173483430, -0.740754397302093800, -0.740720807578818090, -0.740687216003740430, -0.740653622576944780, +-0.740620027298514840, -0.740586430168535090, -0.740552831187089260, -0.740519230354261370, -0.740485627670135040, -0.740452023134794970, -0.740418416748324870, -0.740384808510808680, +-0.740351198422330330, -0.740317586482974190, -0.740283972692823980, -0.740250357051963960, -0.740216739560477730, -0.740183120218449900, -0.740149499025964270, -0.740115875983104910, +-0.740082251089955620, -0.740048624346600900, -0.740014995753124680, -0.739981365309610780, -0.739947733016143580, -0.739914098872807120, -0.739880462879685340, -0.739846825036862280, +-0.739813185344422310, -0.739779543802449480, -0.739745900411027720, -0.739712255170240860, -0.739678608080173830, -0.739644959140910110, -0.739611308352533970, -0.739577655715129460, +-0.739544001228780950, -0.739510344893572480, -0.739476686709588100, -0.739443026676911860, -0.739409364795628240, -0.739375701065821180, -0.739342035487574600, -0.739308368060973220, +-0.739274698786100970, -0.739241027663041890, -0.739207354691880040, -0.739173679872700000, -0.739140003205585930, -0.739106324690621760, -0.739072644327891440, -0.739038962117479770, +-0.739005278059470690, -0.738971592153948590, -0.738937904400997050, -0.738904214800701120, -0.738870523353144630, -0.738836830058411830, -0.738803134916586670, -0.738769437927753960, +-0.738735739091997630, -0.738702038409401960, -0.738668335880050990, -0.738634631504029420, -0.738600925281421180, -0.738567217212310450, -0.738533507296781910, -0.738499795534919620, +-0.738466081926807850, -0.738432366472530520, -0.738398649172172680, -0.738364930025818160, -0.738331209033551320, -0.738297486195456100, -0.738263761511617540, -0.738230034982119590, +-0.738196306607046490, -0.738162576386482420, -0.738128844320512070, -0.738095110409219710, -0.738061374652689620, -0.738027637051005710, -0.737993897604252940, -0.737960156312515550, +-0.737926413175877370, -0.737892668194423560, -0.737858921368238050, -0.737825172697405220, -0.737791422182009100, -0.737757669822134750, -0.737723915617866320, -0.737690159569288070, +-0.737656401676484050, -0.737622641939539300, -0.737588880358538090, -0.737555116933564570, -0.737521351664703010, -0.737487584552038330, -0.737453815595654700, -0.737420044795636500, +-0.737386272152068090, -0.737352497665034080, -0.737318721334618840, -0.737284943160906540, -0.737251163143982200, -0.737217381283930000, -0.737183597580834180, -0.737149812034779250, +-0.737116024645849910, -0.737082235414130650, -0.737048444339705840, -0.737014651422659430, -0.736980856663076890, -0.736947060061042160, -0.736913261616639730, -0.736879461329953860, +-0.736845659201069590, -0.736811855230071200, -0.736778049417043170, -0.736744241762069760, -0.736710432265236030, -0.736676620926626220, -0.736642807746324850, -0.736608992724416160, +-0.736575175860985310, -0.736541357156116570, -0.736507536609893990, -0.736473714222402930, -0.736439889993727670, -0.736406063923952580, -0.736372236013162040, -0.736338406261441310, +-0.736304574668874450, -0.736270741235546260, -0.736236905961540790, -0.736203068846943420, -0.736169229891838420, -0.736135389096310270, -0.736101546460443350, -0.736067701984322920, +-0.736033855668033250, -0.736000007511658950, -0.735966157515284270, -0.735932305678994480, -0.735898452002873960, -0.735864596487006970, -0.735830739131478890, -0.735796879936373880, +-0.735763018901776640, -0.735729156027771670, -0.735695291314444000, -0.735661424761878120, -0.735627556370158750, -0.735593686139370150, -0.735559814069597580, -0.735525940160925540, +-0.735492064413438620, -0.735458186827221310, -0.735424307402358760, -0.735390426138935460, -0.735356543037036130, -0.735322658096745130, -0.735288771318147740, -0.735254882701328330, +-0.735220992246371610, -0.735187099953362620, -0.735153205822385860, -0.735119309853526140, -0.735085412046867840, -0.735051512402496220, -0.735017610920496000, -0.734983707600951550, +-0.734949802443947700, -0.734915895449569480, -0.734881986617901720, -0.734848075949028790, -0.734814163443035520, -0.734780249100007050, -0.734746332920028000, -0.734712414903183060, +-0.734678495049556850, -0.734644573359234720, -0.734610649832301180, -0.734576724468840590, -0.734542797268938560, -0.734508868232679580, -0.734474937360148350, -0.734441004651429470, +-0.734407070106608440, -0.734373133725769730, -0.734339195508998180, -0.734305255456378370, -0.734271313567995690, -0.734237369843934730, -0.734203424284280310, -0.734169476889117050, +-0.734135527658530410, -0.734101576592604890, -0.734067623691425530, -0.734033668955076820, -0.733999712383644140, -0.733965753977212200, -0.733931793735865920, -0.733897831659689800, +-0.733863867748769440, -0.733829902003189430, -0.733795934423034370, -0.733761965008389750, -0.733727993759340170, -0.733694020675970670, -0.733660045758365850, -0.733626069006611090, +-0.733592090420791320, -0.733558110000991250, -0.733524127747295580, -0.733490143659789820, -0.733456157738558880, -0.733422169983687370, -0.733388180395260210, -0.733354188973362910, +-0.733320195718080160, -0.733286200629496900, -0.733252203707697840, -0.733218204952768570, -0.733184204364793810, -0.733150201943858270, -0.733116197690047430, -0.733082191603446120, +-0.733048183684139380, -0.733014173932211800, -0.732980162347749100, -0.732946148930836090, -0.732912133681557610, -0.732878116599998570, -0.732844097686244480, -0.732810076940380140, +-0.732776054362490600, -0.732742029952660690, -0.732708003710976000, -0.732673975637521240, -0.732639945732381670, -0.732605913995641790, -0.732571880427387520, -0.732537845027703470, +-0.732503807796674570, -0.732469768734386410, -0.732435727840923810, -0.732401685116371940, -0.732367640560815490, -0.732333594174340410, -0.732299545957031170, -0.732265495908973160, +-0.732231444030251090, -0.732197390320950660, -0.732163334781156800, -0.732129277410954570, -0.732095218210428890, -0.732061157179665470, -0.732027094318749130, -0.731993029627765020, +-0.731958963106798090, -0.731924894755934030, -0.731890824575257780, -0.731856752564854380, -0.731822678724808770, -0.731788603055206880, -0.731754525556133520, -0.731720446227673400, +-0.731686365069912580, -0.731652282082935760, -0.731618197266828310, -0.731584110621675050, -0.731550022147561820, -0.731515931844573420, -0.731481839712795350, -0.731447745752312310, +-0.731413649963210230, -0.731379552345573950, -0.731345452899488820, -0.731311351625039910, -0.731277248522312680, -0.731243143591392530, -0.731209036832364380, -0.731174928245313380, +-0.731140817830325360, -0.731106705587485360, -0.731072591516878310, -0.731038475618589920, -0.731004357892705460, -0.730970238339310190, -0.730936116958488810, -0.730901993750327610, +-0.730867868714911270, -0.730833741852325410, -0.730799613162654850, -0.730765482645985510, -0.730731350302402440, -0.730697216131991120, -0.730663080134836380, -0.730628942311024270, +-0.730594802660639810, -0.730560661183768280, -0.730526517880494830, -0.730492372750905390, -0.730458225795085010, -0.730424077013118840, -0.730389926405092700, -0.730355773971091750, +-0.730321619711201350, -0.730287463625506670, -0.730253305714093640, -0.730219145977047290, -0.730184984414453010, -0.730150821026396060, -0.730116655812962370, -0.730082488774236980, +-0.730048319910305390, -0.730014149221252740, -0.729979976707164970, -0.729945802368127340, -0.729911626204225120, -0.729877448215543570, -0.729843268402168620, -0.729809086764185540, +-0.729774903301679490, -0.729740718014736500, -0.729706530903441620, -0.729672341967880440, -0.729638151208138130, -0.729603958624300830, -0.729569764216453590, -0.729535567984681890, +-0.729501369929070890, -0.729467170049706850, -0.729432968346674930, -0.729398764820060500, -0.729364559469948940, -0.729330352296426290, -0.729296143299577700, -0.729261932479488780, +-0.729227719836244680, -0.729193505369931660, -0.729159289080634760, -0.729125070968439810, -0.729090851033431740, -0.729056629275696920, -0.729022405695320510, -0.728988180292387770, +-0.728953953066984850, -0.728919724019197020, -0.728885493149110000, -0.728851260456808920, -0.728817025942379960, -0.728782789605908370, -0.728748551447479960, -0.728714311467179690, +-0.728680069665094130, -0.728645826041308230, -0.728611580595907920, -0.728577333328978230, -0.728543084240605540, -0.728508833330875130, -0.728474580599872690, -0.728440326047683500, +-0.728406069674393700, -0.728371811480088780, -0.728337551464854020, -0.728303289628775770, -0.728269025971939210, -0.728234760494430140, -0.728200493196333840, -0.728166224077736570, +-0.728131953138723700, -0.728097680379381050, -0.728063405799793890, -0.728029129400048490, -0.727994851180230330, -0.727960571140425010, -0.727926289280717900, -0.727892005601195380, +-0.727857720101942830, -0.727823432783046060, -0.727789143644590350, -0.727754852686662070, -0.727720559909346700, -0.727686265312729620, -0.727651968896897210, -0.727617670661934830, +-0.727583370607928330, -0.727549068734962940, -0.727514765043125400, -0.727480459532500840, -0.727446152203175100, -0.727411843055233760, -0.727377532088762990, -0.727343219303848490, +-0.727308904700575960, -0.727274588279030800, -0.727240270039299470, -0.727205949981467590, -0.727171628105620750, -0.727137304411844540, -0.727102978900225240, -0.727068651570848660, +-0.727034322423800510, -0.726999991459166050, -0.726965658677032000, -0.726931324077483950, -0.726896987660607060, -0.726862649426488150, -0.726828309375212480, -0.726793967506866200, +-0.726759623821534580, -0.726725278319304220, -0.726690931000260720, -0.726656581864489890, -0.726622230912077230, -0.726587878143109320, -0.726553523557671780, -0.726519167155850410, +-0.726484808937730710, -0.726450448903399490, -0.726416087052942030, -0.726381723386444240, -0.726347357903992070, -0.726312990605671670, -0.726278621491568850, -0.726244250561769110, +-0.726209877816359040, -0.726175503255424350, -0.726141126879050860, -0.726106748687324280, -0.726072368680331090, -0.726037986858157010, -0.726003603220887970, -0.725969217768609560, +-0.725934830501408500, -0.725900441419370270, -0.725866050522581020, -0.725831657811126350, -0.725797263285092750, -0.725762866944566040, -0.725728468789632150, -0.725694068820376790, +-0.725659667036886560, -0.725625263439247160, -0.725590858027544310, -0.725556450801864590, -0.725522041762293850, -0.725487630908917880, -0.725453218241822520, -0.725418803761094470, +-0.725384387466819440, -0.725349969359083470, -0.725315549437972160, -0.725281127703572340, -0.725246704155969700, -0.725212278795250300, -0.725177851621499950, -0.725143422634805250, +-0.725108991835251900, -0.725074559222926180, -0.725040124797913690, -0.725005688560301230, -0.724971250510174530, -0.724936810647619390, -0.724902368972722530, -0.724867925485569780, +-0.724833480186247160, -0.724799033074840620, -0.724764584151436740, -0.724730133416121360, -0.724695680868980840, -0.724661226510100680, -0.724626770339567680, -0.724592312357467790, +-0.724557852563887160, -0.724523390958911720, -0.724488927542627950, -0.724454462315121890, -0.724419995276479600, -0.724385526426787110, -0.724351055766131120, -0.724316583294597470, +-0.724282109012272410, -0.724247632919241660, -0.724213155015592250, -0.724178675301409890, -0.724144193776780520, -0.724109710441790950, -0.724075225296527240, -0.724040738341075300, +-0.724006249575521290, -0.723971758999951920, -0.723937266614453230, -0.723902772419111380, -0.723868276414012190, -0.723833778599242690, -0.723799278974888830, -0.723764777541036630, +-0.723730274297772150, -0.723695769245182420, -0.723661262383353150, -0.723626753712370840, -0.723592243232321300, -0.723557730943291460, -0.723523216845367250, -0.723488700938634710, +-0.723454183223180670, -0.723419663699091280, -0.723385142366452680, -0.723350619225350930, -0.723316094275872960, -0.723281567518104680, -0.723247038952132600, -0.723212508578042420, +-0.723177976395921520, -0.723143442405855490, -0.723108906607930920, -0.723074369002233870, -0.723039829588851050, -0.723005288367868700, -0.722970745339373110, -0.722936200503450420, +-0.722901653860187570, -0.722867105409670470, -0.722832555151985410, -0.722798003087219200, -0.722763449215457990, -0.722728893536788150, -0.722694336051295740, -0.722659776759067900, +-0.722625215660190560, -0.722590652754750210, -0.722556088042832780, -0.722521521524525650, -0.722486953199914520, -0.722452383069086100, -0.722417811132126440, -0.722383237389122580, +-0.722348661840160560, -0.722314084485326970, -0.722279505324707750, -0.722244924358390160, -0.722210341586460250, -0.722175757009004380, -0.722141170626108940, -0.722106582437860740, +-0.722071992444346280, -0.722037400645651360, -0.722002807041863370, -0.721968211633068240, -0.721933614419352660, -0.721899015400802810, -0.721864414577505610, -0.721829811949547430, +-0.721795207517014650, -0.721760601279993640, -0.721725993238571340, -0.721691383392834120, -0.721656771742868460, -0.721622158288760530, -0.721587543030597470, -0.721552925968465650, +-0.721518307102451460, -0.721483686432641160, -0.721449063959122010, -0.721414439681980160, -0.721379813601301880, -0.721345185717174430, -0.721310556029684080, -0.721275924538917200, +-0.721241291244960280, -0.721206656147900470, -0.721172019247823930, -0.721137380544817350, -0.721102740038967130, -0.721068097730360290, -0.721033453619083110, -0.720998807705222510, +-0.720964159988864430, -0.720929510470096350, -0.720894859149004310, -0.720860206025675240, -0.720825551100195420, -0.720790894372651980, -0.720756235843131310, -0.720721575511719670, +-0.720686913378504430, -0.720652249443571980, -0.720617583707008790, -0.720582916168901470, -0.720548246829337050, -0.720513575688402130, -0.720478902746183090, -0.720444228002766640, +-0.720409551458239930, -0.720374873112689220, -0.720340192966201440, -0.720305511018862870, -0.720270827270760750, -0.720236141721981580, -0.720201454372612180, -0.720166765222738700, +-0.720132074272448630, -0.720097381521828450, -0.720062686970964430, -0.720027990619944050, -0.719993292468853690, -0.719958592517780050, -0.719923890766809630, -0.719889187216029900, +-0.719854481865527030, -0.719819774715388050, -0.719785065765699340, -0.719750355016548270, -0.719715642468021330, -0.719680928120205230, -0.719646211973186460, -0.719611494027052600, +-0.719576774281889930, -0.719542052737785260, -0.719507329394825310, -0.719472604253097230, -0.719437877312687600, -0.719403148573683370, -0.719368418036170910, -0.719333685700237810, +-0.719298951565970460, -0.719264215633455330, -0.719229477902780020, -0.719194738374031030, -0.719159997047295160, -0.719125253922659020, -0.719090509000209990, -0.719055762280034760, +-0.719021013762220160, -0.718986263446852680, -0.718951511334019800, -0.718916757423808230, -0.718882001716304670, -0.718847244211595850, -0.718812484909769230, -0.718777723810911430, +-0.718742960915109250, -0.718708196222449410, -0.718673429733019290, -0.718638661446905800, -0.718603891364195220, -0.718569119484975150, -0.718534345809332400, -0.718499570337353680, +-0.718464793069125810, -0.718430014004736270, -0.718395233144271670, -0.718360450487819050, -0.718325666035464880, -0.718290879787296890, -0.718256091743401770, -0.718221301903866350, +-0.718186510268777330, -0.718151716838222430, -0.718116921612288240, -0.718082124591061690, -0.718047325774629600, -0.718012525163079340, -0.717977722756497960, -0.717942918554971830, +-0.717908112558588770, -0.717873304767435490, -0.717838495181598810, -0.717803683801165660, -0.717768870626223630, -0.717734055656859440, -0.717699238893160010, -0.717664420335212270, +-0.717629599983103720, -0.717594777836921270, -0.717559953896751760, -0.717525128162682100, -0.717490300634799900, -0.717455471313191980, -0.717420640197945380, -0.717385807289146920, +-0.717350972586884180, -0.717316136091244120, -0.717281297802313640, -0.717246457720179590, -0.717211615844929650, -0.717176772176650770, -0.717141926715429650, -0.717107079461353990, +-0.717072230414510630, -0.717037379574986700, -0.717002526942868920, -0.716967672518245340, -0.716932816301202420, -0.716897958291827450, -0.716863098490207350, -0.716828236896429830, +-0.716793373510581700, -0.716758508332750010, -0.716723641363021910, -0.716688772601485000, -0.716653902048226100, -0.716619029703332470, -0.716584155566890920, -0.716549279638989290, +-0.716514401919714490, -0.716479522409153360, -0.716444641107393700, -0.716409758014522560, -0.716374873130626980, -0.716339986455793780, -0.716305097990111110, -0.716270207733665560, +-0.716235315686544530, -0.716200421848834920, -0.716165526220624570, -0.716130628802000400, -0.716095729593049680, -0.716060828593859220, -0.716025925804517070, -0.715991021225110160, +-0.715956114855725630, -0.715921206696450430, -0.715886296747372700, -0.715851385008579140, -0.715816471480156810, -0.715781556162193630, -0.715746639054776530, -0.715711720157992780, +-0.715676799471929530, -0.715641876996674590, -0.715606952732314780, -0.715572026678937820, -0.715537098836630300, -0.715502169205480490, -0.715467237785575190, -0.715432304577001800, +-0.715397369579847340, -0.715362432794199750, -0.715327494220146080, -0.715292553857773680, -0.715257611707169620, -0.715222667768421800, -0.715187722041617400, -0.715152774526843340, +-0.715117825224187540, -0.715082874133737280, -0.715047921255579810, -0.715012966589802180, -0.714978010136492540, -0.714943051895737810, -0.714908091867625490, -0.714873130052242620, +-0.714838166449677240, -0.714803201060016490, -0.714768233883347650, -0.714733264919757970, -0.714698294169335390, -0.714663321632167060, -0.714628347308340460, -0.714593371197942750, +-0.714558393301061860, -0.714523413617784930, -0.714488432148199570, -0.714453448892392820, -0.714418463850452710, -0.714383477022466410, -0.714348488408521170, -0.714313498008705030, +-0.714278505823105040, -0.714243511851808900, -0.714208516094903540, -0.714173518552477350, -0.714138519224617240, -0.714103518111410930, -0.714068515212945450, -0.714033510529309080, +-0.713998504060588850, -0.713963495806872350, -0.713928485768246860, -0.713893473944800410, -0.713858460336620370, -0.713823444943794130, -0.713788427766408830, -0.713753408804552960, +-0.713718388058313450, -0.713683365527777780, -0.713648341213033890, -0.713613315114169260, -0.713578287231271260, -0.713543257564427270, -0.713508226113725440, -0.713473192879253040, +-0.713438157861097650, -0.713403121059346560, -0.713368082474087890, -0.713333042105409150, -0.713297999953397710, -0.713262956018141050, -0.713227910299727320, -0.713192862798243680, +-0.713157813513777940, -0.713122762446417370, -0.713087709596250230, -0.713052654963363790, -0.713017598547845410, -0.712982540349783370, -0.712947480369264920, -0.712912418606377880, +-0.712877355061209420, -0.712842289733847780, -0.712807222624380570, -0.712772153732895260, -0.712737083059479250, -0.712702010604220780, -0.712666936367207350, -0.712631860348526550, +-0.712596782548265860, -0.712561702966513440, -0.712526621603356780, -0.712491538458883580, -0.712456453533181210, -0.712421366826338050, -0.712386278338441370, -0.712351188069579200, +-0.712316096019838580, -0.712281002189308010, -0.712245906578075070, -0.712210809186226920, -0.712175710013852160, -0.712140609061038040, -0.712105506327872510, -0.712070401814442810, +-0.712035295520837440, -0.712000187447143770, -0.711965077593449850, -0.711929965959842700, -0.711894852546411050, -0.711859737353242260, -0.711824620380424040, -0.711789501628044110, +-0.711754381096190600, -0.711719258784951240, -0.711684134694413610, -0.711649008824665420, -0.711613881175795050, -0.711578751747889870, -0.711543620541037590, -0.711508487555326590, +-0.711473352790844230, -0.711438216247678670, -0.711403077925917170, -0.711367937825648220, -0.711332795946959530, -0.711297652289938800, -0.711262506854673630, -0.711227359641252500, +-0.711192210649763010, -0.711157059880292990, -0.711121907332930010, -0.711086753007762580, -0.711051596904878180, -0.711016439024364840, -0.710981279366310170, -0.710946117930802530, +-0.710910954717929530, -0.710875789727778980, -0.710840622960439150, -0.710805454415997850, -0.710770284094542900, -0.710735111996161910, -0.710699938120943450, -0.710664762468975140, +-0.710629585040344900, -0.710594405835140440, -0.710559224853450240, -0.710524042095362020, -0.710488857560963690, -0.710453671250342870, -0.710418483163588130, -0.710383293300787310, +-0.710348101662028110, -0.710312908247398460, -0.710277713056986840, -0.710242516090880960, -0.710207317349168310, -0.710172116831937930, -0.710136914539277080, -0.710101710471274020, +-0.710066504628016350, -0.710031297009592670, -0.709996087616090790, -0.709960876447598750, -0.709925663504204160, -0.709890448785995720, -0.709855232293061240, -0.709820014025488550, +-0.709784793983365580, -0.709749572166780920, -0.709714348575822380, -0.709679123210577910, -0.709643896071135320, -0.709608667157583310, -0.709573436470009700, -0.709538204008502430, +-0.709502969773149310, -0.709467733764039150, -0.709432495981259570, -0.709397256424898480, -0.709362015095044600, -0.709326771991785730, -0.709291527115209820, -0.709256280465404790, +-0.709221032042459450, -0.709185781846461420, -0.709150529877499050, -0.709115276135659940, -0.709080020621033040, -0.709044763333706030, -0.709009504273767190, -0.708974243441304110, +-0.708938980836405830, -0.708903716459160170, -0.708868450309655170, -0.708833182387978660, -0.708797912694219660, -0.708762641228465770, -0.708727367990804940, -0.708692092981326070, +-0.708656816200117000, -0.708621537647265760, -0.708586257322860400, -0.708550975226989730, -0.708515691359741680, -0.708480405721204410, -0.708445118311465730, -0.708409829130614680, +-0.708374538178738970, -0.708339245455926860, -0.708303950962266390, -0.708268654697846390, -0.708233356662754670, -0.708198056857079590, -0.708162755280909110, -0.708127451934332020, +-0.708092146817436260, -0.708056839930309880, -0.708021531273041680, -0.707986220845719720, -0.707950908648432130, -0.707915594681266970, -0.707880278944313050, -0.707844961437658630, +-0.707809642161391750, -0.707774321115600350, -0.707738998300373460, -0.707703673715799120, -0.707668347361965600, -0.707633019238960940, -0.707597689346874060, -0.707562357685792900, +-0.707527024255805830, -0.707491689057000880, -0.707456352089467110, -0.707421013353292330, -0.707385672848565130, -0.707350330575373440, -0.707314986533806200, -0.707279640723951440, +-0.707244293145897320, -0.707208943799732760, -0.707173592685545800, -0.707138239803424940, -0.707102885153458200, -0.707067528735734420, -0.707032170550341950, -0.706996810597368960, +-0.706961448876903710, -0.706926085389035120, -0.706890720133851240, -0.706855353111440650, -0.706819984321891410, -0.706784613765292450, -0.706749241441731900, -0.706713867351298370, +-0.706678491494079800, -0.706643113870165320, -0.706607734479642980, -0.706572353322601040, -0.706536970399128660, -0.706501585709313650, -0.706466199253244830, -0.706430811031010130, +-0.706395421042698700, -0.706360029288398810, -0.706324635768198710, -0.706289240482186780, -0.706253843430452060, -0.706218444613082810, -0.706183044030167300, -0.706147641681794000, +-0.706112237568051750, -0.706076831689029020, -0.706041424044814180, -0.706006014635495500, -0.705970603461162140, -0.705935190521902230, -0.705899775817803940, -0.705864359348956640, +-0.705828941115448360, -0.705793521117367820, -0.705758099354803050, -0.705722675827843430, -0.705687250536577100, -0.705651823481092680, -0.705616394661478300, -0.705580964077823340, +-0.705545531730215950, -0.705510097618744610, -0.705474661743497820, -0.705439224104564720, -0.705403784702033580, -0.705368343535992870, -0.705332900606530980, -0.705297455913737270, +-0.705262009457699790, -0.705226561238507350, -0.705191111256248230, -0.705155659511011670, -0.705120206002885830, -0.705084750731959310, -0.705049293698321140, -0.705013834902059710, +-0.704978374343263820, -0.704942912022021530, -0.704907447938422300, -0.704871982092554530, -0.704836514484506790, -0.704801045114367360, -0.704765573982225720, -0.704730101088170140, +-0.704694626432289310, -0.704659150014671610, -0.704623671835406310, -0.704588191894581770, -0.704552710192286820, -0.704517226728609840, -0.704481741503640070, -0.704446254517465900, +-0.704410765770175810, -0.704375275261859170, -0.704339782992604250, -0.704304288962499860, -0.704268793171634490, -0.704233295620097510, -0.704197796307977190, -0.704162295235362450, +-0.704126792402341550, -0.704091287809004100, -0.704055781455438350, -0.704020273341733230, -0.703984763467977110, -0.703949251834259270, -0.703913738440668400, -0.703878223287293210, +-0.703842706374222080, -0.703807187701544600, -0.703771667269349030, -0.703736145077724080, -0.703700621126759020, -0.703665095416542430, -0.703629567947163030, -0.703594038718709400, +-0.703558507731271150, -0.703522974984936430, -0.703487440479794390, -0.703451904215933400, -0.703416366193443050, -0.703380826412411730, -0.703345284872928240, -0.703309741575081300, +-0.703274196518960390, -0.703238649704653880, -0.703203101132250820, -0.703167550801839680, -0.703131998713509950, -0.703096444867350230, -0.703060889263449120, -0.703025331901896090, +-0.702989772782779630, -0.702954211906188900, -0.702918649272212150, -0.702883084880939310, -0.702847518732458540, -0.702811950826859100, -0.702776381164229470, -0.702740809744659130, +-0.702705236568236800, -0.702669661635051400, -0.702634084945191530, -0.702598506498746780, -0.702562926295805750, -0.702527344336457360, -0.702491760620790330, -0.702456175148894250, +-0.702420587920857710, -0.702384998936769640, -0.702349408196718760, -0.702313815700794760, -0.702278221449086140, -0.702242625441681700, -0.702207027678671050, -0.702171428160142770, +-0.702135826886185920, -0.702100223856889190, -0.702064619072342190, -0.702029012532633720, -0.701993404237852610, -0.701957794188087790, -0.701922182383428740, -0.701886568823964270, +-0.701850953509783330, -0.701815336440974710, -0.701779717617628140, -0.701744097039832200, -0.701708474707675940, -0.701672850621248290, -0.701637224780638840, -0.701601597185936290, +-0.701565967837229460, -0.701530336734607960, -0.701494703878160710, -0.701459069267976630, -0.701423432904144550, -0.701387794786754170, -0.701352154915894420, -0.701316513291654230, +-0.701280869914122420, -0.701245224783388800, -0.701209577899542080, -0.701173929262671410, -0.701138278872865620, -0.701102626730214510, -0.701066972834806680, -0.701031317186731510, +-0.700995659786077810, -0.700960000632935180, -0.700924339727392540, -0.700888677069538720, -0.700853012659463650, -0.700817346497255910, -0.700781678583004890, -0.700746008916799280, +-0.700710337498729020, -0.700674664328882920, -0.700638989407350140, -0.700603312734219610, -0.700567634309581020, -0.700531954133523430, -0.700496272206135970, -0.700460588527507480, +-0.700424903097727760, -0.700389215916885850, -0.700353526985070920, -0.700317836302371880, -0.700282143868878440, -0.700246449684679750, -0.700210753749864970, -0.700175056064522900, +-0.700139356628743490, -0.700103655442615770, -0.700067952506228550, -0.700032247819671770, -0.699996541383034470, -0.699960833196405670, -0.699925123259874550, -0.699889411573530910, +-0.699853698137463680, -0.699817982951762340, -0.699782266016515610, -0.699746547331813630, -0.699710826897745220, -0.699675104714399750, -0.699639380781866160, -0.699603655100234480, +-0.699567927669593750, -0.699532198490033120, -0.699496467561641630, -0.699460734884509330, -0.699425000458725240, -0.699389264284378200, -0.699353526361558450, -0.699317786690354830, +-0.699282045270856800, -0.699246302103153190, -0.699210557187334270, -0.699174810523488950, -0.699139062111706620, -0.699103311952076200, -0.699067560044687950, -0.699031806389630810, +-0.698996050986994020, -0.698960293836866860, -0.698924534939339260, -0.698888774294500360, -0.698853011902439540, -0.698817247763245830, -0.698781481877009390, -0.698745714243819150, +-0.698709944863764370, -0.698674173736934970, -0.698638400863420220, -0.698602626243309490, -0.698566849876691710, -0.698531071763657250, -0.698495291904295160, -0.698459510298694800, +-0.698423726946945320, -0.698387941849136770, -0.698352155005358520, -0.698316366415699830, -0.698280576080249850, -0.698244783999098730, -0.698208990172335730, -0.698173194600050230, +-0.698137397282331370, -0.698101598219269430, -0.698065797410953430, -0.698029994857472640, -0.697994190558917200, -0.697958384515376280, -0.697922576726939360, -0.697886767193695690, +-0.697850955915735430, -0.697815142893147830, -0.697779328126022280, -0.697743511614448140, -0.697707693358515570, -0.697671873358313710, -0.697636051613932270, -0.697600228125460300, +-0.697564402892988040, -0.697528575916604780, -0.697492747196400200, -0.697456916732463350, -0.697421084524884490, -0.697385250573753000, -0.697349414879158250, -0.697313577441189820, +-0.697277738259937660, -0.697241897335491130, -0.697206054667939610, -0.697170210257373250, -0.697134364103881410, -0.697098516207553590, -0.697062666568479150, -0.697026815186748470, +-0.696990962062450590, -0.696955107195675440, -0.696919250586512160, -0.696883392235051020, -0.696847532141381510, -0.696811670305593100, -0.696775806727775170, -0.696739941408018090, +-0.696704074346411130, -0.696668205543043980, -0.696632334998006030, -0.696596462711387530, -0.696560588683277970, -0.696524712913766500, -0.696488835402943600, -0.696452956150898640, +-0.696417075157721220, -0.696381192423500940, -0.696345307948327830, -0.696309421732291600, -0.696273533775481730, -0.696237644077987720, -0.696201752639899920, -0.696165859461307710, +-0.696129964542300920, -0.696094067882968790, -0.696058169483401820, -0.696022269343689490, -0.695986367463921510, -0.695950463844187240, -0.695914558484577170, -0.695878651385180680, +-0.695842742546087250, -0.695806831967387350, -0.695770919649170260, -0.695735005591525900, -0.695699089794543760, -0.695663172258314200, -0.695627252982926600, -0.695591331968471000, +-0.695555409215036670, -0.695519484722714190, -0.695483558491593050, -0.695447630521762950, -0.695411700813313380, -0.695375769366334940, -0.695339836180917100, -0.695303901257149690, +-0.695267964595122080, -0.695232026194924970, -0.695196086056647840, -0.695160144180380520, -0.695124200566212380, -0.695088255214234120, -0.695052308124535220, -0.695016359297205290, +-0.694980408732334690, -0.694944456430013120, -0.694908502390330420, -0.694872546613376050, -0.694836589099240730, -0.694800629848013940, -0.694764668859785610, -0.694728706134645210, +-0.694692741672683360, -0.694656775473989740, -0.694620807538654070, -0.694584837866766060, -0.694548866458416400, -0.694512893313694480, -0.694476918432690330, -0.694440941815493650, +-0.694404963462194820, -0.694368983372883660, -0.694333001547649650, -0.694297017986583500, -0.694261032689774900, -0.694225045657313580, -0.694189056889289340, -0.694153066385792880, +-0.694117074146913590, -0.694081080172741730, -0.694045084463366880, -0.694009087018879530, -0.693973087839369620, -0.693937086924926840, -0.693901084275641120, -0.693865079891602950, +-0.693829073772902040, -0.693793065919628530, -0.693757056331872010, -0.693721045009723200, -0.693685031953271690, -0.693649017162607300, -0.693613000637820720, -0.693576982379001670, +-0.693540962386240190, -0.693504940659625870, -0.693468917199249630, -0.693432892005201080, -0.693396865077570260, -0.693360836416446970, -0.693324806021921810, -0.693288773894084830, +-0.693252740033025730, -0.693216704438834540, -0.693180667111601980, -0.693144628051417630, -0.693108587258371770, -0.693072544732554200, -0.693036500474055520, -0.693000454482965540, +-0.692964406759374100, -0.692928357303371990, -0.692892306115049040, -0.692856253194495290, -0.692820198541800550, -0.692784142157055640, -0.692748084040350490, -0.692712024191775020, +-0.692675962611419170, -0.692639899299373750, -0.692603834255728580, -0.692567767480573800, -0.692531698973999350, -0.692495628736095940, -0.692459556766953480, -0.692423483066662130, +-0.692387407635311700, -0.692351330472993130, -0.692315251579796120, -0.692279170955811150, -0.692243088601127820, -0.692207004515837170, -0.692170918700028890, -0.692134831153793040, +-0.692098741877220420, -0.692062650870401090, -0.692026558133424950, -0.691990463666382170, -0.691954367469363560, -0.691918269542459050, -0.691882169885758790, -0.691846068499352820, +-0.691809965383332060, -0.691773860537786330, -0.691737753962805900, -0.691701645658480910, -0.691665535624901960, -0.691629423862159310, -0.691593310370343000, -0.691557195149543170, +-0.691521078199850650, -0.691484959521355360, -0.691448839114147450, -0.691412716978317740, -0.691376593113956160, -0.691340467521153190, -0.691304340199998760, -0.691268211150583680, +-0.691232080372998100, -0.691195947867332410, -0.691159813633676510, -0.691123677672121350, -0.691087539982756960, -0.691051400565673820, -0.691015259420961760, -0.690979116548711910, +-0.690942971949014330, -0.690906825621959260, -0.690870677567636760, -0.690834527786137960, -0.690798376277552810, -0.690762223041971430, -0.690726068079484780, -0.690689911390182990, +-0.690653752974156430, -0.690617592831495150, -0.690581430962290190, -0.690545267366631690, -0.690509102044609910, -0.690472934996315240, -0.690436766221838360, -0.690400595721269660, +-0.690364423494699510, -0.690328249542217940, -0.690292073863916110, -0.690255896459884060, -0.690219717330212260, -0.690183536474990870, -0.690147353894310920, -0.690111169588262570, +-0.690074983556936310, -0.690038795800422380, -0.690002606318811610, -0.689966415112194480, -0.689930222180660910, -0.689894027524302070, -0.689857831143208200, -0.689821633037469790, +-0.689785433207176890, -0.689749231652420860, -0.689713028373291630, -0.689676823369879900, -0.689640616642275830, -0.689604408190570450, -0.689568198014854030, -0.689531986115217150, +-0.689495772491750090, -0.689459557144543770, -0.689423340073688660, -0.689387121279275150, -0.689350900761393490, -0.689314678520134950, -0.689278454555589670, -0.689242228867847920, +-0.689206001457000950, -0.689169772323139030, -0.689133541466352640, -0.689097308886732040, -0.689061074584368600, -0.689024838559352370, -0.688988600811774040, -0.688952361341723880, +-0.688916120149293150, -0.688879877234572220, -0.688843632597651470, -0.688807386238621370, -0.688771138157573180, -0.688734888354597060, -0.688698636829783720, -0.688662383583223510, +-0.688626128615007600, -0.688589871925226470, -0.688553613513970260, -0.688517353381330350, -0.688481091527397120, -0.688444827952261030, -0.688408562656012690, -0.688372295638743140, +-0.688336026900542960, -0.688299756441502650, -0.688263484261712690, -0.688227210361264220, -0.688190934740247840, -0.688154657398754140, -0.688118378336873390, -0.688082097554697070, +-0.688045815052315430, -0.688009530829819300, -0.687973244887299050, -0.687936957224845940, -0.687900667842550550, -0.687864376740503050, -0.687828083918795020, -0.687791789377516730, +-0.687755493116758990, -0.687719195136612170, -0.687682895437167760, -0.687646594018516020, -0.687610290880747880, -0.687573986023953590, -0.687537679448224750, -0.687501371153651620, +-0.687465061140325130, -0.687428749408335650, -0.687392435957774550, -0.687356120788732540, -0.687319803901300100, -0.687283485295567820, -0.687247164971627190, -0.687210842929568580, +-0.687174519169482910, -0.687138193691460670, -0.687101866495593240, -0.687065537581971090, -0.687029206950684810, -0.686992874601825900, -0.686956540535484720, -0.686920204751752190, +-0.686883867250718820, -0.686847528032476170, -0.686811187097114640, -0.686774844444725140, -0.686738500075398270, -0.686702153989225410, -0.686665806186297130, -0.686629456666704390, +-0.686593105430537750, -0.686556752477888610, -0.686520397808847550, -0.686484041423505500, -0.686447683321953050, -0.686411323504281800, -0.686374961970582120, -0.686338598720944710, +-0.686302233755461290, -0.686265867074222100, -0.686229498677318310, -0.686193128564840490, -0.686156756736880150, -0.686120383193527860, -0.686084007934874670, -0.686047630961011070, +-0.686011252272028860, -0.685974871868018420, -0.685938489749070790, -0.685902105915276560, -0.685865720366727550, -0.685829333103514130, -0.685792944125727330, -0.685756553433457980, +-0.685720161026797450, -0.685683766905836660, -0.685647371070665980, -0.685610973521377230, -0.685574574258061120, -0.685538173280808570, -0.685501770589710180, -0.685465366184857760, +-0.685428960066341910, -0.685392552234253550, -0.685356142688683610, -0.685319731429723580, -0.685283318457464260, -0.685246903771996710, -0.685210487373411500, -0.685174069261800360, +-0.685137649437254080, -0.685101227899863720, -0.685064804649719860, -0.685028379686914430, -0.684991953011538040, -0.684955524623681700, -0.684919094523436240, -0.684882662710893380, +-0.684846229186143800, -0.684809793949278430, -0.684773357000388880, -0.684736918339565960, -0.684700477966900700, -0.684664035882483810, -0.684627592086407330, -0.684591146578761740, +-0.684554699359638420, -0.684518250429127950, -0.684481799787322150, -0.684445347434311960, -0.684408893370188290, -0.684372437595042070, -0.684335980108965130, -0.684299520912048260, +-0.684263060004382530, -0.684226597386058840, -0.684190133057169030, -0.684153667017803780, -0.684117199268054140, -0.684080729808011820, -0.684044258637767630, -0.684007785757412830, +-0.683971311167038240, -0.683934834866735670, -0.683898356856595950, -0.683861877136710430, -0.683825395707169940, -0.683788912568066180, -0.683752427719490190, -0.683715941161533110, +-0.683679452894285890, -0.683642962917840320, -0.683606471232287350, -0.683569977837718220, -0.683533482734223760, -0.683496985921896010, -0.683460487400825770, -0.683423987171103970, +-0.683387485232822560, -0.683350981586072330, -0.683314476230944770, -0.683277969167530590, -0.683241460395921930, -0.683204949916209500, -0.683168437728484790, -0.683131923832838610, +-0.683095408229362990, -0.683058890918148750, -0.683022371899287380, -0.682985851172869700, -0.682949328738987840, -0.682912804597732510, -0.682876278749195210, -0.682839751193466960, +-0.682803221930639580, -0.682766690960804220, -0.682730158284051700, -0.682693623900474170, -0.682657087810162540, -0.682620550013208320, -0.682584010509702300, -0.682547469299736530, +-0.682510926383402160, -0.682474381760790450, -0.682437835431992430, -0.682401287397100260, -0.682364737656204760, -0.682328186209397500, -0.682291633056769320, -0.682255078198412470, +-0.682218521634417980, -0.682181963364877130, -0.682145403389881060, -0.682108841709521800, -0.682072278323890390, -0.682035713233078320, -0.681999146437176630, -0.681962577936277460, +-0.681926007730471740, -0.681889435819850730, -0.681852862204506470, -0.681816286884530110, -0.681779709860012910, -0.681743131131046230, -0.681706550697721900, -0.681669968560131290, +-0.681633384718365760, -0.681596799172516480, -0.681560211922675460, -0.681523622968933870, -0.681487032311383300, -0.681450439950114780, -0.681413845885220580, -0.681377250116791620, +-0.681340652644919720, -0.681304053469695690, -0.681267452591211910, -0.681230850009559520, -0.681194245724829670, -0.681157639737114520, -0.681121032046505310, -0.681084422653093440, +-0.681047811556970250, -0.681011198758227910, -0.680974584256957450, -0.680937968053250580, -0.680901350147198550, -0.680864730538893290, -0.680828109228426400, -0.680791486215889140, +-0.680754861501372770, -0.680718235084969650, -0.680681606966770940, -0.680644977146868340, -0.680608345625352770, -0.680571712402316730, -0.680535077477851470, -0.680498440852048030, +-0.680461802524998990, -0.680425162496795410, -0.680388520767528870, -0.680351877337290740, -0.680315232206173180, -0.680278585374267550, -0.680241936841665560, -0.680205286608458250, +-0.680168634674738200, -0.680131981040596470, -0.680095325706124850, -0.680058668671414510, -0.680022009936557930, -0.679985349501646240, -0.679948687366771170, -0.679912023532024070, +-0.679875357997497320, -0.679838690763282070, -0.679802021829470140, -0.679765351196152780, -0.679728678863422480, -0.679692004831370380, -0.679655329100087970, -0.679618651669667620, +-0.679581972540200590, -0.679545291711778580, -0.679508609184493070, -0.679471924958436340, -0.679435239033699840, -0.679398551410375200, -0.679361862088553870, -0.679325171068328240, +-0.679288478349789670, -0.679251783933029870, -0.679215087818140330, -0.679178390005213410, -0.679141690494340480, -0.679104989285613360, -0.679068286379123310, -0.679031581774963030, +-0.678994875473223680, -0.678958167473996950, -0.678921457777375000, -0.678884746383449420, -0.678848033292312030, -0.678811318504054180, -0.678774602018768380, -0.678737883836546100, +-0.678701163957479150, -0.678664442381658910, -0.678627719109177850, -0.678590994140127580, -0.678554267474599680, -0.678517539112685970, -0.678480809054478610, -0.678444077300069280, +-0.678407343849549700, -0.678370608703011470, -0.678333871860547170, -0.678297133322248060, -0.678260393088205740, -0.678223651158512910, -0.678186907533260830, -0.678150162212541540, +-0.678113415196446410, -0.678076666485068260, -0.678039916078498340, -0.678003163976828580, -0.677966410180150690, -0.677929654688557040, -0.677892897502139210, -0.677856138620989260, +-0.677819378045198540, -0.677782615774859760, -0.677745851810064410, -0.677709086150904420, -0.677672318797471360, -0.677635549749857850, -0.677598779008155570, -0.677562006572455910, +-0.677525232442851570, -0.677488456619434130, -0.677451679102295650, -0.677414899891527480, -0.677378118987222550, -0.677341336389472250, -0.677304552098368600, -0.677267766114003300, +-0.677230978436468840, -0.677194189065856930, -0.677157398002259600, -0.677120605245768450, -0.677083810796476060, -0.677047014654474260, -0.677010216819854850, -0.676973417292709550, +-0.676936616073131050, -0.676899813161210950, -0.676863008557041400, -0.676826202260713990, -0.676789394272321320, -0.676752584591955310, -0.676715773219707440, -0.676678960155670420, +-0.676642145399936060, -0.676605328952596290, -0.676568510813742920, -0.676531690983468550, -0.676494869461864990, -0.676458046249024280, -0.676421221345038130, -0.676384394749999230, +-0.676347566463999290, -0.676310736487130470, -0.676273904819484460, -0.676237071461154080, -0.676200236412231040, -0.676163399672807360, -0.676126561242974770, -0.676089721122826170, +-0.676052879312453280, -0.676016035811947910, -0.675979190621402770, -0.675942343740909560, -0.675905495170560530, -0.675868644910447510, -0.675831792960663200, -0.675794939321299300, +-0.675758083992448080, -0.675721226974201450, -0.675684368266651900, -0.675647507869891580, -0.675610645784012420, -0.675573782009106340, -0.675536916545266040, -0.675500049392583570, +-0.675463180551150840, -0.675426310021060020, -0.675389437802403680, -0.675352563895273650, -0.675315688299761960, -0.675278811015961430, -0.675241932043963770, -0.675205051383861330, +-0.675168169035745950, -0.675131284999710420, -0.675094399275846690, -0.675057511864247010, -0.675020622765003190, -0.674983731978208160, -0.674946839503953730, -0.674909945342332280, +-0.674873049493435630, -0.674836151957356690, -0.674799252734187390, -0.674762351824019890, -0.674725449226946220, -0.674688544943059300, -0.674651638972450950, -0.674614731315213540, +-0.674577821971438900, -0.674540910941220150, -0.674503998224649020, -0.674467083821817640, -0.674430167732818830, -0.674393249957744630, -0.674356330496687310, -0.674319409349738770, +-0.674282486516992070, -0.674245561998539240, -0.674208635794472430, -0.674171707904883680, -0.674134778329866010, -0.674097847069511370, -0.674060914123912220, -0.674023979493160400, +-0.673987043177348920, -0.673950105176569840, -0.673913165490915510, -0.673876224120477870, -0.673839281065350070, -0.673802336325624030, -0.673765389901391900, -0.673728441792746600, +-0.673691491999780180, -0.673654540522585000, -0.673617587361253210, -0.673580632515877740, -0.673543675986550630, -0.673506717773364460, -0.673469757876411060, -0.673432796295783560, +-0.673395833031574240, -0.673358868083875240, -0.673321901452778700, -0.673284933138377780, -0.673247963140764520, -0.673210991460031380, -0.673174018096270420, -0.673137043049574670, +-0.673100066320036380, -0.673063087907747600, -0.673026107812801480, -0.672989126035289930, -0.672952142575305670, -0.672915157432940720, -0.672878170608288250, -0.672841182101440280, +-0.672804191912489410, -0.672767200041527680, -0.672730206488648340, -0.672693211253943430, -0.672656214337505440, -0.672619215739426730, -0.672582215459800240, -0.672545213498718210, +-0.672508209856273130, -0.672471204532557150, -0.672434197527663650, -0.672397188841684530, -0.672360178474712080, -0.672323166426839650, -0.672286152698159170, -0.672249137288763340, +-0.672212120198744320, -0.672175101428195370, -0.672138080977208730, -0.672101058845876790, -0.672064035034291910, -0.672027009542547350, -0.671989982370735150, -0.671952953518948020, +-0.671915922987278200, -0.671878890775818860, -0.671841856884662360, -0.671804821313901180, -0.671767784063627580, -0.671730745133934830, -0.671693704524915390, -0.671656662236661540, +-0.671619618269265750, -0.671582572622821170, -0.671545525297420290, -0.671508476293155130, -0.671471425610119190, -0.671434373248404710, -0.671397319208104190, -0.671360263489310220, +-0.671323206092115820, -0.671286147016613380, -0.671249086262895590, -0.671212023831054720, -0.671174959721184130, -0.671137893933376200, -0.671100826467723510, -0.671063757324318440, +-0.671026686503254250, -0.670989614004623420, -0.670952539828518550, -0.670915463975031880, -0.670878386444257010, -0.670841307236286100, -0.670804226351211730, -0.670767143789126940, +-0.670730059550124440, -0.670692973634296700, -0.670655886041736200, -0.670618796772536330, -0.670581705826789440, -0.670544613204588360, -0.670507518906025330, -0.670470422931193850, +-0.670433325280186400, -0.670396225953095560, -0.670359124950013820, -0.670322022271034660, -0.670284917916250440, -0.670247811885753890, -0.670210704179637460, -0.670173594797994650, +-0.670136483740917830, -0.670099371008499480, -0.670062256600832960, -0.670025140518010880, -0.669988022760125920, -0.669950903327270590, -0.669913782219538230, -0.669876659437021570, +-0.669839534979813190, -0.669802408848005680, -0.669765281041692420, -0.669728151560965990, -0.669691020405919210, -0.669653887576644460, -0.669616753073235430, -0.669579616895784490, +-0.669542479044384460, -0.669505339519127940, -0.669468198320108400, -0.669431055447418320, -0.669393910901150630, -0.669356764681397820, -0.669319616788253470, -0.669282467221810060, +-0.669245315982160190, -0.669208163069397340, -0.669171008483613990, -0.669133852224903180, -0.669096694293357500, -0.669059534689070310, -0.669022373412134330, -0.668985210462642370, +-0.668948045840687120, -0.668910879546361970, -0.668873711579759720, -0.668836541940973190, -0.668799370630094980, -0.668762197647218670, -0.668725022992436750, -0.668687846665842360, +-0.668650668667528090, -0.668613488997587440, -0.668576307656112980, -0.668539124643197540, -0.668501939958934590, -0.668464753603416730, -0.668427565576736990, -0.668390375878988090, +-0.668353184510263490, -0.668315991470656010, -0.668278796760258480, -0.668241600379163690, -0.668204402327465250, -0.668167202605255750, -0.668130001212628220, -0.668092798149675370, +-0.668055593416490900, -0.668018387013167400, -0.667981178939797910, -0.667943969196475250, -0.667906757783292890, -0.667869544700343650, -0.667832329947720240, -0.667795113525516350, +-0.667757895433824690, -0.667720675672738300, -0.667683454242349870, -0.667646231142753120, -0.667609006374040750, -0.667571779936305900, -0.667534551829641280, -0.667497322054140700, +-0.667460090609896640, -0.667422857497002480, -0.667385622715550800, -0.667348386265635420, -0.667311148147349040, -0.667273908360784820, -0.667236666906035450, -0.667199423783194740, +-0.667162178992355530, -0.667124932533610600, -0.667087684407053570, -0.667050434612777350, -0.667013183150874990, -0.666975930021439400, -0.666938675224564290, -0.666901418760342590, +-0.666864160628867220, -0.666826900830231220, -0.666789639364528290, -0.666752376231851130, -0.666715111432293120, -0.666677844965947060, -0.666640576832906670, -0.666603307033264760, +-0.666566035567114690, -0.666528762434549170, -0.666491487635662020, -0.666454211170546260, -0.666416933039294830, -0.666379653242000880, -0.666342371778757990, -0.666305088649659320, +-0.666267803854797450, -0.666230517394266530, -0.666193229268159270, -0.666155939476568930, -0.666118648019588420, -0.666081354897311570, -0.666044060109831420, -0.666006763657240990, +-0.665969465539633430, -0.665932165757102460, -0.665894864309741210, -0.665857561197642720, -0.665820256420899930, -0.665782949979606960, -0.665745641873856540, -0.665708332103742030, +-0.665671020669356350, -0.665633707570793430, -0.665596392808146310, -0.665559076381507800, -0.665521758290971930, -0.665484438536631750, -0.665447117118580400, -0.665409794036910920, +-0.665372469291717340, -0.665335142883092480, -0.665297814811129930, -0.665260485075922390, -0.665223153677564020, -0.665185820616147730, -0.665148485891766890, -0.665111149504514550, +-0.665073811454484630, -0.665036471741770160, -0.664999130366464630, -0.664961787328660850, -0.664924442628452850, -0.664887096265933900, -0.664849748241196800, -0.664812398554335720, +-0.664775047205443560, -0.664737694194613820, -0.664700339521939520, -0.664662983187514710, -0.664625625191432420, -0.664588265533786030, -0.664550904214668670, -0.664513541234174500, +-0.664476176592396330, -0.664438810289427750, -0.664401442325361800, -0.664364072700292630, -0.664326701414313270, -0.664289328467517090, -0.664251953859997360, -0.664214577591847990, +-0.664177199663162240, -0.664139820074033490, -0.664102438824554890, -0.664065055914820460, -0.664027671344923350, -0.663990285114956840, -0.663952897225014830, -0.663915507675190590, +-0.663878116465577710, -0.663840723596269110, -0.663803329067359060, -0.663765932878940700, -0.663728535031107400, -0.663691135523952540, -0.663653734357570140, -0.663616331532053460, +-0.663578927047495880, -0.663541520903990660, -0.663504113101632040, -0.663466703640513080, -0.663429292520727350, -0.663391879742368020, -0.663354465305529440, -0.663317049210304540, +-0.663279631456786810, -0.663242212045070280, -0.663204790975248320, -0.663167368247414290, -0.663129943861661460, -0.663092517818084200, -0.663055090116775550, -0.663017660757829310, +-0.662980229741338520, -0.662942797067397450, -0.662905362736099460, -0.662867926747538030, -0.662830489101806420, -0.662793049798998890, -0.662755608839208810, -0.662718166222529660, +-0.662680721949054810, -0.662643276018878510, -0.662605828432093920, -0.662568379188794520, -0.662530928289074450, -0.662493475733027080, -0.662456021520746010, -0.662418565652324600, +-0.662381108127857000, -0.662343648947436690, -0.662306188111157270, -0.662268725619112100, -0.662231261471395330, -0.662193795668100550, -0.662156328209321130, -0.662118859095150670, +-0.662081388325683310, -0.662043915901012530, -0.662006441821232030, -0.661968966086434960, -0.661931488696715920, -0.661894009652168050, -0.661856528952885270, -0.661819046598960740, +-0.661781562590489040, -0.661744076927563320, -0.661706589610277060, -0.661669100638724750, -0.661631610012999640, -0.661594117733195540, -0.661556623799405720, -0.661519128211724760, +-0.661481630970246040, -0.661444132075063140, -0.661406631526269550, -0.661369129323959860, -0.661331625468227210, -0.661294119959165540, -0.661256612796868200, -0.661219103981429690, +-0.661181593512943480, -0.661144081391503160, -0.661106567617202430, -0.661069052190135560, -0.661031535110396030, -0.660994016378077420, -0.660956495993274000, -0.660918973956079460, +-0.660881450266587400, -0.660843924924891410, -0.660806397931085860, -0.660768869285264350, -0.660731338987520790, -0.660693807037948440, -0.660656273436641910, -0.660618738183694650, +-0.660581201279200610, -0.660543662723253270, -0.660506122515947090, -0.660468580657375570, -0.660431037147632630, -0.660393491986811740, -0.660355945175007400, -0.660318396712313290, +-0.660280846598822800, -0.660243294834630510, -0.660205741419830130, -0.660168186354515240, -0.660130629638779550, -0.660093071272717660, -0.660055511256423140, -0.660017949589989830, +-0.659980386273511300, -0.659942821307082040, -0.659905254690795860, -0.659867686424746470, -0.659830116509027560, -0.659792544943733740, -0.659754971728958470, -0.659717396864795800, +-0.659679820351339320, -0.659642242188683610, -0.659604662376922280, -0.659567080916149020, -0.659529497806458310, -0.659491913047943860, -0.659454326640699700, -0.659416738584819310, +-0.659379148880397500, -0.659341557527527770, -0.659303964526304130, -0.659266369876820300, -0.659228773579170870, -0.659191175633449420, -0.659153576039750110, -0.659115974798166530, +-0.659078371908793260, -0.659040767371724120, -0.659003161187053040, -0.658965553354873830, -0.658927943875280970, -0.658890332748368280, -0.658852719974229670, -0.658815105552959080, +-0.658777489484650980, -0.658739871769399080, -0.658702252407297300, -0.658664631398440230, -0.658627008742921460, -0.658589384440835260, -0.658551758492275210, -0.658514130897336130, +-0.658476501656111710, -0.658438870768696120, -0.658401238235182930, -0.658363604055666960, -0.658325968230242030, -0.658288330759002170, -0.658250691642041090, -0.658213050879453700, +-0.658175408471333600, -0.658137764417775050, -0.658100118718871750, -0.658062471374718520, -0.658024822385409050, -0.657987171751037160, -0.657949519471697770, -0.657911865547484490, +-0.657874209978491550, -0.657836552764812790, -0.657798893906543000, -0.657761233403776010, -0.657723571256605850, -0.657685907465126450, -0.657648242029432620, -0.657610574949618280, +-0.657572906225777350, -0.657535235858003890, -0.657497563846392690, -0.657459890191037570, -0.657422214892032670, -0.657384537949471940, -0.657346859363450280, -0.657309179134061390, +-0.657271497261399220, -0.657233813745558670, -0.657196128586633570, -0.657158441784718050, -0.657120753339906270, -0.657083063252292820, -0.657045371521971730, -0.657007678149037270, +-0.656969983133583240, -0.656932286475704560, -0.656894588175495180, -0.656856888233049330, -0.656819186648460950, -0.656781483421824960, -0.656743778553235180, -0.656706072042785970, +-0.656668363890571370, -0.656630654096686080, -0.656592942661224140, -0.656555229584279920, -0.656517514865947230, -0.656479798506321100, -0.656442080505495460, -0.656404360863564350, +-0.656366639580622580, -0.656328916656764290, -0.656291192092083750, -0.656253465886674770, -0.656215738040632490, -0.656178008554050950, -0.656140277427024300, -0.656102544659646680, +-0.656064810252013020, -0.656027074204217240, -0.655989336516353940, -0.655951597188516810, -0.655913856220801120, -0.655876113613300780, -0.655838369366110060, -0.655800623479323220, +-0.655762875953035060, -0.655725126787339740, -0.655687375982331290, -0.655649623538104740, -0.655611869454754140, -0.655574113732373840, -0.655536356371057890, -0.655498597370901440, +-0.655460836731998510, -0.655423074454443370, -0.655385310538330270, -0.655347544983754250, -0.655309777790809460, -0.655272008959590040, -0.655234238490190360, -0.655196466382705460, +-0.655158692637229370, -0.655120917253856460, -0.655083140232680990, -0.655045361573798000, -0.655007581277301630, -0.654969799343285920, -0.654932015771846120, -0.654894230563076270, +-0.654856443717070860, -0.654818655233923910, -0.654780865113730680, -0.654743073356585330, -0.654705279962582320, -0.654667484931815700, -0.654629688264380730, -0.654591889960371540, +-0.654554090019882630, -0.654516288443008240, -0.654478485229843420, -0.654440680380482310, -0.654402873895019500, -0.654365065773549250, -0.654327256016166590, -0.654289444622965900, +-0.654251631594041210, -0.654213816929487770, -0.654176000629399730, -0.654138182693871810, -0.654100363122998020, -0.654062541916873630, -0.654024719075593010, -0.653986894599250410, +-0.653949068487940430, -0.653911240741757990, -0.653873411360797460, -0.653835580345153430, -0.653797747694920160, -0.653759913410192790, -0.653722077491065590, -0.653684239937633250, +-0.653646400749990030, -0.653608559928231080, -0.653570717472450770, -0.653532873382743680, -0.653495027659203980, -0.653457180301927120, -0.653419331311007270, -0.653381480686538780, +-0.653343628428616930, -0.653305774537335960, -0.653267919012790690, -0.653230061855075150, -0.653192203064284830, -0.653154342640513970, -0.653116480583857300, -0.653078616894409160, +-0.653040751572264710, -0.653002884617518430, -0.652965016030264910, -0.652927145810598520, -0.652889273958614620, -0.652851400474407480, -0.652813525358071910, -0.652775648609702160, +-0.652737770229393610, -0.652699890217240620, -0.652662008573337560, -0.652624125297779910, -0.652586240390661930, -0.652548353852078210, -0.652510465682123450, -0.652472575880892800, +-0.652434684448480630, -0.652396791384981860, -0.652358896690490740, -0.652321000365102650, -0.652283102408912070, -0.652245202822013810, -0.652207301604502130, -0.652169398756472620, +-0.652131494278019530, -0.652093588169237790, -0.652055680430221660, -0.652017771061066730, -0.651979860061867370, -0.651941947432717940, -0.651904033173714040, -0.651866117284950140, +-0.651828199766520840, -0.651790280618520730, -0.651752359841045180, -0.651714437434188890, -0.651676513398046330, -0.651638587732712220, -0.651600660438282020, -0.651562731514850220, +-0.651524800962511420, -0.651486868781360420, -0.651448934971492590, -0.651410999533002300, -0.651373062465984590, -0.651335123770533930, -0.651297183446745700, -0.651259241494714590, +-0.651221297914535420, -0.651183352706302570, -0.651145405870111720, -0.651107457406057350, -0.651069507314233960, -0.651031555594737130, -0.650993602247661450, -0.650955647273101850, +-0.650917690671152680, -0.650879732441909660, -0.650841772585467270, -0.650803811101920540, -0.650765847991363830, -0.650727883253892860, -0.650689916889602200, -0.650651948898586800, +-0.650613979280941110, -0.650576008036760970, -0.650538035166140620, -0.650500060669175320, -0.650462084545959440, -0.650424106796588690, -0.650386127421157760, -0.650348146419761020, +-0.650310163792494400, -0.650272179539452270, -0.650234193660729760, -0.650196206156421370, -0.650158217026622910, -0.650120226271428850, -0.650082233890934110, -0.650044239885233630, +-0.650006244254422770, -0.649968246998596340, -0.649930248117849270, -0.649892247612276260, -0.649854245481973010, -0.649816241727034120, -0.649778236347554610, -0.649740229343629180, +-0.649702220715353440, -0.649664210462822190, -0.649626198586130130, -0.649588185085372860, -0.649550169960645190, -0.649512153212042030, -0.649474134839658210, -0.649436114843589430, +-0.649398093223930270, -0.649360069980775890, -0.649322045114220980, -0.649284018624361360, -0.649245990511291620, -0.649207960775106900, -0.649169929415902010, -0.649131896433772560, +-0.649093861828813460, -0.649055825601119630, -0.649017787750786000, -0.648979748277908160, -0.648941707182580930, -0.648903664464899110, -0.648865620124958520, -0.648827574162853860, +-0.648789526578680160, -0.648751477372532470, -0.648713426544506260, -0.648675374094696670, -0.648637320023198520, -0.648599264330106730, -0.648561207015517120, -0.648523148079524490, +-0.648485087522224110, -0.648447025343710570, -0.648408961544079790, -0.648370896123426580, -0.648332829081846200, -0.648294760419433460, -0.648256690136284060, -0.648218618232492940, +-0.648180544708155340, -0.648142469563365960, -0.648104392798220740, -0.648066314412814590, -0.648028234407242330, -0.647990152781599770, -0.647952069535981940, -0.647913984670483780, +-0.647875898185200420, -0.647837810080227670, -0.647799720355660360, -0.647761629011593730, -0.647723536048122720, -0.647685441465343130, -0.647647345263349990, -0.647609247442238580, +-0.647571148002103580, -0.647533046943041150, -0.647494944265145980, -0.647456839968513550, -0.647418734053238690, -0.647380626519417300, -0.647342517367144320, -0.647304406596514670, +-0.647266294207624380, -0.647228180200568380, -0.647190064575441930, -0.647151947332340050, -0.647113828471358570, -0.647075707992592510, -0.647037585896137140, -0.646999462182087480, +-0.646961336850539580, -0.646923209901588250, -0.646885081335328960, -0.646846951151856640, -0.646808819351267220, -0.646770685933655830, -0.646732550899117630, -0.646694414247747760, +-0.646656275979642260, -0.646618136094895930, -0.646579994593604050, -0.646541851475862410, -0.646503706741766270, -0.646465560391410790, -0.646427412424890990, -0.646389262842303140, +-0.646351111643742040, -0.646312958829303290, -0.646274804399081690, -0.646236648353173400, -0.646198490691673570, -0.646160331414677440, -0.646122170522280160, -0.646084008014577770, +-0.646045843891665420, -0.646007678153638460, -0.645969510800591950, -0.645931341832622020, -0.645893171249823710, -0.645854999052292490, -0.645816825240123400, -0.645778649813412600, +-0.645740472772255210, -0.645702294116746290, -0.645664113846981860, -0.645625931963057290, -0.645587748465067830, -0.645549563353108650, -0.645511376627275980, -0.645473188287664760, +-0.645434998334370680, -0.645396806767488670, -0.645358613587114990, -0.645320418793344790, -0.645282222386273640, -0.645244024365996480, -0.645205824732609680, -0.645167623486208260, +-0.645129420626887720, -0.645091216154743410, -0.645053010069871370, -0.645014802372366750, -0.644976593062324800, -0.644938382139841780, -0.644900169605012730, -0.644861955457933230, +-0.644823739698698550, -0.644785522327404940, -0.644747303344147430, -0.644709082749021610, -0.644670860542122860, -0.644632636723547310, -0.644594411293390010, -0.644556184251746880, +-0.644517955598712830, -0.644479725334384250, -0.644441493458856370, -0.644403259972224700, -0.644365024874584580, -0.644326788166032280, -0.644288549846662950, -0.644250309916571950, +-0.644212068375855430, -0.644173825224608860, -0.644135580462927630, -0.644097334090907190, -0.644059086108643710, -0.644020836516232540, -0.643982585313769280, -0.643944332501349190, +-0.643906078079068630, -0.643867822047022860, -0.643829564405307480, -0.643791305154017950, -0.643753044293250420, -0.643714781823100380, -0.643676517743663300, -0.643638252055034550, +-0.643599984757310620, -0.643561715850586640, -0.643523445334958090, -0.643485173210521230, -0.643446899477371440, -0.643408624135604400, -0.643370347185315490, -0.643332068626601080, +-0.643293788459556430, -0.643255506684277330, -0.643217223300859060, -0.643178938309398210, -0.643140651709989910, -0.643102363502729980, -0.643064073687713900, -0.643025782265037930, +-0.642987489234797430, -0.642949194597088320, -0.642910898352005770, -0.642872600499646450, -0.642834301040105530, -0.642795999973478800, -0.642757697299861870, -0.642719393019350990, +-0.642681087132041640, -0.642642779638029180, -0.642604470537410100, -0.642566159830279870, -0.642527847516734310, -0.642489533596868670, -0.642451218070779650, -0.642412900938562510, +-0.642374582200313180, -0.642336261856127020, -0.642297939906100510, -0.642259616350329130, -0.642221291188908800, -0.642182964421934900, -0.642144636049503890, -0.642106306071711260, +-0.642067974488652940, -0.642029641300424280, -0.641991306507121880, -0.641952970108841230, -0.641914632105677780, -0.641876292497728150, -0.641837951285087690, -0.641799608467852440, +-0.641761264046117770, -0.641722918019980380, -0.641684570389535640, -0.641646221154879460, -0.641607870316107330, -0.641569517873315950, -0.641531163826600690, -0.641492808176057580, +-0.641454450921782100, -0.641416092063870850, -0.641377731602419400, -0.641339369537523570, -0.641301005869278960, -0.641262640597782260, -0.641224273723128960, -0.641185905245414520, +-0.641147535164735770, -0.641109163481188070, -0.641070790194867570, -0.641032415305869630, -0.640994038814291070, -0.640955660720227470, -0.640917281023774650, -0.640878899725028320, +-0.640840516824085050, -0.640802132321040440, -0.640763746215990640, -0.640725358509031010, -0.640686969200258360, -0.640648578289768290, -0.640610185777656830, -0.640571791664019450, +-0.640533395948952980, -0.640494998632553100, -0.640456599714915640, -0.640418199196136410, -0.640379797076311870, -0.640341393355537970, -0.640302988033910280, -0.640264581111525400, +-0.640226172588479030, -0.640187762464867300, -0.640149350740785720, -0.640110937416331180, -0.640072522491599290, -0.640034105966686080, -0.639995687841687260, -0.639957268116699620, +-0.639918846791818760, -0.639880423867140840, -0.639841999342761420, -0.639803573218777450, -0.639765145495284400, -0.639726716172378640, -0.639688285250155640, -0.639649852728712330, +-0.639611418608144410, -0.639572982888547580, -0.639534545570018540, -0.639496106652653330, -0.639457666136547640, -0.639419224021797630, -0.639380780308499760, -0.639342334996749970, +-0.639303888086644400, -0.639265439578278750, -0.639226989471749830, -0.639188537767153450, -0.639150084464585650, -0.639111629564142470, -0.639073173065920370, -0.639034714970015410, +-0.638996255276523710, -0.638957793985540980, -0.638919331097164140, -0.638880866611488910, -0.638842400528611190, -0.638803932848627910, -0.638765463571634660, -0.638726992697727810, +-0.638688520227003180, -0.638650046159557560, -0.638611570495486780, -0.638573093234887090, -0.638534614377854410, -0.638496133924485450, -0.638457651874876130, -0.638419168229122810, +-0.638380682987321090, -0.638342196149568110, -0.638303707715959570, -0.638265217686591720, -0.638226726061560610, -0.638188232840962930, -0.638149738024894720, -0.638111241613451790, +-0.638072743606731160, -0.638034244004828550, -0.637995742807840440, -0.637957240015862630, -0.637918735628992040, -0.637880229647324490, -0.637841722070956570, -0.637803212899983870, +-0.637764702134503540, -0.637726189774611370, -0.637687675820403870, -0.637649160271976710, -0.637610643129427060, -0.637572124392850830, -0.637533604062344160, -0.637495082138003210, +-0.637456558619924900, -0.637418033508205250, -0.637379506802940420, -0.637340978504226550, -0.637302448612160570, -0.637263917126838500, -0.637225384048356160, -0.637186849376810800, +-0.637148313112298360, -0.637109775254915080, -0.637071235804757000, -0.637032694761921260, -0.636994152126503680, -0.636955607898600730, -0.636917062078308450, -0.636878514665723870, +-0.636839965660943030, -0.636801415064062180, -0.636762862875177580, -0.636724309094386040, -0.636685753721783820, -0.636647196757467170, -0.636608638201532130, -0.636570078054075950, +-0.636531516315194560, -0.636492952984983980, -0.636454388063541380, -0.636415821550962770, -0.636377253447344640, -0.636338683752783130, -0.636300112467375170, -0.636261539591216900, +-0.636222965124404790, -0.636184389067034890, -0.636145811419204450, -0.636107232181009510, -0.636068651352546420, -0.636030068933911340, -0.635991484925201410, -0.635952899326512890, +-0.635914312137942030, -0.635875723359584980, -0.635837132991539100, -0.635798541033900320, -0.635759947486764900, -0.635721352350229860, -0.635682755624391470, -0.635644157309346200, +-0.635605557405190200, -0.635566955912020730, -0.635528352829933810, -0.635489748159025920, -0.635451141899393450, -0.635412534051133400, -0.635373924614342060, -0.635335313589115880, +-0.635296700975551020, -0.635258086773744850, -0.635219470983793390, -0.635180853605793240, -0.635142234639840650, -0.635103614086032890, -0.635064991944465970, -0.635026368215236610, +-0.634987742898441070, -0.634949115994176360, -0.634910487502538980, -0.634871857423625060, -0.634833225757531760, -0.634794592504355440, -0.634755957664192570, -0.634717321237139530, +-0.634678683223293460, -0.634640043622750840, -0.634601402435607920, -0.634562759661961300, -0.634524115301908000, -0.634485469355544510, -0.634446821822967300, -0.634408172704272740, +-0.634369521999557980, -0.634330869708919500, -0.634292215832453880, -0.634253560370257260, -0.634214903322427250, -0.634176244689059860, -0.634137584470251590, -0.634098922666099570, +-0.634060259276700400, -0.634021594302150440, -0.633982927742546280, -0.633944259597985060, -0.633905589868563270, -0.633866918554377380, -0.633828245655523980, -0.633789571172100220, +-0.633750895104202570, -0.633712217451927740, -0.633673538215371870, -0.633634857394632660, -0.633596174989806250, -0.633557491000989350, -0.633518805428278430, -0.633480118271770860, +-0.633441429531562910, -0.633402739207751140, -0.633364047300432830, -0.633325353809704340, -0.633286658735662590, -0.633247962078403730, -0.633209263838025340, -0.633170564014623900, +-0.633131862608295900, -0.633093159619138040, -0.633054455047247440, -0.633015748892720830, -0.632977041155654900, -0.632938331836145900, -0.632899620934291420, -0.632860908450187940, +-0.632822194383932280, -0.632783478735620690, -0.632744761505350750, -0.632706042693218840, -0.632667322299321540, -0.632628600323756340, -0.632589876766619600, -0.632551151628008120, +-0.632512424908018400, -0.632473696606748010, -0.632434966724293450, -0.632396235260751390, -0.632357502216218450, -0.632318767590791970, -0.632280031384568670, -0.632241293597645360, +-0.632202554230118400, -0.632163813282085370, -0.632125070753642880, -0.632086326644887620, -0.632047580955916290, -0.632008833686826250, -0.631970084837714220, -0.631931334408676880, +-0.631892582399810940, -0.631853828811213880, -0.631815073642982280, -0.631776316895212630, -0.631737558568002510, -0.631698798661448510, -0.631660037175647450, -0.631621274110696020, +-0.631582509466691700, -0.631543743243731190, -0.631504975441911200, -0.631466206061328530, -0.631427435102080660, -0.631388662564264180, -0.631349888447976130, -0.631311112753312980, +-0.631272335480372320, -0.631233556629250850, -0.631194776200045490, -0.631155994192852840, -0.631117210607770600, -0.631078425444895340, -0.631039638704323560, -0.631000850386153170, +-0.630962060490480540, -0.630923269017402810, -0.630884475967016580, -0.630845681339419540, -0.630806885134708170, -0.630768087352979730, -0.630729287994330590, -0.630690487058858660, +-0.630651684546660540, -0.630612880457833150, -0.630574074792473180, -0.630535267550678460, -0.630496458732545560, -0.630457648338171420, -0.630418836367652840, -0.630380022821087630, +-0.630341207698572270, -0.630302391000203580, -0.630263572726079250, -0.630224752876295870, -0.630185931450950810, -0.630147108450140440, -0.630108283873962670, -0.630069457722514210, +-0.630030629995892100, -0.629991800694193140, -0.629952969817514920, -0.629914137365954250, -0.629875303339608280, -0.629836467738573820, -0.629797630562948350, -0.629758791812828900, +-0.629719951488312500, -0.629681109589495860, -0.629642266116476780, -0.629603421069352080, -0.629564574448218670, -0.629525726253173600, -0.629486876484314560, -0.629448025141738370, +-0.629409172225541710, -0.629370317735822420, -0.629331461672677390, -0.629292604036203680, -0.629253744826498210, -0.629214884043658660, -0.629176021687781860, -0.629137157758965060, +-0.629098292257304960, -0.629059425182899590, -0.629020556535845540, -0.628981686316240070, -0.628942814524180220, -0.628903941159763560, -0.628865066223087020, -0.628826189714247860, +-0.628787311633342890, -0.628748431980469920, -0.628709550755725880, -0.628670667959207670, -0.628631783591013130, -0.628592897651239160, -0.628554010139982910, -0.628515121057341310, +-0.628476230403412270, -0.628437338178292610, -0.628398444382079590, -0.628359549014870120, -0.628320652076762130, -0.628281753567852540, -0.628242853488238500, -0.628203951838017030, +-0.628165048617286060, -0.628126143826142400, -0.628087237464683420, -0.628048329533006040, -0.628009420031208080, -0.627970508959386660, -0.627931596317638620, -0.627892682106061860, +-0.627853766324753430, -0.627814848973810570, -0.627775930053330320, -0.627737009563410500, -0.627698087504148240, -0.627659163875640690, -0.627620238677984890, -0.627581311911278860, +-0.627542383575619530, -0.627503453671104270, -0.627464522197830110, -0.627425589155894860, -0.627386654545395660, -0.627347718366429890, -0.627308780619094340, -0.627269841303487290, +-0.627230900419705640, -0.627191957967846440, -0.627153013948007600, -0.627114068360286270, -0.627075121204779710, -0.627036172481585050, -0.626997222190800340, -0.626958270332522490, +-0.626919316906848990, -0.626880361913876860, -0.626841405353704250, -0.626802447226428080, -0.626763487532145720, -0.626724526270954320, -0.626685563442952010, -0.626646599048235720, +-0.626607633086903040, -0.626568665559050890, -0.626529696464777300, -0.626490725804179640, -0.626451753577355050, -0.626412779784400800, -0.626373804425414900, -0.626334827500494520, +-0.626295849009736670, -0.626256868953239620, -0.626217887331100400, -0.626178904143416370, -0.626139919390284790, -0.626100933071803810, -0.626061945188070460, -0.626022955739182210, +-0.625983964725236210, -0.625944972146330710, -0.625905978002562760, -0.625866982294029820, -0.625827985020829150, -0.625788986183058780, -0.625749985780816090, -0.625710983814198320, +-0.625671980283302730, -0.625632975188227580, -0.625593968529070010, -0.625554960305927170, -0.625515950518897190, -0.625476939168077450, -0.625437926253565310, -0.625398911775458030, +-0.625359895733853750, -0.625320878128849730, -0.625281858960543560, -0.625242838229032480, -0.625203815934414540, -0.625164792076787100, -0.625125766656247640, -0.625086739672893410, +-0.625047711126822780, -0.625008681018132780, -0.624969649346921120, -0.624930616113284930, -0.624891581317322590, -0.624852544959131340, -0.624813507038808340, -0.624774467556451940, +-0.624735426512159300, -0.624696383906028220, -0.624657339738155740, -0.624618294008640220, -0.624579246717579030, -0.624540197865069760, -0.624501147451209550, -0.624462095476096880, +-0.624423041939829000, -0.624383986842503510, -0.624344930184217660, -0.624305871965069810, -0.624266812185157340, -0.624227750844577820, -0.624188687943428630, -0.624149623481807910, +-0.624110557459813250, -0.624071489877542240, -0.624032420735092020, -0.623993350032561180, -0.623954277770046970, -0.623915203947646770, -0.623876128565458820, -0.623837051623580610, +-0.623797973122109720, -0.623758893061143520, -0.623719811440780480, -0.623680728261117980, -0.623641643522253600, -0.623602557224284700, -0.623563469367309780, -0.623524379951426290, +-0.623485288976731720, -0.623446196443323660, -0.623407102351300480, -0.623368006700759420, -0.623328909491798420, -0.623289810724514840, -0.623250710399007040, -0.623211608515372490, +-0.623172505073708580, -0.623133400074113660, -0.623094293516685330, -0.623055185401521270, -0.623016075728718870, -0.622976964498376580, -0.622937851710591910, -0.622898737365462640, +-0.622859621463086150, -0.622820504003561040, -0.622781384986984540, -0.622742264413454700, -0.622703142283068780, -0.622664018595925350, -0.622624893352121900, -0.622585766551756240, +-0.622546638194925730, -0.622507508281729070, -0.622468376812263640, -0.622429243786626780, -0.622390109204917330, -0.622350973067232530, -0.622311835373670300, -0.622272696124328120, +-0.622233555319304580, -0.622194412958697150, -0.622155269042603650, -0.622116123571121670, -0.622076976544349680, -0.622037827962385270, -0.621998677825326250, -0.621959526133270320, +-0.621920372886315740, -0.621881218084560430, -0.621842061728101970, -0.621802903817037960, -0.621763744351467080, -0.621724583331486840, -0.621685420757194800, -0.621646256628689550, +-0.621607090946068700, -0.621567923709430150, -0.621528754918871380, -0.621489584574490990, -0.621450412676386790, -0.621411239224656460, -0.621372064219397720, -0.621332887660709150, +-0.621293709548688340, -0.621254529883433330, -0.621215348665041580, -0.621176165893611910, -0.621136981569241690, -0.621097795692029160, -0.621058608262071710, -0.621019419279468020, +-0.620980228744315910, -0.620941036656713190, -0.620901843016757440, -0.620862647824547590, -0.620823451080181000, -0.620784252783755490, -0.620745052935369630, -0.620705851535121140, +-0.620666648583108050, -0.620627444079428050, -0.620588238024179730, -0.620549030417460790, -0.620509821259369380, -0.620470610550002970, -0.620431398289460480, -0.620392184477839390, +-0.620352969115237850, -0.620313752201753550, -0.620274533737485310, -0.620235313722530600, -0.620196092156987680, -0.620156869040954130, -0.620117644374528880, -0.620078418157809400, +-0.620039190390893500, -0.619999961073880110, -0.619960730206866710, -0.619921497789951540, -0.619882263823232190, -0.619843028306807600, -0.619803791240775450, -0.619764552625233780, +-0.619725312460280400, -0.619686070746014120, -0.619646827482532640, -0.619607582669934100, -0.619568336308316200, -0.619529088397777870, -0.619489838938416800, -0.619450587930331140, +-0.619411335373618700, -0.619372081268378170, -0.619332825614707480, -0.619293568412704440, -0.619254309662467750, -0.619215049364095330, -0.619175787517685210, -0.619136524123335420, +-0.619097259181144550, -0.619057992691210530, -0.619018724653631610, -0.618979455068505490, -0.618940183935931090, -0.618900911256006210, -0.618861637028829010, -0.618822361254497410, +-0.618783083933110320, -0.618743805064765450, -0.618704524649561050, -0.618665242687595040, -0.618625959178966230, -0.618586674123772550, -0.618547387522112140, -0.618508099374083020, +-0.618468809679783900, -0.618429518439312820, -0.618390225652767580, -0.618350931320247100, -0.618311635441849190, -0.618272338017672340, -0.618233039047814240, -0.618193738532373920, +-0.618154436471449300, -0.618115132865138530, -0.618075827713539530, -0.618036521016751440, -0.617997212774871960, -0.617957902987999460, -0.617918591656231860, -0.617879278779668080, +-0.617839964358406160, -0.617800648392544340, -0.617761330882180550, -0.617722011827413710, -0.617682691228341850, -0.617643369085063010, -0.617604045397675990, -0.617564720166278950, +-0.617525393390970010, -0.617486065071847330, -0.617446735209009830, -0.617407403802555430, -0.617368070852582610, -0.617328736359189170, -0.617289400322474260, -0.617250062742535910, +-0.617210723619472380, -0.617171382953381590, -0.617132040744362790, -0.617092696992513900, -0.617053351697933180, -0.617014004860718890, -0.616974656480969830, -0.616935306558784150, +-0.616895955094259760, -0.616856602087495930, -0.616817247538590570, -0.616777891447642170, -0.616738533814748520, -0.616699174640009010, -0.616659813923521540, -0.616620451665384590, +-0.616581087865696100, -0.616541722524555300, -0.616502355642060130, -0.616462987218309060, -0.616423617253400220, -0.616384245747432670, -0.616344872700504420, -0.616305498112714070, +-0.616266121984159640, -0.616226744314940290, -0.616187365105154040, -0.616147984354899370, -0.616108602064274310, -0.616069218233378240, -0.616029832862309060, -0.615990445951164920, +-0.615951057500044970, -0.615911667509047470, -0.615872275978270770, -0.615832882907813130, -0.615793488297773470, -0.615754092148250170, -0.615714694459341680, -0.615675295231146060, +-0.615635894463762550, -0.615596492157289290, -0.615557088311824760, -0.615517682927467220, -0.615478276004315820, -0.615438867542468680, -0.615399457542024520, -0.615360046003081250, +-0.615320632925738130, -0.615281218310093530, -0.615241802156245580, -0.615202384464293430, -0.615162965234335330, -0.615123544466469770, -0.615084122160795000, -0.615044698317410380, +-0.615005272936413940, -0.614965846017904270, -0.614926417561979740, -0.614886987568739380, -0.614847556038281670, -0.614808122970704970, -0.614768688366107760, -0.614729252224589070, +-0.614689814546247270, -0.614650375331180940, -0.614610934579488340, -0.614571492291268730, -0.614532048466620350, -0.614492603105641580, -0.614453156208431550, -0.614413707775088750, +-0.614374257805711640, -0.614334806300398490, -0.614295353259248670, -0.614255898682360520, -0.614216442569832650, -0.614176984921763310, -0.614137525738251750, -0.614098065019396460, +-0.614058602765296000, -0.614019138976048760, -0.613979673651753880, -0.613940206792509930, -0.613900738398415410, -0.613861268469568680, -0.613821797006069200, -0.613782324008015130, +-0.613742849475504950, -0.613703373408638010, -0.613663895807512570, -0.613624416672227450, -0.613584936002881000, -0.613545453799572480, -0.613505970062400370, -0.613466484791463260, +-0.613426997986859620, -0.613387509648688820, -0.613348019777049340, -0.613308528372039750, -0.613269035433758440, -0.613229540962304980, -0.613190044957777620, -0.613150547420275080, +-0.613111048349895940, -0.613071547746739440, -0.613032045610904190, -0.612992541942488760, -0.612953036741591520, -0.612913530008312170, -0.612874021742748960, -0.612834511945000380, +-0.612795000615165790, -0.612755487753343760, -0.612715973359633010, -0.612676457434131900, -0.612636939976940130, -0.612597420988155950, -0.612557900467878170, -0.612518378416205380, +-0.612478854833236940, -0.612439329719071330, -0.612399803073807370, -0.612360274897543630, -0.612320745190379600, -0.612281213952413640, -0.612241681183744670, -0.612202146884471050, +-0.612162611054692500, -0.612123073694507470, -0.612083534804014340, -0.612043994383312700, -0.612004452432501120, -0.611964908951678320, -0.611925363940942990, -0.611885817400394600, +-0.611846269330131640, -0.611806719730253020, -0.611767168600857230, -0.611727615942043950, -0.611688061753911550, -0.611648506036558960, -0.611608948790084870, -0.611569390014588650, +-0.611529829710169000, -0.611490267876924840, -0.611450704514954540, -0.611411139624357890, -0.611371573205233390, -0.611332005257679610, -0.611292435781796150, -0.611252864777681590, +-0.611213292245434970, -0.611173718185154650, -0.611134142596940430, -0.611094565480890810, -0.611054986837104910, -0.611015406665681100, -0.610975824966719090, -0.610936241740317580, +-0.610896656986575360, -0.610857070705591250, -0.610817482897464850, -0.610777893562294620, -0.610738302700179700, -0.610698710311218700, -0.610659116395511290, -0.610619520953156080, +-0.610579923984252090, -0.610540325488897920, -0.610500725467193250, -0.610461123919236790, -0.610421520845127130, -0.610381916244964070, -0.610342310118846210, -0.610302702466872570, +-0.610263093289141860, -0.610223482585753650, -0.610183870356806880, -0.610144256602400350, -0.610104641322632870, -0.610065024517604030, -0.610025406187412740, -0.609985786332157940, +-0.609946164951938320, -0.609906542046853570, -0.609866917617002510, -0.609827291662484170, -0.609787664183397250, -0.609748035179841440, -0.609708404651915670, -0.609668772599718410, +-0.609629139023349700, -0.609589503922908120, -0.609549867298492700, -0.609510229150202250, -0.609470589478136700, -0.609430948282394520, -0.609391305563075080, -0.609351661320277070, +-0.609312015554100080, -0.609272368264643260, -0.609232719452005410, -0.609193069116285350, -0.609153417257583100, -0.609113763875997250, -0.609074108971626950, -0.609034452544571110, +-0.608994794594929440, -0.608955135122800750, -0.608915474128283950, -0.608875811611478750, -0.608836147572484050, -0.608796482011398910, -0.608756814928322340, -0.608717146323354050, +-0.608677476196592850, -0.608637804548137980, -0.608598131378088270, -0.608558456686543510, -0.608518780473602640, -0.608479102739364900, -0.608439423483928990, -0.608399742707394830, +-0.608360060409861350, -0.608320376591427790, -0.608280691252192860, -0.608241004392256590, -0.608201316011717790, -0.608161626110675260, -0.608121934689229150, -0.608082241747478160, +-0.608042547285521540, -0.608002851303458210, -0.607963153801388100, -0.607923454779410120, -0.607883754237623530, -0.607844052176127140, -0.607804348595021080, -0.607764643494404070, +-0.607724936874375450, -0.607685228735034170, -0.607645519076480120, -0.607605807898812240, -0.607566095202130010, -0.607526380986532000, -0.607486665252118470, -0.607446947998988350, +-0.607407229227240770, -0.607367508936974780, -0.607327787128290390, -0.607288063801286530, -0.607248338956062120, -0.607208612592717190, -0.607168884711350780, -0.607129155312062130, +-0.607089424394950280, -0.607049691960115270, -0.607009958007655890, -0.606970222537671740, -0.606930485550261630, -0.606890747045525700, -0.606851007023562870, -0.606811265484472510, +-0.606771522428353640, -0.606731777855306300, -0.606692031765429520, -0.606652284158822660, -0.606612535035584770, -0.606572784395815860, -0.606533032239615080, -0.606493278567081240, +-0.606453523378314600, -0.606413766673414180, -0.606374008452479350, -0.606334248715609150, -0.606294487462903600, -0.606254724694461840, -0.606214960410383360, -0.606175194610767080, +-0.606135427295713240, -0.606095658465320760, -0.606055888119689130, -0.606016116258917380, -0.605976342883105760, -0.605936567992353290, -0.605896791586759350, -0.605857013666423080, +-0.605817234231444730, -0.605777453281923120, -0.605737670817957710, -0.605697886839648310, -0.605658101347094300, -0.605618314340395040, -0.605578525819649550, -0.605538735784958200, +-0.605498944236420030, -0.605459151174134400, -0.605419356598200560, -0.605379560508718770, -0.605339762905787950, -0.605299963789507790, -0.605260163159977330, -0.605220361017296930, +-0.605180557361565510, -0.605140752192882770, -0.605100945511347740, -0.605061137317060680, -0.605021327610120840, -0.604981516390627690, -0.604941703658680390, -0.604901889414379060, +-0.604862073657823180, -0.604822256389111690, -0.604782437608344830, -0.604742617315621960, -0.604702795511042560, -0.604662972194705770, -0.604623147366711970, -0.604583321027160280, +-0.604543493176150300, -0.604503663813781180, -0.604463832940153270, -0.604424000555365830, -0.604384166659518330, -0.604344331252710030, -0.604304494335041410, -0.604264655906611380, +-0.604224815967519760, -0.604184974517865790, -0.604145131557749740, -0.604105287087270850, -0.604065441106528380, -0.604025593615622690, -0.603985744614652930, -0.603945894103718910, +-0.603906042082919760, -0.603866188552355740, -0.603826333512126450, -0.603786476962331230, -0.603746618903069470, -0.603706759334441510, -0.603666898256546620, -0.603627035669484500, +-0.603587171573354510, -0.603547305968256900, -0.603507438854291030, -0.603467570231556620, -0.603427700100152790, -0.603387828460180130, -0.603347955311737900, -0.603308080654925470, +-0.603268204489843200, -0.603228326816590330, -0.603188447635266690, -0.603148566945971630, -0.603108684748805410, -0.603068801043867510, -0.603028915831257620, -0.602989029111075100, +-0.602949140883420330, -0.602909251148392780, -0.602869359906092030, -0.602829467156617560, -0.602789572900069740, -0.602749677136548030, -0.602709779866152150, -0.602669881088981450, +-0.602629980805136300, -0.602590079014716280, -0.602550175717820770, -0.602510270914550120, -0.602470364605003810, -0.602430456789281530, -0.602390547467482770, -0.602350636639708000, +-0.602310724306056700, -0.602270810466628450, -0.602230895121522950, -0.602190978270840560, -0.602151059914680650, -0.602111140053143150, -0.602071218686327400, -0.602031295814334010, +-0.601991371437262330, -0.601951445555212290, -0.601911518168283250, -0.601871589276575800, -0.601831658880189300, -0.601791726979223670, -0.601751793573778390, -0.601711858663954050, +-0.601671922249849890, -0.601631984331565730, -0.601592044909201930, -0.601552103982857970, -0.601512161552633760, -0.601472217618628790, -0.601432272180943640, -0.601392325239677890, +-0.601352376794931250, -0.601312426846803310, -0.601272475395394630, -0.601232522440804830, -0.601192567983133700, -0.601152612022480830, -0.601112654558946690, -0.601072695592630990, +-0.601032735123633530, -0.600992773152053910, -0.600952809677992580, -0.600912844701549380, -0.600872878222823650, -0.600832910241916100, -0.600792940758926310, -0.600752969773954090, +-0.600712997287099150, -0.600673023298462060, -0.600633047808142310, -0.600593070816240030, -0.600553092322854810, -0.600513112328087020, -0.600473130832036570, -0.600433147834803280, +-0.600393163336486730, -0.600353177337187740, -0.600313189837005660, -0.600273200836040740, -0.600233210334392360, -0.600193218332161330, -0.600153224829447220, -0.600113229826349740, +-0.600073233322969580, -0.600033235319406330, -0.599993235815759920, -0.599953234812130140, -0.599913232308617590, -0.599873228305321970, -0.599833222802343300, -0.599793215799781180, +-0.599753207297736290, -0.599713197296308560, -0.599673185795597700, -0.599633172795703610, -0.599593158296726880, -0.599553142298767330, -0.599513124801924870, -0.599473105806299200, +-0.599433085311991240, -0.599393063319100470, -0.599353039827727030, -0.599313014837970730, -0.599272988349932150, -0.599232960363711210, -0.599192930879407390, -0.599152899897121730, +-0.599112867416953690, -0.599072833439003530, -0.599032797963370940, -0.598992760990156750, -0.598952722519460630, -0.598912682551382640, -0.598872641086022670, -0.598832598123481440, +-0.598792553663858750, -0.598752507707254630, -0.598712460253768790, -0.598672411303502350, -0.598632360856554690, -0.598592308913026280, -0.598552255473016710, -0.598512200536626790, +-0.598472144103956440, -0.598432086175105350, -0.598392026750174330, -0.598351965829263310, -0.598311903412472420, -0.598271839499901370, -0.598231774091651070, -0.598191707187821330, +-0.598151638788512300, -0.598111568893823890, -0.598071497503856800, -0.598031424618711060, -0.597991350238486710, -0.597951274363283660, -0.597911196993202830, -0.597871118128343930, +-0.597831037768807310, -0.597790955914692670, -0.597750872566101040, -0.597710787723132130, -0.597670701385885960, -0.597630613554463450, -0.597590524228964410, -0.597550433409488990, +-0.597510341096137100, -0.597470247289009770, -0.597430151988206810, -0.597390055193828480, -0.597349956905974700, -0.597309857124746270, -0.597269755850243330, -0.597229653082565930, +-0.597189548821814080, -0.597149443068088590, -0.597109335821489620, -0.597069227082117290, -0.597029116850071540, -0.596989005125453280, -0.596948891908362530, -0.596908777198899230, +-0.596868660997164400, -0.596828543303257850, -0.596788424117279950, -0.596748303439330610, -0.596708181269510970, -0.596668057607920740, -0.596627932454660390, -0.596587805809829950, +-0.596547677673530230, -0.596507548045861480, -0.596467416926923730, -0.596427284316817020, -0.596387150215642590, -0.596347014623500260, -0.596306877540490390, -0.596266738966712890, +-0.596226598902269030, -0.596186457347258610, -0.596146314301782000, -0.596106169765939330, -0.596066023739831530, -0.596025876223558740, -0.595985727217220760, -0.595945576720918970, +-0.595905424734753160, -0.595865271258823830, -0.595825116293230980, -0.595784959838075670, -0.595744801893457910, -0.595704642459478180, -0.595664481536236520, -0.595624319123833960, +-0.595584155222370630, -0.595543989831947010, -0.595503822952662910, -0.595463654584619690, -0.595423484727917280, -0.595383313382656150, -0.595343140548936440, -0.595302966226859190, +-0.595262790416524630, -0.595222613118032600, -0.595182434331484430, -0.595142254056980180, -0.595102072294620310, -0.595061889044504970, -0.595021704306735180, -0.594981518081411090, +-0.594941330368633280, -0.594901141168501790, -0.594860950481117760, -0.594820758306581430, -0.594780564644993180, -0.594740369496453040, -0.594700172861062470, -0.594659974738921400, +-0.594619775130130420, -0.594579574034789670, -0.594539371453000290, -0.594499167384862530, -0.594458961830476530, -0.594418754789943330, -0.594378546263363390, -0.594338336250836980, +-0.594298124752464460, -0.594257911768346970, -0.594217697298584650, -0.594177481343278190, -0.594137263902527520, -0.594097044976434230, -0.594056824565098120, -0.594016602668620110, +-0.593976379287100120, -0.593936154420639630, -0.593895928069338770, -0.593855700233298030, -0.593815470912617660, -0.593775240107399020, -0.593735007817742240, -0.593694774043748040, +-0.593654538785516440, -0.593614302043148910, -0.593574063816745600, -0.593533824106406760, -0.593493582912233750, -0.593453340234326720, -0.593413096072786360, -0.593372850427712930, +-0.593332603299207780, -0.593292354687371070, -0.593252104592303490, -0.593211853014105280, -0.593171599952877720, -0.593131345408721260, -0.593091089381736380, -0.593050831872023450, +-0.593010572879683840, -0.592970312404817790, -0.592930050447525890, -0.592889787007908510, -0.592849522086067120, -0.592809255682101850, -0.592768987796113090, -0.592728718428202180, +-0.592688447578469500, -0.592648175247015740, -0.592607901433941150, -0.592567626139347210, -0.592527349363334180, -0.592487071106002740, -0.592446791367453260, -0.592406510147787220, +-0.592366227447104880, -0.592325943265506920, -0.592285657603093820, -0.592245370459966840, -0.592205081836226550, -0.592164791731973450, -0.592124500147308110, -0.592084207082331890, +-0.592043912537145060, -0.592003616511848070, -0.591963319006542530, -0.591923020021328570, -0.591882719556307110, -0.591842417611578520, -0.591802114187244150, -0.591761809283404610, +-0.591721502900160460, -0.591681195037612300, -0.591640885695861370, -0.591600574875008390, -0.591560262575153820, -0.591519948796398350, -0.591479633538843250, -0.591439316802589210, +-0.591398998587736810, -0.591358678894386540, -0.591318357722639850, -0.591278035072597350, -0.591237710944359510, -0.591197385338027570, -0.591157058253702240, -0.591116729691484320, +-0.591076399651474180, -0.591036068133773410, -0.590995735138482360, -0.590955400665702070, -0.590915064715532900, -0.590874727288076440, -0.590834388383433160, -0.590794048001703990, +-0.590753706142989170, -0.590713362807390620, -0.590673017995008490, -0.590632671705943910, -0.590592323940297260, -0.590551974698170220, -0.590511623979663170, -0.590471271784877130, +-0.590430918113912570, -0.590390562966870980, -0.590350206343853050, -0.590309848244959250, -0.590269488670291160, -0.590229127619949280, -0.590188765094034730, -0.590148401092647770, +-0.590108035615890200, -0.590067668663862620, -0.590027300236665830, -0.589986930334400420, -0.589946558957167970, -0.589906186105069290, -0.589865811778204960, -0.589825435976675800, +-0.589785058700583510, -0.589744679950028550, -0.589704299725111740, -0.589663918025933990, -0.589623534852596660, -0.589583150205200580, -0.589542764083846320, -0.589502376488635460, +-0.589461987419668600, -0.589421596877046870, -0.589381204860870760, -0.589340811371241950, -0.589300416408261140, -0.589260019972029260, -0.589219622062647000, -0.589179222680216050, +-0.589138821824837010, -0.589098419496610900, -0.589058015695638430, -0.589017610422021280, -0.588977203675860150, -0.588936795457255970, -0.588896385766309430, -0.588855974603122220, +-0.588815561967795160, -0.588775147860428840, -0.588734732281124940, -0.588694315229984280, -0.588653896707107770, -0.588613476712596230, -0.588573055246551350, -0.588532632309073820, +-0.588492207900264690, -0.588451782020224630, -0.588411354669055590, -0.588370925846858130, -0.588330495553733290, -0.588290063789781880, -0.588249630555105710, -0.588209195849805470, +-0.588168759673982190, -0.588128322027736680, -0.588087882911170650, -0.588047442324384990, -0.588007000267480760, -0.587966556740558640, -0.587926111743720450, -0.587885665277066980, +-0.587845217340699060, -0.587804767934718360, -0.587764317059225830, -0.587723864714322360, -0.587683410900109000, -0.587642955616687450, -0.587602498864158500, -0.587562040642623300, +-0.587521580952182650, -0.587481119792938490, -0.587440657164991390, -0.587400193068442710, -0.587359727503393160, -0.587319260469944760, -0.587278791968198100, -0.587238321998254430, +-0.587197850560214670, -0.587157377654180630, -0.587116903280253120, -0.587076427438533060, -0.587035950129122240, -0.586995471352121490, -0.586954991107632160, -0.586914509395754960, +-0.586874026216591790, -0.586833541570243590, -0.586793055456811600, -0.586752567876396510, -0.586712078829100480, -0.586671588315024200, -0.586631096334268910, -0.586590602886935540, +-0.586550107973126010, -0.586509611592941240, -0.586469113746482470, -0.586428614433850410, -0.586388113655147310, -0.586347611410473980, -0.586307107699931110, -0.586266602523620950, +-0.586226095881644200, -0.586185587774102230, -0.586145078201095960, -0.586104567162727300, -0.586064054659097280, -0.586023540690307150, -0.585983025256457730, -0.585942508357651160, +-0.585901989993988240, -0.585861470165570440, -0.585820948872498580, -0.585780426114874690, -0.585739901892799790, -0.585699376206375020, -0.585658849055701540, -0.585618320440881250, +-0.585577790362015180, -0.585537258819204260, -0.585496725812550630, -0.585456191342155100, -0.585415655408119130, -0.585375118010543650, -0.585334579149530800, -0.585294038825181380, +-0.585253497037596990, -0.585212953786878430, -0.585172409073127840, -0.585131862896446140, -0.585091315256934920, -0.585050766154694980, -0.585010215589828570, -0.584969663562436510, +-0.584929110072620380, -0.584888555120481100, -0.584847998706120810, -0.584807440829640420, -0.584766881491141530, -0.584726320690725050, -0.584685758428493130, -0.584645194704546790, +-0.584604629518987170, -0.584564062871916200, -0.584523494763435240, -0.584482925193645420, -0.584442354162648000, -0.584401781670545020, -0.584361207717437600, -0.584320632303427120, +-0.584280055428614720, -0.584239477093102530, -0.584198897296991700, -0.584158316040383600, -0.584117733323379350, -0.584077149146081110, -0.584036563508590010, -0.583995976411007530, +-0.583955387853434700, -0.583914797835973780, -0.583874206358725890, -0.583833613421792070, -0.583793019025274700, -0.583752423169274670, -0.583711825853893580, -0.583671227079232580, +-0.583630626845393910, -0.583590025152478600, -0.583549422000588350, -0.583508817389824070, -0.583468211320288140, -0.583427603792081690, -0.583386994805306200, -0.583346384360062920, +-0.583305772456453990, -0.583265159094580650, -0.583224544274544400, -0.583183927996446470, -0.583143310260389120, -0.583102691066473390, -0.583062070414800630, -0.583021448305472980, +-0.582980824738591810, -0.582940199714258480, -0.582899573232574350, -0.582858945293641680, -0.582818315897561610, -0.582777685044435720, -0.582737052734365270, -0.582696418967452610, +-0.582655783743798890, -0.582615147063505700, -0.582574508926674170, -0.582533869333406900, -0.582493228283804900, -0.582452585777969770, -0.582411941816002860, -0.582371296398006440, +-0.582330649524081760, -0.582290001194330500, -0.582249351408853810, -0.582208700167754170, -0.582168047471132820, -0.582127393319090910, -0.582086737711730920, -0.582046080649154090, +-0.582005422131462000, -0.581964762158756030, -0.581924100731138540, -0.581883437848710770, -0.581842773511574430, -0.581802107719830760, -0.581761440473582140, -0.581720771772930020, +-0.581680101617975900, -0.581639430008821230, -0.581598756945568280, -0.581558082428318520, -0.581517406457173420, -0.581476729032234570, -0.581436050153604220, -0.581395369821383730, +-0.581354688035674470, -0.581314004796578910, -0.581273320104198190, -0.581232633958634230, -0.581191946359988390, -0.581151257308363030, -0.581110566803859530, -0.581069874846579570, +-0.581029181436624520, -0.580988486574096960, -0.580947790259098150, -0.580907092491729890, -0.580866393272093550, -0.580825692600291490, -0.580784990476425290, -0.580744286900596540, +-0.580703581872906830, -0.580662875393458400, -0.580622167462352850, -0.580581458079691530, -0.580540747245576920, -0.580500034960110490, -0.580459321223393830, -0.580418606035528640, +-0.580377889396617270, -0.580337171306761100, -0.580296451766062040, -0.580255730774621560, -0.580215008332542030, -0.580174284439925030, -0.580133559096872250, -0.580092832303485300, +-0.580052104059866620, -0.580011374366117600, -0.579970643222340150, -0.579929910628635860, -0.579889176585107080, -0.579848441091855290, -0.579807704148982080, -0.579766965756590040, +-0.579726225914780510, -0.579685484623655430, -0.579644741883316270, -0.579603997693865610, -0.579563252055405040, -0.579522504968036260, -0.579481756431860840, -0.579441006446981490, +-0.579400255013499570, -0.579359502131516990, -0.579318747801135240, -0.579277992022457110, -0.579237234795583980, -0.579196476120617640, -0.579155715997659910, -0.579114954426813160, +-0.579074191408178950, -0.579033426941859440, -0.578992661027955880, -0.578951893666571070, -0.578911124857806490, -0.578870354601763730, -0.578829582898545470, -0.578788809748253310, +-0.578748035150989050, -0.578707259106854390, -0.578666481615951910, -0.578625702678383200, -0.578584922294250290, -0.578544140463654770, -0.578503357186699100, -0.578462572463485200, +-0.578421786294114780, -0.578380998678689530, -0.578340209617312140, -0.578299419110084310, -0.578258627157107850, -0.578217833758484460, -0.578177038914316820, -0.578136242624706640, +-0.578095444889755510, -0.578054645709566110, -0.578013845084240030, -0.577973043013879420, -0.577932239498585850, -0.577891434538462030, -0.577850628133609550, -0.577809820284130530, +-0.577769010990126670, -0.577728200251700570, -0.577687388068954030, -0.577646574441988970, -0.577605759370907080, -0.577564942855811280, -0.577524124896803050, -0.577483305493984410, +-0.577442484647457290, -0.577401662357324260, -0.577360838623687030, -0.577320013446647410, -0.577279186826308190, -0.577238358762770850, -0.577197529256137650, -0.577156698306510400, +-0.577115865913991670, -0.577075032078683270, -0.577034196800687240, -0.576993360080105380, -0.576952521917040500, -0.576911682311594290, -0.576870841263869010, -0.576829998773966120, +-0.576789154841988560, -0.576748309468038230, -0.576707462652217060, -0.576666614394626960, -0.576625764695370640, -0.576584913554549880, -0.576544060972266850, -0.576503206948623340, +-0.576462351483722050, -0.576421494577665010, -0.576380636230553800, -0.576339776442491460, -0.576298915213579570, -0.576258052543920480, -0.576217188433615800, -0.576176322882768540, +-0.576135455891480520, -0.576094587459853870, -0.576053717587990290, -0.576012846275992920, -0.575971973523963340, -0.575931099332003820, -0.575890223700216250, -0.575849346628703460, +-0.575808468117567250, -0.575767588166909980, -0.575726706776833240, -0.575685823947440170, -0.575644939678832570, -0.575604053971112250, -0.575563166824382130, -0.575522278238744130, +-0.575481388214300390, -0.575440496751152830, -0.575399603849404360, -0.575358709509156910, -0.575317813730512720, -0.575276916513573600, -0.575236017858442470, -0.575195117765221480, +-0.575154216234012530, -0.575113313264917770, -0.575072408858040010, -0.575031503013481270, -0.574990595731343810, -0.574949687011729440, -0.574908776854741290, -0.574867865260481170, +-0.574826952229051000, -0.574786037760553810, -0.574745121855091520, -0.574704204512766490, -0.574663285733680530, -0.574622365517936660, -0.574581443865637030, -0.574540520776883670, +-0.574499596251778710, -0.574458670290425080, -0.574417742892924800, -0.574376814059380130, -0.574335883789893090, -0.574294952084566710, -0.574254018943502920, -0.574213084366804070, +-0.574172148354572200, -0.574131210906910330, -0.574090272023920380, -0.574049331705704380, -0.574008389952365470, -0.573967446764005460, -0.573926502140726940, -0.573885556082631810, +-0.573844608589823110, -0.573803659662402990, -0.573762709300473570, -0.573721757504137120, -0.573680804273496660, -0.573639849608654110, -0.573598893509711940, -0.573557935976772180, +-0.573516977009937980, -0.573476016609311360, -0.573435054774994680, -0.573394091507089980, -0.573353126805700390, -0.573312160670928050, -0.573271193102875220, -0.573230224101644040, +-0.573189253667337750, -0.573148281800058280, -0.573107308499907760, -0.573066333766989340, -0.573025357601405050, -0.572984380003257350, -0.572943400972648400, -0.572902420509681320, +-0.572861438614458150, -0.572820455287081360, -0.572779470527653100, -0.572738484336276500, -0.572697496713053810, -0.572656507658087180, -0.572615517171479070, -0.572574525253332520, +-0.572533531903749560, -0.572492537122832880, -0.572451540910684400, -0.572410543267407480, -0.572369544193104150, -0.572328543687876670, -0.572287541751828170, -0.572246538385060790, +-0.572205533587677120, -0.572164527359779180, -0.572123519701470350, -0.572082510612852760, -0.572041500094028770, -0.572000488145100740, -0.571959474766171820, -0.571918459957344250, +-0.571877443718720510, -0.571836426050402750, -0.571795406952494420, -0.571754386425097460, -0.571713364468314560, -0.571672341082247960, -0.571631316267000700, -0.571590290022675250, +-0.571549262349373750, -0.571508233247199460, -0.571467202716254510, -0.571426170756641590, -0.571385137368462860, -0.571344102551821780, -0.571303066306820260, -0.571262028633561130, +-0.571220989532146620, -0.571179949002679990, -0.571138907045263490, -0.571097863659999700, -0.571056818846990890, -0.571015772606340290, -0.570974724938150380, -0.570933675842523640, +-0.570892625319562420, -0.570851573369369870, -0.570810519992048460, -0.570769465187700780, -0.570728408956428960, -0.570687351298336590, -0.570646292213525810, -0.570605231702098870, +-0.570564169764159250, -0.570523106399809300, -0.570482041609151500, -0.570440975392288220, -0.570399907749322920, -0.570358838680357750, -0.570317768185495620, -0.570276696264838680, +-0.570235622918490280, -0.570194548146552900, -0.570153471949129020, -0.570112394326321210, -0.570071315278232850, -0.570030234804966060, -0.569989152906623770, -0.569948069583308130, +-0.569906984835122810, -0.569865898662169970, -0.569824811064551960, -0.569783722042372380, -0.569742631595733460, -0.569701539724738030, -0.569660446429488320, -0.569619351710087820, +-0.569578255566638990, -0.569537157999244540, -0.569496059008006710, -0.569454958593029190, -0.569413856754414250, -0.569372753492264790, -0.569331648806682970, -0.569290542697772350, +-0.569249435165635420, -0.569208326210374980, -0.569167215832093290, -0.569126104030893920, -0.569084990806879240, -0.569043876160151840, -0.569002760090814960, -0.568961642598971310, +-0.568920523684723570, -0.568879403348174110, -0.568838281589426400, -0.568797158408583140, -0.568756033805746910, -0.568714907781020300, -0.568673780334506660, -0.568632651466308700, +-0.568591521176529000, -0.568550389465270260, -0.568509256332635830, -0.568468121778728190, -0.568426985803650360, -0.568385848407504720, -0.568344709590394740, -0.568303569352422990, +-0.568262427693692400, -0.568221284614305320, -0.568180140114365350, -0.568138994193975070, -0.568097846853236940, -0.568056698092254560, -0.568015547911130400, -0.567974396309967490, +-0.567933243288868070, -0.567892088847935960, -0.567850932987273740, -0.567809775706984100, -0.567768617007169630, -0.567727456887934020, -0.567686295349379750, -0.567645132391609740, +-0.567603968014726460, -0.567562802218833710, -0.567521635004033960, -0.567480466370430150, -0.567439296318124730, -0.567398124847221520, -0.567356951957822990, -0.567315777650031610, +-0.567274601923951180, -0.567233424779684300, -0.567192246217333880, -0.567151066237002400, -0.567109884838793650, -0.567068702022810230, -0.567027517789155060, -0.566986332137930700, +-0.566945145069240870, -0.566903956583188150, -0.566862766679875560, -0.566821575359405690, -0.566780382621882240, -0.566739188467407900, -0.566697992896085580, -0.566656795908017760, +-0.566615597503308480, -0.566574397682060190, -0.566533196444375500, -0.566491993790358190, -0.566450789720110870, -0.566409584233736550, -0.566368377331337940, -0.566327169013018830, +-0.566285959278881700, -0.566244748129029700, -0.566203535563565510, -0.566162321582592830, -0.566121106186214250, -0.566079889374533020, -0.566038671147651610, -0.565997451505673930, +-0.565956230448702690, -0.565915007976840800, -0.565873784090191070, -0.565832558788857190, -0.565791332072941970, -0.565750103942547990, -0.565708874397779170, -0.565667643438738100, +-0.565626411065527910, -0.565585177278251420, -0.565543942077012310, -0.565502705461913390, -0.565461467433057590, -0.565420227990547920, -0.565378987134487860, -0.565337744864980450, +-0.565296501182128710, -0.565255256086035330, -0.565214009576804120, -0.565172761654537890, -0.565131512319339780, -0.565090261571312480, -0.565049009410559910, -0.565007755837184880, +-0.564966500851290410, -0.564925244452979310, -0.564883986642355510, -0.564842727419521680, -0.564801466784580760, -0.564760204737636550, -0.564718941278791740, -0.564677676408149590, +-0.564636410125812890, -0.564595142431885580, -0.564553873326470330, -0.564512602809670420, -0.564471330881588630, -0.564430057542328890, -0.564388782791994110, -0.564347506630687220, +-0.564306229058511240, -0.564264950075570090, -0.564223669681966580, -0.564182387877803840, -0.564141104663184790, -0.564099820038213350, -0.564058534002992330, -0.564017246557624640, +-0.563975957702214200, -0.563934667436863930, -0.563893375761676860, -0.563852082676756130, -0.563810788182205420, -0.563769492278127780, -0.563728194964626450, -0.563686896241804240, +-0.563645596109765170, -0.563604294568612050, -0.563562991618448250, -0.563521687259376680, -0.563480381491501150, -0.563439074314924680, -0.563397765729750530, -0.563356455736081620, +-0.563315144334021860, -0.563273831523674380, -0.563232517305141790, -0.563191201678528430, -0.563149884643937000, -0.563108566201470870, -0.563067246351232950, -0.563025925093327270, +-0.562984602427856750, -0.562943278354924750, -0.562901952874634180, -0.562860625987089190, -0.562819297692392470, -0.562777967990647610, -0.562736636881957520, -0.562695304366426120, +-0.562653970444156440, -0.562612635115251840, -0.562571298379815340, -0.562529960237950880, -0.562488620689761580, -0.562447279735350690, -0.562405937374821360, -0.562364593608277400, +-0.562323248435822040, -0.562281901857558110, -0.562240553873589840, -0.562199204484020280, -0.562157853688952550, -0.562116501488489910, -0.562075147882736380, -0.562033792871795000, +-0.561992436455769130, -0.561951078634761680, -0.561909719408877020, -0.561868358778218060, -0.561826996742888160, -0.561785633302990470, -0.561744268458629010, -0.561702902209906820, +-0.561661534556927470, -0.561620165499793880, -0.561578795038610300, -0.561537423173479660, -0.561496049904505080, -0.561454675231790820, -0.561413299155439800, -0.561371921675555610, +-0.561330542792241150, -0.561289162505600790, -0.561247780815737450, -0.561206397722754710, -0.561165013226755600, -0.561123627327844380, -0.561082240026124060, -0.561040851321698120, +-0.560999461214669590, -0.560958069705142950, -0.560916676793220990, -0.560875282479007420, -0.560833886762605260, -0.560792489644118760, -0.560751091123650960, -0.560709691201305200, +-0.560668289877185530, -0.560626887151395080, -0.560585483024037430, -0.560544077495215730, -0.560502670565034220, -0.560461262233595940, -0.560419852501004570, -0.560378441367363260, +-0.560337028832776140, -0.560295614897346470, -0.560254199561177720, -0.560212782824373150, -0.560171364687036990, -0.560129945149272390, -0.560088524211182940, -0.560047101872871880, +-0.560005678134443350, -0.559964252996000610, -0.559922826457647020, -0.559881398519486590, -0.559839969181622710, -0.559798538444158830, -0.559757106307198330, -0.559715672770845440, +-0.559674237835203310, -0.559632801500375530, -0.559591363766465570, -0.559549924633577440, -0.559508484101814420, -0.559467042171280290, -0.559425598842078210, -0.559384154114312530, +-0.559342707988086390, -0.559301260463503480, -0.559259811540667060, -0.559218361219681490, -0.559176909500650020, -0.559135456383676230, -0.559094001868863490, -0.559052545956316150, +-0.559011088646137360, -0.558969629938430470, -0.558928169833299960, -0.558886708330848970, -0.558845245431181190, -0.558803781134399990, -0.558762315440609610, -0.558720848349913530, +-0.558679379862415340, -0.558637909978218270, -0.558596438697426810, -0.558554966020144320, -0.558513491946474370, -0.558472016476520230, -0.558430539610386580, -0.558389061348176450, +-0.558347581689993770, -0.558306100635941660, -0.558264618186124720, -0.558223134340646300, -0.558181649099609540, -0.558140162463119150, -0.558098674431278250, -0.558057185004190770, +-0.558015694181959840, -0.557974201964690160, -0.557932708352484990, -0.557891213345447890, -0.557849716943682570, -0.557808219147293170, -0.557766719956383270, -0.557725219371056680, +-0.557683717391416530, -0.557642214017567530, -0.557600709249613020, -0.557559203087656610, -0.557517695531801970, -0.557476186582153370, -0.557434676238814380, -0.557393164501888250, +-0.557351651371479570, -0.557310136847691820, -0.557268620930628680, -0.557227103620393740, -0.557185584917091250, -0.557144064820824900, -0.557102543331698400, -0.557061020449815090, +-0.557019496175279680, -0.556977970508195420, -0.556936443448666330, -0.556894914996795660, -0.556853385152688230, -0.556811853916447270, -0.556770321288176610, -0.556728787267979810, +-0.556687251855961460, -0.556645715052224930, -0.556604176856874130, -0.556562637270012540, -0.556521096291744730, -0.556479553922174070, -0.556438010161404260, -0.556396465009539760, +-0.556354918466684170, -0.556313370532941280, -0.556271821208414450, -0.556230270493208610, -0.556188718387427010, -0.556147164891173550, -0.556105610004551940, -0.556064053727666540, +-0.556022496060621150, -0.555980937003519360, -0.555939376556464970, -0.555897814719562570, -0.555856251492915510, -0.555814686876627830, -0.555773120870803110, -0.555731553475545930, +-0.555689984690959870, -0.555648414517148530, -0.555606842954216470, -0.555565270002267300, -0.555523695661404910, -0.555482119931733020, -0.555440542813356200, -0.555398964306377920, +-0.555357384410902320, -0.555315803127032770, -0.555274220454874180, -0.555232636394530020, -0.555191050946104330, -0.555149464109700560, -0.555107875885423540, -0.555066286273376840, +-0.555024695273664380, -0.554983102886389860, -0.554941509111657850, -0.554899913949572170, -0.554858317400236280, -0.554816719463754990, -0.554775120140231890, -0.554733519429771120, +-0.554691917332476030, -0.554650313848451540, -0.554608708977801230, -0.554567102720629260, -0.554525495077039080, -0.554483886047135610, -0.554442275631022330, -0.554400663828803380, +-0.554359050640582440, -0.554317436066464220, -0.554275820106552410, -0.554234202760951030, -0.554192584029763790, -0.554150963913095480, -0.554109342411049810, -0.554067719523730350, +-0.554026095251241910, -0.553984469593688300, -0.553942842551173540, -0.553901214123801220, -0.553859584311676370, -0.553817953114902450, -0.553776320533583610, -0.553734686567823650, +-0.553693051217727380, -0.553651414483398500, -0.553609776364941020, -0.553568136862458760, -0.553526495976056520, -0.553484853705838000, -0.553443210051907440, -0.553401565014368440, +-0.553359918593325780, -0.553318270788883520, -0.553276621601145440, -0.553234971030215460, -0.553193319076198510, -0.553151665739198160, -0.553110011019318340, -0.553068354916663840, +-0.553026697431338480, -0.552985038563446380, -0.552943378313091260, -0.552901716680378130, -0.552860053665410580, -0.552818389268293080, -0.552776723489129100, -0.552735056328023780, +-0.552693387785080700, -0.552651717860404230, -0.552610046554098070, -0.552568373866267230, -0.552526699797015410, -0.552485024346446750, -0.552443347514665280, -0.552401669301775810, +-0.552359989707882140, -0.552318308733088070, -0.552276626377498640, -0.552234942641217640, -0.552193257524349330, -0.552151571026997410, -0.552109883149267010, -0.552068193891261830, +-0.552026503253086220, -0.551984811234844000, -0.551943117836640180, -0.551901423058578480, -0.551859726900763240, -0.551818029363298270, -0.551776330446288600, -0.551734630149838150, +-0.551692928474051160, -0.551651225419031330, -0.551609520984883920, -0.551567815171712720, -0.551526107979621650, -0.551484399408715520, -0.551442689459098580, -0.551400978130874740, +-0.551359265424148260, -0.551317551339023830, -0.551275835875605580, -0.551234119033997770, -0.551192400814304320, -0.551150681216630130, -0.551108960241079360, -0.551067237887756130, +-0.551025514156764370, -0.550983789048209330, -0.550942062562194690, -0.550900334698824930, -0.550858605458203980, -0.550816874840436950, -0.550775142845627670, -0.550733409473880500, +-0.550691674725299450, -0.550649938599989670, -0.550608201098054970, -0.550566462219599370, -0.550524721964728010, -0.550482980333544920, -0.550441237326154240, -0.550399492942660220, +-0.550357747183167770, -0.550316000047781030, -0.550274251536604250, -0.550232501649741360, -0.550190750387297700, -0.550148997749377200, -0.550107243736084110, -0.550065488347522560, +-0.550023731583797690, -0.549981973445013540, -0.549940213931274350, -0.549898453042684370, -0.549856690779348510, -0.549814927141371030, -0.549773162128855740, -0.549731395741907990, +-0.549689627980631810, -0.549647858845131450, -0.549606088335511170, -0.549564316451875980, -0.549522543194330030, -0.549480768562977670, -0.549438992557923060, -0.549397215179271310, +-0.549355436427126590, -0.549313656301593120, -0.549271874802775280, -0.549230091930778100, -0.549188307685705700, -0.549146522067662460, -0.549104735076752610, -0.549062946713081310, +-0.549021156976752580, -0.548979365867870660, -0.548937573386540700, -0.548895779532866720, -0.548853984306953310, -0.548812187708904610, -0.548770389738825860, -0.548728590396820980, +-0.548686789682994780, -0.548644987597451170, -0.548603184140295410, -0.548561379311631850, -0.548519573111564630, -0.548477765540198230, -0.548435956597637770, -0.548394146283987420, +-0.548352334599351730, -0.548310521543834860, -0.548268707117541940, -0.548226891320577340, -0.548185074153045070, -0.548143255615050620, -0.548101435706697890, -0.548059614428091590, +-0.548017791779335960, -0.547975967760536140, -0.547934142371796500, -0.547892315613221380, -0.547850487484915270, -0.547808657986983190, -0.547766827119529510, -0.547724994882658690, +-0.547683161276475090, -0.547641326301083860, -0.547599489956589470, -0.547557652243096270, -0.547515813160708520, -0.547473972709531690, -0.547432130889669800, -0.547390287701227770, +-0.547348443144309530, -0.547306597219020530, -0.547264749925465140, -0.547222901263747400, -0.547181051233972870, -0.547139199836245700, -0.547097347070670480, -0.547055492937351560, +-0.547013637436394200, -0.546971780567902850, -0.546929922331982010, -0.546888062728736020, -0.546846201758270150, -0.546804339420688850, -0.546762475716096710, -0.546720610644597980, +-0.546678744206298140, -0.546636876401301430, -0.546595007229712440, -0.546553136691635630, -0.546511264787176380, -0.546469391516438920, -0.546427516879527620, -0.546385640876547950, +-0.546343763507604050, -0.546301884772800840, -0.546260004672242560, -0.546218123206034580, -0.546176240374281360, -0.546134356177087500, -0.546092470614557350, -0.546050583686796490, +-0.546008695393909060, -0.545966805735999980, -0.545924914713173500, -0.545883022325535090, -0.545841128573189120, -0.545799233456240260, -0.545757336974793010, -0.545715439128952820, +-0.545673539918823950, -0.545631639344510980, -0.545589737406119160, -0.545547834103753070, -0.545505929437517410, -0.545464023407516540, -0.545422116013855930, -0.545380207256640050, +-0.545338297135973700, -0.545296385651961150, -0.545254472804708070, -0.545212558594318830, -0.545170643020898130, -0.545128726084550430, -0.545086807785381430, -0.545044888123495270, +-0.545002967098996980, -0.544961044711990810, -0.544919120962582440, -0.544877195850876350, -0.544835269376977130, -0.544793341540989460, -0.544751412343018830, -0.544709481783169580, +-0.544667549861546310, -0.544625616578254480, -0.544583681933398680, -0.544541745927083600, -0.544499808559413930, -0.544457869830494930, -0.544415929740431400, -0.544373988289327930, +-0.544332045477289190, -0.544290101304420680, -0.544248155770826970, -0.544206208876612750, -0.544164260621882720, -0.544122311006742470, -0.544080360031296340, -0.544038407695649370, +-0.543996453999906040, -0.543954498944171800, -0.543912542528551480, -0.543870584753149310, -0.543828625618071100, -0.543786665123421330, -0.543744703269304910, -0.543702740055826310, +-0.543660775483091330, -0.543618809551204340, -0.543576842260270250, -0.543534873610393770, -0.543492903601680570, -0.543450932234235020, -0.543408959508162040, -0.543366985423566430, +-0.543325009980553660, -0.543283033179228440, -0.543241055019695550, -0.543199075502059700, -0.543157094626426470, -0.543115112392900560, -0.543073128801586540, -0.543031143852589990, +-0.542989157546015620, -0.542947169881968340, -0.542905180860552840, -0.542863190481874590, -0.542821198746038510, -0.542779205653149410, -0.542737211203311860, -0.542695215396631790, +-0.542653218233213550, -0.542611219713162280, -0.542569219836582570, -0.542527218603580330, -0.542485216014259920, -0.542443212068726480, -0.542401206767084590, -0.542359200109440160, +-0.542317192095897680, -0.542275182726561830, -0.542233172001538420, -0.542191159920932140, -0.542149146484847800, -0.542107131693390420, -0.542065115546665480, -0.542023098044777660, +-0.541981079187832230, -0.541939058975933750, -0.541897037409187930, -0.541855014487699460, -0.541812990211573590, -0.541770964580914780, -0.541728937595828960, -0.541686909256420710, +-0.541644879562795280, -0.541602848515057240, -0.541560816113312530, -0.541518782357665710, -0.541476747248221920, -0.541434710785085980, -0.541392672968363580, -0.541350633798159400, +-0.541308593274578360, -0.541266551397726280, -0.541224508167707730, -0.541182463584627960, -0.541140417648591550, -0.541098370359704540, -0.541056321718071610, -0.541014271723797900, +-0.540972220376988110, -0.540930167677748150, -0.540888113626182720, -0.540846058222397060, -0.540804001466495880, -0.540761943358585070, -0.540719883898769460, -0.540677823087154060, +-0.540635760923843690, -0.540593697408944360, -0.540551632542560780, -0.540509566324797740, -0.540467498755761170, -0.540425429835555860, -0.540383359564286960, -0.540341287942059270, +-0.540299214968978700, -0.540257140645150180, -0.540215064970678730, -0.540172987945669260, -0.540130909570227800, -0.540088829844458940, -0.540046748768468030, -0.540004666342359880, +-0.539962582566240520, -0.539920497440214640, -0.539878410964387490, -0.539836323138863980, -0.539794233963749930, -0.539752143439150460, -0.539710051565170160, -0.539667958341915170, +-0.539625863769490180, -0.539583767848000550, -0.539541670577551200, -0.539499571958248050, -0.539457471990195890, -0.539415370673500090, -0.539373268008265570, -0.539331163994598130, +-0.539289058632602790, -0.539246951922384920, -0.539204843864049210, -0.539162734457701800, -0.539120623703447490, -0.539078511601391640, -0.539036398151639170, -0.538994283354296110, +-0.538952167209467260, -0.538910049717258090, -0.538867930877773290, -0.538825810691119120, -0.538783689157400380, -0.538741566276722090, -0.538699442049190290, -0.538657316474909780, +-0.538615189553986130, -0.538573061286524050, -0.538530931672629660, -0.538488800712407900, -0.538446668405964220, -0.538404534753403440, -0.538362399754831800, -0.538320263410354110, +-0.538278125720075720, -0.538235986684101660, -0.538193846302537970, -0.538151704575489780, -0.538109561503062220, -0.538067417085360430, -0.538025271322490450, -0.537983124214557300, +-0.537940975761666000, -0.537898825963922580, -0.537856674821432180, -0.537814522334300050, -0.537772368502631220, -0.537730213326531810, -0.537688056806106870, -0.537645898941461860, +-0.537603739732701700, -0.537561579179932520, -0.537519417283259470, -0.537477254042787900, -0.537435089458622730, -0.537392923530870200, -0.537350756259635460, -0.537308587645023760, +-0.537266417687140230, -0.537224246386091010, -0.537182073741981240, -0.537139899754915830, -0.537097724425001030, -0.537055547752341990, -0.537013369737044060, -0.536971190379212370, +-0.536929009678952960, -0.536886827636371190, -0.536844644251572190, -0.536802459524661320, -0.536760273455744620, -0.536718086044927320, -0.536675897292314690, -0.536633707198011960, +-0.536591515762125380, -0.536549322984759990, -0.536507128866021370, -0.536464933406014420, -0.536422736604845630, -0.536380538462619900, -0.536338338979442500, -0.536296138155419650, +-0.536253935990656410, -0.536211732485258330, -0.536169527639330570, -0.536127321452979370, -0.536085113926309860, -0.536042905059427640, -0.536000694852437620, -0.535958483305446380, +-0.535916270418558830, -0.535874056191880670, -0.535831840625516920, -0.535789623719574060, -0.535747405474157110, -0.535705185889371550, -0.535662964965322730, -0.535620742702116900, +-0.535578519099859100, -0.535536294158655110, -0.535494067878609980, -0.535451840259830060, -0.535409611302420490, -0.535367381006486620, -0.535325149372134600, -0.535282916399469680, +-0.535240682088597540, -0.535198446439623220, -0.535156209452653300, -0.535113971127792690, -0.535071731465147300, -0.535029490464822180, -0.534987248126923660, -0.534945004451557020, +-0.534902759438827920, -0.534860513088841530, -0.534818265401704180, -0.534776016377521150, -0.534733766016398220, -0.534691514318440420, -0.534649261283754120, -0.534607006912444780, +-0.534564751204617550, -0.534522494160378780, -0.534480235779833720, -0.534437976063088180, -0.534395715010247300, -0.534353452621417420, -0.534311188896704040, -0.534268923836212610, +-0.534226657440048490, -0.534184389708318160, -0.534142120641126760, -0.534099850238580090, -0.534057578500783500, -0.534015305427843260, -0.533973031019864820, -0.533930755276953770, +-0.533888478199215370, -0.533846199786756290, -0.533803920039681580, -0.533761638958096810, -0.533719356542108230, -0.533677072791821310, -0.533634787707341740, -0.533592501288774780, +-0.533550213536226890, -0.533507924449803550, -0.533465634029610340, -0.533423342275752720, -0.533381049188337180, -0.533338754767468840, -0.533296459013253730, -0.533254161925797110, +-0.533211863505205440, -0.533169563751584090, -0.533127262665038850, -0.533084960245675090, -0.533042656493599280, -0.533000351408916770, -0.532958044991733490, -0.532915737242154690, +-0.532873428160286930, -0.532831117746235590, -0.532788806000106030, -0.532746492922004930, -0.532704178512037550, -0.532661862770309690, -0.532619545696926820, -0.532577227291995410, +-0.532534907555621050, -0.532492586487909310, -0.532450264088965790, -0.532407940358897050, -0.532365615297808350, -0.532323288905805600, -0.532280961182994280, -0.532238632129480970, +-0.532196301745371030, -0.532153970030770360, -0.532111636985784450, -0.532069302610519770, -0.532026966905081890, -0.531984629869576060, -0.531942291504109210, -0.531899951808786460, +-0.531857610783713960, -0.531815268428997070, -0.531772924744742360, -0.531730579731055310, -0.531688233388041720, -0.531645885715807290, -0.531603536714458480, -0.531561186384100880, +-0.531518834724840290, -0.531476481736782190, -0.531434127420033380, -0.531391771774699100, -0.531349414800885490, -0.531307056498697920, -0.531264696868243070, -0.531222335909626530, +-0.531179973622953770, -0.531137610008331480, -0.531095245065865140, -0.531052878795660650, -0.531010511197823610, -0.530968142272460700, -0.530925772019677390, -0.530883400439579600, +-0.530841027532273020, -0.530798653297864240, -0.530756277736458840, -0.530713900848162720, -0.530671522633081480, -0.530629143091321810, -0.530586762222989170, -0.530544380028189820, +-0.530501996507029010, -0.530459611659613640, -0.530417225486049190, -0.530374837986441360, -0.530332449160896720, -0.530290059009521090, -0.530247667532420250, -0.530205274729699920, +-0.530162880601466660, -0.530120485147826280, -0.530078088368884700, -0.530035690264747390, -0.529993290835521380, -0.529950890081312130, -0.529908488002225560, -0.529866084598367480, +-0.529823679869844580, -0.529781273816762430, -0.529738866439227070, -0.529696457737344200, -0.529654047711220600, -0.529611636360961870, -0.529569223686674030, -0.529526809688462770, +-0.529484394366434800, -0.529441977720695900, -0.529399559751351670, -0.529357140458508900, -0.529314719842273300, -0.529272297902750880, -0.529229874640047340, -0.529187450054269480, +-0.529145024145523110, -0.529102596913914040, -0.529060168359548170, -0.529017738482532200, -0.528975307282971930, -0.528932874760973390, -0.528890440916642280, -0.528848005750085500, +-0.528805569261408650, -0.528763131450717850, -0.528720692318118910, -0.528678251863718530, -0.528635810087622620, -0.528593366989936750, -0.528550922570767860, -0.528508476830221620, +-0.528466029768404180, -0.528423581385421340, -0.528381131681379900, -0.528338680656385670, -0.528296228310544680, -0.528253774643962840, -0.528211319656746840, -0.528168863349002590, +-0.528126405720836130, -0.528083946772353370, -0.528041486503661010, -0.527999024914865060, -0.527956562006071440, -0.527914097777386070, -0.527871632228915870, -0.527829165360766520, +-0.527786697173043940, -0.527744227665854940, -0.527701756839305420, -0.527659284693501540, -0.527616811228548980, -0.527574336444554870, -0.527531860341624800, -0.527489382919865140, +-0.527446904179381670, -0.527404424120281320, -0.527361942742669900, -0.527319460046653530, -0.527276976032338250, -0.527234490699830860, -0.527192004049237270, -0.527149516080663630, +-0.527107026794215840, -0.527064536190000930, -0.527022044268124600, -0.526979551028693200, -0.526937056471812440, -0.526894560597589550, -0.526852063406130220, -0.526809564897540270, +-0.526767065071926940, -0.526724563929395820, -0.526682061470053360, -0.526639557694005280, -0.526597052601358810, -0.526554546192219640, -0.526512038466694140, -0.526469529424888120, +-0.526427019066908700, -0.526384507392861690, -0.526341994402853340, -0.526299480096989790, -0.526256964475377840, -0.526214447538123410, -0.526171929285332960, -0.526129409717112310, +-0.526086888833568470, -0.526044366634807470, -0.526001843120935120, -0.525959318292058550, -0.525916792148283680, -0.525874264689716760, -0.525831735916463930, -0.525789205828632090, +-0.525746674426327170, -0.525704141709655630, -0.525661607678723390, -0.525619072333637470, -0.525576535674503910, -0.525533997701428950, -0.525491458414518610, -0.525448917813880030, +-0.525406375899619140, -0.525363832671842280, -0.525321288130655590, -0.525278742276165890, -0.525236195108479410, -0.525193646627702180, -0.525151096833941010, -0.525108545727302260, +-0.525065993307892050, -0.525023439575816540, -0.524980884531182750, -0.524938328174096800, -0.524895770504664960, -0.524853211522993360, -0.524810651229189130, -0.524768089623358300, +-0.524725526705607130, -0.524682962476041850, -0.524640396934769600, -0.524597830081896200, -0.524555261917528330, -0.524512692441771900, -0.524470121654734170, -0.524427549556521040, +-0.524384976147238780, -0.524342401426994400, -0.524299825395893930, -0.524257248054044060, -0.524214669401550590, -0.524172089438520780, -0.524129508165060880, -0.524086925581277120, +-0.524044341687275650, -0.524001756483163720, -0.523959169969047460, -0.523916582145033230, -0.523873993011227170, -0.523831402567736410, -0.523788810814667330, -0.523746217752126150, +-0.523703623380219030, -0.523661027699053210, -0.523618430708734820, -0.523575832409370330, -0.523533232801066010, -0.523490631883928860, -0.523448029658065140, -0.523405426123580990, +-0.523362821280583650, -0.523320215129179370, -0.523277607669474400, -0.523234998901575100, -0.523192388825588610, -0.523149777441621280, -0.523107164749779360, -0.523064550750169220, +-0.523021935442898100, -0.522979318828072140, -0.522936700905797910, -0.522894081676181450, -0.522851461139330230, -0.522808839295350380, -0.522766216144348370, -0.522723591686430460, +-0.522680965921703990, -0.522638338850275110, -0.522595710472249950, -0.522553080787735880, -0.522510449796839140, -0.522467817499666310, -0.522425183896323530, -0.522382548986918160, +-0.522339912771556450, -0.522297275250344860, -0.522254636423389870, -0.522211996290798510, -0.522169354852677240, -0.522126712109132530, -0.522084068060270750, -0.522041422706199130, +-0.521998776047023940, -0.521956128082851860, -0.521913478813789020, -0.521870828239942910, -0.521828176361419650, -0.521785523178325610, -0.521742868690768140, -0.521700212898853600, +-0.521657555802688360, -0.521614897402378990, -0.521572237698032740, -0.521529576689755750, -0.521486914377654930, -0.521444250761836540, -0.521401585842407700, -0.521358919619475000, +-0.521316252093145030, -0.521273583263524020, -0.521230913130719450, -0.521188241694837570, -0.521145568955985070, -0.521102894914268310, -0.521060219569794650, -0.521017542922670550, +-0.520974864973002490, -0.520932185720896830, -0.520889505166461260, -0.520846823309801810, -0.520804140151024940, -0.520761455690238020, -0.520718769927547620, -0.520676082863060220, +-0.520633394496882170, -0.520590704829121180, -0.520548013859883250, -0.520505321589275430, -0.520462628017403840, -0.520419933144376070, -0.520377236970298470, -0.520334539495277750, +-0.520291840719420360, -0.520249140642833670, -0.520206439265624150, -0.520163736587898610, -0.520121032609763280, -0.520078327331325860, -0.520035620752692500, -0.519992912873969760, +-0.519950203695265010, -0.519907493216684950, -0.519864781438336030, -0.519822068360324740, -0.519779353982758760, -0.519736638305744350, -0.519693921329388300, -0.519651203053797080, +-0.519608483479078290, -0.519565762605338270, -0.519523040432683820, -0.519480316961221430, -0.519437592191058560, -0.519394866122301790, -0.519352138755057810, -0.519309410089433100, +-0.519266680125535230, -0.519223948863470790, -0.519181216303345900, -0.519138482445268500, -0.519095747289344820, -0.519053010835681780, -0.519010273084385850, -0.518967534035564610, +-0.518924793689324540, -0.518882052045772530, -0.518839309105014970, -0.518796564867159530, -0.518753819332312570, -0.518711072500581240, -0.518668324372071670, -0.518625574946891770, +-0.518582824225148010, -0.518540072206947090, -0.518497318892395590, -0.518454564281601190, -0.518411808374670380, -0.518369051171710060, -0.518326292672826710, -0.518283532878128120, +-0.518240771787720540, -0.518198009401710790, -0.518155245720206330, -0.518112480743313730, -0.518069714471139920, -0.518026946903791470, -0.517984178041376090, -0.517941407884000230, +-0.517898636431770810, -0.517855863684794420, -0.517813089643178850, -0.517770314307030470, -0.517727537676456300, -0.517684759751562920, -0.517641980532458020, -0.517599200019248200, +-0.517556418212040350, -0.517513635110941060, -0.517470850716058140, -0.517428065027498050, -0.517385278045367380, -0.517342489769773930, -0.517299700200824160, -0.517256909338625230, +-0.517214117183283690, -0.517171323734907150, -0.517128528993602400, -0.517085732959476240, -0.517042935632635370, -0.517000137013187590, -0.516957337101239480, -0.516914535896897950, +-0.516871733400269710, -0.516828929611462540, -0.516786124530583150, -0.516743318157738330, -0.516700510493034780, -0.516657701536580420, -0.516614891288481810, -0.516572079748845560, +-0.516529266917779560, -0.516486452795390290, -0.516443637381785000, -0.516400820677070160, -0.516358002681353680, -0.516315183394742140, -0.516272362817342790, -0.516229540949261990, +-0.516186717790607760, -0.516143893341486800, -0.516101067602006030, -0.516058240572272230, -0.516015412252393220, -0.515972582642475700, -0.515929751742626670, -0.515886919552952960, +-0.515844086073562250, -0.515801251304561340, -0.515758415246056920, -0.515715577898156920, -0.515672739260967910, -0.515629899334597020, -0.515587058119151060, -0.515544215614737840, +-0.515501371821464050, -0.515458526739436820, -0.515415680368762950, -0.515372832709550250, -0.515329983761905420, -0.515287133525935580, -0.515244282001747660, -0.515201429189449330, +-0.515158575089147420, -0.515115719700949160, -0.515072863024961140, -0.515030005061291370, -0.514987145810046560, -0.514944285271333960, -0.514901423445260240, -0.514858560331933330, +-0.514815695931459930, -0.514772830243947040, -0.514729963269502380, -0.514687095008232840, -0.514644225460245570, -0.514601354625647380, -0.514558482504546060, -0.514515609097048630, +-0.514472734403262240, -0.514429858423293580, -0.514386981157250570, -0.514344102605240220, -0.514301222767369560, -0.514258341643745400, -0.514215459234475870, -0.514172575539667660, +-0.514129690559428030, -0.514086804293863770, -0.514043916743082920, -0.514001027907192260, -0.513958137786298620, -0.513915246380510000, -0.513872353689933340, -0.513829459714675750, +-0.513786564454844050, -0.513743667910546490, -0.513700770081889630, -0.513657870968980860, -0.513614970571927070, -0.513572068890836290, -0.513529165925815210, -0.513486261676971310, +-0.513443356144411280, -0.513400449328243360, -0.513357541228574240, -0.513314631845511290, -0.513271721179161420, -0.513228809229632540, -0.513185895997031680, -0.513142981481465750, +-0.513100065683042670, -0.513057148601869460, -0.513014230238053370, -0.512971310591701310, -0.512928389662921420, -0.512885467451820510, -0.512842543958505930, -0.512799619183084590, +-0.512756693125664630, -0.512713765786352860, -0.512670837165256740, -0.512627907262483080, -0.512584976078140130, -0.512542043612334690, -0.512499109865174220, -0.512456174836765420, +-0.512413238527216760, -0.512370300936634830, -0.512327362065127300, -0.512284421912800880, -0.512241480479763810, -0.512198537766123010, -0.512155593771985610, -0.512112648497459520, +-0.512069701942651780, -0.512026754107669850, -0.511983804992620530, -0.511940854597612180, -0.511897902922751720, -0.511854949968146400, -0.511811995733903460, -0.511769040220130810, +-0.511726083426935600, -0.511683125354425170, -0.511640166002706560, -0.511597205371887910, -0.511554243462076230, -0.511511280273378890, -0.511468315805903020, -0.511425350059756760, +-0.511382383035047130, -0.511339414731881160, -0.511296445150366980, -0.511253474290611740, -0.511210502152722900, -0.511167528736807260, -0.511124554042973300, -0.511081578071327920, +-0.511038600821978490, -0.510995622295032260, -0.510952642490597460, -0.510909661408780910, -0.510866679049690300, -0.510823695413432530, -0.510780710500115980, -0.510737724309847540, +-0.510694736842734920, -0.510651748098885030, -0.510608758078406110, -0.510565766781405310, -0.510522774207989750, -0.510479780358267580, -0.510436785232345920, -0.510393788830332480, +-0.510350791152334060, -0.510307792198459010, -0.510264791968814580, -0.510221790463508130, -0.510178787682646790, -0.510135783626338820, -0.510092778294691460, -0.510049771687812180, +-0.510006763805808010, -0.509963754648787400, -0.509920744216857400, -0.509877732510125470, -0.509834719528698850, -0.509791705272685800, -0.509748689742193560, -0.509705672937329160, +-0.509662654858200950, -0.509619635504916180, -0.509576614877582210, -0.509533592976306400, -0.509490569801197000, -0.509447545352361030, -0.509404519629906400, -0.509361492633939930, +-0.509318464364570180, -0.509275434821904290, -0.509232404006049740, -0.509189371917113890, -0.509146338555204970, -0.509103303920430130, -0.509060268012897050, -0.509017230832713000, +-0.508974192379986200, -0.508931152654823920, -0.508888111657333830, -0.508845069387622970, -0.508802025845799810, -0.508758981031971700, -0.508715934946245670, -0.508672887588730190, +-0.508629838959532510, -0.508586789058760200, -0.508543737886520630, -0.508500685442922040, -0.508457631728071680, -0.508414576742077350, -0.508371520485046080, -0.508328462957086450, +-0.508285404158305700, -0.508242344088811420, -0.508199282748710850, -0.508156220138112460, -0.508113156257123610, -0.508070091105851770, -0.508027024684404420, -0.507983956992889780, +-0.507940888031415240, -0.507897817800088250, -0.507854746299016950, -0.507811673528308800, -0.507768599488071510, -0.507725524178412320, -0.507682447599439700, -0.507639369751261000, +-0.507596290633983930, -0.507553210247715600, -0.507510128592564720, -0.507467045668638540, -0.507423961476044630, -0.507380876014890570, -0.507337789285284610, -0.507294701287334230, +-0.507251612021146990, -0.507208521486830490, -0.507165429684492960, -0.507122336614241890, -0.507079242276184620, -0.507036146670429620, -0.506993049797084260, -0.506949951656256230, +-0.506906852248052990, -0.506863751572583010, -0.506820649629953550, -0.506777546420272620, -0.506734441943647360, -0.506691336200186360, -0.506648229189996970, -0.506605120913187100, +-0.506562011369864010, -0.506518900560136260, -0.506475788484111340, -0.506432675141896940, -0.506389560533600400, -0.506346444659330320, -0.506303327519194160, -0.506260209113299720, +-0.506217089441754360, -0.506173968504666670, -0.506130846302144000, -0.506087722834293820, -0.506044598101224820, -0.506001472103044250, -0.505958344839860020, -0.505915216311779600, +-0.505872086518911470, -0.505828955461363080, -0.505785823139242360, -0.505742689552656670, -0.505699554701714680, -0.505656418586523770, -0.505613281207191730, -0.505570142563826260, +-0.505527002656535720, -0.505483861485427680, -0.505440719050610050, -0.505397575352190210, -0.505354430390276830, -0.505311284164977280, -0.505268136676399250, -0.505224987924651200, +-0.505181837909840730, -0.505138686632075620, -0.505095534091463460, -0.505052380288112720, -0.505009225222131210, -0.504966068893626500, -0.504922911302706280, -0.504879752449479140, +-0.504836592334052650, -0.504793430956534730, -0.504750268317032740, -0.504707104415655580, -0.504663939252510630, -0.504620772827705790, -0.504577605141348640, -0.504534436193547870, +-0.504491265984410960, -0.504448094514045600, -0.504404921782560360, -0.504361747790062710, -0.504318572536660790, -0.504275396022462070, -0.504232218247575140, -0.504189039212107780, +-0.504145858916167810, -0.504102677359862690, -0.504059494543301460, -0.504016310466591340, -0.503973125129840490, -0.503929938533156370, -0.503886750676647900, -0.503843561560422540, +-0.503800371184588200, -0.503757179549252590, -0.503713986654524490, -0.503670792500511280, -0.503627597087320860, -0.503584400415061690, -0.503541202483841600, -0.503498003293768480, +-0.503454802844950030, -0.503411601137494840, -0.503368398171510690, -0.503325193947105620, -0.503281988464387100, -0.503238781723464030, -0.503195573724444010, -0.503152364467435050, +-0.503109153952544740, -0.503065942179881990, -0.503022729149554370, -0.502979514861669920, -0.502936299316336320, -0.502893082513662270, -0.502849864453755680, -0.502806645136724240, +-0.502763424562675980, -0.502720202731719470, -0.502676979643962410, -0.502633755299512490, -0.502590529698478730, -0.502547302840968490, -0.502504074727090020, -0.502460845356951010, +-0.502417614730660270, -0.502374382848325470, -0.502331149710054770, -0.502287915315955740, -0.502244679666137390, -0.502201442760707330, -0.502158204599773560, -0.502114965183444010, +-0.502071724511827360, -0.502028482585031410, -0.501985239403164310, -0.501941994966333630, -0.501898749274648390, -0.501855502328216300, -0.501812254127145030, -0.501769004671543510, +-0.501725753961519530, -0.501682501997181120, -0.501639248778636080, -0.501595994305993330, -0.501552738579360560, -0.501509481598846010, -0.501466223364557260, -0.501422963876603460, +-0.501379703135092170, -0.501336441140131650, -0.501293177891829590, -0.501249913390295010, -0.501206647635635720, -0.501163380627959730, -0.501120112367374970, -0.501076842853990230, +-0.501033572087913440, -0.500990300069252270, -0.500947026798115760, -0.500903752274611700, -0.500860476498848240, -0.500817199470933280, -0.500773921190975630, -0.500730641659083210, +-0.500687360875364140, -0.500644078839926340, -0.500600795552878620, -0.500557511014328990, -0.500514225224385600, -0.500470938183156240, -0.500427649890749950, -0.500384360347274510, +-0.500341069552838190, -0.500297777507548780, -0.500254484211515300, -0.500211189664845680, -0.500167893867648040, -0.500124596820030300, -0.500081298522101480, -0.500037998973969280, +-0.499994698175741830, -0.499951396127527980, -0.499908092829435660, -0.499864788281573050, -0.499821482484048120, -0.499778175436969900, -0.499734867140446180, -0.499691557594585330, +-0.499648246799495210, -0.499604934755284840, -0.499561621462062120, -0.499518306919935370, -0.499474991129012450, -0.499431674089402480, -0.499388355801213270, -0.499345036264553180, +-0.499301715479530170, -0.499258393446253170, -0.499215070164830240, -0.499171745635369260, -0.499128419857979290, -0.499085092832768250, -0.499041764559844500, -0.498998435039315960, +-0.498955104271291690, -0.498911772255879680, -0.498868438993188220, -0.498825104483325290, -0.498781768726400010, -0.498738431722520250, -0.498695093471794470, -0.498651753974330540, +-0.498608413230237580, -0.498565071239623630, -0.498521728002597030, -0.498478383519265660, -0.498435037789738740, -0.498391690814124270, -0.498348342592530140, -0.498304993125065540, +-0.498261642411838460, -0.498218290452957290, -0.498174937248530010, -0.498131582798665760, -0.498088227103472560, -0.498044870163058760, -0.498001511977532450, -0.497958152547002710, +-0.497914791871577610, -0.497871429951365520, -0.497828066786474450, -0.497784702377013670, -0.497741336723091070, -0.497697969824815120, -0.497654601682293920, -0.497611232295636530, +-0.497567861664951090, -0.497524489790345640, -0.497481116671929350, -0.497437742309810190, -0.497394366704096760, -0.497350989854897010, -0.497307611762320130, -0.497264232426474270, +-0.497220851847467840, -0.497177470025408850, -0.497134086960406560, -0.497090702652569110, -0.497047317102004840, -0.497003930308821950, -0.496960542273129580, -0.496917152995035860, +-0.496873762474649260, -0.496830370712077920, -0.496786977707430970, -0.496743583460816600, -0.496700187972343280, -0.496656791242119090, -0.496613393270253280, -0.496569994056854040, +-0.496526593602029440, -0.496483191905888690, -0.496439788968539960, -0.496396384790091790, -0.496352979370652260, -0.496309572710330660, -0.496266164809235130, -0.496222755667474260, +-0.496179345285156000, -0.496135933662389840, -0.496092520799283840, -0.496049106695946480, -0.496005691352486010, -0.495962274769011720, -0.495918856945631700, -0.495875437882454580, +-0.495832017579588450, -0.495788596037142650, -0.495745173255225380, -0.495701749233944830, -0.495658323973410250, -0.495614897473729830, -0.495571469735012200, -0.495528040757365510, +-0.495484610540899100, -0.495441179085721160, -0.495397746391940290, -0.495354312459664660, -0.495310877289003640, -0.495267440880065410, -0.495224003232958620, -0.495180564347791400, +-0.495137124224673150, -0.495093682863712080, -0.495050240265016870, -0.495006796428695610, -0.494963351354857750, -0.494919905043611550, -0.494876457495065150, -0.494833008709328000, +-0.494789558686508370, -0.494746107426714820, -0.494702654930055610, -0.494659201196640200, -0.494615746226576720, -0.494572290019973880, -0.494528832576939970, -0.494485373897584350, +-0.494441913982015260, -0.494398452830341400, -0.494354990442671060, -0.494311526819113610, -0.494268061959777350, -0.494224595864770910, -0.494181128534202600, -0.494137659968181870, +-0.494094190166816990, -0.494050719130216590, -0.494007246858489070, -0.493963773351743800, -0.493920298610089070, -0.493876822633633250, -0.493833345422485690, -0.493789866976754870, +-0.493746387296549290, -0.493702906381977390, -0.493659424233148620, -0.493615940850171300, -0.493572456233154100, -0.493528970382205390, -0.493485483297434640, -0.493441994978950140, +-0.493398505426860700, -0.493355014641274630, -0.493311522622301380, -0.493268029370049320, -0.493224534884627200, -0.493181039166143310, -0.493137542214707240, -0.493094044030427340, +-0.493050544613411910, -0.493007043963770540, -0.492963542081611530, -0.492920038967043670, -0.492876534620175330, -0.492833029041116030, -0.492789522229974190, -0.492746014186858540, +-0.492702504911877450, -0.492658994405140490, -0.492615482666756030, -0.492571969696832870, -0.492528455495479410, -0.492484940062805190, -0.492441423398918610, -0.492397905503928480, +-0.492354386377943210, -0.492310866021072380, -0.492267344433424350, -0.492223821615107580, -0.492180297566231660, -0.492136772286904940, -0.492093245777236340, -0.492049718037334270, +-0.492006189067308250, -0.491962658867266760, -0.491919127437318580, -0.491875594777572260, -0.491832060888137300, -0.491788525769122240, -0.491744989420635830, -0.491701451842786570, +-0.491657913035684010, -0.491614372999436720, -0.491570831734153500, -0.491527289239942820, -0.491483745516914320, -0.491440200565176400, -0.491396654384837650, -0.491353106976007590, +-0.491309558338794810, -0.491266008473308150, -0.491222457379656030, -0.491178905057948150, -0.491135351508293070, -0.491091796730799560, -0.491048240725576180, -0.491004683492732570, +-0.490961125032377320, -0.490917565344619170, -0.490874004429566800, -0.490830442287329750, -0.490786878918016590, -0.490743314321736290, -0.490699748498597270, -0.490656181448709260, +-0.490612613172180800, -0.490569043669120850, -0.490525472939637890, -0.490481900983841590, -0.490438327801840600, -0.490394753393743330, -0.490351177759659640, -0.490307600899697940, +-0.490264022813967300, -0.490220443502576150, -0.490176862965634340, -0.490133281203250340, -0.490089698215533160, -0.490046114002591350, -0.490002528564534580, -0.489958941901471550, +-0.489915354013511160, -0.489871764900761950, -0.489828174563333770, -0.489784583001335150, -0.489740990214875050, -0.489697396204062110, -0.489653800969006070, -0.489610204509815460, +-0.489566606826599030, -0.489523007919466460, -0.489479407788526330, -0.489435806433887730, -0.489392203855659180, -0.489348600053950530, -0.489304995028870370, -0.489261388780527720, +-0.489217781309031260, -0.489174172614490700, -0.489130562697014710, -0.489086951556712280, -0.489043339193692140, -0.488999725608063980, -0.488956110799936560, -0.488912494769418840, +-0.488868877516619500, -0.488825259041648360, -0.488781639344614050, -0.488738018425625250, -0.488694396284791830, -0.488650772922222420, -0.488607148338026040, -0.488563522532311450, +-0.488519895505188370, -0.488476267256765630, -0.488432637787152180, -0.488389007096456720, -0.488345375184789150, -0.488301742052258180, -0.488258107698972820, -0.488214472125041820, +-0.488170835330575040, -0.488127197315681160, -0.488083558080469270, -0.488039917625048110, -0.487996275949527550, -0.487952633054016320, -0.487908988938623440, -0.487865343603457740, +-0.487821697048629100, -0.487778049274246170, -0.487734400280417760, -0.487690750067253710, -0.487647098634862770, -0.487603445983354140, -0.487559792112836510, -0.487516137023419730, +-0.487472480715212650, -0.487428823188324370, -0.487385164442863620, -0.487341504478940310, -0.487297843296663310, -0.487254180896141700, -0.487210517277484210, -0.487166852440800820, +-0.487123186386200340, -0.487079519113791830, -0.487035850623684210, -0.486992180915987280, -0.486948509990809960, -0.486904837848260940, -0.486861164488450180, -0.486817489911486550, +-0.486773814117479220, -0.486730137106536950, -0.486686458878769710, -0.486642779434286350, -0.486599098773196010, -0.486555416895607550, -0.486511733801630930, -0.486468049491374950, +-0.486424363964948870, -0.486380677222461530, -0.486336989264022860, -0.486293300089741700, -0.486249609699727300, -0.486205918094088470, -0.486162225272935290, -0.486118531236376490, +-0.486074835984521000, -0.486031139517478780, -0.485987441835358750, -0.485943742938270080, -0.485900042826321710, -0.485856341499623590, -0.485812638958284580, -0.485768935202414040, +-0.485725230232120770, -0.485681524047514750, -0.485637816648704980, -0.485594108035800660, -0.485550398208910660, -0.485506687168145050, -0.485462974913612730, -0.485419261445423020, +-0.485375546763684720, -0.485331830868507950, -0.485288113760001580, -0.485244395438274580, -0.485200675903436960, -0.485156955155597650, -0.485113233194865930, -0.485069510021350790, +-0.485025785635162240, -0.484982060036409200, -0.484938333225201020, -0.484894605201646620, -0.484850875965856130, -0.484807145517938410, -0.484763413858002870, -0.484719680986158360, +-0.484675946902515090, -0.484632211607181900, -0.484588475100268200, -0.484544737381882920, -0.484500998452136180, -0.484457258311136950, -0.484413516958994590, -0.484369774395818020, +-0.484326030621717420, -0.484282285636801760, -0.484238539441180000, -0.484194792034962240, -0.484151043418257540, -0.484107293591175210, -0.484063542553824280, -0.484019790306314810, +-0.483976036848755950, -0.483932282181256950, -0.483888526303926870, -0.483844769216875860, -0.483801010920212940, -0.483757251414047520, -0.483713490698488510, -0.483669728773646220, +-0.483625965639629560, -0.483582201296548050, -0.483538435744510610, -0.483494668983627470, -0.483450901014007670, -0.483407131835760230, -0.483363361448995330, -0.483319589853822060, +-0.483275817050349780, -0.483232043038687550, -0.483188267818945640, -0.483144491391233060, -0.483100713755659270, -0.483056934912333260, -0.483013154861365310, -0.482969373602864520, +-0.482925591136940220, -0.482881807463701630, -0.482838022583258860, -0.482794236495721060, -0.482750449201197640, -0.482706660699797730, -0.482662870991631580, -0.482619080076808200, +-0.482575287955436800, -0.482531494627627510, -0.482487700093489510, -0.482443904353132220, -0.482400107406664840, -0.482356309254197540, -0.482312509895839510, -0.482268709331700180, +-0.482224907561888680, -0.482181104586515310, -0.482137300405689140, -0.482093495019519760, -0.482049688428116240, -0.482005880631588890, -0.481962071630046840, -0.481918261423599610, +-0.481874450012356350, -0.481830637396427400, -0.481786823575921790, -0.481743008550949090, -0.481699192321618560, -0.481655374888040390, -0.481611556250323810, -0.481567736408577920, +-0.481523915362913110, -0.481480093113438480, -0.481436269660263650, -0.481392445003497700, -0.481348619143251110, -0.481304792079632890, -0.481260963812752740, -0.481217134342719790, +-0.481173303669644390, -0.481129471793635740, -0.481085638714803370, -0.481041804433256560, -0.480997968949105630, -0.480954132262459750, -0.480910294373428530, -0.480866455282121190, +-0.480822614988648140, -0.480778773493118540, -0.480734930795641560, -0.480691086896327720, -0.480647241795286120, -0.480603395492626430, -0.480559547988457850, -0.480515699282890780, +-0.480471849376034490, -0.480427998267998590, -0.480384145958892230, -0.480340292448825980, -0.480296437737908980, -0.480252581826250860, -0.480208724713960920, -0.480164866401149530, +-0.480121006887925970, -0.480077146174399950, -0.480033284260680590, -0.479989421146878480, -0.479945556833102800, -0.479901691319462810, -0.479857824606069020, -0.479813956693030620, +-0.479770087580457420, -0.479726217268458540, -0.479682345757144520, -0.479638473046624600, -0.479594599137008530, -0.479550724028405590, -0.479506847720926220, -0.479462970214679710, +-0.479419091509775800, -0.479375211606323790, -0.479331330504434110, -0.479287448204216090, -0.479243564705779500, -0.479199680009233580, -0.479155794114688840, -0.479111907022254590, +-0.479068018732040250, -0.479024129244156220, -0.478980238558711860, -0.478936346675816860, -0.478892453595580690, -0.478848559318113710, -0.478804663843525380, -0.478760767171925390, +-0.478716869303423050, -0.478672970238128940, -0.478629069976152450, -0.478585168517603240, -0.478541265862590710, -0.478497362011225450, -0.478453456963616740, -0.478409550719874400, +-0.478365643280107830, -0.478321734644427510, -0.478277824812942840, -0.478233913785763630, -0.478190001562999230, -0.478146088144760230, -0.478102173531156030, -0.478058257722295990, +-0.478014340718290690, -0.477970422519249540, -0.477926503125282290, -0.477882582536498460, -0.477838660753008520, -0.477794737774921980, -0.477750813602348560, -0.477706888235397700, +-0.477662961674180040, -0.477619033918804950, -0.477575104969382270, -0.477531174826021480, -0.477487243488833150, -0.477443310957926640, -0.477399377233411910, -0.477355442315398340, +-0.477311506203996540, -0.477267568899315990, -0.477223630401466090, -0.477179690710557550, -0.477135749826699760, -0.477091807750002590, -0.477047864480575570, -0.477003920018529200, +-0.476959974363973080, -0.476916027517017000, -0.476872079477770490, -0.476828130246344130, -0.476784179822847490, -0.476740228207390370, -0.476696275400082300, -0.476652321401033920, +-0.476608366210354740, -0.476564409828154620, -0.476520452254543150, -0.476476493489630890, -0.476432533533527440, -0.476388572386342250, -0.476344610048185960, -0.476300646519168200, +-0.476256681799398840, -0.476212715888987340, -0.476168748788044440, -0.476124780496679720, -0.476080811015002990, -0.476036840343123880, -0.475992868481153080, -0.475948895429200050, +-0.475904921187374820, -0.475860945755786910, -0.475816969134547020, -0.475772991323764660, -0.475729012323549860, -0.475685032134012140, -0.475641050755262200, -0.475597068187409660, +-0.475553084430564430, -0.475509099484836160, -0.475465113350335480, -0.475421126027172010, -0.475377137515455350, -0.475333147815296230, -0.475289156926804290, -0.475245164850089390, +-0.475201171585261210, -0.475157177132430500, -0.475113181491706840, -0.475069184663200250, -0.475025186647020260, -0.474981187443277720, -0.474937187052082210, -0.474893185473543760, +-0.474849182707771930, -0.474805178754877490, -0.474761173614970170, -0.474717167288159880, -0.474673159774556320, -0.474629151074270230, -0.474585141187411240, -0.474541130114089050, +-0.474497117854414400, -0.474453104408496970, -0.474409089776446750, -0.474365073958373410, -0.474321056954387810, -0.474277038764599530, -0.474233019389118720, -0.474188998828054930, +-0.474144977081519040, -0.474100954149620670, -0.474056930032469960, -0.474012904730176540, -0.473968878242851220, -0.473924850570603680, -0.473880821713544060, -0.473836791671782000, +-0.473792760445428340, -0.473748728034592780, -0.473704694439385010, -0.473660659659915880, -0.473616623696295090, -0.473572586548632770, -0.473528548217038600, -0.473484508701623400, +-0.473440468002497010, -0.473396426119769400, -0.473352383053550320, -0.473308338803950680, -0.473264293371080220, -0.473220246755049030, -0.473176198955966800, -0.473132149973944480, +-0.473088099809091780, -0.473044048461518820, -0.472999995931335350, -0.472955942218652340, -0.472911887323579420, -0.472867831246226390, -0.472823773986704170, -0.472779715545122550, +-0.472735655921591610, -0.472691595116221110, -0.472647533129122050, -0.472603469960404200, -0.472559405610177620, -0.472515340078552120, -0.472471273365638710, -0.472427205471547100, +-0.472383136396387460, -0.472339066140269600, -0.472294994703304490, -0.472250922085601880, -0.472206848287271940, -0.472162773308424490, -0.472118697149170540, -0.472074619809619790, +-0.472030541289882530, -0.471986461590068520, -0.471942380710288770, -0.471898298650653030, -0.471854215411271150, -0.471810130992254160, -0.471766045393711810, -0.471721958615754390, +-0.471677870658491650, -0.471633781522034610, -0.471589691206493130, -0.471545599711977400, -0.471501507038597330, -0.471457413186463840, -0.471413318155686820, -0.471369221946376540, +-0.471325124558642780, -0.471281025992596640, -0.471236926248347900, -0.471192825326006870, -0.471148723225683350, -0.471104619947488420, -0.471060515491531940, -0.471016409857923810, +-0.470972303046775010, -0.470928195058195500, -0.470884085892295470, -0.470839975549184830, -0.470795864028974660, -0.470751751331774830, -0.470707637457695620, -0.470663522406846890, +-0.470619406179339780, -0.470575288775284150, -0.470531170194790290, -0.470487050437968120, -0.470442929504928720, -0.470398807395781990, -0.470354684110638300, -0.470310559649607440, +-0.470266434012800550, -0.470222307200327650, -0.470178179212298540, -0.470134050048824360, -0.470089919710015120, -0.470045788195981030, -0.470001655506832090, -0.469957521642679400, +-0.469913386603632910, -0.469869250389802980, -0.469825113001299480, -0.469780974438233630, -0.469736834700715310, -0.469692693788854920, -0.469648551702762430, -0.469604408442548920, +-0.469560264008324400, -0.469516118400199240, -0.469471971618283360, -0.469427823662687930, -0.469383674533522980, -0.469339524230898810, -0.469295372754925500, -0.469251220105714070, +-0.469207066283374660, -0.469162911288017130, -0.469118755119752760, -0.469074597778691480, -0.469030439264943700, -0.468986279578619440, -0.468942118719829880, -0.468897956688685060, +-0.468853793485295270, -0.468809629109770640, -0.468765463562222370, -0.468721296842760370, -0.468677128951495160, -0.468632959888536760, -0.468588789653996310, -0.468544618247983930, +-0.468500445670609940, -0.468456271921984520, -0.468412097002218750, -0.468367920911422760, -0.468323743649706580, -0.468279565217181450, -0.468235385613957390, -0.468191204840144870, +-0.468147022895853970, -0.468102839781195880, -0.468058655496280670, -0.468014470041218820, -0.467970283416120460, -0.467926095621096720, -0.467881906656257780, -0.467837716521714080, +-0.467793525217575670, -0.467749332743953860, -0.467705139100958680, -0.467660944288700700, -0.467616748307289940, -0.467572551156837710, -0.467528352837454090, -0.467484153349249200, +-0.467439952692334350, -0.467395750866819560, -0.467351547872815460, -0.467307343710432030, -0.467263138379780670, -0.467218931880971470, -0.467174724214114930, -0.467130515379321210, +-0.467086305376701590, -0.467042094206366170, -0.466997881868425560, -0.466953668362989790, -0.466909453690170280, -0.466865237850077160, -0.466821020842820960, -0.466776802668511740, +-0.466732583327260970, -0.466688362819178690, -0.466644141144375520, -0.466599918302961660, -0.466555694295048340, -0.466511469120745760, -0.466467242780164160, -0.466423015273414840, +-0.466378786600608000, -0.466334556761854150, -0.466290325757263540, -0.466246093586947520, -0.466201860251016230, -0.466157625749580360, -0.466113390082749990, -0.466069153250636530, +-0.466024915253350160, -0.465980676091001520, -0.465936435763700860, -0.465892194271559420, -0.465847951614687560, -0.465803707793195800, -0.465759462807194320, -0.465715216656794660, +-0.465670969342106890, -0.465626720863241360, -0.465582471220309380, -0.465538220413421240, -0.465493968442687530, -0.465449715308218550, -0.465405461010125640, -0.465361205548519120, +-0.465316948923509550, -0.465272691135207190, -0.465228432183723560, -0.465184172069168790, -0.465139910791653620, -0.465095648351288250, -0.465051384748184190, -0.465007119982451640, +-0.464962854054201350, -0.464918586963543490, -0.464874318710589540, -0.464830049295449800, -0.464785778718234570, -0.464741506979055250, -0.464697234078022160, -0.464652960015246030, +-0.464608684790837060, -0.464564408404906810, -0.464520130857565550, -0.464475852148923900, -0.464431572279092260, -0.464387291248182120, -0.464343009056303710, -0.464298725703567780, +-0.464254441190084630, -0.464210155515965780, -0.464165868681321590, -0.464121580686262690, -0.464077291530899440, -0.464033001215343350, -0.463988709739704740, -0.463944417104094010, +-0.463900123308622630, -0.463855828353400890, -0.463811532238539600, -0.463767234964149120, -0.463722936530340910, -0.463678636937225390, -0.463634336184913230, -0.463590034273514860, +-0.463545731203141850, -0.463501426973904450, -0.463457121585913510, -0.463412815039279340, -0.463368507334113560, -0.463324198470526470, -0.463279888448628940, -0.463235577268531260, +-0.463191264930345070, -0.463146951434180660, -0.463102636780148900, -0.463058320968360190, -0.463014003998926000, -0.462969685871956860, -0.462925366587563060, -0.462881046145856290, +-0.462836724546946850, -0.462792401790945660, -0.462748077877963020, -0.462703752808110600, -0.462659426581498830, -0.462615099198238460, -0.462570770658439930, -0.462526440962214900, +-0.462482110109673770, -0.462437778100927340, -0.462393444936086080, -0.462349110615261630, -0.462304775138564330, -0.462260438506105150, -0.462216100717994460, -0.462171761774343940, +-0.462127421675263990, -0.462083080420865100, -0.462038738011258940, -0.461994394446555880, -0.461950049726866820, -0.461905703852302290, -0.461861356822973910, -0.461817008638992110, +-0.461772659300467790, -0.461728308807511420, -0.461683957160234640, -0.461639604358748010, -0.461595250403162400, -0.461550895293588230, -0.461506539030137220, -0.461462181612919850, +-0.461417823042047040, -0.461373463317629300, -0.461329102439778260, -0.461284740408604450, -0.461240377224218460, -0.461196012886731840, -0.461151647396255250, -0.461107280752899530, +-0.461062912956775210, -0.461018544007993970, -0.460974173906666400, -0.460929802652903400, -0.460885430246815500, -0.460841056688514440, -0.460796681978110690, -0.460752306115715270, +-0.460707929101438650, -0.460663550935392630, -0.460619171617687730, -0.460574791148434910, -0.460530409527744710, -0.460486026755728920, -0.460441642832498000, -0.460397257758163040, +-0.460352871532834500, -0.460308484156624120, -0.460264095629642600, -0.460219705952000460, -0.460175315123809440, -0.460130923145180060, -0.460086530016223460, -0.460042135737050110, +-0.459997740307771800, -0.459953343728499160, -0.459908945999343180, -0.459864547120414410, -0.459820147091824670, -0.459775745913684530, -0.459731343586105070, -0.459686940109196860, +-0.459642535483071660, -0.459598129707840140, -0.459553722783613340, -0.459509314710501770, -0.459464905488617350, -0.459420495118070650, -0.459376083598972310, -0.459331670931434180, +-0.459287257115566840, -0.459242842151481370, -0.459198426039288400, -0.459154008779099790, -0.459109590371026110, -0.459065170815178500, -0.459020750111667540, -0.458976328260605080, +-0.458931905262101870, -0.458887481116268810, -0.458843055823216720, -0.458798629383057380, -0.458754201795901430, -0.458709773061860000, -0.458665343181043740, -0.458620912153564490, +-0.458576479979532990, -0.458532046659059890, -0.458487612192257090, -0.458443176579235220, -0.458398739820105430, -0.458354301914978390, -0.458309862863966020, -0.458265422667178960, +-0.458220981324728330, -0.458176538836724880, -0.458132095203280460, -0.458087650424505830, -0.458043204500512060, -0.457998757431409890, -0.457954309217311170, -0.457909859858326720, +-0.457865409354567650, -0.457820957706144620, -0.457776504913169620, -0.457732050975753310, -0.457687595894006540, -0.457643139668041100, -0.457598682297967850, -0.457554223783897930, +-0.457509764125942020, -0.457465303324212090, -0.457420841378818890, -0.457376378289873650, -0.457331914057487020, -0.457287448681771010, -0.457242982162836380, -0.457198514500794300, +-0.457154045695755520, -0.457109575747832010, -0.457065104657134570, -0.457020632423774390, -0.456976159047862260, -0.456931684529510050, -0.456887208868828660, -0.456842732065929290, +-0.456798254120922680, -0.456753775033920780, -0.456709294805034470, -0.456664813434374540, -0.456620330922053010, -0.456575847268180570, -0.456531362472868570, -0.456486876536227770, +-0.456442389458370120, -0.456397901239406540, -0.456353411879448220, -0.456308921378605960, -0.456264429736991770, -0.456219936954716520, -0.456175443031891450, -0.456130947968627350, +-0.456086451765036260, -0.456041954421229080, -0.455997455937317000, -0.455952956313410870, -0.455908455549622780, -0.455863953646063520, -0.455819450602843960, -0.455774946420076210, +-0.455730441097871090, -0.455685934636339880, -0.455641427035593400, -0.455596918295743780, -0.455552408416901810, -0.455507897399178910, -0.455463385242685810, -0.455418871947534660, +-0.455374357513836310, -0.455329841941702060, -0.455285325231242880, -0.455240807382570720, -0.455196288395796570, -0.455151768271031650, -0.455107247008386950, -0.455062724607974530, +-0.455018201069905310, -0.454973676394290150, -0.454929150581241230, -0.454884623630869460, -0.454840095543286080, -0.454795566318602070, -0.454751035956929560, -0.454706504458379460, +-0.454661971823063060, -0.454617438051091390, -0.454572903142576480, -0.454528367097629340, -0.454483829916361270, -0.454439291598883240, -0.454394752145307390, -0.454350211555744620, +-0.454305669830306350, -0.454261126969103480, -0.454216582972248260, -0.454172037839851490, -0.454127491572024700, -0.454082944168878730, -0.454038395630525840, -0.453993845957076920, +-0.453949295148643020, -0.453904743205336250, -0.453860190127267640, -0.453815635914548600, -0.453771080567289990, -0.453726524085604150, -0.453681966469601960, -0.453637407719394870, +-0.453592847835093850, -0.453548286816811090, -0.453503724664657600, -0.453459161378744870, -0.453414596959183790, -0.453370031406086620, -0.453325464719564420, -0.453280896899728500, +-0.453236327946689940, -0.453191757860560980, -0.453147186641452650, -0.453102614289475900, -0.453058040804743050, -0.453013466187365100, -0.452968890437453480, -0.452924313555119200, +-0.452879735540474560, -0.452835156393630590, -0.452790576114698750, -0.452745994703790010, -0.452701412161016730, -0.452656828486489910, -0.452612243680320990, -0.452567657742621090, +-0.452523070673502450, -0.452478482473076150, -0.452433893141453600, -0.452389302678745940, -0.452344711085065410, -0.452300118360523140, -0.452255524505230160, -0.452210929519298750, +-0.452166333402840010, -0.452121736155965460, -0.452077137778786160, -0.452032538271414430, -0.451987937633961330, -0.451943335866538400, -0.451898732969256700, -0.451854128942228590, +-0.451809523785565210, -0.451764917499377970, -0.451720310083778000, -0.451675701538877710, -0.451631091864788170, -0.451586481061620860, -0.451541869129486960, -0.451497256068498830, +-0.451452641878767550, -0.451408026560404240, -0.451363410113521270, -0.451318792538229760, -0.451274173834641250, -0.451229554002866960, -0.451184933043019150, -0.451140310955209010, +-0.451095687739548110, -0.451051063396147590, -0.451006437925119800, -0.450961811326575920, -0.450917183600627490, -0.450872554747385750, -0.450827924766962980, -0.450783293659470450, +-0.450738661425019620, -0.450694028063721770, -0.450649393575689280, -0.450604757961033280, -0.450560121219865330, -0.450515483352296740, -0.450470844358439870, -0.450426204238405850, +-0.450381562992305920, -0.450336920620252430, -0.450292277122356700, -0.450247632498730290, -0.450202986749484390, -0.450158339874731360, -0.450113691874582560, -0.450069042749149490, +-0.450024392498543420, -0.449979741122876750, -0.449935088622260780, -0.449890434996807030, -0.449845780246626860, -0.449801124371832620, -0.449756467372535500, -0.449711809248847290, +-0.449667150000879150, -0.449622489628743460, -0.449577828132551650, -0.449533165512414790, -0.449488501768445460, -0.449443836900754850, -0.449399170909454690, -0.449354503794656130, +-0.449309835556471750, -0.449265166195012830, -0.449220495710390910, -0.449175824102717390, -0.449131151372104740, -0.449086477518664150, -0.449041802542507420, -0.448997126443745790, +-0.448952449222491720, -0.448907770878856530, -0.448863091412951890, -0.448818410824889160, -0.448773729114780750, -0.448729046282738080, -0.448684362328872320, -0.448639677253296120, +-0.448594991056120720, -0.448550303737457800, -0.448505615297418780, -0.448460925736116070, -0.448416235053661070, -0.448371543250165480, -0.448326850325740660, -0.448282156280499060, +-0.448237461114552090, -0.448192764828011460, -0.448148067420988560, -0.448103368893595870, -0.448058669245944730, -0.448013968478146950, -0.447969266590313830, -0.447924563582557940, +-0.447879859454990650, -0.447835154207723740, -0.447790447840868520, -0.447745740354537570, -0.447701031748842290, -0.447656322023893990, -0.447611611179805360, -0.447566899216687630, +-0.447522186134652670, -0.447477471933811880, -0.447432756614277780, -0.447388040176161790, -0.447343322619575710, -0.447298603944630890, -0.447253884151440020, -0.447209163240114390, +-0.447164441210765870, -0.447119718063505870, -0.447074993798446950, -0.447030268415700540, -0.446985541915378480, -0.446940814297592140, -0.446896085562454190, -0.446851355710076000, +-0.446806624740569040, -0.446761892654045870, -0.446717159450618020, -0.446672425130397290, -0.446627689693495030, -0.446582953140024000, -0.446538215470095590, -0.446493476683821610, +-0.446448736781313580, -0.446403995762684080, -0.446359253628044570, -0.446314510377506970, -0.446269766011182680, -0.446225020529184340, -0.446180273931623460, -0.446135526218611910, +-0.446090777390261150, -0.446046027446683870, -0.446001276387991470, -0.445956524214295550, -0.445911770925708660, -0.445867016522342340, -0.445822261004308500, -0.445777504371718590, +-0.445732746624685370, -0.445687987763320250, -0.445643227787735130, -0.445598466698041600, -0.445553704494352280, -0.445508941176778640, -0.445464176745432710, -0.445419411200425940, +-0.445374644541871030, -0.445329876769879510, -0.445285107884563270, -0.445240337886033900, -0.445195566774404080, -0.445150794549785340, -0.445106021212289200, -0.445061246762028410, +-0.445016471199114530, -0.444971694523659420, -0.444926916735774720, -0.444882137835573120, -0.444837357823166190, -0.444792576698665840, -0.444747794462183650, -0.444703011113832370, +-0.444658226653723570, -0.444613441081969210, -0.444568654398680820, -0.444523866603971250, -0.444479077697951970, -0.444434287680735010, -0.444389496552431930, -0.444344704313155480, +-0.444299910963017300, -0.444255116502129340, -0.444210320930603200, -0.444165524248551660, -0.444120726456086250, -0.444075927553318710, -0.444031127540361670, -0.443986326417326880, +-0.443941524184326250, -0.443896720841471360, -0.443851916388875170, -0.443807110826649090, -0.443762304154905310, -0.443717496373755290, -0.443672687483312010, -0.443627877483686980, +-0.443583066374992230, -0.443538254157339440, -0.443493440830841410, -0.443448626395609780, -0.443403810851756620, -0.443358994199393450, -0.443314176438633250, -0.443269357569587630, +-0.443224537592368180, -0.443179716507087760, -0.443134894313858110, -0.443090071012791190, -0.443045246603998690, -0.443000421087593520, -0.442955594463687260, -0.442910766732391990, +-0.442865937893819450, -0.442821107948082440, -0.442776276895292640, -0.442731444735562200, -0.442686611469002730, -0.442641777095727110, -0.442596941615847060, -0.442552105029474670, +-0.442507267336721580, -0.442462428537700740, -0.442417588632523840, -0.442372747621302580, -0.442327905504149800, -0.442283062281177310, -0.442238217952497130, -0.442193372518221050, +-0.442148525978461880, -0.442103678333331420, -0.442058829582941790, -0.442013979727404640, -0.441969128766832970, -0.441924276701338490, -0.441879423531033320, -0.441834569256029150, +-0.441789713876439010, -0.441744857392374570, -0.441699999803947970, -0.441655141111270970, -0.441610281314456510, -0.441565420413616350, -0.441520558408862670, -0.441475695300307170, +-0.441430831088062800, -0.441385965772241430, -0.441341099352954680, -0.441296231830315630, -0.441251363204435980, -0.441206493475427900, -0.441161622643403200, -0.441116750708474840, +-0.441071877670754620, -0.441027003530354680, -0.440982128287386870, -0.440937251941964090, -0.440892374494198210, -0.440847495944201420, -0.440802616292085450, -0.440757735537963380, +-0.440712853681946900, -0.440667970724148370, -0.440623086664679480, -0.440578201503653230, -0.440533315241181500, -0.440488427877376130, -0.440443539412350040, -0.440398649846215130, +-0.440353759179083590, -0.440308867411067230, -0.440263974542279110, -0.440219080572831100, -0.440174185502835320, -0.440129289332403690, -0.440084392061649290, -0.440039493690683850, +-0.439994594219619730, -0.439949693648568670, -0.439904791977643820, -0.439859889206956960, -0.439814985336620390, -0.439770080366745920, -0.439725174297446730, -0.439680267128834510, +-0.439635358861021290, -0.439590449494120070, -0.439545539028242730, -0.439500627463501490, -0.439455714800008330, -0.439410801037876280, -0.439365886177217170, -0.439320970218143430, +-0.439276053160766790, -0.439231135005200450, -0.439186215751556310, -0.439141295399946560, -0.439096373950483230, -0.439051451403279340, -0.439006527758446840, -0.438961603016097990, +-0.438916677176344750, -0.438871750239300200, -0.438826822205076290, -0.438781893073784960, -0.438736962845539260, -0.438692031520451160, -0.438647099098632980, -0.438602165580196600, +-0.438557230965255280, -0.438512295253920880, -0.438467358446305690, -0.438422420542521730, -0.438377481542682130, -0.438332541446898820, -0.438287600255284180, -0.438242657967950090, +-0.438197714585009780, -0.438152770106575220, -0.438107824532758650, -0.438062877863672210, -0.438017930099428910, -0.437972981240140840, -0.437928031285920280, -0.437883080236879220, +-0.437838128093130880, -0.437793174854787250, -0.437748220521960270, -0.437703265094763150, -0.437658308573307840, -0.437613350957706760, -0.437568392248071920, -0.437523432444516470, +-0.437478471547152470, -0.437433509556092280, -0.437388546471447930, -0.437343582293332590, -0.437298617021858290, -0.437253650657137450, -0.437208683199282130, -0.437163714648405420, +-0.437118745004619500, -0.437073774268036670, -0.437028802438769020, -0.436983829516929770, -0.436938855502630950, -0.436893880395984590, -0.436848904197103930, -0.436803926906101040, +-0.436758948523088280, -0.436713969048177770, -0.436668988481482720, -0.436624006823115200, -0.436579024073187720, -0.436534040231812190, -0.436489055299102040, -0.436444069275169210, +-0.436399082160126180, -0.436354093954085090, -0.436309104657159160, -0.436264114269460490, -0.436219122791101480, -0.436174130222194310, -0.436129136562852180, -0.436084141813187220, +-0.436039145973311500, -0.435994149043338330, -0.435949151023379830, -0.435904151913548370, -0.435859151713956170, -0.435814150424716500, -0.435769148045941470, -0.435724144577743500, +-0.435679140020234830, -0.435634134373528710, -0.435589127637737220, -0.435544119812972920, -0.435499110899347950, -0.435454100896975560, -0.435409089805967930, -0.435364077626437580, +-0.435319064358496650, -0.435274050002258440, -0.435229034557835130, -0.435184018025339240, -0.435139000404882850, -0.435093981696579420, -0.435048961900540990, -0.435003941016879780, +-0.434958919045709100, -0.434913895987141140, -0.434868871841288420, -0.434823846608263180, -0.434778820288178660, -0.434733792881147110, -0.434688764387281050, -0.434643734806692720, +-0.434598704139495420, -0.434553672385801390, -0.434508639545723160, -0.434463605619372970, -0.434418570606864120, -0.434373534508308850, -0.434328497323819780, -0.434283459053509010, +-0.434238419697490050, -0.434193379255874980, -0.434148337728776150, -0.434103295116306800, -0.434058251418579230, -0.434013206635706030, -0.433968160767799430, -0.433923113814972840, +-0.433878065777338400, -0.433833016655008840, -0.433787966448096360, -0.433742915156714310, -0.433697862780975050, -0.433652809320991100, -0.433607754776874690, -0.433562699148739290, +-0.433517642436697210, -0.433472584640860970, -0.433427525761342860, -0.433382465798256400, -0.433337404751713730, -0.433292342621827140, -0.433247279408710110, -0.433202215112474860, +-0.433157149733234100, -0.433112083271100070, -0.433067015726186220, -0.433021947098604810, -0.432976877388468570, -0.432931806595889700, -0.432886734720981770, -0.432841661763856970, +-0.432796587724627980, -0.432751512603407160, -0.432706436400307930, -0.432661359115442680, -0.432616280748923940, -0.432571201300864130, -0.432526120771376750, -0.432481039160574070, +-0.432435956468568360, -0.432390872695473160, -0.432345787841400760, -0.432300701906463970, -0.432255614890774960, -0.432210526794447330, -0.432165437617593350, -0.432120347360325840, +-0.432075256022756980, -0.432030163605000460, -0.431985070107168470, -0.431939975529373850, -0.431894879871728870, -0.431849783134347130, -0.431804685317340900, -0.431759586420822910, +-0.431714486444905620, -0.431669385389702510, -0.431624283255325920, -0.431579180041888610, -0.431534075749502980, -0.431488970378282490, -0.431443863928339670, -0.431398756399786750, +-0.431353647792737330, -0.431308538107303800, -0.431263427343598900, -0.431218315501735060, -0.431173202581825840, -0.431128088583983600, -0.431082973508321140, -0.431037857354950820, +-0.430992740123986310, -0.430947621815539920, -0.430902502429724440, -0.430857381966652350, -0.430812260426437220, -0.430767137809191400, -0.430722014115027750, -0.430676889344058680, +-0.430631763496397760, -0.430586636572157460, -0.430541508571450130, -0.430496379494389460, -0.430451249341087860, -0.430406118111658080, -0.430360985806212630, -0.430315852424865140, +-0.430270717967727980, -0.430225582434914040, -0.430180445826535750, -0.430135308142706780, -0.430090169383539500, -0.430045029549146810, -0.429999888639641110, -0.429954746655136110, +-0.429909603595744260, -0.429864459461578420, -0.429819314252750990, -0.429774167969375680, -0.429729020611564980, -0.429683872179431270, -0.429638722673088340, -0.429593572092648590, +-0.429548420438224890, -0.429503267709929750, -0.429458113907876860, -0.429412959032178630, -0.429367803082948090, -0.429322646060297570, -0.429277487964340840, -0.429232328795190410, +-0.429187168552959190, -0.429142007237759580, -0.429096844849705390, -0.429051681388909090, -0.429006516855483580, -0.428961351249541380, -0.428916184571196180, -0.428871016820560560, +-0.428825847997747370, -0.428780678102869180, -0.428735507136039700, -0.428690335097371420, -0.428645161986976890, -0.428599987804969880, -0.428554812551462940, -0.428509636226568900, +-0.428464458830400410, -0.428419280363071200, -0.428374100824693740, -0.428328920215381050, -0.428283738535245650, -0.428238555784401290, -0.428193371962960530, -0.428148187071036410, +-0.428103001108741390, -0.428057814076189260, -0.428012625973492540, -0.427967436800764320, -0.427922246558117110, -0.427877055245664660, -0.427831862863519600, -0.427786669411794440, +-0.427741474890603050, -0.427696279300057940, -0.427651082640272180, -0.427605884911358260, -0.427560686113430070, -0.427515486246600130, -0.427470285310981470, -0.427425083306686720, +-0.427379880233829670, -0.427334676092522900, -0.427289470882879440, -0.427244264605011910, -0.427199057259034120, -0.427153848845058690, -0.427108639363198650, -0.427063428813566570, +-0.427018217196276360, -0.426973004511440600, -0.426927790759171920, -0.426882575939584120, -0.426837360052789940, -0.426792143098902340, -0.426746925078034020, -0.426701705990298720, +-0.426656485835809170, -0.426611264614678460, -0.426566042327019170, -0.426520818972945140, -0.426475594552569060, -0.426430369066004010, -0.426385142513362680, -0.426339914894758860, +-0.426294686210305250, -0.426249456460114920, -0.426204225644300550, -0.426158993762976000, -0.426113760816253960, -0.426068526804247170, -0.426023291727069430, -0.425978055584833480, +-0.425932818377652340, -0.425887580105638820, -0.425842340768906700, -0.425797100367568790, -0.425751858901738060, -0.425706616371527350, -0.425661372777050410, -0.425616128118420090, +-0.425570882395749470, -0.425525635609151240, -0.425480387758739310, -0.425435138844626410, -0.425389888866925640, -0.425344637825749770, -0.425299385721212670, -0.425254132553427140, +-0.425208878322506310, -0.425163623028562860, -0.425118366671710710, -0.425073109252062710, -0.425027850769731490, -0.424982591224831060, -0.424937330617474180, -0.424892068947773930, +-0.424846806215843140, -0.424801542421795690, -0.424756277565744410, -0.424711011647802450, -0.424665744668082550, -0.424620476626698660, -0.424575207523763600, -0.424529937359390540, +-0.424484666133692230, -0.424439393846782640, -0.424394120498774560, -0.424348846089781240, -0.424303570619915360, -0.424258294089290940, -0.424213016498020790, -0.424167737846217700, +-0.424122458133995680, -0.424077177361467490, -0.424031895528746370, -0.423986612635945110, -0.423941328683177740, -0.423896043670557050, -0.423850757598196240, -0.423805470466208090, +-0.423760182274706740, -0.423714893023804880, -0.423669602713615810, -0.423624311344252320, -0.423579018915828500, -0.423533725428457080, -0.423488430882251350, -0.423443135277324130, +-0.423397838613789490, -0.423352540891760280, -0.423307242111349290, -0.423261942272670610, -0.423216641375837090, -0.423171339420961910, -0.423126036408158050, -0.423080732337539460, +-0.423035427209219050, -0.422990121023310070, -0.422944813779925380, -0.422899505479179040, -0.422854196121183970, -0.422808885706053410, -0.422763574233900210, -0.422718261704838450, +-0.422672948118981100, -0.422627633476441330, -0.422582317777332130, -0.422537001021767500, -0.422491683209860360, -0.422446364341724000, -0.422401044417471390, -0.422355723437216500, +-0.422310401401072340, -0.422265078309151780, -0.422219754161568930, -0.422174428958436650, -0.422129102699868360, -0.422083775385976860, -0.422038447016876370, -0.421993117592679710, +-0.421947787113500280, -0.421902455579451000, -0.421857122990645980, -0.421811789347198150, -0.421766454649220800, -0.421721118896826950, -0.421675782090130740, -0.421630444229245000, +-0.421585105314283230, -0.421539765345358200, -0.421494424322584220, -0.421449082246074190, -0.421403739115941030, -0.421358394932298930, -0.421313049695260840, -0.421267703404940130, +-0.421222356061449750, -0.421177007664903900, -0.421131658215415540, -0.421086307713097960, -0.421040956158064310, -0.420995603550428590, -0.420950249890303880, -0.420904895177803610, +-0.420859539413040660, -0.420814182596129240, -0.420768824727182360, -0.420723465806313420, -0.420678105833635460, -0.420632744809262600, -0.420587382733307870, -0.420542019605884330, +-0.420496655427106130, -0.420451290197086270, -0.420405923915938170, -0.420360556583774860, -0.420315188200710620, -0.420269818766858320, -0.420224448282331520, -0.420179076747243200, +-0.420133704161707590, -0.420088330525837720, -0.420042955839747050, -0.419997580103548540, -0.419952203317356500, -0.419906825481284000, -0.419861446595444390, -0.419816066659950750, +-0.419770685674917320, -0.419725303640457240, -0.419679920556683460, -0.419634536423710290, -0.419589151241650800, -0.419543765010618410, -0.419498377730726240, -0.419452989402088470, +-0.419407600024818250, -0.419362209599029030, -0.419316818124833900, -0.419271425602347150, -0.419226032031681790, -0.419180637412951360, -0.419135241746268930, -0.419089845031748790, +-0.419044447269504070, -0.418999048459648190, -0.418953648602294340, -0.418908247697556750, -0.418862845745548550, -0.418817442746383220, -0.418772038700173880, -0.418726633607034830, +-0.418681227467079200, -0.418635820280420120, -0.418590412047171900, -0.418545002767447600, -0.418499592441360870, -0.418454181069024710, -0.418408768650553490, -0.418363355186060380, +-0.418317940675658860, -0.418272525119462110, -0.418227108517584380, -0.418181690870138960, -0.418136272177239250, -0.418090852438998520, -0.418045431655531040, -0.418000009826949960, +-0.417954586953368900, -0.417909163034900940, -0.417863738071660440, -0.417818312063760630, -0.417772885011314650, -0.417727456914436860, -0.417682027773240430, -0.417636597587838890, +-0.417591166358345480, -0.417545734084874550, -0.417500300767539300, -0.417454866406453300, -0.417409431001729720, -0.417363994553482940, -0.417318557061826250, -0.417273118526873100, +-0.417227678948736750, -0.417182238327531650, -0.417136796663370890, -0.417091353956368200, -0.417045910206636730, -0.417000465414290810, -0.416955019579443810, -0.416909572702208800, +-0.416864124782700300, -0.416818675821031490, -0.416773225817315960, -0.416727774771666950, -0.416682322684198970, -0.416636869555025100, -0.416591415384259140, -0.416545960172014170, +-0.416500503918404760, -0.416455046623544050, -0.416409588287545760, -0.416364128910523050, -0.416318668492590470, -0.416273207033861170, -0.416227744534448880, -0.416182280994466800, +-0.416136816414029500, -0.416091350793250050, -0.416045884132242310, -0.416000416431119400, -0.415954947689995910, -0.415909477908984970, -0.415864007088199980, -0.415818535227755410, +-0.415773062327764450, -0.415727588388340840, -0.415682113409597880, -0.415636637391650020, -0.415591160334610580, -0.415545682238593230, -0.415500203103711270, -0.415454722930079230, +-0.415409241717810350, -0.415363759467018370, -0.415318276177816580, -0.415272791850319570, -0.415227306484640510, -0.415181820080893220, -0.415136332639190920, -0.415090844159648250, +-0.415045354642378460, -0.414999864087494900, -0.414954372495112020, -0.414908879865343250, -0.414863386198302260, -0.414817891494102420, -0.414772395752858290, -0.414726898974683120, +-0.414681401159690710, -0.414635902307994410, -0.414590402419708740, -0.414544901494947050, -0.414499399533823140, -0.414453896536450320, -0.414408392502943150, -0.414362887433415040, +-0.414317381327979680, -0.414271874186750430, -0.414226366009841920, -0.414180856797367550, -0.414135346549440560, -0.414089835266175650, -0.414044322947686120, -0.413998809594085800, +-0.413953295205488070, -0.413907779782007490, -0.413862263323757470, -0.413816745830851760, -0.413771227303403820, -0.413725707741528230, -0.413680187145338330, -0.413634665514947990, +-0.413589142850470550, -0.413543619152020650, -0.413498094419711750, -0.413452568653657590, -0.413407041853971590, -0.413361514020768430, -0.413315985154161460, -0.413270455254264530, +-0.413224924321191070, -0.413179392355055690, -0.413133859355971800, -0.413088325324052870, -0.413042790259413590, -0.412997254162167260, -0.412951717032427830, -0.412906178870308730, +-0.412860639675924510, -0.412815099449388770, -0.412769558190815230, -0.412724015900317430, -0.412678472578009990, -0.412632928224006320, -0.412587382838420390, -0.412541836421365550, +-0.412496288972956540, -0.412450740493306820, -0.412405190982530260, -0.412359640440740300, -0.412314088868051650, -0.412268536264577770, -0.412222982630432170, -0.412177427965729480, +-0.412131872270583230, -0.412086315545107270, -0.412040757789415180, -0.411995199003621580, -0.411949639187839940, -0.411904078342184290, -0.411858516466767970, -0.411812953561705770, +-0.411767389627111180, -0.411721824663098150, -0.411676258669780140, -0.411630691647271900, -0.411585123595686890, -0.411539554515139130, -0.411493984405742030, -0.411448413267610390, +-0.411402841100857730, -0.411357267905597570, -0.411311693681944590, -0.411266118430012430, -0.411220542149914940, -0.411174964841765690, -0.411129386505679480, -0.411083807141769790, +-0.411038226750150560, -0.410992645330935320, -0.410947062884238930, -0.410901479410174850, -0.410855894908857100, -0.410810309380399200, -0.410764722824915940, -0.410719135242520850, +-0.410673546633327950, -0.410627956997450750, -0.410582366335004110, -0.410536774646101500, -0.410491181930856600, -0.410445588189384090, -0.410399993421797670, -0.410354397628211240, +-0.410308800808738380, -0.410263202963493940, -0.410217604092591500, -0.410172004196145080, -0.410126403274268190, -0.410080801327075750, -0.410035198354681270, -0.409989594357198840, +-0.409943989334741970, -0.409898383287425560, -0.409852776215363150, -0.409807168118668850, -0.409761558997456200, -0.409715948851840040, -0.409670337681934060, -0.409624725487852230, +-0.409579112269708110, -0.409533498027616680, -0.409487882761691510, -0.409442266472046180, -0.409396649158795590, -0.409351030822053430, -0.409305411461933670, -0.409259791078549980, +-0.409214169672017180, -0.409168547242449000, -0.409122923789959460, -0.409077299314662190, -0.409031673816672050, -0.408986047296102720, -0.408940419753068330, -0.408894791187682460, +-0.408849161600060020, -0.408803530990314630, -0.408757899358560440, -0.408712266704911120, -0.408666633029481530, -0.408620998332385350, -0.408575362613736280, -0.408529725873649220, +-0.408484088112237800, -0.408438449329616200, -0.408392809525898070, -0.408347168701198300, -0.408301526855630590, -0.408255883989309120, -0.408210240102347520, -0.408164595194860700, +-0.408118949266962410, -0.408073302318766710, -0.408027654350387400, -0.407982005361939350, -0.407936355353536230, -0.407890704325292290, -0.407845052277321150, -0.407799399209737790, +-0.407753745122655940, -0.407708090016189350, -0.407662433890452920, -0.407616776745560410, -0.407571118581625920, -0.407525459398763280, -0.407479799197087320, -0.407434137976711960, +-0.407388475737751170, -0.407342812480318840, -0.407297148204529890, -0.407251482910498010, -0.407205816598337490, -0.407160149268161960, -0.407114480920086510, -0.407068811554224860, +-0.407023141170691160, -0.406977469769599200, -0.406931797351064000, -0.406886123915199290, -0.406840449462119280, -0.406794773991937700, -0.406749097504769620, -0.406703420000728790, +-0.406657741479929000, -0.406612061942485280, -0.406566381388511420, -0.406520699818121560, -0.406475017231429590, -0.406429333628550440, -0.406383649009598000, -0.406337963374686420, +-0.406292276723929480, -0.406246589057442320, -0.406200900375338620, -0.406155210677732750, -0.406109519964738430, -0.406063828236470690, -0.406018135493043390, -0.405972441734570700, +-0.405926746961166600, -0.405881051172945980, -0.405835354370022720, -0.405789656552510700, -0.405743957720524910, -0.405698257874179240, -0.405652557013587930, -0.405606855138864850, +-0.405561152250125010, -0.405515448347482270, -0.405469743431050970, -0.405424037500944860, -0.405378330557279070, -0.405332622600167450, -0.405286913629724240, -0.405241203646063420, +-0.405195492649299940, -0.405149780639547760, -0.405104067616921080, -0.405058353581533860, -0.405012638533501170, -0.404966922472936860, -0.404921205399954850, -0.404875487314670270, +-0.404829768217196910, -0.404784048107649170, -0.404738326986140870, -0.404692604852787190, -0.404646881707701970, -0.404601157550999570, -0.404555432382793840, -0.404509706203199980, +-0.404463979012331830, -0.404418250810303750, -0.404372521597229640, -0.404326791373224580, -0.404281060138402590, -0.404235327892877920, -0.404189594636764570, -0.404143860370177580, +-0.404098125093230950, -0.404052388806038660, -0.404006651508715730, -0.403960913201376230, -0.403915173884134450, -0.403869433557104310, -0.403823692220400930, -0.403777949874138400, +-0.403732206518430950, -0.403686462153392600, -0.403640716779138540, -0.403594970395782630, -0.403549223003439320, -0.403503474602222520, -0.403457725192247480, -0.403411974773628110, +-0.403366223346478760, -0.403320470910913500, -0.403274717467047460, -0.403228963014994610, -0.403183207554869360, -0.403137451086785730, -0.403091693610858840, -0.403045935127202660, +-0.403000175635931320, -0.402954415137159900, -0.402908653631002480, -0.402862891117573400, -0.402817127596986680, -0.402771363069357570, -0.402725597534800030, -0.402679830993428520, +-0.402634063445357020, -0.402588294890700750, -0.402542525329573740, -0.402496754762090460, -0.402450983188364860, -0.402405210608512200, -0.402359437022646540, -0.402313662430882240, +-0.402267886833333420, -0.402222110230115280, -0.402176332621341840, -0.402130554007127160, -0.402084774387586550, -0.402038993762833970, -0.401993212132983950, -0.401947429498150430, +-0.401901645858448790, -0.401855861213992970, -0.401810075564897560, -0.401764288911276580, -0.401718501253245210, -0.401672712590917640, -0.401626922924408270, -0.401581132253831190, +-0.401535340579301680, -0.401489547900933770, -0.401443754218842040, -0.401397959533140560, -0.401352163843944510, -0.401306367151368140, -0.401260569455525350, -0.401214770756531610, +-0.401168971054500890, -0.401123170349547810, -0.401077368641786340, -0.401031565931331880, -0.400985762218298510, -0.400939957502800700, -0.400894151784952630, -0.400848345064869550, +-0.400802537342665630, -0.400756728618455400, -0.400710918892352890, -0.400665108164473480, -0.400619296434931380, -0.400573483703840940, -0.400527669971316450, -0.400481855237473150, +-0.400436039502425290, -0.400390222766287270, -0.400344405029173290, -0.400298586291198690, -0.400252766552477660, -0.400206945813124270, -0.400161124073253940, -0.400115301332980790, +-0.400069477592419400, -0.400023652851683900, -0.399977827110889690, -0.399932000370150920, -0.399886172629582150, -0.399840343889297510, -0.399794514149412420, -0.399748683410041050, +-0.399702851671297990, -0.399657018933297410, -0.399611185196154680, -0.399565350459983930, -0.399519514724899880, -0.399473677991016570, -0.399427840258449520, -0.399382001527312850, +-0.399336161797720750, -0.399290321069788680, -0.399244479343630830, -0.399198636619361720, -0.399152792897095650, -0.399106948176948030, -0.399061102459033030, -0.399015255743465250, +-0.398969408030358910, -0.398923559319829480, -0.398877709611991150, -0.398831858906958550, -0.398786007204845860, -0.398740154505768610, -0.398694300809840970, -0.398648446117177540, +-0.398602590427892640, -0.398556733742101600, -0.398510876059918810, -0.398465017381458340, -0.398419157706835780, -0.398373297036165310, -0.398327435369561610, -0.398281572707138930, +-0.398235709049012730, -0.398189844395297200, -0.398143978746107070, -0.398098112101556660, -0.398052244461761300, -0.398006375826835350, -0.397960506196893490, -0.397914635572049920, +-0.397868763952420210, -0.397822891338118540, -0.397777017729259660, -0.397731143125957860, -0.397685267528328560, -0.397639390936486150, -0.397593513350544770, -0.397547634770620110, +-0.397501755196826290, -0.397455874629278120, -0.397409993068089830, -0.397364110513377000, -0.397318226965253870, -0.397272342423835190, -0.397226456889235250, -0.397180570361569560, +-0.397134682840952440, -0.397088794327498610, -0.397042904821322370, -0.396997014322539310, -0.396951122831263710, -0.396905230347610270, -0.396859336871693390, -0.396813442403628590, +-0.396767546943530110, -0.396721650491512810, -0.396675753047690980, -0.396629854612180200, -0.396583955185094760, -0.396538054766549020, -0.396492153356658550, -0.396446250955537650, +-0.396400347563301170, -0.396354443180063410, -0.396308537805940000, -0.396262631441045180, -0.396216724085493800, -0.396170815739400160, -0.396124906402879950, -0.396078996076047460, +-0.396033084759017500, -0.395987172451904350, -0.395941259154823750, -0.395895344867889960, -0.395849429591217830, -0.395803513324921700, -0.395757596069117200, -0.395711677823918750, +-0.395665758589440640, -0.395619838365798560, -0.395573917153106910, -0.395527994951480440, -0.395482071761033560, -0.395436147581881950, -0.395390222414139960, -0.395344296257922390, +-0.395298369113343650, -0.395252440980519480, -0.395206511859564120, -0.395160581750592540, -0.395114650653719090, -0.395068718569059400, -0.395022785496727920, -0.394976851436839470, +-0.394930916389508500, -0.394884980354850650, -0.394839043332980310, -0.394793105324012020, -0.394747166328061340, -0.394701226345242740, -0.394655285375671070, -0.394609343419460800, +-0.394563400476727550, -0.394517456547585800, -0.394471511632150440, -0.394425565730535890, -0.394379618842857830, -0.394333670969230670, -0.394287722109769370, -0.394241772264588400, +-0.394195821433803330, -0.394149869617528790, -0.394103916815879530, -0.394057963028970060, -0.394012008256916120, -0.393966052499832130, -0.393920095757833040, -0.393874138031033270, +-0.393828179319548550, -0.393782219623493410, -0.393736258942982360, -0.393690297278130990, -0.393644334629053900, -0.393598370995866030, -0.393552406378681770, -0.393506440777616930, +-0.393460474192785960, -0.393414506624303830, -0.393368538072285000, -0.393322568536845220, -0.393276598018099060, -0.393230626516161360, -0.393184654031146720, -0.393138680563170860, +-0.393092706112348310, -0.393046730678793920, -0.393000754262622380, -0.392954776863949310, -0.392908798482889340, -0.392862819119556950, -0.392816838774067920, -0.392770857446536780, +-0.392724875137078490, -0.392678891845807620, -0.392632907572839920, -0.392586922318289950, -0.392540936082272700, -0.392494948864902660, -0.392448960666295700, -0.392402971486566330, +-0.392356981325829520, -0.392310990184199850, -0.392264998061793100, -0.392219004958723860, -0.392173010875107090, -0.392127015811057410, -0.392081019766690630, -0.392035022742121260, +-0.391989024737463940, -0.391943025752834460, -0.391897025788347400, -0.391851024844117820, -0.391805022920260200, -0.391759020016890500, -0.391713016134123240, -0.391667011272073430, +-0.391621005430855650, -0.391574998610585810, -0.391528990811378430, -0.391482982033348580, -0.391436972276610890, -0.391390961541281220, -0.391344949827474090, -0.391298937135304560, +-0.391252923464887330, -0.391206908816338180, -0.391160893189771760, -0.391114876585302700, -0.391068859003046890, -0.391022840443118860, -0.390976820905633790, -0.390930800390706270, +-0.390884778898452080, -0.390838756428986020, -0.390792732982423010, -0.390746708558877830, -0.390700683158466230, -0.390654656781302960, -0.390608629427503020, -0.390562601097181110, +-0.390516571790453070, -0.390470541507433650, -0.390424510248237820, -0.390378478012980370, -0.390332444801777090, -0.390286410614742730, -0.390240375451992360, -0.390194339313640610, +-0.390148302199803400, -0.390102264110595450, -0.390056225046131470, -0.390010185006527290, -0.389964143991897660, -0.389918102002357660, -0.389872059038022020, -0.389826015099006610, +-0.389779970185426210, -0.389733924297395840, -0.389687877435030310, -0.389641829598445400, -0.389595780787755970, -0.389549731003077100, -0.389503680244523480, -0.389457628512211110, +-0.389411575806254630, -0.389365522126769170, -0.389319467473869530, -0.389273411847671670, -0.389227355248290220, -0.389181297675840030, -0.389135239130436960, -0.389089179612195800, +-0.389043119121231740, -0.388997057657659410, -0.388950995221594880, -0.388904931813152830, -0.388858867432448460, -0.388812802079596560, -0.388766735754712990, -0.388720668457912640, +-0.388674600189310600, -0.388628530949021610, -0.388582460737161790, -0.388536389553845730, -0.388490317399188770, -0.388444244273305540, -0.388398170176312170, -0.388352095108323300, +-0.388306019069453830, -0.388259942059819730, -0.388213864079535790, -0.388167785128717140, -0.388121705207478680, -0.388075624315936340, -0.388029542454204900, -0.387983459622399660, +-0.387937375820635310, -0.387891291049027980, -0.387845205307692400, -0.387799118596743760, -0.387753030916296980, -0.387706942266468010, -0.387660852647371710, -0.387614762059123210, +-0.387568670501837460, -0.387522577975630440, -0.387476484480616950, -0.387430390016912260, -0.387384294584631190, -0.387338198183889760, -0.387292100814802860, -0.387246002477485310, +-0.387199903172053160, -0.387153802898621220, -0.387107701657304850, -0.387061599448218720, -0.387015496271479080, -0.386969392127200660, -0.386923287015498770, -0.386877180936488260, +-0.386831073890285150, -0.386784965877004390, -0.386738856896761240, -0.386692746949670540, -0.386646636035848370, -0.386600524155409630, -0.386554411308469570, -0.386508297495143040, +-0.386462182715546170, -0.386416066969793910, -0.386369950258001030, -0.386323832580283690, -0.386277713936756750, -0.386231594327535510, -0.386185473752734930, -0.386139352212471030, +-0.386093229706858780, -0.386047106236013460, -0.386000981800049940, -0.385954856399084390, -0.385908730033231730, -0.385862602702607190, -0.385816474407325750, -0.385770345147503520, +-0.385724214923255480, -0.385678083734696860, -0.385631951581942630, -0.385585818465108920, -0.385539684384310690, -0.385493549339662840, -0.385447413331281520, -0.385401276359281620, +-0.385355138423778610, -0.385308999524887290, -0.385262859662723890, -0.385216718837403330, -0.385170577049041010, -0.385124434297751780, -0.385078290583651950, -0.385032145906856360, +-0.384986000267480370, -0.384939853665638990, -0.384893706101448410, -0.384847557575023540, -0.384801408086479780, -0.384755257635932100, -0.384709106223496690, -0.384662953849288500, +-0.384616800513422510, -0.384570646216014940, -0.384524490957180780, -0.384478334737035350, -0.384432177555693700, -0.384386019413272000, -0.384339860309885260, -0.384293700245648910, +-0.384247539220677840, -0.384201377235088350, -0.384155214288995410, -0.384109050382514470, -0.384062885515760450, -0.384016719688849650, -0.383970552901897020, -0.383924385155018030, +-0.383878216448327700, -0.383832046781942220, -0.383785876155976590, -0.383739704570546290, -0.383693532025766340, -0.383647358521752910, -0.383601184058621150, -0.383555008636486010, +-0.383508832255463730, -0.383462654915669390, -0.383416476617218390, -0.383370297360225820, -0.383324117144807910, -0.383277935971079680, -0.383231753839156640, -0.383185570749153770, +-0.383139386701187410, -0.383093201695372590, -0.383047015731824760, -0.383000828810658940, -0.382954640931991550, -0.382908452095937490, -0.382862262302612280, -0.382816071552131040, +-0.382769879844610030, -0.382723687180164360, -0.382677493558909010, -0.382631298980960320, -0.382585103446433430, -0.382538906955443790, -0.382492709508106430, -0.382446511104537700, +-0.382400311744852730, -0.382354111429166980, -0.382307910157595520, -0.382261707930254710, -0.382215504747259630, -0.382169300608725780, -0.382123095514768250, -0.382076889465503390, +-0.382030682461046320, -0.381984474501512570, -0.381938265587017210, -0.381892055717676590, -0.381845844893605850, -0.381799633114920050, -0.381753420381735600, -0.381707206694167580, +-0.381660992052331560, -0.381614776456342670, -0.381568559906317220, -0.381522342402370370, -0.381476123944617720, -0.381429904533174270, -0.381383684168156490, -0.381337462849679560, +-0.381291240577858900, -0.381245017352809750, -0.381198793174648500, -0.381152568043490240, -0.381106341959450530, -0.381060114922644580, -0.381013886933188770, -0.380967657991198250, +-0.380921428096788530, -0.380875197250074900, -0.380828965451173620, -0.380782732700199970, -0.380736498997269080, -0.380690264342497360, -0.380644028735999950, -0.380597792177892470, +-0.380551554668290100, -0.380505316207309260, -0.380459076795065130, -0.380412836431673340, -0.380366595117249020, -0.380320352851908570, -0.380274109635767300, -0.380227865468940770, +-0.380181620351544130, -0.380135374283693870, -0.380089127265505140, -0.380042879297093630, -0.379996630378574510, -0.379950380510064190, -0.379904129691677970, -0.379857877923530980, +-0.379811625205739690, -0.379765371538419380, -0.379719116921685640, -0.379672861355653650, -0.379626604840439970, -0.379580347376159750, -0.379534088962928670, -0.379487829600861970, +-0.379441569290076050, -0.379395308030686270, -0.379349045822808210, -0.379302782666557090, -0.379256518562049450, -0.379210253509400520, -0.379163987508725930, -0.379117720560140980, +-0.379071452663762130, -0.379025183819704680, -0.378978914028083810, -0.378932643289016100, -0.378886371602616790, -0.378840098969001560, -0.378793825388285600, -0.378747550860585540, +-0.378701275386016610, -0.378654998964694510, -0.378608721596734420, -0.378562443282253020, -0.378516164021365450, -0.378469883814187500, -0.378423602660834470, -0.378377320561422810, +-0.378331037516067840, -0.378284753524885280, -0.378238468587990430, -0.378192182705499810, -0.378145895877528730, -0.378099608104192520, -0.378053319385607660, -0.378007029721889540, +-0.377960739113153870, -0.377914447559515860, -0.377868155061092230, -0.377821861617998130, -0.377775567230349440, -0.377729271898261390, -0.377682975621850600, -0.377636678401232330, +-0.377590380236522420, -0.377544081127836110, -0.377497781075290030, -0.377451480078999480, -0.377405178139080200, -0.377358875255647600, -0.377312571428818240, -0.377266266658707440, +-0.377219960945430920, -0.377173654289104150, -0.377127346689843660, -0.377081038147764720, -0.377034728662982880, -0.376988418235614580, -0.376942106865775230, -0.376895794553580630, +-0.376849481299146080, -0.376803167102588320, -0.376756851964022590, -0.376710535883564730, -0.376664218861330170, -0.376617900897435410, -0.376571581991995920, -0.376525262145127490, +-0.376478941356945480, -0.376432619627566520, -0.376386296957106070, -0.376339973345679810, -0.376293648793403210, -0.376247323300392960, -0.376200996866764340, -0.376154669492632820, +-0.376108341178115040, -0.376062011923326440, -0.376015681728382790, -0.375969350593399530, -0.375923018518493300, -0.375876685503779510, -0.375830351549374050, -0.375784016655392240, +-0.375737680821950860, -0.375691344049165210, -0.375645006337151250, -0.375598667686024350, -0.375552328095901220, -0.375505987566897240, -0.375459646099128300, -0.375413303692709810, +-0.375366960347758460, -0.375320616064389770, -0.375274270842719080, -0.375227924682863150, -0.375181577584937420, -0.375135229549057700, -0.375088880575339570, -0.375042530663899590, +-0.374996179814853280, -0.374949828028316560, -0.374903475304404820, -0.374857121643234810, -0.374810767044922000, -0.374764411509582280, -0.374718055037331130, -0.374671697628285230, +-0.374625339282560090, -0.374578980000271620, -0.374532619781535290, -0.374486258626467780, -0.374439896535184670, -0.374393533507801800, -0.374347169544434700, -0.374300804645200100, +-0.374254438810213470, -0.374208072039590280, -0.374161704333447360, -0.374115335691900200, -0.374068966115064680, -0.374022595603056400, -0.373976224155991970, -0.373929851773986970, +-0.373883478457157360, -0.373837104205618660, -0.373790729019487620, -0.373744352898879690, -0.373697975843910960, -0.373651597854696820, -0.373605218931354120, -0.373558839073998390, +-0.373512458282745540, -0.373466076557711140, -0.373419693899011970, -0.373373310306763570, -0.373326925781081450, -0.373280540322082470, -0.373234153929882070, -0.373187766604596350, +-0.373141378346340760, -0.373094989155232200, -0.373048599031386100, -0.373002207974918510, -0.372955815985945020, -0.372909423064582410, -0.372863029210946220, -0.372816634425152450, +-0.372770238707316680, -0.372723842057555770, -0.372677444475985160, -0.372631045962721010, -0.372584646517878810, -0.372538246141575440, -0.372491844833926440, -0.372445442595047420, +-0.372399039425055200, -0.372352635324065370, -0.372306230292193950, -0.372259824329556570, -0.372213417436270010, -0.372167009612449920, -0.372120600858212300, -0.372074191173672800, +-0.372027780558948200, -0.371981369014154130, -0.371934956539406670, -0.371888543134821390, -0.371842128800515200, -0.371795713536603620, -0.371749297343202830, -0.371702880220428360, +-0.371656462168397090, -0.371610043187224680, -0.371563623277026740, -0.371517202437920140, -0.371470780670020540, -0.371424357973443970, -0.371377934348306130, -0.371331509794723850, +-0.371285084312812820, -0.371238657902689060, -0.371192230564468260, -0.371145802298267270, -0.371099373104201770, -0.371052942982387890, -0.371006511932941150, -0.370960079955978630, +-0.370913647051615890, -0.370867213219969020, -0.370820778461153690, -0.370774342775286810, -0.370727906162484130, -0.370681468622861670, -0.370635030156535090, -0.370588590763621380, +-0.370542150444236160, -0.370495709198495170, -0.370449267026515370, -0.370402823928412340, -0.370356379904302260, -0.370309934954300810, -0.370263489078524970, -0.370217042277090400, +-0.370170594550113200, -0.370124145897709140, -0.370077696319995100, -0.370031245817086800, -0.369984794389100420, -0.369938342036151610, -0.369891888758357380, -0.369845434555833410, +-0.369798979428695880, -0.369752523377060490, -0.369706066401044200, -0.369659608500762740, -0.369613149676331850, -0.369566689927868450, -0.369520229255488390, -0.369473767659307730, +-0.369427305139442270, -0.369380841696008930, -0.369334377329123500, -0.369287912038902100, -0.369241445825460530, -0.369194978688915710, -0.369148510629383530, -0.369102041646980020, +-0.369055571741820960, -0.369009100914023450, -0.368962629163703150, -0.368916156490976310, -0.368869682895958670, -0.368823208378767200, -0.368776732939517680, -0.368730256578325980, +-0.368683779295309040, -0.368637301090582630, -0.368590821964262960, -0.368544341916465850, -0.368497860947308300, -0.368451379056906060, -0.368404896245375420, -0.368358412512832130, +-0.368311927859393150, -0.368265442285174440, -0.368218955790292070, -0.368172468374861890, -0.368125980039000990, -0.368079490782825090, -0.368033000606450500, -0.367986509509993010, +-0.367940017493569640, -0.367893524557296240, -0.367847030701288990, -0.367800535925663810, -0.367754040230537650, -0.367707543616026420, -0.367661046082245920, -0.367614547629313170, +-0.367568048257344130, -0.367521547966454920, -0.367475046756761400, -0.367428544628380700, -0.367382041581428680, -0.367335537616021500, -0.367289032732275090, -0.367242526930306510, +-0.367196020210231620, -0.367149512572166660, -0.367103004016227530, -0.367056494542531310, -0.367009984151193790, -0.366963472842331380, -0.366916960616059830, -0.366870447472496310, +-0.366823933411756680, -0.366777418433956840, -0.366730902539213810, -0.366684385727643500, -0.366637867999362270, -0.366591349354485950, -0.366544829793131690, -0.366498309315415330, +-0.366451787921453220, -0.366405265611361220, -0.366358742385256450, -0.366312218243254830, -0.366265693185472640, -0.366219167212025850, -0.366172640323031540, -0.366126112518605610, +-0.366079583798864410, -0.366033054163923840, -0.365986523613901050, -0.365939992148911990, -0.365893459769072500, -0.365846926474499730, -0.365800392265309690, -0.365753857141618680, +-0.365707321103542590, -0.365660784151198630, -0.365614246284702680, -0.365567707504171170, -0.365521167809719940, -0.365474627201466230, -0.365428085679525890, -0.365381543244015390, +-0.365334999895050580, -0.365288455632748750, -0.365241910457225700, -0.365195364368597950, -0.365148817366981350, -0.365102269452493080, -0.365055720625249160, -0.365009170885365550, +-0.364962620232959390, -0.364916068668146690, -0.364869516191043850, -0.364822962801766790, -0.364776408500432690, -0.364729853287157620, -0.364683297162057940, -0.364636740125249550, +-0.364590182176849740, -0.364543623316974490, -0.364497063545740130, -0.364450502863262750, -0.364403941269659530, -0.364357378765046420, -0.364310815349539910, -0.364264251023255880, +-0.364217685786311700, -0.364171119638823260, -0.364124552580907090, -0.364077984612679040, -0.364031415734256510, -0.363984845945755420, -0.363938275247291780, -0.363891703638982880, +-0.363845131120944740, -0.363798557693293720, -0.363751983356145950, -0.363705408109618600, -0.363658831953827750, -0.363612254888889820, -0.363565676914920810, -0.363519098032038020, +-0.363472518240357530, -0.363425937539995750, -0.363379355931068680, -0.363332773413693630, -0.363286189987986620, -0.363239605654064210, -0.363193020412042320, -0.363146434262038300, +-0.363099847204168210, -0.363053259238548090, -0.363006670365295210, -0.362960080584525670, -0.362913489896355910, -0.362866898300902020, -0.362820305798281340, -0.362773712388609840, +-0.362727118072004080, -0.362680522848580100, -0.362633926718455290, -0.362587329681745560, -0.362540731738567600, -0.362494132889037370, -0.362447533133272160, -0.362400932471388220, +-0.362354330903501890, -0.362307728429729300, -0.362261125050187820, -0.362214520764993550, -0.362167915574262530, -0.362121309478112160, -0.362074702476658520, -0.362028094570018110, +-0.361981485758307080, -0.361934876041642710, -0.361888265420141130, -0.361841653893918920, -0.361795041463092160, -0.361748428127778240, -0.361701813888093250, -0.361655198744153690, +-0.361608582696075710, -0.361561965743976700, -0.361515347887972790, -0.361468729128180510, -0.361422109464715980, -0.361375488897696610, -0.361328867427238460, -0.361282245053458180, +-0.361235621776471890, -0.361188997596396940, -0.361142372513349520, -0.361095746527445750, -0.361049119638803040, -0.361002491847537470, -0.360955863153765710, -0.360909233557603900, +-0.360862603059169400, -0.360815971658578370, -0.360769339355947460, -0.360722706151392740, -0.360676072045031660, -0.360629437036980470, -0.360582801127355630, -0.360536164316273390, +-0.360489526603851140, -0.360442887990205070, -0.360396248475451820, -0.360349608059707500, -0.360302966743089590, -0.360256324525714270, -0.360209681407697710, -0.360163037389157340, +-0.360116392470209430, -0.360069746650970470, -0.360023099931556790, -0.359976452312085750, -0.359929803792673590, -0.359883154373436930, -0.359836504054491910, -0.359789852835956100, +-0.359743200717945690, -0.359696547700577180, -0.359649893783966950, -0.359603238968232430, -0.359556583253489770, -0.359509926639855650, -0.359463269127446310, -0.359416610716379200, +-0.359369951406770580, -0.359323291198736630, -0.359276630092394910, -0.359229968087861620, -0.359183305185253380, -0.359136641384686430, -0.359089976686278340, -0.359043311090145310, +-0.358996644596404010, -0.358949977205170630, -0.358903308916562800, -0.358856639730696650, -0.358809969647688910, -0.358763298667655830, -0.358716626790714920, -0.358669954016982430, +-0.358623280346575090, -0.358576605779609090, -0.358529930316202010, -0.358483253956470130, -0.358436576700530090, -0.358389898548498180, -0.358343219500491970, -0.358296539556627660, +-0.358249858717021640, -0.358203176981791380, -0.358156494351053180, -0.358109810824923710, -0.358063126403519340, -0.358016441086957520, -0.357969754875354650, -0.357923067768827370, +-0.357876379767491980, -0.357829690871466100, -0.357783001080865970, -0.357736310395808330, -0.357689618816409540, -0.357642926342787050, -0.357596232975057330, -0.357549538713336950, +-0.357502843557742370, -0.357456147508391050, -0.357409450565399360, -0.357362752728883630, -0.357316053998961490, -0.357269354375749140, -0.357222653859363470, -0.357175952449920680, +-0.357129250147538490, -0.357082546952333160, -0.357035842864421420, -0.356989137883919730, -0.356942432010945550, -0.356895725245615300, -0.356849017588045770, -0.356802309038353250, +-0.356755599596655370, -0.356708889263068480, -0.356662178037709390, -0.356615465920694430, -0.356568752912141240, -0.356522039012166170, -0.356475324220885570, -0.356428608538417070, +-0.356381891964877070, -0.356335174500382320, -0.356288456145049230, -0.356241736898995410, -0.356195016762337280, -0.356148295735191580, -0.356101573817674710, -0.356054851009904310, +-0.356008127311996820, -0.355961402724069010, -0.355914677246237270, -0.355867950878619220, -0.355821223621331340, -0.355774495474490420, -0.355727766438212800, -0.355681036512616180, +-0.355634305697816950, -0.355587573993931590, -0.355540841401077670, -0.355494107919371690, -0.355447373548930410, -0.355400638289870290, -0.355353902142309000, -0.355307165106362950, +-0.355260427182148950, -0.355213688369783510, -0.355166948669384250, -0.355120208081067650, -0.355073466604950480, -0.355026724241149230, -0.354979980989781620, -0.354933236850964010, +-0.354886491824813350, -0.354839745911446070, -0.354792999110979780, -0.354746251423531000, -0.354699502849216640, -0.354652753388153050, -0.354606003040458030, -0.354559251806247980, +-0.354512499685639420, -0.354465746678749970, -0.354418992785696220, -0.354372238006594950, -0.354325482341562690, -0.354278725790717120, -0.354231968354174700, -0.354185210032052440, +-0.354138450824466710, -0.354091690731535240, -0.354044929753374540, -0.353998167890101520, -0.353951405141832710, -0.353904641508685780, -0.353857876990777250, -0.353811111588223980, +-0.353764345301142590, -0.353717578129650710, -0.353670810073864860, -0.353624041133901610, -0.353577271309878700, -0.353530500601912550, -0.353483729010120210, -0.353436956534618040, +-0.353390183175523950, -0.353343408932954410, -0.353296633807026360, -0.353249857797856280, -0.353203080905562020, -0.353156303130259970, -0.353109524472067230, -0.353062744931100240, +-0.353015964507476800, -0.352969183201313490, -0.352922401012727200, -0.352875617941834470, -0.352828833988753140, -0.352782049153599670, -0.352735263436490700, -0.352688476837544010, +-0.352641689356876120, -0.352594900994604000, -0.352548111750844160, -0.352501321625714510, -0.352454530619331570, -0.352407738731812250, -0.352360945963273220, -0.352314152313832230, +-0.352267357783605850, -0.352220562372711040, -0.352173766081264440, -0.352126968909383890, -0.352080170857185850, -0.352033371924787400, -0.351986572112305110, -0.351939771419856830, +-0.351892969847559080, -0.351846167395528930, -0.351799364063882900, -0.351752559852738960, -0.351705754762213550, -0.351658948792423380, -0.351612141943486220, -0.351565334215518720, +-0.351518525608637890, -0.351471716122960350, -0.351424905758603910, -0.351378094515685190, -0.351331282394321260, -0.351284469394628710, -0.351237655516725370, -0.351190840760727930, +-0.351144025126753360, -0.351097208614918330, -0.351050391225340710, -0.351003572958137060, -0.350956753813424500, -0.350909933791319680, -0.350863112891940390, -0.350816291115403360, +-0.350769468461825160, -0.350722644931323710, -0.350675820524015640, -0.350628995240018000, -0.350582169079447500, -0.350535342042421980, -0.350488514129058070, -0.350441685339472950, +-0.350394855673783150, -0.350348025132106610, -0.350301193714560030, -0.350254361421260480, -0.350207528252324600, -0.350160694207870330, -0.350113859288014310, -0.350067023492873610, +-0.350020186822564970, -0.349973349277206250, -0.349926510856914170, -0.349879671561805440, -0.349832831391997890, -0.349785990347608320, -0.349739148428753750, -0.349692305635550870, +-0.349645461968117630, -0.349598617426570780, -0.349551772011027380, -0.349504925721604130, -0.349458078558418930, -0.349411230521588620, -0.349364381611230180, -0.349317531827460390, +-0.349270681170397170, -0.349223829640157250, -0.349176977236857760, -0.349130123960615430, -0.349083269811548190, -0.349036414789772760, -0.348989558895405890, -0.348942702128565540, +-0.348895844489368450, -0.348848985977931740, -0.348802126594372150, -0.348755266338807660, -0.348708405211354990, -0.348661543212131280, -0.348614680341253370, -0.348567816598839120, +-0.348520951985005320, -0.348474086499869160, -0.348427220143547380, -0.348380352916157990, -0.348333484817817670, -0.348286615848643680, -0.348239746008752680, -0.348192875298262760, +-0.348146003717290650, -0.348099131265953540, -0.348052257944368170, -0.348005383752652610, -0.347958508690923540, -0.347911632759297820, -0.347864755957893400, -0.347817878286827140, +-0.347770999746216170, -0.347724120336177220, -0.347677240056828430, -0.347630358908286590, -0.347583476890668760, -0.347536594004091870, -0.347489710248673920, -0.347442825624531710, +-0.347395940131782380, -0.347349053770542810, -0.347302166540931050, -0.347255278443063860, -0.347208389477058450, -0.347161499643031670, -0.347114608941101580, -0.347067717371384920, +-0.347020824933998550, -0.346973931629060540, -0.346927037456687740, -0.346880142416997330, -0.346833246510106110, -0.346786349736132260, -0.346739452095192470, -0.346692553587404080, +-0.346645654212883900, -0.346598753971750000, -0.346551852864119160, -0.346504950890108740, -0.346458048049835540, -0.346411144343417580, -0.346364239770971800, -0.346317334332615410, +-0.346270428028465300, -0.346223520858639500, -0.346176612823254900, -0.346129703922428370, -0.346082794156277960, -0.346035883524920600, -0.345988972028473510, -0.345942059667053600, +-0.345895146440778960, -0.345848232349766420, -0.345801317394133280, -0.345754401573996510, -0.345707484889474060, -0.345660567340682960, -0.345613648927740440, -0.345566729650763350, +-0.345519809509869880, -0.345472888505176880, -0.345425966636801640, -0.345379043904861130, -0.345332120309473360, -0.345285195850755290, -0.345238270528824280, -0.345191344343797110, +-0.345144417295792040, -0.345097489384925960, -0.345050560611315670, -0.345003630975079410, -0.344956700476334090, -0.344909769115197050, -0.344862836891785150, -0.344815903806216520, +-0.344768969858608220, -0.344722035049077450, -0.344675099377741160, -0.344628162844717530, -0.344581225450123540, -0.344534287194076470, -0.344487348076693230, -0.344440408098092070, +-0.344393467258389870, -0.344346525557704060, -0.344299582996151430, -0.344252639573850330, -0.344205695290917600, -0.344158750147470220, -0.344111804143626410, -0.344064857279503030, +-0.344017909555217550, -0.343970960970886860, -0.343924011526629210, -0.343877061222561510, -0.343830110058801150, -0.343783158035465160, -0.343736205152671610, -0.343689251410537580, +-0.343642296809180460, -0.343595341348717110, -0.343548385029265880, -0.343501427850943670, -0.343454469813867850, -0.343407510918155520, -0.343360551163924780, -0.343313590551292620, +-0.343266629080376140, -0.343219666751293510, -0.343172703564161630, -0.343125739519098080, -0.343078774616219720, -0.343031808855644830, -0.342984842237490430, -0.342937874761873930, +-0.342890906428912350, -0.342843937238723860, -0.342796967191425610, -0.342749996287134870, -0.342703024525968740, -0.342656051908045490, -0.342609078433482090, -0.342562104102396010, +-0.342515128914904270, -0.342468152871125090, -0.342421175971175500, -0.342374198215172620, -0.342327219603234590, -0.342280240135478590, -0.342233259812021960, -0.342186278632981730, +-0.342139296598476250, -0.342092313708622530, -0.342045329963538040, -0.341998345363339780, -0.341951359908146070, -0.341904373598073960, -0.341857386433240930, -0.341810398413764040, +-0.341763409539761530, -0.341716419811350540, -0.341669429228648460, -0.341622437791772370, -0.341575445500840680, -0.341528452355970290, -0.341481458357278830, -0.341434463504883270, +-0.341387467798902000, -0.341340471239452050, -0.341293473826650540, -0.341246475560615710, -0.341199476441464700, -0.341152476469315010, -0.341105475644283730, -0.341058473966489140, +-0.341011471436048370, -0.340964468053078950, -0.340917463817697940, -0.340870458730023640, -0.340823452790173230, -0.340776445998264180, -0.340729438354413610, -0.340682429858739870, +-0.340635420511360030, -0.340588410312391680, -0.340541399261951820, -0.340494387360158910, -0.340447374607130040, -0.340400361002982320, -0.340353346547834110, -0.340306331241802540, +-0.340259315085005120, -0.340212298077559040, -0.340165280219582590, -0.340118261511192950, -0.340071241952507650, -0.340024221543643870, -0.339977200284719890, -0.339930178175852970, +-0.339883155217160560, -0.339836131408759850, -0.339789106750769230, -0.339742081243305850, -0.339695054886487270, -0.339648027680430680, -0.339600999625254360, -0.339553970721075570, +-0.339506940968011480, -0.339459910366180400, -0.339412878915699550, -0.339365846616686510, -0.339318813469258460, -0.339271779473533760, -0.339224744629629590, -0.339177708937663640, +-0.339130672397752910, -0.339083635010015980, -0.339036596774569930, -0.338989557691532440, -0.338942517761020580, -0.338895476983152870, -0.338848435358046430, -0.338801392885818950, +-0.338754349566587560, -0.338707305400470730, -0.338660260387585570, -0.338613214528049820, -0.338566167821980570, -0.338519120269496380, -0.338472071870714320, -0.338425022625751750, +-0.338377972534726960, -0.338330921597757290, -0.338283869814960280, -0.338236817186453210, -0.338189763712354490, -0.338142709392781350, -0.338095654227851480, -0.338048598217682020, +-0.338001541362391470, -0.337954483662097130, -0.337907425116916520, -0.337860365726966980, -0.337813305492366880, -0.337766244413233550, -0.337719182489684630, -0.337672119721837300, +-0.337625056109810140, -0.337577991653720270, -0.337530926353685030, -0.337483860209822910, -0.337436793222251170, -0.337389725391087360, -0.337342656716448920, -0.337295587198454150, +-0.337248516837220510, -0.337201445632865530, -0.337154373585506480, -0.337107300695261960, -0.337060226962249190, -0.337013152386585860, -0.336966076968389210, -0.336919000707777800, +-0.336871923604868890, -0.336824845659780160, -0.336777766872628890, -0.336730687243533670, -0.336683606772611670, -0.336636525459980240, -0.336589443305757960, -0.336542360310062020, +-0.336495276473010250, -0.336448191794719800, -0.336401106275309340, -0.336354019914896050, -0.336306932713597790, -0.336259844671531750, -0.336212755788816490, -0.336165666065569360, +-0.336118575501908050, -0.336071484097949900, -0.336024391853813440, -0.335977298769616020, -0.335930204845475370, -0.335883110081508730, -0.335836014477834790, -0.335788918034570780, +-0.335741820751834120, -0.335694722629743260, -0.335647623668415610, -0.335600523867968900, -0.335553423228520440, -0.335506321750188910, -0.335459219433091540, -0.335412116277346070, +-0.335365012283069970, -0.335317907450381700, -0.335270801779398660, -0.335223695270238650, -0.335176587923018960, -0.335129479737858280, -0.335082370714873850, -0.335035260854183500, +-0.334988150155904550, -0.334941038620155670, -0.334893926247054220, -0.334846813036717930, -0.334799698989264150, -0.334752584104811570, -0.334705468383477530, -0.334658351825379450, +-0.334611234430635840, -0.334564116199364160, -0.334516997131682200, -0.334469877227707320, -0.334422756487558200, -0.334375634911352190, -0.334328512499207030, -0.334281389251240240, +-0.334234265167570320, -0.334187140248314810, -0.334140014493591430, -0.334092887903517600, -0.334045760478211940, -0.333998632217791860, -0.333951503122375260, -0.333904373192079440, +-0.333857242427023140, -0.333810110827323700, -0.333762978393098600, -0.333715845124466450, -0.333668711021544660, -0.333621576084451140, -0.333574440313303240, -0.333527303708219700, +-0.333480166269317870, -0.333433027996715590, -0.333385888890530340, -0.333338748950880780, -0.333291608177884390, -0.333244466571658960, -0.333197324132321950, -0.333150180859992040, +-0.333103036754786640, -0.333055891816823710, -0.333008746046220610, -0.332961599443096060, -0.332914452007567530, -0.332867303739752430, -0.332820154639769440, -0.332773004707736130, +-0.332725853943770300, -0.332678702347989410, -0.332631549920512190, -0.332584396661456120, -0.332537242570938970, -0.332490087649078390, -0.332442931895992940, -0.332395775311800200, +-0.332348617896618010, -0.332301459650563900, -0.332254300573756490, -0.332207140666313410, -0.332159979928352390, -0.332112818359991070, -0.332065655961348070, -0.332018492732540970, +-0.331971328673687620, -0.331924163784905520, -0.331876998066313430, -0.331829831518028860, -0.331782664140169270, -0.331735495932853510, -0.331688326896198930, -0.331641157030323540, +-0.331593986335344870, -0.331546814811381650, -0.331499642458551400, -0.331452469276972030, -0.331405295266761050, -0.331358120428037250, -0.331310944760918210, -0.331263768265521730, +-0.331216590941965480, -0.331169412790368100, -0.331122233810847270, -0.331075054003520770, -0.331027873368506310, -0.330980691905922500, -0.330933509615887020, -0.330886326498517290, +-0.330839142553932210, -0.330791957782249240, -0.330744772183586390, -0.330697585758061240, -0.330650398505792480, -0.330603210426897720, -0.330556021521494990, -0.330508831789701750, +-0.330461641231636850, -0.330414449847417860, -0.330367257637162740, -0.330320064600989060, -0.330272870739015620, -0.330225676051360000, -0.330178480538140200, -0.330131284199473800, +-0.330084087035479590, -0.330036889046275150, -0.329989690231978110, -0.329942490592707250, -0.329895290128580150, -0.329848088839714840, -0.329800886726228870, -0.329753683788241100, +-0.329706480025869110, -0.329659275439230960, -0.329612070028444170, -0.329564863793627650, -0.329517656734898970, -0.329470448852376090, -0.329423240146176740, -0.329376030616419680, +-0.329328820263222520, -0.329281609086703340, -0.329234397086979710, -0.329187184264170540, -0.329139970618393400, -0.329092756149765850, -0.329045540858406930, -0.328998324744434080, +-0.328951107807965440, -0.328903890049118630, -0.328856671468012450, -0.328809452064764640, -0.328762231839493210, -0.328715010792315800, -0.328667788923351250, -0.328620566232717180, +-0.328573342720531790, -0.328526118386912540, -0.328478893231978490, -0.328431667255847160, -0.328384440458636680, -0.328337212840464630, -0.328289984401450020, -0.328242755141710420, +-0.328195525061363960, -0.328148294160528260, -0.328101062439322240, -0.328053829897863580, -0.328006596536269900, -0.327959362354660170, -0.327912127353152010, -0.327864891531863540, +-0.327817654890912470, -0.327770417430417630, -0.327723179150496760, -0.327675940051267930, -0.327628700132848840, -0.327581459395358430, -0.327534217838914340, -0.327486975463634760, +-0.327439732269637240, -0.327392488257040870, -0.327345243425963270, -0.327297997776522580, -0.327250751308836460, -0.327203504023023840, -0.327156255919202500, -0.327109006997490130, +-0.327061757258005630, -0.327014506700866740, -0.326967255326191530, -0.326920003134097860, -0.326872750124704510, -0.326825496298129350, -0.326778241654490430, -0.326730986193905500, +-0.326683729916493470, -0.326636472822372180, -0.326589214911659650, -0.326541956184473740, -0.326494696640933280, -0.326447436281156130, -0.326400175105260370, -0.326352913113363790, +-0.326305650305585280, -0.326258386682042660, -0.326211122242853700, -0.326163856988137320, -0.326116590918011320, -0.326069324032593810, -0.326022056332002600, -0.325974787816356640, +-0.325927518485773730, -0.325880248340371990, -0.325832977380269280, -0.325785705605584510, -0.325738433016435460, -0.325691159612940320, -0.325643885395216880, -0.325596610363384160, +-0.325549334517559910, -0.325502057857862290, -0.325454780384409170, -0.325407502097319450, -0.325360222996711020, -0.325312943082702030, -0.325265662355410210, -0.325218380814954740, +-0.325171098461453260, -0.325123815295023600, -0.325076531315784840, -0.325029246523854790, -0.324981960919351610, -0.324934674502393050, -0.324887387273098290, -0.324840099231585020, +-0.324792810377971530, -0.324745520712375610, -0.324698230234916290, -0.324650938945711340, -0.324603646844879130, -0.324556353932537340, -0.324509060208805100, -0.324461765673800200, +-0.324414470327640870, -0.324367174170444970, -0.324319877202331520, -0.324272579423418420, -0.324225280833823400, -0.324177981433665660, -0.324130681223062930, -0.324083380202133510, +-0.324036078370995180, -0.323988775729767140, -0.323941472278567120, -0.323894168017513420, -0.323846862946723880, -0.323799557066317630, -0.323752250376412480, -0.323704942877126700, +-0.323657634568578100, -0.323610325450885860, -0.323563015524167830, -0.323515704788542250, -0.323468393244127020, -0.323421080891041160, -0.323373767729402630, -0.323326453759329280, +-0.323279138980940180, -0.323231823394353250, -0.323184506999686760, -0.323137189797058580, -0.323089871786587880, -0.323042552968392460, -0.322995233342590670, -0.322947912909300360, +-0.322900591668640710, -0.322853269620729580, -0.322805946765685250, -0.322758623103625690, -0.322711298634669960, -0.322663973358935980, -0.322616647276542050, -0.322569320387606110, +-0.322521992692247240, -0.322474664190583460, -0.322427334882732560, -0.322380004768813730, -0.322332673848944930, -0.322285342123244390, -0.322238009591830130, -0.322190676254821230, +-0.322143342112335640, -0.322096007164491720, -0.322048671411407360, -0.322001334853201760, -0.321953997489992760, -0.321906659321898820, -0.321859320349037800, -0.321811980571528880, +-0.321764639989490010, -0.321717298603039550, -0.321669956412295450, -0.321622613417376860, -0.321575269618401720, -0.321527925015488440, -0.321480579608754870, -0.321433233398320310, +-0.321385886384302650, -0.321338538566819880, -0.321291189945991150, -0.321243840521934500, -0.321196490294768210, -0.321149139264610250, -0.321101787431579910, -0.321054434795795100, +-0.321007081357374160, -0.320959727116435110, -0.320912372073097200, -0.320865016227478320, -0.320817659579696930, -0.320770302129870950, -0.320722943878119670, -0.320675584824560990, +-0.320628224969313370, -0.320580864312494720, -0.320533502854224380, -0.320486140594620270, -0.320438777533800400, -0.320391413671884010, -0.320344049008989050, -0.320296683545234000, +-0.320249317280736800, -0.320201950215616700, -0.320154582349991780, -0.320107213683980370, -0.320059844217700560, -0.320012473951271530, -0.319965102884811280, -0.319917731018438290, +-0.319870358352270570, -0.319822984886427350, -0.319775610621026720, -0.319728235556187010, -0.319680859692026310, -0.319633483028663900, -0.319586105566217750, -0.319538727304805930, +-0.319491348244547720, -0.319443968385561110, -0.319396587727964590, -0.319349206271876180, -0.319301824017415190, -0.319254440964699630, -0.319207057113848000, -0.319159672464978280, +-0.319112287018209760, -0.319064900773660560, -0.319017513731449150, -0.318970125891693490, -0.318922737254512920, -0.318875347820025520, -0.318827957588349810, -0.318780566559603680, +-0.318733174733906610, -0.318685782111376600, -0.318638388692132180, -0.318590994476291300, -0.318543599463973370, -0.318496203655296460, -0.318448807050378590, -0.318401409649339160, +-0.318354011452296190, -0.318306612459368200, -0.318259212670673250, -0.318211812086330700, -0.318164410706458620, -0.318117008531175470, -0.318069605560599430, -0.318022201794849800, +-0.317974797234044650, -0.317927391878302490, -0.317879985727741400, -0.317832578782480830, -0.317785171042638810, -0.317737762508333800, -0.317690353179684030, -0.317642943056808790, +-0.317595532139826160, -0.317548120428854270, -0.317500707924012530, -0.317453294625419050, -0.317405880533192300, -0.317358465647450410, -0.317311049968312770, -0.317263633495897530, +-0.317216216230323260, -0.317168798171707960, -0.317121379320171090, -0.317073959675830800, -0.317026539238805580, -0.316979118009213580, -0.316931695987174240, -0.316884273172805650, +-0.316836849566226380, -0.316789425167554590, -0.316741999976909610, -0.316694573994409640, -0.316647147220172840, -0.316599719654318600, -0.316552291296964990, -0.316504862148230700, +-0.316457432208233860, -0.316410001477093860, -0.316362569954928790, -0.316315137641857370, -0.316267704537997630, -0.316220270643469080, -0.316172835958389850, -0.316125400482878520, +-0.316077964217053250, -0.316030527161033530, -0.315983089314937520, -0.315935650678883740, -0.315888211252990380, -0.315840771037376960, -0.315793330032161590, -0.315745888237462520, +-0.315698445653399110, -0.315651002280089580, -0.315603558117652560, -0.315556113166206240, -0.315508667425870030, -0.315461220896762150, -0.315413773579001240, -0.315366325472705430, +-0.315318876577994290, -0.315271426894985940, -0.315223976423799010, -0.315176525164551690, -0.315129073117363550, -0.315081620282352650, -0.315034166659637740, -0.314986712249337000, +-0.314939257051569890, -0.314891801066454650, -0.314844344294109900, -0.314796886734653840, -0.314749428388206020, -0.314701969254884640, -0.314654509334807870, -0.314607048628095300, +-0.314559587134865040, -0.314512124855235890, -0.314464661789325920, -0.314417197937254810, -0.314369733299140640, -0.314322267875102150, -0.314274801665257560, -0.314227334669726410, +-0.314179866888626920, -0.314132398322077790, -0.314084928970197190, -0.314037458833104740, -0.313989987910918590, -0.313942516203757520, -0.313895043711739710, -0.313847570434984680, +-0.313800096373610780, -0.313752621527736200, -0.313705145897480500, -0.313657669482961920, -0.313610192284299150, -0.313562714301610480, -0.313515235535015480, -0.313467755984632390, +-0.313420275650579890, -0.313372794532976280, -0.313325312631941080, -0.313277829947592680, -0.313230346480049600, -0.313182862229430310, -0.313135377195854270, -0.313087891379439760, +-0.313040404780305540, -0.312992917398569880, -0.312945429234352370, -0.312897940287771290, -0.312850450558944890, -0.312802960047992800, -0.312755468755033350, -0.312707976680185180, +-0.312660483823566700, -0.312612990185297370, -0.312565495765495640, -0.312518000564280090, -0.312470504581769170, -0.312423007818082410, -0.312375510273338100, -0.312328011947655030, +-0.312280512841151490, -0.312233012953947120, -0.312185512286160200, -0.312138010837909540, -0.312090508609313370, -0.312043005600491360, -0.311995501811561880, -0.311947997242643600, +-0.311900491893854940, -0.311852985765315450, -0.311805478857143490, -0.311757971169457470, -0.311710462702376900, -0.311662953456020130, -0.311615443430506070, -0.311567932625952890, +-0.311520421042480340, -0.311472908680206720, -0.311425395539250860, -0.311377881619731070, -0.311330366921767020, -0.311282851445477020, -0.311235335190979900, -0.311187818158394030, +-0.311140300347839020, -0.311092781759433280, -0.311045262393295610, -0.310997742249544300, -0.310950221328299080, -0.310902699629678310, -0.310855177153800400, -0.310807653900784910, +-0.310760129870750360, -0.310712605063815430, -0.310665079480098580, -0.310617553119719450, -0.310570025982796430, -0.310522498069448370, -0.310474969379793630, -0.310427439913951890, +-0.310379909672041540, -0.310332378654181400, -0.310284846860489900, -0.310237314291086750, -0.310189780946090290, -0.310142246825619360, -0.310094711929792380, -0.310047176258729070, +-0.309999639812547800, -0.309952102591367070, -0.309904564595306460, -0.309857025824484430, -0.309809486279019830, -0.309761945959031120, -0.309714404864637920, -0.309666862995958750, +-0.309619320353112400, -0.309571776936217350, -0.309524232745393260, -0.309476687780758600, -0.309429142042432210, -0.309381595530532570, -0.309334048245179350, -0.309286500186491010, +-0.309238951354586400, -0.309191401749584040, -0.309143851371603550, -0.309096300220763450, -0.309048748297182150, -0.309001195600979440, -0.308953642132273720, -0.308906087891183900, +-0.308858532877828440, -0.308810977092327080, -0.308763420534798270, -0.308715863205360870, -0.308668305104133460, -0.308620746231235640, -0.308573186586786010, -0.308525626170903400, +-0.308478064983706280, -0.308430503025314440, -0.308382940295846340, -0.308335376795420890, -0.308287812524156550, -0.308240247482173100, -0.308192681669589070, -0.308145115086523310, +-0.308097547733094390, -0.308049979609421990, -0.308002410715624620, -0.307954841051820800, -0.307907270618130340, -0.307859699414671670, -0.307812127441563780, -0.307764554698925110, +-0.307716981186875460, -0.307669406905533400, -0.307621831855017850, -0.307574256035447250, -0.307526679446941450, -0.307479102089618930, -0.307431523963598690, -0.307383945068999190, +-0.307336365405940280, -0.307288784974540430, -0.307241203774918650, -0.307193621807193400, -0.307146039071484520, -0.307098455567910540, -0.307050871296590030, -0.307003286257642730, +-0.306955700451187250, -0.306908113877342510, -0.306860526536227030, -0.306812938427960700, -0.306765349552661990, -0.306717759910449920, -0.306670169501443050, -0.306622578325761120, +-0.306574986383522820, -0.306527393674846990, -0.306479800199852270, -0.306432205958658500, -0.306384610951384200, -0.306337015178148380, -0.306289418639069560, -0.306241821334267640, +-0.306194223263861200, -0.306146624427968750, -0.306099024826710140, -0.306051424460204000, -0.306003823328569290, -0.305956221431924640, -0.305908618770389770, -0.305861015344083440, +-0.305813411153124490, -0.305765806197631660, -0.305718200477724690, -0.305670593993522250, -0.305622986745143320, -0.305575378732706520, -0.305527769956331630, -0.305480160416137400, +-0.305432550112242680, -0.305384939044766210, -0.305337327213827840, -0.305289714619546130, -0.305242101262040100, -0.305194487141428440, -0.305146872257830990, -0.305099256611366330, +-0.305051640202153080, -0.305004023030311210, -0.304956405095959280, -0.304908786399216310, -0.304861166940200930, -0.304813546719033100, -0.304765925735831390, -0.304718303990714870, +-0.304670681483802160, -0.304623058215213180, -0.304575434185066500, -0.304527809393481290, -0.304480183840576120, -0.304432557526470910, -0.304384930451284340, -0.304337302615135420, +-0.304289674018142780, -0.304242044660426430, -0.304194414542104940, -0.304146783663297000, -0.304099152024122580, -0.304051519624700230, -0.304003886465149030, -0.303956252545587780, +-0.303908617866136270, -0.303860982426913230, -0.303813346228037740, -0.303765709269628430, -0.303718071551805300, -0.303670433074687000, -0.303622793838392580, -0.303575153843040790, +-0.303527513088751530, -0.303479871575643490, -0.303432229303835730, -0.303384586273447000, -0.303336942484597250, -0.303289297937405110, -0.303241652631989320, -0.303194006568469840, +-0.303146359746965300, -0.303098712167594870, -0.303051063830477310, -0.303003414735732450, -0.302955764883479030, -0.302908114273836240, -0.302860462906922700, -0.302812810782858490, +-0.302765157901762230, -0.302717504263753050, -0.302669849868949680, -0.302622194717472150, -0.302574538809439080, -0.302526882144969700, -0.302479224724182700, -0.302431566547198050, +-0.302383907614134470, -0.302336247925111160, -0.302288587480246780, -0.302240926279661310, -0.302193264323473600, -0.302145601611802260, -0.302097938144767380, -0.302050273922487620, +-0.302002608945082180, -0.301954943212669800, -0.301907276725370490, -0.301859609483302980, -0.301811941486586470, -0.301764272735339620, -0.301716603229682580, -0.301668932969734020, +-0.301621261955613120, -0.301573590187438620, -0.301525917665330550, -0.301478244389407730, -0.301430570359789320, -0.301382895576594030, -0.301335220039941900, -0.301287543749951760, +-0.301239866706742300, -0.301192188910433640, -0.301144510361144480, -0.301096831058994040, -0.301049151004101120, -0.301001470196585740, -0.300953788636566690, -0.300906106324163150, +-0.300858423259493910, -0.300810739442679050, -0.300763054873837370, -0.300715369553088030, -0.300667683480549840, -0.300619996656342870, -0.300572309080585910, -0.300524620753398140, +-0.300476931674898470, -0.300429241845206860, -0.300381551264442100, -0.300333859932723100, -0.300286167850169870, -0.300238475016901150, -0.300190781433036350, -0.300143087098694080, +-0.300095392013994540, -0.300047696179056580, -0.299999999593999310, -0.299952302258941650, -0.299904604174003660, -0.299856905339304150, -0.299809205754962340, -0.299761505421097140, +-0.299713804337828570, -0.299666102505275530, -0.299618399923557210, -0.299570696592792450, -0.299522992513101380, -0.299475287684602850, -0.299427582107415660, -0.299379875781659980, +-0.299332168707454550, -0.299284460884918720, -0.299236752314171350, -0.299189042995332440, -0.299141332928521020, -0.299093622113856210, -0.299045910551456910, -0.298998198241443300, +-0.298950485183934190, -0.298902771379048800, -0.298855056826906160, -0.298807341527626220, -0.298759625481327950, -0.298711908688130630, -0.298664191148153120, -0.298616472861515550, +-0.298568753828336810, -0.298521034048736140, -0.298473313522832520, -0.298425592250746000, -0.298377870232595490, -0.298330147468499900, -0.298282423958579400, -0.298234699702952800, +-0.298186974701739440, -0.298139248955058220, -0.298091522463029330, -0.298043795225771620, -0.297996067243404440, -0.297948338516046630, -0.297900609043818430, -0.297852878826838700, +-0.297805147865226770, -0.297757416159101560, -0.297709683708583190, -0.297661950513790690, -0.297614216574843220, -0.297566481891859860, -0.297518746464960680, -0.297471010294264650, +-0.297423273379890660, -0.297375535721958910, -0.297327797320588340, -0.297280058175898250, -0.297232318288007610, -0.297184577657036600, -0.297136836283104110, -0.297089094166329560, +-0.297041351306831850, -0.296993607704731210, -0.296945863360146500, -0.296898118273197180, -0.296850372444002090, -0.296802625872681520, -0.296754878559354400, -0.296707130504140050, +-0.296659381707157500, -0.296611632168526870, -0.296563881888367190, -0.296516130866797340, -0.296468379103937640, -0.296420626599906980, -0.296372873354824710, -0.296325119368809900, +-0.296277364641982680, -0.296229609174462060, -0.296181852966367400, -0.296134096017817650, -0.296086338328933160, -0.296038579899832790, -0.295990820730635980, -0.295943060821461660, +-0.295895300172430150, -0.295847538783660380, -0.295799776655271740, -0.295752013787383250, -0.295704250180115150, -0.295656485833586450, -0.295608720747916500, -0.295560954923224370, +-0.295513188359630200, -0.295465421057253150, -0.295417653016212030, -0.295369884236627240, -0.295322114718617800, -0.295274344462303000, -0.295226573467801960, -0.295178801735234860, +-0.295131029264720790, -0.295083256056379140, -0.295035482110328930, -0.294987707426690450, -0.294939932005582660, -0.294892155847125080, -0.294844378951436670, -0.294796601318637720, +-0.294748822948847300, -0.294701043842184820, -0.294653263998769290, -0.294605483418721060, -0.294557702102159090, -0.294509920049202400, -0.294462137259971390, -0.294414353734585020, +-0.294366569473162810, -0.294318784475823710, -0.294270998742688080, -0.294223212273874930, -0.294175425069503780, -0.294127637129693640, -0.294079848454564810, -0.294032059044236350, +-0.293984268898827780, -0.293936478018458070, -0.293888686403247670, -0.293840894053315480, -0.293793100968781080, -0.293745307149763490, -0.293697512596383050, -0.293649717308758880, +-0.293601921287009960, -0.293554124531256620, -0.293506327041618050, -0.293458528818213600, -0.293410729861162460, -0.293362930170584850, -0.293315129746599960, -0.293267328589327250, +-0.293219526698885740, -0.293171724075395880, -0.293123920718976750, -0.293076116629747750, -0.293028311807828070, -0.292980506253337990, -0.292932699966396700, -0.292884892947123670, +-0.292837085195637950, -0.292789276712059900, -0.292741467496508700, -0.292693657549103430, -0.292645846869964420, -0.292598035459210810, -0.292550223316962070, -0.292502410443337360, +-0.292454596838457090, -0.292406782502440290, -0.292358967435406570, -0.292311151637474950, -0.292263335108765900, -0.292215517849398530, -0.292167699859492370, -0.292119881139166480, +-0.292072061688541380, -0.292024241507736090, -0.291976420596870180, -0.291928598956062820, -0.291880776585434430, -0.291832953485104020, -0.291785129655191270, -0.291737305095815250, +-0.291689479807096420, -0.291641653789153850, -0.291593827042106790, -0.291545999566075520, -0.291498171361179280, -0.291450342427537590, -0.291402512765269630, -0.291354682374495800, +-0.291306851255335290, -0.291259019407907660, -0.291211186832332050, -0.291163353528728910, -0.291115519497217310, -0.291067684737917000, -0.291019849250947040, -0.290972013036427830, +-0.290924176094478630, -0.290876338425218980, -0.290828500028768030, -0.290780660905246290, -0.290732821054772880, -0.290684980477467050, -0.290637139173449130, -0.290589297142838380, +-0.290541454385754410, -0.290493610902316350, -0.290445766692644660, -0.290397921756858580, -0.290350076095077740, -0.290302229707421260, -0.290254382594009600, -0.290206534754962000, +-0.290158686190398090, -0.290110836900436990, -0.290062986885199270, -0.290015136144804060, -0.289967284679371000, -0.289919432489019300, -0.289871579573869440, -0.289823725934040650, +-0.289775871569652120, -0.289728016480824360, -0.289680160667676550, -0.289632304130328310, -0.289584446868898890, -0.289536588883508810, -0.289488730174277230, -0.289440870741323850, +-0.289393010584767800, -0.289345149704729740, -0.289297288101328760, -0.289249425774684540, -0.289201562724916370, -0.289153698952144710, -0.289105834456488800, -0.289057969238068260, +-0.289010103297002440, -0.288962236633411750, -0.288914369247415480, -0.288866501139133260, -0.288818632308684380, -0.288770762756189350, -0.288722892481767410, -0.288675021485537810, +-0.288627149767621110, -0.288579277328136540, -0.288531404167203740, -0.288483530284942000, -0.288435655681471890, -0.288387780356912590, -0.288339904311383900, -0.288292027545004990, +-0.288244150057896440, -0.288196271850177540, -0.288148392921967920, -0.288100513273386930, -0.288052632904555070, -0.288004751815591600, -0.287956870006616290, -0.287908987477748350, +-0.287861104229108380, -0.287813220260815680, -0.287765335572989440, -0.287717450165750340, -0.287669564039217620, -0.287621677193510950, -0.287573789628749690, -0.287525901345054350, +-0.287478012342544280, -0.287430122621339160, -0.287382232181558340, -0.287334341023322340, -0.287286449146750500, -0.287238556551962560, -0.287190663239077770, -0.287142769208216740, +-0.287094874459498830, -0.287046978993043660, -0.286999082808970680, -0.286951185907400430, -0.286903288288452190, -0.286855389952245300, -0.286807490898900340, -0.286759591128536660, +-0.286711690641274000, -0.286663789437231750, -0.286615887516530390, -0.286567984879289310, -0.286520081525628300, -0.286472177455666670, -0.286424272669524970, -0.286376367167322620, +-0.286328460949179350, -0.286280554015214520, -0.286232646365548680, -0.286184738000301250, -0.286136828919592020, -0.286088919123540230, -0.286041008612266610, -0.285993097385890460, +-0.285945185444531120, -0.285897272788309230, -0.285849359417344180, -0.285801445331755780, -0.285753530531663300, -0.285705615017187390, -0.285657698788447490, -0.285609781845563290, +-0.285561864188654260, -0.285513945817840950, -0.285466026733242840, -0.285418106934979600, -0.285370186423170690, -0.285322265197936740, -0.285274343259397160, -0.285226420607671670, +-0.285178497242879690, -0.285130573165141950, -0.285082648374577750, -0.285034722871306930, -0.284986796655448900, -0.284938869727124290, -0.284890942086452490, -0.284843013733552920, +-0.284795084668546250, -0.284747154891551830, -0.284699224402689580, -0.284651293202078830, -0.284603361289840210, -0.284555428666093240, -0.284507495330957700, -0.284459561284553020, +-0.284411626526999810, -0.284363691058417580, -0.284315754878926070, -0.284267817988644760, -0.284219880387694360, -0.284171942076194230, -0.284124003054264270, -0.284076063322023900, +-0.284028122879593730, -0.283980181727093330, -0.283932239864642000, -0.283884297292360480, -0.283836354010368270, -0.283788410018785130, -0.283740465317730560, -0.283692519907325250, +-0.283644573787688650, -0.283596626958940610, -0.283548679421200540, -0.283500731174589240, -0.283452782219226100, -0.283404832555231020, -0.283356882182723420, -0.283308931101824040, +-0.283260979312652320, -0.283213026815328170, -0.283165073609971010, -0.283117119696701610, -0.283069165075639400, -0.283021209746903870, -0.282973253710615710, -0.282925296966894450, +-0.282877339515859920, -0.282829381357631640, -0.282781422492330290, -0.282733462920075450, -0.282685502640986910, -0.282637541655184180, -0.282589579962788050, -0.282541617563917940, +-0.282493654458693790, -0.282445690647235070, -0.282397726129662570, -0.282349760906095760, -0.282301794976654590, -0.282253828341458400, -0.282205861000628170, -0.282157892954283230, +-0.282109924202543550, -0.282061954745528640, -0.282013984583359300, -0.281966013716154980, -0.281918042144035210, -0.281870069867120760, -0.281822096885531110, -0.281774123199386270, +-0.281726148808805640, -0.281678173713910070, -0.281630197914819080, -0.281582221411652620, -0.281534244204530160, -0.281486266293572480, -0.281438287678899170, -0.281390308360630170, +-0.281342328338884950, -0.281294347613784300, -0.281246366185447790, -0.281198384053995390, -0.281150401219546600, -0.281102417682222220, -0.281054433442141820, -0.281006448499424910, +-0.280958462854192290, -0.280910476506563530, -0.280862489456658540, -0.280814501704596930, -0.280766513250499450, -0.280718524094485720, -0.280670534236675710, -0.280622543677188920, +-0.280574552416146210, -0.280526560453667080, -0.280478567789871570, -0.280430574424879180, -0.280382580358810810, -0.280334585591785980, -0.280286590123924710, -0.280238593955346560, +-0.280190597086172280, -0.280142599516521540, -0.280094601246513920, -0.280046602276270150, -0.279998602605909920, -0.279950602235553180, -0.279902601165319450, -0.279854599395329700, +-0.279806596925703480, -0.279758593756560700, -0.279710589888021060, -0.279662585320205330, -0.279614580053233200, -0.279566574087224570, -0.279518567422299080, -0.279470560058577620, +-0.279422551996179710, -0.279374543235225480, -0.279326533775834440, -0.279278523618127490, -0.279230512762224210, -0.279182501208244280, -0.279134488956308490, -0.279086476006536470, +-0.279038462359048280, -0.278990448013963500, -0.278942432971403030, -0.278894417231486450, -0.278846400794333870, -0.278798383660064820, -0.278750365828800250, -0.278702347300659790, +-0.278654328075763400, -0.278606308154230820, -0.278558287536182890, -0.278510266221739240, -0.278462244211019890, -0.278414221504144580, -0.278366198101234090, -0.278318174002408100, +-0.278270149207786700, -0.278222123717489440, -0.278174097531637350, -0.278126070650350050, -0.278078043073747120, -0.278030014801949440, -0.277981985835076830, -0.277933956173249170, +-0.277885925816586220, -0.277837894765208930, -0.277789863019236860, -0.277741830578790090, -0.277693797443988370, -0.277645763614952580, -0.277597729091802410, -0.277549693874657890, +-0.277501657963638680, -0.277453621358865750, -0.277405584060458840, -0.277357546068537910, -0.277309507383222690, -0.277261468004634140, -0.277213427932891940, -0.277165387168115670, +-0.277117345710426450, -0.277069303559943800, -0.277021260716787950, -0.276973217181078480, -0.276925172952936390, -0.276877128032481380, -0.276829082419833560, -0.276781036115112620, +-0.276732989118439470, -0.276684941429933880, -0.276636893049715950, -0.276588843977905340, -0.276540794214623020, -0.276492743759988780, -0.276444692614122630, -0.276396640777144320, +-0.276348588249174850, -0.276300535030333920, -0.276252481120741190, -0.276204426520517740, -0.276156371229783150, -0.276108315248657700, -0.276060258577261020, -0.276012201215714130, +-0.275964143164136700, -0.275916084422648920, -0.275868024991370530, -0.275819964870422480, -0.275771904059924520, -0.275723842559996820, -0.275675780370759070, -0.275627717492332280, +-0.275579653924836190, -0.275531589668391030, -0.275483524723116380, -0.275435459089133420, -0.275387392766561770, -0.275339325755521670, -0.275291258056132800, -0.275243189668516240, +-0.275195120592791660, -0.275147050829078920, -0.275098980377498910, -0.275050909238171490, -0.275002837411216780, -0.274954764896754580, -0.274906691694905890, -0.274858617805790460, +-0.274810543229528470, -0.274762467966239710, -0.274714392016045190, -0.274666315379064720, -0.274618238055418410, -0.274570160045226110, -0.274522081348608840, -0.274474001965686390, +-0.274425921896578880, -0.274377841141406180, -0.274329759700289330, -0.274281677573348040, -0.274233594760702140, -0.274185511262472650, -0.274137427078779420, -0.274089342209742630, +-0.274041256655482010, -0.273993170416118700, -0.273945083491772490, -0.273896995882563500, -0.273848907588611690, -0.273800818610037970, -0.273752728946962230, -0.273704638599504670, +-0.273656547567785070, -0.273608455851924500, -0.273560363452042820, -0.273512270368260260, -0.273464176600696550, -0.273416082149472880, -0.273367987014708990, -0.273319891196524670, +-0.273271794695041090, -0.273223697510378010, -0.273175599642655640, -0.273127501091993910, -0.273079401858513810, -0.273031301942335210, -0.272983201343578400, -0.272935100062363100, +-0.272886998098810510, -0.272838895453040410, -0.272790792125173100, -0.272742688115328370, -0.272694583423627350, -0.272646478050189880, -0.272598371995136150, -0.272550265258586110, +-0.272502157840660840, -0.272454049741480190, -0.272405940961163940, -0.272357831499833340, -0.272309721357608110, -0.272261610534608570, -0.272213499030954600, -0.272165386846767280, +-0.272117273982166510, -0.272069160437272580, -0.272021046212205300, -0.271972931307085830, -0.271924815722034030, -0.271876699457170190, -0.271828582512614160, -0.271780464888487120, +-0.271732346584908910, -0.271684227601999840, -0.271636107939879800, -0.271587987598669870, -0.271539866578490000, -0.271491744879460480, -0.271443622501701120, -0.271395499445333140, +-0.271347375710476460, -0.271299251297250850, -0.271251126205777630, -0.271203000436176510, -0.271154873988567910, -0.271106746863071730, -0.271058619059809050, -0.271010490578899870, +-0.270962361420464480, -0.270914231584622690, -0.270866101071495780, -0.270817969881203660, -0.270769838013866560, -0.270721705469604450, -0.270673572248538550, -0.270625438350788670, +-0.270577303776475210, -0.270529168525718070, -0.270481032598638430, -0.270432895995356190, -0.270384758715991270, -0.270336620760664950, -0.270288482129497020, -0.270240342822607890, +-0.270192202840117470, -0.270144062182147040, -0.270095920848816400, -0.270047778840245940, -0.269999636156555640, -0.269951492797866620, -0.269903348764298940, -0.269855204055972850, +-0.269807058673008360, -0.269758912615526590, -0.269710765883647560, -0.269662618477491680, -0.269614470397178730, -0.269566321642830060, -0.269518172214565640, -0.269470022112505310, +-0.269421871336770370, -0.269373719887480770, -0.269325567764756800, -0.269277414968718540, -0.269229261499487170, -0.269181107357182650, -0.269132952541925370, -0.269084797053835260, +-0.269036640893033590, -0.268988484059640260, -0.268940326553775810, -0.268892168375560070, -0.268844009525114340, -0.268795850002558620, -0.268747689808013220, -0.268699528941598210, +-0.268651367403434760, -0.268603205193642950, -0.268555042312343120, -0.268506878759655230, -0.268458714535700580, -0.268410549640599130, -0.268362384074470880, -0.268314217837437140, +-0.268266050929617810, -0.268217883351133330, -0.268169715102103800, -0.268121546182650330, -0.268073376592893040, -0.268025206332952290, -0.267977035402948090, -0.267928863803001740, +-0.267880691533233240, -0.267832518593763000, -0.267784344984711040, -0.267736170706198650, -0.267687995758345790, -0.267639820141273020, -0.267591643855100200, -0.267543466899948730, +-0.267495289275938570, -0.267447110983189800, -0.267398932021823690, -0.267350752391960210, -0.267302572093719830, -0.267254391127222660, -0.267206209492589890, -0.267158027189941580, +-0.267109844219398260, -0.267061660581079830, -0.267013476275107740, -0.266965291301601960, -0.266917105660682890, -0.266868919352470700, -0.266820732377086590, -0.266772544734650670, +-0.266724356425283360, -0.266676167449104770, -0.266627977806236200, -0.266579787496797670, -0.266531596520909190, -0.266483404878692210, -0.266435212570266700, -0.266387019595753170, +-0.266338825955271640, -0.266290631648943510, -0.266242436676888740, -0.266194241039227950, -0.266146044736081060, -0.266097847767569510, -0.266049650133813380, -0.266001451834933070, +-0.265953252871048760, -0.265905053242281700, -0.265856852948752000, -0.265808651990580180, -0.265760450367886310, -0.265712248080791750, -0.265664045129416600, -0.265615841513880850, +-0.265567637234305930, -0.265519432290811930, -0.265471226683519360, -0.265423020412548280, -0.265374813478020110, -0.265326605880054860, -0.265278397618773140, -0.265230188694294990, +-0.265181979106741740, -0.265133768856233630, -0.265085557942891010, -0.265037346366834130, -0.264989134128184310, -0.264940921227061640, -0.264892707663586640, -0.264844493437879470, +-0.264796278550061490, -0.264748063000252830, -0.264699846788574000, -0.264651629915145130, -0.264603412380087550, -0.264555194183521520, -0.264506975325567050, -0.264458755806345590, +-0.264410535625977220, -0.264362314784582500, -0.264314093282281560, -0.264265871119195860, -0.264217648295445470, -0.264169424811150910, -0.264121200666432410, -0.264072975861411320, +-0.264024750396207820, -0.263976524270942370, -0.263928297485735260, -0.263880070040707790, -0.263831841935980140, -0.263783613171672930, -0.263735383747906230, -0.263687153664801500, +-0.263638922922478870, -0.263590691521058520, -0.263542459460661900, -0.263494226741409100, -0.263445993363420730, -0.263397759326816970, -0.263349524631719180, -0.263301289278247640, +-0.263253053266522870, -0.263204816596665000, -0.263156579268795540, -0.263108341283034670, -0.263060102639502910, -0.263011863338320440, -0.262963623379608770, -0.262915382763488080, +-0.262867141490078890, -0.262818899559501440, -0.262770656971877130, -0.262722413727326190, -0.262674169825968810, -0.262625925267926390, -0.262577680053319220, -0.262529434182267820, +-0.262481187654892370, -0.262432940471314440, -0.262384692631654150, -0.262336444136032080, -0.262288194984568510, -0.262239945177384860, -0.262191694714601350, -0.262143443596338620, +-0.262095191822716840, -0.262046939393857540, -0.261998686309880880, -0.261950432570907500, -0.261902178177057580, -0.261853923128452680, -0.261805667425212940, -0.261757411067459090, +-0.261709154055311200, -0.261660896388890900, -0.261612638068318360, -0.261564379093713770, -0.261516119465198700, -0.261467859182893340, -0.261419598246918290, -0.261371336657393820, +-0.261323074414441470, -0.261274811518181440, -0.261226547968734350, -0.261178283766220430, -0.261130018910761260, -0.261081753402477080, -0.261033487241488500, -0.260985220427915720, +-0.260936952961880350, -0.260888684843502640, -0.260840416072903150, -0.260792146650202230, -0.260743876575521390, -0.260695605848980830, -0.260647334470700820, -0.260599062440802940, +-0.260550789759407380, -0.260502516426634800, -0.260454242442605570, -0.260405967807441130, -0.260357692521261790, -0.260309416584188210, -0.260261139996340650, -0.260212862757840670, +-0.260164584868808560, -0.260116306329364940, -0.260068027139630180, -0.260019747299725710, -0.259971466809771960, -0.259923185669889480, -0.259874903880198630, -0.259826621440820920, +-0.259778338351876690, -0.259730054613486190, -0.259681770225770990, -0.259633485188851320, -0.259585199502847970, -0.259536913167881190, -0.259488626184072530, -0.259440338551542300, +-0.259392050270411290, -0.259343761340799670, -0.259295471762829080, -0.259247181536619850, -0.259198890662292620, -0.259150599139967740, -0.259102306969766830, -0.259054014151810120, +-0.259005720686218350, -0.258957426573111880, -0.258909131812612270, -0.258860836404839870, -0.258812540349914910, -0.258764243647959020, -0.258715946299092500, -0.258667648303436190, +-0.258619349661110280, -0.258571050372236430, -0.258522750436934960, -0.258474449855326580, -0.258426148627531660, -0.258377846753671810, -0.258329544233867390, -0.258281241068239080, +-0.258232937256907210, -0.258184632799993430, -0.258136327697618070, -0.258088021949901940, -0.258039715556965250, -0.257991408518929770, -0.257943100835915710, -0.257894792508043920, +-0.257846483535434710, -0.257798173918209750, -0.257749863656489330, -0.257701552750393860, -0.257653241200044900, -0.257604929005562810, -0.257556616167068430, -0.257508302684682110, +-0.257459988558525420, -0.257411673788718760, -0.257363358375382930, -0.257315042318638280, -0.257266725618606470, -0.257218408275407820, -0.257170090289163160, -0.257121771659992840, +-0.257073452388018540, -0.257025132473360560, -0.256976811916139800, -0.256928490716476550, -0.256880168874492500, -0.256831846390308040, -0.256783523264043520, -0.256735199495820690, +-0.256686875085759770, -0.256638550033981730, -0.256590224340606850, -0.256541898005756830, -0.256493571029552060, -0.256445243412113390, -0.256396915153561170, -0.256348586254017130, +-0.256300256713601570, -0.256251926532435390, -0.256203595710638940, -0.256155264248333960, -0.256106932145640840, -0.256058599402680330, -0.256010266019572940, -0.255961931996440300, +-0.255913597333402850, -0.255865262030580910, -0.255816926088096310, -0.255768589506069400, -0.255720252284620970, -0.255671914423871490, -0.255623575923942690, -0.255575236784954920, +-0.255526897007029070, -0.255478556590285510, -0.255430215534846070, -0.255381873840831000, -0.255333531508361300, -0.255285188537557330, -0.255236844928540820, -0.255188500681432170, +-0.255140155796352300, -0.255091810273421650, -0.255043464112761850, -0.254995117314493370, -0.254946769878737160, -0.254898421805613560, -0.254850073095244320, -0.254801723747749900, +-0.254753373763250750, -0.254705023141868600, -0.254656671883723930, -0.254608319988937510, -0.254559967457629930, -0.254511614289922810, -0.254463260485936650, -0.254414906045792370, +-0.254366550969610360, -0.254318195257512420, -0.254269838909619020, -0.254221481926050990, -0.254173124306928840, -0.254124766052374330, -0.254076407162507840, -0.254028047637450400, +-0.253979687477322410, -0.253931326682245610, -0.253882965252340440, -0.253834603187727490, -0.253786240488528440, -0.253737877154863790, -0.253689513186854450, -0.253641148584620950, +-0.253592783348284940, -0.253544417477966970, -0.253496050973788020, -0.253447683835868460, -0.253399316064330140, -0.253350947659293500, -0.253302578620879510, -0.253254208949208640, +-0.253205838644402710, -0.253157467706582150, -0.253109096135867910, -0.253060723932380550, -0.253012351096241760, -0.252963977627572110, -0.252915603526492060, -0.252867228793123460, +-0.252818853427586810, -0.252770477430002970, -0.252722100800492570, -0.252673723539177330, -0.252625345646177780, -0.252576967121614810, -0.252528587965609060, -0.252480208178282260, +-0.252431827759754920, -0.252383446710148010, -0.252335065029582030, -0.252286682718178890, -0.252238299776058990, -0.252189916203343360, -0.252141532000152490, -0.252093147166608240, +-0.252044761702831130, -0.251996375608941670, -0.251947988885061700, -0.251899601531311750, -0.251851213547812810, -0.251802824934685370, -0.251754435692051360, -0.251706045820031200, +-0.251657655318745950, -0.251609264188316140, -0.251560872428863600, -0.251512480040508910, -0.251464087023372970, -0.251415693377576410, -0.251367299103241020, -0.251318904200487410, +-0.251270508669436510, -0.251222112510208930, -0.251173715722926520, -0.251125318307709790, -0.251076920264679760, -0.251028521593957000, -0.250980122295663410, -0.250931722369919450, +-0.250883321816845810, -0.250834920636564260, -0.250786518829195390, -0.250738116394860270, -0.250689713333679400, -0.250641309645774690, -0.250592905331266710, -0.250544500390276480, +-0.250496094822924560, -0.250447688629332810, -0.250399281809621840, -0.250350874363912680, -0.250302466292325890, -0.250254057594983370, -0.250205648272005750, -0.250157238323513940, +-0.250108827749628670, -0.250060416550471680, -0.250012004726163690, -0.249963592276825300, -0.249915179202578300, -0.249866765503543390, -0.249818351179841550, -0.249769936231593410, +-0.249721520658920840, -0.249673104461944490, -0.249624687640785350, -0.249576270195564110, -0.249527852126402580, -0.249479433433421440, -0.249431014116741710, -0.249382594176484010, +-0.249334173612770270, -0.249285752425721100, -0.249237330615457530, -0.249188908182100210, -0.249140485125771060, -0.249092061446590680, -0.249043637144679720, -0.248995212220160110, +-0.248946786673152450, -0.248898360503777840, -0.248849933712156880, -0.248801506298411550, -0.248753078262662440, -0.248704649605030610, -0.248656220325636750, -0.248607790424602760, +-0.248559359902049300, -0.248510928758097440, -0.248462496992867820, -0.248414064606482410, -0.248365631599061800, -0.248317197970727150, -0.248268763721599060, -0.248220328851799480, +-0.248171893361449100, -0.248123457250668980, -0.248075020519579780, -0.248026583168303450, -0.247978145196960680, -0.247929706605672100, -0.247881267394559710, -0.247832827563744110, +-0.247784387113346470, -0.247735946043487420, -0.247687504354288960, -0.247639062045871720, -0.247590619118356840, -0.247542175571864950, -0.247493731406518090, -0.247445286622436870, +-0.247396841219742450, -0.247348395198555500, -0.247299948558997980, -0.247251501301190580, -0.247203053425254450, -0.247154604931310250, -0.247106155819479980, -0.247057706089884280, +-0.247009255742643930, -0.246960804777880850, -0.246912353195715750, -0.246863900996269790, -0.246815448179663640, -0.246766994746019290, -0.246718540695457460, -0.246670086028099260, +-0.246621630744065430, -0.246573174843477960, -0.246524718326457560, -0.246476261193125350, -0.246427803443602040, -0.246379345078009680, -0.246330886096468940, -0.246282426499101010, +-0.246233966286026560, -0.246185505457367640, -0.246137044013244930, -0.246088581953779200, -0.246040119279092450, -0.245991655989305390, -0.245943192084539190, -0.245894727564914590, +-0.245846262430553600, -0.245797796681576950, -0.245749330318105810, -0.245700863340260920, -0.245652395748164280, -0.245603927541936660, -0.245555458721699230, -0.245506989287572720, +-0.245458519239679180, -0.245410048578139330, -0.245361577303074340, -0.245313105414605020, -0.245264632912853330, -0.245216159797940060, -0.245167686069986400, -0.245119211729113110, +-0.245070736775442190, -0.245022261209094460, -0.244973785030190630, -0.244925308238852750, -0.244876830835201620, -0.244828352819358410, -0.244779874191443900, -0.244731394951580110, +-0.244682915099887850, -0.244634434636488320, -0.244585953561502230, -0.244537471875051700, -0.244488989577257510, -0.244440506668240850, -0.244392023148122470, -0.244343539017024460, +-0.244295054275067620, -0.244246568922373150, -0.244198082959061810, -0.244149596385255680, -0.244101109201075580, -0.244052621406642300, -0.244004133002077850, -0.243955643987503110, +-0.243907154363039220, -0.243858664128807050, -0.243810173284928630, -0.243761681831524770, -0.243713189768716730, -0.243664697096625250, -0.243616203815372500, -0.243567709925079200, +-0.243519215425866660, -0.243470720317855630, -0.243422224601168250, -0.243373728275925270, -0.243325231342248010, -0.243276733800257220, -0.243228235650075040, -0.243179736891822260, +-0.243131237525619710, -0.243082737551589490, -0.243034236969852440, -0.242985735780529790, -0.242937233983742370, -0.242888731579612300, -0.242840228568260370, -0.242791724949807910, +-0.242743220724375680, -0.242694715892085850, -0.242646210453059230, -0.242597704407417070, -0.242549197755280220, -0.242500690496770810, -0.242452182632009680, -0.242403674161118100, +-0.242355165084216890, -0.242306655401428210, -0.242258145112872860, -0.242209634218671750, -0.242161122718946960, -0.242112610613819390, -0.242064097903410270, -0.242015584587840500, +-0.241967070667232190, -0.241918556141706180, -0.241870041011383820, -0.241821525276385900, -0.241773008936834590, -0.241724491992850790, -0.241675974444555740, -0.241627456292070300, +-0.241578937535516680, -0.241530418175015720, -0.241481898210688720, -0.241433377642656520, -0.241384856471041300, -0.241336334695963970, -0.241287812317545790, -0.241239289335907630, +-0.241190765751171710, -0.241142241563458870, -0.241093716772889960, -0.241045191379587210, -0.240996665383671510, -0.240948138785264110, -0.240899611584485950, -0.240851083781459200, +-0.240802555376304710, -0.240754026369143860, -0.240705496760097500, -0.240656966549287840, -0.240608435736835740, -0.240559904322862560, -0.240511372307489200, -0.240462839690837840, +-0.240414306473029390, -0.240365772654185160, -0.240317238234426050, -0.240268703213874310, -0.240220167592650800, -0.240171631370876440, -0.240123094548673420, -0.240074557126162660, +-0.240026019103465520, -0.239977480480702910, -0.239928941257997020, -0.239880401435468770, -0.239831861013239530, -0.239783319991430180, -0.239734778370162990, -0.239686236149558860, +-0.239637693329739110, -0.239589149910824720, -0.239540605892937880, -0.239492061276199510, -0.239443516060731030, -0.239394970246653290, -0.239346423834088550, -0.239297876823157780, +-0.239249329213981870, -0.239200781006683070, -0.239152232201382320, -0.239103682798200990, -0.239055132797260010, -0.239006582198681650, -0.238958031002586810, -0.238909479209096910, +-0.238860926818332870, -0.238812373830416950, -0.238763820245470100, -0.238715266063613710, -0.238666711284968690, -0.238618155909657350, -0.238569599937800610, -0.238521043369519880, +-0.238472486204936110, -0.238423928444171540, -0.238375370087347160, -0.238326811134584370, -0.238278251586004100, -0.238229691441728620, -0.238181130701878930, -0.238132569366575980, +-0.238084007435942050, -0.238035444910098090, -0.237986881789165520, -0.237938318073265320, -0.237889753762519750, -0.237841188857049800, -0.237792623356976870, -0.237744057262421950, +-0.237695490573507310, -0.237646923290353970, -0.237598355413083300, -0.237549786941816300, -0.237501217876675300, -0.237452648217781230, -0.237404077965255560, -0.237355507119219240, +-0.237306935679794610, -0.237258363647102620, -0.237209791021264300, -0.237161217802401900, -0.237112643990636500, -0.237064069586089470, -0.237015494588881850, -0.236966918999135910, +-0.236918342816972660, -0.236869766042513590, -0.236821188675879650, -0.236772610717193160, -0.236724032166575170, -0.236675453024147080, -0.236626873290029930, -0.236578292964346040, +-0.236529712047216400, -0.236481130538762490, -0.236432548439105330, -0.236383965748367230, -0.236335382466669190, -0.236286798594132290, -0.236238214130878810, -0.236189629077029810, +-0.236141043432706730, -0.236092457198030600, -0.236043870373123770, -0.235995282958107260, -0.235946694953102530, -0.235898106358230640, -0.235849517173613910, -0.235800927399373420, +-0.235752337035630590, -0.235703746082506470, -0.235655154540123420, -0.235606562408602500, -0.235557969688065170, -0.235509376378632480, -0.235460782480426790, -0.235412187993569140, +-0.235363592918180600, -0.235314997254383480, -0.235266401002298900, -0.235217804162048290, -0.235169206733752740, -0.235120608717534620, -0.235072010113514970, -0.235023410921815310, +-0.234974811142556670, -0.234926210775861430, -0.234877609821850690, -0.234829008280645900, -0.234780406152368170, -0.234731803437139840, -0.234683200135082040, -0.234634596246316220, +-0.234585991770963450, -0.234537386709146170, -0.234488781060985390, -0.234440174826602680, -0.234391568006119100, -0.234342960599657040, -0.234294352607337550, -0.234245744029281780, +-0.234197134865612060, -0.234148525116449510, -0.234099914781915660, -0.234051303862131580, -0.234002692357219650, -0.233954080267301020, -0.233905467592497200, -0.233856854332929240, +-0.233808240488719590, -0.233759626059989340, -0.233711011046860040, -0.233662395449452780, -0.233613779267889950, -0.233565162502292670, -0.233516545152782500, -0.233467927219480510, +-0.233419308702509150, -0.233370689601989530, -0.233322069918042750, -0.233273449650791190, -0.233224828800356050, -0.233176207366858820, -0.233127585350420640, -0.233078962751163940, +-0.233030339569209820, -0.232981715804679860, -0.232933091457695170, -0.232884466528378190, -0.232835841016850040, -0.232787214923232290, -0.232738588247646070, -0.232689960990213800, +-0.232641333151056650, -0.232592704730296140, -0.232544075728053470, -0.232495446144451000, -0.232446815979609950, -0.232398185233651410, -0.232349553906697870, -0.232300921998870400, +-0.232252289510290640, -0.232203656441079740, -0.232155022791360130, -0.232106388561252960, -0.232057753750879810, -0.232009118360361840, -0.231960482389821530, -0.231911845839379990, +-0.231863208709158860, -0.231814570999279240, -0.231765932709863650, -0.231717293841033230, -0.231668654392909570, -0.231620014365613830, -0.231571373759268510, -0.231522732573994750, +-0.231474090809914130, -0.231425448467147880, -0.231376805545818440, -0.231328162046046980, -0.231279517967954680, -0.231230873311664030, -0.231182228077296190, -0.231133582264972770, +-0.231084935874814960, -0.231036288906945250, -0.230987641361484840, -0.230938993238555300, -0.230890344538277840, -0.230841695260774970, -0.230793045406167850, -0.230744394974578130, +-0.230695743966126960, -0.230647092380936890, -0.230598440219129090, -0.230549787480825190, -0.230501134166146370, -0.230452480275215170, -0.230403825808152750, -0.230355170765080330, +-0.230306515146120440, -0.230257858951394250, -0.230209202181023420, -0.230160544835129130, -0.230111886913833940, -0.230063228417259010, -0.230014569345526030, -0.229965909698756160, +-0.229917249477071980, -0.229868588680594650, -0.229819927309445870, -0.229771265363746840, -0.229722602843620060, -0.229673939749186790, -0.229625276080568680, -0.229576611837886910, +-0.229527947021264080, -0.229479281630821370, -0.229430615666680020, -0.229381949128962560, -0.229333282017790240, -0.229284614333284700, -0.229235946075567220, -0.229187277244760290, +-0.229138607840985160, -0.229089937864363520, -0.229041267315016590, -0.228992596193066940, -0.228943924498635790, -0.228895252231844840, -0.228846579392815300, -0.228797905981669770, +-0.228749231998529480, -0.228700557443516080, -0.228651882316750880, -0.228603206618356400, -0.228554530348453910, -0.228505853507164650, -0.228457176094611190, -0.228408498110914790, +-0.228359819556197140, -0.228311140430579510, -0.228262460734184490, -0.228213780467133280, -0.228165099629547650, -0.228116418221548820, -0.228067736243259380, -0.228019053694800610, +-0.227970370576294180, -0.227921686887861410, -0.227873002629624840, -0.227824317801705780, -0.227775632404225940, -0.227726946437306570, -0.227678259901070240, -0.227629572795638310, +-0.227580885121132420, -0.227532196877673870, -0.227483508065385280, -0.227434818684387920, -0.227386128734803100, -0.227337438216753370, -0.227288747130360040, -0.227240055475744830, +-0.227191363253029080, -0.227142670462335330, -0.227093977103784930, -0.227045283177499560, -0.226996588683600560, -0.226947893622210520, -0.226899197993450760, -0.226850501797442980, +-0.226801805034308520, -0.226753107704170010, -0.226704409807148700, -0.226655711343366370, -0.226607012312944330, -0.226558312716005210, -0.226509612552670270, -0.226460911823060910, +-0.226412210527299680, -0.226363508665507920, -0.226314806237807390, -0.226266103244319420, -0.226217399685166630, -0.226168695560470310, -0.226119990870352280, -0.226071285614933840, +-0.226022579794337620, -0.225973873408684940, -0.225925166458097570, -0.225876458942696870, -0.225827750862605450, -0.225779042217944650, -0.225730333008836240, -0.225681623235401560, +-0.225632912897763270, -0.225584201996042680, -0.225535490530361180, -0.225486778500841370, -0.225438065907604600, -0.225389352750772680, -0.225340639030466940, -0.225291924746810030, +-0.225243209899923330, -0.225194494489928590, -0.225145778516947200, -0.225097061981101770, -0.225048344882513710, -0.224999627221304760, -0.224950908997596320, -0.224902190211511060, +-0.224853470863170310, -0.224804750952695860, -0.224756030480209150, -0.224707309445832750, -0.224658587849688090, -0.224609865691896980, -0.224561142972580760, -0.224512419691862110, +-0.224463695849862420, -0.224414971446703050, -0.224366246482506660, -0.224317520957394710, -0.224268794871488930, -0.224220068224910720, -0.224171341017782770, -0.224122613250226480, +-0.224073884922363660, -0.224025156034315690, -0.223976426586205260, -0.223927696578153780, -0.223878966010283040, -0.223830234882714450, -0.223781503195570720, -0.223732770948973230, +-0.223684038143043800, -0.223635304777903860, -0.223586570853676090, -0.223537836370481860, -0.223489101328442630, -0.223440365727681080, -0.223391629568318620, -0.223342892850477090, +-0.223294155574277900, -0.223245417739843720, -0.223196679347296030, -0.223147940396756620, -0.223099200888346950, -0.223050460822189680, -0.223001720198406280, -0.222952979017118580, +-0.222904237278447990, -0.222855494982517250, -0.222806752129447750, -0.222758008719361380, -0.222709264752379570, -0.222660520228625040, -0.222611775148219170, -0.222563029511283460, +-0.222514283317940600, -0.222465536568312030, -0.222416789262519620, -0.222368041400684810, -0.222319292982930320, -0.222270544009377600, -0.222221794480148530, -0.222173044395364530, +-0.222124293755148360, -0.222075542559621450, -0.222026790808905670, -0.221978038503122500, -0.221929285642394670, -0.221880532226843620, -0.221831778256591230, -0.221783023731758950, +-0.221734268652469590, -0.221685513018844510, -0.221636756831005250, -0.221588000089074500, -0.221539242793173770, -0.221490484943424940, -0.221441726539949450, -0.221392967582870080, +-0.221344208072308280, -0.221295448008385990, -0.221246687391224630, -0.221197926220946970, -0.221149164497674520, -0.221100402221529160, -0.221051639392632340, -0.221002876011106850, +-0.220954112077074190, -0.220905347590656250, -0.220856582551974490, -0.220807816961151730, -0.220759050818309400, -0.220710284123569470, -0.220661516877053400, -0.220612749078883950, +-0.220563980729182620, -0.220515211828070930, -0.220466442375671650, -0.220417672372106240, -0.220368901817496660, -0.220320130711964380, -0.220271359055632220, -0.220222586848621640, +-0.220173814091054630, -0.220125040783052620, -0.220076266924738470, -0.220027492516233630, -0.219978717557660080, -0.219929942049139270, -0.219881165990794050, -0.219832389382745940, +-0.219783612225116830, -0.219734834518028280, -0.219686056261603040, -0.219637277455962680, -0.219588498101228710, -0.219539718197523910, -0.219490937744969810, -0.219442156743688390, +-0.219393375193801120, -0.219344593095430830, -0.219295810448699090, -0.219247027253727830, -0.219198243510638550, -0.219149459219554090, -0.219100674380595990, -0.219051888993886220, +-0.219003103059546260, -0.218954316577699010, -0.218905529548465950, -0.218856741971969050, -0.218807953848329910, -0.218759165177671270, -0.218710375960114750, -0.218661586195781830, +-0.218612795884795400, -0.218564005027276960, -0.218515213623348530, -0.218466421673131630, -0.218417629176749090, -0.218368836134322510, -0.218320042545973810, -0.218271248411824580, +-0.218222453731997670, -0.218173658506614600, -0.218124862735797400, -0.218076066419667620, -0.218027269558348110, -0.217978472151960400, -0.217929674200626530, -0.217880875704468040, +-0.217832076663607790, -0.217783277078167360, -0.217734476948268720, -0.217685676274033460, -0.217636875055584430, -0.217588073293043220, -0.217539270986531420, -0.217490468136171840, +-0.217441664742086120, -0.217392860804396210, -0.217344056323223730, -0.217295251298691540, -0.217246445730921220, -0.217197639620034800, -0.217148832966153840, -0.217100025769401210, +-0.217051218029898550, -0.217002409747767830, -0.216953600923130650, -0.216904791556109890, -0.216855981646827150, -0.216807171195404490, -0.216758360201963430, -0.216709548666626920, +-0.216660736589516540, -0.216611923970753910, -0.216563110810461870, -0.216514297108762050, -0.216465482865776490, -0.216416668081626800, -0.216367852756435890, -0.216319036890325310, +-0.216270220483417150, -0.216221403535833020, -0.216172586047695820, -0.216123768019127140, -0.216074949450249050, -0.216026130341183150, -0.215977310692052340, -0.215928490502978270, +-0.215879669774082960, -0.215830848505488060, -0.215782026697316470, -0.215733204349689790, -0.215684381462729700, -0.215635558036559070, -0.215586734071299550, -0.215537909567073190, +-0.215489084524001620, -0.215440258942207780, -0.215391432821813310, -0.215342606162940240, -0.215293778965710200, -0.215244951230246170, -0.215196122956669760, -0.215147294145103060, +-0.215098464795667660, -0.215049634908486550, -0.215000804483681330, -0.214951973521374130, -0.214903142021686560, -0.214854309984741560, -0.214805477410660780, -0.214756644299565870, +-0.214707810651579790, -0.214658976466824190, -0.214610141745421120, -0.214561306487492300, -0.214512470693160620, -0.214463634362547780, -0.214414797495775860, -0.214365960092966490, +-0.214317122154242670, -0.214268283679726030, -0.214219444669538680, -0.214170605123802320, -0.214121765042639860, -0.214072924426172980, -0.214024083274523800, -0.213975241587813950, +-0.213926399366166450, -0.213877556609702950, -0.213828713318545580, -0.213779869492815970, -0.213731025132637110, -0.213682180238130710, -0.213633334809418430, -0.213584488846623230, +-0.213535642349866800, -0.213486795319271280, -0.213437947754958330, -0.213389099657050970, -0.213340251025670840, -0.213291401860940060, -0.213242552162980380, -0.213193701931914730, +-0.213144851167864830, -0.213095999870952820, -0.213047148041300340, -0.212998295679030450, -0.212949442784264810, -0.212900589357125580, -0.212851735397734440, -0.212802880906214380, +-0.212754025882687130, -0.212705170327274370, -0.212656314240099120, -0.212607457621283110, -0.212558600470948430, -0.212509742789216830, -0.212460884576211290, -0.212412025832053540, +-0.212363166556865740, -0.212314306750769570, -0.212265446413888090, -0.212216585546342980, -0.212167724148256410, -0.212118862219750100, -0.212069999760947060, -0.212021136771969020, +-0.211972273252938160, -0.211923409203976150, -0.211874544625206080, -0.211825679516749630, -0.211776813878728540, -0.211727947711265880, -0.211679081014483320, -0.211630213788503080, +-0.211581346033446860, -0.211532477749437700, -0.211483608936597370, -0.211434739595047990, -0.211385869724911360, -0.211336999326310480, -0.211288128399367090, -0.211239256944203370, +-0.211190384960941090, -0.211141512449703280, -0.211092639410611680, -0.211043765843788510, -0.210994891749355460, -0.210946017127435630, -0.210897141978150740, -0.210848266301623010, +-0.210799390097974190, -0.210750513367327310, -0.210701636109804140, -0.210652758325526460, -0.210603880014617330, -0.210555001177198470, -0.210506121813392150, -0.210457241923320050, +-0.210408361507105290, -0.210359480564869640, -0.210310599096735270, -0.210261717102823990, -0.210212834583258850, -0.210163951538161610, -0.210115067967654500, -0.210066183871859270, +-0.210017299250899010, -0.209968414104895530, -0.209919528433971020, -0.209870642238247220, -0.209821755517847260, -0.209772868272892930, -0.209723980503505990, -0.209675092209809510, +-0.209626203391925340, -0.209577314049975620, -0.209528424184082210, -0.209479533794368150, -0.209430642880955280, -0.209381751443965790, -0.209332859483521480, -0.209283966999745470, +-0.209235073992759530, -0.209186180462685920, -0.209137286409646410, -0.209088391833764130, -0.209039496735160840, -0.208990601113958840, -0.208941704970279890, -0.208892808304247140, +-0.208843911115982330, -0.208795013405607330, -0.208746115173245230, -0.208697216419017840, -0.208648317143047410, -0.208599417345455730, -0.208550517026365980, -0.208501616185899910, +-0.208452714824179820, -0.208403812941327480, -0.208354910537466080, -0.208306007612717360, -0.208257104167203670, -0.208208200201046740, -0.208159295714369780, -0.208110390707294560, +-0.208061485179943360, -0.208012579132438010, -0.207963672564901670, -0.207914765477456130, -0.207865857870223240, -0.207816949743326150, -0.207768041096886680, -0.207719131931027120, +-0.207670222245869280, -0.207621312041536330, -0.207572401318150110, -0.207523490075832870, -0.207474578314706480, -0.207425666034894070, -0.207376753236517470, -0.207327839919699030, +-0.207278926084560530, -0.207230011731225160, -0.207181096859814760, -0.207132181470451620, -0.207083265563257600, -0.207034349138355830, -0.206985432195868210, -0.206936514735916980, +-0.206887596758624060, -0.206838678264112560, -0.206789759252504370, -0.206740839723921350, -0.206691919678486660, -0.206642999116322200, -0.206594078037550200, -0.206545156442292600, +-0.206496234330672520, -0.206447311702811890, -0.206398388558832940, -0.206349464898857610, -0.206300540723009050, -0.206251616031409120, -0.206202690824180160, -0.206153765101444040, +-0.206104838863323950, -0.206055912109941760, -0.206006984841419770, -0.205958057057879920, -0.205909128759445340, -0.205860199946237940, -0.205811270618379590, -0.205762340775993540, +-0.205713410419201600, -0.205664479548126140, -0.205615548162889040, -0.205566616263613530, -0.205517683850421460, -0.205468750923435190, -0.205419817482776600, -0.205370883528568910, +-0.205321949060934010, -0.205273014079994240, -0.205224078585871490, -0.205175142578688990, -0.205126206058568630, -0.205077269025632750, -0.205028331480003270, -0.204979393421803380, +-0.204930454851155020, -0.204881515768180090, -0.204832576173001800, -0.204783636065742070, -0.204734695446523260, -0.204685754315467260, -0.204636812672697320, -0.204587870518335320, +-0.204538927852503690, -0.204489984675324280, -0.204441040986920340, -0.204392096787413820, -0.204343152076927050, -0.204294206855581940, -0.204245261123501780, -0.204196314880808440, +-0.204147368127624320, -0.204098420864071370, -0.204049473090272770, -0.204000524806350500, -0.203951576012426920, -0.203902626708623970, -0.203853676895064890, -0.203804726571871600, +-0.203755775739166090, -0.203706824397071550, -0.203657872545709940, -0.203608920185203680, -0.203559967315674660, -0.203511013937246160, -0.203462060050040140, -0.203413105654178940, +-0.203364150749784590, -0.203315195336980250, -0.203266239415887950, -0.203217282986630030, -0.203168326049328500, -0.203119368604106560, -0.203070410651086220, -0.203021452190389830, +-0.202972493222139390, -0.202923533746458130, -0.202874573763468070, -0.202825613273291130, -0.202776652276050570, -0.202727690771868420, -0.202678728760867010, -0.202629766243168360, +-0.202580803218895710, -0.202531839688171070, -0.202482875651116830, -0.202433911107854970, -0.202384946058508740, -0.202335980503200170, -0.202287014442051630, -0.202238047875185150, +-0.202189080802723960, -0.202140113224790090, -0.202091145141505920, -0.202042176552993450, -0.201993207459375960, -0.201944237860775480, -0.201895267757313950, -0.201846297149114700, +-0.201797326036299710, -0.201748354418991390, -0.201699382297311770, -0.201650409671384120, -0.201601436541330450, -0.201552462907273160, -0.201503488769334300, -0.201454514127637150, +-0.201405538982303730, -0.201356563333456450, -0.201307587181217330, -0.201258610525709670, -0.201209633367055500, -0.201160655705377220, -0.201111677540796870, -0.201062698873437780, +-0.201013719703421940, -0.200964740030871360, -0.200915759855909370, -0.200866779178657970, -0.200817797999239630, -0.200768816317776350, -0.200719834134391480, -0.200670851449207020, +-0.200621868262345400, -0.200572884573928720, -0.200523900384080240, -0.200474915692922030, -0.200425930500576500, -0.200376944807165720, -0.200327958612813020, -0.200278971917640440, +-0.200229984721770390, -0.200180997025324990, -0.200132008828427490, -0.200083020131200000, -0.200034030933764930, -0.199985041236244360, -0.199936051038761640, -0.199887060341438770, +-0.199838069144397830, -0.199789077447762140, -0.199740085251653770, -0.199691092556195160, -0.199642099361508420, -0.199593105667716850, -0.199544111474942500, -0.199495116783307890, +-0.199446121592935070, -0.199397125903947340, -0.199348129716466820, -0.199299133030615970, -0.199250135846516850, -0.199201138164292830, -0.199152139984065970, -0.199103141305958740, +-0.199054142130093260, -0.199005142456592820, -0.198956142285579530, -0.198907141617175460, -0.198858140451503990, -0.198809138788687140, -0.198760136628847450, -0.198711133972106990, +-0.198662130818589130, -0.198613127168415950, -0.198564123021709920, -0.198515118378593170, -0.198466113239189060, -0.198417107603619660, -0.198368101472007510, -0.198319094844474660, +-0.198270087721144490, -0.198221080102139120, -0.198172071987581050, -0.198123063377592360, -0.198074054272296430, -0.198025044671815390, -0.197976034576271300, -0.197927023985787570, +-0.197878012900486260, -0.197829001320489920, -0.197779989245920630, -0.197730976676901820, -0.197681963613555580, -0.197632950056004400, -0.197583936004370440, -0.197534921458777050, +-0.197485906419346380, -0.197436890886200920, -0.197387874859462800, -0.197338858339255440, -0.197289841325700930, -0.197240823818921830, -0.197191805819040220, -0.197142787326179540, +-0.197093768340461880, -0.197044748862009820, -0.196995728890945440, -0.196946708427392150, -0.196897687471472130, -0.196848666023307420, -0.196799644083021500, -0.196750621650736480, +-0.196701598726574890, -0.196652575310658860, -0.196603551403111840, -0.196554527004055930, -0.196505502113613730, -0.196456476731907300, -0.196407450859060140, -0.196358424495194360, +-0.196309397640432510, -0.196260370294896710, -0.196211342458710440, -0.196162314131995810, -0.196113285314875400, -0.196064256007471350, -0.196015226209907080, -0.195966195922304740, +-0.195917165144786490, -0.195868133877475760, -0.195819102120494660, -0.195770069873965860, -0.195721037138011420, -0.195672003912754830, -0.195622970198318230, -0.195573935994824200, +-0.195524901302394890, -0.195475866121153780, -0.195426830451222970, -0.195377794292725120, -0.195328757645782340, -0.195279720510518090, -0.195230682887054560, -0.195181644775514310, +-0.195132606176019520, -0.195083567088693620, -0.195034527513658850, -0.194985487451037300, -0.194936446900952460, -0.194887405863526510, -0.194838364338882050, -0.194789322327141250, +-0.194740279828427560, -0.194691236842863190, -0.194642193370570700, -0.194593149411672330, -0.194544104966291490, -0.194495060034550390, -0.194446014616571660, -0.194396968712477440, +-0.194347922322391260, -0.194298875446435260, -0.194249828084732040, -0.194200780237403860, -0.194151731904574130, -0.194102683086365110, -0.194053633782898920, -0.194004583994299070, +-0.193955533720687770, -0.193906482962187650, -0.193857431718920890, -0.193808379991010970, -0.193759327778580100, -0.193710275081750930, -0.193661221900645610, -0.193612168235387680, +-0.193563114086099330, -0.193514059452903200, -0.193465004335921480, -0.193415948735277700, -0.193366892651094020, -0.193317836083493150, -0.193268779032597200, -0.193219721498529780, +-0.193170663481413040, -0.193121604981369650, -0.193072545998521810, -0.193023486532993030, -0.192974426584905550, -0.192925366154381550, -0.192876305241544590, -0.192827243846516870, +-0.192778181969421010, -0.192729119610379280, -0.192680056769515190, -0.192630993446950950, -0.192581929642809240, -0.192532865357212260, -0.192483800590283530, -0.192434735342145340, +-0.192385669612920280, -0.192336603402730620, -0.192287536711699900, -0.192238469539950330, -0.192189401887604580, -0.192140333754784900, -0.192091265141614790, -0.192042196048216540, +-0.191993126474712370, -0.191944056421225830, -0.191894985887879120, -0.191845914874794960, -0.191796843382095600, -0.191747771409904540, -0.191698698958344040, -0.191649626027536820, +-0.191600552617605090, -0.191551478728672400, -0.191502404360861020, -0.191453329514293640, -0.191404254189092520, -0.191355178385381160, -0.191306102103281860, -0.191257025342917330, +-0.191207948104409780, -0.191158870387882820, -0.191109792193458670, -0.191060713521259580, -0.191011634371409170, -0.190962554744029650, -0.190913474639243770, -0.190864394057173760, +-0.190815312997943190, -0.190766231461674350, -0.190717149448489910, -0.190668066958512180, -0.190618983991864720, -0.190569900548669820, -0.190520816629050130, -0.190471732233127970, +-0.190422647361026930, -0.190373562012869260, -0.190324476188777710, -0.190275389888874490, -0.190226303113283260, -0.190177215862126270, -0.190128128135526240, -0.190079039933605450, +-0.190029951256487500, -0.189980862104294660, -0.189931772477149240, -0.189882682375174830, -0.189833591798493710, -0.189784500747228610, -0.189735409221501810, -0.189686317221436950, +-0.189637224747156270, -0.189588131798782530, -0.189539038376438040, -0.189489944480246390, -0.189440850110329880, -0.189391755266811230, -0.189342659949812750, -0.189293564159458080, +-0.189244467895869490, -0.189195371159169730, -0.189146273949481110, -0.189097176266927240, -0.189048078111630410, -0.188998979483712970, -0.188949880383298520, -0.188900780810509340, +-0.188851680765468240, -0.188802580248297490, -0.188753479259120730, -0.188704377798060260, -0.188655275865238860, -0.188606173460778820, -0.188557070584803810, -0.188507967237436100, +-0.188458863418798470, -0.188409759129013250, -0.188360654368204070, -0.188311549136493260, -0.188262443434003580, -0.188213337260857340, -0.188164230617178210, -0.188115123503088480, +-0.188066015918710530, -0.188016907864167970, -0.187967799339583130, -0.187918690345078800, -0.187869580880777320, -0.187820470946802290, -0.187771360543276120, -0.187722249670321530, +-0.187673138328060870, -0.187624026516617830, -0.187574914236114690, -0.187525801486674280, -0.187476688268418930, -0.187427574581472300, -0.187378460425956740, -0.187329345801995010, +-0.187280230709709480, -0.187231115149223830, -0.187181999120660390, -0.187132882624141930, -0.187083765659790850, -0.187034648227730780, -0.186985530328084070, -0.186936411960973130, +-0.186887293126521580, -0.186838173824851820, -0.186789054056086590, -0.186739933820348310, -0.186690813117760650, -0.186641691948445930, -0.186592570312526990, -0.186543448210126170, +-0.186494325641367200, -0.186445202606372370, -0.186396079105264570, -0.186346955138166130, -0.186297830705200730, -0.186248705806490750, -0.186199580442159040, -0.186150454612327900, +-0.186101328317121090, -0.186052201556660940, -0.186003074331069860, -0.185953946640471520, -0.185904818484988330, -0.185855689864743070, -0.185806560779858160, -0.185757431230457290, +-0.185708301216662850, -0.185659170738597640, -0.185610039796384070, -0.185560908390145830, -0.185511776520005330, -0.185462644186085410, -0.185413511388508400, -0.185364378127398090, +-0.185315244402876810, -0.185266110215067420, -0.185216975564092310, -0.185167840450075200, -0.185118704873138500, -0.185069568833404610, -0.185020432330997210, -0.184971295366038760, +-0.184922157938652050, -0.184873020048959500, -0.184823881697084860, -0.184774742883150520, -0.184725603607279300, -0.184676463869593630, -0.184627323670217250, -0.184578183009272560, +-0.184529041886882430, -0.184479900303169240, -0.184430758258256750, -0.184381615752267330, -0.184332472785323910, -0.184283329357548850, -0.184234185469065920, -0.184185041119997510, +-0.184135896310466060, -0.184086751040595300, -0.184037605310507700, -0.183988459120326050, -0.183939312470172810, -0.183890165360171750, -0.183841017790445260, -0.183791869761116250, +-0.183742721272307120, -0.183693572324141600, -0.183644422916742180, -0.183595273050231680, -0.183546122724732560, -0.183496971940368600, -0.183447820697262180, -0.183398668995536220, +-0.183349516835313140, -0.183300364216716720, -0.183251211139869390, -0.183202057604894030, -0.183152903611913080, -0.183103749161050320, -0.183054594252428180, -0.183005438886169100, +-0.182956283062396890, -0.182907126781233940, -0.182857970042803210, -0.182808812847227110, -0.182759655194629390, -0.182710497085132570, -0.182661338518859460, -0.182612179495932610, +-0.182563020016475730, -0.182513860080611300, -0.182464699688462210, -0.182415538840150940, -0.182366377535801260, -0.182317215775535640, -0.182268053559477010, -0.182218890887747760, +-0.182169727760471740, -0.182120564177771390, -0.182071400139769220, -0.182022235646588980, -0.181973070698353140, -0.181923905295184620, -0.181874739437205890, -0.181825573124540780, +-0.181776406357311710, -0.181727239135641650, -0.181678071459653030, -0.181628903329469680, -0.181579734745214080, -0.181530565707009120, -0.181481396214977330, -0.181432226269242460, +-0.181383055869927060, -0.181333885017154000, -0.181284713711045790, -0.181235541951726250, -0.181186369739317840, -0.181137197073943070, -0.181088023955725740, -0.181038850384788370, +-0.180989676361253850, -0.180940501885244710, -0.180891326956884760, -0.180842151576296490, -0.180792975743602840, -0.180743799458926300, -0.180694622722390700, -0.180645445534118570, +-0.180596267894232800, -0.180547089802855940, -0.180497911260111780, -0.180448732266122850, -0.180399552821012080, -0.180350372924902000, -0.180301192577916440, -0.180252011780177880, +-0.180202830531809270, -0.180153648832933190, -0.180104466683673390, -0.180055284084152440, -0.180006101034492850, -0.179956917534818430, -0.179907733585251720, -0.179858549185915680, +-0.179809364336932810, -0.179760179038427000, -0.179710993290520730, -0.179661807093336980, -0.179612620446998270, -0.179563433351628440, -0.179514245807350040, -0.179465057814286010, +-0.179415869372558910, -0.179366680482292570, -0.179317491143609510, -0.179268301356632740, -0.179219111121484780, -0.179169920438289470, -0.179120729307169380, -0.179071537728247020, +-0.179022345701646240, -0.178973153227489610, -0.178923960305900100, -0.178874766937000250, -0.178825573120913910, -0.178776378857763650, -0.178727184147672440, -0.178677988990762810, +-0.178628793387158670, -0.178579597336982530, -0.178530400840357430, -0.178481203897405850, -0.178432006508251720, -0.178382808673017560, -0.178333610391826380, -0.178284411664800750, +-0.178235212492064530, -0.178186012873740280, -0.178136812809950560, -0.178087612300819210, -0.178038411346468860, -0.177989209947022500, -0.177940008102602630, -0.177890805813333220, +-0.177841603079336770, -0.177792399900736340, -0.177743196277654450, -0.177693992210215010, -0.177644787698540580, -0.177595582742754190, -0.177546377342978400, -0.177497171499337110, +-0.177447965211952910, -0.177398758480948770, -0.177349551306447310, -0.177300343688572390, -0.177251135627446630, -0.177201927123192600, -0.177152718175934170, -0.177103508785793950, +-0.177054298952894980, -0.177005088677359810, -0.176955877959312340, -0.176906666798875210, -0.176857455196171380, -0.176808243151323490, -0.176759030664455420, -0.176709817735689780, +-0.176660604365149600, -0.176611390552957460, -0.176562176299237290, -0.176512961604111670, -0.176463746467703660, -0.176414530890135840, -0.176365314871532120, -0.176316098412015120, +-0.176266881511707880, -0.176217664170733010, -0.176168446389214390, -0.176119228167274680, -0.176070009505036460, -0.176020790402623640, -0.175971570860158830, -0.175922350877765120, +-0.175873130455565070, -0.175823909593682660, -0.175774688292240470, -0.175725466551361540, -0.175676244371168520, -0.175627021751785320, -0.175577798693334590, -0.175528575195939340, +-0.175479351259722220, -0.175430126884807160, -0.175380902071316790, -0.175331676819374140, -0.175282451129101870, -0.175233225000623940, -0.175183998434062900, -0.175134771429541450, +-0.175085543987183540, -0.175036316107111730, -0.174987087789449130, -0.174937859034318380, -0.174888629841843450, -0.174839400212146890, -0.174790170145351860, -0.174740939641580970, +-0.174691708700958180, -0.174642477323606080, -0.174593245509647830, -0.174544013259205990, -0.174494780572404580, -0.174445547449366220, -0.174396313890213980, -0.174347079895070510, +-0.174297845464059800, -0.174248610597304450, -0.174199375294927160, -0.174150139557051860, -0.174100903383801210, -0.174051666775298290, -0.174002429731665800, -0.173953192253027630, +-0.173903954339506510, -0.173854715991225480, -0.173805477208307250, -0.173756237990875750, -0.173706998339053680, -0.173657758252964090, -0.173608517732729640, -0.173559276778474380, +-0.173510035390320920, -0.173460793568392360, -0.173411551312811360, -0.173362308623701940, -0.173313065501186750, -0.173263821945388890, -0.173214577956431050, -0.173165333534437190, +-0.173116088679530020, -0.173066843391832180, -0.173017597671467650, -0.172968351518559130, -0.172919104933229730, -0.172869857915602170, -0.172820610465800360, -0.172771362583947040, +-0.172722114270165290, -0.172672865524577830, -0.172623616347308660, -0.172574366738480450, -0.172525116698216300, -0.172475866226638940, -0.172426615323872350, -0.172377363990039220, +-0.172328112225262680, -0.172278860029665410, -0.172229607403371430, -0.172180354346503440, -0.172131100859184120, -0.172081846941537500, -0.172032592593686250, -0.171983337815753530, +-0.171934082607862030, -0.171884826970135740, -0.171835570902697380, -0.171786314405670100, -0.171737057479176610, -0.171687800123340920, -0.171638542338285710, -0.171589284124134160, +-0.171540025481008940, -0.171490766409034100, -0.171441506908332380, -0.171392246979026860, -0.171342986621240280, -0.171293725835096670, -0.171244464620718770, -0.171195202978229240, +-0.171145940907752180, -0.171096678409410230, -0.171047415483326610, -0.170998152129623990, -0.170948888348426450, -0.170899624139856680, -0.170850359504037850, -0.170801094441092680, +-0.170751828951145210, -0.170702563034318160, -0.170653296690734730, -0.170604029920517600, -0.170554762723790830, -0.170505495100677170, -0.170456227051299760, -0.170406958575781340, +-0.170357689674245970, -0.170308420346816400, -0.170259150593615290, -0.170209880414766780, -0.170160609810393550, -0.170111338780618820, -0.170062067325565280, -0.170012795445357020, +-0.169963523140116760, -0.169914250409967720, -0.169864977255032580, -0.169815703675435470, -0.169766429671299070, -0.169717155242746610, -0.169667880389900830, -0.169618605112885790, +-0.169569329411824200, -0.169520053286839330, -0.169470776738053890, -0.169421499765591930, -0.169372222369576190, -0.169322944550129940, -0.169273666307375860, -0.169224387641438070, +-0.169175108552439310, -0.169125829040502360, -0.169076549105751230, -0.169027268748308760, -0.168977987968298100, -0.168928706765842070, -0.168879425141064660, -0.168830143094088720, +-0.168780860625037420, -0.168731577734033520, -0.168682294421201110, -0.168633010686662980, -0.168583726530542320, -0.168534441952961880, -0.168485156954045810, -0.168435871533916840, +-0.168386585692698180, -0.168337299430512620, -0.168288012747484260, -0.168238725643735850, -0.168189438119390190, -0.168140150174571370, -0.168090861809402190, -0.168041573024005850, +-0.167992283818505140, -0.167942994193024160, -0.167893704147685700, -0.167844413682612960, -0.167795122797928770, -0.167745831493757190, -0.167696539770221030, -0.167647247627443540, +-0.167597955065547500, -0.167548662084656990, -0.167499368684894820, -0.167450074866384250, -0.167400780629248040, -0.167351485973610330, -0.167302190899593890, -0.167252895407321550, +-0.167203599496917400, -0.167154303168504240, -0.167105006422205330, -0.167055709258143480, -0.167006411676442780, -0.166957113677226070, -0.166907815260616540, -0.166858516426737070, +-0.166809217175711730, -0.166759917507663340, -0.166710617422715170, -0.166661316920990010, -0.166612016002612020, -0.166562714667703950, -0.166513412916389130, -0.166464110748790310, +-0.166414808165031680, -0.166365505165236020, -0.166316201749526580, -0.166266897918026210, -0.166217593670859030, -0.166168289008147870, -0.166118983930015560, -0.166069678436586210, +-0.166020372527982660, -0.165971066204328190, -0.165921759465745610, -0.165872452312359090, -0.165823144744291410, -0.165773836761665900, -0.165724528364605330, -0.165675219553233890, +-0.165625910327674400, -0.165576600688050140, -0.165527290634483930, -0.165477980167099940, -0.165428669286021010, -0.165379357991370380, -0.165330046283270940, -0.165280734161846830, +-0.165231421627220850, -0.165182108679515910, -0.165132795318856110, -0.165083481545364340, -0.165034167359163850, -0.164984852760377530, -0.164935537749129500, -0.164886222325542620, +-0.164836906489740200, -0.164787590241845060, -0.164738273581981400, -0.164688956510272020, -0.164639639026840280, -0.164590321131808990, -0.164541002825302350, -0.164491684107443190, +-0.164442364978354850, -0.164393045438160130, -0.164343725486983230, -0.164294405124947030, -0.164245084352174390, -0.164195763168789450, -0.164146441574915120, -0.164097119570674690, +-0.164047797156191000, -0.163998474331588260, -0.163949151096989350, -0.163899827452517580, -0.163850503398295770, -0.163801178934448150, -0.163751854061097570, -0.163702528778367380, +-0.163653203086380400, -0.163603876985260880, -0.163554550475131650, -0.163505223556116050, -0.163455896228336950, -0.163406568491918560, -0.163357240346983730, -0.163307911793655390, +-0.163258582832057690, -0.163209253462313520, -0.163159923684546240, -0.163110593498878690, -0.163061262905435100, -0.163011931904338350, -0.162962600495711790, -0.162913268679678290, +-0.162863936456362050, -0.162814603825885950, -0.162765270788373360, -0.162715937343947150, -0.162666603492731540, -0.162617269234849400, -0.162567934570424120, -0.162518599499578530, +-0.162469264022436920, -0.162419928139122120, -0.162370591849757500, -0.162321255154465970, -0.162271918053371740, -0.162222580546597720, -0.162173242634266800, -0.162123904316503230, +-0.162074565593429890, -0.162025226465170120, -0.161975886931846860, -0.161926546993584330, -0.161877206650505420, -0.161827865902733490, -0.161778524750391480, -0.161729183193603580, +-0.161679841232492710, -0.161630498867182250, -0.161581156097795110, -0.161531812924455510, -0.161482469347286380, -0.161433125366411080, -0.161383780981952520, -0.161334436194034950, +-0.161285091002781290, -0.161235745408314450, -0.161186399410758710, -0.161137053010236950, -0.161087706206872570, -0.161038359000788500, -0.160989011392108940, -0.160939663380956890, +-0.160890314967455650, -0.160840966151728190, -0.160791616933898760, -0.160742267314090280, -0.160692917292426130, -0.160643566869029250, -0.160594216044023910, -0.160544864817533020, +-0.160495513189679940, -0.160446161160587690, -0.160396808730380420, -0.160347455899181170, -0.160298102667112840, -0.160248749034299670, -0.160199395000864640, -0.160150040566931110, +-0.160100685732622070, -0.160051330498061720, -0.160001974863373060, -0.159952618828679450, -0.159903262394103880, -0.159853905559770580, -0.159804548325802510, -0.159755190692323080, +-0.159705832659455200, -0.159656474227323240, -0.159607115396050050, -0.159557756165759070, -0.159508396536573280, -0.159459036508616920, -0.159409676082012980, -0.159360315256884850, +-0.159310954033355490, -0.159261592411549190, -0.159212230391588910, -0.159162867973597600, -0.159113505157699560, -0.159064141944017770, -0.159014778332675630, -0.158965414323796100, +-0.158916049917503470, -0.158866685113920710, -0.158817319913171250, -0.158767954315378050, -0.158718588320665380, -0.158669221929156250, -0.158619855140974100, -0.158570487956241820, +-0.158521120375083780, -0.158471752397622960, -0.158422384023982730, -0.158373015254286130, -0.158323646088657400, -0.158274276527219570, -0.158224906570095610, -0.158175536217409820, +-0.158126165469285210, -0.158076794325845150, -0.158027422787212680, -0.157978050853512100, -0.157928678524866390, -0.157879305801398970, -0.157829932683232870, -0.157780559170492360, +-0.157731185263300460, -0.157681810961780610, -0.157632436266055780, -0.157583061176250290, -0.157533685692487160, -0.157484309814889780, -0.157434933543581230, -0.157385556878685770, +-0.157336179820326410, -0.157286802368626190, -0.157237424523709370, -0.157188046285699020, -0.157138667654718540, -0.157089288630890940, -0.157039909214340580, -0.156990529405190430, +-0.156941149203563950, -0.156891768609584180, -0.156842387623375410, -0.156793006245060680, -0.156743624474763420, -0.156694242312606670, -0.156644859758714760, -0.156595476813210700, +-0.156546093476217920, -0.156496709747859510, -0.156447325628259750, -0.156397941117541660, -0.156348556215828300, -0.156299170923243970, -0.156249785239911730, -0.156200399165955020, +-0.156151012701496870, -0.156101625846661620, -0.156052238601572300, -0.156002850966352410, -0.155953462941124940, -0.155904074526014260, -0.155854685721143390, -0.155805296526635800, +-0.155755906942614510, -0.155706516969203930, -0.155657126606527030, -0.155607735854707330, -0.155558344713867840, -0.155508953184132940, -0.155459561265625660, -0.155410168958469460, +-0.155360776262787410, -0.155311383178703850, -0.155261989706341840, -0.155212595845824420, -0.155163201597275950, -0.155113806960819470, -0.155064411936578470, -0.155015016524676000, +-0.154965620725236420, -0.154916224538382800, -0.154866827964238620, -0.154817431002926940, -0.154768033654572120, -0.154718635919297190, -0.154669237797225690, -0.154619839288480660, +-0.154570440393186460, -0.154521041111466170, -0.154471641443443270, -0.154422241389240820, -0.154372840948983210, -0.154323440122793500, -0.154274038910794780, -0.154224637313111370, +-0.154175235329866350, -0.154125832961183260, -0.154076430207185170, -0.154027027067996420, -0.153977623543740120, -0.153928219634539730, -0.153878815340518370, -0.153829410661800420, +-0.153780005598508930, -0.153730600150767420, -0.153681194318699000, -0.153631788102428000, -0.153582381502077560, -0.153532974517771150, -0.153483567149631850, -0.153434159397784100, +-0.153384751262350930, -0.153335342743455450, -0.153285933841222080, -0.153236524555773830, -0.153187114887234300, -0.153137704835726530, -0.153088294401374920, -0.153038883584302590, +-0.152989472384633060, -0.152940060802489420, -0.152890648837996050, -0.152841236491276070, -0.152791823762452980, -0.152742410651649900, -0.152692997158991230, -0.152643583284600070, +-0.152594169028599960, -0.152544754391113980, -0.152495339372266530, -0.152445923972180760, -0.152396508190980190, -0.152347092028787880, -0.152297675485728280, -0.152248258561924530, +-0.152198841257499660, -0.152149423572578130, -0.152100005507283060, -0.152050587061737960, -0.152001168236065960, -0.151951749030391460, -0.151902329444837610, -0.151852909479527930, +-0.151803489134585550, -0.151754068410134860, -0.151704647306299010, -0.151655225823201570, -0.151605803960965600, -0.151556381719715550, -0.151506959099574540, -0.151457536100666150, +-0.151408112723113500, -0.151358688967040970, -0.151309264832571730, -0.151259840319828890, -0.151210415428936900, -0.151160990160018850, -0.151111564513198350, -0.151062138488598480, +-0.151012712086343730, -0.150963285306557170, -0.150913858149362400, -0.150864430614882560, -0.150815002703242080, -0.150765574414564090, -0.150716145748972160, -0.150666716706589430, +-0.150617287287540340, -0.150567857491948040, -0.150518427319936090, -0.150468996771627640, -0.150419565847147140, -0.150370134546617710, -0.150320702870162530, -0.150271270817906010, +-0.150221838389971300, -0.150172405586482010, -0.150122972407561280, -0.150073538853333550, -0.150024104923921990, -0.149974670619450130, -0.149925235940041170, -0.149875800885819560, +-0.149826365456908470, -0.149776929653431450, -0.149727493475511650, -0.149678056923273570, -0.149628619996840350, -0.149579182696335580, -0.149529745021882400, -0.149480306973605310, +-0.149430868551627460, -0.149381429756071990, -0.149331990587063400, -0.149282551044724790, -0.149233111129179840, -0.149183670840551670, -0.149134230178964770, -0.149084789144542260, +-0.149035347737407810, -0.148985905957684540, -0.148936463805496940, -0.148887021280968200, -0.148837578384221870, -0.148788135115381190, -0.148738691474570610, -0.148689247461913280, +-0.148639803077532830, -0.148590358321552460, -0.148540913194096620, -0.148491467695288480, -0.148442021825251680, -0.148392575584109400, -0.148343128971986120, -0.148293681989005000, +-0.148244234635289240, -0.148194786910963360, -0.148145338816150500, -0.148095890350974260, -0.148046441515557880, -0.147996992310025830, -0.147947542734501310, -0.147898092789107930, +-0.147848642473968890, -0.147799191789208670, -0.147749740734950450, -0.147700289311317900, -0.147650837518434190, -0.147601385356423840, -0.147551932825409990, -0.147502479925516320, +-0.147453026656866020, -0.147403573019583590, -0.147354119013792250, -0.147304664639615140, -0.147255209897176800, -0.147205754786600470, -0.147156299308009750, -0.147106843461527830, +-0.147057387247279240, -0.147007930665387170, -0.146958473715975290, -0.146909016399166790, -0.146859558715086160, -0.146810100663856660, -0.146760642245601900, -0.146711183460445090, +-0.146661724308510770, -0.146612264789922150, -0.146562804904802860, -0.146513344653276120, -0.146463884035466420, -0.146414423051497070, -0.146364961701491190, -0.146315499985573330, +-0.146266037903866750, -0.146216575456495080, -0.146167112643581510, -0.146117649465250600, -0.146068185921625570, -0.146018722012830090, -0.145969257738987330, -0.145919793100221910, +-0.145870328096656980, -0.145820862728416240, -0.145771396995622890, -0.145721930898401490, -0.145672464436875290, -0.145622997611167900, -0.145573530421402590, -0.145524062867703860, +-0.145474594950195020, -0.145425126668999680, -0.145375658024241070, -0.145326189016043740, -0.145276719644530980, -0.145227249909825970, -0.145177779812053260, -0.145128309351336110, +-0.145078838527798180, -0.145029367341562710, -0.144979895792754280, -0.144930423881496070, -0.144880951607911840, -0.144831478972124780, -0.144782005974259470, -0.144732532614439140, +-0.144683058892787490, -0.144633584809427730, -0.144584110364484460, -0.144534635558080910, -0.144485160390340760, -0.144435684861387280, -0.144386208971345050, -0.144336732720337260, +-0.144287256108487220, -0.144237779135919480, -0.144188301802757300, -0.144138824109124350, -0.144089346055143900, -0.144039867640940510, -0.143990388866637480, -0.143940909732358460, +-0.143891430238226730, -0.143841950384366870, -0.143792470170902130, -0.143742989597956230, -0.143693508665652390, -0.143644027374115250, -0.143594545723468000, -0.143545063713834410, +-0.143495581345337710, -0.143446098618102510, -0.143396615532252080, -0.143347132087909640, -0.143297648285199810, -0.143248164124245870, -0.143198679605171520, -0.143149194728100030, +-0.143099709493156010, -0.143050223900462680, -0.143000737950143810, -0.142951251642322670, -0.142901764977123810, -0.142852277954670560, -0.142802790575086630, -0.142753302838495240, +-0.142703814745021060, -0.142654326294787360, -0.142604837487917800, -0.142555348324535730, -0.142505858804765740, -0.142456368928731090, -0.142406878696555080, -0.142357388108362320, +-0.142307897164276080, -0.142258405864420100, -0.142208914208917650, -0.142159422197893380, -0.142109929831470560, -0.142060437109772900, -0.142010944032923690, -0.141961450601047590, +-0.141911956814267850, -0.141862462672708220, -0.141812968176491970, -0.141763473325743770, -0.141713978120586890, -0.141664482561145060, -0.141614986647541570, -0.141565490379901040, +-0.141515993758346810, -0.141466496783002600, -0.141416999453991690, -0.141367501771438750, -0.141318003735467020, -0.141268505346199860, -0.141219006603761880, -0.141169507508276370, +-0.141120008059867100, -0.141070508258657360, -0.141021008104771810, -0.140971507598333710, -0.140922006739466870, -0.140872505528294560, -0.140823003964941430, -0.140773502049530790, +-0.140723999782186390, -0.140674497163031570, -0.140624994192190910, -0.140575490869787790, -0.140525987195945950, -0.140476483170788670, -0.140426978794440660, -0.140377474067025170, +-0.140327968988665590, -0.140278463559486500, -0.140228957779611250, -0.140179451649163620, -0.140129945168266910, -0.140080438337045780, -0.140030931155623570, -0.139981423624124020, +-0.139931915742670470, -0.139882407511387560, -0.139832898930398660, -0.139783389999827480, -0.139733880719797390, -0.139684371090433050, -0.139634861111857800, -0.139585350784195370, +-0.139535840107569140, -0.139486329082103730, -0.139436817707922520, -0.139387305985148810, -0.139337793913907270, -0.139288281494321260, -0.139238768726514530, -0.139189255610610460, +-0.139139742146733690, -0.139090228335007530, -0.139040714175555830, -0.138991199668501900, -0.138941684813970430, -0.138892169612084730, -0.138842654062968580, -0.138793138166745380, +-0.138743621923539780, -0.138694105333475120, -0.138644588396675210, -0.138595071113263360, -0.138545553483364280, -0.138496035507101320, -0.138446517184598270, -0.138396998515978500, +-0.138347479501366670, -0.138297960140886130, -0.138248440434660250, -0.138198920382813730, -0.138149399985469910, -0.138099879242752550, -0.138050358154785090, -0.138000836721692170, +-0.137951314943597140, -0.137901792820623810, -0.137852270352895600, -0.137802747540537120, -0.137753224383671800, -0.137703700882423400, -0.137654177036915320, -0.137604652847272220, +-0.137555128313617490, -0.137505603436074960, -0.137456078214767960, -0.137406552649821210, -0.137357026741358080, -0.137307500489501970, -0.137257973894377520, -0.137208446956108120, +-0.137158919674817640, -0.137109392050629390, -0.137059864083668100, -0.137010335774057190, -0.136960807121920410, -0.136911278127381160, -0.136861748790564170, -0.136812219111592800, +-0.136762689090590920, -0.136713158727681830, -0.136663628022990310, -0.136614096976639700, -0.136564565588753880, -0.136515033859456180, -0.136465501788871320, -0.136415969377122750, +-0.136366436624333790, -0.136316903530629170, -0.136267370096132300, -0.136217836320967010, -0.136168302205256690, -0.136118767749126040, -0.136069232952698490, -0.136019697816097850, +-0.135970162339447530, -0.135920626522872230, -0.135871090366495360, -0.135821553870440790, -0.135772017034831880, -0.135722479859793380, -0.135672942345448660, -0.135623404491921590, +-0.135573866299335570, -0.135524327767815340, -0.135474788897484270, -0.135425249688465810, -0.135375710140884650, -0.135326170254864210, -0.135276630030528370, -0.135227089468000490, +-0.135177548567405330, -0.135128007328866290, -0.135078465752507260, -0.135028923838451610, -0.134979381586824070, -0.134929838997748100, -0.134880296071347520, -0.134830752807745790, +-0.134781209207067570, -0.134731665269436360, -0.134682120994975980, -0.134632576383809850, -0.134583031436062730, -0.134533486151858030, -0.134483940531319620, -0.134434394574570900, +-0.134384848281736660, -0.134335301652940280, -0.134285754688305200, -0.134236207387956190, -0.134186659752016660, -0.134137111780610470, -0.134087563473861080, -0.134038014831893200, +-0.133988465854830290, -0.133938916542796220, -0.133889366895914410, -0.133839816914309630, -0.133790266598105310, -0.133740715947425310, -0.133691164962393080, -0.133641613643133400, +-0.133592061989769670, -0.133542510002425780, -0.133492957681225180, -0.133443405026292650, -0.133393852037751590, -0.133344298715725450, -0.133294745060339000, -0.133245191071715700, +-0.133195636749979420, -0.133146082095253610, -0.133096527107663040, -0.133046971787331130, -0.132997416134381820, -0.132947860148938500, -0.132898303831126000, -0.132848747181067710, +-0.132799190198887580, -0.132749632884709010, -0.132700075238656820, -0.132650517260854420, -0.132600958951425730, -0.132551400310494230, -0.132501841338184660, -0.132452282034620480, +-0.132402722399925150, -0.132353162434223460, -0.132303602137638840, -0.132254041510295240, -0.132204480552316090, -0.132154919263826190, -0.132105357644948990, -0.132055795695808390, +-0.132006233416527840, -0.131956670807232170, -0.131907107868044830, -0.131857544599089690, -0.131807981000490270, -0.131758417072371350, -0.131708852814856360, -0.131659288228069240, +-0.131609723312133470, -0.131560158067173830, -0.131510592493313820, -0.131461026590677290, -0.131411460359387780, -0.131361893799570060, -0.131312326911347590, -0.131262759694843860, +-0.131213192150183680, -0.131163624277490510, -0.131114056076888280, -0.131064487548500470, -0.131014918692451910, -0.130965349508866010, -0.130915779997866770, -0.130866210159577640, +-0.130816639994123410, -0.130767069501627560, -0.130717498682214080, -0.130667927536006370, -0.130618356063129330, -0.130568784263706360, -0.130519212137861440, -0.130469639685718060, +-0.130420066907401020, -0.130370493803033780, -0.130320920372739900, -0.130271346616644160, -0.130221772534870020, -0.130172198127541490, -0.130122623394782010, -0.130073048336716400, +-0.130023472953468190, -0.129973897245161290, -0.129924321211919190, -0.129874744853866740, -0.129825168171127440, -0.129775591163825200, -0.129726013832083540, -0.129676436176027310, +-0.129626858195779960, -0.129577279891465470, -0.129527701263207370, -0.129478122311130430, -0.129428543035358200, -0.129378963436014150, -0.129329383513223150, -0.129279803267108690, +-0.129230222697794720, -0.129180641805404760, -0.129131060590063600, -0.129081479051894820, -0.129031897191022340, -0.128982315007569680, -0.128932732501661680, -0.128883149673421820, +-0.128833566522974120, -0.128783983050442030, -0.128734399255950450, -0.128684815139622850, -0.128635230701583230, -0.128585645941955070, -0.128536060860863250, -0.128486475458431280, +-0.128436889734783120, -0.128387303690042310, -0.128337717324333660, -0.128288130637780720, -0.128238543630507020, -0.128188956302637410, -0.128139368654295400, -0.128089780685604950, +-0.128040192396689620, -0.127990603787674270, -0.127941014858682390, -0.127891425609837990, -0.127841836041264560, -0.127792246153086990, -0.127742655945428800, -0.127693065418413990, +-0.127643474572166070, -0.127593883406809880, -0.127544291922469020, -0.127494700119267390, -0.127445107997328610, -0.127395515556777470, -0.127345922797737540, -0.127296329720332390, +-0.127246736324686830, -0.127197142610924440, -0.127147548579169180, -0.127097954229544650, -0.127048359562175640, -0.126998764577185730, -0.126949169274698900, -0.126899573654838730, +-0.126849977717730070, -0.126800381463496450, -0.126750784892261880, -0.126701188004149900, -0.126651590799285400, -0.126601993277791920, -0.126552395439793460, -0.126502797285413580, +-0.126453198814777120, -0.126403600028007680, -0.126354000925228800, -0.126304401506565360, -0.126254801772140910, -0.126205201722079470, -0.126155601356504580, -0.126106000675541120, +-0.126056399679312650, -0.126006798367943210, -0.125957196741556310, -0.125907594800276860, -0.125857992544228410, -0.125808389973535000, -0.125758787088320170, -0.125709183888708830, +-0.125659580374824500, -0.125609976546791240, -0.125560372404732580, -0.125510767948773440, -0.125461163179037380, -0.125411558095647970, -0.125361952698730100, -0.125312346988407370, +-0.125262740964803750, -0.125213134628042840, -0.125163527978249560, -0.125113921015547440, -0.125064313740060500, -0.125014706151912350, -0.124965098251227880, -0.124915490038130670, +-0.124865881512744720, -0.124816272675193630, -0.124766663525602310, -0.124717054064094320, -0.124667444290793700, -0.124617834205824020, -0.124568223809310210, -0.124518613101375820, +-0.124469002082144910, -0.124419390751741060, -0.124369779110289170, -0.124320167157912820, -0.124270554894735620, -0.124220942320882470, -0.124171329436476980, -0.124121716241643160, +-0.124072102736504600, -0.124022488921186220, -0.123972874795811640, -0.123923260360504860, -0.123873645615389480, -0.123824030560590420, -0.123774415196231310, -0.123724799522436150, +-0.123675183539328550, -0.123625567247033430, -0.123575950645674390, -0.123526333735375480, -0.123476716516260300, -0.123427098988453750, -0.123377481152079470, -0.123327863007261030, +-0.123278244554123400, -0.123228625792790130, -0.123179006723385320, -0.123129387346032540, -0.123079767660856740, -0.123030147667981510, -0.122980527367530910, -0.122930906759628560, +-0.122881285844399380, -0.122831664621966980, -0.122782043092455430, -0.122732421255988320, -0.122682799112690600, -0.122633176662685890, -0.122583553906098240, -0.122533930843051250, +-0.122484307473669880, -0.122434683798077750, -0.122385059816398470, -0.122335435528756980, -0.122285810935276880, -0.122236186036082270, -0.122186560831296750, -0.122136935321045280, +-0.122087309505451460, -0.122037683384639370, -0.121988056958732630, -0.121938430227856190, -0.121888803192133670, -0.121839175851689140, -0.121789548206646240, -0.121739920257129920, +-0.121690292003263770, -0.121640663445171910, -0.121591034582977940, -0.121541405416806830, -0.121491775946782220, -0.121442146173028150, -0.121392516095668280, -0.121342885714827560, +-0.121293255030629630, -0.121243624043198120, -0.121193992752657990, -0.121144361159132880, -0.121094729262746860, -0.121045097063623580, -0.120995464561888010, -0.120945831757663750, +-0.120896198651074940, -0.120846565242245170, -0.120796931531299450, -0.120747297518361390, -0.120697663203555090, -0.120648028587004190, -0.120598393668833650, -0.120548758449167130, +-0.120499122928128710, -0.120449487105842050, -0.120399850982432120, -0.120350214558022560, -0.120300577832737010, -0.120250940806700470, -0.120201303480036560, -0.120151665852869400, +-0.120102027925322650, -0.120052389697521260, -0.120002751169588890, -0.119953112341649650, -0.119903473213827190, -0.119853833786246480, -0.119804194059031190, -0.119754554032305410, +-0.119704913706192810, -0.119655273080818360, -0.119605632156305740, -0.119555990932779020, -0.119506349410361900, -0.119456707589179340, -0.119407065469355010, -0.119357423051012570, +-0.119307780334277020, -0.119258137319272030, -0.119208494006121680, -0.119158850394949670, -0.119109206485880960, -0.119059562279039230, -0.119009917774548610, -0.118960272972532750, +-0.118910627873116640, -0.118860982476423970, -0.118811336782578840, -0.118761690791704930, -0.118712044503927240, -0.118662397919369430, -0.118612751038155620, -0.118563103860409500, +-0.118513456386256060, -0.118463808615818980, -0.118414160549221940, -0.118364512186589930, -0.118314863528046640, -0.118265214573716210, -0.118215565323722280, -0.118165915778189880, +-0.118116265937242710, -0.118066615801004860, -0.118016965369600030, -0.117967314643153230, -0.117917663621788140, -0.117868012305628910, -0.117818360694799190, -0.117768708789424010, +-0.117719056589627060, -0.117669404095532460, -0.117619751307263920, -0.117570098224946450, -0.117520444848703720, -0.117470791178659880, -0.117421137214938620, -0.117371482957664960, +-0.117321828406962610, -0.117272173562955220, -0.117222518425767850, -0.117172862995524190, -0.117123207272348360, -0.117073551256364080, -0.117023894947696360, -0.116974238346468900, +-0.116924581452805850, -0.116874924266830910, -0.116825266788669090, -0.116775609018444100, -0.116725950956280090, -0.116676292602300770, -0.116626633956631160, -0.116576975019394960, +-0.116527315790716320, -0.116477656270718950, -0.116427996459527880, -0.116378336357266830, -0.116328675964059480, -0.116279015280030900, -0.116229354305304760, -0.116179693040005250, +-0.116130031484256060, -0.116080369638182250, -0.116030707501907500, -0.115981045075555980, -0.115931382359251410, -0.115881719353118820, -0.115832056057281930, -0.115782392471864910, +-0.115732728596991460, -0.115683064432786640, -0.115633399979374150, -0.115583735236878160, -0.115534070205422400, -0.115484404885131900, -0.115434739276130390, -0.115385073378541580, +-0.115335407192490540, -0.115285740718100980, -0.115236073955497060, -0.115186406904802520, -0.115136739566142400, -0.115087071939640430, -0.115037404025420800, -0.114987735823607200, +-0.114938067334324700, -0.114888398557697040, -0.114838729493848380, -0.114789060142902450, -0.114739390504984330, -0.114689720580217720, -0.114640050368726810, -0.114590379870635330, +-0.114540709086068340, -0.114491038015149580, -0.114441366658003220, -0.114391695014753020, -0.114342023085524010, -0.114292350870439940, -0.114242678369624570, -0.114193005583202920, +-0.114143332511298770, -0.114093659154036280, -0.114043985511539210, -0.113994311583932630, -0.113944637371340250, -0.113894962873886270, -0.113845288091694460, -0.113795613024889870, +-0.113745937673596240, -0.113696262037937770, -0.113646586118038200, -0.113596909914022600, -0.113547233426014750, -0.113497556654138800, -0.113447879598518510, -0.113398202259278980, +-0.113348524636543920, -0.113298846730437120, -0.113249168541083650, -0.113199490068607260, -0.113149811313132130, -0.113100132274782050, -0.113050452953682070, -0.113000773349955950, +-0.112951093463727910, -0.112901413295121700, -0.112851732844262380, -0.112802052111273740, -0.112752371096279960, -0.112702689799404810, -0.112653008220773380, -0.112603326360509450, +-0.112553644218737180, -0.112503961795580370, -0.112454279091164090, -0.112404596105612110, -0.112354912839048210, -0.112305229291597460, -0.112255545463383640, -0.112205861354530950, +-0.112156176965163180, -0.112106492295405400, -0.112056807345381380, -0.112007122115215350, -0.111957436605031090, -0.111907750814953660, -0.111858064745106860, -0.111808378395614890, +-0.111758691766601540, -0.111709004858191890, -0.111659317670509750, -0.111609630203679300, -0.111559942457824340, -0.111510254433069960, -0.111460566129539950, -0.111410877547358080, +-0.111361188686649460, -0.111311499547537860, -0.111261810130147520, -0.111212120434602210, -0.111162430461027040, -0.111112740209545800, -0.111063049680282700, -0.111013358873361540, +-0.110963667788907430, -0.110913976427044130, -0.110864284787895910, -0.110814592871586530, -0.110764900678241100, -0.110715208207983430, -0.110665515460937740, -0.110615822437227810, +-0.110566129136978770, -0.110516435560314420, -0.110466741707358970, -0.110417047578236230, -0.110367353173071290, -0.110317658491987990, -0.110267963535110110, -0.110218268302562730, +-0.110168572794469700, -0.110118877010955240, -0.110069180952143140, -0.110019484618158540, -0.109969788009125210, -0.109920091125167430, -0.109870393966408980, -0.109820696532974970, +-0.109770998824989220, -0.109721300842575990, -0.109671602585859050, -0.109621904054963550, -0.109572205250013290, -0.109522506171132520, -0.109472806818445040, -0.109423107192075990, +-0.109373407292149170, -0.109323707118788390, -0.109274006672118770, -0.109224305952264150, -0.109174604959348760, -0.109124903693496420, -0.109075202154832250, -0.109025500343480090, +-0.108975798259564170, -0.108926095903208310, -0.108876393274537660, -0.108826690373676020, -0.108776987200747670, -0.108727283755876400, -0.108677580039187360, -0.108627876050804370, +-0.108578171790851690, -0.108528467259453140, -0.108478762456733870, -0.108429057382817680, -0.108379352037828420, -0.108329646421891200, -0.108279940535129890, -0.108230234377668710, +-0.108180527949631510, -0.108130821251143430, -0.108081114282328310, -0.108031407043310380, -0.107981699534213510, -0.107931991755162830, -0.107882283706282150, -0.107832575387695780, +-0.107782866799527530, -0.107733157941902550, -0.107683448814944680, -0.107633739418778180, -0.107584029753526910, -0.107534319819315980, -0.107484609616269270, -0.107434899144511030, +-0.107385188404165100, -0.107335477395356630, -0.107285766118209490, -0.107236054572847480, -0.107186342759395770, -0.107136630677978210, -0.107086918328719070, -0.107037205711742190, +-0.106987492827172740, -0.106937779675134560, -0.106888066255751940, -0.106838352569148700, -0.106788638615450020, -0.106738924394779750, -0.106689209907262160, -0.106639495153021110, +-0.106589780132181760, -0.106540064844867970, -0.106490349291204020, -0.106440633471313730, -0.106390917385322320, -0.106341201033353610, -0.106291484415531460, -0.106241767531981040, +-0.106192050382826200, -0.106142332968191230, -0.106092615288199990, -0.106042897342977660, -0.105993179132648070, -0.105943460657335540, -0.105893741917163910, -0.105844022912258390, +-0.105794303642742800, -0.105744584108741440, -0.105694864310378180, -0.105645144247778210, -0.105595423921065380, -0.105545703330363990, -0.105495982475797900, -0.105446261357492290, +-0.105396539975571020, -0.105346818330157980, -0.105297096421378330, -0.105247374249355930, -0.105197651814215090, -0.105147929116079690, -0.105098206155074900, -0.105048482931324600, +-0.104998759444953100, -0.104949035696084240, -0.104899311684843250, -0.104849587411353970, -0.104799862875740740, -0.104750138078127400, -0.104700413018639150, -0.104650687697399870, +-0.104600962114533870, -0.104551236270165030, -0.104501510164418540, -0.104451783797418280, -0.104402057169288100, -0.104352330280153230, -0.104302603130137530, -0.104252875719365340, +-0.104203148047960490, -0.104153420116048240, -0.104103691923752420, -0.104053963471197390, -0.104004234758506980, -0.103954505785806450, -0.103904776553219640, -0.103855047060870900, +-0.103805317308884090, -0.103755587297384450, -0.103705857026495820, -0.103656126496342550, -0.103606395707048530, -0.103556664658738960, -0.103506933351537720, -0.103457201785569160, +-0.103407469960957150, -0.103357737877826900, -0.103308005536302320, -0.103258272936507270, -0.103208540078566990, -0.103158806962605350, -0.103109073588746700, -0.103059339957114910, +-0.103009606067835230, -0.102959871921031520, -0.102910137516828150, -0.102860402855348980, -0.102810667936719240, -0.102760932761062840, -0.102711197328504100, -0.102661461639166940, +-0.102611725693176560, -0.102561989490656850, -0.102512253031732180, -0.102462516316526450, -0.102412779345164850, -0.102363042117771310, -0.102313304634469720, -0.102263566895385310, +-0.102213828900641980, -0.102164090650364090, -0.102114352144675530, -0.102064613383701530, -0.102014874367565980, -0.101965135096393270, -0.101915395570307250, -0.101865655789433210, +-0.101815915753895020, -0.101766175463817040, -0.101716434919323180, -0.101666694120538680, -0.101616953067587430, -0.101567211760593810, -0.101517470199681710, -0.101467728384976390, +-0.101417986316601750, -0.101368243994681680, -0.101318501419341470, -0.101268758590704990, -0.101219015508896610, -0.101169272174040260, -0.101119528586261160, -0.101069784745683250, +-0.101020040652430880, -0.100970296306627960, -0.100920551708399740, -0.100870806857870140, -0.100821061755163520, -0.100771316400403810, -0.100721570793716260, -0.100671824935224770, +-0.100622078825053710, -0.100572332463327030, -0.100522585850169950, -0.100472838985706410, -0.100423091870060770, -0.100373344503356960, -0.100323596885720230, -0.100273849017274500, +-0.100224100898143720, -0.100174352528453120, -0.100124603908326640, -0.100074855037888650, -0.100025105917263090, -0.099975356546575203, -0.099925606925948915, -0.099875857055508624, +-0.099826106935378231, -0.099776356565683025, -0.099726605946546920, -0.099676855078094304, -0.099627103960449118, -0.099577352593736609, -0.099527600978080707, -0.099477849113605812, +-0.099428097000435853, -0.099378344638696089, -0.099328592028510465, -0.099278839170002922, -0.099229086063298721, -0.099179332708521806, -0.099129579105796561, -0.099079825255246917, +-0.099030071156998162, -0.098980316811174224, -0.098930562217899504, -0.098880807377297916, -0.098831052289494764, -0.098781296954613990, -0.098731541372779966, -0.098681785544116635, +-0.098632029468749299, -0.098582273146801888, -0.098532516578398788, -0.098482759763663955, -0.098433002702722663, -0.098383245395698871, -0.098333487842716519, -0.098283730043900883, +-0.098233971999375932, -0.098184213709266041, -0.098134455173695193, -0.098084696392788634, -0.098034937366670336, -0.097985178095464698, -0.097935418579295663, -0.097885658818288535, +-0.097835898812567254, -0.097786138562256222, -0.097736378067479410, -0.097686617328362091, -0.097636856345028236, -0.097587095117602232, -0.097537333646208049, -0.097487571930970976, +-0.097437809972014969, -0.097388047769463998, -0.097338285323443352, -0.097288522634076988, -0.097238759701489333, -0.097188996525804316, -0.097139233107147255, -0.097089469445642118, +-0.097039705541413307, -0.096989941394584792, -0.096940177005281861, -0.096890412373628484, -0.096840647499749077, -0.096790882383767610, -0.096741117025809384, -0.096691351425998356, +-0.096641585584458956, -0.096591819501315151, -0.096542053176692233, -0.096492286610714198, -0.096442519803505433, -0.096392752755189923, -0.096342985465892983, -0.096293217935738570, +-0.096243450164850683, -0.096193682153354609, -0.096143913901374320, -0.096094145409034257, -0.096044376676458376, -0.095994607703772009, -0.095944838491099110, -0.095895069038564124, +-0.095845299346291032, -0.095795529414405112, -0.095745759243030387, -0.095695988832291259, -0.095646218182311712, -0.095596447293217063, -0.095546676165131295, -0.095496904798178836, +-0.095447133192483685, -0.095397361348171131, -0.095347589265365171, -0.095297816944189803, -0.095248044384770331, -0.095198271587230751, -0.095148498551695493, -0.095098725278288540, +-0.095048951767135223, -0.094999178018359526, -0.094949404032085891, -0.094899629808438288, -0.094849855347542061, -0.094800080649521196, -0.094750305714500133, -0.094700530542602857, +-0.094650755133954698, -0.094600979488679640, -0.094551203606902154, -0.094501427488746209, -0.094451651134337136, -0.094401874543798933, -0.094352097717255598, -0.094302320654832475, +-0.094252543356653534, -0.094202765822843246, -0.094152988053525608, -0.094103210048825922, -0.094053431808868229, -0.094003653333776943, -0.093953874623676090, -0.093904095678690985, +-0.093854316498945656, -0.093804537084564515, -0.093754757435671604, -0.093704977552392238, -0.093655197434850429, -0.093605417083170619, -0.093555636497476835, -0.093505855677894406, +-0.093456074624547317, -0.093406293337560065, -0.093356511817056620, -0.093306730063162341, -0.093256948076001239, -0.093207165855697327, -0.093157383402375948, -0.093107600716161101, +-0.093057817797177256, -0.093008034645548424, -0.092958251261399949, -0.092908467644855844, -0.092858683796040564, -0.092808899715078136, -0.092759115402093903, -0.092709330857211877, +-0.092659546080556529, -0.092609761072251884, -0.092559975832423258, -0.092510190361194705, -0.092460404658690681, -0.092410618725035185, -0.092360832560353601, -0.092311046164769928, +-0.092261259538408205, -0.092211472681393764, -0.092161685593850642, -0.092111898275903312, -0.092062110727675797, -0.092012322949293443, -0.091962534940880289, -0.091912746702560791, +-0.091862958234458975, -0.091813169536700212, -0.091763380609408529, -0.091713591452708396, -0.091663802066723837, -0.091614012451580226, -0.091564222607401574, -0.091514432534312365, +-0.091464642232436638, -0.091414851701899738, -0.091365060942825718, -0.091315269955338604, -0.091265478739563755, -0.091215687295625208, -0.091165895623647436, -0.091116103723754491, +-0.091066311596071731, -0.091016519240723182, -0.090966726657833341, -0.090916933847526249, -0.090867140809927249, -0.090817347545160410, -0.090767554053350200, -0.090717760334620659, +-0.090667966389097160, -0.090618172216903742, -0.090568377818164902, -0.090518583193004667, -0.090468788341548423, -0.090418993263920208, -0.090369197960244063, -0.090319402430645360, +-0.090269606675248165, -0.090219810694176950, -0.090170014487555752, -0.090120218055509974, -0.090070421398163653, -0.090020624515641273, -0.089970827408066889, -0.089921030075565872, +-0.089871232518262290, -0.089821434736280625, -0.089771636729744933, -0.089721838498780584, -0.089672040043511647, -0.089622241364062605, -0.089572442460557511, -0.089522643333121765, +-0.089472843981879407, -0.089423044406954935, -0.089373244608472416, -0.089323444586557221, -0.089273644341333419, -0.089223843872925063, -0.089174043181457552, -0.089124242267054912, +-0.089074441129841683, -0.089024639769941905, -0.088974838187480962, -0.088925036382582923, -0.088875234355372298, -0.088825432105973143, -0.088775629634510855, -0.088725826941109490, +-0.088676024025893557, -0.088626220888987126, -0.088576417530515580, -0.088526613950602989, -0.088476810149373863, -0.088427006126952284, -0.088377201883463610, -0.088327397419031950, +-0.088277592733781343, -0.088227787827837204, -0.088177982701323585, -0.088128177354365012, -0.088078371787085566, -0.088028565999610620, -0.087978759992064254, -0.087928953764571008, +-0.087879147317254921, -0.087829340650241408, -0.087779533763654549, -0.087729726657618856, -0.087679919332258396, -0.087630111787698584, -0.087580304024063499, -0.087530496041477640, +-0.087480687840065116, -0.087430879419951299, -0.087381070781260298, -0.087331261924116166, -0.087281452848644331, -0.087231643554968846, -0.087181834043214265, -0.087132024313504669, +-0.087082214365965430, -0.087032404200720670, -0.086982593817894902, -0.086932783217612206, -0.086882972399997982, -0.086833161365176340, -0.086783350113271790, -0.086733538644408414, +-0.086683726958711654, -0.086633915056305563, -0.086584102937314680, -0.086534290601863101, -0.086484478050076252, -0.086434665282078188, -0.086384852297993475, -0.086335039097946181, +-0.086285225682061734, -0.086235412050464227, -0.086185598203277744, -0.086135784140627697, -0.086085969862638209, -0.086036155369433778, -0.085986340661138527, -0.085936525737877870, +-0.085886710599775887, -0.085836895246957146, -0.085787079679545700, -0.085737263897667018, -0.085687447901445168, -0.085637631691004704, -0.085587815266469705, -0.085537998627965614, +-0.085488181775616540, -0.085438364709546993, -0.085388547429881112, -0.085338729936744295, -0.085288912230260652, -0.085239094310554278, -0.085189276177750628, -0.085139457831973769, +-0.085089639273348283, -0.085039820501998251, -0.084990001518049099, -0.084940182321624952, -0.084890362912850362, -0.084840543291849396, -0.084790723458747538, -0.084740903413668855, +-0.084691083156737929, -0.084641262688078839, -0.084591442007817041, -0.084541621116076632, -0.084491800012982177, -0.084441978698657771, -0.084392157173228871, -0.084342335436819571, +-0.084292513489553994, -0.084242691331557581, -0.084192868962954429, -0.084143046383869116, -0.084093223594425739, -0.084043400594749740, -0.083993577384965240, -0.083943753965196807, +-0.083893930335568537, -0.083844106496205884, -0.083794282447232971, -0.083744458188774351, -0.083694633720954134, -0.083644809043897789, -0.083594984157729410, -0.083545159062573579, +-0.083495333758554405, -0.083445508245797342, -0.083395682524426501, -0.083345856594566017, -0.083296030456341333, -0.083246204109876570, -0.083196377555296297, -0.083146550792724636, +-0.083096723822287041, -0.083046896644107637, -0.082997069258311004, -0.082947241665021237, -0.082897413864363820, -0.082847585856462860, -0.082797757641442940, -0.082747929219428182, +-0.082698100590544055, -0.082648271754914668, -0.082598442712664588, -0.082548613463917980, -0.082498784008800272, -0.082448954347435599, -0.082399124479948543, -0.082349294406463242, +-0.082299464127105135, -0.082249633641998374, -0.082199802951267095, -0.082149972055036741, -0.082100140953431461, -0.082050309646575822, -0.082000478134593963, -0.081950646417611364, +-0.081900814495752150, -0.081850982369140887, -0.081801150037901726, -0.081751317502160151, -0.081701484762040269, -0.081651651817666676, -0.081601818669163509, -0.081551985316656236, +-0.081502151760269009, -0.081452318000126395, -0.081402484036352543, -0.081352649869072924, -0.081302815498411687, -0.081252980924492957, -0.081203146147442229, -0.081153311167383627, +-0.081103475984441759, -0.081053640598740748, -0.081003805010406077, -0.080953969219561897, -0.080904133226332803, -0.080854297030842917, -0.080804460633217737, -0.080754624033581413, +-0.080704787232058525, -0.080654950228773226, -0.080605113023850983, -0.080555275617415975, -0.080505438009592770, -0.080455600200505531, -0.080405762190279728, -0.080355923979039526, +-0.080306085566909061, -0.080256246954013830, -0.080206408140477983, -0.080156569126426117, -0.080106729911982380, -0.080056890497272271, -0.080007050882419925, -0.079957211067549966, +-0.079907371052786530, -0.079857530838255100, -0.079807690424079855, -0.079757849810385376, -0.079708008997295826, -0.079658167984936704, -0.079608326773432159, -0.079558485362906800, +-0.079508643753484792, -0.079458801945291604, -0.079408959938451415, -0.079359117733088833, -0.079309275329328008, -0.079259432727294438, -0.079209589927112287, -0.079159746928905719, +-0.079109903732800219, -0.079060060338919977, -0.079010216747389561, -0.078960372958333178, -0.078910528971876295, -0.078860684788143107, -0.078810840407258193, -0.078760995829345731, +-0.078711151054531234, -0.078661306082938851, -0.078611460914693204, -0.078561615549918459, -0.078511769988740127, -0.078461924231282371, -0.078412078277669786, -0.078362232128026579, +-0.078312385782478233, -0.078262539241148926, -0.078212692504162823, -0.078162845571645420, -0.078112998443720924, -0.078063151120513916, -0.078013303602148601, -0.077963455888750463, +-0.077913607980443680, -0.077863759877352876, -0.077813911579602241, -0.077764063087317259, -0.077714214400622136, -0.077664365519641454, -0.077614516444499432, -0.077564667175321553, +-0.077514817712232009, -0.077464968055355424, -0.077415118204815975, -0.077365268160739173, -0.077315417923249197, -0.077265567492470238, -0.077215716868527809, -0.077165866051546073, +-0.077116015041649680, -0.077066163838962809, -0.077016312443610971, -0.076966460855718344, -0.076916609075409578, -0.076866757102808839, -0.076816904938041650, -0.076767052581232190, +-0.076717200032505109, -0.076667347291984586, -0.076617494359796132, -0.076567641236063938, -0.076517787920912655, -0.076467934414466449, -0.076418080716850856, -0.076368226828190056, +-0.076318372748608254, -0.076268518478230948, -0.076218664017182358, -0.076168809365587106, -0.076118954523569385, -0.076069099491254732, -0.076019244268767314, -0.075969388856231793, +-0.075919533253772362, -0.075869677461514531, -0.075819821479582508, -0.075769965308100928, -0.075720108947193998, -0.075670252396987242, -0.075620395657604852, -0.075570538729171480, +-0.075520681611811302, -0.075470824305649872, -0.075420966810811382, -0.075371109127420469, -0.075321251255601351, -0.075271393195479541, -0.075221534947179244, -0.075171676510824681, +-0.075121817886541362, -0.075071959074453493, -0.075022100074685724, -0.074972240887362276, -0.074922381512608660, -0.074872521950549081, -0.074822662201308218, -0.074772802265010235, +-0.074722942141780699, -0.074673081831743815, -0.074623221335024220, -0.074573360651746134, -0.074523499782035083, -0.074473638726015284, -0.074423777483811390, -0.074373916055547606, +-0.074324054441349471, -0.074274192641341205, -0.074224330655647014, -0.074174468484392436, -0.074124606127701692, -0.074074743585699432, -0.074024880858509876, -0.073975017946258548, +-0.073925154849069682, -0.073875291567067930, -0.073825428100377510, -0.073775564449123948, -0.073725700613431491, -0.073675836593424776, -0.073625972389228023, -0.073576108000966783, +-0.073526243428765278, -0.073476378672748172, -0.073426513733039656, -0.073376648609765310, -0.073326783303049342, -0.073276917813015971, -0.073227052139790749, -0.073177186283497897, +-0.073127320244262092, -0.073077454022207528, -0.073027587617459769, -0.072977721030143050, -0.072927854260382022, -0.072877987308300932, -0.072828120174025290, -0.072778252857679374, +-0.072728385359387804, -0.072678517679274843, -0.072628649817466029, -0.072578781774085582, -0.072528913549258181, -0.072479045143108059, -0.072429176555760769, -0.072379307787340530, +-0.072329438837972021, -0.072279569707779476, -0.072229700396888460, -0.072179830905423181, -0.072129961233507886, -0.072080091381268127, -0.072030221348828138, -0.071980351136312598, +-0.071930480743845740, -0.071880610171553130, -0.071830739419558975, -0.071780868487987995, -0.071730997376964381, -0.071681126086613728, -0.071631254617060255, -0.071581382968428642, +-0.071531511140843135, -0.071481639134429287, -0.071431766949311346, -0.071381894585613989, -0.071332022043461452, -0.071282149322979299, -0.071232276424291779, -0.071182403347523127, +-0.071132530092798907, -0.071082656660243354, -0.071032783049981160, -0.070982909262136573, -0.070933035296835159, -0.070883161154201138, -0.070833286834359230, -0.070783412337433654, +-0.070733537663550006, -0.070683662812832504, -0.070633787785405841, -0.070583912581394265, -0.070534037200923355, -0.070484161644117346, -0.070434285911100944, -0.070384410001998368, +-0.070334533916935227, -0.070284657656035740, -0.070234781219424169, -0.070184904607226095, -0.070135027819565751, -0.070085150856567843, -0.070035273718356605, -0.069985396405057645, +-0.069935518916795170, -0.069885641253693911, -0.069835763415878105, -0.069785885403473330, -0.069736007216603849, -0.069686128855394353, -0.069636250319969076, -0.069586371610453626, +-0.069536492726972252, -0.069486613669649630, -0.069436734438610051, -0.069386855033979067, -0.069336975455880939, -0.069287095704440388, -0.069237215779781647, -0.069187335682030310, +-0.069137455411310625, -0.069087574967746868, -0.069037694351464618, -0.068987813562588138, -0.068937932601242105, -0.068888051467550809, -0.068838170161639831, -0.068788288683633431, +-0.068738407033656301, -0.068688525211832704, -0.068638643218288248, -0.068588761053147179, -0.068538878716534204, -0.068488996208573599, -0.068439113529390944, -0.068389230679110499, +-0.068339347657856986, -0.068289464465754651, -0.068239581102929103, -0.068189697569504604, -0.068139813865605414, -0.068089929991357129, -0.068040045946884037, -0.067990161732310817, +-0.067940277347761743, -0.067890392793362425, -0.067840508069237124, -0.067790623175510559, -0.067740738112306992, -0.067690852879752017, -0.067640967477969910, -0.067591081907085390, +-0.067541196167222720, -0.067491310258507506, -0.067441424181064011, -0.067391537935016954, -0.067341651520490611, -0.067291764937610590, -0.067241878186501153, -0.067191991267286574, +-0.067142104180092449, -0.067092216925043080, -0.067042329502263159, -0.066992441911876977, -0.066942554154010139, -0.066892666228786909, -0.066842778136332007, -0.066792889876769734, +-0.066743001450225659, -0.066693112856824097, -0.066643224096689740, -0.066593335169946893, -0.066543446076721136, -0.066493556817136770, -0.066443667391318517, -0.066393777799390652, +-0.066343888041478782, -0.066293998117707184, -0.066244108028200160, -0.066194217773083305, -0.066144327352480908, -0.066094436766517689, -0.066044546015317937, -0.065994655099007260, +-0.065944764017709948, -0.065894872771550733, -0.065844981360653879, -0.065795089785145033, -0.065745198045148445, -0.065695306140788862, -0.065645414072190586, -0.065595521839479212, +-0.065545629442779030, -0.065495736882214772, -0.065445844157910729, -0.065395951269992522, -0.065346058218584441, -0.065296165003811205, -0.065246271625797117, -0.065196378084667786, +-0.065146484380547529, -0.065096590513560607, -0.065046696483832642, -0.064996802291487951, -0.064946907936651241, -0.064897013419446828, -0.064847118740000320, -0.064797223898436021, +-0.064747328894878664, -0.064697433729452539, -0.064647538402283267, -0.064597642913495151, -0.064547747263212926, -0.064497851451560895, -0.064447955478664679, -0.064398059344648567, +-0.064348163049637322, -0.064298266593755204, -0.064248369977127878, -0.064198473199879619, -0.064148576262134743, -0.064098679164018860, -0.064048781905656285, -0.063998884487171753, +-0.063948986908689567, -0.063899089170335363, -0.063849191272233430, -0.063799293214508529, -0.063749394997284936, -0.063699496620688301, -0.063649598084842940, -0.063599699389873560, +-0.063549800535904505, -0.063499901523061397, -0.063450002351468526, -0.063400103021250639, -0.063350203532532068, -0.063300303885438419, -0.063250404080094025, -0.063200504116623160, +-0.063150603995151489, -0.063100703715803313, -0.063050803278703368, -0.063000902683975971, -0.062951001931746770, -0.062901101022140055, -0.062851199955280587, -0.062801298731292685, +-0.062751397350301968, -0.062701495812432770, -0.062651594117809822, -0.062601692266557443, -0.062551790258801282, -0.062501888094665656, -0.062451985774275298, -0.062402083297754533, +-0.062352180665229004, -0.062302277876823027, -0.062252374932661350, -0.062202471832868297, -0.062152568577569504, -0.062102665166889288, -0.062052761600951974, -0.062002857879883196, +-0.061952954003807272, -0.061903049972848963, -0.061853145787132580, -0.061803241446783785, -0.061753336951926883, -0.061703432302686635, -0.061653527499187365, -0.061603622541554721, +-0.061553717429913023, -0.061503812164387030, -0.061453906745101060, -0.061404001172180769, -0.061354095445750476, -0.061304189565934947, -0.061254283532858493, -0.061204377346646778, +-0.061154471007424119, -0.061104564515314840, -0.061054657870444597, -0.061004751072937700, -0.060954844122918933, -0.060904937020512612, -0.060855029765844386, -0.060805122359038587, +-0.060755214800219989, -0.060705307089512904, -0.060655399227042994, -0.060605491212934591, -0.060555583047312456, -0.060505674730300926, -0.060455766262025645, -0.060405857642610951, +-0.060355948872181618, -0.060306039950861964, -0.060256130878777653, -0.060206221656053015, -0.060156312282812381, -0.060106402759181408, -0.060056493085284435, -0.060006583261246221, +-0.059956673287191106, -0.059906763163244760, -0.059856852889531499, -0.059806942466176106, -0.059757031893302913, -0.059707121171037582, -0.059657210299504451, -0.059607299278828296, +-0.059557388109133448, -0.059507476790545570, -0.059457565323189007, -0.059407653707188528, -0.059357741942668470, -0.059307830029754496, -0.059257917968570953, -0.059208005759242170, +-0.059158093401893819, -0.059108180896650230, -0.059058268243636192, -0.059008355442976036, -0.058958442494795441, -0.058908529399218736, -0.058858616156370704, -0.058808702766375689, +-0.058758789229359371, -0.058708875545446071, -0.058658961714760580, -0.058609047737427249, -0.058559133613571734, -0.058509219343318389, -0.058459304926791994, -0.058409390364116895, +-0.058359475655418769, -0.058309560800821947, -0.058259645800451225, -0.058209730654430941, -0.058159815362886780, -0.058109899925943079, -0.058059984343724183, -0.058010068616355770, +-0.057960152743962184, -0.057910236726668222, -0.057860320564598215, -0.057810404257877861, -0.057760487806631490, -0.057710571210983899, -0.057660654471059440, -0.057610737586983783, +-0.057560820558881287, -0.057510903386876741, -0.057460986071094490, -0.057411068611660218, -0.057361151008698277, -0.057311233262333450, -0.057261315372690108, -0.057211397339893909, +-0.057161479164069225, -0.057111560845340401, -0.057061642383833114, -0.057011723779671723, -0.056961805032981018, -0.056911886143885364, -0.056861967112510431, -0.056812047938980585, +-0.056762128623420616, -0.056712209165954888, -0.056662289566709073, -0.056612369825807543, -0.056562449943375080, -0.056512529919536050, -0.056462609754416145, -0.056412689448139708, +-0.056362769000831550, -0.056312848412616030, -0.056262927683618826, -0.056213006813964309, -0.056163085803776831, -0.056113164653182078, -0.056063243362304414, -0.056013321931268643, +-0.055963400360199124, -0.055913478649221547, -0.055863556798460272, -0.055813634808040108, -0.055763712678085414, -0.055713790408721875, -0.055663868000073870, -0.055613945452266188, +-0.055564022765423202, -0.055514099939670596, -0.055464176975132749, -0.055414253871934452, -0.055364330630200083, -0.055314407250055327, -0.055264483731624556, -0.055214560075032573, +-0.055164636280403752, -0.055114712347863776, -0.055064788277537025, -0.055014864069547857, -0.054964939724021972, -0.054915015241083741, -0.054865090620857968, -0.054815165863469031, +-0.054765240969042617, -0.054715315937703103, -0.054665390769575294, -0.054615465464783568, -0.054565540023453624, -0.054515614445709834, -0.054465688731677002, -0.054415762881479500, +-0.054365836895243040, -0.054315910773091988, -0.054265984515151161, -0.054216058121544924, -0.054166131592398990, -0.054116204927837724, -0.054066278127985506, -0.054016351192968035, +-0.053966424122909681, -0.053916496917935271, -0.053866569578169175, -0.053816642103737100, -0.053766714494763418, -0.053716786751372946, -0.053666858873690070, -0.053616930861840488, +-0.053567002715948574, -0.053517074436139157, -0.053467146022536612, -0.053417217475266648, -0.053367288794453634, -0.053317359980222405, -0.053267431032697328, -0.053217501952004115, +-0.053167572738267152, -0.053117643391610812, -0.053067713912160808, -0.053017784300041511, -0.052967854555377766, -0.052917924678293933, -0.052867994668915730, -0.052818064527367550, +-0.052768134253774197, -0.052718203848260071, -0.052668273310950885, -0.052618342641971010, -0.052568411841445277, -0.052518480909498066, -0.052468549846255104, -0.052418618651840769, +-0.052368687326379885, -0.052318755869996833, -0.052268824282817344, -0.052218892564965785, -0.052168960716566563, -0.052119028737745376, -0.052069096628626611, -0.052019164389335112, +-0.051969232019995260, -0.051919299520732771, -0.051869366891672028, -0.051819434132937874, -0.051769501244654688, -0.051719568226948190, -0.051669635079942773, -0.051619701803763268, +-0.051569768398534069, -0.051519834864380887, -0.051469901201428123, -0.051419967409800607, -0.051370033489622720, -0.051320099441020200, -0.051270165264117429, -0.051220230959039249, +-0.051170296525910042, -0.051120361964855539, -0.051070427276000134, -0.051020492459468214, -0.050970557515385512, -0.050920622443876414, -0.050870687245065757, -0.050820751919077936, +-0.050770816466038683, -0.050720880886072392, -0.050670945179303893, -0.050621009345857587, -0.050571073385859207, -0.050521137299433139, -0.050471201086704227, -0.050421264747796873, +-0.050371328282836796, -0.050321391691948401, -0.050271454975256528, -0.050221518132885570, -0.050171581164961267, -0.050121644071608004, -0.050071706852950190, -0.050021769509113558, +-0.049971832040222493, -0.049921894446401854, -0.049871956727776029, -0.049822018884470763, -0.049772080916610451, -0.049722142824319929, -0.049672204607723612, -0.049622266266947226, +-0.049572327802115172, -0.049522389213352301, -0.049472450500783006, -0.049422511664533035, -0.049372572704726787, -0.049322633621489108, -0.049272694414944397, -0.049222755085218395, +-0.049172815632435501, -0.049122876056720131, -0.049072936358198010, -0.049022996536993553, -0.048973056593231604, -0.048923116527036563, -0.048873176338534184, -0.048823236027848854, +-0.048773295595105438, -0.048723355040428344, -0.048673414363943304, -0.048623473565774726, -0.048573532646047461, -0.048523591604885931, -0.048473650442415854, -0.048423709158761659, +-0.048373767754048190, -0.048323826228399855, -0.048273884581942400, -0.048223942814800233, -0.048174000927098205, -0.048124058918960738, -0.048074116790513564, -0.048024174541881098, +-0.047974232173187754, -0.047924289684559272, -0.047874347076120066, -0.047824404347994988, -0.047774461500308459, -0.047724518533186225, -0.047674575446752687, -0.047624632241132711, +-0.047574688916450718, -0.047524745472832440, -0.047474801910402299, -0.047424858229285154, -0.047374914429605418, -0.047324970511488845, -0.047275026475059843, -0.047225082320443271, +-0.047175138047763555, -0.047125193657146437, -0.047075249148716330, -0.047025304522597663, -0.046975359778916176, -0.046925414917796282, -0.046875469939362861, -0.046825524843740321, +-0.046775579631054408, -0.046725634301429543, -0.046675688854990599, -0.046625743291861990, -0.046575797612169463, -0.046525851816037439, -0.046475905903590790, -0.046425959874953932, +-0.046376013730252616, -0.046326067469611265, -0.046276121093154751, -0.046226174601007489, -0.046176227993295231, -0.046126281270142400, -0.046076334431673430, -0.046026387478014061, +-0.045976440409288728, -0.045926493225622290, -0.045876545927139183, -0.045826598513965144, -0.045776650986224618, -0.045726703344042462, -0.045676755587543104, -0.045626807716852298, +-0.045576859732094473, -0.045526911633394500, -0.045476963420876808, -0.045427015094667143, -0.045377066654889948, -0.045327118101670082, -0.045277169435131978, -0.045227220655401391, +-0.045177271762602757, -0.045127322756860502, -0.045077373638300375, -0.045027424407046823, -0.044977475063224706, -0.044927525606958459, -0.044877576038373841, -0.044827626357595282, +-0.044777676564747661, -0.044727726659955398, -0.044677776643344269, -0.044627826515038695, -0.044577876275163554, -0.044527925923843276, -0.044477975461203634, -0.044428024887369050, +-0.044378074202464403, -0.044328123406614128, -0.044278172499943987, -0.044228221482578413, -0.044178270354642286, -0.044128319116260042, -0.044078367767557448, -0.044028416308658926, +-0.043978464739688923, -0.043928513060773201, -0.043878561272036203, -0.043828609373602792, -0.043778657365597419, -0.043728705248145844, -0.043678753021372509, -0.043628800685402293, +-0.043578848240359624, -0.043528895686370285, -0.043478943023558703, -0.043428990252049771, -0.043379037371967910, -0.043329084383438903, -0.043279131286587183, -0.043229178081537638, +-0.043179224768414702, -0.043129271347344150, -0.043079317818450417, -0.043029364181857946, -0.042979410437692510, -0.042929456586078552, -0.042879502627140943, -0.042829548561004141, +-0.042779594387793912, -0.042729640107634692, -0.042679685720651374, -0.042629731226968400, -0.042579776626711537, -0.042529821920005234, -0.042479867106974378, -0.042429912187743411, +-0.042379957162438107, -0.042330002031182909, -0.042280046794102702, -0.042230091451321942, -0.042180136002966391, -0.042130180449160504, -0.042080224790028722, -0.042030269025696815, +-0.041980313156289244, -0.041930357181930888, -0.041880401102746191, -0.041830444918860940, -0.041780488630399577, -0.041730532237486989, -0.041680575740247632, -0.041630619138807272, +-0.041580662433290366, -0.041530705623821808, -0.041480748710526039, -0.041430791693528847, -0.041380834572954668, -0.041330877348928409, -0.041280920021574505, -0.041230962591018751, +-0.041181005057385589, -0.041131047420799920, -0.041081089681386178, -0.041031131839270166, -0.040981173894576318, -0.040931215847429092, -0.040881257697954275, -0.040831299446276309, +-0.040781341092520094, -0.040731382636810080, -0.040681424079272062, -0.040631465420030481, -0.040581506659210231, -0.040531547796935775, -0.040481588833332895, -0.040431629768526038, +-0.040381670602640106, -0.040331711335799561, -0.040281751968130178, -0.040231792499756412, -0.040181832930803164, -0.040131873261394897, -0.040081913491657385, -0.040031953621715091, +-0.039981993651692471, -0.039932033581715307, -0.039882073411908060, -0.039832113142395632, -0.039782152773302472, -0.039732192304754381, -0.039682231736875802, -0.039632271069791648, +-0.039582310303626377, -0.039532349438505768, -0.039482388474554285, -0.039432427411896828, -0.039382466250657867, -0.039332504990963177, -0.039282543632937234, -0.039232582176704923, +-0.039182620622390717, -0.039132658970120401, -0.039082697220018434, -0.039032735372209290, -0.038982773426818745, -0.038932811383971262, -0.038882849243791762, -0.038832887006404686, +-0.038782924671935837, -0.038732962240509677, -0.038682999712251115, -0.038633037087284612, -0.038583074365735957, -0.038533111547729613, -0.038483148633390495, -0.038433185622843057, +-0.038383222516213102, -0.038333259313625086, -0.038283296015203923, -0.038233332621074083, -0.038183369131361347, -0.038133405546190192, -0.038083441865685082, -0.038033478089971810, +-0.037983514219174841, -0.037933550253419088, -0.037883586192829014, -0.037833622037530414, -0.037783657787647765, -0.037733693443305967, -0.037683729004629497, -0.037633764471744144, +-0.037583799844774383, -0.037533835123845123, -0.037483870309080826, -0.037433905400607301, -0.037383940398549018, -0.037333975303030877, -0.037284010114177354, -0.037234044832114253, +-0.037184079456966036, -0.037134113988857617, -0.037084148427913480, -0.037034182774259405, -0.036984217028019878, -0.036934251189319367, -0.036884285258283668, -0.036834319235037258, +-0.036784353119705050, -0.036734386912411515, -0.036684420613282455, -0.036634454222442346, -0.036584487740016103, -0.036534521166128195, -0.036484554500904424, -0.036434587744469268, +-0.036384620896947648, -0.036334653958464025, -0.036284686929144216, -0.036234719809112692, -0.036184752598494359, -0.036134785297413707, -0.036084817905996540, -0.036034850424367319, +-0.035984882852650536, -0.035934915190971986, -0.035884947439456145, -0.035834979598227942, -0.035785011667411840, -0.035735043647133653, -0.035685075537517860, -0.035635107338689381, +-0.035585139050772686, -0.035535170673893585, -0.035485202208176560, -0.035435233653746533, -0.035385265010727973, -0.035335296279246690, -0.035285327459427175, -0.035235358551394341, +-0.035185389555272659, -0.035135420471187957, -0.035085451299264700, -0.035035482039627364, -0.034985512692401778, -0.034935543257712399, -0.034885573735684169, -0.034835604126441565, +-0.034785634430110388, -0.034735664646815122, -0.034685694776680702, -0.034635724819831598, -0.034585754776393626, -0.034535784646491263, -0.034485814430249444, -0.034435844127792645, +-0.034385873739246675, -0.034335903264736026, -0.034285932704385617, -0.034235962058319927, -0.034185991326664784, -0.034136020509544659, -0.034086049607084480, -0.034036078619408737, +-0.033986107546643239, -0.033936136388912477, -0.033886165146340928, -0.033836193819054408, -0.033786222407177401, -0.033736250910834840, -0.033686279330151211, -0.033636307665252323, +-0.033586335916262672, -0.033536364083307180, -0.033486392166510330, -0.033436420165997946, -0.033386448081894511, -0.033336475914324953, -0.033286503663413763, -0.033236531329286757, +-0.033186558912068426, -0.033136586411883696, -0.033086613828857053, -0.033036641163114326, -0.032986668414779992, -0.032936695583978541, -0.032886722670835804, -0.032836749675476250, +-0.032786776598024828, -0.032736803438606014, -0.032686830197345640, -0.032636856874368195, -0.032586883469798600, -0.032536909983761353, -0.032486936416382277, -0.032436962767785862, +-0.032386989038097037, -0.032337015227440299, -0.032287041335941465, -0.032237067363725030, -0.032187093310915925, -0.032137119177638639, -0.032087144964019002, -0.032037170670181504, +-0.031987196296250631, -0.031937221842352218, -0.031887247308610742, -0.031837272695151159, -0.031787298002097938, -0.031737323229576925, -0.031687348377712601, -0.031637373446629903, +-0.031587398436453334, -0.031537423347308705, -0.031487448179320525, -0.031437472932613716, -0.031387497607312791, -0.031337522203543557, -0.031287546721430526, -0.031237571161098619, +-0.031187595522672348, -0.031137619806277529, -0.031087644012038659, -0.031037668140080237, -0.030987692190528087, -0.030937716163506709, -0.030887740059141040, -0.030837763877555574, +-0.030787787618876145, -0.030737811283227248, -0.030687834870733819, -0.030637858381520361, -0.030587881815712703, -0.030537905173435336, -0.030487928454813209, -0.030437951659970819, +-0.030387974789033989, -0.030337997842127224, -0.030288020819375466, -0.030238043720903211, -0.030188066546836291, -0.030138089297299202, -0.030088111972416894, -0.030038134572313861, +-0.029988157097115935, -0.029938179546947614, -0.029888201921933404, -0.029838224222199131, -0.029788246447869298, -0.029738268599068848, -0.029688290675922283, -0.029638312678555434, +-0.029588334607092807, -0.029538356461659341, -0.029488378242379539, -0.029438399949379235, -0.029388421582782934, -0.029338443142715578, -0.029288464629301670, -0.029238486042667045, +-0.029188507382936203, -0.029138528650234096, -0.029088549844685219, -0.029038570966415416, -0.028988592015549181, -0.028938612992211024, -0.028888633896526780, -0.028838654728620950, +-0.028788675488618482, -0.028738696176643885, -0.028688716792822987, -0.028638737337280298, -0.028588757810140770, -0.028538778211528899, -0.028488798541570527, -0.028438818800390162, +-0.028388838988112744, -0.028338859104862790, -0.028288879150766128, -0.028238899125947271, -0.028188919030531168, -0.028138938864642318, -0.028088958628406571, -0.028038978321948422, +-0.027988997945392387, -0.027939017498864301, -0.027889036982488669, -0.027839056396390446, -0.027789075740694134, -0.027739095015525583, -0.027689114221009292, -0.027639133357270213, +-0.027589152424432859, -0.027539171422623070, -0.027489190351965349, -0.027439209212584654, -0.027389228004605491, -0.027339246728153702, -0.027289265383353797, -0.027239283970330725, +-0.027189302489209005, -0.027139320940114467, -0.027089339323171632, -0.027039357638505446, -0.026989375886240421, -0.026939394066502403, -0.026889412179415897, -0.026839430225105418, +-0.026789448203696806, -0.026739466115314577, -0.026689483960083679, -0.026639501738128631, -0.026589519449575268, -0.026539537094548111, -0.026489554673172107, -0.026439572185571775, +-0.026389589631872955, -0.026339607012200162, -0.026289624326678352, -0.026239641575432036, -0.026189658758587062, -0.026139675876267938, -0.026089692928599625, -0.026039709915706640, +-0.025989726837714819, -0.025939743694748683, -0.025889760486932745, -0.025839777214392848, -0.025789793877253508, -0.025739810475639682, -0.025689827009675890, -0.025639843479487973, +-0.025589859885200444, -0.025539876226938270, -0.025489892504825959, -0.025439908718989358, -0.025389924869552990, -0.025339940956641806, -0.025289956980380328, -0.025239972940894403, +-0.025189988838308544, -0.025140004672747712, -0.025090020444336423, -0.025040036153200530, -0.024990051799464546, -0.024940067383252988, -0.024890082904691704, -0.024840098363905216, +-0.024790113761018480, -0.024740129096156017, -0.024690144369443674, -0.024640159581005971, -0.024590174730967869, -0.024540189819453884, -0.024490204846589869, -0.024440219812500344, +-0.024390234717310270, -0.024340249561144164, -0.024290264344127878, -0.024240279066385931, -0.024190293728043284, -0.024140308329224463, -0.024090322870055313, -0.024040337350660357, +-0.023990351771164112, -0.023940366131692432, -0.023890380432369837, -0.023840394673321292, -0.023790408854671315, -0.023740422976545758, -0.023690437039069145, -0.023640451042366440, +-0.023590464986562164, -0.023540478871782171, -0.023490492698150980, -0.023440506465793553, -0.023390520174834419, -0.023340533825399429, -0.023290547417613106, -0.023240560951600410, +-0.023190574427485872, -0.023140587845395338, -0.023090601205453337, -0.023040614507784832, -0.022990627752514349, -0.022940640939767738, -0.022890654069669527, -0.022840667142344236, +-0.022790680157917718, -0.022740693116514502, -0.022690706018259555, -0.022640718863277398, -0.022590731651693886, -0.022540744383633547, -0.022490757059221343, -0.022440769678581808, +-0.022390782241840788, -0.022340794749122816, -0.022290807200552855, -0.022240819596255432, -0.022190831936356407, -0.022140844220980300, -0.022090856450252081, -0.022040868624296280, +-0.021990880743238749, -0.021940892807204019, -0.021890904816316611, -0.021840916770702382, -0.021790928670485866, -0.021740940515792024, -0.021690952306745389, -0.021640964043471819, +-0.021590975726095838, -0.021540987354742417, -0.021490998929536084, -0.021441010450602697, -0.021391021918066782, -0.021341033332053314, -0.021291044692686820, -0.021241056000093156, +-0.021191067254396855, -0.021141078455722884, -0.021091089604195774, -0.021041100699941383, -0.020991111743084240, -0.020941122733748874, -0.020891133672061146, -0.020841144558145581, +-0.020791155392127156, -0.020741166174130399, -0.020691176904281173, -0.020641187582704001, -0.020591198209523862, -0.020541208784865282, -0.020491219308854124, -0.020441229781614920, +-0.020391240203272640, -0.020341250573951818, -0.020291260893778310, -0.020241271162876651, -0.020191281381371814, -0.020141291549388329, -0.020091301667052062, -0.020041311734487539, +-0.019991321751819734, -0.019941331719173186, -0.019891341636673748, -0.019841351504445957, -0.019791361322614345, -0.019741371091304773, -0.019691380810641774, -0.019641390480750320, +-0.019591400101754950, -0.019541409673781519, -0.019491419196954567, -0.019441428671399068, -0.019391438097239550, -0.019341447474601883, -0.019291456803610597, -0.019241466084390670, +-0.019191475317066633, -0.019141484501764349, -0.019091493638608358, -0.019041502727723630, -0.018991511769234703, -0.018941520763267439, -0.018891529709946373, -0.018841538609396039, +-0.018791547461742303, -0.018741556267109698, -0.018691565025623205, -0.018641573737407352, -0.018591582402588010, -0.018541591021289713, -0.018491599593637435, -0.018441608119755717, +-0.018391616599770424, -0.018341625033806087, -0.018291633421987689, -0.018241641764439761, -0.018191650061288176, -0.018141658312657464, -0.018091666518672604, -0.018041674679458136, +-0.017991682795139925, -0.017941690865842509, -0.017891698891690420, -0.017841706872809528, -0.017791714809324368, -0.017741722701359919, -0.017691730549040725, -0.017641738352492643, +-0.017591746111840219, -0.017541753827208427, -0.017491761498721808, -0.017441769126506232, -0.017391776710686230, -0.017341784251386785, -0.017291791748732438, -0.017241799202849052, +-0.017191806613861171, -0.017141813981893773, -0.017091821307071396, -0.017041828589519911, -0.016991835829363852, -0.016941843026727764, -0.016891850181737507, -0.016841857294517627, +-0.016791864365193105, -0.016741871393888476, -0.016691878380729611, -0.016641885325841054, -0.016591892229347781, -0.016541899091374334, -0.016491905912046585, -0.016441912691489070, +-0.016391919429826773, -0.016341926127184235, -0.016291932783687322, -0.016241939399460580, -0.016191945974628988, -0.016141952509317090, -0.016091959003650753, -0.016041965457754517, +-0.015991971871753368, -0.015941978245771846, -0.015891984579935823, -0.015841990874369837, -0.015791997129198432, -0.015742003344547475, -0.015692009520541512, -0.015642015657305525, +-0.015592021754964054, -0.015542027813642972, -0.015492033833466822, -0.015442039814560587, -0.015392045757048809, -0.015342051661057361, -0.015292057526710782, -0.015242063354134061, +-0.015192069143451736, -0.015142074894789683, -0.015092080608272444, -0.015042086284025001, -0.014992091922171899, -0.014942097522839011, -0.014892103086150882, -0.014842108612232048, +-0.014792114101208387, -0.014742119553204442, -0.014692124968345198, -0.014642130346755197, -0.014592135688560314, -0.014542140993885093, -0.014492146262854519, -0.014442151495593135, +-0.014392156692226815, -0.014342161852880104, -0.014292166977677989, -0.014242172066745013, -0.014192177120207049, -0.014142182138188644, -0.014092187120814784, -0.014042192068210011, +-0.013992196980500202, -0.013942201857809901, -0.013892206700263652, -0.013842211507987328, -0.013792216281105477, -0.013742221019743085, -0.013692225724024697, -0.013642230394076187, +-0.013592235030022102, -0.013542239631987430, -0.013492244200096714, -0.013442248734475831, -0.013392253235249328, -0.013342257702542191, -0.013292262136478966, -0.013242266537185529, +-0.013192270904786427, -0.013142275239406646, -0.013092279541170733, -0.013042283810204567, -0.012992288046632690, -0.012942292250580094, -0.012892296422171321, -0.012842300561532254, +-0.012792304668787434, -0.012742308744061409, -0.012692312787480056, -0.012642316799167920, -0.012592320779249993, -0.012542324727850820, -0.012492328645096279, -0.012442332531110916, +-0.012392336386019722, -0.012342340209947242, -0.012292344003019358, -0.012242347765360612, -0.012192351497095997, -0.012142355198350059, -0.012092358869248677, -0.012042362509916400, +-0.011992366120478215, -0.011942369701058671, -0.011892373251783646, -0.011842376772777687, -0.011792380264165344, -0.011742383726072494, -0.011692387158623684, -0.011642390561943907, +-0.011592393936157710, -0.011542397281390971, -0.011492400597768239, -0.011442403885414506, -0.011392407144454319, -0.011342410375013557, -0.011292413577216770, -0.011242416751188949, +-0.011192419897054643, -0.011142423014939730, -0.011092426104968760, -0.011042429167266726, -0.010992432201958174, -0.010942435209168985, -0.010892438189023709, -0.010842441141646892, +-0.010792444067164416, -0.010742446965700833, -0.010692449837381129, -0.010642452682329858, -0.010592455500672900, -0.010542458292534803, -0.010492461058040558, -0.010442463797314719, +-0.010392466510483164, -0.010342469197670442, -0.010292471859001548, -0.010242474494601028, -0.010192477104594769, -0.010142479689107316, -0.010092482248263663, -0.010042484782188360, +-0.009992487291007291, -0.009942489774845003, -0.009892492233826490, -0.009842494668076303, -0.009792497077720322, -0.009742499462883100, -0.009692501823689184, -0.009642504160264459, +-0.009592506472733473, -0.009542508761221220, -0.009492511025852251, -0.009442513266752450, -0.009392515484046364, -0.009342517677858991, -0.009292519848314879, -0.009242521995539911, +-0.009192524119658639, -0.009142526220796057, -0.009092528299076714, -0.009042530354626495, -0.008992532387569949, -0.008942534398032073, -0.008892536386137417, -0.008842538352011865, +-0.008792540295779966, -0.008742542217566273, -0.008692544117496667, -0.008642545995695701, -0.008592547852288371, -0.008542549687399228, -0.008492551501154154, -0.008442553293677700, +-0.008392555065094865, -0.008342556815530196, -0.008292558545109581, -0.008242560253957568, -0.008192561942199155, -0.008142563609958894, -0.008092565257362667, -0.008042566884535028, +-0.007992568491600970, -0.007942570078685048, -0.007892571645913145, -0.007842573193409811, -0.007792574721299603, -0.007742576229708400, -0.007692577718760757, -0.007642579188581669, +-0.007592580639295690, -0.007542582071028704, -0.007492583483905262, -0.007442584878050361, -0.007392586253588554, -0.007342587610645725, -0.007292588949346428, -0.007242590269815658, +-0.007192591572177969, -0.007142592856559244, -0.007092594123084038, -0.007042595371877345, -0.006992596603063722, -0.006942597816769049, -0.006892599013117883, -0.006842600192234775, +-0.006792601354245611, -0.006742602499274943, -0.006692603627447769, -0.006642604738888642, -0.006592605833723447, -0.006542606912076737, -0.006492607974073510, -0.006442609019838320, +-0.006392610049497051, -0.006342611063174256, -0.006292612060994934, -0.006242613043083638, -0.006192614009566253, -0.006142614960567333, -0.006092615896211876, -0.006042616816624435, +-0.005992617721930896, -0.005942618612255812, -0.005892619487724183, -0.005842620348460561, -0.005792621194590831, -0.005742622026239549, -0.005692622843531267, -0.005642623646591872, +-0.005592624435545919, -0.005542625210518404, -0.005492625971633882, -0.005442626719018240, -0.005392627452796030, -0.005342628173092252, -0.005292628880031459, -0.005242629573739539, +-0.005192630254341044, -0.005142630921960973, -0.005092631576723882, -0.005042632218755655, -0.004992632848180848, -0.004942633465124459, -0.004892634069711042, -0.004842634662066484, +-0.004792635242315340, -0.004742635810582162, -0.004692636366992840, -0.004642636911671927, -0.004592637444744421, -0.004542637966334878, -0.004492638476569184, -0.004442638975571894, +-0.004392639463468006, -0.004342639940382076, -0.004292640406439990, -0.004242640861766302, -0.004192641306486013, -0.004142641740723677, -0.004092642164605180, -0.004042642578255077, +-0.003992642981798369, -0.003942643375359608, -0.003892643759064683, -0.003842644133038149, -0.003792644497404561, -0.003742644852289805, -0.003692645197818437, -0.003642645534115456, +-0.003592645861305418, -0.003542646179514209, -0.003492646488866384, -0.003442646789486943, -0.003392647081500441, -0.003342647365032765, -0.003292647640208471, -0.003242647907152558, +-0.003192648165989581, -0.003142648416845428, -0.003092648659844654, -0.003042648895112258, -0.002992649122772795, -0.002942649342952154, -0.002892649555774890, -0.002842649761366002, +-0.002792649959850045, -0.002742650151352907, -0.002692650335999144, -0.002642650513913312, -0.002592650685221296, -0.002542650850047655, -0.002492651008517386, -0.002442651160755045, +-0.002392651306886521, -0.002342651447036368, -0.002292651581329587, -0.002242651709890733, -0.002192651832845693, -0.002142651950319024, -0.002092652062435725, -0.002042652169320352, +-0.001992652271098793, -0.001942652367895603, -0.001892652459835782, -0.001842652547043885, -0.001792652629645802, -0.001742652707766087, -0.001692652781529296, -0.001642652851061317, +-0.001592652916486706, -0.001542652977930462, -0.001492653035517143, -0.001442653089372634, -0.001392653139621493, -0.001342653186388719, -0.001292653229798869, -0.001242653269977829, +-0.001192653307050155, -0.001142653341140849, -0.001092653372374465, -0.001042653400876892, -0.000992653426772685, -0.000942653450186845, -0.000892653471243927, -0.000842653490069820, +-0.000792653506789079, -0.000742653521526259, -0.000692653534407251, -0.000642653545556608, -0.000592653555099331, -0.000542653563159977, -0.000492653569864433, -0.000442653575337254, +-0.000392653579703442, -0.000342653583087552, -0.000292653585615472, -0.000242653587411758, -0.000192653588601410, -0.000142653589308984, -0.000092653589660368, -0.000042653589780118, +0.000007346410206766, 0.000057346410175728, 0.000107346410000880, 0.000157346409557666, 0.000207346408721530, 0.000257346407366583, 0.000307346405368271, 0.000357346402601593, +0.000407346398941993, 0.000457346394263583, 0.000507346388441806, 0.000557346381351664, 0.000607346372868600, 0.000657346362866726, 0.000707346351221486, 0.000757346337807880, +0.000807346322501352, 0.000857346305176015, 0.000907346285707312, 0.000957346263970243, 0.001007346239840252, 0.001057346213191452, 0.001107346183899286, 0.001157346151838755, +0.001207346116885302, 0.001257346078913040, 0.001307346037797413, 0.001357345993413865, 0.001407345945636508, 0.001457345894340786, 0.001507345839401699, 0.001557345780694692, +0.001607345718093876, 0.001657345651474696, 0.001707345580712151, 0.001757345505681687, 0.001807345426257415, 0.001857345342314780, 0.001907345253728781, 0.001957345160374863, +0.002007345062127138, 0.002057344958861051, 0.002107344850451600, 0.002157344736774233, 0.002207344617703058, 0.002257344493113523, 0.002307344362881071, 0.002357344226879813, +0.002407344084985194, 0.002457343937072216, 0.002507343783016322, 0.002557343622691624, 0.002607343455973567, 0.002657343282737152, 0.002707343102857823, 0.002757342916209691, +0.002807342722668203, 0.002857342522108357, 0.002907342314405600, 0.002957342099434042, 0.003007341877069129, 0.003057341647185862, 0.003107341409659684, 0.003157341164364709, +0.003207340911176381, 0.003257340649970145, 0.003307340380620113, 0.003357340103001730, 0.003407339816989997, 0.003457339522460358, 0.003507339219286927, 0.003557338907345147, +0.003607338586510021, 0.003657338256656991, 0.003707337917660173, 0.003757337569395009, 0.003807337211736501, 0.003857336844560094, 0.003907336467739902, 0.003957336081151368, +0.004007335684669494, 0.004057335278169725, 0.004107334861526173, 0.004157334434614284, 0.004207333997309060, 0.004257333549485944, 0.004307333091019050, 0.004357332621783824, +0.004407332141655711, 0.004457331650508822, 0.004507331148218605, 0.004557330634660059, 0.004607330109708632, 0.004657329573238434, 0.004707329025124913, 0.004757328465243070, +0.004807327893468349, 0.004857327309674865, 0.004907326713738062, 0.004957326105532942, 0.005007325484934952, 0.005057324851818203, 0.005107324206058143, 0.005157323547529772, +0.005207322876108536, 0.005257322191668548, 0.005307321494085256, 0.005357320783234103, 0.005407320058989205, 0.005457319321226006, 0.005507318569819510, 0.005557317804645160, +0.005607317025577073, 0.005657316232490692, 0.005707315425261022, 0.005757314603763507, 0.005807313767872260, 0.005857312917462730, 0.005907312052409917, 0.005957311172589269, +0.006007310277874899, 0.006057309368142251, 0.006107308443266332, 0.006157307503122585, 0.006207306547585126, 0.006257305576529399, 0.006307304589830853, 0.006357303587363602, +0.006407302569003091, 0.006457301534624325, 0.006507300484102748, 0.006557299417312476, 0.006607298334128956, 0.006657297234427190, 0.006707296118082624, 0.006757294984969375, +0.006807293834962888, 0.006857292667938166, 0.006907291483770657, 0.006957290282334475, 0.007007289063505067, 0.007057287827157437, 0.007107286573167031, 0.007157285301407965, +0.007207284011755685, 0.007257282704085639, 0.007307281378271943, 0.007357280034190043, 0.007407278671714943, 0.007457277290722091, 0.007507275891085601, 0.007557274472680921, +0.007607273035383055, 0.007657271579067451, 0.007707270103608224, 0.007757268608880821, 0.007807267094760247, 0.007857265561121950, 0.007907264007840044, 0.007957262434789978, +0.008007260841846756, 0.008057259228885828, 0.008107257595781304, 0.008157255942408639, 0.008207254268642833, 0.008257252574359336, 0.008307250859432264, 0.008357249123737063, +0.008407247367149184, 0.008457245589542743, 0.008507243790793187, 0.008557241970775523, 0.008607240129365198, 0.008657238266436327, 0.008707236381864362, 0.008757234475524305, +0.008807232547291606, 0.008857230597040383, 0.008907228624646083, 0.008957226629983710, 0.009007224612928716, 0.009057222573355216, 0.009107220511138658, 0.009157218426154051, +0.009207216318276841, 0.009257214187381147, 0.009307212033342416, 0.009357209856036100, 0.009407207655336316, 0.009457205431118511, 0.009507203183257693, 0.009557200911629312, +0.009607198616107484, 0.009657196296567659, 0.009707193952884843, 0.009757191584934488, 0.009807189192590708, 0.009857186775728957, 0.009907184334224238, 0.009957181867952003, +0.010007179376786367, 0.010057176860602784, 0.010107174319276260, 0.010157171752682244, 0.010207169160694854, 0.010257166543189540, 0.010307163900041756, 0.010357161231125615, +0.010407158536316574, 0.010457155815489635, 0.010507153068520252, 0.010557150295282541, 0.010607147495651954, 0.010657144669503498, 0.010707141816712626, 0.010757138937153455, +0.010807136030701436, 0.010857133097231577, 0.010907130136619330, 0.010957127148738812, 0.011007124133465478, 0.011057121090674332, 0.011107118020240829, 0.011157114922039087, +0.011207111795944556, 0.011257108641832247, 0.011307105459577610, 0.011357102249054764, 0.011407099010139164, 0.011457095742706260, 0.011507092446630172, 0.011557089121786353, +0.011607085768049813, 0.011657082385296001, 0.011707078973399039, 0.011757075532234380, 0.011807072061677032, 0.011857068561602449, 0.011907065031884750, 0.011957061472399387, +0.012007057883021371, 0.012057054263626155, 0.012107050614087858, 0.012157046934281936, 0.012207043224083397, 0.012257039483367692, 0.012307035712008946, 0.012357031909882609, +0.012407028076864139, 0.012457024212827652, 0.012507020317648606, 0.012557016391202009, 0.012607012433363315, 0.012657008444006645, 0.012707004423007455, 0.012757000370240754, +0.012806996285581995, 0.012856992168905302, 0.012906988020086128, 0.012956983838999486, 0.013006979625520826, 0.013056975379524275, 0.013106971100885283, 0.013156966789478865, +0.013206962445180475, 0.013256958067864233, 0.013306953657405597, 0.013356949213680020, 0.013406944736561626, 0.013456940225925871, 0.013506935681647764, 0.013556931103602763, +0.013606926491664990, 0.013656921845709900, 0.013706917165612507, 0.013756912451248264, 0.013806907702491296, 0.013856902919217059, 0.013906898101300564, 0.013956893248617269, +0.014006888361041296, 0.014056883438448102, 0.014106878480712700, 0.014156873487710546, 0.014206868459315763, 0.014256863395403810, 0.014306858295850142, 0.014356853160528885, +0.014406847989315495, 0.014456842782084983, 0.014506837538712810, 0.014556832259073098, 0.014606826943041308, 0.014656821590492449, 0.014706816201301980, 0.014756810775344026, +0.014806805312494044, 0.014856799812627051, 0.014906794275618501, 0.014956788701342523, 0.015006783089674571, 0.015056777440489662, 0.015106771753663255, 0.015156766029069473, +0.015206760266583777, 0.015256754466081180, 0.015306748627437141, 0.015356742750525785, 0.015406736835222574, 0.015456730881402963, 0.015506724888941083, 0.015556718857712390, +0.015606712787591900, 0.015656706678455069, 0.015706700530176032, 0.015756694342630242, 0.015806688115692715, 0.015856681849238913, 0.015906675543142960, 0.015956669197280320, +0.016006662811526007, 0.016056656385755482, 0.016106649919842873, 0.016156643413663636, 0.016206636867092790, 0.016256630280005797, 0.016306623652276787, 0.016356616983781214, +0.016406610274394547, 0.016456603523990906, 0.016506596732445759, 0.016556589899634117, 0.016606583025431446, 0.016656576109711874, 0.016706569152350862, 0.016756562153223426, +0.016806555112205031, 0.016856548029169801, 0.016906540903993204, 0.016956533736550251, 0.017006526526716411, 0.017056519274365810, 0.017106511979373910, 0.017156504641615729, +0.017206497260966732, 0.017256489837301048, 0.017306482370494140, 0.017356474860421470, 0.017406467306957166, 0.017456459709976696, 0.017506452069355076, 0.017556444384967770, +0.017606436656688911, 0.017656428884393959, 0.017706421067957934, 0.017756413207256301, 0.017806405302163191, 0.017856397352554065, 0.017906389358303951, 0.017956381319288305, +0.018006373235381259, 0.018056365106458284, 0.018106356932394395, 0.018156348713065058, 0.018206340448344405, 0.018256332138107900, 0.018306323782230564, 0.018356315380587865, +0.018406306933053930, 0.018456298439504231, 0.018506289899814229, 0.018556281313858058, 0.018606272681511184, 0.018656264002648627, 0.018706255277145856, 0.018756246504877002, +0.018806237685717531, 0.018856228819542468, 0.018906219906227276, 0.018956210945646090, 0.019006201937674376, 0.019056192882187156, 0.019106183779059899, 0.019156174628166739, +0.019206165429383144, 0.019256156182584132, 0.019306146887645176, 0.019356137544440408, 0.019406128152845297, 0.019456118712735310, 0.019506109223984578, 0.019556099686468577, +0.019606090100062326, 0.019656080464641294, 0.019706070780079618, 0.019756061046252764, 0.019806051263035755, 0.019856041430304065, 0.019906031547931826, 0.019956021615794507, +0.020006011633767137, 0.020056001601725180, 0.020105991519542774, 0.020155981387095390, 0.020205971204258055, 0.020255960970906234, 0.020305950686914067, 0.020355940352157022, +0.020405929966510569, 0.020455919529848852, 0.020505909042047330, 0.020555898502981042, 0.020605887912525447, 0.020655877270554689, 0.020705866576944239, 0.020755855831569123, +0.020805845034304809, 0.020855834185025440, 0.020905823283606486, 0.020955812329922975, 0.021005801323850375, 0.021055790265262827, 0.021105779154035803, 0.021155767990044334, +0.021205756773163886, 0.021255745503268607, 0.021305734180233959, 0.021355722803935422, 0.021405711374247134, 0.021455699891044566, 0.021505688354202749, 0.021555676763597157, +0.021605665119101929, 0.021655653420592537, 0.021705641667944010, 0.021755629861031824, 0.021805617999730121, 0.021855606083914372, 0.021905594113459607, 0.021955582088241301, +0.022005570008133593, 0.022055557873011965, 0.022105545682751439, 0.022155533437227495, 0.022205521136314271, 0.022255508779887245, 0.022305496367821448, 0.022355483899992354, +0.022405471376274109, 0.022455458796542180, 0.022505446160672050, 0.022555433468537861, 0.022605420720015090, 0.022655407914978765, 0.022705395053304368, 0.022755382134866033, +0.022805369159539249, 0.022855356127199036, 0.022905343037720880, 0.022955329890978923, 0.023005316686848642, 0.023055303425205068, 0.023105290105923677, 0.023155276728878620, +0.023205263293945372, 0.023255249800998964, 0.023305236249914874, 0.023355222640567250, 0.023405208972831573, 0.023455195246583314, 0.023505181461696622, 0.023555167618046980, +0.023605153715509416, 0.023655139753959414, 0.023705125733271118, 0.023755111653320005, 0.023805097513981115, 0.023855083315129925, 0.023905069056640586, 0.023955054738388569, +0.024005040360248919, 0.024055025922097111, 0.024105011423807294, 0.024154996865254946, 0.024204982246315107, 0.024254967566863260, 0.024304952826773547, 0.024354938025921452, +0.024404923164182458, 0.024454908241430710, 0.024504893257541693, 0.024554878212390441, 0.024604863105852439, 0.024654847937801833, 0.024704832708114109, 0.024754817416664302, +0.024804802063327899, 0.024854786647979042, 0.024904771170493223, 0.024954755630745472, 0.025004740028611278, 0.025054724363964789, 0.025104708636681492, 0.025154692846636420, +0.025204676993705061, 0.025254661077761566, 0.025304645098681418, 0.025354629056339659, 0.025404612950611770, 0.025454596781371904, 0.025504580548495547, 0.025554564251858179, +0.025604547891333960, 0.025654531466798372, 0.025704514978126453, 0.025754498425193690, 0.025804481807874240, 0.025854465126043585, 0.025904448379576766, 0.025954431568349270, +0.026004414692235252, 0.026054397751110195, 0.026104380744849144, 0.026154363673327588, 0.026204346536419676, 0.026254329334000900, 0.026304312065946300, 0.026354294732131363, +0.026404277332430247, 0.026454259866718434, 0.026504242334871420, 0.026554224736763353, 0.026604207072269726, 0.026654189341265580, 0.026704171543626403, 0.026754153679226355, +0.026804135747940924, 0.026854117749645152, 0.026904099684214530, 0.026954081551523217, 0.027004063351446696, 0.027054045083860022, 0.027104026748638675, 0.027154008345656819, +0.027203989874789940, 0.027253971335913087, 0.027303952728901751, 0.027353934053630090, 0.027403915309973593, 0.027453896497807748, 0.027503877617006723, 0.027553858667446002, +0.027603839649000633, 0.027653820561546111, 0.027703801404956593, 0.027753782179107570, 0.027803762883874095, 0.027853743519131655, 0.027903724084754410, 0.027953704580617859, +0.028003685006597043, 0.028053665362567461, 0.028103645648403269, 0.028153625863979966, 0.028203606009172596, 0.028253586083856655, 0.028303566087906306, 0.028353546021197041, +0.028403525883604355, 0.028453505675002412, 0.028503485395266703, 0.028553465044272280, 0.028603444621894639, 0.028653424128007941, 0.028703403562487687, 0.028753382925208921, +0.028803362216047141, 0.028853341434876514, 0.028903320581572533, 0.028953299656010248, 0.029003278658065158, 0.029053257587611431, 0.029103236444524557, 0.029153215228679592, +0.029203193939952035, 0.029253172578216049, 0.029303151143347129, 0.029353129635220333, 0.029403108053711158, 0.029453086398693769, 0.029503064670043662, 0.029553042867636336, +0.029603020991345961, 0.029652999041048032, 0.029702977016617609, 0.029752954917930185, 0.029802932744859928, 0.029852910497282344, 0.029902888175072480, 0.029952865778105839, +0.030002843306256591, 0.030052820759400235, 0.030102798137411828, 0.030152775440166868, 0.030202752667539527, 0.030252729819405303, 0.030302706895639252, 0.030352683896116880, +0.030402660820712357, 0.030452637669301178, 0.030502614441758853, 0.030552591137959544, 0.030602567757778761, 0.030652544301091555, 0.030702520767773432, 0.030752497157698566, +0.030802473470742456, 0.030852449706780163, 0.030902425865687186, 0.030952401947337706, 0.031002377951607218, 0.031052353878370784, 0.031102329727503913, 0.031152305498880772, +0.031202281192376866, 0.031252256807867258, 0.031302232345227450, 0.031352207804331622, 0.031402183185055270, 0.031452158487273903, 0.031502133710861698, 0.031552108855694164, +0.031602083921646353, 0.031652058908593773, 0.031702033816410603, 0.031752008644972352, 0.031801983394154076, 0.031851958063831287, 0.031901932653878161, 0.031951907164170200, +0.032001881594582476, 0.032051855944990486, 0.032101830215268419, 0.032151804405291771, 0.032201778514935615, 0.032251752544075453, 0.032301726492585468, 0.032351700360341164, +0.032401674147217611, 0.032451647853090321, 0.032501621477833462, 0.032551595021322551, 0.032601568483433097, 0.032651541864039277, 0.032701515163016601, 0.032751488380240140, +0.032801461515585398, 0.032851434568926564, 0.032901407540139142, 0.032951380429098197, 0.033001353235679251, 0.033051325959756475, 0.033101298601205378, 0.033151271159901040, +0.033201243635718969, 0.033251216028533349, 0.033301188338219684, 0.033351160564653044, 0.033401132707708954, 0.033451104767261583, 0.033501076743186455, 0.033551048635359078, +0.033601020443653630, 0.033650992167945634, 0.033700963808110163, 0.033750935364022717, 0.033800906835557497, 0.033850878222590003, 0.033900849524995322, 0.033950820742648956, +0.034000791875425096, 0.034050762923199251, 0.034100733885846501, 0.034150704763242362, 0.034200675555261018, 0.034250646261777984, 0.034300616882668333, 0.034350587417807589, +0.034400557867069928, 0.034450528230330874, 0.034500498507465942, 0.034550468698349317, 0.034600438802856522, 0.034650408820862635, 0.034700378752243168, 0.034750348596872302, +0.034800318354625576, 0.034850288025378047, 0.034900257609005246, 0.034950227105381357, 0.035000196514381895, 0.035050165835881948, 0.035100135069757024, 0.035150104215881321, +0.035200073274130363, 0.035250042244379214, 0.035300011126503404, 0.035349979920377125, 0.035399948625875900, 0.035449917242875238, 0.035499885771249351, 0.035549854210873741, +0.035599822561623494, 0.035649790823374140, 0.035699758995999864, 0.035749727079376188, 0.035799695073378199, 0.035849662977881412, 0.035899630792760026, 0.035949598517889557, +0.035999566153145098, 0.036049533698402164, 0.036099501153534955, 0.036149468518418992, 0.036199435792929363, 0.036249402976941583, 0.036299370070329851, 0.036349337072969695, +0.036399303984736196, 0.036449270805504877, 0.036499237535149942, 0.036549204173546915, 0.036599170720571318, 0.036649137176097350, 0.036699103540000541, 0.036749069812155970, +0.036799035992439173, 0.036849002080724343, 0.036898968076887001, 0.036948933980802241, 0.036998899792345594, 0.037048865511391249, 0.037098831137814745, 0.037148796671491159, +0.037198762112296030, 0.037248727460103548, 0.037298692714789250, 0.037348657876228215, 0.037398622944295981, 0.037448587918866752, 0.037498552799816044, 0.037548517587019402, +0.037598482280351023, 0.037648446879686437, 0.037698411384900737, 0.037748375795869447, 0.037798340112466779, 0.037848304334568261, 0.037898268462048981, 0.037948232494784469, +0.037998196432648935, 0.038048160275517912, 0.038098124023266490, 0.038148087675770194, 0.038198051232903242, 0.038248014694541158, 0.038297978060559040, 0.038347941330832420, +0.038397904505235503, 0.038447867583643824, 0.038497830565932915, 0.038547793451976994, 0.038597756241651585, 0.038647718934831786, 0.038697681531393135, 0.038747644031209838, +0.038797606434157424, 0.038847568740110999, 0.038897530948946095, 0.038947493060536922, 0.038997455074759012, 0.039047416991487470, 0.039097378810597820, 0.039147340531964288, +0.039197302155462403, 0.039247263680967259, 0.039297225108354407, 0.039347186437498044, 0.039397147668273715, 0.039447108800556512, 0.039497069834221986, 0.039547030769144342, +0.039596991605199118, 0.039646952342261864, 0.039696912980206778, 0.039746873518909417, 0.039796833958244869, 0.039846794298088677, 0.039896754538315059, 0.039946714678799553, +0.039996674719417265, 0.040046634660043733, 0.040096594500553161, 0.040146554240821114, 0.040196513880722679, 0.040246473420133398, 0.040296432858927492, 0.040346392196980503, +0.040396351434167539, 0.040446310570364137, 0.040496269605444515, 0.040546228539284218, 0.040596187371758789, 0.040646146102742454, 0.040696104732110758, 0.040746063259738792, +0.040796021685502115, 0.040845980009274939, 0.040895938230932814, 0.040945896350350841, 0.040995854367404570, 0.041045812281968228, 0.041095770093917343, 0.041145727803127044, +0.041195685409472861, 0.041245642912829027, 0.041295600313071078, 0.041345557610074135, 0.041395514803713743, 0.041445471893864112, 0.041495428880400809, 0.041545385763199376, +0.041595342542134033, 0.041645299217080337, 0.041695255787913388, 0.041745212254508744, 0.041795168616740631, 0.041845124874484593, 0.041895081027615744, 0.041945037076009634, +0.041994993019540489, 0.042044948858083860, 0.042094904591514860, 0.042144860219709042, 0.042194815742540630, 0.042244771159885175, 0.042294726471617798, 0.042344681677614043, +0.042394636777748143, 0.042444591771895655, 0.042494546659932124, 0.042544501441731788, 0.042594456117170200, 0.042644410686122465, 0.042694365148464149, 0.042744319504069483, +0.042794273752814013, 0.042844227894572859, 0.042894181929221578, 0.042944135856634397, 0.042994089676686879, 0.043044043389254140, 0.043093996994211729, 0.043143950491433887, +0.043193903880796164, 0.043243857162173688, 0.043293810335442010, 0.043343763400475362, 0.043393716357149302, 0.043443669205338958, 0.043493621944919882, 0.043543574575766304, +0.043593527097753798, 0.043643479510757907, 0.043693431814652885, 0.043743384009314275, 0.043793336094617205, 0.043843288070437240, 0.043893239936648613, 0.043943191693126889, +0.043993143339747180, 0.044043094876385060, 0.044093046302914753, 0.044142997619211838, 0.044192948825151422, 0.044242899920609084, 0.044292850905459050, 0.044342801779576890, +0.044392752542837727, 0.044442703195117124, 0.044492653736289314, 0.044542604166229877, 0.044592554484814369, 0.044642504691917037, 0.044692454787413440, 0.044742404771178704, +0.044792354643088401, 0.044842304403016765, 0.044892254050839374, 0.044942203586431341, 0.044992153009668252, 0.045042102320424326, 0.045092051518575156, 0.045142000603995848, +0.045191949576561988, 0.045241898436147801, 0.045291847182628880, 0.045341795815880333, 0.045391744335777744, 0.045441692742195346, 0.045491641035008724, 0.045541589214093438, +0.045591537279323732, 0.045641485230575186, 0.045691433067722928, 0.045741380790642536, 0.045791328399208242, 0.045841275893295626, 0.045891223272779821, 0.045941170537536401, +0.045991117687439617, 0.046041064722365035, 0.046091011642187790, 0.046140958446783460, 0.046190905136026292, 0.046240851709791857, 0.046290798167955297, 0.046340744510392183, +0.046390690736976763, 0.046440636847584621, 0.046490582842090886, 0.046540528720371135, 0.046590474482299617, 0.046640420127751915, 0.046690365656603609, 0.046740311068728939, +0.046790256364003496, 0.046840201542302409, 0.046890146603501263, 0.046940091547474312, 0.046990036374097127, 0.047039981083244850, 0.047089925674793066, 0.047139870148616023, +0.047189814504589311, 0.047239758742588053, 0.047289702862487848, 0.047339646864162942, 0.047389590747488913, 0.047439534512340918, 0.047489478158594521, 0.047539421686123989, +0.047589365094804902, 0.047639308384512843, 0.047689251555122075, 0.047739194606508176, 0.047789137538546286, 0.047839080351112000, 0.047889023044079569, 0.047938965617324580, +0.047988908070722182, 0.048038850404147952, 0.048088792617476152, 0.048138734710582373, 0.048188676683341758, 0.048238618535629892, 0.048288560267321035, 0.048338501878290779, +0.048388443368414268, 0.048438384737567092, 0.048488325985623512, 0.048538267112459121, 0.048588208117949498, 0.048638149001968917, 0.048688089764392962, 0.048738030405096777, +0.048787970923955967, 0.048837911320844786, 0.048887851595638819, 0.048937791748213229, 0.048987731778443601, 0.049037671686204203, 0.049087611471370626, 0.049137551133818021, +0.049187490673421978, 0.049237430090056766, 0.049287369383597977, 0.049337308553920767, 0.049387247600900727, 0.049437186524412126, 0.049487125324330562, 0.049537064000531178, +0.049587002552889586, 0.049636940981280041, 0.049686879285578141, 0.049736817465659486, 0.049786755521398343, 0.049836693452670312, 0.049886631259350549, 0.049936568941314652, +0.049986506498436889, 0.050036443930592860, 0.050086381237657719, 0.050136318419507067, 0.050186255476015185, 0.050236192407057650, 0.050286129212509648, 0.050336065892246755, +0.050386002446143260, 0.050435938874074757, 0.050485875175916406, 0.050535811351543815, 0.050585747400831250, 0.050635683323654312, 0.050685619119888614, 0.050735554789408423, +0.050785490332089352, 0.050835425747806542, 0.050885361036435622, 0.050935296197850852, 0.050985231231927844, 0.051035166138541754, 0.051085100917568189, 0.051135035568881437, +0.051184970092357090, 0.051234904487870318, 0.051284838755296734, 0.051334772894510605, 0.051384706905387545, 0.051434640787802716, 0.051484574541631731, 0.051534508166748864, +0.051584441663029730, 0.051634375030349934, 0.051684308268583758, 0.051734241377606807, 0.051784174357294252, 0.051834107207521712, 0.051884039928163456, 0.051933972519095095, +0.051983904980191807, 0.052033837311329205, 0.052083769512381563, 0.052133701583224494, 0.052183633523733175, 0.052233565333783212, 0.052283497013248900, 0.052333428562005839, +0.052383359979929205, 0.052433291266894617, 0.052483222422776359, 0.052533153447450041, 0.052583084340791286, 0.052633015102674381, 0.052682945732974933, 0.052732876231568117, +0.052782806598329561, 0.052832736833133540, 0.052882666935855679, 0.052932596906371150, 0.052982526744555572, 0.053032456450283240, 0.053082386023429760, 0.053132315463870317, +0.053182244771480529, 0.053232173946134685, 0.053282102987708406, 0.053332031896076867, 0.053381960671115697, 0.053431889312699175, 0.053481817820702937, 0.053531746195002151, +0.053581674435472446, 0.053631602541988108, 0.053681530514424765, 0.053731458352658037, 0.053781386056562221, 0.053831313626012942, 0.053881241060885376, 0.053931168361055153, +0.053981095526396565, 0.054031022556785241, 0.054080949452096357, 0.054130876212205546, 0.054180802836987098, 0.054230729326316639, 0.054280655680069366, 0.054330581898120893, +0.054380507980345522, 0.054430433926618879, 0.054480359736816149, 0.054530285410812972, 0.054580210948483629, 0.054630136349703762, 0.054680061614348997, 0.054729986742293638, +0.054779911733413310, 0.054829836587583204, 0.054879761304678948, 0.054929685884574850, 0.054979610327146530, 0.055029534632269186, 0.055079458799818452, 0.055129382829668623, +0.055179306721695340, 0.055229230475773793, 0.055279154091779609, 0.055329077569587097, 0.055379000909071892, 0.055428924110109190, 0.055478847172574612, 0.055528770096342474, +0.055578692881288416, 0.055628615527288067, 0.055678538034215734, 0.055728460401947059, 0.055778382630357233, 0.055828304719321889, 0.055878226668715343, 0.055928148478413230, +0.055978070148290746, 0.056027991678223532, 0.056077913068085891, 0.056127834317753471, 0.056177755427101468, 0.056227676396005517, 0.056277597224339927, 0.056327517911980346, +0.056377438458801978, 0.056427358864680449, 0.056477279129490084, 0.056527199253106515, 0.056577119235404955, 0.056627039076261036, 0.056676958775549076, 0.056726878333144722, +0.056776797748923614, 0.056826717022760063, 0.056876636154529731, 0.056926555144107799, 0.056976473991369923, 0.057026392696190427, 0.057076311258444944, 0.057126229678008678, +0.057176147954757291, 0.057226066088565085, 0.057275984079307708, 0.057325901926860379, 0.057375819631098737, 0.057425737191897107, 0.057475654609131129, 0.057525571882676013, +0.057575489012407409, 0.057625405998199646, 0.057675322839928364, 0.057725239537469220, 0.057775156090696535, 0.057825072499485958, 0.057874988763712699, 0.057924904883252408, +0.057974820857979420, 0.058024736687769370, 0.058074652372497489, 0.058124567912039411, 0.058174483306269474, 0.058224398555063332, 0.058274313658296190, 0.058324228615843708, +0.058374143427580211, 0.058424058093381352, 0.058473972613122351, 0.058523886986678861, 0.058573801213925213, 0.058623715294737061, 0.058673629228990061, 0.058723543016558549, +0.058773456657318174, 0.058823370151144166, 0.058873283497912168, 0.058923196697496523, 0.058973109749772878, 0.059023022654616467, 0.059072935411902942, 0.059122848021506635, +0.059172760483303208, 0.059222672797167877, 0.059272584962976306, 0.059322496980602830, 0.059372408849923120, 0.059422320570812377, 0.059472232143146279, 0.059522143566799163, +0.059572054841646682, 0.059621965967564507, 0.059671876944426980, 0.059721787772109756, 0.059771698450488062, 0.059821608979437564, 0.059871519358832608, 0.059921429588548847, +0.059971339668461514, 0.060021249598446270, 0.060071159378377467, 0.060121069008130759, 0.060170978487581385, 0.060220887816605000, 0.060270796995075961, 0.060320706022869923, +0.060370614899862118, 0.060420523625928230, 0.060470432200942580, 0.060520340624780851, 0.060570248897318275, 0.060620157018430515, 0.060670064987991920, 0.060719972805878167, +0.060769880471964917, 0.060819787986126528, 0.060869695348238669, 0.060919602558176571, 0.060969509615815910, 0.061019416521031038, 0.061069323273697615, 0.061119229873690888, +0.061169136320886532, 0.061219042615158883, 0.061268948756383640, 0.061318854744436012, 0.061368760579191703, 0.061418666260525043, 0.061468571788311714, 0.061518477162426963, +0.061568382382746457, 0.061618287449144556, 0.061668192361496933, 0.061718097119679273, 0.061768001723565925, 0.061817906173032580, 0.061867810467954462, 0.061917714608207261, +0.061967618593665334, 0.062017522424204365, 0.062067426099699584, 0.062117329620026682, 0.062167232985060009, 0.062217136194675254, 0.062267039248747665, 0.062316942147152915, +0.062366844889765370, 0.062416747476460713, 0.062466649907114188, 0.062516552181601473, 0.062566454299796945, 0.062616356261576273, 0.062666258066815167, 0.062716159715387965, +0.062766061207170362, 0.062815962542037598, 0.062865863719865384, 0.062915764740528068, 0.062965665603901336, 0.063015566309860438, 0.063065466858281058, 0.063115367249037588, +0.063165267482005683, 0.063215167557060623, 0.063265067474078077, 0.063314967232932423, 0.063364866833499345, 0.063414766275654108, 0.063464665559272396, 0.063514564684228586, +0.063564463650398348, 0.063614362457656962, 0.063664261105880110, 0.063714159594942157, 0.063764057924718814, 0.063813956095085764, 0.063863854105917384, 0.063913751957089357, +0.063963649648476964, 0.064013547179955888, 0.064063444551400492, 0.064113341762686502, 0.064163238813689141, 0.064213135704284136, 0.064263032434345849, 0.064312929003749963, +0.064362825412371774, 0.064412721660086963, 0.064462617746769896, 0.064512513672296296, 0.064562409436541401, 0.064612305039380924, 0.064662200480689255, 0.064712095760342078, +0.064761990878215103, 0.064811885834182709, 0.064861780628120591, 0.064911675259904031, 0.064961569729408725, 0.065011464036509051, 0.065061358181080720, 0.065111252162998998, +0.065161145982139582, 0.065211039638376850, 0.065260933131586527, 0.065310826461643878, 0.065360719628424602, 0.065410612631803075, 0.065460505471655023, 0.065510398147855711, +0.065560290660280837, 0.065610183008804793, 0.065660075193303302, 0.065709967213652062, 0.065759859069725465, 0.065809750761399208, 0.065859642288548584, 0.065909533651049290, +0.065959424848775733, 0.066009315881603609, 0.066059206749408184, 0.066109097452065196, 0.066158987989449011, 0.066208878361435367, 0.066258768567899529, 0.066308658608717208, +0.066358548483762783, 0.066408438192912006, 0.066458327736040129, 0.066508217113022877, 0.066558106323734628, 0.066607995368051121, 0.066657884245848079, 0.066707772956999867, +0.066757661501382237, 0.066807549878870442, 0.066857438089340221, 0.066907326132665965, 0.066957214008723384, 0.067007101717387774, 0.067056989258534844, 0.067106876632039014, +0.067156763837775982, 0.067206650875621041, 0.067256537745449915, 0.067306424447136998, 0.067356310980558026, 0.067406197345588281, 0.067456083542103487, 0.067505969569978022, +0.067555855429087652, 0.067605741119307644, 0.067655626640513708, 0.067705511992580278, 0.067755397175383064, 0.067805282188797805, 0.067855167032698893, 0.067905051706962066, +0.067954936211462605, 0.068004820546076247, 0.068054704710677399, 0.068104588705141786, 0.068154472529344701, 0.068204356183161882, 0.068254239666467723, 0.068304122979137960, +0.068354006121047903, 0.068403889092073275, 0.068453771892088469, 0.068503654520969237, 0.068553536978590873, 0.068603419264829102, 0.068653301379558357, 0.068703183322654335, +0.068753065093992816, 0.068802946693448178, 0.068852828120896187, 0.068902709376212123, 0.068952590459271726, 0.069002471369949400, 0.069052352108120912, 0.069102232673661529, +0.069152113066447016, 0.069201993286351779, 0.069251873333251557, 0.069301753207021644, 0.069351632907537791, 0.069401512434674420, 0.069451391788307268, 0.069501270968311643, +0.069551149974563270, 0.069601028806936582, 0.069650907465307332, 0.069700785949551244, 0.069750664259542752, 0.069800542395157608, 0.069850420356271092, 0.069900298142758985, +0.069950175754495678, 0.070000053191356937, 0.070049930453218057, 0.070099807539954803, 0.070149684451441582, 0.070199561187554146, 0.070249437748167817, 0.070299314133158333, +0.070349190342400114, 0.070399066375768926, 0.070448942233140077, 0.070498817914389306, 0.070548693419391045, 0.070598568748021062, 0.070648443900154650, 0.070698318875667562, +0.070748193674434245, 0.070798068296330452, 0.070847942741231920, 0.070897817009013084, 0.070947691099549709, 0.070997565012717118, 0.071047438748391048, 0.071097312306445934, +0.071147185686757541, 0.071197058889201192, 0.071246931913652625, 0.071296804759986301, 0.071346677428077959, 0.071396549917802921, 0.071446422229036952, 0.071496294361654486, +0.071546166315531276, 0.071596038090542657, 0.071645909686564396, 0.071695781103470899, 0.071745652341137958, 0.071795523399441341, 0.071845394278255453, 0.071895264977456089, +0.071945135496918555, 0.071995005836518633, 0.072044875996130756, 0.072094745975630689, 0.072144615774893756, 0.072194485393795721, 0.072244354832211033, 0.072294224090015458, +0.072344093167084317, 0.072393962063293391, 0.072443830778517113, 0.072493699312631263, 0.072543567665511163, 0.072593435837032594, 0.072643303827069974, 0.072693171635499113, +0.072743039262195761, 0.072792906707034366, 0.072842773969890709, 0.072892641050640111, 0.072942507949158353, 0.072992374665319881, 0.073042241199000477, 0.073092107550075461, +0.073141973718420628, 0.073191839703910425, 0.073241705506420604, 0.073291571125826530, 0.073341436562003981, 0.073391301814827378, 0.073441166884172529, 0.073491031769914769, +0.073540896471929865, 0.073590760990092277, 0.073640625324277800, 0.073690489474362186, 0.073740353440219911, 0.073790217221726753, 0.073840080818758050, 0.073889944231189594, +0.073939807458895820, 0.073989670501752536, 0.074039533359635090, 0.074089396032419236, 0.074139258519979448, 0.074189120822191520, 0.074238982938930789, 0.074288844870073048, +0.074338706615492745, 0.074388568175065686, 0.074438429548667195, 0.074488290736173079, 0.074538151737457786, 0.074588012552397123, 0.074637873180866426, 0.074687733622741490, +0.074737593877896774, 0.074787453946208074, 0.074837313827551169, 0.074887173521800562, 0.074937033028832006, 0.074986892348520864, 0.075036751480742944, 0.075086610425372693, +0.075136469182285934, 0.075186327751357987, 0.075236186132464661, 0.075286044325480431, 0.075335902330281090, 0.075385760146742004, 0.075435617774738950, 0.075485475214146405, +0.075535332464840177, 0.075585189526695615, 0.075635046399588526, 0.075684903083393387, 0.075734759577985977, 0.075784615883242118, 0.075834471999036271, 0.075884327925244244, +0.075934183661741400, 0.075984039208403534, 0.076033894565105134, 0.076083749731721995, 0.076133604708129479, 0.076183459494203395, 0.076233314089818233, 0.076283168494849771, +0.076333022709173387, 0.076382876732664903, 0.076432730565198767, 0.076482584206650814, 0.076532437656896407, 0.076582290915811341, 0.076632143983270104, 0.076681996859148505, +0.076731849543322364, 0.076781702035666144, 0.076831554336055680, 0.076881406444366321, 0.076931258360473903, 0.076981110084252888, 0.077030961615579097, 0.077080812954327907, +0.077130664100375113, 0.077180515053595231, 0.077230365813864055, 0.077280216381056963, 0.077330066755049789, 0.077379916935716983, 0.077429766922934393, 0.077479616716577396, +0.077529466316521786, 0.077579315722642067, 0.077629164934814074, 0.077679013952913156, 0.077728862776815150, 0.077778711406394543, 0.077828559841527159, 0.077878408082088818, +0.077928256127954010, 0.077978103978998570, 0.078027951635097861, 0.078077799096127720, 0.078127646361962635, 0.078177493432478443, 0.078227340307550505, 0.078277186987054673, +0.078327033470865420, 0.078376879758858584, 0.078426725850909554, 0.078476571746894153, 0.078526417446686869, 0.078576262950163553, 0.078626108257199581, 0.078675953367670776, +0.078725798281451639, 0.078775642998418008, 0.078825487518445717, 0.078875331841409269, 0.078925175967184485, 0.078975019895646759, 0.079024863626671937, 0.079074707160134511, +0.079124550495910301, 0.079174393633874726, 0.079224236573903609, 0.079274079315871465, 0.079323921859654117, 0.079373764205126957, 0.079423606352165846, 0.079473448300645261, +0.079523290050441064, 0.079573131601428634, 0.079622972953483820, 0.079672814106481138, 0.079722655060296410, 0.079772495814805500, 0.079822336369882896, 0.079872176725404462, +0.079922016881245575, 0.079971856837282099, 0.080021696593388522, 0.080071536149440722, 0.080121375505314077, 0.080171214660884421, 0.080221053616026300, 0.080270892370615549, +0.080320730924527559, 0.080370569277638179, 0.080420407429821941, 0.080470245380954694, 0.080520083130911815, 0.080569920679569182, 0.080619758026801311, 0.080669595172484024, +0.080719432116493212, 0.080769268858703364, 0.080819105398990357, 0.080868941737229569, 0.080918777873296877, 0.080968613807066811, 0.081018449538415194, 0.081068285067217458, +0.081118120393349452, 0.081167955516685708, 0.081217790437102061, 0.081267625154473944, 0.081317459668677219, 0.081367293979586391, 0.081417128087077323, 0.081466961991025447, +0.081516795691306598, 0.081566629187795323, 0.081616462480367483, 0.081666295568898470, 0.081716128453264175, 0.081765961133339116, 0.081815793608999141, 0.081865625880120127, +0.081915457946576620, 0.081965289808244454, 0.082015121464999077, 0.082064952916716324, 0.082114784163270754, 0.082164615204538216, 0.082214446040394157, 0.082264276670714412, +0.082314107095373540, 0.082363937314247390, 0.082413767327211410, 0.082463597134141448, 0.082513426734912049, 0.082563256129399076, 0.082613085317477977, 0.082662914299024601, +0.082712743073913492, 0.082762571642020527, 0.082812400003221584, 0.082862228157391193, 0.082912056104405232, 0.082961883844139134, 0.083011711376468761, 0.083061538701268672, +0.083111365818414731, 0.083161192727782385, 0.083211019429247496, 0.083260845922684623, 0.083310672207969616, 0.083360498284977949, 0.083410324153585472, 0.083460149813666729, +0.083509975265097625, 0.083559800507753579, 0.083609625541510482, 0.083659450366242866, 0.083709274981826634, 0.083759099388137651, 0.083808923585050488, 0.083858747572441009, +0.083908571350184646, 0.083958394918157320, 0.084008218276233559, 0.084058041424289243, 0.084107864362199830, 0.084157687089841199, 0.084207509607087908, 0.084257331913815833, +0.084307154009900437, 0.084356975895217609, 0.084406797569641881, 0.084456619033049171, 0.084506440285314899, 0.084556261326314983, 0.084606082155923967, 0.084655902774017744, +0.084705723180471773, 0.084755543375161918, 0.084805363357962779, 0.084855183128750220, 0.084905002687400158, 0.084954822033787139, 0.085004641167787068, 0.085054460089275391, +0.085104278798128014, 0.085154097294219480, 0.085203915577425723, 0.085253733647622162, 0.085303551504684716, 0.085353369148487956, 0.085403186578907761, 0.085453003795819604, +0.085502820799099377, 0.085552637588621666, 0.085602454164262348, 0.085652270525896898, 0.085702086673401220, 0.085751902606649888, 0.085801718325518792, 0.085851533829883836, +0.085901349119619608, 0.085951164194602012, 0.086000979054706495, 0.086050793699808989, 0.086100608129784040, 0.086150422344507580, 0.086200236343855055, 0.086250050127702399, +0.086299863695924156, 0.086349677048396259, 0.086399490184994182, 0.086449303105593817, 0.086499115810069735, 0.086548928298297884, 0.086598740570153709, 0.086648552625513117, +0.086698364464250707, 0.086748176086242385, 0.086797987491364054, 0.086847798679490329, 0.086897609650497101, 0.086947420404259845, 0.086997230940654480, 0.087047041259555605, +0.087096851360839111, 0.087146661244380502, 0.087196470910055682, 0.087246280357739237, 0.087296089587307099, 0.087345898598634730, 0.087395707391598049, 0.087445515966071669, +0.087495324321931495, 0.087545132459053016, 0.087594940377312150, 0.087644748076583484, 0.087694555556742937, 0.087744362817666469, 0.087794169859228624, 0.087843976681305377, +0.087893783283772176, 0.087943589666504965, 0.087993395829378332, 0.088043201772268209, 0.088093007495050085, 0.088142812997599893, 0.088192618279792218, 0.088242423341502993, +0.088292228182607721, 0.088342032802982307, 0.088391837202501378, 0.088441641381040853, 0.088491445338476221, 0.088541249074683429, 0.088591052589537062, 0.088640855882913067, +0.088690658954686932, 0.088740461804734591, 0.088790264432930657, 0.088840066839151063, 0.088889869023271742, 0.088939670985167307, 0.088989472724713692, 0.089039274241786398, +0.089089075536261358, 0.089138876608013187, 0.089188677456917817, 0.089238478082850764, 0.089288278485687961, 0.089338078665304008, 0.089387878621574865, 0.089437678354376021, +0.089487477863583437, 0.089537277149071698, 0.089587076210716779, 0.089636875048394168, 0.089686673661979813, 0.089736472051348326, 0.089786270216375655, 0.089836068156937759, +0.089885865872909240, 0.089935663364166071, 0.089985460630583741, 0.090035257672038196, 0.090085054488404065, 0.090134851079557293, 0.090184647445373398, 0.090234443585728324, +0.090284239500496716, 0.090334035189554490, 0.090383830652777178, 0.090433625890040739, 0.090483420901219788, 0.090533215686190285, 0.090583010244827747, 0.090632804577008119, +0.090682598682606044, 0.090732392561497469, 0.090782186213558352, 0.090831979638663338, 0.090881772836688371, 0.090931565807508968, 0.090981358551001090, 0.091031151067039379, +0.091080943355499794, 0.091130735416257838, 0.091180527249189500, 0.091230318854169393, 0.091280110231073491, 0.091329901379777312, 0.091379692300156815, 0.091429482992086655, +0.091479273455442781, 0.091529063690100734, 0.091578853695936463, 0.091628643472824622, 0.091678433020641159, 0.091728222339261617, 0.091778011428561970, 0.091827800288416847, +0.091877588918702222, 0.091927377319294068, 0.091977165490067042, 0.092026953430897090, 0.092076741141659743, 0.092126528622231002, 0.092176315872485495, 0.092226102892299197, +0.092275889681547638, 0.092325676240106805, 0.092375462567851327, 0.092425248664657206, 0.092475034530399958, 0.092524820164955557, 0.092574605568198673, 0.092624390740005266, +0.092674175680250895, 0.092723960388811519, 0.092773744865561808, 0.092823529110377723, 0.092873313123135265, 0.092923096903709076, 0.092972880451975159, 0.093022663767809030, +0.093072446851086690, 0.093122229701682782, 0.093172012319473307, 0.093221794704333796, 0.093271576856140237, 0.093321358774767299, 0.093371140460090971, 0.093420921911986782, +0.093470703130330735, 0.093520484114997485, 0.093570264865863020, 0.093620045382802899, 0.093669825665693110, 0.093719605714408322, 0.093769385528824509, 0.093819165108817673, +0.093868944454262485, 0.093918723565034931, 0.093968502441010571, 0.094018281082065405, 0.094068059488074077, 0.094117837658912615, 0.094167615594456550, 0.094217393294581897, +0.094267170759163313, 0.094316947988076813, 0.094366724981197928, 0.094416501738402672, 0.094466278259565731, 0.094516054544563091, 0.094565830593270311, 0.094615606405563407, +0.094665381981317034, 0.094715157320407209, 0.094764932422709933, 0.094814707288099875, 0.094864481916453067, 0.094914256307645037, 0.094964030461551815, 0.095013804378048086, +0.095063578057009823, 0.095113351498312640, 0.095163124701832497, 0.095212897667444119, 0.095262670395023494, 0.095312442884446180, 0.095362215135588208, 0.095411987148324259, +0.095461758922530338, 0.095511530458082028, 0.095561301754855332, 0.095611072812724934, 0.095660843631566850, 0.095710614211256664, 0.095760384551670394, 0.095810154652682708, +0.095859924514169637, 0.095909694136007195, 0.095959463518070082, 0.096009232660234298, 0.096059001562375443, 0.096108770224369519, 0.096158538646091238, 0.096208306827416601, +0.096258074768221208, 0.096307842468381061, 0.096357609927770871, 0.096407377146266654, 0.096457144123743982, 0.096506910860078912, 0.096556677355146114, 0.096606443608821618, +0.096656209620981023, 0.096705975391500332, 0.096755740920254268, 0.096805506207118863, 0.096855271251970118, 0.096905036054682758, 0.096954800615132813, 0.097004564933195855, +0.097054329008747942, 0.097104092841663756, 0.097153856431819341, 0.097203619779090283, 0.097253382883352613, 0.097303145744481054, 0.097352908362351623, 0.097402670736839919, +0.097452432867821986, 0.097502194755172536, 0.097551956398767584, 0.097601717798482743, 0.097651478954194057, 0.097701239865776224, 0.097751000533105301, 0.097800760956057317, +0.097850521134506985, 0.097900281068330347, 0.097950040757403017, 0.097999800201601012, 0.098049559400799083, 0.098099318354873233, 0.098149077063699103, 0.098198835527152722, +0.098248593745108803, 0.098298351717443402, 0.098348109444032134, 0.098397866924751012, 0.098447624159474806, 0.098497381148079516, 0.098547137890440784, 0.098596894386434653, +0.098646650635935834, 0.098696406638820400, 0.098746162394963949, 0.098795917904242525, 0.098845673166530867, 0.098895428181705033, 0.098945182949641067, 0.098994937470213692, +0.099044691743298982, 0.099094445768772535, 0.099144199546510423, 0.099193953076387370, 0.099243706358279435, 0.099293459392062244, 0.099343212177611828, 0.099392964714802953, +0.099442717003511663, 0.099492469043613571, 0.099542220834984763, 0.099591972377499949, 0.099641723671035201, 0.099691474715466161, 0.099741225510668857, 0.099790976056518058, +0.099840726352889819, 0.099890476399660214, 0.099940226196703966, 0.099989975743897147, 0.100039725041115400, 0.100089474088234780, 0.100139222885130020, 0.100188971431677220, +0.100238719727751990, 0.100288467773230390, 0.100338215567987190, 0.100387963111898450, 0.100437710404839800, 0.100487457446687310, 0.100537204237315740, 0.100586950776601170, +0.100636697064419200, 0.100686443100645950, 0.100736188885156130, 0.100785934417825860, 0.100835679698531190, 0.100885424727146870, 0.100935169503549000, 0.100984914027613200, +0.101034658299215550, 0.101084402318230820, 0.101134146084535080, 0.101183889598003980, 0.101233632858513600, 0.101283375865938690, 0.101333118620155340, 0.101382861121039200, +0.101432603368466340, 0.101482345362311540, 0.101532087102450870, 0.101581828588759980, 0.101631569821114970, 0.101681310799390580, 0.101731051523462930, 0.101780791993208080, +0.101830532208500820, 0.101880272169217220, 0.101930011875232930, 0.101979751326424060, 0.102029490522665380, 0.102079229463832970, 0.102128968149802480, 0.102178706580450020, +0.102228444755650350, 0.102278182675279560, 0.102327920339213310, 0.102377657747327720, 0.102427394899497540, 0.102477131795598860, 0.102526868435507360, 0.102576604819099120, +0.102626340946248940, 0.102676076816832900, 0.102725812430726660, 0.102775547787806340, 0.102825282887946720, 0.102875017731023880, 0.102924752316913930, 0.102974486645491680, +0.103024220716633200, 0.103073954530214160, 0.103123688086110680, 0.103173421384197550, 0.103223154424350860, 0.103272887206446280, 0.103322619730359930, 0.103372351995966570, +0.103422084003142360, 0.103471815751762920, 0.103521547241704380, 0.103571278472841550, 0.103621009445050510, 0.103670740158206940, 0.103720470612186980, 0.103770200806865390, +0.103819930742118300, 0.103869660417821820, 0.103919389833850750, 0.103969118990081210, 0.104018847886388880, 0.104068576522649850, 0.104118304898738950, 0.104168033014532290, +0.104217760869905540, 0.104267488464734840, 0.104317215798894970, 0.104366942872262060, 0.104416669684711790, 0.104466396236120290, 0.104516122526362370, 0.104565848555314130, +0.104615574322851280, 0.104665299828849920, 0.104715025073184880, 0.104764750055732270, 0.104814474776368240, 0.104864199234967560, 0.104913923431406400, 0.104963647365560420, +0.105013371037305780, 0.105063094446517260, 0.105112817593071010, 0.105162540476842700, 0.105212263097708490, 0.105261985455543190, 0.105311707550222910, 0.105361429381623360, +0.105411150949620700, 0.105460872254089700, 0.105510593294906530, 0.105560314071946880, 0.105610034585086870, 0.105659754834201360, 0.105709474819166440, 0.105759194539857840, +0.105808913996151690, 0.105858633187922810, 0.105908352115047360, 0.105958070777401460, 0.106007789174859950, 0.106057507307298970, 0.106107225174594210, 0.106156942776621840, +0.106206660113256660, 0.106256377184374850, 0.106306093989852080, 0.106355810529564510, 0.106405526803386980, 0.106455242811195640, 0.106504958552866190, 0.106554674028274790, +0.106604389237296250, 0.106654104179806750, 0.106703818855681980, 0.106753533264798110, 0.106803247407029960, 0.106852961282253690, 0.106902674890345470, 0.106952388231180110, +0.107002101304633790, 0.107051814110582210, 0.107101526648901530, 0.107151238919466610, 0.107200950922153580, 0.107250662656838180, 0.107300374123396550, 0.107350085321703550, +0.107399796251635340, 0.107449506913067640, 0.107499217305876610, 0.107548927429937100, 0.107598637285125270, 0.107648346871316840, 0.107698056188388000, 0.107747765236213570, +0.107797474014669730, 0.107847182523632640, 0.107896890762977150, 0.107946598732579450, 0.107996306432315240, 0.108046013862060700, 0.108095721021690700, 0.108145427911081380, +0.108195134530108500, 0.108244840878648220, 0.108294546956575410, 0.108344252763766220, 0.108393958300096390, 0.108443663565442120, 0.108493368559678250, 0.108543073282680950, +0.108592777734325980, 0.108642481914489500, 0.108692185823046360, 0.108741889459872770, 0.108791592824844460, 0.108841295917837600, 0.108890998738727070, 0.108940701287389030, +0.108990403563699680, 0.109040105567533890, 0.109089807298767840, 0.109139508757277250, 0.109189209942938350, 0.109238910855625980, 0.109288611495216320, 0.109338311861585140, +0.109388011954608620, 0.109437711774161630, 0.109487411320120370, 0.109537110592360570, 0.109586809590758440, 0.109636508315188840, 0.109686206765527970, 0.109735904941651590, +0.109785602843435890, 0.109835300470755720, 0.109884997823487320, 0.109934694901506850, 0.109984391704689220, 0.110034088232910610, 0.110083784486046780, 0.110133480463973910, +0.110183176166566920, 0.110232871593701970, 0.110282566745254860, 0.110332261621101770, 0.110381956221117570, 0.110431650545178490, 0.110481344593160280, 0.110531038364939160, +0.110580731860390000, 0.110630425079389000, 0.110680118021811950, 0.110729810687535040, 0.110779503076433170, 0.110829195188382520, 0.110878887023259350, 0.110928578580938510, +0.110978269861296220, 0.111027960864208260, 0.111077651589550840, 0.111127342037198850, 0.111177032207028500, 0.111226722098915570, 0.111276411712736280, 0.111326101048365520, +0.111375790105679500, 0.111425478884554010, 0.111475167384865260, 0.111524855606488160, 0.111574543549298910, 0.111624231213173300, 0.111673918597987570, 0.111723605703616590, +0.111773292529936600, 0.111822979076823810, 0.111872665344153150, 0.111922351331800810, 0.111972037039642610, 0.112021722467554740, 0.112071407615412120, 0.112121092483090990, +0.112170777070467130, 0.112220461377416770, 0.112270145403814820, 0.112319829149537490, 0.112369512614460600, 0.112419195798460370, 0.112468878701411700, 0.112518561323190840, +0.112568243663673570, 0.112617925722736140, 0.112667607500253450, 0.112717288996101740, 0.112766970210156820, 0.112816651142294900, 0.112866331792390930, 0.112916012160321110, +0.112965692245961720, 0.113015372049187640, 0.113065051569875130, 0.113114730807900010, 0.113164409763138490, 0.113214088435465500, 0.113263766824757310, 0.113313444930889680, +0.113363122753738890, 0.113412800293179850, 0.113462477549088810, 0.113512154521341570, 0.113561831209814390, 0.113611507614382200, 0.113661183734921230, 0.113710859571307300, +0.113760535123416680, 0.113810210391124250, 0.113859885374306320, 0.113909560072839100, 0.113959234486597550, 0.114008908615457910, 0.114058582459296010, 0.114108256017988070, +0.114157929291409070, 0.114207602279435240, 0.114257274981942410, 0.114306947398806830, 0.114356619529903430, 0.114406291375108490, 0.114455962934297830, 0.114505634207347690, +0.114555305194133030, 0.114604975894530100, 0.114654646308414740, 0.114704316435663200, 0.114753986276150440, 0.114803655829752700, 0.114853325096346270, 0.114902994075806080, +0.114952662768008400, 0.115002331172829070, 0.115051999290144360, 0.115101667119829190, 0.115151334661759880, 0.115201001915812220, 0.115250668881862490, 0.115300335559785650, +0.115350001949457980, 0.115399668050755300, 0.115449333863553880, 0.115498999387728700, 0.115548664623156020, 0.115598329569711670, 0.115647994227271940, 0.115697658595711790, +0.115747322674907490, 0.115796986464734880, 0.115846649965070240, 0.115896313175788550, 0.115945976096766060, 0.115995638727879090, 0.116045301069002570, 0.116094963120012790, +0.116144624880785610, 0.116194286351197320, 0.116243947531122850, 0.116293608420438520, 0.116343269019020190, 0.116392929326744110, 0.116442589343485270, 0.116492249069119950, +0.116541908503524010, 0.116591567646573750, 0.116641226498144110, 0.116690885058111410, 0.116740543326351500, 0.116790201302740690, 0.116839858987153920, 0.116889516379467500, +0.116939173479557730, 0.116988830287299590, 0.117038486802569370, 0.117088143025242940, 0.117137798955196590, 0.117187454592305300, 0.117237109936445370, 0.117286764987492670, +0.117336419745323510, 0.117386074209812840, 0.117435728380837000, 0.117485382258271830, 0.117535035841993650, 0.117584689131877430, 0.117634342127799500, 0.117683994829635710, +0.117733647237262370, 0.117783299350554480, 0.117832951169388330, 0.117882602693640260, 0.117932253923185220, 0.117981904857899560, 0.118031555497659130, 0.118081205842340260, +0.118130855891817930, 0.118180505645968460, 0.118230155104667740, 0.118279804267792050, 0.118329453135216420, 0.118379101706817160, 0.118428749982470150, 0.118478397962051690, +0.118528045645436800, 0.118577693032501800, 0.118627340123122570, 0.118676986917175420, 0.118726633414535380, 0.118776279615078740, 0.118825925518681850, 0.118875571125219700, +0.118925216434568620, 0.118974861446604500, 0.119024506161203680, 0.119074150578241140, 0.119123794697593220, 0.119173438519135820, 0.119223082042745270, 0.119272725268296580, +0.119322368195666060, 0.119372010824729630, 0.119421653155363610, 0.119471295187443020, 0.119520936920844190, 0.119570578355443020, 0.119620219491115840, 0.119669860327737670, +0.119719500865184850, 0.119769141103333280, 0.119818781042059300, 0.119868420681237920, 0.119918060020745500, 0.119967699060458360, 0.120017337800251530, 0.120066976240001360, +0.120116614379583750, 0.120166252218875040, 0.120215889757750270, 0.120265526996085770, 0.120315163933757450, 0.120364800570641670, 0.120414436906613440, 0.120464072941549120, +0.120513708675324610, 0.120563344107816270, 0.120612979238899150, 0.120662614068449550, 0.120712248596343440, 0.120761882822457150, 0.120811516746665700, 0.120861150368845450, +0.120910783688872790, 0.120960416706622710, 0.121010049421971590, 0.121059681834795350, 0.121109313944970350, 0.121158945752371610, 0.121208577256875530, 0.121258208458358000, +0.121307839356695370, 0.121357469951762720, 0.121407100243436390, 0.121456730231592310, 0.121506359916106840, 0.121555989296855040, 0.121605618373713250, 0.121655247146557440, +0.121704875615263930, 0.121754503779707800, 0.121804131639765400, 0.121853759195313130, 0.121903386446226020, 0.121953013392380430, 0.122002640033652310, 0.122052266369918030, +0.122101892401052650, 0.122151518126932530, 0.122201143547433620, 0.122250768662432300, 0.122300393471803600, 0.122350017975423940, 0.122399642173169220, 0.122449266064915840, +0.122498889650538840, 0.122548512929914630, 0.122598135902919140, 0.122647758569428740, 0.122697380929318510, 0.122747002982464830, 0.122796624728743640, 0.122846246168031330, +0.122895867300202950, 0.122945488125134920, 0.122995108642703600, 0.123044728852784070, 0.123094348755252730, 0.123143968349985510, 0.123193587636858810, 0.123243206615747700, +0.123292825286528560, 0.123342443649077370, 0.123392061703270510, 0.123441679448983060, 0.123491296886091410, 0.123540914014471510, 0.123590530833999760, 0.123640147344551250, +0.123689763546002390, 0.123739379438229100, 0.123788995021107810, 0.123838610294513580, 0.123888225258322840, 0.123937839912411970, 0.123987454256656070, 0.124037068290931520, +0.124086682015114300, 0.124136295429080820, 0.124185908532706170, 0.124235521325866740, 0.124285133808438500, 0.124334745980297880, 0.124384357841319950, 0.124433969391381110, +0.124483580630357370, 0.124533191558125100, 0.124582802174559430, 0.124632412479536740, 0.124682022472933020, 0.124731632154624680, 0.124781241524486830, 0.124830850582395870, +0.124880459328228240, 0.124930067761859000, 0.124979675883164600, 0.125029283692021010, 0.125078891188304650, 0.125128498371890630, 0.125178105242655350, 0.125227711800474820, +0.125277318045225430, 0.125326923976782330, 0.125376529595021910, 0.125426134899820160, 0.125475739891053510, 0.125525344568597070, 0.125574948932327290, 0.125624552982120140, +0.125674156717852010, 0.125723760139398070, 0.125773363246634740, 0.125822966039438430, 0.125872568517684270, 0.125922170681248670, 0.125971772530007660, 0.126021374063837680, +0.126070975282613800, 0.126120576186212470, 0.126170176774509730, 0.126219777047381960, 0.126269377004704310, 0.126318976646353250, 0.126368575972204720, 0.126418174982135200, +0.126467773676019770, 0.126517372053734950, 0.126566970115156690, 0.126616567860161430, 0.126666165288624320, 0.126715762400421790, 0.126765359195429860, 0.126814955673524990, +0.126864551834582260, 0.126914147678478170, 0.126963743205089160, 0.127013338414290330, 0.127062933305958160, 0.127112527879968660, 0.127162122136198260, 0.127211716074522140, +0.127261309694816720, 0.127310902996958020, 0.127360495980822520, 0.127410088646285340, 0.127459680993222910, 0.127509273021511300, 0.127558864731026960, 0.127608456121645010, +0.127658047193241890, 0.127707637945693670, 0.127757228378876820, 0.127806818492666420, 0.127856408286939010, 0.127905997761570990, 0.127955586916437550, 0.128005175751415150, +0.128054764266379790, 0.128104352461207970, 0.128153940335774850, 0.128203527889956840, 0.128253115123630020, 0.128302702036670880, 0.128352288628954540, 0.128401874900357450, +0.128451460850755680, 0.128501046480025720, 0.128550631788042690, 0.128600216774683060, 0.128649801439822910, 0.128699385783338700, 0.128748969805105580, 0.128798553505000050, +0.128848136882898560, 0.128897719938676270, 0.128947302672209720, 0.128996885083374900, 0.129046467172048290, 0.129096048938105080, 0.129145630381421740, 0.129195211501874350, +0.129244792299339360, 0.129294372773691930, 0.129343952924808600, 0.129393532752565380, 0.129443112256838740, 0.129492691437503920, 0.129542270294437320, 0.129591848827515090, +0.129641427036613660, 0.129691004921608230, 0.129740582482375270, 0.129790159718790880, 0.129839736630731510, 0.129889313218072370, 0.129938889480689930, 0.129988465418460740, +0.130038041031259930, 0.130087616318964010, 0.130137191281449040, 0.130186765918591550, 0.130236340230266700, 0.130285914216351000, 0.130335487876720500, 0.130385061211251760, +0.130434634219819880, 0.130484206902301450, 0.130533779258572490, 0.130583351288509510, 0.130632922991987730, 0.130682494368883630, 0.130732065419073310, 0.130781636142433240, +0.130831206538838670, 0.130880776608166080, 0.130930346350291970, 0.130979915765091550, 0.131029484852441370, 0.131079053612217440, 0.131128622044296340, 0.131178190148553250, +0.131227757924864690, 0.131277325373106710, 0.131326892493155850, 0.131376459284887340, 0.131426025748177690, 0.131475591882902950, 0.131525157688939690, 0.131574723166163090, +0.131624288314449690, 0.131673853133675550, 0.131723417623717250, 0.131772981784449930, 0.131822545615750190, 0.131872109117494500, 0.131921672289558090, 0.131971235131817520, +0.132020797644148870, 0.132070359826428650, 0.132119921678532090, 0.132169483200335720, 0.132219044391715640, 0.132268605252548410, 0.132318165782709220, 0.132367725982074610, +0.132417285850520680, 0.132466845387924000, 0.132516404594159750, 0.132565963469104490, 0.132615522012634300, 0.132665080224625780, 0.132714638104954100, 0.132764195653495810, +0.132813752870127500, 0.132863309754724350, 0.132912866307162950, 0.132962422527319350, 0.133011978415070150, 0.133061533970290580, 0.133111089192857160, 0.133160644082646020, +0.133210198639533710, 0.133259752863395450, 0.133309306754107820, 0.133358860311546920, 0.133408413535589330, 0.133457966426110240, 0.133507518982986240, 0.133557071206093450, +0.133606623095308410, 0.133656174650506360, 0.133705725871563900, 0.133755276758357110, 0.133804827310762600, 0.133854377528655530, 0.133903927411912570, 0.133953476960410180, +0.134003026174023680, 0.134052575052629630, 0.134102123596104130, 0.134151671804323750, 0.134201219677163780, 0.134250767214500740, 0.134300314416210760, 0.134349861282170470, +0.134399407812255070, 0.134448954006341160, 0.134498499864304870, 0.134548045386022750, 0.134597590571370110, 0.134647135420223470, 0.134696679932458980, 0.134746224107953260, +0.134795767946581520, 0.134845311448220350, 0.134894854612746360, 0.134944397440034780, 0.134993939929962230, 0.135043482082404800, 0.135093023897239120, 0.135142565374340440, +0.135192106513585350, 0.135241647314850000, 0.135291187778010940, 0.135340727902943490, 0.135390267689524220, 0.135439807137629290, 0.135489346247135290, 0.135538885017917470, +0.135588423449852450, 0.135637961542816350, 0.135687499296685780, 0.135737036711336050, 0.135786573786643720, 0.135836110522485400, 0.135885646918736340, 0.135935182975273180, +0.135984718691972070, 0.136034254068709590, 0.136083789105361040, 0.136133323801803010, 0.136182858157911670, 0.136232392173563640, 0.136281925848634190, 0.136331459182999910, +0.136380992176536990, 0.136430524829122020, 0.136480057140630300, 0.136529589110938460, 0.136579120739922620, 0.136628652027459440, 0.136678182973424180, 0.136727713577693450, +0.136777243840143450, 0.136826773760650780, 0.136876303339090730, 0.136925832575339940, 0.136975361469274970, 0.137024890020771200, 0.137074418229705170, 0.137123946095953130, +0.137173473619391640, 0.137223000799896020, 0.137272527637342910, 0.137322054131608470, 0.137371580282569350, 0.137421106090100830, 0.137470631554079570, 0.137520156674381690, +0.137569681450883880, 0.137619205883461440, 0.137668729971990980, 0.137718253716348660, 0.137767777116411190, 0.137817300172053820, 0.137866822883153190, 0.137916345249585960, +0.137965867271227420, 0.138015388947954200, 0.138064910279642520, 0.138114431266169010, 0.138163951907408960, 0.138213472203239040, 0.138262992153535460, 0.138312511758174830, +0.138362031017032460, 0.138411549929985030, 0.138461068496908730, 0.138510586717680180, 0.138560104592174740, 0.138609622120269030, 0.138659139301839260, 0.138708656136762090, +0.138758172624912860, 0.138807688766168170, 0.138857204560404710, 0.138906720007497790, 0.138956235107324080, 0.139005749859759780, 0.139055264264681510, 0.139104778321964690, +0.139154292031485910, 0.139203805393121380, 0.139253318406747790, 0.139302831072240480, 0.139352343389476080, 0.139401855358330830, 0.139451366978681350, 0.139500878250403050, +0.139550389173372540, 0.139599899747466060, 0.139649409972560260, 0.139698919848530500, 0.139748429375253450, 0.139797938552605750, 0.139847447380462790, 0.139896955858701180, +0.139946463987197180, 0.139995971765827480, 0.140045479194467410, 0.140094986272993630, 0.140144493001282400, 0.140193999379210370, 0.140243505406652900, 0.140293011083486690, +0.140342516409587920, 0.140392021384833310, 0.140441526009098210, 0.140491030282259290, 0.140540534204192800, 0.140590037774775380, 0.140639540993882480, 0.140689043861390690, +0.140738546377176310, 0.140788048541115980, 0.140837550353085120, 0.140887051812960380, 0.140936552920618440, 0.140986053675934670, 0.141035554078785790, 0.141085054129048010, +0.141134553826598010, 0.141184053171311220, 0.141233552163064300, 0.141283050801733480, 0.141332549087195470, 0.141382047019325660, 0.141431544598000720, 0.141481041823096950, +0.141530538694490980, 0.141580035212058250, 0.141629531375675410, 0.141679027185218740, 0.141728522640564960, 0.141778017741589430, 0.141827512488168860, 0.141877006880179930, +0.141926500917498060, 0.141975994599999930, 0.142025487927561810, 0.142074980900060430, 0.142124473517371150, 0.142173965779370660, 0.142223457685935280, 0.142272949236941700, +0.142322440432265300, 0.142371931271782800, 0.142421421755370450, 0.142470911882905000, 0.142520401654261860, 0.142569891069317670, 0.142619380127948780, 0.142668868830031880, +0.142718357175442350, 0.142767845164056940, 0.142817332795752370, 0.142866820070403990, 0.142916306987888600, 0.142965793548082420, 0.143015279750862200, 0.143064765596103340, +0.143114251083682590, 0.143163736213476170, 0.143213220985360880, 0.143262705399212100, 0.143312189454906540, 0.143361673152320510, 0.143411156491330740, 0.143460639471812620, +0.143510122093642920, 0.143559604356697930, 0.143609086260854340, 0.143658567805987620, 0.143708048991974450, 0.143757529818691190, 0.143807010286014530, 0.143856490393819900, +0.143905970141984060, 0.143955449530383720, 0.144004928558894320, 0.144054407227392600, 0.144103885535754870, 0.144153363483857850, 0.144202841071576990, 0.144252318298789010, +0.144301795165370260, 0.144351271671197460, 0.144400747816146040, 0.144450223600092740, 0.144499699022913870, 0.144549174084486230, 0.144598648784685170, 0.144648123123387510, +0.144697597100469560, 0.144747070715808030, 0.144796543969278410, 0.144846016860757400, 0.144895489390121810, 0.144944961557247040, 0.144994433362009870, 0.145043904804286610, +0.145093375883954050, 0.145142846600887610, 0.145192316954964040, 0.145241786946059690, 0.145291256574051290, 0.145340725838814330, 0.145390194740225550, 0.145439663278161270, +0.145489131452498280, 0.145538599263112020, 0.145588066709879280, 0.145637533792676350, 0.145687000511380030, 0.145736466865865780, 0.145785932856010350, 0.145835398481690550, +0.145884863742781780, 0.145934328639160890, 0.145983793170704150, 0.146033257337288360, 0.146082721138789010, 0.146132184575082870, 0.146181647646046240, 0.146231110351555920, +0.146280572691487420, 0.146330034665717450, 0.146379496274122420, 0.146428957516579080, 0.146478418392962910, 0.146527878903150690, 0.146577339047018810, 0.146626798824443960, +0.146676258235301730, 0.146725717279468810, 0.146775175956822050, 0.146824634267236910, 0.146874092210590200, 0.146923549786758260, 0.146973006995617860, 0.147022463837044510, +0.147071920310915010, 0.147121376417105710, 0.147170832155493400, 0.147220287525953590, 0.147269742528363030, 0.147319197162598140, 0.147368651428535670, 0.147418105326051150, +0.147467558855021390, 0.147517012015322690, 0.147566464806831920, 0.147615917229424550, 0.147665369282977380, 0.147714820967366790, 0.147764272282469580, 0.147813723228161280, +0.147863173804318630, 0.147912624010818510, 0.147962073847536370, 0.148011523314349080, 0.148060972411132950, 0.148110421137764850, 0.148159869494120240, 0.148209317480075960, +0.148258765095508390, 0.148308212340294370, 0.148357659214309350, 0.148407105717430180, 0.148456551849533270, 0.148505997610495400, 0.148555443000192110, 0.148604888018500190, +0.148654332665296070, 0.148703776940456560, 0.148753220843857140, 0.148802664375374700, 0.148852107534886040, 0.148901550322266650, 0.148950992737393400, 0.149000434780142660, +0.149049876450391280, 0.149099317748014740, 0.149148758672889930, 0.149198199224893220, 0.149247639403901460, 0.149297079209790160, 0.149346518642436170, 0.149395957701715880, +0.149445396387506120, 0.149494834699682420, 0.149544272638121640, 0.149593710202700210, 0.149643147393294930, 0.149692584209781320, 0.149742020652036260, 0.149791456719936600, +0.149840892413357850, 0.149890327732176860, 0.149939762676270070, 0.149989197245514290, 0.150038631439785100, 0.150088065258959320, 0.150137498702913370, 0.150186931771524150, +0.150236364464667120, 0.150285796782219210, 0.150335228724056770, 0.150384660290056730, 0.150434091480094590, 0.150483522294047210, 0.150532952731791040, 0.150582382793202910, +0.150631812478158410, 0.150681241786534360, 0.150730670718207200, 0.150780099273053830, 0.150829527450949740, 0.150878955251771860, 0.150928382675397020, 0.150977809721700770, +0.151027236390560010, 0.151076662681851160, 0.151126088595451100, 0.151175514131235370, 0.151224939289080850, 0.151274364068863960, 0.151323788470461630, 0.151373212493749380, +0.151422636138604130, 0.151472059404902240, 0.151521482292520660, 0.151570904801334950, 0.151620326931221960, 0.151669748682058150, 0.151719170053720430, 0.151768591046084340, +0.151818011659026750, 0.151867431892424600, 0.151916851746153410, 0.151966271220090100, 0.152015690314111110, 0.152065109028093340, 0.152114527361912330, 0.152163945315445030, +0.152213362888567880, 0.152262780081157730, 0.152312196893090200, 0.152361613324242170, 0.152411029374490140, 0.152460445043710920, 0.152509860331780210, 0.152559275238574820, +0.152608689763971240, 0.152658103907846370, 0.152707517670075820, 0.152756931050536450, 0.152806344049105200, 0.152855756665657650, 0.152905168900070720, 0.152954580752220880, +0.153003992221984990, 0.153053403309238720, 0.153102814013858920, 0.153152224335722090, 0.153201634274705120, 0.153251043830683640, 0.153300453003534560, 0.153349861793134340, +0.153399270199359890, 0.153448678222086850, 0.153498085861192100, 0.153547493116552140, 0.153596899988043880, 0.153646306475542950, 0.153695712578926220, 0.153745118298070690, +0.153794523632851900, 0.153843928583146800, 0.153893333148831880, 0.153942737329784090, 0.153992141125878970, 0.154041544536993540, 0.154090947563004230, 0.154140350203788000, +0.154189752459220450, 0.154239154329178510, 0.154288555813538700, 0.154337956912177910, 0.154387357624971830, 0.154436757951797320, 0.154486157892530950, 0.154535557447049580, +0.154584956615228920, 0.154634355396945840, 0.154683753792076880, 0.154733151800498990, 0.154782549422087770, 0.154831946656720180, 0.154881343504273160, 0.154930739964622340, +0.154980136037644660, 0.155029531723216650, 0.155078927021215260, 0.155128321931516100, 0.155177716453996140, 0.155227110588531890, 0.155276504335000310, 0.155325897693277010, +0.155375290663238990, 0.155424683244762720, 0.155474075437725210, 0.155523467242002030, 0.155572858657470230, 0.155622249684006260, 0.155671640321487090, 0.155721030569788390, +0.155770420428787110, 0.155819809898360250, 0.155869198978383390, 0.155918587668733540, 0.155967975969287240, 0.156017363879921410, 0.156066751400511770, 0.156116138530935230, +0.156165525271068330, 0.156214911620788070, 0.156264297579970100, 0.156313683148491370, 0.156363068326228430, 0.156412453113058260, 0.156461837508856530, 0.156511221513500190, +0.156560605126865810, 0.156609988348830360, 0.156659371179269510, 0.156708753618060190, 0.156758135665079460, 0.156807517320202950, 0.156856898583307650, 0.156906279454270080, +0.156955659932967260, 0.157005040019274870, 0.157054419713069850, 0.157103799014228800, 0.157153177922628700, 0.157202556438145210, 0.157251934560655310, 0.157301312290035580, +0.157350689626163030, 0.157400066568913280, 0.157449443118163390, 0.157498819273789890, 0.157548195035669770, 0.157597570403678750, 0.157646945377693780, 0.157696319957591450, +0.157745694143248770, 0.157795067934541400, 0.157844441331346370, 0.157893814333540690, 0.157943186941000010, 0.157992559153601360, 0.158041930971221320, 0.158091302393736920, +0.158140673421023780, 0.158190044052958970, 0.158239414289419070, 0.158288784130281050, 0.158338153575420660, 0.158387522624714870, 0.158436891278040250, 0.158486259535273870, +0.158535627396291400, 0.158584994860969860, 0.158634361929185810, 0.158683728600816340, 0.158733094875737060, 0.158782460753825070, 0.158831826234957370, 0.158881191319009660, +0.158930556005858980, 0.158979920295381880, 0.159029284187455430, 0.159078647681955340, 0.159128010778758660, 0.159177373477741910, 0.159226735778782190, 0.159276097681755160, +0.159325459186537900, 0.159374820293007010, 0.159424181001039500, 0.159473541310511090, 0.159522901221298840, 0.159572260733279320, 0.159621619846329610, 0.159670978560325390, +0.159720336875143730, 0.159769694790661660, 0.159819052306754920, 0.159868409423300550, 0.159917766140175170, 0.159967122457255810, 0.160016478374418180, 0.160065833891539390, +0.160115189008495970, 0.160164543725165060, 0.160213898041422330, 0.160263251957144860, 0.160312605472209270, 0.160361958586492580, 0.160411311299870570, 0.160460663612220280, +0.160510015523418340, 0.160559367033341780, 0.160608718141866390, 0.160658068848869180, 0.160707419154227260, 0.160756769057816330, 0.160806118559513490, 0.160855467659195370, +0.160904816356738980, 0.160954164652020140, 0.161003512544915880, 0.161052860035302840, 0.161102207123058090, 0.161151553808057370, 0.161200900090177790, 0.161250245969295960, +0.161299591445288940, 0.161348936518032500, 0.161398281187403710, 0.161447625453279230, 0.161496969315536140, 0.161546312774050150, 0.161595655828698420, 0.161644998479357540, +0.161694340725904580, 0.161743682568215340, 0.161793024006166910, 0.161842365039636340, 0.161891705668499420, 0.161941045892633250, 0.161990385711914460, 0.162039725126220140, +0.162089064135426060, 0.162138402739409330, 0.162187740938046610, 0.162237078731214960, 0.162286416118790160, 0.162335753100649320, 0.162385089676669120, 0.162434425846726630, +0.162483761610697640, 0.162533096968459220, 0.162582431919888080, 0.162631766464861300, 0.162681100603254660, 0.162730434334945270, 0.162779767659810230, 0.162829100577725340, +0.162878433088567700, 0.162927765192213970, 0.162977096888541260, 0.163026428177425380, 0.163075759058743410, 0.163125089532372060, 0.163174419598188430, 0.163223749256068310, +0.163273078505888790, 0.163322407347526590, 0.163371735780858840, 0.163421063805761270, 0.163470391422111060, 0.163519718629784870, 0.163569045428659830, 0.163618371818611720, +0.163667697799517700, 0.163717023371254850, 0.163766348533699040, 0.163815673286727330, 0.163864997630216420, 0.163914321564043480, 0.163963645088084310, 0.164012968202216000, +0.164062290906315300, 0.164111613200259270, 0.164160935083923790, 0.164210256557185990, 0.164259577619922520, 0.164308898272010560, 0.164358218513325910, 0.164407538343745720, +0.164456857763146700, 0.164506176771405940, 0.164555495368399330, 0.164604813554003970, 0.164654131328096560, 0.164703448690554280, 0.164752765641252940, 0.164802082180069670, +0.164851398306881640, 0.164900714021564670, 0.164950029323995940, 0.164999344214052100, 0.165048658691610370, 0.165097972756546560, 0.165147286408737800, 0.165196599648060800, +0.165245912474392770, 0.165295224887609530, 0.165344536887588210, 0.165393848474205550, 0.165443159647338690, 0.165492470406863520, 0.165541780752657160, 0.165591090684596350, +0.165640400202558270, 0.165689709306418740, 0.165739017996054920, 0.165788326271344020, 0.165837634132161850, 0.165886941578385600, 0.165936248609891980, 0.165985555226558200, +0.166034861428260070, 0.166084167214874820, 0.166133472586279110, 0.166182777542350200, 0.166232082082963860, 0.166281386207997340, 0.166330689917327380, 0.166379993210831110, +0.166429296088384420, 0.166478598549864490, 0.166527900595148050, 0.166577202224112320, 0.166626503436633130, 0.166675804232587680, 0.166725104611853160, 0.166774404574305450, +0.166823704119821730, 0.166873003248278750, 0.166922301959553680, 0.166971600253522450, 0.167020898130062180, 0.167070195589049700, 0.167119492630362160, 0.167168789253875430, +0.167218085459466730, 0.167267381247012850, 0.167316676616390940, 0.167365971567476870, 0.167415266100147900, 0.167464560214280770, 0.167513853909752650, 0.167563147186439500, +0.167612440044218440, 0.167661732482966290, 0.167711024502560260, 0.167760316102876230, 0.167809607283791410, 0.167858898045183000, 0.167908188386926890, 0.167957478308900340, +0.168006767810980090, 0.168056056893043340, 0.168105345554966030, 0.168154633796625350, 0.168203921617898100, 0.168253209018661450, 0.168302495998791380, 0.168351782558165050, +0.168401068696659250, 0.168450354414151240, 0.168499639710516870, 0.168548924585633450, 0.168598209039377670, 0.168647493071626830, 0.168696776682256830, 0.168746059871144880, +0.168795342638168200, 0.168844624983202740, 0.168893906906125740, 0.168943188406813940, 0.168992469485144630, 0.169041750140993680, 0.169091030374238370, 0.169140310184755500, +0.169189589572422280, 0.169238868537114650, 0.169288147078709840, 0.169337425197084670, 0.169386702892116350, 0.169435980163680860, 0.169485257011655430, 0.169534533435916850, +0.169583809436342350, 0.169633085012807910, 0.169682360165190750, 0.169731634893368150, 0.169780909197216000, 0.169830183076611600, 0.169879456531431720, 0.169928729561553640, +0.169978002166853300, 0.170027274347207960, 0.170076546102494420, 0.170125817432589980, 0.170175088337370550, 0.170224358816713380, 0.170273628870495320, 0.170322898498593640, +0.170372167700884260, 0.170421436477244480, 0.170470704827551080, 0.170519972751681380, 0.170569240249511310, 0.170618507320918130, 0.170667773965779120, 0.170717040183970240, +0.170766305975368770, 0.170815571339851510, 0.170864836277295790, 0.170914100787577520, 0.170963364870574010, 0.171012628526162060, 0.171061891754219010, 0.171111154554620780, +0.171160416927244650, 0.171209678871967500, 0.171258940388666570, 0.171308201477217870, 0.171357462137498670, 0.171406722369385810, 0.171455982172756570, 0.171505241547486950, +0.171554500493454220, 0.171603759010535230, 0.171653017098607280, 0.171702274757546370, 0.171751531987229760, 0.171800788787534770, 0.171850045158337350, 0.171899301099514850, +0.171948556610944050, 0.171997811692502330, 0.172047066344065640, 0.172096320565511270, 0.172145574356716100, 0.172194827717557450, 0.172244080647911270, 0.172293333147654910, +0.172342585216665210, 0.172391836854819490, 0.172441088061993740, 0.172490338838065250, 0.172539589182910930, 0.172588839096408070, 0.172638088578432660, 0.172687337628862040, +0.172736586247573540, 0.172785834434443120, 0.172835082189348090, 0.172884329512165370, 0.172933576402772270, 0.172982822861044800, 0.173032068886860260, 0.173081314480095530, +0.173130559640627980, 0.173179804368333580, 0.173229048663089690, 0.173278292524773170, 0.173327535953261340, 0.173376778948430230, 0.173426021510157180, 0.173475263638319080, +0.173524505332793260, 0.173573746593455760, 0.173622987420183870, 0.173672227812854930, 0.173721467771345010, 0.173770707295531400, 0.173819946385291050, 0.173869185040501250, +0.173918423261038070, 0.173967661046778830, 0.174016898397600400, 0.174066135313380190, 0.174115371793994220, 0.174164607839319810, 0.174213843449233850, 0.174263078623613760, +0.174312313362335520, 0.174361547665276480, 0.174410781532313600, 0.174460014963324190, 0.174509247958184290, 0.174558480516771310, 0.174607712638962100, 0.174656944324634050, +0.174706175573663190, 0.174755406385926900, 0.174804636761302530, 0.174853866699666160, 0.174903096200895090, 0.174952325264866290, 0.175001553891457110, 0.175050782080543620, +0.175100009832003160, 0.175149237145712680, 0.175198464021549540, 0.175247690459389820, 0.175296916459110860, 0.175346142020589600, 0.175395367143703430, 0.175444591828328420, +0.175493816074341920, 0.175543039881620870, 0.175592263250042680, 0.175641486179483390, 0.175690708669820370, 0.175739930720931030, 0.175789152332691410, 0.175838373504978910, +0.175887594237670470, 0.175936814530643500, 0.175986034383774050, 0.176035253796939520, 0.176084472770016850, 0.176133691302883450, 0.176182909395415370, 0.176232127047490030, +0.176281344258984340, 0.176330561029775760, 0.176379777359740310, 0.176428993248755440, 0.176478208696698090, 0.176527423703445650, 0.176576638268874210, 0.176625852392861160, +0.176675066075283940, 0.176724279316018610, 0.176773492114942590, 0.176822704471932820, 0.176871916386866720, 0.176921127859620410, 0.176970338890071300, 0.177019549478096310, +0.177068759623572910, 0.177117969326377160, 0.177167178586386480, 0.177216387403477870, 0.177265595777528710, 0.177314803708415130, 0.177364011196014530, 0.177413218240203920, +0.177462424840860690, 0.177511630997860990, 0.177560836711082170, 0.177610041980401730, 0.177659246805695730, 0.177708451186841620, 0.177757655123716380, 0.177806858616197440, +0.177856061664160900, 0.177905264267484240, 0.177954466426044370, 0.178003668139718820, 0.178052869408383630, 0.178102070231916290, 0.178151270610193760, 0.178200470543093490, +0.178249670030491610, 0.178298869072265580, 0.178348067668292340, 0.178397265818449390, 0.178446463522612810, 0.178495660780660120, 0.178544857592468240, 0.178594053957914670, +0.178643249876875520, 0.178692445349228230, 0.178741640374850300, 0.178790834953617810, 0.178840029085408220, 0.178889222770098580, 0.178938416007566330, 0.178987608797687580, +0.179036801140339820, 0.179085993035400040, 0.179135184482745740, 0.179184375482253020, 0.179233566033799360, 0.179282756137261800, 0.179331945792517770, 0.179381134999443470, +0.179430323757916290, 0.179479512067813350, 0.179528699929012020, 0.179577887341388520, 0.179627074304820310, 0.179676260819184840, 0.179725446884358290, 0.179774632500218130, +0.179823817666641380, 0.179873002383505510, 0.179922186650686710, 0.179971370468062440, 0.180020553835509740, 0.180069736752906110, 0.180118919220127680, 0.180168101237051990, +0.180217282803556010, 0.180266463919517260, 0.180315644584811920, 0.180364824799317480, 0.180414004562910960, 0.180463183875469890, 0.180512362736870410, 0.180561541146990020, +0.180610719105706200, 0.180659896612895170, 0.180709073668434390, 0.180758250272200940, 0.180807426424072270, 0.180856602123924630, 0.180905777371635460, 0.180954952167081850, +0.181004126510141310, 0.181053300400690010, 0.181102473838605450, 0.181151646823764720, 0.181200819356045290, 0.181249991435323390, 0.181299163061476530, 0.181348334234381740, +0.181397504953916540, 0.181446675219957170, 0.181495845032381090, 0.181545014391065410, 0.181594183295887610, 0.181643351746723940, 0.181692519743451880, 0.181741687285948940, +0.181790854374091370, 0.181840021007756670, 0.181889187186821900, 0.181938352911164610, 0.181987518180661000, 0.182036682995188580, 0.182085847354624460, 0.182135011258846150, +0.182184174707729910, 0.182233337701153190, 0.182282500238993140, 0.182331662321127300, 0.182380823947431850, 0.182429985117784330, 0.182479145832061870, 0.182528306090141950, +0.182577465891900850, 0.182626625237216090, 0.182675784125965190, 0.182724942558024410, 0.182774100533271260, 0.182823258051582870, 0.182872415112836750, 0.182921571716909180, +0.182970727863677660, 0.183019883553019320, 0.183069038784811730, 0.183118193558931110, 0.183167347875254990, 0.183216501733660500, 0.183265655134025180, 0.183314808076225300, +0.183363960560138400, 0.183413112585641610, 0.183462264152612440, 0.183511415260927210, 0.183560565910463440, 0.183609716101098660, 0.183658865832709180, 0.183708015105172540, +0.183757163918365830, 0.183806312272166680, 0.183855460166451300, 0.183904607601097250, 0.183953754575981730, 0.184002901090982220, 0.184052047145975030, 0.184101192740837720, +0.184150337875447430, 0.184199482549681740, 0.184248626763416910, 0.184297770516530510, 0.184346913808899670, 0.184396056640401980, 0.184445199010913750, 0.184494340920312470, +0.184543482368475810, 0.184592623355280010, 0.184641763880602630, 0.184690903944320860, 0.184740043546312240, 0.184789182686453090, 0.184838321364621000, 0.184887459580693080, +0.184936597334546950, 0.184985734626058910, 0.185034871455106530, 0.185084007821566950, 0.185133143725317810, 0.185182279166235360, 0.185231414144197220, 0.185280548659080560, +0.185329682710762940, 0.185378816299120670, 0.185427949424031370, 0.185477082085372220, 0.185526214283020770, 0.185575346016853350, 0.185624477286747580, 0.185673608092581040, +0.185722738434230070, 0.185771868311572250, 0.185820997724484740, 0.185870126672845170, 0.185919255156529850, 0.185968383175416390, 0.186017510729382000, 0.186066637818304240, +0.186115764442059460, 0.186164890600525270, 0.186214016293578840, 0.186263141521097800, 0.186312266282958490, 0.186361390579038530, 0.186410514409215050, 0.186459637773365740, +0.186508760671366900, 0.186557883103096180, 0.186607005068431170, 0.186656126567248200, 0.186705247599424940, 0.186754368164838540, 0.186803488263366650, 0.186852607894885610, +0.186901727059273080, 0.186950845756406190, 0.186999963986162640, 0.187049081748418750, 0.187098199043052170, 0.187147315869940050, 0.187196432228960100, 0.187245548119988640, +0.187294663542903310, 0.187343778497581300, 0.187392892983900300, 0.187442007001736630, 0.187491120550967920, 0.187540233631471880, 0.187589346243124790, 0.187638458385804340, +0.187687570059387770, 0.187736681263752670, 0.187785791998775460, 0.187834902264333780, 0.187884012060304810, 0.187933121386566260, 0.187982230242994490, 0.188031338629467110, +0.188080446545861400, 0.188129553992055030, 0.188178660967924320, 0.188227767473346940, 0.188276873508200160, 0.188325979072361650, 0.188375084165707720, 0.188424188788116090, +0.188473292939464020, 0.188522396619629110, 0.188571499828487810, 0.188620602565917730, 0.188669704831796600, 0.188718806626000770, 0.188767907948407920, 0.188817008798895290, +0.188866109177340590, 0.188915209083620170, 0.188964308517611730, 0.189013407479192510, 0.189062505968240230, 0.189111603984631230, 0.189160701528243210, 0.189209798598953480, +0.189258895196639660, 0.189307991321178150, 0.189357086972446690, 0.189406182150322510, 0.189455276854683300, 0.189504371085405470, 0.189553464842366710, 0.189602558125444710, +0.189651650934515890, 0.189700743269457960, 0.189749835130148150, 0.189798926516464180, 0.189848017428282470, 0.189897107865480720, 0.189946197827936200, 0.189995287315526620, +0.190044376328128400, 0.190093464865619200, 0.190142552927876380, 0.190191640514777600, 0.190240727626199290, 0.190289814262019130, 0.190338900422114460, 0.190387986106362980, +0.190437071314641080, 0.190486156046826500, 0.190535240302796980, 0.190584324082428920, 0.190633407385600060, 0.190682490212187670, 0.190731572562069490, 0.190780654435121960, +0.190829735831222760, 0.190878816750249260, 0.190927897192079120, 0.190976977156588820, 0.191026056643656070, 0.191075135653158170, 0.191124214184972880, 0.191173292238976610, +0.191222369815047120, 0.191271446913061720, 0.191320523532898110, 0.191369599674432760, 0.191418675337543420, 0.191467750522107820, 0.191516825228002420, 0.191565899455104940, +0.191614973203292740, 0.191664046472443510, 0.191713119262433730, 0.191762191573141170, 0.191811263404443130, 0.191860334756217360, 0.191909405628340330, 0.191958476020689770, +0.192007545933143010, 0.192056615365577860, 0.192105684317870700, 0.192154752789899350, 0.192203820781541110, 0.192252888292673760, 0.192301955323173730, 0.192351021872918830, +0.192400087941786370, 0.192449153529654140, 0.192498218636398570, 0.192547283261897460, 0.192596347406028600, 0.192645411068668420, 0.192694474249694710, 0.192743536948984800, +0.192792599166416500, 0.192841660901866270, 0.192890722155211890, 0.192939782926330680, 0.192988843215100490, 0.193037903021397730, 0.193086962345100200, 0.193136021186085280, +0.193185079544230750, 0.193234137419413060, 0.193283194811510050, 0.193332251720399060, 0.193381308145957860, 0.193430364088062970, 0.193479419546592150, 0.193528474521423220, +0.193577529012432660, 0.193626583019498310, 0.193675636542497480, 0.193724689581307980, 0.193773742135806340, 0.193822794205870340, 0.193871845791377370, 0.193920896892205210, +0.193969947508230350, 0.194018997639330640, 0.194068047285383460, 0.194117096446266570, 0.194166145121856510, 0.194215193312031080, 0.194264241016667670, 0.194313288235644090, +0.194362334968836870, 0.194411381216123810, 0.194460426977382720, 0.194509472252490130, 0.194558517041323880, 0.194607561343761310, 0.194656605159680280, 0.194705648488957300, +0.194754691331470190, 0.194803733687096360, 0.194852775555713650, 0.194901816937198550, 0.194950857831428900, 0.194999898238282120, 0.195048938157636020, 0.195097977589367140, +0.195147016533353340, 0.195196054989471960, 0.195245092957600900, 0.195294130437616680, 0.195343167429397110, 0.195392203932819640, 0.195441239947762080, 0.195490275474101000, +0.195539310511714220, 0.195588345060479620, 0.195637379120273710, 0.195686412690974340, 0.195735445772458940, 0.195784478364605390, 0.195833510467290170, 0.195882542080391190, +0.195931573203785870, 0.195980603837352020, 0.196029633980966260, 0.196078663634506410, 0.196127692797849890, 0.196176721470874560, 0.196225749653457020, 0.196274777345475080, +0.196323804546806200, 0.196372831257328270, 0.196421857476917790, 0.196470883205452700, 0.196519908442810810, 0.196568933188868730, 0.196617957443504300, 0.196666981206595010, +0.196716004478018680, 0.196765027257651910, 0.196814049545372540, 0.196863071341058100, 0.196912092644586370, 0.196961113455834000, 0.197010133774678850, 0.197059153600998350, +0.197108172934670390, 0.197157191775571590, 0.197206210123579810, 0.197255227978572510, 0.197304245340427540, 0.197353262209021550, 0.197402278584232400, 0.197451294465937980, +0.197500309854014900, 0.197549324748341030, 0.197598339148793850, 0.197647353055251270, 0.197696366467589870, 0.197745379385687560, 0.197794391809421790, 0.197843403738670490, +0.197892415173310220, 0.197941426113218940, 0.197990436558274090, 0.198039446508353560, 0.198088455963333990, 0.198137464923093280, 0.198186473387508920, 0.198235481356458800, +0.198284488829819560, 0.198333495807469060, 0.198382502289285310, 0.198431508275144830, 0.198480513764925590, 0.198529518758505050, 0.198578523255761170, 0.198627527256570540, +0.198676530760811100, 0.198725533768360300, 0.198774536279096140, 0.198823538292895170, 0.198872539809635400, 0.198921540829194250, 0.198970541351449680, 0.199019541376278340, +0.199068540903558130, 0.199117539933166580, 0.199166538464981590, 0.199215536498879850, 0.199264534034739260, 0.199313531072437320, 0.199362527611852000, 0.199411523652859940, +0.199460519195339050, 0.199509514239167300, 0.199558508784221320, 0.199607502830379090, 0.199656496377518090, 0.199705489425516300, 0.199754481974250330, 0.199803474023598160, +0.199852465573437300, 0.199901456623645720, 0.199950447174100070, 0.199999437224678310, 0.200048426775257940, 0.200097415825716940, 0.200146404375931980, 0.200195392425780990, +0.200244379975141520, 0.200293367023891560, 0.200342353571907720, 0.200391339619067990, 0.200440325165250370, 0.200489310210331480, 0.200538294754189330, 0.200587278796701430, +0.200636262337745790, 0.200685245377199060, 0.200734227914939200, 0.200783209950843780, 0.200832191484790760, 0.200881172516656830, 0.200930153046319980, 0.200979133073657720, +0.201028112598548080, 0.201077091620867730, 0.201126070140494630, 0.201175048157306390, 0.201224025671180940, 0.201273002681994990, 0.201321979189626550, 0.201370955193953590, +0.201419930694852780, 0.201468905692202190, 0.201517880185879290, 0.201566854175762170, 0.201615827661727450, 0.201664800643653160, 0.201713773121416890, 0.201762745094896580, +0.201811716563969010, 0.201860687528512130, 0.201909657988403550, 0.201958627943521260, 0.202007597393741970, 0.202056566338943640, 0.202105534779003950, 0.202154502713800840, +0.202203470143211020, 0.202252437067112540, 0.202301403485382970, 0.202350369397900330, 0.202399334804541310, 0.202448299705183970, 0.202497264099706310, 0.202546227987985050, +0.202595191369898230, 0.202644154245323420, 0.202693116614138690, 0.202742078476220690, 0.202791039831447530, 0.202840000679696760, 0.202888961020846410, 0.202937920854773250, +0.202986880181355270, 0.203035839000470090, 0.203084797311995750, 0.203133755115808970, 0.203182712411787810, 0.203231669199809870, 0.203280625479753200, 0.203329581251494530, +0.203378536514911890, 0.203427491269883350, 0.203476445516285660, 0.203525399253996850, 0.203574352482894540, 0.203623305202856790, 0.203672257413760330, 0.203721209115483220, +0.203770160307903100, 0.203819110990898030, 0.203868061164344720, 0.203917010828121280, 0.203965959982105290, 0.204014908626174860, 0.204063856760206720, 0.204112804384078920, +0.204161751497669130, 0.204210698100855380, 0.204259644193514440, 0.204308589775524410, 0.204357534846763330, 0.204406479407107990, 0.204455423456436440, 0.204504366994626350, +0.204553310021555750, 0.204602252537101460, 0.204651194541141530, 0.204700136033553610, 0.204749077014215800, 0.204798017483004860, 0.204846957439798860, 0.204895896884475490, +0.204944835816912780, 0.204993774236987590, 0.205042712144577920, 0.205091649539561490, 0.205140586421816370, 0.205189522791219350, 0.205238458647648530, 0.205287393990982000, +0.205336328821096540, 0.205385263137870260, 0.205434196941180810, 0.205483130230906310, 0.205532063006923560, 0.205580995269110640, 0.205629927017345250, 0.205678858251505480, +0.205727788971468100, 0.205776719177111270, 0.205825648868312620, 0.205874578044950300, 0.205923506706901100, 0.205972434854043150, 0.206021362486254080, 0.206070289603412060, +0.206119216205393860, 0.206168142292077640, 0.206217067863341070, 0.206265992919062250, 0.206314917459118010, 0.206363841483386490, 0.206412764991745800, 0.206461687984072740, +0.206510610460245490, 0.206559532420141690, 0.206608453863639520, 0.206657374790615770, 0.206706295200948580, 0.206755215094515640, 0.206804134471195110, 0.206853053330863820, +0.206901971673399880, 0.206950889498681010, 0.206999806806585360, 0.207048723596989750, 0.207097639869772340, 0.207146555624810820, 0.207195470861983370, 0.207244385581166780, +0.207293299782239230, 0.207342213465078890, 0.207391126629562550, 0.207440039275568420, 0.207488951402974160, 0.207537863011658000, 0.207586774101496700, 0.207635684672368510, +0.207684594724151070, 0.207733504256722600, 0.207782413269959910, 0.207831321763741220, 0.207880229737944210, 0.207929137192447070, 0.207978044127126640, 0.208026950541861100, +0.208075856436528210, 0.208124761811006090, 0.208173666665171620, 0.208222570998903010, 0.208271474812078390, 0.208320378104574650, 0.208369280876269960, 0.208418183127042080, +0.208467084856769180, 0.208515986065328120, 0.208564886752597100, 0.208613786918453860, 0.208662686562776590, 0.208711585685442180, 0.208760484286328790, 0.208809382365314180, +0.208858279922276570, 0.208907176957092820, 0.208956073469641120, 0.209004969459799270, 0.209053864927445400, 0.209102759872456440, 0.209151654294710580, 0.209200548194085570, +0.209249441570459630, 0.209298334423709650, 0.209347226753713870, 0.209396118560350420, 0.209445009843496260, 0.209493900603029550, 0.209542790838828100, 0.209591680550770130, +0.209640569738732490, 0.209689458402593450, 0.209738346542230750, 0.209787234157522620, 0.209836121248345970, 0.209885007814579030, 0.209933893856099560, 0.209982779372785780, +0.210031664364514650, 0.210080548831164340, 0.210129432772612650, 0.210178316188737810, 0.210227199079416750, 0.210276081444527700, 0.210324963283948900, 0.210373844597557230, +0.210422725385230940, 0.210471605646847860, 0.210520485382286180, 0.210569364591422860, 0.210618243274136140, 0.210667121430303810, 0.210715999059804090, 0.210764876162513960, +0.210813752738311630, 0.210862628787074930, 0.210911504308682080, 0.210960379303010040, 0.211009253769937040, 0.211058127709340900, 0.211107001121099900, 0.211155874005090950, +0.211204746361192320, 0.211253618189282260, 0.211302489489237720, 0.211351360260936950, 0.211400230504257800, 0.211449100219078480, 0.211497969405275990, 0.211546838062728560, +0.211595706191314040, 0.211644573790910700, 0.211693440861395490, 0.211742307402646680, 0.211791173414542090, 0.211840038896960010, 0.211888903849777400, 0.211937768272872530, +0.211986632166123230, 0.212035495529407810, 0.212084358362603200, 0.212133220665587680, 0.212182082438239550, 0.212230943680435800, 0.212279804392054660, 0.212328664572974030, +0.212377524223072180, 0.212426383342226080, 0.212475241930314000, 0.212524099987213830, 0.212572957512803830, 0.212621814506961020, 0.212670670969563690, 0.212719526900489650, +0.212768382299617250, 0.212817237166823440, 0.212866091501986540, 0.212914945304984420, 0.212963798575695390, 0.213012651313996410, 0.213061503519765800, 0.213110355192881430, +0.213159206333221610, 0.213208056940663330, 0.213256907015084930, 0.213305756556364660, 0.213354605564379600, 0.213403454039008010, 0.213452301980127800, 0.213501149387617250, +0.213549996261353400, 0.213598842601214560, 0.213647688407078620, 0.213696533678823880, 0.213745378416327380, 0.213794222619467430, 0.213843066288121940, 0.213891909422169210, +0.213940752021486270, 0.213989594085951450, 0.214038435615442640, 0.214087276609838170, 0.214136117069015090, 0.214184956992851700, 0.214233796381226360, 0.214282635234016080, +0.214331473551099240, 0.214380311332353720, 0.214429148577657820, 0.214477985286888630, 0.214526821459924490, 0.214575657096643310, 0.214624492196923390, 0.214673326760641820, +0.214722160787676920, 0.214770994277906630, 0.214819827231209290, 0.214868659647461930, 0.214917491526542940, 0.214966322868330230, 0.215015153672702130, 0.215063983939535710, +0.215112813668709320, 0.215161642860101370, 0.215210471513588820, 0.215259299629050130, 0.215308127206363190, 0.215356954245406380, 0.215405780746056740, 0.215454606708192640, +0.215503432131692010, 0.215552257016433240, 0.215601081362293420, 0.215649905169150860, 0.215698728436883560, 0.215747551165369870, 0.215796373354486870, 0.215845195004112920, +0.215894016114126010, 0.215942836684404480, 0.215991656714825430, 0.216040476205267230, 0.216089295155607850, 0.216138113565725650, 0.216186931435497750, 0.216235748764802500, +0.216284565553518330, 0.216333381801522310, 0.216382197508692810, 0.216431012674907860, 0.216479827300045780, 0.216528641383983700, 0.216577454926600050, 0.216626267927772730, +0.216675080387380180, 0.216723892305299480, 0.216772703681409080, 0.216821514515586900, 0.216870324807711370, 0.216919134557659630, 0.216967943765310010, 0.217016752430540550, +0.217065560553229620, 0.217114368133254380, 0.217163175170493220, 0.217211981664824550, 0.217260787616125490, 0.217309593024274470, 0.217358397889149430, 0.217407202210628870, +0.217456005988589860, 0.217504809222910820, 0.217553611913469780, 0.217602414060145130, 0.217651215662814030, 0.217700016721354860, 0.217748817235645680, 0.217797617205564870, +0.217846416630989580, 0.217895215511798270, 0.217944013847868910, 0.217992811639079940, 0.218041608885308520, 0.218090405586433080, 0.218139201742332060, 0.218187997352882580, +0.218236792417963120, 0.218285586937451700, 0.218334380911226730, 0.218383174339165380, 0.218431967221146080, 0.218480759557046850, 0.218529551346746180, 0.218578342590121180, +0.218627133287050360, 0.218675923437411680, 0.218724713041083620, 0.218773502097943360, 0.218822290607869310, 0.218871078570739560, 0.218919865986432570, 0.218968652854825450, +0.219017439175796720, 0.219066224949224790, 0.219115010174986890, 0.219163794852961470, 0.219212578983026540, 0.219261362565060620, 0.219310145598940850, 0.219358928084545710, +0.219407710021753270, 0.219456491410441960, 0.219505272250489020, 0.219554052541772880, 0.219602832284171600, 0.219651611477563680, 0.219700390121826320, 0.219749168216837960, +0.219797945762476690, 0.219846722758620970, 0.219895499205148030, 0.219944275101936340, 0.219993050448863970, 0.220041825245809400, 0.220090599492649810, 0.220139373189263740, +0.220188146335529690, 0.220236918931324830, 0.220285690976527640, 0.220334462471016260, 0.220383233414669140, 0.220432003807363520, 0.220480773648977890, 0.220529542939390310, +0.220578311678479300, 0.220627079866122090, 0.220675847502197180, 0.220724614586582660, 0.220773381119157040, 0.220822147099797500, 0.220870912528382620, 0.220919677404790460, +0.220968441728899540, 0.221017205500587070, 0.221065968719731580, 0.221114731386211630, 0.221163493499904410, 0.221212255060688450, 0.221261016068441840, 0.221309776523043120, +0.221358536424369560, 0.221407295772299640, 0.221456054566711470, 0.221504812807483600, 0.221553570494493280, 0.221602327627619030, 0.221651084206738960, 0.221699840231731620, +0.221748595702474210, 0.221797350618845340, 0.221846104980723100, 0.221894858787986010, 0.221943612040511360, 0.221992364738177680, 0.222041116880863500, 0.222089868468446110, +0.222138619500804050, 0.222187369977815440, 0.222236119899358820, 0.222284869265311490, 0.222333618075551990, 0.222382366329958420, 0.222431114028409400, 0.222479861170782140, +0.222528607756955240, 0.222577353786806790, 0.222626099260215430, 0.222674844177058350, 0.222723588537214190, 0.222772332340561040, 0.222821075586977500, 0.222869818276340840, +0.222918560408529640, 0.222967301983422040, 0.223016043000896610, 0.223064783460830640, 0.223113523363102690, 0.223162262707591400, 0.223211001494174000, 0.223259739722729110, +0.223308477393134860, 0.223357214505269850, 0.223405951059011370, 0.223454687054238020, 0.223503422490827970, 0.223552157368659770, 0.223600891687610740, 0.223649625447559510, +0.223698358648384190, 0.223747091289963400, 0.223795823372174460, 0.223844554894895960, 0.223893285858006080, 0.223942016261383440, 0.223990746104905300, 0.224039475388450290, +0.224088204111897030, 0.224136932275122820, 0.224185659878006290, 0.224234386920425600, 0.224283113402259400, 0.224331839323384960, 0.224380564683680920, 0.224429289483025480, +0.224478013721297250, 0.224526737398373560, 0.224575460514133020, 0.224624183068453830, 0.224672905061214600, 0.224721626492292690, 0.224770347361566700, 0.224819067668914850, +0.224867787414215760, 0.224916506597346770, 0.224965225218186540, 0.225013943276613640, 0.225062660772505470, 0.225111377705740660, 0.225160094076197390, 0.225208809883754300, +0.225257525128288780, 0.225306239809679430, 0.225354953927804500, 0.225403667482542590, 0.225452380473771110, 0.225501092901368660, 0.225549804765213470, 0.225598516065184220, +0.225647226801158260, 0.225695936973014210, 0.225744646580630310, 0.225793355623885250, 0.225842064102656340, 0.225890772016822280, 0.225939479366261300, 0.225988186150852060, +0.226036892370471890, 0.226085598024999530, 0.226134303114313600, 0.226183007638291470, 0.226231711596811800, 0.226280414989752880, 0.226329117816993330, 0.226377820078410590, +0.226426521773883280, 0.226475222903289640, 0.226523923466508400, 0.226572623463416940, 0.226621322893893890, 0.226670021757817560, 0.226718720055066570, 0.226767417785518370, +0.226816114949051630, 0.226864811545544610, 0.226913507574875970, 0.226962203036923130, 0.227010897931564810, 0.227059592258679670, 0.227108286018145090, 0.227156979209839820, +0.227205671833642100, 0.227254363889430630, 0.227303055377082790, 0.227351746296477340, 0.227400436647492520, 0.227449126430007060, 0.227497815643898320, 0.227546504289045050, +0.227595192365325520, 0.227643879872618470, 0.227692566810801240, 0.227741253179752630, 0.227789938979350880, 0.227838624209474700, 0.227887308870001550, 0.227935992960810100, +0.227984676481779110, 0.228033359432786020, 0.228082041813709500, 0.228130723624427880, 0.228179404864819910, 0.228228085534762980, 0.228276765634135820, 0.228325445162816780, +0.228374124120684530, 0.228422802507616540, 0.228471480323491540, 0.228520157568187860, 0.228568834241584200, 0.228617510343558040, 0.228666185873988100, 0.228714860832752690, +0.228763535219730560, 0.228812209034799150, 0.228860882277837240, 0.228909554948723530, 0.228958227047335510, 0.229006898573551940, 0.229055569527251120, 0.229104239908311800, +0.229152909716611420, 0.229201578952028810, 0.229250247614442240, 0.229298915703730480, 0.229347583219771000, 0.229396250162442560, 0.229444916531623490, 0.229493582327192550, +0.229542247549027250, 0.229590912197006340, 0.229639576271008120, 0.229688239770911410, 0.229736902696593640, 0.229785565047933630, 0.229834226824809720, 0.229882888027100660, +0.229931548654683960, 0.229980208707438380, 0.230028868185242710, 0.230077527087974440, 0.230126185415512360, 0.230174843167734790, 0.230223500344520580, 0.230272156945747150, +0.230320812971293360, 0.230369468421037530, 0.230418123294858450, 0.230466777592633650, 0.230515431314241880, 0.230564084459561560, 0.230612737028471430, 0.230661389020849040, +0.230710040436573170, 0.230758691275522200, 0.230807341537574960, 0.230855991222608910, 0.230904640330502900, 0.230953288861135700, 0.231001936814384860, 0.231050584190129170, +0.231099230988247030, 0.231147877208617240, 0.231196522851117300, 0.231245167915626080, 0.231293812402021960, 0.231342456310183710, 0.231391099639988880, 0.231439742391316320, +0.231488384564044410, 0.231537026158051940, 0.231585667173216490, 0.231634307609416890, 0.231682947466531510, 0.231731586744439190, 0.231780225443017460, 0.231828863562145190, +0.231877501101701190, 0.231926138061562980, 0.231974774441609440, 0.232023410241718960, 0.232072045461770400, 0.232120680101641270, 0.232169314161210480, 0.232217947640356360, +0.232266580538957820, 0.232315212856892410, 0.232363844594038970, 0.232412475750275900, 0.232461106325482090, 0.232509736319535060, 0.232558365732313700, 0.232606994563696430, +0.232655622813562110, 0.232704250481788280, 0.232752877568253860, 0.232801504072837200, 0.232850129995417240, 0.232898755335871540, 0.232947380094078920, 0.232996004269918290, +0.233044627863267210, 0.233093250874004590, 0.233141873302008810, 0.233190495147158810, 0.233239116409332120, 0.233287737088407640, 0.233336357184263820, 0.233384976696779540, +0.233433595625832380, 0.233482213971301230, 0.233530831733064550, 0.233579448911001240, 0.233628065504988850, 0.233676681514906310, 0.233725296940632040, 0.233773911782044990, +0.233822526039022730, 0.233871139711444130, 0.233919752799188140, 0.233968365302132330, 0.234016977220155600, 0.234065588553136420, 0.234114199300953730, 0.234162809463485080, +0.234211419040609410, 0.234260028032205190, 0.234308636438151360, 0.234357244258325490, 0.234405851492606510, 0.234454458140872870, 0.234503064203003570, 0.234551669678876140, +0.234600274568369540, 0.234648878871362270, 0.234697482587733240, 0.234746085717360050, 0.234794688260121650, 0.234843290215896980, 0.234891891584563640, 0.234940492366000560, +0.234989092560086270, 0.235037692166699670, 0.235086291185718390, 0.235134889617021420, 0.235183487460487200, 0.235232084715994690, 0.235280681383421560, 0.235329277462646700, +0.235377872953548670, 0.235426467856006380, 0.235475062169897470, 0.235523655895100940, 0.235572249031495230, 0.235620841578959350, 0.235669433537370940, 0.235718024906608950, +0.235766615686552330, 0.235815205877078720, 0.235863795478067100, 0.235912384489396000, 0.235960972910944370, 0.236009560742589890, 0.236058147984211490, 0.236106734635687710, +0.236155320696897540, 0.236203906167718640, 0.236252491048029980, 0.236301075337710080, 0.236349659036637900, 0.236398242144691180, 0.236446824661748850, 0.236495406587689440, +0.236543987922391950, 0.236592568665734080, 0.236641148817594770, 0.236689728377852600, 0.236738307346386510, 0.236786885723074240, 0.236835463507794770, 0.236884040700427070, +0.236932617300848800, 0.236981193308939020, 0.237029768724576260, 0.237078343547639490, 0.237126917778006460, 0.237175491415556110, 0.237224064460167030, 0.237272636911718240, +0.237321208770087390, 0.237369780035153550, 0.237418350706795260, 0.237466920784891510, 0.237515490269320030, 0.237564059159959850, 0.237612627456689480, 0.237661195159387990, +0.237709762267933080, 0.237758328782203790, 0.237806894702079080, 0.237855460027436710, 0.237904024758155700, 0.237952588894114610, 0.238001152435192490, 0.238049715381267040, +0.238098277732217340, 0.238146839487921920, 0.238195400648259840, 0.238243961213108810, 0.238292521182347890, 0.238341080555855680, 0.238389639333511180, 0.238438197515192160, +0.238486755100777630, 0.238535312090146220, 0.238583868483176980, 0.238632424279747620, 0.238680979479737210, 0.238729534083024770, 0.238778088089488080, 0.238826641499006150, +0.238875194311457650, 0.238923746526721550, 0.238972298144675690, 0.239020849165199060, 0.239069399588170330, 0.239117949413468510, 0.239166498640971390, 0.239215047270558030, +0.239263595302107060, 0.239312142735497530, 0.239360689570607190, 0.239409235807315160, 0.239457781445500010, 0.239506326485040860, 0.239554870925815460, 0.239603414767702860, +0.239651958010581730, 0.239700500654331160, 0.239749042698828880, 0.239797584143954020, 0.239846124989585600, 0.239894665235601460, 0.239943204881880650, 0.239991743928301830, +0.240040282374744090, 0.240088820221085190, 0.240137357467204240, 0.240185894112979910, 0.240234430158291300, 0.240282965603016150, 0.240331500447033580, 0.240380034690222290, +0.240428568332461320, 0.240477101373628520, 0.240525633813602950, 0.240574165652263310, 0.240622696889488650, 0.240671227525156850, 0.240719757559146990, 0.240768286991338150, +0.240816815821608160, 0.240865344049836120, 0.240913871675900730, 0.240962398699681110, 0.241010925121055040, 0.241059450939901660, 0.241107976156099660, 0.241156500769528160, +0.241205024780064950, 0.241253548187589210, 0.241302070991979560, 0.241350593193115190, 0.241399114790873920, 0.241447635785134840, 0.241496156175776660, 0.241544675962678560, +0.241593195145718310, 0.241641713724775080, 0.241690231699728000, 0.241738749070454890, 0.241787265836834940, 0.241835781998746810, 0.241884297556069630, 0.241932812508681320, +0.241981326856460950, 0.242029840599287280, 0.242078353737039430, 0.242126866269595260, 0.242175378196833930, 0.242223889518634160, 0.242272400234875090, 0.242320910345434600, +0.242369419850191840, 0.242417928749025490, 0.242466437041814780, 0.242514944728437540, 0.242563451808772950, 0.242611958282700160, 0.242660464150097010, 0.242708969410842750, +0.242757474064816040, 0.242805978111896080, 0.242854481551960740, 0.242902984384889190, 0.242951486610560180, 0.242999988228852880, 0.243048489239645200, 0.243096989642816290, +0.243145489438244910, 0.243193988625810240, 0.243242487205390160, 0.243290985176863840, 0.243339482540110090, 0.243387979295008050, 0.243436475441435620, 0.243484970979272020, +0.243533465908396000, 0.243581960228686720, 0.243630453940022110, 0.243678947042281380, 0.243727439535343730, 0.243775931419087020, 0.243824422693390500, 0.243872913358132910, +0.243921403413193490, 0.243969892858450110, 0.244018381693781980, 0.244066869919067920, 0.244115357534187120, 0.244163844539017490, 0.244212330933438250, 0.244260816717328190, +0.244309301890566520, 0.244357786453031130, 0.244406270404601310, 0.244454753745155800, 0.244503236474573840, 0.244551718592733360, 0.244600200099513580, 0.244648680994793750, +0.244697161278451760, 0.244745640950366880, 0.244794120010417890, 0.244842598458484020, 0.244891076294443260, 0.244939553518174790, 0.244988030129557420, 0.245036506128470420, +0.245084981514791720, 0.245133456288400580, 0.245181930449175800, 0.245230403996996610, 0.245278876931740970, 0.245327349253288170, 0.245375820961516970, 0.245424292056306640, +0.245472762537535170, 0.245521232405081810, 0.245569701658825770, 0.245618170298645050, 0.245666638324418900, 0.245715105736026170, 0.245763572533346100, 0.245812038716256680, +0.245860504284637150, 0.245908969238366360, 0.245957433577323580, 0.246005897301386780, 0.246054360410435240, 0.246102822904347790, 0.246151284783003740, 0.246199746046281030, +0.246248206694058950, 0.246296666726216360, 0.246345126142632540, 0.246393584943185470, 0.246442043127754420, 0.246490500696218280, 0.246538957648456320, 0.246587413984346530, +0.246635869703768220, 0.246684324806600630, 0.246732779292721830, 0.246781233162011090, 0.246829686414347240, 0.246878139049609620, 0.246926591067676200, 0.246975042468426330, +0.247023493251738830, 0.247071943417493060, 0.247120392965566980, 0.247168841895839900, 0.247217290208190750, 0.247265737902498780, 0.247314184978642050, 0.247362631436499860, +0.247411077275951070, 0.247459522496875060, 0.247507967099149770, 0.247556411082654580, 0.247604854447268790, 0.247653297192870440, 0.247701739319338840, 0.247750180826552900, +0.247798621714391900, 0.247847061982733960, 0.247895501631458350, 0.247943940660444010, 0.247992379069570220, 0.248040816858715040, 0.248089254027757860, 0.248137690576577500, +0.248186126505053370, 0.248234561813063500, 0.248282996500487210, 0.248331430567203440, 0.248379864013091510, 0.248428296838029500, 0.248476729041896740, 0.248525160624572610, +0.248573591585935120, 0.248622021925863660, 0.248670451644237150, 0.248718880740934960, 0.248767309215835090, 0.248815737068816990, 0.248864164299759520, 0.248912590908542090, +0.248961016895042740, 0.249009442259140850, 0.249057867000715360, 0.249106291119645630, 0.249154714615809740, 0.249203137489087070, 0.249251559739356560, 0.249299981366497560, +0.249348402370388190, 0.249396822750907830, 0.249445242507935820, 0.249493661641350280, 0.249542080151030580, 0.249590498036855680, 0.249638915298704990, 0.249687331936456560, +0.249735747949989790, 0.249784163339183680, 0.249832578103917570, 0.249880992244069590, 0.249929405759519140, 0.249977818650145150, 0.250026230915827040, 0.250074642556442960, +0.250123053571872260, 0.250171463961993910, 0.250219873726687360, 0.250268282865830690, 0.250316691379303290, 0.250365099266984190, 0.250413506528752720, 0.250461913164487130, +0.250510319174066690, 0.250558724557370880, 0.250607129314277870, 0.250655533444667070, 0.250703936948417360, 0.250752339825408290, 0.250800742075517890, 0.250849143698625650, +0.250897544694610560, 0.250945945063352050, 0.250994344804728260, 0.251042743918618580, 0.251091142404902050, 0.251139540263458080, 0.251187937494164850, 0.251236334096901770, +0.251284730071547830, 0.251333125417982530, 0.251381520136084000, 0.251429914225731630, 0.251478307686804900, 0.251526700519182020, 0.251575092722742370, 0.251623484297364970, +0.251671875242929280, 0.251720265559313480, 0.251768655246397020, 0.251817044304058930, 0.251865432732178710, 0.251913820530634380, 0.251962207699305550, 0.252010594238071210, +0.252058980146810770, 0.252107365425402520, 0.252155750073725820, 0.252204134091659700, 0.252252517479083730, 0.252300900235876040, 0.252349282361916060, 0.252397663857083340, +0.252446044721256040, 0.252494424954313570, 0.252542804556135090, 0.252591183526599980, 0.252639561865586500, 0.252687939572974140, 0.252736316648641930, 0.252784693092469370, +0.252833068904334600, 0.252881444084117170, 0.252929818631696170, 0.252978192546951030, 0.253026565829759960, 0.253074938480002510, 0.253123310497557650, 0.253171681882304990, +0.253220052634122730, 0.253268422752890300, 0.253316792238486800, 0.253365161090791770, 0.253413529309683420, 0.253461896895041230, 0.253510263846744690, 0.253558630164672120, +0.253606995848702940, 0.253655360898716260, 0.253703725314591680, 0.253752089096207280, 0.253800452243442720, 0.253848814756176990, 0.253897176634289620, 0.253945537877658940, +0.253993898486164380, 0.254042258459685090, 0.254090617798100600, 0.254138976501289080, 0.254187334569130170, 0.254235692001502920, 0.254284048798286870, 0.254332404959360210, +0.254380760484602620, 0.254429115373893510, 0.254477469627111210, 0.254525823244135200, 0.254574176224844630, 0.254622528569119100, 0.254670880276836760, 0.254719231347877270, +0.254767581782119670, 0.254815931579443600, 0.254864280739727220, 0.254912629262850130, 0.254960977148691480, 0.255009324397130810, 0.255057671008046440, 0.255106016981317850, +0.255154362316824260, 0.255202707014445140, 0.255251051074058820, 0.255299394495544950, 0.255347737278782960, 0.255396079423651220, 0.255444420930029280, 0.255492761797796230, +0.255541102026831780, 0.255589441617014130, 0.255637780568222840, 0.255686118880337150, 0.255734456553236570, 0.255782793586799400, 0.255831129980905290, 0.255879465735433300, +0.255927800850263120, 0.255976135325272970, 0.256024469160342550, 0.256072802355350900, 0.256121134910177680, 0.256169466824701210, 0.256217798098801020, 0.256266128732356820, +0.256314458725246890, 0.256362788077350750, 0.256411116788547670, 0.256459444858717240, 0.256507772287737750, 0.256556099075488820, 0.256604425221849670, 0.256652750726699850, +0.256701075589917780, 0.256749399811382950, 0.256797723390974670, 0.256846046328572500, 0.256894368624054790, 0.256942690277301160, 0.256991011288190800, 0.257039331656603360, +0.257087651382417130, 0.257135970465511790, 0.257184288905766500, 0.257232606703060920, 0.257280923857273410, 0.257329240368283580, 0.257377556235971080, 0.257425871460214280, +0.257474186040892780, 0.257522499977885840, 0.257570813271073060, 0.257619125920332810, 0.257667437925544750, 0.257715749286588140, 0.257764060003342510, 0.257812370075686360, +0.257860679503499280, 0.257908988286660480, 0.257957296425049610, 0.258005603918545100, 0.258053910767026610, 0.258102216970373330, 0.258150522528464930, 0.258198827441179780, +0.258247131708397530, 0.258295435329997940, 0.258343738305859330, 0.258392040635861350, 0.258440342319883280, 0.258488643357804750, 0.258536943749504200, 0.258585243494861340, +0.258633542593755320, 0.258681841046065900, 0.258730138851671400, 0.258778436010451580, 0.258826732522285720, 0.258875028387053400, 0.258923323604633100, 0.258971618174904490, +0.259019912097746830, 0.259068205373039820, 0.259116498000661890, 0.259164789980492690, 0.259213081312411940, 0.259261371996298060, 0.259309662032030760, 0.259357951419489310, +0.259406240158553400, 0.259454528249101420, 0.259502815691013190, 0.259551102484167910, 0.259599388628445280, 0.259647674123723750, 0.259695958969883010, 0.259744243166802390, +0.259792526714361650, 0.259840809612439110, 0.259889091860914520, 0.259937373459667280, 0.259985654408576960, 0.260033934707522120, 0.260082214356382400, 0.260130493355037180, +0.260178771703366170, 0.260227049401247750, 0.260275326448561770, 0.260323602845187850, 0.260371878591004520, 0.260420153685891500, 0.260468428129728090, 0.260516701922394010, +0.260564975063767800, 0.260613247553729110, 0.260661519392157310, 0.260709790578932120, 0.260758061113932070, 0.260806330997036820, 0.260854600228125790, 0.260902868807078640, +0.260951136733773960, 0.260999404008091350, 0.261047670629910300, 0.261095936599110460, 0.261144201915570360, 0.261192466579169780, 0.261240730589788420, 0.261288993947304870, +0.261337256651598790, 0.261385518702549560, 0.261433780100036980, 0.261482040843939500, 0.261530300934136930, 0.261578560370508640, 0.261626819152934340, 0.261675077281292580, +0.261723334755463110, 0.261771591575325310, 0.261819847740758950, 0.261868103251642560, 0.261916358107855910, 0.261964612309278370, 0.262012865855789700, 0.262061118747268450, +0.262109370983594440, 0.262157622564647420, 0.262205873490305890, 0.262254123760449650, 0.262302373374958150, 0.262350622333711150, 0.262398870636587120, 0.262447118283465950, +0.262495365274226950, 0.262543611608750000, 0.262591857286913590, 0.262640102308597520, 0.262688346673681180, 0.262736590382044440, 0.262784833433565790, 0.262833075828125040, +0.262881317565601620, 0.262929558645875310, 0.262977799068824680, 0.263026038834329570, 0.263074277942269790, 0.263122516392523880, 0.263170754184971660, 0.263218991319492560, +0.263267227795966450, 0.263315463614271830, 0.263363698774288500, 0.263411933275895960, 0.263460167118974020, 0.263508400303401220, 0.263556632829057450, 0.263604864695822060, +0.263653095903574940, 0.263701326452194680, 0.263749556341561050, 0.263797785571553590, 0.263846014142052050, 0.263894242052935100, 0.263942469304082490, 0.263990695895373770, +0.264038921826688700, 0.264087147097905870, 0.264135371708905220, 0.264183595659566510, 0.264231818949768440, 0.264280041579390780, 0.264328263548313070, 0.264376484856415070, +0.264424705503575500, 0.264472925489674100, 0.264521144814590440, 0.264569363478204310, 0.264617581480394330, 0.264665798821040410, 0.264714015500021990, 0.264762231517219000, +0.264810446872509990, 0.264858661565774810, 0.264906875596893020, 0.264955088965744490, 0.265003301672207760, 0.265051513716162810, 0.265099725097489470, 0.265147935816066440, +0.265196145871773540, 0.265244355264490250, 0.265292563994096510, 0.265340772060470960, 0.265388979463493490, 0.265437186203043520, 0.265485392279001030, 0.265533597691244680, +0.265581802439654290, 0.265630006524109400, 0.265678209944489930, 0.265726412700674490, 0.265774614792543050, 0.265822816219975060, 0.265871016982850430, 0.265919217081047880, +0.265967416514447220, 0.266015615282928500, 0.266063813386370310, 0.266112010824652580, 0.266160207597654800, 0.266208403705256950, 0.266256599147337680, 0.266304793923776870, +0.266352988034454120, 0.266401181479249290, 0.266449374258041110, 0.266497566370709480, 0.266545757817133910, 0.266593948597194430, 0.266642138710769640, 0.266690328157739460, +0.266738516937983510, 0.266786705051381630, 0.266834892497812610, 0.266883079277156320, 0.266931265389292400, 0.266979450834100680, 0.267027635611459920, 0.267075819721250110, +0.267124003163351110, 0.267172185937641750, 0.267220368044001840, 0.267268549482311100, 0.267316730252449340, 0.267364910354295380, 0.267413089787729100, 0.267461268552630140, +0.267509446648878440, 0.267557624076352640, 0.267605800834932790, 0.267653976924498490, 0.267702152344929610, 0.267750327096104970, 0.267798501177904490, 0.267846674590207780, +0.267894847332894810, 0.267943019405844250, 0.267991190808936190, 0.268039361542050550, 0.268087531605066100, 0.268135700997862820, 0.268183869720320270, 0.268232037772318470, +0.268280205153736180, 0.268328371864453350, 0.268376537904349620, 0.268424703273304920, 0.268472867971198070, 0.268521031997909050, 0.268569195353317470, 0.268617358037303300, +0.268665520049745310, 0.268713681390523540, 0.268761842059517530, 0.268810002056607380, 0.268858161381671790, 0.268906320034590750, 0.268954478015244410, 0.269002635323511430, +0.269050791959271840, 0.269098947922405240, 0.269147103212791730, 0.269195257830310060, 0.269243411774840240, 0.269291565046261840, 0.269339717644455020, 0.269387869569298440, +0.269436020820672200, 0.269484171398455870, 0.269532321302529580, 0.269580470532772070, 0.269628619089063330, 0.269676766971283120, 0.269724914179311330, 0.269773060713026870, +0.269821206572309790, 0.269869351757040080, 0.269917496267096600, 0.269965640102359350, 0.270013783262707970, 0.270061925748022620, 0.270110067558182010, 0.270158208693066230, +0.270206349152554930, 0.270254488936528150, 0.270302628044864770, 0.270350766477444770, 0.270398904234147920, 0.270447041314854200, 0.270495177719442430, 0.270543313447792750, +0.270591448499784780, 0.270639582875298600, 0.270687716574213030, 0.270735849596408170, 0.270783981941763730, 0.270832113610159690, 0.270880244601474970, 0.270928374915589690, +0.270976504552383870, 0.271024633511736330, 0.271072761793527240, 0.271120889397636230, 0.271169016323943410, 0.271217142572327650, 0.271265268142668990, 0.271313393034847190, +0.271361517248742360, 0.271409640784233300, 0.271457763641200110, 0.271505885819522510, 0.271554007319080640, 0.271602128139753320, 0.271650248281420700, 0.271698367743962440, +0.271746486527258690, 0.271794604631188260, 0.271842722055631370, 0.271890838800468100, 0.271938954865577290, 0.271987070250839070, 0.272035184956133210, 0.272083298981339820, +0.272131412326337750, 0.272179524991007120, 0.272227636975227730, 0.272275748278879630, 0.272323858901841740, 0.272371968843994230, 0.272420078105216730, 0.272468186685389520, +0.272516294584391420, 0.272564401802102560, 0.272612508338402730, 0.272660614193172000, 0.272708719366289320, 0.272756823857634890, 0.272804927667088800, 0.272853030794529940, +0.272901133239838500, 0.272949235002894250, 0.272997336083577350, 0.273045436481766710, 0.273093536197342450, 0.273141635230184310, 0.273189733580172570, 0.273237831247186040, +0.273285928231104920, 0.273334024531808990, 0.273382120149178400, 0.273430215083092120, 0.273478309333430310, 0.273526402900072680, 0.273574495782899500, 0.273622587981789680, +0.273670679496623380, 0.273718770327280370, 0.273766860473640850, 0.273814949935583750, 0.273863038712989280, 0.273911126805737650, 0.273959214213707780, 0.274007300936779830, +0.274055386974833670, 0.274103472327749450, 0.274151556995406160, 0.274199640977683960, 0.274247724274462650, 0.274295806885622440, 0.274343888811042270, 0.274391970050602450, +0.274440050604182640, 0.274488130471663150, 0.274536209652922910, 0.274584288147842190, 0.274632365956300690, 0.274680443078178740, 0.274728519513355200, 0.274776595261710390, +0.274824670323124580, 0.274872744697476580, 0.274920818384646770, 0.274968891384514860, 0.275016963696961210, 0.275065035321864710, 0.275113106259105620, 0.275161176508563750, +0.275209246070119370, 0.275257314943651410, 0.275305383129040240, 0.275353450626165560, 0.275401517434907710, 0.275449583555145590, 0.275497648986759550, 0.275545713729629380, +0.275593777783635360, 0.275641841148656470, 0.275689903824572980, 0.275737965811265140, 0.275786027108612000, 0.275834087716493760, 0.275882147634790300, 0.275930206863381880, +0.275978265402147540, 0.276026323250967540, 0.276074380409721710, 0.276122436878290360, 0.276170492656552520, 0.276218547744388420, 0.276266602141677970, 0.276314655848301450, +0.276362708864137830, 0.276410761189067430, 0.276458812822970190, 0.276506863765726310, 0.276554914017214830, 0.276602963577316060, 0.276651012445910340, 0.276699060622876640, +0.276747108108095270, 0.276795154901446180, 0.276843201002809570, 0.276891246412064580, 0.276939291129091440, 0.276987335153770110, 0.277035378485980870, 0.277083421125602750, +0.277131463072516020, 0.277179504326600710, 0.277227544887737040, 0.277275584755804050, 0.277323623930682110, 0.277371662412251140, 0.277419700200391420, 0.277467737294982030, +0.277515773695903300, 0.277563809403035100, 0.277611844416257860, 0.277659878735450560, 0.277707912360493530, 0.277755945291267180, 0.277803977527650510, 0.277852009069523950, +0.277900039916767320, 0.277948070069261030, 0.277996099526884140, 0.278044128289517020, 0.278092156357039600, 0.278140183729332140, 0.278188210406273840, 0.278236236387745030, +0.278284261673625580, 0.278332286263795970, 0.278380310158135140, 0.278428333356523620, 0.278476355858841170, 0.278524377664968350, 0.278572398774784070, 0.278620419188168880, +0.278668438905003040, 0.278716457925165640, 0.278764476248537120, 0.278812493874997400, 0.278860510804426860, 0.278908527036704660, 0.278956542571711100, 0.279004557409326230, +0.279052571549430360, 0.279100584991902660, 0.279148597736623480, 0.279196609783472770, 0.279244621132331010, 0.279292631783077280, 0.279340641735591920, 0.279388650989755020, +0.279436659545446890, 0.279484667402546630, 0.279532674560934780, 0.279580681020491660, 0.279628686781096370, 0.279676691842629390, 0.279724696204970650, 0.279772699868000630, +0.279820702831598430, 0.279868705095644490, 0.279916706660018780, 0.279964707524601670, 0.280012707689272440, 0.280060707153911400, 0.280108705918398590, 0.280156703982614500, +0.280204701346438160, 0.280252698009750060, 0.280300693972430240, 0.280348689234359130, 0.280396683795415880, 0.280444677655480870, 0.280492670814434190, 0.280540663272156270, +0.280588655028526260, 0.280636646083424590, 0.280684636436731750, 0.280732626088326890, 0.280780615038090490, 0.280828603285902530, 0.280876590831643460, 0.280924577675192520, +0.280972563816430150, 0.281020549255236340, 0.281068533991491560, 0.281116518025075090, 0.281164501355867290, 0.281212483983748210, 0.281260465908598380, 0.281308447130296960, +0.281356427648724430, 0.281404407463760780, 0.281452386575286590, 0.281500364983180980, 0.281548342687324480, 0.281596319687597520, 0.281644295983879360, 0.281692271576050480, +0.281740246463990870, 0.281788220647581080, 0.281836194126700360, 0.281884166901229080, 0.281932138971047460, 0.281980110336035870, 0.282028080996073570, 0.282076050951041100, +0.282124020200818500, 0.282171988745286260, 0.282219956584323640, 0.282267923717811120, 0.282315890145628800, 0.282363855867657170, 0.282411820883775420, 0.282459785193864220, +0.282507748797803940, 0.282555711695473830, 0.282603673886754450, 0.282651635371525930, 0.282699596149668720, 0.282747556221062070, 0.282795515585586580, 0.282843474243122280, +0.282891432193549670, 0.282939389436748120, 0.282987345972598060, 0.283035301800979690, 0.283083256921773440, 0.283131211334858630, 0.283179165040115810, 0.283227118037425060, +0.283275070326666930, 0.283323021907720740, 0.283370972780466970, 0.283418922944785770, 0.283466872400557680, 0.283514821147661970, 0.283562769185979220, 0.283610716515389990, +0.283658663135773540, 0.283706609047010390, 0.283754554248980770, 0.283802498741565160, 0.283850442524642920, 0.283898385598094550, 0.283946327961800190, 0.283994269615640450, +0.284042210559494630, 0.284090150793243290, 0.284138090316766510, 0.284186029129945010, 0.284233967232657980, 0.284281904624786030, 0.284329841306209310, 0.284377777276808410, +0.284425712536462650, 0.284473647085052570, 0.284521580922458880, 0.284569514048560730, 0.284617446463238830, 0.284665378166373330, 0.284713309157844820, 0.284761239437532570, +0.284809169005317280, 0.284857097861078990, 0.284905026004698410, 0.284952953436054870, 0.285000880155028950, 0.285048806161500800, 0.285096731455351030, 0.285144656036459050, +0.285192579904705420, 0.285240503059970340, 0.285288425502134460, 0.285336347231077040, 0.285384268246678790, 0.285432188548820240, 0.285480108137380840, 0.285528027012241170, +0.285575945173281440, 0.285623862620382250, 0.285671779353422970, 0.285719695372284250, 0.285767610676846310, 0.285815525266989780, 0.285863439142593990, 0.285911352303539590, +0.285959264749706840, 0.286007176480976290, 0.286055087497227470, 0.286102997798340860, 0.286150907384196740, 0.286198816254675860, 0.286246724409657430, 0.286294631849022260, +0.286342538572650910, 0.286390444580422730, 0.286438349872218500, 0.286486254447918360, 0.286534158307403090, 0.286582061450551930, 0.286629963877245600, 0.286677865587364410, +0.286725766580788970, 0.286773666857398690, 0.286821566417074180, 0.286869465259695810, 0.286917363385144230, 0.286965260793298760, 0.287013157484040160, 0.287061053457248690, +0.287108948712805010, 0.287156843250588490, 0.287204737070479890, 0.287252630172359470, 0.287300522556107830, 0.287348414221604510, 0.287396305168730160, 0.287444195397365430, +0.287492084907389810, 0.287539973698684000, 0.287587861771128270, 0.287635749124603270, 0.287683635758988480, 0.287731521674164600, 0.287779406870011910, 0.287827291346411160, +0.287875175103241730, 0.287923058140384380, 0.287970940457719370, 0.288018822055127410, 0.288066702932487980, 0.288114583089681800, 0.288162462526589170, 0.288210341243090810, +0.288258219239066190, 0.288306096514395980, 0.288353973068960990, 0.288401848902640650, 0.288449724015315660, 0.288497598406866400, 0.288545472077173510, 0.288593345026116550, +0.288641217253576220, 0.288689088759432830, 0.288736959543567150, 0.288784829605858660, 0.288832698946188130, 0.288880567564435810, 0.288928435460482470, 0.288976302634207650, +0.289024169085492060, 0.289072034814216060, 0.289119899820260430, 0.289167764103504590, 0.289215627663829360, 0.289263490501115440, 0.289311352615242380, 0.289359214006090990, +0.289407074673541490, 0.289454934617474790, 0.289502793837770330, 0.289550652334308820, 0.289598510106970740, 0.289646367155636800, 0.289694223480186530, 0.289742079080500650, +0.289789933956459630, 0.289837788107944140, 0.289885641534833820, 0.289933494237009370, 0.289981346214351180, 0.290029197466740050, 0.290077047994055480, 0.290124897796178340, +0.290172746872988880, 0.290220595224368050, 0.290268442850195260, 0.290316289750351400, 0.290364135924717210, 0.290411981373172310, 0.290459826095597400, 0.290507670091872950, +0.290555513361879740, 0.290603355905497300, 0.290651197722606500, 0.290699038813087730, 0.290746879176821740, 0.290794718813688120, 0.290842557723567760, 0.290890395906340970, +0.290938233361888620, 0.290986070090090250, 0.291033906090826740, 0.291081741363978410, 0.291129575909426170, 0.291177409727049590, 0.291225242816729510, 0.291273075178346720, +0.291320906811780800, 0.291368737716912630, 0.291416567893622580, 0.291464397341791580, 0.291512226061299120, 0.291560054052026120, 0.291607881313853010, 0.291655707846660620, +0.291703533650328470, 0.291751358724737560, 0.291799183069768210, 0.291847006685301340, 0.291894829571216540, 0.291942651727394640, 0.291990473153716120, 0.292038293850061860, +0.292086113816311440, 0.292133933052345700, 0.292181751558045600, 0.292229569333290640, 0.292277386377961800, 0.292325202691939510, 0.292373018275104590, 0.292420833127336740, +0.292468647248516790, 0.292516460638525210, 0.292564273297242940, 0.292612085224549510, 0.292659896420325920, 0.292707706884452520, 0.292755516616810320, 0.292803325617278950, +0.292851133885739190, 0.292898941422071620, 0.292946748226157130, 0.292994554297875350, 0.293042359637107170, 0.293090164243733520, 0.293137968117634040, 0.293185771258689660, +0.293233573666780820, 0.293281375341788500, 0.293329176283592290, 0.293376976492073120, 0.293424775967111530, 0.293472574708588450, 0.293520372716383480, 0.293568169990377600, +0.293615966530451300, 0.293663762336485450, 0.293711557408359860, 0.293759351745955300, 0.293807145349152370, 0.293854938217832040, 0.293902730351873920, 0.293950521751158990, +0.293998312415567730, 0.294046102344981130, 0.294093891539278840, 0.294141679998341790, 0.294189467722051010, 0.294237254710286110, 0.294285040962928120, 0.294332826479857480, +0.294380611260955220, 0.294428395306100990, 0.294476178615175830, 0.294523961188060180, 0.294571743024635010, 0.294619524124780100, 0.294667304488376410, 0.294715084115304390, +0.294762863005445130, 0.294810641158678280, 0.294858418574884820, 0.294906195253945350, 0.294953971195740790, 0.295001746400150870, 0.295049520867056550, 0.295097294596338930, +0.295145067587877620, 0.295192839841553590, 0.295240611357247500, 0.295288382134840320, 0.295336152174211770, 0.295383921475242780, 0.295431690037814050, 0.295479457861806460, +0.295527224947099880, 0.295574991293575170, 0.295622756901113000, 0.295670521769594350, 0.295718285898899040, 0.295766049288907930, 0.295813811939501740, 0.295861573850561440, +0.295909335021966760, 0.295957095453598770, 0.296004855145338470, 0.296052614097065570, 0.296100372308661150, 0.296148129780005820, 0.296195886510980610, 0.296243642501465180, +0.296291397751340720, 0.296339152260487740, 0.296386906028787310, 0.296434659056119150, 0.296482411342364360, 0.296530162887403580, 0.296577913691117800, 0.296625663753386780, +0.296673413074091620, 0.296721161653112960, 0.296768909490331800, 0.296816656585627950, 0.296864402938882390, 0.296912148549975890, 0.296959893418789420, 0.297007637545202820, +0.297055380929097110, 0.297103123570353400, 0.297150865468851390, 0.297198606624472280, 0.297246347037096630, 0.297294086706605510, 0.297341825632878750, 0.297389563815797450, +0.297437301255242260, 0.297485037951094210, 0.297532773903233180, 0.297580509111540160, 0.297628243575895900, 0.297675977296181450, 0.297723710272276620, 0.297771442504062570, +0.297819173991419880, 0.297866904734229660, 0.297914634732371730, 0.297962363985727290, 0.298010092494177310, 0.298057820257601690, 0.298105547275881510, 0.298153273548897480, +0.298200999076530690, 0.298248723858660970, 0.298296447895169400, 0.298344171185936760, 0.298391893730844130, 0.298439615529771270, 0.298487336582599460, 0.298535056889209230, +0.298582776449481830, 0.298630495263297050, 0.298678213330536070, 0.298725930651079500, 0.298773647224808540, 0.298821363051603060, 0.298869078131344170, 0.298916792463913010, +0.298964506049189390, 0.299012218887054590, 0.299059930977389200, 0.299107642320074420, 0.299155352914990070, 0.299203062762017360, 0.299250771861036990, 0.299298480211930170, +0.299346187814576670, 0.299393894668857690, 0.299441600774653980, 0.299489306131846710, 0.299537010740315750, 0.299584714599942290, 0.299632417710607000, 0.299680120072191140, +0.299727821684574510, 0.299775522547638340, 0.299823222661263770, 0.299870922025330720, 0.299918620639720410, 0.299966318504313490, 0.300014015618991210, 0.300061711983633520, +0.300109407598121490, 0.300157102462335960, 0.300204796576158120, 0.300252489939467850, 0.300300182552146360, 0.300347874414074400, 0.300395565525133190, 0.300443255885202600, +0.300490945494163940, 0.300538634351897870, 0.300586322458285650, 0.300634009813207200, 0.300681696416543740, 0.300729382268176030, 0.300777067367985260, 0.300824751715851440, +0.300872435311655690, 0.300920118155279360, 0.300967800246602250, 0.301015481585505620, 0.301063162171870350, 0.301110842005577530, 0.301158521086507200, 0.301206199414540630, +0.301253876989558520, 0.301301553811442140, 0.301349229880071400, 0.301396905195327640, 0.301444579757091600, 0.301492253565244560, 0.301539926619666440, 0.301587598920238510, +0.301635270466841580, 0.301682941259356910, 0.301730611297664490, 0.301778280581645460, 0.301825949111181210, 0.301873616886151660, 0.301921283906438080, 0.301968950171921270, +0.302016615682482500, 0.302064280438001760, 0.302111944438360370, 0.302159607683439080, 0.302207270173119210, 0.302254931907280700, 0.302302592885804910, 0.302350253108572610, +0.302397912575465110, 0.302445571286362400, 0.302493229241145800, 0.302540886439696070, 0.302588542881894570, 0.302636198567621310, 0.302683853496757530, 0.302731507669184550, +0.302779161084782370, 0.302826813743432290, 0.302874465645015130, 0.302922116789412330, 0.302969767176503760, 0.303017416806170730, 0.303065065678294220, 0.303112713792755450, +0.303160361149434450, 0.303208007748212600, 0.303255653588970660, 0.303303298671590060, 0.303350942995950780, 0.303398586561934140, 0.303446229369421060, 0.303493871418292820, +0.303541512708429440, 0.303589153239712310, 0.303636793012022290, 0.303684432025240700, 0.303732070279247650, 0.303779707773924380, 0.303827344509152280, 0.303874980484811370, +0.303922615700783050, 0.303970250156948170, 0.304017883853188060, 0.304065516789382870, 0.304113148965413860, 0.304160780381162010, 0.304208411036508590, 0.304256040931333740, +0.304303670065518780, 0.304351298438944650, 0.304398926051492660, 0.304446552903043010, 0.304494178993476920, 0.304541804322675410, 0.304589428890519760, 0.304637052696890180, +0.304684675741667970, 0.304732298024734450, 0.304779919545969780, 0.304827540305255270, 0.304875160302471970, 0.304922779537501190, 0.304970398010223020, 0.305018015720518840, +0.305065632668269640, 0.305113248853356780, 0.305160864275660360, 0.305208478935061810, 0.305256092831442060, 0.305303705964682480, 0.305351318334663220, 0.305398929941265660, +0.305446540784370780, 0.305494150863859950, 0.305541760179613320, 0.305589368731512320, 0.305636976519438330, 0.305684583543271440, 0.305732189802893130, 0.305779795298184330, +0.305827400029026420, 0.305875003995299650, 0.305922607196885350, 0.305970209633664500, 0.306017811305518580, 0.306065412212327690, 0.306113012353973310, 0.306160611730336370, +0.306208210341298300, 0.306255808186739360, 0.306303405266540820, 0.306351001580583810, 0.306398597128749730, 0.306446191910918650, 0.306493785926972180, 0.306541379176791640, +0.306588971660257230, 0.306636563377250370, 0.306684154327652110, 0.306731744511343940, 0.306779333928205940, 0.306826922578119610, 0.306874510460965980, 0.306922097576626470, +0.306969683924981310, 0.307017269505911960, 0.307064854319299420, 0.307112438365025160, 0.307160021642969350, 0.307207604153013570, 0.307255185895038700, 0.307302766868926320, +0.307350347074556610, 0.307397926511811030, 0.307445505180570620, 0.307493083080716880, 0.307540660212130000, 0.307588236574691480, 0.307635812168282790, 0.307683386992784190, +0.307730961048077070, 0.307778534334042560, 0.307826106850562110, 0.307873678597516020, 0.307921249574785670, 0.307968819782252270, 0.308016389219797180, 0.308063957887300730, +0.308111525784644400, 0.308159092911709230, 0.308206659268376760, 0.308254224854527190, 0.308301789670042070, 0.308349353714802490, 0.308396916988689930, 0.308444479491584710, +0.308492041223368210, 0.308539602183922070, 0.308587162373126560, 0.308634721790863040, 0.308682280437012790, 0.308729838311457230, 0.308777395414076670, 0.308824951744752610, +0.308872507303366130, 0.308920062089798890, 0.308967616103930980, 0.309015169345644100, 0.309062721814819250, 0.309110273511338070, 0.309157824435080720, 0.309205374585928890, +0.309252923963763580, 0.309300472568466380, 0.309348020399917540, 0.309395567457998680, 0.309443113742591370, 0.309490659253575770, 0.309538203990833590, 0.309585747954245870, +0.309633291143694200, 0.309680833559058900, 0.309728375200221510, 0.309775916067063170, 0.309823456159465490, 0.309870995477308730, 0.309918534020474480, 0.309966071788843890, +0.310013608782298500, 0.310061145000718740, 0.310108680443986100, 0.310156215111981710, 0.310203749004587250, 0.310251282121683010, 0.310298814463150550, 0.310346346028871010, +0.310393876818726100, 0.310441406832596020, 0.310488936070362430, 0.310536464531906970, 0.310583992217109860, 0.310631519125852850, 0.310679045258016980, 0.310726570613483910, +0.310774095192134060, 0.310821618993848910, 0.310869142018509740, 0.310916664265998120, 0.310964185736194390, 0.311011706428980240, 0.311059226344236830, 0.311106745481845750, +0.311154263841687430, 0.311201781423643410, 0.311249298227594890, 0.311296814253423650, 0.311344329501009880, 0.311391843970235280, 0.311439357660981580, 0.311486870573128960, +0.311534382706559200, 0.311581894061153500, 0.311629404636793510, 0.311676914433359540, 0.311724423450733310, 0.311771931688796020, 0.311819439147429270, 0.311866945826513590, +0.311914451725930460, 0.311961956845561270, 0.312009461185287550, 0.312056964744989780, 0.312104467524549620, 0.312151969523848270, 0.312199470742767440, 0.312246971181187490, +0.312294470838990090, 0.312341969716056990, 0.312389467812268510, 0.312436965127506350, 0.312484461661651840, 0.312531957414586500, 0.312579452386190890, 0.312626946576346710, +0.312674439984935100, 0.312721932611837780, 0.312769424456935290, 0.312816915520109210, 0.312864405801240810, 0.312911895300211850, 0.312959384016902710, 0.313006871951195090, +0.313054359102970300, 0.313101845472110060, 0.313149331058494800, 0.313196815862006210, 0.313244299882525950, 0.313291783119934550, 0.313339265574113680, 0.313386747244944700, +0.313434228132309200, 0.313481708236087730, 0.313529187556161990, 0.313576666092413300, 0.313624143844723370, 0.313671620812972620, 0.313719096997042870, 0.313766572396815320, +0.313814047012171800, 0.313861520842992740, 0.313908993889159880, 0.313956466150554560, 0.314003937627058420, 0.314051408318552050, 0.314098878224917220, 0.314146347346035140, +0.314193815681787610, 0.314241283232055080, 0.314288749996719410, 0.314336215975662250, 0.314383681168764140, 0.314431145575906850, 0.314478609196971680, 0.314526072031840410, +0.314573534080393510, 0.314620995342512810, 0.314668455818079620, 0.314715915506975700, 0.314763374409081590, 0.314810832524278990, 0.314858289852449350, 0.314905746393474410, +0.314953202147234660, 0.315000657113611910, 0.315048111292487550, 0.315095564683743280, 0.315143017287259740, 0.315190469102918590, 0.315237920130601760, 0.315285370370189670, +0.315332819821564140, 0.315380268484606600, 0.315427716359198750, 0.315475163445221250, 0.315522609742555800, 0.315570055251083840, 0.315617499970687170, 0.315664943901246330, +0.315712387042643150, 0.315759829394758940, 0.315807270957475630, 0.315854711730673700, 0.315902151714235020, 0.315949590908040920, 0.315997029311973270, 0.316044466925912650, +0.316091903749740830, 0.316139339783339690, 0.316186775026589820, 0.316234209479372970, 0.316281643141570590, 0.316329076013064540, 0.316376508093735350, 0.316423939383464910, +0.316471369882134650, 0.316518799589626370, 0.316566228505820670, 0.316613656630599370, 0.316661083963843960, 0.316708510505436250, 0.316755936255256830, 0.316803361213187580, +0.316850785379109930, 0.316898208752905750, 0.316945631334455640, 0.316993053123641400, 0.317040474120344530, 0.317087894324446950, 0.317135313735829210, 0.317182732354373110, +0.317230150179960650, 0.317277567212472410, 0.317324983451790220, 0.317372398897795620, 0.317419813550370410, 0.317467227409395260, 0.317514640474751970, 0.317562052746322150, +0.317609464223987610, 0.317656874907629010, 0.317704284797128200, 0.317751693892366680, 0.317799102193226320, 0.317846509699587830, 0.317893916411333020, 0.317941322328343430, +0.317988727450501000, 0.318036131777686300, 0.318083535309781230, 0.318130938046667810, 0.318178339988226590, 0.318225741134339490, 0.318273141484888110, 0.318320541039754270, +0.318367939798818610, 0.318415337761963180, 0.318462734929069350, 0.318510131300019090, 0.318557526874693130, 0.318604921652973330, 0.318652315634741220, 0.318699708819878750, +0.318747101208266600, 0.318794492799786670, 0.318841883594320530, 0.318889273591750070, 0.318936662791956040, 0.318984051194820320, 0.319031438800224940, 0.319078825608050510, +0.319126211618179000, 0.319173596830492010, 0.319220981244871420, 0.319268364861197970, 0.319315747679353610, 0.319363129699219870, 0.319410510920678680, 0.319457891343610860, +0.319505270967898270, 0.319552649793422520, 0.319600027820065580, 0.319647405047708170, 0.319694781476232200, 0.319742157105519290, 0.319789531935451400, 0.319836905965909250, +0.319884279196774870, 0.319931651627930190, 0.319979023259255980, 0.320026394090634210, 0.320073764121946440, 0.320121133353074680, 0.320168501783899660, 0.320215869414303410, +0.320263236244167470, 0.320310602273373880, 0.320357967501803340, 0.320405331929337900, 0.320452695555859090, 0.320500058381249010, 0.320547420405388360, 0.320594781628159130, +0.320642142049442970, 0.320689501669121860, 0.320736860487076560, 0.320784218503189170, 0.320831575717341170, 0.320878932129414710, 0.320926287739290440, 0.320973642546850460, +0.321020996551976800, 0.321068349754550290, 0.321115702154452840, 0.321163053751566120, 0.321210404545772210, 0.321257754536951880, 0.321305103724987160, 0.321352452109759710, +0.321399799691151510, 0.321447146469043380, 0.321494492443317400, 0.321541837613855190, 0.321589181980538820, 0.321636525543249060, 0.321683868301868010, 0.321731210256277270, +0.321778551406358910, 0.321825891751993780, 0.321873231293063890, 0.321920570029451350, 0.321967907961036970, 0.322015245087702850, 0.322062581409330580, 0.322109916925802320, +0.322157251636998820, 0.322204585542802180, 0.322251918643094050, 0.322299250937756580, 0.322346582426670580, 0.322393913109718100, 0.322441242986780840, 0.322488572057740900, +0.322535900322479090, 0.322583227780877560, 0.322630554432817910, 0.322677880278182340, 0.322725205316851670, 0.322772529548707940, 0.322819852973633300, 0.322867175591508630, +0.322914497402216010, 0.322961818405637200, 0.323009138601654200, 0.323056457990147930, 0.323103776571000530, 0.323151094344093730, 0.323198411309309600, 0.323245727466528960, +0.323293042815634090, 0.323340357356506570, 0.323387671089028550, 0.323434984013080960, 0.323482296128545900, 0.323529607435305120, 0.323576917933240730, 0.323624227622233640, +0.323671536502165960, 0.323718844572919440, 0.323766151834376240, 0.323813458286417220, 0.323860763928924600, 0.323908068761780410, 0.323955372784865690, 0.324002675998062540, +0.324049978401252660, 0.324097279994318310, 0.324144580777140310, 0.324191880749600870, 0.324239179911581690, 0.324286478262965030, 0.324333775803631710, 0.324381072533463990, +0.324428368452343570, 0.324475663560152620, 0.324522957856772150, 0.324570251342084230, 0.324617544015970700, 0.324664835878313740, 0.324712126928994320, 0.324759417167894530, +0.324806706594896580, 0.324853995209881510, 0.324901283012731410, 0.324948570003328110, 0.324995856181553850, 0.325043141547289470, 0.325090426100417270, 0.325137709840818970, +0.325184992768376870, 0.325232274882971790, 0.325279556184486120, 0.325326836672801490, 0.325374116347800220, 0.325421395209363200, 0.325468673257372720, 0.325515950491710560, +0.325563226912258970, 0.325610502518898840, 0.325657777311512460, 0.325705051289982120, 0.325752324454188670, 0.325799596804014440, 0.325846868339341180, 0.325894139060051210, +0.325941408966025470, 0.325988678057146150, 0.326035946333295190, 0.326083213794354790, 0.326130480440205930, 0.326177746270730870, 0.326225011285811380, 0.326272275485329890, +0.326319538869167200, 0.326366801437205700, 0.326414063189327200, 0.326461324125413950, 0.326508584245347010, 0.326555843549008570, 0.326603102036280960, 0.326650359707045150, +0.326697616561183460, 0.326744872598577710, 0.326792127819110210, 0.326839382222661960, 0.326886635809115260, 0.326933888578351980, 0.326981140530254400, 0.327028391664703540, +0.327075641981581730, 0.327122891480770780, 0.327170140162153010, 0.327217388025609510, 0.327264635071022550, 0.327311881298273930, 0.327359126707246100, 0.327406371297820020, +0.327453615069877970, 0.327500858023301920, 0.327548100157974140, 0.327595341473775670, 0.327642581970588880, 0.327689821648296020, 0.327737060506778200, 0.327784298545917730, +0.327831535765596540, 0.327878772165696890, 0.327926007746099920, 0.327973242506687910, 0.328020476447342780, 0.328067709567946900, 0.328114941868381360, 0.328162173348528430, +0.328209404008270030, 0.328256633847488600, 0.328303862866065170, 0.328351091063882050, 0.328398318440821180, 0.328445544996764980, 0.328492770731594500, 0.328539995645192040, +0.328587219737440040, 0.328634443008219590, 0.328681665457413010, 0.328728887084902280, 0.328776107890569770, 0.328823327874296520, 0.328870547035965020, 0.328917765375457080, +0.328964982892655190, 0.329012199587440380, 0.329059415459695140, 0.329106630509301330, 0.329153844736141340, 0.329201058140096310, 0.329248270721048670, 0.329295482478880350, +0.329342693413473770, 0.329389903524709980, 0.329437112812471460, 0.329484321276640570, 0.329531528917098470, 0.329578735733727530, 0.329625941726409740, 0.329673146895027580, +0.329720351239462080, 0.329767554759595680, 0.329814757455310470, 0.329861959326488710, 0.329909160373011660, 0.329956360594761740, 0.330003559991620900, 0.330050758563471550, +0.330097956310194900, 0.330145153231673370, 0.330192349327788960, 0.330239544598424080, 0.330286739043459900, 0.330333932662778940, 0.330381125456263080, 0.330428317423794860, +0.330475508565255430, 0.330522698880527210, 0.330569888369492690, 0.330617077032032970, 0.330664264868030630, 0.330711451877367610, 0.330758638059926340, 0.330805823415588120, +0.330853007944235280, 0.330900191645749960, 0.330947374520014550, 0.330994556566910290, 0.331041737786319680, 0.331088918178124690, 0.331136097742207810, 0.331183276478450310, +0.331230454386734540, 0.331277631466942720, 0.331324807718957230, 0.331371983142659250, 0.331419157737931350, 0.331466331504655990, 0.331513504442714320, 0.331560676551988950, +0.331607847832361860, 0.331655018283715570, 0.331702187905931310, 0.331749356698891610, 0.331796524662478500, 0.331843691796574520, 0.331890858101060840, 0.331938023575820080, +0.331985188220734200, 0.332032352035685820, 0.332079515020556100, 0.332126677175227590, 0.332173838499582430, 0.332220998993503050, 0.332268158656870820, 0.332315317489568110, +0.332362475491477570, 0.332409632662480410, 0.332456789002459170, 0.332503944511296000, 0.332551099188873320, 0.332598253035072510, 0.332645406049776050, 0.332692558232866090, +0.332739709584225160, 0.332786860103734540, 0.332834009791276750, 0.332881158646733900, 0.332928306669988630, 0.332975453860922140, 0.333022600219417040, 0.333069745745355470, +0.333116890438619920, 0.333164034299091690, 0.333211177326653400, 0.333258319521187620, 0.333305460882575570, 0.333352601410699890, 0.333399741105442740, 0.333446879966686590, +0.333494017994312890, 0.333541155188204100, 0.333588291548242430, 0.333635427074310490, 0.333682561766289520, 0.333729695624062130, 0.333776828647510570, 0.333823960836517280, +0.333871092190963730, 0.333918222710732400, 0.333965352395705520, 0.334012481245765710, 0.334059609260794250, 0.334106736440673790, 0.334153862785286470, 0.334200988294514940, +0.334248112968240470, 0.334295236806345760, 0.334342359808713350, 0.334389481975224670, 0.334436603305762250, 0.334483723800208300, 0.334530843458445530, 0.334577962280355190, +0.334625080265819940, 0.334672197414721980, 0.334719313726943970, 0.334766429202367210, 0.334813543840874420, 0.334860657642347740, 0.334907770606669870, 0.334954882733722150, +0.335001994023387210, 0.335049104475547310, 0.335096214090085050, 0.335143322866881810, 0.335190430805820280, 0.335237537906783120, 0.335284644169651650, 0.335331749594308610, +0.335378854180636180, 0.335425957928517040, 0.335473060837832570, 0.335520162908465480, 0.335567264140297920, 0.335614364533212690, 0.335661464087091080, 0.335708562801815820, +0.335755660677269200, 0.335802757713333790, 0.335849853909891080, 0.335896949266823790, 0.335944043784014050, 0.335991137461344620, 0.336038230298697000, 0.336085322295953730, +0.336132413452997600, 0.336179503769710060, 0.336226593245973700, 0.336273681881670890, 0.336320769676684280, 0.336367856630895360, 0.336414942744186760, 0.336462028016440820, +0.336509112447540230, 0.336556196037366420, 0.336603278785802150, 0.336650360692729630, 0.336697441758031680, 0.336744521981589660, 0.336791601363286400, 0.336838679903004090, +0.336885757600625500, 0.336932834456032120, 0.336979910469106640, 0.337026985639731380, 0.337074059967789110, 0.337121133453161250, 0.337168206095730560, 0.337215277895379750, +0.337262348851990360, 0.337309418965445030, 0.337356488235626200, 0.337403556662416610, 0.337450624245697660, 0.337497690985352150, 0.337544756881262400, 0.337591821933311220, +0.337638886141380050, 0.337685949505351630, 0.337733012025108410, 0.337780073700533030, 0.337827134531507030, 0.337874194517913230, 0.337921253659633940, 0.337968311956551910, +0.338015369408548700, 0.338062426015507070, 0.338109481777309760, 0.338156536693838380, 0.338203590764975640, 0.338250643990603890, 0.338297696370605970, 0.338344747904863410, +0.338391798593258960, 0.338438848435675010, 0.338485897431994360, 0.338532945582098570, 0.338579992885870430, 0.338627039343192270, 0.338674084953946910, 0.338721129718015990, +0.338768173635282170, 0.338815216705627980, 0.338862258928936120, 0.338909300305088200, 0.338956340833967080, 0.339003380515455480, 0.339050419349435030, 0.339097457335788500, +0.339144494474398320, 0.339191530765147350, 0.339238566207917150, 0.339285600802590510, 0.339332634549049880, 0.339379667447178070, 0.339426699496856720, 0.339473730697968550, +0.339520761050396080, 0.339567790554022140, 0.339614819208728320, 0.339661847014397440, 0.339708873970911930, 0.339755900078154650, 0.339802925336007200, 0.339849949744352450, +0.339896973303072840, 0.339943996012051160, 0.339991017871169140, 0.340038038880309530, 0.340085059039355260, 0.340132078348187930, 0.340179096806690400, 0.340226114414745100, +0.340273131172234950, 0.340320147079041570, 0.340367162135047810, 0.340414176340136150, 0.340461189694189480, 0.340508202197089380, 0.340555213848718790, 0.340602224648960170, +0.340649234597696420, 0.340696243694809160, 0.340743251940181290, 0.340790259333695280, 0.340837265875234050, 0.340884271564679210, 0.340931276401913730, 0.340978280386820430, +0.341025283519281070, 0.341072285799178480, 0.341119287226395170, 0.341166287800814040, 0.341213287522316780, 0.341260286390786320, 0.341307284406105140, 0.341354281568156170, +0.341401277876821060, 0.341448273331982800, 0.341495267933523810, 0.341542261681327060, 0.341589254575274280, 0.341636246615248330, 0.341683237801131800, 0.341730228132807570, +0.341777217610157340, 0.341824206233064090, 0.341871194001410750, 0.341918180915078970, 0.341965166973951800, 0.342012152177911640, 0.342059136526841560, 0.342106120020623180, +0.342153102659139560, 0.342200084442273120, 0.342247065369906960, 0.342294045441922660, 0.342341024658203260, 0.342388003018631320, 0.342434980523089790, 0.342481957171460350, +0.342528932963626020, 0.342575907899469400, 0.342622881978873420, 0.342669855201719780, 0.342716827567891570, 0.342763799077271670, 0.342810769729741840, 0.342857739525185110, +0.342904708463483980, 0.342951676544521580, 0.342998643768179510, 0.343045610134340820, 0.343092575642888140, 0.343139540293704470, 0.343186504086671450, 0.343233467021672230, +0.343280429098589300, 0.343327390317305750, 0.343374350677703330, 0.343421310179664980, 0.343468268823073410, 0.343515226607811530, 0.343562183533761170, 0.343609139600805360, +0.343656094808826750, 0.343703049157708270, 0.343750002647331740, 0.343796955277580250, 0.343843907048336730, 0.343890857959483100, 0.343937808010902290, 0.343984757202476950, +0.344031705534090130, 0.344078653005623620, 0.344125599616960490, 0.344172545367983360, 0.344219490258575290, 0.344266434288618080, 0.344313377457994780, 0.344360319766588040, +0.344407261214280950, 0.344454201800955260, 0.344501141526494030, 0.344548080390780000, 0.344595018393696160, 0.344641955535124390, 0.344688891814947660, 0.344735827233049190, +0.344782761789310720, 0.344829695483615310, 0.344876628315845700, 0.344923560285884890, 0.344970491393614800, 0.345017421638918460, 0.345064351021678590, 0.345111279541778280, +0.345158207199099290, 0.345205133993524820, 0.345252059924937520, 0.345298984993220480, 0.345345909198255590, 0.345392832539925860, 0.345439755018114080, 0.345486676632703330, +0.345533597383575470, 0.345580517270613670, 0.345627436293700910, 0.345674354452719210, 0.345721271747551570, 0.345768188178080800, 0.345815103744189940, 0.345862018445760920, +0.345908932282676830, 0.345955845254820430, 0.346002757362074860, 0.346049668604321960, 0.346096578981444860, 0.346143488493326320, 0.346190397139849500, 0.346237304920896270, +0.346284211836349780, 0.346331117886092720, 0.346378023070008310, 0.346424927387978420, 0.346471830839886250, 0.346518733425614460, 0.346565635145046290, 0.346612535998063580, +0.346659435984549510, 0.346706335104387310, 0.346753233357458830, 0.346800130743647290, 0.346847027262835450, 0.346893922914906390, 0.346940817699742170, 0.346987711617225860, +0.347034604667240290, 0.347081496849668600, 0.347128388164392790, 0.347175278611295990, 0.347222168190260970, 0.347269056901170990, 0.347315944743907920, 0.347362831718355030, +0.347409717824395000, 0.347456603061911170, 0.347503487430785350, 0.347550370930900850, 0.347597253562140830, 0.347644135324387200, 0.347691016217523300, 0.347737896241431870, +0.347784775395996060, 0.347831653681097920, 0.347878531096620650, 0.347925407642447060, 0.347972283318460360, 0.348019158124542540, 0.348066032060576850, 0.348112905126446050, +0.348159777322033400, 0.348206648647220900, 0.348253519101891730, 0.348300388685928830, 0.348347257399215350, 0.348394125241633320, 0.348440992213065960, 0.348487858313396510, +0.348534723542507090, 0.348581587900280760, 0.348628451386600540, 0.348675314001349550, 0.348722175744409890, 0.348769036615664770, 0.348815896614997070, 0.348862755742290030, +0.348909613997425700, 0.348956471380287350, 0.349003327890757830, 0.349050183528720360, 0.349097038294057030, 0.349143892186651150, 0.349190745206385490, 0.349237597353143360, +0.349284448626806850, 0.349331299027259230, 0.349378148554383820, 0.349424997208062580, 0.349471844988178850, 0.349518691894615490, 0.349565537927255810, 0.349612383085981910, +0.349659227370677010, 0.349706070781224070, 0.349752913317506350, 0.349799754979405960, 0.349846595766806160, 0.349893435679589860, 0.349940274717640390, 0.349987112880839830, +0.350033950169071520, 0.350080786582218310, 0.350127622120163520, 0.350174456782789300, 0.350221290569978920, 0.350268123481615290, 0.350314955517581790, 0.350361786677760470, +0.350408616962034740, 0.350455446370287800, 0.350502274902401880, 0.350549102558260270, 0.350595929337745920, 0.350642755240742120, 0.350689580267131040, 0.350736404416795990, +0.350783227689619950, 0.350830050085486290, 0.350876871604277050, 0.350923692245875610, 0.350970512010164940, 0.351017330897028470, 0.351064148906348180, 0.351110966038007570, +0.351157782291889540, 0.351204597667877430, 0.351251412165853430, 0.351298225785700910, 0.351345038527303260, 0.351391850390542600, 0.351438661375302270, 0.351485471481465310, +0.351532280708915070, 0.351579089057533770, 0.351625896527204660, 0.351672703117810900, 0.351719508829235750, 0.351766313661361410, 0.351813117614071300, 0.351859920687248360, +0.351906722880776070, 0.351953524194536570, 0.352000324628413240, 0.352047124182289060, 0.352093922856047570, 0.352140720649570800, 0.352187517562742250, 0.352234313595445270, +0.352281108747562130, 0.352327903018976260, 0.352374696409570590, 0.352421488919228590, 0.352468280547832470, 0.352515071295265600, 0.352561861161411080, 0.352608650146152340, +0.352655438249371570, 0.352702225470952200, 0.352749011810777220, 0.352795797268730170, 0.352842581844693190, 0.352889365538549770, 0.352936148350182940, 0.352982930279476140, +0.353029711326311610, 0.353076491490572800, 0.353123270772142780, 0.353170049170905000, 0.353216826686741650, 0.353263603319536210, 0.353310379069172230, 0.353357153935531850, +0.353403927918498620, 0.353450701017955560, 0.353497473233786160, 0.353544244565872630, 0.353591015014098560, 0.353637784578346880, 0.353684553258501230, 0.353731321054443710, +0.353778087966057920, 0.353824853993226880, 0.353871619135834150, 0.353918383393761970, 0.353965146766893830, 0.354011909255112780, 0.354058670858302390, 0.354105431576344940, +0.354152191409123910, 0.354198950356522770, 0.354245708418423840, 0.354292465594710670, 0.354339221885266340, 0.354385977289974340, 0.354432731808717040, 0.354479485441377860, +0.354526238187839960, 0.354572990047986920, 0.354619741021700960, 0.354666491108865670, 0.354713240309364130, 0.354759988623079890, 0.354806736049895320, 0.354853482589693850, +0.354900228242358730, 0.354946973007773390, 0.354993716885820270, 0.355040459876382830, 0.355087201979344620, 0.355133943194588020, 0.355180683521996610, 0.355227422961453430, +0.355274161512842130, 0.355320899176044980, 0.355367635950945620, 0.355414371837427130, 0.355461106835373190, 0.355507840944666030, 0.355554574165189260, 0.355601306496826090, +0.355648037939460040, 0.355694768492973430, 0.355741498157249980, 0.355788226932172770, 0.355834954817625390, 0.355881681813490220, 0.355928407919650800, 0.355975133135990830, +0.356021857462392620, 0.356068580898739720, 0.356115303444915380, 0.356162025100803190, 0.356208745866285590, 0.356255465741246060, 0.356302184725567850, 0.356348902819134670, +0.356395620021828730, 0.356442336333533780, 0.356489051754133040, 0.356535766283510020, 0.356582479921547180, 0.356629192668128150, 0.356675904523136130, 0.356722615486454790, +0.356769325557966480, 0.356816034737554850, 0.356862743025103120, 0.356909450420494930, 0.356956156923612770, 0.357002862534340160, 0.357049567252560820, 0.357096271078157170, +0.357142974011012860, 0.357189676051011040, 0.357236377198035530, 0.357283077451968580, 0.357329776812694010, 0.357376475280094970, 0.357423172854055120, 0.357469869534456970, +0.357516565321184140, 0.357563260214119880, 0.357609954213147900, 0.357656647318150610, 0.357703339529011730, 0.357750030845614460, 0.357796721267842570, 0.357843410795578410, +0.357890099428705750, 0.357936787167108250, 0.357983474010668380, 0.358030159959269840, 0.358076845012795850, 0.358123529171130220, 0.358170212434155310, 0.358216894801754890, +0.358263576273812220, 0.358310256850211010, 0.358356936530833780, 0.358403615315564190, 0.358450293204285560, 0.358496970196881650, 0.358543646293234820, 0.358590321493228950, +0.358636995796747240, 0.358683669203673450, 0.358730341713890120, 0.358777013327280900, 0.358823684043729550, 0.358870353863118610, 0.358917022785331720, 0.358963690810252310, +0.359010357937764090, 0.359057024167749590, 0.359103689500092530, 0.359150353934676200, 0.359197017471384440, 0.359243680110099660, 0.359290341850705740, 0.359337002693085940, +0.359383662637124070, 0.359430321682702610, 0.359476979829705390, 0.359523637078015660, 0.359570293427517280, 0.359616948878092760, 0.359663603429625830, 0.359710257081999940, +0.359756909835098780, 0.359803561688804950, 0.359850212643002210, 0.359896862697574370, 0.359943511852403920, 0.359990160107374720, 0.360036807462370160, 0.360083453917273920, +0.360130099471968670, 0.360176744126338160, 0.360223387880265810, 0.360270030733635390, 0.360316672686329500, 0.360363313738231880, 0.360409953889226030, 0.360456593139195650, +0.360503231488023430, 0.360549868935593100, 0.360596505481788120, 0.360643141126492260, 0.360689775869588170, 0.360736409710959600, 0.360783042650490440, 0.360829674688063260, +0.360876305823561890, 0.360922936056869760, 0.360969565387870730, 0.361016193816447340, 0.361062821342483460, 0.361109447965862530, 0.361156073686468400, 0.361202698504183680, +0.361249322418892240, 0.361295945430477440, 0.361342567538823210, 0.361389188743812150, 0.361435809045328130, 0.361482428443254570, 0.361529046937475400, 0.361575664527873150, +0.361622281214331760, 0.361668896996735050, 0.361715511874965700, 0.361762125848907600, 0.361808738918444120, 0.361855351083459230, 0.361901962343835590, 0.361948572699457020, +0.361995182150207040, 0.362041790695969480, 0.362088398336627040, 0.362135005072063590, 0.362181610902162670, 0.362228215826808090, 0.362274819845882610, 0.362321422959270060, +0.362368025166853960, 0.362414626468518190, 0.362461226864145390, 0.362507826353619610, 0.362554424936824660, 0.362601022613643190, 0.362647619383959230, 0.362694215247656160, +0.362740810204618010, 0.362787404254727390, 0.362833997397868260, 0.362880589633924170, 0.362927180962778980, 0.362973771384315470, 0.363020360898417490, 0.363066949504968650, +0.363113537203852810, 0.363160123994952730, 0.363206709878152290, 0.363253294853335130, 0.363299878920385180, 0.363346462079185080, 0.363393044329618780, 0.363439625671569950, +0.363486206104922440, 0.363532785629558990, 0.363579364245363580, 0.363625941952220140, 0.363672518750011500, 0.363719094638621510, 0.363765669617933770, 0.363812243687832330, +0.363858816848199820, 0.363905389098920280, 0.363951960439877260, 0.363998530870954800, 0.364045100392035580, 0.364091669003003600, 0.364138236703742400, 0.364184803494136070, +0.364231369374067300, 0.364277934343420150, 0.364324498402078150, 0.364371061549925270, 0.364417623786844390, 0.364464185112719390, 0.364510745527434340, 0.364557305030872080, +0.364603863622916520, 0.364650421303451270, 0.364696978072360400, 0.364743533929526690, 0.364790088874834160, 0.364836642908166360, 0.364883196029407390, 0.364929748238440040, +0.364976299535148260, 0.365022849919415800, 0.365069399391126590, 0.365115947950163440, 0.365162495596410450, 0.365209042329751270, 0.365255588150069810, 0.365302133057249010, +0.365348677051172910, 0.365395220131725480, 0.365441762298789610, 0.365488303552249320, 0.365534843891988310, 0.365581383317890580, 0.365627921829838940, 0.365674459427717540, +0.365720996111409960, 0.365767531880800360, 0.365814066735771440, 0.365860600676207400, 0.365907133701991850, 0.365953665813008920, 0.366000197009141380, 0.366046727290273320, +0.366093256656288450, 0.366139785107070900, 0.366186312642503400, 0.366232839262470190, 0.366279364966854810, 0.366325889755541480, 0.366372413628413000, 0.366418936585353520, +0.366465458626247080, 0.366511979750976550, 0.366558499959426130, 0.366605019251479420, 0.366651537627020570, 0.366698055085932510, 0.366744571628099260, 0.366791087253404650, +0.366837601961732650, 0.366884115752966310, 0.366930628626989610, 0.366977140583686410, 0.367023651622940710, 0.367070161744635470, 0.367116670948654860, 0.367163179234882560, +0.367209686603202750, 0.367256193053498270, 0.367302698585653340, 0.367349203199552050, 0.367395706895077330, 0.367442209672113380, 0.367488711530543910, 0.367535212470253000, +0.367581712491123700, 0.367628211593040160, 0.367674709775886010, 0.367721207039545580, 0.367767703383901630, 0.367814198808838480, 0.367860693314239820, 0.367907186899989860, +0.367953679565971530, 0.368000171312068970, 0.368046662138165950, 0.368093152044146720, 0.368139641029894220, 0.368186129095292580, 0.368232616240226070, 0.368279102464577570, +0.368325587768231320, 0.368372072151071150, 0.368418555612981150, 0.368465038153844350, 0.368511519773545020, 0.368558000471966850, 0.368604480248994060, 0.368650959104509680, +0.368697437038397910, 0.368743914050542580, 0.368790390140827820, 0.368836865309136670, 0.368883339555353410, 0.368929812879361770, 0.368976285281045980, 0.369022756760289120, +0.369069227316975330, 0.369115696950988950, 0.369162165662212830, 0.369208633450531340, 0.369255100315828260, 0.369301566257987820, 0.369348031276893090, 0.369394495372428240, +0.369440958544477230, 0.369487420792924180, 0.369533882117652150, 0.369580342518545430, 0.369626801995487860, 0.369673260548363690, 0.369719718177055960, 0.369766174881448920, +0.369812630661426500, 0.369859085516872850, 0.369905539447671130, 0.369951992453705520, 0.369998444534859920, 0.370044895691018620, 0.370091345922064720, 0.370137795227882430, +0.370184243608356060, 0.370230691063368640, 0.370277137592804560, 0.370323583196547570, 0.370370027874482090, 0.370416471626491050, 0.370462914452458880, 0.370509356352269450, +0.370555797325807010, 0.370602237372954670, 0.370648676493596730, 0.370695114687617120, 0.370741551954900110, 0.370787988295328830, 0.370834423708787550, 0.370880858195160260, +0.370927291754331200, 0.370973724386183530, 0.371020156090601520, 0.371066586867469520, 0.371113016716670690, 0.371159445638089280, 0.371205873631609230, 0.371252300697114960, +0.371298726834489500, 0.371345152043617230, 0.371391576324382080, 0.371437999676668410, 0.371484422100359310, 0.371530843595339170, 0.371577264161491950, 0.371623683798701920, +0.371670102506852280, 0.371716520285827410, 0.371762937135511230, 0.371809353055788160, 0.371855768046541250, 0.371902182107654910, 0.371948595239013520, 0.371995007440500290, +0.372041418711999470, 0.372087829053395160, 0.372134238464571660, 0.372180646945412140, 0.372227054495801070, 0.372273461115622320, 0.372319866804760310, 0.372366271563098210, +0.372412675390520480, 0.372459078286911050, 0.372505480252154300, 0.372551881286133480, 0.372598281388732970, 0.372644680559836680, 0.372691078799329170, 0.372737476107093510, +0.372783872483014200, 0.372830267926975210, 0.372876662438860920, 0.372923056018554580, 0.372969448665940620, 0.373015840380903410, 0.373062231163326210, 0.373108621013093440, +0.373155009930089100, 0.373201397914197650, 0.373247784965302310, 0.373294171083287500, 0.373340556268037300, 0.373386940519436050, 0.373433323837367100, 0.373479706221714780, +0.373526087672363230, 0.373572468189196870, 0.373618847772098920, 0.373665226420953900, 0.373711604135645750, 0.373757980916059050, 0.373804356762076910, 0.373850731673583960, +0.373897105650464520, 0.373943478692601970, 0.373989850799880730, 0.374036221972184780, 0.374082592209398770, 0.374128961511405840, 0.374175329878090490, 0.374221697309336850, +0.374268063805029360, 0.374314429365051270, 0.374360793989287120, 0.374407157677621010, 0.374453520429937400, 0.374499882246119580, 0.374546243126052060, 0.374592603069618950, +0.374638962076704720, 0.374685320147192690, 0.374731677280967350, 0.374778033477913220, 0.374824388737913570, 0.374870743060853000, 0.374917096446615530, 0.374963448895085760, +0.375009800406146950, 0.375056150979683640, 0.375102500615579980, 0.375148849313720440, 0.375195197073988350, 0.375241543896268290, 0.375287889780444420, 0.375334234726401150, +0.375380578734021920, 0.375426921803191260, 0.375473263933793320, 0.375519605125712590, 0.375565945378832420, 0.375612284693037420, 0.375658623068212070, 0.375704960504239790, +0.375751297001005120, 0.375797632558392210, 0.375843967176285600, 0.375890300854568700, 0.375936633593126010, 0.375982965391841730, 0.376029296250600500, 0.376075626169285580, +0.376121955147781570, 0.376168283185972730, 0.376214610283743590, 0.376260936440977470, 0.376307261657559010, 0.376353585933372430, 0.376399909268302300, 0.376446231662231960, +0.376492553115046040, 0.376538873626628750, 0.376585193196864680, 0.376631511825637200, 0.376677829512830960, 0.376724146258330560, 0.376770462062019420, 0.376816776923782070, +0.376863090843502780, 0.376909403821066190, 0.376955715856355680, 0.377002026949255890, 0.377048337099651020, 0.377094646307425730, 0.377140954572463380, 0.377187261894648680, +0.377233568273865780, 0.377279873709999440, 0.377326178202932960, 0.377372481752551060, 0.377418784358737940, 0.377465086021378240, 0.377511386740355450, 0.377557686515554160, +0.377603985346859130, 0.377650283234153670, 0.377696580177322550, 0.377742876176249910, 0.377789171230820560, 0.377835465340917830, 0.377881758506426410, 0.377928050727230680, +0.377974342003215170, 0.378020632334263420, 0.378066921720260070, 0.378113210161089400, 0.378159497656636150, 0.378205784206783750, 0.378252069811416850, 0.378298354470419820, +0.378344638183677310, 0.378390920951072740, 0.378437202772490930, 0.378483483647816530, 0.378529763576932960, 0.378576042559724990, 0.378622320596076920, 0.378668597685873460, +0.378714873828998160, 0.378761149025335590, 0.378807423274770180, 0.378853696577186590, 0.378899968932468410, 0.378946240340500280, 0.378992510801166530, 0.379038780314351900, +0.379085048879939930, 0.379131316497815400, 0.379177583167862490, 0.379223848889966080, 0.379270113664009590, 0.379316377489877900, 0.379362640367455210, 0.379408902296626330, +0.379455163277274800, 0.379501423309285320, 0.379547682392542720, 0.379593940526930520, 0.379640197712333430, 0.379686453948635870, 0.379732709235722610, 0.379778963573477120, +0.379825216961784280, 0.379871469400528350, 0.379917720889594190, 0.379963971428865290, 0.380010221018226460, 0.380056469657562120, 0.380102717346756940, 0.380148964085694600, +0.380195209874259870, 0.380241454712337110, 0.380287698599811100, 0.380333941536565470, 0.380380183522484930, 0.380426424557454400, 0.380472664641357320, 0.380518903774078650, +0.380565141955502730, 0.380611379185514300, 0.380657615463997070, 0.380703850790835740, 0.380750085165914850, 0.380796318589119110, 0.380842551060332210, 0.380888782579438870, +0.380935013146323610, 0.380981242760871250, 0.381027471422965340, 0.381073699132490780, 0.381119925889331970, 0.381166151693373700, 0.381212376544499690, 0.381258600442594740, +0.381304823387543680, 0.381351045379230150, 0.381397266417539020, 0.381443486502354710, 0.381489705633562100, 0.381535923811044840, 0.381582141034687740, 0.381628357304375330, +0.381674572619992380, 0.381720786981422640, 0.381767000388550880, 0.381813212841261630, 0.381859424339439810, 0.381905634882968970, 0.381951844471734080, 0.381998053105619520, +0.382044260784510310, 0.382090467508289950, 0.382136673276843530, 0.382182878090055740, 0.382229081947810410, 0.382275284849992350, 0.382321486796486090, 0.382367687787176500, +0.382413887821947300, 0.382460086900683340, 0.382506285023269220, 0.382552482189589760, 0.382598678399528710, 0.382644873652970950, 0.382691067949801010, 0.382737261289903820, +0.382783453673163020, 0.382829645099463660, 0.382875835568690150, 0.382922025080727420, 0.382968213635459300, 0.383014401232770580, 0.383060587872545880, 0.383106773554670100, +0.383152958279027010, 0.383199142045501540, 0.383245324853978610, 0.383291506704341920, 0.383337687596476460, 0.383383867530266820, 0.383430046505597920, 0.383476224522353530, +0.383522401580418500, 0.383568577679677500, 0.383614752820015450, 0.383660927001316150, 0.383707100223464490, 0.383753272486345110, 0.383799443789842930, 0.383845614133841770, +0.383891783518226560, 0.383937951942881880, 0.383984119407692730, 0.384030285912542850, 0.384076451457317280, 0.384122616041901010, 0.384168779666177800, 0.384214942330032620, +0.384261104033350060, 0.384307264776015180, 0.384353424557911720, 0.384399583378924660, 0.384445741238938710, 0.384491898137838740, 0.384538054075508670, 0.384584209051833440, +0.384630363066697730, 0.384676516119986490, 0.384722668211583570, 0.384768819341373970, 0.384814969509242270, 0.384861118715073610, 0.384907266958751770, 0.384953414240161720, +0.384999560559188550, 0.385045705915716070, 0.385091850309629340, 0.385137993740812920, 0.385184136209151980, 0.385230277714530330, 0.385276418256832900, 0.385322557835944490, +0.385368696451750090, 0.385414834104133520, 0.385460970792979860, 0.385507106518173770, 0.385553241279600330, 0.385599375077143370, 0.385645507910688020, 0.385691639780118830, +0.385737770685321000, 0.385783900626178290, 0.385830029602575900, 0.385876157614398360, 0.385922284661530890, 0.385968410743857290, 0.386014535861262610, 0.386060660013632040, +0.386106783200849460, 0.386152905422799840, 0.386199026679368010, 0.386245146970438990, 0.386291266295896720, 0.386337384655626280, 0.386383502049512330, 0.386429618477440120, +0.386475733939293410, 0.386521848434957350, 0.386567961964316700, 0.386614074527256490, 0.386660186123660770, 0.386706296753414560, 0.386752406416402570, 0.386798515112510010, +0.386844622841620740, 0.386890729603619920, 0.386936835398392690, 0.386982940225822910, 0.387029044085795860, 0.387075146978196170, 0.387121248902909000, 0.387167349859818320, +0.387213449848809230, 0.387259548869766550, 0.387305646922575410, 0.387351744007119750, 0.387397840123284710, 0.387443935270955050, 0.387490029450016040, 0.387536122660351480, +0.387582214901846630, 0.387628306174386210, 0.387674396477855450, 0.387720485812138360, 0.387766574177119960, 0.387812661572685570, 0.387858747998719170, 0.387904833455105850, +0.387950917941730420, 0.387997001458478150, 0.388043084005232960, 0.388089165581880000, 0.388135246188304190, 0.388181325824390690, 0.388227404490023410, 0.388273482185087670, +0.388319558909468180, 0.388365634663050240, 0.388411709445717790, 0.388457783257356030, 0.388503856097849880, 0.388549927967084430, 0.388595998864943840, 0.388642068791313190, +0.388688137746077740, 0.388734205729121600, 0.388780272740329950, 0.388826338779587610, 0.388872403846779790, 0.388918467941790580, 0.388964531064505240, 0.389010593214808520, +0.389056654392585740, 0.389102714597720890, 0.389148773830099270, 0.389194832089605760, 0.389240889376125550, 0.389286945689542700, 0.389333001029742440, 0.389379055396609770, +0.389425108790029780, 0.389471161209886670, 0.389517212656065650, 0.389563263128451580, 0.389609312626929770, 0.389655361151384270, 0.389701408701700390, 0.389747455277763390, +0.389793500879457300, 0.389839545506667500, 0.389885589159278840, 0.389931631837176610, 0.389977673540244870, 0.390023714268368960, 0.390069754021433730, 0.390115792799324570, +0.390161830601925500, 0.390207867429121890, 0.390253903280798560, 0.390299938156840940, 0.390345972057133010, 0.390392004981560180, 0.390438036930007340, 0.390484067902359790, +0.390530097898501680, 0.390576126918318280, 0.390622154961695060, 0.390668182028515940, 0.390714208118666470, 0.390760233232031410, 0.390806257368496170, 0.390852280527944910, +0.390898302710262990, 0.390944323915335230, 0.390990344143047120, 0.391036363393282740, 0.391082381665927400, 0.391128398960866150, 0.391174415277984360, 0.391220430617166050, +0.391266444978296660, 0.391312458361261220, 0.391358470765944990, 0.391404482192232170, 0.391450492640008200, 0.391496502109158320, 0.391542510599566850, 0.391588518111119050, +0.391634524643700020, 0.391680530197195060, 0.391726534771488330, 0.391772538366465310, 0.391818540982010910, 0.391864542618010630, 0.391910543274348490, 0.391956542950910040, +0.392002541647580250, 0.392048539364244500, 0.392094536100786980, 0.392140531857093130, 0.392186526633047980, 0.392232520428536900, 0.392278513243444090, 0.392324505077654980, +0.392370495931054660, 0.392416485803528500, 0.392462474694960710, 0.392508462605236700, 0.392554449534242010, 0.392600435481860740, 0.392646420447978370, 0.392692404432479990, +0.392738387435250970, 0.392784369456175560, 0.392830350495139260, 0.392876330552027090, 0.392922309626724530, 0.392968287719115740, 0.393014264829086250, 0.393060240956521090, +0.393106216101305690, 0.393152190263324430, 0.393198163442462610, 0.393244135638605440, 0.393290106851638340, 0.393336077081445520, 0.393382046327912570, 0.393428014590924860, +0.393473981870366750, 0.393519948166123620, 0.393565913478080680, 0.393611877806123330, 0.393657841150135910, 0.393703803510003840, 0.393749764885612310, 0.393795725276846750, +0.393841684683591490, 0.393887643105731990, 0.393933600543153410, 0.393979556995741220, 0.394025512463379690, 0.394071466945954460, 0.394117420443350520, 0.394163372955453450, +0.394209324482147520, 0.394255275023318310, 0.394301224578851250, 0.394347173148630770, 0.394393120732542400, 0.394439067330471180, 0.394485012942302700, 0.394530957567921280, +0.394576901207212450, 0.394622843860061410, 0.394668785526353650, 0.394714726205973530, 0.394760665898806600, 0.394806604604737930, 0.394852542323653240, 0.394898479055436790, +0.394944414799974110, 0.394990349557150400, 0.395036283326851200, 0.395082216108960880, 0.395128147903365090, 0.395174078709948860, 0.395220008528597840, 0.395265937359196460, +0.395311865201630200, 0.395357792055784640, 0.395403717921544220, 0.395449642798794520, 0.395495566687420750, 0.395541489587308390, 0.395587411498341980, 0.395633332420406990, +0.395679252353388690, 0.395725171297172660, 0.395771089251643280, 0.395817006216686200, 0.395862922192186550, 0.395908837178030050, 0.395954751174101060, 0.396000664180285180, +0.396046576196467660, 0.396092487222534040, 0.396138397258368860, 0.396184306303857650, 0.396230214358886110, 0.396276121423338620, 0.396322027497100830, 0.396367932580057980, +0.396413836672095680, 0.396459739773098400, 0.396505641882951730, 0.396551543001541000, 0.396597443128751780, 0.396643342264468570, 0.396689240408577000, 0.396735137560962350, +0.396781033721510250, 0.396826928890105180, 0.396872823066632740, 0.396918716250978300, 0.396964608443027440, 0.397010499642664660, 0.397056389849775590, 0.397102279064246000, +0.397148167285960310, 0.397194054514804160, 0.397239940750662930, 0.397285825993422210, 0.397331710242966540, 0.397377593499181610, 0.397423475761952690, 0.397469357031165480, +0.397515237306704460, 0.397561116588455330, 0.397606994876303410, 0.397652872170134450, 0.397698748469832890, 0.397744623775284470, 0.397790498086374460, 0.397836371402988610, +0.397882243725011460, 0.397928115052328670, 0.397973985384825980, 0.398019854722387990, 0.398065723064900290, 0.398111590412248360, 0.398157456764317800, 0.398203322120993190, +0.398249186482160290, 0.398295049847704420, 0.398340912217511390, 0.398386773591465570, 0.398432633969452890, 0.398478493351358600, 0.398524351737068520, 0.398570209126467120, +0.398616065519440180, 0.398661920915873100, 0.398707775315651600, 0.398753628718660270, 0.398799481124784920, 0.398845332533910800, 0.398891182945923790, 0.398937032360708380, +0.398982880778150420, 0.399028728198135670, 0.399074574620548680, 0.399120420045275260, 0.399166264472200770, 0.399212107901211030, 0.399257950332190640, 0.399303791765025340, +0.399349632199600570, 0.399395471635802140, 0.399441310073514630, 0.399487147512623820, 0.399532983953015170, 0.399578819394574460, 0.399624653837186260, 0.399670487280736510, +0.399716319725110460, 0.399762151170194040, 0.399807981615871830, 0.399853811062029660, 0.399899639508553400, 0.399945466955327620, 0.399991293402238160, 0.400037118849170480, +0.400082943296010410, 0.400128766742642580, 0.400174589188952820, 0.400220410634826610, 0.400266231080149750, 0.400312050524806950, 0.400357868968683970, 0.400403686411666350, +0.400449502853639890, 0.400495318294489310, 0.400541132734100410, 0.400586946172358680, 0.400632758609149990, 0.400678570044359030, 0.400724380477871620, 0.400770189909573640, +0.400815998339349780, 0.400861805767085970, 0.400907612192667630, 0.400953417615980630, 0.400999222036909740, 0.401045025455340760, 0.401090827871159180, 0.401136629284250980, +0.401182429694500800, 0.401228229101794560, 0.401274027506017710, 0.401319824907056260, 0.401365621304794750, 0.401411416699119280, 0.401457211089915220, 0.401503004477068550, +0.401548796860463910, 0.401594588239987340, 0.401640378615524260, 0.401686167986960660, 0.401731956354181240, 0.401777743717071980, 0.401823530075518690, 0.401869315429406180, +0.401915099778620390, 0.401960883123046840, 0.402006665462571520, 0.402052446797079130, 0.402098227126455600, 0.402144006450586510, 0.402189784769357790, 0.402235562082654260, +0.402281338390361790, 0.402327113692365960, 0.402372887988552750, 0.402418661278806930, 0.402464433563014480, 0.402510204841060870, 0.402555975112832250, 0.402601744378213220, +0.402647512637089870, 0.402693279889348110, 0.402739046134872770, 0.402784811373549770, 0.402830575605264810, 0.402876338829903760, 0.402922101047351490, 0.402967862257493980, +0.403013622460216770, 0.403059381655405950, 0.403105139842946210, 0.403150897022723660, 0.403196653194623890, 0.403242408358532870, 0.403288162514335410, 0.403333915661917560, +0.403379667801164970, 0.403425418931963540, 0.403471169054198220, 0.403516918167754920, 0.403562666272519740, 0.403608413368377490, 0.403654159455214270, 0.403699904532915600, +0.403745648601367580, 0.403791391660455020, 0.403837133710063970, 0.403882874750080110, 0.403928614780389440, 0.403974353800876870, 0.404020091811428390, 0.404065828811929710, +0.404111564802266840, 0.404157299782324670, 0.404203033751989240, 0.404248766711146180, 0.404294498659681640, 0.404340229597480500, 0.404385959524428740, 0.404431688440412500, +0.404477416345316590, 0.404523143239027220, 0.404568869121429920, 0.404614593992410900, 0.404660317851854970, 0.404706040699648220, 0.404751762535676410, 0.404797483359825570, +0.404843203171980640, 0.404888921972027690, 0.404934639759852440, 0.404980356535340980, 0.405026072298378230, 0.405071787048850330, 0.405117500786642940, 0.405163213511642200, +0.405208925223733030, 0.405254635922801530, 0.405300345608733460, 0.405346054281414900, 0.405391761940730840, 0.405437468586567370, 0.405483174218810580, 0.405528878837345510, +0.405574582442058240, 0.405620285032834480, 0.405665986609560440, 0.405711687172121030, 0.405757386720402350, 0.405803085254290260, 0.405848782773670870, 0.405894479278429090, +0.405940174768451120, 0.405985869243622680, 0.406031562703830010, 0.406077255148958040, 0.406122946578892920, 0.406168636993520400, 0.406214326392726750, 0.406260014776396840, +0.406305702144416910, 0.406351388496673130, 0.406397073833050460, 0.406442758153435110, 0.406488441457712850, 0.406534123745769920, 0.406579805017491250, 0.406625485272763100, +0.406671164511471170, 0.406716842733501840, 0.406762519938739910, 0.406808196127071700, 0.406853871298383020, 0.406899545452560070, 0.406945218589487840, 0.406990890709052530, +0.407036561811140060, 0.407082231895636580, 0.407127900962427070, 0.407173569011397840, 0.407219236042435100, 0.407264902055423820, 0.407310567050250320, 0.407356231026800410, +0.407401893984960290, 0.407447555924615070, 0.407493216845650930, 0.407538876747953750, 0.407584535631409840, 0.407630193495904130, 0.407675850341322920, 0.407721506167552150, +0.407767160974477960, 0.407812814761985500, 0.407858467529960970, 0.407904119278290290, 0.407949770006859720, 0.407995419715554310, 0.408041068404260350, 0.408086716072863730, +0.408132362721250750, 0.408178008349306400, 0.408223652956917090, 0.408269296543968980, 0.408314939110347270, 0.408360580655938220, 0.408406221180627750, 0.408451860684302060, +0.408497499166846360, 0.408543136628146900, 0.408588773068089610, 0.408634408486560740, 0.408680042883445500, 0.408725676258630100, 0.408771308612000560, 0.408816939943443150, +0.408862570252842950, 0.408908199540086390, 0.408953827805059290, 0.408999455047648010, 0.409045081267737700, 0.409090706465214670, 0.409136330639965300, 0.409181953791874720, +0.409227575920829200, 0.409273197026714770, 0.409318817109417750, 0.409364436168823340, 0.409410054204817800, 0.409455671217287100, 0.409501287206117610, 0.409546902171194550, +0.409592516112404210, 0.409638129029632590, 0.409683740922766050, 0.409729351791689730, 0.409774961636290070, 0.409820570456452980, 0.409866178252064840, 0.409911785023010900, +0.409957390769177480, 0.410002995490450990, 0.410048599186716600, 0.410094201857860720, 0.410139803503769330, 0.410185404124328860, 0.410231003719424450, 0.410276602288942530, +0.410322199832769070, 0.410367796350790570, 0.410413391842892160, 0.410458986308960270, 0.410504579748880940, 0.410550172162540530, 0.410595763549824300, 0.410641353910618680, +0.410686943244809640, 0.410732531552283620, 0.410778118832925920, 0.410823705086622910, 0.410869290313261030, 0.410914874512725570, 0.410960457684902860, 0.411006039829679040, +0.411051620946940530, 0.411097201036572550, 0.411142780098461560, 0.411188358132493600, 0.411233935138555220, 0.411279511116531550, 0.411325086066309080, 0.411370659987773950, +0.411416232880812530, 0.411461804745310130, 0.411507375581153250, 0.411552945388227900, 0.411598514166420570, 0.411644081915616580, 0.411689648635702400, 0.411735214326564070, +0.411780778988088130, 0.411826342620159820, 0.411871905222665700, 0.411917466795492180, 0.411963027338524580, 0.412008586851649430, 0.412054145334752820, 0.412099702787721230, +0.412145259210439980, 0.412190814602795610, 0.412236368964674190, 0.412281922295962280, 0.412327474596545120, 0.412373025866309250, 0.412418576105140880, 0.412464125312926420, +0.412509673489551250, 0.412555220634901960, 0.412600766748864530, 0.412646311831325660, 0.412691855882170560, 0.412737398901285860, 0.412782940888558050, 0.412828481843872440, +0.412874021767115680, 0.412919560658173870, 0.412965098516933530, 0.413010635343280030, 0.413056171137099970, 0.413101705898279490, 0.413147239626705130, 0.413192772322262260, +0.413238303984837460, 0.413283834614316890, 0.413329364210587190, 0.413374892773533620, 0.413420420303042880, 0.413465946799001060, 0.413511472261294750, 0.413556996689809390, +0.413602520084431490, 0.413648042445047710, 0.413693563771543480, 0.413739084063805270, 0.413784603321719400, 0.413830121545172400, 0.413875638734049700, 0.413921154888237890, +0.413966670007623220, 0.414012184092092230, 0.414057697141530400, 0.414103209155824380, 0.414148720134860260, 0.414194230078524790, 0.414239738986703300, 0.414285246859282530, +0.414330753696148580, 0.414376259497188200, 0.414421764262286720, 0.414467267991330880, 0.414512770684206830, 0.414558272340801230, 0.414603772960999590, 0.414649272544688530, +0.414694771091754680, 0.414740268602083460, 0.414785765075561640, 0.414831260512075360, 0.414876754911511330, 0.414922248273755010, 0.414967740598693120, 0.415013231886211810, +0.415058722136197880, 0.415104211348536700, 0.415149699523114980, 0.415195186659819080, 0.415240672758535550, 0.415286157819149960, 0.415331641841548970, 0.415377124825618890, +0.415422606771246370, 0.415468087678317000, 0.415513567546717310, 0.415559046376334170, 0.415604524167053010, 0.415650000918760530, 0.415695476631343040, 0.415740951304687300, +0.415786424938678730, 0.415831897533204100, 0.415877369088149760, 0.415922839603402370, 0.415968309078847520, 0.416013777514371850, 0.416059244909861740, 0.416104711265203930, +0.416150176580283970, 0.416195640854988560, 0.416241104089204010, 0.416286566282817130, 0.416332027435713400, 0.416377487547779650, 0.416422946618902560, 0.416468404648967670, +0.416513861637861800, 0.416559317585471320, 0.416604772491682870, 0.416650226356382160, 0.416695679179455820, 0.416741130960790300, 0.416786581700272380, 0.416832031397787570, +0.416877480053222730, 0.416922927666464160, 0.416968374237398690, 0.417013819765911840, 0.417059264251890440, 0.417104707695220960, 0.417150150095790040, 0.417195591453483340, +0.417241031768187720, 0.417286471039789890, 0.417331909268175430, 0.417377346453231270, 0.417422782594843720, 0.417468217692899600, 0.417513651747284550, 0.417559084757885390, +0.417604516724588480, 0.417649947647280690, 0.417695377525847620, 0.417740806360176130, 0.417786234150152650, 0.417831660895663930, 0.417877086596595670, 0.417922511252834690, +0.417967934864267480, 0.418013357430780770, 0.418058778952260290, 0.418104199428592890, 0.418149618859664950, 0.418195037245363390, 0.418240454585573850, 0.418285870880183150, +0.418331286129078160, 0.418376700332144580, 0.418422113489269280, 0.418467525600338620, 0.418512936665239590, 0.418558346683857830, 0.418603755656080160, 0.418649163581793160, +0.418694570460883600, 0.418739976293237230, 0.418785381078740910, 0.418830784817281140, 0.418876187508744830, 0.418921589153017640, 0.418966989749986470, 0.419012389299537880, +0.419057787801558670, 0.419103185255934540, 0.419148581662552530, 0.419193977021299400, 0.419239371332060960, 0.419284764594724140, 0.419330156809175350, 0.419375547975301580, +0.419420938092988530, 0.419466327162123120, 0.419511715182591950, 0.419557102154281880, 0.419602488077078620, 0.419647872950869140, 0.419693256775539980, 0.419738639550978120, +0.419784021277069210, 0.419829401953700280, 0.419874781580757810, 0.419920160158128830, 0.419965537685699050, 0.420010914163355400, 0.420056289590984840, 0.420101663968473200, +0.420147037295707400, 0.420192409572573980, 0.420237780798959960, 0.420283150974751110, 0.420328520099834350, 0.420373888174096270, 0.420419255197423900, 0.420464621169702960, +0.420509986090820520, 0.420555349960663070, 0.420600712779117650, 0.420646074546070060, 0.420691435261407290, 0.420736794925015920, 0.420782153536783000, 0.420827511096594220, +0.420872867604336730, 0.420918223059897070, 0.420963577463162210, 0.421008930814018020, 0.421054283112351550, 0.421099634358049700, 0.421144984550998410, 0.421190333691084660, +0.421235681778195040, 0.421281028812216630, 0.421326374793035250, 0.421371719720537940, 0.421417063594611340, 0.421462406415142490, 0.421507748182017190, 0.421553088895122550, +0.421598428554345150, 0.421643767159572140, 0.421689104710689270, 0.421734441207583630, 0.421779776650141880, 0.421825111038251150, 0.421870444371797160, 0.421915776650667150, +0.421961107874748000, 0.422006438043925740, 0.422051767158087400, 0.422097095217119630, 0.422142422220909470, 0.422187748169342900, 0.422233073062306950, 0.422278396899688320, +0.422323719681374110, 0.422369041407250180, 0.422414362077203680, 0.422459681691121250, 0.422505000248890040, 0.422550317750395870, 0.422595634195525980, 0.422640949584166980, +0.422686263916205950, 0.422731577191528930, 0.422776889410022950, 0.422822200571575100, 0.422867510676071420, 0.422912819723398950, 0.422958127713444380, 0.423003434646094910, +0.423048740521236480, 0.423094045338756220, 0.423139349098540780, 0.423184651800477430, 0.423229953444452020, 0.423275254030351710, 0.423320553558063310, 0.423365852027473900, +0.423411149438469410, 0.423456445790937110, 0.423501741084763680, 0.423547035319836280, 0.423592328496040950, 0.423637620613264760, 0.423682911671394940, 0.423728201670317380, +0.423773490609919370, 0.423818778490087640, 0.423864065310709300, 0.423909351071670440, 0.423954635772858250, 0.423999919414159380, 0.424045201995461200, 0.424090483516649570, +0.424135763977611710, 0.424181043378234480, 0.424226321718405020, 0.424271598998009370, 0.424316875216934670, 0.424362150375067860, 0.424407424472296010, 0.424452697508505230, +0.424497969483582700, 0.424543240397415260, 0.424588510249890140, 0.424633779040893280, 0.424679046770312040, 0.424724313438033520, 0.424769579043943860, 0.424814843587930260, +0.424860107069879530, 0.424905369489678940, 0.424950630847214520, 0.424995891142373520, 0.425041150375042810, 0.425086408545109600, 0.425131665652459970, 0.425176921696981180, +0.425222176678560100, 0.425267430597083940, 0.425312683452438830, 0.425357935244512040, 0.425403185973190380, 0.425448435638361160, 0.425493684239910460, 0.425538931777725560, +0.425584178251693700, 0.425629423661701030, 0.425674668007634760, 0.425719911289381860, 0.425765153506829530, 0.425810394659863980, 0.425855634748372400, 0.425900873772241730, +0.425946111731359320, 0.425991348625611170, 0.426036584454884680, 0.426081819219066740, 0.426127052918044650, 0.426172285551704500, 0.426217517119933660, 0.426262747622619060, +0.426307977059647960, 0.426353205430906490, 0.426398432736282030, 0.426443658975661890, 0.426488884148932210, 0.426534108255980320, 0.426579331296693120, 0.426624553270958050, +0.426669774178661140, 0.426714994019689820, 0.426760212793931000, 0.426805430501272120, 0.426850647141599200, 0.426895862714799680, 0.426941077220760470, 0.426986290659368990, +0.427031503030511410, 0.427076714334075010, 0.427121924569946910, 0.427167133738014350, 0.427212341838163530, 0.427257548870281890, 0.427302754834256390, 0.427347959729974360, +0.427393163557322100, 0.427438366316186870, 0.427483568006456150, 0.427528768628016090, 0.427573968180754100, 0.427619166664557240, 0.427664364079312850, 0.427709560424907100, +0.427754755701227510, 0.427799949908161000, 0.427845143045595010, 0.427890335113415790, 0.427935526111510700, 0.427980716039766840, 0.428025904898071520, 0.428071092686311110, +0.428116279404372910, 0.428161465052144030, 0.428206649629511940, 0.428251833136362780, 0.428297015572584040, 0.428342196938063140, 0.428387377232686380, 0.428432556456341150, +0.428477734608914530, 0.428522911690293990, 0.428568087700365810, 0.428613262639017330, 0.428658436506135780, 0.428703609301608450, 0.428748781025321770, 0.428793951677163110, +0.428839121257019560, 0.428884289764778600, 0.428929457200326550, 0.428974623563550820, 0.429019788854338560, 0.429064953072577250, 0.429110116218153090, 0.429155278290953680, +0.429200439290866490, 0.429245599217777770, 0.429290758071575070, 0.429335915852145480, 0.429381072559376460, 0.429426228193154400, 0.429471382753366770, 0.429516536239900660, +0.429561688652643660, 0.429606839991481970, 0.429651990256303180, 0.429697139446994500, 0.429742287563443290, 0.429787434605535980, 0.429832580573160090, 0.429877725466202790, +0.429922869284551530, 0.429968012028092710, 0.430013153696713830, 0.430058294290302510, 0.430103433808744990, 0.430148572251928930, 0.430193709619741460, 0.430238845912070120, +0.430283981128801230, 0.430329115269822370, 0.430374248335020800, 0.430419380324283950, 0.430464511237498240, 0.430509641074551250, 0.430554769835330200, 0.430599897519722610, +0.430645024127614850, 0.430690149658894570, 0.430735274113448920, 0.430780397491165420, 0.430825519791930620, 0.430870641015631940, 0.430915761162156690, 0.430960880231392450, +0.431005998223225610, 0.431051115137543740, 0.431096230974234500, 0.431141345733184300, 0.431186459414280690, 0.431231572017410970, 0.431276683542462740, 0.431321793989322360, +0.431366903357877470, 0.431412011648015400, 0.431457118859623620, 0.431502224992588720, 0.431547330046798240, 0.431592434022139370, 0.431637536918499880, 0.431682638735766120, +0.431727739473825810, 0.431772839132566090, 0.431817937711874710, 0.431863035211638050, 0.431908131631743850, 0.431953226972079720, 0.431998321232532070, 0.432043414412988660, +0.432088506513336690, 0.432133597533463860, 0.432178687473256660, 0.432223776332602730, 0.432268864111389320, 0.432313950809504190, 0.432359036426833760, 0.432404120963265800, +0.432449204418687510, 0.432494286792986570, 0.432539368086049540, 0.432584448297764050, 0.432629527428017470, 0.432674605476697500, 0.432719682443690580, 0.432764758328884500, +0.432809833132166870, 0.432854906853424260, 0.432899979492544440, 0.432945051049414610, 0.432990121523922580, 0.433035190915954830, 0.433080259225399110, 0.433125326452142740, +0.433170392596073480, 0.433215457657077810, 0.433260521635043530, 0.433305584529857900, 0.433350646341408740, 0.433395707069582580, 0.433440766714267120, 0.433485825275349730, +0.433530882752718230, 0.433575939146259080, 0.433620994455860110, 0.433666048681408620, 0.433711101822792430, 0.433756153879898080, 0.433801204852613360, 0.433846254740826000, +0.433891303544422620, 0.433936351263291000, 0.433981397897318490, 0.434026443446392850, 0.434071487910400730, 0.434116531289229890, 0.434161573582767750, 0.434206614790902060, +0.434251654913519410, 0.434296693950507630, 0.434341731901754120, 0.434386768767146660, 0.434431804546571930, 0.434476839239917640, 0.434521872847071280, 0.434566905367920640, +0.434611936802352330, 0.434656967150254150, 0.434701996411513970, 0.434747024586018440, 0.434792051673655310, 0.434837077674312010, 0.434882102587876460, 0.434927126414235250, +0.434972149153276260, 0.435017170804886890, 0.435062191368954960, 0.435107210845367130, 0.435152229234011310, 0.435197246534774930, 0.435242262747545790, 0.435287277872210670, +0.435332291908657300, 0.435377304856773170, 0.435422316716446210, 0.435467327487563060, 0.435512337170011590, 0.435557345763679720, 0.435602353268454030, 0.435647359684222470, +0.435692365010872500, 0.435737369248292040, 0.435782372396367750, 0.435827374454987540, 0.435872375424038890, 0.435917375303409680, 0.435962374092986660, 0.436007371792657690, +0.436052368402310260, 0.436097363921832350, 0.436142358351110650, 0.436187351690032980, 0.436232343938486980, 0.436277335096360520, 0.436322325163540300, 0.436367314139914310, +0.436412302025370400, 0.436457288819795340, 0.436502274523077110, 0.436547259135103120, 0.436592242655761410, 0.436637225084938680, 0.436682206422522920, 0.436727186668401660, +0.436772165822462750, 0.436817143884593080, 0.436862120854680570, 0.436907096732612740, 0.436952071518277580, 0.436997045211561800, 0.437042017812353410, 0.437086989320540020, +0.437131959736009550, 0.437176929058648740, 0.437221897288345650, 0.437266864424987800, 0.437311830468463170, 0.437356795418658570, 0.437401759275462040, 0.437446722038761450, +0.437491683708443660, 0.437536644284396700, 0.437581603766508060, 0.437626562154665890, 0.437671519448756870, 0.437716475648669060, 0.437761430754290030, 0.437806384765507870, +0.437851337682209350, 0.437896289504282440, 0.437941240231614850, 0.437986189864094540, 0.438031138401608340, 0.438076085844044340, 0.438121032191290120, 0.438165977443233660, +0.438210921599761940, 0.438255864660762830, 0.438300806626124530, 0.438345747495733800, 0.438390687269478660, 0.438435625947246830, 0.438480563528926340, 0.438525500014404050, +0.438570435403567990, 0.438615369696305820, 0.438660302892505680, 0.438705234992054330, 0.438750165994839900, 0.438795095900750110, 0.438840024709672930, 0.438884952421495280, +0.438929879036105310, 0.438974804553390610, 0.439019728973239260, 0.439064652295538260, 0.439109574520175570, 0.439154495647039340, 0.439199415676016500, 0.439244334606995130, +0.439289252439862890, 0.439334169174507960, 0.439379084810817170, 0.439423999348678710, 0.439468912787980230, 0.439513825128609870, 0.439558736370454510, 0.439603646513402340, +0.439648555557341060, 0.439693463502158820, 0.439738370347742490, 0.439783276093980210, 0.439828180740759740, 0.439873084287969280, 0.439917986735495650, 0.439962888083227090, +0.440007788331051310, 0.440052687478856400, 0.440097585526529440, 0.440142482473958490, 0.440187378321031720, 0.440232273067636130, 0.440277166713659850, 0.440322059258990650, +0.440366950703516720, 0.440411841047125000, 0.440456730289703670, 0.440501618431140500, 0.440546505471323730, 0.440591391410140250, 0.440636276247478310, 0.440681159983225660, +0.440726042617270550, 0.440770924149499920, 0.440815804579801960, 0.440860683908064540, 0.440905562134175750, 0.440950439258022690, 0.440995315279493540, 0.441040190198476460, +0.441085064014858530, 0.441129936728527900, 0.441174808339372500, 0.441219678847280420, 0.441264548252138790, 0.441309416553835760, 0.441354283752259210, 0.441399149847297330, +0.441444014838837160, 0.441488878726767010, 0.441533741510974630, 0.441578603191348280, 0.441623463767775060, 0.441668323240143160, 0.441713181608340440, 0.441758038872255180, +0.441802895031774390, 0.441847750086786450, 0.441892604037179450, 0.441937456882840580, 0.441982308623658060, 0.442027159259519740, 0.442072008790313940, 0.442116857215927750, +0.442161704536249370, 0.442206550751166770, 0.442251395860568160, 0.442296239864340690, 0.442341082762372610, 0.442385924554551830, 0.442430765240766630, 0.442475604820904090, +0.442520443294852570, 0.442565280662499950, 0.442610116923734530, 0.442654952078443350, 0.442699786126514890, 0.442744619067837300, 0.442789450902297770, 0.442834281629784610, +0.442879111250185750, 0.442923939763389560, 0.442968767169283070, 0.443013593467754650, 0.443058418658692280, 0.443103242741984260, 0.443148065717517750, 0.443192887585181050, +0.443237708344862150, 0.443282527996449350, 0.443327346539829860, 0.443372163974891990, 0.443416980301523660, 0.443461795519613340, 0.443506609629048140, 0.443551422629716360, +0.443596234521506090, 0.443641045304305590, 0.443685854978002110, 0.443730663542483970, 0.443775470997639590, 0.443820277343356110, 0.443865082579521950, 0.443909886706025050, +0.443954689722753870, 0.443999491629595570, 0.444044292426438500, 0.444089092113170770, 0.444133890689680620, 0.444178688155855430, 0.444223484511583440, 0.444268279756752820, +0.444313073891251850, 0.444357866914967810, 0.444402658827789070, 0.444447449629603750, 0.444492239320300130, 0.444537027899765570, 0.444581815367888430, 0.444626601724557150, +0.444671386969658970, 0.444716171103082260, 0.444760954124715220, 0.444805736034446120, 0.444850516832162310, 0.444895296517752230, 0.444940075091103890, 0.444984852552105740, +0.445029628900645070, 0.445074404136610370, 0.445119178259889610, 0.445163951270371280, 0.445208723167942740, 0.445253493952492360, 0.445298263623908230, 0.445343032182078880, +0.445387799626891510, 0.445432565958234660, 0.445477331175996800, 0.445522095280065260, 0.445566858270328380, 0.445611620146674440, 0.445656380908991790, 0.445701140557167810, +0.445745899091091020, 0.445790656510649420, 0.445835412815731640, 0.445880168006224880, 0.445924922082017670, 0.445969675042998230, 0.446014426889054960, 0.446059177620075240, +0.446103927235947550, 0.446148675736560090, 0.446193423121801320, 0.446238169391558580, 0.446282914545720390, 0.446327658584174950, 0.446372401506810790, 0.446417143313515170, +0.446461884004176750, 0.446506623578683980, 0.446551362036924250, 0.446596099378786140, 0.446640835604157740, 0.446685570712927690, 0.446730304704983320, 0.446775037580213140, +0.446819769338505420, 0.446864499979748640, 0.446909229503830220, 0.446953957910638740, 0.446998685200062360, 0.447043411371989610, 0.447088136426308010, 0.447132860362906060, +0.447177583181671940, 0.447222304882494260, 0.447267025465260430, 0.447311744929859030, 0.447356463276178620, 0.447401180504106710, 0.447445896613531850, 0.447490611604342230, +0.447535325476426490, 0.447580038229672020, 0.447624749863967500, 0.447669460379201080, 0.447714169775261410, 0.447758878052035900, 0.447803585209413210, 0.447848291247281540, +0.447892996165529580, 0.447937699964044640, 0.447982402642715550, 0.448027104201430440, 0.448071804640077900, 0.448116503958545520, 0.448161202156721840, 0.448205899234495610, +0.448250595191754140, 0.448295290028386250, 0.448339983744280140, 0.448384676339324440, 0.448429367813406700, 0.448474058166415500, 0.448518747398239160, 0.448563435508766320, +0.448608122497884510, 0.448652808365482440, 0.448697493111448300, 0.448742176735670850, 0.448786859238037520, 0.448831540618437110, 0.448876220876757770, 0.448920900012888310, +0.448965578026716220, 0.449010254918130180, 0.449054930687018520, 0.449099605333269870, 0.449144278856771880, 0.449188951257413150, 0.449233622535082420, 0.449278292689667290, +0.449322961721056400, 0.449367629629138120, 0.449412296413801150, 0.449456962074933020, 0.449501626612422540, 0.449546290026157980, 0.449590952316028080, 0.449635613481920380, +0.449680273523723640, 0.449724932441326270, 0.449769590234616930, 0.449814246903483210, 0.449858902447813900, 0.449903556867497330, 0.449948210162422260, 0.449992862332476260, +0.450037513377548100, 0.450082163297526590, 0.450126812092299270, 0.450171459761754880, 0.450216106305781850, 0.450260751724268990, 0.450305396017103790, 0.450350039184175150, +0.450394681225371410, 0.450439322140581360, 0.450483961929692590, 0.450528600592593920, 0.450573238129173770, 0.450617874539320900, 0.450662509822922940, 0.450707143979868720, +0.450751777010046650, 0.450796408913345490, 0.450841039689652940, 0.450885669338857820, 0.450930297860848930, 0.450974925255513860, 0.451019551522741480, 0.451064176662420210, +0.451108800674438930, 0.451153423558685210, 0.451198045315047980, 0.451242665943415610, 0.451287285443676970, 0.451331903815719690, 0.451376521059432710, 0.451421137174704390, +0.451465752161423650, 0.451510366019478140, 0.451554978748756660, 0.451599590349147760, 0.451644200820540300, 0.451688810162821920, 0.451733418375881550, 0.451778025459607990, +0.451822631413889010, 0.451867236238613410, 0.451911839933669730, 0.451956442498946900, 0.452001043934332490, 0.452045644239715490, 0.452090243414984440, 0.452134841460028080, +0.452179438374734290, 0.452224034158991870, 0.452268628812689420, 0.452313222335715750, 0.452357814727958610, 0.452402405989306980, 0.452446996119649280, 0.452491585118874550, +0.452536172986870430, 0.452580759723525850, 0.452625345328729390, 0.452669929802369970, 0.452714513144335360, 0.452759095354514420, 0.452803676432796180, 0.452848256379068340, +0.452892835193219820, 0.452937412875139220, 0.452981989424715510, 0.453026564841836450, 0.453071139126390960, 0.453115712278267580, 0.453160284297355390, 0.453204855183542030, +0.453249424936716550, 0.453293993556767530, 0.453338561043583890, 0.453383127397053500, 0.453427692617065230, 0.453472256703507770, 0.453516819656270050, 0.453561381475239890, +0.453605942160306250, 0.453650501711358180, 0.453695060128283480, 0.453739617410971070, 0.453784173559309670, 0.453828728573188230, 0.453873282452494530, 0.453917835197117650, +0.453962386806946230, 0.454006937281869190, 0.454051486621774410, 0.454096034826550920, 0.454140581896087300, 0.454185127830272710, 0.454229672628994830, 0.454274216292142820, +0.454318758819605210, 0.454363300211271140, 0.454407840467028420, 0.454452379586766100, 0.454496917570373250, 0.454541454417737630, 0.454585990128748450, 0.454630524703294290, +0.454675058141264190, 0.454719590442546060, 0.454764121607028950, 0.454808651634601550, 0.454853180525152890, 0.454897708278570900, 0.454942234894744610, 0.454986760373562780, +0.455031284714914440, 0.455075807918687460, 0.455120329984770980, 0.455164850913053700, 0.455209370703424650, 0.455253889355771770, 0.455298406869984180, 0.455342923245950600, +0.455387438483560110, 0.455431952582700580, 0.455476465543261210, 0.455520977365131030, 0.455565488048198080, 0.455609997592351320, 0.455654505997479640, 0.455699013263472060, +0.455743519390216570, 0.455788024377602240, 0.455832528225517900, 0.455877030933852620, 0.455921532502494340, 0.455966032931332250, 0.456010532220255120, 0.456055030369151960, +0.456099527377910930, 0.456144023246421000, 0.456188517974571050, 0.456233011562250210, 0.456277504009346410, 0.456321995315748910, 0.456366485481346780, 0.456410974506028020, +0.456455462389681820, 0.456499949132196990, 0.456544434733462730, 0.456588919193366920, 0.456633402511798850, 0.456677884688647230, 0.456722365723801320, 0.456766845617149090, +0.456811324368579800, 0.456855801977982150, 0.456900278445245390, 0.456944753770257510, 0.456989227952907810, 0.457033700993084990, 0.457078172890678370, 0.457122643645575870, +0.457167113257666790, 0.457211581726840290, 0.457256049052984450, 0.457300515235988530, 0.457344980275741280, 0.457389444172132010, 0.457433906925048710, 0.457478368534380620, +0.457522829000016620, 0.457567288321845960, 0.457611746499756670, 0.457656203533638060, 0.457700659423378900, 0.457745114168868480, 0.457789567769994910, 0.457834020226647380, +0.457878471538714800, 0.457922921706086510, 0.457967370728650460, 0.458011818606295970, 0.458056265338912360, 0.458100710926387660, 0.458145155368611220, 0.458189598665471880, +0.458234040816858920, 0.458278481822660510, 0.458322921682765840, 0.458367360397063940, 0.458411797965443960, 0.458456234387794090, 0.458500669664003660, 0.458545103793961570, +0.458589536777557090, 0.458633968614678420, 0.458678399305214760, 0.458722828849055130, 0.458767257246088860, 0.458811684496204020, 0.458856110599289990, 0.458900535555235630, +0.458944959363930370, 0.458989382025262290, 0.459033803539120820, 0.459078223905395160, 0.459122643123973610, 0.459167061194745370, 0.459211478117599550, 0.459255893892425380, +0.459300308519111130, 0.459344721997546060, 0.459389134327619240, 0.459433545509219940, 0.459477955542236360, 0.459522364426557920, 0.459566772162073590, 0.459611178748672690, +0.459655584186243470, 0.459699988474675300, 0.459744391613857160, 0.459788793603678410, 0.459833194444027260, 0.459877594134793180, 0.459921992675865480, 0.459966390067132410, +0.460010786308483350, 0.460055181399807330, 0.460099575340993770, 0.460143968131930870, 0.460188359772508050, 0.460232750262614340, 0.460277139602139120, 0.460321527790970690, +0.460365914828998410, 0.460410300716111330, 0.460454685452198920, 0.460499069037149430, 0.460543451470852240, 0.460587832753196420, 0.460632212884071410, 0.460676591863365460, +0.460720969690968040, 0.460765346366768640, 0.460809721890655390, 0.460854096262517890, 0.460898469482245170, 0.460942841549726650, 0.460987212464850580, 0.461031582227506560, +0.461075950837583510, 0.461120318294971020, 0.461164684599557340, 0.461209049751231950, 0.461253413749883930, 0.461297776595402780, 0.461342138287676780, 0.461386498826595440, +0.461430858212047880, 0.461475216443923530, 0.461519573522110760, 0.461563929446499040, 0.461608284216977530, 0.461652637833435690, 0.461696990295761830, 0.461741341603845560, +0.461785691757576280, 0.461830040756842360, 0.461874388601533400, 0.461918735291538430, 0.461963080826747030, 0.462007425207047520, 0.462051768432329420, 0.462096110502481950, +0.462140451417394570, 0.462184791176955710, 0.462229129781054790, 0.462273467229581130, 0.462317803522424130, 0.462362138659472290, 0.462406472640615070, 0.462450805465741690, +0.462495137134741660, 0.462539467647503420, 0.462583797003916500, 0.462628125203870480, 0.462672452247253730, 0.462716778133955840, 0.462761102863866070, 0.462805426436873890, +0.462849748852867780, 0.462894070111737280, 0.462938390213371580, 0.462982709157660320, 0.463027026944491940, 0.463071343573755900, 0.463115659045341580, 0.463159973359138500, +0.463204286515035040, 0.463248598512920880, 0.463292909352685240, 0.463337219034217760, 0.463381527557406800, 0.463425834922142010, 0.463470141128313030, 0.463514446175808340, +0.463558750064517470, 0.463603052794329780, 0.463647354365134820, 0.463691654776821120, 0.463735954029278250, 0.463780252122395490, 0.463824549056062520, 0.463868844830167770, +0.463913139444600890, 0.463957432899251180, 0.464001725194008290, 0.464046016328760690, 0.464090306303398040, 0.464134595117809630, 0.464178882771885130, 0.464223169265512990, +0.464267454598582980, 0.464311738770984690, 0.464356021782606710, 0.464400303633338620, 0.464444584323069790, 0.464488863851689910, 0.464533142219087480, 0.464577419425152180, +0.464621695469773330, 0.464665970352840630, 0.464710244074242610, 0.464754516633869020, 0.464798788031609070, 0.464843058267352620, 0.464887327340988090, 0.464931595252405240, +0.464975862001493380, 0.465020127588142260, 0.465064392012240480, 0.465108655273677670, 0.465152917372343270, 0.465197178308126960, 0.465241438080917280, 0.465285696690603990, +0.465329954137076900, 0.465374210420224530, 0.465418465539936600, 0.465462719496102520, 0.465506972288612040, 0.465551223917353760, 0.465595474382217380, 0.465639723683092310, +0.465683971819868370, 0.465728218792434090, 0.465772464600679230, 0.465816709244493250, 0.465860952723765880, 0.465905195038385730, 0.465949436188242580, 0.465993676173225850, +0.466037914993225330, 0.466082152648129630, 0.466126389137828560, 0.466170624462211860, 0.466214858621168240, 0.466259091614587510, 0.466303323442358970, 0.466347554104372560, +0.466391783600516860, 0.466436011930681740, 0.466480239094756550, 0.466524465092631180, 0.466568689924194260, 0.466612913589335600, 0.466657136087944620, 0.466701357419911260, +0.466745577585124080, 0.466789796583472970, 0.466834014414847340, 0.466878231079137060, 0.466922446576230830, 0.466966660906018520, 0.467010874068389930, 0.467055086063233700, +0.467099296890439830, 0.467143506549897670, 0.467187715041497200, 0.467231922365127010, 0.467276128520677010, 0.467320333508036700, 0.467364537327095930, 0.467408739977743400, +0.467452941459869100, 0.467497141773362380, 0.467541340918113220, 0.467585538894010330, 0.467629735700943570, 0.467673931338802470, 0.467718125807476960, 0.467762319106855730, +0.467806511236828700, 0.467850702197285420, 0.467894891988115740, 0.467939080609208410, 0.467983268060453430, 0.468027454341740650, 0.468071639452958880, 0.468115823393997990, +0.468160006164747510, 0.468204187765097420, 0.468248368194936480, 0.468292547454154660, 0.468336725542641390, 0.468380902460286740, 0.468425078206979480, 0.468469252782609480, +0.468513426187066370, 0.468557598420240030, 0.468601769482019370, 0.468645939372294260, 0.468690108090954290, 0.468734275637889440, 0.468778442012988570, 0.468822607216141550, +0.468866771247238360, 0.468910934106167910, 0.468955095792820130, 0.468999256307084560, 0.469043415648851270, 0.469087573818009030, 0.469131730814447920, 0.469175886638057430, +0.469220041288727630, 0.469264194766347340, 0.469308347070806540, 0.469352498201994870, 0.469396648159802370, 0.469440796944117830, 0.469484944554831360, 0.469529090991832490, +0.469573236255011240, 0.469617380344256540, 0.469661523259458420, 0.469705665000506870, 0.469749805567290730, 0.469793944959700120, 0.469838083177624650, 0.469882220220954330, +0.469926356089578110, 0.469970490783385930, 0.470014624302267590, 0.470058756646113070, 0.470102887814811240, 0.470147017808252190, 0.470191146626325660, 0.470235274268921590, +0.470279400735928940, 0.470323526027237810, 0.470367650142737900, 0.470411773082319180, 0.470455894845870690, 0.470500015433282460, 0.470544134844444570, 0.470588253079245960, +0.470632370137576690, 0.470676486019326550, 0.470720600724385540, 0.470764714252642660, 0.470808826603987980, 0.470852937778311220, 0.470897047775502560, 0.470941156595450830, +0.470985264238046260, 0.471029370703178460, 0.471073475990737680, 0.471117580100612830, 0.471161683032694010, 0.471205784786870970, 0.471249885363033860, 0.471293984761071650, +0.471338082980874480, 0.471382180022332120, 0.471426275885334700, 0.471470370569771200, 0.471514464075531770, 0.471558556402506550, 0.471602647550584560, 0.471646737519655910, +0.471690826309610460, 0.471734913920338340, 0.471779000351728540, 0.471823085603671260, 0.471867169676056240, 0.471911252568773700, 0.471955334281712600, 0.471999414814763210, +0.472043494167815270, 0.472087572340758990, 0.472131649333483390, 0.472175725145878630, 0.472219799777834570, 0.472263873229241460, 0.472307945499988220, 0.472352016589965120, +0.472396086499062400, 0.472440155227169030, 0.472484222774175290, 0.472528289139971030, 0.472572354324446390, 0.472616418327490460, 0.472660481148993510, 0.472704542788845380, +0.472748603246936290, 0.472792662523155270, 0.472836720617392570, 0.472880777529538110, 0.472924833259482090, 0.472968887807113600, 0.473012941172322900, 0.473056993354999840, +0.473101044355034640, 0.473145094172316480, 0.473189142806735570, 0.473233190258182220, 0.473277236526545520, 0.473321281611715660, 0.473365325513582680, 0.473409368232036720, +0.473453409766966930, 0.473497450118263660, 0.473541489285816740, 0.473585527269516530, 0.473629564069252050, 0.473673599684913740, 0.473717634116391340, 0.473761667363575280, +0.473805699426354700, 0.473849730304619850, 0.473893759998260670, 0.473937788507167450, 0.473981815831229390, 0.474025841970336810, 0.474069866924379580, 0.474113890693248110, +0.474157913276831540, 0.474201934675020140, 0.474245954887704320, 0.474289973914773230, 0.474333991756117180, 0.474378008411626200, 0.474422023881190540, 0.474466038164699460, +0.474510051262043260, 0.474554063173111940, 0.474598073897795850, 0.474642083435984190, 0.474686091787567320, 0.474730098952435230, 0.474774104930478280, 0.474818109721585670, +0.474862113325647820, 0.474906115742554650, 0.474950116972196580, 0.474994117014462810, 0.475038115869243830, 0.475082113536429870, 0.475126110015910260, 0.475170105307575360, +0.475214099411315210, 0.475258092327020210, 0.475302084054579580, 0.475346074593883780, 0.475390063944822750, 0.475434052107286950, 0.475478039081165650, 0.475522024866349200, +0.475566009462727760, 0.475609992870191680, 0.475653975088630170, 0.475697956117933750, 0.475741935957992470, 0.475785914608696680, 0.475829892069935760, 0.475873868341600110, +0.475917843423580180, 0.475961817315765260, 0.476005790018045770, 0.476049761530311810, 0.476093731852453850, 0.476137700984361150, 0.476181668925924170, 0.476225635677033080, +0.476269601237578280, 0.476313565607449090, 0.476357528786535980, 0.476401490774728990, 0.476445451571918750, 0.476489411177994430, 0.476533369592846650, 0.476577326816365390, +0.476621282848441190, 0.476665237688963410, 0.476709191337822580, 0.476753143794909070, 0.476797095060112420, 0.476841045133322980, 0.476884994014430910, 0.476928941703326780, +0.476972888199899860, 0.477016833504040780, 0.477060777615639590, 0.477104720534586800, 0.477148662260771850, 0.477192602794085260, 0.477236542134417190, 0.477280480281658090, +0.477324417235697460, 0.477368352996425770, 0.477412287563733160, 0.477456220937510280, 0.477500153117646430, 0.477544084104032150, 0.477588013896557750, 0.477631942495113650, +0.477675869899589320, 0.477719796109875310, 0.477763721125862180, 0.477807644947439380, 0.477851567574497430, 0.477895489006926630, 0.477939409244617470, 0.477983328287459370, +0.478027246135342980, 0.478071162788158480, 0.478115078245796410, 0.478158992508146310, 0.478202905575098700, 0.478246817446543850, 0.478290728122372330, 0.478334637602473630, +0.478378545886738280, 0.478422452975056590, 0.478466358867319200, 0.478510263563415470, 0.478554167063236110, 0.478598069366671710, 0.478641970473611730, 0.478685870383946830, +0.478729769097567260, 0.478773666614363710, 0.478817562934225560, 0.478861458057043500, 0.478905351982707780, 0.478949244711109060, 0.478993136242136910, 0.479037026575681870, +0.479080915711634250, 0.479124803649884750, 0.479168690390322840, 0.479212575932839220, 0.479256460277324160, 0.479300343423668340, 0.479344225371761250, 0.479388106121493630, +0.479431985672756130, 0.479475864025438240, 0.479519741179430690, 0.479563617134623810, 0.479607491890908290, 0.479651365448173660, 0.479695237806310570, 0.479739108965209440, +0.479782978924760910, 0.479826847684854510, 0.479870715245381000, 0.479914581606230740, 0.479958446767294380, 0.480002310728461560, 0.480046173489622920, 0.480090035050668830, +0.480133895411490100, 0.480177754571976200, 0.480221612532017890, 0.480265469291505600, 0.480309324850330010, 0.480353179208380720, 0.480397032365548480, 0.480440884321724050, +0.480484735076797010, 0.480528584630658120, 0.480572432983197790, 0.480616280134306790, 0.480660126083874650, 0.480703970831792230, 0.480747814377949890, 0.480791656722238390, +0.480835497864547380, 0.480879337804767600, 0.480923176542789490, 0.480967014078503790, 0.481010850411800190, 0.481054685542569470, 0.481098519470702040, 0.481142352196088700, +0.481186183718619100, 0.481230014038184000, 0.481273843154674310, 0.481317671067979570, 0.481361497777990700, 0.481405323284598060, 0.481449147587692470, 0.481492970687163680, +0.481536792582902440, 0.481580613274799230, 0.481624432762744860, 0.481668251046629030, 0.481712068126342540, 0.481755884001775940, 0.481799698672819960, 0.481843512139364380, +0.481887324401300000, 0.481931135458517290, 0.481974945310907180, 0.482018753958359300, 0.482062561400764530, 0.482106367638013730, 0.482150172669996660, 0.482193976496604120, +0.482237779117726690, 0.482281580533255150, 0.482325380743079290, 0.482369179747089980, 0.482412977545177760, 0.482456774137233420, 0.482500569523146790, 0.482544363702808730, +0.482588156676109710, 0.482631948442940770, 0.482675739003191550, 0.482719528356752970, 0.482763316503515560, 0.482807103443370240, 0.482850889176206780, 0.482894673701916130, +0.482938457020389120, 0.482982239131515670, 0.483026020035186520, 0.483069799731292380, 0.483113578219724120, 0.483157355500371530, 0.483201131573125550, 0.483244906437876760, +0.483288680094516090, 0.483332452542933280, 0.483376223783019370, 0.483419993814664940, 0.483463762637760860, 0.483507530252197000, 0.483551296657864340, 0.483595061854653400, +0.483638825842455210, 0.483682588621159590, 0.483726350190657460, 0.483770110550839460, 0.483813869701596620, 0.483857627642818640, 0.483901384374396670, 0.483945139896221570, +0.483988894208183250, 0.484032647310172700, 0.484076399202080510, 0.484120149883797760, 0.484163899355214200, 0.484207647616220930, 0.484251394666708520, 0.484295140506568020, +0.484338885135689230, 0.484382628553963300, 0.484426370761280760, 0.484470111757532680, 0.484513851542608950, 0.484557590116400590, 0.484601327478798250, 0.484645063629693010, +0.484688798568974680, 0.484732532296534350, 0.484776264812263100, 0.484819996116050810, 0.484863726207788500, 0.484907455087366880, 0.484951182754677020, 0.484994909209608800, +0.485038634452053310, 0.485082358481901290, 0.485126081299043720, 0.485169802903370530, 0.485213523294772850, 0.485257242473141390, 0.485300960438367180, 0.485344677190340190, +0.485388392728951510, 0.485432107054091900, 0.485475820165652330, 0.485519532063522830, 0.485563242747594550, 0.485606952217758510, 0.485650660473904710, 0.485694367515924260, +0.485738073343707940, 0.485781777957146780, 0.485825481356130790, 0.485869183540551090, 0.485912884510298460, 0.485956584265263950, 0.486000282805337640, 0.486043980130410610, +0.486087676240373630, 0.486131371135117840, 0.486175064814533260, 0.486218757278510990, 0.486262448526941840, 0.486306138559716940, 0.486349827376726330, 0.486393514977861150, +0.486437201363012160, 0.486480886532070560, 0.486524570484926370, 0.486568253221470740, 0.486611934741594860, 0.486655615045188780, 0.486699294132143630, 0.486742972002350280, +0.486786648655699870, 0.486830324092082490, 0.486873998311389280, 0.486917671313511050, 0.486961343098339050, 0.487005013665763260, 0.487048683015675000, 0.487092351147965010, +0.487136018062524490, 0.487179683759243590, 0.487223348238013440, 0.487267011498724980, 0.487310673541269330, 0.487354334365536600, 0.487397993971418090, 0.487441652358804930, +0.487485309527587280, 0.487528965477656340, 0.487572620208902960, 0.487616273721218460, 0.487659926014492870, 0.487703577088617500, 0.487747226943483160, 0.487790875578981150, +0.487834522995001520, 0.487878169191435620, 0.487921814168174320, 0.487965457925108810, 0.488009100462129310, 0.488052741779127050, 0.488096381875992970, 0.488140020752618310, +0.488183658408893160, 0.488227294844708890, 0.488270930059956810, 0.488314564054526950, 0.488358196828310720, 0.488401828381199000, 0.488445458713083090, 0.488489087823853140, +0.488532715713400510, 0.488576342381616070, 0.488619967828391120, 0.488663592053615870, 0.488707215057181680, 0.488750836838979460, 0.488794457398900480, 0.488838076736835050, +0.488881694852674350, 0.488925311746309430, 0.488968927417631650, 0.489012541866531150, 0.489056155092899290, 0.489099767096627390, 0.489143377877605760, 0.489186987435725640, +0.489230595770878070, 0.489274202882954420, 0.489317808771844830, 0.489361413437440720, 0.489405016879633110, 0.489448619098313330, 0.489492220093371620, 0.489535819864699350, +0.489579418412187550, 0.489623015735727530, 0.489666611835209650, 0.489710206710525230, 0.489753800361565240, 0.489797392788221210, 0.489840983990383280, 0.489884573967942880, +0.489928162720791040, 0.489971750248819230, 0.490015336551917590, 0.490058921629977660, 0.490102505482890800, 0.490146088110547270, 0.490189669512838540, 0.490233249689655650, +0.490276828640890010, 0.490320406366431930, 0.490363982866172780, 0.490407558140003700, 0.490451132187816110, 0.490494705009500320, 0.490538276604947750, 0.490581846974049500, +0.490625416116697020, 0.490668984032780590, 0.490712550722191720, 0.490756116184821510, 0.490799680420561320, 0.490843243429301580, 0.490886805210933750, 0.490930365765349260, +0.490973925092438530, 0.491017483192092930, 0.491061040064203650, 0.491104595708662110, 0.491148150125358730, 0.491191703314184990, 0.491235255275031980, 0.491278806007791170, +0.491322355512353040, 0.491365903788608950, 0.491409450836450160, 0.491452996655768080, 0.491496541246453140, 0.491540084608396880, 0.491583626741490360, 0.491627167645625200, +0.491670707320691740, 0.491714245766581460, 0.491757782983185950, 0.491801318970395640, 0.491844853728102050, 0.491888387256196270, 0.491931919554569940, 0.491975450623113430, +0.492018980461718270, 0.492062509070275660, 0.492106036448677180, 0.492149562596813190, 0.492193087514575360, 0.492236611201854750, 0.492280133658543060, 0.492323654884530560, +0.492367174879708990, 0.492410693643969500, 0.492454211177203620, 0.492497727479301820, 0.492541242550155740, 0.492584756389656540, 0.492628268997695800, 0.492671780374164040, +0.492715290518952800, 0.492758799431953720, 0.492802307113057280, 0.492845813562155070, 0.492889318779138330, 0.492932822763898660, 0.492976325516326590, 0.493019827036313640, +0.493063327323751190, 0.493106826378530760, 0.493150324200542890, 0.493193820789679220, 0.493237316145831000, 0.493280810268889870, 0.493324303158746310, 0.493367794815292030, +0.493411285238418260, 0.493454774428016610, 0.493498262383977700, 0.493541749106193080, 0.493585234594554500, 0.493628718848952490, 0.493672201869278630, 0.493715683655424290, +0.493759164207281110, 0.493802643524739630, 0.493846121607691530, 0.493889598456028140, 0.493933074069641150, 0.493976548448421090, 0.494020021592259660, 0.494063493501048170, +0.494106964174678360, 0.494150433613040730, 0.494193901816027010, 0.494237368783528530, 0.494280834515437030, 0.494324299011643040, 0.494367762272038320, 0.494411224296514570, +0.494454685084962380, 0.494498144637273480, 0.494541602953339210, 0.494585060033051300, 0.494628515876300410, 0.494671970482978170, 0.494715423852976070, 0.494758875986185730, +0.494802326882497870, 0.494845776541804170, 0.494889224963996010, 0.494932672148965190, 0.494976118096602300, 0.495019562806799100, 0.495063006279447050, 0.495106448514437800, +0.495149889511662060, 0.495193329271011620, 0.495236767792378240, 0.495280205075652570, 0.495323641120726350, 0.495367075927491070, 0.495410509495838420, 0.495453941825659160, +0.495497372916845040, 0.495540802769287470, 0.495584231382878330, 0.495627658757508190, 0.495671084893068880, 0.495714509789451860, 0.495757933446549000, 0.495801355864250890, +0.495844777042449390, 0.495888196981035980, 0.495931615679902400, 0.495975033138939430, 0.496018449358038900, 0.496061864337092210, 0.496105278075991250, 0.496148690574626740, +0.496192101832890480, 0.496235511850674380, 0.496278920627869100, 0.496322328164366500, 0.496365734460058050, 0.496409139514835730, 0.496452543328590120, 0.496495945901213150, +0.496539347232596350, 0.496582747322631520, 0.496626146171209480, 0.496669543778222090, 0.496712940143560770, 0.496756335267117540, 0.496799729148783060, 0.496843121788449300, +0.496886513186007680, 0.496929903341350230, 0.496973292254367590, 0.497016679924951690, 0.497060066352994550, 0.497103451538386810, 0.497146835481020450, 0.497190218180787010, +0.497233599637578410, 0.497276979851285380, 0.497320358821799920, 0.497363736549013610, 0.497407113032818320, 0.497450488273104840, 0.497493862269765160, 0.497537235022690870, +0.497580606531773830, 0.497623976796904840, 0.497667345817976000, 0.497710713594878730, 0.497754080127505110, 0.497797445415745890, 0.497840809459493050, 0.497884172258638570, +0.497927533813073250, 0.497970894122689130, 0.498014253187377740, 0.498057611007031160, 0.498100967581540100, 0.498144322910796690, 0.498187676994692410, 0.498231029833119340, +0.498274381425968360, 0.498317731773131380, 0.498361080874500100, 0.498404428729966430, 0.498447775339421360, 0.498491120702756860, 0.498534464819864580, 0.498577807690636480, +0.498621149314963490, 0.498664489692737580, 0.498707828823850510, 0.498751166708194250, 0.498794503345659670, 0.498837838736138790, 0.498881172879523770, 0.498924505775705410, +0.498967837424575730, 0.499011167826026560, 0.499054496979949800, 0.499097824886236390, 0.499141151544778450, 0.499184476955467640, 0.499227801118195980, 0.499271124032854450, +0.499314445699335140, 0.499357766117529690, 0.499401085287330240, 0.499444403208627650, 0.499487719881314070, 0.499531035305281200, 0.499574349480421120, 0.499617662406624750, +0.499660974083784290, 0.499704284511791720, 0.499747593690538060, 0.499790901619915460, 0.499834208299815560, 0.499877513730130560, 0.499920817910751380, 0.499964120841570160, +0.500007422522478650, 0.500050722953368940, 0.500094022134132010, 0.500137320064660050, 0.500180616744844820, 0.500223912174578400, 0.500267206353751880, 0.500310499282257240, +0.500353790959986440, 0.500397081386831480, 0.500440370562683420, 0.500483658487434480, 0.500526945160976840, 0.500570230583201380, 0.500613514754000400, 0.500656797673265540, +0.500700079340889110, 0.500743359756762100, 0.500786638920776680, 0.500829916832824740, 0.500873193492798350, 0.500916468900588500, 0.500959743056087590, 0.501003015959187280, +0.501046287609779870, 0.501089558007756230, 0.501132827153008780, 0.501176095045429260, 0.501219361684909880, 0.501262627071341730, 0.501305891204616990, 0.501349154084627550, +0.501392415711265580, 0.501435676084422190, 0.501478935203989560, 0.501522193069860120, 0.501565449681924620, 0.501608705040075710, 0.501651959144204910, 0.501695211994204530, +0.501738463589965880, 0.501781713931380930, 0.501824963018341790, 0.501868210850740630, 0.501911457428468540, 0.501954702751417850, 0.501997946819480400, 0.502041189632548400, +0.502084431190513050, 0.502127671493266650, 0.502170910540701070, 0.502214148332708610, 0.502257384869180370, 0.502300620150008650, 0.502343854175085760, 0.502387086944302900, +0.502430318457552370, 0.502473548714725940, 0.502516777715716010, 0.502560005460413910, 0.502603231948711590, 0.502646457180501380, 0.502689681155675250, 0.502732903874124610, +0.502776125335741670, 0.502819345540418520, 0.502862564488047340, 0.502905782178519330, 0.502948998611726930, 0.502992213787561980, 0.503035427705916800, 0.503078640366682820, +0.503121851769752100, 0.503165061915017200, 0.503208270802369300, 0.503251478431700710, 0.503294684802903400, 0.503337889915869810, 0.503381093770491010, 0.503424296366659530, +0.503467497704267350, 0.503510697783206780, 0.503553896603369020, 0.503597094164646600, 0.503640290466931480, 0.503683485510115880, 0.503726679294091320, 0.503769871818749990, +0.503813063083983990, 0.503856253089685730, 0.503899441835746420, 0.503942629322058580, 0.503985815548514520, 0.504029000515005430, 0.504072184221423970, 0.504115366667661990, +0.504158547853612030, 0.504201727779165280, 0.504244906444214160, 0.504288083848650870, 0.504331259992367720, 0.504374434875256020, 0.504417608497208180, 0.504460780858116410, +0.504503951957873010, 0.504547121796369400, 0.504590290373498010, 0.504633457689150800, 0.504676623743220420, 0.504719788535598070, 0.504762952066176160, 0.504806114334847010, +0.504849275341502810, 0.504892435086035210, 0.504935593568336390, 0.504978750788299010, 0.505021906745814380, 0.505065061440775010, 0.505108214873072890, 0.505151367042600660, +0.505194517949249630, 0.505237667592912330, 0.505280815973480960, 0.505323963090847820, 0.505367108944904330, 0.505410253535543140, 0.505453396862656330, 0.505496538926136440, +0.505539679725874770, 0.505582819261763850, 0.505625957533695990, 0.505669094541563500, 0.505712230285258020, 0.505755364764671870, 0.505798497979697670, 0.505841629930226970, +0.505884760616152060, 0.505927890037365380, 0.505971018193759230, 0.506014145085225240, 0.506057270711655850, 0.506100395072943240, 0.506143518168980070, 0.506186639999657740, +0.506229760564868790, 0.506272879864505530, 0.506315997898460380, 0.506359114666624750, 0.506402230168891410, 0.506445344405152540, 0.506488457375300680, 0.506531569079227250, +0.506574679516825000, 0.506617788687986350, 0.506660896592602830, 0.506704003230567080, 0.506747108601771300, 0.506790212706108250, 0.506833315543469110, 0.506876417113746870, +0.506919517416833500, 0.506962616452621640, 0.507005714221002930, 0.507048810721869910, 0.507091905955114890, 0.507134999920630490, 0.507178092618308260, 0.507221184048040730, +0.507264274209720200, 0.507307363103239430, 0.507350450728489830, 0.507393537085364170, 0.507436622173754630, 0.507479705993553960, 0.507522788544653600, 0.507565869826946180, +0.507608949840324560, 0.507652028584680170, 0.507695106059905750, 0.507738182265893510, 0.507781257202536310, 0.507824330869725450, 0.507867403267353800, 0.507910474395313670, +0.507953544253497700, 0.507996612841797530, 0.508039680160105810, 0.508082746208314840, 0.508125810986317480, 0.508168874494005160, 0.508211936731270630, 0.508254997698006310, +0.508298057394104830, 0.508341115819457840, 0.508384172973957990, 0.508427228857498250, 0.508470283469969920, 0.508513336811265980, 0.508556388881278630, 0.508599439679900730, +0.508642489207023820, 0.508685537462540640, 0.508728584446343720, 0.508771630158325720, 0.508814674598378150, 0.508857717766393990, 0.508900759662265450, 0.508943800285885480, +0.508986839637145640, 0.509029877715938660, 0.509072914522156970, 0.509115950055693430, 0.509158984316439580, 0.509202017304288270, 0.509245049019132260, 0.509288079460863300, +0.509331108629374140, 0.509374136524557210, 0.509417163146305360, 0.509460188494510140, 0.509503212569064500, 0.509546235369860880, 0.509589256896791910, 0.509632277149749570, +0.509675296128626500, 0.509718313833315120, 0.509761330263708400, 0.509804345419697880, 0.509847359301176640, 0.509890371908036880, 0.509933383240171570, 0.509976393297472460, +0.510019402079832430, 0.510062409587144220, 0.510105415819299580, 0.510148420776191490, 0.510191424457712260, 0.510234426863754860, 0.510277427994211050, 0.510320427848973580, +0.510363426427935200, 0.510406423730988550, 0.510449419758025380, 0.510492414508938790, 0.510535407983621070, 0.510578400181965210, 0.510621391103863060, 0.510664380749207390, +0.510707369117890720, 0.510750356209806020, 0.510793342024845170, 0.510836326562900790, 0.510879309823865760, 0.510922291807632710, 0.510965272514093630, 0.511008251943141260, +0.511051230094668680, 0.511094206968567780, 0.511137182564731170, 0.511180156883051740, 0.511223129923422230, 0.511266101685734500, 0.511309072169881640, 0.511352041375755960, +0.511395009303250660, 0.511437975952257370, 0.511480941322669190, 0.511523905414378640, 0.511566868227278700, 0.511609829761261240, 0.511652790016219220, 0.511695748992045170, +0.511738706688632080, 0.511781663105871920, 0.511824618243657660, 0.511867572101882160, 0.511910524680437300, 0.511953475979216250, 0.511996425998111460, 0.512039374737016000, +0.512082322195821620, 0.512125268374421520, 0.512168213272708230, 0.512211156890574840, 0.512254099227913100, 0.512297040284616200, 0.512339980060576570, 0.512382918555687520, +0.512425855769840680, 0.512468791702929250, 0.512511726354845880, 0.512554659725483530, 0.512597591814734080, 0.512640522622490710, 0.512683452148646520, 0.512726380393093150, +0.512769307355723900, 0.512812233036431420, 0.512855157435108680, 0.512898080551647760, 0.512941002385941540, 0.512983922937882860, 0.513026842207364720, 0.513069760194279080, +0.513112676898519030, 0.513155592319977320, 0.513198506458547030, 0.513241419314120150, 0.513284330886589650, 0.513327241175848270, 0.513370150181789220, 0.513413057904304470, +0.513455964343287000, 0.513498869498629660, 0.513541773370225550, 0.513584675957966530, 0.513627577261745900, 0.513670477281456650, 0.513713376016990850, 0.513756273468241710, +0.513799169635101750, 0.513842064517464280, 0.513884958115221280, 0.513927850428265940, 0.513970741456490910, 0.514013631199789380, 0.514056519658053430, 0.514099406831176160, +0.514142292719050430, 0.514185177321569320, 0.514228060638624920, 0.514270942670110310, 0.514313823415918360, 0.514356702875942260, 0.514399581050074000, 0.514442457938206750, +0.514485333540233740, 0.514528207856047140, 0.514571080885539820, 0.514613952628604990, 0.514656823085135610, 0.514699692255023660, 0.514742560138162660, 0.514785426734445160, +0.514828292043764460, 0.514871156066012640, 0.514914018801083010, 0.514956880248868320, 0.514999740409261770, 0.515042599282155460, 0.515085456867442780, 0.515128313165016280, +0.515171168174769490, 0.515214021896594380, 0.515256874330384250, 0.515299725476032310, 0.515342575333430640, 0.515385423902472550, 0.515428271183050900, 0.515471117175058890, +0.515513961878388720, 0.515556805292933680, 0.515599647418586660, 0.515642488255240950, 0.515685327802788530, 0.515728166061122820, 0.515771003030136680, 0.515813838709723420, +0.515856673099775230, 0.515899506200185320, 0.515942338010846660, 0.515985168531652550, 0.516027997762495080, 0.516070825703267680, 0.516113652353863530, 0.516156477714174940, +0.516199301784095010, 0.516242124563517040, 0.516284946052333990, 0.516327766250438190, 0.516370585157723050, 0.516413402774081430, 0.516456219099406640, 0.516499034133591000, +0.516541847876527680, 0.516584660328109790, 0.516627471488230740, 0.516670281356782500, 0.516713089933658500, 0.516755897218751930, 0.516798703211955870, 0.516841507913162750, +0.516884311322265870, 0.516927113439158090, 0.516969914263733070, 0.517012713795882760, 0.517055512035500710, 0.517098308982480330, 0.517141104636713700, 0.517183898998094360, +0.517226692066515280, 0.517269483841869770, 0.517312274324050250, 0.517355063512950020, 0.517397851408462060, 0.517440638010480010, 0.517483423318895850, 0.517526207333603220, +0.517568990054494970, 0.517611771481464760, 0.517654551614404660, 0.517697330453208200, 0.517740107997768370, 0.517782884247978690, 0.517825659203731360, 0.517868432864920010, +0.517911205231437850, 0.517953976303177300, 0.517996746080031880, 0.518039514561894570, 0.518082281748658780, 0.518125047640217050, 0.518167812236462580, 0.518210575537288660, +0.518253337542588620, 0.518296098252254870, 0.518338857666180820, 0.518381615784259680, 0.518424372606384960, 0.518467128132448770, 0.518509882362344850, 0.518552635295966290, +0.518595386933206390, 0.518638137273957690, 0.518680886318113710, 0.518723634065567870, 0.518766380516212490, 0.518809125669941200, 0.518851869526647190, 0.518894612086223780, +0.518937353348563500, 0.518980093313559760, 0.519022831981105880, 0.519065569351095270, 0.519108305423420350, 0.519151040197974640, 0.519193773674651360, 0.519236505853344020, +0.519279236733945050, 0.519321966316347970, 0.519364694600445990, 0.519407421586132620, 0.519450147273300410, 0.519492871661842770, 0.519535594751652900, 0.519578316542624540, +0.519621037034649900, 0.519663756227622730, 0.519706474121436560, 0.519749190715983690, 0.519791906011157990, 0.519834620006852430, 0.519877332702960770, 0.519920044099375420, +0.519962754195989920, 0.520005462992697560, 0.520048170489391890, 0.520090876685965430, 0.520133581582311710, 0.520176285178324150, 0.520218987473896170, 0.520261688468920400, +0.520304388163290390, 0.520347086556899430, 0.520389783649641060, 0.520432479441407910, 0.520475173932093530, 0.520517867121591650, 0.520560559009794700, 0.520603249596596320, +0.520645938881889810, 0.520688626865568830, 0.520731313547526000, 0.520773998927654750, 0.520816683005848600, 0.520859365782001090, 0.520902047256004860, 0.520944727427753440, +0.520987406297140130, 0.521030083864058800, 0.521072760128401870, 0.521115435090062970, 0.521158108748935530, 0.521200781104913190, 0.521243452157888590, 0.521286121907755250, +0.521328790354407050, 0.521371457497736390, 0.521414123337637150, 0.521456787874002630, 0.521499451106726570, 0.521542113035701420, 0.521584773660821010, 0.521627432981978670, +0.521670090999068140, 0.521712747711981950, 0.521755403120613970, 0.521798057224857390, 0.521840710024606080, 0.521883361519752680, 0.521926011710190820, 0.521968660595813930, +0.522011308176515750, 0.522053954452188940, 0.522096599422727240, 0.522139243088024510, 0.522181885447973170, 0.522224526502467200, 0.522267166251399790, 0.522309804694665040, +0.522352441832155230, 0.522395077663764360, 0.522437712189385840, 0.522480345408913420, 0.522522977322239730, 0.522565607929258550, 0.522608237229863380, 0.522650865223947990, +0.522693491911405130, 0.522736117292128430, 0.522778741366011550, 0.522821364132948110, 0.522863985592830980, 0.522906605745553810, 0.522949224591010120, 0.522991842129093780, +0.523034458359697420, 0.523077073282714910, 0.523119686898040110, 0.523162299205565780, 0.523204910205185670, 0.523247519896793190, 0.523290128280282430, 0.523332735355545810, +0.523375341122477520, 0.523417945580970770, 0.523460548730919630, 0.523503150572216640, 0.523545751104755760, 0.523588350328430540, 0.523630948243134830, 0.523673544848761390, +0.523716140145204070, 0.523758734132356410, 0.523801326810112270, 0.523843918178364510, 0.523886508237006890, 0.523929096985933370, 0.523971684425036720, 0.524014270554210900, +0.524056855373349450, 0.524099438882346110, 0.524142021081093870, 0.524184601969486570, 0.524227181547417760, 0.524269759814781410, 0.524312336771470270, 0.524354912417378300, +0.524397486752398940, 0.524440059776426380, 0.524482631489353260, 0.524525201891073430, 0.524567770981480770, 0.524610338760469030, 0.524652905227930950, 0.524695470383760740, +0.524738034227852150, 0.524780596760098140, 0.524823157980392590, 0.524865717888629240, 0.524908276484701840, 0.524950833768503490, 0.524993389739928040, 0.525035944398869030, +0.525078497745220640, 0.525121049778875530, 0.525163600499727880, 0.525206149907671120, 0.525248698002599430, 0.525291244784405700, 0.525333790252983770, 0.525376334408227400, +0.525418877250030560, 0.525461418778286120, 0.525503958992888150, 0.525546497893730310, 0.525589035480706570, 0.525631571753709890, 0.525674106712634260, 0.525716640357373750, +0.525759172687821240, 0.525801703703870800, 0.525844233405416080, 0.525886761792351170, 0.525929288864569020, 0.525971814621963630, 0.526014339064428740, 0.526056862191858320, +0.526099384004145350, 0.526141904501184030, 0.526184423682867890, 0.526226941549091000, 0.526269458099746460, 0.526311973334728230, 0.526354487253930080, 0.526396999857246080, +0.526439511144569220, 0.526482021115793560, 0.526524529770813320, 0.526567037109521240, 0.526609543131811630, 0.526652047837578240, 0.526694551226715050, 0.526737053299115020, +0.526779554054672470, 0.526822053493280930, 0.526864551614834700, 0.526907048419226750, 0.526949543906351180, 0.526992038076101620, 0.527034530928372490, 0.527077022463056540, +0.527119512680048090, 0.527162001579240870, 0.527204489160529090, 0.527246975423805610, 0.527289460368964740, 0.527331943995900550, 0.527374426304506150, 0.527416907294675610, +0.527459386966302900, 0.527501865319282110, 0.527544342353506220, 0.527586818068869420, 0.527629292465265690, 0.527671765542589100, 0.527714237300732640, 0.527756707739590600, +0.527799176859056860, 0.527841644659025500, 0.527884111139389710, 0.527926576300043580, 0.527969040140881090, 0.528011502661796310, 0.528053963862682330, 0.528096423743433570, +0.528138882303944010, 0.528181339544106950, 0.528223795463816590, 0.528266250062966680, 0.528308703341451520, 0.528351155299164210, 0.528393605935999040, 0.528436055251849780, +0.528478503246610830, 0.528520949920175290, 0.528563395272437230, 0.528605839303290860, 0.528648282012630140, 0.528690723400348390, 0.528733163466339810, 0.528775602210498350, +0.528818039632718230, 0.528860475732892630, 0.528902910510915870, 0.528945343966681800, 0.528987776100084740, 0.529030206911017880, 0.529072636399375520, 0.529115064565051970, +0.529157491407940330, 0.529199916927935000, 0.529242341124929850, 0.529284763998819300, 0.529327185549496430, 0.529369605776855550, 0.529412024680790630, 0.529454442261196090, +0.529496858517965020, 0.529539273450991830, 0.529581687060170500, 0.529624099345395230, 0.529666510306559420, 0.529708919943557290, 0.529751328256282910, 0.529793735244630580, +0.529836140908493510, 0.529878545247766010, 0.529920948262342590, 0.529963349952116470, 0.530005750316981940, 0.530048149356833090, 0.530090547071564110, 0.530132943461068540, +0.530175338525240460, 0.530217732263974170, 0.530260124677163880, 0.530302515764702890, 0.530344905526485500, 0.530387293962406030, 0.530429681072358550, 0.530472066856236600, +0.530514451313934490, 0.530556834445346180, 0.530599216250366210, 0.530641596728887780, 0.530683975880805400, 0.530726353706013400, 0.530768730204405180, 0.530811105375875170, +0.530853479220317340, 0.530895851737626210, 0.530938222927695100, 0.530980592790418430, 0.531022961325690270, 0.531065328533405050, 0.531107694413456180, 0.531150058965737970, +0.531192422190144730, 0.531234784086570770, 0.531277144654909490, 0.531319503895055330, 0.531361861806902370, 0.531404218390345240, 0.531446573645277140, 0.531488927571592610, +0.531531280169185720, 0.531573631437951000, 0.531615981377781880, 0.531658329988572760, 0.531700677270218190, 0.531743023222611580, 0.531785367845647450, 0.531827711139219780, +0.531870053103223330, 0.531912393737551280, 0.531954733042098280, 0.531997071016758530, 0.532039407661426320, 0.532081742975995420, 0.532124076960360020, 0.532166409614414420, +0.532208740938053260, 0.532251070931169750, 0.532293399593658620, 0.532335726925413980, 0.532378052926330450, 0.532420377596301450, 0.532462700935221410, 0.532505022942984960, +0.532547343619485640, 0.532589662964617960, 0.532631980978276130, 0.532674297660354790, 0.532716613010747240, 0.532758927029348130, 0.532801239716051760, 0.532843551070752650, +0.532885861093344350, 0.532928169783721260, 0.532970477141777920, 0.533012783167408630, 0.533055087860507040, 0.533097391220967780, 0.533139693248684930, 0.533181993943553370, +0.533224293305466280, 0.533266591334318530, 0.533308888030004760, 0.533351183392418270, 0.533393477421453930, 0.533435770117005830, 0.533478061478968700, 0.533520351507236090, +0.533562640201702520, 0.533604927562262410, 0.533647213588810290, 0.533689498281239790, 0.533731781639445570, 0.533774063663321920, 0.533816344352763370, 0.533858623707663680, +0.533900901727917490, 0.533943178413418870, 0.533985453764062810, 0.534027727779742720, 0.534070000460353240, 0.534112271805789240, 0.534154541815944130, 0.534196810490712660, +0.534239077829989250, 0.534281343833668430, 0.534323608501643840, 0.534365871833810350, 0.534408133830062030, 0.534450394490293860, 0.534492653814399370, 0.534534911802273080, +0.534577168453809650, 0.534619423768903700, 0.534661677747448660, 0.534703930389339610, 0.534746181694470630, 0.534788431662736490, 0.534830680294031020, 0.534872927588248780, +0.534915173545284280, 0.534957418165032280, 0.534999661447386200, 0.535041903392241110, 0.535084143999491560, 0.535126383269031280, 0.535168621200755030, 0.535210857794557240, +0.535253093050332750, 0.535295326967975100, 0.535337559547379050, 0.535379790788439220, 0.535422020691050270, 0.535464249255105830, 0.535506476480500760, 0.535548702367129590, +0.535590926914886970, 0.535633150123666750, 0.535675371993363570, 0.535717592523871970, 0.535759811715086690, 0.535802029566901590, 0.535844246079211440, 0.535886461251911080, +0.535928675084894060, 0.535970887578055440, 0.536013098731289660, 0.536055308544491350, 0.536097517017554480, 0.536139724150373810, 0.536181929942843860, 0.536224134394859500, +0.536266337506314360, 0.536308539277103310, 0.536350739707120990, 0.536392938796262260, 0.536435136544420770, 0.536477332951491360, 0.536519528017368690, 0.536561721741947490, +0.536603914125121760, 0.536646105166786120, 0.536688294866835670, 0.536730483225164030, 0.536772670241666190, 0.536814855916236790, 0.536857040248770460, 0.536899223239161280, +0.536941404887304020, 0.536983585193093190, 0.537025764156423780, 0.537067941777189640, 0.537110118055285630, 0.537152292990606290, 0.537194466583046590, 0.537236638832500390, +0.537278809738862660, 0.537320979302027820, 0.537363147521890850, 0.537405314398345710, 0.537447479931287280, 0.537489644120610180, 0.537531806966209280, 0.537573968467978560, +0.537616128625812870, 0.537658287439607200, 0.537700444909255500, 0.537742601034652660, 0.537784755815693290, 0.537826909252272500, 0.537869061344283920, 0.537911212091622850, +0.537953361494183600, 0.537995509551861370, 0.538037656264550020, 0.538079801632144530, 0.538121945654539520, 0.538164088331630100, 0.538206229663310000, 0.538248369649474310, +0.538290508290017680, 0.538332645584835290, 0.538374781533820790, 0.538416916136869370, 0.538459049393876010, 0.538501181304734680, 0.538543311869340350, 0.538585441087587770, +0.538627568959372030, 0.538669695484586870, 0.538711820663127620, 0.538753944494888670, 0.538796066979765340, 0.538838188117651380, 0.538880307908442100, 0.538922426352031910, +0.538964543448316010, 0.539006659197188490, 0.539048773598544310, 0.539090886652278110, 0.539132998358285100, 0.539175108716459240, 0.539217217726695620, 0.539259325388889320, +0.539301431702934320, 0.539343536668725700, 0.539385640286158320, 0.539427742555127150, 0.539469843475526290, 0.539511943047250810, 0.539554041270195460, 0.539596138144255330, +0.539638233669324620, 0.539680327845298180, 0.539722420672070990, 0.539764512149538130, 0.539806602277593690, 0.539848691056132650, 0.539890778485049850, 0.539932864564240500, +0.539974949293598680, 0.540017032673019480, 0.540059114702397980, 0.540101195381628370, 0.540143274710605750, 0.540185352689225070, 0.540227429317381210, 0.540269504594968470, +0.540311578521882050, 0.540353651098016590, 0.540395722323267380, 0.540437792197528520, 0.540479860720695200, 0.540521927892662180, 0.540563993713324640, 0.540606058182576900, +0.540648121300313920, 0.540690183066430690, 0.540732243480822380, 0.540774302543382990, 0.540816360254007920, 0.540858416612591930, 0.540900471619030320, 0.540942525273217180, +0.540984577575047590, 0.541026628524417070, 0.541068678121219500, 0.541110726365350290, 0.541152773256704300, 0.541194818795176610, 0.541236862980661650, 0.541278905813054490, +0.541320947292250000, 0.541362987418143590, 0.541405026190629360, 0.541447063609602490, 0.541489099674957950, 0.541531134386591170, 0.541573167744396010, 0.541615199748267990, +0.541657230398101990, 0.541699259693793290, 0.541741287635236100, 0.541783314222325620, 0.541825339454957260, 0.541867363333025210, 0.541909385856424790, 0.541951407025050850, +0.541993426838798700, 0.542035445297562650, 0.542077462401238000, 0.542119478149719720, 0.542161492542903130, 0.542203505580682310, 0.542245517262952890, 0.542287527589609630, +0.542329536560547830, 0.542371544175661910, 0.542413550434847070, 0.542455555337998390, 0.542497558885011280, 0.542539561075779720, 0.542581561910199350, 0.542623561388165480, +0.542665559509572290, 0.542707556274315220, 0.542749551682289330, 0.542791545733389840, 0.542833538427511140, 0.542875529764548560, 0.542917519744397170, 0.542959508366952390, +0.543001495632108420, 0.543043481539760790, 0.543085466089804350, 0.543127449282134630, 0.543169431116645950, 0.543211411593233720, 0.543253390711792910, 0.543295368472219040, +0.543337344874406440, 0.543379319918250280, 0.543421293603645990, 0.543463265930488770, 0.543505236898673030, 0.543547206508094180, 0.543589174758647760, 0.543631141650227970, +0.543673107182730320, 0.543715071356049910, 0.543757034170082250, 0.543798995624721560, 0.543840955719863350, 0.543882914455402820, 0.543924871831235390, 0.543966827847255360, +0.544008782503358270, 0.544050735799439190, 0.544092687735393770, 0.544134638311116080, 0.544176587526501890, 0.544218535381446270, 0.544260481875844640, 0.544302427009591420, +0.544344370782582130, 0.544386313194712310, 0.544428254245876380, 0.544470193935969740, 0.544512132264887700, 0.544554069232525580, 0.544596004838778010, 0.544637939083540410, +0.544679871966707860, 0.544721803488176120, 0.544763733647839480, 0.544805662445593470, 0.544847589881333420, 0.544889515954954610, 0.544931440666351690, 0.544973364015420180, +0.545015286002055290, 0.545057206626152540, 0.545099125887606450, 0.545141043786312450, 0.545182960322166290, 0.545224875495062270, 0.545266789304896140, 0.545308701751562990, +0.545350612834958450, 0.545392522554977060, 0.545434430911514330, 0.545476337904465590, 0.545518243533726240, 0.545560147799191040, 0.545602050700755400, 0.545643952238314630, +0.545685852411764370, 0.545727751220999150, 0.545769648665914490, 0.545811544746405700, 0.545853439462368420, 0.545895332813697290, 0.545937224800287720, 0.545979115422035480, +0.546021004678835080, 0.546062892570582160, 0.546104779097172030, 0.546146664258500230, 0.546188548054461490, 0.546230430484951460, 0.546272311549865220, 0.546314191249098640, +0.546356069582546120, 0.546397946550103540, 0.546439822151666090, 0.546481696387129400, 0.546523569256388120, 0.546565440759337880, 0.546607310895874000, 0.546649179665892330, +0.546691047069287280, 0.546732913105954620, 0.546774777775789640, 0.546816641078688210, 0.546858503014544750, 0.546900363583255000, 0.546942222784714720, 0.546984080618818420, +0.547025937085462100, 0.547067792184540820, 0.547109645915950460, 0.547151498279585650, 0.547193349275342020, 0.547235198903115010, 0.547277047162800460, 0.547318894054292900, +0.547360739577488100, 0.547402583732281340, 0.547444426518568620, 0.547486267936244440, 0.547528107985204570, 0.547569946665344420, 0.547611783976559850, 0.547653619918745390, +0.547695454491796910, 0.547737287695610140, 0.547779119530079740, 0.547820949995101560, 0.547862779090571020, 0.547904606816383980, 0.547946433172434970, 0.547988258158619850, +0.548030081774834140, 0.548071904020973610, 0.548113724896932890, 0.548155544402607940, 0.548197362537894080, 0.548239179302687170, 0.548280994696881960, 0.548322808720374310, +0.548364621373059520, 0.548406432654833690, 0.548448242565591330, 0.548490051105228300, 0.548531858273640590, 0.548573664070722830, 0.548615468496370990, 0.548657271550480390, +0.548699073232947090, 0.548740873543665630, 0.548782672482531990, 0.548824470049441680, 0.548866266244290580, 0.548908061066973430, 0.548949854517386200, 0.548991646595424320, +0.549033437300983640, 0.549075226633959020, 0.549117014594246330, 0.549158801181741100, 0.549200586396339170, 0.549242370237935430, 0.549284152706425830, 0.549325933801705800, +0.549367713523671420, 0.549409491872217210, 0.549451268847239380, 0.549493044448633780, 0.549534818676295170, 0.549576591530119400, 0.549618363010002220, 0.549660133115839610, +0.549701901847526210, 0.549743669204957990, 0.549785435188030690, 0.549827199796640190, 0.549868963030681220, 0.549910724890049880, 0.549952485374641810, 0.549994244484352750, +0.550036002219077780, 0.550077758578712880, 0.550119513563153470, 0.550161267172295740, 0.550203019406034440, 0.550244770264265550, 0.550286519746885140, 0.550328267853788080, +0.550370014584870340, 0.550411759940027560, 0.550453503919155710, 0.550495246522149760, 0.550536987748905690, 0.550578727599319140, 0.550620466073286190, 0.550662203170701690, +0.550703938891461630, 0.550745673235461750, 0.550787406202598030, 0.550829137792765540, 0.550870868005860050, 0.550912596841777510, 0.550954324300413800, 0.550996050381663880, +0.551037775085423950, 0.551079498411589870, 0.551121220360056620, 0.551162940930720380, 0.551204660123476800, 0.551246377938221950, 0.551288094374850710, 0.551329809433259270, +0.551371523113343360, 0.551413235414998980, 0.551454946338121090, 0.551496655882605880, 0.551538364048348990, 0.551580070835246630, 0.551621776243193750, 0.551663480272086340, +0.551705182921820250, 0.551746884192291560, 0.551788584083395370, 0.551830282595027640, 0.551871979727084240, 0.551913675479461240, 0.551955369852053620, 0.551997062844757690, +0.552038754457469420, 0.552080444690083880, 0.552122133542497280, 0.552163821014605370, 0.552205507106304230, 0.552247191817488940, 0.552288875148055690, 0.552330557097900240, +0.552372237666918680, 0.552413916855006290, 0.552455594662059070, 0.552497271087972860, 0.552538946132643870, 0.552580619795967070, 0.552622292077838750, 0.552663962978154680, +0.552705632496811150, 0.552747300633703140, 0.552788967388726850, 0.552830632761778570, 0.552872296752753290, 0.552913959361547300, 0.552955620588056360, 0.552997280432176770, +0.553038938893803620, 0.553080595972833100, 0.553122251669161070, 0.553163905982683830, 0.553205558913296370, 0.553247210460895090, 0.553288860625375860, 0.553330509406634750, +0.553372156804566970, 0.553413802819068820, 0.553455447450036160, 0.553497090697365300, 0.553538732560951320, 0.553580373040690520, 0.553622012136479100, 0.553663649848212370, +0.553705286175786400, 0.553746921119097290, 0.553788554678041220, 0.553830186852513400, 0.553871817642410220, 0.553913447047627350, 0.553955075068061300, 0.553996701703607150, +0.554038326954161330, 0.554079950819619580, 0.554121573299878430, 0.554163194394832860, 0.554204814104379380, 0.554246432428413870, 0.554288049366832620, 0.554329664919530950, +0.554371279086405040, 0.554412891867351320, 0.554454503262264970, 0.554496113271042420, 0.554537721893579530, 0.554579329129772700, 0.554620934979517250, 0.554662539442709490, +0.554704142519245270, 0.554745744209021120, 0.554787344511932230, 0.554828943427874920, 0.554870540956745370, 0.554912137098439780, 0.554953731852853460, 0.554995325219882820, +0.555036917199423940, 0.555078507791373020, 0.555120096995625590, 0.555161684812077730, 0.555203271240625850, 0.555244856281166040, 0.555286439933593830, 0.555328022197805420, +0.555369603073697320, 0.555411182561164950, 0.555452760660104520, 0.555494337370412210, 0.555535912691984430, 0.555577486624716510, 0.555619059168504850, 0.555660630323245640, +0.555702200088835090, 0.555743768465168710, 0.555785335452142930, 0.555826901049653820, 0.555868465257597810, 0.555910028075870310, 0.555951589504367740, 0.555993149542986180, +0.556034708191622040, 0.556076265450170860, 0.556117821318528940, 0.556159375796592910, 0.556200928884257980, 0.556242480581420780, 0.556284030887977400, 0.556325579803824240, +0.556367127328856850, 0.556408673462971630, 0.556450218206064660, 0.556491761558032590, 0.556533303518770730, 0.556574844088175590, 0.556616383266143270, 0.556657921052570500, +0.556699457447352500, 0.556740992450385770, 0.556782526061566640, 0.556824058280791620, 0.556865589107956030, 0.556907118542956490, 0.556948646585689430, 0.556990173236050490, +0.557031698493936080, 0.557073222359242390, 0.557114744831866070, 0.557156265911702530, 0.557197785598648300, 0.557239303892599570, 0.557280820793452980, 0.557322336301103950, +0.557363850415449110, 0.557405363136384670, 0.557446874463807140, 0.557488384397612060, 0.557529892937696060, 0.557571400083955340, 0.557612905836286420, 0.557654410194584840, +0.557695913158747340, 0.557737414728670000, 0.557778914904249470, 0.557820413685381270, 0.557861911071962150, 0.557903407063888520, 0.557944901661056040, 0.557986394863361320, +0.558027886670700580, 0.558069377082970550, 0.558110866100066660, 0.558152353721885540, 0.558193839948323610, 0.558235324779277510, 0.558276808214642650, 0.558318290254315790, +0.558359770898193110, 0.558401250146171480, 0.558442727998146320, 0.558484204454014370, 0.558525679513671940, 0.558567153177015660, 0.558608625443941080, 0.558650096314344920, +0.558691565788123960, 0.558733033865173700, 0.558774500545390800, 0.558815965828671770, 0.558857429714913030, 0.558898892204010460, 0.558940353295860670, 0.558981812990359870, +0.559023271287405030, 0.559064728186891570, 0.559106183688716340, 0.559147637792775650, 0.559189090498966260, 0.559230541807183680, 0.559271991717324890, 0.559313440229285970, +0.559354887342963900, 0.559396333058254200, 0.559437777375053740, 0.559479220293259140, 0.559520661812766160, 0.559562101933471560, 0.559603540655271630, 0.559644977978063230, +0.559686413901742010, 0.559727848426204820, 0.559769281551347970, 0.559810713277068220, 0.559852143603261410, 0.559893572529824190, 0.559935000056653090, 0.559976426183644740, +0.560017850910695110, 0.560059274237700740, 0.560100696164558260, 0.560142116691164430, 0.560183535817414870, 0.560224953543206450, 0.560266369868436030, 0.560307784792999360, +0.560349198316793200, 0.560390610439714050, 0.560432021161658800, 0.560473430482523070, 0.560514838402203730, 0.560556244920597300, 0.560597650037600650, 0.560639053753109520, +0.560680456067020770, 0.560721856979230830, 0.560763256489636650, 0.560804654598134000, 0.560846051304619620, 0.560887446608990260, 0.560928840511142560, 0.560970233010972370, +0.561011624108376570, 0.561053013803251790, 0.561094402095494770, 0.561135788985001490, 0.561177174471668590, 0.561218558555393270, 0.561259941236071040, 0.561301322513599100, +0.561342702387873760, 0.561384080858791990, 0.561425457926249760, 0.561466833590143820, 0.561508207850370810, 0.561549580706827700, 0.561590952159410240, 0.561632322208015400, +0.561673690852539710, 0.561715058092880250, 0.561756423928932660, 0.561797788360594020, 0.561839151387760970, 0.561880513010330370, 0.561921873228198200, 0.561963232041261310, +0.562004589449416670, 0.562045945452560260, 0.562087300050588930, 0.562128653243399330, 0.562170005030888540, 0.562211355412952310, 0.562252704389487710, 0.562294051960391280, +0.562335398125560220, 0.562376742884890260, 0.562418086238278380, 0.562459428185621340, 0.562500768726816090, 0.562542107861758510, 0.562583445590345680, 0.562624781912474230, +0.562666116828041240, 0.562707450336942580, 0.562748782439075220, 0.562790113134336360, 0.562831442422621730, 0.562872770303828650, 0.562914096777853530, 0.562955421844593570, +0.562996745503944740, 0.563038067755804010, 0.563079388600068120, 0.563120708036634050, 0.563162026065397890, 0.563203342686256710, 0.563244657899107160, 0.563285971703846310, +0.563327284100370140, 0.563368595088575840, 0.563409904668359940, 0.563451212839619740, 0.563492519602251110, 0.563533824956151230, 0.563575128901216750, 0.563616431437344740, +0.563657732564431410, 0.563699032282373610, 0.563740330591068650, 0.563781627490412610, 0.563822922980302340, 0.563864217060634830, 0.563905509731307150, 0.563946800992215390, +0.563988090843256520, 0.564029379284327500, 0.564070666315325320, 0.564111951936146160, 0.564153236146687110, 0.564194518946845030, 0.564235800336516880, 0.564277080315598980, +0.564318358883988400, 0.564359636041581900, 0.564400911788276560, 0.564442186123968680, 0.564483459048555350, 0.564524730561933640, 0.564566000663999870, 0.564607269354651000, +0.564648536633784000, 0.564689802501295970, 0.564731066957083190, 0.564772330001042660, 0.564813591633071320, 0.564854851853066280, 0.564896110660923820, 0.564937368056541160, +0.564978624039815020, 0.565019878610642620, 0.565061131768920260, 0.565102383514545000, 0.565143633847413730, 0.565184882767423850, 0.565226130274471330, 0.565267376368453590, +0.565308621049267710, 0.565349864316809890, 0.565391106170977430, 0.565432346611667190, 0.565473585638776480, 0.565514823252201370, 0.565556059451839290, 0.565597294237586980, +0.565638527609341860, 0.565679759567000010, 0.565720990110458730, 0.565762219239615120, 0.565803446954366240, 0.565844673254608300, 0.565885898140238820, 0.565927121611154550, +0.565968343667252790, 0.566009564308429860, 0.566050783534582940, 0.566092001345609550, 0.566133217741405680, 0.566174432721868850, 0.566215646286895910, 0.566256858436384180, +0.566298069170229960, 0.566339278488330540, 0.566380486390583030, 0.566421692876884600, 0.566462897947131560, 0.566504101601221330, 0.566545303839050770, 0.566586504660517300, +0.566627704065517320, 0.566668902053947930, 0.566710098625706430, 0.566751293780690000, 0.566792487518794960, 0.566833679839918720, 0.566874870743958260, 0.566916060230810980, +0.566957248300373200, 0.566998434952542210, 0.567039620187215650, 0.567080804004289620, 0.567121986403661520, 0.567163167385228540, 0.567204346948887990, 0.567245525094536180, +0.567286701822070530, 0.567327877131388100, 0.567369051022386440, 0.567410223494961730, 0.567451394549011500, 0.567492564184432840, 0.567533732401123040, 0.567574899198978520, +0.567616064577896820, 0.567657228537774890, 0.567698391078510280, 0.567739552199999390, 0.567780711902139630, 0.567821870184828330, 0.567863027047962100, 0.567904182491438260, +0.567945336515154000, 0.567986489119006730, 0.568027640302892880, 0.568068790066709850, 0.568109938410354950, 0.568151085333725490, 0.568192230836717990, 0.568233374919229980, +0.568274517581158430, 0.568315658822401090, 0.568356798642854160, 0.568397937042415150, 0.568439074020981370, 0.568480209578450250, 0.568521343714718300, 0.568562476429682940, +0.568603607723241810, 0.568644737595291220, 0.568685866045728790, 0.568726993074451740, 0.568768118681357570, 0.568809242866342710, 0.568850365629304800, 0.568891486970140910, +0.568932606888748690, 0.568973725385024550, 0.569014842458866130, 0.569055958110170620, 0.569097072338835550, 0.569138185144757450, 0.569179296527833940, 0.569220406487962130, +0.569261515025039630, 0.569302622138963100, 0.569343727829629940, 0.569384832096937470, 0.569425934940783310, 0.569467036361063880, 0.569508136357676830, 0.569549234930519900, +0.569590332079489500, 0.569631427804483280, 0.569672522105398430, 0.569713614982132690, 0.569754706434582590, 0.569795796462645670, 0.569836885066219210, 0.569877972245200980, +0.569919057999487390, 0.569960142328976180, 0.570001225233564670, 0.570042306713150370, 0.570083386767630040, 0.570124465396901200, 0.570165542600861160, 0.570206618379407670, +0.570247692732437250, 0.570288765659847650, 0.570329837161536400, 0.570370907237400250, 0.570411975887336830, 0.570453043111243450, 0.570494108909017860, 0.570535173280556700, +0.570576236225757480, 0.570617297744517750, 0.570658357836735020, 0.570699416502306160, 0.570740473741128680, 0.570781529553100130, 0.570822583938118020, 0.570863636896079110, +0.570904688426881140, 0.570945738530421410, 0.570986787206597680, 0.571027834455306690, 0.571068880276446090, 0.571109924669913620, 0.571150967635605910, 0.571192009173420940, +0.571233049283255800, 0.571274087965008450, 0.571315125218575530, 0.571356161043854890, 0.571397195440743740, 0.571438228409139940, 0.571479259948940220, 0.571520290060042460, +0.571561318742343840, 0.571602345995742330, 0.571643371820134690, 0.571684396215418560, 0.571725419181491330, 0.571766440718251000, 0.571807460825594190, 0.571848479503418770, +0.571889496751622480, 0.571930512570102080, 0.571971526958755420, 0.572012539917479910, 0.572053551446173540, 0.572094561544732820, 0.572135570213055720, 0.572176577451039670, +0.572217583258582520, 0.572258587635581020, 0.572299590581933140, 0.572340592097536290, 0.572381592182288230, 0.572422590836085930, 0.572463588058827130, 0.572504583850409250, +0.572545578210730380, 0.572586571139687250, 0.572627562637177620, 0.572668552703099020, 0.572709541337349530, 0.572750528539825780, 0.572791514310425630, 0.572832498649047170, +0.572873481555587040, 0.572914463029943200, 0.572955443072013180, 0.572996421681694960, 0.573037398858885380, 0.573078374603482210, 0.573119348915383190, 0.573160321794486060, +0.573201293240687800, 0.573242263253886280, 0.573283231833979220, 0.573324198980864290, 0.573365164694438660, 0.573406128974599970, 0.573447091821245980, 0.573488053234274760, +0.573529013213582850, 0.573569971759068540, 0.573610928870629590, 0.573651884548163070, 0.573692838791566740, 0.573733791600738340, 0.573774742975575850, 0.573815692915976120, +0.573856641421837120, 0.573897588493056500, 0.573938534129532330, 0.573979478331161470, 0.574020421097841900, 0.574061362429471260, 0.574102302325947610, 0.574143240787167830, +0.574184177813029880, 0.574225113403431520, 0.574266047558270820, 0.574306980277444530, 0.574347911560850850, 0.574388841408387750, 0.574429769819952200, 0.574470696795442160, +0.574511622334755500, 0.574552546437790080, 0.574593469104442870, 0.574634390334612060, 0.574675310128195280, 0.574716228485090520, 0.574757145405194850, 0.574798060888406350, +0.574838974934622660, 0.574879887543741970, 0.574920798715661150, 0.574961708450278270, 0.575002616747491200, 0.575043523607197900, 0.575084429029295460, 0.575125333013681960, +0.575166235560255150, 0.575207136668913100, 0.575248036339552790, 0.575288934572072420, 0.575329831366370060, 0.575370726722342800, 0.575411620639888710, 0.575452513118905550, +0.575493404159291510, 0.575534293760943560, 0.575575181923759890, 0.575616068647638260, 0.575656953932476840, 0.575697837778172630, 0.575738720184623910, 0.575779601151728330, +0.575820480679384070, 0.575861358767488340, 0.575902235415939100, 0.575943110624634320, 0.575983984393472200, 0.576024856722349600, 0.576065727611165030, 0.576106597059816370, +0.576147465068200910, 0.576188331636216860, 0.576229196763761830, 0.576270060450734260, 0.576310922697031210, 0.576351783502550790, 0.576392642867190940, 0.576433500790849870, +0.576474357273424660, 0.576515212314813510, 0.576556065914914370, 0.576596918073625450, 0.576637768790843830, 0.576678618066467810, 0.576719465900395250, 0.576760312292524450, +0.576801157242752380, 0.576842000750977470, 0.576882842817098010, 0.576923683441010970, 0.576964522622614770, 0.577005360361807270, 0.577046196658486670, 0.577087031512550250, +0.577127864923896230, 0.577168696892422560, 0.577209527418027560, 0.577250356500608300, 0.577291184140063200, 0.577332010336290110, 0.577372835089187460, 0.577413658398652220, +0.577454480264582900, 0.577495300686877380, 0.577536119665433940, 0.577576937200149910, 0.577617753290923460, 0.577658567937653020, 0.577699381140235780, 0.577740192898570150, +0.577781003212553990, 0.577821812082085720, 0.577862619507062520, 0.577903425487382720, 0.577944230022944480, 0.577985033113645910, 0.578025834759384520, 0.578066634960058390, +0.578107433715565830, 0.578148231025804930, 0.578189026890673090, 0.578229821310068730, 0.578270614283889820, 0.578311405812034770, 0.578352195894400790, 0.578392984530886280, +0.578433771721389430, 0.578474557465808450, 0.578515341764040620, 0.578556124615984600, 0.578596906021538570, 0.578637685980599840, 0.578678464493066920, 0.578719241558837920, +0.578760017177811110, 0.578800791349883940, 0.578841564074954800, 0.578882335352921660, 0.578923105183683170, 0.578963873567136410, 0.579004640503180120, 0.579045405991712170, +0.579086170032630960, 0.579126932625834150, 0.579167693771219900, 0.579208453468686430, 0.579249211718132150, 0.579289968519454580, 0.579330723872552020, 0.579371477777323010, +0.579412230233664950, 0.579452981241476260, 0.579493730800655140, 0.579534478911100100, 0.579575225572708570, 0.579615970785378850, 0.579656714549009240, 0.579697456863498270, +0.579738197728743240, 0.579778937144642680, 0.579819675111094780, 0.579860411627998170, 0.579901146695250060, 0.579941880312749070, 0.579982612480393510, 0.580023343198081690, +0.580064072465711120, 0.580104800283180340, 0.580145526650387990, 0.580186251567231470, 0.580226975033609320, 0.580267697049419720, 0.580308417614561310, 0.580349136728931400, +0.580389854392428630, 0.580430570604951290, 0.580471285366397920, 0.580511998676665810, 0.580552710535653830, 0.580593420943260050, 0.580634129899383120, 0.580674837403920450, +0.580715543456770790, 0.580756248057832100, 0.580796951207003250, 0.580837652904181660, 0.580878353149265950, 0.580919051942154320, 0.580959749282745410, 0.581000445170936850, +0.581041139606627070, 0.581081832589714910, 0.581122524120097680, 0.581163214197674250, 0.581203902822342800, 0.581244589994001860, 0.581285275712549070, 0.581325959977883170, +0.581366642789902350, 0.581407324148505270, 0.581448004053589540, 0.581488682505053810, 0.581529359502796380, 0.581570035046715890, 0.581610709136709870, 0.581651381772677170, +0.581692052954515980, 0.581732722682125060, 0.581773390955401930, 0.581814057774245440, 0.581854723138554020, 0.581895387048225520, 0.581936049503158470, 0.581976710503251390, +0.582017370048402820, 0.582058028138510490, 0.582098684773473040, 0.582139339953189010, 0.582179993677556910, 0.582220645946474490, 0.582261296759840400, 0.582301946117553040, +0.582342594019511270, 0.582383240465612630, 0.582423885455755850, 0.582464528989839360, 0.582505171067762010, 0.582545811689421320, 0.582586450854716050, 0.582627088563545060, +0.582667724815805980, 0.582708359611397550, 0.582748992950218200, 0.582789624832166790, 0.582830255257140940, 0.582870884225039520, 0.582911511735760830, 0.582952137789203630, +0.582992762385265870, 0.583033385523846090, 0.583074007204842930, 0.583114627428155120, 0.583155246193680310, 0.583195863501317470, 0.583236479350964900, 0.583277093742521570, +0.583317706675885010, 0.583358318150954290, 0.583398928167628170, 0.583439536725804290, 0.583480143825381600, 0.583520749466258540, 0.583561353648333950, 0.583601956371505690, +0.583642557635672410, 0.583683157440732850, 0.583723755786585750, 0.583764352673128760, 0.583804948100261070, 0.583845542067880970, 0.583886134575887230, 0.583926725624178020, +0.583967315212651880, 0.584007903341207450, 0.584048490009743570, 0.584089075218158120, 0.584129658966350050, 0.584170241254217790, 0.584210822081660310, 0.584251401448575460, +0.584291979354861990, 0.584332555800419100, 0.584373130785144300, 0.584413704308936690, 0.584454276371694890, 0.584494846973317770, 0.584535416113703080, 0.584575983792749890, +0.584616550010356840, 0.584657114766422680, 0.584697678060845380, 0.584738239893523800, 0.584778800264356800, 0.584819359173243010, 0.584859916620080520, 0.584900472604768300, +0.584941027127204750, 0.584981580187289070, 0.585022131784919130, 0.585062681919993890, 0.585103230592412200, 0.585143777802072050, 0.585184323548872510, 0.585224867832712210, +0.585265410653490030, 0.585305952011104020, 0.585346491905453070, 0.585387030336435910, 0.585427567303951620, 0.585468102807897960, 0.585508636848174110, 0.585549169424678610, +0.585589700537310520, 0.585630230185967830, 0.585670758370549600, 0.585711285090954490, 0.585751810347081460, 0.585792334138828590, 0.585832856466094950, 0.585873377328779420, +0.585913896726780180, 0.585954414659996090, 0.585994931128326010, 0.586035446131669020, 0.586075959669922990, 0.586116471742987090, 0.586156982350759970, 0.586197491493140820, +0.586237999170027500, 0.586278505381319200, 0.586319010126914670, 0.586359513406713000, 0.586400015220612140, 0.586440515568511290, 0.586481014450309090, 0.586521511865904840, +0.586562007815196300, 0.586602502298082750, 0.586642995314463070, 0.586683486864236100, 0.586723976947300160, 0.586764465563554330, 0.586804952712897570, 0.586845438395228070, +0.586885922610445030, 0.586926405358447200, 0.586966886639133770, 0.587007366452402590, 0.587047844798153080, 0.587088321676284000, 0.587128797086694520, 0.587169271029282620, +0.587209743503947500, 0.587250214510588010, 0.587290684049103450, 0.587331152119391800, 0.587371618721352130, 0.587412083854883530, 0.587452547519885070, 0.587493009716254950, +0.587533470443892150, 0.587573929702696170, 0.587614387492564890, 0.587654843813397720, 0.587695298665093510, 0.587735752047551240, 0.587776203960669320, 0.587816654404346940, +0.587857103378482850, 0.587897550882976460, 0.587937996917725750, 0.587978441482630010, 0.588018884577588220, 0.588059326202499570, 0.588099766357262240, 0.588140205041775550, +0.588180642255938250, 0.588221077999649730, 0.588261512272808210, 0.588301945075312860, 0.588342376407063110, 0.588382806267956910, 0.588423234657893810, 0.588463661576772550, +0.588504087024492530, 0.588544511000951950, 0.588584933506050010, 0.588625354539685790, 0.588665774101758580, 0.588706192192166580, 0.588746608810808980, 0.588787023957584980, +0.588827437632393760, 0.588867849835133520, 0.588908260565703780, 0.588948669824003290, 0.588989077609931470, 0.589029483923386610, 0.589069888764268130, 0.589110292132475230, +0.589150694027906210, 0.589191094450460470, 0.589231493400037000, 0.589271890876535200, 0.589312286879853260, 0.589352681409890610, 0.589393074466546210, 0.589433466049719580, +0.589473856159308920, 0.589514244795213530, 0.589554631957332600, 0.589595017645565430, 0.589635401859810340, 0.589675784599966720, 0.589716165865933780, 0.589756545657610600, +0.589796923974895800, 0.589837300817688700, 0.589877676185888270, 0.589918050079394130, 0.589958422498104370, 0.589998793441918630, 0.590039162910736330, 0.590079530904455640, +0.590119897422976210, 0.590160262466197020, 0.590200626034017460, 0.590240988126336070, 0.590281348743052160, 0.590321707884064910, 0.590362065549273620, 0.590402421738576930, +0.590442776451874260, 0.590483129689064470, 0.590523481450047290, 0.590563831734721160, 0.590604180542985360, 0.590644527874739090, 0.590684873729881880, 0.590725218108312020, +0.590765561009929270, 0.590805902434632930, 0.590846242382321420, 0.590886580852894360, 0.590926917846250840, 0.590967253362290390, 0.591007587400911530, 0.591047919962013560, +0.591088251045495780, 0.591128580651257840, 0.591168908779198030, 0.591209235429216000, 0.591249560601210810, 0.591289884295082110, 0.591330206510728430, 0.591370527248049060, +0.591410846506943530, 0.591451164287311150, 0.591491480589050540, 0.591531795412061130, 0.591572108756242780, 0.591612420621493660, 0.591652731007713540, 0.591693039914801490, +0.591733347342657370, 0.591773653291179370, 0.591813957760267350, 0.591854260749820390, 0.591894562259738130, 0.591934862289919090, 0.591975160840262920, 0.592015457910668900, +0.592055753501036450, 0.592096047611264440, 0.592136340241252170, 0.592176631390899040, 0.592216921060104820, 0.592257209248767900, 0.592297495956787930, 0.592337781184064220, +0.592378064930496380, 0.592418347195983070, 0.592458627980423810, 0.592498907283718460, 0.592539185105765420, 0.592579461446464340, 0.592619736305714740, 0.592660009683416140, +0.592700281579467080, 0.592740551993767410, 0.592780820926216310, 0.592821088376713550, 0.592861354345157630, 0.592901618831448430, 0.592941881835485020, 0.592982143357167370, +0.593022403396394000, 0.593062661953064670, 0.593102919027078680, 0.593143174618335660, 0.593183428726734460, 0.593223681352174630, 0.593263932494555890, 0.593304182153777000, +0.593344430329737720, 0.593384677022337330, 0.593424922231475580, 0.593465165957051230, 0.593505408198963910, 0.593545648957113040, 0.593585888231398460, 0.593626126021718830, +0.593666362327973870, 0.593706597150062910, 0.593746830487885900, 0.593787062341341490, 0.593827292710329300, 0.593867521594748980, 0.593907748994500160, 0.593947974909481700, +0.593988199339593240, 0.594028422284734630, 0.594068643744804610, 0.594108863719702950, 0.594149082209329160, 0.594189299213583100, 0.594229514732363300, 0.594269728765569830, +0.594309941313102000, 0.594350152374859660, 0.594390361950741570, 0.594430570040647590, 0.594470776644477120, 0.594510981762130130, 0.594551185393505380, 0.594591387538502600, +0.594631588197021330, 0.594671787368961540, 0.594711985054221850, 0.594752181252702240, 0.594792375964302460, 0.594832569188921470, 0.594872760926459020, 0.594912951176814640, +0.594953139939888300, 0.594993327215578740, 0.595033513003785820, 0.595073697304409180, 0.595113880117348560, 0.595154061442502940, 0.595194241279772160, 0.595234419629055770, +0.595274596490253720, 0.595314771863264870, 0.595354945747988970, 0.595395118144325770, 0.595435289052175130, 0.595475458471435900, 0.595515626402008060, 0.595555792843791120, +0.595595957796685060, 0.595636121260588740, 0.595676283235402120, 0.595716443721025170, 0.595756602717356640, 0.595796760224296730, 0.595836916241744950, 0.595877070769601170, +0.595917223807764350, 0.595957375356134470, 0.595997525414611150, 0.596037673983094370, 0.596077821061483100, 0.596117966649677200, 0.596158110747576410, 0.596198253355080810, +0.596238394472089040, 0.596278534098501400, 0.596318672234217420, 0.596358808879137060, 0.596398944033159410, 0.596439077696184320, 0.596479209868111980, 0.596519340548841150, +0.596559469738272010, 0.596599597436304200, 0.596639723642837790, 0.596679848357771660, 0.596719971581005870, 0.596760093312440290, 0.596800213551974770, 0.596840332299508280, +0.596880449554941020, 0.596920565318172720, 0.596960679589103260, 0.597000792367631710, 0.597040903653658250, 0.597081013447082530, 0.597121121747804630, 0.597161228555723620, +0.597201333870739480, 0.597241437692752290, 0.597281540021661230, 0.597321640857366280, 0.597361740199767290, 0.597401838048764340, 0.597441934404256300, 0.597482029266143580, +0.597522122634325690, 0.597562214508702840, 0.597602304889174100, 0.597642393775639660, 0.597682481167999160, 0.597722567066152900, 0.597762651469999850, 0.597802734379440090, +0.597842815794373590, 0.597882895714700320, 0.597922974140319470, 0.597963051071131240, 0.598003126507035350, 0.598043200447932020, 0.598083272893720320, 0.598123343844300440, +0.598163413299572570, 0.598203481259435790, 0.598243547723790290, 0.598283612692535940, 0.598323676165572920, 0.598363738142800310, 0.598403798624118410, 0.598443857609427090, +0.598483915098626310, 0.598523971091615480, 0.598564025588294690, 0.598604078588563900, 0.598644130092323200, 0.598684180099471890, 0.598724228609910040, 0.598764275623537730, +0.598804321140254950, 0.598844365159961090, 0.598884407682556350, 0.598924448707940930, 0.598964488236014000, 0.599004526266675890, 0.599044562799826430, 0.599084597835365830, +0.599124631373193490, 0.599164663413209620, 0.599204693955313950, 0.599244722999407010, 0.599284750545387880, 0.599324776593156860, 0.599364801142613920, 0.599404824193659370, +0.599444845746192280, 0.599484865800113180, 0.599524884355321920, 0.599564901411718810, 0.599604916969203040, 0.599644931027674910, 0.599684943587034950, 0.599724954647182230, +0.599764964208017060, 0.599804972269439520, 0.599844978831349910, 0.599884983893647530, 0.599924987456232680, 0.599964989519005340, 0.600004990081865920, 0.600044989144713600, +0.600084986707448810, 0.600124982769971620, 0.600164977332182330, 0.600204970393980240, 0.600244961955265670, 0.600284952015938680, 0.600324940575899690, 0.600364927635048010, +0.600404913193284040, 0.600444897250507760, 0.600484879806619580, 0.600524860861518790, 0.600564840415105940, 0.600604818467281310, 0.600644795017944320, 0.600684770066995280, +0.600724743614334370, 0.600764715659861890, 0.600804686203477380, 0.600844655245081020, 0.600884622784573110, 0.600924588821853960, 0.600964553356822970, 0.601004516389380680, +0.601044477919427060, 0.601084437946862500, 0.601124396471586550, 0.601164353493499730, 0.601204309012501880, 0.601244263028493650, 0.601284215541374460, 0.601324166551044700, +0.601364116057404810, 0.601404064060354400, 0.601444010559793680, 0.601483955555623060, 0.601523899047742840, 0.601563841036052540, 0.601603781520452690, 0.601643720500843250, +0.601683657977124970, 0.601723593949197170, 0.601763528416960460, 0.601803461380314820, 0.601843392839160880, 0.601883322793398180, 0.601923251242927120, 0.601963178187648000, +0.602003103627461230, 0.602043027562266350, 0.602082949991963880, 0.602122870916454330, 0.602162790335637350, 0.602202708249413470, 0.602242624657682630, 0.602282539560345720, +0.602322452957302020, 0.602362364848452290, 0.602402275233696600, 0.602442184112935600, 0.602482091486068680, 0.602521997352996610, 0.602561901713619560, 0.602601804567838070, +0.602641705915551770, 0.602681605756661190, 0.602721504091066510, 0.602761400918668590, 0.602801296239366620, 0.602841190053061580, 0.602881082359653760, 0.602920973159043030, +0.602960862451129790, 0.603000750235814450, 0.603040636512997550, 0.603080521282578720, 0.603120404544458480, 0.603160286298537350, 0.603200166544715870, 0.603240045282893540, +0.603279922512971130, 0.603319798234848940, 0.603359672448427590, 0.603399545153606720, 0.603439416350286970, 0.603479286038368650, 0.603519154217752480, 0.603559020888338130, +0.603598886050026100, 0.603638749702717030, 0.603678611846311330, 0.603718472480708760, 0.603758331605810050, 0.603798189221515850, 0.603838045327725780, 0.603877899924340600, +0.603917753011260720, 0.603957604588386760, 0.603997454655618490, 0.604037303212856540, 0.604077150260001310, 0.604116995796953550, 0.604156839823613010, 0.604196682339880330, +0.604236523345656030, 0.604276362840840740, 0.604316200825334100, 0.604356037299037090, 0.604395872261849880, 0.604435705713673330, 0.604475537654407310, 0.604515368083952340, +0.604555197002209280, 0.604595024409077860, 0.604634850304458960, 0.604674674688252870, 0.604714497560360550, 0.604754318920681540, 0.604794138769116700, 0.604833957105566640, +0.604873773929931910, 0.604913589242112470, 0.604953403042009060, 0.604993215329522100, 0.605033026104552450, 0.605072835366999960, 0.605112643116765270, 0.605152449353749010, +0.605192254077852040, 0.605232057288974110, 0.605271858987015960, 0.605311659171878460, 0.605351457843461560, 0.605391255001666020, 0.605431050646392240, 0.605470844777541320, +0.605510637395012870, 0.605550428498707770, 0.605590218088526640, 0.605630006164370350, 0.605669792726138630, 0.605709577773732470, 0.605749361307052370, 0.605789143325999310, +0.605828923830472930, 0.605868702820374190, 0.605908480295603850, 0.605948256256062520, 0.605988030701650300, 0.606027803632267940, 0.606067575047816050, 0.606107344948195630, +0.606147113333306510, 0.606186880203049560, 0.606226645557325750, 0.606266409396035040, 0.606306171719078190, 0.606345932526356050, 0.606385691817769360, 0.606425449593218090, +0.606465205852603220, 0.606504960595825260, 0.606544713822785300, 0.606584465533383190, 0.606624215727520010, 0.606663964405096180, 0.606703711566012880, 0.606743457210169870, +0.606783201337468210, 0.606822943947808670, 0.606862685041091980, 0.606902424617218330, 0.606942162676088580, 0.606981899217603700, 0.607021634241663780, 0.607061367748169770, +0.607101099737022420, 0.607140830208122590, 0.607180559161370370, 0.607220286596666710, 0.607260012513912370, 0.607299736913008310, 0.607339459793854620, 0.607379181156352250, +0.607418901000401860, 0.607458619325904610, 0.607498336132760500, 0.607538051420870580, 0.607577765190135510, 0.607617477440456350, 0.607657188171733090, 0.607696897383866900, +0.607736605076758860, 0.607776311250308950, 0.607816015904418250, 0.607855719038987500, 0.607895420653917770, 0.607935120749109160, 0.607974819324462850, 0.608014516379879360, +0.608054211915259990, 0.608093905930504720, 0.608133598425514620, 0.608173289400190660, 0.608212978854433710, 0.608252666788144050, 0.608292353201222660, 0.608332038093570390, +0.608371721465088440, 0.608411403315676780, 0.608451083645236700, 0.608490762453669180, 0.608530439740874400, 0.608570115506753550, 0.608609789751207390, 0.608649462474137090, +0.608689133675442860, 0.608728803355025770, 0.608768471512786570, 0.608808138148626670, 0.608847803262446030, 0.608887466854145850, 0.608927128923626990, 0.608966789470790750, +0.609006448495537090, 0.609046105997767430, 0.609085761977382400, 0.609125416434283310, 0.609165069368370340, 0.609204720779544790, 0.609244370667707310, 0.609284019032759310, +0.609323665874600960, 0.609363311193133360, 0.609402954988257920, 0.609442597259874600, 0.609482238007884920, 0.609521877232189650, 0.609561514932689950, 0.609601151109286140, +0.609640785761879520, 0.609680418890370830, 0.609720050494661490, 0.609759680574651690, 0.609799309130242720, 0.609838936161335440, 0.609878561667831160, 0.609918185649630070, +0.609957808106633690, 0.609997429038742660, 0.610037048445858380, 0.610076666327881160, 0.610116282684712300, 0.610155897516253100, 0.610195510822403750, 0.610235122603065670, +0.610274732858139820, 0.610314341587527400, 0.610353948791128810, 0.610393554468845360, 0.610433158620578010, 0.610472761246228180, 0.610512362345696060, 0.610551961918882950, +0.610591559965690030, 0.610631156486018510, 0.610670751479768790, 0.610710344946842180, 0.610749936887139630, 0.610789527300562680, 0.610829116187011520, 0.610868703546387560, +0.610908289378592210, 0.610947873683525880, 0.610987456461089760, 0.611027037711185050, 0.611066617433713040, 0.611106195628574160, 0.611145772295669800, 0.611185347434900940, +0.611224921046169210, 0.611264493129374700, 0.611304063684419030, 0.611343632711203180, 0.611383200209628550, 0.611422766179595680, 0.611462330621005750, 0.611501893533760050, +0.611541454917760020, 0.611581014772905940, 0.611620573099099340, 0.611660129896241410, 0.611699685164233340, 0.611739238902975770, 0.611778791112370100, 0.611818341792317870, +0.611857890942719360, 0.611897438563476110, 0.611936984654489310, 0.611976529215660480, 0.612016072246889810, 0.612055613748079040, 0.612095153719129260, 0.612134692159941980, +0.612174229070417520, 0.612213764450457500, 0.612253298299963110, 0.612292830618835770, 0.612332361406976110, 0.612371890664285430, 0.612411418390665040, 0.612450944586016570, +0.612490469250240310, 0.612529992383237800, 0.612569513984910770, 0.612609034055159540, 0.612648552593885840, 0.612688069600990650, 0.612727585076375590, 0.612767099019941310, +0.612806611431589320, 0.612846122311220710, 0.612885631658737220, 0.612925139474039150, 0.612964645757028360, 0.613004150507605930, 0.613043653725673490, 0.613083155411131560, +0.613122655563881790, 0.613162154183825250, 0.613201651270863790, 0.613241146824897830, 0.613280640845829010, 0.613320133333558950, 0.613359624287988070, 0.613399113709018230, +0.613438601596550610, 0.613478087950486860, 0.613517572770727490, 0.613557056057174250, 0.613596537809728340, 0.613636018028291490, 0.613675496712764110, 0.613714973863048070, +0.613754449479044560, 0.613793923560655320, 0.613833396107780980, 0.613872867120323070, 0.613912336598183010, 0.613951804541262410, 0.613991270949461930, 0.614030735822683420, +0.614070199160828280, 0.614109660963797380, 0.614149121231492230, 0.614188579963814370, 0.614228037160665430, 0.614267492821945930, 0.614306946947557830, 0.614346399537402220, +0.614385850591381070, 0.614425300109394890, 0.614464748091345550, 0.614504194537134230, 0.614543639446662790, 0.614583082819831980, 0.614622524656543430, 0.614661964956698560, +0.614701403720199100, 0.614740840946945810, 0.614780276636840430, 0.614819710789784260, 0.614859143405679260, 0.614898574484426090, 0.614938004025926350, 0.614977432030082040, +0.615016858496793770, 0.615056283425963410, 0.615095706817492260, 0.615135128671282280, 0.615174548987234120, 0.615213967765249500, 0.615253385005230080, 0.615292800707077480, +0.615332214870692450, 0.615371627495976960, 0.615411038582832410, 0.615450448131160680, 0.615489856140862380, 0.615529262611839490, 0.615568667543993420, 0.615608070937226030, +0.615647472791438060, 0.615686873106531470, 0.615726271882408030, 0.615765669118968570, 0.615805064816114970, 0.615844458973748730, 0.615883851591771610, 0.615923242670084580, +0.615962632208589380, 0.616002020207187640, 0.616041406665781110, 0.616080791584270870, 0.616120174962558550, 0.616159556800545790, 0.616198937098134560, 0.616238315855225590, +0.616277693071720760, 0.616317068747521790, 0.616356442882530550, 0.616395815476647680, 0.616435186529775470, 0.616474556041815450, 0.616513924012668800, 0.616553290442237390, +0.616592655330422620, 0.616632018677126690, 0.616671380482250340, 0.616710740745695430, 0.616750099467363810, 0.616789456647157230, 0.616828812284976660, 0.616868166380723950, +0.616907518934300960, 0.616946869945609540, 0.616986219414550560, 0.617025567341025980, 0.617064913724937550, 0.617104258566187110, 0.617143601864675760, 0.617182943620305350, +0.617222283832977610, 0.617261622502594420, 0.617300959629056960, 0.617340295212267080, 0.617379629252126750, 0.617418961748537050, 0.617458292701399850, 0.617497622110616980, +0.617536949976090430, 0.617576276297721160, 0.617615601075411140, 0.617654924309062210, 0.617694245998576250, 0.617733566143854330, 0.617772884744798520, 0.617812201801310470, +0.617851517313292240, 0.617890831280644930, 0.617930143703270480, 0.617969454581070780, 0.618008763913947660, 0.618048071701802430, 0.618087377944536830, 0.618126682642053280, +0.618165985794252640, 0.618205287401037080, 0.618244587462308150, 0.618283885977968240, 0.618323182947918220, 0.618362478372060260, 0.618401772250296130, 0.618441064582527900, +0.618480355368656640, 0.618519644608584440, 0.618558932302213260, 0.618598218449444960, 0.618637503050180840, 0.618676786104322970, 0.618716067611773110, 0.618755347572433450, +0.618794625986205050, 0.618833902852990110, 0.618873178172690720, 0.618912451945208050, 0.618951724170444310, 0.618990994848301220, 0.619030263978680990, 0.619069531561484700, +0.619108797596614640, 0.619148062083972550, 0.619187325023460740, 0.619226586414980180, 0.619265846258433170, 0.619305104553721560, 0.619344361300747550, 0.619383616499412320, +0.619422870149617940, 0.619462122251266400, 0.619501372804259990, 0.619540621808499780, 0.619579869263887970, 0.619619115170326860, 0.619658359527717640, 0.619697602335962490, +0.619736843594963280, 0.619776083304622420, 0.619815321464840970, 0.619854558075521140, 0.619893793136565010, 0.619933026647874750, 0.619972258609351570, 0.620011489020897640, +0.620050717882415060, 0.620089945193806000, 0.620129170954971780, 0.620168395165814680, 0.620207617826236460, 0.620246838936139630, 0.620286058495425400, 0.620325276503995940, +0.620364492961753330, 0.620403707868599770, 0.620442921224436670, 0.620482133029166220, 0.620521343282690820, 0.620560551984911670, 0.620599759135731180, 0.620638964735051200, +0.620678168782774260, 0.620717371278801560, 0.620756572223035370, 0.620795771615377800, 0.620834969455731130, 0.620874165743996680, 0.620913360480076840, 0.620952553663873590, +0.620991745295289220, 0.621030935374225270, 0.621070123900583910, 0.621109310874267240, 0.621148496295177650, 0.621187680163216460, 0.621226862478286180, 0.621266043240289000, +0.621305222449126340, 0.621344400104700600, 0.621383576206913980, 0.621422750755668660, 0.621461923750866170, 0.621501095192408810, 0.621540265080198770, 0.621579433414138350, +0.621618600194129070, 0.621657765420073340, 0.621696929091873020, 0.621736091209430850, 0.621775251772648140, 0.621814410781427180, 0.621853568235670280, 0.621892724135279850, +0.621931878480157190, 0.621971031270204810, 0.622010182505325250, 0.622049332185419910, 0.622088480310391210, 0.622127626880141230, 0.622166771894572590, 0.622205915353586710, +0.622245057257086010, 0.622284197604972670, 0.622323336397149210, 0.622362473633517040, 0.622401609313978700, 0.622440743438436250, 0.622479876006792440, 0.622519007018948470, +0.622558136474807070, 0.622597264374270210, 0.622636390717240640, 0.622675515503619770, 0.622714638733310010, 0.622753760406213660, 0.622792880522233360, 0.622831999081270400, +0.622871116083227540, 0.622910231528007170, 0.622949345415510950, 0.622988457745641270, 0.623027568518300550, 0.623066677733391190, 0.623105785390814740, 0.623144891490473920, +0.623183996032270810, 0.623223099016108060, 0.623262200441887290, 0.623301300309510920, 0.623340398618881350, 0.623379495369901120, 0.623418590562471840, 0.623457684196496050, +0.623496776271876050, 0.623535866788514470, 0.623574955746312830, 0.623614043145173880, 0.623653128985000140, 0.623692213265693130, 0.623731295987155710, 0.623770377149290070, +0.623809456751998730, 0.623848534795183430, 0.623887611278746810, 0.623926686202591170, 0.623965759566619150, 0.624004831370732480, 0.624043901614833580, 0.624082970298824980, +0.624122037422609300, 0.624161102986088290, 0.624200166989164360, 0.624239229431740040, 0.624278290313718070, 0.624317349634999960, 0.624356407395488590, 0.624395463595086350, +0.624434518233695330, 0.624473571311217830, 0.624512622827556490, 0.624551672782613920, 0.624590721176291890, 0.624629768008492900, 0.624668813279119610, 0.624707856988074630, +0.624746899135259600, 0.624785939720577390, 0.624824978743930280, 0.624864016205221140, 0.624903052104351600, 0.624942086441224400, 0.624981119215741950, 0.625020150427807120, +0.625059180077321530, 0.625098208164187930, 0.625137234688309170, 0.625176259649587120, 0.625215283047924290, 0.625254304883223310, 0.625293325155386830, 0.625332343864316800, +0.625371361009915860, 0.625410376592086540, 0.625449390610731570, 0.625488403065752820, 0.625527413957053020, 0.625566423284534710, 0.625605431048100740, 0.625644437247652840, +0.625683441883093770, 0.625722444954326160, 0.625761446461252760, 0.625800446403775410, 0.625839444781796870, 0.625878441595219770, 0.625917436843946960, 0.625956430527880190, +0.625995422646922320, 0.626034413200976300, 0.626073402189943780, 0.626112389613727840, 0.626151375472230990, 0.626190359765355970, 0.626229342493004660, 0.626268323655080010, +0.626307303251484540, 0.626346281282121220, 0.626385257746891910, 0.626424232645699350, 0.626463205978446180, 0.626502177745035470, 0.626541147945368860, 0.626580116579349420, +0.626619083646879680, 0.626658049147862610, 0.626697013082200050, 0.626735975449794980, 0.626774936250550250, 0.626813895484367830, 0.626852853151150800, 0.626891809250801460, +0.626930763783223100, 0.626969716748317360, 0.627008668145987440, 0.627047617976135840, 0.627086566238665430, 0.627125512933478290, 0.627164458060477490, 0.627203401619565450, +0.627242343610645240, 0.627281284033618820, 0.627320222888389290, 0.627359160174859150, 0.627398095892931380, 0.627437030042508060, 0.627475962623492260, 0.627514893635786830, +0.627553823079293750, 0.627592750953916200, 0.627631677259556820, 0.627670601996118460, 0.627709525163503310, 0.627748446761614340, 0.627787366790354300, 0.627826285249626140, +0.627865202139331950, 0.627904117459374800, 0.627943031209657220, 0.627981943390082510, 0.628020854000552630, 0.628059763040970550, 0.628098670511239020, 0.628137576411261220, +0.628176480740939120, 0.628215383500175810, 0.628254284688874120, 0.628293184306937040, 0.628332082354266520, 0.628370978830765870, 0.628409873736338160, 0.628448767070885370, +0.628487658834310790, 0.628526549026516950, 0.628565437647407020, 0.628604324696883320, 0.628643210174848700, 0.628682094081206010, 0.628720976415858560, 0.628759857178708190, +0.628798736369658330, 0.628837613988611490, 0.628876490035470970, 0.628915364510138960, 0.628954237412518550, 0.628993108742512460, 0.629031978500024010, 0.629070846684955160, +0.629109713297209330, 0.629148578336689470, 0.629187441803297890, 0.629226303696937660, 0.629265164017511760, 0.629304022764923140, 0.629342879939074230, 0.629381735539868090, +0.629420589567207590, 0.629459442020996020, 0.629498292901135460, 0.629537142207529100, 0.629575989940080020, 0.629614836098691180, 0.629653680683264990, 0.629692523693704540, +0.629731365129912900, 0.629770204991793040, 0.629809043279247470, 0.629847879992179170, 0.629886715130491550, 0.629925548694086790, 0.629964380682868200, 0.630003211096738620, +0.630042039935601370, 0.630080867199358740, 0.630119692887913920, 0.630158517001169760, 0.630197339539029790, 0.630236160501395970, 0.630274979888171830, 0.630313797699260330, +0.630352613934564540, 0.630391428593986890, 0.630430241677430780, 0.630469053184798960, 0.630507863115994940, 0.630546671470920810, 0.630585478249480080, 0.630624283451575950, +0.630663087077110830, 0.630701889125987900, 0.630740689598110360, 0.630779488493381390, 0.630818285811703290, 0.630857081552979590, 0.630895875717113140, 0.630934668304007350, +0.630973459313564520, 0.631012248745688060, 0.631051036600280950, 0.631089822877246580, 0.631128607576487370, 0.631167390697906620, 0.631206172241407400, 0.631244952206893030, +0.631283730594266010, 0.631322507403429660, 0.631361282634287040, 0.631400056286741560, 0.631438828360695540, 0.631477598856052480, 0.631516367772715800, 0.631555135110587810, +0.631593900869572010, 0.631632665049571500, 0.631671427650489560, 0.631710188672228830, 0.631748948114692510, 0.631787705977783890, 0.631826462261406370, 0.631865216965462270, +0.631903970089855220, 0.631942721634488170, 0.631981471599264770, 0.632020219984087190, 0.632058966788859200, 0.632097712013483750, 0.632136455657864360, 0.632175197721903450, +0.632213938205504530, 0.632252677108571250, 0.632291414431005780, 0.632330150172711880, 0.632368884333592510, 0.632407616913551300, 0.632446347912490770, 0.632485077330314230, +0.632523805166925080, 0.632562531422226850, 0.632601256096121830, 0.632639979188513670, 0.632678700699305650, 0.632717420628401190, 0.632756138975702820, 0.632794855741114050, +0.632833570924538180, 0.632872284525878740, 0.632910996545038240, 0.632949706981920320, 0.632988415836428400, 0.633027123108465100, 0.633065828797934050, 0.633104532904738340, +0.633143235428781700, 0.633181936369966560, 0.633220635728196650, 0.633259333503375150, 0.633298029695405610, 0.633336724304190630, 0.633375417329633980, 0.633414108771638620, +0.633452798630108390, 0.633491486904945830, 0.633530173596054570, 0.633568858703337900, 0.633607542226699350, 0.633646224166041660, 0.633684904521268470, 0.633723583292282950, +0.633762260478988760, 0.633800936081288620, 0.633839610099086180, 0.633878282532285060, 0.633916953380787800, 0.633955622644498230, 0.633994290323319550, 0.634032956417155510, +0.634071620925908740, 0.634110283849482980, 0.634148945187781420, 0.634187604940707920, 0.634226263108164990, 0.634264919690056490, 0.634303574686285620, 0.634342228096756220, +0.634380879921370820, 0.634419530160033270, 0.634458178812646880, 0.634496825879115380, 0.634535471359341520, 0.634574115253228930, 0.634612757560681360, 0.634651398281601660, +0.634690037415893360, 0.634728674963460080, 0.634767310924205350, 0.634805945298032030, 0.634844578084843960, 0.634883209284544340, 0.634921838897037020, 0.634960466922224740, +0.634999093360011370, 0.635037718210300190, 0.635076341472995190, 0.635114963147998870, 0.635153583235215200, 0.635192201734547490, 0.635230818645899700, 0.635269433969174570, +0.635308047704275740, 0.635346659851107170, 0.635385270409571600, 0.635423879379572900, 0.635462486761014470, 0.635501092553800160, 0.635539696757832840, 0.635578299373016240, +0.635616900399253780, 0.635655499836449530, 0.635694097684506240, 0.635732693943327650, 0.635771288612817290, 0.635809881692879000, 0.635848473183415750, 0.635887063084331290, +0.635925651395529260, 0.635964238116913380, 0.636002823248386530, 0.636041406789852660, 0.636079988741215630, 0.636118569102378180, 0.636157147873244400, 0.636195725053717690, +0.636234300643702120, 0.636272874643100340, 0.636311447051816410, 0.636350017869753870, 0.636388587096816670, 0.636427154732907670, 0.636465720777930730, 0.636504285231789480, +0.636542848094387880, 0.636581409365628790, 0.636619969045416180, 0.636658527133653670, 0.636697083630245240, 0.636735638535093740, 0.636774191848103020, 0.636812743569176940, +0.636851293698219360, 0.636889842235133120, 0.636928389179822310, 0.636966934532190890, 0.637005478292141710, 0.637044020459578970, 0.637082561034406080, 0.637121100016527110, +0.637159637405845140, 0.637198173202264020, 0.637236707405687500, 0.637275240016019540, 0.637313771033163110, 0.637352300457022290, 0.637390828287500710, 0.637429354524502330, +0.637467879167930350, 0.637506402217688510, 0.637544923673680760, 0.637583443535811090, 0.637621961803982450, 0.637660478478098810, 0.637698993558064480, 0.637737507043782180, +0.637776018935156230, 0.637814529232090140, 0.637853037934488110, 0.637891545042253090, 0.637930050555289290, 0.637968554473500320, 0.638007056796790260, 0.638045557525062310, +0.638084056658220430, 0.638122554196168370, 0.638161050138810300, 0.638199544486049210, 0.638238037237789380, 0.638276528393934340, 0.638315017954388390, 0.638353505919054490, +0.638391992287836940, 0.638430477060639600, 0.638468960237365880, 0.638507441817919630, 0.638545921802204820, 0.638584400190125520, 0.638622876981584930, 0.638661352176487120, +0.638699825774735940, 0.638738297776235590, 0.638776768180889130, 0.638815236988600650, 0.638853704199274230, 0.638892169812813830, 0.638930633829122630, 0.638969096248104830, +0.639007557069664280, 0.639046016293705280, 0.639084473920130790, 0.639122929948845230, 0.639161384379752230, 0.639199837212756190, 0.639238288447760210, 0.639276738084668450, +0.639315186123385230, 0.639353632563813720, 0.639392077405858130, 0.639430520649422300, 0.639468962294410530, 0.639507402340726010, 0.639545840788272920, 0.639584277636955360, +0.639622712886677380, 0.639661146537342300, 0.639699578588854290, 0.639738009041117440, 0.639776437894035820, 0.639814865147512850, 0.639853290801452590, 0.639891714855759240, +0.639930137310336880, 0.639968558165088800, 0.640006977419919300, 0.640045395074732790, 0.640083811129432470, 0.640122225583922510, 0.640160638438107110, 0.640199049691890340, +0.640237459345175730, 0.640275867397867350, 0.640314273849869390, 0.640352678701086030, 0.640391081951420690, 0.640429483600777560, 0.640467883649060710, 0.640506282096174660, +0.640544678942022380, 0.640583074186508510, 0.640621467829536880, 0.640659859871012040, 0.640698250310837050, 0.640736639148916540, 0.640775026385154820, 0.640813412019455080, +0.640851796051721820, 0.640890178481859140, 0.640928559309771330, 0.640966938535361800, 0.641005316158534840, 0.641043692179194660, 0.641082066597245650, 0.641120439412591000, +0.641158810625135360, 0.641197180234782560, 0.641235548241437250, 0.641273914645002720, 0.641312279445383380, 0.641350642642483430, 0.641389004236207150, 0.641427364226457960, +0.641465722613140390, 0.641504079396158940, 0.641542434575416820, 0.641580788150818760, 0.641619140122268620, 0.641657490489671020, 0.641695839252929280, 0.641734186411948020, +0.641772531966631310, 0.641810875916883570, 0.641849218262608320, 0.641887559003709970, 0.641925898140092820, 0.641964235671661170, 0.642002571598318640, 0.642040905919969650, +0.642079238636518390, 0.642117569747869490, 0.642155899253926240, 0.642194227154593180, 0.642232553449774590, 0.642270878139375000, 0.642309201223297820, 0.642347522701447680, +0.642385842573729100, 0.642424160840045500, 0.642462477500301610, 0.642500792554401400, 0.642539106002249620, 0.642577417843749670, 0.642615728078806290, 0.642654036707323460, +0.642692343729205920, 0.642730649144357290, 0.642768952952681880, 0.642807255154084210, 0.642845555748468690, 0.642883854735738950, 0.642922152115799510, 0.642960447888554780, +0.642998742053909170, 0.643037034611766420, 0.643075325562031170, 0.643113614904607830, 0.643151902639400140, 0.643190188766312730, 0.643228473285249790, 0.643266756196116060, +0.643305037498815070, 0.643343317193251550, 0.643381595279329700, 0.643419871756954140, 0.643458146626028630, 0.643496419886457780, 0.643534691538145800, 0.643572961580997420, +0.643611230014916380, 0.643649496839807210, 0.643687762055574320, 0.643726025662122340, 0.643764287659355010, 0.643802548047176960, 0.643840806825492830, 0.643879063994206360, +0.643917319553222180, 0.643955573502444810, 0.643993825841778780, 0.644032076571127820, 0.644070325690396680, 0.644108573199489780, 0.644146819098311730, 0.644185063386766400, +0.644223306064758310, 0.644261547132191970, 0.644299786588972130, 0.644338024435002430, 0.644376260670187720, 0.644414495294432290, 0.644452728307641000, 0.644490959709717590, +0.644529189500566810, 0.644567417680092960, 0.644605644248200990, 0.644643869204794440, 0.644682092549778370, 0.644720314283057320, 0.644758534404535230, 0.644796752914116640, +0.644834969811706290, 0.644873185097208920, 0.644911398770528050, 0.644949610831568880, 0.644987821280235570, 0.645026030116433110, 0.645064237340065130, 0.645102442951036690, +0.645140646949252110, 0.645178849334616220, 0.645217050107032790, 0.645255249266406870, 0.645293446812642780, 0.645331642745645360, 0.645369837065318590, 0.645408029771567190, +0.645446220864296040, 0.645484410343408980, 0.645522598208810860, 0.645560784460406320, 0.645598969098100220, 0.645637152121796290, 0.645675333531399390, 0.645713513326814260, +0.645751691507945650, 0.645789868074697520, 0.645828043026974720, 0.645866216364681670, 0.645904388087723550, 0.645942558196004100, 0.645980726689428300, 0.646018893567900650, +0.646057058831326030, 0.646095222479608490, 0.646133384512652900, 0.646171544930364220, 0.646209703732646300, 0.646247860919404000, 0.646286016490542180, 0.646324170445965680, +0.646362322785578370, 0.646400473509285310, 0.646438622616991030, 0.646476770108600500, 0.646514915984017670, 0.646553060243147630, 0.646591202885894890, 0.646629343912164530, +0.646667483321860530, 0.646705621114887720, 0.646743757291150860, 0.646781891850555010, 0.646820024793004040, 0.646858156118403030, 0.646896285826656590, 0.646934413917669810, +0.646972540391346660, 0.647010665247592100, 0.647048788486311200, 0.647086910107408150, 0.647125030110787700, 0.647163148496354700, 0.647201265264014220, 0.647239380413670130, +0.647277493945227710, 0.647315605858591490, 0.647353716153666550, 0.647391824830357070, 0.647429931888567900, 0.647468037328204020, 0.647506141149170380, 0.647544243351371060, +0.647582343934711040, 0.647620442899095260, 0.647658540244428590, 0.647696635970615330, 0.647734730077560440, 0.647772822565169100, 0.647810913433345400, 0.647849002681994300, +0.647887090311020760, 0.647925176320329870, 0.647963260709825680, 0.648001343479413290, 0.648039424628997550, 0.648077504158483640, 0.648115582067775640, 0.648153658356778630, +0.648191733025397450, 0.648229806073537420, 0.648267877501102370, 0.648305947307997730, 0.648344015494128120, 0.648382082059398850, 0.648420147003714090, 0.648458210326978920, +0.648496272029098650, 0.648534332109977240, 0.648572390569520100, 0.648610447407631850, 0.648648502624217920, 0.648686556219182360, 0.648724608192430500, 0.648762658543867050, +0.648800707273397230, 0.648838754380925420, 0.648876799866356600, 0.648914843729595850, 0.648952885970548340, 0.648990926589118280, 0.649028965585210840, 0.649067002958731100, +0.649105038709584140, 0.649143072837674250, 0.649181105342906630, 0.649219136225186570, 0.649257165484418360, 0.649295193120507320, 0.649333219133358170, 0.649371243522876450, +0.649409266288966220, 0.649447287431532790, 0.649485306950481120, 0.649523324845716620, 0.649561341117143360, 0.649599355764666760, 0.649637368788191890, 0.649675380187623830, +0.649713389962866980, 0.649751398113826650, 0.649789404640407910, 0.649827409542515940, 0.649865412820055170, 0.649903414472930760, 0.649941414501047920, 0.649979412904311830, +0.650017409682626780, 0.650055404835898300, 0.650093398364031680, 0.650131390266931230, 0.650169380544502240, 0.650207369196649790, 0.650245356223279280, 0.650283341624295020, +0.650321325399602520, 0.650359307549106540, 0.650397288072712800, 0.650435266970325390, 0.650473244241849820, 0.650511219887191180, 0.650549193906254760, 0.650587166298945090, +0.650625137065167450, 0.650663106204827040, 0.650701073717829150, 0.650739039604078200, 0.650777003863479700, 0.650814966495939060, 0.650852927501360590, 0.650890886879649910, +0.650928844630711880, 0.650966800754452120, 0.651004755250775060, 0.651042708119586090, 0.651080659360790400, 0.651118608974293300, 0.651156556959999410, 0.651194503317814140, +0.651232448047642580, 0.651270391149390230, 0.651308332622961620, 0.651346272468262160, 0.651384210685197030, 0.651422147273671650, 0.651460082233590530, 0.651498015564859310, +0.651535947267383290, 0.651573877341067200, 0.651611805785816230, 0.651649732601535910, 0.651687657788131540, 0.651725581345507730, 0.651763503273569910, 0.651801423572223370, +0.651839342241373520, 0.651877259280925100, 0.651915174690783420, 0.651953088470853870, 0.651991000621041980, 0.652028911141252170, 0.652066820031390050, 0.652104727291360930, +0.652142632921070440, 0.652180536920422880, 0.652218439289323990, 0.652256340027679070, 0.652294239135393640, 0.652332136612372220, 0.652370032458520430, 0.652407926673744030, +0.652445819257947420, 0.652483710211036130, 0.652521599532915660, 0.652559487223491660, 0.652597373282668420, 0.652635257710351800, 0.652673140506447090, 0.652711021670859810, +0.652748901203494600, 0.652786779104257200, 0.652824655373052900, 0.652862530009787220, 0.652900403014364920, 0.652938274386691610, 0.652976144126672600, 0.653014012234213510, +0.653051878709219100, 0.653089743551594990, 0.653127606761246930, 0.653165468338079420, 0.653203328281998340, 0.653241186592908860, 0.653279043270716730, 0.653316898315326690, +0.653354751726644480, 0.653392603504575290, 0.653430453649024970, 0.653468302159898150, 0.653506149037100580, 0.653543994280537670, 0.653581837890115040, 0.653619679865737550, +0.653657520207310830, 0.653695358914740290, 0.653733195987931780, 0.653771031426789830, 0.653808865231220390, 0.653846697401129110, 0.653884527936420710, 0.653922356837000950, +0.653960184102775340, 0.653998009733649630, 0.654035833729528560, 0.654073656090317980, 0.654111476815923080, 0.654149295906249930, 0.654187113361203280, 0.654224929180688750, +0.654262743364611880, 0.654300555912878500, 0.654338366825393480, 0.654376176102062450, 0.654413983742791030, 0.654451789747484970, 0.654489594116049120, 0.654527396848389230, +0.654565197944411150, 0.654602997404019840, 0.654640795227121040, 0.654678591413620170, 0.654716385963423190, 0.654754178876434940, 0.654791970152561190, 0.654829759791707540, +0.654867547793779870, 0.654905334158682910, 0.654943118886322730, 0.654980901976604630, 0.655018683429434700, 0.655056463244717670, 0.655094241422359500, 0.655132017962265830, +0.655169792864342290, 0.655207566128494070, 0.655245337754626790, 0.655283107742646200, 0.655320876092458260, 0.655358642803967720, 0.655396407877080640, 0.655434171311702900, +0.655471933107739320, 0.655509693265095890, 0.655547451783678240, 0.655585208663392320, 0.655622963904143100, 0.655660717505836320, 0.655698469468377840, 0.655736219791673510, +0.655773968475628300, 0.655811715520148280, 0.655849460925138850, 0.655887204690506100, 0.655924946816154990, 0.655962687301991590, 0.656000426147921420, 0.656038163353850460, +0.656075898919683880, 0.656113632845327530, 0.656151365130687390, 0.656189095775668530, 0.656226824780176910, 0.656264552144118160, 0.656302277867398480, 0.656340001949922700, +0.656377724391596920, 0.656415445192326860, 0.656453164352018610, 0.656490881870576910, 0.656528597747908170, 0.656566311983917910, 0.656604024578512190, 0.656641735531595990, +0.656679444843075500, 0.656717152512856450, 0.656754858540844810, 0.656792562926945770, 0.656830265671065280, 0.656867966773109440, 0.656905666232983300, 0.656943364050593060, +0.656981060225844350, 0.657018754758643350, 0.657056447648895150, 0.657094138896505810, 0.657131828501381190, 0.657169516463427250, 0.657207202782549290, 0.657244887458653170, +0.657282570491644960, 0.657320251881430620, 0.657357931627915230, 0.657395609731005190, 0.657433286190605930, 0.657470961006623940, 0.657508634178964100, 0.657546305707532810, +0.657583975592235690, 0.657621643832978940, 0.657659310429667740, 0.657696975382208280, 0.657734638690506750, 0.657772300354468210, 0.657809960373998970, 0.657847618749004880, +0.657885275479392020, 0.657922930565065570, 0.657960584005931940, 0.657998235801896760, 0.658035885952866330, 0.658073534458745830, 0.658111181319441570, 0.658148826534859290, +0.658186470104905390, 0.658224112029484830, 0.658261752308504030, 0.658299390941868960, 0.658337027929485560, 0.658374663271259370, 0.658412296967096580, 0.658449929016903250, +0.658487559420584900, 0.658525188178047500, 0.658562815289197250, 0.658600440753940310, 0.658638064572181770, 0.658675686743828260, 0.658713307268785410, 0.658750926146959740, +0.658788543378256320, 0.658826158962581570, 0.658863772899841440, 0.658901385189942120, 0.658938995832789140, 0.658976604828288570, 0.659014212176346480, 0.659051817876869280, +0.659089421929762160, 0.659127024334931530, 0.659164625092283570, 0.659202224201723810, 0.659239821663158420, 0.659277417476493600, 0.659315011641635420, 0.659352604158489400, +0.659390195026961940, 0.659427784246959030, 0.659465371818386830, 0.659502957741150970, 0.659540542015157770, 0.659578124640313180, 0.659615705616523500, 0.659653284943694350, +0.659690862621731930, 0.659728438650542430, 0.659766013030032020, 0.659803585760106340, 0.659841156840671680, 0.659878726271634570, 0.659916294052900200, 0.659953860184375070, +0.659991424665965280, 0.660028987497577320, 0.660066548679116630, 0.660104108210489480, 0.660141666091601960, 0.660179222322360810, 0.660216776902671110, 0.660254329832439590, +0.660291881111572110, 0.660329430739975410, 0.660366978717554680, 0.660404525044216540, 0.660442069719867190, 0.660479612744412910, 0.660517154117759240, 0.660554693839812690, +0.660592231910479440, 0.660629768329665910, 0.660667303097277610, 0.660704836213221180, 0.660742367677402910, 0.660779897489728320, 0.660817425650104040, 0.660854952158436260, +0.660892477014631390, 0.660930000218594940, 0.660967521770233550, 0.661005041669453290, 0.661042559916160790, 0.661080076510261570, 0.661117591451662160, 0.661155104740268840, +0.661192616375988030, 0.661230126358725360, 0.661267634688387340, 0.661305141364880170, 0.661342646388110580, 0.661380149757984090, 0.661417651474407120, 0.661455151537286400, +0.661492649946527460, 0.661530146702036910, 0.661567641803720960, 0.661605135251486230, 0.661642627045238350, 0.661680117184883950, 0.661717605670329220, 0.661755092501480790, +0.661792577678244290, 0.661830061200526340, 0.661867543068233370, 0.661905023281271650, 0.661942501839547280, 0.661979978742966440, 0.662017453991435740, 0.662054927584861840, +0.662092399523150130, 0.662129869806207470, 0.662167338433940600, 0.662204805406254930, 0.662242270723057190, 0.662279734384253800, 0.662317196389751510, 0.662354656739455820, +0.662392115433273480, 0.662429572471110890, 0.662467027852874700, 0.662504481578470640, 0.662541933647805230, 0.662579384060785090, 0.662616832817316870, 0.662654279917306190, +0.662691725360659790, 0.662729169147284080, 0.662766611277085800, 0.662804051749970700, 0.662841490565845400, 0.662878927724616320, 0.662916363226190410, 0.662953797070473190, +0.662991229257371420, 0.663028659786791930, 0.663066088658640580, 0.663103515872823900, 0.663140941429248400, 0.663178365327820930, 0.663215787568447230, 0.663253208151034060, +0.663290627075487800, 0.663328044341715330, 0.663365459949622480, 0.663402873899115900, 0.663440286190102200, 0.663477696822488140, 0.663515105796179450, 0.663552513111082990, +0.663589918767105270, 0.663627322764153040, 0.663664725102132260, 0.663702125780949560, 0.663739524800512020, 0.663776922160725260, 0.663814317861496140, 0.663851711902731290, +0.663889104284337450, 0.663926495006220590, 0.663963884068287440, 0.664001271470444520, 0.664038657212598920, 0.664076041294656140, 0.664113423716523380, 0.664150804478107040, +0.664188183579314080, 0.664225561020050260, 0.664262936800222530, 0.664300310919737510, 0.664337683378501960, 0.664375054176421950, 0.664412423313404330, 0.664449790789355950, +0.664487156604182670, 0.664524520757791670, 0.664561883250089250, 0.664599244080982480, 0.664636603250377210, 0.664673960758180530, 0.664711316604298940, 0.664748670788639310, +0.664786023311107700, 0.664823374171611080, 0.664860723370055970, 0.664898070906349450, 0.664935416780397360, 0.664972760992106780, 0.665010103541384230, 0.665047444428136790, +0.665084783652270420, 0.665122121213692070, 0.665159457112308730, 0.665196791348026450, 0.665234123920752210, 0.665271454830392630, 0.665308784076854790, 0.665346111660044540, +0.665383437579869170, 0.665420761836235110, 0.665458084429049520, 0.665495405358218270, 0.665532724623648650, 0.665570042225247180, 0.665607358162920940, 0.665644672436575880, +0.665681985046119310, 0.665719295991457630, 0.665756605272498140, 0.665793912889146800, 0.665831218841310580, 0.665868523128896330, 0.665905825751811230, 0.665943126709961140, +0.665980426003253250, 0.666017723631594620, 0.666055019594891330, 0.666092313893050570, 0.666129606525978970, 0.666166897493583600, 0.666204186795770760, 0.666241474432447410, +0.666278760403520410, 0.666316044708896830, 0.666353327348482850, 0.666390608322185440, 0.666427887629911670, 0.666465165271568400, 0.666502441247061930, 0.666539715556299320, +0.666576988199187430, 0.666614259175633330, 0.666651528485543430, 0.666688796128824590, 0.666726062105384100, 0.666763326415128140, 0.666800589057963800, 0.666837850033798030, +0.666875109342538020, 0.666912366984089840, 0.666949622958360800, 0.666986877265257630, 0.667024129904687620, 0.667061380876557090, 0.667098630180772870, 0.667135877817242260, +0.667173123785872240, 0.667210368086569080, 0.667247610719239990, 0.667284851683791810, 0.667322090980131840, 0.667359328608166380, 0.667396564567802610, 0.667433798858947710, +0.667471031481507990, 0.667508262435390740, 0.667545491720502810, 0.667582719336751510, 0.667619945284043000, 0.667657169562284710, 0.667694392171383380, 0.667731613111246510, +0.667768832381780310, 0.667806049982891950, 0.667843265914488390, 0.667880480176477050, 0.667917692768764340, 0.667954903691257210, 0.667992112943862850, 0.668029320526488670, +0.668066526439040740, 0.668103730681426480, 0.668140933253552950, 0.668178134155327340, 0.668215333386656170, 0.668252530947446630, 0.668289726837606010, 0.668326921057040830, +0.668364113605658390, 0.668401304483365540, 0.668438493690069800, 0.668475681225677580, 0.668512867090096050, 0.668550051283232420, 0.668587233804993960, 0.668624414655287100, +0.668661593834019240, 0.668698771341097340, 0.668735947176428920, 0.668773121339920170, 0.668810293831478720, 0.668847464651011530, 0.668884633798426000, 0.668921801273628550, +0.668958967076526580, 0.668996131207027500, 0.669033293665037830, 0.669070454450464870, 0.669107613563215800, 0.669144771003198020, 0.669181926770317960, 0.669219080864483120, +0.669256233285600580, 0.669293384033577740, 0.669330533108321140, 0.669367680509738160, 0.669404826237736120, 0.669441970292222190, 0.669479112673103120, 0.669516253380286200, +0.669553392413678620, 0.669590529773188000, 0.669627665458720660, 0.669664799470184090, 0.669701931807485940, 0.669739062470532610, 0.669776191459231620, 0.669813318773490150, +0.669850444413215730, 0.669887568378314870, 0.669924690668695090, 0.669961811284263580, 0.669998930224927850, 0.670036047490594420, 0.670073163081170930, 0.670110276996564560, +0.670147389236682820, 0.670184499801432240, 0.670221608690720450, 0.670258715904454630, 0.670295821442542290, 0.670332925304890080, 0.670370027491405620, 0.670407128001996420, +0.670444226836569010, 0.670481323995031130, 0.670518419477289850, 0.670555513283252800, 0.670592605412826730, 0.670629695865919140, 0.670666784642437340, 0.670703871742288850, +0.670740957165380400, 0.670778040911619520, 0.670815122980913610, 0.670852203373170090, 0.670889282088295790, 0.670926359126198360, 0.670963434486784970, 0.671000508169963260, +0.671037580175640080, 0.671074650503722840, 0.671111719154119050, 0.671148786126736230, 0.671185851421481130, 0.671222915038261370, 0.671259976976984700, 0.671297037237557850, +0.671334095819888230, 0.671371152723883480, 0.671408207949451220, 0.671445261496497970, 0.671482313364931690, 0.671519363554659580, 0.671556412065589360, 0.671593458897627780, +0.671630504050682590, 0.671667547524661180, 0.671704589319471190, 0.671741629435019360, 0.671778667871213540, 0.671815704627960920, 0.671852739705169450, 0.671889773102745890, +0.671926804820597750, 0.671963834858632980, 0.672000863216758340, 0.672037889894881450, 0.672074914892909940, 0.672111938210751440, 0.672148959848312690, 0.672185979805501650, +0.672222998082225520, 0.672260014678392360, 0.672297029593908800, 0.672334042828682590, 0.672371054382621350, 0.672408064255632820, 0.672445072447623750, 0.672482078958501980, +0.672519083788175040, 0.672556086936550780, 0.672593088403535930, 0.672630088189038360, 0.672667086292965900, 0.672704082715225300, 0.672741077455724650, 0.672778070514371220, +0.672815061891072990, 0.672852051585736800, 0.672889039598270400, 0.672926025928581420, 0.672963010576577700, 0.672999993542166110, 0.673036974825254600, 0.673073954425750580, +0.673110932343562120, 0.673147908578595850, 0.673184883130759970, 0.673221855999961760, 0.673258827186109300, 0.673295796689109330, 0.673332764508870030, 0.673369730645298700, +0.673406695098303420, 0.673443657867791030, 0.673480618953669620, 0.673517578355846910, 0.673554536074229880, 0.673591492108726600, 0.673628446459244580, 0.673665399125691680, +0.673702350107975080, 0.673739299406002520, 0.673776247019681640, 0.673813192948920610, 0.673850137193626190, 0.673887079753706430, 0.673924020629069090, 0.673960959819621900, +0.673997897325272040, 0.674034833145927380, 0.674071767281495650, 0.674108699731884920, 0.674145630497002050, 0.674182559576755100, 0.674219486971052050, 0.674256412679799970, +0.674293336702906920, 0.674330259040280430, 0.674367179691828690, 0.674404098657458650, 0.674441015937078390, 0.674477931530595540, 0.674514845437918180, 0.674551757658953480, +0.674588668193609300, 0.674625577041793490, 0.674662484203414010, 0.674699389678378060, 0.674736293466593580, 0.674773195567968440, 0.674810095982410600, 0.674846994709827120, +0.674883891750126310, 0.674920787103216010, 0.674957680769003420, 0.674994572747396600, 0.675031463038303300, 0.675068351641631810, 0.675105238557288990, 0.675142123785183120, +0.675179007325221960, 0.675215889177313680, 0.675252769341365240, 0.675289647817284840, 0.675326524604980440, 0.675363399704359990, 0.675400273115330680, 0.675437144837800820, +0.675474014871678020, 0.675510883216870470, 0.675547749873285360, 0.675584614840830990, 0.675621478119415310, 0.675658339708945730, 0.675695199609330220, 0.675732057820476630, +0.675768914342293360, 0.675805769174687490, 0.675842622317567090, 0.675879473770840120, 0.675916323534414890, 0.675953171608198460, 0.675990017992099120, 0.676026862686024740, +0.676063705689883500, 0.676100547003582800, 0.676137386627030600, 0.676174224560134980, 0.676211060802804020, 0.676247895354945230, 0.676284728216466680, 0.676321559387276230, +0.676358388867282280, 0.676395216656392020, 0.676432042754513630, 0.676468867161555630, 0.676505689877424990, 0.676542510902030210, 0.676579330235279050, 0.676616147877080020, +0.676652963827340190, 0.676689778085967970, 0.676726590652871440, 0.676763401527958660, 0.676800210711136940, 0.676837018202314900, 0.676873824001400170, 0.676910628108301270, +0.676947430522925390, 0.676984231245181030, 0.677021030274976070, 0.677057827612218780, 0.677094623256816690, 0.677131417208677980, 0.677168209467711170, 0.677205000033823450, +0.677241788906923100, 0.677278576086918440, 0.677315361573717630, 0.677352145367228100, 0.677388927467358130, 0.677425707874015900, 0.677462486587109720, 0.677499263606547000, +0.677536038932236130, 0.677572812564085190, 0.677609584502002480, 0.677646354745895520, 0.677683123295672600, 0.677719890151242010, 0.677756655312511840, 0.677793418779389920, +0.677830180551784340, 0.677866940629603620, 0.677903699012755160, 0.677940455701147580, 0.677977210694688860, 0.678013963993287390, 0.678050715596850710, 0.678087465505287200, +0.678124213718505060, 0.678160960236412700, 0.678197705058917630, 0.678234448185928260, 0.678271189617352780, 0.678307929353099690, 0.678344667393076420, 0.678381403737191470, +0.678418138385353030, 0.678454871337469510, 0.678491602593448540, 0.678528332153198630, 0.678565060016627860, 0.678601786183644750, 0.678638510654156810, 0.678675233428072570, +0.678711954505300640, 0.678748673885748440, 0.678785391569324600, 0.678822107555937300, 0.678858821845495060, 0.678895534437905400, 0.678932245333076940, 0.678968954530917770, +0.679005662031336720, 0.679042367834240990, 0.679079071939539420, 0.679115774347140210, 0.679152475056951870, 0.679189174068882020, 0.679225871382839190, 0.679262566998731780, +0.679299260916468190, 0.679335953135956180, 0.679372643657104260, 0.679409332479821050, 0.679446019604014180, 0.679482705029592290, 0.679519388756463560, 0.679556070784536730, +0.679592751113719420, 0.679629429743920270, 0.679666106675047450, 0.679702781907009830, 0.679739455439714810, 0.679776127273071130, 0.679812797406987190, 0.679849465841371630, +0.679886132576131950, 0.679922797611177020, 0.679959460946415130, 0.679996122581754790, 0.680032782517103970, 0.680069440752371080, 0.680106097287464960, 0.680142752122293250, +0.680179405256764680, 0.680216056690787660, 0.680252706424270710, 0.680289354457121800, 0.680326000789249320, 0.680362645420562020, 0.680399288350968300, 0.680435929580376130, +0.680472569108694140, 0.680509206935830610, 0.680545843061694520, 0.680582477486193380, 0.680619110209236160, 0.680655741230731030, 0.680692370550586960, 0.680728998168711690, +0.680765624085013840, 0.680802248299402280, 0.680838870811784850, 0.680875491622070060, 0.680912110730166660, 0.680948728135983390, 0.680985343839427880, 0.681021957840408980, +0.681058570138835200, 0.681095180734615390, 0.681131789627657190, 0.681168396817869670, 0.681205002305161010, 0.681241606089440290, 0.681278208170615130, 0.681314808548594500, +0.681351407223286800, 0.681388004194600990, 0.681424599462444820, 0.681461193026727140, 0.681497784887356460, 0.681534375044241640, 0.681570963497290520, 0.681607550246412060, +0.681644135291515020, 0.681680718632507340, 0.681717300269297890, 0.681753880201795060, 0.681790458429908040, 0.681827034953544460, 0.681863609772613290, 0.681900182887023030, +0.681936754296682770, 0.681973324001500240, 0.682009892001384400, 0.682046458296243770, 0.682083022885987320, 0.682119585770523120, 0.682156146949759900, 0.682192706423606190, +0.682229264191971160, 0.682265820254762680, 0.682302374611889580, 0.682338927263260840, 0.682375478208784520, 0.682412027448369480, 0.682448574981924350, 0.682485120809358190, +0.682521664930578860, 0.682558207345495330, 0.682594748054016320, 0.682631287056050700, 0.682667824351506640, 0.682704359940292990, 0.682740893822318400, 0.682777425997491920, +0.682813956465721520, 0.682850485226916270, 0.682887012280984810, 0.682923537627836200, 0.682960061267378290, 0.682996583199520280, 0.683033103424171230, 0.683069621941238990, +0.683106138750632750, 0.683142653852261140, 0.683179167246033110, 0.683215678931856970, 0.683252188909641680, 0.683288697179295750, 0.683325203740728580, 0.683361708593847930, +0.683398211738563080, 0.683434713174782660, 0.683471212902415860, 0.683507710921370640, 0.683544207231556180, 0.683580701832881220, 0.683617194725254730, 0.683653685908585000, +0.683690175382781100, 0.683726663147751660, 0.683763149203405970, 0.683799633549652010, 0.683836116186399060, 0.683872597113556080, 0.683909076331031260, 0.683945553838733790, +0.683982029636572400, 0.684018503724456270, 0.684054976102293600, 0.684091446769993450, 0.684127915727464790, 0.684164382974616570, 0.684200848511356980, 0.684237312337595440, +0.684273774453240560, 0.684310234858201530, 0.684346693552386530, 0.684383150535704980, 0.684419605808065380, 0.684456059369377150, 0.684492511219548460, 0.684528961358488510, +0.684565409786106470, 0.684601856502310540, 0.684638301507010110, 0.684674744800113810, 0.684711186381530950, 0.684747626251169810, 0.684784064408939570, 0.684820500854749330, +0.684856935588508020, 0.684893368610124060, 0.684929799919506750, 0.684966229516564830, 0.685002657401207800, 0.685039083573343750, 0.685075508032881860, 0.685111930779731430, +0.685148351813801290, 0.685184771135000090, 0.685221188743236900, 0.685257604638421000, 0.685294018820460930, 0.685330431289265630, 0.685366842044744410, 0.685403251086806330, +0.685439658415359810, 0.685476064030314140, 0.685512467931578270, 0.685548870119061630, 0.685585270592672490, 0.685621669352320050, 0.685658066397913600, 0.685694461729362210, +0.685730855346574410, 0.685767247249459370, 0.685803637437926270, 0.685840025911884420, 0.685876412671242220, 0.685912797715908850, 0.685949181045793940, 0.685985562660805680, +0.686021942560853580, 0.686058320745846610, 0.686094697215694050, 0.686131071970304540, 0.686167445009587370, 0.686203816333451510, 0.686240185941806470, 0.686276553834560650, +0.686312920011623360, 0.686349284472903890, 0.686385647218311520, 0.686422008247754680, 0.686458367561142760, 0.686494725158384940, 0.686531081039390760, 0.686567435204068380, +0.686603787652327550, 0.686640138384077230, 0.686676487399226820, 0.686712834697684850, 0.686749180279360830, 0.686785524144164160, 0.686821866292003480, 0.686858206722787970, +0.686894545436427030, 0.686930882432830070, 0.686967217711905500, 0.687003551273563050, 0.687039883117711580, 0.687076213244260710, 0.687112541653119080, 0.687148868344195970, +0.687185193317400800, 0.687221516572642970, 0.687257838109830990, 0.687294157928874380, 0.687330476029682450, 0.687366792412164580, 0.687403107076229420, 0.687439420021786600, +0.687475731248745390, 0.687512040757014660, 0.687548348546503710, 0.687584654617122040, 0.687620958968778950, 0.687657261601383190, 0.687693562514844150, 0.687729861709071360, +0.687766159183974100, 0.687802454939461240, 0.687838748975442280, 0.687875041291826310, 0.687911331888523160, 0.687947620765441250, 0.687983907922490420, 0.688020193359579760, +0.688056477076618880, 0.688092759073516640, 0.688129039350182330, 0.688165317906525800, 0.688201594742455680, 0.688237869857881600, 0.688274143252712860, 0.688310414926858960, +0.688346684880228770, 0.688382953112731900, 0.688419219624277660, 0.688455484414775660, 0.688491747484134550, 0.688528008832264170, 0.688564268459073700, 0.688600526364473000, +0.688636782548370570, 0.688673037010676170, 0.688709289751299190, 0.688745540770149380, 0.688781790067135360, 0.688818037642166870, 0.688854283495153210, 0.688890527626004220, +0.688926770034628540, 0.688963010720936020, 0.688999249684836280, 0.689035486926238060, 0.689071722445051100, 0.689107956241184930, 0.689144188314549040, 0.689180418665052530, +0.689216647292604900, 0.689252874197115670, 0.689289099378494470, 0.689325322836650270, 0.689361544571492790, 0.689397764582931450, 0.689433982870875980, 0.689470199435235240, +0.689506414275919080, 0.689542627392836780, 0.689578838785898320, 0.689615048455012420, 0.689651256400088840, 0.689687462621037530, 0.689723667117767110, 0.689759869890187670, +0.689796070938208490, 0.689832270261739430, 0.689868467860689450, 0.689904663734968170, 0.689940857884485340, 0.689977050309150690, 0.690013241008872960, 0.690049429983562220, +0.690085617233128000, 0.690121802757479920, 0.690157986556527050, 0.690194168630179240, 0.690230348978346010, 0.690266527600937210, 0.690302704497861800, 0.690338879669029630, +0.690375053114350550, 0.690411224833733520, 0.690447394827088390, 0.690483563094324790, 0.690519729635352690, 0.690555894450080810, 0.690592057538419350, 0.690628218900277590, +0.690664378535565730, 0.690700536444192490, 0.690736692626067960, 0.690772847081101760, 0.690808999809203740, 0.690845150810282860, 0.690881300084249080, 0.690917447631012040, +0.690953593450481800, 0.690989737542567210, 0.691025879907178230, 0.691062020544224610, 0.691098159453616300, 0.691134296635262160, 0.691170432089072360, 0.691206565814956760, +0.691242697812824440, 0.691278828082585340, 0.691314956624149210, 0.691351083437426020, 0.691387208522324830, 0.691423331878755490, 0.691459453506627960, 0.691495573405851990, +0.691531691576336870, 0.691567808017992560, 0.691603922730728570, 0.691640035714455200, 0.691676146969081420, 0.691712256494517290, 0.691748364290672440, 0.691784470357457050, +0.691820574694780090, 0.691856677302551850, 0.691892778180682070, 0.691928877329080150, 0.691964974747655950, 0.692001070436319420, 0.692037164394980420, 0.692073256623548240, +0.692109347121932950, 0.692145435890044290, 0.692181522927792340, 0.692217608235086160, 0.692253691811836050, 0.692289773657951750, 0.692325853773343320, 0.692361932157919970, +0.692398008811591750, 0.692434083734268400, 0.692470156925860340, 0.692506228386276400, 0.692542298115427000, 0.692578366113222100, 0.692614432379571100, 0.692650496914383850, +0.692686559717570540, 0.692722620789041010, 0.692758680128704670, 0.692794737736471600, 0.692830793612251640, 0.692866847755955080, 0.692902900167491120, 0.692938950846769820, +0.692974999793701250, 0.693011047008195380, 0.693047092490161610, 0.693083136239510230, 0.693119178256150880, 0.693155218539993840, 0.693191257090948640, 0.693227293908925120, +0.693263328993833810, 0.693299362345583760, 0.693335393964085390, 0.693371423849248440, 0.693407452000983300, 0.693443478419199180, 0.693479503103806460, 0.693515526054714890, +0.693551547271834880, 0.693587566755075600, 0.693623584504347470, 0.693659600519560330, 0.693695614800624580, 0.693731627347449420, 0.693767638159945240, 0.693803647238021900, +0.693839654581589800, 0.693875660190558240, 0.693911664064837620, 0.693947666204337680, 0.693983666608969040, 0.694019665278640780, 0.694055662213263420, 0.694091657412747250, +0.694127650877001570, 0.694163642605936770, 0.694199632599462930, 0.694235620857490240, 0.694271607379928210, 0.694307592166687140, 0.694343575217677200, 0.694379556532808470, +0.694415536111990690, 0.694451513955133940, 0.694487490062148490, 0.694523464432944550, 0.694559437067431730, 0.694595407965520330, 0.694631377127120310, 0.694667344552142190, +0.694703310240495480, 0.694739274192090360, 0.694775236406837470, 0.694811196884646100, 0.694847155625426760, 0.694883112629089640, 0.694919067895544920, 0.694955021424702220, +0.694990973216472070, 0.695026923270764430, 0.695062871587489810, 0.695098818166557610, 0.695134763007878460, 0.695170706111362340, 0.695206647476919850, 0.695242587104460410, +0.695278524993894420, 0.695314461145132180, 0.695350395558084090, 0.695386328232659780, 0.695422259168769540, 0.695458188366324000, 0.695494115825232680, 0.695530041545405990, +0.695565965526754320, 0.695601887769188080, 0.695637808272616680, 0.695673727036950850, 0.695709644062100560, 0.695745559347976660, 0.695781472894488440, 0.695817384701546530, +0.695853294769061210, 0.695889203096943020, 0.695925109685101350, 0.695961014533447050, 0.695996917641890090, 0.696032819010341310, 0.696068718638710000, 0.696104616526906920, +0.696140512674842450, 0.696176407082426900, 0.696212299749570000, 0.696248190676182380, 0.696284079862174550, 0.696319967307456270, 0.696355853011938140, 0.696391736975530250, +0.696427619198143440, 0.696463499679687130, 0.696499378420072150, 0.696535255419208800, 0.696571130677007490, 0.696607004193378070, 0.696642875968231160, 0.696678746001477170, +0.696714614293026500, 0.696750480842789010, 0.696786345650675320, 0.696822208716595730, 0.696858070040460960, 0.696893929622180660, 0.696929787461665560, 0.696965643558826400, +0.697001497913572690, 0.697037350525815390, 0.697073201395464580, 0.697109050522431110, 0.697144897906624710, 0.697180743547956010, 0.697216587446335520, 0.697252429601673880, +0.697288270013880830, 0.697324108682867090, 0.697359945608543090, 0.697395780790819540, 0.697431614229606200, 0.697467445924813910, 0.697503275876352970, 0.697539104084134110, +0.697574930548067180, 0.697610755268062930, 0.697646578244032200, 0.697682399475884620, 0.697718218963531030, 0.697754036706881850, 0.697789852705848030, 0.697825666960339210, +0.697861479470266220, 0.697897290235539480, 0.697933099256069830, 0.697968906531767130, 0.698004712062542220, 0.698040515848305510, 0.698076317888967850, 0.698112118184438970, +0.698147916734629950, 0.698183713539451080, 0.698219508598813210, 0.698255301912626300, 0.698291093480801090, 0.698326883303248440, 0.698362671379878290, 0.698398457710601490, +0.698434242295328470, 0.698470025133970270, 0.698505806226436650, 0.698541585572638460, 0.698577363172486310, 0.698613139025891170, 0.698648913132762780, 0.698684685493012100, +0.698720456106549760, 0.698756224973286600, 0.698791992093132590, 0.698827757465998460, 0.698863521091795060, 0.698899282970433130, 0.698935043101822640, 0.698970801485874650, +0.699006558122499570, 0.699042313011608460, 0.699078066153111190, 0.699113817546918810, 0.699149567192942190, 0.699185315091091280, 0.699221061241277140, 0.699256805643410420, +0.699292548297401950, 0.699328289203161700, 0.699364028360600740, 0.699399765769629810, 0.699435501430159760, 0.699471235342100650, 0.699506967505363340, 0.699542697919858680, +0.699578426585497630, 0.699614153502190140, 0.699649878669847290, 0.699685602088379820, 0.699721323757698580, 0.699757043677713740, 0.699792761848336280, 0.699828478269477250, +0.699864192941046630, 0.699899905862955580, 0.699935617035114750, 0.699971326457435210, 0.700007034129827010, 0.700042740052201350, 0.700078444224468740, 0.700114146646540370, +0.700149847318326300, 0.700185546239737500, 0.700221243410684920, 0.700256938831079640, 0.700292632500831620, 0.700328324419852040, 0.700364014588051640, 0.700399703005341490, +0.700435389671631770, 0.700471074586833550, 0.700506757750858020, 0.700542439163615250, 0.700578118825016420, 0.700613796734972260, 0.700649472893393970, 0.700685147300191600, +0.700720819955276460, 0.700756490858559180, 0.700792160009951040, 0.700827827409362230, 0.700863493056703810, 0.700899156951886650, 0.700934819094821910, 0.700970479485419800, +0.701006138123591470, 0.701041795009247790, 0.701077450142299940, 0.701113103522658210, 0.701148755150233670, 0.701184405024937290, 0.701220053146680230, 0.701255699515372700, +0.701291344130925860, 0.701326986993251020, 0.701362628102258360, 0.701398267457859160, 0.701433905059964280, 0.701469540908485010, 0.701505175003331540, 0.701540807344415040, +0.701576437931646700, 0.701612066764937480, 0.701647693844197780, 0.701683319169338790, 0.701718942740271580, 0.701754564556907320, 0.701790184619156320, 0.701825802926929860, +0.701861419480138920, 0.701897034278694760, 0.701932647322507600, 0.701968258611488930, 0.702003868145549830, 0.702039475924600810, 0.702075081948553060, 0.702110686217317650, +0.702146288730805870, 0.702181889488928010, 0.702217488491595380, 0.702253085738719140, 0.702288681230210380, 0.702324274965979710, 0.702359866945938220, 0.702395457169997180, +0.702431045638067800, 0.702466632350060460, 0.702502217305886580, 0.702537800505457110, 0.702573381948683460, 0.702608961635476040, 0.702644539565746240, 0.702680115739405360, +0.702715690156363930, 0.702751262816533220, 0.702786833719824420, 0.702822402866148830, 0.702857970255416850, 0.702893535887540000, 0.702929099762429340, 0.702964661879996180, +0.703000222240151130, 0.703035780842805490, 0.703071337687870330, 0.703106892775257180, 0.703142446104876530, 0.703177997676639690, 0.703213547490457950, 0.703249095546242600, +0.703284641843904270, 0.703320186383354250, 0.703355729164504060, 0.703391270187264330, 0.703426809451546340, 0.703462346957261400, 0.703497882704320790, 0.703533416692635250, +0.703568948922116190, 0.703604479392674680, 0.703640008104222340, 0.703675535056669690, 0.703711060249928130, 0.703746583683908970, 0.703782105358523700, 0.703817625273682750, +0.703853143429297830, 0.703888659825280040, 0.703924174461540760, 0.703959687337990970, 0.703995198454541840, 0.704030707811104660, 0.704066215407591070, 0.704101721243911680, +0.704137225319978020, 0.704172727635701490, 0.704208228190992940, 0.704243726985763760, 0.704279224019925150, 0.704314719293388960, 0.704350212806065690, 0.704385704557866750, +0.704421194548703560, 0.704456682778487830, 0.704492169247129980, 0.704527653954541640, 0.704563136900634320, 0.704598618085319430, 0.704634097508507580, 0.704669575170110530, +0.704705051070039560, 0.704740525208206290, 0.704775997584521360, 0.704811468198896510, 0.704846937051243240, 0.704882404141472410, 0.704917869469495420, 0.704953333035223890, +0.704988794838569240, 0.705024254879442310, 0.705059713157754730, 0.705095169673417900, 0.705130624426343560, 0.705166077416442220, 0.705201528643625730, 0.705236978107805390, +0.705272425808892930, 0.705307871746799100, 0.705343315921435510, 0.705378758332713800, 0.705414198980545360, 0.705449637864841160, 0.705485074985512830, 0.705520510342472210, +0.705555943935629930, 0.705591375764897830, 0.705626805830187220, 0.705662234131410050, 0.705697660668476830, 0.705733085441299530, 0.705768508449789560, 0.705803929693858520, +0.705839349173417400, 0.705874766888377910, 0.705910182838651590, 0.705945597024150050, 0.705981009444784150, 0.706016420100465720, 0.706051828991106410, 0.706087236116617720, +0.706122641476910620, 0.706158045071896940, 0.706193446901488110, 0.706228846965595960, 0.706264245264131450, 0.706299641797006330, 0.706335036564132320, 0.706370429565420510, +0.706405820800782620, 0.706441210270130180, 0.706476597973374920, 0.706511983910427910, 0.706547368081201000, 0.706582750485605700, 0.706618131123553760, 0.706653509994956130, +0.706688887099724770, 0.706724262437771200, 0.706759636009007370, 0.706795007813344030, 0.706830377850693250, 0.706865746120966420, 0.706901112624075620, 0.706936477359931700, +0.706971840328446620, 0.707007201529532110, 0.707042560963099480, 0.707077918629060330, 0.707113274527326420, 0.707148628657809700, 0.707183981020421020, 0.707219331615072330, +0.707254680441675390, 0.707290027500142030, 0.707325372790383320, 0.707360716312311120, 0.707396058065837270, 0.707431398050873520, 0.707466736267330920, 0.707502072715121440, +0.707537407394156830, 0.707572740304349020, 0.707608071445609110, 0.707643400817848930, 0.707678728420980560, 0.707714054254915180, 0.707749378319564530, 0.707784700614840450, +0.707820021140655010, 0.707855339896919180, 0.707890656883544910, 0.707925972100444060, 0.707961285547528570, 0.707996597224709530, 0.708031907131899120, 0.708067215269008840, +0.708102521635950890, 0.708137826232636210, 0.708173129058977110, 0.708208430114885100, 0.708243729400272470, 0.708279026915049960, 0.708314322659130080, 0.708349616632424570, +0.708384908834844840, 0.708420199266302730, 0.708455487926710200, 0.708490774815979220, 0.708526059934020960, 0.708561343280747600, 0.708596624856070890, 0.708631904659902890, +0.708667182692154900, 0.708702458952738870, 0.708737733441566760, 0.708773006158550540, 0.708808277103601610, 0.708843546276631930, 0.708878813677553340, 0.708914079306278030, +0.708949343162717290, 0.708984605246783080, 0.709019865558387470, 0.709055124097442420, 0.709090380863859230, 0.709125635857550280, 0.709160889078427340, 0.709196140526401900, +0.709231390201386260, 0.709266638103291940, 0.709301884232031440, 0.709337128587515960, 0.709372371169657570, 0.709407611978368320, 0.709442851013560300, 0.709478088275144910, +0.709513323763034220, 0.709548557477140300, 0.709583789417375210, 0.709619019583650370, 0.709654247975877950, 0.709689474593970030, 0.709724699437838670, 0.709759922507395170, +0.709795143802551930, 0.709830363323221140, 0.709865581069314190, 0.709900797040743270, 0.709936011237420230, 0.709971223659257580, 0.710006434306166610, 0.710041643178059510, +0.710076850274848240, 0.710112055596445190, 0.710147259142761670, 0.710182460913710070, 0.710217660909202240, 0.710252859129150590, 0.710288055573466530, 0.710323250242062330, +0.710358443134849970, 0.710393634251741850, 0.710428823592649250, 0.710464011157484700, 0.710499196946160260, 0.710534380958587670, 0.710569563194679120, 0.710604743654346560, +0.710639922337502620, 0.710675099244058470, 0.710710274373926530, 0.710745447727018980, 0.710780619303248100, 0.710815789102525300, 0.710850957124763090, 0.710886123369873450, +0.710921287837768870, 0.710956450528360760, 0.710991611441561420, 0.711026770577283140, 0.711061927935438210, 0.711097083515938260, 0.711132237318695460, 0.711167389343622110, +0.711202539590630620, 0.711237688059632390, 0.711272834750540040, 0.711307979663265870, 0.711343122797721490, 0.711378264153819220, 0.711413403731471330, 0.711448541530590230, +0.711483677551087550, 0.711518811792875570, 0.711553944255866600, 0.711589074939973030, 0.711624203845106610, 0.711659330971179500, 0.711694456318104240, 0.711729579885793000, +0.711764701674157510, 0.711799821683110400, 0.711834939912563640, 0.711870056362429840, 0.711905171032620520, 0.711940283923048420, 0.711975395033625840, 0.712010504364264500, +0.712045611914876810, 0.712080717685375180, 0.712115821675672000, 0.712150923885679020, 0.712186024315308640, 0.712221122964473370, 0.712256219833085510, 0.712291314921056680, +0.712326408228299730, 0.712361499754726620, 0.712396589500250200, 0.712431677464781980, 0.712466763648234470, 0.712501848050520080, 0.712536930671551440, 0.712572011511240170, +0.712607090569498780, 0.712642167846240020, 0.712677243341375610, 0.712712317054817970, 0.712747388986479600, 0.712782459136273030, 0.712817527504110090, 0.712852594089903310, +0.712887658893564870, 0.712922721915007830, 0.712957783154143600, 0.712992842610884800, 0.713027900285144070, 0.713062956176833800, 0.713098010285865840, 0.713133062612152810, +0.713168113155607130, 0.713203161916141530, 0.713238208893667740, 0.713273254088098390, 0.713308297499346210, 0.713343339127322950, 0.713378378971941450, 0.713413417033113890, +0.713448453310753130, 0.713483487804770890, 0.713518520515080020, 0.713553551441592830, 0.713588580584222030, 0.713623607942879490, 0.713658633517477940, 0.713693657307929770, +0.713728679314147740, 0.713763699536043680, 0.713798717973530560, 0.713833734626520440, 0.713868749494926400, 0.713903762578660170, 0.713938773877634600, 0.713973783391761980, +0.714008791120955280, 0.714043797065126220, 0.714078801224187650, 0.714113803598052540, 0.714148804186632510, 0.714183802989840410, 0.714218800007588860, 0.714253795239790600, +0.714288788686357590, 0.714323780347202670, 0.714358770222238150, 0.714393758311377080, 0.714428744614531320, 0.714463729131613710, 0.714498711862536770, 0.714533692807213350, +0.714568671965555290, 0.714603649337475780, 0.714638624922886990, 0.714673598721701890, 0.714708570733832650, 0.714743540959191790, 0.714778509397692610, 0.714813476049246610, +0.714848440913767090, 0.714883403991166460, 0.714918365281357550, 0.714953324784252440, 0.714988282499764090, 0.715023238427805020, 0.715058192568288060, 0.715093144921125410, +0.715128095486229800, 0.715163044263514070, 0.715197991252890960, 0.715232936454272660, 0.715267879867571900, 0.715302821492701520, 0.715337761329574270, 0.715372699378102440, +0.715407635638198870, 0.715442570109776410, 0.715477502792747240, 0.715512433687024440, 0.715547362792520400, 0.715582290109148420, 0.715617215636820240, 0.715652139375449140, +0.715687061324947640, 0.715721981485228810, 0.715756899856204720, 0.715791816437788330, 0.715826731229892490, 0.715861644232430040, 0.715896555445313170, 0.715931464868455050, +0.715966372501768090, 0.716001278345165690, 0.716036182398559600, 0.716071084661863200, 0.716105985134989020, 0.716140883817850240, 0.716175780710358810, 0.716210675812428030, +0.716245569123970970, 0.716280460644899470, 0.716315350375126950, 0.716350238314566010, 0.716385124463129850, 0.716420008820730430, 0.716454891387281130, 0.716489772162694490, +0.716524651146883800, 0.716559528339761220, 0.716594403741239730, 0.716629277351232270, 0.716664149169651930, 0.716699019196410880, 0.716733887431422190, 0.716768753874598930, +0.716803618525854060, 0.716838481385099870, 0.716873342452249430, 0.716908201727215920, 0.716943059209911640, 0.716977914900249650, 0.717012768798142910, 0.717047620903504600, +0.717082471216246910, 0.717117319736283010, 0.717152166463525860, 0.717187011397888540, 0.717221854539283440, 0.717256695887623640, 0.717291535442822090, 0.717326373204792090, +0.717361209173445920, 0.717396043348696550, 0.717430875730457160, 0.717465706318640930, 0.717500535113160030, 0.717535362113927880, 0.717570187320857530, 0.717605010733861400, +0.717639832352852890, 0.717674652177744620, 0.717709470208450220, 0.717744286444881750, 0.717779100886952510, 0.717813913534575580, 0.717848724387664230, 0.717883533446130650, +0.717918340709888250, 0.717953146178849980, 0.717987949852929240, 0.718022751732038330, 0.718057551816090430, 0.718092350104998720, 0.718127146598676490, 0.718161941297035920, +0.718196734199990640, 0.718231525307453820, 0.718266314619337760, 0.718301102135556090, 0.718335887856021540, 0.718370671780647620, 0.718405453909346740, 0.718440234242032180, +0.718475012778617030, 0.718509789519014790, 0.718544564463137640, 0.718579337610899090, 0.718614108962212230, 0.718648878516990330, 0.718683646275146030, 0.718718412236592610, +0.718753176401243030, 0.718787938769010930, 0.718822699339808580, 0.718857458113549620, 0.718892215090146890, 0.718926970269514020, 0.718961723651563410, 0.718996475236208470, +0.719031225023362590, 0.719065973012938400, 0.719100719204849300, 0.719135463599008370, 0.719170206195329120, 0.719204946993724060, 0.719239685994106480, 0.719274423196389790, +0.719309158600487390, 0.719343892206311790, 0.719378624013776390, 0.719413354022794490, 0.719448082233279500, 0.719482808645143910, 0.719517533258301370, 0.719552256072665040, +0.719586977088148340, 0.719621696304663880, 0.719656413722125190, 0.719691129340445770, 0.719725843159538250, 0.719760555179316030, 0.719795265399692520, 0.719829973820581110, +0.719864680441894440, 0.719899385263546130, 0.719934088285449360, 0.719968789507517530, 0.720003488929663590, 0.720038186551800850, 0.720072882373842700, 0.720107576395702550, +0.720142268617293250, 0.720176959038528300, 0.720211647659320890, 0.720246334479584640, 0.720281019499232290, 0.720315702718177350, 0.720350384136333570, 0.720385063753613440, +0.720419741569930610, 0.720454417585198570, 0.720489091799330630, 0.720523764212239740, 0.720558434823839410, 0.720593103634042940, 0.720627770642764180, 0.720662435849915630, +0.720697099255410920, 0.720731760859163460, 0.720766420661086980, 0.720801078661094110, 0.720835734859098460, 0.720870389255013570, 0.720905041848753040, 0.720939692640229500, +0.720974341629356810, 0.721008988816048250, 0.721043634200217550, 0.721078277781777350, 0.721112919560641610, 0.721147559536723710, 0.721182197709936750, 0.721216834080194210, +0.721251468647409520, 0.721286101411496630, 0.721320732372368050, 0.721355361529937730, 0.721389988884118980, 0.721424614434825530, 0.721459238181970220, 0.721493860125466900, +0.721528480265228870, 0.721563098601169960, 0.721597715133203030, 0.721632329861241820, 0.721666942785199720, 0.721701553904990690, 0.721736163220527250, 0.721770770731723580, +0.721805376438493300, 0.721839980340749140, 0.721874582438405190, 0.721909182731374610, 0.721943781219571480, 0.721978377902908640, 0.722012972781299830, 0.722047565854658460, +0.722082157122898580, 0.722116746585933060, 0.722151334243675610, 0.722185920096039770, 0.722220504142939480, 0.722255086384287700, 0.722289666819998070, 0.722324245449984410, +0.722358822274160370, 0.722393397292438900, 0.722427970504734060, 0.722462541910959600, 0.722497111511028360, 0.722531679304854510, 0.722566245292351250, 0.722600809473432860, +0.722635371848012080, 0.722669932416002860, 0.722704491177318830, 0.722739048131873840, 0.722773603279580960, 0.722808156620354140, 0.722842708154106780, 0.722877257880753080, +0.722911805800205860, 0.722946351912379100, 0.722980896217186530, 0.723015438714541990, 0.723049979404358560, 0.723084518286550180, 0.723119055361030830, 0.723153590627713560, +0.723188124086512230, 0.723222655737340680, 0.723257185580112650, 0.723291713614741430, 0.723326239841140970, 0.723360764259224910, 0.723395286868907190, 0.723429807670101010, +0.723464326662720310, 0.723498843846678730, 0.723533359221890440, 0.723567872788268280, 0.723602384545726670, 0.723636894494178890, 0.723671402633539350, 0.723705908963720780, +0.723740413484637690, 0.723774916196203380, 0.723809417098332130, 0.723843916190937130, 0.723878413473932230, 0.723912908947231700, 0.723947402610748410, 0.723981894464396760, +0.724016384508090360, 0.724050872741743400, 0.724085359165268730, 0.724119843778580850, 0.724154326581593290, 0.724188807574220220, 0.724223286756374820, 0.724257764127971160, +0.724292239688923090, 0.724326713439144790, 0.724361185378549430, 0.724395655507050980, 0.724430123824563510, 0.724464590331000970, 0.724499055026276760, 0.724533517910304850, +0.724567978982999410, 0.724602438244273730, 0.724636895694041990, 0.724671351332217940, 0.724705805158715850, 0.724740257173449030, 0.724774707376331430, 0.724809155767277110, +0.724843602346200270, 0.724878047113014070, 0.724912490067632700, 0.724946931209970220, 0.724981370539940610, 0.725015808057457360, 0.725050243762434540, 0.725084677654786120, +0.725119109734426280, 0.725153540001268420, 0.725187968455226710, 0.725222395096215330, 0.725256819924147590, 0.725291242938937990, 0.725325664140500150, 0.725360083528748480, +0.725394501103596380, 0.725428916864957920, 0.725463330812747160, 0.725497742946878410, 0.725532153267265060, 0.725566561773821280, 0.725600968466461050, 0.725635373345098760, +0.725669776409647690, 0.725704177660022260, 0.725738577096136320, 0.725772974717904250, 0.725807370525239470, 0.725841764518056150, 0.725876156696268590, 0.725910547059790860, +0.725944935608536460, 0.725979322342419690, 0.726013707261354950, 0.726048090365255640, 0.726082471654036170, 0.726116851127610370, 0.726151228785892890, 0.726185604628796890, +0.726219978656237000, 0.726254350868127170, 0.726288721264381600, 0.726323089844914120, 0.726357456609638800, 0.726391821558469930, 0.726426184691321810, 0.726460546008107830, +0.726494905508742520, 0.726529263193139930, 0.726563619061214580, 0.726597973112879770, 0.726632325348050110, 0.726666675766639900, 0.726701024368562650, 0.726735371153732880, +0.726769716122064760, 0.726804059273472580, 0.726838400607869970, 0.726872740125171330, 0.726907077825290850, 0.726941413708142910, 0.726975747773641270, 0.727010080021700200, +0.727044410452233890, 0.727078739065156960, 0.727113065860382820, 0.727147390837825980, 0.727181713997400610, 0.727216035339021350, 0.727250354862601700, 0.727284672568056180, +0.727318988455299300, 0.727353302524244570, 0.727387614774806620, 0.727421925206899630, 0.727456233820438110, 0.727490540615335800, 0.727524845591506990, 0.727559148748866180, +0.727593450087327680, 0.727627749606805320, 0.727662047307213620, 0.727696343188466770, 0.727730637250479370, 0.727764929493165070, 0.727799219916438480, 0.727833508520213890, +0.727867795304405710, 0.727902080268927780, 0.727936363413694610, 0.727970644738620940, 0.728004924243620290, 0.728039201928607270, 0.728073477793496400, 0.728107751838201980, +0.728142024062637950, 0.728176294466718830, 0.728210563050359030, 0.728244829813473160, 0.728279094755974850, 0.728313357877778840, 0.728347619178799420, 0.728381878658951100, +0.728416136318148060, 0.728450392156304470, 0.728484646173334970, 0.728518898369154180, 0.728553148743675830, 0.728587397296814540, 0.728621644028484840, 0.728655888938601230, +0.728690132027077660, 0.728724373293828780, 0.728758612738769300, 0.728792850361812960, 0.728827086162874500, 0.728861320141868330, 0.728895552298709060, 0.728929782633310760, +0.728964011145587950, 0.728998237835455030, 0.729032462702826840, 0.729066685747617240, 0.729100906969740950, 0.729135126369112370, 0.729169343945646250, 0.729203559699256540, +0.729237773629857870, 0.729271985737364740, 0.729306196021692000, 0.729340404482753390, 0.729374611120463870, 0.729408815934738050, 0.729443018925489910, 0.729477220092634270, +0.729511419436085550, 0.729545616955758590, 0.729579812651567240, 0.729614006523426450, 0.729648198571250520, 0.729682388794954510, 0.729716577194452150, 0.729750763769658420, +0.729784948520487700, 0.729819131446854950, 0.729853312548674030, 0.729887491825859880, 0.729921669278327020, 0.729955844905990190, 0.729990018708763570, 0.730024190686561880, +0.730058360839299980, 0.730092529166891820, 0.730126695669252480, 0.730160860346296350, 0.730195023197938280, 0.730229184224092330, 0.730263343424673580, 0.730297500799596320, +0.730331656348775730, 0.730365810072125640, 0.730399961969561030, 0.730434112040996510, 0.730468260286347040, 0.730502406705526570, 0.730536551298450190, 0.730570694065032390, +0.730604835005188020, 0.730638974118831390, 0.730673111405877320, 0.730707246866240450, 0.730741380499835720, 0.730775512306577340, 0.730809642286380120, 0.730843770439159050, +0.730877896764828390, 0.730912021263302790, 0.730946143934497310, 0.730980264778326670, 0.731014383794705180, 0.731048500983547570, 0.731082616344768790, 0.731116729878283800, +0.731150841584006670, 0.731184951461852470, 0.731219059511735820, 0.731253165733571910, 0.731287270127274680, 0.731321372692759320, 0.731355473429940560, 0.731389572338733360, +0.731423669419051900, 0.731457764670811360, 0.731491858093926690, 0.731525949688312080, 0.731560039453882590, 0.731594127390552960, 0.731628213498238370, 0.731662297776852880, +0.731696380226311670, 0.731730460846529480, 0.731764539637421500, 0.731798616598901890, 0.731832691730885610, 0.731866765033287740, 0.731900836506023220, 0.731934906149006360, +0.731968973962152100, 0.732003039945375520, 0.732037104098591570, 0.732071166421714550, 0.732105226914659620, 0.732139285577342090, 0.732173342409675800, 0.732207397411576370, +0.732241450582958310, 0.732275501923736920, 0.732309551433826480, 0.732343599113142170, 0.732377644961598960, 0.732411688979111910, 0.732445731165595190, 0.732479771520964330, +0.732513810045133940, 0.732547846738019310, 0.732581881599534750, 0.732615914629595630, 0.732649945828116600, 0.732683975195013050, 0.732718002730199160, 0.732752028433590440, +0.732786052305101520, 0.732820074344647800, 0.732854094552143560, 0.732888112927504220, 0.732922129470644720, 0.732956144181479700, 0.732990157059924320, 0.733024168105893550, +0.733058177319302560, 0.733092184700065990, 0.733126190248098770, 0.733160193963316220, 0.733194195845633390, 0.733228195894964910, 0.733262194111225840, 0.733296190494331260, +0.733330185044196560, 0.733364177760736040, 0.733398168643865200, 0.733432157693498790, 0.733466144909552420, 0.733500130291940280, 0.733534113840577870, 0.733568095555380490, +0.733602075436262440, 0.733636053483139430, 0.733670029695926100, 0.733704004074538060, 0.733737976618889620, 0.733771947328896390, 0.733805916204473220, 0.733839883245535620, +0.733873848451997880, 0.733907811823775620, 0.733941773360783810, 0.733975733062937950, 0.734009690930152340, 0.734043646962342590, 0.734077601159423660, 0.734111553521310970, +0.734145504047919230, 0.734179452739163630, 0.734213399594959790, 0.734247344615222010, 0.734281287799865900, 0.734315229148806650, 0.734349168661959650, 0.734383106339239310, +0.734417042180561360, 0.734450976185840760, 0.734484908354992920, 0.734518838687932550, 0.734552767184575180, 0.734586693844835770, 0.734620618668629930, 0.734654541655872300, +0.734688462806478260, 0.734722382120363230, 0.734756299597442370, 0.734790215237630440, 0.734824129040843040, 0.734858041006995700, 0.734891951136002810, 0.734925859427780100, +0.734959765882242880, 0.734993670499306310, 0.735027573278885460, 0.735061474220895630, 0.735095373325251990, 0.735129270591870390, 0.735163166020665120, 0.735197059611552130, +0.735230951364446380, 0.735264841279263500, 0.735298729355918330, 0.735332615594326280, 0.735366499994402730, 0.735400382556063210, 0.735434263279222460, 0.735468142163796080, +0.735502019209699260, 0.735535894416847640, 0.735569767785156150, 0.735603639314540200, 0.735637509004915310, 0.735671376856196440, 0.735705242868299190, 0.735739107041138760, +0.735772969374630880, 0.735806829868690280, 0.735840688523232590, 0.735874545338173200, 0.735908400313427750, 0.735942253448911070, 0.735976104744538560, 0.736009954200225970, +0.736043801815888690, 0.736077647591441670, 0.736111491526800550, 0.736145333621880620, 0.736179173876597700, 0.736213012290866550, 0.736246848864602900, 0.736280683597722360, +0.736314516490139900, 0.736348347541771030, 0.736382176752531370, 0.736416004122336540, 0.736449829651101400, 0.736483653338741770, 0.736517475185172850, 0.736551295190310710, +0.736585113354069950, 0.736618929676366330, 0.736652744157115460, 0.736686556796233070, 0.736720367593633910, 0.736754176549233920, 0.736787983662948510, 0.736821788934693300, +0.736855592364383360, 0.736889393951934530, 0.736923193697262450, 0.736956991600282050, 0.736990787660909200, 0.737024581879059390, 0.737058374254648490, 0.737092164787591320, +0.737125953477803740, 0.737159740325201260, 0.737193525329699620, 0.737227308491213980, 0.737261089809660100, 0.737294869284953470, 0.737328646917009940, 0.737362422705744480, +0.737396196651073030, 0.737429968752911000, 0.737463739011174350, 0.737497507425778130, 0.737531273996638090, 0.737565038723669850, 0.737598801606789370, 0.737632562645911590, +0.737666321840952380, 0.737700079191827670, 0.737733834698452440, 0.737767588360742630, 0.737801340178613870, 0.737835090151982120, 0.737868838280762220, 0.737902584564870230, +0.737936329004221900, 0.737970071598732960, 0.738003812348318580, 0.738037551252894610, 0.738071288312376780, 0.738105023526681060, 0.738138756895722500, 0.738172488419416960, +0.738206218097680280, 0.738239945930428300, 0.738273671917576200, 0.738307396059039940, 0.738341118354735480, 0.738374838804577880, 0.738408557408483210, 0.738442274166367100, +0.738475989078145710, 0.738509702143734010, 0.738543413363047960, 0.738577122736003510, 0.738610830262516500, 0.738644535942502010, 0.738678239775876320, 0.738711941762554950, +0.738745641902454060, 0.738779340195488850, 0.738813036641575160, 0.738846731240628940, 0.738880423992566150, 0.738914114897302080, 0.738947803954752680, 0.738981491164834030, +0.739015176527461400, 0.739048860042550770, 0.739082541710018080, 0.739116221529779290, 0.739149899501749590, 0.739183575625845250, 0.739217249901981900, 0.739250922330075830, +0.739284592910042000, 0.739318261641796810, 0.739351928525255890, 0.739385593560335510, 0.739419256746950750, 0.739452918085018010, 0.739486577574452800, 0.739520235215171520, +0.739553891007089350, 0.739587544950122470, 0.739621197044187050, 0.739654847289198280, 0.739688495685072440, 0.739722142231725280, 0.739755786929073180, 0.739789429777031220, +0.739823070775515790, 0.739856709924442520, 0.739890347223727930, 0.739923982673287070, 0.739957616273036360, 0.739991248022891510, 0.740024877922768830, 0.740058505972583710, +0.740092132172252340, 0.740125756521690660, 0.740159379020814740, 0.740192999669540220, 0.740226618467783150, 0.740260235415459600, 0.740293850512485640, 0.740327463758776780, +0.740361075154249320, 0.740394684698819530, 0.740428292392402600, 0.740461898234915040, 0.740495502226272690, 0.740529104366391850, 0.740562704655188030, 0.740596303092577400, +0.740629899678476030, 0.740663494412800110, 0.740697087295465240, 0.740730678326387610, 0.740764267505483410, 0.740797854832668690, 0.740831440307859190, 0.740865023930970870, +0.740898605701920230, 0.740932185620623240, 0.740965763686995520, 0.740999339900953350, 0.741032914262413240, 0.741066486771290390, 0.741100057427501400, 0.741133626230962240, +0.741167193181589410, 0.741200758279298210, 0.741234321524005150, 0.741267882915626290, 0.741301442454078030, 0.741335000139275780, 0.741368555971136050, 0.741402109949575010, +0.741435662074508950, 0.741469212345853390, 0.741502760763524950, 0.741536307327439470, 0.741569852037513580, 0.741603394893662670, 0.741636935895803370, 0.741670475043851970, +0.741704012337724090, 0.741737547777336250, 0.741771081362604500, 0.741804613093445360, 0.741838142969774350, 0.741871670991508080, 0.741905197158562510, 0.741938721470854270, +0.741972243928298970, 0.742005764530813130, 0.742039283278312700, 0.742072800170714530, 0.742106315207933910, 0.742139828389887570, 0.742173339716491690, 0.742206849187662780, +0.742240356803316350, 0.742273862563369140, 0.742307366467737100, 0.742340868516337070, 0.742374368709084690, 0.742407867045896230, 0.742441363526688440, 0.742474858151376930, +0.742508350919878210, 0.742541841832108700, 0.742575330887984890, 0.742608818087422410, 0.742642303430337880, 0.742675786916647710, 0.742709268546268180, 0.742742748319115350, +0.742776226235105530, 0.742809702294155220, 0.742843176496180920, 0.742876648841098390, 0.742910119328824230, 0.742943587959274840, 0.742977054732366640, 0.743010519648015680, +0.743043982706138250, 0.743077443906651200, 0.743110903249470270, 0.743144360734512070, 0.743177816361693000, 0.743211270130929690, 0.743244722042137870, 0.743278172095234390, +0.743311620290135310, 0.743345066626757480, 0.743378511105016740, 0.743411953724829820, 0.743445394486112800, 0.743478833388782730, 0.743512270432755250, 0.743545705617947080, +0.743579138944274740, 0.743612570411654740, 0.743646000020003030, 0.743679427769236350, 0.743712853659271420, 0.743746277690023990, 0.743779699861410900, 0.743813120173348550, +0.743846538625753780, 0.743879955218542220, 0.743913369951630930, 0.743946782824936090, 0.743980193838374660, 0.744013602991862370, 0.744047010285316170, 0.744080415718652350, +0.744113819291787880, 0.744147221004638480, 0.744180620857121110, 0.744214018849152170, 0.744247414980648500, 0.744280809251525950, 0.744314201661701370, 0.744347592211091590, +0.744380980899612580, 0.744414367727181060, 0.744447752693713550, 0.744481135799127110, 0.744514517043337490, 0.744547896426261510, 0.744581273947815920, 0.744614649607917340, +0.744648023406481840, 0.744681395343426260, 0.744714765418667210, 0.744748133632121560, 0.744781499983705350, 0.744814864473335340, 0.744848227100928130, 0.744881587866400690, +0.744914946769668960, 0.744948303810649910, 0.744981658989260050, 0.745015012305416340, 0.745048363759034830, 0.745081713350032370, 0.745115061078325920, 0.745148406943831660, +0.745181750946466210, 0.745215093086146420, 0.745248433362789230, 0.745281771776310720, 0.745315108326627730, 0.745348443013656880, 0.745381775837315350, 0.745415106797518990, +0.745448435894184860, 0.745481763127229690, 0.745515088496570440, 0.745548412002123070, 0.745581733643804760, 0.745615053421532110, 0.745648371335222100, 0.745681687384790900, +0.745715001570155470, 0.745748313891232750, 0.745781624347939040, 0.745814932940191190, 0.745848239667906030, 0.745881544531000640, 0.745914847529391080, 0.745948148662994410, +0.745981447931727270, 0.746014745335506820, 0.746048040874249360, 0.746081334547871620, 0.746114626356290670, 0.746147916299423450, 0.746181204377186050, 0.746214490589495630, +0.746247774936269040, 0.746281057417423340, 0.746314338032874720, 0.746347616782540140, 0.746380893666336860, 0.746414168684181090, 0.746447441835989880, 0.746480713121680070, +0.746513982541168850, 0.746547250094372170, 0.746580515781207540, 0.746613779601591590, 0.746647041555441370, 0.746680301642673410, 0.746713559863204650, 0.746746816216951940, +0.746780070703832570, 0.746813323323762710, 0.746846574076659440, 0.746879822962439820, 0.746913069981020920, 0.746946315132319020, 0.746979558416251410, 0.747012799832734830, +0.747046039381686570, 0.747079277063022910, 0.747112512876661140, 0.747145746822518330, 0.747178978900510880, 0.747212209110555970, 0.747245437452570440, 0.747278663926471690, +0.747311888532176010, 0.747345111269600570, 0.747378332138662340, 0.747411551139278600, 0.747444768271365630, 0.747477983534840850, 0.747511196929621090, 0.747544408455623530, +0.747577618112764800, 0.747610825900961950, 0.747644031820131950, 0.747677235870192300, 0.747710438051059190, 0.747743638362650010, 0.747776836804882050, 0.747810033377671710, +0.747843228080936170, 0.747876420914592720, 0.747909611878558420, 0.747942800972749900, 0.747975988197084220, 0.748009173551478670, 0.748042357035850420, 0.748075538650116110, +0.748108718394192800, 0.748141896267997760, 0.748175072271448300, 0.748208246404460820, 0.748241418666952820, 0.748274589058841140, 0.748307757580043310, 0.748340924230475930, +0.748374089010056090, 0.748407251918701390, 0.748440412956328240, 0.748473572122854040, 0.748506729418195850, 0.748539884842271300, 0.748573038394996670, 0.748606190076289370, +0.748639339886066680, 0.748672487824245890, 0.748705633890743630, 0.748738778085477170, 0.748771920408363930, 0.748805060859321080, 0.748838199438265350, 0.748871336145114030, +0.748904470979784410, 0.748937603942194000, 0.748970735032259190, 0.749003864249897510, 0.749036991595026570, 0.749070117067562770, 0.749103240667423730, 0.749136362394526520, +0.749169482248788770, 0.749202600230126970, 0.749235716338458760, 0.749268830573701190, 0.749301942935771900, 0.749335053424587280, 0.749368162040065290, 0.749401268782122650, +0.749434373650677330, 0.749467476645645610, 0.749500577766945340, 0.749533677014493580, 0.749566774388207850, 0.749599869888004980, 0.749632963513802380, 0.749666055265517440, +0.749699145143067570, 0.749732233146369610, 0.749765319275341070, 0.749798403529899460, 0.749831485909961630, 0.749864566415444970, 0.749897645046266990, 0.749930721802345210, +0.749963796683596250, 0.749996869689937840, 0.750029940821287270, 0.750063010077562150, 0.750096077458679120, 0.750129142964556020, 0.750162206595110010, 0.750195268350258740, +0.750228328229919030, 0.750261386234008510, 0.750294442362444580, 0.750327496615144750, 0.750360548992025980, 0.750393599493005770, 0.750426648118001860, 0.750459694866930980, +0.750492739739710980, 0.750525782736259030, 0.750558823856492970, 0.750591863100329550, 0.750624900467686480, 0.750657935958481070, 0.750690969572631260, 0.750724001310053680, +0.750757031170666060, 0.750790059154385900, 0.750823085261130840, 0.750856109490817820, 0.750889131843364590, 0.750922152318688420, 0.750955170916707160, 0.750988187637337660, +0.751021202480497860, 0.751054215446105180, 0.751087226534076780, 0.751120235744330180, 0.751153243076783110, 0.751186248531353180, 0.751219252107957370, 0.751252253806513390, +0.751285253626938760, 0.751318251569151330, 0.751351247633067930, 0.751384241818606520, 0.751417234125684400, 0.751450224554219500, 0.751483213104128800, 0.751516199775330020, +0.751549184567740780, 0.751582167481278820, 0.751615148515861200, 0.751648127671405650, 0.751681104947829800, 0.751714080345051490, 0.751747053862987680, 0.751780025501556310, +0.751812995260675130, 0.751845963140261090, 0.751878929140232240, 0.751911893260506000, 0.751944855501000430, 0.751977815861632260, 0.752010774342319670, 0.752043730942980160, +0.752076685663531470, 0.752109638503890900, 0.752142589463976270, 0.752175538543705110, 0.752208485742995370, 0.752241431061764110, 0.752274374499929290, 0.752307316057408530, +0.752340255734119780, 0.752373193529980220, 0.752406129444907480, 0.752439063478819840, 0.752471995631634140, 0.752504925903268560, 0.752537854293640620, 0.752570780802668370, +0.752603705430268780, 0.752636628176360010, 0.752669549040859700, 0.752702468023685680, 0.752735385124755350, 0.752768300343986450, 0.752801213681296820, 0.752834125136604530, +0.752867034709826520, 0.752899942400880980, 0.752932848209685650, 0.752965752136158350, 0.752998654180216500, 0.753031554341777930, 0.753064452620760830, 0.753097349017082250, +0.753130243530660270, 0.753163136161412840, 0.753196026909257690, 0.753228915774112330, 0.753261802755894600, 0.753294687854522360, 0.753327571069913660, 0.753360452401985790, +0.753393331850656820, 0.753426209415844370, 0.753459085097466840, 0.753491958895441290, 0.753524830809685800, 0.753557700840118190, 0.753590568986656770, 0.753623435249218490, +0.753656299627721630, 0.753689162122084370, 0.753722022732223880, 0.753754881458058470, 0.753787738299505740, 0.753820593256483980, 0.753853446328910380, 0.753886297516703220, +0.753919146819780340, 0.753951994238059810, 0.753984839771459030, 0.754017683419896170, 0.754050525183289080, 0.754083365061556040, 0.754116203054614240, 0.754149039162381960, +0.754181873384777050, 0.754214705721717780, 0.754247536173121350, 0.754280364738906250, 0.754313191418990110, 0.754346016213291340, 0.754378839121727210, 0.754411660144215900, +0.754444479280675930, 0.754477296531024360, 0.754510111895179580, 0.754542925373059450, 0.754575736964582360, 0.754608546669665590, 0.754641354488227560, 0.754674160420185980, +0.754706964465459370, 0.754739766623965140, 0.754772566895621440, 0.754805365280346250, 0.754838161778057960, 0.754870956388674070, 0.754903749112112780, 0.754936539948292020, +0.754969328897130200, 0.755002115958544830, 0.755034901132454190, 0.755067684418776590, 0.755100465817429400, 0.755133245328331150, 0.755166022951399670, 0.755198798686553490, +0.755231572533710090, 0.755264344492787680, 0.755297114563704410, 0.755329882746378580, 0.755362649040727810, 0.755395413446670490, 0.755428175964124590, 0.755460936593008500, +0.755493695333239850, 0.755526452184736910, 0.755559207147417870, 0.755591960221201010, 0.755624711406004070, 0.755657460701745330, 0.755690208108343200, 0.755722953625715290, +0.755755697253780000, 0.755788438992455400, 0.755821178841660110, 0.755853916801311530, 0.755886652871328060, 0.755919387051628090, 0.755952119342129910, 0.755984849742751040, +0.756017578253410210, 0.756050304874025360, 0.756083029604515010, 0.756115752444796780, 0.756148473394789300, 0.756181192454410510, 0.756213909623579040, 0.756246624902212620, +0.756279338290229530, 0.756312049787548070, 0.756344759394086850, 0.756377467109763390, 0.756410172934496310, 0.756442876868204110, 0.756475578910804410, 0.756508279062215630, +0.756540977322356260, 0.756573673691144810, 0.756606368168498800, 0.756639060754336850, 0.756671751448577350, 0.756704440251138700, 0.756737127161938640, 0.756769812180895670, +0.756802495307928310, 0.756835176542954740, 0.756867855885893110, 0.756900533336662520, 0.756933208895179900, 0.756965882561364320, 0.756998554335134080, 0.757031224216407450, +0.757063892205102730, 0.757096558301138310, 0.757129222504433040, 0.757161884814904100, 0.757194545232470540, 0.757227203757050550, 0.757259860388562520, 0.757292515126924970, +0.757325167972055960, 0.757357818923874220, 0.757390467982298370, 0.757423115147245810, 0.757455760418635380, 0.757488403796385710, 0.757521045280414970, 0.757553684870641560, +0.757586322566983990, 0.757618958369360550, 0.757651592277690410, 0.757684224291890640, 0.757716854411880410, 0.757749482637577910, 0.757782108968901750, 0.757814733405770320, +0.757847355948102040, 0.757879976595815960, 0.757912595348829270, 0.757945212207061240, 0.757977827170430050, 0.758010440238854440, 0.758043051412252700, 0.758075660690543220, +0.758108268073644620, 0.758140873561476080, 0.758173477153954670, 0.758206078850999440, 0.758238678652529140, 0.758271276558462160, 0.758303872568717010, 0.758336466683212200, +0.758369058901866680, 0.758401649224597960, 0.758434237651325120, 0.758466824181966760, 0.758499408816441290, 0.758531991554667330, 0.758564572396563270, 0.758597151342047970, +0.758629728391040260, 0.758662303543457650, 0.758694876799219320, 0.758727448158243780, 0.758760017620449530, 0.758792585185755430, 0.758825150854079760, 0.758857714625341130, +0.758890276499458950, 0.758922836476350390, 0.758955394555934750, 0.758987950738130630, 0.759020505022856670, 0.759053057410031480, 0.759085607899573580, 0.759118156491402240, +0.759150703185434980, 0.759183247981590980, 0.759215790879788740, 0.759248331879947110, 0.759280870981984600, 0.759313408185819940, 0.759345943491371740, 0.759378476898559310, +0.759411008407300140, 0.759443538017513410, 0.759476065729117740, 0.759508591542031990, 0.759541115456174860, 0.759573637471464780, 0.759606157587820690, 0.759638675805161760, +0.759671192123405610, 0.759703706542471440, 0.759736219062277950, 0.759768729682744000, 0.759801238403788100, 0.759833745225329200, 0.759866250147286590, 0.759898753169577670, +0.759931254292121830, 0.759963753514838030, 0.759996250837644660, 0.760028746260460690, 0.760061239783204940, 0.760093731405796060, 0.760126221128153420, 0.760158708950194660, +0.760191194871839170, 0.760223678893005570, 0.760256161013612820, 0.760288641233579750, 0.760321119552825000, 0.760353595971268060, 0.760386070488826560, 0.760418543105419900, +0.760451013820966800, 0.760483482635386230, 0.760515949548596910, 0.760548414560517800, 0.760580877671067520, 0.760613338880165690, 0.760645798187730040, 0.760678255593679740, +0.760710711097933870, 0.760743164700411260, 0.760775616401030640, 0.760808066199711090, 0.760840514096371320, 0.760872960090930860, 0.760905404183307430, 0.760937846373420430, +0.760970286661188820, 0.761002725046531550, 0.761035161529367450, 0.761067596109615390, 0.761100028787194960, 0.761132459562023910, 0.761164888434021750, 0.761197315403107310, +0.761229740469199560, 0.761262163632217440, 0.761294584892080020, 0.761327004248706030, 0.761359421702015090, 0.761391837251925160, 0.761424250898355530, 0.761456662641225250, +0.761489072480453390, 0.761521480415958800, 0.761553886447660530, 0.761586290575478220, 0.761618692799329480, 0.761651093119134040, 0.761683491534810850, 0.761715888046278880, +0.761748282653457290, 0.761780675356264920, 0.761813066154620970, 0.761845455048444810, 0.761877842037654520, 0.761910227122169600, 0.761942610301909130, 0.761974991576792050, +0.762007370946737540, 0.762039748411664660, 0.762072123971492380, 0.762104497626140300, 0.762136869375526490, 0.762169239219570470, 0.762201607158191300, 0.762233973191308150, +0.762266337318840080, 0.762298699540706170, 0.762331059856826140, 0.762363418267117840, 0.762395774771501000, 0.762428129369894680, 0.762460482062218060, 0.762492832848390200, +0.762525181728330280, 0.762557528701957480, 0.762589873769191410, 0.762622216929950030, 0.762654558184153180, 0.762686897531719810, 0.762719234972569330, 0.762751570506620680, +0.762783904133793160, 0.762816235854005820, 0.762848565667178510, 0.762880893573229190, 0.762913219572077580, 0.762945543663642980, 0.762977865847844550, 0.763010186124601360, +0.763042504493832820, 0.763074820955458530, 0.763107135509396680, 0.763139448155566890, 0.763171758893888550, 0.763204067724280840, 0.763236374646662830, 0.763268679660954020, +0.763300982767073480, 0.763333283964941050, 0.763365583254474790, 0.763397880635594660, 0.763430176108219730, 0.763462469672269380, 0.763494761327662920, 0.763527051074319510, +0.763559338912159100, 0.763591624841099660, 0.763623908861061240, 0.763656190971963020, 0.763688471173724400, 0.763720749466264560, 0.763753025849502780, 0.763785300323358450, +0.763817572887751430, 0.763849843542599990, 0.763882112287823880, 0.763914379123342590, 0.763946644049075200, 0.763978907064941310, 0.764011168170860120, 0.764043427366751020, +0.764075684652533840, 0.764107940028126990, 0.764140193493450190, 0.764172445048422970, 0.764204694692964700, 0.764236942426994580, 0.764269188250432220, 0.764301432163197350, +0.764333674165208370, 0.764365914256385230, 0.764398152436647220, 0.764430388705913950, 0.764462623064104620, 0.764494855511138720, 0.764527086046935760, 0.764559314671415580, +0.764591541384496590, 0.764623766186098730, 0.764655989076141520, 0.764688210054544240, 0.764720429121226510, 0.764752646276107620, 0.764784861519107180, 0.764817074850145160, +0.764849286269139840, 0.764881495776011390, 0.764913703370679100, 0.764945909053062590, 0.764978112823081370, 0.765010314680654720, 0.765042514625702940, 0.765074712658144310, +0.765106908777898890, 0.765139102984886190, 0.765171295279025830, 0.765203485660237100, 0.765235674128439740, 0.765267860683553120, 0.765300045325497450, 0.765332228054191100, +0.765364408869554260, 0.765396587771506320, 0.765428764759966910, 0.765460939834855520, 0.765493112996091910, 0.765525284243596000, 0.765557453577286440, 0.765589620997083050, +0.765621786502905800, 0.765653950094673960, 0.765686111772307280, 0.765718271535725360, 0.765750429384847720, 0.765782585319594530, 0.765814739339884310, 0.765846891445637330, +0.765879041636773120, 0.765911189913211170, 0.765943336274871430, 0.765975480721673210, 0.766007623253536330, 0.766039763870380970, 0.766071902572125650, 0.766104039358690540, +0.766136174229995360, 0.766168307185959740, 0.766200438226503300, 0.766232567351545880, 0.766264694561007540, 0.766296819854806910, 0.766328943232864160, 0.766361064695099130, +0.766393184241431440, 0.766425301871780710, 0.766457417586066780, 0.766489531384209280, 0.766521643266128590, 0.766553753231743240, 0.766585861280973390, 0.766617967413739000, +0.766650071629959570, 0.766682173929555070, 0.766714274312445100, 0.766746372778549400, 0.766778469327788370, 0.766810563960080630, 0.766842656675346460, 0.766874747473505700, +0.766906836354477980, 0.766938923318183250, 0.766971008364541130, 0.767003091493472120, 0.767035172704894740, 0.767067251998729490, 0.767099329374896110, 0.767131404833314430, +0.767163478373904200, 0.767195549996585240, 0.767227619701277510, 0.767259687487901190, 0.767291753356375120, 0.767323817306619690, 0.767355879338554650, 0.767387939452100040, +0.767419997647175500, 0.767452053923700970, 0.767484108281596860, 0.767516160720781880, 0.767548211241176560, 0.767580259842700730, 0.767612306525274240, 0.767644351288816920, +0.767676394133248730, 0.767708435058489620, 0.767740474064460000, 0.767772511151078580, 0.767804546318265890, 0.767836579565941870, 0.767868610894026360, 0.767900640302439320, +0.767932667791100700, 0.767964693359930340, 0.767996717008848860, 0.768028738737775110, 0.768060758546629360, 0.768092776435331800, 0.768124792403802380, 0.768156806451960830, +0.768188818579727320, 0.768220828787022360, 0.768252837073764680, 0.768284843439875020, 0.768316847885273210, 0.768348850409879210, 0.768380851013613200, 0.768412849696395010, +0.768444846458144700, 0.768476841298782800, 0.768508834218228240, 0.768540825216401660, 0.768572814293222990, 0.768604801448612210, 0.768636786682489580, 0.768668769994774850, +0.768700751385388180, 0.768732730854250310, 0.768764708401279970, 0.768796684026397890, 0.768828657729524020, 0.768860629510578650, 0.768892599369481620, 0.768924567306153110, +0.768956533320513720, 0.768988497412482540, 0.769020459581979950, 0.769052419828926360, 0.769084378153241600, 0.769116334554845960, 0.769148289033659500, 0.769180241589602300, +0.769212192222595070, 0.769244140932556770, 0.769276087719408030, 0.769308032583069230, 0.769339975523460230, 0.769371916540501410, 0.769403855634112730, 0.769435792804214920, +0.769467728050727160, 0.769499661373570070, 0.769531592772663810, 0.769563522247928570, 0.769595449799284510, 0.769627375426651830, 0.769659299129950680, 0.769691220909101910, +0.769723140764024480, 0.769755058694639230, 0.769786974700866320, 0.769818888782625940, 0.769850800939838380, 0.769882711172423790, 0.769914619480302490, 0.769946525863395070, +0.769978430321620940, 0.770010332854900610, 0.770042233463154480, 0.770074132146302830, 0.770106028904265830, 0.770137923736963660, 0.770169816644317380, 0.770201707626245850, +0.770233596682670110, 0.770265483813510450, 0.770297369018686950, 0.770329252298120220, 0.770361133651730200, 0.770393013079437420, 0.770424890581162590, 0.770456766156825010, +0.770488639806345520, 0.770520511529644400, 0.770552381326642060, 0.770584249197258760, 0.770616115141414810, 0.770647979159031160, 0.770679841250026980, 0.770711701414323210, +0.770743559651840270, 0.770775415962498320, 0.770807270346217770, 0.770839122802919220, 0.770870973332522750, 0.770902821934949410, 0.770934668610118500, 0.770966513357950860, +0.770998356178366980, 0.771030197071287170, 0.771062036036631930, 0.771093873074321530, 0.771125708184276500, 0.771157541366417790, 0.771189372620664670, 0.771221201946938000, +0.771253029345158380, 0.771284854815246220, 0.771316678357121920, 0.771348499970705870, 0.771380319655919240, 0.771412137412681220, 0.771443953240912750, 0.771475767140534450, +0.771507579111466830, 0.771539389153630180, 0.771571197266945010, 0.771603003451331930, 0.771634807706711890, 0.771666610033004190, 0.771698410430130100, 0.771730208898009920, +0.771762005436564150, 0.771793800045713410, 0.771825592725378210, 0.771857383475478940, 0.771889172295936900, 0.771920959186671360, 0.771952744147603290, 0.771984527178653510, +0.772016308279742320, 0.772048087450790340, 0.772079864691718190, 0.772111640002446920, 0.772143413382896050, 0.772175184832986530, 0.772206954352639200, 0.772238721941774340, +0.772270487600312800, 0.772302251328174980, 0.772334013125281490, 0.772365772991553620, 0.772397530926910660, 0.772429286931273880, 0.772461041004563920, 0.772492793146701380, +0.772524543357606900, 0.772556291637200960, 0.772588037985404870, 0.772619782402138130, 0.772651524887322030, 0.772683265440876950, 0.772715004062723860, 0.772746740752783160, +0.772778475510975670, 0.772810208337221920, 0.772841939231443290, 0.772873668193559290, 0.772905395223491000, 0.772937120321159240, 0.772968843486484760, 0.773000564719388050, +0.773032284019790070, 0.773064001387611330, 0.773095716822773120, 0.773127430325195040, 0.773159141894798400, 0.773190851531503910, 0.773222559235232310, 0.773254265005904330, +0.773285968843440590, 0.773317670747762590, 0.773349370718789840, 0.773381068756443630, 0.773412764860644810, 0.773444459031313980, 0.773476151268372100, 0.773507841571739800, +0.773539529941337790, 0.773571216377087700, 0.773602900878908930, 0.773634583446722870, 0.773666264080450360, 0.773697942780012250, 0.773729619545329260, 0.773761294376322130, +0.773792967272911910, 0.773824638235019790, 0.773856307262565490, 0.773887974355470410, 0.773919639513655390, 0.773951302737041270, 0.773982964025549000, 0.774014623379099210, +0.774046280797613400, 0.774077936281011400, 0.774109589829214520, 0.774141241442143690, 0.774172891119719760, 0.774204538861863580, 0.774236184668496090, 0.774267828539538130, +0.774299470474911100, 0.774331110474534840, 0.774362748538330870, 0.774394384666220010, 0.774426018858123230, 0.774457651113961370, 0.774489281433655360, 0.774520909817126620, +0.774552536264295210, 0.774584160775082300, 0.774615783349409170, 0.774647403987196450, 0.774679022688365300, 0.774710639452836470, 0.774742254280531120, 0.774773867171370760, +0.774805478125275120, 0.774837087142165700, 0.774868694221963690, 0.774900299364589930, 0.774931902569965360, 0.774963503838011050, 0.774995103168647950, 0.775026700561797680, +0.775058296017380190, 0.775089889535316880, 0.775121481115528810, 0.775153070757937050, 0.775184658462462650, 0.775216244229026570, 0.775247828057550550, 0.775279409947954300, +0.775310989900159450, 0.775342567914087290, 0.775374143989658650, 0.775405718126794600, 0.775437290325416310, 0.775468860585444730, 0.775500428906801600, 0.775531995289406860, +0.775563559733182140, 0.775595122238048500, 0.775626682803926990, 0.775658241430738920, 0.775689798118405100, 0.775721352866846850, 0.775752905675985760, 0.775784456545741910, +0.775816005476036800, 0.775847552466791820, 0.775879097517927830, 0.775910640629366210, 0.775942181801027920, 0.775973721032834800, 0.776005258324706680, 0.776036793676565530, +0.776068327088332400, 0.776099858559928360, 0.776131388091274800, 0.776162915682292680, 0.776194441332903270, 0.776225965043028320, 0.776257486812587880, 0.776289006641503800, +0.776320524529697130, 0.776352040477089280, 0.776383554483601190, 0.776415066549154260, 0.776446576673670230, 0.776478084857069150, 0.776509591099272870, 0.776541095400202660, +0.776572597759779710, 0.776604098177925310, 0.776635596654560610, 0.776667093189606920, 0.776698587782986060, 0.776730080434618110, 0.776761571144425010, 0.776793059912327940, +0.776824546738248300, 0.776856031622107260, 0.776887514563826100, 0.776918995563326220, 0.776950474620529350, 0.776981951735355780, 0.777013426907727340, 0.777044900137565330, +0.777076371424791020, 0.777107840769325820, 0.777139308171091000, 0.777170773630008530, 0.777202237145998450, 0.777233698718982850, 0.777265158348883100, 0.777296616035620280, +0.777328071779116000, 0.777359525579291550, 0.777390977436068330, 0.777422427349368170, 0.777453875319111360, 0.777485321345219860, 0.777516765427615050, 0.777548207566218340, +0.777579647760951230, 0.777611086011734900, 0.777642522318490850, 0.777673956681141030, 0.777705389099605740, 0.777736819573807030, 0.777768248103666290, 0.777799674689104940, +0.777831099330044350, 0.777862522026406040, 0.777893942778111970, 0.777925361585082520, 0.777956778447239650, 0.777988193364504750, 0.778019606336799450, 0.778051017364045140, +0.778082426446163320, 0.778113833583075400, 0.778145238774703430, 0.778176642020967810, 0.778208043321790610, 0.778239442677093220, 0.778270840086797260, 0.778302235550824230, +0.778333629069095640, 0.778365020641533460, 0.778396410268058280, 0.778427797948591960, 0.778459183683056220, 0.778490567471372460, 0.778521949313462410, 0.778553329209247360, +0.778584707158649030, 0.778616083161589480, 0.778647457217989110, 0.778678829327770220, 0.778710199490854180, 0.778741567707162630, 0.778772933976617180, 0.778804298299139440, +0.778835660674650930, 0.778867021103073820, 0.778898379584328500, 0.778929736118337380, 0.778961090705021840, 0.778992443344303620, 0.779023794036104220, 0.779055142780345380, +0.779086489576949370, 0.779117834425836380, 0.779149177326928900, 0.779180518280148450, 0.779211857285416750, 0.779243194342655320, 0.779274529451785990, 0.779305862612730270, +0.779337193825410450, 0.779368523089747130, 0.779399850405662510, 0.779431175773078300, 0.779462499191916010, 0.779493820662097600, 0.779525140183544570, 0.779556457756179320, +0.779587773379922360, 0.779619087054695850, 0.779650398780421750, 0.779681708557021570, 0.779713016384417150, 0.779744322262530210, 0.779775626191282490, 0.779806928170596160, +0.779838228200392060, 0.779869526280592360, 0.779900822411118800, 0.779932116591893210, 0.779963408822837320, 0.779994699103872980, 0.780025987434921800, 0.780057273815906280, +0.780088558246746940, 0.780119840727366290, 0.780151121257685930, 0.780182399837627830, 0.780213676467113700, 0.780244951146065510, 0.780276223874405320, 0.780307494652054180, +0.780338763478934160, 0.780370030354967330, 0.780401295280075400, 0.780432558254180230, 0.780463819277203650, 0.780495078349067510, 0.780526335469694190, 0.780557590639004540, +0.780588843856920960, 0.780620095123365170, 0.780651344438259230, 0.780682591801524880, 0.780713837213084070, 0.780745080672858640, 0.780776322180771090, 0.780807561736742150, +0.780838799340694330, 0.780870034992549480, 0.780901268692229640, 0.780932500439656560, 0.780963730234752180, 0.780994958077439130, 0.781026183967638010, 0.781057407905271560, +0.781088629890261510, 0.781119849922529920, 0.781151068001998630, 0.781182284128589810, 0.781213498302225200, 0.781244710522827400, 0.781275920790317270, 0.781307129104617300, +0.781338335465649570, 0.781369539873335910, 0.781400742327598490, 0.781431942828359260, 0.781463141375540630, 0.781494337969063650, 0.781525532608850830, 0.781556725294824120, +0.781587916026905580, 0.781619104805017280, 0.781650291629081280, 0.781681476499019530, 0.781712659414754540, 0.781743840376207480, 0.781775019383300740, 0.781806196435956500, +0.781837371534096710, 0.781868544677643550, 0.781899715866518960, 0.781930885100645230, 0.781962052379944650, 0.781993217704338490, 0.782024381073749280, 0.782055542488099160, +0.782086701947310110, 0.782117859451304300, 0.782149015000003890, 0.782180168593331500, 0.782211320231208100, 0.782242469913556390, 0.782273617640298570, 0.782304763411356690, +0.782335907226652800, 0.782367049086109210, 0.782398188989648080, 0.782429326937191920, 0.782460462928662000, 0.782491596963980740, 0.782522729043070630, 0.782553859165853630, +0.782584987332252120, 0.782616113542187960, 0.782647237795583650, 0.782678360092361690, 0.782709480432443370, 0.782740598815751310, 0.782771715242207790, 0.782802829711734980, +0.782833942224255060, 0.782865052779690210, 0.782896161377963360, 0.782927268018995590, 0.782958372702709630, 0.782989475429027750, 0.783020576197872130, 0.783051675009165060, +0.783082771862828820, 0.783113866758785690, 0.783144959696958410, 0.783176050677268250, 0.783207139699637840, 0.783238226763989690, 0.783269311870245950, 0.783300395018328930, +0.783331476208160900, 0.783362555439664710, 0.783393632712761630, 0.783424708027374410, 0.783455781383425530, 0.783486852780837070, 0.783517922219531540, 0.783548989699431210, +0.783580055220458370, 0.783611118782535980, 0.783642180385585200, 0.783673240029528980, 0.783704297714289730, 0.783735353439789730, 0.783766407205951250, 0.783797459012696820, +0.783828508859948700, 0.783859556747629860, 0.783890602675661690, 0.783921646643966910, 0.783952688652468030, 0.783983728701087460, 0.784014766789747460, 0.784045802918370670, +0.784076837086879920, 0.784107869295196380, 0.784138899543243340, 0.784169927830942970, 0.784200954158217780, 0.784231978524990270, 0.784263000931182730, 0.784294021376717780, +0.784325039861518250, 0.784356056385505540, 0.784387070948602720, 0.784418083550732280, 0.784449094191816520, 0.784480102871778160, 0.784511109590539490, 0.784542114348023010, +0.784573117144151900, 0.784604117978847330, 0.784635116852032470, 0.784666113763629820, 0.784697108713561910, 0.784728101701751330, 0.784759092728120390, 0.784790081792592240, +0.784821068895088400, 0.784852054035531820, 0.784883037213845220, 0.784914018429950900, 0.784944997683771570, 0.784975974975229860, 0.785006950304248050, 0.785037923670749540, +0.785068895074655600, 0.785099864515889420, 0.785130831994373610, 0.785161797510030680, 0.785192761062783350, 0.785223722652554020, 0.785254682279265980, 0.785285639942840620, +0.785316595643201330, 0.785347549380270400, 0.785378501153970570, 0.785409450964224540, 0.785440398810954950, 0.785471344694084310, 0.785502288613535880, 0.785533230569231080, +0.785564170561093290, 0.785595108589045130, 0.785626044653009110, 0.785656978752907960, 0.785687910888664410, 0.785718841060201070, 0.785749769267441220, 0.785780695510306380, +0.785811619788719720, 0.785842542102604070, 0.785873462451882050, 0.785904380836476400, 0.785935297256309840, 0.785966211711305540, 0.785997124201385120, 0.786028034726471980, +0.786058943286488620, 0.786089849881357990, 0.786120754511002830, 0.786151657175345630, 0.786182557874309350, 0.786213456607817160, 0.786244353375790910, 0.786275248178153750, +0.786306141014828320, 0.786337031885737670, 0.786367920790804420, 0.786398807729951410, 0.786429692703101260, 0.786460575710177580, 0.786491456751101770, 0.786522335825797450, +0.786553212934187230, 0.786584088076193950, 0.786614961251740460, 0.786645832460749590, 0.786676701703144630, 0.786707568978847420, 0.786738434287781230, 0.786769297629869020, +0.786800159005033640, 0.786831018413197690, 0.786861875854284350, 0.786892731328216240, 0.786923584834916870, 0.786954436374307950, 0.786985285946313010, 0.787016133550854760, +0.787046979187856270, 0.787077822857240260, 0.787108664558929690, 0.787139504292848070, 0.787170342058917120, 0.787201177857060340, 0.787232011687200580, 0.787262843549260790, +0.787293673443163920, 0.787324501368832810, 0.787355327326190510, 0.787386151315160430, 0.787416973335664410, 0.787447793387625940, 0.787478611470967980, 0.787509427585613490, +0.787540241731485510, 0.787571053908506900, 0.787601864116600600, 0.787632672355690230, 0.787663478625697520, 0.787694282926546310, 0.787725085258159210, 0.787755885620459510, +0.787786684013370040, 0.787817480436813990, 0.787848274890714630, 0.787879067374994020, 0.787909857889575900, 0.787940646434383000, 0.787971433009338580, 0.788002217614365510, +0.788033000249386940, 0.788063780914325830, 0.788094559609105790, 0.788125336333648900, 0.788156111087878640, 0.788186883871717980, 0.788217654685090310, 0.788248423527918350, +0.788279190400125400, 0.788309955301634950, 0.788340718232369180, 0.788371479192251590, 0.788402238181205250, 0.788432995199153330, 0.788463750246018890, 0.788494503321725100, +0.788525254426195030, 0.788556003559352400, 0.788586750721119280, 0.788617495911419280, 0.788648239130175450, 0.788678980377310990, 0.788709719652749160, 0.788740456956413040, +0.788771192288225790, 0.788801925648111020, 0.788832657035990930, 0.788863386451789220, 0.788894113895429070, 0.788924839366833550, 0.788955562865925940, 0.788986284392629520, +0.789017003946867910, 0.789047721528563170, 0.789078437137639140, 0.789109150774019110, 0.789139862437626130, 0.789170572128383490, 0.789201279846214470, 0.789231985591042130, +0.789262689362790540, 0.789293391161381530, 0.789324090986739170, 0.789354788838786510, 0.789385484717446850, 0.789416178622643570, 0.789446870554299740, 0.789477560512338860, +0.789508248496684550, 0.789538934507259090, 0.789569618543986220, 0.789600300606789430, 0.789630980695591790, 0.789661658810316690, 0.789692334950887530, 0.789723009117228040, +0.789753681309260490, 0.789784351526908730, 0.789815019770096050, 0.789845686038745830, 0.789876350332781470, 0.789907012652126150, 0.789937672996703370, 0.789968331366436960, +0.789998987761249110, 0.790029642181063750, 0.790060294625804400, 0.790090945095394240, 0.790121593589756750, 0.790152240108815240, 0.790182884652493760, 0.790213527220714470, +0.790244167813401340, 0.790274806430477870, 0.790305443071867230, 0.790336077737493150, 0.790366710427278800, 0.790397341141147680, 0.790427969879023750, 0.790458596640829290, +0.790489221426488480, 0.790519844235924470, 0.790550465069060900, 0.790581083925821270, 0.790611700806128860, 0.790642315709907170, 0.790672928637080160, 0.790703539587570450, +0.790734148561301750, 0.790764755558197810, 0.790795360578181890, 0.790825963621177630, 0.790856564687108410, 0.790887163775898290, 0.790917760887469790, 0.790948356021746850, +0.790978949178653080, 0.791009540358111880, 0.791040129560046880, 0.791070716784381460, 0.791101302031039340, 0.791131885299944490, 0.791162466591019410, 0.791193045904188040, +0.791223623239374120, 0.791254198596501150, 0.791284771975492740, 0.791315343376272410, 0.791345912798763650, 0.791376480242890650, 0.791407045708575900, 0.791437609195743570, +0.791468170704317190, 0.791498730234220460, 0.791529287785376790, 0.791559843357710010, 0.791590396951144080, 0.791620948565601610, 0.791651498201006890, 0.791682045857283300, +0.791712591534354690, 0.791743135232144570, 0.791773676950576540, 0.791804216689574350, 0.791834754449062260, 0.791865290228962570, 0.791895824029199780, 0.791926355849697390, +0.791956885690379140, 0.791987413551168640, 0.792017939431989610, 0.792048463332766350, 0.792078985253421350, 0.792109505193878790, 0.792140023154062510, 0.792170539133896230, +0.792201053133303580, 0.792231565152208270, 0.792262075190534150, 0.792292583248205280, 0.792323089325144390, 0.792353593421275870, 0.792384095536523340, 0.792414595670810520, +0.792445093824061250, 0.792475589996199270, 0.792506084187148300, 0.792536576396832610, 0.792567066625174950, 0.792597554872099600, 0.792628041137530490, 0.792658525421391150, +0.792689007723605620, 0.792719488044097420, 0.792749966382791160, 0.792780442739609460, 0.792810917114476490, 0.792841389507316420, 0.792871859918052760, 0.792902328346609450, +0.792932794792910340, 0.792963259256879270, 0.792993721738440630, 0.793024182237517030, 0.793054640754033090, 0.793085097287912430, 0.793115551839079110, 0.793146004407456860, +0.793176454992969630, 0.793206903595541360, 0.793237350215096230, 0.793267794851557180, 0.793298237504848740, 0.793328678174894610, 0.793359116861618860, 0.793389553564945340, +0.793419988284797870, 0.793450421021100970, 0.793480851773777470, 0.793511280542751880, 0.793541707327948150, 0.793572132129290010, 0.793602554946701620, 0.793632975780106830, +0.793663394629429590, 0.793693811494594500, 0.793724226375524200, 0.793754639272143400, 0.793785050184376060, 0.793815459112146020, 0.793845866055377320, 0.793876271013993940, +0.793906673987920470, 0.793937074977079770, 0.793967473981396440, 0.793997871000794330, 0.794028266035197610, 0.794058659084530220, 0.794089050148716110, 0.794119439227679360, +0.794149826321344680, 0.794180211429634800, 0.794210594552474450, 0.794240975689787580, 0.794271354841498240, 0.794301732007530630, 0.794332107187808560, 0.794362480382256320, +0.794392851590798310, 0.794423220813357700, 0.794453588049858990, 0.794483953300226360, 0.794514316564383870, 0.794544677842255580, 0.794575037133765540, 0.794605394438838490, +0.794635749757397480, 0.794666103089366920, 0.794696454434671300, 0.794726803793234460, 0.794757151164980580, 0.794787496549833830, 0.794817839947718370, 0.794848181358558840, +0.794878520782278280, 0.794908858218801420, 0.794939193668052440, 0.794969527129955500, 0.794999858604434670, 0.795030188091414350, 0.795060515590818360, 0.795090841102571780, +0.795121164626597430, 0.795151486162820280, 0.795181805711164370, 0.795212123271553880, 0.795242438843913210, 0.795272752428166420, 0.795303064024238230, 0.795333373632051810, +0.795363681251532010, 0.795393986882602990, 0.795424290525189040, 0.795454592179214330, 0.795484891844603140, 0.795515189521279750, 0.795545485209168900, 0.795575778908193860, +0.795606070618279260, 0.795636360339349590, 0.795666648071328920, 0.795696933814141750, 0.795727217567712140, 0.795757499331965050, 0.795787779106823740, 0.795818056892212860, +0.795848332688056990, 0.795878606494280110, 0.795908878310806810, 0.795939148137561390, 0.795969415974468020, 0.795999681821451640, 0.796029945678435550, 0.796060207545344570, +0.796090467422103100, 0.796120725308635420, 0.796150981204865940, 0.796181235110719030, 0.796211487026118990, 0.796241736950990760, 0.796271984885257740, 0.796302230828844660, +0.796332474781676130, 0.796362716743676310, 0.796392956714769730, 0.796423194694880760, 0.796453430683934260, 0.796483664681853720, 0.796513896688564090, 0.796544126703989660, +0.796574354728054820, 0.796604580760684190, 0.796634804801802150, 0.796665026851333000, 0.796695246909201900, 0.796725464975332030, 0.796755681049648670, 0.796785895132075980, +0.796816107222538590, 0.796846317320960900, 0.796876525427267390, 0.796906731541382700, 0.796936935663231650, 0.796967137792737650, 0.796997337929825860, 0.797027536074420780, +0.797057732226446820, 0.797087926385828480, 0.797118118552490370, 0.797148308726357560, 0.797178496907353320, 0.797208683095402940, 0.797238867290430810, 0.797269049492361550, +0.797299229701119660, 0.797329407916629650, 0.797359584138816140, 0.797389758367604170, 0.797419930602917380, 0.797450100844680600, 0.797480269092818660, 0.797510435347256070, +0.797540599607917340, 0.797570761874727200, 0.797600922147610580, 0.797631080426491220, 0.797661236711294070, 0.797691391001943860, 0.797721543298365200, 0.797751693600482700, +0.797781841908220880, 0.797811988221504450, 0.797842132540258710, 0.797872274864407040, 0.797902415193874610, 0.797932553528586270, 0.797962689868466410, 0.797992824213439980, +0.798022956563431360, 0.798053086918365410, 0.798083215278167280, 0.798113341642760600, 0.798143466012070530, 0.798173588386021820, 0.798203708764539050, 0.798233827147547090, +0.798263943534970540, 0.798294057926734690, 0.798324170322763150, 0.798354280722981200, 0.798384389127313470, 0.798414495535684890, 0.798444599948019970, 0.798474702364243560, +0.798504802784280490, 0.798534901208055810, 0.798564997635493490, 0.798595092066518570, 0.798625184501055910, 0.798655274939030320, 0.798685363380366550, 0.798715449824989430, +0.798745534272824130, 0.798775616723794490, 0.798805697177825790, 0.798835775634842870, 0.798865852094770570, 0.798895926557533500, 0.798925999023056720, 0.798956069491264960, +0.798986137962083510, 0.799016204435436190, 0.799046268911248300, 0.799076331389444890, 0.799106391869950580, 0.799136450352690210, 0.799166506837588830, 0.799196561324571060, +0.799226613813562530, 0.799256664304486830, 0.799286712797269590, 0.799316759291835540, 0.799346803788109520, 0.799376846286016460, 0.799406886785481440, 0.799436925286429620, +0.799466961788785070, 0.799496996292472950, 0.799527028797418440, 0.799557059303546370, 0.799587087810781580, 0.799617114319049140, 0.799647138828273870, 0.799677161338381290, +0.799707181849295350, 0.799737200360941420, 0.799767216873244480, 0.799797231386129460, 0.799827243899521310, 0.799857254413345210, 0.799887262927525880, 0.799917269441988930, +0.799947273956658320, 0.799977276471459440, 0.800007276986317350, 0.800037275501157220, 0.800067272015903770, 0.800097266530482190, 0.800127259044817960, 0.800157249558835160, +0.800187238072459060, 0.800217224585614950, 0.800247209098227770, 0.800277191610222590, 0.800307172121524470, 0.800337150632058240, 0.800367127141749850, 0.800397101650523020, +0.800427074158303500, 0.800457044665016220, 0.800487013170586350, 0.800516979674939070, 0.800546944177999210, 0.800576906679692500, 0.800606867179943120, 0.800636825678676440, +0.800666782175817770, 0.800696736671292040, 0.800726689165024650, 0.800756639656940440, 0.800786588146964570, 0.800816534635022890, 0.800846479121039230, 0.800876421604939440, +0.800906362086648560, 0.800936300566091770, 0.800966237043194250, 0.800996171517881160, 0.801026103990077680, 0.801056034459709410, 0.801085962926700420, 0.801115889390976670, +0.801145813852463200, 0.801175736311085070, 0.801205656766767690, 0.801235575219436220, 0.801265491669016280, 0.801295406115432040, 0.801325318558609330, 0.801355228998473330, +0.801385137434949210, 0.801415043867962360, 0.801444948297437840, 0.801474850723300940, 0.801504751145477370, 0.801534649563891530, 0.801564545978468930, 0.801594440389135080, +0.801624332795815020, 0.801654223198434270, 0.801684111596917880, 0.801713997991191140, 0.801743882381180110, 0.801773764766808730, 0.801803645148002950, 0.801833523524688060, +0.801863399896789340, 0.801893274264232180, 0.801923146626941750, 0.801953016984844000, 0.801982885337863220, 0.802012751685925230, 0.802042616028955440, 0.802072478366878890, +0.802102338699621330, 0.802132197027107920, 0.802162053349263940, 0.802191907666015340, 0.802221759977286510, 0.802251610283003290, 0.802281458583090970, 0.802311304877475040, +0.802341149166080900, 0.802370991448833840, 0.802400831725659790, 0.802430669996483160, 0.802460506261229890, 0.802490340519825260, 0.802520172772194900, 0.802550003018264070, +0.802579831257958180, 0.802609657491202830, 0.802639481717923760, 0.802669303938045480, 0.802699124151493910, 0.802728942358194590, 0.802758758558072880, 0.802788572751054310, +0.802818384937064260, 0.802848195116028340, 0.802878003287872400, 0.802907809452520830, 0.802937613609899900, 0.802967415759934800, 0.802997215902551240, 0.803027014037674620, +0.803056810165230450, 0.803086604285144890, 0.803116396397342220, 0.803146186501748520, 0.803175974598289380, 0.803205760686890200, 0.803235544767476830, 0.803265326839974430, +0.803295106904308830, 0.803324884960405880, 0.803354661008190310, 0.803384435047587940, 0.803414207078524620, 0.803443977100925630, 0.803473745114716810, 0.803503511119823650, +0.803533275116171670, 0.803563037103687040, 0.803592797082294250, 0.803622555051919480, 0.803652311012488350, 0.803682064963926470, 0.803711816906159450, 0.803741566839112800, +0.803771314762712800, 0.803801060676883950, 0.803830804581552540, 0.803860546476644070, 0.803890286362084150, 0.803920024237798620, 0.803949760103713000, 0.803979493959752990, +0.804009225805844770, 0.804038955641912860, 0.804068683467883740, 0.804098409283682810, 0.804128133089235810, 0.804157854884468560, 0.804187574669306680, 0.804217292443676350, +0.804247008207502280, 0.804276721960710650, 0.804306433703227300, 0.804336143434977830, 0.804365851155887880, 0.804395556865883490, 0.804425260564890050, 0.804454962252834080, +0.804484661929640190, 0.804514359595234650, 0.804544055249543090, 0.804573748892491560, 0.804603440524005560, 0.804633130144010940, 0.804662817752433530, 0.804692503349199620, +0.804722186934233920, 0.804751868507462720, 0.804781548068811860, 0.804811225618207170, 0.804840901155574380, 0.804870574680839330, 0.804900246193928410, 0.804929915694766350, +0.804959583183279430, 0.804989248659393590, 0.805018912123034670, 0.805048573574128400, 0.805078233012600840, 0.805107890438377490, 0.805137545851385080, 0.805167199251548230, +0.805196850638793430, 0.805226500013046410, 0.805256147374233230, 0.805285792722279630, 0.805315436057111640, 0.805345077378654910, 0.805374716686836130, 0.805404353981580060, +0.805433989262812950, 0.805463622530461000, 0.805493253784449910, 0.805522883024705760, 0.805552510251154370, 0.805582135463722260, 0.805611758662334250, 0.805641379846916860, +0.805670999017396030, 0.805700616173697700, 0.805730231315747720, 0.805759844443472260, 0.805789455556797260, 0.805819064655649010, 0.805848671739952670, 0.805878276809634640, +0.805907879864620870, 0.805937480904837410, 0.805967079930210330, 0.805996676940665460, 0.806026271936129410, 0.806055864916527250, 0.806085455881785370, 0.806115044831829830, +0.806144631766586680, 0.806174216685981990, 0.806203799589941710, 0.806233380478391990, 0.806262959351259360, 0.806292536208468750, 0.806322111049946780, 0.806351683875619510, +0.806381254685413110, 0.806410823479253640, 0.806440390257066930, 0.806469955018779380, 0.806499517764317500, 0.806529078493606110, 0.806558637206572170, 0.806588193903141630, +0.806617748583240530, 0.806647301246795180, 0.806676851893731510, 0.806706400523976240, 0.806735947137454450, 0.806765491734092730, 0.806795034313817380, 0.806824574876554350, +0.806854113422230010, 0.806883649950770220, 0.806913184462101470, 0.806942716956150160, 0.806972247432841570, 0.807001775892102420, 0.807031302333858780, 0.807060826758036810, +0.807090349164562900, 0.807119869553363120, 0.807149387924364080, 0.807178904277491170, 0.807208418612670900, 0.807237930929829650, 0.807267441228893490, 0.807296949509788810, +0.807326455772441660, 0.807355960016778450, 0.807385462242725890, 0.807414962450209160, 0.807444460639154980, 0.807473956809489630, 0.807503450961139400, 0.807532943094030560, +0.807562433208089290, 0.807591921303241980, 0.807621407379415460, 0.807650891436534900, 0.807680373474527040, 0.807709853493318250, 0.807739331492834830, 0.807768807473003060, +0.807798281433749320, 0.807827753375000350, 0.807857223296681530, 0.807886691198719700, 0.807916157081041030, 0.807945620943572030, 0.807975082786238970, 0.808004542608968150, +0.808034000411686050, 0.808063456194319410, 0.808092909956793730, 0.808122361699035620, 0.808151811420971700, 0.808181259122528140, 0.808210704803631550, 0.808240148464208110, +0.808269590104184420, 0.808299029723487220, 0.808328467322041890, 0.808357902899775380, 0.808387336456614200, 0.808416767992484630, 0.808446197507313170, 0.808475625001026100, +0.808505050473550590, 0.808534473924811930, 0.808563895354737050, 0.808593314763252470, 0.808622732150284570, 0.808652147515759870, 0.808681560859604850, 0.808710972181745810, +0.808740381482109920, 0.808769788760622550, 0.808799194017210790, 0.808828597251800900, 0.808857998464319610, 0.808887397654693310, 0.808916794822848510, 0.808946189968712260, +0.808975583092209960, 0.809004974193268780, 0.809034363271815100, 0.809063750327775550, 0.809093135361076520, 0.809122518371644730, 0.809151899359406680, 0.809181278324289430, +0.809210655266218380, 0.809240030185120700, 0.809269403080922990, 0.809298773953551760, 0.809328142802933530, 0.809357509628995000, 0.809386874431662800, 0.809416237210863750, +0.809445597966523710, 0.809474956698569610, 0.809504313406928190, 0.809533668091525940, 0.809563020752289480, 0.809592371389145530, 0.809621720002021150, 0.809651066590841960, +0.809680411155535130, 0.809709753696027160, 0.809739094212244880, 0.809768432704114920, 0.809797769171563870, 0.809827103614518260, 0.809856436032905580, 0.809885766426651220, +0.809915094795682470, 0.809944421139925930, 0.809973745459308340, 0.810003067753756410, 0.810032388023196770, 0.810061706267556250, 0.810091022486761900, 0.810120336680739570, +0.810149648849416320, 0.810178958992718970, 0.810208267110574140, 0.810237573202908790, 0.810266877269649410, 0.810296179310723400, 0.810325479326056360, 0.810354777315575700, +0.810384073279208030, 0.810413367216880290, 0.810442659128519090, 0.810471949014051170, 0.810501236873403360, 0.810530522706503050, 0.810559806513275970, 0.810589088293649280, +0.810618368047549830, 0.810647645774904560, 0.810676921475640190, 0.810706195149683450, 0.810735466796961730, 0.810764736417400880, 0.810794004010928160, 0.810823269577470420, +0.810852533116954490, 0.810881794629307320, 0.810911054114455520, 0.810940311572326160, 0.810969567002846610, 0.810998820405942510, 0.811028071781541460, 0.811057321129570190, +0.811086568449955530, 0.811115813742624650, 0.811145057007504060, 0.811174298244520920, 0.811203537453602520, 0.811232774634674690, 0.811262009787664940, 0.811291242912500320, +0.811320474009107450, 0.811349703077413390, 0.811378930117345190, 0.811408155128830020, 0.811437378111794060, 0.811466599066164700, 0.811495817991868760, 0.811525034888833210, +0.811554249756985200, 0.811583462596251470, 0.811612673406559180, 0.811641882187835620, 0.811671088940006950, 0.811700293663000450, 0.811729496356743300, 0.811758697021162320, +0.811787895656184700, 0.811817092261737260, 0.811846286837747180, 0.811875479384141840, 0.811904669900847310, 0.811933858387791090, 0.811963044844900230, 0.811992229272101680, +0.812021411669322620, 0.812050592036489990, 0.812079770373531520, 0.812108946680373030, 0.812138120956942160, 0.812167293203166050, 0.812196463418971560, 0.812225631604286070, +0.812254797759036420, 0.812283961883149770, 0.812313123976553750, 0.812342284039174410, 0.812371442070939360, 0.812400598071775780, 0.812429752041610610, 0.812458903980371130, +0.812488053887984290, 0.812517201764377920, 0.812546347609477970, 0.812575491423212170, 0.812604633205507690, 0.812633772956291580, 0.812662910675491010, 0.812692046363033270, +0.812721180018845300, 0.812750311642854940, 0.812779441234988350, 0.812808568795173050, 0.812837694323336410, 0.812866817819405510, 0.812895939283307500, 0.812925058714969670, +0.812954176114319300, 0.812983291481283900, 0.813012404815789740, 0.813041516117764650, 0.813070625387135700, 0.813099732623830170, 0.813128837827775450, 0.813157940998898490, +0.813187042137127230, 0.813216141242387950, 0.813245238314608150, 0.813274333353715350, 0.813303426359636710, 0.813332517332299500, 0.813361606271631010, 0.813390693177558520, +0.813419778050009760, 0.813448860888911000, 0.813477941694190190, 0.813507020465774500, 0.813536097203591210, 0.813565171907567720, 0.813594244577631300, 0.813623315213709230, +0.813652383815729460, 0.813681450383618170, 0.813710514917303280, 0.813739577416712100, 0.813768637881771890, 0.813797696312410170, 0.813826752708554200, 0.813855807070131940, +0.813884859397069560, 0.813913909689295000, 0.813942957946735660, 0.813972004169319030, 0.814001048356972290, 0.814030090509623050, 0.814059130627198480, 0.814088168709626640, +0.814117204756833800, 0.814146238768748030, 0.814175270745296610, 0.814204300686407030, 0.814233328592006700, 0.814262354462023110, 0.814291378296384090, 0.814320400095016050, +0.814349419857847150, 0.814378437584804550, 0.814407453275815870, 0.814436466930808620, 0.814465478549710300, 0.814494488132448180, 0.814523495678950330, 0.814552501189143240, +0.814581504662954870, 0.814610506100312830, 0.814639505501144500, 0.814668502865377290, 0.814697498192938910, 0.814726491483756870, 0.814755482737759000, 0.814784471954871910, +0.814813459135023680, 0.814842444278141790, 0.814871427384153860, 0.814900408452987280, 0.814929387484569670, 0.814958364478829190, 0.814987339435692240, 0.815016312355086870, +0.815045283236940810, 0.815074252081181560, 0.815103218887736620, 0.815132183656533620, 0.815161146387500150, 0.815190107080564390, 0.815219065735652840, 0.815248022352693560, +0.815276976931614270, 0.815305929472342590, 0.815334879974806030, 0.815363828438932290, 0.815392774864649450, 0.815421719251884220, 0.815450661600564670, 0.815479601910618520, +0.815508540181973270, 0.815537476414556650, 0.815566410608296490, 0.815595342763120180, 0.815624272878956110, 0.815653200955730790, 0.815682126993372390, 0.815711050991808740, +0.815739972950967560, 0.815768892870776360, 0.815797810751162870, 0.815826726592054910, 0.815855640393380650, 0.815884552155066830, 0.815913461877041610, 0.815942369559232720, +0.815971275201567870, 0.816000178803974800, 0.816029080366381330, 0.816057979888715760, 0.816086877370904570, 0.816115772812876280, 0.816144666214558610, 0.816173557575879170, +0.816202446896765910, 0.816231334177146440, 0.816260219416948710, 0.816289102616100990, 0.816317983774529910, 0.816346862892163850, 0.816375739968930760, 0.816404615004758250, +0.816433487999574160, 0.816462358953306320, 0.816491227865882680, 0.816520094737231420, 0.816548959567279460, 0.816577822355955110, 0.816606683103186180, 0.816635541808900520, +0.816664398473026080, 0.816693253095490570, 0.816722105676222500, 0.816750956215148590, 0.816779804712197350, 0.816808651167296510, 0.816837495580374110, 0.816866337951357990, +0.816895178280175990, 0.816924016566756060, 0.816952852811026590, 0.816981687012914510, 0.817010519172348130, 0.817039349289255480, 0.817068177363564520, 0.817097003395203080, +0.817125827384099110, 0.817154649330181120, 0.817183469233375930, 0.817212287093612160, 0.817241102910817640, 0.817269916684920330, 0.817298728415848270, 0.817327538103529430, +0.817356345747891620, 0.817385151348863470, 0.817413954906372030, 0.817442756420345700, 0.817471555890712410, 0.817500353317400230, 0.817529148700337220, 0.817557942039451310, +0.817586733334670580, 0.817615522585923520, 0.817644309793137070, 0.817673094956239850, 0.817701878075159930, 0.817730659149825350, 0.817759438180164170, 0.817788215166104230, +0.817816990107574360, 0.817845763004501510, 0.817874533856814300, 0.817903302664440670, 0.817932069427308780, 0.817960834145346700, 0.817989596818482600, 0.818018357446644530, +0.818047116029760990, 0.818075872567759270, 0.818104627060567750, 0.818133379508114710, 0.818162129910328220, 0.818190878267136430, 0.818219624578467420, 0.818248368844249340, +0.818277111064410920, 0.818305851238879110, 0.818334589367582740, 0.818363325450449870, 0.818392059487408670, 0.818420791478387310, 0.818449521423314060, 0.818478249322117430, +0.818506975174724700, 0.818535698981064490, 0.818564420741065170, 0.818593140454654590, 0.818621858121761360, 0.818650573742313310, 0.818679287316238960, 0.818707998843466900, +0.818736708323924200, 0.818765415757539810, 0.818794121144241880, 0.818822824483958710, 0.818851525776618460, 0.818880225022149300, 0.818908922220480170, 0.818937617371538140, +0.818966310475252150, 0.818995001531550360, 0.819023690540361060, 0.819052377501612640, 0.819081062415233150, 0.819109745281150990, 0.819138426099294990, 0.819167104869592540, +0.819195781591972150, 0.819224456266362420, 0.819253128892691530, 0.819281799470887860, 0.819310468000879590, 0.819339134482595210, 0.819367798915963560, 0.819396461300911820, +0.819425121637368910, 0.819453779925263250, 0.819482436164523100, 0.819511090355076850, 0.819539742496852910, 0.819568392589780200, 0.819597040633785910, 0.819625686628798980, +0.819654330574747900, 0.819682972471560970, 0.819711612319166670, 0.819740250117493300, 0.819768885866469230, 0.819797519566023540, 0.819826151216083490, 0.819854780816578140, +0.819883408367435780, 0.819912033868584910, 0.819940657319953910, 0.819969278721471300, 0.819997898073065560, 0.820026515374665530, 0.820055130626198720, 0.820083743827594080, +0.820112354978779990, 0.820140964079685180, 0.820169571130237810, 0.820198176130366610, 0.820226779080000410, 0.820255379979066830, 0.820283978827494710, 0.820312575625212760, +0.820341170372149260, 0.820369763068232840, 0.820398353713392090, 0.820426942307555420, 0.820455528850651870, 0.820484113342609070, 0.820512695783355840, 0.820541276172821020, +0.820569854510933010, 0.820598430797620290, 0.820627005032811500, 0.820655577216435670, 0.820684147348420430, 0.820712715428694840, 0.820741281457187500, 0.820769845433826920, +0.820798407358541700, 0.820826967231260470, 0.820855525051911840, 0.820884080820424860, 0.820912634536727250, 0.820941186200747960, 0.820969735812415720, 0.820998283371659250, +0.821026828878406940, 0.821055372332587630, 0.821083913734129920, 0.821112453082962880, 0.821140990379014220, 0.821169525622213130, 0.821198058812488090, 0.821226589949768050, +0.821255119033981410, 0.821283646065057100, 0.821312171042924090, 0.821340693967510190, 0.821369214838744480, 0.821397733656555770, 0.821426250420872810, 0.821454765131624190, +0.821483277788738640, 0.821511788392144780, 0.821540296941772110, 0.821568803437548120, 0.821597307879402110, 0.821625810267262890, 0.821654310601059200, 0.821682808880719650, +0.821711305106173070, 0.821739799277348190, 0.821768291394174400, 0.821796781456579310, 0.821825269464492300, 0.821853755417842110, 0.821882239316557570, 0.821910721160567400, +0.821939200949800440, 0.821967678684185970, 0.821996154363651810, 0.822024627988127250, 0.822053099557541130, 0.822081569071822280, 0.822110036530899420, 0.822138501934701500, +0.822166965283157470, 0.822195426576196380, 0.822223885813746280, 0.822252342995736460, 0.822280798122095760, 0.822309251192753000, 0.822337702207637240, 0.822366151166677220, +0.822394598069802200, 0.822423042916940240, 0.822451485708020740, 0.822479926442972520, 0.822508365121724430, 0.822536801744205400, 0.822565236310344390, 0.822593668820070350, +0.822622099273312650, 0.822650527669999130, 0.822678954010059300, 0.822707378293422000, 0.822735800520016380, 0.822764220689771290, 0.822792638802615550, 0.822821054858478230, +0.822849468857288820, 0.822877880798975280, 0.822906290683466880, 0.822934698510692900, 0.822963104280582060, 0.822991507993063530, 0.823019909648066260, 0.823048309245519640, +0.823076706785351830, 0.823105102267492230, 0.823133495691869780, 0.823161887058413640, 0.823190276367052890, 0.823218663617716340, 0.823247048810333170, 0.823275431944832880, +0.823303813021143420, 0.823332192039194500, 0.823360568998915190, 0.823388943900234320, 0.823417316743081160, 0.823445687527384670, 0.823474056253074460, 0.823502422920078690, +0.823530787528326760, 0.823559150077747940, 0.823587510568271170, 0.823615868999825640, 0.823644225372340500, 0.823672579685744810, 0.823700931939968070, 0.823729282134938570, +0.823757630270585790, 0.823785976346839030, 0.823814320363627340, 0.823842662320879770, 0.823871002218525610, 0.823899340056493900, 0.823927675834714270, 0.823956009553115100, +0.823984341211625780, 0.824012670810175710, 0.824040998348693930, 0.824069323827109620, 0.824097647245352060, 0.824125968603350860, 0.824154287901034180, 0.824182605138331860, +0.824210920315172960, 0.824239233431486750, 0.824267544487202520, 0.824295853482249430, 0.824324160416556650, 0.824352465290054020, 0.824380768102669690, 0.824409068854333520, +0.824437367544974650, 0.824465664174522270, 0.824493958742905870, 0.824522251250054410, 0.824550541695897480, 0.824578830080364590, 0.824607116403384130, 0.824635400664885940, +0.824663682864799190, 0.824691963003053250, 0.824720241079577420, 0.824748517094300970, 0.824776791047153850, 0.824805062938064100, 0.824833332766961690, 0.824861600533776000, +0.824889866238436300, 0.824918129880871990, 0.824946391461012340, 0.824974650978786640, 0.825002908434124830, 0.825031163826955290, 0.825059417157207760, 0.825087668424811850, +0.825115917629696600, 0.825144164771791640, 0.825172409851026250, 0.825200652867330350, 0.825228893820632250, 0.825257132710861980, 0.825285369537948840, 0.825313604301822320, +0.825341837002411820, 0.825370067639646710, 0.825398296213456390, 0.825426522723770820, 0.825454747170518480, 0.825482969553629210, 0.825511189873032620, 0.825539408128658000, +0.825567624320434850, 0.825595838448292650, 0.825624050512160810, 0.825652260511969490, 0.825680468447646860, 0.825708674319123090, 0.825736878126327680, 0.825765079869190120, +0.825793279547639810, 0.825821477161606250, 0.825849672711019500, 0.825877866195808160, 0.825906057615902080, 0.825934246971230860, 0.825962434261724110, 0.825990619487311120, +0.826018802647921710, 0.826046983743485290, 0.826075162773931890, 0.826103339739190030, 0.826131514639189880, 0.826159687473860930, 0.826187858243132790, 0.826216026946934860, +0.826244193585196960, 0.826272358157848610, 0.826300520664819850, 0.826328681106039300, 0.826356839481437010, 0.826384995790942710, 0.826413150034485790, 0.826441302211996080, +0.826469452323403080, 0.826497600368636950, 0.826525746347626320, 0.826553890260301350, 0.826582032106591650, 0.826610171886426940, 0.826638309599736720, 0.826666445246450720, +0.826694578826498550, 0.826722710339810480, 0.826750839786315250, 0.826778967165942790, 0.826807092478622940, 0.826835215724285310, 0.826863336902859740, 0.826891456014275830, +0.826919573058463750, 0.826947688035352120, 0.826975800944871440, 0.827003911786951210, 0.827032020561521140, 0.827060127268511080, 0.827088231907850640, 0.827116334479469640, +0.827144434983298370, 0.827172533419265440, 0.827200629787301240, 0.827228724087335500, 0.827256816319297820, 0.827284906483118140, 0.827312994578726310, 0.827341080606051830, +0.827369164565025290, 0.827397246455575220, 0.827425326277632100, 0.827453404031125660, 0.827481479715985730, 0.827509553332142040, 0.827537624879524540, 0.827565694358063380, +0.827593761767687620, 0.827621827108327320, 0.827649890379912550, 0.827677951582373010, 0.827706010715638540, 0.827734067779639090, 0.827762122774304500, 0.827790175699565140, +0.827818226555349760, 0.827846275341588830, 0.827874322058212210, 0.827902366705149830, 0.827930409282331530, 0.827958449789687130, 0.827986488227146710, 0.828014524594640420, +0.828042558892097440, 0.828070591119448030, 0.828098621276622150, 0.828126649363549740, 0.828154675380160630, 0.828182699326384890, 0.828210721202153000, 0.828238741007393700, +0.828266758742037480, 0.828294774406014400, 0.828322787999254520, 0.828350799521687550, 0.828378808973243560, 0.828406816353852600, 0.828434821663445060, 0.828462824901950000, +0.828490826069297910, 0.828518825165418750, 0.828546822190242450, 0.828574817143699180, 0.828602810025718780, 0.828630800836231860, 0.828658789575167590, 0.828686776242456240, +0.828714760838027860, 0.828742743361812750, 0.828770723813740730, 0.828798702193741850, 0.828826678501746180, 0.828854652737684440, 0.828882624901485450, 0.828910594993079950, +0.828938563012397990, 0.828966528959369510, 0.828994492833924790, 0.829022454635993890, 0.829050414365506750, 0.829078372022394210, 0.829106327606585090, 0.829134281118010240, +0.829162232556599710, 0.829190181922283550, 0.829218129214991940, 0.829246074434655030, 0.829274017581203340, 0.829301958654566240, 0.829329897654674130, 0.829357834581457400, +0.829385769434845990, 0.829413702214770180, 0.829441632921160130, 0.829469561553945910, 0.829497488113058350, 0.829525412598426600, 0.829553335009981300, 0.829581255347652700, +0.829609173611370880, 0.829637089801066210, 0.829665003916668750, 0.829692915958108790, 0.829720825925317150, 0.829748733818222780, 0.829776639636756630, 0.829804543380848970, +0.829832445050429860, 0.829860344645429680, 0.829888242165778610, 0.829916137611407480, 0.829944030982245450, 0.829971922278223360, 0.829999811499271490, 0.830027698645320000, +0.830055583716299390, 0.830083466712139730, 0.830111347632771500, 0.830139226478125320, 0.830167103248130590, 0.830194977942718020, 0.830222850561818100, 0.830250721105361130, +0.830278589573277270, 0.830306455965496900, 0.830334320281950980, 0.830362182522568660, 0.830390042687281000, 0.830417900776018070, 0.830445756788710580, 0.830473610725288580, +0.830501462585682580, 0.830529312369822970, 0.830557160077640470, 0.830585005709064570, 0.830612849264026230, 0.830640690742455830, 0.830668530144283660, 0.830696367469440090, +0.830724202717855630, 0.830752035889460670, 0.830779866984186150, 0.830807696001961470, 0.830835522942717450, 0.830863347806384710, 0.830891170592893640, 0.830918991302174610, +0.830946809934158040, 0.830974626488774960, 0.831002440965954880, 0.831030253365628640, 0.831058063687726830, 0.831085871932179750, 0.831113678098918120, 0.831141482187872200, +0.831169284198972620, 0.831197084132150320, 0.831224881987334800, 0.831252677764457100, 0.831280471463447750, 0.831308263084237110, 0.831336052626755920, 0.831363840090934560, +0.831391625476703530, 0.831419408783994010, 0.831447190012735480, 0.831474969162858900, 0.831502746234294990, 0.831530521226974130, 0.831558294140827050, 0.831586064975784130, +0.831613833731776660, 0.831641600408734030, 0.831669365006587390, 0.831697127525267370, 0.831724887964704560, 0.831752646324829480, 0.831780402605572840, 0.831808156806865150, +0.831835908928637570, 0.831863658970819820, 0.831891406933342740, 0.831919152816137260, 0.831946896619133900, 0.831974638342263260, 0.832002377985456070, 0.832030115548643370, +0.832057851031754890, 0.832085584434721800, 0.832113315757474830, 0.832141044999944460, 0.832168772162061530, 0.832196497243756660, 0.832224220244960570, 0.832251941165604410, +0.832279660005617820, 0.832307376764932160, 0.832335091443478060, 0.832362804041186230, 0.832390514557987400, 0.832418222993812300, 0.832445929348591520, 0.832473633622256570, +0.832501335814736950, 0.832529035925964060, 0.832556733955868490, 0.832584429904381080, 0.832612123771432680, 0.832639815556953990, 0.832667505260876180, 0.832695192883129100, +0.832722878423644120, 0.832750561882351860, 0.832778243259183260, 0.832805922554069040, 0.832833599766939940, 0.832861274897726990, 0.832888947946361260, 0.832916618912772690, +0.832944287796892450, 0.832971954598651590, 0.832999619317980830, 0.833027281954811130, 0.833054942509073080, 0.833082600980698200, 0.833110257369616410, 0.833137911675758900, +0.833165563899056600, 0.833193214039440360, 0.833220862096841210, 0.833248508071189780, 0.833276151962417110, 0.833303793770454600, 0.833331433495232090, 0.833359071136681060, +0.833386706694732250, 0.833414340169316700, 0.833441971560365370, 0.833469600867809080, 0.833497228091578670, 0.833524853231605740, 0.833552476287820250, 0.833580097260153590, +0.833607716148536570, 0.833635332952900380, 0.833662947673175840, 0.833690560309293890, 0.833718170861186050, 0.833745779328782240, 0.833773385712013980, 0.833800990010812320, +0.833828592225108190, 0.833856192354832550, 0.833883790399916450, 0.833911386360290830, 0.833938980235887310, 0.833966572026635710, 0.833994161732467880, 0.834021749353314520, +0.834049334889106710, 0.834076918339775710, 0.834104499705252360, 0.834132078985467820, 0.834159656180353480, 0.834187231289839510, 0.834214804313857530, 0.834242375252338460, +0.834269944105213490, 0.834297510872413770, 0.834325075553870140, 0.834352638149514330, 0.834380198659276480, 0.834407757083088120, 0.834435313420880290, 0.834462867672584260, +0.834490419838131100, 0.834517969917451750, 0.834545517910477600, 0.834573063817140140, 0.834600607637369430, 0.834628149371097310, 0.834655689018254710, 0.834683226578773030, +0.834710762052583210, 0.834738295439616420, 0.834765826739804480, 0.834793355953077460, 0.834820883079366970, 0.834848408118604390, 0.834875931070720670, 0.834903451935647300, +0.834930970713315120, 0.834958487403655640, 0.834986002006600340, 0.835013514522079610, 0.835041024950025080, 0.835068533290367900, 0.835096039543039460, 0.835123543707970930, +0.835151045785093580, 0.835178545774338590, 0.835206043675637670, 0.835233539488921210, 0.835261033214120820, 0.835288524851167890, 0.835316014399993700, 0.835343501860529410, +0.835370987232706420, 0.835398470516456440, 0.835425951711709750, 0.835453430818398290, 0.835480907836453120, 0.835508382765805750, 0.835535855606387430, 0.835563326358129470, +0.835590795020963120, 0.835618261594820330, 0.835645726079631390, 0.835673188475328230, 0.835700648781841910, 0.835728106999104160, 0.835755563127046020, 0.835783017165599000, +0.835810469114694480, 0.835837918974264180, 0.835865366744238720, 0.835892812424549710, 0.835920256015128760, 0.835947697515907140, 0.835975136926816240, 0.836002574247787570, +0.836030009478752940, 0.836057442619642770, 0.836084873670388970, 0.836112302630923070, 0.836139729501176430, 0.836167154281080350, 0.836194576970566430, 0.836221997569566060, +0.836249416078011290, 0.836276832495832290, 0.836304246822961340, 0.836331659059329820, 0.836359069204869020, 0.836386477259510650, 0.836413883223186110, 0.836441287095827210, +0.836468688877364700, 0.836496088567730500, 0.836523486166856010, 0.836550881674672840, 0.836578275091112490, 0.836605666416106340, 0.836633055649586120, 0.836660442791483770, +0.836687827841729790, 0.836715210800256240, 0.836742591666994720, 0.836769970441876620, 0.836797347124833670, 0.836824721715797250, 0.836852094214699080, 0.836879464621471230, +0.836906832936044180, 0.836934199158350100, 0.836961563288320390, 0.836988925325886870, 0.837016285270981040, 0.837043643123534520, 0.837070998883479240, 0.837098352550746160, +0.837125704125267100, 0.837153053606973780, 0.837180400995797820, 0.837207746291670940, 0.837235089494524630, 0.837262430604290510, 0.837289769620900960, 0.837317106544286370, +0.837344441374379130, 0.837371774111110740, 0.837399104754412930, 0.837426433304217290, 0.837453759760455550, 0.837481084123059550, 0.837508406391961220, 0.837535726567091410, +0.837563044648382270, 0.837590360635765530, 0.837617674529172910, 0.837644986328536120, 0.837672296033786900, 0.837699603644857290, 0.837726909161678250, 0.837754212584181920, +0.837781513912300160, 0.837808813145964560, 0.837836110285106850, 0.837863405329658970, 0.837890698279552540, 0.837917989134719820, 0.837945277895091660, 0.837972564560600320, +0.837999849131177530, 0.838027131606755130, 0.838054411987264940, 0.838081690272638680, 0.838108966462808750, 0.838136240557705860, 0.838163512557262400, 0.838190782461410100, +0.838218050270080890, 0.838245315983206510, 0.838272579600718880, 0.838299841122549850, 0.838327100548631580, 0.838354357878895120, 0.838381613113272860, 0.838408866251696530, +0.838436117294097950, 0.838463366240409070, 0.838490613090561940, 0.838517857844488070, 0.838545100502120170, 0.838572341063389070, 0.838599579528227060, 0.838626815896566070, +0.838654050168338050, 0.838681282343474940, 0.838708512421908580, 0.838735740403571460, 0.838762966288394530, 0.838790190076310060, 0.838817411767250220, 0.838844631361146840, +0.838871848857931870, 0.838899064257537350, 0.838926277559895020, 0.838953488764937580, 0.838980697872595990, 0.839007904882802520, 0.839035109795489340, 0.839062312610588390, +0.839089513328031720, 0.839116711947751170, 0.839143908469678900, 0.839171102893747410, 0.839198295219887540, 0.839225485448031990, 0.839252673578112730, 0.839279859610061800, +0.839307043543811250, 0.839334225379293030, 0.839361405116439750, 0.839388582755182470, 0.839415758295453670, 0.839442931737185650, 0.839470103080310110, 0.839497272324759460, +0.839524439470465510, 0.839551604517360550, 0.839578767465376960, 0.839605928314446140, 0.839633087064500350, 0.839660243715471880, 0.839687398267292770, 0.839714550719895200, +0.839741701073211330, 0.839768849327173550, 0.839795995481713240, 0.839823139536763020, 0.839850281492254820, 0.839877421348120930, 0.839904559104293510, 0.839931694760704730, +0.839958828317286740, 0.839985959773972060, 0.840013089130692060, 0.840040216387379360, 0.840067341543966120, 0.840094464600384390, 0.840121585556566690, 0.840148704412444940, +0.840175821167951420, 0.840202935823018750, 0.840230048377578420, 0.840257158831562820, 0.840284267184904450, 0.840311373437535370, 0.840338477589387840, 0.840365579640394160, +0.840392679590486910, 0.840419777439597620, 0.840446873187658760, 0.840473966834602740, 0.840501058380361820, 0.840528147824868290, 0.840555235168054420, 0.840582320409852370, +0.840609403550195090, 0.840636484589013740, 0.840663563526241160, 0.840690640361809740, 0.840717715095651740, 0.840744787727699450, 0.840771858257885140, 0.840798926686141650, +0.840825993012400460, 0.840853057236594200, 0.840880119358655250, 0.840907179378516110, 0.840934237296109060, 0.840961293111366250, 0.840988346824220300, 0.841015398434603930, +0.841042447942448650, 0.841069495347687270, 0.841096540650252080, 0.841123583850075570, 0.841150624947090030, 0.841177663941228060, 0.841204700832421830, 0.841231735620604380, +0.841258768305707120, 0.841285798887662860, 0.841312827366404110, 0.841339853741863370, 0.841366878013972920, 0.841393900182665360, 0.841420920247873520, 0.841447938209528790, +0.841474954067564340, 0.841501967821912440, 0.841528979472505600, 0.841555989019276420, 0.841582996462157170, 0.841610001801080480, 0.841637005035979160, 0.841664006166784940, +0.841691005193430760, 0.841718002115849020, 0.841744996933972200, 0.841771989647732920, 0.841798980257063680, 0.841825968761897080, 0.841852955162165960, 0.841879939457801930, +0.841906921648738150, 0.841933901734906900, 0.841960879716241010, 0.841987855592672970, 0.842014829364135190, 0.842041801030560920, 0.842068770591881570, 0.842095738048030400, +0.842122703398939800, 0.842149666644542490, 0.842176627784770980, 0.842203586819557870, 0.842230543748835880, 0.842257498572537950, 0.842284451290595810, 0.842311401902942510, +0.842338350409510770, 0.842365296810233090, 0.842392241105042180, 0.842419183293870670, 0.842446123376651700, 0.842473061353317010, 0.842499997223799530, 0.842526930988032220, +0.842553862645947450, 0.842580792197478060, 0.842607719642556650, 0.842634644981116070, 0.842661568213089240, 0.842688489338408010, 0.842715408357005540, 0.842742325268814650, +0.842769240073767860, 0.842796152771797980, 0.842823063362837850, 0.842849971846819870, 0.842876878223677520, 0.842903782493342520, 0.842930684655748050, 0.842957584710826820, +0.842984482658511780, 0.843011378498735310, 0.843038272231430570, 0.843065163856530630, 0.843092053373967200, 0.843118940783673660, 0.843145826085582750, 0.843172709279627400, +0.843199590365740100, 0.843226469343853920, 0.843253346213901580, 0.843280220975816340, 0.843307093629530050, 0.843333964174976080, 0.843360832612087160, 0.843387698940796130, +0.843414563161035910, 0.843441425272739240, 0.843468285275839060, 0.843495143170268520, 0.843521998955959810, 0.843548852632845960, 0.843575704200860030, 0.843602553659934860, +0.843629401010003390, 0.843656246250998330, 0.843683089382853080, 0.843709930405499690, 0.843736769318871430, 0.843763606122901360, 0.843790440817522190, 0.843817273402666880, +0.843844103878268470, 0.843870932244259690, 0.843897758500574140, 0.843924582647143760, 0.843951404683901840, 0.843978224610781420, 0.844005042427715460, 0.844031858134636880, +0.844058671731478750, 0.844085483218174340, 0.844112292594655700, 0.844139099860856330, 0.844165905016709290, 0.844192708062147410, 0.844219508997103850, 0.844246307821511440, +0.844273104535303350, 0.844299899138412860, 0.844326691630772230, 0.844353482012314860, 0.844380270282973690, 0.844407056442681990, 0.844433840491372490, 0.844460622428978570, +0.844487402255432950, 0.844514179970669350, 0.844540955574619830, 0.844567729067217890, 0.844594500448396680, 0.844621269718089260, 0.844648036876228580, 0.844674801922747800, +0.844701564857580520, 0.844728325680658920, 0.844755084391916380, 0.844781840991286170, 0.844808595478701460, 0.844835347854095090, 0.844862098117400540, 0.844888846268550650, +0.844915592307479040, 0.844942336234118070, 0.844969078048401270, 0.844995817750261780, 0.845022555339632660, 0.845049290816447200, 0.845076024180638540, 0.845102755432139750, +0.845129484570884660, 0.845156211596805320, 0.845182936509835450, 0.845209659309908210, 0.845236379996956890, 0.845263098570914530, 0.845289815031714520, 0.845316529379290360, +0.845343241613574440, 0.845369951734500470, 0.845396659742001510, 0.845423365636011060, 0.845450069416462060, 0.845476771083287890, 0.845503470636421840, 0.845530168075797620, +0.845556863401347500, 0.845583556613005110, 0.845610247710703920, 0.845636936694377120, 0.845663623563957970, 0.845690308319379750, 0.845716990960576180, 0.845743671487479750, +0.845770349900024090, 0.845797026198142570, 0.845823700381768460, 0.845850372450835160, 0.845877042405275840, 0.845903710245023980, 0.845930375970013300, 0.845957039580176210, +0.845983701075446510, 0.846010360455757620, 0.846037017721042780, 0.846063672871235410, 0.846090325906268870, 0.846116976826076450, 0.846143625630592090, 0.846170272319748170, +0.846196916893478650, 0.846223559351716780, 0.846250199694396080, 0.846276837921449810, 0.846303474032811480, 0.846330108028414910, 0.846356739908192600, 0.846383369672078390, +0.846409997320005880, 0.846436622851908240, 0.846463246267719180, 0.846489867567371880, 0.846516486750800050, 0.846543103817937400, 0.846569718768716450, 0.846596331603071350, +0.846622942320935270, 0.846649550922241920, 0.846676157406924700, 0.846702761774916990, 0.846729364026152510, 0.846755964160565090, 0.846782562178087120, 0.846809158078652870, +0.846835751862195730, 0.846862343528649200, 0.846888933077946770, 0.846915520510022060, 0.846942105824809000, 0.846968689022240210, 0.846995270102249730, 0.847021849064771070, +0.847048425909737720, 0.847075000637083410, 0.847101573246741510, 0.847128143738645640, 0.847154712112729970, 0.847181278368926980, 0.847207842507170850, 0.847234404527395180, +0.847260964429533360, 0.847287522213519220, 0.847314077879286250, 0.847340631426768520, 0.847367182855898740, 0.847393732166611070, 0.847420279358839010, 0.847446824432516290, +0.847473367387576500, 0.847499908223953270, 0.847526446941580300, 0.847552983540391660, 0.847579518020320170, 0.847606050381299770, 0.847632580623264300, 0.847659108746147360, +0.847685634749882680, 0.847712158634403860, 0.847738680399644730, 0.847765200045539240, 0.847791717572020430, 0.847818232979022260, 0.847844746266478430, 0.847871257434322790, +0.847897766482489050, 0.847924273410910920, 0.847950778219522470, 0.847977280908256640, 0.848003781477047690, 0.848030279925829240, 0.848056776254535020, 0.848083270463098950, +0.848109762551454650, 0.848136252519535950, 0.848162740367277120, 0.848189226094610890, 0.848215709701471750, 0.848242191187793200, 0.848268670553509190, 0.848295147798553530, +0.848321622922860060, 0.848348095926362960, 0.848374566808995030, 0.848401035570690800, 0.848427502211383970, 0.848453966731008480, 0.848480429129497950, 0.848506889406786310, +0.848533347562807520, 0.848559803597495830, 0.848586257510784200, 0.848612709302606900, 0.848639158972897770, 0.848665606521590730, 0.848692051948619740, 0.848718495253918630, +0.848744936437421330, 0.848771375499062010, 0.848797812438773950, 0.848824247256491190, 0.848850679952147910, 0.848877110525677940, 0.848903538977015090, 0.848929965306093550, +0.848956389512847460, 0.848982811597209900, 0.849009231559115450, 0.849035649398497850, 0.849062065115291030, 0.849088478709429160, 0.849114890180846070, 0.849141299529475700, +0.849167706755252660, 0.849194111858109780, 0.849220514837981670, 0.849246915694802260, 0.849273314428505620, 0.849299711039025680, 0.849326105526296390, 0.849352497890251910, +0.849378888130826630, 0.849405276247953590, 0.849431662241567410, 0.849458046111602140, 0.849484427857991610, 0.849510807480670200, 0.849537184979571650, 0.849563560354630540, +0.849589933605780170, 0.849616304732955020, 0.849642673736089040, 0.849669040615116280, 0.849695405369971010, 0.849721768000587300, 0.849748128506899070, 0.849774486888841050, +0.849800843146346300, 0.849827197279349410, 0.849853549287784560, 0.849879899171585910, 0.849906246930687390, 0.849932592565023400, 0.849958936074528220, 0.849985277459135320, +0.850011616718779230, 0.850037953853394090, 0.850064288862914070, 0.850090621747273350, 0.850116952506406070, 0.850143281140246400, 0.850169607648728950, 0.850195932031787120, +0.850222254289355380, 0.850248574421368030, 0.850274892427759220, 0.850301208308463230, 0.850327522063414110, 0.850353833692546250, 0.850380143195794360, 0.850406450573091500, +0.850432755824372610, 0.850459058949571860, 0.850485359948623400, 0.850511658821461510, 0.850537955568020480, 0.850564250188235120, 0.850590542682038600, 0.850616833049365750, +0.850643121290150740, 0.850669407404327950, 0.850695691391831770, 0.850721973252596240, 0.850748252986555760, 0.850774530593645160, 0.850800806073797820, 0.850827079426948350, +0.850853350653031250, 0.850879619751980790, 0.850905886723731240, 0.850932151568217000, 0.850958414285372440, 0.850984674875132190, 0.851010933337429830, 0.851037189672200210, +0.851063443879377490, 0.851089695958896280, 0.851115945910690730, 0.851142193734695460, 0.851168439430844970, 0.851194682999073080, 0.851220924439314410, 0.851247163751503440, +0.851273400935574580, 0.851299635991462190, 0.851325868919100780, 0.851352099718424630, 0.851378328389368670, 0.851404554931866510, 0.851430779345852870, 0.851457001631262370, +0.851483221788029270, 0.851509439816088180, 0.851535655715373490, 0.851561869485820130, 0.851588081127361620, 0.851614290639932880, 0.851640498023468420, 0.851666703277902730, +0.851692906403170300, 0.851719107399205640, 0.851745306265943140, 0.851771503003317830, 0.851797697611263340, 0.851823890089714600, 0.851850080438606220, 0.851876268657872470, +0.851902454747448190, 0.851928638707267650, 0.851954820537265680, 0.851981000237377000, 0.852007177807535320, 0.852033353247675820, 0.852059526557732870, 0.852085697737641090, +0.852111866787335080, 0.852138033706749340, 0.852164198495819040, 0.852190361154477770, 0.852216521682660710, 0.852242680080302240, 0.852268836347337080, 0.852294990483699830, +0.852321142489325110, 0.852347292364147520, 0.852373440108102120, 0.852399585721122730, 0.852425729203144300, 0.852451870554101650, 0.852478009773929290, 0.852504146862561930, +0.852530281819934180, 0.852556414645980640, 0.852582545340636600, 0.852608673903835770, 0.852634800335513200, 0.852660924635603610, 0.852687046804041730, 0.852713166840762260, +0.852739284745699930, 0.852765400518789800, 0.852791514159965680, 0.852817625669162750, 0.852843735046315830, 0.852869842291359540, 0.852895947404228580, 0.852922050384857800, +0.852948151233181910, 0.852974249949136070, 0.853000346532654220, 0.853026440983671420, 0.853052533302122610, 0.853078623487942390, 0.853104711541065600, 0.853130797461427060, +0.853156881248962050, 0.853182962903604290, 0.853209042425289170, 0.853235119813951390, 0.853261195069525910, 0.853287268191947330, 0.853313339181150710, 0.853339408037070650, +0.853365474759642530, 0.853391539348800300, 0.853417601804479120, 0.853443662126614040, 0.853469720315139790, 0.853495776369991190, 0.853521830291103180, 0.853547882078410700, +0.853573931731848810, 0.853599979251351780, 0.853626024636854660, 0.853652067888292510, 0.853678109005600260, 0.853704147988712750, 0.853730184837564800, 0.853756219552091800, +0.853782252132227910, 0.853808282577908310, 0.853834310889068140, 0.853860337065642020, 0.853886361107565110, 0.853912383014772350, 0.853938402787198570, 0.853964420424779270, +0.853990435927448500, 0.854016449295141530, 0.854042460527793530, 0.854068469625339330, 0.854094476587713980, 0.854120481414852530, 0.854146484106689810, 0.854172484663161310, +0.854198483084201100, 0.854224479369744770, 0.854250473519727160, 0.854276465534083430, 0.854302455412748520, 0.854328443155657480, 0.854354428762745700, 0.854380412233947560, +0.854406393569198230, 0.854432372768432980, 0.854458349831586860, 0.854484324758594820, 0.854510297549391900, 0.854536268203913370, 0.854562236722094530, 0.854588203103869630, +0.854614167349174280, 0.854640129457943430, 0.854666089430112350, 0.854692047265615980, 0.854718002964389600, 0.854743956526368590, 0.854769907951487220, 0.854795857239681100, +0.854821804390885290, 0.854847749405035050, 0.854873692282065440, 0.854899633021911520, 0.854925571624508550, 0.854951508089792140, 0.854977442417696460, 0.855003374608157230, +0.855029304661109490, 0.855055232576488520, 0.855081158354229490, 0.855107081994267550, 0.855133003496537870, 0.855158922860976280, 0.855184840087516720, 0.855210755176095240, +0.855236668126646780, 0.855262578939106620, 0.855288487613410030, 0.855314394149492290, 0.855340298547288990, 0.855366200806734530, 0.855392100927764520, 0.855417998910314230, +0.855443894754318920, 0.855469788459713890, 0.855495680026434500, 0.855521569454415820, 0.855547456743593670, 0.855573341893902440, 0.855599224905277840, 0.855625105777655160, +0.855650984510969770, 0.855676861105156950, 0.855702735560151860, 0.855728607875890450, 0.855754478052307090, 0.855780346089337510, 0.855806211986917090, 0.855832075744981100, +0.855857937363464940, 0.855883796842303870, 0.855909654181433390, 0.855935509380789220, 0.855961362440305850, 0.855987213359919010, 0.856013062139564180, 0.856038908779176650, +0.856064753278691910, 0.856090595638045240, 0.856116435857172120, 0.856142273936008390, 0.856168109874488440, 0.856193943672548310, 0.856219775330123170, 0.856245604847148730, +0.856271432223560170, 0.856297257459293190, 0.856323080554283410, 0.856348901508465430, 0.856374720321775310, 0.856400536994148310, 0.856426351525520050, 0.856452163915825790, +0.856477974165001150, 0.856503782272981630, 0.856529588239703150, 0.856555392065100120, 0.856581193749108680, 0.856606993291664230, 0.856632790692702370, 0.856658585952158490, +0.856684379069968080, 0.856710170046066870, 0.856735958880390560, 0.856761745572873990, 0.856787530123452990, 0.856813312532063160, 0.856839092798640010, 0.856864870923119250, +0.856890646905436260, 0.856916420745527100, 0.856942192443326370, 0.856967961998770230, 0.856993729411794190, 0.857019494682333850, 0.857045257810324700, 0.857071018795702470, +0.857096777638402640, 0.857122534338361390, 0.857148288895513310, 0.857174041309794470, 0.857199791581140570, 0.857225539709487230, 0.857251285694769940, 0.857277029536924530, +0.857302771235886940, 0.857328510791592000, 0.857354248203975770, 0.857379983472973950, 0.857405716598522160, 0.857431447580556010, 0.857457176419011310, 0.857482903113823690, +0.857508627664929190, 0.857534350072262750, 0.857560070335760430, 0.857585788455357820, 0.857611504430990880, 0.857637218262595090, 0.857662929950106290, 0.857688639493460190, +0.857714346892592850, 0.857740052147439310, 0.857765755257935520, 0.857791456224017420, 0.857817155045620730, 0.857842851722681040, 0.857868546255134310, 0.857894238642916580, +0.857919928885962910, 0.857945616984209350, 0.857971302937591720, 0.857996986746045850, 0.858022668409507580, 0.858048347927912620, 0.858074025301196700, 0.858099700529296290, +0.858125373612146140, 0.858151044549682500, 0.858176713341841310, 0.858202379988558310, 0.858228044489769300, 0.858253706845410250, 0.858279367055416960, 0.858305025119725620, +0.858330681038271370, 0.858356334810990380, 0.858381986437818490, 0.858407635918691740, 0.858433283253545730, 0.858458928442316640, 0.858484571484940730, 0.858510212381352830, +0.858535851131489450, 0.858561487735286510, 0.858587122192679740, 0.858612754503605190, 0.858638384667998800, 0.858664012685796400, 0.858689638556934360, 0.858715262281347870, +0.858740883858973290, 0.858766503289746350, 0.858792120573603210, 0.858817735710479810, 0.858843348700311980, 0.858868959543036330, 0.858894568238587790, 0.858920174786902860, +0.858945779187917480, 0.858971381441567590, 0.858996981547789250, 0.859022579506518500, 0.859048175317691290, 0.859073768981244100, 0.859099360497112110, 0.859124949865231580, +0.859150537085538790, 0.859176122157969570, 0.859201705082460080, 0.859227285858946370, 0.859252864487364380, 0.859278440967650710, 0.859304015299740540, 0.859329587483570250, +0.859355157519075990, 0.859380725406193920, 0.859406291144860000, 0.859431854735010270, 0.859457416176581450, 0.859482975469508580, 0.859508532613728280, 0.859534087609176710, +0.859559640455789920, 0.859585191153503960, 0.859610739702255100, 0.859636286101979290, 0.859661830352613340, 0.859687372454092210, 0.859712912406352730, 0.859738450209331040, +0.859763985862963100, 0.859789519367185280, 0.859815050721933650, 0.859840579927144360, 0.859866106982754120, 0.859891631888698100, 0.859917154644913030, 0.859942675251335160, +0.859968193707900450, 0.859993710014545390, 0.860019224171205910, 0.860044736177818960, 0.860070246034319700, 0.860095753740644730, 0.860121259296730440, 0.860146762702513000, +0.860172263957928670, 0.860197763062913620, 0.860223260017404230, 0.860248754821337110, 0.860274247474647650, 0.860299737977272550, 0.860325226329148210, 0.860350712530210670, +0.860376196580396440, 0.860401678479641660, 0.860427158227883180, 0.860452635825056380, 0.860478111271097970, 0.860503584565944220, 0.860529055709531530, 0.860554524701796280, +0.860579991542674620, 0.860605456232103050, 0.860630918770018180, 0.860656379156355620, 0.860681837391052200, 0.860707293474044180, 0.860732747405267840, 0.860758199184659680, +0.860783648812155970, 0.860809096287693200, 0.860834541611208090, 0.860859984782636150, 0.860885425801914290, 0.860910864668978930, 0.860936301383766310, 0.860961735946212950, +0.860987168356255330, 0.861012598613830170, 0.861038026718873080, 0.861063452671321010, 0.861088876471110210, 0.861114298118177190, 0.861139717612458440, 0.861165134953890470, +0.861190550142409640, 0.861215963177952790, 0.861241374060455640, 0.861266782789855130, 0.861292189366087650, 0.861317593789089560, 0.861342996058797610, 0.861368396175148150, +0.861393794138077710, 0.861419189947523200, 0.861444583603420240, 0.861469975105705890, 0.861495364454316630, 0.861520751649188840, 0.861546136690259260, 0.861571519577464360, +0.861596900310740990, 0.861622278890025070, 0.861647655315253340, 0.861673029586362490, 0.861698401703289150, 0.861723771665969700, 0.861749139474340840, 0.861774505128339200, +0.861799868627901700, 0.861825229972964070, 0.861850589163463350, 0.861875946199336160, 0.861901301080519210, 0.861926653806948880, 0.861952004378562010, 0.861977352795295530, +0.862002699057085150, 0.862028043163868160, 0.862053385115580940, 0.862078724912160310, 0.862104062553542880, 0.862129398039665260, 0.862154731370464280, 0.862180062545876760, +0.862205391565838640, 0.862230718430287090, 0.862256043139158820, 0.862281365692390330, 0.862306686089918450, 0.862332004331679890, 0.862357320417611260, 0.862382634347649830, +0.862407946121731330, 0.862433255739793010, 0.862458563201771610, 0.862483868507603610, 0.862509171657226070, 0.862534472650575590, 0.862559771487589440, 0.862585068168203350, +0.862610362692354580, 0.862635655059979860, 0.862660945271016110, 0.862686233325399840, 0.862711519223068100, 0.862736802963957610, 0.862762084548005400, 0.862787363975147660, +0.862812641245321530, 0.862837916358463740, 0.862863189314511110, 0.862888460113400590, 0.862913728755068890, 0.862938995239452830, 0.862964259566489810, 0.862989521736115650, +0.863014781748267730, 0.863040039602882780, 0.863065295299897840, 0.863090548839249520, 0.863115800220874860, 0.863141049444711260, 0.863166296510694540, 0.863191541418761980, +0.863216784168850610, 0.863242024760897400, 0.863267263194839040, 0.863292499470612480, 0.863317733588154780, 0.863342965547403090, 0.863368195348293570, 0.863393422990763600, +0.863418648474750030, 0.863443871800189780, 0.863469092967020010, 0.863494311975177340, 0.863519528824599480, 0.863544743515222260, 0.863569956046983280, 0.863595166419819260, +0.863620374633667480, 0.863645580688464640, 0.863670784584147920, 0.863695986320654250, 0.863721185897921020, 0.863746383315884380, 0.863771578574481720, 0.863796771673650210, +0.863821962613326780, 0.863847151393448360, 0.863872338013952130, 0.863897522474775030, 0.863922704775854530, 0.863947884917126930, 0.863973062898529600, 0.863998238719999480, +0.864023412381473950, 0.864048583882889740, 0.864073753224184120, 0.864098920405294570, 0.864124085426157260, 0.864149248286709800, 0.864174408986889130, 0.864199567526632520, +0.864224723905876900, 0.864249878124559560, 0.864275030182617420, 0.864300180079988320, 0.864325327816608200, 0.864350473392414780, 0.864375616807345090, 0.864400758061336540, +0.864425897154325940, 0.864451034086250680, 0.864476168857048250, 0.864501301466654940, 0.864526431915008440, 0.864551560202045820, 0.864576686327704240, 0.864601810291921070, +0.864626932094633260, 0.864652051735778190, 0.864677169215293470, 0.864702284533115260, 0.864727397689181390, 0.864752508683429120, 0.864777617515795400, 0.864802724186217840, +0.864827828694633370, 0.864852931040979270, 0.864878031225193360, 0.864903129247211910, 0.864928225106972650, 0.864953318804412840, 0.864978410339469650, 0.865003499712080570, +0.865028586922182650, 0.865053671969713720, 0.865078754854610170, 0.865103835576809700, 0.865128914136249700, 0.865153990532867350, 0.865179064766600110, 0.865204136837385170, +0.865229206745159910, 0.865254274489862030, 0.865279340071428040, 0.865304403489795650, 0.865329464744902350, 0.865354523836685320, 0.865379580765082030, 0.865404635530029780, +0.865429688131465810, 0.865454738569328200, 0.865479786843553310, 0.865504832954078870, 0.865529876900842490, 0.865554918683781200, 0.865579958302832850, 0.865604995757934480, +0.865630031049024030, 0.865655064176038100, 0.865680095138914530, 0.865705123937590690, 0.865730150572004090, 0.865755175042092100, 0.865780197347792100, 0.865805217489041710, +0.865830235465778640, 0.865855251277939610, 0.865880264925462440, 0.865905276408284520, 0.865930285726343450, 0.865955292879576730, 0.865980297867921740, 0.866005300691316430, +0.866030301349697500, 0.866055299843002780, 0.866080296171169770, 0.866105290334135970, 0.866130282331839090, 0.866155272164216390, 0.866180259831205610, 0.866205245332744460, +0.866230228668769860, 0.866255209839219660, 0.866280188844031570, 0.866305165683142860, 0.866330140356491250, 0.866355112864014340, 0.866380083205649630, 0.866405051381335170, +0.866430017391007560, 0.866454981234604960, 0.866479942912064980, 0.866504902423325010, 0.866529859768322860, 0.866554814946996040, 0.866579767959282710, 0.866604718805119360, +0.866629667484444370, 0.866654613997195120, 0.866679558343309340, 0.866704500522724740, 0.866729440535378810, 0.866754378381209280, 0.866779314060154290, 0.866804247572150470, +0.866829178917136180, 0.866854108095048810, 0.866879035105826310, 0.866903959949406170, 0.866928882625725980, 0.866953803134723810, 0.866978721476337480, 0.867003637650503810, +0.867028551657161200, 0.867053463496247120, 0.867078373167699420, 0.867103280671455810, 0.867128186007453890, 0.867153089175632050, 0.867177990175927000, 0.867202889008277020, +0.867227785672619820, 0.867252680168893120, 0.867277572497034740, 0.867302462656982410, 0.867327350648673940, 0.867352236472047510, 0.867377120127040050, 0.867402001613589820, +0.867426880931634560, 0.867451758081112080, 0.867476633061960210, 0.867501505874116790, 0.867526376517520070, 0.867551244992106900, 0.867576111297815640, 0.867600975434584140, +0.867625837402350220, 0.867650697201051700, 0.867675554830626310, 0.867700410291012190, 0.867725263582147410, 0.867750114703969010, 0.867774963656415380, 0.867799810439424340, +0.867824655052933710, 0.867849497496881450, 0.867874337771205480, 0.867899175875843750, 0.867924011810734420, 0.867948845575814640, 0.867973677171022700, 0.867998506596296630, +0.868023333851574260, 0.868048158936793660, 0.868072981851892520, 0.868097802596809460, 0.868122621171481420, 0.868147437575846780, 0.868172251809843590, 0.868197063873409780, +0.868221873766483300, 0.868246681489002080, 0.868271487040904290, 0.868296290422128080, 0.868321091632610840, 0.868345890672290730, 0.868370687541106020, 0.868395482238994540, +0.868420274765894340, 0.868445065121743460, 0.868469853306479970, 0.868494639320042230, 0.868519423162367410, 0.868544204833394120, 0.868568984333060290, 0.868593761661303980, +0.868618536818063340, 0.868643309803276200, 0.868668080616881390, 0.868692849258815850, 0.868717615729018180, 0.868742380027426540, 0.868767142153978880, 0.868791902108613460, +0.868816659891268220, 0.868841415501881320, 0.868866168940391370, 0.868890920206735530, 0.868915669300852290, 0.868940416222680030, 0.868965160972156700, 0.868989903549220340, +0.869014643953809340, 0.869039382185862190, 0.869064118245316040, 0.869088852132109730, 0.869113583846181200, 0.869138313387468720, 0.869163040755910440, 0.869187765951444650, +0.869212488974009380, 0.869237209823543360, 0.869261928499983850, 0.869286645003269460, 0.869311359333338470, 0.869336071490129150, 0.869360781473579650, 0.869385489283628130, +0.869410194920212990, 0.869434898383272700, 0.869459599672744780, 0.869484298788567920, 0.869508995730680190, 0.869533690499020070, 0.869558383093525620, 0.869583073514135330, +0.869607761760787690, 0.869632447833420310, 0.869657131731971680, 0.869681813456380290, 0.869706493006584420, 0.869731170382522230, 0.869755845584132210, 0.869780518611352530, +0.869805189464122000, 0.869829858142378010, 0.869854524646059390, 0.869879188975104520, 0.869903851129451570, 0.869928511109039130, 0.869953168913805360, 0.869977824543688550, +0.870002477998627730, 0.870027129278560300, 0.870051778383424960, 0.870076425313160210, 0.870101070067704430, 0.870125712646996010, 0.870150353050973210, 0.870174991279574980, +0.870199627332738920, 0.870224261210403750, 0.870248892912507950, 0.870273522438989810, 0.870298149789787920, 0.870322774964840780, 0.870347397964086560, 0.870372018787464290, +0.870396637434911580, 0.870421253906367260, 0.870445868201769830, 0.870470480321057670, 0.870495090264169380, 0.870519698031043340, 0.870544303621618500, 0.870568907035832450, +0.870593508273624140, 0.870618107334932060, 0.870642704219694700, 0.870667298927850550, 0.870691891459338230, 0.870716481814096110, 0.870741069992063240, 0.870765655993177230, +0.870790239817377130, 0.870814821464601430, 0.870839400934788730, 0.870863978227877420, 0.870888553343806220, 0.870913126282513610, 0.870937697043938640, 0.870962265628019040, +0.870986832034693740, 0.871011396263901340, 0.871035958315580450, 0.871060518189669670, 0.871085075886107620, 0.871109631404833220, 0.871134184745784410, 0.871158735908900140, +0.871183284894119000, 0.871207831701379610, 0.871232376330620670, 0.871256918781780800, 0.871281459054798700, 0.871305997149613320, 0.871330533066162480, 0.871355066804385350, +0.871379598364220520, 0.871404127745606720, 0.871428654948482650, 0.871453179972786820, 0.871477702818458600, 0.871502223485435600, 0.871526741973657090, 0.871551258283061680, +0.871575772413588190, 0.871600284365175230, 0.871624794137761620, 0.871649301731285960, 0.871673807145687430, 0.871698310380904060, 0.871722811436874910, 0.871747310313538690, +0.871771807010834120, 0.871796301528700130, 0.871820793867075340, 0.871845284025898670, 0.871869772005109070, 0.871894257804644690, 0.871918741424444700, 0.871943222864447810, +0.871967702124592850, 0.871992179204818640, 0.872016654105064020, 0.872041126825268130, 0.872065597365369040, 0.872090065725305900, 0.872114531905017750, 0.872138995904443100, +0.872163457723521000, 0.872187917362190370, 0.872212374820389820, 0.872236830098058860, 0.872261283195135300, 0.872285734111558520, 0.872310182847267470, 0.872334629402200970, +0.872359073776297840, 0.872383515969497150, 0.872407955981737480, 0.872432393812958450, 0.872456829463098100, 0.872481262932095600, 0.872505694219889880, 0.872530123326419990, +0.872554550251624760, 0.872578974995443120, 0.872603397557814580, 0.872627817938677050, 0.872652236137970050, 0.872676652155632390, 0.872701065991603020, 0.872725477645821090, +0.872749887118225430, 0.872774294408755090, 0.872798699517349450, 0.872823102443946560, 0.872847503188486030, 0.872871901750906680, 0.872896298131147550, 0.872920692329147710, +0.872945084344846080, 0.872969474178182270, 0.872993861829094220, 0.873018247297521640, 0.873042630583403370, 0.873067011686678550, 0.873091390607286130, 0.873115767345165380, +0.873140141900255130, 0.873164514272494970, 0.873188884461822970, 0.873213252468178940, 0.873237618291501700, 0.873261981931730440, 0.873286343388804180, 0.873310702662662090, +0.873335059753243210, 0.873359414660487170, 0.873383767384332210, 0.873408117924717730, 0.873432466281583000, 0.873456812454867060, 0.873481156444509080, 0.873505498250448320, +0.873529837872624170, 0.873554175310975010, 0.873578510565440340, 0.873602843635959530, 0.873627174522471520, 0.873651503224915580, 0.873675829743230880, 0.873700154077356570, +0.873724476227232370, 0.873748796192796550, 0.873773113973988710, 0.873797429570748130, 0.873821742983013960, 0.873846054210725360, 0.873870363253821720, 0.873894670112242200, +0.873918974785926280, 0.873943277274812690, 0.873967577578840800, 0.873991875697949890, 0.874016171632079450, 0.874040465381168420, 0.874064756945156400, 0.874089046323982770, +0.874113333517586130, 0.874137618525906210, 0.874161901348882160, 0.874186181986453480, 0.874210460438559210, 0.874234736705138850, 0.874259010786131660, 0.874283282681477370, +0.874307552391114460, 0.874331819914982660, 0.874356085253021330, 0.874380348405169760, 0.874404609371367330, 0.874428868151553300, 0.874453124745667610, 0.874477379153648650, +0.874501631375436350, 0.874525881410969870, 0.874550129260188710, 0.874574374923032140, 0.874598618399439750, 0.874622859689350720, 0.874647098792705080, 0.874671335709441220, +0.874695570439498970, 0.874719802982817820, 0.874744033339337150, 0.874768261508996450, 0.874792487491735100, 0.874816711287492500, 0.874840932896208460, 0.874865152317821800, +0.874889369552272260, 0.874913584599499190, 0.874937797459442220, 0.874962008132040720, 0.874986216617234300, 0.875010422914962670, 0.875034627025164550, 0.875058828947779980, +0.875083028682748230, 0.875107226230008920, 0.875131421589501520, 0.875155614761165660, 0.875179805744940700, 0.875203994540766690, 0.875228181148582140, 0.875252365568327310, +0.875276547799941460, 0.875300727843364320, 0.875324905698535270, 0.875349081365394020, 0.875373254843880070, 0.875397426133933340, 0.875421595235492680, 0.875445762148498010, +0.875469926872888940, 0.875494089408605070, 0.875518249755586010, 0.875542407913771250, 0.875566563883100950, 0.875590717663513820, 0.875614869254949800, 0.875639018657348720, +0.875663165870650070, 0.875687310894793460, 0.875711453729718590, 0.875735594375365080, 0.875759732831673080, 0.875783869098581190, 0.875808003176029690, 0.875832135063958180, +0.875856264762306380, 0.875880392271013890, 0.875904517590020410, 0.875928640719266130, 0.875952761658689740, 0.875976880408231520, 0.876000996967830960, 0.876025111337428000, +0.876049223516962350, 0.876073333506373510, 0.876097441305601410, 0.876121546914586100, 0.876145650333266410, 0.876169751561582720, 0.876193850599474630, 0.876217947446881860, +0.876242042103744350, 0.876266134570001580, 0.876290224845593600, 0.876314312930460360, 0.876338398824541010, 0.876362482527775600, 0.876386564040104070, 0.876410643361466010, +0.876434720491801490, 0.876458795431049990, 0.876482868179152110, 0.876506938736046460, 0.876531007101673640, 0.876555073275973150, 0.876579137258885030, 0.876603199050349110, +0.876627258650305220, 0.876651316058693060, 0.876675371275453140, 0.876699424300524280, 0.876723475133846960, 0.876747523775360800, 0.876771570225005960, 0.876795614482722140, +0.876819656548449400, 0.876843696422127450, 0.876867734103696670, 0.876891769593096120, 0.876915802890266050, 0.876939833995146630, 0.876963862907677580, 0.876987889627798830, +0.877011914155450430, 0.877035936490572650, 0.877059956633104540, 0.877083974582986590, 0.877107990340158740, 0.877132003904560810, 0.877156015276132960, 0.877180024454815020, +0.877204031440547040, 0.877228036233269390, 0.877252038832921240, 0.877276039239443080, 0.877300037452774740, 0.877324033472856260, 0.877348027299627690, 0.877372018933029190, +0.877396008373000910, 0.877419995619482250, 0.877443980672413690, 0.877467963531735060, 0.877491944197386520, 0.877515922669308220, 0.877539898947440000, 0.877563873031722120, +0.877587844922094960, 0.877611814618497800, 0.877635782120871010, 0.877659747429154760, 0.877683710543289200, 0.877707671463214380, 0.877731630188870350, 0.877755586720197270, +0.877779541057135630, 0.877803493199624700, 0.877827443147605080, 0.877851390901016830, 0.877875336459800090, 0.877899279823895040, 0.877923220993241720, 0.877947159967780830, +0.877971096747451660, 0.877995031332194700, 0.878018963721950210, 0.878042893916658240, 0.878066821916258950, 0.878090747720692730, 0.878114671329899620, 0.878138592743820330, +0.878162511962394030, 0.878186428985561540, 0.878210343813262910, 0.878234256445438400, 0.878258166882028290, 0.878282075122972740, 0.878305981168212460, 0.878329885017686830, +0.878353786671336350, 0.878377686129101500, 0.878401583390922450, 0.878425478456739460, 0.878449371326492700, 0.878473262000122550, 0.878497150477569710, 0.878521036758773580, +0.878544920843674750, 0.878568802732213720, 0.878592682424330640, 0.878616559919965790, 0.878640435219059660, 0.878664308321552400, 0.878688179227384740, 0.878712047936496270, +0.878735914448827700, 0.878759778764319210, 0.878783640882911390, 0.878807500804544510, 0.878831358529158830, 0.878855214056695090, 0.878879067387092980, 0.878902918520293230, +0.878926767456236100, 0.878950614194862090, 0.878974458736111570, 0.878998301079924830, 0.879022141226242450, 0.879045979175005040, 0.879069814926152330, 0.879093648479625010, +0.879117479835363700, 0.879141308993308560, 0.879165135953400180, 0.879188960715578950, 0.879212783279785360, 0.879236603645960240, 0.879260421814043180, 0.879284237783975020, +0.879308051555696360, 0.879331863129147460, 0.879355672504268940, 0.879379479681001270, 0.879403284659285300, 0.879427087439060730, 0.879450888020268380, 0.879474686402848870, +0.879498482586742570, 0.879522276571890080, 0.879546068358232010, 0.879569857945708630, 0.879593645334261100, 0.879617430523829010, 0.879641213514353320, 0.879664994305774720, +0.879688772898033490, 0.879712549291070340, 0.879736323484825890, 0.879760095479241060, 0.879783865274255560, 0.879807632869810340, 0.879831398265846110, 0.879855161462303360, +0.879878922459122690, 0.879902681256244710, 0.879926437853610020, 0.879950192251159670, 0.879973944448833370, 0.879997694446572280, 0.880021442244317000, 0.880045187842008030, +0.880068931239586070, 0.880092672436991850, 0.880116411434165860, 0.880140148231049360, 0.880163882827582070, 0.880187615223705030, 0.880211345419358970, 0.880235073414484480, +0.880258799209022390, 0.880282522802913300, 0.880306244196098260, 0.880329963388517210, 0.880353680380111300, 0.880377395170821140, 0.880401107760587550, 0.880424818149351140, +0.880448526337052730, 0.880472232323632920, 0.880495936109033090, 0.880519637693192860, 0.880543337076053590, 0.880567034257556000, 0.880590729237640810, 0.880614422016248730, +0.880638112593320700, 0.880661800968797310, 0.880685487142619850, 0.880709171114728350, 0.880732852885063870, 0.880756532453567220, 0.880780209820179240, 0.880803884984840750, +0.880827557947492570, 0.880851228708075860, 0.880874897266530680, 0.880898563622798280, 0.880922227776819500, 0.880945889728535050, 0.880969549477885970, 0.880993207024812990, +0.881016862369257030, 0.881040515511159250, 0.881064166450459820, 0.881087815187099890, 0.881111461721020510, 0.881135106052162500, 0.881158748180466690, 0.881182388105874010, +0.881206025828325750, 0.881229661347762040, 0.881253294664124160, 0.881276925777353060, 0.881300554687389660, 0.881324181394174790, 0.881347805897649490, 0.881371428197754710, +0.881395048294431830, 0.881418666187620880, 0.881442281877263260, 0.881465895363299890, 0.881489506645671830, 0.881513115724320010, 0.881536722599185360, 0.881560327270208940, +0.881583929737332130, 0.881607530000494970, 0.881631128059639170, 0.881654723914705450, 0.881678317565634860, 0.881701909012368560, 0.881725498254847470, 0.881749085293012990, +0.881772670126805490, 0.881796252756166240, 0.881819833181036410, 0.881843411401356910, 0.881866987417068930, 0.881890561228113490, 0.881914132834431650, 0.881937702235964900, +0.881961269432653520, 0.881984834424438870, 0.882008397211262230, 0.882031957793064540, 0.882055516169786950, 0.882079072341370620, 0.882102626307756600, 0.882126178068886380, +0.882149727624700340, 0.882173274975139980, 0.882196820120146330, 0.882220363059660780, 0.882243903793624270, 0.882267442321977960, 0.882290978644663550, 0.882314512761621210, +0.882338044672792530, 0.882361574378118910, 0.882385101877541160, 0.882408627171000770, 0.882432150258438800, 0.882455671139796500, 0.882479189815015390, 0.882502706284035820, +0.882526220546799630, 0.882549732603247760, 0.882573242453321580, 0.882596750096962370, 0.882620255534111280, 0.882643758764709910, 0.882667259788698750, 0.882690758606019420, +0.882714255216613180, 0.882737749620421290, 0.882761241817385130, 0.882784731807445770, 0.882808219590544670, 0.882831705166623350, 0.882855188535622390, 0.882878669697483410, +0.882902148652147780, 0.882925625399556880, 0.882949099939651760, 0.882972572272374020, 0.882996042397664830, 0.883019510315465880, 0.883042976025717800, 0.883066439528362170, +0.883089900823340600, 0.883113359910594140, 0.883136816790064390, 0.883160271461692510, 0.883183723925420440, 0.883207174181188660, 0.883230622228938890, 0.883254068068612510, +0.883277511700151120, 0.883300953123495770, 0.883324392338588170, 0.883347829345369480, 0.883371264143781750, 0.883394696733765360, 0.883418127115262350, 0.883441555288213890, +0.883464981252561570, 0.883488405008246770, 0.883511826555211100, 0.883535245893395720, 0.883558663022742660, 0.883582077943192550, 0.883605490654687300, 0.883628901157168300, +0.883652309450576930, 0.883675715534854910, 0.883699119409943610, 0.883722521075784860, 0.883745920532319370, 0.883769317779489190, 0.883792712817235590, 0.883816105645500280, +0.883839496264224760, 0.883862884673350390, 0.883886270872818900, 0.883909654862572110, 0.883933036642550740, 0.883956416212696830, 0.883979793572951870, 0.884003168723257350, +0.884026541663554990, 0.884049912393786270, 0.884073280913893140, 0.884096647223816420, 0.884120011323498160, 0.884143373212879720, 0.884166732891902950, 0.884190090360509330, +0.884213445618640460, 0.884236798666238060, 0.884260149503243940, 0.884283498129599170, 0.884306844545245550, 0.884330188750124810, 0.884353530744178660, 0.884376870527348700, +0.884400208099576530, 0.884423543460803870, 0.884446876610972770, 0.884470207550023920, 0.884493536277899730, 0.884516862794541670, 0.884540187099891350, 0.884563509193890710, +0.884586829076481120, 0.884610146747605080, 0.884633462207203070, 0.884656775455217480, 0.884680086491590020, 0.884703395316262300, 0.884726701929176020, 0.884750006330273010, +0.884773308519495090, 0.884796608496784210, 0.884819906262081400, 0.884843201815328830, 0.884866495156468310, 0.884889786285441570, 0.884913075202190310, 0.884936361906656370, +0.884959646398781890, 0.884982928678507920, 0.885006208745776620, 0.885029486600529820, 0.885052762242709350, 0.885076035672256900, 0.885099306889114310, 0.885122575893223520, +0.885145842684526780, 0.885169107262964940, 0.885192369628480360, 0.885215629781014760, 0.885238887720510180, 0.885262143446908350, 0.885285396960151180, 0.885308648260180520, +0.885331897346938730, 0.885355144220366650, 0.885378388880406760, 0.885401631327000890, 0.885424871560090980, 0.885448109579618840, 0.885471345385526520, 0.885494578977756190, +0.885517810356248880, 0.885541039520947200, 0.885564266471792870, 0.885587491208727930, 0.885610713731694200, 0.885633934040633730, 0.885657152135488350, 0.885680368016200540, +0.885703581682711460, 0.885726793134963280, 0.885750002372898250, 0.885773209396458210, 0.885796414205585080, 0.885819616800220920, 0.885842817180307770, 0.885866015345788020, +0.885889211296602700, 0.885912405032694420, 0.885935596554005110, 0.885958785860476830, 0.885981972952051610, 0.886005157828671400, 0.886028340490278790, 0.886051520936814830, +0.886074699168222120, 0.886097875184442610, 0.886121048985418440, 0.886144220571091660, 0.886167389941404320, 0.886190557096298460, 0.886213722035716690, 0.886236884759600160, +0.886260045267891480, 0.886283203560532700, 0.886306359637465850, 0.886329513498633090, 0.886352665143976590, 0.886375814573438840, 0.886398961786961090, 0.886422106784485960, +0.886445249565955500, 0.886468390131312070, 0.886491528480497500, 0.886514664613454180, 0.886537798530124270, 0.886560930230450240, 0.886584059714373370, 0.886607186981836490, +0.886630312032781530, 0.886653434867150870, 0.886676555484886550, 0.886699673885930960, 0.886722790070226030, 0.886745904037714690, 0.886769015788338110, 0.886792125322038990, +0.886815232638759500, 0.886838337738442010, 0.886861440621028670, 0.886884541286461660, 0.886907639734683780, 0.886930735965636430, 0.886953829979262090, 0.886976921775503360, +0.887000011354302180, 0.887023098715601030, 0.887046183859342090, 0.887069266785467710, 0.887092347493920630, 0.887115425984642210, 0.887138502257575290, 0.887161576312662010, +0.887184648149844880, 0.887207717769066150, 0.887230785170268100, 0.887253850353392990, 0.887276913318383760, 0.887299974065181800, 0.887323032593729910, 0.887346088903970490, +0.887369142995845790, 0.887392194869298320, 0.887415244524270230, 0.887438291960704560, 0.887461337178542700, 0.887484380177727460, 0.887507420958201340, 0.887530459519906610, +0.887553495862785760, 0.887576529986781160, 0.887599561891835200, 0.887622591577890810, 0.887645619044889480, 0.887668644292774140, 0.887691667321487190, 0.887714688130971100, +0.887737706721168250, 0.887760723092021140, 0.887783737243472590, 0.887806749175464320, 0.887829758887939250, 0.887852766380839650, 0.887875771654108250, 0.887898774707687300, +0.887921775541519520, 0.887944774155547290, 0.887967770549713540, 0.887990764723959880, 0.888013756678229350, 0.888036746412464440, 0.888059733926607640, 0.888082719220601560, +0.888105702294388680, 0.888128683147911490, 0.888151661781113040, 0.888174638193934940, 0.888197612386320330, 0.888220584358211720, 0.888243554109551580, 0.888266521640282520, +0.888289486950347260, 0.888312450039688620, 0.888335410908248520, 0.888358369555969810, 0.888381325982795180, 0.888404280188667350, 0.888427232173528700, 0.888450181937322060, +0.888473129479989910, 0.888496074801475300, 0.888519017901720170, 0.888541958780667440, 0.888564897438259840, 0.888587833874440070, 0.888610768089150630, 0.888633700082334220, +0.888656629853933680, 0.888679557403891930, 0.888702482732150910, 0.888725405838653560, 0.888748326723342810, 0.888771245386161260, 0.888794161827051510, 0.888817076045956390, +0.888839988042818940, 0.888862897817581210, 0.888885805370186240, 0.888908710700576640, 0.888931613808695340, 0.888954514694485050, 0.888977413357888380, 0.889000309798848250, +0.889023204017307720, 0.889046096013208720, 0.889068985786494630, 0.889091873337107930, 0.889114758664991570, 0.889137641770088360, 0.889160522652341020, 0.889183401311692820, +0.889206277748085690, 0.889229151961462900, 0.889252023951767170, 0.889274893718941420, 0.889297761262928370, 0.889320626583670950, 0.889343489681111990, 0.889366350555194750, +0.889389209205861180, 0.889412065633054530, 0.889434919836717740, 0.889457771816793750, 0.889480621573225270, 0.889503469105955240, 0.889526314414926470, 0.889549157500082340, +0.889571998361365020, 0.889594836998717660, 0.889617673412083090, 0.889640507601404450, 0.889663339566624580, 0.889686169307686290, 0.889708996824532970, 0.889731822117106770, +0.889754645185350970, 0.889777466029208600, 0.889800284648622600, 0.889823101043535900, 0.889845915213891450, 0.889868727159632170, 0.889891536880701440, 0.889914344377041530, +0.889937149648595720, 0.889959952695307030, 0.889982753517118530, 0.890005552113973030, 0.890028348485813690, 0.890051142632583560, 0.890073934554225900, 0.890096724250682980, +0.890119511721898290, 0.890142296967814880, 0.890165079988375680, 0.890187860783523740, 0.890210639353202220, 0.890233415697354480, 0.890256189815922800, 0.890278961708850570, +0.890301731376081040, 0.890324498817557150, 0.890347264033221950, 0.890370027023018710, 0.890392787786890240, 0.890415546324780370, 0.890438302636631150, 0.890461056722386180, +0.890483808581988610, 0.890506558215381380, 0.890529305622507870, 0.890552050803311120, 0.890574793757734630, 0.890597534485720770, 0.890620272987213020, 0.890643009262154560, +0.890665743310488640, 0.890688475132158320, 0.890711204727106850, 0.890733932095277400, 0.890756657236613460, 0.890779380151057510, 0.890802100838553050, 0.890824819299043340, +0.890847535532471650, 0.890870249538781130, 0.890892961317914960, 0.890915670869816380, 0.890938378194429000, 0.890961083291695320, 0.890983786161558930, 0.891006486803962990, +0.891029185218850880, 0.891051881406165870, 0.891074575365851110, 0.891097267097850310, 0.891119956602105970, 0.891142643878561680, 0.891165328927160830, 0.891188011747846680, +0.891210692340562490, 0.891233370705251550, 0.891256046841857110, 0.891278720750323110, 0.891301392430591810, 0.891324061882607040, 0.891346729106312070, 0.891369394101650280, +0.891392056868565150, 0.891414717406999730, 0.891437375716897520, 0.891460031798202320, 0.891482685650856640, 0.891505337274804300, 0.891527986669988560, 0.891550633836352800, +0.891573278773840520, 0.891595921482395080, 0.891618561961960210, 0.891641200212478500, 0.891663836233893780, 0.891686470026149540, 0.891709101589189030, 0.891731730922955880, +0.891754358027393330, 0.891776982902444890, 0.891799605548054370, 0.891822225964164490, 0.891844844150719070, 0.891867460107661490, 0.891890073834935240, 0.891912685332483800, +0.891935294600250670, 0.891957901638179670, 0.891980506446213630, 0.892003109024296250, 0.892025709372371130, 0.892048307490381660, 0.892070903378271440, 0.892093497035984060, +0.892116088463462800, 0.892138677660651800, 0.892161264627493680, 0.892183849363932470, 0.892206431869911550, 0.892229012145374530, 0.892251590190265120, 0.892274166004526580, +0.892296739588102740, 0.892319310940937300, 0.892341880062973320, 0.892364446954154620, 0.892387011614424800, 0.892409574043727450, 0.892432134242006180, 0.892454692209204480, +0.892477247945266510, 0.892499801450135080, 0.892522352723754130, 0.892544901766067270, 0.892567448577018090, 0.892589993156550410, 0.892612535504607620, 0.892635075621133640, +0.892657613506072200, 0.892680149159366440, 0.892702682580960310, 0.892725213770797500, 0.892747742728821510, 0.892770269454976280, 0.892792793949205410, 0.892815316211452940, +0.892837836241661690, 0.892860354039775930, 0.892882869605739260, 0.892905382939495400, 0.892927894040988050, 0.892950402910161030, 0.892972909546957960, 0.892995413951323090, +0.893017916123199250, 0.893040416062530600, 0.893062913769260950, 0.893085409243333910, 0.893107902484693410, 0.893130393493283160, 0.893152882269046990, 0.893175368811928940, +0.893197853121872050, 0.893220335198820600, 0.893242815042718300, 0.893265292653508960, 0.893287768031136300, 0.893310241175544250, 0.893332712086677080, 0.893355180764477730, +0.893377647208890350, 0.893400111419858870, 0.893422573397327110, 0.893445033141239020, 0.893467490651538190, 0.893489945928168770, 0.893512398971074820, 0.893534849780199480, +0.893557298355486920, 0.893579744696881280, 0.893602188804326180, 0.893624630677765650, 0.893647070317143520, 0.893669507722403720, 0.893691942893490520, 0.893714375830347070, +0.893736806532917760, 0.893759235001146400, 0.893781661234976930, 0.893804085234353280, 0.893826506999219510, 0.893848926529519750, 0.893871343825197400, 0.893893758886196600, +0.893916171712461400, 0.893938582303935860, 0.893960990660563780, 0.893983396782289220, 0.894005800669056220, 0.894028202320809040, 0.894050601737491070, 0.894072998919046570, +0.894095393865419470, 0.894117786576553940, 0.894140177052394010, 0.894162565292883630, 0.894184951297967160, 0.894207335067587980, 0.894229716601690370, 0.894252095900218590, +0.894274472963116460, 0.894296847790328250, 0.894319220381797790, 0.894341590737469440, 0.894363958857287370, 0.894386324741195060, 0.894408688389137010, 0.894431049801057140, +0.894453408976899620, 0.894475765916608710, 0.894498120620128350, 0.894520473087402570, 0.894542823318376090, 0.894565171312992180, 0.894587517071195330, 0.894609860592929680, +0.894632201878139300, 0.894654540926768550, 0.894676877738761370, 0.894699212314062460, 0.894721544652615000, 0.894743874754363790, 0.894766202619252880, 0.894788528247226430, +0.894810851638228600, 0.894833172792203760, 0.894855491709095950, 0.894877808388849780, 0.894900122831408740, 0.894922435036717310, 0.894944745004719880, 0.894967052735360590, +0.894989358228583610, 0.895011661484333200, 0.895033962502553740, 0.895056261283189710, 0.895078557826184620, 0.895100852131483160, 0.895123144199029610, 0.895145434028768120, +0.895167721620643060, 0.895190006974598720, 0.895212290090579790, 0.895234570968529760, 0.895256849608393250, 0.895279126010114610, 0.895301400173638130, 0.895323672098908170, +0.895345941785869130, 0.895368209234465140, 0.895390474444641040, 0.895412737416340310, 0.895434998149507780, 0.895457256644087820, 0.895479512900024590, 0.895501766917262690, +0.895524018695746270, 0.895546268235420270, 0.895568515536228180, 0.895590760598114820, 0.895613003421024570, 0.895635244004901800, 0.895657482349690890, 0.895679718455336340, +0.895701952321782400, 0.895724183948974020, 0.895746413336854790, 0.895768640485369530, 0.895790865394462730, 0.895813088064078670, 0.895835308494161930, 0.895857526684656900, +0.895879742635508070, 0.895901956346660260, 0.895924167818057170, 0.895946377049643750, 0.895968584041364260, 0.895990788793163410, 0.896012991304985460, 0.896035191576775140, +0.896057389608477250, 0.896079585400035410, 0.896101778951394650, 0.896123970262499460, 0.896146159333294330, 0.896168346163723760, 0.896190530753732340, 0.896212713103264670, +0.896234893212265570, 0.896257071080678760, 0.896279246708449380, 0.896301420095521830, 0.896323591241840800, 0.896345760147350680, 0.896367926811996290, 0.896390091235722000, +0.896412253418472860, 0.896434413360192690, 0.896456571060826550, 0.896478726520318900, 0.896500879738614590, 0.896523030715657980, 0.896545179451393780, 0.896567325945767050, +0.896589470198721590, 0.896611612210202470, 0.896633751980154270, 0.896655889508521710, 0.896678024795249500, 0.896700157840282120, 0.896722288643564400, 0.896744417205041390, +0.896766543524656900, 0.896788667602356090, 0.896810789438083570, 0.896832909031784140, 0.896855026383402310, 0.896877141492883000, 0.896899254360171260, 0.896921364985210910, +0.896943473367947220, 0.896965579508324780, 0.896987683406288540, 0.897009785061782970, 0.897031884474752910, 0.897053981645143160, 0.897076076572898900, 0.897098169257964040, +0.897120259700283750, 0.897142347899802740, 0.897164433856465940, 0.897186517570218060, 0.897208599041003920, 0.897230678268768230, 0.897252755253456160, 0.897274829995011960, +0.897296902493380570, 0.897318972748507030, 0.897341040760335940, 0.897363106528812350, 0.897385170053880850, 0.897407231335486940, 0.897429290373574550, 0.897451347168088940, +0.897473401718974940, 0.897495454026177470, 0.897517504089641370, 0.897539551909311450, 0.897561597485132650, 0.897583640817050220, 0.897605681905008450, 0.897627720748952360, +0.897649757348826900, 0.897671791704577230, 0.897693823816147930, 0.897715853683484170, 0.897737881306530760, 0.897759906685232980, 0.897781929819535090, 0.897803950709382350, +0.897825969354719700, 0.897847985755492180, 0.897869999911644730, 0.897892011823122170, 0.897914021489870100, 0.897936028911832440, 0.897958034088954800, 0.897980037021182120, +0.898002037708459320, 0.898024036150731340, 0.898046032347943330, 0.898068026300040230, 0.898090018006967530, 0.898112007468669260, 0.898133994685091030, 0.898155979656177880, +0.898177962381874750, 0.898199942862126680, 0.898221921096878710, 0.898243897086076440, 0.898265870829664030, 0.898287842327586850, 0.898309811579790060, 0.898331778586218820, +0.898353743346818060, 0.898375705861533040, 0.898397666130308690, 0.898419624153090620, 0.898441579929822990, 0.898463533460451490, 0.898485484744921180, 0.898507433783177100, +0.898529380575164520, 0.898551325120828360, 0.898573267420114010, 0.898595207472966840, 0.898617145279331230, 0.898639080839152780, 0.898661014152376650, 0.898682945218947870, +0.898704874038811830, 0.898726800611913570, 0.898748724938198800, 0.898770647017611780, 0.898792566850098120, 0.898814484435602970, 0.898836399774071700, 0.898858312865449370, +0.898880223709681350, 0.898902132306712680, 0.898924038656489180, 0.898945942758955010, 0.898967844614056100, 0.898989744221737610, 0.899011641581944690, 0.899033536694622710, +0.899055429559716960, 0.899077320177172900, 0.899099208546935150, 0.899121094668949410, 0.899142978543161050, 0.899164860169515130, 0.899186739547957030, 0.899208616678432100, +0.899230491560885640, 0.899252364195263440, 0.899274234581509790, 0.899296102719570610, 0.899317968609391170, 0.899339832250916850, 0.899361693644092910, 0.899383552788864730, +0.899405409685177680, 0.899427264332977590, 0.899449116732208840, 0.899470966882817250, 0.899492814784748410, 0.899514660437947370, 0.899536503842359720, 0.899558344997930860, +0.899580183904606480, 0.899602020562331290, 0.899623854971051130, 0.899645687130711140, 0.899667517041257030, 0.899689344702634180, 0.899711170114787850, 0.899732993277663760, +0.899754814191207400, 0.899776632855363690, 0.899798449270078460, 0.899820263435297090, 0.899842075350964940, 0.899863885017027740, 0.899885692433430750, 0.899907497600119570, +0.899929300517040010, 0.899951101184136790, 0.899972899601355850, 0.899994695768642660, 0.900016489685942720, 0.900038281353201520, 0.900060070770364760, 0.900081857937378050, +0.900103642854186430, 0.900125425520735600, 0.900147205936971280, 0.900168984102838850, 0.900190760018284020, 0.900212533683252380, 0.900234305097689310, 0.900256074261540860, +0.900277841174751850, 0.900299605837268200, 0.900321368249035640, 0.900343128409999530, 0.900364886320105700, 0.900386641979299630, 0.900408395387527370, 0.900430146544733630, +0.900451895450864570, 0.900473642105865890, 0.900495386509682970, 0.900517128662261630, 0.900538868563547480, 0.900560606213486100, 0.900582341612023660, 0.900604074759104980, +0.900625805654676090, 0.900647534298682610, 0.900669260691070450, 0.900690984831785000, 0.900712706720772190, 0.900734426357977510, 0.900756143743347230, 0.900777858876826150, +0.900799571758360560, 0.900821282387895940, 0.900842990765378100, 0.900864696890752770, 0.900886400763965760, 0.900908102384963110, 0.900929801753689750, 0.900951498870091960, +0.900973193734115440, 0.900994886345705900, 0.901016576704809170, 0.901038264811370950, 0.901059950665337060, 0.901081634266653770, 0.901103315615265910, 0.901124994711119840, +0.901146671554161170, 0.901168346144335940, 0.901190018481589860, 0.901211688565868640, 0.901233356397118210, 0.901255021975284840, 0.901276685300313460, 0.901298346372150450, +0.901320005190741510, 0.901341661756032590, 0.901363316067969490, 0.901384968126498150, 0.901406617931564740, 0.901428265483114390, 0.901449910781093380, 0.901471553825447520, +0.901493194616122870, 0.901514833153065240, 0.901536469436220570, 0.901558103465534670, 0.901579735240953810, 0.901601364762423360, 0.901622992029889380, 0.901644617043298010, +0.901666239802595080, 0.901687860307726520, 0.901709478558638370, 0.901731094555276890, 0.901752708297587250, 0.901774319785515810, 0.901795929019008620, 0.901817535998011620, +0.901839140722470840, 0.901860743192332110, 0.901882343407541590, 0.901903941368045530, 0.901925537073789200, 0.901947130524719090, 0.901968721720781240, 0.901990310661921480, +0.902011897348085960, 0.902033481779220710, 0.902055063955271690, 0.902076643876185470, 0.902098221541907220, 0.902119796952383420, 0.902141370107560130, 0.902162941007383480, +0.902184509651799420, 0.902206076040754090, 0.902227640174193990, 0.902249202052064380, 0.902270761674311750, 0.902292319040882140, 0.902313874151721820, 0.902335427006776820, +0.902356977605993320, 0.902378525949317220, 0.902400072036695260, 0.902421615868072790, 0.902443157443396200, 0.902464696762611760, 0.902486233825665620, 0.902507768632503820, +0.902529301183072620, 0.902550831477318180, 0.902572359515187110, 0.902593885296624650, 0.902615408821577540, 0.902636930089991910, 0.902658449101813920, 0.902679965856989730, +0.902701480355465710, 0.902722992597188470, 0.902744502582103260, 0.902766010310156800, 0.902787515781295240, 0.902809018995465060, 0.902830519952612210, 0.902852018652683050, +0.902873515095623970, 0.902895009281381330, 0.902916501209900860, 0.902937990881129140, 0.902959478295012440, 0.902980963451497030, 0.903002446350529290, 0.903023926992055360, +0.903045405376021960, 0.903066881502374800, 0.903088355371060250, 0.903109826982024910, 0.903131296335215050, 0.903152763430576930, 0.903174228268056820, 0.903195690847601210, +0.903217151169156680, 0.903238609232668970, 0.903260065038084760, 0.903281518585350330, 0.903302969874412160, 0.903324418905216530, 0.903345865677709800, 0.903367310191838470, +0.903388752447549240, 0.903410192444787710, 0.903431630183500810, 0.903453065663634700, 0.903474498885135980, 0.903495929847951020, 0.903517358552026200, 0.903538784997308440, +0.903560209183743250, 0.903581631111277540, 0.903603050779857810, 0.903624468189430430, 0.903645883339941890, 0.903667296231338680, 0.903688706863567170, 0.903710115236574300, +0.903731521350305770, 0.903752925204708400, 0.903774326799728690, 0.903795726135313230, 0.903817123211408500, 0.903838518027960890, 0.903859910584916990, 0.903881300882223630, +0.903902688919826720, 0.903924074697673110, 0.903945458215709260, 0.903966839473881790, 0.903988218472137170, 0.904009595210422120, 0.904030969688683350, 0.904052341906866790, +0.904073711864919470, 0.904095079562787780, 0.904116445000418430, 0.904137808177757910, 0.904159169094752910, 0.904180527751350050, 0.904201884147496140, 0.904223238283137220, +0.904244590158220230, 0.904265939772691650, 0.904287287126498310, 0.904308632219586680, 0.904329975051903600, 0.904351315623395770, 0.904372653934009450, 0.904393989983691360, +0.904415323772388420, 0.904436655300047130, 0.904457984566614190, 0.904479311572036200, 0.904500636316260100, 0.904521958799232690, 0.904543279020900040, 0.904564596981209170, +0.904585912680106800, 0.904607226117539630, 0.904628537293454380, 0.904649846207797870, 0.904671152860516690, 0.904692457251558000, 0.904713759380867840, 0.904735059248393260, +0.904756356854081070, 0.904777652197877870, 0.904798945279730700, 0.904820236099586060, 0.904841524657391210, 0.904862810953092180, 0.904884094986636130, 0.904905376757969890, +0.904926656267040160, 0.904947933513793770, 0.904969208498177520, 0.904990481220138370, 0.905011751679623330, 0.905033019876578470, 0.905054285810951150, 0.905075549482688090, +0.905096810891736100, 0.905118070038042230, 0.905139326921553080, 0.905160581542215900, 0.905181833899977080, 0.905203083994783550, 0.905224331826582350, 0.905245577395320300, +0.905266820700944330, 0.905288061743401370, 0.905309300522638140, 0.905330537038602110, 0.905351771291239340, 0.905373003280497080, 0.905394233006322380, 0.905415460468662170, +0.905436685667463160, 0.905457908602672500, 0.905479129274237130, 0.905500347682104190, 0.905521563826220070, 0.905542777706532130, 0.905563989322987100, 0.905585198675532220, +0.905606405764114220, 0.905627610588680240, 0.905648813149177670, 0.905670013445552650, 0.905691211477752670, 0.905712407245724550, 0.905733600749415450, 0.905754791988772400, +0.905775980963742340, 0.905797167674272320, 0.905818352120309700, 0.905839534301800860, 0.905860714218693190, 0.905881891870933820, 0.905903067258469590, 0.905924240381247750, +0.905945411239215350, 0.905966579832319320, 0.905987746160507370, 0.906008910223725540, 0.906030072021921540, 0.906051231555042300, 0.906072388823034980, 0.906093543825846610, +0.906114696563424470, 0.906135847035716040, 0.906156995242667460, 0.906178141184226460, 0.906199284860340180, 0.906220426270955560, 0.906241565416019970, 0.906262702295480450, +0.906283836909284160, 0.906304969257378690, 0.906326099339710310, 0.906347227156226840, 0.906368352706875210, 0.906389475991602690, 0.906410597010356530, 0.906431715763083790, +0.906452832249732280, 0.906473946470248150, 0.906495058424579230, 0.906516168112672660, 0.906537275534475720, 0.906558380689935550, 0.906579483578999420, 0.906600584201614600, +0.906621682557728680, 0.906642778647288150, 0.906663872470240720, 0.906684964026533650, 0.906706053316114090, 0.906727140338929430, 0.906748225094926920, 0.906769307584053830, +0.906790387806257870, 0.906811465761485520, 0.906832541449684610, 0.906853614870802290, 0.906874686024785830, 0.906895754911582810, 0.906916821531140280, 0.906937885883406180, +0.906958947968326990, 0.906980007785850310, 0.907001065335923730, 0.907022120618494410, 0.907043173633509840, 0.907064224380917270, 0.907085272860664200, 0.907106319072698340, +0.907127363016966280, 0.907148404693415840, 0.907169444101994290, 0.907190481242649230, 0.907211516115327910, 0.907232548719977830, 0.907253579056546360, 0.907274607124981420, +0.907295632925229410, 0.907316656457238470, 0.907337677720955860, 0.907358696716328960, 0.907379713443305370, 0.907400727901832570, 0.907421740091858280, 0.907442750013329190, +0.907463757666193360, 0.907484763050398050, 0.907505766165890850, 0.907526767012619140, 0.907547765590530630, 0.907568761899572700, 0.907589755939693270, 0.907610747710838940, +0.907631737212957870, 0.907652724445997430, 0.907673709409905220, 0.907694692104628610, 0.907715672530115310, 0.907736650686313260, 0.907757626573169160, 0.907778600190631060, +0.907799571538646430, 0.907820540617162890, 0.907841507426127900, 0.907862471965489190, 0.907883434235194350, 0.907904394235191310, 0.907925351965426900, 0.907946307425849030, +0.907967260616405420, 0.907988211537043680, 0.908009160187711490, 0.908030106568356250, 0.908051050678925890, 0.908071992519368210, 0.908092932089630160, 0.908113869389659770, +0.908134804419404750, 0.908155737178812710, 0.908176667667831230, 0.908197595886408250, 0.908218521834491590, 0.908239445512028180, 0.908260366918966170, 0.908281286055253380, +0.908302202920837190, 0.908323117515665630, 0.908344029839686210, 0.908364939892846720, 0.908385847675095340, 0.908406753186378870, 0.908427656426645470, 0.908448557395843070, +0.908469456093919160, 0.908490352520821660, 0.908511246676498300, 0.908532138560896870, 0.908553028173965330, 0.908573915515650920, 0.908594800585901700, 0.908615683384665580, +0.908636563911890070, 0.908657442167523310, 0.908678318151512900, 0.908699191863806990, 0.908720063304352840, 0.908740932473098510, 0.908761799369991800, 0.908782663994980640, +0.908803526348012760, 0.908824386429036070, 0.908845244237998510, 0.908866099774848110, 0.908886953039532150, 0.908907804031998780, 0.908928652752195920, 0.908949499200071400, +0.908970343375573140, 0.908991185278649080, 0.909012024909247370, 0.909032862267315170, 0.909053697352800950, 0.909074530165652320, 0.909095360705817530, 0.909116188973244200, +0.909137014967880460, 0.909157838689674260, 0.909178660138573740, 0.909199479314526270, 0.909220296217480020, 0.909241110847383020, 0.909261923204183310, 0.909282733287828830, +0.909303541098267390, 0.909324346635447260, 0.909345149899316470, 0.909365950889822530, 0.909386749606913680, 0.909407546050537970, 0.909428340220643340, 0.909449132117177930, +0.909469921740089670, 0.909490709089327050, 0.909511494164837230, 0.909532276966568580, 0.909553057494469350, 0.909573835748487490, 0.909594611728570920, 0.909615385434667910, +0.909636156866726500, 0.909656926024694950, 0.909677692908520740, 0.909698457518152370, 0.909719219853537760, 0.909739979914625190, 0.909760737701362570, 0.909781493213698170, +0.909802246451580030, 0.909822997414956650, 0.909843746103775390, 0.909864492517984740, 0.909885236657532960, 0.909905978522367990, 0.909926718112438080, 0.909947455427691400, +0.909968190468076530, 0.909988923233540750, 0.910009653724032640, 0.910030381939500370, 0.910051107879892180, 0.910071831545156250, 0.910092552935240720, 0.910113272050093740, +0.910133988889664010, 0.910154703453898930, 0.910175415742747180, 0.910196125756156830, 0.910216833494076120, 0.910237538956453320, 0.910258242143236700, 0.910278943054374850, +0.910299641689815360, 0.910320338049506630, 0.910341032133397120, 0.910361723941435000, 0.910382413473568630, 0.910403100729746170, 0.910423785709916000, 0.910444468414026710, +0.910465148842025900, 0.910485826993862160, 0.910506502869483870, 0.910527176468839410, 0.910547847791876920, 0.910568516838544780, 0.910589183608791490, 0.910609848102565510, +0.910630510319814570, 0.910651170260487360, 0.910671827924532160, 0.910692483311897450, 0.910713136422531490, 0.910733787256382770, 0.910754435813399880, 0.910775082093530530, +0.910795726096723550, 0.910816367822927190, 0.910837007272089940, 0.910857644444160060, 0.910878279339086270, 0.910898911956816600, 0.910919542297300100, 0.910940170360484360, +0.910960796146318200, 0.910981419654750100, 0.911002040885728450, 0.911022659839201610, 0.911043276515118180, 0.911063890913426880, 0.911084503034075510, 0.911105112877012900, +0.911125720442187540, 0.911146325729547790, 0.911166928739042370, 0.911187529470619540, 0.911208127924227900, 0.911228724099816260, 0.911249317997332440, 0.911269909616725380, +0.911290498957943560, 0.911311086020935360, 0.911331670805649590, 0.911352253312034620, 0.911372833540038950, 0.911393411489611620, 0.911413987160700430, 0.911434560553254220, +0.911455131667221590, 0.911475700502551110, 0.911496267059191510, 0.911516831337091160, 0.911537393336199100, 0.911557953056463140, 0.911578510497832340, 0.911599065660255280, +0.911619618543680570, 0.911640169148056790, 0.911660717473332550, 0.911681263519456550, 0.911701807286377730, 0.911722348774044120, 0.911742887982404550, 0.911763424911407830, +0.911783959561002440, 0.911804491931137220, 0.911825022021760860, 0.911845549832821840, 0.911866075364269220, 0.911886598616051260, 0.911907119588116650, 0.911927638280414230, +0.911948154692892810, 0.911968668825500980, 0.911989180678187460, 0.912009690250901390, 0.912030197543590710, 0.912050702556204460, 0.912071205288691570, 0.912091705741000620, +0.912112203913080340, 0.912132699804879650, 0.912153193416347150, 0.912173684747432100, 0.912194173798082430, 0.912214660568247290, 0.912235145057875510, 0.912255627266915890, +0.912276107195317270, 0.912296584843028340, 0.912317060209998250, 0.912337533296175170, 0.912358004101508250, 0.912378472625946400, 0.912398938869438240, 0.912419402831932790, +0.912439864513378880, 0.912460323913725340, 0.912480781032921300, 0.912501235870914920, 0.912521688427655460, 0.912542138703091750, 0.912562586697172720, 0.912583032409847280, +0.912603475841064160, 0.912623916990772390, 0.912644355858921230, 0.912664792445458840, 0.912685226750334370, 0.912705658773496850, 0.912726088514895230, 0.912746515974478420, +0.912766941152195250, 0.912787364047995100, 0.912807784661826220, 0.912828202993637870, 0.912848619043378990, 0.912869032810998630, 0.912889444296445580, 0.912909853499669020, +0.912930260420617760, 0.912950665059241160, 0.912971067415487610, 0.912991467489306370, 0.913011865280646480, 0.913032260789456980, 0.913052654015686800, 0.913073044959284870, +0.913093433620200460, 0.913113819998382810, 0.913134204093780210, 0.913154585906342130, 0.913174965436017510, 0.913195342682755600, 0.913215717646505220, 0.913236090327215640, +0.913256460724836130, 0.913276828839315160, 0.913297194670602110, 0.913317558218646020, 0.913337919483396040, 0.913358278464801330, 0.913378635162810810, 0.913398989577373870, +0.913419341708439640, 0.913439691555956830, 0.913460039119874720, 0.913480384400142560, 0.913500727396709400, 0.913521068109524380, 0.913541406538536770, 0.913561742683696050, +0.913582076544950490, 0.913602408122249800, 0.913622737415543120, 0.913643064424779490, 0.913663389149908300, 0.913683711590878580, 0.913704031747639590, 0.913724349620140930, +0.913744665208330980, 0.913764978512159430, 0.913785289531575450, 0.913805598266528070, 0.913825904716966900, 0.913846208882840850, 0.913866510764099300, 0.913886810360691860, +0.913907107672567000, 0.913927402699674430, 0.913947695441963300, 0.913967985899383000, 0.913988274071882660, 0.914008559959411660, 0.914028843561919600, 0.914049124879355080, +0.914069403911667800, 0.914089680658807020, 0.914109955120721910, 0.914130227297362040, 0.914150497188676580, 0.914170764794614790, 0.914191030115126480, 0.914211293150160360, +0.914231553899665930, 0.914251812363592540, 0.914272068541889690, 0.914292322434506640, 0.914312574041392880, 0.914332823362497550, 0.914353070397770580, 0.914373315147160580, +0.914393557610617250, 0.914413797788090070, 0.914434035679528410, 0.914454271284881660, 0.914474504604099180, 0.914494735637130910, 0.914514964383925320, 0.914535190844432360, +0.914555415018601380, 0.914575636906381990, 0.914595856507723350, 0.914616073822575150, 0.914636288850886770, 0.914656501592608030, 0.914676712047687750, 0.914696920216075520, +0.914717126097721160, 0.914737329692573820, 0.914757531000583320, 0.914777730021698820, 0.914797926755870460, 0.914818121203046950, 0.914838313363178110, 0.914858503236213430, +0.914878690822102600, 0.914898876120794900, 0.914919059132240140, 0.914939239856387700, 0.914959418293187500, 0.914979594442588360, 0.914999768304540330, 0.915019939878992770, +0.915040109165895510, 0.915060276165197810, 0.915080440876849480, 0.915100603300800120, 0.915120763436999550, 0.915140921285396700, 0.915161076845941500, 0.915181230118583770, +0.915201381103272870, 0.915221529799958410, 0.915241676208590320, 0.915261820329118290, 0.915281962161491380, 0.915302101705659510, 0.915322238961572500, 0.915342373929179720, +0.915362506608431210, 0.915382636999276240, 0.915402765101664850, 0.915422890915546850, 0.915443014440871170, 0.915463135677588080, 0.915483254625647060, 0.915503371284997920, +0.915523485655590390, 0.915543597737374150, 0.915563707530298920, 0.915583815034314740, 0.915603920249370650, 0.915624023175416800, 0.915644123812402900, 0.915664222160278650, +0.915684318218993880, 0.915704411988498280, 0.915724503468742010, 0.915744592659674230, 0.915764679561244850, 0.915784764173403820, 0.915804846496100830, 0.915824926529285820, +0.915845004272908380, 0.915865079726918550, 0.915885152891266260, 0.915905223765900780, 0.915925292350772250, 0.915945358645830490, 0.915965422651025320, 0.915985484366306670, +0.916005543791624240, 0.916025600926928310, 0.916045655772168010, 0.916065708327293620, 0.916085758592254830, 0.916105806567001800, 0.916125852251484130, 0.916145895645651960, +0.916165936749455010, 0.916185975562843540, 0.916206012085766690, 0.916226046318174950, 0.916246078260018030, 0.916266107911245960, 0.916286135271808580, 0.916306160341655910, +0.916326183120737770, 0.916346203609004540, 0.916366221806405480, 0.916386237712890850, 0.916406251328410690, 0.916426262652914820, 0.916446271686353290, 0.916466278428676120, +0.916486282879833580, 0.916506285039775050, 0.916526284908450780, 0.916546282485810710, 0.916566277771804990, 0.916586270766383660, 0.916606261469496530, 0.916626249881093760, +0.916646236001125820, 0.916666219829541880, 0.916686201366292310, 0.916706180611327360, 0.916726157564596860, 0.916746132226051060, 0.916766104595639900, 0.916786074673313410, +0.916806042459022200, 0.916826007952715400, 0.916845971154343630, 0.916865932063857030, 0.916885890681205520, 0.916905847006339260, 0.916925801039208400, 0.916945752779763420, +0.916965702227953710, 0.916985649383729730, 0.917005594247041530, 0.917025536817839490, 0.917045477096073540, 0.917065415081693920, 0.917085350774650700, 0.917105284174894560, +0.917125215282374780, 0.917145144097041950, 0.917165070618846330, 0.917184994847738080, 0.917204916783667220, 0.917224836426584140, 0.917244753776439210, 0.917264668833182140, +0.917284581596763400, 0.917304492067133270, 0.917324400244241780, 0.917344306128039410, 0.917364209718476210, 0.917384111015502430, 0.917404010019068790, 0.917423906729124770, +0.917443801145620960, 0.917463693268507630, 0.917483583097735140, 0.917503470633253660, 0.917523355875013550, 0.917543238822964960, 0.917563119477058710, 0.917582997837244170, +0.917602873903472280, 0.917622747675693180, 0.917642619153857140, 0.917662488337914640, 0.917682355227815830, 0.917702219823511630, 0.917722082124951430, 0.917741942132086040, +0.917761799844865720, 0.917781655263240960, 0.917801508387162120, 0.917821359216579370, 0.917841207751443400, 0.917861053991704590, 0.917880897937312870, 0.917900739588218940, +0.917920578944373180, 0.917940416005725960, 0.917960250772227650, 0.917980083243828740, 0.917999913420479930, 0.918019741302131040, 0.918039566888732780, 0.918059390180235520, +0.918079211176589860, 0.918099029877746280, 0.918118846283654920, 0.918138660394266610, 0.918158472209531950, 0.918178281729400750, 0.918198088953823820, 0.918217893882751660, +0.918237696516134850, 0.918257496853923770, 0.918277294896068910, 0.918297090642520850, 0.918316884093230310, 0.918336675248147330, 0.918356464107222600, 0.918376250670406740, +0.918396034937650320, 0.918415816908903730, 0.918435596584117550, 0.918455373963242840, 0.918475149046229290, 0.918494921833027830, 0.918514692323589180, 0.918534460517863690, +0.918554226415802090, 0.918573990017354960, 0.918593751322472780, 0.918613510331106610, 0.918633267043206360, 0.918653021458722850, 0.918672773577606790, 0.918692523399808890, +0.918712270925279630, 0.918732016153969710, 0.918751759085829730, 0.918771499720810740, 0.918791238058862540, 0.918810974099936400, 0.918830707843982690, 0.918850439290952340, +0.918870168440795830, 0.918889895293463880, 0.918909619848907510, 0.918929342107076770, 0.918949062067922710, 0.918968779731396010, 0.918988495097447290, 0.919008208166027350, +0.919027918937086910, 0.919047627410576770, 0.919067333586447770, 0.919087037464650150, 0.919106739045134850, 0.919126438327852790, 0.919146135312754690, 0.919165829999791130, +0.919185522388913050, 0.919205212480071480, 0.919224900273216570, 0.919244585768299370, 0.919264268965270800, 0.919283949864081460, 0.919303628464682280, 0.919323304767024060, +0.919342978771057530, 0.919362650476733930, 0.919382319884003320, 0.919401986992816940, 0.919421651803125630, 0.919441314314880080, 0.919460974528031330, 0.919480632442530200, +0.919500288058327400, 0.919519941375374180, 0.919539592393620820, 0.919559241113018570, 0.919578887533518130, 0.919598531655070440, 0.919618173477626420, 0.919637813001137010, +0.919657450225553450, 0.919677085150825800, 0.919696717776905540, 0.919716348103743480, 0.919735976131290540, 0.919755601859497670, 0.919775225288315790, 0.919794846417695820, +0.919814465247589030, 0.919834081777945790, 0.919853696008717360, 0.919873307939854670, 0.919892917571308750, 0.919912524903030550, 0.919932129934970980, 0.919951732667081080, +0.919971333099312230, 0.919990931231614680, 0.920010527063939820, 0.920030120596238570, 0.920049711828462070, 0.920069300760561370, 0.920088887392487290, 0.920108471724191410, +0.920128053755624010, 0.920147633486736450, 0.920167210917479880, 0.920186786047805240, 0.920206358877663550, 0.920225929407006090, 0.920245497635783670, 0.920265063563947990, +0.920284627191449210, 0.920304188518238920, 0.920323747544268160, 0.920343304269487960, 0.920362858693849480, 0.920382410817303990, 0.920401960639802730, 0.920421508161296310, +0.920441053381735990, 0.920460596301073130, 0.920480136919258780, 0.920499675236243990, 0.920519211251980110, 0.920538744966418190, 0.920558276379509710, 0.920577805491205270, +0.920597332301456240, 0.920616856810213880, 0.920636379017429450, 0.920655898923053990, 0.920675416527038770, 0.920694931829335150, 0.920714444829894400, 0.920733955528667320, +0.920753463925605200, 0.920772970020659500, 0.920792473813781380, 0.920811975304922090, 0.920831474494032910, 0.920850971381065310, 0.920870465965969890, 0.920889958248698460, +0.920909448229201950, 0.920928935907431970, 0.920948421283339540, 0.920967904356876140, 0.920987385127992940, 0.921006863596641630, 0.921026339762772820, 0.921045813626338190, +0.921065285187289030, 0.921084754445576580, 0.921104221401152330, 0.921123686053967440, 0.921143148403973380, 0.921162608451121860, 0.921182066195363360, 0.921201521636649700, +0.921220974774932370, 0.921240425610162510, 0.921259874142291490, 0.921279320371270920, 0.921298764297052370, 0.921318205919586570, 0.921337645238825220, 0.921357082254719790, +0.921376516967221670, 0.921395949376282220, 0.921415379481852930, 0.921434807283885160, 0.921454232782330740, 0.921473655977140370, 0.921493076868265870, 0.921512495455658720, +0.921531911739270290, 0.921551325719052070, 0.921570737394955540, 0.921590146766932520, 0.921609553834933810, 0.921628958598911140, 0.921648361058816090, 0.921667761214600260, +0.921687159066214900, 0.921706554613611730, 0.921725947856742110, 0.921745338795557980, 0.921764727430010140, 0.921784113760050540, 0.921803497785630640, 0.921822879506701940, +0.921842258923216140, 0.921861636035124610, 0.921881010842379060, 0.921900383344931180, 0.921919753542732150, 0.921939121435733640, 0.921958487023887390, 0.921977850307144960, +0.921997211285457860, 0.922016569958777680, 0.922035926327056440, 0.922055280390245090, 0.922074632148295550, 0.922093981601159410, 0.922113328748788260, 0.922132673591133820, +0.922152016128147680, 0.922171356359781540, 0.922190694285987320, 0.922210029906716080, 0.922229363221919730, 0.922248694231549980, 0.922268022935558430, 0.922287349333896890, +0.922306673426516950, 0.922325995213370330, 0.922345314694409170, 0.922364631869584280, 0.922383946738847830, 0.922403259302151500, 0.922422569559447010, 0.922441877510686070, +0.922461183155820490, 0.922480486494802300, 0.922499787527582550, 0.922519086254113270, 0.922538382674346290, 0.922557676788233420, 0.922576968595726350, 0.922596258096776810, +0.922615545291336600, 0.922634830179357990, 0.922654112760791900, 0.922673393035590480, 0.922692671003705670, 0.922711946665089040, 0.922731220019692660, 0.922750491067468200, +0.922769759808367840, 0.922789026242342820, 0.922808290369345090, 0.922827552189326770, 0.922846811702239480, 0.922866068908035240, 0.922885323806665770, 0.922904576398082990, +0.922923826682239160, 0.922943074659085430, 0.922962320328573950, 0.922981563690656650, 0.923000804745285450, 0.923020043492412290, 0.923039279931989090, 0.923058514063967550, +0.923077745888300160, 0.923096975404937960, 0.923116202613833430, 0.923135427514938380, 0.923154650108204740, 0.923173870393584450, 0.923193088371029540, 0.923212304040492150, +0.923231517401923770, 0.923250728455276560, 0.923269937200502430, 0.923289143637553540, 0.923308347766381820, 0.923327549586939190, 0.923346749099177800, 0.923365946303049690, +0.923385141198506560, 0.923404333785500460, 0.923423524063983540, 0.923442712033907820, 0.923461897695225350, 0.923481081047888060, 0.923500262091848430, 0.923519440827057840, +0.923538617253468640, 0.923557791371033000, 0.923576963179702730, 0.923596132679430080, 0.923615299870167110, 0.923634464751865950, 0.923653627324478870, 0.923672787587957460, +0.923691945542254090, 0.923711101187320800, 0.923730254523109750, 0.923749405549573080, 0.923768554266662930, 0.923787700674331360, 0.923806844772530940, 0.923825986561213060, +0.923845126040330090, 0.923864263209834390, 0.923883398069678120, 0.923902530619813200, 0.923921660860192010, 0.923940788790767020, 0.923959914411489720, 0.923979037722312710, +0.923998158723188020, 0.924017277414067920, 0.924036393794904650, 0.924055507865650380, 0.924074619626257370, 0.924093729076678190, 0.924112836216864240, 0.924131941046768320, +0.924151043566342480, 0.924170143775538970, 0.924189241674310160, 0.924208337262608310, 0.924227430540385590, 0.924246521507594570, 0.924265610164186960, 0.924284696510115240, +0.924303780545331910, 0.924322862269788990, 0.924341941683439080, 0.924361018786234220, 0.924380093578127120, 0.924399166059069470, 0.924418236229013980, 0.924437304087912800, +0.924456369635718420, 0.924475432872383100, 0.924494493797859200, 0.924513552412099090, 0.924532608715055380, 0.924551662706679880, 0.924570714386925170, 0.924589763755743640, +0.924608810813087770, 0.924627855558909810, 0.924646897993162350, 0.924665938115797780, 0.924684975926768240, 0.924704011426026100, 0.924723044613523950, 0.924742075489214280, +0.924761104053049340, 0.924780130304981740, 0.924799154244963730, 0.924818175872948120, 0.924837195188886850, 0.924856212192732510, 0.924875226884437680, 0.924894239263954750, +0.924913249331236310, 0.924932257086234720, 0.924951262528902360, 0.924970265659192270, 0.924989266477056260, 0.925008264982447040, 0.925027261175317080, 0.925046255055618990, +0.925065246623305360, 0.925084235878328440, 0.925103222820641390, 0.925122207450195910, 0.925141189766944930, 0.925160169770841030, 0.925179147461836600, 0.925198122839884340, +0.925217095904936840, 0.925236066656946580, 0.925255035095866370, 0.925274001221648380, 0.925292965034245300, 0.925311926533609830, 0.925330885719694570, 0.925349842592452120, +0.925368797151834950, 0.925387749397795890, 0.925406699330287740, 0.925425646949262550, 0.925444592254673240, 0.925463535246472400, 0.925482475924612750, 0.925501414289046860, +0.925520350339727570, 0.925539284076607680, 0.925558215499639240, 0.925577144608775160, 0.925596071403968380, 0.925614995885171270, 0.925633918052336750, 0.925652837905417410, +0.925671755444366080, 0.925690670669135570, 0.925709583579678140, 0.925728494175946710, 0.925747402457894000, 0.925766308425472810, 0.925785212078635840, 0.925804113417335930, +0.925823012441525980, 0.925841909151158160, 0.925860803546185610, 0.925879695626561030, 0.925898585392237240, 0.925917472843166940, 0.925936357979303070, 0.925955240800598210, +0.925974121307005520, 0.925992999498477350, 0.926011875374966540, 0.926030748936426120, 0.926049620182808790, 0.926068489114067470, 0.926087355730154880, 0.926106220031023940, +0.926125082016627690, 0.926143941686918490, 0.926162799041849390, 0.926181654081373320, 0.926200506805443080, 0.926219357214011610, 0.926238205307031830, 0.926257051084456770, +0.926275894546238710, 0.926294735692331010, 0.926313574522686370, 0.926332411037257830, 0.926351245235998320, 0.926370077118860660, 0.926388906685797870, 0.926407733936763010, +0.926426558871708550, 0.926445381490587750, 0.926464201793353430, 0.926483019779958620, 0.926501835450356250, 0.926520648804499360, 0.926539459842340760, 0.926558268563833830, +0.926577074968931050, 0.926595879057585450, 0.926614680829750180, 0.926633480285378170, 0.926652277424422470, 0.926671072246836090, 0.926689864752572420, 0.926708654941583720, +0.926727442813823350, 0.926746228369244470, 0.926765011607799890, 0.926783792529442870, 0.926802571134126340, 0.926821347421803440, 0.926840121392427440, 0.926858893045950820, +0.926877662382326940, 0.926896429401508850, 0.926915194103449800, 0.926933956488102730, 0.926952716555420770, 0.926971474305357310, 0.926990229737864930, 0.927008982852896900, +0.927027733650406470, 0.927046482130346570, 0.927065228292670570, 0.927083972137331510, 0.927102713664282540, 0.927121452873477030, 0.927140189764867670, 0.927158924338407740, +0.927177656594050490, 0.927196386531749180, 0.927215114151456850, 0.927233839453126760, 0.927252562436712060, 0.927271283102166330, 0.927290001449441960, 0.927308717478492640, +0.927327431189271520, 0.927346142581731870, 0.927364851655826830, 0.927383558411509660, 0.927402262848733950, 0.927420964967452190, 0.927439664767618080, 0.927458362249184760, +0.927477057412105620, 0.927495750256333800, 0.927514440781822550, 0.927533128988525250, 0.927551814876395380, 0.927570498445385750, 0.927589179695449740, 0.927607858626540940, +0.927626535238612380, 0.927645209531617550, 0.927663881505509710, 0.927682551160242120, 0.927701218495768480, 0.927719883512041490, 0.927738546209014750, 0.927757206586641630, +0.927775864644875600, 0.927794520383669830, 0.927813173802977790, 0.927831824902753070, 0.927850473682948480, 0.927869120143517740, 0.927887764284414220, 0.927906406105591270, +0.927925045607002400, 0.927943682788600730, 0.927962317650339990, 0.927980950192173750, 0.927999580414054840, 0.928018208315936840, 0.928036833897773470, 0.928055457159517980, +0.928074078101123860, 0.928092696722544460, 0.928111313023733730, 0.928129927004644360, 0.928148538665230170, 0.928167148005444640, 0.928185755025241250, 0.928204359724573490, +0.928222962103394830, 0.928241562161658650, 0.928260159899318980, 0.928278755316328640, 0.928297348412641330, 0.928315939188210650, 0.928334527642990180, 0.928353113776933410, +0.928371697589993830, 0.928390279082124900, 0.928408858253280680, 0.928427435103414080, 0.928446009632478700, 0.928464581840428460, 0.928483151727216740, 0.928501719292797120, +0.928520284537123100, 0.928538847460148810, 0.928557408061827070, 0.928575966342111810, 0.928594522300956630, 0.928613075938315100, 0.928631627254140950, 0.928650176248387640, +0.928668722921008990, 0.928687267271958830, 0.928705809301190070, 0.928724349008656970, 0.928742886394312910, 0.928761421458111580, 0.928779954200006700, 0.928798484619952070, +0.928817012717901400, 0.928835538493807960, 0.928854061947625650, 0.928872583079308200, 0.928891101888809300, 0.928909618376082550, 0.928928132541081860, 0.928946644383760840, +0.928965153904073530, 0.928983661101972950, 0.929002165977413250, 0.929020668530348150, 0.929039168760731340, 0.929057666668516640, 0.929076162253657860, 0.929094655516108590, +0.929113146455822990, 0.929131635072754200, 0.929150121366856260, 0.929168605338083100, 0.929187086986388410, 0.929205566311726020, 0.929224043314049730, 0.929242517993313700, +0.929260990349470960, 0.929279460382475770, 0.929297928092281960, 0.929316393478843210, 0.929334856542113560, 0.929353317282046840, 0.929371775698596750, 0.929390231791717540, +0.929408685561362470, 0.929427137007485690, 0.929445586130041020, 0.929464032928982390, 0.929482477404263710, 0.929500919555838800, 0.929519359383661590, 0.929537796887686340, +0.929556232067866310, 0.929574664924155640, 0.929593095456508260, 0.929611523664878200, 0.929629949549219400, 0.929648373109485560, 0.929666794345631260, 0.929685213257609670, +0.929703629845374910, 0.929722044108881150, 0.929740456048082310, 0.929758865662932310, 0.929777272953385080, 0.929795677919394770, 0.929814080560915520, 0.929832480877900710, +0.929850878870304820, 0.929869274538081660, 0.929887667881185260, 0.929906058899569790, 0.929924447593189150, 0.929942833961997730, 0.929961218005948780, 0.929979599724996890, +0.929997979119095990, 0.930016356188200220, 0.930034730932263410, 0.930053103351239810, 0.930071473445083560, 0.930089841213748820, 0.930108206657189300, 0.930126569775359120, +0.930144930568212570, 0.930163289035703670, 0.930181645177786560, 0.930199998994415410, 0.930218350485544130, 0.930236699651127430, 0.930255046491118560, 0.930273391005472130, +0.930291733194142270, 0.930310073057083020, 0.930328410594248530, 0.930346745805593070, 0.930365078691071100, 0.930383409250636010, 0.930401737484242490, 0.930420063391844580, +0.930438386973396540, 0.930456708228852510, 0.930475027158166770, 0.930493343761293450, 0.930511658038187030, 0.930529969988801110, 0.930548279613090390, 0.930566586911008910, +0.930584891882510920, 0.930603194527550800, 0.930621494846082590, 0.930639792838060750, 0.930658088503439670, 0.930676381842173050, 0.930694672854215480, 0.930712961539521210, +0.930731247898044620, 0.930749531929739860, 0.930767813634561290, 0.930786093012463510, 0.930804370063400110, 0.930822644787325790, 0.930840917184194930, 0.930859187253961770, +0.930877454996580590, 0.930895720412005860, 0.930913983500191720, 0.930932244261093000, 0.930950502694663400, 0.930968758800857500, 0.930987012579629680, 0.931005264030934310, +0.931023513154725760, 0.931041759950958500, 0.931060004419587140, 0.931078246560565480, 0.931096486373848120, 0.931114723859389650, 0.931132959017144320, 0.931151191847066630, +0.931169422349110820, 0.931187650523231600, 0.931205876369383570, 0.931224099887520420, 0.931242321077597190, 0.931260539939568030, 0.931278756473387540, 0.931296970679010180, +0.931315182556390340, 0.931333392105482600, 0.931351599326241670, 0.931369804218621480, 0.931388006782576720, 0.931406207018061980, 0.931424404925031650, 0.931442600503440410, +0.931460793753242640, 0.931478984674393160, 0.931497173266845890, 0.931515359530555750, 0.931533543465477230, 0.931551725071564810, 0.931569904348773070, 0.931588081297056500, +0.931606255916369810, 0.931624428206667800, 0.931642598167904400, 0.931660765800034540, 0.931678931103012700, 0.931697094076793570, 0.931715254721331650, 0.931733413036581640, +0.931751569022498120, 0.931769722679036020, 0.931787874006149150, 0.931806023003792780, 0.931824169671921280, 0.931842314010489340, 0.931860456019451560, 0.931878595698762750, +0.931896733048377720, 0.931914868068250520, 0.931933000758336180, 0.931951131118589290, 0.931969259148964560, 0.931987384849416790, 0.932005508219900470, 0.932023629260370410, +0.932041747970781650, 0.932059864351088120, 0.932077978401244960, 0.932096090121206870, 0.932114199510928550, 0.932132306570364720, 0.932150411299470070, 0.932168513698199750, +0.932186613766507800, 0.932204711504349360, 0.932222806911679140, 0.932240899988451940, 0.932258990734622480, 0.932277079150145460, 0.932295165234975800, 0.932313248989068530, +0.932331330412377920, 0.932349409504858890, 0.932367486266466260, 0.932385560697155060, 0.932403632796879880, 0.932421702565595640, 0.932439770003257170, 0.932457835109819500, +0.932475897885236990, 0.932493958329464800, 0.932512016442457630, 0.932530072224170390, 0.932548125674558030, 0.932566176793575340, 0.932584225581177590, 0.932602272037318820, +0.932620316161954510, 0.932638357955039350, 0.932656397416528280, 0.932674434546376220, 0.932692469344538090, 0.932710501810968820, 0.932728531945623550, 0.932746559748456660, +0.932764585219423400, 0.932782608358478590, 0.932800629165577380, 0.932818647640674570, 0.932836663783725100, 0.932854677594683880, 0.932872689073506400, 0.932890698220146920, +0.932908705034560580, 0.932926709516702530, 0.932944711666527820, 0.932962711483991130, 0.932980708969047830, 0.932998704121652980, 0.933016696941761040, 0.933034687429327380, +0.933052675584307050, 0.933070661406654960, 0.933088644896326260, 0.933106626053275990, 0.933124604877459070, 0.933142581368830990, 0.933160555527346110, 0.933178527352959920, +0.933196496845627330, 0.933214464005303610, 0.933232428831943570, 0.933250391325502580, 0.933268351485935900, 0.933286309313198000, 0.933304264807244380, 0.933322217968030050, +0.933340168795510180, 0.933358117289639910, 0.933376063450374270, 0.933394007277668520, 0.933411948771478150, 0.933429887931757520, 0.933447824758462220, 0.933465759251547290, +0.933483691410967990, 0.933501621236679460, 0.933519548728636850, 0.933537473886795420, 0.933555396711110540, 0.933573317201536910, 0.933591235358030010, 0.933609151180544990, +0.933627064669037110, 0.933644975823461620, 0.933662884643773560, 0.933680791129928740, 0.933698695281881540, 0.933716597099587650, 0.933734496583002230, 0.933752393732080520, +0.933770288546777900, 0.933788181027049640, 0.933806071172850750, 0.933823958984137170, 0.933841844460863270, 0.933859727602984750, 0.933877608410456970, 0.933895486883235090, +0.933913363021274590, 0.933931236824530610, 0.933949108292958850, 0.933966977426514020, 0.933984844225151820, 0.934002708688827400, 0.934020570817496340, 0.934038430611113800, +0.934056288069635140, 0.934074143193015740, 0.934091995981211400, 0.934109846434176610, 0.934127694551867280, 0.934145540334238800, 0.934163383781246300, 0.934181224892845500, +0.934199063668991530, 0.934216900109639980, 0.934234734214746450, 0.934252565984265760, 0.934270395418153710, 0.934288222516365560, 0.934306047278857020, 0.934323869705583230, +0.934341689796499790, 0.934359507551562500, 0.934377322970726070, 0.934395136053946310, 0.934412946801178810, 0.934430755212378840, 0.934448561287501980, 0.934466365026503820, +0.934484166429339740, 0.934501965495965430, 0.934519762226336040, 0.934537556620407160, 0.934555348678134390, 0.934573138399473200, 0.934590925784379300, 0.934608710832807940, +0.934626493544714940, 0.934644273920055890, 0.934662051958785930, 0.934679827660860880, 0.934697601026236110, 0.934715372054867540, 0.934733140746710320, 0.934750907101720370, +0.934768671119853510, 0.934786432801064550, 0.934804192145309630, 0.934821949152544130, 0.934839703822723740, 0.934857456155804180, 0.934875206151740910, 0.934892953810489760, +0.934910699132006420, 0.934928442116246040, 0.934946182763164550, 0.934963921072717530, 0.934981657044860800, 0.934999390679549960, 0.935017121976740580, 0.935034850936388720, +0.935052577558449390, 0.935070301842878650, 0.935088023789632180, 0.935105743398665590, 0.935123460669934680, 0.935141175603395160, 0.935158888199002610, 0.935176598456713190, +0.935194306376482040, 0.935212011958264980, 0.935229715202018030, 0.935247416107696680, 0.935265114675256860, 0.935282810904654260, 0.935300504795844590, 0.935318196348783990, +0.935335885563427620, 0.935353572439731500, 0.935371256977651440, 0.935388939177143160, 0.935406619038162690, 0.935424296560665610, 0.935441971744608080, 0.935459644589945350, +0.935477315096633450, 0.935494983264628320, 0.935512649093885650, 0.935530312584361480, 0.935547973736011400, 0.935565632548791440, 0.935583289022657750, 0.935600943157565480, +0.935618594953470880, 0.935636244410329780, 0.935653891528098080, 0.935671536306731720, 0.935689178746186400, 0.935706818846418150, 0.935724456607383240, 0.935742092029036800, +0.935759725111335210, 0.935777355854234270, 0.935794984257689920, 0.935812610321658080, 0.935830234046094780, 0.935847855430956170, 0.935865474476197610, 0.935883091181775370, +0.935900705547645370, 0.935918317573763650, 0.935935927260086120, 0.935953534606568830, 0.935971139613167690, 0.935988742279838970, 0.936006342606538030, 0.936023940593221360, +0.936041536239844760, 0.936059129546364390, 0.936076720512736050, 0.936094309138916000, 0.936111895424860510, 0.936129479370524930, 0.936147060975865750, 0.936164640240838790, +0.936182217165400290, 0.936199791749506290, 0.936217363993112730, 0.936234933896175740, 0.936252501458651800, 0.936270066680496280, 0.936287629561665670, 0.936305190102115880, +0.936322748301803070, 0.936340304160683480, 0.936357857678713160, 0.936375408855848130, 0.936392957692044890, 0.936410504187259020, 0.936428048341446770, 0.936445590154564410, +0.936463129626568190, 0.936480666757414040, 0.936498201547058320, 0.936515733995457290, 0.936533264102566760, 0.936550791868342890, 0.936568317292742150, 0.936585840375720680, +0.936603361117234520, 0.936620879517239930, 0.936638395575693170, 0.936655909292550830, 0.936673420667768260, 0.936690929701302190, 0.936708436393108860, 0.936725940743144410, +0.936743442751365010, 0.936760942417727120, 0.936778439742186890, 0.936795934724700800, 0.936813427365224550, 0.936830917663714740, 0.936848405620127720, 0.936865891234419550, +0.936883374506546800, 0.936900855436465510, 0.936918334024132380, 0.936935810269503230, 0.936953284172534430, 0.936970755733182450, 0.936988224951403550, 0.937005691827154210, +0.937023156360390570, 0.937040618551069020, 0.937058078399146230, 0.937075535904577930, 0.937092991067320800, 0.937110443887331220, 0.937127894364565560, 0.937145342498980070, +0.937162788290531350, 0.937180231739175860, 0.937197672844869540, 0.937215111607568980, 0.937232548027230660, 0.937249982103810940, 0.937267413837266420, 0.937284843227553230, +0.937302270274627980, 0.937319694978447360, 0.937337117338967070, 0.937354537356144160, 0.937371955029934870, 0.937389370360295570, 0.937406783347182970, 0.937424193990553430, +0.937441602290363330, 0.937459008246569580, 0.937476411859128000, 0.937493813127995290, 0.937511212053128150, 0.937528608634482950, 0.937546002872016280, 0.937563394765684510, +0.937580784315444670, 0.937598171521252470, 0.937615556383064930, 0.937632938900838430, 0.937650319074529560, 0.937667696904095020, 0.937685072389491060, 0.937702445530674610, +0.937719816327602150, 0.937737184780230050, 0.937754550888514780, 0.937771914652413270, 0.937789276071882010, 0.937806635146877450, 0.937823991877356320, 0.937841346263275310, +0.937858698304591120, 0.937876048001259900, 0.937893395353238570, 0.937910740360483830, 0.937928083022952160, 0.937945423340600270, 0.937962761313384850, 0.937980096941262830, +0.937997430224190350, 0.938014761162124230, 0.938032089755021170, 0.938049416002837870, 0.938066739905531130, 0.938084061463057450, 0.938101380675373630, 0.938118697542436710, +0.938136012064202720, 0.938153324240628690, 0.938170634071671340, 0.938187941557287350, 0.938205246697433660, 0.938222549492066740, 0.938239849941143730, 0.938257148044620900, +0.938274443802455060, 0.938291737214603240, 0.938309028281022030, 0.938326317001668240, 0.938343603376498690, 0.938360887405470080, 0.938378169088539550, 0.938395448425663360, +0.938412725416798540, 0.938430000061901910, 0.938447272360930170, 0.938464542313840360, 0.938481809920589160, 0.938499075181133510, 0.938516338095430340, 0.938533598663436110, +0.938550856885107860, 0.938568112760402530, 0.938585366289276800, 0.938602617471687720, 0.938619866307592090, 0.938637112796947170, 0.938654356939709110, 0.938671598735835170, +0.938688838185282150, 0.938706075288007090, 0.938723310043966810, 0.938740542453118330, 0.938757772515418480, 0.938775000230824500, 0.938792225599292650, 0.938809448620780310, +0.938826669295244280, 0.938843887622641700, 0.938861103602929290, 0.938878317236064190, 0.938895528522003200, 0.938912737460703810, 0.938929944052122160, 0.938947148296215730, +0.938964350192941330, 0.938981549742256230, 0.938998746944117110, 0.939015941798481140, 0.939033134305305660, 0.939050324464547060, 0.939067512276162590, 0.939084697740109390, +0.939101880856344380, 0.939119061624824720, 0.939136240045507440, 0.939153416118349570, 0.939170589843308370, 0.939187761220340420, 0.939204930249403100, 0.939222096930453440, +0.939239261263448480, 0.939256423248345460, 0.939273582885101320, 0.939290740173673640, 0.939307895114018690, 0.939325047706094040, 0.939342197949856740, 0.939359345845263930, +0.939376491392272860, 0.939393634590840470, 0.939410775440924000, 0.939427913942480930, 0.939445050095467750, 0.939462183899841930, 0.939479315355560730, 0.939496444462581180, +0.939513571220860540, 0.939530695630355960, 0.939547817691024580, 0.939564937402824100, 0.939582054765710880, 0.939599169779642530, 0.939616282444576290, 0.939633392760469310, +0.939650500727278850, 0.939667606344962160, 0.939684709613476720, 0.939701810532779240, 0.939718909102827180, 0.939736005323577930, 0.939753099194988620, 0.939770190717016510, +0.939787279889618970, 0.939804366712753250, 0.939821451186376940, 0.939838533310446640, 0.939855613084920050, 0.939872690509754420, 0.939889765584907110, 0.939906838310335280, +0.939923908685996400, 0.939940976711848060, 0.939958042387846970, 0.939975105713950820, 0.939992166690116870, 0.940009225316302490, 0.940026281592465040, 0.940043335518561900, +0.940060387094550420, 0.940077436320388320, 0.940094483196032280, 0.940111527721440020, 0.940128569896569010, 0.940145609721376510, 0.940162647195819990, 0.940179682319856940, +0.940196715093444600, 0.940213745516540690, 0.940230773589102230, 0.940247799311086820, 0.940264822682451930, 0.940281843703154930, 0.940298862373153410, 0.940315878692404630, +0.940332892660866500, 0.940349904278495850, 0.940366913545250480, 0.940383920461087760, 0.940400925025965280, 0.940417927239840410, 0.940434927102670850, 0.940451924614413850, +0.940468919775027450, 0.940485912584468340, 0.940502903042694460, 0.940519891149663390, 0.940536876905332610, 0.940553860309659600, 0.940570841362601940, 0.940587820064117120, +0.940604796414163060, 0.940621770412696790, 0.940638742059676130, 0.940655711355058430, 0.940672678298801630, 0.940689642890863100, 0.940706605131200410, 0.940723565019771500, +0.940740522556533400, 0.940757477741444030, 0.940774430574460860, 0.940791381055541720, 0.940808329184644080, 0.940825274961725630, 0.940842218386744090, 0.940859159459657150, +0.940876098180422060, 0.940893034548996750, 0.940909968565338820, 0.940926900229406060, 0.940943829541155960, 0.940960756500546340, 0.940977681107535100, 0.940994603362079300, +0.941011523264137060, 0.941028440813665990, 0.941045356010623890, 0.941062268854968350, 0.941079179346657080, 0.941096087485647880, 0.941112993271898790, 0.941129896705366950, +0.941146797786010400, 0.941163696513786730, 0.941180592888653860, 0.941197486910569590, 0.941214378579491530, 0.941231267895377590, 0.941248154858185690, 0.941265039467873100, +0.941281921724397950, 0.941298801627718060, 0.941315679177791130, 0.941332554374574970, 0.941349427218027390, 0.941366297708106650, 0.941383165844769780, 0.941400031627975030, +0.941416895057680110, 0.941433756133843060, 0.941450614856421560, 0.941467471225373550, 0.941484325240656950, 0.941501176902229680, 0.941518026210049320, 0.941534873164073800, +0.941551717764261160, 0.941568560010569100, 0.941585399902955760, 0.941602237441378940, 0.941619072625796470, 0.941635905456166600, 0.941652735932446690, 0.941669564054594900, +0.941686389822569250, 0.941703213236327660, 0.941720034295827960, 0.941736853001028160, 0.941753669351886650, 0.941770483348360550, 0.941787294990408250, 0.941804104277987770, +0.941820911211057040, 0.941837715789573980, 0.941854518013496620, 0.941871317882783000, 0.941888115397391370, 0.941904910557279210, 0.941921703362404770, 0.941938493812725990, +0.941955281908200990, 0.941972067648787830, 0.941988851034444520, 0.942005632065129330, 0.942022410740799730, 0.942039187061414210, 0.942055961026930570, 0.942072732637307180, +0.942089501892501850, 0.942106268792472830, 0.942123033337178170, 0.942139795526576120, 0.942156555360624370, 0.942173312839281190, 0.942190067962504820, 0.942206820730253190, +0.942223571142484450, 0.942240319199156850, 0.942257064900228540, 0.942273808245657760, 0.942290549235402120, 0.942307287869420200, 0.942324024147670030, 0.942340758070109860, +0.942357489636697740, 0.942374218847391810, 0.942390945702150760, 0.942407670200931970, 0.942424392343694130, 0.942441112130395160, 0.942457829560993440, 0.942474544635447220, +0.942491257353714640, 0.942507967715753850, 0.942524675721523430, 0.942541381370981090, 0.942558084664085190, 0.942574785600794220, 0.942591484181066200, 0.942608180404859500, +0.942624874272132370, 0.942641565782842970, 0.942658254936949990, 0.942674941734411130, 0.942691626175184870, 0.942708308259229580, 0.942724987986503500, 0.942741665356964910, +0.942758340370572160, 0.942775013027283950, 0.942791683327057760, 0.942808351269852520, 0.942825016855626250, 0.942841680084337550, 0.942858340955944670, 0.942874999470405870, +0.942891655627679630, 0.942908309427724410, 0.942924960870498260, 0.942941609955959660, 0.942958256684067080, 0.942974901054778770, 0.942991543068053330, 0.943008182723848900, +0.943024820022124400, 0.943041454962837530, 0.943058087545947000, 0.943074717771411280, 0.943091345639188730, 0.943107971149237830, 0.943124594301517070, 0.943141215095984810, +0.943157833532599740, 0.943174449611319800, 0.943191063332103790, 0.943207674694910070, 0.943224283699697130, 0.943240890346423560, 0.943257494635047710, 0.943274096565528190, +0.943290696137823680, 0.943307293351892120, 0.943323888207692420, 0.943340480705182840, 0.943357070844322190, 0.943373658625068830, 0.943390244047381370, 0.943406827111218480, +0.943423407816538330, 0.943439986163299600, 0.943456562151460900, 0.943473135780980800, 0.943489707051817890, 0.943506275963930660, 0.943522842517277800, 0.943539406711818130, +0.943555968547509670, 0.943572528024311240, 0.943589085142181540, 0.943605639901079040, 0.943622192300962450, 0.943638742341790460, 0.943655290023521550, 0.943671835346114760, +0.943688378309528010, 0.943704918913720440, 0.943721457158650520, 0.943737993044276860, 0.943754526570558360, 0.943771057737453400, 0.943787586544921230, 0.943804112992919770, +0.943820637081407950, 0.943837158810344580, 0.943853678179688350, 0.943870195189397850, 0.943886709839431900, 0.943903222129749200, 0.943919732060308770, 0.943936239631068650, +0.943952744841987880, 0.943969247693025370, 0.943985748184139720, 0.944002246315289620, 0.944018742086433990, 0.944035235497531770, 0.944051726548541080, 0.944068215239421190, +0.944084701570130690, 0.944101185540628500, 0.944117667150873310, 0.944134146400824050, 0.944150623290439310, 0.944167097819678340, 0.944183569988499280, 0.944200039796861290, +0.944216507244723280, 0.944232972332043950, 0.944249435058782230, 0.944265895424896920, 0.944282353430346830, 0.944298809075091230, 0.944315262359088250, 0.944331713282297150, +0.944348161844676740, 0.944364608046185940, 0.944381051886783560, 0.944397493366428640, 0.944413932485080210, 0.944430369242696740, 0.944446803639237280, 0.944463235674660840, +0.944479665348926250, 0.944496092661992640, 0.944512517613818600, 0.944528940204363400, 0.944545360433586170, 0.944561778301445170, 0.944578193807899760, 0.944594606952908870, +0.944611017736431410, 0.944627426158426430, 0.944643832218852840, 0.944660235917670120, 0.944676637254836420, 0.944693036230311090, 0.944709432844053180, 0.944725827096021710, +0.944742218986175720, 0.944758608514474130, 0.944774995680875970, 0.944791380485340730, 0.944807762927826640, 0.944824143008293200, 0.944840520726699440, 0.944856896083004270, +0.944873269077166960, 0.944889639709146410, 0.944906007978901790, 0.944922373886392440, 0.944938737431576860, 0.944955098614414510, 0.944971457434864330, 0.944987813892885550, +0.945004167988437230, 0.945020519721478380, 0.945036869091968600, 0.945053216099866370, 0.945069560745131150, 0.945085903027722000, 0.945102242947598040, 0.945118580504718530, +0.945134915699042510, 0.945151248530529230, 0.945167578999138170, 0.945183907104827800, 0.945200232847557720, 0.945216556227287060, 0.945232877243974980, 0.945249195897580720, +0.945265512188063430, 0.945281826115382360, 0.945298137679497000, 0.945314446880366140, 0.945330753717949060, 0.945347058192205100, 0.945363360303093540, 0.945379660050573500, +0.945395957434604360, 0.945412252455145600, 0.945428545112155900, 0.945444835405594870, 0.945461123335421760, 0.945477408901595820, 0.945493692104076410, 0.945509972942822690, +0.945526251417794120, 0.945542527528950180, 0.945558801276249580, 0.945575072659652020, 0.945591341679116850, 0.945607608334603220, 0.945623872626070620, 0.945640134553478280, +0.945656394116785930, 0.945672651315952350, 0.945688906150937040, 0.945705158621699570, 0.945721408728199210, 0.945737656470395200, 0.945753901848247150, 0.945770144861714400, +0.945786385510756440, 0.945802623795332310, 0.945818859715401580, 0.945835093270923740, 0.945851324461858160, 0.945867553288164300, 0.945883779749801530, 0.945900003846729230, +0.945916225578907310, 0.945932444946294470, 0.945948661948850630, 0.945964876586535050, 0.945981088859307320, 0.945997298767126790, 0.946013506309953070, 0.946029711487745840, +0.946045914300464030, 0.946062114748067560, 0.946078312830515690, 0.946094508547768110, 0.946110701899784190, 0.946126892886523520, 0.946143081507945680, 0.946159267764010380, +0.946175451654676540, 0.946191633179904180, 0.946207812339652790, 0.946223989133881730, 0.946240163562550810, 0.946256335625619390, 0.946272505323047190, 0.946288672654793990, +0.946304837620818850, 0.946321000221081570, 0.946337160455541840, 0.946353318324159140, 0.946369473826893290, 0.946385626963703650, 0.946401777734550140, 0.946417926139392020, +0.946434072178189090, 0.946450215850900940, 0.946466357157487280, 0.946482496097907690, 0.946498632672121860, 0.946514766880089510, 0.946530898721770540, 0.946547028197124000, +0.946563155306109790, 0.946579280048687850, 0.946595402424817660, 0.946611522434458900, 0.946627640077571390, 0.946643755354115050, 0.946659868264049020, 0.946675978807333340, +0.946692086983927710, 0.946708192793791930, 0.946724296236885590, 0.946740397313168500, 0.946756496022600480, 0.946772592365141440, 0.946788686340750640, 0.946804777949388110, +0.946820867191013770, 0.946836954065587100, 0.946853038573068130, 0.946869120713416560, 0.946885200486592190, 0.946901277892555070, 0.946917352931264440, 0.946933425602680570, +0.946949495906763030, 0.946965563843471750, 0.946981629412766530, 0.946997692614607310, 0.947013753448954110, 0.947029811915766300, 0.947045868015003900, 0.947061921746626840, +0.947077973110594940, 0.947094022106868110, 0.947110068735406260, 0.947126112996169220, 0.947142154889117240, 0.947158194414209560, 0.947174231571406340, 0.947190266360667610, +0.947206298781953170, 0.947222328835223060, 0.947238356520437090, 0.947254381837555170, 0.947270404786537570, 0.947286425367343750, 0.947302443579933870, 0.947318459424267840, +0.947334472900305700, 0.947350484008007370, 0.947366492747332760, 0.947382499118242240, 0.947398503120695290, 0.947414504754651940, 0.947430504020072450, 0.947446500916916620, +0.947462495445144490, 0.947478487604716200, 0.947494477395591670, 0.947510464817731270, 0.947526449871094360, 0.947542432555641410, 0.947558412871332360, 0.947574390818127220, +0.947590366395986150, 0.947606339604869060, 0.947622310444736550, 0.947638278915547860, 0.947654245017263590, 0.947670208749843650, 0.947686170113248180, 0.947702129107437340, +0.947718085732371150, 0.947734039988009650, 0.947749991874313410, 0.947765941391241930, 0.947781888538755560, 0.947797833316814550, 0.947813775725378840, 0.947829715764408780, +0.947845653433864400, 0.947861588733705850, 0.947877521663893720, 0.947893452224387370, 0.947909380415147500, 0.947925306236134140, 0.947941229687307430, 0.947957150768627740, +0.947973069480055110, 0.947988985821550220, 0.948004899793072450, 0.948020811394582500, 0.948036720626040500, 0.948052627487406710, 0.948068531978641270, 0.948084434099704660, +0.948100333850556810, 0.948116231231158510, 0.948132126241469250, 0.948148018881449840, 0.948163909151060190, 0.948179797050260900, 0.948195682579012100, 0.948211565737274050, +0.948227446525007120, 0.948243324942171780, 0.948259200988727960, 0.948275074664636120, 0.948290945969856520, 0.948306814904349650, 0.948322681468075630, 0.948338545660994960, +0.948354407483068210, 0.948370266934255190, 0.948386124014516500, 0.948401978723812490, 0.948417831062103530, 0.948433681029350000, 0.948449528625512240, 0.948465373850550630, +0.948481216704425980, 0.948497057187097870, 0.948512895298527230, 0.948528731038674300, 0.948544564407499570, 0.948560395404963400, 0.948576224031026260, 0.948592050285648750, +0.948607874168791000, 0.948623695680413490, 0.948639514820476700, 0.948655331588941110, 0.948671145985767290, 0.948686958010915520, 0.948702767664346360, 0.948718574946020630, +0.948734379855898150, 0.948750182393939710, 0.948765982560105800, 0.948781780354357010, 0.948797575776653690, 0.948813368826956440, 0.948829159505225840, 0.948844947811422480, +0.948860733745506610, 0.948876517307438830, 0.948892298497179820, 0.948908077314689960, 0.948923853759929940, 0.948939627832860340, 0.948955399533441990, 0.948971168861634800, +0.948986935817399680, 0.949002700400697230, 0.949018462611488030, 0.949034222449732680, 0.949049979915391750, 0.949065735008425840, 0.949081487728795970, 0.949097238076462070, +0.949112986051385050, 0.949128731653525510, 0.949144474882844260, 0.949160215739301760, 0.949175954222858720, 0.949191690333476060, 0.949207424071113910, 0.949223155435733210, +0.949238884427294650, 0.949254611045758810, 0.949270335291086510, 0.949286057163238330, 0.949301776662174970, 0.949317493787857570, 0.949333208540246050, 0.949348920919301560, +0.949364630924984800, 0.949380338557256340, 0.949396043816077120, 0.949411746701407820, 0.949427447213209040, 0.949443145351442030, 0.949458841116066820, 0.949474534507044550, +0.949490225524335930, 0.949505914167901750, 0.949521600437702840, 0.949537284333699770, 0.949552965855853910, 0.949568645004125300, 0.949584321778475070, 0.949599996178864150, +0.949615668205253120, 0.949631337857602900, 0.949647005135874410, 0.949662670040028360, 0.949678332570025980, 0.949693992725827440, 0.949709650507393870, 0.949725305914686290, +0.949740958947665300, 0.949756609606292050, 0.949772257890527220, 0.949787903800331730, 0.949803547335666850, 0.949819188496492720, 0.949834827282770690, 0.949850463694461470, +0.949866097731526190, 0.949881729393925680, 0.949897358681620840, 0.949912985594572820, 0.949928610132742100, 0.949944232296089820, 0.949959852084577010, 0.949975469498164580, +0.949991084536813470, 0.950006697200484580, 0.950022307489139070, 0.950037915402737960, 0.950053520941241850, 0.950069124104611860, 0.950084724892809150, 0.950100323305794530, +0.950115919343529240, 0.950131513005973980, 0.950147104293090350, 0.950162693204838700, 0.950178279741180190, 0.950193863902076050, 0.950209445687487220, 0.950225025097374830, +0.950240602131699920, 0.950256176790423400, 0.950271749073506760, 0.950287318980910460, 0.950302886512595870, 0.950318451668524020, 0.950334014448656170, 0.950349574852953130, +0.950365132881376250, 0.950380688533886460, 0.950396241810445350, 0.950411792711013280, 0.950427341235551730, 0.950442887384021830, 0.950458431156384730, 0.950473972552601460, +0.950489511572633390, 0.950505048216441770, 0.950520582483987190, 0.950536114375231220, 0.950551643890135020, 0.950567171028659620, 0.950582695790766260, 0.950598218176416320, +0.950613738185570710, 0.950629255818191020, 0.950644771074237950, 0.950660283953672970, 0.950675794456457220, 0.950691302582552080, 0.950706808331918560, 0.950722311704518150, +0.950737812700311880, 0.950753311319261440, 0.950768807561327310, 0.950784301426471300, 0.950799792914654440, 0.950815282025838090, 0.950830768759983620, 0.950846253117052180, +0.950861735097005440, 0.950877214699804020, 0.950892691925409590, 0.950908166773783430, 0.950923639244886760, 0.950939109338681090, 0.950954577055127650, 0.950970042394187810, +0.950985505355823050, 0.951000965939994280, 0.951016424146663100, 0.951031879975790860, 0.951047333427338940, 0.951062784501268690, 0.951078233197541370, 0.951093679516118900, +0.951109123456961860, 0.951124565020032060, 0.951140004205290770, 0.951155441012699550, 0.951170875442219680, 0.951186307493812610, 0.951201737167439830, 0.951217164463062930, +0.951232589380642920, 0.951248011920141410, 0.951263432081519870, 0.951278849864739650, 0.951294265269762460, 0.951309678296549550, 0.951325088945062400, 0.951340497215262810, +0.951355903107111710, 0.951371306620570900, 0.951386707755601750, 0.951402106512165950, 0.951417502890224750, 0.951432896889739870, 0.951448288510672980, 0.951463677752985130, +0.951479064616638110, 0.951494449101593310, 0.951509831207812520, 0.951525210935257100, 0.951540588283888660, 0.951555963253668760, 0.951571335844559220, 0.951586706056521070, +0.951602073889516120, 0.951617439343505960, 0.951632802418452270, 0.951648163114316550, 0.951663521431060480, 0.951678877368645540, 0.951694230927033650, 0.951709582106185950, +0.951724930906064360, 0.951740277326630360, 0.951755621367845750, 0.951770963029672010, 0.951786302312070840, 0.951801639215004270, 0.951816973738433210, 0.951832305882319820, +0.951847635646625670, 0.951862963031312460, 0.951878288036341670, 0.951893610661675330, 0.951908930907274910, 0.951924248773102440, 0.951939564259119080, 0.951954877365286830, +0.951970188091567300, 0.951985496437922410, 0.952000802404313730, 0.952016105990702970, 0.952031407197052370, 0.952046706023322860, 0.952062002469476590, 0.952077296535475350, +0.952092588221280960, 0.952107877526855000, 0.952123164452159280, 0.952138448997155720, 0.952153731161806350, 0.952169010946072310, 0.952184288349915860, 0.952199563373298590, +0.952214836016182400, 0.952230106278529220, 0.952245374160300640, 0.952260639661458690, 0.952275902781965390, 0.952291163521782110, 0.952306421880870890, 0.952321677859193640, +0.952336931456712170, 0.952352182673388390, 0.952367431509184130, 0.952382677964061620, 0.952397922037982130, 0.952413163730907790, 0.952428403042800520, 0.952443639973622250, +0.952458874523335000, 0.952474106691900470, 0.952489336479280690, 0.952504563885437800, 0.952519788910333290, 0.952535011553929280, 0.952550231816187700, 0.952565449697070580, +0.952580665196539830, 0.952595878314557390, 0.952611089051085380, 0.952626297406085840, 0.952641503379520250, 0.952656706971350850, 0.952671908181539790, 0.952687107010048990, +0.952702303456840370, 0.952717497521875960, 0.952732689205118110, 0.952747878506528200, 0.952763065426068700, 0.952778249963701530, 0.952793432119388610, 0.952808611893092180, +0.952823789284774290, 0.952838964294396850, 0.952854136921922330, 0.952869307167312110, 0.952884475030528750, 0.952899640511534090, 0.952914803610290350, 0.952929964326759690, +0.952945122660904030, 0.952960278612685840, 0.952975432182066710, 0.952990583369008990, 0.953005732173474730, 0.953020878595426280, 0.953036022634825560, 0.953051164291634830, +0.953066303565816120, 0.953081440457331900, 0.953096574966143860, 0.953111707092214490, 0.953126836835505700, 0.953141964195979850, 0.953157089173599090, 0.953172211768325670, +0.953187331980121730, 0.953202449808949640, 0.953217565254771190, 0.953232678317548880, 0.953247788997244830, 0.953262897293821300, 0.953278003207240540, 0.953293106737464700, +0.953308207884456470, 0.953323306648177440, 0.953338403028590080, 0.953353497025656750, 0.953368588639339710, 0.953383677869601100, 0.953398764716403390, 0.953413849179708730, +0.953428931259479700, 0.953444010955678100, 0.953459088268266530, 0.953474163197207130, 0.953489235742462360, 0.953504305903994600, 0.953519373681765980, 0.953534439075739200, +0.953549502085875970, 0.953564562712139070, 0.953579620954490780, 0.953594676812893450, 0.953609730287309440, 0.953624781377701010, 0.953639830084030750, 0.953654876406261120, +0.953669920344354050, 0.953684961898272120, 0.953700001067977810, 0.953715037853433590, 0.953730072254601600, 0.953745104271444540, 0.953760133903924780, 0.953775161152004890, +0.953790186015646800, 0.953805208494813320, 0.953820228589466690, 0.953835246299569620, 0.953850261625084350, 0.953865274565973480, 0.953880285122199690, 0.953895293293724910, +0.953910299080511840, 0.953925302482523050, 0.953940303499721030, 0.953955302132068250, 0.953970298379527290, 0.953985292242060410, 0.954000283719630750, 0.954015272812200000, +0.954030259519731080, 0.954045243842186470, 0.954060225779528870, 0.954075205331720630, 0.954090182498724460, 0.954105157280502710, 0.954120129677018420, 0.954135099688233510, +0.954150067314110780, 0.954165032554613050, 0.954179995409702550, 0.954194955879342220, 0.954209913963494420, 0.954224869662122170, 0.954239822975187390, 0.954254773902653120, +0.954269722444481830, 0.954284668600636320, 0.954299612371079080, 0.954314553755772900, 0.954329492754680260, 0.954344429367764090, 0.954359363594986740, 0.954374295436310920, +0.954389224891699310, 0.954404151961114610, 0.954419076644519640, 0.954433998941876970, 0.954448918853149530, 0.954463836378299460, 0.954478751517289890, 0.954493664270083420, +0.954508574636642850, 0.954523482616930760, 0.954538388210909970, 0.954553291418543280, 0.954568192239793500, 0.954583090674623100, 0.954597986722994900, 0.954612880384871800, +0.954627771660216400, 0.954642660548991610, 0.954657547051160240, 0.954672431166684880, 0.954687312895528770, 0.954702192237654180, 0.954717069193024010, 0.954731943761601200, +0.954746815943348540, 0.954761685738228840, 0.954776553146205020, 0.954791418167239890, 0.954806280801296150, 0.954821141048336600, 0.954835998908324160, 0.954850854381221750, +0.954865707466992290, 0.954880558165598470, 0.954895406477003220, 0.954910252401169780, 0.954925095938060520, 0.954939937087638360, 0.954954775849866540, 0.954969612224707660, +0.954984446212124750, 0.954999277812080720, 0.955014107024538590, 0.955028933849461300, 0.955043758286811540, 0.955058580336552330, 0.955073399998646710, 0.955088217273057590, +0.955103032159747900, 0.955117844658680660, 0.955132654769819010, 0.955147462493125540, 0.955162267828563280, 0.955177070776095480, 0.955191871335684950, 0.955206669507294830, +0.955221465290887920, 0.955236258686427360, 0.955251049693876530, 0.955265838313197670, 0.955280624544354360, 0.955295408387309310, 0.955310189842025870, 0.955324968908466960, +0.955339745586595510, 0.955354519876375100, 0.955369291777768080, 0.955384061290737830, 0.955398828415247370, 0.955413593151259950, 0.955428355498738390, 0.955443115457646040, +0.955457873027945940, 0.955472628209601330, 0.955487381002575020, 0.955502131406830160, 0.955516879422329990, 0.955531625049037550, 0.955546368286916190, 0.955561109135928840, +0.955575847596038640, 0.955590583667209170, 0.955605317349403020, 0.955620048642583430, 0.955634777546713890, 0.955649504061757300, 0.955664228187676930, 0.955678949924436030, +0.955693669271998060, 0.955708386230325610, 0.955723100799382270, 0.955737812979131070, 0.955752522769535370, 0.955767230170558420, 0.955781935182163370, 0.955796637804313450, +0.955811338036972160, 0.955826035880102290, 0.955840731333667430, 0.955855424397630600, 0.955870115071955300, 0.955884803356604750, 0.955899489251542110, 0.955914172756730740, +0.955928853872134220, 0.955943532597715360, 0.955958208933437640, 0.955972882879264300, 0.955987554435158930, 0.956002223601084560, 0.956016890377004660, 0.956031554762882710, +0.956046216758681730, 0.956060876364365210, 0.956075533579896390, 0.956090188405238850, 0.956104840840355740, 0.956119490885210640, 0.956134138539766700, 0.956148783803987710, +0.956163426677836600, 0.956178067161276850, 0.956192705254271910, 0.956207340956785170, 0.956221974268780190, 0.956236605190220130, 0.956251233721068910, 0.956265859861289420, +0.956280483610845170, 0.956295104969699720, 0.956309723937816550, 0.956324340515159020, 0.956338954701690720, 0.956353566497375020, 0.956368175902175600, 0.956382782916055500, +0.956397387538978410, 0.956411989770907910, 0.956426589611807380, 0.956441187061640500, 0.956455782120370520, 0.956470374787961150, 0.956484965064376080, 0.956499552949578340, +0.956514138443531730, 0.956528721546199830, 0.956543302257546020, 0.956557880577533990, 0.956572456506127320, 0.956587030043289710, 0.956601601188984190, 0.956616169943174780, +0.956630736305824960, 0.956645300276898200, 0.956659861856358320, 0.956674421044168670, 0.956688977840293050, 0.956703532244695180, 0.956718084257338290, 0.956732633878186080, +0.956747181107202360, 0.956761725944350720, 0.956776268389594730, 0.956790808442897990, 0.956805346104224300, 0.956819881373537570, 0.956834414250800850, 0.956848944735978040, +0.956863472829032840, 0.956877998529929050, 0.956892521838630160, 0.956907042755100080, 0.956921561279302610, 0.956936077411200900, 0.956950591150759090, 0.956965102497940760, +0.956979611452709710, 0.956994118015029650, 0.957008622184864270, 0.957023123962177260, 0.957037623346932760, 0.957052120339094040, 0.957066614938624880, 0.957081107145489220, +0.957095596959650850, 0.957110084381073370, 0.957124569409720790, 0.957139052045557050, 0.957153532288545380, 0.957168010138649830, 0.957182485595834300, 0.957196958660062600, +0.957211429331298440, 0.957225897609505720, 0.957240363494648250, 0.957254826986690180, 0.957269288085594750, 0.957283746791326110, 0.957298203103848060, 0.957312657023124510, +0.957327108549119400, 0.957341557681796520, 0.957356004421119680, 0.957370448767053020, 0.957384890719560120, 0.957399330278604910, 0.957413767444151410, 0.957428202216163540, +0.957442634594604990, 0.957457064579440020, 0.957471492170632650, 0.957485917368146140, 0.957500340171944960, 0.957514760581992920, 0.957529178598253930, 0.957543594220692020, +0.957558007449271220, 0.957572418283955340, 0.957586826724708630, 0.957601232771494560, 0.957615636424277490, 0.957630037683021350, 0.957644436547690050, 0.957658833018247610, +0.957673227094658190, 0.957687618776885690, 0.957702008064894360, 0.957716394958647800, 0.957730779458110250, 0.957745161563245630, 0.957759541274018300, 0.957773918590391960, +0.957788293512330860, 0.957802666039799360, 0.957817036172760930, 0.957831403911179820, 0.957845769255020190, 0.957860132204246260, 0.957874492758821970, 0.957888850918711340, +0.957903206683878630, 0.957917560054288190, 0.957931911029903600, 0.957946259610689240, 0.957960605796609240, 0.957974949587627740, 0.957989290983708770, 0.958003629984816700, +0.958017966590915650, 0.958032300801969550, 0.958046632617942650, 0.958060962038799200, 0.958075289064503340, 0.958089613695019330, 0.958103935930311180, 0.958118255770343150, +0.958132573215079830, 0.958146888264484800, 0.958161200918522530, 0.958175511177157270, 0.958189819040353270, 0.958204124508074680, 0.958218427580285860, 0.958232728256950830, +0.958247026538034290, 0.958261322423500040, 0.958275615913312340, 0.958289907007435660, 0.958304195705834250, 0.958318482008472250, 0.958332765915314130, 0.958347047426324260, +0.958361326541466660, 0.958375603260705590, 0.958389877584005620, 0.958404149511330910, 0.958418419042645800, 0.958432686177914770, 0.958446950917101860, 0.958461213260171970, +0.958475473207088700, 0.958489730757816740, 0.958503985912320560, 0.958518238670564290, 0.958532489032512540, 0.958546736998129420, 0.958560982567379870, 0.958575225740227470, +0.958589466516637120, 0.958603704896572980, 0.958617940879999740, 0.958632174466881540, 0.958646405657182950, 0.958660634450868350, 0.958674860847902320, 0.958689084848249000, +0.958703306451872960, 0.958717525658738580, 0.958731742468810430, 0.958745956882052890, 0.958760168898430520, 0.958774378517907700, 0.958788585740449120, 0.958802790566018910, +0.958816992994581780, 0.958831193026102090, 0.958845390660544420, 0.958859585897873230, 0.958873778738053130, 0.958887969181048790, 0.958902157226824370, 0.958916342875344440, +0.958930526126573700, 0.958944706980476620, 0.958958885437017900, 0.958973061496161790, 0.958987235157873210, 0.959001406422116620, 0.959015575288856390, 0.959029741758057110, +0.959043905829683570, 0.959058067503700260, 0.959072226780071760, 0.959086383658762640, 0.959100538139737610, 0.959114690222961470, 0.959128839908398370, 0.959142987196013210, +0.959157132085770580, 0.959171274577635070, 0.959185414671571370, 0.959199552367544170, 0.959213687665518290, 0.959227820565457970, 0.959241951067328120, 0.959256079171093350, +0.959270204876718440, 0.959284328184167980, 0.959298449093406670, 0.959312567604399310, 0.959326683717110720, 0.959340797431505240, 0.959354908747547700, 0.959369017665202880, +0.959383124184435610, 0.959397228305210460, 0.959411330027492240, 0.959425429351245970, 0.959439526276435810, 0.959453620803026870, 0.959467712930983870, 0.959481802660271610, +0.959495889990854890, 0.959509974922698410, 0.959524057455766970, 0.959538137590025710, 0.959552215325438770, 0.959566290661971300, 0.959580363599588090, 0.959594434138254070, +0.959608502277933930, 0.959622568018592470, 0.959636631360194610, 0.959650692302705390, 0.959664750846089270, 0.959678806990311270, 0.959692860735336220, 0.959706912081129020, +0.959720961027654470, 0.959735007574877620, 0.959749051722763480, 0.959763093471276530, 0.959777132820381680, 0.959791169770044080, 0.959805204320228640, 0.959819236470900060, +0.959833266222023470, 0.959847293573563690, 0.959861318525485950, 0.959875341077754630, 0.959889361230334970, 0.959903378983191890, 0.959917394336290420, 0.959931407289595360, +0.959945417843071860, 0.959959425996684820, 0.959973431750399400, 0.959987435104180160, 0.960001436057992490, 0.960015434611801060, 0.960029430765571120, 0.960043424519267500, +0.960057415872855420, 0.960071404826300050, 0.960085391379565940, 0.960099375532618260, 0.960113357285422240, 0.960127336637942700, 0.960141313590144870, 0.960155288141993800, +0.960169260293454510, 0.960183230044492350, 0.960197197395071810, 0.960211162345158240, 0.960225124894716900, 0.960239085043712580, 0.960253042792110660, 0.960266998139876040, +0.960280951086974310, 0.960294901633369840, 0.960308849779028200, 0.960322795523914310, 0.960336738867993530, 0.960350679811230900, 0.960364618353591550, 0.960378554495040730, +0.960392488235543680, 0.960406419575065120, 0.960420348513570610, 0.960434275051025190, 0.960448199187394100, 0.960462120922642490, 0.960476040256735610, 0.960489957189638590, +0.960503871721316900, 0.960517783851735360, 0.960531693580859320, 0.960545600908654040, 0.960559505835084760, 0.960573408360116730, 0.960587308483715210, 0.960601206205845660, +0.960615101526472780, 0.960628994445562270, 0.960642884963079150, 0.960656773078988890, 0.960670658793256640, 0.960684542105847750, 0.960698423016727590, 0.960712301525861510, +0.960726177633214550, 0.960740051338752070, 0.960753922642439420, 0.960767791544241970, 0.960781658044125080, 0.960795522142054100, 0.960809383837994300, 0.960823243131911250, +0.960837100023769760, 0.960850954513535640, 0.960864806601174130, 0.960878656286650590, 0.960892503569930390, 0.960906348450978890, 0.960920190929761890, 0.960934031006244080, +0.960947868680391170, 0.960961703952168620, 0.960975536821541800, 0.960989367288476170, 0.961003195352937100, 0.961017021014890060, 0.961030844274300630, 0.961044665131133960, +0.961058483585355620, 0.961072299636930970, 0.961086113285825610, 0.961099924532004990, 0.961113733375434600, 0.961127539816080120, 0.961141343853906480, 0.961155145488879480, +0.961168944720964700, 0.961182741550127510, 0.961196535976333480, 0.961210327999547980, 0.961224117619736810, 0.961237904836865550, 0.961251689650899350, 0.961265472061803790, +0.961279252069544680, 0.961293029674087360, 0.961306804875397440, 0.961320577673440590, 0.961334348068182300, 0.961348116059588360, 0.961361881647623820, 0.961375644832254680, +0.961389405613446320, 0.961403163991164540, 0.961416919965374820, 0.961430673536042830, 0.961444424703134290, 0.961458173466614550, 0.961471919826449420, 0.961485663782604360, +0.961499405335045190, 0.961513144483737480, 0.961526881228647050, 0.961540615569739240, 0.961554347506980210, 0.961568077040335090, 0.961581804169769790, 0.961595528895249910, +0.961609251216741230, 0.961622971134209470, 0.961636688647620310, 0.961650403756939330, 0.961664116462132570, 0.961677826763165380, 0.961691534660003570, 0.961705240152612940, +0.961718943240959190, 0.961732643925008120, 0.961746342204725320, 0.961760038080077040, 0.961773731551028410, 0.961787422617545350, 0.961801111279593890, 0.961814797537139500, +0.961828481390148200, 0.961842162838585700, 0.961855841882417790, 0.961869518521610510, 0.961883192756129210, 0.961896864585939810, 0.961910534011008340, 0.961924201031300610, +0.961937865646782300, 0.961951527857419330, 0.961965187663177850, 0.961978845064022980, 0.961992500059921210, 0.962006152650838110, 0.962019802836739600, 0.962033450617591600, +0.962047095993359910, 0.962060738964010560, 0.962074379529509580, 0.962088017689822440, 0.962101653444915160, 0.962115286794753890, 0.962128917739304310, 0.962142546278532460, +0.962156172412404250, 0.962169796140885600, 0.962183417463942650, 0.962197036381540970, 0.962210652893646710, 0.962224267000225900, 0.962237878701244220, 0.962251487996668040, +0.962265094886463060, 0.962278699370595510, 0.962292301449031110, 0.962305901121735860, 0.962319498388675920, 0.962333093249817200, 0.962346685705125720, 0.962360275754567510, +0.962373863398108710, 0.962387448635715460, 0.962401031467353230, 0.962414611892988600, 0.962428189912587270, 0.962441765526115600, 0.962455338733539500, 0.962468909534825000, +0.962482477929938460, 0.962496043918845580, 0.962509607501512490, 0.962523168677905440, 0.962536727447990460, 0.962550283811733580, 0.962563837769101040, 0.962577389320058980, +0.962590938464573660, 0.962604485202610660, 0.962618029534136550, 0.962631571459117370, 0.962645110977519150, 0.962658648089308230, 0.962672182794450770, 0.962685715092912670, +0.962699244984660640, 0.962712772469660250, 0.962726297547877970, 0.962739820219279840, 0.962753340483832210, 0.962766858341501330, 0.962780373792253120, 0.962793886836054380, +0.962807397472870590, 0.962820905702668320, 0.962834411525413820, 0.962847914941073250, 0.962861415949612940, 0.962874914550999050, 0.962888410745197820, 0.962901904532175950, +0.962915395911899010, 0.962928884884333480, 0.962942371449445830, 0.962955855607202320, 0.962969337357569070, 0.962982816700512450, 0.962996293635998920, 0.963009768163994750, +0.963023240284466060, 0.963036709997379110, 0.963050177302700480, 0.963063642200396420, 0.963077104690433280, 0.963090564772777320, 0.963104022447395240, 0.963117477714252820, +0.963130930573316670, 0.963144381024553240, 0.963157829067928910, 0.963171274703409910, 0.963184717930962830, 0.963198158750553810, 0.963211597162149770, 0.963225033165716390, +0.963238466761220490, 0.963251897948628420, 0.963265326727906660, 0.963278753099021560, 0.963292177061939480, 0.963305598616627230, 0.963319017763050840, 0.963332434501176890, +0.963345848830971740, 0.963359260752402080, 0.963372670265434160, 0.963386077370034680, 0.963399482066169990, 0.963412884353806790, 0.963426284232911100, 0.963439681703449740, +0.963453076765389270, 0.963466469418695960, 0.963479859663336600, 0.963493247499277450, 0.963506632926485310, 0.963520015944926760, 0.963533396554567930, 0.963546774755375650, +0.963560150547316470, 0.963573523930356890, 0.963586894904463480, 0.963600263469602810, 0.963613629625741710, 0.963626993372846300, 0.963640354710883380, 0.963653713639819660, +0.963667070159621610, 0.963680424270255910, 0.963693775971689150, 0.963707125263887910, 0.963720472146819110, 0.963733816620448990, 0.963747158684744250, 0.963760498339671590, +0.963773835585197690, 0.963787170421289250, 0.963800502847912850, 0.963813832865035190, 0.963827160472623180, 0.963840485670642950, 0.963853808459061660, 0.963867128837845750, +0.963880446806962050, 0.963893762366377250, 0.963907075516058030, 0.963920386255971320, 0.963933694586083470, 0.963947000506361400, 0.963960304016771800, 0.963973605117281360, +0.963986903807857010, 0.964000200088465430, 0.964013493959073210, 0.964026785419647590, 0.964040074470154720, 0.964053361110561720, 0.964066645340835300, 0.964079927160942260, +0.964093206570849400, 0.964106483570523530, 0.964119758159931670, 0.964133030339040300, 0.964146300107816210, 0.964159567466226440, 0.964172832414237680, 0.964186094951816840, +0.964199355078930840, 0.964212612795546380, 0.964225868101630690, 0.964239120997150030, 0.964252371482071660, 0.964265619556362360, 0.964278865219988960, 0.964292108472918350, +0.964305349315117470, 0.964318587746553320, 0.964331823767192840, 0.964345057377002600, 0.964358288575949740, 0.964371517364001170, 0.964384743741123710, 0.964397967707284480, +0.964411189262450290, 0.964424408406588380, 0.964437625139665240, 0.964450839461648000, 0.964464051372503680, 0.964477260872199200, 0.964490467960701700, 0.964503672637977870, +0.964516874903994960, 0.964530074758719990, 0.964543272202119660, 0.964556467234161220, 0.964569659854811470, 0.964582850064037660, 0.964596037861806700, 0.964609223248085730, +0.964622406222841570, 0.964635586786041670, 0.964648764937652610, 0.964661940677641660, 0.964675114005975830, 0.964688284922622150, 0.964701453427547870, 0.964714619520719910, +0.964727783202105620, 0.964740944471671580, 0.964754103329385270, 0.964767259775213600, 0.964780413809123940, 0.964793565431083080, 0.964806714641058380, 0.964819861439016990, +0.964833005824926040, 0.964846147798752440, 0.964859287360463340, 0.964872424510026190, 0.964885559247407820, 0.964898691572575680, 0.964911821485496700, 0.964924948986138450, +0.964938074074467630, 0.964951196750451600, 0.964964317014057600, 0.964977434865252780, 0.964990550304004380, 0.965003663330279650, 0.965016773944045610, 0.965029882145270080, +0.965042987933919520, 0.965056091309961390, 0.965069192273363190, 0.965082290824091920, 0.965095386962114940, 0.965108480687399520, 0.965121571999912890, 0.965134660899622520, +0.965147747386495230, 0.965160831460498690, 0.965173913121599950, 0.965186992369766570, 0.965200069204965590, 0.965213143627164480, 0.965226215636330710, 0.965239285232431300, +0.965252352415433500, 0.965265417185304900, 0.965278479542012850, 0.965291539485524490, 0.965304597015807290, 0.965317652132828610, 0.965330704836556030, 0.965343755126956470, +0.965356803003997510, 0.965369848467646510, 0.965382891517870930, 0.965395932154638150, 0.965408970377915510, 0.965422006187670380, 0.965435039583870560, 0.965448070566482850, +0.965461099135475060, 0.965474125290814440, 0.965487149032468460, 0.965500170360404700, 0.965513189274590510, 0.965526205774993600, 0.965539219861580870, 0.965552231534320130, +0.965565240793178740, 0.965578247638124280, 0.965591252069124220, 0.965604254086146140, 0.965617253689157300, 0.965630250878125600, 0.965643245653017960, 0.965656238013802290, +0.965669227960445960, 0.965682215492916660, 0.965695200611181750, 0.965708183315208910, 0.965721163604965740, 0.965734141480419470, 0.965747116941537920, 0.965760089988288440, +0.965773060620638830, 0.965786028838556580, 0.965798994642009250, 0.965811958030964420, 0.965824919005389910, 0.965837877565252860, 0.965850833710521160, 0.965863787441162300, +0.965876738757144080, 0.965889687658433970, 0.965902634144999660, 0.965915578216808730, 0.965928519873828990, 0.965941459116027910, 0.965954395943373070, 0.965967330355832270, +0.965980262353373090, 0.965993191935963340, 0.966006119103570590, 0.966019043856162770, 0.966031966193707130, 0.966044886116171450, 0.966057803623523670, 0.966070718715731360, +0.966083631392762320, 0.966096541654584140, 0.966109449501164620, 0.966122354932471670, 0.966135257948472550, 0.966148158549135380, 0.966161056734427870, 0.966173952504317590, +0.966186845858772460, 0.966199736797760280, 0.966212625321248960, 0.966225511429205760, 0.966238395121598930, 0.966251276398396030, 0.966264155259564880, 0.966277031705073400, +0.966289905734889380, 0.966302777348980620, 0.966315646547315050, 0.966328513329860140, 0.966341377696584010, 0.966354239647454480, 0.966367099182439240, 0.966379956301506300, +0.966392811004623490, 0.966405663291758590, 0.966418513162879740, 0.966431360617954540, 0.966444205656950770, 0.966457048279836580, 0.966469888486579780, 0.966482726277148150, +0.966495561651509850, 0.966508394609632780, 0.966521225151484530, 0.966534053277033230, 0.966546878986246690, 0.966559702279093050, 0.966572523155540210, 0.966585341615555980, +0.966598157659108390, 0.966610971286165690, 0.966623782496695230, 0.966636591290665370, 0.966649397668044030, 0.966662201628799230, 0.966675003172898890, 0.966687802300311150, +0.966700599011003800, 0.966713393304945210, 0.966726185182102850, 0.966738974642445070, 0.966751761685939790, 0.966764546312555260, 0.966777328522259280, 0.966790108315019990, +0.966802885690805640, 0.966815660649583800, 0.966828433191322830, 0.966841203315990880, 0.966853971023555860, 0.966866736313985900, 0.966879499187249030, 0.966892259643313490, +0.966905017682147540, 0.966917773303718860, 0.966930526507995710, 0.966943277294946220, 0.966956025664538530, 0.966968771616740770, 0.966981515151521090, 0.966994256268847830, +0.967006994968688800, 0.967019731251012150, 0.967032465115786220, 0.967045196562979160, 0.967057925592559100, 0.967070652204494290, 0.967083376398752750, 0.967096098175303060, +0.967108817534112820, 0.967121534475150590, 0.967134248998384520, 0.967146961103782840, 0.967159670791313710, 0.967172378060945470, 0.967185082912646270, 0.967197785346384560, +0.967210485362128170, 0.967223182959845550, 0.967235878139504960, 0.967248570901074740, 0.967261261244523050, 0.967273949169818240, 0.967286634676928770, 0.967299317765822450, +0.967311998436467870, 0.967324676688833260, 0.967337352522887000, 0.967350025938597420, 0.967362696935932690, 0.967375365514861250, 0.967388031675351590, 0.967400695417371610, +0.967413356740889910, 0.967426015645874830, 0.967438672132294730, 0.967451326200117980, 0.967463977849312820, 0.967476627079847830, 0.967489273891691370, 0.967501918284811580, +0.967514560259176930, 0.967527199814755990, 0.967539836951516910, 0.967552471669428370, 0.967565103968458630, 0.967577733848576260, 0.967590361309749400, 0.967602986351946640, +0.967615608975136430, 0.967628229179287150, 0.967640846964367360, 0.967653462330345440, 0.967666075277189730, 0.967678685804869270, 0.967691293913351740, 0.967703899602605940, +0.967716502872600470, 0.967729103723303790, 0.967741702154684250, 0.967754298166710550, 0.967766891759351270, 0.967779482932574540, 0.967792071686349060, 0.967804658020643420, +0.967817241935426180, 0.967829823430665810, 0.967842402506330910, 0.967854979162389940, 0.967867553398811810, 0.967880125215564550, 0.967892694612616960, 0.967905261589937730, +0.967917826147495220, 0.967930388285258240, 0.967942948003195250, 0.967955505301274830, 0.967968060179465910, 0.967980612637736600, 0.967993162676055840, 0.968005710294392090, +0.968018255492714140, 0.968030798270990480, 0.968043338629189900, 0.968055876567281090, 0.968068412085232530, 0.968080945183012800, 0.968093475860590800, 0.968106004117935020, +0.968118529955014240, 0.968131053371797170, 0.968143574368252490, 0.968156092944349010, 0.968168609100055200, 0.968181122835339750, 0.968193634150171570, 0.968206143044519240, +0.968218649518351680, 0.968231153571637360, 0.968243655204345190, 0.968256154416444190, 0.968268651207902510, 0.968281145578689160, 0.968293637528772950, 0.968306127058122690, +0.968318614166707170, 0.968331098854495090, 0.968343581121455350, 0.968356060967556550, 0.968368538392767600, 0.968381013397057290, 0.968393485980394430, 0.968405956142747940, +0.968418423884086500, 0.968430889204378920, 0.968443352103594450, 0.968455812581701330, 0.968468270638668690, 0.968480726274465460, 0.968493179489060330, 0.968505630282422200, +0.968518078654520000, 0.968530524605322960, 0.968542968134799230, 0.968555409242918160, 0.968567847929648560, 0.968580284194959340, 0.968592718038819410, 0.968605149461197690, +0.968617578462063090, 0.968630005041384750, 0.968642429199131240, 0.968654850935271590, 0.968667270249774840, 0.968679687142609880, 0.968692101613745750, 0.968704513663151360, +0.968716923290795620, 0.968729330496647890, 0.968741735280676530, 0.968754137642850900, 0.968766537583139910, 0.968778935101512580, 0.968791330197937840, 0.968803722872384920, +0.968816113124822740, 0.968828500955220220, 0.968840886363546370, 0.968853269349770230, 0.968865649913861040, 0.968878028055787710, 0.968890403775519270, 0.968902777073024860, +0.968915147948273600, 0.968927516401234420, 0.968939882431876340, 0.968952246040168610, 0.968964607226080240, 0.968976965989580390, 0.968989322330638060, 0.969001676249222510, +0.969014027745302870, 0.969026376818848070, 0.969038723469827220, 0.969051067698209700, 0.969063409503964410, 0.969075748887060610, 0.969088085847467420, 0.969100420385154200, +0.969112752500089770, 0.969125082192243470, 0.969137409461584440, 0.969149734308081930, 0.969162056731705080, 0.969174376732423020, 0.969186694310205100, 0.969199009465020580, +0.969211322196838370, 0.969223632505627820, 0.969235940391358190, 0.969248245853998820, 0.969260548893518650, 0.969272849509887240, 0.969285147703073950, 0.969297443473047470, +0.969309736819777390, 0.969322027743233060, 0.969334316243383620, 0.969346602320198310, 0.969358885973646610, 0.969371167203697650, 0.969383446010321000, 0.969395722393485480, +0.969407996353160660, 0.969420267889315900, 0.969432537001920450, 0.969444803690943660, 0.969457067956354780, 0.969469329798123390, 0.969481589216218740, 0.969493846210609970, +0.969506100781266640, 0.969518352928157910, 0.969530602651253460, 0.969542849950522420, 0.969555094825934270, 0.969567337277458590, 0.969579577305064280, 0.969591814908721150, +0.969604050088398450, 0.969616282844065650, 0.969628513175692100, 0.969640741083247270, 0.969652966566700520, 0.969665189626021660, 0.969677410261179600, 0.969689628472144020, +0.969701844258884280, 0.969714057621370080, 0.969726268559570670, 0.969738477073455510, 0.969750683162994510, 0.969762886828156480, 0.969775088068911330, 0.969787286885228420, +0.969799483277077210, 0.969811677244427410, 0.969823868787248360, 0.969836057905509640, 0.969848244599180950, 0.969860428868231540, 0.969872610712630980, 0.969884790132348850, +0.969896967127354850, 0.969909141697618440, 0.969921313843109090, 0.969933483563796490, 0.969945650859650340, 0.969957815730639990, 0.969969978176735030, 0.969982138197905130, +0.969994295794119780, 0.970006450965348770, 0.970018603711561680, 0.970030754032728320, 0.970042901928817700, 0.970055047399799970, 0.970067190445644600, 0.970079331066321160, +0.970091469261799570, 0.970103605032049180, 0.970115738377039790, 0.970127869296741220, 0.970139997791122920, 0.970152123860154480, 0.970164247503805810, 0.970176368722046490, +0.970188487514846210, 0.970200603882174770, 0.970212717824001760, 0.970224829340297190, 0.970236938431030430, 0.970249045096171270, 0.970261149335689410, 0.970273251149554760, +0.970285350537737010, 0.970297447500205750, 0.970309542036931210, 0.970321634147882640, 0.970333723833029850, 0.970345811092342860, 0.970357895925791250, 0.970369978333344930, +0.970382058314973710, 0.970394135870647380, 0.970406211000335750, 0.970418283704008510, 0.970430353981635570, 0.970442421833186740, 0.970454487258631810, 0.970466550257940710, +0.970478610831083220, 0.970490668978029380, 0.970502724698748650, 0.970514777993211180, 0.970526828861386750, 0.970538877303245170, 0.970550923318756480, 0.970562966907890460, +0.970575008070617030, 0.970587046806906220, 0.970599083116727710, 0.970611117000051430, 0.970623148456847270, 0.970635177487085390, 0.970647204090735460, 0.970659228267767630, +0.970671250018151580, 0.970683269341857780, 0.970695286238855480, 0.970707300709114930, 0.970719312752606260, 0.970731322369299270, 0.970743329559163870, 0.970755334322170200, +0.970767336658288520, 0.970779336567488160, 0.970791334049739500, 0.970803329105012550, 0.970815321733277230, 0.970827311934503560, 0.970839299708661670, 0.970851285055721490, +0.970863267975653370, 0.970875248468426880, 0.970887226534012160, 0.970899202172379460, 0.970911175383498690, 0.970923146167340100, 0.970935114523873600, 0.970947080453069210, +0.970959043954897410, 0.970971005029327760, 0.970982963676330630, 0.970994919895876160, 0.971006873687934260, 0.971018825052475280, 0.971030773989469130, 0.971042720498886400, +0.971054664580696560, 0.971066606234870070, 0.971078545461377060, 0.971090482260187680, 0.971102416631272170, 0.971114348574600550, 0.971126278090143070, 0.971138205177870080, +0.971150129837751400, 0.971162052069757360, 0.971173971873858230, 0.971185889250024140, 0.971197804198225320, 0.971209716718432040, 0.971221626810614640, 0.971233534474743030, +0.971245439710787470, 0.971257342518718430, 0.971269242898506020, 0.971281140850120410, 0.971293036373532040, 0.971304929468711050, 0.971316820135627920, 0.971328708374252560, +0.971340594184555430, 0.971352477566506780, 0.971364358520076960, 0.971376237045236230, 0.971388113141954950, 0.971399986810203340, 0.971411858049952000, 0.971423726861170730, +0.971435593243830220, 0.971447457197900710, 0.971459318723352560, 0.971471177820156130, 0.971483034488281770, 0.971494888727700070, 0.971506740538380820, 0.971518589920294830, +0.971530436873412230, 0.971542281397703710, 0.971554123493139300, 0.971565963159689680, 0.971577800397325220, 0.971589635206016380, 0.971601467585733290, 0.971613297536446430, +0.971625125058126480, 0.971636950150743580, 0.971648772814268420, 0.971660593048671250, 0.971672410853922640, 0.971684226229993180, 0.971696039176852990, 0.971707849694472660, +0.971719657782822770, 0.971731463441873670, 0.971743266671595940, 0.971755067471959940, 0.971766865842936590, 0.971778661784495900, 0.971790455296608460, 0.971802246379244950, +0.971814035032375840, 0.971825821255971610, 0.971837605050002720, 0.971849386414439960, 0.971861165349253930, 0.971872941854414750, 0.971884715929893230, 0.971896487575659940, +0.971908256791685350, 0.971920023577940160, 0.971931787934394940, 0.971943549861020380, 0.971955309357786850, 0.971967066424665020, 0.971978821061625480, 0.971990573268638910, +0.972002323045675910, 0.972014070392707040, 0.972025815309703110, 0.972037557796634810, 0.972049297853472380, 0.972061035480186630, 0.972072770676748470, 0.972084503443128240, +0.972096233779296770, 0.972107961685224730, 0.972119687160882820, 0.972131410206241940, 0.972143130821272240, 0.972154849005944730, 0.972166564760230110, 0.972178278084099070, +0.972189988977522400, 0.972201697440470690, 0.972213403472914960, 0.972225107074825570, 0.972236808246173310, 0.972248506986929110, 0.972260203297063530, 0.972271897176547610, +0.972283588625351800, 0.972295277643447140, 0.972306964230804430, 0.972318648387394120, 0.972330330113187150, 0.972342009408154410, 0.972353686272266590, 0.972365360705494510, +0.972377032707809170, 0.972388702279181170, 0.972400369419581630, 0.972412034128980920, 0.972423696407350160, 0.972435356254660150, 0.972447013670881820, 0.972458668655985850, +0.972470321209943260, 0.972481971332725070, 0.972493619024301760, 0.972505264284644460, 0.972516907113723960, 0.972528547511511080, 0.972540185477976940, 0.972551821013092340, +0.972563454116828210, 0.972575084789155550, 0.972586713030045070, 0.972598338839467670, 0.972609962217394600, 0.972621583163796540, 0.972633201678644530, 0.972644817761909470, +0.972656431413562620, 0.972668042633574540, 0.972679651421916260, 0.972691257778558920, 0.972702861703473310, 0.972714463196630690, 0.972726062258001840, 0.972737658887557810, +0.972749253085269940, 0.972760844851108700, 0.972772434185045330, 0.972784021087050870, 0.972795605557096320, 0.972807187595152830, 0.972818767201191310, 0.972830344375182900, +0.972841919117098830, 0.972853491426909800, 0.972865061304586940, 0.972876628750101500, 0.972888193763424500, 0.972899756344526970, 0.972911316493380140, 0.972922874209955160, +0.972934429494222710, 0.972945982346154260, 0.972957532765720940, 0.972969080752893680, 0.972980626307643700, 0.972992169429942270, 0.973003710119760280, 0.973015248377069320, +0.973026784201839970, 0.973038317594043690, 0.973049848553651620, 0.973061377080635000, 0.973072903174964860, 0.973084426836612450, 0.973095948065549000, 0.973107466861745870, +0.973118983225173870, 0.973130497155804460, 0.973142008653608670, 0.973153517718557960, 0.973165024350623460, 0.973176528549776430, 0.973188030315988220, 0.973199529649229730, +0.973211026549472450, 0.973222521016687600, 0.973234013050846450, 0.973245502651920340, 0.973256989819880400, 0.973268474554697890, 0.973279956856344500, 0.973291436724791010, +0.973302914160008910, 0.973314389161969550, 0.973325861730644280, 0.973337331866004240, 0.973348799568020890, 0.973360264836665820, 0.973371727671909830, 0.973383188073724480, +0.973394646042081260, 0.973406101576951290, 0.973417554678306150, 0.973429005346117200, 0.973440453580355580, 0.973451899380993190, 0.973463342748000730, 0.973474783681349990, +0.973486222181012220, 0.973497658246958890, 0.973509091879161460, 0.973520523077591290, 0.973531951842219860, 0.973543378173018730, 0.973554802069958920, 0.973566223533012030, +0.973577642562149740, 0.973589059157343280, 0.973600473318564140, 0.973611885045783780, 0.973623294338973990, 0.973634701198105800, 0.973646105623150790, 0.973657507614080540, +0.973668907170866520, 0.973680304293480180, 0.973691698981893120, 0.973703091236076790, 0.973714481056003000, 0.973725868441642770, 0.973737253392967790, 0.973748635909949760, +0.973760015992560120, 0.973771393640770480, 0.973782768854552390, 0.973794141633877450, 0.973805511978717010, 0.973816879889042860, 0.973828245364826480, 0.973839608406039450, +0.973850969012653440, 0.973862327184639940, 0.973873682921970630, 0.973885036224617420, 0.973896387092551330, 0.973907735525744280, 0.973919081524167840, 0.973930425087793820, +0.973941766216593670, 0.973953104910539100, 0.973964441169601790, 0.973975774993753540, 0.973987106382965710, 0.973998435337210090, 0.974009761856458380, 0.974021085940682260, +0.974032407589853430, 0.974043726803943580, 0.974055043582924610, 0.974066357926767770, 0.974077669835445080, 0.974088979308928240, 0.974100286347189040, 0.974111590950198950, +0.974122893117929990, 0.974134192850353740, 0.974145490147442230, 0.974156785009166910, 0.974168077435499490, 0.974179367426411870, 0.974190654981875850, 0.974201940101863230, +0.974213222786345810, 0.974224503035295290, 0.974235780848683670, 0.974247056226482440, 0.974258329168663510, 0.974269599675198770, 0.974280867746060040, 0.974292133381219230, +0.974303396580648020, 0.974314657344318550, 0.974325915672202170, 0.974337171564271020, 0.974348425020496900, 0.974359676040851830, 0.974370924625307500, 0.974382170773835930, +0.974393414486408820, 0.974404655762998400, 0.974415894603576250, 0.974427131008114290, 0.974438364976584430, 0.974449596508958790, 0.974460825605209080, 0.974472052265307310, +0.974483276489225610, 0.974494498276935570, 0.974505717628409210, 0.974516934543618650, 0.974528149022535710, 0.974539361065132390, 0.974550570671380620, 0.974561777841252530, +0.974572982574720030, 0.974584184871755020, 0.974595384732329540, 0.974606582156415490, 0.974617777143985120, 0.974628969695010230, 0.974640159809462950, 0.974651347487315300, +0.974662532728539420, 0.974673715533107000, 0.974684895900990280, 0.974696073832161390, 0.974707249326592250, 0.974718422384255100, 0.974729593005121740, 0.974740761189164750, +0.974751926936355590, 0.974763090246666520, 0.974774251120069880, 0.974785409556537470, 0.974796565556041660, 0.974807719118554350, 0.974818870244047790, 0.974830018932494210, +0.974841165183865430, 0.974852308998133800, 0.974863450375271330, 0.974874589315250170, 0.974885725818042560, 0.974896859883620740, 0.974907991511956730, 0.974919120703022890, +0.974930247456791020, 0.974941371773233590, 0.974952493652322730, 0.974963613094030680, 0.974974730098329470, 0.974985844665191560, 0.974996956794589200, 0.975008066486494180, +0.975019173740879100, 0.975030278557716070, 0.975041380936977230, 0.975052480878635050, 0.975063578382661670, 0.975074673449029320, 0.975085766077710470, 0.975096856268677040, +0.975107944021901480, 0.975119029337355950, 0.975130112215013000, 0.975141192654844670, 0.975152270656823420, 0.975163346220921600, 0.975174419347111240, 0.975185490035364920, +0.975196558285654770, 0.975207624097953360, 0.975218687472232730, 0.975229748408465550, 0.975240806906623850, 0.975251862966680430, 0.975262916588607090, 0.975273967772376520, +0.975285016517960960, 0.975296062825332880, 0.975307106694464630, 0.975318148125328690, 0.975329187117897290, 0.975340223672143130, 0.975351257788038330, 0.975362289465555250, +0.975373318704666480, 0.975384345505344470, 0.975395369867561590, 0.975406391791290180, 0.975417411276503050, 0.975428428323172230, 0.975439442931270380, 0.975450455100769780, +0.975461464831643200, 0.975472472123862900, 0.975483476977401340, 0.975494479392231220, 0.975505479368324990, 0.975516476905654910, 0.975527472004193650, 0.975538464663913700, +0.975549454884787500, 0.975560442666787760, 0.975571428009886940, 0.975582410914057510, 0.975593391379272260, 0.975604369405503320, 0.975615344992723400, 0.975626318140905170, +0.975637288850021210, 0.975648257120043990, 0.975659222950946090, 0.975670186342700310, 0.975681147295278990, 0.975692105808654620, 0.975703061882800090, 0.975714015517687990, +0.975724966713290790, 0.975735915469581050, 0.975746861786531690, 0.975757805664115300, 0.975768747102304210, 0.975779686101071240, 0.975790622660389070, 0.975801556780230280, +0.975812488460567670, 0.975823417701373820, 0.975834344502621630, 0.975845268864283360, 0.975856190786331900, 0.975867110268740070, 0.975878027311480320, 0.975888941914525580, +0.975899854077848520, 0.975910763801421830, 0.975921671085218320, 0.975932575929210570, 0.975943478333371250, 0.975954378297673290, 0.975965275822089470, 0.975976170906592390, +0.975987063551154830, 0.975997953755749600, 0.976008841520349830, 0.976019726844927660, 0.976030609729456210, 0.976041490173908180, 0.976052368178256470, 0.976063243742473770, +0.976074116866533000, 0.976084987550407180, 0.976095855794068660, 0.976106721597490570, 0.976117584960645600, 0.976128445883506670, 0.976139304366046570, 0.976150160408238320, +0.976161014010054620, 0.976171865171468590, 0.976182713892452700, 0.976193560172980090, 0.976204404013023440, 0.976215245412555890, 0.976226084371550230, 0.976236920889979260, +0.976247754967816020, 0.976258586605033620, 0.976269415801604650, 0.976280242557502010, 0.976291066872698840, 0.976301888747167950, 0.976312708180882340, 0.976323525173814930, +0.976334339725938970, 0.976345151837226920, 0.976355961507652030, 0.976366768737187200, 0.976377573525805560, 0.976388375873479820, 0.976399175780183200, 0.976409973245888740, +0.976420768270569450, 0.976431560854198020, 0.976442350996747700, 0.976453138698191610, 0.976463923958502570, 0.976474706777653690, 0.976485487155618110, 0.976496265092368980, +0.976507040587879070, 0.976517813642121420, 0.976528584255069390, 0.976539352426695760, 0.976550118156973790, 0.976560881445876610, 0.976571642293377120, 0.976582400699448790, +0.976593156664064210, 0.976603910187196830, 0.976614661268819570, 0.976625409908905670, 0.976636156107428270, 0.976646899864360480, 0.976657641179675460, 0.976668380053346550, +0.976679116485346440, 0.976689850475648600, 0.976700582024226050, 0.976711311131052140, 0.976722037796099900, 0.976732762019342560, 0.976743483800753490, 0.976754203140305590, +0.976764920037972110, 0.976775634493726400, 0.976786346507541480, 0.976797056079390820, 0.976807763209247450, 0.976818467897084710, 0.976829170142875960, 0.976839869946594110, +0.976850567308212630, 0.976861262227704750, 0.976871954705043620, 0.976882644740202700, 0.976893332333155010, 0.976904017483874340, 0.976914700192333400, 0.976925380458505630, +0.976936058282364520, 0.976946733663883180, 0.976957406603035090, 0.976968077099793390, 0.976978745154131520, 0.976989410766023080, 0.977000073935440750, 0.977010734662358330, +0.977021392946749060, 0.977032048788586400, 0.977042702187843500, 0.977053353144493930, 0.977064001658510930, 0.977074647729868070, 0.977085291358538500, 0.977095932544495670, +0.977106571287712940, 0.977117207588163780, 0.977127841445821650, 0.977138472860660020, 0.977149101832652240, 0.977159728361771560, 0.977170352447991550, 0.977180974091285790, +0.977191593291627410, 0.977202210048990110, 0.977212824363347330, 0.977223436234672450, 0.977234045662939250, 0.977244652648120660, 0.977255257190190460, 0.977265859289122130, +0.977276458944889130, 0.977287056157464920, 0.977297650926823190, 0.977308243252937300, 0.977318833135780940, 0.977329420575327350, 0.977340005571550210, 0.977350588124422990, +0.977361168233919390, 0.977371745900012860, 0.977382321122676980, 0.977392893901885440, 0.977403464237611490, 0.977414032129828800, 0.977424597578511190, 0.977435160583632000, +0.977445721145164930, 0.977456279263083540, 0.977466834937361420, 0.977477388167972470, 0.977487938954889830, 0.977498487298087300, 0.977509033197538570, 0.977519576653217310, +0.977530117665097120, 0.977540656233151560, 0.977551192357354550, 0.977561726037679430, 0.977572257274100020, 0.977582786066589880, 0.977593312415122820, 0.977603836319672510, +0.977614357780212550, 0.977624876796716720, 0.977635393369158830, 0.977645907497512350, 0.977656419181751060, 0.977666928421848770, 0.977677435217779170, 0.977687939569515940, +0.977698441477032780, 0.977708940940303580, 0.977719437959302270, 0.977729932534002200, 0.977740424664377160, 0.977750914350401180, 0.977761401592047830, 0.977771886389291020, +0.977782368742104560, 0.977792848650462230, 0.977803326114337730, 0.977813801133704860, 0.977824273708537420, 0.977834743838809420, 0.977845211524494440, 0.977855676765566510, +0.977866139561999410, 0.977876599913767080, 0.977887057820843060, 0.977897513283201400, 0.977907966300816000, 0.977918416873660660, 0.977928865001709280, 0.977939310684935780, +0.977949753923313960, 0.977960194716817940, 0.977970633065421200, 0.977981068969097980, 0.977991502427822070, 0.978001933441567380, 0.978012362010307830, 0.978022788134017330, +0.978033211812670110, 0.978043633046239760, 0.978054051834700180, 0.978064468178025610, 0.978074882076189760, 0.978085293529166730, 0.978095702536930460, 0.978106109099454950, +0.978116513216714440, 0.978126914888682310, 0.978137314115333000, 0.978147710896640320, 0.978158105232578400, 0.978168497123121260, 0.978178886568242810, 0.978189273567917410, +0.978199658122118620, 0.978210040230820590, 0.978220419893997550, 0.978230797111623530, 0.978241171883672320, 0.978251544210118400, 0.978261914090935440, 0.978272281526098020, +0.978282646515579610, 0.978293009059354570, 0.978303369157397130, 0.978313726809681090, 0.978324082016180930, 0.978334434776870430, 0.978344785091723850, 0.978355132960715520, +0.978365478383819260, 0.978375821361009200, 0.978386161892259580, 0.978396499977544630, 0.978406835616838390, 0.978417168810115090, 0.978427499557348980, 0.978437827858513960, +0.978448153713584400, 0.978458477122534420, 0.978468798085338260, 0.978479116601970180, 0.978489432672404290, 0.978499746296614740, 0.978510057474576090, 0.978520366206262040, +0.978530672491647050, 0.978540976330705470, 0.978551277723411440, 0.978561576669739200, 0.978571873169662990, 0.978582167223157050, 0.978592458830195970, 0.978602747990753530, +0.978613034704804210, 0.978623318972322350, 0.978633600793282210, 0.978643880167658020, 0.978654157095424030, 0.978664431576555030, 0.978674703611024600, 0.978684973198807540, +0.978695240339877980, 0.978705505034210280, 0.978715767281778890, 0.978726027082558070, 0.978736284436522160, 0.978746539343645750, 0.978756791803902740, 0.978767041817267810, +0.978777289383715220, 0.978787534503219540, 0.978797777175754890, 0.978808017401295860, 0.978818255179817020, 0.978828490511292280, 0.978838723395696330, 0.978848953833003520, +0.978859181823188430, 0.978869407366225300, 0.978879630462088700, 0.978889851110753000, 0.978900069312192870, 0.978910285066382340, 0.978920498373296200, 0.978930709232908700, +0.978940917645194530, 0.978951123610128040, 0.978961327127683690, 0.978971528197836060, 0.978981726820559730, 0.978991922995828930, 0.979002116723618370, 0.979012308003902490, +0.979022496836655880, 0.979032683221853000, 0.979042867159468420, 0.979053048649476840, 0.979063227691852500, 0.979073404286569970, 0.979083578433604050, 0.979093750132929100, +0.979103919384519910, 0.979114086188350830, 0.979124250544396450, 0.979134412452631770, 0.979144571913030840, 0.979154728925568430, 0.979164883490219240, 0.979175035606957840, +0.979185185275758820, 0.979195332496596850, 0.979205477269446620, 0.979215619594282830, 0.979225759471079700, 0.979235896899812270, 0.979246031880455110, 0.979256164412982910, +0.979266294497370240, 0.979276422133591900, 0.979286547321622570, 0.979296670061436720, 0.979306790353009270, 0.979316908196314780, 0.979327023591328060, 0.979337136538023790, +0.979347247036376660, 0.979357355086361350, 0.979367460687952880, 0.979377563841125620, 0.979387664545854350, 0.979397762802113990, 0.979407858609879220, 0.979417951969124840, +0.979428042879825540, 0.979438131341956340, 0.979448217355491590, 0.979458300920406310, 0.979468382036675300, 0.979478460704273360, 0.979488536923175170, 0.979498610693355750, +0.979508682014789690, 0.979518750887452220, 0.979528817311317580, 0.979538881286361020, 0.979548942812557220, 0.979559001889880990, 0.979569058518307330, 0.979579112697810950, +0.979589164428366850, 0.979599213709950070, 0.979609260542534940, 0.979619304926096720, 0.979629346860610320, 0.979639386346050410, 0.979649423382392140, 0.979659457969610290, +0.979669490107680010, 0.979679519796575750, 0.979689547036272760, 0.979699571826745830, 0.979709594167969990, 0.979719614059920140, 0.979729631502571310, 0.979739646495898400, +0.979749659039876540, 0.979759669134480320, 0.979769676779684960, 0.979779681975465500, 0.979789684721796730, 0.979799685018653780, 0.979809682866011560, 0.979819678263845310, +0.979829671212129830, 0.979839661710840030, 0.979849649759951150, 0.979859635359438100, 0.979869618509276010, 0.979879599209439790, 0.979889577459904680, 0.979899553260645710, +0.979909526611637660, 0.979919497512855900, 0.979929465964275330, 0.979939431965871190, 0.979949395517618390, 0.979959356619492070, 0.979969315271467360, 0.979979271473519600, +0.979989225225623480, 0.979999176527754260, 0.980009125379887160, 0.980019071781997210, 0.980029015734059540, 0.980038957236049390, 0.980048896287942010, 0.980058832889712180, +0.980068767041335280, 0.980078698742786520, 0.980088627994040950, 0.980098554795073800, 0.980108479145860300, 0.980118401046375600, 0.980128320496595040, 0.980138237496493540, +0.980148152046046440, 0.980158064145228990, 0.980167973794016320, 0.980177880992383790, 0.980187785740306520, 0.980197688037759750, 0.980207587884718960, 0.980217485281159040, +0.980227380227055470, 0.980237272722383370, 0.980247162767118100, 0.980257050361234890, 0.980266935504709110, 0.980276818197516110, 0.980286698439630900, 0.980296576231028950, +0.980306451571685610, 0.980316324461576130, 0.980326194900675850, 0.980336062888960020, 0.980345928426404110, 0.980355791512983470, 0.980365652148673220, 0.980375510333448830, +0.980385366067285660, 0.980395219350159050, 0.980405070182044480, 0.980414918562917180, 0.980424764492752730, 0.980434607971526260, 0.980444448999213240, 0.980454287575789120, +0.980464123701229260, 0.980473957375509020, 0.980483788598603970, 0.980493617370489460, 0.980503443691141060, 0.980513267560533810, 0.980523088978643490, 0.980532907945445450, +0.980542724460915060, 0.980552538525027880, 0.980562350137759390, 0.980572159299085030, 0.980581966008980400, 0.980591770267420730, 0.980601572074381590, 0.980611371429838560, +0.980621168333767110, 0.980630962786142700, 0.980640754786940900, 0.980650544336137410, 0.980660331433707340, 0.980670116079626510, 0.980679898273870370, 0.980689678016414380, +0.980699455307234350, 0.980709230146305620, 0.980719002533603780, 0.980728772469104610, 0.980738539952783370, 0.980748304984615740, 0.980758067564577400, 0.980767827692643810, +0.980777585368790780, 0.980787340592993660, 0.980797093365228250, 0.980806843685470330, 0.980816591553695050, 0.980826336969878310, 0.980836079933995690, 0.980845820446022980, +0.980855558505935640, 0.980865294113709370, 0.980875027269320080, 0.980884757972743100, 0.980894486223954140, 0.980904212022928990, 0.980913935369643330, 0.980923656264072850, +0.980933374706193240, 0.980943090695980180, 0.980952804233409580, 0.980962515318456680, 0.980972223951097620, 0.980981930131307970, 0.980991633859063520, 0.981001335134339850, +0.981011033957112980, 0.981020730327358700, 0.981030424245052380, 0.981040115710170020, 0.981049804722687320, 0.981059491282580080, 0.981069175389824190, 0.981078857044395350, +0.981088536246269350, 0.981098212995422210, 0.981107887291829410, 0.981117559135466830, 0.981127228526310290, 0.981136895464335800, 0.981146559949519050, 0.981156221981835830, +0.981165881561262050, 0.981175538687773850, 0.981185193361346570, 0.981194845581956240, 0.981204495349578880, 0.981214142664190270, 0.981223787525766330, 0.981233429934282860, +0.981243069889715990, 0.981252707392041290, 0.981262342441234890, 0.981271975037272480, 0.981281605180130300, 0.981291232869784040, 0.981300858106209710, 0.981310480889383220, +0.981320101219280700, 0.981329719095877740, 0.981339334519150450, 0.981348947489074860, 0.981358558005626990, 0.981368166068782630, 0.981377771678517810, 0.981387374834808650, +0.981396975537631170, 0.981406573786961170, 0.981416169582774670, 0.981425762925047680, 0.981435353813756460, 0.981444942248876680, 0.981454528230384590, 0.981464111758256430, +0.981473692832467770, 0.981483271452994850, 0.981492847619813810, 0.981502421332900670, 0.981511992592231320, 0.981521561397782130, 0.981531127749529000, 0.981540691647448280, +0.981550253091515560, 0.981559812081707280, 0.981569368617999370, 0.981578922700368170, 0.981588474328789600, 0.981598023503239880, 0.981607570223695160, 0.981617114490131450, +0.981626656302524990, 0.981636195660851810, 0.981645732565088140, 0.981655267015210220, 0.981664799011194080, 0.981674328553015840, 0.981683855640652080, 0.981693380274078490, +0.981702902453271410, 0.981712422178207090, 0.981721939448861770, 0.981731454265211580, 0.981740966627232760, 0.981750476534901440, 0.981759983988194200, 0.981769488987086710, +0.981778991531555680, 0.981788491621577000, 0.981797989257127130, 0.981807484438182330, 0.981816977164718830, 0.981826467436713090, 0.981835955254140910, 0.981845440616978870, +0.981854923525203320, 0.981864403978790380, 0.981873881977716410, 0.981883357521957770, 0.981892830611490690, 0.981902301246291740, 0.981911769426336840, 0.981921235151602570, +0.981930698422065260, 0.981940159237701060, 0.981949617598486530, 0.981959073504398040, 0.981968526955411810, 0.981977977951504430, 0.981987426492651920, 0.981996872578830840, +0.982006316210017550, 0.982015757386188510, 0.982025196107320090, 0.982034632373388620, 0.982044066184370790, 0.982053497540242630, 0.982062926440980700, 0.982072352886561470, +0.982081776876961410, 0.982091198412156750, 0.982100617492124290, 0.982110034116840170, 0.982119448286281170, 0.982128860000423320, 0.982138269259243410, 0.982147676062717800, +0.982157080410822950, 0.982166482303535430, 0.982175881740831700, 0.982185278722688460, 0.982194673249081830, 0.982204065319988610, 0.982213454935385140, 0.982222842095248020, +0.982232226799553800, 0.982241609048279060, 0.982250988841400270, 0.982260366178894120, 0.982269741060736950, 0.982279113486905440, 0.982288483457376180, 0.982297850972125630, +0.982307216031130470, 0.982316578634367280, 0.982325938781812620, 0.982335296473443310, 0.982344651709235570, 0.982354004489166210, 0.982363354813211910, 0.982372702681349130, +0.982382048093554670, 0.982391391049805000, 0.982400731550077120, 0.982410069594347180, 0.982419405182592080, 0.982428738314788390, 0.982438068990913020, 0.982447397210942320, +0.982456722974853200, 0.982466046282622240, 0.982475367134226450, 0.982484685529641970, 0.982494001468845800, 0.982503314951814530, 0.982512625978525070, 0.982521934548954090, +0.982531240663078180, 0.982540544320874450, 0.982549845522319050, 0.982559144267389110, 0.982568440556061300, 0.982577734388312420, 0.982587025764119160, 0.982596314683458430, +0.982605601146306800, 0.982614885152641390, 0.982624166702438570, 0.982633445795675350, 0.982642722432328530, 0.982651996612374900, 0.982661268335791260, 0.982670537602554410, +0.982679804412641240, 0.982689068766028790, 0.982698330662693520, 0.982707590102612330, 0.982716847085762240, 0.982726101612119930, 0.982735353681662430, 0.982744603294366530, +0.982753850450209350, 0.982763095149167380, 0.982772337391217610, 0.982781577176336960, 0.982790814504502450, 0.982800049375690880, 0.982809281789879140, 0.982818511747044270, +0.982827739247163270, 0.982836964290212720, 0.982846186876169760, 0.982855407005011390, 0.982864624676714540, 0.982873839891255980, 0.982883052648612980, 0.982892262948762200, +0.982901470791681000, 0.982910676177345950, 0.982919879105734200, 0.982929079576822740, 0.982938277590588600, 0.982947473147008810, 0.982956666246060370, 0.982965856887720310, +0.982975045071965540, 0.982984230798773060, 0.982993414068120130, 0.983002594879983540, 0.983011773234340520, 0.983020949131168110, 0.983030122570443200, 0.983039293552143260, +0.983048462076244860, 0.983057628142725350, 0.983066791751561750, 0.983075952902731200, 0.983085111596210700, 0.983094267831977510, 0.983103421610008740, 0.983112572930281310, +0.983121721792772460, 0.983130868197459210, 0.983140012144318900, 0.983149153633328550, 0.983158292664465190, 0.983167429237706280, 0.983176563353028830, 0.983185695010409870, +0.983194824209826620, 0.983203950951256340, 0.983213075234676160, 0.983222197060063310, 0.983231316427395030, 0.983240433336648350, 0.983249547787800830, 0.983258659780829270, +0.983267769315711030, 0.983276876392423340, 0.983285981010943550, 0.983295083171248700, 0.983304182873316220, 0.983313280117123380, 0.983322374902647290, 0.983331467229865200, +0.983340557098754340, 0.983349644509292190, 0.983358729461455970, 0.983367811955222940, 0.983376891990570320, 0.983385969567475590, 0.983395044685915760, 0.983404117345868410, +0.983413187547310770, 0.983422255290220090, 0.983431320574573830, 0.983440383400349230, 0.983449443767523750, 0.983458501676074740, 0.983467557125979330, 0.983476610117214990, +0.983485660649759170, 0.983494708723589240, 0.983503754338682530, 0.983512797495016410, 0.983521838192568440, 0.983530876431315650, 0.983539912211235820, 0.983548945532306100, +0.983557976394504040, 0.983567004797807010, 0.983576030742192580, 0.983585054227637980, 0.983594075254120900, 0.983603093821618480, 0.983612109930108390, 0.983621123579567990, +0.983630134769974740, 0.983639143501306210, 0.983648149773539760, 0.983657153586653180, 0.983666154940623480, 0.983675153835428470, 0.983684150271045500, 0.983693144247452130, +0.983702135764626060, 0.983711124822544520, 0.983720111421185210, 0.983729095560525680, 0.983738077240543410, 0.983747056461215850, 0.983756033222520700, 0.983765007524435410, +0.983773979366937670, 0.983782948750004940, 0.983791915673614790, 0.983800880137745140, 0.983809842142372990, 0.983818801687476370, 0.983827758773032630, 0.983836713399019570, +0.983845665565414640, 0.983854615272195640, 0.983863562519340260, 0.983872507306825740, 0.983881449634629980, 0.983890389502730670, 0.983899326911105270, 0.983908261859731570, +0.983917194348587270, 0.983926124377650040, 0.983935051946897570, 0.983943977056307320, 0.983952899705857090, 0.983961819895524670, 0.983970737625287750, 0.983979652895123900, +0.983988565705010920, 0.983997476054926600, 0.984006383944848630, 0.984015289374754690, 0.984024192344622460, 0.984033092854429750, 0.984041990904154230, 0.984050886493773810, +0.984059779623266180, 0.984068670292609250, 0.984077558501780470, 0.984086444250757750, 0.984095327539519000, 0.984104208368041910, 0.984113086736304380, 0.984121962644283980, +0.984130836091958730, 0.984139707079306540, 0.984148575606304980, 0.984157441672931950, 0.984166305279165380, 0.984175166424982930, 0.984184025110362630, 0.984192881335282270, +0.984201735099719870, 0.984210586403652890, 0.984219435247059570, 0.984228281629917600, 0.984237125552204880, 0.984245967013899440, 0.984254806014979060, 0.984263642555421540, +0.984272476635205230, 0.984281308254307490, 0.984290137412706550, 0.984298964110380200, 0.984307788347306480, 0.984316610123463280, 0.984325429438828500, 0.984334246293380180, +0.984343060687096430, 0.984351872619954940, 0.984360682091933610, 0.984369489103010700, 0.984378293653163980, 0.984387095742371600, 0.984395895370611450, 0.984404692537861670, +0.984413487244100050, 0.984422279489304720, 0.984431069273453700, 0.984439856596525000, 0.984448641458496640, 0.984457423859346650, 0.984466203799053140, 0.984474981277594360, +0.984483756294947890, 0.984492528851091950, 0.984501298946004800, 0.984510066579664330, 0.984518831752048800, 0.984527594463136090, 0.984536354712904460, 0.984545112501332030, +0.984553867828396710, 0.984562620694076740, 0.984571371098350130, 0.984580119041195130, 0.984588864522589870, 0.984597607542512470, 0.984606348100941160, 0.984615086197853870, +0.984623821833228830, 0.984632555007044160, 0.984641285719278230, 0.984650013969909030, 0.984658739758914820, 0.984667463086273730, 0.984676183951964210, 0.984684902355963950, +0.984693618298251530, 0.984702331778805060, 0.984711042797602690, 0.984719751354622750, 0.984728457449843500, 0.984737161083243160, 0.984745862254799760, 0.984754560964491770, +0.984763257212297400, 0.984771950998194810, 0.984780642322162450, 0.984789331184178440, 0.984798017584221030, 0.984806701522268790, 0.984815382998299630, 0.984824062012292000, +0.984832738564224260, 0.984841412654074650, 0.984850084281821530, 0.984858753447443110, 0.984867420150917880, 0.984876084392224290, 0.984884746171340250, 0.984893405488244330, +0.984902062342915000, 0.984910716735330480, 0.984919368665469140, 0.984928018133309440, 0.984936665138829710, 0.984945309682008330, 0.984953951762823520, 0.984962591381253970, +0.984971228537277920, 0.984979863230873720, 0.984988495462019940, 0.984997125230694830, 0.985005752536877170, 0.985014377380544870, 0.985022999761676730, 0.985031619680250990, +0.985040237136246330, 0.985048852129640990, 0.985057464660413550, 0.985066074728542460, 0.985074682334006300, 0.985083287476783200, 0.985091890156852060, 0.985100490374191120, +0.985109088128778840, 0.985117683420594030, 0.985126276249614910, 0.985134866615820280, 0.985143454519188280, 0.985152039959697690, 0.985160622937326980, 0.985169203452054720, +0.985177781503859480, 0.985186357092719730, 0.985194930218614150, 0.985203500881521420, 0.985212069081419670, 0.985220634818287810, 0.985229198092104410, 0.985237758902847930, +0.985246317250497160, 0.985254873135030460, 0.985263426556426850, 0.985271977514664440, 0.985280526009722160, 0.985289072041578560, 0.985297615610212230, 0.985306156715601840, +0.985314695357726090, 0.985323231536563650, 0.985331765252093210, 0.985340296504293220, 0.985348825293142490, 0.985357351618619810, 0.985365875480703650, 0.985374396879372780, +0.985382915814605910, 0.985391432286381820, 0.985399946294679310, 0.985408457839476730, 0.985416966920752980, 0.985425473538486860, 0.985433977692657060, 0.985442479383242250, +0.985450978610221350, 0.985459475373573150, 0.985467969673275990, 0.985476461509309010, 0.985484950881650890, 0.985493437790280310, 0.985501922235176190, 0.985510404216317190, +0.985518883733682240, 0.985527360787250230, 0.985535835376999740, 0.985544307502909560, 0.985552777164958590, 0.985561244363125750, 0.985569709097389830, 0.985578171367729630, +0.985586631174124040, 0.985595088516551860, 0.985603543394991900, 0.985611995809423050, 0.985620445759824220, 0.985628893246174310, 0.985637338268452120, 0.985645780826636560, +0.985654220920706760, 0.985662658550641280, 0.985671093716419140, 0.985679526418019260, 0.985687956655420530, 0.985696384428601970, 0.985704809737542380, 0.985713232582220880, +0.985721652962616270, 0.985730070878707560, 0.985738486330473560, 0.985746899317893390, 0.985755309840945950, 0.985763717899610260, 0.985772123493865230, 0.985780526623690090, +0.985788927289063420, 0.985797325489964460, 0.985805721226372220, 0.985814114498265730, 0.985822505305623880, 0.985830893648425690, 0.985839279526650400, 0.985847662940277040, +0.985856043889284270, 0.985864422373651460, 0.985872798393357620, 0.985881171948381760, 0.985889543038703020, 0.985897911664300410, 0.985906277825152940, 0.985914641521239980, +0.985923002752540300, 0.985931361519033040, 0.985939717820697450, 0.985948071657512530, 0.985956423029457410, 0.985964771936511220, 0.985973118378653310, 0.985981462355862370, +0.985989803868117850, 0.985998142915398890, 0.986006479497684380, 0.986014813614953800, 0.986023145267186150, 0.986031474454360680, 0.986039801176456620, 0.986048125433452990, +0.986056447225329040, 0.986064766552063880, 0.986073083413636860, 0.986081397810027130, 0.986089709741213900, 0.986098019207176550, 0.986106326207893960, 0.986114630743345600, +0.986122932813510600, 0.986131232418368310, 0.986139529557897960, 0.986147824232078810, 0.986156116440890070, 0.986164406184311230, 0.986172693462321170, 0.986180978274899370, +0.986189260622025170, 0.986197540503677690, 0.986205817919836520, 0.986214092870480790, 0.986222365355589710, 0.986230635375142990, 0.986238902929119420, 0.986247168017498680, +0.986255430640260000, 0.986263690797382740, 0.986271948488846250, 0.986280203714629990, 0.986288456474713190, 0.986296706769075220, 0.986304954597695400, 0.986313199960553330, +0.986321442857628130, 0.986329683288899360, 0.986337921254346380, 0.986346156753948660, 0.986354389787685640, 0.986362620355536460, 0.986370848457480800, 0.986379074093498010, +0.986387297263567440, 0.986395517967668780, 0.986403736205781260, 0.986411951977884340, 0.986420165283957710, 0.986428376123980600, 0.986436584497932480, 0.986444790405792920, +0.986452993847541370, 0.986461194823157310, 0.986469393332620400, 0.986477589375910010, 0.986485782953005490, 0.986493974063886610, 0.986502162708532750, 0.986510348886923460, +0.986518532599038320, 0.986526713844856910, 0.986534892624358670, 0.986543068937523300, 0.986551242784330150, 0.986559414164758900, 0.986567583078789110, 0.986575749526400370, +0.986583913507572240, 0.986592075022284300, 0.986600234070516340, 0.986608390652247700, 0.986616544767458080, 0.986624696416127040, 0.986632845598234280, 0.986640992313759460, +0.986649136562682050, 0.986657278344981850, 0.986665417660638640, 0.986673554509631680, 0.986681688891940860, 0.986689820807545860, 0.986697950256426260, 0.986706077238561740, +0.986714201753932100, 0.986722323802517010, 0.986730443384296160, 0.986738560499249020, 0.986746675147355590, 0.986754787328595450, 0.986762897042948280, 0.986771004290393880, +0.986779109070912040, 0.986787211384482550, 0.986795311231084770, 0.986803408610698820, 0.986811503523304380, 0.986819595968881140, 0.986827685947408880, 0.986835773458867420, +0.986843858503236530, 0.986851941080496230, 0.986860021190625770, 0.986868098833605380, 0.986876174009414740, 0.986884246718033540, 0.986892316959441910, 0.986900384733619300, +0.986908450040545840, 0.986916512880201440, 0.986924573252565550, 0.986932631157618200, 0.986940686595339290, 0.986948739565708720, 0.986956790068706180, 0.986964838104311790, +0.986972883672505350, 0.986980926773266650, 0.986988967406575600, 0.986997005572412100, 0.987005041270756170, 0.987013074501587600, 0.987021105264886290, 0.987029133560632270, +0.987037159388805540, 0.987045182749385690, 0.987053203642353050, 0.987061222067687320, 0.987069238025368500, 0.987077251515376620, 0.987085262537691580, 0.987093271092293610, +0.987101277179162180, 0.987109280798277640, 0.987117281949619900, 0.987125280633168960, 0.987133276848904840, 0.987141270596807560, 0.987149261876857030, 0.987157250689033480, +0.987165237033316710, 0.987173220909686840, 0.987181202318123900, 0.987189181258607880, 0.987197157731119050, 0.987205131735637290, 0.987213103272142620, 0.987221072340615400, +0.987229038941035310, 0.987237003073382690, 0.987244964737637560, 0.987252923933779950, 0.987260880661790070, 0.987268834921647960, 0.987276786713333960, 0.987284736036827870, +0.987292682892109920, 0.987300627279160240, 0.987308569197958950, 0.987316508648486300, 0.987324445630722300, 0.987332380144647300, 0.987340312190241430, 0.987348241767484590, +0.987356168876357240, 0.987364093516839400, 0.987372015688911420, 0.987379935392553310, 0.987387852627745420, 0.987395767394467880, 0.987403679692701040, 0.987411589522424800, +0.987419496883619740, 0.987427401776265870, 0.987435304200343420, 0.987443204155832750, 0.987451101642714100, 0.987458996660967810, 0.987466889210573910, 0.987474779291512840, +0.987482666903764740, 0.987490552047310070, 0.987498434722128950, 0.987506314928201730, 0.987514192665508660, 0.987522067934030410, 0.987529940733746780, 0.987537811064638230, +0.987545678926685210, 0.987553544319867970, 0.987561407244166970, 0.987569267699562330, 0.987577125686034730, 0.987584981203564080, 0.987592834252131070, 0.987600684831716040, +0.987608532942299110, 0.987616378583860980, 0.987624221756381870, 0.987632062459842250, 0.987639900694222580, 0.987647736459502990, 0.987655569755664150, 0.987663400582686310, +0.987671228940549930, 0.987679054829235570, 0.987686878248723480, 0.987694699198994220, 0.987702517680028480, 0.987710333691806160, 0.987718147234308060, 0.987725958307514530, +0.987733766911406240, 0.987741573045963440, 0.987749376711166690, 0.987757177906996690, 0.987764976633433540, 0.987772772890458060, 0.987780566678050590, 0.987788357996191690, +0.987796146844861830, 0.987803933224041700, 0.987811717133711740, 0.987819498573852540, 0.987827277544444550, 0.987835054045468340, 0.987842828076904490, 0.987850599638733560, +0.987858368730936130, 0.987866135353492770, 0.987873899506384270, 0.987881661189590750, 0.987889420403093240, 0.987897177146872090, 0.987904931420908070, 0.987912683225181660, +0.987920432559673540, 0.987928179424364280, 0.987935923819234780, 0.987943665744265400, 0.987951405199436690, 0.987959142184729580, 0.987966876700124620, 0.987974608745602500, +0.987982338321143790, 0.987990065426729290, 0.987997790062339680, 0.988005512227955520, 0.988013231923557500, 0.988020949149126530, 0.988028663904643060, 0.988036376190087990, +0.988044086005442020, 0.988051793350685940, 0.988059498225800190, 0.988067200630765810, 0.988074900565563350, 0.988082598030173620, 0.988090293024577400, 0.988097985548755500, +0.988105675602688580, 0.988113363186357670, 0.988121048299743230, 0.988128730942826050, 0.988136411115587140, 0.988144088818007190, 0.988151764050066990, 0.988159436811747450, +0.988167107103029240, 0.988174774923893380, 0.988182440274320560, 0.988190103154291570, 0.988197763563787300, 0.988205421502788670, 0.988213076971276470, 0.988220729969231600, +0.988228380496634970, 0.988236028553467260, 0.988243674139709590, 0.988251317255342650, 0.988258957900347350, 0.988266596074704800, 0.988274231778395680, 0.988281865011401030, +0.988289495773701730, 0.988297124065278700, 0.988304749886112830, 0.988312373236185040, 0.988319994115476330, 0.988327612523967610, 0.988335228461639900, 0.988342841928474210, +0.988350452924451340, 0.988358061449552410, 0.988365667503758210, 0.988373271087049870, 0.988380872199408290, 0.988388470840814600, 0.988396067011249710, 0.988403660710694850, +0.988411251939130600, 0.988418840696538290, 0.988426426982898840, 0.988434010798193370, 0.988441592142402790, 0.988449171015508330, 0.988456747417490900, 0.988464321348331730, +0.988471892808011620, 0.988479461796511800, 0.988487028313813300, 0.988494592359897230, 0.988502153934744720, 0.988509713038336790, 0.988517269670654790, 0.988524823831679390, +0.988532375521391950, 0.988539924739773590, 0.988547471486805440, 0.988555015762468510, 0.988562557566744160, 0.988570096899613280, 0.988577633761057450, 0.988585168151057350, +0.988592700069594210, 0.988600229516649500, 0.988607756492204110, 0.988615280996239410, 0.988622803028736400, 0.988630322589676420, 0.988637839679040840, 0.988645354296810440, +0.988652866442966680, 0.988660376117490800, 0.988667883320363930, 0.988675388051567290, 0.988682890311082250, 0.988690390098890150, 0.988697887414971890, 0.988705382259309040, +0.988712874631882620, 0.988720364532673980, 0.988727851961664460, 0.988735336918835310, 0.988742819404167860, 0.988750299417643470, 0.988757776959243160, 0.988765252028948490, +0.988772724626740600, 0.988780194752601040, 0.988787662406510840, 0.988795127588451560, 0.988802590298404560, 0.988810050536350960, 0.988817508302272220, 0.988824963596149800, +0.988832416417964930, 0.988839866767698970, 0.988847314645333380, 0.988854760050849490, 0.988862202984228780, 0.988869643445452470, 0.988877081434502150, 0.988884516951359040, +0.988891949996004600, 0.988899380568420310, 0.988906808668587600, 0.988914234296487840, 0.988921657452102700, 0.988929078135413200, 0.988936496346401020, 0.988943912085047620, +0.988951325351334450, 0.988958736145242880, 0.988966144466754570, 0.988973550315850990, 0.988980953692513490, 0.988988354596723520, 0.988995753028462650, 0.989003148987712350, +0.989010542474454300, 0.989017933488669840, 0.989025322030340550, 0.989032708099448100, 0.989040091695973730, 0.989047472819899130, 0.989054851471205860, 0.989062227649875500, +0.989069601355889510, 0.989076972589229550, 0.989084341349877110, 0.989091707637813950, 0.989099071453021450, 0.989106432795481270, 0.989113791665174990, 0.989121148062084180, +0.989128501986190620, 0.989135853437475680, 0.989143202415921350, 0.989150548921508780, 0.989157892954219850, 0.989165234514036260, 0.989172573600939580, 0.989179910214911360, +0.989187244355933410, 0.989194576023987420, 0.989201905219055040, 0.989209231941117870, 0.989216556190157580, 0.989223877966155850, 0.989231197269094480, 0.989238514098955020, +0.989245828455719400, 0.989253140339369290, 0.989260449749886140, 0.989267756687251980, 0.989275061151448360, 0.989282363142456990, 0.989289662660259860, 0.989296959704838550, +0.989304254276174850, 0.989311546374250560, 0.989318835999047350, 0.989326123150547020, 0.989333407828731360, 0.989340690033582270, 0.989347969765081440, 0.989355247023210650, +0.989362521807951700, 0.989369794119286610, 0.989377063957196930, 0.989384331321664590, 0.989391596212671360, 0.989398858630199160, 0.989406118574229890, 0.989413376044745220, +0.989420631041727280, 0.989427883565157650, 0.989435133615018340, 0.989442381191291130, 0.989449626293958050, 0.989456868923000890, 0.989464109078401430, 0.989471346760141810, +0.989478581968203930, 0.989485814702569470, 0.989493044963220550, 0.989500272750138850, 0.989507498063306620, 0.989514720902705540, 0.989521941268317720, 0.989529159160125070, +0.989536374578109610, 0.989543587522253130, 0.989550797992537650, 0.989558005988945060, 0.989565211511457600, 0.989572414560057070, 0.989579615134725480, 0.989586813235445060, +0.989594008862197390, 0.989601202014964710, 0.989608392693729130, 0.989615580898472460, 0.989622766629176920, 0.989629949885824420, 0.989637130668396980, 0.989644308976876940, +0.989651484811245870, 0.989658658171486240, 0.989665829057579940, 0.989672997469508990, 0.989680163407255620, 0.989687326870801740, 0.989694487860129810, 0.989701646375221400, +0.989708802416058960, 0.989715955982624520, 0.989723107074900190, 0.989730255692867990, 0.989737401836510270, 0.989744545505809040, 0.989751686700746540, 0.989758825421304670, +0.989765961667465780, 0.989773095439211990, 0.989780226736525440, 0.989787355559388240, 0.989794481907782740, 0.989801605781691070, 0.989808727181095470, 0.989815846105977950, +0.989822962556320740, 0.989830076532106200, 0.989837188033316440, 0.989844297059933710, 0.989851403611940240, 0.989858507689318490, 0.989865609292050250, 0.989872708420117990, +0.989879805073503930, 0.989886899252190310, 0.989893990956159600, 0.989901080185393800, 0.989908166939875380, 0.989915251219586570, 0.989922333024509600, 0.989929412354626730, +0.989936489209920280, 0.989943563590372720, 0.989950635495966180, 0.989957704926683110, 0.989964771882505870, 0.989971836363416570, 0.989978898369397790, 0.989985957900431650, +0.989993014956500610, 0.990000069537587010, 0.990007121643673330, 0.990014171274741780, 0.990021218430774950, 0.990028263111754960, 0.990035305317664260, 0.990042345048485320, +0.990049382304200590, 0.990056417084792310, 0.990063449390243040, 0.990070479220535150, 0.990077506575651190, 0.990084531455573290, 0.990091553860284130, 0.990098573789766070, +0.990105591244001550, 0.990112606222973040, 0.990119618726662990, 0.990126628755054080, 0.990133636308128450, 0.990140641385868770, 0.990147643988257390, 0.990154644115276980, +0.990161641766909910, 0.990168636943138840, 0.990175629643946010, 0.990182619869314330, 0.990189607619226030, 0.990196592893663690, 0.990203575692609750, 0.990210556016047020, +0.990217533863957830, 0.990224509236324770, 0.990231482133130500, 0.990238452554357610, 0.990245420499988540, 0.990252385970005870, 0.990259348964392160, 0.990266309483130100, +0.990273267526202370, 0.990280223093591430, 0.990287176185280060, 0.990294126801250620, 0.990301074941485780, 0.990308020605968340, 0.990314963794680870, 0.990321904507605930, +0.990328842744726210, 0.990335778506024500, 0.990342711791483370, 0.990349642601085380, 0.990356570934813220, 0.990363496792649680, 0.990370420174577440, 0.990377341080579070, +0.990384259510637350, 0.990391175464735210, 0.990398088942854860, 0.990404999944979440, 0.990411908471091400, 0.990418814521173640, 0.990425718095208850, 0.990432619193179710, +0.990439517815069110, 0.990446413960859750, 0.990453307630534300, 0.990460198824075540, 0.990467087541466400, 0.990473973782689420, 0.990480857547727520, 0.990487738836563490, +0.990494617649180120, 0.990501493985560310, 0.990508367845686630, 0.990515239229542100, 0.990522108137109390, 0.990528974568371520, 0.990535838523311060, 0.990542700001911140, +0.990549559004154530, 0.990556415530023940, 0.990563269579502250, 0.990570121152572370, 0.990576970249217310, 0.990583816869419760, 0.990590661013162620, 0.990597502680428900, +0.990604341871201500, 0.990611178585463100, 0.990618012823196840, 0.990624844584385490, 0.990631673869011960, 0.990638500677059390, 0.990645325008510550, 0.990652146863348350, +0.990658966241555810, 0.990665783143115930, 0.990672597568011400, 0.990679409516225460, 0.990686218987741010, 0.990693025982541050, 0.990699830500608500, 0.990706632541926480, +0.990713432106477780, 0.990720229194245410, 0.990727023805212600, 0.990733815939362160, 0.990740605596677200, 0.990747392777140630, 0.990754177480735690, 0.990760959707445380, +0.990767739457252610, 0.990774516730140500, 0.990781291526091960, 0.990788063845090330, 0.990794833687118510, 0.990801601052159530, 0.990808365940196720, 0.990815128351212880, +0.990821888285191240, 0.990828645742114930, 0.990835400721966850, 0.990842153224730460, 0.990848903250388550, 0.990855650798924460, 0.990862395870321320, 0.990869138464562040, +0.990875878581629950, 0.990882616221508080, 0.990889351384179770, 0.990896084069628150, 0.990902814277836220, 0.990909542008787230, 0.990916267262464510, 0.990922990038851090, +0.990929710337930090, 0.990936428159684860, 0.990943143504098620, 0.990949856371154400, 0.990956566760835660, 0.990963274673125620, 0.990969980108007190, 0.990976683065463830, +0.990983383545478770, 0.990990081548035250, 0.990996777073116510, 0.991003470120705890, 0.991010160690786510, 0.991016848783341950, 0.991023534398355110, 0.991030217535809440, +0.991036898195688190, 0.991043576377974690, 0.991050252082652290, 0.991056925309704240, 0.991063596059113870, 0.991070264330864650, 0.991076930124939580, 0.991083593441322240, +0.991090254279995970, 0.991096912640944020, 0.991103568524149820, 0.991110221929596640, 0.991116872857268020, 0.991123521307147200, 0.991130167279217430, 0.991136810773462380, +0.991143451789865180, 0.991150090328409390, 0.991156726389078480, 0.991163359971855670, 0.991169991076724540, 0.991176619703668330, 0.991183245852670590, 0.991189869523714790, +0.991196490716784280, 0.991203109431862520, 0.991209725668933060, 0.991216339427979260, 0.991222950708984580, 0.991229559511932590, 0.991236165836806630, 0.991242769683590260, +0.991249371052266960, 0.991255969942820170, 0.991262566355233580, 0.991269160289490640, 0.991275751745574700, 0.991282340723469320, 0.991288927223158090, 0.991295511244624670, +0.991302092787852310, 0.991308671852824790, 0.991315248439525680, 0.991321822547938440, 0.991328394178046520, 0.991334963329833730, 0.991341530003283400, 0.991348094198379330, +0.991354655915104970, 0.991361215153444110, 0.991367771913380210, 0.991374326194896740, 0.991380877997977470, 0.991387427322606100, 0.991393974168766070, 0.991400518536441070, +0.991407060425614880, 0.991413599836270980, 0.991420136768393250, 0.991426671221964930, 0.991433203196970040, 0.991439732693392140, 0.991446259711214920, 0.991452784250422050, +0.991459306310997100, 0.991465825892924090, 0.991472342996186470, 0.991478857620767930, 0.991485369766652250, 0.991491879433823110, 0.991498386622264300, 0.991504891331959510, +0.991511393562892530, 0.991517893315047140, 0.991524390588407020, 0.991530885382955750, 0.991537377698677340, 0.991543867535555570, 0.991550354893574020, 0.991556839772716580, +0.991563322172967050, 0.991569802094309450, 0.991576279536727110, 0.991582754500204060, 0.991589226984724180, 0.991595696990271170, 0.991602164516829030, 0.991608629564381450, +0.991615092132912320, 0.991621552222405440, 0.991628009832844600, 0.991634464964213810, 0.991640917616496750, 0.991647367789677550, 0.991653815483739760, 0.991660260698667530, +0.991666703434444850, 0.991673143691055190, 0.991679581468482670, 0.991686016766711200, 0.991692449585724670, 0.991698879925507090, 0.991705307786042270, 0.991711733167314200, +0.991718156069306910, 0.991724576492004070, 0.991730994435389810, 0.991737409899448030, 0.991743822884162740, 0.991750233389517950, 0.991756641415497580, 0.991763046962085730, +0.991769450029266090, 0.991775850617022780, 0.991782248725339930, 0.991788644354201440, 0.991795037503591330, 0.991801428173493590, 0.991807816363892370, 0.991814202074771670, +0.991820585306115390, 0.991826966057907540, 0.991833344330132370, 0.991839720122773880, 0.991846093435815980, 0.991852464269242890, 0.991858832623038760, 0.991865198497187460, +0.991871561891673140, 0.991877922806479910, 0.991884281241591890, 0.991890637196993110, 0.991896990672667790, 0.991903341668600060, 0.991909690184773930, 0.991916036221173640, +0.991922379777783080, 0.991928720854586720, 0.991935059451568460, 0.991941395568712640, 0.991947729206003270, 0.991954060363424590, 0.991960389040960840, 0.991966715238596030, +0.991973038956314500, 0.991979360194100270, 0.991985678951937680, 0.991991995229810850, 0.991998309027704140, 0.992004620345601660, 0.992010929183487540, 0.992017235541346130, +0.992023539419161660, 0.992029840816918360, 0.992036139734600360, 0.992042436172192010, 0.992048730129677650, 0.992055021607041620, 0.992061310604267830, 0.992067597121340740, +0.992073881158244690, 0.992080162714964020, 0.992086441791482860, 0.992092718387785570, 0.992098992503856470, 0.992105264139680140, 0.992111533295240380, 0.992117799970521850, +0.992124064165508910, 0.992130325880185680, 0.992136585114536730, 0.992142841868546290, 0.992149096142198820, 0.992155347935478440, 0.992161597248369830, 0.992167844080857120, +0.992174088432924870, 0.992180330304557430, 0.992186569695739040, 0.992192806606454370, 0.992199041036687660, 0.992205272986423360, 0.992211502455645820, 0.992217729444339500, +0.992223953952488860, 0.992230175980078340, 0.992236395527092420, 0.992242612593515540, 0.992248827179332160, 0.992255039284526630, 0.992261248909083520, 0.992267456052987160, +0.992273660716222360, 0.992279862898773240, 0.992286062600624570, 0.992292259821760840, 0.992298454562166370, 0.992304646821825730, 0.992310836600723390, 0.992317023898844130, +0.992323208716172190, 0.992329391052692240, 0.992335570908388860, 0.992341748283246620, 0.992347923177249960, 0.992354095590383460, 0.992360265522631680, 0.992366432973979310, +0.992372597944410790, 0.992378760433910820, 0.992384920442463960, 0.992391077970054770, 0.992397233016667930, 0.992403385582288020, 0.992409535666899600, 0.992415683270487240, +0.992421828393035830, 0.992427971034529730, 0.992434111194953950, 0.992440248874292610, 0.992446384072530830, 0.992452516789652960, 0.992458647025643790, 0.992464774780488110, +0.992470900054170380, 0.992477022846675490, 0.992483143157988130, 0.992489260988092760, 0.992495376336974270, 0.992501489204617340, 0.992507599591006760, 0.992513707496127110, +0.992519812919963160, 0.992525915862499830, 0.992532016323721570, 0.992538114303613270, 0.992544209802159740, 0.992550302819345640, 0.992556393355155770, 0.992562481409574930, +0.992568566982587890, 0.992574650074179550, 0.992580730684334500, 0.992586808813037620, 0.992592884460273720, 0.992598957626027570, 0.992605028310283970, 0.992611096513027920, +0.992617162234244230, 0.992623225473917460, 0.992629286232032610, 0.992635344508574600, 0.992641400303528210, 0.992647453616878340, 0.992653504448609780, 0.992659552798707550, +0.992665598667156530, 0.992671642053941320, 0.992677682959047130, 0.992683721382458640, 0.992689757324160870, 0.992695790784138720, 0.992701821762377090, 0.992707850258860880, +0.992713876273575210, 0.992719899806504660, 0.992725920857634450, 0.992731939426949370, 0.992737955514434440, 0.992743969120074680, 0.992749980243854970, 0.992755988885760330, +0.992761995045775780, 0.992767998723886100, 0.992773999920076530, 0.992779998634331860, 0.992785994866637210, 0.992791988616977710, 0.992797979885338130, 0.992803968671703620, +0.992809954976059170, 0.992815938798389920, 0.992821920138680760, 0.992827898996916700, 0.992833875373082990, 0.992839849267164620, 0.992845820679146620, 0.992851789609014100, +0.992857756056751970, 0.992863720022345570, 0.992869681505779810, 0.992875640507039910, 0.992881597026110780, 0.992887551062977770, 0.992893502617625990, 0.992899451690040240, +0.992905398280205960, 0.992911342388108190, 0.992917284013732030, 0.992923223157062610, 0.992929159818085270, 0.992935093996784920, 0.992941025693146910, 0.992946954907156340, +0.992952881638798360, 0.992958805888058070, 0.992964727654920940, 0.992970646939371870, 0.992976563741396200, 0.992982478060979170, 0.992988389898106010, 0.992994299252761730, +0.993000206124931780, 0.993006110514601190, 0.993012012421755410, 0.993017911846379660, 0.993023808788459080, 0.993029703247979010, 0.993035595224924680, 0.993041484719281330, +0.993047371731034300, 0.993053256260168830, 0.993059138306670140, 0.993065017870523700, 0.993070894951714630, 0.993076769550228500, 0.993082641666050310, 0.993088511299165530, +0.993094378449559500, 0.993100243117217450, 0.993106105302124840, 0.993111965004266910, 0.993117822223629210, 0.993123676960196880, 0.993129529213955360, 0.993135378984890020, +0.993141226272986180, 0.993147071078229300, 0.993152913400604740, 0.993158753240097950, 0.993164590596694370, 0.993170425470379150, 0.993176257861137830, 0.993182087768956000, +0.993187915193818880, 0.993193740135711930, 0.993199562594620720, 0.993205382570530590, 0.993211200063427000, 0.993217015073295410, 0.993222827600121260, 0.993228637643890020, +0.993234445204587260, 0.993240250282198310, 0.993246052876708750, 0.993251852988104140, 0.993257650616369840, 0.993263445761491390, 0.993269238423454380, 0.993275028602244150, +0.993280816297846480, 0.993286601510246720, 0.993292384239430450, 0.993298164485383330, 0.993303942248090710, 0.993309717527538160, 0.993315490323711360, 0.993321260636595870, +0.993327028466177260, 0.993332793812441000, 0.993338556675372850, 0.993344317054958290, 0.993350074951182880, 0.993355830364032300, 0.993361583293492110, 0.993367333739548000, +0.993373081702185520, 0.993378827181390370, 0.993384570177148210, 0.993390310689444610, 0.993396048718265150, 0.993401784263595600, 0.993407517325421650, 0.993413247903728760, +0.993418975998502930, 0.993424701609729510, 0.993430424737394510, 0.993436145381483390, 0.993441863541981830, 0.993447579218875610, 0.993453292412150410, 0.993459003121792140, +0.993464711347786240, 0.993470417090118630, 0.993476120348774970, 0.993481821123740950, 0.993487519415002350, 0.993493215222545080, 0.993498908546354700, 0.993504599386417000, +0.993510287742717880, 0.993515973615243020, 0.993521657003978210, 0.993527337908909350, 0.993533016330022000, 0.993538692267302180, 0.993544365720735570, 0.993550036690308170, +0.993555705176005550, 0.993561371177813850, 0.993567034695718500, 0.993572695729705750, 0.993578354279761160, 0.993584010345870630, 0.993589663928020170, 0.993595315026195470, +0.993600963640382640, 0.993606609770567250, 0.993612253416735420, 0.993617894578872950, 0.993623533256965620, 0.993629169450999550, 0.993634803160960530, 0.993640434386834580, +0.993646063128607590, 0.993651689386265360, 0.993657313159793890, 0.993662934449179080, 0.993668553254406950, 0.993674169575463510, 0.993679783412334650, 0.993685394765006390, +0.993691003633464520, 0.993696610017695160, 0.993702213917684320, 0.993707815333417900, 0.993713414264881910, 0.993719010712062480, 0.993724604674945500, 0.993730196153516990, +0.993735785147763060, 0.993741371657669510, 0.993746955683222690, 0.993752537224408370, 0.993758116281212690, 0.993763692853621760, 0.993769266941621600, 0.993774838545198440, +0.993780407664338060, 0.993785974299026600, 0.993791538449250170, 0.993797100114995000, 0.993802659296247000, 0.993808215992992410, 0.993813770205217330, 0.993819321932907780, +0.993824871176049900, 0.993830417934629780, 0.993835962208633680, 0.993841503998047720, 0.993847043302858000, 0.993852580123050560, 0.993858114458611830, 0.993863646309527730, +0.993869175675784480, 0.993874702557368320, 0.993880226954265370, 0.993885748866461970, 0.993891268293944030, 0.993896785236698110, 0.993902299694710110, 0.993907811667966380, +0.993913321156453140, 0.993918828160156530, 0.993924332679062880, 0.993929834713158430, 0.993935334262429420, 0.993940831326862060, 0.993946325906442610, 0.993951818001157280, +0.993957307610992550, 0.993962794735934410, 0.993968279375969320, 0.993973761531083520, 0.993979241201263350, 0.993984718386495160, 0.993990193086765060, 0.993995665302059520, +0.994001135032364760, 0.994006602277667240, 0.994012067037953080, 0.994017529313208860, 0.994022989103420910, 0.994028446408575350, 0.994033901228658760, 0.994039353563657360, +0.994044803413557500, 0.994050250778345750, 0.994055695658008330, 0.994061138052531710, 0.994066577961902230, 0.994072015386106340, 0.994077450325130290, 0.994082882778960730, +0.994088312747583910, 0.994093740230986290, 0.994099165229154310, 0.994104587742074440, 0.994110007769733240, 0.994115425312116940, 0.994120840369212000, 0.994126252941004980, +0.994131663027482350, 0.994137070628630550, 0.994142475744436040, 0.994147878374885500, 0.994153278519965160, 0.994158676179661580, 0.994164071353961340, 0.994169464042850890, +0.994174854246316800, 0.994180241964345620, 0.994185627196923720, 0.994191009944037970, 0.994196390205674520, 0.994201767981820140, 0.994207143272461290, 0.994212516077584650, +0.994217886397176680, 0.994223254231224040, 0.994228619579713310, 0.994233982442630950, 0.994239342819963620, 0.994244700711698020, 0.994250056117820580, 0.994255409038317990, +0.994260759473176940, 0.994266107422383970, 0.994271452885925780, 0.994276795863788920, 0.994282136355960080, 0.994287474362425820, 0.994292809883172920, 0.994298142918188080, +0.994303473467457730, 0.994308801530968790, 0.994314127108707920, 0.994319450200661590, 0.994324770806816690, 0.994330088927159910, 0.994335404561677900, 0.994340717710357260, +0.994346028373184980, 0.994351336550147620, 0.994356642241231770, 0.994361945446424420, 0.994367246165712260, 0.994372544399081850, 0.994377840146520200, 0.994383133408013880, +0.994388424183549670, 0.994393712473114590, 0.994398998276695090, 0.994404281594278070, 0.994409562425850440, 0.994414840771398860, 0.994420116630910120, 0.994425390004371130, +0.994430660891768680, 0.994435929293089660, 0.994441195208320750, 0.994446458637448850, 0.994451719580460750, 0.994456978037343450, 0.994462234008083650, 0.994467487492668220, +0.994472738491084200, 0.994477987003318240, 0.994483233029357370, 0.994488476569188260, 0.994493717622798150, 0.994498956190173590, 0.994504192271301710, 0.994509425866169420, +0.994514656974763600, 0.994519885597070940, 0.994525111733078670, 0.994530335382773690, 0.994535556546142780, 0.994540775223172970, 0.994545991413851250, 0.994551205118164640, +0.994556416336099920, 0.994561625067644120, 0.994566831312784340, 0.994572035071507490, 0.994577236343800460, 0.994582435129650390, 0.994587631429044270, 0.994592825241969130, +0.994598016568411850, 0.994603205408359450, 0.994608391761799050, 0.994613575628717770, 0.994618757009102520, 0.994623935902940290, 0.994629112310218330, 0.994634286230923650, +0.994639457665043140, 0.994644626612564030, 0.994649793073473230, 0.994654957047758080, 0.994660118535405480, 0.994665277536402660, 0.994670434050736630, 0.994675588078394510, +0.994680739619363320, 0.994685888673630390, 0.994691035241182740, 0.994696179322007380, 0.994701320916091650, 0.994706460023422670, 0.994711596643987560, 0.994716730777773340, +0.994721862424767340, 0.994726991584956700, 0.994732118258328630, 0.994737242444870160, 0.994742364144568620, 0.994747483357411140, 0.994752600083385170, 0.994757714322477500, +0.994762826074675590, 0.994767935339966550, 0.994773042118337720, 0.994778146409776240, 0.994783248214269440, 0.994788347531804560, 0.994793444362368830, 0.994798538705949360, +0.994803630562533630, 0.994808719932108840, 0.994813806814662250, 0.994818891210181080, 0.994823973118652670, 0.994829052540064480, 0.994834129474403530, 0.994839203921657260, +0.994844275881813010, 0.994849345354858030, 0.994854412340779760, 0.994859476839565330, 0.994864538851202410, 0.994869598375678010, 0.994874655412979590, 0.994879709963094610, +0.994884762026010280, 0.994889811601714080, 0.994894858690193340, 0.994899903291435520, 0.994904945405427950, 0.994909985032158000, 0.994915022171612980, 0.994920056823780490, +0.994925088988647840, 0.994930118666202400, 0.994935145856431720, 0.994940170559323270, 0.994945192774864370, 0.994950212503042390, 0.994955229743844980, 0.994960244497259390, +0.994965256763273190, 0.994970266541873930, 0.994975273833048960, 0.994980278636785840, 0.994985280953072040, 0.994990280781895000, 0.994995278123242290, 0.995000272977101250, +0.995005265343459680, 0.995010255222304910, 0.995015242613624510, 0.995020227517406040, 0.995025209933636860, 0.995030189862304740, 0.995035167303397140, 0.995040142256901630, +0.995045114722805770, 0.995050084701097130, 0.995055052191763270, 0.995060017194791870, 0.995064979710170270, 0.995069939737886270, 0.995074897277927420, 0.995079852330281400, +0.995084804894935670, 0.995089754971877900, 0.995094702561095890, 0.995099647662577080, 0.995104590276309040, 0.995109530402279560, 0.995114468040476320, 0.995119403190886880, +0.995124335853498910, 0.995129266028300100, 0.995134193715278230, 0.995139118914420750, 0.995144041625715460, 0.995148961849150140, 0.995153879584712350, 0.995158794832389890, +0.995163707592170430, 0.995168617864041870, 0.995173525647991550, 0.995178430944007490, 0.995183333752077350, 0.995188234072188930, 0.995193131904329900, 0.995198027248487940, +0.995202920104650950, 0.995207810472806820, 0.995212698352943010, 0.995217583745047540, 0.995222466649107960, 0.995227347065112400, 0.995232224993048310, 0.995237100432903700, +0.995241973384666360, 0.995246843848324180, 0.995251711823864850, 0.995256577311276150, 0.995261440310546090, 0.995266300821662340, 0.995271158844612920, 0.995276014379385620, +0.995280867425968330, 0.995285717984348730, 0.995290566054514940, 0.995295411636454630, 0.995300254730155820, 0.995305095335606400, 0.995309933452794280, 0.995314769081707240, +0.995319602222333400, 0.995324432874660550, 0.995329261038676470, 0.995334086714369290, 0.995338909901727020, 0.995343730600737330, 0.995348548811388350, 0.995353364533668070, +0.995358177767564300, 0.995362988513065150, 0.995367796770158410, 0.995372602538832310, 0.995377405819074630, 0.995382206610873400, 0.995387004914216720, 0.995391800729092610, +0.995396594055488970, 0.995401384893393690, 0.995406173242795010, 0.995410959103680940, 0.995415742476039480, 0.995420523359858640, 0.995425301755126450, 0.995430077661831230, +0.995434851079960550, 0.995439622009502870, 0.995444390450446080, 0.995449156402778310, 0.995453919866487680, 0.995458680841562190, 0.995463439327990200, 0.995468195325759360, +0.995472948834858150, 0.995477699855274570, 0.995482448386996730, 0.995487194430012770, 0.995491937984310790, 0.995496679049879040, 0.995501417626705520, 0.995506153714778570, +0.995510887314086100, 0.995515618424616440, 0.995520347046357720, 0.995525073179298170, 0.995529796823426020, 0.995534517978729270, 0.995539236645196280, 0.995543952822815160, +0.995548666511574140, 0.995553377711461460, 0.995558086422465350, 0.995562792644574030, 0.995567496377775750, 0.995572197622058840, 0.995576896377411310, 0.995581592643821510, +0.995586286421277780, 0.995590977709768230, 0.995595666509281330, 0.995600352819805190, 0.995605036641328270, 0.995609717973838790, 0.995614396817325000, 0.995619073171775120, +0.995623747037177600, 0.995628418413520680, 0.995633087300792700, 0.995637753698982110, 0.995642417608077150, 0.995647079028066040, 0.995651737958937240, 0.995656394400679100, +0.995661048353280060, 0.995665699816728260, 0.995670348791012350, 0.995674995276120470, 0.995679639272041170, 0.995684280778762810, 0.995688919796273610, 0.995693556324562130, +0.995698190363616840, 0.995702821913426070, 0.995707450973978170, 0.995712077545261700, 0.995716701627265110, 0.995721323219976640, 0.995725942323384960, 0.995730558937478310, +0.995735173062245350, 0.995739784697674430, 0.995744393843754020, 0.995749000500472770, 0.995753604667818930, 0.995758206345781050, 0.995762805534347590, 0.995767402233507240, +0.995771996443248320, 0.995776588163559410, 0.995781177394429060, 0.995785764135845740, 0.995790348387798010, 0.995794930150274430, 0.995799509423263560, 0.995804086206753870, +0.995808660500733910, 0.995813232305192360, 0.995817801620117680, 0.995822368445498650, 0.995826932781323610, 0.995831494627581250, 0.995836053984260120, 0.995840610851348780, +0.995845165228836040, 0.995849717116710330, 0.995854266514960340, 0.995858813423574740, 0.995863357842541990, 0.995867899771850970, 0.995872439211490050, 0.995876976161448100, +0.995881510621713820, 0.995886042592275640, 0.995890572073122480, 0.995895099064242780, 0.995899623565625340, 0.995904145577258810, 0.995908665099132010, 0.995913182131233480, +0.995917696673551900, 0.995922208726076290, 0.995926718288795090, 0.995931225361697090, 0.995935729944770980, 0.995940232038005520, 0.995944731641389520, 0.995949228754911650, +0.995953723378560810, 0.995958215512325660, 0.995962705156194890, 0.995967192310157400, 0.995971676974201970, 0.995976159148317270, 0.995980638832492220, 0.995985116026715470, +0.995989590730976040, 0.995994062945262710, 0.995998532669564060, 0.996002999903869090, 0.996007464648166700, 0.996011926902445670, 0.996016386666694680, 0.996020843940902840, +0.996025298725058960, 0.996029751019151700, 0.996034200823170070, 0.996038648137102970, 0.996043092960939290, 0.996047535294667830, 0.996051975138277480, 0.996056412491757250, +0.996060847355096150, 0.996065279728282740, 0.996069709611306140, 0.996074137004155260, 0.996078561906819090, 0.996082984319286550, 0.996087404241546400, 0.996091821673587900, +0.996096236615399810, 0.996100649066971160, 0.996105059028290720, 0.996109466499347730, 0.996113871480131090, 0.996118273970629800, 0.996122673970832760, 0.996127071480729210, +0.996131466500307820, 0.996135859029557810, 0.996140249068468100, 0.996144636617027790, 0.996149021675225900, 0.996153404243051430, 0.996157784320493400, 0.996162161907541140, +0.996166537004183230, 0.996170909610409110, 0.996175279726207670, 0.996179647351568050, 0.996184012486479250, 0.996188375130930500, 0.996192735284910810, 0.996197092948409190, +0.996201448121414980, 0.996205800803916960, 0.996210150995904600, 0.996214498697366780, 0.996218843908292740, 0.996223186628671600, 0.996227526858492580, 0.996231864597744600, +0.996236199846416980, 0.996240532604498960, 0.996244862871979550, 0.996249190648847870, 0.996253515935093370, 0.996257838730705060, 0.996262159035672170, 0.996266476849983820, +0.996270792173629240, 0.996275105006597770, 0.996279415348878540, 0.996283723200460660, 0.996288028561333580, 0.996292331431486430, 0.996296631810908440, 0.996300929699588830, +0.996305225097516840, 0.996309518004681930, 0.996313808421073090, 0.996318096346679780, 0.996322381781491240, 0.996326664725496910, 0.996330945178685700, 0.996335223141047170, +0.996339498612570650, 0.996343771593245280, 0.996348042083060600, 0.996352310082005750, 0.996356575590070070, 0.996360838607243120, 0.996365099133513900, 0.996369357168871980, +0.996373612713306710, 0.996377865766807420, 0.996382116329363350, 0.996386364400964060, 0.996390609981599010, 0.996394853071257190, 0.996399093669928400, 0.996403331777601760, +0.996407567394266840, 0.996411800519913070, 0.996416031154529700, 0.996420259298106290, 0.996424484950632290, 0.996428708112097050, 0.996432928782490010, 0.996437146961800630, +0.996441362650018370, 0.996445575847132780, 0.996449786553133210, 0.996453994768009220, 0.996458200491750160, 0.996462403724345690, 0.996466604465785170, 0.996470802716058040, +0.996474998475153970, 0.996479191743062430, 0.996483382519772980, 0.996487570805275060, 0.996491756599558130, 0.996495939902611760, 0.996500120714425620, 0.996504299034989160, +0.996508474864291950, 0.996512648202323660, 0.996516819049073630, 0.996520987404531660, 0.996525153268687070, 0.996529316641529660, 0.996533477523048990, 0.996537635913234630, +0.996541791812076140, 0.996545945219563190, 0.996550096135685460, 0.996554244560432400, 0.996558390493793690, 0.996562533935759000, 0.996566674886318120, 0.996570813345460380, +0.996574949313175700, 0.996579082789453620, 0.996583213774283940, 0.996587342267656110, 0.996591468269559910, 0.996595591779985130, 0.996599712798921230, 0.996603831326358210, +0.996607947362285530, 0.996612060906693080, 0.996616171959570310, 0.996620280520907230, 0.996624386590693410, 0.996628490168918630, 0.996632591255572580, 0.996636689850645130, +0.996640785954125860, 0.996644879566004780, 0.996648970686271340, 0.996653059314915550, 0.996657145451927070, 0.996661229097295820, 0.996665310251011350, 0.996669388913063670, +0.996673465083442570, 0.996677538762137830, 0.996681609949139240, 0.996685678644436580, 0.996689744848019640, 0.996693808559878440, 0.996697869780002740, 0.996701928508382240, +0.996705984745007050, 0.996710038489866830, 0.996714089742951610, 0.996718138504251060, 0.996722184773755180, 0.996726228551453870, 0.996730269837336920, 0.996734308631394340, +0.996738344933616130, 0.996742378743991850, 0.996746410062511750, 0.996750438889165590, 0.996754465223943290, 0.996758489066834840, 0.996762510417830150, 0.996766529276919220, +0.996770545644092070, 0.996774559519338470, 0.996778570902648430, 0.996782579794011970, 0.996786586193419090, 0.996790590100859690, 0.996794591516323880, 0.996798590439801570, +0.996802586871282760, 0.996806580810757570, 0.996810572258215900, 0.996814561213647750, 0.996818547677043140, 0.996822531648392300, 0.996826513127685000, 0.996830492114911590, +0.996834468610061750, 0.996838442613125930, 0.996842414124093800, 0.996846383142955820, 0.996850349669701760, 0.996854313704321870, 0.996858275246806260, 0.996862234297144930, +0.996866190855327900, 0.996870144921345510, 0.996874096495187770, 0.996878045576844670, 0.996881992166306570, 0.996885936263563480, 0.996889877868605500, 0.996893816981422880, +0.996897753602005720, 0.996901687730344150, 0.996905619366428300, 0.996909548510248490, 0.996913475161794740, 0.996917399321057270, 0.996921320988026440, 0.996925240162692240, +0.996929156845045020, 0.996933071035074780, 0.996936982732771870, 0.996940891938126520, 0.996944798651128950, 0.996948702871769510, 0.996952604600038210, 0.996956503835925380, +0.996960400579421260, 0.996964294830516180, 0.996968186589200390, 0.996972075855464100, 0.996975962629297660, 0.996979846910691300, 0.996983728699635250, 0.996987607996119960, +0.996991484800135660, 0.996995359111672590, 0.996999230930721180, 0.997003100257271570, 0.997006967091314310, 0.997010831432839750, 0.997014693281837890, 0.997018552638299420, +0.997022409502214550, 0.997026263873573630, 0.997030115752367110, 0.997033965138585220, 0.997037812032218530, 0.997041656433257260, 0.997045498341691760, 0.997049337757512590, +0.997053174680710090, 0.997057009111274590, 0.997060841049196570, 0.997064670494466570, 0.997068497447074820, 0.997072321907011780, 0.997076143874268020, 0.997079963348833860, +0.997083780330699780, 0.997087594819856200, 0.997091406816293710, 0.997095216320002750, 0.997099023330973670, 0.997102827849197020, 0.997106629874663360, 0.997110429407363050, +0.997114226447286760, 0.997118020994424810, 0.997121813048767790, 0.997125602610306360, 0.997129389679030860, 0.997133174254931980, 0.997136956338000040, 0.997140735928225720, +0.997144513025599590, 0.997148287630112210, 0.997152059741754030, 0.997155829360515830, 0.997159596486387970, 0.997163361119361100, 0.997167123259425800, 0.997170882906572740, +0.997174640060792480, 0.997178394722075590, 0.997182146890412850, 0.997185896565794590, 0.997189643748211620, 0.997193388437654590, 0.997197130634113970, 0.997200870337580650, +0.997204607548045070, 0.997208342265498040, 0.997212074489930210, 0.997215804221332050, 0.997219531459694440, 0.997223256205008070, 0.997226978457263490, 0.997230698216451380, +0.997234415482562640, 0.997238130255587830, 0.997241842535517730, 0.997245552322343020, 0.997249259616054370, 0.997252964416642680, 0.997256666724098410, 0.997260366538412660, +0.997264063859575890, 0.997267758687579000, 0.997271451022412660, 0.997275140864067770, 0.997278828212534880, 0.997282513067805020, 0.997286195429868960, 0.997289875298717270, +0.997293552674340940, 0.997297227556730780, 0.997300899945877560, 0.997304569841771960, 0.997308237244405090, 0.997311902153767530, 0.997315564569850270, 0.997319224492643990, +0.997322881922139800, 0.997326536858328390, 0.997330189301200540, 0.997333839250747260, 0.997337486706959320, 0.997341131669827740, 0.997344774139343300, 0.997348414115497020, +0.997352051598279670, 0.997355686587682140, 0.997359319083695350, 0.997362949086310290, 0.997366576595517970, 0.997370201611309070, 0.997373824133674700, 0.997377444162605760, +0.997381061698093370, 0.997384676740128210, 0.997388289288701270, 0.997391899343803680, 0.997395506905426330, 0.997399111973560240, 0.997402714548196400, 0.997406314629325720, +0.997409912216939310, 0.997413507311028070, 0.997417099911583000, 0.997420690018595240, 0.997424277632055770, 0.997427862751955610, 0.997431445378285760, 0.997435025511037470, +0.997438603150201390, 0.997442178295768870, 0.997445750947730910, 0.997449321106078650, 0.997452888770802960, 0.997456453941895080, 0.997460016619346130, 0.997463576803147120, +0.997467134493289160, 0.997470689689763380, 0.997474242392560770, 0.997477792601672690, 0.997481340317090020, 0.997484885538804100, 0.997488428266805950, 0.997491968501086680, +0.997495506241637520, 0.997499041488449590, 0.997502574241514010, 0.997506104500822000, 0.997509632266364800, 0.997513157538133520, 0.997516680316119290, 0.997520200600313430, +0.997523718390706970, 0.997527233687291350, 0.997530746490057460, 0.997534256798996880, 0.997537764614100490, 0.997541269935359850, 0.997544772762765990, 0.997548273096310220, +0.997551770935983680, 0.997555266281777710, 0.997558759133683640, 0.997562249491692700, 0.997565737355796010, 0.997569222725985140, 0.997572705602251200, 0.997576185984585420, +0.997579663872979140, 0.997583139267423700, 0.997586612167910450, 0.997590082574430710, 0.997593550486975730, 0.997597015905536950, 0.997600478830105500, 0.997603939260672920, +0.997607397197230460, 0.997610852639769560, 0.997614305588281460, 0.997617756042757710, 0.997621204003189540, 0.997624649469568300, 0.997628092441885440, 0.997631532920132290, +0.997634970904300420, 0.997638406394381060, 0.997641839390365770, 0.997645269892245780, 0.997648697900012760, 0.997652123413657830, 0.997655546433172670, 0.997658966958548610, +0.997662384989777110, 0.997665800526849720, 0.997669213569757800, 0.997672624118492890, 0.997676032173046350, 0.997679437733409720, 0.997682840799574590, 0.997686241371532280, +0.997689639449274360, 0.997693035032792390, 0.997696428122077820, 0.997699818717122210, 0.997703206817917020, 0.997706592424453810, 0.997709975536724140, 0.997713356154719460, +0.997716734278431440, 0.997720109907851650, 0.997723483042971430, 0.997726853683782670, 0.997730221830276710, 0.997733587482445230, 0.997736950640279670, 0.997740311303771830, +0.997743669472913150, 0.997747025147695310, 0.997750378328109980, 0.997753729014148720, 0.997757077205803090, 0.997760422903064660, 0.997763766105925320, 0.997767106814376530, +0.997770445028409950, 0.997773780748017150, 0.997777113973190130, 0.997780444703920130, 0.997783772940199150, 0.997787098682018650, 0.997790421929370400, 0.997793742682246190, +0.997797060940637580, 0.997800376704536250, 0.997803689973934090, 0.997807000748822670, 0.997810309029193650, 0.997813614815038940, 0.997816918106350200, 0.997820218903119120, +0.997823517205337570, 0.997826813012997250, 0.997830106326089820, 0.997833397144607170, 0.997836685468540980, 0.997839971297883040, 0.997843254632625240, 0.997846535472759260, +0.997849813818276980, 0.997853089669170190, 0.997856363025430680, 0.997859633887050120, 0.997862902254020630, 0.997866168126333890, 0.997869431503981660, 0.997872692386955860, +0.997875950775248380, 0.997879206668850880, 0.997882460067755490, 0.997885710971953890, 0.997888959381438070, 0.997892205296199820, 0.997895448716231040, 0.997898689641523730, +0.997901928072069680, 0.997905164007860780, 0.997908397448888930, 0.997911628395146130, 0.997914856846624180, 0.997918082803315180, 0.997921306265210920, 0.997924527232303400, +0.997927745704584650, 0.997930961682046420, 0.997934175164680860, 0.997937386152479840, 0.997940594645435270, 0.997943800643539380, 0.997947004146783830, 0.997950205155160860, +0.997953403668662360, 0.997956599687280340, 0.997959793211006920, 0.997962984239833870, 0.997966172773753430, 0.997969358812757500, 0.997972542356838300, 0.997975723405987610, +0.997978901960197670, 0.997982078019460480, 0.997985251583768160, 0.997988422653112610, 0.997991591227486040, 0.997994757306880480, 0.997997920891288030, 0.998001081980700810, +0.998004240575110830, 0.998007396674510330, 0.998010550278891300, 0.998013701388245860, 0.998016850002566120, 0.998019996121844330, 0.998023139746072600, 0.998026280875242920, +0.998029419509347650, 0.998032555648378780, 0.998035689292328440, 0.998038820441188970, 0.998041949094952360, 0.998045075253610970, 0.998048198917156900, 0.998051320085582280, +0.998054438758879450, 0.998057554937040400, 0.998060668620057490, 0.998063779807922940, 0.998066888500628970, 0.998069994698167710, 0.998073098400531490, 0.998076199607712540, +0.998079298319703100, 0.998082394536495390, 0.998085488258081740, 0.998088579484454290, 0.998091668215605470, 0.998094754451527510, 0.998097838192212540, 0.998100919437653000, +0.998103998187841230, 0.998107074442769360, 0.998110148202429940, 0.998113219466815080, 0.998116288235917140, 0.998119354509728550, 0.998122418288241550, 0.998125479571448480, +0.998128538359341790, 0.998131594651913590, 0.998134648449156560, 0.998137699751062810, 0.998140748557624910, 0.998143794868835090, 0.998146838684685790, 0.998149880005169350, +0.998152918830278240, 0.998155955160004880, 0.998158988994341520, 0.998162020333280830, 0.998165049176815030, 0.998168075524936580, 0.998171099377637930, 0.998174120734911520, +0.998177139596749920, 0.998180155963145350, 0.998183169834090500, 0.998186181209577580, 0.998189190089599390, 0.998192196474148140, 0.998195200363216300, 0.998198201756796630, +0.998201200654881270, 0.998204197057463110, 0.998207190964534250, 0.998210182376087610, 0.998213171292115400, 0.998216157712610300, 0.998219141637564760, 0.998222123066971450, +0.998225102000822820, 0.998228078439111320, 0.998231052381829740, 0.998234023828970530, 0.998236992780526240, 0.998239959236489450, 0.998242923196852710, 0.998245884661608680, +0.998248843630750060, 0.998251800104269170, 0.998254754082158910, 0.998257705564411730, 0.998260654551020310, 0.998263601041977200, 0.998266545037275080, 0.998269486536906610, +0.998272425540864480, 0.998275362049141250, 0.998278296061729580, 0.998281227578622250, 0.998284156599811730, 0.998287083125290910, 0.998290007155052340, 0.998292928689088810, +0.998295847727392880, 0.998298764269957340, 0.998301678316774970, 0.998304589867838430, 0.998307498923140300, 0.998310405482673470, 0.998313309546430610, 0.998316211114404490, +0.998319110186587810, 0.998322006762973450, 0.998324900843554080, 0.998327792428322370, 0.998330681517271110, 0.998333568110393310, 0.998336452207681520, 0.998339333809128540, +0.998342212914727250, 0.998345089524470540, 0.998347963638350990, 0.998350835256361590, 0.998353704378495130, 0.998356571004744290, 0.998359435135102060, 0.998362296769561340, +0.998365155908114810, 0.998368012550755470, 0.998370866697475990, 0.998373718348269380, 0.998376567503128420, 0.998379414162046120, 0.998382258325015260, 0.998385099992028740, +0.998387939163079550, 0.998390775838160380, 0.998393610017264340, 0.998396441700384330, 0.998399270887513120, 0.998402097578643840, 0.998404921773769160, 0.998407743472882300, +0.998410562675976050, 0.998413379383043420, 0.998416193594077290, 0.998419005309070680, 0.998421814528016590, 0.998424621250908030, 0.998427425477737770, 0.998430227208499050, +0.998433026443184770, 0.998435823181787920, 0.998438617424301400, 0.998441409170718440, 0.998444198421031940, 0.998446985175234890, 0.998449769433320420, 0.998452551195281530, +0.998455330461111350, 0.998458107230802750, 0.998460881504348860, 0.998463653281742800, 0.998466422562977570, 0.998469189348046290, 0.998471953636942080, 0.998474715429658040, +0.998477474726187090, 0.998480231526522540, 0.998482985830657420, 0.998485737638584720, 0.998488486950297790, 0.998491233765789630, 0.998493978085053360, 0.998496719908082090, +0.998499459234869160, 0.998502196065407470, 0.998504930399690350, 0.998507662237710810, 0.998510391579462200, 0.998513118424937620, 0.998515842774130190, 0.998518564627033140, +0.998521283983639710, 0.998524000843943100, 0.998526715207936450, 0.998529427075613100, 0.998532136446966030, 0.998534843321988720, 0.998537547700674380, 0.998540249583016020, +0.998542948969007080, 0.998545645858640810, 0.998548340251910420, 0.998551032148809140, 0.998553721549330200, 0.998556408453467160, 0.998559092861213030, 0.998561774772561030, +0.998564454187504720, 0.998567131106037230, 0.998569805528152000, 0.998572477453842140, 0.998575146883101120, 0.998577813815922260, 0.998580478252298900, 0.998583140192224270, +0.998585799635691830, 0.998588456582694910, 0.998591111033226730, 0.998593762987280860, 0.998596412444850650, 0.998599059405929300, 0.998601703870510390, 0.998604345838587150, +0.998606985310153130, 0.998609622285201560, 0.998612256763726000, 0.998614888745719690, 0.998617518231176280, 0.998620145220089020, 0.998622769712451450, 0.998625391708256930, +0.998628011207498890, 0.998630628210170790, 0.998633242716266190, 0.998635854725778430, 0.998638464238701170, 0.998641071255027660, 0.998643675774751440, 0.998646277797866080, +0.998648877324364910, 0.998651474354241620, 0.998654068887489750, 0.998656660924102660, 0.998659250464073890, 0.998661837507396900, 0.998664422054065470, 0.998667004104072830, +0.998669583657412760, 0.998672160714078830, 0.998674735274064360, 0.998677307337363150, 0.998679876903968640, 0.998682443973874400, 0.998685008547074090, 0.998687570623561170, +0.998690130203329420, 0.998692687286372280, 0.998695241872683550, 0.998697793962256550, 0.998700343555085190, 0.998702890651162910, 0.998705435250483390, 0.998707977353040290, +0.998710516958827290, 0.998713054067837950, 0.998715588680066050, 0.998718120795505150, 0.998720650414148920, 0.998723177535991050, 0.998725702161025300, 0.998728224289245240, +0.998730743920644650, 0.998733261055217200, 0.998735775692956570, 0.998738287833856540, 0.998740797477910780, 0.998743304625112960, 0.998745809275456970, 0.998748311428936390, +0.998750811085545090, 0.998753308245276750, 0.998755802908125050, 0.998758295074083980, 0.998760784743147110, 0.998763271915308230, 0.998765756590561220, 0.998768238768899860, +0.998770718450317840, 0.998773195634809040, 0.998775670322367250, 0.998778142512986360, 0.998780612206660030, 0.998783079403382180, 0.998785544103146570, 0.998788006305947220, +0.998790466011777790, 0.998792923220632180, 0.998795377932504280, 0.998797830147387990, 0.998800279865277090, 0.998802727086165460, 0.998805171810047020, 0.998807614036915650, +0.998810053766765350, 0.998812490999589800, 0.998814925735383110, 0.998817357974138950, 0.998819787715851560, 0.998822214960514600, 0.998824639708122080, 0.998827061958668110, +0.998829481712146360, 0.998831898968550960, 0.998834313727875790, 0.998836725990114860, 0.998839135755262060, 0.998841543023311410, 0.998843947794257000, 0.998846350068092750, +0.998848749844812530, 0.998851147124410370, 0.998853541906880470, 0.998855934192216630, 0.998858323980412970, 0.998860711271463590, 0.998863096065362390, 0.998865478362103380, +0.998867858161680780, 0.998870235464088490, 0.998872610269320500, 0.998874982577371170, 0.998877352388234270, 0.998879719701904030, 0.998882084518374460, 0.998884446837639770, +0.998886806659693870, 0.998889163984530980, 0.998891518812145110, 0.998893871142530590, 0.998896220975681200, 0.998898568311591410, 0.998900913150255200, 0.998903255491666700, +0.998905595335820020, 0.998907932682709390, 0.998910267532328810, 0.998912599884672740, 0.998914929739735060, 0.998917257097510000, 0.998919581957991910, 0.998921904321174890, +0.998924224187053070, 0.998926541555620660, 0.998928856426871900, 0.998931168800801020, 0.998933478677402120, 0.998935786056669660, 0.998938090938597760, 0.998940393323180520, +0.998942693210412290, 0.998944990600287410, 0.998947285492799990, 0.998949577887944360, 0.998951867785714880, 0.998954155186105640, 0.998956440089111110, 0.998958722494725390, +0.998961002402942830, 0.998963279813757770, 0.998965554727164640, 0.998967827143157460, 0.998970097061730790, 0.998972364482878960, 0.998974629406596090, 0.998976891832876750, +0.998979151761715150, 0.998981409193105630, 0.998983664127042540, 0.998985916563520430, 0.998988166502533410, 0.998990413944076060, 0.998992658888142590, 0.998994901334727570, +0.998997141283825220, 0.998999378735429990, 0.999001613689536440, 0.999003846146138690, 0.999006076105231510, 0.999008303566809030, 0.999010528530865800, 0.999012750997396280, +0.999014970966394800, 0.999017188437856030, 0.999019403411774200, 0.999021615888143870, 0.999023825866959480, 0.999026033348215600, 0.999028238331906570, 0.999030440818026940, +0.999032640806571280, 0.999034838297533920, 0.999037033290909540, 0.999039225786692580, 0.999041415784877480, 0.999043603285458940, 0.999045788288431270, 0.999047970793789260, +0.999050150801527260, 0.999052328311639930, 0.999054503324121710, 0.999056675838967290, 0.999058845856171110, 0.999061013375727840, 0.999063178397632030, 0.999065340921878380, +0.999067500948461310, 0.999069658477375390, 0.999071813508615400, 0.999073966042176020, 0.999076116078051580, 0.999078263616236860, 0.999080408656726430, 0.999082551199515060, +0.999084691244597310, 0.999086828791967750, 0.999088963841621270, 0.999091096393552200, 0.999093226447755560, 0.999095354004225670, 0.999097479062957540, 0.999099601623945620, +0.999101721687184810, 0.999103839252669660, 0.999105954320394840, 0.999108066890355250, 0.999110176962545340, 0.999112284536960100, 0.999114389613594110, 0.999116492192442140, +0.999118592273498970, 0.999120689856759390, 0.999122784942217960, 0.999124877529869560, 0.999126967619709090, 0.999129055211731120, 0.999131140305930530, 0.999133222902302000, +0.999135303000840520, 0.999137380601540780, 0.999139455704397550, 0.999141528309405720, 0.999143598416560090, 0.999145666025855420, 0.999147731137286500, 0.999149793750848340, +0.999151853866535710, 0.999153911484343520, 0.999155966604266420, 0.999158019226299430, 0.999160069350437440, 0.999162116976675230, 0.999164162105007800, 0.999166204735429830, +0.999168244867936540, 0.999170282502522490, 0.999172317639182790, 0.999174350277912240, 0.999176380418705820, 0.999178408061558550, 0.999180433206465100, 0.999182455853420690, +0.999184476002420220, 0.999186493653458350, 0.999188508806530430, 0.999190521461631120, 0.999192531618755540, 0.999194539277898590, 0.999196544439055370, 0.999198547102220780, +0.999200547267389830, 0.999202544934557510, 0.999204540103718730, 0.999206532774868710, 0.999208522948002330, 0.999210510623114610, 0.999212495800200660, 0.999214478479255490, +0.999216458660273980, 0.999218436343251470, 0.999220411528182860, 0.999222384215063150, 0.999224354403887460, 0.999226322094651010, 0.999228287287348690, 0.999230249981975630, +0.999232210178526930, 0.999234167876997810, 0.999236123077383190, 0.999238075779678270, 0.999240025983878180, 0.999241973689978020, 0.999243918897972930, 0.999245861607858000, +0.999247801819628470, 0.999249739533279340, 0.999251674748805940, 0.999253607466203400, 0.999255537685466710, 0.999257465406591330, 0.999259390629572250, 0.999261313354404600, +0.999263233581083710, 0.999265151309604800, 0.999267066539962890, 0.999268979272153410, 0.999270889506171490, 0.999272797242012350, 0.999274702479671210, 0.999276605219143190, +0.999278505460423850, 0.999280403203508080, 0.999282298448391450, 0.999284191195068950, 0.999286081443536030, 0.999287969193787930, 0.999289854445819860, 0.999291737199627160, +0.999293617455205170, 0.999295495212549010, 0.999297370471654230, 0.999299243232515950, 0.999301113495129620, 0.999302981259490570, 0.999304846525593930, 0.999306709293435240, +0.999308569563009730, 0.999310427334312860, 0.999312282607339950, 0.999314135382086240, 0.999315985658547290, 0.999317833436718320, 0.999319678716594770, 0.999321521498171990, +0.999323361781445430, 0.999325199566410530, 0.999327034853062510, 0.999328867641396950, 0.999330697931409270, 0.999332525723094830, 0.999334351016449070, 0.999336173811467440, +0.999337994108145390, 0.999339811906478250, 0.999341627206461690, 0.999343440008091060, 0.999345250311361790, 0.999347058116269450, 0.999348863422809370, 0.999350666230977240, +0.999352466540768370, 0.999354264352178330, 0.999356059665202580, 0.999357852479836880, 0.999359642796076360, 0.999361430613916800, 0.999363215933353640, 0.999364998754382450, +0.999366779076998780, 0.999368556901198190, 0.999370332226976130, 0.999372105054328390, 0.999373875383250180, 0.999375643213737400, 0.999377408545785490, 0.999379171379390140, +0.999380931714546780, 0.999382689551251090, 0.999384444889498620, 0.999386197729285160, 0.999387948070606160, 0.999389695913457280, 0.999391441257834190, 0.999393184103732460, +0.999394924451147750, 0.999396662300075730, 0.999398397650512080, 0.999400130502452470, 0.999401860855892550, 0.999403588710827910, 0.999405314067254300, 0.999407036925167410, +0.999408757284563020, 0.999410475145436570, 0.999412190507784070, 0.999413903371601080, 0.999415613736883260, 0.999417321603626510, 0.999419026971826390, 0.999420729841478670, +0.999422430212579150, 0.999424128085123600, 0.999425823459107690, 0.999427516334527200, 0.999429206711378030, 0.999430894589655730, 0.999432579969356190, 0.999434262850475210, +0.999435943233008660, 0.999437621116952220, 0.999439296502301680, 0.999440969389052910, 0.999442639777201710, 0.999444307666743970, 0.999445973057675460, 0.999447635949991970, +0.999449296343689400, 0.999450954238763620, 0.999452609635210320, 0.999454262533025610, 0.999455912932205260, 0.999457560832745060, 0.999459206234641020, 0.999460849137889020, +0.999462489542484840, 0.999464127448424390, 0.999465762855703650, 0.999467395764318530, 0.999469026174264810, 0.999470654085538700, 0.999472279498135770, 0.999473902412052250, +0.999475522827284020, 0.999477140743826990, 0.999478756161677030, 0.999480369080830160, 0.999481979501282370, 0.999483587423029670, 0.999485192846067960, 0.999486795770393340, +0.999488396196001720, 0.999489994122889080, 0.999491589551051440, 0.999493182480484910, 0.999494772911185380, 0.999496360843148860, 0.999497946276371450, 0.999499529210849280, +0.999501109646578230, 0.999502687583554320, 0.999504263021773750, 0.999505835961232550, 0.999507406401926700, 0.999508974343852440, 0.999510539787005660, 0.999512102731382580, +0.999513663176979210, 0.999515221123791650, 0.999516776571816150, 0.999518329521048580, 0.999519879971485280, 0.999521427923122260, 0.999522973375955640, 0.999524516329981630, +0.999526056785196240, 0.999527594741595800, 0.999529130199176330, 0.999530663157934040, 0.999532193617865160, 0.999533721578965690, 0.999535247041231980, 0.999536770004660120, +0.999538290469246360, 0.999539808434986910, 0.999541323901877890, 0.999542836869915520, 0.999544347339096140, 0.999545855309415860, 0.999547360780870920, 0.999548863753457640, +0.999550364227172140, 0.999551862202010750, 0.999553357677969710, 0.999554850655045240, 0.999556341133233660, 0.999557829112531330, 0.999559314592934340, 0.999560797574439050, +0.999562278057041790, 0.999563756040738770, 0.999565231525526450, 0.999566704511401060, 0.999568174998358820, 0.999569642986396170, 0.999571108475509450, 0.999572571465695000, +0.999574031956949050, 0.999575489949268040, 0.999576945442648300, 0.999578398437086180, 0.999579848932578120, 0.999581296929120340, 0.999582742426709410, 0.999584185425341550, +0.999585625925013320, 0.999587063925720940, 0.999588499427460970, 0.999589932430229760, 0.999591362934023620, 0.999592790938839130, 0.999594216444672720, 0.999595639451520630, +0.999597059959379530, 0.999598477968245860, 0.999599893478115840, 0.999601306488986150, 0.999602717000853240, 0.999604125013713540, 0.999605530527563510, 0.999606933542399600, +0.999608334058218360, 0.999609732075016360, 0.999611127592789920, 0.999612520611535830, 0.999613911131250310, 0.999615299151930040, 0.999616684673571450, 0.999618067696171230, +0.999619448219725930, 0.999620826244231870, 0.999622201769685750, 0.999623574796084210, 0.999624945323423720, 0.999626313351700820, 0.999627678880912090, 0.999629041911054280, +0.999630402442123760, 0.999631760474117280, 0.999633116007031420, 0.999634469040862840, 0.999635819575607990, 0.999637167611263530, 0.999638513147826260, 0.999639856185292610, +0.999641196723659480, 0.999642534762923200, 0.999643870303080660, 0.999645203344128430, 0.999646533886063170, 0.999647861928881660, 0.999649187472580360, 0.999650510517156250, +0.999651831062605690, 0.999653149108925660, 0.999654464656112740, 0.999655777704163690, 0.999657088253075200, 0.999658396302843920, 0.999659701853466750, 0.999661004904940250, +0.999662305457261200, 0.999663603510426490, 0.999664899064432680, 0.999666192119276650, 0.999667482674955200, 0.999668770731464980, 0.999670056288802790, 0.999671339346965500, +0.999672619905949910, 0.999673897965752790, 0.999675173526370920, 0.999676446587800970, 0.999677717150040060, 0.999678985213084850, 0.999680250776932120, 0.999681513841578770, +0.999682774407021580, 0.999684032473257540, 0.999685288040283450, 0.999686541108096070, 0.999687791676692310, 0.999689039746069150, 0.999690285316223390, 0.999691528387151810, +0.999692768958851510, 0.999694007031319280, 0.999695242604552000, 0.999696475678546690, 0.999697706253300120, 0.999698934328809300, 0.999700159905071110, 0.999701382982082550, +0.999702603559840530, 0.999703821638342040, 0.999705037217583970, 0.999706250297563210, 0.999707460878277000, 0.999708668959721990, 0.999709874541895420, 0.999711077624794050, +0.999712278208415130, 0.999713476292755420, 0.999714671877812040, 0.999715864963582000, 0.999717055550062180, 0.999718243637249810, 0.999719429225141900, 0.999720612313735320, +0.999721792903027320, 0.999722970993014770, 0.999724146583694680, 0.999725319675064390, 0.999726490267120680, 0.999727658359860880, 0.999728823953281890, 0.999729987047380810, +0.999731147642154760, 0.999732305737600860, 0.999733461333716100, 0.999734614430497830, 0.999735765027942920, 0.999736913126048620, 0.999738058724812140, 0.999739201824230370, +0.999740342424300650, 0.999741480525020100, 0.999742616126385820, 0.999743749228395040, 0.999744879831044870, 0.999746007934332440, 0.999747133538255060, 0.999748256642809860, +0.999749377247993950, 0.999750495353804670, 0.999751610960239120, 0.999752724067294540, 0.999753834674968140, 0.999754942783257160, 0.999756048392158920, 0.999757151501670440, +0.999758252111789040, 0.999759350222512170, 0.999760445833836830, 0.999761538945760360, 0.999762629558279990, 0.999763717671393160, 0.999764803285096980, 0.999765886399388900, +0.999766967014265930, 0.999768045129725610, 0.999769120745765290, 0.999770193862381970, 0.999771264479573320, 0.999772332597336440, 0.999773398215668800, 0.999774461334567600, +0.999775521954030300, 0.999776580074054120, 0.999777635694636510, 0.999778688815774810, 0.999779739437466450, 0.999780787559708670, 0.999781833182498910, 0.999782876305834620, +0.999783916929713130, 0.999784955054131900, 0.999785990679088240, 0.999787023804579510, 0.999788054430603370, 0.999789082557157040, 0.999790108184237970, 0.999791131311843610, +0.999792151939971510, 0.999793170068619010, 0.999794185697783560, 0.999795198827462590, 0.999796209457653680, 0.999797217588354270, 0.999798223219561800, 0.999799226351273720, +0.999800226983487580, 0.999801225116200950, 0.999802220749411270, 0.999803213883115990, 0.999804204517312670, 0.999805192651998850, 0.999806178287172000, 0.999807161422829770, +0.999808142058969620, 0.999809120195589100, 0.999810095832685760, 0.999811068970257290, 0.999812039608301010, 0.999813007746814700, 0.999813973385795920, 0.999814936525242120, +0.999815897165150960, 0.999816855305520110, 0.999817810946347140, 0.999818764087629600, 0.999819714729365150, 0.999820662871551470, 0.999821608514186110, 0.999822551657266740, +0.999823492300790930, 0.999824430444756440, 0.999825366089160840, 0.999826299234001900, 0.999827229879277190, 0.999828158024984370, 0.999829083671121110, 0.999830006817685190, +0.999830927464674280, 0.999831845612086050, 0.999832761259918160, 0.999833674408168390, 0.999834585056834420, 0.999835493205914030, 0.999836398855404870, 0.999837302005304740, +0.999838202655611300, 0.999839100806322430, 0.999839996457435820, 0.999840889608949120, 0.999841780260860240, 0.999842668413166940, 0.999843554065866890, 0.999844437218958100, +0.999845317872438130, 0.999846196026304870, 0.999847071680556090, 0.999847944835189680, 0.999848815490203320, 0.999849683645595010, 0.999850549301362520, 0.999851412457503530, +0.999852273114016140, 0.999853131270898030, 0.999853986928147090, 0.999854840085761200, 0.999855690743738150, 0.999856538902075930, 0.999857384560772330, 0.999858227719825240, +0.999859068379232660, 0.999859906538992370, 0.999860742199102260, 0.999861575359560330, 0.999862406020364470, 0.999863234181512680, 0.999864059843002640, 0.999864883004832560, +0.999865703667000340, 0.999866521829503750, 0.999867337492340910, 0.999868150655509600, 0.999868961319008040, 0.999869769482834010, 0.999870575146985630, 0.999871378311460780, +0.999872178976257460, 0.999872977141373800, 0.999873772806807560, 0.999874565972556970, 0.999875356638619930, 0.999876144804994540, 0.999876930471678690, 0.999877713638670620, +0.999878494305968200, 0.999879272473569560, 0.999880048141472800, 0.999880821309675820, 0.999881591978176830, 0.999882360146973960, 0.999883125816065090, 0.999883888985448440, +0.999884649655122030, 0.999885407825083950, 0.999886163495332440, 0.999886916665865490, 0.999887667336681220, 0.999888415507777850, 0.999889161179153390, 0.999889904350806050, +0.999890645022733950, 0.999891383194935200, 0.999892118867408030, 0.999892852040150550, 0.999893582713160980, 0.999894310886437430, 0.999895036559978020, 0.999895759733781090, +0.999896480407844850, 0.999897198582167300, 0.999897914256746790, 0.999898627431581420, 0.999899338106669530, 0.999900046282009350, 0.999900751957598980, 0.999901455133436760, +0.999902155809520910, 0.999902853985849660, 0.999903549662421340, 0.999904242839234070, 0.999904933516286180, 0.999905621693576000, 0.999906307371101750, 0.999906990548861780, +0.999907671226854310, 0.999908349405077670, 0.999909025083530080, 0.999909698262209990, 0.999910368941115620, 0.999911037120245430, 0.999911702799597510, 0.999912365979170440, +0.999913026658962420, 0.999913684838971810, 0.999914340519197030, 0.999914993699636320, 0.999915644380288130, 0.999916292561150890, 0.999916938242222940, 0.999917581423502620, +0.999918222104988370, 0.999918860286678530, 0.999919495968571550, 0.999920129150665750, 0.999920759832959800, 0.999921388015451830, 0.999922013698140380, 0.999922636881023900, +0.999923257564100940, 0.999923875747369740, 0.999924491430828840, 0.999925104614476700, 0.999925715298311870, 0.999926323482332680, 0.999926929166537800, 0.999927532350925460, +0.999928133035494330, 0.999928731220242950, 0.999929326905169670, 0.999929920090273040, 0.999930510775551620, 0.999931098961003960, 0.999931684646628630, 0.999932267832423950, +0.999932848518388710, 0.999933426704521230, 0.999934002390820310, 0.999934575577284270, 0.999935146263911890, 0.999935714450701620, 0.999936280137652010, 0.999936843324761740, +0.999937404012029350, 0.999937962199453520, 0.999938517887032700, 0.999939071074765650, 0.999939621762650830, 0.999940169950687020, 0.999940715638872770, 0.999941258827206750, +0.999941799515687510, 0.999942337704313840, 0.999942873393084410, 0.999943406581997650, 0.999943937271052460, 0.999944465460247400, 0.999944991149581130, 0.999945514339052430, +0.999946035028659970, 0.999946553218402310, 0.999947068908278450, 0.999947582098286820, 0.999948092788426220, 0.999948600978695420, 0.999949106669093090, 0.999949609859618000, +0.999950110550268830, 0.999950608741044470, 0.999951104431943570, 0.999951597622964930, 0.999952088314107200, 0.999952576505369390, 0.999953062196750060, 0.999953545388248100, +0.999954026079862280, 0.999954504271591380, 0.999954979963434190, 0.999955453155389580, 0.999955923847456350, 0.999956392039633270, 0.999956857731919220, 0.999957320924313000, +0.999957781616813590, 0.999958239809419670, 0.999958695502130120, 0.999959148694943840, 0.999959599387859720, 0.999960047580876530, 0.999960493273993280, 0.999960936467208740, +0.999961377160521910, 0.999961815353931690, 0.999962251047436860, 0.999962684241036400, 0.999963114934729220, 0.999963543128514320, 0.999963968822390580, 0.999964392016356780, +0.999964812710412150, 0.999965230904555470, 0.999965646598785620, 0.999966059793101710, 0.999966470487502650, 0.999966878681987410, 0.999967284376554910, 0.999967687571204240, +0.999968088265934420, 0.999968486460744320, 0.999968882155633070, 0.999969275350599540, 0.999969666045642860, 0.999970054240762020, 0.999970439935956020, 0.999970823131223870, +0.999971203826564680, 0.999971582021977560, 0.999971957717461500, 0.999972330913015410, 0.999972701608638600, 0.999973069804329980, 0.999973435500088770, 0.999973798695913850, +0.999974159391804560, 0.999974517587759790, 0.999974873283778760, 0.999975226479860590, 0.999975577176004270, 0.999975925372209030, 0.999976271068473980, 0.999976614264798220, +0.999976954961181000, 0.999977293157621410, 0.999977628854118450, 0.999977962050671580, 0.999978292747279670, 0.999978620943942080, 0.999978946640658010, 0.999979269837426470, +0.999979590534246790, 0.999979908731118080, 0.999980224428039690, 0.999980537625010710, 0.999980848322030380, 0.999981156519097910, 0.999981462216212650, 0.999981765413373580, +0.999982066110580270, 0.999982364307831610, 0.999982660005127140, 0.999982953202466000, 0.999983243899847500, 0.999983532097270870, 0.999983817794735440, 0.999984100992240440, +0.999984381689785210, 0.999984659887369070, 0.999984935584991130, 0.999985208782650960, 0.999985479480347770, 0.999985747678080910, 0.999986013375849580, 0.999986276573653240, +0.999986537271491230, 0.999986795469362980, 0.999987051167267600, 0.999987304365204670, 0.999987555063173380, 0.999987803261173310, 0.999988048959203680, 0.999988292157263920, +0.999988532855353500, 0.999988771053471730, 0.999989006751617950, 0.999989239949791720, 0.999989470647992370, 0.999989698846219350, 0.999989924544472110, 0.999990147742750080, +0.999990368441052600, 0.999990586639379230, 0.999990802337729410, 0.999991015536102590, 0.999991226234498210, 0.999991434432915720, 0.999991640131354780, 0.999991843329814610, +0.999992044028294890, 0.999992242226795060, 0.999992437925314560, 0.999992631123853060, 0.999992821822409890, 0.999993010020984730, 0.999993195719577120, 0.999993378918186400, +0.999993559616812240, 0.999993737815454200, 0.999993913514111820, 0.999994086712784670, 0.999994257411472300, 0.999994425610174260, 0.999994591308890230, 0.999994754507619650, +0.999994915206362190, 0.999995073405117510, 0.999995229103885050, 0.999995382302664600, 0.999995533001455610, 0.999995681200257840, 0.999995826899070850, 0.999995970097894320, +0.999996110796727900, 0.999996248995571160, 0.999996384694423760, 0.999996517893285470, 0.999996648592155870, 0.999996776791034600, 0.999996902489921460, 0.999997025688815990, +0.999997146387717970, 0.999997264586627080, 0.999997380285543080, 0.999997493484465540, 0.999997604183394340, 0.999997712382329150, 0.999997818081269640, 0.999997921280215580, +0.999998021979166760, 0.999998120178122840, 0.999998215877083600, 0.999998309076048920, 0.999998399775018370, 0.999998487973991820, 0.999998573672969180, 0.999998656871950000, +0.999998737570934160, 0.999998815769921560, 0.999998891468911850, 0.999998964667904940, 0.999999035366900600, 0.999999103565898610, 0.999999169264898960, 0.999999232463901320, +0.999999293162905700, 0.999999351361911760, 0.999999407060919500, 0.999999460259928700, 0.999999510958939240, 0.999999559157951020, 0.999999604856963820, 0.999999648055977740, +0.999999688754992460, 0.999999726954007960, 0.999999762653024150, 0.999999795852040910, 0.999999826551058240, 0.999999854750076020, 0.999999880449094050, 0.999999903648112530, +0.999999924347131140, 0.999999942546149990, 0.999999958245168960, 0.999999971444187950, 0.999999982143207180, 0.999999990342226310, 0.999999996041245560, 0.999999999240264840, +0.999999999939284010, 0.999999998138303310, 0.999999993837322520, 0.999999987036341740, 0.999999977735361090, 0.999999965934380450, 0.999999951633399830, 0.999999934832419330, +0.999999915531439080, 0.999999893730459060, 0.999999869429479270, 0.999999842628499720, 0.999999813327520640, 0.999999781526542010, 0.999999747225563950, 0.999999710424586570, +0.999999671123609770, 0.999999629322633980, 0.999999585021658980, 0.999999538220684990, 0.999999488919712240, 0.999999437118740730, 0.999999382817770680, 0.999999326016802190, +0.999999266715835280, 0.999999204914870270, 0.999999140613907270, 0.999999073812946390, 0.999999004511987750, 0.999998932711031690, 0.999998858410078300, 0.999998781609127700, +0.999998702308180220, 0.999998620507235980, 0.999998536206295090, 0.999998449405357980, 0.999998360104424670, 0.999998268303495470, 0.999998174002570630, 0.999998077201650350, +0.999997977900734860, 0.999997876099824490, 0.999997771798919350, 0.999997664998019790, 0.999997555697126120, 0.999997443896238570, 0.999997329595357360, 0.999997212794482840, +0.999997093493615210, 0.999996971692754920, 0.999996847391902310, 0.999996720591057380, 0.999996591290220780, 0.999996459489392640, 0.999996325188573400, 0.999996188387763390, +0.999996049086962820, 0.999995907286172160, 0.999995762985391720, 0.999995616184621850, 0.999995466883862980, 0.999995315083115450, 0.999995160782379600, 0.999995003981655860, +0.999994844680944570, 0.999994682880246290, 0.999994518579561230, 0.999994351778889850, 0.999994182478232570, 0.999994010677589860, 0.999993836376962150, 0.999993659576349890, +0.999993480275753410, 0.999993298475173260, 0.999993114174609790, 0.999992927374063640, 0.999992738073535170, 0.999992546273024810, 0.999992351972533110, 0.999992155172060530, +0.999991955871607500, 0.999991754071174580, 0.999991549770762320, 0.999991342970371180, 0.999991133670001700, 0.999990921869654440, 0.999990707569329840, 0.999990490769028350, +0.999990271468750750, 0.999990049668497470, 0.999989825368269080, 0.999989598568066020, 0.999989369267889060, 0.999989137467738650, 0.999988903167615460, 0.999988666367519930, +0.999988427067452720, 0.999988185267414510, 0.999987940967405840, 0.999987694167427280, 0.999987444867479480, 0.999987193067563120, 0.999986938767678750, 0.999986681967826920, +0.999986422668008520, 0.999986160868224010, 0.999985896568474140, 0.999985629768759490, 0.999985360469080820, 0.999985088669438690, 0.999984814369833890, 0.999984537570267060, +0.999984258270738780, 0.999983976471249920, 0.999983692171801160, 0.999983405372393160, 0.999983116073026590, 0.999982824273702330, 0.999982529974420940, 0.999982233175183200, +0.999981933875989880, 0.999981632076841760, 0.999981327777739630, 0.999981020978684020, 0.999980711679675950, 0.999980399880716190, 0.999980085581805290, 0.999979768782944260, +0.999979449484133750, 0.999979127685374560, 0.999978803386667670, 0.999978476588013750, 0.999978147289413590, 0.999977815490868170, 0.999977481192378060, 0.999977144393944360, +0.999976805095567740, 0.999976463297249100, 0.999976118998989420, 0.999975772200789260, 0.999975422902649850, 0.999975071104571730, 0.999974716806556030, 0.999974360008603510, +0.999974000710715070, 0.999973638912891700, 0.999973274615134190, 0.999972907817443410, 0.999972538519820490, 0.999972166722266190, 0.999971792424781400, 0.999971415627367240, +0.999971036330024490, 0.999970654532754130, 0.999970270235557180, 0.999969883438434510, 0.999969494141387140, 0.999969102344416050, 0.999968708047522140, 0.999968311250706510, +0.999967911953970170, 0.999967510157314000, 0.999967105860739000, 0.999966699064246290, 0.999966289767836860, 0.999965877971511600, 0.999965463675271730, 0.999965046879118250, +0.999964627583052050, 0.999964205787074350, 0.999963781491186030, 0.999963354695388440, 0.999962925399682350, 0.999962493604068970, 0.999962059308549310, 0.999961622513124480, +0.999961183217795700, 0.999960741422563860, 0.999960297127430290, 0.999959850332395870, 0.999959401037461840, 0.999958949242629290, 0.999958494947899460, 0.999958038153273330, +0.999957578858752140, 0.999957117064336990, 0.999956652770028990, 0.999956185975829470, 0.999955716681739330, 0.999955244887760000, 0.999954770593892590, 0.999954293800138230, +0.999953814506498120, 0.999953332712973490, 0.999952848419565440, 0.999952361626275320, 0.999951872333104340, 0.999951380540053610, 0.999950886247124470, 0.999950389454318130, +0.999949890161635820, 0.999949388369078760, 0.999948884076648280, 0.999948377284345600, 0.999947867992171830, 0.999947356200128530, 0.999946841908216810, 0.999946325116438000, +0.999945805824793310, 0.999945284033284200, 0.999944759741911770, 0.999944232950677580, 0.999943703659582630, 0.999943171868628580, 0.999942637577816540, 0.999942100787147850, +0.999941561496624050, 0.999941019706246270, 0.999940475416015940, 0.999939928625934390, 0.999939379336002960, 0.999938827546223210, 0.999938273256596340, 0.999937716467123820, +0.999937157177806960, 0.999936595388647210, 0.999936031099646020, 0.999935464310804710, 0.999934895022124850, 0.999934323233607650, 0.999933748945254660, 0.999933172157067230, +0.999932592869046900, 0.999932011081195120, 0.999931426793513320, 0.999930840006002960, 0.999930250718665480, 0.999929658931502430, 0.999929064644515140, 0.999928467857705280, +0.999927868571074190, 0.999927266784623400, 0.999926662498354490, 0.999926055712268890, 0.999925446426368270, 0.999924834640653960, 0.999924220355127510, 0.999923603569790490, +0.999922984284644540, 0.999922362499691130, 0.999921738214931800, 0.999921111430368100, 0.999920482146001710, 0.999919850361833950, 0.999919216077866710, 0.999918579294101440, +0.999917940010539570, 0.999917298227183000, 0.999916653944033060, 0.999916007161091640, 0.999915357878360060, 0.999914706095840210, 0.999914051813533540, 0.999913395031441720, +0.999912735749566410, 0.999912073967909270, 0.999911409686471960, 0.999910742905256060, 0.999910073624263430, 0.999909401843495530, 0.999908727562954120, 0.999908050782640890, +0.999907371502557600, 0.999906689722705800, 0.999906005443087280, 0.999905318663703800, 0.999904629384557040, 0.999903937605648660, 0.999903243326980440, 0.999902546548554150, +0.999901847270371460, 0.999901145492434140, 0.999900441214743970, 0.999899734437302730, 0.999899025160112090, 0.999898313383173920, 0.999897599106490010, 0.999896882330062020, +0.999896163053891950, 0.999895441277981360, 0.999894717002332230, 0.999893990226946250, 0.999893260951825290, 0.999892529176971250, 0.999891794902385780, 0.999891058128070890, +0.999890318854028350, 0.999889577080260050, 0.999888832806767770, 0.999888086033553390, 0.999887336760618920, 0.999886584987966010, 0.999885830715596560, 0.999885073943512670, +0.999884314671716010, 0.999883552900208580, 0.999882788628992270, 0.999882021858069070, 0.999881252587440650, 0.999880480817109230, 0.999879706547076590, 0.999878929777344600, +0.999878150507915400, 0.999877368738790740, 0.999876584469972740, 0.999875797701463180, 0.999875008433264270, 0.999874216665377680, 0.999873422397805630, 0.999872625630550020, +0.999871826363612830, 0.999871024596996060, 0.999870220330701830, 0.999869413564731910, 0.999868604299088530, 0.999867792533773670, 0.999866978268789230, 0.999866161504137430, +0.999865342239820270, 0.999864520475839620, 0.999863696212197730, 0.999862869448896570, 0.999862040185938270, 0.999861208423324930, 0.999860374161058550, 0.999859537399141130, +0.999858698137575000, 0.999857856376362040, 0.999857012115504480, 0.999856165355004320, 0.999855316094863780, 0.999854464335084960, 0.999853610075669970, 0.999852753316621050, +0.999851894057940170, 0.999851032299629460, 0.999850168041691360, 0.999849301284127740, 0.999848432026940850, 0.999847560270132880, 0.999846686013705970, 0.999845809257662420, +0.999844930002004360, 0.999844048246734010, 0.999843163991853470, 0.999842277237364960, 0.999841387983270820, 0.999840496229573270, 0.999839601976274420, 0.999838705223376590, +0.999837805970882010, 0.999836904218792790, 0.999835999967111480, 0.999835093215840080, 0.999834183964980920, 0.999833272214536330, 0.999832357964508640, 0.999831441214899970, +0.999830521965712760, 0.999829600216949220, 0.999828675968611580, 0.999827749220702390, 0.999826819973223760, 0.999825888226178020, 0.999824953979567720, 0.999824017233394870, +0.999823077987662120, 0.999822136242371600, 0.999821191997525730, 0.999820245253126960, 0.999819296009177520, 0.999818344265679840, 0.999817390022636250, 0.999816433280049210, +0.999815474037921150, 0.999814512296254400, 0.999813548055051290, 0.999812581314314390, 0.999811612074046010, 0.999810640334248600, 0.999809666094924500, 0.999808689356076360, +0.999807710117706420, 0.999806728379817320, 0.999805744142411300, 0.999804757405490910, 0.999803768169058690, 0.999802776433116990, 0.999801782197668350, 0.999800785462715340, +0.999799786228260270, 0.999798784494305810, 0.999797780260854310, 0.999796773527908410, 0.999795764295470570, 0.999794752563543330, 0.999793738332129260, 0.999792721601230780, +0.999791702370850470, 0.999790680640990970, 0.999789656411654740, 0.999788629682844320, 0.999787600454562390, 0.999786568726811380, 0.999785534499594060, 0.999784497772912890, +0.999783458546770420, 0.999782416821169310, 0.999781372596112110, 0.999780325871601590, 0.999779276647640210, 0.999778224924230630, 0.999777170701375510, 0.999776113979077400, +0.999775054757339080, 0.999773993036163100, 0.999772928815552130, 0.999771862095508830, 0.999770792876035870, 0.999769721157136030, 0.999768646938811730, 0.999767570221065880, +0.999766491003901140, 0.999765409287320160, 0.999764325071325620, 0.999763238355920290, 0.999762149141106840, 0.999761057426888140, 0.999759963213266660, 0.999758866500245260, +0.999757767287826840, 0.999756665576013840, 0.999755561364809250, 0.999754454654215750, 0.999753345444236110, 0.999752233734873100, 0.999751119526129610, 0.999750002818008190, +0.999748883610511840, 0.999747761903643230, 0.999746637697405240, 0.999745510991800650, 0.999744381786832230, 0.999743250082502980, 0.999742115878815450, 0.999740979175772760, +0.999739839973377560, 0.999738698271632750, 0.999737554070541210, 0.999736407370105830, 0.999735258170329380, 0.999734106471214860, 0.999732952272764930, 0.999731795574982820, +0.999730636377871070, 0.999729474681432690, 0.999728310485670790, 0.999727143790588020, 0.999725974596187390, 0.999724802902471790, 0.999723628709444310, 0.999722452017107630, +0.999721272825464860, 0.999720091134518870, 0.999718906944272680, 0.999717720254729270, 0.999716531065891530, 0.999715339377762470, 0.999714145190345070, 0.999712948503642230, +0.999711749317657160, 0.999710547632392640, 0.999709343447851780, 0.999708136764037470, 0.999706927580952920, 0.999705715898601020, 0.999704501716984770, 0.999703285036107280, +0.999702065855971660, 0.999700844176580890, 0.999699619997937880, 0.999698393320045950, 0.999697164142907990, 0.999695932466527100, 0.999694698290906400, 0.999693461616048880, +0.999692222441957770, 0.999690980768636160, 0.999689736596087060, 0.999688489924313580, 0.999687240753318940, 0.999685989083106130, 0.999684734913678370, 0.999683478245038780, +0.999682219077190460, 0.999680957410136630, 0.999679693243880400, 0.999678426578424980, 0.999677157413773390, 0.999675885749929050, 0.999674611586894860, 0.999673334924674250, +0.999672055763270230, 0.999670774102686120, 0.999669489942925040, 0.999668203283990200, 0.999666914125884930, 0.999665622468612350, 0.999664328312175670, 0.999663031656578220, +0.999661732501823220, 0.999660430847913780, 0.999659126694853350, 0.999657820042645140, 0.999656510891292260, 0.999655199240798150, 0.999653885091166040, 0.999652568442399250, +0.999651249294501110, 0.999649927647474730, 0.999648603501323560, 0.999647276856050930, 0.999645947711660040, 0.999644616068154250, 0.999643281925536980, 0.999641945283811560, +0.999640606142981230, 0.999639264503049300, 0.999637920364019330, 0.999636573725894540, 0.999635224588678260, 0.999633872952373940, 0.999632518816985010, 0.999631162182514690, +0.999629803048966540, 0.999628441416343770, 0.999627077284649950, 0.999625710653888500, 0.999624341524062650, 0.999622969895176070, 0.999621595767232090, 0.999620219140234020, +0.999618840014185440, 0.999617458389089770, 0.999616074264950360, 0.999614687641770860, 0.999613298519554610, 0.999611906898305150, 0.999610512778025930, 0.999609116158720390, +0.999607717040392090, 0.999606315423044460, 0.999604911306681050, 0.999603504691305430, 0.999602095576920920, 0.999600683963531300, 0.999599269851139890, 0.999597853239750370, +0.999596434129366160, 0.999595012519990830, 0.999593588411628040, 0.999592161804281230, 0.999590732697954070, 0.999589301092650100, 0.999587866988372880, 0.999586430385125850, +0.999584991282912890, 0.999583549681737460, 0.999582105581602990, 0.999580658982513360, 0.999579209884472130, 0.999577758287482850, 0.999576304191549190, 0.999574847596674700, +0.999573388502863150, 0.999571926910118090, 0.999570462818443200, 0.999568996227842230, 0.999567527138318760, 0.999566055549876430, 0.999564581462518920, 0.999563104876250110, +0.999561625791073440, 0.999560144206992680, 0.999558660124011510, 0.999557173542133800, 0.999555684461363110, 0.999554192881703220, 0.999552698803157890, 0.999551202225730790, +0.999549703149425590, 0.999548201574246290, 0.999546697500196310, 0.999545190927279780, 0.999543681855500130, 0.999542170284861360, 0.999540656215367140, 0.999539139647021240, +0.999537620579827530, 0.999536099013789700, 0.999534574948911740, 0.999533048385197300, 0.999531519322650160, 0.999529987761274330, 0.999528453701073460, 0.999526917142051440, +0.999525378084212270, 0.999523836527559490, 0.999522292472097230, 0.999520745917829130, 0.999519196864759210, 0.999517645312891330, 0.999516091262229400, 0.999514534712777180, +0.999512975664538560, 0.999511414117517540, 0.999509850071718000, 0.999508283527143830, 0.999506714483799020, 0.999505142941687350, 0.999503568900812820, 0.999501992361179430, +0.999500413322790940, 0.999498831785651460, 0.999497247749765010, 0.999495661215135330, 0.999494072181766560, 0.999492480649662560, 0.999490886618827350, 0.999489290089264900, +0.999487691060979340, 0.999486089533974440, 0.999484485508254420, 0.999482878983823150, 0.999481269960684650, 0.999479658438843010, 0.999478044418302130, 0.999476427899066210, +0.999474808881139270, 0.999473187364525280, 0.999471563349228260, 0.999469936835252430, 0.999468307822601650, 0.999466676311280170, 0.999465042301291960, 0.999463405792641150, +0.999461766785331940, 0.999460125279368230, 0.999458481274754120, 0.999456834771493940, 0.999455185769591580, 0.999453534269051370, 0.999451880269877190, 0.999450223772073380, +0.999448564775644030, 0.999446903280593270, 0.999445239286925190, 0.999443572794644020, 0.999441903803753970, 0.999440232314259160, 0.999438558326163680, 0.999436881839471880, +0.999435202854187850, 0.999433521370315820, 0.999431837387860010, 0.999430150906824630, 0.999428461927213800, 0.999426770449031830, 0.999425076472282960, 0.999423379996971390, +0.999421681023101360, 0.999419979550677180, 0.999418275579703090, 0.999416569110183170, 0.999414860142121890, 0.999413148675523440, 0.999411434710392180, 0.999409718246732300, +0.999407999284548150, 0.999406277823843950, 0.999404553864624120, 0.999402827406892790, 0.999401098450654500, 0.999399366995913470, 0.999397633042673930, 0.999395896590940410, +0.999394157640717040, 0.999392416192008360, 0.999390672244818590, 0.999388925799152170, 0.999387176855013440, 0.999385425412406820, 0.999383671471336550, 0.999381915031807180, +0.999380156093822910, 0.999378394657388310, 0.999376630722507820, 0.999374864289185650, 0.999373095357426240, 0.999371323927234270, 0.999369549998613830, 0.999367773571569580, +0.999365994646105980, 0.999364213222227350, 0.999362429299938130, 0.999360642879242870, 0.999358853960146010, 0.999357062542652000, 0.999355268626765270, 0.999353472212490490, +0.999351673299831990, 0.999349871888794320, 0.999348067979381920, 0.999346261571599340, 0.999344452665451130, 0.999342641260941860, 0.999340827358075940, 0.999339010956857950, +0.999337192057292430, 0.999335370659383940, 0.999333546763137020, 0.999331720368556110, 0.999329891475646100, 0.999328060084411220, 0.999326226194856230, 0.999324389806985680, +0.999322550920804240, 0.999320709536316350, 0.999318865653526680, 0.999317019272439770, 0.999315170393060390, 0.999313319015393110, 0.999311465139442580, 0.999309608765213350, +0.999307749892709980, 0.999305888521937360, 0.999304024652899910, 0.999302158285602540, 0.999300289420049670, 0.999298418056246200, 0.999296544194196560, 0.999294667833905640, +0.999292788975377990, 0.999290907618618380, 0.999289023763631490, 0.999287137410422080, 0.999285248558994810, 0.999283357209354350, 0.999281463361505580, 0.999279567015453170, +0.999277668171201780, 0.999275766828756300, 0.999273862988121380, 0.999271956649301680, 0.999270047812302220, 0.999268136477127640, 0.999266222643782620, 0.999264306312272140, +0.999262387482600880, 0.999260466154773600, 0.999258542328795190, 0.999256616004670420, 0.999254687182404180, 0.999252755862001130, 0.999250822043466270, 0.999248885726804260, +0.999246946912020100, 0.999245005599118550, 0.999243061788104510, 0.999241115478982760, 0.999239166671758270, 0.999237215366435840, 0.999235261563020450, 0.999233305261516770, +0.999231346461929900, 0.999229385164264630, 0.999227421368525940, 0.999225455074718720, 0.999223486282847850, 0.999221514992918220, 0.999219541204934840, 0.999217564918902570, +0.999215586134826420, 0.999213604852711270, 0.999211621072562230, 0.999209634794383960, 0.999207646018181790, 0.999205654743960390, 0.999203660971724860, 0.999201664701480200, +0.999199665933231280, 0.999197664666983340, 0.999195660902741150, 0.999193654640509910, 0.999191645880294410, 0.999189634622099860, 0.999187620865931270, 0.999185604611793510, +0.999183585859691800, 0.999181564609631150, 0.999179540861616530, 0.999177514615653070, 0.999175485871745870, 0.999173454629899930, 0.999171420890120340, 0.999169384652412230, +0.999167345916780690, 0.999165304683230730, 0.999163260951767440, 0.999161214722396160, 0.999159165995121780, 0.999157114769949390, 0.999155061046884340, 0.999153004825931500, +0.999150946107096320, 0.999148884890383670, 0.999146821175798780, 0.999144754963346980, 0.999142686253033150, 0.999140615044862620, 0.999138541338840610, 0.999136465134972230, +0.999134386433262690, 0.999132305233717210, 0.999130221536340900, 0.999128135341139090, 0.999126046648116880, 0.999123955457279610, 0.999121861768632380, 0.999119765582180630, +0.999117666897929360, 0.999115565715884000, 0.999113462036049670, 0.999111355858431690, 0.999109247183035290, 0.999107136009865780, 0.999105022338928510, 0.999102906170228680, +0.999100787503771510, 0.999098666339562350, 0.999096542677606610, 0.999094416517909530, 0.999092287860476320, 0.999090156705312430, 0.999088023052423170, 0.999085886901813770, +0.999083748253489780, 0.999081607107456300, 0.999079463463718900, 0.999077317322282780, 0.999075168683153380, 0.999073017546336040, 0.999070863911836190, 0.999068707779659170, +0.999066549149810410, 0.999064388022295250, 0.999062224397119110, 0.999060058274287450, 0.999057889653805600, 0.999055718535679090, 0.999053544919913160, 0.999051368806513460, +0.999049190195485330, 0.999047009086834300, 0.999044825480565610, 0.999042639376684920, 0.999040450775197650, 0.999038259676109150, 0.999036066079425080, 0.999033869985150870, +0.999031671393291960, 0.999029470303853920, 0.999027266716842170, 0.999025060632262150, 0.999022852050119650, 0.999020640970419870, 0.999018427393168600, 0.999016211318371260, +0.999013992746033310, 0.999011771676160510, 0.999009548108758190, 0.999007322043831910, 0.999005093481387440, 0.999002862421430220, 0.999000628863965900, 0.998998392808999940, +0.998996154256537980, 0.998993913206585700, 0.998991669659148540, 0.998989423614232260, 0.998987175071842430, 0.998984924031984690, 0.998982670494664600, 0.998980414459887830, +0.998978155927660040, 0.998975894897986880, 0.998973631370873920, 0.998971365346326910, 0.998969096824351530, 0.998966825804953440, 0.998964552288138190, 0.998962276273911650, +0.998959997762279280, 0.998957716753247070, 0.998955433246820460, 0.998953147243005320, 0.998950858741807330, 0.998948567743232150, 0.998946274247285550, 0.998943978253973300, +0.998941679763301060, 0.998939378775274610, 0.998937075289899830, 0.998934769307182280, 0.998932460827127830, 0.998930149849742150, 0.998927836375031130, 0.998925520403000640, +0.998923201933656250, 0.998920880967003820, 0.998918557503049250, 0.998916231541798210, 0.998913903083256670, 0.998911572127430310, 0.998909238674325130, 0.998906902723946780, +0.998904564276301140, 0.998902223331394110, 0.998899879889231570, 0.998897533949819280, 0.998895185513163140, 0.998892834579269140, 0.998890481148142940, 0.998888125219790650, +0.998885766794217920, 0.998883405871430870, 0.998881042451435270, 0.998878676534237010, 0.998876308119842180, 0.998873937208256460, 0.998871563799486050, 0.998869187893536630, +0.998866809490414180, 0.998864428590124810, 0.998862045192674300, 0.998859659298068750, 0.998857270906313930, 0.998854880017416070, 0.998852486631380930, 0.998850090748214630, +0.998847692367923030, 0.998845291490512270, 0.998842888115988200, 0.998840482244356950, 0.998838073875624510, 0.998835663009796980, 0.998833249646880140, 0.998830833786880200, +0.998828415429803270, 0.998825994575655240, 0.998823571224442210, 0.998821145376170280, 0.998818717030845460, 0.998816286188473850, 0.998813852849061550, 0.998811417012614560, +0.998808978679139090, 0.998806537848641150, 0.998804094521126840, 0.998801648696602370, 0.998799200375073750, 0.998796749556547180, 0.998794296241028560, 0.998791840428524310, +0.998789382119040450, 0.998786921312583180, 0.998784458009158600, 0.998781992208772840, 0.998779523911432100, 0.998777053117142600, 0.998774579825910340, 0.998772104037741750, +0.998769625752642940, 0.998767144970619910, 0.998764661691679210, 0.998762175915826720, 0.998759687643068770, 0.998757196873411690, 0.998754703606861580, 0.998752207843424670, +0.998749709583107270, 0.998747208825915610, 0.998744705571856020, 0.998742199820934600, 0.998739691573157560, 0.998737180828531360, 0.998734667587062310, 0.998732151848756520, +0.998729633613620330, 0.998727112881660050, 0.998724589652882020, 0.998722063927292570, 0.998719535704897910, 0.998717004985704370, 0.998714471769718280, 0.998711936056946080, +0.998709397847394100, 0.998706857141068550, 0.998704313937975870, 0.998701768238122400, 0.998699220041514570, 0.998696669348158590, 0.998694116158061030, 0.998691560471228090, +0.998689002287666330, 0.998686441607382070, 0.998683878430381640, 0.998681312756671490, 0.998678744586258160, 0.998676173919147870, 0.998673600755347170, 0.998671025094862500, +0.998668446937700290, 0.998665866283867000, 0.998663283133368940, 0.998660697486212780, 0.998658109342404730, 0.998655518701951460, 0.998652925564859410, 0.998650329931135120, +0.998647731800784920, 0.998645131173815480, 0.998642528050233120, 0.998639922430044400, 0.998637314313255970, 0.998634703699874170, 0.998632090589905760, 0.998629474983356970, +0.998626856880234560, 0.998624236280545090, 0.998621613184294880, 0.998618987591490700, 0.998616359502139010, 0.998613728916246560, 0.998611095833819680, 0.998608460254865050, +0.998605822179389310, 0.998603181607399030, 0.998600538538900740, 0.998597892973901110, 0.998595244912406700, 0.998592594354424270, 0.998589941299960370, 0.998587285749021560, +0.998584627701614600, 0.998581967157745940, 0.998579304117422460, 0.998576638580650710, 0.998573970547437350, 0.998571300017789150, 0.998568626991712560, 0.998565951469214450, +0.998563273450301490, 0.998560592934980340, 0.998557909923257770, 0.998555224415140330, 0.998552536410634790, 0.998549845909748050, 0.998547152912486640, 0.998544457418857330, +0.998541759428866920, 0.998539058942522040, 0.998536355959829480, 0.998533650480796120, 0.998530942505428620, 0.998528232033733750, 0.998525519065718290, 0.998522803601389120, +0.998520085640752900, 0.998517365183816400, 0.998514642230586500, 0.998511916781069990, 0.998509188835273730, 0.998506458393204510, 0.998503725454869100, 0.998500990020274480, +0.998498252089427220, 0.998495511662334410, 0.998492768739002830, 0.998490023319439370, 0.998487275403650790, 0.998484524991643970, 0.998481772083425920, 0.998479016679003520, +0.998476258778383420, 0.998473498381572730, 0.998470735488578340, 0.998467970099407020, 0.998465202214065870, 0.998462431832561670, 0.998459658954901410, 0.998456883581091970, +0.998454105711140350, 0.998451325345053430, 0.998448542482838210, 0.998445757124501680, 0.998442969270050720, 0.998440178919492330, 0.998437386072833500, 0.998434590730081230, +0.998431792891242510, 0.998428992556324220, 0.998426189725333480, 0.998423384398277270, 0.998420576575162700, 0.998417766255996540, 0.998414953440786010, 0.998412138129538110, +0.998409320322259820, 0.998406500018958360, 0.998403677219640520, 0.998400851924313600, 0.998398024132984400, 0.998395193845660330, 0.998392361062348080, 0.998389525783055070, +0.998386688007788180, 0.998383847736554530, 0.998381004969361330, 0.998378159706215680, 0.998375311947124480, 0.998372461692095150, 0.998369608941134470, 0.998366753694249990, +0.998363895951448480, 0.998361035712737270, 0.998358172978123460, 0.998355307747614270, 0.998352440021216810, 0.998349569798938190, 0.998346697080785610, 0.998343821866766400, +0.998340944156887570, 0.998338063951156430, 0.998335181249580090, 0.998332296052165780, 0.998329408358920810, 0.998326518169852290, 0.998323625484967340, 0.998320730304273480, +0.998317832627777730, 0.998314932455487410, 0.998312029787409850, 0.998309124623552150, 0.998306216963921630, 0.998303306808525530, 0.998300394157371150, 0.998297479010465840, +0.998294561367816800, 0.998291641229431480, 0.998288718595316870, 0.998285793465480630, 0.998282865839929870, 0.998279935718671800, 0.998277003101713970, 0.998274067989063710, +0.998271130380728230, 0.998268190276714980, 0.998265247677031180, 0.998262302581684250, 0.998259354990681640, 0.998256404904030560, 0.998253452321738450, 0.998250497243812870, +0.998247539670260920, 0.998244579601090140, 0.998241617036307870, 0.998238651975921650, 0.998235684419938710, 0.998232714368366580, 0.998229741821212710, 0.998226766778484540, +0.998223789240189400, 0.998220809206334710, 0.998217826676928040, 0.998214841651976830, 0.998211854131488500, 0.998208864115470500, 0.998205871603930370, 0.998202876596875680, +0.998199879094313620, 0.998196879096251990, 0.998193876602698090, 0.998190871613659490, 0.998187864129143730, 0.998184854149158360, 0.998181841673710820, 0.998178826702808660, +0.998175809236459430, 0.998172789274670680, 0.998169766817449950, 0.998166741864804810, 0.998163714416742790, 0.998160684473271550, 0.998157652034398550, 0.998154617100131540, +0.998151579670477850, 0.998148539745445260, 0.998145497325041320, 0.998142452409273570, 0.998139404998149790, 0.998136355091677420, 0.998133302689864220, 0.998130247792717750, +0.998127190400245670, 0.998124130512455630, 0.998121068129355080, 0.998118003250952120, 0.998114935877253970, 0.998111866008268620, 0.998108793644003510, 0.998105718784466520, +0.998102641429665090, 0.998099561579607110, 0.998096479234300230, 0.998093394393752220, 0.998090307057970640, 0.998087217226963360, 0.998084124900737950, 0.998081030079302380, +0.998077932762664100, 0.998074832950830990, 0.998071730643810830, 0.998068625841611380, 0.998065518544240300, 0.998062408751705490, 0.998059296464014590, 0.998056181681175490, +0.998053064403195970, 0.998049944630083670, 0.998046822361846610, 0.998043697598492430, 0.998040570340029130, 0.998037440586464260, 0.998034308337805930, 0.998031173594061680, +0.998028036355239620, 0.998024896621347410, 0.998021754392392930, 0.998018609668384070, 0.998015462449328820, 0.998012312735234830, 0.998009160526110000, 0.998006005821962310, +0.998002848622799530, 0.997999688928629780, 0.997996526739460710, 0.997993362055300310, 0.997990194876156590, 0.997987025202037300, 0.997983853032950560, 0.997980678368904140, +0.997977501209905920, 0.997974321555963990, 0.997971139407086370, 0.997967954763280820, 0.997964767624555330, 0.997961577990918000, 0.997958385862376730, 0.997955191238939500, +0.997951994120614190, 0.997948794507409030, 0.997945592399331780, 0.997942387796390550, 0.997939180698593440, 0.997935971105948340, 0.997932759018463340, 0.997929544436146340, +0.997926327359005550, 0.997923107787048960, 0.997919885720284560, 0.997916661158720460, 0.997913434102364770, 0.997910204551225370, 0.997906972505310570, 0.997903737964628280, +0.997900500929186700, 0.997897261398993820, 0.997894019374057750, 0.997890774854386710, 0.997887527839988690, 0.997884278330871900, 0.997881026327044340, 0.997877771828514230, +0.997874514835289770, 0.997871255347378970, 0.997867993364790040, 0.997864728887531080, 0.997861461915610310, 0.997858192449035950, 0.997854920487815990, 0.997851646031958860, +0.997848369081472560, 0.997845089636365310, 0.997841807696645430, 0.997838523262320920, 0.997835236333400210, 0.997831946909891410, 0.997828654991802620, 0.997825360579142170, +0.997822063671918500, 0.997818764270139600, 0.997815462373813690, 0.997812157982949310, 0.997808851097554350, 0.997805541717637360, 0.997802229843206430, 0.997798915474270020, +0.997795598610836330, 0.997792279252913580, 0.997788957400510210, 0.997785633053634440, 0.997782306212294470, 0.997778976876498860, 0.997775645046255710, 0.997772310721573460, +0.997768973902460550, 0.997765634588925090, 0.997762292780975610, 0.997758948478620340, 0.997755601681867830, 0.997752252390726070, 0.997748900605203830, 0.997745546325309430, +0.997742189551050980, 0.997738830282437260, 0.997735468519476370, 0.997732104262176730, 0.997728737510546800, 0.997725368264595120, 0.997721996524330020, 0.997718622289759940, +0.997715245560893300, 0.997711866337738560, 0.997708484620304150, 0.997705100408598500, 0.997701713702630060, 0.997698324502407470, 0.997694932807938970, 0.997691538619233100, +0.997688141936298510, 0.997684742759143540, 0.997681341087776620, 0.997677936922206410, 0.997674530262441240, 0.997671121108489880, 0.997667709460360760, 0.997664295318062220, +0.997660878681603020, 0.997657459550991720, 0.997654037926236640, 0.997650613807346430, 0.997647187194329770, 0.997643758087195080, 0.997640326485951130, 0.997636892390606270, +0.997633455801169130, 0.997630016717648390, 0.997626575140052710, 0.997623131068390400, 0.997619684502670360, 0.997616235442901120, 0.997612783889091360, 0.997609329841249610, +0.997605873299384440, 0.997602414263504710, 0.997598952733618760, 0.997595488709735580, 0.997592022191863710, 0.997588553180011720, 0.997585081674188360, 0.997581607674402290, +0.997578131180662190, 0.997574652192976810, 0.997571170711354700, 0.997567686735804650, 0.997564200266335520, 0.997560711302955870, 0.997557219845674360, 0.997553725894499870, +0.997550229449441050, 0.997546730510506570, 0.997543229077705320, 0.997539725151046050, 0.997536218730537440, 0.997532709816188250, 0.997529198408007360, 0.997525684506003430, +0.997522168110185240, 0.997518649220561660, 0.997515127837141470, 0.997511603959933430, 0.997508077588946440, 0.997504548724189260, 0.997501017365670760, 0.997497483513399620, +0.997493947167384820, 0.997490408327635030, 0.997486866994159340, 0.997483323166966420, 0.997479776846065260, 0.997476228031464630, 0.997472676723173410, 0.997469122921200490, +0.997465566625554740, 0.997462007836245170, 0.997458446553280530, 0.997454882776669830, 0.997451316506421830, 0.997447747742545630, 0.997444176485050020, 0.997440602733943970, +0.997437026489236380, 0.997433447750936230, 0.997429866519052410, 0.997426282793594020, 0.997422696574569940, 0.997419107861989060, 0.997415516655860480, 0.997411922956193080, +0.997408326762995730, 0.997404728076277670, 0.997401126896047870, 0.997397523222315230, 0.997393917055088730, 0.997390308394377480, 0.997386697240190360, 0.997383083592536580, +0.997379467451425030, 0.997375848816864920, 0.997372227688865130, 0.997368604067434770, 0.997364977952582830, 0.997361349344318530, 0.997357718242650850, 0.997354084647588790, +0.997350448559141680, 0.997346809977318280, 0.997343168902128040, 0.997339525333579720, 0.997335879271682660, 0.997332230716445940, 0.997328579667878580, 0.997324926125989660, +0.997321270090788640, 0.997317611562284380, 0.997313950540485990, 0.997310287025402810, 0.997306621017043930, 0.997302952515418450, 0.997299281520535600, 0.997295608032404580, +0.997291932051034500, 0.997288253576434580, 0.997284572608614140, 0.997280889147582170, 0.997277203193348010, 0.997273514745920740, 0.997269823805309710, 0.997266130371524230, +0.997262434444573410, 0.997258736024466460, 0.997255035111212720, 0.997251331704821280, 0.997247625805301570, 0.997243917412662830, 0.997240206526914250, 0.997236493148065170, +0.997232777276124920, 0.997229058911102580, 0.997225338053007730, 0.997221614701849560, 0.997217888857637290, 0.997214160520380140, 0.997210429690087770, 0.997206696366769400, +0.997202960550434110, 0.997199222241091590, 0.997195481438750920, 0.997191738143421550, 0.997187992355112800, 0.997184244073834100, 0.997180493299594790, 0.997176740032404200, +0.997172984272271860, 0.997169226019206990, 0.997165465273219140, 0.997161702034317530, 0.997157936302511590, 0.997154168077810990, 0.997150397360224930, 0.997146624149762850, +0.997142848446434190, 0.997139070250248390, 0.997135289561215000, 0.997131506379343340, 0.997127720704642840, 0.997123932537123170, 0.997120141876793540, 0.997116348723663730, +0.997112553077742940, 0.997108754939040720, 0.997104954307566740, 0.997101151183330310, 0.997097345566340890, 0.997093537456608230, 0.997089726854141660, 0.997085913758950840, +0.997082098171045320, 0.997078280090434420, 0.997074459517127810, 0.997070636451135030, 0.997066810892465740, 0.997062982841129490, 0.997059152297135710, 0.997055319260493960, +0.997051483731213990, 0.997047645709305370, 0.997043805194777530, 0.997039962187640240, 0.997036116687903040, 0.997032268695575490, 0.997028418210667340, 0.997024565233188160, +0.997020709763147490, 0.997016851800555100, 0.997012991345420540, 0.997009128397753570, 0.997005262957563750, 0.997001395024860740, 0.996997524599654290, 0.996993651681953970, +0.996989776271769660, 0.996985898369110780, 0.996982017973987110, 0.996978135086408420, 0.996974249706384490, 0.996970361833924960, 0.996966471469039380, 0.996962578611737760, +0.996958683262029630, 0.996954785419924770, 0.996950885085432950, 0.996946982258563930, 0.996943076939327490, 0.996939169127733280, 0.996935258823791190, 0.996931346027510990, +0.996927430738902440, 0.996923512957975210, 0.996919592684739180, 0.996915669919204330, 0.996911744661380220, 0.996907816911276720, 0.996903886668903730, 0.996899953934271000, +0.996896018707388420, 0.996892080988265650, 0.996888140776912790, 0.996884198073339610, 0.996880252877555990, 0.996876305189571600, 0.996872355009396530, 0.996868402337040550, +0.996864447172513550, 0.996860489515825400, 0.996856529366986100, 0.996852566726005420, 0.996848601592893350, 0.996844633967659770, 0.996840663850314670, 0.996836691240867820, +0.996832716139329220, 0.996828738545708860, 0.996824758460016720, 0.996820775882262590, 0.996816790812456670, 0.996812803250608610, 0.996808813196728650, 0.996804820650826650, +0.996800825612912500, 0.996796828082996300, 0.996792828061088150, 0.996788825547197830, 0.996784820541335550, 0.996780813043511070, 0.996776803053734730, 0.996772790572016180, +0.996768775598365740, 0.996764758132793420, 0.996760738175309190, 0.996756715725923060, 0.996752690784645230, 0.996748663351485600, 0.996744633426454360, 0.996740601009561410, +0.996736566100817070, 0.996732528700231320, 0.996728488807814280, 0.996724446423575940, 0.996720401547526500, 0.996716354179676080, 0.996712304320034770, 0.996708251968612680, +0.996704197125419910, 0.996700139790466790, 0.996696079963763190, 0.996692017645319450, 0.996687952835145660, 0.996683885533252050, 0.996679815739648590, 0.996675743454345730, +0.996671668677353460, 0.996667591408682000, 0.996663511648341550, 0.996659429396342330, 0.996655344652694560, 0.996651257417408450, 0.996647167690494110, 0.996643075471961850, +0.996638980761822000, 0.996634883560084670, 0.996630783866760180, 0.996626681681858640, 0.996622577005390480, 0.996618469837365790, 0.996614360177794920, 0.996610248026688180, +0.996606133384055790, 0.996602016249908180, 0.996597896624255460, 0.996593774507107950, 0.996589649898476090, 0.996585522798369980, 0.996581393206800170, 0.996577261123776870, +0.996573126549310410, 0.996568989483411110, 0.996564849926089400, 0.996560707877355510, 0.996556563337219870, 0.996552416305692800, 0.996548266782784630, 0.996544114768505910, +0.996539960262866840, 0.996535803265877980, 0.996531643777549440, 0.996527481797891970, 0.996523317326915570, 0.996519150364631010, 0.996514980911048620, 0.996510808966178720, +0.996506634530031850, 0.996502457602618350, 0.996498278183948650, 0.996494096274033400, 0.996489911872882720, 0.996485724980507360, 0.996481535596917770, 0.996477343722124260, +0.996473149356137400, 0.996468952498967610, 0.996464753150625550, 0.996460551311121550, 0.996456346980466150, 0.996452140158669900, 0.996447930845743230, 0.996443719041696820, +0.996439504746541190, 0.996435287960286690, 0.996431068682943950, 0.996426846914523550, 0.996422622655036120, 0.996418395904491990, 0.996414166662902060, 0.996409934930276520, +0.996405700706626260, 0.996401463991961720, 0.996397224786293560, 0.996392983089632200, 0.996388738901988540, 0.996384492223373000, 0.996380243053796240, 0.996375991393268820, +0.996371737241801500, 0.996367480599404720, 0.996363221466089240, 0.996358959841865840, 0.996354695726744950, 0.996350429120737350, 0.996346160023853680, 0.996341888436104610, +0.996337614357500790, 0.996333337788053000, 0.996329058727771670, 0.996324777176667900, 0.996320493134752130, 0.996316206602035130, 0.996311917578527550, 0.996307626064240280, +0.996303332059183980, 0.996299035563369180, 0.996294736576806890, 0.996290435099507770, 0.996286131131482570, 0.996281824672741960, 0.996277515723296920, 0.996273204283158020, +0.996268890352336120, 0.996264573930841890, 0.996260255018686310, 0.996255933615880160, 0.996251609722434090, 0.996247283338358990, 0.996242954463665730, 0.996238623098365080, +0.996234289242467930, 0.996229952895984930, 0.996225614058927070, 0.996221272731305230, 0.996216928913130180, 0.996212582604412810, 0.996208233805164100, 0.996203882515394710, +0.996199528735115520, 0.996195172464337530, 0.996190813703071720, 0.996186452451328860, 0.996182088709119840, 0.996177722476455640, 0.996173353753347040, 0.996168982539805130, +0.996164608835840680, 0.996160232641464800, 0.996155853956688260, 0.996151472781522160, 0.996147089115977380, 0.996142702960064910, 0.996138314313795630, 0.996133923177180520, +0.996129529550230600, 0.996125133432956830, 0.996120734825370340, 0.996116333727481980, 0.996111930139302770, 0.996107524060843800, 0.996103115492115940, 0.996098704433130310, +0.996094290883897890, 0.996089874844429790, 0.996085456314736990, 0.996081035294830500, 0.996076611784721510, 0.996072185784421030, 0.996067757293939930, 0.996063326313289530, +0.996058892842480730, 0.996054456881524830, 0.996050018430432730, 0.996045577489215630, 0.996041134057884530, 0.996036688136450630, 0.996032239724924940, 0.996027788823318660, +0.996023335431642900, 0.996018879549908860, 0.996014421178127660, 0.996009960316310280, 0.996005496964468160, 0.996001031122612180, 0.995996562790753550, 0.995992091968903700, +0.995987618657073530, 0.995983142855274340, 0.995978664563517250, 0.995974183781813570, 0.995969700510174420, 0.995965214748610990, 0.995960726497134410, 0.995956235755756090, +0.995951742524487260, 0.995947246803339010, 0.995942748592322680, 0.995938247891449470, 0.995933744700730710, 0.995929239020177490, 0.995924730849801150, 0.995920220189613010, +0.995915707039624400, 0.995911191399846410, 0.995906673270290480, 0.995902152650967930, 0.995897629541889980, 0.995893103943067850, 0.995888575854513070, 0.995884045276236750, +0.995879512208250440, 0.995874976650565240, 0.995870438603192690, 0.995865898066144010, 0.995861355039430630, 0.995856809523063770, 0.995852261517054860, 0.995847711021415450, +0.995843158036156640, 0.995838602561289980, 0.995834044596826900, 0.995829484142778610, 0.995824921199156550, 0.995820355765972280, 0.995815787843237100, 0.995811217430962460, +0.995806644529159790, 0.995802069137840420, 0.995797491257016000, 0.995792910886697750, 0.995788328026897210, 0.995783742677625930, 0.995779154838895340, 0.995774564510716780, +0.995769971693101770, 0.995765376386062000, 0.995760778589608650, 0.995756178303753400, 0.995751575528507570, 0.995746970263882920, 0.995742362509890900, 0.995737752266542930, +0.995733139533850560, 0.995728524311825350, 0.995723906600478830, 0.995719286399822430, 0.995714663709867940, 0.995710038530626780, 0.995705410862110620, 0.995700780704330770, +0.995696148057299110, 0.995691512921026980, 0.995686875295526130, 0.995682235180808010, 0.995677592576884260, 0.995672947483766670, 0.995668299901466660, 0.995663649829995890, +0.995658997269366020, 0.995654342219588710, 0.995649684680675500, 0.995645024652637930, 0.995640362135487900, 0.995635697129237050, 0.995631029633896940, 0.995626359649479210, +0.995621687175995530, 0.995617012213457770, 0.995612334761877270, 0.995607654821266120, 0.995602972391635750, 0.995598287472997940, 0.995593600065364570, 0.995588910168747070, +0.995584217783157310, 0.995579522908606960, 0.995574825545107790, 0.995570125692671560, 0.995565423351310150, 0.995560718521035120, 0.995556011201858220, 0.995551301393791330, +0.995546589096846240, 0.995541874311034580, 0.995537157036368360, 0.995532437272859120, 0.995527715020518840, 0.995522990279359310, 0.995518263049392280, 0.995513533330629640, +0.995508801123083150, 0.995504066426764480, 0.995499329241685830, 0.995494589567858860, 0.995489847405295340, 0.995485102754007260, 0.995480355614006380, 0.995475605985304600, +0.995470853867913900, 0.995466099261845930, 0.995461342167112790, 0.995456582583726270, 0.995451820511698340, 0.995447055951040880, 0.995442288901765670, 0.995437519363884800, +0.995432747337410160, 0.995427972822353620, 0.995423195818727180, 0.995418416326542710, 0.995413634345812200, 0.995408849876547650, 0.995404062918760930, 0.995399273472464040, +0.995394481537668960, 0.995389687114387690, 0.995384890202632320, 0.995380090802414630, 0.995375288913746710, 0.995370484536640570, 0.995365677671108170, 0.995360868317161640, +0.995356056474812840, 0.995351242144074000, 0.995346425324957100, 0.995341606017474120, 0.995336784221637070, 0.995331959937458040, 0.995327133164949140, 0.995322303904122350, +0.995317472154989890, 0.995312637917563750, 0.995307801191856020, 0.995302961977878710, 0.995298120275644130, 0.995293276085164160, 0.995288429406451010, 0.995283580239516690, +0.995278728584373500, 0.995273874441033550, 0.995269017809508830, 0.995264158689811550, 0.995259297081953930, 0.995254432985948070, 0.995249566401806060, 0.995244697329540240, +0.995239825769162590, 0.995234951720685430, 0.995230075184120880, 0.995225196159481240, 0.995220314646778510, 0.995215430646025020, 0.995210544157232760, 0.995205655180414370, +0.995200763715581750, 0.995195869762747320, 0.995190973321923080, 0.995186074393121570, 0.995181172976354780, 0.995176269071635030, 0.995171362678974550, 0.995166453798385750, +0.995161542429880860, 0.995156628573472090, 0.995151712229171760, 0.995146793396992080, 0.995141872076945490, 0.995136948269044090, 0.995132021973300420, 0.995127093189726700, +0.995122161918335250, 0.995117228159138390, 0.995112291912148450, 0.995107353177377860, 0.995102411954838730, 0.995097468244543590, 0.995092522046504890, 0.995087573360734830, +0.995082622187245860, 0.995077668526050400, 0.995072712377160660, 0.995067753740589200, 0.995062792616348220, 0.995057829004450390, 0.995052862904907910, 0.995047894317733330, +0.995042923242939080, 0.995037949680537490, 0.995032973630541000, 0.995027995092962030, 0.995023014067813020, 0.995018030555106630, 0.995013044554855060, 0.995008056067070880, +0.995003065091766610, 0.994998071628954710, 0.994993075678647590, 0.994988077240857800, 0.994983076315597680, 0.994978072902880100, 0.994973067002717150, 0.994968058615121610, +0.994963047740106020, 0.994958034377682710, 0.994953018527864330, 0.994948000190663320, 0.994942979366092330, 0.994937956054163910, 0.994932930254890710, 0.994927901968285070, +0.994922871194359740, 0.994917837933127270, 0.994912802184600100, 0.994907763948790880, 0.994902723225712380, 0.994897680015377040, 0.994892634317797510, 0.994887586132986330, +0.994882535460956290, 0.994877482301719910, 0.994872426655289740, 0.994867368521678450, 0.994862307900898800, 0.994857244792963450, 0.994852179197884930, 0.994847111115675920, +0.994842040546349280, 0.994836967489917460, 0.994831891946393100, 0.994826813915789090, 0.994821733398118080, 0.994816650393392730, 0.994811564901625810, 0.994806476922829970, +0.994801386457017880, 0.994796293504202290, 0.994791198064395980, 0.994786100137611710, 0.994780999723862140, 0.994775896823160140, 0.994770791435518390, 0.994765683560949630, +0.994760573199466760, 0.994755460351082310, 0.994750345015809280, 0.994745227193660430, 0.994740106884648420, 0.994734984088786240, 0.994729858806086550, 0.994724731036562230, +0.994719600780226030, 0.994714468037090850, 0.994709332807169440, 0.994704195090474810, 0.994699054887019710, 0.994693912196816910, 0.994688767019879410, 0.994683619356219850, +0.994678469205851350, 0.994673316568786550, 0.994668161445038560, 0.994663003834620140, 0.994657843737544290, 0.994652681153823770, 0.994647516083471570, 0.994642348526500570, +0.994637178482923660, 0.994632005952753810, 0.994626830936004010, 0.994621653432687050, 0.994616473442816010, 0.994611290966403770, 0.994606106003463330, 0.994600918554007670, +0.994595728618049570, 0.994590536195602230, 0.994585341286678530, 0.994580143891291460, 0.994574944009454120, 0.994569741641179390, 0.994564536786480270, 0.994559329445369840, +0.994554119617861000, 0.994548907303966940, 0.994543692503700560, 0.994538475217075060, 0.994533255444103310, 0.994528033184798430, 0.994522808439173400, 0.994517581207241320, +0.994512351489015400, 0.994507119284508630, 0.994501884593734010, 0.994496647416704630, 0.994491407753433700, 0.994486165603934210, 0.994480920968219380, 0.994475673846302090, +0.994470424238195760, 0.994465172143913280, 0.994459917563467970, 0.994454660496872810, 0.994449400944141030, 0.994444138905285710, 0.994438874380319970, 0.994433607369257120, +0.994428337872110270, 0.994423065888892620, 0.994417791419617280, 0.994412514464297460, 0.994407235022946260, 0.994401953095577110, 0.994396668682202890, 0.994391381782837150, +0.994386092397492980, 0.994380800526183490, 0.994375506168922010, 0.994370209325721840, 0.994364909996596100, 0.994359608181558110, 0.994354303880620960, 0.994348997093798200, +0.994343687821102940, 0.994338376062548380, 0.994333061818147960, 0.994327745087914880, 0.994322425871862480, 0.994317104170003850, 0.994311779982352540, 0.994306453308921760, +0.994301124149724940, 0.994295792504775290, 0.994290458374086140, 0.994285121757670810, 0.994279782655542730, 0.994274441067715120, 0.994269096994201410, 0.994263750435015030, +0.994258401390169190, 0.994253049859677440, 0.994247695843553100, 0.994242339341809390, 0.994236980354459950, 0.994231618881517900, 0.994226254922996880, 0.994220888478910330, +0.994215519549271450, 0.994210148134093810, 0.994204774233390820, 0.994199397847175810, 0.994194018975462330, 0.994188637618263820, 0.994183253775593690, 0.994177867447465500, +0.994172478633892580, 0.994167087334888570, 0.994161693550466800, 0.994156297280640700, 0.994150898525423820, 0.994145497284829820, 0.994140093558872010, 0.994134687347564050, +0.994129278650919380, 0.994123867468951430, 0.994118453801673850, 0.994113037649100080, 0.994107619011243780, 0.994102197888118380, 0.994096774279737530, 0.994091348186114780, +0.994085919607263560, 0.994080488543197640, 0.994075054993930450, 0.994069618959475540, 0.994064180439846680, 0.994058739435057400, 0.994053295945121260, 0.994047849970051910, +0.994042401509862890, 0.994036950564567870, 0.994031497134180490, 0.994026041218714180, 0.994020582818182950, 0.994015121932600220, 0.994009658561979760, 0.994004192706335110, +0.993998724365679930, 0.993993253540027990, 0.993987780229392830, 0.993982304433788320, 0.993976826153228020, 0.993971345387725690, 0.993965862137294990, 0.993960376401949670, +0.993954888181703300, 0.993949397476569850, 0.993943904286562650, 0.993938408611695910, 0.993932910451983060, 0.993927409807437990, 0.993921906678074450, 0.993916401063906110, +0.993910892964946720, 0.993905382381210070, 0.993899869312709900, 0.993894353759460230, 0.993888835721474570, 0.993883315198766940, 0.993877792191350860, 0.993872266699240450, +0.993866738722449240, 0.993861208260991220, 0.993855675314880170, 0.993850139884130070, 0.993844601968754460, 0.993839061568767450, 0.993833518684182790, 0.993827973315014270, +0.993822425461275860, 0.993816875122981220, 0.993811322300144570, 0.993805766992779560, 0.993800209200900180, 0.993794648924520300, 0.993789086163653690, 0.993783520918314460, +0.993777953188516250, 0.993772382974273390, 0.993766810275599430, 0.993761235092508580, 0.993755657425014480, 0.993750077273131360, 0.993744494636872980, 0.993738909516253430, +0.993733321911286490, 0.993727731821986370, 0.993722139248366830, 0.993716544190441970, 0.993710946648225790, 0.993705346621732270, 0.993699744110975280, 0.993694139115969040, +0.993688531636727320, 0.993682921673264330, 0.993677309225594050, 0.993671694293730480, 0.993666076877687710, 0.993660456977479730, 0.993654834593120650, 0.993649209724624340, +0.993643582372005120, 0.993637952535276980, 0.993632320214453910, 0.993626685409550010, 0.993621048120579500, 0.993615408347556350, 0.993609766090494560, 0.993604121349408340, +0.993598474124311900, 0.993592824415219340, 0.993587172222144650, 0.993581517545102040, 0.993575860384105610, 0.993570200739169570, 0.993564538610307910, 0.993558873997535060, +0.993553206900865020, 0.993547537320311870, 0.993541865255889940, 0.993536190707613340, 0.993530513675496270, 0.993524834159552950, 0.993519152159797360, 0.993513467676244040, +0.993507780708907110, 0.993502091257800650, 0.993496399322938980, 0.993490704904336330, 0.993485008002006900, 0.993479308615964900, 0.993473606746224540, 0.993467902392800360, +0.993462195555706360, 0.993456486234956860, 0.993450774430566170, 0.993445060142548520, 0.993439343370918220, 0.993433624115689470, 0.993427902376876840, 0.993422178154494410, +0.993416451448556500, 0.993410722259077450, 0.993404990586071570, 0.993399256429553290, 0.993393519789536830, 0.993387780666036500, 0.993382039059066750, 0.993376294968641990, +0.993370548394776450, 0.993364799337484560, 0.993359047796780640, 0.993353293772679110, 0.993347537265194420, 0.993341778274340670, 0.993336016800132620, 0.993330252842584580, +0.993324486401710780, 0.993318717477525870, 0.993312946070044170, 0.993307172179280110, 0.993301395805248010, 0.993295616947962420, 0.993289835607437890, 0.993284051783688730, +0.993278265476729480, 0.993272476686574590, 0.993266685413238480, 0.993260891656735590, 0.993255095417080460, 0.993249296694287630, 0.993243495488371650, 0.993237691799346840, +0.993231885627227860, 0.993226076972029140, 0.993220265833765210, 0.993214452212450530, 0.993208636108099730, 0.993202817520727480, 0.993196996450348090, 0.993191172896976340, +0.993185346860626540, 0.993179518341313460, 0.993173687339051540, 0.993167853853855200, 0.993162017885739430, 0.993156179434718680, 0.993150338500807360, 0.993144495084020250, +0.993138649184371890, 0.993132800801876940, 0.993126949936549930, 0.993121096588405530, 0.993115240757458380, 0.993109382443723150, 0.993103521647214490, 0.993097658367947060, +0.993091792605935500, 0.993085924361194360, 0.993080053633738410, 0.993074180423582420, 0.993068304730740930, 0.993062426555228690, 0.993056545897060380, 0.993050662756250760, +0.993044777132814360, 0.993038889026766180, 0.993032998438120540, 0.993027105366892540, 0.993021209813096830, 0.993015311776748070, 0.993009411257861020, 0.993003508256450450, +0.992997602772531020, 0.992991694806117710, 0.992985784357225070, 0.992979871425867970, 0.992973956012061290, 0.992968038115819680, 0.992962117737157920, 0.992956194876090880, +0.992950269532633430, 0.992944341706800130, 0.992938411398606170, 0.992932478608066100, 0.992926543335194810, 0.992920605580007280, 0.992914665342518150, 0.992908722622742320, +0.992902777420694770, 0.992896829736390150, 0.992890879569843570, 0.992884926921069780, 0.992878971790083660, 0.992873014176900100, 0.992867054081533970, 0.992861091504000260, +0.992855126444313730, 0.992849158902489480, 0.992843188878542280, 0.992837216372487230, 0.992831241384339090, 0.992825263914112740, 0.992819283961823280, 0.992813301527485700, +0.992807316611114650, 0.992801329212725570, 0.992795339332332990, 0.992789346969952140, 0.992783352125597980, 0.992777354799285310, 0.992771354991029310, 0.992765352700844980, +0.992759347928747090, 0.992753340674750960, 0.992747330938871570, 0.992741318721123700, 0.992735304021522660, 0.992729286840083320, 0.992723267176820690, 0.992717245031749850, +0.992711220404886020, 0.992705193296244070, 0.992699163705839220, 0.992693131633686440, 0.992687097079800850, 0.992681060044197430, 0.992675020526891380, 0.992668978527897710, +0.992662934047231720, 0.992656887084908400, 0.992650837640942860, 0.992644785715350200, 0.992638731308145510, 0.992632674419344110, 0.992626615048960990, 0.992620553197011150, +0.992614488863510110, 0.992608422048472880, 0.992602352751914550, 0.992596280973850330, 0.992590206714295430, 0.992584129973264950, 0.992578050750774100, 0.992571969046838200, +0.992565884861472460, 0.992559798194691870, 0.992553709046511860, 0.992547617416947640, 0.992541523306014310, 0.992535426713727190, 0.992529327640101380, 0.992523226085152310, +0.992517122048895310, 0.992511015531345350, 0.992504906532517990, 0.992498795052428220, 0.992492681091091570, 0.992486564648523140, 0.992480445724738260, 0.992474324319752350, +0.992468200433580640, 0.992462074066238430, 0.992455945217741050, 0.992449813888103830, 0.992443680077341960, 0.992437543785470890, 0.992431405012506040, 0.992425263758462740, +0.992419120023356190, 0.992412973807201840, 0.992406825110015100, 0.992400673931811310, 0.992394520272605770, 0.992388364132413820, 0.992382205511251110, 0.992376044409132850, +0.992369880826074580, 0.992363714762091510, 0.992357546217199180, 0.992351375191413030, 0.992345201684748270, 0.992339025697220660, 0.992332847228845400, 0.992326666279638060, +0.992320482849614160, 0.992314296938788920, 0.992308108547177990, 0.992301917674796810, 0.992295724321660690, 0.992289528487785400, 0.992283330173186260, 0.992277129377878820, +0.992270926101878500, 0.992264720345200970, 0.992258512107861530, 0.992252301389875860, 0.992246088191259370, 0.992239872512027720, 0.992233654352196460, 0.992227433711781020, +0.992221210590796930, 0.992214984989259860, 0.992208756907185350, 0.992202526344588830, 0.992196293301486070, 0.992190057777892600, 0.992183819773823970, 0.992177579289295840, +0.992171336324323750, 0.992165090878923240, 0.992158842953110080, 0.992152592546899690, 0.992146339660307960, 0.992140084293350320, 0.992133826446042530, 0.992127566118400140, +0.992121303310438800, 0.992115038022174270, 0.992108770253621990, 0.992102500004797940, 0.992096227275717560, 0.992089952066396720, 0.992083674376850970, 0.992077394207095950, +0.992071111557147560, 0.992064826427021320, 0.992058538816732890, 0.992052248726298270, 0.992045956155732990, 0.992039661105052820, 0.992033363574273520, 0.992027063563410860, +0.992020761072480490, 0.992014456101498190, 0.992008148650479700, 0.992001838719440920, 0.991995526308397490, 0.991989211417365290, 0.991982894046360090, 0.991976574195397640, +0.991970251864493720, 0.991963927053664100, 0.991957599762924750, 0.991951269992291440, 0.991944937741779940, 0.991938603011406130, 0.991932265801185760, 0.991925926111134730, +0.991919583941268890, 0.991913239291604020, 0.991906892162156110, 0.991900542552940910, 0.991894190463974420, 0.991887835895272520, 0.991881478846850960, 0.991875119318725740, +0.991868757310912730, 0.991862392823427590, 0.991856025856286740, 0.991849656409505730, 0.991843284483100660, 0.991836910077087300, 0.991830533191481730, 0.991824153826299740, +0.991817771981557290, 0.991811387657270620, 0.991805000853455350, 0.991798611570127610, 0.991792219807303370, 0.991785825564998610, 0.991779428843229230, 0.991773029642011310, +0.991766627961360610, 0.991760223801293580, 0.991753817161825980, 0.991747408042973790, 0.991740996444753110, 0.991734582367179930, 0.991728165810270230, 0.991721746774040120, +0.991715325258505700, 0.991708901263682940, 0.991702474789587950, 0.991696045836236720, 0.991689614403645450, 0.991683180491830130, 0.991676744100806860, 0.991670305230591630, +0.991663863881200760, 0.991657420052650120, 0.991650973744956030, 0.991644524958134490, 0.991638073692201690, 0.991631619947173640, 0.991625163723066530, 0.991618705019896460, +0.991612243837679650, 0.991605780176432310, 0.991599314036170520, 0.991592845416910400, 0.991586374318668140, 0.991579900741460070, 0.991573424685302070, 0.991566946150210570, +0.991560465136201770, 0.991553981643291780, 0.991547495671496800, 0.991541007220833160, 0.991534516291316950, 0.991528022882964490, 0.991521526995791770, 0.991515028629815440, +0.991508527785051500, 0.991502024461516250, 0.991495518659225920, 0.991489010378196810, 0.991482499618445150, 0.991475986379987240, 0.991469470662839300, 0.991462952467017880, +0.991456431792538950, 0.991449908639418950, 0.991443383007674210, 0.991436854897320920, 0.991430324308375630, 0.991423791240854340, 0.991417255694773680, 0.991410717670149990, +0.991404177166999360, 0.991397634185338330, 0.991391088725183220, 0.991384540786550470, 0.991377990369456290, 0.991371437473916980, 0.991364882099949330, 0.991358324247569310, +0.991351763916793580, 0.991345201107638460, 0.991338635820120270, 0.991332068054255560, 0.991325497810060520, 0.991318925087551820, 0.991312349886745880, 0.991305772207659030, +0.991299192050307700, 0.991292609414708430, 0.991286024300877640, 0.991279436708831780, 0.991272846638587280, 0.991266254090160670, 0.991259659063568500, 0.991253061558827200, +0.991246461575953200, 0.991239859114963040, 0.991233254175873270, 0.991226646758700310, 0.991220036863460720, 0.991213424490171020, 0.991206809638847890, 0.991200192309507620, +0.991193572502167000, 0.991186950216842330, 0.991180325453550280, 0.991173698212307390, 0.991167068493130300, 0.991160436296035560, 0.991153801621039830, 0.991147164468159430, +0.991140524837411220, 0.991133882728811640, 0.991127238142377460, 0.991120591078125000, 0.991113941536071130, 0.991107289516232500, 0.991100635018625550, 0.991093978043267040, +0.991087318590173630, 0.991080656659361960, 0.991073992250848470, 0.991067325364650030, 0.991060656000783410, 0.991053984159265160, 0.991047309840111800, 0.991040633043340340, +0.991033953768967190, 0.991027272017009240, 0.991020587787482920, 0.991013901080405210, 0.991007211895792880, 0.991000520233662360, 0.990993826094030640, 0.990987129476914360, +0.990980430382330300, 0.990973728810295110, 0.990967024760825430, 0.990960318233938380, 0.990953609229650480, 0.990946897747978620, 0.990940183788939440, 0.990933467352549830, +0.990926748438826550, 0.990920027047786370, 0.990913303179446150, 0.990906576833822660, 0.990899848010932780, 0.990893116710793280, 0.990886382933420910, 0.990879646678832660, +0.990872907947045300, 0.990866166738075480, 0.990859423051940410, 0.990852676888656750, 0.990845928248241470, 0.990839177130711350, 0.990832423536083250, 0.990825667464374060, +0.990818908915600760, 0.990812147889780110, 0.990805384386929110, 0.990798618407064740, 0.990791849950203750, 0.990785079016363150, 0.990778305605559910, 0.990771529717810790, +0.990764751353132910, 0.990757970511543130, 0.990751187193058440, 0.990744401397695820, 0.990737613125472150, 0.990730822376404530, 0.990724029150509720, 0.990717233447804930, +0.990710435268306930, 0.990703634612033040, 0.990696831478999900, 0.990690025869224830, 0.990683217782724610, 0.990676407219516330, 0.990669594179617090, 0.990662778663043750, +0.990655960669813540, 0.990649140199943430, 0.990642317253450530, 0.990635491830351820, 0.990628663930664290, 0.990621833554405140, 0.990615000701591470, 0.990608165372240170, +0.990601327566368540, 0.990594487283993570, 0.990587644525132480, 0.990580799289802140, 0.990573951578019860, 0.990567101389802750, 0.990560248725167900, 0.990553393584132190, +0.990546535966713270, 0.990539675872927900, 0.990532813302793300, 0.990525948256326780, 0.990519080733545330, 0.990512210734466160, 0.990505338259106470, 0.990498463307483480, +0.990491585879614280, 0.990484705975516190, 0.990477823595206200, 0.990470938738701840, 0.990464051406020010, 0.990457161597178120, 0.990450269312193150, 0.990443374551082670, +0.990436477313863640, 0.990429577600553500, 0.990422675411169460, 0.990415770745728730, 0.990408863604248510, 0.990401953986746130, 0.990395041893238790, 0.990388127323744040, +0.990381210278278860, 0.990374290756860680, 0.990367368759506710, 0.990360444286234380, 0.990353517337061010, 0.990346587912003700, 0.990339656011079980, 0.990332721634307080, +0.990325784781702410, 0.990318845453283410, 0.990311903649067180, 0.990304959369071150, 0.990298012613312850, 0.990291063381809280, 0.990284111674578190, 0.990277157491636920, +0.990270200833002660, 0.990263241698692950, 0.990256280088725130, 0.990249316003116500, 0.990242349441884610, 0.990235380405046880, 0.990228408892620760, 0.990221434904623550, +0.990214458441072810, 0.990207479501985840, 0.990200498087380310, 0.990193514197273420, 0.990186527831682710, 0.990179538990625720, 0.990172547674119890, 0.990165553882182750, +0.990158557614831740, 0.990151558872084280, 0.990144557653957920, 0.990137553960470210, 0.990130547791638450, 0.990123539147480410, 0.990116528028013640, 0.990109514433255460, +0.990102498363223500, 0.990095479817935330, 0.990088458797408480, 0.990081435301660260, 0.990074409330708670, 0.990067380884571020, 0.990060349963264970, 0.990053316566807950, +0.990046280695217720, 0.990039242348511710, 0.990032201526707680, 0.990025158229822950, 0.990018112457875520, 0.990011064210882810, 0.990004013488862360, 0.989996960291831930, +0.989989904619809070, 0.989982846472811540, 0.989975785850856770, 0.989968722753962530, 0.989961657182146460, 0.989954589135426330, 0.989947518613819800, 0.989940445617344400, +0.989933370146017900, 0.989926292199857950, 0.989919211778882090, 0.989912128883108420, 0.989905043512554370, 0.989897955667237820, 0.989890865347176300, 0.989883772552387580, +0.989876677282889530, 0.989869579538699700, 0.989862479319835840, 0.989855376626315840, 0.989848271458157460, 0.989841163815378460, 0.989834053697996490, 0.989826941106029310, +0.989819826039494920, 0.989812708498410740, 0.989805588482794980, 0.989798465992665190, 0.989791341028039230, 0.989784213588934980, 0.989777083675370210, 0.989769951287362670, +0.989762816424930250, 0.989755679088090700, 0.989748539276862020, 0.989741396991262070, 0.989734252231308620, 0.989727104997019440, 0.989719955288412610, 0.989712803105505800, +0.989705648448317100, 0.989698491316864050, 0.989691331711164970, 0.989684169631237510, 0.989677005077099660, 0.989669838048769290, 0.989662668546264280, 0.989655496569602610, +0.989648322118802160, 0.989641145193880910, 0.989633965794856850, 0.989626783921747850, 0.989619599574572020, 0.989612412753347100, 0.989605223458091100, 0.989598031688822100, +0.989590837445557870, 0.989583640728316730, 0.989576441537116440, 0.989569239871974980, 0.989562035732910570, 0.989554829119940970, 0.989547620033084270, 0.989540408472358470, +0.989533194437781760, 0.989525977929372020, 0.989518758947147360, 0.989511537491125860, 0.989504313561325400, 0.989497087157764300, 0.989489858280460430, 0.989482626929431670, +0.989475393104696680, 0.989468156806273090, 0.989460918034179020, 0.989453676788432770, 0.989446433069052330, 0.989439186876055810, 0.989431938209461290, 0.989424687069286770, +0.989417433455550670, 0.989410177368271080, 0.989402918807466000, 0.989395657773153530, 0.989388394265351970, 0.989381128284079540, 0.989373859829354000, 0.989366588901194000, +0.989359315499617530, 0.989352039624642800, 0.989344761276287900, 0.989337480454571150, 0.989330197159510760, 0.989322911391124830, 0.989315623149431440, 0.989308332434449160, +0.989301039246196060, 0.989293743584690350, 0.989286445449950260, 0.989279144841994080, 0.989271841760840040, 0.989264536206506340, 0.989257228179011290, 0.989249917678373230, +0.989242604704610340, 0.989235289257740960, 0.989227971337783400, 0.989220650944755860, 0.989213328078676790, 0.989206002739564160, 0.989198674927436630, 0.989191344642312510, +0.989184011884210010, 0.989176676653147460, 0.989169338949143270, 0.989161998772215670, 0.989154656122383070, 0.989147310999663690, 0.989139963404076280, 0.989132613335638840, +0.989125260794369910, 0.989117905780287800, 0.989110548293410940, 0.989103188333757770, 0.989095825901346370, 0.989088460996195630, 0.989081093618323750, 0.989073723767749050, +0.989066351444490180, 0.989058976648565350, 0.989051599379993100, 0.989044219638791740, 0.989036837424979830, 0.989029452738575900, 0.989022065579598380, 0.989014675948065690, +0.989007283843996280, 0.988999889267408670, 0.988992492218321310, 0.988985092696752830, 0.988977690702721350, 0.988970286236245830, 0.988962879297344610, 0.988955469886036220, +0.988948058002339090, 0.988940643646271880, 0.988933226817853010, 0.988925807517101020, 0.988918385744034570, 0.988910961498672080, 0.988903534781032320, 0.988896105591133720, +0.988888673928994820, 0.988881239794634160, 0.988873803188070500, 0.988866364109322160, 0.988858922558408130, 0.988851478535346610, 0.988844032040156580, 0.988836583072856380, +0.988829131633464750, 0.988821677722000250, 0.988814221338481620, 0.988806762482927200, 0.988799301155356080, 0.988791837355786680, 0.988784371084237780, 0.988776902340727900, +0.988769431125275710, 0.988761957437899960, 0.988754481278619200, 0.988747002647452410, 0.988739521544418020, 0.988732037969534900, 0.988724551922821710, 0.988717063404297100, +0.988709572413979830, 0.988702078951888660, 0.988694583018042140, 0.988687084612459240, 0.988679583735158740, 0.988672080386159170, 0.988664574565479400, 0.988657066273138320, +0.988649555509154450, 0.988642042273546680, 0.988634526566333770, 0.988627008387534700, 0.988619487737168010, 0.988611964615252690, 0.988604439021807390, 0.988596910956850980, +0.988589380420402340, 0.988581847412480120, 0.988574311933103410, 0.988566773982290870, 0.988559233560061480, 0.988551690666433890, 0.988544145301427200, 0.988536597465060060, +0.988529047157351460, 0.988521494378320150, 0.988513939127985130, 0.988506381406365380, 0.988498821213479540, 0.988491258549346830, 0.988483693413985790, 0.988476125807415620, +0.988468555729654970, 0.988460983180723060, 0.988453408160638760, 0.988445830669420930, 0.988438250707088460, 0.988430668273660440, 0.988423083369155630, 0.988415495993593240, +0.988407906146991920, 0.988400313829370880, 0.988392719040749210, 0.988385121781145680, 0.988377522050579270, 0.988369919849069190, 0.988362315176634200, 0.988354708033293510, +0.988347098419065870, 0.988339486333970620, 0.988331871778026620, 0.988324254751253070, 0.988316635253668750, 0.988309013285292860, 0.988301388846144490, 0.988293761936242520, +0.988286132555606270, 0.988278500704254600, 0.988270866382206740, 0.988263229589481760, 0.988255590326098670, 0.988247948592076540, 0.988240304387434710, 0.988232657712191820, +0.988225008566367520, 0.988217356949980590, 0.988209702863050320, 0.988202046305595830, 0.988194387277636200, 0.988186725779190640, 0.988179061810278040, 0.988171395370918030, +0.988163726461129490, 0.988156055080931630, 0.988148381230343650, 0.988140704909384660, 0.988133026118073960, 0.988125344856430670, 0.988117661124473860, 0.988109974922223080, +0.988102286249697310, 0.988094595106915890, 0.988086901493898000, 0.988079205410662740, 0.988071506857229550, 0.988063805833617640, 0.988056102339845980, 0.988048396375934220, +0.988040687941901470, 0.988032977037767050, 0.988025263663550150, 0.988017547819270090, 0.988009829504946200, 0.988002108720597570, 0.987994385466243850, 0.987986659741904140, +0.987978931547597750, 0.987971200883344000, 0.987963467749162330, 0.987955732145071930, 0.987947994071092240, 0.987940253527242460, 0.987932510513542140, 0.987924765030010480, +0.987917017076667010, 0.987909266653530960, 0.987901513760621740, 0.987893758397958680, 0.987886000565561310, 0.987878240263448840, 0.987870477491640810, 0.987862712250156650, +0.987854944539015680, 0.987847174358237320, 0.987839401707841010, 0.987831626587846290, 0.987823848998272360, 0.987816068939138870, 0.987808286410465250, 0.987800501412270830, +0.987792713944575240, 0.987784924007397920, 0.987777131600758200, 0.987769336724675710, 0.987761539379169660, 0.987753739564259940, 0.987745937279965960, 0.987738132526307040, +0.987730325303302740, 0.987722515610972680, 0.987714703449336430, 0.987706888818413180, 0.987699071718222910, 0.987691252148784840, 0.987683430110118720, 0.987675605602244100, +0.987667778625180290, 0.987659949178947170, 0.987652117263564170, 0.987644282879050710, 0.987636446025426660, 0.987628606702711580, 0.987620764910924880, 0.987612920650086320, +0.987605073920215460, 0.987597224721331820, 0.987589373053455290, 0.987581518916605060, 0.987573662310801240, 0.987565803236063240, 0.987557941692410730, 0.987550077679863360, +0.987542211198440770, 0.987534342248162720, 0.987526470829048650, 0.987518596941118540, 0.987510720584391930, 0.987502841758888470, 0.987494960464628040, 0.987487076701630050, +0.987479190469914500, 0.987471301769500930, 0.987463410600408990, 0.987455516962658540, 0.987447620856269470, 0.987439722281261200, 0.987431821237653720, 0.987423917725466670, +0.987416011744719820, 0.987408103295432830, 0.987400192377625660, 0.987392278991317980, 0.987384363136529660, 0.987376444813280460, 0.987368524021590140, 0.987360600761478470, +0.987352675032965310, 0.987344746836070320, 0.987336816170813700, 0.987328883037214890, 0.987320947435293970, 0.987313009365070720, 0.987305068826564880, 0.987297125819796340, +0.987289180344784970, 0.987281232401550520, 0.987273281990113220, 0.987265329110492700, 0.987257373762708830, 0.987249415946781510, 0.987241455662730580, 0.987233492910576160, +0.987225527690337780, 0.987217560002035750, 0.987209589845689740, 0.987201617221319830, 0.987193642128945890, 0.987185664568587810, 0.987177684540265550, 0.987169702043999120, +0.987161717079808270, 0.987153729647713310, 0.987145739747734010, 0.987137747379890350, 0.987129752544202320, 0.987121755240689900, 0.987113755469373190, 0.987105753230271940, +0.987097748523406260, 0.987089741348796350, 0.987081731706462070, 0.987073719596423430, 0.987065705018700500, 0.987057687973313280, 0.987049668460281970, 0.987041646479626220, +0.987033622031366580, 0.987025595115522790, 0.987017565732115080, 0.987009533881163410, 0.987001499562688010, 0.986993462776708740, 0.986985423523245920, 0.986977381802319310, +0.986969337613949450, 0.986961290958156210, 0.986953241834959690, 0.986945190244380210, 0.986937136186437640, 0.986929079661152290, 0.986921020668544040, 0.986912959208633420, +0.986904895281440320, 0.986896828886985160, 0.986888760025287800, 0.986880688696368580, 0.986872614900247580, 0.986864538636945120, 0.986856459906481080, 0.986848378708876100, +0.986840295044150160, 0.986832208912323480, 0.986824120313416380, 0.986816029247448820, 0.986807935714441250, 0.986799839714413870, 0.986791741247386670, 0.986783640313380390, +0.986775536912414930, 0.986767431044510590, 0.986759322709687690, 0.986751211907966550, 0.986743098639367380, 0.986734982903910260, 0.986726864701615860, 0.986718744032504260, +0.986710620896595780, 0.986702495293910850, 0.986694367224469570, 0.986686236688292470, 0.986678103685399770, 0.986669968215811540, 0.986661830279548680, 0.986653689876631160, +0.986645547007079520, 0.986637401670913960, 0.986629253868154810, 0.986621103598822600, 0.986612950862937650, 0.986604795660520170, 0.986596637991590810, 0.986588477856169880, +0.986580315254277700, 0.986572150185934800, 0.986563982651161520, 0.986555812649978270, 0.986547640182405370, 0.986539465248463480, 0.986531287848172900, 0.986523107981554180, +0.986514925648627640, 0.986506740849413810, 0.986498553583933120, 0.986490363852206010, 0.986482171654252890, 0.986473976990094540, 0.986465779859751150, 0.986457580263243370, +0.986449378200591640, 0.986441173671816380, 0.986432966676938250, 0.986424757215977550, 0.986416545288955060, 0.986408330895891310, 0.986400114036806720, 0.986391894711721730, +0.986383672920657100, 0.986375448663633250, 0.986367221940670840, 0.986358992751790180, 0.986350761097012140, 0.986342526976357270, 0.986334290389846100, 0.986326051337499180, +0.986317809819337030, 0.986309565835380430, 0.986301319385650020, 0.986293070470166010, 0.986284819088949490, 0.986276565242021010, 0.986268308929401090, 0.986260050151110400, +0.986251788907169580, 0.986243525197599280, 0.986235259022419930, 0.986226990381652730, 0.986218719275318010, 0.986210445703436410, 0.986202169666028810, 0.986193891163115730, +0.986185610194717950, 0.986177326760856120, 0.986169040861550770, 0.986160752496823000, 0.986152461666693460, 0.986144168371182680, 0.986135872610311440, 0.986127574384100590, +0.986119273692570800, 0.986110970535742700, 0.986102664913637180, 0.986094356826275110, 0.986086046273677130, 0.986077733255864010, 0.986069417772856620, 0.986061099824675600, +0.986052779411341840, 0.986044456532876090, 0.986036131189299230, 0.986027803380632120, 0.986019473106895530, 0.986011140368110220, 0.986002805164296950, 0.985994467495476810, +0.985986127361670460, 0.985977784762898660, 0.985969439699182490, 0.985961092170542730, 0.985952742177000240, 0.985944389718576010, 0.985936034795290680, 0.985927677407165250, +0.985919317554220580, 0.985910955236477650, 0.985902590453957450, 0.985894223206680740, 0.985885853494668400, 0.985877481317941510, 0.985869106676520830, 0.985860729570427470, +0.985852349999682190, 0.985843967964306070, 0.985835583464319990, 0.985827196499745040, 0.985818807070602100, 0.985810415176912150, 0.985802020818696170, 0.985793623995975030, +0.985785224708769840, 0.985776822957101670, 0.985768418740991410, 0.985760012060460040, 0.985751602915528770, 0.985743191306218460, 0.985734777232550210, 0.985726360694544780, +0.985717941692223600, 0.985709520225607650, 0.985701096294717800, 0.985692669899575270, 0.985684241040201140, 0.985675809716616280, 0.985667375928841900, 0.985658939676898990, +0.985650500960808860, 0.985642059780592490, 0.985633616136270980, 0.985625170027865430, 0.985616721455396920, 0.985608270418886660, 0.985599816918355630, 0.985591360953824940, +0.985582902525316110, 0.985574441632849910, 0.985565978276447650, 0.985557512456130440, 0.985549044171919460, 0.985540573423835830, 0.985532100211900630, 0.985523624536135290, +0.985515146396561010, 0.985506665793198790, 0.985498182726069930, 0.985489697195195520, 0.985481209200597010, 0.985472718742295360, 0.985464225820311790, 0.985455730434667830, +0.985447232585384580, 0.985438732272483130, 0.985430229495985020, 0.985421724255911240, 0.985413216552283090, 0.985404706385121900, 0.985396193754448980, 0.985387678660285650, +0.985379161102653000, 0.985370641081572570, 0.985362118597065460, 0.985353593649153090, 0.985345066237856780, 0.985336536363197620, 0.985328004025197270, 0.985319469223876810, +0.985310931959257790, 0.985302392231361400, 0.985293850040209080, 0.985285305385822150, 0.985276758268221920, 0.985268208687429590, 0.985259656643466930, 0.985251102136355140, +0.985242545166115650, 0.985233985732769660, 0.985225423836338820, 0.985216859476844340, 0.985208292654307650, 0.985199723368750280, 0.985191151620193660, 0.985182577408659220, +0.985174000734168280, 0.985165421596742360, 0.985156839996402800, 0.985148255933171240, 0.985139669407068870, 0.985131080418117370, 0.985122488966338250, 0.985113895051752950, +0.985105298674382900, 0.985096699834249630, 0.985088098531374470, 0.985079494765779050, 0.985070888537485030, 0.985062279846513730, 0.985053668692886800, 0.985045055076625650, +0.985036438997751840, 0.985027820456287010, 0.985019199452252580, 0.985010575985669990, 0.985001950056561100, 0.984993321664947350, 0.984984690810850380, 0.984976057494291620, +0.984967421715292720, 0.984958783473875220, 0.984950142770060770, 0.984941499603870900, 0.984932853975327370, 0.984924205884451620, 0.984915555331265510, 0.984906902315790480, +0.984898246838048160, 0.984889588898060220, 0.984880928495848070, 0.984872265631433930, 0.984863600304838990, 0.984854932516085140, 0.984846262265193890, 0.984837589552187030, +0.984828914377086200, 0.984820236739913040, 0.984811556640689200, 0.984802874079436560, 0.984794189056176770, 0.984785501570931480, 0.984776811623722440, 0.984768119214571410, +0.984759424343500060, 0.984750727010530120, 0.984742027215683270, 0.984733324958981470, 0.984724620240446270, 0.984715913060099650, 0.984707203417963250, 0.984698491314058730, +0.984689776748408070, 0.984681059721032810, 0.984672340231955050, 0.984663618281196420, 0.984654893868778800, 0.984646166994723850, 0.984637437659053540, 0.984628705861789630, +0.984619971602954000, 0.984611234882568190, 0.984602495700654500, 0.984593754057234590, 0.984585009952330230, 0.984576263385963490, 0.984567514358155930, 0.984558762868929630, +0.984550008918306350, 0.984541252506308080, 0.984532493632956810, 0.984523732298274170, 0.984514968502282260, 0.984506202245002960, 0.984497433526458130, 0.984488662346669760, +0.984479888705659500, 0.984471112603449770, 0.984462334040062110, 0.984453553015518730, 0.984444769529841500, 0.984435983583052290, 0.984427195175173080, 0.984418404306225960, +0.984409610976232590, 0.984400815185215380, 0.984392016933196220, 0.984383216220196980, 0.984374413046239630, 0.984365607411346270, 0.984356799315538880, 0.984347988758839440, +0.984339175741270060, 0.984330360262852810, 0.984321542323609580, 0.984312721923562560, 0.984303899062733740, 0.984295073741145220, 0.984286245958818970, 0.984277415715776870, +0.984268583012041450, 0.984259747847634590, 0.984250910222578380, 0.984242070136894910, 0.984233227590606160, 0.984224382583734460, 0.984215535116301670, 0.984206685188329990, +0.984197832799841740, 0.984188977950858910, 0.984180120641403590, 0.984171260871497980, 0.984162398641164280, 0.984153533950424600, 0.984144666799300790, 0.984135797187815520, +0.984126925115990870, 0.984118050583848820, 0.984109173591411590, 0.984100294138701480, 0.984091412225740700, 0.984082527852551350, 0.984073641019155510, 0.984064751725575730, +0.984055859971833980, 0.984046965757952700, 0.984038069083953970, 0.984029169949860120, 0.984020268355693230, 0.984011364301475620, 0.984002457787229720, 0.983993548812977630, +0.983984637378741760, 0.983975723484544210, 0.983966807130407410, 0.983957888316353560, 0.983948967042404980, 0.983940043308583870, 0.983931117114912770, 0.983922188461413880, +0.983913257348109530, 0.983904323775022020, 0.983895387742173670, 0.983886449249586900, 0.983877508297284040, 0.983868564885287180, 0.983859619013619180, 0.983850670682302030, +0.983841719891358270, 0.983832766640810100, 0.983823810930680160, 0.983814852760990570, 0.983805892131763730, 0.983796929043022290, 0.983787963494788590, 0.983778995487085030, +0.983770025019933820, 0.983761052093357740, 0.983752076707378850, 0.983743098862019830, 0.983734118557302970, 0.983725135793250940, 0.983716150569886040, 0.983707162887230810, +0.983698172745307580, 0.983689180144138970, 0.983680185083747440, 0.983671187564155500, 0.983662187585385260, 0.983653185147459920, 0.983644180250401460, 0.983635172894232630, +0.983626163078975770, 0.983617150804653620, 0.983608136071288500, 0.983599118878902940, 0.983590099227519720, 0.983581077117161250, 0.983572052547850180, 0.983563025519608840, +0.983553996032459970, 0.983544964086426220, 0.983535929681529920, 0.983526892817793710, 0.983517853495240350, 0.983508811713892480, 0.983499767473772550, 0.983490720774903070, +0.983481671617306930, 0.983472620001006550, 0.983463565926024460, 0.983454509392383660, 0.983445450400106560, 0.983436388949215920, 0.983427325039734180, 0.983418258671684200, +0.983409189845088520, 0.983400118559969890, 0.983391044816350760, 0.983381968614254310, 0.983372889953702870, 0.983363808834719190, 0.983354725257325920, 0.983345639221545940, +0.983336550727401780, 0.983327459774916310, 0.983318366364112070, 0.983309270495011930, 0.983300172167638760, 0.983291071382015100, 0.983281968138163710, 0.983272862436107450, +0.983263754275869100, 0.983254643657471170, 0.983245530580936780, 0.983236415046288450, 0.983227297053549280, 0.983218176602741690, 0.983209053693888780, 0.983199928327013200, +0.983190800502137810, 0.983181670219285260, 0.983172537478478660, 0.983163402279740750, 0.983154264623094300, 0.983145124508562170, 0.983135981936167250, 0.983126836905932390, +0.983117689417880470, 0.983108539472034140, 0.983099387068416600, 0.983090232207050610, 0.983081074887959040, 0.983071915111164870, 0.983062752876690760, 0.983053588184559900, +0.983044421034794840, 0.983035251427418880, 0.983026079362454790, 0.983016904839925540, 0.983007727859854020, 0.982998548422263200, 0.982989366527175950, 0.982980182174615360, +0.982970995364604080, 0.982961806097165440, 0.982952614372322400, 0.982943420190097730, 0.982934223550514630, 0.982925024453595860, 0.982915822899364520, 0.982906618887843480, +0.982897412419056150, 0.982888203493025190, 0.982878992109773810, 0.982869778269324870, 0.982860561971701460, 0.982851343216926690, 0.982842122005023630, 0.982832898336014950, +0.982823672209924280, 0.982814443626774500, 0.982805212586588480, 0.982795979089389540, 0.982786743135200540, 0.982777504724044790, 0.982768263855945180, 0.982759020530924790, +0.982749774749007040, 0.982740526510214820, 0.982731275814571310, 0.982722022662099630, 0.982712767052822840, 0.982703508986764170, 0.982694248463946480, 0.982684985484393430, +0.982675720048127870, 0.982666452155173010, 0.982657181805552060, 0.982647908999288110, 0.982638633736404480, 0.982629356016924140, 0.982620075840870300, 0.982610793208266500, +0.982601508119135600, 0.982592220573501040, 0.982582930571385900, 0.982573638112813400, 0.982564343197806830, 0.982555045826389310, 0.982545745998584130, 0.982536443714414730, +0.982527138973904200, 0.982517831777075860, 0.982508522123952900, 0.982499210014558640, 0.982489895448916290, 0.982480578427049170, 0.982471258948980690, 0.982461937014734050, +0.982452612624332590, 0.982443285777799600, 0.982433956475158410, 0.982424624716432330, 0.982415290501644670, 0.982405953830818630, 0.982396614703977880, 0.982387273121145600, +0.982377929082345110, 0.982368582587599740, 0.982359233636933000, 0.982349882230368120, 0.982340528367928400, 0.982331172049637600, 0.982321813275518820, 0.982312452045595470, +0.982303088359891000, 0.982293722218428810, 0.982284353621232340, 0.982274982568324910, 0.982265609059729930, 0.982256233095471170, 0.982246854675571710, 0.982237473800055110, +0.982228090468944880, 0.982218704682264350, 0.982209316440037170, 0.982199925742286650, 0.982190532589036100, 0.982181136980309510, 0.982171738916129970, 0.982162338396521120, +0.982152935421506390, 0.982143529991109320, 0.982134122105353450, 0.982124711764262080, 0.982115298967859210, 0.982105883716168030, 0.982096466009212080, 0.982087045847015010, +0.982077623229600350, 0.982068198156991530, 0.982058770629212320, 0.982049340646286020, 0.982039908208236500, 0.982030473315087190, 0.982021035966861740, 0.982011596163583690, +0.982002153905276560, 0.981992709191964240, 0.981983262023669810, 0.981973812400417480, 0.981964360322230560, 0.981954905789132800, 0.981945448801147760, 0.981935989358299070, +0.981926527460610380, 0.981917063108105450, 0.981907596300807590, 0.981898127038741020, 0.981888655321929040, 0.981879181150395520, 0.981869704524164000, 0.981860225443258240, +0.981850743907701880, 0.981841259917518690, 0.981831773472732210, 0.981822284573366400, 0.981812793219444810, 0.981803299410991430, 0.981793803148029660, 0.981784304430583400, +0.981774803258676390, 0.981765299632332280, 0.981755793551575050, 0.981746285016428240, 0.981736774026915840, 0.981727260583061480, 0.981717744684888930, 0.981708226332422050, +0.981698705525684500, 0.981689182264700140, 0.981679656549492960, 0.981670128380086600, 0.981660597756505050, 0.981651064678771830, 0.981641529146911050, 0.981631991160946460, +0.981622450720901930, 0.981612907826801000, 0.981603362478667970, 0.981593814676526620, 0.981584264420400700, 0.981574711710314070, 0.981565156546290730, 0.981555598928354420, +0.981546038856529020, 0.981536476330838630, 0.981526911351307100, 0.981517343917958310, 0.981507774030816130, 0.981498201689904540, 0.981488626895247410, 0.981479049646868720, +0.981469469944792230, 0.981459887789042250, 0.981450303179642550, 0.981440716116617100, 0.981431126599989770, 0.981421534629784760, 0.981411940206025850, 0.981402343328736880, +0.981392743997942300, 0.981383142213665850, 0.981373537975931520, 0.981363931284763290, 0.981354322140185360, 0.981344710542221500, 0.981335096490896010, 0.981325479986232430, +0.981315861028255410, 0.981306239616988820, 0.981296615752456520, 0.981286989434682730, 0.981277360663691420, 0.981267729439506690, 0.981258095762152730, 0.981248459631653300, +0.981238821048032950, 0.981229180011315430, 0.981219536521525050, 0.981209890578685790, 0.981200242182821870, 0.981190591333957360, 0.981180938032116150, 0.981171282277322750, +0.981161624069601170, 0.981151963408975480, 0.981142300295469890, 0.981132634729108610, 0.981122966709915720, 0.981113296237915430, 0.981103623313131610, 0.981093947935589020, +0.981084270105311520, 0.981074589822323430, 0.981064907086648730, 0.981055221898311850, 0.981045534257336980, 0.981035844163748120, 0.981026151617569560, 0.981016456618825750, +0.981006759167540880, 0.980997059263739040, 0.980987356907444650, 0.980977652098681710, 0.980967944837474740, 0.980958235123847720, 0.980948522957825310, 0.980938808339431590, +0.980929091268690770, 0.980919371745627380, 0.980909649770265400, 0.980899925342629380, 0.980890198462743500, 0.980880469130631980, 0.980870737346319470, 0.980861003109830150, +0.980851266421188250, 0.980841527280418180, 0.980831785687544370, 0.980822041642591010, 0.980812295145582440, 0.980802546196543280, 0.980792794795497750, 0.980783040942470260, +0.980773284637485140, 0.980763525880566810, 0.980753764671739690, 0.980744001011028100, 0.980734234898456460, 0.980724466334049310, 0.980714695317830950, 0.980704921849825940, +0.980695145930058580, 0.980685367558553400, 0.980675586735334730, 0.980665803460427200, 0.980656017733854910, 0.980646229555642730, 0.980636438925815090, 0.980626645844396180, +0.980616850311410770, 0.980607052326883280, 0.980597251890838020, 0.980587449003299530, 0.980577643664292680, 0.980567835873841550, 0.980558025631970920, 0.980548212938705310, +0.980538397794069040, 0.980528580198086750, 0.980518760150783100, 0.980508937652182390, 0.980499112702309490, 0.980489285301188730, 0.980479455448844850, 0.980469623145302280, +0.980459788390585670, 0.980449951184719670, 0.980440111527728700, 0.980430269419637290, 0.980420424860470320, 0.980410577850252430, 0.980400728389007940, 0.980390876476761710, +0.980381022113538390, 0.980371165299362410, 0.980361306034258310, 0.980351444318251160, 0.980341580151365410, 0.980331713533625690, 0.980321844465056660, 0.980311972945683060, +0.980302098975529560, 0.980292222554620780, 0.980282343682981170, 0.980272462360636030, 0.980262578587609680, 0.980252692363926870, 0.980242803689612360, 0.980232912564690810, +0.980223018989186960, 0.980213122963125460, 0.980203224486531190, 0.980193323559429010, 0.980183420181843460, 0.980173514353799400, 0.980163606075321490, 0.980153695346434590, +0.980143782167163470, 0.980133866537532650, 0.980123948457567450, 0.980114027927292300, 0.980104104946732060, 0.980094179515911600, 0.980084251634855800, 0.980074321303589180, +0.980064388522136840, 0.980054453290523430, 0.980044515608773930, 0.980034575476913190, 0.980024632894966110, 0.980014687862957310, 0.980004740380911900, 0.979994790448854510, +0.979984838066810030, 0.979974883234803640, 0.979964925952860110, 0.979954966221004200, 0.979945004039260880, 0.979935039407655030, 0.979925072326211620, 0.979915102794955530, +0.979905130813911400, 0.979895156383104760, 0.979885179502560160, 0.979875200172302560, 0.979865218392357070, 0.979855234162748450, 0.979845247483501880, 0.979835258354642020, +0.979825266776193970, 0.979815272748182810, 0.979805276270633630, 0.979795277343571080, 0.979785275967020470, 0.979775272141006570, 0.979765265865554570, 0.979755257140689230, +0.979745245966435860, 0.979735232342819450, 0.979725216269864860, 0.979715197747597300, 0.979705176776041740, 0.979695153355223280, 0.979685127485166900, 0.979675099165897460, +0.979665068397440500, 0.979655035179820890, 0.979644999513063720, 0.979634961397193970, 0.979624920832236850, 0.979614877818217430, 0.979604832355160720, 0.979594784443092000, +0.979584734082036390, 0.979574681272018850, 0.979564626013064710, 0.979554568305198940, 0.979544508148446740, 0.979534445542833310, 0.979524380488383640, 0.979514312985123040, +0.979504243033076820, 0.979494170632269960, 0.979484095782727550, 0.979474018484475020, 0.979463938737537450, 0.979453856541939950, 0.979443771897707700, 0.979433684804866140, +0.979423595263440470, 0.979413503273455780, 0.979403408834937260, 0.979393311947910240, 0.979383212612400020, 0.979373110828431480, 0.979363006596030370, 0.979352899915221790, +0.979342790786030930, 0.979332679208483100, 0.979322565182603630, 0.979312448708417600, 0.979302329785950550, 0.979292208415227570, 0.979282084596274080, 0.979271958329115510, +0.979261829613777060, 0.979251698450283930, 0.979241564838661650, 0.979231428778935320, 0.979221290271130360, 0.979211149315272310, 0.979201005911386370, 0.979190860059497960, +0.979180711759632390, 0.979170561011815100, 0.979160407816071280, 0.979150252172426570, 0.979140094080905960, 0.979129933541535320, 0.979119770554339850, 0.979109605119344970, +0.979099437236576000, 0.979089266906058580, 0.979079094127817910, 0.979068918901879410, 0.979058741228268530, 0.979048561107011000, 0.979038378538132030, 0.979028193521657150, +0.979018006057611800, 0.979007816146021390, 0.978997623786911460, 0.978987428980307330, 0.978977231726234740, 0.978967032024719020, 0.978956829875785810, 0.978946625279460520, +0.978936418235768710, 0.978926208744735790, 0.978915996806387300, 0.978905782420748770, 0.978895565587845850, 0.978885346307704070, 0.978875124580348870, 0.978864900405805870, +0.978854673784100740, 0.978844444715258780, 0.978834213199305750, 0.978823979236267070, 0.978813742826168510, 0.978803503969035700, 0.978793262664894080, 0.978783018913769290, +0.978772772715687080, 0.978762524070672770, 0.978752272978752000, 0.978742019439950760, 0.978731763454294580, 0.978721505021808880, 0.978711244142519420, 0.978700980816451850, +0.978690715043631810, 0.978680446824084950, 0.978670176157836910, 0.978659903044913570, 0.978649627485340460, 0.978639349479143220, 0.978629069026347720, 0.978618786126979500, +0.978608500781064210, 0.978598212988627590, 0.978587922749695640, 0.978577630064293880, 0.978567334932447960, 0.978557037354183870, 0.978546737329527020, 0.978536434858503390, +0.978526129941138630, 0.978515822577458510, 0.978505512767488870, 0.978495200511255490, 0.978484885808784120, 0.978474568660100520, 0.978464249065230440, 0.978453927024199870, +0.978443602537034440, 0.978433275603759700, 0.978422946224402070, 0.978412614398987080, 0.978402280127540490, 0.978391943410088280, 0.978381604246656210, 0.978371262637270030, +0.978360918581955620, 0.978350572080739060, 0.978340223133645990, 0.978329871740702520, 0.978319517901934280, 0.978309161617367250, 0.978298802887027310, 0.978288441710940320, +0.978278078089132140, 0.978267712021628880, 0.978257343508456390, 0.978246972549640550, 0.978236599145207220, 0.978226223295182380, 0.978215844999592020, 0.978205464258462000, +0.978195081071818180, 0.978184695439686890, 0.978174307362093880, 0.978163916839065010, 0.978153523870626370, 0.978143128456803960, 0.978132730597623620, 0.978122330293111350, +0.978111927543293460, 0.978101522348195700, 0.978091114707844160, 0.978080704622264820, 0.978070292091483770, 0.978059877115527000, 0.978049459694420480, 0.978039039828190070, +0.978028617516862320, 0.978018192760463090, 0.978007765559018250, 0.977997335912554110, 0.977986903821096540, 0.977976469284671750, 0.977966032303305590, 0.977955592877024600, +0.977945151005854550, 0.977934706689821630, 0.977924259928951930, 0.977913810723271660, 0.977903359072806790, 0.977892904977583520, 0.977882448437627840, 0.977871989452966270, +0.977861528023624690, 0.977851064149629190, 0.977840597831006190, 0.977830129067781550, 0.977819657859981710, 0.977809184207632630, 0.977798708110760420, 0.977788229569391710, +0.977777748583552380, 0.977767265153268620, 0.977756779278566750, 0.977746290959472960, 0.977735800196013360, 0.977725306988214140, 0.977714811336101830, 0.977704313239702530, +0.977693812699042430, 0.977683309714147740, 0.977672804285044770, 0.977662296411759830, 0.977651786094319130, 0.977641273332748860, 0.977630758127075560, 0.977620240477325320, +0.977609720383524450, 0.977599197845699370, 0.977588672863876180, 0.977578145438081410, 0.977567615568341260, 0.977557083254681820, 0.977546548497129960, 0.977536011295711660, +0.977525471650453340, 0.977514929561381420, 0.977504385028522100, 0.977493838051901820, 0.977483288631546770, 0.977472736767483700, 0.977462182459738700, 0.977451625708338320, +0.977441066513308860, 0.977430504874676750, 0.977419940792468410, 0.977409374266710150, 0.977398805297428290, 0.977388233884649680, 0.977377660028400430, 0.977367083728706950, +0.977356504985595900, 0.977345923799093460, 0.977335340169226300, 0.977324754096020600, 0.977314165579503120, 0.977303574619700300, 0.977292981216638550, 0.977282385370344290, +0.977271787080844170, 0.977261186348164500, 0.977250583172331820, 0.977239977553372550, 0.977229369491313560, 0.977218758986181160, 0.977208146038001770, 0.977197530646802040, +0.977186912812608500, 0.977176292535447690, 0.977165669815346140, 0.977155044652330270, 0.977144417046426960, 0.977133786997662510, 0.977123154506063680, 0.977112519571657010, +0.977101882194468920, 0.977091242374526270, 0.977080600111855270, 0.977069955406482890, 0.977059308258435680, 0.977048658667740160, 0.977038006634422970, 0.977027352158510890, +0.977016695240030320, 0.977006035879008030, 0.976995374075470550, 0.976984709829444740, 0.976974043140957150, 0.976963374010034520, 0.976952702436703400, 0.976942028420990540, +0.976931351962922580, 0.976920673062526280, 0.976909991719828060, 0.976899307934855130, 0.976888621707633800, 0.976877933038191040, 0.976867241926553390, 0.976856548372747710, +0.976845852376800550, 0.976835153938738650, 0.976824453058589000, 0.976813749736378250, 0.976803043972133130, 0.976792335765880430, 0.976781625117646770, 0.976770912027459140, +0.976760196495344290, 0.976749478521328650, 0.976738758105439530, 0.976728035247703570, 0.976717309948147430, 0.976706582206798070, 0.976695852023682250, 0.976685119398826850, +0.976674384332258390, 0.976663646824004190, 0.976652906874090900, 0.976642164482545260, 0.976631419649394260, 0.976620672374664770, 0.976609922658383530, 0.976599170500577430, +0.976588415901273320, 0.976577658860498300, 0.976566899378279230, 0.976556137454642760, 0.976545373089616090, 0.976534606283225860, 0.976523837035499160, 0.976513065346462870, +0.976502291216143850, 0.976491514644569180, 0.976480735631765630, 0.976469954177760390, 0.976459170282580220, 0.976448383946252110, 0.976437595168803020, 0.976426803950259830, +0.976416010290649730, 0.976405214189999700, 0.976394415648336510, 0.976383614665687350, 0.976372811242079200, 0.976362005377539030, 0.976351197072093720, 0.976340386325770360, +0.976329573138596140, 0.976318757510598050, 0.976307939441803050, 0.976297118932238140, 0.976286295981930510, 0.976275470590907140, 0.976264642759194780, 0.976253812486821080, +0.976242979773812910, 0.976232144620197250, 0.976221307026001180, 0.976210466991251910, 0.976199624515976530, 0.976188779600202010, 0.976177932243955330, 0.976167082447264020, +0.976156230210154960, 0.976145375532655460, 0.976134518414792370, 0.976123658856593130, 0.976112796858084610, 0.976101932419294220, 0.976091065540248710, 0.976080196220975750, +0.976069324461502410, 0.976058450261855560, 0.976047573622062740, 0.976036694542150920, 0.976025813022147410, 0.976014929062079100, 0.976004042661973710, 0.975993153821858250, +0.975982262541759900, 0.975971368821705880, 0.975960472661723370, 0.975949574061839690, 0.975938673022082150, 0.975927769542477730, 0.975916863623053970, 0.975905955263838170, +0.975895044464857420, 0.975884131226139150, 0.975873215547710450, 0.975862297429598740, 0.975851376871831320, 0.975840453874435190, 0.975829528437438200, 0.975818600560867330, +0.975807670244750010, 0.975796737489113440, 0.975785802293985150, 0.975774864659392230, 0.975763924585361990, 0.975752982071922180, 0.975742037119099900, 0.975731089726922460, +0.975720139895417390, 0.975709187624611900, 0.975698232914533500, 0.975687275765209530, 0.975676316176667060, 0.975665354148934070, 0.975654389682037770, 0.975643422776005350, +0.975632453430864470, 0.975621481646642420, 0.975610507423366750, 0.975599530761064540, 0.975588551659763660, 0.975577570119491420, 0.975566586140275360, 0.975555599722142670, +0.975544610865121120, 0.975533619569238010, 0.975522625834520760, 0.975511629660996920, 0.975500631048694110, 0.975489629997639660, 0.975478626507861210, 0.975467620579386190, +0.975456612212242110, 0.975445601406456530, 0.975434588162056860, 0.975423572479070630, 0.975412554357525610, 0.975401533797449210, 0.975390510798868960, 0.975379485361812400, +0.975368457486307180, 0.975357427172380830, 0.975346394420060660, 0.975335359229374750, 0.975324321600350430, 0.975313281533015330, 0.975302239027396990, 0.975291194083523050, +0.975280146701421160, 0.975269096881118850, 0.975258044622643650, 0.975246989926023540, 0.975235932791285950, 0.975224873218458520, 0.975213811207568890, 0.975202746758644820, +0.975191679871713730, 0.975180610546803490, 0.975169538783941640, 0.975158464583156030, 0.975147387944474310, 0.975136308867924130, 0.975125227353533130, 0.975114143401329070, +0.975103057011339700, 0.975091968183592450, 0.975080876918115400, 0.975069783214936310, 0.975058687074082610, 0.975047588495582260, 0.975036487479463030, 0.975025384025752450, +0.975014278134478500, 0.975003169805668590, 0.974992059039351040, 0.974980945835553280, 0.974969830194303170, 0.974958712115628460, 0.974947591599557020, 0.974936468646116490, +0.974925343255334750, 0.974914215427239770, 0.974903085161859200, 0.974891952459221000, 0.974880817319352940, 0.974869679742282780, 0.974858539728038380, 0.974847397276647710, +0.974836252388138310, 0.974825105062538500, 0.974813955299875910, 0.974802803100178420, 0.974791648463473990, 0.974780491389790390, 0.974769331879155490, 0.974758169931597360, +0.974747005547143550, 0.974735838725822480, 0.974724669467661790, 0.974713497772689450, 0.974702323640933340, 0.974691147072421440, 0.974679968067181600, 0.974668786625241700, +0.974657602746630050, 0.974646416431374400, 0.974635227679502720, 0.974624036491042900, 0.974612842866023010, 0.974601646804471030, 0.974590448306414950, 0.974579247371882510, +0.974568044000902130, 0.974556838193501700, 0.974545629949709170, 0.974534419269552530, 0.974523206153059870, 0.974511990600259280, 0.974500772611178620, 0.974489552185845760, +0.974478329324289350, 0.974467104026537020, 0.974455876292616980, 0.974444646122557210, 0.974433413516385900, 0.974422178474131040, 0.974410940995820480, 0.974399701081482770, +0.974388458731145880, 0.974377213944837780, 0.974365966722586680, 0.974354717064420670, 0.974343464970367830, 0.974332210440456370, 0.974320953474714150, 0.974309694073169700, +0.974298432235851110, 0.974287167962786360, 0.974275901254003760, 0.974264632109531400, 0.974253360529397370, 0.974242086513629870, 0.974230810062257310, 0.974219531175307680, +0.974208249852809290, 0.974196966094790230, 0.974185679901278690, 0.974174391272303100, 0.974163100207891430, 0.974151806708071780, 0.974140510772872890, 0.974129212402322750, +0.974117911596449450, 0.974106608355281510, 0.974095302678846920, 0.974083994567174210, 0.974072684020291460, 0.974061371038226760, 0.974050055621008880, 0.974038737768665790, +0.974027417481225900, 0.974016094758717530, 0.974004769601168880, 0.973993442008608270, 0.973982111981063880, 0.973970779518564480, 0.973959444621138040, 0.973948107288812980, +0.973936767521617730, 0.973925425319580480, 0.973914080682729670, 0.973902733611093700, 0.973891384104700770, 0.973880032163579430, 0.973868677787758100, 0.973857320977265070, +0.973845961732128670, 0.973834600052377430, 0.973823235938039770, 0.973811869389143880, 0.973800500405718190, 0.973789128987791460, 0.973777755135391890, 0.973766378848547890, +0.973755000127288000, 0.973743618971640520, 0.973732235381634110, 0.973720849357296860, 0.973709460898657620, 0.973698070005744820, 0.973686676678586770, 0.973675280917212120, +0.973663882721649280, 0.973652482091926670, 0.973641079028072840, 0.973629673530116090, 0.973618265598085400, 0.973606855232009070, 0.973595442431915650, 0.973584027197833550, +0.973572609529791300, 0.973561189427817660, 0.973549766891940840, 0.973538341922189690, 0.973526914518592860, 0.973515484681178660, 0.973504052409975620, 0.973492617705012610, +0.973481180566318050, 0.973469740993920470, 0.973458298987848410, 0.973446854548130740, 0.973435407674795970, 0.973423958367872650, 0.973412506627389430, 0.973401052453374940, +0.973389595845857940, 0.973378136804866840, 0.973366675330430200, 0.973355211422577080, 0.973343745081335920, 0.973332276306735470, 0.973320805098804250, 0.973309331457571040, +0.973297855383064460, 0.973286376875313050, 0.973274895934346020, 0.973263412560191670, 0.973251926752878750, 0.973240438512436020, 0.973228947838892240, 0.973217454732276050, +0.973205959192616320, 0.973194461219941350, 0.973182960814280570, 0.973171457975662290, 0.973159952704115370, 0.973148444999668570, 0.973136934862350760, 0.973125422292190460, +0.973113907289216540, 0.973102389853457980, 0.973090869984943430, 0.973079347683701750, 0.973067822949761680, 0.973056295783152110, 0.973044766183901680, 0.973033234152039460, +0.973021699687593890, 0.973010162790594270, 0.972998623461069250, 0.972987081699047680, 0.972975537504558340, 0.972963990877630190, 0.972952441818292100, 0.972940890326572940, +0.972929336402501340, 0.972917780046106520, 0.972906221257417330, 0.972894660036462520, 0.972883096383271080, 0.972871530297871990, 0.972859961780293990, 0.972848390830565850, +0.972836817448716970, 0.972825241634776130, 0.972813663388772070, 0.972802082710733870, 0.972790499600690530, 0.972778914058670900, 0.972767326084703950, 0.972755735678818570, +0.972744142841044050, 0.972732547571409030, 0.972720949869942840, 0.972709349736674110, 0.972697747171632040, 0.972686142174845720, 0.972674534746343910, 0.972662924886155580, +0.972651312594310260, 0.972639697870836480, 0.972628080715763570, 0.972616461129120480, 0.972604839110936200, 0.972593214661239820, 0.972581587780060210, 0.972569958467426780, +0.972558326723368500, 0.972546692547914370, 0.972535055941093570, 0.972523416902935090, 0.972511775433468120, 0.972500131532721630, 0.972488485200724620, 0.972476836437506600, +0.972465185243096550, 0.972453531617523570, 0.972441875560816630, 0.972430217073005030, 0.972418556154117990, 0.972406892804184240, 0.972395227023233550, 0.972383558811294790, +0.972371888168397040, 0.972360215094569710, 0.972348539589841690, 0.972336861654242380, 0.972325181287800990, 0.972313498490546380, 0.972301813262508200, 0.972290125603715530, +0.972278435514197570, 0.972266742993983520, 0.972255048043102480, 0.972243350661583960, 0.972231650849457060, 0.972219948606750760, 0.972208243933494810, 0.972196536829718290, +0.972184827295450420, 0.972173115330720480, 0.972161400935557700, 0.972149684109991470, 0.972137964854050800, 0.972126243167765520, 0.972114519051164530, 0.972102792504277220, +0.972091063527133040, 0.972079332119761050, 0.972067598282190800, 0.972055862014451600, 0.972044123316572530, 0.972032382188583340, 0.972020638630513130, 0.972008892642391430, +0.971997144224247430, 0.971985393376110670, 0.971973640098010350, 0.971961884389975880, 0.971950126252036580, 0.971938365684222090, 0.971926602686561720, 0.971914837259084900, +0.971903069401820920, 0.971891299114799320, 0.971879526398049420, 0.971867751251600520, 0.971855973675482490, 0.971844193669724520, 0.971832411234356040, 0.971820626369406470, +0.971808839074905450, 0.971797049350882180, 0.971785257197366410, 0.971773462614387240, 0.971761665601974630, 0.971749866160157900, 0.971738064288966470, 0.971726259988429870, +0.971714453258577640, 0.971702644099439290, 0.971690832511044160, 0.971679018493422090, 0.971667202046602510, 0.971655383170614840, 0.971643561865488840, 0.971631738131253810, +0.971619911967939510, 0.971608083375575360, 0.971596252354190890, 0.971584418903815970, 0.971572583024480020, 0.971560744716212570, 0.971548903979043250, 0.971537060813001730, +0.971525215218117520, 0.971513367194420270, 0.971501516741939410, 0.971489663860704900, 0.971477808550746280, 0.971465950812093190, 0.971454090644775170, 0.971442228048821850, +0.971430363024263110, 0.971418495571128140, 0.971406625689447250, 0.971394753379249740, 0.971382878640565270, 0.971371001473423700, 0.971359121877854560, 0.971347239853887710, +0.971335355401552690, 0.971323468520879140, 0.971311579211897040, 0.971299687474636020, 0.971287793309125850, 0.971275896715396050, 0.971263997693476600, 0.971252096243397260, +0.971240192365187550, 0.971228286058877120, 0.971216377324496280, 0.971204466162074450, 0.971192552571641500, 0.971180636553227060, 0.971168718106861120, 0.971156797232573420, +0.971144873930393390, 0.971132948200351450, 0.971121020042477130, 0.971109089456800300, 0.971097156443350820, 0.971085221002158330, 0.971073283133252810, 0.971061342836664010, +0.971049400112421800, 0.971037454960556160, 0.971025507381096940, 0.971013557374074020, 0.971001604939517150, 0.970989650077456190, 0.970977692787921230, 0.970965733070941810, +0.970953770926548220, 0.970941806354770120, 0.970929839355637700, 0.970917869929180500, 0.970905898075428710, 0.970893923794412190, 0.970881947086160820, 0.970869967950704460, +0.970857986388073300, 0.970846002398297210, 0.970834015981406060, 0.970822027137429930, 0.970810035866398800, 0.970798042168342420, 0.970786046043291000, 0.970774047491274270, +0.970762046512322670, 0.970750043106465950, 0.970738037273734090, 0.970726029014157170, 0.970714018327765050, 0.970702005214588050, 0.970689989674655700, 0.970677971707998630, +0.970665951314646720, 0.970653928494629840, 0.970641903247978170, 0.970629875574721690, 0.970617845474890610, 0.970605812948514780, 0.970593777995624300, 0.970581740616249580, +0.970569700810420600, 0.970557658578167230, 0.970545613919519770, 0.970533566834508310, 0.970521517323162830, 0.970509465385513640, 0.970497411021590590, 0.970485354231424120, +0.970473295015044310, 0.970461233372481360, 0.970449169303765240, 0.970437102808926260, 0.970425033887994390, 0.970412962540999850, 0.970400888767973040, 0.970388812568944050, +0.970376733943943080, 0.970364652893000220, 0.970352569416145670, 0.970340483513409740, 0.970328395184822610, 0.970316304430414280, 0.970304211250215490, 0.970292115644255990, +0.970280017612566330, 0.970267917155176570, 0.970255814272117050, 0.970243708963418050, 0.970231601229109450, 0.970219491069222120, 0.970207378483786130, 0.970195263472831580, +0.970183146036388890, 0.970171026174488360, 0.970158903887160310, 0.970146779174434930, 0.970134652036342420, 0.970122522472913530, 0.970110390484178240, 0.970098256070167090, +0.970086119230910150, 0.970073979966438070, 0.970061838276780940, 0.970049694161969290, 0.970037547622033090, 0.970025398657003320, 0.970013247266909960, 0.970001093451783650, +0.969988937211654470, 0.969976778546552950, 0.969964617456509530, 0.969952453941554380, 0.969940288001718280, 0.969928119637031410, 0.969915948847524300, 0.969903775633227270, +0.969891599994170850, 0.969879421930385340, 0.969867241441901400, 0.969855058528749090, 0.969842873190959300, 0.969830685428562430, 0.969818495241588810, 0.969806302630068950, +0.969794107594033280, 0.969781910133512340, 0.969769710248536750, 0.969757507939136510, 0.969745303205342800, 0.969733096047185830, 0.969720886464696120, 0.969708674457904210, +0.969696460026840620, 0.969684243171535790, 0.969672023892020230, 0.969659802188324820, 0.969647578060479850, 0.969635351508515990, 0.969623122532463740, 0.969610891132353660, +0.969598657308216370, 0.969586421060082420, 0.969574182387982210, 0.969561941291946730, 0.969549697772006500, 0.969537451828191950, 0.969525203460533720, 0.969512952669062570, +0.969500699453809010, 0.969488443814803480, 0.969476185752077060, 0.969463925265660160, 0.969451662355583550, 0.969439397021877650, 0.969427129264573310, 0.969414859083701170, +0.969402586479291890, 0.969390311451375890, 0.969378033999984230, 0.969365754125147690, 0.969353471826896570, 0.969341187105261960, 0.969328899960274270, 0.969316610391964370, +0.969304318400362910, 0.969292023985500410, 0.969279727147408180, 0.969267427886116530, 0.969255126201656330, 0.969242822094058320, 0.969230515563353270, 0.969218206609571920, +0.969205895232744810, 0.969193581432903240, 0.969181265210077750, 0.969168946564298970, 0.969156625495597890, 0.969144302004005250, 0.969131976089551820, 0.969119647752268550, +0.969107316992185890, 0.969094983809335120, 0.969082648203746900, 0.969070310175452090, 0.969057969724481440, 0.969045626850865930, 0.969033281554636310, 0.969020933835823330, +0.969008583694458190, 0.968996231130571650, 0.968983876144194460, 0.968971518735357580, 0.968959158904091900, 0.968946796650428380, 0.968934431974397880, 0.968922064876031050, +0.968909695355359200, 0.968897323412413190, 0.968884949047223890, 0.968872572259822150, 0.968860193050239070, 0.968847811418505510, 0.968835427364652340, 0.968823040888710410, +0.968810651990711040, 0.968798260670685200, 0.968785866928663530, 0.968773470764677350, 0.968761072178757400, 0.968748671170934770, 0.968736267741240220, 0.968723861889705270, +0.968711453616360680, 0.968699042921237430, 0.968686629804366590, 0.968674214265779150, 0.968661796305506200, 0.968649375923578690, 0.968636953120027620, 0.968624527894884400, +0.968612100248179790, 0.968599670179944860, 0.968587237690210930, 0.968574802779008760, 0.968562365446369640, 0.968549925692324680, 0.968537483516904610, 0.968525038920140970, +0.968512591902064850, 0.968500142462707210, 0.968487690602099270, 0.968475236320271990, 0.968462779617256690, 0.968450320493084220, 0.968437858947786220, 0.968425394981393460, +0.968412928593937350, 0.968400459785448860, 0.968387988555959200, 0.968375514905499560, 0.968363038834101130, 0.968350560341794900, 0.968338079428612500, 0.968325596094584910, +0.968313110339743320, 0.968300622164118940, 0.968288131567742960, 0.968275638550646690, 0.968263143112861210, 0.968250645254417950, 0.968238144975348100, 0.968225642275682970, +0.968213137155453650, 0.968200629614691550, 0.968188119653427880, 0.968175607271693830, 0.968163092469520590, 0.968150575246939820, 0.968138055603982580, 0.968125533540680320, +0.968113009057064100, 0.968100482153165460, 0.968087952829015610, 0.968075421084645840, 0.968062886920087240, 0.968050350335371680, 0.968037811330530350, 0.968025269905594340, +0.968012726060595300, 0.968000179795564300, 0.967987631110532990, 0.967975080005532230, 0.967962526480594110, 0.967949970535749600, 0.967937412171030240, 0.967924851386467330, +0.967912288182092300, 0.967899722557936440, 0.967887154514031400, 0.967874584050408160, 0.967862011167098800, 0.967849435864134300, 0.967836858141546300, 0.967824277999366100, +0.967811695437625240, 0.967799110456355140, 0.967786523055587210, 0.967773933235352770, 0.967761340995683780, 0.967748746336611340, 0.967736149258167090, 0.967723549760382440, +0.967710947843288930, 0.967698343506918080, 0.967685736751301100, 0.967673127576470060, 0.967660515982456170, 0.967647901969290960, 0.967635285537006060, 0.967622666685632900, +0.967610045415203120, 0.967597421725748250, 0.967584795617299490, 0.967572167089889020, 0.967559536143548170, 0.967546902778308460, 0.967534266994201420, 0.967521628791258800, +0.967508988169512140, 0.967496345128992630, 0.967483699669732580, 0.967471051791763290, 0.967458401495116420, 0.967445748779823480, 0.967433093645916120, 0.967420436093426090, +0.967407776122385040, 0.967395113732824160, 0.967382448924775870, 0.967369781698271370, 0.967357112053342520, 0.967344439990020730, 0.967331765508337990, 0.967319088608325720, +0.967306409290015770, 0.967293727553439680, 0.967281043398629300, 0.967268356825616400, 0.967255667834432620, 0.967242976425109700, 0.967230282597679290, 0.967217586352173250, +0.967204887688623010, 0.967192186607060630, 0.967179483107517890, 0.967166777190026530, 0.967154068854618080, 0.967141358101324510, 0.967128644930177580, 0.967115929341208940, +0.967103211334450320, 0.967090490909933930, 0.967077768067691300, 0.967065042807754180, 0.967052315130154550, 0.967039585034924040, 0.967026852522094640, 0.967014117591698090, +0.967001380243766030, 0.966988640478330770, 0.966975898295423850, 0.966963153695077130, 0.966950406677322680, 0.966937657242192160, 0.966924905389717430, 0.966912151119930230, +0.966899394432862880, 0.966886635328547130, 0.966873873807014730, 0.966861109868297650, 0.966848343512427770, 0.966835574739437040, 0.966822803549357350, 0.966810029942220430, +0.966797253918058710, 0.966784475476903940, 0.966771694618787870, 0.966758911343742480, 0.966746125651799960, 0.966733337542992070, 0.966720547017350550, 0.966707754074908050, +0.966694958715696000, 0.966682160939746680, 0.966669360747091870, 0.966656558137763740, 0.966643753111794070, 0.966630945669215150, 0.966618135810058620, 0.966605323534356910, +0.966592508842141980, 0.966579691733445710, 0.966566872208300290, 0.966554050266737570, 0.966541225908789880, 0.966528399134488960, 0.966515569943866890, 0.966502738336956210, +0.966489904313788560, 0.966477067874396130, 0.966464229018811130, 0.966451387747065520, 0.966438544059191500, 0.966425697955220820, 0.966412849435186130, 0.966399998499119280, +0.966387145147052480, 0.966374289379017810, 0.966361431195047470, 0.966348570595173540, 0.966335707579428100, 0.966322842147843250, 0.966309974300451510, 0.966297104037284750, +0.966284231358375270, 0.966271356263755270, 0.966258478753456830, 0.966245598827512260, 0.966232716485953660, 0.966219831728812980, 0.966206944556122990, 0.966194054967915660, +0.966181162964223180, 0.966168268545077760, 0.966155371710511690, 0.966142472460557180, 0.966129570795246310, 0.966116666714611720, 0.966103760218685490, 0.966090851307499830, +0.966077939981087040, 0.966065026239479320, 0.966052110082709080, 0.966039191510808640, 0.966026270523809960, 0.966013347121745800, 0.966000421304648360, 0.965987493072549720, +0.965974562425482520, 0.965961629363478740, 0.965948693886571010, 0.965935755994791310, 0.965922815688172400, 0.965909872966746460, 0.965896927830545820, 0.965883980279602870, +0.965871030313950050, 0.965858077933619550, 0.965845123138643900, 0.965832165929055300, 0.965819206304886380, 0.965806244266169460, 0.965793279812936940, 0.965780312945221260, +0.965767343663054830, 0.965754371966469960, 0.965741397855499170, 0.965728421330174780, 0.965715442390529420, 0.965702461036595520, 0.965689477268405480, 0.965676491085991630, +0.965663502489386700, 0.965650511478622910, 0.965637518053732660, 0.965624522214748810, 0.965611523961703690, 0.965598523294629810, 0.965585520213559590, 0.965572514718525570, +0.965559506809560150, 0.965546496486696100, 0.965533483749965500, 0.965520468599401440, 0.965507451035036320, 0.965494431056902470, 0.965481408665032510, 0.965468383859459100, +0.965455356640214650, 0.965442327007331680, 0.965429294960843070, 0.965416260500781220, 0.965403223627178670, 0.965390184340068180, 0.965377142639482160, 0.965364098525453240, +0.965351051998014190, 0.965338003057197190, 0.965324951703035450, 0.965311897935561270, 0.965298841754807400, 0.965285783160806490, 0.965272722153591060, 0.965259658733193750, +0.965246592899647430, 0.965233524652984290, 0.965220453993237640, 0.965207380920439780, 0.965194305434623480, 0.965181227535821470, 0.965168147224066410, 0.965155064499390920, +0.965141979361827550, 0.965128891811409480, 0.965115801848169140, 0.965102709472139390, 0.965089614683352750, 0.965076517481842200, 0.965063417867640270, 0.965050315840779830, +0.965037211401293280, 0.965024104549214060, 0.965010995284574570, 0.964997883607407460, 0.964984769517745810, 0.964971653015622160, 0.964958534101069350, 0.964945412774120270, +0.964932289034807320, 0.964919162883163930, 0.964906034319222730, 0.964892903343016360, 0.964879769954577690, 0.964866634153939700, 0.964853495941135010, 0.964840355316196390, +0.964827212279157130, 0.964814066830049890, 0.964800918968907410, 0.964787768695762660, 0.964774616010648510, 0.964761460913597820, 0.964748303404643460, 0.964735143483818060, +0.964721981151155040, 0.964708816406687150, 0.964695649250447150, 0.964682479682468120, 0.964669307702782810, 0.964656133311424190, 0.964642956508425130, 0.964629777293818820, +0.964616595667638020, 0.964603411629915810, 0.964590225180685160, 0.964577036319978820, 0.964563845047829880, 0.964550651364271430, 0.964537455269335990, 0.964524256763057200, +0.964511055845467810, 0.964497852516600810, 0.964484646776489040, 0.964471438625165820, 0.964458228062663900, 0.964445015089016370, 0.964431799704256190, 0.964418581908416670, +0.964405361701530680, 0.964392139083631310, 0.964378914054751620, 0.964365686614924610, 0.964352456764183350, 0.964339224502560820, 0.964325989830090440, 0.964312752746805060, +0.964299513252737770, 0.964286271347921660, 0.964273027032389930, 0.964259780306175650, 0.964246531169311920, 0.964233279621831580, 0.964220025663768300, 0.964206769295155030, +0.964193510516024750, 0.964180249326410670, 0.964166985726346070, 0.964153719715863940, 0.964140451294997480, 0.964127180463779650, 0.964113907222244220, 0.964100631570423920, +0.964087353508352060, 0.964074073036061850, 0.964060790153586480, 0.964047504860959030, 0.964034217158212690, 0.964020927045381000, 0.964007634522496940, 0.963994339589593910, +0.963981042246704890, 0.963967742493863410, 0.963954440331102450, 0.963941135758455530, 0.963927828775955400, 0.963914519383636040, 0.963901207581530310, 0.963887893369671510, +0.963874576748093070, 0.963861257716828180, 0.963847936275910140, 0.963834612425372050, 0.963821286165247650, 0.963807957495570020, 0.963794626416372480, 0.963781292927688330, +0.963767957029550980, 0.963754618721993860, 0.963741278005050050, 0.963727934878752860, 0.963714589343136030, 0.963701241398232770, 0.963687891044076480, 0.963674538280700380, +0.963661183108137860, 0.963647825526422470, 0.963634465535587510, 0.963621103135666180, 0.963607738326692330, 0.963594371108699050, 0.963581001481719880, 0.963567629445788220, +0.963554255000937500, 0.963540878147201130, 0.963527498884612310, 0.963514117213205010, 0.963500733133012430, 0.963487346644067990, 0.963473957746405210, 0.963460566440057510, +0.963447172725058420, 0.963433776601441360, 0.963420378069239640, 0.963406977128487220, 0.963393573779217300, 0.963380168021463530, 0.963366759855259320, 0.963353349280638200, +0.963339936297633700, 0.963326520906279350, 0.963313103106608450, 0.963299682898655090, 0.963286260282452460, 0.963272835258034200, 0.963259407825433840, 0.963245977984685030, +0.963232545735821180, 0.963219111078875810, 0.963205674013882910, 0.963192234540875770, 0.963178792659888040, 0.963165348370953360, 0.963151901674105250, 0.963138452569377470, +0.963125001056803540, 0.963111547136416780, 0.963098090808251480, 0.963084632072340960, 0.963071170928718860, 0.963057707377418800, 0.963044241418474440, 0.963030773051919530, +0.963017302277787480, 0.963003829096112260, 0.962990353506927630, 0.962976875510267120, 0.962963395106164350, 0.962949912294653100, 0.962936427075767100, 0.962922939449539990, +0.962909449416005310, 0.962895956975197250, 0.962882462127149230, 0.962868964871895110, 0.962855465209468630, 0.962841963139903450, 0.962828458663233410, 0.962814951779492170, +0.962801442488713240, 0.962787930790931060, 0.962774416686179020, 0.962760900174490900, 0.962747381255900650, 0.962733859930441800, 0.962720336198148340, 0.962706810059053900, +0.962693281513192560, 0.962679750560598070, 0.962666217201304190, 0.962652681435344770, 0.962639143262753570, 0.962625602683564670, 0.962612059697811610, 0.962598514305528230, +0.962584966506748850, 0.962571416301507000, 0.962557863689836650, 0.962544308671771540, 0.962530751247345770, 0.962517191416593090, 0.962503629179547350, 0.962490064536242420, +0.962476497486712490, 0.962462928030991320, 0.962449356169112870, 0.962435781901111010, 0.962422205227019710, 0.962408626146872950, 0.962395044660704250, 0.962381460768548250, +0.962367874470438590, 0.962354285766409360, 0.962340694656494300, 0.962327101140727500, 0.962313505219142940, 0.962299906891774580, 0.962286306158656290, 0.962272703019822480, +0.962259097475306910, 0.962245489525143550, 0.962231879169366480, 0.962218266408009780, 0.962204651241107320, 0.962191033668693070, 0.962177413690801450, 0.962163791307466320, +0.962150166518721650, 0.962136539324601640, 0.962122909725140140, 0.962109277720371470, 0.962095643310329600, 0.962082006495048380, 0.962068367274562460, 0.962054725648905480, +0.962041081618111750, 0.962027435182215340, 0.962013786341250340, 0.962000135095250840, 0.961986481444251030, 0.961972825388284770, 0.961959166927386700, 0.961945506061590680, +0.961931842790930910, 0.961918177115441590, 0.961904509035156790, 0.961890838550110590, 0.961877165660337210, 0.961863490365871150, 0.961849812666746300, 0.961836132562996940, +0.961822450054657270, 0.961808765141761500, 0.961795077824343700, 0.961781388102438290, 0.961767695976079250, 0.961754001445301100, 0.961740304510137920, 0.961726605170624030, +0.961712903426793610, 0.961699199278680970, 0.961685492726320310, 0.961671783769745710, 0.961658072408991820, 0.961644358644092810, 0.961630642475082900, 0.961616923901996380, +0.961603202924867560, 0.961589479543730750, 0.961575753758620140, 0.961562025569569930, 0.961548294976614980, 0.961534561979789260, 0.961520826579127070, 0.961507088774662950, +0.961493348566430980, 0.961479605954465690, 0.961465860938801380, 0.961452113519472240, 0.961438363696512920, 0.961424611469957830, 0.961410856839841180, 0.961397099806197360, +0.961383340369060810, 0.961369578528465830, 0.961355814284446720, 0.961342047637038340, 0.961328278586274790, 0.961314507132190580, 0.961300733274820130, 0.961286957014197860, +0.961273178350358080, 0.961259397283335430, 0.961245613813164090, 0.961231827939878940, 0.961218039663514160, 0.961204248984104280, 0.961190455901683840, 0.961176660416287240, +0.961162862527948910, 0.961149062236703600, 0.961135259542585270, 0.961121454445629020, 0.961107646945869140, 0.961093837043340170, 0.961080024738076630, 0.961066210030113060, +0.961052392919483860, 0.961038573406223450, 0.961024751490366920, 0.961010927171948470, 0.960997100451002730, 0.960983271327564230, 0.960969439801667490, 0.960955605873347270, +0.960941769542637990, 0.960927930809573950, 0.960914089674190450, 0.960900246136521700, 0.960886400196602320, 0.960872551854466850, 0.960858701110150150, 0.960844847963686630, +0.960830992415110720, 0.960817134464457600, 0.960803274111761700, 0.960789411357057530, 0.960775546200379860, 0.960761678641763320, 0.960747808681242540, 0.960733936318852290, +0.960720061554626970, 0.960706184388601780, 0.960692304820811030, 0.960678422851289570, 0.960664538480072050, 0.960650651707193210, 0.960636762532687700, 0.960622870956590270, +0.960608976978935440, 0.960595080599758510, 0.960581181819093690, 0.960567280636976050, 0.960553377053440240, 0.960539471068520890, 0.960525562682252860, 0.960511651894670690, +0.960497738705809680, 0.960483823115704350, 0.960469905124389340, 0.960455984731899640, 0.960442061938269980, 0.960428136743535220, 0.960414209147730010, 0.960400279150889100, +0.960386346753047790, 0.960372411954240500, 0.960358474754502200, 0.960344535153867750, 0.960330593152372010, 0.960316648750049740, 0.960302701946935790, 0.960288752743064910, +0.960274801138472410, 0.960260847133192820, 0.960246890727261220, 0.960232931920712350, 0.960218970713581090, 0.960205007105902510, 0.960191041097711030, 0.960177072689042290, +0.960163101879930920, 0.960149128670411690, 0.960135153060519660, 0.960121175050289820, 0.960107194639756910, 0.960093211828956130, 0.960079226617922000, 0.960065239006690160, +0.960051248995295150, 0.960037256583772040, 0.960023261772155690, 0.960009264560481300, 0.959995264948783730, 0.959981262937097730, 0.959967258525458830, 0.959953251713901780, +0.959939242502461540, 0.959925230891173320, 0.959911216880071970, 0.959897200469192580, 0.959883181658570120, 0.959869160448239560, 0.959855136838236200, 0.959841110828595130, +0.959827082419351330, 0.959813051610539650, 0.959799018402195500, 0.959784982794353760, 0.959770944787049500, 0.959756904380317690, 0.959742861574193860, 0.959728816368712880, +0.959714768763909820, 0.959700718759819880, 0.959686666356478150, 0.959672611553919700, 0.959658554352179500, 0.959644494751293210, 0.959630432751295670, 0.959616368352221970, +0.959602301554107420, 0.959588232356987090, 0.959574160760896190, 0.959560086765869900, 0.959546010371943200, 0.959531931579151620, 0.959517850387530240, 0.959503766797114240, +0.959489680807938840, 0.959475592420039210, 0.959461501633450680, 0.959447408448208310, 0.959433312864347190, 0.959419214881903070, 0.959405114500910820, 0.959391011721405840, +0.959376906543423340, 0.959362798966998610, 0.959348688992166850, 0.959334576618963150, 0.959320461847423140, 0.959306344677582130, 0.959292225109475210, 0.959278103143137660, +0.959263978778604920, 0.959249852015912170, 0.959235722855094840, 0.959221591296188000, 0.959207457339227300, 0.959193320984248030, 0.959179182231285510, 0.959165041080375040, +0.959150897531551920, 0.959136751584851450, 0.959122603240309070, 0.959108452497960280, 0.959094299357840410, 0.959080143819984740, 0.959065985884428710, 0.959051825551207830, +0.959037662820357300, 0.959023497691912640, 0.959009330165908950, 0.958995160242382180, 0.958980987921367540, 0.958966813202900450, 0.958952636087016310, 0.958938456573750540, +0.958924274663138680, 0.958910090355216130, 0.958895903650018090, 0.958881714547580530, 0.958867523047938650, 0.958853329151128090, 0.958839132857184140, 0.958824934166142340, +0.958810733078038210, 0.958796529592906950, 0.958782323710784650, 0.958768115431706590, 0.958753904755708210, 0.958739691682825020, 0.958725476213092680, 0.958711258346546690, +0.958697038083222490, 0.958682815423155370, 0.958668590366381520, 0.958654362912936260, 0.958640133062855000, 0.958625900816173490, 0.958611666172927150, 0.958597429133151710, +0.958583189696882610, 0.958568947864155360, 0.958554703635005940, 0.958540457009469880, 0.958526207987582590, 0.958511956569379820, 0.958497702754897100, 0.958483446544170170, +0.958469187937234350, 0.958454926934125710, 0.958440663534879890, 0.958426397739532420, 0.958412129548118940, 0.958397858960675090, 0.958383585977236610, 0.958369310597839140, +0.958355032822518220, 0.958340752651309910, 0.958326470084249650, 0.958312185121373390, 0.958297897762716570, 0.958283608008315020, 0.958269315858204410, 0.958255021312420240, +0.958240724370998830, 0.958226425033975590, 0.958212123301386280, 0.958197819173266740, 0.958183512649652510, 0.958169203730579680, 0.958154892416083650, 0.958140578706200290, +0.958126262600965670, 0.958111944100415340, 0.958097623204585250, 0.958083299913511040, 0.958068974227228590, 0.958054646145773740, 0.958040315669182240, 0.958025982797489740, +0.958011647530732540, 0.957997309868946160, 0.957982969812166460, 0.957968627360429430, 0.957954282513770790, 0.957939935272226540, 0.957925585635832080, 0.957911233604623940, +0.957896879178637750, 0.957882522357909380, 0.957868163142474690, 0.957853801532369540, 0.957839437527629900, 0.957825071128291740, 0.957810702334390580, 0.957796331145962850, +0.957781957563044410, 0.957767581585671100, 0.957753203213878690, 0.957738822447703360, 0.957724439287180980, 0.957710053732347300, 0.957695665783238730, 0.957681275439890900, +0.957666882702339910, 0.957652487570621710, 0.957638090044772290, 0.957623690124827730, 0.957609287810823880, 0.957594883102796610, 0.957580476000782330, 0.957566066504816790, +0.957551654614936190, 0.957537240331176490, 0.957522823653573550, 0.957508404582163690, 0.957493983116982750, 0.957479559258066600, 0.957465133005451770, 0.957450704359174230, +0.957436273319269840, 0.957421839885774780, 0.957407404058725040, 0.957392965838156920, 0.957378525224106050, 0.957364082216609180, 0.957349636815702070, 0.957335189021420900, +0.957320738833801750, 0.957306286252880720, 0.957291831278693990, 0.957277373911277650, 0.957262914150667670, 0.957248451996900670, 0.957233987450012540, 0.957219520510039450, +0.957205051177017490, 0.957190579450982960, 0.957176105331971950, 0.957161628820020650, 0.957147149915165030, 0.957132668617441840, 0.957118184926887050, 0.957103698843536630, +0.957089210367427110, 0.957074719498594460, 0.957060226237075100, 0.957045730582904870, 0.957031232536120550, 0.957016732096758190, 0.957002229264853900, 0.956987724040444190, +0.956973216423565030, 0.956958706414252960, 0.956944194012544050, 0.956929679218474380, 0.956915162032080820, 0.956900642453399340, 0.956886120482466240, 0.956871596119317820, +0.956857069363990400, 0.956842540216520380, 0.956828008676943730, 0.956813474745297320, 0.956798938421617230, 0.956784399705939760, 0.956769858598301330, 0.956755315098738120, +0.956740769207286790, 0.956726220923983520, 0.956711670248864390, 0.956697117181966260, 0.956682561723325440, 0.956668003872978230, 0.956653443630961050, 0.956638880997310090, +0.956624315972062100, 0.956609748555253270, 0.956595178746919790, 0.956580606547098640, 0.956566031955825900, 0.956551454973138200, 0.956536875599071750, 0.956522293833663160, +0.956507709676948870, 0.956493123128965060, 0.956478534189748600, 0.956463942859335890, 0.956449349137763250, 0.956434753025067310, 0.956420154521284480, 0.956405553626451300, +0.956390950340604170, 0.956376344663779410, 0.956361736596014090, 0.956347126137344410, 0.956332513287806880, 0.956317898047438050, 0.956303280416274550, 0.956288660394352790, +0.956274037981709400, 0.956259413178380700, 0.956244785984403660, 0.956230156399814680, 0.956215524424650300, 0.956200890058947150, 0.956186253302741760, 0.956171614156070770, +0.956156972618970370, 0.956142328691477860, 0.956127682373629550, 0.956113033665462080, 0.956098382567011960, 0.956083729078315850, 0.956069073199410480, 0.956054414930332390, +0.956039754271118090, 0.956025091221804570, 0.956010425782428340, 0.955995757953026050, 0.955981087733634330, 0.955966415124289930, 0.955951740125029590, 0.955937062735889520, +0.955922382956907010, 0.955907700788118710, 0.955893016229561020, 0.955878329281270810, 0.955863639943284830, 0.955848948215639700, 0.955834254098372190, 0.955819557591518820, +0.955804858695116890, 0.955790157409202700, 0.955775453733813120, 0.955760747668984890, 0.955746039214754870, 0.955731328371159710, 0.955716615138236250, 0.955701899516021030, +0.955687181504551230, 0.955672461103863500, 0.955657738313994700, 0.955643013134981460, 0.955628285566860750, 0.955613555609669320, 0.955598823263443700, 0.955584088528221300, +0.955569351404038650, 0.955554611890932710, 0.955539869988940140, 0.955525125698098000, 0.955510379018442930, 0.955495629950012030, 0.955480878492841690, 0.955466124646969450, +0.955451368412431950, 0.955436609789265920, 0.955421848777508460, 0.955407085377196320, 0.955392319588366570, 0.955377551411055960, 0.955362780845301130, 0.955348007891139720, +0.955333232548608250, 0.955318454817743690, 0.955303674698583020, 0.955288892191163090, 0.955274107295520980, 0.955259320011693450, 0.955244530339717680, 0.955229738279630760, +0.955214943831469430, 0.955200146995270670, 0.955185347771071670, 0.955170546158909170, 0.955155742158820380, 0.955140935770842030, 0.955126126995011540, 0.955111315831365660, +0.955096502279941580, 0.955081686340776170, 0.955066868013906610, 0.955052047299369880, 0.955037224197202830, 0.955022398707442880, 0.955007570830126990, 0.954992740565292150, +0.954977907912975430, 0.954963072873213910, 0.954948235446044790, 0.954933395631505140, 0.954918553429631610, 0.954903708840462050, 0.954888861864033100, 0.954874012500382060, +0.954859160749546020, 0.954844306611562050, 0.954829450086467360, 0.954814591174299010, 0.954799729875093870, 0.954784866188889800, 0.954770000115723440, 0.954755131655632190, +0.954740260808653040, 0.954725387574823170, 0.954710511954179890, 0.954695633946760160, 0.954680753552601510, 0.954665870771741030, 0.954650985604215800, 0.954636098050063110, +0.954621208109320270, 0.954606315782024370, 0.954591421068212600, 0.954576523967922140, 0.954561624481190530, 0.954546722608054950, 0.954531818348552500, 0.954516911702720460, +0.954502002670596260, 0.954487091252216980, 0.954472177447620030, 0.954457261256842270, 0.954442342679921670, 0.954427421716895210, 0.954412498367800290, 0.954397572632674000, +0.954382644511553860, 0.954367714004477060, 0.954352781111480700, 0.954337845832602730, 0.954322908167880010, 0.954307968117350190, 0.954293025681050340, 0.954278080859017890, +0.954263133651290340, 0.954248184057904900, 0.954233232078898760, 0.954218277714309780, 0.954203320964175150, 0.954188361828532170, 0.954173400307418370, 0.954158436400870950, +0.954143470108927530, 0.954128501431625090, 0.954113530369001710, 0.954098556921094580, 0.954083581087940890, 0.954068602869578400, 0.954053622266044290, 0.954038639277376200, +0.954023653903611550, 0.954008666144787410, 0.953993676000941870, 0.953978683472112120, 0.953963688558335800, 0.953948691259650090, 0.953933691576092760, 0.953918689507701200, +0.953903685054512840, 0.953888678216565090, 0.953873668993895920, 0.953858657386542520, 0.953843643394542420, 0.953828627017933360, 0.953813608256752650, 0.953798587111037930, +0.953783563580826390, 0.953768537666156320, 0.953753509367064930, 0.953738478683589630, 0.953723445615768270, 0.953708410163638280, 0.953693372327237170, 0.953678332106602690, +0.953663289501772150, 0.953648244512783630, 0.953633197139674430, 0.953618147382482300, 0.953603095241244760, 0.953588040715999560, 0.953572983806784240, 0.953557924513636410, +0.953542862836593510, 0.953527798775693710, 0.953512732330974440, 0.953497663502473340, 0.953482592290228140, 0.953467518694276370, 0.953452442714655790, 0.953437364351403920, +0.953422283604558940, 0.953407200474158170, 0.953392114960239350, 0.953377027062840330, 0.953361936781998760, 0.953346844117752280, 0.953331749070138730, 0.953316651639195540, +0.953301551824960900, 0.953286449627472440, 0.953271345046767920, 0.953256238082884950, 0.953241128735861420, 0.953226017005735060, 0.953210902892543400, 0.953195786396324850, +0.953180667517116720, 0.953165546254956860, 0.953150422609883250, 0.953135296581933520, 0.953120168171145640, 0.953105037377557250, 0.953089904201206100, 0.953074768642130370, +0.953059630700367700, 0.953044490375955950, 0.953029347668933100, 0.953014202579336780, 0.952999055107204950, 0.952983905252575480, 0.952968753015486000, 0.952953598395974930, +0.952938441394079790, 0.952923282009838670, 0.952908120243289190, 0.952892956094469560, 0.952877789563417510, 0.952862620650170580, 0.952847449354767510, 0.952832275677245820, +0.952817099617643380, 0.952801921175998160, 0.952786740352348230, 0.952771557146731340, 0.952756371559185690, 0.952741183589748800, 0.952725993238459190, 0.952710800505354620, +0.952695605390473040, 0.952680407893852440, 0.952665208015530780, 0.952650005755546150, 0.952634801113936170, 0.952619594090739600, 0.952604384685993950, 0.952589172899737320, +0.952573958732007790, 0.952558742182843420, 0.952543523252282090, 0.952528301940361980, 0.952513078247120840, 0.952497852172597300, 0.952482623716829120, 0.952467392879854380, +0.952452159661711260, 0.952436924062437630, 0.952421686082071670, 0.952406445720651580, 0.952391202978215000, 0.952375957854800780, 0.952360710350446670, 0.952345460465190750, +0.952330208199071100, 0.952314953552126030, 0.952299696524393610, 0.952284437115911600, 0.952269175326718730, 0.952253911156852980, 0.952238644606352550, 0.952223375675255390, +0.952208104363599820, 0.952192830671423910, 0.952177554598766070, 0.952162276145663950, 0.952146995312156520, 0.952131712098281510, 0.952116426504077240, 0.952101138529581890, +0.952085848174833770, 0.952070555439870960, 0.952055260324731760, 0.952039962829454240, 0.952024662954076950, 0.952009360698638060, 0.951994056063175780, 0.951978749047728390, +0.951963439652334100, 0.951948127877031200, 0.951932813721857670, 0.951917497186852370, 0.951902178272053370, 0.951886856977498970, 0.951871533303227380, 0.951856207249277000, +0.951840878815686020, 0.951825548002492860, 0.951810214809735600, 0.951794879237453100, 0.951779541285683320, 0.951764200954464790, 0.951748858243835700, 0.951733513153834480, +0.951718165684499410, 0.951702815835868800, 0.951687463607981290, 0.951672109000875180, 0.951656752014588770, 0.951641392649160480, 0.951626030904628720, 0.951610666781031900, +0.951595300278408330, 0.951579931396796310, 0.951564560136234800, 0.951549186496761790, 0.951533810478415790, 0.951518432081235320, 0.951503051305258810, 0.951487668150524660, +0.951472282617071290, 0.951456894704937000, 0.951441504414160640, 0.951426111744780640, 0.951410716696835300, 0.951395319270363140, 0.951379919465402680, 0.951364517281992560, +0.951349112720170750, 0.951333705779976450, 0.951318296461447830, 0.951302884764623550, 0.951287470689542110, 0.951272054236241840, 0.951256635404761570, 0.951241214195139630, +0.951225790607414410, 0.951210364641625010, 0.951194936297809710, 0.951179505576007060, 0.951164072476255560, 0.951148636998593980, 0.951133199143060830, 0.951117758909694520, +0.951102316298533700, 0.951086871309617330, 0.951071423942983720, 0.951055974198671610, 0.951040522076719520, 0.951025067577166210, 0.951009610700050190, 0.950994151445409770, +0.950978689813284370, 0.950963225803712180, 0.950947759416731930, 0.950932290652382380, 0.950916819510701950, 0.950901345991729600, 0.950885870095503850, 0.950870391822063120, +0.950854911171446720, 0.950839428143693040, 0.950823942738840740, 0.950808454956928560, 0.950792964797995350, 0.950777472262079650, 0.950761977349220080, 0.950746480059455720, +0.950730980392825220, 0.950715478349367320, 0.950699973929120650, 0.950684467132124070, 0.950668957958416330, 0.950653446408036170, 0.950637932481022240, 0.950622416177413610, +0.950606897497249030, 0.950591376440567130, 0.950575853007406880, 0.950560327197806920, 0.950544799011806110, 0.950529268449443410, 0.950513735510757130, 0.950498200195786900, +0.950482662504571140, 0.950467122437148700, 0.950451579993558560, 0.950436035173839340, 0.950420487978030140, 0.950404938406169350, 0.950389386458296510, 0.950373832134450260, +0.950358275434669330, 0.950342716358992810, 0.950327154907459450, 0.950311591080108210, 0.950296024876977950, 0.950280456298107420, 0.950264885343536040, 0.950249312013302430, +0.950233736307445450, 0.950218158226004190, 0.950202577769017620, 0.950186994936524480, 0.950171409728563950, 0.950155822145174580, 0.950140232186395870, 0.950124639852266690, +0.950109045142825900, 0.950093448058112470, 0.950077848598165350, 0.950062246763023640, 0.950046642552726080, 0.950031035967312200, 0.950015427006820730, 0.949999815671290660, +0.949984201960761050, 0.949968585875270890, 0.949952967414859350, 0.949937346579565410, 0.949921723369427710, 0.949906097784486090, 0.949890469824779200, 0.949874839490346120, +0.949859206781225930, 0.949843571697457700, 0.949827934239080630, 0.949812294406133350, 0.949796652198655610, 0.949781007616686380, 0.949765360660264510, 0.949749711329429200, +0.949734059624219750, 0.949718405544675020, 0.949702749090834410, 0.949687090262736570, 0.949671429060421230, 0.949655765483927380, 0.949640099533294200, 0.949624431208560660, +0.949608760509766060, 0.949593087436949590, 0.949577411990150330, 0.949561734169407370, 0.949546053974760220, 0.949530371406248070, 0.949514686463909910, 0.949498999147785020, +0.949483309457912710, 0.949467617394332050, 0.949451922957082140, 0.949436226146202600, 0.949420526961732620, 0.949404825403711290, 0.949389121472177800, 0.949373415167171660, +0.949357706488731860, 0.949341995436897790, 0.949326282011708540, 0.949310566213203870, 0.949294848041422720, 0.949279127496404420, 0.949263404578188360, 0.949247679286813750, +0.949231951622319990, 0.949216221584746390, 0.949200489174131910, 0.949184754390516420, 0.949169017233939090, 0.949153277704439250, 0.949137535802056180, 0.949121791526829290, +0.949106044878797910, 0.949090295858001200, 0.949074544464478920, 0.949058790698270370, 0.949043034559414860, 0.949027276047951670, 0.949011515163920350, 0.948995751907360190, +0.948979986278310710, 0.948964218276810990, 0.948948447902900890, 0.948932675156619830, 0.948916900038006990, 0.948901122547101910, 0.948885342683944090, 0.948869560448572850, +0.948853775841027370, 0.948837988861347850, 0.948822199509573250, 0.948806407785743210, 0.948790613689897140, 0.948774817222074570, 0.948759018382314910, 0.948743217170657790, +0.948727413587142300, 0.948711607631808510, 0.948695799304695720, 0.948679988605843460, 0.948664175535291250, 0.948648360093078510, 0.948632542279244980, 0.948616722093829970, +0.948600899536872990, 0.948585074608414010, 0.948569247308492350, 0.948553417637147510, 0.948537585594419250, 0.948521751180346870, 0.948505914394970230, 0.948490075238328510, +0.948474233710461800, 0.948458389811409620, 0.948442543541211380, 0.948426694899906830, 0.948410843887535490, 0.948394990504137110, 0.948379134749751220, 0.948363276624417220, +0.948347416128175300, 0.948331553261064770, 0.948315688023125490, 0.948299820414396870, 0.948283950434918750, 0.948268078084730790, 0.948252203363872390, 0.948236326272383630, +0.948220446810304150, 0.948204564977673580, 0.948188680774531560, 0.948172794200917820, 0.948156905256872020, 0.948141013942434110, 0.948125120257643280, 0.948109224202539960, +0.948093325777163540, 0.948077424981553900, 0.948061521815750650, 0.948045616279793560, 0.948029708373722470, 0.948013798097577130, 0.947997885451396960, 0.947981970435222370, +0.947966053049092870, 0.947950133293048340, 0.947934211167128280, 0.947918286671372790, 0.947902359805821600, 0.947886430570514250, 0.947870498965491030, 0.947854564990791570, +0.947838628646455740, 0.947822689932523390, 0.947806748849034260, 0.947790805396028220, 0.947774859573545240, 0.947758911381624710, 0.947742960820307290, 0.947727007889632490, +0.947711052589640060, 0.947695094920370070, 0.947679134881862280, 0.947663172474156770, 0.947647207697293270, 0.947631240551311430, 0.947615271036251870, 0.947599299152154020, +0.947583324899057940, 0.947567348277003620, 0.947551369286030900, 0.947535387926179750, 0.947519404197489810, 0.947503418100001720, 0.947487429633754990, 0.947471438798789810, +0.947455445595145940, 0.947439450022863450, 0.947423452081982420, 0.947407451772542710, 0.947391449094584060, 0.947375444048147110, 0.947359436633271490, 0.947343426849997280, +0.947327414698364570, 0.947311400178413310, 0.947295383290183590, 0.947279364033715040, 0.947263342409048410, 0.947247318416223450, 0.947231292055280120, 0.947215263326258610, +0.947199232229198880, 0.947183198764141140, 0.947167162931125460, 0.947151124730191470, 0.947135084161380040, 0.947119041224730780, 0.947102995920284020, 0.947086948248079820, +0.947070898208158150, 0.947054845800559210, 0.947038791025323290, 0.947022733882490030, 0.947006674372100180, 0.946990612494193700, 0.946974548248810670, 0.946958481635991280, +0.946942412655775610, 0.946926341308203970, 0.946910267593316200, 0.946894191511153060, 0.946878113061754400, 0.946862032245160520, 0.946845949061411510, 0.946829863510547650, +0.946813775592609150, 0.946797685307636190, 0.946781592655668750, 0.946765497636747550, 0.946749400250912700, 0.946733300498204260, 0.946717198378662640, 0.946701093892327930, +0.946684987039240530, 0.946668877819440760, 0.946652766232968460, 0.946636652279864490, 0.946620535960168820, 0.946604417273921970, 0.946588296221163920, 0.946572172801935290, +0.946556047016276050, 0.946539918864226500, 0.946523788345827510, 0.946507655461118920, 0.946491520210141270, 0.946475382592934840, 0.946459242609539950, 0.946443100259996890, +0.946426955544346080, 0.946410808462627710, 0.946394659014882510, 0.946378507201150690, 0.946362353021472540, 0.946346196475888580, 0.946330037564439120, 0.946313876287164570, +0.946297712644105000, 0.946281546635301400, 0.946265378260794040, 0.946249207520623250, 0.946233034414829310, 0.946216858943452870, 0.946200681106534320, 0.946184500904113990, +0.946168318336232160, 0.946152133402929810, 0.946135946104247120, 0.946119756440224500, 0.946103564410902600, 0.946087370016321820, 0.946071173256522460, 0.946054974131545270, +0.946038772641430330, 0.946022568786218820, 0.946006362565950830, 0.945990153980666880, 0.945973943030407600, 0.945957729715213520, 0.945941514035125050, 0.945925295990182490, +0.945909075580427030, 0.945892852805898850, 0.945876627666638490, 0.945860400162686690, 0.945844170294083740, 0.945827938060870510, 0.945811703463087290, 0.945795466500774620, +0.945779227173973560, 0.945762985482724420, 0.945746741427067830, 0.945730495007044310, 0.945714246222694620, 0.945697995074059380, 0.945681741561179010, 0.945665485684094140, +0.945649227442845740, 0.945632966837474330, 0.945616703868020550, 0.945600438534524910, 0.945584170837028170, 0.945567900775571070, 0.945551628350193910, 0.945535353560937990, +0.945519076407843610, 0.945502796890951620, 0.945486515010302560, 0.945470230765937280, 0.945453944157896410, 0.945437655186220690, 0.945421363850950550, 0.945405070152127270, +0.945388774089791270, 0.945372475663983410, 0.945356174874744330, 0.945339871722114760, 0.945323566206135560, 0.945307258326847140, 0.945290948084290930, 0.945274635478507320, +0.945258320509537060, 0.945242003177421020, 0.945225683482200040, 0.945209361423914760, 0.945193037002606150, 0.945176710218314620, 0.945160381071081580, 0.945144049560947660, +0.945127715687953620, 0.945111379452140190, 0.945095040853548450, 0.945078699892219040, 0.945062356568192820, 0.945046010881510520, 0.945029662832213460, 0.945013312420342140, +0.944996959645937660, 0.944980604509040760, 0.944964247009692280, 0.944947887147933210, 0.944931524923804170, 0.944915160337346570, 0.944898793388601170, 0.944882424077608700, +0.944866052404410130, 0.944849678369046540, 0.944833301971558680, 0.944816923211987510, 0.944800542090373900, 0.944784158606759130, 0.944767772761183950, 0.944751384553689340, +0.944734993984316260, 0.944718601053105790, 0.944702205760098780, 0.944685808105336200, 0.944669408088858800, 0.944653005710708200, 0.944636600970925170, 0.944620193869550540, +0.944603784406625400, 0.944587372582190940, 0.944570958396287910, 0.944554541848957260, 0.944538122940240530, 0.944521701670178460, 0.944505278038812120, 0.944488852046182710, +0.944472423692331090, 0.944455992977298430, 0.944439559901125710, 0.944423124463853900, 0.944406686665524520, 0.944390246506178420, 0.944373803985856800, 0.944357359104600500, +0.944340911862450950, 0.944324462259449100, 0.944308010295635710, 0.944291555971052630, 0.944275099285740720, 0.944258640239741040, 0.944242178833094690, 0.944225715065842960, +0.944209248938026930, 0.944192780449687800, 0.944176309600866400, 0.944159836391604500, 0.944143360821942950, 0.944126882891923150, 0.944110402601586070, 0.944093919950972920, +0.944077434940125080, 0.944060947569083650, 0.944044457837889480, 0.944027965746584430, 0.944011471295209570, 0.943994974483805980, 0.943978475312414970, 0.943961973781077820, +0.943945469889835630, 0.943928963638729580, 0.943912455027801300, 0.943895944057091980, 0.943879430726642820, 0.943862915036495000, 0.943846396986689930, 0.943829876577268800, +0.943813353808273030, 0.943796828679743680, 0.943780301191722400, 0.943763771344250490, 0.943747239137369020, 0.943730704571119520, 0.943714167645543280, 0.943697628360681610, +0.943681086716575580, 0.943664542713267160, 0.943647996350797320, 0.943631447629207480, 0.943614896548539140, 0.943598343108833390, 0.943581787310131870, 0.943565229152475870, +0.943548668635906580, 0.943532105760465870, 0.943515540526194800, 0.943498972933135010, 0.943482402981327680, 0.943465830670814460, 0.943449256001636540, 0.943432678973835540, +0.943416099587452540, 0.943399517842529620, 0.943382933739107870, 0.943366347277228790, 0.943349758456933810, 0.943333167278264550, 0.943316573741262210, 0.943299977845968310, +0.943283379592424590, 0.943266778980672570, 0.943250176010753560, 0.943233570682709080, 0.943216962996580640, 0.943200352952409890, 0.943183740550238130, 0.943167125790106860, +0.943150508672057960, 0.943133889196132840, 0.943117267362373000, 0.943100643170819990, 0.943084016621515420, 0.943067387714500720, 0.943050756449817620, 0.943034122827507320, +0.943017486847612000, 0.943000848510172850, 0.942984207815231730, 0.942967564762830060, 0.942950919353009450, 0.942934271585811560, 0.942917621461277670, 0.942900968979450080, +0.942884314140369990, 0.942867656944079150, 0.942850997390619170, 0.942834335480031700, 0.942817671212358490, 0.942801004587640930, 0.942784335605920680, 0.942767664267239900, +0.942750990571639910, 0.942734314519162450, 0.942717636109849160, 0.942700955343741760, 0.942684272220882020, 0.942667586741311350, 0.942650898905072030, 0.942634208712205380, +0.942617516162753240, 0.942600821256757260, 0.942584123994259280, 0.942567424375301060, 0.942550722399924100, 0.942534018068170170, 0.942517311380081440, 0.942500602335699540, +0.942483890935066020, 0.942467177178222810, 0.942450461065211580, 0.942433742596074260, 0.942417021770852630, 0.942400298589588070, 0.942383573052323120, 0.942366845159099300, +0.942350114909958240, 0.942333382304941900, 0.942316647344092150, 0.942299910027450840, 0.942283170355059370, 0.942266428326960280, 0.942249683943195190, 0.942232937203805850, +0.942216188108834120, 0.942199436658321950, 0.942182682852311220, 0.942165926690843760, 0.942149168173961100, 0.942132407301706000, 0.942115644074119740, 0.942098878491244410, +0.942082110553121850, 0.942065340259794050, 0.942048567611302960, 0.942031792607690430, 0.942015015248998000, 0.941998235535268400, 0.941981453466543270, 0.941964669042864470, +0.941947882264273950, 0.941931093130813800, 0.941914301642525880, 0.941897507799451920, 0.941880711601634450, 0.941863913049115320, 0.941847112141936280, 0.941830308880139520, +0.941813503263766890, 0.941796695292860590, 0.941779884967462570, 0.941763072287614580, 0.941746257253359140, 0.941729439864738000, 0.941712620121793350, 0.941695798024567150, +0.941678973573101370, 0.941662146767438200, 0.941645317607619380, 0.941628486093687540, 0.941611652225684550, 0.941594816003652360, 0.941577977427633160, 0.941561136497669040, +0.941544293213802060, 0.941527447576074320, 0.941510599584527650, 0.941493749239204810, 0.941476896540147660, 0.941460041487398150, 0.941443184080998700, 0.941426324320991160, +0.941409462207417840, 0.941392597740320800, 0.941375730919742030, 0.941358861745724250, 0.941341990218309330, 0.941325116337539350, 0.941308240103456710, 0.941291361516103380, +0.941274480575521650, 0.941257597281753400, 0.941240711634841460, 0.941223823634827820, 0.941206933281754530, 0.941190040575664020, 0.941173145516598250, 0.941156248104599750, +0.941139348339710580, 0.941122446221972720, 0.941105541751429130, 0.941088634928121560, 0.941071725752092520, 0.941054814223384110, 0.941037900342038600, 0.941020984108098420, +0.941004065521605760, 0.940987144582602690, 0.940970221291131950, 0.940953295647235730, 0.940936367650956340, 0.940919437302335960, 0.940902504601416890, 0.940885569548241650, +0.940868632142852210, 0.940851692385291430, 0.940834750275601480, 0.940817805813824680, 0.940800859000003320, 0.940783909834179810, 0.940766958316396450, 0.940750004446695760, +0.940733048225119830, 0.940716089651711500, 0.940699128726512960, 0.940682165449566620, 0.940665199820914900, 0.940648231840600090, 0.940631261508664720, 0.940614288825150970, +0.940597313790101700, 0.940580336403559200, 0.940563356665565900, 0.940546374576164080, 0.940529390135396490, 0.940512403343305330, 0.940495414199933100, 0.940478422705322110, +0.940461428859515450, 0.940444432662555060, 0.940427434114483710, 0.940410433215343680, 0.940393429965177610, 0.940376424364028020, 0.940359416411937320, 0.940342406108947700, +0.940325393455102470, 0.940308378450443790, 0.940291361095014100, 0.940274341388856020, 0.940257319332012060, 0.940240294924524770, 0.940223268166436530, 0.940206239057790330, +0.940189207598628670, 0.940172173788993870, 0.940155137628928660, 0.940138099118475570, 0.940121058257677330, 0.940104015046576370, 0.940086969485215080, 0.940069921573636780, +0.940052871311883530, 0.940035818699998190, 0.940018763738023290, 0.940001706426001450, 0.939984646763975310, 0.939967584751987610, 0.939950520390080650, 0.939933453678297610, +0.939916384616681030, 0.939899313205273530, 0.939882239444117640, 0.939865163333256200, 0.939848084872731860, 0.939831004062587020, 0.939813920902864860, 0.939796835393608030, +0.939779747534859040, 0.939762657326660760, 0.939745564769055690, 0.939728469862086800, 0.939711372605796740, 0.939694273000228010, 0.939677171045423810, 0.939660066741426660, +0.939642960088279410, 0.939625851086024810, 0.939608739734705490, 0.939591626034364300, 0.939574509985043770, 0.939557391586787300, 0.939540270839637310, 0.939523147743636770, +0.939506022298828180, 0.939488894505254630, 0.939471764362958870, 0.939454631871983640, 0.939437497032371560, 0.939420359844166050, 0.939403220307409530, 0.939386078422145050, +0.939368934188415380, 0.939351787606263370, 0.939334638675731970, 0.939317487396863830, 0.939300333769701790, 0.939283177794289160, 0.939266019470668570, 0.939248858798882870, +0.939231695778975140, 0.939214530410988120, 0.939197362694964790, 0.939180192630947760, 0.939163020218980570, 0.939145845459105840, 0.939128668351366440, 0.939111488895805310, +0.939094307092465550, 0.939077122941390010, 0.939059936442621650, 0.939042747596203210, 0.939025556402178110, 0.939008362860589200, 0.938991166971479330, 0.938973968734891580, +0.938956768150868930, 0.938939565219454210, 0.938922359940690400, 0.938905152314621020, 0.938887942341288690, 0.938870730020736510, 0.938853515353007540, 0.938836298338144750, +0.938819078976191210, 0.938801857267190010, 0.938784633211183880, 0.938767406808216460, 0.938750178058330500, 0.938732946961569060, 0.938715713517975340, 0.938698477727592300, +0.938681239590463010, 0.938663999106630680, 0.938646756276138030, 0.938629511099028810, 0.938612263575345770, 0.938595013705132100, 0.938577761488430970, 0.938560506925285360, +0.938543250015738460, 0.938525990759833120, 0.938508729157613190, 0.938491465209121410, 0.938474198914400980, 0.938456930273494970, 0.938439659286446680, 0.938422385953299300, +0.938405110274095900, 0.938387832248879450, 0.938370551877693690, 0.938353269160581480, 0.938335984097586230, 0.938318696688751010, 0.938301406934119010, 0.938284114833733420, +0.938266820387637650, 0.938249523595874550, 0.938232224458487860, 0.938214922975520560, 0.938197619147016050, 0.938180312973017520, 0.938163004453568150, 0.938145693588711250, +0.938128380378489890, 0.938111064822947820, 0.938093746922128100, 0.938076426676074050, 0.938059104084828840, 0.938041779148436010, 0.938024451866938610, 0.938007122240380190, +0.937989790268803580, 0.937972455952252760, 0.937955119290770910, 0.937937780284401220, 0.937920438933187000, 0.937903095237171750, 0.937885749196398780, 0.937868400810911160, +0.937851050080752760, 0.937833697005966750, 0.937816341586596550, 0.937798983822685450, 0.937781623714276980, 0.937764261261414320, 0.937746896464141110, 0.937729529322500310, +0.937712159836536000, 0.937694788006291250, 0.937677413831809580, 0.937660037313134410, 0.937642658450309030, 0.937625277243377080, 0.937607893692381960, 0.937590507797366750, +0.937573119558375630, 0.937555728975451700, 0.937538336048638450, 0.937520940777979320, 0.937503543163517810, 0.937486143205297550, 0.937468740903361520, 0.937451336257754010, +0.937433929268518100, 0.937416519935697410, 0.937399108259335480, 0.937381694239475700, 0.937364277876161720, 0.937346859169436940, 0.937329438119344880, 0.937312014725929400, +0.937294588989233900, 0.937277160909302020, 0.937259730486177170, 0.937242297719902970, 0.937224862610523070, 0.937207425158080980, 0.937189985362620100, 0.937172543224184530, +0.937155098742817550, 0.937137651918562800, 0.937120202751464020, 0.937102751241564720, 0.937085297388908440, 0.937067841193538700, 0.937050382655499670, 0.937032921774834660, +0.937015458551587300, 0.936997992985801330, 0.936980525077520390, 0.936963054826788210, 0.936945582233648320, 0.936928107298144130, 0.936910630020320050, 0.936893150400219250, +0.936875668437885720, 0.936858184133362970, 0.936840697486694850, 0.936823208497924890, 0.936805717167096600, 0.936788223494254390, 0.936770727479441570, 0.936753229122701870, +0.936735728424079150, 0.936718225383617150, 0.936700720001359620, 0.936683212277350190, 0.936665702211632480, 0.936648189804250800, 0.936630675055248660, 0.936613157964669820, +0.936595638532558120, 0.936578116758957300, 0.936560592643911230, 0.936543066187463640, 0.936525537389658050, 0.936508006250538980, 0.936490472770149850, 0.936472936948534510, +0.936455398785736910, 0.936437858281800710, 0.936420315436769960, 0.936402770250688080, 0.936385222723599590, 0.936367672855548010, 0.936350120646577300, 0.936332566096731210, +0.936315009206053820, 0.936297449974588860, 0.936279888402380190, 0.936262324489471660, 0.936244758235907470, 0.936227189641731460, 0.936209618706987490, 0.936192045431719410, +0.936174469815971300, 0.936156891859786900, 0.936139311563210400, 0.936121728926285200, 0.936104143949056060, 0.936086556631566590, 0.936068966973860660, 0.936051374975982340, +0.936033780637975600, 0.936016183959884400, 0.935998584941752370, 0.935980983583624250, 0.935963379885543680, 0.935945773847554620, 0.935928165469701150, 0.935910554752027220, +0.935892941694576930, 0.935875326297394340, 0.935857708560523080, 0.935840088484007900, 0.935822466067892430, 0.935804841312220860, 0.935787214217037140, 0.935769584782385370, +0.935751953008309710, 0.935734318894853810, 0.935716682442062410, 0.935699043649979360, 0.935681402518648620, 0.935663759048114390, 0.935646113238420840, 0.935628465089611950, +0.935610814601731900, 0.935593161774824540, 0.935575506608934520, 0.935557849104105780, 0.935540189260382400, 0.935522527077808590, 0.935504862556428400, 0.935487195696286130, +0.935469526497425760, 0.935451854959891360, 0.935434181083727560, 0.935416504868978430, 0.935398826315687940, 0.935381145423900380, 0.935363462193659960, 0.935345776625010950, +0.935328088717997110, 0.935310398472663400, 0.935292705889053670, 0.935275010967212220, 0.935257313707183240, 0.935239614109010910, 0.935221912172739640, 0.935204207898413520, +0.935186501286076610, 0.935168792335773660, 0.935151081047548850, 0.935133367421446260, 0.935115651457510300, 0.935097933155785150, 0.935080212516315230, 0.935062489539144840, +0.935044764224317810, 0.935027036571879240, 0.935009306581872980, 0.934991574254343540, 0.934973839589335110, 0.934956102586892210, 0.934938363247058920, 0.934920621569879430, +0.934902877555398800, 0.934885131203660900, 0.934867382514710130, 0.934849631488590900, 0.934831878125347630, 0.934814122425024710, 0.934796364387666450, 0.934778604013317030, +0.934760841302021310, 0.934743076253823470, 0.934725308868768030, 0.934707539146899300, 0.934689767088261680, 0.934671992692899690, 0.934654215960857400, 0.934636436892179790, +0.934618655486911250, 0.934600871745095980, 0.934583085666778500, 0.934565297252003320, 0.934547506500814970, 0.934529713413257750, 0.934511917989376050, 0.934494120229214740, +0.934476320132818230, 0.934458517700230920, 0.934440712931497220, 0.934422905826661880, 0.934405096385769180, 0.934387284608863780, 0.934369470495989840, 0.934351654047192560, +0.934333835262516010, 0.934316014142005050, 0.934298190685703970, 0.934280364893657400, 0.934262536765909980, 0.934244706302505890, 0.934226873503490320, 0.934209038368907560, +0.934191200898802250, 0.934173361093218910, 0.934155518952202170, 0.934137674475796650, 0.934119827664046890, 0.934101978516997280, 0.934084127034693010, 0.934066273217178500, +0.934048417064498260, 0.934030558576696920, 0.934012697753819230, 0.933994834595909820, 0.933976969103013310, 0.933959101275174120, 0.933941231112437430, 0.933923358614847650, +0.933905483782449530, 0.933887606615287690, 0.933869727113406770, 0.933851845276851610, 0.933833961105666410, 0.933816074599896680, 0.933798185759586840, 0.933780294584781510, +0.933762401075525330, 0.933744505231863250, 0.933726607053839920, 0.933708706541500070, 0.933690803694888110, 0.933672898514049440, 0.933654990999028490, 0.933637081149870100, +0.933619168966619010, 0.933601254449320070, 0.933583337598017930, 0.933565418412757090, 0.933547496893583070, 0.933529573040540290, 0.933511646853673600, 0.933493718333027860, +0.933475787478647680, 0.933457854290578150, 0.933439918768863900, 0.933421980913549550, 0.933404040724680640, 0.933386098202301560, 0.933368153346457290, 0.933350206157192550, +0.933332256634552330, 0.933314304778581460, 0.933296350589324810, 0.933278394066827110, 0.933260435211133550, 0.933242474022288990, 0.933224510500338280, 0.933206544645326260, +0.933188576457297910, 0.933170605936298080, 0.933152633082371400, 0.933134657895563490, 0.933116680375918990, 0.933098700523482650, 0.933080718338299640, 0.933062733820414820, +0.933044746969873160, 0.933026757786719730, 0.933008766270998930, 0.932990772422756630, 0.932972776242037450, 0.932954777728886240, 0.932936776883348080, 0.932918773705468050, +0.932900768195291000, 0.932882760352861770, 0.932864750178225900, 0.932846737671428230, 0.932828722832513720, 0.932810705661527350, 0.932792686158514180, 0.932774664323519410, +0.932756640156587880, 0.932738613657764450, 0.932720584827094860, 0.932702553664623730, 0.932684520170396270, 0.932666484344457540, 0.932648446186852500, 0.932630405697626450, +0.932612362876824360, 0.932594317724490970, 0.932576270240672130, 0.932558220425412700, 0.932540168278757630, 0.932522113800752230, 0.932504056991441450, 0.932485997850870610, +0.932467936379084430, 0.932449872576128660, 0.932431806442048260, 0.932413737976888310, 0.932395667180694110, 0.932377594053510620, 0.932359518595383240, 0.932341440806357060, +0.932323360686476920, 0.932305278235788680, 0.932287193454337300, 0.932269106342167860, 0.932251016899325770, 0.932232925125856090, 0.932214831021804020, 0.932196734587214970, +0.932178635822133780, 0.932160534726606200, 0.932142431300677420, 0.932124325544392510, 0.932106217457796760, 0.932088107040935480, 0.932069994293853840, 0.932051879216597050, +0.932033761809210830, 0.932015642071740150, 0.931997520004230420, 0.931979395606726930, 0.931961268879274880, 0.931943139821919670, 0.931925008434706600, 0.931906874717680740, +0.931888738670887950, 0.931870600294373410, 0.931852459588182300, 0.931834316552360040, 0.931816171186952040, 0.931798023492003580, 0.931779873467559640, 0.931761721113666510, +0.931743566430368930, 0.931725409417712540, 0.931707250075742620, 0.931689088404504480, 0.931670924404043750, 0.931652758074405620, 0.931634589415635260, 0.931616418427778760, +0.931598245110881300, 0.931580069464988170, 0.931561891490144900, 0.931543711186396780, 0.931525528553789560, 0.931507343592368420, 0.931489156302178540, 0.931470966683266230, +0.931452774735676340, 0.931434580459454710, 0.931416383854646420, 0.931398184921297330, 0.931379983659452740, 0.931361780069157820, 0.931343574150458870, 0.931325365903400870, +0.931307155328029550, 0.931288942424390310, 0.931270727192528680, 0.931252509632490290, 0.931234289744320540, 0.931216067528064850, 0.931197842983769180, 0.931179616111479040, +0.931161386911239840, 0.931143155383097110, 0.931124921527096470, 0.931106685343283560, 0.931088446831704000, 0.931070205992402980, 0.931051962825426680, 0.931033717330820520, +0.931015469508630120, 0.930997219358901010, 0.930978966881678920, 0.930960712077009260, 0.930942454944937660, 0.930924195485510090, 0.930905933698772170, 0.930887669584769320, +0.930869403143547380, 0.930851134375151880, 0.930832863279628550, 0.930814589857023030, 0.930796314107380730, 0.930778036030748050, 0.930759755627170170, 0.930741472896692960, +0.930723187839362030, 0.930704900455223140, 0.930686610744322020, 0.930668318706704080, 0.930650024342415620, 0.930631727651502150, 0.930613428634009310, 0.930595127289982840, +0.930576823619468700, 0.930558517622512400, 0.930540209299159820, 0.930521898649456450, 0.930503585673448600, 0.930485270371181780, 0.930466952742701860, 0.930448632788054450, +0.930430310507285530, 0.930411985900440830, 0.930393658967566100, 0.930375329708706960, 0.930356998123909820, 0.930338664213220200, 0.930320327976683850, 0.930301989414346720, +0.930283648526254670, 0.930265305312453440, 0.930246959772988660, 0.930228611907906730, 0.930210261717253300, 0.930191909201074310, 0.930173554359415400, 0.930155197192322760, +0.930136837699842010, 0.930118475882019120, 0.930100111738899840, 0.930081745270530560, 0.930063376476956920, 0.930045005358224870, 0.930026631914380290, 0.930008256145469110, +0.929989878051537320, 0.929971497632630760, 0.929953114888795170, 0.929934729820077190, 0.929916342426522320, 0.929897952708176660, 0.929879560665086040, 0.929861166297296540, +0.929842769604854120, 0.929824370587804430, 0.929805969246194190, 0.929787565580069030, 0.929769159589474930, 0.929750751274457940, 0.929732340635064050, 0.929713927671339310, +0.929695512383329810, 0.929677094771081070, 0.929658674834640040, 0.929640252574052250, 0.929621827989363880, 0.929603401080621010, 0.929584971847869480, 0.929566540291155600, +0.929548106410525100, 0.929529670206024620, 0.929511231677699890, 0.929492790825597210, 0.929474347649762440, 0.929455902150241870, 0.929437454327081470, 0.929419004180327520, +0.929400551710025670, 0.929382096916222870, 0.929363639798964750, 0.929345180358297500, 0.929326718594267300, 0.929308254506920340, 0.929289788096302800, 0.929271319362460660, +0.929252848305439970, 0.929234374925287490, 0.929215899222049170, 0.929197421195770980, 0.929178940846499210, 0.929160458174280170, 0.929141973179159920, 0.929123485861184430, +0.929104996220400550, 0.929086504256854240, 0.929068009970591580, 0.929049513361658970, 0.929031014430102610, 0.929012513175968560, 0.928994009599303340, 0.928975503700152800, +0.928956995478563700, 0.928938484934582200, 0.928919972068254500, 0.928901456879626890, 0.928882939368745550, 0.928864419535656900, 0.928845897380407240, 0.928827372903042510, +0.928808846103609590, 0.928790316982154640, 0.928771785538723860, 0.928753251773363650, 0.928734715686120320, 0.928716177277040140, 0.928697636546169210, 0.928679093493554490, +0.928660548119242040, 0.928642000423278270, 0.928623450405709480, 0.928604898066582090, 0.928586343405942480, 0.928567786423836970, 0.928549227120311630, 0.928530665495413520, +0.928512101549188840, 0.928493535281683880, 0.928474966692945050, 0.928456395783018860, 0.928437822551951620, 0.928419246999789500, 0.928400669126579590, 0.928382088932368070, +0.928363506417201330, 0.928344921581125800, 0.928326334424187880, 0.928307744946434200, 0.928289153147911160, 0.928270559028664950, 0.928251962588742650, 0.928233363828190440, +0.928214762747054720, 0.928196159345382240, 0.928177553623219300, 0.928158945580612400, 0.928140335217608300, 0.928121722534252850, 0.928103107530593550, 0.928084490206676490, +0.928065870562548190, 0.928047248598255160, 0.928028624313844030, 0.928009997709361320, 0.927991368784853330, 0.927972737540367240, 0.927954103975949240, 0.927935468091646070, +0.927916829887504240, 0.927898189363570270, 0.927879546519890800, 0.927860901356512560, 0.927842253873481740, 0.927823604070845520, 0.927804951948650310, 0.927786297506942750, +0.927767640745769450, 0.927748981665177050, 0.927730320265212180, 0.927711656545921250, 0.927692990507351430, 0.927674322149549150, 0.927655651472561020, 0.927636978476433890, +0.927618303161214190, 0.927599625526948750, 0.927580945573684310, 0.927562263301467180, 0.927543578710344650, 0.927524891800363240, 0.927506202571569570, 0.927487511024010390, +0.927468817157732440, 0.927450120972782450, 0.927431422469207070, 0.927412721647052910, 0.927394018506367270, 0.927375313047196560, 0.927356605269587630, 0.927337895173587110, +0.927319182759241860, 0.927300468026598600, 0.927281750975703980, 0.927263031606605170, 0.927244309919348920, 0.927225585913981850, 0.927206859590550710, 0.927188130949102570, +0.927169399989684060, 0.927150666712342030, 0.927131931117123000, 0.927113193204074370, 0.927094452973242890, 0.927075710424675290, 0.927056965558418320, 0.927038218374519050, +0.927019468873024110, 0.927000717053980570, 0.926981962917434950, 0.926963206463434660, 0.926944447692026440, 0.926925686603257030, 0.926906923197173490, 0.926888157473822580, +0.926869389433251260, 0.926850619075506140, 0.926831846400634870, 0.926813071408683960, 0.926794294099700270, 0.926775514473730970, 0.926756732530822800, 0.926737948271022850, +0.926719161694378070, 0.926700372800934980, 0.926681581590741320, 0.926662788063843720, 0.926643992220289150, 0.926625194060124560, 0.926606393583397030, 0.926587590790153400, +0.926568785680440540, 0.926549978254306070, 0.926531168511796730, 0.926512356452959370, 0.926493542077841070, 0.926474725386489010, 0.926455906378950140, 0.926437085055271450, +0.926418261415499770, 0.926399435459682730, 0.926380607187867080, 0.926361776600100000, 0.926342943696428330, 0.926324108476899390, 0.926305270941560230, 0.926286431090457830, +0.926267588923639030, 0.926248744441151570, 0.926229897643042310, 0.926211048529358320, 0.926192197100146660, 0.926173343355454430, 0.926154487295328900, 0.926135628919816930, +0.926116768228966050, 0.926097905222823310, 0.926079039901435920, 0.926060172264850820, 0.926041302313115320, 0.926022430046276490, 0.926003555464381730, 0.925984678567477680, +0.925965799355612180, 0.925946917828832320, 0.925928033987185040, 0.925909147830717760, 0.925890259359477550, 0.925871368573511820, 0.925852475472867530, 0.925833580057591750, +0.925814682327732340, 0.925795782283336250, 0.925776879924450790, 0.925757975251123020, 0.925739068263400360, 0.925720158961329980, 0.925701247344958960, 0.925682333414335030, +0.925663417169505400, 0.925644498610517120, 0.925625577737417600, 0.925606654550254260, 0.925587729049074160, 0.925568801233924820, 0.925549871104853090, 0.925530938661907050, +0.925512003905133550, 0.925493066834580210, 0.925474127450294120, 0.925455185752322660, 0.925436241740713370, 0.925417295415512990, 0.925398346776769800, 0.925379395824530770, +0.925360442558843200, 0.925341486979754490, 0.925322529087312050, 0.925303568881563400, 0.925284606362555720, 0.925265641530336300, 0.925246674384953010, 0.925227704926453120, +0.925208733154883830, 0.925189759070292880, 0.925170782672727450, 0.925151803962235060, 0.925132822938863120, 0.925113839602658920, 0.925094853953670300, 0.925075865991944580, +0.925056875717529260, 0.925037883130471750, 0.925018888230819460, 0.924999891018620010, 0.924980891493920490, 0.924961889656769070, 0.924942885507212930, 0.924923879045299600, +0.924904870271076600, 0.924885859184591320, 0.924866845785891400, 0.924847830075024470, 0.924828812052037600, 0.924809791716978970, 0.924790769069895880, 0.924771744110835850, +0.924752716839846500, 0.924733687256975360, 0.924714655362270040, 0.924695621155777970, 0.924676584637546650, 0.924657545807624160, 0.924638504666057680, 0.924619461212895070, +0.924600415448183830, 0.924581367371971500, 0.924562316984305690, 0.924543264285233810, 0.924524209274804170, 0.924505151953063930, 0.924486092320060850, 0.924467030375842440, +0.924447966120456540, 0.924428899553950690, 0.924409830676372610, 0.924390759487769720, 0.924371685988190080, 0.924352610177681330, 0.924333532056291100, 0.924314451624067000, +0.924295368881056680, 0.924276283827308090, 0.924257196462868300, 0.924238106787785950, 0.924219014802108330, 0.924199920505883180, 0.924180823899158230, 0.924161724981981240, +0.924142623754399820, 0.924123520216461940, 0.924104414368214890, 0.924085306209707190, 0.924066195740986140, 0.924047082962099700, 0.924027967873095490, 0.924008850474021370, +0.923989730764925080, 0.923970608745854570, 0.923951484416857150, 0.923932357777981330, 0.923913228829274620, 0.923894097570784890, 0.923874964002559860, 0.923855828124647390, +0.923836689937095450, 0.923817549439951420, 0.923798406633263850, 0.923779261517080230, 0.923760114091448430, 0.923740964356416390, 0.923721812312031990, 0.923702657958342940, +0.923683501295397340, 0.923664342323242680, 0.923645181041927390, 0.923626017451499190, 0.923606851552005950, 0.923587683343495610, 0.923568512826016040, 0.923549339999615190, +0.923530164864341030, 0.923510987420241070, 0.923491807667364050, 0.923472625605757380, 0.923453441235469240, 0.923434254556547480, 0.923415065569040070, 0.923395874272995080, +0.923376680668460010, 0.923357484755483520, 0.923338286534113320, 0.923319086004397490, 0.923299883166383890, 0.923280678020120590, 0.923261470565655660, 0.923242260803036950, +0.923223048732312310, 0.923203834353530370, 0.923184617666738870, 0.923165398671985770, 0.923146177369319140, 0.923126953758787170, 0.923107727840437820, 0.923088499614318710, +0.923069269080478820, 0.923050036238965640, 0.923030801089827490, 0.923011563633112210, 0.922992323868868090, 0.922973081797143100, 0.922953837417985530, 0.922934590731442910, +0.922915341737564180, 0.922896090436397200, 0.922876836827989820, 0.922857580912390450, 0.922838322689647160, 0.922819062159808020, 0.922799799322921220, 0.922780534179034610, +0.922761266728196920, 0.922741996970456110, 0.922722724905860380, 0.922703450534457680, 0.922684173856296530, 0.922664894871424890, 0.922645613579890610, 0.922626329981742650, +0.922607044077028870, 0.922587755865797550, 0.922568465348096780, 0.922549172523974840, 0.922529877393480020, 0.922510579956660530, 0.922491280213564190, 0.922471978164239980, +0.922452673808735860, 0.922433367147100000, 0.922414058179380820, 0.922394746905626390, 0.922375433325885120, 0.922356117440204960, 0.922336799248634880, 0.922317478751222720, +0.922298155948016900, 0.922278830839065700, 0.922259503424417430, 0.922240173704120370, 0.922220841678222940, 0.922201507346772980, 0.922182170709819670, 0.922162831767410870, +0.922143490519594990, 0.922124146966420420, 0.922104801107935470, 0.922085452944188530, 0.922066102475227910, 0.922046749701101790, 0.922027394621859120, 0.922008037237547870, +0.921988677548216560, 0.921969315553913590, 0.921949951254687370, 0.921930584650586190, 0.921911215741658240, 0.921891844527952590, 0.921872471009517300, 0.921853095186400910, +0.921833717058651690, 0.921814336626318290, 0.921794953889448990, 0.921775568848092200, 0.921756181502296320, 0.921736791852110220, 0.921717399897582170, 0.921698005638760700, +0.921678609075694100, 0.921659210208431000, 0.921639809037019920, 0.921620405561509260, 0.921600999781947320, 0.921581591698383160, 0.921562181310865090, 0.921542768619441510, +0.921523353624160930, 0.921503936325072100, 0.921484516722223420, 0.921465094815663080, 0.921445670605440250, 0.921426244091603340, 0.921406815274200870, 0.921387384153281250, +0.921367950728893210, 0.921348515001085390, 0.921329076969906180, 0.921309636635403880, 0.921290193997627900, 0.921270749056626540, 0.921251301812448190, 0.921231852265141590, +0.921212400414755380, 0.921192946261338190, 0.921173489804938180, 0.921154031045604890, 0.921134569983386500, 0.921115106618331740, 0.921095640950489130, 0.921076172979907510, +0.921056702706635420, 0.921037230130721470, 0.921017755252214300, 0.920998278071162970, 0.920978798587615890, 0.920959316801621910, 0.920939832713229540, 0.920920346322487650, +0.920900857629444960, 0.920881366634150100, 0.920861873336651370, 0.920842377736998400, 0.920822879835239470, 0.920803379631423340, 0.920783877125598730, 0.920764372317814490, +0.920744865208119270, 0.920725355796561560, 0.920705844083190780, 0.920686330068055340, 0.920666813751204180, 0.920647295132685950, 0.920627774212549490, 0.920608250990843540, +0.920588725467617050, 0.920569197642918340, 0.920549667516797010, 0.920530135089301590, 0.920510600360480710, 0.920491063330383330, 0.920471523999058410, 0.920451982366554570, +0.920432438432920770, 0.920412892198205550, 0.920393343662458510, 0.920373792825728070, 0.920354239688063070, 0.920334684249512590, 0.920315126510125370, 0.920295566469950250, +0.920276004129035980, 0.920256439487431970, 0.920236872545186930, 0.920217303302349630, 0.920197731758969130, 0.920178157915094270, 0.920158581770774030, 0.920139003326057360, +0.920119422580992770, 0.920099839535630020, 0.920080254190017710, 0.920060666544204710, 0.920041076598240080, 0.920021484352172680, 0.920001889806051580, 0.919982292959925510, +0.919962693813843990, 0.919943092367855760, 0.919923488622009790, 0.919903882576355030, 0.919884274230940660, 0.919864663585815530, 0.919845050641028840, 0.919825435396629090, +0.919805817852666130, 0.919786198009188590, 0.919766575866245550, 0.919746951423886180, 0.919727324682159340, 0.919707695641114210, 0.919688064300799860, 0.919668430661264910, +0.919648794722559340, 0.919629156484731760, 0.919609515947831250, 0.919589873111906990, 0.919570227977008050, 0.919550580543183500, 0.919530930810482210, 0.919511278778953890, +0.919491624448647400, 0.919471967819611820, 0.919452308891896330, 0.919432647665550110, 0.919412984140622220, 0.919393318317161980, 0.919373650195218000, 0.919353979774840240, +0.919334307056077550, 0.919314632038979010, 0.919294954723594020, 0.919275275109971530, 0.919255593198160970, 0.919235908988211390, 0.919216222480171650, 0.919196533674091710, +0.919176842570020410, 0.919157149168007060, 0.919137453468100830, 0.919117755470350910, 0.919098055174806690, 0.919078352581516930, 0.919058647690531690, 0.919038940501899710, +0.919019231015670510, 0.918999519231893160, 0.918979805150617060, 0.918960088771891390, 0.918940370095765570, 0.918920649122288440, 0.918900925851510060, 0.918881200283479300, +0.918861472418245560, 0.918841742255858240, 0.918822009796366410, 0.918802275039819700, 0.918782537986266860, 0.918762798635758050, 0.918743056988342240, 0.918723313044068730, +0.918703566802987040, 0.918683818265146450, 0.918664067430596250, 0.918644314299385870, 0.918624558871564360, 0.918604801147181790, 0.918585041126287250, 0.918565278808930130, +0.918545514195159730, 0.918525747285025670, 0.918505978078577150, 0.918486206575863660, 0.918466432776934400, 0.918446656681839340, 0.918426878290627640, 0.918407097603348820, +0.918387314620052190, 0.918367529340787250, 0.918347741765603520, 0.918327951894550080, 0.918308159727677100, 0.918288365265033770, 0.918268568506669490, 0.918248769452633780, +0.918228968102976160, 0.918209164457746140, 0.918189358516993240, 0.918169550280766520, 0.918149739749116290, 0.918129926922091720, 0.918110111799742330, 0.918090294382117640, +0.918070474669267280, 0.918050652661240750, 0.918030828358087470, 0.918011001759856840, 0.917991172866599040, 0.917971341678363360, 0.917951508195199220, 0.917931672417156450, +0.917911834344284360, 0.917891993976632790, 0.917872151314250820, 0.917852306357188840, 0.917832459105496160, 0.917812609559222280, 0.917792757718416840, 0.917772903583129570, +0.917753047153410000, 0.917733188429307840, 0.917713327410872300, 0.917693464098153780, 0.917673598491201670, 0.917653730590065610, 0.917633860394795110, 0.917613987905440020, +0.917594113122049970, 0.917574236044674250, 0.917554356673363270, 0.917534475008166430, 0.917514591049133470, 0.917494704796314010, 0.917474816249757690, 0.917454925409514340, +0.917435032275633830, 0.917415136848165220, 0.917395239127159260, 0.917375339112665110, 0.917355436804732640, 0.917335532203411570, 0.917315625308751660, 0.917295716120802630, +0.917275804639614440, 0.917255890865236290, 0.917235974797718790, 0.917216056437111350, 0.917196135783463820, 0.917176212836825930, 0.917156287597247430, 0.917136360064778280, +0.917116430239467870, 0.917096498121366730, 0.917076563710524370, 0.917056627006990640, 0.917036688010815280, 0.917016746722048250, 0.916996803140739280, 0.916976857266938340, +0.916956909100694830, 0.916936958642059490, 0.916917005891081720, 0.916897050847811480, 0.916877093512298620, 0.916857133884593000, 0.916837171964744460, 0.916817207752802730, +0.916797241248818340, 0.916777272452840800, 0.916757301364920170, 0.916737327985106210, 0.916717352313448970, 0.916697374349998320, 0.916677394094804200, 0.916657411547916250, +0.916637426709385190, 0.916617439579260450, 0.916597450157592200, 0.916577458444430390, 0.916557464439824780, 0.916537468143825640, 0.916517469556482720, 0.916497468677845870, +0.916477465507965720, 0.916457460046891770, 0.916437452294674330, 0.916417442251363120, 0.916397429917008340, 0.916377415291660060, 0.916357398375367780, 0.916337379168182480, +0.916317357670153650, 0.916297333881331390, 0.916277307801765860, 0.916257279431507140, 0.916237248770605080, 0.916217215819109980, 0.916197180577071450, 0.916177143044540340, +0.916157103221566290, 0.916137061108199590, 0.916117016704490190, 0.916096970010488290, 0.916076921026243940, 0.916056869751807330, 0.916036816187228100, 0.916016760332557300, +0.915996702187844460, 0.915976641753139980, 0.915956579028493810, 0.915936514013956260, 0.915916446709577390, 0.915896377115407060, 0.915876305231496210, 0.915856231057894490, +0.915836154594652290, 0.915816075841819570, 0.915795994799446730, 0.915775911467583970, 0.915755825846281350, 0.915735737935588820, 0.915715647735557360, 0.915695555246236690, +0.915675460467677230, 0.915655363399929030, 0.915635264043042520, 0.915615162397067750, 0.915595058462054800, 0.915574952238054520, 0.915554843725116860, 0.915534732923292020, +0.915514619832630490, 0.915494504453182260, 0.915474386784997930, 0.915454266828127470, 0.915434144582621070, 0.915414020048529680, 0.915393893225903250, 0.915373764114792100, +0.915353632715246500, 0.915333499027316750, 0.915313363051053370, 0.915293224786506540, 0.915273084233726330, 0.915252941392763700, 0.915232796263668710, 0.915212648846491780, +0.915192499141283200, 0.915172347148093370, 0.915152192866972690, 0.915132036297971240, 0.915111877441139980, 0.915091716296528970, 0.915071552864188730, 0.915051387144169670, +0.915031219136522080, 0.915011048841296470, 0.914990876258543140, 0.914970701388312380, 0.914950524230655150, 0.914930344785621630, 0.914910163053262340, 0.914889979033627570, +0.914869792726767830, 0.914849604132733530, 0.914829413251575410, 0.914809220083343200, 0.914789024628088420, 0.914768826885861140, 0.914748626856711660, 0.914728424540690700, +0.914708219937848680, 0.914688013048235990, 0.914667803871903050, 0.914647592408900920, 0.914627378659279790, 0.914607162623090160, 0.914586944300382680, 0.914566723691207840, +0.914546500795616170, 0.914526275613658290, 0.914506048145384390, 0.914485818390845640, 0.914465586350092450, 0.914445352023175230, 0.914425115410144600, 0.914404876511051180, +0.914384635325945610, 0.914364391854878170, 0.914344146097899930, 0.914323898055061420, 0.914303647726413260, 0.914283395112005850, 0.914263140211890040, 0.914242883026116230, +0.914222623554735380, 0.914202361797797570, 0.914182097755354190, 0.914161831427455550, 0.914141562814152380, 0.914121291915495180, 0.914101018731534930, 0.914080743262322030, +0.914060465507907200, 0.914040185468340980, 0.914019903143674650, 0.913999618533958500, 0.913979331639243390, 0.913959042459579820, 0.913938750995018760, 0.913918457245610720, +0.913898161211406320, 0.913877862892456760, 0.913857562288812540, 0.913837259400524520, 0.913816954227643200, 0.913796646770219660, 0.913776337028304410, 0.913756025001948300, +0.913735710691201850, 0.913715394096116350, 0.913695075216742540, 0.913674754053130920, 0.913654430605332470, 0.913634104873397910, 0.913613776857378100, 0.913593446557323770, +0.913573113973285560, 0.913552779105314960, 0.913532441953462280, 0.913512102517778590, 0.913491760798314620, 0.913471416795121230, 0.913451070508249360, 0.913430721937749430, +0.913410371083673070, 0.913390017946070780, 0.913369662524993410, 0.913349304820491930, 0.913328944832617060, 0.913308582561420000, 0.913288218006951370, 0.913267851169261900, +0.913247482048403110, 0.913227110644425630, 0.913206736957380420, 0.913186360987318310, 0.913165982734290280, 0.913145602198347390, 0.913125219379540050, 0.913104834277920110, +0.913084446893537960, 0.913064057226444790, 0.913043665276691450, 0.913023271044328900, 0.913002874529408310, 0.912982475731980440, 0.912962074652096000, 0.912941671289806740, +0.912921265645163290, 0.912900857718216720, 0.912880447509017980, 0.912860035017618140, 0.912839620244068170, 0.912819203188419250, 0.912798783850721880, 0.912778362231027930, +0.912757938329388120, 0.912737512145853410, 0.912717083680474880, 0.912696652933303710, 0.912676219904390850, 0.912655784593787160, 0.912635347001544360, 0.912614907127713090, +0.912594464972344640, 0.912574020535489970, 0.912553573817200370, 0.912533124817526690, 0.912512673536520320, 0.912492219974231800, 0.912471764130713180, 0.912451306006015090, +0.912430845600188830, 0.912410382913285360, 0.912389917945355950, 0.912369450696451700, 0.912348981166623880, 0.912328509355923250, 0.912308035264401740, 0.912287558892110110, +0.912267080239099530, 0.912246599305421290, 0.912226116091126580, 0.912205630596266580, 0.912185142820892140, 0.912164652765055210, 0.912144160428806640, 0.912123665812197610, +0.912103168915279430, 0.912082669738103370, 0.912062168280720620, 0.912041664543182470, 0.912021158525539780, 0.912000650227844600, 0.911980139650147680, 0.911959626792500530, +0.911939111654954230, 0.911918594237560280, 0.911898074540369750, 0.911877552563433610, 0.911857028306804040, 0.911836501770531880, 0.911815972954668430, 0.911795441859265090, +0.911774908484373150, 0.911754372830043900, 0.911733834896328750, 0.911713294683278660, 0.911692752190945700, 0.911672207419380820, 0.911651660368635430, 0.911631111038760930, +0.911610559429808620, 0.911590005541829900, 0.911569449374876270, 0.911548890928998490, 0.911528330204248950, 0.911507767200678610, 0.911487201918338760, 0.911466634357280920, +0.911446064517556500, 0.911425492399217000, 0.911404918002313380, 0.911384341326897720, 0.911363762373021300, 0.911343181140735430, 0.911322597630091710, 0.911302011841141350, +0.911281423773936060, 0.911260833428527260, 0.911240240804965910, 0.911219645903304290, 0.911199048723593700, 0.911178449265885320, 0.911157847530230990, 0.911137243516681910, +0.911116637225289790, 0.911096028656106060, 0.911075417809181890, 0.911054804684569450, 0.911034189282320160, 0.911013571602485310, 0.910992951645116510, 0.910972329410265400, +0.910951704897983380, 0.910931078108321860, 0.910910449041332890, 0.910889817697067890, 0.910869184075578260, 0.910848548176915740, 0.910827910001131840, 0.910807269548278060, +0.910786626818406280, 0.910765981811567430, 0.910745334527814030, 0.910724684967197380, 0.910704033129768890, 0.910683379015580390, 0.910662722624683400, 0.910642063957129650, +0.910621403012970340, 0.910600739792257970, 0.910580074295043620, 0.910559406521379120, 0.910538736471316220, 0.910518064144906330, 0.910497389542201390, 0.910476712663252920, +0.910456033508112330, 0.910435352076832020, 0.910414668369463280, 0.910393982386057840, 0.910373294126667560, 0.910352603591343960, 0.910331910780138860, 0.910311215693104030, +0.910290518330290840, 0.910269818691751610, 0.910249116777537840, 0.910228412587701370, 0.910207706122293850, 0.910186997381366990, 0.910166286364972650, 0.910145573073162240, +0.910124857505988370, 0.910104139663502230, 0.910083419545755780, 0.910062697152800750, 0.910041972484688990, 0.910021245541472350, 0.910000516323202560, 0.909979784829931140, +0.909959051061710600, 0.909938315018592460, 0.909917576700628450, 0.909896836107870530, 0.909876093240370660, 0.909855348098180360, 0.909834600681351470, 0.909813850989936390, +0.909793099023986640, 0.909772344783554180, 0.909751588268690850, 0.909730829479448610, 0.909710068415879200, 0.909689305078034690, 0.909668539465966490, 0.909647771579727320, +0.909627001419368810, 0.909606228984942700, 0.909585454276501060, 0.909564677294095740, 0.909543898037778800, 0.909523116507602090, 0.909502332703617130, 0.909481546625876880, +0.909460758274432620, 0.909439967649336540, 0.909419174750640490, 0.909398379578396530, 0.909377582132656630, 0.909356782413472400, 0.909335980420896580, 0.909315176154980810, +0.909294369615777140, 0.909273560803337430, 0.909252749717713860, 0.909231936358958490, 0.909211120727123290, 0.909190302822259880, 0.909169482644420990, 0.909148660193658480, +0.909127835470024290, 0.909107008473570620, 0.909086179204349310, 0.909065347662412650, 0.909044513847812490, 0.909023677760600780, 0.909002839400830150, 0.908981998768552570, +0.908961155863819870, 0.908940310686684350, 0.908919463237197970, 0.908898613515413010, 0.908877761521381110, 0.908856907255155220, 0.908836050716786970, 0.908815191906328760, +0.908794330823832430, 0.908773467469350280, 0.908752601842934490, 0.908731733944637240, 0.908710863774510160, 0.908689991332606420, 0.908669116618977650, 0.908648239633676140, +0.908627360376753960, 0.908606478848263400, 0.908585595048256640, 0.908564708976785540, 0.908543820633903040, 0.908522930019661000, 0.908502037134111600, 0.908481141977307120, +0.908460244549299740, 0.908439344850141770, 0.908418442879885490, 0.908397538638582750, 0.908376632126286500, 0.908355723343048590, 0.908334812288921540, 0.908313898963957310, +0.908292983368208410, 0.908272065501727010, 0.908251145364565420, 0.908230222956775690, 0.908209298278410680, 0.908188371329522460, 0.908167442110163430, 0.908146510620385650, +0.908125576860241650, 0.908104640829783700, 0.908083702529063790, 0.908062761958134960, 0.908041819117049180, 0.908020874005858960, 0.907999926624616480, 0.907978976973374150, +0.907958025052184480, 0.907937070861099760, 0.907916114400171840, 0.907895155669454110, 0.907874194668998550, 0.907853231398857430, 0.907832265859083280, 0.907811298049728380, +0.907790327970845250, 0.907769355622486400, 0.907748381004703670, 0.907727404117550370, 0.907706424961078670, 0.907685443535340860, 0.907664459840389350, 0.907643473876276750, +0.907622485643055590, 0.907601495140777700, 0.907580502369496500, 0.907559507329263940, 0.907538510020132750, 0.907517510442155230, 0.907496508595383890, 0.907475504479871350, +0.907454498095670030, 0.907433489442832090, 0.907412478521410830, 0.907391465331458310, 0.907370449873027170, 0.907349432146169810, 0.907328412150938960, 0.907307389887387130, +0.907286365355566390, 0.907265338555530150, 0.907244309487330480, 0.907223278151020110, 0.907202244546651440, 0.907181208674277320, 0.907160170533950040, 0.907139130125722450, +0.907118087449646620, 0.907097042505775830, 0.907075995294162610, 0.907054945814859350, 0.907033894067918680, 0.907012840053393220, 0.906991783771335820, 0.906970725221798890, +0.906949664404834710, 0.906928601320496800, 0.906907535968837440, 0.906886468349909160, 0.906865398463764680, 0.906844326310456750, 0.906823251890038100, 0.906802175202560790, +0.906781096248078460, 0.906760015026643500, 0.906738931538308420, 0.906717845783125980, 0.906696757761149000, 0.906675667472430000, 0.906654574917021950, 0.906633480094977020, +0.906612383006348830, 0.906591283651189680, 0.906570182029552310, 0.906549078141489440, 0.906527971987053930, 0.906506863566298390, 0.906485752879275800, 0.906464639926038430, +0.906443524706639800, 0.906422407221132430, 0.906401287469568940, 0.906380165452002280, 0.906359041168485200, 0.906337914619070540, 0.906316785803810700, 0.906295654722759300, +0.906274521375968760, 0.906253385763491900, 0.906232247885381590, 0.906211107741690670, 0.906189965332471870, 0.906168820657778260, 0.906147673717662250, 0.906126524512177340, +0.906105373041376170, 0.906084219305311580, 0.906063063304036410, 0.906041905037603620, 0.906020744506066070, 0.905999581709476250, 0.905978416647887920, 0.905957249321353460, +0.905936079729925960, 0.905914907873658140, 0.905893733752603180, 0.905872557366813820, 0.905851378716343030, 0.905830197801243520, 0.905809014621568820, 0.905787829177371550, +0.905766641468704780, 0.905745451495621360, 0.905724259258174350, 0.905703064756416710, 0.905681867990401400, 0.905660668960181050, 0.905639467665809380, 0.905618264107339030, +0.905597058284822950, 0.905575850198314320, 0.905554639847866110, 0.905533427233531140, 0.905512212355362390, 0.905490995213413360, 0.905469775807736910, 0.905448554138386100, +0.905427330205413770, 0.905406104008873220, 0.905384875548817300, 0.905363644825299300, 0.905342411838371720, 0.905321176588088530, 0.905299939074502350, 0.905278699297666360, +0.905257457257633620, 0.905236212954457330, 0.905214966388190430, 0.905193717558886110, 0.905172466466597100, 0.905151213111377250, 0.905129957493279510, 0.905108699612356740, +0.905087439468662320, 0.905066177062249230, 0.905044912393170750, 0.905023645461479620, 0.905002376267229680, 0.904981104810473890, 0.904959831091265320, 0.904938555109657150, +0.904917276865702560, 0.904895996359454840, 0.904874713590967160, 0.904853428560292270, 0.904832141267484120, 0.904810851712595680, 0.904789559895680110, 0.904768265816790600, +0.904746969475980540, 0.904725670873302910, 0.904704370008810880, 0.904683066882558170, 0.904661761494597870, 0.904640453844983150, 0.904619143933767190, 0.904597831761003500, +0.904576517326745270, 0.904555200631045660, 0.904533881673957650, 0.904512560455535300, 0.904491236975831670, 0.904469911234899840, 0.904448583232793310, 0.904427252969565280, +0.904405920445269130, 0.904384585659958160, 0.904363248613685330, 0.904341909306504820, 0.904320567738469470, 0.904299223909632690, 0.904277877820047980, 0.904256529469768420, +0.904235178858847630, 0.904213825987338460, 0.904192470855295190, 0.904171113462770680, 0.904149753809818320, 0.904128391896491750, 0.904107027722844010, 0.904085661288928870, +0.904064292594799480, 0.904042921640509030, 0.904021548426111600, 0.904000172951660350, 0.903978795217208590, 0.903957415222809920, 0.903936032968517660, 0.903914648454385410, +0.903893261680466020, 0.903871872646814010, 0.903850481353482230, 0.903829087800524180, 0.903807691987993490, 0.903786293915943670, 0.903764893584427910, 0.903743490993500040, +0.903722086143213030, 0.903700679033621280, 0.903679269664777740, 0.903657858036736040, 0.903636444149549690, 0.903615028003272200, 0.903593609597957200, 0.903572188933658090, +0.903550766010428270, 0.903529340828321810, 0.903507913387392000, 0.903486483687692470, 0.903465051729276710, 0.903443617512198260, 0.903422181036510840, 0.903400742302267520, +0.903379301309522820, 0.903357858058329800, 0.903336412548742080, 0.903314964780813410, 0.903293514754597290, 0.903272062470147460, 0.903250607927517430, 0.903229151126760500, +0.903207692067931060, 0.903186230751082400, 0.903164767176268150, 0.903143301343541930, 0.903121833252957580, 0.903100362904568520, 0.903078890298428690, 0.903057415434591170, +0.903035938313110460, 0.903014458934039980, 0.902992977297433330, 0.902971493403344150, 0.902950007251826390, 0.902928518842933460, 0.902907028176718970, 0.902885535253237230, +0.902864040072541730, 0.902842542634686000, 0.902821042939723980, 0.902799540987709430, 0.902778036778695950, 0.902756530312737390, 0.902735021589887170, 0.902713510610199670, +0.902691997373728410, 0.902670481880527230, 0.902648964130649880, 0.902627444124149970, 0.902605921861081570, 0.902584397341497980, 0.902562870565453700, 0.902541341533002360, +0.902519810244197580, 0.902498276699093220, 0.902476740897743320, 0.902455202840201420, 0.902433662526521680, 0.902412119956757300, 0.902390575130962990, 0.902369028049192280, +0.902347478711498900, 0.902325927117936910, 0.902304373268560170, 0.902282817163422400, 0.902261258802577570, 0.902239698186079300, 0.902218135313982090, 0.902196570186339590, +0.902175002803205620, 0.902153433164634260, 0.902131861270679240, 0.902110287121394520, 0.902088710716833720, 0.902067132057051580, 0.902045551142101500, 0.902023967972037650, +0.902002382546913890, 0.901980794866784060, 0.901959204931702340, 0.901937612741722570, 0.901916018296898380, 0.901894421597284610, 0.901872822642934670, 0.901851221433902730, +0.901829617970242750, 0.901808012252008680, 0.901786404279254720, 0.901764794052034580, 0.901743181570402120, 0.901721566834412070, 0.901699949844118160, 0.901678330599574360, +0.901656709100834730, 0.901635085347953340, 0.901613459340984250, 0.901591831079981090, 0.901570200564998700, 0.901548567796090830, 0.901526932773311640, 0.901505295496714990, +0.901483655966355160, 0.901462014182286220, 0.901440370144562130, 0.901418723853236850, 0.901397075308365100, 0.901375424510000630, 0.901353771458197730, 0.901332116153010230, +0.901310458594492550, 0.901288798782698740, 0.901267136717682440, 0.901245472399498810, 0.901223805828201390, 0.901202137003844550, 0.901180465926482270, 0.901158792596168820, +0.901137117012958510, 0.901115439176905290, 0.901093759088063220, 0.901072076746487040, 0.901050392152230710, 0.901028705305348290, 0.901007016205894180, 0.900985324853922580, +0.900963631249487640, 0.900941935392643670, 0.900920237283444390, 0.900898536921944880, 0.900876834308199090, 0.900855129442261200, 0.900833422324185510, 0.900811712954026290, +0.900790001331837730, 0.900768287457673790, 0.900746571331589530, 0.900724852953638800, 0.900703132323876000, 0.900681409442355310, 0.900659684309131130, 0.900637956924257740, +0.900616227287789450, 0.900594495399780200, 0.900572761260285180, 0.900551024869358120, 0.900529286227053640, 0.900507545333425810, 0.900485802188529250, 0.900464056792418140, +0.900442309145146780, 0.900420559246769340, 0.900398807097340990, 0.900377052696915480, 0.900355296045547430, 0.900333537143291010, 0.900311775990200850, 0.900290012586331230, +0.900268246931736240, 0.900246479026470920, 0.900224708870589470, 0.900202936464146290, 0.900181161807195650, 0.900159384899792190, 0.900137605741990310, 0.900115824333844290, +0.900094040675408440, 0.900072254766737800, 0.900050466607886570, 0.900028676198909140, 0.900006883539860030, 0.899985088630793740, 0.899963291471764680, 0.899941492062827030, +0.899919690404036080, 0.899897886495445780, 0.899876080337110860, 0.899854271929085740, 0.899832461271424910, 0.899810648364183010, 0.899788833207414320, 0.899767015801173350, +0.899745196145515070, 0.899723374240493870, 0.899701550086164260, 0.899679723682580760, 0.899657895029797980, 0.899636064127870340, 0.899614230976852670, 0.899592395576798930, +0.899570557927764750, 0.899548718029804070, 0.899526875882971530, 0.899505031487321860, 0.899483184842909680, 0.899461335949789500, 0.899439484808015500, 0.899417631417643300, +0.899395775778726980, 0.899373917891321150, 0.899352057755480660, 0.899330195371259910, 0.899308330738713750, 0.899286463857896680, 0.899264594728863110, 0.899242723351668440, +0.899220849726366960, 0.899198973853013390, 0.899177095731662380, 0.899155215362368640, 0.899133332745186810, 0.899111447880171610, 0.899089560767377560, 0.899067671406859840, +0.899045779798673060, 0.899023885942871750, 0.899001989839510740, 0.898980091488644770, 0.898958190890328580, 0.898936288044616450, 0.898914382951564120, 0.898892475611225760, +0.898870566023656110, 0.898848654188910250, 0.898826740107042670, 0.898804823778108220, 0.898782905202161640, 0.898760984379257550, 0.898739061309451250, 0.898717135992797460, +0.898695208429350690, 0.898673278619165910, 0.898651346562298060, 0.898629412258801660, 0.898607475708731450, 0.898585536912142930, 0.898563595869090630, 0.898541652579629260, +0.898519707043813790, 0.898497759261699060, 0.898475809233339920, 0.898453856958791210, 0.898431902438107550, 0.898409945671344470, 0.898387986658556460, 0.898366025399798600, +0.898344061895125610, 0.898322096144592570, 0.898300128148254220, 0.898278157906165500, 0.898256185418381040, 0.898234210684956460, 0.898212233705946490, 0.898190254481405770, +0.898168273011389570, 0.898146289295952530, 0.898124303335149920, 0.898102315129036040, 0.898080324677666850, 0.898058331981096750, 0.898036337039380910, 0.898014339852574170, +0.897992340420731620, 0.897970338743908190, 0.897948334822158970, 0.897926328655538450, 0.897904320244102610, 0.897882309587905820, 0.897860296687003400, 0.897838281541450180, +0.897816264151301220, 0.897794244516611610, 0.897772222637436060, 0.897750198513830310, 0.897728172145848990, 0.897706143533547270, 0.897684112676980340, 0.897662079576202920, +0.897640044231270420, 0.897618006642237790, 0.897595966809159760, 0.897573924732092190, 0.897551880411089800, 0.897529833846207770, 0.897507785037501060, 0.897485733985024960, +0.897463680688834530, 0.897441625148984850, 0.897419567365530750, 0.897397507338528080, 0.897375445068031690, 0.897353380554096640, 0.897331313796778220, 0.897309244796131390, +0.897287173552211550, 0.897265100065073320, 0.897243024334772770, 0.897220946361364740, 0.897198866144904180, 0.897176783685446620, 0.897154698983047010, 0.897132612037760620, +0.897110522849642770, 0.897088431418748170, 0.897066337745132890, 0.897044241828851780, 0.897022143669960140, 0.897000043268513010, 0.896977940624565930, 0.896955835738173830, +0.896933728609392240, 0.896911619238275890, 0.896889507624880960, 0.896867393769262170, 0.896845277671474930, 0.896823159331574530, 0.896801038749616140, 0.896778915925655280, +0.896756790859746690, 0.896734663551946420, 0.896712534002309550, 0.896690402210891470, 0.896668268177747250, 0.896646131902932410, 0.896623993386502230, 0.896601852628512000, +0.896579709629016790, 0.896557564388072770, 0.896535416905734790, 0.896513267182058260, 0.896491115217098570, 0.896468961010911000, 0.896446804563551190, 0.896424645875073870, +0.896402484945535320, 0.896380321774990610, 0.896358156363495140, 0.896335988711104200, 0.896313818817873310, 0.896291646683857860, 0.896269472309113360, 0.896247295693694660, +0.896225116837658260, 0.896202935741059030, 0.896180752403952340, 0.896158566826393940, 0.896136379008439010, 0.896114188950143160, 0.896091996651561810, 0.896069802112750110, +0.896047605333764370, 0.896025406314659540, 0.896003205055491140, 0.895981001556314770, 0.895958795817185960, 0.895936587838160100, 0.895914377619292380, 0.895892165160639190, +0.895869950462255480, 0.895847733524196890, 0.895825514346519030, 0.895803292929277410, 0.895781069272527430, 0.895758843376324940, 0.895736615240724790, 0.895714384865783590, +0.895692152251556410, 0.895669917398098870, 0.895647680305466600, 0.895625440973714990, 0.895603199402899900, 0.895580955593076710, 0.895558709544300720, 0.895536461256628450, +0.895514210730114950, 0.895491957964815950, 0.895469702960787100, 0.895447445718083990, 0.895425186236762260, 0.895402924516877090, 0.895380660558485090, 0.895358394361641330, +0.895336125926401660, 0.895313855252821700, 0.895291582340957070, 0.895269307190863510, 0.895247029802596740, 0.895224750176211840, 0.895202468311765640, 0.895180184209313110, +0.895157897868910200, 0.895135609290612530, 0.895113318474475840, 0.895091025420555850, 0.895068730128907860, 0.895046432599588600, 0.895024132832653140, 0.895001830828157320, +0.894979526586156980, 0.894957220106707750, 0.894934911389865580, 0.894912600435685990, 0.894890287244224590, 0.894867971815537900, 0.894845654149681200, 0.894823334246710460, +0.894801012106681390, 0.894778687729649750, 0.894756361115671360, 0.894734032264802080, 0.894711701177097310, 0.894689367852613660, 0.894667032291406650, 0.894644694493532010, +0.894622354459045700, 0.894600012188003450, 0.894577667680461210, 0.894555320936474390, 0.894532971956099710, 0.894510620739392470, 0.894488267286408840, 0.894465911597204450, +0.894443553671835260, 0.894421193510357200, 0.894398831112826250, 0.894376466479297690, 0.894354099609828480, 0.894331730504473900, 0.894309359163290130, 0.894286985586332910, +0.894264609773658180, 0.894242231725321910, 0.894219851441380160, 0.894197468921888340, 0.894175084166903170, 0.894152697176480380, 0.894130307950675830, 0.894107916489545460, +0.894085522793145350, 0.894063126861531440, 0.894040728694759370, 0.894018328292885740, 0.893995925655966420, 0.893973520784057230, 0.893951113677214140, 0.893928704335493430, +0.893906292758950840, 0.893883878947642540, 0.893861462901624270, 0.893839044620952650, 0.893816624105683410, 0.893794201355872620, 0.893771776371576230, 0.893749349152850540, +0.893726919699751380, 0.893704488012334600, 0.893682054090656930, 0.893659617934774220, 0.893637179544742420, 0.893614738920617710, 0.893592296062456050, 0.893569850970313720, +0.893547403644246670, 0.893524954084310870, 0.893502502290562940, 0.893480048263058820, 0.893457592001854590, 0.893435133507006430, 0.893412672778570390, 0.893390209816602670, +0.893367744621159420, 0.893345277192296390, 0.893322807530070540, 0.893300335634537700, 0.893277861505754060, 0.893255385143775670, 0.893232906548658940, 0.893210425720459830, +0.893187942659234400, 0.893165457365039380, 0.893142969837930730, 0.893120480077964740, 0.893097988085197470, 0.893075493859685320, 0.893052997401484360, 0.893030498710650880, +0.893007997787240830, 0.892985494631311160, 0.892962989242917730, 0.892940481622116920, 0.892917971768964810, 0.892895459683517800, 0.892872945365832060, 0.892850428815964100, +0.892827910033969550, 0.892805389019905690, 0.892782865773828370, 0.892760340295793870, 0.892737812585858490, 0.892715282644078620, 0.892692750470510550, 0.892670216065210130, +0.892647679428234640, 0.892625140559639930, 0.892602599459482390, 0.892580056127818320, 0.892557510564704120, 0.892534962770196060, 0.892512412744350670, 0.892489860487223900, +0.892467305998872810, 0.892444749279353470, 0.892422190328722280, 0.892399629147035630, 0.892377065734349940, 0.892354500090721480, 0.892331932216206440, 0.892309362110861870, +0.892286789774744070, 0.892264215207909110, 0.892241638410413710, 0.892219059382314270, 0.892196478123667090, 0.892173894634528790, 0.892151308914955310, 0.892128720965003950, +0.892106130784730780, 0.892083538374192300, 0.892060943733444910, 0.892038346862545240, 0.892015747761549680, 0.891993146430514750, 0.891970542869496620, 0.891947937078552470, +0.891925329057738470, 0.891902718807111140, 0.891880106326726980, 0.891857491616642630, 0.891834874676914580, 0.891812255507598910, 0.891789634108752890, 0.891767010480432940, +0.891744384622695340, 0.891721756535596930, 0.891699126219194000, 0.891676493673543290, 0.891653858898701300, 0.891631221894724320, 0.891608582661669760, 0.891585941199593670, +0.891563297508552680, 0.891540651588603520, 0.891518003439802700, 0.891495353062206840, 0.891472700455872240, 0.891450045620856280, 0.891427388557215260, 0.891404729265005690, +0.891382067744284300, 0.891359403995107710, 0.891336738017532770, 0.891314069811615870, 0.891291399377413310, 0.891268726714982810, 0.891246051824380440, 0.891223374705662930, +0.891200695358887020, 0.891178013784109320, 0.891155329981386580, 0.891132643950775520, 0.891109955692332530, 0.891087265206114920, 0.891064572492179190, 0.891041877550582060, +0.891019180381380280, 0.890996480984630470, 0.890973779360389570, 0.890951075508713660, 0.890928369429660580, 0.890905661123286510, 0.890882950589648390, 0.890860237828802860, +0.890837522840806640, 0.890814805625716690, 0.890792086183589740, 0.890769364514482080, 0.890746640618451550, 0.890723914495554330, 0.890701186145847260, 0.890678455569387300, +0.890655722766231280, 0.890632987736435840, 0.890610250480057930, 0.890587510997154050, 0.890564769287781830, 0.890542025351997560, 0.890519279189858290, 0.890496530801420880, +0.890473780186742060, 0.890451027345878890, 0.890428272278887660, 0.890405514985826210, 0.890382755466750940, 0.890359993721718810, 0.890337229750786660, 0.890314463554011450, +0.890291695131450010, 0.890268924483159420, 0.890246151609196070, 0.890223376509617800, 0.890200599184481020, 0.890177819633842790, 0.890155037857760070, 0.890132253856289690, +0.890109467629488620, 0.890086679177413580, 0.890063888500122190, 0.890041095597671080, 0.890018300470117210, 0.889995503117517630, 0.889972703539929300, 0.889949901737409180, +0.889927097710014330, 0.889904291457801370, 0.889881482980828030, 0.889858672279150940, 0.889835859352827270, 0.889813044201913870, 0.889790226826467910, 0.889767407226546350, +0.889744585402206250, 0.889721761353504340, 0.889698935080498470, 0.889676106583245140, 0.889653275861801650, 0.889630442916224950, 0.889607607746572100, 0.889584770352900290, +0.889561930735266020, 0.889539088893727460, 0.889516244828341130, 0.889493398539164200, 0.889470550026253750, 0.889447699289666940, 0.889424846329460950, 0.889401991145692740, +0.889379133738419260, 0.889356274107698240, 0.889333412253586640, 0.889310548176141410, 0.889287681875419840, 0.889264813351479110, 0.889241942604376280, 0.889219069634168640, +0.889196194440912910, 0.889173317024667060, 0.889150437385487940, 0.889127555523432810, 0.889104671438558650, 0.889081785130922950, 0.889058896600582680, 0.889036005847594790, +0.889013112872017340, 0.888990217673907070, 0.888967320253321260, 0.888944420610317200, 0.888921518744951960, 0.888898614657283040, 0.888875708347367510, 0.888852799815262440, +0.888829889061025670, 0.888806976084714150, 0.888784060886385170, 0.888761143466096140, 0.888738223823904220, 0.888715301959866700, 0.888692377874040540, 0.888669451566483910, +0.888646523037253560, 0.888623592286406970, 0.888600659314001340, 0.888577724120094060, 0.888554786704742530, 0.888531847068004030, 0.888508905209935420, 0.888485961130594970, +0.888463014830039750, 0.888440066308326840, 0.888417115565513840, 0.888394162601658040, 0.888371207416816850, 0.888348250011047560, 0.888325290384407330, 0.888302328536954230, +0.888279364468745340, 0.888256398179838040, 0.888233429670289730, 0.888210458940157930, 0.888187485989499810, 0.888164510818372670, 0.888141533426834660, 0.888118553814942870, +0.888095571982754570, 0.888072587930327510, 0.888049601657718850, 0.888026613164986210, 0.888003622452187000, 0.887980629519378390, 0.887957634366618560, 0.887934636993964690, +0.887911637401474270, 0.887888635589204720, 0.887865631557213540, 0.887842625305558240, 0.887819616834296440, 0.887796606143485210, 0.887773593233182940, 0.887750578103446600, +0.887727560754333790, 0.887704541185902140, 0.887681519398209050, 0.887658495391312250, 0.887635469165268810, 0.887612440720137010, 0.887589410055974140, 0.887566377172837820, +0.887543342070785450, 0.887520304749874870, 0.887497265210163370, 0.887474223451708790, 0.887451179474568310, 0.887428133278800100, 0.887405084864461680, 0.887382034231610550, +0.887358981380304330, 0.887335926310600650, 0.887312869022557240, 0.887289809516231150, 0.887266747791680910, 0.887243683848963900, 0.887220617688137540, 0.887197549309259760, +0.887174478712388080, 0.887151405897580240, 0.887128330864893840, 0.887105253614386190, 0.887082174146115790, 0.887059092460140030, 0.887036008556516540, 0.887012922435302940, +0.886989834096557180, 0.886966743540336670, 0.886943650766699450, 0.886920555775702610, 0.886897458567404760, 0.886874359141863300, 0.886851257499135960, 0.886828153639280470, +0.886805047562354680, 0.886781939268416090, 0.886758828757522320, 0.886735716029732000, 0.886712601085102300, 0.886689483923691070, 0.886666364545556140, 0.886643242950755360, +0.886620119139346350, 0.886596993111387180, 0.886573864866935010, 0.886550734406048590, 0.886527601728785420, 0.886504466835203230, 0.886481329725359870, 0.886458190399313170, +0.886435048857120990, 0.886411905098841160, 0.886388759124531190, 0.886365610934249700, 0.886342460528054210, 0.886319307906002550, 0.886296153068152680, 0.886272996014562440, +0.886249836745289680, 0.886226675260391890, 0.886203511559927830, 0.886180345643954980, 0.886157177512531200, 0.886134007165714550, 0.886110834603562990, 0.886087659826134240, +0.886064482833486270, 0.886041303625676790, 0.886018122202764440, 0.885994938564806710, 0.885971752711861790, 0.885948564643987300, 0.885925374361241520, 0.885902181863682300, +0.885878987151367260, 0.885855790224355010, 0.885832591082703400, 0.885809389726470280, 0.885786186155713700, 0.885762980370491610, 0.885739772370862100, 0.885716562156883210, +0.885693349728612470, 0.885670135086108700, 0.885646918229429650, 0.885623699158633370, 0.885600477873777710, 0.885577254374920960, 0.885554028662121070, 0.885530800735436000, +0.885507570594923690, 0.885484338240642770, 0.885461103672650960, 0.885437866891006450, 0.885414627895767190, 0.885391386686991470, 0.885368143264737230, 0.885344897629062210, +0.885321649780025480, 0.885298399717684430, 0.885275147442097570, 0.885251892953322740, 0.885228636251418120, 0.885205377336442000, 0.885182116208452440, 0.885158852867507170, +0.885135587313665150, 0.885112319546984220, 0.885089049567522430, 0.885065777375337980, 0.885042502970489140, 0.885019226353034090, 0.884995947523030900, 0.884972666480537410, +0.884949383225612780, 0.884926097758314660, 0.884902810078701200, 0.884879520186830800, 0.884856228082761540, 0.884832933766551810, 0.884809637238259230, 0.884786338497942970, +0.884763037545660990, 0.884739734381471240, 0.884716429005432350, 0.884693121417602260, 0.884669811618039370, 0.884646499606801970, 0.884623185383947910, 0.884599868949536350, +0.884576550303625030, 0.884553229446272350, 0.884529906377536700, 0.884506581097476150, 0.884483253606149210, 0.884459923903613720, 0.884436591989928860, 0.884413257865152460, +0.884389921529342930, 0.884366582982558660, 0.884343242224857830, 0.884319899256298950, 0.884296554076940410, 0.884273206686839950, 0.884249857086056860, 0.884226505274649190, +0.884203151252675350, 0.884179795020193500, 0.884156436577262170, 0.884133075923939860, 0.884109713060284740, 0.884086347986354990, 0.884062980702209790, 0.884039611207907080, +0.884016239503505390, 0.883992865589063090, 0.883969489464638600, 0.883946111130290420, 0.883922730586076510, 0.883899347832056260, 0.883875962868287510, 0.883852575694829000, +0.883829186311739010, 0.883805794719075940, 0.883782400916898530, 0.883759004905265040, 0.883735606684233680, 0.883712206253863710, 0.883688803614213200, 0.883665398765340670, +0.883641991707304620, 0.883618582440163670, 0.883595170963976220, 0.883571757278800440, 0.883548341384695620, 0.883524923281720050, 0.883501502969932130, 0.883478080449390470, +0.883454655720153580, 0.883431228782279980, 0.883407799635828380, 0.883384368280856870, 0.883360934717424940, 0.883337498945590550, 0.883314060965412430, 0.883290620776949200, +0.883267178380259370, 0.883243733775401660, 0.883220286962434600, 0.883196837941416350, 0.883173386712406530, 0.883149933275463090, 0.883126477630644890, 0.883103019778010530, +0.883079559717618650, 0.883056097449527840, 0.883032632973796310, 0.883009166290483650, 0.882985697399648050, 0.882962226301348240, 0.882938752995642840, 0.882915277482590580, +0.882891799762250180, 0.882868319834680170, 0.882844837699939040, 0.882821353358086200, 0.882797866809179930, 0.882774378053279070, 0.882750887090442250, 0.882727393920728190, +0.882703898544195620, 0.882680400960903280, 0.882656901170909670, 0.882633399174274080, 0.882609894971055020, 0.882586388561311220, 0.882562879945101520, 0.882539369122484540, +0.882515856093519240, 0.882492340858263780, 0.882468823416777900, 0.882445303769120000, 0.882421781915348810, 0.882398257855523170, 0.882374731589701920, 0.882351203117943790, +0.882327672440307630, 0.882304139556851940, 0.882280604467636340, 0.882257067172719120, 0.882233527672159350, 0.882209985966015740, 0.882186442054347150, 0.882162895937212420, +0.882139347614670060, 0.882115797086779670, 0.882092244353599900, 0.882068689415189460, 0.882045132271607300, 0.882021572922912390, 0.881998011369163450, 0.881974447610419540, +0.881950881646739070, 0.881927313478181870, 0.881903743104806240, 0.881880170526671340, 0.881856595743836010, 0.881833018756359220, 0.881809439564299910, 0.881785858167716930, +0.881762274566668890, 0.881738688761215640, 0.881715100751415680, 0.881691510537327860, 0.881667918119011350, 0.881644323496525000, 0.881620726669927860, 0.881597127639278550, +0.881573526404636710, 0.881549922966061160, 0.881526317323610750, 0.881502709477344550, 0.881479099427321610, 0.881455487173600890, 0.881431872716241460, 0.881408256055301930, +0.881384637190842150, 0.881361016122920840, 0.881337392851596960, 0.881313767376929570, 0.881290139698977850, 0.881266509817800750, 0.881242877733457330, 0.881219243446006330, +0.881195606955507580, 0.881171968262019820, 0.881148327365602220, 0.881124684266313740, 0.881101038964213660, 0.881077391459360810, 0.881053741751814170, 0.881030089841633560, +0.881006435728877710, 0.880982779413605810, 0.880959120895877020, 0.880935460175750310, 0.880911797253285060, 0.880888132128540220, 0.880864464801574650, 0.880840795272448410, +0.880817123541220100, 0.880793449607949030, 0.880769773472694250, 0.880746095135515160, 0.880722414596470720, 0.880698731855619870, 0.880675046913022670, 0.880651359768737760, +0.880627670422824530, 0.880603978875342030, 0.880580285126349670, 0.880556589175906620, 0.880532891024072060, 0.880509190670904830, 0.880485488116464990, 0.880461783360811490, +0.880438076404003510, 0.880414367246100450, 0.880390655887161370, 0.880366942327245660, 0.880343226566412620, 0.880319508604721080, 0.880295788442231110, 0.880272066079001770, +0.880248341515092240, 0.880224614750561910, 0.880200885785469960, 0.880177154619875780, 0.880153421253838330, 0.880129685687417780, 0.880105947920672980, 0.880082207953663430, +0.880058465786448200, 0.880034721419086900, 0.880010974851638710, 0.879987226084163130, 0.879963475116719020, 0.879939721949366760, 0.879915966582165090, 0.879892209015173510, +0.879868449248451530, 0.879844687282058340, 0.879820923116053420, 0.879797156750496190, 0.879773388185445590, 0.879749617420962030, 0.879725844457104440, 0.879702069293932130, +0.879678291931504820, 0.879654512369881680, 0.879630730609122220, 0.879606946649285510, 0.879583160490431950, 0.879559372132620480, 0.879535581575910500, 0.879511788820361630, +0.879487993866033270, 0.879464196712984920, 0.879440397361275990, 0.879416595810965760, 0.879392792062114400, 0.879368986114781090, 0.879345177969025340, 0.879321367624906650, +0.879297555082484530, 0.879273740341818490, 0.879249923402967700, 0.879226104265992570, 0.879202282930952150, 0.879178459397905950, 0.879154633666913710, 0.879130805738034820, +0.879106975611328890, 0.879083143286855550, 0.879059308764673970, 0.879035472044844560, 0.879011633127426360, 0.878987792012479120, 0.878963948700062450, 0.878940103190235860, +0.878916255483059070, 0.878892405578591610, 0.878868553476892630, 0.878844699178022770, 0.878820842682041190, 0.878796983989007520, 0.878773123098981370, 0.878749260012022360, +0.878725394728190220, 0.878701527247544130, 0.878677657570144710, 0.878653785696051130, 0.878629911625323110, 0.878606035358020290, 0.878582156894202380, 0.878558276233929010, +0.878534393377260030, 0.878510508324254700, 0.878486621074973440, 0.878462731629475630, 0.878438839987821020, 0.878414946150069320, 0.878391050116280160, 0.878367151886513490, +0.878343251460828920, 0.878319348839285750, 0.878295444021944590, 0.878271537008864960, 0.878247627800106350, 0.878223716395728720, 0.878199802795791800, 0.878175887000355430, +0.878151969009478890, 0.878128048823222820, 0.878104126441646700, 0.878080201864810170, 0.878056275092773180, 0.878032346125595440, 0.878008414963336930, 0.877984481606057350, +0.877960546053816130, 0.877936608306673970, 0.877912668364690290, 0.877888726227925020, 0.877864781896437800, 0.877840835370288670, 0.877816886649537500, 0.877792935734243660, +0.877768982624467900, 0.877745027320269710, 0.877721069821708940, 0.877697110128845550, 0.877673148241739250, 0.877649184160450120, 0.877625217885038110, 0.877601249415562610, +0.877577278752084360, 0.877553305894662960, 0.877529330843358270, 0.877505353598230230, 0.877481374159338800, 0.877457392526744040, 0.877433408700505680, 0.877409422680683450, +0.877385434467338080, 0.877361444060529070, 0.877337451460316500, 0.877313456666760310, 0.877289459679920450, 0.877265460499856990, 0.877241459126629320, 0.877217455560298510, +0.877193449800924060, 0.877169441848566040, 0.877145431703284410, 0.877121419365139100, 0.877097404834190300, 0.877073388110498060, 0.877049369194121800, 0.877025348085122670, +0.877001324783560080, 0.876977299289494190, 0.876953271602985080, 0.876929241724092810, 0.876905209652877330, 0.876881175389398470, 0.876857138933717200, 0.876833100285892900, +0.876809059445985970, 0.876785016414056370, 0.876760971190164160, 0.876736923774369630, 0.876712874166732710, 0.876688822367313160, 0.876664768376172020, 0.876640712193369030, +0.876616653818964140, 0.876592593253017750, 0.876568530495589690, 0.876544465546740480, 0.876520398406530070, 0.876496329075018180, 0.876472257552265880, 0.876448183838333010, +0.876424107933279630, 0.876400029837166030, 0.876375949550052380, 0.876351867071998750, 0.876327782403065080, 0.876303695543312440, 0.876279606492800460, 0.876255515251589510, +0.876231421819739790, 0.876207326197311450, 0.876183228384364800, 0.876159128380960220, 0.876135026187157220, 0.876110921803017200, 0.876086815228599770, 0.876062706463965330, +0.876038595509174180, 0.876014482364286580, 0.875990367029362730, 0.875966249504462890, 0.875942129789647030, 0.875918007884976310, 0.875893883790510590, 0.875869757506310130, +0.875845629032435240, 0.875821498368946290, 0.875797365515903700, 0.875773230473367190, 0.875749093241398050, 0.875724953820056110, 0.875700812209401770, 0.875676668409495540, +0.875652522420397480, 0.875628374242168220, 0.875604223874868030, 0.875580071318556860, 0.875555916573295900, 0.875531759639145090, 0.875507600516164940, 0.875483439204415850, +0.875459275703958100, 0.875435110014852190, 0.875410942137157980, 0.875386772070936960, 0.875362599816248980, 0.875338425373154540, 0.875314248741713930, 0.875290069921987770, +0.875265888914036450, 0.875241705717920370, 0.875217520333699590, 0.875193332761435410, 0.875169143001187980, 0.875144951053017710, 0.875120756916984990, 0.875096560593150330, +0.875072362081574350, 0.875048161382317450, 0.875023958495439680, 0.874999753421002560, 0.874975546159065920, 0.874951336709690500, 0.874927125072936680, 0.874902911248865100, +0.874878695237536250, 0.874854477039010200, 0.874830256653348350, 0.874806034080610970, 0.874781809320858360, 0.874757582374151350, 0.874733353240550350, 0.874709121920115960, +0.874684888412908700, 0.874660652718988850, 0.874636414838417810, 0.874612174771255750, 0.874587932517563280, 0.874563688077400920, 0.874539441450829290, 0.874515192637909110, +0.874490941638701000, 0.874466688453265030, 0.874442433081662810, 0.874418175523954510, 0.874393915780200760, 0.874369653850462170, 0.874345389734799580, 0.874321123433273390, +0.874296854945944000, 0.874272584272872910, 0.874248311414120290, 0.874224036369746990, 0.874199759139813630, 0.874175479724380810, 0.874151198123509280, 0.874126914337259750, +0.874102628365692520, 0.874078340208869100, 0.874054049866849870, 0.874029757339695570, 0.874005462627466810, 0.873981165730224440, 0.873956866648029180, 0.873932565380941220, +0.873908261929022380, 0.873883956292332840, 0.873859648470933340, 0.873835338464884810, 0.873811026274247890, 0.873786711899083410, 0.873762395339452210, 0.873738076595414580, +0.873713755667032130, 0.873689432554365260, 0.873665107257474930, 0.873640779776421740, 0.873616450111266650, 0.873592118262070390, 0.873567784228893920, 0.873543448011797510, +0.873519109610842890, 0.873494769026090470, 0.873470426257601180, 0.873446081305435880, 0.873421734169655290, 0.873397384850320370, 0.873373033347491500, 0.873348679661230640, +0.873324323791597970, 0.873299965738654540, 0.873275605502461080, 0.873251243083078780, 0.873226878480568240, 0.873202511694990520, 0.873178142726406150, 0.873153771574876840, +0.873129398240463090, 0.873105022723225880, 0.873080645023226020, 0.873056265140524590, 0.873031883075182540, 0.873007498827260810, 0.872983112396819800, 0.872958723783921480, +0.872934332988626330, 0.872909940010995420, 0.872885544851089600, 0.872861147508969930, 0.872836747984697460, 0.872812346278332600, 0.872787942389937290, 0.872763536319572150, +0.872739128067298250, 0.872714717633176430, 0.872690305017267850, 0.872665890219633480, 0.872641473240334480, 0.872617054079431240, 0.872592632736985950, 0.872568209213059000, +0.872543783507711450, 0.872519355621004580, 0.872494925552999230, 0.872470493303756590, 0.872446058873337260, 0.872421622261803200, 0.872397183469215130, 0.872372742495634120, +0.872348299341121240, 0.872323854005737530, 0.872299406489544290, 0.872274956792602470, 0.872250504914972910, 0.872226050856717450, 0.872201594617896810, 0.872177136198572290, +0.872152675598804940, 0.872128212818655820, 0.872103747858186230, 0.872079280717457220, 0.872054811396529630, 0.872030339895465410, 0.872005866214325300, 0.871981390353170570, +0.871956912312062400, 0.871932432091061860, 0.871907949690230330, 0.871883465109628440, 0.871858978349318360, 0.871834489409360810, 0.871809998289816980, 0.871785504990748250, +0.871761009512215690, 0.871736511854280690, 0.871712012017004320, 0.871687510000447530, 0.871663005804672380, 0.871638499429739700, 0.871613990875710900, 0.871589480142646920, +0.871564967230609390, 0.871540452139659360, 0.871515934869858230, 0.871491415421266850, 0.871466893793947370, 0.871442369987960650, 0.871417844003367970, 0.871393315840230720, +0.871368785498610190, 0.871344252978567660, 0.871319718280164080, 0.871295181403461630, 0.871270642348521250, 0.871246101115404240, 0.871221557704171980, 0.871197012114885870, +0.871172464347607200, 0.871147914402397360, 0.871123362279317300, 0.871098807978429200, 0.871074251499794230, 0.871049692843473560, 0.871025132009528580, 0.871000568998020810, +0.870976003809011750, 0.870951436442562120, 0.870926866898734330, 0.870902295177589440, 0.870877721279188720, 0.870853145203593800, 0.870828566950865970, 0.870803986521066720, +0.870779403914257450, 0.870754819130499350, 0.870730232169854570, 0.870705643032384180, 0.870681051718149690, 0.870656458227212600, 0.870631862559634430, 0.870607264715476560, +0.870582664694800500, 0.870558062497667320, 0.870533458124139510, 0.870508851574277930, 0.870484242848144300, 0.870459631945800120, 0.870435018867306790, 0.870410403612725920, +0.870385786182118590, 0.870361166575547300, 0.870336544793072990, 0.870311920834757390, 0.870287294700661910, 0.870262666390848260, 0.870238035905377960, 0.870213403244312510, +0.870188768407713200, 0.870164131395642300, 0.870139492208161110, 0.870114850845331240, 0.870090207307214200, 0.870065561593871720, 0.870040913705365180, 0.870016263641756100, +0.869991611403106660, 0.869966956989478240, 0.869942300400932460, 0.869917641637530940, 0.869892980699335180, 0.869868317586407150, 0.869843652298808220, 0.869818984836599700, +0.869794315199844180, 0.869769643388602850, 0.869744969402937550, 0.869720293242909670, 0.869695614908581160, 0.869670934400013530, 0.869646251717268610, 0.869621566860407590, +0.869596879829493190, 0.869572190624586460, 0.869547499245749370, 0.869522805693043410, 0.869498109966530540, 0.869473412066272380, 0.869448711992330200, 0.869424009744766750, +0.869399305323643180, 0.869374598729021450, 0.869349889960963180, 0.869325179019530100, 0.869300465904784160, 0.869275750616787080, 0.869251033155600150, 0.869226313521286100, +0.869201591713906210, 0.869176867733522430, 0.869152141580196380, 0.869127413253990010, 0.869102682754965160, 0.869077950083183560, 0.869053215238706710, 0.869028478221597120, +0.869003739031916410, 0.868978997669726420, 0.868954254135088870, 0.868929508428065710, 0.868904760548718790, 0.868880010497109500, 0.868855258273300570, 0.868830503877353610, +0.868805747309330250, 0.868780988569292640, 0.868756227657302540, 0.868731464573421870, 0.868706699317712490, 0.868681931890236010, 0.868657162291055050, 0.868632390520231220, +0.868607616577826370, 0.868582840463902550, 0.868558062178521610, 0.868533281721745490, 0.868508499093635700, 0.868483714294255190, 0.868458927323665360, 0.868434138181928270, +0.868409346869105760, 0.868384553385259880, 0.868359757730452600, 0.868334959904745960, 0.868310159908201480, 0.868285357740882000, 0.868260553402849130, 0.868235746894164940, +0.868210938214891370, 0.868186127365090490, 0.868161314344824240, 0.868136499154154690, 0.868111681793143460, 0.868086862261853500, 0.868062040560346300, 0.868037216688684050, +0.868012390646928810, 0.867987562435142520, 0.867962732053387360, 0.867937899501724950, 0.867913064780218240, 0.867888227888928830, 0.867863388827918800, 0.867838547597250320, +0.867813704196985560, 0.867788858627186470, 0.867764010887915220, 0.867739160979233540, 0.867714308901204380, 0.867689454653889470, 0.867664598237350980, 0.867639739651650870, +0.867614878896851520, 0.867590015973014880, 0.867565150880203250, 0.867540283618478240, 0.867515414187903120, 0.867490542588539300, 0.867465668820449180, 0.867440792883694910, +0.867415914778338680, 0.867391034504442550, 0.867366152062068460, 0.867341267451279490, 0.867316380672137340, 0.867291491724704100, 0.867266600609042260, 0.867241707325213880, +0.867216811873281260, 0.867191914253306660, 0.867167014465351720, 0.867142112509479700, 0.867117208385752460, 0.867092302094232160, 0.867067393634981200, 0.867042483008061640, +0.867017570213535870, 0.866992655251465740, 0.866967738121914520, 0.866942818824943840, 0.866917897360616200, 0.866892973728993770, 0.866868047930138830, 0.866843119964113900, +0.866818189830981130, 0.866793257530802390, 0.866768323063641040, 0.866743386429558840, 0.866718447628618160, 0.866693506660881300, 0.866668563526410750, 0.866643618225268810, +0.866618670757517750, 0.866593721123219640, 0.866568769322437650, 0.866543815355233730, 0.866518859221670270, 0.866493900921809670, 0.866468940455714320, 0.866443977823446620, +0.866419013025068520, 0.866394046060643410, 0.866369076930233130, 0.866344105633900070, 0.866319132171706860, 0.866294156543715780, 0.866269178749989320, 0.866244198790589890, +0.866219216665579550, 0.866194232375021580, 0.866169245918978040, 0.866144257297511430, 0.866119266510684160, 0.866094273558558610, 0.866069278441197520, 0.866044281158663170, +0.866019281711017720, 0.865994280098324460, 0.865969276320645580, 0.865944270378043450, 0.865919262270580580, 0.865894251998319600, 0.865869239561323000, 0.865844224959652850, +0.865819208193372660, 0.865794189262544370, 0.865769168167230600, 0.865744144907493960, 0.865719119483396970, 0.865694091895002130, 0.865669062142372050, 0.865644030225568910, +0.865618996144656090, 0.865593959899695900, 0.865568921490750710, 0.865543880917883150, 0.865518838181156050, 0.865493793280631700, 0.865468746216372490, 0.865443696988441920, +0.865418645596902070, 0.865393592041815540, 0.865368536323245170, 0.865343478441253370, 0.865318418395902840, 0.865293356187256220, 0.865268291815375900, 0.865243225280325270, +0.865218156582166500, 0.865193085720962430, 0.865168012696775570, 0.865142937509668750, 0.865117860159704600, 0.865092780646945720, 0.865067698971454410, 0.865042615133294390, +0.865017529132527830, 0.864992440969217460, 0.864967350643425890, 0.864942258155215970, 0.864917163504650530, 0.864892066691791640, 0.864866967716703020, 0.864841866579446950, +0.864816763280086280, 0.864791657818683720, 0.864766550195301910, 0.864741440410003780, 0.864716328462852070, 0.864691214353909170, 0.864666098083238580, 0.864640979650902700, +0.864615859056964480, 0.864590736301486530, 0.864565611384531810, 0.864540484306163040, 0.864515355066443060, 0.864490223665434150, 0.864465090103200270, 0.864439954379803590, +0.864414816495307050, 0.864389676449773490, 0.864364534243265650, 0.864339389875846580, 0.864314243347578560, 0.864289094658525330, 0.864263943808749380, 0.864238790798313560, +0.864213635627280820, 0.864188478295713990, 0.864163318803675920, 0.864138157151229550, 0.864112993338437390, 0.864087827365363160, 0.864062659232069370, 0.864037488938618870, +0.864012316485074710, 0.863987141871499830, 0.863961965097956970, 0.863936786164508860, 0.863911605071219110, 0.863886421818150450, 0.863861236405365720, 0.863836048832927860, +0.863810859100899940, 0.863785667209344800, 0.863760473158325490, 0.863735276947904640, 0.863710078578145970, 0.863684878049112090, 0.863659675360866070, 0.863634470513470860, +0.863609263506989410, 0.863584054341484890, 0.863558843017020130, 0.863533629533657860, 0.863508413891462050, 0.863483196090495060, 0.863457976130820200, 0.863432754012500300, +0.863407529735598640, 0.863382303300178070, 0.863357074706301300, 0.863331843954032290, 0.863306611043433650, 0.863281375974568550, 0.863256138747499960, 0.863230899362291030, +0.863205657819004930, 0.863180414117704630, 0.863155168258452840, 0.863129920241313520, 0.863104670066349500, 0.863079417733623730, 0.863054163243199390, 0.863028906595139760, +0.863003647789507780, 0.862978386826366290, 0.862953123705779260, 0.862927858427809390, 0.862902590992519870, 0.862877321399973860, 0.862852049650234540, 0.862826775743365190, +0.862801499679428870, 0.862776221458488310, 0.862750941080607680, 0.862725658545849710, 0.862700373854277560, 0.862675087005954410, 0.862649798000943660, 0.862624506839308360, +0.862599213521111800, 0.862573918046416810, 0.862548620415287350, 0.862523320627786470, 0.862498018683977240, 0.862472714583922940, 0.862447408327686850, 0.862422099915332250, +0.862396789346921990, 0.862371476622520230, 0.862346161742189700, 0.862320844705993790, 0.862295525513995800, 0.862270204166258880, 0.862244880662846550, 0.862219555003822080, +0.862194227189248210, 0.862168897219189210, 0.862143565093707930, 0.862118230812867760, 0.862092894376732090, 0.862067555785364090, 0.862042215038827280, 0.862016872137184920, +0.861991527080499860, 0.861966179868836500, 0.861940830502257670, 0.861915478980826770, 0.861890125304607070, 0.861864769473662200, 0.861839411488055320, 0.861814051347849500, +0.861788689053109010, 0.861763324603896820, 0.861737958000276310, 0.861712589242310870, 0.861687218330063900, 0.861661845263599010, 0.861636470042979500, 0.861611092668268300, +0.861585713139529810, 0.861560331456827090, 0.861534947620223530, 0.861509561629782540, 0.861484173485567720, 0.861458783187642460, 0.861433390736069730, 0.861407996130914010, +0.861382599372238270, 0.861357200460106110, 0.861331799394580930, 0.861306396175726240, 0.861280990803605540, 0.861255583278282330, 0.861230173599819790, 0.861204761768282200, +0.861179347783732730, 0.861153931646234880, 0.861128513355852280, 0.861103092912648300, 0.861077670316686690, 0.861052245568030840, 0.861026818666743910, 0.861001389612890410, +0.860975958406533400, 0.860950525047736500, 0.860925089536563330, 0.860899651873077380, 0.860874212057342380, 0.860848770089421400, 0.860823325969378830, 0.860797879697278060, +0.860772431273182480, 0.860746980697155940, 0.860721527969261930, 0.860696073089563970, 0.860670616058126000, 0.860645156875010970, 0.860619695540283500, 0.860594232054006760, +0.860568766416244470, 0.860543298627060250, 0.860517828686517830, 0.860492356594680820, 0.860466882351612840, 0.860441405957377280, 0.860415927412038650, 0.860390446715660230, +0.860364963868305630, 0.860339478870038700, 0.860313991720923040, 0.860288502421022280, 0.860263010970399920, 0.860237517369120570, 0.860212021617247300, 0.860186523714844050, +0.860161023661974440, 0.860135521458702310, 0.860110017105091270, 0.860084510601205390, 0.860059001947107600, 0.860033491142862760, 0.860007978188534360, 0.859982463084185910, +0.859956945829881250, 0.859931426425684320, 0.859905904871658740, 0.859880381167868020, 0.859854855314376780, 0.859829327311248390, 0.859803797158546710, 0.859778264856335460, +0.859752730404678590, 0.859727193803639930, 0.859701655053283220, 0.859676114153671960, 0.859650571104870860, 0.859625025906943340, 0.859599478559953330, 0.859573929063964460, +0.859548377419040890, 0.859522823625246350, 0.859497267682644780, 0.859471709591299480, 0.859446149351275500, 0.859420586962636010, 0.859395022425445190, 0.859369455739766750, +0.859343886905664660, 0.859318315923202850, 0.859292742792444830, 0.859267167513455330, 0.859241590086297970, 0.859216010511036690, 0.859190428787735330, 0.859164844916457840, +0.859139258897268280, 0.859113670730230710, 0.859088080415408300, 0.859062487952866220, 0.859036893342667970, 0.859011296584877400, 0.858985697679558680, 0.858960096626775640, +0.858934493426592450, 0.858908888079072950, 0.858883280584280760, 0.858857670942280940, 0.858832059153136760, 0.858806445216912630, 0.858780829133672260, 0.858755210903479840, +0.858729590526399410, 0.858703968002494490, 0.858678343331830240, 0.858652716514469950, 0.858627087550478010, 0.858601456439918360, 0.858575823182854970, 0.858550187779352100, +0.858524550229473720, 0.858498910533283530, 0.858473268690846500, 0.858447624702226350, 0.858421978567487030, 0.858396330286692820, 0.858370679859907890, 0.858345027287196080, +0.858319372568621340, 0.858293715704248620, 0.858268056694141630, 0.858242395538364460, 0.858216732236981360, 0.858191066790056410, 0.858165399197653780, 0.858139729459837630, +0.858114057576671700, 0.858088383548221150, 0.858062707374549590, 0.858037029055721210, 0.858011348591800390, 0.857985665982851090, 0.857959981228937680, 0.857934294330124250, +0.857908605286474720, 0.857882914098054060, 0.857857220764926100, 0.857831525287155120, 0.857805827664805400, 0.857780127897941000, 0.857754425986626320, 0.857728721930925090, +0.857703015730902570, 0.857677307386622510, 0.857651596898149180, 0.857625884265546870, 0.857600169488879850, 0.857574452568212300, 0.857548733503608720, 0.857523012295132840, +0.857497288942849820, 0.857471563446823630, 0.857445835807118530, 0.857420106023798920, 0.857394374096928980, 0.857368640026573090, 0.857342903812795540, 0.857317165455660390, +0.857291424955232690, 0.857265682311576520, 0.857239937524756020, 0.857214190594835830, 0.857188441521880010, 0.857162690305953160, 0.857136936947119120, 0.857111181445443290, +0.857085423800989400, 0.857059664013821940, 0.857033902084005430, 0.857008138011604030, 0.856982371796682350, 0.856956603439304800, 0.856930832939535200, 0.856905060297438960, +0.856879285513080120, 0.856853508586522980, 0.856827729517832150, 0.856801948307072010, 0.856776164954306970, 0.856750379459601090, 0.856724591823019740, 0.856698802044626780, +0.856673010124486930, 0.856647216062664580, 0.856621419859224130, 0.856595621514230080, 0.856569821027747040, 0.856544018399839070, 0.856518213630571350, 0.856492406720008260, +0.856466597668213980, 0.856440786475253350, 0.856414973141190640, 0.856389157666090580, 0.856363340050017570, 0.856337520293035780, 0.856311698395210710, 0.856285874356606300, +0.856260048177287290, 0.856234219857318070, 0.856208389396763360, 0.856182556795687670, 0.856156722054155160, 0.856130885172231240, 0.856105046149980060, 0.856079204987466370, +0.856053361684754650, 0.856027516241909540, 0.856001668658995520, 0.855975818936077440, 0.855949967073219350, 0.855924113070486770, 0.855898256927943970, 0.855872398645655450, +0.855846538223685950, 0.855820675662100180, 0.855794810960962660, 0.855768944120338100, 0.855743075140290690, 0.855717204020886140, 0.855691330762188510, 0.855665455364262640, +0.855639577827173040, 0.855613698150984540, 0.855587816335761750, 0.855561932381568970, 0.855536046288471910, 0.855510158056534630, 0.855484267685821980, 0.855458375176398670, +0.855432480528329430, 0.855406583741678990, 0.855380684816512080, 0.855354783752893090, 0.855328880550887400, 0.855302975210559650, 0.855277067731974430, 0.855251158115196590, +0.855225246360290850, 0.855199332467321940, 0.855173416436354250, 0.855147498267453510, 0.855121577960684000, 0.855095655516110550, 0.855069730933797900, 0.855043804213810990, +0.855017875356214540, 0.854991944361073510, 0.854966011228452060, 0.854940075958416030, 0.854914138551029820, 0.854888199006358260, 0.854862257324466300, 0.854836313505418550, +0.854810367549280080, 0.854784419456115720, 0.854758469225989860, 0.854732516858968230, 0.854706562355115330, 0.854680605714496000, 0.854654646937175190, 0.854628686023217840, +0.854602722972688690, 0.854576757785652230, 0.854550790462174410, 0.854524821002319630, 0.854498849406152730, 0.854472875673738750, 0.854446899805142550, 0.854420921800429060, +0.854394941659663340, 0.854368959382909800, 0.854342974970234260, 0.854316988421701340, 0.854290999737375990, 0.854265008917323150, 0.854239015961607670, 0.854213020870294710, +0.854187023643448780, 0.854161024281135720, 0.854135022783420020, 0.854109019150366850, 0.854083013382041180, 0.854057005478507820, 0.854030995439832070, 0.854004983266078880, +0.853978968957312620, 0.853952952513599480, 0.853926933935003960, 0.853900913221591120, 0.853874890373426010, 0.853848865390573590, 0.853822838273099020, 0.853796809021067470, +0.853770777634543340, 0.853744744113592690, 0.853718708458280240, 0.853692670668671050, 0.853666630744830180, 0.853640588686822690, 0.853614544494713750, 0.853588498168567970, +0.853562449708451410, 0.853536399114428690, 0.853510346386565090, 0.853484291524925550, 0.853458234529575250, 0.853432175400579360, 0.853406114138003160, 0.853380050741911030, +0.853353985212369380, 0.853327917549442700, 0.853301847753196290, 0.853275775823695180, 0.853249701761004680, 0.853223625565189820, 0.853197547236316020, 0.853171466774447880, +0.853145384179651470, 0.853119299451991610, 0.853093212591533590, 0.853067123598342470, 0.853041032472483530, 0.853014939214022050, 0.852988843823022760, 0.852962746299551820, +0.852936646643673970, 0.852910544855454590, 0.852884440934958740, 0.852858334882251820, 0.852832226697399110, 0.852806116380465770, 0.852780003931516760, 0.852753889350618130, +0.852727772637834840, 0.852701653793232040, 0.852675532816875140, 0.852649409708829410, 0.852623284469160250, 0.852597157097932270, 0.852571027595211970, 0.852544895961063980, +0.852518762195553890, 0.852492626298746780, 0.852466488270708140, 0.852440348111503270, 0.852414205821197650, 0.852388061399855900, 0.852361914847544530, 0.852335766164328380, +0.852309615350272720, 0.852283462405443170, 0.852257307329904900, 0.852231150123723300, 0.852204990786963880, 0.852178829319691580, 0.852152665721972570, 0.852126499993871910, +0.852100332135455000, 0.852074162146787330, 0.852047990027934190, 0.852021815778961080, 0.851995639399932950, 0.851969460890916300, 0.851943280251975850, 0.851917097483177340, +0.851890912584585940, 0.851864725556267350, 0.851838536398286990, 0.851812345110710250, 0.851786151693602060, 0.851759956147029150, 0.851733758471056150, 0.851707558665748880, +0.851681356731172730, 0.851655152667393220, 0.851628946474475730, 0.851602738152485880, 0.851576527701488730, 0.851550315121550770, 0.851524100412736960, 0.851497883575113020, +0.851471664608744240, 0.851445443513696330, 0.851419220290034810, 0.851392994937824830, 0.851366767457132800, 0.851340537848023770, 0.851314306110563470, 0.851288072244817400, +0.851261836250851170, 0.851235598128730400, 0.851209357878520480, 0.851183115500286800, 0.851156870994095870, 0.851130624360012630, 0.851104375598102810, 0.851078124708432140, +0.851051871691066220, 0.851025616546070450, 0.850999359273510340, 0.850973099873452150, 0.850946838345961300, 0.850920574691103380, 0.850894308908944020, 0.850868040999548820, +0.850841770962983520, 0.850815498799313840, 0.850789224508604840, 0.850762948090923340, 0.850736669546334530, 0.850710388874903910, 0.850684106076697420, 0.850657821151780680, +0.850631534100219300, 0.850605244922079120, 0.850578953617425300, 0.850552660186324690, 0.850526364628842350, 0.850500066945044100, 0.850473767134995780, 0.850447465198762910, +0.850421161136411420, 0.850394854948006600, 0.850368546633615050, 0.850342236193302180, 0.850315923627133710, 0.850289608935175470, 0.850263292117493190, 0.850236973174152590, +0.850210652105219620, 0.850184328910759570, 0.850158003590839150, 0.850131676145523760, 0.850105346574879130, 0.850079014878971080, 0.850052681057865580, 0.850026345111628330, +0.850000007040325300, 0.849973666844021760, 0.849947324522784430, 0.849920980076678930, 0.849894633505770880, 0.849868284810126220, 0.849841933989810890, 0.849815581044890740, +0.849789225975431160, 0.849762868781498980, 0.849736509463159590, 0.849710148020479060, 0.849683784453522990, 0.849657418762357560, 0.849631050947048600, 0.849604681007661950, +0.849578308944263120, 0.849551934756919040, 0.849525558445695110, 0.849499180010657270, 0.849472799451871490, 0.849446416769403800, 0.849420031963319940, 0.849393645033685530, +0.849367255980567610, 0.849340864804031370, 0.849314471504143080, 0.849288076080968570, 0.849261678534573900, 0.849235278865025030, 0.849208877072388010, 0.849182473156728230, +0.849156067118112760, 0.849129658956607190, 0.849103248672277380, 0.849076836265189480, 0.849050421735409570, 0.849024005083003570, 0.848997586308037460, 0.848971165410577040, +0.848944742390689070, 0.848918317248439360, 0.848891889983893750, 0.848865460597118540, 0.848839029088179540, 0.848812595457143050, 0.848786159704074560, 0.848759721829041140, +0.848733281832108500, 0.848706839713342600, 0.848680395472809490, 0.848653949110575570, 0.848627500626706670, 0.848601050021269070, 0.848574597294328380, 0.848548142445951560, +0.848521685476204550, 0.848495226385153180, 0.848468765172863850, 0.848442301839402500, 0.848415836384835530, 0.848389368809228880, 0.848362899112648390, 0.848336427295161010, +0.848309953356832680, 0.848283477297729460, 0.848256999117917520, 0.848230518817463030, 0.848204036396432380, 0.848177551854891080, 0.848151065192906390, 0.848124576410543950, +0.848098085507870140, 0.848071592484951120, 0.848045097341853180, 0.848018600078642380, 0.847992100695385110, 0.847965599192147200, 0.847939095568995720, 0.847912589825996490, +0.847886081963215800, 0.847859571980719820, 0.847833059878575050, 0.847806545656847540, 0.847780029315603150, 0.847753510854909240, 0.847726990274831560, 0.847700467575436380, +0.847673942756790090, 0.847647415818958860, 0.847620886762009080, 0.847594355586007150, 0.847567822291018790, 0.847541286877111390, 0.847514749344350780, 0.847488209692803360, +0.847461667922535300, 0.847435124033613100, 0.847408578026103140, 0.847382029900071720, 0.847355479655584660, 0.847328927292709480, 0.847302372811511990, 0.847275816212058500, +0.847249257494415490, 0.847222696658649350, 0.847196133704826490, 0.847169568633012740, 0.847143001443275590, 0.847116432135681000, 0.847089860710295240, 0.847063287167184930, +0.847036711506416240, 0.847010133728055890, 0.846983553832170280, 0.846956971818825120, 0.846930387688088150, 0.846903801440025190, 0.846877213074702650, 0.846850622592187130, +0.846824029992545020, 0.846797435275842950, 0.846770838442146730, 0.846744239491523890, 0.846717638424040460, 0.846691035239762860, 0.846664429938757790, 0.846637822521091540, +0.846611212986830840, 0.846584601336042080, 0.846557987568791300, 0.846531371685146030, 0.846504753685172420, 0.846478133568936860, 0.846451511336505870, 0.846424886987946270, +0.846398260523324340, 0.846371631942706810, 0.846345001246159740, 0.846318368433750630, 0.846291733505545540, 0.846265096461611190, 0.846238457302014080, 0.846211816026820830, +0.846185172636097940, 0.846158527129911800, 0.846131879508329690, 0.846105229771418000, 0.846078577919243120, 0.846051923951871900, 0.846025267869370820, 0.845998609671806510, +0.845971949359245800, 0.845945286931754640, 0.845918622389400850, 0.845891955732250400, 0.845865286960370110, 0.845838616073826600, 0.845811943072686480, 0.845785267957016580, +0.845758590726883530, 0.845731911382353490, 0.845705229923494060, 0.845678546350371760, 0.845651860663052870, 0.845625172861604430, 0.845598482946093190, 0.845571790916585520, +0.845545096773148040, 0.845518400515848260, 0.845491702144752440, 0.845465001659927440, 0.845438299061439860, 0.845411594349356530, 0.845384887523744300, 0.845358178584669770, +0.845331467532199340, 0.845304754366400730, 0.845278039087340230, 0.845251321695084660, 0.845224602189700750, 0.845197880571255330, 0.845171156839815250, 0.845144430995446780, +0.845117703038217650, 0.845090972968194350, 0.845064240785443620, 0.845037506490032180, 0.845010770082027070, 0.844984031561495040, 0.844957290928502910, 0.844930548183117080, +0.844903803325405380, 0.844877056355434090, 0.844850307273270260, 0.844823556078980520, 0.844796802772632030, 0.844770047354291510, 0.844743289824025800, 0.844716530181901510, +0.844689768427986270, 0.844663004562346660, 0.844636238585049440, 0.844609470496161750, 0.844582700295750330, 0.844555927983882130, 0.844529153560623640, 0.844502377026042810, +0.844475598380206030, 0.844448817623180140, 0.844422034755032300, 0.844395249775829470, 0.844368462685638370, 0.844341673484526160, 0.844314882172559230, 0.844288088749805650, +0.844261293216331810, 0.844234495572204760, 0.844207695817491440, 0.844180893952258930, 0.844154089976574150, 0.844127283890504180, 0.844100475694115500, 0.844073665387476080, +0.844046852970652520, 0.844020038443711870, 0.843993221806721090, 0.843966403059747240, 0.843939582202857360, 0.843912759236118080, 0.843885934159597450, 0.843859106973361860, +0.843832277677478590, 0.843805446272014590, 0.843778612757037030, 0.843751777132612850, 0.843724939398809210, 0.843698099555692860, 0.843671257603331610, 0.843644413541792320, +0.843617567371142020, 0.843590719091447780, 0.843563868702776660, 0.843537016205195940, 0.843510161598772120, 0.843483304883573480, 0.843456446059666520, 0.843429585127118410, +0.843402722085996430, 0.843375856936367630, 0.843348989678299080, 0.843322120311858160, 0.843295248837111490, 0.843268375254127120, 0.843241499562971790, 0.843214621763712760, +0.843187741856417090, 0.843160859841152190, 0.843133975717984980, 0.843107089486982990, 0.843080201148212800, 0.843053310701742500, 0.843026418147638900, 0.842999523485969290, +0.842972626716800950, 0.842945727840200940, 0.842918826856236650, 0.842891923764974790, 0.842865018566483660, 0.842838111260829970, 0.842811201848081000, 0.842784290328303930, +0.842757376701566250, 0.842730460967935020, 0.842703543127477750, 0.842676623180261150, 0.842649701126353400, 0.842622776965821440, 0.842595850698732440, 0.842568922325153900, +0.842541991845153100, 0.842515059258797220, 0.842488124566153740, 0.842461187767289510, 0.842434248862272690, 0.842407307851170350, 0.842380364734049760, 0.842353419510978090, +0.842326472182023060, 0.842299522747251730, 0.842272571206731160, 0.842245617560529620, 0.842218661808714080, 0.842191703951351900, 0.842164743988510380, 0.842137781920257010, +0.842110817746659190, 0.842083851467784420, 0.842056883083699410, 0.842029912594472800, 0.842002940000171280, 0.841975965300862490, 0.841948988496613810, 0.841922009587492640, +0.841895028573566350, 0.841868045454902130, 0.841841060231568240, 0.841814072903631640, 0.841787083471159940, 0.841760091934220520, 0.841733098292880790, 0.841706102547208460, +0.841679104697270810, 0.841652104743134900, 0.841625102684869120, 0.841598098522540750, 0.841571092256217070, 0.841544083885965580, 0.841517073411854000, 0.841490060833949620, +0.841463046152320150, 0.841436029367032660, 0.841409010478155420, 0.841381989485755820, 0.841354966389901150, 0.841327941190659010, 0.841300913888097130, 0.841273884482282910, +0.841246852973283500, 0.841219819361167520, 0.841192783646001920, 0.841165745827854310, 0.841138705906792410, 0.841111663882883720, 0.841084619756195860, 0.841057573526796440, +0.841030525194752740, 0.841003474760133040, 0.840976422223004730, 0.840949367583435300, 0.840922310841492490, 0.840895251997244020, 0.840868191050757270, 0.840841128002100090, +0.840814062851339640, 0.840786995598544420, 0.840759926243781820, 0.840732854787119340, 0.840705781228624720, 0.840678705568365660, 0.840651627806409900, 0.840624547942824480, +0.840597465977678260, 0.840570381911038390, 0.840543295742972480, 0.840516207473548380, 0.840489117102833690, 0.840462024630896360, 0.840434930057803790, 0.840407833383623570, +0.840380734608424110, 0.840353633732272900, 0.840326530755237560, 0.840299425677386020, 0.840272318498785810, 0.840245209219504740, 0.840218097839610320, 0.840190984359171060, +0.840163868778254330, 0.840136751096927870, 0.840109631315259620, 0.840082509433317300, 0.840055385451168650, 0.840028259368881590, 0.840001131186523310, 0.839974000904162740, +0.839946868521867170, 0.839919734039704440, 0.839892597457742470, 0.839865458776048900, 0.839838317994691660, 0.839811175113738590, 0.839784030133257200, 0.839756883053316190, +0.839729733873982980, 0.839702582595325380, 0.839675429217411450, 0.839648273740308810, 0.839621116164085520, 0.839593956488808970, 0.839566794714548090, 0.839539630841370070, +0.839512464869343060, 0.839485296798534900, 0.839458126629013530, 0.839430954360846800, 0.839403779994102650, 0.839376603528848570, 0.839349424965153520, 0.839322244303084890, +0.839295061542710610, 0.839267876684098750, 0.839240689727317140, 0.839213500672433830, 0.839186309519516340, 0.839159116268633490, 0.839131920919852780, 0.839104723473242390, +0.839077523928870140, 0.839050322286804100, 0.839023118547112200, 0.838995912709862620, 0.838968704775122640, 0.838941494742961420, 0.838914282613446580, 0.838887068386645950, +0.838859852062627590, 0.838832633641459660, 0.838805413123210110, 0.838778190507947110, 0.838750965795738050, 0.838723738986652090, 0.838696510080756850, 0.838669279078120280, +0.838642045978810540, 0.838614810782895680, 0.838587573490443770, 0.838560334101522420, 0.838533092616200680, 0.838505849034546280, 0.838478603356627270, 0.838451355582511830, +0.838424105712267890, 0.838396853745963620, 0.838369599683667310, 0.838342343525446560, 0.838315085271370330, 0.838287824921506440, 0.838260562475923070, 0.838233297934688150, +0.838206031297870080, 0.838178762565536920, 0.838151491737756830, 0.838124218814597530, 0.838096943796128090, 0.838069666682416450, 0.838042387473530550, 0.838015106169538670, +0.837987822770509090, 0.837960537276509880, 0.837933249687608850, 0.837905960003875180, 0.837878668225376710, 0.837851374352181490, 0.837824078384357800, 0.837796780321974020, +0.837769480165098220, 0.837742177913798680, 0.837714873568143230, 0.837687567128201140, 0.837660258594040140, 0.837632947965728400, 0.837605635243334420, 0.837578320426926260, +0.837551003516572300, 0.837523684512340380, 0.837496363414299670, 0.837469040222518110, 0.837441714937063990, 0.837414387558005460, 0.837387058085411030, 0.837359726519348980, +0.837332392859887590, 0.837305057107094800, 0.837277719261039780, 0.837250379321790470, 0.837223037289415160, 0.837195693163982350, 0.837168346945560300, 0.837140998634217310, +0.837113648230021880, 0.837086295733041830, 0.837058941143346560, 0.837031584461003900, 0.837004225686082240, 0.836976864818650080, 0.836949501858775700, 0.836922136806527610, +0.836894769661973740, 0.836867400425183370, 0.836840029096224460, 0.836812655675165610, 0.836785280162074980, 0.836757902557021200, 0.836730522860072660, 0.836703141071297840, +0.836675757190764700, 0.836648371218542630, 0.836620983154699570, 0.836593592999304140, 0.836566200752424720, 0.836538806414129700, 0.836511409984487810, 0.836484011463567320, +0.836456610851436300, 0.836429208148164240, 0.836401803353819200, 0.836374396468469560, 0.836346987492184060, 0.836319576425031070, 0.836292163267079000, 0.836264748018396230, +0.836237330679051930, 0.836209911249114370, 0.836182489728652060, 0.836155066117733490, 0.836127640416427180, 0.836100212624801830, 0.836072782742925960, 0.836045350770867610, +0.836017916708696410, 0.835990480556480400, 0.835963042314288310, 0.835935601982188410, 0.835908159560249660, 0.835880715048540450, 0.835853268447128930, 0.835825819756084830, +0.835798368975476100, 0.835770916105371460, 0.835743461145839530, 0.835716004096948910, 0.835688544958768320, 0.835661083731366380, 0.835633620414811260, 0.835606155009172570, +0.835578687514518470, 0.835551217930917690, 0.835523746258438840, 0.835496272497150530, 0.835468796647121700, 0.835441318708420750, 0.835413838681116070, 0.835386356565277270, +0.835358872360972620, 0.835331386068270730, 0.835303897687240450, 0.835276407217950380, 0.835248914660469240, 0.835221420014865430, 0.835193923281208450, 0.835166424459566790, +0.835138923550008960, 0.835111420552603900, 0.835083915467420220, 0.835056408294526760, 0.835028899033992360, 0.835001387685885170, 0.834973874250275030, 0.834946358727230110, +0.834918841116819350, 0.834891321419111490, 0.834863799634175340, 0.834836275762079640, 0.834808749802893320, 0.834781221756684570, 0.834753691623523310, 0.834726159403477830, +0.834698625096616960, 0.834671088703009430, 0.834643550222724300, 0.834616009655830270, 0.834588467002395640, 0.834560922262490460, 0.834533375436182890, 0.834505826523541880, +0.834478275524636270, 0.834450722439535000, 0.834423167268307010, 0.834395610011021030, 0.834368050667745550, 0.834340489238550420, 0.834312925723504020, 0.834285360122675400, +0.834257792436133290, 0.834230222663946750, 0.834202650806184720, 0.834175076862915480, 0.834147500834209080, 0.834119922720133910, 0.834092342520758920, 0.834064760236153060, +0.834037175866385370, 0.834009589411524700, 0.833982000871639980, 0.833954410246799950, 0.833926817537074210, 0.833899222742531480, 0.833871625863240820, 0.833844026899270950, +0.833816425850691050, 0.833788822717570040, 0.833761217499977000, 0.833733610197980420, 0.833706000811650360, 0.833678389341055310, 0.833650775786264230, 0.833623160147346280, +0.833595542424370280, 0.833567922617405640, 0.833540300726520520, 0.833512676751785200, 0.833485050693268170, 0.833457422551038610, 0.833429792325165340, 0.833402160015717760, +0.833374525622764590, 0.833346889146375220, 0.833319250586618150, 0.833291609943563440, 0.833263967217279690, 0.833236322407835960, 0.833208675515301530, 0.833181026539745350, +0.833153375481236580, 0.833125722339844500, 0.833098067115637500, 0.833070409808685850, 0.833042750419058180, 0.833015088946823630, 0.832987425392051390, 0.832959759754810510, +0.832932092035170270, 0.832904422233199380, 0.832876750348967800, 0.832849076382544460, 0.832821400333998430, 0.832793722203398760, 0.832766041990814940, 0.832738359696315930, +0.832710675319971010, 0.832682988861848990, 0.832655300322019950, 0.832627609700552610, 0.832599916997516340, 0.832572222212980220, 0.832544525347013510, 0.832516826399685490, +0.832489125371065010, 0.832461422261222110, 0.832433717070225730, 0.832406009798145050, 0.832378300445049350, 0.832350589011007780, 0.832322875496089850, 0.832295159900364730, +0.832267442223901140, 0.832239722466769580, 0.832212000629038550, 0.832184276710777660, 0.832156550712055960, 0.832128822632942970, 0.832101092473507940, 0.832073360233820060, +0.832045625913948370, 0.832017889513963160, 0.831990151033933150, 0.831962410473927720, 0.831934667834016370, 0.831906923114268280, 0.831879176314752940, 0.831851427435539080, +0.831823676476697190, 0.831795923438296110, 0.831768168320405230, 0.831740411123093940, 0.831712651846431620, 0.831684890490487660, 0.831657127055331460, 0.831629361541031950, +0.831601593947659530, 0.831573824275283150, 0.831546052523972290, 0.831518278693796130, 0.831490502784824390, 0.831462724797126350, 0.831434944730770950, 0.831407162585828810, +0.831379378362368640, 0.831351592060460170, 0.831323803680172560, 0.831296013221575540, 0.831268220684738490, 0.831240426069730810, 0.831212629376621660, 0.831184830605481430, +0.831157029756379060, 0.831129226829384060, 0.831101421824566140, 0.831073614741994590, 0.831045805581739020, 0.831017994343868920, 0.830990181028453350, 0.830962365635562810, +0.830934548165266350, 0.830906728617633590, 0.830878906992733920, 0.830851083290637060, 0.830823257511412390, 0.830795429655129200, 0.830767599721857870, 0.830739767711667580, +0.830711933624627810, 0.830684097460808180, 0.830656259220278410, 0.830628418903107900, 0.830600576509366470, 0.830572732039122960, 0.830544885492448200, 0.830517036869411250, +0.830489186170081610, 0.830461333394529100, 0.830433478542823120, 0.830405621615033620, 0.830377762611229970, 0.830349901531481470, 0.830322038375858610, 0.830294173144430770, +0.830266305837267460, 0.830238436454438290, 0.830210564996013090, 0.830182691462061580, 0.830154815852652720, 0.830126938167857430, 0.830099058407744670, 0.830071176572384380, +0.830043292661846070, 0.830015406676199550, 0.829987518615514450, 0.829959628479860710, 0.829931736269307270, 0.829903841983924970, 0.829875945623783200, 0.829848047188951440, +0.829820146679499660, 0.829792244095497460, 0.829764339437014660, 0.829736432704120450, 0.829708523896885760, 0.829680613015379650, 0.829652700059672070, 0.829624785029832830, +0.829596867925931460, 0.829568948748037990, 0.829541027496222160, 0.829513104170553350, 0.829485178771102170, 0.829457251297938010, 0.829429321751130820, 0.829401390130750320, +0.829373456436866330, 0.829345520669548590, 0.829317582828867140, 0.829289642914891270, 0.829261700927691800, 0.829233756867338020, 0.829205810733899870, 0.829177862527447180, +0.829149912248049790, 0.829121959895777750, 0.829094005470700220, 0.829066048972888160, 0.829038090402410940, 0.829010129759338630, 0.828982167043740840, 0.828954202255687720, +0.828926235395249120, 0.828898266462494980, 0.828870295457494580, 0.828842322380318960, 0.828814347231037530, 0.828786370009720220, 0.828758390716436980, 0.828730409351257750, +0.828702425914252580, 0.828674440405491320, 0.828646452825043460, 0.828618463172979940, 0.828590471449370260, 0.828562477654284370, 0.828534481787792320, 0.828506483849964060, +0.828478483840869640, 0.828450481760578450, 0.828422477609161540, 0.828394471386688540, 0.828366463093229250, 0.828338452728853870, 0.828310440293632320, 0.828282425787634780, +0.828254409210931080, 0.828226390563590820, 0.828198369845685180, 0.828170347057283540, 0.828142322198456070, 0.828114295269272720, 0.828086266269803750, 0.828058235200119010, +0.828030202060288210, 0.828002166850382420, 0.827974129570471230, 0.827946090220624710, 0.827918048800913020, 0.827890005311406110, 0.827861959752174250, 0.827833912123287500, +0.827805862424815350, 0.827777810656829200, 0.827749756819398440, 0.827721700912593230, 0.827693642936483950, 0.827665582891140450, 0.827637520776632880, 0.827609456593031640, +0.827581390340406340, 0.827553322018827920, 0.827525251628366210, 0.827497179169091490, 0.827469104641073700, 0.827441028044383240, 0.827412949379090160, 0.827384868645264170, +0.827356785842976560, 0.827328700972296940, 0.827300614033295580, 0.827272525026042760, 0.827244433950608540, 0.827216340807063300, 0.827188245595477100, 0.827160148315919890, +0.827132048968462820, 0.827103947553175510, 0.827075844070128460, 0.827047738519391730, 0.827019630901035700, 0.826991521215130530, 0.826963409461746620, 0.826935295640953690, +0.826907179752823020, 0.826879061797424320, 0.826850941774827990, 0.826822819685104400, 0.826794695528323630, 0.826766569304556280, 0.826738441013871840, 0.826710310656341930, +0.826682178232036160, 0.826654043741025020, 0.826625907183378690, 0.826597768559167670, 0.826569627868462110, 0.826541485111332630, 0.826513340287848840, 0.826485193398082240, +0.826457044442102660, 0.826428893419980380, 0.826400740331786010, 0.826372585177589710, 0.826344427957461880, 0.826316268671472560, 0.826288107319693040, 0.826259943902193370, +0.826231778419043720, 0.826203610870314690, 0.826175441256076560, 0.826147269576399830, 0.826119095831355010, 0.826090920021011810, 0.826062742145441950, 0.826034562204715160, +0.826006380198902050, 0.825978196128072880, 0.825950009992298280, 0.825921821791648640, 0.825893631526194440, 0.825865439196005640, 0.825837244801153840, 0.825809048341708870, +0.825780849817741250, 0.825752649229321570, 0.825724446576520220, 0.825696241859407710, 0.825668035078054200, 0.825639826232530960, 0.825611615322908280, 0.825583402349256530, +0.825555187311646230, 0.825526970210148090, 0.825498751044832390, 0.825470529815769850, 0.825442306523030520, 0.825414081166685910, 0.825385853746806060, 0.825357624263461600, +0.825329392716723120, 0.825301159106661130, 0.825272923433346240, 0.825244685696848950, 0.825216445897239640, 0.825188204034589590, 0.825159960108968970, 0.825131714120448610, +0.825103466069098790, 0.825075215954990450, 0.825046963778193980, 0.825018709538779650, 0.824990453236819080, 0.824962194872382320, 0.824933934445540080, 0.824905671956363000, +0.824877407404921770, 0.824849140791287020, 0.824820872115529350, 0.824792601377719150, 0.824764328577927810, 0.824736053716225710, 0.824707776792683370, 0.824679497807371710, +0.824651216760361240, 0.824622933651722790, 0.824594648481526530, 0.824566361249844060, 0.824538071956745780, 0.824509780602302180, 0.824481487186584210, 0.824453191709662580, +0.824424894171607910, 0.824396594572490930, 0.824368292912382120, 0.824339989191352980, 0.824311683409473920, 0.824283375566815520, 0.824255065663448860, 0.824226753699444430, +0.824198439674873160, 0.824170123589805790, 0.824141805444312590, 0.824113485238465390, 0.824085162972334470, 0.824056838645990660, 0.824028512259504690, 0.824000183812947480, +0.823971853306389890, 0.823943520739902070, 0.823915186113555960, 0.823886849427421850, 0.823858510681570680, 0.823830169876073270, 0.823801827011000350, 0.823773482086422870, +0.823745135102411760, 0.823716786059037310, 0.823688434956371340, 0.823660081794484240, 0.823631726573446970, 0.823603369293330450, 0.823575009954205410, 0.823546648556142900, +0.823518285099213760, 0.823489919583488490, 0.823461552009038810, 0.823433182375935320, 0.823404810684248870, 0.823376436934050270, 0.823348061125410700, 0.823319683258400990, +0.823291303333091530, 0.823262921349554260, 0.823234537307859780, 0.823206151208078940, 0.823177763050282670, 0.823149372834542040, 0.823120980560927970, 0.823092586229511420, +0.823064189840363000, 0.823035791393554430, 0.823007390889156530, 0.822978988327240150, 0.822950583707876220, 0.822922177031135900, 0.822893768297090040, 0.822865357505809360, +0.822836944657365790, 0.822808529751829720, 0.822780112789272540, 0.822751693769764870, 0.822723272693378080, 0.822694849560183130, 0.822666424370250950, 0.822637997123652260, +0.822609567820459130, 0.822581136460742050, 0.822552703044572180, 0.822524267572020460, 0.822495830043158070, 0.822467390458056170, 0.822438948816785810, 0.822410505119417490, +0.822382059366023490, 0.822353611556674300, 0.822325161691441100, 0.822296709770394930, 0.822268255793607070, 0.822239799761148580, 0.822211341673090070, 0.822182881529503580, +0.822154419330460070, 0.822125955076030370, 0.822097488766285970, 0.822069020401297700, 0.822040549981136850, 0.822012077505874680, 0.821983602975581820, 0.821955126390330530, +0.821926647750191310, 0.821898167055235440, 0.821869684305534310, 0.821841199501158860, 0.821812712642180370, 0.821784223728669660, 0.821755732760698910, 0.821727239738338830, +0.821698744661660600, 0.821670247530735590, 0.821641748345634860, 0.821613247106429910, 0.821584743813191690, 0.821556238465991130, 0.821527731064900510, 0.821499221609990560, +0.821470710101332550, 0.821442196538997860, 0.821413680923057550, 0.821385163253583130, 0.821356643530645750, 0.821328121754316240, 0.821299597924666890, 0.821271072041768630, +0.821242544105692640, 0.821214014116510400, 0.821185482074292980, 0.821156947979111980, 0.821128411831038020, 0.821099873630143580, 0.821071333376499400, 0.821042791070176970, +0.821014246711247450, 0.820985700299782460, 0.820957151835853050, 0.820928601319530940, 0.820900048750886620, 0.820871494129992830, 0.820842937456920270, 0.820814378731740350, +0.820785817954524540, 0.820757255125344140, 0.820728690244270640, 0.820700123311375320, 0.820671554326729340, 0.820642983290404860, 0.820614410202472940, 0.820585835063004980, +0.820557257872072450, 0.820528678629746770, 0.820500097336099410, 0.820471513991201330, 0.820442928595124910, 0.820414341147941210, 0.820385751649721720, 0.820357160100537720, +0.820328566500460930, 0.820299970849562630, 0.820271373147914430, 0.820242773395587380, 0.820214171592653860, 0.820185567739184830, 0.820156961835252000, 0.820128353880926640, +0.820099743876280480, 0.820071131821384910, 0.820042517716311090, 0.820013901561131410, 0.819985283355916920, 0.819956663100739340, 0.819928040795670050, 0.819899416440780680, +0.819870790036142720, 0.819842161581827880, 0.819813531077907000, 0.819784898524452910, 0.819756263921536550, 0.819727627269229430, 0.819698988567603370, 0.819670347816729760, +0.819641705016680320, 0.819613060167526660, 0.819584413269339840, 0.819555764322192350, 0.819527113326155580, 0.819498460281301020, 0.819469805187700300, 0.819441148045425010, +0.819412488854546870, 0.819383827615137060, 0.819355164327268180, 0.819326498991011400, 0.819297831606438320, 0.819269162173620670, 0.819240490692630050, 0.819211817163538300, +0.819183141586417030, 0.819154463961337290, 0.819125784288372020, 0.819097102567592160, 0.819068418799069660, 0.819039732982876020, 0.819011045119083180, 0.818982355207762640, +0.818953663248986220, 0.818924969242825100, 0.818896273189352100, 0.818867575088638390, 0.818838874940755800, 0.818810172745775940, 0.818781468503770760, 0.818752762214811860, +0.818724053878970510, 0.818695343496319560, 0.818666631066930270, 0.818637916590874370, 0.818609200068223690, 0.818580481499050050, 0.818551760883425070, 0.818523038221420810, +0.818494313513108420, 0.818465586758560740, 0.818436857957849150, 0.818408127111045380, 0.818379394218221260, 0.818350659279448720, 0.818321922294799500, 0.818293183264344970, +0.818264442188157970, 0.818235699066309890, 0.818206953898872550, 0.818178206685917790, 0.818149457427517550, 0.818120706123743660, 0.818091952774668060, 0.818063197380362040, +0.818034439940898530, 0.818005680456348920, 0.817976918926785030, 0.817948155352278940, 0.817919389732902460, 0.817890622068727420, 0.817861852359825890, 0.817833080606269250, +0.817804306808130320, 0.817775530965480720, 0.817746753078392290, 0.817717973146936950, 0.817689191171186660, 0.817660407151213350, 0.817631621087088640, 0.817602832978885250, +0.817574042826674900, 0.817545250630529410, 0.817516456390520730, 0.817487660106720910, 0.817458861779202020, 0.817430061408035980, 0.817401258993294190, 0.817372454535049810, +0.817343648033374340, 0.817314839488339720, 0.817286028900017890, 0.817257216268481130, 0.817228401593801280, 0.817199584876050490, 0.817170766115300150, 0.817141945311623430, +0.817113122465091820, 0.817084297575777390, 0.817055470643752280, 0.817026641669088450, 0.816997810651858060, 0.816968977592132610, 0.816940142489985140, 0.816911305345487390, +0.816882466158711410, 0.816853624929729240, 0.816824781658613050, 0.816795936345434790, 0.816767088990266840, 0.816738239593180590, 0.816709388154249210, 0.816680534673544400, +0.816651679151138230, 0.816622821587102870, 0.816593961981510460, 0.816565100334433190, 0.816536236645942550, 0.816507370916111920, 0.816478503145012800, 0.816449633332717470, +0.816420761479298100, 0.816391887584826730, 0.816363011649375750, 0.816334133673017100, 0.816305253655822740, 0.816276371597865700, 0.816247487499217720, 0.816218601359951060, +0.816189713180137890, 0.816160822959850370, 0.816131930699160900, 0.816103036398141520, 0.816074140056864070, 0.816045241675401710, 0.816016341253826380, 0.815987438792210140, +0.815958534290625260, 0.815929627749144130, 0.815900719167838790, 0.815871808546781320, 0.815842895886044750, 0.815813981185700920, 0.815785064445822110, 0.815756145666480690, +0.815727224847748960, 0.815698301989699060, 0.815669377092403500, 0.815640450155933890, 0.815611521180363730, 0.815582590165764730, 0.815553657112209280, 0.815524722019769670, +0.815495784888518370, 0.815466845718527460, 0.815437904509869530, 0.815408961262616310, 0.815380015976841070, 0.815351068652615970, 0.815322119290013080, 0.815293167889105000, +0.815264214449963890, 0.815235258972662360, 0.815206301457272020, 0.815177341903866590, 0.815148380312517680, 0.815119416683297900, 0.815090451016279530, 0.815061483311535050, +0.815032513569136860, 0.815003541789157460, 0.814974567971668560, 0.814945592116743890, 0.814916614224455160, 0.814887634294874870, 0.814858652328075530, 0.814829668324129620, +0.814800682283109530, 0.814771694205087100, 0.814742704090136050, 0.814713711938328200, 0.814684717749736160, 0.814655721524432220, 0.814626723262488970, 0.814597722963978920, +0.814568720628974670, 0.814539716257547950, 0.814510709849772590, 0.814481701405720400, 0.814452690925463910, 0.814423678409075810, 0.814394663856628400, 0.814365647268194380, +0.814336628643846260, 0.814307607983655980, 0.814278585287697250, 0.814249560556042030, 0.814220533788762910, 0.814191504985932510, 0.814162474147623330, 0.814133441273907970, +0.814104406364858480, 0.814075369420548480, 0.814046330441050010, 0.814017289426435810, 0.813988246376778360, 0.813959201292150160, 0.813930154172624150, 0.813901105018272620, +0.813872053829167940, 0.813843000605383500, 0.813813945346991700, 0.813784888054064900, 0.813755828726675960, 0.813726767364897460, 0.813697703968802030, 0.813668638538461720, +0.813639571073950460, 0.813610501575340320, 0.813581430042703780, 0.813552356476113680, 0.813523280875642740, 0.813494203241363680, 0.813465123573348990, 0.813436041871670960, +0.813406958136403400, 0.813377872367618490, 0.813348784565388840, 0.813319694729787270, 0.813290602860886390, 0.813261508958759040, 0.813232413023477930, 0.813203315055115230, +0.813174215053744760, 0.813145113019438810, 0.813116008952270100, 0.813086902852311330, 0.813057794719635240, 0.813028684554314760, 0.812999572356421950, 0.812970458126030860, +0.812941341863213540, 0.812912223568042820, 0.812883103240591650, 0.812853980880932640, 0.812824856489138710, 0.812795730065282610, 0.812766601609436700, 0.812737471121674830, +0.812708338602069260, 0.812679204050692830, 0.812650067467618360, 0.812620928852918810, 0.812591788206666890, 0.812562645528935420, 0.812533500819796920, 0.812504354079325200, +0.812475205307592540, 0.812446054504671890, 0.812416901670636070, 0.812387746805558030, 0.812358589909510600, 0.812329430982566160, 0.812300270024798770, 0.812271107036280580, +0.812241942017084770, 0.812212774967283950, 0.812183605886951270, 0.812154434776159560, 0.812125261634981780, 0.812096086463490300, 0.812066909261759060, 0.812037730029860680, +0.812008548767867880, 0.811979365475853810, 0.811950180153891200, 0.811920992802053210, 0.811891803420412230, 0.811862612009042190, 0.811833418568015720, 0.811804223097405630, +0.811775025597284980, 0.811745826067726830, 0.811716624508804110, 0.811687420920589760, 0.811658215303156410, 0.811629007656577970, 0.811599797980927070, 0.811570586276276650, +0.811541372542699760, 0.811512156780269440, 0.811482938989058770, 0.811453719169140770, 0.811424497320587860, 0.811395273443474290, 0.811366047537872560, 0.811336819603855620, +0.811307589641496630, 0.811278357650868750, 0.811249123632044930, 0.811219887585097780, 0.811190649510101450, 0.811161409407128550, 0.811132167276252040, 0.811102923117545170, +0.811073676931080900, 0.811044428716932500, 0.811015178475173130, 0.810985926205875170, 0.810956671909112910, 0.810927415584958950, 0.810898157233486570, 0.810868896854768710, +0.810839634448878630, 0.810810370015889510, 0.810781103555874410, 0.810751835068906020, 0.810722564555058530, 0.810693292014404760, 0.810664017447017660, 0.810634740852970490, +0.810605462232336540, 0.810576181585188960, 0.810546898911600370, 0.810517614211644920, 0.810488327485395570, 0.810459038732925460, 0.810429747954307670, 0.810400455149615560, +0.810371160318922200, 0.810341863462300970, 0.810312564579824700, 0.810283263671567440, 0.810253960737602030, 0.810224655778001730, 0.810195348792839720, 0.810166039782189370, +0.810136728746123970, 0.810107415684716230, 0.810078100598040420, 0.810048783486169380, 0.810019464349176380, 0.809990143187134690, 0.809960820000117710, 0.809931494788198700, +0.809902167551450840, 0.809872838289947160, 0.809843507003761840, 0.809814173692967710, 0.809784838357638260, 0.809755500997846660, 0.809726161613666280, 0.809696820205170530, +0.809667476772432670, 0.809638131315525640, 0.809608783834523840, 0.809579434329499970, 0.809550082800527650, 0.809520729247680040, 0.809491373671030630, 0.809462016070652820, +0.809432656446619440, 0.809403294799004860, 0.809373931127882140, 0.809344565433324560, 0.809315197715405500, 0.809285827974198570, 0.809256456209776930, 0.809227082422214310, +0.809197706611583300, 0.809168328777958630, 0.809138948921413140, 0.809109567042020310, 0.809080183139853530, 0.809050797214986290, 0.809021409267492110, 0.808992019297444240, +0.808962627304915970, 0.808933233289981570, 0.808903837252714200, 0.808874439193187130, 0.808845039111473980, 0.808815637007648250, 0.808786232881783420, 0.808756826733952440, +0.808727418564229920, 0.808698008372688900, 0.808668596159402900, 0.808639181924445280, 0.808609765667889780, 0.808580347389809880, 0.808550927090279090, 0.808521504769370570, +0.808492080427158700, 0.808462654063716650, 0.808433225679117910, 0.808403795273436200, 0.808374362846744910, 0.808344928399117760, 0.808315491930627790, 0.808286053441349630, +0.808256612931356200, 0.808227170400721340, 0.808197725849518540, 0.808168279277821530, 0.808138830685703690, 0.808109380073238850, 0.808079927440499950, 0.808050472787561810, +0.808021016114497500, 0.807991557421380620, 0.807962096708284890, 0.807932633975283810, 0.807903169222451310, 0.807873702449860790, 0.807844233657585510, 0.807814762845700200, +0.807785290014277900, 0.807755815163392340, 0.807726338293117350, 0.807696859403526530, 0.807667378494693500, 0.807637895566691520, 0.807608410619595320, 0.807578923653478050, +0.807549434668413560, 0.807519943664475440, 0.807490450641737520, 0.807460955600273420, 0.807431458540156850, 0.807401959461461200, 0.807372458364261190, 0.807342955248629980, +0.807313450114641510, 0.807283942962369270, 0.807254433791887220, 0.807224922603269060, 0.807195409396588630, 0.807165894171919200, 0.807136376929335490, 0.807106857668910880, +0.807077336390719100, 0.807047813094833980, 0.807018287781329220, 0.806988760450278900, 0.806959231101756050, 0.806929699735835730, 0.806900166352591100, 0.806870630952096100, +0.806841093534424570, 0.806811554099650220, 0.806782012647846990, 0.806752469179088720, 0.806722923693448780, 0.806693376191002120, 0.806663826671821900, 0.806634275135982180, +0.806604721583556780, 0.806575166014619540, 0.806545608429244390, 0.806516048827504720, 0.806486487209475470, 0.806456923575229910, 0.806427357924842100, 0.806397790258385980, +0.806368220575935270, 0.806338648877564010, 0.806309075163346160, 0.806279499433355080, 0.806249921687665850, 0.806220341926351840, 0.806190760149486870, 0.806161176357145020, +0.806131590549400200, 0.806102002726326480, 0.806072412887997690, 0.806042821034487320, 0.806013227165870540, 0.805983631282220610, 0.805954033383611600, 0.805924433470117550, +0.805894831541812410, 0.805865227598770110, 0.805835621641064370, 0.805806013668769920, 0.805776403681960570, 0.805746791680710170, 0.805717177665092770, 0.805687561635182400, +0.805657943591053250, 0.805628323532779130, 0.805598701460433770, 0.805569077374092110, 0.805539451273827760, 0.805509823159714760, 0.805480193031827160, 0.805450560890239250, +0.805420926735024860, 0.805391290566257580, 0.805361652384012580, 0.805332012188363480, 0.805302369979384420, 0.805272725757149370, 0.805243079521732460, 0.805213431273207990, +0.805183781011649780, 0.805154128737131770, 0.805124474449728790, 0.805094818149514780, 0.805065159836563570, 0.805035499510949550, 0.805005837172746760, 0.804976172822029380, +0.804946506458871560, 0.804916838083347020, 0.804887167695530810, 0.804857495295496770, 0.804827820883318950, 0.804798144459071610, 0.804768466022828810, 0.804738785574664940, +0.804709103114653600, 0.804679418642869960, 0.804649732159387730, 0.804620043664281300, 0.804590353157624620, 0.804560660639492160, 0.804530966109958000, 0.804501269569096510, +0.804471571016981190, 0.804441870453687540, 0.804412167879289260, 0.804382463293860540, 0.804352756697475630, 0.804323048090208830, 0.804293337472134380, 0.804263624843326590, +0.804233910203859260, 0.804204193553807680, 0.804174474893245560, 0.804144754222247290, 0.804115031540887150, 0.804085306849239400, 0.804055580147378430, 0.804025851435377970, +0.803996120713313390, 0.803966387981258520, 0.803936653239287650, 0.803906916487475140, 0.803877177725895400, 0.803847436954622680, 0.803817694173731390, 0.803787949383295340, +0.803758202583389920, 0.803728453774088970, 0.803698702955466970, 0.803668950127598090, 0.803639195290556940, 0.803609438444417790, 0.803579679589254470, 0.803549918725142480, +0.803520155852155750, 0.803490390970368560, 0.803460624079855410, 0.803430855180690790, 0.803401084272948870, 0.803371311356704370, 0.803341536432031100, 0.803311759499004350, +0.803281980557698280, 0.803252199608187280, 0.803222416650545830, 0.803192631684848220, 0.803162844711169170, 0.803133055729582930, 0.803103264740163470, 0.803073471742986490, +0.803043676738125710, 0.803013879725655850, 0.802984080705651190, 0.802954279678186440, 0.802924476643335880, 0.802894671601173670, 0.802864864551775300, 0.802835055495214830, +0.802805244431566640, 0.802775431360905340, 0.802745616283305430, 0.802715799198841510, 0.802685980107588180, 0.802656159009619290, 0.802626335905010540, 0.802596510793835980, +0.802566683676170120, 0.802536854552087450, 0.802507023421662800, 0.802477190284970550, 0.802447355142085320, 0.802417517993081140, 0.802387678838033750, 0.802357837677017070, +0.802327994510105840, 0.802298149337374640, 0.802268302158898110, 0.802238452974750720, 0.802208601785006750, 0.802178748589741810, 0.802148893389029950, 0.802119036182945890, +0.802089176971564230, 0.802059315754959590, 0.802029452533206790, 0.801999587306380210, 0.801969720074554250, 0.801939850837804390, 0.801909979596205020, 0.801880106349830650, +0.801850231098755970, 0.801820353843055830, 0.801790474582804720, 0.801760593318076920, 0.801730710048948140, 0.801700824775492650, 0.801670937497785060, 0.801641048215900100, +0.801611156929912580, 0.801581263639897120, 0.801551368345928440, 0.801521471048080910, 0.801491571746430150, 0.801461670441050540, 0.801431767132016800, 0.801401861819403540, +0.801371954503285580, 0.801342045183737860, 0.801312133860835000, 0.801282220534651260, 0.801252305205262470, 0.801222387872742910, 0.801192468537167410, 0.801162547198610800, +0.801132623857147670, 0.801102698512853100, 0.801072771165801220, 0.801042841816068000, 0.801012910463727580, 0.800982977108855020, 0.800953041751524930, 0.800923104391812140, +0.800893165029791690, 0.800863223665538300, 0.800833280299126370, 0.800803334930631720, 0.800773387560128840, 0.800743438187692340, 0.800713486813397380, 0.800683533437318570, +0.800653578059530970, 0.800623620680109500, 0.800593661299128350, 0.800563699916663650, 0.800533736532789700, 0.800503771147581420, 0.800473803761113660, 0.800443834373461340, +0.800413862984699520, 0.800383889594902480, 0.800353914204146260, 0.800323936812505240, 0.800293957420054380, 0.800263976026868720, 0.800233992633022970, 0.800204007238592310, +0.800174019843651660, 0.800144030448275420, 0.800114039052539640, 0.800084045656518690, 0.800054050260287640, 0.800024052863921530, 0.799994053467495300, 0.799964052071083900, +0.799934048674761810, 0.799904043278605200, 0.799874035882688350, 0.799844026487086520, 0.799814015091874660, 0.799784001697127600, 0.799753986302920720, 0.799723968909328730, +0.799693949516426360, 0.799663928124289660, 0.799633904732993120, 0.799603879342611790, 0.799573851953220840, 0.799543822564895200, 0.799513791177710040, 0.799483757791740410, +0.799453722407060810, 0.799423685023747390, 0.799393645641874870, 0.799363604261518200, 0.799333560882752430, 0.799303515505652820, 0.799273468130294430, 0.799243418756751870, +0.799213367385101290, 0.799183314015417200, 0.799153258647774980, 0.799123201282249450, 0.799093141918916010, 0.799063080557849690, 0.799033017199125670, 0.799002951842818670, +0.798972884489004720, 0.798942815137758560, 0.798912743789155330, 0.798882670443270330, 0.798852595100178590, 0.798822517759955390, 0.798792438422675890, 0.798762357088414810, +0.798732273757248310, 0.798702188429251110, 0.798672101104498490, 0.798642011783065600, 0.798611920465027710, 0.798581827150460000, 0.798551731839437170, 0.798521634532035510, +0.798491535228329830, 0.798461433928395300, 0.798431330632307090, 0.798401225340140690, 0.798371118051971140, 0.798341008767873840, 0.798310897487923500, 0.798280784212196390, +0.798250668940767350, 0.798220551673711640, 0.798190432411104540, 0.798160311153021440, 0.798130187899537490, 0.798100062650727530, 0.798069935406667930, 0.798039806167433530, +0.798009674933099600, 0.797979541703741520, 0.797949406479434580, 0.797919269260254030, 0.797889130046275490, 0.797858988837573450, 0.797828845634224510, 0.797798700436303410, +0.797768553243885630, 0.797738404057046440, 0.797708252875861220, 0.797678099700405370, 0.797647944530754270, 0.797617787366982740, 0.797587628209167400, 0.797557467057382840, +0.797527303911704790, 0.797497138772208290, 0.797466971638969070, 0.797436802512062390, 0.797406631391563200, 0.797376458277547880, 0.797346283170091490, 0.797316106069269390, +0.797285926975156990, 0.797255745887829770, 0.797225562807363230, 0.797195377733832760, 0.797165190667313280, 0.797135001607881420, 0.797104810555612000, 0.797074617510580510, +0.797044422472862560, 0.797014225442533530, 0.796984026419668920, 0.796953825404343790, 0.796923622396634500, 0.796893417396616230, 0.796863210404364470, 0.796833001419954610, +0.796802790443462250, 0.796772577474963000, 0.796742362514532230, 0.796712145562245010, 0.796681926618177940, 0.796651705682406060, 0.796621482755004990, 0.796591257836050120, +0.796561030925617250, 0.796530802023781680, 0.796500571130619120, 0.796470338246204610, 0.796440103370614770, 0.796409866503924760, 0.796379627646209950, 0.796349386797546190, +0.796319143958008850, 0.796288899127673750, 0.796258652306615860, 0.796228403494911860, 0.796198152692636830, 0.796167899899866470, 0.796137645116676280, 0.796107388343141990, +0.796077129579339290, 0.796046868825343700, 0.796016606081230480, 0.795986341347076130, 0.795956074622956140, 0.795925805908945790, 0.795895535205121020, 0.795865262511557310, +0.795834987828330620, 0.795804711155516320, 0.795774432493189690, 0.795744151841427660, 0.795713869200305180, 0.795683584569897960, 0.795653297950281830, 0.795623009341532410, +0.795592718743725500, 0.795562426156936290, 0.795532131581241590, 0.795501835016716450, 0.795471536463436820, 0.795441235921478310, 0.795410933390916620, 0.795380628871827700, +0.795350322364287270, 0.795320013868370370, 0.795289703384154060, 0.795259390911713380, 0.795229076451124280, 0.795198760002462590, 0.795168441565803910, 0.795138121141224060, +0.795107798728798440, 0.795077474328603870, 0.795047147940715630, 0.795016819565209420, 0.794986489202161310, 0.794956156851646890, 0.794925822513742110, 0.794895486188522790, +0.794865147876064100, 0.794834807576443200, 0.794804465289735250, 0.794774121016016080, 0.794743774755361730, 0.794713426507847820, 0.794683076273550390, 0.794652724052545280, +0.794622369844907860, 0.794592013650714970, 0.794561655470042090, 0.794531295302965070, 0.794500933149559830, 0.794470569009902320, 0.794440202884068250, 0.794409834772133230, +0.794379464674174090, 0.794349092590266310, 0.794318718520485860, 0.794288342464908540, 0.794257964423610410, 0.794227584396667300, 0.794197202384155250, 0.794166818386149780, +0.794136432402727690, 0.794106044433964490, 0.794075654479936220, 0.794045262540718830, 0.794014868616388260, 0.793984472707020550, 0.793954074812691650, 0.793923674933477040, +0.793893273069453790, 0.793862869220697260, 0.793832463387283640, 0.793802055569288840, 0.793771645766788940, 0.793741233979859960, 0.793710820208577190, 0.793680404453018020, +0.793649986713257930, 0.793619566989372750, 0.793589145281438650, 0.793558721589531670, 0.793528295913727980, 0.793497868254103510, 0.793467438610733770, 0.793437006983696010, +0.793406573373065750, 0.793376137778919130, 0.793345700201332100, 0.793315260640380830, 0.793284819096141350, 0.793254375568689270, 0.793223930058101880, 0.793193482564454650, +0.793163033087823650, 0.793132581628285150, 0.793102128185915080, 0.793071672760789830, 0.793041215352985330, 0.793010755962577200, 0.792980294589642810, 0.792949831234257660, +0.792919365896497920, 0.792888898576439740, 0.792858429274159390, 0.792827957989732930, 0.792797484723236520, 0.792767009474745880, 0.792736532244338270, 0.792706053032089410, +0.792675571838075350, 0.792645088662372380, 0.792614603505056640, 0.792584116366204410, 0.792553627245891400, 0.792523136144194780, 0.792492643061190380, 0.792462147996954360, +0.792431650951562980, 0.792401151925092420, 0.792370650917619050, 0.792340147929219030, 0.792309642959968090, 0.792279136009943600, 0.792248627079221170, 0.792218116167877300, +0.792187603275988140, 0.792157088403629860, 0.792126571550878960, 0.792096052717811580, 0.792065531904503570, 0.792035009111032310, 0.792004484337473390, 0.791973957583903320, +0.791943428850398480, 0.791912898137034920, 0.791882365443889120, 0.791851830771036940, 0.791821294118555730, 0.791790755486521220, 0.791760214875009800, 0.791729672284097850, +0.791699127713861860, 0.791668581164377880, 0.791638032635722520, 0.791607482127971610, 0.791576929641202410, 0.791546375175490980, 0.791515818730913480, 0.791485260307546510, +0.791454699905466460, 0.791424137524749600, 0.791393573165471880, 0.791363006827710660, 0.791332438511542110, 0.791301868217042290, 0.791271295944287910, 0.791240721693355240, +0.791210145464320780, 0.791179567257261020, 0.791148987072251670, 0.791118404909370470, 0.791087820768693330, 0.791057234650296540, 0.791026646554256700, 0.790996056480650190, +0.790965464429553620, 0.790934870401043270, 0.790904274395195280, 0.790873676412087170, 0.790843076451794860, 0.790812474514394850, 0.790781870599963630, 0.790751264708577710, +0.790720656840313670, 0.790690046995247480, 0.790659435173456710, 0.790628821375017330, 0.790598205600005820, 0.790567587848498900, 0.790536968120572950, 0.790506346416304680, +0.790475722735770380, 0.790445097079046420, 0.790414469446210080, 0.790383839837337730, 0.790353208252505660, 0.790322574691790570, 0.790291939155269190, 0.790261301643017780, +0.790230662155113170, 0.790200020691631420, 0.790169377252650130, 0.790138731838245460, 0.790108084448493790, 0.790077435083472060, 0.790046783743256650, 0.790016130427924400, +0.789985475137551240, 0.789954817872214890, 0.789924158631991500, 0.789893497416957690, 0.789862834227190170, 0.789832169062765540, 0.789801501923760530, 0.789770832810251730, +0.789740161722315430, 0.789709488660029100, 0.789678813623469140, 0.789648136612712160, 0.789617457627834750, 0.789586776668913750, 0.789556093736025750, 0.789525408829247040, +0.789494721948655330, 0.789464033094326890, 0.789433342266338320, 0.789402649464766350, 0.789371954689687790, 0.789341257941179380, 0.789310559219317700, 0.789279858524179150, +0.789249155855841540, 0.789218451214381060, 0.789187744599874400, 0.789157036012398390, 0.789126325452029760, 0.789095612918845330, 0.789064898412921820, 0.789034181934335610, +0.789003463483164410, 0.788972743059484620, 0.788942020663372930, 0.788911296294906310, 0.788880569954161340, 0.788849841641214860, 0.788819111356143350, 0.788788379099024660, +0.788757644869934940, 0.788726908668951120, 0.788696170496149930, 0.788665430351608520, 0.788634688235403390, 0.788603944147611590, 0.788573198088309280, 0.788542450057574620, +0.788511700055483880, 0.788480948082113780, 0.788450194137541360, 0.788419438221843460, 0.788388680335097010, 0.788357920477378740, 0.788327158648765240, 0.788296394849334340, +0.788265629079162420, 0.788234861338326540, 0.788204091626903410, 0.788173319944970090, 0.788142546292603500, 0.788111770669879920, 0.788080993076877510, 0.788050213513672550, +0.788019431980342080, 0.787988648476963040, 0.787957863003612480, 0.787927075560367120, 0.787896286147304230, 0.787865494764499960, 0.787834701412032490, 0.787803906089978300, +0.787773108798414330, 0.787742309537417640, 0.787711508307065040, 0.787680705107433820, 0.787649899938600240, 0.787619092800642460, 0.787588283693636980, 0.787557472617660740, +0.787526659572790780, 0.787495844559104260, 0.787465027576678130, 0.787434208625589330, 0.787403387705914560, 0.787372564817731880, 0.787341739961117670, 0.787310913136149200, +0.787280084342903420, 0.787249253581457480, 0.787218420851888310, 0.787187586154273200, 0.787156749488688520, 0.787125910855212440, 0.787095070253921670, 0.787064227684893260, +0.787033383148204260, 0.787002536643931830, 0.786971688172152910, 0.786940837732944320, 0.786909985326384230, 0.786879130952549130, 0.786848274611516190, 0.786817416303362550, +0.786786556028165500, 0.786755693786001850, 0.786724829576949110, 0.786693963401083770, 0.786663095258483990, 0.786632225149226480, 0.786601353073388410, 0.786570479031047040, +0.786539603022279320, 0.786508725047162740, 0.786477845105773680, 0.786446963198190630, 0.786416079324490200, 0.786385193484749450, 0.786354305679045850, 0.786323415907456360, +0.786292524170058460, 0.786261630466929210, 0.786230734798145310, 0.786199837163785050, 0.786168937563925360, 0.786138035998643180, 0.786107132468016000, 0.786076226972120980, +0.786045319511035400, 0.786014410084836410, 0.785983498693600960, 0.785952585337407310, 0.785921670016332170, 0.785890752730452840, 0.785859833479846670, 0.785828912264590950, +0.785797989084762840, 0.785767063940439270, 0.785736136831698520, 0.785705207758617520, 0.785674276721273430, 0.785643343719743760, 0.785612408754105650, 0.785581471824436490, +0.785550532930813670, 0.785519592073314010, 0.785488649252015890, 0.785457704466996140, 0.785426757718332260, 0.785395809006101290, 0.785364858330380830, 0.785333905691248390, +0.785302951088781010, 0.785271994523055740, 0.785241035994151070, 0.785210075502143830, 0.785179113047111300, 0.785148148629131070, 0.785117182248280530, 0.785086213904636950, +0.785055243598277270, 0.785024271329279990, 0.784993297097722140, 0.784962320903681010, 0.784931342747234080, 0.784900362628458750, 0.784869380547432600, 0.784838396504232930, +0.784807410498936760, 0.784776422531622610, 0.784745432602367400, 0.784714440711248520, 0.784683446858343680, 0.784652451043730160, 0.784621453267485450, 0.784590453529686700, +0.784559451830412200, 0.784528448169739210, 0.784497442547745010, 0.784466434964507300, 0.784435425420103360, 0.784404413914611020, 0.784373400448107550, 0.784342385020670000, +0.784311367632377080, 0.784280348283305730, 0.784249326973533560, 0.784218303703138050, 0.784187278472196710, 0.784156251280787250, 0.784125222128987160, 0.784094191016873500, +0.784063157944524860, 0.784032122912018290, 0.784001085919431520, 0.783970046966841920, 0.783939006054327200, 0.783907963181965100, 0.783876918349832420, 0.783845871558008000, +0.783814822806569000, 0.783783772095592800, 0.783752719425157230, 0.783721664795339890, 0.783690608206218390, 0.783659549657870440, 0.783628489150372980, 0.783597426683804830, +0.783566362258243050, 0.783535295873765470, 0.783504227530449680, 0.783473157228373300, 0.783442084967613920, 0.783411010748249480, 0.783379934570356820, 0.783348856434014970, +0.783317776339301000, 0.783286694286292500, 0.783255610275067290, 0.783224524305703110, 0.783193436378277540, 0.783162346492867870, 0.783131254649552910, 0.783100160848409830, +0.783069065089516240, 0.783037967372950060, 0.783006867698789020, 0.782975766067110720, 0.782944662477992990, 0.782913556931513100, 0.782882449427749870, 0.782851339966780580, +0.782820228548682830, 0.782789115173534560, 0.782757999841413480, 0.782726882552397420, 0.782695763306563650, 0.782664642103991000, 0.782633518944756630, 0.782602393828938590, +0.782571266756614480, 0.782540137727862350, 0.782509006742759690, 0.782477873801384670, 0.782446738903814330, 0.782415602050127720, 0.782384463240402010, 0.782353322474715230, +0.782322179753145220, 0.782291035075769690, 0.782259888442666470, 0.782228739853913610, 0.782197589309588380, 0.782166436809769720, 0.782135282354535000, 0.782104125943962060, +0.782072967578128720, 0.782041807257113030, 0.782010644980992820, 0.781979480749845470, 0.781948314563749910, 0.781917146422783650, 0.781885976327024390, 0.781854804276550300, +0.781823630271439200, 0.781792454311769030, 0.781761276397617610, 0.781730096529062560, 0.781698914706182800, 0.781667730929055730, 0.781636545197759270, 0.781605357512371590, +0.781574167872970400, 0.781542976279633870, 0.781511782732439820, 0.781480587231465850, 0.781449389776790900, 0.781418190368492470, 0.781386989006648710, 0.781355785691337350, +0.781324580422636530, 0.781293373200624200, 0.781262164025377960, 0.781230952896976860, 0.781199739815498400, 0.781168524781020500, 0.781137307793621450, 0.781106088853378950, +0.781074867960371400, 0.781043645114676500, 0.781012420316372080, 0.780981193565537080, 0.780949964862249100, 0.780918734206586310, 0.780887501598626520, 0.780856267038448130, +0.780825030526128950, 0.780793792061746710, 0.780762551645380550, 0.780731309277107990, 0.780700064957007170, 0.780668818685156250, 0.780637570461633180, 0.780606320286516220, +0.780575068159883420, 0.780543814081812390, 0.780512558052382510, 0.780481300071671160, 0.780450040139756500, 0.780418778256716790, 0.780387514422630100, 0.780356248637574690, +0.780324980901628610, 0.780293711214869570, 0.780262439577376730, 0.780231165989227820, 0.780199890450501090, 0.780168612961274490, 0.780137333521626400, 0.780106052131635090, +0.780074768791377940, 0.780043483500934550, 0.780012196260382320, 0.779980907069799720, 0.779949615929264820, 0.779918322838855870, 0.779887027798651040, 0.779855730808728720, +0.779824431869166500, 0.779793130980043770, 0.779761828141438240, 0.779730523353428070, 0.779699216616091650, 0.779667907929507240, 0.779636597293752900, 0.779605284708907220, +0.779573970175047700, 0.779542653692253840, 0.779511335260603230, 0.779480014880174380, 0.779448692551045540, 0.779417368273294890, 0.779386042047000900, 0.779354713872241200, +0.779323383749095270, 0.779292051677640820, 0.779260717657956350, 0.779229381690120020, 0.779198043774210310, 0.779166703910305400, 0.779135362098483770, 0.779104018338823150, +0.779072672631403120, 0.779041324976301300, 0.779009975373596290, 0.778978623823366250, 0.778947270325689670, 0.778915914880644930, 0.778884557488309760, 0.778853198148763860, +0.778821836862084950, 0.778790473628351410, 0.778759108447641730, 0.778727741320034310, 0.778696372245607390, 0.778665001224439710, 0.778633628256608870, 0.778602253342194570, +0.778570876481274540, 0.778539497673927490, 0.778508116920231590, 0.778476734220265420, 0.778445349574107380, 0.778413962981835960, 0.778382574443529100, 0.778351183959266390, +0.778319791529125670, 0.778288397153185430, 0.778257000831524270, 0.778225602564220690, 0.778194202351352950, 0.778162800192999220, 0.778131396089239090, 0.778099990040150400, +0.778068582045811750, 0.778037172106301630, 0.778005760221698540, 0.777974346392081180, 0.777942930617527840, 0.777911512898116660, 0.777880093233927260, 0.777848671625037680, +0.777817248071526300, 0.777785822573471840, 0.777754395130952900, 0.777722965744047980, 0.777691534412835010, 0.777660101137393700, 0.777628665917802220, 0.777597228754139060, +0.777565789646482930, 0.777534348594912220, 0.777502905599505630, 0.777471460660341900, 0.777440013777498830, 0.777408564951056260, 0.777377114181092340, 0.777345661467685690, +0.777314206810914790, 0.777282750210858460, 0.777251291667595210, 0.777219831181203750, 0.777188368751762120, 0.777156904379350140, 0.777125438064045880, 0.777093969805928040, +0.777062499605075230, 0.777031027461566270, 0.776999553375479660, 0.776968077346893660, 0.776936599375887990, 0.776905119462540820, 0.776873637606930960, 0.776842153809136900, +0.776810668069237490, 0.776779180387311310, 0.776747690763437300, 0.776716199197693520, 0.776684705690159680, 0.776653210240914160, 0.776621712850035560, 0.776590213517602820, +0.776558712243694440, 0.776527209028389230, 0.776495703871766030, 0.776464196773903100, 0.776432687734880170, 0.776401176754775490, 0.776369663833667900, 0.776338148971636110, +0.776306632168759060, 0.776275113425115350, 0.776243592740783250, 0.776212070115842810, 0.776180545550372190, 0.776149019044450220, 0.776117490598155600, 0.776085960211567390, +0.776054427884764200, 0.776022893617824950, 0.775991357410827920, 0.775959819263853050, 0.775928279176978600, 0.775896737150283510, 0.775865193183846500, 0.775833647277746620, +0.775802099432062580, 0.775770549646872640, 0.775738997922256980, 0.775707444258293850, 0.775675888655061980, 0.775644331112640530, 0.775612771631108200, 0.775581210210543940, +0.775549646851026670, 0.775518081552634690, 0.775486514315448020, 0.775454945139545160, 0.775423374025004940, 0.775391800971906190, 0.775360225980328050, 0.775328649050349260, +0.775297070182048850, 0.775265489375505210, 0.775233906630798500, 0.775202321948006980, 0.775170735327209590, 0.775139146768485390, 0.775107556271913300, 0.775075963837572380, +0.775044369465541010, 0.775012773155899230, 0.774981174908725530, 0.774949574724098870, 0.774917972602098270, 0.774886368542802790, 0.774854762546291380, 0.774823154612642950, +0.774791544741936230, 0.774759932934251160, 0.774728319189666230, 0.774696703508260480, 0.774665085890112960, 0.774633466335302830, 0.774601844843908930, 0.774570221416010510, +0.774538596051685960, 0.774506968751015430, 0.774475339514077430, 0.774443708340951220, 0.774412075231715620, 0.774380440186449910, 0.774348803205233030, 0.774317164288143680, +0.774285523435261910, 0.774253880646666340, 0.774222235922436110, 0.774190589262650270, 0.774158940667387880, 0.774127290136728210, 0.774095637670750290, 0.774063983269532740, +0.774032326933155820, 0.774000668661698030, 0.773969008455238640, 0.773937346313856580, 0.773905682237631340, 0.773874016226641760, 0.773842348280966650, 0.773810678400686180, +0.773779006585879060, 0.773747332836624450, 0.773715657153001390, 0.773683979535089270, 0.773652299982967250, 0.773620618496714370, 0.773588935076409470, 0.773557249722132690, +0.773525562433962870, 0.773493873211979150, 0.773462182056260720, 0.773430488966886820, 0.773398793943936740, 0.773367096987489620, 0.773335398097624300, 0.773303697274420940, +0.773271994517958360, 0.773240289828315830, 0.773208583205572510, 0.773176874649807780, 0.773145164161100910, 0.773113451739530500, 0.773081737385177050, 0.773050021098119270, +0.773018302878436430, 0.772986582726207790, 0.772954860641512750, 0.772923136624430570, 0.772891410675040410, 0.772859682793421320, 0.772827952979653570, 0.772796221233815860, +0.772764487555987590, 0.772732751946248130, 0.772701014404676870, 0.772669274931352960, 0.772637533526356000, 0.772605790189764500, 0.772574044921659150, 0.772542297722118690, +0.772510548591222480, 0.772478797529049910, 0.772447044535680360, 0.772415289611193100, 0.772383532755667180, 0.772351773969182980, 0.772320013251819200, 0.772288250603655580, +0.772256486024771150, 0.772224719515245630, 0.772192951075158280, 0.772161180704588610, 0.772129408403615320, 0.772097634172319140, 0.772065858010778870, 0.772034079919073910, +0.772002299897283860, 0.771970517945487880, 0.771938734063765790, 0.771906948252196190, 0.771875160510859800, 0.771843370839835560, 0.771811579239202850, 0.771779785709041160, +0.771747990249430080, 0.771716192860449010, 0.771684393542177440, 0.771652592294694300, 0.771620789118080300, 0.771588984012414270, 0.771557176977775820, 0.771525368014244430, +0.771493557121899600, 0.771461744300820820, 0.771429929551087800, 0.771398112872779260, 0.771366294265976140, 0.771334473730757140, 0.771302651267202100, 0.771270826875390390, +0.771239000555401510, 0.771207172307315280, 0.771175342131210420, 0.771143510027167860, 0.771111675995266530, 0.771079840035585940, 0.771048002148205790, 0.771016162333205690, +0.770984320590665130, 0.770952476920663710, 0.770920631323280590, 0.770888783798596490, 0.770856934346690450, 0.770825082967641960, 0.770793229661530850, 0.770761374428436620, +0.770729517268438970, 0.770697658181617510, 0.770665797168051390, 0.770633934227821340, 0.770602069361006390, 0.770570202567686380, 0.770538333847940790, 0.770506463201849350, +0.770474590629491750, 0.770442716130947170, 0.770410839706296310, 0.770378961355618340, 0.770347081078992970, 0.770315198876499910, 0.770283314748218870, 0.770251428694229580, +0.770219540714611630, 0.770187650809444290, 0.770155758978808500, 0.770123865222783200, 0.770091969541448210, 0.770060071934883350, 0.770028172403168340, 0.769996270946382790, +0.769964367564606180, 0.769932462257919110, 0.769900555026400870, 0.769868645870131260, 0.769836734789190010, 0.769804821783656950, 0.769772906853611880, 0.769740989999134430, +0.769709071220303960, 0.769677150517201540, 0.769645227889906080, 0.769613303338497530, 0.769581376863055830, 0.769549448463660690, 0.769517518140391930, 0.769485585893329270, +0.769453651722552090, 0.769421715628141430, 0.769389777610176460, 0.769357837668737000, 0.769325895803902980, 0.769293952015754230, 0.769262006304370580, 0.769230058669831410, +0.769198109112217640, 0.769166157631608560, 0.769134204228084100, 0.769102248901724070, 0.769070291652608540, 0.769038332480817210, 0.769006371386430020, 0.768974408369526460, +0.768942443430187250, 0.768910476568492100, 0.768878507784520710, 0.768846537078353040, 0.768814564450069020, 0.768782589899748570, 0.768750613427471090, 0.768718635033317720, +0.768686654717367630, 0.768654672479700980, 0.768622688320397710, 0.768590702239537630, 0.768558714237200790, 0.768526724313467250, 0.768494732468416260, 0.768462738702129000, +0.768430743014684950, 0.768398745406163930, 0.768366745876646220, 0.768334744426211520, 0.768302741054940010, 0.768270735762911610, 0.768238728550205810, 0.768206719416903770, +0.768174708363084880, 0.768142695388829290, 0.768110680494216940, 0.768078663679327870, 0.768046644944242240, 0.768014624289039330, 0.767982601713800390, 0.767950577218605050, +0.767918550803533220, 0.767886522468665070, 0.767854492214080530, 0.767822460039859770, 0.767790425946082930, 0.767758389932829300, 0.767726352000180470, 0.767694312148215600, +0.767662270377015070, 0.767630226686658810, 0.767598181077226990, 0.767566133548799660, 0.767534084101457070, 0.767502032735278620, 0.767469979450345790, 0.767437924246737960, +0.767405867124535180, 0.767373808083817940, 0.767341747124666070, 0.767309684247159840, 0.767277619451378850, 0.767245552737404360, 0.767213484105315980, 0.767181413555193980, +0.767149341087118300, 0.767117266701169420, 0.767085190397427290, 0.767053112175972160, 0.767021032036883770, 0.766988949980243250, 0.766956866006130440, 0.766924780114625390, +0.766892692305808480, 0.766860602579759850, 0.766828510936559680, 0.766796417376287560, 0.766764321899025100, 0.766732224504851790, 0.766700125193847890, 0.766668023966093680, +0.766635920821669540, 0.766603815760655500, 0.766571708783131860, 0.766539599889178410, 0.766507489078876560, 0.766475376352306000, 0.766443261709547020, 0.766411145150679870, +0.766379026675784840, 0.766346906284942180, 0.766314783978232380, 0.766282659755734950, 0.766250533617531480, 0.766218405563701690, 0.766186275594325950, 0.766154143709484430, +0.766122009909257500, 0.766089874193725650, 0.766057736562968490, 0.766025597017067630, 0.765993455556102650, 0.765961312180154060, 0.765929166889302240, 0.765897019683627560, +0.765864870563210290, 0.765832719528130810, 0.765800566578468960, 0.765768411714306320, 0.765736254935722620, 0.765704096242798230, 0.765671935635613640, 0.765639773114249240, +0.765607608678785300, 0.765575442329302520, 0.765543274065880410, 0.765511103888600770, 0.765478931797543340, 0.765446757792788590, 0.765414581874416910, 0.765382404042508790, +0.765350224297144610, 0.765318042638404420, 0.765285859066369590, 0.765253673581120180, 0.765221486182736670, 0.765189296871299220, 0.765157105646888660, 0.765124912509585360, +0.765092717459469720, 0.765060520496621770, 0.765028321621123110, 0.764996120833053570, 0.764963918132493760, 0.764931713519524160, 0.764899506994225260, 0.764867298556677570, +0.764835088206961110, 0.764802875945157500, 0.764770661771346670, 0.764738445685609220, 0.764706227688025650, 0.764674007778676450, 0.764641785957642320, 0.764609562225003650, +0.764577336580840480, 0.764545109025234650, 0.764512879558265970, 0.764480648180015150, 0.764448414890562700, 0.764416179689989210, 0.764383942578375160, 0.764351703555801400, +0.764319462622347730, 0.764287219778095990, 0.764254975023126230, 0.764222728357519030, 0.764190479781355010, 0.764158229294714770, 0.764125976897678920, 0.764093722590327600, +0.764061466372742530, 0.764029208245003870, 0.763996948207192110, 0.763964686259387960, 0.763932422401672140, 0.763900156634125250, 0.763867888956828000, 0.763835619369860440, +0.763803347873304390, 0.763771074467239910, 0.763738799151747920, 0.763706521926908800, 0.763674242792803380, 0.763641961749512380, 0.763609678797116500, 0.763577393935695790, +0.763545107165332190, 0.763512818486105860, 0.763480527898097390, 0.763448235401387730, 0.763415940996057360, 0.763383644682187220, 0.763351346459857360, 0.763319046329149710, +0.763286744290144540, 0.763254440342922340, 0.763222134487564150, 0.763189826724150590, 0.763157517052762470, 0.763125205473480510, 0.763092891986385080, 0.763060576591557900, +0.763028259289079360, 0.762995940079030040, 0.762963618961490900, 0.762931295936542850, 0.762898971004266400, 0.762866644164742040, 0.762834315418051690, 0.762801984764275410, +0.762769652203494240, 0.762737317735789010, 0.762704981361240320, 0.762672643079929320, 0.762640302891936630, 0.762607960797342720, 0.762575616796229430, 0.762543270888677020, +0.762510923074766530, 0.762478573354578690, 0.762446221728194430, 0.762413868195694570, 0.762381512757160040, 0.762349155412671230, 0.762316796162310070, 0.762284435006156950, +0.762252071944292680, 0.762219706976798190, 0.762187340103754550, 0.762154971325242570, 0.762122600641342520, 0.762090228052136550, 0.762057853557704950, 0.762025477158128850, +0.761993098853488980, 0.761960718643866390, 0.761928336529342000, 0.761895952509996640, 0.761863566585911030, 0.761831178757166990, 0.761798789023845010, 0.761766397386026030, +0.761734003843791090, 0.761701608397221120, 0.761669211046397180, 0.761636811791400080, 0.761604410632310550, 0.761572007569210400, 0.761539602602180340, 0.761507195731301320, +0.761474786956654160, 0.761442376278320120, 0.761409963696380140, 0.761377549210914720, 0.761345132822005890, 0.761312714529734260, 0.761280294334180980, 0.761247872235426780, +0.761215448233553030, 0.761183022328640550, 0.761150594520770610, 0.761118164810023590, 0.761085733196481650, 0.761053299680225500, 0.761020864261336080, 0.760988426939894440, +0.760955987715981720, 0.760923546589679090, 0.760891103561067040, 0.760858658630227720, 0.760826211797241750, 0.760793763062190380, 0.760761312425154430, 0.760728859886215300, +0.760696405445454030, 0.760663949102951760, 0.760631490858789010, 0.760599030713048130, 0.760566568665809630, 0.760534104717154770, 0.760501638867164600, 0.760469171115920270, +0.760436701463503170, 0.760404229909994230, 0.760371756455474060, 0.760339281100025130, 0.760306803843728060, 0.760274324686664000, 0.760241843628914000, 0.760209360670559550, +0.760176875811681580, 0.760144389052360920, 0.760111900392679730, 0.760079409832718930, 0.760046917372559580, 0.760014423012282950, 0.759981926751970180, 0.759949428591702670, +0.759916928531561560, 0.759884426571627470, 0.759851922711982990, 0.759819416952708710, 0.759786909293885810, 0.759754399735595780, 0.759721888277919640, 0.759689374920938800, +0.759656859664733950, 0.759624342509387480, 0.759591823454980220, 0.759559302501593430, 0.759526779649308370, 0.759494254898206210, 0.759461728248368550, 0.759429199699876540, +0.759396669252811020, 0.759364136907254350, 0.759331602663287360, 0.759299066520991330, 0.759266528480447620, 0.759233988541737630, 0.759201446704942610, 0.759168902970144050, +0.759136357337422680, 0.759103809806860870, 0.759071260378539670, 0.759038709052540230, 0.759006155828944040, 0.758973600707832490, 0.758941043689286830, 0.758908484773388130, +0.758875923960218750, 0.758843361249859520, 0.758810796642391930, 0.758778230137897250, 0.758745661736457080, 0.758713091438152800, 0.758680519243065680, 0.758647945151276760, +0.758615369162868540, 0.758582791277921940, 0.758550211496518360, 0.758517629818739160, 0.758485046244665950, 0.758452460774380110, 0.758419873407963130, 0.758387284145495830, +0.758354692987060930, 0.758322099932739360, 0.758289504982612490, 0.758256908136761830, 0.758224309395268970, 0.758191708758215290, 0.758159106225681720, 0.758126501797750980, +0.758093895474504120, 0.758061287256022400, 0.758028677142387530, 0.757996065133680900, 0.757963451229984100, 0.757930835431378740, 0.757898217737945630, 0.757865598149767620, +0.757832976666925620, 0.757800353289501130, 0.757767728017575750, 0.757735100851231080, 0.757702471790548620, 0.757669840835609510, 0.757637207986496250, 0.757604573243290110, +0.757571936606072470, 0.757539298074924930, 0.757506657649929190, 0.757474015331166760, 0.757441371118719340, 0.757408725012667980, 0.757376077013095280, 0.757343427120082400, +0.757310775333711050, 0.757278121654062720, 0.757245466081219010, 0.757212808615261630, 0.757180149256272310, 0.757147488004331960, 0.757114824859523640, 0.757082159821928060, +0.757049492891627150, 0.757016824068702520, 0.756984153353235770, 0.756951480745308710, 0.756918806245002410, 0.756886129852399670, 0.756853451567581550, 0.756820771390629750, +0.756788089321626110, 0.756755405360652110, 0.756722719507789470, 0.756690031763120220, 0.756657342126725970, 0.756624650598688330, 0.756591957179088780, 0.756559261868009590, +0.756526564665532360, 0.756493865571738590, 0.756461164586709870, 0.756428461710528580, 0.756395756943276100, 0.756363050285034030, 0.756330341735884540, 0.756297631295909210, +0.756264918965189770, 0.756232204743807810, 0.756199488631845610, 0.756166770629384640, 0.756134050736506860, 0.756101328953293520, 0.756068605279827220, 0.756035879716189460, +0.756003152262461840, 0.755970422918726180, 0.755937691685064750, 0.755904958561559040, 0.755872223548290980, 0.755839486645341950, 0.755806747852794670, 0.755774007170730400, +0.755741264599231190, 0.755708520138378530, 0.755675773788254790, 0.755643025548941690, 0.755610275420520620, 0.755577523403074270, 0.755544769496684140, 0.755512013701431950, +0.755479256017399510, 0.755446496444669210, 0.755413734983322760, 0.755380971633441870, 0.755348206395108250, 0.755315439268404390, 0.755282670253412000, 0.755249899350212920, +0.755217126558888730, 0.755184351879522150, 0.755151575312194570, 0.755118796856988130, 0.755086016513984330, 0.755053234283265870, 0.755020450164914260, 0.754987664159011200, +0.754954876265639400, 0.754922086484880350, 0.754889294816815990, 0.754856501261528260, 0.754823705819099410, 0.754790908489611390, 0.754758109273146130, 0.754725308169785230, +0.754692505179611390, 0.754659700302706240, 0.754626893539151910, 0.754594084889030010, 0.754561274352423260, 0.754528461929413250, 0.754495647620082140, 0.754462831424511540, +0.754430013342784140, 0.754397193374981790, 0.754364371521186180, 0.754331547781479930, 0.754298722155944730, 0.754265894644662760, 0.754233065247715830, 0.754200233965186430, +0.754167400797156500, 0.754134565743708070, 0.754101728804922880, 0.754068889980883730, 0.754036049271672340, 0.754003206677370750, 0.753970362198060910, 0.753937515833825510, +0.753904667584746280, 0.753871817450905370, 0.753838965432384600, 0.753806111529266690, 0.753773255741633560, 0.753740398069567270, 0.753707538513149760, 0.753674677072463610, +0.753641813747590760, 0.753608948538613150, 0.753576081445613500, 0.753543212468673510, 0.753510341607875560, 0.753477468863301470, 0.753444594235033960, 0.753411717723155070, +0.753378839327746740, 0.753345959048891120, 0.753313076886670820, 0.753280192841167870, 0.753247306912464440, 0.753214419100642460, 0.753181529405784760, 0.753148637827973140, +0.753115744367290010, 0.753082849023817280, 0.753049951797637560, 0.753017052688833120, 0.752984151697485670, 0.752951248823678140, 0.752918344067492470, 0.752885437429010930, +0.752852528908315550, 0.752819618505489060, 0.752786706220613610, 0.752753792053771350, 0.752720876005044340, 0.752687958074515500, 0.752655038262266650, 0.752622116568380290, +0.752589192992938250, 0.752556267536023670, 0.752523340197718270, 0.752490410978104650, 0.752457479877264630, 0.752424546895281150, 0.752391612032236370, 0.752358675288212320, +0.752325736663291830, 0.752292796157556950, 0.752259853771090060, 0.752226909503973310, 0.752193963356289630, 0.752161015328120960, 0.752128065419549800, 0.752095113630658170, +0.752062159961529030, 0.752029204412244520, 0.751996246982886920, 0.751963287673538480, 0.751930326484282150, 0.751897363415199970, 0.751864398466374320, 0.751831431637887460, +0.751798462929822220, 0.751765492342260980, 0.751732519875285550, 0.751699545528979220, 0.751666569303424010, 0.751633591198702320, 0.751600611214896410, 0.751567629352089320, +0.751534645610363090, 0.751501659989800120, 0.751468672490482880, 0.751435683112494200, 0.751402691855916350, 0.751369698720831810, 0.751336703707322640, 0.751303706815471980, +0.751270708045362110, 0.751237707397075520, 0.751204704870694240, 0.751171700466301660, 0.751138694183979600, 0.751105686023811000, 0.751072675985877790, 0.751039664070263240, +0.751006650277049490, 0.750973634606318940, 0.750940617058154510, 0.750907597632638480, 0.750874576329853440, 0.750841553149881770, 0.750808528092806520, 0.750775501158709830, +0.750742472347674550, 0.750709441659782590, 0.750676409095117460, 0.750643374653761300, 0.750610338335796710, 0.750577300141305860, 0.750544260070372230, 0.750511218123077860, +0.750478174299505470, 0.750445128599737330, 0.750412081023856700, 0.750379031571945740, 0.750345980244087050, 0.750312927040363680, 0.750279871960857990, 0.750246815005652600, +0.750213756174829880, 0.750180695468473100, 0.750147632886664530, 0.750114568429486870, 0.750081502097022510, 0.750048433889354720, 0.750015363806565860, 0.749982291848738440, +0.749949218015955150, 0.749916142308299060, 0.749883064725852640, 0.749849985268698500, 0.749816903936919240, 0.749783820730597910, 0.749750735649816980, 0.749717648694659070, +0.749684559865207210, 0.749651469161543900, 0.749618376583752080, 0.749585282131914000, 0.749552185806112830, 0.749519087606431380, 0.749485987532952150, 0.749452885585757620, +0.749419781764931290, 0.749386676070555310, 0.749353568502712840, 0.749320459061486030, 0.749287347746958490, 0.749254234559212470, 0.749221119498330920, 0.749188002564396220, +0.749154883757491840, 0.749121763077700180, 0.749088640525104270, 0.749055516099786270, 0.749022389801830000, 0.748989261631317630, 0.748956131588331740, 0.748922999672955950, +0.748889865885272510, 0.748856730225364590, 0.748823592693314440, 0.748790453289205570, 0.748757312013120680, 0.748724168865142480, 0.748691023845353460, 0.748657876953837230, +0.748624728190676380, 0.748591577555953620, 0.748558425049751670, 0.748525270672153910, 0.748492114423243040, 0.748458956303101890, 0.748425796311813050, 0.748392634449459910, +0.748359470716125300, 0.748326305111891690, 0.748293137636842580, 0.748259968291060670, 0.748226797074628800, 0.748193623987629670, 0.748160449030146670, 0.748127272202262720, +0.748094093504060530, 0.748060912935622710, 0.748027730497032970, 0.747994546188373910, 0.747961360009728570, 0.747928171961179440, 0.747894982042810240, 0.747861790254703450, +0.747828596596942340, 0.747795401069609290, 0.747762203672788120, 0.747729004406561430, 0.747695803271012040, 0.747662600266223330, 0.747629395392278130, 0.747596188649259360, +0.747562980037249970, 0.747529769556333320, 0.747496557206592360, 0.747463342988109900, 0.747430126900968880, 0.747396908945252790, 0.747363689121044340, 0.747330467428426680, +0.747297243867482750, 0.747264018438295820, 0.747230791140948920, 0.747197561975525000, 0.747164330942106880, 0.747131098040778370, 0.747097863271621980, 0.747064626634720620, +0.747031388130158010, 0.746998147758016980, 0.746964905518380570, 0.746931661411331490, 0.746898415436953680, 0.746865167595329730, 0.746831917886543020, 0.746798666310676150, +0.746765412867812840, 0.746732157558036120, 0.746698900381428830, 0.746665641338074120, 0.746632380428055580, 0.746599117651456030, 0.746565853008358760, 0.746532586498846570, +0.746499318123003190, 0.746466047880911530, 0.746432775772654770, 0.746399501798315710, 0.746366225957978190, 0.746332948251725140, 0.746299668679639370, 0.746266387241804830, +0.746233103938304220, 0.746199818769220920, 0.746166531734637760, 0.746133242834638550, 0.746099952069306240, 0.746066659438724080, 0.746033364942974900, 0.746000068582142630, +0.745966770356310200, 0.745933470265560890, 0.745900168309977630, 0.745866864489644120, 0.745833558804643530, 0.745800251255059000, 0.745766941840973590, 0.745733630562471110, +0.745700317419634610, 0.745667002412546910, 0.745633685541292060, 0.745600366805952990, 0.745567046206613070, 0.745533723743355140, 0.745500399416263230, 0.745467073225420270, +0.745433745170909770, 0.745400415252814420, 0.745367083471218490, 0.745333749826204710, 0.745300414317856760, 0.745267076946257270, 0.745233737711490480, 0.745200396613639350, +0.745167053652787240, 0.745133708829017190, 0.745100362142413150, 0.745067013593058160, 0.745033663181035370, 0.745000310906428710, 0.744966956769321340, 0.744933600769796530, +0.744900242907937440, 0.744866883183827990, 0.744833521597551450, 0.744800158149190980, 0.744766792838829850, 0.744733425666552100, 0.744700056632440770, 0.744666685736579240, +0.744633312979050670, 0.744599938359939210, 0.744566561879327790, 0.744533183537300140, 0.744499803333939060, 0.744466421269328830, 0.744433037343552590, 0.744399651556693740, +0.744366263908835420, 0.744332874400061790, 0.744299483030455900, 0.744266089800101120, 0.744232694709081380, 0.744199297757479840, 0.744165898945380100, 0.744132498272865320, +0.744099095740019530, 0.744065691346926020, 0.744032285093668370, 0.743998876980329630, 0.743965467006994060, 0.743932055173744720, 0.743898641480665310, 0.743865225927838990, +0.743831808515349910, 0.743798389243281340, 0.743764968111716660, 0.743731545120739470, 0.743698120270433580, 0.743664693560882380, 0.743631264992169250, 0.743597834564378110, +0.743564402277592570, 0.743530968131895900, 0.743497532127371570, 0.743464094264103540, 0.743430654542175500, 0.743397212961670720, 0.743363769522672580, 0.743330324225265350, +0.743296877069532290, 0.743263428055557120, 0.743229977183422990, 0.743196524453214270, 0.743163069865014240, 0.743129613418906490, 0.743096155114974510, 0.743062694953302350, +0.743029232933973380, 0.742995769057071210, 0.742962303322679760, 0.742928835730882640, 0.742895366281763340, 0.742861894975405450, 0.742828421811893010, 0.742794946791309640, +0.742761469913738810, 0.742727991179264020, 0.742694510587969540, 0.742661028139938840, 0.742627543835255530, 0.742594057674003110, 0.742560569656265710, 0.742527079782127060, +0.742493588051670650, 0.742460094464979850, 0.742426599022139260, 0.742393101723232140, 0.742359602568341990, 0.742326101557553080, 0.742292598690948880, 0.742259093968613340, +0.742225587390629600, 0.742192078957082280, 0.742158568668054740, 0.742125056523630810, 0.742091542523893870, 0.742058026668928390, 0.742024508958817890, 0.741990989393646050, +0.741957467973496490, 0.741923944698453570, 0.741890419568600800, 0.741856892584021880, 0.741823363744800510, 0.741789833051020970, 0.741756300502766970, 0.741722766100122110, +0.741689229843170090, 0.741655691731995300, 0.741622151766681230, 0.741588609947311460, 0.741555066273970610, 0.741521520746741940, 0.741487973365709600, 0.741454424130956860, +0.741420873042568430, 0.741387320100627910, 0.741353765305219010, 0.741320208656425450, 0.741286650154331590, 0.741253089799021160, 0.741219527590577960, 0.741185963529085720, +0.741152397614628810, 0.741118829847290940, 0.741085260227155930, 0.741051688754307490, 0.741018115428830230, 0.740984540250807620, 0.740950963220323280, 0.740917384337461900, +0.740883803602307100, 0.740850221014942690, 0.740816636575452490, 0.740783050283921000, 0.740749462140431910, 0.740715872145069070, 0.740682280297916380, 0.740648686599058250, +0.740615091048578260, 0.740581493646560670, 0.740547894393089100, 0.740514293288248030, 0.740480690332121270, 0.740447085524792660, 0.740413478866346120, 0.740379870356866250, +0.740346259996436550, 0.740312647785141050, 0.740279033723064140, 0.740245417810289740, 0.740211800046901680, 0.740178180432983890, 0.740144558968620970, 0.740110935653896520, +0.740077310488894910, 0.740043683473699640, 0.740010054608395420, 0.739976423893066060, 0.739942791327795720, 0.739909156912668120, 0.739875520647767850, 0.739841882533178730, +0.739808242568985030, 0.739774600755270350, 0.739740957092119510, 0.739707311579616220, 0.739673664217844750, 0.739640015006888700, 0.739606363946832990, 0.739572711037761340, +0.739539056279757690, 0.739505399672906630, 0.739471741217291980, 0.739438080912998120, 0.739404418760108760, 0.739370754758708500, 0.739337088908881500, 0.739303421210711800, +0.739269751664283100, 0.739236080269680460, 0.739202407026987580, 0.739168731936288630, 0.739135054997667630, 0.739101376211209190, 0.739067695576997470, 0.739034013095116290, +0.739000328765649920, 0.738966642588683050, 0.738932954564299530, 0.738899264692583270, 0.738865572973619210, 0.738831879407491290, 0.738798183994283540, 0.738764486734080130, +0.738730787626965760, 0.738697086673024470, 0.738663383872340320, 0.738629679224997560, 0.738595972731080800, 0.738562264390674180, 0.738528554203861880, 0.738494842170727810, +0.738461128291357130, 0.738427412565833440, 0.738393694994241350, 0.738359975576664660, 0.738326254313188320, 0.738292531203896370, 0.738258806248872750, 0.738225079448202480, +0.738191350801969510, 0.738157620310258110, 0.738123887973152430, 0.738090153790737280, 0.738056417763096720, 0.738022679890315110, 0.737988940172476520, 0.737955198609665960, +0.737921455201967280, 0.737887709949465060, 0.737853962852243250, 0.737820213910386770, 0.737786463123979770, 0.737752710493106640, 0.737718956017851420, 0.737685199698299150, +0.737651441534533880, 0.737617681526639650, 0.737583919674701600, 0.737550155978803690, 0.737516390439030390, 0.737482623055465860, 0.737448853828195030, 0.737415082757302050, +0.737381309842871420, 0.737347535084987180, 0.737313758483734370, 0.737279980039197150, 0.737246199751460110, 0.737212417620607190, 0.737178633646723420, 0.737144847829893310, +0.737111060170200890, 0.737077270667730540, 0.737043479322567420, 0.737009686134795450, 0.736975891104499350, 0.736942094231763270, 0.736908295516672250, 0.736874494959310460, +0.736840692559762030, 0.736806888318112250, 0.736773082234445260, 0.736739274308845560, 0.736705464541397400, 0.736671652932185840, 0.736637839481295130, 0.736604024188809880, +0.736570207054814240, 0.736536388079393370, 0.736502567262631520, 0.736468744604613420, 0.736434920105423000, 0.736401093765145510, 0.736367265583865450, 0.736333435561667080, +0.736299603698634900, 0.736265769994854050, 0.736231934450408690, 0.736198097065383190, 0.736164257839862830, 0.736130416773931760, 0.736096573867674690, 0.736062729121175870, +0.736028882534520480, 0.735995034107792990, 0.735961183841077780, 0.735927331734459460, 0.735893477788023050, 0.735859622001852950, 0.735825764376033750, 0.735791904910649830, +0.735758043605786560, 0.735724180461528100, 0.735690315477959160, 0.735656448655164220, 0.735622579993228440, 0.735588709492236090, 0.735554837152271770, 0.735520962973420730, +0.735487086955767140, 0.735453209099395930, 0.735419329404391360, 0.735385447870838700, 0.735351564498822440, 0.735317679288427390, 0.735283792239737720, 0.735249903352839020, +0.735216012627815330, 0.735182120064751810, 0.735148225663732610, 0.735114329424843120, 0.735080431348167920, 0.735046531433791510, 0.735012629681798480, 0.734978726092274210, +0.734944820665303090, 0.734910913400970030, 0.734877004299359320, 0.734843093360556420, 0.734809180584645730, 0.734775265971711830, 0.734741349521840110, 0.734707431235114950, +0.734673511111621160, 0.734639589151443450, 0.734605665354666980, 0.734571739721376350, 0.734537812251656370, 0.734503882945591550, 0.734469951803267350, 0.734436018824768280, +0.734402084010179150, 0.734368147359584440, 0.734334208873069770, 0.734300268550719500, 0.734266326392618570, 0.734232382398851470, 0.734198436569503790, 0.734164488904660130, +0.734130539404404760, 0.734096588068823390, 0.734062634898000610, 0.734028679892021140, 0.733994723050969800, 0.733960764374931850, 0.733926803863992010, 0.733892841518235190, +0.733858877337746020, 0.733824911322609850, 0.733790943472911410, 0.733756973788735720, 0.733723002270167180, 0.733689028917291490, 0.733655053730193240, 0.733621076708957260, +0.733587097853668380, 0.733553117164412070, 0.733519134641272940, 0.733485150284335700, 0.733451164093685830, 0.733417176069408040, 0.733383186211587380, 0.733349194520308330, +0.733315200995656720, 0.733281205637717040, 0.733247208446574430, 0.733213209422313380, 0.733179208565019720, 0.733145205874777940, 0.733111201351673290, 0.733077194995790160, +0.733043186807214480, 0.733009176786030730, 0.732975164932324060, 0.732941151246179310, 0.732907135727681850, 0.732873118376916600, 0.732839099193968170, 0.732805078178922380, +0.732771055331863820, 0.732737030652877760, 0.732703004142048700, 0.732668975799462440, 0.732634945625203820, 0.732600913619357750, 0.732566879782009180, 0.732532844113243600, +0.732498806613146040, 0.732464767281801320, 0.732430726119294500, 0.732396683125711160, 0.732362638301136020, 0.732328591645654340, 0.732294543159350830, 0.732260492842311430, +0.732226440694620620, 0.732192386716363770, 0.732158330907625610, 0.732124273268492050, 0.732090213799047710, 0.732056152499377500, 0.732022089369567250, 0.731988024409701900, +0.731953957619866370, 0.731919889000145600, 0.731885818550625510, 0.731851746271390710, 0.731817672162526690, 0.731783596224118150, 0.731749518456251020, 0.731715438859009910, +0.731681357432480310, 0.731647274176747020, 0.731613189091895770, 0.731579102178011700, 0.731545013435179750, 0.731510922863484960, 0.731476830463013260, 0.731442736233849370, +0.731408640176078430, 0.731374542289786160, 0.731340442575057480, 0.731306341031977780, 0.731272237660631870, 0.731238132461105690, 0.731204025433484170, 0.731169916577852570, +0.731135805894295940, 0.731101693382900100, 0.731067579043749970, 0.731033462876930830, 0.730999344882527820, 0.730965225060626780, 0.730931103411312620, 0.730896979934670730, +0.730862854630786040, 0.730828727499744590, 0.730794598541631310, 0.730760467756531140, 0.730726335144530230, 0.730692200705713390, 0.730658064440166120, 0.730623926347973350, +0.730589786429221010, 0.730555644683994250, 0.730521501112378460, 0.730487355714458550, 0.730453208490320470, 0.730419059440049480, 0.730384908563730840, 0.730350755861449600, +0.730316601333291790, 0.730282444979342360, 0.730248286799686900, 0.730214126794410450, 0.730179964963598940, 0.730145801307337640, 0.730111635825711700, 0.730077468518806390, +0.730043299386707760, 0.730009128429500830, 0.729974955647270880, 0.729940781040103740, 0.729906604608084650, 0.729872426351299010, 0.729838246269832180, 0.729804064363769880, +0.729769880633197480, 0.729735695078200350, 0.729701507698863660, 0.729667318495273550, 0.729633127467515070, 0.729598934615673930, 0.729564739939835060, 0.729530543440084610, +0.729496345116507740, 0.729462144969190150, 0.729427942998216890, 0.729393739203674010, 0.729359533585646760, 0.729325326144220410, 0.729291116879481120, 0.729256905791513920, +0.729222692880404530, 0.729188478146237990, 0.729154261589100680, 0.729120043209077640, 0.729085823006254570, 0.729051600980716640, 0.729017377132549880, 0.728983151461839900, +0.728948923968671840, 0.728914694653131300, 0.728880463515304220, 0.728846230555276090, 0.728811995773132270, 0.728777759168958150, 0.728743520742840100, 0.728709280494863050, +0.728675038425112610, 0.728640794533674920, 0.728606548820635140, 0.728572301286078970, 0.728538051930091910, 0.728503800752759890, 0.728469547754168390, 0.728435292934403010, +0.728401036293549130, 0.728366777831693010, 0.728332517548919810, 0.728298255445315460, 0.728263991520964990, 0.728229725775955020, 0.728195458210370680, 0.728161188824297700, +0.728126917617821330, 0.728092644591028180, 0.728058369744003290, 0.728024093076832470, 0.727989814589601100, 0.727955534282395570, 0.727921252155301120, 0.727886968208403370, +0.727852682441788360, 0.727818394855541670, 0.727784105449749030, 0.727749814224495920, 0.727715521179868490, 0.727681226315952220, 0.727646929632832840, 0.727612631130595930, +0.727578330809327770, 0.727544028669113720, 0.727509724710039610, 0.727475418932190920, 0.727441111335653920, 0.727406801920514210, 0.727372490686857390, 0.727338177634769160, +0.727303862764335670, 0.727269546075642650, 0.727235227568775460, 0.727200907243820360, 0.727166585100863070, 0.727132261139989410, 0.727097935361284640, 0.727063607764835470, +0.727029278350727170, 0.726994947119045780, 0.726960614069876660, 0.726926279203306320, 0.726891942519420240, 0.726857604018304350, 0.726823263700044130, 0.726788921564726080, +0.726754577612435670, 0.726720231843258850, 0.726685884257281200, 0.726651534854589000, 0.726617183635268060, 0.726582830599403980, 0.726548475747082920, 0.726514119078390700, +0.726479760593413350, 0.726445400292236140, 0.726411038174945790, 0.726376674241627770, 0.726342308492368140, 0.726307940927252480, 0.726273571546367180, 0.726239200349797940, +0.726204827337630810, 0.726170452509951270, 0.726136075866845810, 0.726101697408400250, 0.726067317134700410, 0.726032935045832000, 0.725998551141881610, 0.725964165422934740, +0.725929777889077200, 0.725895388540395480, 0.725860997376975290, 0.725826604398902680, 0.725792209606263120, 0.725757812999143440, 0.725723414577629230, 0.725689014341806440, +0.725654612291760870, 0.725620208427579020, 0.725585802749346700, 0.725551395257149840, 0.725516985951074170, 0.725482574831206370, 0.725448161897632170, 0.725413747150437490, +0.725379330589708160, 0.725344912215530880, 0.725310492027991250, 0.725276070027175420, 0.725241646213169110, 0.725207220586058910, 0.725172793145930750, 0.725138363892870230, +0.725103932826964170, 0.725069499948298280, 0.725035065256958600, 0.725000628753030950, 0.724966190436602040, 0.724931750307757690, 0.724897308366583950, 0.724862864613166620, +0.724828419047592430, 0.724793971669947190, 0.724759522480317050, 0.724725071478787840, 0.724690618665446150, 0.724656164040377910, 0.724621707603669400, 0.724587249355406190, +0.724552789295675240, 0.724518327424562240, 0.724483863742153120, 0.724449398248534710, 0.724414930943792830, 0.724380461828013520, 0.724345990901282820, 0.724311518163687440, +0.724277043615313310, 0.724242567256246470, 0.724208089086572970, 0.724173609106379510, 0.724139127315752030, 0.724104643714776790, 0.724070158303539600, 0.724035671082127300, +0.724001182050625800, 0.723966691209121490, 0.723932198557699970, 0.723897704096448380, 0.723863207825452550, 0.723828709744798290, 0.723794209854572550, 0.723759708154861350, +0.723725204645750850, 0.723690699327327100, 0.723656192199676810, 0.723621683262886120, 0.723587172517041190, 0.723552659962227950, 0.723518145598533560, 0.723483629426043610, +0.723449111444844690, 0.723414591655022640, 0.723380070056664380, 0.723345546649856060, 0.723311021434683840, 0.723276494411233760, 0.723241965579592640, 0.723207434939846740, +0.723172902492082210, 0.723138368236385110, 0.723103832172842460, 0.723069294301540100, 0.723034754622564280, 0.723000213136001820, 0.722965669841938880, 0.722931124740461840, +0.722896577831656620, 0.722862029115610150, 0.722827478592408700, 0.722792926262138650, 0.722758372124885810, 0.722723816180737440, 0.722689258429779490, 0.722654698872098430, +0.722620137507780310, 0.722585574336912170, 0.722551009359580050, 0.722516442575870440, 0.722481873985869380, 0.722447303589664020, 0.722412731387340300, 0.722378157378984480, +0.722343581564683590, 0.722309003944523800, 0.722274424518591470, 0.722239843286972660, 0.722205260249754620, 0.722170675407023510, 0.722136088758865590, 0.722101500305367240, +0.722066910046615380, 0.722032317982696290, 0.721997724113696340, 0.721963128439701900, 0.721928530960799790, 0.721893931677076490, 0.721859330588618290, 0.721824727695511430, +0.721790122997843180, 0.721755516495699470, 0.721720908189166680, 0.721686298078332070, 0.721651686163281570, 0.721617072444102000, 0.721582456920879300, 0.721547839593700830, +0.721513220462652760, 0.721478599527821560, 0.721443976789293620, 0.721409352247156080, 0.721374725901495100, 0.721340097752397380, 0.721305467799948970, 0.721270836044237360, +0.721236202485348590, 0.721201567123369250, 0.721166929958385830, 0.721132290990485260, 0.721097650219754030, 0.721063007646278290, 0.721028363270145410, 0.720993717091441550, +0.720959069110253540, 0.720924419326667510, 0.720889767740770630, 0.720855114352649370, 0.720820459162390460, 0.720785802170079930, 0.720751143375805260, 0.720716482779652720, +0.720681820381709030, 0.720647156182060430, 0.720612490180794210, 0.720577822377996840, 0.720543152773754910, 0.720508481368154820, 0.720473808161283700, 0.720439133153228160, +0.720404456344074800, 0.720369777733909870, 0.720335097322820970, 0.720300415110894270, 0.720265731098216120, 0.720231045284874140, 0.720196357670954360, 0.720161668256543820, +0.720126977041728680, 0.720092284026596530, 0.720057589211233640, 0.720022892595726720, 0.719988194180162240, 0.719953493964627710, 0.719918791949209380, 0.719884088133994070, +0.719849382519068160, 0.719814675104519130, 0.719779965890433580, 0.719745254876897890, 0.719710542063998870, 0.719675827451823790, 0.719641111040459140, 0.719606392829991390, +0.719571672820508050, 0.719536951012095470, 0.719502227404840490, 0.719467501998829580, 0.719432774794150240, 0.719398045790889060, 0.719363314989132750, 0.719328582388967800, +0.719293847990481680, 0.719259111793761010, 0.719224373798892480, 0.719189634005962810, 0.719154892415059250, 0.719120149026268530, 0.719085403839677450, 0.719050656855372510, +0.719015908073441290, 0.718981157493970180, 0.718946405117045990, 0.718911650942756110, 0.718876894971187010, 0.718842137202425730, 0.718807377636558780, 0.718772616273673610, +0.718737853113857070, 0.718703088157195750, 0.718668321403776460, 0.718633552853686690, 0.718598782507013030, 0.718564010363842430, 0.718529236424261470, 0.718494460688357760, +0.718459683156217890, 0.718424903827928780, 0.718390122703577050, 0.718355339783250500, 0.718320555067035400, 0.718285768555019020, 0.718250980247287950, 0.718216190143929680, +0.718181398245030910, 0.718146604550678360, 0.718111809060959620, 0.718077011775961390, 0.718042212695770620, 0.718007411820473900, 0.717972609150159040, 0.717937804684912750, +0.717902998424821750, 0.717868190369973070, 0.717833380520454200, 0.717798568876351960, 0.717763755437753170, 0.717728940204744760, 0.717694123177414320, 0.717659304355848460, +0.717624483740134430, 0.717589661330358840, 0.717554837126609500, 0.717520011128973010, 0.717485183337536190, 0.717450353752386640, 0.717415522373611280, 0.717380689201297050, +0.717345854235530880, 0.717311017476400360, 0.717276178923992310, 0.717241338578393780, 0.717206496439691590, 0.717171652507973540, 0.717136806783326250, 0.717101959265836970, +0.717067109955592530, 0.717032258852680630, 0.716997405957188080, 0.716962551269201940, 0.716927694788809130, 0.716892836516097480, 0.716857976451153680, 0.716823114594064670, +0.716788250944918160, 0.716753385503800970, 0.716718518270800350, 0.716683649246003140, 0.716648778429497150, 0.716613905821369190, 0.716579031421706420, 0.716544155230595780, +0.716509277248125080, 0.716474397474381130, 0.716439515909451210, 0.716404632553422350, 0.716369747406382040, 0.716334860468417430, 0.716299971739615680, 0.716265081220063600, +0.716230188909849240, 0.716195294809059300, 0.716160398917780940, 0.716125501236101750, 0.716090601764108880, 0.716055700501889490, 0.716020797449530620, 0.715985892607119980, +0.715950985974744600, 0.715916077552491760, 0.715881167340448490, 0.715846255338702610, 0.715811341547341050, 0.715776425966451080, 0.715741508596119740, 0.715706589436435060, +0.715671668487483760, 0.715636745749353430, 0.715601821222130900, 0.715566894905903970, 0.715531966800759920, 0.715497036906786010, 0.715462105224069170, 0.715427171752697320, +0.715392236492757630, 0.715357299444336900, 0.715322360607523300, 0.715287419982403860, 0.715252477569065850, 0.715217533367596300, 0.715182587378083160, 0.715147639600613670, +0.715112690035275000, 0.715077738682154410, 0.715042785541339710, 0.715007830612917950, 0.714972873896976720, 0.714937915393603070, 0.714902955102884820, 0.714867993024909220, +0.714833029159763540, 0.714798063507535050, 0.714763096068311790, 0.714728126842180790, 0.714693155829229100, 0.714658183029544760, 0.714623208443215030, 0.714588232070327400, +0.714553253910968690, 0.714518273965227270, 0.714483292233190070, 0.714448308714944800, 0.714413323410578280, 0.714378336320178890, 0.714343347443833540, 0.714308356781629960, +0.714273364333655070, 0.714238370099997130, 0.714203374080743190, 0.714168376275980840, 0.714133376685797350, 0.714098375310280640, 0.714063372149517980, 0.714028367203596640, +0.713993360472604640, 0.713958351956629160, 0.713923341655757990, 0.713888329570077970, 0.713853315699677580, 0.713818300044643860, 0.713783282605064410, 0.713748263381026370, +0.713713242372618020, 0.713678219579926610, 0.713643195003039520, 0.713608168642044240, 0.713573140497028800, 0.713538110568080590, 0.713503078855287080, 0.713468045358735540, +0.713433010078514120, 0.713397973014710310, 0.713362934167411480, 0.713327893536705000, 0.713292851122679150, 0.713257806925421180, 0.713222760945018350, 0.713187713181558940, +0.713152663635130190, 0.713117612305819830, 0.713082559193715100, 0.713047504298904400, 0.713012447621474750, 0.712977389161514100, 0.712942328919109690, 0.712907266894349690, +0.712872203087321580, 0.712837137498112950, 0.712802070126811180, 0.712767000973504540, 0.712731930038280390, 0.712696857321226340, 0.712661782822429980, 0.712626706541979350, +0.712591628479962050, 0.712556548636465340, 0.712521467011577480, 0.712486383605386080, 0.712451298417978610, 0.712416211449442670, 0.712381122699866530, 0.712346032169337450, +0.712310939857943470, 0.712275845765771630, 0.712240749892910640, 0.712205652239447760, 0.712170552805470700, 0.712135451591066950, 0.712100348596324870, 0.712065243821331960, +0.712030137266175920, 0.711995028930944240, 0.711959918815725290, 0.711924806920606560, 0.711889693245675530, 0.711854577791020460, 0.711819460556729070, 0.711784341542888940, +0.711749220749587690, 0.711714098176913670, 0.711678973824954490, 0.711643847693797850, 0.711608719783531240, 0.711573590094243150, 0.711538458626021050, 0.711503325378952890, +0.711468190353126030, 0.711433053548629070, 0.711397914965549380, 0.711362774603975010, 0.711327632463993330, 0.711292488545692820, 0.711257342849161200, 0.711222195374485830, +0.711187046121755320, 0.711151895091057250, 0.711116742282479340, 0.711081587696109410, 0.711046431332035710, 0.711011273190345960, 0.710976113271127970, 0.710940951574469460, +0.710905788100458900, 0.710870622849183790, 0.710835455820732150, 0.710800287015191600, 0.710765116432650500, 0.710729944073196780, 0.710694769936918160, 0.710659594023902330, +0.710624416334237790, 0.710589236868012120, 0.710554055625313490, 0.710518872606229370, 0.710483687810848360, 0.710448501239258180, 0.710413312891546410, 0.710378122767801660, +0.710342930868111510, 0.710307737192564130, 0.710272541741247100, 0.710237344514249140, 0.710202145511657610, 0.710166944733560790, 0.710131742180046380, 0.710096537851202750, +0.710061331747117940, 0.710026123867879780, 0.709990914213575960, 0.709955702784295210, 0.709920489580125100, 0.709885274601153800, 0.709850057847469020, 0.709814839319159450, +0.709779619016312810, 0.709744396939016700, 0.709709173087359920, 0.709673947461430310, 0.709638720061315790, 0.709603490887104060, 0.709568259938884060, 0.709533027216743380, +0.709497792720770070, 0.709462556451051940, 0.709427318407677810, 0.709392078590735390, 0.709356837000312710, 0.709321593636497720, 0.709286348499378990, 0.709251101589044360, +0.709215852905581980, 0.709180602449079770, 0.709145350219626320, 0.709110096217309360, 0.709074840442217020, 0.709039582894437800, 0.709004323574059630, 0.708969062481170640, +0.708933799615858780, 0.708898534978212650, 0.708863268568320160, 0.708828000386269590, 0.708792730432148630, 0.708757458706046120, 0.708722185208050080, 0.708686909938248450, +0.708651632896729280, 0.708616354083581370, 0.708581073498892660, 0.708545791142751070, 0.708510507015244870, 0.708475221116462550, 0.708439933446492360, 0.708404644005422250, +0.708369352793340120, 0.708334059810335040, 0.708298765056494810, 0.708263468531907250, 0.708228170236661400, 0.708192870170845200, 0.708157568334546790, 0.708122264727854110, +0.708086959350856080, 0.708051652203640640, 0.708016343286296150, 0.707981032598910430, 0.707945720141572420, 0.707910405914370040, 0.707875089917391790, 0.707839772150725470, +0.707804452614460010, 0.707769131308683350, 0.707733808233483970, 0.707698483388949700, 0.707663156775169560, 0.707627828392231480, 0.707592498240223630, 0.707557166319234820, +0.707521832629352980, 0.707486497170666690, 0.707451159943263800, 0.707415820947233210, 0.707380480182663200, 0.707345137649641910, 0.707309793348257500, 0.707274447278599010, +0.707239099440754250, 0.707203749834811820, 0.707168398460859770, 0.707133045318986910, 0.707097690409281500, 0.707062333731831800, 0.707026975286726090, 0.706991615074053170, +0.706956253093901200, 0.706920889346358330, 0.706885523831513480, 0.706850156549454820, 0.706814787500270820, 0.706779416684049530, 0.706744044100880100, 0.706708669750850450, +0.706673293634049070, 0.706637915750564230, 0.706602536100484960, 0.706567154683899300, 0.706531771500895630, 0.706496386551562440, 0.706460999835988420, 0.706425611354261960, +0.706390221106471540, 0.706354829092705190, 0.706319435313052080, 0.706284039767600460, 0.706248642456438260, 0.706213243379654960, 0.706177842537338400, 0.706142439929577260, +0.706107035556459820, 0.706071629418075000, 0.706036221514511180, 0.706000811845856720, 0.705965400412199910, 0.705929987213629980, 0.705894572250235110, 0.705859155522103770, +0.705823737029324220, 0.705788316771985610, 0.705752894750176220, 0.705717470963984630, 0.705682045413498990, 0.705646618098808580, 0.705611189020001640, 0.705575758177166780, +0.705540325570392150, 0.705504891199767000, 0.705469455065379720, 0.705434017167318350, 0.705398577505672360, 0.705363136080529920, 0.705327692891979500, 0.705292247940109700, +0.705256801225009560, 0.705221352746767340, 0.705185902505471750, 0.705150450501211170, 0.705114996734074740, 0.705079541204150840, 0.705044083911528060, 0.705008624856294790, +0.704973164038540160, 0.704937701458352770, 0.704902237115821010, 0.704866771011033450, 0.704831303144079160, 0.704795833515046710, 0.704760362124024380, 0.704724888971101300, +0.704689414056366200, 0.704653937379907450, 0.704618458941813520, 0.704582978742173790, 0.704547496781076640, 0.704512013058610660, 0.704476527574864450, 0.704441040329927160, +0.704405551323887380, 0.704370060556833600, 0.704334568028854410, 0.704299073740039080, 0.704263577690476090, 0.704228079880254150, 0.704192580309461750, 0.704157078978188130, +0.704121575886521800, 0.704086071034551340, 0.704050564422365910, 0.704015056050054100, 0.703979545917704620, 0.703944034025405950, 0.703908520373247580, 0.703873004961317880, +0.703837487789705670, 0.703801968858499440, 0.703766448167788550, 0.703730925717661600, 0.703695401508207310, 0.703659875539514260, 0.703624347811671710, 0.703588818324768380, +0.703553287078892970, 0.703517754074134080, 0.703482219310581080, 0.703446682788322560, 0.703411144507447240, 0.703375604468043810, 0.703340062670201660, 0.703304519114009490, +0.703268973799555550, 0.703233426726929570, 0.703197877896220010, 0.703162327307515710, 0.703126774960905250, 0.703091220856478240, 0.703055664994323150, 0.703020107374528910, +0.702984547997184130, 0.702948986862378280, 0.702913423970199850, 0.702877859320737990, 0.702842292914081180, 0.702806724750318800, 0.702771154829539670, 0.702735583151832710, +0.702700009717286520, 0.702664434525990590, 0.702628857578033510, 0.702593278873503980, 0.702557698412491600, 0.702522116195084980, 0.702486532221373030, 0.702450946491444460, +0.702415359005388870, 0.702379769763294860, 0.702344178765251350, 0.702308586011347160, 0.702272991501671770, 0.702237395236314010, 0.702201797215362690, 0.702166197438906510, +0.702130595907035190, 0.702094992619837430, 0.702059387577402160, 0.702023780779818090, 0.701988172227174910, 0.701952561919561240, 0.701916949857065870, 0.701881336039778540, +0.701845720467787700, 0.701810103141182750, 0.701774484060052050, 0.701738863224485640, 0.701703240634571900, 0.701667616290400090, 0.701631990192059020, 0.701596362339638180, +0.701560732733226500, 0.701525101372913020, 0.701489468258786440, 0.701453833390936480, 0.701418196769451940, 0.701382558394421870, 0.701346918265935200, 0.701311276384081420, +0.701275632748949550, 0.701239987360628200, 0.701204340219207300, 0.701168691324775440, 0.701133040677421990, 0.701097388277235560, 0.701061734124305950, 0.701026078218721980, +0.700990420560572810, 0.700954761149947370, 0.700919099986935250, 0.700883437071625370, 0.700847772404107010, 0.700812105984468750, 0.700776437812800630, 0.700740767889191480, +0.700705096213730340, 0.700669422786506120, 0.700633747607608660, 0.700598070677126870, 0.700562391995149910, 0.700526711561766600, 0.700491029377066870, 0.700455345441139520, +0.700419659754073610, 0.700383972315958720, 0.700348283126884020, 0.700312592186938530, 0.700276899496211300, 0.700241205054792150, 0.700205508862769890, 0.700169810920233890, +0.700134111227273090, 0.700098409783977300, 0.700062706590435460, 0.700027001646736920, 0.699991294952970520, 0.699955586509226290, 0.699919876315592940, 0.699884164372160060, +0.699848450679016350, 0.699812735236251760, 0.699777018043955420, 0.699741299102216270, 0.699705578411124130, 0.699669855970768030, 0.699634131781237350, 0.699598405842621010, +0.699562678155008940, 0.699526948718490190, 0.699491217533154020, 0.699455484599089570, 0.699419749916386670, 0.699384013485134350, 0.699348275305422100, 0.699312535377338840, +0.699276793700974510, 0.699241050276418140, 0.699205305103759220, 0.699169558183086790, 0.699133809514490670, 0.699098059098060110, 0.699062306933884050, 0.699026553022052520, +0.698990797362654570, 0.698955039955779680, 0.698919280801516880, 0.698883519899956230, 0.698847757251186640, 0.698811992855297830, 0.698776226712378600, 0.698740458822519230, +0.698704689185808640, 0.698668917802336310, 0.698633144672191400, 0.698597369795463940, 0.698561593172242980, 0.698525814802618110, 0.698490034686678470, 0.698454252824513900, +0.698418469216213870, 0.698382683861867530, 0.698346896761564250, 0.698311107915393970, 0.698275317323445940, 0.698239524985809320, 0.698203730902574150, 0.698167935073829680, +0.698132137499665410, 0.698096338180170470, 0.698060537115435030, 0.698024734305548230, 0.697988929750599560, 0.697953123450678280, 0.697917315405874430, 0.697881505616277380, +0.697845694081976610, 0.697809880803061170, 0.697774065779621420, 0.697738249011746530, 0.697702430499525960, 0.697666610243048990, 0.697630788242405760, 0.697594964497685650, +0.697559139008977810, 0.697523311776372390, 0.697487482799958760, 0.697451652079826400, 0.697415819616064580, 0.697379985408763560, 0.697344149458012490, 0.697308311763901180, +0.697272472326518680, 0.697236631145955240, 0.697200788222300360, 0.697164943555643510, 0.697129097146073850, 0.697093248993681860, 0.697057399098556800, 0.697021547460788150, +0.696985694080465400, 0.696949838957678590, 0.696913982092517310, 0.696878123485070720, 0.696842263135429190, 0.696806401043681970, 0.696770537209918660, 0.696734671634228750, +0.696698804316702500, 0.696662935257429280, 0.696627064456498690, 0.696591191913999990, 0.696555317630023760, 0.696519441604659280, 0.696483563837996140, 0.696447684330123720, +0.696411803081132490, 0.696375920091111710, 0.696340035360151100, 0.696304148888340140, 0.696268260675769080, 0.696232370722527420, 0.696196479028704520, 0.696160585594390650, +0.696124690419675400, 0.696088793504648470, 0.696052894849399140, 0.696016994454017880, 0.695981092318594170, 0.695945188443217730, 0.695909282827978040, 0.695873375472965460, +0.695837466378269380, 0.695801555543979710, 0.695765642970185730, 0.695729728656978020, 0.695693812604445960, 0.695657894812679480, 0.695621975281767830, 0.695586054011801620, +0.695550131002870220, 0.695514206255063550, 0.695478279768470990, 0.695442351543183120, 0.695406421579289220, 0.695370489876879110, 0.695334556436043030, 0.695298621256870590, +0.695262684339451600, 0.695226745683875550, 0.695190805290232920, 0.695154863158613300, 0.695118919289106520, 0.695082973681802160, 0.695047026336790720, 0.695011077254161670, +0.694975126434004940, 0.694939173876410020, 0.694903219581467500, 0.694867263549266980, 0.694831305779898270, 0.694795346273450960, 0.694759385030015660, 0.694723422049681850, +0.694687457332539230, 0.694651490878678170, 0.694615522688188490, 0.694579552761159900, 0.694543581097682220, 0.694507607697845810, 0.694471632561740490, 0.694435655689455980, +0.694399677081082080, 0.694363696736709280, 0.694327714656427290, 0.694291730840325920, 0.694255745288494990, 0.694219758001024980, 0.694183768978005490, 0.694147778219526670, +0.694111785725678110, 0.694075791496550410, 0.694039795532233160, 0.694003797832816180, 0.693967798398389960, 0.693931797229044300, 0.693895794324869030, 0.693859789685954080, +0.693823783312389920, 0.693787775204266380, 0.693751765361673380, 0.693715753784700520, 0.693679740473438720, 0.693643725427977480, 0.693607708648407040, 0.693571690134816900, +0.693535669887297870, 0.693499647905939760, 0.693463624190832410, 0.693427598742065830, 0.693391571559730410, 0.693355542643916190, 0.693319511994712980, 0.693283479612210820, +0.693247445496500190, 0.693211409647670920, 0.693175372065812920, 0.693139332751016690, 0.693103291703372150, 0.693067248922969450, 0.693031204409898290, 0.692995158164249390, +0.692959110186112670, 0.692923060475578060, 0.692887009032735590, 0.692850955857675870, 0.692814900950488810, 0.692778844311264350, 0.692742785940092640, 0.692706725837064160, +0.692670664002268950, 0.692634600435797050, 0.692598535137738390, 0.692562468108183560, 0.692526399347222710, 0.692490328854945440, 0.692454256631442670, 0.692418182676804330, +0.692382106991120460, 0.692346029574481100, 0.692309950426976960, 0.692273869548697850, 0.692237786939734150, 0.692201702600175660, 0.692165616530113210, 0.692129528729636730, +0.692093439198836370, 0.692057347937802160, 0.692021254946624920, 0.691985160225394470, 0.691949063774201180, 0.691912965593134870, 0.691876865682286570, 0.691840764041745990, +0.691804660671603180, 0.691768555571949050, 0.691732448742873540, 0.691696340184467020, 0.691660229896819190, 0.691624117880021090, 0.691588004134162770, 0.691551888659334480, +0.691515771455626040, 0.691479652523128600, 0.691443531861931970, 0.691407409472126530, 0.691371285353802210, 0.691335159507050050, 0.691299031931959960, 0.691262902628622220, +0.691226771597126980, 0.691190638837565150, 0.691154504350026680, 0.691118368134601700, 0.691082230191381040, 0.691046090520454850, 0.691009949121913380, 0.690973805995846790, +0.690937661142345890, 0.690901514561500950, 0.690865366253402220, 0.690829216218139750, 0.690793064455804460, 0.690756910966486610, 0.690720755750276470, 0.690684598807264070, +0.690648440137540560, 0.690612279741195990, 0.690576117618320610, 0.690539953769004680, 0.690503788193339130, 0.690467620891414220, 0.690431451863320110, 0.690395281109147160, +0.690359108628986310, 0.690322934422927580, 0.690286758491061360, 0.690250580833478460, 0.690214401450269130, 0.690178220341523870, 0.690142037507332610, 0.690105852947786590, +0.690069666662976090, 0.690033478652991250, 0.689997288917922450, 0.689961097457860830, 0.689924904272896430, 0.689888709363119630, 0.689852512728620910, 0.689816314369491200, +0.689780114285820640, 0.689743912477699840, 0.689707708945218930, 0.689671503688469080, 0.689635296707540420, 0.689599088002523230, 0.689562877573508650, 0.689526665420586830, +0.689490451543848470, 0.689454235943383510, 0.689418018619283310, 0.689381799571638140, 0.689345578800538480, 0.689309356306074480, 0.689273132088337400, 0.689236906147417510, +0.689200678483405380, 0.689164449096391300, 0.689128217986466280, 0.689091985153720720, 0.689055750598245310, 0.689019514320130200, 0.688983276319466540, 0.688947036596344710, +0.688910795150854960, 0.688874551983088560, 0.688838307093135760, 0.688802060481087270, 0.688765812147033250, 0.688729562091065060, 0.688693310313272860, 0.688657056813747560, +0.688620801592579100, 0.688584544649859080, 0.688548285985677630, 0.688512025600125590, 0.688475763493292980, 0.688439499665271400, 0.688403234116151120, 0.688366966846022610, +0.688330697854976470, 0.688294427143103850, 0.688258154710495230, 0.688221880557241210, 0.688185604683432150, 0.688149327089159320, 0.688113047774513320, 0.688076766739584290, +0.688040483984463710, 0.688004199509241850, 0.687967913314009530, 0.687931625398857110, 0.687895335763875960, 0.687859044409156460, 0.687822751334789320, 0.687786456540865010, +0.687750160027474910, 0.687713861794709390, 0.687677561842659160, 0.687641260171414800, 0.687604956781067480, 0.687568651671707890, 0.687532344843426620, 0.687496036296314170, +0.687459726030461900, 0.687423414045960410, 0.687387100342900070, 0.687350784921372250, 0.687314467781467430, 0.687278148923276540, 0.687241828346889850, 0.687205506052398940, +0.687169182039894300, 0.687132856309466740, 0.687096528861206650, 0.687060199695205600, 0.687023868811553970, 0.686987536210342810, 0.686951201891662370, 0.686914865855604240, +0.686878528102259020, 0.686842188631717420, 0.686805847444070140, 0.686769504539408440, 0.686733159917823020, 0.686696813579404370, 0.686660465524244090, 0.686624115752432540, +0.686587764264060760, 0.686551411059219240, 0.686515056137999460, 0.686478699500492010, 0.686442341146787930, 0.686405981076977590, 0.686369619291152700, 0.686333255789403740, +0.686296890571821640, 0.686260523638496880, 0.686224154989521270, 0.686187784624985200, 0.686151412544979690, 0.686115038749595340, 0.686078663238923750, 0.686042286013055390, +0.686005907072081420, 0.685969526416092320, 0.685933144045179690, 0.685896759959434330, 0.685860374158946630, 0.685823986643808280, 0.685787597414110110, 0.685751206469942810, +0.685714813811397320, 0.685678419438565000, 0.685642023351536570, 0.685605625550403270, 0.685569226035255500, 0.685532824806184940, 0.685496421863282300, 0.685460017206638740, +0.685423610836344730, 0.685387202752491990, 0.685350792955171210, 0.685314381444473540, 0.685277968220489590, 0.685241553283310930, 0.685205136633028510, 0.685168718269732910, +0.685132298193515840, 0.685095876404468010, 0.685059452902680440, 0.685023027688243970, 0.684986600761250290, 0.684950172121789990, 0.684913741769954340, 0.684877309705834050, +0.684840875929520700, 0.684804440441105220, 0.684768003240678660, 0.684731564328331820, 0.684695123704156310, 0.684658681368242930, 0.684622237320682950, 0.684585791561566960, +0.684549344090986890, 0.684512894909033550, 0.684476444015797550, 0.684439991411370690, 0.684403537095843890, 0.684367081069308330, 0.684330623331854680, 0.684294163883574890, +0.684257702724559550, 0.684221239854900020, 0.684184775274687020, 0.684148308984012470, 0.684111840982967180, 0.684075371271642200, 0.684038899850128560, 0.684002426718517850, +0.683965951876901230, 0.683929475325369630, 0.683892997064014070, 0.683856517092926270, 0.683820035412197270, 0.683783552021917760, 0.683747066922179790, 0.683710580113074170, +0.683674091594691950, 0.683637601367124370, 0.683601109430462930, 0.683564615784798880, 0.683528120430223150, 0.683491623366826890, 0.683455124594701810, 0.683418624113939050, +0.683382121924629660, 0.683345618026864550, 0.683309112420735780, 0.683272605106334250, 0.683236096083751240, 0.683199585353077680, 0.683163072914405370, 0.683126558767825460, +0.683090042913429120, 0.683053525351307370, 0.683017006081552140, 0.682980485104254350, 0.682943962419505060, 0.682907438027396290, 0.682870911928018740, 0.682834384121464020, +0.682797854607822940, 0.682761323387187650, 0.682724790459648960, 0.682688255825298350, 0.682651719484226760, 0.682615181436526220, 0.682578641682287660, 0.682542100221602550, +0.682505557054561840, 0.682469012181257550, 0.682432465601780840, 0.682395917316222840, 0.682359367324674730, 0.682322815627228520, 0.682286262223975370, 0.682249707115006210, +0.682213150300412960, 0.682176591780287000, 0.682140031554719580, 0.682103469623801640, 0.682066905987625430, 0.682030340646281870, 0.681993773599862570, 0.681957204848458450, +0.681920634392161660, 0.681884062231063240, 0.681847488365254770, 0.681810912794827080, 0.681774335519872540, 0.681737756540482190, 0.681701175856747390, 0.681664593468759410, +0.681628009376610170, 0.681591423580390930, 0.681554836080192850, 0.681518246876107960, 0.681481655968227520, 0.681445063356642900, 0.681408469041445250, 0.681371873022726840, +0.681335275300578690, 0.681298675875092410, 0.681262074746359030, 0.681225471914470800, 0.681188867379519000, 0.681152261141594880, 0.681115653200789820, 0.681079043557196060, +0.681042432210904660, 0.681005819162007090, 0.680969204410594720, 0.680932587956759590, 0.680895969800593080, 0.680859349942186550, 0.680822728381631380, 0.680786105119019710, +0.680749480154442810, 0.680712853487991820, 0.680676225119759120, 0.680639595049835730, 0.680602963278313490, 0.680566329805283420, 0.680529694630837900, 0.680493057755068080, +0.680456419178065650, 0.680419778899921890, 0.680383136920728940, 0.680346493240578170, 0.680309847859561170, 0.680273200777769200, 0.680236551995294650, 0.680199901512228640, +0.680163249328662900, 0.680126595444688680, 0.680089939860398340, 0.680053282575883160, 0.680016623591234380, 0.679979962906544390, 0.679943300521904550, 0.679906636437406340, +0.679869970653141360, 0.679833303169201650, 0.679796633985678800, 0.679759963102664290, 0.679723290520249600, 0.679686616238526890, 0.679649940257587740, 0.679613262577523750, +0.679576583198426290, 0.679539902120387620, 0.679503219343499220, 0.679466534867852800, 0.679429848693539730, 0.679393160820652380, 0.679356471249282000, 0.679319779979520200, +0.679283087011459340, 0.679246392345190690, 0.679209695980806050, 0.679172997918396910, 0.679136298158055540, 0.679099596699873410, 0.679062893543942340, 0.679026188690353690, +0.678989482139199960, 0.678952773890572400, 0.678916063944562940, 0.678879352301263060, 0.678842638960765130, 0.678805923923160530, 0.678769207188541170, 0.678732488756998430, +0.678695768628624800, 0.678659046803511750, 0.678622323281750760, 0.678585598063434330, 0.678548871148653810, 0.678512142537501250, 0.678475412230067910, 0.678438680226446380, +0.678401946526728140, 0.678365211131005120, 0.678328474039368690, 0.678291735251911330, 0.678254994768724640, 0.678218252589900540, 0.678181508715530510, 0.678144763145706930, +0.678108015880521500, 0.678071266920066030, 0.678034516264432120, 0.677997763913712140, 0.677961009867997790, 0.677924254127381000, 0.677887496691953140, 0.677850737561806920, +0.677813976737033810, 0.677777214217725410, 0.677740450003974430, 0.677703684095872230, 0.677666916493510850, 0.677630147196981780, 0.677593376206377720, 0.677556603521790260, +0.677519829143311210, 0.677483053071032290, 0.677446275305046090, 0.677409495845444190, 0.677372714692318630, 0.677335931845760800, 0.677299147305863600, 0.677262361072718530, +0.677225573146417400, 0.677188783527052250, 0.677151992214715340, 0.677115199209498360, 0.677078404511493150, 0.677041608120792280, 0.677004810037487360, 0.676968010261670420, +0.676931208793433160, 0.676894405632868070, 0.676857600780067070, 0.676820794235122090, 0.676783985998124840, 0.676747176069167790, 0.676710364448342980, 0.676673551135742120, +0.676636736131457140, 0.676599919435580620, 0.676563101048204270, 0.676526280969420140, 0.676489459199320020, 0.676452635737996630, 0.676415810585541680, 0.676378983742046750, +0.676342155207604770, 0.676305324982307330, 0.676268493066246700, 0.676231659459514470, 0.676194824162203330, 0.676157987174405230, 0.676121148496212080, 0.676084308127715810, +0.676047466069009010, 0.676010622320183610, 0.675973776881331640, 0.675936929752544930, 0.675900080933916180, 0.675863230425537200, 0.675826378227500250, 0.675789524339896920, +0.675752668762820140, 0.675715811496361730, 0.675678952540613830, 0.675642091895668040, 0.675605229561617500, 0.675568365538553820, 0.675531499826569020, 0.675494632425755690, +0.675457763336205770, 0.675420892558011410, 0.675384020091264640, 0.675347145936058050, 0.675310270092483570, 0.675273392560633460, 0.675236513340599530, 0.675199632432474610, +0.675162749836350720, 0.675125865552319790, 0.675088979580473980, 0.675052091920905980, 0.675015202573707840, 0.674978311538971700, 0.674941418816789370, 0.674904524407253790, +0.674867628310456990, 0.674830730526490790, 0.674793831055448100, 0.674756929897420750, 0.674720027052501110, 0.674683122520781110, 0.674646216302353660, 0.674609308397310590, +0.674572398805744270, 0.674535487527746720, 0.674498574563410670, 0.674461659912828140, 0.674424743576091500, 0.674387825553292800, 0.674350905844524730, 0.674313984449879440, +0.674277061369449200, 0.674240136603325930, 0.674203210151602670, 0.674166282014371450, 0.674129352191724100, 0.674092420683753750, 0.674055487490552330, 0.674018552612212220, +0.673981616048825340, 0.673944677800484840, 0.673907737867282640, 0.673870796249311010, 0.673833852946662090, 0.673796907959428930, 0.673759961287703430, 0.673723012931577990, +0.673686062891144740, 0.673649111166496730, 0.673612157757725870, 0.673575202664924650, 0.673538245888185010, 0.673501287427600180, 0.673464327283262110, 0.673427365455262830, +0.673390401943695590, 0.673353436748652220, 0.673316469870225310, 0.673279501308506890, 0.673242531063590110, 0.673205559135566900, 0.673168585524529850, 0.673131610230571000, +0.673094633253783380, 0.673057654594259260, 0.673020674252091000, 0.672983692227370760, 0.672946708520191560, 0.672909723130645570, 0.672872736058825360, 0.672835747304822870, +0.672798756868731470, 0.672761764750643090, 0.672724770950650310, 0.672687775468845280, 0.672650778305321160, 0.672613779460170090, 0.672576778933484220, 0.672539776725356700, +0.672502772835879780, 0.672465767265145950, 0.672428760013247250, 0.672391751080277160, 0.672354740466327590, 0.672317728171491160, 0.672280714195860110, 0.672243698539527590, +0.672206681202585870, 0.672169662185127410, 0.672132641487244500, 0.672095619109030260, 0.672058595050576970, 0.672021569311977320, 0.671984541893323240, 0.671947512794708210, +0.671910482016224500, 0.671873449557964130, 0.671836415420020480, 0.671799379602485810, 0.671762342105452710, 0.671725302929013330, 0.671688262073261160, 0.671651219538288210, +0.671614175324187320, 0.671577129431050630, 0.671540081858971400, 0.671503032608042010, 0.671465981678355030, 0.671428929070002730, 0.671391874783078490, 0.671354818817674560, +0.671317761173883530, 0.671280701851797890, 0.671243640851510670, 0.671206578173114470, 0.671169513816701420, 0.671132447782364920, 0.671095380070197310, 0.671058310680291310, +0.671021239612739070, 0.670984166867634180, 0.670947092445068890, 0.670910016345135810, 0.670872938567927400, 0.670835859113536940, 0.670798777982056780, 0.670761695173579750, +0.670724610688198110, 0.670687524526005330, 0.670650436687093680, 0.670613347171555960, 0.670576255979484560, 0.670539163110972840, 0.670502068566113160, 0.670464972344998470, +0.670427874447720900, 0.670390774874373930, 0.670353673625050050, 0.670316570699841740, 0.670279466098842260, 0.670242359822144080, 0.670205251869840040, 0.670168142242022590, +0.670131030938785120, 0.670093917960220000, 0.670056803306420150, 0.670019686977477820, 0.669982568973486740, 0.669945449294539250, 0.669908327940728080, 0.669871204912145800, +0.669834080208885800, 0.669796953831040650, 0.669759825778703080, 0.669722696051965550, 0.669685564650921660, 0.669648431575663890, 0.669611296826284730, 0.669574160402877540, +0.669537022305535130, 0.669499882534350000, 0.669462741089414950, 0.669425597970823350, 0.669388453178667690, 0.669351306713040990, 0.669314158574035640, 0.669277008761745230, +0.669239857276262230, 0.669202704117679680, 0.669165549286090070, 0.669128392781586760, 0.669091234604262670, 0.669054074754210410, 0.669016913231522570, 0.668979750036292840, +0.668942585168613710, 0.668905418628577770, 0.668868250416278620, 0.668831080531808840, 0.668793908975261480, 0.668756735746728890, 0.668719560846304790, 0.668682384274081890, +0.668645206030152870, 0.668608026114610680, 0.668570844527548670, 0.668533661269059550, 0.668496476339236260, 0.668459289738171480, 0.668422101465958820, 0.668384911522690860, +0.668347719908460650, 0.668310526623360770, 0.668273331667484930, 0.668236135040925830, 0.668198936743775950, 0.668161736776129110, 0.668124535138077900, 0.668087331829715360, +0.668050126851134190, 0.668012920202428080, 0.667975711883689540, 0.667938501895011800, 0.667901290236487480, 0.667864076908210260, 0.667826861910272850, 0.667789645242768290, +0.667752426905789290, 0.667715206899429540, 0.667677985223781740, 0.667640761878939060, 0.667603536864994070, 0.667566310182040600, 0.667529081830171340, 0.667491851809479340, +0.667454620120057520, 0.667417386761999350, 0.667380151735397660, 0.667342915040345370, 0.667305676676936080, 0.667268436645262700, 0.667231194945418160, 0.667193951577495280, +0.667156706541587870, 0.667119459837788640, 0.667082211466190840, 0.667044961426887180, 0.667007709719971360, 0.666970456345536310, 0.666933201303675170, 0.666895944594480650, +0.666858686218046560, 0.666821426174465830, 0.666784164463831490, 0.666746901086236470, 0.666709636041774470, 0.666672369330538420, 0.666635100952621020, 0.666597830908116310, +0.666560559197116990, 0.666523285819716320, 0.666486010776007000, 0.666448734066083070, 0.666411455690037240, 0.666374175647962750, 0.666336893939952550, 0.666299610566100430, +0.666262325526499330, 0.666225038821242400, 0.666187750450422560, 0.666150460414133620, 0.666113168712468510, 0.666075875345520490, 0.666038580313382480, 0.666001283616148300, +0.665963985253910980, 0.665926685226763350, 0.665889383534799320, 0.665852080178111820, 0.665814775156794210, 0.665777468470939220, 0.665740160120640970, 0.665702850105992280, +0.665665538427086420, 0.665628225084016420, 0.665590910076876210, 0.665553593405758810, 0.665516275070757280, 0.665478955071964750, 0.665441633409475260, 0.665404310083381630, +0.665366985093777230, 0.665329658440754980, 0.665292330124408910, 0.665255000144832080, 0.665217668502117830, 0.665180335196358890, 0.665143000227649610, 0.665105663596082700, +0.665068325301751420, 0.665030985344749580, 0.664993643725170220, 0.664956300443106940, 0.664918955498652430, 0.664881608891900840, 0.664844260622945330, 0.664806910691879140, +0.664769559098795320, 0.664732205843787890, 0.664694850926950020, 0.664657494348374960, 0.664620136108155850, 0.664582776206386840, 0.664545414643160750, 0.664508051418571170, +0.664470686532711130, 0.664433319985674790, 0.664395951777555060, 0.664358581908445100, 0.664321210378439050, 0.664283837187629960, 0.664246462336111290, 0.664209085823976090, +0.664171707651318610, 0.664134327818231780, 0.664096946324809200, 0.664059563171143900, 0.664022178357329910, 0.663984791883460600, 0.663947403749629240, 0.663910013955929080, +0.663872622502454270, 0.663835229389297840, 0.663797834616553280, 0.663760438184313850, 0.663723040092673690, 0.663685640341725950, 0.663648238931563660, 0.663610835862281200, +0.663573431133971710, 0.663536024746728570, 0.663498616700645030, 0.663461206995815230, 0.663423795632332450, 0.663386382610290260, 0.663348967929781710, 0.663311551590901050, +0.663274133593741540, 0.663236713938396670, 0.663199292624959800, 0.663161869653524970, 0.663124445024185330, 0.663087018737034790, 0.663049590792166190, 0.663012161189674100, +0.662974729929651450, 0.662937297012191730, 0.662899862437389080, 0.662862426205336860, 0.662824988316128460, 0.662787548769857350, 0.662750107566617560, 0.662712664706502700, +0.662675220189606010, 0.662637774016020980, 0.662600326185841860, 0.662562876699162030, 0.662525425556074850, 0.662487972756673820, 0.662450518301053280, 0.662413062189306290, +0.662375604421526760, 0.662338144997807850, 0.662300683918243930, 0.662263221182928240, 0.662225756791954610, 0.662188290745416190, 0.662150823043407330, 0.662113353686021420, +0.662075882673351820, 0.662038410005492910, 0.662000935682537930, 0.661963459704580590, 0.661925982071714270, 0.661888502784033330, 0.661851021841631140, 0.661813539244601400, +0.661776054993037490, 0.661738569087033770, 0.661701081526683610, 0.661663592312080720, 0.661626101443318570, 0.661588608920491540, 0.661551114743692880, 0.661513618913016520, +0.661476121428555720, 0.661438622290404950, 0.661401121498657710, 0.661363619053407240, 0.661326114954748020, 0.661288609202773660, 0.661251101797577730, 0.661213592739253620, +0.661176082027895910, 0.661138569663597960, 0.661101055646453720, 0.661063539976556420, 0.661026022654000570, 0.660988503678879740, 0.660950983051287630, 0.660913460771317630, +0.660875936839064430, 0.660838411254621390, 0.660800884018082240, 0.660763355129540650, 0.660725824589090900, 0.660688292396826580, 0.660650758552841280, 0.660613223057229360, +0.660575685910084420, 0.660538147111500270, 0.660500606661570400, 0.660463064560389390, 0.660425520808050610, 0.660387975404648110, 0.660350428350275350, 0.660312879645026830, +0.660275329288996130, 0.660237777282277060, 0.660200223624963220, 0.660162668317149200, 0.660125111358928480, 0.660087552750394990, 0.660049992491642310, 0.660012430582764930, +0.659974867023856550, 0.659937301815010980, 0.659899734956321820, 0.659862166447883540, 0.659824596289789960, 0.659787024482134550, 0.659749451025011920, 0.659711875918515540, +0.659674299162739560, 0.659636720757777570, 0.659599140703724050, 0.659561559000672700, 0.659523975648717450, 0.659486390647951890, 0.659448803998470720, 0.659411215700367540, +0.659373625753736260, 0.659336034158670590, 0.659298440915265240, 0.659260846023613790, 0.659223249483810170, 0.659185651295948080, 0.659148051460122230, 0.659110449976426320, +0.659072846844953820, 0.659035242065799660, 0.658997635639057330, 0.658960027564820860, 0.658922417843184060, 0.658884806474241520, 0.658847193458086950, 0.658809578794814500, +0.658771962484517640, 0.658734344527291290, 0.658696724923229060, 0.658659103672424970, 0.658621480774972850, 0.658583856230967380, 0.658546230040502170, 0.658508602203671470, +0.658470972720568870, 0.658433341591289190, 0.658395708815926240, 0.658358074394573610, 0.658320438327326120, 0.658282800614277570, 0.658245161255522020, 0.658207520251153140, +0.658169877601265880, 0.658132233305953940, 0.658094587365311350, 0.658056939779432030, 0.658019290548410680, 0.657981639672341020, 0.657943987151317410, 0.657906332985433330, +0.657868677174783920, 0.657831019719462670, 0.657793360619563950, 0.657755699875181450, 0.657718037486410110, 0.657680373453343630, 0.657642707776075920, 0.657605040454701690, +0.657567371489314880, 0.657529700880009730, 0.657492028626879940, 0.657454354730020450, 0.657416679189524960, 0.657379002005487820, 0.657341323178002870, 0.657303642707165010, +0.657265960593067970, 0.657228276835805980, 0.657190591435473090, 0.657152904392163890, 0.657115215705972530, 0.657077525376993150, 0.657039833405319570, 0.657002139791046820, +0.656964444534268610, 0.656926747635079410, 0.656889049093572930, 0.656851348909844200, 0.656813647083987040, 0.656775943616095480, 0.656738238506264340, 0.656700531754587650, +0.656662823361159660, 0.656625113326074210, 0.656587401649426420, 0.656549688331310000, 0.656511973371819440, 0.656474256771048540, 0.656436538529092340, 0.656398818646044880, +0.656361097122000300, 0.656323373957052650, 0.656285649151296950, 0.656247922704827120, 0.656210194617737440, 0.656172464890121930, 0.656134733522075630, 0.656097000513692460, +0.656059265865066470, 0.656021529576292670, 0.655983791647465010, 0.655946052078677950, 0.655908310870025320, 0.655870568021602370, 0.655832823533502920, 0.655795077405821440, +0.655757329638651850, 0.655719580232089320, 0.655681829186227860, 0.655644076501161850, 0.655606322176985330, 0.655568566213793220, 0.655530808611679780, 0.655493049370739380, +0.655455288491065930, 0.655417525972754600, 0.655379761815899520, 0.655341996020594620, 0.655304228586935040, 0.655266459515014940, 0.655228688804928790, 0.655190916456770410, +0.655153142470635160, 0.655115366846617090, 0.655077589584810550, 0.655039810685309700, 0.655002030148209680, 0.654964247973604640, 0.654926464161588840, 0.654888678712256640, +0.654850891625703090, 0.654813102902022210, 0.654775312541308720, 0.654737520543656530, 0.654699726909160900, 0.654661931637915860, 0.654624134730016130, 0.654586336185555620, +0.654548536004629700, 0.654510734187332410, 0.654472930733757900, 0.654435125644001410, 0.654397318918157110, 0.654359510556319580, 0.654321700558582850, 0.654283888925042300, +0.654246075655791960, 0.654208260750926420, 0.654170444210539940, 0.654132626034727660, 0.654094806223583850, 0.654056984777202980, 0.654019161695679310, 0.653981336979108100, +0.653943510627583490, 0.653905682641200190, 0.653867853020052240, 0.653830021764235100, 0.653792188873842830, 0.653754354348969780, 0.653716518189711220, 0.653678680396161280, +0.653640840968414680, 0.653602999906565670, 0.653565157210709510, 0.653527312880940460, 0.653489466917352990, 0.653451619320041700, 0.653413770089101620, 0.653375919224627120, +0.653338066726712800, 0.653300212595453010, 0.653262356830943030, 0.653224499433277090, 0.653186640402549920, 0.653148779738855880, 0.653110917442290220, 0.653073053512947200, +0.653035187950921300, 0.652997320756307680, 0.652959451929200800, 0.652921581469695260, 0.652883709377885420, 0.652845835653866670, 0.652807960297733360, 0.652770083309580080, +0.652732204689501330, 0.652694324437592450, 0.652656442553947610, 0.652618559038661730, 0.652580673891829170, 0.652542787113545190, 0.652504898703904270, 0.652467008663001110, +0.652429116990930090, 0.652391223687786680, 0.652353328753665140, 0.652315432188659950, 0.652277533992866480, 0.652239634166379200, 0.652201732709292830, 0.652163829621701830, +0.652125924903701580, 0.652088018555386450, 0.652050110576851360, 0.652012200968190570, 0.651974289729499670, 0.651936376860873130, 0.651898462362405560, 0.651860546234191430, +0.651822628476326440, 0.651784709088904730, 0.651746788072021350, 0.651708865425770560, 0.651670941150248040, 0.651633015245548060, 0.651595087711765660, 0.651557158548995100, +0.651519227757332060, 0.651481295336870940, 0.651443361287706190, 0.651405425609933420, 0.651367488303647100, 0.651329549368942050, 0.651291608805912750, 0.651253666614654780, +0.651215722795262630, 0.651177777347831220, 0.651139830272455030, 0.651101881569229550, 0.651063931238249460, 0.651025979279609480, 0.650988025693404190, 0.650950070479729190, +0.650912113638679070, 0.650874155170348630, 0.650836195074832480, 0.650798233352226090, 0.650760270002624150, 0.650722305026121270, 0.650684338422812920, 0.650646370192793700, +0.650608400336158630, 0.650570428853002090, 0.650532455743420000, 0.650494481007506620, 0.650456504645357090, 0.650418526657066010, 0.650380547042728850, 0.650342565802440430, +0.650304582936295450, 0.650266598444388830, 0.650228612326815950, 0.650190624583671610, 0.650152635215050620, 0.650114644221047810, 0.650076651601758650, 0.650038657357277950, +0.650000661487700190, 0.649962663993121080, 0.649924664873635430, 0.649886664129338040, 0.649848661760323630, 0.649810657766688000, 0.649772652148525640, 0.649734644905931690, +0.649696636039000740, 0.649658625547828610, 0.649620613432509870, 0.649582599693139580, 0.649544584329812550, 0.649506567342624240, 0.649468548731669590, 0.649430528497043640, +0.649392506638840960, 0.649354483157157380, 0.649316458052087600, 0.649278431323726530, 0.649240402972169230, 0.649202372997511160, 0.649164341399847240, 0.649126308179272080, +0.649088273335881480, 0.649050236869770150, 0.649012198781033330, 0.648974159069765630, 0.648936117736062860, 0.648898074780019820, 0.648860030201731550, 0.648821984001292870, +0.648783936178799590, 0.648745886734346520, 0.648707835668028700, 0.648669782979940930, 0.648631728670179040, 0.648593672738837830, 0.648555615186012460, 0.648517556011797720, +0.648479495216289340, 0.648441432799582330, 0.648403368761771400, 0.648365303102952370, 0.648327235823220050, 0.648289166922669580, 0.648251096401396000, 0.648213024259494900, +0.648174950497061310, 0.648136875114190270, 0.648098798110976810, 0.648060719487516650, 0.648022639243904690, 0.647984557380236080, 0.647946473896605760, 0.647908388793109640, +0.647870302069842530, 0.647832213726899590, 0.647794123764375840, 0.647756032182367210, 0.647717938980968410, 0.647679844160274350, 0.647641747720381080, 0.647603649661383510, +0.647565549983376790, 0.647527448686455840, 0.647489345770716600, 0.647451241236253970, 0.647413135083163230, 0.647375027311539400, 0.647336917921478290, 0.647298806913074840, +0.647260694286424410, 0.647222580041621920, 0.647184464178763300, 0.647146346697943580, 0.647108227599257900, 0.647070106882801310, 0.647031984548669840, 0.646993860596958400, +0.646955735027762050, 0.646917607841176580, 0.646879479037297140, 0.646841348616219000, 0.646803216578037190, 0.646765082922847620, 0.646726947650745340, 0.646688810761825720, +0.646650672256183780, 0.646612532133915340, 0.646574390395115770, 0.646536247039880110, 0.646498102068303490, 0.646459955480481960, 0.646421807276510550, 0.646383657456484630, +0.646345506020499230, 0.646307352968650490, 0.646269198301033240, 0.646231042017743060, 0.646192884118874880, 0.646154724604524830, 0.646116563474788070, 0.646078400729759420, +0.646040236369535230, 0.646002070394210430, 0.645963902803880390, 0.645925733598640250, 0.645887562778586170, 0.645849390343813170, 0.645811216294416730, 0.645773040630491790, +0.645734863352134700, 0.645696684459440400, 0.645658503952504460, 0.645620321831421820, 0.645582138096288840, 0.645543952747200440, 0.645505765784252120, 0.645467577207539110, +0.645429387017157460, 0.645391195213202320, 0.645353001795768930, 0.645314806764953340, 0.645276610120850690, 0.645238411863556570, 0.645200211993166130, 0.645162010509775400, +0.645123807413479630, 0.645085602704374430, 0.645047396382554820, 0.645009188448117170, 0.644970978901156400, 0.644932767741768220, 0.644894554970047880, 0.644856340586091430, +0.644818124589994100, 0.644779906981851390, 0.644741687761758660, 0.644703466929812060, 0.644665244486106850, 0.644627020430738050, 0.644588794763802150, 0.644550567485394190, +0.644512338595609860, 0.644474108094544420, 0.644435875982293900, 0.644397642258953800, 0.644359406924619460, 0.644321169979386380, 0.644282931423350690, 0.644244691256607660, +0.644206449479252980, 0.644168206091381700, 0.644129961093090400, 0.644091714484474000, 0.644053466265628430, 0.644015216436648830, 0.643976964997631570, 0.643938711948671920, +0.643900457289865450, 0.643862201021307420, 0.643823943143094320, 0.643785683655321410, 0.643747422558083810, 0.643709159851478140, 0.643670895535599420, 0.643632629610543570, +0.643594362076405750, 0.643556092933282420, 0.643517822181268850, 0.643479549820460740, 0.643441275850953340, 0.643403000272843140, 0.643364723086225390, 0.643326444291195900, +0.643288163887849930, 0.643249881876283850, 0.643211598256593130, 0.643173313028873370, 0.643135026193220050, 0.643096737749729530, 0.643058447698497070, 0.643020156039618150, +0.642981862773189250, 0.642943567899305620, 0.642905271418063080, 0.642866973329557110, 0.642828673633883960, 0.642790372331139110, 0.642752069421418380, 0.642713764904817130, +0.642675458781431840, 0.642637151051357880, 0.642598841714691060, 0.642560530771526750, 0.642522218221961430, 0.642483904066090680, 0.642445588304010110, 0.642407270935815180, +0.642368951961602490, 0.642330631381467290, 0.642292309195505280, 0.642253985403812840, 0.642215660006485440, 0.642177333003618900, 0.642139004395308580, 0.642100674181651180, +0.642062342362742070, 0.642024008938677060, 0.641985673909551750, 0.641947337275462600, 0.641908999036505110, 0.641870659192775080, 0.641832317744368110, 0.641793974691380660, +0.641755630033908340, 0.641717283772046840, 0.641678935905891870, 0.641640586435539890, 0.641602235361086400, 0.641563882682627320, 0.641525528400258230, 0.641487172514075610, +0.641448815024175060, 0.641410455930652160, 0.641372095233603500, 0.641333732933124570, 0.641295369029311280, 0.641257003522259340, 0.641218636412065110, 0.641180267698824300, +0.641141897382632830, 0.641103525463586290, 0.641065151941781370, 0.641026776817313460, 0.640988400090278580, 0.640950021760772430, 0.640911641828891600, 0.640873260294731570, +0.640834877158388380, 0.640796492419957730, 0.640758106079536200, 0.640719718137219400, 0.640681328593102890, 0.640642937447283400, 0.640604544699856620, 0.640566150350918460, +0.640527754400564640, 0.640489356848891740, 0.640450957695995470, 0.640412556941971740, 0.640374154586916270, 0.640335750630925850, 0.640297345074095970, 0.640258937916522770, +0.640220529158301850, 0.640182118799530020, 0.640143706840302860, 0.640105293280716410, 0.640066878120866380, 0.640028461360849450, 0.639990043000761450, 0.639951623040697970, +0.639913201480755810, 0.639874778321030570, 0.639836353561618500, 0.639797927202615080, 0.639759499244117350, 0.639721069686220670, 0.639682638529021410, 0.639644205772615270, +0.639605771417098850, 0.639567335462568050, 0.639528897909118930, 0.639490458756847180, 0.639452018005849720, 0.639413575656222140, 0.639375131708060600, 0.639336686161460890, +0.639298239016519830, 0.639259790273333240, 0.639221339931996700, 0.639182887992607250, 0.639144434455260590, 0.639105979320052750, 0.639067522587079660, 0.639029064256438240, +0.638990604328223970, 0.638952142802533320, 0.638913679679461890, 0.638875214959106600, 0.638836748641563370, 0.638798280726928120, 0.638759811215296900, 0.638721340106766510, +0.638682867401432760, 0.638644393099391920, 0.638605917200739670, 0.638567439705572950, 0.638528960613987670, 0.638490479926079990, 0.638451997641945710, 0.638413513761681870, +0.638375028285384170, 0.638336541213148530, 0.638298052545071990, 0.638259562281250250, 0.638221070421779670, 0.638182576966755950, 0.638144081916276250, 0.638105585270436260, +0.638067087029332350, 0.638028587193060440, 0.637990085761717340, 0.637951582735398980, 0.637913078114201730, 0.637874571898221390, 0.637836064087555000, 0.637797554682298480, +0.637759043682547990, 0.637720531088399660, 0.637682016899950190, 0.637643501117295840, 0.637604983740532320, 0.637566464769756650, 0.637527944205064870, 0.637489422046553230, +0.637450898294317670, 0.637412372948455210, 0.637373846009061880, 0.637335317476233840, 0.637296787350067230, 0.637258255630658970, 0.637219722318105090, 0.637181187412501850, +0.637142650913945290, 0.637104112822532540, 0.637065573138359430, 0.637027031861522430, 0.636988488992117460, 0.636949944530241670, 0.636911398475990990, 0.636872850829461430, +0.636834301590750160, 0.636795750759953090, 0.636757198337166710, 0.636718644322486930, 0.636680088716010890, 0.636641531517834650, 0.636602972728054550, 0.636564412346766640, +0.636525850374068170, 0.636487286810054950, 0.636448721654823580, 0.636410154908470080, 0.636371586571091500, 0.636333016642783970, 0.636294445123643860, 0.636255872013767320, +0.636217297313251380, 0.636178721022192310, 0.636140143140686340, 0.636101563668829750, 0.636062982606719560, 0.636024399954451920, 0.635985815712122870, 0.635947229879829660, +0.635908642457668430, 0.635870053445735550, 0.635831462844127280, 0.635792870652940540, 0.635754276872271710, 0.635715681502217240, 0.635677084542873190, 0.635638485994336700, +0.635599885856704020, 0.635561284130071740, 0.635522680814535780, 0.635484075910193510, 0.635445469417140970, 0.635406861335474860, 0.635368251665291210, 0.635329640406687270, +0.635291027559759300, 0.635252413124603340, 0.635213797101316760, 0.635175179489995580, 0.635136560290736510, 0.635097939503635690, 0.635059317128790380, 0.635020693166296830, +0.634982067616251420, 0.634943440478750620, 0.634904811753891460, 0.634866181441770430, 0.634827549542483770, 0.634788916056127970, 0.634750280982800170, 0.634711644322596750, +0.634673006075614170, 0.634634366241948800, 0.634595724821697790, 0.634557081814957400, 0.634518437221824110, 0.634479791042394940, 0.634441143276766370, 0.634402493925035000, +0.634363842987296980, 0.634325190463649660, 0.634286536354189410, 0.634247880659012830, 0.634209223378216170, 0.634170564511896790, 0.634131904060150960, 0.634093242023075490, +0.634054578400766510, 0.634015913193321400, 0.633977246400836520, 0.633938578023408580, 0.633899908061133830, 0.633861236514109640, 0.633822563382432370, 0.633783888666198280, +0.633745212365504850, 0.633706534480448450, 0.633667855011125660, 0.633629173957632850, 0.633590491320067510, 0.633551807098525990, 0.633513121293104890, 0.633474433903900680, +0.633435744931010620, 0.633397054374531310, 0.633358362234559320, 0.633319668511191040, 0.633280973204524030, 0.633242276314654570, 0.633203577841679350, 0.633164877785694860, +0.633126176146798560, 0.633087472925086820, 0.633048768120656360, 0.633010061733603640, 0.632971353764026130, 0.632932644212020220, 0.632893933077682380, 0.632855220361109970, +0.632816506062399590, 0.632777790181648040, 0.632739072718951470, 0.632700353674407690, 0.632661633048112960, 0.632622910840164200, 0.632584187050657780, 0.632545461679691280, +0.632506734727361080, 0.632468006193764090, 0.632429276078996680, 0.632390544383156450, 0.632351811106339870, 0.632313076248643750, 0.632274339810164680, 0.632235601791000020, +0.632196862191246380, 0.632158121011000220, 0.632119378250359130, 0.632080633909419490, 0.632041887988278430, 0.632003140487032210, 0.631964391405778540, 0.631925640744613770, +0.631886888503635060, 0.631848134682938660, 0.631809379282622260, 0.631770622302782470, 0.631731863743516200, 0.631693103604919810, 0.631654341887091020, 0.631615578590126400, +0.631576813714122890, 0.631538047259176950, 0.631499279225386180, 0.631460509612847280, 0.631421738421656720, 0.631382965651912210, 0.631344191303710220, 0.631305415377147790, +0.631266637872321510, 0.631227858789328970, 0.631189078128266750, 0.631150295889231770, 0.631111512072320860, 0.631072726677631370, 0.631033939705260230, 0.630995151155304130, +0.630956361027859790, 0.630917569323024900, 0.630878776040896150, 0.630839981181570360, 0.630801184745144350, 0.630762386731715700, 0.630723587141381100, 0.630684785974237490, +0.630645983230381680, 0.630607178909911140, 0.630568373012922680, 0.630529565539513000, 0.630490756489779700, 0.630451945863819470, 0.630413133661729460, 0.630374319883606260, +0.630335504529547560, 0.630296687599650070, 0.630257869094010940, 0.630219049012726740, 0.630180227355895290, 0.630141404123613300, 0.630102579315977680, 0.630063752933085360, +0.630024924975034040, 0.629986095441920410, 0.629947264333841410, 0.629908431650894050, 0.629869597393175830, 0.629830761560783770, 0.629791924153814350, 0.629753085172365500, +0.629714244616533910, 0.629675402486416740, 0.629636558782110670, 0.629597713503713630, 0.629558866651322210, 0.629520018225033670, 0.629481168224944710, 0.629442316651153240, +0.629403463503755980, 0.629364608782850050, 0.629325752488532180, 0.629286894620900370, 0.629248035180051240, 0.629209174166082020, 0.629170311579089650, 0.629131447419171710, +0.629092581686425230, 0.629053714380946930, 0.629014845502834600, 0.628975975052185280, 0.628937103029096000, 0.628898229433663580, 0.628859354265985940, 0.628820477526159880, +0.628781599214282670, 0.628742719330451120, 0.628703837874763140, 0.628664954847315550, 0.628626070248205600, 0.628587184077530110, 0.628548296335387000, 0.628509407021873080, +0.628470516137085710, 0.628431623681121710, 0.628392729654079000, 0.628353834056054380, 0.628314936887144900, 0.628276038147448480, 0.628237137837061920, 0.628198235956082480, +0.628159332504607090, 0.628120427482733780, 0.628081520890559350, 0.628042612728181180, 0.628003702995696080, 0.627964791693202070, 0.627925878820796090, 0.627886964378575390, +0.627848048366636990, 0.627809130785078830, 0.627770211633997710, 0.627731290913491220, 0.627692368623656070, 0.627653444764590400, 0.627614519336391010, 0.627575592339155390, +0.627536663772980450, 0.627497733637964240, 0.627458801934203670, 0.627419868661795670, 0.627380933820838370, 0.627341997411428820, 0.627303059433664270, 0.627264119887641640, +0.627225178773459070, 0.627186236091213600, 0.627147291841002490, 0.627108346022922870, 0.627069398637072670, 0.627030449683549040, 0.626991499162449230, 0.626952547073870380, +0.626913593417910420, 0.626874638194666600, 0.626835681404236070, 0.626796723046716080, 0.626757763122204550, 0.626718801630798630, 0.626679838572595350, 0.626640873947692860, +0.626601907756188180, 0.626562939998178690, 0.626523970673761530, 0.626484999783034850, 0.626446027326095670, 0.626407053303041360, 0.626368077713969070, 0.626329100558976950, +0.626290121838162020, 0.626251141551621870, 0.626212159699453430, 0.626173176281755060, 0.626134191298623690, 0.626095204750156790, 0.626056216636451610, 0.626017226957606200, +0.625978235713717690, 0.625939242904883340, 0.625900248531201080, 0.625861252592768370, 0.625822255089682480, 0.625783256022040550, 0.625744255389940830, 0.625705253193480470, +0.625666249432757060, 0.625627244107867630, 0.625588237218910330, 0.625549228765982620, 0.625510218749181670, 0.625471207168604940, 0.625432194024350570, 0.625393179316515610, +0.625354163045197750, 0.625315145210494140, 0.625276125812503030, 0.625237104851321560, 0.625198082327047320, 0.625159058239777580, 0.625120032589610460, 0.625081005376643350, +0.625041976600973380, 0.625002946262698810, 0.624963914361916780, 0.624924880898725110, 0.624885845873220820, 0.624846809285502180, 0.624807771135666660, 0.624768731423811620, +0.624729690150034430, 0.624690647314433360, 0.624651602917105640, 0.624612556958148990, 0.624573509437660550, 0.624534460355738670, 0.624495409712480740, 0.624456357507984120, +0.624417303742346390, 0.624378248415665690, 0.624339191528039410, 0.624300133079564780, 0.624261073070340180, 0.624222011500462860, 0.624182948370030520, 0.624143883679140530, +0.624104817427891030, 0.624065749616379620, 0.624026680244703760, 0.623987609312960930, 0.623948536821249400, 0.623909462769666520, 0.623870387158310000, 0.623831309987277090, +0.623792231256666270, 0.623753150966574910, 0.623714069117100700, 0.623674985708340900, 0.623635900740394100, 0.623596814213357440, 0.623557726127328400, 0.623518636482405460, +0.623479545278685880, 0.623440452516267450, 0.623401358195247560, 0.623362262315724560, 0.623323164877795930, 0.623284065881559490, 0.623244965327112380, 0.623205863214553290, +0.623166759543979490, 0.623127654315488890, 0.623088547529178750, 0.623049439185147550, 0.623010329283492760, 0.622971217824312200, 0.622932104807703220, 0.622892990233764320, +0.622853874102592960, 0.622814756414286630, 0.622775637168943690, 0.622736516366661610, 0.622697394007538320, 0.622658270091671180, 0.622619144619158680, 0.622580017590098290, +0.622540889004587930, 0.622501758862724960, 0.622462627164607980, 0.622423493910334360, 0.622384359100002120, 0.622345222733708510, 0.622306084811552250, 0.622266945333630810, +0.622227804300041990, 0.622188661710883270, 0.622149517566253250, 0.622110371866249400, 0.622071224610969750, 0.622032075800511560, 0.621992925434973640, 0.621953773514453360, +0.621914620039048180, 0.621875465008856930, 0.621836308423977080, 0.621797150284506330, 0.621757990590542380, 0.621718829342183810, 0.621679666539528220, 0.621640502182673420, +0.621601336271716990, 0.621562168806757630, 0.621522999787892830, 0.621483829215220500, 0.621444657088838230, 0.621405483408844720, 0.621366308175337560, 0.621327131388414560, +0.621287953048173300, 0.621248773154712610, 0.621209591708129950, 0.621170408708523030, 0.621131224155990310, 0.621092038050629620, 0.621052850392538770, 0.621013661181815560, +0.620974470418558470, 0.620935278102865200, 0.620896084234833780, 0.620856888814561690, 0.620817691842147860, 0.620778493317689750, 0.620739293241285410, 0.620700091613032410, +0.620660888433029690, 0.620621683701374600, 0.620582477418165410, 0.620543269583499590, 0.620504060197475950, 0.620464849260192190, 0.620425636771746000, 0.620386422732235990, +0.620347207141759950, 0.620307990000415920, 0.620268771308301600, 0.620229551065515690, 0.620190329272155780, 0.620151105928320230, 0.620111881034106420, 0.620072654589613360, +0.620033426594938540, 0.619994197050180220, 0.619954965955436090, 0.619915733310804850, 0.619876499116384320, 0.619837263372272520, 0.619798026078567150, 0.619758787235367150, +0.619719546842770200, 0.619680304900874330, 0.619641061409777370, 0.619601816369578120, 0.619562569780374270, 0.619523321642263650, 0.619484071955345160, 0.619444820719716400, +0.619405567935475630, 0.619366313602720540, 0.619327057721550060, 0.619287800292061990, 0.619248541314354360, 0.619209280788525000, 0.619170018714672810, 0.619130755092895610, +0.619091489923291550, 0.619052223205958320, 0.619012954940994950, 0.618973685128499150, 0.618934413768569170, 0.618895140861302820, 0.618855866406798900, 0.618816590405155350, +0.618777312856469970, 0.618738033760841690, 0.618698753118368310, 0.618659470929148080, 0.618620187193278710, 0.618580901910859350, 0.618541615081987680, 0.618502326706761970, +0.618463036785280140, 0.618423745317640990, 0.618384452303942460, 0.618345157744282890, 0.618305861638760000, 0.618266563987472930, 0.618227264790519370, 0.618187964047997580, +0.618148661760005600, 0.618109357926642340, 0.618070052548005620, 0.618030745624193470, 0.617991437155304800, 0.617952127141437550, 0.617912815582689960, 0.617873502479159950, +0.617834187830946570, 0.617794871638147720, 0.617755553900861680, 0.617716234619186460, 0.617676913793220870, 0.617637591423063180, 0.617598267508811420, 0.617558942050563610, +0.617519615048418790, 0.617480286502475000, 0.617440956412830480, 0.617401624779583160, 0.617362291602832180, 0.617322956882675470, 0.617283620619210940, 0.617244282812537850, +0.617204943462753900, 0.617165602569957670, 0.617126260134247100, 0.617086916155721200, 0.617047570634478020, 0.617008223570615910, 0.616968874964232920, 0.616929524815428070, +0.616890173124299390, 0.616850819890945370, 0.616811465115463810, 0.616772108797954080, 0.616732750938513980, 0.616693391537242010, 0.616654030594236290, 0.616614668109595750, +0.616575304083418540, 0.616535938515803130, 0.616496571406847440, 0.616457202756650720, 0.616417832565311020, 0.616378460832926360, 0.616339087559595990, 0.616299712745417730, +0.616260336390490380, 0.616220958494911650, 0.616181579058781010, 0.616142198082196390, 0.616102815565256260, 0.616063431508058650, 0.616024045910702920, 0.615984658773287120, +0.615945270095909600, 0.615905879878668520, 0.615866488121663220, 0.615827094824991540, 0.615787699988752270, 0.615748303613043340, 0.615708905697963990, 0.615669506243612390, +0.615630105250086660, 0.615590702717485950, 0.615551298645908630, 0.615511893035452950, 0.615472485886217170, 0.615433077198300650, 0.615393666971801310, 0.615354255206817860, +0.615314841903448430, 0.615275427061792280, 0.615236010681947550, 0.615196592764012730, 0.615157173308086060, 0.615117752314266910, 0.615078329782653310, 0.615038905713343960, +0.614999480106436900, 0.614960052962031490, 0.614920624280226090, 0.614881194061118630, 0.614841762304808580, 0.614802329011394090, 0.614762894180973850, 0.614723457813646010, +0.614684019909509830, 0.614644580468663660, 0.614605139491205990, 0.614565696977235180, 0.614526252926850370, 0.614486807340150040, 0.614447360217232670, 0.614407911558196520, +0.614368461363140940, 0.614329009632164190, 0.614289556365364970, 0.614250101562841430, 0.614210645224693040, 0.614171187351018060, 0.614131727941915060, 0.614092266997482430, +0.614052804517819520, 0.614013340503024470, 0.613973874953195890, 0.613934407868432790, 0.613894939248833760, 0.613855469094497400, 0.613815997405522060, 0.613776524182007010, +0.613737049424050610, 0.613697573131751660, 0.613658095305208430, 0.613618615944520270, 0.613579135049785560, 0.613539652621102990, 0.613500168658571040, 0.613460683162288970, +0.613421196132355240, 0.613381707568868450, 0.613342217471926960, 0.613302725841630480, 0.613263232678077030, 0.613223737981365200, 0.613184241751594360, 0.613144743988862980, +0.613105244693269660, 0.613065743864912970, 0.613026241503892180, 0.612986737610305750, 0.612947232184252620, 0.612907725225830920, 0.612868216735140360, 0.612828706712279180, +0.612789195157346310, 0.612749682070440000, 0.612710167451659960, 0.612670651301104430, 0.612631133618872340, 0.612591614405061930, 0.612552093659772920, 0.612512571383103670, +0.612473047575152640, 0.612433522236019320, 0.612393995365802300, 0.612354466964600160, 0.612314937032511610, 0.612275405569636000, 0.612235872576071930, 0.612196338051918090, +0.612156801997273070, 0.612117264412236460, 0.612077725296906630, 0.612038184651382490, 0.611998642475762630, 0.611959098770146430, 0.611919553534632450, 0.611880006769319640, +0.611840458474306460, 0.611800908649692500, 0.611761357295576240, 0.611721804412056260, 0.611682249999232150, 0.611642694057202400, 0.611603136586065800, 0.611563577585921170, +0.611524017056867870, 0.611484454999004500, 0.611444891412429970, 0.611405326297242980, 0.611365759653542900, 0.611326191481428530, 0.611286621780998680, 0.611247050552351840, +0.611207477795587710, 0.611167903510804970, 0.611128327698102440, 0.611088750357578810, 0.611049171489333580, 0.611009591093465420, 0.610970009170073270, 0.610930425719255710, +0.610890840741112550, 0.610851254235742270, 0.610811666203243450, 0.610772076643715800, 0.610732485557258010, 0.610692892943969000, 0.610653298803947360, 0.610613703137292910, +0.610574105944104110, 0.610534507224480110, 0.610494906978519490, 0.610455305206321850, 0.610415701907986110, 0.610376097083610960, 0.610336490733295320, 0.610296882857138790, +0.610257273455240060, 0.610217662527698050, 0.610178050074611680, 0.610138436096080430, 0.610098820592203110, 0.610059203563078410, 0.610019585008806040, 0.609979964929484700, +0.609940343325213520, 0.609900720196091100, 0.609861095542217120, 0.609821469363690530, 0.609781841660610220, 0.609742212433074910, 0.609702581681184520, 0.609662949405037620, +0.609623315604733370, 0.609583680280370470, 0.609544043432048600, 0.609504405059866810, 0.609464765163923890, 0.609425123744318790, 0.609385480801151180, 0.609345836334519890, +0.609306190344523600, 0.609266542831262250, 0.609226893794834520, 0.609187243235339570, 0.609147591152876090, 0.609107937547544110, 0.609068282419442220, 0.609028625768669560, +0.608988967595325060, 0.608949307899508520, 0.608909646681318640, 0.608869983940854680, 0.608830319678215440, 0.608790653893500730, 0.608750986586809370, 0.608711317758240500, +0.608671647407893040, 0.608631975535866790, 0.608592302142260680, 0.608552627227173740, 0.608512950790704890, 0.608473272832954050, 0.608433593354019920, 0.608393912354001530, +0.608354229832998690, 0.608314545791110330, 0.608274860228435580, 0.608235173145073360, 0.608195484541123490, 0.608155794416684990, 0.608116102771856900, 0.608076409606738260, +0.608036714921428970, 0.607997018716027850, 0.607957320990634150, 0.607917621745346910, 0.607877920980265940, 0.607838218695490040, 0.607798514891118690, 0.607758809567250700, +0.607719102723986100, 0.607679394361423600, 0.607639684479662430, 0.607599973078802310, 0.607560260158942270, 0.607520545720181550, 0.607480829762619080, 0.607441112286355000, +0.607401393291488010, 0.607361672778117590, 0.607321950746342760, 0.607282227196263240, 0.607242502127978260, 0.607202775541586970, 0.607163047437188410, 0.607123317814882490, +0.607083586674768360, 0.607043854016945270, 0.607004119841512150, 0.606964384148569120, 0.606924646938215130, 0.606884908210549190, 0.606845167965671340, 0.606805426203680500, +0.606765682924676140, 0.606725938128757190, 0.606686191816023790, 0.606646443986574970, 0.606606694640509870, 0.606566943777927860, 0.606527191398928740, 0.606487437503611670, +0.606447682092076000, 0.606407925164420770, 0.606368166720746000, 0.606328406761150960, 0.606288645285734780, 0.606248882294596720, 0.606209117787836820, 0.606169351765553980, +0.606129584227847570, 0.606089815174817530, 0.606050044606562870, 0.606010272523183180, 0.605970498924777390, 0.605930723811445750, 0.605890947183287290, 0.605851169040401480, +0.605811389382887370, 0.605771608210845080, 0.605731825524373880, 0.605692041323573020, 0.605652255608541750, 0.605612468379380210, 0.605572679636187550, 0.605532889379063130, +0.605493097608106100, 0.605453304323416710, 0.605413509525094100, 0.605373713213237630, 0.605333915387946560, 0.605294116049321040, 0.605254315197460310, 0.605214512832463410, +0.605174708954430600, 0.605134903563460890, 0.605095096659654000, 0.605055288243109060, 0.605015478313926210, 0.604975666872204720, 0.604935853918043940, 0.604896039451543240, +0.604856223472802880, 0.604816405981921880, 0.604776586978999830, 0.604736766464135990, 0.604696944437430610, 0.604657120898982820, 0.604617295848892340, 0.604577469287258200, +0.604537641214180630, 0.604497811629759130, 0.604457980534092610, 0.604418147927281660, 0.604378313809425190, 0.604338478180622920, 0.604298641040974190, 0.604258802390579160, +0.604218962229537190, 0.604179120557947760, 0.604139277375910220, 0.604099432683524840, 0.604059586480890860, 0.604019738768107880, 0.603979889545275260, 0.603940038812493140, +0.603900186569861110, 0.603860332817478530, 0.603820477555444660, 0.603780620783860080, 0.603740762502823940, 0.603700902712435480, 0.603661041412795200, 0.603621178604002220, +0.603581314286156360, 0.603541448459356870, 0.603501581123704110, 0.603461712279297350, 0.603421841926236270, 0.603381970064620350, 0.603342096694549750, 0.603302221816124030, +0.603262345429442680, 0.603222467534605070, 0.603182588131711770, 0.603142707220861940, 0.603102824802155270, 0.603062940875691230, 0.603023055441570200, 0.602983168499891530, +0.602943280050754930, 0.602903390094259860, 0.602863498630506590, 0.602823605659594590, 0.602783711181623220, 0.602743815196692960, 0.602703917704903060, 0.602664018706353440, +0.602624118201143370, 0.602584216189373410, 0.602544312671142950, 0.602504407646551670, 0.602464501115698940, 0.602424593078685460, 0.602384683535610370, 0.602344772486573590, +0.602304859931674600, 0.602264945871013760, 0.602225030304690550, 0.602185113232804770, 0.602145194655455910, 0.602105274572744320, 0.602065352984769600, 0.602025429891631100, +0.601985505293429420, 0.601945579190264040, 0.601905651582234640, 0.601865722469440700, 0.601825791851982930, 0.601785859729960570, 0.601745926103473660, 0.601705990972621560, +0.601666054337504750, 0.601626116198222820, 0.601586176554875670, 0.601546235407562690, 0.601506292756384560, 0.601466348601440550, 0.601426402942830780, 0.601386455780654640, +0.601346507115012700, 0.601306556946004430, 0.601266605273729440, 0.601226652098288290, 0.601186697419780590, 0.601146741238306030, 0.601106783553964410, 0.601066824366856100, +0.601026863677080690, 0.600986901484738210, 0.600946937789928030, 0.600906972592750940, 0.600867005893306330, 0.600827037691694210, 0.600787067988014290, 0.600747096782366930, +0.600707124074851830, 0.600667149865568910, 0.600627174154617860, 0.600587196942099170, 0.600547218228112410, 0.600507238012757290, 0.600467256296134510, 0.600427273078343540, +0.600387288359484410, 0.600347302139656700, 0.600307314418961010, 0.600267325197497150, 0.600227334475364920, 0.600187342252664010, 0.600147348529495030, 0.600107353305957770, +0.600067356582152040, 0.600027358358177660, 0.599987358634135210, 0.599947357410124390, 0.599907354686245120, 0.599867350462597090, 0.599827344739281120, 0.599787337516396680, +0.599747328794044020, 0.599707318572322620, 0.599667306851333290, 0.599627293631175730, 0.599587278911949520, 0.599547262693755470, 0.599507244976693280, 0.599467225760862980, +0.599427205046364260, 0.599387182833297840, 0.599347159121763510, 0.599307133911861300, 0.599267107203690920, 0.599227078997353060, 0.599187049292947530, 0.599147018090574360, +0.599106985390333360, 0.599066951192325230, 0.599026915496649660, 0.598986878303406800, 0.598946839612696460, 0.598906799424619330, 0.598866757739275220, 0.598826714556763840, +0.598786669877185980, 0.598746623700641580, 0.598706576027230540, 0.598666526857052680, 0.598626476190208920, 0.598586424026798960, 0.598546370366922930, 0.598506315210680540, +0.598466258558172810, 0.598426200409499450, 0.598386140764760490, 0.598346079624055950, 0.598306016987486420, 0.598265952855151940, 0.598225887227152640, 0.598185820103588120, +0.598145751484559510, 0.598105681370166510, 0.598065609760508930, 0.598025536655687700, 0.597985462055802610, 0.597945385960953810, 0.597905308371241230, 0.597865229286765780, +0.597825148707627260, 0.597785066633925830, 0.597744983065761400, 0.597704898003234790, 0.597664811446446010, 0.597624723395495220, 0.597584633850482220, 0.597544542811508040, +0.597504450278672490, 0.597464356252075720, 0.597424260731817870, 0.597384163717999630, 0.597344065210720920, 0.597303965210082110, 0.597263863716183120, 0.597223760729124640, +0.597183656249006930, 0.597143550275929580, 0.597103442809993830, 0.597063333851299390, 0.597023223399946730, 0.596983111456035550, 0.596942998019666990, 0.596902883090940860, +0.596862766669957630, 0.596822648756817120, 0.596782529351620240, 0.596742408454467130, 0.596702286065457940, 0.596662162184692700, 0.596622036812272440, 0.596581909948297070, +0.596541781592866970, 0.596501651746081940, 0.596461520408043230, 0.596421387578850770, 0.596381253258604360, 0.596341117447405260, 0.596300980145353380, 0.596260841352548980, +0.596220701069092080, 0.596180559295083960, 0.596140416030624290, 0.596100271275813660, 0.596060125030751900, 0.596019977295540240, 0.595979828070278720, 0.595939677355067480, +0.595899525150006770, 0.595859371455197630, 0.595819216270739970, 0.595779059596734380, 0.595738901433280680, 0.595698741780480210, 0.595658580638432800, 0.595618418007238580, +0.595578253886998700, 0.595538088277813180, 0.595497921179782400, 0.595457752593006480, 0.595417582517586590, 0.595377410953622620, 0.595337237901215290, 0.595297063360464400, +0.595256887331471200, 0.595216709814335830, 0.595176530809158670, 0.595136350316039840, 0.595096168335080500, 0.595055984866380670, 0.595015799910040940, 0.594975613466161350, +0.594935425534843020, 0.594895236116186220, 0.594855045210291310, 0.594814852817258320, 0.594774658937188730, 0.594734463570182340, 0.594694266716339510, 0.594654068375761400, +0.594613868548548030, 0.594573667234800100, 0.594533464434617520, 0.594493260148101780, 0.594453054375352790, 0.594412847116471130, 0.594372638371557070, 0.594332428140711740, +0.594292216424035400, 0.594252003221628520, 0.594211788533591130, 0.594171572360024710, 0.594131354701029400, 0.594091135556705670, 0.594050914927153780, 0.594010692812474980, +0.593970469212769410, 0.593930244128137220, 0.593890017558679870, 0.593849789504497520, 0.593809559965690630, 0.593769328942359450, 0.593729096434605360, 0.593688862442528500, +0.593648626966229550, 0.593608390005808560, 0.593568151561367000, 0.593527911633005110, 0.593487670220823380, 0.593447427324922170, 0.593407182945402730, 0.593366937082365320, +0.593326689735910630, 0.593286440906138800, 0.593246190593151200, 0.593205938797048190, 0.593165685517929920, 0.593125430755897850, 0.593085174511052140, 0.593044916783493580, +0.593004657573322320, 0.592964396880639730, 0.592924134705546170, 0.592883871048142330, 0.592843605908528360, 0.592803339286805840, 0.592763071183074920, 0.592722801597436290, +0.592682530529990310, 0.592642257980838360, 0.592601983950080900, 0.592561708437818300, 0.592521431444151150, 0.592481152969180800, 0.592440873013007520, 0.592400591575731660, +0.592360308657454810, 0.592320024258277120, 0.592279738378299390, 0.592239451017621880, 0.592199162176346160, 0.592158871854572500, 0.592118580052401700, 0.592078286769934130, +0.592037992007271140, 0.591997695764513110, 0.591957398041760950, 0.591917098839114920, 0.591876798156676490, 0.591836495994546020, 0.591796192352824320, 0.591755887231611880, +0.591715580631009930, 0.591675272551119180, 0.591634962992040100, 0.591594651953873400, 0.591554339436720310, 0.591514025440681430, 0.591473709965857130, 0.591433393012348870, +0.591393074580257250, 0.591352754669682850, 0.591312433280726140, 0.591272110413488820, 0.591231786068071140, 0.591191460244574030, 0.591151132943097960, 0.591110804163744400, +0.591070473906613710, 0.591030142171806940, 0.590989808959424550, 0.590949474269567790, 0.590909138102337470, 0.590868800457834300, 0.590828461336158740, 0.590788120737412380, +0.590747778661695810, 0.590707435109109280, 0.590667090079754600, 0.590626743573732240, 0.590586395591143010, 0.590546046132087390, 0.590505695196666960, 0.590465342784982420, +0.590424988897134460, 0.590384633533223680, 0.590344276693351660, 0.590303918377618860, 0.590263558586126450, 0.590223197318974660, 0.590182834576265300, 0.590142470358098750, +0.590102104664576130, 0.590061737495797820, 0.590021368851865620, 0.589980998732879900, 0.589940627138941350, 0.589900254070151680, 0.589859879526611230, 0.589819503508421160, +0.589779126015681940, 0.589738747048495380, 0.589698366606961840, 0.589657984691182360, 0.589617601301257620, 0.589577216437289220, 0.589536830099377740, 0.589496442287624320, +0.589456053002129330, 0.589415662242994580, 0.589375270010320640, 0.589334876304208550, 0.589294481124758910, 0.589254084472073500, 0.589213686346252820, 0.589173286747397880, +0.589132885675609400, 0.589092483130989050, 0.589052079113637550, 0.589011673623655470, 0.588971266661144520, 0.588930858226205390, 0.588890448318939220, 0.588850036939446490, +0.588809624087829000, 0.588769209764187560, 0.588728793968622990, 0.588688376701236080, 0.588647957962128650, 0.588607537751401290, 0.588567116069155130, 0.588526692915490760, +0.588486268290510100, 0.588445842194313730, 0.588405414627002690, 0.588364985588677780, 0.588324555079440810, 0.588284123099392490, 0.588243689648633380, 0.588203254727265530, +0.588162818335389410, 0.588122380473106390, 0.588081941140516930, 0.588041500337723070, 0.588001058064825390, 0.587960614321925150, 0.587920169109122930, 0.587879722426520650, +0.587839274274219110, 0.587798824652319360, 0.587758373560922200, 0.587717921000129540, 0.587677466970041970, 0.587637011470760750, 0.587596554502386680, 0.587556096065021570, +0.587515636158766230, 0.587475174783721350, 0.587434711939988970, 0.587394247627669900, 0.587353781846865040, 0.587313314597675440, 0.587272845880202900, 0.587232375694548340, +0.587191904040812670, 0.587151430919097050, 0.587110956329503160, 0.587070480272131820, 0.587030002747084280, 0.586989523754461450, 0.586949043294365150, 0.586908561366896180, +0.586868077972155900, 0.586827593110245020, 0.586787106781265440, 0.586746618985318210, 0.586706129722504020, 0.586665638992924900, 0.586625146796681650, 0.586584653133875530, +0.586544158004607460, 0.586503661408979250, 0.586463163347092030, 0.586422663819046840, 0.586382162824944600, 0.586341660364887330, 0.586301156438975850, 0.586260651047311620, +0.586220144189995240, 0.586179635867128960, 0.586139126078813580, 0.586098614825150470, 0.586058102106240320, 0.586017587922185390, 0.585977072273086370, 0.585936555159044750, +0.585896036580161320, 0.585855516536538220, 0.585814995028276390, 0.585774472055476610, 0.585733947618241050, 0.585693421716670600, 0.585652894350866540, 0.585612365520929990, +0.585571835226962770, 0.585531303469066120, 0.585490770247341090, 0.585450235561888800, 0.585409699412811290, 0.585369161800209590, 0.585328622724184840, 0.585288082184838300, +0.585247540182271870, 0.585206996716586600, 0.585166451787883850, 0.585125905396264630, 0.585085357541831000, 0.585044808224683850, 0.585004257444924460, 0.584963705202654730, +0.584923151497975800, 0.584882596330988940, 0.584842039701795270, 0.584801481610496720, 0.584760922057194650, 0.584720361041990210, 0.584679798564984420, 0.584639234626279650, +0.584598669225976700, 0.584558102364177050, 0.584517534040981830, 0.584476964256493090, 0.584436393010812070, 0.584395820304039910, 0.584355246136277980, 0.584314670507628200, +0.584274093418191810, 0.584233514868069740, 0.584192934857364230, 0.584152353386176440, 0.584111770454607830, 0.584071186062759320, 0.584030600210733280, 0.583990012898630730, +0.583949424126553150, 0.583908833894601580, 0.583868242202878360, 0.583827649051484540, 0.583787054440521590, 0.583746458370090540, 0.583705860840293860, 0.583665261851232460, +0.583624661403007840, 0.583584059495721340, 0.583543456129475000, 0.583502851304369960, 0.583462245020507810, 0.583421637277989680, 0.583381028076917940, 0.583340417417393510, +0.583299805299517750, 0.583259191723392690, 0.583218576689119810, 0.583177960196800460, 0.583137342246535790, 0.583096722838428170, 0.583056101972578730, 0.583015479649089060, +0.582974855868060300, 0.582934230629594710, 0.582893603933793640, 0.582852975780758560, 0.582812346170590630, 0.582771715103392210, 0.582731082579264430, 0.582690448598309100, +0.582649813160627140, 0.582609176266321030, 0.582568537915492010, 0.582527898108241350, 0.582487256844671290, 0.582446614124882970, 0.582405969948978200, 0.582365324317058120, +0.582324677229225210, 0.582284028685580490, 0.582243378686225670, 0.582202727231262100, 0.582162074320792030, 0.582121419954916840, 0.582080764133738100, 0.582040106857356960, +0.581999448125876010, 0.581958787939396480, 0.581918126298019980, 0.581877463201847740, 0.581836798650982260, 0.581796132645524660, 0.581755465185576530, 0.581714796271240010, +0.581674125902616470, 0.581633454079807710, 0.581592780802914880, 0.581552106072040440, 0.581511429887285880, 0.581470752248752550, 0.581430073156542160, 0.581389392610756840, +0.581348710611498070, 0.581308027158867540, 0.581267342252966500, 0.581226655893897550, 0.581185968081761930, 0.581145278816661340, 0.581104588098697250, 0.581063895927972030, +0.581023202304587150, 0.580982507228643860, 0.580941810700244640, 0.580901112719490850, 0.580860413286484300, 0.580819712401326350, 0.580779010064119580, 0.580738306274965250, +0.580697601033965060, 0.580656894341220590, 0.580616186196834190, 0.580575476600907360, 0.580534765553541890, 0.580494053054839030, 0.580453339104901490, 0.580412623703830620, +0.580371906851728130, 0.580331188548695480, 0.580290468794835260, 0.580249747590248940, 0.580209024935038120, 0.580168300829304480, 0.580127575273150400, 0.580086848266677450, +0.580046119809986880, 0.580005389903181510, 0.579964658546362590, 0.579923925739632030, 0.579883191483091310, 0.579842455776843010, 0.579801718620988500, 0.579760980015629700, +0.579720239960868080, 0.579679498456806330, 0.579638755503545710, 0.579598011101188250, 0.579557265249835420, 0.579516517949589800, 0.579475769200552880, 0.579435019002826460, +0.579394267356512230, 0.579353514261712670, 0.579312759718529250, 0.579272003727063670, 0.579231246287418400, 0.579190487399695030, 0.579149727063995370, 0.579108965280421110, +0.579068202049074720, 0.579027437370057910, 0.578986671243472470, 0.578945903669420000, 0.578905134648003080, 0.578864364179323410, 0.578823592263482790, 0.578782818900582810, +0.578742044090726160, 0.578701267834014430, 0.578660490130549540, 0.578619710980432970, 0.578578930383767620, 0.578538148340654870, 0.578497364851196290, 0.578456579915494820, +0.578415793533651800, 0.578375005705769380, 0.578334216431949040, 0.578293425712293470, 0.578252633546904370, 0.578211839935883760, 0.578171044879333130, 0.578130248377355160, +0.578089450430051670, 0.578048651037524560, 0.578007850199875440, 0.577967047917207100, 0.577926244189621130, 0.577885439017219450, 0.577844632400103860, 0.577803824338377070, +0.577763014832140760, 0.577722203881496870, 0.577681391486547180, 0.577640577647394290, 0.577599762364139900, 0.577558945636885810, 0.577518127465734830, 0.577477307850788320, +0.577436486792148650, 0.577395664289917400, 0.577354840344197370, 0.577314014955090270, 0.577273188122698010, 0.577232359847122510, 0.577191530128466470, 0.577150698966831580, +0.577109866362319980, 0.577069032315033260, 0.577028196825074450, 0.576987359892545020, 0.576946521517547330, 0.576905681700182860, 0.576864840440554530, 0.576823997738764250, +0.576783153594913500, 0.576742308009105200, 0.576701460981441150, 0.576660612512023500, 0.576619762600953930, 0.576578911248335380, 0.576538058454269420, 0.576497204218858420, +0.576456348542203960, 0.576415491424409070, 0.576374632865575440, 0.576333772865805230, 0.576292911425200230, 0.576252048543863250, 0.576211184221896210, 0.576170318459401140, +0.576129451256479960, 0.576088582613235590, 0.576047712529769610, 0.576006841006184160, 0.575965968042581820, 0.575925093639064630, 0.575884217795734730, 0.575843340512693810, +0.575802461790045020, 0.575761581627890040, 0.575720700026331130, 0.575679816985469990, 0.575638932505409760, 0.575598046586252240, 0.575557159228099580, 0.575516270431053580, +0.575475380195217380, 0.575434488520692680, 0.575393595407581730, 0.575352700855986440, 0.575311804866009860, 0.575270907437753660, 0.575230008571319780, 0.575189108266811360, +0.575148206524330070, 0.575107303343978420, 0.575066398725857960, 0.575025492670071970, 0.574984585176722240, 0.574943676245911030, 0.574902765877740360, 0.574861854072313050, +0.574820940829731120, 0.574780026150096820, 0.574739110033512080, 0.574698192480079920, 0.574657273489902360, 0.574616353063081560, 0.574575431199719540, 0.574534507899919220, +0.574493583163782740, 0.574452656991412240, 0.574411729382909740, 0.574370800338378280, 0.574329869857919890, 0.574288937941636380, 0.574248004589630880, 0.574207069802005420, +0.574166133578862260, 0.574125195920303420, 0.574084256826431940, 0.574043316297349840, 0.574002374333159480, 0.573961430933962680, 0.573920486099862790, 0.573879539830961630, +0.573838592127361660, 0.573797642989164910, 0.573756692416474310, 0.573715740409391990, 0.573674786968020320, 0.573633832092461330, 0.573592875782818150, 0.573551918039192810, +0.573510958861687240, 0.573469998250404680, 0.573429036205447050, 0.573388072726916940, 0.573347107814916160, 0.573306141469548060, 0.573265173690914560, 0.573224204479118150, +0.573183233834260950, 0.573142261756445890, 0.573101288245775220, 0.573060313302351410, 0.573019336926276380, 0.572978359117653380, 0.572937379876584440, 0.572896399203172150, +0.572855417097518420, 0.572814433559726500, 0.572773448589898540, 0.572732462188136560, 0.572691474354543820, 0.572650485089222450, 0.572609494392274820, 0.572568502263803070, +0.572527508703910450, 0.572486513712698990, 0.572445517290271270, 0.572404519436729430, 0.572363520152176730, 0.572322519436715080, 0.572281517290447180, 0.572240513713475170, +0.572199508705902190, 0.572158502267830490, 0.572117494399362550, 0.572076485100600380, 0.572035474371647480, 0.571994462212605860, 0.571953448623578110, 0.571912433604666370, +0.571871417155973890, 0.571830399277602820, 0.571789379969655510, 0.571748359232234990, 0.571707337065443630, 0.571666313469383900, 0.571625288444158050, 0.571584261989869340, +0.571543234106620000, 0.571502204794512520, 0.571461174053649270, 0.571420141884133370, 0.571379108286067080, 0.571338073259553100, 0.571297036804693460, 0.571255998921591730, +0.571214959610349850, 0.571173918871070720, 0.571132876703856370, 0.571091833108810180, 0.571050788086034380, 0.571009741635631340, 0.570968693757704200, 0.570927644452355440, +0.570886593719687420, 0.570845541559802720, 0.570804487972804480, 0.570763432958794950, 0.570722376517876830, 0.570681318650152480, 0.570640259355725150, 0.570599198634697210, +0.570558136487171240, 0.570517072913249600, 0.570476007913035650, 0.570434941486631650, 0.570393873634140290, 0.570352804355663820, 0.570311733651305830, 0.570270661521168450, +0.570229587965354060, 0.570188512983966110, 0.570147436577106760, 0.570106358744878920, 0.570065279487384720, 0.570024198804727770, 0.569983116697010290, 0.569942033164335120, +0.569900948206804370, 0.569859861824521640, 0.569818774017589290, 0.569777684786110020, 0.569736594130186180, 0.569695502049921140, 0.569654408545417380, 0.569613313616777580, +0.569572217264104230, 0.569531119487500570, 0.569490020287069190, 0.569448919662912330, 0.569407817615133590, 0.569366714143835330, 0.569325609249120230, 0.569284502931090790, +0.569243395189850450, 0.569202286025501600, 0.569161175438147040, 0.569120063427889230, 0.569078949994831550, 0.569037835139076580, 0.568996718860726890, 0.568955601159885080, +0.568914482036654730, 0.568873361491138100, 0.568832239523438090, 0.568791116133657070, 0.568749991321898630, 0.568708865088265240, 0.568667737432859700, 0.568626608355784490, +0.568585477857143080, 0.568544345937037950, 0.568503212595571570, 0.568462077832847630, 0.568420941648968390, 0.568379804044036870, 0.568338665018155440, 0.568297524571427680, +0.568256382703956180, 0.568215239415843620, 0.568174094707192710, 0.568132948578106810, 0.568091801028688610, 0.568050652059040930, 0.568009501669266230, 0.567968349859468200, +0.567927196629749220, 0.567886041980212310, 0.567844885910959830, 0.567803728422095590, 0.567762569513721950, 0.567721409185941610, 0.567680247438858030, 0.567639084272573920, +0.567597919687192090, 0.567556753682815000, 0.567515586259546460, 0.567474417417488940, 0.567433247156745370, 0.567392075477418320, 0.567350902379611500, 0.567309727863427370, +0.567268551928968970, 0.567227374576338760, 0.567186195805640450, 0.567145015616976720, 0.567103834010450500, 0.567062650986164260, 0.567021466544221700, 0.566980280684725610, +0.566939093407778370, 0.566897904713483780, 0.566856714601944420, 0.566815523073263220, 0.566774330127542970, 0.566733135764887150, 0.566691939985398570, 0.566650742789180040, +0.566609544176334360, 0.566568344146965220, 0.566527142701175210, 0.566485939839067250, 0.566444735560744150, 0.566403529866309600, 0.566362322755866180, 0.566321114229517030, +0.566279904287364630, 0.566238692929512900, 0.566197480156064300, 0.566156265967122210, 0.566115050362788970, 0.566073833343168410, 0.566032614908363430, 0.565991395058476400, +0.565950173793611340, 0.565908951113870850, 0.565867727019357950, 0.565826501510175330, 0.565785274586426800, 0.565744046248215170, 0.565702816495643360, 0.565661585328814280, +0.565620352747831400, 0.565579118752797760, 0.565537883343816270, 0.565496646520989740, 0.565455408284421980, 0.565414168634215670, 0.565372927570473970, 0.565331685093299560, +0.565290441202796370, 0.565249195899066970, 0.565207949182214290, 0.565166701052342010, 0.565125451509553070, 0.565084200553950480, 0.565042948185636940, 0.565001694404716480, +0.564960439211291800, 0.564919182605466030, 0.564877924587341870, 0.564836665157023350, 0.564795404314613060, 0.564754142060214350, 0.564712878393929920, 0.564671613315863570, +0.564630346826118230, 0.564589078924797040, 0.564547809612002790, 0.564506538887839420, 0.564465266752409600, 0.564423993205816270, 0.564382718248163440, 0.564341441879553710, +0.564300164100090430, 0.564258884909876300, 0.564217604309015350, 0.564176322297610390, 0.564135038875764660, 0.564093754043580970, 0.564052467801163250, 0.564011180148614290, +0.563969891086037460, 0.563928600613535560, 0.563887308731212400, 0.563846015439171120, 0.563804720737514750, 0.563763424626346100, 0.563722127105769410, 0.563680828175887380, +0.563639527836802820, 0.563598226088619870, 0.563556922931441330, 0.563515618365370560, 0.563474312390510270, 0.563433005006964580, 0.563391696214836420, 0.563350386014229040, +0.563309074405245250, 0.563267761387989290, 0.563226446962563740, 0.563185131129072200, 0.563143813887617360, 0.563102495238303470, 0.563061175181233330, 0.563019853716510200, +0.562978530844237100, 0.562937206564517960, 0.562895880877455900, 0.562854553783154080, 0.562813225281715510, 0.562771895373244350, 0.562730564057843270, 0.562689231335615550, +0.562647897206665080, 0.562606561671094910, 0.562565224729008270, 0.562523886380508210, 0.562482546625698850, 0.562441205464683010, 0.562399862897564270, 0.562358518924445440, +0.562317173545430760, 0.562275826760623150, 0.562234478570125870, 0.562193128974042060, 0.562151777972475840, 0.562110425565530150, 0.562069071753308340, 0.562027716535913550, +0.561986359913449920, 0.561945001886020260, 0.561903642453727700, 0.561862281616676510, 0.561820919374969590, 0.561779555728710300, 0.561738190678001900, 0.561696824222948200, +0.561655456363652550, 0.561614087100218320, 0.561572716432748420, 0.561531344361347110, 0.561489970886117410, 0.561448596007162790, 0.561407219724586400, 0.561365842038492270, +0.561324462948983530, 0.561283082456163650, 0.561241700560135670, 0.561200317261003720, 0.561158932558871170, 0.561117546453840820, 0.561076158946016920, 0.561034770035502730, +0.560993379722401490, 0.560951988006816560, 0.560910594888851980, 0.560869200368610880, 0.560827804446196840, 0.560786407121712790, 0.560745008395263200, 0.560703608266951090, +0.560662206736879940, 0.560620803805153000, 0.560579399471874300, 0.560537993737147080, 0.560496586601074930, 0.560455178063760990, 0.560413768125309410, 0.560372356785823420, +0.560330944045406620, 0.560289529904161920, 0.560248114362193910, 0.560206697419605600, 0.560165279076500160, 0.560123859332981810, 0.560082438189153930, 0.560041015645119880, +0.559999591700982900, 0.559958166356847360, 0.559916739612816410, 0.559875311468993610, 0.559833881925482220, 0.559792450982386390, 0.559751018639809470, 0.559709584897855050, +0.559668149756626150, 0.559626713216227370, 0.559585275276761830, 0.559543835938333010, 0.559502395201044280, 0.559460953064999990, 0.559419509530303170, 0.559378064597057410, +0.559336618265366740, 0.559295170535334510, 0.559253721407064310, 0.559212270880659500, 0.559170818956224450, 0.559129365633862290, 0.559087910913676710, 0.559046454795770980, +0.559004997280249440, 0.558963538367215460, 0.558922078056772630, 0.558880616349024200, 0.558839153244074630, 0.558797688742027180, 0.558756222842985540, 0.558714755547052970, +0.558673286854333820, 0.558631816764931450, 0.558590345278949240, 0.558548872396491540, 0.558507398117661590, 0.558465922442563210, 0.558424445371299650, 0.558382966903975260, +0.558341487040693530, 0.558300005781558030, 0.558258523126672230, 0.558217039076140400, 0.558175553630065990, 0.558134066788552820, 0.558092578551703910, 0.558051088919624070, +0.558009597892416440, 0.557968105470184830, 0.557926611653032590, 0.557885116441064310, 0.557843619834383020, 0.557802121833092410, 0.557760622437296960, 0.557719121647099800, +0.557677619462604970, 0.557636115883915600, 0.557594610911136380, 0.557553104544370680, 0.557511596783722090, 0.557470087629294290, 0.557428577081191530, 0.557387065139517300, +0.557345551804375510, 0.557304037075869400, 0.557262520954103560, 0.557221003439181460, 0.557179484531206910, 0.557137964230283170, 0.557096442536514910, 0.557054919450005630, +0.557013394970858890, 0.556971869099178510, 0.556930341835068620, 0.556888813178633040, 0.556847283129974890, 0.556805751689198990, 0.556764218856408810, 0.556722684631707930, +0.556681149015200050, 0.556639612006989640, 0.556598073607180170, 0.556556533815875550, 0.556514992633179270, 0.556473450059195800, 0.556431906094028710, 0.556390360737781920, +0.556348813990558800, 0.556307265852464040, 0.556265716323601110, 0.556224165404073930, 0.556182613093985870, 0.556141059393441720, 0.556099504302544960, 0.556057947821398950, +0.556016389950108600, 0.555974830688777180, 0.555933270037508700, 0.555891707996406640, 0.555850144565575690, 0.555808579745119320, 0.555767013535141690, 0.555725445935746020, +0.555683876947037140, 0.555642306569118500, 0.555600734802094150, 0.555559161646067560, 0.555517587101143520, 0.555476011167425400, 0.555434433845017340, 0.555392855134022810, +0.555351275034546510, 0.555309693546692020, 0.555268110670562920, 0.555226526406263910, 0.555184940753898570, 0.555143353713570930, 0.555101765285384460, 0.555060175469443970, +0.555018584265853040, 0.554976991674715700, 0.554935397696135540, 0.554893802330217120, 0.554852205577064270, 0.554810607436780900, 0.554769007909470700, 0.554727406995238260, +0.554685804694187380, 0.554644201006421980, 0.554602595932045640, 0.554560989471163170, 0.554519381623878370, 0.554477772390294940, 0.554436161770516800, 0.554394549764648640, +0.554352936372794040, 0.554311321595056810, 0.554269705431541640, 0.554228087882352120, 0.554186468947592490, 0.554144848627366240, 0.554103226921778270, 0.554061603830932280, +0.554019979354932190, 0.553978353493881800, 0.553936726247885920, 0.553895097617048250, 0.553853467601472800, 0.553811836201263290, 0.553770203416524610, 0.553728569247360360, +0.553686933693874780, 0.553645296756171360, 0.553603658434355220, 0.553562018728529840, 0.553520377638799020, 0.553478735165267690, 0.553437091308039530, 0.553395446067218580, +0.553353799442908740, 0.553312151435214730, 0.553270502044240330, 0.553228851270089580, 0.553187199112866510, 0.553145545572675700, 0.553103890649621070, 0.553062234343806640, +0.553020576655336330, 0.552978917584314940, 0.552937257130846290, 0.552895595295034400, 0.552853932076983190, 0.552812267476797570, 0.552770601494581240, 0.552728934130438110, +0.552687265384472880, 0.552645595256789580, 0.552603923747492230, 0.552562250856684760, 0.552520576584472070, 0.552478900930957860, 0.552437223896246390, 0.552395545480441560, +0.552353865683648190, 0.552312184505970080, 0.552270501947511590, 0.552228818008376530, 0.552187132688669700, 0.552145445988495130, 0.552103757907956850, 0.552062068447158880, +0.552020377606206040, 0.551978685385202340, 0.551936991784251480, 0.551895296803458610, 0.551853600442927420, 0.551811902702762260, 0.551770203583066940, 0.551728503083946500, +0.551686801205504730, 0.551645097947846110, 0.551603393311074220, 0.551561687295294310, 0.551519979900610190, 0.551478271127126110, 0.551436560974945980, 0.551394849444174720, +0.551353136534916470, 0.551311422247275250, 0.551269706581355210, 0.551227989537261260, 0.551186271115097330, 0.551144551314967760, 0.551102830136976360, 0.551061107581228280, +0.551019383647827430, 0.550977658336877730, 0.550935931648484310, 0.550894203582751100, 0.550852474139782330, 0.550810743319681940, 0.550769011122555160, 0.550727277548505810, +0.550685542597638240, 0.550643806270056490, 0.550602068565865580, 0.550560329485169530, 0.550518589028072600, 0.550476847194678820, 0.550435103985093320, 0.550393359399420020, +0.550351613437763400, 0.550309866100227360, 0.550268117386916940, 0.550226367297936390, 0.550184615833389400, 0.550142862993381330, 0.550101108778015990, 0.550059353187397960, +0.550017596221631160, 0.549975837880820830, 0.549934078165070780, 0.549892317074485600, 0.549850554609169210, 0.549808790769226840, 0.549767025554762530, 0.549725258965880650, +0.549683491002685210, 0.549641721665281360, 0.549599950953773230, 0.549558178868265300, 0.549516405408861490, 0.549474630575667140, 0.549432854368786080, 0.549391076788322550, +0.549349297834381690, 0.549307517507067630, 0.549265735806484750, 0.549223952732737160, 0.549182168285930140, 0.549140382466167590, 0.549098595273554090, 0.549056806708193790, +0.549015016770191820, 0.548973225459652330, 0.548931432776679770, 0.548889638721378190, 0.548847843293852940, 0.548806046494208060, 0.548764248322548110, 0.548722448778977130, +0.548680647863600380, 0.548638845576522090, 0.548597041917846640, 0.548555236887678150, 0.548513430486122000, 0.548471622713282310, 0.548429813569263120, 0.548388003054169790, +0.548346191168106460, 0.548304377911177700, 0.548262563283487550, 0.548220747285141470, 0.548178929916243400, 0.548137111176898010, 0.548095291067209560, 0.548053469587283180, +0.548011646737223130, 0.547969822517134000, 0.547927996927119910, 0.547886169967286230, 0.547844341637737100, 0.547802511938577210, 0.547760680869910590, 0.547718848431842600, +0.547677014624477490, 0.547635179447919510, 0.547593342902274020, 0.547551504987645040, 0.547509665704137390, 0.547467825051855210, 0.547425983030903840, 0.547384139641387430, +0.547342294883410680, 0.547300448757077950, 0.547258601262494370, 0.547216752399764310, 0.547174902168992340, 0.547133050570282720, 0.547091197603740920, 0.547049343269471080, +0.547007487567577890, 0.546965630498165600, 0.546923772061339690, 0.546881912257204280, 0.546840051085863640, 0.546798188547423350, 0.546756324641987530, 0.546714459369661010, +0.546672592730547910, 0.546630724724753600, 0.546588855352382550, 0.546546984613539450, 0.546505112508328450, 0.546463239036855010, 0.546421364199223490, 0.546379487995538590, +0.546337610425904560, 0.546295731490426870, 0.546253851189209880, 0.546211969522358180, 0.546170086489976340, 0.546128202092169500, 0.546086316329042250, 0.546044429200699180, +0.546002540707244630, 0.545960650848784200, 0.545918759625422020, 0.545876867037262680, 0.545834973084411530, 0.545793077766972940, 0.545751181085051610, 0.545709283038751990, +0.545667383628179460, 0.545625482853438590, 0.545583580714633980, 0.545541677211869970, 0.545499772345252150, 0.545457866114885000, 0.545415958520873100, 0.545374049563321030, +0.545332139242334040, 0.545290227558016820, 0.545248314510474060, 0.545206400099810030, 0.545164484326130520, 0.545122567189539660, 0.545080648690142060, 0.545038728828043270, +0.544996807603347570, 0.544954885016159850, 0.544912961066584600, 0.544871035754727280, 0.544829109080692490, 0.544787181044584790, 0.544745251646508780, 0.544703320886570030, +0.544661388764873020, 0.544619455281522450, 0.544577520436623000, 0.544535584230280030, 0.544493646662598030, 0.544451707733682010, 0.544409767443636340, 0.544367825792566710, +0.544325882780577360, 0.544283938407773000, 0.544241992674259210, 0.544200045580140350, 0.544158097125521430, 0.544116147310506950, 0.544074196135202360, 0.544032243599712360, +0.543990289704141650, 0.543948334448594920, 0.543906377833177750, 0.543864419857994610, 0.543822460523150420, 0.543780499828749650, 0.543738537774898110, 0.543696574361700160, +0.543654609589260820, 0.543612643457684560, 0.543570675967076980, 0.543528707117542860, 0.543486736909186470, 0.543444765342113720, 0.543402792416428970, 0.543360818132237240, +0.543318842489643130, 0.543276865488752310, 0.543234887129669270, 0.543192907412499040, 0.543150926337346180, 0.543108943904316410, 0.543066960113514190, 0.543024974965044650, +0.542982988459012270, 0.542941000595522750, 0.542899011374680770, 0.542857020796591260, 0.542815028861358790, 0.542773035569089180, 0.542731040919887000, 0.542689044913857170, +0.542647047551104380, 0.542605048831734330, 0.542563048755851600, 0.542521047323560990, 0.542479044534968090, 0.542437040390177480, 0.542395034889294410, 0.542353028032423250, +0.542311019819670000, 0.542269010251139160, 0.542226999326935850, 0.542184987047164560, 0.542142973411931290, 0.542100958421340540, 0.542058942075497320, 0.542016924374506440, +0.541974905318473700, 0.541932884907503580, 0.541890863141701320, 0.541848840021171400, 0.541806815546019840, 0.541764789716351340, 0.541722762532270360, 0.541680733993882950, +0.541638704101293560, 0.541596672854607550, 0.541554640253929410, 0.541512606299365040, 0.541470570991019140, 0.541428534328996850, 0.541386496313402850, 0.541344456944343080, +0.541302416221921990, 0.541260374146244950, 0.541218330717416650, 0.541176285935542790, 0.541134239800728280, 0.541092192313078150, 0.541050143472697200, 0.541008093279691240, +0.540966041734165070, 0.540923988836223390, 0.540881934585972110, 0.540839878983515930, 0.540797822028960210, 0.540755763722409410, 0.540713704063969680, 0.540671643053745600, +0.540629580691842530, 0.540587516978365050, 0.540545451913419180, 0.540503385497109630, 0.540461317729541650, 0.540419248610820020, 0.540377178141050680, 0.540335106320338320, +0.540293033148788180, 0.540250958626505180, 0.540208882753595130, 0.540166805530162830, 0.540124726956313530, 0.540082647032152030, 0.540040565757784250, 0.539998483133315110, +0.539956399158849410, 0.539914313834493060, 0.539872227160350880, 0.539830139136528220, 0.539788049763129770, 0.539745959040261680, 0.539703866968028520, 0.539661773546535770, +0.539619678775888230, 0.539577582656191930, 0.539535485187551570, 0.539493386370072490, 0.539451286203859630, 0.539409184689018990, 0.539367081825655290, 0.539324977613873880, +0.539282872053779670, 0.539240765145478700, 0.539198656889075760, 0.539156547284675770, 0.539114436332384870, 0.539072324032307870, 0.539030210384550010, 0.538988095389216330, +0.538945979046412730, 0.538903861356244130, 0.538861742318816010, 0.538819621934233050, 0.538777500202601400, 0.538735377124026080, 0.538693252698612230, 0.538651126926465000, +0.538608999807690280, 0.538566871342393010, 0.538524741530678530, 0.538482610372651880, 0.538440477868419090, 0.538398344018085060, 0.538356208821754830, 0.538314072279534540, +0.538271934391528980, 0.538229795157843530, 0.538187654578583310, 0.538145512653854240, 0.538103369383761470, 0.538061224768410230, 0.538019078807905560, 0.537976931502353590, +0.537934782851859250, 0.537892632856528000, 0.537850481516464750, 0.537808328831775760, 0.537766174802565830, 0.537724019428940550, 0.537681862711004820, 0.537639704648864790, +0.537597545242625490, 0.537555384492392040, 0.537513222398270370, 0.537471058960365730, 0.537428894178783480, 0.537386728053628530, 0.537344560585007120, 0.537302391773024410, +0.537260221617785640, 0.537218050119396050, 0.537175877277961570, 0.537133703093587430, 0.537091527566379120, 0.537049350696441550, 0.537007172483880970, 0.536964992928802510, +0.536922812031311540, 0.536880629791513190, 0.536838446209513600, 0.536796261285417910, 0.536754075019331480, 0.536711887411359560, 0.536669698461608390, 0.536627508170182900, +0.536585316537188220, 0.536543123562730600, 0.536500929246915280, 0.536458733589847530, 0.536416536591632690, 0.536374338252376790, 0.536332138572185090, 0.536289937551163050, +0.536247735189415710, 0.536205531487049520, 0.536163326444169420, 0.536121120060881080, 0.536078912337289550, 0.536036703273501060, 0.535994492869620860, 0.535952281125754330, +0.535910068042006800, 0.535867853618484550, 0.535825637855292580, 0.535783420752536150, 0.535741202310321520, 0.535698982528753920, 0.535656761407938830, 0.535614538947981500, +0.535572315148988180, 0.535530090011064000, 0.535487863534314770, 0.535445635718845400, 0.535403406564762260, 0.535361176072170710, 0.535318944241176100, 0.535276711071883900, +0.535234476564400150, 0.535192240718830310, 0.535150003535279860, 0.535107765013854040, 0.535065525154659110, 0.535023283957800410, 0.534981041423383210, 0.534938797551513630, +0.534896552342297160, 0.534854305795839260, 0.534812057912245290, 0.534769808691621380, 0.534727558134073130, 0.534685306239705890, 0.534643053008625020, 0.534600798440937000, +0.534558542536746840, 0.534516285296160350, 0.534474026719282790, 0.534431766806220620, 0.534389505557078980, 0.534347242971963570, 0.534304979050979620, 0.534262713794233620, +0.534220447201830930, 0.534178179273877010, 0.534135910010477330, 0.534093639411738260, 0.534051367477765050, 0.534009094208663050, 0.533966819604538620, 0.533924543665497240, +0.533882266391644490, 0.533839987783085720, 0.533797707839927300, 0.533755426562274700, 0.533713143950233390, 0.533670860003908950, 0.533628574723407740, 0.533586288108835020, +0.533544000160296680, 0.533501710877897880, 0.533459420261745200, 0.533417128311943990, 0.533374835028599950, 0.533332540411818430, 0.533290244461705920, 0.533247947178367880, +0.533205648561909550, 0.533163348612437420, 0.533121047330057050, 0.533078744714873930, 0.533036440766993640, 0.532994135486522640, 0.532951828873566180, 0.532909520928230300, +0.532867211650620120, 0.532824901040842350, 0.532782589099002330, 0.532740275825205890, 0.532697961219558260, 0.532655645282166250, 0.532613328013134990, 0.532571009412570520, +0.532528689480578080, 0.532486368217264250, 0.532444045622734620, 0.532401721697094430, 0.532359396440450270, 0.532317069852907720, 0.532274741934572470, 0.532232412685549880, +0.532190082105946760, 0.532147750195868460, 0.532105416955420680, 0.532063082384709010, 0.532020746483840010, 0.531978409252919170, 0.531936070692052290, 0.531893730801344830, +0.531851389580903500, 0.531809047030833650, 0.531766703151241190, 0.531724357942231500, 0.531682011403911470, 0.531639663536386250, 0.531597314339761540, 0.531554963814144020, +0.531512611959638950, 0.531470258776352460, 0.531427904264389910, 0.531385548423857990, 0.531343191254862180, 0.531300832757508390, 0.531258472931902090, 0.531216111778150090, +0.531173749296357740, 0.531131385486631080, 0.531089020349075460, 0.531046653883797790, 0.531004286090903440, 0.530961916970498330, 0.530919546522688130, 0.530877174747579340, +0.530834801645277740, 0.530792427215889040, 0.530750051459518920, 0.530707674376274090, 0.530665295966260000, 0.530622916229582350, 0.530580535166347730, 0.530538152776661830, +0.530495769060630560, 0.530453384018359510, 0.530410997649955250, 0.530368609955523600, 0.530326220935170460, 0.530283830589001300, 0.530241438917122940, 0.530199045919641070, +0.530156651596661480, 0.530114255948289980, 0.530071858974633160, 0.530029460675796700, 0.529987061051886530, 0.529944660103008450, 0.529902257829269030, 0.529859854230773970, +0.529817449307628970, 0.529775043059940610, 0.529732635487814680, 0.529690226591357230, 0.529647816370673710, 0.529605404825871150, 0.529562991957055030, 0.529520577764331370, +0.529478162247805970, 0.529435745407585530, 0.529393327243775750, 0.529350907756482520, 0.529308486945811780, 0.529266064811870220, 0.529223641354763410, 0.529181216574597490, +0.529138790471478160, 0.529096363045512330, 0.529053934296805470, 0.529011504225463500, 0.528969072831593000, 0.528926640115300000, 0.528884206076690290, 0.528841770715869690, +0.528799334032945100, 0.528756896028022120, 0.528714456701206870, 0.528672016052605160, 0.528629574082323810, 0.528587130790468480, 0.528544686177145340, 0.528502240242460060, +0.528459792986519570, 0.528417344409429670, 0.528374894511296380, 0.528332443292225510, 0.528289990752323750, 0.528247536891697230, 0.528205081710451660, 0.528162625208693170, +0.528120167386528450, 0.528077708244063300, 0.528035247781403430, 0.527992785998655960, 0.527950322895926470, 0.527907858473321110, 0.527865392730945790, 0.527822925668907320, +0.527780457287311600, 0.527737987586264670, 0.527695516565872440, 0.527653044226241820, 0.527610570567478510, 0.527568095589688870, 0.527525619292978480, 0.527483141677454470, +0.527440662743222650, 0.527398182490389170, 0.527355700919059810, 0.527313218029341610, 0.527270733821340380, 0.527228248295162020, 0.527185761450913230, 0.527143273288700140, +0.527100783808628900, 0.527058293010805310, 0.527015800895336280, 0.526973307462327840, 0.526930812711886020, 0.526888316644116950, 0.526845819259127320, 0.526803320557023170, +0.526760820537910850, 0.526718319201895930, 0.526675816549085680, 0.526633312579585900, 0.526590807293502830, 0.526548300690942270, 0.526505792772011480, 0.526463283536816040, +0.526420772985462190, 0.526378261118056630, 0.526335747934705500, 0.526293233435515040, 0.526250717620591060, 0.526208200490040690, 0.526165682043969850, 0.526123162282484680, +0.526080641205691310, 0.526038118813696780, 0.525995595106606870, 0.525953070084527960, 0.525910543747566070, 0.525868016095828120, 0.525825487129420230, 0.525782956848448560, +0.525740425253019120, 0.525697892343238940, 0.525655358119214040, 0.525612822581050470, 0.525570285728855110, 0.525527747562734130, 0.525485208082793750, 0.525442667289140020, +0.525400125181879840, 0.525357581761119460, 0.525315037026965140, 0.525272490979522780, 0.525229943618899630, 0.525187394945201610, 0.525144844958535080, 0.525102293659006180, +0.525059741046721820, 0.525017187121788020, 0.524974631884311370, 0.524932075334397790, 0.524889517472154290, 0.524846958297687130, 0.524804397811102440, 0.524761836012506480, +0.524719272902006260, 0.524676708479707820, 0.524634142745717290, 0.524591575700141810, 0.524549007343087290, 0.524506437674660320, 0.524463866694966810, 0.524421294404114110, +0.524378720802208150, 0.524336145889355400, 0.524293569665661870, 0.524250992131234720, 0.524208413286180170, 0.524165833130604610, 0.524123251664614040, 0.524080668888315840, +0.524038084801815800, 0.523995499405220610, 0.523952912698636310, 0.523910324682170140, 0.523867735355928120, 0.523825144720016400, 0.523782552774542220, 0.523739959519611610, +0.523697364955331040, 0.523654769081806750, 0.523612171899146000, 0.523569573407454690, 0.523526973606839530, 0.523484372497406540, 0.523441770079262960, 0.523399166352514930, +0.523356561317269040, 0.523313954973631310, 0.523271347321709210, 0.523228738361608660, 0.523186128093436230, 0.523143516517298070, 0.523100903633301640, 0.523058289441552860, +0.523015673942157980, 0.522973057135224240, 0.522930439020857900, 0.522887819599165530, 0.522845198870253160, 0.522802576834228150, 0.522759953491196750, 0.522717328841265540, +0.522674702884540540, 0.522632075621129120, 0.522589447051137520, 0.522546817174672330, 0.522504185991839790, 0.522461553502747140, 0.522418919707500540, 0.522376284606206660, +0.522333648198971660, 0.522291010485902980, 0.522248371467106790, 0.522205731142689640, 0.522163089512757810, 0.522120446577418520, 0.522077802336778250, 0.522035156790943030, +0.521992509940020330, 0.521949861784116290, 0.521907212323337700, 0.521864561557790600, 0.521821909487582560, 0.521779256112819720, 0.521736601433608670, 0.521693945450055870, +0.521651288162268470, 0.521608629570352920, 0.521565969674415710, 0.521523308474563300, 0.521480645970902930, 0.521437982163540980, 0.521395317052584020, 0.521352650638138400, +0.521309982920311610, 0.521267313899209770, 0.521224643574939360, 0.521181971947607630, 0.521139299017321030, 0.521096624784186170, 0.521053949248309390, 0.521011272409798050, +0.520968594268758630, 0.520925914825297600, 0.520883234079521530, 0.520840552031537670, 0.520797868681452500, 0.520755184029372600, 0.520712498075404320, 0.520669810819655240, +0.520627122262231620, 0.520584432403240150, 0.520541741242787290, 0.520499048780980410, 0.520456355017925980, 0.520413659953730230, 0.520370963588500660, 0.520328265922343820, +0.520285566955366210, 0.520242866687674280, 0.520200165119375610, 0.520157462250576570, 0.520114758081383740, 0.520072052611903810, 0.520029345842244030, 0.519986637772510860, +0.519943928402811120, 0.519901217733251260, 0.519858505763938660, 0.519815792494979780, 0.519773077926481420, 0.519730362058550050, 0.519687644891293040, 0.519644926424817080, +0.519602206659228290, 0.519559485594634380, 0.519516763231141820, 0.519474039568857290, 0.519431314607887380, 0.519388588348339450, 0.519345860790320080, 0.519303131933936070, +0.519260401779293890, 0.519217670326501010, 0.519174937575664020, 0.519132203526889600, 0.519089468180284340, 0.519046731535955820, 0.519003993594010500, 0.518961254354555090, +0.518918513817696270, 0.518875771983541510, 0.518833028852197290, 0.518790284423770510, 0.518747538698367650, 0.518704791676096290, 0.518662043357063010, 0.518619293741374170, +0.518576542829137570, 0.518533790620459570, 0.518491037115447080, 0.518448282314206590, 0.518405526216845770, 0.518362768823471210, 0.518320010134189710, 0.518277250149107750, +0.518234488868333120, 0.518191726291972190, 0.518148962420131980, 0.518106197252918950, 0.518063430790440930, 0.518020663032804250, 0.517977893980115840, 0.517935123632482400, +0.517892351990011490, 0.517849579052809820, 0.517806804820983620, 0.517764029294640940, 0.517721252473888120, 0.517678474358832190, 0.517635694949579730, 0.517592914246238430, +0.517550132248914770, 0.517507348957715770, 0.517464564372748010, 0.517421778494119300, 0.517378991321936100, 0.517336202856305440, 0.517293413097333900, 0.517250622045129170, +0.517207829699797950, 0.517165036061447040, 0.517122241130183240, 0.517079444906114240, 0.517036647389346630, 0.516993848579986980, 0.516951048478143100, 0.516908247083921580, +0.516865444397429430, 0.516822640418773350, 0.516779835148061030, 0.516737028585399050, 0.516694220730894550, 0.516651411584654110, 0.516608601146785530, 0.516565789417395500, +0.516522976396590950, 0.516480162084478560, 0.516437346481166130, 0.516394529586760460, 0.516351711401368370, 0.516308891925096550, 0.516266071158053010, 0.516223249100344230, +0.516180425752077340, 0.516137601113358930, 0.516094775184297030, 0.516051947964998090, 0.516009119455569040, 0.515966289656117460, 0.515923458566750150, 0.515880626187574240, +0.515837792518696330, 0.515794957560224310, 0.515752121312265000, 0.515709283774925310, 0.515666444948312040, 0.515623604832533000, 0.515580763427694990, 0.515537920733905140, +0.515495076751270040, 0.515452231479897600, 0.515409384919894630, 0.515366537071368150, 0.515323687934424960, 0.515280837509172970, 0.515237985795718890, 0.515195132794169400, +0.515152278504632520, 0.515109422927214840, 0.515066566062023720, 0.515023707909165740, 0.514980848468748920, 0.514937987740879950, 0.514895125725665980, 0.514852262423213910, +0.514809397833631550, 0.514766531957025600, 0.514723664793503400, 0.514680796343171650, 0.514637926606138270, 0.514595055582510060, 0.514552183272394270, 0.514509309675897590, +0.514466434793128040, 0.514423558624192310, 0.514380681169197440, 0.514337802428251110, 0.514294922401460350, 0.514252041088932300, 0.514209158490773750, 0.514166274607092740, +0.514123389437995960, 0.514080502983590760, 0.514037615243983950, 0.513994726219283440, 0.513951835909596030, 0.513908944315029090, 0.513866051435689530, 0.513823157271685040, +0.513780261823122750, 0.513737365090109810, 0.513694467072753010, 0.513651567771160500, 0.513608667185439070, 0.513565765315695530, 0.513522862162038020, 0.513479957724573330, +0.513437052003408720, 0.513394144998651210, 0.513351236710408610, 0.513308327138787930, 0.513265416283896440, 0.513222504145841030, 0.513179590724729740, 0.513136676020669480, +0.513093760033767500, 0.513050842764130820, 0.513007924211867360, 0.512965004377084030, 0.512922083259888310, 0.512879160860386870, 0.512836237178687980, 0.512793312214898540, +0.512750385969125810, 0.512707458441476690, 0.512664529632059330, 0.512621599540980630, 0.512578668168347520, 0.512535735514268120, 0.512492801578849470, 0.512449866362198800, +0.512406929864423040, 0.512363992085630330, 0.512321053025927680, 0.512278112685422340, 0.512235171064221340, 0.512192228162432820, 0.512149283980163790, 0.512106338517521410, +0.512063391774612910, 0.512020443751546320, 0.511977494448428550, 0.511934543865367080, 0.511891592002468920, 0.511848638859842110, 0.511805684437593670, 0.511762728735830730, +0.511719771754661210, 0.511676813494192360, 0.511633853954531430, 0.511590893135785540, 0.511547931038062840, 0.511504967661470240, 0.511462003006115220, 0.511419037072104790, +0.511376069859547200, 0.511333101368549370, 0.511290131599218880, 0.511247160551662640, 0.511204188225988790, 0.511161214622304570, 0.511118239740717350, 0.511075263581334040, +0.511032286144262990, 0.510989307429611240, 0.510946327437485910, 0.510903346167995040, 0.510860363621245870, 0.510817379797345760, 0.510774394696401730, 0.510731408318522260, +0.510688420663814150, 0.510645431732385080, 0.510602441524341980, 0.510559450039793190, 0.510516457278845760, 0.510473463241607140, 0.510430467928184580, 0.510387471338686230, +0.510344473473219100, 0.510301474331890880, 0.510258473914808500, 0.510215472222080410, 0.510172469253813540, 0.510129465010115580, 0.510086459491093550, 0.510043452696855800, +0.510000444627509380, 0.509957435283161510, 0.509914424663920340, 0.509871412769893120, 0.509828399601187420, 0.509785385157910390, 0.509742369440170150, 0.509699352448074070, +0.509656334181729620, 0.509613314641243930, 0.509570293826725250, 0.509527271738280940, 0.509484248376018470, 0.509441223740044970, 0.509398197830468690, 0.509355170647396990, +0.509312142190937460, 0.509269112461197100, 0.509226081458284300, 0.509183049182306390, 0.509140015633370410, 0.509096980811584830, 0.509053944717056670, 0.509010907349893740, +0.508967868710203160, 0.508924828798093310, 0.508881787613671420, 0.508838745157044970, 0.508795701428321310, 0.508752656427608810, 0.508709610155014590, 0.508666562610646470, +0.508623513794611460, 0.508580463707018040, 0.508537412347973560, 0.508494359717585500, 0.508451305815961100, 0.508408250643208940, 0.508365194199436040, 0.508322136484749780, +0.508279077499258600, 0.508236017243069770, 0.508192955716290750, 0.508149892919029120, 0.508106828851393020, 0.508063763513489920, 0.508020696905427390, 0.507977629027312800, +0.507934559879254400, 0.507891489461359650, 0.507848417773736240, 0.507805344816491310, 0.507762270589733440, 0.507719195093569890, 0.507676118328108440, 0.507633040293456240, +0.507589960989721760, 0.507546880417012460, 0.507503798575435480, 0.507460715465099520, 0.507417631086111710, 0.507374545438579740, 0.507331458522611190, 0.507288370338314200, +0.507245280885796460, 0.507202190165165430, 0.507159098176528490, 0.507116004919994200, 0.507072910395669930, 0.507029814603663480, 0.506986717544081980, 0.506943619217034120, +0.506900519622627170, 0.506857418760969010, 0.506814316632166810, 0.506771213236329340, 0.506728108573563760, 0.506685002643977870, 0.506641895447679120, 0.506598786984776010, +0.506555677255375980, 0.506512566259586290, 0.506469453997515640, 0.506426340469271260, 0.506383225674961190, 0.506340109614692560, 0.506296992288574050, 0.506253873696713040, +0.506210753839217430, 0.506167632716194470, 0.506124510327752850, 0.506081386673999930, 0.506038261755043520, 0.505995135570991180, 0.505952008121951290, 0.505908879408031420, +0.505865749429339260, 0.505822618185982510, 0.505779485678069520, 0.505736351905707760, 0.505693216869004810, 0.505650080568069150, 0.505606943003008350, 0.505563804173930100, +0.505520664080941980, 0.505477522724152690, 0.505434380103669480, 0.505391236219600360, 0.505348091072052810, 0.505304944661135290, 0.505261796986955500, 0.505218648049621240, +0.505175497849239990, 0.505132346385920310, 0.505089193659769790, 0.505046039670896230, 0.505002884419407220, 0.504959727905411440, 0.504916570129016250, 0.504873411090329350, +0.504830250789459310, 0.504787089226513610, 0.504743926401600150, 0.504700762314826520, 0.504657596966301300, 0.504614430356132180, 0.504571262484426960, 0.504528093351293230, +0.504484922956839550, 0.504441751301173640, 0.504398578384403380, 0.504355404206636160, 0.504312228767980990, 0.504269052068545110, 0.504225874108436670, 0.504182694887763130, +0.504139514406633290, 0.504096332665154630, 0.504053149663435060, 0.504009965401582380, 0.503966779879705060, 0.503923593097910790, 0.503880405056307160, 0.503837215755002950, +0.503794025194105770, 0.503750833373723390, 0.503707640293963530, 0.503664445954935090, 0.503621250356745430, 0.503578053499502690, 0.503534855383314440, 0.503491656008289380, +0.503448455374535200, 0.503405253482159920, 0.503362050331271130, 0.503318845921977510, 0.503275640254386870, 0.503232433328607120, 0.503189225144745840, 0.503146015702911840, +0.503102805003212920, 0.503059593045756540, 0.503016379830651620, 0.502973165358005740, 0.502929949627926920, 0.502886732640522860, 0.502843514395902250, 0.502800294894172990, +0.502757074135442910, 0.502713852119819780, 0.502670628847412430, 0.502627404318328530, 0.502584178532676010, 0.502540951490562770, 0.502497723192097510, 0.502454493637387920, +0.502411262826542140, 0.502368030759667740, 0.502324797436873750, 0.502281562858267750, 0.502238327023957320, 0.502195089934051600, 0.502151851588658160, 0.502108611987885030, +0.502065371131839910, 0.502022129020631920, 0.501978885654368550, 0.501935641033157910, 0.501892395157107820, 0.501849148026327070, 0.501805899640923480, 0.501762650001005170, +0.501719399106679840, 0.501676146958056400, 0.501632893555242650, 0.501589638898346620, 0.501546382987476110, 0.501503125822739930, 0.501459867404246080, 0.501416607732102060, +0.501373346806416990, 0.501330084627298560, 0.501286821194854900, 0.501243556509193720, 0.501200290570424150, 0.501157023378653750, 0.501113754933990910, 0.501070485236543180, +0.501027214286419720, 0.500983942083728210, 0.500940668628576780, 0.500897393921073350, 0.500854117961326840, 0.500810840749444930, 0.500767562285535980, 0.500724282569707800, +0.500681001602069190, 0.500637719382728160, 0.500594435911792760, 0.500551151189370990, 0.500507865215571670, 0.500464577990502590, 0.500421289514271780, 0.500377999786988160, +0.500334708808759520, 0.500291416579694110, 0.500248123099899740, 0.500204828369485430, 0.500161532388559090, 0.500118235157228860, 0.500074936675602770, 0.500031636943789600, +0.499988335961897460, 0.499945033730034400, 0.499901730248308420, 0.499858425516828460, 0.499815119535702460, 0.499771812305038640, 0.499728503824944940, 0.499685194095530310, +0.499641883116902720, 0.499598570889170030, 0.499555257412441330, 0.499511942686824470, 0.499468626712427750, 0.499425309489359090, 0.499381991017727510, 0.499338671297640980, +0.499295350329207800, 0.499252028112535770, 0.499208704647734150, 0.499165379934910720, 0.499122053974173860, 0.499078726765631480, 0.499035398309392640, 0.498992068605565330, +0.498948737654257850, 0.498905405455578100, 0.498862072009635280, 0.498818737316537250, 0.498775401376391980, 0.498732064189308600, 0.498688725755395080, 0.498645386074759720, +0.498602045147510550, 0.498558702973756600, 0.498515359553605930, 0.498472014887166860, 0.498428668974547350, 0.498385321815856540, 0.498341973411202450, 0.498298623760693450, +0.498255272864437440, 0.498211920722543720, 0.498168567335120100, 0.498125212702275110, 0.498081856824116710, 0.498038499700754090, 0.497995141332295170, 0.497951781718848410, +0.497908420860521780, 0.497865058757424540, 0.497821695409664590, 0.497778330817350070, 0.497734964980590110, 0.497691597899492690, 0.497648229574166320, 0.497604860004718990, +0.497561489191259860, 0.497518117133897040, 0.497474743832738870, 0.497431369287893550, 0.497387993499470100, 0.497344616467576720, 0.497301238192321800, 0.497257858673813390, +0.497214477912160720, 0.497171095907471830, 0.497127712659855230, 0.497084328169418940, 0.497040942436272230, 0.496997555460523210, 0.496954167242279870, 0.496910777781651490, +0.496867387078746170, 0.496823995133672370, 0.496780601946538230, 0.496737207517452930, 0.496693811846524670, 0.496650414933861810, 0.496607016779572590, 0.496563617383766200, +0.496520216746550720, 0.496476814868034740, 0.496433411748326340, 0.496390007387534800, 0.496346601785768230, 0.496303194943135130, 0.496259786859743700, 0.496216377535703130, +0.496172966971121680, 0.496129555166107410, 0.496086142120769620, 0.496042727835216520, 0.495999312309556570, 0.495955895543897910, 0.495912477538349940, 0.495869058293020800, +0.495825637808018970, 0.495782216083452690, 0.495738793119431250, 0.495695368916062810, 0.495651943473455980, 0.495608516791718860, 0.495565088870960900, 0.495521659711290140, +0.495478229312815270, 0.495434797675644470, 0.495391364799886990, 0.495347930685651190, 0.495304495333045490, 0.495261058742178180, 0.495217620913158630, 0.495174181846095020, +0.495130741541095600, 0.495087299998269670, 0.495043857217725480, 0.495000413199571660, 0.494956967943916410, 0.494913521450869200, 0.494870073720538100, 0.494826624753031850, +0.494783174548458660, 0.494739723106927930, 0.494696270428547860, 0.494652816513427130, 0.494609361361673940, 0.494565904973397750, 0.494522447348706820, 0.494478988487709770, +0.494435528390514860, 0.494392067057231540, 0.494348604487968020, 0.494305140682832600, 0.494261675641934680, 0.494218209365382630, 0.494174741853285030, 0.494131273105750220, +0.494087803122887580, 0.494044331904805460, 0.494000859451612480, 0.493957385763416970, 0.493913910840328430, 0.493870434682455060, 0.493826957289905610, 0.493783478662788380, +0.493739998801212890, 0.493696517705287330, 0.493653035375120510, 0.493609551810820720, 0.493566067012497440, 0.493522580980258970, 0.493479093714213670, 0.493435605214471050, +0.493392115481139370, 0.493348624514327430, 0.493305132314143520, 0.493261638880697240, 0.493218144214096770, 0.493174648314451010, 0.493131151181868180, 0.493087652816457890, +0.493044153218328510, 0.493000652387588670, 0.492957150324346840, 0.492913647028712540, 0.492870142500794140, 0.492826636740700320, 0.492783129748539550, 0.492739621524421360, +0.492696112068454100, 0.492652601380746180, 0.492609089461407130, 0.492565576310545430, 0.492522061928269690, 0.492478546314688460, 0.492435029469911250, 0.492391511394046470, +0.492347992087202870, 0.492304471549488920, 0.492260949781014200, 0.492217426781887070, 0.492173902552216440, 0.492130377092110600, 0.492086850401679210, 0.492043322481030720, +0.491999793330273940, 0.491956262949517280, 0.491912731338870310, 0.491869198498441570, 0.491825664428339800, 0.491782129128673470, 0.491738592599552220, 0.491695054841084500, +0.491651515853378740, 0.491607975636544570, 0.491564434190690510, 0.491520891515925320, 0.491477347612357510, 0.491433802480096720, 0.491390256119251470, 0.491346708529930510, +0.491303159712242420, 0.491259609666296840, 0.491216058392202230, 0.491172505890067450, 0.491128952160001080, 0.491085397202112640, 0.491041841016510720, 0.490998283603304220, +0.490954724962601620, 0.490911165094512600, 0.490867603999145700, 0.490824041676609310, 0.490780478127013310, 0.490736913350466040, 0.490693347347076540, 0.490649780116953260, +0.490606211660205900, 0.490562641976942990, 0.490519071067273550, 0.490475498931305990, 0.490431925569150050, 0.490388350980914380, 0.490344775166707770, 0.490301198126638860, +0.490257619860817280, 0.490214040369351730, 0.490170459652351060, 0.490126877709923860, 0.490083294542179800, 0.490039710149227540, 0.489996124531175640, 0.489952537688133790, +0.489908949620210590, 0.489865360327515040, 0.489821769810155680, 0.489778178068242310, 0.489734585101883500, 0.489690990911188170, 0.489647395496265010, 0.489603798857223770, +0.489560200994173020, 0.489516601907221740, 0.489473001596478610, 0.489429400062053320, 0.489385797304054570, 0.489342193322591320, 0.489298588117772160, 0.489254981689706940, +0.489211374038504290, 0.489167765164273180, 0.489124155067122310, 0.489080543747161370, 0.489036931204499150, 0.488993317439244120, 0.488949702451506260, 0.488906086241394140, +0.488862468809016790, 0.488818850154482840, 0.488775230277902210, 0.488731609179383520, 0.488687986859035750, 0.488644363316967640, 0.488600738553289000, 0.488557112568108520, +0.488513485361535270, 0.488469856933677950, 0.488426227284646350, 0.488382596414549170, 0.488338964323495490, 0.488295331011594060, 0.488251696478954610, 0.488208060725686010, +0.488164423751896840, 0.488120785557696950, 0.488077146143195140, 0.488033505508500440, 0.487989863653721660, 0.487946220578968530, 0.487902576284349850, 0.487858930769974770, +0.487815284035951980, 0.487771636082391320, 0.487727986909401610, 0.487684336517091920, 0.487640684905571000, 0.487597032074948760, 0.487553378025333940, 0.487509722756835680, +0.487466066269562680, 0.487422408563624950, 0.487378749639131190, 0.487335089496190140, 0.487291428134911830, 0.487247765555404890, 0.487204101757778560, 0.487160436742141540, +0.487116770508603860, 0.487073103057274250, 0.487029434388261910, 0.486985764501675520, 0.486942093397625180, 0.486898421076219560, 0.486854747537567910, 0.486811072781778990, +0.486767396808962800, 0.486723719619228110, 0.486680041212684100, 0.486636361589439630, 0.486592680749604660, 0.486548998693287940, 0.486505315420598330, 0.486461630931645850, +0.486417945226539310, 0.486374258305387890, 0.486330570168300390, 0.486286880815386900, 0.486243190246756220, 0.486199498462517530, 0.486155805462779700, 0.486112111247652800, +0.486068415817245580, 0.486024719171667340, 0.485981021311026880, 0.485937322235434290, 0.485893621944998360, 0.485849920439828390, 0.485806217720033240, 0.485762513785722940, +0.485718808637006340, 0.485675102273992740, 0.485631394696791010, 0.485587685905511160, 0.485543975900262050, 0.485500264681152650, 0.485456552248292980, 0.485412838601791960, +0.485369123741758830, 0.485325407668302460, 0.485281690381533020, 0.485237971881559260, 0.485194252168490660, 0.485150531242436010, 0.485106809103505400, 0.485063085751807790, +0.485019361187452480, 0.484975635410548390, 0.484931908421205540, 0.484888180219532950, 0.484844450805639930, 0.484800720179635380, 0.484756988341629450, 0.484713255291730980, +0.484669521030049010, 0.484625785556693670, 0.484582048871773810, 0.484538310975398840, 0.484494571867677750, 0.484450831548720540, 0.484407090018636300, 0.484363347277534330, +0.484319603325523600, 0.484275858162714290, 0.484232111789215270, 0.484188364205136000, 0.484144615410585450, 0.484100865405673710, 0.484057114190509840, 0.484013361765203150, +0.483969608129862730, 0.483925853284598640, 0.483882097229519910, 0.483838339964735520, 0.483794581490355700, 0.483750821806489480, 0.483707060913246110, 0.483663298810734780, +0.483619535499065560, 0.483575770978347470, 0.483532005248690000, 0.483488238310202100, 0.483444470162994020, 0.483400700807174730, 0.483356930242853700, 0.483313158470139950, +0.483269385489143720, 0.483225611299973990, 0.483181835902740280, 0.483138059297551550, 0.483094281484518110, 0.483050502463748920, 0.483006722235353460, 0.482962940799440850, +0.482919158156121240, 0.482875374305503760, 0.482831589247697480, 0.482787802982812540, 0.482744015510958190, 0.482700226832243730, 0.482656436946778340, 0.482612645854672230, +0.482568853556034520, 0.482525060050974670, 0.482481265339601780, 0.482437469422026140, 0.482393672298356780, 0.482349873968703270, 0.482306074433174690, 0.482262273691881290, +0.482218471744932260, 0.482174668592436960, 0.482130864234504690, 0.482087058671245570, 0.482043251902768870, 0.481999443929183650, 0.481955634750600160, 0.481911824367127590, +0.481868012778875480, 0.481824199985952940, 0.481780385988470340, 0.481736570786536700, 0.481692754380261660, 0.481648936769754400, 0.481605117955125120, 0.481561297936483060, +0.481517476713937740, 0.481473654287598360, 0.481429830657575220, 0.481386005823977560, 0.481342179786914850, 0.481298352546496280, 0.481254524102832200, 0.481210694456031870, +0.481166863606204360, 0.481123031553460090, 0.481079198297908290, 0.481035363839658450, 0.480991528178819850, 0.480947691315502750, 0.480903853249816490, 0.480860013981870560, +0.480816173511774190, 0.480772331839637860, 0.480728488965570630, 0.480684644889682160, 0.480640799612081730, 0.480596953132879700, 0.480553105452185270, 0.480509256570108070, +0.480465406486757340, 0.480421555202243500, 0.480377702716675740, 0.480333849030163350, 0.480289994142816760, 0.480246138054745140, 0.480202280766058200, 0.480158422276865170, +0.480114562587276470, 0.480070701697401350, 0.480026839607349490, 0.479982976317230140, 0.479939111827153710, 0.479895246137229500, 0.479851379247567210, 0.479807511158276080, +0.479763641869466570, 0.479719771381247940, 0.479675899693729870, 0.479632026807021660, 0.479588152721233780, 0.479544277436475540, 0.479500400952856620, 0.479456523270486270, +0.479412644389475010, 0.479368764309932140, 0.479324883031966960, 0.479281000555689950, 0.479237116881210510, 0.479193232008638230, 0.479149345938082450, 0.479105458669653710, +0.479061570203461350, 0.479017680539615080, 0.478973789678224180, 0.478929897619399190, 0.478886004363249460, 0.478842109909884740, 0.478798214259414380, 0.478754317411948850, +0.478710419367597510, 0.478666520126470150, 0.478622619688676090, 0.478578718054325840, 0.478534815223528810, 0.478490911196394360, 0.478447005973033020, 0.478403099553554200, +0.478359191938067580, 0.478315283126682590, 0.478271373119509850, 0.478227461916658600, 0.478183549518238720, 0.478139635924359600, 0.478095721135131770, 0.478051805150664590, +0.478007887971067970, 0.477963969596451210, 0.477920050026924890, 0.477876129262598480, 0.477832207303581720, 0.477788284149984090, 0.477744359801916100, 0.477700434259487270, +0.477656507522806920, 0.477612579591985660, 0.477568650467132980, 0.477524720148358670, 0.477480788635772200, 0.477436855929484150, 0.477392922029603930, 0.477348986936241390, +0.477305050649506010, 0.477261113169508420, 0.477217174496358030, 0.477173234630164700, 0.477129293571037890, 0.477085351319088250, 0.477041407874425230, 0.476997463237158690, +0.476953517407398110, 0.476909570385254110, 0.476865622170836170, 0.476821672764254190, 0.476777722165617650, 0.476733770375037170, 0.476689817392622280, 0.476645863218482460, +0.476601907852728380, 0.476557951295469520, 0.476513993546815780, 0.476470034606876650, 0.476426074475762850, 0.476382113153583860, 0.476338150640449600, 0.476294186936469580, +0.476250222041754430, 0.476206255956413750, 0.476162288680557430, 0.476118320214295010, 0.476074350557737170, 0.476030379710993490, 0.475986407674173830, 0.475942434447387760, +0.475898460030745980, 0.475854484424358070, 0.475810507628333550, 0.475766529642783150, 0.475722550467816420, 0.475678570103543310, 0.475634588550073400, 0.475590605807517440, +0.475546621875984900, 0.475502636755585850, 0.475458650446429820, 0.475414662948627550, 0.475370674262288630, 0.475326684387523010, 0.475282693324440290, 0.475238701073151190, +0.475194707633765370, 0.475150713006392780, 0.475106717191143060, 0.475062720188126900, 0.475018721997453930, 0.474974722619233790, 0.474930722053577170, 0.474886720300593810, +0.474842717360393630, 0.474798713233086260, 0.474754707918782550, 0.474710701417591970, 0.474666693729624720, 0.474622684854990320, 0.474578674793799620, 0.474534663546162190, +0.474490651112188130, 0.474446637491987070, 0.474402622685669740, 0.474358606693345900, 0.474314589515125560, 0.474270571151118310, 0.474226551601435060, 0.474182530866185450, +0.474138508945479040, 0.474094485839426820, 0.474050461548138350, 0.474006436071723770, 0.473962409410292660, 0.473918381563955940, 0.473874352532823280, 0.473830322317004730, +0.473786290916609950, 0.473742258331749880, 0.473698224562534130, 0.473654189609072850, 0.473610153471475670, 0.473566116149853560, 0.473522077644316090, 0.473478037954973450, +0.473433997081935340, 0.473389955025312610, 0.473345911785215010, 0.473301867361752620, 0.473257821755035170, 0.473213774965173530, 0.473169726992277500, 0.473125677836456760, +0.473081627497822180, 0.473037575976483550, 0.472993523272551010, 0.472949469386134190, 0.472905414317344170, 0.472861358066290590, 0.472817300633083580, 0.472773242017833000, +0.472729182220649640, 0.472685121241643360, 0.472641059080924240, 0.472596995738602140, 0.472552931214787860, 0.472508865509591310, 0.472464798623122630, 0.472420730555491500, +0.472376661306808940, 0.472332590877184770, 0.472288519266728660, 0.472244446475551690, 0.472200372503763620, 0.472156297351474570, 0.472112221018794460, 0.472068143505834150, +0.472024064812703480, 0.471979984939512600, 0.471935903886371410, 0.471891821653390890, 0.471847738240680770, 0.471803653648351310, 0.471759567876512300, 0.471715480925274820, +0.471671392794748620, 0.471627303485043890, 0.471583212996270540, 0.471539121328539590, 0.471495028481960790, 0.471450934456644040, 0.471406839252700330, 0.471362742870239550, +0.471318645309371900, 0.471274546570207230, 0.471230446652856630, 0.471186345557429890, 0.471142243284037250, 0.471098139832788640, 0.471054035203795070, 0.471009929397166460, +0.470965822413012990, 0.470921714251444520, 0.470877604912572250, 0.470833494396505900, 0.470789382703355800, 0.470745269833231890, 0.470701155786245220, 0.470657040562505620, +0.470612924162123410, 0.470568806585208550, 0.470524687831872070, 0.470480567902223810, 0.470436446796373750, 0.470392324514432970, 0.470348201056511430, 0.470304076422719320, +0.470259950613166670, 0.470215823627964550, 0.470171695467222820, 0.470127566131051890, 0.470083435619561620, 0.470039303932863140, 0.469995171071066480, 0.469951037034281820, +0.469906901822619180, 0.469862765436189710, 0.469818627875103310, 0.469774489139470340, 0.469730349229400770, 0.469686208145005670, 0.469642065886395120, 0.469597922453678980, +0.469553777846968450, 0.469509632066373420, 0.469465485112004370, 0.469421336983971150, 0.469377187682385010, 0.469333037207355920, 0.469288885558994230, 0.469244732737409960, +0.469200578742714200, 0.469156423575017020, 0.469112267234428780, 0.469068109721059450, 0.469023951035020260, 0.468979791176421190, 0.468935630145372650, 0.468891467941984660, +0.468847304566368360, 0.468803140018633820, 0.468758974298891020, 0.468714807407251190, 0.468670639343824360, 0.468626470108720940, 0.468582299702050900, 0.468538128123925530, +0.468493955374454820, 0.468449781453749270, 0.468405606361918800, 0.468361430099074770, 0.468317252665327140, 0.468273074060786390, 0.468228894285562580, 0.468184713339766860, +0.468140531223509400, 0.468096347936900640, 0.468052163480050580, 0.468007977853070520, 0.467963791056070500, 0.467919603089160640, 0.467875413952452130, 0.467831223646055120, +0.467787032170080000, 0.467742839524636970, 0.467698645709837210, 0.467654450725790820, 0.467610254572608300, 0.467566057250399740, 0.467521858759276490, 0.467477659099348520, +0.467433458270726470, 0.467389256273520350, 0.467345053107841470, 0.467300848773799960, 0.467256643271506340, 0.467212436601070700, 0.467168228762604390, 0.467124019756217530, +0.467079809582020560, 0.467035598240123690, 0.466991385730638250, 0.466947172053674310, 0.466902957209342110, 0.466858741197752840, 0.466814524019016740, 0.466770305673244350, +0.466726086160545780, 0.466681865481032350, 0.466637643634814300, 0.466593420622002150, 0.466549196442706040, 0.466504971097037370, 0.466460744585106220, 0.466416516907023240, +0.466372288062898540, 0.466328058052843550, 0.466283826876968400, 0.466239594535383660, 0.466195361028199580, 0.466151126355527470, 0.466106890517477560, 0.466062653514160040, +0.466018415345686220, 0.465974176012166450, 0.465929935513711200, 0.465885693850430660, 0.465841451022436350, 0.465797207029838400, 0.465752961872747400, 0.465708715551273630, +0.465664468065528470, 0.465620219415622150, 0.465575969601665250, 0.465531718623768080, 0.465487466482041980, 0.465443213176597200, 0.465398958707544390, 0.465354703074993770, +0.465310446279056820, 0.465266188319843730, 0.465221929197464800, 0.465177668912031440, 0.465133407463653890, 0.465089144852442850, 0.465044881078508550, 0.465000616141962420, +0.464956350042914750, 0.464912082781476220, 0.464867814357757090, 0.464823544771868770, 0.464779274023921660, 0.464735002114026300, 0.464690729042293080, 0.464646454808833430, +0.464602179413757640, 0.464557902857176410, 0.464513625139200030, 0.464469346259939960, 0.464425066219506520, 0.464380785018010440, 0.464336502655562030, 0.464292219132272700, +0.464247934448252850, 0.464203648603612740, 0.464159361598463940, 0.464115073432916750, 0.464070784107081860, 0.464026493621069570, 0.463982201974991510, 0.463937909168957880, +0.463893615203079530, 0.463849320077466710, 0.463805023792230990, 0.463760726347482780, 0.463716427743332660, 0.463672127979891100, 0.463627827057269630, 0.463583524975578590, +0.463539221734928730, 0.463494917335430470, 0.463450611777195260, 0.463406305060333530, 0.463361997184955630, 0.463317688151173190, 0.463273377959096460, 0.463229066608836340, +0.463184754100503080, 0.463140440434208430, 0.463096125610062580, 0.463051809628176490, 0.463007492488660470, 0.462963174191626080, 0.462918854737183800, 0.462874534125444330, +0.462830212356518170, 0.462785889430516850, 0.462741565347550840, 0.462697240107730890, 0.462652913711167460, 0.462608586157972120, 0.462564257448255360, 0.462519927582127510, +0.462475596559700270, 0.462431264381084010, 0.462386931046389620, 0.462342596555727510, 0.462298260909209280, 0.462253924106945380, 0.462209586149046730, 0.462165247035623670, +0.462120906766787910, 0.462076565342649850, 0.462032222763320400, 0.461987879028910030, 0.461943534139530320, 0.461899188095291740, 0.461854840896305240, 0.461810492542681250, +0.461766143034531400, 0.461721792371966200, 0.461677440555096130, 0.461633087584032880, 0.461588733458886850, 0.461544378179769010, 0.461500021746789830, 0.461455664160061010, +0.461411305419693050, 0.461366945525796770, 0.461322584478482790, 0.461278222277862690, 0.461233858924047060, 0.461189494417146790, 0.461145128757272370, 0.461100761944535530, +0.461056393979046800, 0.461012024860917020, 0.460967654590256850, 0.460923283167177960, 0.460878910591790810, 0.460834536864206390, 0.460790161984535260, 0.460745785952889060, +0.460701408769378480, 0.460657030434113930, 0.460612650947207210, 0.460568270308768850, 0.460523888518909850, 0.460479505577740700, 0.460435121485373190, 0.460390736241917900, +0.460346349847485740, 0.460301962302187340, 0.460257573606134400, 0.460213183759437540, 0.460168792762207680, 0.460124400614555510, 0.460080007316592710, 0.460035612868429870, +0.459991217270178000, 0.459946820521947740, 0.459902422623850780, 0.459858023575997750, 0.459813623378499290, 0.459769222031467200, 0.459724819535011990, 0.459680415889244800, +0.459636011094276100, 0.459591605150217800, 0.459547198057180530, 0.459502789815275200, 0.459458380424612510, 0.459413969885304310, 0.459369558197461170, 0.459325145361194120, +0.459280731376613790, 0.459236316243832100, 0.459191899962959560, 0.459147482534107250, 0.459103063957385870, 0.459058644232907260, 0.459014223360782010, 0.458969801341120750, +0.458925378174035450, 0.458880953859636730, 0.458836528398035570, 0.458792101789342710, 0.458747674033670010, 0.458703245131128090, 0.458658815081828040, 0.458614383885880610, +0.458569951543397580, 0.458525518054489710, 0.458481083419268020, 0.458436647637843200, 0.458392210710327210, 0.458347772636830690, 0.458303333417464710, 0.458258893052340020, +0.458214451541568480, 0.458170008885260770, 0.458125565083528090, 0.458081120136481110, 0.458036674044231710, 0.457992226806890610, 0.457947778424568570, 0.457903328897377450, +0.457858878225428030, 0.457814426408831410, 0.457769973447698380, 0.457725519342140730, 0.457681064092269330, 0.457636607698195250, 0.457592150160029240, 0.457547691477883320, +0.457503231651868130, 0.457458770682094840, 0.457414308568674210, 0.457369845311718260, 0.457325380911337680, 0.457280915367643650, 0.457236448680746920, 0.457191980850759460, +0.457147511877792070, 0.457103041761955490, 0.457058570503361740, 0.457014098102121510, 0.456969624558346050, 0.456925149872146160, 0.456880674043633750, 0.456836197072919670, +0.456791718960115110, 0.456747239705330820, 0.456702759308678870, 0.456658277770270020, 0.456613795090215490, 0.456569311268626040, 0.456524826305613700, 0.456480340201289300, +0.456435852955764110, 0.456391364569148810, 0.456346875041555520, 0.456302384373095060, 0.456257892563878280, 0.456213399614017080, 0.456168905523622440, 0.456124410292805480, +0.456079913921677180, 0.456035416410349450, 0.455990917758933190, 0.455946417967539600, 0.455901917036279580, 0.455857414965265220, 0.455812911754607250, 0.455768407404417040, +0.455723901914805380, 0.455679395285884410, 0.455634887517764930, 0.455590378610558230, 0.455545868564375180, 0.455501357379327840, 0.455456845055527140, 0.455412331593083920, +0.455367816992110260, 0.455323301252717080, 0.455278784375015620, 0.455234266359116850, 0.455189747205132780, 0.455145226913174330, 0.455100705483352850, 0.455056182915779150, +0.455011659210565410, 0.454967134367822550, 0.454922608387661850, 0.454878081270194250, 0.454833553015531800, 0.454789023623785480, 0.454744493095066590, 0.454699961429486100, +0.454655428627156080, 0.454610894688187490, 0.454566359612691650, 0.454521823400779570, 0.454477286052563270, 0.454432747568153770, 0.454388207947662050, 0.454343667191200170, +0.454299125298879110, 0.454254582270810230, 0.454210038107104530, 0.454165492807874100, 0.454120946373229970, 0.454076398803283490, 0.454031850098145560, 0.453987300257928440, +0.453942749282743030, 0.453898197172700800, 0.453853643927912660, 0.453809089548490810, 0.453764534034546250, 0.453719977386190300, 0.453675419603534080, 0.453630860686689670, +0.453586300635768100, 0.453541739450880390, 0.453497177132138720, 0.453452613679654120, 0.453408049093537990, 0.453363483373901370, 0.453318916520856370, 0.453274348534514090, +0.453229779414985990, 0.453185209162383030, 0.453140637776817400, 0.453096065258400240, 0.453051491607242900, 0.453006916823456400, 0.452962340907153040, 0.452917763858443790, +0.452873185677440170, 0.452828606364253150, 0.452784025918995030, 0.452739444341776880, 0.452694861632709670, 0.452650277791905750, 0.452605692819476100, 0.452561106715532240, +0.452516519480185180, 0.452471931113547220, 0.452427341615729510, 0.452382750986843380, 0.452338159226999990, 0.452293566336311570, 0.452248972314889250, 0.452204377162844510, +0.452159780880288460, 0.452115183467333310, 0.452070584924090250, 0.452025985250670670, 0.451981384447185770, 0.451936782513747800, 0.451892179450467830, 0.451847575257457450, +0.451802969934827710, 0.451758363482690990, 0.451713755901158360, 0.451669147190340900, 0.451624537350351020, 0.451579926381299730, 0.451535314283298680, 0.451490701056458940, +0.451446086700892810, 0.451401471216711480, 0.451356854604026470, 0.451312236862948970, 0.451267617993591220, 0.451222997996064470, 0.451178376870480180, 0.451133754616949540, +0.451089131235584970, 0.451044506726497540, 0.450999881089798830, 0.450955254325600070, 0.450910626434013530, 0.450865997415150430, 0.450821367269121920, 0.450776735996040460, +0.450732103596017120, 0.450687470069163490, 0.450642835415590800, 0.450598199635411420, 0.450553562728736590, 0.450508924695677770, 0.450464285536346320, 0.450419645250854540, +0.450375003839313610, 0.450330361301835180, 0.450285717638530420, 0.450241072849511810, 0.450196426934890540, 0.450151779894778170, 0.450107131729285960, 0.450062482438526310, +0.450017832022610480, 0.449973180481649640, 0.449928527815756260, 0.449883874025041540, 0.449839219109617160, 0.449794563069594310, 0.449749905905085460, 0.449705247616201900, +0.449660588203055160, 0.449615927665756530, 0.449571266004418550, 0.449526603219152390, 0.449481939310069690, 0.449437274277281750, 0.449392608120901040, 0.449347940841038800, +0.449303272437806660, 0.449258602911316030, 0.449213932261679220, 0.449169260489007630, 0.449124587593412450, 0.449079913575006210, 0.449035238433900200, 0.448990562170206110, +0.448945884784035190, 0.448901206275499950, 0.448856526644711710, 0.448811845891782140, 0.448767164016822600, 0.448722481019945500, 0.448677796901262250, 0.448633111660884430, +0.448588425298923510, 0.448543737815491890, 0.448499049210700880, 0.448454359484662330, 0.448409668637487440, 0.448364976669288760, 0.448320283580177670, 0.448275589370265900, +0.448230894039664710, 0.448186197588486710, 0.448141500016843160, 0.448096801324845530, 0.448052101512606270, 0.448007400580236750, 0.447962698527848760, 0.447917995355553540, +0.447873291063463800, 0.447828585651690810, 0.447783879120346400, 0.447739171469541840, 0.447694462699389780, 0.447649752810001580, 0.447605041801488970, 0.447560329673963360, +0.447515616427537340, 0.447470902062322260, 0.447426186578429920, 0.447381469975971720, 0.447336752255060250, 0.447292033415806920, 0.447247313458323080, 0.447202592382721360, +0.447157870189113130, 0.447113146877610280, 0.447068422448324120, 0.447023696901367340, 0.446978970236851290, 0.446934242454887830, 0.446889513555588370, 0.446844783539065540, +0.446800052405430690, 0.446755320154795740, 0.446710586787272100, 0.446665852302972400, 0.446621116702008050, 0.446576379984490960, 0.446531642150532480, 0.446486903200245260, +0.446442163133740800, 0.446397421951130580, 0.446352679652527170, 0.446307936238042050, 0.446263191707787110, 0.446218446061873770, 0.446173699300414730, 0.446128951423521490, +0.446084202431305810, 0.446039452323879200, 0.445994701101354420, 0.445949948763842860, 0.445905195311456450, 0.445860440744306640, 0.445815685062506130, 0.445770928266166380, +0.445726170355399350, 0.445681411330316470, 0.445636651191030460, 0.445591889937652810, 0.445547127570295460, 0.445502364089069900, 0.445457599494088810, 0.445412833785463700, +0.445368066963306160, 0.445323299027728830, 0.445278529978843260, 0.445233759816761330, 0.445188988541594610, 0.445144216153455840, 0.445099442652456550, 0.445054668038708630, +0.445009892312323630, 0.444965115473414330, 0.444920337522092200, 0.444875558458469210, 0.444830778282656990, 0.444785996994768170, 0.444741214594914390, 0.444696431083207560, +0.444651646459759300, 0.444606860724682250, 0.444562073878088100, 0.444517285920088320, 0.444472496850795760, 0.444427706670321940, 0.444382915378778890, 0.444338122976278120, +0.444293329462932430, 0.444248534838853460, 0.444203739104153120, 0.444158942258943030, 0.444114144303335960, 0.444069345237443570, 0.444024545061377840, 0.443979743775250290, +0.443934941379173830, 0.443890137873259980, 0.443845333257620820, 0.443800527532367930, 0.443755720697614040, 0.443710912753470970, 0.443666103700050110, 0.443621293537464430, +0.443576482265825580, 0.443531669885245450, 0.443486856395835740, 0.443442041797709300, 0.443397226090977810, 0.443352409275753200, 0.443307591352147200, 0.443262772320272560, +0.443217952180241070, 0.443173130932164650, 0.443128308576155040, 0.443083485112324980, 0.443038660540786280, 0.442993834861650890, 0.442949008075030570, 0.442904180181038050, +0.442859351179785140, 0.442814521071383860, 0.442769689855945840, 0.442724857533583980, 0.442680024104410040, 0.442635189568535590, 0.442590353926073600, 0.442545517177135690, +0.442500679321834010, 0.442455840360280240, 0.442411000292587230, 0.442366159118866730, 0.442321316839230870, 0.442276473453791290, 0.442231628962660940, 0.442186783365951520, +0.442141936663775100, 0.442097088856243490, 0.442052239943469540, 0.442007389925564990, 0.441962538802641970, 0.441917686574812170, 0.441872833242188620, 0.441827978804882950, +0.441783123263006890, 0.441738266616673480, 0.441693408865994400, 0.441648550011081780, 0.441603690052047360, 0.441558828989004170, 0.441513966822063900, 0.441469103551338670, +0.441424239176940290, 0.441379373698981730, 0.441334507117574770, 0.441289639432831500, 0.441244770644863730, 0.441199900753784460, 0.441155029759705390, 0.441110157662738810, +0.441065284462996370, 0.441020410160591180, 0.440975534755634950, 0.440930658248239460, 0.440885780638517740, 0.440840901926581540, 0.440796022112543100, 0.440751141196514260, +0.440706259178607900, 0.440661376058935910, 0.440616491837610480, 0.440571606514743420, 0.440526720090447740, 0.440481832564835310, 0.440436943938018240, 0.440392054210108410, +0.440347163381218880, 0.440302271451461450, 0.440257378420948310, 0.440212484289791320, 0.440167589058103490, 0.440122692725996740, 0.440077795293582870, 0.440032896760974900, +0.439987997128284620, 0.439943096395624460, 0.439898194563106080, 0.439853291630842640, 0.439808387598945970, 0.439763482467528330, 0.439718576236701570, 0.439673668906578770, +0.439628760477271840, 0.439583850948892960, 0.439538940321554050, 0.439494028595368240, 0.439449115770447320, 0.439404201846903650, 0.439359286824849040, 0.439314370704396610, +0.439269453485658270, 0.439224535168746270, 0.439179615753772570, 0.439134695240850190, 0.439089773630091110, 0.439044850921607170, 0.438999927115511560, 0.438955002211916080, +0.438910076210933090, 0.438865149112674490, 0.438820220917253480, 0.438775291624781900, 0.438730361235372070, 0.438685429749135940, 0.438640497166186640, 0.438595563486636090, +0.438550628710596630, 0.438505692838180190, 0.438460755869499950, 0.438415817804667820, 0.438370878643796150, 0.438325938386996850, 0.438280997034383110, 0.438236054586066900, +0.438191111042160130, 0.438146166402775980, 0.438101220668026430, 0.438056273838023870, 0.438011325912880170, 0.437966376892708560, 0.437921426777621030, 0.437876475567729910, +0.437831523263147230, 0.437786569863986120, 0.437741615370358550, 0.437696659782376980, 0.437651703100153390, 0.437606745323800890, 0.437561786453431580, 0.437516826489157740, +0.437471865431091510, 0.437426903279345970, 0.437381940034033130, 0.437336975695265140, 0.437292010263155060, 0.437247043737814920, 0.437202076119357190, 0.437157107407893930, +0.437112137603538230, 0.437067166706402220, 0.437022194716598260, 0.436977221634238470, 0.436932247459435990, 0.436887272192302890, 0.436842295832951640, 0.436797318381494220, +0.436752339838043900, 0.436707360202712720, 0.436662379475613150, 0.436617397656857250, 0.436572414746558280, 0.436527430744828250, 0.436482445651779630, 0.436437459467524490, +0.436392472192176080, 0.436347483825846540, 0.436302494368647880, 0.436257503820693390, 0.436212512182095110, 0.436167519452965560, 0.436122525633416860, 0.436077530723562200, +0.436032534723513720, 0.435987537633383880, 0.435942539453284820, 0.435897540183329820, 0.435852539823630980, 0.435807538374300750, 0.435762535835451330, 0.435717532207195890, +0.435672527489646690, 0.435627521682916130, 0.435582514787116400, 0.435537506802360750, 0.435492497728761360, 0.435447487566430310, 0.435402476315480960, 0.435357463976025370, +0.435312450548176190, 0.435267436032045430, 0.435222420427746500, 0.435177403735391540, 0.435132385955093070, 0.435087367086963220, 0.435042347131115340, 0.434997326087661560, +0.434952303956714530, 0.434907280738386300, 0.434862256432790310, 0.434817231040038670, 0.434772204560243900, 0.434727176993518260, 0.434682148339975090, 0.434637118599726540, +0.434592087772884770, 0.434547055859563210, 0.434502022859873990, 0.434456988773929690, 0.434411953601842590, 0.434366917343725960, 0.434321879999692020, 0.434276841569853410, +0.434231802054322270, 0.434186761453212060, 0.434141719766634960, 0.434096676994703500, 0.434051633137529980, 0.434006588195227800, 0.433961542167909110, 0.433916495055686580, +0.433871446858672400, 0.433826397576980050, 0.433781347210721650, 0.433736295760009490, 0.433691243224957000, 0.433646189605676410, 0.433601134902280360, 0.433556079114881090, +0.433511022243591950, 0.433465964288525300, 0.433420905249793760, 0.433375845127509480, 0.433330783921786090, 0.433285721632735650, 0.433240658260470980, 0.433195593805104200, +0.433150528266748880, 0.433105461645517220, 0.433060393941521900, 0.433015325154875230, 0.432970255285690610, 0.432925184334080390, 0.432880112300157160, 0.432835039184033270, +0.432789964985822170, 0.432744889705636180, 0.432699813343587590, 0.432654735899789810, 0.432609657374355250, 0.432564577767396490, 0.432519497079025930, 0.432474415309356990, +0.432429332458502010, 0.432384248526573760, 0.432339163513684450, 0.432294077419947630, 0.432248990245475580, 0.432203901990381110, 0.432158812654776460, 0.432113722238775200, +0.432068630742489630, 0.432023538166032450, 0.431978444509516060, 0.431933349773053920, 0.431888253956758450, 0.431843157060741940, 0.431798059085117920, 0.431752960029998740, +0.431707859895497200, 0.431662758681725540, 0.431617656388797450, 0.431572553016825230, 0.431527448565921570, 0.431482343036198920, 0.431437236427770820, 0.431392128740749610, +0.431347019975248100, 0.431301910131378640, 0.431256799209254750, 0.431211687208988950, 0.431166574130693870, 0.431121459974481980, 0.431076344740466800, 0.431031228428760790, +0.430986111039476320, 0.430940992572726940, 0.430895873028625140, 0.430850752407283600, 0.430805630708814780, 0.430760507933332320, 0.430715384080948560, 0.430670259151776370, +0.430625133145928100, 0.430580006063517430, 0.430534877904656720, 0.430489748669458830, 0.430444618358036160, 0.430399486970502340, 0.430354354506969790, 0.430309220967551360, +0.430264086352359520, 0.430218950661507840, 0.430173813895108780, 0.430128676053275150, 0.430083537136119460, 0.430038397143755360, 0.429993256076295240, 0.429948113933851570, +0.429902970716538050, 0.429857826424467070, 0.429812681057751500, 0.429767534616503850, 0.429722387100837770, 0.429677238510865760, 0.429632088846700620, 0.429586938108454830, +0.429541786296242120, 0.429496633410174970, 0.429451479450366210, 0.429406324416928330, 0.429361168309975060, 0.429316011129618870, 0.429270852875972660, 0.429225693549148910, +0.429180533149261360, 0.429135371676422460, 0.429090209130744690, 0.429045045512341850, 0.428999880821326340, 0.428954715057811190, 0.428909548221908800, 0.428864380313732970, +0.428819211333396180, 0.428774041281011380, 0.428728870156691030, 0.428683697960548950, 0.428638524692697590, 0.428593350353249970, 0.428548174942318560, 0.428502998460017050, +0.428457820906458120, 0.428412642281754570, 0.428367462586019100, 0.428322281819365320, 0.428277099981905830, 0.428231917073753190, 0.428186733095021200, 0.428141548045822330, +0.428096361926269600, 0.428051174736475580, 0.428005986476554020, 0.427960797146617500, 0.427915606746778980, 0.427870415277151030, 0.427825222737847450, 0.427780029128980830, +0.427734834450664130, 0.427689638703009910, 0.427644441886132040, 0.427599244000143040, 0.427554045045155930, 0.427508845021283330, 0.427463643928639000, 0.427418441767335570, +0.427373238537485600, 0.427328034239202960, 0.427282828872600270, 0.427237622437790450, 0.427192414934886190, 0.427147206364001330, 0.427101996725248400, 0.427056786018740530, +0.427011574244590240, 0.426966361402911500, 0.426921147493816770, 0.426875932517419230, 0.426830716473831420, 0.426785499363167230, 0.426740281185539310, 0.426695061941060660, +0.426649841629843930, 0.426604620252003080, 0.426559397807650620, 0.426514174296899640, 0.426468949719862880, 0.426423724076654130, 0.426378497367386090, 0.426333269592171380, +0.426288040751123860, 0.426242810844356280, 0.426197579871981700, 0.426152347834112710, 0.426107114730863320, 0.426061880562346120, 0.426016645328674170, 0.425971409029960280, +0.425926171666318190, 0.425880933237860750, 0.425835693744700930, 0.425790453186951470, 0.425745211564726280, 0.425699968878138100, 0.425654725127299960, 0.425609480312324600, +0.425564234433325970, 0.425518987490416720, 0.425473739483709650, 0.425428490413318590, 0.425383240279356310, 0.425337989081935930, 0.425292736821170190, 0.425247483497173010, +0.425202229110057120, 0.425156973659935660, 0.425111717146921360, 0.425066459571128150, 0.425021200932668820, 0.424975941231656500, 0.424930680468203870, 0.424885418642424960, +0.424840155754432570, 0.424794891804339710, 0.424749626792259250, 0.424704360718305090, 0.424659093582590070, 0.424613825385226910, 0.424568556126329600, 0.424523285806010840, +0.424478014424383930, 0.424432741981561560, 0.424387468477657740, 0.424342193912785270, 0.424296918287057290, 0.424251641600586590, 0.424206363853487200, 0.424161085045871910, +0.424115805177853910, 0.424070524249546000, 0.424025242261062200, 0.423979959212515240, 0.423934675104018440, 0.423889389935684540, 0.423844103707627540, 0.423798816419960310, +0.423753528072795980, 0.423708238666247520, 0.423662948200428770, 0.423617656675452700, 0.423572364091432120, 0.423527070448480980, 0.423481775746712140, 0.423436479986238900, +0.423391183167174060, 0.423345885289631680, 0.423300586353724580, 0.423255286359566000, 0.423209985307268780, 0.423164683196947060, 0.423119380028713580, 0.423074075802681690, +0.423028770518964150, 0.422983464177675130, 0.422938156778927430, 0.422892848322834360, 0.422847538809508760, 0.422802228239064710, 0.422756916611615070, 0.422711603927272810, +0.422666290186151870, 0.422620975388365240, 0.422575659534026150, 0.422530342623247510, 0.422485024656143400, 0.422439705632826790, 0.422394385553410860, 0.422349064418008570, +0.422303742226734060, 0.422258418979700120, 0.422213094677020230, 0.422167769318807120, 0.422122442905175030, 0.422077115436236830, 0.422031786912105800, 0.421986457332894970, +0.421941126698718360, 0.421895795009688930, 0.421850462265919600, 0.421805128467524550, 0.421759793614616680, 0.421714457707309310, 0.421669120745715390, 0.421623782729949050, +0.421578443660123310, 0.421533103536351430, 0.421487762358746350, 0.421442420127422330, 0.421397076842492220, 0.421351732504069430, 0.421306387112266920, 0.421261040667198830, +0.421215693168978170, 0.421170344617718240, 0.421124995013532070, 0.421079644356533780, 0.421034292646836390, 0.420988939884552880, 0.420943586069797430, 0.420898231202682990, +0.420852875283322990, 0.420807518311830390, 0.420762160288319420, 0.420716801212903060, 0.420671441085694650, 0.420626079906807230, 0.420580717676355080, 0.420535354394451060, +0.420489990061208680, 0.420444624676740930, 0.420399258241162030, 0.420353890754585010, 0.420308522217123230, 0.420263152628889750, 0.420217781989998760, 0.420172410300563350, +0.420127037560696910, 0.420081663770512430, 0.420036288930124240, 0.419990913039645310, 0.419945536099188720, 0.419900158108868660, 0.419854779068798260, 0.419809398979090860, +0.419764017839859560, 0.419718635651218640, 0.419673252413281130, 0.419627868126160490, 0.419582482789969740, 0.419537096404823230, 0.419491708970833990, 0.419446320488115420, +0.419400930956780660, 0.419355540376944000, 0.419310148748718530, 0.419264756072217640, 0.419219362347554410, 0.419173967574843260, 0.419128571754197150, 0.419083174885729210, +0.419037776969553740, 0.418992378005783820, 0.418946977994532950, 0.418901576935914290, 0.418856174830042010, 0.418810771677029350, 0.418765367476989720, 0.418719962230036320, +0.418674555936283390, 0.418629148595844050, 0.418583740208831880, 0.418538330775359900, 0.418492920295542530, 0.418447508769492880, 0.418402096197324440, 0.418356682579150370, +0.418311267915084940, 0.418265852205241370, 0.418220435449732810, 0.418175017648673540, 0.418129598802176710, 0.418084178910355870, 0.418038757973324240, 0.417993335991196040, +0.417947912964084570, 0.417902488892103300, 0.417857063775365360, 0.417811637613985210, 0.417766210408075930, 0.417720782157751160, 0.417675352863124020, 0.417629922524308920, +0.417584491141418990, 0.417539058714567810, 0.417493625243868630, 0.417448190729435790, 0.417402755171382420, 0.417357318569822220, 0.417311880924868260, 0.417266442236635060, +0.417221002505235690, 0.417175561730783460, 0.417130119913392720, 0.417084677053176700, 0.417039233150248990, 0.416993788204722770, 0.416948342216712450, 0.416902895186331330, +0.416857447113692940, 0.416811997998910560, 0.416766547842098540, 0.416721096643370200, 0.416675644402839110, 0.416630191120618500, 0.416584736796822790, 0.416539281431565270, +0.416493825024959520, 0.416448367577118840, 0.416402909088157580, 0.416357449558189100, 0.416311988987326580, 0.416266527375684480, 0.416221064723376110, 0.416175601030515040, +0.416130136297214570, 0.416084670523589160, 0.416039203709752060, 0.415993735855817000, 0.415948266961897130, 0.415902797028107060, 0.415857326054559940, 0.415811854041369560, +0.415766380988649100, 0.415720906896513090, 0.415675431765074880, 0.415629955594448040, 0.415584478384745880, 0.415539000136082970, 0.415493520848572550, 0.415448040522327920, +0.415402559157463550, 0.415357076754092840, 0.415311593312329420, 0.415266108832286650, 0.415220623314078940, 0.415175136757819700, 0.415129649163622660, 0.415084160531601080, +0.415038670861869460, 0.414993180154541170, 0.414947688409729950, 0.414902195627549100, 0.414856701808113180, 0.414811206951535500, 0.414765711057929810, 0.414720214127409390, +0.414674716160088890, 0.414629217156081590, 0.414583717115500850, 0.414538216038461190, 0.414492713925076030, 0.414447210775459040, 0.414401706589723640, 0.414356201367984400, +0.414310695110354620, 0.414265187816948100, 0.414219679487878250, 0.414174170123259580, 0.414128659723205510, 0.414083148287829770, 0.414037635817245730, 0.413992122311568010, +0.413946607770910020, 0.413901092195385510, 0.413855575585107830, 0.413810057940191660, 0.413764539260750300, 0.413719019546897600, 0.413673498798746990, 0.413627977016413020, +0.413582454200009050, 0.413536930349648610, 0.413491405465446220, 0.413445879547515330, 0.413400352595969740, 0.413354824610922820, 0.413309295592489300, 0.413263765540782540, +0.413218234455916320, 0.413172702338004130, 0.413127169187160580, 0.413081635003499150, 0.413036099787133570, 0.412990563538177420, 0.412945026256745170, 0.412899487942950450, +0.412853948596906940, 0.412808408218728160, 0.412762866808528810, 0.412717324366422220, 0.412671780892521990, 0.412626236386942680, 0.412580690849797760, 0.412535144281201140, +0.412489596681266280, 0.412444048050107760, 0.412398498387839150, 0.412352947694574310, 0.412307395970426700, 0.412261843215511010, 0.412216289429940710, 0.412170734613829690, +0.412125178767291380, 0.412079621890440560, 0.412034063983390710, 0.411988505046255670, 0.411942945079148970, 0.411897384082185290, 0.411851822055478210, 0.411806258999141140, +0.411760694913288820, 0.411715129798034760, 0.411669563653492890, 0.411623996479776650, 0.411578428277000920, 0.411532859045279030, 0.411487288784725070, 0.411441717495452440, +0.411396145177575890, 0.411350571831209040, 0.411304997456465700, 0.411259422053459500, 0.411213845622305170, 0.411168268163116190, 0.411122689676006570, 0.411077110161089780, +0.411031529618480660, 0.410985948048292690, 0.410940365450639890, 0.410894781825635710, 0.410849197173395020, 0.410803611494031330, 0.410758024787658220, 0.410712437054390420, +0.410666848294341520, 0.410621258507625540, 0.410575667694355990, 0.410530075854647680, 0.410484482988614170, 0.410438889096369500, 0.410393294178027170, 0.410347698233701990, +0.410302101263507580, 0.410256503267557910, 0.410210904245966620, 0.410165304198848450, 0.410119703126316960, 0.410074101028486290, 0.410028497905469910, 0.409982893757382730, +0.409937288584338310, 0.409891682386450240, 0.409846075163833370, 0.409800466916601320, 0.409754857644868130, 0.409709247348747360, 0.409663636028353870, 0.409618023683801350, +0.409572410315203690, 0.409526795922674660, 0.409481180506329030, 0.409435564066280460, 0.409389946602642940, 0.409344328115530180, 0.409298708605056960, 0.409253088071337030, +0.409207466514484360, 0.409161843934612630, 0.409116220331836640, 0.409070595706270130, 0.409024970058026740, 0.408979343387221360, 0.408933715693967580, 0.408888086978379530, +0.408842457240570830, 0.408796826480656410, 0.408751194698749880, 0.408705561894965430, 0.408659928069416640, 0.408614293222218430, 0.408568657353484520, 0.408523020463328950, +0.408477382551865390, 0.408431743619208810, 0.408386103665472840, 0.408340462690771680, 0.408294820695218890, 0.408249177678929490, 0.408203533642017170, 0.408157888584595560, +0.408112242506779630, 0.408066595408683120, 0.408020947290420100, 0.407975298152104370, 0.407929647993850730, 0.407883996815772980, 0.407838344617985290, 0.407792691400601260, +0.407747037163735950, 0.407701381907503050, 0.407655725632016690, 0.407610068337390610, 0.407564410023739780, 0.407518750691177880, 0.407473090339819100, 0.407427428969777240, +0.407381766581167200, 0.407336103174102740, 0.407290438748698020, 0.407244773305066810, 0.407199106843324050, 0.407153439363583500, 0.407107770865959010, 0.407062101350565420, +0.407016430817516650, 0.406970759266926770, 0.406925086698909590, 0.406879413113580110, 0.406833738511052090, 0.406788062891439710, 0.406742386254856810, 0.406696708601418320, +0.406651029931238030, 0.406605350244430230, 0.406559669541108560, 0.406513987821388200, 0.406468305085382840, 0.406422621333206720, 0.406376936564973650, 0.406331250780798630, +0.406285563980795520, 0.406239876165078060, 0.406194187333761340, 0.406148497486959140, 0.406102806624785650, 0.406057114747354790, 0.406011421854781560, 0.405965727947179720, +0.405920033024663620, 0.405874337087346990, 0.405828640135344920, 0.405782942168771310, 0.405737243187740290, 0.405691543192365780, 0.405645842182762780, 0.405600140159045220, +0.405554437121327270, 0.405508733069722850, 0.405463028004347030, 0.405417321925313600, 0.405371614832736480, 0.405325906726730690, 0.405280197607410190, 0.405234487474889160, +0.405188776329281520, 0.405143064170702340, 0.405097350999265470, 0.405051636815085270, 0.405005921618275530, 0.404960205408951390, 0.404914488187226810, 0.404868769953215910, +0.404823050707032730, 0.404777330448792330, 0.404731609178608620, 0.404685886896595900, 0.404640163602868030, 0.404594439297540130, 0.404548713980726170, 0.404502987652540390, +0.404457260313096760, 0.404411531962510400, 0.404365802600895160, 0.404320072228365080, 0.404274340845035160, 0.404228608451019430, 0.404182875046432130, 0.404137140631387280, +0.404091405206000010, 0.404045668770384170, 0.403999931324654170, 0.403954192868923980, 0.403908453403308660, 0.403862712927922200, 0.403816971442878980, 0.403771228948292980, +0.403725485444279220, 0.403679740930951820, 0.403633995408425040, 0.403588248876812830, 0.403542501336230490, 0.403496752786791810, 0.403451003228610880, 0.403405252661802830, +0.403359501086481660, 0.403313748502761750, 0.403267994910757040, 0.403222240310582790, 0.403176484702352900, 0.403130728086181830, 0.403084970462183500, 0.403039211830473200, +0.402993452191164780, 0.402947691544372820, 0.402901929890211170, 0.402856167228795140, 0.402810403560238670, 0.402764638884656190, 0.402718873202161710, 0.402673106512870470, +0.402627338816896440, 0.402581570114353690, 0.402535800405357360, 0.402490029690021570, 0.402444257968460730, 0.402398485240788810, 0.402352711507121100, 0.402306936767571570, +0.402261161022254730, 0.402215384271284560, 0.402169606514776400, 0.402123827752844170, 0.402078047985602370, 0.402032267213165040, 0.401986485435647470, 0.401940702653163670, +0.401894918865828120, 0.401849134073754890, 0.401803348277059160, 0.401757561475855120, 0.401711773670256790, 0.401665984860379350, 0.401620195046337000, 0.401574404228244200, +0.401528612406214900, 0.401482819580364520, 0.401437025750807140, 0.401391230917657100, 0.401345435081028660, 0.401299638241036980, 0.401253840397796210, 0.401208041551420870, +0.401162241702025020, 0.401116440849723980, 0.401070638994631800, 0.401024836136863020, 0.400979032276531750, 0.400933227413753370, 0.400887421548641820, 0.400841614681311800, +0.400795806811877320, 0.400749997940453680, 0.400704188067155080, 0.400658377192095630, 0.400612565315390580, 0.400566752437154170, 0.400520938557500870, 0.400475123676544810, +0.400429307794401330, 0.400383490911184580, 0.400337673027009120, 0.400291854141989090, 0.400246034256239840, 0.400200213369875430, 0.400154391483010570, 0.400108568595759270, +0.400062744708236990, 0.400016919820557810, 0.399971093932836360, 0.399925267045186770, 0.399879439157724390, 0.399833610270563470, 0.399787780383818070, 0.399741949497603610, +0.399696117612034330, 0.399650284727224750, 0.399604450843288990, 0.399558615960342590, 0.399512780078499610, 0.399466943197874680, 0.399421105318581990, 0.399375266440736900, +0.399329426564453690, 0.399283585689846950, 0.399237743817030750, 0.399191900946120670, 0.399146057077230830, 0.399100212210475810, 0.399054366345969860, 0.399008519483828430, +0.398962671624165710, 0.398916822767095840, 0.398870972912734380, 0.398825122061195470, 0.398779270212593740, 0.398733417367043490, 0.398687563524660000, 0.398641708685557710, +0.398595852849851050, 0.398549996017654400, 0.398504138189083200, 0.398458279364251600, 0.398412419543274330, 0.398366558726265580, 0.398320696913340880, 0.398274834104614390, +0.398228970300200820, 0.398183105500214460, 0.398137239704770720, 0.398091372913983890, 0.398045505127968600, 0.397999636346839160, 0.397953766570711020, 0.397907895799698490, +0.397862024033915800, 0.397816151273478470, 0.397770277518500750, 0.397724402769097320, 0.397678527025382480, 0.397632650287471750, 0.397586772555479420, 0.397540893829520130, +0.397495014109708170, 0.397449133396159120, 0.397403251688987210, 0.397357368988307200, 0.397311485294233320, 0.397265600606881150, 0.397219714926364990, 0.397173828252799570, +0.397127940586299130, 0.397082051926979260, 0.397036162274954250, 0.396990271630338450, 0.396944379993247390, 0.396898487363795350, 0.396852593742097080, 0.396806699128266940, +0.396760803522420440, 0.396714906924671980, 0.396669009335136210, 0.396623110753927530, 0.396577211181161460, 0.396531310616952350, 0.396485409061415000, 0.396439506514663700, +0.396393602976814030, 0.396347698447980400, 0.396301792928277500, 0.396255886417819670, 0.396209978916722600, 0.396164070425100550, 0.396118160943067900, 0.396072250470740290, +0.396026339008232030, 0.395980426555657910, 0.395934513113132320, 0.395888598680770920, 0.395842683258687930, 0.395796766846998270, 0.395750849445816290, 0.395704931055257610, +0.395659011675436600, 0.395613091306468050, 0.395567169948466360, 0.395521247601547170, 0.395475324265824820, 0.395429399941414180, 0.395383474628429650, 0.395337548326986870, +0.395291621037200170, 0.395245692759183980, 0.395199763493054020, 0.395153833238924670, 0.395107901996910650, 0.395061969767126540, 0.395016036549687920, 0.394970102344709200, +0.394924167152305160, 0.394878230972590340, 0.394832293805680360, 0.394786355651689620, 0.394740416510733050, 0.394694476382924990, 0.394648535268381120, 0.394602593167215960, +0.394556650079544320, 0.394510706005480600, 0.394464760945140550, 0.394418814898638610, 0.394372867866089600, 0.394326919847608040, 0.394280970843309600, 0.394235020853308690, +0.394189069877719840, 0.394143117916658740, 0.394097164970239830, 0.394051211038577990, 0.394005256121787770, 0.393959300219984760, 0.393913343333283540, 0.393867385461798950, +0.393821426605645450, 0.393775466764938850, 0.393729505939793560, 0.393683544130324470, 0.393637581336646170, 0.393591617558874280, 0.393545652797123390, 0.393499687051508340, +0.393453720322143650, 0.393407752609145070, 0.393361783912627160, 0.393315814232704340, 0.393269843569492410, 0.393223871923105870, 0.393177899293659590, 0.393131925681268260, +0.393085951086047440, 0.393039975508111760, 0.392993998947576200, 0.392948021404555150, 0.392902042879164530, 0.392856063371518740, 0.392810082881732800, 0.392764101409921300, +0.392718118956199900, 0.392672135520683200, 0.392626151103486200, 0.392580165704723370, 0.392534179324510570, 0.392488191962962310, 0.392442203620193160, 0.392396214296318930, +0.392350223991454140, 0.392304232705713800, 0.392258240439212480, 0.392212247192065930, 0.392166252964388780, 0.392120257756296050, 0.392074261567902200, 0.392028264399323150, +0.391982266250673390, 0.391936267122068030, 0.391890267013621510, 0.391844265925449800, 0.391798263857667420, 0.391752260810389330, 0.391706256783730220, 0.391660251777805890, +0.391614245792730910, 0.391568238828620300, 0.391522230885588680, 0.391476221963751920, 0.391430212063224590, 0.391384201184121370, 0.391338189326558010, 0.391292176490649180, +0.391246162676509910, 0.391200147884254830, 0.391154132113999740, 0.391108115365859380, 0.391062097639948700, 0.391016078936382410, 0.390970059255276280, 0.390924038596745070, +0.390878016960903680, 0.390831994347866920, 0.390785970757750510, 0.390739946190669210, 0.390693920646738020, 0.390647894126071650, 0.390601866628785930, 0.390555838154995620, +0.390509808704815220, 0.390463778278360710, 0.390417746875746760, 0.390371714497088520, 0.390325681142500490, 0.390279646812098700, 0.390233611505997780, 0.390187575224312850, +0.390141537967158560, 0.390095499734650850, 0.390049460526904370, 0.390003420344034290, 0.389957379186155200, 0.389911337053383100, 0.389865293945832640, 0.389819249863618930, +0.389773204806856680, 0.389727158775661890, 0.389681111770149140, 0.389635063790433220, 0.389589014836630050, 0.389542964908854370, 0.389496914007221250, 0.389450862131845430, +0.389404809282842880, 0.389358755460328330, 0.389312700664416870, 0.389266644895223220, 0.389220588152863370, 0.389174530437452090, 0.389128471749104480, 0.389082412087935260, +0.389036351454060400, 0.388990289847594710, 0.388944227268653300, 0.388898163717350860, 0.388852099193803420, 0.388806033698125770, 0.388759967230433050, 0.388713899790839980, +0.388667831379462540, 0.388621761996415570, 0.388575691641813770, 0.388529620315773150, 0.388483548018408450, 0.388437474749834920, 0.388391400510167240, 0.388345325299521540, +0.388299249118012500, 0.388253171965755320, 0.388207093842864780, 0.388161014749456970, 0.388114934685646620, 0.388068853651548920, 0.388022771647278660, 0.387976688672951870, +0.387930604728683400, 0.387884519814588380, 0.387838433930781660, 0.387792347077379310, 0.387746259254496020, 0.387700170462246750, 0.387654080700747420, 0.387607989970112870, +0.387561898270458390, 0.387515805601898690, 0.387469711964549930, 0.387423617358526930, 0.387377521783944800, 0.387331425240918510, 0.387285327729564090, 0.387239229249996320, +0.387193129802330450, 0.387147029386681380, 0.387100928003165150, 0.387054825651896580, 0.387008722332990940, 0.386962618046563070, 0.386916512792729090, 0.386870406571603880, +0.386824299383302150, 0.386778191227940160, 0.386732082105632650, 0.386685972016494960, 0.386639860960641900, 0.386593748938189600, 0.386547635949252950, 0.386501521993947220, +0.386455407072387240, 0.386409291184689140, 0.386363174330967840, 0.386317056511338630, 0.386270937725916360, 0.386224817974817110, 0.386178697258155850, 0.386132575576047850, +0.386086452928607990, 0.386040329315952390, 0.385994204738196010, 0.385948079195453710, 0.385901952687841550, 0.385855825215474570, 0.385809696778468050, 0.385763567376936840, +0.385717437010997090, 0.385671305680763800, 0.385625173386352220, 0.385579040127877300, 0.385532905905455190, 0.385486770719200840, 0.385440634569229560, 0.385394497455656240, +0.385348359378597130, 0.385302220338167080, 0.385256080334481500, 0.385209939367655350, 0.385163797437804710, 0.385117654545044600, 0.385071510689490300, 0.385025365871256910, +0.384979220090460430, 0.384933073347215940, 0.384886925641638340, 0.384840776973843890, 0.384794627343947430, 0.384748476752064420, 0.384702325198309820, 0.384656172682799840, +0.384610019205649410, 0.384563864766973910, 0.384517709366888340, 0.384471553005508950, 0.384425395682950640, 0.384379237399328830, 0.384333078154758530, 0.384286917949355930, +0.384240756783236050, 0.384194594656514290, 0.384148431569305670, 0.384102267521726330, 0.384056102513891330, 0.384009936545915640, 0.383963769617915560, 0.383917601730006000, +0.383871432882302520, 0.383825263074919990, 0.383779092307974690, 0.383732920581581700, 0.383686747895856440, 0.383640574250913860, 0.383594399646870250, 0.383548224083840650, +0.383502047561940450, 0.383455870081284790, 0.383409691641989850, 0.383363512244170650, 0.383317331887942700, 0.383271150573420980, 0.383224968300721780, 0.383178785069960230, +0.383132600881251230, 0.383086415734711190, 0.383040229630455090, 0.382994042568598430, 0.382947854549256230, 0.382901665572544850, 0.382855475638579250, 0.382809284747475000, +0.382763092899347120, 0.382716900094311920, 0.382670706332484460, 0.382624511613980260, 0.382578315938914340, 0.382532119307403050, 0.382485921719561420, 0.382439723175505060, +0.382393523675348960, 0.382347323219209450, 0.382301121807201600, 0.382254919439441010, 0.382208716116042620, 0.382162511837122960, 0.382116306602796940, 0.382070100413179790, +0.382023893268387760, 0.381977685168536030, 0.381931476113740060, 0.381885266104115050, 0.381839055139777230, 0.381792843220841780, 0.381746630347424230, 0.381700416519639710, +0.381654201737604500, 0.381607986001433860, 0.381561769311243190, 0.381515551667147730, 0.381469333069263780, 0.381423113517706520, 0.381376893012591480, 0.381330671554033770, +0.381284449142149760, 0.381238225777054680, 0.381192001458863620, 0.381145776187692960, 0.381099549963657860, 0.381053322786873870, 0.381007094657456190, 0.380960865575521170, +0.380914635541183990, 0.380868404554560220, 0.380822172615765060, 0.380775939724914860, 0.380729705882124790, 0.380683471087510440, 0.380637235341187040, 0.380590998643270950, +0.380544760993877350, 0.380498522393121870, 0.380452282841119650, 0.380406042337987140, 0.380359800883839530, 0.380313558478792000, 0.380267315122961020, 0.380221070816461730, +0.380174825559409730, 0.380128579351920290, 0.380082332194109810, 0.380036084086093520, 0.379989835027987000, 0.379943585019905490, 0.379897334061965410, 0.379851082154281980, +0.379804829296970900, 0.379758575490147300, 0.379712320733927690, 0.379666065028427260, 0.379619808373761640, 0.379573550770046120, 0.379527292217397120, 0.379481032715929920, +0.379434772265759720, 0.379388510867002980, 0.379342248519774990, 0.379295985224191330, 0.379249720980367360, 0.379203455788419460, 0.379157189648462960, 0.379110922560613410, +0.379064654524986220, 0.379018385541697760, 0.378972115610863360, 0.378925844732598660, 0.378879572907018960, 0.378833300134240710, 0.378787026414379220, 0.378740751747550120, +0.378694476133868810, 0.378648199573451640, 0.378601922066414020, 0.378555643612871580, 0.378509364212939680, 0.378463083866734720, 0.378416802574372050, 0.378370520335966960, +0.378324237151635990, 0.378277953021494420, 0.378231667945657990, 0.378185381924241950, 0.378139094957362920, 0.378092807045136090, 0.378046518187677260, 0.378000228385101720, +0.377953937637526050, 0.377907645945065540, 0.377861353307835880, 0.377815059725952420, 0.377768765199531790, 0.377722469728689170, 0.377676173313540420, 0.377629875954200780, +0.377583577650786930, 0.377537278403414060, 0.377490978212197630, 0.377444677077254150, 0.377398374998698990, 0.377352071976647880, 0.377305768011216180, 0.377259463102520510, +0.377213157250676170, 0.377166850455798900, 0.377120542718004100, 0.377074234037408360, 0.377027924414127020, 0.376981613848275890, 0.376935302339970360, 0.376888989889326900, +0.376842676496461030, 0.376796362161488430, 0.376750046884524510, 0.376703730665685910, 0.376657413505087970, 0.376611095402846100, 0.376564776359076920, 0.376518456373895750, +0.376472135447418480, 0.376425813579760400, 0.376379490771038270, 0.376333167021367380, 0.376286842330863570, 0.376240516699642260, 0.376194190127820070, 0.376147862615512360, +0.376101534162835040, 0.376055204769903450, 0.376008874436834280, 0.375962543163742890, 0.375916210950745180, 0.375869877797956550, 0.375823543705493590, 0.375777208673471750, +0.375730872702006950, 0.375684535791214520, 0.375638197941211170, 0.375591859152112350, 0.375545519424033410, 0.375499178757091160, 0.375452837151400930, 0.375406494607078590, +0.375360151124239590, 0.375313806703000690, 0.375267461343477220, 0.375221115045785090, 0.375174767810039780, 0.375128419636357960, 0.375082070524855090, 0.375035720475647090, +0.374989369488849310, 0.374943017564578540, 0.374896664702950240, 0.374850310904080270, 0.374803956168084100, 0.374757600495078450, 0.374711243885178850, 0.374664886338500650, +0.374618527855160700, 0.374572168435274410, 0.374525808078957690, 0.374479446786326050, 0.374433084557496240, 0.374386721392583670, 0.374340357291704340, 0.374293992254973670, +0.374247626282508410, 0.374201259374424110, 0.374154891530836700, 0.374108522751861570, 0.374062153037615640, 0.374015782388214260, 0.373969410803773440, 0.373923038284408700, +0.373876664830236740, 0.373830290441373110, 0.373783915117933410, 0.373737538860034300, 0.373691161667791320, 0.373644783541320470, 0.373598404480737220, 0.373552024486158370, +0.373505643557699500, 0.373459261695476500, 0.373412878899604890, 0.373366495170201540, 0.373320110507381950, 0.373273724911262090, 0.373227338381957490, 0.373180950919584980, +0.373134562524260030, 0.373088173196098720, 0.373041782935216560, 0.372995391741730350, 0.372948999615755670, 0.372902606557408090, 0.372856212566804400, 0.372809817644060180, +0.372763421789291390, 0.372717025002613670, 0.372670627284143800, 0.372624228633997360, 0.372577829052290310, 0.372531428539138290, 0.372485027094658140, 0.372438624718965380, +0.372392221412176090, 0.372345817174405850, 0.372299412005771440, 0.372253005906388490, 0.372206598876373080, 0.372160190915840680, 0.372113782024908300, 0.372067372203691400, +0.372020961452306120, 0.371974549770868020, 0.371928137159493910, 0.371881723618299520, 0.371835309147400370, 0.371788893746913370, 0.371742477416954150, 0.371696060157638730, +0.371649641969082730, 0.371603222851403010, 0.371556802804715260, 0.371510381829135540, 0.371463959924779430, 0.371417537091763840, 0.371371113330204390, 0.371324688640217170, +0.371278263021917800, 0.371231836475423180, 0.371185409000849010, 0.371138980598311240, 0.371092551267925670, 0.371046121009809160, 0.370999689824077270, 0.370953257710845810, +0.370906824670231560, 0.370860390702350270, 0.370813955807318020, 0.370767519985250480, 0.370721083236264510, 0.370674645560475860, 0.370628206958000580, 0.370581767428954430, +0.370535326973454200, 0.370488885591615690, 0.370442443283554970, 0.370396000049387720, 0.370349555889230850, 0.370303110803200110, 0.370256664791411620, 0.370210217853981010, +0.370163769991025290, 0.370117321202660170, 0.370070871489001310, 0.370024420850165680, 0.369977969286269030, 0.369931516797427420, 0.369885063383756650, 0.369838609045373580, +0.369792153782394000, 0.369745697594934030, 0.369699240483109430, 0.369652782447037140, 0.369606323486832920, 0.369559863602612840, 0.369513402794492680, 0.369466941062589480, +0.369420478407018920, 0.369374014827897110, 0.369327550325339870, 0.369281084899464210, 0.369234618550385810, 0.369188151278220860, 0.369141683083085090, 0.369095213965095590, +0.369048743924368040, 0.369002272961018170, 0.368955801075163070, 0.368909328266918470, 0.368862854536400550, 0.368816379883725070, 0.368769904309009020, 0.368723427812368220, +0.368676950393918900, 0.368630472053776750, 0.368583992792058830, 0.368537512608880960, 0.368491031504359300, 0.368444549478609660, 0.368398066531749060, 0.368351582663893230, +0.368305097875158530, 0.368258612165660580, 0.368212125535516580, 0.368165637984842250, 0.368119149513753410, 0.368072660122367110, 0.368026169810799160, 0.367979678579165800, +0.367933186427582830, 0.367886693356167300, 0.367840199365035040, 0.367793704454302260, 0.367747208624084830, 0.367700711874499760, 0.367654214205662970, 0.367607715617690570, +0.367561216110698530, 0.367514715684803820, 0.367468214340122330, 0.367421712076770320, 0.367375208894863640, 0.367328704794519290, 0.367282199775853190, 0.367235693838981250, +0.367189186984020420, 0.367142679211086620, 0.367096170520296140, 0.367049660911764830, 0.367003150385609770, 0.366956638941946860, 0.366910126580892280, 0.366863613302562060, +0.366817099107073160, 0.366770583994541540, 0.366724067965083440, 0.366677551018814770, 0.366631033155852660, 0.366584514376312950, 0.366537994680311950, 0.366491474067965510, +0.366444952539390860, 0.366398430094703800, 0.366351906734020240, 0.366305382457457360, 0.366258857265131020, 0.366212331157157510, 0.366165804133652790, 0.366119276194733940, +0.366072747340516920, 0.366026217571118030, 0.365979686886653170, 0.365933155287239520, 0.365886622772993000, 0.365840089344029900, 0.365793555000466180, 0.365747019742418970, +0.365700483570004180, 0.365653946483338210, 0.365607408482536980, 0.365560869567717610, 0.365514329738996110, 0.365467788996488740, 0.365421247340311510, 0.365374704770581590, +0.365328161287414850, 0.365281616890927360, 0.365235071581236190, 0.365188525358457360, 0.365141978222707220, 0.365095430174101730, 0.365048881212758080, 0.365002331338792230, +0.364955780552320530, 0.364909228853458940, 0.364862676242324770, 0.364816122719033850, 0.364769568283702610, 0.364723012936447100, 0.364676456677384410, 0.364629899506630610, +0.364583341424302040, 0.364536782430514740, 0.364490222525385880, 0.364443661709031470, 0.364397099981567440, 0.364350537343111120, 0.364303973793778490, 0.364257409333685890, +0.364210843962949340, 0.364164277681686080, 0.364117710490012180, 0.364071142388043940, 0.364024573375897500, 0.363978003453690020, 0.363931432621537490, 0.363884860879556400, +0.363838288227862790, 0.363791714666573780, 0.363745140195805560, 0.363698564815674470, 0.363651988526296540, 0.363605411327789060, 0.363558833220268110, 0.363512254203849580, +0.363465674278650840, 0.363419093444787960, 0.363372511702377330, 0.363325929051534990, 0.363279345492378230, 0.363232761025023110, 0.363186175649586110, 0.363139589366183290, +0.363093002174931840, 0.363046414075947900, 0.362999825069347970, 0.362953235155248020, 0.362906644333765400, 0.362860052605016190, 0.362813459969116850, 0.362766866426183440, +0.362720271976333270, 0.362673676619682420, 0.362627080356347390, 0.362580483186444200, 0.362533885110090270, 0.362487286127401610, 0.362440686238494290, 0.362394085443485730, +0.362347483742491930, 0.362300881135629420, 0.362254277623014260, 0.362207673204763880, 0.362161067880994280, 0.362114461651822040, 0.362067854517363170, 0.362021246477735150, +0.361974637533053980, 0.361928027683436180, 0.361881416928997950, 0.361834805269856560, 0.361788192706128220, 0.361741579237929320, 0.361694964865376110, 0.361648349588585880, +0.361601733407674760, 0.361555116322758940, 0.361508498333955710, 0.361461879441381250, 0.361415259645152090, 0.361368638945384350, 0.361322017342195430, 0.361275394835701480, +0.361228771426019000, 0.361182147113264240, 0.361135521897554490, 0.361088895779005940, 0.361042268757735150, 0.360995640833858270, 0.360949012007492740, 0.360902382278754650, +0.360855751647760570, 0.360809120114626740, 0.360762487679470560, 0.360715854342408100, 0.360669220103555620, 0.360622584963030460, 0.360575948920948850, 0.360529311977427440, +0.360482674132582280, 0.360436035386530850, 0.360389395739389330, 0.360342755191274290, 0.360296113742302030, 0.360249471392589840, 0.360202828142253960, 0.360156183991411030, +0.360109538940177280, 0.360062892988670000, 0.360016246137005560, 0.359969598385300460, 0.359922949733671000, 0.359876300182234540, 0.359829649731107310, 0.359782998380405620, +0.359736346130246800, 0.359689692980747100, 0.359643038932023210, 0.359596383984191250, 0.359549728137368800, 0.359503071391671980, 0.359456413747217540, 0.359409755204121610, +0.359363095762501690, 0.359316435422474050, 0.359269774184155340, 0.359223112047661770, 0.359176449013110850, 0.359129785080618770, 0.359083120250302260, 0.359036454522277500, +0.358989787896662080, 0.358943120373572120, 0.358896451953124420, 0.358849782635435150, 0.358803112420621790, 0.358756441308800740, 0.358709769300088130, 0.358663096394601480, +0.358616422592457130, 0.358569747893771720, 0.358523072298661480, 0.358476395807244050, 0.358429718419635560, 0.358383040135952850, 0.358336360956312050, 0.358289680880830800, +0.358242999909625330, 0.358196318042812380, 0.358149635280508190, 0.358102951622830350, 0.358056267069895130, 0.358009581621819280, 0.357962895278719000, 0.357916208040711950, +0.357869519907914320, 0.357822830880442530, 0.357776140958414040, 0.357729450141945240, 0.357682758431152770, 0.357636065826152980, 0.357589372327063500, 0.357542677934000520, +0.357495982647080880, 0.357449286466420880, 0.357402589392138090, 0.357355891424348810, 0.357309192563169790, 0.357262492808717360, 0.357215792161109160, 0.357169090620461430, +0.357122388186891020, 0.357075684860514220, 0.357028980641448560, 0.356982275529810540, 0.356935569525716370, 0.356888862629283650, 0.356842154840628810, 0.356795446159868630, +0.356748736587119360, 0.356702026122498680, 0.356655314766122940, 0.356608602518108890, 0.356561889378572970, 0.356515175347632720, 0.356468460425404480, 0.356421744612005150, +0.356375027907551050, 0.356328310312159720, 0.356281591825947710, 0.356234872449031680, 0.356188152181528050, 0.356141431023554440, 0.356094708975227270, 0.356047986036663320, +0.356001262207979010, 0.355954537489291960, 0.355907811880718520, 0.355861085382375150, 0.355814357994379490, 0.355767629716847940, 0.355720900549897360, 0.355674170493644080, +0.355627439548205750, 0.355580707713698870, 0.355533974990240200, 0.355487241377946180, 0.355440506876934460, 0.355393771487321490, 0.355347035209224120, 0.355300298042758700, +0.355253559988042980, 0.355206821045193350, 0.355160081214326630, 0.355113340495559320, 0.355066598889009100, 0.355019856394792390, 0.354973113013025590, 0.354926368743826440, +0.354879623587311340, 0.354832877543597160, 0.354786130612800450, 0.354739382795038750, 0.354692634090428670, 0.354645884499086960, 0.354599134021130140, 0.354552382656675880, +0.354505630405840650, 0.354458877268741370, 0.354412123245494480, 0.354365368336217730, 0.354318612541027530, 0.354271855860040790, 0.354225098293374010, 0.354178339841144880, +0.354131580503469930, 0.354084820280465560, 0.354038059172249620, 0.353991297178938460, 0.353944534300649150, 0.353897770537497990, 0.353851005889602890, 0.353804240357080250, +0.353757473940047030, 0.353710706638619700, 0.353663938452915990, 0.353617169383052430, 0.353570399429145980, 0.353523628591313140, 0.353476856869671620, 0.353430084264337920, +0.353383310775429060, 0.353336536403061510, 0.353289761147353000, 0.353242985008420110, 0.353196207986379300, 0.353149430081348410, 0.353102651293443980, 0.353055871622782900, +0.353009091069481700, 0.352962309633658210, 0.352915527315428970, 0.352868744114910870, 0.352821960032220490, 0.352775175067475630, 0.352728389220792860, 0.352681602492289140, +0.352634814882080930, 0.352588026390286140, 0.352541237017021280, 0.352494446762403320, 0.352447655626548840, 0.352400863609575620, 0.352354070711600240, 0.352307276932739720, +0.352260482273110580, 0.352213686732830600, 0.352166890312016480, 0.352120093010784670, 0.352073294829253040, 0.352026495767538190, 0.351979695825757110, 0.351932895004026360, +0.351886093302463790, 0.351839290721185970, 0.351792487260309930, 0.351745682919952280, 0.351698877700230840, 0.351652071601262160, 0.351605264623163330, 0.351558456766050910, +0.351511648030042810, 0.351464838415255550, 0.351418027921806210, 0.351371216549811350, 0.351324404299388880, 0.351277591170655430, 0.351230777163727580, 0.351183962278723170, +0.351137146515758890, 0.351090329874951760, 0.351043512356418340, 0.350996693960276550, 0.350949874686643070, 0.350903054535634860, 0.350856233507368610, 0.350809411601962220, +0.350762588819532320, 0.350715765160195870, 0.350668940624069670, 0.350622115211271460, 0.350575288921918030, 0.350528461756126340, 0.350481633714013090, 0.350434804795696160, +0.350387975001292210, 0.350341144330917950, 0.350294312784691200, 0.350247480362728680, 0.350200647065147470, 0.350153812892064260, 0.350106977843596900, 0.350060141919862070, +0.350013305120976890, 0.349966467447058060, 0.349919628898223480, 0.349872789474589830, 0.349825949176274190, 0.349779108003393240, 0.349732265956064990, 0.349685423034406030, +0.349638579238533530, 0.349591734568564180, 0.349544889024615890, 0.349498042606805340, 0.349451195315249760, 0.349404347150065740, 0.349357498111371230, 0.349310648199283040, +0.349263797413917780, 0.349216945755393470, 0.349170093223826750, 0.349123239819334850, 0.349076385542034410, 0.349029530392043430, 0.348982674369478610, 0.348935817474457070, +0.348888959707095600, 0.348842101067512180, 0.348795241555823480, 0.348748381172146680, 0.348701519916598530, 0.348654657789296940, 0.348607794790358750, 0.348560930919901090, +0.348514066178040650, 0.348467200564895500, 0.348420334080582320, 0.348373466725217850, 0.348326598498920170, 0.348279729401806020, 0.348232859433992510, 0.348185988595596460, +0.348139116886735820, 0.348092244307527440, 0.348045370858088400, 0.347998496538535540, 0.347951621348986880, 0.347904745289559110, 0.347857868360369530, 0.347810990561534810, +0.347764111893173080, 0.347717232355401030, 0.347670351948335900, 0.347623470672094540, 0.347576588526794850, 0.347529705512553690, 0.347482821629487900, 0.347435936877715460, +0.347389051257353140, 0.347342164768518200, 0.347295277411327430, 0.347248389185898900, 0.347201500092349400, 0.347154610130796130, 0.347107719301355980, 0.347060827604146860, +0.347013935039285740, 0.346967041606889740, 0.346920147307075770, 0.346873252139961790, 0.346826356105664700, 0.346779459204301700, 0.346732561435989680, 0.346685662800846670, +0.346638763298989460, 0.346591862930534960, 0.346544961695601230, 0.346498059594305070, 0.346451156626763730, 0.346404252793094170, 0.346357348093414340, 0.346310442527841100, +0.346263536096491800, 0.346216628799483280, 0.346169720636933520, 0.346122811608959520, 0.346075901715678480, 0.346028990957207290, 0.345982079333663980, 0.345935166845165510, +0.345888253491829110, 0.345841339273771700, 0.345794424191111340, 0.345747508243964890, 0.345700591432449690, 0.345653673756682600, 0.345606755216781750, 0.345559835812863980, +0.345512915545046210, 0.345465994413446550, 0.345419072418181980, 0.345372149559369680, 0.345325225837126550, 0.345278301251570830, 0.345231375802819370, 0.345184449490989420, +0.345137522316197930, 0.345090594278563090, 0.345043665378201750, 0.344996735615231250, 0.344949804989768460, 0.344902873501931610, 0.344855941151837600, 0.344809007939603670, +0.344762073865346850, 0.344715138929185260, 0.344668203131235810, 0.344621266471615450, 0.344574328950442320, 0.344527390567833380, 0.344480451323905980, 0.344433511218777020, +0.344386570252564690, 0.344339628425385960, 0.344292685737358110, 0.344245742188598160, 0.344198797779224300, 0.344151852509353370, 0.344104906379102900, 0.344057959388589680, +0.344011011537932010, 0.343964062827246790, 0.343917113256651420, 0.343870162826262870, 0.343823211536199320, 0.343776259386577740, 0.343729306377515090, 0.343682352509129600, +0.343635397781538230, 0.343588442194858350, 0.343541485749206950, 0.343494528444702240, 0.343447570281461220, 0.343400611259601310, 0.343353651379239400, 0.343306690640493850, +0.343259729043481510, 0.343212766588319840, 0.343165803275125860, 0.343118839104017800, 0.343071874075112640, 0.343024908188527820, 0.342977941444380260, 0.342930973842788310, +0.342884005383868870, 0.342837036067739460, 0.342790065894517050, 0.342743094864319860, 0.342696122977264930, 0.342649150233469310, 0.342602176633051200, 0.342555202176127670, +0.342508226862816120, 0.342461250693233630, 0.342414273667498380, 0.342367295785727440, 0.342320317048038280, 0.342273337454547910, 0.342226357005374630, 0.342179375700635450, +0.342132393540447830, 0.342085410524928800, 0.342038426654196650, 0.341991441928368440, 0.341944456347561650, 0.341897469911893290, 0.341850482621481650, 0.341803494476443810, +0.341756505476896840, 0.341709515622959040, 0.341662524914747410, 0.341615533352379490, 0.341568540935972280, 0.341521547665644190, 0.341474553541512180, 0.341427558563693830, +0.341380562732306160, 0.341333566047467450, 0.341286568509294900, 0.341239570117905900, 0.341192570873417530, 0.341145570775948200, 0.341098569825614870, 0.341051568022535170, +0.341004565366826160, 0.340957561858606100, 0.340910557497992150, 0.340863552285101400, 0.340816546220052140, 0.340769539302961550, 0.340722531533947160, 0.340675522913125970, +0.340628513440616400, 0.340581503116535570, 0.340534491941000940, 0.340487479914129700, 0.340440467036040140, 0.340393453306849450, 0.340346438726675080, 0.340299423295634230, +0.340252407013845240, 0.340205389881425240, 0.340158371898491740, 0.340111353065161880, 0.340064333381554120, 0.340017312847785470, 0.339970291463973120, 0.339923269230235470, +0.339876246146689650, 0.339829222213453240, 0.339782197430643310, 0.339735171798378370, 0.339688145316775440, 0.339641117985952150, 0.339594089806025680, 0.339547060777114380, +0.339500030899335450, 0.339453000172806440, 0.339405968597644490, 0.339358936173968060, 0.339311902901894280, 0.339264868781540720, 0.339217833813024620, 0.339170797996464320, +0.339123761331977020, 0.339076723819680290, 0.339029685459691420, 0.338982646252128710, 0.338935606197109330, 0.338888565294750590, 0.338841523545170830, 0.338794480948487240, +0.338747437504817510, 0.338700393214278690, 0.338653348076989320, 0.338606302093066640, 0.338559255262628140, 0.338512207585791150, 0.338465159062673990, 0.338418109693393980, +0.338371059478068670, 0.338324008416815310, 0.338276956509752310, 0.338229903756996960, 0.338182850158666840, 0.338135795714879170, 0.338088740425752430, 0.338041684291403850, +0.337994627311950680, 0.337947569487511310, 0.337900510818202990, 0.337853451304143460, 0.337806390945449840, 0.337759329742240650, 0.337712267694633140, 0.337665204802744980, +0.337618141066693410, 0.337571076486596900, 0.337524011062572680, 0.337476944794738390, 0.337429877683211370, 0.337382809728110080, 0.337335740929551760, 0.337288671287654050, +0.337241600802534290, 0.337194529474310940, 0.337147457303101250, 0.337100384289022500, 0.337053310432193220, 0.337006235732730700, 0.336959160190752500, 0.336912083806376050, +0.336865006579719790, 0.336817928510901030, 0.336770849600037450, 0.336723769847246280, 0.336676689252646160, 0.336629607816354260, 0.336582525538488390, 0.336535442419165780, +0.336488358458504940, 0.336441273656623240, 0.336394188013638350, 0.336347101529667570, 0.336300014204829470, 0.336252926039241340, 0.336205837033020870, 0.336158747186285410, +0.336111656499153480, 0.336064564971742420, 0.336017472604169530, 0.335970379396553390, 0.335923285349011280, 0.335876190461660950, 0.335829094734619750, 0.335781998168006190, +0.335734900761937680, 0.335687802516531910, 0.335640703431906220, 0.335593603508179130, 0.335546502745468100, 0.335499401143890820, 0.335452298703564580, 0.335405195424608000, +0.335358091307138450, 0.335310986351273710, 0.335263880557131020, 0.335216773924829070, 0.335169666454485200, 0.335122558146216780, 0.335075449000142300, 0.335028339016379240, +0.334981228195045390, 0.334934116536257990, 0.334887004040135720, 0.334839890706795930, 0.334792776536356420, 0.334745661528934530, 0.334698545684648960, 0.334651429003617000, +0.334604311485956480, 0.334557193131784720, 0.334510073941220450, 0.334462953914380970, 0.334415833051384110, 0.334368711352347250, 0.334321588817388990, 0.334274465446626810, +0.334227341240178000, 0.334180216198161300, 0.334133090320694050, 0.334085963607894050, 0.334038836059878770, 0.333991707676766780, 0.333944578458675530, 0.333897448405722830, +0.333850317518026130, 0.333803185795704000, 0.333756053238873920, 0.333708919847653720, 0.333661785622160810, 0.333614650562513830, 0.333567514668830220, 0.333520377941227850, +0.333473240379824120, 0.333426101984737710, 0.333378962756086030, 0.333331822693986920, 0.333284681798557860, 0.333237540069917510, 0.333190397508183300, 0.333143254113472680, +0.333096109885904380, 0.333048964825595760, 0.333001818932664730, 0.332954672207228800, 0.332907524649406540, 0.332860376259315470, 0.332813227037073500, 0.332766076982798030, +0.332718926096607750, 0.332671774378620170, 0.332624621828953190, 0.332577468447724180, 0.332530314235051970, 0.332483159191053980, 0.332436003315848050, 0.332388846609551700, +0.332341689072283670, 0.332294530704161430, 0.332247371505302420, 0.332200211475825400, 0.332153050615847820, 0.332105888925487650, 0.332058726404862340, 0.332011563054090630, +0.331964398873290050, 0.331917233862578430, 0.331870068022073310, 0.331822901351893460, 0.331775733852156310, 0.331728565522979860, 0.331681396364481570, 0.331634226376780250, +0.331587055559993290, 0.331539883914238720, 0.331492711439634050, 0.331445538136298010, 0.331398364004348080, 0.331351189043901870, 0.331304013255078080, 0.331256836637994270, +0.331209659192768400, 0.331162480919517890, 0.331115301818361680, 0.331068121889417140, 0.331020941132802340, 0.330973759548634730, 0.330926577137033220, 0.330879393898115160, +0.330832209831998680, 0.330785024938801240, 0.330737839218641690, 0.330690652671637500, 0.330643465297906720, 0.330596277097566840, 0.330549088070736630, 0.330501898217533780, +0.330454707538075710, 0.330407516032481310, 0.330360323700868150, 0.330313130543354150, 0.330265936560056930, 0.330218741751095220, 0.330171546116586720, 0.330124349656649330, +0.330077152371400670, 0.330029954260959550, 0.329982755325443520, 0.329935555564970620, 0.329888354979658400, 0.329841153569625680, 0.329793951334990120, 0.329746748275869690, +0.329699544392381970, 0.329652339684645750, 0.329605134152778760, 0.329557927796898850, 0.329510720617123780, 0.329463512613572260, 0.329416303786362000, 0.329369094135610550, +0.329321883661436830, 0.329274672363958350, 0.329227460243293190, 0.329180247299558970, 0.329133033532874540, 0.329085818943357530, 0.329038603531126020, 0.328991387296297510, +0.328944170238991030, 0.328896952359324040, 0.328849733657414710, 0.328802514133380630, 0.328755293787340700, 0.328708072619412480, 0.328660850629714120, 0.328613627818363230, +0.328566404185478670, 0.328519179731178060, 0.328471954455579140, 0.328424728358800710, 0.328377501440960510, 0.328330273702176540, 0.328283045142566450, 0.328235815762249140, +0.328188585561342340, 0.328141354539964070, 0.328094122698231960, 0.328046890036264970, 0.327999656554180790, 0.327952422252097480, 0.327905187130132610, 0.327857951188405270, +0.327810714427033020, 0.327763476846133990, 0.327716238445825870, 0.327668999226227550, 0.327621759187456730, 0.327574518329631080, 0.327527276652869630, 0.327480034157289880, +0.327432790843010140, 0.327385546710147970, 0.327338301758822340, 0.327291055989150930, 0.327243809401251920, 0.327196561995242940, 0.327149313771243010, 0.327102064729369760, +0.327054814869741360, 0.327007564192475510, 0.326960312697691160, 0.326913060385506050, 0.326865807256038250, 0.326818553309405570, 0.326771298545726900, 0.326724042965119980, +0.326676786567702940, 0.326629529353593520, 0.326582271322910680, 0.326535012475772210, 0.326487752812295750, 0.326440492332600360, 0.326393231036803730, 0.326345968925023990, +0.326298705997378920, 0.326251442253987500, 0.326204177694967510, 0.326156912320437090, 0.326109646130513910, 0.326062379125317050, 0.326015111304964240, 0.325967842669573680, +0.325920573219263100, 0.325873302954151460, 0.325826031874356600, 0.325778759979996610, 0.325731487271189390, 0.325684213748053790, 0.325636939410707700, 0.325589664259268830, +0.325542388293856230, 0.325495111514587600, 0.325447833921581280, 0.325400555514954890, 0.325353276294827580, 0.325305996261317010, 0.325258715414541540, 0.325211433754618810, +0.325164151281667920, 0.325116867995806640, 0.325069583897153180, 0.325022298985825410, 0.324975013261942220, 0.324927726725621590, 0.324880439376981580, 0.324833151216140040, +0.324785862243216090, 0.324738572458327490, 0.324691281861592020, 0.324643990453128750, 0.324596698233055480, 0.324549405201490500, 0.324502111358551610, 0.324454816704357830, +0.324407521239027000, 0.324360224962677410, 0.324312927875426820, 0.324265629977394280, 0.324218331268697700, 0.324171031749455330, 0.324123731419784900, 0.324076430279805590, +0.324029128329635210, 0.323981825569392030, 0.323934521999193810, 0.323887217619159780, 0.323839912429407630, 0.323792606430055310, 0.323745299621221890, 0.323697992003025240, +0.323650683575583580, 0.323603374339014820, 0.323556064293438030, 0.323508753438971060, 0.323461441775732270, 0.323414129303839390, 0.323366816023411660, 0.323319501934566820, +0.323272187037423280, 0.323224871332098870, 0.323177554818712630, 0.323130237497382570, 0.323082919368226860, 0.323035600431363480, 0.322988280686911490, 0.322940960134988850, +0.322893638775713750, 0.322846316609204150, 0.322798993635579180, 0.322751669854956740, 0.322704345267454670, 0.322657019873192170, 0.322609693672287150, 0.322562366664857880, +0.322515038851022280, 0.322467710230899480, 0.322420380804607390, 0.322373050572264400, 0.322325719533988360, 0.322278387689898420, 0.322231055040112510, 0.322183721584748950, +0.322136387323925690, 0.322089052257761850, 0.322041716386375410, 0.321994379709884650, 0.321947042228407590, 0.321899703942063240, 0.321852364850969740, 0.321805024955244820, +0.321757684255007780, 0.321710342750376580, 0.321663000441469450, 0.321615657328404470, 0.321568313411300710, 0.321520968690276190, 0.321473623165449250, 0.321426276836937810, +0.321378929704861150, 0.321331581769337130, 0.321284233030484150, 0.321236883488420170, 0.321189533143264430, 0.321142181995134830, 0.321094830044149740, 0.321047477290427210, +0.321000123734086370, 0.320952769375245250, 0.320905414214021800, 0.320858058250535210, 0.320810701484903480, 0.320763343917244980, 0.320715985547677720, 0.320668626376320930, +0.320621266403292530, 0.320573905628711020, 0.320526544052694260, 0.320479181675361600, 0.320431818496831000, 0.320384454517220860, 0.320337089736649090, 0.320289724155235100, +0.320242357773096790, 0.320194990590352560, 0.320147622607120430, 0.320100253823519640, 0.320052884239668270, 0.320005513855684650, 0.319958142671686820, 0.319910770687794110, +0.319863397904124440, 0.319816024320795810, 0.319768649937927580, 0.319721274755637720, 0.319673898774044730, 0.319626521993266470, 0.319579144413422390, 0.319531766034630460, +0.319484386857009080, 0.319437006880676330, 0.319389626105751500, 0.319342244532352550, 0.319294862160598050, 0.319247478990605900, 0.319200095022495520, 0.319152710256384920, +0.319105324692392560, 0.319057938330636390, 0.319010551171235830, 0.318963163214308950, 0.318915774459973660, 0.318868384908349400, 0.318820994559554150, 0.318773603413706470, +0.318726211470924280, 0.318678818731327030, 0.318631425195032740, 0.318584030862159860, 0.318536635732826480, 0.318489239807151990, 0.318441843085254360, 0.318394445567252100, +0.318347047253263350, 0.318299648143407330, 0.318252248237802240, 0.318204847536566530, 0.318157446039818330, 0.318110043747676870, 0.318062640660260300, 0.318015236777686730, +0.317967832100075450, 0.317920426627544660, 0.317873020360212750, 0.317825613298197860, 0.317778205441619390, 0.317730796790595400, 0.317683387345244430, 0.317635977105684530, +0.317588566072035170, 0.317541154244414370, 0.317493741622940640, 0.317446328207732160, 0.317398913998908290, 0.317351498996587160, 0.317304083200887270, 0.317256666611926750, +0.317209249229824960, 0.317161831054700080, 0.317114412086670180, 0.317066992325854670, 0.317019571772371670, 0.316972150426339750, 0.316924728287877040, 0.316877305357102900, +0.316829881634135560, 0.316782457119093470, 0.316735031812094840, 0.316687605713259050, 0.316640178822704230, 0.316592751140548970, 0.316545322666911380, 0.316497893401910920, +0.316450463345665730, 0.316403032498294430, 0.316355600859915100, 0.316308168430647190, 0.316260735210608820, 0.316213301199918640, 0.316165866398694760, 0.316118430807056710, +0.316070994425122490, 0.316023557253010400, 0.315976119290839850, 0.315928680538729020, 0.315881240996796490, 0.315833800665160370, 0.315786359543940240, 0.315738917633254180, +0.315691474933220810, 0.315644031443958360, 0.315596587165586250, 0.315549142098222660, 0.315501696241986210, 0.315454249596995140, 0.315406802163368800, 0.315359353941225500, +0.315311904930683840, 0.315264455131861960, 0.315217004544879330, 0.315169553169854230, 0.315122101006904850, 0.315074648056150600, 0.315027194317709760, 0.314979739791700910, +0.314932284478242290, 0.314884828377453410, 0.314837371489452400, 0.314789913814358000, 0.314742455352288400, 0.314694996103363040, 0.314647536067700240, 0.314600075245418610, +0.314552613636636340, 0.314505151241472940, 0.314457688060046700, 0.314410224092476210, 0.314362759338879750, 0.314315293799376840, 0.314267827474085660, 0.314220360363124510, +0.314172892466612840, 0.314125423784669010, 0.314077954317411530, 0.314030484064958810, 0.313983013027430310, 0.313935541204944210, 0.313888068597619310, 0.313840595205573840, +0.313793121028927260, 0.313745646067797870, 0.313698170322304400, 0.313650693792565050, 0.313603216478699430, 0.313555738380825730, 0.313508259499062690, 0.313460779833528600, +0.313413299384342980, 0.313365818151624060, 0.313318336135490650, 0.313270853336060970, 0.313223369753454550, 0.313175885387789730, 0.313128400239184810, 0.313080914307759250, +0.313033427593631450, 0.312985940096920050, 0.312938451817743380, 0.312890962756221020, 0.312843472912471220, 0.312795982286612760, 0.312748490878763940, 0.312700998689044330, +0.312653505717572170, 0.312606011964466250, 0.312558517429844920, 0.312511022113827700, 0.312463526016532930, 0.312416029138079310, 0.312368531478585230, 0.312321033038170210, +0.312273533816952660, 0.312226033815050820, 0.312178533032584300, 0.312131031469671470, 0.312083529126431060, 0.312036026002981410, 0.311988522099442110, 0.311941017415931550, +0.311893511952568370, 0.311846005709471020, 0.311798498686759130, 0.311750990884550940, 0.311703482302965240, 0.311655972942120440, 0.311608462802136170, 0.311560951883130710, +0.311513440185222870, 0.311465927708531040, 0.311418414453174750, 0.311370900419272460, 0.311323385606942500, 0.311275870016304520, 0.311228353647476810, 0.311180836500578260, +0.311133318575727180, 0.311085799873043240, 0.311038280392644750, 0.310990760134650600, 0.310943239099179150, 0.310895717286350020, 0.310848194696281550, 0.310800671329092610, +0.310753147184901600, 0.310705622263828140, 0.310658096565990580, 0.310610570091507830, 0.310563042840498180, 0.310515514813081370, 0.310467986009375810, 0.310420456429499840, +0.310372926073573140, 0.310325394941714130, 0.310277863034041590, 0.310230330350674040, 0.310182796891731060, 0.310135262657331050, 0.310087727647592960, 0.310040191862635090, +0.309992655302577140, 0.309945117967537600, 0.309897579857635220, 0.309850040972988460, 0.309802501313717060, 0.309754960879939370, 0.309707419671774340, 0.309659877689340280, +0.309612334932756970, 0.309564791402142820, 0.309517247097616690, 0.309469702019297020, 0.309422156167303510, 0.309374609541754660, 0.309327062142768780, 0.309279513970465710, +0.309231965024963860, 0.309184415306382130, 0.309136864814838870, 0.309089313550453940, 0.309041761513345670, 0.308994208703633030, 0.308946655121434430, 0.308899100766869610, +0.308851545640057010, 0.308803989741115610, 0.308756433070163760, 0.308708875627321300, 0.308661317412706640, 0.308613758426438680, 0.308566198668635880, 0.308518638139417990, +0.308471076838903570, 0.308423514767210970, 0.308375951924460050, 0.308328388310769250, 0.308280823926257440, 0.308233258771043180, 0.308185692845246220, 0.308138126148984950, +0.308090558682378450, 0.308042990445545060, 0.307995421438604640, 0.307947851661675710, 0.307900281114877110, 0.307852709798327410, 0.307805137712146290, 0.307757564856452390, +0.307709991231364550, 0.307662416837001350, 0.307614841673482520, 0.307567265740926580, 0.307519689039452040, 0.307472111569178700, 0.307424533330225070, 0.307376954322710120, +0.307329374546752350, 0.307281794002471580, 0.307234212689986350, 0.307186630609415530, 0.307139047760877750, 0.307091464144492790, 0.307043879760379110, 0.306996294608655800, +0.306948708689441300, 0.306901122002855460, 0.306853534549016820, 0.306805946328044310, 0.306758357340056520, 0.306710767585173290, 0.306663177063513090, 0.306615585775194990, +0.306567993720337490, 0.306520400899060460, 0.306472807311482350, 0.306425212957721850, 0.306377617837898740, 0.306330021952131600, 0.306282425300539400, 0.306234827883240690, +0.306187229700355330, 0.306139630752001960, 0.306092031038299460, 0.306044430559366420, 0.305996829315322790, 0.305949227306287100, 0.305901624532378290, 0.305854020993715000, +0.305806416690417140, 0.305758811622603150, 0.305711205790392180, 0.305663599193902790, 0.305615991833254770, 0.305568383708566820, 0.305520774819957490, 0.305473165167546630, +0.305425554751452830, 0.305377943571795210, 0.305330331628692280, 0.305282718922263880, 0.305235105452628770, 0.305187491219905850, 0.305139876224213790, 0.305092260465672450, +0.305044643944400510, 0.304997026660516920, 0.304949408614140330, 0.304901789805390620, 0.304854170234386490, 0.304806549901246950, 0.304758928806090570, 0.304711306949037250, +0.304663684330205740, 0.304616060949714550, 0.304568436807683640, 0.304520811904231690, 0.304473186239477670, 0.304425559813540250, 0.304377932626539340, 0.304330304678593620, +0.304282675969822170, 0.304235046500343550, 0.304187416270277790, 0.304139785279743450, 0.304092153528859650, 0.304044521017745040, 0.303996887746519560, 0.303949253715301900, +0.303901618924211080, 0.303853983373365780, 0.303806347062885900, 0.303758709992890230, 0.303711072163497300, 0.303663433574827170, 0.303615794226998410, 0.303568154120130160, +0.303520513254341150, 0.303472871629751280, 0.303425229246479190, 0.303377586104644050, 0.303329942204364490, 0.303282297545760530, 0.303234652128950840, 0.303187005954054460, +0.303139359021190210, 0.303091711330477960, 0.303044062882036450, 0.302996413675984730, 0.302948763712441560, 0.302901112991526940, 0.302853461513359570, 0.302805809278058450, +0.302758156285742490, 0.302710502536531480, 0.302662848030544220, 0.302615192767899440, 0.302567536748717110, 0.302519879973115910, 0.302472222441215080, 0.302424564153133180, +0.302376905108990350, 0.302329245308905260, 0.302281584752997050, 0.302233923441384390, 0.302186261374187410, 0.302138598551524750, 0.302090934973515630, 0.302043270640278750, +0.301995605551934050, 0.301947939708600400, 0.301900273110396910, 0.301852605757442270, 0.301804937649856550, 0.301757268787758490, 0.301709599171266830, 0.301661928800501580, +0.301614257675581530, 0.301566585796625870, 0.301518913163753290, 0.301471239777083840, 0.301423565636736280, 0.301375890742829830, 0.301328215095483240, 0.301280538694816520, +0.301232861540948470, 0.301185183633998210, 0.301137504974084650, 0.301089825561327680, 0.301042145395846170, 0.300994464477759290, 0.300946782807185840, 0.300899100384245890, +0.300851417209058110, 0.300803733281741430, 0.300756048602415840, 0.300708363171200090, 0.300660676988213470, 0.300612990053574670, 0.300565302367403860, 0.300517613929819790, +0.300469924740941700, 0.300422234800888370, 0.300374544109779870, 0.300326852667735010, 0.300279160474873020, 0.300231467531312750, 0.300183773837174150, 0.300136079392576140, +0.300088384197637950, 0.300040688252478370, 0.299992991557217540, 0.299945294111974180, 0.299897595916867600, 0.299849896972016580, 0.299802197277541260, 0.299754496833560480, +0.299706795640192980, 0.299659093697558940, 0.299611391005777160, 0.299563687564966930, 0.299515983375246990, 0.299468278436737570, 0.299420572749557470, 0.299372866313825870, +0.299325159129661730, 0.299277451197185130, 0.299229742516514850, 0.299182033087770250, 0.299134322911070170, 0.299086611986534630, 0.299038900314282650, 0.298991187894433350, +0.298943474727105700, 0.298895760812419750, 0.298848046150494430, 0.298800330741448570, 0.298752614585402250, 0.298704897682474440, 0.298657180032784410, 0.298609461636450970, +0.298561742493594300, 0.298514022604333300, 0.298466301968787210, 0.298418580587074990, 0.298370858459316710, 0.298323135585631280, 0.298275411966137990, 0.298227687600955800, +0.298179962490204790, 0.298132236634003840, 0.298084510032472330, 0.298036782685729140, 0.297989054593894410, 0.297941325757087040, 0.297893596175425880, 0.297845865849031220, +0.297798134778021860, 0.297750402962517200, 0.297702670402636090, 0.297654937098498720, 0.297607203050223980, 0.297559468257931280, 0.297511732721739470, 0.297463996441768740, +0.297416259418138040, 0.297368521650966670, 0.297320783140373580, 0.297273043886478960, 0.297225303889401770, 0.297177563149261250, 0.297129821666176460, 0.297082079440267490, +0.297034336471653340, 0.296986592760452920, 0.296938848306786460, 0.296891103110772880, 0.296843357172531520, 0.296795610492181340, 0.296747863069842580, 0.296700114905634140, +0.296652365999675430, 0.296604616352085400, 0.296556865962984200, 0.296509114832490870, 0.296461362960724780, 0.296413610347804830, 0.296365856993851260, 0.296318102898983080, +0.296270348063319590, 0.296222592486979850, 0.296174836170084050, 0.296127079112751160, 0.296079321315100560, 0.296031562777251230, 0.295983803499323460, 0.295936043481436150, +0.295888282723708320, 0.295840521226260200, 0.295792758989210760, 0.295744996012679400, 0.295697232296785180, 0.295649467841648310, 0.295601702647387720, 0.295553936714122890, +0.295506170041972830, 0.295458402631057710, 0.295410634481496630, 0.295362865593408960, 0.295315095966913690, 0.295267325602131090, 0.295219554499180190, 0.295171782658180390, +0.295124010079250760, 0.295076236762511490, 0.295028462708081640, 0.294980687916080180, 0.294932912386627440, 0.294885136119842410, 0.294837359115844580, 0.294789581374752920, +0.294741802896687670, 0.294694023681768000, 0.294646243730113220, 0.294598463041842400, 0.294550681617075870, 0.294502899455932610, 0.294455116558532130, 0.294407332924993440, +0.294359548555436780, 0.294311763449981330, 0.294263977608746400, 0.294216191031851150, 0.294168403719415830, 0.294120615671559500, 0.294072826888401250, 0.294025037370061300, +0.293977247116658790, 0.293929456128313120, 0.293881664405143410, 0.293833871947270010, 0.293786078754811890, 0.293738284827888550, 0.293690490166619080, 0.293642694771123810, +0.293594898641521830, 0.293547101777932580, 0.293499304180475150, 0.293451505849269930, 0.293403706784435890, 0.293355906986092600, 0.293308106454359120, 0.293260305189355810, +0.293212503191201730, 0.293164700460016410, 0.293116896995918860, 0.293069092799029540, 0.293021287869467460, 0.292973482207351750, 0.292925675812802770, 0.292877868685939620, +0.292830060826881730, 0.292782252235748330, 0.292734442912659710, 0.292686632857734940, 0.292638822071093650, 0.292591010552854860, 0.292543198303138910, 0.292495385322065040, +0.292447571609752650, 0.292399757166320940, 0.292351941991890300, 0.292304126086579740, 0.292256309450508900, 0.292208492083796840, 0.292160673986563980, 0.292112855158929430, +0.292065035601012320, 0.292017215312933060, 0.291969394294810720, 0.291921572546764980, 0.291873750068914810, 0.291825926861380700, 0.291778102924281800, 0.291730278257737620, +0.291682452861867340, 0.291634626736791300, 0.291586799882628760, 0.291538972299499210, 0.291491143987521790, 0.291443314946816910, 0.291395485177503800, 0.291347654679701920, +0.291299823453530500, 0.291251991499109960, 0.291204158816559420, 0.291156325405998060, 0.291108491267546340, 0.291060656401323340, 0.291012820807448720, 0.290964984486041690, +0.290917147437222520, 0.290869309661110520, 0.290821471157825310, 0.290773631927485900, 0.290725791970212870, 0.290677951286125390, 0.290630109875342990, 0.290582267737984960, +0.290534424874171580, 0.290486581284022220, 0.290438736967656370, 0.290390891925193300, 0.290343046156753380, 0.290295199662455820, 0.290247352442419890, 0.290199504496765960, +0.290151655825613310, 0.290103806429081510, 0.290055956307289750, 0.290008105460358550, 0.289960253888407070, 0.289912401591554960, 0.289864548569921440, 0.289816694823626930, +0.289768840352790710, 0.289720985157532360, 0.289673129237971170, 0.289625272594227550, 0.289577415226420780, 0.289529557134670430, 0.289481698319095810, 0.289433838779817320, +0.289385978516954250, 0.289338117530626270, 0.289290255820952520, 0.289242393388053580, 0.289194530232048660, 0.289146666353056970, 0.289098801751199060, 0.289050936426594130, +0.289003070379361900, 0.288955203609621510, 0.288907336117493590, 0.288859467903097300, 0.288811598966552340, 0.288763729307977950, 0.288715858927494680, 0.288667987825221740, +0.288620116001278850, 0.288572243455785250, 0.288524370188861460, 0.288476496200626710, 0.288428621491200800, 0.288380746060702850, 0.288332869909253440, 0.288284993036971910, +0.288237115443977450, 0.288189237130390630, 0.288141358096330740, 0.288093478341917400, 0.288045597867269960, 0.287997716672508950, 0.287949834757753650, 0.287901952123123810, +0.287854068768738590, 0.287806184694718690, 0.287758299901183290, 0.287710414388252180, 0.287662528156044540, 0.287614641204681050, 0.287566753534280960, 0.287518865144963940, +0.287470976036849400, 0.287423086210057800, 0.287375195664708480, 0.287327304400920800, 0.287279412418815220, 0.287231519718511130, 0.287183626300128280, 0.287135732163785910, +0.287087837309604630, 0.287039941737703750, 0.286992045448203000, 0.286944148441221740, 0.286896250716880570, 0.286848352275298700, 0.286800453116596020, 0.286752553240891720, +0.286704652648306470, 0.286656751338959630, 0.286608849312970870, 0.286560946570459610, 0.286513043111546350, 0.286465138936350510, 0.286417234044991860, 0.286369328437589670, +0.286321422114264530, 0.286273515075135880, 0.286225607320323040, 0.286177698849946590, 0.286129789664125890, 0.286081879762980720, 0.286033969146630430, 0.285986057815195590, +0.285938145768795670, 0.285890233007550400, 0.285842319531579070, 0.285794405341002370, 0.285746490435939690, 0.285698574816510730, 0.285650658482834940, 0.285602741435032950, +0.285554823673224100, 0.285506905197528190, 0.285458986008064570, 0.285411066104953930, 0.285363145488315590, 0.285315224158268990, 0.285267302114934780, 0.285219379358432280, +0.285171455888881320, 0.285123531706401310, 0.285075606811112940, 0.285027681203135490, 0.284979754882588860, 0.284931827849592420, 0.284883900104266840, 0.284835971646731520, +0.284788042477106260, 0.284740112595510460, 0.284692182002064810, 0.284644250696888700, 0.284596318680101930, 0.284548385951823970, 0.284500452512175480, 0.284452518361275890, +0.284404583499244520, 0.284356647926202130, 0.284308711642268120, 0.284260774647562390, 0.284212836942204230, 0.284164898526314440, 0.284116959400012360, 0.284069019563417900, +0.284021079016650470, 0.283973137759830800, 0.283925195793078230, 0.283877253116512740, 0.283829309730253610, 0.283781365634421690, 0.283733420829136330, 0.283685475314517430, +0.283637529090684400, 0.283589582157757980, 0.283541634515857620, 0.283493686165102730, 0.283445737105614050, 0.283397787337511090, 0.283349836860913580, 0.283301885675941060, +0.283253933782714300, 0.283205981181352650, 0.283158027871976080, 0.283110073854704050, 0.283062119129657170, 0.283014163696955090, 0.282966207556717530, 0.282918250709064070, +0.282870293154115380, 0.282822334891990930, 0.282774375922810680, 0.282726416246694090, 0.282678455863761830, 0.282630494774133490, 0.282582532977928850, 0.282534570475267530, +0.282486607266270120, 0.282438643351056230, 0.282390678729745330, 0.282342713402458150, 0.282294747369314150, 0.282246780630433350, 0.282198813185935090, 0.282150845035940290, +0.282102876180568340, 0.282054906619939210, 0.282006936354172400, 0.281958965383388660, 0.281910993707707500, 0.281863021327248890, 0.281815048242132270, 0.281767074452478450, +0.281719099958406990, 0.281671124760037750, 0.281623148857490240, 0.281575172250885350, 0.281527194940342450, 0.281479216925981210, 0.281431238207922320, 0.281383258786285340, +0.281335278661190240, 0.281287297832756470, 0.281239316301104880, 0.281191334066355050, 0.281143351128626820, 0.281095367488039870, 0.281047383144714840, 0.280999398098771390, +0.280951412350329440, 0.280903425899508560, 0.280855438746429540, 0.280807450891211900, 0.280759462333975640, 0.280711473074840290, 0.280663483113926690, 0.280615492451354360, +0.280567501087242930, 0.280519509021713130, 0.280471516254884530, 0.280423522786877210, 0.280375528617810620, 0.280327533747805610, 0.280279538176981810, 0.280231541905459130, +0.280183544933357230, 0.280135547260796810, 0.280087548887897550, 0.280039549814779460, 0.279991550041562070, 0.279943549568366150, 0.279895548395311440, 0.279847546522517810, +0.279799543950104920, 0.279751540678193580, 0.279703536706903400, 0.279655532036354350, 0.279607526666666050, 0.279559520597959410, 0.279511513830353890, 0.279463506363969220, +0.279415498198926190, 0.279367489335344390, 0.279319479773343930, 0.279271469513044270, 0.279223458554566430, 0.279175446898029870, 0.279127434543554760, 0.279079421491260640, +0.279031407741268330, 0.278983393293697530, 0.278935378148668260, 0.278887362306300120, 0.278839345766713990, 0.278791328530029470, 0.278743310596366700, 0.278695291965845190, +0.278647272638585850, 0.278599252614708360, 0.278551231894332290, 0.278503210477578590, 0.278455188364566840, 0.278407165555417110, 0.278359142050249090, 0.278311117849183610, +0.278263092952340310, 0.278215067359839310, 0.278167041071800240, 0.278119014088343940, 0.278070986409590160, 0.278022958035658850, 0.277974928966669750, 0.277926899202743770, +0.277878868744000530, 0.277830837590560100, 0.277782805742542220, 0.277734773200067670, 0.277686739963256210, 0.277638706032227510, 0.277590671407102420, 0.277542636088000670, +0.277494600075042340, 0.277446563368347050, 0.277398525968035830, 0.277350487874228280, 0.277302449087044490, 0.277254409606604140, 0.277206369433028230, 0.277158328566436410, +0.277110287006948730, 0.277062244754684880, 0.277014201809765880, 0.276966158172311410, 0.276918113842441470, 0.276870068820275870, 0.276822023105935510, 0.276773976699540130, +0.276725929601209790, 0.276677881811064170, 0.276629833329224250, 0.276581784155809810, 0.276533734290940470, 0.276485683734737200, 0.276437632487319730, 0.276389580548808190, +0.276341527919322260, 0.276293474598982900, 0.276245420587909910, 0.276197365886223340, 0.276149310494042950, 0.276101254411489690, 0.276053197638683300, 0.276005140175743900, +0.275957082022791230, 0.275909023179946310, 0.275860963647328820, 0.275812903425058930, 0.275764842513256340, 0.275716780912042050, 0.275668718621535860, 0.275620655641857390, +0.275572591973127780, 0.275524527615466640, 0.275476462568994160, 0.275428396833830140, 0.275380330410095520, 0.275332263297910110, 0.275284195497394020, 0.275236127008667010, +0.275188057831850130, 0.275139987967063070, 0.275091917414426070, 0.275043846174058860, 0.274995774246082400, 0.274947701630616600, 0.274899628327781480, 0.274851554337696870, +0.274803479660483800, 0.274755404296262050, 0.274707328245151370, 0.274659251507272770, 0.274611174082746050, 0.274563095971691370, 0.274515017174228550, 0.274466937690478640, +0.274418857520561330, 0.274370776664596920, 0.274322695122705130, 0.274274612895007040, 0.274226529981622390, 0.274178446382671410, 0.274130362098273910, 0.274082277128550930, +0.274034191473622290, 0.273986105133608100, 0.273938018108628280, 0.273889930398803830, 0.273841842004254540, 0.273793752925100220, 0.273745663161461930, 0.273697572713459510, +0.273649481581213110, 0.273601389764842660, 0.273553297264469090, 0.273505204080212340, 0.273457110212192540, 0.273409015660529500, 0.273360920425344430, 0.273312824506756980, +0.273264727904887540, 0.273216630619855790, 0.273168532651782920, 0.273120434000788730, 0.273072334666993490, 0.273024234650516890, 0.272976133951480240, 0.272928032570003140, +0.272879930506206070, 0.272831827760208650, 0.272783724332132160, 0.272735620222096350, 0.272687515430221020, 0.272639409956627330, 0.272591303801435150, 0.272543196964764700, +0.272495089446735840, 0.272446981247469690, 0.272398872367086040, 0.272350762805705250, 0.272302652563447100, 0.272254541640432780, 0.272206430036782080, 0.272158317752615340, +0.272110204788052310, 0.272062091143214280, 0.272013976818220930, 0.271965861813192710, 0.271917746128249370, 0.271869629763512140, 0.271821512719100770, 0.271773394995135250, +0.271725276591736620, 0.271677157509024820, 0.271629037747120160, 0.271580917306142420, 0.271532796186212840, 0.271484674387451270, 0.271436551909978010, 0.271388428753912950, +0.271340304919377270, 0.271292180406490780, 0.271244055215373870, 0.271195929346146390, 0.271147802798929530, 0.271099675573843120, 0.271051547671007530, 0.271003419090542650, +0.270955289832569670, 0.270907159897208480, 0.270859029284578890, 0.270810897994802240, 0.270762766027998310, 0.270714633384287420, 0.270666500063789560, 0.270618366066625870, +0.270570231392916300, 0.270522096042781100, 0.270473960016340280, 0.270425823313714950, 0.270377685935025090, 0.270329547880390990, 0.270281409149932590, 0.270233269743771150, +0.270185129662026460, 0.270136988904819020, 0.270088847472268630, 0.270040705364496540, 0.269992562581622740, 0.269944419123767490, 0.269896274991050730, 0.269848130183593770, +0.269799984701516500, 0.269751838544938780, 0.269703691713981950, 0.269655544208765860, 0.269607396029410920, 0.269559247176037020, 0.269511097648765460, 0.269462947447716210, +0.269414796573009540, 0.269366645024765430, 0.269318492803105160, 0.269270339908148640, 0.269222186340016320, 0.269174032098828060, 0.269125877184705150, 0.269077721597767550, +0.269029565338135660, 0.268981408405929430, 0.268933250801270120, 0.268885092524277670, 0.268836933575072050, 0.268788773953774540, 0.268740613660505060, 0.268692452695384050, +0.268644291058531490, 0.268596128750068660, 0.268547965770115530, 0.268499802118792430, 0.268451637796219390, 0.268403472802517700, 0.268355307137807360, 0.268307140802208690, +0.268258973795841790, 0.268210806118827860, 0.268162637771286960, 0.268114468753339390, 0.268066299065105260, 0.268018128706705830, 0.267969957678261040, 0.267921785979890970, +0.267873613611716850, 0.267825440573858650, 0.267777266866436940, 0.267729092489571550, 0.267680917443383900, 0.267632741727993950, 0.267584565343522150, 0.267536388290088470, +0.267488210567814300, 0.267440032176819550, 0.267391853117224740, 0.267343673389149880, 0.267295492992716270, 0.267247311928043910, 0.267199130195253320, 0.267150947794464410, +0.267102764725798580, 0.267054580989375840, 0.267006396585316220, 0.266958211513741050, 0.266910025774770350, 0.266861839368524590, 0.266813652295123770, 0.266765464554689300, +0.266717276147341140, 0.266669087073199750, 0.266620897332385250, 0.266572706925018940, 0.266524515851220890, 0.266476324111111500, 0.266428131704810890, 0.266379938632440420, +0.266331744894120040, 0.266283550489970320, 0.266235355420111290, 0.266187159684664330, 0.266138963283749420, 0.266090766217487170, 0.266042568485997500, 0.265994370089401910, +0.265946171027820370, 0.265897971301372940, 0.265849770910181030, 0.265801569854364710, 0.265753368134044430, 0.265705165749340330, 0.265656962700373760, 0.265608758987264770, +0.265560554610133840, 0.265512349569101140, 0.265464143864287960, 0.265415937495814490, 0.265367730463801130, 0.265319522768368010, 0.265271314409636530, 0.265223105387726700, +0.265174895702759210, 0.265126685354853950, 0.265078474344132450, 0.265030262670714780, 0.264982050334721050, 0.264933837336272570, 0.264885623675489510, 0.264837409352492390, +0.264789194367401340, 0.264740978720337690, 0.264692762411421640, 0.264644545440773650, 0.264596327808513890, 0.264548109514763760, 0.264499890559643290, 0.264451670943273150, +0.264403450665773370, 0.264355229727265440, 0.264307008127869390, 0.264258785867705850, 0.264210562946894880, 0.264162339365557940, 0.264114115123815160, 0.264065890221786670, +0.264017664659593920, 0.263969438437356930, 0.263921211555196380, 0.263872984013232390, 0.263824755811586380, 0.263776526950378450, 0.263728297429729200, 0.263680067249758790, +0.263631836410588630, 0.263583604912338900, 0.263535372755130120, 0.263487139939082520, 0.263438906464317450, 0.263390672330955140, 0.263342437539116180, 0.263294202088920680, +0.263245965980490100, 0.263197729213944580, 0.263149491789404780, 0.263101253706990780, 0.263053014966824090, 0.263004775569024910, 0.262956535513713290, 0.262908294801010800, +0.262860053431037580, 0.262811811403914190, 0.262763568719760860, 0.262715325378699070, 0.262667081380848930, 0.262618836726331070, 0.262570591415265730, 0.262522345447774310, +0.262474098823977040, 0.262425851543994500, 0.262377603607946930, 0.262329355015955780, 0.262281105768141230, 0.262232855864623970, 0.262184605305524070, 0.262136354090963140, +0.262088102221061270, 0.262039849695938740, 0.261991596515717020, 0.261943342680516330, 0.261895088190457260, 0.261846833045660030, 0.261798577246246170, 0.261750320792335840, +0.261702063684049690, 0.261653805921508000, 0.261605547504832230, 0.261557288434142550, 0.261509028709559670, 0.261460768331203800, 0.261412507299196410, 0.261364245613657790, +0.261315983274708510, 0.261267720282468860, 0.261219456637060370, 0.261171192338603200, 0.261122927387217650, 0.261074661783025190, 0.261026395526146040, 0.260978128616700940, +0.260929861054810090, 0.260881592840595030, 0.260833323974175970, 0.260785054455673630, 0.260736784285208190, 0.260688513462901230, 0.260640241988872980, 0.260591969863244120, +0.260543697086134950, 0.260495423657666920, 0.260447149577960340, 0.260398874847135920, 0.260350599465313800, 0.260302323432615720, 0.260254046749161750, 0.260205769415072290, +0.260157491430468790, 0.260109212795471560, 0.260060933510201320, 0.260012653574778320, 0.259964372989324120, 0.259916091753958970, 0.259867809868803590, 0.259819527333978280, +0.259771244149604560, 0.259722960315802720, 0.259674675832693490, 0.259626390700397170, 0.259578104919035270, 0.259529818488728140, 0.259481531409596400, 0.259433243681760460, +0.259384955305341840, 0.259336666280460810, 0.259288376607238080, 0.259240086285794040, 0.259191795316250200, 0.259143503698726850, 0.259095211433344350, 0.259046918520224210, +0.258998624959486780, 0.258950330751252790, 0.258902035895642530, 0.258853740392777640, 0.258805444242778400, 0.258757147445765560, 0.258708850001859390, 0.258660551911181540, +0.258612253173852280, 0.258563953789992420, 0.258515653759722240, 0.258467353083163380, 0.258419051760436110, 0.258370749791661190, 0.258322447176959010, 0.258274143916451150, +0.258225840010257890, 0.258177535458499590, 0.258129230261297920, 0.258080924418773170, 0.258032617931046090, 0.257984310798237030, 0.257936003020467650, 0.257887694597858210, +0.257839385530529600, 0.257791075818602060, 0.257742765462197270, 0.257694454461435570, 0.257646142816437720, 0.257597830527324100, 0.257549517594216350, 0.257501204017234750, +0.257452889796500160, 0.257404574932132920, 0.257356259424254720, 0.257307943272985840, 0.257259626478446630, 0.257211309040758840, 0.257162990960042750, 0.257114672236419210, +0.257066352870008510, 0.257018032860932390, 0.256969712209311200, 0.256921390915265670, 0.256873068978916320, 0.256824746400384660, 0.256776423179791160, 0.256728099317256600, +0.256679774812901380, 0.256631449666847140, 0.256583123879214230, 0.256534797450123590, 0.256486470379695460, 0.256438142668051650, 0.256389814315312440, 0.256341485321598670, +0.256293155687030820, 0.256244825411730440, 0.256196494495818050, 0.256148162939414000, 0.256099830742639920, 0.256051497905616320, 0.256003164428463940, 0.255954830311303230, +0.255906495554255880, 0.255858160157442280, 0.255809824120983300, 0.255761487444999270, 0.255713150129611990, 0.255664812174941860, 0.255616473581109670, 0.255568134348235890, +0.255519794476442190, 0.255471453965849030, 0.255423112816577200, 0.255374771028747170, 0.255326428602480620, 0.255278085537898050, 0.255229741835119760, 0.255181397494267600, +0.255133052515461920, 0.255084706898823680, 0.255036360644473160, 0.254988013752532220, 0.254939666223121200, 0.254891318056361060, 0.254842969252372150, 0.254794619811276270, +0.254746269733193860, 0.254697919018245730, 0.254649567666552390, 0.254601215678235570, 0.254552863053415730, 0.254504509792213730, 0.254456155894750010, 0.254407801361146320, +0.254359446191523120, 0.254311090386000920, 0.254262733944701390, 0.254214376867745010, 0.254166019155252720, 0.254117660807344940, 0.254069301824143450, 0.254020942205768650, +0.253972581952341570, 0.253924221063982550, 0.253875859540813430, 0.253827497382954680, 0.253779134590527140, 0.253730771163651390, 0.253682407102449100, 0.253634042407040850, +0.253585677077547420, 0.253537311114089390, 0.253488944516788550, 0.253440577285765300, 0.253392209421140210, 0.253343840923035020, 0.253295471791570190, 0.253247102026866730, +0.253198731629045050, 0.253150360598226990, 0.253101988934533060, 0.253053616638084120, 0.253005243709000680, 0.252956870147404640, 0.252908495953416360, 0.252860121127156830, +0.252811745668746650, 0.252763369578307470, 0.252714992855959890, 0.252666615501824790, 0.252618237516022750, 0.252569858898675560, 0.252521479649903680, 0.252473099769828120, +0.252424719258569410, 0.252376338116249320, 0.252327956342988380, 0.252279573938907100, 0.252231190904127320, 0.252182807238769570, 0.252134422942954790, 0.252086038016803570, +0.252037652460437630, 0.251989266273977610, 0.251940879457544400, 0.251892492011258520, 0.251844103935241930, 0.251795715229615020, 0.251747325894498830, 0.251698935930013860, +0.251650545336282060, 0.251602154113423850, 0.251553762261560230, 0.251505369780811780, 0.251456976671300400, 0.251408582933146500, 0.251360188566470740, 0.251311793571394990, +0.251263397948039700, 0.251215001696525940, 0.251166604816974230, 0.251118207309506460, 0.251069809174243150, 0.251021410411305320, 0.250973011020813540, 0.250924611002889650, +0.250876210357654230, 0.250827809085228280, 0.250779407185732440, 0.250731004659288440, 0.250682601506016960, 0.250634197726038950, 0.250585793319475060, 0.250537388286447060, +0.250488982627075640, 0.250440576341481310, 0.250392169429785980, 0.250343761892110220, 0.250295353728575090, 0.250246944939301110, 0.250198535524410180, 0.250150125484022930, +0.250101714818260380, 0.250053303527243090, 0.250004891611092960, 0.249956479069930650, 0.249908065903877120, 0.249859652113053000, 0.249811237697580150, 0.249762822657579240, +0.249714406993171270, 0.249665990704476840, 0.249617573791617860, 0.249569156254714960, 0.249520738093889170, 0.249472319309261090, 0.249423899900952650, 0.249375479869084450, +0.249327059213777120, 0.249278637935152590, 0.249230216033331450, 0.249181793508434780, 0.249133370360583200, 0.249084946589898630, 0.249036522196501660, 0.248988097180513430, +0.248939671542054490, 0.248891245281246810, 0.248842818398211040, 0.248794390893068210, 0.248745962765938940, 0.248697534016945220, 0.248649104646207680, 0.248600674653847360, +0.248552244039984940, 0.248503812804742320, 0.248455380948240180, 0.248406948470599160, 0.248358515371941200, 0.248310081652386940, 0.248261647312057470, 0.248213212351073460, +0.248164776769556870, 0.248116340567628320, 0.248067903745408910, 0.248019466303019330, 0.247971028240581510, 0.247922589558216110, 0.247874150256044230, 0.247825710334186540, +0.247777269792765040, 0.247728828631900350, 0.247680386851713560, 0.247631944452325420, 0.247583501433857820, 0.247535057796431480, 0.247486613540167040, 0.247438168665186530, +0.247389723171610560, 0.247341277059560330, 0.247292830329156440, 0.247244382980520930, 0.247195935013774430, 0.247147486429038110, 0.247099037226432640, 0.247050587406080020, +0.247002136968100920, 0.246953685912616490, 0.246905234239747420, 0.246856781949615660, 0.246808329042341980, 0.246759875518047460, 0.246711421376852810, 0.246662966618880070, +0.246614511244249910, 0.246566055253083010, 0.246517598645501430, 0.246469141421625850, 0.246420683581577400, 0.246372225125476820, 0.246323766053446110, 0.246275306365605990, +0.246226846062077590, 0.246178385142981650, 0.246129923608440190, 0.246081461458573900, 0.246032998693503980, 0.245984535313351130, 0.245936071318237360, 0.245887606708283410, +0.245839141483610440, 0.245790675644339210, 0.245742209190591700, 0.245693742122488650, 0.245645274440151270, 0.245596806143700270, 0.245548337233257700, 0.245499867708944270, +0.245451397570880750, 0.245402926819189150, 0.245354455453990260, 0.245305983475405220, 0.245257510883554770, 0.245209037678561000, 0.245160563860544630, 0.245112089429626840, +0.245063614385928390, 0.245015138729571340, 0.244966662460676470, 0.244918185579364930, 0.244869708085757480, 0.244821229979976180, 0.244772751262141850, 0.244724271932375610, +0.244675791990798280, 0.244627311437531890, 0.244578830272697200, 0.244530348496415030, 0.244481866108807400, 0.244433383109995130, 0.244384899500099400, 0.244336415279240960, +0.244287930447541930, 0.244239445005123100, 0.244190958952105630, 0.244142472288610330, 0.244093985014759290, 0.244045497130673280, 0.243997008636473530, 0.243948519532280830, +0.243900029818217260, 0.243851539494403640, 0.243803048560961130, 0.243754557018010580, 0.243706064865674090, 0.243657572104072410, 0.243609078733326380, 0.243560584753558100, +0.243512090164888340, 0.243463594967438360, 0.243415099161328970, 0.243366602746682230, 0.243318105723619030, 0.243269608092260530, 0.243221109852727600, 0.243172611005142310, +0.243124111549625520, 0.243075611486298420, 0.243027110815281860, 0.242978609536697980, 0.242930107650667550, 0.242881605157311890, 0.242833102056751740, 0.242784598349109290, +0.242736094034505360, 0.242687589113061150, 0.242639083584897580, 0.242590577450136710, 0.242542070708899380, 0.242493563361306480, 0.242445055407480100, 0.242396546847541060, +0.242348037681610650, 0.242299527909809710, 0.242251017532260420, 0.242202506549083570, 0.242153994960400440, 0.242105482766331900, 0.242056969967000070, 0.242008456562525840, +0.241959942553030440, 0.241911427938634790, 0.241862912719460980, 0.241814396895629890, 0.241765880467262800, 0.241717363434480580, 0.241668845797405380, 0.241620327556158090, +0.241571808710859540, 0.241523289261631880, 0.241474769208596010, 0.241426248551873220, 0.241377727291584350, 0.241329205427851630, 0.241280682960795880, 0.241232159890538420, +0.241183636217200150, 0.241135111940903200, 0.241086587061768500, 0.241038061579917310, 0.240989535495470530, 0.240941008808550320, 0.240892481519277640, 0.240843953627773720, +0.240795425134159500, 0.240746896038557150, 0.240698366341087540, 0.240649836041871600, 0.240601305141031510, 0.240552773638688130, 0.240504241534962830, 0.240455708829976520, +0.240407175523851320, 0.240358641616708220, 0.240310107108668510, 0.240261571999853100, 0.240213036290384180, 0.240164499980382670, 0.240115963069969930, 0.240067425559266830, +0.240018887448395610, 0.239970348737477160, 0.239921809426632850, 0.239873269515983560, 0.239824729005651550, 0.239776187895757720, 0.239727646186423000, 0.239679103877769580, +0.239630560969918390, 0.239582017462990820, 0.239533473357107760, 0.239484928652391430, 0.239436383348962810, 0.239387837446943220, 0.239339290946453620, 0.239290743847616200, +0.239242196150551920, 0.239193647855382160, 0.239145098962227850, 0.239096549471211230, 0.239047999382453250, 0.238999448696075260, 0.238950897412198190, 0.238902345530944330, +0.238853793052434590, 0.238805239976790400, 0.238756686304132660, 0.238708132034583630, 0.238659577168264280, 0.238611021705295550, 0.238562465645799690, 0.238513908989897690, +0.238465351737710880, 0.238416793889360300, 0.238368235444968160, 0.238319676404655400, 0.238271116768543480, 0.238222556536753340, 0.238173995709407200, 0.238125434286626110, +0.238076872268531410, 0.238028309655244130, 0.237979746446886460, 0.237931182643579460, 0.237882618245444520, 0.237834053252602570, 0.237785487665175900, 0.237736921483285540, +0.237688354707052460, 0.237639787336598910, 0.237591219372045890, 0.237542650813514810, 0.237494081661126680, 0.237445511915003790, 0.237396941575267110, 0.237348370642038060, +0.237299799115437670, 0.237251226995588200, 0.237202654282610700, 0.237154080976626520, 0.237105507077756740, 0.237056932586123590, 0.237008357501848150, 0.236959781825051790, +0.236911205555855540, 0.236862628694381710, 0.236814051240751330, 0.236765473195085370, 0.236716894557506160, 0.236668315328134730, 0.236619735507092480, 0.236571155094500500, +0.236522574090481020, 0.236473992495155130, 0.236425410308644250, 0.236376827531069420, 0.236328244162552960, 0.236279660203215890, 0.236231075653179660, 0.236182490512565320, +0.236133904781495180, 0.236085318460090260, 0.236036731548472050, 0.235988144046761610, 0.235939555955081200, 0.235890967273551940, 0.235842378002295240, 0.235793788141432150, +0.235745197691085040, 0.235696606651374930, 0.235648015022422890, 0.235599422804351230, 0.235550829997281000, 0.235502236601333710, 0.235453642616630380, 0.235405048043293400, +0.235356452881443800, 0.235307857131203060, 0.235259260792692220, 0.235210663866033680, 0.235162066351348480, 0.235113468248758120, 0.235064869558383650, 0.235016270280347470, +0.234967670414770570, 0.234919069961774530, 0.234870468921480360, 0.234821867294010440, 0.234773265079485870, 0.234724662278027710, 0.234676058889758320, 0.234627454914798780, +0.234578850353270580, 0.234530245205294860, 0.234481639470993960, 0.234433033150488940, 0.234384426243901350, 0.234335818751352260, 0.234287210672964040, 0.234238602008857790, +0.234189992759155060, 0.234141382923976900, 0.234092772503445730, 0.234044161497682620, 0.233995549906809100, 0.233946937730946300, 0.233898324970216560, 0.233849711624741020, +0.233801097694640750, 0.233752483180038190, 0.233703868081054420, 0.233655252397810960, 0.233606636130428950, 0.233558019279030800, 0.233509401843737590, 0.233460783824670860, +0.233412165221951740, 0.233363546035702670, 0.233314926266044690, 0.233266305913099440, 0.233217684976987970, 0.233169063457832700, 0.233120441355754800, 0.233071818670875790, +0.233023195403316810, 0.232974571553200250, 0.232925947120647290, 0.232877322105779020, 0.232828696508717880, 0.232780070329584980, 0.232731443568501920, 0.232682816225589810, +0.232634188300971100, 0.232585559794766920, 0.232536930707098830, 0.232488301038087990, 0.232439670787856820, 0.232391039956526490, 0.232342408544218530, 0.232293776551054150, +0.232245143977155730, 0.232196510822644480, 0.232147877087641950, 0.232099242772269290, 0.232050607876648940, 0.232001972400902090, 0.231953336345150310, 0.231904699709514740, +0.231856062494117860, 0.231807424699080830, 0.231758786324524790, 0.231710147370572240, 0.231661507837344290, 0.231612867724962620, 0.231564227033548310, 0.231515585763223870, +0.231466943914110460, 0.231418301486329720, 0.231369658480002770, 0.231321014895252110, 0.231272370732198920, 0.231223725990964770, 0.231175080671670920, 0.231126434774439780, +0.231077788299392540, 0.231029141246650860, 0.230980493616335880, 0.230931845408570090, 0.230883196623474670, 0.230834547261170860, 0.230785897321781120, 0.230737246805426620, +0.230688595712228990, 0.230639944042309450, 0.230591291795790490, 0.230542638972793280, 0.230493985573439500, 0.230445331597850300, 0.230396677046148220, 0.230348021918454440, +0.230299366214890610, 0.230250709935577920, 0.230202053080638900, 0.230153395650194740, 0.230104737644367120, 0.230056079063277190, 0.230007419907047510, 0.229958760175799280, +0.229910099869653690, 0.229861438988733320, 0.229812777533159320, 0.229764115503053400, 0.229715452898536760, 0.229666789719731900, 0.229618125966760090, 0.229569461639742960, +0.229520796738801710, 0.229472131264058940, 0.229423465215635840, 0.229374798593654060, 0.229326131398234850, 0.229277463629500770, 0.229228795287573010, 0.229180126372573260, +0.229131456884622780, 0.229082786823844060, 0.229034116190358410, 0.228985444984287440, 0.228936773205752430, 0.228888100854875930, 0.228839427931779170, 0.228790754436583420, +0.228742080369411180, 0.228693405730383770, 0.228644730519622860, 0.228596054737249670, 0.228547378383386760, 0.228498701458155430, 0.228450023961677350, 0.228401345894073770, +0.228352667255467240, 0.228303988045979070, 0.228255308265730930, 0.228206627914844060, 0.228157946993441080, 0.228109265501643200, 0.228060583439572200, 0.228011900807349260, +0.227963217605097020, 0.227914533832936750, 0.227865849490989700, 0.227817164579378480, 0.227768479098224340, 0.227719793047648970, 0.227671106427773720, 0.227622419238721120, +0.227573731480612500, 0.227525043153569530, 0.227476354257713510, 0.227427664793167030, 0.227378974760051420, 0.227330284158488350, 0.227281592988599150, 0.227232901250506410, +0.227184208944331390, 0.227135516070195860, 0.227086822628221110, 0.227038128618529730, 0.226989434041243030, 0.226940738896482310, 0.226892043184370170, 0.226843346905027940, +0.226794650058577350, 0.226745952645139690, 0.226697254664837560, 0.226648556117792330, 0.226599857004125690, 0.226551157323958970, 0.226502457077414790, 0.226453756264614480, +0.226405054885679770, 0.226356352940732000, 0.226307650429893760, 0.226258947353286420, 0.226210243711031680, 0.226161539503250940, 0.226112834730066740, 0.226064129391600480, +0.226015423487973460, 0.225966717019308320, 0.225918009985726390, 0.225869302387349420, 0.225820594224298760, 0.225771885496697050, 0.225723176204665640, 0.225674466348326270, +0.225625755927800320, 0.225577044943210400, 0.225528333394677870, 0.225479621282324520, 0.225430908606271680, 0.225382195366642000, 0.225333481563556810, 0.225284767197137940, +0.225236052267506700, 0.225187336774785780, 0.225138620719096520, 0.225089904100560710, 0.225041186919299700, 0.224992469175436140, 0.224943750869091410, 0.224895032000386880, +0.224846312569445210, 0.224797592576387760, 0.224748872021336310, 0.224700150904412250, 0.224651429225738270, 0.224602706985435690, 0.224553984183626380, 0.224505260820431650, +0.224456536895974200, 0.224407812410375410, 0.224359087363757060, 0.224310361756240610, 0.224261635587948650, 0.224212908859002640, 0.224164181569524330, 0.224115453719635120, +0.224066725309457730, 0.224017996339113540, 0.223969266808723890, 0.223920536718411530, 0.223871806068297850, 0.223823074858504610, 0.223774343089153280, 0.223725610760366510, +0.223676877872265730, 0.223628144424972720, 0.223579410418608960, 0.223530675853297080, 0.223481940729158500, 0.223433205046315090, 0.223384468804888240, 0.223335732005000650, +0.223286994646773710, 0.223238256730329290, 0.223189518255788810, 0.223140779223274970, 0.223092039632909160, 0.223043299484812830, 0.222994558779108680, 0.222945817515918130, +0.222897075695363040, 0.222848333317564820, 0.222799590382646210, 0.222750846890728630, 0.222702102841933920, 0.222653358236383550, 0.222604613074200180, 0.222555867355505280, +0.222507121080420730, 0.222458374249067950, 0.222409626861569650, 0.222360878918047290, 0.222312130418622720, 0.222263381363417420, 0.222214631752554070, 0.222165881586154160, +0.222117130864339540, 0.222068379587231630, 0.222019627754953240, 0.221970875367625780, 0.221922122425370680, 0.221873368928310720, 0.221824614876567350, 0.221775860270262410, +0.221727105109517430, 0.221678349394455080, 0.221629593125196890, 0.221580836301864700, 0.221532078924579990, 0.221483320993465520, 0.221434562508642710, 0.221385803470233540, +0.221337043878359400, 0.221288283733143100, 0.221239523034706090, 0.221190761783170260, 0.221141999978657110, 0.221093237621289380, 0.221044474711188570, 0.220995711248476140, +0.220946947233274850, 0.220898182665706180, 0.220849417545892070, 0.220800651873954010, 0.220751885650014720, 0.220703118874195720, 0.220654351546618940, 0.220605583667405820, +0.220556815236679190, 0.220508046254560520, 0.220459276721171740, 0.220410506636634330, 0.220361736001071090, 0.220312964814603520, 0.220264193077353510, 0.220215420789442620, +0.220166647950993580, 0.220117874562127950, 0.220069100622967170, 0.220020326133634090, 0.219971551094250180, 0.219922775504937410, 0.219873999365817250, 0.219825222677012540, +0.219776445438644770, 0.219727667650835870, 0.219678889313707380, 0.219630110427382120, 0.219581330991981540, 0.219532551007627670, 0.219483770474441980, 0.219434989392547300, +0.219386207762065130, 0.219337425583117470, 0.219288642855825780, 0.219239859580312950, 0.219191075756700440, 0.219142291385110270, 0.219093506465663920, 0.219044720998484240, +0.218995934983692740, 0.218947148421411000, 0.218898361311761800, 0.218849573654866710, 0.218800785450847690, 0.218751996699826260, 0.218703207401925280, 0.218654417557266280, +0.218605627165971230, 0.218556836228161690, 0.218508044743960460, 0.218459252713489150, 0.218410460136869710, 0.218361667014223690, 0.218312873345673920, 0.218264079131341960, +0.218215284371349820, 0.218166489065819040, 0.218117693214872450, 0.218068896818631650, 0.218020099877218150, 0.217971302390754850, 0.217922504359363280, 0.217873705783165480, +0.217824906662282940, 0.217776106996838610, 0.217727306786953980, 0.217678506032751100, 0.217629704734351500, 0.217580902891878090, 0.217532100505452440, 0.217483297575196490, +0.217434494101231920, 0.217385690083681500, 0.217336885522666890, 0.217288080418310050, 0.217239274770732570, 0.217190468580057330, 0.217141661846405960, 0.217092854569899960, +0.217044046750662270, 0.216995238388814460, 0.216946429484478560, 0.216897620037776160, 0.216848810048830140, 0.216799999517762080, 0.216751188444694040, 0.216702376829747580, +0.216653564673045640, 0.216604751974709740, 0.216555938734862010, 0.216507124953623980, 0.216458310631118560, 0.216409495767467370, 0.216360680362792430, 0.216311864417215390, +0.216263047930859100, 0.216214230903845170, 0.216165413336295270, 0.216116595228332240, 0.216067776580077730, 0.216018957391653780, 0.215970137663182020, 0.215921317394785320, +0.215872496586585360, 0.215823675238704130, 0.215774853351263280, 0.215726030924385750, 0.215677207958193120, 0.215628384452807490, 0.215579560408350470, 0.215530735824944950, +0.215481910702712610, 0.215433085041775500, 0.215384258842255230, 0.215335432104274750, 0.215286604827955700, 0.215237777013420150, 0.215188948660789690, 0.215140119770187320, +0.215091290341734630, 0.215042460375553270, 0.214993629871766230, 0.214944798830495080, 0.214895967251861970, 0.214847135135988490, 0.214798302482997610, 0.214749469293010950, +0.214700635566150650, 0.214651801302538300, 0.214602966502296900, 0.214554131165548080, 0.214505295292413940, 0.214456458883016090, 0.214407621937477560, 0.214358784455919970, +0.214309946438465430, 0.214261107885235590, 0.214212268796353380, 0.214163429171940530, 0.214114589012118660, 0.214065748317010750, 0.214016907086738480, 0.213968065321423960, +0.213919223021188790, 0.213870380186156030, 0.213821536816447330, 0.213772692912184760, 0.213723848473490050, 0.213675003500486150, 0.213626157993294740, 0.213577311952037910, +0.213528465376837400, 0.213479618267816140, 0.213430770625095830, 0.213381922448798610, 0.213333073739046140, 0.213284224495961410, 0.213235374719666140, 0.213186524410281990, +0.213137673567931950, 0.213088822192737750, 0.213039970284821490, 0.212991117844304860, 0.212942264871310880, 0.212893411365961240, 0.212844557328378060, 0.212795702758683060, +0.212746847656999220, 0.212697992023448270, 0.212649135858152370, 0.212600279161233170, 0.212551421932813710, 0.212502564173015690, 0.212453705881961250, 0.212404847059772140, +0.212355987706571330, 0.212307127822480540, 0.212258267407621940, 0.212209406462117250, 0.212160544986089470, 0.212111682979660320, 0.212062820442951520, 0.212013957376086140, +0.211965093779185820, 0.211916229652372810, 0.211867364995768750, 0.211818499809496740, 0.211769634093678470, 0.211720767848436130, 0.211671901073891420, 0.211623033770167390, +0.211574165937385790, 0.211525297575668760, 0.211476428685138080, 0.211427559265916720, 0.211378689318126480, 0.211329818841889530, 0.211280947837327590, 0.211232076304563730, +0.211183204243719640, 0.211134331654917130, 0.211085458538279230, 0.211036584893927680, 0.210987710721984660, 0.210938836022571930, 0.210889960795812570, 0.210841085041828270, +0.210792208760741280, 0.210743331952673340, 0.210694454617747500, 0.210645576756085500, 0.210596698367809590, 0.210547819453041460, 0.210498940011904250, 0.210450060044519690, +0.210401179551009950, 0.210352298531496870, 0.210303416986103440, 0.210254534914951500, 0.210205652318162770, 0.210156769195860320, 0.210107885548165980, 0.210059001375201920, +0.210010116677089940, 0.209961231453953070, 0.209912345705913130, 0.209863459433092340, 0.209814572635612460, 0.209765685313596570, 0.209716797467166480, 0.209667909096444390, +0.209619020201552100, 0.209570130782612690, 0.209521240839747960, 0.209472350373080120, 0.209423459382730990, 0.209374567868823610, 0.209325675831479850, 0.209276783270821440, +0.209227890186971490, 0.209178996580051850, 0.209130102450184710, 0.209081207797491870, 0.209032312622096460, 0.208983416924120260, 0.208934520703685510, 0.208885623960914010, +0.208836726695928930, 0.208787828908852000, 0.208738930599805500, 0.208690031768911240, 0.208641132416292340, 0.208592232542070600, 0.208543332146368300, 0.208494431229307220, +0.208445529791010500, 0.208396627831599960, 0.208347725351197830, 0.208298822349925970, 0.208249918827907500, 0.208201014785264200, 0.208152110222117960, 0.208103205138591870, +0.208054299534807750, 0.208005393410887920, 0.207956486766954140, 0.207907579603129580, 0.207858671919536080, 0.207809763716295890, 0.207760854993530860, 0.207711945751364150, +0.207663035989917530, 0.207614125709313370, 0.207565214909673420, 0.207516303591120890, 0.207467391753777600, 0.207418479397765840, 0.207369566523207430, 0.207320653130225550, +0.207271739218942010, 0.207222824789478700, 0.207173909841958770, 0.207124994376504080, 0.207076078393236880, 0.207027161892279070, 0.206978244873753770, 0.206929327337782850, +0.206880409284488640, 0.206831490713992950, 0.206782571626419000, 0.206733652021888590, 0.206684731900524050, 0.206635811262447260, 0.206586890107781390, 0.206537968436648260, +0.206489046249170250, 0.206440123545469150, 0.206391200325668180, 0.206342276589889240, 0.206293352338254160, 0.206244427570886120, 0.206195502287907010, 0.206146576489439150, +0.206097650175604440, 0.206048723346526020, 0.205999796002325790, 0.205950868143126050, 0.205901939769048750, 0.205853010880216990, 0.205804081476752720, 0.205755151558778240, +0.205706221126415480, 0.205657290179787570, 0.205608358719016450, 0.205559426744224420, 0.205510494255533390, 0.205461561253066580, 0.205412627736945850, 0.205363693707293540, +0.205314759164231590, 0.205265824107883130, 0.205216888538370140, 0.205167952455814510, 0.205119015860339430, 0.205070078752066790, 0.205021141131118940, 0.204972202997617840, +0.204923264351686650, 0.204874325193447280, 0.204825385523022120, 0.204776445340533080, 0.204727504646103340, 0.204678563439854830, 0.204629621721909930, 0.204580679492390530, +0.204531736751419860, 0.204482793499119850, 0.204433849735612880, 0.204384905461020810, 0.204335960675466940, 0.204287015379073180, 0.204238069571961420, 0.204189123254254920, +0.204140176426075630, 0.204091229087545900, 0.204042281238787650, 0.203993332879924130, 0.203944384011077280, 0.203895434632369480, 0.203846484743922640, 0.203797534345860040, +0.203748583438303600, 0.203699632021375700, 0.203650680095198290, 0.203601727659894620, 0.203552774715586610, 0.203503821262396690, 0.203454867300446760, 0.203405912829860090, +0.203356957850758660, 0.203308002363264410, 0.203259046367500560, 0.203210089863589100, 0.203161132851652440, 0.203112175331812470, 0.203063217304192520, 0.203014258768914550, +0.202965299726100920, 0.202916340175873590, 0.202867380118355840, 0.202818419553669670, 0.202769458481937420, 0.202720496903281090, 0.202671534817823960, 0.202622572225688020, +0.202573609126995620, 0.202524645521868770, 0.202475681410430740, 0.202426716792803500, 0.202377751669109040, 0.202328786039470660, 0.202279819904010280, 0.202230853262850370, +0.202181886116112870, 0.202132918463921120, 0.202083950306397030, 0.202034981643663100, 0.201986012475841280, 0.201937042803054860, 0.201888072625425820, 0.201839101943076610, +0.201790130756129230, 0.201741159064706910, 0.201692186868931730, 0.201643214168926080, 0.201594240964811930, 0.201545267256712650, 0.201496293044750200, 0.201447318329047000, +0.201398343109725070, 0.201349367386907700, 0.201300391160716930, 0.201251414431274760, 0.201202437198704480, 0.201153459463128100, 0.201104481224668090, 0.201055502483446420, +0.201006523239586450, 0.200957543493210160, 0.200908563244440010, 0.200859582493398030, 0.200810601240207500, 0.200761619484990490, 0.200712637227869420, 0.200663654468966330, +0.200614671208404540, 0.200565687446306070, 0.200516703182793380, 0.200467718417988490, 0.200418733152014750, 0.200369747384994160, 0.200320761117048800, 0.200271774348301960, +0.200222787078875670, 0.200173799308892430, 0.200124811038474240, 0.200075822267744450, 0.200026832996825110, 0.199977843225838700, 0.199928852954907250, 0.199879862184154100, +0.199830870913701280, 0.199781879143671290, 0.199732886874186170, 0.199683894105369270, 0.199634900837342640, 0.199585907070228750, 0.199536912804149650, 0.199487918039228720, +0.199438922775588000, 0.199389927013349510, 0.199340930752636650, 0.199291933993571480, 0.199242936736276440, 0.199193938980873650, 0.199144940727486450, 0.199095941976236900, +0.199046942727247460, 0.198997942980640270, 0.198948942736538630, 0.198899941995064640, 0.198850940756340800, 0.198801939020489180, 0.198752936787633140, 0.198703934057894770, +0.198654930831396540, 0.198605927108260550, 0.198556922888610210, 0.198507918172567520, 0.198458912960255060, 0.198409907251794890, 0.198360901047310380, 0.198311894346923620, +0.198262887150756660, 0.198213879458932960, 0.198164871271574530, 0.198115862588803930, 0.198066853410743230, 0.198017843737515850, 0.197968833569243860, 0.197919822906049790, +0.197870811748055710, 0.197821800095385050, 0.197772787948159890, 0.197723775306502730, 0.197674762170535730, 0.197625748540382260, 0.197576734416164410, 0.197527719798004710, +0.197478704686025300, 0.197429689080349550, 0.197380672981099570, 0.197331656388397480, 0.197282639302366700, 0.197233621723129300, 0.197184603650807870, 0.197135585085524480, +0.197086566027402540, 0.197037546476564210, 0.196988526433132030, 0.196939505897228060, 0.196890484868975780, 0.196841463348497310, 0.196792441335915140, 0.196743418831351460, +0.196694395834929650, 0.196645372346771870, 0.196596348367000660, 0.196547323895738120, 0.196498298933107720, 0.196449273479231580, 0.196400247534231800, 0.196351221098231860, +0.196302194171353860, 0.196253166753720370, 0.196204138845453540, 0.196155110446676770, 0.196106081557512250, 0.196057052178082500, 0.196008022308509720, 0.195958991948917300, +0.195909961099427400, 0.195860929760162620, 0.195811897931245040, 0.195762865612798180, 0.195713832804944140, 0.195664799507805520, 0.195615765721504490, 0.195566731446164460, +0.195517696681907600, 0.195468661428856050, 0.195419625687133310, 0.195370589456861500, 0.195321552738163210, 0.195272515531160600, 0.195223477835977130, 0.195174439652734980, +0.195125400981556730, 0.195076361822564550, 0.195027322175881900, 0.194978282041630920, 0.194929241419934260, 0.194880200310914050, 0.194831158714693750, 0.194782116631395580, +0.194733074061142130, 0.194684031004055540, 0.194634987460259310, 0.194585943429875620, 0.194536898913027080, 0.194487853909835830, 0.194438808420425410, 0.194389762444917960, +0.194340715983435660, 0.194291669036102010, 0.194242621603039180, 0.194193573684369820, 0.194144525280216060, 0.194095476390701430, 0.194046427015948130, 0.193997377156078730, +0.193948326811215490, 0.193899275981481850, 0.193850224667000000, 0.193801172867892610, 0.193752120584281850, 0.193703067816291240, 0.193654014564042940, 0.193604960827659600, +0.193555906607263430, 0.193506851902977920, 0.193457796714925300, 0.193408741043227720, 0.193359684888008750, 0.193310628249390580, 0.193261571127495810, 0.193212513522446700, +0.193163455434366720, 0.193114396863378110, 0.193065337809603530, 0.193016278273165140, 0.192967218254186500, 0.192918157752789810, 0.192869096769097720, 0.192820035303232470, +0.192770973355317570, 0.192721910925475220, 0.192672848013828110, 0.192623784620498420, 0.192574720745609720, 0.192525656389284230, 0.192476591551644150, 0.192427526232813030, +0.192378460432913100, 0.192329394152066980, 0.192280327390396990, 0.192231260148026580, 0.192182192425078060, 0.192133124221674030, 0.192084055537936750, 0.192034986373989770, +0.191985916729955350, 0.191936846605956110, 0.191887776002114320, 0.191838704918553540, 0.191789633355396010, 0.191740561312764350, 0.191691488790780880, 0.191642415789569140, +0.191593342309251350, 0.191544268349950170, 0.191495193911787930, 0.191446118994888110, 0.191397043599373010, 0.191347967725364860, 0.191298891372987220, 0.191249814542362370, +0.191200737233612970, 0.191151659446861300, 0.191102581182230890, 0.191053502439844060, 0.191004423219823440, 0.190955343522291380, 0.190906263347371350, 0.190857182695185670, +0.190808101565857040, 0.190759019959507730, 0.190709937876261280, 0.190660855316240020, 0.190611772279566600, 0.190562688766363310, 0.190513604776753750, 0.190464520310860170, +0.190415435368804840, 0.190366349950711390, 0.190317264056702020, 0.190268177686899520, 0.190219090841426130, 0.190170003520405470, 0.190120915723959780, 0.190071827452211820, +0.190022738705283830, 0.189973649483299450, 0.189924559786380930, 0.189875469614651020, 0.189826378968231980, 0.189777287847247460, 0.189728196251819720, 0.189679104182071460, +0.189630011638125040, 0.189580918620103980, 0.189531825128130660, 0.189482731162327330, 0.189433636722817630, 0.189384541809723810, 0.189335446423168630, 0.189286350563274420, +0.189237254230164770, 0.189188157423961970, 0.189139060144788790, 0.189089962392767510, 0.189040864168021770, 0.188991765470673870, 0.188942666300846550, 0.188893566658662140, +0.188844466544244220, 0.188795365957715180, 0.188746264899197690, 0.188697163368814120, 0.188648061366688050, 0.188598958892941840, 0.188549855947697830, 0.188500752531079590, +0.188451648643209460, 0.188402544284210220, 0.188353439454204190, 0.188304334153314960, 0.188255228381664920, 0.188206122139376820, 0.188157015426572980, 0.188107908243377030, +0.188058800589911280, 0.188009692466298560, 0.187960583872661180, 0.187911474809122760, 0.187862365275805660, 0.187813255272832660, 0.187764144800326050, 0.187715033858409540, +0.187665922447205450, 0.187616810566836540, 0.187567698217425170, 0.187518585399094990, 0.187469472111968350, 0.187420358356167600, 0.187371244131816380, 0.187322129439037060, +0.187273014277952400, 0.187223898648684770, 0.187174782551357860, 0.187125665986093950, 0.187076548953015900, 0.187027431452246040, 0.186978313483908030, 0.186929195048124250, +0.186880076145017480, 0.186830956774710070, 0.186781836937325720, 0.186732716632986770, 0.186683595861816020, 0.186634474623935870, 0.186585352919469930, 0.186536230748540640, +0.186487108111270340, 0.186437985007782690, 0.186388861438200080, 0.186339737402645310, 0.186290612901240770, 0.186241487934110130, 0.186192362501375770, 0.186143236603160510, +0.186094110239586720, 0.186044983410778080, 0.185995856116856980, 0.185946728357946260, 0.185897600134168280, 0.185848471445646730, 0.185799342292504000, 0.185750212674862910, +0.185701082592845870, 0.185651952046576530, 0.185602821036177340, 0.185553689561770650, 0.185504557623480170, 0.185455425221428300, 0.185406292355737860, 0.185357159026531240, +0.185308025233932190, 0.185258890978063060, 0.185209756259046700, 0.185160621077005540, 0.185111485432063240, 0.185062349324342210, 0.185013212753965340, 0.184964075721054970, +0.184914938225734880, 0.184865800268127430, 0.184816661848355460, 0.184767522966541420, 0.184718383622809010, 0.184669243817280640, 0.184620103550079160, 0.184570962821326980, +0.184521821631147830, 0.184472679979664130, 0.184423537866998300, 0.184374395293274040, 0.184325252258613820, 0.184276108763140460, 0.184226964806976370, 0.184177820390245330, +0.184128675513069750, 0.184079530175572440, 0.184030384377875890, 0.183981238120103830, 0.183932091402378650, 0.183882944224823260, 0.183833796587560050, 0.183784648490712800, +0.183735499934403940, 0.183686350918756320, 0.183637201443892390, 0.183588051509935870, 0.183538901117009270, 0.183489750265234920, 0.183440598954736690, 0.183391447185636940, +0.183342294958058540, 0.183293142272124010, 0.183243989127957030, 0.183194835525680110, 0.183145681465416070, 0.183096526947287400, 0.183047371971417850, 0.182998216537929890, +0.182949060646946350, 0.182899904298589740, 0.182850747492983830, 0.182801590230251030, 0.182752432510514230, 0.182703274333895940, 0.182654115700519900, 0.182604956610508570, +0.182555797063984420, 0.182506637061071200, 0.182457476601891410, 0.182408315686567900, 0.182359154315223180, 0.182309992487980990, 0.182260830204963840, 0.182211667466294610, +0.182162504272095770, 0.182113340622491100, 0.182064176517603090, 0.182015011957554650, 0.181965846942468230, 0.181916681472467620, 0.181867515547675330, 0.181818349168214240, +0.181769182334206830, 0.181720015045776890, 0.181670847303046950, 0.181621679106139440, 0.181572510455178170, 0.181523341350285610, 0.181474171791584700, 0.181425001779197930, +0.181375831313249110, 0.181326660393860690, 0.181277489021155620, 0.181228317195256390, 0.181179144916286810, 0.181129972184369380, 0.181080798999627010, 0.181031625362182170, +0.180982451272158760, 0.180933276729679180, 0.180884101734866440, 0.180834926287842980, 0.180785750388732650, 0.180736574037657970, 0.180687397234741840, 0.180638219980106760, +0.180589042273876590, 0.180539864116173790, 0.180490685507120910, 0.180441506446841760, 0.180392326935458840, 0.180343146973095090, 0.180293966559873040, 0.180244785695916540, +0.180195604381348050, 0.180146422616290550, 0.180097240400866550, 0.180048057735199880, 0.179998874619413080, 0.179949691053629100, 0.179900507037970450, 0.179851322572560950, +0.179802137657523180, 0.179752952292980050, 0.179703766479054090, 0.179654580215869160, 0.179605393503547790, 0.179556206342212480, 0.179507018731987100, 0.179457830672994170, +0.179408642165356680, 0.179359453209197130, 0.179310263804639380, 0.179261073951805990, 0.179211883650819890, 0.179162692901803670, 0.179113501704881130, 0.179064310060174870, +0.179015117967807810, 0.178965925427902520, 0.178916732440582840, 0.178867539005971350, 0.178818345124191010, 0.178769150795364370, 0.178719956019615290, 0.178670760797066310, +0.178621565127840000, 0.178572369012060220, 0.178523172449849500, 0.178473975441330870, 0.178424777986626840, 0.178375580085861320, 0.178326381739156850, 0.178277182946636410, +0.178227983708422600, 0.178178784024639270, 0.178129583895408950, 0.178080383320854680, 0.178031182301099020, 0.177981980836265850, 0.177932778926477710, 0.177883576571857630, +0.177834373772528200, 0.177785170528613230, 0.177735966840235350, 0.177686762707517570, 0.177637558130582430, 0.177588353109553810, 0.177539147644554330, 0.177489941735706560, +0.177440735383134350, 0.177391528586960310, 0.177342321347307460, 0.177293113664298340, 0.177243905538056880, 0.177194696968705680, 0.177145487956367730, 0.177096278501165600, +0.177047068603223220, 0.176997858262663180, 0.176948647479608510, 0.176899436254181750, 0.176850224586506840, 0.176801012476706400, 0.176751799924903390, 0.176702586931220460, +0.176653373495781500, 0.176604159618709120, 0.176554945300125890, 0.176505730540155730, 0.176456515338921260, 0.176407299696545480, 0.176358083613151030, 0.176308867088861810, +0.176259650123800400, 0.176210432718089890, 0.176161214871852850, 0.176111996585213200, 0.176062777858293580, 0.176013558691217010, 0.175964339084106110, 0.175915119037084790, +0.175865898550275650, 0.175816677623801790, 0.175767456257785810, 0.175718234452351600, 0.175669012207621820, 0.175619789523719070, 0.175570566400767290, 0.175521342838889090, +0.175472118838207510, 0.175422894398845230, 0.175373669520926150, 0.175324444204572880, 0.175275218449908480, 0.175225992257055620, 0.175176765626138240, 0.175127538557278920, +0.175078311050600760, 0.175029083106226360, 0.174979854724279710, 0.174930625904883420, 0.174881396648160580, 0.174832166954233810, 0.174782936823227040, 0.174733706255262940, +0.174684475250464130, 0.174635243808954590, 0.174586011930856900, 0.174536779616294210, 0.174487546865389140, 0.174438313678265620, 0.174389080055046330, 0.174339845995854340, +0.174290611500812290, 0.174241376570044150, 0.174192141203672570, 0.174142905401820650, 0.174093669164611030, 0.174044432492167640, 0.173995195384613190, 0.173945957842070760, +0.173896719864662990, 0.173847481452513860, 0.173798242605746030, 0.173749003324482560, 0.173699763608846200, 0.173650523458960840, 0.173601282874949160, 0.173552041856933850, +0.173502800405038880, 0.173453558519386900, 0.173404316200101020, 0.173355073447303910, 0.173305830261119560, 0.173256586641670620, 0.173207342589080240, 0.173158098103471050, +0.173108853184967050, 0.173059607833690930, 0.173010362049765780, 0.172961115833314310, 0.172911869184460470, 0.172862622103326950, 0.172813374590036870, 0.172764126644712940, +0.172714878267479110, 0.172665629458458090, 0.172616380217772560, 0.172567130545546510, 0.172517880441902670, 0.172468629906964100, 0.172419378940853520, 0.172370127543694910, +0.172320875715611000, 0.172271623456724890, 0.172222370767159320, 0.172173117647038220, 0.172123864096484340, 0.172074610115620810, 0.172025355704570310, 0.171976100863456850, +0.171926845592403150, 0.171877589891532350, 0.171828333760967090, 0.171779077200831460, 0.171729820211248160, 0.171680562792339840, 0.171631304944230570, 0.171582046667043020, +0.171532787960900380, 0.171483528825925300, 0.171434269262241870, 0.171385009269972740, 0.171335748849241100, 0.171286488000169630, 0.171237226722882410, 0.171187965017502110, +0.171138702884151890, 0.171089440322954480, 0.171040177334033900, 0.170990913917512890, 0.170941650073514580, 0.170892385802161710, 0.170843121103578330, 0.170793855977887130, +0.170744590425211310, 0.170695324445673560, 0.170646058039397950, 0.170596791206507170, 0.170547523947124000, 0.170498256261372440, 0.170448988149375230, 0.170399719611255580, +0.170350450647136160, 0.170301181257141080, 0.170251911441393040, 0.170202641200015210, 0.170153370533130370, 0.170104099440862520, 0.170054827923334400, 0.170005555980669240, +0.169956283612989760, 0.169907010820419980, 0.169857737603082680, 0.169808463961101050, 0.169759189894597820, 0.169709915403697040, 0.169660640488521470, 0.169611365149193870, +0.169562089385838300, 0.169512813198577500, 0.169463536587534690, 0.169414259552832570, 0.169364982094595250, 0.169315704212945480, 0.169266425908006420, 0.169217147179900880, +0.169167868028752920, 0.169118588454685280, 0.169069308457821170, 0.169020028038283340, 0.168970747196195900, 0.168921465931681590, 0.168872184244863580, 0.168822902135864710, +0.168773619604809020, 0.168724336651819270, 0.168675053277018230, 0.168625769480530010, 0.168576485262477370, 0.168527200622983510, 0.168477915562171200, 0.168428630080164570, +0.168379344177086330, 0.168330057853059740, 0.168280771108207580, 0.168231483942653910, 0.168182196356521540, 0.168132908349933690, 0.168083619923013130, 0.168034331075883950, +0.167985041808668940, 0.167935752121491310, 0.167886462014473880, 0.167837171487740740, 0.167787880541414660, 0.167738589175618460, 0.167689297390476220, 0.167640005186110720, +0.167590712562645210, 0.167541419520202490, 0.167492126058906650, 0.167442832178880510, 0.167393537880247270, 0.167344243163129760, 0.167294948027652070, 0.167245652473937020, +0.167196356502107850, 0.167147060112287330, 0.167097763304599610, 0.167048466079167460, 0.166999168436114150, 0.166949870375562500, 0.166900571897636600, 0.166851273002459280, +0.166801973690153760, 0.166752673960842900, 0.166703373814650780, 0.166654073251700200, 0.166604772272114010, 0.166555470876016350, 0.166506169063530000, 0.166456866834778230, +0.166407564189883840, 0.166358261128970980, 0.166308957652162470, 0.166259653759581570, 0.166210349451351100, 0.166161044727595210, 0.166111739588436700, 0.166062434033998810, +0.166013128064404440, 0.165963821679777660, 0.165914514880241340, 0.165865207665918720, 0.165815900036932640, 0.165766591993407260, 0.165717283535465390, 0.165667974663229880, +0.165618665376824880, 0.165569355676373210, 0.165520045561998150, 0.165470735033822540, 0.165421424091970530, 0.165372112736564960, 0.165322800967729110, 0.165273488785585810, +0.165224176190259230, 0.165174863181872220, 0.165125549760548020, 0.165076235926409550, 0.165026921679580910, 0.164977607020184960, 0.164928291948344990, 0.164878976464183870, +0.164829660567825750, 0.164780344259393450, 0.164731027539009870, 0.164681710406799160, 0.164632392862884170, 0.164583074907388190, 0.164533756540434090, 0.164484437762146050, +0.164435118572646920, 0.164385798972059960, 0.164336478960508100, 0.164287158538115460, 0.164237837705004910, 0.164188516461299810, 0.164139194807122940, 0.164089872742598540, +0.164040550267849440, 0.163991227382998980, 0.163941904088170030, 0.163892580383486720, 0.163843256269072010, 0.163793931745049110, 0.163744606811540960, 0.163695281468671740, +0.163645955716564320, 0.163596629555341540, 0.163547302985127650, 0.163497976006045510, 0.163448648618218420, 0.163399320821769280, 0.163349992616822260, 0.163300664003500270, +0.163251334981926590, 0.163202005552224170, 0.163152675714517160, 0.163103345468928460, 0.163054014815581410, 0.163004683754598870, 0.162955352286105050, 0.162906020410222870, +0.162856688127075660, 0.162807355436786260, 0.162758022339478890, 0.162708688835276500, 0.162659354924301950, 0.162610020606679420, 0.162560685882531860, 0.162511350751982590, +0.162462015215154490, 0.162412679272171790, 0.162363342923157410, 0.162314006168234660, 0.162264669007526450, 0.162215331441157020, 0.162165993469249260, 0.162116655091926520, +0.162067316309311700, 0.162017977121529020, 0.161968637528701390, 0.161919297530952190, 0.161869957128404300, 0.161820616321181940, 0.161771275109408060, 0.161721933493205540, +0.161672591472698630, 0.161623249048010230, 0.161573906219263740, 0.161524562986582020, 0.161475219350089320, 0.161425875309908600, 0.161376530866163190, 0.161327186018976000, +0.161277840768471260, 0.161228495114771970, 0.161179149058001400, 0.161129802598282550, 0.161080455735739620, 0.161031108470495540, 0.160981760802673710, 0.160932412732397030, +0.160883064259789740, 0.160833715384974820, 0.160784366108075590, 0.160735016429215010, 0.160685666348517330, 0.160636315866105470, 0.160586964982102400, 0.160537613696632360, +0.160488262009818280, 0.160438909921783530, 0.160389557432651100, 0.160340204542545190, 0.160290851251588760, 0.160241497559905220, 0.160192143467617480, 0.160142788974849850, +0.160093434081725220, 0.160044078788367020, 0.159994723094898180, 0.159945367001442960, 0.159896010508124350, 0.159846653615065700, 0.159797296322389950, 0.159747938630221440, +0.159698580538683050, 0.159649222047897800, 0.159599863157989910, 0.159550503869082370, 0.159501144181298570, 0.159451784094761490, 0.159402423609595360, 0.159353062725923200, +0.159303701443868350, 0.159254339763553830, 0.159204977685103890, 0.159155615208641520, 0.159106252334290100, 0.159056889062172610, 0.159007525392413330, 0.158958161325135240, +0.158908796860461750, 0.158859431998515820, 0.158810066739421770, 0.158760701083302540, 0.158711335030281120, 0.158661968580481820, 0.158612601734027580, 0.158563234491041820, +0.158513866851647560, 0.158464498815969050, 0.158415130384129330, 0.158365761556251760, 0.158316392332459340, 0.158267022712876380, 0.158217652697625860, 0.158168282286831220, +0.158118911480615440, 0.158069540279102800, 0.158020168682416330, 0.157970796690679430, 0.157921424304015120, 0.157872051522547660, 0.157822678346400070, 0.157773304775695370, +0.157723930810557830, 0.157674556451110480, 0.157625181697476720, 0.157575806549779570, 0.157526431008143340, 0.157477055072691020, 0.157427678743546100, 0.157378302020831500, +0.157328924904671620, 0.157279547395189400, 0.157230169492508340, 0.157180791196751410, 0.157131412508042940, 0.157082033426505920, 0.157032653952263850, 0.156983274085439660, +0.156933893826157770, 0.156884513174541110, 0.156835132130713180, 0.156785750694797000, 0.156736368866916860, 0.156686986647195800, 0.156637604035756860, 0.156588221032724320, +0.156538837638221240, 0.156489453852371040, 0.156440069675296810, 0.156390685107122810, 0.156341300147972100, 0.156291914797968170, 0.156242529057233990, 0.156193142925893920, +0.156143756404070990, 0.156094369491888710, 0.156044982189470020, 0.155995594496939340, 0.155946206414419670, 0.155896817942034470, 0.155847429079906810, 0.155798039828160980, +0.155748650186920080, 0.155699260156307110, 0.155649869736446430, 0.155600478927461090, 0.155551087729474540, 0.155501696142609810, 0.155452304166991300, 0.155402911802742040, +0.155353519049985480, 0.155304125908844680, 0.155254732379444040, 0.155205338461906540, 0.155155944156355700, 0.155106549462914550, 0.155057154381707470, 0.155007758912857510, +0.154958363056488160, 0.154908966812722450, 0.154859570181684750, 0.154810173163498150, 0.154760775758285670, 0.154711377966171680, 0.154661979787279270, 0.154612581221731880, +0.154563182269652630, 0.154513782931165830, 0.154464383206394610, 0.154414983095462390, 0.154365582598492310, 0.154316181715608680, 0.154266780446934620, 0.154217378792593620, +0.154167976752708710, 0.154118574327404310, 0.154069171516803470, 0.154019768321029680, 0.153970364740206060, 0.153920960774456940, 0.153871556423905430, 0.153822151688675050, +0.153772746568888840, 0.153723341064671200, 0.153673935176145190, 0.153624528903433920, 0.153575122246661780, 0.153525715205951820, 0.153476307781427570, 0.153426899973212100, +0.153377491781429840, 0.153328083206203840, 0.153278674247657650, 0.153229264905914320, 0.153179855181098250, 0.153130445073332570, 0.153081034582740750, 0.153031623709445920, +0.152982212453572490, 0.152932800815243490, 0.152883388794582520, 0.152833976391712620, 0.152784563606758240, 0.152735150439842430, 0.152685736891088300, 0.152636322960620300, +0.152586908648561480, 0.152537493955035350, 0.152488078880165080, 0.152438663424075050, 0.152389247586888380, 0.152339831368728560, 0.152290414769718720, 0.152240997789983320, +0.152191580429645400, 0.152142162688828520, 0.152092744567655810, 0.152043326066251680, 0.151993907184739210, 0.151944487923242000, 0.151895068281883120, 0.151845648260787000, +0.151796227860076770, 0.151746807079875530, 0.151697385920307710, 0.151647964381496410, 0.151598542463565220, 0.151549120166637240, 0.151499697490836890, 0.151450274436287280, +0.151400851003112010, 0.151351427191434160, 0.151302003001378190, 0.151252578433067190, 0.151203153486624780, 0.151153728162174010, 0.151104302459839380, 0.151054876379743990, +0.151005449922011430, 0.150956023086764780, 0.150906595874128520, 0.150857168284225770, 0.150807740317179640, 0.150758311973114620, 0.150708883252153810, 0.150659454154420810, +0.150610024680038730, 0.150560594829132010, 0.150511164601823820, 0.150461733998237700, 0.150412303018496840, 0.150362871662725630, 0.150313439931047260, 0.150264007823585260, +0.150214575340462840, 0.150165142481804400, 0.150115709247733100, 0.150066275638372550, 0.150016841653845850, 0.149967407294277490, 0.149917972559790610, 0.149868537450508820, +0.149819101966555210, 0.149769666108054310, 0.149720229875129230, 0.149670793267903170, 0.149621356286500530, 0.149571918931044520, 0.149522481201658700, 0.149473043098466240, +0.149423604621591600, 0.149374165771157970, 0.149324726547288900, 0.149275286950107610, 0.149225846979738510, 0.149176406636304800, 0.149126965919930080, 0.149077524830737520, +0.149028083368851570, 0.148978641534395410, 0.148929199327492660, 0.148879756748266450, 0.148830313796841310, 0.148780870473340380, 0.148731426777886810, 0.148681982710605150, +0.148632538271618510, 0.148583093461050530, 0.148533648279024380, 0.148484202725664540, 0.148434756801094190, 0.148385310505436960, 0.148335863838816030, 0.148286416801355850, +0.148236969393179650, 0.148187521614411010, 0.148138073465173130, 0.148088624945590520, 0.148039176055786340, 0.147989726795884210, 0.147940277166007330, 0.147890827166280190, +0.147841376796825990, 0.147791926057767920, 0.147742474949230460, 0.147693023471336810, 0.147643571624210600, 0.147594119407975040, 0.147544666822754610, 0.147495213868672510, +0.147445760545852370, 0.147396306854417400, 0.147346852794492110, 0.147297398366199680, 0.147247943569663750, 0.147198488405007520, 0.147149032872355510, 0.147099576971830900, +0.147050120703557390, 0.147000664067658100, 0.146951207064257630, 0.146901749693479110, 0.146852291955446220, 0.146802833850282170, 0.146753375378111450, 0.146703916539057320, +0.146654457333242950, 0.146604997760792890, 0.146555537821830310, 0.146506077516478900, 0.146456616844861860, 0.146407155807103700, 0.146357694403327660, 0.146308232633657390, +0.146258770498216090, 0.146209307997128310, 0.146159845130517270, 0.146110381898506610, 0.146060918301219530, 0.146011454338780630, 0.145961990011313080, 0.145912525318940560, +0.145863060261786280, 0.145813594839974770, 0.145764129053629320, 0.145714662902873080, 0.145665196387830630, 0.145615729508625170, 0.145566262265380410, 0.145516794658219540, +0.145467326687267110, 0.145417858352646400, 0.145368389654481010, 0.145318920592894220, 0.145269451168010570, 0.145219981379953320, 0.145170511228846080, 0.145121040714812130, +0.145071569837976010, 0.145022098598460990, 0.144972626996390690, 0.144923155031888410, 0.144873682705078670, 0.144824210016084730, 0.144774736965029820, 0.144725263552038520, +0.144675789777234030, 0.144626315640740110, 0.144576841142679910, 0.144527366283178080, 0.144477891062357840, 0.144428415480342850, 0.144378939537256390, 0.144329463233223040, +0.144279986568365990, 0.144230509542809030, 0.144181032156675300, 0.144131554410089460, 0.144082076303174740, 0.144032597836054820, 0.143983119008852970, 0.143933639821693740, +0.143884160274700440, 0.143834680367996260, 0.143785200101705870, 0.143735719475952460, 0.143686238490859740, 0.143636757146551000, 0.143587275443150780, 0.143537793380782400, +0.143488310959569510, 0.143438828179635440, 0.143389345041104700, 0.143339861544100610, 0.143290377688746890, 0.143240893475166750, 0.143191408903484830, 0.143141923973824410, +0.143092438686309160, 0.143042953041062380, 0.142993467038208640, 0.142943980677871260, 0.142894493960173900, 0.142845006885239880, 0.142795519453193800, 0.142746031664158890, +0.142696543518258470, 0.142647055015617140, 0.142597566156358160, 0.142548076940605280, 0.142498587368481760, 0.142449097440112220, 0.142399607155619920, 0.142350116515128610, +0.142300625518761580, 0.142251134166643390, 0.142201642458897410, 0.142152150395647300, 0.142102657977016380, 0.142053165203129240, 0.142003672074109220, 0.141954178590080000, +0.141904684751164880, 0.141855190557488520, 0.141805696009174170, 0.141756201106345130, 0.141706705849126040, 0.141657210237640160, 0.141607714272011270, 0.141558217952362670, +0.141508721278818940, 0.141459224251503420, 0.141409726870539850, 0.141360229136051510, 0.141310731048163050, 0.141261232606997740, 0.141211733812679370, 0.141162234665331200, +0.141112735165077910, 0.141063235312042760, 0.141013735106349540, 0.140964234548121540, 0.140914733637483390, 0.140865232374558390, 0.140815730759469900, 0.140766228792342520, +0.140716726473299550, 0.140667223802464770, 0.140617720779961490, 0.140568217405914350, 0.140518713680446660, 0.140469209603682200, 0.140419705175744260, 0.140370200396757490, +0.140320695266845240, 0.140271189786131230, 0.140221683954738830, 0.140172177772792640, 0.140122671240416020, 0.140073164357732730, 0.140023657124866090, 0.139974149541940730, +0.139924641609080000, 0.139875133326407660, 0.139825624694047050, 0.139776115712122840, 0.139726606380758320, 0.139677096700076830, 0.139627586670203060, 0.139578076291260320, +0.139528565563372400, 0.139479054486662590, 0.139429543061255630, 0.139380031287274770, 0.139330519164843870, 0.139281006694086220, 0.139231493875126480, 0.139181980708088020, +0.139132467193094580, 0.139082953330269570, 0.139033439119737590, 0.138983924561622040, 0.138934409656046640, 0.138884894403134810, 0.138835378803011170, 0.138785862855799080, +0.138736346561621900, 0.138686829920604300, 0.138637312932869600, 0.138587795598541650, 0.138538277917743760, 0.138488759890600580, 0.138439241517235550, 0.138389722797772400, +0.138340203732334490, 0.138290684321046520, 0.138241164564031850, 0.138191644461414240, 0.138142124013317100, 0.138092603219865110, 0.138043082081181570, 0.137993560597390350, +0.137944038768614770, 0.137894516594979560, 0.137844994076608050, 0.137795471213623590, 0.137745948006150920, 0.137696424454313380, 0.137646900558234780, 0.137597376318038480, +0.137547851733849170, 0.137498326805790240, 0.137448801533985500, 0.137399275918558300, 0.137349749959633370, 0.137300223657334050, 0.137250697011784160, 0.137201170023107110, +0.137151642691427570, 0.137102115016868920, 0.137052586999554970, 0.137003058639609130, 0.136953529937156090, 0.136904000892319220, 0.136854471505221900, 0.136804941775988840, +0.136755411704743420, 0.136705881291609490, 0.136656350536710410, 0.136606819440170890, 0.136557288002114310, 0.136507756222664530, 0.136458224101944910, 0.136408691640080180, +0.136359158837193710, 0.136309625693409350, 0.136260092208850490, 0.136210558383641820, 0.136161024217906770, 0.136111489711769150, 0.136061954865352360, 0.136012419678781140, +0.135962884152178860, 0.135913348285669390, 0.135863812079376090, 0.135814275533423710, 0.135764738647935620, 0.135715201423035250, 0.135665663858847350, 0.135616125955495240, +0.135566587713102840, 0.135517049131793550, 0.135467510211692040, 0.135417970952921800, 0.135368431355606580, 0.135318891419869890, 0.135269351145836380, 0.135219810533629500, +0.135170269583373080, 0.135120728295190560, 0.135071186669206670, 0.135021644705544810, 0.134972102404328830, 0.134922559765682150, 0.134873016789729520, 0.134823473476594350, +0.134773929826400050, 0.134724385839271350, 0.134674841515331710, 0.134625296854704950, 0.134575751857514530, 0.134526206523885140, 0.134476660853940250, 0.134427114847803730, +0.134377568505598950, 0.134328021827450710, 0.134278474813482400, 0.134228927463817900, 0.134179379778580660, 0.134129831757895390, 0.134080283401885550, 0.134030734710675000, +0.133981185684387190, 0.133931636323146840, 0.133882086627077400, 0.133832536596302320, 0.133782986230946310, 0.133733435531132840, 0.133683884496985790, 0.133634333128628600, +0.133584781426185990, 0.133535229389781460, 0.133485677019538840, 0.133436124315581580, 0.133386571278034440, 0.133337017907020900, 0.133287464202664800, 0.133237910165089600, +0.133188355794420070, 0.133138801090779630, 0.133089246054292200, 0.133039690685081230, 0.132990134983271470, 0.132940578948986370, 0.132891022582349800, 0.132841465883485250, +0.132791908852517490, 0.132742351489569950, 0.132692793794766090, 0.132643235768230670, 0.132593677410087180, 0.132544118720459490, 0.132494559699471050, 0.132445000347246660, +0.132395440663909790, 0.132345880649584300, 0.132296320304393670, 0.132246759628462660, 0.132197198621914790, 0.132147637284873890, 0.132098075617463480, 0.132048513619808290, +0.131998951292031850, 0.131949388634258010, 0.131899825646610260, 0.131850262329213400, 0.131800698682190880, 0.131751134705666180, 0.131701570399764070, 0.131652005764608030, +0.131602440800321990, 0.131552875507029400, 0.131503309884855060, 0.131453743933922450, 0.131404177654355470, 0.131354611046277630, 0.131305044109813700, 0.131255476845087120, +0.131205909252221890, 0.131156341331341440, 0.131106773082570540, 0.131057204506032750, 0.131007635601851940, 0.130958066370151590, 0.130908496811056510, 0.130858926924690200, +0.130809356711176130, 0.130759786170639130, 0.130710215303202620, 0.130660644108990610, 0.130611072588126540, 0.130561500740735220, 0.130511928566940160, 0.130462356066865260, +0.130412783240634040, 0.130363210088371290, 0.130313636610200540, 0.130264062806245700, 0.130214488676630240, 0.130164914221478990, 0.130115339440915500, 0.130065764335063620, +0.130016188904046900, 0.129966613147990160, 0.129917037067016880, 0.129867460661250540, 0.129817883930816030, 0.129768306875836790, 0.129718729496436790, 0.129669151792739520, +0.129619573764869820, 0.129569995412951170, 0.129520416737107540, 0.129470837737462430, 0.129421258414140680, 0.129371678767265770, 0.129322098796961660, 0.129272518503351860, +0.129222937886561200, 0.129173356946713200, 0.129123775683931820, 0.129074194098340560, 0.129024612190064230, 0.128975029959226380, 0.128925447405950970, 0.128875864530361510, +0.128826281332582810, 0.128776697812738400, 0.128727113970951820, 0.128677529807347900, 0.128627945322050130, 0.128578360515182510, 0.128528775386868550, 0.128479189937233090, +0.128429604166399670, 0.128380018074492230, 0.128330431661634300, 0.128280844927950720, 0.128231257873565040, 0.128181670498601210, 0.128132082803182780, 0.128082494787434580, +0.128032906451480130, 0.127983317795443420, 0.127933728819447980, 0.127884139523618660, 0.127834549908078960, 0.127784959972952500, 0.127735369718364050, 0.127685779144437160, +0.127636188251295830, 0.127586597039063610, 0.127537005507865310, 0.127487413657824540, 0.127437821489065180, 0.127388229001710870, 0.127338636195886420, 0.127289043071715370, +0.127239449629321710, 0.127189855868828970, 0.127140261790362060, 0.127090667394044480, 0.127041072680000260, 0.126991477648352890, 0.126941882299227260, 0.126892286632746930, +0.126842690649035440, 0.126793094348217700, 0.126743497730417180, 0.126693900795757930, 0.126644303544363510, 0.126594705976358750, 0.126545108091867230, 0.126495509891012940, +0.126445911373919420, 0.126396312540711570, 0.126346713391512930, 0.126297113926447550, 0.126247514145638890, 0.126197914049211910, 0.126148313637290150, 0.126098712909997610, +0.126049111867457820, 0.125999510509795710, 0.125949908837134830, 0.125900306849599160, 0.125850704547312290, 0.125801101930399120, 0.125751498998983160, 0.125701895753188050, +0.125652292193138610, 0.125602688318958460, 0.125553084130771570, 0.125503479628701540, 0.125453874812873230, 0.125404269683410260, 0.125354664240436620, 0.125305058484075860, +0.125255452414452910, 0.125205846031691330, 0.125156239335915100, 0.125106632327247860, 0.125057025005814480, 0.125007417371738540, 0.124957809425144050, 0.124908201166154600, +0.124858592594895080, 0.124808983711489090, 0.124759374516060190, 0.124709765008733290, 0.124660155189632000, 0.124610545058880310, 0.124560934616601810, 0.124511323862921410, +0.124461712797962710, 0.124412101421849730, 0.124362489734706050, 0.124312877736656590, 0.124263265427824940, 0.124213652808335110, 0.124164039878310720, 0.124114426637876680, +0.124064813087156560, 0.124015199226274410, 0.123965585055353820, 0.123915970574519710, 0.123866355783895680, 0.123816740683605310, 0.123767125273773540, 0.123717509554523940, +0.123667893525980580, 0.123618277188267040, 0.123568660541508250, 0.123519043585827810, 0.123469426321349760, 0.123419808748197690, 0.123370190866496560, 0.123320572676369940, +0.123270954177941900, 0.123221335371336020, 0.123171716256677250, 0.123122096834089190, 0.123072477103695880, 0.123022857065620950, 0.122973236719989300, 0.122923616066924580, +0.122873995106550370, 0.122824373838991610, 0.122774752264371910, 0.122725130382815340, 0.122675508194445500, 0.122625885699387330, 0.122576262897764450, 0.122526639789700910, +0.122477016375320320, 0.122427392654747640, 0.122377768628106480, 0.122328144295520900, 0.122278519657114500, 0.122228894713012260, 0.122179269463337780, 0.122129643908215120, +0.122080018047767930, 0.122030391882121110, 0.121980765411398320, 0.121931138635723620, 0.121881511555220630, 0.121831884170014300, 0.121782256480228270, 0.121732628485986150, +0.121683000187412890, 0.121633371584632140, 0.121583742677767960, 0.121534113466943980, 0.121484483952285160, 0.121434854133915140, 0.121385224011957960, 0.121335593586537300, +0.121285962857778100, 0.121236331825803980, 0.121186700490739030, 0.121137068852706890, 0.121087436911832520, 0.121037804668239560, 0.120988172122052100, 0.120938539273393750, +0.120888906122389490, 0.120839272669162970, 0.120789638913837840, 0.120740004856539050, 0.120690370497390230, 0.120640735836515510, 0.120591100874038490, 0.120541465610084160, +0.120491830044776180, 0.120442194178238610, 0.120392558010595120, 0.120342921541970680, 0.120293284772488930, 0.120243647702273970, 0.120194010331449460, 0.120144372660140340, +0.120094734688470300, 0.120045096416563440, 0.119995457844543380, 0.119945818972535120, 0.119896179800662320, 0.119846540329048620, 0.119796900557819010, 0.119747260487097150, +0.119697620117007140, 0.119647979447672640, 0.119598338479218640, 0.119548697211768780, 0.119499055645447190, 0.119449413780377500, 0.119399771616684730, 0.119350129154492540, +0.119300486393925010, 0.119250843335105840, 0.119201199978159990, 0.119151556323211140, 0.119101912370383410, 0.119052268119800450, 0.119002623571587270, 0.118952978725867520, +0.118903333582765320, 0.118853688142404350, 0.118804042404909600, 0.118754396370404750, 0.118704750039013470, 0.118655103410860750, 0.118605456486070270, 0.118555809264766150, +0.118506161747072070, 0.118456513933113020, 0.118406865823012690, 0.118357217416895190, 0.118307568714884210, 0.118257919717104750, 0.118208270423680480, 0.118158620834735550, +0.118108970950393620, 0.118059320770779710, 0.118009670296017490, 0.117960019526231100, 0.117910368461544220, 0.117860717102081850, 0.117811065447967700, 0.117761413499325440, +0.117711761256280080, 0.117662108718955330, 0.117612455887475290, 0.117562802761963690, 0.117513149342545520, 0.117463495629344470, 0.117413841622484680, 0.117364187322089850, +0.117314532728284990, 0.117264877841193800, 0.117215222660940420, 0.117165567187648530, 0.117115911421443180, 0.117066255362448040, 0.117016599010787260, 0.116966942366584540, +0.116917285429964910, 0.116867628201052070, 0.116817970679969710, 0.116768312866842870, 0.116718654761795260, 0.116668996364951000, 0.116619337676433800, 0.116569678696368710, +0.116520019424879410, 0.116470359862090080, 0.116420700008124390, 0.116371039863107400, 0.116321379427162820, 0.116271718700414780, 0.116222057682987000, 0.116172396375004520, +0.116122734776591060, 0.116073072887870750, 0.116023410708967320, 0.115973748240005810, 0.115924085481109930, 0.115874422432403380, 0.115824759094011230, 0.115775095466057170, +0.115725431548665380, 0.115675767341959570, 0.115626102846064780, 0.115576438061104740, 0.115526772987203600, 0.115477107624485080, 0.115427441973074240, 0.115377776033094790, +0.115328109804670910, 0.115278443287926300, 0.115228776482986050, 0.115179109389973830, 0.115129442009013840, 0.115079774340229810, 0.115030106383746790, 0.114980438139688500, +0.114930769608179120, 0.114881100789342370, 0.114831431683303300, 0.114781762290185660, 0.114732092610113180, 0.114682422643210890, 0.114632752389602560, 0.114583081849412350, +0.114533411022763990, 0.114483739909782540, 0.114434068510591740, 0.114384396825315770, 0.114334724854078380, 0.114285052597004600, 0.114235380054218200, 0.114185707225843340, +0.114136034112003780, 0.114086360712824570, 0.114036687028429460, 0.113987013058942630, 0.113937338804487840, 0.113887664265190130, 0.113837989441173270, 0.113788314332560980, +0.113738638939478360, 0.113688963262049140, 0.113639287300397500, 0.113589611054647210, 0.113539934524923340, 0.113490257711349620, 0.113440580614050250, 0.113390903233149020, +0.113341225568770940, 0.113291547621039810, 0.113241869390079810, 0.113192190876014700, 0.113142512078969550, 0.113092832999068110, 0.113043153636434610, 0.112993473991192760, +0.112943794063467690, 0.112894113853383120, 0.112844433361062830, 0.112794752586631890, 0.112745071530214070, 0.112695390191933570, 0.112645708571914170, 0.112596026670280930, +0.112546344487157610, 0.112496662022668450, 0.112446979276937180, 0.112397296250088900, 0.112347612942247390, 0.112297929353536840, 0.112248245484081040, 0.112198561334005050, +0.112148876903432670, 0.112099192192488100, 0.112049507201295080, 0.111999821929978760, 0.111950136378662880, 0.111900450547471660, 0.111850764436528870, 0.111801078045959610, +0.111751391375887660, 0.111701704426436790, 0.111652017197732090, 0.111602329689897350, 0.111552641903056790, 0.111502953837334190, 0.111453265492854630, 0.111403576869741920, +0.111353887968120260, 0.111304198788113440, 0.111254509329846570, 0.111204819593443430, 0.111155129579028230, 0.111105439286724770, 0.111055748716658160, 0.111006057868952170, +0.110956366743731040, 0.110906675341118550, 0.110856983661239810, 0.110807291704218600, 0.110757599470178740, 0.110707906959245320, 0.110658214171542120, 0.110608521107193390, +0.110558827766322920, 0.110509134149055820, 0.110459440255515880, 0.110409746085827350, 0.110360051640114000, 0.110310356918500970, 0.110260661921112040, 0.110210966648071480, +0.110161271099503040, 0.110111575275531860, 0.110061879176281750, 0.110012182801876950, 0.109962486152441240, 0.109912789228099760, 0.109863092028976300, 0.109813394555194690, +0.109763696806880020, 0.109713998784156110, 0.109664300487147200, 0.109614601915977090, 0.109564903070770940, 0.109515203951652510, 0.109465504558746080, 0.109415804892175450, +0.109366104952065740, 0.109316404738540780, 0.109266704251724800, 0.109217003491741610, 0.109167302458716360, 0.109117601152772860, 0.109067899574035360, 0.109018197722627650, +0.108968495598674900, 0.108918793202300910, 0.108869090533629500, 0.108819387592785810, 0.108769684379893640, 0.108719980895077260, 0.108670277138460490, 0.108620573110168470, +0.108570868810325000, 0.108521164239054380, 0.108471459396480400, 0.108421754282728210, 0.108372048897921640, 0.108322343242184940, 0.108272637315641950, 0.108222931118417810, +0.108173224650636330, 0.108123517912421790, 0.108073810903898020, 0.108024103625190170, 0.107974396076422050, 0.107924688257717950, 0.107874980169201680, 0.107825271810998390, +0.107775563183231950, 0.107725854286026130, 0.107676145119506140, 0.107626435683795780, 0.107576725979019320, 0.107527016005300610, 0.107477305762764800, 0.107427595251535740, +0.107377884471737670, 0.107328173423494460, 0.107278462106931260, 0.107228750522171900, 0.107179038669340660, 0.107129326548561390, 0.107079614159959240, 0.107029901503658060, +0.106980188579782120, 0.106930475388455270, 0.106880761929802670, 0.106831048203948160, 0.106781334211015600, 0.106731619951130150, 0.106681905424415640, 0.106632190630996370, +0.106582475570996180, 0.106532760244540240, 0.106483044651752400, 0.106433328792756950, 0.106383612667677730, 0.106333896276639940, 0.106284179619767400, 0.106234462697184410, +0.106184745509014810, 0.106135028055383800, 0.106085310336415220, 0.106035592352233370, 0.105985874102962080, 0.105936155588726560, 0.105886436809650640, 0.105836717765858190, +0.105786998457474400, 0.105737278884623100, 0.105687559047428600, 0.105637838946014780, 0.105588118580506790, 0.105538397951028500, 0.105488677057704220, 0.105438955900657810, +0.105389234480014440, 0.105339512795898000, 0.105289790848432780, 0.105240068637742630, 0.105190346163952740, 0.105140623427187000, 0.105090900427569700, 0.105041177165224710, +0.104991453640277200, 0.104941729852851080, 0.104892005803070620, 0.104842281491059720, 0.104792556916943540, 0.104742832080845980, 0.104693106982890890, 0.104643381623203480, +0.104593656001907610, 0.104543930119127600, 0.104494203974987330, 0.104444477569611990, 0.104394750903125460, 0.104345023975652040, 0.104295296787315630, 0.104245569338241420, +0.104195841628553280, 0.104146113658375530, 0.104096385427832070, 0.104046656937048080, 0.103996928186147450, 0.103947199175254500, 0.103897469904493110, 0.103847740373988490, +0.103798010583864510, 0.103748280534245060, 0.103698550225255360, 0.103648819657019280, 0.103599088829661150, 0.103549357743304860, 0.103499626398075630, 0.103449894794097300, +0.103400162931494260, 0.103350430810390370, 0.103300698430910830, 0.103250965793179560, 0.103201232897320860, 0.103151499743458650, 0.103101766331718120, 0.103052032662223190, +0.103002298735098170, 0.102952564550466960, 0.102902830108454790, 0.102853095409185520, 0.102803360452783100, 0.102753625239372700, 0.102703889769078250, 0.102654154042024060, +0.102604418058334060, 0.102554681818133440, 0.102504945321546140, 0.102455208568696460, 0.102405471559708310, 0.102355734294706930, 0.102305996773816220, 0.102256258997160510, +0.102206520964863710, 0.102156782677051060, 0.102107044133846440, 0.102057305335374230, 0.102007566281758290, 0.101957826973123890, 0.101908087409594920, 0.101858347591295740, +0.101808607518350230, 0.101758867190883660, 0.101709126609019910, 0.101659385772882920, 0.101609644682597890, 0.101559903338288770, 0.101510161740079860, 0.101460419888095120, +0.101410677782459780, 0.101360935423297730, 0.101311192810733350, 0.101261449944890540, 0.101211706825894560, 0.101161963453869310, 0.101112219828939140, 0.101062475951227980, +0.101012731820861080, 0.100962987437962350, 0.100913242802656150, 0.100863497915066410, 0.100813752775318340, 0.100764007383535910, 0.100714261739843020, 0.100664515844364910, +0.100614769697225520, 0.100565023298549190, 0.100515276648459870, 0.100465529747082810, 0.100415782594541910, 0.100366035190961560, 0.100316287536465680, 0.100266539631179510, +0.100216791475227010, 0.100167043068732530, 0.100117294411819990, 0.100067545504614660, 0.100017796347240460, 0.099968046939821781, 0.099918297282482541, 0.099868547375348005, +0.099818797218542088, 0.099769046812188733, 0.099719296156413215, 0.099669545251339448, 0.099619794097091832, 0.099570042693794270, 0.099520291041572048, 0.099470539140549111, +0.099420786990849816, 0.099371034592598120, 0.099321281945919271, 0.099271529050937210, 0.099221775907776338, 0.099172022516560585, 0.099122268877415209, 0.099072514990464169, +0.099022760855831837, 0.098973006473642169, 0.098923251844020413, 0.098873496967090538, 0.098823741842976473, 0.098773986471803507, 0.098724230853695569, 0.098674474988777044, +0.098624718877171905, 0.098574962519005396, 0.098525205914401490, 0.098475449063484558, 0.098425691966378570, 0.098375934623208802, 0.098326177034099183, 0.098276419199174125, +0.098226661118557587, 0.098176902792374829, 0.098127144220749821, 0.098077385403806949, 0.098027626341670171, 0.097977867034464761, 0.097928107482314689, 0.097878347685344355, +0.097828587643677703, 0.097778827357440035, 0.097729066826755279, 0.097679306051747433, 0.097629545032541759, 0.097579783769262213, 0.097530022262033209, 0.097480260510978717, +0.097430498516224012, 0.097380736277893065, 0.097330973796110262, 0.097281211070999601, 0.097231448102686344, 0.097181684891294473, 0.097131921436948376, 0.097082157739772051, +0.097032393799890759, 0.096982629617428498, 0.096932865192509654, 0.096883100525258198, 0.096833335615799446, 0.096783570464257340, 0.096733805070755879, 0.096684039435420352, +0.096634273558374714, 0.096584507439743394, 0.096534741079650363, 0.096484974478220922, 0.096435207635579057, 0.096385440551849152, 0.096335673227155222, 0.096285905661622539, +0.096236137855375103, 0.096186369808537314, 0.096136601521233156, 0.096086832993587945, 0.096037064225725638, 0.095987295217770691, 0.095937525969847046, 0.095887756482080033, +0.095837986754593638, 0.095788216787511829, 0.095738446580959910, 0.095688676135061879, 0.095638905449942163, 0.095589134525724748, 0.095539363362534921, 0.095489591960496695, +0.095439820319734497, 0.095390048440372299, 0.095340276322535417, 0.095290503966347848, 0.095240731371934020, 0.095190958539417919, 0.095141185468924860, 0.095091412160578856, +0.095041638614504306, 0.094991864830825223, 0.094942090809666910, 0.094892316551153377, 0.094842542055409054, 0.094792767322557939, 0.094742992352725333, 0.094693217146035263, +0.094643441702611700, 0.094593666022579972, 0.094543890106064080, 0.094494113953188463, 0.094444337564077122, 0.094394560938855385, 0.094344784077647237, 0.094295006980577134, +0.094245229647769060, 0.094195452079348360, 0.094145674275439031, 0.094095896236165516, 0.094046117961651826, 0.093996339452023278, 0.093946560707403884, 0.093896781727918086, +0.093847002513689881, 0.093797223064844629, 0.093747443381506312, 0.093697663463798944, 0.093647883311847854, 0.093598102925777069, 0.093548322305711015, 0.093498541451773720, +0.093448760364090500, 0.093398979042785393, 0.093349197487982843, 0.093299415699806848, 0.093249633678382751, 0.093199851423834579, 0.093150068936286773, 0.093100286215863359, +0.093050503262689668, 0.093000720076889712, 0.092950936658587974, 0.092901153007908438, 0.092851369124976463, 0.092801585009916060, 0.092751800662851269, 0.092702016083907407, +0.092652231273208499, 0.092602446230879029, 0.092552660957042995, 0.092502875451825742, 0.092453089715351308, 0.092403303747744150, 0.092353517549128294, 0.092303731119629071, +0.092253944459370532, 0.092204157568477135, 0.092154370447072892, 0.092104583095283174, 0.092054795513231993, 0.092005007701043834, 0.091955219658842707, 0.091905431386753972, +0.091855642884901653, 0.091805854153409791, 0.091756065192403730, 0.091706276002007509, 0.091656486582345598, 0.091606696933542037, 0.091556907055722170, 0.091507116949010023, +0.091457326613530107, 0.091407536049406421, 0.091357745256764336, 0.091307954235727878, 0.091258162986421545, 0.091208371508969363, 0.091158579803496689, 0.091108787870127578, +0.091058995708986484, 0.091009203320197463, 0.090959410703885885, 0.090909617860175762, 0.090859824789191607, 0.090810031491057444, 0.090760237965898646, 0.090710444213839253, +0.090660650235003318, 0.090610856029516185, 0.090561061597501921, 0.090511266939084997, 0.090461472054389466, 0.090411676943540686, 0.090361881606662725, 0.090312086043880066, +0.090262290255316735, 0.090212494241098132, 0.090162698001348282, 0.090112901536191697, 0.090063104845752417, 0.090013307930155814, 0.089963510789525941, 0.089913713423987282, +0.089863915833663918, 0.089814118018681194, 0.089764319979163176, 0.089714521715233905, 0.089664723227018781, 0.089614924514641855, 0.089565125578227614, 0.089515326417900110, +0.089465527033784742, 0.089415727426005551, 0.089365927594687047, 0.089316127539953286, 0.089266327261929637, 0.089216526760740170, 0.089166726036509394, 0.089116925089361351, +0.089067123919421440, 0.089017322526813727, 0.088967520911662698, 0.088917719074092433, 0.088867917014228304, 0.088818114732194392, 0.088768312228114751, 0.088718509502114767, +0.088668706554318508, 0.088618903384850484, 0.088569099993834763, 0.088519296381396731, 0.088469492547660455, 0.088419688492750448, 0.088369884216790776, 0.088320079719906838, +0.088270275002222703, 0.088220470063862882, 0.088170664904951443, 0.088120859525613784, 0.088071053925973974, 0.088021248106156524, 0.087971442066285530, 0.087921635806486362, +0.087871829326883102, 0.087822022627600263, 0.087772215708761939, 0.087722408570493501, 0.087672601212919060, 0.087622793636162669, 0.087572985840349726, 0.087523177825604329, +0.087473369592050987, 0.087423561139813769, 0.087373752469018101, 0.087323943579788052, 0.087274134472248133, 0.087224325146522438, 0.087174515602736383, 0.087124705841014033, +0.087074895861479915, 0.087025085664258123, 0.086975275249474057, 0.086925464617251799, 0.086875653767715888, 0.086825842700990391, 0.086776031417200722, 0.086726219916470990, +0.086676408198925262, 0.086626596264688951, 0.086576784113886154, 0.086526971746641396, 0.086477159163078771, 0.086427346363323679, 0.086377533347500229, 0.086327720115732948, +0.086277906668145915, 0.086228093004864573, 0.086178279126012988, 0.086128465031715701, 0.086078650722096819, 0.086028836197281744, 0.085979021457394583, 0.085929206502559863, +0.085879391332901692, 0.085829575948545483, 0.085779760349615333, 0.085729944536235350, 0.085680128508530934, 0.085630312266626193, 0.085580495810645682, 0.085530679140713495, +0.085480862256955045, 0.085431045159494429, 0.085381227848456212, 0.085331410323964491, 0.085281592586144664, 0.085231774635120869, 0.085181956471017645, 0.085132138093959073, +0.085082319504070608, 0.085032500701476346, 0.084982681686300826, 0.084932862458668157, 0.084883043018703780, 0.084833223366531790, 0.084783403502276297, 0.084733583426062742, +0.084683763138015233, 0.084633942638258311, 0.084584121926916098, 0.084534301004114007, 0.084484479869976176, 0.084434658524627143, 0.084384836968191018, 0.084335015200793256, +0.084285193222557939, 0.084235371033609646, 0.084185548634072488, 0.084135726024071891, 0.084085903203731979, 0.084036080173177319, 0.083986256932532005, 0.083936433481921507, +0.083886609821469907, 0.083836785951301798, 0.083786961871541277, 0.083737137582313784, 0.083687313083743456, 0.083637488375954402, 0.083587663459072065, 0.083537838333220579, +0.083488012998524486, 0.083438187455107921, 0.083388361703096339, 0.083338535742613851, 0.083288709573785008, 0.083238883196733962, 0.083189056611586154, 0.083139229818465693, +0.083089402817497160, 0.083039575608804692, 0.082989748192513715, 0.082939920568748368, 0.082890092737633217, 0.082840264699292399, 0.082790436453851354, 0.082740608001434221, +0.082690779342165122, 0.082640950476169525, 0.082591121403571541, 0.082541292124495763, 0.082491462639066315, 0.082441632947408652, 0.082391803049646897, 0.082341972945905645, +0.082292142636309004, 0.082242312120982458, 0.082192481400050130, 0.082142650473636614, 0.082092819341866005, 0.082042988004863801, 0.081993156462754124, 0.081943324715661570, +0.081893492763710246, 0.081843660607025637, 0.081793828245731878, 0.081743995679953108, 0.081694162909814780, 0.081644329935441060, 0.081594496756956500, 0.081544663374485266, +0.081494829788152812, 0.081444995998083289, 0.081395162004401278, 0.081345327807230916, 0.081295493406697672, 0.081245658802925697, 0.081195823996039571, 0.081145988986163445, +0.081096153773422788, 0.081046318357941752, 0.080996482739844916, 0.080946646919256432, 0.080896810896301782, 0.080846974671105090, 0.080797138243790978, 0.080747301614483569, +0.080697464783308345, 0.080647627750389458, 0.080597790515851059, 0.080547953079818629, 0.080498115442416321, 0.080448277603768728, 0.080398439563999988, 0.080348601323235597, +0.080298762881599692, 0.080248924239216896, 0.080199085396211331, 0.080149246352708509, 0.080099407108832565, 0.080049567664708110, 0.079999728020459279, 0.079949888176211584, +0.079900048132089160, 0.079850207888216618, 0.079800367444718120, 0.079750526801719138, 0.079700685959343848, 0.079650844917716387, 0.079601003676962268, 0.079551162237205639, +0.079501320598571096, 0.079451478761182817, 0.079401636725166272, 0.079351794490645652, 0.079301952057745539, 0.079252109426590098, 0.079202266597304824, 0.079152423570013897, +0.079102580344841897, 0.079052736921913017, 0.079002893301352725, 0.078953049483285215, 0.078903205467835066, 0.078853361255126472, 0.078803516845284902, 0.078753672238434561, +0.078703827434699586, 0.078653982434205474, 0.078604137237076419, 0.078554291843437027, 0.078504446253411450, 0.078454600467125199, 0.078404754484702452, 0.078354908306267831, +0.078305061931945474, 0.078255215361860919, 0.078205368596138330, 0.078155521634902303, 0.078105674478277043, 0.078055827126388033, 0.078005979579359452, 0.077956131837315937, +0.077906283900381637, 0.077856435768682078, 0.077806587442341424, 0.077756738921483853, 0.077706890206234891, 0.077657041296718687, 0.077607192193059893, 0.077557342895382672, +0.077507493403812536, 0.077457643718473662, 0.077407793839490688, 0.077357943766987777, 0.077308093501090455, 0.077258243041922900, 0.077208392389609748, 0.077158541544275150, +0.077108690506044658, 0.077058839275042437, 0.077008987851393110, 0.076959136235220882, 0.076909284426651237, 0.076859432425808394, 0.076809580232816976, 0.076759727847801162, +0.076709875270886463, 0.076660022502197084, 0.076610169541857190, 0.076560316389992333, 0.076510463046726679, 0.076460609512184863, 0.076410755786491091, 0.076360901869770861, +0.076311047762148379, 0.076261193463748281, 0.076211338974694759, 0.076161484295113338, 0.076111629425128197, 0.076061774364863971, 0.076011919114444881, 0.075962063673996438, +0.075912208043642834, 0.075862352223508706, 0.075812496213718258, 0.075762640014397004, 0.075712783625669161, 0.075662927047658909, 0.075613070280491787, 0.075563213324291986, +0.075513356179184157, 0.075463498845292479, 0.075413641322742517, 0.075363783611658436, 0.075313925712164900, 0.075264067624386116, 0.075214209348447594, 0.075164350884473555, +0.075114492232588648, 0.075064633392917052, 0.075014774365584319, 0.074964915150714656, 0.074915055748432699, 0.074865196158862668, 0.074815336382130074, 0.074765476418359150, +0.074715616267674090, 0.074665755930200445, 0.074615895406062394, 0.074566034695384600, 0.074516173798291299, 0.074466312714907987, 0.074416451445358897, 0.074366589989768681, +0.074316728348261543, 0.074266866520963037, 0.074217004507997356, 0.074167142309489162, 0.074117279925562676, 0.074067417356343437, 0.074017554601955651, 0.073967691662523968, +0.073917828538172622, 0.073867965229027152, 0.073818101735211764, 0.073768238056851121, 0.073718374194069430, 0.073668510146992258, 0.073618645915743811, 0.073568781500448308, +0.073518916901231288, 0.073469052118216985, 0.073419187151530035, 0.073369322001294687, 0.073319456667636479, 0.073269591150679617, 0.073219725450548792, 0.073169859567368198, +0.073119993501263414, 0.073070127252358633, 0.073020260820778532, 0.072970394206647346, 0.072920527410090613, 0.072870660431232553, 0.072820793270197859, 0.072770925927110722, +0.072721058402096722, 0.072671190695280080, 0.072621322806785016, 0.072571454736737082, 0.072521586485260511, 0.072471718052479983, 0.072421849438519703, 0.072371980643505252, +0.072322111667560848, 0.072272242510811172, 0.072222373173380428, 0.072172503655394210, 0.072122633956976726, 0.072072764078252666, 0.072022894019346237, 0.071973023780383033, +0.071923153361487260, 0.071873282762783611, 0.071823411984396304, 0.071773541026450907, 0.071723669889071667, 0.071673798572382805, 0.071623927076509900, 0.071574055401577158, +0.071524183547709286, 0.071474311515030517, 0.071424439303666404, 0.071374566913741208, 0.071324694345379580, 0.071274821598705781, 0.071224948673845365, 0.071175075570922577, +0.071125202290062098, 0.071075328831388188, 0.071025455195026385, 0.070975581381100938, 0.070925707389736553, 0.070875833221057435, 0.070825958875189193, 0.070776084352256061, +0.070726209652382258, 0.070676334775693378, 0.070626459722313670, 0.070576584492367811, 0.070526709085980036, 0.070476833503275937, 0.070426957744379765, 0.070377081809416195, +0.070327205698509462, 0.070277329411785175, 0.070227452949367553, 0.070177576311381301, 0.070127699497950668, 0.070077822509201235, 0.070027945345257234, 0.069978068006243385, +0.069928190492283909, 0.069878312803504400, 0.069828434940029119, 0.069778556901982744, 0.069728678689489537, 0.069678800302675079, 0.069628921741663616, 0.069579043006579397, +0.069529164097548030, 0.069479285014693734, 0.069429405758141244, 0.069379526328014779, 0.069329646724439961, 0.069279766947541011, 0.069229886997442647, 0.069180006874269132, +0.069130126578146031, 0.069080246109197621, 0.069030365467548593, 0.068980484653323210, 0.068930603666647050, 0.068880722507644390, 0.068830841176439922, 0.068780959673157907, +0.068731077997923939, 0.068681196150862267, 0.068631314132097165, 0.068581431941754228, 0.068531549579957704, 0.068481667046832312, 0.068431784342502300, 0.068381901467093276, +0.068332018420729501, 0.068282135203535682, 0.068232251815636080, 0.068182368257156289, 0.068132484528220572, 0.068082600628953646, 0.068032716559479775, 0.067982832319924566, +0.067932947910412267, 0.067883063331067597, 0.067833178582014833, 0.067783293663379568, 0.067733408575286064, 0.067683523317858596, 0.067633637891222759, 0.067583752295502827, +0.067533866530823522, 0.067483980597309090, 0.067434094495085167, 0.067384208224276002, 0.067334321785006326, 0.067284435177400390, 0.067234548401583813, 0.067184661457680858, +0.067134774345816259, 0.067084887066114277, 0.067034999618700519, 0.066985112003699276, 0.066935224221235240, 0.066885336271432699, 0.066835448154417262, 0.066785559870313205, +0.066735671419245260, 0.066685782801337676, 0.066635894016716088, 0.066586005065504758, 0.066536115947827976, 0.066486226663811349, 0.066436337213579152, 0.066386447597256121, +0.066336557814966515, 0.066286667866835972, 0.066236777752988751, 0.066186887473549588, 0.066136997028642758, 0.066087106418393882, 0.066037215642927236, 0.065987324702367553, +0.065937433596839123, 0.065887542326467541, 0.065837650891377109, 0.065787759291692546, 0.065737867527538144, 0.065687975599039522, 0.065638083506320957, 0.065588191249506739, +0.065538298828722488, 0.065488406244092481, 0.065438513495741465, 0.065388620583793730, 0.065338727508374883, 0.065288834269609214, 0.065238940867621456, 0.065189047302535899, +0.065139153574478179, 0.065089259683572570, 0.065039365629943807, 0.064989471413716193, 0.064939577035015350, 0.064889682493965553, 0.064839787790691550, 0.064789892925317644, +0.064739997897969442, 0.064690102708771235, 0.064640207357847340, 0.064590311845323378, 0.064540416171323625, 0.064490520335972829, 0.064440624339395292, 0.064390728181716650, +0.064340831863061165, 0.064290935383553613, 0.064241038743318282, 0.064191141942480795, 0.064141244981165454, 0.064091347859496994, 0.064041450577599732, 0.063991553135599274, +0.063941655533619940, 0.063891757771786475, 0.063841859850223157, 0.063791961769055647, 0.063742063528408222, 0.063692165128405198, 0.063642266569172212, 0.063592367850833553, +0.063542468973513969, 0.063492569937337776, 0.063442670742430596, 0.063392771388916747, 0.063342871876920961, 0.063292972206567558, 0.063243072377982171, 0.063193172391289090, +0.063143272246613091, 0.063093371944078463, 0.063043471483810856, 0.062993570865934559, 0.062943670090574347, 0.062893769157854496, 0.062843868067900682, 0.062793966820837196, +0.062744065416788786, 0.062694163855879781, 0.062644262138235804, 0.062594360263981172, 0.062544458233240188, 0.062494556046138516, 0.062444653702800446, 0.062394751203350737, +0.062344848547913716, 0.062294945736615009, 0.062245042769578943, 0.062195139646930270, 0.062145236368793301, 0.062095332935293693, 0.062045429346555742, 0.061995525602704223, +0.061945621703863446, 0.061895717650159061, 0.061845813441715379, 0.061795909078657160, 0.061746004561108729, 0.061696099889195728, 0.061646195063042482, 0.061596290082773300, +0.061546384948513840, 0.061496479660388410, 0.061446574218521788, 0.061396668623038289, 0.061346762874063557, 0.061296856971721922, 0.061246950916138139, 0.061197044707436539, +0.061147138345742771, 0.061097231831181154, 0.061047325163876461, 0.060997418343953010, 0.060947511371536457, 0.060897604246751121, 0.060847696969721782, 0.060797789540572751, +0.060747881959429692, 0.060697974226416929, 0.060648066341658792, 0.060598158305280925, 0.060548250117407665, 0.060498341778163781, 0.060448433287673596, 0.060398524646062775, +0.060348615853455634, 0.060298706909976962, 0.060248797815751078, 0.060198888570903643, 0.060148979175558982, 0.060099069629841878, 0.060049159933876654, 0.059999250087788975, +0.059949340091703170, 0.059899429945744015, 0.059849519650035841, 0.059799609204704313, 0.059749698609873760, 0.059699787865668964, 0.059649876972214251, 0.059599965929635290, +0.059550054738056420, 0.059500143397601964, 0.059450231908397592, 0.059400320270567644, 0.059350408484236894, 0.059300496549529680, 0.059250584466571665, 0.059200672235487188, +0.059150759856401038, 0.059100847329437538, 0.059050934654722366, 0.059001021832379853, 0.058951108862534789, 0.058901195745311510, 0.058851282480835689, 0.058801369069231654, +0.058751455510624204, 0.058701541805137661, 0.058651627952897717, 0.058601713954028696, 0.058551799808654957, 0.058501885516902150, 0.058451971078894639, 0.058402056494757194, +0.058352141764614167, 0.058302226888591227, 0.058252311866812720, 0.058202396699403434, 0.058152481386487716, 0.058102565928191234, 0.058052650324638341, 0.058002734575953820, +0.057952818682262014, 0.057902902643688615, 0.057852986460357955, 0.057803070132394822, 0.057753153659923583, 0.057703237043069892, 0.057653320281958118, 0.057603403376712589, +0.057553486327459005, 0.057503569134321697, 0.057453651797425474, 0.057403734316894675, 0.057353816692854984, 0.057303898925430745, 0.057253981014746769, 0.057204062960927393, +0.057154144764098302, 0.057104226424383848, 0.057054307941908827, 0.057004389316797598, 0.056954470549175837, 0.056904551639167897, 0.056854632586898581, 0.056804713392492240, +0.056754794056074552, 0.056704874577769890, 0.056654954957702591, 0.056605035195998347, 0.056555115292781524, 0.056505195248176904, 0.056455275062308859, 0.056405354735303059, +0.056355434267283885, 0.056305513658376119, 0.056255592908704126, 0.056205672018393590, 0.056155750987568885, 0.056105829816354792, 0.056055908504875684, 0.056005987053257253, +0.055956065461623850, 0.055906143730100284, 0.055856221858810916, 0.055806299847881435, 0.055756377697436202, 0.055706455407600032, 0.055656532978497278, 0.055606610410253630, +0.055556687702993462, 0.055506764856841126, 0.055456841871922326, 0.055406918748361414, 0.055356995486283214, 0.055307072085812078, 0.055257148547073705, 0.055207224870192459, +0.055157301055293158, 0.055107377102500153, 0.055057453011939150, 0.055007528783734522, 0.054957604418011063, 0.054907679914893155, 0.054857755274506488, 0.054807830496975435, +0.054757905582424805, 0.054707980530978965, 0.054658055342763620, 0.054608130017903135, 0.054558204556521883, 0.054508278958745562, 0.054458353224698539, 0.054408427354505642, +0.054358501348291226, 0.054308575206181008, 0.054258648928299347, 0.054208722514771060, 0.054158795965720527, 0.054108869281273446, 0.054058942461554196, 0.054009015506687588, +0.053959088416797994, 0.053909161192011126, 0.053859233832451357, 0.053809306338243504, 0.053759378709511939, 0.053709450946382367, 0.053659523048979176, 0.053609595017426730, +0.053559666851850735, 0.053509738552375577, 0.053459810119126074, 0.053409881552226597, 0.053359952851802867, 0.053310024017979254, 0.053260095050880578, 0.053210165950631216, +0.053160236717356889, 0.053110307351181975, 0.053060377852231284, 0.053010448220629211, 0.052960518456501453, 0.052910588559972403, 0.052860658531166886, 0.052810728370209274, +0.052760798077225286, 0.052710867652339302, 0.052660937095676152, 0.052611006407360210, 0.052561075587517200, 0.052511144636271503, 0.052461213553747499, 0.052411282340070905, +0.052361350995366103, 0.052311419519757922, 0.052261487913370749, 0.052211556176330304, 0.052161624308760965, 0.052111692310787570, 0.052061760182534500, 0.052011827924127466, +0.051961895535690868, 0.051911963017349530, 0.051862030369227839, 0.051812097591451521, 0.051762164684144955, 0.051712231647432980, 0.051662298481439980, 0.051612365186291677, +0.051562431762112462, 0.051512498209026723, 0.051462564527160186, 0.051412630716637230, 0.051362696777582706, 0.051312762710120988, 0.051262828514377815, 0.051212894190477566, +0.051162959738545080, 0.051113025158704757, 0.051063090451082309, 0.051013155615802136, 0.050963220652989076, 0.050913285562767523, 0.050863350345263195, 0.050813415000600493, +0.050763479528904254, 0.050713543930298872, 0.050663608204910074, 0.050613672352862252, 0.050563736374279813, 0.050513800269288471, 0.050463864038012632, 0.050413927680577127, +0.050363991197106363, 0.050314054587726066, 0.050264117852560630, 0.050214180991734900, 0.050164244005373275, 0.050114306893601482, 0.050064369656543928, 0.050014432294325444, +0.049964494807070436, 0.049914557194904632, 0.049864619457952439, 0.049814681596338700, 0.049764743610187810, 0.049714805499625501, 0.049664867264776182, 0.049614928905764251, +0.049564990422715442, 0.049515051815754156, 0.049465113085005244, 0.049415174230593099, 0.049365235252643469, 0.049315296151280746, 0.049265356926629783, 0.049215417578814986, +0.049165478107962089, 0.049115538514195499, 0.049065598797640060, 0.049015658958420180, 0.048965718996661592, 0.048915778912488717, 0.048865838706026385, 0.048815898377399018, +0.048765957926732342, 0.048716017354150778, 0.048666076659779171, 0.048616135843741928, 0.048566194906164782, 0.048516253847172154, 0.048466312666888452, 0.048416371365439408, +0.048366429942949436, 0.048316488399543389, 0.048266546735345674, 0.048216604950482043, 0.048166663045076892, 0.048116721019255092, 0.048066778873141036, 0.048016836606860486, +0.047966894220537841, 0.047916951714297953, 0.047867009088265251, 0.047817066342565467, 0.047767123477323016, 0.047717180492662763, 0.047667237388709108, 0.047617294165587805, +0.047567350823423268, 0.047517407362339906, 0.047467463782463477, 0.047417520083918384, 0.047367576266829491, 0.047317632331321212, 0.047267688277519294, 0.047217744105548159, +0.047167799815532666, 0.047117855407597227, 0.047067910881867597, 0.047017966238468184, 0.046968021477523859, 0.046918076599159031, 0.046868131603499459, 0.046818186490669565, +0.046768241260794194, 0.046718295913997780, 0.046668350450406071, 0.046618404870143487, 0.046568459173334444, 0.046518513360104700, 0.046468567430578672, 0.046418621384881224, +0.046368675223136778, 0.046318728945471087, 0.046268782552008579, 0.046218836042874113, 0.046168889418192111, 0.046118942678088332, 0.046068995822687191, 0.046019048852113560, +0.045969101766491868, 0.045919154565947869, 0.045869207250605976, 0.045819259820591068, 0.045769312276027561, 0.045719364617041229, 0.045669416843756479, 0.045619468956298183, +0.045569520954790776, 0.045519572839360006, 0.045469624610130308, 0.045419676267226108, 0.045369727810773156, 0.045319779240895884, 0.045269830557719166, 0.045219881761367424, +0.045169932851966424, 0.045119983829640595, 0.045070034694514802, 0.045020085446713480, 0.044970136086362390, 0.044920186613585961, 0.044870237028509057, 0.044820287331256127, +0.044770337521952919, 0.044720387600723860, 0.044670437567693844, 0.044620487422987284, 0.044570537166729950, 0.044520586799046268, 0.044470636320060680, 0.044420685729898948, +0.044370735028685500, 0.044320784216545214, 0.044270833293602520, 0.044220882259983191, 0.044170931115811655, 0.044120979861212793, 0.044071028496311032, 0.044021077021232147, +0.043971125436100572, 0.043921173741041181, 0.043871221936178414, 0.043821270021638034, 0.043771317997544475, 0.043721365864022629, 0.043671413621196919, 0.043621461269193119, +0.043571508808135664, 0.043521556238149003, 0.043471603559358883, 0.043421650771889760, 0.043371697875866512, 0.043321744871413576, 0.043271791758656718, 0.043221838537720381, +0.043171885208729451, 0.043121931771808356, 0.043071978227082884, 0.043022024574677464, 0.042972070814716982, 0.042922116947325881, 0.042872162972629926, 0.042822208890753569, +0.042772254701821687, 0.042722300405958723, 0.042672346003290458, 0.042622391493941321, 0.042572436878036211, 0.042522482155699565, 0.042472527327057155, 0.042422572392233425, +0.042372617351352823, 0.042322662204541117, 0.042272706951922763, 0.042222751593622633, 0.042172796129765183, 0.042122840560476195, 0.042072884885880096, 0.042022929106101788, +0.041972973221265711, 0.041923017231497647, 0.041873061136922039, 0.041823104937663780, 0.041773148633847318, 0.041723192225598421, 0.041673235713041545, 0.041623279096301584, +0.041573322375502979, 0.041523365550771511, 0.041473408622231631, 0.041423451590007786, 0.041373494454225751, 0.041323537215009983, 0.041273579872485373, 0.041223622426776373, +0.041173664878008755, 0.041123707226306976, 0.041073749471795928, 0.041023791614600062, 0.040973833654845165, 0.040923875592655680, 0.040873917428156506, 0.040823959161472100, +0.040774000792728235, 0.040724042322049368, 0.040674083749560400, 0.040624125075385771, 0.040574166299651278, 0.040524207422481369, 0.040474248444000500, 0.040424289364334454, +0.040374330183607678, 0.040324370901945079, 0.040274411519471115, 0.040224452036311559, 0.040174492452590874, 0.040124532768433960, 0.040074572983965266, 0.040024613099310588, +0.039974653114594375, 0.039924693029941533, 0.039874732845476511, 0.039824772561325099, 0.039774812177611758, 0.039724851694461390, 0.039674891111998449, 0.039624930430348718, +0.039574969649636665, 0.039525008769986741, 0.039475047791524741, 0.039425086714375120, 0.039375125538662785, 0.039325164264512193, 0.039275202892049131, 0.039225241421398063, +0.039175279852683889, 0.039125318186031072, 0.039075356421565406, 0.039025394559411349, 0.038975432599693806, 0.038925470542537234, 0.038875508388067435, 0.038825546136408859, +0.038775583787686425, 0.038725621342024584, 0.038675658799549130, 0.038625696160384533, 0.038575733424655693, 0.038525770592487081, 0.038475807664004477, 0.038425844639332365, +0.038375881518595188, 0.038325918301918754, 0.038275954989427527, 0.038225991581246413, 0.038176028077499875, 0.038126064478313709, 0.038076100783812385, 0.038026136994120802, +0.037976173109363437, 0.037926209129666086, 0.037876245055153211, 0.037826280885949720, 0.037776316622180083, 0.037726352263970100, 0.037676387811444237, 0.037626423264727406, +0.037576458623944070, 0.037526493889220032, 0.037476529060679761, 0.037426564138447721, 0.037376599122649720, 0.037326634013410215, 0.037276668810854126, 0.037226703515105923, +0.037176738126291402, 0.037126772644535039, 0.037076807069961748, 0.037026841402695986, 0.036976875642863574, 0.036926909790588963, 0.036876943845997087, 0.036826977809212402, +0.036777011680360717, 0.036727045459566503, 0.036677079146954679, 0.036627112742649709, 0.036577146246777402, 0.036527179659462228, 0.036477212980828663, 0.036427246211002511, +0.036377279350108239, 0.036327312398270771, 0.036277345355614575, 0.036227378222265468, 0.036177410998347904, 0.036127443683986821, 0.036077476279306686, 0.036027508784433296, +0.035977541199491141, 0.035927573524605134, 0.035877605759899747, 0.035827637905500788, 0.035777669961532733, 0.035727701928120505, 0.035677733805388578, 0.035627765593462764, +0.035577797292467531, 0.035527828902527807, 0.035477860423768062, 0.035427891856314120, 0.035377923200290443, 0.035327954455821514, 0.035277985623033137, 0.035228016702049801, +0.035178047692996428, 0.035128078595997488, 0.035078109411178796, 0.035028140138664829, 0.034978170778580508, 0.034928201331050325, 0.034878231796200074, 0.034828262174154252, +0.034778292465037768, 0.034728322668975110, 0.034678352786092090, 0.034628382816513190, 0.034578412760363331, 0.034528442617766997, 0.034478472388850004, 0.034428502073736822, +0.034378531672551949, 0.034328561185421186, 0.034278590612469018, 0.034228619953820379, 0.034178649209599739, 0.034128678379932928, 0.034078707464944416, 0.034028736464759138, +0.033978765379501570, 0.033928794209297543, 0.033878822954271519, 0.033828851614548447, 0.033778880190252797, 0.033728908681510385, 0.033678937088445708, 0.033628965411183688, +0.033578993649848815, 0.033529021804566891, 0.033479049875462422, 0.033429077862659883, 0.033379105766285090, 0.033329133586462535, 0.033279161323317138, 0.033229188976973405, +0.033179216547557136, 0.033129244035192830, 0.033079271440005414, 0.033029298762119373, 0.032979326001660529, 0.032929353158753373, 0.032879380233522833, 0.032829407226093399, +0.032779434136590888, 0.032729460965139796, 0.032679487711865046, 0.032629514376891135, 0.032579540960343885, 0.032529567462347780, 0.032479593883027312, 0.032429620222508303, +0.032379646480915243, 0.032329672658373068, 0.032279698755006268, 0.032229724770940667, 0.032179750706300754, 0.032129776561211458, 0.032079802335797283, 0.032029828030184046, +0.031979853644496237, 0.031929879178858790, 0.031879904633396204, 0.031829930008234301, 0.031779955303497580, 0.031729980519310960, 0.031680005655798947, 0.031630030713087370, +0.031580055691300707, 0.031530080590563912, 0.031480105411001470, 0.031430130152739211, 0.031380154815901617, 0.031330179400613202, 0.031280203906999780, 0.031230228335185847, +0.031180252685296343, 0.031130276957455762, 0.031080301151789936, 0.031030325268423354, 0.030980349307480962, 0.030930373269087250, 0.030880397153368048, 0.030830420960447857, +0.030780444690451610, 0.030730468343503809, 0.030680491919730282, 0.030630515419255523, 0.030580538842204477, 0.030530562188701638, 0.030480585458872840, 0.030430608652842576, +0.030380631770735349, 0.030330654812676987, 0.030280677778791985, 0.030230700669205291, 0.030180723484041400, 0.030130746223426146, 0.030080768887484025, 0.030030791476339982, +0.029980813990118517, 0.029930836428945458, 0.029880858792945310, 0.029830881082243015, 0.029780903296963073, 0.029730925437231319, 0.029680947503172250, 0.029630969494910810, +0.029580991412571506, 0.029531013256280166, 0.029481035026161291, 0.029431056722339387, 0.029381078344940286, 0.029331099894088487, 0.029281121369908937, 0.029231142772526142, +0.029181164102065935, 0.029131185358652816, 0.029081206542411732, 0.029031227653467190, 0.028981248691945023, 0.028931269657969733, 0.028881290551666269, 0.028831311373159137, +0.028781332122574169, 0.028731352800035869, 0.028681373405669189, 0.028631393939598630, 0.028581414401950032, 0.028531434792847896, 0.028481455112417176, 0.028431475360782370, +0.028381495538069325, 0.028331515644402536, 0.028281535679906517, 0.028231555644707102, 0.028181575538928798, 0.028131595362696556, 0.028081615116134880, 0.028031634799369608, +0.027981654412525252, 0.027931673955726762, 0.027881693429098641, 0.027831712832766729, 0.027781732166855536, 0.027731751431490013, 0.027681770626794666, 0.027631789752895340, +0.027581808809916536, 0.027531827797983213, 0.027481846717219875, 0.027431865567752362, 0.027381884349705187, 0.027331903063202857, 0.027281921708371216, 0.027231940285334769, +0.027181958794218471, 0.027131977235146831, 0.027081995608245691, 0.027032013913639564, 0.026982032151453401, 0.026932050321811715, 0.026882068424840349, 0.026832086460663811, +0.026782104429407053, 0.026732122331194593, 0.026682140166152273, 0.026632157934404599, 0.026582175636076531, 0.026532193271292581, 0.026482210840178589, 0.026432228342859073, +0.026382245779458541, 0.026332263150102841, 0.026282280454916481, 0.026232297694024419, 0.026182314867551168, 0.026132331975622577, 0.026082349018363156, 0.026032365995897859, +0.025982382908351205, 0.025932399755849038, 0.025882416538515873, 0.025832433256476665, 0.025782449909855929, 0.025732466498779513, 0.025682483023371932, 0.025632499483758141, +0.025582515880062658, 0.025532532212411332, 0.025482548480928673, 0.025432564685739199, 0.025382580826968759, 0.025332596904741864, 0.025282612919183479, 0.025232628870418116, +0.025182644758571626, 0.025132660583768524, 0.025082676346133773, 0.025032692045791883, 0.024982707682868709, 0.024932723257488767, 0.024882738769777014, 0.024832754219857971, +0.024782769607857486, 0.024732784933900080, 0.024682800198110710, 0.024632815400613895, 0.024582830541535483, 0.024532845620999999, 0.024482860639132398, 0.024432875596057203, +0.024382890491900264, 0.024332905326786097, 0.024282920100839222, 0.024232934814185494, 0.024182949466949426, 0.024132964059255985, 0.024082978591229692, 0.024032993062996392, +0.023983007474680611, 0.023933021826407313, 0.023883036118301018, 0.023833050350487574, 0.023783064523091504, 0.023733078636237772, 0.023683092690050901, 0.023633106684656742, +0.023583120620179816, 0.023533134496745090, 0.023483148314477082, 0.023433162073501646, 0.023383175773943308, 0.023333189415926586, 0.023283202999577333, 0.023233216525020074, +0.023183229992379772, 0.023133243401780954, 0.023083256753349466, 0.023033270047209842, 0.022983283283487040, 0.022933296462305585, 0.022883309583791336, 0.022833322648068810, +0.022783335655262978, 0.022733348605498364, 0.022683361498900823, 0.022633374335594876, 0.022583387115705494, 0.022533399839357201, 0.022483412506675852, 0.022433425117785972, +0.022383437672812083, 0.022333450171880046, 0.022283462615114383, 0.022233475002640064, 0.022183487334581614, 0.022133499611064887, 0.022083511832214416, 0.022033523998155162, +0.021983536109011652, 0.021933548164909750, 0.021883560165973974, 0.021833572112329301, 0.021783584004100253, 0.021733595841412687, 0.021683607624391133, 0.021633619353160560, +0.021583631027845492, 0.021533642648571792, 0.021483654215463988, 0.021433665728647047, 0.021383677188245496, 0.021333688594385197, 0.021283699947190676, 0.021233711246786462, +0.021183722493298415, 0.021133733686851060, 0.021083744827569369, 0.021033755915577875, 0.020983766951002434, 0.020933777933967578, 0.020883788864598275, 0.020833799743019056, +0.020783810569355781, 0.020733821343732979, 0.020683832066275627, 0.020633842737108249, 0.020583853356356707, 0.020533863924145534, 0.020483874440599698, 0.020433884905843733, +0.020383895320003502, 0.020333905683203531, 0.020283915995568353, 0.020233926257223825, 0.020183936468294486, 0.020133946628905303, 0.020083956739180810, 0.020033966799246870, +0.019983976809228015, 0.019933986769249214, 0.019883996679435006, 0.019834006539911245, 0.019784016350802472, 0.019734026112233658, 0.019684035824329333, 0.019634045487215365, +0.019584055101016278, 0.019534064665857057, 0.019484074181862231, 0.019434083649157663, 0.019384093067867886, 0.019334102438117430, 0.019284111760032165, 0.019234121033736621, +0.019184130259355770, 0.019134139437014152, 0.019084148566837631, 0.019034157648950736, 0.018984166683478448, 0.018934175670545301, 0.018884184610277157, 0.018834193502798552, +0.018784202348234462, 0.018734211146709423, 0.018684219898349300, 0.018634228603278628, 0.018584237261622383, 0.018534245873505103, 0.018484254439052650, 0.018434262958389562, +0.018384271431640373, 0.018334279858930949, 0.018284288240385825, 0.018234296576129981, 0.018184304866287953, 0.018134313110985605, 0.018084321310347474, 0.018034329464498539, +0.017984337573563339, 0.017934345637667739, 0.017884353656936271, 0.017834361631493923, 0.017784369561465226, 0.017734377446976046, 0.017684385288150927, 0.017634393085114840, +0.017584400837992332, 0.017534408546909262, 0.017484416211990171, 0.017434423833360042, 0.017384431411143406, 0.017334438945466137, 0.017284446436452772, 0.017234453884227844, +0.017184461288917225, 0.017134468650645454, 0.017084475969537515, 0.017034483245717939, 0.016984490479312598, 0.016934497670446032, 0.016884504819243220, 0.016834511925828705, +0.016784518990328352, 0.016734526012866704, 0.016684532993568736, 0.016634539932558996, 0.016584546829963350, 0.016534553685906336, 0.016484560500512935, 0.016434567273907692, +0.016384574006216474, 0.016334580697563824, 0.016284587348074274, 0.016234593957873703, 0.016184600527086642, 0.016134607055838083, 0.016084613544252564, 0.016034619992455954, +0.015984626400572792, 0.015934632768728065, 0.015884639097046314, 0.015834645385653406, 0.015784651634673887, 0.015734657844232738, 0.015684664014454501, 0.015634670145465050, +0.015584676237388920, 0.015534682290351100, 0.015484688304476132, 0.015434694279889886, 0.015384700216716904, 0.015334706115081729, 0.015284711975110232, 0.015234717796926953, +0.015184723580656883, 0.015134729326424557, 0.015084735034355853, 0.015034740704575313, 0.014984746337207918, 0.014934751932378216, 0.014884757490212076, 0.014834763010834045, +0.014784768494369103, 0.014734773940941798, 0.014684779350678002, 0.014634784723702257, 0.014584790060139552, 0.014534795360114426, 0.014484800623752755, 0.014434805851179084, +0.014384811042518398, 0.014334816197895240, 0.014284821317435487, 0.014234826401263679, 0.014184831449504361, 0.014134836462283409, 0.014084841439725366, 0.014034846381955219, +0.013984851289097513, 0.013934856161278122, 0.013884860998621591, 0.013834865801252906, 0.013784870569296614, 0.013734875302878589, 0.013684880002123376, 0.013634884667155962, +0.013584889298100894, 0.013534893895084046, 0.013484898458229963, 0.013434902987663635, 0.013384907483509605, 0.013334911945893750, 0.013284916374940616, 0.013234920770774745, +0.013184925133522018, 0.013134929463306978, 0.013084933760254613, 0.013034938024489471, 0.012984942256137427, 0.012934946455323027, 0.012884950622171262, 0.012834954756806675, +0.012784958859355147, 0.012734962929941222, 0.012684966968689888, 0.012634970975725694, 0.012584974951174515, 0.012534978895160901, 0.012484982807809837, 0.012434986689245874, +0.012384990539594886, 0.012334994358981425, 0.012284998147530032, 0.012235001905366588, 0.012185005632615639, 0.012135009329402176, 0.012085012995850746, 0.012035016632087227, +0.011985020238236168, 0.011935023814422557, 0.011885027360770942, 0.011835030877407202, 0.011785034364455887, 0.011735037822041985, 0.011685041250290044, 0.011635044649325946, +0.011585048019274234, 0.011535051360259903, 0.011485054672407499, 0.011435057955842903, 0.011385061210690661, 0.011335064437075324, 0.011285067635122768, 0.011235070804957545, +0.011185073946704644, 0.011135077060488613, 0.011085080146435333, 0.011035083204669355, 0.010985086235315668, 0.010935089238498820, 0.010885092214344695, 0.010835095162977839, +0.010785098084523244, 0.010735100979105461, 0.010685103846850369, 0.010635106687882517, 0.010585109502326899, 0.010535112290308063, 0.010485115051951890, 0.010435117787382930, +0.010385120496726175, 0.010335123180106175, 0.010285125837648811, 0.010235128469478633, 0.010185131075720189, 0.010135133656499361, 0.010085136211940699, 0.010035138742169197, +0.009985141247309405, 0.009935143727487203, 0.009885146182827142, 0.009835148613454215, 0.009785151019492972, 0.009735153401069296, 0.009685155758307737, 0.009635158091333288, +0.009585160400270500, 0.009535162685245254, 0.009485164946382102, 0.009435167183806039, 0.009385169397641613, 0.009335171588014706, 0.009285173755049872, 0.009235175898871659, +0.009185178019605951, 0.009135180117377297, 0.009085182192310694, 0.009035184244530689, 0.008985186274163171, 0.008935188281332685, 0.008885190266164227, 0.008835192228782351, +0.008785194169312938, 0.008735196087880540, 0.008685197984610153, 0.008635199859626325, 0.008585201713054942, 0.008535203545020555, 0.008485205355648159, 0.008435207145062306, +0.008385208913388878, 0.008335210660752429, 0.008285212387277509, 0.008235214093090002, 0.008185215778314459, 0.008135217443075878, 0.008085219087498808, 0.008035220711709135, +0.007985222315831410, 0.007935223899990629, 0.007885225464311346, 0.007835227008919440, 0.007785228533939469, 0.007735230039496426, 0.007685231525714864, 0.007635232992720667, +0.007585234440638388, 0.007535235869593022, 0.007485237279709124, 0.007435238671112575, 0.007385240043927930, 0.007335241398280185, 0.007285242734293892, 0.007235244052094937, +0.007185245351807872, 0.007135246633557249, 0.007085247897468953, 0.007035249143667537, 0.006985250372277999, 0.006935251583424892, 0.006885252777234099, 0.006835253953830174, +0.006785255113338114, 0.006735256255882473, 0.006685257381589134, 0.006635258490582652, 0.006585259582988025, 0.006535260658929804, 0.006485261718533876, 0.006435262761924793, +0.006385263789227553, 0.006335264800566710, 0.006285265796068149, 0.006235266775856423, 0.006185267740056086, 0.006135268688793025, 0.006085269622191791, 0.006035270540377383, +0.005985271443474355, 0.005935272331608592, 0.005885273204904649, 0.005835274063487523, 0.005785274907481767, 0.005735275737013268, 0.005685276552206580, 0.005635277353186701, +0.005585278140078183, 0.005535278913006915, 0.005485279672097450, 0.005435280417474785, 0.005385281149263474, 0.005335281867589406, 0.005285282572577133, 0.005235283264351209, +0.005185283943037521, 0.005135284608760623, 0.005085285261645514, 0.005035285901816748, 0.004985286529400210, 0.004935287144520456, 0.004885287747302485, 0.004835288337870850, +0.004785288916351439, 0.004735289482868805, 0.004685290037547947, 0.004635290580513421, 0.004585291111891111, 0.004535291631805574, 0.004485292140381809, 0.004435292637744368, +0.004385293124019140, 0.004335293599330679, 0.004285294063803541, 0.004235294517563611, 0.004185294960735444, 0.004135295393444041, 0.004085295815813955, 0.004035296227971073, +0.003985296630039951, 0.003935297022145587, 0.003885297404412537, 0.003835297776966687, 0.003785298139932593, 0.003735298493435253, 0.003685298837599223, 0.003635299172550391, +0.003585299498413309, 0.003535299815312980, 0.003485300123373957, 0.003435300422722127, 0.003385300713482047, 0.003335300995778715, 0.003285301269736686, 0.003235301535481848, +0.003185301793138756, 0.003135302042831966, 0.003085302284687364, 0.003035302518829507, 0.002985302745383394, 0.002935302964473579, 0.002885303176225952, 0.002835303380765067, +0.002785303578215922, 0.002735303768703075, 0.002685303952352413, 0.002635304129288491, 0.002585304299636308, 0.002535304463520421, 0.002485304621066716, 0.002435304772399750, +0.002385304917644522, 0.002335305056925588, 0.002285305190368835, 0.002235305318098819, 0.002185305440240096, 0.002135305556918553, 0.002085305668258747, 0.002035305774385676, +0.001985305875423896, 0.001935305971499296, 0.001885306062736431, 0.001835306149260301, 0.001785306231195462, 0.001735306308667801, 0.001685306381801874, 0.001635306450722681, +0.001585306515554778, 0.001535306576424053, 0.001485306633455062, 0.001435306686772804, 0.001385306736501835, 0.001335306782768043, 0.001285306825695984, 0.001235306865410214, +0.001185306902036622, 0.001135306935699761, 0.001085306966524634, 0.001035306994635795, 0.000985307020159133, 0.000935307043219203, 0.000885307063941005, 0.000835307082449096, +0.000785307098869363, 0.000735307113326362, 0.000685307125945094, 0.000635307136850113, 0.000585307146167309, 0.000535307154021237, 0.000485307160536898, 0.000435307165838846, +0.000385307170052970, 0.000335307173303827, 0.000285307175716415, 0.000235307177415291, 0.000185307178526344, 0.000135307179174129, 0.000085307179483201, 0.000035307179579450, +-0.000014692820412569, -0.000064692820367856, -0.000114692820161855, -0.000164692819668678, -0.000214692818763769, -0.000264692817322128, -0.000314692815219199, -0.000364692812329094, +-0.000414692808527257, -0.000464692803688688, -0.000514692797688831, -0.000564692790401798, -0.000614692781703032, -0.000664692771467535, -0.000714692759570750, -0.000764692745886789, +-0.000814692730291096, -0.000864692712659116, -0.000914692692864960, -0.000964692670784071, -0.001014692646291452, -0.001064692619262544, -0.001114692589571461, -0.001164692557093647, +-0.001214692521704101, -0.001264692483278268, -0.001314692441690259, -0.001364692396815520, -0.001414692348529050, -0.001464692296706292, -0.001514692241221360, -0.001564692181949697, +-0.001614692118766304, -0.001664692051546625, -0.001714691980164771, -0.001764691904496188, -0.001814691824416319, -0.001864691739799276, -0.001914691650520504, -0.001964691556455003, +-0.002014691457478216, -0.002064691353464257, -0.002114691244288570, -0.002164691129826155, -0.002214691009952456, -0.002264690884541585, -0.002314690753468987, -0.002364690616609663, +-0.002414690473839055, -0.002464690325031278, -0.002514690170061775, -0.002564690008805546, -0.002614689841138036, -0.002664689666933358, -0.002714689486066956, -0.002764689298414273, +-0.002814689103849424, -0.002864688902247852, -0.002914688693484557, -0.002964688477434985, -0.003014688253973248, -0.003064688022974790, -0.003114687784314611, -0.003164687537868158, +-0.003214687283509542, -0.003264687021114207, -0.003314686750557155, -0.003364686471713830, -0.003414686184458345, -0.003464685888666144, -0.003514685584212229, -0.003564685270972043, +-0.003614684948819701, -0.003664684617630646, -0.003714684277279879, -0.003764683927642846, -0.003814683568593659, -0.003864683200007764, -0.003914682821760604, -0.003964682433726293, +-0.004014682035780276, -0.004064681627797554, -0.004114681209653572, -0.004164680781222442, -0.004214680342379612, -0.004264679893000080, -0.004314679432959292, -0.004364678962131362, +-0.004414678480391734, -0.004464677987615410, -0.004514677483677836, -0.004564676968453123, -0.004614676441816718, -0.004664675903643622, -0.004714675353809280, -0.004764674792187806, +-0.004814674218654644, -0.004864673633085242, -0.004914673035353711, -0.004964672425335498, -0.005014671802905603, -0.005064671167939473, -0.005114670520311221, -0.005164669859896293, +-0.005214669186569690, -0.005264668500206859, -0.005314667800681912, -0.005364667087870295, -0.005414666361647010, -0.005464665621887505, -0.005514664868465890, -0.005564664101257614, +-0.005614663320137677, -0.005664662524981526, -0.005714661715663275, -0.005764660892058370, -0.005814660054042256, -0.005864659201489048, -0.005914658334274192, -0.005964657452272691, +-0.006014656555359989, -0.006064655643410202, -0.006114654716298777, -0.006164653773900714, -0.006214652816091461, -0.006264651842745132, -0.006314650853737174, -0.006364649848942587, +-0.006414648828236821, -0.006464647791493989, -0.006514646738589537, -0.006564645669398468, -0.006614644583796229, -0.006664643481656934, -0.006714642362856032, -0.006764641227268523, +-0.006814640074769854, -0.006864638905234142, -0.006914637718536832, -0.006964636514553373, -0.007014635293157877, -0.007064634054225794, -0.007114632797632125, -0.007164631523252319, +-0.007214630230960490, -0.007264628920632085, -0.007314627592142108, -0.007364626245366005, -0.007414624880177894, -0.007464623496453220, -0.007514622094066987, -0.007564620672894643, +-0.007614619232810304, -0.007664617773689416, -0.007714616295406984, -0.007764614797838455, -0.007814613280857946, -0.007864611744340902, -0.007914610188162774, -0.007964608612197676, +-0.008014607016321057, -0.008064605400407919, -0.008114603764333714, -0.008164602107972555, -0.008214600431199889, -0.008264598733890722, -0.008314597015920503, -0.008364595277163349, +-0.008414593517494705, -0.008464591736789576, -0.008514589934923414, -0.008564588111770332, -0.008614586267205781, -0.008664584401104764, -0.008714582513342728, -0.008764580603793794, +-0.008814578672333408, -0.008864576718837018, -0.008914574743178742, -0.008964572745234031, -0.009014570724877888, -0.009064568681985762, -0.009114566616431770, -0.009164564528091361, +-0.009214562416839541, -0.009264560282551760, -0.009314558125102132, -0.009364555944366110, -0.009414553740218698, -0.009464551512535346, -0.009514549261190171, -0.009564546986058624, +-0.009614544687015707, -0.009664542363936874, -0.009714540016696241, -0.009764537645169259, -0.009814535249231374, -0.009864532828756710, -0.009914530383620711, -0.009964527913698389, +-0.010014525418865189, -0.010064522898995232, -0.010114520353963968, -0.010164517783646403, -0.010214515187917989, -0.010264512566652841, -0.010314509919726413, -0.010364507247013708, +-0.010414504548390180, -0.010464501823729948, -0.010514499072908461, -0.010564496295800726, -0.010614493492282193, -0.010664490662226984, -0.010714487805510547, -0.010764484922007891, +-0.010814482011594467, -0.010864479074144394, -0.010914476109533123, -0.010964473117636106, -0.011014470098327463, -0.011064467051482643, -0.011114463976976656, -0.011164460874684954, +-0.011214457744481654, -0.011264454586242211, -0.011314451399841632, -0.011364448185155368, -0.011414444942057539, -0.011464441670423597, -0.011514438370128553, -0.011564435041047856, +-0.011614431683055627, -0.011664428296027318, -0.011714424879837940, -0.011764421434362944, -0.011814417959476449, -0.011864414455053910, -0.011914410920970779, -0.011964407357101177, +-0.012014403763320554, -0.012064400139503923, -0.012114396485526738, -0.012164392801263114, -0.012214389086588512, -0.012264385341377934, -0.012314381565506839, -0.012364377758849344, +-0.012414373921280905, -0.012464370052676532, -0.012514366152911679, -0.012564362221860465, -0.012614358259398346, -0.012664354265400331, -0.012714350239741875, -0.012764346182297099, +-0.012814342092941456, -0.012864337971550404, -0.012914333817998062, -0.012964329632159885, -0.013014325413910885, -0.013064321163126516, -0.013114316879680898, -0.013164312563449489, +-0.013214308214307299, -0.013264303832129782, -0.013314299416791062, -0.013364294968166593, -0.013414290486131386, -0.013464285970560898, -0.013514281421329251, -0.013564276838311899, +-0.013614272221383856, -0.013664267570420576, -0.013714262885296183, -0.013764258165886134, -0.013814253412065438, -0.013864248623709554, -0.013914243800692604, -0.013964238942890044, +-0.014014234050177330, -0.014064229122428587, -0.014114224159519273, -0.014164219161324397, -0.014214214127719418, -0.014264209058578460, -0.014314203953776979, -0.014364198813189987, +-0.014414193636692942, -0.014464188424159970, -0.014514183175466527, -0.014564177890487626, -0.014614172569098723, -0.014664167211173945, -0.014714161816588750, -0.014764156385218151, +-0.014814150916937604, -0.014864145411621236, -0.014914139869144503, -0.014964134289382865, -0.015014128672210449, -0.015064123017502710, -0.015114117325134664, -0.015164111594981768, +-0.015214105826918149, -0.015264100020819266, -0.015314094176560133, -0.015364088294016209, -0.015414082373061619, -0.015464076413571823, -0.015514070415421837, -0.015564064378487119, +-0.015614058302641795, -0.015664052187761325, -0.015714046033720726, -0.015764039840395455, -0.015814033607659643, -0.015864027335388744, -0.015914021023458222, -0.015964014671742202, +-0.016014008280116145, -0.016064001848455071, -0.016113995376634434, -0.016163988864528363, -0.016213982312012321, -0.016263975718961324, -0.016313969085250832, -0.016363962410754971, +-0.016413955695349206, -0.016463948938908551, -0.016513942141308469, -0.016563935302423088, -0.016613928422127867, -0.016663921500297826, -0.016713914536808424, -0.016763907531533791, +-0.016813900484349390, -0.016863893395130239, -0.016913886263751798, -0.016963879090088198, -0.017013871874014899, -0.017063864615407365, -0.017113857314139724, -0.017163849970087443, +-0.017213842583125534, -0.017263835153129462, -0.017313827679973359, -0.017363820163532689, -0.017413812603682466, -0.017463805000298160, -0.017513797353253893, -0.017563789662425132, +-0.017613781927686898, -0.017663774148914655, -0.017713766325982531, -0.017763758458765991, -0.017813750547140055, -0.017863742590980190, -0.017913734590160522, -0.017963726544556517, +-0.018013718454043638, -0.018063710318496021, -0.018113702137789130, -0.018163693911797979, -0.018213685640398040, -0.018263677323463443, -0.018313668960869653, -0.018363660552491688, +-0.018413652098205020, -0.018463643597883776, -0.018513635051403420, -0.018563626458638981, -0.018613617819465918, -0.018663609133758367, -0.018713600401391792, -0.018763591622241213, +-0.018813582796182105, -0.018863573923088593, -0.018913565002836145, -0.018963556035300231, -0.019013547020354980, -0.019063537957875864, -0.019113528847737902, -0.019163519689816565, +-0.019213510483985979, -0.019263501230121622, -0.019313491928098510, -0.019363482577792111, -0.019413473179076563, -0.019463463731827332, -0.019513454235919443, -0.019563444691228359, +-0.019613435097628223, -0.019663425454994495, -0.019713415763202208, -0.019763406022126822, -0.019813396231642480, -0.019863386391624643, -0.019913376501948788, -0.019963366562489048, +-0.020013356573120887, -0.020063346533719339, -0.020113336444159868, -0.020163326304316612, -0.020213316114065037, -0.020263305873280176, -0.020313295581837493, -0.020363285239611124, +-0.020413274846476547, -0.020463264402308778, -0.020513253906983296, -0.020563243360374236, -0.020613232762357065, -0.020663222112806811, -0.020713211411598948, -0.020763200658607612, +-0.020813189853708274, -0.020863178996775960, -0.020913168087686142, -0.020963157126312963, -0.021013146112531890, -0.021063135046218397, -0.021113123927246621, -0.021163112755492035, +-0.021213101530829667, -0.021263090253134991, -0.021313078922282142, -0.021363067538146596, -0.021413056100603383, -0.021463044609527974, -0.021513033064794511, -0.021563021466278462, +-0.021613009813854861, -0.021662998107399179, -0.021712986346785559, -0.021762974531889471, -0.021812962662585946, -0.021862950738750463, -0.021912938760257156, -0.021962926726981500, +-0.022012914638798974, -0.022062902495583719, -0.022112890297211203, -0.022162878043556464, -0.022212865734494977, -0.022262853369900876, -0.022312840949649644, -0.022362828473616311, +-0.022412815941676351, -0.022462803353703903, -0.022512790709574453, -0.022562778009163020, -0.022612765252345089, -0.022662752438994800, -0.022712739568987630, -0.022762726642198614, +-0.022812713658503223, -0.022862700617775601, -0.022912687519891232, -0.022962674364725585, -0.023012661152152811, -0.023062647882048381, -0.023112634554287335, -0.023162621168745144, +-0.023212607725295958, -0.023262594223815249, -0.023312580664178059, -0.023362567046259858, -0.023412553369934797, -0.023462539635078352, -0.023512525841565560, -0.023562511989271895, +-0.023612498078071507, -0.023662484107839873, -0.023712470078452029, -0.023762455989783451, -0.023812441841708294, -0.023862427634102030, -0.023912413366839698, -0.023962399039796776, +-0.024012384652847413, -0.024062370205867087, -0.024112355698731280, -0.024162341131314140, -0.024212326503491147, -0.024262311815137338, -0.024312297066128193, -0.024362282256337863, +-0.024412267385641825, -0.024462252453915121, -0.024512237461033228, -0.024562222406870299, -0.024612207291301813, -0.024662192114202806, -0.024712176875448768, -0.024762161574913840, +-0.024812146212473508, -0.024862130788002812, -0.024912115301377234, -0.024962099752470924, -0.025012084141159362, -0.025062068467318035, -0.025112052730821094, -0.025162036931544018, +-0.025212021069361851, -0.025262005144150078, -0.025311989155782845, -0.025361973104135641, -0.025411956989083502, -0.025461940810501918, -0.025511924568265034, -0.025561908262248342, +-0.025611891892326877, -0.025661875458376129, -0.025711858960270246, -0.025761842397884715, -0.025811825771094581, -0.025861809079775325, -0.025911792323801100, -0.025961775503047398, +-0.026011758617389698, -0.026061741666702158, -0.026111724650860268, -0.026161707569739061, -0.026211690423214033, -0.026261673211159332, -0.026311655933450449, -0.026361638589962429, +-0.026411621180570753, -0.026461603705149581, -0.026511586163574401, -0.026561568555720252, -0.026611550881462630, -0.026661533140675684, -0.026711515333234907, -0.026761497459015342, +-0.026811479517892475, -0.026861461509740465, -0.026911443434434804, -0.026961425291850975, -0.027011407081863142, -0.027061388804346789, -0.027111370459176967, -0.027161352046229159, +-0.027211333565377530, -0.027261315016497565, -0.027311296399464315, -0.027361277714153264, -0.027411258960438580, -0.027461240138195744, -0.027511221247299811, -0.027561202287626266, +-0.027611183259049273, -0.027661164161444322, -0.027711144994686462, -0.027761125758651181, -0.027811106453212640, -0.027861087078246336, -0.027911067633627315, -0.027961048119231065, +-0.028011028534931755, -0.028061008880604872, -0.028110989156125910, -0.028160969361369033, -0.028210949496209729, -0.028260929560523056, -0.028310909554184499, -0.028360889477068225, +-0.028410869329049730, -0.028460849110004058, -0.028510828819806711, -0.028560808458331845, -0.028610788025454959, -0.028660767521051102, -0.028710746944995771, -0.028760726297163131, +-0.028810705577428673, -0.028860684785667449, -0.028910663921754960, -0.028960642985565367, -0.029010621976974165, -0.029060600895856853, -0.029110579742087594, -0.029160558515541887, +-0.029210537216094783, -0.029260515843621781, -0.029310494397997044, -0.029360472879096072, -0.029410451286793919, -0.029460429620966080, -0.029510407881486723, -0.029560386068231345, +-0.029610364181075002, -0.029660342219893197, -0.029710320184560088, -0.029760298074951178, -0.029810275890941526, -0.029860253632406627, -0.029910231299220651, -0.029960208891259096, +-0.030010186408397463, -0.030060163850509917, -0.030110141217471964, -0.030160118509158659, -0.030210095725445502, -0.030260072866206657, -0.030310049931317636, -0.030360026920653486, +-0.030410003834089715, -0.030459980671500488, -0.030509957432761310, -0.030559934117747239, -0.030609910726333778, -0.030659887258395097, -0.030709863713806695, -0.030759840092443636, +-0.030809816394181417, -0.030859792618894218, -0.030909768766457534, -0.030959744836746430, -0.031009720829636406, -0.031059696745001638, -0.031109672582717626, -0.031159648342659878, +-0.031209624024702565, -0.031259599628721192, -0.031309575154590819, -0.031359550602186953, -0.031409525971383766, -0.031459501262056766, -0.031509476474081012, -0.031559451607332006, +-0.031609426661683933, -0.031659401637012294, -0.031709376533192148, -0.031759351350099004, -0.031809326087607039, -0.031859300745591762, -0.031909275323928225, -0.031959249822491952, +-0.032009224241157104, -0.032059198579799199, -0.032109172838293738, -0.032159147016514907, -0.032209121114338206, -0.032259095131638701, -0.032309069068291903, -0.032359042924171987, +-0.032409016699154469, -0.032458990393114402, -0.032508964005927309, -0.032558937537467358, -0.032608910987610061, -0.032658884356230489, -0.032708857643204151, -0.032758830848405224, +-0.032808803971709224, -0.032858777012991211, -0.032908749972126700, -0.032958722848989867, -0.033008695643456230, -0.033058668355401298, -0.033108640984699247, -0.033158613531225602, +-0.033208585994855419, -0.033258558375464209, -0.033308530672926169, -0.033358502887116795, -0.033408475017911166, -0.033458447065184797, -0.033508419028811860, -0.033558390908667877, +-0.033608362704627921, -0.033658334416567501, -0.033708306044360800, -0.033758277587883329, -0.033808249047010172, -0.033858220421616833, -0.033908191711577496, -0.033958162916767683, +-0.034008134037062911, -0.034058105072337350, -0.034108076022466537, -0.034158046887325523, -0.034208017666789846, -0.034257988360733675, -0.034307958969032534, -0.034357929491561495, +-0.034407899928196074, -0.034457870278810462, -0.034507840543280176, -0.034557810721480287, -0.034607780813286318, -0.034657750818572454, -0.034707720737214204, -0.034757690569086661, +-0.034807660314065333, -0.034857629972024406, -0.034907599542839410, -0.034957569026385416, -0.035007538422537940, -0.035057507731171174, -0.035107476952160634, -0.035157446085381849, +-0.035207415130709012, -0.035257384088017631, -0.035307352957182792, -0.035357321738080011, -0.035407290430583480, -0.035457259034568728, -0.035507227549910828, -0.035557195976485302, +-0.035607164314166342, -0.035657132562829472, -0.035707100722349769, -0.035757068792602757, -0.035807036773462635, -0.035857004664804917, -0.035906972466504691, -0.035956940178437473, +-0.036006907800477460, -0.036056875332500182, -0.036106842774381157, -0.036156810125994580, -0.036206777387215977, -0.036256744557920433, -0.036306711637983477, -0.036356678627279287, +-0.036406645525683408, -0.036456612333070910, -0.036506579049317332, -0.036556545674296857, -0.036606512207885022, -0.036656478649956900, -0.036706445000388034, -0.036756411259052602, +-0.036806377425826146, -0.036856343500583748, -0.036906309483200936, -0.036956275373551908, -0.037006241171512189, -0.037056206876957307, -0.037106172489761467, -0.037156138009800194, +-0.037206103436948579, -0.037256068771082153, -0.037306034012075107, -0.037355999159802970, -0.037405964214140844, -0.037455929174964243, -0.037505894042147381, -0.037555858815565786, +-0.037605823495094538, -0.037655788080609182, -0.037705752571983907, -0.037755716969094251, -0.037805681271815307, -0.037855645480022598, -0.037905609593590336, -0.037955573612394045, +-0.038005537536308823, -0.038055501365210201, -0.038105465098972384, -0.038155428737470895, -0.038205392280581285, -0.038255355728177752, -0.038305319080135826, -0.038355282336330607, +-0.038405245496637624, -0.038455208560931084, -0.038505171529086522, -0.038555134400979026, -0.038605097176484145, -0.038655059855476070, -0.038705022437830354, -0.038754984923422074, +-0.038804947312126782, -0.038854909603818676, -0.038904871798373299, -0.038954833895665737, -0.039004795895571535, -0.039054757797964898, -0.039104719602721369, -0.039154681309716485, +-0.039204642918824452, -0.039254604429920813, -0.039304565842880668, -0.039354527157579547, -0.039404488373891662, -0.039454449491692564, -0.039504410510857332, -0.039554371431261524, +-0.039604332252779345, -0.039654292975286332, -0.039704253598657584, -0.039754214122768652, -0.039804174547493736, -0.039854134872708391, -0.039904095098287698, -0.039954055224107221, +-0.040004015250041158, -0.040053975175965054, -0.040103935001754458, -0.040153894727283583, -0.040203854352427973, -0.040253813877062720, -0.040303773301063384, -0.040353732624304160, +-0.040403691846660615, -0.040453650968007834, -0.040503609988221376, -0.040553568907175444, -0.040603527724745590, -0.040653486440806921, -0.040703445055234974, -0.040753403567903974, +-0.040803361978689466, -0.040853320287466549, -0.040903278494110774, -0.040953236598496368, -0.041003194600498866, -0.041053152499993820, -0.041103110296855448, -0.041153067990959302, +-0.041203025582180482, -0.041252983070394544, -0.041302940455475709, -0.041352897737299520, -0.041402854915741083, -0.041452811990675957, -0.041502768961978360, -0.041552725829523837, +-0.041602682593187494, -0.041652639252844896, -0.041702595808370255, -0.041752552259639121, -0.041802508606526609, -0.041852464848908269, -0.041902420986658327, -0.041952377019652327, +-0.042002332947765383, -0.042052288770873053, -0.042102244488849562, -0.042152200101570454, -0.042202155608911295, -0.042252111010746295, -0.042302066306951019, -0.042352021497400583, +-0.042401976581970535, -0.042451931560535103, -0.042501886432969836, -0.042551841199149856, -0.042601795858950721, -0.042651750412246649, -0.042701704858913204, -0.042751659198825495, +-0.042801613431859079, -0.042851567557888187, -0.042901521576788379, -0.042951475488434761, -0.043001429292702904, -0.043051382989467028, -0.043101336578602698, -0.043151290059985463, +-0.043201243433489564, -0.043251196698990552, -0.043301149856363554, -0.043351102905484121, -0.043401055846226493, -0.043451008678466220, -0.043500961402078424, -0.043550914016938676, +-0.043600866522921194, -0.043650818919901545, -0.043700771207754847, -0.043750723386356667, -0.043800675455581237, -0.043850627415304114, -0.043900579265400426, -0.043950531005745731, +-0.044000482636214269, -0.044050434156681598, -0.044100385567023288, -0.044150336867113567, -0.044200288056828005, -0.044250239136041723, -0.044300190104630280, -0.044350140962467928, +-0.044400091709430219, -0.044450042345392279, -0.044499992870229682, -0.044549943283816659, -0.044599893586028776, -0.044649843776741159, -0.044699793855829374, -0.044749743823167661, +-0.044799693678631590, -0.044849643422096283, -0.044899593053437312, -0.044949542572528915, -0.044999491979246665, -0.045049441273465683, -0.045099390455061540, -0.045149339523908476, +-0.045199288479882069, -0.045249237322857877, -0.045299186052710154, -0.045349134669314464, -0.045399083172545936, -0.045449031562280147, -0.045498979838391330, -0.045548928000755072, +-0.045598876049246485, -0.045648823983741156, -0.045698771804113324, -0.045748719510238560, -0.045798667101991999, -0.045848614579249214, -0.045898561941884450, -0.045948509189773279, +-0.045998456322790836, -0.046048403340812692, -0.046098350243713102, -0.046148297031367629, -0.046198243703651866, -0.046248190260440046, -0.046298136701607748, -0.046348083027030113, +-0.046398029236582712, -0.046447975330139793, -0.046497921307576934, -0.046547867168769276, -0.046597812913592392, -0.046647758541920534, -0.046697704053629274, -0.046747649448593762, +-0.046797594726689568, -0.046847539887790939, -0.046897484931773460, -0.046947429858512274, -0.046997374667882952, -0.047047319359759754, -0.047097263934018259, -0.047147208390534039, +-0.047197152729181360, -0.047247096949835803, -0.047297041052372500, -0.047346985036667039, -0.047396928902593671, -0.047446872650027977, -0.047496816278845104, -0.047546759788920638, +-0.047596703180128826, -0.047646646452345252, -0.047696589605445067, -0.047746532639303854, -0.047796475553795861, -0.047846418348796681, -0.047896361024181454, -0.047946303579825766, +-0.047996246015603879, -0.048046188331391376, -0.048096130527063845, -0.048146072602495545, -0.048196014557562068, -0.048245956392138550, -0.048295898106100583, -0.048345839699322428, +-0.048395781171679676, -0.048445722523047470, -0.048495663753301402, -0.048545604862315725, -0.048595545849966046, -0.048645486716127492, -0.048695427460675671, -0.048745368083484841, +-0.048795308584430583, -0.048845248963388058, -0.048895189220232858, -0.048945129354839231, -0.048995069367082790, -0.049045009256838669, -0.049094949023982475, -0.049144888668388460, +-0.049194828189932226, -0.049244767588489363, -0.049294706863934140, -0.049344646016142149, -0.049394585044988538, -0.049444523950348915, -0.049494462732097538, -0.049544401390110002, +-0.049594339924261460, -0.049644278334427513, -0.049694216620482429, -0.049744154782301805, -0.049794092819760792, -0.049844030732734988, -0.049893968521098668, -0.049943906184727424, +-0.049993843723496419, -0.050043781137281237, -0.050093718425956169, -0.050143655589396804, -0.050193592627478738, -0.050243529540076250, -0.050293466327064940, -0.050343402988319963, +-0.050393339523716926, -0.050443275933130090, -0.050493212216435067, -0.050543148373507013, -0.050593084404221535, -0.050643020308452899, -0.050692956086076713, -0.050742891736968131, +-0.050792827261002774, -0.050842762658054895, -0.050892697928000115, -0.050942633070713589, -0.050992568086070930, -0.051042502973946399, -0.051092437734215616, -0.051142372366754174, +-0.051192306871436367, -0.051242241248137789, -0.051292175496733608, -0.051342109617099431, -0.051392043609109539, -0.051441977472639532, -0.051491911207564592, -0.051541844813760306, +-0.051591778291100975, -0.051641711639462191, -0.051691644858719125, -0.051741577948747397, -0.051791510909421280, -0.051841443740616382, -0.051891376442207877, -0.051941309014071381, +-0.051991241456081159, -0.052041173768112840, -0.052091105950041579, -0.052141038001743002, -0.052190969923091385, -0.052240901713962347, -0.052290833374231495, -0.052340764903773117, +-0.052390696302462826, -0.052440627570175792, -0.052490558706787635, -0.052540489712172643, -0.052590420586206416, -0.052640351328764143, -0.052690281939721438, -0.052740212418952583, +-0.052790142766333197, -0.052840072981738449, -0.052890003065043968, -0.052939933016124034, -0.052989862834854268, -0.053039792521109845, -0.053089722074766380, -0.053139651495698173, +-0.053189580783780832, -0.053239509938889984, -0.053289438960899924, -0.053339367849686257, -0.053389296605124176, -0.053439225227089299, -0.053489153715455907, -0.053539082070099636, +-0.053589010290895661, -0.053638938377719603, -0.053688866330445756, -0.053738794148949741, -0.053788721833106741, -0.053838649382792383, -0.053888576797880956, -0.053938504078248087, +-0.053988431223768958, -0.054038358234319191, -0.054088285109773093, -0.054138211850006272, -0.054188138454894376, -0.054238064924311685, -0.054287991258133828, -0.054337917456236000, +-0.054387843518493816, -0.054437769444781584, -0.054487695234974924, -0.054537620888949027, -0.054587546406579521, -0.054637471787740713, -0.054687397032308217, -0.054737322140157231, +-0.054787247111163381, -0.054837171945200977, -0.054887096642145639, -0.054937021201872556, -0.054986945624257363, -0.055036869909174370, -0.055086794056499196, -0.055136718066107482, +-0.055186641937873530, -0.055236565671672976, -0.055286489267381000, -0.055336412724873253, -0.055386336044024022, -0.055436259224708954, -0.055486182266803241, -0.055536105170182516, +-0.055586027934721081, -0.055635950560294578, -0.055685873046778203, -0.055735795394047584, -0.055785717601977036, -0.055835639670442187, -0.055885561599318248, -0.055935483388480846, +-0.055985405037804289, -0.056035326547164220, -0.056085247916435835, -0.056135169145494775, -0.056185090234215349, -0.056235011182473198, -0.056284931990143956, -0.056334852657101947, +-0.056384773183222804, -0.056434693568381732, -0.056484613812454364, -0.056534533915315023, -0.056584453876839344, -0.056634373696902530, -0.056684293375380224, -0.056734212912146746, +-0.056784132307077732, -0.056834051560048386, -0.056883970670934363, -0.056933889639609964, -0.056983808465950837, -0.057033727149832195, -0.057083645691129677, -0.057133564089717599, +-0.057183482345471610, -0.057233400458267365, -0.057283318427979173, -0.057333236254482681, -0.057383153937653100, -0.057433071477366079, -0.057482988873495934, -0.057532906125918319, +-0.057582823234508439, -0.057632740199141941, -0.057682657019693155, -0.057732573696037723, -0.057782490228050855, -0.057832406615608206, -0.057882322858584100, -0.057932238956854183, +-0.057982154910293668, -0.058032070718778216, -0.058081986382182135, -0.058131901900381096, -0.058181817273250738, -0.058231732500665399, -0.058281647582500727, -0.058331562518631939, +-0.058381477308934684, -0.058431391953283292, -0.058481306451553423, -0.058531220803620290, -0.058581135009359540, -0.058631049068645517, -0.058680962981353869, -0.058730876747359814, +-0.058780790366539007, -0.058830703838765784, -0.058880617163915801, -0.058930530341864275, -0.058980443372486868, -0.059030356255657911, -0.059080268991253057, -0.059130181579147532, +-0.059180094019216999, -0.059230006311335792, -0.059279918455379561, -0.059329830451223982, -0.059379742298743383, -0.059429653997813428, -0.059479565548309334, -0.059529476950106776, +-0.059579388203080078, -0.059629299307104908, -0.059679210262056491, -0.059729121067810496, -0.059779031724241254, -0.059828942231224432, -0.059878852588635248, -0.059928762796349386, +-0.059978672854241168, -0.060028582762186269, -0.060078492520059909, -0.060128402127737769, -0.060178311585094173, -0.060228220892004802, -0.060278130048345320, -0.060328039053990076, +-0.060377947908814726, -0.060427856612694508, -0.060477765165505099, -0.060527673567120827, -0.060577581817417368, -0.060627489916269962, -0.060677397863554271, -0.060727305659144644, +-0.060777213302916751, -0.060827120794745823, -0.060877028134507544, -0.060926935322076242, -0.060976842357327608, -0.061026749240136867, -0.061076655970379694, -0.061126562547930439, +-0.061176468972664780, -0.061226375244458384, -0.061276281363185615, -0.061326187328722137, -0.061376093140943194, -0.061425998799724463, -0.061475904304940286, -0.061525809656466354, +-0.061575714854177899, -0.061625619897950595, -0.061675524787658802, -0.061725429523178194, -0.061775334104384010, -0.061825238531151940, -0.061875142803356327, -0.061925046920872862, +-0.061974950883576775, -0.062024854691343750, -0.062074758344048152, -0.062124661841565655, -0.062174565183771950, -0.062224468370541387, -0.062274371401749649, -0.062324274277271989, +-0.062374176996984082, -0.062424079560760293, -0.062473981968476297, -0.062523884220007361, -0.062573786315229141, -0.062623688254016027, -0.062673590036243676, -0.062723491661787367, +-0.062773393130522756, -0.062823294442324235, -0.062873195597067472, -0.062923096594627720, -0.062972997434880662, -0.063022898117700676, -0.063072798642963432, -0.063122699010544209, +-0.063172599220318676, -0.063222499272161198, -0.063272399165947471, -0.063322298901553192, -0.063372198478852726, -0.063422097897721755, -0.063471997158035545, -0.063521896259669794, +-0.063571795202498851, -0.063621693986398414, -0.063671592611243749, -0.063721491076910539, -0.063771389383273161, -0.063821287530207313, -0.063871185517588247, -0.063921083345291660, +-0.063970981013191916, -0.064020878521164726, -0.064070775869085342, -0.064120673056829447, -0.064170570084271447, -0.064220466951287011, -0.064270363657751850, -0.064320260203540328, +-0.064370156588528168, -0.064420052812590611, -0.064469948875603367, -0.064519844777440813, -0.064569740517978647, -0.064619636097092120, -0.064669531514656958, -0.064719426770547511, +-0.064769321864639504, -0.064819216796808188, -0.064869111566929274, -0.064919006174877142, -0.064968900620527500, -0.065018794903755603, -0.065068689024437160, -0.065118582982446549, +-0.065168476777659481, -0.065218370409951654, -0.065268263879197472, -0.065318157185272632, -0.065368050328052388, -0.065417943307412477, -0.065467836123227249, -0.065517728775372430, +-0.065567621263723300, -0.065617513588155554, -0.065667405748543586, -0.065717297744763106, -0.065767189576689367, -0.065817081244198106, -0.065866972747163702, -0.065916864085461865, +-0.065966755258967863, -0.066016646267557419, -0.066066537111104925, -0.066116427789486079, -0.066166318302576160, -0.066216208650250893, -0.066266098832384657, -0.066315988848853188, +-0.066365878699532171, -0.066415768384296026, -0.066465657903020461, -0.066515547255580745, -0.066565436441852602, -0.066615325461710437, -0.066665214315029947, -0.066715103001686427, +-0.066764991521555586, -0.066814879874511832, -0.066864768060430874, -0.066914656079187992, -0.066964543930658912, -0.067014431614718040, -0.067064319131241085, -0.067114206480103328, +-0.067164093661180507, -0.067213980674347001, -0.067263867519478535, -0.067313754196450859, -0.067363640705138353, -0.067413527045416727, -0.067463413217161303, -0.067513299220247777, +-0.067563185054550570, -0.067613070719945392, -0.067662956216307552, -0.067712841543512745, -0.067762726701435405, -0.067812611689951244, -0.067862496508935555, -0.067912381158264062, +-0.067962265637811173, -0.068012149947452624, -0.068062034087063711, -0.068111918056520143, -0.068161801855696341, -0.068211685484468029, -0.068261568942710946, -0.068311452230299496, +-0.068361335347109420, -0.068411218293016010, -0.068461101067894992, -0.068510983671620784, -0.068560866104069113, -0.068610748365115271, -0.068660630454635010, -0.068710512372502724, +-0.068760394118594165, -0.068810275692784612, -0.068860157094949817, -0.068910038324964187, -0.068959919382703461, -0.069009800268042931, -0.069059680980858351, -0.069109561521024127, +-0.069159441888415996, -0.069209322082909697, -0.069259202104379650, -0.069309081952701607, -0.069358961627750862, -0.069408841129403140, -0.069458720457532888, -0.069508599612015817, +-0.069558478592727263, -0.069608357399542950, -0.069658236032337298, -0.069708114490986059, -0.069757992775364541, -0.069807870885348469, -0.069857748820812290, -0.069907626581631729, +-0.069957504167682108, -0.070007381578839165, -0.070057258814977333, -0.070107135875972351, -0.070157012761699528, -0.070206889472034614, -0.070256766006852031, -0.070306642366027544, +-0.070356518549436878, -0.070406394556954480, -0.070456270388456102, -0.070506146043817039, -0.070556021522913057, -0.070605896825618589, -0.070655771951809360, -0.070705646901360719, +-0.070755521674148392, -0.070805396270046825, -0.070855270688931757, -0.070905144930678524, -0.070955018995162863, -0.071004892882259210, -0.071054766591843330, -0.071104640123790544, +-0.071154513477976578, -0.071204386654275906, -0.071254259652564253, -0.071304132472717399, -0.071354005114609778, -0.071403877578117142, -0.071453749863114799, -0.071503621969478542, +-0.071553493897082779, -0.071603365645803274, -0.071653237215515364, -0.071703108606094801, -0.071752979817416018, -0.071802850849354796, -0.071852721701786443, -0.071902592374586724, +-0.071952462867630088, -0.072002333180792299, -0.072052203313948668, -0.072102073266974973, -0.072151943039745647, -0.072201812632136472, -0.072251682044023213, -0.072301551275280290, +-0.072351420325783497, -0.072401289195408156, -0.072451157884030032, -0.072501026391523574, -0.072550894717764547, -0.072600762862628287, -0.072650630825990561, -0.072700498607725816, +-0.072750366207709818, -0.072800233625817903, -0.072850100861925851, -0.072899967915908109, -0.072949834787640444, -0.072999701476998191, -0.073049567983857130, -0.073099434308091710, +-0.073149300449577695, -0.073199166408190436, -0.073249032183805698, -0.073298897776297930, -0.073348763185542940, -0.073398628411416464, -0.073448493453792979, -0.073498358312548265, +-0.073548222987557657, -0.073598087478696936, -0.073647951785840535, -0.073697815908864275, -0.073747679847643466, -0.073797543602053900, -0.073847407171970039, -0.073897270557267650, +-0.073947133757822095, -0.073996996773509141, -0.074046859604203263, -0.074096722249780228, -0.074146584710115385, -0.074196446985084527, -0.074246309074562103, -0.074296170978423906, +-0.074346032696545730, -0.074395894228802037, -0.074445755575068592, -0.074495616735220774, -0.074545477709134347, -0.074595338496683788, -0.074645199097744877, -0.074695059512192963, +-0.074744919739903853, -0.074794779780751997, -0.074844639634613200, -0.074894499301362799, -0.074944358780876588, -0.074994218073029043, -0.075044077177695956, -0.075093936094752664, +-0.075143794824074975, -0.075193653365537363, -0.075243511719015624, -0.075293369884385536, -0.075343227861521589, -0.075393085650299577, -0.075442943250594835, -0.075492800662283185, +-0.075542657885239090, -0.075592514919338355, -0.075642371764456331, -0.075692228420468813, -0.075742084887250288, -0.075791941164676552, -0.075841797252622967, -0.075891653150965327, +-0.075941508859578108, -0.075991364378337117, -0.076041219707117719, -0.076091074845795706, -0.076140929794245582, -0.076190784552343113, -0.076240639119963691, -0.076290493496983122, +-0.076340347683275869, -0.076390201678717740, -0.076440055483184555, -0.076489909096550790, -0.076539762518692253, -0.076589615749484308, -0.076639468788802775, -0.076689321636522118, +-0.076739174292518156, -0.076789026756666254, -0.076838879028842233, -0.076888731108920583, -0.076938582996777097, -0.076988434692287153, -0.077038286195326558, -0.077088137505769816, +-0.077137988623492720, -0.077187839548370663, -0.077237690280279436, -0.077287540819093559, -0.077337391164688810, -0.077387241316941038, -0.077437091275724720, -0.077486941040915677, +-0.077536790612389273, -0.077586639990021342, -0.077636489173686360, -0.077686338163260163, -0.077736186958618114, -0.077786035559636049, -0.077835883966188443, -0.077885732178151132, +-0.077935580195399493, -0.077985428017809347, -0.078035275645255184, -0.078085123077612825, -0.078134970314757676, -0.078184817356565531, -0.078234664202910906, -0.078284510853669609, +-0.078334357308717489, -0.078384203567929037, -0.078434049631180058, -0.078483895498345974, -0.078533741169302590, -0.078583586643924397, -0.078633431922087257, -0.078683277003666521, +-0.078733121888538038, -0.078782966576576310, -0.078832811067657174, -0.078882655361656007, -0.078932499458448629, -0.078982343357909574, -0.079032187059914660, -0.079082030564339281, +-0.079131873871059258, -0.079181716979949121, -0.079231559890884679, -0.079281402603741780, -0.079331245118394941, -0.079381087434719985, -0.079430929552592316, -0.079480771471887757, +-0.079530613192480823, -0.079580454714247365, -0.079630296037062773, -0.079680137160802883, -0.079729978085342199, -0.079779818810556569, -0.079829659336321399, -0.079879499662512524, +-0.079929339789004461, -0.079979179715673032, -0.080029019442393670, -0.080078858969042196, -0.080128698295493128, -0.080178537421622315, -0.080228376347305161, -0.080278215072417516, +-0.080328053596833884, -0.080377891920430114, -0.080427730043082069, -0.080477567964664251, -0.080527405685052511, -0.080577243204122254, -0.080627080521749328, -0.080676917637808265, +-0.080726754552174915, -0.080776591264724668, -0.080826427775333387, -0.080876264083875590, -0.080926100190227140, -0.080975936094263443, -0.081025771795860346, -0.081075607294892368, +-0.081125442591235386, -0.081175277684764791, -0.081225112575356431, -0.081274947262884867, -0.081324781747225919, -0.081374616028255478, -0.081424450105848034, -0.081474283979879478, +-0.081524117650225214, -0.081573951116761093, -0.081623784379361644, -0.081673617437902746, -0.081723450292259803, -0.081773282942308678, -0.081823115387923889, -0.081872947628981327, +-0.081922779665356396, -0.081972611496924946, -0.082022443123561536, -0.082072274545142015, -0.082122105761541803, -0.082171936772636775, -0.082221767578301463, -0.082271598178411731, +-0.082321428572843441, -0.082371258761471139, -0.082421088744170687, -0.082470918520817518, -0.082520748091287496, -0.082570577455455166, -0.082620406613196390, -0.082670235564386588, +-0.082720064308901650, -0.082769892846616108, -0.082819721177405825, -0.082869549301146248, -0.082919377217713239, -0.082969204926981344, -0.083019032428826439, -0.083068859723123945, +-0.083118686809749751, -0.083168513688578388, -0.083218340359485748, -0.083268166822347264, -0.083317993077038799, -0.083367819123434911, -0.083417644961411463, -0.083467470590844361, +-0.083517296011608136, -0.083567121223578664, -0.083616946226631392, -0.083666771020642211, -0.083716595605485639, -0.083766419981037593, -0.083816244147173494, -0.083866068103769217, +-0.083915891850699337, -0.083965715387839729, -0.084015538715065827, -0.084065361832253521, -0.084115184739277371, -0.084165007436013253, -0.084214829922336629, -0.084264652198123360, +-0.084314474263248021, -0.084364296117586501, -0.084414117761014679, -0.084463939193407125, -0.084513760414639719, -0.084563581424587905, -0.084613402223127590, -0.084663222810133332, +-0.084713043185481007, -0.084762863349046078, -0.084812683300704433, -0.084862503040330634, -0.084912322567800583, -0.084962141882989714, -0.085011960985773946, -0.085061779876027824, +-0.085111598553627252, -0.085161417018447691, -0.085211235270365032, -0.085261053309253834, -0.085310871134990002, -0.085360688747449440, -0.085410506146506721, -0.085460323332037721, +-0.085510140303917931, -0.085559957062023212, -0.085609773606228165, -0.085659589936408695, -0.085709406052440235, -0.085759221954198717, -0.085809037641558686, -0.085858853114396075, +-0.085908668372586330, -0.085958483416005343, -0.086008298244527714, -0.086058112858029348, -0.086107927256385691, -0.086157741439472649, -0.086207555407164821, -0.086257369159338113, +-0.086307182695868415, -0.086356996016630314, -0.086406809121499728, -0.086456622010352119, -0.086506434683063405, -0.086556247139508144, -0.086606059379562284, -0.086655871403101256, +-0.086705683210001008, -0.086755494800136099, -0.086805306173382460, -0.086855117329615553, -0.086904928268711296, -0.086954738990544289, -0.087004549494990410, -0.087054359781925175, +-0.087104169851224475, -0.087153979702762910, -0.087203789336416399, -0.087253598752060416, -0.087303407949570866, -0.087353216928822364, -0.087403025689690814, -0.087452834232052148, +-0.087502642555780955, -0.087552450660753151, -0.087602258546844225, -0.087652066213930097, -0.087701873661885352, -0.087751680890585923, -0.087801487899907299, -0.087851294689725398, +-0.087901101259914807, -0.087950907610351473, -0.088000713740910869, -0.088050519651468928, -0.088100325341900237, -0.088150130812080729, -0.088199936061885906, -0.088249741091191672, +-0.088299545899872656, -0.088349350487804762, -0.088399154854863951, -0.088448959000924796, -0.088498762925863242, -0.088548566629554792, -0.088598370111875366, -0.088648173372699562, +-0.088697976411903343, -0.088747779229362167, -0.088797581824951996, -0.088847384198547416, -0.088897186350024388, -0.088946988279258385, -0.088996789986125355, -0.089046591470499911, +-0.089096392732257987, -0.089146193771275084, -0.089195994587427135, -0.089245795180588755, -0.089295595550635889, -0.089345395697444485, -0.089395195620889142, -0.089444995320845808, +-0.089494794797189997, -0.089544594049797629, -0.089594393078543333, -0.089644191883303068, -0.089693990463952308, -0.089743788820367015, -0.089793586952421817, -0.089843384859992645, +-0.089893182542955016, -0.089942980001184877, -0.089992777234556828, -0.090042574242946857, -0.090092371026230439, -0.090142167584283533, -0.090191963916980769, -0.090241760024198106, +-0.090291555905811033, -0.090341351561695510, -0.090391146991726165, -0.090440942195778959, -0.090490737173729838, -0.090540531925453430, -0.090590326450825695, -0.090640120749722136, +-0.090689914822018727, -0.090739708667590083, -0.090789502286312176, -0.090839295678060511, -0.090889088842711033, -0.090938881780138411, -0.090988674490218580, -0.091038466972827053, +-0.091088259227839807, -0.091138051255131469, -0.091187843054578013, -0.091237634626054942, -0.091287425969438216, -0.091337217084602504, -0.091387007971423725, -0.091436798629777882, +-0.091486589059539603, -0.091536379260584846, -0.091586169232789144, -0.091635958976028470, -0.091685748490177438, -0.091735537775112050, -0.091785326830707809, -0.091835115656840702, +-0.091884904253385344, -0.091934692620217751, -0.091984480757213410, -0.092034268664248312, -0.092084056341197096, -0.092133843787935751, -0.092183631004339794, -0.092233417990285199, +-0.092283204745646608, -0.092332991270300008, -0.092382777564121388, -0.092432563626985362, -0.092482349458767946, -0.092532135059344642, -0.092581920428591452, -0.092631705566383005, +-0.092681490472595301, -0.092731275147103873, -0.092781059589784706, -0.092830843800512444, -0.092880627779163061, -0.092930411525612128, -0.092980195039735591, -0.093029978321408135, +-0.093079761370505720, -0.093129544186903918, -0.093179326770478688, -0.093229109121104700, -0.093278891238657943, -0.093328673123014391, -0.093378454774048728, -0.093428236191636926, +-0.093478017375654518, -0.093527798325977518, -0.093577579042480583, -0.093627359525039699, -0.093677139773530427, -0.093726919787828725, -0.093776699567809305, -0.093826479113348113, +-0.093876258424320735, -0.093926037500603160, -0.093975816342070043, -0.094025594948597385, -0.094075373320060732, -0.094125151456336098, -0.094174929357298140, -0.094224707022822859, +-0.094274484452785814, -0.094324261647062993, -0.094374038605529079, -0.094423815328060073, -0.094473591814531965, -0.094523368064819438, -0.094573144078798480, -0.094622919856344676, +-0.094672695397334014, -0.094722470701641165, -0.094772245769142144, -0.094822020599712509, -0.094871795193228262, -0.094921569549564086, -0.094971343668595984, -0.095021117550199527, +-0.095070891194250703, -0.095120664600624225, -0.095170437769196078, -0.095220210699841851, -0.095269983392437529, -0.095319755846857798, -0.095369528062978687, -0.095419300040676197, +-0.095469071779825013, -0.095518843280301149, -0.095568614541980179, -0.095618385564738118, -0.095668156348449648, -0.095717926892990787, -0.095767697198237120, -0.095817467264064635, +-0.095867237090348043, -0.095917006676963359, -0.095966776023786171, -0.096016545130692466, -0.096066313997556968, -0.096116082624255680, -0.096165851010664188, -0.096215619156658508, +-0.096265387062113336, -0.096315154726904703, -0.096364922150908625, -0.096414689333999798, -0.096464456276054253, -0.096514222976947561, -0.096563989436555753, -0.096613755654753525, +-0.096663521631416921, -0.096713287366421499, -0.096763052859643303, -0.096812818110957044, -0.096862583120238738, -0.096912347887363956, -0.096962112412208770, -0.097011876694647850, +-0.097061640734557239, -0.097111404531812523, -0.097161168086289745, -0.097210931397863590, -0.097260694466410128, -0.097310457291804917, -0.097360219873924000, -0.097409982212642104, +-0.097459744307835244, -0.097509506159379464, -0.097559267767149488, -0.097609029131021333, -0.097658790250870597, -0.097708551126573340, -0.097758311758004271, -0.097808072145039407, +-0.097857832287554375, -0.097907592185425191, -0.097957351838526593, -0.098007111246734613, -0.098056870409924848, -0.098106629327973358, -0.098156388000754852, -0.098206146428145374, +-0.098255904610020539, -0.098305662546256375, -0.098355420236727623, -0.098405177681310310, -0.098454934879880496, -0.098504691832312904, -0.098554448538483580, -0.098604204998268136, +-0.098653961211542615, -0.098703717178181757, -0.098753472898061606, -0.098803228371057775, -0.098852983597046321, -0.098902738575901955, -0.098952493307500750, -0.099002247791718304, +-0.099052002028430675, -0.099101756017512616, -0.099151509758840156, -0.099201263252288924, -0.099251016497734976, -0.099300769495053037, -0.099350522244119194, -0.099400274744809475, +-0.099450026996998619, -0.099499779000562713, -0.099549530755377341, -0.099599282261318603, -0.099649033518261210, -0.099698784526081233, -0.099748535284654286, -0.099798285793856453, +-0.099848036053562461, -0.099897786063648381, -0.099947535823989839, -0.099997285334462893, -0.100047034594942280, -0.100096783605304110, -0.100146532365423950, -0.100196280875177910, +-0.100246029134440740, -0.100295777143088490, -0.100345524900997240, -0.100395272408041730, -0.100445019664098050, -0.100494766669041810, -0.100544513422749100, -0.100594259925094660, +-0.100644006175954580, -0.100693752175204470, -0.100743497922720430, -0.100793243418377210, -0.100842988662050880, -0.100892733653617060, -0.100942478392951870, -0.100992222879930040, +-0.101041967114427640, -0.101091711096320330, -0.101141454825484170, -0.101191198301793950, -0.101240941525125740, -0.101290684495355150, -0.101340427212358310, -0.101390169676009960, +-0.101439911886186170, -0.101489653842763050, -0.101539395545615360, -0.101589136994619190, -0.101638878189650160, -0.101688619130584380, -0.101738359817296620, -0.101788100249662950, +-0.101837840427559030, -0.101887580350860960, -0.101937320019443490, -0.101987059433182720, -0.102036798591954290, -0.102086537495634320, -0.102136276144097570, -0.102186014537220120, +-0.102235752674877630, -0.102285490556946200, -0.102335228183300610, -0.102384965553816950, -0.102434702668371320, -0.102484439526838490, -0.102534176129094550, -0.102583912475015180, +-0.102633648564476460, -0.102683384397353190, -0.102733119973521460, -0.102782855292856910, -0.102832590355235690, -0.102882325160532530, -0.102932059708623570, -0.102981793999384450, +-0.103031528032691310, -0.103081261808418880, -0.103130995326443320, -0.103180728586640250, -0.103230461588885810, -0.103280194333054780, -0.103329926819023250, -0.103379659046667360, +-0.103429391015861880, -0.103479122726482910, -0.103528854178406140, -0.103578585371507690, -0.103628316305662310, -0.103678046980746160, -0.103727777396634880, -0.103777507553204600, +-0.103827237450330110, -0.103876967087887530, -0.103926696465752530, -0.103976425583801230, -0.104026154441908420, -0.104075883039950230, -0.104125611377802340, -0.104175339455340850, +-0.104225067272440570, -0.104274794828977630, -0.104324522124827690, -0.104374249159866900, -0.104423975933970040, -0.104473702447013250, -0.104523428698872630, -0.104573154689423010, +-0.104622880418540500, -0.104672605886100780, -0.104722331091979990, -0.104772056036052940, -0.104821780718195740, -0.104871505138284100, -0.104921229296194130, -0.104970953191800640, +-0.105020676824979770, -0.105070400195607220, -0.105120123303559090, -0.105169846148710220, -0.105219568730936740, -0.105269291050114340, -0.105319013106119140, -0.105368734898825980, +-0.105418456428110980, -0.105468177693850280, -0.105517898695918700, -0.105567619434192360, -0.105617339908546980, -0.105667060118858680, -0.105716780065002310, -0.105766499746853970, +-0.105816219164289390, -0.105865938317184700, -0.105915657205414720, -0.105965375828855610, -0.106015094187383040, -0.106064812280873190, -0.106114530109200870, -0.106164247672242220, +-0.106213964969872950, -0.106263682001969210, -0.106313398768405830, -0.106363115269058950, -0.106412831503804720, -0.106462547472517960, -0.106512263175074850, -0.106561978611351070, +-0.106611693781222790, -0.106661408684564830, -0.106711123321253350, -0.106760837691164070, -0.106810551794173130, -0.106860265630155370, -0.106909979198986940, -0.106959692500543570, +-0.107009405534701410, -0.107059118301335300, -0.107108830800321380, -0.107158543031535390, -0.107208254994853480, -0.107257966690150500, -0.107307678117302600, -0.107357389276185950, +-0.107407100166675370, -0.107456810788647050, -0.107506521141976700, -0.107556231226540500, -0.107605941042213270, -0.107655650588871180, -0.107705359866389970, -0.107755068874645810, +-0.107804777613513540, -0.107854486082869310, -0.107904194282588880, -0.107953902212548390, -0.108003609872622710, -0.108053317262688010, -0.108103024382620010, -0.108152731232294890, +-0.108202437811587520, -0.108252144120374020, -0.108301850158530190, -0.108351555925932170, -0.108401261422454810, -0.108450966647974300, -0.108500671602366820, -0.108550376285507220, +-0.108600080697271670, -0.108649784837535910, -0.108699488706176160, -0.108749192303067220, -0.108798895628085310, -0.108848598681106160, -0.108898301462005950, -0.108948003970659550, +-0.108997706206943140, -0.109047408170732470, -0.109097109861903710, -0.109146811280331740, -0.109196512425892750, -0.109246213298462470, -0.109295913897917100, -0.109345614224131500, +-0.109395314276981860, -0.109445014056344380, -0.109494713562093930, -0.109544412794106690, -0.109594111752258420, -0.109643810436425320, -0.109693508846482240, -0.109743206982305390, +-0.109792904843770520, -0.109842602430753850, -0.109892299743130210, -0.109941996780775830, -0.109991693543566460, -0.110041390031378290, -0.110091086244086200, -0.110140782181566410, +-0.110190477843694650, -0.110240173230347140, -0.110289868341398770, -0.110339563176725720, -0.110389257736204200, -0.110438952019709090, -0.110488646027116610, -0.110538339758302500, +-0.110588033213143010, -0.110637726391512970, -0.110687419293288620, -0.110737111918345720, -0.110786804266560480, -0.110836496337807800, -0.110886188131963880, -0.110935879648904490, +-0.110985570888505830, -0.111035261850642800, -0.111084952535191630, -0.111134642942028070, -0.111184333071028350, -0.111234022922067340, -0.111283712495021280, -0.111333401789765950, +-0.111383090806177550, -0.111432779544130970, -0.111482468003502460, -0.111532156184168220, -0.111581844086003130, -0.111631531708883440, -0.111681219052684920, -0.111730906117283810, +-0.111780592902554970, -0.111830279408374660, -0.111879965634618650, -0.111929651581163160, -0.111979337247883120, -0.112029022634654720, -0.112078707741353770, -0.112128392567856490, +-0.112178077114037780, -0.112227761379773890, -0.112277445364940580, -0.112327129069414110, -0.112376812493069370, -0.112426495635782610, -0.112476178497430040, -0.112525861077886590, +-0.112575543377028490, -0.112625225394731520, -0.112674907130871940, -0.112724588585324640, -0.112774269757965880, -0.112823950648671440, -0.112873631257317560, -0.112923311583779160, +-0.112972991627932490, -0.113022671389653340, -0.113072350868817950, -0.113122030065301240, -0.113171708978979460, -0.113221387609728400, -0.113271065957424310, -0.113320744021942130, +-0.113370421803158080, -0.113420099300948420, -0.113469776515188070, -0.113519453445753270, -0.113569130092519840, -0.113618806455364030, -0.113668482534160760, -0.113718158328786290, +-0.113767833839116410, -0.113817509065027400, -0.113867184006394170, -0.113916858663092990, -0.113966533034999650, -0.114016207121990430, -0.114065880923940240, -0.114115554440725350, +-0.114165227672221580, -0.114214900618305180, -0.114264573278851090, -0.114314245653735560, -0.114363917742834860, -0.114413589546023930, -0.114463261063179010, -0.114512932294175960, +-0.114562603238891000, -0.114612273897199110, -0.114661944268976520, -0.114711614354099070, -0.114761284152443040, -0.114810953663883340, -0.114860622888296270, -0.114910291825557630, +-0.114959960475543720, -0.115009628838129460, -0.115059296913191130, -0.115108964700604540, -0.115158632200246000, -0.115208299411990430, -0.115257966335714100, -0.115307632971292870, +-0.115357299318603000, -0.115406965377519430, -0.115456631147918460, -0.115506296629676330, -0.115555961822668040, -0.115605626726769840, -0.115655291341857580, -0.115704955667807520, +-0.115754619704494630, -0.115804283451795190, -0.115853946909585050, -0.115903610077740480, -0.115953272956136440, -0.116002935544649230, -0.116052597843154660, -0.116102259851529050, +-0.116151921569647360, -0.116201582997385850, -0.116251244134620390, -0.116300904981227260, -0.116350565537081420, -0.116400225802059180, -0.116449885776036810, -0.116499545458889270, +-0.116549204850492890, -0.116598863950723480, -0.116648522759457360, -0.116698181276569490, -0.116747839501936170, -0.116797497435433250, -0.116847155076937020, -0.116896812426322470, +-0.116946469483465880, -0.116996126248243130, -0.117045782720530480, -0.117095438900202960, -0.117145094787136830, -0.117194750381207970, -0.117244405682292660, -0.117294060690265920, +-0.117343715405004000, -0.117393369826383250, -0.117443023954278640, -0.117492677788566450, -0.117542331329122590, -0.117591984575823330, -0.117641637528543660, -0.117691290187159900, +-0.117740942551547920, -0.117790594621584030, -0.117840246397143200, -0.117889897878101770, -0.117939549064335570, -0.117989199955720960, -0.118038850552132900, -0.118088500853447710, +-0.118138150859541280, -0.118187800570289910, -0.118237449985568590, -0.118287099105253660, -0.118336747929220970, -0.118386396457346850, -0.118436044689506300, -0.118485692625575650, +-0.118535340265431190, -0.118584987608947950, -0.118634634656002240, -0.118684281406469940, -0.118733927860227390, -0.118783574017149560, -0.118833219877112820, -0.118882865439993000, +-0.118932510705666470, -0.118982155674008230, -0.119031800344894590, -0.119081444718201470, -0.119131088793805160, -0.119180732571580680, -0.119230376051404390, -0.119280019233152150, +-0.119329662116700310, -0.119379304701923860, -0.119428946988699160, -0.119478588976902530, -0.119528230666408980, -0.119577872057094860, -0.119627513148836060, -0.119677153941508910, +-0.119726794434988450, -0.119776434629150980, -0.119826074523872450, -0.119875714119029160, -0.119925353414496140, -0.119974992410149750, -0.120024631105865860, -0.120074269501520850, +-0.120123907596989720, -0.120173545392148830, -0.120223182886874070, -0.120272820081041790, -0.120322456974527020, -0.120372093567206110, -0.120421729858955410, -0.120471365849649930, +-0.120521001539166050, -0.120570636927379670, -0.120620272014167130, -0.120669906799403470, -0.120719541282965040, -0.120769175464727760, -0.120818809344567980, -0.120868442922360740, +-0.120918076197982390, -0.120967709171308850, -0.121017341842216480, -0.121066974210580310, -0.121116606276276710, -0.121166238039181580, -0.121215869499171320, -0.121265500656120930, +-0.121315131509906790, -0.121364762060405270, -0.121414392307491390, -0.121464022251041540, -0.121513651890931630, -0.121563281227038040, -0.121612910259235790, -0.121662538987401270, +-0.121712167411410420, -0.121761795531139570, -0.121811423346463800, -0.121861050857259470, -0.121910678063402510, -0.121960304964769300, -0.122009931561234890, -0.122059557852675640, +-0.122109183838967500, -0.122158809519986850, -0.122208434895608730, -0.122258059965709510, -0.122307684730165160, -0.122357309188852030, -0.122406933341645190, -0.122456557188421020, +-0.122506180729055890, -0.122555803963424870, -0.122605426891404340, -0.122655049512870230, -0.122704671827698950, -0.122754293835765550, -0.122803915536946420, -0.122853536931117500, +-0.122903158018155170, -0.122952778797934510, -0.123002399270331910, -0.123052019435223300, -0.123101639292485080, -0.123151258841992340, -0.123200878083621430, -0.123250497017248330, +-0.123300115642749440, -0.123349733959999800, -0.123399351968875850, -0.123448969669253950, -0.123498587061009180, -0.123548204144017950, -0.123597820918156200, -0.123647437383300350, +-0.123697053539325460, -0.123746669386107940, -0.123796284923523740, -0.123845900151449280, -0.123895515069759610, -0.123945129678331170, -0.123994743977039900, -0.124044357965762210, +-0.124093971644373190, -0.124143585012749230, -0.124193198070766310, -0.124242810818300840, -0.124292423255227910, -0.124342035381423910, -0.124391647196765260, -0.124441258701127060, +-0.124490869894385710, -0.124540480776417190, -0.124590091347097890, -0.124639701606302940, -0.124689311553908740, -0.124738921189791240, -0.124788530513826890, -0.124838139525890780, +-0.124887748225859310, -0.124937356613608480, -0.124986964689014700, -0.125036572451953040, -0.125086179902299980, -0.125135787039931470, -0.125185393864723910, -0.125235000376552440, +-0.125284606575293470, -0.125334212460822990, -0.125383818033017400, -0.125433423291751830, -0.125483028236902720, -0.125532632868346460, -0.125582237185958180, -0.125631841189614320, +-0.125681444879190830, -0.125731048254564190, -0.125780651315609500, -0.125830254062203160, -0.125879856494221200, -0.125929458611540030, -0.125979060414034780, -0.126028661901581850, +-0.126078263074057310, -0.126127863931337510, -0.126177464473297640, -0.126227064699814100, -0.126276664610762900, -0.126326264206020470, -0.126375863485461950, -0.126425462448963770, +-0.126475061096402390, -0.126524659427652900, -0.126574257442591740, -0.126623855141094980, -0.126673452523038990, -0.126723049588298940, -0.126772646336751250, -0.126822242768271980, +-0.126871838882737510, -0.126921434680023010, -0.126971030160004940, -0.127020625322559280, -0.127070220167562500, -0.127119814694889730, -0.127169408904417410, -0.127219002796021580, +-0.127268596369578680, -0.127318189624963860, -0.127367782562053560, -0.127417375180724240, -0.127466967480851040, -0.127516559462310440, -0.127566151124978430, -0.127615742468731470, +-0.127665333493444720, -0.127714924198994630, -0.127764514585257260, -0.127814104652109020, -0.127863694399425080, -0.127913283827081890, -0.127962872934955510, -0.128012461722922380, +-0.128062050190857670, -0.128111638338637810, -0.128161226166138870, -0.128210813673237310, -0.128260400859808280, -0.128309987725728240, -0.128359574270873660, -0.128409160495119720, +-0.128458746398342870, -0.128508331980419140, -0.128557917241225030, -0.128607502180635690, -0.128657086798527610, -0.128706671094776790, -0.128756255069259750, -0.128805838721851610, +-0.128855422052428890, -0.128905005060867610, -0.128954587747044270, -0.129004170110834010, -0.129053752152113320, -0.129103333870758260, -0.129152915266645300, -0.129202496339649610, +-0.129252077089647670, -0.129301657516515570, -0.129351237620129730, -0.129400817400365380, -0.129450396857098970, -0.129499975990207020, -0.129549554799564680, -0.129599133285048460, +-0.129648711446534420, -0.129698289283899010, -0.129747866797017470, -0.129797443985766230, -0.129847020850021390, -0.129896597389659450, -0.129946173604555570, -0.129995749494586250, +-0.130045325059627570, -0.130094900299556030, -0.130144475214246770, -0.130194049803576320, -0.130243624067420770, -0.130293198005656590, -0.130342771618158960, -0.130392344904804420, +-0.130441917865469460, -0.130491490500029260, -0.130541062808360340, -0.130590634790338750, -0.130640206445841010, -0.130689777774742330, -0.130739348776919200, -0.130788919452247690, +-0.130838489800604340, -0.130888059821864300, -0.130937629515904120, -0.130987198882599850, -0.131036767921828060, -0.131086336633463890, -0.131135905017383870, -0.131185473073464120, +-0.131235040801581100, -0.131284608201610030, -0.131334175273427470, -0.131383742016909890, -0.131433308431932520, -0.131482874518371870, -0.131532440276104060, -0.131582005705005560, +-0.131631570804951610, -0.131681135575818760, -0.131730700017483050, -0.131780264129821020, -0.131829827912707890, -0.131879391366020230, -0.131928954489634040, -0.131978517283425940, +-0.132028079747271100, -0.132077641881046040, -0.132127203684626880, -0.132176765157890170, -0.132226326300711100, -0.132275887112966230, -0.132325447594531600, -0.132375007745283820, +-0.132424567565098100, -0.132474127053850920, -0.132523686211418880, -0.132573245037677200, -0.132622803532502390, -0.132672361695770570, -0.132721919527358290, -0.132771477027140760, +-0.132821034194994550, -0.132870591030795760, -0.132920147534420910, -0.132969703705745290, -0.133019259544645390, -0.133068815050997320, -0.133118370224677680, -0.133167925065561660, +-0.133217479573525840, -0.133267033748446310, -0.133316587590199650, -0.133366141098661070, -0.133415694273707140, -0.133465247115214400, -0.133514799623058120, -0.133564351797114840, +-0.133613903637260670, -0.133663455143372190, -0.133713006315324620, -0.133762557152994540, -0.133812107656258090, -0.133861657824991790, -0.133911207659070910, -0.133960757158372000, +-0.134010306322771190, -0.134059855152145080, -0.134109403646368890, -0.134158951805319170, -0.134208499628872100, -0.134258047116904200, -0.134307594269290760, -0.134357141085908320, +-0.134406687566633460, -0.134456233711341440, -0.134505779519908860, -0.134555324992211820, -0.134604870128126890, -0.134654414927529360, -0.134703959390295810, -0.134753503516302330, +-0.134803047305425560, -0.134852590757540690, -0.134902133872524390, -0.134951676650252730, -0.135001219090602310, -0.135050761193448420, -0.135100302958667620, -0.135149844386136090, +-0.135199385475730350, -0.135248926227325730, -0.135298466640798780, -0.135348006716025680, -0.135397546452882990, -0.135447085851245990, -0.135496624910991260, -0.135546163631995450, +-0.135595702014133760, -0.135645240057282850, -0.135694777761318800, -0.135744315126118260, -0.135793852151556480, -0.135843388837510100, -0.135892925183855230, -0.135942461190468490, +-0.135991996857225160, -0.136041532184001830, -0.136091067170674680, -0.136140601817120290, -0.136190136123213960, -0.136239670088832280, -0.136289203713851450, -0.136338736998148020, +-0.136388269941597330, -0.136437802544075950, -0.136487334805460520, -0.136536866725626320, -0.136586398304449940, -0.136635929541807560, -0.136685460437575790, -0.136734990991629950, +-0.136784521203846600, -0.136834051074101990, -0.136883580602272650, -0.136933109788233950, -0.136982638631862470, -0.137032167133034370, -0.137081695291626310, -0.137131223107513580, +-0.137180750580572770, -0.137230277710680110, -0.137279804497712180, -0.137329330941544310, -0.137378857042053100, -0.137428382799115210, -0.137477908212605890, -0.137527433282401830, +-0.137576958008379160, -0.137626482390414560, -0.137676006428383290, -0.137725530122162020, -0.137775053471626910, -0.137824576476654640, -0.137874099137120450, -0.137923621452901020, +-0.137973143423872540, -0.138022665049911650, -0.138072186330893660, -0.138121707266695200, -0.138171227857192460, -0.138220748102262120, -0.138270268001779440, -0.138319787555621100, +-0.138369306763663710, -0.138418825625782640, -0.138468344141854520, -0.138517862311755500, -0.138567380135362290, -0.138616897612550190, -0.138666414743195830, -0.138715931527175460, +-0.138765447964365680, -0.138814964054641830, -0.138864479797880610, -0.138913995193958140, -0.138963510242751160, -0.139013024944134950, -0.139062539297986180, -0.139112053304181050, +-0.139161566962596240, -0.139211080273107080, -0.139260593235590200, -0.139310105849921840, -0.139359618115978660, -0.139409130033636000, -0.139458641602770520, -0.139508152823258870, +-0.139557663694976410, -0.139607174217799780, -0.139656684391605200, -0.139706194216269370, -0.139755703691667590, -0.139805212817676580, -0.139854721594172500, -0.139904230021032080, +-0.139953738098130660, -0.140003245825344870, -0.140052753202550980, -0.140102260229625660, -0.140151766906444210, -0.140201273232883370, -0.140250779208819340, -0.140300284834128820, +-0.140349790108687120, -0.140399295032370950, -0.140448799605056990, -0.140498303826620600, -0.140547807696938450, -0.140597311215886760, -0.140646814383342260, -0.140696317199180240, +-0.140745819663277450, -0.140795321775510130, -0.140844823535754920, -0.140894324943887230, -0.140943825999783720, -0.140993326703320650, -0.141042827054374710, -0.141092327052821240, +-0.141141826698536980, -0.141191325991398110, -0.141240824931281400, -0.141290323518062170, -0.141339821751617160, -0.141389319631823020, -0.141438817158555140, -0.141488314331690210, +-0.141537811151104500, -0.141587307616674710, -0.141636803728276190, -0.141686299485785680, -0.141735794889079390, -0.141785289938034100, -0.141834784632525110, -0.141884278972429170, +-0.141933772957622550, -0.141983266587981910, -0.142032759863382680, -0.142082252783701540, -0.142131745348814790, -0.142181237558599070, -0.142230729412929860, -0.142280220911683820, +-0.142329712054737210, -0.142379202841966780, -0.142428693273247890, -0.142478183348457270, -0.142527673067471630, -0.142577162430166380, -0.142626651436418200, -0.142676140086103410, +-0.142725628379098720, -0.142775116315279480, -0.142824603894522480, -0.142874091116703960, -0.142923577981700660, -0.142973064489387990, -0.143022550639642610, -0.143072036432340900, +-0.143121521867359520, -0.143171006944573910, -0.143220491663860750, -0.143269976025096390, -0.143319460028157510, -0.143368943672919550, -0.143418426959259240, -0.143467909887053300, +-0.143517392456177150, -0.143566874666507500, -0.143616356517920680, -0.143665838010293400, -0.143715319143501080, -0.143764799917420470, -0.143814280331927860, -0.143863760386899990, +-0.143913240082212260, -0.143962719417741470, -0.144012198393363850, -0.144061677008956200, -0.144111155264393890, -0.144160633159553690, -0.144210110694311920, -0.144259587868545310, +-0.144309064682129310, -0.144358541134940620, -0.144408017226856030, -0.144457492957750950, -0.144506968327502150, -0.144556443335985910, -0.144605917983079040, -0.144655392268656900, +-0.144704866192596290, -0.144754339754773500, -0.144803812955065340, -0.144853285793347160, -0.144902758269495810, -0.144952230383387530, -0.145001702134899130, -0.145051173523906040, +-0.145100644550284990, -0.145150115213912360, -0.145199585514664860, -0.145249055452417950, -0.145298525027048430, -0.145347994238433030, -0.145397463086447190, -0.145446931570967690, +-0.145496399691870890, -0.145545867449033500, -0.145595334842331000, -0.145644801871640190, -0.145694268536837370, -0.145743734837799320, -0.145793200774401470, -0.145842666346520630, +-0.145892131554033130, -0.145941596396815730, -0.145991060874743890, -0.146040524987694430, -0.146089988735543630, -0.146139452118168310, -0.146188915135443940, -0.146238377787247240, +-0.146287840073454630, -0.146337301993942850, -0.146386763548587370, -0.146436224737264980, -0.146485685559852470, -0.146535146016225300, -0.146584606106260280, -0.146634065829833740, +-0.146683525186822480, -0.146732984177101950, -0.146782442800548970, -0.146831901057039890, -0.146881358946451490, -0.146930816468659270, -0.146980273623539990, -0.147029730410970030, +-0.147079186830826160, -0.147128642882983910, -0.147178098567320060, -0.147227553883710950, -0.147277008832033400, -0.147326463412162880, -0.147375917623976200, -0.147425371467350190, +-0.147474824942160270, -0.147524278048283330, -0.147573730785595690, -0.147623183153974130, -0.147672635153294210, -0.147722086783432680, -0.147771538044265930, -0.147820988935670780, +-0.147870439457522730, -0.147919889609698570, -0.147969339392074680, -0.148018788804527900, -0.148068237846933680, -0.148117686519168900, -0.148167134821109880, -0.148216582752633470, +-0.148266030313615150, -0.148315477503931790, -0.148364924323460130, -0.148414370772075750, -0.148463816849655430, -0.148513262556075580, -0.148562707891213010, -0.148612152854943220, +-0.148661597447143050, -0.148711041667688920, -0.148760485516457600, -0.148809928993324600, -0.148859372098166800, -0.148908814830860580, -0.148958257191282750, -0.149007699179308840, +-0.149057140794815690, -0.149106582037679680, -0.149156022907777660, -0.149205463404985140, -0.149254903529178970, -0.149304343280235540, -0.149353782658031680, -0.149403221662442910, +-0.149452660293346110, -0.149502098550618110, -0.149551536434134410, -0.149600973943771860, -0.149650411079406880, -0.149699847840916310, -0.149749284228175680, -0.149798720241061830, +-0.149848155879451220, -0.149897591143220630, -0.149947026032245610, -0.149996460546403060, -0.150045894685569340, -0.150095328449621310, -0.150144761838434530, -0.150194194851885840, +-0.150243627489851680, -0.150293059752208890, -0.150342491638832980, -0.150391923149600870, -0.150441354284389400, -0.150490785043074090, -0.150540215425531810, -0.150589645431639000, +-0.150639075061272530, -0.150688504314307910, -0.150737933190622040, -0.150787361690091330, -0.150836789812592660, -0.150886217558001580, -0.150935644926194930, -0.150985071917049210, +-0.151034498530441210, -0.151083924766246550, -0.151133350624342080, -0.151182776104604230, -0.151232201206909860, -0.151281625931134560, -0.151331050277155210, -0.151380474244848660, +-0.151429897834090470, -0.151479321044757560, -0.151528743876726350, -0.151578166329873700, -0.151627588404075200, -0.151677010099207730, -0.151726431415147740, -0.151775852351772130, +-0.151825272908956420, -0.151874693086577530, -0.151924112884511910, -0.151973532302636470, -0.152022951340826720, -0.152072369998959620, -0.152121788276911580, -0.152171206174559540, +-0.152220623691778990, -0.152270040828446920, -0.152319457584440180, -0.152368873959634360, -0.152418289953906360, -0.152467705567132630, -0.152517120799190080, -0.152566535649954260, +-0.152615950119302120, -0.152665364207110130, -0.152714777913255130, -0.152764191237612760, -0.152813604180059930, -0.152863016740473060, -0.152912428918729110, -0.152961840714703650, +-0.153011252128273570, -0.153060663159315350, -0.153110073807705940, -0.153159484073320890, -0.153208893956037150, -0.153258303455731160, -0.153307712572279850, -0.153357121305558810, +-0.153406529655444990, -0.153455937621815250, -0.153505345204545260, -0.153554752403511910, -0.153604159218591660, -0.153653565649661460, -0.153702971696596890, -0.153752377359274910, +-0.153801782637571990, -0.153851187531365040, -0.153900592040529690, -0.153949996164942840, -0.153999399904481030, -0.154048803259021150, -0.154098206228438810, -0.154147608812610970, +-0.154197011011414090, -0.154246412824725120, -0.154295814252419700, -0.154345215294374730, -0.154394615950467160, -0.154444016220572630, -0.154493416104568040, -0.154542815602329940, +-0.154592214713735190, -0.154641613438659510, -0.154691011776979780, -0.154740409728572500, -0.154789807293314650, -0.154839204471081850, -0.154888601261751050, -0.154937997665198720, +-0.154987393681301850, -0.155036789309936060, -0.155086184550978280, -0.155135579404305060, -0.155184973869793300, -0.155234367947318710, -0.155283761636758170, -0.155333154937988660, +-0.155382547850885840, -0.155431940375326650, -0.155481332511187590, -0.155530724258345660, -0.155580115616676480, -0.155629506586057010, -0.155678897166363770, -0.155728287357473710, +-0.155777677159262500, -0.155827066571607110, -0.155876455594384040, -0.155925844227470270, -0.155975232470741470, -0.156024620324074580, -0.156074007787346120, -0.156123394860433110, +-0.156172781543211150, -0.156222167835557260, -0.156271553737347940, -0.156320939248460160, -0.156370324368769600, -0.156419709098153230, -0.156469093436488040, -0.156518477383649660, +-0.156567860939515110, -0.156617244103960880, -0.156666626876863970, -0.156716009258100090, -0.156765391247546180, -0.156814772845078780, -0.156864154050574880, -0.156913534863910160, +-0.156962915284961620, -0.157012295313605780, -0.157061674949719650, -0.157111054193178860, -0.157160433043860490, -0.157209811501640980, -0.157259189566397420, -0.157308567238005430, +-0.157357944516342020, -0.157407321401284220, -0.157456697892707640, -0.157506073990489330, -0.157555449694505830, -0.157604825004634130, -0.157654199920749970, -0.157703574442730280, +-0.157752948570451660, -0.157802322303791100, -0.157851695642624300, -0.157901068586828260, -0.157950441136279570, -0.157999813290855190, -0.158049185050430830, -0.158098556414883550, +-0.158147927384089840, -0.158197297957926780, -0.158246668136270000, -0.158296037918996570, -0.158345407305983480, -0.158394776297106440, -0.158444144892242460, -0.158493513091268110, +-0.158542880894060430, -0.158592248300495090, -0.158641615310449150, -0.158690981923799160, -0.158740348140422150, -0.158789713960193840, -0.158839079382991240, -0.158888444408690930, +-0.158937809037169970, -0.158987173268304030, -0.159036537101970190, -0.159085900538044970, -0.159135263576405450, -0.159184626216927330, -0.159233988459487660, -0.159283350303963430, +-0.159332711750230390, -0.159382072798165600, -0.159431433447645600, -0.159480793698547480, -0.159530153550746900, -0.159579513004120960, -0.159628872058546260, -0.159678230713899780, +-0.159727588970057290, -0.159776946826895830, -0.159826304284292040, -0.159875661342122890, -0.159925018000264150, -0.159974374258592870, -0.160023730116985650, -0.160073085575319550, +-0.160122440633470310, -0.160171795291314950, -0.160221149548730100, -0.160270503405592820, -0.160319856861778850, -0.160369209917165220, -0.160418562571629040, -0.160467914825045970, +-0.160517266677293130, -0.160566618128247130, -0.160615969177785030, -0.160665319825782550, -0.160714670072116790, -0.160764019916664340, -0.160813369359302290, -0.160862718399906370, +-0.160912067038353650, -0.160961415274520760, -0.161010763108284800, -0.161060110539521460, -0.161109457568107850, -0.161158804193920620, -0.161208150416836780, -0.161257496236732160, +-0.161306841653483770, -0.161356186666968740, -0.161405531277062810, -0.161454875483643040, -0.161504219286586060, -0.161553562685768980, -0.161602905681067580, -0.161652248272358880, +-0.161701590459519600, -0.161750932242426760, -0.161800273620956140, -0.161849614594984870, -0.161898955164389540, -0.161948295329047250, -0.161997635088833800, -0.162046974443626260, +-0.162096313393301270, -0.162145651937735950, -0.162194990076806070, -0.162244327810388690, -0.162293665138360940, -0.162343002060598600, -0.162392338576978740, -0.162441674687378050, +-0.162491010391673600, -0.162540345689741180, -0.162589680581457920, -0.162639015066700450, -0.162688349145345860, -0.162737682817269970, -0.162787016082349880, -0.162836348940462230, +-0.162885681391484180, -0.162935013435291460, -0.162984345071761210, -0.163033676300770120, -0.163083007122195260, -0.163132337535912440, -0.163181667541798770, -0.163230997139730940, +-0.163280326329586060, -0.163329655111239920, -0.163378983484569670, -0.163428311449452360, -0.163477639005763840, -0.163526966153381250, -0.163576292892181230, -0.163625619222040890, +-0.163674945142836090, -0.163724270654443920, -0.163773595756741080, -0.163822920449604700, -0.163872244732910570, -0.163921568606535810, -0.163970892070357140, -0.164020215124251690, +-0.164069537768095240, -0.164118860001764980, -0.164168181825137540, -0.164217503238090090, -0.164266824240498460, -0.164316144832239750, -0.164365465013191130, -0.164414784783228410, +-0.164464104142228700, -0.164513423090068780, -0.164562741626625710, -0.164612059751775340, -0.164661377465394830, -0.164710694767360890, -0.164760011657550610, -0.164809328135839900, +-0.164858644202105860, -0.164907959856225220, -0.164957275098075120, -0.165006589927531370, -0.165055904344471150, -0.165105218348771180, -0.165154531940308600, -0.165203845118959250, +-0.165253157884600290, -0.165302470237108870, -0.165351782176360850, -0.165401093702233350, -0.165450404814603130, -0.165499715513347360, -0.165549025798341830, -0.165598335669463750, +-0.165647645126589800, -0.165696954169597200, -0.165746262798361800, -0.165795571012760710, -0.165844878812670710, -0.165894186197968950, -0.165943493168531270, -0.165992799724234860, +-0.166042105864956460, -0.166091411590573250, -0.166140716900961050, -0.166190021795997070, -0.166239326275558460, -0.166288630339521100, -0.166337933987762170, -0.166387237220158410, +-0.166436540036586980, -0.166485842436923770, -0.166535144421045940, -0.166584445988830270, -0.166633747140153910, -0.166683047874892770, -0.166732348192923980, -0.166781648094124320, +-0.166830947578371000, -0.166880246645539850, -0.166929545295508100, -0.166978843528152480, -0.167028141343350200, -0.167077438740977110, -0.167126735720910440, -0.167176032283026910, +-0.167225328427203750, -0.167274624153316840, -0.167323919461243360, -0.167373214350860530, -0.167422508822044210, -0.167471802874671620, -0.167521096508619540, -0.167570389723765150, +-0.167619682519984330, -0.167668974897154320, -0.167718266855151870, -0.167767558393854180, -0.167816849513137190, -0.167866140212878050, -0.167915430492953540, -0.167964720353240920, +-0.168014009793616050, -0.168063298813956180, -0.168112587414138040, -0.168161875594038860, -0.168211163353534590, -0.168260450692502370, -0.168309737610819490, -0.168359024108361820, +-0.168408310185006570, -0.168457595840630580, -0.168506881075111000, -0.168556165888323810, -0.168605450280146200, -0.168654734250454960, -0.168704017799127300, -0.168753300926039180, +-0.168802583631067820, -0.168851865914089990, -0.168901147774982940, -0.168950429213622580, -0.168999710229886140, -0.169048990823650410, -0.169098270994792660, -0.169147550743188800, +-0.169196830068716050, -0.169246108971251670, -0.169295387450671580, -0.169344665506853010, -0.169393943139672790, -0.169443220349008130, -0.169492497134735020, -0.169541773496730640, +-0.169591049434871830, -0.169640324949035830, -0.169689600039098580, -0.169738874704937340, -0.169788148946428910, -0.169837422763450540, -0.169886696155878180, -0.169935969123589080, +-0.169985241666460060, -0.170034513784368370, -0.170083785477189940, -0.170133056744802090, -0.170182327587081540, -0.170231598003905670, -0.170280867995150330, -0.170330137560692820, +-0.170379406700410410, -0.170428675414179050, -0.170477943701875990, -0.170527211563378110, -0.170576478998562600, -0.170625746007305460, -0.170675012589483950, -0.170724278744974920, +-0.170773544473655640, -0.170822809775402040, -0.170872074650091440, -0.170921339097600630, -0.170970603117806930, -0.171019866710586250, -0.171069129875815930, -0.171118392613372780, +-0.171167654923134100, -0.171216916804975830, -0.171266178258775270, -0.171315439284409700, -0.171364699881755090, -0.171413960050688760, -0.171463219791087500, -0.171512479102828630, +-0.171561737985788140, -0.171610996439843290, -0.171660254464870960, -0.171709512060748410, -0.171758769227351670, -0.171808025964557990, -0.171857282272244260, -0.171906538150287750, +-0.171955793598564470, -0.172005048616951710, -0.172054303205326300, -0.172103557363565580, -0.172152811091545540, -0.172202064389143460, -0.172251317256236660, -0.172300569692701130, +-0.172349821698414200, -0.172399073273252680, -0.172448324417093930, -0.172497575129813920, -0.172546825411289990, -0.172596075261399000, -0.172645324680018250, -0.172694573667023730, +-0.172743822222292810, -0.172793070345702320, -0.172842318037129600, -0.172891565296450640, -0.172940812123542760, -0.172990058518282840, -0.173039304480548240, -0.173088550010214920, +-0.173137795107160240, -0.173187039771261510, -0.173236284002394710, -0.173285527800437240, -0.173334771165265940, -0.173384014096758160, -0.173433256594789890, -0.173482498659238480, +-0.173531740289980810, -0.173580981486894240, -0.173630222249854800, -0.173679462578739780, -0.173728702473426120, -0.173777941933791120, -0.173827180959710840, -0.173876419551062620, +-0.173925657707723340, -0.173974895429570340, -0.174024132716479680, -0.174073369568328670, -0.174122605984994270, -0.174171841966353770, -0.174221077512283220, -0.174270312622659990, +-0.174319547297361400, -0.174368781536263530, -0.174418015339243700, -0.174467248706178800, -0.174516481636946250, -0.174565714131422050, -0.174614946189483560, -0.174664177811007710, +-0.174713408995871840, -0.174762639743952040, -0.174811870055125610, -0.174861099929269510, -0.174910329366261110, -0.174959558365976460, -0.175008786928292890, -0.175058015053087380, +-0.175107242740237230, -0.175156469989618560, -0.175205696801108730, -0.175254923174585080, -0.175304149109923670, -0.175353374607001900, -0.175402599665696680, -0.175451824285885430, +-0.175501048467444160, -0.175550272210250270, -0.175599495514180690, -0.175648718379112830, -0.175697940804922740, -0.175747162791487780, -0.175796384338684910, -0.175845605446391520, +-0.175894826114483680, -0.175944046342838780, -0.175993266131333760, -0.176042485479846020, -0.176091704388251640, -0.176140922856427990, -0.176190140884252440, -0.176239358471601130, +-0.176288575618351430, -0.176337792324380270, -0.176387008589565080, -0.176436224413781930, -0.176485439796908200, -0.176534654738820910, -0.176583869239397400, -0.176633083298513770, +-0.176682296916047420, -0.176731510091875350, -0.176780722825874950, -0.176829935117922300, -0.176879146967894810, -0.176928358375669450, -0.176977569341123630, -0.177026779864133450, +-0.177075989944576320, -0.177125199582329220, -0.177174408777269530, -0.177223617529273430, -0.177272825838218240, -0.177322033703981450, -0.177371241126439150, -0.177420448105468730, +-0.177469654640947190, -0.177518860732751940, -0.177568066380759120, -0.177617271584846110, -0.177666476344889940, -0.177715680660768010, -0.177764884532356450, -0.177814087959532690, +-0.177863290942173680, -0.177912493480156890, -0.177961695573358450, -0.178010897221655750, -0.178060098424925820, -0.178109299183046050, -0.178158499495892630, -0.178207699363342940, +-0.178256898785274450, -0.178306097761563280, -0.178355296292086850, -0.178404494376722210, -0.178453692015346750, -0.178502889207836610, -0.178552085954069270, -0.178601282253921690, +-0.178650478107271360, -0.178699673513994410, -0.178748868473968260, -0.178798062987069930, -0.178847257053176890, -0.178896450672165250, -0.178945643843912510, -0.178994836568295650, +-0.179044028845192160, -0.179093220674478140, -0.179142412056031070, -0.179191602989728390, -0.179240793475446280, -0.179289983513062190, -0.179339173102453150, -0.179388362243496610, +-0.179437550936068700, -0.179486739180046930, -0.179535926975308320, -0.179585114321730330, -0.179634301219189110, -0.179683487667562150, -0.179732673666726460, -0.179781859216559510, +-0.179831044316937500, -0.179880228967737870, -0.179929413168837650, -0.179978596920114360, -0.180027780221444140, -0.180076963072704460, -0.180126145473772810, -0.180175327424525360, +-0.180224508924839570, -0.180273689974592530, -0.180322870573661700, -0.180372050721923280, -0.180421230419254700, -0.180470409665533040, -0.180519588460635820, -0.180568766804439170, +-0.180617944696820630, -0.180667122137657200, -0.180716299126826410, -0.180765475664204450, -0.180814651749668790, -0.180863827383096500, -0.180913002564365070, -0.180962177293350710, +-0.181011351569930900, -0.181060525393982710, -0.181109698765383630, -0.181158871684009900, -0.181208044149738980, -0.181257216162448360, -0.181306387722014290, -0.181355558828314250, +-0.181404729481225300, -0.181453899680624970, -0.181503069426389470, -0.181552238718396260, -0.181601407556522490, -0.181650575940645630, -0.181699743870641860, -0.181748911346388760, +-0.181798078367763380, -0.181847244934643240, -0.181896411046904540, -0.181945576704424820, -0.181994741907081180, -0.182043906654751090, -0.182093070947310810, -0.182142234784637870, +-0.182191398166609760, -0.182240561093102720, -0.182289723563994250, -0.182338885579161500, -0.182388047138481970, -0.182437208241831910, -0.182486368889088780, -0.182535529080129770, +-0.182584688814832360, -0.182633848093072790, -0.182683006914728610, -0.182732165279676890, -0.182781323187795190, -0.182830480638959760, -0.182879637633048150, -0.182928794169937430, +-0.182977950249505140, -0.183027105871627570, -0.183076261036182210, -0.183125415743046640, -0.183174569992097110, -0.183223723783211140, -0.183272877116265860, -0.183322029991138840, +-0.183371182407706280, -0.183420334365845790, -0.183469485865434460, -0.183518636906349840, -0.183567787488468190, -0.183616937611667090, -0.183666087275823620, -0.183715236480815390, +-0.183764385226518640, -0.183813533512810910, -0.183862681339569340, -0.183911828706671530, -0.183960975613993690, -0.184010122061413400, -0.184059268048807820, -0.184108413576054510, +-0.184157558643029740, -0.184206703249611050, -0.184255847395676050, -0.184304991081100990, -0.184354134305763470, -0.184403277069540600, -0.184452419372309970, -0.184501561213947870, +-0.184550702594331840, -0.184599843513339080, -0.184648983970847140, -0.184698123966732300, -0.184747263500872140, -0.184796402573143840, -0.184845541183424970, -0.184894679331591790, +-0.184943817017521940, -0.184992954241092520, -0.185042091002181160, -0.185091227300664160, -0.185140363136419070, -0.185189498509323510, -0.185238633419253760, -0.185287767866087440, +-0.185336901849701700, -0.185386035369974140, -0.185435168426781040, -0.185484301020000050, -0.185533433149508260, -0.185582564815183370, -0.185631696016901600, -0.185680826754540620, +-0.185729957027977570, -0.185779086837090050, -0.185828216181754350, -0.185877345061848160, -0.185926473477248580, -0.185975601427833260, -0.186024728913478490, -0.186073855934061920, +-0.186122982489461130, -0.186172108579552440, -0.186221234204213490, -0.186270359363321450, -0.186319484056753970, -0.186368608284387310, -0.186417732046099150, -0.186466855341766660, +-0.186515978171267440, -0.186565100534477860, -0.186614222431275540, -0.186663343861537660, -0.186712464825141840, -0.186761585321964440, -0.186810705351883070, -0.186859824914774930, +-0.186908944010517660, -0.186958062638987620, -0.187007180800062400, -0.187056298493619680, -0.187105415719535760, -0.187154532477688320, -0.187203648767954530, -0.187252764590212060, +-0.187301879944337250, -0.187350994830207730, -0.187400109247700730, -0.187449223196693910, -0.187498336677063560, -0.187547449688687390, -0.187596562231442610, -0.187645674305206840, +-0.187694785909856440, -0.187743897045269090, -0.187793007711321990, -0.187842117907892820, -0.187891227634857910, -0.187940336892094940, -0.187989445679481120, -0.188038553996894090, +-0.188087661844210270, -0.188136769221307320, -0.188185876128062840, -0.188234982564353250, -0.188284088530056210, -0.188333194025048940, -0.188382299049209140, -0.188431403602413140, +-0.188480507684538640, -0.188529611295462860, -0.188578714435063490, -0.188627817103216910, -0.188676919299800770, -0.188726021024692330, -0.188775122277769300, -0.188824223058908000, +-0.188873323367986150, -0.188922423204881010, -0.188971522569470220, -0.189020621461630210, -0.189069719881238630, -0.189118817828173190, -0.189167915302310280, -0.189217012303527580, +-0.189266108831702330, -0.189315204886712270, -0.189364300468433750, -0.189413395576744470, -0.189462490211521730, -0.189511584372643180, -0.189560678059985220, -0.189609771273425570, +-0.189658864012841520, -0.189707956278110710, -0.189757048069109590, -0.189806139385715860, -0.189855230227806790, -0.189904320595260050, -0.189953410487952080, -0.190002499905760600, +-0.190051588848563300, -0.190100677316236590, -0.190149765308658180, -0.190198852825705370, -0.190247939867255830, -0.190297026433186050, -0.190346112523373660, -0.190395198137696040, +-0.190444283276030830, -0.190493367938254470, -0.190542452124244700, -0.190591535833878810, -0.190640619067034500, -0.190689701823588210, -0.190738784103417660, -0.190787865906400150, +-0.190836947232413430, -0.190886028081333900, -0.190935108453039290, -0.190984188347406910, -0.191033267764314510, -0.191082346703638490, -0.191131425165256610, -0.191180503149046580, +-0.191229580654884880, -0.191278657682649230, -0.191327734232216940, -0.191376810303465730, -0.191425885896272070, -0.191474961010513700, -0.191524035646067930, -0.191573109802812500, +-0.191622183480623850, -0.191671256679379760, -0.191720329398957500, -0.191769401639234890, -0.191818473400088310, -0.191867544681395550, -0.191916615483033960, -0.191965685804881240, +-0.192014755646813860, -0.192063825008709610, -0.192112893890446220, -0.192161962291900160, -0.192211030212949220, -0.192260097653470690, -0.192309164613342350, -0.192358231092440660, +-0.192407297090643390, -0.192456362607827890, -0.192505427643871910, -0.192554492198651920, -0.192603556272045700, -0.192652619863930590, -0.192701682974184390, -0.192750745602683520, +-0.192799807749305770, -0.192848869413928540, -0.192897930596429570, -0.192946991296685300, -0.192996051514573580, -0.193045111249972170, -0.193094170502757540, -0.193143229272807470, +-0.193192287559999340, -0.193241345364210950, -0.193290402685318720, -0.193339459523200500, -0.193388515877733650, -0.193437571748795920, -0.193486627136263830, -0.193535682040015170, +-0.193584736459927330, -0.193633790395878050, -0.193682843847743900, -0.193731896815402590, -0.193780949298731580, -0.193830001297608610, -0.193879052811910200, -0.193928103841514180, +-0.193977154386297870, -0.194026204446139130, -0.194075254020914440, -0.194124303110501610, -0.194173351714778450, -0.194222399833621500, -0.194271447466908530, -0.194320494614516950, +-0.194369541276324580, -0.194418587452207910, -0.194467633142044770, -0.194516678345712540, -0.194565723063089060, -0.194614767294050830, -0.194663811038475690, -0.194712854296241020, +-0.194761897067224660, -0.194810939351303090, -0.194859981148354210, -0.194909022458255340, -0.194958063280884390, -0.195007103616117810, -0.195056143463833490, -0.195105182823909230, +-0.195154221696221600, -0.195203260080648420, -0.195252297977067060, -0.195301335385355410, -0.195350372305389990, -0.195399408737048640, -0.195448444680208750, -0.195497480134748190, +-0.195546515100543490, -0.195595549577472520, -0.195644583565412670, -0.195693617064241790, -0.195742650073836450, -0.195791682594074480, -0.195840714624833300, -0.195889746165990750, +-0.195938777217423420, -0.195987807779009120, -0.196036837850625760, -0.196085867432149870, -0.196134896523459310, -0.196183925124431500, -0.196232953234944330, -0.196281980854874330, +-0.196331007984099390, -0.196380034622496900, -0.196429060769944790, -0.196478086426319590, -0.196527111591499160, -0.196576136265360940, -0.196625160447782830, -0.196674184138641380, +-0.196723207337814480, -0.196772230045179570, -0.196821252260614500, -0.196870273983995870, -0.196919295215201550, -0.196968315954109440, -0.197017336200596080, -0.197066355954539420, +-0.197115375215816850, -0.197164393984306270, -0.197213412259884260, -0.197262430042428740, -0.197311447331817130, -0.197360464127927350, -0.197409480430635970, -0.197458496239820900, +-0.197507511555359590, -0.197556526377129920, -0.197605540705008490, -0.197654554538873230, -0.197703567878601580, -0.197752580724071450, -0.197801593075159430, -0.197850604931743420, +-0.197899616293700900, -0.197948627160909770, -0.197997637533246650, -0.198046647410589420, -0.198095656792816020, -0.198144665679803040, -0.198193674071428380, -0.198242681967569560, +-0.198291689368104460, -0.198340696272909710, -0.198389702681863210, -0.198438708594842440, -0.198487714011725350, -0.198536718932388530, -0.198585723356709930, -0.198634727284567020, +-0.198683730715837700, -0.198732733650398650, -0.198781736088127740, -0.198830738028902500, -0.198879739472600870, -0.198928740419099440, -0.198977740868276160, -0.199026740820008960, +-0.199075740274174460, -0.199124739230650630, -0.199173737689314960, -0.199222735650045360, -0.199271733112718480, -0.199320730077212290, -0.199369726543404260, -0.199418722511172350, +-0.199467717980393200, -0.199516712950944780, -0.199565707422704550, -0.199614701395550490, -0.199663694869359230, -0.199712687844008750, -0.199761680319376550, -0.199810672295340580, +-0.199859663771777500, -0.199908654748565260, -0.199957645225581820, -0.200006635202703810, -0.200055624679809220, -0.200104613656775590, -0.200153602133480850, -0.200202590109801680, +-0.200251577585616010, -0.200300564560801420, -0.200349551035235830, -0.200398537008795950, -0.200447522481359720, -0.200496507452804670, -0.200545491923008800, -0.200594475891848760, +-0.200643459359202550, -0.200692442324947680, -0.200741424788962120, -0.200790406751122590, -0.200839388211307040, -0.200888369169392980, -0.200937349625258470, -0.200986329578780150, +-0.201035309029835990, -0.201084287978304020, -0.201133266424060870, -0.201182244366984560, -0.201231221806952630, -0.201280198743843090, -0.201329175177532630, -0.201378151107899220, +-0.201427126534820450, -0.201476101458174270, -0.201525075877837410, -0.201574049793687870, -0.201623023205603210, -0.201671996113461400, -0.201720968517139190, -0.201769940416514550, +-0.201818911811465080, -0.201867882701868730, -0.201916853087602270, -0.201965822968543650, -0.202014792344570930, -0.202063761215560770, -0.202112729581391230, -0.202161697441939850, +-0.202210664797084660, -0.202259631646702380, -0.202308597990671020, -0.202357563828868190, -0.202406529161171860, -0.202455493987458770, -0.202504458307606940, -0.202553422121493990, +-0.202602385428997890, -0.202651348229995420, -0.202700310524364570, -0.202749272311982920, -0.202798233592728560, -0.202847194366478160, -0.202896154633109780, -0.202945114392501460, +-0.202994073644529900, -0.203043032389073150, -0.203091990626008830, -0.203140948355214980, -0.203189905576568320, -0.203238862289946890, -0.203287818495228310, -0.203336774192290600, +-0.203385729381010540, -0.203434684061266140, -0.203483638232935050, -0.203532591895895290, -0.203581545050023600, -0.203630497695198090, -0.203679449831296290, -0.203728401458196320, +-0.203777352575774920, -0.203826303183910120, -0.203875253282480020, -0.203924202871361320, -0.203973151950432140, -0.204022100519570070, -0.204071048578653190, -0.204119996127558240, +-0.204168943166163320, -0.204217889694346010, -0.204266835711984450, -0.204315781218955360, -0.204364726215136790, -0.204413670700406420, -0.204462614674642300, -0.204511558137721230, +-0.204560501089521230, -0.204609443529920000, -0.204658385458795610, -0.204707326876024800, -0.204756267781485670, -0.204805208175055880, -0.204854148056613510, -0.204903087426035330, +-0.204952026283199450, -0.205000964627983890, -0.205049902460265530, -0.205098839779922380, -0.205147776586832170, -0.205196712880872930, -0.205245648661921460, -0.205294583929855890, +-0.205343518684553860, -0.205392452925893450, -0.205441386653751500, -0.205490319868006060, -0.205539252568534840, -0.205588184755215900, -0.205637116427926060, -0.205686047586543460, +-0.205734978230945720, -0.205783908361010990, -0.205832837976616030, -0.205881767077638970, -0.205930695663957970, -0.205979623735449760, -0.206028551291992490, -0.206077478333463850, +-0.206126404859741960, -0.206175330870703610, -0.206224256366226930, -0.206273181346189600, -0.206322105810469780, -0.206371029758944250, -0.206419953191491150, -0.206468876107988140, +-0.206517798508313420, -0.206566720392343720, -0.206615641759957250, -0.206664562611031670, -0.206713482945445120, -0.206762402763074420, -0.206811322063797740, -0.206860240847493160, +-0.206909159114037540, -0.206958076863309030, -0.207006994095185330, -0.207055910809544580, -0.207104827006263620, -0.207153742685220600, -0.207202657846293210, -0.207251572489359630, +-0.207300486614296650, -0.207349400220982470, -0.207398313309294810, -0.207447225879111770, -0.207496137930310240, -0.207545049462768390, -0.207593960476363890, -0.207642870970974950, +-0.207691780946478360, -0.207740690402752340, -0.207789599339674590, -0.207838507757123290, -0.207887415654975260, -0.207936323033108690, -0.207985229891401780, -0.208034136229731330, +-0.208083042047975560, -0.208131947346012170, -0.208180852123719340, -0.208229756380973960, -0.208278660117654200, -0.208327563333637780, -0.208376466028802890, -0.208425368203026370, +-0.208474269856186470, -0.208523170988160870, -0.208572071598827790, -0.208620971688064090, -0.208669871255747960, -0.208718770301757170, -0.208767668825969870, -0.208816566828262970, +-0.208865464308514630, -0.208914361266603090, -0.208963257702405200, -0.209012153615799200, -0.209061049006662780, -0.209109943874874170, -0.209158838220310280, -0.209207732042849290, +-0.209256625342368970, -0.209305518118747540, -0.209354410371861840, -0.209403302101590140, -0.209452193307810200, -0.209501083990400180, -0.209549974149237040, -0.209598863784198950, +-0.209647752895163710, -0.209696641482009500, -0.209745529544613290, -0.209794417082853210, -0.209843304096607560, -0.209892190585753200, -0.209941076550168360, -0.209989961989730830, +-0.210038846904318840, -0.210087731293809280, -0.210136615158080410, -0.210185498497010010, -0.210234381310476280, -0.210283263598356170, -0.210332145360527910, -0.210381026596869270, +-0.210429907307258500, -0.210478787491572530, -0.210527667149689600, -0.210576546281487480, -0.210625424886844440, -0.210674302965637410, -0.210723180517744630, -0.210772057543044320, +-0.210820934041413420, -0.210869810012730200, -0.210918685456872450, -0.210967560373718440, -0.211016434763145080, -0.211065308625030620, -0.211114181959252910, -0.211163054765690170, +-0.211211927044219370, -0.211260798794718730, -0.211309670017066100, -0.211358540711139740, -0.211407410876816610, -0.211456280513974910, -0.211505149622492530, -0.211554018202247730, +-0.211602886253117430, -0.211651753774979910, -0.211700620767713010, -0.211749487231194990, -0.211798353165302820, -0.211847218569914790, -0.211896083444909120, -0.211944947790162820, +-0.211993811605554140, -0.212042674890960930, -0.212091537646261460, -0.212140399871332740, -0.212189261566053000, -0.212238122730300100, -0.212286983363952350, -0.212335843466886690, +-0.212384703038981440, -0.212433562080114410, -0.212482420590163920, -0.212531278569006940, -0.212580136016521790, -0.212628992932586270, -0.212677849317078700, -0.212726705169876100, +-0.212775560490856720, -0.212824415279898870, -0.212873269536879540, -0.212922123261677060, -0.212970976454169240, -0.213019829114234450, -0.213068681241749630, -0.213117532836593100, +-0.213166383898642760, -0.213215234427776870, -0.213264084423872490, -0.213312933886807890, -0.213361782816460930, -0.213410631212709980, -0.213459479075432000, -0.213508326404505320, +-0.213557173199807830, -0.213606019461217850, -0.213654865188612380, -0.213703710381869750, -0.213752555040868260, -0.213801399165484960, -0.213850242755598160, -0.213899085811085770, +-0.213947928331826100, -0.213996770317696150, -0.214045611768574280, -0.214094452684338410, -0.214143293064866820, -0.214192132910036550, -0.214240972219725960, -0.214289810993812950, +-0.214338649232175830, -0.214387486934691670, -0.214436324101238780, -0.214485160731695070, -0.214533996825938930, -0.214582832383847340, -0.214631667405298650, -0.214680501890170820, +-0.214729335838342170, -0.214778169249689730, -0.214827002124091860, -0.214875834461426940, -0.214924666261572000, -0.214973497524405390, -0.215022328249805020, -0.215071158437649290, +-0.215119988087815210, -0.215168817200181160, -0.215217645774625070, -0.215266473811025320, -0.215315301309258940, -0.215364128269204290, -0.215412954690739340, -0.215461780573742430, +-0.215510605918090630, -0.215559430723662320, -0.215608254990335420, -0.215657078717988340, -0.215705901906498100, -0.215754724555743130, -0.215803546665601780, -0.215852368235951140, +-0.215901189266669540, -0.215950009757635010, -0.215998829708725860, -0.216047649119819220, -0.216096467990793460, -0.216145286321526520, -0.216194104111896800, -0.216242921361781390, +-0.216291738071058670, -0.216340554239606600, -0.216389369867303590, -0.216438184954026700, -0.216486999499654360, -0.216535813504064530, -0.216584626967135600, -0.216633439888744670, +-0.216682252268770140, -0.216731064107090390, -0.216779875403582570, -0.216828686158125060, -0.216877496370595830, -0.216926306040873290, -0.216975115168834550, -0.217023923754358030, +-0.217072731797321700, -0.217121539297603970, -0.217170346255081970, -0.217219152669634100, -0.217267958541138340, -0.217316763869473130, -0.217365568654515560, -0.217414372896144070, +-0.217463176594236670, -0.217511979748671730, -0.217560782359326440, -0.217609584426079170, -0.217658385948808370, -0.217707186927391190, -0.217755987361706040, -0.217804787251630910, +-0.217853586597044240, -0.217902385397823200, -0.217951183653846160, -0.217999981364991190, -0.218048778531136690, -0.218097575152159800, -0.218146371227938980, -0.218195166758352240, +-0.218243961743278010, -0.218292756182593440, -0.218341550076177000, -0.218390343423906670, -0.218439136225660910, -0.218487928481316870, -0.218536720190753010, -0.218585511353847380, +-0.218634301970478370, -0.218683092040523190, -0.218731881563860280, -0.218780670540368090, -0.218829458969923780, -0.218878246852405840, -0.218927034187692300, -0.218975820975661570, +-0.219024607216190880, -0.219073392909158670, -0.219122178054442950, -0.219170962651922260, -0.219219746701473710, -0.219268530202975790, -0.219317313156306540, -0.219366095561344450, +-0.219414877417966700, -0.219463658726051750, -0.219512439485477630, -0.219561219696122860, -0.219609999357864630, -0.219658778470581380, -0.219707557034151600, -0.219756335048452520, +-0.219805112513362600, -0.219853889428759890, -0.219902665794522890, -0.219951441610528790, -0.220000216876656110, -0.220048991592782850, -0.220097765758787590, -0.220146539374547450, +-0.220195312439940950, -0.220244084954846210, -0.220292856919141660, -0.220341628332704540, -0.220390399195413370, -0.220439169507146180, -0.220487939267781490, -0.220536708477196530, +-0.220585477135269800, -0.220634245241879830, -0.220683012796903780, -0.220731779800220210, -0.220780546251707200, -0.220829312151243270, -0.220878077498705580, -0.220926842293972750, +-0.220975606536922780, -0.221024370227434240, -0.221073133365384340, -0.221121895950651600, -0.221170657983114140, -0.221219419462650450, -0.221268180389137760, -0.221316940762454640, +-0.221365700582479170, -0.221414459849089890, -0.221463218562164030, -0.221511976721580100, -0.221560734327216240, -0.221609491378950970, -0.221658247876661550, -0.221707003820226510, +-0.221755759209524390, -0.221804514044432440, -0.221853268324829210, -0.221902022050592810, -0.221950775221601780, -0.221999527837733380, -0.222048279898866160, -0.222097031404878240, +-0.222145782355648160, -0.222194532751053220, -0.222243282590971920, -0.222292031875282460, -0.222340780603863310, -0.222389528776591790, -0.222438276393346460, -0.222487023454005420, +-0.222535769958447260, -0.222584515906549240, -0.222633261298189920, -0.222682006133247900, -0.222730750411600430, -0.222779494133126060, -0.222828237297702990, -0.222876979905209740, +-0.222925721955523600, -0.222974463448523170, -0.223023204384086570, -0.223071944762092410, -0.223120684582417930, -0.223169423844941760, -0.223218162549542020, -0.223266900696097310, +-0.223315638284484920, -0.223364375314583450, -0.223413111786271020, -0.223461847699426230, -0.223510583053926400, -0.223559317849650140, -0.223608052086475970, -0.223656785764281270, +-0.223705518882944600, -0.223754251442344120, -0.223802983442358470, -0.223851714882864900, -0.223900445763742070, -0.223949176084868110, -0.223997905846121640, -0.224046635047379980, +-0.224095363688521730, -0.224144091769425070, -0.224192819289968620, -0.224241546250029680, -0.224290272649486870, -0.224338998488218390, -0.224387723766102830, -0.224436448483017550, +-0.224485172638841130, -0.224533896233452240, -0.224582619266728150, -0.224631341738547510, -0.224680063648788540, -0.224728784997329820, -0.224777505784048700, -0.224826226008823850, +-0.224874945671533400, -0.224923664772056050, -0.224972383310269090, -0.225021101286051160, -0.225069818699280500, -0.225118535549835710, -0.225167251837594150, -0.225215967562434450, +-0.225264682724234860, -0.225313397322873980, -0.225362111358229170, -0.225410824830179070, -0.225459537738601950, -0.225508250083376380, -0.225556961864379760, -0.225605673081490740, +-0.225654383734587990, -0.225703093823548810, -0.225751803348251930, -0.225800512308575510, -0.225849220704398250, -0.225897928535597540, -0.225946635802051960, -0.225995342503639810, +-0.226044048640239750, -0.226092754211729110, -0.226141459217986620, -0.226190163658890440, -0.226238867534319320, -0.226287570844150580, -0.226336273588262920, -0.226384975766534570, +-0.226433677378844210, -0.226482378425069240, -0.226531078905088310, -0.226579778818780140, -0.226628478166022050, -0.226677176946692790, -0.226725875160670580, -0.226774572807834110, +-0.226823269888060790, -0.226871966401229280, -0.226920662347217890, -0.226969357725905240, -0.227018052537168780, -0.227066746780887170, -0.227115440456938710, -0.227164133565202070, +-0.227212826105554680, -0.227261518077875200, -0.227310209482041950, -0.227358900317933600, -0.227407590585427560, -0.227456280284402540, -0.227504969414737270, -0.227553657976309140, +-0.227602345968996870, -0.227651033392678700, -0.227699720247233420, -0.227748406532538390, -0.227797092248472330, -0.227845777394913570, -0.227894461971740790, -0.227943145978831420, +-0.227991829416064160, -0.228040512283317370, -0.228089194580469700, -0.228137876307398620, -0.228186557463982860, -0.228235238050100680, -0.228283918065630860, -0.228332597510450820, +-0.228381276384439250, -0.228429954687474540, -0.228478632419435330, -0.228527309580199120, -0.228575986169644640, -0.228624662187650650, -0.228673337634094530, -0.228722012508855100, +-0.228770686811810620, -0.228819360542839860, -0.228868033701820270, -0.228916706288630590, -0.228965378303149140, -0.229014049745254690, -0.229062720614824690, -0.229111390911737880, +-0.229160060635872580, -0.229208729787107570, -0.229257398365320300, -0.229306066370389560, -0.229354733802193620, -0.229403400660611300, -0.229452066945520030, -0.229500732656798600, +-0.229549397794325760, -0.229598062357979000, -0.229646726347637080, -0.229695389763178350, -0.229744052604481580, -0.229792714871424250, -0.229841376563885150, -0.229890037681742570, +-0.229938698224875340, -0.229987358193160930, -0.230036017586478150, -0.230084676404705310, -0.230133334647721200, -0.230181992315403340, -0.230230649407630490, -0.230279305924281000, +-0.230327961865233720, -0.230376617230366070, -0.230425272019556870, -0.230473926232684950, -0.230522579869627760, -0.230571232930264130, -0.230619885414472430, -0.230668537322131440, +-0.230717188653118660, -0.230765839407312930, -0.230814489584592580, -0.230863139184836450, -0.230911788207922050, -0.230960436653728170, -0.231009084522133200, -0.231057731813015950, +-0.231106378526253930, -0.231155024661725970, -0.231203670219310460, -0.231252315198886200, -0.231300959600330700, -0.231349603423522810, -0.231398246668341360, -0.231446889334663840, +-0.231495531422369120, -0.231544172931335560, -0.231592813861442010, -0.231641454212565990, -0.231690093984586310, -0.231738733177381420, -0.231787371790830120, -0.231836009824809950, +-0.231884647279199770, -0.231933284153877980, -0.231981920448723400, -0.232030556163613590, -0.232079191298427380, -0.232127825853043200, -0.232176459827339890, -0.232225093221195000, +-0.232273726034487370, -0.232322358267095440, -0.232370989918898010, -0.232419620989772700, -0.232468251479598350, -0.232516881388253770, -0.232565510715616600, -0.232614139461565620, +-0.232662767625979290, -0.232711395208736490, -0.232760022209714760, -0.232808648628792970, -0.232857274465849560, -0.232905899720763390, -0.232954524393412050, -0.233003148483674400, +-0.233051771991428870, -0.233100394916554350, -0.233149017258928420, -0.233197639018429940, -0.233246260194937350, -0.233294880788329550, -0.233343500798484120, -0.233392120225279940, +-0.233440739068595890, -0.233489357328309550, -0.233537975004299820, -0.233586592096445170, -0.233635208604624440, -0.233683824528715280, -0.233732439868596570, -0.233781054624146750, +-0.233829668795244690, -0.233878282381768080, -0.233926895383595730, -0.233975507800606160, -0.234024119632678250, -0.234072730879689610, -0.234121341541519120, -0.234169951618045300, +-0.234218561109147020, -0.234267170014701900, -0.234315778334588890, -0.234364386068686840, -0.234412993216873390, -0.234461599779027450, -0.234510205755027540, -0.234558811144752520, +-0.234607415948080040, -0.234656020164889040, -0.234704623795057990, -0.234753226838465810, -0.234801829294990110, -0.234850431164509850, -0.234899032446903520, -0.234947633142050030, +-0.234996233249827050, -0.235044832770113450, -0.235093431702787790, -0.235142030047728990, -0.235190627804814640, -0.235239224973923770, -0.235287821554934830, -0.235336417547726750, +-0.235385012952177200, -0.235433607768165130, -0.235482201995569460, -0.235530795634267850, -0.235579388684139250, -0.235627981145062200, -0.235676573016915610, -0.235725164299577160, +-0.235773754992925800, -0.235822345096840050, -0.235870934611198870, -0.235919523535879920, -0.235968111870762160, -0.236016699615724130, -0.236065286770644780, -0.236113873335401760, +-0.236162459309874090, -0.236211044693940250, -0.236259629487479250, -0.236308213690368720, -0.236356797302487680, -0.236405380323715050, -0.236453962753928580, -0.236502544593007180, +-0.236551125840829410, -0.236599706497274270, -0.236648286562219420, -0.236696866035543850, -0.236745444917126120, -0.236794023206845230, -0.236842600904578810, -0.236891178010205930, +-0.236939754523605080, -0.236988330444655280, -0.237036905773234250, -0.237085480509220900, -0.237134054652493900, -0.237182628202932180, -0.237231201160413440, -0.237279773524816720, +-0.237328345296020980, -0.237376916473903960, -0.237425487058344630, -0.237474057049221620, -0.237522626446413860, -0.237571195249799110, -0.237619763459256390, -0.237668331074664230, +-0.237716898095901710, -0.237765464522846500, -0.237814030355377630, -0.237862595593373670, -0.237911160236713660, -0.237959724285275310, -0.238008287738937670, -0.238056850597579310, +-0.238105412861079250, -0.238153974529315220, -0.238202535602166250, -0.238251096079511370, -0.238299655961228350, -0.238348215247196150, -0.238396773937293440, -0.238445332031399200, +-0.238493889529391210, -0.238542446431148520, -0.238591002736549710, -0.238639558445473800, -0.238688113557798560, -0.238736668073403050, -0.238785221992165870, -0.238833775313966070, +-0.238882328038681400, -0.238930880166190910, -0.238979431696373200, -0.239027982629107380, -0.239076532964271140, -0.239125082701743570, -0.239173631841403310, -0.239222180383129400, +-0.239270728326799580, -0.239319275672292970, -0.239367822419488590, -0.239416368568264230, -0.239464914118498930, -0.239513459070071380, -0.239562003422860580, -0.239610547176744350, +-0.239659090331601770, -0.239707632887311450, -0.239756174843752470, -0.239804716200802630, -0.239853256958341000, -0.239901797116246230, -0.239950336674397390, -0.239998875632672280, +-0.240047413990949980, -0.240095951749109170, -0.240144488907028890, -0.240193025464586960, -0.240241561421662450, -0.240290096778134480, -0.240338631533880850, -0.240387165688780630, +-0.240435699242712490, -0.240484232195555540, -0.240532764547187580, -0.240581296297487700, -0.240629827446334600, -0.240678357993607340, -0.240726887939183760, -0.240775417282942970, +-0.240823946024763620, -0.240872474164524840, -0.240921001702104450, -0.240969528637381580, -0.241018054970234850, -0.241066580700543430, -0.241115105828185130, -0.241163630353039060, +-0.241212154274984350, -0.241260677593898830, -0.241309200309661580, -0.241357722422151370, -0.241406243931247270, -0.241454764836827120, -0.241503285138770060, -0.241551804836954820, +-0.241600323931260460, -0.241648842421564870, -0.241697360307747190, -0.241745877589686080, -0.241794394267260740, -0.241842910340348970, -0.241891425808829910, -0.241939940672582290, +-0.241988454931485270, -0.242036968585416650, -0.242085481634255640, -0.242133994077880920, -0.242182505916171630, -0.242231017149005660, -0.242279527776262130, -0.242328037797820220, +-0.242376547213557810, -0.242425056023353990, -0.242473564227087550, -0.242522071824637640, -0.242570578815882090, -0.242619085200700140, -0.242667590978970420, -0.242716096150572190, +-0.242764600715383280, -0.242813104673282880, -0.242861608024149720, -0.242910110767862950, -0.242958612904300490, -0.243007114433341470, -0.243055615354864700, -0.243104115668749290, +-0.243152615374873180, -0.243201114473115540, -0.243249612963355540, -0.243298110845471070, -0.243346608119341310, -0.243395104784845050, -0.243443600841861450, -0.243492096290268410, +-0.243540591129945140, -0.243589085360770400, -0.243637578982623370, -0.243686071995381950, -0.243734564398925350, -0.243783056193132370, -0.243831547377882150, -0.243880037953052630, +-0.243928527918523040, -0.243977017274172120, -0.244025506019879070, -0.244073994155521830, -0.244122481680979640, -0.244170968596131630, -0.244219454900855780, -0.244267940595031320, +-0.244316425678536980, -0.244364910151252030, -0.244413394013054340, -0.244461877263823210, -0.244510359903437340, -0.244558841931776020, -0.244607323348717180, -0.244655804154140010, +-0.244704284347923350, -0.244752763929946380, -0.244801242900087090, -0.244849721258224710, -0.244898199004238010, -0.244946676138006250, -0.244995152659407360, -0.245043628568320570, +-0.245092103864625150, -0.245140578548199070, -0.245189052618921520, -0.245237526076671350, -0.245285998921327770, -0.245334471152768770, -0.245382942770873610, -0.245431413775521080, +-0.245479884166590450, -0.245528353943959690, -0.245576823107508030, -0.245625291657114300, -0.245673759592657800, -0.245722226914016460, -0.245770693621069540, -0.245819159713695920, +-0.245867625191774800, -0.245916090055184190, -0.245964554303803370, -0.246013017937511150, -0.246061480956186820, -0.246109943359708370, -0.246158405147955030, -0.246206866320806160, +-0.246255326878139640, -0.246303786819834840, -0.246352246145770560, -0.246400704855826070, -0.246449162949879420, -0.246497620427809840, -0.246546077289496230, -0.246594533534817860, +-0.246642989163652710, -0.246691444175880100, -0.246739898571378870, -0.246788352350028330, -0.246836805511706480, -0.246885258056292610, -0.246933709983665590, -0.246982161293704730, +-0.247030611986288030, -0.247079062061294820, -0.247127511518604380, -0.247175960358094720, -0.247224408579645170, -0.247272856183134580, -0.247321303168442310, -0.247369749535446330, +-0.247418195284025980, -0.247466640414060140, -0.247515084925428120, -0.247563528818007970, -0.247611972091679010, -0.247660414746320110, -0.247708856781810590, -0.247757298198028520, +-0.247805738994853200, -0.247854179172163510, -0.247902618729838820, -0.247951057667757160, -0.247999495985797850, -0.248047933683840230, -0.248096370761762360, -0.248144807219443540, +-0.248193243056762710, -0.248241678273599190, -0.248290112869831050, -0.248338546845337650, -0.248386980199997860, -0.248435412933691060, -0.248483845046295310, -0.248532276537689920, +-0.248580707407753840, -0.248629137656366430, -0.248677567283405760, -0.248725996288751170, -0.248774424672281590, -0.248822852433876360, -0.248871279573413570, -0.248919706090772600, +-0.248968131985832340, -0.249016557258472190, -0.249064981908570240, -0.249113405936005810, -0.249161829340658310, -0.249210252122405800, -0.249258674281127630, -0.249307095816702820, +-0.249355516729010680, -0.249403937017929320, -0.249452356683338120, -0.249500775725116030, -0.249549194143142420, -0.249597611937295400, -0.249646029107454370, -0.249694445653498240, +-0.249742861575306450, -0.249791276872757070, -0.249839691545729490, -0.249888105594102680, -0.249936519017756040, -0.249984931816567670, -0.250033343990416990, -0.250081755539183330, +-0.250130166462744890, -0.250178576760981040, -0.250226986433770730, -0.250275395480993370, -0.250323803902527120, -0.250372211698251360, -0.250420618868045060, -0.250469025411787620, +-0.250517431329357220, -0.250565836620633250, -0.250614241285494640, -0.250662645323820930, -0.250711048735490110, -0.250759451520381700, -0.250807853678374660, -0.250856255209348400, +-0.250904656113181080, -0.250953056389752130, -0.251001456038940970, -0.251049855060625720, -0.251098253454685840, -0.251146651221000330, -0.251195048359448670, -0.251243444869908910, +-0.251291840752260520, -0.251340236006382560, -0.251388630632154440, -0.251437024629454280, -0.251485417998161600, -0.251533810738155340, -0.251582202849314980, -0.251630594331518740, +-0.251678985184645930, -0.251727375408575700, -0.251775765003187490, -0.251824153968359440, -0.251872542303970940, -0.251920930009901120, -0.251969317086029430, -0.252017703532234020, +-0.252066089348394310, -0.252114474534389790, -0.252162859090098720, -0.252211243015400430, -0.252259626310174120, -0.252308008974299110, -0.252356391007653670, -0.252404772410117220, +-0.252453153181568910, -0.252501533321888070, -0.252549912830953020, -0.252598291708643170, -0.252646669954837590, -0.252695047569415740, -0.252743424552255900, -0.252791800903237440, +-0.252840176622239510, -0.252888551709141540, -0.252936926163821800, -0.252985299986159710, -0.253033673176034810, -0.253082045733325320, -0.253130417657910720, -0.253178788949670050, +-0.253227159608482850, -0.253275529634227280, -0.253323899026782930, -0.253372267786028840, -0.253420635911844490, -0.253469003404108110, -0.253517370262699220, -0.253565736487496920, +-0.253614102078380750, -0.253662467035228820, -0.253710831357920770, -0.253759195046335650, -0.253807558100352940, -0.253855920519850900, -0.253904282304709070, -0.253952643454806950, +-0.254001003970022840, -0.254049363850236190, -0.254097723095326130, -0.254146081705172170, -0.254194439679652610, -0.254242797018646940, -0.254291153722034310, -0.254339509789694160, +-0.254387865221504860, -0.254436220017345840, -0.254484574177096360, -0.254532927700635790, -0.254581280587842520, -0.254629632838596020, -0.254677984452775450, -0.254726335430260350, +-0.254774685770928990, -0.254823035474660900, -0.254871384541335620, -0.254919732970831480, -0.254968080763028020, -0.255016427917804380, -0.255064774435040050, -0.255113120314613360, +-0.255161465556403900, -0.255209810160290760, -0.255258154126153550, -0.255306497453870460, -0.255354840143321220, -0.255403182194384790, -0.255451523606940900, -0.255499864380867750, +-0.255548204516044930, -0.255596544012351600, -0.255644882869667300, -0.255693221087870400, -0.255741558666840450, -0.255789895606456650, -0.255838231906598490, -0.255886567567144290, +-0.255934902587973740, -0.255983236968966300, -0.256031570710000380, -0.256079903810955520, -0.256128236271710890, -0.256176568092146120, -0.256224899272139480, -0.256273229811570640, +-0.256321559710318670, -0.256369888968263240, -0.256418217585282720, -0.256466545561256590, -0.256514872896064120, -0.256563199589584840, -0.256611525641697200, -0.256659851052280730, +-0.256708175821214630, -0.256756499948378510, -0.256804823433650740, -0.256853146276910860, -0.256901468478038570, -0.256949790036912210, -0.256998110953411350, -0.257046431227415220, +-0.257094750858803400, -0.257143069847454330, -0.257191388193247550, -0.257239705896062320, -0.257288022955778240, -0.257336339372273680, -0.257384655145428300, -0.257432970275121240, +-0.257481284761232170, -0.257529598603639500, -0.257577911802222840, -0.257626224356861390, -0.257674536267434750, -0.257722847533821410, -0.257771158155900960, -0.257819468133553000, +-0.257867777466655960, -0.257916086155089490, -0.257964394198732740, -0.258012701597465480, -0.258061008351166080, -0.258109314459714080, -0.258157619922988860, -0.258205924740869950, +-0.258254228913235850, -0.258302532439966200, -0.258350835320940160, -0.258399137556037490, -0.258447439145136570, -0.258495740088116990, -0.258544040384858120, -0.258592340035239570, +-0.258640639039139700, -0.258688937396438280, -0.258737235107014460, -0.258785532170748010, -0.258833828587517360, -0.258882124357202040, -0.258930419479681870, -0.258978713954835240, +-0.259027007782541840, -0.259075300962680890, -0.259123593495132140, -0.259171885379773980, -0.259220176616486110, -0.259268467205147730, -0.259316757145638680, -0.259365046437837310, +-0.259413335081623290, -0.259461623076875980, -0.259509910423474990, -0.259558197121298790, -0.259606483170227160, -0.259654768570139250, -0.259703053320914920, -0.259751337422432450, +-0.259799620874571700, -0.259847903677212280, -0.259896185830232720, -0.259944467333512670, -0.259992748186931470, -0.260041028390368800, -0.260089307943703110, -0.260137586846814210, +-0.260185865099581300, -0.260234142701884160, -0.260282419653601270, -0.260330695954612280, -0.260378971604796560, -0.260427246604033880, -0.260475520952202610, -0.260523794649182570, +-0.260572067694853030, -0.260620340089093790, -0.260668611831783190, -0.260716882922801150, -0.260765153362027270, -0.260813423149340080, -0.260861692284619360, -0.260909960767744360, +-0.260958228598594970, -0.261006495777049490, -0.261054762302987850, -0.261103028176289220, -0.261151293396833520, -0.261199557964499120, -0.261247821879165840, -0.261296085140713010, +-0.261344347749020380, -0.261392609703966490, -0.261440871005431060, -0.261489131653293410, -0.261537391647433390, -0.261585650987729460, -0.261633909674061420, -0.261682167706309030, +-0.261730425084350790, -0.261778681808066460, -0.261826937877335460, -0.261875193292037510, -0.261923448052051140, -0.261971702157256180, -0.262019955607532000, -0.262068208402758300, +-0.262116460542813680, -0.262164712027577910, -0.262212962856930350, -0.262261213030750780, -0.262309462548917790, -0.262357711411311150, -0.262405959617810210, -0.262454207168294820, +-0.262502454062643440, -0.262550700300735960, -0.262598945882451750, -0.262647190807670570, -0.262695435076271020, -0.262743678688132860, -0.262791921643135920, -0.262840163941158720, +-0.262888405582081150, -0.262936646565782580, -0.262984886892142780, -0.263033126561040390, -0.263081365572355120, -0.263129603925966520, -0.263177841621754280, -0.263226078659597020, +-0.263274315039374540, -0.263322550760966280, -0.263370785824252110, -0.263419020229110510, -0.263467253975421370, -0.263515487063064100, -0.263563719491918540, -0.263611951261863210, +-0.263660182372778050, -0.263708412824542830, -0.263756642617036190, -0.263804871750137950, -0.263853100223727490, -0.263901328037684730, -0.263949555191888230, -0.263997781686217790, +-0.264046007520552960, -0.264094232694773500, -0.264142457208758060, -0.264190681062386470, -0.264238904255538140, -0.264287126788093020, -0.264335348659929640, -0.264383569870927870, +-0.264431790420967210, -0.264480010309927520, -0.264528229537687340, -0.264576448104126560, -0.264624666009125150, -0.264672883252561610, -0.264721099834315850, -0.264769315754267380, +-0.264817531012295990, -0.264865745608280410, -0.264913959542100400, -0.264962172813635540, -0.265010385422765670, -0.265058597369369430, -0.265106808653326640, -0.265155019274516850, +-0.265203229232819970, -0.265251438528114560, -0.265299647160280590, -0.265347855129197450, -0.265396062434745120, -0.265444269076802240, -0.265492475055248640, -0.265540680369963870, +-0.265588885020827840, -0.265637089007719150, -0.265685292330517740, -0.265733494989103540, -0.265781696983355130, -0.265829898313152510, -0.265878098978375170, -0.265926298978902960, +-0.265974498314614620, -0.266022696985390050, -0.266070894991108700, -0.266119092331650540, -0.266167289006894240, -0.266215485016719710, -0.266263680361006450, -0.266311875039634440, +-0.266360069052482270, -0.266408262399430000, -0.266456455080357040, -0.266504647095143320, -0.266552838443667620, -0.266601029125809800, -0.266649219141449840, -0.266697408490466410, +-0.266745597172739430, -0.266793785188148500, -0.266841972536573550, -0.266890159217893160, -0.266938345231987450, -0.266986530578735840, -0.267034715258018310, -0.267082899269713630, +-0.267131082613701660, -0.267179265289861970, -0.267227447298074570, -0.267275628638218130, -0.267323809310172580, -0.267371989313817560, -0.267420168649032950, -0.267468347315697520, +-0.267516525313691190, -0.267564702642894000, -0.267612879303184610, -0.267661055294443060, -0.267709230616548830, -0.267757405269381970, -0.267805579252821170, -0.267853752566746370, +-0.267901925211037280, -0.267950097185573720, -0.267998268490234560, -0.268046439124899670, -0.268094609089448710, -0.268142778383761660, -0.268190947007717230, -0.268239114961195460, +-0.268287282244075890, -0.268335448856238500, -0.268383614797562060, -0.268431780067926620, -0.268479944667212140, -0.268528108595297410, -0.268576271852062400, -0.268624434437386650, +-0.268672596351150320, -0.268720757593232000, -0.268768918163511840, -0.268817078061869390, -0.268865237288184620, -0.268913395842336370, -0.268961553724204610, -0.269009710933668990, +-0.269057867470609500, -0.269106023334904910, -0.269154178526435250, -0.269202333045080180, -0.269250486890719680, -0.269298640063232560, -0.269346792562498830, -0.269394944388398060, +-0.269443095540810420, -0.269491246019614610, -0.269539395824690660, -0.269587544955918690, -0.269635693413177390, -0.269683841196346860, -0.269731988305306760, -0.269780134739937120, +-0.269828280500116650, -0.269876425585725550, -0.269924569996643330, -0.269972713732750170, -0.270020856793924740, -0.270068999180047230, -0.270117140890997140, -0.270165281926654680, +-0.270213422286898600, -0.270261561971608940, -0.270309700980665370, -0.270357839313948020, -0.270405976971335620, -0.270454113952708240, -0.270502250257946050, -0.270550385886927760, +-0.270598520839533560, -0.270646655115643010, -0.270694788715136300, -0.270742921637892150, -0.270791053883790710, -0.270839185452711630, -0.270887316344535000, -0.270935446559139700, +-0.270983576096405720, -0.271031704956212870, -0.271079833138441140, -0.271127960642969400, -0.271176087469677750, -0.271224213618445900, -0.271272339089153940, -0.271320463881680740, +-0.271368587995906350, -0.271416711431710920, -0.271464834188973270, -0.271512956267573550, -0.271561077667391400, -0.271609198388307050, -0.271657318430199250, -0.271705437792948150, +-0.271753556476433400, -0.271801674480535270, -0.271849791805132470, -0.271897908450105250, -0.271946024415333220, -0.271994139700696580, -0.272042254306074090, -0.272090368231346020, +-0.272138481476392080, -0.272186594041092300, -0.272234705925325620, -0.272282817128972180, -0.272330927651911690, -0.272379037494024310, -0.272427146655188910, -0.272475255135285640, +-0.272523362934194660, -0.272571470051794830, -0.272619576487966360, -0.272667682242588970, -0.272715787315542750, -0.272763891706706620, -0.272811995415960800, -0.272860098443184980, +-0.272908200788259340, -0.272956302451062780, -0.273004403431475470, -0.273052503729377120, -0.273100603344647970, -0.273148702277166870, -0.273196800526814050, -0.273244898093469190, +-0.273292994977012480, -0.273341091177322910, -0.273389186694280580, -0.273437281527765750, -0.273485375677657240, -0.273533469143835360, -0.273581561926179770, -0.273629654024570680, +-0.273677745438887070, -0.273725836169009030, -0.273773926214816440, -0.273822015576189460, -0.273870104253007010, -0.273918192245149350, -0.273966279552496140, -0.274014366174927690, +-0.274062452112322890, -0.274110537364561980, -0.274158621931524680, -0.274206705813091310, -0.274254789009140690, -0.274302871519553130, -0.274350953344208840, -0.274399034482986690, +-0.274447114935766960, -0.274495194702429500, -0.274543273782854420, -0.274591352176920770, -0.274639429884508680, -0.274687506905498090, -0.274735583239769100, -0.274783658887200740, +-0.274831733847673290, -0.274879808121066440, -0.274927881707260510, -0.274975954606134440, -0.275024026817568550, -0.275072098341442530, -0.275120169177636710, -0.275168239326030020, +-0.275216308786502720, -0.275264377558935120, -0.275312445643206120, -0.275360513039196010, -0.275408579746784620, -0.275456645765852210, -0.275504711096277780, -0.275552775737941570, +-0.275600839690723350, -0.275648902954503560, -0.275696965529161010, -0.275745027414576070, -0.275793088610628570, -0.275841149117198760, -0.275889208934165690, -0.275937268061409560, +-0.275985326498810250, -0.276033384246248070, -0.276081441303602020, -0.276129497670752340, -0.276177553347578930, -0.276225608333962040, -0.276273662629780700, -0.276321716234915250, +-0.276369769149245880, -0.276417821372651700, -0.276465872905012950, -0.276513923746209530, -0.276561973896121750, -0.276610023354628590, -0.276658072121610370, -0.276706120196946960, +-0.276754167580518680, -0.276802214272204530, -0.276850260271884860, -0.276898305579439560, -0.276946350194748890, -0.276994394117691940, -0.277042437348149040, -0.277090479886000000, +-0.277138521731125190, -0.277186562883403650, -0.277234603342715710, -0.277282643108941680, -0.277330682181960660, -0.277378720561652860, -0.277426758247898310, -0.277474795240577280, +-0.277522831539568860, -0.277570867144753320, -0.277618902056010640, -0.277666936273221090, -0.277714969796263810, -0.277763002625019070, -0.277811034759366860, -0.277859066199187490, +-0.277907096944360050, -0.277955126994764820, -0.278003156350281780, -0.278051185010791290, -0.278099212976172410, -0.278147240246305490, -0.278195266821070930, -0.278243292700347700, +-0.278291317884016290, -0.278339342371956620, -0.278387366164048970, -0.278435389260172470, -0.278483411660207510, -0.278531433364034020, -0.278579454371532420, -0.278627474682581700, +-0.278675494297062290, -0.278723513214854170, -0.278771531435837720, -0.278819548959891970, -0.278867565786897360, -0.278915581916733820, -0.278963597349281780, -0.279011612084420320, +-0.279059626122029840, -0.279107639461990240, -0.279155652104182030, -0.279203664048484230, -0.279251675294777290, -0.279299685842941570, -0.279347695692856220, -0.279395704844401630, +-0.279443713297457760, -0.279491721051905060, -0.279539728107622620, -0.279587734464490810, -0.279635740122389730, -0.279683745081199700, -0.279731749340799920, -0.279779752901070710, +-0.279827755761892170, -0.279875757923144620, -0.279923759384707260, -0.279971760146460520, -0.280019760208284400, -0.280067759570059250, -0.280115758231664290, -0.280163756192979950, +-0.280211753453886660, -0.280259750014263510, -0.280307745873991040, -0.280355741032949190, -0.280403735491018380, -0.280451729248077870, -0.280499722304007990, -0.280547714658688830, +-0.280595706312000760, -0.280643697263823040, -0.280691687514036060, -0.280739677062519900, -0.280787665909154940, -0.280835654053820380, -0.280883641496396660, -0.280931628236763880, +-0.280979614274802450, -0.281027599610391590, -0.281075584243411670, -0.281123568173743290, -0.281171551401265480, -0.281219533925858860, -0.281267515747403330, -0.281315496865779500, +-0.281363477280866470, -0.281411456992544770, -0.281459436000694450, -0.281507414305195940, -0.281555391905928430, -0.281603368802772480, -0.281651344995608120, -0.281699320484315780, +-0.281747295268774730, -0.281795269348865450, -0.281843242724468030, -0.281891215395462860, -0.281939187361729290, -0.281987158623147720, -0.282035129179598660, -0.282083099030961400, +-0.282131068177116360, -0.282179036617943630, -0.282227004353323820, -0.282274971383136010, -0.282322937707260750, -0.282370903325578180, -0.282418868237968750, -0.282466832444311760, +-0.282514795944487700, -0.282562758738376610, -0.282610720825859030, -0.282658682206814280, -0.282706642881122790, -0.282754602848664720, -0.282802562109320530, -0.282850520662969510, +-0.282898478509492230, -0.282946435648768760, -0.282994392080679560, -0.283042347805104010, -0.283090302821922550, -0.283138257131015810, -0.283186210732262970, -0.283234163625544600, +-0.283282115810740810, -0.283330067287732190, -0.283378018056397950, -0.283425968116618690, -0.283473917468274490, -0.283521866111245970, -0.283569814045412320, -0.283617761270654080, +-0.283665707786851520, -0.283713653593885060, -0.283761598691634090, -0.283809543079979080, -0.283857486758800240, -0.283905429727978110, -0.283953371987391960, -0.284001313536922370, +-0.284049254376449960, -0.284097194505853970, -0.284145133925015000, -0.284193072633813220, -0.284241010632129140, -0.284288947919842110, -0.284336884496832750, -0.284384820362981130, +-0.284432755518167930, -0.284480689962272380, -0.284528623695175120, -0.284576556716756300, -0.284624489026896520, -0.284672420625475100, -0.284720351512372570, -0.284768281687469200, +-0.284816211150645590, -0.284864139901781000, -0.284912067940756020, -0.284959995267451360, -0.285007921881746230, -0.285055847783521330, -0.285103772972656820, -0.285151697449033290, +-0.285199621212530060, -0.285247544263027790, -0.285295466600406720, -0.285343388224547360, -0.285391309135329060, -0.285439229332632550, -0.285487148816337970, -0.285535067586325910, +-0.285582985642475750, -0.285630902984668140, -0.285678819612783300, -0.285726735526701800, -0.285774650726303090, -0.285822565211467710, -0.285870478982075900, -0.285918392038008340, +-0.285966304379144390, -0.286014216005364640, -0.286062126916549810, -0.286110037112579210, -0.286157946593333550, -0.286205855358693030, -0.286253763408538250, -0.286301670742748650, +-0.286349577361204920, -0.286397483263787170, -0.286445388450376200, -0.286493292920851290, -0.286541196675093200, -0.286589099712982080, -0.286637002034398620, -0.286684903639222280, +-0.286732804527333630, -0.286780704698613000, -0.286828604152941040, -0.286876502890197120, -0.286924400910261950, -0.286972298213016230, -0.287020194798339350, -0.287068090666111940, +-0.287115985816214280, -0.287163880248527130, -0.287211773962929850, -0.287259666959303110, -0.287307559237527210, -0.287355450797482870, -0.287403341639049460, -0.287451231762107680, +-0.287499121166537810, -0.287547009852220590, -0.287594897819035410, -0.287642785066862970, -0.287690671595583590, -0.287738557405077980, -0.287786442495225500, -0.287834326865906930, +-0.287882210517002970, -0.287930093448393100, -0.287977975659957920, -0.288025857151577860, -0.288073737923133570, -0.288121617974504530, -0.288169497305571400, -0.288217375916214550, +-0.288265253806314680, -0.288313130975751230, -0.288361007424404960, -0.288408883152156240, -0.288456758158885660, -0.288504632444472770, -0.288552506008798340, -0.288600378851742610, +-0.288648250973186360, -0.288696122373009070, -0.288743993051091440, -0.288791863007314300, -0.288839732241557070, -0.288887600753700460, -0.288935468543624900, -0.288983335611211090, +-0.289031201956338520, -0.289079067578887900, -0.289126932478739660, -0.289174796655774500, -0.289222660109871910, -0.289270522840912700, -0.289318384848777140, -0.289366246133346050, +-0.289414106694498960, -0.289461966532116590, -0.289509825646079240, -0.289557684036267860, -0.289605541702561750, -0.289653398644841850, -0.289701254862988420, -0.289749110356882280, +-0.289796965126402960, -0.289844819171431180, -0.289892672491847800, -0.289940525087532370, -0.289988376958365550, -0.290036228104227860, -0.290084078524999960, -0.290131928220561440, +-0.290179777190793130, -0.290227625435575400, -0.290275472954789000, -0.290323319748313490, -0.290371165816029670, -0.290419011157817930, -0.290466855773559130, -0.290514699663132760, +-0.290562542826419580, -0.290610385263300130, -0.290658226973655060, -0.290706067957364030, -0.290753908214307850, -0.290801747744367340, -0.290849586547421990, -0.290897424623352660, +-0.290945261972039850, -0.290993098593364250, -0.291040934487205470, -0.291088769653444380, -0.291136604091961350, -0.291184437802637250, -0.291232270785351630, -0.291280103039985310, +-0.291327934566418760, -0.291375765364532800, -0.291423595434206980, -0.291471424775322170, -0.291519253387758800, -0.291567081271397740, -0.291614908426118590, -0.291662734851802110, +-0.291710560548329220, -0.291758385515579530, -0.291806209753433850, -0.291854033261772670, -0.291901856040476800, -0.291949678089425900, -0.291997499408500780, -0.292045319997581930, +-0.292093139856550170, -0.292140958985285190, -0.292188777383667770, -0.292236595051578400, -0.292284411988897990, -0.292332228195506140, -0.292380043671283670, -0.292427858416111130, +-0.292475672429869380, -0.292523485712438020, -0.292571298263697930, -0.292619110083529590, -0.292666921171813920, -0.292714731528430470, -0.292762541153260280, -0.292810350046184110, +-0.292858158207081610, -0.292905965635833760, -0.292953772332321010, -0.293001578296424200, -0.293049383528023070, -0.293097188026998470, -0.293144991793230840, -0.293192794826601210, +-0.293240597126989190, -0.293288398694275640, -0.293336199528341110, -0.293383999629066470, -0.293431798996331480, -0.293479597630016910, -0.293527395530003400, -0.293575192696171830, +-0.293622989128401790, -0.293670784826574330, -0.293718579790570370, -0.293766374020269450, -0.293814167515552670, -0.293861960276300400, -0.293909752302393690, -0.293957543593712180, +-0.294005334150136800, -0.294053123971548090, -0.294100913057827040, -0.294148701408853240, -0.294196489024507680, -0.294244275904670890, -0.294292062049223870, -0.294339847458046260, +-0.294387632131018980, -0.294435416068022650, -0.294483199268938230, -0.294530981733645390, -0.294578763462025050, -0.294626544453958250, -0.294674324709324700, -0.294722104228005320, +-0.294769883009880660, -0.294817661054831700, -0.294865438362738210, -0.294913214933481100, -0.294960990766940930, -0.295008765862998730, -0.295056540221534210, -0.295104313842428300, +-0.295152086725561650, -0.295199858870815180, -0.295247630278068660, -0.295295400947203020, -0.295343170878098920, -0.295390940070637320, -0.295438708524697890, -0.295486476240161780, +-0.295534243216909850, -0.295582009454821880, -0.295629774953778900, -0.295677539713661450, -0.295725303734350630, -0.295773067015726090, -0.295820829557668920, -0.295868591360059610, +-0.295916352422779310, -0.295964112745707660, -0.296011872328725780, -0.296059631171714190, -0.296107389274553930, -0.296155146637124780, -0.296202903259307760, -0.296250659140983530, +-0.296298414282033020, -0.296346168682336040, -0.296393922341773700, -0.296441675260226520, -0.296489427437575560, -0.296537178873700620, -0.296584929568482760, -0.296632679521803000, +-0.296680428733541060, -0.296728177203578080, -0.296775924931794670, -0.296823671918071850, -0.296871418162289460, -0.296919163664328520, -0.296966908424069640, -0.297014652441393910, +-0.297062395716181150, -0.297110138248312390, -0.297157880037668300, -0.297205621084129960, -0.297253361387577080, -0.297301100947890810, -0.297348839764951800, -0.297396577838641150, +-0.297444315168838570, -0.297492051755425260, -0.297539787598282200, -0.297587522697289280, -0.297635257052327520, -0.297682990663277640, -0.297730723530020670, -0.297778455652436550, +-0.297826187030406200, -0.297873917663810440, -0.297921647552530310, -0.297969376696445580, -0.298017105095437440, -0.298064832749386550, -0.298112559658174010, -0.298160285821679640, +-0.298208011239784580, -0.298255735912369420, -0.298303459839315390, -0.298351183020502290, -0.298398905455811210, -0.298446627145123320, -0.298494348088318430, -0.298542068285277680, +-0.298589787735881740, -0.298637506440011750, -0.298685224397547580, -0.298732941608370330, -0.298780658072360760, -0.298828373789399910, -0.298876088759367780, -0.298923802982145380, +-0.298971516457613500, -0.299019229185653210, -0.299066941166144460, -0.299114652398968340, -0.299162362884005610, -0.299210072621137410, -0.299257781610243580, -0.299305489851205250, +-0.299353197343903250, -0.299400904088218680, -0.299448610084031450, -0.299496315331222620, -0.299544019829673490, -0.299591723579263890, -0.299639426579874910, -0.299687128831387430, +-0.299734830333682530, -0.299782531086640160, -0.299830231090141400, -0.299877930344067120, -0.299925628848298430, -0.299973326602715200, -0.300021023607198680, -0.300068719861629580, +-0.300116415365889180, -0.300164110119857220, -0.300211804123415080, -0.300259497376443360, -0.300307189878823320, -0.300354881630434940, -0.300402572631159330, -0.300450262880877670, +-0.300497952379469970, -0.300545641126817360, -0.300593329122800680, -0.300641016367301120, -0.300688702860198550, -0.300736388601374250, -0.300784073590708970, -0.300831757828083910, +-0.300879441313379010, -0.300927124046475590, -0.300974806027254290, -0.301022487255596440, -0.301070167731381900, -0.301117847454491990, -0.301165526424807430, -0.301213204642209520, +-0.301260882106578140, -0.301308558817794560, -0.301356234775740030, -0.301403909980294430, -0.301451584431339130, -0.301499258128754830, -0.301546931072422810, -0.301594603262223040, +-0.301642274698036730, -0.301689945379744750, -0.301737615307228370, -0.301785284480367510, -0.301832952899043440, -0.301880620563136970, -0.301928287472529370, -0.301975953627100670, +-0.302023619026732030, -0.302071283671304370, -0.302118947560698900, -0.302166610694795670, -0.302214273073475930, -0.302261934696620880, -0.302309595564110630, -0.302357255675826330, +-0.302404915031648960, -0.302452573631459660, -0.302500231475138550, -0.302547888562566810, -0.302595544893625390, -0.302643200468195480, -0.302690855286157190, -0.302738509347391770, +-0.302786162651780040, -0.302833815199203380, -0.302881466989541710, -0.302929118022676410, -0.302976768298488300, -0.303024417816858680, -0.303072066577667610, -0.303119714580796340, +-0.303167361826125860, -0.303215008313537320, -0.303262654042910860, -0.303310299014127760, -0.303357943227069380, -0.303405586681615660, -0.303453229377648010, -0.303500871315047270, +-0.303548512493694740, -0.303596152913470580, -0.303643792574256000, -0.303691431475931920, -0.303739069618379710, -0.303786707001479420, -0.303834343625112360, -0.303881979489159400, +-0.303929614593501930, -0.303977248938020030, -0.304024882522594960, -0.304072515347107720, -0.304120147411439610, -0.304167778715470680, -0.304215409259082360, -0.304263039042155900, +-0.304310668064571410, -0.304358296326210250, -0.304405923826953360, -0.304453550566682110, -0.304501176545276530, -0.304548801762618000, -0.304596426218587510, -0.304644049913066370, +-0.304691672845934620, -0.304739295017073750, -0.304786916426364630, -0.304834537073688630, -0.304882156958925900, -0.304929776081957700, -0.304977394442665140, -0.305025012040929470, +-0.305072628876630890, -0.305120244949650680, -0.305167860259870300, -0.305215474807169870, -0.305263088591430750, -0.305310701612533930, -0.305358313870360720, -0.305405925364791330, +-0.305453536095707130, -0.305501146062989120, -0.305548755266518590, -0.305596363706175820, -0.305643971381842130, -0.305691578293398490, -0.305739184440726340, -0.305786789823705770, +-0.305834394442218270, -0.305881998296144760, -0.305929601385366680, -0.305977203709764220, -0.306024805269218710, -0.306072406063611190, -0.306120006092823080, -0.306167605356734480, +-0.306215203855226940, -0.306262801588181810, -0.306310398555479200, -0.306357994757000650, -0.306405590192627090, -0.306453184862239990, -0.306500778765719460, -0.306548371902947040, +-0.306595964273803650, -0.306643555878170770, -0.306691146715928620, -0.306738736786958570, -0.306786326091141700, -0.306833914628359410, -0.306881502398491930, -0.306929089401420720, +-0.306976675637026740, -0.307024261105191540, -0.307071845805795220, -0.307119429738719310, -0.307167012903845240, -0.307214595301053220, -0.307262176930224670, -0.307309757791240760, +-0.307357337883982780, -0.307404917208331130, -0.307452495764167110, -0.307500073551371880, -0.307547650569826910, -0.307595226819412370, -0.307642802300009790, -0.307690377011500150, +-0.307737950953765050, -0.307785524126684580, -0.307833096530140350, -0.307880668164013380, -0.307928239028185170, -0.307975809122535920, -0.308023378446947160, -0.308070947001300330, +-0.308118514785475750, -0.308166081799354900, -0.308213648042818810, -0.308261213515749030, -0.308308778218025830, -0.308356342149530670, -0.308403905310144610, -0.308451467699749240, +-0.308499029318224820, -0.308546590165452770, -0.308594150241314260, -0.308641709545690810, -0.308689268078462640, -0.308736825839511290, -0.308784382828717900, -0.308831939045964010, +-0.308879494491129780, -0.308927049164096860, -0.308974603064746280, -0.309022156192959640, -0.309069708548617210, -0.309117260131600460, -0.309164810941791050, -0.309212360979069120, +-0.309259910243316340, -0.309307458734413730, -0.309355006452242950, -0.309402553396684210, -0.309450099567619100, -0.309497644964928710, -0.309545189588494640, -0.309592733438197150, +-0.309640276513917900, -0.309687818815537920, -0.309735360342938800, -0.309782901096000870, -0.309830441074605670, -0.309877980278634390, -0.309925518707968580, -0.309973056362488510, +-0.310020593242075870, -0.310068129346612100, -0.310115664675977620, -0.310163199230053980, -0.310210733008722370, -0.310258266011864290, -0.310305798239360160, -0.310353329691091530, +-0.310400860366939590, -0.310448390266785890, -0.310495919390510800, -0.310543447737995910, -0.310590975309122440, -0.310638502103771920, -0.310686028121824720, -0.310733553363162440, +-0.310781077827666290, -0.310828601515217850, -0.310876124425697510, -0.310923646558986850, -0.310971167914967540, -0.311018688493519820, -0.311066208294525410, -0.311113727317865460, +-0.311161245563421670, -0.311208763031074250, -0.311256279720705020, -0.311303795632195010, -0.311351310765425990, -0.311398825120278280, -0.311446338696633460, -0.311493851494372810, +-0.311541363513377970, -0.311588874753529250, -0.311636385214708380, -0.311683894896796540, -0.311731403799675400, -0.311778911923225320, -0.311826419267327960, -0.311873925831864960, +-0.311921431616716760, -0.311968936621764950, -0.312016440846890840, -0.312063944291975980, -0.312111446956900910, -0.312158948841547160, -0.312206449945796050, -0.312253950269529290, +-0.312301449812627200, -0.312348948574971470, -0.312396446556443390, -0.312443943756924580, -0.312491440176295490, -0.312538935814437870, -0.312586430671232820, -0.312633924746562150, +-0.312681418040306300, -0.312728910552346860, -0.312776402282565150, -0.312823893230842810, -0.312871383397060390, -0.312918872781099480, -0.312966361382841780, -0.313013849202167790, +-0.313061336238959150, -0.313108822493097240, -0.313156307964463640, -0.313203792652938850, -0.313251276558404570, -0.313298759680742110, -0.313346242019833190, -0.313393723575558230, +-0.313441204347798930, -0.313488684336436670, -0.313536163541353050, -0.313583641962428660, -0.313631119599545150, -0.313678596452583890, -0.313726072521426480, -0.313773547805953510, +-0.313821022306046690, -0.313868496021587670, -0.313915968952457050, -0.313963441098536470, -0.314010912459707300, -0.314058383035851260, -0.314105852826848890, -0.314153321832581820, +-0.314200790052931500, -0.314248257487779630, -0.314295724137006630, -0.314343190000494380, -0.314390655078124140, -0.314438119369777670, -0.314485582875335510, -0.314533045594679370, +-0.314580507527690620, -0.314627968674251020, -0.314675429034241060, -0.314722888607542550, -0.314770347394037200, -0.314817805393605600, -0.314865262606129510, -0.314912719031490210, +-0.314960174669569600, -0.315007629520248080, -0.315055083583407500, -0.315102536858929190, -0.315149989346694970, -0.315197441046585370, -0.315244891958482150, -0.315292342082266750, +-0.315339791417820870, -0.315387239965025100, -0.315434687723761210, -0.315482134693910620, -0.315529580875355150, -0.315577026267975240, -0.315624470871652800, -0.315671914686269210, +-0.315719357711706230, -0.315766799947844400, -0.315814241394565600, -0.315861682051751640, -0.315909121919283000, -0.315956560997041610, -0.316003999284908800, -0.316051436782766370, +-0.316098873490494980, -0.316146309407976390, -0.316193744535092030, -0.316241178871723700, -0.316288612417752020, -0.316336045173058860, -0.316383477137525520, -0.316430908311033930, +-0.316478338693464640, -0.316525768284699530, -0.316573197084620010, -0.316620625093107900, -0.316668052310043750, -0.316715478735309530, -0.316762904368787010, -0.316810329210356840, +-0.316857753259900840, -0.316905176517300440, -0.316952598982437550, -0.317000020655192670, -0.317047441535447780, -0.317094861623084310, -0.317142280917984080, -0.317189699420027730, +-0.317237117129097130, -0.317284534045073780, -0.317331950167839490, -0.317379365497274860, -0.317426780033261860, -0.317474193775681920, -0.317521606724416870, -0.317569018879347410, +-0.317616430240355410, -0.317663840807322740, -0.317711250580130060, -0.317758659558659280, -0.317806067742791800, -0.317853475132409580, -0.317900881727393280, -0.317948287527624770, +-0.317995692532985540, -0.318043096743357460, -0.318090500158621280, -0.318137902778658780, -0.318185304603351590, -0.318232705632581550, -0.318280105866229290, -0.318327505304176750, +-0.318374903946305520, -0.318422301792497360, -0.318469698842633100, -0.318517095096594590, -0.318564490554263720, -0.318611885215521250, -0.318659279080249050, -0.318706672148328600, +-0.318754064419641940, -0.318801455894069720, -0.318848846571493820, -0.318896236451795820, -0.318943625534857610, -0.318991013820560000, -0.319038401308784800, -0.319085787999413560, +-0.319133173892328310, -0.319180558987409770, -0.319227943284539740, -0.319275326783599880, -0.319322709484472110, -0.319370091387037200, -0.319417472491177020, -0.319464852796773170, +-0.319512232303707620, -0.319559611011861030, -0.319606988921115440, -0.319654366031352780, -0.319701742342453800, -0.319749117854300490, -0.319796492566774340, -0.319843866479757380, +-0.319891239593130370, -0.319938611906775250, -0.319985983420573550, -0.320033354134407370, -0.320080724048157410, -0.320128093161705600, -0.320175461474933530, -0.320222828987723250, +-0.320270195699955460, -0.320317561611512200, -0.320364926722275070, -0.320412291032125980, -0.320459654540945770, -0.320507017248616470, -0.320554379155020000, -0.320601740260037130, +-0.320649100563549950, -0.320696460065440000, -0.320743818765589380, -0.320791176663878740, -0.320838533760190170, -0.320885890054405270, -0.320933245546406010, -0.320980600236073280, +-0.321027954123289050, -0.321075307207934920, -0.321122659489892940, -0.321170010969043910, -0.321217361645269820, -0.321264711518452320, -0.321312060588473500, -0.321359408855214080, +-0.321406756318556140, -0.321454102978381730, -0.321501448834571660, -0.321548793887007970, -0.321596138135572310, -0.321643481580146660, -0.321690824220611960, -0.321738166056850130, +-0.321785507088742930, -0.321832847316172340, -0.321880186739019300, -0.321927525357165730, -0.321974863170493340, -0.322022200178884220, -0.322069536382219190, -0.322116871780380290, +-0.322164206373249270, -0.322211540160708130, -0.322258873142637680, -0.322306205318920070, -0.322353536689436950, -0.322400867254070410, -0.322448197012701330, -0.322495525965211690, +-0.322542854111483700, -0.322590181451398120, -0.322637507984837090, -0.322684833711682330, -0.322732158631815870, -0.322779482745118580, -0.322826806051472630, -0.322874128550759590, +-0.322921450242861730, -0.322968771127659760, -0.323016091205035880, -0.323063410474871800, -0.323110728937049620, -0.323158046591450140, -0.323205363437955580, -0.323252679476447650, +-0.323299994706808370, -0.323347309128918740, -0.323394622742660790, -0.323441935547916730, -0.323489247544567430, -0.323536558732494980, -0.323583869111581160, -0.323631178681708040, +-0.323678487442756620, -0.323725795394608940, -0.323773102537146750, -0.323820408870252260, -0.323867714393806350, -0.323915019107691100, -0.323962323011788340, -0.324009626105980160, +-0.324056928390147550, -0.324104229864172530, -0.324151530527936990, -0.324198830381323080, -0.324246129424211600, -0.324293427656484830, -0.324340725078024920, -0.324388021688712780, +-0.324435317488430570, -0.324482612477060120, -0.324529906654483500, -0.324577200020581710, -0.324624492575236900, -0.324671784318330880, -0.324719075249745800, -0.324766365369362650, +-0.324813654677063520, -0.324860943172730340, -0.324908230856245150, -0.324955517727488990, -0.325002803786344050, -0.325050089032692110, -0.325097373466415320, -0.325144657087394710, +-0.325191939895512430, -0.325239221890650740, -0.325286503072690580, -0.325333783441514200, -0.325381062997003310, -0.325428341739040170, -0.325475619667505770, -0.325522896782282360, +-0.325570173083251650, -0.325617448570295950, -0.325664723243296260, -0.325711997102134660, -0.325759270146693150, -0.325806542376853860, -0.325853813792497780, -0.325901084393507180, +-0.325948354179763870, -0.325995623151150100, -0.326042891307546820, -0.326090158648836340, -0.326137425174900460, -0.326184690885621460, -0.326231955780880270, -0.326279219860559240, +-0.326326483124540550, -0.326373745572705210, -0.326421007204935550, -0.326468268021113340, -0.326515528021120880, -0.326562787204839220, -0.326610045572150560, -0.326657303122936780, +-0.326704559857080190, -0.326751815774461770, -0.326799070874963790, -0.326846325158468120, -0.326893578624857130, -0.326940831274011690, -0.326988083105814230, -0.327035334120146510, +-0.327082584316890910, -0.327129833695928460, -0.327177082257141370, -0.327224330000412010, -0.327271576925621420, -0.327318823032651920, -0.327366068321385320, -0.327413312791703940, +-0.327460556443488930, -0.327507799276622490, -0.327555041290986500, -0.327602282486463390, -0.327649522862934140, -0.327696762420281120, -0.327744001158386140, -0.327791239077131590, +-0.327838476176398550, -0.327885712456069290, -0.327932947916025730, -0.327980182556150250, -0.328027416376323930, -0.328074649376429000, -0.328121881556347920, -0.328169112915961680, +-0.328216343455152660, -0.328263573173802840, -0.328310802071794420, -0.328358030149008610, -0.328405257405327780, -0.328452483840633750, -0.328499709454808940, -0.328546934247734400, +-0.328594158219292550, -0.328641381369365330, -0.328688603697835090, -0.328735825204582890, -0.328783045889491090, -0.328830265752441730, -0.328877484793317130, -0.328924703011998330, +-0.328971920408367870, -0.329019136982307560, -0.329066352733699830, -0.329113567662425780, -0.329160781768367830, -0.329207995051408350, -0.329255207511428450, -0.329302419148310540, +-0.329349629961936560, -0.329396839952188940, -0.329444049118948810, -0.329491257462098560, -0.329538464981520170, -0.329585671677096010, -0.329632877548707240, -0.329680082596236320, +-0.329727286819565200, -0.329774490218576240, -0.329821692793150660, -0.329868894543170870, -0.329916095468518800, -0.329963295569076940, -0.330010494844726390, -0.330057693295349620, +-0.330104890920829060, -0.330152087721045820, -0.330199283695882360, -0.330246478845220740, -0.330293673168943260, -0.330340866666931240, -0.330388059339067060, -0.330435251185232700, +-0.330482442205310640, -0.330529632399182040, -0.330576821766729370, -0.330624010307834670, -0.330671198022380320, -0.330718384910247630, -0.330765570971318920, -0.330812756205476290, +-0.330859940612602150, -0.330907124192577780, -0.330954306945285600, -0.331001488870608100, -0.331048669968426410, -0.331095850238623090, -0.331143029681080110, -0.331190208295679970, +-0.331237386082303910, -0.331284563040834420, -0.331331739171153440, -0.331378914473143600, -0.331426088946686010, -0.331473262591663210, -0.331520435407957280, -0.331567607395450660, +-0.331614778554024600, -0.331661948883561600, -0.331709118383943740, -0.331756287055053500, -0.331803454896772100, -0.331850621908982070, -0.331897788091565890, -0.331944953444404890, +-0.331992117967381430, -0.332039281660377720, -0.332086444523276180, -0.332133606555958140, -0.332180767758306070, -0.332227928130202130, -0.332275087671528750, -0.332322246382167230, +-0.332369404262000070, -0.332416561310909460, -0.332463717528777850, -0.332510872915486480, -0.332558027470917950, -0.332605181194954360, -0.332652334087478240, -0.332699486148370860, +-0.332746637377514750, -0.332793787774792070, -0.332840937340085350, -0.332888086073275860, -0.332935233974246130, -0.332982381042878750, -0.333029527279054990, -0.333076672682657450, +-0.333123817253568210, -0.333170960991669820, -0.333218103896843640, -0.333265245968972170, -0.333312387207937600, -0.333359527613622470, -0.333406667185908110, -0.333453805924677100, +-0.333500943829811550, -0.333548080901194090, -0.333595217138705990, -0.333642352542229850, -0.333689487111647810, -0.333736620846842470, -0.333783753747695200, -0.333830885814088480, +-0.333878017045905030, -0.333925147443026090, -0.333972277005334270, -0.334019405732711830, -0.334066533625041180, -0.334113660682203880, -0.334160786904082350, -0.334207912290558910, +-0.334255036841516080, -0.334302160556835260, -0.334349283436399030, -0.334396405480089590, -0.334443526687789540, -0.334490647059380250, -0.334537766594744380, -0.334584885293764070, +-0.334632003156321970, -0.334679120182299390, -0.334726236371579110, -0.334773351724043600, -0.334820466239574290, -0.334867579918053830, -0.334914692759364420, -0.334961804763388660, +-0.335008915930008030, -0.335056026259105080, -0.335103135750562050, -0.335150244404261610, -0.335197352220085180, -0.335244459197915350, -0.335291565337634320, -0.335338670639124870, +-0.335385775102268250, -0.335432878726947270, -0.335479981513044030, -0.335527083460441300, -0.335574184569020380, -0.335621284838664050, -0.335668384269254490, -0.335715482860674430, +-0.335762580612805230, -0.335809677525529540, -0.335856773598730120, -0.335903868832288290, -0.335950963226086810, -0.335998056780007940, -0.336045149493934380, -0.336092241367747460, +-0.336139332401329980, -0.336186422594564160, -0.336233511947332700, -0.336280600459517020, -0.336327688130999840, -0.336374774961663460, -0.336421860951390590, -0.336468946100062620, +-0.336516030407562280, -0.336563113873771860, -0.336610196498574040, -0.336657278281850380, -0.336704359223483520, -0.336751439323356110, -0.336798518581349740, -0.336845596997347060, +-0.336892674571230400, -0.336939751302882450, -0.336986827192184760, -0.337033902239019910, -0.337080976443270400, -0.337128049804818810, -0.337175122323546680, -0.337222193999336730, +-0.337269264832071310, -0.337316334821633200, -0.337363403967903760, -0.337410472270765820, -0.337457539730101730, -0.337504606345794210, -0.337551672117724740, -0.337598737045776090, +-0.337645801129831000, -0.337692864369771030, -0.337739926765478870, -0.337786988316836900, -0.337834049023727880, -0.337881108886033340, -0.337928167903636000, -0.337975226076418220, +-0.338022283404262820, -0.338069339887051350, -0.338116395524666440, -0.338163450316990580, -0.338210504263906530, -0.338257557365295780, -0.338304609621041090, -0.338351661031024930, +-0.338398711595130020, -0.338445761313237950, -0.338492810185231420, -0.338539858210993310, -0.338586905390405150, -0.338633951723349700, -0.338680997209709400, -0.338728041849367000, +-0.338775085642204100, -0.338822128588103460, -0.338869170686947550, -0.338916211938619090, -0.338963252342999680, -0.339010291899972120, -0.339057330609418840, -0.339104368471222720, +-0.339151405485265180, -0.339198441651429150, -0.339245476969597000, -0.339292511439651610, -0.339339545061474510, -0.339386577834948580, -0.339433609759956180, -0.339480640836380130, +-0.339527671064102090, -0.339574700443004920, -0.339621728972971330, -0.339668756653883070, -0.339715783485622870, -0.339762809468073250, -0.339809834601117020, -0.339856858884635790, +-0.339903882318512370, -0.339950904902629300, -0.339997926636869340, -0.340044947521114190, -0.340091967555246620, -0.340138986739149160, -0.340186005072704630, -0.340233022555794740, +-0.340280039188302240, -0.340327054970109620, -0.340374069901099810, -0.340421083981154390, -0.340468097210156310, -0.340515109587988360, -0.340562121114532210, -0.340609131789670780, +-0.340656141613286500, -0.340703150585262290, -0.340750158705479810, -0.340797165973821930, -0.340844172390171120, -0.340891177954410320, -0.340938182666421120, -0.340985186526086450, +-0.341032189533288840, -0.341079191687911230, -0.341126192989835150, -0.341173193438943590, -0.341220193035119080, -0.341267191778244490, -0.341314189668201540, -0.341361186704873030, +-0.341408182888142060, -0.341455178217890180, -0.341502172694000350, -0.341549166316355070, -0.341596159084837310, -0.341643150999328740, -0.341690142059712320, -0.341737132265870490, +-0.341784121617686290, -0.341831110115041360, -0.341878097757818630, -0.341925084545900650, -0.341972070479170390, -0.342019055557509550, -0.342066039780801080, -0.342113023148927500, +-0.342160005661771790, -0.342206987319215620, -0.342253968121142000, -0.342300948067433440, -0.342347927157972960, -0.342394905392642220, -0.342441882771324200, -0.342488859293901940, +-0.342535834960257080, -0.342582809770272670, -0.342629783723831180, -0.342676756820815720, -0.342723729061107870, -0.342770700444590740, -0.342817670971146850, -0.342864640640659190, +-0.342911609453009580, -0.342958577408080890, -0.343005544505755710, -0.343052510745917140, -0.343099476128446880, -0.343146440653227910, -0.343193404320142890, -0.343240367129074740, +-0.343287329079905220, -0.343334290172517430, -0.343381250406794290, -0.343428209782617620, -0.343475168299870460, -0.343522125958435340, -0.343569082758195370, -0.343616038699032230, +-0.343662993780828980, -0.343709948003468270, -0.343756901366833120, -0.343803853870805310, -0.343850805515267810, -0.343897756300103330, -0.343944706225194910, -0.343991655290424250, +-0.344038603495674500, -0.344085550840828200, -0.344132497325768450, -0.344179442950377060, -0.344226387714537060, -0.344273331618131450, -0.344320274661042150, -0.344367216843152190, +-0.344414158164344120, -0.344461098624501140, -0.344508038223504950, -0.344554976961238660, -0.344601914837584960, -0.344648851852426890, -0.344695788005646210, -0.344742723297126130, +-0.344789657726749240, -0.344836591294398590, -0.344883523999956030, -0.344930455843304730, -0.344977386824327210, -0.345024316942906690, -0.345071246198924930, -0.345118174592265130, +-0.345165102122810210, -0.345212028790442160, -0.345258954595044080, -0.345305879536498550, -0.345352803614688790, -0.345399726829496550, -0.345446649180805030, -0.345493570668496900, +-0.345540491292455230, -0.345587411052561910, -0.345634329948700080, -0.345681247980752390, -0.345728165148602050, -0.345775081452130870, -0.345821996891221950, -0.345868911465758100, +-0.345915825175622300, -0.345962738020696600, -0.346009650000864030, -0.346056561116007360, -0.346103471366009660, -0.346150380750752880, -0.346197289270120110, -0.346244196923994610, +-0.346291103712258130, -0.346338009634793940, -0.346384914691484750, -0.346431818882213640, -0.346478722206862540, -0.346525624665314670, -0.346572526257452770, -0.346619426983159950, +-0.346666326842318130, -0.346713225834810510, -0.346760123960519810, -0.346807021219329210, -0.346853917611120670, -0.346900813135777310, -0.346947707793181900, -0.346994601583217710, +-0.347041494505766550, -0.347088386560711670, -0.347135277747936180, -0.347182168067322160, -0.347229057518752660, -0.347275946102110540, -0.347322833817279020, -0.347369720664139960, +-0.347416606642576560, -0.347463491752471710, -0.347510375993708490, -0.347557259366168940, -0.347604141869736260, -0.347651023504293170, -0.347697904269722970, -0.347744784165907590, +-0.347791663192730300, -0.347838541350073800, -0.347885418637821350, -0.347932295055854990, -0.347979170604057860, -0.348026045282313180, -0.348072919090503030, -0.348119792028510570, +-0.348166664096218600, -0.348213535293510460, -0.348260405620268000, -0.348307275076374550, -0.348354143661712910, -0.348401011376166300, -0.348447878219616760, -0.348494744191947540, +-0.348541609293041450, -0.348588473522781770, -0.348635336881050470, -0.348682199367730820, -0.348729060982705670, -0.348775921725858310, -0.348822781597070750, -0.348869640596226220, +-0.348916498723207570, -0.348963355977898070, -0.349010212360179760, -0.349057067869935960, -0.349103922507049910, -0.349150776271403620, -0.349197629162880390, -0.349244481181363090, +-0.349291332326734980, -0.349338182598878170, -0.349385031997675840, -0.349431880523011000, -0.349478728174766830, -0.349525574952825440, -0.349572420857070130, -0.349619265887383730, +-0.349666110043649610, -0.349712953325749810, -0.349759795733567580, -0.349806637266985910, -0.349853477925888000, -0.349900317710156060, -0.349947156619673240, -0.349993994654323020, +-0.350040831813987370, -0.350087668098549630, -0.350134503507892710, -0.350181338041899990, -0.350228171700453450, -0.350275004483436510, -0.350321836390732110, -0.350368667422223450, +-0.350415497577792780, -0.350462326857323310, -0.350509155260698040, -0.350555982787800310, -0.350602809438512190, -0.350649635212717080, -0.350696460110297810, -0.350743284131137870, +-0.350790107275119280, -0.350836929542125420, -0.350883750932039720, -0.350930571444744150, -0.350977391080122160, -0.351024209838056710, -0.351071027718431130, -0.351117844721127560, +-0.351164660846029430, -0.351211476093019610, -0.351258290461981540, -0.351305103952797290, -0.351351916565350310, -0.351398728299523510, -0.351445539155200330, -0.351492349132262900, +-0.351539158230594560, -0.351585966450078340, -0.351632773790597650, -0.351679580252034550, -0.351726385834272510, -0.351773190537194970, -0.351819994360684010, -0.351866797304623060, +-0.351913599368895100, -0.351960400553383620, -0.352007200857970660, -0.352054000282539750, -0.352100798826973820, -0.352147596491156290, -0.352194393274969320, -0.352241189178296440, +-0.352287984201020530, -0.352334778343025120, -0.352381571604192310, -0.352428363984405630, -0.352475155483548020, -0.352521946101502890, -0.352568735838152510, -0.352615524693380310, +-0.352662312667069270, -0.352709099759102860, -0.352755885969363300, -0.352802671297734020, -0.352849455744098480, -0.352896239308338850, -0.352943021990338670, -0.352989803789980960, +-0.353036584707149100, -0.353083364741725360, -0.353130143893593260, -0.353176922162635740, -0.353223699548736390, -0.353270476051777360, -0.353317251671642070, -0.353364026408213740, +-0.353410800261375720, -0.353457573231010290, -0.353504345317000920, -0.353551116519230710, -0.353597886837583090, -0.353644656271940360, -0.353691424822186020, -0.353738192488203480, +-0.353784959269875080, -0.353831725167084280, -0.353878490179714120, -0.353925254307648210, -0.353972017550768680, -0.354018779908959190, -0.354065541382102670, -0.354112301970082750, +-0.354159061672781660, -0.354205820490082920, -0.354252578421869630, -0.354299335468025330, -0.354346091628432220, -0.354392846902973900, -0.354439601291533510, -0.354486354793994480, +-0.354533107410239190, -0.354579859140151110, -0.354626609983613780, -0.354673359940509520, -0.354720109010721870, -0.354766857194133920, -0.354813604490629260, -0.354860350900090220, +-0.354907096422400260, -0.354953841057442540, -0.355000584805100660, -0.355047327665256870, -0.355094069637794830, -0.355140810722597570, -0.355187550919548680, -0.355234290228530540, +-0.355281028649426620, -0.355327766182120200, -0.355374502826494740, -0.355421238582432570, -0.355467973449817400, -0.355514707428532200, -0.355561440518460730, -0.355608172719485190, +-0.355654904031489190, -0.355701634454356430, -0.355748363987969110, -0.355795092632210870, -0.355841820386964940, -0.355888547252114880, -0.355935273227542980, -0.355981998313132930, +-0.356028722508767880, -0.356075445814331480, -0.356122168229705990, -0.356168889754775120, -0.356215610389422010, -0.356262330133530310, -0.356309048986982350, -0.356355766949661760, +-0.356402484021451750, -0.356449200202235970, -0.356495915491896740, -0.356542629890317760, -0.356589343397382570, -0.356636056012973660, -0.356682767736974600, -0.356729478569268620, +-0.356776188509739360, -0.356822897558269180, -0.356869605714741740, -0.356916312979040360, -0.356963019351048570, -0.357009724830648860, -0.357056429417724750, -0.357103133112159630, +-0.357149835913837090, -0.357196537822639550, -0.357243238838450660, -0.357289938961153630, -0.357336638190632220, -0.357383336526768790, -0.357430033969447000, -0.357476730518550560, +-0.357523426173961880, -0.357570120935564620, -0.357616814803242030, -0.357663507776877890, -0.357710199856354490, -0.357756891041555670, -0.357803581332364560, -0.357850270728664930, +-0.357896959230339210, -0.357943646837271090, -0.357990333549343840, -0.358037019366441220, -0.358083704288445600, -0.358130388315240740, -0.358177071446709900, -0.358223753682736790, +-0.358270435023203880, -0.358317115467994880, -0.358363795016993500, -0.358410473670082220, -0.358457151427144740, -0.358503828288064430, -0.358550504252724940, -0.358597179321008760, +-0.358643853492799650, -0.358690526767980910, -0.358737199146436260, -0.358783870628048170, -0.358830541212700470, -0.358877210900276360, -0.358923879690659640, -0.358970547583732870, +-0.359017214579379680, -0.359063880677483460, -0.359110545877927960, -0.359157210180595650, -0.359203873585370310, -0.359250536092135310, -0.359297197700774400, -0.359343858411170060, +-0.359390518223206110, -0.359437177136766260, -0.359483835151733040, -0.359530492267990220, -0.359577148485421220, -0.359623803803909680, -0.359670458223338320, -0.359717111743590720, +-0.359763764364550380, -0.359810416086101040, -0.359857066908125240, -0.359903716830506810, -0.359950365853129060, -0.359997013975875800, -0.360043661198629630, -0.360090307521274240, +-0.360136952943693130, -0.360183597465770060, -0.360230241087387550, -0.360276883808429480, -0.360323525628779560, -0.360370166548320490, -0.360416806566935920, -0.360463445684509390, +-0.360510083900924650, -0.360556721216064250, -0.360603357629812050, -0.360649993142051480, -0.360696627752666370, -0.360743261461539230, -0.360789894268553960, -0.360836526173593960, +-0.360883157176543010, -0.360929787277283810, -0.360976416475700110, -0.361023044771675410, -0.361069672165093450, -0.361116298655836940, -0.361162924243789650, -0.361209548928835500, +-0.361256172710857030, -0.361302795589738160, -0.361349417565362320, -0.361396038637613270, -0.361442658806373770, -0.361489278071527640, -0.361535896432958250, -0.361582513890549570, +-0.361629130444184210, -0.361675746093746030, -0.361722360839118460, -0.361768974680185370, -0.361815587616829470, -0.361862199648934570, -0.361908810776384200, -0.361955420999062250, +-0.362002030316851300, -0.362048638729635220, -0.362095246237297610, -0.362141852839722280, -0.362188458536791940, -0.362235063328390390, -0.362281667214401640, -0.362328270194708260, +-0.362374872269194240, -0.362421473437743060, -0.362468073700238590, -0.362514673056563490, -0.362561271506601780, -0.362607869050236840, -0.362654465687352660, -0.362701061417831870, +-0.362747656241558470, -0.362794250158415880, -0.362840843168288130, -0.362887435271057820, -0.362934026466608940, -0.362980616754824960, -0.363027206135589920, -0.363073794608786420, +-0.363120382174298430, -0.363166968832009880, -0.363213554581803490, -0.363260139423563280, -0.363306723357172680, -0.363353306382515670, -0.363399888499474970, -0.363446469707934590, +-0.363493050007777980, -0.363539629398889230, -0.363586207881150920, -0.363632785454447160, -0.363679362118661420, -0.363725937873677680, -0.363772512719378660, -0.363819086655648380, +-0.363865659682370390, -0.363912231799428660, -0.363958803006705910, -0.364005373304086170, -0.364051942691453410, -0.364098511168690410, -0.364145078735681080, -0.364191645392309080, +-0.364238211138458390, -0.364284775974011770, -0.364331339898853130, -0.364377902912866200, -0.364424465015934950, -0.364471026207942080, -0.364517586488771690, -0.364564145858307320, +-0.364610704316433000, -0.364657261863031490, -0.364703818497986830, -0.364750374221182620, -0.364796929032502880, -0.364843482931830390, -0.364890035919049230, -0.364936587994042990, +-0.364983139156695670, -0.365029689406890070, -0.365076238744510280, -0.365122787169440300, -0.365169334681562930, -0.365215881280762210, -0.365262426966921790, -0.365308971739925770, +-0.365355515599656840, -0.365402058545999160, -0.365448600578836320, -0.365495141698052360, -0.365541681903530200, -0.365588221195153770, -0.365634759572806830, -0.365681297036373420, +-0.365727833585736290, -0.365774369220779660, -0.365820903941387050, -0.365867437747442570, -0.365913970638829130, -0.365960502615430780, -0.366007033677131550, -0.366053563823814320, +-0.366100093055363170, -0.366146621371661820, -0.366193148772594350, -0.366239675258043570, -0.366286200827893590, -0.366332725482028110, -0.366379249220331220, -0.366425772042685840, +-0.366472293948975960, -0.366518814939085390, -0.366565335012898170, -0.366611854170297240, -0.366658372411166670, -0.366704889735390120, -0.366751406142851790, -0.366797921633434550, +-0.366844436207022510, -0.366890949863499740, -0.366937462602749230, -0.366983974424655020, -0.367030485329100930, -0.367076995315971040, -0.367123504385148180, -0.367170012536516600, +-0.367216519769960000, -0.367263026085362490, -0.367309531482607030, -0.367356035961577730, -0.367402539522158340, -0.367449042164233020, -0.367495543887684680, -0.367542044692397480, +-0.367588544578255130, -0.367635043545141870, -0.367681541592940590, -0.367728038721535420, -0.367774534930810640, -0.367821030220649050, -0.367867524590934910, -0.367914018041551940, +-0.367960510572384330, -0.368007002183315060, -0.368053492874228280, -0.368099982645007760, -0.368146471495537700, -0.368192959425701020, -0.368239446435381980, -0.368285932524464290, +-0.368332417692832200, -0.368378901940368650, -0.368425385266957890, -0.368471867672483630, -0.368518349156830070, -0.368564829719880300, -0.368611309361518420, -0.368657788081628250, +-0.368704265880094030, -0.368750742756798760, -0.368797218711626630, -0.368843693744461850, -0.368890167855187410, -0.368936641043687560, -0.368983113309846120, -0.369029584653547290, +-0.369076055074674110, -0.369122524573110790, -0.369168993148741190, -0.369215460801449460, -0.369261927531118690, -0.369308393337633100, -0.369354858220876490, -0.369401322180733180, +-0.369447785217086160, -0.369494247329819670, -0.369540708518817600, -0.369587168783964140, -0.369633628125142330, -0.369680086542236440, -0.369726544035130780, -0.369773000603708320, +-0.369819456247853400, -0.369865910967449810, -0.369912364762381870, -0.369958817632532580, -0.370005269577786230, -0.370051720598026770, -0.370098170693138380, -0.370144619863004180, +-0.370191068107508400, -0.370237515426534940, -0.370283961819968140, -0.370330407287691010, -0.370376851829587850, -0.370423295445542530, -0.370469738135439430, -0.370516179899161580, +-0.370562620736593300, -0.370609060647618840, -0.370655499632121300, -0.370701937689985050, -0.370748374821093910, -0.370794811025332290, -0.370841246302583190, -0.370887680652731030, +-0.370934114075659630, -0.370980546571253400, -0.371026978139395340, -0.371073408779969860, -0.371119838492860840, -0.371166267277952660, -0.371212695135128390, -0.371259122064272360, +-0.371305548065268550, -0.371351973138001280, -0.371398397282353630, -0.371444820498210040, -0.371491242785454370, -0.371537664143970990, -0.371584084573643060, -0.371630504074354940, +-0.371676922645990950, -0.371723340288434230, -0.371769757001569170, -0.371816172785279730, -0.371862587639450290, -0.371909001563963890, -0.371955414558705070, -0.372001826623557690, +-0.372048237758406120, -0.372094647963133570, -0.372141057237624420, -0.372187465581762580, -0.372233872995432540, -0.372280279478517380, -0.372326685030901490, -0.372373089652468960, +-0.372419493343104040, -0.372465896102690040, -0.372512297931111240, -0.372558698828252150, -0.372605098793995890, -0.372651497828226870, -0.372697895930829140, -0.372744293101687050, +-0.372790689340683820, -0.372837084647703880, -0.372883479022631250, -0.372929872465350310, -0.372976264975744260, -0.373022656553697540, -0.373069047199094230, -0.373115436911818640, +-0.373161825691754100, -0.373208213538785030, -0.373254600452795350, -0.373300986433669600, -0.373347371481290990, -0.373393755595543940, -0.373440138776312940, -0.373486521023481180, +-0.373532902336933090, -0.373579282716552770, -0.373625662162224650, -0.373672040673831920, -0.373718418251259120, -0.373764794894390300, -0.373811170603109870, -0.373857545377301090, +-0.373903919216848510, -0.373950292121636050, -0.373996664091548300, -0.374043035126468530, -0.374089405226281150, -0.374135774390870200, -0.374182142620120280, -0.374228509913914600, +-0.374274876272137620, -0.374321241694673850, -0.374367606181406580, -0.374413969732220300, -0.374460332346999100, -0.374506694025627470, -0.374553054767988670, -0.374599414573967280, +-0.374645773443447290, -0.374692131376313350, -0.374738488372448610, -0.374784844431737710, -0.374831199554064630, -0.374877553739314030, -0.374923906987369100, -0.374970259298114390, +-0.375016610671434050, -0.375062961107212600, -0.375109310605333370, -0.375155659165680780, -0.375202006788139090, -0.375248353472592830, -0.375294699218925220, -0.375341044027020900, +-0.375387387896764350, -0.375433730828038940, -0.375480072820729150, -0.375526413874719240, -0.375572753989893700, -0.375619093166135840, -0.375665431403330250, -0.375711768701361080, +-0.375758105060112920, -0.375804440479469090, -0.375850774959314130, -0.375897108499532230, -0.375943441100007990, -0.375989772760624790, -0.376036103481267090, -0.376082433261819120, +-0.376128762102165500, -0.376175090002189570, -0.376221416961775910, -0.376267742980809120, -0.376314068059172560, -0.376360392196750830, -0.376406715393428130, -0.376453037649089050, +-0.376499358963616970, -0.376545679336896480, -0.376591998768811780, -0.376638317259247510, -0.376684634808087060, -0.376730951415214950, -0.376777267080515510, -0.376823581803873320, +-0.376869895585171750, -0.376916208424295460, -0.376962520321128650, -0.377008831275555960, -0.377055141287460760, -0.377101450356727710, -0.377147758483241390, -0.377194065666885350, +-0.377240371907544110, -0.377286677205101950, -0.377332981559443500, -0.377379284970452140, -0.377425587438012630, -0.377471888962009120, -0.377518189542326350, -0.377564489178847660, +-0.377610787871457740, -0.377657085620040860, -0.377703382424481650, -0.377749678284663600, -0.377795973200471370, -0.377842267171789150, -0.377888560198501760, -0.377934852280492510, +-0.377981143417646100, -0.378027433609846860, -0.378073722856979430, -0.378120011158927290, -0.378166298515575150, -0.378212584926807650, -0.378258870392508330, -0.378305154912561780, +-0.378351438486852320, -0.378397721115264710, -0.378444002797682370, -0.378490283533990060, -0.378536563324072040, -0.378582842167812960, -0.378629120065096410, -0.378675397015807050, +-0.378721673019829230, -0.378767948077047610, -0.378814222187345670, -0.378860495350608230, -0.378906767566719540, -0.378953038835564360, -0.378999309157026120, -0.379045578530989640, +-0.379091846957339660, -0.379138114435959570, -0.379184380966734240, -0.379230646549547970, -0.379276911184285470, -0.379323174870830280, -0.379369437609067160, -0.379415699398880480, +-0.379461960240154940, -0.379508220132774080, -0.379554479076622650, -0.379600737071585040, -0.379646994117546040, -0.379693250214389100, -0.379739505361999020, -0.379785759560260230, +-0.379832012809057430, -0.379878265108274160, -0.379924516457795240, -0.379970766857505470, -0.380017016307288350, -0.380063264807028680, -0.380109512356610830, -0.380155758955919630, +-0.380202004604838660, -0.380248249303252630, -0.380294493051046010, -0.380340735848103520, -0.380386977694308850, -0.380433218589546650, -0.380479458533701460, -0.380525697526658050, +-0.380571935568299930, -0.380618172658512000, -0.380664408797178670, -0.380710643984184690, -0.380756878219413730, -0.380803111502750540, -0.380849343834079980, -0.380895575213285650, +-0.380941805640252370, -0.380988035114864620, -0.381034263637007150, -0.381080491206563620, -0.381126717823418890, -0.381172943487457340, -0.381219168198563830, -0.381265391956622010, +-0.381311614761516700, -0.381357836613132380, -0.381404057511353870, -0.381450277456064800, -0.381496496447150000, -0.381542714484494010, -0.381588931567981630, -0.381635147697496510, +-0.381681362872923540, -0.381727577094147120, -0.381773790361052190, -0.381820002673522340, -0.381866214031442550, -0.381912424434697580, -0.381958633883171190, -0.382004842376748140, +-0.382051049915313080, -0.382097256498750760, -0.382143462126944830, -0.382189666799780340, -0.382235870517141640, -0.382282073278913670, -0.382328275084980130, -0.382374475935225890, +-0.382420675829535430, -0.382466874767793730, -0.382513072749884390, -0.382559269775692430, -0.382605465845102240, -0.382651660957998850, -0.382697855114265850, -0.382744048313788220, +-0.382790240556450890, -0.382836431842137560, -0.382882622170733160, -0.382928811542122160, -0.382974999956189550, -0.383021187412819040, -0.383067373911895600, -0.383113559453303660, +-0.383159744036928260, -0.383205927662653100, -0.383252110330363160, -0.383298292039942870, -0.383344472791277310, -0.383390652584250150, -0.383436831418746290, -0.383483009294650460, +-0.383529186211847450, -0.383575362170221090, -0.383621537169656300, -0.383667711210038060, -0.383713884291250200, -0.383760056413177560, -0.383806227575704820, -0.383852397778716940, +-0.383898567022097630, -0.383944735305731920, -0.383990902629504300, -0.384037068993299920, -0.384083234397002430, -0.384129398840496850, -0.384175562323667790, -0.384221724846400210, +-0.384267886408577900, -0.384314047010085870, -0.384360206650808780, -0.384406365330631550, -0.384452523049437940, -0.384498679807113110, -0.384544835603541520, -0.384590990438608280, +-0.384637144312197140, -0.384683297224193200, -0.384729449174481370, -0.384775600162945490, -0.384821750189470620, -0.384867899253941440, -0.384914047356242850, -0.384960194496258730, +-0.385006340673874180, -0.385052485888973730, -0.385098630141442520, -0.385144773431164270, -0.385190915758024110, -0.385237057121906650, -0.385283197522697020, -0.385329336960278930, +-0.385375475434537480, -0.385421612945357370, -0.385467749492623630, -0.385513885076220140, -0.385560019696031870, -0.385606153351944040, -0.385652286043840330, -0.385698417771605960, +-0.385744548535125580, -0.385790678334284150, -0.385836807168965680, -0.385882935039055190, -0.385929061944437320, -0.385975187884997240, -0.386021312860618750, -0.386067436871187000, +-0.386113559916586690, -0.386159681996702860, -0.386205803111419390, -0.386251923260621470, -0.386298042444193690, -0.386344160662021210, -0.386390277913987950, -0.386436394199978990, +-0.386482509519879450, -0.386528623873573230, -0.386574737260945430, -0.386620849681880820, -0.386666961136264480, -0.386713071623980330, -0.386759181144913480, -0.386805289698948730, +-0.386851397285971120, -0.386897503905864640, -0.386943609558514370, -0.386989714243805070, -0.387035817961621900, -0.387081920711848770, -0.387128022494370890, -0.387174123309072920, +-0.387220223155840040, -0.387266322034556190, -0.387312419945106570, -0.387358516887376270, -0.387404612861249280, -0.387450707866610790, -0.387496801903345510, -0.387542894971338590, +-0.387588987070474070, -0.387635078200637080, -0.387681168361712400, -0.387727257553585170, -0.387773345776139420, -0.387819433029260310, -0.387865519312832640, -0.387911604626741510, +-0.387957688970871020, -0.388003772345106300, -0.388049854749332120, -0.388095936183433740, -0.388142016647295090, -0.388188096140801410, -0.388234174663837470, -0.388280252216288540, +-0.388326328798038580, -0.388372404408972750, -0.388418479048976310, -0.388464552717933290, -0.388510625415728890, -0.388556697142247940, -0.388602767897375630, -0.388648837680996010, +-0.388694906492994320, -0.388740974333255330, -0.388787041201664300, -0.388833107098105260, -0.388879172022463470, -0.388925235974623750, -0.388971298954471360, -0.389017360961890320, +-0.389063421996765860, -0.389109482058982830, -0.389155541148426540, -0.389201599264980940, -0.389247656408531370, -0.389293712578963060, -0.389339767776160080, -0.389385822000007650, +-0.389431875250390690, -0.389477927527194460, -0.389523978830302990, -0.389570029159601540, -0.389616078514975040, -0.389662126896308800, -0.389708174303486750, -0.389754220736394320, +-0.389800266194916370, -0.389846310678938100, -0.389892354188343670, -0.389938396723018330, -0.389984438282847010, -0.390030478867715020, -0.390076518477506410, -0.390122557112106530, +-0.390168594771400650, -0.390214631455272850, -0.390260667163608520, -0.390306701896292460, -0.390352735653210100, -0.390398768434245480, -0.390444800239283960, -0.390490831068210420, +-0.390536860920910170, -0.390582889797267410, -0.390628917697167450, -0.390674944620495120, -0.390720970567135890, -0.390766995536973800, -0.390813019529894280, -0.390859042545782130, +-0.390905064584522840, -0.390951085646000450, -0.390997105730100380, -0.391043124836707500, -0.391089142965707240, -0.391135160116983680, -0.391181176290422260, -0.391227191485908340, +-0.391273205703325970, -0.391319218942560610, -0.391365231203497200, -0.391411242486021100, -0.391457252790016530, -0.391503262115368790, -0.391549270461962920, -0.391595277829684290, +-0.391641284218417040, -0.391687289628046550, -0.391733294058457910, -0.391779297509536380, -0.391825299981166220, -0.391871301473232790, -0.391917301985621140, -0.391963301518216620, +-0.392009300070903450, -0.392055297643567060, -0.392101294236092750, -0.392147289848364890, -0.392193284480268740, -0.392239278131689410, -0.392285270802512300, -0.392331262492621570, +-0.392377253201902700, -0.392423242930240720, -0.392469231677521010, -0.392515219443627830, -0.392561206228446590, -0.392607192031862340, -0.392653176853760500, -0.392699160694025330, +-0.392745143552542250, -0.392791125429196360, -0.392837106323873030, -0.392883086236456510, -0.392929065166832290, -0.392975043114885790, -0.393021020080501330, -0.393066996063564270, +-0.393112971063959700, -0.393158945081573170, -0.393204918116288830, -0.393250890167992200, -0.393296861236568370, -0.393342831321902790, -0.393388800423879690, -0.393434768542384630, +-0.393480735677302630, -0.393526701828519180, -0.393572666995918590, -0.393618631179386340, -0.393664594378807520, -0.393710556594067620, -0.393756517825050890, -0.393802478071642870, +-0.393848437333729100, -0.393894395611193770, -0.393940352903922490, -0.393986309211800330, -0.394032264534712800, -0.394078218872544180, -0.394124172225180040, -0.394170124592505440, +-0.394216075974406000, -0.394262026370765910, -0.394307975781470750, -0.394353924206405690, -0.394399871645456200, -0.394445818098506600, -0.394491763565442520, -0.394537708046148960, +-0.394583651540511560, -0.394629594048414630, -0.394675535569743720, -0.394721476104384020, -0.394767415652220950, -0.394813354213138960, -0.394859291787023610, -0.394905228373760410, +-0.394951163973233770, -0.394997098585329160, -0.395043032209931870, -0.395088964846927400, -0.395134896496200040, -0.395180827157635530, -0.395226756831118910, -0.395272685516535770, +-0.395318613213770540, -0.395364539922708810, -0.395410465643235680, -0.395456390375236830, -0.395502314118596600, -0.395548236873200560, -0.395594158638933930, -0.395640079415682300, +-0.395685999203330090, -0.395731918001762880, -0.395777835810866290, -0.395823752630524660, -0.395869668460623660, -0.395915583301048530, -0.395961497151684830, -0.396007410012416960, +-0.396053321883130580, -0.396099232763710900, -0.396145142654043550, -0.396191051554012910, -0.396236959463504680, -0.396282866382404010, -0.396328772310596600, -0.396374677247966880, +-0.396420581194400430, -0.396466484149782530, -0.396512386113998860, -0.396558287086933750, -0.396604187068473000, -0.396650086058502160, -0.396695984056905650, -0.396741881063569220, +-0.396787777078378090, -0.396833672101217950, -0.396879566131973170, -0.396925459170529520, -0.396971351216772240, -0.397017242270586930, -0.397063132331858140, -0.397109021400471500, +-0.397154909476312320, -0.397200796559266270, -0.397246682649217810, -0.397292567746052700, -0.397338451849656100, -0.397384334959913820, -0.397430217076710280, -0.397476098199931180, +-0.397521978329461840, -0.397567857465188020, -0.397613735606994090, -0.397659612754765800, -0.397705488908388970, -0.397751364067747910, -0.397797238232728500, -0.397843111403215990, +-0.397888983579096130, -0.397934854760253360, -0.397980724946573490, -0.398026594137941780, -0.398072462334244040, -0.398118329535364690, -0.398164195741189500, -0.398210060951603830, +-0.398255925166493440, -0.398301788385742820, -0.398347650609237770, -0.398393511836863560, -0.398439372068505940, -0.398485231304049500, -0.398531089543380010, -0.398576946786383220, +-0.398622803032943620, -0.398668658282947010, -0.398714512536278760, -0.398760365792824640, -0.398806218052469190, -0.398852069315098200, -0.398897919580597060, -0.398943768848851520, +-0.398989617119746120, -0.399035464393166730, -0.399081310668998600, -0.399127155947127670, -0.399173000227438400, -0.399218843509816680, -0.399264685794147810, -0.399310527080317670, +-0.399356367368210790, -0.399402206657712980, -0.399448044948710060, -0.399493882241086620, -0.399539718534728470, -0.399585553829520990, -0.399631388125350100, -0.399677221422100330, +-0.399723053719657440, -0.399768885017906970, -0.399814715316734680, -0.399860544616025220, -0.399906372915664390, -0.399952200215537620, -0.399998026515530740, -0.400043851815528370, +-0.400089676115416400, -0.400135499415080250, -0.400181321714405790, -0.400227143013277550, -0.400272963311581460, -0.400318782609203390, -0.400364600906027990, -0.400410418201941070, +-0.400456234496828050, -0.400502049790574910, -0.400547864083066200, -0.400593677374187880, -0.400639489663825340, -0.400685300951864440, -0.400731111238189940, -0.400776920522687650, +-0.400822728805243060, -0.400868536085742020, -0.400914342364069250, -0.400960147640110620, -0.401005951913751660, -0.401051755184878180, -0.401097557453374940, -0.401143358719127820, +-0.401189158982022230, -0.401234958241944220, -0.401280756498778370, -0.401326553752410660, -0.401372350002726970, -0.401418145249611950, -0.401463939492951620, -0.401509732732631410, +-0.401555524968537300, -0.401601316200553950, -0.401647106428567320, -0.401692895652462910, -0.401738683872126690, -0.401784471087443360, -0.401830257298298800, -0.401876042504578650, +-0.401921826706168770, -0.401967609902953940, -0.402013392094820070, -0.402059173281652750, -0.402104953463337860, -0.402150732639760200, -0.402196510810805710, -0.402242287976360360, +-0.402288064136308850, -0.402333839290537230, -0.402379613438930970, -0.402425386581376110, -0.402471158717757350, -0.402516929847960720, -0.402562699971871770, -0.402608469089376420, +-0.402654237200359530, -0.402700004304707090, -0.402745770402304580, -0.402791535493038090, -0.402837299576792320, -0.402883062653453310, -0.402928824722906640, -0.402974585785038310, +-0.403020345839733120, -0.403066104886877110, -0.403111862926356200, -0.403157619958055210, -0.403203375981860180, -0.403249130997656750, -0.403294885005330840, -0.403340638004767330, +-0.403386389995852250, -0.403432140978471190, -0.403477890952510190, -0.403523639917854000, -0.403569387874388790, -0.403615134822000070, -0.403660880760573880, -0.403706625689995160, +-0.403752369610149820, -0.403798112520923570, -0.403843854422202440, -0.403889595313871310, -0.403935335195816150, -0.403981074067922660, -0.404026811930076890, -0.404072548782163700, +-0.404118284624069120, -0.404164019455679260, -0.404209753276878910, -0.404255486087554180, -0.404301217887590770, -0.404346948676874710, -0.404392678455290870, -0.404438407222725280, +-0.404484134979063710, -0.404529861724192250, -0.404575587457995710, -0.404621312180360180, -0.404667035891171370, -0.404712758590315410, -0.404758480277677080, -0.404804200953142620, +-0.404849920616597640, -0.404895639267928260, -0.404941356907019380, -0.404987073533757070, -0.405032789148027540, -0.405078503749715550, -0.405124217338707400, -0.405169929914888650, +-0.405215641478145480, -0.405261352028362830, -0.405307061565426780, -0.405352770089223050, -0.405398477599637820, -0.405444184096556030, -0.405489889579863760, -0.405535594049446720, +-0.405581297505191170, -0.405626999946981930, -0.405672701374705180, -0.405718401788246700, -0.405764101187492620, -0.405809799572327880, -0.405855496942638620, -0.405901193298311090, +-0.405946888639230120, -0.405992582965281900, -0.406038276276352250, -0.406083968572327310, -0.406129659853092070, -0.406175350118532670, -0.406221039368534880, -0.406266727602984930, +-0.406312414821767720, -0.406358101024769490, -0.406403786211876010, -0.406449470382973470, -0.406495153537946850, -0.406540835676682310, -0.406586516799065710, -0.406632196904983260, +-0.406677875994319870, -0.406723554066961760, -0.406769231122795230, -0.406814907161705210, -0.406860582183577900, -0.406906256188299120, -0.406951929175755120, -0.406997601145830890, +-0.407043272098412680, -0.407088942033386250, -0.407134610950637910, -0.407180278850052650, -0.407225945731516660, -0.407271611594915820, -0.407317276440136320, -0.407362940267063270, +-0.407408603075582850, -0.407454264865580900, -0.407499925636943710, -0.407545585389556320, -0.407591244123304940, -0.407636901838075490, -0.407682558533754180, -0.407728214210226040, +-0.407773868867377380, -0.407819522505094460, -0.407865175123262310, -0.407910826721767260, -0.407956477300495110, -0.408002126859332180, -0.408047775398163500, -0.408093422916875390, +-0.408139069415353770, -0.408184714893484850, -0.408230359351153760, -0.408276002788246720, -0.408321645204649750, -0.408367286600249010, -0.408412926974929650, -0.408458566328578020, +-0.408504204661079950, -0.408549841972321750, -0.408595478262188560, -0.408641113530566650, -0.408686747777342370, -0.408732381002400840, -0.408778013205628340, -0.408823644386910820, +-0.408869274546134590, -0.408914903683184780, -0.408960531797947720, -0.409006158890309280, -0.409051784960155870, -0.409097410007372650, -0.409143034031845820, -0.409188657033461470, +-0.409234279012105850, -0.409279899967664120, -0.409325519900022640, -0.409371138809067390, -0.409416756694684690, -0.409462373556759680, -0.409507989395178740, -0.409553604209828230, +-0.409599218000593290, -0.409644830767360300, -0.409690442510015300, -0.409736053228444530, -0.409781662922533260, -0.409827271592167810, -0.409872879237234200, -0.409918485857618750, +-0.409964091453206720, -0.410009696023884480, -0.410055299569538010, -0.410100902090053620, -0.410146503585316620, -0.410192104055213390, -0.410237703499629850, -0.410283301918452470, +-0.410328899311566410, -0.410374495678858140, -0.410420091020213650, -0.410465685335519300, -0.410511278624660300, -0.410556870887523180, -0.410602462123994210, -0.410648052333958740, +-0.410693641517303090, -0.410739229673913410, -0.410784816803676010, -0.410830402906476160, -0.410875987982200320, -0.410921572030734480, -0.410967155051965130, -0.411012737045777510, +-0.411058318012058000, -0.411103897950692740, -0.411149476861568160, -0.411195054744569410, -0.411240631599583070, -0.411286207426495130, -0.411331782225192120, -0.411377355995559250, +-0.411422928737482930, -0.411468500450849710, -0.411514071135544890, -0.411559640791454850, -0.411605209418465680, -0.411650777016463910, -0.411696343585334800, -0.411741909124964830, +-0.411787473635240100, -0.411833037116047070, -0.411878599567271080, -0.411924160988798580, -0.411969721380515690, -0.412015280742308860, -0.412060839074063430, -0.412106396375665930, +-0.412151952647002380, -0.412197507887959390, -0.412243062098422260, -0.412288615278277430, -0.412334167427411470, -0.412379718545709710, -0.412425268633058670, -0.412470817689344400, +-0.412516365714453550, -0.412561912708271360, -0.412607458670684380, -0.412653003601578750, -0.412698547500841010, -0.412744090368356520, -0.412789632204011770, -0.412835173007693010, +-0.412880712779286670, -0.412926251518678120, -0.412971789225753950, -0.413017325900400360, -0.413062861542503820, -0.413108396151949720, -0.413153929728624640, -0.413199462272415160, +-0.413244993783206560, -0.413290524260885530, -0.413336053705338210, -0.413381582116451100, -0.413427109494109660, -0.413472635838200430, -0.413518161148609620, -0.413563685425223810, +-0.413609208667928390, -0.413654730876609980, -0.413700252051154680, -0.413745772191449200, -0.413791291297378850, -0.413836809368830330, -0.413882326405689730, -0.413927842407843750, +-0.413973357375177710, -0.414018871307578310, -0.414064384204931750, -0.414109896067124620, -0.414155406894042340, -0.414200916685571520, -0.414246425441598840, -0.414291933162009740, +-0.414337439846690750, -0.414382945495528180, -0.414428450108408620, -0.414473953685217560, -0.414519456225841580, -0.414564957730166990, -0.414610458198080400, -0.414655957629467280, +-0.414701456024214270, -0.414746953382207570, -0.414792449703333950, -0.414837944987478780, -0.414883439234528750, -0.414928932444370120, -0.414974424616889550, -0.415019915751972500, +-0.415065405849505690, -0.415110894909375750, -0.415156382931468230, -0.415201869915669710, -0.415247355861866510, -0.415292840769945330, -0.415338324639791590, -0.415383807471292110, +-0.415429289264333090, -0.415474770018801230, -0.415520249734582070, -0.415565728411562310, -0.415611206049628200, -0.415656682648666450, -0.415702158208562660, -0.415747632729203400, +-0.415793106210475110, -0.415838578652264420, -0.415884050054456890, -0.415929520416939260, -0.415974989739598230, -0.416020458022319290, -0.416065925264989200, -0.416111391467494320, +-0.416156856629721410, -0.416202320751555890, -0.416247783832884580, -0.416293245873593840, -0.416338706873570330, -0.416384166832699740, -0.416429625750868670, -0.416475083627963540, +-0.416520540463871100, -0.416565996258476900, -0.416611451011667740, -0.416656904723329950, -0.416702357393350320, -0.416747809021614350, -0.416793259608008840, -0.416838709152420220, +-0.416884157654735240, -0.416929605114839450, -0.416975051532619660, -0.417020496907962610, -0.417065941240753910, -0.417111384530880420, -0.417156826778228410, -0.417202267982684780, +-0.417247708144135030, -0.417293147262466020, -0.417338585337564180, -0.417384022369316270, -0.417429458357607860, -0.417474893302325840, -0.417520327203356580, -0.417565760060586880, +-0.417611191873902440, -0.417656622643189980, -0.417702052368335960, -0.417747481049227210, -0.417792908685749360, -0.417838335277789240, -0.417883760825233710, -0.417929185327968300, +-0.417974608785880000, -0.418020031198855170, -0.418065452566780630, -0.418110872889542070, -0.418156292167026320, -0.418201710399119910, -0.418247127585709530, -0.418292543726680950, +-0.418337958821921040, -0.418383372871316220, -0.418428785874753410, -0.418474197832118200, -0.418519608743297470, -0.418565018608177740, -0.418610427426645890, -0.418655835198587510, +-0.418701241923889580, -0.418746647602438960, -0.418792052234121300, -0.418837455818823530, -0.418882858356432130, -0.418928259846833960, -0.418973660289914730, -0.419019059685561360, +-0.419064458033660330, -0.419109855334098560, -0.419155251586761760, -0.419200646791536850, -0.419246040948310310, -0.419291434056969060, -0.419336826117398810, -0.419382217129486530, +-0.419427607093118660, -0.419472996008182220, -0.419518383874562860, -0.419563770692147560, -0.419609156460822810, -0.419654541180475570, -0.419699924850991610, -0.419745307472257800, +-0.419790689044161170, -0.419836069566587370, -0.419881449039423430, -0.419926827462555830, -0.419972204835871610, -0.420017581159256470, -0.420062956432597330, -0.420108330655780850, +-0.420153703828693940, -0.420199075951222300, -0.420244447023253030, -0.420289817044672660, -0.420335186015368120, -0.420380553935225220, -0.420425920804130940, -0.420471286621971860, +-0.420516651388634920, -0.420562015104005980, -0.420607377767972020, -0.420652739380420030, -0.420698099941235750, -0.420743459450306220, -0.420788817907518100, -0.420834175312758300, +-0.420879531665912630, -0.420924886966868190, -0.420970241215511460, -0.421015594411729590, -0.421060946555408320, -0.421106297646434700, -0.421151647684695260, -0.421196996670077210, +-0.421242344602466180, -0.421287691481749330, -0.421333037307813240, -0.421378382080544960, -0.421423725799830340, -0.421469068465556370, -0.421514410077610150, -0.421559750635877530, +-0.421605090140245500, -0.421650428590600760, -0.421695765986830340, -0.421741102328820060, -0.421786437616457070, -0.421831771849628000, -0.421877105028219900, -0.421922437152118630, +-0.421967768221211240, -0.422013098235384470, -0.422058427194525350, -0.422103755098519720, -0.422149081947254760, -0.422194407740617060, -0.422239732478493720, -0.422285056160770720, +-0.422330378787335040, -0.422375700358073760, -0.422421020872872920, -0.422466340331619450, -0.422511658734200160, -0.422556976080502130, -0.422602292370411300, -0.422647607603814700, +-0.422692921780599080, -0.422738234900651540, -0.422783546963858000, -0.422828857970105660, -0.422874167919281120, -0.422919476811271570, -0.422964784645962930, -0.423010091423242360, +-0.423055397142996560, -0.423100701805112610, -0.423146005409476560, -0.423191307955975480, -0.423236609444496090, -0.423281909874925640, -0.423327209247150000, -0.423372507561056320, +-0.423417804816531800, -0.423463101013462300, -0.423508396151735080, -0.423553690231236900, -0.423598983251854910, -0.423644275213475030, -0.423689566115984460, -0.423734855959269960, +-0.423780144743218730, -0.423825432467716760, -0.423870719132651170, -0.423916004737908800, -0.423961289283376840, -0.424006572768941270, -0.424051855194489240, -0.424097136559907550, +-0.424142416865083470, -0.424187696109902870, -0.424232974294253110, -0.424278251418021280, -0.424323527481093420, -0.424368802483356730, -0.424414076424698080, -0.424459349305004620, +-0.424504621124162370, -0.424549891882058550, -0.424595161578580020, -0.424640430213614030, -0.424685697787046510, -0.424730964298764780, -0.424776229748655590, -0.424821494136606250, +-0.424866757462502800, -0.424912019726232440, -0.424957280927682040, -0.425002541066738790, -0.425047800143288860, -0.425093058157219370, -0.425138315108417650, -0.425183570996769790, +-0.425228825822162930, -0.425274079584484040, -0.425319332283620400, -0.425364583919457970, -0.425409834491884080, -0.425455084000785630, -0.425500332446049840, -0.425545579827562860, +-0.425590826145211880, -0.425636071398883880, -0.425681315588466060, -0.425726558713844570, -0.425771800774906670, -0.425817041771539280, -0.425862281703629720, -0.425907520571064010, +-0.425952758373729530, -0.425997995111513150, -0.426043230784302170, -0.426088465391982700, -0.426133698934442080, -0.426178931411567650, -0.426224162823245430, -0.426269393169362850, +-0.426314622449806780, -0.426359850664464520, -0.426405077813222230, -0.426450303895967280, -0.426495528912586570, -0.426540752862967440, -0.426585975746996030, -0.426631197564559640, +-0.426676418315545310, -0.426721637999840310, -0.426766856617330830, -0.426812074167904180, -0.426857290651447340, -0.426902506067847690, -0.426947720416991360, -0.426992933698765790, +-0.427038145913058220, -0.427083357059754920, -0.427128567138743200, -0.427173776149910090, -0.427218984093142910, -0.427264190968327910, -0.427309396775352400, -0.427354601514103370, +-0.427399805184468300, -0.427445007786333320, -0.427490209319585760, -0.427535409784112700, -0.427580609179801560, -0.427625807506538450, -0.427671004764210830, -0.427716200952705680, +-0.427761396071910490, -0.427806590121711350, -0.427851783101995730, -0.427896975012651120, -0.427942165853563590, -0.427987355624620700, -0.428032544325709420, -0.428077731956717170, +-0.428122918517530150, -0.428168104008035900, -0.428213288428121340, -0.428258471777674010, -0.428303654056580050, -0.428348835264727000, -0.428394015402001840, -0.428439194468292040, +-0.428484372463483810, -0.428529549387464740, -0.428574725240121750, -0.428619900021342310, -0.428665073731012760, -0.428710246369020550, -0.428755417935253070, -0.428800588429596670, +-0.428845757851938790, -0.428890926202166570, -0.428936093480167370, -0.428981259685827570, -0.429026424819034580, -0.429071588879675560, -0.429116751867637980, -0.429161913782808100, +-0.429207074625073460, -0.429252234394321090, -0.429297393090438570, -0.429342550713312180, -0.429387707262829380, -0.429432862738877320, -0.429478017141343480, -0.429523170470114240, +-0.429568322725077060, -0.429613473906119090, -0.429658624013127820, -0.429703773045989560, -0.429748921004591890, -0.429794067888822350, -0.429839213698567200, -0.429884358433714030, +-0.429929502094149930, -0.429974644679762540, -0.430019786190438070, -0.430064926626064210, -0.430110065986527960, -0.430155204271717000, -0.430200341481517590, -0.430245477615817380, +-0.430290612674503410, -0.430335746657463380, -0.430380879564583540, -0.430426011395751480, -0.430471142150854410, -0.430516271829779920, -0.430561400432414310, -0.430606527958645240, +-0.430651654408360170, -0.430696779781445660, -0.430741904077789120, -0.430787027297277860, -0.430832149439799420, -0.430877270505240220, -0.430922390493487850, -0.430967509404429520, +-0.431012627237952750, -0.431057743993944090, -0.431102859672291010, -0.431147974272880820, -0.431193087795601060, -0.431238200240338210, -0.431283311606979860, -0.431328421895413210, +-0.431373531105525900, -0.431418639237204420, -0.431463746290336290, -0.431508852264809170, -0.431553957160509590, -0.431599060977325030, -0.431644163715142910, -0.431689265373850720, +-0.431734365953334980, -0.431779465453483340, -0.431824563874183050, -0.431869661215321720, -0.431914757476785820, -0.431959852658463090, -0.432004946760240700, -0.432050039782006290, +-0.432095131723646440, -0.432140222585048750, -0.432185312366100530, -0.432230401066689360, -0.432275488686701850, -0.432320575226025570, -0.432365660684547900, -0.432410745062156430, +-0.432455828358737750, -0.432500910574179440, -0.432545991708369330, -0.432591071761193770, -0.432636150732540580, -0.432681228622296970, -0.432726305430350730, -0.432771381156588310, +-0.432816455800897450, -0.432861529363165410, -0.432906601843280000, -0.432951673241127650, -0.432996743556596120, -0.433041812789572710, -0.433086880939945180, -0.433131948007600080, +-0.433177013992425090, -0.433222078894307580, -0.433267142713135270, -0.433312205448794670, -0.433357267101173620, -0.433402327670159740, -0.433447387155639690, -0.433492445557501100, +-0.433537502875631480, -0.433582559109918440, -0.433627614260248650, -0.433672668326509800, -0.433717721308589270, -0.433762773206374850, -0.433807824019753100, -0.433852873748611810, +-0.433897922392838310, -0.433942969952320400, -0.433988016426944680, -0.434033061816598900, -0.434078106121170480, -0.434123149340547190, -0.434168191474615610, -0.434213232523263600, +-0.434258272486378880, -0.434303311363848090, -0.434348349155558980, -0.434393385861399030, -0.434438421481256000, -0.434483456015016530, -0.434528489462568450, -0.434573521823799100, +-0.434618553098596370, -0.434663583286846840, -0.434708612388438390, -0.434753640403258370, -0.434798667331194650, -0.434843693172133890, -0.434888717925963840, -0.434933741592572090, +-0.434978764171846280, -0.435023785663673220, -0.435068806067940680, -0.435113825384536580, -0.435158843613347450, -0.435203860754261210, -0.435248876807165340, -0.435293891771947660, +-0.435338905648494870, -0.435383918436694830, -0.435428930136434970, -0.435473940747603210, -0.435518950270086190, -0.435563958703771790, -0.435608966048547490, -0.435653972304301140, +-0.435698977470919510, -0.435743981548290420, -0.435788984536301380, -0.435833986434840280, -0.435878987243793810, -0.435923986963049850, -0.435968985592495970, -0.436013983132020000, +-0.436058979581508630, -0.436103974940849900, -0.436148969209931570, -0.436193962388640440, -0.436238954476864390, -0.436283945474490950, -0.436328935381408100, -0.436373924197502430, +-0.436418911922662020, -0.436463898556774310, -0.436508884099727210, -0.436553868551407540, -0.436598851911703220, -0.436643834180501730, -0.436688815357691050, -0.436733795443157990, +-0.436778774436790360, -0.436823752338475870, -0.436868729148102370, -0.436913704865556640, -0.436958679490726640, -0.437003653023500360, -0.437048625463764550, -0.437093596811407140, +-0.437138567066315760, -0.437183536228378360, -0.437228504297481720, -0.437273471273513850, -0.437318437156362260, -0.437363401945915000, -0.437408365642058870, -0.437453328244681750, +-0.437498289753671390, -0.437543250168915650, -0.437588209490301420, -0.437633167717716600, -0.437678124851048900, -0.437723080890186300, -0.437768035835015610, -0.437812989685424810, +-0.437857942441301940, -0.437902894102533800, -0.437947844669008430, -0.437992794140613480, -0.438037742517236930, -0.438082689798765580, -0.438127635985087580, -0.438172581076090420, +-0.438217525071662230, -0.438262467971689830, -0.438307409776061310, -0.438352350484664200, -0.438397290097386650, -0.438442228614115470, -0.438487166034738700, -0.438532102359144030, +-0.438577037587219500, -0.438621971718851980, -0.438666904753929500, -0.438711836692339760, -0.438756767533970860, -0.438801697278709660, -0.438846625926444190, -0.438891553477062550, +-0.438936479930451650, -0.438981405286499540, -0.439026329545093910, -0.439071252706122850, -0.439116174769473230, -0.439161095735033260, -0.439206015602690460, -0.439250934372333090, +-0.439295852043847970, -0.439340768617123180, -0.439385684092046480, -0.439430598468506020, -0.439475511746388600, -0.439520423925582440, -0.439565335005975220, -0.439610244987455050, +-0.439655153869908830, -0.439700061653224780, -0.439744968337290990, -0.439789873921994310, -0.439834778407223010, -0.439879681792864740, -0.439924584078807690, -0.439969485264938730, +-0.440014385351146060, -0.440059284337317500, -0.440104182223341080, -0.440149079009103770, -0.440193974694493840, -0.440238869279398930, -0.440283762763707230, -0.440328655147305740, +-0.440373546430082590, -0.440418436611925590, -0.440463325692722950, -0.440508213672361540, -0.440553100550729600, -0.440597986327715300, -0.440642871003205650, -0.440687754577088860, +-0.440732637049252640, -0.440777518419585230, -0.440822398687973630, -0.440867277854306020, -0.440912155918470220, -0.440957032880354480, -0.441001908739845680, -0.441046783496832180, +-0.441091657151201690, -0.441136529702842450, -0.441181401151641450, -0.441226271497487000, -0.441271140740266850, -0.441316008879869270, -0.441360875916181280, -0.441405741849091090, +-0.441450606678486900, -0.441495470404255850, -0.441540333026286090, -0.441585194544465490, -0.441630054958682350, -0.441674914268823600, -0.441719772474777620, -0.441764629576432200, +-0.441809485573675610, -0.441854340466394880, -0.441899194254478320, -0.441944046937813810, -0.441988898516289530, -0.442033748989792640, -0.442078598358211340, -0.442123446621433550, +-0.442168293779347580, -0.442213139831840460, -0.442257984778800460, -0.442302828620115550, -0.442347671355673930, -0.442392512985362750, -0.442437353509070260, -0.442482192926684780, +-0.442527031238093450, -0.442571868443184580, -0.442616704541845980, -0.442661539533966030, -0.442706373419431810, -0.442751206198131690, -0.442796037869953580, -0.442840868434785710, +-0.442885697892515310, -0.442930526243030640, -0.442975353486219690, -0.443020179621970770, -0.443065004650170960, -0.443109828570708630, -0.443154651383471760, -0.443199473088348620, +-0.443244293685226440, -0.443289113173993500, -0.443333931554538210, -0.443378748826747660, -0.443423564990510280, -0.443468380045713930, -0.443513193992247030, -0.443558006829996800, +-0.443602818558851530, -0.443647629178699210, -0.443692438689428200, -0.443737247090925710, -0.443782054383080100, -0.443826860565779360, -0.443871665638911890, -0.443916469602364800, +-0.443961272456026570, -0.444006074199785160, -0.444050874833528950, -0.444095674357145200, -0.444140472770522210, -0.444185270073548470, -0.444230066266111110, -0.444274861348098630, +-0.444319655319398990, -0.444364448179900620, -0.444409239929490720, -0.444454030568057710, -0.444498820095489630, -0.444543608511674900, -0.444588395816500730, -0.444633182009855580, +-0.444677967091627490, -0.444722751061704890, -0.444767533919974980, -0.444812315666326290, -0.444857096300646740, -0.444901875822824920, -0.444946654232747980, -0.444991431530304400, +-0.445036207715382210, -0.445080982787869950, -0.445125756747654810, -0.445170529594625270, -0.445215301328669820, -0.445260071949675760, -0.445304841457531460, -0.445349609852125070, +-0.445394377133345070, -0.445439143301078700, -0.445483908355214510, -0.445528672295640530, -0.445573435122245230, -0.445618196834915990, -0.445662957433541280, -0.445707716918009140, +-0.445752475288208110, -0.445797232544025480, -0.445841988685349800, -0.445886743712069160, -0.445931497624072030, -0.445976250421245720, -0.446021002103478840, -0.446065752670659840, +-0.446110502122676060, -0.446155250459416010, -0.446199997680767850, -0.446244743786620100, -0.446289488776860090, -0.446334232651376340, -0.446378975410057060, -0.446423717052790660, +-0.446468457579464630, -0.446513196989967440, -0.446557935284187250, -0.446602672462012630, -0.446647408523330900, -0.446692143468030710, -0.446736877296000090, -0.446781610007127740, +-0.446826341601300910, -0.446871072078408260, -0.446915801438338310, -0.446960529680978490, -0.447005256806217330, -0.447049982813943040, -0.447094707704044190, -0.447139431476408170, +-0.447184154130923550, -0.447228875667478540, -0.447273596085961730, -0.447318315386260600, -0.447363033568263620, -0.447407750631859060, -0.447452466576935550, -0.447497181403380460, +-0.447541895111082440, -0.447586607699929640, -0.447631319169810750, -0.447676029520613140, -0.447720738752225510, -0.447765446864536340, -0.447810153857433220, -0.447854859730804740, +-0.447899564484539050, -0.447944268118524890, -0.447988970632649640, -0.448033672026801940, -0.448078372300870110, -0.448123071454742730, -0.448167769488307280, -0.448212466401452400, +-0.448257162194066310, -0.448301856866037800, -0.448346550417254190, -0.448391242847604180, -0.448435934156976130, -0.448480624345258590, -0.448525313412339140, -0.448570001358106370, +-0.448614688182448600, -0.448659373885254510, -0.448704058466411590, -0.448748741925808550, -0.448793424263334020, -0.448838105478875540, -0.448882785572321810, -0.448927464543561080, +-0.448972142392482120, -0.449016819118972400, -0.449061494722920620, -0.449106169204215140, -0.449150842562744570, -0.449195514798396590, -0.449240185911059740, -0.449284855900622450, +-0.449329524766973410, -0.449374192510000160, -0.449418859129591450, -0.449463524625635600, -0.449508188998021310, -0.449552852246636160, -0.449597514371368910, -0.449642175372108210, +-0.449686835248741700, -0.449731494001158140, -0.449776151629245780, -0.449820808132893490, -0.449865463511988750, -0.449910117766420370, -0.449954770896076720, -0.449999422900846490, +-0.450044073780617340, -0.450088723535277960, -0.450133372164716830, -0.450178019668822650, -0.450222666047483010, -0.450267311300586730, -0.450311955428022100, -0.450356598429678070, +-0.450401240305442100, -0.450445881055203000, -0.450490520678849650, -0.450535159176269630, -0.450579796547351640, -0.450624432791984160, -0.450669067910056060, -0.450713701901454820, +-0.450758334766069360, -0.450802966503788090, -0.450847597114499730, -0.450892226598092080, -0.450936854954453790, -0.450981482183473390, -0.451026108285039640, -0.451070733259040290, +-0.451115357105364050, -0.451159979823899440, -0.451204601414535280, -0.451249221877159210, -0.451293841211660110, -0.451338459417926390, -0.451383076495846910, -0.451427692445309340, +-0.451472307266202580, -0.451516920958415390, -0.451561533521835530, -0.451606144956351820, -0.451650755261852780, -0.451695364438227220, -0.451739972485362910, -0.451784579403148590, +-0.451829185191472860, -0.451873789850224580, -0.451918393379291410, -0.451962995778562250, -0.452007597047925590, -0.452052197187270350, -0.452096796196484240, -0.452141394075456120, +-0.452185990824074510, -0.452230586442228300, -0.452275180929805290, -0.452319774286694290, -0.452364366512784220, -0.452408957607962900, -0.452453547572119140, -0.452498136405141530, +-0.452542724106918980, -0.452587310677339210, -0.452631896116291180, -0.452676480423663370, -0.452721063599344830, -0.452765645643223190, -0.452810226555187430, -0.452854806335126090, +-0.452899384982928140, -0.452943962498481350, -0.452988538881674670, -0.453033114132396610, -0.453077688250536180, -0.453122261235981090, -0.453166833088620380, -0.453211403808343020, +-0.453255973395036700, -0.453300541848590480, -0.453345109168892870, -0.453389675355832910, -0.453434240409298360, -0.453478804329178200, -0.453523367115361060, -0.453567928767735880, +-0.453612489286190470, -0.453657048670613850, -0.453701606920894620, -0.453746164036921750, -0.453790720018583060, -0.453835274865767580, -0.453879828578363950, -0.453924381156261100, +-0.453968932599346900, -0.454013482907510420, -0.454058032080640610, -0.454102580118625310, -0.454147127021353510, -0.454191672788713970, -0.454236217420595610, -0.454280760916886350, +-0.454325303277475110, -0.454369844502250650, -0.454414384591102010, -0.454458923543916980, -0.454503461360584670, -0.454547998040993660, -0.454592533585033100, -0.454637067992590740, +-0.454681601263555780, -0.454726133397816810, -0.454770664395262870, -0.454815194255781870, -0.454859722979262910, -0.454904250565594640, -0.454948777014666130, -0.454993302326365310, +-0.455037826500581220, -0.455082349537202950, -0.455126871436118410, -0.455171392197216700, -0.455215911820386450, -0.455260430305516880, -0.455304947652495850, -0.455349463861212440, +-0.455393978931555370, -0.455438492863413700, -0.455483005656675430, -0.455527517311229700, -0.455572027826965150, -0.455616537203770880, -0.455661045441534910, -0.455705552540146330, +-0.455750058499493850, -0.455794563319466610, -0.455839066999952580, -0.455883569540840920, -0.455928070942020700, -0.455972571203379860, -0.456017070324807650, -0.456061568306192770, +-0.456106065147424360, -0.456150560848390340, -0.456195055408979980, -0.456239548829081960, -0.456284041108585450, -0.456328532247378460, -0.456373022245350150, -0.456417511102389260, +-0.456461998818385010, -0.456506485393225360, -0.456550970826799460, -0.456595455118996190, -0.456639938269704610, -0.456684420278812840, -0.456728901146210010, -0.456773380871785370, +-0.456817859455426800, -0.456862336897023660, -0.456906813196464590, -0.456951288353638960, -0.456995762368434700, -0.457040235240741000, -0.457084706970446730, -0.457129177557441090, +-0.457173647001612120, -0.457218115302849000, -0.457262582461040620, -0.457307048476076170, -0.457351513347843690, -0.457395977076232470, -0.457440439661131240, -0.457484901102429340, +-0.457529361400014820, -0.457573820553776880, -0.457618278563604370, -0.457662735429386620, -0.457707191151011550, -0.457751645728368570, -0.457796099161346840, -0.457840551449834490, +-0.457885002593720720, -0.457929452592894470, -0.457973901447244980, -0.458018349156660340, -0.458062795721029810, -0.458107241140242320, -0.458151685414187100, -0.458196128542752320, +-0.458240570525827170, -0.458285011363300580, -0.458329451055061900, -0.458373889600999170, -0.458418327001001770, -0.458462763254958490, -0.458507198362758720, -0.458551632324290530, +-0.458596065139443290, -0.458640496808106310, -0.458684927330167640, -0.458729356705516680, -0.458773784934042310, -0.458818212015633890, -0.458862637950179560, -0.458907062737568590, +-0.458951486377690010, -0.458995908870433070, -0.459040330215686020, -0.459084750413338070, -0.459129169463278310, -0.459173587365395990, -0.459218004119579300, -0.459262419725717570, +-0.459306834183699890, -0.459351247493415440, -0.459395659654752490, -0.459440070667600400, -0.459484480531848540, -0.459528889247385050, -0.459573296814099360, -0.459617703231880390, +-0.459662108500617620, -0.459706512620199130, -0.459750915590514400, -0.459795317411452350, -0.459839718082902470, -0.459884117604752840, -0.459928515976892880, -0.459972913199211690, +-0.460017309271598620, -0.460061704193941820, -0.460106097966130830, -0.460150490588054570, -0.460194882059602460, -0.460239272380662760, -0.460283661551124880, -0.460328049570878250, +-0.460372436439811070, -0.460416822157812820, -0.460461206724772530, -0.460505590140579620, -0.460549972405122300, -0.460594353518290090, -0.460638733479971970, -0.460683112290057430, +-0.460727489948434710, -0.460771866454993300, -0.460816241809622160, -0.460860616012210840, -0.460904989062647600, -0.460949360960821840, -0.460993731706622720, -0.461038101299939660, +-0.461082469740660970, -0.461126837028676070, -0.461171203163874110, -0.461215568146144510, -0.461259931975375570, -0.461304294651456840, -0.461348656174277780, -0.461393016543726660, +-0.461437375759693010, -0.461481733822065920, -0.461526090730734860, -0.461570446485588200, -0.461614801086515480, -0.461659154533405670, -0.461703506826148410, -0.461747857964632020, +-0.461792207948745930, -0.461836556778379310, -0.461880904453421730, -0.461925250973761530, -0.461969596339288140, -0.462013940549890760, -0.462058283605458970, -0.462102625505881050, +-0.462146966251046560, -0.462191305840845060, -0.462235644275164890, -0.462279981553895600, -0.462324317676926390, -0.462368652644146780, -0.462412986455445100, -0.462457319110710970, +-0.462501650609833560, -0.462545980952702440, -0.462590310139205930, -0.462634638169233670, -0.462678965042674810, -0.462723290759418930, -0.462767615319354400, -0.462811938722370860, +-0.462856260968357470, -0.462900582057203800, -0.462944901988798340, -0.462989220763030560, -0.463033538379790170, -0.463077854838965520, -0.463122170140446210, -0.463166484284121550, +-0.463210797269881010, -0.463255109097613080, -0.463299419767207400, -0.463343729278553160, -0.463388037631540020, -0.463432344826056330, -0.463476650861991860, -0.463520955739235680, +-0.463565259457677570, -0.463609562017205880, -0.463653863417710310, -0.463698163659080060, -0.463742462741204790, -0.463786760663973010, -0.463831057427274320, -0.463875353030997920, +-0.463919647475033610, -0.463963940759269720, -0.464008232883596050, -0.464052523847902130, -0.464096813652076560, -0.464141102296008910, -0.464185389779588560, -0.464229676102705100, +-0.464273961265247060, -0.464318245267104080, -0.464362528108165530, -0.464406809788321050, -0.464451090307459120, -0.464495369665469500, -0.464539647862241440, -0.464583924897664650, +-0.464628200771627640, -0.464672475484020130, -0.464716749034731480, -0.464761021423651330, -0.464805292650668220, -0.464849562715671900, -0.464893831618552020, -0.464938099359197220, +-0.464982365937497140, -0.465026631353341160, -0.465070895606618960, -0.465115158697219200, -0.465159420625031460, -0.465203681389945220, -0.465247940991850180, -0.465292199430634880, +-0.465336456706189060, -0.465380712818402100, -0.465424967767163800, -0.465469221552362640, -0.465513474173888440, -0.465557725631630560, -0.465601975925478750, -0.465646225055321610, +-0.465690473021048930, -0.465734719822550440, -0.465778965459714760, -0.465823209932431650, -0.465867453240590530, -0.465911695384081170, -0.465955936362792200, -0.466000176176613320, +-0.466044414825434070, -0.466088652309144150, -0.466132888627632250, -0.466177123780788070, -0.466221357768501100, -0.466265590590661140, -0.466309822247156780, -0.466354052737877890, +-0.466398282062713830, -0.466442510221554530, -0.466486737214288520, -0.466530963040805660, -0.466575187700995820, -0.466619411194747590, -0.466663633521950840, -0.466707854682494980, +-0.466752074676269890, -0.466796293503164210, -0.466840511163067850, -0.466884727655870190, -0.466928942981461090, -0.466973157139729200, -0.467017370130564490, -0.467061581953856330, +-0.467105792609494590, -0.467150002097368010, -0.467194210417366360, -0.467238417569379230, -0.467282623553296470, -0.467326828369006740, -0.467371032016399900, -0.467415234495365540, +-0.467459435805793470, -0.467503635947572380, -0.467547834920592260, -0.467592032724742920, -0.467636229359913110, -0.467680424825992700, -0.467724619122871220, -0.467768812250438650, +-0.467813004208583630, -0.467857194997196080, -0.467901384616165540, -0.467945573065381930, -0.467989760344734000, -0.468033946454111670, -0.468078131393404480, -0.468122315162502360, +-0.468166497761294040, -0.468210679189669520, -0.468254859447518270, -0.468299038534730260, -0.468343216451194260, -0.468387393196800230, -0.468431568771438100, -0.468475743174996680, +-0.468519916407365900, -0.468564088468435280, -0.468608259358094910, -0.468652429076233450, -0.468696597622740910, -0.468740764997506890, -0.468784931200421360, -0.468829096231373090, +-0.468873260090252100, -0.468917422776947920, -0.468961584291350600, -0.469005744633348930, -0.469049903802832900, -0.469094061799692150, -0.469138218623816610, -0.469182374275095070, +-0.469226528753417640, -0.469270682058674340, -0.469314834190753870, -0.469358985149546330, -0.469403134934941350, -0.469447283546828910, -0.469491430985097820, -0.469535577249638240, +-0.469579722340339620, -0.469623866257092180, -0.469668008999784610, -0.469712150568307060, -0.469756290962549120, -0.469800430182400860, -0.469844568227751110, -0.469888705098489960, +-0.469932840794507030, -0.469976975315692440, -0.470021108661934970, -0.470065240833124730, -0.470109371829151410, -0.470153501649905050, -0.470197630295274500, -0.470241757765149930, +-0.470285884059421340, -0.470330009177977630, -0.470374133120708910, -0.470418255887504850, -0.470462377478255590, -0.470506497892849930, -0.470550617131178070, -0.470594735193129670, +-0.470638852078594790, -0.470682967787462380, -0.470727082319622570, -0.470771195674965060, -0.470815307853379940, -0.470859418854756180, -0.470903528678983880, -0.470947637325952740, +-0.470991744795552890, -0.471035851087673320, -0.471079956202204050, -0.471124060139035350, -0.471168162898056080, -0.471212264479156430, -0.471256364882226110, -0.471300464107155260, +-0.471344562153832860, -0.471388659022149050, -0.471432754711993580, -0.471476849223256610, -0.471520942555827160, -0.471565034709595320, -0.471609125684450960, -0.471653215480284100, +-0.471697304096983850, -0.471741391534440340, -0.471785477792543320, -0.471829562871183050, -0.471873646770248460, -0.471917729489629730, -0.471961811029217080, -0.472005891388899480, +-0.472049970568567230, -0.472094048568109990, -0.472138125387418010, -0.472182201026380370, -0.472226275484887210, -0.472270348762828360, -0.472314420860094060, -0.472358491776573300, +-0.472402561512156260, -0.472446630066732880, -0.472490697440193290, -0.472534763632426580, -0.472578828643322960, -0.472622892472772230, -0.472666955120664700, -0.472711016586889410, +-0.472755076871336500, -0.472799135973895950, -0.472843193894457950, -0.472887250632911590, -0.472931306189147080, -0.472975360563054730, -0.473019413754523550, -0.473063465763443820, +-0.473107516589705460, -0.473151566233198710, -0.473195614693812660, -0.473239661971437520, -0.473283708065963260, -0.473327752977280140, -0.473371796705277180, -0.473415839249844760, +-0.473459880610872800, -0.473503920788251490, -0.473547959781869980, -0.473591997591618520, -0.473636034217387150, -0.473680069659066060, -0.473724103916544400, -0.473768136989712490, +-0.473812168878460560, -0.473856199582677880, -0.473900229102254710, -0.473944257437080960, -0.473988284587046950, -0.474032310552041870, -0.474076335331955980, -0.474120358926679250, +-0.474164381336102000, -0.474208402560113430, -0.474252422598603840, -0.474296441451463210, -0.474340459118581860, -0.474384475599848980, -0.474428490895154880, -0.474472505004389590, +-0.474516517927443430, -0.474560529664205530, -0.474604540214566380, -0.474648549578416230, -0.474692557755644280, -0.474736564746141010, -0.474780570549796280, -0.474824575166500560, +-0.474868578596142950, -0.474912580838613930, -0.474956581893803460, -0.475000581761601930, -0.475044580441898510, -0.475088577934583700, -0.475132574239547410, -0.475176569356680070, +-0.475220563285870920, -0.475264556027010400, -0.475308547579988470, -0.475352537944695560, -0.475396527121020870, -0.475440515108854930, -0.475484501908088050, -0.475528487518609540, +-0.475572471940309830, -0.475616455173078930, -0.475660437216807230, -0.475704418071384140, -0.475748397736699910, -0.475792376212644750, -0.475836353499109020, -0.475880329595982030, +-0.475924304503154210, -0.475968278220515630, -0.476012250747956720, -0.476056222085366800, -0.476100192232636330, -0.476144161189655410, -0.476188128956314460, -0.476232095532502790, +-0.476276060918110870, -0.476320025113028790, -0.476363988117147090, -0.476407949930355010, -0.476451910552543050, -0.476495869983601660, -0.476539828223420280, -0.476583785271889270, +-0.476627741128898830, -0.476671695794339430, -0.476715649268100390, -0.476759601550072190, -0.476803552640145010, -0.476847502538209340, -0.476891451244154550, -0.476935398757871110, +-0.476979345079249220, -0.477023290208179300, -0.477067234144550770, -0.477111176888254160, -0.477155118439179630, -0.477199058797217690, -0.477242997962257660, -0.477286935934190190, +-0.477330872712905750, -0.477374808298293760, -0.477418742690244760, -0.477462675888648880, -0.477506607893396660, -0.477550538704377580, -0.477594468321482170, -0.477638396744600570, +-0.477682323973623370, -0.477726250008439930, -0.477770174848940910, -0.477814098495016440, -0.477858020946557100, -0.477901942203452330, -0.477945862265592710, -0.477989781132868440, +-0.478033698805170100, -0.478077615282387130, -0.478121530564410090, -0.478165444651129650, -0.478209357542435210, -0.478253269238217370, -0.478297179738366330, -0.478341089042772730, +-0.478384997151326040, -0.478428904063916860, -0.478472809780435440, -0.478516714300772360, -0.478560617624817110, -0.478604519752460320, -0.478648420683592200, -0.478692320418103450, +-0.478736218955883470, -0.478780116296822990, -0.478824012440812240, -0.478867907387741760, -0.478911801137501200, -0.478955693689981140, -0.478999585045071790, -0.479043475202663880, +-0.479087364162646910, -0.479131251924911570, -0.479175138489348450, -0.479219023855847080, -0.479262908024298160, -0.479306790994591950, -0.479350672766619190, -0.479394553340269370, +-0.479438432715433130, -0.479482310892000830, -0.479526187869863120, -0.479570063648909530, -0.479613938229030810, -0.479657811610117280, -0.479701683792059570, -0.479745554774747280, +-0.479789424558071110, -0.479833293141921360, -0.479877160526188730, -0.479921026710762870, -0.479964891695534410, -0.480008755480394120, -0.480052618065231580, -0.480096479449937440, +-0.480140339634402170, -0.480184198618516360, -0.480228056402169760, -0.480271912985252960, -0.480315768367656380, -0.480359622549270780, -0.480403475529985690, -0.480447327309691970, +-0.480491177888279890, -0.480535027265640290, -0.480578875441662720, -0.480622722416237940, -0.480666568189256400, -0.480710412760608770, -0.480754256130184800, -0.480798098297875120, +-0.480841939263570610, -0.480885779027160840, -0.480929617588536640, -0.480973454947588420, -0.481017291104206930, -0.481061126058281830, -0.481104959809703910, -0.481148792358363550, +-0.481192623704151670, -0.481236453846957790, -0.481280282786672790, -0.481324110523187130, -0.481367937056391530, -0.481411762386175670, -0.481455586512430480, -0.481499409435046270, +-0.481543231153913950, -0.481587051668923130, -0.481630870979964710, -0.481674689086929510, -0.481718505989707220, -0.481762321688188610, -0.481806136182264200, -0.481849949471824910, +-0.481893761556760280, -0.481937572436961280, -0.481981382112318340, -0.482025190582722360, -0.482068997848062950, -0.482112803908231080, -0.482156608763117220, -0.482200412412612240, +-0.482244214856605790, -0.482288016094988840, -0.482331816127651860, -0.482375614954485670, -0.482419412575380120, -0.482463208990225990, -0.482507004198913850, -0.482550798201334620, +-0.482594590997377950, -0.482638382586934870, -0.482682172969896180, -0.482725962146151650, -0.482769750115592260, -0.482813536878108460, -0.482857322433591250, -0.482901106781930320, +-0.482944889923016600, -0.482988671856740660, -0.483032452582993430, -0.483076232101664730, -0.483120010412645410, -0.483163787515826060, -0.483207563411097660, -0.483251338098349910, +-0.483295111577473850, -0.483338883848360050, -0.483382654910899380, -0.483426424764981710, -0.483470193410497960, -0.483513960847339110, -0.483557727075394960, -0.483601492094556500, +-0.483645255904714300, -0.483689018505759400, -0.483732779897581510, -0.483776540080071700, -0.483820299053120520, -0.483864056816619040, -0.483907813370456960, -0.483951568714525380, +-0.483995322848714880, -0.484039075772916440, -0.484082827487019920, -0.484126577990916350, -0.484170327284496330, -0.484214075367650880, -0.484257822240269860, -0.484301567902244270, +-0.484345312353465170, -0.484389055593822390, -0.484432797623206960, -0.484476538441509560, -0.484520278048621190, -0.484564016444431760, -0.484607753628832240, -0.484651489601713340, +-0.484695224362966140, -0.484738957912480510, -0.484782690250147420, -0.484826421375857630, -0.484870151289502230, -0.484913879990970960, -0.484957607480155100, -0.485001333756945150, +-0.485045058821232280, -0.485088782672906340, -0.485132505311858480, -0.485176226737979330, -0.485219946951160050, -0.485263665951290450, -0.485307383738261770, -0.485351100311964930, +-0.485394815672289980, -0.485438529819128000, -0.485482242752369730, -0.485525954471906160, -0.485569664977627380, -0.485613374269424410, -0.485657082347188070, -0.485700789210809340, +-0.485744494860178290, -0.485788199295185960, -0.485831902515723170, -0.485875604521680990, -0.485919305312949410, -0.485963004889419570, -0.486006703250982220, -0.486050400397528500, +-0.486094096328948400, -0.486137791045133050, -0.486181484545973600, -0.486225176831360070, -0.486268867901183570, -0.486312557755334940, -0.486356246393705280, -0.486399933816184630, +-0.486443620022664110, -0.486487305013034610, -0.486530988787187150, -0.486574671345011870, -0.486618352686399910, -0.486662032811242100, -0.486705711719429560, -0.486749389410852380, +-0.486793065885401720, -0.486836741142968380, -0.486880415183443550, -0.486924088006717330, -0.486967759612680910, -0.487011430001225430, -0.487055099172241050, -0.487098767125618890, +-0.487142433861249780, -0.487186099379025020, -0.487229763678834580, -0.487273426760569780, -0.487317088624121380, -0.487360749269380670, -0.487404408696237690, -0.487448066904583640, +-0.487491723894309500, -0.487535379665306410, -0.487579034217464460, -0.487622687550674950, -0.487666339664828700, -0.487709990559817010, -0.487753640235529920, -0.487797288691858790, +-0.487840935928694760, -0.487884581945928040, -0.487928226743449880, -0.487971870321151140, -0.488015512678923120, -0.488059153816655930, -0.488102793734240810, -0.488146432431568740, +-0.488190069908530980, -0.488233706165017660, -0.488277341200920090, -0.488320975016129140, -0.488364607610536130, -0.488408238984031240, -0.488451869136505730, -0.488495498067850590, +-0.488539125777957050, -0.488582752266715330, -0.488626377534016720, -0.488670001579752160, -0.488713624403813000, -0.488757246006089390, -0.488800866386472630, -0.488844485544854160, +-0.488888103481124050, -0.488931720195173670, -0.488975335686894000, -0.489018949956176400, -0.489062563002911010, -0.489106174826989200, -0.489149785428302010, -0.489193394806740680, +-0.489237002962195520, -0.489280609894557790, -0.489324215603718640, -0.489367820089569250, -0.489411423351999940, -0.489455025390902130, -0.489498626206166690, -0.489542225797685080, +-0.489585824165347520, -0.489629421309045410, -0.489673017228670180, -0.489716611924111980, -0.489760205395262220, -0.489803797642011980, -0.489847388664252650, -0.489890978461874400, +-0.489934567034768730, -0.489978154382826660, -0.490021740505939610, -0.490065325403997780, -0.490108909076892640, -0.490152491524515290, -0.490196072746757030, -0.490239652743508230, +-0.490283231514660300, -0.490326809060104290, -0.490370385379731600, -0.490413960473432610, -0.490457534341098730, -0.490501106982621340, -0.490544678397890840, -0.490588248586798670, +-0.490631817549235850, -0.490675385285093860, -0.490718951794263000, -0.490762517076634820, -0.490806081132100340, -0.490849643960550970, -0.490893205561877160, -0.490936765935970350, +-0.490980325082721600, -0.491023883002022430, -0.491067439693763150, -0.491110995157835300, -0.491154549394129950, -0.491198102402538640, -0.491241654182951630, -0.491285204735260550, +-0.491328754059356390, -0.491372302155130780, -0.491415849022474040, -0.491459394661277640, -0.491502939071433160, -0.491546482252830930, -0.491590024205362520, -0.491633564928919020, +-0.491677104423392020, -0.491720642688671830, -0.491764179724650090, -0.491807715531217880, -0.491851250108266750, -0.491894783455687100, -0.491938315573370530, -0.491981846461208180, +-0.492025376119091580, -0.492068904546911160, -0.492112431744558430, -0.492155957711924660, -0.492199482448901380, -0.492243005955379010, -0.492286528231249130, -0.492330049276403340, +-0.492373569090731990, -0.492417087674126730, -0.492460605026478760, -0.492504121147679660, -0.492547636037619860, -0.492591149696191000, -0.492634662123284270, -0.492678173318791210, +-0.492721683282602410, -0.492765192014609330, -0.492808699514703350, -0.492852205782775940, -0.492895710818717640, -0.492939214622420070, -0.492982717193774510, -0.493026218532672480, +-0.493069718639004560, -0.493113217512662290, -0.493156715153537430, -0.493200211561520330, -0.493243706736502750, -0.493287200678375890, -0.493330693387031390, -0.493374184862359840, +-0.493417675104252770, -0.493461164112601490, -0.493504651887297750, -0.493548138428231980, -0.493591623735295800, -0.493635107808380660, -0.493678590647378070, -0.493722072252178620, +-0.493765552622674020, -0.493809031758755510, -0.493852509660314800, -0.493895986327242460, -0.493939461759430150, -0.493982935956769560, -0.494026408919151280, -0.494069880646466950, +-0.494113351138607880, -0.494156820395465880, -0.494200288416931420, -0.494243755202896210, -0.494287220753251650, -0.494330685067889410, -0.494374148146700050, -0.494417609989575350, +-0.494461070596406650, -0.494504529967085600, -0.494547988101502910, -0.494591444999550210, -0.494634900661118870, -0.494678355086100700, -0.494721808274386280, -0.494765260225867310, +-0.494808710940435160, -0.494852160417981630, -0.494895608658397320, -0.494939055661574030, -0.494982501427403470, -0.495025945955776260, -0.495069389246584170, -0.495112831299718610, +-0.495156272115071350, -0.495199711692533070, -0.495243150031995480, -0.495286587133350000, -0.495330022996488480, -0.495373457621301470, -0.495416891007680830, -0.495460323155517970, +-0.495503754064704700, -0.495547183735131620, -0.495590612166690650, -0.495634039359273080, -0.495677465312770850, -0.495720890027074530, -0.495764313502076000, -0.495807735737667070, +-0.495851156733738420, -0.495894576490181930, -0.495937995006888900, -0.495981412283751370, -0.496024828320659860, -0.496068243117506250, -0.496111656674182110, -0.496155068990579150, +-0.496198480066588180, -0.496241889902101000, -0.496285298497009090, -0.496328705851204310, -0.496372111964577370, -0.496415516837020180, -0.496458920468424160, -0.496502322858681230, +-0.496545724007682150, -0.496589123915318730, -0.496632522581482880, -0.496675920006065360, -0.496719316188958040, -0.496762711130052380, -0.496806104829240370, -0.496849497286412760, +-0.496892888501461350, -0.496936278474277680, -0.496979667204753780, -0.497023054692780300, -0.497066440938249140, -0.497109825941051960, -0.497153209701080510, -0.497196592218225710, +-0.497239973492379420, -0.497283353523433220, -0.497326732311278940, -0.497370109855807540, -0.497413486156910830, -0.497456861214480350, -0.497500235028408180, -0.497543607598585010, +-0.497586978924902830, -0.497630349007253560, -0.497673717845528050, -0.497717085439618230, -0.497760451789415750, -0.497803816894812460, -0.497847180755699280, -0.497890543371968140, +-0.497933904743510620, -0.497977264870218760, -0.498020623751983360, -0.498063981388696340, -0.498107337780249400, -0.498150692926534520, -0.498194046827442500, -0.498237399482865380, +-0.498280750892694750, -0.498324101056822680, -0.498367449975139880, -0.498410797647538540, -0.498454144073910530, -0.498497489254146780, -0.498540833188139350, -0.498584175875779800, +-0.498627517316960200, -0.498670857511571420, -0.498714196459505540, -0.498757534160654100, -0.498800870614909240, -0.498844205822161820, -0.498887539782303880, -0.498930872495227110, +-0.498974203960823540, -0.499017534178984090, -0.499060863149600740, -0.499104190872565300, -0.499147517347769740, -0.499190842575104990, -0.499234166554463180, -0.499277489285736290, +-0.499320810768815290, -0.499364131003592340, -0.499407449989958950, -0.499450767727807390, -0.499494084217028510, -0.499537399457514460, -0.499580713449156830, -0.499624026191847870, +-0.499667337685478440, -0.499710647929940630, -0.499753956925126250, -0.499797264670927330, -0.499840571167234900, -0.499883876413941000, -0.499927180410937420, -0.499970483158116320, +-0.500013784655368610, -0.500057084902586380, -0.500100383899661830, -0.500143681646486040, -0.500186978142950990, -0.500230273388948430, -0.500273567384370680, -0.500316860129108480, +-0.500360151623054250, -0.500403441866099640, -0.500446730858136730, -0.500490018599056730, -0.500533305088751600, -0.500576590327113210, -0.500619874314033760, -0.500663157049404230, +-0.500706438533116690, -0.500749718765063250, -0.500792997745135750, -0.500836275473225400, -0.500879551949224400, -0.500922827173024500, -0.500966101144518010, -0.501009373863595790, +-0.501052645330150150, -0.501095915544073290, -0.501139184505256190, -0.501182452213591150, -0.501225718668970030, -0.501268983871285050, -0.501312247820427160, -0.501355510516288570, +-0.501398771958761370, -0.501442032147737530, -0.501485291083108240, -0.501528548764765710, -0.501571805192601810, -0.501615060366508710, -0.501658314286377640, -0.501701566952100890, +-0.501744818363570100, -0.501788068520677700, -0.501831317423314660, -0.501874565071373400, -0.501917811464746120, -0.501961056603323910, -0.502004300486999070, -0.502047543115663460, +-0.502090784489209300, -0.502134024607527870, -0.502177263470511390, -0.502220501078051830, -0.502263737430041270, -0.502306972526371020, -0.502350206366933390, -0.502393438951620140, +-0.502436670280323790, -0.502479900352935330, -0.502523129169347160, -0.502566356729451050, -0.502609583033139520, -0.502652808080303660, -0.502696031870835780, -0.502739254404628190, +-0.502782475681572080, -0.502825695701559770, -0.502868914464483230, -0.502912131970234770, -0.502955348218705580, -0.502998563209788090, -0.503041776943374150, -0.503084989419356200, +-0.503128200637625310, -0.503171410598073910, -0.503214619300594080, -0.503257826745078020, -0.503301032931417040, -0.503344237859503440, -0.503387441529229320, -0.503430643940486870, +-0.503473845093167500, -0.503517044987163540, -0.503560243622366840, -0.503603440998670050, -0.503646637115964250, -0.503689831974141860, -0.503733025573095180, -0.503776217912715650, +-0.503819408992895570, -0.503862598813526910, -0.503905787374502200, -0.503948974675712650, -0.503992160717050550, -0.504035345498408120, -0.504078529019677760, -0.504121711280750670, +-0.504164892281519280, -0.504208072021875680, -0.504251250501712270, -0.504294427720920260, -0.504337603679392290, -0.504380778377020330, -0.504423951813696700, -0.504467123989312930, +-0.504510294903761310, -0.504553464556934280, -0.504596632948723260, -0.504639800079020650, -0.504682965947718550, -0.504726130554709380, -0.504769293899884450, -0.504812455983136400, +-0.504855616804357200, -0.504898776363439270, -0.504941934660274040, -0.504985091694754030, -0.505028247466771220, -0.505071401976218250, -0.505114555222986320, -0.505157707206968070, +-0.505200857928055470, -0.505244007386141170, -0.505287155581116370, -0.505330302512873810, -0.505373448181305810, -0.505416592586303780, -0.505459735727760370, -0.505502877605567560, +-0.505546018219617980, -0.505589157569802940, -0.505632295656014970, -0.505675432478146280, -0.505718568036089390, -0.505761702329735720, -0.505804835358977800, -0.505847967123707720, +-0.505891097623818230, -0.505934226859200530, -0.505977354829747260, -0.506020481535350620, -0.506063606975903140, -0.506106731151296340, -0.506149854061422650, -0.506192975706174720, +-0.506236096085443950, -0.506279215199122890, -0.506322333047103830, -0.506365449629279430, -0.506408564945540870, -0.506451678995781030, -0.506494791779891870, -0.506537903297766160, +-0.506581013549295300, -0.506624122534371950, -0.506667230252888290, -0.506710336704736970, -0.506753441889809310, -0.506796545807998160, -0.506839648459195600, -0.506882749843294290, +-0.506925849960185640, -0.506968948809762510, -0.507012046391916990, -0.507055142706541620, -0.507098237753528140, -0.507141331532768970, -0.507184424044156980, -0.507227515287583360, +-0.507270605262941100, -0.507313693970122270, -0.507356781409019630, -0.507399867579524600, -0.507442952481529930, -0.507486036114927930, -0.507529118479611130, -0.507572199575471170, +-0.507615279402400810, -0.507658357960292130, -0.507701435249037990, -0.507744511268529930, -0.507787586018660480, -0.507830659499322160, -0.507873731710407510, -0.507916802651808160, +-0.507959872323416880, -0.508002940725126200, -0.508046007856827850, -0.508089073718414390, -0.508132138309778330, -0.508175201630812310, -0.508218263681407880, -0.508261324461457780, +-0.508304383970854420, -0.508347442209490460, -0.508390499177257430, -0.508433554874048290, -0.508476609299755130, -0.508519662454270940, -0.508562714337487120, -0.508605764949296550, +-0.508648814289591630, -0.508691862358265020, -0.508734909155208360, -0.508777954680314390, -0.508820998933475880, -0.508864041914584560, -0.508907083623533210, -0.508950124060214000, +-0.508993163224519930, -0.509036201116342620, -0.509079237735574730, -0.509122273082108780, -0.509165307155837520, -0.509208339956652710, -0.509251371484446880, -0.509294401739112780, +-0.509337430720542940, -0.509380458428629220, -0.509423484863264280, -0.509466510024340740, -0.509509533911751130, -0.509552556525387450, -0.509595577865142310, -0.509638597930908270, +-0.509681616722578060, -0.509724634240043550, -0.509767650483197280, -0.509810665451932430, -0.509853679146140440, -0.509896691565714270, -0.509939702710546340, -0.509982712580529630, +-0.510025721175555670, -0.510068728495517430, -0.510111734540307340, -0.510154739309818360, -0.510197742803942140, -0.510240745022571550, -0.510283745965599110, -0.510326745632917580, +-0.510369744024418930, -0.510412741139995910, -0.510455736979540940, -0.510498731542947120, -0.510541724830106070, -0.510584716840910670, -0.510627707575253890, -0.510670697033027480, +-0.510713685214124190, -0.510756672118436780, -0.510799657745858120, -0.510842642096279940, -0.510885625169595130, -0.510928606965696200, -0.510971587484476130, -0.511014566725826790, +-0.511057544689641040, -0.511100521375811300, -0.511143496784230770, -0.511186470914791080, -0.511229443767385220, -0.511272415341905710, -0.511315385638245520, -0.511358354656296530, +-0.511401322395951710, -0.511444288857103910, -0.511487254039645010, -0.511530217943467980, -0.511573180568465350, -0.511616141914530200, -0.511659101981554290, -0.511702060769430700, +-0.511745018278051860, -0.511787974507310950, -0.511830929457099630, -0.511873883127311080, -0.511916835517837730, -0.511959786628572780, -0.512002736459407860, -0.512045685010236170, +-0.512088632280950250, -0.512131578271443180, -0.512174522981606710, -0.512217466411333920, -0.512260408560517910, -0.512303349429050540, -0.512346289016824660, -0.512389227323733150, +-0.512432164349668980, -0.512475100094523910, -0.512518034558191230, -0.512560967740563370, -0.512603899641533410, -0.512646830260993450, -0.512689759598836340, -0.512732687654954830, +-0.512775614429242020, -0.512818539921589770, -0.512861464131891260, -0.512904387060038940, -0.512947308705926090, -0.512990229069444690, -0.513033148150487620, -0.513076065948947610, +-0.513118982464717990, -0.513161897697690380, -0.513204811647758110, -0.513247724314814140, -0.513290635698750550, -0.513333545799460330, -0.513376454616836230, -0.513419362150771330, +-0.513462268401157720, -0.513505173367888370, -0.513548077050856140, -0.513590979449954130, -0.513633880565074310, -0.513676780396109640, -0.513719678942953120, -0.513762576205497810, +-0.513805472183635700, -0.513848366877259770, -0.513891260286263090, -0.513934152410538530, -0.513977043249978170, -0.514019932804475330, -0.514062821073922980, -0.514105708058213210, +-0.514148593757239090, -0.514191478170893610, -0.514234361299069740, -0.514277243141659570, -0.514320123698556400, -0.514363002969652870, -0.514405880954842190, -0.514448757654016430, +-0.514491633067068690, -0.514534507193891930, -0.514577380034379360, -0.514620251588422950, -0.514663121855915780, -0.514705990836750950, -0.514748858530821420, -0.514791724938019390, +-0.514834590058238060, -0.514877453891370740, -0.514920316437309290, -0.514963177695947020, -0.515006037667176900, -0.515048896350892020, -0.515091753746984460, -0.515134609855347540, +-0.515177464675874220, -0.515220318208457480, -0.515263170452989640, -0.515306021409363880, -0.515348871077472960, -0.515391719457210300, -0.515434566548467980, -0.515477412351139310, +-0.515520256865117040, -0.515563100090294490, -0.515605942026563850, -0.515648782673818310, -0.515691622031950850, -0.515734460100854660, -0.515777296880421950, -0.515820132370546030, +-0.515862966571120190, -0.515905799482036520, -0.515948631103188340, -0.515991461434468610, -0.516034290475770650, -0.516077118226986540, -0.516119944688009590, -0.516162769858732770, +-0.516205593739049510, -0.516248416328851770, -0.516291237628033080, -0.516334057636486210, -0.516376876354104670, -0.516419693780780560, -0.516462509916407080, -0.516505324760877520, +-0.516548138314084860, -0.516590950575921530, -0.516633761546280820, -0.516676571225056170, -0.516719379612139650, -0.516762186707424580, -0.516804992510804140, -0.516847797022171650, +-0.516890600241419200, -0.516933402168440300, -0.516976202803127840, -0.517019002145375330, -0.517061800195074860, -0.517104596952119970, -0.517147392416403510, -0.517190186587819010, +-0.517232979466258680, -0.517275771051615820, -0.517318561343783510, -0.517361350342655290, -0.517404138048123240, -0.517446924460080890, -0.517489709578421550, -0.517532493403037640, +-0.517575275933822470, -0.517618057170669000, -0.517660837113470880, -0.517703615762120320, -0.517746393116510610, -0.517789169176534950, -0.517831943942086870, -0.517874717413058460, +-0.517917489589343140, -0.517960260470834210, -0.518003030057425100, -0.518045798349007880, -0.518088565345476200, -0.518131331046723150, -0.518174095452642150, -0.518216858563125490, +-0.518259620378066720, -0.518302380897359250, -0.518345140120895500, -0.518387898048568880, -0.518430654680272500, -0.518473410015899860, -0.518516164055343290, -0.518558916798496310, +-0.518601668245252110, -0.518644418395504010, -0.518687167249144650, -0.518729914806067230, -0.518772661066165040, -0.518815406029331630, -0.518858149695459290, -0.518900892064441570, +-0.518943633136171640, -0.518986372910543060, -0.519029111387448120, -0.519071848566780350, -0.519114584448432950, -0.519157319032299560, -0.519200052318272490, -0.519242784306245260, +-0.519285514996111420, -0.519328244387763370, -0.519370972481094870, -0.519413699275998790, -0.519456424772368860, -0.519499148970097520, -0.519541871869078300, -0.519584593469204490, +-0.519627313770369530, -0.519670032772465820, -0.519712750475387120, -0.519755466879026520, -0.519798181983277540, -0.519840895788032830, -0.519883608293185920, -0.519926319498629890, +-0.519969029404258490, -0.520011738009964030, -0.520054445315640380, -0.520097151321180950, -0.520139856026478280, -0.520182559431425880, -0.520225261535917190, -0.520267962339845620, +-0.520310661843103820, -0.520353360045585410, -0.520396056947183490, -0.520438752547791930, -0.520481446847303020, -0.520524139845610520, -0.520566831542607740, -0.520609521938188210, +-0.520652211032244460, -0.520694898824670240, -0.520737585315358630, -0.520780270504203610, -0.520822954391097490, -0.520865636975933910, -0.520908318258606730, -0.520950998239008260, +-0.520993676917032360, -0.521036354292572330, -0.521079030365521720, -0.521121705135773160, -0.521164378603220290, -0.521207050767756530, -0.521249721629275520, -0.521292391187669790, +-0.521335059442833090, -0.521377726394658850, -0.521420392043040580, -0.521463056387870940, -0.521505719429043670, -0.521548381166452080, -0.521591041599989920, -0.521633700729549840, +-0.521676358555025480, -0.521719015076310240, -0.521761670293297790, -0.521804324205880850, -0.521846976813952980, -0.521889628117408130, -0.521932278116138850, -0.521974926810038880, +-0.522017574199001630, -0.522060220282920760, -0.522102865061688900, -0.522145508535199920, -0.522188150703347230, -0.522230791566024480, -0.522273431123124410, -0.522316069374540780, +-0.522358706320166900, -0.522401341959896740, -0.522443976293622710, -0.522486609321238800, -0.522529241042638430, -0.522571871457715330, -0.522614500566362050, -0.522657128368472670, +-0.522699754863940710, -0.522742380052659050, -0.522785003934521430, -0.522827626509421380, -0.522870247777252550, -0.522912867737907790, -0.522955486391280750, -0.522998103737265070, +-0.523040719775754500, -0.523083334506641790, -0.523125947929820700, -0.523168560045184750, -0.523211170852627800, -0.523253780352042510, -0.523296388543322720, -0.523338995426362090, +-0.523381601001054240, -0.523424205267292050, -0.523466808224969380, -0.523509409873979980, -0.523552010214216710, -0.523594609245573440, -0.523637206967943690, -0.523679803381221220, +-0.523722398485298890, -0.523764992280070560, -0.523807584765429770, -0.523850175941270480, -0.523892765807485230, -0.523935354363968100, -0.523977941610612620, -0.524020527547312650, +-0.524063112173960950, -0.524105695490451500, -0.524148277496677810, -0.524190858192533860, -0.524233437577912300, -0.524276015652707210, -0.524318592416812000, -0.524361167870120770, +-0.524403742012526150, -0.524446314843922230, -0.524488886364202990, -0.524531456573261060, -0.524574025470990520, -0.524616593057284810, -0.524659159332038110, -0.524701724295143060, +-0.524744287946493750, -0.524786850285983820, -0.524829411313507020, -0.524871971028956330, -0.524914529432225720, -0.524957086523208720, -0.524999642301799520, -0.525042196767890660, +-0.525084749921376440, -0.525127301762150280, -0.525169852290106380, -0.525212401505137370, -0.525254949407137350, -0.525297495996000290, -0.525340041271619150, -0.525382585233887920, +-0.525425127882700240, -0.525467669217950070, -0.525510209239530400, -0.525552747947335200, -0.525595285341258100, -0.525637821421193200, -0.525680356187033350, -0.525722889638672640, +-0.525765421776004720, -0.525807952598923540, -0.525850482107322210, -0.525893010301094590, -0.525935537180134420, -0.525978062744335890, -0.526020586993591780, -0.526063109927796150, +-0.526105631546843200, -0.526148151850625690, -0.526190670839037920, -0.526233188511973430, -0.526275704869326290, -0.526318219910989590, -0.526360733636857310, -0.526403246046823200, +-0.526445757140781350, -0.526488266918624710, -0.526530775380247400, -0.526573282525543140, -0.526615788354406140, -0.526658292866729270, -0.526700796062406610, -0.526743297941332010, +-0.526785798503399460, -0.526828297748502150, -0.526870795676534050, -0.526913292287389260, -0.526955787580960950, -0.526998281557143120, -0.527040774215829620, -0.527083265556914650, +-0.527125755580290960, -0.527168244285852960, -0.527210731673494410, -0.527253217743109290, -0.527295702494590900, -0.527338185927833100, -0.527380668042729980, -0.527423148839175520, +-0.527465628317062670, -0.527508106476285880, -0.527550583316738870, -0.527593058838315640, -0.527635533040909490, -0.527678005924414490, -0.527720477488724530, -0.527762947733733670, +-0.527805416659335110, -0.527847884265422950, -0.527890350551891490, -0.527932815518633800, -0.527975279165543990, -0.528017741492516010, -0.528060202499444190, -0.528102662186221370, +-0.528145120552741880, -0.528187577598899560, -0.528230033324588730, -0.528272487729702480, -0.528314940814134990, -0.528357392577780140, -0.528399843020532110, -0.528442292142284220, +-0.528484739942930550, -0.528527186422364960, -0.528569631580481870, -0.528612075417174250, -0.528654517932336530, -0.528696959125862790, -0.528739398997646330, -0.528781837547581460, +-0.528824274775561820, -0.528866710681482060, -0.528909145265235030, -0.528951578526715150, -0.528994010465816290, -0.529036441082432860, -0.529078870376457840, -0.529121298347785760, +-0.529163724996310370, -0.529206150321926080, -0.529248574324525990, -0.529290997004004500, -0.529333418360255600, -0.529375838393173370, -0.529418257102651340, -0.529460674488583470, +-0.529503090550864420, -0.529545505289387260, -0.529587918704046310, -0.529630330794735540, -0.529672741561349360, -0.529715151003780970, -0.529757559121924680, -0.529799965915674460, +-0.529842371384924740, -0.529884775529568700, -0.529927178349500760, -0.529969579844614790, -0.530011980014805320, -0.530054378859965540, -0.530096776379989750, -0.530139172574772060, +-0.530181567444206750, -0.530223960988187250, -0.530266353206607750, -0.530308744099362350, -0.530351133666345560, -0.530393521907450480, -0.530435908822571740, -0.530478294411603430, +-0.530520678674439080, -0.530563061610973110, -0.530605443221099370, -0.530647823504712400, -0.530690202461705620, -0.530732580091973220, -0.530774956395409390, -0.530817331371908560, +-0.530859705021364040, -0.530902077343670230, -0.530944448338721230, -0.530986818006411450, -0.531029186346634320, -0.531071553359284240, -0.531113919044255200, -0.531156283401441720, +-0.531198646430737220, -0.531241008132036120, -0.531283368505232830, -0.531325727550220780, -0.531368085266894390, -0.531410441655147730, -0.531452796714875440, -0.531495150445970730, +-0.531537502848328130, -0.531579853921841820, -0.531622203666406220, -0.531664552081914770, -0.531706899168261860, -0.531749244925341810, -0.531791589353048930, -0.531833932451276750, +-0.531876274219919790, -0.531918614658872020, -0.531960953768028210, -0.532003291547281540, -0.532045627996526770, -0.532087963115658200, -0.532130296904569370, -0.532172629363154790, +-0.532214960491308680, -0.532257290288925430, -0.532299618755898710, -0.532341945892122910, -0.532384271697492250, -0.532426596171901250, -0.532468919315243320, -0.532511241127413220, +-0.532553561608305030, -0.532595880757813170, -0.532638198575831390, -0.532680515062254000, -0.532722830216975310, -0.532765144039889950, -0.532807456530891450, -0.532849767689874240, +-0.532892077516732950, -0.532934386011361120, -0.532976693173653370, -0.533018999003503800, -0.533061303500807160, -0.533103606665456860, -0.533145908497347550, -0.533188208996373540, +-0.533230508162429340, -0.533272805995408380, -0.533315102495205530, -0.533357397661714970, -0.533399691494831130, -0.533441983994447870, -0.533484275160459490, -0.533526564992760520, +-0.533568853491245500, -0.533611140655807950, -0.533653426486342510, -0.533695710982743600, -0.533737994144905640, -0.533780275972722480, -0.533822556466088560, -0.533864835624898610, +-0.533907113449046180, -0.533949389938426000, -0.533991665092932390, -0.534033938912459980, -0.534076211396902310, -0.534118482546154130, -0.534160752360109740, -0.534203020838663780, +-0.534245287981709890, -0.534287553789142940, -0.534329818260857010, -0.534372081396746860, -0.534414343196706220, -0.534456603660629640, -0.534498862788411630, -0.534541120579946740, +-0.534583377035128700, -0.534625632153852280, -0.534667885936012110, -0.534710138381501940, -0.534752389490216310, -0.534794639262049730, -0.534836887696896970, -0.534879134794651550, +-0.534921380555208330, -0.534963624978461730, -0.535005868064306390, -0.535048109812635950, -0.535090350223345280, -0.535132589296328680, -0.535174827031481120, -0.535217063428696020, +-0.535259298487868240, -0.535301532208892210, -0.535343764591662770, -0.535385995636073590, -0.535428225342019280, -0.535470453709394940, -0.535512680738093990, -0.535554906428011400, +-0.535597130779041470, -0.535639353791079190, -0.535681575464018070, -0.535723795797752980, -0.535766014792178450, -0.535808232447189340, -0.535850448762679180, -0.535892663738542830, +-0.535934877374674930, -0.535977089670970240, -0.536019300627322390, -0.536061510243626250, -0.536103718519776340, -0.536145925455667640, -0.536188131051193670, -0.536230335306249310, +-0.536272538220729180, -0.536314739794528040, -0.536356940027539750, -0.536399138919659070, -0.536441336470780850, -0.536483532680798960, -0.536525727549608260, -0.536567921077103270, +-0.536610113263178870, -0.536652304107728680, -0.536694493610647800, -0.536736681771830760, -0.536778868591172300, -0.536821054068566280, -0.536863238203907690, -0.536905420997090930, +-0.536947602448011100, -0.536989782556561820, -0.537031961322638090, -0.537074138746134520, -0.537116314826945880, -0.537158489564966150, -0.537200662960090170, -0.537242835012212820, +-0.537285005721228170, -0.537327175087030870, -0.537369343109515670, -0.537411509788577550, -0.537453675124110240, -0.537495839116008730, -0.537538001764167660, -0.537580163068481890, +-0.537622323028845380, -0.537664481645153130, -0.537706638917299530, -0.537748794845179790, -0.537790949428687770, -0.537833102667718220, -0.537875254562166010, -0.537917405111925980, +-0.537959554316892130, -0.538001702176959420, -0.538043848692022710, -0.538085993861976090, -0.538128137686714410, -0.538170280166132440, -0.538212421300125140, -0.538254561088586490, +-0.538296699531411350, -0.538338836628494470, -0.538380972379730820, -0.538423106785014480, -0.538465239844240330, -0.538507371557302990, -0.538549501924097670, -0.538591630944518230, +-0.538633758618459750, -0.538675884945816860, -0.538718009926484550, -0.538760133560356900, -0.538802255847328880, -0.538844376787295690, -0.538886496380151070, -0.538928614625790230, +-0.538970731524107900, -0.539012847074999080, -0.539054961278357840, -0.539097074134079150, -0.539139185642057760, -0.539181295802188760, -0.539223404614366130, -0.539265512078485050, +-0.539307618194440170, -0.539349722962126690, -0.539391826381438460, -0.539433928452270670, -0.539476029174517980, -0.539518128548075680, -0.539560226572837640, -0.539602323248699060, +-0.539644418575554670, -0.539686512553299690, -0.539728605181827970, -0.539770696461034700, -0.539812786390815090, -0.539854874971063210, -0.539896962201674050, -0.539939048082542560, +-0.539981132613563840, -0.540023215794631860, -0.540065297625641820, -0.540107378106488570, -0.540149457237067200, -0.540191535017271910, -0.540233611446997660, -0.540275686526139440, +-0.540317760254592440, -0.540359832632250630, -0.540401903659009200, -0.540443973334763020, -0.540486041659407280, -0.540528108632836070, -0.540570174254944690, -0.540612238525628120, +-0.540654301444780550, -0.540696363012297290, -0.540738423228073200, -0.540780482092003360, -0.540822539603981860, -0.540864595763904110, -0.540906650571664870, -0.540948704027159330, +-0.540990756130281690, -0.541032806880927140, -0.541074856278990550, -0.541116904324367210, -0.541158951016951220, -0.541200996356637990, -0.541243040343322160, -0.541285082976899030, +-0.541327124257262930, -0.541369164184308920, -0.541411202757932530, -0.541453239978027630, -0.541495275844489640, -0.541537310357213530, -0.541579343516094490, -0.541621375321026610, +-0.541663405771905420, -0.541705434868625660, -0.541747462611082750, -0.541789488999170790, -0.541831514032785070, -0.541873537711820560, -0.541915560036172580, -0.541957581005735320, +-0.541999600620404200, -0.542041618880073960, -0.542083635784640140, -0.542125651333996820, -0.542167665528039410, -0.542209678366662780, -0.542251689849762350, -0.542293699977232310, +-0.542335708748967970, -0.542377716164864850, -0.542419722224816940, -0.542461726928719860, -0.542503730276468370, -0.542545732267957880, -0.542587732903082820, -0.542629732181738380, +-0.542671730103819530, -0.542713726669221800, -0.542755721877839380, -0.542797715729567700, -0.542839708224301610, -0.542881699361936750, -0.542923689142367220, -0.542965677565488410, +-0.543007664631195430, -0.543049650339383680, -0.543091634689947480, -0.543133617682782120, -0.543175599317783140, -0.543217579594844730, -0.543259558513862430, -0.543301536074731310, +-0.543343512277346560, -0.543385487121602730, -0.543427460607395220, -0.543469432734619010, -0.543511403503169510, -0.543553372912941260, -0.543595340963829550, -0.543637307655729480, +-0.543679272988536470, -0.543721236962144920, -0.543763199576450360, -0.543805160831347670, -0.543847120726732580, -0.543889079262499300, -0.543931036438543240, -0.543972992254760030, +-0.544014946711043890, -0.544056899807290440, -0.544098851543394770, -0.544140801919252290, -0.544182750934757430, -0.544224698589805710, -0.544266644884292220, -0.544308589818112590, +-0.544350533391161020, -0.544392475603333150, -0.544434416454524060, -0.544476355944629290, -0.544518294073543240, -0.544560230841161560, -0.544602166247379230, -0.544644100292091870, +-0.544686032975193910, -0.544727964296580770, -0.544769894256148190, -0.544811822853790480, -0.544853750089403290, -0.544895675962881580, -0.544937600474121100, -0.544979523623016270, +-0.545021445409462620, -0.545063365833355460, -0.545105284894590090, -0.545147202593061260, -0.545189118928664400, -0.545231033901294680, -0.545272947510847760, -0.545314859757218160, +-0.545356770640301410, -0.545398680159992600, -0.545440588316187580, -0.545482495108780770, -0.545524400537667600, -0.545566304602743470, -0.545608207303904020, -0.545650108641043570, +-0.545692008614057980, -0.545733907222842650, -0.545775804467292120, -0.545817700347302150, -0.545859594862767920, -0.545901488013585070, -0.545943379799648240, -0.545985270220852860, +-0.546027159277094220, -0.546069046968268190, -0.546110933294269070, -0.546152818254992730, -0.546194701850334250, -0.546236584080189490, -0.546278464944452760, -0.546320344443019910, +-0.546362222575786260, -0.546404099342647440, -0.546445974743497880, -0.546487848778233530, -0.546529721446749830, -0.546571592748941510, -0.546613462684704120, -0.546655331253933170, +-0.546697198456524200, -0.546739064292371960, -0.546780928761371960, -0.546822791863419640, -0.546864653598410740, -0.546906513966239790, -0.546948372966802650, -0.546990230599994520, +-0.547032086865711250, -0.547073941763847270, -0.547115795294298550, -0.547157647456960270, -0.547199498251728310, -0.547241347678497190, -0.547283195737162660, -0.547325042427620590, +-0.547366887749765500, -0.547408731703493130, -0.547450574288699030, -0.547492415505278830, -0.547534255353127270, -0.547576093832140010, -0.547617930942212450, -0.547659766683240570, +-0.547701601055118890, -0.547743434057743170, -0.547785265691008830, -0.547827095954811720, -0.547868924849046480, -0.547910752373608980, -0.547952578528394520, -0.547994403313299070, +-0.548036226728217170, -0.548078048773044780, -0.548119869447677210, -0.548161688752010430, -0.548203506685938980, -0.548245323249358710, -0.548287138442165590, -0.548328952264254270, +-0.548370764715520490, -0.548412575795859890, -0.548454385505168120, -0.548496193843340030, -0.548538000810271490, -0.548579806405858020, -0.548621610629995260, -0.548663413482578190, +-0.548705214963502550, -0.548747015072663880, -0.548788813809958140, -0.548830611175279870, -0.548872407168525140, -0.548914201789589380, -0.548955995038368450, -0.548997786914757200, +-0.549039577418651390, -0.549081366549947100, -0.549123154308539090, -0.549164940694323090, -0.549206725707194750, -0.549248509347049940, -0.549290291613783620, -0.549332072507291440, +-0.549373852027469130, -0.549415630174212470, -0.549457406947416520, -0.549499182346976920, -0.549540956372789440, -0.549582729024749920, -0.549624500302753230, -0.549666270206695230, +-0.549708038736471560, -0.549749805891978190, -0.549791571673109990, -0.549833336079762810, -0.549875099111832630, -0.549916860769214420, -0.549958621051803930, -0.550000379959497020, +-0.550042137492189440, -0.550083893649776170, -0.550125648432153170, -0.550167401839216090, -0.550209153870860780, -0.550250904526982330, -0.550292653807476500, -0.550334401712239130, +-0.550376148241166100, -0.550417893394152260, -0.550459637171093810, -0.550501379571886160, -0.550543120596425520, -0.550584860244606620, -0.550626598516325670, -0.550668335411478530, +-0.550710070929960160, -0.550751805071666660, -0.550793537836493650, -0.550835269224337120, -0.550876999235092150, -0.550918727868654590, -0.550960455124920200, -0.551002181003785060, +-0.551043905505144150, -0.551085628628893430, -0.551127350374928550, -0.551169070743145810, -0.551210789733439950, -0.551252507345707190, -0.551294223579843030, -0.551335938435743800, +-0.551377651913304350, -0.551419364012420750, -0.551461074732988670, -0.551502784074904380, -0.551544492038062660, -0.551586198622359800, -0.551627903827691780, -0.551669607653953560, +-0.551711310101041460, -0.551753011168851000, -0.551794710857278380, -0.551836409166218570, -0.551878106095567870, -0.551919801645221810, -0.551961495815076590, -0.552003188605027280, +-0.552044880014970100, -0.552086570044800660, -0.552128258694415060, -0.552169945963708610, -0.552211631852577160, -0.552253316360916680, -0.552294999488623370, -0.552336681235592100, +-0.552378361601719160, -0.552420040586900640, -0.552461718191031630, -0.552503394414008420, -0.552545069255726660, -0.552586742716082550, -0.552628414794971270, -0.552670085492289020, +-0.552711754807931440, -0.552753422741794950, -0.552795089293774410, -0.552836754463766230, -0.552878418251666170, -0.552920080657370420, -0.552961741680774050, -0.553003401321773390, +-0.553045059580264180, -0.553086716456142710, -0.553128371949304090, -0.553170026059644600, -0.553211678787060350, -0.553253330131446510, -0.553294980092699400, -0.553336628670714760, +-0.553378275865389010, -0.553419921676617130, -0.553461566104295530, -0.553503209148319960, -0.553544850808586730, -0.553586491084991030, -0.553628129977429050, -0.553669767485796770, +-0.553711403609990490, -0.553753038349905190, -0.553794671705437500, -0.553836303676482960, -0.553877934262938080, -0.553919563464698060, -0.553961191281659100, -0.554002817713717070, +-0.554044442760768470, -0.554086066422708410, -0.554127688699433070, -0.554169309590838990, -0.554210929096821240, -0.554252547217276130, -0.554294163952099740, -0.554335779301188160, +-0.554377393264436910, -0.554419005841742090, -0.554460617032999760, -0.554502226838106350, -0.554543835256956940, -0.554585442289447840, -0.554627047935475240, -0.554668652194935440, +-0.554710255067723530, -0.554751856553736040, -0.554793456652868940, -0.554835055365018540, -0.554876652690080130, -0.554918248627950030, -0.554959843178524760, -0.555001436341699410, +-0.555043028117370610, -0.555084618505434110, -0.555126207505786560, -0.555167795118323040, -0.555209381342940070, -0.555250966179533620, -0.555292549628000120, -0.555334131688234870, +-0.555375712360134280, -0.555417291643594440, -0.555458869538511760, -0.555500446044781440, -0.555542021162300110, -0.555583594890963760, -0.555625167230668680, -0.555666738181310400, +-0.555708307742785230, -0.555749875914989700, -0.555791442697818990, -0.555833008091169760, -0.555874572094938070, -0.555916134709020240, -0.555957695933311680, -0.555999255767708920, +-0.556040814212108050, -0.556082371266405470, -0.556123926930496610, -0.556165481204278000, -0.556207034087645600, -0.556248585580496060, -0.556290135682724560, -0.556331684394227870, +-0.556373231714901830, -0.556414777644643200, -0.556456322183347170, -0.556497865330910390, -0.556539407087229270, -0.556580947452199330, -0.556622486425716990, -0.556664024007678340, +-0.556705560197980120, -0.556747094996517530, -0.556788628403187320, -0.556830160417885470, -0.556871691040508600, -0.556913220270952140, -0.556954748109112610, -0.556996274554886210, +-0.557037799608169570, -0.557079323268858010, -0.557120845536848150, -0.557162366412036090, -0.557203885894318570, -0.557245403983591010, -0.557286920679749830, -0.557328435982691440, +-0.557369949892312260, -0.557411462408507810, -0.557452973531174840, -0.557494483260209670, -0.557535991595508040, -0.557577498536966360, -0.557619004084480950, -0.557660508237948330, +-0.557702010997264130, -0.557743512362324890, -0.557785012333026910, -0.557826510909266830, -0.557868008090939950, -0.557909503877943140, -0.557950998270172470, -0.557992491267524810, +-0.558033982869895470, -0.558075473077181190, -0.558116961889278280, -0.558158449306083270, -0.558199935327491790, -0.558241419953400490, -0.558282903183705990, -0.558324385018303840, +-0.558365865457090770, -0.558407344499962990, -0.558448822146817240, -0.558490298397549050, -0.558531773252055160, -0.558573246710231790, -0.558614718771975770, -0.558656189437182430, +-0.558697658705748720, -0.558739126577570850, -0.558780593052545570, -0.558822058130568400, -0.558863521811536090, -0.558904984095344950, -0.558946444981891720, -0.558987904471071940, +-0.559029362562782570, -0.559070819256920040, -0.559112274553380080, -0.559153728452059460, -0.559195180952854590, -0.559236632055662100, -0.559278081760377630, -0.559319530066897940, +-0.559360976975119550, -0.559402422484938990, -0.559443866596252000, -0.559485309308955350, -0.559526750622945430, -0.559568190538118900, -0.559609629054371730, -0.559651066171600320, +-0.559692501889701320, -0.559733936208571480, -0.559775369128106330, -0.559816800648202830, -0.559858230768757290, -0.559899659489666580, -0.559941086810826330, -0.559982512732133290, +-0.560023937253484430, -0.560065360374775390, -0.560106782095902810, -0.560148202416763440, -0.560189621337253810, -0.560231038857269770, -0.560272454976708190, -0.560313869695465480, +-0.560355283013438400, -0.560396694930522800, -0.560438105446615430, -0.560479514561612820, -0.560520922275411730, -0.560562328587908000, -0.560603733498998500, -0.560645137008579650, +-0.560686539116548310, -0.560727939822800230, -0.560769339127232260, -0.560810737029741380, -0.560852133530223340, -0.560893528628574890, -0.560934922324692660, -0.560976314618473420, +-0.561017705509813110, -0.561059094998608510, -0.561100483084756130, -0.561141869768152950, -0.561183255048694710, -0.561224638926278390, -0.561266021400800400, -0.561307402472157820, +-0.561348782140246190, -0.561390160404962810, -0.561431537266203870, -0.561472912723866570, -0.561514286777846540, -0.561555659428040870, -0.561597030674346300, -0.561638400516658920, +-0.561679768954875370, -0.561721135988892510, -0.561762501618607190, -0.561803865843915280, -0.561845228664713650, -0.561886590080898920, -0.561927950092368180, -0.561969308699017070, +-0.562010665900742780, -0.562052021697441840, -0.562093376089011110, -0.562134729075346670, -0.562176080656345390, -0.562217430831903900, -0.562258779601919170, -0.562300126966287170, +-0.562341472924904770, -0.562382817477669160, -0.562424160624476090, -0.562465502365222640, -0.562506842699805330, -0.562548181628121370, -0.562589519150066610, -0.562630855265538020, +-0.562672189974432360, -0.562713523276646480, -0.562754855172076460, -0.562796185660619400, -0.562837514742171810, -0.562878842416630780, -0.562920168683892270, -0.562961493543853390, +-0.563002816996410640, -0.563044139041461330, -0.563085459678901330, -0.563126778908627610, -0.563168096730537030, -0.563209413144526440, -0.563250728150492040, -0.563292041748330810, +-0.563333353937939930, -0.563374664719215160, -0.563415974092053800, -0.563457282056352480, -0.563498588612008300, -0.563539893758917330, -0.563581197496976550, -0.563622499826082920, +-0.563663800746133310, -0.563705100257023810, -0.563746398358651590, -0.563787695050913420, -0.563828990333706260, -0.563870284206926310, -0.563911576670470760, -0.563952867724236140, +-0.563994157368119750, -0.564035445602017570, -0.564076732425826900, -0.564118017839444600, -0.564159301842766970, -0.564200584435691100, -0.564241865618113740, -0.564283145389932180, +-0.564324423751042300, -0.564365700701341290, -0.564406976240726110, -0.564448250369093850, -0.564489523086340590, -0.564530794392363640, -0.564572064287059530, -0.564613332770325660, +-0.564654599842058120, -0.564695865502154120, -0.564737129750510490, -0.564778392587024340, -0.564819654011591730, -0.564860914024110090, -0.564902172624476620, -0.564943429812587270, +-0.564984685588339360, -0.565025939951629640, -0.565067192902355520, -0.565108444440413080, -0.565149694565699520, -0.565190943278111700, -0.565232190577546810, -0.565273436463901160, +-0.565314680937071930, -0.565355923996956000, -0.565397165643450660, -0.565438405876452000, -0.565479644695857320, -0.565520882101563480, -0.565562118093467790, -0.565603352671466550, +-0.565644585835456850, -0.565685817585335760, -0.565727047921000370, -0.565768276842347100, -0.565809504349273130, -0.565850730441675780, -0.565891955119451120, -0.565933178382496680, +-0.565974400230709220, -0.566015620663986250, -0.566056839682223760, -0.566098057285319150, -0.566139273473169500, -0.566180488245671910, -0.566221701602722780, -0.566262913544219430, +-0.566304124070058810, -0.566345333180138240, -0.566386540874353920, -0.566427747152603240, -0.566468952014783200, -0.566510155460791200, -0.566551357490523430, -0.566592558103877320, +-0.566633757300750050, -0.566674955081038160, -0.566716151444638830, -0.566757346391449040, -0.566798539921366310, -0.566839732034286840, -0.566880922730108150, -0.566922112008727000, +-0.566963299870041020, -0.567004486313946400, -0.567045671340340560, -0.567086854949120590, -0.567128037140183780, -0.567169217913426560, -0.567210397268746340, -0.567251575206040080, +-0.567292751725205210, -0.567333926826138150, -0.567375100508736190, -0.567416272772896970, -0.567457443618516580, -0.567498613045492650, -0.567539781053722160, -0.567580947643102630, +-0.567622112813530370, -0.567663276564902790, -0.567704438897116970, -0.567745599810070440, -0.567786759303659630, -0.567827917377781820, -0.567869074032334330, -0.567910229267214460, +-0.567951383082318630, -0.567992535477544360, -0.568033686452788730, -0.568074836007949280, -0.568115984142922300, -0.568157130857605440, -0.568198276151896110, -0.568239420025690720, +-0.568280562478886810, -0.568321703511381450, -0.568362843123072170, -0.568403981313855500, -0.568445118083628850, -0.568486253432289310, -0.568527387359734630, -0.568568519865861100, +-0.568609650950566260, -0.568650780613747190, -0.568691908855301630, -0.568733035675125900, -0.568774161073117620, -0.568815285049173890, -0.568856407603192340, -0.568897528735069380, +-0.568938648444702650, -0.568979766731989240, -0.569020883596826900, -0.569061999039111810, -0.569103113058741840, -0.569144225655614400, -0.569185336829626130, -0.569226446580674450, +-0.569267554908656550, -0.569308661813470280, -0.569349767295011970, -0.569390871353179120, -0.569431973987869270, -0.569473075198979720, -0.569514174986407110, -0.569555273350049180, +-0.569596370289802920, -0.569637465805566180, -0.569678559897235480, -0.569719652564708250, -0.569760743807882000, -0.569801833626654150, -0.569842922020921460, -0.569884008990581340, +-0.569925094535531640, -0.569966178655668900, -0.570007261350890640, -0.570048342621094160, -0.570089422466177220, -0.570130500886036450, -0.570171577880569380, -0.570212653449673310, +-0.570253727593246110, -0.570294800311184070, -0.570335871603385170, -0.570376941469746490, -0.570418009910165890, -0.570459076924539790, -0.570500142512766150, -0.570541206674742060, +-0.570582269410365270, -0.570623330719532530, -0.570664390602141470, -0.570705449058089730, -0.570746506087274060, -0.570787561689592100, -0.570828615864941270, -0.570869668613219190, +-0.570910719934322630, -0.570951769828149210, -0.570992818294596470, -0.571033865333562040, -0.571074910944942450, -0.571115955128635670, -0.571156997884539000, -0.571198039212550190, +-0.571239079112566000, -0.571280117584484050, -0.571321154628201770, -0.571362190243617010, -0.571403224430626410, -0.571444257189127720, -0.571485288519018360, -0.571526318420196300, +-0.571567346892557950, -0.571608373936001170, -0.571649399550423930, -0.571690423735722760, -0.571731446491795640, -0.571772467818539850, -0.571813487715853160, -0.571854506183632540, +-0.571895523221775500, -0.571936538830179810, -0.571977553008742980, -0.572018565757361990, -0.572059577075934580, -0.572100586964358280, -0.572141595422530850, -0.572182602450349020, +-0.572223608047710660, -0.572264612214513410, -0.572305614950654910, -0.572346616256032000, -0.572387616130542560, -0.572428614574084450, -0.572469611586554410, -0.572510607167850290, +-0.572551601317869750, -0.572592594036510530, -0.572633585323669480, -0.572674575179244470, -0.572715563603133030, -0.572756550595233000, -0.572797536155441380, -0.572838520283655780, +-0.572879502979773860, -0.572920484243693570, -0.572961464075311790, -0.573002442474526250, -0.573043419441234600, -0.573084394975334810, -0.573125369076723730, -0.573166341745299120, +-0.573207312980959060, -0.573248282783600400, -0.573289251153120900, -0.573330218089418420, -0.573371183592390700, -0.573412147661934600, -0.573453110297948210, -0.573494071500329050, +-0.573535031268975090, -0.573575989603783090, -0.573616946504651230, -0.573657901971476920, -0.573698856004158260, -0.573739808602591990, -0.573780759766676310, -0.573821709496308730, +-0.573862657791387230, -0.573903604651808670, -0.573944550077471140, -0.573985494068272260, -0.574026436624110010, -0.574067377744881260, -0.574108317430484070, -0.574149255680816540, +-0.574190192495775410, -0.574231127875258870, -0.574272061819164460, -0.574312994327390250, -0.574353925399833210, -0.574394855036391320, -0.574435783236962320, -0.574476710001444290, +-0.574517635329733990, -0.574558559221729710, -0.574599481677328990, -0.574640402696429910, -0.574681322278929540, -0.574722240424725750, -0.574763157133716400, -0.574804072405799560, +-0.574844986240872210, -0.574885898638832330, -0.574926809599578090, -0.574967719123006480, -0.575008627209015470, -0.575049533857503010, -0.575090439068366990, -0.575131342841504580, +-0.575172245176813760, -0.575213146074192380, -0.575254045533538430, -0.575294943554749080, -0.575335840137722320, -0.575376735282356000, -0.575417628988548200, -0.575458521256195900, +-0.575499412085197390, -0.575540301475450320, -0.575581189426852880, -0.575622075939302040, -0.575662961012695980, -0.575703844646933030, -0.575744726841910030, -0.575785607597525170, +-0.575826486913676330, -0.575867364790261570, -0.575908241227178100, -0.575949116224323990, -0.575989989781597100, -0.576030861898895630, -0.576071732576116660, -0.576112601813158380, +-0.576153469609918530, -0.576194335966295320, -0.576235200882186050, -0.576276064357488680, -0.576316926392101190, -0.576357786985921660, -0.576398646138847390, -0.576439503850776470, +-0.576480360121607190, -0.576521214951236650, -0.576562068339563030, -0.576602920286484190, -0.576643770791898550, -0.576684619855702960, -0.576725467477795960, -0.576766313658075180, +-0.576807158396439150, -0.576848001692784720, -0.576888843547010310, -0.576929683959013780, -0.576970522928693440, -0.577011360455946360, -0.577052196540670970, -0.577093031182765000, +-0.577133864382126880, -0.577174696138653800, -0.577215526452243830, -0.577256355322795180, -0.577297182750205920, -0.577338008734373350, -0.577378833275195790, -0.577419656372571420, +-0.577460478026397660, -0.577501298236572590, -0.577542117002994400, -0.577582934325561180, -0.577623750204170340, -0.577664564638720070, -0.577705377629108450, -0.577746189175233680, +-0.577786999276993170, -0.577827807934285010, -0.577868615147007490, -0.577909420915058700, -0.577950225238336060, -0.577991028116737750, -0.578031829550161970, -0.578072629538506910, +-0.578113428081669990, -0.578154225179549400, -0.578195020832043660, -0.578235815039050080, -0.578276607800466860, -0.578317399116192180, -0.578358188986124340, -0.578398977410160660, +-0.578439764388199550, -0.578480549920138980, -0.578521334005877460, -0.578562116645312210, -0.578602897838341730, -0.578643677584863900, -0.578684455884777350, -0.578725232737979270, +-0.578766008144368070, -0.578806782103841840, -0.578847554616299000, -0.578888325681636950, -0.578929095299754120, -0.578969863470548910, -0.579010630193918630, -0.579051395469761810, +-0.579092159297976530, -0.579132921678461090, -0.579173682611113130, -0.579214442095830840, -0.579255200132512530, -0.579295956721056600, -0.579336711861360380, -0.579377465553322370, +-0.579418217796840660, -0.579458968591813780, -0.579499717938139150, -0.579540465835715280, -0.579581212284440150, -0.579621957284212400, -0.579662700834929320, -0.579703442936489570, +-0.579744183588791210, -0.579784922791732770, -0.579825660545211670, -0.579866396849126330, -0.579907131703375380, -0.579947865107856340, -0.579988597062467530, -0.580029327567107230, +-0.580070056621673990, -0.580110784226065320, -0.580151510380179650, -0.580192235083915150, -0.580232958337170480, -0.580273680139843040, -0.580314400491831360, -0.580355119393033750, +-0.580395836843348610, -0.580436552842673590, -0.580477267390907210, -0.580517980487947560, -0.580558692133693380, -0.580599402328042190, -0.580640111070892420, -0.580680818362142690, +-0.580721524201690650, -0.580762228589434710, -0.580802931525273180, -0.580843633009104800, -0.580884333040826870, -0.580925031620338150, -0.580965728747536820, -0.581006424422321640, +-0.581047118644589910, -0.581087811414240480, -0.581128502731171450, -0.581169192595281550, -0.581209881006468310, -0.581250567964630370, -0.581291253469665930, -0.581331937521473830, +-0.581372620119951500, -0.581413301264997570, -0.581453980956510800, -0.581494659194388700, -0.581535335978530020, -0.581576011308832850, -0.581616685185196160, -0.581657357607517360, +-0.581698028575695080, -0.581738698089627860, -0.581779366149214110, -0.581820032754351680, -0.581860697904939220, -0.581901361600874910, -0.581942023842057620, -0.581982684628384870, +-0.582023343959755410, -0.582064001836067550, -0.582104658257220130, -0.582145313223110690, -0.582185966733637870, -0.582226618788700630, -0.582267269388196400, -0.582307918532024020, +-0.582348566220081910, -0.582389212452268600, -0.582429857228482060, -0.582470500548620710, -0.582511142412583280, -0.582551782820268200, -0.582592421771573440, -0.582633059266397520, +-0.582673695304638970, -0.582714329886196540, -0.582754963010967960, -0.582795594678852000, -0.582836224889746960, -0.582876853643551800, -0.582917480940164160, -0.582958106779482790, +-0.582998731161406100, -0.583039354085832960, -0.583079975552661110, -0.583120595561789300, -0.583161214113116390, -0.583201831206540120, -0.583242446841959140, -0.583283061019272190, +-0.583323673738377790, -0.583364284999174030, -0.583404894801559440, -0.583445503145432640, -0.583486110030692400, -0.583526715457236560, -0.583567319424963980, -0.583607921933773090, +-0.583648522983562620, -0.583689122574230670, -0.583729720705675750, -0.583770317377796610, -0.583810912590492110, -0.583851506343659900, -0.583892098637198930, -0.583932689471007960, +-0.583973278844985070, -0.584013866759028890, -0.584054453213038060, -0.584095038206911440, -0.584135621740547010, -0.584176203813843390, -0.584216784426699220, -0.584257363579013590, +-0.584297941270684130, -0.584338517501609700, -0.584379092271689160, -0.584419665580821150, -0.584460237428903630, -0.584500807815835470, -0.584541376741515410, -0.584581944205842200, +-0.584622510208713700, -0.584663074750028990, -0.584703637829687040, -0.584744199447585490, -0.584784759603623530, -0.584825318297699680, -0.584865875529712810, -0.584906431299560990, +-0.584946985607142980, -0.584987538452357620, -0.585028089835103680, -0.585068639755279230, -0.585109188212783130, -0.585149735207514120, -0.585190280739371070, -0.585230824808252060, +-0.585271367414055830, -0.585311908556681250, -0.585352448236027280, -0.585392986451991890, -0.585433523204473950, -0.585474058493372200, -0.585514592318585710, -0.585555124680012360, +-0.585595655577551110, -0.585636185011101150, -0.585676712980560450, -0.585717239485827880, -0.585757764526802170, -0.585798288103382530, -0.585838810215466690, -0.585879330862953960, +-0.585919850045742760, -0.585960367763732390, -0.586000884016820710, -0.586041398804906800, -0.586081912127889400, -0.586122423985667610, -0.586162934378139380, -0.586203443305203910, +-0.586243950766759720, -0.586284456762706020, -0.586324961292940870, -0.586365464357363250, -0.586405965955872350, -0.586446466088366150, -0.586486964754743820, -0.586527461954904130, +-0.586567957688746030, -0.586608451956167730, -0.586648944757068300, -0.586689436091346610, -0.586729925958901610, -0.586770414359631400, -0.586810901293435160, -0.586851386760211650, +-0.586891870759860160, -0.586932353292278440, -0.586972834357366020, -0.587013313955021430, -0.587053792085143860, -0.587094268747631600, -0.587134743942383520, -0.587175217669299030, +-0.587215689928276110, -0.587256160719213940, -0.587296630042011380, -0.587337097896567630, -0.587377564282780760, -0.587418029200549970, -0.587458492649774120, -0.587498954630352400, +-0.587539415142182890, -0.587579874185164890, -0.587620331759197260, -0.587660787864179080, -0.587701242500008550, -0.587741695666584960, -0.587782147363807070, -0.587822597591574290, +-0.587863046349784590, -0.587903493638337270, -0.587943939457131530, -0.587984383806065660, -0.588024826685038860, -0.588065268093949880, -0.588105708032698130, -0.588146146501181800, +-0.588186583499300090, -0.588227019026951850, -0.588267453084036500, -0.588307885670452110, -0.588348316786098110, -0.588388746430873240, -0.588429174604676810, -0.588469601307407110, +-0.588510026538963450, -0.588550450299244690, -0.588590872588150240, -0.588631293405578180, -0.588671712751427930, -0.588712130625598350, -0.588752547027988850, -0.588792961958497510, +-0.588833375417023850, -0.588873787403467190, -0.588914197917725590, -0.588954606959698480, -0.588995014529284930, -0.589035420626384140, -0.589075825250894520, -0.589116228402715270, +-0.589156630081745460, -0.589197030287884500, -0.589237429021030490, -0.589277826281083050, -0.589318222067940930, -0.589358616381503660, -0.589399009221669430, -0.589439400588337770, +-0.589479790481407530, -0.589520178900778240, -0.589560565846348080, -0.589600951318016490, -0.589641335315682970, -0.589681717839245720, -0.589722098888604160, -0.589762478463657370, +-0.589802856564304760, -0.589843233190444630, -0.589883608341976400, -0.589923982018799140, -0.589964354220812280, -0.590004724947914230, -0.590045094200004280, -0.590085461976981640, +-0.590125828278745710, -0.590166193105194910, -0.590206556456228550, -0.590246918331745810, -0.590287278731646210, -0.590327637655827960, -0.590367995104190690, -0.590408351076633700, +-0.590448705573055510, -0.590489058593355540, -0.590529410137432990, -0.590569760205187260, -0.590610108796516650, -0.590650455911320930, -0.590690801549499040, -0.590731145710950420, +-0.590771488395573700, -0.590811829603268170, -0.590852169333933030, -0.590892507587467920, -0.590932844363771140, -0.590973179662742210, -0.591013513484280440, -0.591053845828285130, +-0.591094176694654920, -0.591134506083289210, -0.591174833994087320, -0.591215160426948550, -0.591255485381771640, -0.591295808858456010, -0.591336130856901180, -0.591376451377005790, +-0.591416770418669140, -0.591457087981790530, -0.591497404066269720, -0.591537718672004890, -0.591578031798895900, -0.591618343446841720, -0.591658653615741990, -0.591698962305495460, +-0.591739269516001310, -0.591779575247159180, -0.591819879498868380, -0.591860182271027440, -0.591900483563536190, -0.591940783376293630, -0.591981081709199500, -0.592021378562152420, +-0.592061673935051710, -0.592101967827797340, -0.592142260240287600, -0.592182551172422130, -0.592222840624100360, -0.592263128595221900, -0.592303415085685180, -0.592343700095390060, +-0.592383983624235500, -0.592424265672121480, -0.592464546238946400, -0.592504825324609910, -0.592545102929011410, -0.592585379052050440, -0.592625653693625740, -0.592665926853636950, +-0.592706198531983250, -0.592746468728564400, -0.592786737443279140, -0.592827004676026890, -0.592867270426707500, -0.592907534695219730, -0.592947797481462980, -0.592988058785336780, +-0.593028318606740770, -0.593068576945573690, -0.593108833801735070, -0.593149089175124430, -0.593189343065641310, -0.593229595473184550, -0.593269846397653900, -0.593310095838948450, +-0.593350343796968270, -0.593390590271611780, -0.593430835262778840, -0.593471078770368870, -0.593511320794281480, -0.593551561334415450, -0.593591800390670610, -0.593632037962946500, +-0.593672274051141980, -0.593712508655156790, -0.593752741774890350, -0.593792973410242400, -0.593833203561111580, -0.593873432227397860, -0.593913659409000540, -0.593953885105819370, +-0.593994109317753200, -0.594034332044701690, -0.594074553286564330, -0.594114773043241010, -0.594154991314630450, -0.594195208100632310, -0.594235423401146210, -0.594275637216071910, +-0.594315849545308140, -0.594356060388754660, -0.594396269746311100, -0.594436477617877320, -0.594476684003351850, -0.594516888902634770, -0.594557092315625700, -0.594597294242223630, +-0.594637494682328400, -0.594677693635839330, -0.594717891102656380, -0.594758087082678410, -0.594798281575805170, -0.594838474581936170, -0.594878666100971510, -0.594918856132809700, +-0.594959044677350720, -0.594999231734494200, -0.595039417304140010, -0.595079601386186760, -0.595119783980534670, -0.595159965087083020, -0.595200144705731900, -0.595240322836379950, +-0.595280499478927250, -0.595320674633273650, -0.595360848299318010, -0.595401020476960310, -0.595441191166099950, -0.595481360366637010, -0.595521528078470360, -0.595561694301499860, +-0.595601859035625130, -0.595642022280746140, -0.595682184036761650, -0.595722344303571740, -0.595762503081076030, -0.595802660369174290, -0.595842816167765690, -0.595882970476749980, +-0.595923123296026810, -0.595963274625496250, -0.596003424465057160, -0.596043572814609400, -0.596083719674053160, -0.596123865043287180, -0.596164008922211660, -0.596204151310726020, +-0.596244292208730430, -0.596284431616123660, -0.596324569532805880, -0.596364705958676740, -0.596404840893636100, -0.596444974337583030, -0.596485106290417510, -0.596525236752039170, +-0.596565365722348200, -0.596605493201243340, -0.596645619188624910, -0.596685743684392310, -0.596725866688445740, -0.596765988200684160, -0.596806108221007550, -0.596846226749315760, +-0.596886343785508640, -0.596926459329485400, -0.596966573381146000, -0.597006685940390520, -0.597046797007117940, -0.597086906581228430, -0.597127014662621640, -0.597167121251197640, +-0.597207226346855410, -0.597247329949495250, -0.597287432059016690, -0.597327532675319910, -0.597367631798303990, -0.597407729427868910, -0.597447825563914630, -0.597487920206341010, +-0.597528013355047350, -0.597568105009933510, -0.597608195170899580, -0.597648283837845410, -0.597688371010670180, -0.597728456689273990, -0.597768540873557130, -0.597808623563418460, +-0.597848704758758290, -0.597888784459476350, -0.597928862665472740, -0.597968939376646750, -0.598009014592898240, -0.598049088314127290, -0.598089160540233980, -0.598129231271117390, +-0.598169300506677710, -0.598209368246814810, -0.598249434491428870, -0.598289499240418960, -0.598329562493685300, -0.598369624251127720, -0.598409684512646530, -0.598449743278140600, +-0.598489800547510440, -0.598529856320656140, -0.598569910597476770, -0.598609963377872640, -0.598650014661743610, -0.598690064448989980, -0.598730112739510710, -0.598770159533206230, +-0.598810204829976270, -0.598850248629721250, -0.598890290932340250, -0.598930331737733470, -0.598970371045800860, -0.599010408856442740, -0.599050445169558190, -0.599090479985047500, +-0.599130513302810640, -0.599170545122747920, -0.599210575444758420, -0.599250604268742440, -0.599290631594600390, -0.599330657422231350, -0.599370681751535740, -0.599410704582413300, +-0.599450725914764560, -0.599490745748488600, -0.599530764083485820, -0.599570780919656100, -0.599610796256899840, -0.599650810095116120, -0.599690822434205460, -0.599730833274067730, +-0.599770842614603230, -0.599810850455711250, -0.599850856797292220, -0.599890861639246100, -0.599930864981473080, -0.599970866823872570, -0.600010867166344890, -0.600050866008789980, +-0.600090863351108390, -0.600130859193199200, -0.600170853534962910, -0.600210846376299730, -0.600250837717109190, -0.600290827557291570, -0.600330815896746860, -0.600370802735375350, +-0.600410788073076570, -0.600450771909750820, -0.600490754245298190, -0.600530735079618960, -0.600570714412612560, -0.600610692244179400, -0.600650668574219450, -0.600690643402633230, +-0.600730616729320040, -0.600770588554180310, -0.600810558877114100, -0.600850527698021940, -0.600890495016802920, -0.600930460833357770, -0.600970425147586810, -0.601010387959389440, +-0.601050349268666180, -0.601090309075316910, -0.601130267379242240, -0.601170224180341610, -0.601210179478515410, -0.601250133273663720, -0.601290085565687080, -0.601330036354484900, +-0.601369985639957580, -0.601409933422005330, -0.601449879700528540, -0.601489824475426760, -0.601529767746600390, -0.601569709513949610, -0.601609649777374970, -0.601649588536775750, +-0.601689525792052590, -0.601729461543106030, -0.601769395789835460, -0.601809328532141310, -0.601849259769923870, -0.601889189503083680, -0.601929117731520140, -0.601969044455133770, +-0.602008969673824890, -0.602048893387493790, -0.602088815596040220, -0.602128736299364590, -0.602168655497367090, -0.602208573189948250, -0.602248489377007700, -0.602288404058445970, +-0.602328317234163140, -0.602368228904059940, -0.602408139068035810, -0.602448047725991250, -0.602487954877826690, -0.602527860523442540, -0.602567764662738310, -0.602607667295614770, +-0.602647568421972420, -0.602687468041710690, -0.602727366154730440, -0.602767262760931620, -0.602807157860215100, -0.602847051452480300, -0.602886943537627840, -0.602926834115558140, +-0.602966723186171620, -0.603006610749367900, -0.603046496805047740, -0.603086381353111210, -0.603126264393459180, -0.603166145925991160, -0.603206025950607790, -0.603245904467209270, +-0.603285781475696340, -0.603325656975968630, -0.603365530967926780, -0.603405403451471530, -0.603445274426502310, -0.603485143892919960, -0.603525011850624680, -0.603564878299517330, +-0.603604743239497420, -0.603644606670465600, -0.603684468592322280, -0.603724329004968090, -0.603764187908302770, -0.603804045302226980, -0.603843901186641110, -0.603883755561445800, +-0.603923608426540800, -0.603963459781826750, -0.604003309627203940, -0.604043157962573350, -0.604083004787834500, -0.604122850102888130, -0.604162693907635000, -0.604202536201974730, +-0.604242376985808070, -0.604282216259035550, -0.604322054021557810, -0.604361890273274690, -0.604401725014086730, -0.604441558243894450, -0.604481389962598700, -0.604521220170099130, +-0.604561048866296470, -0.604600876051091140, -0.604640701724384000, -0.604680525886074790, -0.604720348536064270, -0.604760169674252830, -0.604799989300541350, -0.604839807414829570, +-0.604879624017018220, -0.604919439107008180, -0.604959252684699190, -0.604999064749992100, -0.605038875302787220, -0.605078684342985620, -0.605118491870486940, -0.605158297885192040, +-0.605198102387001450, -0.605237905375815900, -0.605277706851535150, -0.605317506814060270, -0.605357305263291570, -0.605397102199129900, -0.605436897621475230, -0.605476691530228210, +-0.605516483925289560, -0.605556274806560050, -0.605596064173939410, -0.605635852027328610, -0.605675638366628300, -0.605715423191739100, -0.605755206502561090, -0.605794988298995030, +-0.605834768580941870, -0.605874547348301480, -0.605914324600974610, -0.605954100338861990, -0.605993874561864490, -0.606033647269881960, -0.606073418462815260, -0.606113188140565030, +-0.606152956303032230, -0.606192722950116610, -0.606232488081719260, -0.606272251697740680, -0.606312013798081750, -0.606351774382642540, -0.606391533451323790, -0.606431291004026260, +-0.606471047040650800, -0.606510801561097380, -0.606550554565267070, -0.606590306053060630, -0.606630056024378140, -0.606669804479120440, -0.606709551417188190, -0.606749296838482550, +-0.606789040742903190, -0.606828783130351270, -0.606868524000727440, -0.606908263353932550, -0.606948001189866690, -0.606987737508430940, -0.607027472309525700, -0.607067205593052270, +-0.607106937358910300, -0.607146667607001090, -0.607186396337225260, -0.607226123549483690, -0.607265849243676550, -0.607305573419704700, -0.607345296077469340, -0.607385017216870330, +-0.607424736837808840, -0.607464454940185420, -0.607504171523901240, -0.607543886588856390, -0.607583600134951720, -0.607623312162088090, -0.607663022670166470, -0.607702731659086950, +-0.607742439128750700, -0.607782145079058260, -0.607821849509910810, -0.607861552421208430, -0.607901253812852090, -0.607940953684742770, -0.607980652036781310, -0.608020348868867910, +-0.608060044180903540, -0.608099737972789160, -0.608139430244425740, -0.608179120995713470, -0.608218810226553330, -0.608258497936846500, -0.608298184126493060, -0.608337868795394200, +-0.608377551943450670, -0.608417233570563650, -0.608456913676633130, -0.608496592261560390, -0.608536269325246070, -0.608575944867591480, -0.608615618888496690, -0.608655291387862900, +-0.608694962365590840, -0.608734631821581720, -0.608774299755735600, -0.608813966167953800, -0.608853631058137170, -0.608893294426186670, -0.608932956272002610, -0.608972616595486180, +-0.609012275396538570, -0.609051932675059970, -0.609091588430951460, -0.609131242664114000, -0.609170895374448800, -0.609210546561856030, -0.609250196226236880, -0.609289844367492230, +-0.609329490985523250, -0.609369136080230240, -0.609408779651514410, -0.609448421699276710, -0.609488062223418230, -0.609527701223839150, -0.609567338700441000, -0.609606974653124410, +-0.609646609081790690, -0.609686241986340140, -0.609725873366673940, -0.609765503222693520, -0.609805131554298940, -0.609844758361391510, -0.609884383643872210, -0.609924007401642210, +-0.609963629634601930, -0.610003250342652570, -0.610042869525695090, -0.610082487183630780, -0.610122103316359850, -0.610161717923783710, -0.610201331005803320, -0.610240942562319870, +-0.610280552593233770, -0.610320161098446220, -0.610359768077858410, -0.610399373531371410, -0.610438977458885650, -0.610478579860302410, -0.610518180735523110, -0.610557780084448050, +-0.610597377906978430, -0.610636974203015440, -0.610676568972460370, -0.610716162215213520, -0.610755753931176320, -0.610795344120249610, -0.610834932782335030, -0.610874519917332660, +-0.610914105525144020, -0.610953689605670090, -0.610993272158812380, -0.611032853184471090, -0.611072432682547630, -0.611112010652943070, -0.611151587095558950, -0.611191162010295440, +-0.611230735397053970, -0.611270307255735720, -0.611309877586242110, -0.611349446388473330, -0.611389013662331000, -0.611428579407716550, -0.611468143624530170, -0.611507706312673480, +-0.611547267472047570, -0.611586827102553850, -0.611626385204092630, -0.611665941776565520, -0.611705496819873520, -0.611745050333918130, -0.611784602318599770, -0.611824152773819960, +-0.611863701699479680, -0.611903249095480550, -0.611942794961722990, -0.611982339298108300, -0.612021882104537900, -0.612061423380913070, -0.612100963127134360, -0.612140501343103270, +-0.612180038028721230, -0.612219573183888750, -0.612259106808507370, -0.612298638902478150, -0.612338169465702740, -0.612377698498081550, -0.612417225999516090, -0.612456751969907560, +-0.612496276409157600, -0.612535799317166510, -0.612575320693835910, -0.612614840539067010, -0.612654358852761430, -0.612693875634819580, -0.612733390885143000, -0.612772904603632980, +-0.612812416790191050, -0.612851927444717730, -0.612891436567114530, -0.612930944157283110, -0.612970450215124090, -0.613009954740538760, -0.613049457733428670, -0.613088959193695220, +-0.613128459121239140, -0.613167957515961760, -0.613207454377764580, -0.613246949706549140, -0.613286443502215840, -0.613325935764666540, -0.613365426493802430, -0.613404915689525040, +-0.613444403351735000, -0.613483889480333940, -0.613523374075223280, -0.613562857136304430, -0.613602338663478130, -0.613641818656645910, -0.613681297115709180, -0.613720774040569570, +-0.613760249431127720, -0.613799723287285160, -0.613839195608943730, -0.613878666396003860, -0.613918135648367390, -0.613957603365935630, -0.613997069548610110, -0.614036534196291670, +-0.614075997308881850, -0.614115458886281940, -0.614154918928393910, -0.614194377435118070, -0.614233834406356370, -0.614273289842010020, -0.614312743741980860, -0.614352196106169530, +-0.614391646934477680, -0.614431096226806690, -0.614470543983058230, -0.614509990203133130, -0.614549434886933140, -0.614588878034359800, -0.614628319645313950, -0.614667759719697340, +-0.614707198257411270, -0.614746635258357600, -0.614786070722436960, -0.614825504649551100, -0.614864937039601540, -0.614904367892490030, -0.614943797208117200, -0.614983224986384910, +-0.615022651227194460, -0.615062075930447820, -0.615101499096045610, -0.615140920723889710, -0.615180340813881400, -0.615219759365922660, -0.615259176379914230, -0.615298591855757750, +-0.615338005793355180, -0.615377418192607270, -0.615416829053415770, -0.615456238375682200, -0.615495646159308410, -0.615535052404195150, -0.615574457110244280, -0.615613860277357210, +-0.615653261905435900, -0.615692661994381110, -0.615732060544094570, -0.615771457554477930, -0.615810853025433040, -0.615850246956860640, -0.615889639348662590, -0.615929030200740410, +-0.615968419512996080, -0.616007807285330330, -0.616047193517645030, -0.616086578209842140, -0.616125961361822410, -0.616165342973487800, -0.616204723044739830, -0.616244101575480370, +-0.616283478565610390, -0.616322854015031620, -0.616362227923645810, -0.616401600291354710, -0.616440971118059290, -0.616480340403661400, -0.616519708148062670, -0.616559074351165080, +-0.616598439012869480, -0.616637802133077730, -0.616677163711691460, -0.616716523748612630, -0.616755882243742120, -0.616795239196981980, -0.616834594608233640, -0.616873948477399180, +-0.616913300804379560, -0.616952651589076750, -0.616992000831392500, -0.617031348531227990, -0.617070694688485080, -0.617110039303065520, -0.617149382374871050, -0.617188723903802970, +-0.617228063889762920, -0.617267402332652760, -0.617306739232374450, -0.617346074588828950, -0.617385408401918250, -0.617424740671544070, -0.617464071397608280, -0.617503400580012070, +-0.617542728218657300, -0.617582054313445820, -0.617621378864279480, -0.617660701871059260, -0.617700023333687340, -0.617739343252065810, -0.617778661626095520, -0.617817978455678540, +-0.617857293740716630, -0.617896607481111750, -0.617935919676765090, -0.617975230327578620, -0.618014539433454080, -0.618053846994293550, -0.618093153009998010, -0.618132457480469630, +-0.618171760405610170, -0.618211061785321590, -0.618250361619504970, -0.618289659908062510, -0.618328956650895820, -0.618368251847907110, -0.618407545498997460, -0.618446837604068930, +-0.618486128163023620, -0.618525417175762700, -0.618564704642188270, -0.618603990562202060, -0.618643274935706140, -0.618682557762601730, -0.618721839042790990, -0.618761118776175570, +-0.618800396962657650, -0.618839673602138540, -0.618878948694520090, -0.618918222239704390, -0.618957494237593500, -0.618996764688088400, -0.619036033591091490, -0.619075300946504430, +-0.619114566754229490, -0.619153831014167770, -0.619193093726221560, -0.619232354890292490, -0.619271614506282990, -0.619310872574094120, -0.619350129093627970, -0.619389384064786830, +-0.619428637487472010, -0.619467889361585480, -0.619507139687029310, -0.619546388463705580, -0.619585635691515590, -0.619624881370361420, -0.619664125500145160, -0.619703368080768870, +-0.619742609112133750, -0.619781848594142200, -0.619821086526695990, -0.619860322909697390, -0.619899557743047720, -0.619938791026649060, -0.619978022760403480, -0.620017252944213170, +-0.620056481577979430, -0.620095708661604460, -0.620134934194990550, -0.620174158178038890, -0.620213380610651900, -0.620252601492731540, -0.620291820824179880, -0.620331038604898470, +-0.620370254834789360, -0.620409469513754640, -0.620448682641696610, -0.620487894218516470, -0.620527104244116610, -0.620566312718399020, -0.620605519641265980, -0.620644725012618800, +-0.620683928832359790, -0.620723131100391010, -0.620762331816614670, -0.620801530980932270, -0.620840728593245910, -0.620879924653458200, -0.620919119161470250, -0.620958312117184440, +-0.620997503520502980, -0.621036693371328050, -0.621075881669561070, -0.621115068415104330, -0.621154253607860030, -0.621193437247730350, -0.621232619334616710, -0.621271799868421630, +-0.621310978849046960, -0.621350156276395230, -0.621389332150367730, -0.621428506470866890, -0.621467679237794780, -0.621506850451053920, -0.621546020110545490, -0.621585188216172040, +-0.621624354767835620, -0.621663519765438650, -0.621702683208882560, -0.621741845098069730, -0.621781005432902600, -0.621820164213282680, -0.621859321439112270, -0.621898477110293670, +-0.621937631226729180, -0.621976783788320220, -0.622015934794969310, -0.622055084246578630, -0.622094232143050490, -0.622133378484286510, -0.622172523270189020, -0.622211666500660290, +-0.622250808175602630, -0.622289948294917680, -0.622329086858507850, -0.622368223866275330, -0.622407359318122630, -0.622446493213951070, -0.622485625553663380, -0.622524756337161980, +-0.622563885564348270, -0.622603013235124900, -0.622642139349393940, -0.622681263907058020, -0.622720386908018560, -0.622759508352178190, -0.622798628239438990, -0.622837746569703590, +-0.622876863342873400, -0.622915978558851170, -0.622955092217538970, -0.622994204318839340, -0.623033314862653900, -0.623072423848885170, -0.623111531277435350, -0.623150637148207060, +-0.623189741461101840, -0.623228844216022320, -0.623267945412870890, -0.623307045051549440, -0.623346143131960240, -0.623385239654005720, -0.623424334617588390, -0.623463428022610010, +-0.623502519868972980, -0.623541610156579610, -0.623580698885332630, -0.623619786055133570, -0.623658871665884960, -0.623697955717489210, -0.623737038209848940, -0.623776119142865680, +-0.623815198516442180, -0.623854276330480630, -0.623893352584883760, -0.623932427279553230, -0.623971500414391530, -0.624010571989301540, -0.624049642004184670, -0.624088710458943760, +-0.624127777353481020, -0.624166842687699170, -0.624205906461499980, -0.624244968674785850, -0.624284029327459410, -0.624323088419423300, -0.624362145950579040, -0.624401201920829370, +-0.624440256330076720, -0.624479309178223810, -0.624518360465172280, -0.624557410190824890, -0.624596458355083930, -0.624635504957852140, -0.624674549999031270, -0.624713593478524070, +-0.624752635396232820, -0.624791675752060400, -0.624830714545908440, -0.624869751777679560, -0.624908787447276740, -0.624947821554601600, -0.624986854099557010, -0.625025885082045150, +-0.625064914501968990, -0.625103942359230170, -0.625142968653731420, -0.625181993385375390, -0.625221016554064590, -0.625260038159700990, -0.625299058202187340, -0.625338076681425940, +-0.625377093597319740, -0.625416108949770400, -0.625455122738680870, -0.625494134963953560, -0.625533145625491120, -0.625572154723195610, -0.625611162256969670, -0.625650168226716150, +-0.625689172632336810, -0.625728175473734600, -0.625767176750811950, -0.625806176463471700, -0.625845174611615710, -0.625884171195146720, -0.625923166213967370, -0.625962159667980410, +-0.626001151557087690, -0.626040141881192060, -0.626079130640196160, -0.626118117834002730, -0.626157103462513740, -0.626196087525631830, -0.626235070023259840, -0.626274050955300420, +-0.626313030321655640, -0.626352008122228240, -0.626390984356921090, -0.626429959025636250, -0.626468932128276480, -0.626507903664744290, -0.626546873634942770, -0.626585842038773650, +-0.626624808876140030, -0.626663774146944300, -0.626702737851089540, -0.626741699988477620, -0.626780660559011380, -0.626819619562593470, -0.626858576999126950, -0.626897532868513570, +-0.626936487170656310, -0.626975439905457900, -0.627014391072821310, -0.627053340672648290, -0.627092288704841900, -0.627131235169304910, -0.627170180065940050, -0.627209123394649510, +-0.627248065155336040, -0.627287005347902830, -0.627325943972251830, -0.627364881028285800, -0.627403816515907710, -0.627442750435020400, -0.627481682785525740, -0.627520613567327020, +-0.627559542780326660, -0.627598470424427850, -0.627637396499532540, -0.627676321005543710, -0.627715243942364110, -0.627754165309896690, -0.627793085108043550, -0.627832003336707740, +-0.627870919995791810, -0.627909835085199040, -0.627948748604831300, -0.627987660554591650, -0.628026570934383190, -0.628065479744107980, -0.628104386983669110, -0.628143292652969200, +-0.628182196751911450, -0.628221099280397820, -0.628260000238331510, -0.628298899625615140, -0.628337797442151900, -0.628376693687843880, -0.628415588362594040, -0.628454481466305230, +-0.628493372998880530, -0.628532262960222130, -0.628571151350233110, -0.628610038168816110, -0.628648923415874420, -0.628687807091310000, -0.628726689195026170, -0.628765569726925880, +-0.628804448686911320, -0.628843326074885690, -0.628882201890751720, -0.628921076134412620, -0.628959948805770440, -0.628998819904728390, -0.629037689431189320, -0.629076557385056410, +-0.629115423766231750, -0.629154288574618410, -0.629193151810119480, -0.629232013472637910, -0.629270873562076120, -0.629309732078336960, -0.629348589021323620, -0.629387444390939080, +-0.629426298187085620, -0.629465150409666330, -0.629504001058584620, -0.629542850133742450, -0.629581697635043240, -0.629620543562389720, -0.629659387915685320, -0.629698230694832000, +-0.629737071899733050, -0.629775911530291550, -0.629814749586410480, -0.629853586067992350, -0.629892420974940140, -0.629931254307156910, -0.629970086064545850, -0.630008916247009280, +-0.630047744854450480, -0.630086571886772200, -0.630125397343877850, -0.630164221225669730, -0.630203043532051030, -0.630241864262924720, -0.630280683418194100, -0.630319500997761350, +-0.630358317001530000, -0.630397131429403120, -0.630435944281283020, -0.630474755557073110, -0.630513565256676230, -0.630552373379995920, -0.630591179926934250, -0.630629984897394640, +-0.630668788291280150, -0.630707590108493870, -0.630746390348938420, -0.630785189012516900, -0.630823986099132480, -0.630862781608688360, -0.630901575541087060, -0.630940367896231650, +-0.630979158674025430, -0.631017947874371710, -0.631056735497172670, -0.631095521542331840, -0.631134306009752510, -0.631173088899337100, -0.631211870210989010, -0.631250649944611220, +-0.631289428100107130, -0.631328204677379160, -0.631366979676330600, -0.631405753096864640, -0.631444524938884700, -0.631483295202293070, -0.631522063886993170, -0.631560830992888070, +-0.631599596519881290, -0.631638360467875140, -0.631677122836773130, -0.631715883626478350, -0.631754642836894090, -0.631793400467922980, -0.631832156519468340, -0.631870910991433670, +-0.631909663883721380, -0.631948415196234900, -0.631987164928877410, -0.632025913081552320, -0.632064659654162140, -0.632103404646610300, -0.632142148058799870, -0.632180889890634480, +-0.632219630142016540, -0.632258368812849580, -0.632297105903036560, -0.632335841412481230, -0.632374575341085880, -0.632413307688754140, -0.632452038455389110, -0.632490767640894290, +-0.632529495245172320, -0.632568221268126510, -0.632606945709660140, -0.632645668569676860, -0.632684389848078950, -0.632723109544770180, -0.632761827659653830, -0.632800544192632650, +-0.632839259143610170, -0.632877972512489450, -0.632916684299174140, -0.632955394503566860, -0.632994103125571030, -0.633032810165089940, -0.633071515622027240, -0.633110219496285320, +-0.633148921787767830, -0.633187622496378170, -0.633226321622019640, -0.633265019164595100, -0.633303715124007960, -0.633342409500161520, -0.633381102292959410, -0.633419793502304150, +-0.633458483128099490, -0.633497171170248840, -0.633535857628655050, -0.633574542503221540, -0.633613225793851710, -0.633651907500449200, -0.633690587622916520, -0.633729266161157430, +-0.633767943115075120, -0.633806618484573310, -0.633845292269554550, -0.633883964469922680, -0.633922635085580780, -0.633961304116432700, -0.633999971562380970, -0.634038637423329440, +-0.634077301699181200, -0.634115964389840080, -0.634154625495208730, -0.634193285015190790, -0.634231942949689990, -0.634270599298608960, -0.634309254061851460, -0.634347907239320770, +-0.634386558830920650, -0.634425208836553840, -0.634463857256124090, -0.634502504089534570, -0.634541149336689150, -0.634579792997490570, -0.634618435071842460, -0.634657075559648340, +-0.634695714460811860, -0.634734351775235630, -0.634772987502823630, -0.634811621643479150, -0.634850254197105950, -0.634888885163606750, -0.634927514542885320, -0.634966142334845500, +-0.635004768539390030, -0.635043393156422550, -0.635082016185846590, -0.635120637627565990, -0.635159257481483390, -0.635197875747502640, -0.635236492425527270, -0.635275107515460900, +-0.635313721017206510, -0.635352332930667840, -0.635390943255748300, -0.635429551992351740, -0.635468159140380910, -0.635506764699739770, -0.635545368670331620, -0.635583971052060440, +-0.635622571844829070, -0.635661171048541140, -0.635699768663100410, -0.635738364688410500, -0.635776959124374370, -0.635815551970895900, -0.635854143227878810, -0.635892732895226080, +-0.635931320972841440, -0.635969907460628540, -0.636008492358491220, -0.636047075666332340, -0.636085657384055760, -0.636124237511564990, -0.636162816048764010, -0.636201392995555670, +-0.636239968351843820, -0.636278542117532100, -0.636317114292524360, -0.636355684876723450, -0.636394253870033340, -0.636432821272357560, -0.636471387083600070, -0.636509951303663830, +-0.636548513932452710, -0.636587074969870550, -0.636625634415820430, -0.636664192270206210, -0.636702748532931520, -0.636741303203900320, -0.636779856283015590, -0.636818407770181060, +-0.636856957665300590, -0.636895505968278040, -0.636934052679016480, -0.636972597797419660, -0.637011141323391430, -0.637049683256835640, -0.637088223597655380, -0.637126762345754490, +-0.637165299501036730, -0.637203835063406050, -0.637242369032765430, -0.637280901409018830, -0.637319432192070430, -0.637357961381822990, -0.637396488978180800, -0.637435014981047270, +-0.637473539390326580, -0.637512062205921710, -0.637550583427736630, -0.637589103055675180, -0.637627621089641220, -0.637666137529537940, -0.637704652375269300, -0.637743165626738940, +-0.637781677283851160, -0.637820187346508800, -0.637858695814615850, -0.637897202688076260, -0.637935707966794000, -0.637974211650672140, -0.638012713739614770, -0.638051214233525620, +-0.638089713132308670, -0.638128210435867200, -0.638166706144105200, -0.638205200256926730, -0.638243692774234980, -0.638282183695933920, -0.638320673021927410, -0.638359160752119630, +-0.638397646886413540, -0.638436131424713340, -0.638474614366922880, -0.638513095712946120, -0.638551575462686370, -0.638590053616047590, -0.638628530172933750, -0.638667005133248920, +-0.638705478496896180, -0.638743950263779840, -0.638782420433803510, -0.638820889006871620, -0.638859355982887010, -0.638897821361754100, -0.638936285143376970, -0.638974747327658800, +-0.639013207914503670, -0.639051666903815650, -0.639090124295498720, -0.639128580089456170, -0.639167034285592180, -0.639205486883810510, -0.639243937884015570, -0.639282387286110420, +-0.639320835089999260, -0.639359281295586060, -0.639397725902774990, -0.639436168911469260, -0.639474610321573160, -0.639513050132990420, -0.639551488345625470, -0.639589924959381500, +-0.639628359974162670, -0.639666793389873310, -0.639705225206416590, -0.639743655423696820, -0.639782084041617850, -0.639820511060084090, -0.639858936478998610, -0.639897360298265940, +-0.639935782517789820, -0.639974203137474550, -0.640012622157223430, -0.640051039576940760, -0.640089455396530500, -0.640127869615896960, -0.640166282234943320, -0.640204693253574100, +-0.640243102671693040, -0.640281510489204560, -0.640319916706012070, -0.640358321322019750, -0.640396724337131910, -0.640435125751251940, -0.640473525564284160, -0.640511923776132640, +-0.640550320386701570, -0.640588715395894460, -0.640627108803615400, -0.640665500609768680, -0.640703890814258490, -0.640742279416988250, -0.640780666417862350, -0.640819051816784780, +-0.640857435613659930, -0.640895817808391110, -0.640934198400882730, -0.640972577391038860, -0.641010954778763910, -0.641049330563961290, -0.641087704746535310, -0.641126077326390040, +-0.641164448303429890, -0.641202817677558270, -0.641241185448679700, -0.641279551616698470, -0.641317916181518010, -0.641356279143042720, -0.641394640501176780, -0.641433000255824610, +-0.641471358406889510, -0.641509714954276110, -0.641548069897888370, -0.641586423237630710, -0.641624774973406750, -0.641663125105120910, -0.641701473632677160, -0.641739820555980110, +-0.641778165874933190, -0.641816509589440810, -0.641854851699407150, -0.641893192204736730, -0.641931531105332960, -0.641969868401100370, -0.642008204091943480, -0.642046538177765690, +-0.642084870658471640, -0.642123201533965400, -0.642161530804151390, -0.642199858468933350, -0.642238184528215570, -0.642276508981902360, -0.642314831829898240, -0.642353153072106610, +-0.642391472708432220, -0.642429790738779040, -0.642468107163051800, -0.642506421981153930, -0.642544735192989940, -0.642583046798464230, -0.642621356797481220, -0.642659665189944440, +-0.642697971975758400, -0.642736277154827950, -0.642774580727056400, -0.642812882692348380, -0.642851183050608180, -0.642889481801740330, -0.642927778945648450, -0.642966074482237080, +-0.643004368411410620, -0.643042660733073480, -0.643080951447129400, -0.643119240553482910, -0.643157528052038410, -0.643195813942700310, -0.643234098225372470, -0.643272380899959310, +-0.643310661966365100, -0.643348941424494720, -0.643387219274251580, -0.643425495515540400, -0.643463770148265500, -0.643502043172331510, -0.643540314587642050, -0.643578584394101870, +-0.643616852591615500, -0.643655119180086670, -0.643693384159420120, -0.643731647529519950, -0.643769909290291100, -0.643808169441637210, -0.643846427983462810, -0.643884684915672300, +-0.643922940238170540, -0.643961193950860930, -0.643999446053648450, -0.644037696546437390, -0.644075945429132270, -0.644114192701637060, -0.644152438363856380, -0.644190682415694550, +-0.644228924857056410, -0.644267165687845590, -0.644305404907966840, -0.644343642517324900, -0.644381878515823630, -0.644420112903367540, -0.644458345679861160, -0.644496576845209330, +-0.644534806399315710, -0.644573034342085020, -0.644611260673421780, -0.644649485393230750, -0.644687708501415660, -0.644725929997881250, -0.644764149882532060, -0.644802368155272810, +-0.644840584816007370, -0.644878799864640360, -0.644917013301076420, -0.644955225125220300, -0.644993435336975730, -0.645031643936247570, -0.645069850922940670, -0.645108056296958890, +-0.645146260058206860, -0.645184462206589200, -0.645222662742010680, -0.645260861664375240, -0.645299058973587520, -0.645337254669552270, -0.645375448752174230, -0.645413641221357140, +-0.645451832077006070, -0.645490021319025330, -0.645528208947319880, -0.645566394961793580, -0.645604579362351380, -0.645642762148897600, -0.645680943321337300, -0.645719122879574340, +-0.645757300823513570, -0.645795477153059850, -0.645833651868117030, -0.645871824968590190, -0.645909996454383740, -0.645948166325402640, -0.645986334581550860, -0.646024501222733140, +-0.646062666248854220, -0.646100829659818960, -0.646138991455531330, -0.646177151635896170, -0.646215310200818130, -0.646253467150202150, -0.646291622483952220, -0.646329776201973180, +-0.646367928304169780, -0.646406078790446760, -0.646444227660708300, -0.646482374914859270, -0.646520520552804290, -0.646558664574448330, -0.646596806979695350, -0.646634947768450430, +-0.646673086940618420, -0.646711224496103410, -0.646749360434810240, -0.646787494756643770, -0.646825627461508850, -0.646863758549309550, -0.646901888019950850, -0.646940015873337380, +-0.646978142109374320, -0.647016266727965420, -0.647054389729015970, -0.647092511112430490, -0.647130630878114070, -0.647168749025970770, -0.647206865555905560, -0.647244980467823190, +-0.647283093761628740, -0.647321205437226150, -0.647359315494520640, -0.647397423933417150, -0.647435530753819770, -0.647473635955633450, -0.647511739538763180, -0.647549841503113790, +-0.647587941848589590, -0.647626040575095430, -0.647664137682536280, -0.647702233170816990, -0.647740327039841860, -0.647778419289515850, -0.647816509919743820, -0.647854598930430850, +-0.647892686321481110, -0.647930772092799590, -0.647968856244291120, -0.648006938775860910, -0.648045019687413020, -0.648083098978852520, -0.648121176650084620, -0.648159252701013490, +-0.648197327131544210, -0.648235399941581640, -0.648273471131030840, -0.648311540699796020, -0.648349608647782350, -0.648387674974894690, -0.648425739681038230, -0.648463802766117040, +-0.648501864230036310, -0.648539924072701000, -0.648577982294016090, -0.648616038893885970, -0.648654093872215840, -0.648692147228910330, -0.648730198963874850, -0.648768249077013470, +-0.648806297568231600, -0.648844344437433880, -0.648882389684525720, -0.648920433309411180, -0.648958475311995580, -0.648996515692184080, -0.649034554449881010, -0.649072591584991530, +-0.649110627097420620, -0.649148660987073470, -0.649186693253854250, -0.649224723897668390, -0.649262752918420620, -0.649300780316016350, -0.649338806090359880, -0.649376830241356280, +-0.649414852768910640, -0.649452873672928250, -0.649490892953313300, -0.649528910609971090, -0.649566926642806690, -0.649604941051725170, -0.649642953836631070, -0.649680964997429560, +-0.649718974534026050, -0.649756982446324630, -0.649794988734230810, -0.649832993397649550, -0.649870996436486160, -0.649908997850644820, -0.649946997640031170, -0.649984995804549830, +-0.650022992344106540, -0.650060987258605280, -0.650098980547951570, -0.650136972212050470, -0.650174962250807290, -0.650212950664126210, -0.650250937451912980, -0.650288922614072230, +-0.650326906150509590, -0.650364888061129350, -0.650402868345836830, -0.650440847004537530, -0.650478824037135750, -0.650516799443536910, -0.650554773223646080, -0.650592745377368660, +-0.650630715904609080, -0.650668684805272620, -0.650706652079264480, -0.650744617726490060, -0.650782581746853770, -0.650820544140261030, -0.650858504906616900, -0.650896464045826910, +-0.650934421557795350, -0.650972377442427750, -0.651010331699629300, -0.651048284329305280, -0.651086235331360230, -0.651124184705699550, -0.651162132452228760, -0.651200078570852270, +-0.651238023061475600, -0.651275965924003940, -0.651313907158342700, -0.651351846764396280, -0.651389784742070320, -0.651427721091269780, -0.651465655811900410, -0.651503588903866500, +-0.651541520367073580, -0.651579450201426940, -0.651617378406831980, -0.651655304983193240, -0.651693229930416230, -0.651731153248406140, -0.651769074937068480, -0.651806994996307900, +-0.651844913426029680, -0.651882830226139350, -0.651920745396542100, -0.651958658937142780, -0.651996570847846790, -0.652034481128559660, -0.652072389779186020, -0.652110296799631390, +-0.652148202189801070, -0.652186105949600580, -0.652224008078934440, -0.652261908577708270, -0.652299807445827380, -0.652337704683197290, -0.652375600289722520, -0.652413494265308920, +-0.652451386609861460, -0.652489277323285880, -0.652527166405486800, -0.652565053856369760, -0.652602939675840150, -0.652640823863803510, -0.652678706420164460, -0.652716587344828620, +-0.652754466637701650, -0.652792344298688270, -0.652830220327694000, -0.652868094724624040, -0.652905967489384340, -0.652943838621879320, -0.652981708122014730, -0.653019575989695840, +-0.653057442224828310, -0.653095306827316870, -0.653133169797067260, -0.653171031133984670, -0.653208890837974730, -0.653246748908942300, -0.653284605346793110, -0.653322460151432250, +-0.653360313322765670, -0.653398164860697910, -0.653436014765134800, -0.653473863035981870, -0.653511709673144090, -0.653549554676526980, -0.653587398046035940, -0.653625239781576830, +-0.653663079883054170, -0.653700918350373920, -0.653738755183441270, -0.653776590382162180, -0.653814423946441180, -0.653852255876184230, -0.653890086171296510, -0.653927914831684000, +-0.653965741857251310, -0.654003567247904320, -0.654041391003548410, -0.654079213124089340, -0.654117033609431850, -0.654154852459481910, -0.654192669674144690, -0.654230485253326280, +-0.654268299196931190, -0.654306111504865400, -0.654343922177034740, -0.654381731213343860, -0.654419538613698610, -0.654457344378004620, -0.654495148506167520, -0.654532950998092280, +-0.654570751853684630, -0.654608551072850100, -0.654646348655494540, -0.654684144601522690, -0.654721938910840520, -0.654759731583353540, -0.654797522618967620, -0.654835312017587490, +-0.654873099779119120, -0.654910885903467910, -0.654948670390539830, -0.654986453240239850, -0.655024234452473710, -0.655062014027147250, -0.655099791964165460, -0.655137568263434170, +-0.655175342924859020, -0.655213115948345750, -0.655250887333799440, -0.655288657081125820, -0.655326425190230650, -0.655364191661019780, -0.655401956493397940, -0.655439719687271330, +-0.655477481242545460, -0.655515241159126180, -0.655552999436918360, -0.655590756075828170, -0.655628511075761030, -0.655666264436623010, -0.655704016158318860, -0.655741766240754750, +-0.655779514683836550, -0.655817261487469330, -0.655855006651558830, -0.655892750176010900, -0.655930492060731400, -0.655968232305625290, -0.656005970910598650, -0.656043707875556990, +-0.656081443200406510, -0.656119176885052060, -0.656156908929399600, -0.656194639333354980, -0.656232368096824060, -0.656270095219711800, -0.656307820701924390, -0.656345544543367350, +-0.656383266743946870, -0.656420987303567900, -0.656458706222136420, -0.656496423499558500, -0.656534139135739210, -0.656571853130584530, -0.656609565484000290, -0.656647276195892360, +-0.656684985266166030, -0.656722692694727160, -0.656760398481481600, -0.656798102626335310, -0.656835805129193480, -0.656873505989962080, -0.656911205208547070, -0.656948902784854180, +-0.656986598718788840, -0.657024293010257000, -0.657061985659164400, -0.657099676665417130, -0.657137366028920370, -0.657175053749580180, -0.657212739827302330, -0.657250424261993090, +-0.657288107053557340, -0.657325788201901350, -0.657363467706931210, -0.657401145568552110, -0.657438821786670120, -0.657476496361190990, -0.657514169292021110, -0.657551840579065350, +-0.657589510222230000, -0.657627178221420920, -0.657664844576544280, -0.657702509287505180, -0.657740172354209670, -0.657777833776563850, -0.657815493554473770, -0.657853151687844640, +-0.657890808176582630, -0.657928463020593490, -0.657966116219783630, -0.658003767774058110, -0.658041417683323140, -0.658079065947485000, -0.658116712566448880, -0.658154357540120970, +-0.658192000868407120, -0.658229642551213740, -0.658267282588445800, -0.658304920980009700, -0.658342557725811180, -0.658380192825756770, -0.658417826279751430, -0.658455458087701560, +-0.658493088249513030, -0.658530716765092120, -0.658568343634344130, -0.658605968857175260, -0.658643592433491460, -0.658681214363198930, -0.658718834646203180, -0.658756453282410280, +-0.658794070271726540, -0.658831685614057360, -0.658869299309308930, -0.658906911357387210, -0.658944521758198620, -0.658982130511648330, -0.659019737617642760, -0.659057343076087760, +-0.659094946886889850, -0.659132549049954220, -0.659170149565187160, -0.659207748432494740, -0.659245345651783390, -0.659282941222958160, -0.659320535145925700, -0.659358127420591860, +-0.659395718046863030, -0.659433307024644640, -0.659470894353842870, -0.659508480034364020, -0.659546064066114160, -0.659583646448998810, -0.659621227182924490, -0.659658806267797270, +-0.659696383703522790, -0.659733959490007350, -0.659771533627157010, -0.659809106114878090, -0.659846676953076190, -0.659884246141657530, -0.659921813680528270, -0.659959379569594830, +-0.659996943808762620, -0.660034506397937930, -0.660072067337027060, -0.660109626625936420, -0.660147184264571310, -0.660184740252838240, -0.660222294590643300, -0.660259847277893000, +-0.660297398314492750, -0.660334947700348950, -0.660372495435368130, -0.660410041519455810, -0.660447585952518290, -0.660485128734461860, -0.660522669865192920, -0.660560209344617010, +-0.660597747172640530, -0.660635283349169770, -0.660672817874111030, -0.660710350747369950, -0.660747881968853030, -0.660785411538466370, -0.660822939456116480, -0.660860465721708980, +-0.660897990335150290, -0.660935513296346590, -0.660973034605204400, -0.661010554261629360, -0.661048072265527980, -0.661085588616806660, -0.661123103315371050, -0.661160616361127770, +-0.661198127753982900, -0.661235637493843060, -0.661273145580613790, -0.661310652014201580, -0.661348156794512750, -0.661385659921453930, -0.661423161394930630, -0.661460661214849370, +-0.661498159381116560, -0.661535655893638500, -0.661573150752321150, -0.661610643957070810, -0.661648135507793890, -0.661685625404397020, -0.661723113646785710, -0.661760600234866600, +-0.661798085168546320, -0.661835568447730620, -0.661873050072325890, -0.661910530042238540, -0.661948008357375110, -0.661985485017641430, -0.662022960022944030, -0.662060433373189210, +-0.662097905068283700, -0.662135375108133030, -0.662172843492643940, -0.662210310221722720, -0.662247775295276120, -0.662285238713209660, -0.662322700475430180, -0.662360160581843880, +-0.662397619032357610, -0.662435075826876880, -0.662472530965308450, -0.662509984447558820, -0.662547436273534410, -0.662584886443141170, -0.662622334956285640, -0.662659781812874660, +-0.662697227012813860, -0.662734670556009990, -0.662772112442369550, -0.662809552671799080, -0.662846991244204320, -0.662884428159492220, -0.662921863417568980, -0.662959297018341440, +-0.662996728961715240, -0.663034159247597340, -0.663071587875893930, -0.663109014846511970, -0.663146440159357090, -0.663183863814336140, -0.663221285811355530, -0.663258706150322010, +-0.663296124831141420, -0.663333541853720510, -0.663370957217966020, -0.663408370923783910, -0.663445782971080810, -0.663483193359763250, -0.663520602089738070, -0.663558009160911120, +-0.663595414573189050, -0.663632818326478470, -0.663670220420686130, -0.663707620855717990, -0.663745019631480690, -0.663782416747880970, -0.663819812204825440, -0.663857206002220090, +-0.663894598139971650, -0.663931988617986860, -0.663969377436172350, -0.664006764594434080, -0.664044150092678810, -0.664081533930813590, -0.664118916108744180, -0.664156296626377540, +-0.664193675483620070, -0.664231052680378850, -0.664268428216559510, -0.664305802092069240, -0.664343174306814440, -0.664380544860701970, -0.664417913753637790, -0.664455280985528970, +-0.664492646556281820, -0.664530010465803400, -0.664567372713999680, -0.664604733300777520, -0.664642092226043420, -0.664679449489704590, -0.664716805091666750, -0.664754159031836770, +-0.664791511310121490, -0.664828861926427760, -0.664866210880661560, -0.664903558172729840, -0.664940903802539560, -0.664978247769996700, -0.665015590075008100, -0.665052930717480620, +-0.665090269697321210, -0.665127607014435630, -0.665164942668731160, -0.665202276660114330, -0.665239608988492100, -0.665276939653770550, -0.665314268655856630, -0.665351595994656990, +-0.665388921670078790, -0.665426245682027910, -0.665463568030411400, -0.665500888715135910, -0.665538207736108610, -0.665575525093235480, -0.665612840786423470, -0.665650154815579760, +-0.665687467180610340, -0.665724777881422150, -0.665762086917922160, -0.665799394290017110, -0.665836699997613300, -0.665874004040617810, -0.665911306418937250, -0.665948607132478830, +-0.665985906181148500, -0.666023203564853450, -0.666060499283500310, -0.666097793336996260, -0.666135085725247490, -0.666172376448160960, -0.666209665505643420, -0.666246952897602160, +-0.666284238623943150, -0.666321522684573560, -0.666358805079400370, -0.666396085808329990, -0.666433364871269360, -0.666470642268125250, -0.666507917998804930, -0.666545192063214500, +-0.666582464461261020, -0.666619735192851450, -0.666657004257892760, -0.666694271656291360, -0.666731537387954210, -0.666768801452788270, -0.666806063850700510, -0.666843324581597450, +-0.666880583645385940, -0.666917841041973050, -0.666955096771265850, -0.666992350833170660, -0.667029603227594530, -0.667066853954444430, -0.667104103013627440, -0.667141350405049960, +-0.667178596128618960, -0.667215840184241960, -0.667253082571824920, -0.667290323291275240, -0.667327562342499790, -0.667364799725405630, -0.667402035439899290, -0.667439269485887720, +-0.667476501863278120, -0.667513732571977550, -0.667550961611892200, -0.667588188982929600, -0.667625414684996480, -0.667662638718000130, -0.667699861081846870, -0.667737081776443860, +-0.667774300801698310, -0.667811518157517270, -0.667848733843807050, -0.667885947860475060, -0.667923160207428480, -0.667960370884573720, -0.667997579891818070, -0.668034787229068390, +-0.668071992896232090, -0.668109196893215460, -0.668146399219925910, -0.668183599876270300, -0.668220798862156020, -0.668257996177489490, -0.668295191822177890, -0.668332385796128300, +-0.668369578099248130, -0.668406768731443670, -0.668443957692622330, -0.668481144982691070, -0.668518330601557190, -0.668555514549127210, -0.668592696825308530, -0.668629877430008350, +-0.668667056363133170, -0.668704233624590310, -0.668741409214286930, -0.668778583132130230, -0.668815755378026840, -0.668852925951884060, -0.668890094853608950, -0.668927262083109040, +-0.668964427640290520, -0.669001591525061000, -0.669038753737327460, -0.669075914276997310, -0.669113073143977170, -0.669150230338174220, -0.669187385859495780, -0.669224539707849230, +-0.669261691883140890, -0.669298842385278370, -0.669335991214169090, -0.669373138369719570, -0.669410283851837100, -0.669447427660428970, -0.669484569795402610, -0.669521710256664400, +-0.669558849044122000, -0.669595986157682450, -0.669633121597253300, -0.669670255362741050, -0.669707387454053120, -0.669744517871096680, -0.669781646613779370, -0.669818773682007480, +-0.669855899075688770, -0.669893022794730290, -0.669930144839039570, -0.669967265208523120, -0.670004383903088470, -0.670041500922643030, -0.670078616267093970, -0.670115729936348160, +-0.670152841930312990, -0.670189952248896100, -0.670227060892003900, -0.670264167859544120, -0.670301273151423960, -0.670338376767550810, -0.670375478707831540, -0.670412578972173550, +-0.670449677560484010, -0.670486774472670690, -0.670523869708640090, -0.670560963268299730, -0.670598055151557130, -0.670635145358319580, -0.670672233888493840, -0.670709320741987640, +-0.670746405918708040, -0.670783489418562810, -0.670820571241458440, -0.670857651387302690, -0.670894729856003180, -0.670931806647466430, -0.670968881761600300, -0.671005955198311850, +-0.671043026957508840, -0.671080097039097990, -0.671117165442986830, -0.671154232169082880, -0.671191297217293540, -0.671228360587525770, -0.671265422279687000, -0.671302482293684720, +-0.671339540629426470, -0.671376597286819090, -0.671413652265770320, -0.671450705566187360, -0.671487757187977820, -0.671524807131048780, -0.671561855395307550, -0.671598901980662080, +-0.671635946887019000, -0.671672990114286160, -0.671710031662370750, -0.671747071531180630, -0.671784109720622410, -0.671821146230604070, -0.671858181061032680, -0.671895214211816310, +-0.671932245682861580, -0.671969275474076140, -0.672006303585367610, -0.672043330016643510, -0.672080354767810920, -0.672117377838777340, -0.672154399229450310, -0.672191418939737660, +-0.672228436969546150, -0.672265453318783510, -0.672302467987357270, -0.672339480975175150, -0.672376492282144020, -0.672413501908171620, -0.672450509853165900, -0.672487516117033500, +-0.672524520699682270, -0.672561523601019840, -0.672598524820953840, -0.672635524359391220, -0.672672522216239740, -0.672709518391407140, -0.672746512884800920, -0.672783505696328050, +-0.672820496825896510, -0.672857486273413690, -0.672894474038787550, -0.672931460121924840, -0.672968444522733520, -0.673005427241121000, -0.673042408276995350, -0.673079387630263200, +-0.673116365300832740, -0.673153341288611600, -0.673190315593506840, -0.673227288215426210, -0.673264259154277460, -0.673301228409968310, -0.673338195982405850, -0.673375161871497820, +-0.673412126077151950, -0.673449088599275990, -0.673486049437777010, -0.673523008592562980, -0.673559966063541400, -0.673596921850620260, -0.673633875953706380, -0.673670828372707970, +-0.673707779107532320, -0.673744728158087720, -0.673781675524280810, -0.673818621206019760, -0.673855565203212550, -0.673892507515766010, -0.673929448143588350, -0.673966387086586960, +-0.674003324344669920, -0.674040259917744300, -0.674077193805717960, -0.674114126008498630, -0.674151056525994390, -0.674187985358112090, -0.674224912504759910, -0.674261837965845380, +-0.674298761741276680, -0.674335683830960650, -0.674372604234805490, -0.674409522952718720, -0.674446439984608630, -0.674483355330381950, -0.674520268989946990, -0.674557180963211600, +-0.674594091250082960, -0.674630999850469150, -0.674667906764277790, -0.674704811991416960, -0.674741715531793850, -0.674778617385316410, -0.674815517551892400, -0.674852416031429980, +-0.674889312823836130, -0.674926207929019030, -0.674963101346886420, -0.674999993077346480, -0.675036883120306070, -0.675073771475673490, -0.675110658143356580, -0.675147543123263190, +-0.675184426415300740, -0.675221308019377190, -0.675258187935400380, -0.675295066163278390, -0.675331942702918410, -0.675368817554228620, -0.675405690717117090, -0.675442562191491010, +-0.675479431977258460, -0.675516300074327390, -0.675553166482605880, -0.675590031202001230, -0.675626894232421390, -0.675663755573774340, -0.675700615225968250, -0.675737473188910310, +-0.675774329462508590, -0.675811184046671180, -0.675848036941306020, -0.675884888146320420, -0.675921737661622670, -0.675958585487120620, -0.675995431622722350, -0.676032276068335270, +-0.676069118823867440, -0.676105959889227170, -0.676142799264321640, -0.676179636949059030, -0.676216472943347520, -0.676253307247094980, -0.676290139860208920, -0.676326970782597510, +-0.676363800014168740, -0.676400627554830660, -0.676437453404490800, -0.676474277563057220, -0.676511100030438020, -0.676547920806541360, -0.676584739891274540, -0.676621557284545870, +-0.676658372986263410, -0.676695186996335240, -0.676731999314668760, -0.676768809941172390, -0.676805618875754300, -0.676842426118321790, -0.676879231668783170, -0.676916035527046600, +-0.676952837693020170, -0.676989638166611290, -0.677026436947728350, -0.677063234036279440, -0.677100029432172620, -0.677136823135315420, -0.677173615145616250, -0.677210405462982950, +-0.677247194087324030, -0.677283981018546700, -0.677320766256559570, -0.677357549801270390, -0.677394331652587780, -0.677431111810418930, -0.677467890274672250, -0.677504667045256030, +-0.677541442122078340, -0.677578215505046710, -0.677614987194069540, -0.677651757189055240, -0.677688525489911210, -0.677725292096545970, -0.677762057008867380, -0.677798820226783950, +-0.677835581750203310, -0.677872341579033530, -0.677909099713183030, -0.677945856152559980, -0.677982610897072120, -0.678019363946627650, -0.678056115301134740, -0.678092864960501920, +-0.678129612924636580, -0.678166359193447250, -0.678203103766842010, -0.678239846644729250, -0.678276587827016720, -0.678313327313612600, -0.678350065104425410, -0.678386801199362900, +-0.678423535598333350, -0.678460268301244840, -0.678496999308006110, -0.678533728618524570, -0.678570456232708620, -0.678607182150466560, -0.678643906371706910, -0.678680628896337180, +-0.678717349724265780, -0.678754068855401020, -0.678790786289651500, -0.678827502026924660, -0.678864216067128990, -0.678900928410172910, -0.678937639055964710, -0.678974348004412140, +-0.679011055255423710, -0.679047760808907940, -0.679084464664772460, -0.679121166822925890, -0.679157867283276320, -0.679194566045732360, -0.679231263110201770, -0.679267958476593050, +-0.679304652144814280, -0.679341344114774310, -0.679378034386380670, -0.679414722959541860, -0.679451409834166300, -0.679488095010162500, -0.679524778487438200, -0.679561460265901920, +-0.679598140345461950, -0.679634818726027050, -0.679671495407504710, -0.679708170389803580, -0.679744843672832500, -0.679781515256498880, -0.679818185140711460, -0.679854853325378650, +-0.679891519810408960, -0.679928184595710140, -0.679964847681190920, -0.680001509066759600, -0.680038168752324810, -0.680074826737794180, -0.680111483023076560, -0.680148137608080240, +-0.680184790492713850, -0.680221441676885250, -0.680258091160502950, -0.680294738943475470, -0.680331385025711550, -0.680368029407118710, -0.680404672087605910, -0.680441313067081330, +-0.680477952345453830, -0.680514589922631140, -0.680551225798522010, -0.680587859973035060, -0.680624492446078140, -0.680661123217560000, -0.680697752287389050, -0.680734379655474120, +-0.680771005321722860, -0.680807629286044100, -0.680844251548346160, -0.680880872108538090, -0.680917490966527430, -0.680954108122223010, -0.680990723575533360, -0.681027337326367220, +-0.681063949374632440, -0.681100559720237750, -0.681137168363091680, -0.681173775303102970, -0.681210380540179570, -0.681246984074230230, -0.681283585905163690, -0.681320186032887800, +-0.681356784457311630, -0.681393381178343360, -0.681429976195891960, -0.681466569509865390, -0.681503161120172280, -0.681539751026721370, -0.681576339229421290, -0.681612925728180220, +-0.681649510522906680, -0.681686093613509400, -0.681722674999897250, -0.681759254681978070, -0.681795832659660710, -0.681832408932853800, -0.681868983501466190, -0.681905556365405840, +-0.681942127524581500, -0.681978696978902230, -0.682015264728275890, -0.682051830772611440, -0.682088395111817290, -0.682124957745802620, -0.682161518674475160, -0.682198077897743890, +-0.682234635415517430, -0.682271191227704740, -0.682307745334213680, -0.682344297734953310, -0.682380848429832270, -0.682417397418759290, -0.682453944701642560, -0.682490490278390930, +-0.682527034148913140, -0.682563576313118040, -0.682600116770913700, -0.682636655522209090, -0.682673192566912720, -0.682709727904933890, -0.682746261536180340, -0.682782793460561030, +-0.682819323677985150, -0.682855852188360650, -0.682892378991596490, -0.682928904087601430, -0.682965427476284300, -0.683001949157553410, -0.683038469131317600, -0.683074987397485620, +-0.683111503955966540, -0.683148018806668310, -0.683184531949500020, -0.683221043384370510, -0.683257553111188630, -0.683294061129862570, -0.683330567440301300, -0.683367072042413650, +-0.683403574936108700, -0.683440076121294430, -0.683476575597880000, -0.683513073365774490, -0.683549569424885870, -0.683586063775123430, -0.683622556416395800, -0.683659047348612050, +-0.683695536571680360, -0.683732024085509820, -0.683768509890009260, -0.683804993985087760, -0.683841476370653510, -0.683877957046615470, -0.683914436012882600, -0.683950913269363860, +-0.683987388815967660, -0.684023862652602840, -0.684060334779178490, -0.684096805195603560, -0.684133273901786240, -0.684169740897635830, -0.684206206183061380, -0.684242669757971100, +-0.684279131622274160, -0.684315591775879310, -0.684352050218695830, -0.684388506950631910, -0.684424961971596750, -0.684461415281499170, -0.684497866880248380, -0.684534316767752670, +-0.684570764943921000, -0.684607211408662540, -0.684643656161886380, -0.684680099203500700, -0.684716540533414800, -0.684752980151537520, -0.684789418057778150, -0.684825854252044900, +-0.684862288734247040, -0.684898721504293760, -0.684935152562093250, -0.684971581907555030, -0.685008009540587710, -0.685044435461100830, -0.685080859669002450, -0.685117282164201980, +-0.685153702946608270, -0.685190122016130610, -0.685226539372677300, -0.685262955016157750, -0.685299368946480690, -0.685335781163555650, -0.685372191667290690, -0.685408600457595330, +-0.685445007534378540, -0.685481412897549380, -0.685517816547016490, -0.685554218482689050, -0.685590618704476020, -0.685627017212286800, -0.685663414006029700, -0.685699809085614120, +-0.685736202450949350, -0.685772594101943690, -0.685808984038506540, -0.685845372260546870, -0.685881758767974190, -0.685918143560696800, -0.685954526638624000, -0.685990908001664960, +-0.686027287649728870, -0.686063665582724250, -0.686100041800560500, -0.686136416303146700, -0.686172789090392140, -0.686209160162205230, -0.686245529518495490, -0.686281897159171870, +-0.686318263084143900, -0.686354627293319860, -0.686390989786609280, -0.686427350563921570, -0.686463709625165230, -0.686500066970249570, -0.686536422599083650, -0.686572776511577110, +-0.686609128707638240, -0.686645479187176560, -0.686681827950101240, -0.686718174996321600, -0.686754520325746240, -0.686790863938284480, -0.686827205833845710, -0.686863546012339230, +-0.686899884473673450, -0.686936221217758100, -0.686972556244502040, -0.687008889553815010, -0.687045221145605400, -0.687081551019782850, -0.687117879176256660, -0.687154205614935340, +-0.687190530335728630, -0.687226853338545610, -0.687263174623295780, -0.687299494189887670, -0.687335812038230800, -0.687372128168234340, -0.687408442579807930, -0.687444755272860200, +-0.687481066247300430, -0.687517375503038150, -0.687553683039982650, -0.687589988858042570, -0.687626292957127630, -0.687662595337146910, -0.687698895998010040, -0.687735194939625540, +-0.687771492161903140, -0.687807787664752040, -0.687844081448081730, -0.687880373511800870, -0.687916663855819070, -0.687952952480045950, -0.687989239384390160, -0.688025524568761200, +-0.688061808033068490, -0.688098089777221640, -0.688134369801129190, -0.688170648104700740, -0.688206924687845720, -0.688243199550473750, -0.688279472692493450, -0.688315744113814460, +-0.688352013814346080, -0.688388281793998020, -0.688424548052678940, -0.688460812590298450, -0.688497075406765970, -0.688533336501991110, -0.688569595875882620, -0.688605853528350130, +-0.688642109459303260, -0.688678363668650870, -0.688714616156302470, -0.688750866922167690, -0.688787115966155940, -0.688823363288176060, -0.688859608888137910, -0.688895852765950670, +-0.688932094921524070, -0.688968335354766980, -0.689004574065589010, -0.689040811053899580, -0.689077046319608420, -0.689113279862624490, -0.689149511682857210, -0.689185741780216190, +-0.689221970154611170, -0.689258196805950800, -0.689294421734145010, -0.689330644939103570, -0.689366866420735080, -0.689403086178949410, -0.689439304213656180, -0.689475520524764800, +-0.689511735112184440, -0.689547947975824750, -0.689584159115595120, -0.689620368531405400, -0.689656576223164560, -0.689692782190782120, -0.689728986434167800, -0.689765188953231360, +-0.689801389747881630, -0.689837588818028370, -0.689873786163581190, -0.689909981784449840, -0.689946175680543170, -0.689982367851771140, -0.690018558298043480, -0.690054747019269170, +-0.690090934015357930, -0.690127119286219280, -0.690163302831763300, -0.690199484651898620, -0.690235664746535300, -0.690271843115582760, -0.690308019758951060, -0.690344194676548840, +-0.690380367868286270, -0.690416539334072650, -0.690452709073818060, -0.690488877087431340, -0.690525043374822460, -0.690561207935901030, -0.690597370770576810, -0.690633531878758870, +-0.690669691260357150, -0.690705848915281080, -0.690742004843440840, -0.690778159044745270, -0.690814311519104220, -0.690850462266427770, -0.690886611286624760, -0.690922758579605280, +-0.690958904145278940, -0.690995047983555600, -0.691031190094344330, -0.691067330477555200, -0.691103469133097610, -0.691139606060881650, -0.691175741260816380, -0.691211874732811760, +-0.691248006476777530, -0.691284136492623550, -0.691320264780258990, -0.691356391339593590, -0.691392516170537320, -0.691428639273000130, -0.691464760646890890, -0.691500880292119870, +-0.691536998208596930, -0.691573114396231150, -0.691609228854932590, -0.691645341584611000, -0.691681452585176330, -0.691717561856537650, -0.691753669398605160, -0.691789775211288480, +-0.691825879294497680, -0.691861981648141940, -0.691898082272131120, -0.691934181166375170, -0.691970278330784060, -0.692006373765266860, -0.692042467469733860, -0.692078559444094580, +-0.692114649688259310, -0.692150738202137020, -0.692186824985637990, -0.692222910038672090, -0.692258993361148710, -0.692295074952977710, -0.692331154814069150, -0.692367232944333000, +-0.692403309343678440, -0.692439384012015550, -0.692475456949254280, -0.692511528155304700, -0.692547597630075900, -0.692583665373478150, -0.692619731385421210, -0.692655795665815250, +-0.692691858214569580, -0.692727919031594140, -0.692763978116798910, -0.692800035470094170, -0.692836091091388880, -0.692872144980593460, -0.692908197137617750, -0.692944247562371720, +-0.692980296254764870, -0.693016343214707180, -0.693052388442108920, -0.693088431936879410, -0.693124473698928930, -0.693160513728167120, -0.693196552024504480, -0.693232588587850080, +-0.693268623418114130, -0.693304656515206670, -0.693340687879037910, -0.693376717509517130, -0.693412745406554620, -0.693448771570060130, -0.693484795999944060, -0.693520818696115700, +-0.693556839658485250, -0.693592858886962650, -0.693628876381458430, -0.693664892141881540, -0.693700906168142390, -0.693736918460151400, -0.693772929017817730, -0.693808937841051800, +-0.693844944929763450, -0.693880950283863100, -0.693916953903260030, -0.693952955787864530, -0.693988955937586800, -0.694024954352336910, -0.694060951032024250, -0.694096945976559350, +-0.694132939185851950, -0.694168930659812560, -0.694204920398350580, -0.694240908401376200, -0.694276894668799600, -0.694312879200531090, -0.694348861996480160, -0.694384843056556900, +-0.694420822380672040, -0.694456799968734660, -0.694492775820655270, -0.694528749936344060, -0.694564722315711200, -0.694600692958666220, -0.694636661865119520, -0.694672629034981170, +-0.694708594468161580, -0.694744558164570150, -0.694780520124117400, -0.694816480346713280, -0.694852438832268330, -0.694888395580691930, -0.694924350591894500, -0.694960303865786330, +-0.694996255402277610, -0.695032205201277950, -0.695068153262697770, -0.695104099586447480, -0.695140044172436690, -0.695175987020575810, -0.695211928130774930, -0.695247867502944540, +-0.695283805136994170, -0.695319741032834340, -0.695355675190375110, -0.695391607609527010, -0.695427538290199540, -0.695463467232303230, -0.695499394435748260, -0.695535319900445150, +-0.695571243626303510, -0.695607165613233660, -0.695643085861145870, -0.695679004369950670, -0.695714921139557680, -0.695750836169877430, -0.695786749460820090, -0.695822661012296170, +-0.695858570824215210, -0.695894478896487920, -0.695930385229024730, -0.695966289821735140, -0.696002192674530010, -0.696038093787319290, -0.696073993160013730, -0.696109890792522720, +-0.696145786684757130, -0.696181680836627010, -0.696217573248043010, -0.696253463918914850, -0.696289352849152940, -0.696325240038667690, -0.696361125487369610, -0.696397009195168340, +-0.696432891161974710, -0.696468771387698690, -0.696504649872251140, -0.696540526615541670, -0.696576401617480910, -0.696612274877979390, -0.696648146396946940, -0.696684016174293990, +-0.696719884209931140, -0.696755750503768810, -0.696791615055716850, -0.696827477865685770, -0.696863338933586100, -0.696899198259328330, -0.696935055842822230, -0.696970911683978510, +-0.697006765782707590, -0.697042618138919990, -0.697078468752525550, -0.697114317623434900, -0.697150164751558550, -0.697186010136807030, -0.697221853779090180, -0.697257695678318630, +-0.697293535834403230, -0.697329374247253720, -0.697365210916780720, -0.697401045842894750, -0.697436879025506440, -0.697472710464525520, -0.697508540159862970, -0.697544368111429060, +-0.697580194319134430, -0.697616018782889040, -0.697651841502603730, -0.697687662478188700, -0.697723481709554780, -0.697759299196611950, -0.697795114939270820, -0.697830928937441920, +-0.697866741191035980, -0.697902551699962960, -0.697938360464133490, -0.697974167483458090, -0.698009972757847600, -0.698045776287211980, -0.698081578071461760, -0.698117378110508000, +-0.698153176404260440, -0.698188972952630050, -0.698224767755527110, -0.698260560812862590, -0.698296352124546330, -0.698332141690489180, -0.698367929510601780, -0.698403715584794750, +-0.698439499912978160, -0.698475282495062850, -0.698511063330959360, -0.698546842420578410, -0.698582619763830180, -0.698618395360625310, -0.698654169210874420, -0.698689941314488470, +-0.698725711671377430, -0.698761480281452020, -0.698797247144623210, -0.698833012260801080, -0.698868775629896350, -0.698904537251819670, -0.698940297126481980, -0.698976055253793140, +-0.699011811633664220, -0.699047566266005840, -0.699083319150728850, -0.699119070287743230, -0.699154819676959920, -0.699190567318289440, -0.699226313211642970, -0.699262057356930480, +-0.699297799754062810, -0.699333540402950590, -0.699369279303504790, -0.699405016455635580, -0.699440751859253810, -0.699476485514270330, -0.699512217420595440, -0.699547947578140090, +-0.699583675986814700, -0.699619402646530550, -0.699655127557197610, -0.699690850718726720, -0.699726572131028850, -0.699762291794014720, -0.699798009707594650, -0.699833725871679580, +-0.699869440286180140, -0.699905152951007410, -0.699940863866071460, -0.699976573031283360, -0.700012280446553840, -0.700047986111793970, -0.700083690026913840, -0.700119392191824400, +-0.700155092606436820, -0.700190791270661190, -0.700226488184408580, -0.700262183347589830, -0.700297876760115790, -0.700333568421896870, -0.700369258332844020, -0.700404946492868000, +-0.700440632901879860, -0.700476317559789900, -0.700512000466509080, -0.700547681621948360, -0.700583361026018700, -0.700619038678630290, -0.700654714579694420, -0.700690388729121590, +-0.700726061126823120, -0.700761731772709280, -0.700797400666691050, -0.700833067808679380, -0.700868733198585340, -0.700904396836319110, -0.700940058721791880, -0.700975718854914830, +-0.701011377235598250, -0.701047033863753110, -0.701082688739290470, -0.701118341862121410, -0.701153993232156100, -0.701189642849305850, -0.701225290713481500, -0.701260936824594230, +-0.701296581182554330, -0.701332223787273000, -0.701367864638661080, -0.701403503736629740, -0.701439141081089400, -0.701474776671951240, -0.701510410509126100, -0.701546042592525290, +-0.701581672922058970, -0.701617301497638570, -0.701652928319175140, -0.701688553386579090, -0.701724176699761730, -0.701759798258633880, -0.701795418063106860, -0.701831036113090940, +-0.701866652408497550, -0.701902266949237410, -0.701937879735221930, -0.701973490766361510, -0.702009100042567220, -0.702044707563750260, -0.702080313329821900, -0.702115917340692340, +-0.702151519596273090, -0.702187120096474990, -0.702222718841209460, -0.702258315830386780, -0.702293911063918250, -0.702329504541715280, -0.702365096263688260, -0.702400686229748490, +-0.702436274439807050, -0.702471860893775220, -0.702507445591563420, -0.702543028533083040, -0.702578609718244930, -0.702614189146960830, -0.702649766819140820, -0.702685342734696410, +-0.702720916893538660, -0.702756489295578880, -0.702792059940727580, -0.702827628828896160, -0.702863195959995690, -0.702898761333937470, -0.702934324950632130, -0.702969886809990840, +-0.703005446911924900, -0.703041005256345720, -0.703076561843163690, -0.703112116672290230, -0.703147669743636740, -0.703183221057113840, -0.703218770612632940, -0.703254318410104990, +-0.703289864449441640, -0.703325408730553270, -0.703360951253351410, -0.703396492017747120, -0.703432031023651930, -0.703467568270976340, -0.703503103759631880, -0.703538637489529610, +-0.703574169460581160, -0.703609699672696930, -0.703645228125788340, -0.703680754819766770, -0.703716279754543650, -0.703751802930029480, -0.703787324346135890, -0.703822844002774170, +-0.703858361899855070, -0.703893878037290090, -0.703929392414990420, -0.703964905032867570, -0.704000415890832070, -0.704035924988795640, -0.704071432326669360, -0.704106937904364740, +-0.704142441721792520, -0.704177943778864220, -0.704213444075491140, -0.704248942611584660, -0.704284439387055540, -0.704319934401815280, -0.704355427655775190, -0.704390919148846880, +-0.704426408880940880, -0.704461896851968920, -0.704497383061842620, -0.704532867510472390, -0.704568350197770090, -0.704603831123646880, -0.704639310288014410, -0.704674787690783400, +-0.704710263331865370, -0.704745737211171620, -0.704781209328613990, -0.704816679684102890, -0.704852148277550160, -0.704887615108866990, -0.704923080177965230, -0.704958543484755400, +-0.704994005029149110, -0.705029464811057880, -0.705064922830393350, -0.705100379087066130, -0.705135833580987970, -0.705171286312070600, -0.705206737280224650, -0.705242186485361850, +-0.705277633927393620, -0.705313079606231570, -0.705348523521786560, -0.705383965673970210, -0.705419406062694040, -0.705454844687869560, -0.705490281549407630, -0.705525716647220080, +-0.705561149981218220, -0.705596581551313770, -0.705632011357417600, -0.705667439399441320, -0.705702865677296560, -0.705738290190894850, -0.705773712940147120, -0.705809133924965140, +-0.705844553145260290, -0.705879970600944430, -0.705915386291928290, -0.705950800218123620, -0.705986212379442370, -0.706021622775795170, -0.706057031407093970, -0.706092438273250190, +-0.706127843374175670, -0.706163246709781140, -0.706198648279978580, -0.706234048084679380, -0.706269446123795390, -0.706304842397237450, -0.706340236904917430, -0.706375629646746720, +-0.706411020622637280, -0.706446409832500070, -0.706481797276246710, -0.706517182953788960, -0.706552566865038530, -0.706587949009906400, -0.706623329388304300, -0.706658708000144300, +-0.706694084845337130, -0.706729459923794880, -0.706764833235428820, -0.706800204780151150, -0.706835574557872490, -0.706870942568505020, -0.706906308811960150, -0.706941673288149830, +-0.706977035996984910, -0.707012396938377590, -0.707047756112239130, -0.707083113518481630, -0.707118469157016040, -0.707153823027754310, -0.707189175130607970, -0.707224525465489080, +-0.707259874032308500, -0.707295220830978180, -0.707330565861410300, -0.707365909123515490, -0.707401250617206050, -0.707436590342393480, -0.707471928298989640, -0.707507264486905710, +-0.707542598906053750, -0.707577931556345190, -0.707613262437692070, -0.707648591550005480, -0.707683918893197480, -0.707719244467179600, -0.707754568271864000, -0.707789890307161660, +-0.707825210572984640, -0.707860529069244460, -0.707895845795853410, -0.707931160752722330, -0.707966473939763310, -0.708001785356888180, -0.708037095004008910, -0.708072402881036570, +-0.708107708987883220, -0.708143013324460950, -0.708178315890680810, -0.708213616686454880, -0.708248915711694900, -0.708284212966312940, -0.708319508450220180, -0.708354802163328690, +-0.708390094105549980, -0.708425384276796580, -0.708460672676979320, -0.708495959306010390, -0.708531244163801530, -0.708566527250264810, -0.708601808565311520, -0.708637088108853730, +-0.708672365880803290, -0.708707641881072160, -0.708742916109571630, -0.708778188566213770, -0.708813459250910880, -0.708848728163573920, -0.708883995304115170, -0.708919260672446370, +-0.708954524268479820, -0.708989786092126590, -0.709025046143298980, -0.709060304421908590, -0.709095560927867850, -0.709130815661087930, -0.709166068621480910, -0.709201319808958730, +-0.709236569223433590, -0.709271816864816770, -0.709307062733020350, -0.709342306827956180, -0.709377549149536660, -0.709412789697672960, -0.709448028472277280, -0.709483265473261790, +-0.709518500700537900, -0.709553734154017680, -0.709588965833613190, -0.709624195739236630, -0.709659423870799170, -0.709694650228213210, -0.709729874811390600, -0.709765097620243650, +-0.709800318654683520, -0.709835537914622730, -0.709870755399973020, -0.709905971110646790, -0.709941185046555350, -0.709976397207610850, -0.710011607593725390, -0.710046816204811250, +-0.710082023040779720, -0.710117228101543210, -0.710152431387013560, -0.710187632897103180, -0.710222832631723370, -0.710258030590786520, -0.710293226774204920, -0.710328421181889880, +-0.710363613813753790, -0.710398804669708730, -0.710433993749666870, -0.710469181053539730, -0.710504366581239720, -0.710539550332678790, -0.710574732307769240, -0.710609912506422580, +-0.710645090928551100, -0.710680267574066880, -0.710715442442882430, -0.710750615534908920, -0.710785786850059000, -0.710820956388244500, -0.710856124149377930, -0.710891290133370820, +-0.710926454340135350, -0.710961616769584140, -0.710996777421628590, -0.711031936296181110, -0.711067093393153770, -0.711102248712458970, -0.711137402254008340, -0.711172554017714060, +-0.711207704003488540, -0.711242852211243950, -0.711277998640892030, -0.711313143292345070, -0.711348286165515260, -0.711383427260315000, -0.711418566576655920, -0.711453704114450300, +-0.711488839873610560, -0.711523973854048860, -0.711559106055677180, -0.711594236478407580, -0.711629365122152690, -0.711664491986824020, -0.711699617072334200, -0.711734740378595410, +-0.711769861905519940, -0.711804981653019640, -0.711840099621006810, -0.711875215809393720, -0.711910330218092910, -0.711945442847016000, -0.711980553696075490, -0.712015662765183470, +-0.712050770054252660, -0.712085875563194690, -0.712120979291921970, -0.712156081240346910, -0.712191181408381780, -0.712226279795938550, -0.712261376402929520, -0.712296471229267420, +-0.712331564274863770, -0.712366655539631300, -0.712401745023482080, -0.712436832726328850, -0.712471918648083240, -0.712507002788657860, -0.712542085147964910, -0.712577165725917120, +-0.712612244522426110, -0.712647321537404400, -0.712682396770764500, -0.712717470222418830, -0.712752541892279210, -0.712787611780258290, -0.712822679886268240, -0.712857746210221800, +-0.712892810752030700, -0.712927873511607690, -0.712962934488864830, -0.712997993683715080, -0.713033051096069960, -0.713068106725842200, -0.713103160572944540, -0.713138212637288720, +-0.713173262918787240, -0.713208311417352640, -0.713243358132897630, -0.713278403065333850, -0.713313446214574150, -0.713348487580530710, -0.713383527163116480, -0.713418564962243100, +-0.713453600977823180, -0.713488635209769350, -0.713523667657994240, -0.713558698322409700, -0.713593727202928350, -0.713628754299462710, -0.713663779611925510, -0.713698803140228490, +-0.713733824884284500, -0.713768844844006270, -0.713803863019305540, -0.713838879410095270, -0.713873894016287760, -0.713908906837795840, -0.713943917874531260, -0.713978927126406980, +-0.714013934593335400, -0.714048940275229250, -0.714083944172000380, -0.714118946283561760, -0.714153946609825670, -0.714188945150705080, -0.714223941906111830, -0.714258936875958650, +-0.714293930060158290, -0.714328921458623260, -0.714363911071265620, -0.714398898897998240, -0.714433884938733940, -0.714468869193384590, -0.714503851661863140, -0.714538832344082000, +-0.714573811239954000, -0.714608788349391340, -0.714643763672306640, -0.714678737208612520, -0.714713708958221840, -0.714748678921046650, -0.714783647096999710, -0.714818613485993630, +-0.714853578087941370, -0.714888540902754780, -0.714923501930346930, -0.714958461170630330, -0.714993418623517840, -0.715028374288921520, -0.715063328166754220, -0.715098280256928680, +-0.715133230559357620, -0.715168179073953250, -0.715203125800628500, -0.715238070739296240, -0.715273013889868410, -0.715307955252257990, -0.715342894826377810, -0.715377832612140610, +-0.715412768609458680, -0.715447702818244660, -0.715482635238411380, -0.715517565869871920, -0.715552494712538230, -0.715587421766323280, -0.715622347031139800, -0.715657270506900640, +-0.715692192193518100, -0.715727112090905120, -0.715762030198974220, -0.715796946517638700, -0.715831861046810400, -0.715866773786402510, -0.715901684736327980, -0.715936593896499000, +-0.715971501266828400, -0.716006406847229160, -0.716041310637614110, -0.716076212637895450, -0.716111112847986450, -0.716146011267799530, -0.716180907897247860, -0.716215802736243630, +-0.716250695784700020, -0.716285587042529540, -0.716320476509645370, -0.716355364185959800, -0.716390250071385900, -0.716425134165836200, -0.716460016469224080, -0.716494896981461520, +-0.716529775702461790, -0.716564652632137870, -0.716599527770402030, -0.716634401117167470, -0.716669272672346810, -0.716704142435853230, -0.716739010407599130, -0.716773876587497360, +-0.716808740975460990, -0.716843603571403090, -0.716878464375235720, -0.716913323386872410, -0.716948180606225670, -0.716983036033208790, -0.717017889667734050, -0.717052741509714540, +-0.717087591559063210, -0.717122439815693240, -0.717157286279516800, -0.717192130950447090, -0.717226973828397400, -0.717261814913280120, -0.717296654205008100, -0.717331491703494530, +-0.717366327408652580, -0.717401161320394440, -0.717435993438633400, -0.717470823763282420, -0.717505652294254670, -0.717540479031462560, -0.717575303974819170, -0.717610127124237440, +-0.717644948479630780, -0.717679768040911490, -0.717714585807992740, -0.717749401780787500, -0.717784215959209050, -0.717819028343169800, -0.717853838932582920, -0.717888647727361500, +-0.717923454727418810, -0.717958259932667040, -0.717993063343019710, -0.718027864958390110, -0.718062664778690410, -0.718097462803834130, -0.718132259033734120, -0.718167053468303780, +-0.718201846107455520, -0.718236636951102620, -0.718271425999158280, -0.718306213251535430, -0.718340998708146940, -0.718375782368905870, -0.718410564233725400, -0.718445344302518720, +-0.718480122575198440, -0.718514899051677870, -0.718549673731870060, -0.718584446615688320, -0.718619217703045150, -0.718653986993853970, -0.718688754488028160, -0.718723520185480140, +-0.718758284086123300, -0.718793046189870720, -0.718827806496635910, -0.718862565006331280, -0.718897321718870110, -0.718932076634165810, -0.718966829752131440, -0.719001581072679860, +-0.719036330595724250, -0.719071078321177780, -0.719105824248953970, -0.719140568378965230, -0.719175310711125170, -0.719210051245346760, -0.719244789981543620, -0.719279526919628040, +-0.719314262059513760, -0.719348995401114080, -0.719383726944341720, -0.719418456689109980, -0.719453184635332030, -0.719487910782921510, -0.719522635131790820, -0.719557357681853580, +-0.719592078433022970, -0.719626797385212400, -0.719661514538334600, -0.719696229892303090, -0.719730943447030810, -0.719765655202431630, -0.719800365158417940, -0.719835073314903370, +-0.719869779671801100, -0.719904484229024640, -0.719939186986486730, -0.719973887944100890, -0.720008587101780280, -0.720043284459438440, -0.720077980016988200, -0.720112673774342960, +-0.720147365731416360, -0.720182055888121010, -0.720216744244370540, -0.720251430800078250, -0.720286115555157650, -0.720320798509521350, -0.720355479663083220, -0.720390159015756320, +-0.720424836567454370, -0.720459512318089910, -0.720494186267576770, -0.720528858415828140, -0.720563528762757640, -0.720598197308278010, -0.720632864052302980, -0.720667528994745730, +-0.720702192135519890, -0.720736853474538420, -0.720771513011714720, -0.720806170746962520, -0.720840826680194670, -0.720875480811324690, -0.720910133140266090, -0.720944783666932270, +-0.720979432391236410, -0.721014079313091800, -0.721048724432412080, -0.721083367749110860, -0.721118009263100880, -0.721152648974295980, -0.721187286882609250, -0.721221922987954840, +-0.721256557290245180, -0.721291189789394100, -0.721325820485315130, -0.721360449377921880, -0.721395076467127190, -0.721429701752844820, -0.721464325234988600, -0.721498946913471160, +-0.721533566788206350, -0.721568184859107680, -0.721602801126088770, -0.721637415589062580, -0.721672028247942850, -0.721706639102643100, -0.721741248153076940, -0.721775855399157450, +-0.721810460840798360, -0.721845064477913080, -0.721879666310415450, -0.721914266338218310, -0.721948864561235530, -0.721983460979380600, -0.722018055592567260, -0.722052648400708490, +-0.722087239403718220, -0.722121828601509970, -0.722156415993997050, -0.722191001581092950, -0.722225585362711420, -0.722260167338766190, -0.722294747509170220, -0.722329325873837360, +-0.722363902432681230, -0.722398477185615670, -0.722433050132553540, -0.722467621273408910, -0.722502190608095060, -0.722536758136526180, -0.722571323858615000, -0.722605887774275590, +-0.722640449883421470, -0.722675010185966470, -0.722709568681823680, -0.722744125370906930, -0.722778680253129860, -0.722813233328406410, -0.722847784596649670, -0.722882334057773360, +-0.722916881711691550, -0.722951427558317210, -0.722985971597564390, -0.723020513829346510, -0.723055054253577740, -0.723089592870170940, -0.723124129679040270, -0.723158664680099150, +-0.723193197873261750, -0.723227729258441140, -0.723262258835551060, -0.723296786604505360, -0.723331312565218100, -0.723365836717602130, -0.723400359061571630, -0.723434879597040230, +-0.723469398323921880, -0.723503915242129870, -0.723538430351577940, -0.723572943652180280, -0.723607455143849940, -0.723641964826500890, -0.723676472700047090, -0.723710978764402270, +-0.723745483019479830, -0.723779985465193620, -0.723814486101457490, -0.723848984928185390, -0.723883481945290510, -0.723917977152686910, -0.723952470550288440, -0.723986962138009170, +-0.724021451915762060, -0.724055939883461290, -0.724090426041020810, -0.724124910388354470, -0.724159392925375570, -0.724193873651998170, -0.724228352568136450, -0.724262829673703480, +-0.724297304968613440, -0.724331778452780180, -0.724366250126117770, -0.724400719988539390, -0.724435188039959320, -0.724469654280291200, -0.724504118709449200, -0.724538581327346610, +-0.724573042133897620, -0.724607501129016060, -0.724641958312616020, -0.724676413684610780, -0.724710867244914510, -0.724745318993440970, -0.724779768930104540, -0.724814217054818410, +-0.724848663367496650, -0.724883107868053320, -0.724917550556402390, -0.724951991432457370, -0.724986430496132430, -0.725020867747341650, -0.725055303185998420, -0.725089736812016940, +-0.725124168625311040, -0.725158598625795130, -0.725193026813382380, -0.725227453187986980, -0.725261877749523000, -0.725296300497904720, -0.725330721433045330, -0.725365140554859120, +-0.725399557863260050, -0.725433973358162400, -0.725468387039479470, -0.725502798907125660, -0.725537208961014810, -0.725571617201061230, -0.725606023627178300, -0.725640428239280320, +-0.725674831037281590, -0.725709232021095390, -0.725743631190636230, -0.725778028545817970, -0.725812424086554890, -0.725846817812760500, -0.725881209724349000, -0.725915599821234550, +-0.725949988103331450, -0.725984374570552980, -0.726018759222813560, -0.726053142060027360, -0.726087523082108440, -0.726121902288970440, -0.726156279680527870, -0.726190655256694460, +-0.726225029017384730, -0.726259400962512070, -0.726293771091991000, -0.726328139405735710, -0.726362505903659810, -0.726396870585677700, -0.726431233451703350, -0.726465594501651270, +-0.726499953735434860, -0.726534311152968630, -0.726568666754166540, -0.726603020538943100, -0.726637372507211830, -0.726671722658887130, -0.726706070993883180, -0.726740417512114270, +-0.726774762213494020, -0.726809105097936840, -0.726843446165357010, -0.726877785415668830, -0.726912122848785810, -0.726946458464622580, -0.726980792263093420, -0.727015124244111970, +-0.727049454407592830, -0.727083782753449980, -0.727118109281597920, -0.727152433991950400, -0.727186756884421690, -0.727221077958926100, -0.727255397215378130, -0.727289714653691410, +-0.727324030273780340, -0.727358344075559220, -0.727392656058942540, -0.727426966223843950, -0.727461274570177950, -0.727495581097858720, -0.727529885806800890, -0.727564188696917970, +-0.727598489768124690, -0.727632789020335120, -0.727667086453463900, -0.727701382067424630, -0.727735675862131840, -0.727769967837500250, -0.727804257993443390, -0.727838546329875990, +-0.727872832846712110, -0.727907117543866500, -0.727941400421252770, -0.727975681478785660, -0.728009960716379250, -0.728044238133948250, -0.728078513731406310, -0.728112787508668150, +-0.728147059465647950, -0.728181329602260450, -0.728215597918419280, -0.728249864414039160, -0.728284129089034390, -0.728318391943319600, -0.728352652976808510, -0.728386912189415760, +-0.728421169581056070, -0.728455425151643080, -0.728489678901091620, -0.728523930829315880, -0.728558180936230810, -0.728592429221749830, -0.728626675685787760, -0.728660920328259020, +-0.728695163149078340, -0.728729404148159340, -0.728763643325416990, -0.728797880680765340, -0.728832116214119360, -0.728866349925392900, -0.728900581814500460, -0.728934811881356560, +-0.728969040125875930, -0.729003266547972430, -0.729037491147560780, -0.729071713924555720, -0.729105934878871100, -0.729140154010421540, -0.729174371319121660, -0.729208586804886090, +-0.729242800467628790, -0.729277012307264490, -0.729311222323707710, -0.729345430516873170, -0.729379636886674730, -0.729413841433027120, -0.729448044155844970, -0.729482245055043000, +-0.729516444130535180, -0.729550641382236130, -0.729584836810060590, -0.729619030413923180, -0.729653222193737960, -0.729687412149419680, -0.729721600280882840, -0.729755786588042300, +-0.729789971070812000, -0.729824153729106690, -0.729858334562841440, -0.729892513571929970, -0.729926690756287240, -0.729960866115827670, -0.729995039650466420, -0.730029211360117230, +-0.730063381244694940, -0.730097549304114190, -0.730131715538289930, -0.730165879947136110, -0.730200042530567470, -0.730234203288498860, -0.730268362220845010, -0.730302519327519880, +-0.730336674608438540, -0.730370828063515390, -0.730404979692665600, -0.730439129495803030, -0.730473277472842520, -0.730507423623699250, -0.730541567948287060, -0.730575710446521030, +-0.730609851118315670, -0.730643989963585930, -0.730678126982245990, -0.730712262174210700, -0.730746395539394800, -0.730780527077713130, -0.730814656789079970, -0.730848784673409970, +-0.730882910730618170, -0.730917034960619330, -0.730951157363327610, -0.730985277938658080, -0.731019396686525270, -0.731053513606844340, -0.731087628699529260, -0.731121741964495090, +-0.731155853401656900, -0.731189963010928760, -0.731224070792225730, -0.731258176745462450, -0.731292280870554200, -0.731326383167414830, -0.731360483635959510, -0.731394582276102990, +-0.731428679087760330, -0.731462774070845700, -0.731496867225273960, -0.731530958550960290, -0.731565048047819410, -0.731599135715765620, -0.731633221554713890, -0.731667305564579260, +-0.731701387745276600, -0.731735468096720190, -0.731769546618825100, -0.731803623311506500, -0.731837698174678470, -0.731871771208256190, -0.731905842412154510, -0.731939911786288590, +-0.731973979330572510, -0.732008045044921450, -0.732042108929250370, -0.732076170983474220, -0.732110231207507400, -0.732144289601264990, -0.732178346164661820, -0.732212400897613190, +-0.732246453800033170, -0.732280504871837050, -0.732314554112939660, -0.732348601523256200, -0.732382647102700850, -0.732416690851188990, -0.732450732768635370, -0.732484772854955170, +-0.732518811110062900, -0.732552847533873400, -0.732586882126302190, -0.732620914887263440, -0.732654945816672450, -0.732688974914444070, -0.732723002180493470, -0.732757027614735160, +-0.732791051217084210, -0.732825072987455690, -0.732859092925764790, -0.732893111031925890, -0.732927127305854190, -0.732961141747464630, -0.732995154356672510, -0.733029165133392220, +-0.733063174077539070, -0.733097181189027890, -0.733131186467774200, -0.733165189913692170, -0.733199191526697100, -0.733233191306704390, -0.733267189253628440, -0.733301185367384530, +-0.733335179647887640, -0.733369172095053030, -0.733403162708795240, -0.733437151489029550, -0.733471138435671020, -0.733505123548634840, -0.733539106827835630, -0.733573088273188680, +-0.733607067884608940, -0.733641045662011830, -0.733675021605311840, -0.733708995714424270, -0.733742967989264310, -0.733776938429747120, -0.733810907035787330, -0.733844873807300240, +-0.733878838744201230, -0.733912801846404950, -0.733946763113826560, -0.733980722546381250, -0.734014680143984520, -0.734048635906550780, -0.734082589833995440, -0.734116541926233550, +-0.734150492183180740, -0.734184440604751300, -0.734218387190860740, -0.734252331941424250, -0.734286274856357220, -0.734320215935574280, -0.734354155178990720, -0.734388092586521820, +-0.734422028158082880, -0.734455961893588750, -0.734489893792954600, -0.734523823856095710, -0.734557752082927620, -0.734591678473364710, -0.734625603027322830, -0.734659525744717050, +-0.734693446625462210, -0.734727365669473830, -0.734761282876666980, -0.734795198246957160, -0.734829111780259110, -0.734863023476488240, -0.734896933335559940, -0.734930841357389510, +-0.734964747541891560, -0.734998651888981950, -0.735032554398575620, -0.735066455070588210, -0.735100353904934330, -0.735134250901529620, -0.735168146060289240, -0.735202039381128820, +-0.735235930863962990, -0.735269820508707370, -0.735303708315277470, -0.735337594283587910, -0.735371478413554550, -0.735405360705092330, -0.735439241158117100, -0.735473119772543370, +-0.735506996548287000, -0.735540871485263040, -0.735574744583387230, -0.735608615842574200, -0.735642485262739680, -0.735676352843798950, -0.735710218585667650, -0.735744082488260510, +-0.735777944551493150, -0.735811804775280850, -0.735845663159539360, -0.735879519704183530, -0.735913374409128850, -0.735947227274290960, -0.735981078299584810, -0.736014927484925810, +-0.736048774830229680, -0.736082620335411830, -0.736116464000387110, -0.736150305825071240, -0.736184145809379630, -0.736217983953227910, -0.736251820256530910, -0.736285654719204370, +-0.736319487341163810, -0.736353318122324740, -0.736387147062602110, -0.736420974161911550, -0.736454799420168560, -0.736488622837289000, -0.736522444413187480, -0.736556264147779860, +-0.736590082040981860, -0.736623898092708340, -0.736657712302875130, -0.736691524671397650, -0.736725335198191610, -0.736759143883171990, -0.736792950726254390, -0.736826755727354570, +-0.736860558886388020, -0.736894360203269820, -0.736928159677915810, -0.736961957310241280, -0.736995753100162190, -0.737029547047593490, -0.737063339152450810, -0.737097129414649890, +-0.737130917834106340, -0.737164704410735340, -0.737198489144452410, -0.737232272035173390, -0.737266053082813900, -0.737299832287289010, -0.737333609648514580, -0.737367385166406430, +-0.737401158840879420, -0.737434930671849620, -0.737468700659232420, -0.737502468802943790, -0.737536235102898670, -0.737569999559013030, -0.737603762171202380, -0.737637522939382560, +-0.737671281863468640, -0.737705038943376580, -0.737738794179021880, -0.737772547570320510, -0.737806299117187430, -0.737840048819538690, -0.737873796677289700, -0.737907542690356630, +-0.737941286858654340, -0.737975029182098900, -0.738008769660606130, -0.738042508294091130, -0.738076245082469830, -0.738109980025658090, -0.738143713123571520, -0.738177444376125420, +-0.738211173783235750, -0.738244901344818130, -0.738278627060788510, -0.738312350931062070, -0.738346072955554660, -0.738379793134182230, -0.738413511466860520, -0.738447227953504700, +-0.738480942594030850, -0.738514655388354700, -0.738548366336392090, -0.738582075438058430, -0.738615782693269440, -0.738649488101941310, -0.738683191663989210, -0.738716893379329110, +-0.738750593247876840, -0.738784291269548250, -0.738817987444258750, -0.738851681771924170, -0.738885374252460480, -0.738919064885783630, -0.738952753671808790, -0.738986440610452160, +-0.739020125701629340, -0.739053808945256520, -0.739087490341248880, -0.739121169889522590, -0.739154847589993280, -0.739188523442577130, -0.739222197447189420, -0.739255869603746230, +-0.739289539912163400, -0.739323208372356880, -0.739356874984242190, -0.739390539747735280, -0.739424202662752330, -0.739457863729208520, -0.739491522947020030, -0.739525180316102810, +-0.739558835836372830, -0.739592489507745590, -0.739626141330137040, -0.739659791303463150, -0.739693439427640210, -0.739727085702583160, -0.739760730128208530, -0.739794372704432050, +-0.739828013431170000, -0.739861652308337450, -0.739895289335850910, -0.739928924513626130, -0.739962557841579270, -0.739996189319625740, -0.740029818947681830, -0.740063446725663600, +-0.740097072653486450, -0.740130696731066570, -0.740164318958320020, -0.740197939335162980, -0.740231557861510740, -0.740265174537279690, -0.740298789362385580, -0.740332402336744910, +-0.740366013460272860, -0.740399622732885840, -0.740433230154499690, -0.740466835725030800, -0.740500439444394480, -0.740534041312507220, -0.740567641329284650, -0.740601239494643400, +-0.740634835808498760, -0.740668430270766900, -0.740702022881364440, -0.740735613640206570, -0.740769202547209570, -0.740802789602289740, -0.740836374805363020, -0.740869958156345270, +-0.740903539655152430, -0.740937119301700810, -0.740970697095906790, -0.741004273037685680, -0.741037847126953860, -0.741071419363627410, -0.741104989747622730, -0.741138558278855220, +-0.741172124957241380, -0.741205689782697300, -0.741239252755139240, -0.741272813874482630, -0.741306373140644070, -0.741339930553539860, -0.741373486113085620, -0.741407039819197640, +-0.741440591671791990, -0.741474141670785180, -0.741507689816092720, -0.741541236107631010, -0.741574780545316230, -0.741608323129064770, -0.741641863858792270, -0.741675402734415120, +-0.741708939755849390, -0.741742474923011710, -0.741776008235817350, -0.741809539694183170, -0.741843069298025130, -0.741876597047259610, -0.741910122941802360, -0.741943646981569780, +-0.741977169166478050, -0.742010689496443780, -0.742044207971382490, -0.742077724591210570, -0.742111239355844780, -0.742144752265200490, -0.742178263319194340, -0.742211772517742510, +-0.742245279860761610, -0.742278785348167160, -0.742312288979875780, -0.742345790755803650, -0.742379290675867280, -0.742412788739982510, -0.742446284948065750, -0.742479779300033170, +-0.742513271795801620, -0.742546762435286390, -0.742580251218404430, -0.742613738145071810, -0.742647223215205040, -0.742680706428719970, -0.742714187785533220, -0.742747667285561190, +-0.742781144928719610, -0.742814620714925320, -0.742848094644094510, -0.742881566716143580, -0.742915036930988590, -0.742948505288545950, -0.742981971788732040, -0.743015436431463620, +-0.743048899216656180, -0.743082360144226460, -0.743115819214090980, -0.743149276426166130, -0.743182731780367870, -0.743216185276612710, -0.743249636914817160, -0.743283086694897730, +-0.743316534616770390, -0.743349980680351630, -0.743383424885558310, -0.743416867232306040, -0.743450307720511570, -0.743483746350091400, -0.743517183120962160, -0.743550618033039680, +-0.743584051086240590, -0.743617482280481410, -0.743650911615678870, -0.743684339091748690, -0.743717764708607730, -0.743751188466172270, -0.743784610364359170, -0.743818030403084250, +-0.743851448582264260, -0.743884864901815710, -0.743918279361655220, -0.743951691961698750, -0.743985102701863020, -0.744018511582064560, -0.744051918602220090, -0.744085323762245570, +-0.744118727062057730, -0.744152128501573420, -0.744185528080708480, -0.744218925799379650, -0.744252321657503440, -0.744285715654996900, -0.744319107791775680, -0.744352498067756720, +-0.744385886482856530, -0.744419273036991850, -0.744452657730078740, -0.744486040562033930, -0.744519421532774170, -0.744552800642215960, -0.744586177890275590, -0.744619553276869680, +-0.744652926801914970, -0.744686298465328190, -0.744719668267025400, -0.744753036206923460, -0.744786402284939200, -0.744819766500988580, -0.744853128854988670, -0.744886489346855860, +-0.744919847976507010, -0.744953204743858400, -0.744986559648826760, -0.745019912691328720, -0.745053263871281120, -0.745086613188600140, -0.745119960643202630, -0.745153306235005200, +-0.745186649963924810, -0.745219991829877420, -0.745253331832780200, -0.745286669972549440, -0.745320006249102550, -0.745353340662355150, -0.745386673212224520, -0.745420003898627390, +-0.745453332721480070, -0.745486659680699380, -0.745519984776202070, -0.745553308007904980, -0.745586629375724400, -0.745619948879577280, -0.745653266519380240, -0.745686582295050360, +-0.745719896206503700, -0.745753208253657320, -0.745786518436427960, -0.745819826754732460, -0.745853133208487230, -0.745886437797609100, -0.745919740522014930, -0.745953041381621770, +-0.745986340376345590, -0.746019637506103560, -0.746052932770812750, -0.746086226170389330, -0.746119517704750380, -0.746152807373812510, -0.746186095177493120, -0.746219381115708070, +-0.746252665188374520, -0.746285947395409320, -0.746319227736729650, -0.746352506212251580, -0.746385782821892270, -0.746419057565568370, -0.746452330443197250, -0.746485601454695000, +-0.746518870599978680, -0.746552137878965240, -0.746585403291571750, -0.746618666837714380, -0.746651928517310440, -0.746685188330276640, -0.746718446276530170, -0.746751702355987200, +-0.746784956568565140, -0.746818208914180940, -0.746851459392750770, -0.746884708004192150, -0.746917954748421600, -0.746951199625356610, -0.746984442634913260, -0.747017683777008830, +-0.747050923051560070, -0.747084160458484470, -0.747117395997698000, -0.747150629669118160, -0.747183861472661690, -0.747217091408245880, -0.747250319475787130, -0.747283545675202500, +-0.747316770006408950, -0.747349992469323880, -0.747383213063863460, -0.747416431789944990, -0.747449648647485860, -0.747482863636402150, -0.747516076756611470, -0.747549288008030440, +-0.747582497390576470, -0.747615704904166070, -0.747648910548716410, -0.747682114324144440, -0.747715316230367470, -0.747748516267301880, -0.747781714434865070, -0.747814910732973900, +-0.747848105161545870, -0.747881297720497160, -0.747914488409745280, -0.747947677229207190, -0.747980864178800160, -0.748014049258440620, -0.748047232468046050, -0.748080413807533650, +-0.748113593276819920, -0.748146770875822260, -0.748179946604457520, -0.748213120462643320, -0.748246292450296060, -0.748279462567333020, -0.748312630813671390, -0.748345797189228450, +-0.748378961693920600, -0.748412124327665460, -0.748445285090380000, -0.748478443981981600, -0.748511601002386780, -0.748544756151513060, -0.748577909429277380, -0.748611060835597140, +-0.748644210370389080, -0.748677358033570490, -0.748710503825058440, -0.748743647744770420, -0.748776789792623080, -0.748809929968533570, -0.748843068272419750, -0.748876204704197910, +-0.748909339263785560, -0.748942471951099750, -0.748975602766058120, -0.749008731708577180, -0.749041858778574430, -0.749074983975967060, -0.749108107300672450, -0.749141228752607360, +-0.749174348331689170, -0.749207466037835170, -0.749240581870962650, -0.749273695830988460, -0.749306807917830110, -0.749339918131404660, -0.749373026471629730, -0.749406132938421950, +-0.749439237531698720, -0.749472340251377770, -0.749505441097375710, -0.749538540069610070, -0.749571637167998130, -0.749604732392457280, -0.749637825742904270, -0.749670917219256720, +-0.749704006821431900, -0.749737094549347340, -0.749770180402919870, -0.749803264382066900, -0.749836346486705720, -0.749869426716753940, -0.749902505072128300, -0.749935581552746420, +-0.749968656158525590, -0.750001728889383430, -0.750034799745236680, -0.750067868726002950, -0.750100935831599760, -0.750134001061943940, -0.750167064416953130, -0.750200125896544720, +-0.750233185500636220, -0.750266243229144480, -0.750299299081987110, -0.750332353059081520, -0.750365405160345330, -0.750398455385695380, -0.750431503735049300, -0.750464550208324370, +-0.750497594805438430, -0.750530637526308220, -0.750563678370851360, -0.750596717338985360, -0.750629754430627740, -0.750662789645695550, -0.750695822984106420, -0.750728854445777640, +-0.750761884030627050, -0.750794911738571490, -0.750827937569528590, -0.750860961523416190, -0.750893983600151140, -0.750927003799651050, -0.750960022121833440, -0.750993038566616030, +-0.751026053133915910, -0.751059065823650450, -0.751092076635737520, -0.751125085570094500, -0.751158092626638570, -0.751191097805287370, -0.751224101105958500, -0.751257102528569700, +-0.751290102073037810, -0.751323099739280580, -0.751356095527215610, -0.751389089436760750, -0.751422081467832960, -0.751455071620349860, -0.751488059894229400, -0.751521046289388430, +-0.751554030805744900, -0.751587013443216320, -0.751619994201720430, -0.751652973081174290, -0.751685950081495750, -0.751718925202602420, -0.751751898444411930, -0.751784869806841450, +-0.751817839289808720, -0.751850806893231470, -0.751883772617027550, -0.751916736461113900, -0.751949698425408260, -0.751982658509828480, -0.752015616714292400, -0.752048573038716860, +-0.752081527483019930, -0.752114480047119560, -0.752147430730932600, -0.752180379534377110, -0.752213326457370600, -0.752246271499831140, -0.752279214661675690, -0.752312155942822190, +-0.752345095343188270, -0.752378032862692000, -0.752410968501250330, -0.752443902258781220, -0.752476834135202280, -0.752509764130431690, -0.752542692244386300, -0.752575618476984180, +-0.752608542828143050, -0.752641465297780870, -0.752674385885814700, -0.752707304592162620, -0.752740221416742460, -0.752773136359471520, -0.752806049420267740, -0.752838960599048760, +-0.752871869895732740, -0.752904777310236860, -0.752937682842478970, -0.752970586492376800, -0.753003488259848420, -0.753036388144811110, -0.753069286147182830, -0.753102182266881300, +-0.753135076503824720, -0.753167968857930030, -0.753200859329115510, -0.753233747917298800, -0.753266634622397960, -0.753299519444330270, -0.753332402383013800, -0.753365283438366400, +-0.753398162610305900, -0.753431039898749820, -0.753463915303616230, -0.753496788824822960, -0.753529660462287530, -0.753562530215928010, -0.753595398085662000, -0.753628264071407930, +-0.753661128173082840, -0.753693990390604920, -0.753726850723892010, -0.753759709172862280, -0.753792565737433030, -0.753825420417522320, -0.753858273213048100, -0.753891124123928450, +-0.753923973150080750, -0.753956820291423080, -0.753989665547873390, -0.754022508919349850, -0.754055350405769650, -0.754088190007051180, -0.754121027723112400, -0.754153863553870930, +-0.754186697499244610, -0.754219529559151610, -0.754252359733510120, -0.754285188022237430, -0.754318014425251810, -0.754350838942471120, -0.754383661573813540, -0.754416482319196670, +-0.754449301178538480, -0.754482118151757030, -0.754514933238770610, -0.754547746439496620, -0.754580557753853240, -0.754613367181758420, -0.754646174723130560, -0.754678980377886830, +-0.754711784145945750, -0.754744586027225490, -0.754777386021643460, -0.754810184129117930, -0.754842980349567090, -0.754875774682908900, -0.754908567129061070, -0.754941357687941910, +-0.754974146359469240, -0.755006933143561490, -0.755039718040136140, -0.755072501049111500, -0.755105282170405620, -0.755138061403936800, -0.755170838749622540, -0.755203614207381250, +-0.755236387777130870, -0.755269159458789810, -0.755301929252275570, -0.755334697157506450, -0.755367463174400620, -0.755400227302876480, -0.755432989542851430, -0.755465749894243870, +-0.755498508356972300, -0.755531264930954130, -0.755564019616107860, -0.755596772412351460, -0.755629523319603540, -0.755662272337781380, -0.755695019466803620, -0.755727764706588310, +-0.755760508057053750, -0.755793249518117770, -0.755825989089698670, -0.755858726771714510, -0.755891462564083900, -0.755924196466724260, -0.755956928479554200, -0.755989658602491790, +-0.756022386835455640, -0.756055113178363050, -0.756087837631132850, -0.756120560193683120, -0.756153280865931920, -0.756185999647797420, -0.756218716539197920, -0.756251431540051920, +-0.756284144650277050, -0.756316855869791920, -0.756349565198514600, -0.756382272636363600, -0.756414978183256650, -0.756447681839112260, -0.756480383603848620, -0.756513083477384330, +-0.756545781459637130, -0.756578477550525320, -0.756611171749967500, -0.756643864057881870, -0.756676554474186360, -0.756709242998799600, -0.756741929631639780, -0.756774614372625050, +-0.756807297221673610, -0.756839978178704080, -0.756872657243635060, -0.756905334416383860, -0.756938009696869420, -0.756970683085009810, -0.757003354580723540, -0.757036024183928900, +-0.757068691894544290, -0.757101357712487880, -0.757134021637678070, -0.757166683670033150, -0.757199343809471510, -0.757232002055911680, -0.757264658409272260, -0.757297312869470660, +-0.757329965436425830, -0.757362616110056620, -0.757395264890280310, -0.757427911777015740, -0.757460556770181540, -0.757493199869695880, -0.757525841075477160, -0.757558480387443890, +-0.757591117805514470, -0.757623753329607190, -0.757656386959640660, -0.757689018695532960, -0.757721648537202810, -0.757754276484569170, -0.757786902537549210, -0.757819526696062010, +-0.757852148960025950, -0.757884769329360110, -0.757917387803981770, -0.757950004383809990, -0.757982619068763190, -0.758015231858759850, -0.758047842753718390, -0.758080451753557320, +-0.758113058858195130, -0.758145664067550350, -0.758178267381541370, -0.758210868800086700, -0.758243468323105410, -0.758276065950515000, -0.758308661682234320, -0.758341255518181990, +-0.758373847458277180, -0.758406437502437080, -0.758439025650580970, -0.758471611902627240, -0.758504196258494520, -0.758536778718101210, -0.758569359281366040, -0.758601937948207410, +-0.758634514718544040, -0.758667089592294340, -0.758699662569376930, -0.758732233649710870, -0.758764802833213680, -0.758797370119804530, -0.758829935509401920, -0.758862499001925040, +-0.758895060597291280, -0.758927620295420050, -0.758960178096229620, -0.758992733999638740, -0.759025288005566120, -0.759057840113930180, -0.759090390324649640, -0.759122938637643240, +-0.759155485052829370, -0.759188029570126880, -0.759220572189454270, -0.759253112910730830, -0.759285651733873970, -0.759318188658803070, -0.759350723685437210, -0.759383256813694010, +-0.759415788043492630, -0.759448317374751820, -0.759480844807390200, -0.759513370341326380, -0.759545893976479310, -0.759578415712767410, -0.759610935550109390, -0.759643453488424210, +-0.759675969527630280, -0.759708483667646430, -0.759740995908391950, -0.759773506249784350, -0.759806014691743140, -0.759838521234186710, -0.759871025877034700, -0.759903528620204490, +-0.759936029463615490, -0.759968528407186430, -0.760001025450835920, -0.760033520594483040, -0.760066013838046170, -0.760098505181444390, -0.760130994624596320, -0.760163482167420800, +-0.760195967809836450, -0.760228451551762880, -0.760260933393117620, -0.760293413333819950, -0.760325891373788700, -0.760358367512943390, -0.760390841751201530, -0.760423314088482630, +-0.760455784524705410, -0.760488253059788730, -0.760520719693651430, -0.760553184426212340, -0.760585647257390310, -0.760618108187104070, -0.760650567215272580, -0.760683024341814780, +-0.760715479566649870, -0.760747932889695780, -0.760780384310871800, -0.760812833830096900, -0.760845281447290470, -0.760877727162370230, -0.760910170975255710, -0.760942612885865730, +-0.760975052894119260, -0.761007490999935140, -0.761039927203232210, -0.761072361503929650, -0.761104793901946080, -0.761137224397200440, -0.761169652989611810, -0.761202079679099140, +-0.761234504465581720, -0.761266927348977500, -0.761299348329205980, -0.761331767406186690, -0.761364184579837340, -0.761396599850077680, -0.761429013216826320, -0.761461424680002550, +-0.761493834239525210, -0.761526241895313260, -0.761558647647285650, -0.761591051495361440, -0.761623453439459700, -0.761655853479499270, -0.761688251615399210, -0.761720647847079050, +-0.761753042174456720, -0.761785434597451850, -0.761817825115983280, -0.761850213729970860, -0.761882600439332200, -0.761914985243987150, -0.761947368143854550, -0.761979749138853580, +-0.762012128228903180, -0.762044505413922550, -0.762076880693830620, -0.762109254068546460, -0.762141625537989140, -0.762173995102077840, -0.762206362760732060, -0.762238728513869760, +-0.762271092361410770, -0.762303454303273950, -0.762335814339379140, -0.762368172469644170, -0.762400528693988780, -0.762432883012332030, -0.762465235424593100, -0.762497585930691060, +-0.762529934530545180, -0.762562281224074320, -0.762594626011197760, -0.762626968891834790, -0.762659309865904240, -0.762691648933326080, -0.762723986094018150, -0.762756321347900280, +-0.762788654694891650, -0.762820986134911890, -0.762853315667879170, -0.762885643293713110, -0.762917969012332890, -0.762950292823657890, -0.762982614727607090, -0.763014934724099760, +-0.763047252813054970, -0.763079568994392220, -0.763111883268030480, -0.763144195633889020, -0.763176506091887140, -0.763208814641944460, -0.763241121283979250, -0.763273426017911150, +-0.763305728843660100, -0.763338029761144290, -0.763370328770283210, -0.763402625870996390, -0.763434921063202990, -0.763467214346822300, -0.763499505721773610, -0.763531795187976090, +-0.763564082745349150, -0.763596368393811950, -0.763628652133283900, -0.763660933963684170, -0.763693213884932610, -0.763725491896947610, -0.763757767999648670, -0.763790042192955430, +-0.763822314476787720, -0.763854584851063500, -0.763886853315702940, -0.763919119870625220, -0.763951384515749620, -0.763983647250995660, -0.764015908076282610, -0.764048166991529660, +-0.764080423996656320, -0.764112679091581980, -0.764144932276225930, -0.764177183550508120, -0.764209432914346840, -0.764241680367661820, -0.764273925910372800, -0.764306169542399380, +-0.764338411263659980, -0.764370651074074650, -0.764402888973562570, -0.764435124962043360, -0.764467359039436300, -0.764499591205660910, -0.764531821460636470, -0.764564049804282500, +-0.764596276236518380, -0.764628500757263520, -0.764660723366438090, -0.764692944063960270, -0.764725162849750010, -0.764757379723726820, -0.764789594685810870, -0.764821807735920340, +-0.764854018873975190, -0.764886228099895150, -0.764918435413599380, -0.764950640815007630, -0.764982844304039290, -0.765015045880613750, -0.765047245544650640, -0.765079443296069470, +-0.765111639134789630, -0.765143833060730640, -0.765176025073812770, -0.765208215173954210, -0.765240403361075020, -0.765272589635095480, -0.765304773995933880, -0.765336956443510410, +-0.765369136977744450, -0.765401315598555730, -0.765433492305863660, -0.765465667099587850, -0.765497839979647930, -0.765530010945963400, -0.765562179998453880, -0.765594347137038780, +-0.765626512361637920, -0.765658675672171380, -0.765690837068557450, -0.765722996550716520, -0.765755154118568090, -0.765787309772032350, -0.765819463511027700, -0.765851615335474520, +-0.765883765245292230, -0.765915913240400540, -0.765948059320718970, -0.765980203486167350, -0.766012345736665210, -0.766044486072132160, -0.766076624492487920, -0.766108760997652240, +-0.766140895587545060, -0.766173028262085110, -0.766205159021192680, -0.766237287864787180, -0.766269414792789210, -0.766301539805117060, -0.766333662901691030, -0.766365784082430830, +-0.766397903347256330, -0.766430020696086900, -0.766462136128842510, -0.766494249645442660, -0.766526361245807310, -0.766558470929856070, -0.766590578697508570, -0.766622684548685210, +-0.766654788483304590, -0.766686890501287020, -0.766718990602552110, -0.766751088787020470, -0.766783185054610410, -0.766815279405242410, -0.766847371838836220, -0.766879462355311680, +-0.766911550954588410, -0.766943637636586240, -0.766975722401225020, -0.767007805248424490, -0.767039886178104370, -0.767071965190184610, -0.767104042284584950, -0.767136117461225790, +-0.767168190720025620, -0.767200262060905080, -0.767232331483784450, -0.767264398988582450, -0.767296464575219380, -0.767328528243615190, -0.767360589993689720, -0.767392649825362700, +-0.767424707738554090, -0.767456763733183720, -0.767488817809171330, -0.767520869966437090, -0.767552920204900510, -0.767584968524481660, -0.767617014925101040, -0.767649059406677270, +-0.767681101969130860, -0.767713142612381660, -0.767745181336350170, -0.767777218140955230, -0.767809253026117130, -0.767841285991756050, -0.767873317037791710, -0.767905346164143960, +-0.767937373370732980, -0.767969398657478490, -0.768001422024300550, -0.768033443471119020, -0.768065462997853940, -0.768097480604425730, -0.768129496290753220, -0.768161510056757040, +-0.768193521902357010, -0.768225531827473770, -0.768257539832026160, -0.768289545915934680, -0.768321550079119290, -0.768353552321500040, -0.768385552642997020, -0.768417551043530040, +-0.768449547523019080, -0.768481542081384420, -0.768513534718545890, -0.768545525434423450, -0.768577514228937720, -0.768609501102007760, -0.768641486053553980, -0.768673469083496430, +-0.768705450191755850, -0.768737429378251180, -0.768769406642902720, -0.768801381985630860, -0.768833355406355560, -0.768865326904996870, -0.768897296481474870, -0.768929264135709610, +-0.768961229867621170, -0.768993193677129590, -0.769025155564155070, -0.769057115528617770, -0.769089073570438100, -0.769121029689535330, -0.769152983885829870, -0.769184936159242550, +-0.769216886509692330, -0.769248834937099950, -0.769280781441385340, -0.769312726022468920, -0.769344668680270630, -0.769376609414710640, -0.769408548225709140, -0.769440485113186300, +-0.769472420077062290, -0.769504353117257180, -0.769536284233691140, -0.769568213426285010, -0.769600140694957750, -0.769632066039630190, -0.769663989460222410, -0.769695910956655240, +-0.769727830528847750, -0.769759748176720660, -0.769791663900194160, -0.769823577699188520, -0.769855489573623930, -0.769887399523420670, -0.769919307548498910, -0.769951213648778830, +-0.769983117824180830, -0.770015020074624860, -0.770046920400032090, -0.770078818800321250, -0.770110715275413530, -0.770142609825228970, -0.770174502449688440, -0.770206393148711090, +-0.770238281922217770, -0.770270168770128770, -0.770302053692364260, -0.770333936688844760, -0.770365817759490310, -0.770397696904221330, -0.770429574122958090, -0.770461449415621000, +-0.770493322782130230, -0.770525194222406730, -0.770557063736369560, -0.770588931323939910, -0.770620796985037830, -0.770652660719584380, -0.770684522527498640, -0.770716382408701660, +-0.770748240363113730, -0.770780096390655150, -0.770811950491246400, -0.770843802664807680, -0.770875652911259480, -0.770907501230522210, -0.770939347622516150, -0.770971192087161690, +-0.771003034624379910, -0.771034875234089870, -0.771066713916212730, -0.771098550670668680, -0.771130385497379000, -0.771162218396262640, -0.771194049367240790, -0.771225878410233820, +-0.771257705525162150, -0.771289530711946170, -0.771321353970506380, -0.771353175300763310, -0.771384994702637220, -0.771416812176048630, -0.771448627720918050, -0.771480441337165870, +-0.771512253024713160, -0.771544062783479310, -0.771575870613385170, -0.771607676514351470, -0.771639480486299160, -0.771671282529147520, -0.771703082642817620, -0.771734880827230070, +-0.771766677082305290, -0.771798471407963870, -0.771830263804126340, -0.771862054270713080, -0.771893842807644610, -0.771925629414841550, -0.771957414092224510, -0.771989196839714450, +-0.772020977657230880, -0.772052756544694740, -0.772084533502026770, -0.772116308529148140, -0.772148081625978030, -0.772179852792437840, -0.772211622028447950, -0.772243389333929000, +-0.772275154708801590, -0.772306918152986240, -0.772338679666403680, -0.772370439248974420, -0.772402196900618950, -0.772433952621258140, -0.772465706410812910, -0.772497458269202800, +-0.772529208196349180, -0.772560956192172470, -0.772592702256593930, -0.772624446389533090, -0.772656188590911120, -0.772687928860648740, -0.772719667198666470, -0.772751403604885030, +-0.772783138079225160, -0.772814870621607360, -0.772846601231952370, -0.772878329910180910, -0.772910056656213710, -0.772941781469971830, -0.772973504351374910, -0.773005225300344320, +-0.773036944316800590, -0.773068661400665100, -0.773100376551857480, -0.773132089770298790, -0.773163801055909870, -0.773195510408611560, -0.773227217828324380, -0.773258923314969150, +-0.773290626868466720, -0.773322328488737610, -0.773354028175702760, -0.773385725929282790, -0.773417421749398540, -0.773449115635971300, -0.773480807588920680, -0.773512497608167980, +-0.773544185693634150, -0.773575871845240350, -0.773607556062906320, -0.773639238346553460, -0.773670918696102380, -0.773702597111474160, -0.773734273592589280, -0.773765948139368830, +-0.773797620751733420, -0.773829291429604100, -0.773860960172901400, -0.773892626981546370, -0.773924291855460410, -0.773955954794563030, -0.773987615798775840, -0.774019274868019580, +-0.774050932002215750, -0.774082587201283980, -0.774114240465145760, -0.774145891793721840, -0.774177541186933380, -0.774209188644700900, -0.774240834166945560, -0.774272477753587980, +-0.774304119404549350, -0.774335759119750390, -0.774367396899112050, -0.774399032742555730, -0.774430666650001380, -0.774462298621370170, -0.774493928656583400, -0.774525556755562230, +-0.774557182918226730, -0.774588807144498180, -0.774620429434297650, -0.774652049787545980, -0.774683668204164340, -0.774715284684073360, -0.774746899227194310, -0.774778511833447920, +-0.774810122502755270, -0.774841731235037300, -0.774873338030215630, -0.774904942888209990, -0.774936545808942000, -0.774968146792332720, -0.774999745838303560, -0.775031342946774450, +-0.775062938117667020, -0.775094531350902340, -0.775126122646401130, -0.775157712004084790, -0.775189299423874050, -0.775220884905690190, -0.775252468449453950, -0.775284050055086720, +-0.775315629722509230, -0.775347207451642760, -0.775378783242408720, -0.775410357094727280, -0.775441929008519830, -0.775473498983708210, -0.775505067020212270, -0.775536633117953620, +-0.775568197276853440, -0.775599759496832800, -0.775631319777812630, -0.775662878119714240, -0.775694434522458680, -0.775725988985967010, -0.775757541510160410, -0.775789092094959830, +-0.775820640740286670, -0.775852187446062440, -0.775883732212207080, -0.775915275038642440, -0.775946815925289690, -0.775978354872070340, -0.776009891878904570, -0.776041426945714100, +-0.776072960072420100, -0.776104491258943650, -0.776136020505206030, -0.776167547811128290, -0.776199073176631730, -0.776230596601637400, -0.776262118086066710, -0.776293637629840600, +-0.776325155232881040, -0.776356670895107960, -0.776388184616443320, -0.776419696396808080, -0.776451206236124290, -0.776482714134311800, -0.776514220091292560, -0.776545724106987860, +-0.776577226181318750, -0.776608726314206630, -0.776640224505572680, -0.776671720755338190, -0.776703215063424320, -0.776734707429752480, -0.776766197854243830, -0.776797686336820340, +-0.776829172877401940, -0.776860657475910710, -0.776892140132267820, -0.776923620846395100, -0.776955099618212850, -0.776986576447642690, -0.777018051334606220, -0.777049524279024630, +-0.777080995280819200, -0.777112464339911210, -0.777143931456222180, -0.777175396629673280, -0.777206859860185890, -0.777238321147681320, -0.777269780492080950, -0.777301237893306740, +-0.777332693351278750, -0.777364146865919150, -0.777395598437149670, -0.777427048064890710, -0.777458495749064120, -0.777489941489591270, -0.777521385286393580, -0.777552827139392330, +-0.777584267048509140, -0.777615705013665280, -0.777647141034782050, -0.777678575111781070, -0.777710007244583610, -0.777741437433111080, -0.777772865677285650, -0.777804291977027380, +-0.777835716332258450, -0.777867138742900140, -0.777898559208874630, -0.777929977730102200, -0.777961394306504680, -0.777992808938003820, -0.778024221624520780, -0.778055632365977300, +-0.778087041162294770, -0.778118448013394580, -0.778149852919198250, -0.778181255879627280, -0.778212656894603280, -0.778244055964048110, -0.778275453087882260, -0.778306848266027700, +-0.778338241498406140, -0.778369632784939420, -0.778401022125548180, -0.778432409520154360, -0.778463794968679460, -0.778495178471045100, -0.778526560027172800, -0.778557939636984050, +-0.778589317300400600, -0.778620693017343710, -0.778652066787735130, -0.778683438611496360, -0.778714808488549570, -0.778746176418815270, -0.778777542402215420, -0.778808906438671840, +-0.778840268528106390, -0.778871628670439800, -0.778902986865594120, -0.778934343113490970, -0.778965697414052080, -0.778997049767198860, -0.779028400172852910, -0.779059748630936080, +-0.779091095141369870, -0.779122439704075910, -0.779153782318975810, -0.779185122985991300, -0.779216461705044550, -0.779247798476056070, -0.779279133298948050, -0.779310466173642860, +-0.779341797100060910, -0.779373126078124370, -0.779404453107755080, -0.779435778188874770, -0.779467101321404840, -0.779498422505267240, -0.779529741740383590, -0.779561059026675610, +-0.779592374364064920, -0.779623687752473260, -0.779654999191822460, -0.779686308682034700, -0.779717616223030600, -0.779748921814732430, -0.779780225457062050, -0.779811527149941620, +-0.779842826893291760, -0.779874124687034880, -0.779905420531092690, -0.779936714425386920, -0.779968006369839430, -0.779999296364371930, -0.780030584408906050, -0.780061870503363840, +-0.780093154647666930, -0.780124436841737160, -0.780155717085496800, -0.780186995378866600, -0.780218271721768940, -0.780249546114125560, -0.780280818555858850, -0.780312089046889530, +-0.780343357587140130, -0.780374624176532250, -0.780405888814987740, -0.780437151502428650, -0.780468412238776500, -0.780499671023953460, -0.780530927857881250, -0.780562182740481610, +-0.780593435671676610, -0.780624686651388510, -0.780655935679538170, -0.780687182756048090, -0.780718427880839890, -0.780749671053836300, -0.780780912274957830, -0.780812151544127200, +-0.780843388861266250, -0.780874624226296720, -0.780905857639140550, -0.780937089099719930, -0.780968318607956460, -0.780999546163772210, -0.781030771767089130, -0.781061995417829170, +-0.781093217115914060, -0.781124436861266650, -0.781155654653807430, -0.781186870493459140, -0.781218084380144280, -0.781249296313783590, -0.781280506294299680, -0.781311714321614500, +-0.781342920395650120, -0.781374124516328370, -0.781405326683571210, -0.781436526897300810, -0.781467725157439120, -0.781498921463908090, -0.781530115816629790, -0.781561308215526160, +-0.781592498660519830, -0.781623687151531740, -0.781654873688484410, -0.781686058271299890, -0.781717240899900800, -0.781748421574207990, -0.781779600294144170, -0.781810777059631310, +-0.781841951870591580, -0.781873124726946920, -0.781904295628619410, -0.781935464575531200, -0.781966631567604380, -0.781997796604760990, -0.782028959686922990, -0.782060120814013220, +-0.782091279985952630, -0.782122437202663830, -0.782153592464068900, -0.782184745770090560, -0.782215897120649760, -0.782247046515669230, -0.782278193955071140, -0.782309339438777560, +-0.782340482966710550, -0.782371624538792390, -0.782402764154945140, -0.782433901815090980, -0.782465037519152080, -0.782496171267050620, -0.782527303058709320, -0.782558432894049140, +-0.782589560772992910, -0.782620686695462700, -0.782651810661381450, -0.782682932670670020, -0.782714052723251230, -0.782745170819047380, -0.782776286957980630, -0.782807401139973160, +-0.782838513364947140, -0.782869623632824860, -0.782900731943528490, -0.782931838296980320, -0.782962942693102630, -0.782994045131817470, -0.783025145613047700, -0.783056244136714600, +-0.783087340702741000, -0.783118435311049410, -0.783149527961561230, -0.783180618654199300, -0.783211707388885790, -0.783242794165542990, -0.783273878984093170, -0.783304961844458750, +-0.783336042746561880, -0.783367121690324960, -0.783398198675670180, -0.783429273702519910, -0.783460346770796350, -0.783491417880422650, -0.783522487031319770, -0.783553554223410660, +-0.783584619456617730, -0.783615682730863680, -0.783646744046070040, -0.783677803402159420, -0.783708860799054330, -0.783739916236677050, -0.783770969714949970, -0.783802021233795500, +-0.783833070793136020, -0.783864118392893830, -0.783895164032991310, -0.783926207713350980, -0.783957249433895550, -0.783988289194546550, -0.784019326995226810, -0.784050362835858720, +-0.784081396716365230, -0.784112428636667750, -0.784143458596689210, -0.784174486596352030, -0.784205512635578690, -0.784236536714291500, -0.784267558832412950, -0.784298578989865440, +-0.784329597186571580, -0.784360613422453780, -0.784391627697434310, -0.784422640011436470, -0.784453650364381310, -0.784484658756192220, -0.784515665186791280, -0.784546669656101870, +-0.784577672164045170, -0.784608672710544350, -0.784639671295521810, -0.784670667918900060, -0.784701662580601700, -0.784732655280549140, -0.784763646018665000, -0.784794634794871660, +-0.784825621609091750, -0.784856606461247890, -0.784887589351262350, -0.784918570279058540, -0.784949549244557620, -0.784980526247682890, -0.785011501288357390, -0.785042474366502650, +-0.785073445482041720, -0.785104414634897110, -0.785135381824991430, -0.785166347052247420, -0.785197310316587460, -0.785228271617934180, -0.785259230956210310, -0.785290188331338350, +-0.785321143743240910, -0.785352097191840630, -0.785383048677060550, -0.785413998198822410, -0.785444945757049260, -0.785475891351663740, -0.785506834982589000, -0.785537776649746670, +-0.785568716353059910, -0.785599654092451250, -0.785630589867843620, -0.785661523679159420, -0.785692455526321390, -0.785723385409252240, -0.785754313327874710, -0.785785239282111300, +-0.785816163271884860, -0.785847085297118440, -0.785878005357733890, -0.785908923453654260, -0.785939839584802400, -0.785970753751101370, -0.786001665952473010, -0.786032576188840370, +-0.786063484460126420, -0.786094390766253650, -0.786125295107145020, -0.786156197482723030, -0.786187097892910640, -0.786217996337630450, -0.786248892816805320, -0.786279787330357970, +-0.786310679878211570, -0.786341570460288080, -0.786372459076510540, -0.786403345726801930, -0.786434230411085510, -0.786465113129282910, -0.786495993881317630, -0.786526872667112300, +-0.786557749486589740, -0.786588624339672800, -0.786619497226284330, -0.786650368146347150, -0.786681237099784100, -0.786712104086517930, -0.786742969106471460, -0.786773832159567530, +-0.786804693245729550, -0.786835552364879340, -0.786866409516940310, -0.786897264701835740, -0.786928117919487470, -0.786958969169818890, -0.786989818452752950, -0.787020665768212390, +-0.787051511116120260, -0.787082354496399290, -0.787113195908972330, -0.787144035353762540, -0.787174872830692650, -0.787205708339685510, -0.787236541880664050, -0.787267373453551910, +-0.787298203058270700, -0.787329030694744030, -0.787359856362894740, -0.787390680062646450, -0.787421501793920900, -0.787452321556641470, -0.787483139350731330, -0.787513955176113330, +-0.787544769032710420, -0.787575580920445660, -0.787606390839241890, -0.787637198789022160, -0.787668004769709440, -0.787698808781226670, -0.787729610823497460, -0.787760410896443660, +-0.787791208999988780, -0.787822005134055980, -0.787852799298568660, -0.787883591493448780, -0.787914381718619940, -0.787945169974005210, -0.787975956259527430, -0.788006740575109890, +-0.788037522920675420, -0.788068303296147190, -0.788099081701448160, -0.788129858136501380, -0.788160632601230040, -0.788191405095557630, -0.788222175619406110, -0.788252944172699310, +-0.788283710755359970, -0.788314475367312030, -0.788345238008477330, -0.788375998678779500, -0.788406757378141700, -0.788437514106486990, -0.788468268863738440, -0.788499021649819330, +-0.788529772464652610, -0.788560521308161460, -0.788591268180268920, -0.788622013080898300, -0.788652756009972760, -0.788683496967415690, -0.788714235953149380, -0.788744972967097560, +-0.788775708009183730, -0.788806441079330180, -0.788837172177460520, -0.788867901303497930, -0.788898628457365580, -0.788929353638986640, -0.788960076848284290, -0.788990798085181800, +-0.789021517349602240, -0.789052234641469010, -0.789082949960705050, -0.789113663307233870, -0.789144374680978980, -0.789175084081862650, -0.789205791509808520, -0.789236496964740080, +-0.789267200446580830, -0.789297901955253070, -0.789328601490680510, -0.789359299052786460, -0.789389994641494170, -0.789420688256726840, -0.789451379898407860, -0.789482069566460390, +-0.789512757260807830, -0.789543442981373360, -0.789574126728080250, -0.789604808500852350, -0.789635488299611830, -0.789666166124282640, -0.789696841974788070, -0.789727515851051940, +-0.789758187752996440, -0.789788857680545520, -0.789819525633622450, -0.789850191612150530, -0.789880855616053150, -0.789911517645253580, -0.789942177699675230, -0.789972835779241490, +-0.790003491883875640, -0.790034146013501080, -0.790064798168041650, -0.790095448347419740, -0.790126096551559190, -0.790156742780383390, -0.790187387033816190, -0.790218029311780090, +-0.790248669614198930, -0.790279307940995990, -0.790309944292094890, -0.790340578667418910, -0.790371211066891450, -0.790401841490436020, -0.790432469937975890, -0.790463096409434680, +-0.790493720904735690, -0.790524343423802960, -0.790554963966558780, -0.790585582532927210, -0.790616199122831650, -0.790646813736196160, -0.790677426372943140, -0.790708037032996520, +-0.790738645716279830, -0.790769252422716450, -0.790799857152230000, -0.790830459904743990, -0.790861060680181690, -0.790891659478466850, -0.790922256299522730, -0.790952851143273070, +-0.790983444009641270, -0.791014034898551380, -0.791044623809925910, -0.791075210743688810, -0.791105795699763690, -0.791136378678074630, -0.791166959678544110, -0.791197538701096210, +-0.791228115745654440, -0.791258690812142400, -0.791289263900483600, -0.791319835010601660, -0.791350404142420080, -0.791380971295862600, -0.791411536470852610, -0.791442099667313710, +-0.791472660885170210, -0.791503220124344490, -0.791533777384760720, -0.791564332666342520, -0.791594885969014060, -0.791625437292697740, -0.791655986637317950, -0.791686534002798090, +-0.791717079389062000, -0.791747622796033170, -0.791778164223635230, -0.791808703671791900, -0.791839241140426810, -0.791869776629463670, -0.791900310138826000, -0.791930841668438190, +-0.791961371218222740, -0.791991898788103830, -0.792022424378005190, -0.792052947987850970, -0.792083469617563820, -0.792113989267068110, -0.792144506936287350, -0.792175022625145390, +-0.792205536333565720, -0.792236048061472300, -0.792266557808788850, -0.792297065575438890, -0.792327571361346350, -0.792358075166434750, -0.792388576990628700, -0.792419076833850490, +-0.792449574696024620, -0.792480070577074920, -0.792510564476925470, -0.792541056395499100, -0.792571546332720090, -0.792602034288512280, -0.792632520262799290, -0.792663004255505070, +-0.792693486266553340, -0.792723966295867830, -0.792754444343372390, -0.792784920408990960, -0.792815394492647150, -0.792845866594264810, -0.792876336713768450, -0.792906804851080670, +-0.792937271006125880, -0.792967735178827900, -0.792998197369111040, -0.793028657576898220, -0.793059115802113860, -0.793089572044681560, -0.793120026304525380, -0.793150478581569170, +-0.793180928875736660, -0.793211377186952000, -0.793241823515138720, -0.793272267860220980, -0.793302710222122510, -0.793333150600767920, -0.793363588996079840, -0.793394025407982760, +-0.793424459836400640, -0.793454892281257870, -0.793485322742477410, -0.793515751219983630, -0.793546177713700400, -0.793576602223551860, -0.793607024749461650, -0.793637445291353940, +-0.793667863849152670, -0.793698280422781680, -0.793728695012165030, -0.793759107617226680, -0.793789518237891010, -0.793819926874081090, -0.793850333525721320, -0.793880738192735750, +-0.793911140875048770, -0.793941541572583450, -0.793971940285264300, -0.794002337013015260, -0.794032731755760390, -0.794063124513423760, -0.794093515285929200, -0.794123904073200990, +-0.794154290875162870, -0.794184675691739120, -0.794215058522853680, -0.794245439368431170, -0.794275818228394440, -0.794306195102668200, -0.794336569991176410, -0.794366942893843800, +-0.794397313810593310, -0.794427682741349450, -0.794458049686036500, -0.794488414644578310, -0.794518777616899150, -0.794549138602923090, -0.794579497602574070, -0.794609854615776490, +-0.794640209642454080, -0.794670562682531220, -0.794700913735931990, -0.794731262802581000, -0.794761609882401190, -0.794791954975317520, -0.794822298081254490, -0.794852639200135050, +-0.794882978331884040, -0.794913315476425630, -0.794943650633684000, -0.794973983803583200, -0.795004314986047400, -0.795034644181000780, -0.795064971388367630, -0.795095296608072100, +-0.795125619840038270, -0.795155941084190300, -0.795186260340453140, -0.795216577608749750, -0.795246892889004850, -0.795277206181142840, -0.795307517485088210, -0.795337826800764370, +-0.795368134128095930, -0.795398439467007170, -0.795428742817422260, -0.795459044179265500, -0.795489343552461150, -0.795519640936933390, -0.795549936332606620, -0.795580229739405010, +-0.795610521157252730, -0.795640810586074720, -0.795671098025794280, -0.795701383476335900, -0.795731666937624200, -0.795761948409583810, -0.795792227892137990, -0.795822505385211710, +-0.795852780888729020, -0.795883054402614420, -0.795913325926792200, -0.795943595461186650, -0.795973863005722150, -0.796004128560322990, -0.796034392124913560, -0.796064653699418030, +-0.796094913283761470, -0.796125170877867160, -0.796155426481659820, -0.796185680095063850, -0.796215931718004310, -0.796246181350404480, -0.796276428992189090, -0.796306674643282640, +-0.796336918303609530, -0.796367159973094150, -0.796397399651660790, -0.796427637339233940, -0.796457873035738120, -0.796488106741097490, -0.796518338455236560, -0.796548568178079950, +-0.796578795909552270, -0.796609021649577250, -0.796639245398079510, -0.796669467154984320, -0.796699686920214870, -0.796729904693696200, -0.796760120475352830, -0.796790334265109030, +-0.796820546062889430, -0.796850755868618530, -0.796880963682220720, -0.796911169503620510, -0.796941373332742400, -0.796971575169510780, -0.797001775013850280, -0.797031972865685830, +-0.797062168724940960, -0.797092362591540700, -0.797122554465409470, -0.797152744346472430, -0.797182932234652970, -0.797213118129876160, -0.797243302032066610, -0.797273483941148720, +-0.797303663857047210, -0.797333841779686470, -0.797364017708991120, -0.797394191644885790, -0.797424363587294960, -0.797454533536143260, -0.797484701491355640, -0.797514867452855820, +-0.797545031420568870, -0.797575193394419290, -0.797605353374332250, -0.797635511360231360, -0.797665667352041590, -0.797695821349687750, -0.797725973353094250, -0.797756123362185930, +-0.797786271376887180, -0.797816417397122830, -0.797846561422817510, -0.797876703453895610, -0.797906843490282070, -0.797936981531901960, -0.797967117578678890, -0.797997251630537920, +-0.798027383687403890, -0.798057513749201860, -0.798087641815855560, -0.798117767887290160, -0.798147891963430390, -0.798178014044200860, -0.798208134129526290, -0.798238252219331420, +-0.798268368313540870, -0.798298482412079350, -0.798328594514871700, -0.798358704621842550, -0.798388812732916620, -0.798418918848019190, -0.798449022967073980, -0.798479125090006180, +-0.798509225216741060, -0.798539323347202350, -0.798569419481315430, -0.798599513619004830, -0.798629605760195590, -0.798659695904812230, -0.798689784052779680, -0.798719870204022690, +-0.798749954358465960, -0.798780036516034350, -0.798810116676652690, -0.798840194840245710, -0.798870271006738800, -0.798900345176055680, -0.798930417348121650, -0.798960487522861530, +-0.798990555700200830, -0.799020621880063290, -0.799050686062374060, -0.799080748247058100, -0.799110808434040370, -0.799140866623245460, -0.799170922814598560, -0.799200977008024280, +-0.799231029203447570, -0.799261079400793270, -0.799291127599986220, -0.799321173800952020, -0.799351218003614190, -0.799381260207898460, -0.799411300413729430, -0.799441338621032840, +-0.799471374829732300, -0.799501409039753310, -0.799531441251020820, -0.799561471463459680, -0.799591499676994940, -0.799621525891551440, -0.799651550107054020, -0.799681572323427850, +-0.799711592540597760, -0.799741610758488600, -0.799771626977025970, -0.799801641196133730, -0.799831653415737480, -0.799861663635761940, -0.799891671856132860, -0.799921678076774060, +-0.799951682297611040, -0.799981684518568880, -0.800011684739572520, -0.800041682960546900, -0.800071679181417080, -0.800101673402108030, -0.800131665622544790, -0.800161655842652530, +-0.800191644062355990, -0.800221630281580330, -0.800251614500251170, -0.800281596718292470, -0.800311576935629710, -0.800341555152188630, -0.800371531367893070, -0.800401505582668650, +-0.800431477796440530, -0.800461448009133660, -0.800491416220673210, -0.800521382430984250, -0.800551346639991830, -0.800581308847621020, -0.800611269053796870, -0.800641227258444670, +-0.800671183461489360, -0.800701137662856550, -0.800731089862470440, -0.800761040060256610, -0.800790988256140150, -0.800820934450046760, -0.800850878641900520, -0.800880820831627040, +-0.800910761019151480, -0.800940699204399140, -0.800970635387294960, -0.801000569567764220, -0.801030501745731980, -0.801060431921123640, -0.801090360093864140, -0.801120286263878660, +-0.801150210431093130, -0.801180132595431530, -0.801210052756819560, -0.801239970915182400, -0.801269887070445890, -0.801299801222534190, -0.801329713371372930, -0.801359623516887390, +-0.801389531659002840, -0.801419437797644350, -0.801449341932737310, -0.801479244064207010, -0.801509144191978500, -0.801539042315977170, -0.801568938436128200, -0.801598832552357420, +-0.801628724664589120, -0.801658614772748910, -0.801688502876762190, -0.801718388976554670, -0.801748273072050770, -0.801778155163176190, -0.801808035249856110, -0.801837913332016040, +-0.801867789409581140, -0.801897663482476820, -0.801927535550628230, -0.801957405613960890, -0.801987273672400080, -0.802017139725870960, -0.802047003774299050, -0.802076865817610170, +-0.802106725855728620, -0.802136583888580220, -0.802166439916090930, -0.802196293938184920, -0.802226145954788250, -0.802255995965826200, -0.802285843971224160, -0.802315689970907520, +-0.802345533964801680, -0.802375375952831930, -0.802405215934923750, -0.802435053911002670, -0.802464889880993740, -0.802494723844822790, -0.802524555802415440, -0.802554385753696200, +-0.802584213698591010, -0.802614039637025160, -0.802643863568924920, -0.802673685494214470, -0.802703505412819650, -0.802733323324666290, -0.802763139229679460, -0.802792953127784870, +-0.802822765018907810, -0.802852574902973900, -0.802882382779908530, -0.802912188649637200, -0.802941992512085420, -0.802971794367179140, -0.803001594214842960, -0.803031392055002740, +-0.803061187887583960, -0.803090981712512810, -0.803120773529713670, -0.803150563339112610, -0.803180351140635130, -0.803210136934206730, -0.803239920719753030, -0.803269702497199530, +-0.803299482266471740, -0.803329260027495270, -0.803359035780195630, -0.803388809524498430, -0.803418581260329720, -0.803448350987614020, -0.803478118706277500, -0.803507884416245650, +-0.803537648117444660, -0.803567409809798900, -0.803597169493234680, -0.803626927167677580, -0.803656682833053140, -0.803686436489286950, -0.803716188136304740, -0.803745937774032030, +-0.803775685402394410, -0.803805431021317630, -0.803835174630727290, -0.803864916230549010, -0.803894655820708960, -0.803924393401131750, -0.803954128971743560, -0.803983862532470560, +-0.804013594083237470, -0.804043323623970240, -0.804073051154594820, -0.804102776675036710, -0.804132500185221640, -0.804162221685075340, -0.804191941174523530, -0.804221658653491820, +-0.804251374121905950, -0.804281087579691630, -0.804310799026774710, -0.804340508463081250, -0.804370215888535970, -0.804399921303065150, -0.804429624706594510, -0.804459326099050460, +-0.804489025480357390, -0.804518722850441900, -0.804548418209229510, -0.804578111556646160, -0.804607802892617460, -0.804637492217069260, -0.804667179529927390, -0.804696864831117460, +-0.804726548120565430, -0.804756229398197020, -0.804785908663938620, -0.804815585917714850, -0.804845261159452210, -0.804874934389076310, -0.804904605606513670, -0.804934274811689000, +-0.804963942004528590, -0.804993607184958380, -0.805023270352904110, -0.805052931508291600, -0.805082590651046930, -0.805112247781095690, -0.805141902898363740, -0.805171556002777120, +-0.805201207094261680, -0.805230856172743700, -0.805260503238148020, -0.805290148290401020, -0.805319791329428770, -0.805349432355157550, -0.805379071367512190, -0.805408708366419090, +-0.805438343351804310, -0.805467976323593680, -0.805497607281713050, -0.805527236226088460, -0.805556863156645760, -0.805586488073310900, -0.805616110976009820, -0.805645731864668480, +-0.805675350739212700, -0.805704967599569220, -0.805734582445662760, -0.805764195277419830, -0.805793806094766920, -0.805823414897628990, -0.805853021685932420, -0.805882626459603400, +-0.805912229218567870, -0.805941829962751650, -0.805971428692080940, -0.806001025406481550, -0.806030620105879780, -0.806060212790201350, -0.806089803459372310, -0.806119392113318840, +-0.806148978751967450, -0.806178563375243070, -0.806208145983072220, -0.806237726575381060, -0.806267305152096100, -0.806296881713142400, -0.806326456258446460, -0.806356028787934330, +-0.806385599301532200, -0.806415167799166000, -0.806444734280761910, -0.806474298746245990, -0.806503861195544290, -0.806533421628582990, -0.806562980045288150, -0.806592536445586370, +-0.806622090829402730, -0.806651643196663830, -0.806681193547295840, -0.806710741881225380, -0.806740288198377510, -0.806769832498678950, -0.806799374782055880, -0.806828915048434350, +-0.806858453297740420, -0.806887989529900480, -0.806917523744840490, -0.806947055942486720, -0.806976586122765350, -0.807006114285602430, -0.807035640430924790, -0.807065164558657510, +-0.807094686668727410, -0.807124206761060450, -0.807153724835583560, -0.807183240892221930, -0.807212754930902050, -0.807242266951550320, -0.807271776954093020, -0.807301284938456210, +-0.807330790904566160, -0.807360294852349170, -0.807389796781731390, -0.807419296692639230, -0.807448794584998740, -0.807478290458736760, -0.807507784313778560, -0.807537276150051000, +-0.807566765967480120, -0.807596253765992870, -0.807625739545514530, -0.807655223305971840, -0.807684705047290950, -0.807714184769398490, -0.807743662472220400, -0.807773138155683300, +-0.807802611819713250, -0.807832083464236740, -0.807861553089179950, -0.807891020694469390, -0.807920486280031100, -0.807949949845792270, -0.807979411391677950, -0.808008870917615200, +-0.808038328423530180, -0.808067783909349970, -0.808097237374999720, -0.808126688820406280, -0.808156138245496260, -0.808185585650195830, -0.808215031034431490, -0.808244474398129520, +-0.808273915741216320, -0.808303355063618390, -0.808332792365262120, -0.808362227646073790, -0.808391660905980470, -0.808421092144907430, -0.808450521362781730, -0.808479948559529650, +-0.808509373735078250, -0.808538796889352820, -0.808568218022280520, -0.808597637133787630, -0.808627054223800660, -0.808656469292245990, -0.808685882339050250, -0.808715293364139720, +-0.808744702367441000, -0.808774109348880500, -0.808803514308384710, -0.808832917245880690, -0.808862318161293840, -0.808891717054551210, -0.808921113925579300, -0.808950508774305080, +-0.808979901600654140, -0.809009292404553330, -0.809038681185929360, -0.809068067944708760, -0.809097452680817900, -0.809126835394183400, -0.809156216084731870, -0.809185594752389710, +-0.809214971397083650, -0.809244346018740180, -0.809273718617286250, -0.809303089192647600, -0.809332457744751270, -0.809361824273523660, -0.809391188778892160, -0.809420551260782050, +-0.809449911719120620, -0.809479270153834360, -0.809508626564849900, -0.809537980952093950, -0.809567333315493020, -0.809596683654973840, -0.809626031970462790, -0.809655378261886830, +-0.809684722529172340, -0.809714064772246060, -0.809743404991035030, -0.809772743185465100, -0.809802079355463220, -0.809831413500956220, -0.809860745621871160, -0.809890075718133760, +-0.809919403789671200, -0.809948729836410090, -0.809978053858277150, -0.810007375855199110, -0.810036695827102580, -0.810066013773914300, -0.810095329695560970, -0.810124643591969340, +-0.810153955463066120, -0.810183265308778600, -0.810212573129032280, -0.810241878923754540, -0.810271182692872240, -0.810300484436312420, -0.810329784154000810, -0.810359081845864800, +-0.810388377511831020, -0.810417671151826280, -0.810446962765777430, -0.810476252353611200, -0.810505539915254310, -0.810534825450633600, -0.810564108959675790, -0.810593390442307720, +-0.810622669898456660, -0.810651947328048460, -0.810681222731010400, -0.810710496107269200, -0.810739767456752360, -0.810769036779385500, -0.810798304075096120, -0.810827569343810950, +-0.810856832585456930, -0.810886093799960680, -0.810915352987249370, -0.810944610147249500, -0.810973865279888240, -0.811003118385092310, -0.811032369462788560, -0.811061618512904370, +-0.811090865535365690, -0.811120110530099690, -0.811149353497033540, -0.811178594436094520, -0.811207833347208470, -0.811237070230302890, -0.811266305085304620, -0.811295537912140490, +-0.811324768710737660, -0.811353997481022770, -0.811383224222922970, -0.811412448936365100, -0.811441671621276120, -0.811470892277582840, -0.811500110905212460, -0.811529327504092350, +-0.811558542074148350, -0.811587754615307970, -0.811616965127498700, -0.811646173610646620, -0.811675380064678990, -0.811704584489522870, -0.811733786885105450, -0.811762987251353430, +-0.811792185588193990, -0.811821381895554080, -0.811850576173360760, -0.811879768421540970, -0.811908958640021770, -0.811938146828730110, -0.811967332987593720, -0.811996517116538420, +-0.812025699215491730, -0.812054879284380910, -0.812084057323133380, -0.812113233331675180, -0.812142407309933920, -0.812171579257836670, -0.812200749175310380, -0.812229917062282310, +-0.812259082918679320, -0.812288246744428790, -0.812317408539457550, -0.812346568303692780, -0.812375726037061650, -0.812404881739491660, -0.812434035410908970, -0.812463187051241210, +-0.812492336660415430, -0.812521484238359350, -0.812550629784999030, -0.812579773300262210, -0.812608914784075930, -0.812638054236367370, -0.812667191657063580, -0.812696327046091960, +-0.812725460403379340, -0.812754591728853230, -0.812783721022440560, -0.812812848284068630, -0.812841973513665050, -0.812871096711156090, -0.812900217876469270, -0.812929337009532070, +-0.812958454110271900, -0.812987569178615140, -0.813016682214489420, -0.813045793217822110, -0.813074902188540170, -0.813104009126571100, -0.813133114031841850, -0.813162216904279920, +-0.813191317743812480, -0.813220416550366700, -0.813249513323869850, -0.813278608064249340, -0.813307700771432660, -0.813336791445346320, -0.813365880085918040, -0.813394966693075430, +-0.813424051266745000, -0.813453133806854360, -0.813482214313331010, -0.813511292786102010, -0.813540369225094870, -0.813569443630236640, -0.813598516001454940, -0.813627586338676930, +-0.813656654641830010, -0.813685720910841350, -0.813714785145638440, -0.813743847346149130, -0.813772907512299580, -0.813801965644017860, -0.813831021741231120, -0.813860075803867430, +-0.813889127831852970, -0.813918177825115770, -0.813947225783583030, -0.813976271707182340, -0.814005315595840880, -0.814034357449486160, -0.814063397268045550, -0.814092435051446460, +-0.814121470799616280, -0.814150504512482390, -0.814179536189972850, -0.814208565832013840, -0.814237593438533410, -0.814266619009459070, -0.814295642544718650, -0.814324664044238640, +-0.814353683507947010, -0.814382700935771140, -0.814411716327638420, -0.814440729683476580, -0.814469741003212790, -0.814498750286774650, -0.814527757534089680, -0.814556762745085370, +-0.814585765919689010, -0.814614767057828870, -0.814643766159431240, -0.814672763224424280, -0.814701758252735280, -0.814730751244292510, -0.814759742199022250, -0.814788731116852680, +-0.814817717997711300, -0.814846702841525610, -0.814875685648223210, -0.814904666417731520, -0.814933645149978240, -0.814962621844890770, -0.814991596502396830, -0.815020569122423820, +-0.815049539704899460, -0.815078508249751700, -0.815107474756907150, -0.815136439226293970, -0.815165401657840240, -0.815194362051472330, -0.815223320407118650, -0.815252276724706680, +-0.815281231004163940, -0.815310183245418150, -0.815339133448396920, -0.815368081613027870, -0.815397027739238610, -0.815425971826956750, -0.815454913876110020, -0.815483853886625920, +-0.815512791858432730, -0.815541727791457060, -0.815570661685627090, -0.815599593540870420, -0.815628523357115330, -0.815657451134288450, -0.815686376872317820, -0.815715300571131290, +-0.815744222230656570, -0.815773141850821280, -0.815802059431553150, -0.815830974972779790, -0.815859888474429030, -0.815888799936428600, -0.815917709358706110, -0.815946616741189960, +-0.815975522083806640, -0.816004425386484540, -0.816033326649151400, -0.816062225871735380, -0.816091123054163430, -0.816120018196363590, -0.816148911298263610, -0.816177802359791540, +-0.816206691380874870, -0.816235578361441450, -0.816264463301419110, -0.816293346200735570, -0.816322227059318670, -0.816351105877096250, -0.816379982653996580, -0.816408857389946510, +-0.816437730084874190, -0.816466600738707580, -0.816495469351374960, -0.816524335922803160, -0.816553200452920570, -0.816582062941654920, -0.816610923388934150, -0.816639781794685990, +-0.816668638158838500, -0.816697492481319290, -0.816726344762056410, -0.816755195000977710, -0.816784043198010900, -0.816812889353084160, -0.816841733466125540, -0.816870575537062220, +-0.816899415565822350, -0.816928253552334450, -0.816957089496525460, -0.816985923398323770, -0.817014755257657210, -0.817043585074453850, -0.817072412848641410, -0.817101238580148050, +-0.817130062268901500, -0.817158883914829830, -0.817187703517860960, -0.817216521077922860, -0.817245336594943360, -0.817274150068851180, -0.817302961499573040, -0.817331770887037460, +-0.817360578231172470, -0.817389383531906490, -0.817418186789166670, -0.817446988002881290, -0.817475787172978420, -0.817504584299386220, -0.817533379382032410, -0.817562172420845280, +-0.817590963415752660, -0.817619752366682610, -0.817648539273563180, -0.817677324136322440, -0.817706106954888880, -0.817734887729189450, -0.817763666459152990, -0.817792443144707230, +-0.817821217785780870, -0.817849990382301000, -0.817878760934196200, -0.817907529441394440, -0.817936295903823880, -0.817965060321412470, -0.817993822694088600, -0.818022583021779990, +-0.818051341304415040, -0.818080097541921680, -0.818108851734228090, -0.818137603881262890, -0.818166353982953230, -0.818195102039227630, -0.818223848050014250, -0.818252592015241810, +-0.818281333934837370, -0.818310073808729550, -0.818338811636846630, -0.818367547419116550, -0.818396281155467700, -0.818425012845828140, -0.818453742490126030, -0.818482470088289560, +-0.818511195640246990, -0.818539919145926390, -0.818568640605255910, -0.818597360018164410, -0.818626077384579040, -0.818654792704428420, -0.818683505977641280, -0.818712217204144890, +-0.818740926383868080, -0.818769633516738820, -0.818798338602685470, -0.818827041641636330, -0.818855742633519570, -0.818884441578263570, -0.818913138475796280, -0.818941833326046200, +-0.818970526128941610, -0.818999216884410690, -0.819027905592382140, -0.819056592252783380, -0.819085276865543220, -0.819113959430589730, -0.819142639947851970, -0.819171318417256990, +-0.819199994838733740, -0.819228669212210600, -0.819257341537615650, -0.819286011814877480, -0.819314680043924160, -0.819343346224684190, -0.819372010357085840, -0.819400672441057520, +-0.819429332476527490, -0.819457990463424600, -0.819486646401676230, -0.819515300291211330, -0.819543952131958080, -0.819572601923845510, -0.819601249666800920, -0.819629895360753260, +-0.819658539005630790, -0.819687180601361920, -0.819715820147875250, -0.819744457645098960, -0.819773093092961420, -0.819801726491391270, -0.819830357840316770, -0.819858987139666430, +-0.819887614389369080, -0.819916239589352110, -0.819944862739544700, -0.819973483839875010, -0.820002102890272200, -0.820030719890663560, -0.820059334840978150, -0.820087947741144460, +-0.820116558591090780, -0.820145167390745830, -0.820173774140037890, -0.820202378838895460, -0.820230981487247160, -0.820259582085021370, -0.820288180632146700, -0.820316777128551440, +-0.820345371574164870, -0.820373963968914380, -0.820402554312728900, -0.820431142605537620, -0.820459728847267920, -0.820488313037848860, -0.820516895177209050, -0.820545475265276990, +-0.820574053301981300, -0.820602629287250470, -0.820631203221013020, -0.820659775103197540, -0.820688344933732660, -0.820716912712546990, -0.820745478439568910, -0.820774042114727710, +-0.820802603737950890, -0.820831163309167610, -0.820859720828306380, -0.820888276295296370, -0.820916829710065080, -0.820945381072541780, -0.820973930382655090, -0.821002477640333520, +-0.821031022845505660, -0.821059565998100370, -0.821088107098046140, -0.821116646145271580, -0.821145183139705530, -0.821173718081276370, -0.821202250969913510, -0.821230781805544540, +-0.821259310588098530, -0.821287837317504320, -0.821316361993691070, -0.821344884616586280, -0.821373405186119340, -0.821401923702218870, -0.821430440164813590, -0.821458954573832220, +-0.821487466929203490, -0.821515977230856120, -0.821544485478718720, -0.821572991672720130, -0.821601495812789070, -0.821629997898854820, -0.821658497930845000, -0.821686995908688990, +-0.821715491832315510, -0.821743985701653750, -0.821772477516631520, -0.821800967277178110, -0.821829454983222350, -0.821857940634692860, -0.821886424231518590, -0.821914905773628130, +-0.821943385260950570, -0.821971862693414490, -0.822000338070948740, -0.822028811393482050, -0.822057282660943470, -0.822085751873262160, -0.822114219030365860, -0.822142684132184160, +-0.822171147178646140, -0.822199608169679850, -0.822228067105214460, -0.822256523985179010, -0.822284978809502130, -0.822313431578112870, -0.822341882290939960, -0.822370330947912450, +-0.822398777548959070, -0.822427222094008650, -0.822455664582990350, -0.822484105015832800, -0.822512543392465490, -0.822540979712816260, -0.822569413976814710, -0.822597846184389470, +-0.822626276335470250, -0.822654704429984780, -0.822683130467862570, -0.822711554449032540, -0.822739976373423550, -0.822768396240964760, -0.822796814051584890, -0.822825229805213000, +-0.822853643501778030, -0.822882055141208930, -0.822910464723434650, -0.822938872248384800, -0.822967277715987210, -0.822995681126171500, -0.823024082478866600, -0.823052481774001920, +-0.823080879011505510, -0.823109274191306970, -0.823137667313335260, -0.823166058377519330, -0.823194447383788220, -0.823222834332071110, -0.823251219222296830, -0.823279602054394430, +-0.823307982828293210, -0.823336361543921870, -0.823364738201210260, -0.823393112800086200, -0.823421485340479430, -0.823449855822318890, -0.823478224245534300, -0.823506590610053490, +-0.823534954915806310, -0.823563317162721800, -0.823591677350728910, -0.823620035479756820, -0.823648391549734680, -0.823676745560591560, -0.823705097512256510, -0.823733447404658810, +-0.823761795237727410, -0.823790141011391590, -0.823818484725580950, -0.823846826380223550, -0.823875165975249010, -0.823903503510587170, -0.823931838986166070, -0.823960172401915330, +-0.823988503757764110, -0.824016833053641710, -0.824045160289477160, -0.824073485465199760, -0.824101808580738670, -0.824130129636022950, -0.824158448630981980, -0.824186765565544930, +-0.824215080439640870, -0.824243393253199730, -0.824271704006149460, -0.824300012698420130, -0.824328319329940550, -0.824356623900640790, -0.824384926410449030, -0.824413226859294860, +-0.824441525247107570, -0.824469821573816540, -0.824498115839350950, -0.824526408043640080, -0.824554698186613200, -0.824582986268199590, -0.824611272288328420, -0.824639556246929200, +-0.824667838143931520, -0.824696117979263790, -0.824724395752855610, -0.824752671464636600, -0.824780945114536370, -0.824809216702483310, -0.824837486228407140, -0.824865753692237360, +-0.824894019093903030, -0.824922282433333760, -0.824950543710458840, -0.824978802925207420, -0.825007060077509120, -0.825035315167293120, -0.825063568194488780, -0.825091819159026070, +-0.825120068060833380, -0.825148314899840420, -0.825176559675976700, -0.825204802389172040, -0.825233043039354960, -0.825261281626455290, -0.825289518150402300, -0.825317752611125610, +-0.825345985008554490, -0.825374215342618460, -0.825402443613246770, -0.825430669820369060, -0.825458893963914700, -0.825487116043813090, -0.825515336059994160, -0.825543554012386440, +-0.825571769900919740, -0.825599983725523790, -0.825628195486128200, -0.825656405182661700, -0.825684612815054230, -0.825712818383235180, -0.825741021887134050, -0.825769223326680350, +-0.825797422701803670, -0.825825620012433430, -0.825853815258499100, -0.825882008439930200, -0.825910199556656340, -0.825938388608607020, -0.825966575595712180, -0.825994760517900330, +-0.826022943375101630, -0.826051124167245580, -0.826079302894262350, -0.826107479556080220, -0.826135654152629350, -0.826163826683839480, -0.826191997149639870, -0.826220165549960360, +-0.826248331884730460, -0.826276496153879770, -0.826304658357337800, -0.826332818495034150, -0.826360976566898440, -0.826389132572860840, -0.826417286512849960, -0.826445438386795740, +-0.826473588194628020, -0.826501735936276740, -0.826529881611670740, -0.826558025220739960, -0.826586166763414120, -0.826614306239622840, -0.826642443649295840, -0.826670578992362740, +-0.826698712268753130, -0.826726843478396760, -0.826754972621223330, -0.826783099697162460, -0.826811224706144320, -0.826839347648097630, -0.826867468522952560, -0.826895587330638840, +-0.826923704071086620, -0.826951818744224630, -0.826979931349983160, -0.827008041888291800, -0.827036150359080290, -0.827064256762278460, -0.827092361097816030, -0.827120463365622620, +-0.827148563565628160, -0.827176661697762160, -0.827204757761954570, -0.827232851758135660, -0.827260943686234040, -0.827289033546180110, -0.827317121337903470, -0.827345207061334630, +-0.827373290716402310, -0.827401372303036680, -0.827429451821167670, -0.827457529270725020, -0.827485604651638560, -0.827513677963838010, -0.827541749207253320, -0.827569818381814310, +-0.827597885487450720, -0.827625950524092380, -0.827654013491669230, -0.827682074390111430, -0.827710133219348050, -0.827738189979309260, -0.827766244669925100, -0.827794297291125750, +-0.827822347842840140, -0.827850396324998680, -0.827878442737531310, -0.827906487080367740, -0.827934529353438030, -0.827962569556671910, -0.827990607689999440, -0.828018643753350440, +-0.828046677746654750, -0.828074709669842420, -0.828102739522843860, -0.828130767305587880, -0.828158793018004990, -0.828186816660025250, -0.828214838231578820, -0.828242857732594870, +-0.828270875163003680, -0.828298890522735420, -0.828326903811719810, -0.828354915029887010, -0.828382924177166970, -0.828410931253489520, -0.828438936258784840, -0.828466939192982750, +-0.828494940056013430, -0.828522938847807140, -0.828550935568292960, -0.828578930217401590, -0.828606922795062760, -0.828634913301207200, -0.828662901735763850, -0.828690888098663200, +-0.828718872389835440, -0.828746854609210380, -0.828774834756718200, -0.828802812832288960, -0.828830788835852710, -0.828858762767339500, -0.828886734626679390, -0.828914704413802330, +-0.828942672128639150, -0.828970637771118680, -0.828998601341171650, -0.829026562838728110, -0.829054522263718670, -0.829082479616072510, -0.829110434895720010, -0.829138388102591550, +-0.829166339236617090, -0.829194288297726680, -0.829222235285850710, -0.829250180200919010, -0.829278123042861970, -0.829306063811609540, -0.829334002507091990, -0.829361939129239390, +-0.829389873677982450, -0.829417806153250340, -0.829445736554973780, -0.829473664883083270, -0.829501591137508210, -0.829529515318179090, -0.829557437425026190, -0.829585357457979790, +-0.829613275416969940, -0.829641191301926820, -0.829669105112780800, -0.829697016849461950, -0.829724926511900660, -0.829752834100026980, -0.829780739613771300, -0.829808643053064230, +-0.829836544417835050, -0.829864443708014490, -0.829892340923532810, -0.829920236064320750, -0.829948129130307690, -0.829976020121424240, -0.830003909037600800, -0.830031795878767520, +-0.830059680644854800, -0.830087563335792810, -0.830115443951511930, -0.830143322491942560, -0.830171198957014740, -0.830199073346658990, -0.830226945660806010, -0.830254815899385320, +-0.830282684062327410, -0.830310550149562900, -0.830338414161022390, -0.830366276096635490, -0.830394135956332820, -0.830421993740044770, -0.830449849447701840, -0.830477703079234300, +-0.830505554634572430, -0.830533404113646620, -0.830561251516387380, -0.830589096842724970, -0.830616940092589910, -0.830644781265912900, -0.830672620362623460, -0.830700457382652520, +-0.830728292325930370, -0.830756125192388060, -0.830783955981954870, -0.830811784694561850, -0.830839611330139280, -0.830867435888617780, -0.830895258369927610, -0.830923078773999400, +-0.830950897100763420, -0.830978713350150170, -0.831006527522090140, -0.831034339616513850, -0.831062149633351680, -0.831089957572534680, -0.831117763433992240, -0.831145567217655420, +-0.831173368923455060, -0.831201168551320870, -0.831228966101183800, -0.831256761572974350, -0.831284554966622900, -0.831312346282060080, -0.831340135519216370, -0.831367922678022400, +-0.831395707758408540, -0.831423490760305530, -0.831451271683643740, -0.831479050528353690, -0.831506827294366650, -0.831534601981611890, -0.831562374590020690, -0.831590145119523560, +-0.831617913570051550, -0.831645679941534380, -0.831673444233902880, -0.831701206447087780, -0.831728966581019690, -0.831756724635629220, -0.831784480610846870, -0.831812234506603350, +-0.831839986322829180, -0.831867736059455190, -0.831895483716411750, -0.831923229293630050, -0.831950972791039910, -0.831978714208572280, -0.832006453546157880, -0.832034190803727870, +-0.832061925981211760, -0.832089659078540930, -0.832117390095646000, -0.832145119032457470, -0.832172845888906280, -0.832200570664922920, -0.832228293360438130, -0.832256013975382510, +-0.832283732509687010, -0.832311448963282130, -0.832339163336099030, -0.832366875628067660, -0.832394585839119070, -0.832422293969183990, -0.832450000018193690, -0.832477703986077790, +-0.832505405872767780, -0.832533105678194160, -0.832560803402287770, -0.832588499044979450, -0.832616192606199900, -0.832643884085879750, -0.832671573483949930, -0.832699260800341290, +-0.832726946034984430, -0.832754629187810070, -0.832782310258749820, -0.832809989247733200, -0.832837666154691680, -0.832865340979556450, -0.832893013722257320, -0.832920684382725710, +-0.832948352960892310, -0.832976019456688200, -0.833003683870043870, -0.833031346200890480, -0.833059006449158650, -0.833086664614779320, -0.833114320697683210, -0.833141974697801490, +-0.833169626615064660, -0.833197276449404440, -0.833224924200750340, -0.833252569869034070, -0.833280213454186350, -0.833307854956138570, -0.833335494374820680, -0.833363131710163960, +-0.833390766962099570, -0.833418400130558120, -0.833446031215470780, -0.833473660216768280, -0.833501287134381650, -0.833528911968241860, -0.833556534718279730, -0.833584155384426320, +-0.833611773966612900, -0.833639390464769650, -0.833667004878827940, -0.833694617208718620, -0.833722227454373300, -0.833749835615722020, -0.833777441692696080, -0.833805045685226400, +-0.833832647593244270, -0.833860247416680520, -0.833887845155466100, -0.833915440809532060, -0.833943034378809460, -0.833970625863229230, -0.833998215262722440, -0.834025802577220590, +-0.834053387806653830, -0.834080970950953460, -0.834108552010050850, -0.834136130983877180, -0.834163707872362710, -0.834191282675439070, -0.834218855393037200, -0.834246426025088140, +-0.834273994571523070, -0.834301561032272930, -0.834329125407269000, -0.834356687696442110, -0.834384247899723650, -0.834411806017044460, -0.834439362048335910, -0.834466915993529290, +-0.834494467852554990, -0.834522017625344390, -0.834549565311829330, -0.834577110911939870, -0.834604654425607610, -0.834632195852763710, -0.834659735193339360, -0.834687272447265590, +-0.834714807614473700, -0.834742340694894840, -0.834769871688460060, -0.834797400595100660, -0.834824927414747680, -0.834852452147332390, -0.834879974792786530, -0.834907495351040140, +-0.834935013822025060, -0.834962530205672460, -0.834990044501914050, -0.835017556710680010, -0.835045066831902050, -0.835072574865511560, -0.835100080811439490, -0.835127584669617230, +-0.835155086439976050, -0.835182586122447110, -0.835210083716961820, -0.835237579223451210, -0.835265072641846680, -0.835292563972079960, -0.835320053214081320, -0.835347540367782580, +-0.835375025433114930, -0.835402508410010290, -0.835429989298398850, -0.835457468098212420, -0.835484944809382400, -0.835512419431839850, -0.835539891965516370, -0.835567362410343240, +-0.835594830766251520, -0.835622297033172920, -0.835649761211038400, -0.835677223299779560, -0.835704683299328120, -0.835732141209614590, -0.835759597030570570, -0.835787050762127670, +-0.835814502404217510, -0.835841951956770690, -0.835869399419718940, -0.835896844792993750, -0.835924288076526410, -0.835951729270248410, -0.835979168374091030, -0.836006605387985660, +-0.836034040311863900, -0.836061473145657040, -0.836088903889296350, -0.836116332542713560, -0.836143759105840380, -0.836171183578607310, -0.836198605960946310, -0.836226026252789190, +-0.836253444454066570, -0.836280860564710400, -0.836308274584651960, -0.836335686513822950, -0.836363096352154670, -0.836390504099578600, -0.836417909756026370, -0.836445313321429350, +-0.836472714795718940, -0.836500114178826860, -0.836527511470684490, -0.836554906671223790, -0.836582299780375350, -0.836609690798071130, -0.836637079724242730, -0.836664466558821980, +-0.836691851301739730, -0.836719233952927800, -0.836746614512317800, -0.836773992979841230, -0.836801369355429810, -0.836828743639014830, -0.836856115830527990, -0.836883485929900920, +-0.836910853937065100, -0.836938219851952160, -0.836965583674494140, -0.836992945404621770, -0.837020305042266880, -0.837047662587361410, -0.837075018039837080, -0.837102371399624840, +-0.837129722666656640, -0.837157071840864080, -0.837184418922178990, -0.837211763910532760, -0.837239106805857110, -0.837266447608083660, -0.837293786317144130, -0.837321122932970120, +-0.837348457455493360, -0.837375789884645890, -0.837403120220358450, -0.837430448462563200, -0.837457774611191860, -0.837485098666176600, -0.837512420627448130, -0.837539740494938510, +-0.837567058268579580, -0.837594373948303050, -0.837621687534040540, -0.837648999025723760, -0.837676308423284550, -0.837703615726654640, -0.837730920935765510, -0.837758224050549230, +-0.837785525070937400, -0.837812823996862190, -0.837840120828254320, -0.837867415565046290, -0.837894708207170160, -0.837921998754556860, -0.837949287207138460, -0.837976573564846890, +-0.838003857827613880, -0.838031139995371150, -0.838058420068050650, -0.838085698045584080, -0.838112973927903290, -0.838140247714940110, -0.838167519406626260, -0.838194789002893570, +-0.838222056503674430, -0.838249321908899670, -0.838276585218501570, -0.838303846432411960, -0.838331105550563340, -0.838358362572886430, -0.838385617499313620, -0.838412870329776740, +-0.838440121064207730, -0.838467369702538320, -0.838494616244700560, -0.838521860690626290, -0.838549103040247320, -0.838576343293495620, -0.838603581450303000, -0.838630817510601980, +-0.838658051474323370, -0.838685283341399690, -0.838712513111762760, -0.838739740785345080, -0.838766966362077590, -0.838794189841892580, -0.838821411224722200, -0.838848630510498180, +-0.838875847699152690, -0.838903062790617550, -0.838930275784824710, -0.838957486681706220, -0.838984695481194030, -0.839011902183220080, -0.839039106787716870, -0.839066309294615340, +-0.839093509703848110, -0.839120708015347110, -0.839147904229044730, -0.839175098344872250, -0.839202290362761950, -0.839229480282645880, -0.839256668104456200, -0.839283853828124760, +-0.839311037453583710, -0.839338218980765110, -0.839365398409601000, -0.839392575740023350, -0.839419750971964200, -0.839446924105355710, -0.839474095140130490, -0.839501264076219390, +-0.839528430913555220, -0.839555595652070500, -0.839582758291696150, -0.839609918832365020, -0.839637077274009160, -0.839664233616560510, -0.839691387859951230, -0.839718540004113610, +-0.839745690048979480, -0.839772837994481320, -0.839799983840550990, -0.839827127587120640, -0.839854269234122430, -0.839881408781489200, -0.839908546229151790, -0.839935681577043130, +-0.839962814825095270, -0.839989945973240730, -0.840017075021410990, -0.840044201969538550, -0.840071326817555470, -0.840098449565394260, -0.840125570212986730, -0.840152688760265390, +-0.840179805207162400, -0.840206919553609710, -0.840234031799539820, -0.840261141944884880, -0.840288249989577520, -0.840315355933549110, -0.840342459776732280, -0.840369561519059280, +-0.840396661160462850, -0.840423758700874380, -0.840450854140226470, -0.840477947478451390, -0.840505038715481430, -0.840532127851248870, -0.840559214885685970, -0.840586299818725120, +-0.840613382650298500, -0.840640463380338380, -0.840667542008777140, -0.840694618535547500, -0.840721692960580860, -0.840748765283809930, -0.840775835505167100, -0.840802903624585210, +-0.840829969641995630, -0.840857033557331100, -0.840884095370523890, -0.840911155081506490, -0.840938212690211180, -0.840965268196570470, -0.840992321600516400, -0.841019372901981700, +-0.841046422100898420, -0.841073469197199160, -0.841100514190816660, -0.841127557081682520, -0.841154597869729350, -0.841181636554889760, -0.841208673137096460, -0.841235707616281080, +-0.841262739992376440, -0.841289770265314930, -0.841316798435029050, -0.841343824501451070, -0.841370848464513600, -0.841397870324149030, -0.841424890080289760, -0.841451907732868270, +-0.841478923281816950, -0.841505936727068300, -0.841532948068555390, -0.841559957306209580, -0.841586964439963950, -0.841613969469750870, -0.841640972395503280, -0.841667973217152810, +-0.841694971934632390, -0.841721968547874620, -0.841748963056811910, -0.841775955461376730, -0.841802945761501720, -0.841829933957119360, -0.841856920048162150, -0.841883904034562590, +-0.841910885916253290, -0.841937865693167200, -0.841964843365236030, -0.841991818932392830, -0.842018792394570000, -0.842045763751700700, -0.842072733003716430, -0.842099700150550360, +-0.842126665192135080, -0.842153628128403110, -0.842180588959287160, -0.842207547684719620, -0.842234504304633200, -0.842261458818960640, -0.842288411227634310, -0.842315361530587060, +-0.842342309727751810, -0.842369255819060300, -0.842396199804445690, -0.842423141683840580, -0.842450081457178150, -0.842477019124389990, -0.842503954685409280, -0.842530888140168630, +-0.842557819488600760, -0.842584748730638380, -0.842611675866214100, -0.842638600895260770, -0.842665523817710760, -0.842692444633497020, -0.842719363342552150, -0.842746279944809440, +-0.842773194440200380, -0.842800106828658470, -0.842827017110116320, -0.842853925284506980, -0.842880831351762390, -0.842907735311815730, -0.842934637164599710, -0.842961536910047160, +-0.842988434548090800, -0.843015330078663250, -0.843042223501697440, -0.843069114817125990, -0.843096004024881830, -0.843122891124897690, -0.843149776117106290, -0.843176659001440900, +-0.843203539777833360, -0.843230418446217040, -0.843257295006524580, -0.843284169458689450, -0.843311041802643380, -0.843337912038319760, -0.843364780165651310, -0.843391646184570850, +-0.843418510095011340, -0.843445371896905600, -0.843472231590186470, -0.843499089174786660, -0.843525944650639130, -0.843552798017676690, -0.843579649275832840, -0.843606498425039320, +-0.843633345465229610, -0.843660190396336550, -0.843687033218293410, -0.843713873931032250, -0.843740712534486460, -0.843767549028588860, -0.843794383413272290, -0.843821215688469910, +-0.843848045854114330, -0.843874873910138820, -0.843901699856476010, -0.843928523693058930, -0.843955345419820650, -0.843982165036694320, -0.844008982543612230, -0.844035797940507650, +-0.844062611227313520, -0.844089422403963450, -0.844116231470389280, -0.844143038426524610, -0.844169843272302270, -0.844196646007655320, -0.844223446632516690, -0.844250245146819570, +-0.844277041550496770, -0.844303835843481450, -0.844330628025706460, -0.844357418097104850, -0.844384206057610330, -0.844410991907154630, -0.844437775645671570, -0.844464557273094110, +-0.844491336789355620, -0.844518114194388380, -0.844544889488125890, -0.844571662670501100, -0.844598433741447160, -0.844625202700897140, -0.844651969548784190, -0.844678734285041250, +-0.844705496909601390, -0.844732257422397880, -0.844759015823363770, -0.844785772112432110, -0.844812526289536400, -0.844839278354609040, -0.844866028307583390, -0.844892776148393090, +-0.844919521876970500, -0.844946265493249030, -0.844973006997161940, -0.844999746388642280, -0.845026483667623340, -0.845053218834038060, -0.845079951887819810, -0.845106682828901780, +-0.845133411657216890, -0.845160138372698540, -0.845186862975279780, -0.845213585464894450, -0.845240305841474580, -0.845267024104954020, -0.845293740255265820, -0.845320454292343810, +-0.845347166216120160, -0.845373876026528690, -0.845400583723502350, -0.845427289306974640, -0.845453992776878720, -0.845480694133147860, -0.845507393375715230, -0.845534090504514110, +-0.845560785519477780, -0.845587478420539380, -0.845614169207632880, -0.845640857880690430, -0.845667544439645870, -0.845694228884432460, -0.845720911214983940, -0.845747591431232570, +-0.845774269533112300, -0.845800945520556400, -0.845827619393498150, -0.845854291151870720, -0.845880960795607710, -0.845907628324642280, -0.845934293738907720, -0.845960957038337400, +-0.845987618222864720, -0.846014277292423510, -0.846040934246946040, -0.846067589086366260, -0.846094241810617540, -0.846120892419633730, -0.846147540913347210, -0.846174187291691800, +-0.846200831554600910, -0.846227473702007900, -0.846254113733846290, -0.846280751650049350, -0.846307387450550560, -0.846334021135283330, -0.846360652704181040, -0.846387282157177070, +-0.846413909494204920, -0.846440534715198420, -0.846467157820090190, -0.846493778808814050, -0.846520397681303830, -0.846547014437492250, -0.846573629077313150, -0.846600241600699910, +-0.846626852007586140, -0.846653460297905220, -0.846680066471590660, -0.846706670528575840, -0.846733272468794370, -0.846759872292179750, -0.846786469998665470, -0.846813065588185030, +-0.846839659060672380, -0.846866250416060120, -0.846892839654282190, -0.846919426775272210, -0.846946011778964110, -0.846972594665290510, -0.846999175434185460, -0.847025754085582340, +-0.847052330619414980, -0.847078905035616780, -0.847105477334121230, -0.847132047514862040, -0.847158615577772720, -0.847185181522786880, -0.847211745349838120, -0.847238307058860380, +-0.847264866649786510, -0.847291424122550430, -0.847317979477085760, -0.847344532713326550, -0.847371083831205630, -0.847397632830657050, -0.847424179711614320, -0.847450724474011150, +-0.847477267117781150, -0.847503807642857930, -0.847530346049175320, -0.847556882336666820, -0.847583416505266030, -0.847609948554906790, -0.847636478485523040, -0.847663006297047720, +-0.847689531989414880, -0.847716055562558140, -0.847742577016411760, -0.847769096350908580, -0.847795613565982540, -0.847822128661567480, -0.847848641637597100, -0.847875152494005140, +-0.847901661230725300, -0.847928167847691320, -0.847954672344836790, -0.847981174722095780, -0.848007674979401660, -0.848034173116688490, -0.848060669133890220, -0.848087163030939890, +-0.848113654807771680, -0.848140144464319730, -0.848166632000517010, -0.848193117416297770, -0.848219600711595630, -0.848246081886344540, -0.848272560940478200, -0.848299037873930460, +-0.848325512686635140, -0.848351985378526070, -0.848378455949536980, -0.848404924399601800, -0.848431390728654260, -0.848457854936628840, -0.848484317023458170, -0.848510776989076730, +-0.848537234833418360, -0.848563690556417450, -0.848590144158006820, -0.848616595638120750, -0.848643044996693190, -0.848669492233658060, -0.848695937348949210, -0.848722380342500580, +-0.848748821214245890, -0.848775259964119180, -0.848801696592054290, -0.848828131097985270, -0.848854563481846290, -0.848880993743570400, -0.848907421883092090, -0.848933847900345210, +-0.848960271795264230, -0.848986693567782110, -0.849013113217833130, -0.849039530745351430, -0.849065946150270980, -0.849092359432525590, -0.849118770592049320, -0.849145179628776110, +-0.849171586542640020, -0.849197991333574880, -0.849224394001514840, -0.849250794546394180, -0.849277192968146080, -0.849303589266705130, -0.849329983442005050, -0.849356375493980580, +-0.849382765422564630, -0.849409153227691840, -0.849435538909296130, -0.849461922467311560, -0.849488303901672180, -0.849514683212312050, -0.849541060399165220, -0.849567435462165730, +-0.849593808401247650, -0.849620179216345140, -0.849646547907392140, -0.849672914474323140, -0.849699278917071420, -0.849725641235571590, -0.849752001429758040, -0.849778359499564040, +-0.849804715444924200, -0.849831069265772450, -0.849857420962043200, -0.849883770533670260, -0.849910117980587910, -0.849936463302730320, -0.849962806500031530, -0.849989147572425720, +-0.850015486519847040, -0.850041823342229660, -0.850068158039508190, -0.850094490611615900, -0.850120821058487300, -0.850147149380056640, -0.850173475576258660, -0.850199799647026520, +-0.850226121592294830, -0.850252441411997850, -0.850278759106069760, -0.850305074674444830, -0.850331388117057110, -0.850357699433840990, -0.850384008624730630, -0.850410315689660190, +-0.850436620628564070, -0.850462923441376750, -0.850489224128031740, -0.850515522688463530, -0.850541819122606620, -0.850568113430395620, -0.850594405611763920, -0.850620695666646220, +-0.850646983594976700, -0.850673269396689750, -0.850699553071719630, -0.850725834620000620, -0.850752114041467000, -0.850778391336053040, -0.850804666503693240, -0.850830939544321760, +-0.850857210457873330, -0.850883479244281430, -0.850909745903480790, -0.850936010435405790, -0.850962272839991370, -0.850988533117170600, -0.851014791266878620, -0.851041047289049610, +-0.851067301183618060, -0.851093552950518250, -0.851119802589684450, -0.851146050101051270, -0.851172295484552870, -0.851198538740123740, -0.851224779867698290, -0.851251018867210880, +-0.851277255738596470, -0.851303490481788330, -0.851329723096721500, -0.851355953583330940, -0.851382181941549910, -0.851408408171313470, -0.851434632272556000, -0.851460854245211900, +-0.851487074089215760, -0.851513291804501860, -0.851539507391004700, -0.851565720848658890, -0.851591932177398700, -0.851618141377158740, -0.851644348447873400, -0.851670553389477610, +-0.851696756201904990, -0.851722956885090480, -0.851749155438968560, -0.851775351863474310, -0.851801546158541090, -0.851827738324104080, -0.851853928360097770, -0.851880116266456540, +-0.851906302043115020, -0.851932485690007790, -0.851958667207069360, -0.851984846594234240, -0.852011023851437010, -0.852037198978612300, -0.852063371975694930, -0.852089542842618730, +-0.852115711579318650, -0.852141878185729280, -0.852168042661785700, -0.852194205007421490, -0.852220365222571830, -0.852246523307171320, -0.852272679261154460, -0.852298833084455860, +-0.852324984777010130, -0.852351134338751980, -0.852377281769616020, -0.852403427069536870, -0.852429570238449120, -0.852455711276287940, -0.852481850182987060, -0.852507986958481510, +-0.852534121602705920, -0.852560254115595550, -0.852586384497084130, -0.852612512747106700, -0.852638638865597990, -0.852664762852492600, -0.852690884707725470, -0.852717004431231000, +-0.852743122022944110, -0.852769237482799310, -0.852795350810731550, -0.852821462006675300, -0.852847571070565410, -0.852873678002337150, -0.852899782801924130, -0.852925885469261620, +-0.852951986004285010, -0.852978084406927910, -0.853004180677125580, -0.853030274814812750, -0.853056366819924250, -0.853082456692394910, -0.853108544432159440, -0.853134630039152460, +-0.853160713513309020, -0.853186794854563830, -0.853212874062851510, -0.853238951138107100, -0.853265026080265780, -0.853291098889261470, -0.853317169565029340, -0.853343238107504340, +-0.853369304516621630, -0.853395368792315260, -0.853421430934520500, -0.853447490943172070, -0.853473548818205030, -0.853499604559553980, -0.853525658167153980, -0.853551709640939850, +-0.853577758980846420, -0.853603806186808640, -0.853629851258761340, -0.853655894196639790, -0.853681935000378140, -0.853707973669911580, -0.853734010205175140, -0.853760044606104110, +-0.853786076872632530, -0.853812107004695790, -0.853838135002228720, -0.853864160865166370, -0.853890184593443570, -0.853916206186995260, -0.853942225645756500, -0.853968242969662230, +-0.853994258158647270, -0.854020271212646680, -0.854046282131595840, -0.854072290915428910, -0.854098297564081180, -0.854124302077487800, -0.854150304455584040, -0.854176304698304080, +-0.854202302805583400, -0.854228298777356950, -0.854254292613559670, -0.854280284314126730, -0.854306273878993160, -0.854332261308093810, -0.854358246601363720, -0.854384229758738180, +-0.854410210780152000, -0.854436189665540250, -0.854462166414838520, -0.854488141027980990, -0.854514113504903030, -0.854540083845540250, -0.854566052049826830, -0.854592018117698250, +-0.854617982049089560, -0.854643943843936050, -0.854669903502172530, -0.854695861023734400, -0.854721816408556600, -0.854747769656574170, -0.854773720767722400, -0.854799669741936220, +-0.854825616579151020, -0.854851561279302170, -0.854877503842323860, -0.854903444268151900, -0.854929382556721350, -0.854955318707967700, -0.854981252721825350, -0.855007184598229890, +-0.855033114337116480, -0.855059041938420190, -0.855084967402076400, -0.855110890728020160, -0.855136811916186730, -0.855162730966511190, -0.855188647878928900, -0.855214562653374920, +-0.855240475289784970, -0.855266385788093440, -0.855292294148235930, -0.855318200370147720, -0.855344104453764410, -0.855370006399020390, -0.855395906205851380, -0.855421803874192640, +-0.855447699403979360, -0.855473592795146790, -0.855499484047630320, -0.855525373161365010, -0.855551260136286350, -0.855577144972329510, -0.855603027669429860, -0.855628908227523130, +-0.855654786646543600, -0.855680662926427080, -0.855706537067108970, -0.855732409068524990, -0.855758278930609410, -0.855784146653298270, -0.855810012236526640, -0.855835875680230120, +-0.855861736984343760, -0.855887596148803160, -0.855913453173543500, -0.855939308058500270, -0.855965160803608740, -0.855991011408804290, -0.856016859874022430, -0.856042706199198760, +-0.856068550384267880, -0.856094392429165630, -0.856120232333827950, -0.856146070098189100, -0.856171905722185160, -0.856197739205751370, -0.856223570548823250, -0.856249399751336290, +-0.856275226813225760, -0.856301051734427170, -0.856326874514875990, -0.856352695154507630, -0.856378513653257460, -0.856404330011061090, -0.856430144227854240, -0.856455956303571740, +-0.856481766238149200, -0.856507574031522330, -0.856533379683626970, -0.856559183194397610, -0.856584984563770410, -0.856610783791680650, -0.856636580878064050, -0.856662375822855870, +-0.856688168625991840, -0.856713959287407350, -0.856739747807037990, -0.856765534184819270, -0.856791318420686680, -0.856817100514576270, -0.856842880466422650, -0.856868658276161770, +-0.856894433943729330, -0.856920207469061280, -0.856945978852092230, -0.856971748092758110, -0.856997515190994760, -0.857023280146737560, -0.857049042959922240, -0.857074803630484270, +-0.857100562158359280, -0.857126318543482870, -0.857152072785790640, -0.857177824885218320, -0.857203574841701840, -0.857229322655175930, -0.857255068325576740, -0.857280811852839890, +-0.857306553236901410, -0.857332292477696160, -0.857358029575160160, -0.857383764529229150, -0.857409497339838620, -0.857435228006924510, -0.857460956530422200, -0.857486682910267530, +-0.857512407146396090, -0.857538129238743730, -0.857563849187245930, -0.857589566991839080, -0.857615282652457790, -0.857640996169038330, -0.857666707541516420, -0.857692416769828100, +-0.857718123853908330, -0.857743828793693260, -0.857769531589118620, -0.857795232240120110, -0.857820930746633570, -0.857846627108594720, -0.857872321325939160, -0.857898013398602940, +-0.857923703326521680, -0.857949391109631090, -0.857975076747867100, -0.858000760241165780, -0.858026441589462170, -0.858052120792692440, -0.858077797850792410, -0.858103472763698360, +-0.858129145531345230, -0.858154816153669180, -0.858180484630606030, -0.858206150962091740, -0.858231815148062020, -0.858257477188452800, -0.858283137083199920, -0.858308794832239100, +-0.858334450435506380, -0.858360103892937490, -0.858385755204468800, -0.858411404370035270, -0.858437051389573270, -0.858462696263018630, -0.858488338990307630, -0.858513979571375430, +-0.858539618006158190, -0.858565254294591960, -0.858590888436612580, -0.858616520432155970, -0.858642150281158090, -0.858667777983554870, -0.858693403539282140, -0.858719026948275840, +-0.858744648210472140, -0.858770267325807080, -0.858795884294216050, -0.858821499115635210, -0.858847111790000730, -0.858872722317248870, -0.858898330697314690, -0.858923936930134800, +-0.858949541015645020, -0.858975142953781300, -0.859000742744479910, -0.859026340387676560, -0.859051935883307300, -0.859077529231308310, -0.859103120431615410, -0.859128709484164750, +-0.859154296388892740, -0.859179881145734510, -0.859205463754626700, -0.859231044215505110, -0.859256622528306370, -0.859282198692965740, -0.859307772709419490, -0.859333344577603910, +-0.859358914297454810, -0.859384481868908590, -0.859410047291901070, -0.859435610566368520, -0.859461171692246890, -0.859486730669472340, -0.859512287497980920, -0.859537842177708790, +-0.859563394708592550, -0.859588945090567380, -0.859614493323569760, -0.859640039407535970, -0.859665583342402620, -0.859691125128104750, -0.859716664764579090, -0.859742202251761790, +-0.859767737589588910, -0.859793270777996720, -0.859818801816921390, -0.859844330706299060, -0.859869857446065920, -0.859895382036158120, -0.859920904476511820, -0.859946424767063730, +-0.859971942907749140, -0.859997458898504650, -0.860022972739266530, -0.860048484429971500, -0.860073993970554730, -0.860099501360953030, -0.860125006601102580, -0.860150509690939540, +-0.860176010630400280, -0.860201509419420970, -0.860227006057937890, -0.860252500545887310, -0.860277992883205500, -0.860303483069828620, -0.860328971105693620, -0.860354456990735650, +-0.860379940724891550, -0.860405422308097580, -0.860430901740290580, -0.860456379021405810, -0.860481854151380120, -0.860507327130149770, -0.860532797957651140, -0.860558266633820510, +-0.860583733158594160, -0.860609197531908450, -0.860634659753699900, -0.860660119823904560, -0.860685577742459020, -0.860711033509299890, -0.860736487124362790, -0.860761938587584540, +-0.860787387898901300, -0.860812835058250130, -0.860838280065566400, -0.860863722920786940, -0.860889163623848150, -0.860914602174686520, -0.860940038573238420, -0.860965472819440140, +-0.860990904913228160, -0.861016334854538990, -0.861041762643309010, -0.861067188279474590, -0.861092611762972140, -0.861118033093738690, -0.861143452271709630, -0.861168869296822010, +-0.861194284169012670, -0.861219696888217090, -0.861245107454372330, -0.861270515867414770, -0.861295922127280900, -0.861321326233907340, -0.861346728187230350, -0.861372127987186540, +-0.861397525633712520, -0.861422921126744570, -0.861448314466219390, -0.861473705652073370, -0.861499094684243570, -0.861524481562665590, -0.861549866287276480, -0.861575248858012510, +-0.861600629274811070, -0.861626007537607430, -0.861651383646338860, -0.861676757600941870, -0.861702129401352930, -0.861727499047508670, -0.861752866539345690, -0.861778231876800580, +-0.861803595059809750, -0.861828956088310120, -0.861854314962237970, -0.861879671681530460, -0.861905026246123420, -0.861930378655953790, -0.861955728910958170, -0.861981077011073740, +-0.862006422956236080, -0.862031766746382490, -0.862057108381449330, -0.862082447861373560, -0.862107785186091550, -0.862133120355540130, -0.862158453369655910, -0.862183784228375490, +-0.862209112931635600, -0.862234439479373060, -0.862259763871524810, -0.862285086108026680, -0.862310406188815830, -0.862335724113828970, -0.862361039883003280, -0.862386353496274570, +-0.862411664953579900, -0.862436974254856100, -0.862462281400039890, -0.862487586389067970, -0.862512889221876970, -0.862538189898403920, -0.862563488418585320, -0.862588784782358010, +-0.862614078989658690, -0.862639371040424210, -0.862664660934591710, -0.862689948672097140, -0.862715234252877770, -0.862740517676870660, -0.862765798944011840, -0.862791078054238600, +-0.862816355007487550, -0.862841629803695720, -0.862866902442799730, -0.862892172924736520, -0.862917441249442810, -0.862942707416855640, -0.862967971426911620, -0.862993233279547580, +-0.863018492974700570, -0.863043750512307750, -0.863069005892305170, -0.863094259114630000, -0.863119510179219170, -0.863144759086010070, -0.863170005834938640, -0.863195250425942140, +-0.863220492858957520, -0.863245733133921610, -0.863270971250771460, -0.863296207209443890, -0.863321441009875730, -0.863346672652004040, -0.863371902135765650, -0.863397129461097480, +-0.863422354627936930, -0.863447577636220040, -0.863472798485884210, -0.863498017176866470, -0.863523233709104000, -0.863548448082533060, -0.863573660297091040, -0.863598870352714760, +-0.863624078249341400, -0.863649283986907880, -0.863674487565351030, -0.863699688984608030, -0.863724888244615910, -0.863750085345311390, -0.863775280286631750, -0.863800473068514370, +-0.863825663690895310, -0.863850852153712050, -0.863876038456901750, -0.863901222600401810, -0.863926404584148270, -0.863951584408078840, -0.863976762072130370, -0.864001937576240000, +-0.864027110920344790, -0.864052282104381790, -0.864077451128288150, -0.864102617992000830, -0.864127782695456980, -0.864152945238593650, -0.864178105621348000, -0.864203263843657530, +-0.864228419905458400, -0.864253573806688210, -0.864278725547284580, -0.864303875127183760, -0.864329022546323160, -0.864354167804640030, -0.864379310902071430, -0.864404451838554630, +-0.864429590614026690, -0.864454727228424760, -0.864479861681686000, -0.864504993973747580, -0.864530124104546660, -0.864555252074020400, -0.864580377882106510, -0.864605501528741270, +-0.864630623013862290, -0.864655742337406720, -0.864680859499312170, -0.864705974499515030, -0.864731087337953010, -0.864756198014563270, -0.864781306529283090, -0.864806412882049620, +-0.864831517072800040, -0.864856619101471710, -0.864881718968001810, -0.864906816672327610, -0.864931912214386480, -0.864957005594115810, -0.864982096811452330, -0.865007185866333630, +-0.865032272758696870, -0.865057357488479890, -0.865082440055619180, -0.865107520460052240, -0.865132598701716550, -0.865157674780549390, -0.865182748696488040, -0.865207820449469760, +-0.865232890039431930, -0.865257957466311960, -0.865283022730047090, -0.865308085830574610, -0.865333146767832350, -0.865358205541756800, -0.865383262152285780, -0.865408316599356460, +-0.865433368882906890, -0.865458419002873570, -0.865483466959194090, -0.865508512751805850, -0.865533556380646440, -0.865558597845653140, -0.865583637146763340, -0.865608674283914410, +-0.865633709257043860, -0.865658742066088950, -0.865683772710987290, -0.865708801191676150, -0.865733827508093470, -0.865758851660175740, -0.865783873647860800, -0.865808893471086800, +-0.865833911129790020, -0.865858926623908510, -0.865883939953379640, -0.865908951118140920, -0.865933960118129840, -0.865958966953283780, -0.865983971623540460, -0.866008974128837150, +-0.866033974469111350, -0.866058972644300650, -0.866083968654342560, -0.866108962499174910, -0.866133954178734400, -0.866158943692959090, -0.866183931041786370, -0.866208916225154280, +-0.866233899242999540, -0.866258880095259980, -0.866283858781873200, -0.866308835302776800, -0.866333809657908290, -0.866358781847205270, -0.866383751870605230, -0.866408719728045900, +-0.866433685419464750, -0.866458648944799400, -0.866483610303987790, -0.866508569496966750, -0.866533526523674320, -0.866558481384048120, -0.866583434078026070, -0.866608384605545010, +-0.866633332966542990, -0.866658279160957720, -0.866683223188726700, -0.866708165049787540, -0.866733104744078050, -0.866758042271535860, -0.866782977632098440, -0.866807910825703630, +-0.866832841852289040, -0.866857770711792820, -0.866882697404151690, -0.866907621929303820, -0.866932544287186910, -0.866957464477739030, -0.866982382500897100, -0.867007298356599180, +-0.867032212044783090, -0.867057123565386330, -0.867082032918346960, -0.867106940103602340, -0.867131845121090430, -0.867156747970748930, -0.867181648652515570, -0.867206547166328060, +-0.867231443512124110, -0.867256337689842120, -0.867281229699418790, -0.867306119540792400, -0.867331007213901110, -0.867355892718681850, -0.867380776055072910, -0.867405657223011990, +-0.867430536222436930, -0.867455413053285550, -0.867480287715495680, -0.867505160209005030, -0.867530030533751550, -0.867554898689672950, -0.867579764676707050, -0.867604628494791810, +-0.867629490143865480, -0.867654349623864900, -0.867679206934728440, -0.867704062076393940, -0.867728915048799790, -0.867753765851882910, -0.867778614485581690, -0.867803460949833850, +-0.867828305244577320, -0.867853147369750060, -0.867877987325289980, -0.867902825111134810, -0.867927660727222720, -0.867952494173491410, -0.867977325449878820, -0.868002154556323460, +-0.868026981492762250, -0.868051806259133470, -0.868076628855375290, -0.868101449281425960, -0.868126267537222550, -0.868151083622703550, -0.868175897537806770, -0.868200709282470170, +-0.868225518856631910, -0.868250326260229800, -0.868275131493201900, -0.868299934555486150, -0.868324735447020600, -0.868349534167743190, -0.868374330717592400, -0.868399125096505300, +-0.868423917304420480, -0.868448707341275770, -0.868473495207009780, -0.868498280901559670, -0.868523064424863710, -0.868547845776860170, -0.868572624957486990, -0.868597401966682340, +-0.868622176804384140, -0.868646949470530450, -0.868671719965059430, -0.868696488287909020, -0.868721254439017490, -0.868746018418322770, -0.868770780225763480, -0.868795539861276780, +-0.868820297324801260, -0.868845052616275430, -0.868869805735636550, -0.868894556682823120, -0.868919305457773290, -0.868944052060425240, -0.868968796490717010, -0.868993538748586760, +-0.869018278833972760, -0.869043016746813060, -0.869067752487045710, -0.869092486054609090, -0.869117217449441150, -0.869141946671480700, -0.869166673720664920, -0.869191398596932400, +-0.869216121300221410, -0.869240841830470680, -0.869265560187617250, -0.869290276371599950, -0.869314990382357040, -0.869339702219826590, -0.869364411883946860, -0.869389119374656130, +-0.869413824691892660, -0.869438527835594500, -0.869463228805700150, -0.869487927602147660, -0.869512624224875850, -0.869537318673822000, -0.869562010948924820, -0.869586701050122590, +-0.869611388977354130, -0.869636074730556710, -0.869660758309669160, -0.869685439714629640, -0.869710118945376530, -0.869734796001848220, -0.869759470883982870, -0.869784143591718740, +-0.869808814124994330, -0.869833482483747920, -0.869858148667917770, -0.869882812677442720, -0.869907474512260140, -0.869932134172308970, -0.869956791657527370, -0.869981446967854290, +-0.870006100103227100, -0.870030751063584630, -0.870055399848865370, -0.870080046459007610, -0.870104690893949710, -0.870129333153630060, -0.870153973237987040, -0.870178611146959160, +-0.870203246880484780, -0.870227880438502190, -0.870252511820949980, -0.870277141027766880, -0.870301768058890480, -0.870326392914259730, -0.870351015593813450, -0.870375636097489020, +-0.870400254425225730, -0.870424870576961610, -0.870449484552635380, -0.870474096352185530, -0.870498705975550350, -0.870523313422668420, -0.870547918693478140, -0.870572521787918220, +-0.870597122705926820, -0.870621721447442760, -0.870646318012404770, -0.870670912400750560, -0.870695504612419070, -0.870720094647348790, -0.870744682505478760, -0.870769268186746490, +-0.870793851691091140, -0.870818433018451190, -0.870843012168765030, -0.870867589141971490, -0.870892163938008830, -0.870916736556815900, -0.870941306998331060, -0.870965875262492920, +-0.870990441349240090, -0.871015005258511720, -0.871039566990245320, -0.871064126544379920, -0.871088683920854370, -0.871113239119607360, -0.871137792140576960, -0.871162342983702100, +-0.871186891648921270, -0.871211438136173190, -0.871235982445396570, -0.871260524576530030, -0.871285064529512270, -0.871309602304281670, -0.871334137900777070, -0.871358671318937290, +-0.871383202558701160, -0.871407731620006510, -0.871432258502792710, -0.871456783206998150, -0.871481305732562110, -0.871505826079422290, -0.871530344247517960, -0.871554860236787740, +-0.871579374047170450, -0.871603885678604700, -0.871628395131029190, -0.871652902404382760, -0.871677407498604010, -0.871701910413631760, -0.871726411149404750, -0.871750909705862110, +-0.871775406082941800, -0.871799900280582960, -0.871824392298724330, -0.871848882137305160, -0.871873369796263400, -0.871897855275538200, -0.871922338575068400, -0.871946819694792710, +-0.871971298634649950, -0.871995775394579060, -0.872020249974518660, -0.872044722374407550, -0.872069192594184690, -0.872093660633788900, -0.872118126493158900, -0.872142590172234060, +-0.872167051670952320, -0.872191510989252850, -0.872215968127074690, -0.872240423084357120, -0.872264875861037960, -0.872289326457056590, -0.872313774872351950, -0.872338221106862880, +-0.872362665160528180, -0.872387107033286920, -0.872411546725077810, -0.872435984235839900, -0.872460419565512010, -0.872484852714032980, -0.872509283681342400, -0.872533712467378100, +-0.872558139072079460, -0.872582563495385540, -0.872606985737235720, -0.872631405797567930, -0.872655823676321660, -0.872680239373435750, -0.872704652888849240, -0.872729064222501180, +-0.872753473374330400, -0.872777880344276060, -0.872802285132276870, -0.872826687738271990, -0.872851088162200470, -0.872875486404001590, -0.872899882463613610, -0.872924276340975910, +-0.872948668036027550, -0.872973057548707910, -0.872997444878955140, -0.873021830026708860, -0.873046212991907990, -0.873070593774491480, -0.873094972374398590, -0.873119348791568270, +-0.873143723025939570, -0.873168095077451520, -0.873192464946043300, -0.873216832631653840, -0.873241198134222740, -0.873265561453688280, -0.873289922589989830, -0.873314281543066670, +-0.873338638312858180, -0.873362992899302640, -0.873387345302339630, -0.873411695521908340, -0.873436043557947790, -0.873460389410397050, -0.873484733079195390, -0.873509074564281840, +-0.873533413865595690, -0.873557750983075980, -0.873582085916661870, -0.873606418666292520, -0.873630749231907640, -0.873655077613445410, -0.873679403810845520, -0.873703727824047040, +-0.873728049652989670, -0.873752369297611910, -0.873776686757853030, -0.873801002033652520, -0.873825315124949540, -0.873849626031683150, -0.873873934753792820, -0.873898241291217630, +-0.873922545643896820, -0.873946847811769680, -0.873971147794775360, -0.873995445592853580, -0.874019741205942840, -0.874044034633982720, -0.874068325876912410, -0.874092614934671830, +-0.874116901807199250, -0.874141186494434510, -0.874165468996316640, -0.874189749312785260, -0.874214027443779410, -0.874238303389238470, -0.874262577149101830, -0.874286848723308750, +-0.874311118111798510, -0.874335385314510490, -0.874359650331384410, -0.874383913162358860, -0.874408173807373460, -0.874432432266367580, -0.874456688539281160, -0.874480942626052580, +-0.874505194526621570, -0.874529444240927600, -0.874553691768910070, -0.874577937110508240, -0.874602180265661610, -0.874626421234309450, -0.874650660016391360, -0.874674896611846500, +-0.874699131020614470, -0.874723363242635000, -0.874747593277846790, -0.874771821126189560, -0.874796046787602700, -0.874820270262026240, -0.874844491549398580, -0.874868710649659760, +-0.874892927562749170, -0.874917142288606290, -0.874941354827170500, -0.874965565178381310, -0.874989773342178200, -0.875013979318500670, -0.875038183107288200, -0.875062384708480300, +-0.875086584122016450, -0.875110781347836600, -0.875134976385879230, -0.875159169236084500, -0.875183359898392350, -0.875207548372741280, -0.875231734659071340, -0.875255918757322120, +-0.875280100667433000, -0.875304280389343710, -0.875328457922993740, -0.875352633268322580, -0.875376806425269830, -0.875400977393775090, -0.875425146173777870, -0.875449312765217760, +-0.875473477168034920, -0.875497639382167850, -0.875521799407556700, -0.875545957244141080, -0.875570112891861040, -0.875594266350655180, -0.875618417620463770, -0.875642566701226200, +-0.875666713592882280, -0.875690858295371630, -0.875715000808633740, -0.875739141132608420, -0.875763279267235180, -0.875787415212453730, -0.875811548968203790, -0.875835680534425400, +-0.875859809911057390, -0.875883937098039800, -0.875908062095312470, -0.875932184902815330, -0.875956305520487310, -0.875980423948268580, -0.876004540186098750, -0.876028654233917630, +-0.876052766091664830, -0.876076875759280060, -0.876100983236703160, -0.876125088523873720, -0.876149191620731680, -0.876173292527216650, -0.876197391243268680, -0.876221487768826910, +-0.876245582103831410, -0.876269674248222000, -0.876293764201938830, -0.876317851964920740, -0.876341937537108100, -0.876366020918440510, -0.876390102108857930, -0.876414181108300160, +-0.876438257916706820, -0.876462332534017950, -0.876486404960173160, -0.876510475195112380, -0.876534543238775440, -0.876558609091102170, -0.876582672752032720, -0.876606734221506260, +-0.876630793499462820, -0.876654850585842920, -0.876678905480585470, -0.876702958183630750, -0.876727008694918710, -0.876751057014389050, -0.876775103141981700, -0.876799147077636730, +-0.876823188821293730, -0.876847228372892860, -0.876871265732373950, -0.876895300899676820, -0.876919333874741520, -0.876943364657508220, -0.876967393247916060, -0.876991419645905550, +-0.877015443851416390, -0.877039465864389080, -0.877063485684762670, -0.877087503312477530, -0.877111518747473620, -0.877135531989690960, -0.877159543039069400, -0.877183551895549090, +-0.877207558559069840, -0.877231563029571610, -0.877255565306994560, -0.877279565391278600, -0.877303563282364140, -0.877327558980190440, -0.877351552484697760, -0.877375543795826160, +-0.877399532913516130, -0.877423519837706940, -0.877447504568338870, -0.877471487105352050, -0.877495467448686560, -0.877519445598282320, -0.877543421554079490, -0.877567395316018130, +-0.877591366884038270, -0.877615336258079970, -0.877639303438083380, -0.877663268423989010, -0.877687231215735890, -0.877711191813264850, -0.877735150216515710, -0.877759106425429200, +-0.877783060439944360, -0.877807012260002020, -0.877830961885542100, -0.877854909316504780, -0.877878854552830210, -0.877902797594458440, -0.877926738441329730, -0.877950677093384150, +-0.877974613550561940, -0.877998547812803070, -0.878022479880047890, -0.878046409752237020, -0.878070337429309620, -0.878094262911206400, -0.878118186197867970, -0.878142107289233590, +-0.878166026185243980, -0.878189942885839290, -0.878213857390959700, -0.878237769700545570, -0.878261679814536960, -0.878285587732874130, -0.878309493455497360, -0.878333396982346800, +-0.878357298313362840, -0.878381197448485530, -0.878405094387655790, -0.878428989130812800, -0.878452881677897370, -0.878476772028849660, -0.878500660183610500, -0.878524546142119280, +-0.878548429904316700, -0.878572311470143030, -0.878596190839538550, -0.878620068012443630, -0.878643942988798550, -0.878667815768543580, -0.878691686351619090, -0.878715554737965370, +-0.878739420927522770, -0.878763284920232150, -0.878787146716032750, -0.878811006314865530, -0.878834863716670740, -0.878858718921389340, -0.878882571928960580, -0.878906422739325510, +-0.878930271352424300, -0.878954117768197430, -0.878977961986585290, -0.879001804007528250, -0.879025643830966710, -0.879049481456841030, -0.879073316885091600, -0.879097150115658920, +-0.879120981148483800, -0.879144809983505860, -0.879168636620665800, -0.879192461059904230, -0.879216283301161860, -0.879240103344378410, -0.879263921189494590, -0.879287736836451120, +-0.879311550285188260, -0.879335361535646510, -0.879359170587766360, -0.879382977441488300, -0.879406782096752710, -0.879430584553500210, -0.879454384811671260, -0.879478182871206380, +-0.879501978732046500, -0.879525772394131210, -0.879549563857401460, -0.879573353121798180, -0.879597140187261210, -0.879620925053731350, -0.879644707721149110, -0.879668488189455200, +-0.879692266458590000, -0.879716042528494110, -0.879739816399108250, -0.879763588070372690, -0.879787357542228250, -0.879811124814615430, -0.879834889887474710, -0.879858652760747260, +-0.879882413434372790, -0.879906171908292230, -0.879929928182446200, -0.879953682256775840, -0.879977434131220870, -0.880001183805722230, -0.880024931280220750, -0.880048676554656790, +-0.880072419628971310, -0.880096160503104690, -0.880119899176997620, -0.880143635650590840, -0.880167369923825050, -0.880191101996640750, -0.880214831868979090, -0.880238559540780010, +-0.880262285011984450, -0.880286008282533230, -0.880309729352367400, -0.880333448221426900, -0.880357164889652650, -0.880380879356985610, -0.880404591623366260, -0.880428301688735540, +-0.880452009553034040, -0.880475715216202490, -0.880499418678181600, -0.880523119938912190, -0.880546818998335090, -0.880570515856391230, -0.880594210513020670, -0.880617902968164670, +-0.880641593221763830, -0.880665281273759540, -0.880688967124091500, -0.880712650772701110, -0.880736332219529070, -0.880760011464516210, -0.880783688507603360, -0.880807363348731220, +-0.880831035987840630, -0.880854706424872510, -0.880878374659767700, -0.880902040692466910, -0.880925704522910970, -0.880949366151041250, -0.880973025576797570, -0.880996682800121440, +-0.881020337820954010, -0.881043990639235330, -0.881067641254906660, -0.881091289667908840, -0.881114935878182900, -0.881138579885669570, -0.881162221690309780, -0.881185861292044350, +-0.881209498690814330, -0.881233133886560660, -0.881256766879224050, -0.881280397668745550, -0.881304026255066430, -0.881327652638126960, -0.881351276817868290, -0.881374898794231370, +-0.881398518567157670, -0.881422136136587260, -0.881445751502461520, -0.881469364664721370, -0.881492975623307750, -0.881516584378161830, -0.881540190929224310, -0.881563795276436470, +-0.881587397419739020, -0.881610997359073110, -0.881634595094379690, -0.881658190625600250, -0.881681783952674820, -0.881705375075545030, -0.881728963994151790, -0.881752550708436500, +-0.881776135218339530, -0.881799717523802150, -0.881823297624765410, -0.881846875521170470, -0.881870451212958370, -0.881894024700070170, -0.881917595982446900, -0.881941165060029620, +-0.881964731932759370, -0.881988296600577320, -0.882011859063425050, -0.882035419321242630, -0.882058977373971650, -0.882082533221553170, -0.882106086863928880, -0.882129638301038970, +-0.882153187532824900, -0.882176734559227850, -0.882200279380188970, -0.882223821995649420, -0.882247362405550350, -0.882270900609832820, -0.882294436608438090, -0.882317970401307220, +-0.882341501988381460, -0.882365031369601870, -0.882388558544910160, -0.882412083514246710, -0.882435606277552910, -0.882459126834770680, -0.882482645185840080, -0.882506161330702920, +-0.882529675269300370, -0.882553187001573590, -0.882576696527463840, -0.882600203846912400, -0.882623708959860420, -0.882647211866249170, -0.882670712566019920, -0.882694211059113830, +-0.882717707345472280, -0.882741201425036870, -0.882764693297747980, -0.882788182963547440, -0.882811670422376400, -0.882835155674176590, -0.882858638718888480, -0.882882119556453790, +-0.882905598186813800, -0.882929074609909770, -0.882952548825683080, -0.882976020834075000, -0.882999490635026920, -0.883022958228480090, -0.883046423614375910, -0.883069886792655630, +-0.883093347763260980, -0.883116806526132670, -0.883140263081212300, -0.883163717428441240, -0.883187169567761330, -0.883210619499113060, -0.883234067222438250, -0.883257512737678270, +-0.883280956044774520, -0.883304397143668370, -0.883327836034301210, -0.883351272716614510, -0.883374707190549560, -0.883398139456047950, -0.883421569513050840, -0.883444997361500390, +-0.883468423001336880, -0.883491846432502450, -0.883515267654938260, -0.883538686668586480, -0.883562103473387370, -0.883585518069283200, -0.883608930456215140, -0.883632340634124770, +-0.883655748602953480, -0.883679154362642880, -0.883702557913134460, -0.883725959254369590, -0.883749358386289760, -0.883772755308836590, -0.883796150021951550, -0.883819542525576480, +-0.883842932819652210, -0.883866320904120650, -0.883889706778923650, -0.883913090444001900, -0.883936471899297470, -0.883959851144751840, -0.883983228180306720, -0.884006603005903390, +-0.884029975621483550, -0.884053346026988820, -0.884076714222360780, -0.884100080207540830, -0.884123443982470780, -0.884146805547092020, -0.884170164901346810, -0.884193522045175650, +-0.884216876978520690, -0.884240229701323540, -0.884263580213526360, -0.884286928515069630, -0.884310274605895730, -0.884333618485946050, -0.884356960155162410, -0.884380299613486300, +-0.884403636860859430, -0.884426971897223520, -0.884450304722520060, -0.884473635336690990, -0.884496963739677790, -0.884520289931422620, -0.884543613911866200, -0.884566935680950790, +-0.884590255238618120, -0.884613572584810210, -0.884636887719467910, -0.884660200642533370, -0.884683511353948400, -0.884706819853654510, -0.884730126141593740, -0.884753430217707580, +-0.884776732081937860, -0.884800031734226280, -0.884823329174514670, -0.884846624402744750, -0.884869917418858560, -0.884893208222797270, -0.884916496814502910, -0.884939783193917420, +-0.884963067360982740, -0.884986349315640020, -0.885009629057831540, -0.885032906587498890, -0.885056181904583910, -0.885079455009028630, -0.885102725900774550, -0.885125994579763820, +-0.885149261045937940, -0.885172525299238950, -0.885195787339608800, -0.885219047166988960, -0.885242304781322040, -0.885265560182548980, -0.885288813370611940, -0.885312064345453290, +-0.885335313107014080, -0.885358559655236580, -0.885381803990062720, -0.885405046111434340, -0.885428286019293350, -0.885451523713581600, -0.885474759194241010, -0.885497992461213630, +-0.885521223514441180, -0.885544452353865700, -0.885567678979429120, -0.885590903391073710, -0.885614125588740640, -0.885637345572372280, -0.885660563341910570, -0.885683778897297880, +-0.885706992238475270, -0.885730203365385220, -0.885753412277969670, -0.885776618976170550, -0.885799823459929910, -0.885823025729189690, -0.885846225783891830, -0.885869423623978580, +-0.885892619249391670, -0.885915812660073240, -0.885939003855965580, -0.885962192837010170, -0.885985379603149160, -0.886008564154324720, -0.886031746490479330, -0.886054926611554160, +-0.886078104517491690, -0.886101280208233870, -0.886124453683722950, -0.886147624943900760, -0.886170793988709680, -0.886193960818091430, -0.886217125431988380, -0.886240287830342590, +-0.886263448013095980, -0.886286605980191160, -0.886309761731569500, -0.886332915267173390, -0.886356066586944990, -0.886379215690826780, -0.886402362578760150, -0.886425507250687580, +-0.886448649706551350, -0.886471789946293390, -0.886494927969856070, -0.886518063777181340, -0.886541197368211460, -0.886564328742888600, -0.886587457901155010, -0.886610584842952630, +-0.886633709568224290, -0.886656832076911150, -0.886679952368956030, -0.886703070444301080, -0.886726186302888800, -0.886749299944660560, -0.886772411369559200, -0.886795520577526750, +-0.886818627568505490, -0.886841732342437680, -0.886864834899265600, -0.886887935238931390, -0.886911033361377330, -0.886934129266545690, -0.886957222954378730, -0.886980314424818620, +-0.887003403677808280, -0.887026490713288980, -0.887049575531203450, -0.887072658131493940, -0.887095738514103170, -0.887118816678972740, -0.887141892626045260, -0.887164966355262980, +-0.887188037866568300, -0.887211107159903590, -0.887234174235211000, -0.887257239092433040, -0.887280301731512070, -0.887303362152390250, -0.887326420355009970, -0.887349476339314160, +-0.887372530105244190, -0.887395581652742900, -0.887418630981752670, -0.887441678092216300, -0.887464722984075300, -0.887487765657272500, -0.887510806111750260, -0.887533844347450970, +-0.887556880364317120, -0.887579914162291090, -0.887602945741315260, -0.887625975101332010, -0.887649002242283940, -0.887672027164113310, -0.887695049866762950, -0.887718070350174690, +-0.887741088614291130, -0.887764104659054860, -0.887787118484408830, -0.887810130090294520, -0.887833139476654990, -0.887856146643432490, -0.887879151590569630, -0.887902154318008900, +-0.887925154825692900, -0.887948153113563900, -0.887971149181564500, -0.887994143029637310, -0.888017134657724690, -0.888040124065769710, -0.888063111253713950, -0.888086096221500480, +-0.888109078969071650, -0.888132059496370640, -0.888155037803339040, -0.888178013889919900, -0.888200987756055600, -0.888223959401688970, -0.888246928826762370, -0.888269896031218420, +-0.888292861014999820, -0.888315823778048960, -0.888338784320308660, -0.888361742641721300, -0.888384698742229580, -0.888407652621776570, -0.888430604280304070, -0.888453553717754920, +-0.888476500934072040, -0.888499445929198160, -0.888522388703075430, -0.888545329255646550, -0.888568267586854480, -0.888591203696641680, -0.888614137584950890, -0.888637069251724810, +-0.888659998696905930, -0.888682925920437180, -0.888705850922261060, -0.888728773702320280, -0.888751694260558000, -0.888774612596916150, -0.888797528711337660, -0.888820442603765470, +-0.888843354274142410, -0.888866263722410730, -0.888889170948513270, -0.888912075952392970, -0.888934978733992410, -0.888957879293254430, -0.888980777630121730, -0.889003673744537150, +-0.889026567636443280, -0.889049459305783160, -0.889072348752499190, -0.889095235976534950, -0.889118120977832050, -0.889141003756333980, -0.889163884311983340, -0.889186762644723410, +-0.889209638754496100, -0.889232512641244700, -0.889255384304912130, -0.889278253745441010, -0.889301120962774250, -0.889323985956854690, -0.889346848727625260, -0.889369709275028670, +-0.889392567599007760, -0.889415423699505440, -0.889438277576464990, -0.889461129229828450, -0.889483978659538990, -0.889506825865539750, -0.889529670847773680, -0.889552513606183150, +-0.889575354140711320, -0.889598192451301010, -0.889621028537895380, -0.889643862400437020, -0.889666694038869110, -0.889689523453134460, -0.889712350643175890, -0.889735175608936560, +-0.889757998350359290, -0.889780818867386910, -0.889803637159963020, -0.889826453228029560, -0.889849267071530000, -0.889872078690407630, -0.889894888084604710, -0.889917695254064610, +-0.889940500198730170, -0.889963302918544530, -0.889986103413450640, -0.890008901683391530, -0.890031697728310140, -0.890054491548149420, -0.890077283142852500, -0.890100072512362450, +-0.890122859656622190, -0.890145644575575210, -0.890168427269163680, -0.890191207737331070, -0.890213985980020440, -0.890236761997175270, -0.890259535788737730, -0.890282307354651410, +-0.890305076694859370, -0.890327843809304520, -0.890350608697930150, -0.890373371360679290, -0.890396131797494880, -0.890418890008320310, -0.890441645993098390, -0.890464399751772380, +-0.890487151284285790, -0.890509900590580880, -0.890532647670601250, -0.890555392524289950, -0.890578135151590680, -0.890600875552445600, -0.890623613726798320, -0.890646349674592000, +-0.890669083395769780, -0.890691814890274940, -0.890714544158050510, -0.890737271199039780, -0.890759996013185780, -0.890782718600431900, -0.890805438960721170, -0.890828157093997210, +-0.890850873000202490, -0.890873586679280520, -0.890896298131174660, -0.890919007355828410, -0.890941714353184370, -0.890964419123185910, -0.890987121665776430, -0.891009821980899170, +-0.891032520068497310, -0.891055215928514220, -0.891077909560893060, -0.891100600965577080, -0.891123290142509570, -0.891145977091633900, -0.891168661812893340, -0.891191344306231480, +-0.891214024571590820, -0.891236702608915190, -0.891259378418148170, -0.891282051999232270, -0.891304723352111190, -0.891327392476728430, -0.891350059373027140, -0.891372724040950580, +-0.891395386480442360, -0.891418046691445640, -0.891440704673903790, -0.891463360427760200, -0.891486013952958230, -0.891508665249441170, -0.891531314317152820, -0.891553961156035800, +-0.891576605766033920, -0.891599248147090570, -0.891621888299149460, -0.891644526222153180, -0.891667161916045670, -0.891689795380770090, -0.891712426616270150, -0.891735055622489230, +-0.891757682399370480, -0.891780306946857610, -0.891802929264894020, -0.891825549353423060, -0.891848167212388240, -0.891870782841733380, -0.891893396241401180, -0.891916007411335480, +-0.891938616351479750, -0.891961223061777940, -0.891983827542172650, -0.892006429792607800, -0.892029029813026790, -0.892051627603373310, -0.892074223163590750, -0.892096816493622600, +-0.892119407593412350, -0.892141996462903710, -0.892164583102039940, -0.892187167510764770, -0.892209749689022110, -0.892232329636754700, -0.892254907353906450, -0.892277482840420850, +-0.892300056096241970, -0.892322627121312610, -0.892345195915576710, -0.892367762478977760, -0.892390326811459360, -0.892412888912965220, -0.892435448783438830, -0.892458006422823800, +-0.892480561831063830, -0.892503115008102420, -0.892525665953883160, -0.892548214668349770, -0.892570761151446290, -0.892593305403115430, -0.892615847423301360, -0.892638387211948100, +-0.892660924768998390, -0.892683460094396360, -0.892705993188085740, -0.892728524050010130, -0.892751052680113230, -0.892773579078338650, -0.892796103244630210, -0.892818625178931400, +-0.892841144881186160, -0.892863662351337960, -0.892886177589330640, -0.892908690595108250, -0.892931201368613700, -0.892953709909791170, -0.892976216218584470, -0.892998720294937540, +-0.893021222138793420, -0.893043721750096160, -0.893066219128789700, -0.893088714274817730, -0.893111207188123870, -0.893133697868652040, -0.893156186316345970, -0.893178672531149460, +-0.893201156513006240, -0.893223638261860130, -0.893246117777655280, -0.893268595060334740, -0.893291070109842770, -0.893313542926123080, -0.893336013509119950, -0.893358481858776420, +-0.893380947975036640, -0.893403411857844550, -0.893425873507143860, -0.893448332922878510, -0.893470790104992420, -0.893493245053429200, -0.893515697768133000, -0.893538148249047430, +-0.893560596496116630, -0.893583042509284660, -0.893605486288494680, -0.893627927833690940, -0.893650367144817490, -0.893672804221818500, -0.893695239064636990, -0.893717671673217470, +-0.893740102047503760, -0.893762530187439790, -0.893784956092969480, -0.893807379764036900, -0.893829801200585750, -0.893852220402560070, -0.893874637369903910, -0.893897052102561100, +-0.893919464600475780, -0.893941874863592110, -0.893964282891853370, -0.893986688685203920, -0.894009092243588040, -0.894031493566949220, -0.894053892655231500, -0.894076289508379140, +-0.894098684126336090, -0.894121076509046260, -0.894143466656453720, -0.894165854568502620, -0.894188240245136770, -0.894210623686300440, -0.894233004891937470, -0.894255383861991990, +-0.894277760596408400, -0.894300135095130070, -0.894322507358101480, -0.894344877385266470, -0.894367245176569740, -0.894389610731954550, -0.894411974051365300, -0.894434335134746130, +-0.894456693982041080, -0.894479050593194210, -0.894501404968149890, -0.894523757106851950, -0.894546107009244640, -0.894568454675272130, -0.894590800104878350, -0.894613143298008120, +-0.894635484254604480, -0.894657822974612270, -0.894680159457975410, -0.894702493704638610, -0.894724825714545150, -0.894747155487639610, -0.894769483023866160, -0.894791808323169070, +-0.894814131385492370, -0.894836452210780450, -0.894858770798977350, -0.894881087150027340, -0.894903401263874580, -0.894925713140463320, -0.894948022779738170, -0.894970330181642630, +-0.894992635346121170, -0.895014938273118180, -0.895037238962578250, -0.895059537414444770, -0.895081833628662450, -0.895104127605175660, -0.895126419343928450, -0.895148708844865190, +-0.895170996107930160, -0.895193281133067730, -0.895215563920222060, -0.895237844469337410, -0.895260122780358160, -0.895282398853228690, -0.895304672687893490, -0.895326944284296270, +-0.895349213642381740, -0.895371480762094610, -0.895393745643378260, -0.895416008286177620, -0.895438268690436970, -0.895460526856100560, -0.895482782783112890, -0.895505036471418210, +-0.895527287920961030, -0.895549537131685610, -0.895571784103536330, -0.895594028836457560, -0.895616271330393790, -0.895638511585289730, -0.895660749601088880, -0.895682985377736270, +-0.895705218915176180, -0.895727450213353430, -0.895749679272211610, -0.895771906091695660, -0.895794130671749960, -0.895816353012318880, -0.895838573113346910, -0.895860790974778550, +-0.895883006596558170, -0.895905219978630370, -0.895927431120939420, -0.895949640023429920, -0.895971846686046680, -0.895994051108733540, -0.896016253291435190, -0.896038453234096140, +-0.896060650936661430, -0.896082846399074760, -0.896105039621280850, -0.896127230603224410, -0.896149419344849930, -0.896171605846101890, -0.896193790106924790, -0.896215972127263230, +-0.896238151907061690, -0.896260329446264880, -0.896282504744817190, -0.896304677802663540, -0.896326848619747980, -0.896349017196015230, -0.896371183531409880, -0.896393347625876970, +-0.896415509479360330, -0.896437669091804890, -0.896459826463155360, -0.896481981593356240, -0.896504134482352110, -0.896526285130087700, -0.896548433536507480, -0.896570579701556290, +-0.896592723625178610, -0.896614865307319150, -0.896637004747922410, -0.896659141946933640, -0.896681276904296660, -0.896703409619956430, -0.896725540093858080, -0.896747668325945550, +-0.896769794316163770, -0.896791918064457460, -0.896814039570771440, -0.896836158835050300, -0.896858275857238760, -0.896880390637281640, -0.896902503175123430, -0.896924613470708950, +-0.896946721523982910, -0.896968827334890140, -0.896990930903375670, -0.897013032229383560, -0.897035131312858720, -0.897057228153746110, -0.897079322751990870, -0.897101415107536940, +-0.897123505220329460, -0.897145593090313160, -0.897167678717432860, -0.897189762101633480, -0.897211843242859630, -0.897233922141056130, -0.897255998796167910, -0.897278073208139570, +-0.897300145376916160, -0.897322215302442720, -0.897344282984663400, -0.897366348423523360, -0.897388411618967430, -0.897410472570940860, -0.897432531279387710, -0.897454587744253240, +-0.897476641965482380, -0.897498693943019840, -0.897520743676810560, -0.897542791166799470, -0.897564836412931280, -0.897586879415151140, -0.897608920173403770, -0.897630958687634100, +-0.897652994957787390, -0.897675028983807800, -0.897697060765640600, -0.897719090303230830, -0.897741117596523750, -0.897763142645463420, -0.897785165449995200, -0.897807186010064150, +-0.897829204325615080, -0.897851220396593040, -0.897873234222942850, -0.897895245804609670, -0.897917255141538420, -0.897939262233673930, -0.897961267080961360, -0.897983269683345520, +-0.898005270040772020, -0.898027268153184900, -0.898049264020529540, -0.898071257642751530, -0.898093249019794930, -0.898115238151605210, -0.898137225038127430, -0.898159209679306510, +-0.898181192075087620, -0.898203172225415790, -0.898225150130235960, -0.898247125789493280, -0.898269099203132800, -0.898291070371099560, -0.898313039293338610, -0.898335005969795540, +-0.898356970400414510, -0.898378932585141010, -0.898400892523920300, -0.898422850216697650, -0.898444805663417450, -0.898466758864025380, -0.898488709818466290, -0.898510658526685440, +-0.898532604988627970, -0.898554549204238940, -0.898576491173463610, -0.898598430896247020, -0.898620368372534340, -0.898642303602270820, -0.898664236585401840, -0.898686167321871900, +-0.898708095811626580, -0.898730022054610940, -0.898751946050770690, -0.898773867800050200, -0.898795787302395070, -0.898817704557750450, -0.898839619566061510, -0.898861532327273500, +-0.898883442841331810, -0.898905351108181370, -0.898927257127767660, -0.898949160900035740, -0.898971062424930860, -0.898992961702398840, -0.899014858732383960, -0.899036753514831920, +-0.899058646049687990, -0.899080536336897880, -0.899102424376406080, -0.899124310168158080, -0.899146193712099470, -0.899168075008175300, -0.899189954056330840, -0.899211830856511680, +-0.899233705408662880, -0.899255577712729790, -0.899277447768657700, -0.899299315576392090, -0.899321181135878560, -0.899343044447061590, -0.899364905509887120, -0.899386764324300310, +-0.899408620890247090, -0.899430475207671830, -0.899452327276520470, -0.899474177096738160, -0.899496024668270500, -0.899517869991062760, -0.899539713065060420, -0.899561553890208640, +-0.899583392466453140, -0.899605228793739050, -0.899627062872012000, -0.899648894701217120, -0.899670724281300570, -0.899692551612206740, -0.899714376693881430, -0.899736199526270370, +-0.899758020109319050, -0.899779838442972380, -0.899801654527176090, -0.899823468361875660, -0.899845279947016570, -0.899867089282544220, -0.899888896368404190, -0.899910701204541970, +-0.899932503790902950, -0.899954304127432710, -0.899976102214076650, -0.899997898050780790, -0.900019691637489740, -0.900041482974149430, -0.900063272060705470, -0.900085058897103660, +-0.900106843483288950, -0.900128625819207050, -0.900150405904803550, -0.900172183740024060, -0.900193959324814160, -0.900215732659119250, -0.900237503742885140, -0.900259272576057200, +-0.900281039158581040, -0.900302803490402370, -0.900324565571467010, -0.900346325401719880, -0.900368082981106930, -0.900389838309573750, -0.900411591387066500, -0.900433342213529660, +-0.900455090788909620, -0.900476837113151850, -0.900498581186201960, -0.900520323008005550, -0.900542062578508440, -0.900563799897656110, -0.900585534965394290, -0.900607267781668660, +-0.900628998346424850, -0.900650726659608880, -0.900672452721165810, -0.900694176531041560, -0.900715898089181840, -0.900737617395532820, -0.900759334450039310, -0.900781049252647460, +-0.900802761803302990, -0.900824472101951600, -0.900846180148539120, -0.900867885943011150, -0.900889589485313500, -0.900911290775391780, -0.900932989813191920, -0.900954686598659520, +-0.900976381131740390, -0.900998073412380810, -0.901019763440525590, -0.901041451216120890, -0.901063136739112650, -0.901084820009446900, -0.901106501027068800, -0.901128179791924390, +-0.901149856303959500, -0.901171530563120050, -0.901193202569351760, -0.901214872322600450, -0.901236539822811930, -0.901258205069932040, -0.901279868063906700, -0.901301528804681730, +-0.901323187292203180, -0.901344843526416420, -0.901366497507267490, -0.901388149234702340, -0.901409798708667110, -0.901431445929107070, -0.901453090895968480, -0.901474733609197050, +-0.901496374068738840, -0.901518012274539650, -0.901539648226545530, -0.901561281924702200, -0.901582913368955690, -0.901604542559251930, -0.901626169495536760, -0.901647794177756530, +-0.901669416605856530, -0.901691036779782910, -0.901712654699481810, -0.901734270364899280, -0.901755883775980820, -0.901777494932672560, -0.901799103834920680, -0.901820710482670980, +-0.901842314875869520, -0.901863917014462220, -0.901885516898395130, -0.901907114527614300, -0.901928709902065640, -0.901950303021695320, -0.901971893886449490, -0.901993482496273650, +-0.902015068851113930, -0.902036652950916730, -0.902058234795628190, -0.902079814385193690, -0.902101391719559610, -0.902122966798672100, -0.902144539622477200, -0.902166110190920970, +-0.902187678503949430, -0.902209244561508640, -0.902230808363544750, -0.902252369910003900, -0.902273929200832160, -0.902295486235975440, -0.902317041015380570, -0.902338593538992590, +-0.902360143806758220, -0.902381691818623820, -0.902403237574534780, -0.902424781074437690, -0.902446322318278590, -0.902467861306003760, -0.902489398037559230, -0.902510932512891160, +-0.902532464731945820, -0.902553994694669350, -0.902575522401007910, -0.902597047850907550, -0.902618571044314640, -0.902640091981175670, -0.902661610661436130, -0.902683127085042500, +-0.902704641251941160, -0.902726153162078490, -0.902747662815400090, -0.902769170211852550, -0.902790675351382020, -0.902812178233934890, -0.902833678859457310, -0.902855177227895430, +-0.902876673339195630, -0.902898167193304290, -0.902919658790167450, -0.902941148129731360, -0.902962635211942870, -0.902984120036747440, -0.903005602604091680, -0.903027082913921970, +-0.903048560966184800, -0.903070036760825980, -0.903091510297792000, -0.903112981577029240, -0.903134450598484070, -0.903155917362102770, -0.903177381867831700, -0.903198844115617130, +-0.903220304105405440, -0.903241761837143000, -0.903263217310776190, -0.903284670526251610, -0.903306121483515080, -0.903327570182513200, -0.903349016623192450, -0.903370460805499540, +-0.903391902729379970, -0.903413342394780770, -0.903434779801648210, -0.903456214949928670, -0.903477647839568520, -0.903499078470514360, -0.903520506842712460, -0.903541932956109290, +-0.903563356810651360, -0.903584778406284930, -0.903606197742956590, -0.903627614820613160, -0.903649029639200350, -0.903670442198664880, -0.903691852498953780, -0.903713260540012550, +-0.903734666321788230, -0.903756069844227290, -0.903777471107276130, -0.903798870110881340, -0.903820266854989280, -0.903841661339546580, -0.903863053564499810, -0.903884443529795360, +-0.903905831235379710, -0.903927216681199570, -0.903948599867201770, -0.903969980793332130, -0.903991359459537460, -0.904012735865764470, -0.904034110011959880, -0.904055481898069720, +-0.904076851524040940, -0.904098218889819890, -0.904119583995353420, -0.904140946840587880, -0.904162307425470100, -0.904183665749946460, -0.904205021813963670, -0.904226375617468330, +-0.904247727160407020, -0.904269076442726800, -0.904290423464373490, -0.904311768225294130, -0.904333110725435430, -0.904354450964744210, -0.904375788943166500, -0.904397124660649370, +-0.904418458117139500, -0.904439789312583400, -0.904461118246927760, -0.904482444920119420, -0.904503769332104970, -0.904525091482831000, -0.904546411372244450, -0.904567729000291700, +-0.904589044366920110, -0.904610357472075520, -0.904631668315705070, -0.904652976897755370, -0.904674283218173670, -0.904695587276905910, -0.904716889073899130, -0.904738188609100160, +-0.904759485882455690, -0.904780780893912450, -0.904802073643417360, -0.904823364130917020, -0.904844652356358360, -0.904865938319687980, -0.904887222020852810, -0.904908503459799560, +-0.904929782636475390, -0.904951059550826440, -0.904972334202799770, -0.904993606592342740, -0.905014876719401280, -0.905036144583922560, -0.905057410185853620, -0.905078673525141040, +-0.905099934601731770, -0.905121193415572730, -0.905142449966610640, -0.905163704254792530, -0.905184956280065120, -0.905206206042375230, -0.905227453541669890, -0.905248698777896380, +-0.905269941751000620, -0.905291182460929990, -0.905312420907631530, -0.905333657091052290, -0.905354891011138640, -0.905376122667837620, -0.905397352061096390, -0.905418579190861770, +-0.905439804057080690, -0.905461026659700070, -0.905482246998666970, -0.905503465073928200, -0.905524680885430700, -0.905545894433121610, -0.905567105716948100, -0.905588314736856410, +-0.905609521492794060, -0.905630725984707840, -0.905651928212545140, -0.905673128176252230, -0.905694325875776580, -0.905715521311065140, -0.905736714482064830, -0.905757905388722690, +-0.905779094030985890, -0.905800280408801230, -0.905821464522115980, -0.905842646370877080, -0.905863825955031450, -0.905885003274526810, -0.905906178329309090, -0.905927351119326100, +-0.905948521644524550, -0.905969689904852160, -0.905990855900255190, -0.906012019630681120, -0.906033181096076890, -0.906054340296389870, -0.906075497231566880, -0.906096651901555190, +-0.906117804306301840, -0.906138954445753990, -0.906160102319858660, -0.906181247928563250, -0.906202391271814570, -0.906223532349560320, -0.906244671161746900, -0.906265807708321880, +-0.906286941989232650, -0.906308074004425590, -0.906329203753848510, -0.906350331237448350, -0.906371456455172360, -0.906392579406967710, -0.906413700092781550, -0.906434818512561250, +-0.906455934666253850, -0.906477048553806620, -0.906498160175166820, -0.906519269530281610, -0.906540376619098590, -0.906561481441564230, -0.906582583997626150, -0.906603684287231700, +-0.906624782310328280, -0.906645878066862590, -0.906666971556782220, -0.906688062780034440, -0.906709151736566520, -0.906730238426325720, -0.906751322849259190, -0.906772405005314530, +-0.906793484894438780, -0.906814562516579330, -0.906835637871683420, -0.906856710959698780, -0.906877781780572100, -0.906898850334250880, -0.906919916620682610, -0.906940980639814880, +-0.906962042391594280, -0.906983101875968640, -0.907004159092885230, -0.907025214042291420, -0.907046266724134460, -0.907067317138361970, -0.907088365284921210, -0.907109411163759430, +-0.907130454774824240, -0.907151496118062780, -0.907172535193423110, -0.907193572000851600, -0.907214606540296180, -0.907235638811704330, -0.907256668815023650, -0.907277696550200960, +-0.907298722017184090, -0.907319745215920290, -0.907340766146357280, -0.907361784808442320, -0.907382801202122780, -0.907403815327346370, -0.907424827184060370, -0.907445836772212240, +-0.907466844091749600, -0.907487849142619820, -0.907508851924770820, -0.907529852438149320, -0.907550850682703140, -0.907571846658380200, -0.907592840365127330, -0.907613831802892350, +-0.907634820971622740, -0.907655807871266100, -0.907676792501770020, -0.907697774863081900, -0.907718754955149310, -0.907739732777919860, -0.907760708331341040, -0.907781681615360550, +-0.907802652629925770, -0.907823621374984730, -0.907844587850484270, -0.907865552056372320, -0.907886513992596570, -0.907907473659104850, -0.907928431055844090, -0.907949386182762330, +-0.907970339039806950, -0.907991289626925880, -0.908012237944066490, -0.908033183991176500, -0.908054127768203600, -0.908075069275095290, -0.908096008511799390, -0.908116945478263490, +-0.908137880174435530, -0.908158812600262540, -0.908179742755692470, -0.908200670640673110, -0.908221596255152420, -0.908242519599077420, -0.908263440672396060, -0.908284359475056040, +-0.908305276007005170, -0.908326190268191170, -0.908347102258561630, -0.908368011978064380, -0.908388919426647120, -0.908409824604257450, -0.908430727510843310, -0.908451628146352720, +-0.908472526510732630, -0.908493422603931290, -0.908514316425896420, -0.908535207976576050, -0.908556097255917350, -0.908576984263868350, -0.908597869000376870, -0.908618751465390840, +-0.908639631658857860, -0.908660509580725750, -0.908681385230942440, -0.908702258609455640, -0.908723129716213160, -0.908743998551162950, -0.908764865114252700, -0.908785729405430560, +-0.908806591424643820, -0.908827451171840610, -0.908848308646969080, -0.908869163849976510, -0.908890016780810940, -0.908910867439420400, -0.908931715825752610, -0.908952561939755600, +-0.908973405781377200, -0.908994247350565220, -0.909015086647267600, -0.909035923671432380, -0.909056758423007260, -0.909077590901940290, -0.909098421108179620, -0.909119249041672630, +-0.909140074702367570, -0.909160898090212170, -0.909181719205155000, -0.909202538047143130, -0.909223354616124910, -0.909244168912048290, -0.909264980934861300, -0.909285790684511760, +-0.909306598160947830, -0.909327403364117440, -0.909348206293968400, -0.909369006950448980, -0.909389805333507330, -0.909410601443090830, -0.909431395279147850, -0.909452186841626430, +-0.909472976130474400, -0.909493763145640010, -0.909514547887071530, -0.909535330354716450, -0.909556110548522920, -0.909576888468439090, -0.909597664114413120, -0.909618437486393040, +-0.909639208584326790, -0.909659977408162510, -0.909680743957848260, -0.909701508233332510, -0.909722270234562760, -0.909743029961487260, -0.909763787414054060, -0.909784542592211530, +-0.909805295495907610, -0.909826046125090880, -0.909846794479708620, -0.909867540559709310, -0.909888284365041210, -0.909909025895652370, -0.909929765151491040, -0.909950502132505280, +-0.909971236838643230, -0.909991969269853040, -0.910012699426082980, -0.910033427307281540, -0.910054152913396200, -0.910074876244375440, -0.910095597300167420, -0.910116316080720520, +-0.910137032585983220, -0.910157746815902890, -0.910178458770428130, -0.910199168449507320, -0.910219875853088610, -0.910240580981120150, -0.910261283833550320, -0.910281984410327150, +-0.910302682711399140, -0.910323378736714320, -0.910344072486221510, -0.910364763959868100, -0.910385453157602890, -0.910406140079373930, -0.910426824725129590, -0.910447507094818250, +-0.910468187188388510, -0.910488865005787960, -0.910509540546965200, -0.910530213811868610, -0.910550884800446550, -0.910571553512647180, -0.910592219948418990, -0.910612884107710130, +-0.910633545990469200, -0.910654205596644670, -0.910674862926184380, -0.910695517979036810, -0.910716170755150540, -0.910736821254473750, -0.910757469476955020, -0.910778115422542940, +-0.910798759091185130, -0.910819400482830500, -0.910840039597427430, -0.910860676434924190, -0.910881310995269140, -0.910901943278411010, -0.910922573284297930, -0.910943201012878400, +-0.910963826464101230, -0.910984449637914250, -0.911005070534266050, -0.911025689153105110, -0.911046305494380040, -0.911066919558039200, -0.911087531344031420, -0.911108140852304400, +-0.911128748082807080, -0.911149353035487830, -0.911169955710295240, -0.911190556107177810, -0.911211154226084010, -0.911231750066962220, -0.911252343629761040, -0.911272934914429070, +-0.911293523920915120, -0.911314110649167010, -0.911334695099133670, -0.911355277270763490, -0.911375857164005150, -0.911396434778807500, -0.911417010115118440, -0.911437583172886920, +-0.911458153952061310, -0.911478722452590430, -0.911499288674422650, -0.911519852617506680, -0.911540414281791110, -0.911560973667224550, -0.911581530773755480, -0.911602085601332930, +-0.911622638149904850, -0.911643188419420160, -0.911663736409827450, -0.911684282121075440, -0.911704825553112720, -0.911725366705888330, -0.911745905579350200, -0.911766442173447270, +-0.911786976488128120, -0.911807508523341690, -0.911828038279036360, -0.911848565755161040, -0.911869090951664240, -0.911889613868494760, -0.911910134505601540, -0.911930652862932730, +-0.911951168940437150, -0.911971682738063730, -0.911992194255761170, -0.912012703493477960, -0.912033210451163480, -0.912053715128765650, -0.912074217526233410, -0.912094717643515680, +-0.912115215480561180, -0.912135711037318610, -0.912156204313736780, -0.912176695309764420, -0.912197184025350330, -0.912217670460443660, -0.912238154614992360, -0.912258636488945780, +-0.912279116082252540, -0.912299593394861550, -0.912320068426721640, -0.912340541177781850, -0.912361011647990330, -0.912381479837296340, -0.912401945745648590, -0.912422409372996010, +-0.912442870719287420, -0.912463329784471530, -0.912483786568497490, -0.912504241071313890, -0.912524693292869670, -0.912545143233114200, -0.912565590891995400, -0.912586036269462660, +-0.912606479365464800, -0.912626920179950730, -0.912647358712869840, -0.912667794964170050, -0.912688228933800860, -0.912708660621711080, -0.912729090027849630, -0.912749517152165460, +-0.912769941994607480, -0.912790364555124630, -0.912810784833665960, -0.912831202830180270, -0.912851618544616940, -0.912872031976924240, -0.912892443127051310, -0.912912851994947430, +-0.912933258580561400, -0.912953662883842500, -0.912974064904739200, -0.912994464643200660, -0.913014862099176040, -0.913035257272614140, -0.913055650163464130, -0.913076040771675030, +-0.913096429097195910, -0.913116815139975560, -0.913137198899963250, -0.913157580377108370, -0.913177959571359050, -0.913198336482664910, -0.913218711110974860, -0.913239083456238170, +-0.913259453518403650, -0.913279821297420910, -0.913300186793238210, -0.913320550005805030, -0.913340910935070530, -0.913361269580983740, -0.913381625943493810, -0.913401980022549800, +-0.913422331818100840, -0.913442681330095980, -0.913463028558484820, -0.913483373503215730, -0.913503716164238200, -0.913524056541501480, -0.913544394634954520, -0.913564730444546560, +-0.913585063970227210, -0.913605395211944730, -0.913625724169648820, -0.913646050843288650, -0.913666375232813240, -0.913686697338171980, -0.913707017159314020, -0.913727334696188390, +-0.913747649948744580, -0.913767962916931850, -0.913788273600698920, -0.913808581999995370, -0.913828888114770250, -0.913849191944972940, -0.913869493490552690, -0.913889792751459100, +-0.913910089727640540, -0.913930384419046840, -0.913950676825627250, -0.913970966947330820, -0.913991254784107030, -0.914011540335905150, -0.914031823602674430, -0.914052104584364030, +-0.914072383280923550, -0.914092659692302360, -0.914112933818449160, -0.914133205659313660, -0.914153475214845020, -0.914173742484992840, -0.914194007469706580, -0.914214270168935080, +-0.914234530582627710, -0.914254788710734180, -0.914275044553203630, -0.914295298109985440, -0.914315549381028990, -0.914335798366283650, -0.914356045065698900, -0.914376289479224000, +-0.914396531606808670, -0.914416771448401720, -0.914437009003952860, -0.914457244273411460, -0.914477477256727010, -0.914497707953848770, -0.914517936364726670, -0.914538162489309300, +-0.914558386327546600, -0.914578607879387940, -0.914598827144782690, -0.914619044123680450, -0.914639258816030480, -0.914659471221782480, -0.914679681340885730, -0.914699889173290260, +-0.914720094718944550, -0.914740297977798660, -0.914760498949802050, -0.914780697634904220, -0.914800894033054650, -0.914821088144203150, -0.914841279968298560, -0.914861469505290790, +-0.914881656755129340, -0.914901841717763790, -0.914922024393143630, -0.914942204781218350, -0.914962382881937650, -0.914982558695250910, -0.915002732221108170, -0.915022903459458250, +-0.915043072410251070, -0.915063239073436120, -0.915083403448963220, -0.915103565536781740, -0.915123725336841720, -0.915143882849091980, -0.915164038073482570, -0.915184191009963070, +-0.915204341658483080, -0.915224490018992200, -0.915244636091440130, -0.915264779875776480, -0.915284921371950940, -0.915305060579913010, -0.915325197499612830, -0.915345332130999220, +-0.915365464474022340, -0.915385594528631770, -0.915405722294777350, -0.915425847772408870, -0.915445970961475400, -0.915466091861926960, -0.915486210473713370, -0.915506326796784230, +-0.915526440831089360, -0.915546552576578240, -0.915566662033200810, -0.915586769200906760, -0.915606874079645690, -0.915626976669367880, -0.915647076970022230, -0.915667174981558920, +-0.915687270703927750, -0.915707364137078210, -0.915727455280960450, -0.915747544135524280, -0.915767630700718980, -0.915787714976494470, -0.915807796962800790, -0.915827876659587650, +-0.915847954066804750, -0.915868029184401910, -0.915888102012329060, -0.915908172550535920, -0.915928240798972840, -0.915948306757588650, -0.915968370426333720, -0.915988431805157880, +-0.916008490894011040, -0.916028547692842920, -0.916048602201603780, -0.916068654420242770, -0.916088704348710040, -0.916108751986955740, -0.916128797334929360, -0.916148840392581150, +-0.916168881159860730, -0.916188919636718110, -0.916208955823103240, -0.916228989718966380, -0.916249021324256670, -0.916269050638924390, -0.916289077662919450, -0.916309102396191790, +-0.916329124838691440, -0.916349144990368570, -0.916369162851172540, -0.916389178421053610, -0.916409191699961710, -0.916429202687846890, -0.916449211384658960, -0.916469217790348070, +-0.916489221904864150, -0.916509223728157130, -0.916529223260177050, -0.916549220500874280, -0.916569215450198090, -0.916589208108098850, -0.916609198474526710, -0.916629186549431480, +-0.916649172332763660, -0.916669155824472500, -0.916689137024508490, -0.916709115932821560, -0.916729092549361970, -0.916749066874079640, -0.916769038906924520, -0.916789008647846960, +-0.916808976096796790, -0.916828941253724160, -0.916848904118579560, -0.916868864691312350, -0.916888822971873020, -0.916908778960211500, -0.916928732656278170, -0.916948684060022940, +-0.916968633171396430, -0.916988579990347890, -0.917008524516827910, -0.917028466750786640, -0.917048406692174240, -0.917068344340940870, -0.917088279697036550, -0.917108212760411550, +-0.917128143531016020, -0.917148072008800440, -0.917167998193714420, -0.917187922085708320, -0.917207843684732400, -0.917227762990736940, -0.917247680003672070, -0.917267594723488290, +-0.917287507150135300, -0.917307417283563460, -0.917327325123723060, -0.917347230670564340, -0.917367133924037570, -0.917387034884093010, -0.917406933550680810, -0.917426829923751240, +-0.917446724003255000, -0.917466615789141570, -0.917486505281361660, -0.917506392479865430, -0.917526277384603240, -0.917546159995525360, -0.917566040312582490, -0.917585918335724000, +-0.917605794064900840, -0.917625667500063250, -0.917645538641161380, -0.917665407488145730, -0.917685274040966450, -0.917705138299574120, -0.917725000263918900, -0.917744859933951160, +-0.917764717309621610, -0.917784572390879960, -0.917804425177676910, -0.917824275669962720, -0.917844123867687880, -0.917863969770803090, -0.917883813379257950, -0.917903654693003390, +-0.917923493711989560, -0.917943330436167160, -0.917963164865486240, -0.917982996999897600, -0.918002826839351300, -0.918022654383798040, -0.918042479633188190, -0.918062302587472350, +-0.918082123246600550, -0.918101941610523280, -0.918121757679191350, -0.918141571452554820, -0.918161382930564480, -0.918181192113171060, -0.918200999000324260, -0.918220803591975000, +-0.918240605888073660, -0.918260405888570830, -0.918280203593417000, -0.918299999002562650, -0.918319792115958380, -0.918339582933554550, -0.918359371455302110, -0.918379157681150970, +-0.918398941611051840, -0.918418723244955440, -0.918438502582812120, -0.918458279624572600, -0.918478054370187810, -0.918497826819607450, -0.918517596972782570, -0.918537364829663640, +-0.918557130390201370, -0.918576893654346140, -0.918596654622048760, -0.918616413293259830, -0.918636169667929710, -0.918655923746009680, -0.918675675527449330, -0.918695425012199920, +-0.918715172200211930, -0.918734917091435950, -0.918754659685822710, -0.918774399983323110, -0.918794137983887320, -0.918813873687466030, -0.918833607094010070, -0.918853338203470150, +-0.918873067015796850, -0.918892793530940890, -0.918912517748852960, -0.918932239669483790, -0.918951959292783950, -0.918971676618704600, -0.918991391647195680, -0.919011104378208210, +-0.919030814811693130, -0.919050522947600920, -0.919070228785882740, -0.919089932326488720, -0.919109633569369810, -0.919129332514476820, -0.919149029161760440, -0.919168723511171630, +-0.919188415562660950, -0.919208105316179140, -0.919227792771677210, -0.919247477929105660, -0.919267160788415860, -0.919286841349557850, -0.919306519612482660, -0.919326195577141130, +-0.919345869243484160, -0.919365540611462580, -0.919385209681027440, -0.919404876452128870, -0.919424540924718260, -0.919444203098746190, -0.919463862974163600, -0.919483520550921420, +-0.919503175828970340, -0.919522828808261420, -0.919542479488745350, -0.919562127870373500, -0.919581773953095930, -0.919601417736863990, -0.919621059221628400, -0.919640698407340310, +-0.919660335293950300, -0.919679969881409990, -0.919699602169669280, -0.919719232158679570, -0.919738859848391770, -0.919758485238756920, -0.919778108329725730, -0.919797729121249350, +-0.919817347613278710, -0.919836963805764520, -0.919856577698658470, -0.919876189291910510, -0.919895798585472100, -0.919915405579294190, -0.919935010273327690, -0.919954612667523760, +-0.919974212761833670, -0.919993810556207660, -0.920013406050597120, -0.920032999244953080, -0.920052590139226470, -0.920072178733368440, -0.920091765027330030, -0.920111349021062170, +-0.920130930714515900, -0.920150510107642260, -0.920170087200392840, -0.920189661992717680, -0.920209234484568480, -0.920228804675896180, -0.920248372566651820, -0.920267938156786980, +-0.920287501446251820, -0.920307062434998050, -0.920326621122976470, -0.920346177510138470, -0.920365731596434870, -0.920385283381817130, -0.920404832866236090, -0.920424380049642890, +-0.920443924931988900, -0.920463467513225280, -0.920483007793302720, -0.920502545772172720, -0.920522081449786310, -0.920541614826094650, -0.920561145901048980, -0.920580674674600810, +-0.920600201146700490, -0.920619725317299850, -0.920639247186349710, -0.920658766753801650, -0.920678284019606500, -0.920697798983715730, -0.920717311646080510, -0.920736822006651860, +-0.920756330065381600, -0.920775835822220220, -0.920795339277119210, -0.920814840430029810, -0.920834339280903300, -0.920853835829691050, -0.920873330076344420, -0.920892822020814240, +-0.920912311663051870, -0.920931799003008810, -0.920951284040636310, -0.920970766775885520, -0.920990247208707810, -0.921009725339054450, -0.921029201166876810, -0.921048674692126590, +-0.921068145914754280, -0.921087614834711580, -0.921107081451949860, -0.921126545766420500, -0.921146007778074650, -0.921165467486864230, -0.921184924892739730, -0.921204379995652970, +-0.921223832795555200, -0.921243283292397910, -0.921262731486132360, -0.921282177376710030, -0.921301620964082300, -0.921321062248200430, -0.921340501229015900, -0.921359937906480520, +-0.921379372280544890, -0.921398804351160950, -0.921418234118279940, -0.921437661581853250, -0.921457086741832800, -0.921476509598169400, -0.921495930150814550, -0.921515348399720050, +-0.921534764344837050, -0.921554177986117160, -0.921573589323511850, -0.921592998356972610, -0.921612405086450810, -0.921631809511898050, -0.921651211633266020, -0.921670611450505660, +-0.921690008963568790, -0.921709404172406880, -0.921728797076971530, -0.921748187677214110, -0.921767575973086560, -0.921786961964539800, -0.921806345651525530, -0.921825727033995460, +-0.921845106111901070, -0.921864482885193960, -0.921883857353825610, -0.921903229517747610, -0.921922599376911460, -0.921941966931269290, -0.921961332180771810, -0.921980695125370950, +-0.922000055765018420, -0.922019414099665700, -0.922038770129264500, -0.922058123853766620, -0.922077475273123230, -0.922096824387286020, -0.922116171196206810, -0.922135515699837200, +-0.922154857898128680, -0.922174197791033160, -0.922193535378502130, -0.922212870660487180, -0.922232203636940470, -0.922251534307812810, -0.922270862673056360, -0.922290188732622810, +-0.922309512486463760, -0.922328833934530910, -0.922348153076776310, -0.922367469913150990, -0.922386784443607110, -0.922406096668096140, -0.922425406586569910, -0.922444714198980220, +-0.922464019505278790, -0.922483322505417200, -0.922502623199347390, -0.922521921587021070, -0.922541217668390150, -0.922560511443405900, -0.922579802912020460, -0.922599092074185330, +-0.922618378929852660, -0.922637663478974250, -0.922656945721501360, -0.922676225657386160, -0.922695503286580450, -0.922714778609035840, -0.922734051624704340, -0.922753322333537800, +-0.922772590735487790, -0.922791856830506460, -0.922811120618545420, -0.922830382099556920, -0.922849641273492120, -0.922868898140303150, -0.922888152699942070, -0.922907404952360570, +-0.922926654897510470, -0.922945902535344140, -0.922965147865812740, -0.922984390888868410, -0.923003631604463080, -0.923022870012548790, -0.923042106113077240, -0.923061339906000480, +-0.923080571391270310, -0.923099800568838780, -0.923119027438658040, -0.923138252000679340, -0.923157474254855060, -0.923176694201137130, -0.923195911839477470, -0.923215127169828010, +-0.923234340192141010, -0.923253550906367850, -0.923272759312460890, -0.923291965410371950, -0.923311169200053180, -0.923330370681456400, -0.923349569854533760, -0.923368766719237070, +-0.923387961275518590, -0.923407153523330470, -0.923426343462624200, -0.923445531093352030, -0.923464716415466010, -0.923483899428918290, -0.923503080133660780, -0.923522258529645870, +-0.923541434616825030, -0.923560608395150530, -0.923579779864574620, -0.923598949025049130, -0.923618115876526310, -0.923637280418958320, -0.923656442652296960, -0.923675602576494610, +-0.923694760191503210, -0.923713915497275220, -0.923733068493762130, -0.923752219180916430, -0.923771367558690050, -0.923790513627035350, -0.923809657385904700, -0.923828798835249490, +-0.923847937975022400, -0.923867074805175380, -0.923886209325660680, -0.923905341536430560, -0.923924471437436940, -0.923943599028632210, -0.923962724309968510, -0.923981847281397980, +-0.924000967942873120, -0.924020086294345510, -0.924039202335767750, -0.924058316067091990, -0.924077427488270380, -0.924096536599255500, -0.924115643399999080, -0.924134747890453470, +-0.924153850070570940, -0.924172949940303860, -0.924192047499604370, -0.924211142748424860, -0.924230235686717360, -0.924249326314434350, -0.924268414631527980, -0.924287500637950950, +-0.924306584333654760, -0.924325665718592200, -0.924344744792715440, -0.924363821555976850, -0.924382896008328570, -0.924401968149723530, -0.924421037980113210, -0.924440105499450330, +-0.924459170707687020, -0.924478233604775990, -0.924497294190669280, -0.924516352465319270, -0.924535408428678540, -0.924554462080699140, -0.924573513421333980, -0.924592562450534670, +-0.924611609168254020, -0.924630653574444290, -0.924649695669057970, -0.924668735452047420, -0.924687772923365350, -0.924706808082963460, -0.924725840930794570, -0.924744871466811170, +-0.924763899690965510, -0.924782925603210070, -0.924801949203497340, -0.924820970491779800, -0.924839989468009720, -0.924859006132139780, -0.924878020484122600, -0.924897032523910090, +-0.924916042251454960, -0.924935049666709700, -0.924954054769626890, -0.924973057560159240, -0.924992058038258570, -0.925011056203877800, -0.925030052056969310, -0.925049045597485800, +-0.925068036825379640, -0.925087025740603420, -0.925106012343109520, -0.925124996632850750, -0.925143978609779370, -0.925162958273848420, -0.925181935625009720, -0.925200910663216190, +-0.925219883388420430, -0.925238853800574910, -0.925257821899632570, -0.925276787685545440, -0.925295751158266230, -0.925314712317747650, -0.925333671163942380, -0.925352627696802930, +-0.925371581916281770, -0.925390533822331830, -0.925409483414905480, -0.925428430693955310, -0.925447375659434580, -0.925466318311295000, -0.925485258649489610, -0.925504196673971100, +-0.925523132384692080, -0.925542065781605250, -0.925560996864663530, -0.925579925633819080, -0.925598852089024700, -0.925617776230233340, -0.925636698057397460, -0.925655617570469770, +-0.925674534769403090, -0.925693449654150120, -0.925712362224663470, -0.925731272480896260, -0.925750180422800550, -0.925769086050329370, -0.925787989363435540, -0.925806890362071640, +-0.925825789046190620, -0.925844685415745380, -0.925863579470688090, -0.925882471210971890, -0.925901360636549490, -0.925920247747373690, -0.925939132543397330, -0.925958015024573090, +-0.925976895190853800, -0.925995773042192270, -0.926014648578541650, -0.926033521799854100, -0.926052392706082750, -0.926071261297180430, -0.926090127573099830, -0.926108991533794110, +-0.926127853179216090, -0.926146712509318130, -0.926165569524053380, -0.926184424223374770, -0.926203276607235120, -0.926222126675587230, -0.926240974428383930, -0.926259819865578370, +-0.926278662987123140, -0.926297503792971270, -0.926316342283076020, -0.926335178457389550, -0.926354012315865120, -0.926372843858455750, -0.926391673085114160, -0.926410499995793830, +-0.926429324590446800, -0.926448146869026550, -0.926466966831485880, -0.926485784477777740, -0.926504599807855270, -0.926523412821671170, -0.926542223519178700, -0.926561031900330570, +-0.926579837965079810, -0.926598641713379800, -0.926617443145182910, -0.926636242260442500, -0.926655039059111290, -0.926673833541142630, -0.926692625706489360, -0.926711415555104830, +-0.926730203086941430, -0.926748988301952510, -0.926767771200091130, -0.926786551781310310, -0.926805330045563200, -0.926824105992802630, -0.926842879622981840, -0.926861650936053880, +-0.926880419931972120, -0.926899186610689040, -0.926917950972157900, -0.926936713016331960, -0.926955472743164140, -0.926974230152607710, -0.926992985244616040, -0.927011738019141500, +-0.927030488476137670, -0.927049236615557600, -0.927067982437354440, -0.927086725941481340, -0.927105467127891440, -0.927124205996537890, -0.927142942547373840, -0.927161676780352660, +-0.927180408695427060, -0.927199138292550410, -0.927217865571675850, -0.927236590532756640, -0.927255313175746050, -0.927274033500597450, -0.927292751507263420, -0.927311467195697570, +-0.927330180565852920, -0.927348891617682970, -0.927367600351140740, -0.927386306766179500, -0.927405010862752510, -0.927423712640812910, -0.927442412100314080, -0.927461109241209610, +-0.927479804063451980, -0.927498496566994790, -0.927517186751791510, -0.927535874617795190, -0.927554560164959520, -0.927573243393236990, -0.927591924302581530, -0.927610602892946170, +-0.927629279164284280, -0.927647953116549240, -0.927666624749694300, -0.927685294063672840, -0.927703961058438110, -0.927722625733943480, -0.927741288090142670, -0.927759948126988250, +-0.927778605844433950, -0.927797261242433220, -0.927815914320939240, -0.927834565079905470, -0.927853213519285740, -0.927871859639032510, -0.927890503439099730, -0.927909144919440650, +-0.927927784080008640, -0.927946420920757300, -0.927965055441639870, -0.927983687642609740, -0.928002317523620390, -0.928020945084625630, -0.928039570325578160, -0.928058193246431800, +-0.928076813847139910, -0.928095432127655990, -0.928114048087933520, -0.928132661727926300, -0.928151273047587040, -0.928169882046869570, -0.928188488725727460, -0.928207093084113980, +-0.928225695121982940, -0.928244294839287610, -0.928262892235981460, -0.928281487312018210, -0.928300080067351540, -0.928318670501934280, -0.928337258615720360, -0.928355844408663370, +-0.928374427880716670, -0.928393009031833970, -0.928411587861969090, -0.928430164371074840, -0.928448738559105150, -0.928467310426013710, -0.928485879971754020, -0.928504447196279560, +-0.928523012099544020, -0.928541574681500890, -0.928560134942103880, -0.928578692881306460, -0.928597248499062670, -0.928615801795325440, -0.928634352770048800, -0.928652901423186130, +-0.928671447754691240, -0.928689991764518160, -0.928708533452619720, -0.928727072818949950, -0.928745609863462440, -0.928764144586110900, -0.928782676986849020, -0.928801207065630520, +-0.928819734822408980, -0.928838260257138000, -0.928856783369771510, -0.928875304160263320, -0.928893822628566570, -0.928912338774635190, -0.928930852598423010, -0.928949364099883710, +-0.928967873278971010, -0.928986380135638940, -0.929004884669840660, -0.929023386881530080, -0.929041886770661020, -0.929060384337187290, -0.929078879581062610, -0.929097372502240670, +-0.929115863100675400, -0.929134351376320390, -0.929152837329129790, -0.929171320959056860, -0.929189802266055630, -0.929208281250079820, -0.929226757911083330, -0.929245232249020000, +-0.929263704263843860, -0.929282173955508160, -0.929300641323967060, -0.929319106369174360, -0.929337569091083780, -0.929356029489649350, -0.929374487564824880, -0.929392943316564190, +-0.929411396744821090, -0.929429847849549850, -0.929448296630703720, -0.929466743088236740, -0.929485187222102940, -0.929503629032256140, -0.929522068518650380, -0.929540505681239690, +-0.929558940519977450, -0.929577373034817800, -0.929595803225714780, -0.929614231092622200, -0.929632656635494100, -0.929651079854284300, -0.929669500748946830, -0.929687919319435620, +-0.929706335565704590, -0.929724749487708110, -0.929743161085399340, -0.929761570358732750, -0.929779977307662150, -0.929798381932141700, -0.929816784232125550, -0.929835184207567170, +-0.929853581858420820, -0.929871977184640430, -0.929890370186180150, -0.929908760862994010, -0.929927149215035830, -0.929945535242259870, -0.929963918944620050, -0.929982300322070520, +-0.930000679374565430, -0.930019056102058370, -0.930037430504503710, -0.930055802581855500, -0.930074172334067640, -0.930092539761094520, -0.930110904862890280, -0.930129267639408400, +-0.930147628090603470, -0.930165986216429430, -0.930184342016840420, -0.930202695491790470, -0.930221046641233950, -0.930239395465124690, -0.930257741963416930, -0.930276086136065160, +-0.930294427983022980, -0.930312767504244520, -0.930331104699684270, -0.930349439569296280, -0.930367772113034670, -0.930386102330853950, -0.930404430222707580, -0.930422755788550160, +-0.930441079028335950, -0.930459399942018980, -0.930477718529553410, -0.930496034790893710, -0.930514348725993810, -0.930532660334808080, -0.930550969617291000, -0.930569276573396280, +-0.930587581203078270, -0.930605883506291250, -0.930624183482989590, -0.930642481133127530, -0.930660776456659570, -0.930679069453539290, -0.930697360123721280, -0.930715648467160040, +-0.930733934483809590, -0.930752218173624300, -0.930770499536558440, -0.930788778572566370, -0.930807055281602350, -0.930825329663620640, -0.930843601718575940, -0.930861871446421960, +-0.930880138847113290, -0.930898403920604300, -0.930916666666849250, -0.930934927085802940, -0.930953185177418870, -0.930971440941651960, -0.930989694378456360, -0.931007945487786540, +-0.931026194269596870, -0.931044440723841740, -0.931062684850475500, -0.931080926649452520, -0.931099166120727180, -0.931117403264254300, -0.931135638079987670, -0.931153870567881790, +-0.931172100727891360, -0.931190328559970640, -0.931208554064074100, -0.931226777240156460, -0.931244998088171520, -0.931263216608074210, -0.931281432799818790, -0.931299646663359740, +-0.931317858198651650, -0.931336067405648890, -0.931354274284305950, -0.931372478834577410, -0.931390681056417870, -0.931408880949781360, -0.931427078514622700, -0.931445273750896250, +-0.931463466658556620, -0.931481657237558380, -0.931499845487856360, -0.931518031409404370, -0.931536215002157220, -0.931554396266069620, -0.931572575201095930, -0.931590751807190980, +-0.931608926084309010, -0.931627098032404730, -0.931645267651432740, -0.931663434941347960, -0.931681599902104200, -0.931699762533656380, -0.931717922835959220, -0.931736080808967300, +-0.931754236452635110, -0.931772389766917670, -0.931790540751768930, -0.931808689407143900, -0.931826835732997070, -0.931844979729283150, -0.931863121395956840, -0.931881260732972730, +-0.931899397740285410, -0.931917532417849580, -0.931935664765620060, -0.931953794783551560, -0.931971922471598320, -0.931990047829715170, -0.932008170857857030, -0.932026291555978380, +-0.932044409924034370, -0.932062525961979030, -0.932080639669767290, -0.932098751047354070, -0.932116860094693860, -0.932134966811741570, -0.932153071198451810, -0.932171173254779490, +-0.932189272980679110, -0.932207370376105570, -0.932225465441013920, -0.932243558175358310, -0.932261648579093880, -0.932279736652175230, -0.932297822394557270, -0.932315905806194720, +-0.932333986887042830, -0.932352065637055530, -0.932370142056188070, -0.932388216144395380, -0.932406287901632050, -0.932424357327853000, -0.932442424423013060, -0.932460489187067140, +-0.932478551619969950, -0.932496611721676640, -0.932514669492141570, -0.932532724931319780, -0.932550778039166190, -0.932568828815635630, -0.932586877260683010, -0.932604923374263480, +-0.932622967156331420, -0.932641008606841850, -0.932659047725749810, -0.932677084513010120, -0.932695118968577710, -0.932713151092407600, -0.932731180884454500, -0.932749208344673560, +-0.932767233473019820, -0.932785256269447640, -0.932803276733912390, -0.932821294866369000, -0.932839310666772280, -0.932857324135077380, -0.932875335271239450, -0.932893344075212850, +-0.932911350546952840, -0.932929354686414470, -0.932947356493552760, -0.932965355968322640, -0.932983353110679150, -0.933001347920577320, -0.933019340397972070, -0.933037330542818450, +-0.933055318355071830, -0.933073303834686560, -0.933091286981618140, -0.933109267795821370, -0.933127246277251520, -0.933145222425863840, -0.933163196241612810, -0.933181167724453810, +-0.933199136874341860, -0.933217103691232010, -0.933235068175079510, -0.933253030325839280, -0.933270990143466480, -0.933288947627916140, -0.933306902779143520, -0.933324855597103990, +-0.933342806081751910, -0.933360754233042880, -0.933378700050931930, -0.933396643535374220, -0.933414584686324990, -0.933432523503739510, -0.933450459987572480, -0.933468394137779270, +-0.933486325954315020, -0.933504255437135000, -0.933522182586194350, -0.933540107401448220, -0.933558029882851860, -0.933575950030360420, -0.933593867843929390, -0.933611783323513470, +-0.933629696469068020, -0.933647607280548300, -0.933665515757909570, -0.933683421901107090, -0.933701325710096340, -0.933719227184832020, -0.933737126325269510, -0.933755023131364270, +-0.933772917603071460, -0.933790809740346450, -0.933808699543144270, -0.933826587011420410, -0.933844472145130110, -0.933862354944228870, -0.933880235408671490, -0.933898113538413450, +-0.933915989333410130, -0.933933862793616900, -0.933951733918989000, -0.933969602709482150, -0.933987469165050820, -0.934005333285650940, -0.934023195071237660, -0.934041054521766450, +-0.934058911637192570, -0.934076766417471390, -0.934094618862558290, -0.934112468972408740, -0.934130316746977880, -0.934148162186221650, -0.934166005290094640, -0.934183846058552650, +-0.934201684491551050, -0.934219520589045230, -0.934237354350990980, -0.934255185777342900, -0.934273014868056920, -0.934290841623088510, -0.934308666042392820, -0.934326488125925560, +-0.934344307873642090, -0.934362125285497780, -0.934379940361448220, -0.934397753101448790, -0.934415563505455290, -0.934433371573422540, -0.934451177305306470, -0.934468980701062320, +-0.934486781760645810, -0.934504580484012300, -0.934522376871117610, -0.934540170921916770, -0.934557962636365480, -0.934575752014419230, -0.934593539056033600, -0.934611323761164180, +-0.934629106129766460, -0.934646886161795920, -0.934664663857208140, -0.934682439215959060, -0.934700212238003590, -0.934717982923297550, -0.934735751271796640, -0.934753517283456240, +-0.934771280958232030, -0.934789042296080060, -0.934806801296955040, -0.934824557960813100, -0.934842312287609720, -0.934860064277300620, -0.934877813929841370, -0.934895561245187470, +-0.934913306223294830, -0.934931048864118820, -0.934948789167615480, -0.934966527133739840, -0.934984262762447950, -0.935001996053695380, -0.935019727007437850, -0.935037455623630940, +-0.935055181902230800, -0.935072905843192360, -0.935090627446471530, -0.935108346712024250, -0.935126063639806100, -0.935143778229772790, -0.935161490481880020, -0.935179200396083490, +-0.935196907972339010, -0.935214613210602290, -0.935232316110829240, -0.935250016672975250, -0.935267714896996120, -0.935285410782847660, -0.935303104330485690, -0.935320795539866360, +-0.935338484410944690, -0.935356170943676730, -0.935373855138018410, -0.935391536993925520, -0.935409216511353670, -0.935426893690258780, -0.935444568530596770, -0.935462241032323230, +-0.935479911195394090, -0.935497579019765600, -0.935515244505392700, -0.935532907652231850, -0.935550568460238540, -0.935568226929368920, -0.935585883059579130, -0.935603536850824200, +-0.935621188303060400, -0.935638837416243760, -0.935656484190329870, -0.935674128625274880, -0.935691770721034600, -0.935709410477564840, -0.935727047894821530, -0.935744682972760590, +-0.935762315711338280, -0.935779946110509850, -0.935797574170231570, -0.935815199890459470, -0.935832823271149250, -0.935850444312256950, -0.935868063013738930, -0.935885679375550340, +-0.935903293397647660, -0.935920905079986710, -0.935938514422523400, -0.935956121425214000, -0.935973726088014100, -0.935991328410880060, -0.936008928393767590, -0.936026526036633170, +-0.936044121339432040, -0.936061714302120600, -0.936079304924654960, -0.936096893206991080, -0.936114479149084850, -0.936132062750892890, -0.936149644012370330, -0.936167222933473650, +-0.936184799514159010, -0.936202373754382310, -0.936219945654099720, -0.936237515213267260, -0.936255082431840970, -0.936272647309777000, -0.936290209847031710, -0.936307770043560580, +-0.936325327899320100, -0.936342883414266190, -0.936360436588355110, -0.936377987421542990, -0.936395535913786210, -0.936413082065040260, -0.936430625875261490, -0.936448167344406280, +-0.936465706472430660, -0.936483243259290780, -0.936500777704942670, -0.936518309809342700, -0.936535839572447020, -0.936553366994211660, -0.936570892074593210, -0.936588414813547270, +-0.936605935211030190, -0.936623453266998360, -0.936640968981407810, -0.936658482354215230, -0.936675993385376100, -0.936693502074847030, -0.936711008422584150, -0.936728512428543820, +-0.936746014092682100, -0.936763513414955450, -0.936781010395319910, -0.936798505033731970, -0.936815997330147640, -0.936833487284523760, -0.936850974896815790, -0.936868460166980330, +-0.936885943094973750, -0.936903423680752300, -0.936920901924272350, -0.936938377825490500, -0.936955851384362330, -0.936973322600844430, -0.936990791474893390, -0.937008258006465260, +-0.937025722195516500, -0.937043184042003490, -0.937060643545882480, -0.937078100707109840, -0.937095555525642390, -0.937113008001435600, -0.937130458134446290, -0.937147905924630930, +-0.937165351371945790, -0.937182794476347230, -0.937200235237791950, -0.937217673656235870, -0.937235109731635490, -0.937252543463947490, -0.937269974853128020, -0.937287403899133560, +-0.937304830601920710, -0.937322254961445720, -0.937339676977665180, -0.937357096650535680, -0.937374513980013150, -0.937391928966054390, -0.937409341608615660, -0.937426751907653680, +-0.937444159863124790, -0.937461565474985830, -0.937478968743192700, -0.937496369667702110, -0.937513768248470550, -0.937531164485454590, -0.937548558378610730, -0.937565949927895440, +-0.937583339133265300, -0.937600725994676810, -0.937618110512086540, -0.937635492685451320, -0.937652872514727060, -0.937670249999870480, -0.937687625140838370, -0.937704997937587210, +-0.937722368390073950, -0.937739736498254260, -0.937757102262085420, -0.937774465681523670, -0.937791826756525840, -0.937809185487048500, -0.937826541873048150, -0.937843895914481360, +-0.937861247611304850, -0.937878596963475310, -0.937895943970949550, -0.937913288633683620, -0.937930630951634430, -0.937947970924758680, -0.937965308553013080, -0.937982643836354100, +-0.937999976774738900, -0.938017307368123390, -0.938034635616464720, -0.938051961519719370, -0.938069285077844040, -0.938086606290795650, -0.938103925158530690, -0.938121241681005860, +-0.938138555858177960, -0.938155867690004030, -0.938173177176440110, -0.938190484317443230, -0.938207789112970090, -0.938225091562977510, -0.938242391667422290, -0.938259689426261260, +-0.938276984839450770, -0.938294277906947860, -0.938311568628709130, -0.938328857004691600, -0.938346143034851870, -0.938363426719146850, -0.938380708057533150, -0.938397987049967800, +-0.938415263696407710, -0.938432537996809150, -0.938449809951129250, -0.938467079559324850, -0.938484346821352730, -0.938501611737169840, -0.938518874306733090, -0.938536134529998960, +-0.938553392406924370, -0.938570647937466360, -0.938587901121581750, -0.938605151959227450, -0.938622400450360160, -0.938639646594936930, -0.938656890392914560, -0.938674131844249970, +-0.938691370948900320, -0.938708607706821960, -0.938725842117972160, -0.938743074182307620, -0.938760303899785490, -0.938777531270362900, -0.938794756293996110, -0.938811978970642500, +-0.938829199300258880, -0.938846417282802380, -0.938863632918229720, -0.938880846206498030, -0.938898057147564140, -0.938915265741385170, -0.938932471987918070, -0.938949675887120080, +-0.938966877438947580, -0.938984076643357920, -0.939001273500308040, -0.939018468009754970, -0.939035660171655740, -0.939052849985967720, -0.939070037452647170, -0.939087222571651560, +-0.939104405342937930, -0.939121585766463210, -0.939138763842184640, -0.939155939570059050, -0.939173112950043690, -0.939190283982095480, -0.939207452666171890, -0.939224619002229420, +-0.939241782990225320, -0.939258944630116830, -0.939276103921861010, -0.939293260865414870, -0.939310415460735900, -0.939327567707780590, -0.939344717606506290, -0.939361865156870260, +-0.939379010358829540, -0.939396153212341380, -0.939413293717362710, -0.939430431873850890, -0.939447567681762960, -0.939464701141056400, -0.939481832251687800, -0.939498961013614630, +-0.939516087426794040, -0.939533211491183300, -0.939550333206739420, -0.939567452573420110, -0.939584569591181860, -0.939601684259982140, -0.939618796579778200, -0.939635906550527310, +-0.939653014172186610, -0.939670119444713460, -0.939687222368064900, -0.939704322942198300, -0.939721421167071020, -0.939738517042640330, -0.939755610568863140, -0.939772701745696940, +-0.939789790573098860, -0.939806877051026390, -0.939823961179437120, -0.939841042958287520, -0.939858122387535300, -0.939875199467137820, -0.939892274197052350, -0.939909346577236240, +-0.939926416607646640, -0.939943484288241150, -0.939960549618976900, -0.939977612599811160, -0.939994673230701850, -0.940011731511605440, -0.940028787442479750, -0.940045841023282150, +-0.940062892253969880, -0.940079941134500330, -0.940096987664831300, -0.940114031844919480, -0.940131073674722590, -0.940148113154198000, -0.940165150283303160, -0.940182185061995470, +-0.940199217490232280, -0.940216247567970950, -0.940233275295169090, -0.940250300671784390, -0.940267323697773550, -0.940284344373094490, -0.940301362697704480, -0.940318378671561090, +-0.940335392294621820, -0.940352403566844350, -0.940369412488185510, -0.940386419058603210, -0.940403423278054820, -0.940420425146497820, -0.940437424663889800, -0.940454421830188240, +-0.940471416645350610, -0.940488409109334510, -0.940505399222097640, -0.940522386983596910, -0.940539372393790260, -0.940556355452635160, -0.940573336160089200, -0.940590314516109970, +-0.940607290520655170, -0.940624264173681830, -0.940641235475147890, -0.940658204425010800, -0.940675171023228170, -0.940692135269757700, -0.940709097164556860, -0.940726056707583250, +-0.940743013898794560, -0.940759968738148270, -0.940776921225602410, -0.940793871361113920, -0.940810819144640710, -0.940827764576140590, -0.940844707655570930, -0.940861648382889770, +-0.940878586758054360, -0.940895522781022290, -0.940912456451751590, -0.940929387770199630, -0.940946316736324230, -0.940963243350083080, -0.940980167611433770, -0.940997089520334010, +-0.941014009076741600, -0.941030926280614470, -0.941047841131909650, -0.941064753630585280, -0.941081663776599080, -0.941098571569908620, -0.941115477010471820, -0.941132380098246620, +-0.941149280833190050, -0.941166179215260360, -0.941183075244415250, -0.941199968920612420, -0.941216860243809680, -0.941233749213964850, -0.941250635831035520, -0.941267520094979710, +-0.941284402005755360, -0.941301281563319710, -0.941318158767630810, -0.941335033618646570, -0.941351906116324690, -0.941368776260623100, -0.941385644051499830, -0.941402509488912240, +-0.941419372572818270, -0.941436233303175940, -0.941453091679942950, -0.941469947703077240, -0.941486801372536710, -0.941503652688279180, -0.941520501650262460, -0.941537348258444930, +-0.941554192512783610, -0.941571034413236750, -0.941587873959762400, -0.941604711152318360, -0.941621545990862560, -0.941638378475353140, -0.941655208605747470, -0.941672036382003810, +-0.941688861804080070, -0.941705684871934180, -0.941722505585524060, -0.941739323944807750, -0.941756139949743050, -0.941772953600288010, -0.941789764896400540, -0.941806573838039010, +-0.941823380425160780, -0.941840184657724010, -0.941856986535686840, -0.941873786059007180, -0.941890583227643410, -0.941907378041552890, -0.941924170500693880, -0.941940960605024410, +-0.941957748354502520, -0.941974533749086350, -0.941991316788733820, -0.942008097473402970, -0.942024875803051940, -0.942041651777638660, -0.942058425397121480, -0.942075196661458110, +-0.942091965570606590, -0.942108732124525280, -0.942125496323172110, -0.942142258166505100, -0.942159017654482840, -0.942175774787062710, -0.942192529564203190, -0.942209281985862290, +-0.942226032051998170, -0.942242779762568980, -0.942259525117532970, -0.942276268116847950, -0.942293008760472390, -0.942309747048364570, -0.942326482980482050, -0.942343216556783440, +-0.942359947777226650, -0.942376676641770050, -0.942393403150371790, -0.942410127302990230, -0.942426849099583190, -0.942443568540108910, -0.942460285624525770, -0.942477000352791920, +-0.942493712724865480, -0.942510422740704850, -0.942527130400268140, -0.942543835703513630, -0.942560538650399790, -0.942577239240884320, -0.942593937474925700, -0.942610633352482300, +-0.942627326873512250, -0.942644018037974040, -0.942660706845825920, -0.942677393297025820, -0.942694077391532210, -0.942710759129303360, -0.942727438510297720, -0.942744115534473350, +-0.942760790201788820, -0.942777462512202290, -0.942794132465672010, -0.942810800062156450, -0.942827465301614210, -0.942844128184003090, -0.942860788709281470, -0.942877446877408040, +-0.942894102688340950, -0.942910756142038790, -0.942927407238459580, -0.942944055977561810, -0.942960702359303850, -0.942977346383644170, -0.942993988050541130, -0.943010627359953110, +-0.943027264311838590, -0.943043898906155810, -0.943060531142863370, -0.943077161021919850, -0.943093788543283180, -0.943110413706911950, -0.943127036512764750, -0.943143656960799940, +-0.943160275050975990, -0.943176890783251620, -0.943193504157584740, -0.943210115173934160, -0.943226723832258250, -0.943243330132515490, -0.943259934074664460, -0.943276535658663650, +-0.943293134884471420, -0.943309731752046350, -0.943326326261347270, -0.943342918412332090, -0.943359508204959510, -0.943376095639188340, -0.943392680714976840, -0.943409263432283600, +-0.943425843791067530, -0.943442421791286570, -0.943458997432899520, -0.943475570715864960, -0.943492141640141500, -0.943508710205687720, -0.943525276412462200, -0.943541840260423430, +-0.943558401749530100, -0.943574960879741020, -0.943591517651014230, -0.943608072063308660, -0.943624624116582880, -0.943641173810795600, -0.943657721145905400, -0.943674266121871110, +-0.943690808738650970, -0.943707348996203680, -0.943723886894488160, -0.943740422433462790, -0.943756955613086370, -0.943773486433317710, -0.943790014894115180, -0.943806540995437700, +-0.943823064737243870, -0.943839586119492590, -0.943856105142142130, -0.943872621805151300, -0.943889136108479020, -0.943905648052083880, -0.943922157635924910, -0.943938664859960250, +-0.943955169724148950, -0.943971672228449690, -0.943988172372821290, -0.944004670157222450, -0.944021165581611870, -0.944037658645948460, -0.944054149350190830, -0.944070637694297890, +-0.944087123678228670, -0.944103607301941320, -0.944120088565394870, -0.944136567468548350, -0.944153044011360240, -0.944169518193789690, -0.944185990015795510, -0.944202459477336160, +-0.944218926578370590, -0.944235391318857700, -0.944251853698756420, -0.944268313718025440, -0.944284771376623590, -0.944301226674510000, -0.944317679611643260, -0.944334130187982510, +-0.944350578403486240, -0.944367024258113590, -0.944383467751823250, -0.944399908884574370, -0.944416347656325540, -0.944432784067036350, -0.944449218116664710, -0.944465649805170120, +-0.944482079132511480, -0.944498506098647490, -0.944514930703537310, -0.944531352947139860, -0.944547772829413930, -0.944564190350318580, -0.944580605509813150, -0.944597018307855810, +-0.944613428744405900, -0.944629836819422470, -0.944646242532864440, -0.944662645884690840, -0.944679046874860930, -0.944695445503333060, -0.944711841770066620, -0.944728235675020510, +-0.944744627218153890, -0.944761016399425670, -0.944777403218794890, -0.944793787676220580, -0.944810169771661880, -0.944826549505077720, -0.944842926876427460, -0.944859301885669580, +-0.944875674532763440, -0.944892044817668200, -0.944908412740342760, -0.944924778300746620, -0.944941141498838230, -0.944957502334576980, -0.944973860807922010, -0.944990216918832340, +-0.945006570667267120, -0.945022922053185500, -0.945039271076546620, -0.945055617737309510, -0.945071962035433310, -0.945088303970877620, -0.945104643543600800, -0.945120980753562430, +-0.945137315600721560, -0.945153648085037320, -0.945169978206469420, -0.945186305964976210, -0.945202631360517190, -0.945218954393051590, -0.945235275062538680, -0.945251593368937600, +-0.945267909312207390, -0.945284222892307510, -0.945300534109197120, -0.945316842962835360, -0.945333149453181700, -0.945349453580194950, -0.945365755343834600, -0.945382054744059790, +-0.945398351780829870, -0.945414646454104110, -0.945430938763841990, -0.945447228710002200, -0.945463516292544330, -0.945479801511427740, -0.945496084366611590, -0.945512364858055230, +-0.945528642985718040, -0.945544918749559150, -0.945561192149538040, -0.945577463185614200, -0.945593731857746420, -0.945609998165894310, -0.945626262110017210, -0.945642523690074400, +-0.945658782906025340, -0.945675039757829630, -0.945691294245445960, -0.945707546368834140, -0.945723796127953430, -0.945740043522763200, -0.945756288553222800, -0.945772531219291720, +-0.945788771520929440, -0.945805009458095090, -0.945821245030748270, -0.945837478238848560, -0.945853709082355000, -0.945869937561227060, -0.945886163675424330, -0.945902387424906180, +-0.945918608809632300, -0.945934827829561620, -0.945951044484653950, -0.945967258774868650, -0.945983470700165200, -0.945999680260502960, -0.946015887455841640, -0.946032092286140600, +-0.946048294751359320, -0.946064494851457270, -0.946080692586394270, -0.946096887956129230, -0.946113080960622080, -0.946129271599832070, -0.946145459873719010, -0.946161645782242490, +-0.946177829325361650, -0.946194010503036200, -0.946210189315225710, -0.946226365761889790, -0.946242539842988010, -0.946258711558479740, -0.946274880908324790, -0.946291047892482640, +-0.946307212510912770, -0.946323374763575310, -0.946339534650428970, -0.946355692171433890, -0.946371847326549550, -0.946388000115735650, -0.946404150538951660, -0.946420298596157620, +-0.946436444287312550, -0.946452587612376380, -0.946468728571308700, -0.946484867164069210, -0.946501003390617600, -0.946517137250913470, -0.946533268744916390, -0.946549397872586300, +-0.946565524633882880, -0.946581649028765400, -0.946597771057193890, -0.946613890719127830, -0.946630008014527120, -0.946646122943351380, -0.946662235505560500, -0.946678345701113870, +-0.946694453529971390, -0.946710558992092670, -0.946726662087437610, -0.946742762815965920, -0.946758861177637300, -0.946774957172411560, -0.946791050800248390, -0.946807142061107940, +-0.946823230954949250, -0.946839317481732560, -0.946855401641417570, -0.946871483433963990, -0.946887562859331840, -0.946903639917480940, -0.946919714608370770, -0.946935786931961230, +-0.946951856888212260, -0.946967924477083670, -0.946983989698535140, -0.947000052552526840, -0.947016113039018230, -0.947032171157969450, -0.947048226909340210, -0.947064280293090640, +-0.947080331309180120, -0.947096379957568790, -0.947112426238216560, -0.947128470151083150, -0.947144511696128900, -0.947160550873313080, -0.947176587682595940, -0.947192622123937290, +-0.947208654197297050, -0.947224683902635260, -0.947240711239911600, -0.947256736209086350, -0.947272758810119190, -0.947288779042970040, -0.947304796907599390, -0.947320812403966370, +-0.947336825532031360, -0.947352836291754150, -0.947368844683095010, -0.947384850706013750, -0.947400854360470610, -0.947416855646424970, -0.947432854563837300, -0.947448851112667410, +-0.947464845292875450, -0.947480837104421440, -0.947496826547265190, -0.947512813621366970, -0.947528798326686680, -0.947544780663184700, -0.947560760630820510, -0.947576738229554460, +-0.947592713459346480, -0.947608686320156710, -0.947624656811945300, -0.947640624934672380, -0.947656590688297770, -0.947672554072781610, -0.947688515088084050, -0.947704473734165330, +-0.947720430010985270, -0.947736383918504230, -0.947752335456682140, -0.947768284625479350, -0.947784231424856020, -0.947800175854771830, -0.947816117915187270, -0.947832057606062370, +-0.947847994927357380, -0.947863929879032340, -0.947879862461047720, -0.947895792673363210, -0.947911720515939300, -0.947927645988736020, -0.947943569091713620, -0.947959489824832250, +-0.947975408188052260, -0.947991324181333690, -0.948007237804636800, -0.948023149057921840, -0.948039057941149290, -0.948054964454278840, -0.948070868597270850, -0.948086770370085820, +-0.948102669772683870, -0.948118566805025490, -0.948134461467070370, -0.948150353758779100, -0.948166243680112040, -0.948182131231029230, -0.948198016411491260, -0.948213899221458160, +-0.948229779660890280, -0.948245657729748000, -0.948261533427991580, -0.948277406755581590, -0.948293277712477730, -0.948309146298640830, -0.948325012514031010, -0.948340876358608640, +-0.948356737832333980, -0.948372596935167960, -0.948388453667070030, -0.948404308028000910, -0.948420160017921180, -0.948436009636790980, -0.948451856884570680, -0.948467701761220860, +-0.948483544266701670, -0.948499384400973700, -0.948515222163997640, -0.948531057555733080, -0.948546890576140940, -0.948562721225181590, -0.948578549502815390, -0.948594375409002820, +-0.948610198943704690, -0.948626020106880690, -0.948641838898491630, -0.948657655318497990, -0.948673469366860260, -0.948689281043538780, -0.948705090348494150, -0.948720897281686850, +-0.948736701843077230, -0.948752504032626120, -0.948768303850293540, -0.948784101296040180, -0.948799896369826530, -0.948815689071613180, -0.948831479401360590, -0.948847267359029580, +-0.948863052944580070, -0.948878836157972970, -0.948894616999168770, -0.948910395468128050, -0.948926171564811400, -0.948941945289179190, -0.948957716641192220, -0.948973485620810960, +-0.948989252227995910, -0.949005016462708070, -0.949020778324907390, -0.949036537814554770, -0.949052294931610810, -0.949068049676036090, -0.949083802047791520, -0.949099552046837160, +-0.949115299673134020, -0.949131044926642460, -0.949146787807323420, -0.949162528315137370, -0.949178266450044990, -0.949194002212007000, -0.949209735600983980, -0.949225466616936630, +-0.949241195259825870, -0.949256921529611830, -0.949272645426255450, -0.949288366949717520, -0.949304086099958640, -0.949319802876939620, -0.949335517280621270, -0.949351229310963940, +-0.949366938967928450, -0.949382646251475730, -0.949398351161566230, -0.949414053698161010, -0.949429753861220640, -0.949445451650705820, -0.949461147066577360, -0.949476840108796290, +-0.949492530777322870, -0.949508219072118240, -0.949523904993142990, -0.949539588540357920, -0.949555269713723840, -0.949570948513202010, -0.949586624938752450, -0.949602298990336320, +-0.949617970667914420, -0.949633639971447670, -0.949649306900896770, -0.949664971456222640, -0.949680633637386080, -0.949696293444347920, -0.949711950877069280, -0.949727605935510530, +-0.949743258619632710, -0.949758908929396740, -0.949774556864763640, -0.949790202425694010, -0.949805845612149200, -0.949821486424089480, -0.949837124861475980, -0.949852760924269730, +-0.949868394612431670, -0.949884025925922470, -0.949899654864703290, -0.949915281428734940, -0.949930905617978440, -0.949946527432394610, -0.949962146871944800, -0.949977763936589280, +-0.949993378626289410, -0.950008990941006100, -0.950024600880700290, -0.950040208445333210, -0.950055813634865350, -0.950071416449258080, -0.950087016888472080, -0.950102614952468620, +-0.950118210641208720, -0.950133803954653190, -0.950149394892763180, -0.950164983455499600, -0.950180569642823600, -0.950196153454696550, -0.950211734891078800, -0.950227313951931610, +-0.950242890637216230, -0.950258464946893590, -0.950274036880924820, -0.950289606439271180, -0.950305173621893370, -0.950320738428752530, -0.950336300859809800, -0.950351860915026440, +-0.950367418594363360, -0.950382973897781700, -0.950398526825242620, -0.950414077376707240, -0.950429625552136950, -0.950445171351492310, -0.950460714774734820, -0.950476255821825490, +-0.950491794492725470, -0.950507330787396020, -0.950522864705798500, -0.950538396247893490, -0.950553925413642590, -0.950569452203006810, -0.950584976615947430, -0.950600498652425570, +-0.950616018312402500, -0.950631535595839460, -0.950647050502697490, -0.950662563032938170, -0.950678073186522090, -0.950693580963410940, -0.950709086363565880, -0.950724589386948040, +-0.950740090033518670, -0.950755588303239360, -0.950771084196070930, -0.950786577711974720, -0.950802068850912010, -0.950817557612844140, -0.950833043997732500, -0.950848528005538100, +-0.950864009636222420, -0.950879488889746720, -0.950894965766072350, -0.950910440265160810, -0.950925912386972880, -0.950941382131470170, -0.950956849498614030, -0.950972314488365720, +-0.950987777100686940, -0.951003237335538490, -0.951018695192881850, -0.951034150672678600, -0.951049603774889900, -0.951065054499477090, -0.951080502846401780, -0.951095948815625200, +-0.951111392407108620, -0.951126833620813740, -0.951142272456701910, -0.951157708914734170, -0.951173142994872210, -0.951188574697077290, -0.951204004021311000, -0.951219430967534700, +-0.951234855535710190, -0.951250277725798070, -0.951265697537760360, -0.951281114971558430, -0.951296530027153750, -0.951311942704507580, -0.951327353003581730, -0.951342760924337450, +-0.951358166466736210, -0.951373569630739820, -0.951388970416309320, -0.951404368823406290, -0.951419764851992420, -0.951435158502029090, -0.951450549773477980, -0.951465938666300690, +-0.951481325180458250, -0.951496709315912460, -0.951512091072625020, -0.951527470450557190, -0.951542847449670880, -0.951558222069927350, -0.951573594311288180, -0.951588964173715190, +-0.951604331657169960, -0.951619696761613620, -0.951635059487008110, -0.951650419833314890, -0.951665777800495660, -0.951681133388512010, -0.951696486597325750, -0.951711837426898020, +-0.951727185877190630, -0.951742531948165380, -0.951757875639783760, -0.951773216952007450, -0.951788555884798050, -0.951803892438117360, -0.951819226611926860, -0.951834558406188360, +-0.951849887820863660, -0.951865214855914020, -0.951880539511301250, -0.951895861786987260, -0.951911181682933540, -0.951926499199102220, -0.951941814335454330, -0.951957127091951900, +-0.951972437468556640, -0.951987745465230240, -0.952003051081934610, -0.952018354318631240, -0.952033655175282050, -0.952048953651848720, -0.952064249748292960, -0.952079543464576790, +-0.952094834800661590, -0.952110123756509270, -0.952125410332081650, -0.952140694527340510, -0.952155976342247690, -0.952171255776765090, -0.952186532830854190, -0.952201807504476920, +-0.952217079797595070, -0.952232349710170570, -0.952247617242165220, -0.952262882393540840, -0.952278145164259130, -0.952293405554282210, -0.952308663563571910, -0.952323919192089810, +-0.952339172439797820, -0.952354423306657980, -0.952369671792631990, -0.952384917897681870, -0.952400161621769660, -0.952415402964856940, -0.952430641926905520, -0.952445878507877650, +-0.952461112707735040, -0.952476344526439590, -0.952491573963953340, -0.952506801020238100, -0.952522025695255900, -0.952537247988968880, -0.952552467901338520, -0.952567685432326950, +-0.952582900581896210, -0.952598113350008100, -0.952613323736624880, -0.952628531741708470, -0.952643737365220570, -0.952658940607123310, -0.952674141467378610, -0.952689339945948620, +-0.952704536042795260, -0.952719729757880550, -0.952734921091166640, -0.952750110042615340, -0.952765296612188670, -0.952780480799849120, -0.952795662605558150, -0.952810842029277900, +-0.952826019070970640, -0.952841193730598280, -0.952856366008123290, -0.952871535903507040, -0.952886703416712000, -0.952901868547700200, -0.952917031296433680, -0.952932191662874570, +-0.952947349646985020, -0.952962505248727050, -0.952977658468062930, -0.952992809304954560, -0.953007957759364420, -0.953023103831254210, -0.953038247520586190, -0.953053388827322600, +-0.953068527751425480, -0.953083664292857070, -0.953098798451579740, -0.953113930227555190, -0.953129059620745790, -0.953144186631113670, -0.953159311258621190, -0.953174433503230390, +-0.953189553364903520, -0.953204670843602720, -0.953219785939290350, -0.953234898651928670, -0.953250008981479490, -0.953265116927905390, -0.953280222491168390, -0.953295325671230880, +-0.953310426468055080, -0.953325524881603380, -0.953340620911837690, -0.953355714558720480, -0.953370805822213900, -0.953385894702280300, -0.953400981198882060, -0.953416065311981310, +-0.953431147041540420, -0.953446226387521630, -0.953461303349887550, -0.953476377928599960, -0.953491450123621350, -0.953506519934914200, -0.953521587362440750, -0.953536652406163250, +-0.953551715066044530, -0.953566775342046150, -0.953581833234130820, -0.953596888742261010, -0.953611941866398860, -0.953626992606506960, -0.953642040962547450, -0.953657086934482920, +-0.953672130522275730, -0.953687171725888130, -0.953702210545282920, -0.953717246980421820, -0.953732281031267730, -0.953747312697782900, -0.953762341979929710, -0.953777368877670950, +-0.953792393390968550, -0.953807415519785210, -0.953822435264083280, -0.953837452623825240, -0.953852467598973570, -0.953867480189490750, -0.953882490395339230, -0.953897498216481510, +-0.953912503652880050, -0.953927506704497550, -0.953942507371296040, -0.953957505653238220, -0.953972501550286680, -0.953987495062403880, -0.954002486189552410, -0.954017474931694860, +-0.954032461288793490, -0.954047445260810870, -0.954062426847709700, -0.954077406049452350, -0.954092382866001620, -0.954107357297319880, -0.954122329343369710, -0.954137299004113810, +-0.954152266279514880, -0.954167231169534950, -0.954182193674137040, -0.954197153793283630, -0.954212111526937300, -0.954227066875060650, -0.954242019837616700, -0.954256970414567360, +-0.954271918605875680, -0.954286864411504120, -0.954301807831415490, -0.954316748865572270, -0.954331687513937150, -0.954346623776472840, -0.954361557653142010, -0.954376489143907490, +-0.954391418248731530, -0.954406344967577040, -0.954421269300406610, -0.954436191247183040, -0.954451110807869040, -0.954466027982427520, -0.954480942770820630, -0.954495855173011390, +-0.954510765188962500, -0.954525672818636760, -0.954540578061996770, -0.954555480919005330, -0.954570381389625240, -0.954585279473819210, -0.954600175171549940, -0.954615068482780550, +-0.954629959407473190, -0.954644847945590900, -0.954659734097096480, -0.954674617861952730, -0.954689499240122810, -0.954704378231568730, -0.954719254836253750, -0.954734129054140680, +-0.954749000885192320, -0.954763870329371380, -0.954778737386640760, -0.954793602056963290, -0.954808464340301870, -0.954823324236619310, -0.954838181745878640, -0.954853036868042240, +-0.954867889603073340, -0.954882739950934640, -0.954897587911589070, -0.954912433484999880, -0.954927276671129310, -0.954942117469940510, -0.954956955881396400, -0.954971791905460000, +-0.954986625542094010, -0.955001456791261580, -0.955016285652925400, -0.955031112127048500, -0.955045936213593900, -0.955060757912524650, -0.955075577223803320, -0.955090394147393050, +-0.955105208683256770, -0.955120020831357390, -0.955134830591658050, -0.955149637964121890, -0.955164442948711280, -0.955179245545389690, -0.955194045754119920, -0.955208843574865020, +-0.955223639007588000, -0.955238432052252010, -0.955253222708819850, -0.955268010977254560, -0.955282796857519600, -0.955297580349577350, -0.955312361453391160, -0.955327140168924060, +-0.955341916496139200, -0.955356690434999490, -0.955371461985468300, -0.955386231147508090, -0.955400997921082460, -0.955415762306154330, -0.955430524302686710, -0.955445283910642760, +-0.955460041129985730, -0.955474795960678520, -0.955489548402684300, -0.955504298455966520, -0.955519046120487660, -0.955533791396211200, -0.955548534283100380, -0.955563274781118130, +-0.955578012890227700, -0.955592748610392450, -0.955607481941575190, -0.955622212883739160, -0.955636941436847520, -0.955651667600863620, -0.955666391375750490, -0.955681112761471500, +-0.955695831757989670, -0.955710548365268250, -0.955725262583270400, -0.955739974411959680, -0.955754683851298800, -0.955769390901251240, -0.955784095561780120, -0.955798797832848820, +-0.955813497714420810, -0.955828195206458790, -0.955842890308926220, -0.955857583021786470, -0.955872273345002690, -0.955886961278538340, -0.955901646822356570, -0.955916329976420620, +-0.955931010740693870, -0.955945689115139550, -0.955960365099721380, -0.955975038694401920, -0.955989709899145000, -0.956004378713913640, -0.956019045138671420, -0.956033709173381600, +-0.956048370818007750, -0.956063030072512700, -0.956077686936860130, -0.956092341411013290, -0.956106993494935660, -0.956121643188590500, -0.956136290491941150, -0.956150935404951220, +-0.956165577927583830, -0.956180218059802800, -0.956194855801571040, -0.956209491152852030, -0.956224124113609350, -0.956238754683806370, -0.956253382863406440, -0.956268008652373380, +-0.956282632050669990, -0.956297253058260080, -0.956311871675107010, -0.956326487901174250, -0.956341101736425280, -0.956355713180823570, -0.956370322234332600, -0.956384928896915730, +-0.956399533168536880, -0.956414135049158840, -0.956428734538745550, -0.956443331637260470, -0.956457926344666980, -0.956472518660928750, -0.956487108586009380, -0.956501696119872010, +-0.956516281262480450, -0.956530864013798170, -0.956545444373788630, -0.956560022342415660, -0.956574597919642500, -0.956589171105432850, -0.956603741899750390, -0.956618310302558510, +-0.956632876313820990, -0.956647439933501210, -0.956662001161562750, -0.956676559997969300, -0.956691116442684340, -0.956705670495672010, -0.956720222156895120, -0.956734771426317800, +-0.956749318303903530, -0.956763862789615890, -0.956778404883418590, -0.956792944585275310, -0.956807481895149750, -0.956822016813005380, -0.956836549338806020, -0.956851079472515460, +-0.956865607214096970, -0.956880132563514560, -0.956894655520731720, -0.956909176085712350, -0.956923694258419940, -0.956938210038818630, -0.956952723426871430, -0.956967234422542500, +-0.956981743025795420, -0.956996249236594100, -0.957010753054902020, -0.957025254480683210, -0.957039753513901140, -0.957054250154519730, -0.957068744402502890, -0.957083236257814000, +-0.957097725720417070, -0.957112212790275700, -0.957126697467353900, -0.957141179751615280, -0.957155659643024070, -0.957170137141543420, -0.957184612247137360, -0.957199084959769800, +-0.957213555279404550, -0.957228023206005420, -0.957242488739536210, -0.957256951879960740, -0.957271412627243020, -0.957285870981346880, -0.957300326942235880, -0.957314780509874060, +-0.957329231684225230, -0.957343680465253420, -0.957358126852922320, -0.957372570847196290, -0.957387012448038480, -0.957401451655413130, -0.957415888469284160, -0.957430322889615490, +-0.957444754916370930, -0.957459184549514620, -0.957473611789010250, -0.957488036634821850, -0.957502459086913450, -0.957516879145249080, -0.957531296809792320, -0.957545712080507210, +-0.957560124957357870, -0.957574535440308240, -0.957588943529322560, -0.957603349224364190, -0.957617752525397490, -0.957632153432386390, -0.957646551945295020, -0.957660948064087080, +-0.957675341788726930, -0.957689733119178380, -0.957704122055405450, -0.957718508597372180, -0.957732892745043030, -0.957747274498381260, -0.957761653857351350, -0.957776030821917310, +-0.957790405392043300, -0.957804777567693110, -0.957819147348831330, -0.957833514735421440, -0.957847879727427690, -0.957862242324814210, -0.957876602527545250, -0.957890960335584740, +-0.957905315748896810, -0.957919668767445610, -0.957934019391195160, -0.957948367620110040, -0.957962713454153620, -0.957977056893290490, -0.957991397937484780, -0.958005736586700410, +-0.958020072840901850, -0.958034406700053240, -0.958048738164118510, -0.958063067233061780, -0.958077393906847540, -0.958091718185439700, -0.958106040068802620, -0.958120359556900340, +-0.958134676649697310, -0.958148991347157470, -0.958163303649245510, -0.958177613555924900, -0.958191921067160330, -0.958206226182916070, -0.958220528903156120, -0.958234829227844860, +-0.958249127156946770, -0.958263422690425640, -0.958277715828245950, -0.958292006570371950, -0.958306294916767890, -0.958320580867398240, -0.958334864422227040, -0.958349145581218640, +-0.958363424344337410, -0.958377700711547710, -0.958391974682813900, -0.958406246258099890, -0.958420515437370390, -0.958434782220589530, -0.958449046607721680, -0.958463308598731520, +-0.958477568193582760, -0.958491825392240090, -0.958506080194667990, -0.958520332600830580, -0.958534582610692350, -0.958548830224217660, -0.958563075441370870, -0.958577318262116450, +-0.958591558686418770, -0.958605796714242290, -0.958620032345551150, -0.958634265580309950, -0.958648496418483150, -0.958662724860035010, -0.958676950904930100, -0.958691174553133020, +-0.958705395804607790, -0.958719614659319100, -0.958733831117231320, -0.958748045178309030, -0.958762256842516590, -0.958776466109818480, -0.958790672980179170, -0.958804877453563240, +-0.958819079529935390, -0.958833279209259540, -0.958847476491500590, -0.958861671376622820, -0.958875863864590890, -0.958890053955369410, -0.958904241648922960, -0.958918426945215670, +-0.958932609844212360, -0.958946790345877380, -0.958960968450175530, -0.958975144157071300, -0.958989317466529160, -0.959003488378513680, -0.959017656892989570, -0.959031823009921510, +-0.959045986729273660, -0.959060148051010810, -0.959074306975097660, -0.959088463501498680, -0.959102617630178570, -0.959116769361102240, -0.959130918694233610, -0.959145065629537720, +-0.959159210166979250, -0.959173352306522680, -0.959187492048132690, -0.959201629391774000, -0.959215764337411290, -0.959229896885009150, -0.959244027034532270, -0.959258154785945560, +-0.959272280139213170, -0.959286403094300130, -0.959300523651171020, -0.959314641809790650, -0.959328757570123920, -0.959342870932135110, -0.959356981895789110, -0.959371090461050620, +-0.959385196627884350, -0.959399300396255090, -0.959413401766127660, -0.959427500737466740, -0.959441597310237040, -0.959455691484403240, -0.959469783259930600, -0.959483872636783250, +-0.959497959614926120, -0.959512044194324120, -0.959526126374942060, -0.959540206156744620, -0.959554283539696960, -0.959568358523763320, -0.959582431108908840, -0.959596501295098210, +-0.959610569082296360, -0.959624634470468090, -0.959638697459578300, -0.959652758049591710, -0.959666816240473230, -0.959680872032187880, -0.959694925424700140, -0.959708976417975150, +-0.959723025011977700, -0.959737071206672620, -0.959751115002024920, -0.959765156397999640, -0.959779195394561360, -0.959793231991674880, -0.959807266189305450, -0.959821297987417890, +-0.959835327385976990, -0.959849354384947780, -0.959863378984295300, -0.959877401183984240, -0.959891420983979950, -0.959905438384246910, -0.959919453384750270, -0.959933465985454930, +-0.959947476186326030, -0.959961483987328280, -0.959975489388427250, -0.959989492389587080, -0.960003492990773370, -0.960017491191950790, -0.960031486993084490, -0.960045480394139510, +-0.960059471395080850, -0.960073459995873460, -0.960087446196482450, -0.960101429996872760, -0.960115411397009840, -0.960129390396858070, -0.960143366996382920, -0.960157341195549300, +-0.960171312994322350, -0.960185282392667320, -0.960199249390548790, -0.960213213987932250, -0.960227176184782590, -0.960241135981064970, -0.960255093376744640, -0.960269048371786500, +-0.960283000966155710, -0.960296951159817500, -0.960310898952736800, -0.960324844344879190, -0.960338787336209250, -0.960352727926692240, -0.960366666116293400, -0.960380601904977980, +-0.960394535292711020, -0.960408466279457970, -0.960422394865183550, -0.960436321049853100, -0.960450244833431890, -0.960464166215885040, -0.960478085197177700, -0.960492001777275230, +-0.960505915956142760, -0.960519827733745560, -0.960533737110048860, -0.960547644085017690, -0.960561548658617430, -0.960575450830813300, -0.960589350601570470, -0.960603247970854280, +-0.960617142938630320, -0.960631035504863060, -0.960644925669518420, -0.960658813432561320, -0.960672698793957220, -0.960686581753671390, -0.960700462311669170, -0.960714340467915710, +-0.960728216222376470, -0.960742089575016830, -0.960755960525801810, -0.960769829074696880, -0.960783695221667290, -0.960797558966678510, -0.960811420309695910, -0.960825279250684950, +-0.960839135789610550, -0.960852989926438310, -0.960866841661133560, -0.960880690993661690, -0.960894537923988160, -0.960908382452078320, -0.960922224577897440, -0.960936064301410990, +-0.960949901622584420, -0.960963736541383340, -0.960977569057772760, -0.960991399171718160, -0.961005226883185020, -0.961019052192138900, -0.961032875098545400, -0.961046695602369440, +-0.961060513703576700, -0.961074329402132670, -0.961088142698002910, -0.961101953591152690, -0.961115762081547700, -0.961129568169153180, -0.961143371853934840, -0.961157173135858020, +-0.961170972014888550, -0.961184768490991330, -0.961198562564132280, -0.961212354234276760, -0.961226143501390350, -0.961239930365438640, -0.961253714826387330, -0.961267496884201430, +-0.961281276538846870, -0.961295053790289120, -0.961308828638493650, -0.961322601083426150, -0.961336371125052210, -0.961350138763337300, -0.961363903998247000, -0.961377666829747230, +-0.961391427257803020, -0.961405185282380280, -0.961418940903444600, -0.961432694120961440, -0.961446444934896730, -0.961460193345216040, -0.961473939351884630, -0.961487682954868310, +-0.961501424154132870, -0.961515162949643900, -0.961528899341366980, -0.961542633329267820, -0.961556364913312090, -0.961570094093465390, -0.961583820869693740, -0.961597545241962280, +-0.961611267210236930, -0.961624986774483490, -0.961638703934667550, -0.961652418690754800, -0.961666131042711260, -0.961679840990502190, -0.961693548534093500, -0.961707253673451000, +-0.961720956408540270, -0.961734656739327230, -0.961748354665777460, -0.961762050187856880, -0.961775743305531170, -0.961789434018766040, -0.961803122327527630, -0.961816808231781170, +-0.961830491731492600, -0.961844172826627930, -0.961857851517152750, -0.961871527803033200, -0.961885201684234640, -0.961898873160722980, -0.961912542232464250, -0.961926208899424040, +-0.961939873161568370, -0.961953535018863050, -0.961967194471273880, -0.961980851518766670, -0.961994506161307330, -0.962008158398862000, -0.962021808231396050, -0.962035455658875600, +-0.962049100681266480, -0.962062743298534580, -0.962076383510645840, -0.962090021317566380, -0.962103656719261680, -0.962117289715697770, -0.962130920306840660, -0.962144548492656290, +-0.962158174273110460, -0.962171797648169290, -0.962185418617798600, -0.962199037181964310, -0.962212653340632770, -0.962226267093769240, -0.962239878441340070, -0.962253487383311290, +-0.962267093919648710, -0.962280698050318460, -0.962294299775286580, -0.962307899094518860, -0.962321496007981340, -0.962335090515640030, -0.962348682617460980, -0.962362272313410320, +-0.962375859603453950, -0.962389444487557920, -0.962403026965688250, -0.962416607037811290, -0.962430184703892520, -0.962443759963898420, -0.962457332817794780, -0.962470903265547850, +-0.962484471307123670, -0.962498036942488590, -0.962511600171608080, -0.962525160994448630, -0.962538719410976350, -0.962552275421157180, -0.962565829024957350, -0.962579380222342910, +-0.962592929013280090, -0.962606475397734920, -0.962620019375673540, -0.962633560947062320, -0.962647100111867050, -0.962660636870053990, -0.962674171221589270, -0.962687703166439150, +-0.962701232704570090, -0.962714759835947680, -0.962728284560538380, -0.962741806878308350, -0.962755326789223710, -0.962768844293250940, -0.962782359390355950, -0.962795872080504990, +-0.962809382363664420, -0.962822890239800500, -0.962836395708879470, -0.962849898770867240, -0.962863399425730290, -0.962876897673434760, -0.962890393513947120, -0.962903886947233610, +-0.962917377973260160, -0.962930866591993340, -0.962944352803399290, -0.962957836607444380, -0.962971318004094970, -0.962984796993317070, -0.962998273575077390, -0.963011747749341840, +-0.963025219516077000, -0.963038688875249350, -0.963052155826824800, -0.963065620370769810, -0.963079082507050770, -0.963092542235634010, -0.963105999556485900, -0.963119454469573030, +-0.963132906974861310, -0.963146357072317330, -0.963159804761907430, -0.963173250043597990, -0.963186692917355480, -0.963200133383146140, -0.963213571440936560, -0.963227007090692980, +-0.963240440332382210, -0.963253871165970050, -0.963267299591423210, -0.963280725608708140, -0.963294149217791330, -0.963307570418639010, -0.963320989211218110, -0.963334405595494440, +-0.963347819571434780, -0.963361231139005510, -0.963374640298173210, -0.963388047048904350, -0.963401451391165400, -0.963414853324922720, -0.963428252850142890, -0.963441649966792490, +-0.963455044674838220, -0.963468436974246110, -0.963481826864982850, -0.963495214347015020, -0.963508599420309200, -0.963521982084832200, -0.963535362340549820, -0.963548740187429200, +-0.963562115625436590, -0.963575488654538790, -0.963588859274702280, -0.963602227485893530, -0.963615593288079220, -0.963628956681226060, -0.963642317665300400, -0.963655676240269150, +-0.963669032406098580, -0.963682386162755370, -0.963695737510206210, -0.963709086448417680, -0.963722432977356600, -0.963735777096989320, -0.963749118807282650, -0.963762458108203050, +-0.963775794999717330, -0.963789129481792180, -0.963802461554394200, -0.963815791217490060, -0.963829118471046350, -0.963842443315029880, -0.963855765749407680, -0.963869085774145650, +-0.963882403389211050, -0.963895718594570350, -0.963909031390190350, -0.963922341776037860, -0.963935649752079680, -0.963948955318282060, -0.963962258474612140, -0.963975559221036620, +-0.963988857557522170, -0.964002153484035620, -0.964015447000543650, -0.964028738107012950, -0.964042026803410560, -0.964055313089703270, -0.964068596965857450, -0.964081878431840230, +-0.964095157487618200, -0.964108434133158280, -0.964121708368427370, -0.964134980193392390, -0.964148249608019700, -0.964161516612276340, -0.964174781206129320, -0.964188043389545220, +-0.964201303162491090, -0.964214560524933710, -0.964227815476839890, -0.964241068018176550, -0.964254318148910720, -0.964267565869008860, -0.964280811178438110, -0.964294054077165400, +-0.964307294565157510, -0.964320532642381380, -0.964333768308804130, -0.964347001564392240, -0.964360232409112840, -0.964373460842932960, -0.964386686865819300, -0.964399910477738990, +-0.964413131678658830, -0.964426350468545970, -0.964439566847367090, -0.964452780815089340, -0.964465992371679960, -0.964479201517105310, -0.964492408251332640, -0.964505612574328870, +-0.964518814486061250, -0.964532013986496680, -0.964545211075601870, -0.964558405753344060, -0.964571598019690280, -0.964584787874607440, -0.964597975318062680, -0.964611160350022920, +-0.964624342970455300, -0.964637523179326830, -0.964650700976604550, -0.964663876362255700, -0.964677049336246980, -0.964690219898545640, -0.964703388049118700, -0.964716553787933310, +-0.964729717114956590, -0.964742878030155790, -0.964756036533497510, -0.964769192624949200, -0.964782346304477790, -0.964795497572050630, -0.964808646427634750, -0.964821792871197180, +-0.964834936902705160, -0.964848078522125840, -0.964861217729426460, -0.964874354524573820, -0.964887488907535400, -0.964900620878278100, -0.964913750436769410, -0.964926877582976240, +-0.964940002316866160, -0.964953124638405770, -0.964966244547562630, -0.964979362044303900, -0.964992477128596700, -0.965005589800408290, -0.965018700059706020, -0.965031807906456930, +-0.965044913340628360, -0.965058016362187690, -0.965071116971101710, -0.965084215167338000, -0.965097310950863820, -0.965110404321646190, -0.965123495279652690, -0.965136583824850680, +-0.965149669957206860, -0.965162753676689020, -0.965175834983264200, -0.965188913876899870, -0.965201990357563160, -0.965215064425221540, -0.965228136079842150, -0.965241205321392570, +-0.965254272149839940, -0.965267336565151850, -0.965280398567295080, -0.965293458156237460, -0.965306515331946110, -0.965319570094388510, -0.965332622443532240, -0.965345672379344100, +-0.965358719901791900, -0.965371765010842760, -0.965384807706464290, -0.965397847988623830, -0.965410885857288740, -0.965423921312426380, -0.965436954354004230, -0.965449984981989750, +-0.965463013196350420, -0.965476038997053480, -0.965489062384066400, -0.965502083357356540, -0.965515101916891600, -0.965528118062638830, -0.965541131794566130, -0.965554143112640210, +-0.965567152016829080, -0.965580158507099990, -0.965593162583420430, -0.965606164245758070, -0.965619163494080280, -0.965632160328354530, -0.965645154748548510, -0.965658146754629690, +-0.965671136346565320, -0.965684123524323090, -0.965697108287870590, -0.965710090637175280, -0.965723070572204860, -0.965736048092926900, -0.965749023199308550, -0.965761995891317730, +-0.965774966168921890, -0.965787934032088620, -0.965800899480785510, -0.965813862514980140, -0.965826823134640190, -0.965839781339733140, -0.965852737130226790, -0.965865690506088500, +-0.965878641467285860, -0.965891590013786660, -0.965904536145558490, -0.965917479862569040, -0.965930421164786110, -0.965943360052176850, -0.965956296524709160, -0.965969230582350740, +-0.965982162225069270, -0.965995091452832470, -0.966008018265607890, -0.966020942663363250, -0.966033864646066220, -0.966046784213684510, -0.966059701366186130, -0.966072616103538230, +-0.966085528425708830, -0.966098438332665620, -0.966111345824376300, -0.966124250900808780, -0.966137153561930530, -0.966150053807709350, -0.966162951638112940, -0.966175847053109220, +-0.966188740052665860, -0.966201630636750690, -0.966214518805331490, -0.966227404558375860, -0.966240287895851810, -0.966253168817727270, -0.966266047323969590, -0.966278923414546800, +-0.966291797089426590, -0.966304668348576980, -0.966317537191965670, -0.966330403619560800, -0.966343267631329610, -0.966356129227240350, -0.966368988407260710, -0.966381845171358610, +-0.966394699519501850, -0.966407551451658350, -0.966420400967796020, -0.966433248067882670, -0.966446092751886420, -0.966458935019774760, -0.966471774871515700, -0.966484612307077270, +-0.966497447326427280, -0.966510279929533640, -0.966523110116364490, -0.966535937886887410, -0.966548763241070530, -0.966561586178881660, -0.966574406700288820, -0.966587224805259940, +-0.966600040493763140, -0.966612853765766110, -0.966625664621237000, -0.966638473060143940, -0.966651279082454410, -0.966664082688136750, -0.966676883877158890, -0.966689682649488850, +-0.966702479005094540, -0.966715272943944330, -0.966728064466005680, -0.966740853571246840, -0.966753640259635840, -0.966766424531140810, -0.966779206385729670, -0.966791985823370560, +-0.966804762844031380, -0.966817537447680400, -0.966830309634285510, -0.966843079403815200, -0.966855846756236810, -0.966868611691518940, -0.966881374209629390, -0.966894134310536500, +-0.966906891994208540, -0.966919647260613080, -0.966932400109718480, -0.966945150541492880, -0.966957898555904420, -0.966970644152921220, -0.966983387332511430, -0.966996128094643080, +-0.967008866439284520, -0.967021602366403780, -0.967034335875969210, -0.967047066967948620, -0.967059795642310260, -0.967072521899022490, -0.967085245738053430, -0.967097967159371240, +-0.967110686162944380, -0.967123402748740530, -0.967136116916728290, -0.967148828666875680, -0.967161537999150940, -0.967174244913522440, -0.967186949409958310, -0.967199651488426790, +-0.967212351148896140, -0.967225048391334830, -0.967237743215710650, -0.967250435621992200, -0.967263125610147600, -0.967275813180145110, -0.967288498331953180, -0.967301181065540310, +-0.967313861380874160, -0.967326539277923340, -0.967339214756656180, -0.967351887817041070, -0.967364558459046120, -0.967377226682639810, -0.967389892487790500, -0.967402555874466440, +-0.967415216842636210, -0.967427875392267710, -0.967440531523329430, -0.967453185235789940, -0.967465836529617480, -0.967478485404780320, -0.967491131861247240, -0.967503775898986170, +-0.967516417517965580, -0.967529056718154030, -0.967541693499519790, -0.967554327862031220, -0.967566959805656990, -0.967579589330365250, -0.967592216436124590, -0.967604841122903350, +-0.967617463390670230, -0.967630083239393370, -0.967642700669041120, -0.967655315679582180, -0.967667928270985020, -0.967680538443218110, -0.967693146196249800, -0.967705751530048560, +-0.967718354444582870, -0.967730954939821420, -0.967743553015732450, -0.967756148672284660, -0.967768741909446510, -0.967781332727186470, -0.967793921125473130, -0.967806507104275290, +-0.967819090663560870, -0.967831671803298770, -0.967844250523457350, -0.967856826824005420, -0.967869400704911450, -0.967881972166144130, -0.967894541207671710, -0.967907107829462990, +-0.967919672031486320, -0.967932233813710630, -0.967944793176104270, -0.967957350118636040, -0.967969904641274300, -0.967982456743987860, -0.967995006426745520, -0.968007553689515410, +-0.968020098532266450, -0.968032640954967220, -0.968045180957586400, -0.968057718540092590, -0.968070253702454700, -0.968082786444640960, -0.968095316766620310, -0.968107844668361310, +-0.968120370149832770, -0.968132893211003260, -0.968145413851841500, -0.968157932072316260, -0.968170447872396140, -0.968182961252050170, -0.968195472211246580, -0.968207980749954180, +-0.968220486868141990, -0.968232990565778500, -0.968245491842832600, -0.968257990699273100, -0.968270487135068470, -0.968282981150187630, -0.968295472744599260, -0.968307961918272290, +-0.968320448671175390, -0.968332933003277270, -0.968345414914546950, -0.968357894404953010, -0.968370371474464360, -0.968382846123050030, -0.968395318350678380, -0.968407788157318430, +-0.968420255542938980, -0.968432720507508950, -0.968445183050997250, -0.968457643173372460, -0.968470100874603500, -0.968482556154659280, -0.968495009013508710, -0.968507459451120600, +-0.968519907467463750, -0.968532353062507290, -0.968544796236219920, -0.968557236988570440, -0.968569675319528200, -0.968582111229061570, -0.968594544717139570, -0.968606975783731230, +-0.968619404428805450, -0.968631830652331270, -0.968644254454277600, -0.968656675834613120, -0.968669094793306980, -0.968681511330328090, -0.968693925445645370, -0.968706337139227940, +-0.968718746411044500, -0.968731153261064290, -0.968743557689256240, -0.968755959695589470, -0.968768359280032580, -0.968780756442554900, -0.968793151183125150, -0.968805543501712660, +-0.968817933398286260, -0.968830320872815180, -0.968842705925268220, -0.968855088555614420, -0.968867468763822900, -0.968879846549862700, -0.968892221913702830, -0.968904594855312550, +-0.968916965374660650, -0.968929333471716390, -0.968941699146449010, -0.968954062398827200, -0.968966423228820210, -0.968978781636397170, -0.968991137621527110, -0.969003491184179280, +-0.969015842324322920, -0.969028191041926720, -0.969040537336960050, -0.969052881209392040, -0.969065222659191820, -0.969077561686328530, -0.969089898290771410, -0.969102232472489500, +-0.969114564231452040, -0.969126893567628040, -0.969139220480987220, -0.969151544971498020, -0.969163867039129930, -0.969176186683852190, -0.969188503905634050, -0.969200818704444860, +-0.969213131080253310, -0.969225441033028990, -0.969237748562741140, -0.969250053669358790, -0.969262356352851410, -0.969274656613188010, -0.969286954450338080, -0.969299249864270740, +-0.969311542854955350, -0.969323833422361170, -0.969336121566457320, -0.969348407287213050, -0.969360690584597840, -0.969372971458580920, -0.969385249909131550, -0.969397525936219310, +-0.969409799539812990, -0.969422070719882180, -0.969434339476396120, -0.969446605809324290, -0.969458869718635930, -0.969471131204300400, -0.969483390266287050, -0.969495646904565240, +-0.969507901119104450, -0.969520152909873810, -0.969532402276842680, -0.969544649219980630, -0.969556893739256910, -0.969569135834640990, -0.969581375506102460, -0.969593612753610220, +-0.969605847577133970, -0.969618079976643070, -0.969630309952106970, -0.969642537503495160, -0.969654762630776990, -0.969666985333921930, -0.969679205612899330, -0.969691423467679000, +-0.969703638898229860, -0.969715851904521590, -0.969728062486523770, -0.969740270644205760, -0.969752476377537030, -0.969764679686487390, -0.969776880571025850, -0.969789079031122100, +-0.969801275066745630, -0.969813468677865890, -0.969825659864452570, -0.969837848626475150, -0.969850034963902980, -0.969862218876705870, -0.969874400364853060, -0.969886579428314580, +-0.969898756067059330, -0.969910930281057350, -0.969923102070277880, -0.969935271434690720, -0.969947438374265670, -0.969959602888971760, -0.969971764978778790, -0.969983924643656460, +-0.969996081883574330, -0.970008236698501890, -0.970020389088408930, -0.970032539053265030, -0.970044686593039770, -0.970056831707702850, -0.970068974397223950, -0.970081114661572430, +-0.970093252500718210, -0.970105387914630750, -0.970117520903279850, -0.970129651466635210, -0.970141779604666520, -0.970153905317343360, -0.970166028604635300, -0.970178149466512150, +-0.970190267902943710, -0.970202383913899570, -0.970214497499349400, -0.970226608659263130, -0.970238717393610230, -0.970250823702360820, -0.970262927585484050, -0.970275029042950040, +-0.970287128074728500, -0.970299224680789000, -0.970311318861101560, -0.970323410615635980, -0.970335499944361630, -0.970347586847248640, -0.970359671324266590, -0.970371753375385390, +-0.970383833000574740, -0.970395910199804650, -0.970407984973044700, -0.970420057320264710, -0.970432127241434910, -0.970444194736524550, -0.970456259805503650, -0.970468322448342140, +-0.970480382665009910, -0.970492440455476670, -0.970504495819712430, -0.970516548757686890, -0.970528599269369850, -0.970540647354731440, -0.970552693013741360, -0.970564736246369520, +-0.970576777052585830, -0.970588815432360200, -0.970600851385662540, -0.970612884912462780, -0.970624916012731040, -0.970636944686436800, -0.970648970933550180, -0.970660994754041110, +-0.970673016147879490, -0.970685035115035680, -0.970697051655479040, -0.970709065769179700, -0.970721077456107690, -0.970733086716233040, -0.970745093549525650, -0.970757097955955550, +-0.970769099935492760, -0.970781099488107090, -0.970793096613768780, -0.970805091312447850, -0.970817083584114120, -0.970829073428737590, -0.970841060846288300, -0.970853045836736480, +-0.970865028400052180, -0.970877008536205180, -0.970888986245165620, -0.970900961526903530, -0.970912934381389150, -0.970924904808592390, -0.970936872808483290, -0.970948838381032080, +-0.970960801526208780, -0.970972762243983430, -0.970984720534326500, -0.970996676397207440, -0.971008629832596730, -0.971020580840464500, -0.971032529420780670, -0.971044475573515700, +-0.971056419298639620, -0.971068360596122340, -0.971080299465934100, -0.971092235908045160, -0.971104169922425650, -0.971116101509045700, -0.971128030667875450, -0.971139957398885150, +-0.971151881702045030, -0.971163803577325350, -0.971175723024695900, -0.971187640044127280, -0.971199554635589490, -0.971211466799052790, -0.971223376534487430, -0.971235283841863860, +-0.971247188721151790, -0.971259091172321900, -0.971270991195344210, -0.971282888790188980, -0.971294783956826560, -0.971306676695227190, -0.971318567005361120, -0.971330454887198710, +-0.971342340340710320, -0.971354223365865850, -0.971366103962635900, -0.971377982130990580, -0.971389857870900380, -0.971401731182335530, -0.971413602065266500, -0.971425470519663330, +-0.971437336545496470, -0.971449200142736170, -0.971461061311353010, -0.971472920051317130, -0.971484776362598890, -0.971496630245168860, -0.971508481698997170, -0.971520330724054190, +-0.971532177320310720, -0.971544021487736550, -0.971555863226302390, -0.971567702535978460, -0.971579539416735360, -0.971591373868543660, -0.971603205891373170, -0.971615035485194790, +-0.971626862649978770, -0.971638687385695590, -0.971650509692315700, -0.971662329569809580, -0.971674147018147580, -0.971685962037300180, -0.971697774627237940, -0.971709584787931460, +-0.971721392519350860, -0.971733197821466720, -0.971745000694249630, -0.971756801137669930, -0.971768599151698330, -0.971780394736305400, -0.971792187891461270, -0.971803978617136740, +-0.971815766913302180, -0.971827552779928270, -0.971839336216985370, -0.971851117224444280, -0.971862895802275250, -0.971874671950449080, -0.971886445668936450, -0.971898216957707390, +-0.971909985816732940, -0.971921752245983430, -0.971933516245429560, -0.971945277815041810, -0.971957036954791190, -0.971968793664647720, -0.971980547944582330, -0.971992299794565470, +-0.972004049214567960, -0.972015796204560250, -0.972027540764513140, -0.972039282894397120, -0.972051022594182860, -0.972062759863841270, -0.972074494703342620, -0.972086227112657690, +-0.972097957091757170, -0.972109684640611870, -0.972121409759192260, -0.972133132447469350, -0.972144852705413400, -0.972156570532995310, -0.972168285930185780, -0.972179998896955610, +-0.972191709433275380, -0.972203417539115880, -0.972215123214447920, -0.972226826459242080, -0.972238527273469160, -0.972250225657100180, -0.972261921610105380, -0.972273615132455800, +-0.972285306224122130, -0.972296994885075260, -0.972308681115286120, -0.972320364914725070, -0.972332046283363010, -0.972343725221170960, -0.972355401728119520, -0.972367075804179580, +-0.972378747449321960, -0.972390416663517550, -0.972402083446736950, -0.972413747798951290, -0.972425409720131360, -0.972437069210247750, -0.972448726269271480, -0.972460380897173350, +-0.972472033093924270, -0.972483682859495160, -0.972495330193857030, -0.972506975096980360, -0.972518617568836290, -0.972530257609395600, -0.972541895218629330, -0.972553530396508270, +-0.972565163143003450, -0.972576793458085680, -0.972588421341725850, -0.972600046793895330, -0.972611669814564370, -0.972623290403704320, -0.972634908561285980, -0.972646524287280380, +-0.972658137581658530, -0.972669748444391470, -0.972681356875449880, -0.972692962874804780, -0.972704566442427420, -0.972716167578288600, -0.972727766282359350, -0.972739362554610690, +-0.972750956395013630, -0.972762547803539210, -0.972774136780158560, -0.972785723324842370, -0.972797307437561880, -0.972808889118288110, -0.972820468366992210, -0.972832045183645080, +-0.972843619568217970, -0.972855191520681670, -0.972866761041007440, -0.972878328129166300, -0.972889892785129270, -0.972901455008867490, -0.972913014800352190, -0.972924572159554300, +-0.972936127086444950, -0.972947679580995260, -0.972959229643176600, -0.972970777272959660, -0.972982322470315800, -0.972993865235216140, -0.973005405567631820, -0.973016943467534200, +-0.973028478934893970, -0.973040011969682590, -0.973051542571871210, -0.973063070741430950, -0.973074596478332940, -0.973086119782548440, -0.973097640654048690, -0.973109159092804820, +-0.973120675098788080, -0.973132188671969930, -0.973143699812320960, -0.973155208519812850, -0.973166714794416630, -0.973178218636103650, -0.973189720044845160, -0.973201219020612520, +-0.973212715563376740, -0.973224209673109080, -0.973235701349780880, -0.973247190593363510, -0.973258677403828100, -0.973270161781146000, -0.973281643725288470, -0.973293123236226850, +-0.973304600313932620, -0.973316074958376800, -0.973327547169530630, -0.973339016947365690, -0.973350484291853220, -0.973361949202964480, -0.973373411680671040, -0.973384871724943920, +-0.973396329335754600, -0.973407784513074530, -0.973419237256874960, -0.973430687567127250, -0.973442135443802870, -0.973453580886873170, -0.973465023896309510, -0.973476464472083470, +-0.973487902614166070, -0.973499338322528880, -0.973510771597143390, -0.973522202437980930, -0.973533630845012990, -0.973545056818211130, -0.973556480357546490, -0.973567901462990660, +-0.973579320134515090, -0.973590736372091150, -0.973602150175690410, -0.973613561545284220, -0.973624970480844290, -0.973636376982341730, -0.973647781049748360, -0.973659182683035750, +-0.973670581882174920, -0.973681978647137680, -0.973693372977895490, -0.973704764874419810, -0.973716154336682460, -0.973727541364654560, -0.973738925958307800, -0.973750308117613650, +-0.973761687842543800, -0.973773065133069720, -0.973784439989162980, -0.973795812410795160, -0.973807182397937730, -0.973818549950562380, -0.973829915068640920, -0.973841277752144350, +-0.973852638001044710, -0.973863995815313350, -0.973875351194922080, -0.973886704139842460, -0.973898054650046310, -0.973909402725504750, -0.973920748366189690, -0.973932091572072720, +-0.973943432343125530, -0.973954770679319790, -0.973966106580627210, -0.973977440047019250, -0.973988771078467710, -0.974000099674944500, -0.974011425836420750, -0.974022749562868500, +-0.974034070854259300, -0.974045389710565090, -0.974056706131757210, -0.974068020117807910, -0.974079331668688320, -0.974090640784370350, -0.974101947464825810, -0.974113251710026380, +-0.974124553519943870, -0.974135852894549960, -0.974147149833816450, -0.974158444337715030, -0.974169736406217620, -0.974181026039295790, -0.974192313236921350, -0.974203597999066080, +-0.974214880325701920, -0.974226160216800530, -0.974237437672333950, -0.974248712692273530, -0.974259985276591300, -0.974271255425259160, -0.974282523138248810, -0.974293788415532270, +-0.974305051257081220, -0.974316311662867470, -0.974327569632863040, -0.974338825167039620, -0.974350078265369350, -0.974361328927823680, -0.974372577154374750, -0.974383822944994260, +-0.974395066299654330, -0.974406307218326880, -0.974417545700983490, -0.974428781747596170, -0.974440015358136960, -0.974451246532577750, -0.974462475270890360, -0.974473701573046800, +-0.974484925439018990, -0.974496146868778830, -0.974507365862298360, -0.974518582419549580, -0.974529796540504200, -0.974541008225134340, -0.974552217473412030, -0.974563424285309070, +-0.974574628660797580, -0.974585830599849710, -0.974597030102437030, -0.974608227168531900, -0.974619421798106120, -0.974630613991131820, -0.974641803747580910, -0.974652991067425530, +-0.974664175950637700, -0.974675358397189440, -0.974686538407052880, -0.974697715980199940, -0.974708891116602530, -0.974720063816233000, -0.974731234079063370, -0.974742401905065560, +-0.974753567294211920, -0.974764730246474250, -0.974775890761824690, -0.974787048840235480, -0.974798204481678530, -0.974809357686126200, -0.974820508453550390, -0.974831656783923250, +-0.974842802677217120, -0.974853946133404040, -0.974865087152456010, -0.974876225734345180, -0.974887361879043900, -0.974898495586524080, -0.974909626856758080, -0.974920755689718250, +-0.974931882085376290, -0.974943006043704650, -0.974954127564675480, -0.974965246648261010, -0.974976363294433380, -0.974987477503164830, -0.974998589274427620, -0.975009698608193980, +-0.975020805504436040, -0.975031909963126280, -0.975043011984236600, -0.975054111567739360, -0.975065208713606800, -0.975076303421811290, -0.975087395692325170, -0.975098485525120460, +-0.975109572920169420, -0.975120657877444510, -0.975131740396917860, -0.975142820478561930, -0.975153898122348980, -0.975164973328251250, -0.975176046096241090, -0.975187116426290860, +-0.975198184318373020, -0.975209249772459490, -0.975220312788522840, -0.975231373366535430, -0.975242431506469500, -0.975253487208297630, -0.975264540471992180, -0.975275591297525170, +-0.975286639684869170, -0.975297685633996550, -0.975308729144879760, -0.975319770217491170, -0.975330808851803120, -0.975341845047787980, -0.975352878805418320, -0.975363910124666720, +-0.975374939005504980, -0.975385965447906010, -0.975396989451842170, -0.975408011017285690, -0.975419030144209280, -0.975430046832585500, -0.975441061082386480, -0.975452072893584710, +-0.975463082266152750, -0.975474089200063070, -0.975485093695288240, -0.975496095751800630, -0.975507095369572810, -0.975518092548577240, -0.975529087288786620, -0.975540079590173080, +-0.975551069452709420, -0.975562056876367990, -0.975573041861121480, -0.975584024406942360, -0.975595004513803320, -0.975605982181676600, -0.975616957410535000, -0.975627930200350880, +-0.975638900551097030, -0.975649868462745930, -0.975660833935270030, -0.975671796968642150, -0.975682757562834850, -0.975693715717820490, -0.975704671433572200, -0.975715624710061900, +-0.975726575547262610, -0.975737523945146900, -0.975748469903687350, -0.975759413422856770, -0.975770354502627500, -0.975781293142972350, -0.975792229343864000, -0.975803163105275040, +-0.975814094427178260, -0.975825023309546120, -0.975835949752351440, -0.975846873755567000, -0.975857795319165280, -0.975868714443119290, -0.975879631127401280, -0.975890545371984160, +-0.975901457176840850, -0.975912366541943690, -0.975923273467265710, -0.975934177952779810, -0.975945079998458140, -0.975955979604273830, -0.975966876770199670, -0.975977771496208120, +-0.975988663782272340, -0.975999553628364770, -0.976010441034458330, -0.976021326000525820, -0.976032208526540160, -0.976043088612473800, -0.976053966258299770, -0.976064841463990750, +-0.976075714229519660, -0.976086584554859300, -0.976097452439982690, -0.976108317884862190, -0.976119180889470920, -0.976130041453781680, -0.976140899577767400, -0.976151755261400860, +-0.976162608504654860, -0.976173459307502430, -0.976184307669916260, -0.976195153591869590, -0.976205997073334770, -0.976216838114285060, -0.976227676714693240, -0.976238512874532120, +-0.976249346593774820, -0.976260177872394270, -0.976271006710363150, -0.976281833107654480, -0.976292657064241290, -0.976303478580096360, -0.976314297655192730, -0.976325114289503420, +-0.976335928483001330, -0.976346740235659370, -0.976357549547450580, -0.976368356418348180, -0.976379160848324660, -0.976389962837353130, -0.976400762385406850, -0.976411559492458610, +-0.976422354158481550, -0.976433146383448580, -0.976443936167332600, -0.976454723510106870, -0.976465508411744400, -0.976476290872217990, -0.976487070891501000, -0.976497848469566220, +-0.976508623606386910, -0.976519396301935960, -0.976530166556186740, -0.976540934369111930, -0.976551699740684790, -0.976562462670878430, -0.976573223159665880, -0.976583981207020280, +-0.976594736812914870, -0.976605489977322440, -0.976616240700216350, -0.976626988981569630, -0.976637734821355410, -0.976648478219546810, -0.976659219176117090, -0.976669957691039370, +-0.976680693764286680, -0.976691427395832480, -0.976702158585649460, -0.976712887333711090, -0.976723613639990500, -0.976734337504460930, -0.976745058927095400, -0.976755777907867500, +-0.976766494446749900, -0.976777208543716080, -0.976787920198739280, -0.976798629411792740, -0.976809336182849490, -0.976820040511882980, -0.976830742398866360, -0.976841441843772860, +-0.976852138846575960, -0.976862833407248550, -0.976873525525764010, -0.976884215202095670, -0.976894902436216790, -0.976905587228100720, -0.976916269577720820, -0.976926949485049990, +-0.976937626950061920, -0.976948301972729640, -0.976958974553026720, -0.976969644690926290, -0.976980312386401820, -0.976990977639426550, -0.977001640449973730, -0.977012300818016930, +-0.977022958743529510, -0.977033614226484600, -0.977044267266855560, -0.977054917864615850, -0.977065566019738930, -0.977076211732198160, -0.977086855001966790, -0.977097495829018170, +-0.977108134213325870, -0.977118770154863260, -0.977129403653603680, -0.977140034709520710, -0.977150663322587490, -0.977161289492777700, -0.977171913220064690, -0.977182534504422050, +-0.977193153345822910, -0.977203769744240840, -0.977214383699649410, -0.977224995212022000, -0.977235604281332270, -0.977246210907553370, -0.977256815090658870, -0.977267416830622460, +-0.977278016127417380, -0.977288612981017320, -0.977299207391395750, -0.977309799358526130, -0.977320388882382040, -0.977330975962936940, -0.977341560600164640, -0.977352142794038260, +-0.977362722544531380, -0.977373299851617800, -0.977383874715270990, -0.977394447135464530, -0.977405017112172090, -0.977415584645366930, -0.977426149735022730, -0.977436712381113180, +-0.977447272583611970, -0.977457830342492450, -0.977468385657728420, -0.977478938529293460, -0.977489488957161030, -0.977500036941305160, -0.977510582481698980, -0.977521125578316390, +-0.977531666231130970, -0.977542204440116300, -0.977552740205246180, -0.977563273526494410, -0.977573804403834230, -0.977584332837239560, -0.977594858826684070, -0.977605382372141450, +-0.977615903473585400, -0.977626422130989490, -0.977636938344327630, -0.977647452113573400, -0.977657963438700480, -0.977668472319682900, -0.977678978756493900, -0.977689482749107500, +-0.977699984297497380, -0.977710483401637240, -0.977720980061501210, -0.977731474277062420, -0.977741966048295000, -0.977752455375172640, -0.977762942257669240, -0.977773426695758400, +-0.977783908689414010, -0.977794388238609760, -0.977804865343319670, -0.977815340003517330, -0.977825812219176860, -0.977836281990271730, -0.977846749316775840, -0.977857214198663010, +-0.977867676635907230, -0.977878136628482440, -0.977888594176362090, -0.977899049279520320, -0.977909501937930910, -0.977919952151567680, -0.977930399920404650, -0.977940845244415600, +-0.977951288123574350, -0.977961728557855010, -0.977972166547231290, -0.977982602091677310, -0.977993035191166650, -0.978003465845673440, -0.978013894055171580, -0.978024319819634890, +-0.978034743139037490, -0.978045164013353400, -0.978055582442556190, -0.978065998426620010, -0.978076411965518870, -0.978086823059226670, -0.978097231707717450, -0.978107637910965220, +-0.978118041668943780, -0.978128442981627270, -0.978138841848989800, -0.978149238271005080, -0.978159632247647350, -0.978170023778890400, -0.978180412864708470, -0.978190799505075480, +-0.978201183699965670, -0.978211565449352730, -0.978221944753210890, -0.978232321611514190, -0.978242696024236640, -0.978253067991352370, -0.978263437512835400, -0.978273804588659870, +-0.978284169218799900, -0.978294531403229640, -0.978304891141922760, -0.978315248434853850, -0.978325603281996690, -0.978335955683325540, -0.978346305638814530, -0.978356653148437890, +-0.978366998212169440, -0.978377340829983510, -0.978387681001854250, -0.978398018727755780, -0.978408354007662240, -0.978418686841547870, -0.978429017229386800, -0.978439345171153050, +-0.978449670666821090, -0.978459993716365050, -0.978470314319758840, -0.978480632476976920, -0.978490948187993310, -0.978501261452782380, -0.978511572271318570, -0.978521880643575480, +-0.978532186569527780, -0.978542490049149620, -0.978552791082415220, -0.978563089669298840, -0.978573385809774820, -0.978583679503817190, -0.978593970751400420, -0.978604259552498750, +-0.978614545907086630, -0.978624829815137880, -0.978635111276627170, -0.978645390291528640, -0.978655666859816530, -0.978665940981465420, -0.978676212656449550, -0.978686481884742940, +-0.978696748666320170, -0.978707013001155480, -0.978717274889223330, -0.978727534330497970, -0.978737791324953750, -0.978748045872565030, -0.978758297973306270, -0.978768547627151930, +-0.978778794834076040, -0.978789039594053060, -0.978799281907057670, -0.978809521773063910, -0.978819759192046450, -0.978829994163979640, -0.978840226688837860, -0.978850456766595320, +-0.978860684397226730, -0.978870909580706440, -0.978881132317008910, -0.978891352606108490, -0.978901570447979650, -0.978911785842596970, -0.978921998789935020, -0.978932209289967830, +-0.978942417342670070, -0.978952622948016330, -0.978962826105981070, -0.978973026816538750, -0.978983225079663950, -0.978993420895331030, -0.979003614263514450, -0.979013805184188900, +-0.979023993657328730, -0.979034179682908730, -0.979044363260903160, -0.979054544391286700, -0.979064723074033920, -0.979074899309119400, -0.979085073096517710, -0.979095244436203220, +-0.979105413328150490, -0.979115579772334320, -0.979125743768729300, -0.979135905317309980, -0.979146064418050740, -0.979156221070926260, -0.979166375275911330, -0.979176527032980410, +-0.979186676342108210, -0.979196823203269400, -0.979206967616438440, -0.979217109581590030, -0.979227249098698850, -0.979237386167739810, -0.979247520788687040, -0.979257652961515570, +-0.979267782686199850, -0.979277909962714690, -0.979288034791034880, -0.979298157171135000, -0.979308277102989620, -0.979318394586573550, -0.979328509621861460, -0.979338622208828170, +-0.979348732347448350, -0.979358840037696580, -0.979368945279547760, -0.979379048072976600, -0.979389148417957990, -0.979399246314466290, -0.979409341762476520, -0.979419434761963360, +-0.979429525312901620, -0.979439613415266090, -0.979449699069031790, -0.979459782274172960, -0.979469863030664630, -0.979479941338481710, -0.979490017197598980, -0.979500090607991150, +-0.979510161569633110, -0.979520230082499670, -0.979530296146565620, -0.979540359761805980, -0.979550420928195330, -0.979560479645708580, -0.979570535914320750, -0.979580589734006410, +-0.979590641104740700, -0.979600690026498520, -0.979610736499254450, -0.979620780522983630, -0.979630822097660730, -0.979640861223260880, -0.979650897899758790, -0.979660932127129460, +-0.979670963905347910, -0.979680993234388840, -0.979691020114227260, -0.979701044544838420, -0.979711066526196770, -0.979721086058277350, -0.979731103141055270, -0.979741117774505450, +-0.979751129958603030, -0.979761139693322680, -0.979771146978639320, -0.979781151814528180, -0.979791154200964190, -0.979801154137922240, -0.979811151625377460, -0.979821146663304780, +-0.979831139251679200, -0.979841129390475850, -0.979851117079669760, -0.979861102319235730, -0.979871085109149000, -0.979881065449384470, -0.979891043339917390, -0.979901018780722670, +-0.979910991771775540, -0.979920962313050700, -0.979930930404523610, -0.979940896046169070, -0.979950859237962320, -0.979960819979878380, -0.979970778271892500, -0.979980734113979570, +-0.979990687506114840, -0.980000638448273560, -0.980010586940430530, -0.980020532982561090, -0.980030476574640260, -0.980040417716643190, -0.980050356408545100, -0.980060292650321350, +-0.980070226441946630, -0.980080157783396410, -0.980090086674645810, -0.980100013115669850, -0.980109937106444010, -0.980119858646943290, -0.980129777737142830, -0.980139694377018090, +-0.980149608566544210, -0.980159520305696090, -0.980169429594449190, -0.980179336432778770, -0.980189240820659950, -0.980199142758068080, -0.980209042244978400, -0.980218939281366050, +-0.980228833867206380, -0.980238726002474530, -0.980248615687145940, -0.980258502921195760, -0.980268387704599450, -0.980278270037332030, -0.980288149919368970, -0.980298027350685610, +-0.980307902331257200, -0.980317774861058980, -0.980327644940066300, -0.980337512568254520, -0.980347377745598990, -0.980357240472075060, -0.980367100747657980, -0.980376958572323100, +-0.980386813946045880, -0.980396666868801560, -0.980406517340565610, -0.980416365361313270, -0.980426210931020110, -0.980436054049661390, -0.980445894717212550, -0.980455732933649180, +-0.980465568698946300, -0.980475402013079480, -0.980485232876024180, -0.980495061287755760, -0.980504887248249690, -0.980514710757481530, -0.980524531815426540, -0.980534350422060160, +-0.980544166577357880, -0.980553980281295150, -0.980563791533847540, -0.980573600334990410, -0.980583406684699340, -0.980593210582949680, -0.980603012029717220, -0.980612811024977100, +-0.980622607568704900, -0.980632401660876170, -0.980642193301466400, -0.980651982490451160, -0.980661769227806230, -0.980671553513506660, -0.980681335347528100, -0.980691114729846270, +-0.980700891660436720, -0.980710666139274930, -0.980720438166336360, -0.980730207741596800, -0.980739974865031730, -0.980749739536616820, -0.980759501756327420, -0.980769261524139350, +-0.980779018840028050, -0.980788773703969220, -0.980798526115938430, -0.980808276075911480, -0.980818023583863720, -0.980827768639770840, -0.980837511243608630, -0.980847251395352560, +-0.980856989094978430, -0.980866724342461800, -0.980876457137778380, -0.980886187480903730, -0.980895915371813640, -0.980905640810484040, -0.980915363796890040, -0.980925084331007670, +-0.980934802412812610, -0.980944518042280560, -0.980954231219387410, -0.980963941944108410, -0.980973650216419580, -0.980983356036296720, -0.980993059403715400, -0.981002760318651410, +-0.981012458781080570, -0.981022154790978540, -0.981031848348321130, -0.981041539453084140, -0.981051228105243480, -0.981060914304774490, -0.981070598051653310, -0.981080279345855620, +-0.981089958187357110, -0.981099634576133920, -0.981109308512161600, -0.981118979995415970, -0.981128649025872820, -0.981138315603508170, -0.981147979728297590, -0.981157641400217110, +-0.981167300619242510, -0.981176957385349710, -0.981186611698514510, -0.981196263558712920, -0.981205912965920520, -0.981215559920113330, -0.981225204421267260, -0.981234846469358210, +-0.981244486064361990, -0.981254123206254710, -0.981263757895011970, -0.981273390130609880, -0.981283019913024250, -0.981292647242231090, -0.981302272118206310, -0.981311894540925820, +-0.981321514510365640, -0.981331132026501680, -0.981340747089310070, -0.981350359698766380, -0.981359969854846860, -0.981369577557527300, -0.981379182806783930, -0.981388785602592460, +-0.981398385944929340, -0.981407983833770040, -0.981417579269090680, -0.981427172250867510, -0.981436762779076320, -0.981446350853693250, -0.981455936474694310, -0.981465519642055530, +-0.981475100355753030, -0.981484678615762610, -0.981494254422060840, -0.981503827774623080, -0.981513398673425910, -0.981522967118445220, -0.981532533109657050, -0.981542096647037730, +-0.981551657730562970, -0.981561216360209210, -0.981570772535952260, -0.981580326257768480, -0.981589877525633760, -0.981599426339524460, -0.981608972699416490, -0.981618516605286210, +-0.981628058057109620, -0.981637597054862980, -0.981647133598522180, -0.981656667688063590, -0.981666199323463330, -0.981675728504697530, -0.981685255231742440, -0.981694779504574400, +-0.981704301323169220, -0.981713820687503350, -0.981723337597552810, -0.981732852053294080, -0.981742364054703050, -0.981751873601756200, -0.981761380694429750, -0.981770885332699740, +-0.981780387516542730, -0.981789887245934520, -0.981799384520851580, -0.981808879341270260, -0.981818371707166680, -0.981827861618517210, -0.981837349075298290, -0.981846834077485740, +-0.981856316625056120, -0.981865796717985790, -0.981875274356250880, -0.981884749539827850, -0.981894222268692940, -0.981903692542822500, -0.981913160362192780, -0.981922625726780240, +-0.981932088636561120, -0.981941549091511660, -0.981951007091608430, -0.981960462636827680, -0.981969915727145760, -0.981979366362539130, -0.981988814542984030, -0.981998260268456820, +-0.982007703538933960, -0.982017144354391910, -0.982026582714806920, -0.982036018620155550, -0.982045452070414050, -0.982054883065558990, -0.982064311605566620, -0.982073737690413730, +-0.982083161320076340, -0.982092582494531020, -0.982102001213754240, -0.982111417477722460, -0.982120831286412370, -0.982130242639799870, -0.982139651537861870, -0.982149057980574720, +-0.982158461967915010, -0.982167863499859070, -0.982177262576383490, -0.982186659197464730, -0.982196053363079360, -0.982205445073203840, -0.982214834327814870, -0.982224221126888560, +-0.982233605470401840, -0.982242987358331040, -0.982252366790652750, -0.982261743767343650, -0.982271118288380210, -0.982280490353738880, -0.982289859963396350, -0.982299227117329200, +-0.982308591815513890, -0.982317954057927100, -0.982327313844545520, -0.982336671175345620, -0.982346026050303970, -0.982355378469397470, -0.982364728432602360, -0.982374075939895450, +-0.982383420991253420, -0.982392763586652730, -0.982402103726070170, -0.982411441409482440, -0.982420776636866000, -0.982430109408197640, -0.982439439723454040, -0.982448767582611790, +-0.982458092985647570, -0.982467415932538170, -0.982476736423260280, -0.982486054457790470, -0.982495370036105650, -0.982504683158182400, -0.982513993823997290, -0.982523302033527330, +-0.982532607786749000, -0.982541911083639200, -0.982551211924174830, -0.982560510308332140, -0.982569806236088250, -0.982579099707419860, -0.982588390722303750, -0.982597679280716620, +-0.982606965382635260, -0.982616249028036570, -0.982625530216897140, -0.982634808949193970, -0.982644085224903980, -0.982653359044003530, -0.982662630406469730, -0.982671899312279270, +-0.982681165761409180, -0.982690429753836250, -0.982699691289537160, -0.982708950368488820, -0.982718206990668030, -0.982727461156051810, -0.982736712864616950, -0.982745962116340240, +-0.982755208911198610, -0.982764453249169060, -0.982773695130228280, -0.982782934554353500, -0.982792171521521210, -0.982801406031708400, -0.982810638084892220, -0.982819867681049340, +-0.982829094820156790, -0.982838319502191690, -0.982847541727130620, -0.982856761494950710, -0.982865978805628980, -0.982875193659142220, -0.982884406055467450, -0.982893615994581690, +-0.982902823476461850, -0.982912028501085060, -0.982921231068428320, -0.982930431178468230, -0.982939628831182240, -0.982948824026547040, -0.982958016764539870, -0.982967207045137630, +-0.982976394868317450, -0.982985580234056240, -0.982994763142331030, -0.983003943593118930, -0.983013121586396980, -0.983022297122142170, -0.983031470200331660, -0.983040640820942450, +-0.983049808983951670, -0.983058974689336450, -0.983068137937073700, -0.983077298727140670, -0.983086457059514360, -0.983095612934171800, -0.983104766351090340, -0.983113917310247000, +-0.983123065811618790, -0.983132211855182960, -0.983141355440916520, -0.983150496568796720, -0.983159635238800680, -0.983168771450905530, -0.983177905205088410, -0.983187036501326660, +-0.983196165339597190, -0.983205291719877580, -0.983214415642144510, -0.983223537106375440, -0.983232656112547510, -0.983241772660637840, -0.983250886750624000, -0.983259998382482790, +-0.983269107556191570, -0.983278214271727570, -0.983287318529068030, -0.983296420328190200, -0.983305519669071430, -0.983314616551688720, -0.983323710976019450, -0.983332802942041060, +-0.983341892449730690, -0.983350979499065470, -0.983360064090022750, -0.983369146222579980, -0.983378225896714310, -0.983387303112403190, -0.983396377869623640, -0.983405450168353120, +-0.983414520008569100, -0.983423587390248710, -0.983432652313369290, -0.983441714777908320, -0.983450774783843130, -0.983459832331150860, -0.983468887419809090, -0.983477940049795270, +-0.983486990221086430, -0.983496037933660030, -0.983505083187493630, -0.983514125982564490, -0.983523166318850060, -0.983532204196327810, -0.983541239614974970, -0.983550272574769010, +-0.983559303075687290, -0.983568331117707470, -0.983577356700806700, -0.983586379824962550, -0.983595400490152480, -0.983604418696353950, -0.983613434443544430, -0.983622447731701270, +-0.983631458560801920, -0.983640466930823960, -0.983649472841744750, -0.983658476293541970, -0.983667477286193080, -0.983676475819675430, -0.983685471893966490, -0.983694465509043940, +-0.983703456664885230, -0.983712445361467850, -0.983721431598769350, -0.983730415376767310, -0.983739396695439190, -0.983748375554762690, -0.983757351954715140, -0.983766325895274240, +-0.983775297376417560, -0.983784266398122550, -0.983793232960366910, -0.983802197063128330, -0.983811158706384140, -0.983820117890112030, -0.983829074614289590, -0.983838028878894600, +-0.983846980683904420, -0.983855930029296720, -0.983864876915049310, -0.983873821341139650, -0.983882763307545540, -0.983891702814244540, -0.983900639861214230, -0.983909574448432300, +-0.983918506575876430, -0.983927436243524300, -0.983936363451353710, -0.983945288199342020, -0.983954210487467230, -0.983963130315706810, -0.983972047684038560, -0.983980962592440280, +-0.983989875040889530, -0.983998785029364110, -0.984007692557841710, -0.984016597626300120, -0.984025500234717130, -0.984034400383070220, -0.984043298071337390, -0.984052193299496230, +-0.984061086067524630, -0.984069976375400390, -0.984078864223101310, -0.984087749610604860, -0.984096632537889040, -0.984105513004931760, -0.984114391011710610, -0.984123266558203480, +-0.984132139644388170, -0.984141010270242590, -0.984149878435744420, -0.984158744140871680, -0.984167607385601940, -0.984176468169913220, -0.984185326493783320, -0.984194182357190140, +-0.984203035760111480, -0.984211886702525350, -0.984220735184409330, -0.984229581205741550, -0.984238424766499810, -0.984247265866661890, -0.984256104506205930, -0.984264940685109720, +-0.984273774403351060, -0.984282605660908080, -0.984291434457758680, -0.984300260793880550, -0.984309084669251710, -0.984317906083850170, -0.984326725037653950, -0.984335541530640850, +-0.984344355562789100, -0.984353167134076280, -0.984361976244480520, -0.984370782893979830, -0.984379587082552240, -0.984388388810175540, -0.984397188076827970, -0.984405984882487430, +-0.984414779227131940, -0.984423571110739530, -0.984432360533288310, -0.984441147494755970, -0.984449931995120870, -0.984458714034360920, -0.984467493612454110, -0.984476270729378710, +-0.984485045385112610, -0.984493817579633830, -0.984502587312920510, -0.984511354584950650, -0.984520119395702500, -0.984528881745153960, -0.984537641633283280, -0.984546399060068580, +-0.984555154025487770, -0.984563906529519190, -0.984572656572140770, -0.984581404153330730, -0.984590149273067090, -0.984598891931328210, -0.984607632128091990, -0.984616369863336890, +-0.984625105137040710, -0.984633837949181690, -0.984642568299738170, -0.984651296188688190, -0.984660021616009960, -0.984668744581681740, -0.984677465085681550, -0.984686183127987840, +-0.984694898708578740, -0.984703611827432160, -0.984712322484526670, -0.984721030679840400, -0.984729736413351490, -0.984738439685038270, -0.984747140494878990, -0.984755838842851780, +-0.984764534728935100, -0.984773228153106970, -0.984781919115345740, -0.984790607615629750, -0.984799293653937260, -0.984807977230246490, -0.984816658344535800, -0.984825336996783650, +-0.984834013186967950, -0.984842686915067270, -0.984851358181059840, -0.984860026984924030, -0.984868693326638070, -0.984877357206180640, -0.984886018623529650, -0.984894677578663560, +-0.984903334071560830, -0.984911988102199710, -0.984920639670558650, -0.984929288776616010, -0.984937935420350130, -0.984946579601739480, -0.984955221320762300, -0.984963860577397270, +-0.984972497371622400, -0.984981131703416280, -0.984989763572757360, -0.984998392979623990, -0.985007019923994750, -0.985015644405847880, -0.985024266425161940, -0.985032885981915300, +-0.985041503076086400, -0.985050117707653830, -0.985058729876595930, -0.985067339582891170, -0.985075946826518000, -0.985084551607455120, -0.985093153925680860, -0.985101753781173710, +-0.985110351173912100, -0.985118946103874630, -0.985127538571039740, -0.985136128575386020, -0.985144716116892250, -0.985153301195536350, -0.985161883811297320, -0.985170463964153530, +-0.985179041654083650, -0.985187616881066150, -0.985196189645079600, -0.985204759946102570, -0.985213327784113630, -0.985221893159091480, -0.985230456071014450, -0.985239016519861340, +-0.985247574505610620, -0.985256130028241080, -0.985264683087731190, -0.985273233684059610, -0.985281781817204940, -0.985290327487145730, -0.985298870693860800, -0.985307411437328580, +-0.985315949717527890, -0.985324485534437300, -0.985333018888035480, -0.985341549778301130, -0.985350078205213140, -0.985358604168749760, -0.985367127668889790, -0.985375648705612120, +-0.985384167278895220, -0.985392683388717990, -0.985401197035059130, -0.985409708217897200, -0.985418216937210880, -0.985426723192979080, -0.985435226985180490, -0.985443728313793900, +-0.985452227178797880, -0.985460723580171340, -0.985469217517892960, -0.985477708991941650, -0.985486198002296090, -0.985494684548934960, -0.985503168631837070, -0.985511650250981310, +-0.985520129406346370, -0.985528606097911260, -0.985537080325654460, -0.985545552089555080, -0.985554021389591690, -0.985562488225743330, -0.985570952597988660, -0.985579414506306710, +-0.985587873950676150, -0.985596330931075900, -0.985604785447484870, -0.985613237499882060, -0.985621687088245930, -0.985630134212555630, -0.985638578872790050, -0.985647021068927880, +-0.985655460800948240, -0.985663898068830150, -0.985672332872552070, -0.985680765212093250, -0.985689195087432470, -0.985697622498548640, -0.985706047445420790, -0.985714469928027910, +-0.985722889946348710, -0.985731307500362420, -0.985739722590047940, -0.985748135215384070, -0.985756545376349710, -0.985764953072924110, -0.985773358305086170, -0.985781761072814790, +-0.985790161376089100, -0.985798559214887900, -0.985806954589190320, -0.985815347498975260, -0.985823737944221960, -0.985832125924909210, -0.985840511441016250, -0.985848894492521890, +-0.985857275079405460, -0.985865653201645880, -0.985874028859222040, -0.985882402052113080, -0.985890772780298130, -0.985899141043756310, -0.985907506842466640, -0.985915870176408250, +-0.985924231045560150, -0.985932589449901360, -0.985940945389411240, -0.985949298864068680, -0.985957649873852810, -0.985965998418742880, -0.985974344498718010, -0.985982688113757220, +-0.985991029263839640, -0.985999367948944720, -0.986007704169051260, -0.986016037924138500, -0.986024369214185680, -0.986032698039171820, -0.986041024399076480, -0.986049348293878360, +-0.986057669723556910, -0.986065988688091370, -0.986074305187460750, -0.986082619221644310, -0.986090930790621490, -0.986099239894371200, -0.986107546532872910, -0.986115850706105630, +-0.986124152414049050, -0.986132451656681840, -0.986140748433983470, -0.986149042745933290, -0.986157334592510430, -0.986165623973694340, -0.986173910889464270, -0.986182195339799230, +-0.986190477324678790, -0.986198756844082090, -0.986207033897988580, -0.986215308486377400, -0.986223580609227990, -0.986231850266519720, -0.986240117458231700, -0.986248382184343520, +-0.986256644444834300, -0.986264904239683490, -0.986273161568870350, -0.986281416432374320, -0.986289668830174770, -0.986297918762251260, -0.986306166228582690, -0.986314411229148760, +-0.986322653763928800, -0.986330893832902180, -0.986339131436048460, -0.986347366573346760, -0.986355599244776670, -0.986363829450317640, -0.986372057189949140, -0.986380282463650280, +-0.986388505271400870, -0.986396725613180040, -0.986404943488967570, -0.986413158898742590, -0.986421371842484910, -0.986429582320173640, -0.986437790331788470, -0.986445995877308750, +-0.986454198956714160, -0.986462399569983940, -0.986470597717097770, -0.986478793398035130, -0.986486986612775450, -0.986495177361298330, -0.986503365643583430, -0.986511551459610000, +-0.986519734809357620, -0.986527915692805960, -0.986536094109934480, -0.986544270060722980, -0.986552443545150590, -0.986560614563197100, -0.986568783114842080, -0.986576949200065110, +-0.986585112818845760, -0.986593273971163590, -0.986601432656998290, -0.986609588876329440, -0.986617742629136480, -0.986625893915399450, -0.986634042735097470, -0.986642189088210440, +-0.986650332974717830, -0.986658474394599530, -0.986666613347834900, -0.986674749834403950, -0.986682883854286040, -0.986691015407460850, -0.986699144493908160, -0.986707271113607560, +-0.986715395266538840, -0.986723516952681570, -0.986731636172015540, -0.986739752924520430, -0.986747867210176040, -0.986755979028961950, -0.986764088380857830, -0.986772195265843480, +-0.986780299683898690, -0.986788401635003030, -0.986796501119136640, -0.986804598136278850, -0.986812692686409480, -0.986820784769508410, -0.986828874385555440, -0.986836961534530270, +-0.986845046216412670, -0.986853128431182450, -0.986861208178819390, -0.986869285459303410, -0.986877360272614190, -0.986885432618731520, -0.986893502497635300, -0.986901569909305220, +-0.986909634853721300, -0.986917697330863430, -0.986925757340711200, -0.986933814883244500, -0.986941869958443350, -0.986949922566287440, -0.986957972706756780, -0.986966020379831170, +-0.986974065585490500, -0.986982108323714690, -0.986990148594483640, -0.986998186397777370, -0.987006221733575440, -0.987014254601857880, -0.987022285002604800, -0.987030312935796020, +-0.987038338401411530, -0.987046361399431030, -0.987054381929834750, -0.987062399992602370, -0.987070415587714130, -0.987078428715149720, -0.987086439374889270, -0.987094447566912780, +-0.987102453291200170, -0.987110456547731440, -0.987118457336486620, -0.987126455657445610, -0.987134451510588430, -0.987142444895895090, -0.987150435813345610, -0.987158424262920110, +-0.987166410244598720, -0.987174393758361020, -0.987182374804187470, -0.987190353382057960, -0.987198329491952520, -0.987206303133851270, -0.987214274307734340, -0.987222243013581640, +-0.987230209251373390, -0.987238173021089740, -0.987246134322710470, -0.987254093156215930, -0.987262049521586140, -0.987270003418801220, -0.987277954847841200, -0.987285903808686530, +-0.987293850301317000, -0.987301794325712740, -0.987309735881854110, -0.987317674969721120, -0.987325611589293880, -0.987333545740552540, -0.987341477423477440, -0.987349406638048710, +-0.987357333384246470, -0.987365257662050850, -0.987373179471442100, -0.987381098812400330, -0.987389015684905780, -0.987396930088938810, -0.987404842024479650, -0.987412751491508090, +-0.987420658490004820, -0.987428563019949860, -0.987436465081323430, -0.987444364674105900, -0.987452261798277390, -0.987460156453818350, -0.987468048640708810, -0.987475938358929220, +-0.987483825608459820, -0.987491710389280850, -0.987499592701372440, -0.987507472544715160, -0.987515349919289240, -0.987523224825075040, -0.987531097262052570, -0.987538967230202400, +-0.987546834729504890, -0.987554699759940260, -0.987562562321488870, -0.987570422414130960, -0.987578280037847090, -0.987586135192617620, -0.987593987878422670, -0.987601838095242930, +-0.987609685843058530, -0.987617531121849800, -0.987625373931597330, -0.987633214272281350, -0.987641052143882310, -0.987648887546380920, -0.987656720479757060, -0.987664550943991420, +-0.987672378939064450, -0.987680204464956520, -0.987688027521648080, -0.987695848109119480, -0.987703666227351400, -0.987711481876324070, -0.987719295056018190, -0.987727105766413870, +-0.987734914007491920, -0.987742719779232560, -0.987750523081616480, -0.987758323914624040, -0.987766122278236010, -0.987773918172432430, -0.987781711597194190, -0.987789502552501530, +-0.987797291038335250, -0.987805077054675570, -0.987812860601503310, -0.987820641678798910, -0.987828420286542940, -0.987836196424715980, -0.987843970093298380, -0.987851741292270940, +-0.987859510021614100, -0.987867276281308440, -0.987875040071334640, -0.987882801391673390, -0.987890560242304930, -0.987898316623210150, -0.987906070534369520, -0.987913821975763720, +-0.987921570947373430, -0.987929317449179110, -0.987937061481161560, -0.987944803043301350, -0.987952542135579150, -0.987960278757975760, -0.987968012910471430, -0.987975744593047160, +-0.987983473805683520, -0.987991200548361200, -0.987998924821061000, -0.988006646623763360, -0.988014365956449090, -0.988022082819098870, -0.988029797211693480, -0.988037509134213620, +-0.988045218586639960, -0.988052925568953190, -0.988060630081134210, -0.988068332123163580, -0.988076031695022340, -0.988083728796690820, -0.988091423428150040, -0.988099115589380680, +-0.988106805280363430, -0.988114492501079410, -0.988122177251508970, -0.988129859531633130, -0.988137539341432670, -0.988145216680888280, -0.988152891549980870, -0.988160563948691340, +-0.988168233877000260, -0.988175901334888640, -0.988183566322337280, -0.988191228839327200, -0.988198888885838840, -0.988206546461853240, -0.988214201567351290, -0.988221854202313900, +-0.988229504366721740, -0.988237152060556070, -0.988244797283797330, -0.988252440036426650, -0.988260080318424830, -0.988267718129772880, -0.988275353470451480, -0.988282986340441870, +-0.988290616739724630, -0.988298244668280980, -0.988305870126091830, -0.988313493113137880, -0.988321113629400120, -0.988328731674859570, -0.988336347249497260, -0.988343960353294080, +-0.988351570986231160, -0.988359179148289080, -0.988366784839449180, -0.988374388059692240, -0.988381988808999300, -0.988389587087351470, -0.988397182894729660, -0.988404776231114780, +-0.988412367096488050, -0.988419955490830390, -0.988427541414123030, -0.988435124866346660, -0.988442705847482390, -0.988450284357511480, -0.988457860396414810, -0.988465433964173630, +-0.988473005060768740, -0.988480573686181250, -0.988488139840392410, -0.988495703523383230, -0.988503264735134720, -0.988510823475628130, -0.988518379744844470, -0.988525933542764750, +-0.988533484869370320, -0.988541033724642300, -0.988548580108561500, -0.988556124021109260, -0.988563665462266820, -0.988571204432015070, -0.988578740930335490, -0.988586274957208970, +-0.988593806512616750, -0.988601335596539950, -0.988608862208959940, -0.988616386349857600, -0.988623908019214400, -0.988631427217011470, -0.988638943943229930, -0.988646458197851020, +-0.988653969980856080, -0.988661479292226140, -0.988668986131942430, -0.988676490499986290, -0.988683992396338970, -0.988691491820981590, -0.988698988773895620, -0.988706483255062160, +-0.988713975264462360, -0.988721464802077680, -0.988728951867889340, -0.988736436461878590, -0.988743918584026770, -0.988751398234315130, -0.988758875412725000, -0.988766350119237860, +-0.988773822353834710, -0.988781292116497010, -0.988788759407206010, -0.988796224225943150, -0.988803686572689690, -0.988811146447427180, -0.988818603850136760, -0.988826058780799770, +-0.988833511239397560, -0.988840961225911590, -0.988848408740323310, -0.988855853782613980, -0.988863296352764930, -0.988870736450757740, -0.988878174076573750, -0.988885609230194310, +-0.988893041911600770, -0.988900472120774590, -0.988907899857697340, -0.988915325122350250, -0.988922747914715020, -0.988930168234772760, -0.988937586082505040, -0.988945001457893440, +-0.988952414360919300, -0.988959824791564190, -0.988967232749809470, -0.988974638235636580, -0.988982041249027220, -0.988989441789962730, -0.988996839858424680, -0.989004235454394530, +-0.989011628577853740, -0.989019019228783880, -0.989026407407166410, -0.989033793112983120, -0.989041176346215250, -0.989048557106844360, -0.989055935394852150, -0.989063311210219950, +-0.989070684552929680, -0.989078055422962570, -0.989085423820300400, -0.989092789744924540, -0.989100153196816880, -0.989107514175958880, -0.989114872682331890, -0.989122228715917820, +-0.989129582276698120, -0.989136933364654580, -0.989144281979768560, -0.989151628122022060, -0.989158971791396340, -0.989166312987873160, -0.989173651711434230, -0.989180987962061110, +-0.989188321739735590, -0.989195653044439240, -0.989202981876153850, -0.989210308234860890, -0.989217632120542260, -0.989224953533179520, -0.989232272472754360, -0.989239588939248570, +-0.989246902932643720, -0.989254214452921610, -0.989261523500064130, -0.989268830074052750, -0.989276134174869260, -0.989283435802495450, -0.989290734956913000, -0.989298031638103810, +-0.989305325846049470, -0.989312617580731750, -0.989319906842132560, -0.989327193630233800, -0.989334477945016830, -0.989341759786463770, -0.989349039154556190, -0.989356316049276100, +-0.989363590470605180, -0.989370862418525340, -0.989378131893018380, -0.989385398894065960, -0.989392663421650110, -0.989399925475752510, -0.989407185056355170, -0.989414442163439880, +-0.989421696796988440, -0.989428948956982860, -0.989436198643404820, -0.989443445856236450, -0.989450690595459310, -0.989457932861055430, -0.989465172653006710, -0.989472409971295150, +-0.989479644815902560, -0.989486877186810830, -0.989494107084001870, -0.989501334507457700, -0.989508559457160100, -0.989515781933091090, -0.989523001935232680, -0.989530219463566780, +-0.989537434518075410, -0.989544647098740350, -0.989551857205543730, -0.989559064838467450, -0.989566269997493530, -0.989573472682603870, -0.989580672893780490, -0.989587870631005510, +-0.989595065894260940, -0.989602258683528580, -0.989609448998790660, -0.989616636840028980, -0.989623822207225780, -0.989631005100363060, -0.989638185519422840, -0.989645363464387030, +-0.989652538935237860, -0.989659711931957560, -0.989666882454527830, -0.989674050502930780, -0.989681216077148650, -0.989688379177163570, -0.989695539802957440, -0.989702697954512710, +-0.989709853631810970, -0.989717006834834660, -0.989724157563565800, -0.989731305817986630, -0.989738451598079160, -0.989745594903825520, -0.989752735735207940, -0.989759874092208450, +-0.989767009974809490, -0.989774143382992850, -0.989781274316740790, -0.989788402776035640, -0.989795528760859410, -0.989802652271194350, -0.989809773307022800, -0.989816891868326780, +-0.989824007955088400, -0.989831121567290140, -0.989838232704914000, -0.989845341367942220, -0.989852447556357150, -0.989859551270141020, -0.989866652509275970, -0.989873751273744220, +-0.989880847563528230, -0.989887941378610030, -0.989895032718972060, -0.989902121584596450, -0.989909207975465440, -0.989916291891561610, -0.989923373332866950, -0.989930452299363830, +-0.989937528791034580, -0.989944602807861560, -0.989951674349827000, -0.989958743416913260, -0.989965810009102550, -0.989972874126377470, -0.989979935768720120, -0.989986994936113080, +-0.989994051628538490, -0.990001105845978670, -0.990008157588416090, -0.990015206855833220, -0.990022253648212280, -0.990029297965535740, -0.990036339807785940, -0.990043379174945230, +-0.990050416066996180, -0.990057450483920910, -0.990064482425702220, -0.990071511892322120, -0.990078538883763400, -0.990085563400008310, -0.990092585441039400, -0.990099605006838910, +-0.990106622097389310, -0.990113636712673270, -0.990120648852673150, -0.990127658517371390, -0.990134665706750570, -0.990141670420792930, -0.990148672659481250, -0.990155672422797780, +-0.990162669710725200, -0.990169664523245840, -0.990176656860342400, -0.990183646721997320, -0.990190634108193080, -0.990197619018912460, -0.990204601454137580, -0.990211581413851240, +-0.990218558898035890, -0.990225533906674230, -0.990232506439748690, -0.990239476497241980, -0.990246444079136530, -0.990253409185414930, -0.990260371816059860, -0.990267331971053770, +-0.990274289650379340, -0.990281244854019250, -0.990288197581956080, -0.990295147834172380, -0.990302095610650750, -0.990309040911374060, -0.990315983736324680, -0.990322924085485280, +-0.990329861958838540, -0.990336797356367260, -0.990343730278054000, -0.990350660723881340, -0.990357588693832060, -0.990364514187888840, -0.990371437206034270, -0.990378357748251110, +-0.990385275814521960, -0.990392191404829810, -0.990399104519157030, -0.990406015157486610, -0.990412923319801130, -0.990419829006083390, -0.990426732216315940, -0.990433632950481700, +-0.990440531208563460, -0.990447426990543780, -0.990454320296405680, -0.990461211126131720, -0.990468099479704710, -0.990474985357107430, -0.990481868758322670, -0.990488749683333220, +-0.990495628132121890, -0.990502504104671560, -0.990509377600964910, -0.990516248620984970, -0.990523117164714310, -0.990529983232135920, -0.990536846823232400, -0.990543707937986850, +-0.990550566576382070, -0.990557422738400970, -0.990564276424026220, -0.990571127633240730, -0.990577976366027400, -0.990584822622369130, -0.990591666402248830, -0.990598507705649390, +-0.990605346532553720, -0.990612182882944610, -0.990619016756805190, -0.990625848154118030, -0.990632677074866350, -0.990639503519032960, -0.990646327486600750, -0.990653148977552740, +-0.990659967991872060, -0.990666784529541270, -0.990673598590543490, -0.990680410174861860, -0.990687219282479050, -0.990694025913378300, -0.990700830067542390, -0.990707631744954460, +-0.990714430945597410, -0.990721227669454360, -0.990728021916508330, -0.990734813686742100, -0.990741602980138800, -0.990748389796681560, -0.990755174136353280, -0.990761955999137300, +-0.990768735385016200, -0.990775512293973320, -0.990782286725991670, -0.990789058681054270, -0.990795828159144240, -0.990802595160244600, -0.990809359684338480, -0.990816121731408980, +-0.990822881301439250, -0.990829638394412290, -0.990836393010311230, -0.990843145149119200, -0.990849894810819200, -0.990856641995394470, -0.990863386702828250, -0.990870128933103670, +-0.990876868686203500, -0.990883605962111340, -0.990890340760810060, -0.990897073082282920, -0.990903802926513140, -0.990910530293483860, -0.990917255183178190, -0.990923977595579490, +-0.990930697530670870, -0.990937414988435460, -0.990944129968856500, -0.990950842471917110, -0.990957552497600760, -0.990964260045890440, -0.990970965116769630, -0.990977667710221220, +-0.990984367826228780, -0.990991065464775330, -0.990997760625844220, -0.991004453309418660, -0.991011143515482030, -0.991017831244017540, -0.991024516495008450, -0.991031199268438190, +-0.991037879564289790, -0.991044557382546820, -0.991051232723192290, -0.991057905586209760, -0.991064575971582480, -0.991071243879293910, -0.991077909309327040, -0.991084572261665350, +-0.991091232736292290, -0.991097890733191210, -0.991104546252345340, -0.991111199293738140, -0.991117849857352850, -0.991124497943173030, -0.991131143551181930, -0.991137786681363100, +-0.991144427333699670, -0.991151065508175220, -0.991157701204773090, -0.991164334423476730, -0.991170965164269610, -0.991177593427134960, -0.991184219212056240, -0.991190842519017120, +-0.991197463348000850, -0.991204081698990880, -0.991210697571970780, -0.991217310966923890, -0.991223921883833680, -0.991230530322683710, -0.991237136283457550, -0.991243739766138440, +-0.991250340770709950, -0.991256939297155640, -0.991263535345458860, -0.991270128915603400, -0.991276720007572610, -0.991283308621350060, -0.991289894756919090, -0.991296478414263490, +-0.991303059593366620, -0.991309638294212150, -0.991316214516783530, -0.991322788261064350, -0.991329359527038270, -0.991335928314688970, -0.991342494623999590, -0.991349058454954020, +-0.991355619807535840, -0.991362178681728600, -0.991368735077515880, -0.991375288994881480, -0.991381840433808730, -0.991388389394281420, -0.991394935876283130, -0.991401479879797430, +-0.991408021404808100, -0.991414560451298720, -0.991421097019252850, -0.991427631108654280, -0.991434162719486810, -0.991440691851733780, -0.991447218505378980, -0.991453742680406200, +-0.991460264376799020, -0.991466783594541100, -0.991473300333616470, -0.991479814594008470, -0.991486326375700890, -0.991492835678677520, -0.991499342502921930, -0.991505846848418140, +-0.991512348715149710, -0.991518848103100430, -0.991525345012253980, -0.991531839442594150, -0.991538331394104850, -0.991544820866769650, -0.991551307860572330, -0.991557792375496790, +-0.991564274411526720, -0.991570753968646130, -0.991577231046838480, -0.991583705646087890, -0.991590177766377920, -0.991596647407692490, -0.991603114570015490, -0.991609579253330710, +-0.991616041457621940, -0.991622501182873100, -0.991628958429068060, -0.991635413196190640, -0.991641865484224620, -0.991648315293154000, -0.991654762622962480, -0.991661207473634070, +-0.991667649845152650, -0.991674089737502260, -0.991680527150666570, -0.991686962084629480, -0.991693394539374990, -0.991699824514887030, -0.991706252011149590, -0.991712677028146360, +-0.991719099565861570, -0.991725519624279020, -0.991731937203382710, -0.991738352303156550, -0.991744764923584430, -0.991751175064650380, -0.991757582726338400, -0.991763987908632520, +-0.991770390611516730, -0.991776790834974830, -0.991783188578991060, -0.991789583843549210, -0.991795976628633500, -0.991802366934227740, -0.991808754760316160, -0.991815140106882650, +-0.991821522973911350, -0.991827903361386260, -0.991834281269291300, -0.991840656697610680, -0.991847029646328430, -0.991853400115428550, -0.991859768104895290, -0.991866133614712650, +-0.991872496644864540, -0.991878857195335200, -0.991885215266108730, -0.991891570857169170, -0.991897923968500740, -0.991904274600087570, -0.991910622751913550, -0.991916968423963040, +-0.991923311616220160, -0.991929652328669140, -0.991935990561293780, -0.991942326314078530, -0.991948659587007400, -0.991954990380064630, -0.991961318693234450, -0.991967644526500990, +-0.991973967879848260, -0.991980288753260720, -0.991986607146722490, -0.991992923060217690, -0.991999236493730560, -0.992005547447245340, -0.992011855920746250, -0.992018161914217540, +-0.992024465427643550, -0.992030766461008300, -0.992037065014296120, -0.992043361087491250, -0.992049654680578040, -0.992055945793540620, -0.992062234426363540, -0.992068520579030610, +-0.992074804251526500, -0.992081085443835330, -0.992087364155941450, -0.992093640387829210, -0.992099914139482840, -0.992106185410886690, -0.992112454202025100, -0.992118720512882410, +-0.992124984343442870, -0.992131245693690820, -0.992137504563610720, -0.992143760953186790, -0.992150014862403510, -0.992156266291245310, -0.992162515239696340, -0.992168761707741040, +-0.992175005695363880, -0.992181247202549190, -0.992187486229281320, -0.992193722775544850, -0.992199956841324000, -0.992206188426603240, -0.992212417531367130, -0.992218644155599900, +-0.992224868299286020, -0.992231089962410050, -0.992237309144956230, -0.992243525846909220, -0.992249740068253510, -0.992255951808973300, -0.992262161069053290, -0.992268367848477830, +-0.992274572147231470, -0.992280773965298570, -0.992286973302663910, -0.992293170159311620, -0.992299364535226600, -0.992305556430393090, -0.992311745844795760, -0.992317932778418950, +-0.992324117231247360, -0.992330299203265430, -0.992336478694457850, -0.992342655704809060, -0.992348830234303650, -0.992355002282926060, -0.992361171850660970, -0.992367338937493070, +-0.992373503543406700, -0.992379665668386530, -0.992385825312417370, -0.992391982475483550, -0.992398137157569750, -0.992404289358660760, -0.992410439078740940, -0.992416586317794950, +-0.992422731075807580, -0.992428873352763310, -0.992435013148647020, -0.992441150463443060, -0.992447285297136220, -0.992453417649711180, -0.992459547521152620, -0.992465674911445220, +-0.992471799820573540, -0.992477922248522380, -0.992484042195276530, -0.992490159660820440, -0.992496274645139120, -0.992502387148216920, -0.992508497170038860, -0.992514604710589500, +-0.992520709769853740, -0.992526812347816030, -0.992532912444461510, -0.992539010059774630, -0.992545105193740170, -0.992551197846342940, -0.992557288017567710, -0.992563375707399280, +-0.992569460915822430, -0.992575543642821860, -0.992581623888382450, -0.992587701652489220, -0.992593776935126510, -0.992599849736279350, -0.992605920055932620, -0.992611987894071010, +-0.992618053250679530, -0.992624116125742970, -0.992630176519246010, -0.992636234431173550, -0.992642289861510600, -0.992648342810241950, -0.992654393277352390, -0.992660441262826820, +-0.992666486766650150, -0.992672529788807270, -0.992678570329283190, -0.992684608388062610, -0.992690643965130510, -0.992696677060471710, -0.992702707674071320, -0.992708735805914120, +-0.992714761455985140, -0.992720784624269270, -0.992726805310751300, -0.992732823515416360, -0.992738839238249460, -0.992744852479235380, -0.992750863238359150, -0.992756871515605770, +-0.992762877310960250, -0.992768880624407490, -0.992774881455932730, -0.992780879805520540, -0.992786875673156270, -0.992792869058824690, -0.992798859962511050, -0.992804848384200240, +-0.992810834323877290, -0.992816817781527310, -0.992822798757135190, -0.992828777250686080, -0.992834753262165080, -0.992840726791557100, -0.992846697838847380, -0.992852666404020920, +-0.992858632487062740, -0.992864596087958180, -0.992870557206691930, -0.992876515843249320, -0.992882471997615480, -0.992888425669775420, -0.992894376859714270, -0.992900325567417250, +-0.992906271792869390, -0.992912215536055800, -0.992918156796961720, -0.992924095575572150, -0.992930031871872450, -0.992935965685847630, -0.992941897017482920, -0.992947825866763440, +-0.992953752233674440, -0.992959676118201020, -0.992965597520328420, -0.992971516440041890, -0.992977432877326430, -0.992983346832167490, -0.992989258304550200, -0.992995167294459800, +-0.993001073801881410, -0.993006977826800250, -0.993012879369201800, -0.993018778429071050, -0.993024675006393350, -0.993030569101153950, -0.993036460713338180, -0.993042349842931380, +-0.993048236489918580, -0.993054120654285110, -0.993060002336016430, -0.993065881535097780, -0.993071758251514390, -0.993077632485251600, -0.993083504236294770, -0.993089373504629110, +-0.993095240290239990, -0.993101104593112850, -0.993106966413232930, -0.993112825750585570, -0.993118682605156120, -0.993124536976930040, -0.993130388865892550, -0.993136238272029240, +-0.993142085195325210, -0.993147929635765920, -0.993153771593336840, -0.993159611068023310, -0.993165448059810880, -0.993171282568684810, -0.993177114594630430, -0.993182944137633310, +-0.993188771197678790, -0.993194595774752330, -0.993200417868839500, -0.993206237479925540, -0.993212054607996000, -0.993217869253036230, -0.993223681415032030, -0.993229491093968410, +-0.993235298289831150, -0.993241103002605600, -0.993246905232277320, -0.993252704978831780, -0.993258502242254540, -0.993264297022531050, -0.993270089319646670, -0.993275879133587170, +-0.993281666464337910, -0.993287451311884560, -0.993293233676212470, -0.993299013557307430, -0.993304790955154780, -0.993310565869740200, -0.993316338301049150, -0.993322108249067300, +-0.993327875713780120, -0.993333640695173270, -0.993339403193232330, -0.993345163207942970, -0.993350920739290650, -0.993356675787261060, -0.993362428351839630, -0.993368178433012280, +-0.993373926030764350, -0.993379671145081740, -0.993385413775949910, -0.993391153923354420, -0.993396891587281280, -0.993402626767715850, -0.993408359464643790, -0.993414089678050780, +-0.993419817407922620, -0.993425542654244880, -0.993431265417003330, -0.993436985696183660, -0.993442703491771440, -0.993448418803752450, -0.993454131632112380, -0.993459841976837010, +-0.993465549837912130, -0.993471255215323310, -0.993476958109056340, -0.993482658519097010, -0.993488356445431100, -0.993494051888044180, -0.993499744846922160, -0.993505435322050710, +-0.993511123313415730, -0.993516808821003130, -0.993522491844798350, -0.993528172384787300, -0.993533850440955770, -0.993539526013289760, -0.993545199101774860, -0.993550869706396940, +-0.993556537827141820, -0.993562203463995490, -0.993567866616943520, -0.993573527285972040, -0.993579185471066610, -0.993584841172213240, -0.993590494389397730, -0.993596145122606080, +-0.993601793371823970, -0.993607439137037530, -0.993613082418232430, -0.993618723215394570, -0.993624361528509860, -0.993629997357564300, -0.993635630702543680, -0.993641261563434130, +-0.993646889940221320, -0.993652515832891270, -0.993658139241430090, -0.993663760165823470, -0.993669378606057420, -0.993674994562117830, -0.993680608033990830, -0.993686219021662430, +-0.993691827525118420, -0.993697433544344810, -0.993703037079327610, -0.993708638130052830, -0.993714236696506380, -0.993719832778674480, -0.993725426376542930, -0.993731017490097730, +-0.993736606119325130, -0.993742192264211010, -0.993747775924741280, -0.993753357100902180, -0.993758935792679710, -0.993764512000059890, -0.993770085723028830, -0.993775656961572550, +-0.993781225715677060, -0.993786791985328600, -0.993792355770513060, -0.993797917071216670, -0.993803475887425460, -0.993809032219125530, -0.993814586066303130, -0.993820137428944150, +-0.993825686307034940, -0.993831232700561510, -0.993836776609509980, -0.993842318033866470, -0.993847856973617110, -0.993853393428748120, -0.993858927399245860, -0.993864458885096110, +-0.993869987886285220, -0.993875514402799310, -0.993881038434624720, -0.993886559981747460, -0.993892079044153780, -0.993897595621830000, -0.993903109714762150, -0.993908621322936560, +-0.993914130446339470, -0.993919637084957010, -0.993925141238775400, -0.993930642907780990, -0.993936142091959910, -0.993941638791298600, -0.993947133005783190, -0.993952624735399910, +-0.993958113980135010, -0.993963600739974810, -0.993969085014905660, -0.993974566804913810, -0.993980046109985470, -0.993985522930107110, -0.993990997265264850, -0.993996469115445260, +-0.994001938480634450, -0.994007405360818660, -0.994012869755984460, -0.994018331666118080, -0.994023791091205760, -0.994029248031234160, -0.994034702486189300, -0.994040154456057760, +-0.994045603940825750, -0.994051050940479740, -0.994056495455006180, -0.994061937484391310, -0.994067377028621580, -0.994072814087683440, -0.994078248661563360, -0.994083680750247670, +-0.994089110353722600, -0.994094537471974850, -0.994099962104990740, -0.994105384252756740, -0.994110803915259300, -0.994116221092484880, -0.994121635784419810, -0.994127047991050670, +-0.994132457712363920, -0.994137864948346110, -0.994143269698983480, -0.994148671964262820, -0.994154071744170360, -0.994159469038692790, -0.994164863847816660, -0.994170256171528210, +-0.994175646009814120, -0.994181033362660950, -0.994186418230055270, -0.994191800611983530, -0.994197180508432200, -0.994202557919387940, -0.994207932844837330, -0.994213305284766810, +-0.994218675239163070, -0.994224042708012680, -0.994229407691302190, -0.994234770189018070, -0.994240130201147100, -0.994245487727675960, -0.994250842768590880, -0.994256195323878770, +-0.994261545393526180, -0.994266892977519690, -0.994272238075845970, -0.994277580688491810, -0.994282920815443560, -0.994288258456688000, -0.994293593612211810, -0.994298926282001560, +-0.994304256466044030, -0.994309584164325910, -0.994314909376833870, -0.994320232103554470, -0.994325552344474620, -0.994330870099580770, -0.994336185368859820, -0.994341498152298330, +-0.994346808449883100, -0.994352116261600800, -0.994357421587438450, -0.994362724427382380, -0.994368024781419390, -0.994373322649536480, -0.994378618031720230, -0.994383910927957420, +-0.994389201338234830, -0.994394489262539260, -0.994399774700857500, -0.994405057653176330, -0.994410338119482430, -0.994415616099762700, -0.994420891594003930, -0.994426164602192910, +-0.994431435124316530, -0.994436703160361590, -0.994441968710314870, -0.994447231774163170, -0.994452492351893480, -0.994457750443492490, -0.994463006048947110, -0.994468259168244220, +-0.994473509801370730, -0.994478757948313420, -0.994484003609059200, -0.994489246783595070, -0.994494487471907830, -0.994499725673984260, -0.994504961389811370, -0.994510194619376180, +-0.994515425362665570, -0.994520653619666240, -0.994525879390365300, -0.994531102674749650, -0.994536323472806290, -0.994541541784522030, -0.994546757609883980, -0.994551970948879040, +-0.994557181801494220, -0.994562390167716410, -0.994567596047532640, -0.994572799440929910, -0.994578000347895120, -0.994583198768415280, -0.994588394702477510, -0.994593588150068820, +-0.994598779111176110, -0.994603967585786400, -0.994609153573886800, -0.994614337075464320, -0.994619518090505970, -0.994624696618998880, -0.994629872660930060, -0.994635046216286510, +-0.994640217285055360, -0.994645385867223730, -0.994650551962778520, -0.994655715571706960, -0.994660876693996170, -0.994666035329633160, -0.994671191478605050, -0.994676345140898980, +-0.994681496316502050, -0.994686645005401380, -0.994691791207584110, -0.994696934923037230, -0.994702076151748100, -0.994707214893703840, -0.994712351148891450, -0.994717484917298280, +-0.994722616198911450, -0.994727744993717970, -0.994732871301705070, -0.994737995122860100, -0.994743116457170060, -0.994748235304622310, -0.994753351665203960, -0.994758465538902240, +-0.994763576925704270, -0.994768685825597410, -0.994773792238568880, -0.994778896164605800, -0.994783997603695510, -0.994789096555825260, -0.994794193020982150, -0.994799286999153650, +-0.994804378490326990, -0.994809467494489290, -0.994814554011627990, -0.994819638041730240, -0.994824719584783470, -0.994829798640774920, -0.994834875209691720, -0.994839949291521420, +-0.994845020886251260, -0.994850089993868590, -0.994855156614360640, -0.994860220747714740, -0.994865282393918360, -0.994870341552958730, -0.994875398224823290, -0.994880452409499410, +-0.994885504106974290, -0.994890553317235530, -0.994895600040270220, -0.994900644276066060, -0.994905686024610160, -0.994910725285890200, -0.994915762059893400, -0.994920796346607130, +-0.994925828146018820, -0.994930857458116050, -0.994935884282886040, -0.994940908620316370, -0.994945930470394370, -0.994950949833107610, -0.994955966708443550, -0.994960981096389530, +-0.994965992996933000, -0.994971002410061420, -0.994976009335762470, -0.994981013774023370, -0.994986015724831920, -0.994991015188175340, -0.994996012164041210, -0.995001006652416970, +-0.995005998653290310, -0.995010988166648680, -0.995015975192479530, -0.995020959730770430, -0.995025941781508940, -0.995030921344682630, -0.995035898420279060, -0.995040873008285590, +-0.995045845108690100, -0.995050814721479830, -0.995055781846642670, -0.995060746484166090, -0.995065708634037540, -0.995070668296244690, -0.995075625470775220, -0.995080580157616690, +-0.995085532356756670, -0.995090482068182850, -0.995095429291882770, -0.995100374027844240, -0.995105316276054700, -0.995110256036501940, -0.995115193309173420, -0.995120128094057030, +-0.995125060391140240, -0.995129990200410820, -0.995134917521856450, -0.995139842355464820, -0.995144764701223480, -0.995149684559120340, -0.995154601929142850, -0.995159516811279010, +-0.995164429205516290, -0.995169339111842470, -0.995174246530245330, -0.995179151460712560, -0.995184053903232060, -0.995188953857791270, -0.995193851324378100, -0.995198746302980330, +-0.995203638793585750, -0.995208528796181930, -0.995213416310756990, -0.995218301337298380, -0.995223183875794120, -0.995228063926231750, -0.995232941488599310, -0.995237816562884460, +-0.995242689149075100, -0.995247559247159020, -0.995252426857124010, -0.995257291978958070, -0.995262154612648780, -0.995267014758184130, -0.995271872415551930, -0.995276727584740060, +-0.995281580265736320, -0.995286430458528830, -0.995291278163105030, -0.995296123379453170, -0.995300966107560910, -0.995305806347416280, -0.995310644099007160, -0.995315479362321340, +-0.995320312137346840, -0.995325142424071660, -0.995329970222483600, -0.995334795532570650, -0.995339618354320610, -0.995344438687721490, -0.995349256532761410, -0.995354071889428040, +-0.995358884757709730, -0.995363695137594040, -0.995368503029069100, -0.995373308432122910, -0.995378111346743480, -0.995382911772918710, -0.995387709710636730, -0.995392505159885420, +-0.995397298120652920, -0.995402088592927110, -0.995406876576696130, -0.995411662071947980, -0.995416445078670550, -0.995421225596852090, -0.995426003626480590, -0.995430779167544190, +-0.995435552220030660, -0.995440322783928240, -0.995445090859225060, -0.995449856445909220, -0.995454619543968630, -0.995459380153391530, -0.995464138274166020, -0.995468893906280130, +-0.995473647049722080, -0.995478397704479880, -0.995483145870541650, -0.995487891547895520, -0.995492634736529710, -0.995497375436432350, -0.995502113647591560, -0.995506849369995450, +-0.995511582603632150, -0.995516313348490000, -0.995521041604557010, -0.995525767371821410, -0.995530490650271330, -0.995535211439895100, -0.995539929740680840, -0.995544645552616790, +-0.995549358875691180, -0.995554069709892020, -0.995558778055207760, -0.995563483911626520, -0.995568187279136650, -0.995572888157726270, -0.995577586547383710, -0.995582282448097100, +-0.995586975859854780, -0.995591666782645100, -0.995596355216456170, -0.995601041161276460, -0.995605724617094070, -0.995610405583897350, -0.995615084061674650, -0.995619760050414300, +-0.995624433550104440, -0.995629104560733610, -0.995633773082289950, -0.995638439114761800, -0.995643102658137600, -0.995647763712405710, -0.995652422277554460, -0.995657078353571980, +-0.995661731940446940, -0.995666383038167460, -0.995671031646722100, -0.995675677766099110, -0.995680321396286930, -0.995684962537274010, -0.995689601189048590, -0.995694237351599340, +-0.995698871024914280, -0.995703502208982180, -0.995708130903791290, -0.995712757109330050, -0.995717380825587030, -0.995722002052550460, -0.995726620790208910, -0.995731237038550710, +-0.995735850797564550, -0.995740462067238650, -0.995745070847561700, -0.995749677138522030, -0.995754280940108090, -0.995758882252308570, -0.995763481075111810, -0.995768077408506370, +-0.995772671252480700, -0.995777262607023370, -0.995781851472122840, -0.995786437847767770, -0.995791021733946510, -0.995795603130647740, -0.995800182037860030, -0.995804758455571700, +-0.995809332383771560, -0.995813903822448170, -0.995818472771589860, -0.995823039231185540, -0.995827603201223430, -0.995832164681692560, -0.995836723672581140, -0.995841280173877850, +-0.995845834185571490, -0.995850385707650390, -0.995854934740103450, -0.995859481282919230, -0.995864025336086200, -0.995868566899593130, -0.995873105973428600, -0.995877642557581380, +-0.995882176652039930, -0.995886708256793150, -0.995891237371829610, -0.995895763997137860, -0.995900288132706920, -0.995904809778525020, -0.995909328934581280, -0.995913845600864040, +-0.995918359777362320, -0.995922871464064660, -0.995927380660959870, -0.995931887368036620, -0.995936391585283580, -0.995940893312689650, -0.995945392550243390, -0.995949889297933710, +-0.995954383555749280, -0.995958875323678880, -0.995963364601711310, -0.995967851389835350, -0.995972335688039780, -0.995976817496313280, -0.995981296814644870, -0.995985773643023100, +-0.995990247981436980, -0.995994719829875200, -0.995999189188326640, -0.996003656056780100, -0.996008120435224350, -0.996012582323648420, -0.996017041722040970, -0.996021498630390910, +-0.996025953048687020, -0.996030404976918420, -0.996034854415073670, -0.996039301363141890, -0.996043745821111880, -0.996048187788972420, -0.996052627266712510, -0.996057064254320950, +-0.996061498751786960, -0.996065930759098990, -0.996070360276246290, -0.996074787303217630, -0.996079211840002140, -0.996083633886588490, -0.996088053442965800, -0.996092470509122970, +-0.996096885085048900, -0.996101297170732700, -0.996105706766163280, -0.996110113871329640, -0.996114518486220570, -0.996118920610825300, -0.996123320245132620, -0.996127717389131750, +-0.996132112042811600, -0.996136504206161180, -0.996140893879169380, -0.996145281061825430, -0.996149665754118230, -0.996154047956036900, -0.996158427667570460, -0.996162804888707900, +-0.996167179619438350, -0.996171551859750930, -0.996175921609634530, -0.996180288869078390, -0.996184653638071520, -0.996189015916602920, -0.996193375704661820, -0.996197733002237460, +-0.996202087809318630, -0.996206440125894540, -0.996210789951954330, -0.996215137287487230, -0.996219482132482240, -0.996223824486928590, -0.996228164350815290, -0.996232501724131690, +-0.996236836606866900, -0.996241168999009830, -0.996245498900549920, -0.996249826311476290, -0.996254151231778070, -0.996258473661444490, -0.996262793600464770, -0.996267111048827920, +-0.996271426006523410, -0.996275738473540230, -0.996280048449867840, -0.996284355935495250, -0.996288660930411800, -0.996292963434606600, -0.996297263448069130, -0.996301560970788370, +-0.996305856002753900, -0.996310148543954610, -0.996314438594380070, -0.996318726154019400, -0.996323011222861820, -0.996327293800896910, -0.996331573888113550, -0.996335851484501430, +-0.996340126590049560, -0.996344399204747380, -0.996348669328584240, -0.996352936961549470, -0.996357202103632210, -0.996361464754822120, -0.996365724915108220, -0.996369982584480170, +-0.996374237762927110, -0.996378490450438360, -0.996382740647003500, -0.996386988352611750, -0.996391233567252450, -0.996395476290915180, -0.996399716523589160, -0.996403954265263850, +-0.996408189515928690, -0.996412422275573030, -0.996416652544186320, -0.996420880321758020, -0.996425105608277460, -0.996429328403734100, -0.996433548708117510, -0.996437766521417020, +-0.996441981843622090, -0.996446194674722290, -0.996450405014706830, -0.996454612863565510, -0.996458818221287680, -0.996463021087862780, -0.996467221463280260, -0.996471419347529700, +-0.996475614740600530, -0.996479807642482450, -0.996483998053164790, -0.996488185972637110, -0.996492371400888980, -0.996496554337910070, -0.996500734783689610, -0.996504912738217290, +-0.996509088201482760, -0.996513261173475500, -0.996517431654185050, -0.996521599643601210, -0.996525765141713200, -0.996529928148510710, -0.996534088663983520, -0.996538246688121080, +-0.996542402220913060, -0.996546555262348920, -0.996550705812418450, -0.996554853871111310, -0.996558999438416860, -0.996563142514325100, -0.996567283098825360, -0.996571421191907450, +-0.996575556793561020, -0.996579689903775660, -0.996583820522541130, -0.996587948649847010, -0.996592074285682970, -0.996596197430038800, -0.996600318082904170, -0.996604436244268640, +-0.996608551914122010, -0.996612665092454160, -0.996616775779254450, -0.996620883974512980, -0.996624989678219220, -0.996629092890363060, -0.996633193610934050, -0.996637291839922110, +-0.996641387577316910, -0.996645480823108220, -0.996649571577285950, -0.996653659839839670, -0.996657745610759260, -0.996661828890034520, -0.996665909677655120, -0.996669987973610950, +-0.996674063777891920, -0.996678137090487580, -0.996682207911388060, -0.996686276240582920, -0.996690342078062170, -0.996694405423815490, -0.996698466277832760, -0.996702524640104000, +-0.996706580510618780, -0.996710633889367200, -0.996714684776339070, -0.996718733171524150, -0.996722779074912470, -0.996726822486493690, -0.996730863406257940, -0.996734901834195110, +-0.996738937770294990, -0.996742971214547470, -0.996747002166942560, -0.996751030627470170, -0.996755056596120180, -0.996759080072882500, -0.996763101057747130, -0.996767119550704070, +-0.996771135551743240, -0.996775149060854520, -0.996779160078027910, -0.996783168603253330, -0.996787174636521000, -0.996791178177820590, -0.996795179227142230, -0.996799177784476020, +-0.996803173849811870, -0.996807167423139680, -0.996811158504449680, -0.996815147093731760, -0.996819133190975930, -0.996823116796172300, -0.996827097909310900, -0.996831076530381720, +-0.996835052659374890, -0.996839026296280410, -0.996842997441088290, -0.996846966093788760, -0.996850932254371710, -0.996854895922827390, -0.996858857099145900, -0.996862815783317150, +-0.996866771975331470, -0.996870725675178870, -0.996874676882849360, -0.996878625598333290, -0.996882571821620540, -0.996886515552701360, -0.996890456791565960, -0.996894395538204360, +-0.996898331792606780, -0.996902265554763470, -0.996906196824664300, -0.996910125602299750, -0.996914051887659910, -0.996917975680734920, -0.996921896981515010, -0.996925815789990290, +-0.996929732106151100, -0.996933645929987570, -0.996937557261489920, -0.996941466100648380, -0.996945372447453180, -0.996949276301894450, -0.996953177663962740, -0.996957076533647960, +-0.996960972910940440, -0.996964866795830520, -0.996968758188308430, -0.996972647088364530, -0.996976533495988910, -0.996980417411172050, -0.996984298833904050, -0.996988177764175370, +-0.996992054201976230, -0.996995928147296980, -0.996999799600127860, -0.997003668560459190, -0.997007535028281430, -0.997011399003584930, -0.997015260486359800, -0.997019119476596490, +-0.997022975974285460, -0.997026829979416940, -0.997030681491981370, -0.997034530511969110, -0.997038377039370480, -0.997042221074175950, -0.997046062616375850, -0.997049901665960640, +-0.997053738222920650, -0.997057572287246340, -0.997061403858928050, -0.997065232937956240, -0.997069059524321450, -0.997072883618013940, -0.997076705219024140, -0.997080524327342730, +-0.997084340942959830, -0.997088155065866230, -0.997091966696052160, -0.997095775833508170, -0.997099582478224830, -0.997103386630192490, -0.997107188289401700, -0.997110987455842920, +-0.997114784129506710, -0.997118578310383420, -0.997122369998463820, -0.997126159193738150, -0.997129945896197300, -0.997133730105831400, -0.997137511822631220, -0.997141291046587330, +-0.997145067777690080, -0.997148842015930240, -0.997152613761298270, -0.997156383013784840, -0.997160149773380410, -0.997163914040075650, -0.997167675813861010, -0.997171435094727280, +-0.997175191882664900, -0.997178946177664450, -0.997182697979716810, -0.997186447288812340, -0.997190194104941810, -0.997193938428095670, -0.997197680258264830, -0.997201419595439730, +-0.997205156439611050, -0.997208890790769460, -0.997212622648905640, -0.997216352014010380, -0.997220078886074220, -0.997223803265087750, -0.997227525151041850, -0.997231244543927090, +-0.997234961443734250, -0.997238675850454000, -0.997242387764077140, -0.997246097184594230, -0.997249804111996150, -0.997253508546273480, -0.997257210487417000, -0.997260909935417610, +-0.997264606890265860, -0.997268301351952550, -0.997271993320468560, -0.997275682795804590, -0.997279369777951510, -0.997283054266899890, -0.997286736262640640, -0.997290415765164530, +-0.997294092774462460, -0.997297767290525110, -0.997301439313343360, -0.997305108842908020, -0.997308775879209850, -0.997312440422239770, -0.997316102471988540, -0.997319762028447190, +-0.997323419091606270, -0.997327073661456900, -0.997330725737989860, -0.997334375321195950, -0.997338022411066170, -0.997341667007591300, -0.997345309110762250, -0.997348948720569890, +-0.997352585837005260, -0.997356220460059120, -0.997359852589722480, -0.997363482225986140, -0.997367109368841100, -0.997370734018278250, -0.997374356174288600, -0.997377975836863050, +-0.997381593005992610, -0.997385207681668050, -0.997388819863880730, -0.997392429552621200, -0.997396036747880580, -0.997399641449649880, -0.997403243657920100, -0.997406843372682150, +-0.997410440593927250, -0.997414035321646080, -0.997417627555829860, -0.997421217296469600, -0.997424804543556310, -0.997428389297081000, -0.997431971557034670, -0.997435551323408440, +-0.997439128596193330, -0.997442703375380550, -0.997446275660960780, -0.997449845452925480, -0.997453412751265420, -0.997456977555971960, -0.997460539867035980, -0.997464099684448710, +-0.997467657008201170, -0.997471211838284470, -0.997474764174689720, -0.997478314017408160, -0.997481861366430690, -0.997485406221748640, -0.997488948583353020, -0.997492488451235060, +-0.997496025825385880, -0.997499560705796710, -0.997503093092458550, -0.997506622985362630, -0.997510150384500300, -0.997513675289862460, -0.997517197701440540, -0.997520717619225560, +-0.997524235043208750, -0.997527749973381340, -0.997531262409734550, -0.997534772352259740, -0.997538279800947890, -0.997541784755790360, -0.997545287216778380, -0.997548787183903160, +-0.997552284657156060, -0.997555779636528080, -0.997559272122010790, -0.997562762113595290, -0.997566249611272830, -0.997569734615034840, -0.997573217124872460, -0.997576697140777010, +-0.997580174662739850, -0.997583649690752310, -0.997587122224805610, -0.997590592264891000, -0.997594059811000020, -0.997597524863123810, -0.997600987421253920, -0.997604447485381460, +-0.997607905055497900, -0.997611360131594570, -0.997614812713662920, -0.997618262801694190, -0.997621710395679710, -0.997625155495611150, -0.997628598101479520, -0.997632038213276510, +-0.997635475830993320, -0.997638910954621430, -0.997642343584152380, -0.997645773719577300, -0.997649201360887970, -0.997652626508075510, -0.997656049161131600, -0.997659469320047450, +-0.997662886984814650, -0.997666302155424730, -0.997669714831868950, -0.997673125014138850, -0.997676532702226120, -0.997679937896121860, -0.997683340595817870, -0.997686740801305480, +-0.997690138512576260, -0.997693533729621660, -0.997696926452433240, -0.997700316681002560, -0.997703704415321080, -0.997707089655380240, -0.997710472401171830, -0.997713852652687080, +-0.997717230409917780, -0.997720605672855370, -0.997723978441491520, -0.997727348715817700, -0.997730716495825450, -0.997734081781506470, -0.997737444572852290, -0.997740804869854500, +-0.997744162672504650, -0.997747517980794420, -0.997750870794715360, -0.997754221114259150, -0.997757568939417360, -0.997760914270181760, -0.997764257106543710, -0.997767597448495080, +-0.997770935296027560, -0.997774270649132600, -0.997777603507801980, -0.997780933872027380, -0.997784261741800460, -0.997787587117112800, -0.997790909997956170, -0.997794230384322360, +-0.997797548276202930, -0.997800863673589560, -0.997804176576474130, -0.997807486984848220, -0.997810794898703720, -0.997814100318032080, -0.997817403242825200, -0.997820703673074850, +-0.997824001608772710, -0.997827297049910580, -0.997830589996480220, -0.997833880448473430, -0.997837168405881880, -0.997840453868697460, -0.997843736836911850, -0.997847017310516840, +-0.997850295289504420, -0.997853570773866160, -0.997856843763593960, -0.997860114258679820, -0.997863382259115310, -0.997866647764892310, -0.997869910776002620, -0.997873171292438240, +-0.997876429314190960, -0.997879684841252560, -0.997882937873615040, -0.997886188411270080, -0.997889436454209580, -0.997892682002425650, -0.997895925055909850, -0.997899165614654300, +-0.997902403678650910, -0.997905639247891440, -0.997908872322367910, -0.997912102902072220, -0.997915330986996250, -0.997918556577131910, -0.997921779672471200, -0.997925000273006120, +-0.997928218378728470, -0.997931433989630360, -0.997934647105703570, -0.997937857726940100, -0.997941065853332090, -0.997944271484871410, -0.997947474621549980, -0.997950675263359900, +-0.997953873410293180, -0.997957069062341720, -0.997960262219497630, -0.997963452881752920, -0.997966641049099490, -0.997969826721529450, -0.997973009899034920, -0.997976190581607910, +-0.997979368769240320, -0.997982544461924360, -0.997985717659651940, -0.997988888362415280, -0.997992056570206510, -0.997995222283017510, -0.997998385500840410, -0.998001546223667320, +-0.998004704451490480, -0.998007860184301880, -0.998011013422093640, -0.998014164164857780, -0.998017312412586510, -0.998020458165271960, -0.998023601422906360, -0.998026742185481710, +-0.998029880452990240, -0.998033016225423950, -0.998036149502775190, -0.998039280285036080, -0.998042408572198720, -0.998045534364255360, -0.998048657661198100, -0.998051778463019290, +-0.998054896769711040, -0.998058012581265590, -0.998061125897675040, -0.998064236718931630, -0.998067345045027700, -0.998070450875955360, -0.998073554211706960, -0.998076655052274610, +-0.998079753397650650, -0.998082849247827310, -0.998085942602796820, -0.998089033462551510, -0.998092121827083510, -0.998095207696385270, -0.998098291070449120, -0.998101371949267180, +-0.998104450332831790, -0.998107526221135190, -0.998110599614169920, -0.998113670511928010, -0.998116738914402000, -0.998119804821584240, -0.998122868233466850, -0.998125929150042280, +-0.998128987571302970, -0.998132043497241160, -0.998135096927849190, -0.998138147863119500, -0.998141196303044430, -0.998144242247616440, -0.998147285696827760, -0.998150326650670940, +-0.998153365109138320, -0.998156401072222250, -0.998159434539915070, -0.998162465512209440, -0.998165493989097710, -0.998168519970572100, -0.998171543456625180, -0.998174564447249500, +-0.998177582942437300, -0.998180598942181250, -0.998183612446473690, -0.998186623455306950, -0.998189631968673830, -0.998192637986566540, -0.998195641508977770, -0.998198642535899740, +-0.998201641067325230, -0.998204637103246580, -0.998207630643656250, -0.998210621688546910, -0.998213610237911110, -0.998216596291741200, -0.998219579850029850, -0.998222560912769400, +-0.998225539479952630, -0.998228515551572100, -0.998231489127620160, -0.998234460208089590, -0.998237428792972840, -0.998240394882262460, -0.998243358475951140, -0.998246319574031430, +-0.998249278176496000, -0.998252234283337200, -0.998255187894547920, -0.998258139010120730, -0.998261087630048060, -0.998264033754322820, -0.998266977382937350, -0.998269918515884540, +-0.998272857153156830, -0.998275793294747030, -0.998278726940647790, -0.998281658090851680, -0.998284586745351480, -0.998287512904139750, -0.998290436567209280, -0.998293357734552630, +-0.998296276406162700, -0.998299192582032040, -0.998302106262153430, -0.998305017446519560, -0.998307926135123090, -0.998310832327956810, -0.998313736025013500, -0.998316637226285720, +-0.998319535931766480, -0.998322432141448330, -0.998325325855324190, -0.998328217073386700, -0.998331105795628670, -0.998333992022042870, -0.998336875752621980, -0.998339756987358990, +-0.998342635726246600, -0.998345511969277680, -0.998348385716445020, -0.998351256967741300, -0.998354125723159400, -0.998356991982692230, -0.998359855746332570, -0.998362717014073310, +-0.998365575785907230, -0.998368432061827240, -0.998371285841826110, -0.998374137125896840, -0.998376985914032230, -0.998379832206225060, -0.998382676002468330, -0.998385517302754930, +-0.998388356107077770, -0.998391192415429730, -0.998394026227803710, -0.998396857544192610, -0.998399686364589310, -0.998402512688986830, -0.998405336517378060, -0.998408157849756010, +-0.998410976686113560, -0.998413793026443620, -0.998416606870739190, -0.998419418218993270, -0.998422227071198880, -0.998425033427348780, -0.998427837287436120, -0.998430638651453980, +-0.998433437519395170, -0.998436233891252800, -0.998439027767019760, -0.998441819146689170, -0.998444608030254140, -0.998447394417707470, -0.998450178309042370, -0.998452959704251740, +-0.998455738603328810, -0.998458515006266590, -0.998461288913057960, -0.998464060323696170, -0.998466829238174200, -0.998469595656485190, -0.998472359578622130, -0.998475121004578250, +-0.998477879934346560, -0.998480636367920170, -0.998483390305292100, -0.998486141746455670, -0.998488890691403790, -0.998491637140129670, -0.998494381092626560, -0.998497122548887450, +-0.998499861508905460, -0.998502597972674040, -0.998505331940185870, -0.998508063411434500, -0.998510792386412940, -0.998513518865114410, -0.998516242847532150, -0.998518964333659160, +-0.998521683323488900, -0.998524399817014350, -0.998527113814228760, -0.998529825315125460, -0.998532534319697460, -0.998535240827938320, -0.998537944839840930, -0.998540646355398740, +-0.998543345374604980, -0.998546041897452770, -0.998548735923935450, -0.998551427454046350, -0.998554116487778700, -0.998556803025125730, -0.998559487066080780, -0.998562168610637070, +-0.998564847658787950, -0.998567524210526640, -0.998570198265846590, -0.998572869824741030, -0.998575538887203410, -0.998578205453226730, -0.998580869522804670, -0.998583531095930450, +-0.998586190172597420, -0.998588846752798800, -0.998591500836528150, -0.998594152423778690, -0.998596801514543890, -0.998599448108817180, -0.998602092206591680, -0.998604733807861080, +-0.998607372912618580, -0.998610009520857660, -0.998612643632571740, -0.998615275247754170, -0.998617904366398410, -0.998620530988497900, -0.998623155114046090, -0.998625776743036430, +-0.998628395875462260, -0.998631012511317030, -0.998633626650594410, -0.998636238293287630, -0.998638847439390350, -0.998641454088895930, -0.998644058241797810, -0.998646659898089540, +-0.998649259057764690, -0.998651855720816610, -0.998654449887238950, -0.998657041557025170, -0.998659630730168720, -0.998662217406663280, -0.998664801586502280, -0.998667383269679300, +-0.998669962456187780, -0.998672539146021390, -0.998675113339173580, -0.998677685035638140, -0.998680254235408400, -0.998682820938478040, -0.998685385144840620, -0.998687946854489810, +-0.998690506067419050, -0.998693062783622020, -0.998695617003092280, -0.998698168725823620, -0.998700717951809480, -0.998703264681043650, -0.998705808913519570, -0.998708350649230910, +-0.998710889888171470, -0.998713426630334690, -0.998715960875714460, -0.998718492624304340, -0.998721021876097900, -0.998723548631088920, -0.998726072889271070, -0.998728594650638120, +-0.998731113915183540, -0.998733630682901330, -0.998736144953784930, -0.998738656727828240, -0.998741166005024830, -0.998743672785368570, -0.998746177068853160, -0.998748678855472250, +-0.998751178145219630, -0.998753674938089090, -0.998756169234074400, -0.998758661033169240, -0.998761150335367500, -0.998763637140662740, -0.998766121449048970, -0.998768603260519860, +-0.998771082575069300, -0.998773559392691080, -0.998776033713378860, -0.998778505537126660, -0.998780974863928140, -0.998783441693777090, -0.998785906026667500, -0.998788367862593170, +-0.998790827201547880, -0.998793284043525630, -0.998795738388520090, -0.998798190236525270, -0.998800639587534840, -0.998803086441542920, -0.998805530798543280, -0.998807972658529720, +-0.998810412021496340, -0.998812848887436820, -0.998815283256345280, -0.998817715128215490, -0.998820144503041460, -0.998822571380816980, -0.998824995761536160, -0.998827417645192780, +-0.998829837031780960, -0.998832253921294490, -0.998834668313727360, -0.998837080209073580, -0.998839489607327050, -0.998841896508481870, -0.998844300912531850, -0.998846702819471190, +-0.998849102229293680, -0.998851499141993450, -0.998853893557564600, -0.998856285476000920, -0.998858674897296410, -0.998861061821445410, -0.998863446248441590, -0.998865828178279180, +-0.998868207610952300, -0.998870584546454830, -0.998872958984780900, -0.998875330925924620, -0.998877700369880000, -0.998880067316641140, -0.998882431766202060, -0.998884793718556870, +-0.998887153173699800, -0.998889510131624860, -0.998891864592326040, -0.998894216555797580, -0.998896566022033580, -0.998898912991028180, -0.998901257462775580, -0.998903599437269700, +-0.998905938914504960, -0.998908275894475280, -0.998910610377174880, -0.998912942362597980, -0.998915271850738810, -0.998917598841591370, -0.998919923335150010, -0.998922245331408720, +-0.998924564830361960, -0.998926881832003730, -0.998929196336328260, -0.998931508343329780, -0.998933817853002610, -0.998936124865340890, -0.998938429380338830, -0.998940731397990670, +-0.998943030918290730, -0.998945327941233140, -0.998947622466812350, -0.998949914495022350, -0.998952204025857720, -0.998954491059312440, -0.998956775595380990, -0.998959057634057680, +-0.998961337175336640, -0.998963614219212310, -0.998965888765678930, -0.998968160814730830, -0.998970430366362240, -0.998972697420567710, -0.998974961977341370, -0.998977224036677660, +-0.998979483598570810, -0.998981740663015260, -0.998983995230005470, -0.998986247299535560, -0.998988496871600070, -0.998990743946193360, -0.998992988523309870, -0.998995230602943820, +-0.998997470185089660, -0.998999707269741970, -0.999001941856894840, -0.999004173946542950, -0.999006403538680640, -0.999008630633302250, -0.999010855230402340, -0.999013077329975240, +-0.999015296932015520, -0.999017514036517510, -0.999019728643475660, -0.999021940752884640, -0.999024150364738680, -0.999026357479032350, -0.999028562095760080, -0.999030764214916430, +-0.999032963836495980, -0.999035160960492940, -0.999037355586902100, -0.999039547715717900, -0.999041737346934800, -0.999043924480547350, -0.999046109116550120, -0.999048291254937550, +-0.999050470895704310, -0.999052648038844860, -0.999054822684353750, -0.999056994832225650, -0.999059164482455020, -0.999061331635036520, -0.999063496289964710, -0.999065658447234160, +-0.999067818106839420, -0.999069975268775060, -0.999072129933035850, -0.999074282099616350, -0.999076431768511130, -0.999078578939714860, -0.999080723613222090, -0.999082865789027500, +-0.999085005467125750, -0.999087142647511530, -0.999089277330179380, -0.999091409515124100, -0.999093539202340230, -0.999095666391822570, -0.999097791083565780, -0.999099913277564420, +-0.999102032973813390, -0.999104150172307140, -0.999106264873040660, -0.999108377076008410, -0.999110486781205290, -0.999112593988625950, -0.999114698698265080, -0.999116800910117450, +-0.999118900624177850, -0.999120997840440950, -0.999123092558901640, -0.999125184779554590, -0.999127274502394580, -0.999129361727416290, -0.999131446454614710, -0.999133528683984420, +-0.999135608415520290, -0.999137685649217230, -0.999139760385070020, -0.999141832623073320, -0.999143902363222040, -0.999145969605510940, -0.999148034349934930, -0.999150096596488900, +-0.999152156345167630, -0.999154213595965900, -0.999156268348878720, -0.999158320603900860, -0.999160370361027230, -0.999162417620252600, -0.999164462381571970, -0.999166504644980140, +-0.999168544410471980, -0.999170581678042620, -0.999172616447686730, -0.999174648719399320, -0.999176678493175260, -0.999178705769009470, -0.999180730546897040, -0.999182752826832670, +-0.999184772608811440, -0.999186789892828280, -0.999188804678878270, -0.999190816966956110, -0.999192826757056900, -0.999194834049175640, -0.999196838843307340, -0.999198841139446900, +-0.999200840937589430, -0.999202838237729820, -0.999204833039863070, -0.999206825343984310, -0.999208815150088410, -0.999210802458170510, -0.999212787268225600, -0.999214769580248690, +-0.999216749394234880, -0.999218726710179310, -0.999220701528076850, -0.999222673847922520, -0.999224643669711640, -0.999226610993439120, -0.999228575819100070, -0.999230538146689610, +-0.999232497976202730, -0.999234455307634660, -0.999236410140980410, -0.999238362476235100, -0.999240312313393940, -0.999242259652452060, -0.999244204493404450, -0.999246146836246350, +-0.999248086680972870, -0.999250024027579230, -0.999251958876060550, -0.999253891226411840, -0.999255821078628540, -0.999257748432705540, -0.999259673288638290, -0.999261595646421920, +-0.999263515506051410, -0.999265432867522120, -0.999267347730829370, -0.999269260095968170, -0.999271169962933750, -0.999273077331721550, -0.999274982202326580, -0.999276884574744170, +-0.999278784448969560, -0.999280681824997960, -0.999282576702824610, -0.999284469082444950, -0.999286358963853980, -0.999288246347047160, -0.999290131232019820, -0.999292013618767070, +-0.999293893507284260, -0.999295770897566720, -0.999297645789609780, -0.999299518183408790, -0.999301388078958960, -0.999303255476255540, -0.999305120375294180, -0.999306982776069890, +-0.999308842678578220, -0.999310700082814420, -0.999312554988773800, -0.999314407396451830, -0.999316257305843840, -0.999318104716945270, -0.999319949629751350, -0.999321792044257640, +-0.999323631960459370, -0.999325469378352090, -0.999327304297931150, -0.999329136719191880, -0.999330966642129730, -0.999332794066740250, -0.999334618993018790, -0.999336441420960790, +-0.999338261350561700, -0.999340078781816850, -0.999341893714721820, -0.999343706149272150, -0.999345516085463180, -0.999347323523290370, -0.999349128462749370, -0.999350930903835420, +-0.999352730846544190, -0.999354528290871120, -0.999356323236811780, -0.999358115684361610, -0.999359905633516070, -0.999361693084270810, -0.999363478036621400, -0.999365260490563290, +-0.999367040446091930, -0.999368817903202980, -0.999370592861892120, -0.999372365322154680, -0.999374135283986330, -0.999375902747382640, -0.999377667712339160, -0.999379430178851560, +-0.999381190146915400, -0.999382947616526130, -0.999384702587679640, -0.999386455060371380, -0.999388205034596910, -0.999389952510352010, -0.999391697487632240, -0.999393439966433150, +-0.999395179946750420, -0.999396917428579830, -0.999398652411916940, -0.999400384896757420, -0.999402114883096940, -0.999403842370931160, -0.999405567360255760, -0.999407289851066420, +-0.999409009843358900, -0.999410727337128880, -0.999412442332372030, -0.999414154829084020, -0.999415864827260640, -0.999417572326897650, -0.999419277327990740, -0.999420979830535570, +-0.999422679834527930, -0.999424377339963590, -0.999426072346838450, -0.999427764855148060, -0.999429454864888210, -0.999431142376054680, -0.999432827388643360, -0.999434509902650040, +-0.999436189918070260, -0.999437867434900150, -0.999439542453135380, -0.999441214972771720, -0.999442884993805070, -0.999444552516231100, -0.999446217540045810, -0.999447880065244990, +-0.999449540091824410, -0.999451197619780070, -0.999452852649107660, -0.999454505179803170, -0.999456155211862370, -0.999457802745281290, -0.999459447780055580, -0.999461090316181240, +-0.999462730353654290, -0.999464367892470400, -0.999466002932625660, -0.999467635474115990, -0.999469265516937040, -0.999470893061085050, -0.999472518106555800, -0.999474140653345280, +-0.999475760701449390, -0.999477378250864130, -0.999478993301585410, -0.999480605853609210, -0.999482215906931430, -0.999483823461548180, -0.999485428517455250, -0.999487031074648870, +-0.999488631133124920, -0.999490228692879400, -0.999491823753908220, -0.999493416316207580, -0.999495006379773290, -0.999496593944601550, -0.999498179010688380, -0.999499761578029670, +-0.999501341646621630, -0.999502919216460170, -0.999504494287541510, -0.999506066859861540, -0.999507636933416380, -0.999509204508202130, -0.999510769584214920, -0.999512332161450750, +-0.999513892239905720, -0.999515449819576070, -0.999517004900457700, -0.999518557482546810, -0.999520107565839640, -0.999521655150332090, -0.999523200236020480, -0.999524742822900820, +-0.999526282910969340, -0.999527820500222040, -0.999529355590655370, -0.999530888182265210, -0.999532418275047800, -0.999533945868999350, -0.999535470964116100, -0.999536993560394160, +-0.999538513657829750, -0.999540031256418990, -0.999541546356158220, -0.999543058957043540, -0.999544569059071190, -0.999546076662237380, -0.999547581766538570, -0.999549084371970650, +-0.999550584478530070, -0.999552082086212930, -0.999553577195015700, -0.999555069804934470, -0.999556559915965590, -0.999558047528105400, -0.999559532641350000, -0.999561015255695740, +-0.999562495371138950, -0.999563972987675960, -0.999565448105303010, -0.999566920724016540, -0.999568390843812660, -0.999569858464687820, -0.999571323586638360, -0.999572786209660610, +-0.999574246333750800, -0.999575703958905490, -0.999577159085120790, -0.999578611712393260, -0.999580061840719240, -0.999581509470095050, -0.999582954600517050, -0.999584397231981780, +-0.999585837364485360, -0.999587274998024470, -0.999588710132595320, -0.999590142768194360, -0.999591572904818150, -0.999593000542462920, -0.999594425681125220, -0.999595848320801510, +-0.999597268461488110, -0.999598686103181480, -0.999600101245878280, -0.999601513889574740, -0.999602924034267430, -0.999604331679952770, -0.999605736826627340, -0.999607139474287590, +-0.999608539622929950, -0.999609937272550990, -0.999611332423147150, -0.999612725074714990, -0.999614115227251080, -0.999615502880751740, -0.999616888035213760, -0.999618270690633580, +-0.999619650847007660, -0.999621028504332540, -0.999622403662605020, -0.999623776321821420, -0.999625146481978310, -0.999626514143072460, -0.999627879305100220, -0.999629241968058360, +-0.999630602131943320, -0.999631959796751790, -0.999633314962480420, -0.999634667629125670, -0.999636017796684320, -0.999637365465152920, -0.999638710634528140, -0.999640053304806540, +-0.999641393475984800, -0.999642731148059570, -0.999644066321027540, -0.999645398994885250, -0.999646729169629600, -0.999648056845257040, -0.999649382021764450, -0.999650704699148300, +-0.999652024877405340, -0.999653342556532490, -0.999654657736526180, -0.999655970417383190, -0.999657280599100310, -0.999658588281674310, -0.999659893465101760, -0.999661196149379430, +-0.999662496334504210, -0.999663794020472670, -0.999665089207281700, -0.999666381894927960, -0.999667672083408340, -0.999668959772719520, -0.999670244962858280, -0.999671527653821390, +-0.999672807845605750, -0.999674085538208020, -0.999675360731625110, -0.999676633425853780, -0.999677903620890930, -0.999679171316733230, -0.999680436513377680, -0.999681699210820950, +-0.999682959409060050, -0.999684217108091740, -0.999685472307912940, -0.999686725008520400, -0.999687975209911040, -0.999689222912081730, -0.999690468115029370, -0.999691710818750860, +-0.999692951023243070, -0.999694188728502910, -0.999695423934527260, -0.999696656641313130, -0.999697886848857300, -0.999699114557156760, -0.999700339766208420, -0.999701562476009160, +-0.999702782686556100, -0.999704000397846020, -0.999705215609876020, -0.999706428322642890, -0.999707638536143750, -0.999708846250375480, -0.999710051465335090, -0.999711254181019580, +-0.999712454397425950, -0.999713652114551210, -0.999714847332392350, -0.999716040050946280, -0.999717230270210200, -0.999718417990181020, -0.999719603210855730, -0.999720785932231460, +-0.999721966154305310, -0.999723143877074170, -0.999724319100535160, -0.999725491824685400, -0.999726662049521870, -0.999727829775041710, -0.999728995001242020, -0.999730157728119790, +-0.999731317955672160, -0.999732475683896230, -0.999733630912789110, -0.999734783642347910, -0.999735933872569870, -0.999737081603451870, -0.999738226834991140, -0.999739369567184900, +-0.999740509800030260, -0.999741647533524350, -0.999742782767664260, -0.999743915502447230, -0.999745045737870490, -0.999746173473931020, -0.999747298710626180, -0.999748421447953170, +-0.999749541685909020, -0.999750659424490930, -0.999751774663696360, -0.999752887403522190, -0.999753997643965890, -0.999755105385024660, -0.999756210626695620, -0.999757313368976000, +-0.999758413611863130, -0.999759511355354240, -0.999760606599446540, -0.999761699344137390, -0.999762789589423880, -0.999763877335303470, -0.999764962581773390, -0.999766045328830840, +-0.999767125576473180, -0.999768203324697740, -0.999769278573501840, -0.999770351322882720, -0.999771421572837720, -0.999772489323364040, -0.999773554574459270, -0.999774617326120610, +-0.999775677578345400, -0.999776735331130980, -0.999777790584474690, -0.999778843338373970, -0.999779893592826150, -0.999780941347828580, -0.999781986603378580, -0.999783029359473720, +-0.999784069616111220, -0.999785107373288630, -0.999786142631003180, -0.999787175389252440, -0.999788205648033720, -0.999789233407344490, -0.999790258667182190, -0.999791281427544250, +-0.999792301688428140, -0.999793319449831190, -0.999794334711750940, -0.999795347474184970, -0.999796357737130600, -0.999797365500585290, -0.999798370764546580, -0.999799373529011940, +-0.999800373793978790, -0.999801371559444820, -0.999802366825407350, -0.999803359591864060, -0.999804349858812280, -0.999805337626249680, -0.999806322894173700, -0.999807305662581910, +-0.999808285931471860, -0.999809263700841110, -0.999810238970687220, -0.999811211741007730, -0.999812182011800220, -0.999813149783062240, -0.999814115054791340, -0.999815077826985200, +-0.999816038099641370, -0.999816995872757410, -0.999817951146330990, -0.999818903920359660, -0.999819854194841100, -0.999820801969772850, -0.999821747245152710, -0.999822690020978120, +-0.999823630297246750, -0.999824568073956370, -0.999825503351104650, -0.999826436128689040, -0.999827366406707440, -0.999828294185157400, -0.999829219464036580, -0.999830142243342770, +-0.999831062523073520, -0.999831980303226730, -0.999832895583799840, -0.999833808364790850, -0.999834718646197330, -0.999835626428016930, -0.999836531710247560, -0.999837434492886760, +-0.999838334775932420, -0.999839232559382230, -0.999840127843234060, -0.999841020627485480, -0.999841910912134260, -0.999842798697178400, -0.999843683982615470, -0.999844566768443350, +-0.999845447054659830, -0.999846324841262790, -0.999847200128249790, -0.999848072915618840, -0.999848943203367700, -0.999849810991494170, -0.999850676279996240, -0.999851539068871480, +-0.999852399358117980, -0.999853257147733430, -0.999854112437715710, -0.999854965228062720, -0.999855815518772340, -0.999856663309842460, -0.999857508601270870, -0.999858351393055460, +-0.999859191685194220, -0.999860029477685040, -0.999860864770525710, -0.999861697563714350, -0.999862527857248610, -0.999863355651126610, -0.999864180945346240, -0.999865003739905390, +-0.999865824034801950, -0.999866641830034040, -0.999867457125599550, -0.999868269921496360, -0.999869080217722580, -0.999869888014276010, -0.999870693311154750, -0.999871496108356790, +-0.999872296405880050, -0.999873094203722610, -0.999873889501882380, -0.999874682300357480, -0.999875472599145780, -0.999876260398245510, -0.999877045697654570, -0.999877828497370950, +-0.999878608797392760, -0.999879386597718130, -0.999880161898344940, -0.999880934699271420, -0.999881705000495560, -0.999882472802015480, -0.999883238103829060, -0.999884000905934660, +-0.999884761208330250, -0.999885519011013970, -0.999886274313983800, -0.999887027117238090, -0.999887777420774610, -0.999888525224591820, -0.999889270528687700, -0.999890013333060490, +-0.999890753637708070, -0.999891491442628900, -0.999892226747820970, -0.999892959553282390, -0.999893689859011500, -0.999894417665006420, -0.999895142971265140, -0.999895865777786110, +-0.999896586084567440, -0.999897303891607360, -0.999898019198903860, -0.999898732006455400, -0.999899442314260090, -0.999900150122316260, -0.999900855430621900, -0.999901558239175480, +-0.999902258547975210, -0.999902956357019200, -0.999903651666305900, -0.999904344475833430, -0.999905034785600110, -0.999905722595604170, -0.999906407905843950, -0.999907090716317670, +-0.999907771027023660, -0.999908448837960260, -0.999909124149125810, -0.999909796960518400, -0.999910467272136620, -0.999911135083978550, -0.999911800396042770, -0.999912463208327500, +-0.999913123520830950, -0.999913781333551690, -0.999914436646487940, -0.999915089459638030, -0.999915739773000520, -0.999916387586573530, -0.999917032900355720, -0.999917675714345200, +-0.999918316028540640, -0.999918953842940160, -0.999919589157542310, -0.999920221972345540, -0.999920852287348170, -0.999921480102548670, -0.999922105417945460, -0.999922728233537010, +-0.999923348549321740, -0.999923966365298120, -0.999924581681464590, -0.999925194497819580, -0.999925804814361550, -0.999926412631089060, -0.999927017948000540, -0.999927620765094450, +-0.999928221082369340, -0.999928818899823660, -0.999929414217455960, -0.999930007035264690, -0.999930597353248410, -0.999931185171405670, -0.999931770489734920, -0.999932353308234710, +-0.999932933626903720, -0.999933511445740280, -0.999934086764743160, -0.999934659583910810, -0.999935229903241800, -0.999935797722734660, -0.999936363042388090, -0.999936925862200620, +-0.999937486182170820, -0.999938044002297240, -0.999938599322578560, -0.999939152143013430, -0.999939702463600420, -0.999940250284338190, -0.999940795605225310, -0.999941338426260430, +-0.999941878747442230, -0.999942416568769250, -0.999942951890240290, -0.999943484711853900, -0.999944015033608860, -0.999944542855503830, -0.999945068177537370, -0.999945590999708260, +-0.999946111322015160, -0.999946629144456760, -0.999947144467031810, -0.999947657289739000, -0.999948167612577100, -0.999948675435544660, -0.999949180758640700, -0.999949683581863650, +-0.999950183905212400, -0.999950681728685730, -0.999951177052282420, -0.999951669876001040, -0.999952160199840570, -0.999952648023799680, -0.999953133347877170, -0.999953616172071790, +-0.999954096496382450, -0.999954574320807810, -0.999955049645346760, -0.999955522469998080, -0.999955992794760550, -0.999956460619633060, -0.999956925944614490, -0.999957388769703530, +-0.999957849094899150, -0.999958306920200050, -0.999958762245605310, -0.999959215071113520, -0.999959665396723870, -0.999960113222434940, -0.999960558548245730, -0.999961001374155110, +-0.999961441700162100, -0.999961879526265360, -0.999962314852464010, -0.999962747678756810, -0.999963178005142780, -0.999963605831620810, -0.999964031158189770, -0.999964453984848680, +-0.999964874311596530, -0.999965292138432100, -0.999965707465354400, -0.999966120292362540, -0.999966530619455400, -0.999966938446631870, -0.999967343773890960, -0.999967746601231780, +-0.999968146928653100, -0.999968544756154150, -0.999968940083733830, -0.999969332911391230, -0.999969723239125140, -0.999970111066934900, -0.999970496394819270, -0.999970879222777500, +-0.999971259550808460, -0.999971637378911260, -0.999972012707085020, -0.999972385535328740, -0.999972755863641430, -0.999973123692022290, -0.999973489020470340, -0.999973851848984690, +-0.999974212177564330, -0.999974570006208490, -0.999974925334916280, -0.999975278163686700, -0.999975628492518860, -0.999975976321412000, -0.999976321650365210, -0.999976664479377610, +-0.999977004808448420, -0.999977342637576650, -0.999977677966761510, -0.999978010796002240, -0.999978341125297930, -0.999978668954647710, -0.999978994284050790, -0.999979317113506520, +-0.999979637443013880, -0.999979955272572110, -0.999980270602180530, -0.999980583431838270, -0.999980893761544420, -0.999981201591298440, -0.999981506921099440, -0.999981809750946750, +-0.999982110080839480, -0.999982407910776860, -0.999982703240758330, -0.999982996070783000, -0.999983286400850100, -0.999983574230959070, -0.999983859561109130, -0.999984142391299510, +-0.999984422721529540, -0.999984700551798560, -0.999984975882105780, -0.999985248712450540, -0.999985519042832170, -0.999985786873250020, -0.999986052203703400, -0.999986315034191660, +-0.999986575364714140, -0.999986833195270150, -0.999987088525859160, -0.999987341356480370, -0.999987591687133250, -0.999987839517817110, -0.999988084848531520, -0.999988327679275590, +-0.999988568010048870, -0.999988805840850700, -0.999989041171680530, -0.999989274002537790, -0.999989504333421820, -0.999989732164332070, -0.999989957495268090, -0.999990180326229110, +-0.999990400657214780, -0.999990618488224350, -0.999990833819257460, -0.999991046650313460, -0.999991256981391800, -0.999991464812492010, -0.999991670143613560, -0.999991872974756000, +-0.999992073305918770, -0.999992271137101210, -0.999992466468303090, -0.999992659299523750, -0.999992849630762850, -0.999993037462019730, -0.999993222793294060, -0.999993405624585390, +-0.999993585955893050, -0.999993763787216830, -0.999993939118556270, -0.999994111949910840, -0.999994282281280070, -0.999994450112663640, -0.999994615444060990, -0.999994778275471900, +-0.999994938606895810, -0.999995096438332400, -0.999995251769781320, -0.999995404601242030, -0.999995554932714190, -0.999995702764197580, -0.999995848095691640, -0.999995990927196040, +-0.999996131258710560, -0.999996269090234650, -0.999996404421768180, -0.999996537253310610, -0.999996667584861720, -0.999996795416421170, -0.999996920747988630, -0.999997043579563760, +-0.999997163911146350, -0.999997281742736050, -0.999997397074332440, -0.999997509905935390, -0.999997620237544570, -0.999997728069159650, -0.999997833400780520, -0.999997936232406740, +-0.999998036564038070, -0.999998134395674420, -0.999998229727315340, -0.999998322558960710, -0.999998412890610310, -0.999998500722263820, -0.999998586053921110, -0.999998668885581980, +-0.999998749217246070, -0.999998827048913410, -0.999998902380583640, -0.999998975212256560, -0.999999045543932150, -0.999999113375609980, -0.999999178707290160, -0.999999241538972350, +-0.999999301870656440, -0.999999359702342220, -0.999999415034029670, -0.999999467865718580, -0.999999518197408730, -0.999999566029100230, -0.999999611360792740, -0.999999654192486150, +-0.999999694524180470, -0.999999732355875580, -0.999999767687571370, -0.999999800519267730, -0.999999830850964670, -0.999999858682661950, -0.999999884014359570, -0.999999906846057440, +-0.999999927177755650, -0.999999945009453990, -0.999999960341152460, -0.999999973172851050, -0.999999983504549660, -0.999999991336248390, -0.999999996667947140, -0.999999999499645800, +-0.999999999831344580, -0.999999997663043260, -0.999999992994741960, -0.999999985826440780, -0.999999976158139510, -0.999999963989838370, -0.999999949321537350, -0.999999932153236350, +-0.999999912484935580, -0.999999890316635050, -0.999999865648334760, -0.999999838480034820, -0.999999808811735340, -0.999999776643436310, -0.999999741975137750, -0.999999704806839970, +-0.999999665138542880, -0.999999622970246580, -0.999999578301951190, -0.999999531133656920, -0.999999481465363880, -0.999999429297072080, -0.999999374628781630, -0.999999317460492860, +-0.999999257792205780, -0.999999195623920480, -0.999999130955637310, -0.999999063787356150, -0.999998994119077440, -0.999998921950801200, -0.999998847282527750, -0.999998770114257090, +-0.999998690445989550, -0.999998608277725240, -0.999998523609464510, -0.999998436441207340, -0.999998346772954180, -0.999998254604705040, -0.999998159936460350, -0.999998062768220230, +-0.999997963099985010, -0.999997860931754800, -0.999997756263530050, -0.999997649095310860, -0.999997539427097460, -0.999997427258890290, -0.999997312590689580, -0.999997195422495540, +-0.999997075754308520, -0.999996953586128830, -0.999996828917956710, -0.999996701749792600, -0.999996572081636610, -0.999996439913489300, -0.999996305245350880, -0.999996168077221690, +-0.999996028409102070, -0.999995886240992340, -0.999995741572892950, -0.999995594404804120, -0.999995444736726410, -0.999995292568660040, -0.999995137900605460, -0.999994980732562990, +-0.999994821064533080, -0.999994658896516180, -0.999994494228512610, -0.999994327060522830, -0.999994157392547160, -0.999993985224586160, -0.999993810556640160, -0.999993633388709610, +-0.999993453720794960, -0.999993271552896750, -0.999993086885015310, -0.999992899717151220, -0.999992710049304790, -0.999992517881476690, -0.999992323213667270, -0.999992126045876950, +-0.999991926378106410, -0.999991724210355980, -0.999991519542626330, -0.999991312374917780, -0.999991102707231020, -0.999990890539566470, -0.999990675871924810, -0.999990458704306360, +-0.999990239036711690, -0.999990016869141570, -0.999989792201596340, -0.999989565034076540, -0.999989335366582970, -0.999989103199116050, -0.999988868531676230, -0.999988631364264410, +-0.999988391696880920, -0.999988149529526530, -0.999987904862201680, -0.999987657694907050, -0.999987408027643300, -0.999987155860411090, -0.999986901193210990, -0.999986644026043540, +-0.999986384358909630, -0.999986122191809600, -0.999985857524744340, -0.999985590357714500, -0.999985320690720550, -0.999985048523763350, -0.999984773856843590, -0.999984496689961920, +-0.999984217023118900, -0.999983934856315430, -0.999983650189552040, -0.999983363022829530, -0.999983073356148670, -0.999982781189510120, -0.999982486522914550, -0.999982189356362850, +-0.999981889689855570, -0.999981587523393720, -0.999981282856977740, -0.999980975690608620, -0.999980666024287150, -0.999980353858013870, -0.999980039191789790, -0.999979722025615580, +-0.999979402359492120, -0.999979080193420080, -0.999978755527400340, -0.999978428361433800, -0.999978098695521120, -0.999977766529663190, -0.999977431863860900, -0.999977094698115020, +-0.999976755032426330, -0.999976412866795840, -0.999976068201224310, -0.999975721035712530, -0.999975371370261490, -0.999975019204872080, -0.999974664539545090, -0.999974307374281390, +-0.999973947709081880, -0.999973585543947660, -0.999973220878879410, -0.999972853713878010, -0.999972484048944570, -0.999972111884079970, -0.999971737219285010, -0.999971360054560670, +-0.999970980389908060, -0.999970598225327860, -0.999970213560821270, -0.999969826396389090, -0.999969436732032310, -0.999969044567752040, -0.999968649903549060, -0.999968252739424580, +-0.999967853075379390, -0.999967450911414590, -0.999967046247531080, -0.999966639083730070, -0.999966229420012340, -0.999965817256379120, -0.999965402592831400, -0.999964985429370070, +-0.999964565765996350, -0.999964143602711240, -0.999963718939515630, -0.999963291776410860, -0.999962862113397800, -0.999962429950477680, -0.999961995287651400, -0.999961558124920160, +-0.999961118462284970, -0.999960676299747050, -0.999960231637307410, -0.999959784474967140, -0.999959334812727470, -0.999958882650589410, -0.999958427988554280, -0.999957970826622970, +-0.999957511164796700, -0.999957049003076690, -0.999956584341464170, -0.999956117179960020, -0.999955647518565690, -0.999955175357282180, -0.999954700696110810, -0.999954223535052590, +-0.999953743874108850, -0.999953261713280810, -0.999952777052569460, -0.999952289891976380, -0.999951800231502430, -0.999951308071148960, -0.999950813410917290, -0.999950316250808660, +-0.999949816590824050, -0.999949314430965020, -0.999948809771232680, -0.999948302611628370, -0.999947792952153300, -0.999947280792808700, -0.999946766133595900, -0.999946248974516120, +-0.999945729315570800, -0.999945207156761160, -0.999944682498088430, -0.999944155339554160, -0.999943625681159350, -0.999943093522905560, -0.999942558864794000, -0.999942021706826000, +-0.999941482049003020, -0.999940939891326260, -0.999940395233797190, -0.999939848076417110, -0.999939298419187490, -0.999938746262109550, -0.999938191605184710, -0.999937634448414550, +-0.999937074791800160, -0.999936512635343110, -0.999935947979044840, -0.999935380822906560, -0.999934811166929950, -0.999934239011116330, -0.999933664355467040, -0.999933087199983640, +-0.999932507544667450, -0.999931925389520030, -0.999931340734542820, -0.999930753579737260, -0.999930163925104810, -0.999929571770646900, -0.999928977116365190, -0.999928379962260920, +-0.999927780308335730, -0.999927178154591090, -0.999926573501028540, -0.999925966347649520, -0.999925356694455590, -0.999924744541448310, -0.999924129888629110, -0.999923512735999550, +-0.999922893083561300, -0.999922270931315800, -0.999921646279264610, -0.999921019127409270, -0.999920389475751350, -0.999919757324292610, -0.999919122673034290, -0.999918485521978260, +-0.999917845871126090, -0.999917203720479210, -0.999916559070039290, -0.999915911919808110, -0.999915262269787000, -0.999914610119977840, -0.999913955470382090, -0.999913298321001510, +-0.999912638671837660, -0.999911976522892210, -0.999911311874166820, -0.999910644725663160, -0.999909975077382880, -0.999909302929327670, -0.999908628281499180, -0.999907951133899080, +-0.999907271486529140, -0.999906589339391030, -0.999905904692486520, -0.999905217545817180, -0.999904527899384780, -0.999903835753191080, -0.999903141107237770, -0.999902443961526610, +-0.999901744316059380, -0.999901042170837750, -0.999900337525863600, -0.999899630381138490, -0.999898920736664310, -0.999898208592442940, -0.999897493948475930, -0.999896776804765300, +-0.999896057161312690, -0.999895335018119890, -0.999894610375188790, -0.999893883232521150, -0.999893153590118770, -0.999892421447983510, -0.999891686806117290, -0.999890949664521740, +-0.999890210023198890, -0.999889467882150500, -0.999888723241378450, -0.999887976100884530, -0.999887226460670740, -0.999886474320738850, -0.999885719681090860, -0.999884962541728430, +-0.999884202902653670, -0.999883440763868370, -0.999882676125374510, -0.999881908987174000, -0.999881139349268590, -0.999880367211660400, -0.999879592574351330, -0.999878815437343250, +-0.999878035800638170, -0.999877253664237850, -0.999876469028144530, -0.999875681892360090, -0.999874892256886310, -0.999874100121725400, -0.999873305486879140, -0.999872508352349750, +-0.999871708718139020, -0.999870906584248930, -0.999870101950681710, -0.999869294817439140, -0.999868485184523430, -0.999867673051936470, -0.999866858419680260, -0.999866041287757020, +-0.999865221656168530, -0.999864399524917120, -0.999863574894004680, -0.999862747763433200, -0.999861918133205020, -0.999861086003321910, -0.999860251373786200, -0.999859414244599790, +-0.999858574615764770, -0.999857732487283490, -0.999856887859157720, -0.999856040731389780, -0.999855191103981800, -0.999854338976935760, -0.999853484350254010, -0.999852627223938420, +-0.999851767597991210, -0.999850905472414730, -0.999850040847210960, -0.999849173722382020, -0.999848304097930130, -0.999847431973857610, -0.999846557350166370, -0.999845680226858820, +-0.999844800603937100, -0.999843918481403300, -0.999843033859259660, -0.999842146737508490, -0.999841257116152020, -0.999840364995192350, -0.999839470374631830, -0.999838573254472560, +-0.999837673634716870, -0.999836771515366980, -0.999835866896425230, -0.999834959777893720, -0.999834050159774890, -0.999833138042070860, -0.999832223424784060, -0.999831306307916610, +-0.999830386691470950, -0.999829464575449410, -0.999828539959854100, -0.999827612844687460, -0.999826683229951830, -0.999825751115649420, -0.999824816501782680, -0.999823879388353930, +-0.999822939775365400, -0.999821997662819540, -0.999821053050718780, -0.999820105939065340, -0.999819156327861560, -0.999818204217109980, -0.999817249606812840, -0.999816292496972570, +-0.999815332887591610, -0.999814370778672300, -0.999813406170217080, -0.999812439062228280, -0.999811469454708450, -0.999810497347659920, -0.999809522741085140, -0.999808545634986560, +-0.999807566029366710, -0.999806583924227830, -0.999805599319572470, -0.999804612215403180, -0.999803622611722400, -0.999802630508532460, -0.999801635905836040, -0.999800638803635460, +-0.999799639201933270, -0.999798637100732020, -0.999797632500034170, -0.999796625399842260, -0.999795615800158740, -0.999794603700986270, -0.999793589102327180, -0.999792572004184250, +-0.999791552406559810, -0.999790530309456420, -0.999789505712876840, -0.999788478616823410, -0.999787449021298790, -0.999786416926305650, -0.999785382331846330, -0.999784345237923590, +-0.999783305644539990, -0.999782263551698190, -0.999781218959400640, -0.999780171867650110, -0.999779122276449160, -0.999778070185800340, -0.999777015595706420, -0.999775958506169850, +-0.999774898917193510, -0.999773836828779850, -0.999772772240931640, -0.999771705153651440, -0.999770635566942010, -0.999769563480806030, -0.999768488895246050, -0.999767411810264960, +-0.999766332225865310, -0.999765250142049760, -0.999764165558821080, -0.999763078476182070, -0.999761988894135370, -0.999760896812683650, -0.999759802231829700, -0.999758705151576280, +-0.999757605571926060, -0.999756503492881810, -0.999755398914446310, -0.999754291836622340, -0.999753182259412570, -0.999752070182819860, -0.999750955606847010, -0.999749838531496790, +-0.999748718956771980, -0.999747596882675340, -0.999746472309209770, -0.999745345236377920, -0.999744215664182810, -0.999743083592627090, -0.999741949021713650, -0.999740811951445370, +-0.999739672381825040, -0.999738530312855640, -0.999737385744539740, -0.999736238676880550, -0.999735089109880630, -0.999733937043542960, -0.999732782477870560, -0.999731625412866200, +-0.999730465848532760, -0.999729303784873120, -0.999728139221890190, -0.999726972159586950, -0.999725802597966280, -0.999724630537031200, -0.999723455976784470, -0.999722278917229090, +-0.999721099358367950, -0.999719917300204150, -0.999718732742740480, -0.999717545685980040, -0.999716356129925710, -0.999715164074580500, -0.999713969519947400, -0.999712772466029410, +-0.999711572912829420, -0.999710370860350530, -0.999709166308595740, -0.999707959257567950, -0.999706749707270360, -0.999705537657705870, -0.999704323108877470, -0.999703106060788270, +-0.999701886513441380, -0.999700664466839690, -0.999699439920986420, -0.999698212875884560, -0.999696983331537110, -0.999695751287947190, -0.999694516745117890, -0.999693279703052330, +-0.999692040161753610, -0.999690798121224740, -0.999689553581468940, -0.999688306542489190, -0.999687057004288620, -0.999685804966870540, -0.999684550430237850, -0.999683293394393770, +-0.999682033859341510, -0.999680771825084190, -0.999679507291624910, -0.999678240258966900, -0.999676970727113260, -0.999675698696067090, -0.999674424165831850, -0.999673147136410420, +-0.999671867607806240, -0.999670585580022310, -0.999669301053061950, -0.999668014026928290, -0.999666724501624640, -0.999665432477154110, -0.999664137953520050, -0.999662840930725660, +-0.999661541408774170, -0.999660239387668790, -0.999658934867412860, -0.999657627848009600, -0.999656318329462220, -0.999655006311774060, -0.999653691794948340, -0.999652374778988500, +-0.999651055263897640, -0.999649733249679210, -0.999648408736336310, -0.999647081723872510, -0.999645752212291020, -0.999644420201595050, -0.999643085691788170, -0.999641748682873480, +-0.999640409174854420, -0.999639067167734320, -0.999637722661516630, -0.999636375656204560, -0.999635026151801550, -0.999633674148311060, -0.999632319645736290, -0.999630962644080800, +-0.999629603143347810, -0.999628241143540870, -0.999626876644663320, -0.999625509646718590, -0.999624140149710130, -0.999622768153641260, -0.999621393658515430, -0.999620016664336200, +-0.999618637171106880, -0.999617255178831040, -0.999615870687512010, -0.999614483697153220, -0.999613094207758350, -0.999611702219330710, -0.999610307731873760, -0.999608910745391040, +-0.999607511259886120, -0.999606109275362420, -0.999604704791823400, -0.999603297809272600, -0.999601888327713680, -0.999600476347149880, -0.999599061867584960, -0.999597644889022360, +-0.999596225411465760, -0.999594803434918470, -0.999593378959384160, -0.999591951984866500, -0.999590522511368930, -0.999589090538895000, -0.999587656067448370, -0.999586219097032710, +-0.999584779627651350, -0.999583337659308070, -0.999581893192006520, -0.999580446225750150, -0.999578996760542740, -0.999577544796387830, -0.999576090333288980, -0.999574633371249970, +-0.999573173910274450, -0.999571711950365870, -0.999570247491528010, -0.999568780533764630, -0.999567311077079190, -0.999565839121475560, -0.999564364666957310, -0.999562887713528080, +-0.999561408261191780, -0.999559926309951830, -0.999558441859812130, -0.999556954910776230, -0.999555465462848130, -0.999553973516031150, -0.999552479070329400, -0.999550982125746330, +-0.999549482682285940, -0.999547980739951770, -0.999546476298747600, -0.999544969358677320, -0.999543459919744580, -0.999541947981953170, -0.999540433545306860, -0.999538916609809540, +-0.999537397175464970, -0.999535875242276830, -0.999534350810248990, -0.999532823879385360, -0.999531294449689580, -0.999529762521165650, -0.999528228093817250, -0.999526691167648250, +-0.999525151742662540, -0.999523609818864010, -0.999522065396256430, -0.999520518474843690, -0.999518969054629670, -0.999517417135618150, -0.999515862717813120, -0.999514305801218470, +-0.999512746385838090, -0.999511184471675750, -0.999509620058735560, -0.999508053147021180, -0.999506483736536830, -0.999504911827286180, -0.999503337419273220, -0.999501760512501950, +-0.999500181106976250, -0.999498599202700120, -0.999497014799677560, -0.999495427897912350, -0.999493838497408690, -0.999492246598170380, -0.999490652200201390, -0.999489055303505850, +-0.999487455908087630, -0.999485854013950850, -0.999484249621099270, -0.999482642729537240, -0.999481033339268520, -0.999479421450297220, -0.999477807062627340, -0.999476190176262990, +-0.999474570791208160, -0.999472948907466960, -0.999471324525043280, -0.999469697643941330, -0.999468068264165120, -0.999466436385718750, -0.999464802008606320, -0.999463165132831950, +-0.999461525758399530, -0.999459883885313370, -0.999458239513577480, -0.999456592643195970, -0.999454943274173060, -0.999453291406512730, -0.999451637040219110, -0.999449980175296520, +-0.999448320811748840, -0.999446658949580510, -0.999444994588795430, -0.999443327729397920, -0.999441658371392090, -0.999439986514782050, -0.999438312159572130, -0.999436635305766430, +-0.999434955953369060, -0.999433274102384360, -0.999431589752816430, -0.999429902904669600, -0.999428213557947980, -0.999426521712655780, -0.999424827368797340, -0.999423130526376770, +-0.999421431185398390, -0.999419729345866430, -0.999418025007785200, -0.999416318171158840, -0.999414608835991760, -0.999412897002288080, -0.999411182670052240, -0.999409465839288360, +-0.999407746510000860, -0.999406024682193970, -0.999404300355872130, -0.999402573531039450, -0.999400844207700260, -0.999399112385859100, -0.999397378065520090, -0.999395641246687560, +-0.999393901929366060, -0.999392160113559800, -0.999390415799273010, -0.999388668986510350, -0.999386919675275930, -0.999385167865574190, -0.999383413557409560, -0.999381656750786380, +-0.999379897445709100, -0.999378135642182030, -0.999376371340209620, -0.999374604539796320, -0.999372835240946440, -0.999371063443664550, -0.999369289147954980, -0.999367512353822150, +-0.999365733061270630, -0.999363951270304750, -0.999362166980928950, -0.999360380193147770, -0.999358590906965550, -0.999356799122386950, -0.999355004839416310, -0.999353208058058160, +-0.999351408778316960, -0.999349607000197260, -0.999347802723703600, -0.999345995948840440, -0.999344186675612200, -0.999342374904023560, -0.999340560634078940, -0.999338743865782920, +-0.999336924599140140, -0.999335102834154940, -0.999333278570831980, -0.999331451809175930, -0.999329622549191110, -0.999327790790882410, -0.999325956534254050, -0.999324119779310900, +-0.999322280526057430, -0.999320438774498280, -0.999318594524638000, -0.999316747776481270, -0.999314898530032520, -0.999313046785296750, -0.999311192542278180, -0.999309335800981800, +-0.999307476561411940, -0.999305614823573500, -0.999303750587470900, -0.999301883853109030, -0.999300014620492450, -0.999298142889625710, -0.999296268660513690, -0.999294391933161050, +-0.999292512707572360, -0.999290630983752480, -0.999288746761705980, -0.999286860041437520, -0.999284970822951980, -0.999283079106254020, -0.999281184891348430, -0.999279288178239740, +-0.999277388966932970, -0.999275487257432650, -0.999273583049743560, -0.999271676343870600, -0.999269767139818410, -0.999267855437591780, -0.999265941237195590, -0.999264024538634500, +-0.999262105341913400, -0.999260183647036950, -0.999258259454010030, -0.999256332762837540, -0.999254403573524240, -0.999252471886074910, -0.999250537700494320, -0.999248601016787470, +-0.999246661834959140, -0.999244720155014090, -0.999242775976957210, -0.999240829300793500, -0.999238880126527620, -0.999236928454164560, -0.999234974283709220, -0.999233017615166360, +-0.999231058448540990, -0.999229096783837980, -0.999227132621062330, -0.999225165960218710, -0.999223196801312220, -0.999221225144347750, -0.999219250989330290, -0.999217274336264620, +-0.999215295185155730, -0.999213313536008730, -0.999211329388828280, -0.999209342743619610, -0.999207353600387590, -0.999205361959137120, -0.999203367819873290, -0.999201371182601110, +-0.999199372047325340, -0.999197370414051210, -0.999195366282783710, -0.999193359653527740, -0.999191350526288380, -0.999189338901070760, -0.999187324777879640, -0.999185308156720240, +-0.999183289037597680, -0.999181267420516720, -0.999179243305482690, -0.999177216692500590, -0.999175187581575310, -0.999173155972712170, -0.999171121865916170, -0.999169085261192300, +-0.999167046158545680, -0.999165004557981520, -0.999162960459504810, -0.999160913863120780, -0.999158864768834420, -0.999156813176650840, -0.999154759086575250, -0.999152702498612880, +-0.999150643412768600, -0.999148581829047750, -0.999146517747455440, -0.999144451167996880, -0.999142382090677180, -0.999140310515501560, -0.999138236442475130, -0.999136159871603090, +-0.999134080802890680, -0.999131999236342990, -0.999129915171965370, -0.999127828609763010, -0.999125739549741040, -0.999123647991904670, -0.999121553936259230, -0.999119457382809940, +-0.999117358331561900, -0.999115256782520560, -0.999113152735691010, -0.999111046191078600, -0.999108937148688650, -0.999106825608526260, -0.999104711570596770, -0.999102595034905620, +-0.999100476001457900, -0.999098354470259080, -0.999096230441314350, -0.999094103914628940, -0.999091974890208400, -0.999089843368057840, -0.999087709348182700, -0.999085572830588300, +-0.999083433815279980, -0.999081292302263060, -0.999079148291542870, -0.999077001783124860, -0.999074852777014350, -0.999072701273216680, -0.999070547271737270, -0.999068390772581470, +-0.999066231775754710, -0.999064070281262430, -0.999061906289109850, -0.999059739799302630, -0.999057570811845990, -0.999055399326745470, -0.999053225344006420, -0.999051048863634270, +-0.999048869885634460, -0.999046688410012650, -0.999044504436773950, -0.999042317965924130, -0.999040128997468410, -0.999037937531412350, -0.999035743567761480, -0.999033547106521370, +-0.999031348147697230, -0.999029146691294830, -0.999026942737319510, -0.999024736285776820, -0.999022527336672290, -0.999020315890011500, -0.999018101945799870, -0.999015885504042970, +-0.999013666564746440, -0.999011445127915620, -0.999009221193556280, -0.999006994761673870, -0.999004765832273930, -0.999002534405362130, -0.999000300480944010, -0.998998064059025140, +-0.998995825139611050, -0.998993583722707410, -0.998991339808319890, -0.998989093396453920, -0.998986844487115280, -0.998984593080309510, -0.998982339176042180, -0.998980082774319160, +-0.998977823875145780, -0.998975562478527920, -0.998973298584471150, -0.998971032192981110, -0.998968763304063590, -0.998966491917724020, -0.998964218033968290, -0.998961941652802050, +-0.998959662774230870, -0.998957381398260620, -0.998955097524896860, -0.998952811154145360, -0.998950522286011890, -0.998948230920502000, -0.998945937057621580, -0.998943640697376400, +-0.998941341839772010, -0.998939040484814410, -0.998936736632509040, -0.998934430282861880, -0.998932121435878730, -0.998929810091565230, -0.998927496249927160, -0.998925179910970410, +-0.998922861074700630, -0.998920539741123830, -0.998918215910245540, -0.998915889582071780, -0.998913560756608310, -0.998911229433860900, -0.998908895613835450, -0.998906559296537710, +-0.998904220481973580, -0.998901879170148940, -0.998899535361069570, -0.998897189054741340, -0.998894840251170260, -0.998892488950361980, -0.998890135152322500, -0.998887778857057710, +-0.998885420064573370, -0.998883058774875600, -0.998880694987970160, -0.998878328703862950, -0.998875959922559840, -0.998873588644066950, -0.998871214868390030, -0.998868838595535210, +-0.998866459825508150, -0.998864078558314940, -0.998861694793961590, -0.998859308532453970, -0.998856919773798090, -0.998854528517999940, -0.998852134765065400, -0.998849738515000580, +-0.998847339767811480, -0.998844938523503870, -0.998842534782084070, -0.998840128543557750, -0.998837719807931230, -0.998835308575210410, -0.998832894845401390, -0.998830478618510040, +-0.998828059894542490, -0.998825638673504710, -0.998823214955402940, -0.998820788740243160, -0.998818360028031370, -0.998815928818773680, -0.998813495112476190, -0.998811058909145010, +-0.998808620208786140, -0.998806179011405670, -0.998803735317009720, -0.998801289125604510, -0.998798840437196020, -0.998796389251790480, -0.998793935569394000, -0.998791479390012670, +-0.998789020713652500, -0.998786559540319920, -0.998784095870020930, -0.998781629702761740, -0.998779161038548360, -0.998776689877387210, -0.998774216219284190, -0.998771740064245740, +-0.998769261412277950, -0.998766780263386830, -0.998764296617578930, -0.998761810474860230, -0.998759321835237080, -0.998756830698715570, -0.998754337065302030, -0.998751840935002470, +-0.998749342307823530, -0.998746841183771110, -0.998744337562851640, -0.998741831445071340, -0.998739322830436430, -0.998736811718953230, -0.998734298110627970, -0.998731782005466970, +-0.998729263403476450, -0.998726742304662850, -0.998724218709032390, -0.998721692616591380, -0.998719164027346170, -0.998716632941303080, -0.998714099358468330, -0.998711563278848360, +-0.998709024702449490, -0.998706483629278050, -0.998703940059340380, -0.998701393992642910, -0.998698845429191850, -0.998696294368993760, -0.998693740812054980, -0.998691184758381810, +-0.998688626207980600, -0.998686065160857890, -0.998683501617020020, -0.998680935576473420, -0.998678367039224410, -0.998675796005279450, -0.998673222474645180, -0.998670646447327730, +-0.998668067923333620, -0.998665486902669430, -0.998662903385341580, -0.998660317371356410, -0.998657728860720350, -0.998655137853440070, -0.998652544349521890, -0.998649948348972360, +-0.998647349851798040, -0.998644748858005250, -0.998642145367600650, -0.998639539380590690, -0.998636930896981800, -0.998634319916780640, -0.998631706439993660, -0.998629090466627510, +-0.998626471996688530, -0.998623851030183360, -0.998621227567118690, -0.998618601607500820, -0.998615973151336540, -0.998613342198632290, -0.998610708749394620, -0.998608072803630180, +-0.998605434361345630, -0.998602793422547430, -0.998600149987242340, -0.998597504055436790, -0.998594855627137570, -0.998592204702351110, -0.998589551281084180, -0.998586895363343440, +-0.998584236949135340, -0.998581576038466760, -0.998578912631344240, -0.998576246727774340, -0.998573578327763830, -0.998570907431319490, -0.998568234038447740, -0.998565558149155490, +-0.998562879763449370, -0.998560198881335960, -0.998557515502822120, -0.998554829627914420, -0.998552141256619730, -0.998549450388944710, -0.998546757024896040, -0.998544061164480360, +-0.998541362807704670, -0.998538661954575520, -0.998535958605099690, -0.998533252759284060, -0.998530544417135180, -0.998527833578660040, -0.998525120243865190, -0.998522404412757640, +-0.998519686085344140, -0.998516965261631250, -0.998514241941626080, -0.998511516125335290, -0.998508787812765640, -0.998506057003924030, -0.998503323698817340, -0.998500587897452330, +-0.998497849599835900, -0.998495108805974700, -0.998492365515875830, -0.998489619729546090, -0.998486871446992220, -0.998484120668221120, -0.998481367393239780, -0.998478611622055090, +-0.998475853354673810, -0.998473092591102840, -0.998470329331349270, -0.998467563575419770, -0.998464795323321440, -0.998462024575061060, -0.998459251330645610, -0.998456475590082100, +-0.998453697353377410, -0.998450916620538420, -0.998448133391572120, -0.998445347666485520, -0.998442559445285480, -0.998439768727979130, -0.998436975514573330, -0.998434179805075210, +-0.998431381599491520, -0.998428580897829270, -0.998425777700095770, -0.998422972006297700, -0.998420163816442270, -0.998417353130536370, -0.998414539948587200, -0.998411724270601540, +-0.998408906096586720, -0.998406085426549520, -0.998403262260497140, -0.998400436598436580, -0.998397608440374950, -0.998394777786319240, -0.998391944636276670, -0.998389108990254240, +-0.998386270848258930, -0.998383430210298070, -0.998380587076378560, -0.998377741446507700, -0.998374893320692400, -0.998372042698939870, -0.998369189581257200, -0.998366333967651620, +-0.998363475858130120, -0.998360615252699920, -0.998357752151368350, -0.998354886554142280, -0.998352018461028940, -0.998349147872035660, -0.998346274787169530, -0.998343399206437550, +-0.998340521129847280, -0.998337640557405590, -0.998334757489119820, -0.998331871924997170, -0.998328983865044760, -0.998326093309270020, -0.998323200257679950, -0.998320304710281990, +-0.998317406667083130, -0.998314506128090810, -0.998311603093312240, -0.998308697562754640, -0.998305789536425350, -0.998302879014331570, -0.998299965996480520, -0.998297050482879530, +-0.998294132473536040, -0.998291211968457160, -0.998288288967650320, -0.998285363471122620, -0.998282435478881620, -0.998279504990934540, -0.998276572007288700, -0.998273636527951310, +-0.998270698552929940, -0.998267758082231780, -0.998264815115864290, -0.998261869653834680, -0.998258921696150380, -0.998255971242818840, -0.998253018293847380, -0.998250062849243340, +-0.998247104909014140, -0.998244144473167230, -0.998241181541709930, -0.998238216114649690, -0.998235248191993830, -0.998232277773749900, -0.998229304859925340, -0.998226329450527360, +-0.998223351545563740, -0.998220371145041700, -0.998217388248968660, -0.998214402857352190, -0.998211414970199720, -0.998208424587518680, -0.998205431709316530, -0.998202436335600910, +-0.998199438466379150, -0.998196438101658810, -0.998193435241447440, -0.998190429885752350, -0.998187422034581330, -0.998184411687941700, -0.998181398845840890, -0.998178383508286800, +-0.998175365675286640, -0.998172345346848070, -0.998169322522978630, -0.998166297203685990, -0.998163269388977480, -0.998160239078860760, -0.998157206273343590, -0.998154170972433310, +-0.998151133176137680, -0.998148092884464160, -0.998145050097420490, -0.998142004815014030, -0.998138957037252750, -0.998135906764143990, -0.998132853995695400, -0.998129798731914760, +-0.998126740972809510, -0.998123680718387530, -0.998120617968656370, -0.998117552723623570, -0.998114484983296910, -0.998111414747684060, -0.998108342016792660, -0.998105266790630390, +-0.998102189069205000, -0.998099108852524180, -0.998096026140595450, -0.998092940933426710, -0.998089853231025730, -0.998086763033399940, -0.998083670340557340, -0.998080575152505590, +-0.998077477469252350, -0.998074377290805390, -0.998071274617172600, -0.998068169448361520, -0.998065061784380040, -0.998061951625235920, -0.998058838970936950, -0.998055723821490770, +-0.998052606176905390, -0.998049486037188460, -0.998046363402347870, -0.998043238272391280, -0.998040110647326560, -0.998036980527161720, -0.998033847911904300, -0.998030712801562410, +-0.998027575196143600, -0.998024435095655860, -0.998021292500107070, -0.998018147409505010, -0.998014999823857660, -0.998011849743172810, -0.998008697167458210, -0.998005542096721990, +-0.998002384530971900, -0.997999224470215830, -0.997996061914461660, -0.997992896863717390, -0.997989729317990790, -0.997986559277289960, -0.997983386741622790, -0.997980211710997040, +-0.997977034185420830, -0.997973854164901920, -0.997970671649448420, -0.997967486639068310, -0.997964299133769490, -0.997961109133559840, -0.997957916638447460, -0.997954721648440350, +-0.997951524163546380, -0.997948324183773550, -0.997945121709129970, -0.997941916739623510, -0.997938709275262400, -0.997935499316054410, -0.997932286862007740, -0.997929071913130290, +-0.997925854469430160, -0.997922634530915450, -0.997919412097594050, -0.997916187169474280, -0.997912959746563910, -0.997909729828871160, -0.997906497416404140, -0.997903262509170830, +-0.997900025107179460, -0.997896785210437900, -0.997893542818954370, -0.997890297932737090, -0.997887050551794050, -0.997883800676133360, -0.997880548305763120, -0.997877293440691650, +-0.997874036080926730, -0.997870776226476910, -0.997867513877350070, -0.997864249033554420, -0.997860981695098180, -0.997857711861989460, -0.997854439534236580, -0.997851164711847430, +-0.997847887394830550, -0.997844607583193710, -0.997841325276945580, -0.997838040476094030, -0.997834753180647400, -0.997831463390613900, -0.997828171106001750, -0.997824876326819040, +-0.997821579053074340, -0.997818279284775620, -0.997814977021931120, -0.997811672264549250, -0.997808365012638250, -0.997805055266206330, -0.997801743025261700, -0.997798428289812690, +-0.997795111059867620, -0.997791791335434830, -0.997788469116522530, -0.997785144403139150, -0.997781817195292800, -0.997778487492991920, -0.997775155296244830, -0.997771820605059870, +-0.997768483419445350, -0.997765143739409610, -0.997761801564961080, -0.997758456896107980, -0.997755109732858750, -0.997751760075221710, -0.997748407923205290, -0.997745053276817950, +-0.997741696136067780, -0.997738336500963550, -0.997734974371513370, -0.997731609747725790, -0.997728242629609240, -0.997724873017171940, -0.997721500910422550, -0.997718126309369510, +-0.997714749214021030, -0.997711369624385670, -0.997707987540471960, -0.997704602962288250, -0.997701215889843060, -0.997697826323144850, -0.997694434262201950, -0.997691039707023000, +-0.997687642657616560, -0.997684243113990950, -0.997680841076154730, -0.997677436544116340, -0.997674029517884420, -0.997670619997467420, -0.997667207982873890, -0.997663793474112380, +-0.997660376471191320, -0.997656956974119270, -0.997653534982904990, -0.997650110497556700, -0.997646683518083280, -0.997643254044493060, -0.997639822076794690, -0.997636387614996840, +-0.997632950659107950, -0.997629511209136790, -0.997626069265091790, -0.997622624826981610, -0.997619177894814800, -0.997615728468600140, -0.997612276548346060, -0.997608822134061430, +-0.997605365225754710, -0.997601905823434550, -0.997598443927109610, -0.997594979536788550, -0.997591512652480030, -0.997588043274192700, -0.997584571401935350, -0.997581097035716620, +-0.997577620175545080, -0.997574140821429480, -0.997570658973378490, -0.997567174631400880, -0.997563687795505310, -0.997560198465700650, -0.997556706641995360, -0.997553212324398420, +-0.997549715512918380, -0.997546216207564010, -0.997542714408344190, -0.997539210115267470, -0.997535703328342850, -0.997532194047578870, -0.997528682272984410, -0.997525168004568360, +-0.997521651242339270, -0.997518131986306120, -0.997514610236477580, -0.997511085992862530, -0.997507559255469740, -0.997504030024308210, -0.997500498299386470, -0.997496964080713530, +-0.997493427368298160, -0.997489888162149230, -0.997486346462275520, -0.997482802268686020, -0.997479255581389500, -0.997475706400394850, -0.997472154725710820, -0.997468600557346540, +-0.997465043895310770, -0.997461484739612380, -0.997457923090260160, -0.997454358947263200, -0.997450792310630390, -0.997447223180370490, -0.997443651556492620, -0.997440077439005650, +-0.997436500827918460, -0.997432921723240050, -0.997429340124979300, -0.997425756033145090, -0.997422169447746640, -0.997418580368792720, -0.997414988796292310, -0.997411394730254530, +-0.997407798170688140, -0.997404199117602250, -0.997400597571005960, -0.997396993530908160, -0.997393386997317940, -0.997389777970244080, -0.997386166449695910, -0.997382552435682300, +-0.997378935928212360, -0.997375316927294970, -0.997371695432939240, -0.997368071445154380, -0.997364444963949380, -0.997360815989333240, -0.997357184521315050, -0.997353550559903820, +-0.997349914105108760, -0.997346275156938970, -0.997342633715403440, -0.997338989780511390, -0.997335343352271810, -0.997331694430693920, -0.997328043015786700, -0.997324389107559490, +-0.997320732706021170, -0.997317073811181180, -0.997313412423048270, -0.997309748541632010, -0.997306082166941390, -0.997302413298985500, -0.997298741937773680, -0.997295068083314810, +-0.997291391735618430, -0.997287712894693530, -0.997284031560549340, -0.997280347733195070, -0.997276661412639930, -0.997272972598893250, -0.997269281291964020, -0.997265587491861560, +-0.997261891198595210, -0.997258192412174060, -0.997254491132607450, -0.997250787359904690, -0.997247081094074890, -0.997243372335127390, -0.997239661083071490, -0.997235947337916320, +-0.997232231099671410, -0.997228512368345870, -0.997224791143949130, -0.997221067426490300, -0.997217341215978940, -0.997213612512424130, -0.997209881315835320, -0.997206147626221840, +-0.997202411443592780, -0.997198672767957930, -0.997194931599326260, -0.997191187937707340, -0.997187441783110470, -0.997183693135545000, -0.997179941995020140, -0.997176188361545650, +-0.997172432235130520, -0.997168673615784430, -0.997164912503516580, -0.997161148898336510, -0.997157382800253460, -0.997153614209277060, -0.997149843125416660, -0.997146069548681460, +-0.997142293479081230, -0.997138514916625200, -0.997134733861323010, -0.997130950313183880, -0.997127164272217370, -0.997123375738432900, -0.997119584711840150, -0.997115791192448310, +-0.997111995180267050, -0.997108196675305810, -0.997104395677574030, -0.997100592187081360, -0.997096786203837130, -0.997092977727850990, -0.997089166759132390, -0.997085353297690770, +-0.997081537343535770, -0.997077718896677070, -0.997073897957123980, -0.997070074524886160, -0.997066248599973170, -0.997062420182394550, -0.997058589272159850, -0.997054755869278720, +-0.997050919973760720, -0.997047081585615390, -0.997043240704852400, -0.997039397331481280, -0.997035551465511590, -0.997031703106953100, -0.997027852255815360, -0.997023998912107910, +-0.997020143075840530, -0.997016284747022860, -0.997012423925664360, -0.997008560611774900, -0.997004694805363910, -0.997000826506441280, -0.996996955715016560, -0.996993082431099410, +-0.996989206654699590, -0.996985328385826760, -0.996981447624490700, -0.996977564370700950, -0.996973678624467290, -0.996969790385799250, -0.996965899654706940, -0.996962006431199920, +-0.996958110715287730, -0.996954212506980350, -0.996950311806287460, -0.996946408613218700, -0.996942502927783970, -0.996938594749993020, -0.996934684079855530, -0.996930770917381360, +-0.996926855262580290, -0.996922937115462090, -0.996919016476036530, -0.996915093344313390, -0.996911167720302530, -0.996907239604013730, -0.996903308995456870, -0.996899375894641730, +-0.996895440301578170, -0.996891502216275980, -0.996887561638744920, -0.996883618568995100, -0.996879673007036280, -0.996875724952878130, -0.996871774406530850, -0.996867821368004000, +-0.996863865837307680, -0.996859907814451660, -0.996855947299445820, -0.996851984292300150, -0.996848018793024430, -0.996844050801628740, -0.996840080318122990, -0.996836107342517040, +-0.996832131874820780, -0.996828153915044090, -0.996824173463197070, -0.996820190519289720, -0.996816205083331800, -0.996812217155333410, -0.996808226735304450, -0.996804233823255000, +-0.996800238419194850, -0.996796240523134200, -0.996792240135082940, -0.996788237255050950, -0.996784231883048430, -0.996780224019085390, -0.996776213663171820, -0.996772200815317590, +-0.996768185475532920, -0.996764167643827800, -0.996760147320212230, -0.996756124504696310, -0.996752099197290130, -0.996748071398003700, -0.996744041106847000, -0.996740008323830250, +-0.996735973048963550, -0.996731935282256790, -0.996727895023720280, -0.996723852273363910, -0.996719807031198110, -0.996715759297232660, -0.996711709071477880, -0.996707656353943760, +-0.996703601144640410, -0.996699543443578250, -0.996695483250767180, -0.996691420566217290, -0.996687355389939020, -0.996683287721942260, -0.996679217562237320, -0.996675144910834310, +-0.996671069767743440, -0.996666992132974830, -0.996662912006538890, -0.996658829388445520, -0.996654744278705150, -0.996650656677328000, -0.996646566584324160, -0.996642473999703740, +-0.996638378923477290, -0.996634281355654910, -0.996630181296246810, -0.996626078745263210, -0.996621973702714440, -0.996617866168610700, -0.996613756142962330, -0.996609643625779640, +-0.996605528617072740, -0.996601411116851970, -0.996597291125127850, -0.996593168641910390, -0.996589043667210020, -0.996584916201037060, -0.996580786243401740, -0.996576653794314480, +-0.996572518853785620, -0.996568381421825470, -0.996564241498444360, -0.996560099083652620, -0.996555954177460680, -0.996551806779878870, -0.996547656890917510, -0.996543504510587040, +-0.996539349638897680, -0.996535192275860070, -0.996531032421484440, -0.996526870075781220, -0.996522705238760850, -0.996518537910433650, -0.996514368090810180, -0.996510195779900850, +-0.996506020977715900, -0.996501843684265980, -0.996497663899561400, -0.996493481623612730, -0.996489296856430400, -0.996485109598024720, -0.996480919848406250, -0.996476727607585430, +-0.996472532875572910, -0.996468335652379020, -0.996464135938014310, -0.996459933732489310, -0.996455729035814470, -0.996451521848000120, -0.996447312169057130, -0.996443099998995830, +-0.996438885337826760, -0.996434668185560590, -0.996430448542207640, -0.996426226407778560, -0.996422001782284020, -0.996417774665734330, -0.996413545058140280, -0.996409312959512410, +-0.996405078369861140, -0.996400841289197260, -0.996396601717531310, -0.996392359654873830, -0.996388115101235370, -0.996383868056626600, -0.996379618521058270, -0.996375366494540950, +-0.996371111977085060, -0.996366854968701480, -0.996362595469400760, -0.996358333479193560, -0.996354068998090540, -0.996349802026102350, -0.996345532563239540, -0.996341260609512890, +-0.996336986164933270, -0.996332709229511120, -0.996328429803257090, -0.996324147886182070, -0.996319863478296600, -0.996315576579611560, -0.996311287190137620, -0.996306995309885420, +-0.996302700938865750, -0.996298404077089250, -0.996294104724566810, -0.996289802881309080, -0.996285498547326840, -0.996281191722630850, -0.996276882407231890, -0.996272570601140720, +-0.996268256304368220, -0.996263939516924930, -0.996259620238821860, -0.996255298470069660, -0.996250974210679320, -0.996246647460661490, -0.996242318220027180, -0.996237986488786920, +-0.996233652266951710, -0.996229315554532420, -0.996224976351539840, -0.996220634657984830, -0.996216290473878160, -0.996211943799230730, -0.996207594634053620, -0.996203242978357380, +-0.996198888832153130, -0.996194532195451510, -0.996190173068263630, -0.996185811450600370, -0.996181447342472600, -0.996177080743891110, -0.996172711654866980, -0.996168340075411110, +-0.996163966005534360, -0.996159589445247630, -0.996155210394562010, -0.996150828853488270, -0.996146444822037510, -0.996142058300220620, -0.996137669288048700, -0.996133277785532510, +-0.996128883792683160, -0.996124487309511530, -0.996120088336028720, -0.996115686872245720, -0.996111282918173410, -0.996106876473823010, -0.996102467539205390, -0.996098056114331550, +-0.996093642199212700, -0.996089225793859610, -0.996084806898283490, -0.996080385512495340, -0.996075961636506250, -0.996071535270327210, -0.996067106413969450, -0.996062675067443840, +-0.996058241230761480, -0.996053804903933580, -0.996049366086971260, -0.996044924779885380, -0.996040480982687270, -0.996036034695388040, -0.996031585917998560, -0.996027134650530170, +-0.996022680892994060, -0.996018224645401130, -0.996013765907762580, -0.996009304680089640, -0.996004840962393500, -0.996000374754685280, -0.995995906056976080, -0.995991434869277100, +-0.995986961191599570, -0.995982485023954590, -0.995978006366353470, -0.995973525218807330, -0.995969041581327370, -0.995964555453924700, -0.995960066836610760, -0.995955575729396640, +-0.995951082132293550, -0.995946586045312720, -0.995942087468465460, -0.995937586401763000, -0.995933082845216640, -0.995928576798837510, -0.995924068262636910, -0.995919557236626060, +-0.995915043720816410, -0.995910527715219150, -0.995906009219845620, -0.995901488234707030, -0.995896964759814710, -0.995892438795179970, -0.995887910340814140, -0.995883379396728550, +-0.995878845962934520, -0.995874310039443380, -0.995869771626266440, -0.995865230723415040, -0.995860687330900610, -0.995856141448734470, -0.995851593076927940, -0.995847042215492360, +-0.995842488864439270, -0.995837933023779990, -0.995833374693525840, -0.995828813873688270, -0.995824250564278700, -0.995819684765308470, -0.995815116476789000, -0.995810545698731620, +-0.995805972431148100, -0.995801396674049540, -0.995796818427447490, -0.995792237691353390, -0.995787654465778770, -0.995783068750734860, -0.995778480546233410, -0.995773889852285770, +-0.995769296668903350, -0.995764700996097710, -0.995760102833880280, -0.995755502182262610, -0.995750899041256240, -0.995746293410872620, -0.995741685291123170, -0.995737074682019550, +-0.995732461583573200, -0.995727845995795780, -0.995723227918698830, -0.995718607352293670, -0.995713984296591970, -0.995709358751605380, -0.995704730717345330, -0.995700100193823490, +-0.995695467181051510, -0.995690831679040710, -0.995686193687802870, -0.995681553207349630, -0.995676910237692450, -0.995672264778842960, -0.995667616830812730, -0.995662966393613620, +-0.995658313467257080, -0.995653658051754650, -0.995649000147118210, -0.995644339753359200, -0.995639676870489270, -0.995635011498520180, -0.995630343637463610, -0.995625673287331200, +-0.995621000448134620, -0.995616325119885510, -0.995611647302595550, -0.995606966996276490, -0.995602284200939990, -0.995597598916597830, -0.995592911143261650, -0.995588220880943230, +-0.995583528129654230, -0.995578832889406410, -0.995574135160211430, -0.995569434942081170, -0.995564732235027280, -0.995560027039061660, -0.995555319354195940, -0.995550609180441910, +-0.995545896517811450, -0.995541181366316090, -0.995536463725967940, -0.995531743596778540, -0.995527020978759670, -0.995522295871923310, -0.995517568276281350, -0.995512838191845330, +-0.995508105618627350, -0.995503370556638960, -0.995498633005892140, -0.995493892966398790, -0.995489150438170770, -0.995484405421219850, -0.995479657915557930, -0.995474907921196750, +-0.995470155438148430, -0.995465400466424730, -0.995460643006037430, -0.995455883056998610, -0.995451120619319950, -0.995446355693013540, -0.995441588278091260, -0.995436818374565100, +-0.995432045982446830, -0.995427271101748330, -0.995422493732481820, -0.995417713874658940, -0.995412931528291910, -0.995408146693392500, -0.995403359369972710, -0.995398569558044510, +-0.995393777257619910, -0.995388982468710880, -0.995384185191329430, -0.995379385425487430, -0.995374583171196980, -0.995369778428470080, -0.995364971197318820, -0.995360161477754970, +-0.995355349269790860, -0.995350534573438250, -0.995345717388709360, -0.995340897715616290, -0.995336075554170810, -0.995331250904385230, -0.995326423766271560, -0.995321594139841780, +-0.995316762025107990, -0.995311927422082410, -0.995307090330776800, -0.995302250751203600, -0.995297408683374800, -0.995292564127302380, -0.995287717082998680, -0.995282867550475570, +-0.995278015529745260, -0.995273161020819970, -0.995268304023711800, -0.995263444538432960, -0.995258582564995440, -0.995253718103411460, -0.995248851153693100, -0.995243981715852710, +-0.995239109789902380, -0.995234235375854090, -0.995229358473720400, -0.995224479083513300, -0.995219597205245000, -0.995214712838927600, -0.995209825984573530, -0.995204936642194780, +-0.995200044811803800, -0.995195150493412670, -0.995190253687033730, -0.995185354392679080, -0.995180452610361140, -0.995175548340091920, -0.995170641581883950, -0.995165732335749340, +-0.995160820601700410, -0.995155906379749270, -0.995150989669908560, -0.995146070472190280, -0.995141148786606980, -0.995136224613170640, -0.995131297951893700, -0.995126368802788600, +-0.995121437165867650, -0.995116503041143070, -0.995111566428627190, -0.995106627328332440, -0.995101685740271020, -0.995096741664455500, -0.995091795100898070, -0.995086846049611170, +-0.995081894510607130, -0.995076940483898390, -0.995071983969497250, -0.995067024967416280, -0.995062063477667680, -0.995057099500263890, -0.995052133035217220, -0.995047164082540350, +-0.995042192642245580, -0.995037218714345360, -0.995032242298852120, -0.995027263395778180, -0.995022282005136200, -0.995017298126938400, -0.995012311761197420, -0.995007322907925480, +-0.995002331567135470, -0.994997337738839470, -0.994992341423050260, -0.994987342619780170, -0.994982341329041730, -0.994977337550847270, -0.994972331285209570, -0.994967322532141150, +-0.994962311291654360, -0.994957297563761720, -0.994952281348475910, -0.994947262645809350, -0.994942241455774700, -0.994937217778384400, -0.994932191613650980, -0.994927162961587230, +-0.994922131822205460, -0.994917098195518430, -0.994912062081538710, -0.994907023480278710, -0.994901982391751090, -0.994896938815968750, -0.994891892752943870, -0.994886844202689360, +-0.994881793165217740, -0.994876739640541570, -0.994871683628673620, -0.994866625129626430, -0.994861564143412650, -0.994856500670045050, -0.994851434709536080, -0.994846366261898600, +-0.994841295327145160, -0.994836221905288530, -0.994831145996341370, -0.994826067600316110, -0.994820986717225960, -0.994815903347083250, -0.994810817489900740, -0.994805729145691320, +-0.994800638314467410, -0.994795544996242010, -0.994790449191027770, -0.994785350898837350, -0.994780250119683630, -0.994775146853579150, -0.994770041100536790, -0.994764932860569440, +-0.994759822133689740, -0.994754708919910470, -0.994749593219244500, -0.994744475031704380, -0.994739354357303210, -0.994734231196053640, -0.994729105547968450, -0.994723977413060510, +-0.994718846791342590, -0.994713713682827680, -0.994708578087528440, -0.994703440005457630, -0.994698299436628240, -0.994693156381053270, -0.994688010838745250, -0.994682862809717290, +-0.994677712293982160, -0.994672559291552740, -0.994667403802441790, -0.994662245826662520, -0.994657085364227590, -0.994651922415149990, -0.994646756979442490, -0.994641589057118190, +-0.994636418648189860, -0.994631245752670480, -0.994626070370572930, -0.994620892501910210, -0.994615712146695310, -0.994610529304941200, -0.994605343976660670, -0.994600156161866920, +-0.994594965860572610, -0.994589773072790840, -0.994584577798534820, -0.994579380037817320, -0.994574179790651320, -0.994568977057049940, -0.994563771837026040, -0.994558564130592740, +-0.994553353937763010, -0.994548141258549960, -0.994542926092966460, -0.994537708441025630, -0.994532488302740660, -0.994527265678124330, -0.994522040567189960, -0.994516812969950430, +-0.994511582886418830, -0.994506350316608280, -0.994501115260531980, -0.994495877718202800, -0.994490637689633970, -0.994485395174838470, -0.994480150173829510, -0.994474902686620200, +-0.994469652713223630, -0.994464400253652900, -0.994459145307921120, -0.994453887876041610, -0.994448627958027350, -0.994443365553891460, -0.994438100663647240, -0.994432833287307690, +-0.994427563424886030, -0.994422291076395460, -0.994417016241849310, -0.994411738921260450, -0.994406459114642320, -0.994401176822008130, -0.994395892043370870, -0.994390604778743970, +-0.994385315028140540, -0.994380022791573670, -0.994374728069056910, -0.994369430860603250, -0.994364131166226020, -0.994358828985938530, -0.994353524319753990, -0.994348217167685510, +-0.994342907529746520, -0.994337595405950350, -0.994332280796310090, -0.994326963700839170, -0.994321644119550930, -0.994316322052458460, -0.994310997499575300, -0.994305670460914560, +-0.994300340936489560, -0.994295008926313840, -0.994289674430400510, -0.994284337448763100, -0.994278997981414840, -0.994273656028369040, -0.994268311589639020, -0.994262964665238340, +-0.994257615255180190, -0.994252263359478030, -0.994246908978145160, -0.994241552111195140, -0.994236192758641170, -0.994230830920496690, -0.994225466596775130, -0.994220099787490040, +-0.994214730492654410, -0.994209358712282220, -0.994203984446386580, -0.994198607694980920, -0.994193228458078780, -0.994187846735693490, -0.994182462527838600, -0.994177075834527630, +-0.994171686655773930, -0.994166294991591150, -0.994160900841992490, -0.994155504206991610, -0.994150105086601950, -0.994144703480837060, -0.994139299389710460, -0.994133892813235390, +-0.994128483751425820, -0.994123072204294970, -0.994117658171856380, -0.994112241654123710, -0.994106822651110500, -0.994101401162830080, -0.994095977189296210, -0.994090550730522440, +-0.994085121786522310, -0.994079690357309360, -0.994074256442897150, -0.994068820043299330, -0.994063381158529440, -0.994057939788601130, -0.994052495933527850, -0.994047049593323460, +-0.994041600768001410, -0.994036149457575350, -0.994030695662058930, -0.994025239381465810, -0.994019780615809530, -0.994014319365103760, -0.994008855629362250, -0.994003389408598670, +-0.993997920702826550, -0.993992449512059670, -0.993986975836311680, -0.993981499675596130, -0.993976021029926990, -0.993970539899317610, -0.993965056283781960, -0.993959570183333700, +-0.993954081597986480, -0.993948590527754080, -0.993943096972650260, -0.993937600932688570, -0.993932102407882990, -0.993926601398247070, -0.993921097903794680, -0.993915591924539600, +-0.993910083460495470, -0.993904572511676190, -0.993899059078095500, -0.993893543159767080, -0.993888024756704900, -0.993882503868922520, -0.993876980496433910, -0.993871454639252970, +-0.993865926297393340, -0.993860395470868910, -0.993854862159693320, -0.993849326363880680, -0.993843788083444760, -0.993838247318399430, -0.993832704068758450, -0.993827158334535610, +-0.993821610115744990, -0.993816059412400370, -0.993810506224515500, -0.993804950552104380, -0.993799392395180780, -0.993793831753758910, -0.993788268627852300, -0.993782703017475180, +-0.993777134922641190, -0.993771564343364440, -0.993765991279658590, -0.993760415731537950, -0.993754837699016180, -0.993749257182107380, -0.993743674180825430, -0.993738088695184320, +-0.993732500725197920, -0.993726910270880340, -0.993721317332245450, -0.993715721909307130, -0.993710124002079700, -0.993704523610576820, -0.993698920734812810, -0.993693315374801320, +-0.993687707530556690, -0.993682097202092550, -0.993676484389423350, -0.993670869092562970, -0.993665251311525390, -0.993659631046324710, -0.993654008296974920, -0.993648383063490130, +-0.993642755345884310, -0.993637125144171680, -0.993631492458366130, -0.993625857288481850, -0.993620219634533060, -0.993614579496533650, -0.993608936874497810, -0.993603291768439640, +-0.993597644178373150, -0.993591994104312650, -0.993586341546272120, -0.993580686504265790, -0.993575028978307630, -0.993569368968411970, -0.993563706474592910, -0.993558041496864660, +-0.993552374035241210, -0.993546704089736780, -0.993541031660365560, -0.993535356747141880, -0.993529679350079740, -0.993523999469193450, -0.993518317104497120, -0.993512632256004950, +-0.993506944923731260, -0.993501255107690270, -0.993495562807896080, -0.993489868024363010, -0.993484170757105270, -0.993478471006137180, -0.993472768771472730, -0.993467064053126460, +-0.993461356851112590, -0.993455647165445210, -0.993449934996138760, -0.993444220343207450, -0.993438503206665600, -0.993432783586527530, -0.993427061482807350, -0.993421336895519700, +-0.993415609824678690, -0.993409880270298640, -0.993404148232393870, -0.993398413710978700, -0.993392676706067570, -0.993386937217674680, -0.993381195245814470, -0.993375450790501270, +-0.993369703851749390, -0.993363954429573370, -0.993358202523987430, -0.993352448135005890, -0.993346691262643300, -0.993340931906914080, -0.993335170067832340, -0.993329405745412730, +-0.993323638939669680, -0.993317869650617520, -0.993312097878270570, -0.993306323622643480, -0.993300546883750690, -0.993294767661606400, -0.993288985956225170, -0.993283201767621420, +-0.993277415095809800, -0.993271625940804540, -0.993265834302620390, -0.993260040181271450, -0.993254243576772500, -0.993248444489137850, -0.993242642918382270, -0.993236838864519970, +-0.993231032327565600, -0.993225223307533710, -0.993219411804438620, -0.993213597818295100, -0.993207781349117580, -0.993201962396920600, -0.993196140961718600, -0.993190317043526450, +-0.993184490642358360, -0.993178661758229110, -0.993172830391153230, -0.993166996541145260, -0.993161160208219650, -0.993155321392391270, -0.993149480093674650, -0.993143636312084240, +-0.993137790047634810, -0.993131941300340880, -0.993126090070217020, -0.993120236357278090, -0.993114380161538410, -0.993108521483012870, -0.993102660321715900, -0.993096796677662370, +-0.993090930550866950, -0.993085061941344050, -0.993079190849108560, -0.993073317274175030, -0.993067441216558320, -0.993061562676272880, -0.993055681653333690, -0.993049798147755180, +-0.993043912159552230, -0.993038023688739500, -0.993032132735331640, -0.993026239299343530, -0.993020343380789820, -0.993014444979685160, -0.993008544096044440, -0.993002640729882420, +-0.992996734881213760, -0.992990826550053220, -0.992984915736415670, -0.992979002440315780, -0.992973086661768420, -0.992967168400788360, -0.992961247657390360, -0.992955324431589180, +-0.992949398723399820, -0.992943470532836820, -0.992937539859915290, -0.992931606704649860, -0.992925671067055320, -0.992919732947146640, -0.992913792344938710, -0.992907849260446280, +-0.992901903693684140, -0.992895955644667370, -0.992890005113410520, -0.992884052099928800, -0.992878096604236870, -0.992872138626349820, -0.992866178166282420, -0.992860215224049440, +-0.992854249799666080, -0.992848281893147000, -0.992842311504507300, -0.992836338633761640, -0.992830363280925220, -0.992824385446012920, -0.992818405129039740, -0.992812422330020430, +-0.992806437048970090, -0.992800449285903610, -0.992794459040836070, -0.992788466313782370, -0.992782471104757480, -0.992776473413776510, -0.992770473240854320, -0.992764470586005920, +-0.992758465449246400, -0.992752457830590630, -0.992746447730053720, -0.992740435147650650, -0.992734420083396520, -0.992728402537306430, -0.992722382509395260, -0.992716359999678220, +-0.992710335008170070, -0.992704307534886250, -0.992698277579841750, -0.992692245143051430, -0.992686210224530520, -0.992680172824294100, -0.992674132942357180, -0.992668090578735060, +-0.992662045733442630, -0.992655998406495100, -0.992649948597907450, -0.992643896307695120, -0.992637841535872980, -0.992631784282456240, -0.992625724547460010, -0.992619662330899490, +-0.992613597632789670, -0.992607530453146090, -0.992601460791983640, -0.992595388649317400, -0.992589314025162820, -0.992583236919534980, -0.992577157332449000, -0.992571075263920080, +-0.992564990713963540, -0.992558903682594360, -0.992552814169828100, -0.992546722175679740, -0.992540627700164600, -0.992534530743297890, -0.992528431305094830, -0.992522329385570610, +-0.992516224984740680, -0.992510118102620240, -0.992504008739224400, -0.992497896894568580, -0.992491782568668100, -0.992485665761538070, -0.992479546473193920, -0.992473424703650850, +-0.992467300452924190, -0.992461173721029270, -0.992455044507981500, -0.992448912813796100, -0.992442778638488400, -0.992436641982073820, -0.992430502844567460, -0.992424361225984990, +-0.992418217126341600, -0.992412070545652720, -0.992405921483933580, -0.992399769941199720, -0.992393615917466330, -0.992387459412748970, -0.992381300427062960, -0.992375138960423620, +-0.992368975012846490, -0.992362808584346890, -0.992356639674940370, -0.992350468284642130, -0.992344294413467830, -0.992338118061432570, -0.992331939228552230, -0.992325757914842010, +-0.992319574120317460, -0.992313387844993900, -0.992307199088886870, -0.992301007852011810, -0.992294814134384250, -0.992288617936019750, -0.992282419256933610, -0.992276218097141280, +-0.992270014456658630, -0.992263808335500870, -0.992257599733683660, -0.992251388651222310, -0.992245175088132590, -0.992238959044429820, -0.992232740520129770, -0.992226519515247870, +-0.992220296029799660, -0.992214070063800690, -0.992207841617266610, -0.992201610690212840, -0.992195377282655060, -0.992189141394608900, -0.992182903026089690, -0.992176662177113420, +-0.992170418847695410, -0.992164173037851430, -0.992157924747596900, -0.992151673976947700, -0.992145420725919160, -0.992139164994527150, -0.992132906782787210, -0.992126646090715100, +-0.992120382918326270, -0.992114117265636590, -0.992107849132661480, -0.992101578519416830, -0.992095305425918280, -0.992089029852181280, -0.992082751798221810, -0.992076471264055510, +-0.992070188249697950, -0.992063902755164980, -0.992057614780472270, -0.992051324325635480, -0.992045031390670350, -0.992038735975592670, -0.992032438080418190, -0.992026137705162680, +-0.992019834849841690, -0.992013529514471190, -0.992007221699066850, -0.992000911403644440, -0.991994598628219810, -0.991988283372808530, -0.991981965637426690, -0.991975645422089820, +-0.991969322726813930, -0.991962997551614770, -0.991956669896507990, -0.991950339761509590, -0.991944007146635330, -0.991937672051901090, -0.991931334477322730, -0.991924994422915930, +-0.991918651888696770, -0.991912306874680790, -0.991905959380884220, -0.991899609407322690, -0.991893256954011980, -0.991886902020968300, -0.991880544608207400, -0.991874184715745070, +-0.991867822343597270, -0.991861457491779900, -0.991855090160308820, -0.991848720349200130, -0.991842348058469600, -0.991835973288133330, -0.991829596038206970, -0.991823216308706730, +-0.991816834099648380, -0.991810449411047900, -0.991804062242921390, -0.991797672595284620, -0.991791280468153680, -0.991784885861544670, -0.991778488775473370, -0.991772089209955850, +-0.991765687165008130, -0.991759282640646060, -0.991752875636885860, -0.991746466153743510, -0.991740054191235010, -0.991733639749376340, -0.991727222828183600, -0.991720803427672880, +-0.991714381547860070, -0.991707957188761260, -0.991701530350392550, -0.991695101032770030, -0.991688669235909810, -0.991682234959827880, -0.991675798204540440, -0.991669358970063360, +-0.991662917256412870, -0.991656473063605270, -0.991650026391656340, -0.991643577240582500, -0.991637125610399630, -0.991630671501123940, -0.991624214912771530, -0.991617755845358610, +-0.991611294298901380, -0.991604830273415840, -0.991598363768918190, -0.991591894785424640, -0.991585423322951410, -0.991578949381514580, -0.991572472961130380, -0.991565994061815000, +-0.991559512683584670, -0.991553028826455460, -0.991546542490443830, -0.991540053675565750, -0.991533562381837650, -0.991527068609275530, -0.991520572357895810, -0.991514073627714600, +-0.991507572418748210, -0.991501068731012740, -0.991494562564524840, -0.991488053919300390, -0.991481542795355940, -0.991475029192707580, -0.991468513111371630, -0.991461994551364300, +-0.991455473512702020, -0.991448949995401230, -0.991442423999477910, -0.991435895524948600, -0.991429364571829510, -0.991422831140137070, -0.991416295229887500, -0.991409756841097220, +-0.991403215973782450, -0.991396672627959720, -0.991390126803645240, -0.991383578500855570, -0.991377027719606900, -0.991370474459915660, -0.991363918721798190, -0.991357360505270900, +-0.991350799810350350, -0.991344236637052730, -0.991337670985394490, -0.991331102855392170, -0.991324532247061960, -0.991317959160420540, -0.991311383595484100, -0.991304805552269190, +-0.991298225030792350, -0.991291642031070010, -0.991285056553118490, -0.991278468596954340, -0.991271878162593990, -0.991265285250053860, -0.991258689859350620, -0.991252091990500680, +-0.991245491643520490, -0.991238888818426590, -0.991232283515235510, -0.991225675733963700, -0.991219065474627570, -0.991212452737243900, -0.991205837521829110, -0.991199219828399540, +-0.991192599656972150, -0.991185977007563170, -0.991179351880189240, -0.991172724274867020, -0.991166094191612720, -0.991159461630443440, -0.991152826591375490, -0.991146189074425420, +-0.991139549079609880, -0.991132906606945530, -0.991126261656448790, -0.991119614228136550, -0.991112964322025220, -0.991106311938131480, -0.991099657076471740, -0.991092999737063110, +-0.991086339919921900, -0.991079677625064880, -0.991073012852508710, -0.991066345602269920, -0.991059675874365160, -0.991053003668811440, -0.991046328985625060, -0.991039651824823010, +-0.991032972186421720, -0.991026290070437970, -0.991019605476888610, -0.991012918405790200, -0.991006228857159390, -0.990999536831013050, -0.990992842327367840, -0.990986145346240630, +-0.990979445887647970, -0.990972743951606840, -0.990966039538133670, -0.990959332647245450, -0.990952623278958940, -0.990945911433290800, -0.990939197110258020, -0.990932480309877130, +-0.990925761032165120, -0.990919039277138650, -0.990912315044814700, -0.990905588335209810, -0.990898859148340860, -0.990892127484224950, -0.990885393342878730, -0.990878656724318960, +-0.990871917628562530, -0.990865176055626410, -0.990858432005527150, -0.990851685478281950, -0.990844936473907590, -0.990838184992420820, -0.990831431033838640, -0.990824674598177800, +-0.990817915685455300, -0.990811154295688000, -0.990804390428892900, -0.990797624085086760, -0.990790855264286450, -0.990784083966509190, -0.990777310191771620, -0.990770533940090850, +-0.990763755211483630, -0.990756974005966960, -0.990750190323558040, -0.990743404164273640, -0.990736615528130640, -0.990729824415146120, -0.990723030825337080, -0.990716234758720500, +-0.990709436215313270, -0.990702635195132460, -0.990695831698195080, -0.990689025724518000, -0.990682217274118430, -0.990675406347013450, -0.990668592943219850, -0.990661777062754710, +-0.990654958705635250, -0.990648137871878220, -0.990641314561500950, -0.990634488774520430, -0.990627660510953630, -0.990620829770817780, -0.990613996554129740, -0.990607160860906830, +-0.990600322691165940, -0.990593482044924260, -0.990586638922198670, -0.990579793323006720, -0.990572945247365280, -0.990566094695291440, -0.990559241666802310, -0.990552386161915210, +-0.990545528180646890, -0.990538667723015020, -0.990531804789036350, -0.990524939378728210, -0.990518071492107690, -0.990511201129192110, -0.990504328289998460, -0.990497452974543950, +-0.990490575182845780, -0.990483694914921160, -0.990476812170787310, -0.990469926950461540, -0.990463039253960840, -0.990456149081302640, -0.990449256432504030, -0.990442361307582120, +-0.990435463706554550, -0.990428563629438210, -0.990421661076250510, -0.990414756047008570, -0.990407848541729810, -0.990400938560431430, -0.990394026103130760, -0.990387111169845010, +-0.990380193760591390, -0.990373273875387210, -0.990366351514250010, -0.990359426677196900, -0.990352499364245190, -0.990345569575412310, -0.990338637310715250, -0.990331702570171890, +-0.990324765353799100, -0.990317825661614530, -0.990310883493635390, -0.990303938849879000, -0.990296991730362790, -0.990290042135104080, -0.990283090064120190, -0.990276135517428660, +-0.990269178495046700, -0.990262218996991850, -0.990255257023281430, -0.990248292573932990, -0.990241325648963720, -0.990234356248391180, -0.990227384372232570, -0.990220410020505650, +-0.990213433193227740, -0.990206453890416280, -0.990199472112088590, -0.990192487858262300, -0.990185501128954650, -0.990178511924183380, -0.990171520243965820, -0.990164526088319290, +-0.990157529457261650, -0.990150530350810130, -0.990143528768982260, -0.990136524711795580, -0.990129518179267640, -0.990122509171415750, -0.990115497688257680, -0.990108483729810860, +-0.990101467296092940, -0.990094448387121240, -0.990087427002913410, -0.990080403143487110, -0.990073376808859760, -0.990066347999048910, -0.990059316714072100, -0.990052282953947200, +-0.990045246718691540, -0.990038208008322760, -0.990031166822858410, -0.990024123162316250, -0.990017077026713600, -0.990010028416068330, -0.990002977330398100, -0.989995923769720340, +-0.989988867734052810, -0.989981809223413060, -0.989974748237818840, -0.989967684777287690, -0.989960618841837390, -0.989953550431485580, -0.989946479546249700, -0.989939406186147730, +-0.989932330351197320, -0.989925252041416020, -0.989918171256821690, -0.989911087997431660, -0.989904002263264140, -0.989896914054336550, -0.989889823370666780, -0.989882730212272350, +-0.989875634579171160, -0.989868536471380840, -0.989861435888919170, -0.989854332831803910, -0.989847227300052810, -0.989840119293683540, -0.989833008812714190, -0.989825895857162190, +-0.989818780427045520, -0.989811662522381840, -0.989804542143188910, -0.989797419289484730, -0.989790293961287040, -0.989783166158613610, -0.989776035881482220, -0.989768903129910840, +-0.989761767903917120, -0.989754630203518950, -0.989747490028734300, -0.989740347379580830, -0.989733202256076420, -0.989726054658239150, -0.989718904586086690, -0.989711752039637020, +-0.989704597018908010, -0.989697439523917420, -0.989690279554683140, -0.989683117111223250, -0.989675952193555640, -0.989668784801698060, -0.989661614935668620, -0.989654442595485070, +-0.989647267781165410, -0.989640090492727610, -0.989632910730189550, -0.989625728493569110, -0.989618543782884500, -0.989611356598153470, -0.989604166939394130, -0.989596974806624340, +-0.989589780199862100, -0.989582583119125280, -0.989575383564432200, -0.989568181535800620, -0.989560977033248520, -0.989553770056794010, -0.989546560606455070, -0.989539348682249800, +-0.989532134284196060, -0.989524917412312080, -0.989517698066615830, -0.989510476247125070, -0.989503251953858350, -0.989496025186833440, -0.989488795946068530, -0.989481564231581620, +-0.989474330043390580, -0.989467093381513950, -0.989459854245969490, -0.989452612636775530, -0.989445368553949930, -0.989438121997510910, -0.989430872967476670, -0.989423621463865200, +-0.989416367486694700, -0.989409111035983170, -0.989401852111748800, -0.989394590714010040, -0.989387326842784630, -0.989380060498091020, -0.989372791679947180, -0.989365520388371330, +-0.989358246623381790, -0.989350970384996530, -0.989343691673233990, -0.989336410488112160, -0.989329126829649240, -0.989321840697863550, -0.989314552092773300, -0.989307261014396590, +-0.989299967462751730, -0.989292671437856930, -0.989285372939730510, -0.989278071968390680, -0.989270768523855650, -0.989263462606143620, -0.989256154215273020, -0.989248843351261950, +-0.989241530014128840, -0.989234214203891900, -0.989226895920569450, -0.989219575164179800, -0.989212251934741160, -0.989204926232271850, -0.989197598056790310, -0.989190267408314730, +-0.989182934286863320, -0.989175598692454750, -0.989168260625107210, -0.989160920084839020, -0.989153577071668510, -0.989146231585613990, -0.989138883626693890, -0.989131533194926640, +-0.989124180290330450, -0.989116824912923960, -0.989109467062725400, -0.989102106739753070, -0.989094743944025520, -0.989087378675561180, -0.989080010934378360, -0.989072640720495390, +-0.989065268033930910, -0.989057892874703250, -0.989050515242830940, -0.989043135138332200, -0.989035752561225780, -0.989028367511529780, -0.989020979989262970, -0.989013589994443780, +-0.989006197527090510, -0.988998802587221840, -0.988991405174856060, -0.988984005290011850, -0.988976602932707620, -0.988969198102961910, -0.988961790800793160, -0.988954381026219800, +-0.988946968779260690, -0.988939554059934060, -0.988932136868258540, -0.988924717204252790, -0.988917295067935020, -0.988909870459324210, -0.988902443378438690, -0.988895013825297100, +-0.988887581799917870, -0.988880147302319770, -0.988872710332521330, -0.988865270890540990, -0.988857828976397620, -0.988850384590109540, -0.988842937731695510, -0.988835488401174190, +-0.988828036598564110, -0.988820582323884030, -0.988813125577152400, -0.988805666358388070, -0.988798204667609370, -0.988790740504835290, -0.988783273870084360, -0.988775804763375230, +-0.988768333184726680, -0.988760859134157230, -0.988753382611685660, -0.988745903617330610, -0.988738422151110740, -0.988730938213044810, -0.988723451803151580, -0.988715962921449700, +-0.988708471567957940, -0.988700977742695050, -0.988693481445679700, -0.988685982676930420, -0.988678481436466420, -0.988670977724306230, -0.988663471540468520, -0.988655962884972150, +-0.988648451757835890, -0.988640938159078500, -0.988633422088718850, -0.988625903546775490, -0.988618382533267390, -0.988610859048213330, -0.988603333091632170, -0.988595804663542690, +-0.988588273763963740, -0.988580740392914100, -0.988573204550412420, -0.988565666236477900, -0.988558125451129200, -0.988550582194385190, -0.988543036466264620, -0.988535488266786610, +-0.988527937595969800, -0.988520384453833170, -0.988512828840395600, -0.988505270755675960, -0.988497710199693010, -0.988490147172465860, -0.988482581674013370, -0.988475013704354530, +-0.988467443263507990, -0.988459870351492850, -0.988452294968328090, -0.988444717114032590, -0.988437136788625330, -0.988429553992125180, -0.988421968724551240, -0.988414380985922270, +-0.988406790776257370, -0.988399198095575530, -0.988391602943895720, -0.988384005321236710, -0.988376405227617830, -0.988368802663058040, -0.988361197627576130, -0.988353590121191280, +-0.988345980143922390, -0.988338367695788420, -0.988330752776808710, -0.988323135387002120, -0.988315515526387630, -0.988307893194984470, -0.988300268392811490, -0.988292641119887900, +-0.988285011376232590, -0.988277379161864870, -0.988269744476803490, -0.988262107321068010, -0.988254467694677170, -0.988246825597650090, -0.988239181030006080, -0.988231533991764000, +-0.988223884482943070, -0.988216232503562500, -0.988208578053641370, -0.988200921133198680, -0.988193261742253860, -0.988185599880825770, -0.988177935548933740, -0.988170268746596860, +-0.988162599473834340, -0.988154927730665160, -0.988147253517108750, -0.988139576833184210, -0.988131897678910740, -0.988124216054307560, -0.988116531959393860, -0.988108845394188640, +-0.988101156358711540, -0.988093464852981440, -0.988085770877017660, -0.988078074430839500, -0.988070375514466190, -0.988062674127916930, -0.988054970271211030, -0.988047263944367590, +-0.988039555147406050, -0.988031843880345480, -0.988024130143205450, -0.988016413936005030, -0.988008695258763670, -0.988000974111500560, -0.987993250494234810, -0.987985524406986170, +-0.987977795849773630, -0.987970064822616620, -0.987962331325534460, -0.987954595358546460, -0.987946856921671950, -0.987939116014930340, -0.987931372638340970, -0.987923626791923140, +-0.987915878475696060, -0.987908127689679500, -0.987900374433892560, -0.987892618708354650, -0.987884860513085330, -0.987877099848103790, -0.987869336713429360, -0.987861571109081680, +-0.987853803035080080, -0.987846032491443980, -0.987838259478192810, -0.987830483995346010, -0.987822706042922990, -0.987814925620943310, -0.987807142729426160, -0.987799357368391080, +-0.987791569537857740, -0.987783779237845440, -0.987775986468373720, -0.987768191229462130, -0.987760393521129880, -0.987752593343396600, -0.987744790696282070, -0.987736985579805380, +-0.987729177993986410, -0.987721367938844350, -0.987713555414398980, -0.987705740420669610, -0.987697922957676000, -0.987690103025437470, -0.987682280623973670, -0.987674455753304150, +-0.987666628413448660, -0.987658798604426510, -0.987650966326257370, -0.987643131578960780, -0.987635294362556260, -0.987627454677063700, -0.987619612522502410, -0.987611767898892160, +-0.987603920806252480, -0.987596071244602910, -0.987588219213963230, -0.987580364714353070, -0.987572507745791860, -0.987564648308299490, -0.987556786401895370, -0.987548922026599390, +-0.987541055182431070, -0.987533185869410080, -0.987525314087556170, -0.987517439836888890, -0.987509563117428100, -0.987501683929193350, -0.987493802272204510, -0.987485918146481120, +-0.987478031552042950, -0.987470142488909630, -0.987462250957100940, -0.987454356956636750, -0.987446460487536590, -0.987438561549820130, -0.987430660143507440, -0.987422756268618080, +-0.987414849925171810, -0.987406941113188500, -0.987399029832687790, -0.987391116083689350, -0.987383199866213260, -0.987375281180279170, -0.987367360025906860, -0.987359436403116190, +-0.987351510311926920, -0.987343581752358810, -0.987335650724431860, -0.987327717228165700, -0.987319781263580110, -0.987311842830695290, -0.987303901929530770, -0.987295958560106550, +-0.987288012722442380, -0.987280064416558250, -0.987272113642473690, -0.987264160400209150, -0.987256204689784140, -0.987248246511218560, -0.987240285864532500, -0.987232322749745590, +-0.987224357166877950, -0.987216389115949440, -0.987208418596979830, -0.987200445609989210, -0.987192470154997450, -0.987184492232024650, -0.987176511841090560, -0.987168528982215190, +-0.987160543655418500, -0.987152555860720260, -0.987144565598140900, -0.987136572867700070, -0.987128577669417750, -0.987120580003314040, -0.987112579869408810, -0.987104577267722160, +-0.987096572198274180, -0.987088564661084630, -0.987080554656173730, -0.987072542183561330, -0.987064527243267650, -0.987056509835312680, -0.987048489959716500, -0.987040467616499000, +-0.987032442805680250, -0.987024415527280490, -0.987016385781319670, -0.987008353567817910, -0.987000318886795290, -0.986992281738271910, -0.986984242122267760, -0.986976200038803040, +-0.986968155487897850, -0.986960108469572160, -0.986952058983846190, -0.986944007030740140, -0.986935952610274110, -0.986927895722468200, -0.986919836367342480, -0.986911774544917190, +-0.986903710255212400, -0.986895643498248430, -0.986887574274045280, -0.986879502582623250, -0.986871428424002550, -0.986863351798203170, -0.986855272705245420, -0.986847191145149520, +-0.986839107117935650, -0.986831020623623820, -0.986822931662234670, -0.986814840233788180, -0.986806746338304560, -0.986798649975804020, -0.986790551146306870, -0.986782449849833320, +-0.986774346086403690, -0.986766239856038170, -0.986758131158757100, -0.986750019994580670, -0.986741906363529210, -0.986733790265623020, -0.986725671700882320, -0.986717550669327430, +-0.986709427170978540, -0.986701301205856200, -0.986693172773980610, -0.986685041875372090, -0.986676908510050970, -0.986668772678037650, -0.986660634379352140, -0.986652493614015300, +-0.986644350382047120, -0.986636204683468130, -0.986628056518298550, -0.986619905886558900, -0.986611752788269510, -0.986603597223450700, -0.986595439192122890, -0.986587278694306510, +-0.986579115730021770, -0.986570950299289430, -0.986562782402129690, -0.986554612038562870, -0.986546439208609740, -0.986538263912290160, -0.986530086149625230, -0.986521905920635040, +-0.986513723225340030, -0.986505538063760730, -0.986497350435917570, -0.986489160341831100, -0.986480967781521720, -0.986472772755009890, -0.986464575262316120, -0.986456375303460750, +-0.986448172878464650, -0.986439967987348120, -0.986431760630131600, -0.986423550806835750, -0.986415338517480980, -0.986407123762087720, -0.986398906540676860, -0.986390686853268580, +-0.986382464699883780, -0.986374240080542640, -0.986366012995266050, -0.986357783444074320, -0.986349551426988210, -0.986341316944028160, -0.986333079995214690, -0.986324840580568680, +-0.986316598700110570, -0.986308354353860990, -0.986300107541840500, -0.986291858264069620, -0.986283606520569120, -0.986275352311359650, -0.986267095636461870, -0.986258836495896300, +-0.986250574889683710, -0.986242310817844640, -0.986234044280399740, -0.986225775277369760, -0.986217503808775380, -0.986209229874637110, -0.986200953474975830, -0.986192674609812300, +-0.986184393279166960, -0.986176109483060670, -0.986167823221514080, -0.986159534494547850, -0.986151243302182960, -0.986142949644439830, -0.986134653521339440, -0.986126354932902350, +-0.986118053879149410, -0.986109750360101290, -0.986101444375778850, -0.986093135926202740, -0.986084825011393830, -0.986076511631372780, -0.986068195786160450, -0.986059877475777720, +-0.986051556700245360, -0.986043233459584000, -0.986034907753814420, -0.986026579582957810, -0.986018248947034600, -0.986009915846065900, -0.986001580280072340, -0.985993242249074920, +-0.985984901753094280, -0.985976558792151400, -0.985968213366267170, -0.985959865475462440, -0.985951515119757870, -0.985943162299174560, -0.985934807013733480, -0.985926449263455300, +-0.985918089048361090, -0.985909726368471520, -0.985901361223807670, -0.985892993614390420, -0.985884623540240760, -0.985876251001379430, -0.985867875997827550, -0.985859498529605970, +-0.985851118596735690, -0.985842736199237570, -0.985834351337132600, -0.985825964010441650, -0.985817574219185920, -0.985809181963386290, -0.985800787243063640, -0.985792390058239040, +-0.985783990408933500, -0.985775588295167760, -0.985767183716963260, -0.985758776674340750, -0.985750367167321340, -0.985741955195926000, -0.985733540760175830, -0.985725123860091700, +-0.985716704495694820, -0.985708282667006270, -0.985699858374046720, -0.985691431616837700, -0.985683002395400190, -0.985674570709755060, -0.985666136559923630, -0.985657699945926780, +-0.985649260867785480, -0.985640819325521280, -0.985632375319154930, -0.985623928848707750, -0.985615479914200730, -0.985607028515654960, -0.985598574653091640, -0.985590118326531870, +-0.985581659535996750, -0.985573198281507580, -0.985564734563085240, -0.985556268380751170, -0.985547799734526550, -0.985539328624432280, -0.985530855050489760, -0.985522379012720000, +-0.985513900511144400, -0.985505419545783970, -0.985496936116660120, -0.985488450223793830, -0.985479961867206540, -0.985471471046919230, -0.985462977762953220, -0.985454482015329810, +-0.985445983804070220, -0.985437483129195550, -0.985428979990727320, -0.985420474388686520, -0.985411966323094690, -0.985403455793972820, -0.985394942801342430, -0.985386427345224410, +-0.985377909425640520, -0.985369389042611950, -0.985360866196159810, -0.985352340886305520, -0.985343813113070290, -0.985335282876475650, -0.985326750176542810, -0.985318215013293090, +-0.985309677386747570, -0.985301137296928140, -0.985292594743855780, -0.985284049727552010, -0.985275502248038060, -0.985266952305335340, -0.985258399899465060, -0.985249845030448990, +-0.985241287698308320, -0.985232727903064490, -0.985224165644738690, -0.985215600923352590, -0.985207033738927480, -0.985198464091484700, -0.985189891981045780, -0.985181317407632040, +-0.985172740371265120, -0.985164160871966450, -0.985155578909757250, -0.985146994484659140, -0.985138407596693580, -0.985129818245881750, -0.985121226432245640, -0.985112632155806470, +-0.985104035416585640, -0.985095436214604710, -0.985086834549885220, -0.985078230422448690, -0.985069623832316550, -0.985061014779510360, -0.985052403264051630, -0.985043789285961700, +-0.985035172845262540, -0.985026553941975360, -0.985017932576121910, -0.985009308747723520, -0.985000682456801720, -0.984992053703378390, -0.984983422487474950, -0.984974788809112930, +-0.984966152668313890, -0.984957514065099460, -0.984948872999491300, -0.984940229471510940, -0.984931583481180040, -0.984922935028520240, -0.984914284113552860, -0.984905630736299890, +-0.984896974896782850, -0.984888316595023520, -0.984879655831043200, -0.984870992604863660, -0.984862326916506880, -0.984853658765994180, -0.984844988153347420, -0.984836315078588150, +-0.984827639541738020, -0.984818961542818890, -0.984810281081852310, -0.984801598158860040, -0.984792912773863720, -0.984784224926885110, -0.984775534617945980, -0.984766841847067980, +-0.984758146614272970, -0.984749448919582490, -0.984740748763018540, -0.984732046144602410, -0.984723341064356440, -0.984714633522302040, -0.984705923518461090, -0.984697211052855350, +-0.984688496125506460, -0.984679778736436530, -0.984671058885666970, -0.984662336573219890, -0.984653611799116700, -0.984644884563379730, -0.984636154866030510, -0.984627422707090920, +-0.984618688086582820, -0.984609951004527860, -0.984601211460948030, -0.984592469455865200, -0.984583724989301250, -0.984574978061278030, -0.984566228671817310, -0.984557476820941080, +-0.984548722508671090, -0.984539965735029330, -0.984531206500037560, -0.984522444803717760, -0.984513680646091900, -0.984504914027181880, -0.984496144947009650, -0.984487373405597000, +-0.984478599402965890, -0.984469822939138100, -0.984461044014135920, -0.984452262627981130, -0.984443478780695820, -0.984434692472301640, -0.984425903702820790, -0.984417112472275260, +-0.984408318780686800, -0.984399522628077620, -0.984390724014469700, -0.984381922939884690, -0.984373119404345130, -0.984364313407872670, -0.984355504950489510, -0.984346694032217530, +-0.984337880653078700, -0.984329064813095340, -0.984320246512289330, -0.984311425750682640, -0.984302602528297490, -0.984293776845155730, -0.984284948701279580, -0.984276118096691020, +-0.984267285031412140, -0.984258449505465150, -0.984249611518871800, -0.984240771071654640, -0.984231928163835420, -0.984223082795436580, -0.984214234966479860, -0.984205384676987590, +-0.984196531926981750, -0.984187676716484770, -0.984178819045518520, -0.984169958914105300, -0.984161096322267110, -0.984152231270026160, -0.984143363757404740, -0.984134493784424860, +-0.984125621351108700, -0.984116746457478380, -0.984107869103556300, -0.984098989289364570, -0.984090107014925390, -0.984081222280260960, -0.984072335085393490, -0.984063445430344960, +-0.984054553315137910, -0.984045658739794660, -0.984036761704337180, -0.984027862208787680, -0.984018960253168710, -0.984010055837502230, -0.984001148961810680, -0.983992239626116150, +-0.983983327830440960, -0.983974413574807640, -0.983965496859238180, -0.983956577683755000, -0.983947656048380410, -0.983938731953136750, -0.983929805398045980, -0.983920876383130860, +-0.983911944908413600, -0.983903010973916530, -0.983894074579661830, -0.983885135725672040, -0.983876194411969270, -0.983867250638576160, -0.983858304405514810, -0.983849355712807850, +-0.983840404560477170, -0.983831450948545740, -0.983822494877035660, -0.983813536345969350, -0.983804575355369140, -0.983795611905257440, -0.983786645995656790, -0.983777677626589520, +-0.983768706798078150, -0.983759733510144900, -0.983750757762812400, -0.983741779556102980, -0.983732798890039060, -0.983723815764643180, -0.983714830179937770, -0.983705842135945140, +-0.983696851632688050, -0.983687858670188820, -0.983678863248469980, -0.983669865367553960, -0.983660865027463300, -0.983651862228220320, -0.983642856969847770, -0.983633849252368190, +-0.983624839075803890, -0.983615826440177530, -0.983606811345511530, -0.983597793791828660, -0.983588773779151220, -0.983579751307501750, -0.983570726376902900, -0.983561698987377330, +-0.983552669138947460, -0.983543636831636040, -0.983534602065465390, -0.983525564840458390, -0.983516525156637230, -0.983507483014024910, -0.983498438412643840, -0.983489391352516780, +-0.983480341833666170, -0.983471289856114760, -0.983462235419885090, -0.983453178524999800, -0.983444119171481560, -0.983435057359352880, -0.983425993088636760, -0.983416926359355630, +-0.983407857171532230, -0.983398785525189110, -0.983389711420349140, -0.983380634857034640, -0.983371555835268700, -0.983362474355073960, -0.983353390416472960, -0.983344304019488470, +-0.983335215164143240, -0.983326123850460030, -0.983317030078461380, -0.983307933848170280, -0.983298835159609360, -0.983289734012801060, -0.983280630407768700, -0.983271524344534690, +-0.983262415823121900, -0.983253304843553110, -0.983244191405850840, -0.983235075510038300, -0.983225957156138030, -0.983216836344172900, -0.983207713074165660, -0.983198587346139190, +-0.983189459160116240, -0.983180328516119580, -0.983171195414172080, -0.983162059854296720, -0.983152921836515930, -0.983143781360853010, -0.983134638427330730, -0.983125493035971740, +-0.983116345186799130, -0.983107194879835560, -0.983098042115103880, -0.983088886892627300, -0.983079729212428370, -0.983070569074530280, -0.983061406478955680, -0.983052241425727560, +-0.983043073914868890, -0.983033903946402440, -0.983024731520351300, -0.983015556636738230, -0.983006379295586320, -0.982997199496918440, -0.982988017240757680, -0.982978832527126810, +-0.982969645356048920, -0.982960455727546640, -0.982951263641643540, -0.982942069098362130, -0.982932872097725620, -0.982923672639756880, -0.982914470724479020, -0.982905266351915000, +-0.982896059522087810, -0.982886850235020430, -0.982877638490735730, -0.982868424289257140, -0.982859207630607520, -0.982849988514809760, -0.982840766941887160, -0.982831542911862590, +-0.982822316424759030, -0.982813087480599810, -0.982803856079407900, -0.982794622221206390, -0.982785385906018270, -0.982776147133866630, -0.982766905904774670, -0.982757662218765480, +-0.982748416075862160, -0.982739167476087690, -0.982729916419465170, -0.982720662906018120, -0.982711406935769300, -0.982702148508742050, -0.982692887624959320, -0.982683624284444330, +-0.982674358487220400, -0.982665090233310500, -0.982655819522737950, -0.982646546355525840, -0.982637270731697380, -0.982627992651275760, -0.982618712114284090, -0.982609429120745670, +-0.982600143670683710, -0.982590855764121200, -0.982581565401081770, -0.982572272581588300, -0.982562977305664220, -0.982553679573332730, -0.982544379384617030, -0.982535076739540210, +-0.982525771638125820, -0.982516464080397060, -0.982507154066377120, -0.982497841596089330, -0.982488526669556880, -0.982479209286803100, -0.982469889447851300, -0.982460567152724780, +-0.982451242401446770, -0.982441915194040780, -0.982432585530529920, -0.982423253410937610, -0.982413918835287280, -0.982404581803602020, -0.982395242315905250, -0.982385900372220510, +-0.982376555972571010, -0.982367209116980060, -0.982357859805471190, -0.982348508038067610, -0.982339153814792750, -0.982329797135670040, -0.982320438000722880, -0.982311076409974390, +-0.982301712363448320, -0.982292345861168090, -0.982282976903156910, -0.982273605489438320, -0.982264231620035730, -0.982254855294972360, -0.982245476514272080, -0.982236095277958080, +-0.982226711586053790, -0.982217325438582870, -0.982207936835568510, -0.982198545777034360, -0.982189152263003740, -0.982179756293500410, -0.982170357868547560, -0.982160956988168630, +-0.982151553652387600, -0.982142147861227550, -0.982132739614712260, -0.982123328912865020, -0.982113915755709390, -0.982104500143269000, -0.982095082075567500, -0.982085661552628220, +-0.982076238574474790, -0.982066813141130760, -0.982057385252619760, -0.982047954908965240, -0.982038522110190830, -0.982029086856320180, -0.982019649147376610, -0.982010208983383980, +-0.982000766364365950, -0.981991321290345940, -0.981981873761347710, -0.981972423777394800, -0.981962971338510520, -0.981953516444719070, -0.981944059096043880, -0.981934599292508480, +-0.981925137034136640, -0.981915672320951890, -0.981906205152978000, -0.981896735530238600, -0.981887263452757340, -0.981877788920557770, -0.981868311933663860, -0.981858832492099150, +-0.981849350595887400, -0.981839866245052260, -0.981830379439617480, -0.981820890179606610, -0.981811398465043620, -0.981801904295952150, -0.981792407672355980, -0.981782908594278750, +-0.981773407061744210, -0.981763903074776230, -0.981754396633398470, -0.981744887737634690, -0.981735376387508520, -0.981725862583044060, -0.981716346324264970, -0.981706827611194990, +-0.981697306443858000, -0.981687782822277750, -0.981678256746477800, -0.981668728216482430, -0.981659197232315210, -0.981649663793999980, -0.981640127901560630, -0.981630589555021030, +-0.981621048754404810, -0.981611505499736080, -0.981601959791038480, -0.981592411628336100, -0.981582861011652490, -0.981573307941011830, -0.981563752416438010, -0.981554194437954660, +-0.981544634005586000, -0.981535071119355450, -0.981525505779287430, -0.981515937985405710, -0.981506367737734030, -0.981496795036296500, -0.981487219881116980, -0.981477642272219450, +-0.981468062209627790, -0.981458479693365860, -0.981448894723457870, -0.981439307299927450, -0.981429717422798940, -0.981420125092096090, -0.981410530307842980, -0.981400933070063490, +-0.981391333378781710, -0.981381731234021390, -0.981372126635806860, -0.981362519584162100, -0.981352910079111070, -0.981343298120677670, -0.981333683708886070, -0.981324066843760280, +-0.981314447525324370, -0.981304825753602230, -0.981295201528617930, -0.981285574850395800, -0.981275945718959710, -0.981266314134333740, -0.981256680096541990, -0.981247043605608550, +-0.981237404661557290, -0.981227763264412740, -0.981218119414198790, -0.981208473110939510, -0.981198824354659100, -0.981189173145381570, -0.981179519483131200, -0.981169863367931880, +-0.981160204799808030, -0.981150543778783410, -0.981140880304882670, -0.981131214378129670, -0.981121545998548730, -0.981111875166163830, -0.981102201880999280, -0.981092526143079070, +-0.981082847952427730, -0.981073167309069240, -0.981063484213027800, -0.981053798664327630, -0.981044110662993020, -0.981034420209048190, -0.981024727302517220, -0.981015031943424430, +-0.981005334131794140, -0.980995633867650320, -0.980985931151017510, -0.980976225981919910, -0.980966518360381730, -0.980956808286427280, -0.980947095760080660, -0.980937380781366500, +-0.980927663350308790, -0.980917943466932060, -0.980908221131260310, -0.980898496343318160, -0.980888769103129610, -0.980879039410719300, -0.980869307266111320, -0.980859572669329990, +-0.980849835620399620, -0.980840096119344860, -0.980830354166189910, -0.980820609760958970, -0.980810862903676580, -0.980801113594367060, -0.980791361833054490, -0.980781607619763740, +-0.980771850954518910, -0.980762091837344530, -0.980752330268264920, -0.980742566247304380, -0.980732799774487570, -0.980723030849838700, -0.980713259473382170, -0.980703485645142430, +-0.980693709365144110, -0.980683930633411530, -0.980674149449969110, -0.980664365814841290, -0.980654579728052590, -0.980644791189627330, -0.980635000199590160, -0.980625206757965500, +-0.980615410864777880, -0.980605612520051740, -0.980595811723811490, -0.980586008476081790, -0.980576202776887060, -0.980566394626251720, -0.980556584024200320, -0.980546770970757600, +-0.980536955465947990, -0.980527137509796030, -0.980517317102326150, -0.980507494243562980, -0.980497668933530850, -0.980487841172254850, -0.980478010959759170, -0.980468178296068470, +-0.980458343181207390, -0.980448505615200360, -0.980438665598072130, -0.980428823129847140, -0.980418978210550240, -0.980409130840205760, -0.980399281018838330, -0.980389428746472950, +-0.980379574023133920, -0.980369716848845880, -0.980359857223633610, -0.980349995147521640, -0.980340130620534710, -0.980330263642697490, -0.980320394214034610, -0.980310522334570830, +-0.980300648004330590, -0.980290771223338850, -0.980280891991620160, -0.980271010309199280, -0.980261126176100730, -0.980251239592349390, -0.980241350557970010, -0.980231459072987250, +-0.980221565137425870, -0.980211668751310490, -0.980201769914666010, -0.980191868627516950, -0.980181964889888400, -0.980172058701804900, -0.980162150063291330, -0.980152238974372310, +-0.980142325435072740, -0.980132409445417240, -0.980122491005430810, -0.980112570115138190, -0.980102646774563930, -0.980092720983733230, -0.980082792742670740, -0.980072862051401210, +-0.980062928909949620, -0.980052993318340620, -0.980043055276598960, -0.980033114784749860, -0.980023171842818060, -0.980013226450828220, -0.980003278608805320, -0.979993328316774330, +-0.979983375574759900, -0.979973420382787120, -0.979963462740880750, -0.979953502649065560, -0.979943540107366730, -0.979933575115809140, -0.979923607674417550, -0.979913637783216940, +-0.979903665442232290, -0.979893690651488240, -0.979883713411010100, -0.979873733720822760, -0.979863751580951070, -0.979853766991420020, -0.979843779952254580, -0.979833790463479630, +-0.979823798525120250, -0.979813804137201320, -0.979803807299747920, -0.979793808012784820, -0.979783806276337320, -0.979773802090430300, -0.979763795455088850, -0.979753786370337940, +-0.979743774836202340, -0.979733760852707470, -0.979723744419878200, -0.979713725537739500, -0.979703704206316580, -0.979693680425634430, -0.979683654195718010, -0.979673625516592540, +-0.979663594388282880, -0.979653560810814340, -0.979643524784211680, -0.979633486308500330, -0.979623445383705380, -0.979613402009851700, -0.979603356186964590, -0.979593307915068930, +-0.979583257194190150, -0.979573204024353220, -0.979563148405583230, -0.979553090337905390, -0.979543029821344890, -0.979532966855926720, -0.979522901441676200, -0.979512833578618510, +-0.979502763266778650, -0.979492690506181710, -0.979482615296853210, -0.979472537638818140, -0.979462457532101700, -0.979452374976729210, -0.979442289972725750, -0.979432202520116420, +-0.979422112618926750, -0.979412020269181730, -0.979401925470906760, -0.979391828224126960, -0.979381728528867510, -0.979371626385153740, -0.979361521793010950, -0.979351414752464340, +-0.979341305263539130, -0.979331193326260730, -0.979321078940654340, -0.979310962106745290, -0.979300842824558760, -0.979290721094120190, -0.979280596915454660, -0.979270470288587710, +-0.979260341213544660, -0.979250209690350810, -0.979240075719031380, -0.979229939299611770, -0.979219800432117320, -0.979209659116573320, -0.979199515353005200, -0.979189369141438280, +-0.979179220481897760, -0.979169069374409400, -0.979158915818998390, -0.979148759815690050, -0.979138601364509810, -0.979128440465482860, -0.979118277118635080, -0.979108111323991560, +-0.979097943081577720, -0.979087772391419090, -0.979077599253540990, -0.979067423667968840, -0.979057245634728180, -0.979047065153844430, -0.979036882225343020, -0.979026696849249260, +-0.979016509025588900, -0.979006318754387150, -0.978996126035669770, -0.978985930869461950, -0.978975733255789240, -0.978965533194677270, -0.978955330686151590, -0.978945125730237510, +-0.978934918326960560, -0.978924708476346380, -0.978914496178420410, -0.978904281433208290, -0.978894064240735330, -0.978883844601027290, -0.978873622514109480, -0.978863397980007770, +-0.978853170998747470, -0.978842941570354340, -0.978832709694853920, -0.978822475372271630, -0.978812238602633000, -0.978801999385963910, -0.978791757722289880, -0.978781513611636340, +-0.978771267054029170, -0.978761018049493780, -0.978750766598055820, -0.978740512699740940, -0.978730256354574780, -0.978719997562582880, -0.978709736323791100, -0.978699472638224990, +-0.978689206505910180, -0.978678937926872330, -0.978668666901137190, -0.978658393428730180, -0.978648117509677400, -0.978637839144004260, -0.978627558331736540, -0.978617275072899970, +-0.978606989367520220, -0.978596701215622920, -0.978586410617233950, -0.978576117572378950, -0.978565822081083450, -0.978555524143373550, -0.978545223759274880, -0.978534920928813110, +-0.978524615652014100, -0.978514307928903480, -0.978503997759506920, -0.978493685143850600, -0.978483370081959960, -0.978473052573861080, -0.978462732619579390, -0.978452410219140980, +-0.978442085372571490, -0.978431758079896800, -0.978421428341142760, -0.978411096156335040, -0.978400761525499480, -0.978390424448662200, -0.978380084925848830, -0.978369742957085230, +-0.978359398542397280, -0.978349051681810740, -0.978338702375351700, -0.978328350623045910, -0.978317996424919230, -0.978307639780997550, -0.978297280691306730, -0.978286919155872740, +-0.978276555174721450, -0.978266188747878850, -0.978255819875370690, -0.978245448557222840, -0.978235074793461610, -0.978224698584112540, -0.978214319929201830, -0.978203938828755340, +-0.978193555282798940, -0.978183169291358510, -0.978172780854460240, -0.978162389972130120, -0.978151996644394010, -0.978141600871277990, -0.978131202652807840, -0.978120801989009750, +-0.978110398879909580, -0.978099993325533430, -0.978089585325907170, -0.978079174881057110, -0.978068761991009120, -0.978058346655789280, -0.978047928875423470, -0.978037508649937880, +-0.978027085979358390, -0.978016660863711310, -0.978006233303022610, -0.977995803297318280, -0.977985370846624400, -0.977974935950967180, -0.977964498610372600, -0.977954058824866750, +-0.977943616594475820, -0.977933171919225570, -0.977922724799142660, -0.977912275234252950, -0.977901823224582410, -0.977891368770157480, -0.977880911871004010, -0.977870452527148100, +-0.977859990738616290, -0.977849526505434550, -0.977839059827628860, -0.977828590705225650, -0.977818119138250900, -0.977807645126730800, -0.977797168670691660, -0.977786689770159590, +-0.977776208425160780, -0.977765724635721310, -0.977755238401867620, -0.977744749723625910, -0.977734258601022250, -0.977723765034083090, -0.977713269022834170, -0.977702770567302370, +-0.977692269667513550, -0.977681766323494130, -0.977671260535270310, -0.977660752302868310, -0.977650241626314420, -0.977639728505634960, -0.977629212940856140, -0.977618694932004260, +-0.977608174479105530, -0.977597651582186480, -0.977587126241273420, -0.977576598456392440, -0.977566068227569970, -0.977555535554832320, -0.977545000438205690, -0.977534462877716730, +-0.977523922873391630, -0.977513380425256710, -0.977502835533338390, -0.977492288197662870, -0.977481738418256700, -0.977471186195146170, -0.977460631528357720, -0.977450074417917420, +-0.977439514863852170, -0.977428952866188140, -0.977418388424951770, -0.977407821540169360, -0.977397252211867350, -0.977386680440072150, -0.977376106224810300, -0.977365529566108340, +-0.977354950463992460, -0.977344368918489190, -0.977333784929625080, -0.977323198497426440, -0.977312609621919790, -0.977302018303131680, -0.977291424541088300, -0.977280828335816530, +-0.977270229687342670, -0.977259628595693260, -0.977249025060894840, -0.977238419082973820, -0.977227810661956520, -0.977217199797869920, -0.977206586490740330, -0.977195970740594280, +-0.977185352547458310, -0.977174731911358950, -0.977164108832322740, -0.977153483310376210, -0.977142855345546010, -0.977132224937858670, -0.977121592087340620, -0.977110956794018830, +-0.977100319057919500, -0.977089678879069500, -0.977079036257495260, -0.977068391193223200, -0.977057743686280400, -0.977047093736693180, -0.977036441344488300, -0.977025786509692300, +-0.977015129232331800, -0.977004469512433580, -0.976993807350024060, -0.976983142745130100, -0.976972475697778230, -0.976961806207995000, -0.976951134275807490, -0.976940459901242120, +-0.976929783084325540, -0.976919103825084620, -0.976908422123545780, -0.976897737979735780, -0.976887051393681700, -0.976876362365409870, -0.976865670894947250, -0.976854976982320380, +-0.976844280627556020, -0.976833581830681030, -0.976822880591722060, -0.976812176910705990, -0.976801470787659110, -0.976790762222608850, -0.976780051215581760, -0.976769337766604350, +-0.976758621875703730, -0.976747903542906530, -0.976737182768239400, -0.976726459551729430, -0.976715733893403380, -0.976705005793288010, -0.976694275251410060, -0.976683542267796520, +-0.976672806842474040, -0.976662068975469590, -0.976651328666809930, -0.976640585916521700, -0.976629840724632330, -0.976619093091168230, -0.976608343016156510, -0.976597590499623910, +-0.976586835541597310, -0.976576078142103340, -0.976565318301169550, -0.976554556018822350, -0.976543791295088730, -0.976533024129995760, -0.976522254523570110, -0.976511482475838850, +-0.976500707986828980, -0.976489931056567230, -0.976479151685080700, -0.976468369872396050, -0.976457585618540680, -0.976446798923541360, -0.976436009787425060, -0.976425218210218770, +-0.976414424191949240, -0.976403627732643780, -0.976392828832329250, -0.976382027491032640, -0.976371223708781040, -0.976360417485601320, -0.976349608821520550, -0.976338797716565840, +-0.976327984170764050, -0.976317168184142380, -0.976306349756727480, -0.976295528888546980, -0.976284705579627650, -0.976273879829996580, -0.976263051639680750, -0.976252221008707340, +-0.976241387937103130, -0.976230552424895650, -0.976219714472111870, -0.976208874078778770, -0.976198031244923440, -0.976187185970573080, -0.976176338255754780, -0.976165488100495530, +-0.976154635504822620, -0.976143780468762930, -0.976132922992344000, -0.976122063075592790, -0.976111200718536300, -0.976100335921201930, -0.976089468683616680, -0.976078599005807510, +-0.976067726887802190, -0.976056852329627360, -0.976045975331310540, -0.976035095892878730, -0.976024214014359240, -0.976013329695779140, -0.976002442937165760, -0.975991553738546180, +-0.975980662099947600, -0.975969768021397570, -0.975958871502923150, -0.975947972544551460, -0.975937071146309900, -0.975926167308225680, -0.975915261030325780, -0.975904352312637950, +-0.975893441155189280, -0.975882527558006970, -0.975871611521118340, -0.975860693044550700, -0.975849772128331240, -0.975838848772487500, -0.975827922977046570, -0.975816994742035760, +-0.975806064067482380, -0.975795130953413970, -0.975784195399857720, -0.975773257406841070, -0.975762316974391200, -0.975751374102535430, -0.975740428791301300, -0.975729481040716220, +-0.975718530850807290, -0.975707578221602150, -0.975696623153128000, -0.975685665645412370, -0.975674705698482580, -0.975663743312365940, -0.975652778487089980, -0.975641811222681900, +-0.975630841519169460, -0.975619869376579850, -0.975608894794940730, -0.975597917774279290, -0.975586938314622950, -0.975575956415999260, -0.975564972078435730, -0.975553985301959800, +-0.975542996086599000, -0.975532004432380640, -0.975521010339332250, -0.975510013807481370, -0.975499014836855420, -0.975488013427481930, -0.975477009579388320, -0.975466003292602250, +-0.975454994567151230, -0.975443983403062710, -0.975432969800364200, -0.975421953759083360, -0.975410935279247380, -0.975399914360884250, -0.975388891004021370, -0.975377865208686190, +-0.975366836974906450, -0.975355806302709570, -0.975344773192123090, -0.975333737643174770, -0.975322699655892130, -0.975311659230302500, -0.975300616366433950, -0.975289571064313800, +-0.975278523323969800, -0.975267473145429390, -0.975256420528720410, -0.975245365473870090, -0.975234307980906600, -0.975223248049857380, -0.975212185680749970, -0.975201120873612100, +-0.975190053628471440, -0.975178983945355740, -0.975167911824292410, -0.975156837265309440, -0.975145760268434360, -0.975134680833694590, -0.975123598961118440, -0.975112514650733230, +-0.975101427902566710, -0.975090338716646630, -0.975079247093000530, -0.975068153031656500, -0.975057056532642070, -0.975045957595985000, -0.975034856221713040, -0.975023752409853950, +-0.975012646160435480, -0.975001537473485390, -0.974990426349031550, -0.974979312787101480, -0.974968196787723060, -0.974957078350924270, -0.974945957476732850, -0.974934834165176460, +-0.974923708416283060, -0.974912580230080320, -0.974901449606595970, -0.974890316545858230, -0.974879181047894620, -0.974868043112733120, -0.974856902740401490, -0.974845759930927590, +-0.974834614684339300, -0.974823467000664470, -0.974812316879930970, -0.974801164322166460, -0.974790009327399340, -0.974778851895657050, -0.974767692026967780, -0.974756529721359180, +-0.974745364978859330, -0.974734197799495770, -0.974723028183296920, -0.974711856130290540, -0.974700681640504610, -0.974689504713966870, -0.974678325350705420, -0.974667143550748130, +-0.974655959314122970, -0.974644772640857910, -0.974633583530980730, -0.974622391984519830, -0.974611198001502870, -0.974600001581957920, -0.974588802725913080, -0.974577601433396110, +-0.974566397704434980, -0.974555191539058120, -0.974543982937293160, -0.974532771899168320, -0.974521558424711550, -0.974510342513950860, -0.974499124166914310, -0.974487903383630010, +-0.974476680164125920, -0.974465454508430140, -0.974454226416570420, -0.974442995888575410, -0.974431762924472980, -0.974420527524291090, -0.974409289688057840, -0.974398049415801220, +-0.974386806707549620, -0.974375561563331050, -0.974364313983173580, -0.974353063967105300, -0.974341811515154420, -0.974330556627348910, -0.974319299303717080, -0.974308039544287020, +-0.974296777349086820, -0.974285512718144450, -0.974274245651488570, -0.974262976149147030, -0.974251704211148040, -0.974240429837519790, -0.974229153028290500, -0.974217873783488120, +-0.974206592103141310, -0.974195307987277940, -0.974184021435926310, -0.974172732449114620, -0.974161441026871190, -0.974150147169223990, -0.974138850876201560, -0.974127552147831980, +-0.974116250984143340, -0.974104947385164180, -0.974093641350922690, -0.974082332881447190, -0.974071021976765760, -0.974059708636906720, -0.974048392861898370, -0.974037074651769140, +-0.974025754006547230, -0.974014430926260940, -0.974003105410938600, -0.973991777460608390, -0.973980447075298850, -0.973969114255038180, -0.973957778999854700, -0.973946441309776590, +-0.973935101184832620, -0.973923758625050760, -0.973912413630459660, -0.973901066201087410, -0.973889716336962530, -0.973878364038113230, -0.973867009304568150, -0.973855652136355500, +-0.973844292533503800, -0.973832930496041360, -0.973821566023996610, -0.973810199117397860, -0.973798829776273740, -0.973787458000652470, -0.973776083790562570, -0.973764707146032250, +-0.973753328067090360, -0.973741946553765110, -0.973730562606085040, -0.973719176224078550, -0.973707787407773970, -0.973696396157200050, -0.973685002472385210, -0.973673606353357870, +-0.973662207800146450, -0.973650806812779600, -0.973639403391285630, -0.973627997535693180, -0.973616589246030780, -0.973605178522326860, -0.973593765364609840, -0.973582349772908580, +-0.973570931747251400, -0.973559511287666930, -0.973548088394183720, -0.973536663066830180, -0.973525235305634950, -0.973513805110626680, -0.973502372481834020, -0.973490937419285270, +-0.973479499923009310, -0.973468059993034540, -0.973456617629389730, -0.973445172832103300, -0.973433725601203890, -0.973422275936720040, -0.973410823838680610, -0.973399369307114240, +-0.973387912342049360, -0.973376452943514710, -0.973364991111538960, -0.973353526846150510, -0.973342060147378450, -0.973330591015251210, -0.973319119449797540, -0.973307645451046090, +-0.973296169019025490, -0.973284690153764510, -0.973273208855291670, -0.973261725123635960, -0.973250238958825680, -0.973238750360890030, -0.973227259329857430, -0.973215765865756750, +-0.973204269968616640, -0.973192771638465850, -0.973181270875332900, -0.973169767679247010, -0.973158262050236700, -0.973146753988330730, -0.973135243493557960, -0.973123730565946920, +-0.973112215205526710, -0.973100697412325850, -0.973089177186373330, -0.973077654527697790, -0.973066129436327980, -0.973054601912292980, -0.973043071955621560, -0.973031539566342360, +-0.973020004744484360, -0.973008467490076190, -0.972996927803146950, -0.972985385683725500, -0.972973841131840490, -0.972962294147521000, -0.972950744730795680, -0.972939192881693500, +-0.972927638600243340, -0.972916081886474160, -0.972904522740414720, -0.972892961162093780, -0.972881397151540650, -0.972869830708783970, -0.972858261833852710, -0.972846690526775860, +-0.972835116787582050, -0.972823540616300720, -0.972811962012960500, -0.972800380977590250, -0.972788797510219180, -0.972777211610876160, -0.972765623279590040, -0.972754032516389810, +-0.972742439321304550, -0.972730843694363250, -0.972719245635594530, -0.972707645145027940, -0.972696042222692240, -0.972684436868616500, -0.972672829082829590, -0.972661218865360610, +-0.972649606216238420, -0.972637991135492430, -0.972626373623151410, -0.972614753679244440, -0.972603131303800720, -0.972591506496849000, -0.972579879258418600, -0.972568249588538490, +-0.972556617487237760, -0.972544982954545280, -0.972533345990490570, -0.972521706595102510, -0.972510064768410180, -0.972498420510442660, -0.972486773821229060, -0.972475124700798330, +-0.972463473149180020, -0.972451819166403000, -0.972440162752496450, -0.972428503907489470, -0.972416842631411260, -0.972405178924291010, -0.972393512786157710, -0.972381844217040660, +-0.972370173216968840, -0.972358499785971770, -0.972346823924078340, -0.972335145631317950, -0.972323464907719700, -0.972311781753312790, -0.972300096168126180, -0.972288408152189640, +-0.972276717705532030, -0.972265024828182560, -0.972253329520170520, -0.972241631781525230, -0.972229931612275890, -0.972218229012451580, -0.972206523982081850, -0.972194816521195770, +-0.972183106629822320, -0.972171394307991490, -0.972159679555732130, -0.972147962373073440, -0.972136242760044960, -0.972124520716675660, -0.972112796242995290, -0.972101069339032840, +-0.972089340004817840, -0.972077608240379360, -0.972065874045746960, -0.972054137420949820, -0.972042398366017360, -0.972030656880978890, -0.972018912965863740, -0.972007166620701190, +-0.971995417845520900, -0.971983666640352070, -0.971971913005224010, -0.971960156940166240, -0.971948398445208080, -0.971936637520378620, -0.971924874165707830, -0.971913108381224910, +-0.971901340166959170, -0.971889569522940140, -0.971877796449197140, -0.971866020945759580, -0.971854243012657100, -0.971842462649918910, -0.971830679857574430, -0.971818894635653410, +-0.971807106984185150, -0.971795316903199090, -0.971783524392724860, -0.971771729452791670, -0.971759932083429030, -0.971748132284666830, -0.971736330056534260, -0.971724525399060850, +-0.971712718312276010, -0.971700908796209520, -0.971689096850890780, -0.971677282476349210, -0.971665465672614470, -0.971653646439715860, -0.971641824777683240, -0.971630000686546150, +-0.971618174166334110, -0.971606345217076560, -0.971594513838803240, -0.971582680031543360, -0.971570843795326990, -0.971559005130183450, -0.971547164036142500, -0.971535320513233550, +-0.971523474561486360, -0.971511626180930450, -0.971499775371595490, -0.971487922133511090, -0.971476066466706920, -0.971464208371212390, -0.971452347847057470, -0.971440484894271710, +-0.971428619512884730, -0.971416751702926300, -0.971404881464425610, -0.971393008797413080, -0.971381133701917920, -0.971369256177969990, -0.971357376225598920, -0.971345493844834370, +-0.971333609035706090, -0.971321721798243830, -0.971309832132477240, -0.971297940038436060, -0.971286045516149830, -0.971274148565648750, -0.971262249186962250, -0.971250347380120060, +-0.971238443145152060, -0.971226536482088010, -0.971214627390957320, -0.971202715871790300, -0.971190801924616600, -0.971178885549465740, -0.971166966746367710, -0.971155045515352260, +-0.971143121856449240, -0.971131195769688430, -0.971119267255099560, -0.971107336312712400, -0.971095402942557030, -0.971083467144663090, -0.971071528919060680, -0.971059588265779320, +-0.971047645184848980, -0.971035699676299320, -0.971023751740160650, -0.971011801376462590, -0.970999848585235030, -0.970987893366507930, -0.970975935720310930, -0.970963975646674250, +-0.970952013145627510, -0.970940048217200810, -0.970928080861423790, -0.970916111078326760, -0.970904138867939360, -0.970892164230291790, -0.970880187165413690, -0.970868207673335150, +-0.970856225754085810, -0.970844241407696210, -0.970832254634195980, -0.970820265433615100, -0.970808273805983670, -0.970796279751331430, -0.970784283269688460, -0.970772284361084870, +-0.970760283025550510, -0.970748279263115470, -0.970736273073809610, -0.970724264457663130, -0.970712253414706130, -0.970700239944968350, -0.970688224048480100, -0.970676205725271020, +-0.970664184975371660, -0.970652161798811750, -0.970640136195621510, -0.970628108165830890, -0.970616077709470120, -0.970604044826569030, -0.970592009517157850, -0.970579971781266650, +-0.970567931618925520, -0.970555889030164430, -0.970543844015013700, -0.970531796573503520, -0.970519746705663660, -0.970507694411524620, -0.970495639691116190, -0.970483582544468540, +-0.970471522971612100, -0.970459460972576850, -0.970447396547392980, -0.970435329696090590, -0.970423260418699970, -0.970411188715251120, -0.970399114585774330, -0.970387038030299690, +-0.970374959048857290, -0.970362877641477660, -0.970350793808190890, -0.970338707549027070, -0.970326618864016610, -0.970314527753189490, -0.970302434216575800, -0.970290338254206410, +-0.970278239866111060, -0.970266139052320060, -0.970254035812863850, -0.970241930147772490, -0.970229822057076200, -0.970217711540805490, -0.970205598598990470, -0.970193483231661210, +-0.970181365438848480, -0.970169245220582340, -0.970157122576893130, -0.970144997507811020, -0.970132870013366460, -0.970120740093589510, -0.970108607748510930, -0.970096472978160820, +-0.970084335782569580, -0.970072196161767430, -0.970060054115784780, -0.970047909644652040, -0.970035762748399530, -0.970023613427057670, -0.970011461680656660, -0.969999307509226800, +-0.969987150912798970, -0.969974991891403240, -0.969962830445069920, -0.969950666573829670, -0.969938500277712450, -0.969926331556749230, -0.969914160410970230, -0.969901986840405740, +-0.969889810845086300, -0.969877632425042320, -0.969865451580304350, -0.969853268310902680, -0.969841082616867860, -0.969828894498230290, -0.969816703955020290, -0.969804510987268830, +-0.969792315595006000, -0.969780117778262340, -0.969767917537068480, -0.969755714871454840, -0.969743509781451630, -0.969731302267089810, -0.969719092328399810, -0.969706879965412160, +-0.969694665178157170, -0.969682447966665580, -0.969670228330967940, -0.969658006271094660, -0.969645781787076280, -0.969633554878943320, -0.969621325546726750, -0.969609093790456790, +-0.969596859610164060, -0.969584623005879220, -0.969572383977632900, -0.969560142525455300, -0.969547898649377630, -0.969535652349430180, -0.969523403625643600, -0.969511152478048420, +-0.969498898906675510, -0.969486642911555290, -0.969474384492718500, -0.969462123650195680, -0.969449860384017370, -0.969437594694214640, -0.969425326580817930, -0.969413056043857860, +-0.969400783083365190, -0.969388507699370460, -0.969376229891904420, -0.969363949660997930, -0.969351667006681520, -0.969339381928985940, -0.969327094427942070, -0.969314804503580320, +-0.969302512155931550, -0.969290217385026520, -0.969277920190895980, -0.969265620573570690, -0.969253318533081050, -0.969241014069458400, -0.969228707182733130, -0.969216397872936120, +-0.969204086140098120, -0.969191771984249660, -0.969179455405422050, -0.969167136403645820, -0.969154814978951620, -0.969142491131370520, -0.969130164860933170, -0.969117836167670330, +-0.969105505051612970, -0.969093171512791840, -0.969080835551237700, -0.969068497166981400, -0.969056156360053930, -0.969043813130486150, -0.969031467478308820, -0.969019119403552900, +-0.969006768906249040, -0.968994415986428100, -0.968982060644121400, -0.968969702879359460, -0.968957342692173260, -0.968944980082593780, -0.968932615050651870, -0.968920247596378290, +-0.968907877719804240, -0.968895505420960370, -0.968883130699877530, -0.968870753556587140, -0.968858373991119850, -0.968845992003506630, -0.968833607593778460, -0.968821220761966200, +-0.968808831508100710, -0.968796439832213420, -0.968784045734334960, -0.968771649214496430, -0.968759250272728690, -0.968746848909062930, -0.968734445123529910, -0.968722038916160930, +-0.968709630286986760, -0.968697219236038350, -0.968684805763347030, -0.968672389868943770, -0.968659971552859540, -0.968647550815125320, -0.968635127655772310, -0.968622702074831140, +-0.968610274072333580, -0.968597843648310250, -0.968585410802792260, -0.968572975535810900, -0.968560537847396930, -0.968548097737581770, -0.968535655206396280, -0.968523210253871670, +-0.968510762880039010, -0.968498313084929290, -0.968485860868573910, -0.968473406231003970, -0.968460949172250450, -0.968448489692344540, -0.968436027791317210, -0.968423563469200110, +-0.968411096726023990, -0.968398627561820160, -0.968386155976619810, -0.968373681970454040, -0.968361205543354140, -0.968348726695351100, -0.968336245426476340, -0.968323761736760940, +-0.968311275626235870, -0.968298787094932890, -0.968286296142882860, -0.968273802770117210, -0.968261306976666900, -0.968248808762563470, -0.968236308127837670, -0.968223805072521370, +-0.968211299596645650, -0.968198791700241590, -0.968186281383340620, -0.968173768645973820, -0.968161253488172720, -0.968148735909968420, -0.968136215911392320, -0.968123693492475400, +-0.968111168653249530, -0.968098641393745800, -0.968086111713995390, -0.968073579614029620, -0.968061045093880020, -0.968048508153577570, -0.968035968793154010, -0.968023427012640550, +-0.968010882812068600, -0.967998336191469360, -0.967985787150874240, -0.967973235690314790, -0.967960681809822200, -0.967948125509427880, -0.967935566789163040, -0.967923005649059420, +-0.967910442089148340, -0.967897876109461210, -0.967885307710029340, -0.967872736890884270, -0.967860163652057070, -0.967847587993579730, -0.967835009915483320, -0.967822429417799500, +-0.967809846500559570, -0.967797261163794940, -0.967784673407537270, -0.967772083231817850, -0.967759490636668220, -0.967746895622119910, -0.967734298188204110, -0.967721698334952810, +-0.967709096062397300, -0.967696491370569010, -0.967683884259499470, -0.967671274729219990, -0.967658662779762650, -0.967646048411158530, -0.967633431623439400, -0.967620812416636560, +-0.967608190790781750, -0.967595566745906520, -0.967582940282042280, -0.967570311399220780, -0.967557680097473450, -0.967545046376831700, -0.967532410237327500, -0.967519771678992390, +-0.967507130701857790, -0.967494487305955330, -0.967481841491316660, -0.967469193257973200, -0.967456542605957040, -0.967443889535299470, -0.967431234046032150, -0.967418576138186710, +-0.967405915811794910, -0.967393253066888280, -0.967380587903498570, -0.967367920321657300, -0.967355250321396130, -0.967342577902746910, -0.967329903065741400, -0.967317225810411020, +-0.967304546136787620, -0.967291864044902860, -0.967279179534788150, -0.967266492606475790, -0.967253803259997210, -0.967241111495384050, -0.967228417312668180, -0.967215720711881220, +-0.967203021693054940, -0.967190320256221200, -0.967177616401411640, -0.967164910128657680, -0.967152201437991850, -0.967139490329445460, -0.967126776803050260, -0.967114060858838220, +-0.967101342496840990, -0.967088621717090090, -0.967075898519617950, -0.967063172904456090, -0.967050444871636270, -0.967037714421190350, -0.967024981553150200, -0.967012246267547450, +-0.966999508564414190, -0.966986768443782170, -0.966974025905683150, -0.966961280950148880, -0.966948533577211670, -0.966935783786903040, -0.966923031579255080, -0.966910276954299430, +-0.966897519912067850, -0.966884760452592750, -0.966871998575905780, -0.966859234282038790, -0.966846467571023660, -0.966833698442892460, -0.966820926897676960, -0.966808152935409120, +-0.966795376556120910, -0.966782597759844320, -0.966769816546610870, -0.966757032916453210, -0.966744246869402970, -0.966731458405492130, -0.966718667524752550, -0.966705874227216430, +-0.966693078512915300, -0.966680280381881700, -0.966667479834147470, -0.966654676869744490, -0.966641871488704840, -0.966629063691060500, -0.966616253476843430, -0.966603440846085850, +-0.966590625798819600, -0.966577808335076560, -0.966564988454889250, -0.966552166158289540, -0.966539341445309290, -0.966526514315980690, -0.966513684770335950, -0.966500852808406590, +-0.966488018430225470, -0.966475181635824240, -0.966462342425234990, -0.966449500798490010, -0.966436656755621180, -0.966423810296660800, -0.966410961421640850, -0.966398110130593510, +-0.966385256423550660, -0.966372400300544830, -0.966359541761608100, -0.966346680806772440, -0.966333817436070050, -0.966320951649533240, -0.966308083447193770, -0.966295212829084260, +-0.966282339795236810, -0.966269464345683500, -0.966256586480456430, -0.966243706199587990, -0.966230823503110290, -0.966217938391055520, -0.966205050863455870, -0.966192160920343550, +-0.966179268561750740, -0.966166373787709860, -0.966153476598253120, -0.966140576993412600, -0.966127674973220720, -0.966114770537709440, -0.966101863686911420, -0.966088954420858740, +-0.966076042739583700, -0.966063128643118500, -0.966050212131495560, -0.966037293204746960, -0.966024371862905240, -0.966011448106002590, -0.965998521934071320, -0.965985593347143400, +-0.965972662345251810, -0.965959728928428630, -0.965946793096706060, -0.965933854850116510, -0.965920914188692080, -0.965907971112465620, -0.965895025621469230, -0.965882077715735310, +-0.965869127395296180, -0.965856174660184140, -0.965843219510431730, -0.965830261946071360, -0.965817301967135220, -0.965804339573655860, -0.965791374765665460, -0.965778407543196770, +-0.965765437906282110, -0.965752465854953890, -0.965739491389244420, -0.965726514509186230, -0.965713535214811620, -0.965700553506153360, -0.965687569383243740, -0.965674582846115070, +-0.965661593894800110, -0.965648602529331050, -0.965635608749740530, -0.965622612556060970, -0.965609613948324900, -0.965596612926564510, -0.965583609490812900, -0.965570603641102250, +-0.965557595377465110, -0.965544584699933870, -0.965531571608541310, -0.965518556103319490, -0.965505538184301510, -0.965492517851519790, -0.965479495105006640, -0.965466469944794900, +-0.965453442370916900, -0.965440412383405280, -0.965427379982292670, -0.965414345167611600, -0.965401307939394600, -0.965388268297674210, -0.965375226242483290, -0.965362181773854360, +-0.965349134891819950, -0.965336085596412710, -0.965323033887665050, -0.965309979765609950, -0.965296923230280050, -0.965283864281707760, -0.965270802919925730, -0.965257739144966820, +-0.965244672956863450, -0.965231604355648480, -0.965218533341354550, -0.965205459914014190, -0.965192384073659930, -0.965179305820325070, -0.965166225154041820, -0.965153142074843040, +-0.965140056582761470, -0.965126968677829430, -0.965113878360080220, -0.965100785629546380, -0.965087690486260530, -0.965074592930255440, -0.965061492961563960, -0.965048390580218630, +-0.965035285786252420, -0.965022178579697850, -0.965009068960588020, -0.964995956928955120, -0.964982842484832680, -0.964969725628253120, -0.964956606359249180, -0.964943484677853740, +-0.964930360584099640, -0.964917234078019440, -0.964904105159646310, -0.964890973829012900, -0.964877840086152070, -0.964864703931096690, -0.964851565363879500, -0.964838424384533490, +-0.964825280993091280, -0.964812135189585970, -0.964798986974050090, -0.964785836346516930, -0.964772683307019150, -0.964759527855589720, -0.964746369992261490, -0.964733209717067220, +-0.964720047030039770, -0.964706881931212460, -0.964693714420617910, -0.964680544498289110, -0.964667372164258910, -0.964654197418560290, -0.964641020261226220, -0.964627840692289570, +-0.964614658711783310, -0.964601474319740190, -0.964588287516193630, -0.964575098301176270, -0.964561906674721190, -0.964548712636861370, -0.964535516187629780, -0.964522317327059180, +-0.964509116055182970, -0.964495912372034030, -0.964482706277645320, -0.964469497772049820, -0.964456286855280510, -0.964443073527370580, -0.964429857788352880, -0.964416639638260630, +-0.964403419077126680, -0.964390196104984000, -0.964376970721866010, -0.964363742927805690, -0.964350512722836010, -0.964337280106989940, -0.964324045080300560, -0.964310807642801190, +-0.964297567794524910, -0.964284325535504580, -0.964271080865773510, -0.964257833785364780, -0.964244584294311480, -0.964231332392646580, -0.964218078080403500, -0.964204821357615090, +-0.964191562224314570, -0.964178300680535230, -0.964165036726310150, -0.964151770361672540, -0.964138501586655480, -0.964125230401292170, -0.964111956805615570, -0.964098680799659210, +-0.964085402383456300, -0.964072121557039810, -0.964058838320442920, -0.964045552673699070, -0.964032264616841330, -0.964018974149902900, -0.964005681272916970, -0.963992385985916740, +-0.963979088288935640, -0.963965788182006960, -0.963952485665163670, -0.963939180738439320, -0.963925873401866860, -0.963912563655479620, -0.963899251499311100, -0.963885936933394530, +-0.963872619957763080, -0.963859300572450060, -0.963845978777488790, -0.963832654572912560, -0.963819327958754800, -0.963805998935048590, -0.963792667501827240, -0.963779333659124380, +-0.963765997406973220, -0.963752658745407050, -0.963739317674459310, -0.963725974194163280, -0.963712628304551950, -0.963699280005659410, -0.963685929297518620, -0.963672576180163000, +-0.963659220653625970, -0.963645862717940840, -0.963632502373141020, -0.963619139619260050, -0.963605774456331220, -0.963592406884387850, -0.963579036903463360, -0.963565664513591490, +-0.963552289714805330, -0.963538912507138520, -0.963525532890624480, -0.963512150865296400, -0.963498766431188040, -0.963485379588332910, -0.963471990336764230, -0.963458598676515620, +-0.963445204607620510, -0.963431808130112420, -0.963418409244024780, -0.963405007949391100, -0.963391604246244930, -0.963378198134619450, -0.963364789614548740, -0.963351378686066130, +-0.963337965349204910, -0.963324549603998940, -0.963311131450481530, -0.963297710888686100, -0.963284287918646510, -0.963270862540396290, -0.963257434753968970, -0.963244004559397960, +-0.963230571956717020, -0.963217136945959560, -0.963203699527159340, -0.963190259700349880, -0.963176817465564490, -0.963163372822837260, -0.963149925772201710, -0.963136476313691260, +-0.963123024447339660, -0.963109570173180440, -0.963096113491247020, -0.963082654401573700, -0.963069192904193680, -0.963055728999140600, -0.963042262686448320, -0.963028793966150260, +-0.963015322838280290, -0.963001849302872030, -0.962988373359959130, -0.962974895009575120, -0.962961414251753970, -0.962947931086529430, -0.962934445513934920, -0.962920957534004420, +-0.962907467146771450, -0.962893974352269640, -0.962880479150533100, -0.962866981541595330, -0.962853481525490110, -0.962839979102251280, -0.962826474271912370, -0.962812967034507360, +-0.962799457390069890, -0.962785945338633820, -0.962772430880232900, -0.962758914014900660, -0.962745394742671290, -0.962731873063578550, -0.962718348977656070, -0.962704822484937720, +-0.962691293585457020, -0.962677762279248390, -0.962664228566345370, -0.962650692446781700, -0.962637153920591350, -0.962623612987808070, -0.962610069648465850, -0.962596523902598420, +-0.962582975750239660, -0.962569425191423410, -0.962555872226183440, -0.962542316854554050, -0.962528759076568760, -0.962515198892261670, -0.962501636301666630, -0.962488071304817390, +-0.962474503901747710, -0.962460934092492120, -0.962447361877084130, -0.962433787255557730, -0.962420210227946880, -0.962406630794285570, -0.962393048954607530, -0.962379464708946970, +-0.962365878057337750, -0.962352288999813620, -0.962338697536408880, -0.962325103667157510, -0.962311507392093370, -0.962297908711250430, -0.962284307624662770, -0.962270704132364040, +-0.962257098234388870, -0.962243489930770910, -0.962229879221544240, -0.962216266106742820, -0.962202650586400750, -0.962189032660552000, -0.962175412329230760, -0.962161789592471010, +-0.962148164450306490, -0.962134536902771840, -0.962120906949900820, -0.962107274591727510, -0.962093639828286110, -0.962080002659610470, -0.962066363085734680, -0.962052721106693150, +-0.962039076722519870, -0.962025429933248910, -0.962011780738914360, -0.961998129139550410, -0.961984475135191030, -0.961970818725870540, -0.961957159911623010, -0.961943498692482520, +-0.961929835068483060, -0.961916169039659260, -0.961902500606045100, -0.961888829767674650, -0.961875156524582110, -0.961861480876801460, -0.961847802824367330, -0.961834122367313690, +-0.961820439505674750, -0.961806754239484700, -0.961793066568777720, -0.961779376493588130, -0.961765684013950130, -0.961751989129897900, -0.961738291841465640, -0.961724592148687440, +-0.961710890051598040, -0.961697185550231430, -0.961683478644621780, -0.961669769334803530, -0.961656057620810740, -0.961642343502677630, -0.961628626980438940, -0.961614908054128640, +-0.961601186723781030, -0.961587462989430540, -0.961573736851111360, -0.961560008308857790, -0.961546277362704260, -0.961532544012684950, -0.961518808258834180, -0.961505070101186580, +-0.961491329539776230, -0.961477586574637550, -0.961463841205804970, -0.961450093433312780, -0.961436343257195180, -0.961422590677486920, -0.961408835694222090, -0.961395078307435310, +-0.961381318517160690, -0.961367556323432850, -0.961353791726286210, -0.961340024725754970, -0.961326255321873660, -0.961312483514676570, -0.961298709304198360, -0.961284932690473550, +-0.961271153673536330, -0.961257372253421230, -0.961243588430162670, -0.961229802203794950, -0.961216013574352930, -0.961202222541870820, -0.961188429106383250, -0.961174633267924630, +-0.961160835026529380, -0.961147034382232040, -0.961133231335067120, -0.961119425885069050, -0.961105618032272570, -0.961091807776711660, -0.961077995118421510, -0.961064180057436430, +-0.961050362593790840, -0.961036542727519370, -0.961022720458656330, -0.961008895787236690, -0.960995068713294760, -0.960981239236865290, -0.960967407357982580, -0.960953573076681500, +-0.960939736392996350, -0.960925897306961980, -0.960912055818612830, -0.960898211927983410, -0.960884365635108370, -0.960870516940022680, -0.960856665842760640, -0.960842812343356890, +-0.960828956441846180, -0.960815098138263050, -0.960801237432641900, -0.960787374325017930, -0.960773508815425560, -0.960759640903899310, -0.960745770590474060, -0.960731897875184320, +-0.960718022758064950, -0.960704145239150380, -0.960690265318475570, -0.960676382996074720, -0.960662498271983250, -0.960648611146235560, -0.960634721618866320, -0.960620829689910250, +-0.960606935359402110, -0.960593038627376330, -0.960579139493868310, -0.960565237958912350, -0.960551334022543330, -0.960537427684796000, -0.960523518945705090, -0.960509607805305370, +-0.960495694263631680, -0.960481778320718680, -0.960467859976601000, -0.960453939231313950, -0.960440016084892050, -0.960426090537370160, -0.960412162588782920, -0.960398232239165320, +-0.960384299488551970, -0.960370364336978090, -0.960356426784478190, -0.960342486831087360, -0.960328544476840240, -0.960314599721771800, -0.960300652565916790, -0.960286703009310180, +-0.960272751051986840, -0.960258796693981620, -0.960244839935329160, -0.960230880776064890, -0.960216919216223320, -0.960202955255839540, -0.960188988894948300, -0.960175020133584360, +-0.960161048971783230, -0.960147075409579330, -0.960133099447007870, -0.960119121084103580, -0.960105140320901440, -0.960091157157436540, -0.960077171593743730, -0.960063183629857870, +-0.960049193265814170, -0.960035200501647260, -0.960021205337392550, -0.960007207773084790, -0.959993207808759070, -0.959979205444450370, -0.959965200680193640, -0.959951193516023650, +-0.959937183951975800, -0.959923171988085190, -0.959909157624386560, -0.959895140860914990, -0.959881121697705560, -0.959867100134793370, -0.959853076172213490, -0.959839049810000900, +-0.959825021048190340, -0.959810989886817570, -0.959796956325917330, -0.959782920365524590, -0.959768882005674670, -0.959754841246402530, -0.959740798087742930, -0.959726752529731720, +-0.959712704572403540, -0.959698654215793590, -0.959684601459937060, -0.959670546304869030, -0.959656488750624590, -0.959642428797238930, -0.959628366444747250, -0.959614301693184400, +-0.959600234542586030, -0.959586164992987100, -0.959572093044422700, -0.959558018696928140, -0.959543941950538490, -0.959529862805288740, -0.959515781261214510, -0.959501697318350890, +-0.959487610976733070, -0.959473522236396150, -0.959459431097375530, -0.959445337559706180, -0.959431241623423640, -0.959417143288562870, -0.959403042555159290, -0.959388939423247880, +-0.959374833892864380, -0.959360725964043760, -0.959346615636821330, -0.959332502911232400, -0.959318387787311930, -0.959304270265095680, -0.959290150344618840, -0.959276028025916610, +-0.959261903309024280, -0.959247776193977280, -0.959233646680810790, -0.959219514769560130, -0.959205380460260710, -0.959191243752947840, -0.959177104647656600, -0.959162963144422950, +-0.959148819243281770, -0.959134672944268570, -0.959120524247418670, -0.959106373152767590, -0.959092219660350190, -0.959078063770202550, -0.959063905482359760, -0.959049744796857120, +-0.959035581713730160, -0.959021416233014290, -0.959007248354744820, -0.958993078078957280, -0.958978905405687090, -0.958964730334969320, -0.958950552866839940, -0.958936373001334270, +-0.958922190738487610, -0.958908006078335480, -0.958893819020913310, -0.958879629566256390, -0.958865437714400580, -0.958851243465381310, -0.958837046819233760, -0.958822847775993690, +-0.958808646335696510, -0.958794442498377640, -0.958780236264072720, -0.958766027632817260, -0.958751816604646480, -0.958737603179596330, -0.958723387357702130, -0.958709169138999620, +-0.958694948523524100, -0.958680725511311230, -0.958666500102396180, -0.958652272296815270, -0.958638042094603680, -0.958623809495796840, -0.958609574500430610, -0.958595337108540390, +-0.958581097320161950, -0.958566855135330580, -0.958552610554082140, -0.958538363576452280, -0.958524114202476190, -0.958509862432190050, -0.958495608265629180, -0.958481351702829440, +-0.958467092743826240, -0.958452831388655000, -0.958438567637352020, -0.958424301489952610, -0.958410032946492410, -0.958395762007007160, -0.958381488671532500, -0.958367212940104190, +-0.958352934812757740, -0.958338654289528910, -0.958324371370453560, -0.958310086055567000, -0.958295798344905530, -0.958281508238504440, -0.958267215736399610, -0.958252920838626790, +-0.958238623545221710, -0.958224323856219810, -0.958210021771657260, -0.958195717291569720, -0.958181410415992810, -0.958167101144962510, -0.958152789478514340, -0.958138475416684290, +-0.958124158959507980, -0.958109840107021270, -0.958095518859259700, -0.958081195216259670, -0.958066869178056610, -0.958052540744686380, -0.958038209916184820, -0.958023876692587710, +-0.958009541073930550, -0.957995203060249880, -0.957980862651581220, -0.957966519847960440, -0.957952174649423280, -0.957937827056005720, -0.957923477067743610, -0.957909124684672820, +-0.957894769906829200, -0.957880412734248400, -0.957866053166966820, -0.957851691205020120, -0.957837326848444140, -0.957822960097274860, -0.957808590951548240, -0.957794219411299830, +-0.957779845476566140, -0.957765469147382810, -0.957751090423785920, -0.957736709305811230, -0.957722325793494700, -0.957707939886872420, -0.957693551585980350, -0.957679160890854250, +-0.957664767801530430, -0.957650372318044290, -0.957635974440432580, -0.957621574168730840, -0.957607171502975250, -0.957592766443201680, -0.957578358989445880, -0.957563949141744590, +-0.957549536900133340, -0.957535122264648210, -0.957520705235325290, -0.957506285812200650, -0.957491863995310280, -0.957477439784690240, -0.957463013180376630, -0.957448584182405420, +-0.957434152790812560, -0.957419719005634610, -0.957405282826907290, -0.957390844254666810, -0.957376403288949130, -0.957361959929790340, -0.957347514177226740, -0.957333066031294420, +-0.957318615492029460, -0.957304162559468040, -0.957289707233646040, -0.957275249514599860, -0.957260789402365590, -0.957246326896979300, -0.957231861998477210, -0.957217394706895150, +-0.957202925022270000, -0.957188452944637390, -0.957173978474033740, -0.957159501610495120, -0.957145022354057740, -0.957130540704757560, -0.957116056662631220, -0.957101570227714800, +-0.957087081400044500, -0.957072590179656400, -0.957058096566586910, -0.957043600560872120, -0.957029102162548330, -0.957014601371651840, -0.957000098188218520, -0.956985592612285220, +-0.956971084643888030, -0.956956574283063020, -0.956942061529846620, -0.956927546384275020, -0.956913028846384410, -0.956898508916211420, -0.956883986593792150, -0.956869461879162890, +-0.956854934772360060, -0.956840405273419850, -0.956825873382378570, -0.956811339099272630, -0.956796802424138340, -0.956782263357011890, -0.956767721897929910, -0.956753178046928720, +-0.956738631804044500, -0.956724083169313790, -0.956709532142772770, -0.956694978724457750, -0.956680422914405470, -0.956665864712652250, -0.956651304119234270, -0.956636741134188060, +-0.956622175757549930, -0.956607607989356400, -0.956593037829643890, -0.956578465278448810, -0.956563890335807580, -0.956549313001756270, -0.956534733276331980, -0.956520151159570790, +-0.956505566651509320, -0.956490979752183890, -0.956476390461630800, -0.956461798779886910, -0.956447204706988630, -0.956432608242972270, -0.956418009387874360, -0.956403408141731530, +-0.956388804504580080, -0.956374198476456660, -0.956359590057397790, -0.956344979247439890, -0.956330366046619250, -0.956315750454972970, -0.956301132472537340, -0.956286512099348900, +-0.956271889335444160, -0.956257264180859660, -0.956242636635631800, -0.956228006699797570, -0.956213374373393380, -0.956198739656455740, -0.956184102549021200, -0.956169463051126380, +-0.956154821162807920, -0.956140176884102470, -0.956125530215046540, -0.956110881155676550, -0.956096229706029590, -0.956081575866142060, -0.956066919636050620, -0.956052261015791880, +-0.956037600005402390, -0.956022936604918770, -0.956008270814378000, -0.955993602633816610, -0.955978932063271110, -0.955964259102778380, -0.955949583752374930, -0.955934906012097630, +-0.955920225881982890, -0.955905543362067790, -0.955890858452388410, -0.955876171152982180, -0.955861481463885610, -0.955846789385135230, -0.955832094916767900, -0.955817398058820380, +-0.955802698811329070, -0.955787997174331270, -0.955773293147863520, -0.955758586731962460, -0.955743877926665040, -0.955729166732007810, -0.955714453148027720, -0.955699737174761530, +-0.955685018812245990, -0.955670298060517840, -0.955655574919613730, -0.955640849389570950, -0.955626121470426030, -0.955611391162215830, -0.955596658464977100, -0.955581923378746480, +-0.955567185903561380, -0.955552446039458210, -0.955537703786474070, -0.955522959144645580, -0.955508212114009710, -0.955493462694603220, -0.955478710886463190, -0.955463956689626360, +-0.955449200104129590, -0.955434441130009640, -0.955419679767303800, -0.955404916016048710, -0.955390149876281350, -0.955375381348038680, -0.955360610431357560, -0.955345837126274630, +-0.955331061432827310, -0.955316283351052340, -0.955301502880986700, -0.955286720022667350, -0.955271934776131150, -0.955257147141415190, -0.955242357118556210, -0.955227564707591400, +-0.955212769908557520, -0.955197972721491870, -0.955183173146431310, -0.955168371183412800, -0.955153566832473430, -0.955138760093650060, -0.955123950966979550, -0.955109139452499530, +-0.955094325550246540, -0.955079509260257750, -0.955064690582570260, -0.955049869517220930, -0.955035046064247050, -0.955020220223685490, -0.955005391995573330, -0.954990561379947530, +-0.954975728376845520, -0.954960892986304270, -0.954946055208360620, -0.954931215043052010, -0.954916372490415280, -0.954901527550487410, -0.954886680223305920, -0.954871830508907780, +-0.954856978407329970, -0.954842123918609790, -0.954827267042784310, -0.954812407779890630, -0.954797546129966030, -0.954782682093047400, -0.954767815669172240, -0.954752946858377080, +-0.954738075660700010, -0.954723202076177670, -0.954708326104847350, -0.954693447746746140, -0.954678567001911120, -0.954663683870379920, -0.954648798352189520, -0.954633910447377110, +-0.954619020155979880, -0.954604127478035140, -0.954589232413580070, -0.954574334962651980, -0.954559435125288070, -0.954544532901525520, -0.954529628291401310, -0.954514721294953410, +-0.954499811912218550, -0.954484900143234280, -0.954469985988037780, -0.954455069446666250, -0.954440150519156870, -0.954425229205547290, -0.954410305505874690, -0.954395379420176270, +-0.954380450948489440, -0.954365520090851520, -0.954350586847299790, -0.954335651217871560, -0.954320713202604140, -0.954305772801534720, -0.954290830014701160, -0.954275884842140540, +-0.954260937283890160, -0.954245987339987560, -0.954231035010469800, -0.954216080295374300, -0.954201123194738820, -0.954186163708600650, -0.954171201836997000, -0.954156237579965260, +-0.954141270937542970, -0.954126301909767550, -0.954111330496676400, -0.954096356698306840, -0.954081380514696150, -0.954066401945882330, -0.954051420991902430, -0.954036437652794000, +-0.954021451928594440, -0.954006463819341400, -0.953991473325071840, -0.953976480445823840, -0.953961485181634590, -0.953946487532541740, -0.953931487498582590, -0.953916485079794760, +-0.953901480276215690, -0.953886473087882990, -0.953871463514833980, -0.953856451557106410, -0.953841437214737460, -0.953826420487765110, -0.953811401376226780, -0.953796379880159970, +-0.953781355999602120, -0.953766329734590630, -0.953751301085163590, -0.953736270051358300, -0.953721236633212400, -0.953706200830763410, -0.953691162644048850, -0.953676122073106370, +-0.953661079117973600, -0.953646033778688170, -0.953630986055287620, -0.953615935947809360, -0.953600883456291460, -0.953585828580771460, -0.953570771321286870, -0.953555711677875340, +-0.953540649650574500, -0.953525585239421770, -0.953510518444455340, -0.953495449265712610, -0.953480377703231240, -0.953465303757048970, -0.953450227427203530, -0.953435148713732360, +-0.953420067616673420, -0.953404984136064230, -0.953389898271942430, -0.953374810024346100, -0.953359719393312650, -0.953344626378880070, -0.953329530981085750, -0.953314433199967670, +-0.953299333035563360, -0.953284230487910780, -0.953269125557047790, -0.953254018243011920, -0.953238908545841030, -0.953223796465572870, -0.953208682002245180, -0.953193565155895820, +-0.953178445926562530, -0.953163324314282860, -0.953148200319095080, -0.953133073941036860, -0.953117945180146030, -0.953102814036460240, -0.953087680510017470, -0.953072544600855220, +-0.953057406309011810, -0.953042265634524990, -0.953027122577432380, -0.953011977137772080, -0.952996829315581830, -0.952981679110899370, -0.952966526523762900, -0.952951371554210060, +-0.952936214202278700, -0.952921054468006570, -0.952905892351432190, -0.952890727852592880, -0.952875560971526920, -0.952860391708271970, -0.952845220062865870, -0.952830046035346930, +-0.952814869625752790, -0.952799690834121530, -0.952784509660491110, -0.952769326104899390, -0.952754140167384360, -0.952738951847983960, -0.952723761146736180, -0.952708568063678980, +-0.952693372598850120, -0.952678174752288110, -0.952662974524030590, -0.952647771914115650, -0.952632566922581360, -0.952617359549465580, -0.952602149794806170, -0.952586937658641660, +-0.952571723141009800, -0.952556506241948650, -0.952541286961496200, -0.952526065299690530, -0.952510841256569710, -0.952495614832171710, -0.952480386026534840, -0.952465154839696630, +-0.952449921271695810, -0.952434685322570140, -0.952419446992357810, -0.952404206281096900, -0.952388963188825490, -0.952373717715581320, -0.952358469861403160, -0.952343219626328840, +-0.952327967010396460, -0.952312712013644200, -0.952297454636110040, -0.952282194877832390, -0.952266932738849100, -0.952251668219198600, -0.952236401318918620, -0.952221132038047920, +-0.952205860376624360, -0.952190586334686230, -0.952175309912271620, -0.952160031109418600, -0.952144749926165380, -0.952129466362550470, -0.952114180418611960, -0.952098892094387920, +-0.952083601389916770, -0.952068308305236480, -0.952053012840385460, -0.952037714995402020, -0.952022414770324230, -0.952007112165190290, -0.951991807180038400, -0.951976499814907280, +-0.951961190069834930, -0.951945877944859520, -0.951930563440019470, -0.951915246555352650, -0.951899927290898120, -0.951884605646693750, -0.951869281622777730, -0.951853955219188700, +-0.951838626435964620, -0.951823295273144020, -0.951807961730765210, -0.951792625808866480, -0.951777287507486250, -0.951761946826662490, -0.951746603766434050, -0.951731258326839250, +-0.951715910507916150, -0.951700560309703400, -0.951685207732239190, -0.951669852775561710, -0.951654495439709810, -0.951639135724721810, -0.951623773630635880, -0.951608409157490450, +-0.951593042305324150, -0.951577673074175070, -0.951562301464081940, -0.951546927475083070, -0.951531551107216540, -0.951516172360521440, -0.951500791235035840, -0.951485407730798370, +-0.951470021847847240, -0.951454633586221180, -0.951439242945958160, -0.951423849927097390, -0.951408454529677040, -0.951393056753735420, -0.951377656599311280, -0.951362254066442930, +-0.951346849155168980, -0.951331441865527870, -0.951316032197558230, -0.951300620151298130, -0.951285205726786880, -0.951269788924062440, -0.951254369743163690, -0.951238948184128910, +-0.951223524246996850, -0.951208097931805610, -0.951192669238594470, -0.951177238167401630, -0.951161804718265720, -0.951146368891225280, -0.951130930686318930, -0.951115490103585310, +-0.951100047143062840, -0.951084601804790370, -0.951069154088806320, -0.951053703995149100, -0.951038251523857900, -0.951022796674971140, -0.951007339448527330, -0.950991879844565240, +-0.950976417863123040, -0.950960953504240260, -0.950945486767954980, -0.950930017654305960, -0.950914546163331930, -0.950899072295071530, -0.950883596049563410, -0.950868117426846400, +-0.950852636426959050, -0.950837153049940100, -0.950821667295827950, -0.950806179164662040, -0.950790688656480530, -0.950775195771322410, -0.950759700509226200, -0.950744202870230870, +-0.950728702854374610, -0.950713200461696940, -0.950697695692236280, -0.950682188546031370, -0.950666679023121080, -0.950651167123543920, -0.950635652847338970, -0.950620136194544880, +-0.950604617165200390, -0.950589095759344140, -0.950573571977015310, -0.950558045818252650, -0.950542517283094910, -0.950526986371580840, -0.950511453083749290, -0.950495917419638790, +-0.950480379379288860, -0.950464838962737920, -0.950449296170024830, -0.950433751001188650, -0.950418203456268040, -0.950402653535301840, -0.950387101238329040, -0.950371546565388580, +-0.950355989516518900, -0.950340430091759500, -0.950324868291149040, -0.950309304114726470, -0.950293737562530550, -0.950278168634600350, -0.950262597330974400, -0.950247023651692340, +-0.950231447596792680, -0.950215869166314290, -0.950200288360296350, -0.950184705178777620, -0.950169119621797180, -0.950153531689393870, -0.950137941381606790, -0.950122348698474890, +-0.950106753640036830, -0.950091156206332110, -0.950075556397399490, -0.950059954213278050, -0.950044349654006640, -0.950028742719624120, -0.950013133410170020, -0.949997521725683190, +-0.949981907666202390, -0.949966291231766900, -0.949950672422415710, -0.949935051238187780, -0.949919427679122300, -0.949903801745258130, -0.949888173436634560, -0.949872542753290250, +-0.949856909695264820, -0.949841274262597120, -0.949825636455326360, -0.949809996273491390, -0.949794353717131390, -0.949778708786285340, -0.949763061480992770, -0.949747411801292520, +-0.949731759747223680, -0.949716105318825550, -0.949700448516137110, -0.949684789339197530, -0.949669127788046020, -0.949653463862721650, -0.949637797563263390, -0.949622128889710870, +-0.949606457842103070, -0.949590784420479170, -0.949575108624878150, -0.949559430455339530, -0.949543749911901940, -0.949528066994605350, -0.949512381703488510, -0.949496694038590720, +-0.949481003999951170, -0.949465311587609160, -0.949449616801603890, -0.949433919641974540, -0.949418220108760420, -0.949402518202000500, -0.949386813921734520, -0.949371107268001560, +-0.949355398240840700, -0.949339686840291460, -0.949323973066392930, -0.949308256919184300, -0.949292538398705200, -0.949276817504994820, -0.949261094238092350, -0.949245368598037210, +-0.949229640584868580, -0.949213910198625890, -0.949198177439348310, -0.949182442307075380, -0.949166704801846390, -0.949150964923700320, -0.949135222672677140, -0.949119478048815910, +-0.949103731052155950, -0.949087981682736670, -0.949072229940597150, -0.949056475825777350, -0.949040719338316240, -0.949024960478253470, -0.949009199245628320, -0.948993435640480110, +-0.948977669662848360, -0.948961901312772360, -0.948946130590291650, -0.948930357495445630, -0.948914582028273390, -0.948898804188815000, -0.948883023977109660, -0.948867241393196670, +-0.948851456437115550, -0.948835669108905600, -0.948819879408606790, -0.948804087336258210, -0.948788292891899370, -0.948772496075569900, -0.948756696887309130, -0.948740895327156660, +-0.948725091395151930, -0.948709285091334450, -0.948693476415743750, -0.948677665368419130, -0.948661851949400560, -0.948646036158727450, -0.948630217996439100, -0.948614397462575360, +-0.948598574557175560, -0.948582749280279080, -0.948566921631925910, -0.948551091612155560, -0.948535259221007450, -0.948519424458521110, -0.948503587324736270, -0.948487747819692470, +-0.948471905943429340, -0.948456061695986400, -0.948440215077403060, -0.948424366087719410, -0.948408514726974850, -0.948392660995209020, -0.948376804892461570, -0.948360946418772110, +-0.948345085574179960, -0.948329222358725300, -0.948313356772447660, -0.948297488815386670, -0.948281618487581970, -0.948265745789073190, -0.948249870719899970, -0.948233993280102160, +-0.948218113469719400, -0.948202231288791330, -0.948186346737357360, -0.948170459815457780, -0.948154570523132120, -0.948138678860420030, -0.948122784827361230, -0.948106888423995150, +-0.948090989650362090, -0.948075088506501680, -0.948059184992453450, -0.948043279108257360, -0.948027370853953060, -0.948011460229580270, -0.947995547235178760, -0.947979631870788490, +-0.947963714136449200, -0.947947794032200200, -0.947931871558082120, -0.947915946714134260, -0.947900019500396600, -0.947884089916908870, -0.947868157963710600, -0.947852223640842210, +-0.947836286948343320, -0.947820347886253690, -0.947804406454613280, -0.947788462653461730, -0.947772516482839110, -0.947756567942785070, -0.947740617033339780, -0.947724663754542780, +-0.947708708106433930, -0.947692750089053630, -0.947676789702441400, -0.947660826946637220, -0.947644861821680950, -0.947628894327612550, -0.947612924464471540, -0.947596952232298670, +-0.947580977631133250, -0.947565000661015460, -0.947549021321985150, -0.947533039614082420, -0.947517055537346890, -0.947501069091818860, -0.947485080277538080, -0.947469089094544410, +-0.947453095542878150, -0.947437099622579270, -0.947421101333687620, -0.947405100676243170, -0.947389097650286120, -0.947373092255855860, -0.947357084492993270, -0.947341074361737870, +-0.947325061862129840, -0.947309046994209150, -0.947293029758015880, -0.947277010153590000, -0.947260988180971600, -0.947244963840200740, -0.947228937131317170, -0.947212908054361540, +-0.947196876609373680, -0.947180842796393590, -0.947164806615461320, -0.947148768066617190, -0.947132727149900710, -0.947116683865352860, -0.947100638213013160, -0.947084590192921900, +-0.947068539805119180, -0.947052487049645060, -0.947036431926539860, -0.947020374435843420, -0.947004314577596150, -0.946988252351838030, -0.946972187758609030, -0.946956120797949890, +-0.946940051469900350, -0.946923979774500710, -0.946907905711791180, -0.946891829281811590, -0.946875750484602710, -0.946859669320204380, -0.946843585788656910, -0.946827499890000480, +-0.946811411624275400, -0.946795320991521640, -0.946779227991779710, -0.946763132625089600, -0.946747034891491700, -0.946730934791025990, -0.946714832323733100, -0.946698727489653220, +-0.946682620288826550, -0.946666510721293260, -0.946650398787093670, -0.946634284486267850, -0.946618167818856660, -0.946602048784899950, -0.946585927384438140, -0.946569803617511530, +-0.946553677484160420, -0.946537548984425100, -0.946521418118345890, -0.946505284885963190, -0.946489149287316980, -0.946473011322448100, -0.946456870991396860, -0.946440728294203340, +-0.946424583230907950, -0.946408435801551210, -0.946392286006172980, -0.946376133844814340, -0.946359979317515480, -0.946343822424316580, -0.946327663165258180, -0.946311501540380570, +-0.946295337549724170, -0.946279171193329490, -0.946263002471236850, -0.946246831383486420, -0.946230657930119290, -0.946214482111175430, -0.946198303926695350, -0.946182123376719590, +-0.946165940461288430, -0.946149755180442200, -0.946133567534221840, -0.946117377522667560, -0.946101185145819870, -0.946084990403719180, -0.946068793296406030, -0.946052593823920820, +-0.946036391986304180, -0.946020187783596640, -0.946003981215838510, -0.945987772283070290, -0.945971560985332750, -0.945955347322666400, -0.945939131295111760, -0.945922912902709130, +-0.945906692145499050, -0.945890469023522470, -0.945874243536819700, -0.945858015685431370, -0.945841785469398010, -0.945825552888760130, -0.945809317943558490, -0.945793080633833380, +-0.945776840959625660, -0.945760598920975860, -0.945744354517924270, -0.945728107750512080, -0.945711858618779600, -0.945695607122767460, -0.945679353262516290, -0.945663097038066840, +-0.945646838449459180, -0.945630577496734850, -0.945614314179934020, -0.945598048499097450, -0.945581780454265770, -0.945565510045479620, -0.945549237272779730, -0.945532962136206630, +-0.945516684635801190, -0.945500404771603800, -0.945484122543655660, -0.945467837951997180, -0.945451550996669110, -0.945435261677712190, -0.945418969995167170, -0.945402675949074340, +-0.945386379539475130, -0.945370080766409940, -0.945353779629919620, -0.945337476130044820, -0.945321170266826380, -0.945304862040304950, -0.945288551450521370, -0.945272238497516400, +-0.945255923181330560, -0.945239605502005250, -0.945223285459580900, -0.945206963054098240, -0.945190638285598350, -0.945174311154121760, -0.945157981659709100, -0.945141649802401780, +-0.945125315582240330, -0.945108978999265600, -0.945092640053518450, -0.945076298745039730, -0.945059955073870190, -0.945043609040050800, -0.945027260643622300, -0.945010909884625770, +-0.944994556763101620, -0.944978201279091380, -0.944961843432635670, -0.944945483223775360, -0.944929120652551300, -0.944912755719004130, -0.944896388423175360, -0.944880018765105630, +-0.944863646744835920, -0.944847272362406950, -0.944830895617859930, -0.944814516511235600, -0.944798135042575040, -0.944781751211919100, -0.944765365019308860, -0.944748976464784840, +-0.944732585548388680, -0.944716192270161010, -0.944699796630142920, -0.944683398628375360, -0.944666998264899190, -0.944650595539755390, -0.944634190452985250, -0.944617783004629730, +-0.944601373194729700, -0.944584961023326340, -0.944568546490460400, -0.944552129596173300, -0.944535710340505760, -0.944519288723498880, -0.944502864745193630, -0.944486438405631400, +-0.944470009704853180, -0.944453578642899800, -0.944437145219812590, -0.944420709435632500, -0.944404271290400280, -0.944387830784157670, -0.944371387916945530, -0.944354942688804930, +-0.944338495099776960, -0.944322045149902810, -0.944305592839223440, -0.944289138167780150, -0.944272681135614020, -0.944256221742765910, -0.944239759989277450, -0.944223295875189720, +-0.944206829400543680, -0.944190360565380530, -0.944173889369741560, -0.944157415813667520, -0.944140939897200270, -0.944124461620380550, -0.944107980983249770, -0.944091497985849130, +-0.944075012628219580, -0.944058524910402650, -0.944042034832439310, -0.944025542394370860, -0.944009047596238600, -0.943992550438083500, -0.943976050919947180, -0.943959549041870850, +-0.943943044803895570, -0.943926538206062760, -0.943910029248413160, -0.943893517930988970, -0.943877004253830810, -0.943860488216980320, -0.943843969820478470, -0.943827449064366770, +-0.943810925948686430, -0.943794400473478730, -0.943777872638785100, -0.943761342444646710, -0.943744809891104650, -0.943728274978201000, -0.943711737705976610, -0.943695198074472770, +-0.943678656083731030, -0.943662111733792660, -0.943645565024698650, -0.943629015956491070, -0.943612464529210990, -0.943595910742899720, -0.943579354597598670, -0.943562796093349140, +-0.943546235230192760, -0.943529672008170730, -0.943513106427324550, -0.943496538487695210, -0.943479968189325000, -0.943463395532254670, -0.943446820516525950, -0.943430243142180270, +-0.943413663409258810, -0.943397081317802980, -0.943380496867854750, -0.943363910059455300, -0.943347320892646060, -0.943330729367468420, -0.943314135483964030, -0.943297539242174410, +-0.943280940642140740, -0.943264339683904880, -0.943247736367507810, -0.943231130692991690, -0.943214522660397740, -0.943197912269767570, -0.943181299521142490, -0.943164684414564250, +-0.943148066950073920, -0.943131447127713800, -0.943114824947525080, -0.943098200409549170, -0.943081573513827930, -0.943064944260402660, -0.943048312649314990, -0.943031678680606560, +-0.943015042354318990, -0.942998403670493810, -0.942981762629172330, -0.942965119230396720, -0.942948473474208290, -0.942931825360648680, -0.942915174889759510, -0.942898522061582090, +-0.942881866876158710, -0.942865209333530680, -0.942848549433739520, -0.942831887176827090, -0.942815222562834900, -0.942798555591804700, -0.942781886263778010, -0.942765214578796700, +-0.942748540536902270, -0.942731864138136260, -0.942715185382540950, -0.942698504270157560, -0.942681820801027910, -0.942665134975193770, -0.942648446792696770, -0.942631756253578310, +-0.942615063357880810, -0.942598368105645680, -0.942581670496914550, -0.942564970531729380, -0.942548268210131600, -0.942531563532163270, -0.942514856497866040, -0.942498147107281640, +-0.942481435360451590, -0.942464721257418200, -0.942448004798222990, -0.942431285982907820, -0.942414564811514420, -0.942397841284084660, -0.942381115400659940, -0.942364387161282790, +-0.942347656565994620, -0.942330923614837280, -0.942314188307852740, -0.942297450645082630, -0.942280710626568930, -0.942263968252353480, -0.942247223522478030, -0.942230476436984320, +-0.942213726995914660, -0.942196975199310670, -0.942180221047214330, -0.942163464539667260, -0.942146705676711660, -0.942129944458389050, -0.942113180884741830, -0.942096414955811530, +-0.942079646671640350, -0.942062876032270010, -0.942046103037742500, -0.942029327688099660, -0.942012549983383570, -0.941995769923636090, -0.941978987508899190, -0.941962202739214490, +-0.941945415614624640, -0.941928626135171140, -0.941911834300896200, -0.941895040111841660, -0.941878243568049170, -0.941861444669561340, -0.941844643416419940, -0.941827839808666910, +-0.941811033846344350, -0.941794225529494210, -0.941777414858158470, -0.941760601832379200, -0.941743786452198360, -0.941726968717658150, -0.941710148628800090, -0.941693326185667030, +-0.941676501388300720, -0.941659674236743130, -0.941642844731036320, -0.941626012871222380, -0.941609178657343170, -0.941592342089441310, -0.941575503167558560, -0.941558661891736980, +-0.941541818262018880, -0.941524972278446230, -0.941508123941060980, -0.941491273249905560, -0.941474420205022030, -0.941457564806452040, -0.941440707054238430, -0.941423846948423070, +-0.941406984489048140, -0.941390119676155710, -0.941373252509787980, -0.941356382989986810, -0.941339511116794920, -0.941322636890254420, -0.941305760310407250, -0.941288881377295610, +-0.941272000090961790, -0.941255116451447990, -0.941238230458796400, -0.941221342113049310, -0.941204451414248470, -0.941187558362436840, -0.941170662957656280, -0.941153765199949090, +-0.941136865089357570, -0.941119962625923790, -0.941103057809689840, -0.941086150640698450, -0.941069241118991820, -0.941052329244612020, -0.941035415017601350, -0.941018498438002230, +-0.941001579505856830, -0.940984658221207470, -0.940967734584096550, -0.940950808594566150, -0.940933880252658560, -0.940916949558416540, -0.940900016511882040, -0.940883081113097600, +-0.940866143362105390, -0.940849203258947610, -0.940832260803667110, -0.940815315996305860, -0.940798368836906370, -0.940781419325511070, -0.940764467462162140, -0.940747513246901980, +-0.940730556679773120, -0.940713597760817870, -0.940696636490078510, -0.940679672867597350, -0.940662706893417360, -0.940645738567580490, -0.940628767890129390, -0.940611794861106240, +-0.940594819480553680, -0.940577841748513780, -0.940560861665029610, -0.940543879230143150, -0.940526894443897140, -0.940509907306333770, -0.940492917817495780, -0.940475925977425350, +-0.940458931786165240, -0.940441935243757630, -0.940424936350245040, -0.940407935105670330, -0.940390931510075800, -0.940373925563503970, -0.940356917265997350, -0.940339906617598360, +-0.940322893618349310, -0.940305878268293370, -0.940288860567472740, -0.940271840515929940, -0.940254818113707480, -0.940237793360848010, -0.940220766257394040, -0.940203736803388200, +-0.940186704998873020, -0.940169670843890800, -0.940152634338484620, -0.940135595482696980, -0.940118554276570210, -0.940101510720147140, -0.940084464813470300, -0.940067416556581990, +-0.940050365949525400, -0.940033312992342940, -0.940016257685077130, -0.939999200027770710, -0.939982140020466320, -0.939965077663206580, -0.939948012956034140, -0.939930945898991620, +-0.939913876492121770, -0.939896804735467000, -0.939879730629070380, -0.939862654172974540, -0.939845575367222020, -0.939828494211855550, -0.939811410706917540, -0.939794324852451400, +-0.939777236648499330, -0.939760146095104280, -0.939743053192308770, -0.939725957940155680, -0.939708860338687610, -0.939691760387947550, -0.939674658087977900, -0.939657553438821740, +-0.939640446440521360, -0.939623337093120180, -0.939606225396660610, -0.939589111351185500, -0.939571994956737600, -0.939554876213359760, -0.939537755121094390, -0.939520631679985010, +-0.939503505890073920, -0.939486377751404200, -0.939469247264018370, -0.939452114427959620, -0.939434979243270460, -0.939417841709993870, -0.939400701828172700, -0.939383559597849470, +-0.939366415019067590, -0.939349268091869690, -0.939332118816298630, -0.939314967192397270, -0.939297813220208560, -0.939280656899774910, -0.939263498231139970, -0.939246337214346360, +-0.939229173849436830, -0.939212008136454330, -0.939194840075441850, -0.939177669666442340, -0.939160496909498540, -0.939143321804653540, -0.939126144351949970, -0.939108964551431340, +-0.939091782403140280, -0.939074597907119780, -0.939057411063412670, -0.939040221872062150, -0.939023030333110740, -0.939005836446602070, -0.938988640212578880, -0.938971441631083930, +-0.938954240702160490, -0.938937037425851440, -0.938919831802199730, -0.938902623831248560, -0.938885413513040780, -0.938868200847619460, -0.938850985835027240, -0.938833768475307970, +-0.938816548768504290, -0.938799326714659150, -0.938782102313815760, -0.938764875566016730, -0.938747646471305930, -0.938730415029725980, -0.938713181241319970, -0.938695945106130970, +-0.938678706624202160, -0.938661465795576630, -0.938644222620297340, -0.938626977098407590, -0.938609729229950340, -0.938592479014968450, -0.938575226453505660, -0.938557971545604830, +-0.938540714291309030, -0.938523454690661560, -0.938506192743705060, -0.938488928450483370, -0.938471661811039360, -0.938454392825416210, -0.938437121493657100, -0.938419847815805230, +-0.938402571791903670, -0.938385293421995730, -0.938368012706124470, -0.938350729644333300, -0.938333444236664870, -0.938316156483163240, -0.938298866383871170, -0.938281573938831940, +-0.938264279148088740, -0.938246982011684880, -0.938229682529663320, -0.938212380702067810, -0.938195076528941300, -0.938177770010327210, -0.938160461146268610, -0.938143149936808810, +-0.938125836381991210, -0.938108520481859000, -0.938091202236455590, -0.938073881645823730, -0.938056558710007480, -0.938039233429049930, -0.938021905802994160, -0.938004575831883790, +-0.937987243515761900, -0.937969908854671570, -0.937952571848656770, -0.937935232497760560, -0.937917890802026260, -0.937900546761497260, -0.937883200376216970, -0.937865851646228600, +-0.937848500571575540, -0.937831147152301310, -0.937813791388448890, -0.937796433280062240, -0.937779072827184530, -0.937761710029859200, -0.937744344888129520, -0.937726977402039030, +-0.937709607571630800, -0.937692235396948790, -0.937674860878036310, -0.937657484014936650, -0.937640104807693220, -0.937622723256349540, -0.937605339360949030, -0.937587953121535200, +-0.937570564538151460, -0.937553173610841340, -0.937535780339648020, -0.937518384724615460, -0.937500986765787080, -0.937483586463206060, -0.937466183816916150, -0.937448778826960540, +-0.937431371493383180, -0.937413961816227490, -0.937396549795536880, -0.937379135431354870, -0.937361718723724980, -0.937344299672690840, -0.937326878278295970, -0.937309454540583900, +-0.937292028459598140, -0.937274600035381990, -0.937257169267979750, -0.937239736157434500, -0.937222300703789980, -0.937204862907089600, -0.937187422767377210, -0.937169980284695890, +-0.937152535459089830, -0.937135088290602550, -0.937117638779277560, -0.937100186925158400, -0.937082732728288790, -0.937065276188712380, -0.937047817306472800, -0.937030356081613560, +-0.937012892514178300, -0.936995426604210980, -0.936977958351755120, -0.936960487756854370, -0.936943014819552440, -0.936925539539892880, -0.936908061917919310, -0.936890581953675810, +-0.936873099647205780, -0.936855614998553080, -0.936838128007761340, -0.936820638674874310, -0.936803146999935720, -0.936785652982989100, -0.936768156624078530, -0.936750657923247190, +-0.936733156880539490, -0.936715653495998830, -0.936698147769669200, -0.936680639701594100, -0.936663129291817390, -0.936645616540382590, -0.936628101447333990, -0.936610584012715240, +-0.936593064236569960, -0.936575542118942010, -0.936558017659875230, -0.936540490859413490, -0.936522961717600410, -0.936505430234479960, -0.936487896410096000, -0.936470360244491930, +-0.936452821737712270, -0.936435280889800550, -0.936417737700800610, -0.936400192170756320, -0.936382644299711300, -0.936365094087709960, -0.936347541534795820, -0.936329986641012860, +-0.936312429406405020, -0.936294869831016060, -0.936277307914889830, -0.936259743658070410, -0.936242177060601640, -0.936224608122527390, -0.936207036843891390, -0.936189463224738060, +-0.936171887265111020, -0.936154308965054360, -0.936136728324611810, -0.936119145343827560, -0.936101560022745030, -0.936083972361409060, -0.936066382359863060, -0.936048790018151110, +-0.936031195336317180, -0.936013598314405230, -0.935995998952459330, -0.935978397250523450, -0.935960793208641560, -0.935943186826857290, -0.935925578105215480, -0.935907967043759670, +-0.935890353642533920, -0.935872737901582430, -0.935855119820948930, -0.935837499400677400, -0.935819876640812450, -0.935802251541397730, -0.935784624102477420, -0.935766994324095600, +-0.935749362206296230, -0.935731727749123500, -0.935714090952621370, -0.935696451816834140, -0.935678810341805330, -0.935661166527579910, -0.935643520374201510, -0.935625871881714310, +-0.935608221050162500, -0.935590567879590160, -0.935572912370041030, -0.935555254521559850, -0.935537594334190590, -0.935519931807977430, -0.935502266942964340, -0.935484599739195620, +-0.935466930196715450, -0.935449258315567910, -0.935431584095797190, -0.935413907537447580, -0.935396228640562820, -0.935378547405187890, -0.935360863831366520, -0.935343177919143010, +-0.935325489668561550, -0.935307799079665990, -0.935290106152501300, -0.935272410887111440, -0.935254713283540480, -0.935237013341832730, -0.935219311062032380, -0.935201606444183820, +-0.935183899488331250, -0.935166190194518960, -0.935148478562791150, -0.935130764593191780, -0.935113048285765910, -0.935095329640557420, -0.935077608657610470, -0.935059885336969600, +-0.935042159678679100, -0.935024431682782710, -0.935006701349325730, -0.934988968678351910, -0.934971233669905640, -0.934953496324031350, -0.934935756640773220, -0.934918014620175760, +-0.934900270262283280, -0.934882523567140190, -0.934864774534790330, -0.934847023165279010, -0.934829269458649970, -0.934811513414947840, -0.934793755034216910, -0.934775994316501600, +-0.934758231261845980, -0.934740465870295130, -0.934722698141893130, -0.934704928076684370, -0.934687155674713280, -0.934669380936024250, -0.934651603860661820, -0.934633824448670380, +-0.934616042700094350, -0.934598258614977920, -0.934580472193366150, -0.934562683435303130, -0.934544892340833490, -0.934527098910001630, -0.934509303142852080, -0.934491505039428790, +-0.934473704599777190, -0.934455901823941230, -0.934438096711965650, -0.934420289263894750, -0.934402479479773060, -0.934384667359645200, -0.934366852903555810, -0.934349036111549180, +-0.934331216983669940, -0.934313395519962290, -0.934295571720471620, -0.934277745585241900, -0.934259917114317880, -0.934242086307744080, -0.934224253165564680, -0.934206417687824970, +-0.934188579874569270, -0.934170739725842080, -0.934152897241688150, -0.934135052422151890, -0.934117205267277930, -0.934099355777111010, -0.934081503951695760, -0.934063649791076700, +-0.934045793295298240, -0.934027934464405570, -0.934010073298443100, -0.933992209797455340, -0.933974343961487150, -0.933956475790583050, -0.933938605284787560, -0.933920732444145750, +-0.933902857268702150, -0.933884979758501490, -0.933867099913588290, -0.933849217734007310, -0.933831333219803380, -0.933813446371021040, -0.933795557187705130, -0.933777665669899950, +-0.933759771817651020, -0.933741875631002530, -0.933723977109999440, -0.933706076254686380, -0.933688173065108210, -0.933670267541309220, -0.933652359683334820, -0.933634449491229650, +-0.933616536965038320, -0.933598622104805600, -0.933580704910576320, -0.933562785382395340, -0.933544863520307300, -0.933526939324357260, -0.933509012794589420, -0.933491083931049400, +-0.933473152733781620, -0.933455219202831030, -0.933437283338242390, -0.933419345140060530, -0.933401404608329990, -0.933383461743096280, -0.933365516544403920, -0.933347569012297650, +-0.933329619146822550, -0.933311666948023480, -0.933293712415945160, -0.933275755550632580, -0.933257796352130580, -0.933239834820484120, -0.933221870955737720, -0.933203904757937020, +-0.933185936227126420, -0.933167965363351120, -0.933149992166655840, -0.933132016637085340, -0.933114038774685020, -0.933096058579499730, -0.933078076051574110, -0.933060091190953460, +-0.933042103997682500, -0.933024114471806330, -0.933006122613369900, -0.932988128422418070, -0.932970131898996020, -0.932952133043148170, -0.932934131854920470, -0.932916128334357330, +-0.932898122481503940, -0.932880114296405160, -0.932862103779106170, -0.932844090929651590, -0.932826075748087180, -0.932808058234457450, -0.932790038388807590, -0.932772016211182660, +-0.932753991701627760, -0.932735964860187840, -0.932717935686907970, -0.932699904181833240, -0.932681870345008490, -0.932663834176479360, -0.932645795676290690, -0.932627754844487460, +-0.932609711681114840, -0.932591666186218030, -0.932573618359841650, -0.932555568202031560, -0.932537515712832610, -0.932519460892289760, -0.932501403740448320, -0.932483344257353460, +-0.932465282443050160, -0.932447218297583590, -0.932429151820999060, -0.932411083013341300, -0.932393011874656170, -0.932374938404988420, -0.932356862604383440, -0.932338784472886320, +-0.932320704010542120, -0.932302621217395930, -0.932284536093493490, -0.932266448638879750, -0.932248358853599800, -0.932230266737699040, -0.932212172291222550, -0.932194075514215630, +-0.932175976406723560, -0.932157874968791540, -0.932139771200464760, -0.932121665101788290, -0.932103556672807980, -0.932085445913568790, -0.932067332824116020, -0.932049217404494870, +-0.932031099654750390, -0.932012979574928460, -0.931994857165074020, -0.931976732425232490, -0.931958605355449170, -0.931940475955769340, -0.931922344226238210, -0.931904210166901280, +-0.931886073777803860, -0.931867935058991240, -0.931849794010508490, -0.931831650632401480, -0.931813504924715490, -0.931795356887495600, -0.931777206520787330, -0.931759053824636090, +-0.931740898799086950, -0.931722741444185760, -0.931704581759977830, -0.931686419746508340, -0.931668255403822920, -0.931650088731966750, -0.931631919730985470, -0.931613748400924370, +-0.931595574741828860, -0.931577398753744010, -0.931559220436716130, -0.931541039790790060, -0.931522856816011550, -0.931504671512425770, -0.931486483880078380, -0.931468293919014420, +-0.931450101629280100, -0.931431907010920490, -0.931413710063981100, -0.931395510788507460, -0.931377309184544980, -0.931359105252139270, -0.931340898991335870, -0.931322690402180190, +-0.931304479484717400, -0.931286266238993800, -0.931268050665054470, -0.931249832762945040, -0.931231612532711030, -0.931213389974397950, -0.931195165088051110, -0.931176937873716690, +-0.931158708331439990, -0.931140476461266410, -0.931122242263241700, -0.931104005737411370, -0.931085766883821050, -0.931067525702516270, -0.931049282193542660, -0.931031036356945950, +-0.931012788192771220, -0.930994537701064880, -0.930976284881872120, -0.930958029735238780, -0.930939772261210270, -0.930921512459832120, -0.930903250331150400, -0.930884985875210620, +-0.930866719092058310, -0.930848449981739210, -0.930830178544299060, -0.930811904779783370, -0.930793628688238010, -0.930775350269708590, -0.930757069524240640, -0.930738786451879800, +-0.930720501052672340, -0.930702213326663590, -0.930683923273899370, -0.930665630894425220, -0.930647336188287100, -0.930629039155530300, -0.930610739796201240, -0.930592438110345200, +-0.930574134098008270, -0.930555827759235840, -0.930537519094073890, -0.930519208102568160, -0.930500894784764390, -0.930482579140708420, -0.930464261170445670, -0.930445940874022550, +-0.930427618251484570, -0.930409293302877580, -0.930390966028247330, -0.930372636427639790, -0.930354304501100240, -0.930335970248675200, -0.930317633670410320, -0.930299294766351310, +-0.930280953536544050, -0.930262609981034380, -0.930244264099868270, -0.930225915893091450, -0.930207565360749890, -0.930189212502889110, -0.930170857319555510, -0.930152499810794840, +-0.930134139976652950, -0.930115777817175690, -0.930097413332408920, -0.930079046522398370, -0.930060677387190450, -0.930042305926830900, -0.930023932141365580, -0.930005556030840450, +-0.929987177595301360, -0.929968796834794390, -0.929950413749365380, -0.929932028339060410, -0.929913640603925340, -0.929895250544005790, -0.929876858159348510, -0.929858463449999010, +-0.929840066416003360, -0.929821667057407650, -0.929803265374257390, -0.929784861366599210, -0.929766455034478970, -0.929748046377942620, -0.929729635397036120, -0.929711222091805460, +-0.929692806462296790, -0.929674388508556100, -0.929655968230629460, -0.929637545628562930, -0.929619120702402160, -0.929600693452193870, -0.929582263877983930, -0.929563831979818290, +-0.929545397757743140, -0.929526961211804450, -0.929508522342048060, -0.929490081148520610, -0.929471637631267940, -0.929453191790336250, -0.929434743625771610, -0.929416293137620090, +-0.929397840325927760, -0.929379385190740930, -0.929360927732105660, -0.929342467950067590, -0.929324005844673780, -0.929305541415969990, -0.929287074664002290, -0.929268605588816850, +-0.929250134190459990, -0.929231660468977430, -0.929213184424416140, -0.929194706056821750, -0.929176225366240670, -0.929157742352718970, -0.929139257016302960, -0.929120769357038800, +-0.929102279374972690, -0.929083787070150930, -0.929065292442619370, -0.929046795492424860, -0.929028296219613470, -0.929009794624231280, -0.928991290706324580, -0.928972784465939670, +-0.928954275903122410, -0.928935765017919860, -0.928917251810377880, -0.928898736280542760, -0.928880218428460800, -0.928861698254178300, -0.928843175757741560, -0.928824650939196860, +-0.928806123798590620, -0.928787594335968910, -0.928769062551378030, -0.928750528444864720, -0.928731992016475160, -0.928713453266255650, -0.928694912194252490, -0.928676368800511630, +-0.928657823085080270, -0.928639275048004360, -0.928620724689330210, -0.928602172009104220, -0.928583617007372910, -0.928565059684182460, -0.928546500039579390, -0.928527938073610000, +-0.928509373786320920, -0.928490807177758000, -0.928472238247968320, -0.928453666996998160, -0.928435093424893720, -0.928416517531701620, -0.928397939317467950, -0.928379358782239650, +-0.928360775926063030, -0.928342190748984500, -0.928323603251050340, -0.928305013432307310, -0.928286421292801700, -0.928267826832580020, -0.928249230051688800, -0.928230630950174550, +-0.928212029528083350, -0.928193425785462380, -0.928174819722357940, -0.928156211338816320, -0.928137600634884260, -0.928118987610608180, -0.928100372266034260, -0.928081754601209790, +-0.928063134616180950, -0.928044512310994160, -0.928025887685696160, -0.928007260740333460, -0.927988631474952700, -0.927969999889600160, -0.927951365984322820, -0.927932729759166630, +-0.927914091214178890, -0.927895450349406010, -0.927876807164894510, -0.927858161660690910, -0.927839513836841930, -0.927820863693393890, -0.927802211230394080, -0.927783556447888570, +-0.927764899345924320, -0.927746239924547740, -0.927727578183805580, -0.927708914123744450, -0.927690247744411110, -0.927671579045852070, -0.927652908028114180, -0.927634234691243620, +-0.927615559035287810, -0.927596881060293030, -0.927578200766306150, -0.927559518153373790, -0.927540833221542240, -0.927522145970858910, -0.927503456401370220, -0.927484764513123010, +-0.927466070306163790, -0.927447373780539430, -0.927428674936296550, -0.927409973773482110, -0.927391270292142630, -0.927372564492325080, -0.927353856374075750, -0.927335145937442040, +-0.927316433182470480, -0.927297718109207910, -0.927279000717700970, -0.927260281007996290, -0.927241558980141160, -0.927222834634182200, -0.927204107970166060, -0.927185378988139690, +-0.927166647688149940, -0.927147914070243550, -0.927129178134467270, -0.927110439880868160, -0.927091699309492870, -0.927072956420388120, -0.927054211213601210, -0.927035463689178770, +-0.927016713847167660, -0.926997961687614840, -0.926979207210567040, -0.926960450416070890, -0.926941691304174030, -0.926922929874922860, -0.926904166128364460, -0.926885400064545560, +-0.926866631683513240, -0.926847860985314240, -0.926829087969995640, -0.926810312637604270, -0.926791534988186890, -0.926772755021790910, -0.926753972738463050, -0.926735188138250400, +-0.926716401221199580, -0.926697611987357890, -0.926678820436771740, -0.926660026569488980, -0.926641230385556120, -0.926622431885020140, -0.926603631067928090, -0.926584827934326950, +-0.926566022484263780, -0.926547214717785560, -0.926528404634939350, -0.926509592235771670, -0.926490777520330380, -0.926471960488662210, -0.926453141140814120, -0.926434319476833190, +-0.926415495496766380, -0.926396669200660550, -0.926377840588563430, -0.926359009660521650, -0.926340176416582390, -0.926321340856792630, -0.926302502981199540, -0.926283662789850190, +-0.926264820282791670, -0.926245975460071150, -0.926227128321735590, -0.926208278867831970, -0.926189427098408010, -0.926170573013510470, -0.926151716613186400, -0.926132857897483120, +-0.926113996866447350, -0.926095133520126960, -0.926076267858568670, -0.926057399881819790, -0.926038529589927270, -0.926019656982938530, -0.926000782060900640, -0.925981904823860780, +-0.925963025271866140, -0.925944143404964000, -0.925925259223201120, -0.925906372726625460, -0.925887483915283860, -0.925868592789223510, -0.925849699348491710, -0.925830803593135630, +-0.925811905523202250, -0.925793005138739410, -0.925774102439794080, -0.925755197426413550, -0.925736290098645000, -0.925717380456535620, -0.925698468500132820, -0.925679554229483890, +-0.925660637644636130, -0.925641718745636390, -0.925622797532532630, -0.925603874005371920, -0.925584948164201560, -0.925566020009068850, -0.925547089540021070, -0.925528156757105200, +-0.925509221660369310, -0.925490284249860240, -0.925471344525625630, -0.925452402487712540, -0.925433458136168510, -0.925414511471040810, -0.925395562492376870, -0.925376611200223960, +-0.925357657594629180, -0.925338701675640700, -0.925319743443305360, -0.925300782897670700, -0.925281820038784120, -0.925262854866692910, -0.925243887381444250, -0.925224917583086230, +-0.925205945471666010, -0.925186971047230800, -0.925167994309828210, -0.925149015259505550, -0.925130033896310430, -0.925111050220290280, -0.925092064231492370, -0.925073075929964350, +-0.925054085315753390, -0.925035092388907470, -0.925016097149473860, -0.924997099597499980, -0.924978099733033350, -0.924959097556121160, -0.924940093066811580, -0.924921086265151680, +-0.924902077151189110, -0.924883065724971360, -0.924864051986545980, -0.924845035935960460, -0.924826017573262330, -0.924806996898499100, -0.924787973911718410, -0.924768948612967550, +-0.924749921002294470, -0.924730891079746710, -0.924711858845371770, -0.924692824299217060, -0.924673787441330330, -0.924654748271758860, -0.924635706790550850, -0.924616662997753470, +-0.924597616893414460, -0.924578568477581460, -0.924559517750302100, -0.924540464711623880, -0.924521409361594440, -0.924502351700261520, -0.924483291727672410, -0.924464229443875410, +-0.924445164848917810, -0.924426097942847250, -0.924407028725711570, -0.924387957197558170, -0.924368883358434700, -0.924349807208389220, -0.924330728747469240, -0.924311647975722520, +-0.924292564893196670, -0.924273479499939320, -0.924254391795998330, -0.924235301781421440, -0.924216209456256150, -0.924197114820550110, -0.924178017874351500, -0.924158918617707940, +-0.924139817050667060, -0.924120713173276710, -0.924101606985584520, -0.924082498487637900, -0.924063387679485480, -0.924044274561174550, -0.924025159132752960, -0.924006041394268450, +-0.923986921345768760, -0.923967798987301860, -0.923948674318915470, -0.923929547340657350, -0.923910418052575340, -0.923891286454717080, -0.923872152547130840, -0.923853016329864160, +-0.923833877802965000, -0.923814736966481200, -0.923795593820460170, -0.923776448364950430, -0.923757300599999720, -0.923738150525655670, -0.923718998141966230, -0.923699843448979370, +-0.923680686446742840, -0.923661527135304580, -0.923642365514712460, -0.923623201585014540, -0.923604035346258230, -0.923584866798492170, -0.923565695941763960, -0.923546522776121480, +-0.923527347301612680, -0.923508169518285630, -0.923488989426187620, -0.923469807025367630, -0.923450622315873050, -0.923431435297751960, -0.923412245971052310, -0.923393054335821970, +-0.923373860392109000, -0.923354664139961480, -0.923335465579427140, -0.923316264710553950, -0.923297061533390310, -0.923277856047984070, -0.923258648254383200, -0.923239438152635760, +-0.923220225742789610, -0.923201011024892600, -0.923181793998993470, -0.923162574665139850, -0.923143353023379690, -0.923124129073761180, -0.923104902816332400, -0.923085674251141410, +-0.923066443378236070, -0.923047210197664780, -0.923027974709475060, -0.923008736913715770, -0.922989496810434520, -0.922970254399679720, -0.922951009681499120, -0.922931762655941120, +-0.922912513323053240, -0.922893261682884550, -0.922874007735482670, -0.922854751480895690, -0.922835492919171880, -0.922816232050359340, -0.922796968874506240, -0.922777703391660760, +-0.922758435601870990, -0.922739165505185090, -0.922719893101650920, -0.922700618391317450, -0.922681341374232300, -0.922662062050443880, -0.922642780420000360, -0.922623496482949500, +-0.922604210239340250, -0.922584921689220460, -0.922565630832638320, -0.922546337669642110, -0.922527042200280150, -0.922507744424600480, -0.922488444342651540, -0.922469141954481490, +-0.922449837260138520, -0.922430530259670590, -0.922411220953126780, -0.922391909340554820, -0.922372595422003120, -0.922353279197519970, -0.922333960667153560, -0.922314639830951970, +-0.922295316688964140, -0.922275991241237940, -0.922256663487821760, -0.922237333428764020, -0.922218001064112890, -0.922198666393916680, -0.922179329418223890, -0.922159990137082830, +-0.922140648550541340, -0.922121304658648610, -0.922101958461452600, -0.922082609959001710, -0.922063259151344350, -0.922043906038528820, -0.922024550620603180, -0.922005192897616510, +-0.921985832869616770, -0.921966470536652480, -0.921947105898772050, -0.921927738956023870, -0.921908369708456350, -0.921888998156117910, -0.921869624299056940, -0.921850248137321530, +-0.921830869670960950, -0.921811488900023070, -0.921792105824556620, -0.921772720444609780, -0.921753332760231190, -0.921733942771468920, -0.921714550478372140, -0.921695155880988940, +-0.921675758979367930, -0.921656359773557420, -0.921636958263606140, -0.921617554449562390, -0.921598148331474690, -0.921578739909391760, -0.921559329183361920, -0.921539916153433340, +-0.921520500819655420, -0.921501083182076130, -0.921481663240744210, -0.921462240995708170, -0.921442816447016200, -0.921423389594717480, -0.921403960438860190, -0.921384528979493190, +-0.921365095216664760, -0.921345659150423550, -0.921326220780818270, -0.921306780107897460, -0.921287337131709630, -0.921267891852303510, -0.921248444269727180, -0.921228994384030280, +-0.921209542195260740, -0.921190087703467440, -0.921170630908698880, -0.921151171811003810, -0.921131710410430400, -0.921112246707028070, -0.921092780700845100, -0.921073312391930240, +-0.921053841780332010, -0.921034368866099240, -0.921014893649280570, -0.920995416129924640, -0.920975936308080170, -0.920956454183795570, -0.920936969757120030, -0.920917483028102170, +-0.920897993996790620, -0.920878502663234010, -0.920859009027481190, -0.920839513089580560, -0.920820014849581430, -0.920800514307532290, -0.920781011463481790, -0.920761506317478880, +-0.920741998869572090, -0.920722489119810360, -0.920702977068242450, -0.920683462714916970, -0.920663946059882670, -0.920644427103188720, -0.920624905844883660, -0.920605382285016430, +-0.920585856423635770, -0.920566328260790430, -0.920546797796528820, -0.920527265030900650, -0.920507729963954360, -0.920488192595738770, -0.920468652926302640, -0.920449110955694820, +-0.920429566683964250, -0.920410020111159800, -0.920390471237330310, -0.920370920062524630, -0.920351366586791290, -0.920331810810179900, -0.920312252732738980, -0.920292692354517490, +-0.920273129675564180, -0.920253564695927670, -0.920233997415657700, -0.920214427834802670, -0.920194855953411550, -0.920175281771533400, -0.920155705289216860, -0.920136126506511220, +-0.920116545423465220, -0.920096962040127810, -0.920077376356548070, -0.920057788372774520, -0.920038198088856780, -0.920018605504843600, -0.919999010620783930, -0.919979413436726730, +-0.919959813952720970, -0.919940212168815390, -0.919920608085059490, -0.919901001701502240, -0.919881393018192380, -0.919861782035178990, -0.919842168752511240, -0.919822553170238090, +-0.919802935288408510, -0.919783315107071560, -0.919763692626276000, -0.919744067846071540, -0.919724440766506950, -0.919704811387631270, -0.919685179709493590, -0.919665545732142880, +-0.919645909455627960, -0.919626270879998600, -0.919606630005303630, -0.919586986831592120, -0.919567341358913050, -0.919547693587315700, -0.919528043516849030, -0.919508391147562330, +-0.919488736479504580, -0.919469079512724720, -0.919449420247272390, -0.919429758683196650, -0.919410094820546480, -0.919390428659371040, -0.919370760199719530, -0.919351089441640790, +-0.919331416385184560, -0.919311741030399920, -0.919292063377335930, -0.919272383426041780, -0.919252701176566660, -0.919233016628959730, -0.919213329783270310, -0.919193640639547560, +-0.919173949197840680, -0.919154255458198620, -0.919134559420671240, -0.919114861085307490, -0.919095160452156560, -0.919075457521267740, -0.919055752292689990, -0.919036044766473160, +-0.919016334942666100, -0.918996622821318330, -0.918976908402479030, -0.918957191686197380, -0.918937472672522790, -0.918917751361504550, -0.918898027753191850, -0.918878301847634190, +-0.918858573644880330, -0.918838843144980430, -0.918819110347983470, -0.918799375253938620, -0.918779637862895400, -0.918759898174903110, -0.918740156190010590, -0.918720411908268140, +-0.918700665329724720, -0.918680916454429510, -0.918661165282432140, -0.918641411813781780, -0.918621656048527860, -0.918601897986719870, -0.918582137628407120, -0.918562374973638570, +-0.918542610022464620, -0.918522842774934010, -0.918503073231096370, -0.918483301391000980, -0.918463527254697380, -0.918443750822234620, -0.918423972093662780, -0.918404191069031040, +-0.918384407748388810, -0.918364622131785600, -0.918344834219270820, -0.918325044010893880, -0.918305251506704390, -0.918285456706751770, -0.918265659611085190, -0.918245860219754850, +-0.918226058532809700, -0.918206254550299580, -0.918186448272273690, -0.918166639698781760, -0.918146828829872860, -0.918127015665597180, -0.918107200206004110, -0.918087382451142850, +-0.918067562401063240, -0.918047740055814800, -0.918027915415446930, -0.918008088480009250, -0.917988259249551300, -0.917968427724122790, -0.917948593903772810, -0.917928757788551760, +-0.917908919378508830, -0.917889078673693510, -0.917869235674155570, -0.917849390379944170, -0.917829542791109620, -0.917809692907701200, -0.917789840729768550, -0.917769986257361390, +-0.917750129490529140, -0.917730270429321650, -0.917710409073788420, -0.917690545423979210, -0.917670679479943740, -0.917650811241731090, -0.917630940709391770, -0.917611067882975080, +-0.917591192762530760, -0.917571315348108430, -0.917551435639757940, -0.917531553637528360, -0.917511669341470330, -0.917491782751633010, -0.917471893868066380, -0.917452002690819950, +-0.917432109219943560, -0.917412213455486850, -0.917392315397499550, -0.917372415046031510, -0.917352512401132140, -0.917332607462851830, -0.917312700231239900, -0.917292790706346280, +-0.917272878888220730, -0.917252964776912980, -0.917233048372472440, -0.917213129674949610, -0.917193208684393910, -0.917173285400855300, -0.917153359824383400, -0.917133431955028170, +-0.917113501792839240, -0.917093569337866680, -0.917073634590160110, -0.917053697549769180, -0.917033758216744270, -0.917013816591135010, -0.916993872672991260, -0.916973926462362750, +-0.916953977959299450, -0.916934027163850860, -0.916914074076067620, -0.916894118695999130, -0.916874161023695340, -0.916854201059206120, -0.916834238802581410, -0.916814274253871190, +-0.916794307413125180, -0.916774338280393450, -0.916754366855725870, -0.916734393139172040, -0.916714417130782500, -0.916694438830606970, -0.916674458238695310, -0.916654475355097590, +-0.916634490179863310, -0.916614502713043120, -0.916594512954686640, -0.916574520904843930, -0.916554526563564950, -0.916534529930899570, -0.916514531006897950, -0.916494529791609950, +-0.916474526285085630, -0.916454520487374970, -0.916434512398527690, -0.916414502018594530, -0.916394489347625020, -0.916374474385669320, -0.916354457132777520, -0.916334437588999130, +-0.916314415754384990, -0.916294391628984850, -0.916274365212848770, -0.916254336506026720, -0.916234305508568880, -0.916214272220525210, -0.916194236641945880, -0.916174198772880980, +-0.916154158613380560, -0.916134116163494380, -0.916114071423273280, -0.916094024392766990, -0.916073975072025700, -0.916053923461099480, -0.916033869560038290, -0.916013813368892200, +-0.915993754887711950, -0.915973694116547280, -0.915953631055448360, -0.915933565704465380, -0.915913498063648520, -0.915893428133047860, -0.915873355912713680, -0.915853281402696060, +-0.915833204603044850, -0.915813125513811110, -0.915793044135044480, -0.915772960466795240, -0.915752874509113580, -0.915732786262049680, -0.915712695725653610, -0.915692602899976120, +-0.915672507785067040, -0.915652410380976670, -0.915632310687755410, -0.915612208705453230, -0.915592104434120650, -0.915571997873807720, -0.915551889024564860, -0.915531777886441910, +-0.915511664459489840, -0.915491548743758710, -0.915471430739298600, -0.915451310446159900, -0.915431187864393040, -0.915411062994047730, -0.915390935835175170, -0.915370806387825310, +-0.915350674652048340, -0.915330540627894760, -0.915310404315414770, -0.915290265714658880, -0.915270124825677270, -0.915249981648520340, -0.915229836183238390, -0.915209688429881600, +-0.915189538388500810, -0.915169386059146330, -0.915149231441868330, -0.915129074536717210, -0.915108915343743060, -0.915088753862997040, -0.915068590094529120, -0.915048424038389600, +-0.915028255694629200, -0.915008085063298000, -0.914987912144446750, -0.914967736938125610, -0.914947559444385110, -0.914927379663275750, -0.914907197594847620, -0.914887013239151890, +-0.914866826596238520, -0.914846637666158150, -0.914826446448961160, -0.914806252944698080, -0.914786057153418990, -0.914765859075175050, -0.914745658710016560, -0.914725456057993820, +-0.914705251119157570, -0.914685043893558090, -0.914664834381246130, -0.914644622582271970, -0.914624408496686250, -0.914604192124539140, -0.914583973465882050, -0.914563752520764830, +-0.914543529289238430, -0.914523303771353050, -0.914503075967159520, -0.914482845876707810, -0.914462613500049430, -0.914442378837234560, -0.914422141888313610, -0.914401902653337430, +-0.914381661132356420, -0.914361417325421310, -0.914341171232582630, -0.914320922853891100, -0.914300672189396810, -0.914280419239151150, -0.914260164003204530, -0.914239906481607580, +-0.914219646674410690, -0.914199384581664830, -0.914179120203420070, -0.914158853539727810, -0.914138584590638570, -0.914118313356202750, -0.914098039836471200, -0.914077764031494540, +-0.914057485941323410, -0.914037205566008650, -0.914016922905600880, -0.913996637960150740, -0.913976350729708730, -0.913956061214326150, -0.913935769414053410, -0.913915475328941240, +-0.913895178959040380, -0.913874880304401230, -0.913854579365075190, -0.913834276141112790, -0.913813970632564640, -0.913793662839481600, -0.913773352761914400, -0.913753040399913790, +-0.913732725753530590, -0.913712408822815680, -0.913692089607819560, -0.913671768108592960, -0.913651444325187300, -0.913631118257653090, -0.913610789906040940, -0.913590459270401940, +-0.913570126350786720, -0.913549791147245880, -0.913529453659830850, -0.913509113888592240, -0.913488771833580790, -0.913468427494847470, -0.913448080872443110, -0.913427731966418470, +-0.913407380776824480, -0.913387027303712130, -0.913366671547131800, -0.913346313507135240, -0.913325953183772740, -0.913305590577095480, -0.913285225687154200, -0.913264858513999860, +-0.913244489057682960, -0.913224117318255260, -0.913203743295767260, -0.913183366990269920, -0.913162988401814200, -0.913142607530450960, -0.913122224376231140, -0.913101838939205820, +-0.913081451219425850, -0.913061061216941970, -0.913040668931805800, -0.913020274364067850, -0.912999877513779310, -0.912979478380991140, -0.912959076965754180, -0.912938673268119170, +-0.912918267288137850, -0.912897859025860850, -0.912877448481339230, -0.912857035654623950, -0.912836620545766090, -0.912816203154816710, -0.912795783481826770, -0.912775361526847460, +-0.912754937289929620, -0.912734510771124220, -0.912714081970482760, -0.912693650888056210, -0.912673217523895520, -0.912652781878051770, -0.912632343950575690, -0.912611903741519130, +-0.912591461250932710, -0.912571016478867740, -0.912550569425375270, -0.912530120090506270, -0.912509668474312030, -0.912489214576843620, -0.912468758398152110, -0.912448299938288800, +-0.912427839197304300, -0.912407376175250700, -0.912386910872178490, -0.912366443288139100, -0.912345973423183580, -0.912325501277363120, -0.912305026850728560, -0.912284550143331760, +-0.912264071155223570, -0.912243589886455260, -0.912223106337078040, -0.912202620507142960, -0.912182132396701320, -0.912161642005804410, -0.912141149334503300, -0.912120654382849060, +-0.912100157150893430, -0.912079657638687480, -0.912059155846282390, -0.912038651773729450, -0.912018145421079840, -0.911997636788384410, -0.911977125875695350, -0.911956612683063490, +-0.911936097210540030, -0.911915579458176470, -0.911895059426023780, -0.911874537114133580, -0.911854012522556930, -0.911833485651345370, -0.911812956500549610, -0.911792425070221960, +-0.911771891360413140, -0.911751355371174580, -0.911730817102557660, -0.911710276554613670, -0.911689733727393700, -0.911669188620949700, -0.911648641235332850, -0.911628091570594210, +-0.911607539626785420, -0.911586985403957770, -0.911566428902162770, -0.911545870121451610, -0.911525309061875790, -0.911504745723486610, -0.911484180106335250, -0.911463612210473890, +-0.911443042035953390, -0.911422469582825360, -0.911401894851141090, -0.911381317840951780, -0.911360738552309590, -0.911340156985265380, -0.911319573139870890, -0.911298987016177510, +-0.911278398614236540, -0.911257807934099720, -0.911237214975818330, -0.911216619739443790, -0.911196022225027820, -0.911175422432621400, -0.911154820362276800, -0.911134216014045210, +-0.911113609387977920, -0.911093000484126670, -0.911072389302542970, -0.911051775843277900, -0.911031160106383740, -0.911010542091911790, -0.910989921799913340, -0.910969299230440120, +-0.910948674383543770, -0.910928047259275560, -0.910907417857687360, -0.910886786178830570, -0.910866152222756460, -0.910845515989517350, -0.910824877479164410, -0.910804236691749260, +-0.910783593627323530, -0.910762948285938840, -0.910742300667646390, -0.910721650772498670, -0.910700998600546650, -0.910680344151842290, -0.910659687426436990, -0.910639028424382380, +-0.910618367145730300, -0.910597703590532380, -0.910577037758840020, -0.910556369650704860, -0.910535699266179050, -0.910515026605314030, -0.910494351668161510, -0.910473674454773010, +-0.910452994965200380, -0.910432313199494800, -0.910411629157708900, -0.910390942839893860, -0.910370254246101520, -0.910349563376383510, -0.910328870230791680, -0.910308174809377530, +-0.910287477112193040, -0.910266777139289830, -0.910246074890719740, -0.910225370366534060, -0.910204663566785310, -0.910183954491524890, -0.910163243140804550, -0.910142529514676110, +-0.910121813613191000, -0.910101095436401720, -0.910080374984359790, -0.910059652257116820, -0.910038927254724790, -0.910018199977235430, -0.909997470424700470, -0.909976738597171870, +-0.909956004494701490, -0.909935268117341050, -0.909914529465142170, -0.909893788538157170, -0.909873045336437870, -0.909852299860035800, -0.909831552109003130, -0.909810802083391490, +-0.909790049783252510, -0.909769295208638700, -0.909748538359601680, -0.909727779236193410, -0.909707017838465640, -0.909686254166470310, -0.909665488220259280, -0.909644719999884610, +-0.909623949505398150, -0.909603176736851430, -0.909582401694297160, -0.909561624377786760, -0.909540844787372400, -0.909520062923105940, -0.909499278785039330, -0.909478492373224200, +-0.909457703687713060, -0.909436912728557760, -0.909416119495810140, -0.909395323989522280, -0.909374526209746130, -0.909353726156533540, -0.909332923829936690, -0.909312119230007540, +-0.909291312356797720, -0.909270503210360070, -0.909249691790746110, -0.909228878098007900, -0.909208062132197400, -0.909187243893366910, -0.909166423381567830, -0.909145600596853120, +-0.909124775539274400, -0.909103948208883740, -0.909083118605733210, -0.909062286729874880, -0.909041452581360820, -0.909020616160243100, -0.908999777466573900, -0.908978936500405290, +-0.908958093261788890, -0.908937247750777670, -0.908916399967423350, -0.908895549911777900, -0.908874697583893720, -0.908853842983822440, -0.908832986111616780, -0.908812126967328720, +-0.908791265551010420, -0.908770401862713850, -0.908749535902491300, -0.908728667670394950, -0.908707797166476980, -0.908686924390789460, -0.908666049343384570, -0.908645172024314270, +-0.908624292433631300, -0.908603410571387720, -0.908582526437635600, -0.908561640032427120, -0.908540751355814580, -0.908519860407849710, -0.908498967188585690, -0.908478071698074150, +-0.908457173936367490, -0.908436273903517890, -0.908415371599577530, -0.908394467024598810, -0.908373560178633910, -0.908352651061735130, -0.908331739673954310, -0.908310826015344520, +-0.908289910085957720, -0.908268991885846090, -0.908248071415061920, -0.908227148673657720, -0.908206223661685130, -0.908185296379197430, -0.908164366826246460, -0.908143435002884640, +-0.908122500909164240, -0.908101564545137460, -0.908080625910856920, -0.908059685006374680, -0.908038741831743380, -0.908017796387014740, -0.907996848672241950, -0.907975898687477190, +-0.907954946432772530, -0.907933991908180580, -0.907913035113753650, -0.907892076049543690, -0.907871114715604000, -0.907850151111986530, -0.907829185238743560, -0.907808217095927740, +-0.907787246683591340, -0.907766274001786890, -0.907745299050566670, -0.907724321829983190, -0.907703342340088980, -0.907682360580935990, -0.907661376552577500, -0.907640390255065600, +-0.907619401688452680, -0.907598410852791250, -0.907577417748133390, -0.907556422374532490, -0.907535424732040410, -0.907514424820709760, -0.907493422640593180, -0.907472418191742960, +-0.907451411474211600, -0.907430402488051850, -0.907409391233316100, -0.907388377710056760, -0.907367361918326120, -0.907346343858177580, -0.907325323529663110, -0.907304300932835210, +-0.907283276067746720, -0.907262248934449960, -0.907241219532997300, -0.907220187863441830, -0.907199153925835940, -0.907178117720232160, -0.907157079246683210, -0.907136038505241380, +-0.907114995495959530, -0.907093950218890170, -0.907072902674086020, -0.907051852861599170, -0.907030800781483020, -0.907009746433789950, -0.906988689818572500, -0.906967630935883280, +-0.906946569785775040, -0.906925506368299940, -0.906904440683511500, -0.906883372731461910, -0.906862302512204010, -0.906841230025790200, -0.906820155272273440, -0.906799078251706250, +-0.906777998964141350, -0.906756917409631380, -0.906735833588228850, -0.906714747499987040, -0.906693659144958470, -0.906672568523195670, -0.906651475634751460, -0.906630380479678480, +-0.906609283058029240, -0.906588183369857250, -0.906567081415214690, -0.906545977194154530, -0.906524870706729380, -0.906503761952991980, -0.906482650932995290, -0.906461537646791830, +-0.906440422094434650, -0.906419304275976390, -0.906398184191469450, -0.906377061840967560, -0.906355937224522900, -0.906334810342188430, -0.906313681194016900, -0.906292549780060800, +-0.906271416100373650, -0.906250280155008080, -0.906229141944016710, -0.906208001467452510, -0.906186858725368420, -0.906165713717817070, -0.906144566444851420, -0.906123416906524430, +-0.906102265102888830, -0.906081111033997240, -0.906059954699903190, -0.906038796100659290, -0.906017635236318400, -0.905996472106933460, -0.905975306712557330, -0.905954139053242510, +-0.905932969129042750, -0.905911796940010560, -0.905890622486198890, -0.905869445767660600, -0.905848266784448740, -0.905827085536616280, -0.905805902024216070, -0.905784716247301060, +-0.905763528205923870, -0.905742337900138250, -0.905721145329996810, -0.905699950495552520, -0.905678753396858330, -0.905657554033967300, -0.905636352406931970, -0.905615148515806160, +-0.905593942360642390, -0.905572733941493850, -0.905551523258413480, -0.905530310311454260, -0.905509095100669350, -0.905487877626111600, -0.905466657887834200, -0.905445435885889770, +-0.905424211620332150, -0.905402985091213970, -0.905381756298588410, -0.905360525242508320, -0.905339291923027090, -0.905318056340197130, -0.905296818494072400, -0.905275578384705630, +-0.905254336012150000, -0.905233091376458470, -0.905211844477684210, -0.905190595315880310, -0.905169343891099930, -0.905148090203396260, -0.905126834252822250, -0.905105576039430870, +-0.905084315563275950, -0.905063052824410130, -0.905041787822886800, -0.905020520558758920, -0.904999251032079450, -0.904977979242902130, -0.904956705191279910, -0.904935428877265860, +-0.904914150300913380, -0.904892869462275430, -0.904871586361405300, -0.904850300998356170, -0.904829013373181330, -0.904807723485933970, -0.904786431336666920, -0.904765136925434250, +-0.904743840252288600, -0.904722541317283470, -0.904701240120471930, -0.904679936661906830, -0.904658630941642340, -0.904637322959731320, -0.904616012716226940, -0.904594700211182600, +-0.904573385444651380, -0.904552068416686780, -0.904530749127341990, -0.904509427576670300, -0.904488103764725100, -0.904466777691559250, -0.904445449357226820, -0.904424118761780750, +-0.904402785905274450, -0.904381450787761110, -0.904360113409294230, -0.904338773769926550, -0.904317431869712470, -0.904296087708704730, -0.904274741286956730, -0.904253392604521980, +-0.904232041661453660, -0.904210688457805280, -0.904189332993630130, -0.904167975268981740, -0.904146615283912940, -0.904125253038478020, -0.904103888532729940, -0.904082521766722210, +-0.904061152740508130, -0.904039781454141210, -0.904018407907674400, -0.903997032101162000, -0.903975654034656960, -0.903954273708212800, -0.903932891121883020, -0.903911506275720920, +-0.903890119169780130, -0.903868729804114030, -0.903847338178776050, -0.903825944293819790, -0.903804548149298230, -0.903783149745265750, -0.903761749081775310, -0.903740346158880550, +-0.903718940976634970, -0.903697533535091630, -0.903676123834304730, -0.903654711874327670, -0.903633297655213720, -0.903611881177016630, -0.903590462439789800, -0.903569041443586740, +-0.903547618188461190, -0.903526192674466540, -0.903504764901656430, -0.903483334870083920, -0.903461902579803520, -0.903440468030868420, -0.903419031223332110, -0.903397592157248240, +-0.903376150832669980, -0.903354707249651720, -0.903333261408246770, -0.903311813308508630, -0.903290362950490920, -0.903268910334247280, -0.903247455459831430, -0.903225998327296890, +-0.903204538936697390, -0.903183077288086560, -0.903161613381517570, -0.903140147217045050, -0.903118678794722070, -0.903097208114602480, -0.903075735176739780, -0.903054259981187820, +-0.903032782527999680, -0.903011302817230080, -0.902989820848932200, -0.902968336623159900, -0.902946850139966560, -0.902925361399406160, -0.902903870401532420, -0.902882377146398960, +-0.902860881634059530, -0.902839383864567520, -0.902817883837977450, -0.902796381554342720, -0.902774877013716950, -0.902753370216154090, -0.902731861161707670, -0.902710349850431300, +-0.902688836282379500, -0.902667320457605560, -0.902645802376163210, -0.902624282038106520, -0.902602759443489000, -0.902581234592364610, -0.902559707484787200, -0.902538178120810500, +-0.902516646500487910, -0.902495112623874050, -0.902473576491022560, -0.902452038101987040, -0.902430497456821470, -0.902408954555579570, -0.902387409398314970, -0.902365861985082170, +-0.902344312315934820, -0.902322760390926630, -0.902301206210111560, -0.902279649773543470, -0.902258091081276190, -0.902236530133363690, -0.902214966929859920, -0.902193401470818720, +-0.902171833756293620, -0.902150263786339330, -0.902128691561009390, -0.902107117080357730, -0.902085540344438330, -0.902063961353304580, -0.902042380107011430, -0.902020796605612190, +-0.901999210849161010, -0.901977622837711880, -0.901956032571318620, -0.901934440050035310, -0.901912845273915910, -0.901891248243014370, -0.901869648957384640, -0.901848047417080580, +-0.901826443622156580, -0.901804837572666610, -0.901783229268664500, -0.901761618710204330, -0.901740005897340160, -0.901718390830125500, -0.901696773508615320, -0.901675153932863130, +-0.901653532102923090, -0.901631908018849290, -0.901610281680695680, -0.901588653088516320, -0.901567022242365400, -0.901545389142296870, -0.901523753788364470, -0.901502116180623150, +-0.901480476319126420, -0.901458834203928580, -0.901437189835083700, -0.901415543212645720, -0.901393894336668610, -0.901372243207207100, -0.901350589824314930, -0.901328934188046380, +-0.901307276298455420, -0.901285616155596330, -0.901263953759523170, -0.901242289110290140, -0.901220622207951410, -0.901198953052560700, -0.901177281644172990, -0.901155607982842110, +-0.901133932068622250, -0.901112253901567460, -0.901090573481732050, -0.901068890809169850, -0.901047205883935830, -0.901025518706083720, -0.901003829275667910, -0.900982137592742480, +-0.900960443657361720, -0.900938747469579800, -0.900917049029451130, -0.900895348337029780, -0.900873645392370030, -0.900851940195525720, -0.900830232746552050, -0.900808523045502740, +-0.900786811092432190, -0.900765096887394590, -0.900743380430443770, -0.900721661721635040, -0.900699940761022110, -0.900678217548659290, -0.900656492084600860, -0.900634764368901330, +-0.900613034401614780, -0.900591302182795710, -0.900569567712498410, -0.900547830990777070, -0.900526092017685850, -0.900504350793279840, -0.900482607317612870, -0.900460861590739460, +-0.900439113612713780, -0.900417363383590460, -0.900395610903423240, -0.900373856172267390, -0.900352099190176890, -0.900330339957206240, -0.900308578473409620, -0.900286814738841650, +-0.900265048753556620, -0.900243280517608930, -0.900221510031053000, -0.900199737293942980, -0.900177962306334070, -0.900156185068280100, -0.900134405579835820, -0.900112623841055390, +-0.900090839851993450, -0.900069053612704060, -0.900047265123242400, -0.900025474383662540, -0.900003681394019090, -0.899981886154366360, -0.899960088664758960, -0.899938288925251300, +-0.899916486935897870, -0.899894682696753320, -0.899872876207871600, -0.899851067469308210, -0.899829256481117000, -0.899807443243352710, -0.899785627756069850, -0.899763810019322820, +-0.899741990033166020, -0.899720167797654510, -0.899698343312842600, -0.899676516578784890, -0.899654687595535800, -0.899632856363150050, -0.899611022881682150, -0.899589187151186740, +-0.899567349171718320, -0.899545508943331520, -0.899523666466080620, -0.899501821740020800, -0.899479974765206580, -0.899458125541692350, -0.899436274069532750, -0.899414420348782160, +-0.899392564379495880, -0.899370706161728210, -0.899348845695533860, -0.899326982980967250, -0.899305118018083220, -0.899283250806936390, -0.899261381347581490, -0.899239509640073150, +-0.899217635684465890, -0.899195759480814320, -0.899173881029173620, -0.899152000329598300, -0.899130117382142990, -0.899108232186862310, -0.899086344743811110, -0.899064455053043550, +-0.899042563114615390, -0.899020668928580790, -0.898998772494994490, -0.898976873813911230, -0.898954972885385840, -0.898933069709472950, -0.898911164286227420, -0.898889256615703960, +-0.898867346697957090, -0.898845434533042110, -0.898823520121013520, -0.898801603461926280, -0.898779684555834900, -0.898757763402794340, -0.898735840002859000, -0.898713914356084500, +-0.898691986462525130, -0.898670056322235840, -0.898648123935271380, -0.898626189301686700, -0.898604252421536410, -0.898582313294875590, -0.898560371921758970, -0.898538428302240950, +-0.898516482436377270, -0.898494534324222440, -0.898472583965831300, -0.898450631361258690, -0.898428676510559470, -0.898406719413788140, -0.898384760071000430, -0.898362798482250870, +-0.898340834647594180, -0.898318868567085540, -0.898296900240779680, -0.898274929668731570, -0.898252956850996150, -0.898230981787628280, -0.898209004478683020, -0.898187024924214870, +-0.898165043124279470, -0.898143059078931550, -0.898121072788225950, -0.898099084252217630, -0.898077093470961320, -0.898055100444512530, -0.898033105172926120, -0.898011107656256800, +-0.897989107894559770, -0.897967105887890080, -0.897945101636302480, -0.897923095139852250, -0.897901086398594120, -0.897879075412583380, -0.897857062181874550, -0.897835046706523480, +-0.897813028986584770, -0.897791009022113510, -0.897768986813164640, -0.897746962359793450, -0.897724935662054360, -0.897702906720003300, -0.897680875533695020, -0.897658842103184580, +-0.897636806428526950, -0.897614768509777390, -0.897592728346990890, -0.897570685940222600, -0.897548641289527490, -0.897526594394960520, -0.897504545256577300, -0.897482493874432800, +-0.897460440248582070, -0.897438384379080300, -0.897416326265982440, -0.897394265909343460, -0.897372203309219190, -0.897350138465664470, -0.897328071378734270, -0.897306002048483990, +-0.897283930474968680, -0.897261856658243540, -0.897239780598363850, -0.897217702295384560, -0.897195621749360740, -0.897173538960348130, -0.897151453928401790, -0.897129366653576790, +-0.897107277135928300, -0.897085185375511740, -0.897063091372381720, -0.897040995126594410, -0.897018896638204670, -0.896996795907267550, -0.896974692933838580, -0.896952587717972820, +-0.896930480259725550, -0.896908370559152070, -0.896886258616307770, -0.896864144431247730, -0.896842028004027010, -0.896819909334701570, -0.896797788423326360, -0.896775665269956670, +-0.896753539874647790, -0.896731412237454670, -0.896709282358433500, -0.896687150237639120, -0.896665015875126810, -0.896642879270951880, -0.896620740425169930, -0.896598599337836030, +-0.896576456009005600, -0.896554310438734130, -0.896532162627076800, -0.896510012574088690, -0.896487860279825970, -0.896465705744343590, -0.896443548967696850, -0.896421389949941360, +-0.896399228691132420, -0.896377065191324870, -0.896354899450575230, -0.896332731468938220, -0.896310561246469350, -0.896288388783224140, -0.896266214079257990, -0.896244037134626300, +-0.896221857949384470, -0.896199676523588010, -0.896177492857291980, -0.896155306950552570, -0.896133118803424940, -0.896110928415964510, -0.896088735788226680, -0.896066540920267160, +-0.896044343812140820, -0.896022144463903940, -0.895999942875611800, -0.895977739047319810, -0.895955532979083370, -0.895933324670958210, -0.895911114122999620, -0.895888901335263330, +-0.895866686307804750, -0.895844469040679160, -0.895822249533942740, -0.895800027787650550, -0.895777803801858450, -0.895755577576621830, -0.895733349111996200, -0.895711118408036850, +-0.895688885464800080, -0.895666650282341160, -0.895644412860715500, -0.895622173199978940, -0.895599931300186890, -0.895577687161394960, -0.895555440783658900, -0.895533192167034200, +-0.895510941311576490, -0.895488688217341070, -0.895466432884384320, -0.895444175312761440, -0.895421915502528140, -0.895399653453740060, -0.895377389166452490, -0.895355122640721810, +-0.895332853876603330, -0.895310582874152770, -0.895288309633425650, -0.895266034154477810, -0.895243756437364870, -0.895221476482142560, -0.895199194288866520, -0.895176909857592570, +-0.895154623188375910, -0.895132334281273030, -0.895110043136339350, -0.895087749753630590, -0.895065454133202490, -0.895043156275110660, -0.895020856179410630, -0.894998553846158780, +-0.894976249275410640, -0.894953942467221820, -0.894931633421648160, -0.894909322138745410, -0.894887008618569290, -0.894864692861175760, -0.894842374866620440, -0.894820054634958840, +-0.894797732166247360, -0.894775407460541740, -0.894753080517897480, -0.894730751338370540, -0.894708419922016770, -0.894686086268891460, -0.894663750379051440, -0.894641412252551890, +-0.894619071889449000, -0.894596729289798280, -0.894574384453655780, -0.894552037381077360, -0.894529688072118860, -0.894507336526836120, -0.894484982745284540, -0.894462626727520970, +-0.894440268473600920, -0.894417907983580120, -0.894395545257514520, -0.894373180295460090, -0.894350813097472330, -0.894328443663607970, -0.894306071993922420, -0.894283698088471750, +-0.894261321947311780, -0.894238943570498600, -0.894216562958087930, -0.894194180110135960, -0.894171795026698520, -0.894149407707831580, -0.894127018153590640, -0.894104626364032650, +-0.894082232339213020, -0.894059836079187930, -0.894037437584013220, -0.894015036853744390, -0.893992633888438530, -0.893970228688151010, -0.893947821252937920, -0.893925411582855320, +-0.893902999677959050, -0.893880585538305410, -0.893858169163950330, -0.893835750554949790, -0.893813329711359850, -0.893790906633236130, -0.893768481320635690, -0.893746053773613940, +-0.893723623992227050, -0.893701191976531200, -0.893678757726582340, -0.893656321242436100, -0.893633882524149550, -0.893611441571778190, -0.893588998385378310, -0.893566552965005870, +-0.893544105310717150, -0.893521655422568120, -0.893499203300614940, -0.893476748944913690, -0.893454292355520320, -0.893431833532491450, -0.893409372475883150, -0.893386909185751370, +-0.893364443662152290, -0.893341975905142080, -0.893319505914776490, -0.893297033691112690, -0.893274559234206180, -0.893252082544113370, -0.893229603620890210, -0.893207122464593220, +-0.893184639075278230, -0.893162153453001760, -0.893139665597819880, -0.893117175509788530, -0.893094683188964570, -0.893072188635403830, -0.893049691849162720, -0.893027192830297300, +-0.893004691578863970, -0.892982188094918470, -0.892959682378517860, -0.892937174429718090, -0.892914664248575460, -0.892892151835146030, -0.892869637189486310, -0.892847120311652480, +-0.892824601201700930, -0.892802079859687740, -0.892779556285669410, -0.892757030479701790, -0.892734502441842050, -0.892711972172145930, -0.892689439670669940, -0.892666904937470360, +-0.892644367972603160, -0.892621828776125390, -0.892599287348093020, -0.892576743688562440, -0.892554197797590040, -0.892531649675232130, -0.892509099321545100, -0.892486546736585340, +-0.892463991920409260, -0.892441434873073040, -0.892418875594632950, -0.892396314085146080, -0.892373750344668370, -0.892351184373256330, -0.892328616170966260, -0.892306045737854770, +-0.892283473073977710, -0.892260898179392360, -0.892238321054154680, -0.892215741698321300, -0.892193160111948600, -0.892170576295092890, -0.892147990247810770, -0.892125401970158770, +-0.892102811462193170, -0.892080218723970140, -0.892057623755546980, -0.892035026556979750, -0.892012427128325070, -0.891989825469639230, -0.891967221580978740, -0.891944615462399890, +-0.891922007113959970, -0.891899396535714930, -0.891876783727721390, -0.891854168690035980, -0.891831551422715090, -0.891808931925815230, -0.891786310199393140, -0.891763686243505330, +-0.891741060058207860, -0.891718431643558130, -0.891695800999612320, -0.891673168126426940, -0.891650533024058720, -0.891627895692564180, -0.891605256131999480, -0.891582614342422030, +-0.891559970323888010, -0.891537324076454140, -0.891514675600176940, -0.891492024895113030, -0.891469371961319030, -0.891446716798851680, -0.891424059407767480, -0.891401399788123160, +-0.891378737939974910, -0.891356073863380230, -0.891333407558395410, -0.891310739025076960, -0.891288068263481730, -0.891265395273665990, -0.891242720055687050, -0.891220042609601410, +-0.891197362935465590, -0.891174681033336410, -0.891151996903270520, -0.891129310545324630, -0.891106621959555480, -0.891083931146019690, -0.891061238104774110, -0.891038542835875140, +-0.891015845339380160, -0.890993145615345480, -0.890970443663828050, -0.890947739484884480, -0.890925033078571070, -0.890902324444945550, -0.890879613584064200, -0.890856900495983870, +-0.890834185180761300, -0.890811467638453200, -0.890788747869116440, -0.890766025872807840, -0.890743301649584150, -0.890720575199502210, -0.890697846522618520, -0.890675115618990490, +-0.890652382488674730, -0.890629647131727990, -0.890606909548207200, -0.890584169738169010, -0.890561427701670130, -0.890538683438767960, -0.890515936949519140, -0.890493188233980490, +-0.890470437292208870, -0.890447684124261120, -0.890424928730194190, -0.890402171110064920, -0.890379411263930280, -0.890356649191846650, -0.890333884893871890, -0.890311118370062270, +-0.890288349620474980, -0.890265578645166760, -0.890242805444194540, -0.890220030017614960, -0.890197252365485750, -0.890174472487863410, -0.890151690384804790, -0.890128906056367080, +-0.890106119502606980, -0.890083330723581590, -0.890060539719347950, -0.890037746489962920, -0.890014951035483120, -0.889992153355966380, -0.889969353451469210, -0.889946551322048700, +-0.889923746967761780, -0.889900940388665520, -0.889878131584816430, -0.889855320556272590, -0.889832507303090270, -0.889809691825326770, -0.889786874123039030, -0.889764054196284020, +-0.889741232045119010, -0.889718407669600860, -0.889695581069786630, -0.889672752245733500, -0.889649921197498080, -0.889627087925138340, -0.889604252428710770, -0.889581414708272680, +-0.889558574763881000, -0.889535732595592380, -0.889512888203464970, -0.889490041587555290, -0.889467192747920520, -0.889444341684617720, -0.889421488397704070, -0.889398632887236750, +-0.889375775153272820, -0.889352915195869560, -0.889330053015083830, -0.889307188610972690, -0.889284321983593970, -0.889261453133004420, -0.889238582059261210, -0.889215708762421510, +-0.889192833242542610, -0.889169955499681250, -0.889147075533895380, -0.889124193345241840, -0.889101308933777700, -0.889078422299560360, -0.889055533442647090, -0.889032642363094870, +-0.889009749060960970, -0.888986853536302800, -0.888963955789177080, -0.888941055819641890, -0.888918153627754060, -0.888895249213570770, -0.888872342577149420, -0.888849433718547190, +-0.888826522637821030, -0.888803609335028890, -0.888780693810227730, -0.888757776063474950, -0.888734856094827610, -0.888711933904343110, -0.888689009492078850, -0.888666082858092120, +-0.888643154002440090, -0.888620222925179730, -0.888597289626369300, -0.888574354106065670, -0.888551416364326110, -0.888528476401208020, -0.888505534216768700, -0.888482589811065200, +-0.888459643184155600, -0.888436694336096840, -0.888413743266946440, -0.888390789976761690, -0.888367834465599860, -0.888344876733518580, -0.888321916780575040, -0.888298954606826620, +-0.888275990212330950, -0.888253023597144860, -0.888230054761326550, -0.888207083704933180, -0.888184110428022030, -0.888161134930650630, -0.888138157212876030, -0.888115177274756420, +-0.888092195116348960, -0.888069210737710830, -0.888046224138899780, -0.888023235319973180, -0.888000244280988450, -0.887977251022003090, -0.887954255543074720, -0.887931257844260640, +-0.887908257925618010, -0.887885255787205120, -0.887862251429079040, -0.887839244851297390, -0.887816236053917680, -0.887793225036997310, -0.887770211800593460, -0.887747196344764620, +-0.887724178669567650, -0.887701158775060280, -0.887678136661300020, -0.887655112328344380, -0.887632085776250970, -0.887609057005077420, -0.887586026014881120, -0.887562992805719380, +-0.887539957377650680, -0.887516919730731990, -0.887493879865020930, -0.887470837780575230, -0.887447793477452510, -0.887424746955709830, -0.887401698215405710, -0.887378647256597320, +-0.887355594079342280, -0.887332538683698320, -0.887309481069723070, -0.887286421237474030, -0.887263359187008940, -0.887240294918385410, -0.887217228431660840, -0.887194159726893530, +-0.887171088804140860, -0.887148015663460470, -0.887124940304910070, -0.887101862728547190, -0.887078782934429320, -0.887055700922614990, -0.887032616693161360, -0.887009530246126050, +-0.886986441581567140, -0.886963350699542020, -0.886940257600108420, -0.886917162283324290, -0.886894064749247260, -0.886870964997935050, -0.886847863029444960, -0.886824758843835710, +-0.886801652441164600, -0.886778543821489240, -0.886755432984867590, -0.886732319931356930, -0.886709204661015880, -0.886686087173901850, -0.886662967470072560, -0.886639845549585860, +-0.886616721412499480, -0.886593595058871360, -0.886570466488759260, -0.886547335702221000, -0.886524202699314420, -0.886501067480096940, -0.886477930044627160, -0.886454790392962490, +-0.886431648525160990, -0.886408504441280280, -0.886385358141378310, -0.886362209625512490, -0.886339058893741650, -0.886315905946123080, -0.886292750782714860, -0.886269593403574700, +-0.886246433808760560, -0.886223271998330290, -0.886200107972341830, -0.886176941730853150, -0.886153773273921750, -0.886130602601606250, -0.886107429713964280, -0.886084254611053780, +-0.886061077292932600, -0.886037897759658690, -0.886014716011289670, -0.885991532047884170, -0.885968345869500020, -0.885945157476194840, -0.885921966868026930, -0.885898774045054020, +-0.885875579007334160, -0.885852381754925310, -0.885829182287885540, -0.885805980606272470, -0.885782776710144830, -0.885759570599560230, -0.885736362274576640, -0.885713151735252220, +-0.885689938981644940, -0.885666724013812300, -0.885643506831813370, -0.885620287435705640, -0.885597065825547200, -0.885573842001396110, -0.885550615963310420, -0.885527387711348090, +-0.885504157245567410, -0.885480924566026230, -0.885457689672782820, -0.885434452565894810, -0.885411213245420940, -0.885387971711419140, -0.885364727963947380, -0.885341482003063840, +-0.885318233828826130, -0.885294983441293310, -0.885271730840523020, -0.885248476026573310, -0.885225218999502570, -0.885201959759368660, -0.885178698306229860, -0.885155434640144350, +-0.885132168761170290, -0.885108900669365760, -0.885085630364788490, -0.885062357847497650, -0.885039083117550970, -0.885015806175006410, -0.884992527019922480, -0.884969245652357240, +-0.884945962072368420, -0.884922676280015090, -0.884899388275355080, -0.884876098058446580, -0.884852805629347870, -0.884829510988117240, -0.884806214134812640, -0.884782915069492690, +-0.884759613792215350, -0.884736310303038560, -0.884713004602021400, -0.884689696689221820, -0.884666386564697870, -0.884643074228508080, -0.884619759680710490, -0.884596442921363190, +-0.884573123950525120, -0.884549802768254230, -0.884526479374608930, -0.884503153769647280, -0.884479825953427890, -0.884456495926008830, -0.884433163687448620, -0.884409829237805530, +-0.884386492577137310, -0.884363153705503340, -0.884339812622961570, -0.884316469329570200, -0.884293123825387610, -0.884269776110472310, -0.884246426184882030, -0.884223074048676170, +-0.884199719701912690, -0.884176363144649870, -0.884153004376946110, -0.884129643398859800, -0.884106280210449460, -0.884082914811773370, -0.884059547202890040, -0.884036177383857760, +-0.884012805354734700, -0.883989431115580040, -0.883966054666451840, -0.883942676007408390, -0.883919295138508310, -0.883895912059809550, -0.883872526771371510, -0.883849139273252040, +-0.883825749565509860, -0.883802357648203140, -0.883778963521390630, -0.883755567185130710, -0.883732168639481900, -0.883708767884502590, -0.883685364920251400, -0.883661959746786410, +-0.883638552364166880, -0.883615142772451010, -0.883591730971697190, -0.883568316961964140, -0.883544900743310270, -0.883521482315793750, -0.883498061679473980, -0.883474638834409020, +-0.883451213780657390, -0.883427786518277800, -0.883404357047328780, -0.883380925367868720, -0.883357491479956460, -0.883334055383650510, -0.883310617079008930, -0.883287176566091240, +-0.883263733844955600, -0.883240288915660640, -0.883216841778264980, -0.883193392432827240, -0.883169940879405480, -0.883146487118059430, -0.883123031148847050, -0.883099572971827170, +-0.883076112587058320, -0.883052649994599200, -0.883029185194508460, -0.883005718186844700, -0.882982248971666770, -0.882958777549032740, -0.882935303919002100, -0.882911828081633270, +-0.882888350036984850, -0.882864869785115580, -0.882841387326084190, -0.882817902659948860, -0.882794415786769200, -0.882770926706603400, -0.882747435419510400, -0.882723941925548820, +-0.882700446224777390, -0.882676948317254740, -0.882653448203039810, -0.882629945882191240, -0.882606441354767730, -0.882582934620827820, -0.882559425680430890, -0.882535914533635450, +-0.882512401180500230, -0.882488885621084070, -0.882465367855445160, -0.882441847883643330, -0.882418325705736860, -0.882394801321784490, -0.882371274731845180, -0.882347745935977760, +-0.882324214934240850, -0.882300681726693510, -0.882277146313394380, -0.882253608694402500, -0.882230068869776060, -0.882206526839574900, -0.882182982603857410, -0.882159436162682550, +-0.882135887516109050, -0.882112336664195750, -0.882088783607001270, -0.882065228344585230, -0.882041670877006130, -0.882018111204322830, -0.881994549326594270, -0.881970985243879400, +-0.881947418956236960, -0.881923850463726010, -0.881900279766405500, -0.881876706864333840, -0.881853131757570740, -0.881829554446174950, -0.881805974930205180, -0.881782393209720520, +-0.881758809284779900, -0.881735223155441730, -0.881711634821765950, -0.881688044283811200, -0.881664451541636200, -0.881640856595300230, -0.881617259444861910, -0.881593660090380650, +-0.881570058531915060, -0.881546454769524420, -0.881522848803267260, -0.881499240633203280, -0.881475630259391350, -0.881452017681890190, -0.881428402900759080, -0.881404785916056980, +-0.881381166727842390, -0.881357545336175390, -0.881333921741114580, -0.881310295942718810, -0.881286667941047370, -0.881263037736159330, -0.881239405328113620, -0.881215770716969440, +-0.881192133902785830, -0.881168494885621880, -0.881144853665536190, -0.881121210242588940, -0.881097564616838520, -0.881073916788344240, -0.881050266757165250, -0.881026614523360060, +-0.881002960086988860, -0.880979303448110150, -0.880955644606783220, -0.880931983563067230, -0.880908320317021150, -0.880884654868704380, -0.880860987218175960, -0.880837317365495090, +-0.880813645310720930, -0.880789971053912210, -0.880766294595129010, -0.880742615934430040, -0.880718935071874490, -0.880695252007521630, -0.880671566741430660, -0.880647879273660390, +-0.880624189604270800, -0.880600497733320720, -0.880576803660869430, -0.880553107386976120, -0.880529408911700060, -0.880505708235100440, -0.880482005357236530, -0.880458300278167740, +-0.880434592997952680, -0.880410883516651530, -0.880387171834323250, -0.880363457951027000, -0.880339741866822070, -0.880316023581767860, -0.880292303095923100, -0.880268580409347970, +-0.880244855522101520, -0.880221128434242830, -0.880197399145831390, -0.880173667656926400, -0.880149933967587230, -0.880126198077873290, -0.880102459987843750, -0.880078719697557800, +-0.880054977207075370, -0.880031232516455430, -0.880007485625757590, -0.879983736535040920, -0.879959985244364920, -0.879936231753788540, -0.879912476063371970, -0.879888718173174270, +-0.879864958083254710, -0.879841195793672810, -0.879817431304487860, -0.879793664615759360, -0.879769895727546710, -0.879746124639909420, -0.879722351352906660, -0.879698575866597720, +-0.879674798181042660, -0.879651018296300660, -0.879627236212431110, -0.879603451929493520, -0.879579665447546730, -0.879555876766651370, -0.879532085886866270, -0.879508292808250820, +-0.879484497530864770, -0.879460700054767510, -0.879436900380018430, -0.879413098506677150, -0.879389294434803070, -0.879365488164455700, -0.879341679695694320, -0.879317869028579110, +-0.879294056163169140, -0.879270241099524120, -0.879246423837703570, -0.879222604377766780, -0.879198782719773250, -0.879174958863783050, -0.879151132809855460, -0.879127304558050100, +-0.879103474108426490, -0.879079641461044110, -0.879055806615962720, -0.879031969573241700, -0.879008130332940900, -0.878984288895119260, -0.878960445259837300, -0.878936599427154300, +-0.878912751397129770, -0.878888901169823320, -0.878865048745294700, -0.878841194123602950, -0.878817337304808710, -0.878793478288971140, -0.878769617076149760, -0.878745753666404510, +-0.878721888059794680, -0.878698020256380220, -0.878674150256220750, -0.878650278059375900, -0.878626403665904940, -0.878602527075868280, -0.878578648289325410, -0.878554767306335860, +-0.878530884126959450, -0.878506998751255820, -0.878483111179284240, -0.878459221411105330, -0.878435329446778380, -0.878411435286363120, -0.878387538929919160, -0.878363640377506470, +-0.878339739629184660, -0.878315836685013450, -0.878291931545052700, -0.878268024209362010, -0.878244114678001010, -0.878220202951029980, -0.878196289028508550, -0.878172372910496430, +-0.878148454597053260, -0.878124534088238650, -0.878100611384112990, -0.878076686484735910, -0.878052759390167140, -0.878028830100466400, -0.878004898615693640, -0.877980964935908600, +-0.877957029061171120, -0.877933090991541040, -0.877909150727078310, -0.877885208267842330, -0.877861263613893610, -0.877837316765291860, -0.877813367722096730, -0.877789416484368260, +-0.877765463052165740, -0.877741507425550020, -0.877717549604580590, -0.877693589589317200, -0.877669627379819910, -0.877645662976148430, -0.877621696378362850, -0.877597727586523100, +-0.877573756600689040, -0.877549783420920490, -0.877525808047277090, -0.877501830479819670, -0.877477850718607620, -0.877453868763700910, -0.877429884615159580, -0.877405898273043490, +-0.877381909737412150, -0.877357919008326600, -0.877333926085846260, -0.877309930970031070, -0.877285933660940990, -0.877261934158636180, -0.877237932463176500, -0.877213928574621990, +-0.877189922493032630, -0.877165914218468010, -0.877141903750989100, -0.877117891090655410, -0.877093876237526990, -0.877069859191663910, -0.877045839953126130, -0.877021818521973360, +-0.876997794898266460, -0.876973769082065040, -0.876949741073429160, -0.876925710872419000, -0.876901678479094620, -0.876877643893515970, -0.876853607115743230, -0.876829568145836460, +-0.876805526983855720, -0.876781483629860860, -0.876757438083912600, -0.876733390346070780, -0.876709340416395480, -0.876685288294946850, -0.876661233981784640, -0.876637177476969680, +-0.876613118780561810, -0.876589057892621090, -0.876564994813207820, -0.876540929542382050, -0.876516862080203850, -0.876492792426733610, -0.876468720582031290, -0.876444646546157280, +-0.876420570319171200, -0.876396491901134000, -0.876372411292105640, -0.876348328492146390, -0.876324243501316100, -0.876300156319674950, -0.876276066947283770, -0.876251975384202410, +-0.876227881630491150, -0.876203785686210160, -0.876179687551419620, -0.876155587226180030, -0.876131484710551360, -0.876107380004593980, -0.876083273108368200, -0.876059164021933730, +-0.876035052745351870, -0.876010939278682340, -0.875986823621985430, -0.875962705775321540, -0.875938585738750830, -0.875914463512333260, -0.875890339096129900, -0.875866212490200690, +-0.875842083694606030, -0.875817952709406100, -0.875793819534661290, -0.875769684170431990, -0.875745546616778500, -0.875721406873761100, -0.875697264941439730, -0.875673120819875580, +-0.875648974509128710, -0.875624826009259390, -0.875600675320328040, -0.875576522442394920, -0.875552367375520110, -0.875528210119764780, -0.875504050675188990, -0.875479889041853030, +-0.875455725219817290, -0.875431559209142400, -0.875407391009888510, -0.875383220622116040, -0.875359048045885710, -0.875334873281257250, -0.875310696328291950, -0.875286517187050080, +-0.875262335857591830, -0.875238152339977700, -0.875213966634268200, -0.875189778740523390, -0.875165588658804560, -0.875141396389171770, -0.875117201931685520, -0.875093005286406210, +-0.875068806453394350, -0.875044605432710560, -0.875020402224415240, -0.874996196828568880, -0.874971989245232010, -0.874947779474464780, -0.874923567516328490, -0.874899353370883310, +-0.874875137038189750, -0.874850918518308430, -0.874826697811299290, -0.874802474917223850, -0.874778249836142160, -0.874754022568114960, -0.874729793113202650, -0.874705561471465830, +-0.874681327642965130, -0.874657091627761170, -0.874632853425914350, -0.874608613037485490, -0.874584370462534680, -0.874560125701123400, -0.874535878753311740, -0.874511629619160290, +-0.874487378298729910, -0.874463124792081100, -0.874438869099273930, -0.874414611220370120, -0.874390351155429730, -0.874366088904513510, -0.874341824467682050, -0.874317557844995990, +-0.874293289036516040, -0.874269018042302950, -0.874244744862417210, -0.874220469496919230, -0.874196191945870500, -0.874171912209331330, -0.874147630287362310, -0.874123346180024300, +-0.874099059887377790, -0.874074771409483310, -0.874050480746402350, -0.874026187898195080, -0.874001892864922470, -0.873977595646645010, -0.873953296243423660, -0.873928994655319040, +-0.873904690882391870, -0.873880384924702990, -0.873856076782312810, -0.873831766455282820, -0.873807453943673320, -0.873783139247545250, -0.873758822366959450, -0.873734503301976440, +-0.873710182052656830, -0.873685858619062120, -0.873661533001252820, -0.873637205199289670, -0.873612875213233500, -0.873588543043145150, -0.873564208689085460, -0.873539872151115280, +-0.873515533429295330, -0.873491192523686570, -0.873466849434349380, -0.873442504161345610, -0.873418156704735550, -0.873393807064580030, -0.873369455240940010, -0.873345101233875880, +-0.873320745043449480, -0.873296386669721310, -0.873272026112752010, -0.873247663372602730, -0.873223298449334330, -0.873198931343007630, -0.873174562053683600, -0.873150190581423070, +-0.873125816926287210, -0.873101441088336320, -0.873077063067632330, -0.873052682864235540, -0.873028300478207120, -0.873003915909608020, -0.872979529158499080, -0.872955140224940810, +-0.872930749108995260, -0.872906355810722730, -0.872881960330184280, -0.872857562667441080, -0.872833162822553850, -0.872808760795583780, -0.872784356586591700, -0.872759950195638790, +-0.872735541622785660, -0.872711130868094040, -0.872686717931624560, -0.872662302813438260, -0.872637885513596330, -0.872613466032159610, -0.872589044369188830, -0.872564620524745820, +-0.872540194498891310, -0.872515766291686260, -0.872491335903191830, -0.872466903333468990, -0.872442468582579010, -0.872418031650582740, -0.872393592537541450, -0.872369151243515770, +-0.872344707768567650, -0.872320262112757700, -0.872295814276147110, -0.872271364258797030, -0.872246912060768540, -0.872222457682122250, -0.872198001122920340, -0.872173542383223420, +-0.872149081463092560, -0.872124618362589140, -0.872100153081774130, -0.872075685620708580, -0.872051215979454010, -0.872026744158071350, -0.872002270156621790, -0.871977793975166170, +-0.871953315613766430, -0.871928835072483420, -0.871904352351378310, -0.871879867450512380, -0.871855380369946360, -0.871830891109742210, -0.871806399669960990, -0.871781906050663640, +-0.871757410251911560, -0.871732912273766040, -0.871708412116288130, -0.871683909779539250, -0.871659405263580540, -0.871634898568473430, -0.871610389694278510, -0.871585878641058080, +-0.871561365408872970, -0.871536849997784470, -0.871512332407853860, -0.871487812639142320, -0.871463290691710910, -0.871438766565621690, -0.871414240260935610, -0.871389711777713850, +-0.871365181116017800, -0.871340648275908850, -0.871316113257448180, -0.871291576060697290, -0.871267036685717480, -0.871242495132569680, -0.871217951401315970, -0.871193405492017510, +-0.871168857404735490, -0.871144307139531280, -0.871119754696466300, -0.871095200075601590, -0.871070643276999230, -0.871046084300720280, -0.871021523146826130, -0.870996959815378170, +-0.870972394306437800, -0.870947826620066420, -0.870923256756325540, -0.870898684715276540, -0.870874110496980270, -0.870849534101499230, -0.870824955528894380, -0.870800374779227120, +-0.870775791852558930, -0.870751206748951230, -0.870726619468465080, -0.870702030011162860, -0.870677438377105540, -0.870652844566354610, -0.870628248578971590, -0.870603650415017970, +-0.870579050074555270, -0.870554447557644770, -0.870529842864348310, -0.870505235994727180, -0.870480626948842540, -0.870456015726756790, -0.870431402328530890, -0.870406786754226670, +-0.870382169003905300, -0.870357549077628190, -0.870332926975457610, -0.870308302697454740, -0.870283676243681080, -0.870259047614198140, -0.870234416809067770, -0.870209783828351240, +-0.870185148672110280, -0.870160511340406400, -0.870135871833301320, -0.870111230150856120, -0.870086586293133180, -0.870061940260193900, -0.870037292052099680, -0.870012641668912350, +-0.869987989110693300, -0.869963334377503840, -0.869938677469406560, -0.869914018386462540, -0.869889357128733390, -0.869864693696280940, -0.869840028089166830, -0.869815360307452550, +-0.869790690351199820, -0.869766018220470500, -0.869741343915325650, -0.869716667435827870, -0.869691988782038350, -0.869667307954018920, -0.869642624951831200, -0.869617939775537030, +-0.869593252425197470, -0.869568562900875140, -0.869543871202631550, -0.869519177330528190, -0.869494481284626920, -0.869469783064989450, -0.869445082671677530, -0.869420380104752980, +-0.869395675364277310, -0.869370968450312140, -0.869346259362919980, -0.869321548102162110, -0.869296834668100370, -0.869272119060796600, -0.869247401280312530, -0.869222681326709430, +-0.869197959200050160, -0.869173234900396000, -0.869148508427808660, -0.869123779782350110, -0.869099048964082190, -0.869074315973066500, -0.869049580809365120, -0.869024843473039770, +-0.869000103964152280, -0.868975362282764060, -0.868950618428937950, -0.868925872402735220, -0.868901124204217950, -0.868876373833447730, -0.868851621290486210, -0.868826866575395980, +-0.868802109688238680, -0.868777350629076130, -0.868752589397970070, -0.868727825994982660, -0.868703060420175640, -0.868678292673610960, -0.868653522755350570, -0.868628750665456420, +-0.868603976403989900, -0.868579199971013850, -0.868554421366589780, -0.868529640590779750, -0.868504857643645600, -0.868480072525249280, -0.868455285235652300, -0.868430495774917600, +-0.868405704143106690, -0.868380910340281420, -0.868356114366503950, -0.868331316221836240, -0.868306515906340120, -0.868281713420077760, -0.868256908763111120, -0.868232101935501820, +-0.868207292937312690, -0.868182481768605240, -0.868157668429441640, -0.868132852919883960, -0.868108035239994020, -0.868083215389833570, -0.868058393369465550, -0.868033569178951580, +-0.868008742818353610, -0.867983914287733800, -0.867959083587154230, -0.867934250716676960, -0.867909415676364150, -0.867884578466277650, -0.867859739086479290, -0.867834897537032130, +-0.867810053817997580, -0.867785207929438030, -0.867760359871415310, -0.867735509643991820, -0.867710657247229070, -0.867685802681190110, -0.867660945945936680, -0.867636087041530830, +-0.867611225968034860, -0.867586362725510710, -0.867561497314020660, -0.867536629733627000, -0.867511759984391670, -0.867486888066376970, -0.867462013979644510, -0.867437137724257570, +-0.867412259300277770, -0.867387378707767280, -0.867362495946788380, -0.867337611017402700, -0.867312723919673510, -0.867287834653662550, -0.867262943219431980, -0.867238049617044090, +-0.867213153846561060, -0.867188255908045050, -0.867163355801558460, -0.867138453527163460, -0.867113549084922440, -0.867088642474897030, -0.867063733697150400, -0.867038822751744490, +-0.867013909638741480, -0.866988994358203760, -0.866964076910193500, -0.866939157294772670, -0.866914235512004310, -0.866889311561950480, -0.866864385444673260, -0.866839457160235140, +-0.866814526708698300, -0.866789594090125240, -0.866764659304578130, -0.866739722352119380, -0.866714783232810930, -0.866689841946715940, -0.866664898493896270, -0.866639952874414420, +-0.866615005088332670, -0.866590055135713410, -0.866565103016618600, -0.866540148731111510, -0.866515192279254000, -0.866490233661108440, -0.866465272876737470, -0.866440309926203130, +-0.866415344809568170, -0.866390377526894740, -0.866365408078245470, -0.866340436463682080, -0.866315462683268200, -0.866290486737065550, -0.866265508625136740, -0.866240528347544170, +-0.866215545904350240, -0.866190561295617000, -0.866165574521407860, -0.866140585581784750, -0.866115594476810190, -0.866090601206546570, -0.866065605771056510, -0.866040608170402510, +-0.866015608404646860, -0.865990606473852290, -0.865965602378081070, -0.865940596117395490, -0.865915587691858830, -0.865890577101533280, -0.865865564346481210, -0.865840549426765250, +-0.865815532342447570, -0.865790513093591340, -0.865765491680258960, -0.865740468102512820, -0.865715442360415420, -0.865690414454029500, -0.865665384383417560, -0.865640352148642100, +-0.865615317749765740, -0.865590281186851110, -0.865565242459960360, -0.865540201569157010, -0.865515158514503000, -0.865490113296061180, -0.865465065913894160, -0.865440016368064340, +-0.865414964658634100, -0.865389910785666850, -0.865364854749224870, -0.865339796549370770, -0.865314736186167170, -0.865289673659676680, -0.865264608969962050, -0.865239542117085870, +-0.865214473101110880, -0.865189401922099140, -0.865164328580114490, -0.865139253075218880, -0.865114175407475260, -0.865089095576946130, -0.865064013583694340, -0.865038929427782040, +-0.865013843109272870, -0.864988754628229000, -0.864963663984713360, -0.864938571178788470, -0.864913476210517170, -0.864888379079962190, -0.864863279787186360, -0.864838178332252180, +-0.864813074715222170, -0.864787968936159950, -0.864762860995127780, -0.864737750892188520, -0.864712638627404770, -0.864687524200839500, -0.864662407612554970, -0.864637288862614820, +-0.864612167951081420, -0.864587044878017740, -0.864561919643486390, -0.864536792247550200, -0.864511662690272020, -0.864486530971714680, -0.864461397091941030, -0.864436261051014010, +-0.864411122848995680, -0.864385982485950110, -0.864360839961939580, -0.864335695277026920, -0.864310548431275080, -0.864285399424746360, -0.864260248257504580, -0.864235094929612260, +-0.864209939441132110, -0.864184781792127210, -0.864159621982660280, -0.864134460012794370, -0.864109295882592220, -0.864084129592116890, -0.864058961141431210, -0.864033790530597700, +-0.864008617759680080, -0.863983442828741070, -0.863958265737843400, -0.863933086487050030, -0.863907905076423900, -0.863882721506027630, -0.863857535775924950, -0.863832347886178460, +-0.863807157836851140, -0.863781965628005910, -0.863756771259705740, -0.863731574732013560, -0.863706376044992560, -0.863681175198705580, -0.863655972193215330, -0.863630767028585430, +-0.863605559704878620, -0.863580350222158070, -0.863555138580486490, -0.863529924779927180, -0.863504708820542530, -0.863479490702396490, -0.863454270425551900, -0.863429047990071470, +-0.863403823396018510, -0.863378596643455950, -0.863353367732446970, -0.863328136663054520, -0.863302903435341770, -0.863277668049371230, -0.863252430505207060, -0.863227190802911770, +-0.863201948942548420, -0.863176704924180300, -0.863151458747870470, -0.863126210413681430, -0.863100959921677350, -0.863075707271920840, -0.863050452464475200, -0.863025195499403260, +-0.862999936376768420, -0.862974675096633730, -0.862949411659062360, -0.862924146064117490, -0.862898878311862180, -0.862873608402359270, -0.862848336335672710, -0.862823062111865440, +-0.862797785731000410, -0.862772507193140910, -0.862747226498349780, -0.862721943646690970, -0.862696658638227310, -0.862671371473022090, -0.862646082151138360, -0.862620790672639410, +-0.862595497037588530, -0.862570201246048880, -0.862544903298083750, -0.862519603193756310, -0.862494300933129510, -0.862468996516267290, -0.862443689943232620, -0.862418381214088760, +-0.862393070328899000, -0.862367757287725970, -0.862342442090634040, -0.862317124737686070, -0.862291805228945330, -0.862266483564474990, -0.862241159744338460, -0.862215833768599000, +-0.862190505637319910, -0.862165175350564690, -0.862139842908396400, -0.862114508310878210, -0.862089171558074070, -0.862063832650047050, -0.862038491586860410, -0.862013148368577560, +-0.861987802995261900, -0.861962455466976250, -0.861937105783784910, -0.861911753945750810, -0.861886399952937250, -0.861861043805407730, -0.861835685503225650, -0.861810325046454380, +-0.861784962435157230, -0.861759597669397690, -0.861734230749238720, -0.861708861674744590, -0.861683490445978250, -0.861658117063003330, -0.861632741525882980, -0.861607363834680950, +-0.861581983989459840, -0.861556601990284390, -0.861531217837217420, -0.861505831530322340, -0.861480443069662760, -0.861455052455301960, -0.861429659687303560, -0.861404264765731060, +-0.861378867690647860, -0.861353468462117130, -0.861328067080203040, -0.861302663544968870, -0.861277257856478020, -0.861251850014794100, -0.861226440019980500, -0.861201027872100290, +-0.861175613571218080, -0.861150197117396710, -0.861124778510699910, -0.861099357751191170, -0.861073934838934020, -0.861048509773992050, -0.861023082556428790, -0.860997653186307830, +-0.860972221663692690, -0.860946787988646540, -0.860921352161234000, -0.860895914181518010, -0.860870474049562180, -0.860845031765430260, -0.860819587329185180, -0.860794140740891670, +-0.860768692000612900, -0.860743241108412270, -0.860717788064353510, -0.860692332868500330, -0.860666875520916360, -0.860641416021665220, -0.860615954370810510, -0.860590490568415860, +-0.860565024614544540, -0.860539556509261170, -0.860514086252628820, -0.860488613844711310, -0.860463139285572280, -0.860437662575275430, -0.860412183713883950, -0.860386702701462450, +-0.860361219538074210, -0.860335734223782840, -0.860310246758652200, -0.860284757142745990, -0.860259265376127850, -0.860233771458861480, -0.860208275391010750, -0.860182777172638800, +-0.860157276803810490, -0.860131774284588870, -0.860106269615037890, -0.860080762795221280, -0.860055253825202650, -0.860029742705045510, -0.860004229434814470, -0.859978714014572820, +-0.859953196444384280, -0.859927676724312920, -0.859902154854422340, -0.859876630834776280, -0.859851104665438680, -0.859825576346473390, -0.859800045877943670, -0.859774513259914270, +-0.859748978492448580, -0.859723441575610540, -0.859697902509463760, -0.859672361294072320, -0.859646817929499480, -0.859621272415809990, -0.859595724753067450, -0.859570174941335470, +-0.859544622980678130, -0.859519068871159250, -0.859493512612842680, -0.859467954205792360, -0.859442393650072020, -0.859416830945745840, -0.859391266092877080, -0.859365699091530600, +-0.859340129941769890, -0.859314558643658800, -0.859288985197261380, -0.859263409602641030, -0.859237831859862580, -0.859212251968989540, -0.859186669930085970, -0.859161085743215590, +-0.859135499408442580, -0.859109910925830890, -0.859084320295444240, -0.859058727517346910, -0.859033132591602740, -0.859007535518275240, -0.858981936297429470, -0.858956334929128820, +-0.858930731413437230, -0.858905125750419000, -0.858879517940137730, -0.858853907982657370, -0.858828295878042660, -0.858802681626357200, -0.858777065227665060, -0.858751446682030180, +-0.858725825989516740, -0.858700203150188690, -0.858674578164110190, -0.858648951031345310, -0.858623321751957440, -0.858597690326011850, -0.858572056753571950, -0.858546421034701910, +-0.858520783169465900, -0.858495143157927850, -0.858469501000151510, -0.858443856696201930, -0.858418210246142620, -0.858392561650037860, -0.858366910907951700, -0.858341258019948210, +-0.858315602986091550, -0.858289945806445910, -0.858264286481075440, -0.858238625010043780, -0.858212961393416070, -0.858187295631255840, -0.858161627723627470, -0.858135957670595030, +-0.858110285472222570, -0.858084611128574040, -0.858058934639714500, -0.858033256005707570, -0.858007575226617410, -0.857981892302508430, -0.857956207233444680, -0.857930520019490330, +-0.857904830660709770, -0.857879139157167180, -0.857853445508926620, -0.857827749716052130, -0.857802051778608580, -0.857776351696660000, -0.857750649470270470, -0.857724945099504370, +-0.857699238584425430, -0.857673529925098930, -0.857647819121588490, -0.857622106173958510, -0.857596391082273260, -0.857570673846597130, -0.857544954466994300, -0.857519232943528940, +-0.857493509276265660, -0.857467783465268530, -0.857442055510601490, -0.857416325412329820, -0.857390593170517250, -0.857364858785228280, -0.857339122256527200, -0.857313383584478170, +-0.857287642769145370, -0.857261899810593750, -0.857236154708887480, -0.857210407464090830, -0.857184658076268200, -0.857158906545483880, -0.857133152871802250, -0.857107397055287820, +-0.857081639096004880, -0.857055878994017360, -0.857030116749390560, -0.857004352362188530, -0.856978585832475660, -0.856952817160316240, -0.856927046345774770, -0.856901273388915310, +-0.856875498289803140, -0.856849721048502100, -0.856823941665076800, -0.856798160139591650, -0.856772376472111130, -0.856746590662699650, -0.856720802711421700, -0.856695012618341800, +-0.856669220383523890, -0.856643426007033360, -0.856617629488934160, -0.856591830829291020, -0.856566030028168330, -0.856540227085630490, -0.856514422001741660, -0.856488614776567130, +-0.856462805410171170, -0.856436993902618180, -0.856411180253972670, -0.856385364464299250, -0.856359546533662420, -0.856333726462126690, -0.856307904249756670, -0.856282079896616980, +-0.856256253402771450, -0.856230424768285920, -0.856204593993224240, -0.856178761077651010, -0.856152926021630960, -0.856127088825228140, -0.856101249488508080, -0.856075408011534810, +-0.856049564394373070, -0.856023718637087370, -0.855997870739742430, -0.855972020702402860, -0.855946168525133170, -0.855920314207998080, -0.855894457751062210, -0.855868599154389730, +-0.855842738418046150, -0.855816875542095850, -0.855791010526603220, -0.855765143371633120, -0.855739274077250260, -0.855713402643518580, -0.855687529070504050, -0.855661653358270600, +-0.855635775506882970, -0.855609895516405980, -0.855584013386904150, -0.855558129118442310, -0.855532242711085190, -0.855506354164897510, -0.855480463479943440, -0.855454570656288720, +-0.855428675693997500, -0.855402778593134630, -0.855376879353764720, -0.855350977975952720, -0.855325074459762800, -0.855299168805260690, -0.855273261012510560, -0.855247351081577340, +-0.855221439012525670, -0.855195524805420490, -0.855169608460326520, -0.855143689977308500, -0.855117769356431250, -0.855091846597759050, -0.855065921701357760, -0.855039994667291640, +-0.855014065495625530, -0.854988134186424280, -0.854962200739752710, -0.854936265155675110, -0.854910327434257430, -0.854884387575563840, -0.854858445579659290, -0.854832501446608610, +-0.854806555176476750, -0.854780606769328430, -0.854754656225228620, -0.854728703544242130, -0.854702748726433930, -0.854676791771868390, -0.854650832680611370, -0.854624871452727140, +-0.854598908088280870, -0.854572942587337290, -0.854546974949960900, -0.854521005176217540, -0.854495033266171600, -0.854469059219888140, -0.854443083037431990, -0.854417104718868110, +-0.854391124264261560, -0.854365141673677160, -0.854339156947179880, -0.854313170084834760, -0.854287181086706200, -0.854261189952860160, -0.854235196683361230, -0.854209201278274160, +-0.854183203737664210, -0.854157204061596230, -0.854131202250134720, -0.854105198303345750, -0.854079192221293690, -0.854053184004043730, -0.854027173651660700, -0.854001161164209880, +-0.853975146541756100, -0.853949129784364440, -0.853923110892099930, -0.853897089865027210, -0.853871066703212220, -0.853845041406719570, -0.853819013975614330, -0.853792984409961540, +-0.853766952709826280, -0.853740918875273260, -0.853714882906368320, -0.853688844803176190, -0.853662804565761930, -0.853636762194190600, -0.853610717688527480, -0.853584671048837510, +-0.853558622275185860, -0.853532571367637720, -0.853506518326257680, -0.853480463151111700, -0.853454405842264730, -0.853428346399781600, -0.853402284823727600, -0.853376221114168000, +-0.853350155271167310, -0.853324087294791700, -0.853298017185105890, -0.853271944942175060, -0.853245870566064380, -0.853219794056838900, -0.853193715414564010, -0.853167634639304890, +-0.853141551731126600, -0.853115466690094530, -0.853089379516273280, -0.853063290209729040, -0.853037198770526530, -0.853011105198731020, -0.852985009494407810, -0.852958911657621610, +-0.852932811688438600, -0.852906709586923490, -0.852880605353141700, -0.852854498987158370, -0.852828390489038690, -0.852802279858848160, -0.852776167096651940, -0.852750052202515210, +-0.852723935176503360, -0.852697816018681220, -0.852671694729115080, -0.852645571307869670, -0.852619445755010250, -0.852593318070602350, -0.852567188254711010, -0.852541056307401290, +-0.852514922228739480, -0.852488786018790300, -0.852462647677619150, -0.852436507205291400, -0.852410364601872360, -0.852384219867427410, -0.852358073002021930, -0.852331924005721220, +-0.852305772878590220, -0.852279619620695320, -0.852253464232101350, -0.852227306712873720, -0.852201147063077810, -0.852174985282779130, -0.852148821372042400, -0.852122655330934120, +-0.852096487159519240, -0.852070316857863050, -0.852044144426031160, -0.852017969864088840, -0.851991793172101610, -0.851965614350134960, -0.851939433398254290, -0.851913250316524430, +-0.851887065105012000, -0.851860877763781940, -0.851834688292899660, -0.851808496692430640, -0.851782302962440400, -0.851756107102993880, -0.851729909114157690, -0.851703708995996570, +-0.851677506748576230, -0.851651302371962180, -0.851625095866219820, -0.851598887231414750, -0.851572676467612480, -0.851546463574878510, -0.851520248553278350, -0.851494031402877050, +-0.851467812123741230, -0.851441590715935840, -0.851415367179526480, -0.851389141514578780, -0.851362913721157690, -0.851336683799329700, -0.851310451749160090, -0.851284217570714370, +-0.851257981264058050, -0.851231742829256840, -0.851205502266376260, -0.851179259575481910, -0.851153014756639400, -0.851126767809914360, -0.851100518735371960, -0.851074267533078690, +-0.851048014203099720, -0.851021758745500790, -0.850995501160347390, -0.850969241447705360, -0.850942979607639650, -0.850916715640216980, -0.850890449545502530, -0.850864181323562010, +-0.850837910974460930, -0.850811638498265130, -0.850785363895040230, -0.850759087164851930, -0.850732808307765880, -0.850706527323847440, -0.850680244213163020, -0.850653958975778110, +-0.850627671611758230, -0.850601382121169090, -0.850575090504076650, -0.850548796760545960, -0.850522500890643740, -0.850496202894435280, -0.850469902771986310, -0.850443600523362540, +-0.850417296148629820, -0.850390989647853870, -0.850364681021100410, -0.850338370268435280, -0.850312057389923660, -0.850285742385632480, -0.850259425255626920, -0.850233105999972700, +-0.850206784618735890, -0.850180461111981980, -0.850154135479776470, -0.850127807722186210, -0.850101477839276250, -0.850075145831112770, -0.850048811697761250, -0.850022475439287880, +-0.849996137055758160, -0.849969796547238250, -0.849943453913793780, -0.849917109155490570, -0.849890762272394240, -0.849864413264571410, -0.849838062132087570, -0.849811708875008680, +-0.849785353493400450, -0.849758995987328290, -0.849732636356859140, -0.849706274602058500, -0.849679910722992090, -0.849653544719725870, -0.849627176592325890, -0.849600806340857880, +-0.849574433965387900, -0.849548059465981780, -0.849521682842705570, -0.849495304095624680, -0.849468923224805940, -0.849442540230314960, -0.849416155112217570, -0.849389767870579850, +-0.849363378505467730, -0.849336987016946600, -0.849310593405083520, -0.849284197669944010, -0.849257799811593990, -0.849231399830099430, -0.849204997725526380, -0.849178593497940780, +-0.849152187147408810, -0.849125778673996300, -0.849099368077768870, -0.849072955358793570, -0.849046540517135790, -0.849020123552861720, -0.848993704466037280, -0.848967283256728660, +-0.848940859925001230, -0.848914434470922300, -0.848888006894557120, -0.848861577195971990, -0.848835145375232970, -0.848808711432405990, -0.848782275367557350, -0.848755837180752870, +-0.848729396872058950, -0.848702954441540980, -0.848676509889266130, -0.848650063215300010, -0.848623614419708680, -0.848597163502558320, -0.848570710463915080, -0.848544255303844590, +-0.848517798022413890, -0.848491338619688840, -0.848464877095735260, -0.848438413450619660, -0.848411947684407860, -0.848385479797166280, -0.848359009788961060, -0.848332537659858170, +-0.848306063409923980, -0.848279587039224240, -0.848253108547825980, -0.848226627935794950, -0.848200145203197310, -0.848173660350099330, -0.848147173376566640, -0.848120684282666630, +-0.848094193068464790, -0.848067699734027620, -0.848041204279421090, -0.848014706704711570, -0.847988207009965240, -0.847961705195248490, -0.847935201260627380, -0.847908695206168290, +-0.847882187031937070, -0.847855676738000770, -0.847829164324425340, -0.847802649791276950, -0.847776133138621880, -0.847749614366526070, -0.847723093475056700, -0.847696570464279710, +-0.847670045334261160, -0.847643518085067550, -0.847616988716765050, -0.847590457229420170, -0.847563923623099070, -0.847537387897868260, -0.847510850053793900, -0.847484310090942050, +-0.847457768009379770, -0.847431223809173130, -0.847404677490388390, -0.847378129053091960, -0.847351578497350320, -0.847325025823229220, -0.847298471030795920, -0.847271914120116490, +-0.847245355091257310, -0.847218793944284790, -0.847192230679265190, -0.847165665296265020, -0.847139097795350790, -0.847112528176588660, -0.847085956440044920, -0.847059382585786610, +-0.847032806613879920, -0.847006228524391220, -0.846979648317386810, -0.846953065992933410, -0.846926481551096840, -0.846899894991944620, -0.846873306315542580, -0.846846715521957340, +-0.846820122611255170, -0.846793527583502790, -0.846766930438766610, -0.846740331177113110, -0.846713729798608710, -0.846687126303319990, -0.846660520691313030, -0.846633912962655220, +-0.846607303117412720, -0.846580691155651820, -0.846554077077439240, -0.846527460882841030, -0.846500842571924710, -0.846474222144756210, -0.846447599601402030, -0.846420974941929030, +-0.846394348166403470, -0.846367719274892070, -0.846341088267461460, -0.846314455144178020, -0.846287819905108480, -0.846261182550319010, -0.846234543079876890, -0.846207901493848500, +-0.846181257792300360, -0.846154611975299060, -0.846127964042910800, -0.846101313995203050, -0.846074661832242110, -0.846048007554094370, -0.846021351160826660, -0.845994692652505710, +-0.845968032029197900, -0.845941369290969970, -0.845914704437888740, -0.845888037470020620, -0.845861368387431980, -0.845834697190190440, -0.845808023878362070, -0.845781348452013690, +-0.845754670911212040, -0.845727991256023600, -0.845701309486514670, -0.845674625602753080, -0.845647939604804780, -0.845621251492736700, -0.845594561266615470, -0.845567868926507930, +-0.845541174472480560, -0.845514477904600440, -0.845487779222933940, -0.845461078427547590, -0.845434375518509080, -0.845407670495884610, -0.845380963359740890, -0.845354254110144750, +-0.845327542747163040, -0.845300829270862030, -0.845274113681309450, -0.845247395978571460, -0.845220676162715010, -0.845193954233806940, -0.845167230191913980, -0.845140504037102840, +-0.845113775769440580, -0.845087045388993820, -0.845060312895828950, -0.845033578290013800, -0.845006841571614650, -0.844980102740698460, -0.844953361797331940, -0.844926618741582150, +-0.844899873573515150, -0.844873126293199110, -0.844846376900700190, -0.844819625396085350, -0.844792871779421420, -0.844766116050775340, -0.844739358210213950, -0.844712598257804090, +-0.844685836193612820, -0.844659072017706960, -0.844632305730152910, -0.844605537331018620, -0.844578766820370470, -0.844551994198275420, -0.844525219464800300, -0.844498442620011720, +-0.844471663663977520, -0.844444882596764200, -0.844418099418438590, -0.844391314129067760, -0.844364526728718650, -0.844337737217458200, -0.844310945595353470, -0.844284151862471300, +-0.844257356018878860, -0.844230558064642420, -0.844203757999830160, -0.844176955824508470, -0.844150151538744400, -0.844123345142604900, -0.844096536636157020, -0.844069726019467390, +-0.844042913292603950, -0.844016098455633190, -0.843989281508622180, -0.843962462451637970, -0.843935641284747630, -0.843908818008018090, -0.843881992621516640, -0.843855165125310110, +-0.843828335519465230, -0.843801503804050060, -0.843774669979130980, -0.843747834044775270, -0.843720996001050110, -0.843694155848022320, -0.843667313585758750, -0.843640469214327230, +-0.843613622733794700, -0.843586774144228000, -0.843559923445694420, -0.843533070638261000, -0.843506215721994910, -0.843479358696963330, -0.843452499563233320, -0.843425638320871580, +-0.843398774969946310, -0.843371909510523990, -0.843345041942671900, -0.843318172266457220, -0.843291300481947110, -0.843264426589208300, -0.843237550588308960, -0.843210672479315580, +-0.843183792262295670, -0.843156909937316180, -0.843130025504444490, -0.843103138963747670, -0.843076250315292990, -0.843049359559147730, -0.843022466695379060, -0.842995571724053820, +-0.842968674645240060, -0.842941775459004620, -0.842914874165414770, -0.842887970764537700, -0.842861065256440220, -0.842834157641190520, -0.842807247918855530, -0.842780336089502310, +-0.842753422153198370, -0.842726506110010760, -0.842699587960006990, -0.842672667703254110, -0.842645745339819730, -0.842618820869770910, -0.842591894293174490, -0.842564965610098860, +-0.842538034820610850, -0.842511101924777740, -0.842484166922666920, -0.842457229814345570, -0.842430290599880730, -0.842403349279340690, -0.842376405852792160, -0.842349460320302780, +-0.842322512681939580, -0.842295562937770190, -0.842268611087861880, -0.842241657132282050, -0.842214701071098080, -0.842187742904376920, -0.842160782632186740, -0.842133820254594710, +-0.842106855771668110, -0.842079889183474430, -0.842052920490080960, -0.842025949691554750, -0.841998976787964090, -0.841972001779376030, -0.841945024665857970, -0.841918045447477280, +-0.841891064124301590, -0.841864080696398060, -0.841837095163834540, -0.841810107526678180, -0.841783117784996040, -0.841756125938856630, -0.841729131988326880, -0.841702135933474320, +-0.841675137774366420, -0.841648137511070700, -0.841621135143654220, -0.841594130672185250, -0.841567124096730960, -0.841540115417358960, -0.841513104634136640, -0.841486091747131510, +-0.841459076756411180, -0.841432059662043150, -0.841405040464094920, -0.841378019162633660, -0.841350995757727870, -0.841323970249444610, -0.841296942637851260, -0.841269912923015670, +-0.841242881105005340, -0.841215847183887750, -0.841188811159730100, -0.841161773032600870, -0.841134732802567230, -0.841107690469696690, -0.841080646034056970, -0.841053599495715680, +-0.841026550854740430, -0.840999500111198620, -0.840972447265157740, -0.840945392316686190, -0.840918335265851140, -0.840891276112720190, -0.840864214857361180, -0.840837151499841510, +-0.840810086040229000, -0.840783018478590830, -0.840755948814995600, -0.840728877049510490, -0.840701803182203110, -0.840674727213141290, -0.840647649142392650, -0.840620568970024910, +-0.840593486696105780, -0.840566402320702790, -0.840539315843883420, -0.840512227265716280, -0.840485136586268440, -0.840458043805607850, -0.840430948923802210, -0.840403851940919040, +-0.840376752857025840, -0.840349651672191330, -0.840322548386482570, -0.840295442999967500, -0.840268335512713740, -0.840241225924789230, -0.840214114236261580, -0.840187000447198740, +-0.840159884557668320, -0.840132766567737720, -0.840105646477475650, -0.840078524286949620, -0.840051399996227130, -0.840024273605376240, -0.839997145114464550, -0.839970014523560020, +-0.839942881832730030, -0.839915747042043300, -0.839888610151567240, -0.839861471161369670, -0.839834330071518310, -0.839807186882081220, -0.839780041593126140, -0.839752894204720880, +-0.839725744716932950, -0.839698593129831190, -0.839671439443482880, -0.839644283657956070, -0.839617125773318480, -0.839589965789638070, -0.839562803706982770, -0.839535639525419990, +-0.839508473245018540, -0.839481304865845930, -0.839454134387970120, -0.839426961811458930, -0.839399787136380300, -0.839372610362802200, -0.839345431490792660, -0.839318250520418970, +-0.839291067451750190, -0.839263882284853710, -0.839236695019797590, -0.839209505656649650, -0.839182314195477950, -0.839155120636350560, -0.839127924979334750, -0.839100727224499690, +-0.839073527371912760, -0.839046325421642040, -0.839019121373755560, -0.838991915228321280, -0.838964706985407150, -0.838937496645081220, -0.838910284207411650, -0.838883069672465840, +-0.838855853040312850, -0.838828634311020170, -0.838801413484655980, -0.838774190561288210, -0.838746965540985050, -0.838719738423813870, -0.838692509209843840, -0.838665277899142580, +-0.838638044491778150, -0.838610808987818590, -0.838583571387331970, -0.838556331690386460, -0.838529089897050110, -0.838501846007391080, -0.838474600021476890, -0.838447351939376690, +-0.838420101761158220, -0.838392849486889410, -0.838365595116638440, -0.838338338650473470, -0.838311080088462780, -0.838283819430673760, -0.838256556677175800, -0.838229291828036290, +-0.838202024883323740, -0.838174755843105970, -0.838147484707451370, -0.838120211476428120, -0.838092936150104270, -0.838065658728547660, -0.838038379211827330, -0.838011097600011020, +-0.837983813893167010, -0.837956528091363450, -0.837929240194668630, -0.837901950203150610, -0.837874658116877340, -0.837847363935917850, -0.837820067660339900, -0.837792769290211960, +-0.837765468825601880, -0.837738166266578270, -0.837710861613209180, -0.837683554865563010, -0.837656246023707360, -0.837628935087711630, -0.837601622057643550, -0.837574306933571490, +-0.837546989715563630, -0.837519670403688240, -0.837492348998013720, -0.837465025498607800, -0.837437699905539850, -0.837410372218877600, -0.837383042438689440, -0.837355710565043650, +-0.837328376598008630, -0.837301040537652640, -0.837273702384044080, -0.837246362137251340, -0.837219019797342030, -0.837191675364385770, -0.837164328838450380, -0.837136980219604030, +-0.837109629507915340, -0.837082276703452480, -0.837054921806283490, -0.837027564816477660, -0.837000205734102940, -0.836972844559227710, -0.836945481291920370, -0.836918115932249300, +-0.836890748480283000, -0.836863378936089750, -0.836836007299738170, -0.836808633571295980, -0.836781257750832670, -0.836753879838416310, -0.836726499834115180, -0.836699117737997880, +-0.836671733550132690, -0.836644347270588230, -0.836616958899432440, -0.836589568436734710, -0.836562175882562990, -0.836534781236985880, -0.836507384500071890, -0.836479985671889300, +-0.836452584752506830, -0.836425181741992870, -0.836397776640415590, -0.836370369447844150, -0.836342960164346950, -0.836315548789992260, -0.836288135324848800, -0.836260719768984860, +-0.836233302122469160, -0.836205882385369750, -0.836178460557756130, -0.836151036639696370, -0.836123610631259060, -0.836096182532512610, -0.836068752343525730, -0.836041320064367040, +-0.836013885695105040, -0.835986449235807780, -0.835959010686544880, -0.835931570047384500, -0.835904127318395250, -0.835876682499645530, -0.835849235591204160, -0.835821786593139770, +-0.835794335505520400, -0.835766882328415670, -0.835739427061893750, -0.835711969706023240, -0.835684510260872760, -0.835657048726511140, -0.835629585103006780, -0.835602119390428500, +-0.835574651588844920, -0.835547181698324200, -0.835519709718935970, -0.835492235650748590, -0.835464759493830480, -0.835437281248250560, -0.835409800914077460, -0.835382318491379340, +-0.835354833980225920, -0.835327347380685370, -0.835299858692826520, -0.835272367916717990, -0.835244875052428500, -0.835217380100026880, -0.835189883059581750, -0.835162383931162040, +-0.835134882714835710, -0.835107379410672810, -0.835079874018741400, -0.835052366539110300, -0.835024856971848250, -0.834997345317024080, -0.834969831574706610, -0.834942315744964030, +-0.834914797827866150, -0.834887277823481270, -0.834859755731878210, -0.834832231553125800, -0.834804705287292670, -0.834777176934447970, -0.834749646494660210, -0.834722113967997890, +-0.834694579354530730, -0.834667042654327120, -0.834639503867455890, -0.834611962993985990, -0.834584420033986140, -0.834556874987525180, -0.834529327854671600, -0.834501778635495130, +-0.834474227330064270, -0.834446673938447850, -0.834419118460714700, -0.834391560896933780, -0.834364001247174030, -0.834336439511504270, -0.834308875689992790, -0.834281309782709650, +-0.834253741789723340, -0.834226171711102580, -0.834198599546916440, -0.834171025297233750, -0.834143448962123560, -0.834115870541654260, -0.834088290035895690, -0.834060707444916450, +-0.834033122768785380, -0.834005536007571660, -0.833977947161343990, -0.833950356230171440, -0.833922763214123060, -0.833895168113267690, -0.833867570927673940, -0.833839971657411750, +-0.833812370302549730, -0.833784766863156720, -0.833757161339301780, -0.833729553731053840, -0.833701944038481630, -0.833674332261655100, -0.833646718400642640, -0.833619102455513410, +-0.833591484426336460, -0.833563864313180860, -0.833536242116115430, -0.833508617835209460, -0.833480991470532010, -0.833453363022151560, -0.833425732490138180, -0.833398099874560480, +-0.833370465175487520, -0.833342828392988340, -0.833315189527132240, -0.833287548577987590, -0.833259905545624570, -0.833232260430111780, -0.833204613231518290, -0.833176963949913360, +-0.833149312585365950, -0.833121659137945230, -0.833094003607720460, -0.833066345994760590, -0.833038686299134470, -0.833011024520912020, -0.832983360660162100, -0.832955694716953630, +-0.832928026691356130, -0.832900356583438420, -0.832872684393269890, -0.832845010120919050, -0.832817333766456280, -0.832789655329950200, -0.832761974811469850, -0.832734292211084750, +-0.832706607528863720, -0.832678920764876370, -0.832651231919191550, -0.832623540991878190, -0.832595847983006570, -0.832568152892645190, -0.832540455720863550, -0.832512756467730710, +-0.832485055133316050, -0.832457351717688640, -0.832429646220917420, -0.832401938643072550, -0.832374228984222860, -0.832346517244437640, -0.832318803423786060, -0.832291087522337490, +-0.832263369540161220, -0.832235649477326530, -0.832207927333902700, -0.832180203109958550, -0.832152476805564370, -0.832124748420788980, -0.832097017955701790, -0.832069285410372060, +-0.832041550784869080, -0.832013814079261670, -0.831986075293620340, -0.831958334428013700, -0.831930591482511360, -0.831902846457182490, -0.831875099352096470, -0.831847350167322700, +-0.831819598902930560, -0.831791845558989440, -0.831764090135568180, -0.831736332632737270, -0.831708573050565450, -0.831680811389122200, -0.831653047648476920, -0.831625281828699100, +-0.831597513929857480, -0.831569743952022660, -0.831541971895263470, -0.831514197759649300, -0.831486421545249650, -0.831458643252133920, -0.831430862880371600, -0.831403080430032190, +-0.831375295901184970, -0.831347509293899110, -0.831319720608244880, -0.831291929844291460, -0.831264137002108110, -0.831236342081764450, -0.831208545083329970, -0.831180746006874080, +-0.831152944852465940, -0.831125141620175810, -0.831097336310072880, -0.831069528922226630, -0.831041719456706460, -0.831013907913582090, -0.830986094292922920, -0.830958278594798540, +-0.830930460819277910, -0.830902640966431630, -0.830874819036328870, -0.830846995029038910, -0.830819168944631480, -0.830791340783176180, -0.830763510544742510, -0.830735678229399640, +-0.830707843837217960, -0.830680007368266750, -0.830652168822615500, -0.830624328200333830, -0.830596485501491340, -0.830568640726157550, -0.830540793874402270, -0.830512944946295020, +-0.830485093941904840, -0.830457240861302460, -0.830429385704556930, -0.830401528471737980, -0.830373669162915220, -0.830345807778158250, -0.830317944317536250, -0.830290078781119930, +-0.830262211168978360, -0.830234341481181250, -0.830206469717798430, -0.830178595878899310, -0.830150719964553700, -0.830122841974831330, -0.830094961909801920, -0.830067079769534530, +-0.830039195554099880, -0.830011309263567370, -0.829983420898006470, -0.829955530457487160, -0.829927637942078910, -0.829899743351851020, -0.829871846686874410, -0.829843947947218050, +-0.829816047132951980, -0.829788144244145710, -0.829760239280869060, -0.829732332243191760, -0.829704423131183750, -0.829676511944914650, -0.829648598684453730, -0.829620683349871820, +-0.829592765941238210, -0.829564846458622720, -0.829536924902095070, -0.829509001271725110, -0.829481075567582660, -0.829453147789737000, -0.829425217938258960, -0.829397286013217940, +-0.829369352014683650, -0.829341415942726030, -0.829313477797414820, -0.829285537578819950, -0.829257595287011260, -0.829229650922058030, -0.829201704484031190, -0.829173755973000140, +-0.829145805389034600, -0.829117852732204620, -0.829089898002579930, -0.829061941200230580, -0.829033982325225850, -0.829006021377636680, -0.828978058357532350, -0.828950093264983030, +-0.828922126100058440, -0.828894156862828520, -0.828866185553363110, -0.828838212171732370, -0.828810236718006020, -0.828782259192253680, -0.828754279594546060, -0.828726297924952780, +-0.828698314183543780, -0.828670328370389010, -0.828642340485558400, -0.828614350529121470, -0.828586358501149150, -0.828558364401710930, -0.828530368230876780, -0.828502369988716740, +-0.828474369675300750, -0.828446367290698870, -0.828418362834981050, -0.828390356308217330, -0.828362347710477120, -0.828334337041831680, -0.828306324302350290, -0.828278309492103240, +-0.828250292611160340, -0.828222273659591670, -0.828194252637466820, -0.828166229544856860, -0.828138204381831280, -0.828110177148460250, -0.828082147844813820, -0.828054116470961940, +-0.828026083026974780, -0.827998047512922390, -0.827970009928874930, -0.827941970274901910, -0.827913928551074490, -0.827885884757462280, -0.827857838894135330, -0.827829790961163710, +-0.827801740958617690, -0.827773688886567330, -0.827745634745082230, -0.827717578534233560, -0.827689520254090930, -0.827661459904724510, -0.827633397486204460, -0.827605332998600840, +-0.827577266441983930, -0.827549197816423890, -0.827521127121990330, -0.827493054358754420, -0.827464979526785880, -0.827436902626154880, -0.827408823656931690, -0.827380742619186370, +-0.827352659512989200, -0.827324574338409890, -0.827296487095519730, -0.827268397784388210, -0.827240306405085830, -0.827212212957682660, -0.827184117442248850, -0.827156019858854900, +-0.827127920207570750, -0.827099818488466370, -0.827071714701613000, -0.827043608847080280, -0.827015500924938580, -0.826987390935258080, -0.826959278878109050, -0.826931164753561990, +-0.826903048561686390, -0.826874930302553660, -0.826846809976233720, -0.826818687582796640, -0.826790563122312920, -0.826762436594852710, -0.826734308000486420, -0.826706177339284420, +-0.826678044611317000, -0.826649909816653870, -0.826621772955366540, -0.826593634027524730, -0.826565493033198930, -0.826537349972459310, -0.826509204845376270, -0.826481057652019850, +-0.826452908392461220, -0.826424757066770320, -0.826396603675017440, -0.826368448217273180, -0.826340290693607700, -0.826312131104091630, -0.826283969448795120, -0.826255805727788780, +-0.826227639941142340, -0.826199472088927300, -0.826171302171213600, -0.826143130188071620, -0.826114956139571870, -0.826086780025784730, -0.826058601846780590, -0.826030421602629520, +-0.826002239293402770, -0.825974054919170530, -0.825945868480003180, -0.825917679975971100, -0.825889489407144790, -0.825861296773594770, -0.825833102075391510, -0.825804905312605090, +-0.825776706485306770, -0.825748505593566720, -0.825720302637455440, -0.825692097617043430, -0.825663890532401190, -0.825635681383599110, -0.825607470170707460, -0.825579256893797520, +-0.825551041552939460, -0.825522824148203880, -0.825494604679661180, -0.825466383147381970, -0.825438159551436850, -0.825409933891896210, -0.825381706168830330, -0.825353476382310710, +-0.825325244532407300, -0.825297010619190810, -0.825268774642731850, -0.825240536603100930, -0.825212296500368650, -0.825184054334605180, -0.825155810105882010, -0.825127563814269330, +-0.825099315459837720, -0.825071065042657930, -0.825042812562800320, -0.825014558020335850, -0.824986301415334910, -0.824958042747868100, -0.824929782018005820, -0.824901519225819560, +-0.824873254371379480, -0.824844987454756320, -0.824816718476020670, -0.824788447435243150, -0.824760174332494040, -0.824731899167845060, -0.824703621941366260, -0.824675342653128470, +-0.824647061303202310, -0.824618777891658490, -0.824590492418567740, -0.824562204884000670, -0.824533915288028220, -0.824505623630720330, -0.824477329912148950, -0.824449034132384350, +-0.824420736291497040, -0.824392436389557950, -0.824364134426637700, -0.824335830402807220, -0.824307524318136590, -0.824279216172697620, -0.824250905966560700, -0.824222593699796450, +-0.824194279372475690, -0.824165962984669380, -0.824137644536448000, -0.824109324027882620, -0.824081001459043390, -0.824052676830002050, -0.824024350140829200, -0.823996021391595330, +-0.823967690582371510, -0.823939357713228350, -0.823911022784236890, -0.823882685795467420, -0.823854346746991650, -0.823826005638879980, -0.823797662471203340, -0.823769317244032570, +-0.823740969957438510, -0.823712620611491970, -0.823684269206264030, -0.823655915741824730, -0.823627560218246240, -0.823599202635598830, -0.823570842993953330, -0.823542481293380810, +-0.823514117533952090, -0.823485751715738120, -0.823457383838809180, -0.823429013903237310, -0.823400641909092900, -0.823372267856446900, -0.823343891745370260, -0.823315513575933800, +-0.823287133348208690, -0.823258751062265650, -0.823230366718175730, -0.823201980316009440, -0.823173591855838720, -0.823145201337733940, -0.823116808761766180, -0.823088414128006370, +-0.823060017436525570, -0.823031618687394270, -0.823003217880684420, -0.822974815016466410, -0.822946410094811510, -0.822918003115790440, -0.822889594079474480, -0.822861182985934470, +-0.822832769835241560, -0.822804354627466710, -0.822775937362680400, -0.822747518040954810, -0.822719096662360430, -0.822690673226968320, -0.822662247734849420, -0.822633820186075000, +-0.822605390580716020, -0.822576958918843080, -0.822548525200528240, -0.822520089425842090, -0.822491651594855710, -0.822463211707640140, -0.822434769764266550, -0.822406325764806100, +-0.822377879709329850, -0.822349431597908300, -0.822320981430613720, -0.822292529207516720, -0.822264074928688360, -0.822235618594199910, -0.822207160204122320, -0.822178699758526750, +-0.822150237257484040, -0.822121772701066230, -0.822093306089344060, -0.822064837422388450, -0.822036366700270920, -0.822007893923062390, -0.821979419090834160, -0.821950942203657280, +-0.821922463261602680, -0.821893982264742310, -0.821865499213147110, -0.821837014106888030, -0.821808526946036460, -0.821780037730663550, -0.821751546460840700, -0.821723053136638290, +-0.821694557758128830, -0.821666060325383030, -0.821637560838471950, -0.821609059297467080, -0.821580555702439490, -0.821552050053460550, -0.821523542350601430, -0.821495032593933530, +-0.821466520783527550, -0.821438006919455790, -0.821409491001788950, -0.821380973030598320, -0.821352453005955390, -0.821323930927931210, -0.821295406796596850, -0.821266880612024350, +-0.821238352374284660, -0.821209822083449170, -0.821181289739589040, -0.821152755342775760, -0.821124218893080520, -0.821095680390574790, -0.821067139835329750, -0.821038597227416460, +-0.821010052566907180, -0.820981505853872750, -0.820952957088384560, -0.820924406270514000, -0.820895853400332330, -0.820867298477911180, -0.820838741503321150, -0.820810182476634840, +-0.820781621397922990, -0.820753058267257200, -0.820724493084708740, -0.820695925850349010, -0.820667356564249490, -0.820638785226481480, -0.820610211837116130, -0.820581636396225720, +-0.820553058903881190, -0.820524479360154050, -0.820495897765115670, -0.820467314118837550, -0.820438728421391210, -0.820410140672847450, -0.820381550873279020, -0.820352959022756510, +-0.820324365121351650, -0.820295769169135940, -0.820267171166180750, -0.820238571112557710, -0.820209969008338200, -0.820181364853593280, -0.820152758648395430, -0.820124150392815610, +-0.820095540086925530, -0.820066927730796590, -0.820038313324500280, -0.820009696868108210, -0.819981078361691430, -0.819952457805322330, -0.819923835199072190, -0.819895210543012510, +-0.819866583837214670, -0.819837955081750500, -0.819809324276691400, -0.819780691422108960, -0.819752056518074810, -0.819723419564659990, -0.819694780561937120, -0.819666139509977350, +-0.819637496408852200, -0.819608851258633360, -0.819580204059392250, -0.819551554811200230, -0.819522903514129820, -0.819494250168252170, -0.819465594773638890, -0.819436937330361600, +-0.819408277838492020, -0.819379616298101740, -0.819350952709262390, -0.819322287072045690, -0.819293619386522680, -0.819264949652766190, -0.819236277870847300, -0.819207604040837700, +-0.819178928162809130, -0.819150250236833190, -0.819121570262981710, -0.819092888241325760, -0.819064204171938040, -0.819035518054889940, -0.819006829890252970, -0.818978139678098960, +-0.818949447418499510, -0.818920753111526460, -0.818892056757251630, -0.818863358355746080, -0.818834657907082650, -0.818805955411332500, -0.818777250868567560, -0.818748544278859460, +-0.818719835642280010, -0.818691124958900950, -0.818662412228793660, -0.818633697452030740, -0.818604980628683590, -0.818576261758824030, -0.818547540842523790, -0.818518817879854700, +-0.818490092870888590, -0.818461365815697170, -0.818432636714351960, -0.818403905566925550, -0.818375172373489450, -0.818346437134115370, -0.818317699848875260, -0.818288960517840840, +-0.818260219141084040, -0.818231475718676160, -0.818202730250690120, -0.818173982737197210, -0.818145233178269480, -0.818116481573978540, -0.818087727924396440, -0.818058972229595010, +-0.818030214489646190, -0.818001454704621820, -0.817972692874593290, -0.817943928999633530, -0.817915163079813930, -0.817886395115206440, -0.817857625105882890, -0.817828853051915440, +-0.817800078953375250, -0.817771302810335390, -0.817742524622867230, -0.817713744391042830, -0.817684962114934020, -0.817656177794612750, -0.817627391430151170, -0.817598603021621020, +-0.817569812569094450, -0.817541020072642730, -0.817512225532339040, -0.817483428948254760, -0.817454630320461950, -0.817425829649032430, -0.817397026934038480, -0.817368222175551940, +-0.817339415373644300, -0.817310606528388610, -0.817281795639856480, -0.817252982708119860, -0.817224167733250680, -0.817195350715321120, -0.817166531654403230, -0.817137710550569050, +-0.817108887403889980, -0.817080062214439180, -0.817051234982288380, -0.817022405707509390, -0.816993574390174390, -0.816964741030355430, -0.816935905628124680, -0.816907068183553630, +-0.816878228696715450, -0.816849387167681630, -0.816820543596524340, -0.816791697983315750, -0.816762850328127900, -0.816734000631032960, -0.816705148892102990, -0.816676295111409600, +-0.816647439289026060, -0.816618581425023860, -0.816589721519475180, -0.816560859572452280, -0.816531995584027230, -0.816503129554272070, -0.816474261483258630, -0.816445391371060090, +-0.816416519217748050, -0.816387645023394780, -0.816358768788072340, -0.816329890511852900, -0.816301010194808830, -0.816272127837012200, -0.816243243438535270, -0.816214356999449770, +-0.816185468519828870, -0.816156577999744170, -0.816127685439268170, -0.816098790838472920, -0.816069894197430590, -0.816040995516213120, -0.816012094794893670, -0.815983192033543970, +-0.815954287232236290, -0.815925380391042900, -0.815896471510036080, -0.815867560589288000, -0.815838647628871150, -0.815809732628857590, -0.815780815589319140, -0.815751896510329200, +-0.815722975391959590, -0.815694052234282490, -0.815665127037370260, -0.815636199801295200, -0.815607270526129140, -0.815578339211945450, -0.815549405858815860, -0.815520470466812860, +-0.815491533036008520, -0.815462593566475440, -0.815433652058285880, -0.815404708511512140, -0.815375762926226710, -0.815346815302501300, -0.815317865640409420, -0.815288913940022790, +-0.815259960201414000, -0.815231004424655240, -0.815202046609818880, -0.815173086756977530, -0.815144124866202910, -0.815115160937568530, -0.815086194971146210, -0.815057226967008330, +-0.815028256925227510, -0.814999284845875920, -0.814970310729026260, -0.814941334574750710, -0.814912356383121320, -0.814883376154211690, -0.814854393888093440, -0.814825409584839290, +-0.814796423244521620, -0.814767434867212930, -0.814738444452985600, -0.814709452001911580, -0.814680457514064590, -0.814651460989516350, -0.814622462428339470, -0.814593461830606440, +-0.814564459196389870, -0.814535454525762040, -0.814506447818795550, -0.814477439075562910, -0.814448428296136280, -0.814419415480589050, -0.814390400628993260, -0.814361383741421530, +-0.814332364817946240, -0.814303343858640120, -0.814274320863575100, -0.814245295832824790, -0.814216268766461250, -0.814187239664556970, -0.814158208527184680, -0.814129175354416870, +-0.814100140146326030, -0.814071102902984900, -0.814042063624466070, -0.814013022310841490, -0.813983978962184880, -0.813954933578568300, -0.813925886160064450, -0.813896836706745840, +-0.813867785218685190, -0.813838731695954550, -0.813809676138627540, -0.813780618546776410, -0.813751558920473680, -0.813722497259792070, -0.813693433564804170, -0.813664367835582710, +-0.813635300072200420, -0.813606230274729780, -0.813577158443243080, -0.813548084577814020, -0.813519008678514680, -0.813489930745417980, -0.813460850778596310, -0.813431768778122510, +-0.813402684744069290, -0.813373598676508940, -0.813344510575515050, -0.813315420441159900, -0.813286328273516100, -0.813257234072656600, -0.813228137838654000, -0.813199039571581020, +-0.813169939271510490, -0.813140836938514580, -0.813111732572667000, -0.813082626174040150, -0.813053517742706840, -0.813024407278739590, -0.812995294782211440, -0.812966180253194890, +-0.812937063691762550, -0.812907945097987920, -0.812878824471943600, -0.812849701813702090, -0.812820577123336330, -0.812791450400919160, -0.812762321646523400, -0.812733190860221780, +-0.812704058042087120, -0.812674923192191920, -0.812645786310609910, -0.812616647397413350, -0.812587506452675300, -0.812558363476468370, -0.812529218468865610, -0.812500071429939190, +-0.812470922359763150, -0.812441771258409880, -0.812412618125952110, -0.812383462962462780, -0.812354305768014820, -0.812325146542681180, -0.812295985286534570, -0.812266821999648060, +-0.812237656682093910, -0.812208489333946180, -0.812179319955277260, -0.812150148546159970, -0.812120975106667250, -0.812091799636872170, -0.812062622136847100, -0.812033442606665990, +-0.812004261046401330, -0.811975077456125850, -0.811945891835912810, -0.811916704185835060, -0.811887514505965410, -0.811858322796377040, -0.811829129057143000, -0.811799933288335440, +-0.811770735490028650, -0.811741535662295010, -0.811712333805207460, -0.811683129918839170, -0.811653924003262970, -0.811624716058552020, -0.811595506084778820, -0.811566294082017300, +-0.811537080050340090, -0.811507863989820110, -0.811478645900530430, -0.811449425782544310, -0.811420203635934480, -0.811390979460774210, -0.811361753257135890, -0.811332525025093790, +-0.811303294764720410, -0.811274062476088690, -0.811244828159271790, -0.811215591814342880, -0.811186353441375130, -0.811157113040440800, -0.811127870611614290, -0.811098626154968080, +-0.811069379670575240, -0.811040131158509040, -0.811010880618842410, -0.810981628051648640, -0.810952373457000890, -0.810923116834971540, -0.810893858185635090, -0.810864597509063810, +-0.810835334805331100, -0.810806070074510110, -0.810776803316673900, -0.810747534531895630, -0.810718263720248130, -0.810688990881805350, -0.810659716016640220, -0.810630439124825690, +-0.810601160206435130, -0.810571879261541730, -0.810542596290218520, -0.810513311292538900, -0.810484024268575910, -0.810454735218402390, -0.810425444142092610, -0.810396151039719070, +-0.810366855911355270, -0.810337558757074360, -0.810308259576949520, -0.810278958371053460, -0.810249655139460570, -0.810220349882243450, -0.810191042599475610, -0.810161733291230090, +-0.810132421957580170, -0.810103108598599240, -0.810073793214360570, -0.810044475804937440, -0.810015156370402560, -0.809985834910830320, -0.809956511426293550, -0.809927185916865410, +-0.809897858382619300, -0.809868528823628590, -0.809839197239966560, -0.809809863631706040, -0.809780527998921310, -0.809751190341685300, -0.809721850660071300, -0.809692508954152790, +-0.809663165224002830, -0.809633819469695040, -0.809604471691302670, -0.809575121888898690, -0.809545770062557350, -0.809516416212351600, -0.809487060338354820, -0.809457702440640410, +-0.809428342519281640, -0.809398980574352110, -0.809369616605924550, -0.809340250614073550, -0.809310882598871850, -0.809281512560392930, -0.809252140498710300, -0.809222766413897340, +-0.809193390306027440, -0.809164012175173970, -0.809134632021410010, -0.809105249844810030, -0.809075865645446870, -0.809046479423394030, -0.809017091178725110, -0.808987700911513400, +-0.808958308621832380, -0.808928914309755110, -0.808899517975356090, -0.808870119618708250, -0.808840719239885100, -0.808811316838960240, -0.808781912416006940, -0.808752505971099040, +-0.808723097504309710, -0.808693687015712760, -0.808664274505381030, -0.808634859973389130, -0.808605443419810000, -0.808576024844717360, -0.808546604248184700, -0.808517181630285410, +-0.808487756991092650, -0.808458330330681150, -0.808428901649123730, -0.808399470946494000, -0.808370038222865680, -0.808340603478312270, -0.808311166712907370, -0.808281727926724480, +-0.808252287119837320, -0.808222844292318940, -0.808193399444243840, -0.808163952575685410, -0.808134503686717020, -0.808105052777412400, -0.808075599847845050, -0.808046144898088790, +-0.808016687928216680, -0.807987228938303330, -0.807957767928421890, -0.807928304898646090, -0.807898839849049420, -0.807869372779705720, -0.807839903690688590, -0.807810432582071640, +-0.807780959453928250, -0.807751484306332810, -0.807722007139358710, -0.807692527953079660, -0.807663046747569170, -0.807633563522901170, -0.807604078279149150, -0.807574591016386510, +-0.807545101734687960, -0.807515610434126560, -0.807486117114776140, -0.807456621776710400, -0.807427124420003190, -0.807397625044728120, -0.807368123650959000, -0.807338620238769120, +-0.807309114808233090, -0.807279607359424390, -0.807250097892416530, -0.807220586407283560, -0.807191072904098970, -0.807161557382936820, -0.807132039843870270, -0.807102520286974160, +-0.807072998712321630, -0.807043475119986640, -0.807013949510043020, -0.806984421882564470, -0.806954892237624950, -0.806925360575298070, -0.806895826895657860, -0.806866291198777620, +-0.806836753484732050, -0.806807213753594770, -0.806777672005439260, -0.806748128240339700, -0.806718582458369800, -0.806689034659602840, -0.806659484844113870, -0.806629933011976270, +-0.806600379163263770, -0.806570823298050300, -0.806541265416409690, -0.806511705518416110, -0.806482143604143160, -0.806452579673664790, -0.806423013727054610, -0.806393445764387320, +-0.806363875785736430, -0.806334303791175770, -0.806304729780779490, -0.806275153754621330, -0.806245575712775220, -0.806215995655314770, -0.806186413582314800, -0.806156829493848810, +-0.806127243389990640, -0.806097655270814450, -0.806068065136394170, -0.806038472986803640, -0.806008878822117030, -0.805979282642407590, -0.805949684447750500, -0.805920084238219260, +-0.805890482013887690, -0.805860877774830060, -0.805831271521120110, -0.805801663252832090, -0.805772052970039290, -0.805742440672816970, -0.805712826361238420, -0.805683210035377910, +-0.805653591695309370, -0.805623971341106860, -0.805594348972844430, -0.805564724590596030, -0.805535098194435360, -0.805505469784437490, -0.805475839360675900, -0.805446206923224770, +-0.805416572472158030, -0.805386936007549960, -0.805357297529474490, -0.805327657038005350, -0.805298014533217480, -0.805268370015184590, -0.805238723483980840, -0.805209074939680190, +-0.805179424382356900, -0.805149771812085020, -0.805120117228938730, -0.805090460632992170, -0.805060802024318960, -0.805031141402994250, -0.805001478769091670, -0.804971814122685370, +-0.804942147463849510, -0.804912478792658370, -0.804882808109185440, -0.804853135413506000, -0.804823460705693880, -0.804793783985822910, -0.804764105253967580, -0.804734424510201940, +-0.804704741754600270, -0.804675056987236740, -0.804645370208185610, -0.804615681417520490, -0.804585990615316660, -0.804556297801647950, -0.804526602976588400, -0.804496906140212410, +-0.804467207292594130, -0.804437506433807850, -0.804407803563927160, -0.804378098683027560, -0.804348391791182780, -0.804318682888466970, -0.804288971974954530, -0.804259259050719490, +-0.804229544115836470, -0.804199827170379520, -0.804170108214422470, -0.804140387248040710, -0.804110664271307950, -0.804080939284298470, -0.804051212287086760, -0.804021483279746980, +-0.803991752262353420, -0.803962019234980010, -0.803932284197702130, -0.803902547150593500, -0.803872808093728410, -0.803843067027181450, -0.803813323951026780, -0.803783578865338690, +-0.803753831770191770, -0.803724082665659760, -0.803694331551818020, -0.803664578428740390, -0.803634823296501380, -0.803605066155175350, -0.803575307004836590, -0.803545545845559590, +-0.803515782677418300, -0.803486017500487870, -0.803456250314842580, -0.803426481120556590, -0.803396709917704400, -0.803366936706360390, -0.803337161486599170, -0.803307384258494910, +-0.803277605022122200, -0.803247823777555100, -0.803218040524868780, -0.803188255264137400, -0.803158467995435440, -0.803128678718837310, -0.803098887434417490, -0.803069094142249920, +-0.803039298842410100, -0.803009501534972080, -0.802979702220010250, -0.802949900897599210, -0.802920097567813460, -0.802890292230727390, -0.802860484886415590, -0.802830675534952580, +-0.802800864176412390, -0.802771050810870520, -0.802741235438401040, -0.802711418059078530, -0.802681598672977390, -0.802651777280172340, -0.802621953880737760, -0.802592128474747810, +-0.802562301062278110, -0.802532471643402580, -0.802502640218195950, -0.802472806786732720, -0.802442971349087380, -0.802413133905334640, -0.802383294455549120, -0.802353452999804760, +-0.802323609538177380, -0.802293764070740930, -0.802263916597570130, -0.802234067118739460, -0.802204215634323650, -0.802174362144397300, -0.802144506649034470, -0.802114649148310990, +-0.802084789642300790, -0.802054928131078700, -0.802025064614719340, -0.801995199093297200, -0.801965331566887100, -0.801935462035563650, -0.801905590499401020, -0.801875716958475040, +-0.801845841412859640, -0.801815963862629650, -0.801786084307859800, -0.801756202748624800, -0.801726319184999260, -0.801696433617057340, -0.801666546044874860, -0.801636656468526000, +-0.801606764888085580, -0.801576871303628200, -0.801546975715228700, -0.801517078122961690, -0.801487178526901990, -0.801457276927124320, -0.801427373323702950, -0.801397467716713720, +-0.801367560106230780, -0.801337650492328970, -0.801307738875083000, -0.801277825254567700, -0.801247909630857350, -0.801217992004027660, -0.801188072374153130, -0.801158150741308250, +-0.801128227105568080, -0.801098301467007450, -0.801068373825700950, -0.801038444181723430, -0.801008512535149930, -0.800978578886054620, -0.800948643234513310, -0.800918705580600410, +-0.800888765924390840, -0.800858824265959330, -0.800828880605380710, -0.800798934942729800, -0.800768987278081210, -0.800739037611510550, -0.800709085943092310, -0.800679132272901440, +-0.800649176601012650, -0.800619218927500990, -0.800589259252441290, -0.800559297575908380, -0.800529333897976650, -0.800499368218722250, -0.800469400538219360, -0.800439430856543010, +-0.800409459173768050, -0.800379485489969400, -0.800349509805222010, -0.800319532119600390, -0.800289552433180450, -0.800259570746036710, -0.800229587058243990, -0.800199601369877220, +-0.800169613681011470, -0.800139623991721780, -0.800109632302082980, -0.800079638612169570, -0.800049642922057600, -0.800019645231821560, -0.799989645541536290, -0.799959643851277050, +-0.799929640161118670, -0.799899634471136100, -0.799869626781403940, -0.799839617091998250, -0.799809605402993620, -0.799779591714464890, -0.799749576026487110, -0.799719558339135550, +-0.799689538652484930, -0.799659516966610530, -0.799629493281587390, -0.799599467597489900, -0.799569439914394330, -0.799539410232375180, -0.799509378551507500, -0.799479344871866340, +-0.799449309193526860, -0.799419271516563560, -0.799389231841052590, -0.799359190167068470, -0.799329146494686450, -0.799299100823981590, -0.799269053155028940, -0.799239003487903670, +-0.799208951822680920, -0.799178898159435770, -0.799148842498242810, -0.799118784839178310, -0.799088725182316880, -0.799058663527733580, -0.799028599875503680, -0.798998534225702220, +-0.798968466578403920, -0.798938396933684960, -0.798908325291620040, -0.798878251652284320, -0.798848176015752980, -0.798818098382101160, -0.798788018751404040, -0.798757937123736990, +-0.798727853499175080, -0.798697767877792900, -0.798667680259666950, -0.798637590644871720, -0.798607499033482600, -0.798577405425574650, -0.798547309821223240, -0.798517212220503540, +-0.798487112623490260, -0.798457011030259680, -0.798426907440886620, -0.798396801855446370, -0.798366694274013970, -0.798336584696664910, -0.798306473123474470, -0.798276359554517700, +-0.798246243989869650, -0.798216126429606380, -0.798186006873802920, -0.798155885322534340, -0.798125761775876130, -0.798095636233903450, -0.798065508696691680, -0.798035379164315660, +-0.798005247636851660, -0.797975114114374610, -0.797944978596959680, -0.797914841084682360, -0.797884701577618040, -0.797854560075841770, -0.797824416579429260, -0.797794271088455690, +-0.797764123602995760, -0.797733974123126190, -0.797703822648921700, -0.797673669180457570, -0.797643513717809280, -0.797613356261052340, -0.797583196810261350, -0.797553035365512920, +-0.797522871926881870, -0.797492706494443700, -0.797462539068273690, -0.797432369648447440, -0.797402198235040220, -0.797372024828127410, -0.797341849427784630, -0.797311672034086700, +-0.797281492647110120, -0.797251311266929830, -0.797221127893621210, -0.797190942527259860, -0.797160755167921060, -0.797130565815679870, -0.797100374470612770, -0.797070181132794710, +-0.797039985802301290, -0.797009788479207890, -0.796979589163589910, -0.796949387855523160, -0.796919184555082700, -0.796888979262344480, -0.796858771977383200, -0.796828562700275470, +-0.796798351431096450, -0.796768138169921420, -0.796737922916826100, -0.796707705671885980, -0.796677486435176660, -0.796647265206772980, -0.796617041986751760, -0.796586816775187940, +-0.796556589572157030, -0.796526360377734610, -0.796496129191996300, -0.796465896015017720, -0.796435660846874340, -0.796405423687641330, -0.796375184537395310, -0.796344943396211310, +-0.796314700264164950, -0.796284455141331840, -0.796254208027787570, -0.796223958923607760, -0.796193707828867560, -0.796163454743643690, -0.796133199668011100, -0.796102942602045500, +-0.796072683545822500, -0.796042422499417920, -0.796012159462907260, -0.795981894436366130, -0.795951627419870240, -0.795921358413494870, -0.795891087417316510, -0.795860814431410550, +-0.795830539455852470, -0.795800262490718110, -0.795769983536083080, -0.795739702592022540, -0.795709419658613190, -0.795679134735930440, -0.795648847824049770, -0.795618558923047000, +-0.795588268032997760, -0.795557975153977970, -0.795527680286063130, -0.795497383429329190, -0.795467084583851290, -0.795436783749706060, -0.795406480926968970, -0.795376176115715650, +-0.795345869316021910, -0.795315560527963480, -0.795285249751615630, -0.795254936987055180, -0.795224622234357410, -0.795194305493598150, -0.795163986764853000, -0.795133666048197910, +-0.795103343343708690, -0.795073018651461070, -0.795042691971530990, -0.795012363303993610, -0.794982032648925750, -0.794951700006402920, -0.794921365376500820, -0.794891028759295290, +-0.794860690154862160, -0.794830349563277360, -0.794800006984616170, -0.794769662418955410, -0.794739315866370590, -0.794708967326937410, -0.794678616800731820, -0.794648264287829750, +-0.794617909788306930, -0.794587553302239400, -0.794557194829702440, -0.794526834370772980, -0.794496471925526530, -0.794466107494038900, -0.794435741076385930, -0.794405372672643550, +-0.794375002282887820, -0.794344629907194120, -0.794314255545639280, -0.794283879198298790, -0.794253500865248710, -0.794223120546564740, -0.794192738242323060, -0.794162353952599490, +-0.794131967677470070, -0.794101579417010760, -0.794071189171296930, -0.794040796940405640, -0.794010402724412370, -0.793980006523393070, -0.793949608337423780, -0.793919208166580570, +-0.793888806010938700, -0.793858401870575330, -0.793827995745565950, -0.793797587635986620, -0.793767177541913280, -0.793736765463422090, -0.793706351400588870, -0.793675935353489900, +-0.793645517322201010, -0.793615097306797800, -0.793584675307357430, -0.793554251323955300, -0.793523825356667540, -0.793493397405570230, -0.793462967470739520, -0.793432535552250790, +-0.793402101650181210, -0.793371665764606380, -0.793341227895602460, -0.793310788043245510, -0.793280346207611450, -0.793249902388776570, -0.793219456586817030, -0.793189008801808760, +-0.793158559033827370, -0.793128107282950250, -0.793097653549252770, -0.793067197832811210, -0.793036740133701620, -0.793006280452000170, -0.792975818787783120, -0.792945355141125850, +-0.792914889512105870, -0.792884421900798550, -0.792853952307280290, -0.792823480731627010, -0.792793007173915100, -0.792762531634220720, -0.792732054112619930, -0.792701574609188440, +-0.792671093124003630, -0.792640609657141120, -0.792610124208676940, -0.792579636778687590, -0.792549147367249130, -0.792518655974437710, -0.792488162600329170, -0.792457667245000770, +-0.792427169908528240, -0.792396670590987730, -0.792366169292455510, -0.792335666013007980, -0.792305160752721170, -0.792274653511671590, -0.792244144289934730, -0.792213633087588080, +-0.792183119904707360, -0.792152604741368730, -0.792122087597648680, -0.792091568473623500, -0.792061047369369220, -0.792030524284961900, -0.791999999220478810, -0.791969472175995670, +-0.791938943151588860, -0.791908412147334760, -0.791877879163309650, -0.791847344199589690, -0.791816807256251480, -0.791786268333371180, -0.791755727431024740, -0.791725184549289530, +-0.791694639688241280, -0.791664092847956470, -0.791633544028511490, -0.791602993229982620, -0.791572440452445680, -0.791541885695978160, -0.791511328960656010, -0.791480770246555500, +-0.791450209553753000, -0.791419646882325020, -0.791389082232347940, -0.791358515603898250, -0.791327946997052110, -0.791297376411885580, -0.791266803848476250, -0.791236229306899850, +-0.791205652787232870, -0.791175074289551810, -0.791144493813933040, -0.791113911360453060, -0.791083326929187700, -0.791052740520214570, -0.791022152133609600, -0.790991561769449290, +-0.790960969427810020, -0.790930375108768400, -0.790899778812400810, -0.790869180538783740, -0.790838580287993140, -0.790807978060106720, -0.790777373855200310, -0.790746767673350500, +-0.790716159514633700, -0.790685549379126610, -0.790654937266905500, -0.790624323178046650, -0.790593707112627440, -0.790563089070724030, -0.790532469052412920, -0.790501847057770490, +-0.790471223086873560, -0.790440597139798640, -0.790409969216622100, -0.790379339317420100, -0.790348707442270370, -0.790318073591248840, -0.790287437764432110, -0.790256799961896790, +-0.790226160183719490, -0.790195518429976710, -0.790164874700744700, -0.790134228996100970, -0.790103581316121680, -0.790072931660883440, -0.790042280030462950, -0.790011626424936720, +-0.789980970844381350, -0.789950313288873660, -0.789919653758490050, -0.789888992253306890, -0.789858328773401790, -0.789827663318850790, -0.789796995889730620, -0.789766326486118110, +-0.789735655108089630, -0.789704981755721570, -0.789674306429091530, -0.789643629128275680, -0.789612949853350840, -0.789582268604393620, -0.789551585381480740, -0.789520900184688900, +-0.789490213014094720, -0.789459523869775140, -0.789428832751806090, -0.789398139660265620, -0.789367444595229670, -0.789336747556775190, -0.789306048544978880, -0.789275347559917350, +-0.789244644601667540, -0.789213939670305510, -0.789183232765909180, -0.789152523888554840, -0.789121813038319080, -0.789091100215278840, -0.789060385419510850, -0.789029668651091920, +-0.788998949910098780, -0.788968229196607810, -0.788937506510696720, -0.788906781852441900, -0.788876055221920060, -0.788845326619208140, -0.788814596044382870, -0.788783863497521160, +-0.788753128978699200, -0.788722392487995030, -0.788691654025484800, -0.788660913591245460, -0.788630171185353830, -0.788599426807886860, -0.788568680458921260, -0.788537932138533960, +-0.788507181846801240, -0.788476429583801150, -0.788445675349609960, -0.788414919144304620, -0.788384160967962040, -0.788353400820658970, -0.788322638702472430, -0.788291874613478720, +-0.788261108553755860, -0.788230340523380260, -0.788199570522428840, -0.788168798550978430, -0.788138024609106090, -0.788107248696888640, -0.788076470814403020, -0.788045690961726280, +-0.788014909138934790, -0.787984125346106510, -0.787953339583318040, -0.787922551850646080, -0.787891762148167810, -0.787860970475960150, -0.787830176834099500, -0.787799381222663910, +-0.787768583641729970, -0.787737784091374520, -0.787706982571674600, -0.787676179082707150, -0.787645373624549340, -0.787614566197278100, -0.787583756800970370, -0.787552945435702870, +-0.787522132101553420, -0.787491316798598630, -0.787460499526915550, -0.787429680286581220, -0.787398859077672820, -0.787368035900267160, -0.787337210754440850, -0.787306383640272060, +-0.787275554557837380, -0.787244723507213750, -0.787213890488478340, -0.787183055501708200, -0.787152218546980360, -0.787121379624372120, -0.787090538733959840, -0.787059695875821700, +-0.787028851050034280, -0.786998004256674880, -0.786967155495820300, -0.786936304767547950, -0.786905452071934740, -0.786874597409057520, -0.786843740778994220, -0.786812882181821550, +-0.786782021617616790, -0.786751159086456870, -0.786720294588419080, -0.786689428123580560, -0.786658559692018480, -0.786627689293809440, -0.786596816929031830, -0.786565942597762020, +-0.786535066300077410, -0.786504188036055150, -0.786473307805772400, -0.786442425609306440, -0.786411541446733750, -0.786380655318132840, -0.786349767223580300, -0.786318877163153300, +-0.786287985136929100, -0.786257091144984990, -0.786226195187398110, -0.786195297264245860, -0.786164397375605170, -0.786133495521553090, -0.786102591702167790, -0.786071685917525960, +-0.786040778167705010, -0.786009868452781980, -0.785978956772834360, -0.785948043127938760, -0.785917127518173660, -0.785886209943615690, -0.785855290404342210, -0.785824368900430500, +-0.785793445431957950, -0.785762519999001710, -0.785731592601639160, -0.785700663239947580, -0.785669731914003910, -0.785638798623886410, -0.785607863369671920, -0.785576926151437700, +-0.785545986969261260, -0.785515045823219850, -0.785484102713390750, -0.785453157639850910, -0.785422210602678690, -0.785391261601951050, -0.785360310637745140, -0.785329357710138450, +-0.785298402819208490, -0.785267445965032400, -0.785236487147687680, -0.785205526367251270, -0.785174563623801560, -0.785143598917415480, -0.785112632248170290, -0.785081663616143620, +-0.785050693021412730, -0.785019720464055220, -0.784988745944147800, -0.784957769461768980, -0.784926791016995810, -0.784895810609905650, -0.784864828240576020, -0.784833843909084280, +-0.784802857615507940, -0.784771869359924380, -0.784740879142410640, -0.784709886963045330, -0.784678892821905280, -0.784647896719067980, -0.784616898654610820, -0.784585898628611610, +-0.784554896641147530, -0.784523892692295720, -0.784492886782134690, -0.784461878910741480, -0.784430869078193480, -0.784399857284568400, -0.784368843529943630, -0.784337827814396760, +-0.784306810138005290, -0.784275790500846840, -0.784244768902998430, -0.784213745344538580, -0.784182719825544330, -0.784151692346093280, -0.784120662906263030, -0.784089631506131200, +-0.784058598145774610, -0.784027562825272200, -0.783996525544700780, -0.783965486304138090, -0.783934445103661730, -0.783903401943349180, -0.783872356823278160, -0.783841309743526170, +-0.783810260704171040, -0.783779209705289580, -0.783748156746960740, -0.783717101829261580, -0.783686044952269570, -0.783654986116062440, -0.783623925320717780, -0.783592862566313440, +-0.783561797852926230, -0.783530731180635210, -0.783499662549517310, -0.783468591959650350, -0.783437519411111840, -0.783406444903979480, -0.783375368438331110, -0.783344290014244220, +-0.783313209631796070, -0.783282127291065500, -0.783251042992129550, -0.783219956735066060, -0.783188868519952620, -0.783157778346867060, -0.783126686215886990, -0.783095592127089790, +-0.783064496080554060, -0.783033398076357080, -0.783002298114576560, -0.782971196195290430, -0.782940092318576200, -0.782908986484511790, -0.782877878693174930, -0.782846768944642780, +-0.782815657238994270, -0.782784543576306670, -0.782753427956657590, -0.782722310380125070, -0.782691190846786730, -0.782660069356720390, -0.782628945910003320, -0.782597820506714450, +-0.782566693146931060, -0.782535563830730860, -0.782504432558191800, -0.782473299329391690, -0.782442164144408260, -0.782411027003319440, -0.782379887906203160, -0.782348746853136490, +-0.782317603844198570, -0.782286458879466570, -0.782255311959018430, -0.782224163082932080, -0.782193012251285350, -0.782161859464155400, -0.782130704721621490, -0.782099548023760690, +-0.782068389370651150, -0.782037228762370470, -0.782006066198996930, -0.781974901680608010, -0.781943735207282000, -0.781912566779096600, -0.781881396396129190, -0.781850224058458940, +-0.781819049766163010, -0.781787873519319550, -0.781756695318006400, -0.781725515162301490, -0.781694333052282750, -0.781663148988027690, -0.781631962969615230, -0.781600774997122880, +-0.781569585070628680, -0.781538393190210460, -0.781507199355946260, -0.781476003567914130, -0.781444805826191800, -0.781413606130857090, -0.781382404481988810, -0.781351200879664590, +-0.781319995323962350, -0.781288787814960140, -0.781257578352735900, -0.781226366937367800, -0.781195153568933210, -0.781163938247511180, -0.781132720973179430, -0.781101501746015890, +-0.781070280566098510, -0.781039057433505430, -0.781007832348314720, -0.780976605310604530, -0.780945376320452130, -0.780914145377936910, -0.780882912483136350, -0.780851677636128510, +-0.780820440836991430, -0.780789202085803270, -0.780757961382642090, -0.780726718727585480, -0.780695474120712610, -0.780664227562100970, -0.780632979051828820, -0.780601728589974340, +-0.780570476176615460, -0.780539221811830330, -0.780507965495697230, -0.780476707228294100, -0.780445447009698760, -0.780414184839990370, -0.780382920719246420, -0.780351654647545300, +-0.780320386624964950, -0.780289116651583630, -0.780257844727478940, -0.780226570852730280, -0.780195295027415140, -0.780164017251611770, -0.780132737525398360, -0.780101455848853150, +-0.780070172222054210, -0.780038886645079920, -0.780007599118008320, -0.779976309640917240, -0.779945018213885950, -0.779913724836992060, -0.779882429510313950, -0.779851132233929660, +-0.779819833007917570, -0.779788531832355410, -0.779757228707322450, -0.779725923632896390, -0.779694616609155510, -0.779663307636178080, -0.779631996714042490, -0.779600683842826770, +-0.779569369022609430, -0.779538052253468620, -0.779506733535482170, -0.779475412868729340, -0.779444090253288090, -0.779412765689236560, -0.779381439176653150, -0.779350110715616110, +-0.779318780306203830, -0.779287447948494030, -0.779256113642566190, -0.779224777388497940, -0.779193439186367850, -0.779162099036254220, -0.779130756938235300, -0.779099412892389380, +-0.779068066898795040, -0.779036718957530020, -0.779005369068673680, -0.778974017232303860, -0.778942663448499050, -0.778911307717337630, -0.778879950038897870, -0.778848590413258270, +-0.778817228840496640, -0.778785865320692490, -0.778754499853923750, -0.778723132440268690, -0.778691763079805810, -0.778660391772613480, -0.778629018518770200, -0.778597643318354460, +-0.778566266171444420, -0.778534887078118350, -0.778503506038455530, -0.778472123052533990, -0.778440738120432020, -0.778409351242228320, -0.778377962418001280, -0.778346571647828610, +-0.778315178931790250, -0.778283784269963810, -0.778252387662427990, -0.778220989109261190, -0.778189588610541880, -0.778158186166348690, -0.778126781776759870, -0.778095375441854250, +-0.778063967161709560, -0.778032556936405490, -0.778001144766020110, -0.777969730650631800, -0.777938314590319150, -0.777906896585160770, -0.777875476635234600, -0.777844054740620240, +-0.777812630901395850, -0.777781205117639820, -0.777749777389430740, -0.777718347716847220, -0.777686916099967870, -0.777655482538871180, -0.777624047033635860, -0.777592609584339840, +-0.777561170191062740, -0.777529728853882830, -0.777498285572878590, -0.777466840348128630, -0.777435393179711550, -0.777403944067706080, -0.777372493012190020, -0.777341040013243450, +-0.777309585070944160, -0.777278128185371010, -0.777246669356602470, -0.777215208584717270, -0.777183745869794000, -0.777152281211911490, -0.777120814611147680, -0.777089346067582290, +-0.777057875581293580, -0.777026403152360270, -0.776994928780860850, -0.776963452466874150, -0.776931974210478880, -0.776900494011752980, -0.776869011870776500, -0.776837527787627490, +-0.776806041762384660, -0.776774553795126720, -0.776743063885932280, -0.776711572034880280, -0.776680078242049430, -0.776648582507518340, -0.776617084831365160, -0.776585585213669830, +-0.776554083654510620, -0.776522580153966140, -0.776491074712115200, -0.776459567329036650, -0.776428058004808520, -0.776396546739510860, -0.776365033533221840, -0.776333518386020270, +-0.776302001297984880, -0.776270482269194480, -0.776238961299727800, -0.776207438389663770, -0.776175913539081220, -0.776144386748058190, -0.776112858016674840, -0.776081327345009340, +-0.776049794733140510, -0.776018260181147280, -0.775986723689108260, -0.775955185257101940, -0.775923644885208260, -0.775892102573505380, -0.775860558322072240, -0.775829012130987760, +-0.775797464000330780, -0.775765913930180020, -0.775734361920614620, -0.775702807971713200, -0.775671252083554250, -0.775639694256217820, -0.775608134489782050, -0.775576572784325900, +-0.775545009139928410, -0.775513443556668290, -0.775481876034624710, -0.775450306573875700, -0.775418735174501660, -0.775387161836580740, -0.775355586560191880, -0.775324009345414010, +-0.775292430192326190, -0.775260849101007230, -0.775229266071536190, -0.775197681103991450, -0.775166094198453060, -0.775134505354999390, -0.775102914573709500, -0.775071321854662320, +-0.775039727197936790, -0.775008130603611960, -0.774976532071766310, -0.774944931602479790, -0.774913329195831000, -0.774881724851898880, -0.774850118570762470, -0.774818510352500710, +-0.774786900197192760, -0.774755288104917560, -0.774723674075753490, -0.774692058109780810, -0.774660440207078030, -0.774628820367724070, -0.774597198591798100, -0.774565574879379160, +-0.774533949230546300, -0.774502321645378020, -0.774470692123954470, -0.774439060666354150, -0.774407427272656210, -0.774375791942939710, -0.774344154677283680, -0.774312515475767290, +-0.774280874338469590, -0.774249231265469740, -0.774217586256846340, -0.774185939312679430, -0.774154290433047620, -0.774122639618030180, -0.774090986867706050, -0.774059332182154610, +-0.774027675561454130, -0.773996017005685100, -0.773964356514926010, -0.773932694089256020, -0.773901029728754300, -0.773869363433499990, -0.773837695203572260, -0.773806025039050380, +-0.773774352940013400, -0.773742678906539920, -0.773711002938710310, -0.773679325036603190, -0.773647645200297830, -0.773615963429873380, -0.773584279725408890, -0.773552594086983850, +-0.773520906514676640, -0.773489217008567760, -0.773457525568735820, -0.773425832195260180, -0.773394136888219790, -0.773362439647694130, -0.773330740473762380, -0.773299039366503790, +-0.773267336325997090, -0.773235631352322540, -0.773203924445558850, -0.773172215605785530, -0.773140504833081500, -0.773108792127526370, -0.773077077489199070, -0.773045360918178660, +-0.773013642414545290, -0.772981921978377890, -0.772950199609755750, -0.772918475308758010, -0.772886749075464060, -0.772855020909953390, -0.772823290812305050, -0.772791558782597980, +-0.772759824820912430, -0.772728088927327470, -0.772696351101922250, -0.772664611344776150, -0.772632869655968560, -0.772601126035578730, -0.772569380483685510, -0.772537633000369480, +-0.772505883585709260, -0.772474132239784450, -0.772442378962674200, -0.772410623754458130, -0.772378866615215380, -0.772347107545025560, -0.772315346543967940, -0.772283583612121350, +-0.772251818749566390, -0.772220051956381880, -0.772188283232647210, -0.772156512578441870, -0.772124739993845230, -0.772092965478936240, -0.772061189033795390, -0.772029410658501500, +-0.771997630353134180, -0.771965848117772690, -0.771934063952496640, -0.771902277857385410, -0.771870489832518380, -0.771838699877975270, -0.771806907993834780, -0.771775114180177630, +-0.771743318437082660, -0.771711520764629340, -0.771679721162897290, -0.771647919631966000, -0.771616116171914830, -0.771584310782822860, -0.771552503464770560, -0.771520694217837090, +-0.771488883042101840, -0.771457069937644400, -0.771425254904544390, -0.771393437942881070, -0.771361619052734260, -0.771329798234182800, -0.771297975487307500, -0.771266150812187190, +-0.771234324208901480, -0.771202495677529960, -0.771170665218152250, -0.771138832830847830, -0.771106998515695750, -0.771075162272776840, -0.771043324102169910, -0.771011484003954690, +-0.770979641978210780, -0.770947798025017780, -0.770915952144455300, -0.770884104336602930, -0.770852254601539720, -0.770820402939346390, -0.770788549350102100, -0.770756693833886450, +-0.770724836390779040, -0.770692977020859590, -0.770661115724207700, -0.770629252500902420, -0.770597387351024570, -0.770565520274653190, -0.770533651271868130, -0.770501780342748850, +-0.770469907487375210, -0.770438032705826780, -0.770406155998183180, -0.770374277364524240, -0.770342396804929000, -0.770310514319478390, -0.770278629908251580, -0.770246743571328050, +-0.770214855308787750, -0.770182965120710270, -0.770151073007174780, -0.770119178968262210, -0.770087283004051710, -0.770055385114623010, -0.770023485300055820, -0.769991583560429960, +-0.769959679895825030, -0.769927774306321090, -0.769895866791997510, -0.769863957352933780, -0.769832045989210730, -0.769800132700907640, -0.769768217488104090, -0.769736300350880030, +-0.769704381289315290, -0.769672460303489570, -0.769640537393482040, -0.769608612559373850, -0.769576685801244050, -0.769544757119172580, -0.769512826513239270, -0.769480893983523820, +-0.769448959530106170, -0.769417023153066040, -0.769385084852482800, -0.769353144628437510, -0.769321202481009330, -0.769289258410278070, -0.769257312416323780, -0.769225364499226070, +-0.769193414659065100, -0.769161462895919910, -0.769129509209871660, -0.769097553600999630, -0.769065596069383740, -0.769033636615103930, -0.769001675238239920, -0.768969711938871760, +-0.768937746717079370, -0.768905779572941930, -0.768873810506540690, -0.768841839517954930, -0.768809866607264470, -0.768777891774549470, -0.768745915019889760, -0.768713936343365160, +-0.768681955745055160, -0.768649973225040920, -0.768617988783401710, -0.768586002420217460, -0.768554014135568230, -0.768522023929534060, -0.768490031802194770, -0.768458037753630310, +-0.768426041783920820, -0.768394043893145700, -0.768362044081386090, -0.768330042348721260, -0.768298038695231390, -0.768266033120996390, -0.768234025626096330, -0.768202016210610570, +-0.768170004874620390, -0.768137991618205170, -0.768105976441445070, -0.768073959344419910, -0.768041940327209960, -0.768009919389895050, -0.767977896532555440, -0.767945871755270960, +-0.767913845058121320, -0.767881816441187690, -0.767849785904549440, -0.767817753448286730, -0.767785719072479610, -0.767753682777208240, -0.767721644562552760, -0.767689604428592460, +-0.767657562375408720, -0.767625518403081130, -0.767593472511689750, -0.767561424701314610, -0.767529374972035990, -0.767497323323933940, -0.767465269757088510, -0.767433214271579400, +-0.767401156867487780, -0.767369097544893240, -0.767337036303876060, -0.767304973144516180, -0.767272908066893970, -0.767240841071089360, -0.767208772157182190, -0.767176701325253620, +-0.767144628575383350, -0.767112553907651430, -0.767080477322138130, -0.767048398818923730, -0.767016318398088260, -0.766984236059712000, -0.766952151803874550, -0.766920065630657400, +-0.766887977540139930, -0.766855887532402640, -0.766823795607525560, -0.766791701765589080, -0.766759606006673260, -0.766727508330857900, -0.766695408738224280, -0.766663307228852230, +-0.766631203802821790, -0.766599098460213460, -0.766566991201107380, -0.766534882025583730, -0.766502770933722990, -0.766470657925605200, -0.766438543001310310, -0.766406426160919580, +-0.766374307404512730, -0.766342186732170140, -0.766310064143972180, -0.766277939639998910, -0.766245813220330360, -0.766213684885047820, -0.766181554634230990, -0.766149422467960360, +-0.766117288386316100, -0.766085152389378690, -0.766053014477228290, -0.766020874649945500, -0.765988732907610380, -0.765956589250302970, -0.765924443678104530, -0.765892296191095110, +-0.765860146789354880, -0.765827995472964320, -0.765795842242003810, -0.765763687096553620, -0.765731530036693700, -0.765699371062505520, -0.765667210174068800, -0.765635047371464150, +-0.765602882654771940, -0.765570716024072450, -0.765538547479446160, -0.765506377020973570, -0.765474204648734390, -0.765442030362810220, -0.765409854163281110, -0.765377676050227330, +-0.765345496023729370, -0.765313314083867600, -0.765281130230722530, -0.765248944464374190, -0.765216756784903970, -0.765184567192391810, -0.765152375686918300, -0.765120182268563930, +-0.765087986937408980, -0.765055789693534050, -0.765023590537019740, -0.764991389467945870, -0.764959186486394050, -0.764926981592444320, -0.764894774786177070, -0.764862566067672890, +-0.764830355437012390, -0.764798142894275950, -0.764765928439543500, -0.764733712072896870, -0.764701493794415990, -0.764669273604181350, -0.764637051502273460, -0.764604827488773010, +-0.764572601563760500, -0.764540373727316420, -0.764508143979521490, -0.764475912320455640, -0.764443678750200470, -0.764411443268836250, -0.764379205876443260, -0.764346966573102420, +-0.764314725358894000, -0.764282482233898270, -0.764250237198196960, -0.764217990251869980, -0.764185741394998060, -0.764153490627661800, -0.764121237949941800, -0.764088983361918660, +-0.764056726863673100, -0.764024468455285710, -0.763992208136836660, -0.763959945908407550, -0.763927681770078640, -0.763895415721930540, -0.763863147764043850, -0.763830877896499280, +-0.763798606119377550, -0.763766332432758710, -0.763734056836724680, -0.763701779331355410, -0.763669499916731830, -0.763637218592934320, -0.763604935360043920, -0.763572650218141140, +-0.763540363167306670, -0.763508074207620790, -0.763475783339165210, -0.763443490562020210, -0.763411195876266600, -0.763378899281984880, -0.763346600779255870, -0.763314300368160500, +-0.763281998048778720, -0.763249693821192570, -0.763217387685482080, -0.763185079641728210, -0.763152769690011560, -0.763120457830413050, -0.763088144063013400, -0.763055828387893430, +-0.763023510805133200, -0.762991191314814850, -0.762958869917018560, -0.762926546611825020, -0.762894221399315060, -0.762861894279569630, -0.762829565252669540, -0.762797234318694840, +-0.762764901477727690, -0.762732566729848240, -0.762700230075137430, -0.762667891513675980, -0.762635551045544810, -0.762603208670824760, -0.762570864389596760, -0.762538518201941630, +-0.762506170107939530, -0.762473820107672620, -0.762441468201221160, -0.762409114388665990, -0.762376758670088030, -0.762344401045568220, -0.762312041515186830, -0.762279680079025910, +-0.762247316737165730, -0.762214951489687320, -0.762182584336671520, -0.762150215278199260, -0.762117844314351480, -0.762085471445209110, -0.762053096670852970, -0.762020719991363560, +-0.761988341406822920, -0.761955960917311440, -0.761923578522910150, -0.761891194223699770, -0.761858808019761470, -0.761826419911175500, -0.761794029898024140, -0.761761637980387650, +-0.761729244158347200, -0.761696848431983490, -0.761664450801377680, -0.761632051266610820, -0.761599649827763740, -0.761567246484917580, -0.761534841238152740, -0.761502434087551360, +-0.761470025033193940, -0.761437614075161310, -0.761405201213534830, -0.761372786448395230, -0.761340369779823670, -0.761307951207900620, -0.761275530732708370, -0.761243108354327180, +-0.761210684072838320, -0.761178257888322610, -0.761145829800861320, -0.761113399810535500, -0.761080967917426190, -0.761048534121613770, -0.761016098423180630, -0.760983660822207360, +-0.760951221318774800, -0.760918779912964300, -0.760886336604856720, -0.760853891394533410, -0.760821444282074770, -0.760788995267563050, -0.760756544351078870, -0.760724091532703370, +-0.760691636812517610, -0.760659180190602750, -0.760626721667039930, -0.760594261241910320, -0.760561798915295070, -0.760529334687274680, -0.760496868557931640, -0.760464400527346320, +-0.760431930595600100, -0.760399458762773930, -0.760366985028949280, -0.760334509394206440, -0.760302031858627990, -0.760269552422294440, -0.760237071085286930, -0.760204587847686850, +-0.760172102709575250, -0.760139615671033500, -0.760107126732142650, -0.760074635892983850, -0.760042143153638050, -0.760009648514187400, -0.759977151974712610, -0.759944653535294950, +-0.759912153196015680, -0.759879650956956090, -0.759847146818196650, -0.759814640779819970, -0.759782132841906770, -0.759749623004538190, -0.759717111267795510, -0.759684597631760110, +-0.759652082096513140, -0.759619564662136090, -0.759587045328710020, -0.759554524096315850, -0.759522000965035860, -0.759489475934950970, -0.759456949006142250, -0.759424420178691270, +-0.759391889452679210, -0.759359356828187450, -0.759326822305296690, -0.759294285884089430, -0.759261747564646480, -0.759229207347049240, -0.759196665231378850, -0.759164121217716810, +-0.759131575306144500, -0.759099027496743290, -0.759066477789593910, -0.759033926184778940, -0.759001372682378990, -0.758968817282475780, -0.758936259985150570, -0.758903700790484640, +-0.758871139698559350, -0.758838576709455760, -0.758806011823256240, -0.758773445040041740, -0.758740876359893620, -0.758708305782893390, -0.758675733309122300, -0.758643158938661850, +-0.758610582671593540, -0.758578004507998840, -0.758545424447958470, -0.758512842491555040, -0.758480258638869590, -0.758447672889983600, -0.758415085244978250, -0.758382495703935230, +-0.758349904266935490, -0.758317310934061520, -0.758284715705394240, -0.758252118581015160, -0.758219519561005860, -0.758186918645447740, -0.758154315834422280, -0.758121711128011080, +-0.758089104526295520, -0.758056496029356650, -0.758023885637277180, -0.757991273350137940, -0.757958659168020520, -0.757926043091006530, -0.757893425119177340, -0.757860805252614120, +-0.757828183491399350, -0.757795559835614090, -0.757762934285340030, -0.757730306840658670, -0.757697677501651400, -0.757665046268400030, -0.757632413140986060, -0.757599778119490970, +-0.757567141203995930, -0.757534502394583640, -0.757501861691335040, -0.757469219094331740, -0.757436574603655540, -0.757403928219387730, -0.757371279941610240, -0.757338629770403890, +-0.757305977705851620, -0.757273323748034350, -0.757240667897033810, -0.757208010152931490, -0.757175350515809310, -0.757142688985748660, -0.757110025562831250, -0.757077360247138230, +-0.757044693038752440, -0.757012023937754910, -0.756979352944227250, -0.756946680058251280, -0.756914005279908600, -0.756881328609280810, -0.756848650046449190, -0.756815969591496550, +-0.756783287244503940, -0.756750603005553190, -0.756717916874725890, -0.756685228852103760, -0.756652538937768630, -0.756619847131802080, -0.756587153434285950, -0.756554457845301400, +-0.756521760364931240, -0.756489060993256630, -0.756456359730359410, -0.756423656576321270, -0.756390951531224040, -0.756358244595148890, -0.756325535768178630, -0.756292825050394520, +-0.756260112441878410, -0.756227397942711880, -0.756194681552976980, -0.756161963272755420, -0.756129243102128920, -0.756096521041179190, -0.756063797089987720, -0.756031071248637330, +-0.755998343517209180, -0.755965613895785200, -0.755932882384447110, -0.755900148983276950, -0.755867413692355880, -0.755834676511766720, -0.755801937441590970, -0.755769196481910210, +-0.755736453632806620, -0.755703708894361890, -0.755670962266657750, -0.755638213749776360, -0.755605463343799300, -0.755572711048808190, -0.755539956864885730, -0.755507200792113420, +-0.755474442830573080, -0.755441682980346640, -0.755408921241516040, -0.755376157614163100, -0.755343392098369200, -0.755310624694217390, -0.755277855401789040, -0.755245084221165990, +-0.755212311152430260, -0.755179536195663800, -0.755146759350948440, -0.755113980618366210, -0.755081199997998500, -0.755048417489928350, -0.755015633094237030, -0.754982846811006800, +-0.754950058640319390, -0.754917268582256830, -0.754884476636901060, -0.754851682804333570, -0.754818887084637400, -0.754786089477894050, -0.754753289984185450, -0.754720488603593750, +-0.754687685336200680, -0.754654880182088480, -0.754622073141339000, -0.754589264214033720, -0.754556453400256010, -0.754523640700087040, -0.754490826113609070, -0.754458009640903930, +-0.754425191282053880, -0.754392371037140850, -0.754359548906246240, -0.754326724889453290, -0.754293898986843630, -0.754261071198499170, -0.754228241524502070, -0.754195409964934390, +-0.754162576519878170, -0.754129741189415450, -0.754096903973628390, -0.754064064872598580, -0.754031223886409090, -0.753998381015141610, -0.753965536258878080, -0.753932689617700770, +-0.753899841091691720, -0.753866990680932550, -0.753834138385506390, -0.753801284205494970, -0.753768428140980330, -0.753735570192044510, -0.753702710358769900, -0.753669848641238540, +-0.753636985039532360, -0.753604119553733850, -0.753571252183924510, -0.753538382930187490, -0.753505511792604610, -0.753472638771257920, -0.753439763866229680, -0.753406887077601950, +-0.753374008405457100, -0.753341127849876500, -0.753308245410943770, -0.753275361088740380, -0.753242474883348720, -0.753209586794850730, -0.753176696823328770, -0.753143804968865130, +-0.753110911231541950, -0.753078015611440940, -0.753045118108645490, -0.753012218723237200, -0.752979317455298340, -0.752946414304911270, -0.752913509272158050, -0.752880602357121060, +-0.752847693559882130, -0.752814782880524390, -0.752781870319129800, -0.752748955875780500, -0.752716039550558770, -0.752683121343546980, -0.752650201254827400, -0.752617279284482300, +-0.752584355432593500, -0.752551429699244270, -0.752518502084516540, -0.752485572588492470, -0.752452641211254550, -0.752419707952885040, -0.752386772813466220, -0.752353835793079910, +-0.752320896891809590, -0.752287956109736980, -0.752255013446944450, -0.752222068903514510, -0.752189122479529400, -0.752156174175071410, -0.752123223990222910, -0.752090271925066500, +-0.752057317979683780, -0.752024362154158240, -0.751991404448571930, -0.751958444863007110, -0.751925483397546170, -0.751892520052271470, -0.751859554827264850, -0.751826587722610020, +-0.751793618738388680, -0.751760647874683220, -0.751727675131576230, -0.751694700509150100, -0.751661724007487100, -0.751628745626669930, -0.751595765366780850, -0.751562783227901710, +-0.751529799210116200, -0.751496813313506260, -0.751463825538154270, -0.751430835884142610, -0.751397844351553990, -0.751364850940470670, -0.751331855650974710, -0.751298858483149590, +-0.751265859437077470, -0.751232858512840610, -0.751199855710521610, -0.751166851030202980, -0.751133844471967290, -0.751100836035896950, -0.751067825722073870, -0.751034813530581880, +-0.751001799461502810, -0.750968783514919250, -0.750935765690913690, -0.750902745989568850, -0.750869724410967000, -0.750836700955190390, -0.750803675622322530, -0.750770648412445450, +-0.750737619325641870, -0.750704588361994160, -0.750671555521584930, -0.750638520804496890, -0.750605484210812520, -0.750572445740613880, -0.750539405393984670, -0.750506363171007050, +-0.750473319071763400, -0.750440273096336430, -0.750407225244808960, -0.750374175517263260, -0.750341123913781600, -0.750308070434447690, -0.750275015079343580, -0.750241957848551970, +-0.750208898742155460, -0.750175837760236770, -0.750142774902878400, -0.750109710170163150, -0.750076643562173520, -0.750043575078991780, -0.750010504720701740, -0.749977432487385350, +-0.749944358379125430, -0.749911282396004570, -0.749878204538105500, -0.749845124805510350, -0.749812043198302970, -0.749778959716565500, -0.749745874360380650, -0.749712787129831030, +-0.749679698024999560, -0.749646607045968750, -0.749613514192821520, -0.749580419465640360, -0.749547322864507760, -0.749514224389507210, -0.749481124040721310, -0.749448021818232450, +-0.749414917722123650, -0.749381811752477420, -0.749348703909376800, -0.749315594192903720, -0.749282482603142340, -0.749249369140174700, -0.749216253804083630, -0.749183136594951950, +-0.749150017512862480, -0.749116896557897930, -0.749083773730141010, -0.749050649029674220, -0.749017522456581370, -0.748984394010944740, -0.748951263692847040, -0.748918131502371190, +-0.748884997439600130, -0.748851861504616470, -0.748818723697502580, -0.748785584018342500, -0.748752442467218390, -0.748719299044213300, -0.748686153749409830, -0.748653006582891020, +-0.748619857544739810, -0.748586706635038790, -0.748553553853870460, -0.748520399201318850, -0.748487242677466250, -0.748454084282395570, -0.748420924016189650, -0.748387761878931410, +-0.748354597870703800, -0.748321431991589070, -0.748288264241671270, -0.748255094621032900, -0.748221923129756880, -0.748188749767925930, -0.748155574535623200, -0.748122397432931410, +-0.748089218459933700, -0.748056037616713020, -0.748022854903351520, -0.747989670319933580, -0.747956483866541340, -0.747923295543257980, -0.747890105350166310, -0.747856913287349490, +-0.747823719354889780, -0.747790523552871340, -0.747757325881376560, -0.747724126340488460, -0.747690924930290100, -0.747657721650864300, -0.747624516502294330, -0.747591309484663010, +-0.747558100598053390, -0.747524889842548060, -0.747491677218230950, -0.747458462725184790, -0.747425246363492390, -0.747392028133236800, -0.747358808034501280, -0.747325586067368650, +-0.747292362231921410, -0.747259136528243940, -0.747225908956418610, -0.747192679516528570, -0.747159448208656760, -0.747126215032886340, -0.747092979989300470, -0.747059743077982060, +-0.747026504299013740, -0.746993263652479640, -0.746960021138462490, -0.746926776757045330, -0.746893530508311200, -0.746860282392343140, -0.746827032409224430, -0.746793780559037670, +-0.746760526841866890, -0.746727271257794810, -0.746694013806904590, -0.746660754489279380, -0.746627493305002220, -0.746594230254156390, -0.746560965336824920, -0.746527698553090420, +-0.746494429903037270, -0.746461159386748060, -0.746427887004306070, -0.746394612755794330, -0.746361336641295890, -0.746328058660894240, -0.746294778814671880, -0.746261497102713060, +-0.746228213525100600, -0.746194928081917560, -0.746161640773247200, -0.746128351599172680, -0.746095060559777370, -0.746061767655144430, -0.746028472885357010, -0.745995176250497830, +-0.745961877750651260, -0.745928577385900020, -0.745895275156327360, -0.745861971062016460, -0.745828665103050680, -0.745795357279512630, -0.745762047591486900, -0.745728736039055870, +-0.745695422622303040, -0.745662107341311780, -0.745628790196165130, -0.745595471186946470, -0.745562150313739290, -0.745528827576626530, -0.745495502975691340, -0.745462176511017870, +-0.745428848182688840, -0.745395517990787850, -0.745362185935398050, -0.745328852016602820, -0.745295516234485310, -0.745262178589128470, -0.745228839080616880, -0.745195497709033150, +-0.745162154474460550, -0.745128809376982670, -0.745095462416682790, -0.745062113593644270, -0.745028762907950390, -0.744995410359683970, -0.744962055948929720, -0.744928699675770360, +-0.744895341540289140, -0.744861981542569660, -0.744828619682695200, -0.744795255960749140, -0.744761890376814390, -0.744728522930975470, -0.744695153623315290, -0.744661782453917230, +-0.744628409422864680, -0.744595034530241120, -0.744561657776129930, -0.744528279160614700, -0.744494898683778050, -0.744461516345704900, -0.744428132146477850, -0.744394746086180500, +-0.744361358164896240, -0.744327968382708650, -0.744294576739701120, -0.744261183235956580, -0.744227787871559630, -0.744194390646593210, -0.744160991561140790, -0.744127590615285990, +-0.744094187809112070, -0.744060783142702850, -0.744027376616141490, -0.743993968229511800, -0.743960557982896620, -0.743927145876380650, -0.743893731910046710, -0.743860316083978510, +-0.743826898398259550, -0.743793478852973310, -0.743760057448202730, -0.743726634184032620, -0.743693209060545920, -0.743659782077826350, -0.743626353235957160, -0.743592922535022070, +-0.743559489975104790, -0.743526055556288700, -0.743492619278657510, -0.743459181142294150, -0.743425741147283440, -0.743392299293708430, -0.743358855581652600, -0.743325410011199670, +-0.743291962582433240, -0.743258513295436800, -0.743225062150293600, -0.743191609147088260, -0.743158154285903930, -0.743124697566824200, -0.743091238989932790, -0.743057778555313190, +-0.743024316263049210, -0.742990852113224460, -0.742957386105921880, -0.742923918241226500, -0.742890448519221370, -0.742856976939989980, -0.742823503503616370, -0.742790028210183810, +-0.742756551059776230, -0.742723072052476670, -0.742689591188369970, -0.742656108467539380, -0.742622623890068610, -0.742589137456041160, -0.742555649165540840, -0.742522159018651370, +-0.742488667015456680, -0.742455173156039590, -0.742421677440485150, -0.742388179868876510, -0.742354680441297490, -0.742321179157831800, -0.742287676018563050, -0.742254171023575160, +-0.742220664172951290, -0.742187155466776270, -0.742153644905133470, -0.742120132488106490, -0.742086618215779260, -0.742053102088235380, -0.742019584105558790, -0.741986064267833200, +-0.741952542575142540, -0.741919019027569850, -0.741885493625200180, -0.741851966368116790, -0.741818437256403510, -0.741784906290144150, -0.741751373469422550, -0.741717838794321960, +-0.741684302264927210, -0.741650763881321890, -0.741617223643589510, -0.741583681551814090, -0.741550137606079570, -0.741516591806469670, -0.741483044153068200, -0.741449494645959110, +-0.741415943285225860, -0.741382390070953190, -0.741348835003224680, -0.741315278082123940, -0.741281719307735120, -0.741248158680141930, -0.741214596199427760, -0.741181031865677630, +-0.741147465678975050, -0.741113897639403720, -0.741080327747047680, -0.741046756001990880, -0.741013182404317130, -0.740979606954110360, -0.740946029651454730, -0.740912450496433280, +-0.740878869489131290, -0.740845286629632230, -0.740811701918019930, -0.740778115354378430, -0.740744526938791560, -0.740710936671343360, -0.740677344552117200, -0.740643750581198360, +-0.740610154758670090, -0.740576557084616560, -0.740542957559121470, -0.740509356182269100, -0.740475752954143250, -0.740442147874827980, -0.740408540944406890, -0.740374932162964900, +-0.740341321530585740, -0.740307709047353210, -0.740274094713351370, -0.740240478528664260, -0.740206860493376030, -0.740173240607570060, -0.740139618871331510, -0.740105995284743970, +-0.740072369847891490, -0.740038742560858000, -0.740005113423727660, -0.739971482436584620, -0.739937849599512810, -0.739904214912596280, -0.739870578375918740, -0.739836939989565350, +-0.739803299753619580, -0.739769657668165600, -0.739736013733287460, -0.739702367949069180, -0.739668720315594500, -0.739635070832948660, -0.739601419501215050, -0.739567766320477830, +-0.739534111290821360, -0.739500454412329480, -0.739466795685086550, -0.739433135109176520, -0.739399472684683760, -0.739365808411691640, -0.739332142290285650, -0.739298474320549400, +-0.739264804502566820, -0.739231132836422280, -0.739197459322199930, -0.739163783959983280, -0.739130106749857800, -0.739096427691907090, -0.739062746786215200, -0.739029064032866610, +-0.738995379431945270, -0.738961692983535420, -0.738928004687721350, -0.738894314544587320, -0.738860622554216920, -0.738826928716695530, -0.738793233032106870, -0.738759535500535080, +-0.738725836122064440, -0.738692134896779210, -0.738658431824763650, -0.738624726906101480, -0.738591020140878070, -0.738557311529177030, -0.738523601071082720, -0.738489888766679540, +-0.738456174616051400, -0.738422458619283020, -0.738388740776458440, -0.738355021087661490, -0.738321299552977430, -0.738287576172490190, -0.738253850946284040, -0.738220123874443250, +-0.738186394957052070, -0.738152664194195120, -0.738118931585955760, -0.738085197132419600, -0.738051460833670570, -0.738017722689792820, -0.737983982700870730, -0.737950240866988790, +-0.737916497188231160, -0.737882751664682310, -0.737849004296426640, -0.737815255083547840, -0.737781504026131520, -0.737747751124261390, -0.737713996378021820, -0.737680239787497300, +-0.737646481352772220, -0.737612721073930390, -0.737578958951057300, -0.737545194984236760, -0.737511429173553280, -0.737477661519091220, -0.737443892020935080, -0.737410120679169110, +-0.737376347493877930, -0.737342572465145780, -0.737308795593056620, -0.737275016877696140, -0.737241236319148060, -0.737207453917496870, -0.737173669672827160, -0.737139883585223200, +-0.737106095654768920, -0.737072305881550040, -0.737038514265650260, -0.737004720807154400, -0.736970925506146620, -0.736937128362711520, -0.736903329376933700, -0.736869528548897420, +-0.736835725878687400, -0.736801921366387450, -0.736768115012083280, -0.736734306815858830, -0.736700496777798590, -0.736666684897987150, -0.736632871176509000, -0.736599055613448740, +-0.736565238208890080, -0.736531418962918960, -0.736497597875619410, -0.736463774947075820, -0.736429950177372780, -0.736396123566594780, -0.736362295114826540, -0.736328464822152640, +-0.736294632688656910, -0.736260798714425180, -0.736226962899541370, -0.736193125244090310, -0.736159285748156370, -0.736125444411824260, -0.736091601235178470, -0.736057756218303160, +-0.736023909361283920, -0.735990060664205030, -0.735956210127150960, -0.735922357750206310, -0.735888503533455920, -0.735854647476984150, -0.735820789580875710, -0.735786929845214770, +-0.735753068270087130, -0.735719204855576850, -0.735685339601768410, -0.735651472508746740, -0.735617603576596450, -0.735583732805402010, -0.735549860195247710, -0.735515985746219240, +-0.735482109458400980, -0.735448231331877310, -0.735414351366733170, -0.735380469563053140, -0.735346585920921840, -0.735312700440424180, -0.735278813121644780, -0.735244923964667670, +-0.735211032969578790, -0.735177140136462510, -0.735143245465403220, -0.735109348956485940, -0.735075450609795180, -0.735041550425415300, -0.735007648403432020, -0.734973744543929720, +-0.734939838846992990, -0.734905931312706760, -0.734872021941155640, -0.734838110732424440, -0.734804197686597990, -0.734770282803761110, -0.734736366083997840, -0.734702447527394220, +-0.734668527134034520, -0.734634604904003560, -0.734600680837386060, -0.734566754934266820, -0.734532827194730680, -0.734498897618862000, -0.734464966206746510, -0.734431032958468680, +-0.734397097874113220, -0.734363160953765080, -0.734329222197509070, -0.734295281605430010, -0.734261339177612600, -0.734227394914141350, -0.734193448815102290, -0.734159500880579460, +-0.734125551110657910, -0.734091599505422580, -0.734057646064958160, -0.734023690789349590, -0.733989733678681370, -0.733955774733039190, -0.733921813952507660, -0.733887851337171710, +-0.733853886887116060, -0.733819920602425620, -0.733785952483185460, -0.733751982529480370, -0.733718010741394750, -0.733684037119014640, -0.733650061662424520, -0.733616084371709220, +-0.733582105246953780, -0.733548124288242900, -0.733514141495661850, -0.733480156869294800, -0.733446170409227990, -0.733412182115545710, -0.733378191988332980, -0.733344200027674860, +-0.733310206233656170, -0.733276210606361940, -0.733242213145877230, -0.733208213852286960, -0.733174212725675620, -0.733140209766129260, -0.733106204973732360, -0.733072198348569960, +-0.733038189890727110, -0.733004179600288850, -0.732970167477339450, -0.732936153521965170, -0.732902137734250610, -0.732868120114280710, -0.732834100662140500, -0.732800079377915030, +-0.732766056261689340, -0.732732031313548470, -0.732698004533577580, -0.732663975921861050, -0.732629945478485260, -0.732595913203534570, -0.732561879097094140, -0.732527843159248900, +-0.732493805390084130, -0.732459765789684750, -0.732425724358135470, -0.732391681095522440, -0.732357636001930160, -0.732323589077443880, -0.732289540322148550, -0.732255489736129420, +-0.732221437319471540, -0.732187383072260060, -0.732153326994579580, -0.732119269086516260, -0.732085209348154910, -0.732051147779580470, -0.732017084380878090, -0.731983019152133150, +-0.731948952093430580, -0.731914883204854980, -0.731880812486492840, -0.731846739938428750, -0.731812665560747640, -0.731778589353535010, -0.731744511316875790, -0.731710431450855350, +-0.731676349755558840, -0.731642266231070870, -0.731608180877477810, -0.731574093694864260, -0.731540004683315480, -0.731505913842916740, -0.731471821173753200, -0.731437726675910120, +-0.731403630349472090, -0.731369532194525610, -0.731335432211155270, -0.731301330399446450, -0.731267226759484190, -0.731233121291353870, -0.731199013995140760, -0.731164904870930110, +-0.731130793918807200, -0.731096681138856840, -0.731062566531165190, -0.731028450095817290, -0.730994331832898080, -0.730960211742493150, -0.730926089824687650, -0.730891966079566410, +-0.730857840507215810, -0.730823713107720540, -0.730789583881166100, -0.730755452827637540, -0.730721319947220560, -0.730687185240000090, -0.730653048706061740, -0.730618910345490760, +-0.730584770158371980, -0.730550628144791770, -0.730516484304835070, -0.730482338638587030, -0.730448191146133240, -0.730414041827558980, -0.730379890682949620, -0.730345737712389860, +-0.730311582915966430, -0.730277426293764020, -0.730243267845868130, -0.730209107572363900, -0.730174945473337060, -0.730140781548872740, -0.730106615799056560, -0.730072448223973100, +-0.730038278823709310, -0.730004107598349660, -0.729969934547979870, -0.729935759672685200, -0.729901582972551030, -0.729867404447662960, -0.729833224098105800, -0.729799041923966160, +-0.729764857925328970, -0.729730672102279600, -0.729696484454903540, -0.729662294983286270, -0.729628103687513410, -0.729593910567670090, -0.729559715623841480, -0.729525518856114160, +-0.729491320264572970, -0.729457119849303610, -0.729422917610391460, -0.729388713547921900, -0.729354507661980620, -0.729320299952652460, -0.729286090420024240, -0.729251879064180650, +-0.729217665885207420, -0.729183450883190030, -0.729149234058213970, -0.729115015410364940, -0.729080794939728220, -0.729046572646389610, -0.729012348530433950, -0.728978122591948050, +-0.728943894831016740, -0.728909665247725820, -0.728875433842160580, -0.728841200614406940, -0.728806965564549600, -0.728772728692675400, -0.728738489998869480, -0.728704249483217330, +-0.728670007145804540, -0.728635762986716730, -0.728601517006039480, -0.728567269203858390, -0.728533019580259290, -0.728498768135326880, -0.728464514869148210, -0.728430259781808310, +-0.728396002873392680, -0.728361744143987020, -0.728327483593677050, -0.728293221222548360, -0.728258957030686100, -0.728224691018176990, -0.728190423185106070, -0.728156153531559270, +-0.728121882057621850, -0.728087608763379970, -0.728053333648918890, -0.728019056714324540, -0.727984777959681970, -0.727950497385078000, -0.727916214990597890, -0.727881930776327120, +-0.727847644742351640, -0.727813356888756920, -0.727779067215628910, -0.727744775723052630, -0.727710482411114910, -0.727676187279901020, -0.727641890329496780, -0.727607591559987780, +-0.727573290971459730, -0.727538988563998460, -0.727504684337689670, -0.727470378292618620, -0.727436070428872260, -0.727401760746535730, -0.727367449245694740, -0.727333135926435110, +-0.727298820788842670, -0.727264503833003230, -0.727230185059001940, -0.727195864466925750, -0.727161542056859900, -0.727127217828890120, -0.727092891783102440, -0.727058563919582460, +-0.727024234238416000, -0.726989902739689110, -0.726955569423487270, -0.726921234289896080, -0.726886897339002250, -0.726852558570891370, -0.726818217985648940, -0.726783875583360990, +-0.726749531364113350, -0.726715185327991400, -0.726680837475081940, -0.726646487805470480, -0.726612136319242710, -0.726577783016484680, -0.726543427897282100, -0.726509070961721020, +-0.726474712209887240, -0.726440351641866710, -0.726405989257744690, -0.726371625057608330, -0.726337259041542890, -0.726302891209634320, -0.726268521561968420, -0.726234150098631240, +-0.726199776819708820, -0.726165401725286320, -0.726131024815450780, -0.726096646090287790, -0.726062265549883180, -0.726027883194322880, -0.725993499023692810, -0.725959113038079030, +-0.725924725237567570, -0.725890335622243590, -0.725855944192194460, -0.725821550947505330, -0.725787155888262480, -0.725752759014551610, -0.725718360326458980, -0.725683959824070300, +-0.725649557507471180, -0.725615153376748760, -0.725580747431988530, -0.725546339673276420, -0.725511930100698370, -0.725477518714340520, -0.725443105514288920, -0.725408690500629500, +-0.725374273673447760, -0.725339855032831050, -0.725305434578864540, -0.725271012311634600, -0.725236588231227050, -0.725202162337728050, -0.725167734631223640, -0.725133305111799190, +-0.725098873779542190, -0.725064440634538010, -0.725030005676872700, -0.724995568906632410, -0.724961130323903080, -0.724926689928771070, -0.724892247721322210, -0.724857803701642770, +-0.724823357869818330, -0.724788910225935950, -0.724754460770081320, -0.724720009502340720, -0.724685556422799860, -0.724651101531545220, -0.724616644828662170, -0.724582186314238210, +-0.724547725988358700, -0.724513263851109920, -0.724478799902577910, -0.724444334142848920, -0.724409866572009120, -0.724375397190144770, -0.724340925997341790, -0.724306452993685900, +-0.724271978179264480, -0.724237501554163110, -0.724203023118467960, -0.724168542872265400, -0.724134060815641360, -0.724099576948682210, -0.724065091271473450, -0.724030603784102670, +-0.723996114486655350, -0.723961623379217660, -0.723927130461875960, -0.723892635734716410, -0.723858139197825380, -0.723823640851288920, -0.723789140695192730, -0.723754638729624310, +-0.723720134954669360, -0.723685629370414030, -0.723651121976944590, -0.723616612774347410, -0.723582101762708650, -0.723547588942114020, -0.723513074312651110, -0.723478557874405400, +-0.723444039627463400, -0.723409519571911240, -0.723374997707835200, -0.723340474035321760, -0.723305948554457180, -0.723271421265327060, -0.723236892168019010, -0.723202361262618720, +-0.723167828549212580, -0.723133294027886840, -0.723098757698727780, -0.723064219561821990, -0.723029679617254840, -0.722995137865114270, -0.722960594305485760, -0.722926048938455800, +-0.722891501764110770, -0.722856952782536920, -0.722822401993820640, -0.722787849398048520, -0.722753294995306610, -0.722718738785680940, -0.722684180769259000, -0.722649620946126610, +-0.722615059316370160, -0.722580495880076110, -0.722545930637330750, -0.722511363588219990, -0.722476794732831440, -0.722442224071250920, -0.722407651603564900, -0.722373077329859560, +-0.722338501250221700, -0.722303923364737480, -0.722269343673493490, -0.722234762176576120, -0.722200178874071290, -0.722165593766066590, -0.722131006852647970, -0.722096418133901690, +-0.722061827609914550, -0.722027235280772730, -0.721992641146562140, -0.721958045207370720, -0.721923447463284070, -0.721888847914388790, -0.721854246560771460, -0.721819643402518580, +-0.721785038439716420, -0.721750431672451790, -0.721715823100811060, -0.721681212724880170, -0.721646600544746830, -0.721611986560496970, -0.721577370772217170, -0.721542753179993950, +-0.721508133783913760, -0.721473512584063340, -0.721438889580528490, -0.721404264773397140, -0.721369638162754900, -0.721335009748688690, -0.721300379531285010, -0.721265747510630330, +-0.721231113686811250, -0.721196478059914490, -0.721161840630025750, -0.721127201397233190, -0.721092560361622500, -0.721057917523280520, -0.721023272882293620, -0.720988626438748610, +-0.720953978192732100, -0.720919328144330020, -0.720884676293630070, -0.720850022640718620, -0.720815367185681950, -0.720780709928606990, -0.720746050869580210, -0.720711390008688340, +-0.720676727346017950, -0.720642062881655780, -0.720607396615687850, -0.720572728548201980, -0.720538058679284330, -0.720503387009021500, -0.720468713537500190, -0.720434038264807120, +-0.720399361191028320, -0.720364682316251840, -0.720330001640563600, -0.720295319164050210, -0.720260634886798700, -0.720225948808895570, -0.720191260930427510, -0.720156571251481360, +-0.720121879772143700, -0.720087186492500810, -0.720052491412640490, -0.720017794532649020, -0.719983095852613110, -0.719948395372619340, -0.719913693092754660, -0.719878989013105100, +-0.719844283133758700, -0.719809575454801510, -0.719774865976320450, -0.719740154698402250, -0.719705441621133590, -0.719670726744601420, -0.719636010068892330, -0.719601291594093360, +-0.719566571320290450, -0.719531849247571740, -0.719497125376023390, -0.719462399705732230, -0.719427672236785050, -0.719392942969268700, -0.719358211903270100, -0.719323479038875170, +-0.719288744376172300, -0.719254007915247520, -0.719219269656187770, -0.719184529599079750, -0.719149787744010500, -0.719115044091066750, -0.719080298640335400, -0.719045551391902630, +-0.719010802345856680, -0.718976051502283610, -0.718941298861270560, -0.718906544422904140, -0.718871788187271380, -0.718837030154459210, -0.718802270324553790, -0.718767508697643390, +-0.718732745273814140, -0.718697980053153000, -0.718663213035746980, -0.718628444221682930, -0.718593673611047760, -0.718558901203928400, -0.718524127000411790, -0.718489351000584200, +-0.718454573204533880, -0.718419793612347200, -0.718385012224110890, -0.718350229039912190, -0.718315444059837830, -0.718280657283974280, -0.718245868712409700, -0.718211078345230460, +-0.718176286182523490, -0.718141492224375840, -0.718106696470874440, -0.718071898922106320, -0.718037099578158420, -0.718002298439117780, -0.717967495505070770, -0.717932690776105660, +-0.717897884252308830, -0.717863075933767300, -0.717828265820568020, -0.717793453912798140, -0.717758640210544030, -0.717723824713893840, -0.717689007422934180, -0.717654188337751850, +-0.717619367458434240, -0.717584544785068170, -0.717549720317740670, -0.717514894056538900, -0.717480066001549900, -0.717445236152860040, -0.717410404510557820, -0.717375571074729490, +-0.717340735845462320, -0.717305898822843350, -0.717271060006959500, -0.717236219397898060, -0.717201376995745490, -0.717166532800590060, -0.717131686812518270, -0.717096839031617360, +-0.717061989457974280, -0.717027138091676170, -0.716992284932810310, -0.716957429981463720, -0.716922573237723020, -0.716887714701676340, -0.716852854373410510, -0.716817992253012460, +-0.716783128340569450, -0.716748262636168530, -0.716713395139897070, -0.716678525851841550, -0.716643654772090240, -0.716608781900729740, -0.716573907237847420, -0.716539030783530210, +-0.716504152537865590, -0.716469272500940390, -0.716434390672842090, -0.716399507053657960, -0.716364621643474250, -0.716329734442379680, -0.716294845450460740, -0.716259954667804680, +-0.716225062094498770, -0.716190167730630270, -0.716155271576285560, -0.716120373631553450, -0.716085473896520330, -0.716050572371273560, -0.716015669055900310, -0.715980763950487930, +-0.715945857055123700, -0.715910948369894660, -0.715876037894888410, -0.715841125630191310, -0.715806211575892190, -0.715771295732077430, -0.715736378098834390, -0.715701458676250460, +-0.715666537464412890, -0.715631614463408390, -0.715596689673325350, -0.715561763094250790, -0.715526834726271650, -0.715491904569475420, -0.715456972623949470, -0.715422038889781180, +-0.715387103367057690, -0.715352166055866380, -0.715317226956294180, -0.715282286068429470, -0.715247343392359070, -0.715212398928170230, -0.715177452675950560, -0.715142504635787100, +-0.715107554807767440, -0.715072603191978300, -0.715037649788508150, -0.715002694597444030, -0.714967737618873110, -0.714932778852882870, -0.714897818299560560, -0.714862855958993900, +-0.714827891831269930, -0.714792925916475700, -0.714757958214699780, -0.714722988726028910, -0.714688017450550660, -0.714653044388352310, -0.714618069539521340, -0.714583092904145230, +-0.714548114482310700, -0.714513134274106560, -0.714478152279619530, -0.714443168498937190, -0.714408182932146920, -0.714373195579336210, -0.714338206440592430, -0.714303215516003180, +-0.714268222805655270, -0.714233228309637420, -0.714198232028036450, -0.714163233960940060, -0.714128234108435400, -0.714093232470610180, -0.714058229047552010, -0.714023223839347580, +-0.713988216846085710, -0.713953208067853230, -0.713918197504737840, -0.713883185156826920, -0.713848171024207940, -0.713813155106968630, -0.713778137405196470, -0.713743117918978930, +-0.713708096648402960, -0.713673073593557360, -0.713638048754529080, -0.713603022131405700, -0.713567993724274820, -0.713532963533223820, -0.713497931558339850, -0.713462897799711730, +-0.713427862257426270, -0.713392824931571190, -0.713357785822234080, -0.713322744929502540, -0.713287702253464050, -0.713252657794206320, -0.713217611551816950, -0.713182563526382980, +-0.713147513717993120, -0.713112462126734630, -0.713077408752694870, -0.713042353595961580, -0.713007296656622440, -0.712972237934765160, -0.712937177430476470, -0.712902115143845600, +-0.712867051074959400, -0.712831985223905560, -0.712796917590771790, -0.712761848175645700, -0.712726776978614970, -0.712691703999767330, -0.712656629239189820, -0.712621552696971360, +-0.712586474373199000, -0.712551394267960330, -0.712516312381343390, -0.712481228713435550, -0.712446143264324650, -0.712411056034097820, -0.712375967022843890, -0.712340876230650120, +-0.712305783657604110, -0.712270689303793670, -0.712235593169306510, -0.712200495254230350, -0.712165395558652990, -0.712130294082661490, -0.712095190826344870, -0.712060085789790300, +-0.712024978973085480, -0.711989870376318220, -0.711954759999576250, -0.711919647842947370, -0.711884533906518850, -0.711849418190379610, -0.711814300694616710, -0.711779181419318170, +-0.711744060364571610, -0.711708937530464940, -0.711673812917085980, -0.711638686524522330, -0.711603558352862150, -0.711568428402192250, -0.711533296672602010, -0.711498163164178580, +-0.711463027877009770, -0.711427890811183290, -0.711392751966787080, -0.711357611343908400, -0.711322468942636290, -0.711287324763058000, -0.711252178805261480, -0.711217031069334430, +-0.711181881555364770, -0.711146730263440550, -0.711111577193649370, -0.711076422346079370, -0.711041265720817610, -0.711006107317953220, -0.710970947137573690, -0.710935785179766740, +-0.710900621444620410, -0.710865455932222500, -0.710830288642660850, -0.710795119576022930, -0.710759948732397890, -0.710724776111872900, -0.710689601714535990, -0.710654425540475090, +-0.710619247589778010, -0.710584067862533030, -0.710548886358827740, -0.710513703078749610, -0.710478518022387820, -0.710443331189829830, -0.710408142581163470, -0.710372952196476780, +-0.710337760035857580, -0.710302566099394130, -0.710267370387173580, -0.710232172899285310, -0.710196973635816460, -0.710161772596855310, -0.710126569782489670, -0.710091365192807580, +-0.710056158827897080, -0.710020950687846210, -0.709985740772742350, -0.709950529082674750, -0.709915315617730910, -0.709880100377998650, -0.709844883363566210, -0.709809664574521550, +-0.709774444010952690, -0.709739221672947120, -0.709703997560594100, -0.709668771673981120, -0.709633544013196230, -0.709598314578327450, -0.709563083369462940, -0.709527850386690640, +-0.709492615630098800, -0.709457379099775350, -0.709422140795807790, -0.709386900718285580, -0.709351658867296120, -0.709316415242927430, -0.709281169845267790, -0.709245922674405230, +-0.709210673730427230, -0.709175423013423180, -0.709140170523480440, -0.709104916260687390, -0.709069660225132070, -0.709034402416902520, -0.708999142836087000, -0.708963881482773670, +-0.708928618357050570, -0.708893353459005390, -0.708858086788727420, -0.708822818346304120, -0.708787548131823870, -0.708752276145374730, -0.708717002387044940, -0.708681726856922540, +-0.708646449555095370, -0.708611170481652560, -0.708575889636681830, -0.708540607020271440, -0.708505322632509540, -0.708470036473484280, -0.708434748543284030, -0.708399458841996730, +-0.708364167369710310, -0.708328874126514020, -0.708293579112495570, -0.708258282327743130, -0.708222983772345050, -0.708187683446389490, -0.708152381349964720, -0.708117077483158330, +-0.708081771846059920, -0.708046464438757070, -0.708011155261338070, -0.707975844313891270, -0.707940531596504720, -0.707905217109266900, -0.707869900852265980, -0.707834582825589750, +-0.707799263029327720, -0.707763941463567360, -0.707728618128397270, -0.707693293023905600, -0.707657966150180840, -0.707622637507311030, -0.707587307095383980, -0.707551974914489400, +-0.707516640964714780, -0.707481305246148610, -0.707445967758879140, -0.707410628502994740, -0.707375287478583800, -0.707339944685734690, -0.707304600124535670, -0.707269253795074440, +-0.707233905697440820, -0.707198555831722420, -0.707163204198007600, -0.707127850796384740, -0.707092495626942320, -0.707057138689768050, -0.707021779984951530, -0.706986419512580570, +-0.706951057272743540, -0.706915693265528830, -0.706880327491024920, -0.706844959949320170, -0.706809590640503080, -0.706774219564662020, -0.706738846721884690, -0.706703472112260920, +-0.706668095735878520, -0.706632717592825870, -0.706597337683191330, -0.706561956007063510, -0.706526572564530890, -0.706491187355681060, -0.706455800380603960, -0.706420411639387400, +-0.706385021132119760, -0.706349628858889520, -0.706314234819785280, -0.706278839014895410, -0.706243441444308510, -0.706208042108112280, -0.706172641006396650, -0.706137238139249450, +-0.706101833506759040, -0.706066427109014130, -0.706031018946103090, -0.705995609018114530, -0.705960197325136370, -0.705924783867258320, -0.705889368644568300, -0.705853951657154810, +-0.705818532905106540, -0.705783112388511880, -0.705747690107459410, -0.705712266062037740, -0.705676840252334790, -0.705641412678440380, -0.705605983340442440, -0.705570552238429460, +-0.705535119372490250, -0.705499684742713180, -0.705464248349186860, -0.705428810191999320, -0.705393370271240380, -0.705357928586997970, -0.705322485139360800, -0.705287039928417350, +-0.705251592954256320, -0.705216144216966320, -0.705180693716636050, -0.705145241453353890, -0.705109787427208090, -0.705074331638288480, -0.705038874086682980, -0.705003414772480300, +-0.704967953695769150, -0.704932490856638010, -0.704897026255175030, -0.704861559891470150, -0.704826091765611400, -0.704790621877687370, -0.704755150227786790, -0.704719676815998340, +-0.704684201642410750, -0.704648724707112590, -0.704613246010192710, -0.704577765551739010, -0.704542283331841550, -0.704506799350588350, -0.704471313608068140, -0.704435826104369720, +-0.704400336839581700, -0.704364845813792770, -0.704329353027091210, -0.704293858479566830, -0.704258362171307770, -0.704222864102402870, -0.704187364272940820, -0.704151862683010330, +-0.704116359332700230, -0.704080854222099100, -0.704045347351295310, -0.704009838720378810, -0.703974328329437630, -0.703938816178560690, -0.703903302267836710, -0.703867786597354380, +-0.703832269167202760, -0.703796749977469660, -0.703761229028245340, -0.703725706319618060, -0.703690181851676420, -0.703654655624509350, -0.703619127638205670, -0.703583597892854180, +-0.703548066388543610, -0.703512533125362330, -0.703476998103400360, -0.703441461322745760, -0.703405922783487680, -0.703370382485714710, -0.703334840429515770, -0.703299296614979810, +-0.703263751042194850, -0.703228203711251170, -0.703192654622237120, -0.703157103775241320, -0.703121551170352800, -0.703085996807660370, -0.703050440687252860, -0.703014882809219420, +-0.702979323173648640, -0.702943761780629010, -0.702908198630250560, -0.702872633722601670, -0.702837067057771160, -0.702801498635847950, -0.702765928456920990, -0.702730356521078630, +-0.702694782828411020, -0.702659207379006330, -0.702623630172953820, -0.702588051210342070, -0.702552470491260240, -0.702516888015797260, -0.702481303784042050, -0.702445717796083560, +-0.702410130052010250, -0.702374540551912060, -0.702338949295877700, -0.702303356283995870, -0.702267761516355620, -0.702232164993046080, -0.702196566714155980, -0.702160966679773900, +-0.702125364889990110, -0.702089761344892870, -0.702054156044571220, -0.702018548989114090, -0.701982940178610630, -0.701947329613149870, -0.701911717292820760, -0.701876103217711770, +-0.701840487387913160, -0.701804869803513200, -0.701769250464601150, -0.701733629371266040, -0.701698006523596820, -0.701662381921682510, -0.701626755565611600, -0.701591127455474580, +-0.701555497591359600, -0.701519865973355920, -0.701484232601552680, -0.701448597476038720, -0.701412960596903280, -0.701377321964235520, -0.701341681578123710, -0.701306039438658440, +-0.701270395545928070, -0.701234749900021660, -0.701199102501028350, -0.701163453349037290, -0.701127802444137640, -0.701092149786417870, -0.701056495375968370, -0.701020839212877610, +-0.700985181297234640, -0.700949521629128820, -0.700913860208649210, -0.700878197035884940, -0.700842532110925060, -0.700806865433859060, -0.700771197004775080, -0.700735526823763830, +-0.700699854890913800, -0.700664181206314020, -0.700628505770053870, -0.700592828582222490, -0.700557149642908270, -0.700521468952201910, -0.700485786510191890, -0.700450102316967360, +-0.700414416372617590, -0.700378728677231830, -0.700343039230899130, -0.700307348033708870, -0.700271655085750290, -0.700235960387112000, -0.700200263937884260, -0.700164565738156000, +-0.700128865788016250, -0.700093164087554400, -0.700057460636859590, -0.700021755436020520, -0.699986048485127690, -0.699950339784269790, -0.699914629333535990, -0.699878917133015640, +-0.699843203182797910, -0.699807487482972280, -0.699771770033627890, -0.699736050834854020, -0.699700329886739470, -0.699664607189374730, -0.699628882742848400, -0.699593156547249960, +-0.699557428602668560, -0.699521698909193690, -0.699485967466914490, -0.699450234275919680, -0.699414499336299960, -0.699378762648144030, -0.699343024211541150, -0.699307284026580820, +-0.699271542093352180, -0.699235798411944610, -0.699200052982447700, -0.699164305804949930, -0.699128556879542120, -0.699092806206312870, -0.699057053785351550, -0.699021299616747640, +-0.698985543700590520, -0.698949786036969440, -0.698914026625973350, -0.698878265467692830, -0.698842502562216580, -0.698806737909634100, -0.698770971510034760, -0.698735203363508030, +-0.698699433470143290, -0.698663661830029930, -0.698627888443257520, -0.698592113309914660, -0.698556336430092180, -0.698520557803878780, -0.698484777431364060, -0.698448995312637380, +-0.698413211447788230, -0.698377425836905430, -0.698341638480079690, -0.698305849377399810, -0.698270058528955300, -0.698234265934835730, -0.698198471595130490, -0.698162675509928940, +-0.698126877679320800, -0.698091078103395550, -0.698055276782241880, -0.698019473715950630, -0.697983668904610720, -0.697947862348311630, -0.697912054047142850, -0.697876244001193970, +-0.697840432210553920, -0.697804618675313290, -0.697768803395561240, -0.697732986371387030, -0.697697167602880470, -0.697661347090130950, -0.697625524833228150, -0.697589700832261460, +-0.697553875087320470, -0.697518047598494230, -0.697482218365873540, -0.697446387389547230, -0.697410554669605000, -0.697374720206136330, -0.697338883999230940, -0.697303046048978300, +-0.697267206355467350, -0.697231364918789120, -0.697195521739032430, -0.697159676816286880, -0.697123830150642170, -0.697087981742188000, -0.697052131591013760, -0.697016279697209250, +-0.696980426060863300, -0.696944570682067050, -0.696908713560909330, -0.696872854697479730, -0.696836994091868060, -0.696801131744164030, -0.696765267654457010, -0.696729401822836270, +-0.696693534249392620, -0.696657664934215100, -0.696621793877393540, -0.696585921079017400, -0.696550046539176400, -0.696514170257960360, -0.696478292235458870, -0.696442412471761750, +-0.696406530966957820, -0.696370647721138330, -0.696334762734392100, -0.696298876006809060, -0.696262987538478820, -0.696227097329491060, -0.696191205379934950, -0.696155311689901410, +-0.696119416259479710, -0.696083519088759320, -0.696047620177830280, -0.696011719526782090, -0.695975817135704670, -0.695939913004687600, -0.695904007133820830, -0.695868099523193400, +-0.695832190172896330, -0.695796279083018780, -0.695760366253650560, -0.695724451684881510, -0.695688535376801200, -0.695652617329499010, -0.695616697543065770, -0.695580776017590940, +-0.695544852753164130, -0.695508927749875160, -0.695473001007813840, -0.695437072527070100, -0.695401142307733640, -0.695365210349894290, -0.695329276653641300, -0.695293341219065830, +-0.695257404046256910, -0.695221465135304470, -0.695185524486298450, -0.695149582099328530, -0.695113637974484780, -0.695077692111856220, -0.695041744511534000, -0.695005795173607500, +-0.694969844098166530, -0.694933891285300920, -0.694897936735100590, -0.694861980447655350, -0.694826022423055250, -0.694790062661389430, -0.694754101162749160, -0.694718137927223480, +-0.694682172954902530, -0.694646206245876140, -0.694610237800234340, -0.694574267618066840, -0.694538295699463020, -0.694502322044514120, -0.694466346653309420, -0.694430369525938950, +-0.694394390662492420, -0.694358410063059980, -0.694322427727731450, -0.694286443656596970, -0.694250457849745590, -0.694214470307268790, -0.694178481029255830, -0.694142490015796640, +-0.694106497266981260, -0.694070502782899610, -0.694034506563641740, -0.693998508609296900, -0.693962508919956480, -0.693926507495709720, -0.693890504336646790, -0.693854499442857490, +-0.693818492814431980, -0.693782484451460290, -0.693746474354032360, -0.693710462522238220, -0.693674448956167370, -0.693638433655910940, -0.693602416621558420, -0.693566397853199960, +-0.693530377350925380, -0.693494355114824930, -0.693458331144988000, -0.693422305441505740, -0.693386278004467840, -0.693350248833964230, -0.693314217930084960, -0.693278185292920180, +-0.693242150922559920, -0.693206114819094220, -0.693170076982613350, -0.693134037413206560, -0.693097996110965340, -0.693061953075979180, -0.693025908308338100, -0.692989861808132270, +-0.692953813575451720, -0.692917763610386710, -0.692881711913026610, -0.692845658483462800, -0.692809603321784980, -0.692773546428083090, -0.692737487802447370, -0.692701427444967880, +-0.692665365355734860, -0.692629301534838370, -0.692593235982367990, -0.692557168698415220, -0.692521099683069520, -0.692485028936421050, -0.692448956458560080, -0.692412882249576640, +-0.692376806309561000, -0.692340728638602740, -0.692304649236793250, -0.692268568104222100, -0.692232485240979580, -0.692196400647155930, -0.692160314322841200, -0.692124226268125640, +-0.692088136483099640, -0.692052044967852550, -0.692015951722475990, -0.691979856747059640, -0.691943760041693560, -0.691907661606468110, -0.691871561441473440, -0.691835459546800040, +-0.691799355922537160, -0.691763250568776630, -0.691727143485608040, -0.691691034673121430, -0.691654924131407390, -0.691618811860555960, -0.691582697860657510, -0.691546582131802310, +-0.691510464674080620, -0.691474345487582130, -0.691438224572398450, -0.691402101928619280, -0.691365977556334780, -0.691329851455635300, -0.691293723626611230, -0.691257594069352280, +-0.691221462783949910, -0.691185329770493850, -0.691149195029074570, -0.691113058559782220, -0.691076920362707290, -0.691040780437939930, -0.691004638785570720, -0.690968495405689940, +-0.690932350298387290, -0.690896203463754240, -0.690860054901880850, -0.690823904612857250, -0.690787752596773940, -0.690751598853721170, -0.690715443383789540, -0.690679286187068530, +-0.690643127263649960, -0.690606966613623640, -0.690570804237079840, -0.690534640134109030, -0.690498474304801710, -0.690462306749248130, -0.690426137467538780, -0.690389966459763470, +-0.690353793726013910, -0.690317619266379800, -0.690281443080951630, -0.690245265169819880, -0.690209085533075030, -0.690172904170807460, -0.690136721083106860, -0.690100536270065180, +-0.690064349731772220, -0.690028161468318360, -0.689991971479794080, -0.689955779766289860, -0.689919586327896180, -0.689883391164703540, -0.689847194276801750, -0.689810995664282610, +-0.689774795327236070, -0.689738593265752490, -0.689702389479922460, -0.689666183969836480, -0.689629976735584900, -0.689593767777257890, -0.689557557094947040, -0.689521344688742270, +-0.689485130558734170, -0.689448914705013240, -0.689412697127670060, -0.689376477826795010, -0.689340256802478900, -0.689304034054812110, -0.689267809583884670, -0.689231583389788180, +-0.689195355472612900, -0.689159125832449090, -0.689122894469387570, -0.689086661383518710, -0.689050426574932650, -0.689014190043721110, -0.688977951789974120, -0.688941711813782280, +-0.688905470115236060, -0.688869226694426300, -0.688832981551443350, -0.688796734686378030, -0.688760486099320830, -0.688724235790361790, -0.688687983759592840, -0.688651730007103890, +-0.688615474532985660, -0.688579217337328630, -0.688542958420223620, -0.688506697781761320, -0.688470435422031460, -0.688434171341126280, -0.688397905539135600, -0.688361638016150130, +-0.688325368772260690, -0.688289097807557760, -0.688252825122132040, -0.688216550716074350, -0.688180274589474510, -0.688143996742424770, -0.688107717175014950, -0.688071435887335880, +-0.688035152879478140, -0.687998868151532660, -0.687962581703589930, -0.687926293535740090, -0.687890003648075180, -0.687853712040685240, -0.687817418713660980, -0.687781123667093320, +-0.687744826901072750, -0.687708528415690080, -0.687672228211036130, -0.687635926287200940, -0.687599622644276650, -0.687563317282353200, -0.687527010201521630, -0.687490701401872410, +-0.687454390883496470, -0.687418078646484520, -0.687381764690926710, -0.687345449016915190, -0.687309131624539990, -0.687272812513892050, -0.687236491685061960, -0.687200169138140750, +-0.687163844873219020, -0.687127518890387810, -0.687091191189737720, -0.687054861771358990, -0.687018530635343680, -0.686982197781782160, -0.686945863210765120, -0.686909526922383500, +-0.686873188916727880, -0.686836849193888770, -0.686800507753958180, -0.686764164597026380, -0.686727819723184090, -0.686691473132522210, -0.686655124825131690, -0.686618774801103340, +-0.686582423060528080, -0.686546069603496730, -0.686509714430099560, -0.686473357540428820, -0.686436998934574660, -0.686400638612628010, -0.686364276574679690, -0.686327912820820730, +-0.686291547351141950, -0.686255180165733720, -0.686218811264688200, -0.686182440648095640, -0.686146068316046960, -0.686109694268633000, -0.686073318505944880, -0.686036941028073550, +-0.686000561835109820, -0.685964180927144060, -0.685927798304268420, -0.685891413966573270, -0.685855027914149650, -0.685818640147088490, -0.685782250665480710, -0.685745859469417240, +-0.685709466558988570, -0.685673071934286840, -0.685636675595402420, -0.685600277542426250, -0.685563877775449470, -0.685527476294562900, -0.685491073099857800, -0.685454668191424870, +-0.685418261569354700, -0.685381853233739570, -0.685345443184669720, -0.685309031422236310, -0.685272617946530270, -0.685236202757642740, -0.685199785855664660, -0.685163367240686490, +-0.685126946912800520, -0.685090524872097210, -0.685054101118667600, -0.685017675652602740, -0.684981248473993660, -0.684944819582931410, -0.684908388979507230, -0.684871956663812060, +-0.684835522635936280, -0.684799086895972350, -0.684762649444010770, -0.684726210280142470, -0.684689769404458690, -0.684653326817050490, -0.684616882518008340, -0.684580436507424730, +-0.684543988785389910, -0.684507539351995040, -0.684471088207331490, -0.684434635351490070, -0.684398180784562160, -0.684361724506638790, -0.684325266517811110, -0.684288806818169610, +-0.684252345407806770, -0.684215882286812960, -0.684179417455279550, -0.684142950913297580, -0.684106482660958190, -0.684070012698352550, -0.684033541025571350, -0.683997067642706850, +-0.683960592549849760, -0.683924115747091220, -0.683887637234522280, -0.683851157012234310, -0.683814675080318460, -0.683778191438865870, -0.683741706087967140, -0.683705219027714860, +-0.683668730258199410, -0.683632239779512260, -0.683595747591744460, -0.683559253694987380, -0.683522758089332050, -0.683486260774869180, -0.683449761751691360, -0.683413261019889200, +-0.683376758579553820, -0.683340254430776510, -0.683303748573648620, -0.683267241008261310, -0.683230731734705830, -0.683194220753073010, -0.683157708063455220, -0.683121193665943150, +-0.683084677560628180, -0.683048159747601470, -0.683011640226954380, -0.682975118998778160, -0.682938596063163430, -0.682902071420202980, -0.682865545069987200, -0.682829017012607680, +-0.682792487248155670, -0.682755955776722320, -0.682719422598399130, -0.682682887713277340, -0.682646351121448450, -0.682609812823002930, -0.682573272818033480, -0.682536731106630930, +-0.682500187688886540, -0.682463642564891670, -0.682427095734737700, -0.682390547198515440, -0.682353996956317270, -0.682317445008234210, -0.682280891354357540, -0.682244335994778630, +-0.682207778929588950, -0.682171220158879770, -0.682134659682742450, -0.682098097501268600, -0.682061533614548800, -0.682024968022675870, -0.681988400725740520, -0.681951831723834110, +-0.681915261017048140, -0.681878688605473960, -0.681842114489203180, -0.681805538668326380, -0.681768961142936390, -0.681732381913124020, -0.681695800978980750, -0.681659218340597840, +-0.681622633998067000, -0.681586047951479590, -0.681549460200926990, -0.681512870746500130, -0.681476279588291710, -0.681439686726392550, -0.681403092160894230, -0.681366495891888140, +-0.681329897919465970, -0.681293298243718870, -0.681256696864738000, -0.681220093782615940, -0.681183488997443630, -0.681146882509312660, -0.681110274318314500, -0.681073664424540650, +-0.681037052828082580, -0.681000439529031890, -0.680963824527479500, -0.680927207823518230, -0.680890589417238790, -0.680853969308732990, -0.680817347498092310, -0.680780723985408230, +-0.680744098770772240, -0.680707471854275490, -0.680670843236010570, -0.680634212916068740, -0.680597580894541140, -0.680560947171519710, -0.680524311747095930, -0.680487674621361390, +-0.680451035794407580, -0.680414395266326300, -0.680377753037208270, -0.680341109107146510, -0.680304463476232080, -0.680267816144556340, -0.680231167112211210, -0.680194516379288070, +-0.680157863945878070, -0.680121209812073910, -0.680084553977966850, -0.680047896443648380, -0.680011237209210200, -0.679974576274743890, -0.679937913640341170, -0.679901249306093640, +-0.679864583272092980, -0.679827915538430140, -0.679791246105198250, -0.679754574972488260, -0.679717902140391850, -0.679681227609000630, -0.679644551378406400, -0.679607873448700110, +-0.679571193819974660, -0.679534512492321440, -0.679497829465831820, -0.679461144740597600, -0.679424458316710610, -0.679387770194262440, -0.679351080373344800, -0.679314388854049490, +-0.679277695636467560, -0.679241000720692050, -0.679204304106813980, -0.679167605794925300, -0.679130905785117480, -0.679094204077482440, -0.679057500672111790, -0.679020795569096890, +-0.678984088768530560, -0.678947380270504050, -0.678910670075109080, -0.678873958182437450, -0.678837244592580880, -0.678800529305631170, -0.678763812321680260, -0.678727093640819070, +-0.678690373263140740, -0.678653651188736660, -0.678616927417698300, -0.678580201950117700, -0.678543474786086560, -0.678506745925696710, -0.678470015369039390, -0.678433283116207650, +-0.678396549167292750, -0.678359813522386500, -0.678323076181580610, -0.678286337144967110, -0.678249596412637710, -0.678212853984684340, -0.678176109861198920, -0.678139364042272490, +-0.678102616527998300, -0.678065867318467630, -0.678029116413772170, -0.677992363814004070, -0.677955609519254930, -0.677918853529616230, -0.677882095845181000, -0.677845336466040500, +-0.677808575392286670, -0.677771812624011430, -0.677735048161306590, -0.677698282004264190, -0.677661514152976040, -0.677624744607534190, -0.677587973368029780, -0.677551200434556080, +-0.677514425807204330, -0.677477649486066590, -0.677440871471234770, -0.677404091762800700, -0.677367310360855730, -0.677330527265493140, -0.677293742476804290, -0.677256955994881120, +-0.677220167819815420, -0.677183377951699360, -0.677146586390624860, -0.677109793136683960, -0.677072998189968470, -0.677036201550569870, -0.676999403218581430, -0.676962603194094510, +-0.676925801477201050, -0.676888998067993080, -0.676852192966562630, -0.676815386173001740, -0.676778577687401680, -0.676741767509855820, -0.676704955640455630, -0.676668142079292930, +-0.676631326826459880, -0.676594509882048610, -0.676557691246150950, -0.676520870918859150, -0.676484048900264480, -0.676447225190460410, -0.676410399789538210, -0.676373572697590020, +-0.676336743914707880, -0.676299913440983950, -0.676263081276510250, -0.676226247421378050, -0.676189411875681050, -0.676152574639510400, -0.676115735712958350, -0.676078895096116960, +-0.676042052789078360, -0.676005208791934600, -0.675968363104777810, -0.675931515727700160, -0.675894666660793010, -0.675857815904149840, -0.675820963457862130, -0.675784109322022040, +-0.675747253496721710, -0.675710395982053290, -0.675673536778108150, -0.675636675884979780, -0.675599813302759760, -0.675562949031540240, -0.675526083071413370, -0.675489215422471200, +-0.675452346084806090, -0.675415475058509960, -0.675378602343675300, -0.675341727940393380, -0.675304851848757880, -0.675267974068860190, -0.675231094600792560, -0.675194213444647250, +-0.675157330600516410, -0.675120446068491530, -0.675083559848666190, -0.675046671941131990, -0.675009782345981080, -0.674972891063305820, -0.674935998093198150, -0.674899103435750660, +-0.674862207091055270, -0.674825309059204460, -0.674788409340289720, -0.674751507934404530, -0.674714604841640590, -0.674677700062090270, -0.674640793595845500, -0.674603885442998870, +-0.674566975603642540, -0.674530064077868090, -0.674493150865769110, -0.674456235967437310, -0.674419319382964840, -0.674382401112444070, -0.674345481155967370, -0.674308559513626890, +-0.674271636185515110, -0.674234711171723510, -0.674197784472345800, -0.674160856087473670, -0.674123926017199280, -0.674086994261615220, -0.674050060820813530, -0.674013125694886810, +-0.673976188883926630, -0.673939250388026600, -0.673902310207278420, -0.673865368341774460, -0.673828424791607090, -0.673791479556868690, -0.673754532637651500, -0.673717584034048130, +-0.673680633746150730, -0.673643681774050980, -0.673606728117842830, -0.673569772777617870, -0.673532815753468350, -0.673495857045486870, -0.673458896653765680, -0.673421934578396720, +-0.673384970819473460, -0.673348005377087830, -0.673311038251332210, -0.673274069442298950, -0.673237098950080550, -0.673200126774769370, -0.673163152916457900, -0.673126177375238500, +-0.673089200151202990, -0.673052221244445190, -0.673015240655056910, -0.672978258383130410, -0.672941274428758280, -0.672904288792033010, -0.672867301473046410, -0.672830312471892070, +-0.672793321788662020, -0.672756329423448650, -0.672719335376344540, -0.672682339647441950, -0.672645342236833590, -0.672608343144611930, -0.672571342370869350, -0.672534339915697780, +-0.672497335779191020, -0.672460329961440890, -0.672423322462539890, -0.672386313282580690, -0.672349302421655580, -0.672312289879857250, -0.672275275657277630, -0.672238259754010410, +-0.672201242170147540, -0.672164222905781590, -0.672127201961005170, -0.672090179335910640, -0.672053155030590600, -0.672016129045137740, -0.671979101379643890, -0.671942072034202980, +-0.671905041008906910, -0.671868008303848190, -0.671830973919119500, -0.671793937854813340, -0.671756900111022290, -0.671719860687838400, -0.671682819585355470, -0.671645776803665550, +-0.671608732342861110, -0.671571686203034870, -0.671534638384279400, -0.671497588886687420, -0.671460537710351410, -0.671423484855363300, -0.671386430321817330, -0.671349374109805110, +-0.671312316219419560, -0.671275256650753160, -0.671238195403898620, -0.671201132478948640, -0.671164067875995140, -0.671127001595132170, -0.671089933636451640, -0.671052864000046380, +-0.671015792686008860, -0.670978719694431900, -0.670941645025408100, -0.670904568679030140, -0.670867490655390860, -0.670830410954582180, -0.670793329576698130, -0.670756246521830750, +-0.670719161790072740, -0.670682075381516810, -0.670644987296255660, -0.670607897534381440, -0.670570806095988180, -0.670533712981167820, -0.670496618190013270, -0.670459521722617140, +-0.670422423579072110, -0.670385323759471130, -0.670348222263906780, -0.670311119092471990, -0.670274014245258560, -0.670236907722360890, -0.670199799523870880, -0.670162689649881460, +-0.670125578100485230, -0.670088464875775110, -0.670051349975843810, -0.670014233400783480, -0.669977115150688140, -0.669939995225650180, -0.669902873625762060, -0.669865750351116840, +-0.669828625401807320, -0.669791498777926100, -0.669754370479566210, -0.669717240506819690, -0.669680108859780800, -0.669642975538541570, -0.669605840543194940, -0.669568703873833710, +-0.669531565530550710, -0.669494425513438740, -0.669457283822590070, -0.669420140458098940, -0.669382995420057410, -0.669345848708558290, -0.669308700323694720, -0.669271550265559290, +-0.669234398534245050, -0.669197245129844690, -0.669160090052450700, -0.669122933302157110, -0.669085774879056070, -0.669048614783240740, -0.669011453014803800, -0.668974289573838200, +-0.668937124460436960, -0.668899957674692240, -0.668862789216698280, -0.668825619086547360, -0.668788447284332290, -0.668751273810146210, -0.668714098664081820, -0.668676921846232290, +-0.668639743356690520, -0.668602563195549230, -0.668565381362901000, -0.668528197858839990, -0.668491012683458340, -0.668453825836849310, -0.668416637319105610, -0.668379447130320380, +-0.668342255270585770, -0.668305061739996380, -0.668267866538644120, -0.668230669666622370, -0.668193471124023830, -0.668156270910941650, -0.668119069027468760, -0.668081865473698300, +-0.668044660249723090, -0.668007453355635490, -0.667970244791530110, -0.667933034557498970, -0.667895822653635340, -0.667858609080032140, -0.667821393836782300, -0.667784176923979070, +-0.667746958341714820, -0.667709738090083720, -0.667672516169178330, -0.667635292579091600, -0.667598067319916670, -0.667560840391746570, -0.667523611794674340, -0.667486381528793030, +-0.667449149594195210, -0.667411915990975160, -0.667374680719225340, -0.667337443779038700, -0.667300205170508590, -0.667262964893727940, -0.667225722948789790, -0.667188479335786730, +-0.667151234054813140, -0.667113987105961480, -0.667076738489324810, -0.667039488204996370, -0.667002236253069090, -0.666964982633636350, -0.666927727346791070, -0.666890470392625830, +-0.666853211771235130, -0.666815951482711330, -0.666778689527147690, -0.666741425904637250, -0.666704160615273270, -0.666666893659149000, -0.666629625036356700, -0.666592354746991080, +-0.666555082791144500, -0.666517809168910350, -0.666480533880381530, -0.666443256925651430, -0.666405978304813180, -0.666368698017960060, -0.666331416065185090, -0.666294132446580980, +-0.666256847162242210, -0.666219560212261250, -0.666182271596731490, -0.666144981315745950, -0.666107689369398010, -0.666070395757780150, -0.666033100480986960, -0.665995803539111140, +-0.665958504932245620, -0.665921204660483990, -0.665883902723919290, -0.665846599122644880, -0.665809293856753910, -0.665771986926339760, -0.665734678331494910, -0.665697368072314060, +-0.665660056148889790, -0.665622742561315480, -0.665585427309684170, -0.665548110394089340, -0.665510791814624250, -0.665473471571381480, -0.665436149664455740, -0.665398826093939630, +-0.665361500859926400, -0.665324173962509420, -0.665286845401782070, -0.665249515177837590, -0.665212183290769250, -0.665174849740669870, -0.665137514527634030, -0.665100177651754330, +-0.665062839113124250, -0.665025498911837040, -0.664988157047986080, -0.664950813521664740, -0.664913468332965720, -0.664876121481983720, -0.664838772968811330, -0.664801422793542150, +-0.664764070956269220, -0.664726717457086220, -0.664689362296086440, -0.664652005473363230, -0.664614646989009410, -0.664577286843119560, -0.664539925035786520, -0.664502561567103630, +-0.664465196437164400, -0.664427829646062060, -0.664390461193890220, -0.664353091080741590, -0.664315719306710850, -0.664278345871890830, -0.664240970776375010, -0.664203594020256750, +-0.664166215603629430, -0.664128835526586640, -0.664091453789221630, -0.664054070391628120, -0.664016685333898790, -0.663979298616128370, -0.663941910238409650, -0.663904520200836230, +-0.663867128503501380, -0.663829735146498790, -0.663792340129921280, -0.663754943453863430, -0.663717545118418410, -0.663680145123679340, -0.663642743469740060, -0.663605340156693810, +-0.663567935184634310, -0.663530528553654910, -0.663493120263849210, -0.663455710315309920, -0.663418298708132180, -0.663380885442408590, -0.663343470518232840, -0.663306053935698410, +-0.663268635694898910, -0.663231215795927700, -0.663193794238877920, -0.663156371023844170, -0.663118946150919600, -0.663081519620197680, -0.663044091431771900, -0.663006661585735850, +-0.662969230082183230, -0.662931796921207520, -0.662894362102901650, -0.662856925627360540, -0.662819487494677120, -0.662782047704944980, -0.662744606258257600, -0.662707163154708900, +-0.662669718394392150, -0.662632271977400490, -0.662594823903828840, -0.662557374173770140, -0.662519922787317970, -0.662482469744565930, -0.662445015045607820, -0.662407558690537130, +-0.662370100679447570, -0.662332641012432060, -0.662295179689585620, -0.662257716711001310, -0.662220252076772600, -0.662182785786993300, -0.662145317841757010, -0.662107848241157430, +-0.662070376985287590, -0.662032904074242530, -0.661995429508115070, -0.661957953286999130, -0.661920475410988310, -0.661882995880176290, -0.661845514694656800, -0.661808031854523530, +-0.661770547359870060, -0.661733061210789670, -0.661695573407377280, -0.661658083949725920, -0.661620592837929400, -0.661583100072081320, -0.661545605652275600, -0.661508109578605170, +-0.661470611851165070, -0.661433112470048550, -0.661395611435349080, -0.661358108747160720, -0.661320604405577050, -0.661283098410691880, -0.661245590762598920, -0.661208081461391980, +-0.661170570507164210, -0.661133057900010760, -0.661095543640024540, -0.661058027727299490, -0.661020510161929420, -0.660982990944008030, -0.660945470073629140, -0.660907947550885890, +-0.660870423375873540, -0.660832897548685020, -0.660795370069414360, -0.660757840938155260, -0.660720310155001430, -0.660682777720047020, -0.660645243633385500, -0.660607707895110360, +-0.660570170505316520, -0.660532631464097240, -0.660495090771546330, -0.660457548427757830, -0.660420004432825450, -0.660382458786842990, -0.660344911489903710, -0.660307362542102870, +-0.660269811943533510, -0.660232259694289780, -0.660194705794465260, -0.660157150244154110, -0.660119593043450030, -0.660082034192446930, -0.660044473691238090, -0.660006911539918750, +-0.659969347738582180, -0.659931782287322190, -0.659894215186232700, -0.659856646435407760, -0.659819076034941170, -0.659781503984926190, -0.659743930285458080, -0.659706354936630210, +-0.659668777938536510, -0.659631199291270790, -0.659593618994927080, -0.659556037049599310, -0.659518453455381510, -0.659480868212367510, -0.659443281320650660, -0.659405692780326350, +-0.659368102591487810, -0.659330510754228990, -0.659292917268643810, -0.659255322134826400, -0.659217725352870040, -0.659180126922870090, -0.659142526844919700, -0.659104925119113010, +-0.659067321745544050, -0.659029716724306770, -0.658992110055495180, -0.658954501739203340, -0.658916891775525260, -0.658879280164554330, -0.658841666906385790, -0.658804052001113140, +-0.658766435448830290, -0.658728817249631390, -0.658691197403610370, -0.658653575910861490, -0.658615952771477890, -0.658578327985555160, -0.658540701553186560, -0.658503073474466240, +-0.658465443749488230, -0.658427812378346580, -0.658390179361135420, -0.658352544697948790, -0.658314908388880180, -0.658277270434024950, -0.658239630833476470, -0.658201989587329010, +-0.658164346695676580, -0.658126702158613240, -0.658089055976233130, -0.658051408148629720, -0.658013758675898510, -0.657976107558132850, -0.657938454795426900, -0.657900800387874910, +-0.657863144335570800, -0.657825486638608960, -0.657787827297083290, -0.657750166311087400, -0.657712503680716880, -0.657674839406064970, -0.657637173487225950, -0.657599505924294060, +-0.657561836717363460, -0.657524165866528180, -0.657486493371881810, -0.657448819233519940, -0.657411143451535950, -0.657373466026024200, -0.657335786957078730, -0.657298106244793790, +-0.657260423889263530, -0.657222739890582330, -0.657185054248844210, -0.657147366964142780, -0.657109678036573610, -0.657071987466230190, -0.657034295253206890, -0.656996601397597860, +-0.656958905899497240, -0.656921208758998730, -0.656883509976197820, -0.656845809551188210, -0.656808107484064040, -0.656770403774919690, -0.656732698423849180, -0.656694991430947010, +-0.656657282796307420, -0.656619572520024560, -0.656581860602192040, -0.656544147042905650, -0.656506431842258760, -0.656468715000345870, -0.656430996517261220, -0.656393276393099080, +-0.656355554627953030, -0.656317831221918780, -0.656280106175089920, -0.656242379487560920, -0.656204651159425830, -0.656166921190779130, -0.656129189581715180, -0.656091456332328240, +-0.656053721442712680, -0.656015984912962090, -0.655978246743172290, -0.655940506933436750, -0.655902765483850070, -0.655865022394506390, -0.655827277665500200, -0.655789531296925850, +-0.655751783288876950, -0.655714033641449310, -0.655676282354736520, -0.655638529428833050, -0.655600774863833280, -0.655563018659831460, -0.655525260816922200, -0.655487501335199840, +-0.655449740214757990, -0.655411977455692460, -0.655374213058096950, -0.655336447022065950, -0.655298679347693810, -0.655260910035075030, -0.655223139084303850, -0.655185366495474320, +-0.655147592268681910, -0.655109816404020550, -0.655072038901584720, -0.655034259761468670, -0.654996478983767120, -0.654958696568574310, -0.654920912515984720, -0.654883126826092840, +-0.654845339498992480, -0.654807550534779460, -0.654769759933547580, -0.654731967695391330, -0.654694173820405180, -0.654656378308683510, -0.654618581160320230, -0.654580782375411170, +-0.654542981954050250, -0.654505179896331720, -0.654467376202350400, -0.654429570872200550, -0.654391763905976750, -0.654353955303773600, -0.654316145065685580, -0.654278333191806390, +-0.654240519682232180, -0.654202704537056650, -0.654164887756374270, -0.654127069340279750, -0.654089249288867580, -0.654051427602231560, -0.654013604280467620, -0.653975779323669790, +-0.653937952731932450, -0.653900124505350180, -0.653862294644017570, -0.653824463148029330, -0.653786630017479830, -0.653748795252463880, -0.653710958853075170, -0.653673120819409760, +-0.653635281151561550, -0.653597439849625150, -0.653559596913695140, -0.653521752343866110, -0.653483906140232770, -0.653446058302888930, -0.653408208831930630, -0.653370357727451890, +-0.653332504989547090, -0.653294650618311160, -0.653256794613838570, -0.653218936976224020, -0.653181077705562110, -0.653143216801946870, -0.653105354265474110, -0.653067490096238100, +-0.653029624294333310, -0.652991756859854560, -0.652953887792896310, -0.652916017093553290, -0.652878144761919630, -0.652840270798091370, -0.652802395202162320, -0.652764517974227300, +-0.652726639114381000, -0.652688758622718130, -0.652650876499333290, -0.652612992744321390, -0.652575107357776910, -0.652537220339794000, -0.652499331690468700, -0.652461441409895040, +-0.652423549498167830, -0.652385655955381780, -0.652347760781631480, -0.652309863977011180, -0.652271965541616930, -0.652234065475542750, -0.652196163778883340, -0.652158260451733530, +-0.652120355494188120, -0.652082448906341820, -0.652044540688289320, -0.652006630840125560, -0.651968719361944560, -0.651930806253842370, -0.651892891515913230, -0.651854975148251750, +-0.651817057150952950, -0.651779137524111430, -0.651741216267821440, -0.651703293382179030, -0.651665368867278440, -0.651627442723214380, -0.651589514950081770, -0.651551585547975320, +-0.651513654516989950, -0.651475721857220470, -0.651437787568761580, -0.651399851651707660, -0.651361914106154740, -0.651323974932197070, -0.651286034129929360, -0.651248091699446640, +-0.651210147640843730, -0.651172201954215320, -0.651134254639655910, -0.651096305697261400, -0.651058355127126180, -0.651020402929345040, -0.650982449104012930, -0.650944493651224640, +-0.650906536571075220, -0.650868577863659370, -0.650830617529071450, -0.650792655567407620, -0.650754691978762120, -0.650716726763230000, -0.650678759920905960, -0.650640791451885030, +-0.650602821356262240, -0.650564849634131640, -0.650526876285589580, -0.650488901310730340, -0.650450924709648830, -0.650412946482439970, -0.650374966629198800, -0.650336985150020250, +-0.650299002044999240, -0.650261017314230030, -0.650223030957808870, -0.650185042975830240, -0.650147053368388850, -0.650109062135579950, -0.650071069277498470, -0.650033074794239220, +-0.649995078685896570, -0.649957080952566990, -0.649919081594344640, -0.649881080611324550, -0.649843078003601860, -0.649805073771271390, -0.649767067914428290, -0.649729060433167470, +-0.649691051327584090, -0.649653040597772400, -0.649615028243828660, -0.649577014265847460, -0.649538998663923730, -0.649500981438152380, -0.649462962588628680, -0.649424942115446880, +-0.649386920018703460, -0.649348896298492680, -0.649310870954909580, -0.649272843988049410, -0.649234815398007200, -0.649196785184877780, -0.649158753348756500, -0.649120719889738300, +-0.649082684807917640, -0.649044648103390910, -0.649006609776252570, -0.648968569826597790, -0.648930528254521470, -0.648892485060118980, -0.648854440243485150, -0.648816393804714560, +-0.648778345743903690, -0.648740296061146910, -0.648702244756539370, -0.648664191830176320, -0.648626137282152790, -0.648588081112563830, -0.648550023321504690, -0.648511963909069840, +-0.648473902875355780, -0.648435840220456860, -0.648397775944468460, -0.648359710047485600, -0.648321642529603450, -0.648283573390917130, -0.648245502631521250, -0.648207430251512280, +-0.648169356250984710, -0.648131280630033780, -0.648093203388754760, -0.648055124527242570, -0.648017044045592570, -0.647978961943900030, -0.647940878222259430, -0.647902792880767240, +-0.647864705919518170, -0.647826617338607250, -0.647788527138129840, -0.647750435318180990, -0.647712341878856180, -0.647674246820249770, -0.647636150142458460, -0.647598051845576840, +-0.647559951929699950, -0.647521850394923270, -0.647483747241341940, -0.647445642469051230, -0.647407536078146490, -0.647369428068722770, -0.647331318440874880, -0.647293207194699400, +-0.647255094330290830, -0.647216979847744620, -0.647178863747155940, -0.647140746028620040, -0.647102626692231620, -0.647064505738087270, -0.647026383166281800, -0.646988258976910260, +-0.646950133170068110, -0.646912005745850620, -0.646873876704353030, -0.646835746045670850, -0.646797613769899300, -0.646759479877133000, -0.646721344367468640, -0.646683207241001030, +-0.646645068497825330, -0.646606928138037000, -0.646568786161731300, -0.646530642569003610, -0.646492497359948740, -0.646454350534663270, -0.646416202093241910, -0.646378052035780030, +-0.646339900362372990, -0.646301747073116270, -0.646263592168105140, -0.646225435647435060, -0.646187277511200640, -0.646149117759498790, -0.646110956392424110, -0.646072793410072070, +-0.646034628812538040, -0.645996462599917390, -0.645958294772305600, -0.645920125329797370, -0.645881954272489620, -0.645843781600476840, -0.645805607313854720, -0.645767431412718530, +-0.645729253897163740, -0.645691074767285930, -0.645652894023180270, -0.645614711664941780, -0.645576527692667160, -0.645538342106451330, -0.645500154906389570, -0.645461966092577330, +-0.645423775665110330, -0.645385583624083830, -0.645347389969592620, -0.645309194701733650, -0.645270997820601710, -0.645232799326292290, -0.645194599218900880, -0.645156397498523050, +-0.645118194165254070, -0.645079989219189630, -0.645041782660425330, -0.645003574489055760, -0.644965364705178070, -0.644927153308886840, -0.644888940300277770, -0.644850725679446460, +-0.644812509446488160, -0.644774291601498020, -0.644736072144572740, -0.644697851075807350, -0.644659628395297330, -0.644621404103138280, -0.644583178199425680, -0.644544950684255100, +-0.644506721557722150, -0.644468490819922410, -0.644430258470950810, -0.644392024510904160, -0.644353788939877490, -0.644315551757966400, -0.644277312965266360, -0.644239072561873070, +-0.644200830547882020, -0.644162586923388350, -0.644124341688488760, -0.644086094843278390, -0.644047846387852730, -0.644009596322307590, -0.643971344646738330, -0.643933091361240770, +-0.643894836465910390, -0.643856579960842330, -0.643818321846133520, -0.643780062121878880, -0.643741800788174000, -0.643703537845114690, -0.643665273292796550, -0.643627007131315270, +-0.643588739360765660, -0.643550469981244990, -0.643512198992848060, -0.643473926395670690, -0.643435652189808470, -0.643397376375357210, -0.643359098952412390, -0.643320819921069930, +-0.643282539281424650, -0.643244257033573800, -0.643205973177612190, -0.643167687713635750, -0.643129400641740070, -0.643091111962020840, -0.643052821674573780, -0.643014529779494140, +-0.642976236276878720, -0.642937941166822790, -0.642899644449421940, -0.642861346124772080, -0.642823046192968820, -0.642784744654107840, -0.642746441508285080, -0.642708136755596240, +-0.642669830396136450, -0.642631522430002660, -0.642593212857289990, -0.642554901678094370, -0.642516588892511510, -0.642478274500637210, -0.642439958502566520, -0.642401640898396580, +-0.642363321688222520, -0.642325000872140170, -0.642286678450245450, -0.642248354422633840, -0.642210028789401480, -0.642171701550643960, -0.642133372706457210, -0.642095042256936370, +-0.642056710202178580, -0.642018376542279110, -0.641980041277333550, -0.641941704407437920, -0.641903365932688150, -0.641865025853179840, -0.641826684169008340, -0.641788340880270810, +-0.641749995987062390, -0.641711649489479010, -0.641673301387616470, -0.641634951681570700, -0.641596600371437620, -0.641558247457312940, -0.641519892939292010, -0.641481536817472000, +-0.641443179091948150, -0.641404819762816380, -0.641366458830172630, -0.641328096294112580, -0.641289732154732390, -0.641251366412127210, -0.641212999066394170, -0.641174630117628760, +-0.641136259565926680, -0.641097887411384070, -0.641059513654096640, -0.641021138294160410, -0.640982761331671420, -0.640944382766724830, -0.640906002599417880, -0.640867620829846050, +-0.640829237458105050, -0.640790852484291020, -0.640752465908499880, -0.640714077730827560, -0.640675687951369310, -0.640637296570222610, -0.640598903587482620, -0.640560509003245350, +-0.640522112817606850, -0.640483715030663040, -0.640445315642509950, -0.640406914653243510, -0.640368512062959860, -0.640330107871754260, -0.640291702079724080, -0.640253294686964570, +-0.640214885693571880, -0.640176475099641930, -0.640138062905270870, -0.640099649110553950, -0.640061233715588540, -0.640022816720470010, -0.639984398125294510, -0.639945977930157950, +-0.639907556135156600, -0.639869132740386260, -0.639830707745943080, -0.639792281151923100, -0.639753852958421800, -0.639715423165536530, -0.639676991773362680, -0.639638558781996380, +-0.639600124191533670, -0.639561688002070580, -0.639523250213703380, -0.639484810826527310, -0.639446369840639960, -0.639407927256136600, -0.639369483073113480, -0.639331037291666630, +-0.639292589911892200, -0.639254140933886330, -0.639215690357745060, -0.639177238183563870, -0.639138784411440340, -0.639100329041469740, -0.639061872073748430, -0.639023413508372330, +-0.638984953345437810, -0.638946491585040800, -0.638908028227276990, -0.638869563272243650, -0.638831096720036570, -0.638792628570751590, -0.638754158824485160, -0.638715687481333230, +-0.638677214541392150, -0.638638740004758070, -0.638600263871526350, -0.638561786141794710, -0.638523306815658610, -0.638484825893214200, -0.638446343374557860, -0.638407859259785490, +-0.638369373548993590, -0.638330886242277520, -0.638292397339734970, -0.638253906841461330, -0.638215414747552940, -0.638176921058106080, -0.638138425773216890, -0.638099928892981620, +-0.638061430417496630, -0.638022930346857970, -0.637984428681161340, -0.637945925420504210, -0.637907420564982400, -0.637868914114691930, -0.637830406069729290, -0.637791896430190520, +-0.637753385196171420, -0.637714872367769470, -0.637676357945080370, -0.637637841928200390, -0.637599324317225770, -0.637560805112252880, -0.637522284313377980, -0.637483761920697330, +-0.637445237934307300, -0.637406712354303570, -0.637368185180783640, -0.637329656413843200, -0.637291126053578740, -0.637252594100086390, -0.637214060553462640, -0.637175525413803620, +-0.637136988681205160, -0.637098450355764960, -0.637059910437578590, -0.637021368926742440, -0.636982825823352860, -0.636944281127506230, -0.636905734839298910, -0.636867186958827160, +-0.636828637486186900, -0.636790086421475610, -0.636751533764789210, -0.636712979516223960, -0.636674423675876230, -0.636635866243842390, -0.636597307220218900, -0.636558746605101480, +-0.636520184398587930, -0.636481620600773850, -0.636443055211755810, -0.636404488231630090, -0.636365919660493050, -0.636327349498441390, -0.636288777745571240, -0.636250204401978440, +-0.636211629467760890, -0.636173052943014180, -0.636134474827834920, -0.636095895122319450, -0.636057313826564160, -0.636018730940665740, -0.635980146464719680, -0.635941560398823990, +-0.635902972743074390, -0.635864383497567350, -0.635825792662399360, -0.635787200237666880, -0.635748606223466520, -0.635710010619894520, -0.635671413427047470, -0.635632814645021300, +-0.635594214273913720, -0.635555612313820630, -0.635517008764838410, -0.635478403627063760, -0.635439796900593050, -0.635401188585522190, -0.635362578681949120, -0.635323967189969530, +-0.635285354109680010, -0.635246739441177160, -0.635208123184557440, -0.635169505339917340, -0.635130885907353560, -0.635092264886962580, -0.635053642278840200, -0.635015018083084360, +-0.634976392299791080, -0.634937764929056740, -0.634899135970978020, -0.634860505425651530, -0.634821873293172970, -0.634783239573640470, -0.634744604267149850, -0.634705967373797700, +-0.634667328893680720, -0.634628688826895380, -0.634590047173538290, -0.634551403933706020, -0.634512759107495380, -0.634474112695002090, -0.634435464696324170, -0.634396815111557650, +-0.634358163940799020, -0.634319511184145090, -0.634280856841692330, -0.634242200913537340, -0.634203543399776250, -0.634164884300506990, -0.634126223615825490, -0.634087561345828440, +-0.634048897490612550, -0.634010232050274290, -0.633971565024910590, -0.633932896414617920, -0.633894226219492320, -0.633855554439631820, -0.633816881075132450, -0.633778206126090820, +-0.633739529592603820, -0.633700851474767850, -0.633662171772679810, -0.633623490486435630, -0.633584807616133450, -0.633546123161869310, -0.633507437123739690, -0.633468749501841620, +-0.633430060296271690, -0.633391369507126490, -0.633352677134502940, -0.633313983178497630, -0.633275287639206820, -0.633236590516728310, -0.633197891811158490, -0.633159191522593810, +-0.633120489651131210, -0.633081786196867390, -0.633043081159898380, -0.633004374540322320, -0.632965666338235370, -0.632926956553734320, -0.632888245186915780, -0.632849532237876660, +-0.632810817706713770, -0.632772101593523820, -0.632733383898403500, -0.632694664621449190, -0.632655943762758800, -0.632617221322428590, -0.632578497300555260, -0.632539771697235740, +-0.632501044512566830, -0.632462315746644580, -0.632423585399567220, -0.632384853471430920, -0.632346119962332480, -0.632307384872368820, -0.632268648201636530, -0.632229909950232760, +-0.632191170118254100, -0.632152428705797580, -0.632113685712959340, -0.632074941139837530, -0.632036194986528410, -0.631997447253128670, -0.631958697939735470, -0.631919947046445500, +-0.631881194573355560, -0.631842440520562040, -0.631803684888163080, -0.631764927676254920, -0.631726168884934380, -0.631687408514298500, -0.631648646564444080, -0.631609883035467940, +-0.631571117927467230, -0.631532351240537970, -0.631493582974778530, -0.631454813130285180, -0.631416041707154710, -0.631377268705484270, -0.631338494125370580, -0.631299717966910650, +-0.631260940230200740, -0.631222160915339110, -0.631183380022422140, -0.631144597551546730, -0.631105813502809810, -0.631067027876308310, -0.631028240672139250, -0.630989451890399680, +-0.630950661531186400, -0.630911869594595780, -0.630873076080726180, -0.630834280989673980, -0.630795484321535980, -0.630756686076409330, -0.630717886254390960, -0.630679084855577110, +-0.630640281880066270, -0.630601477327954680, -0.630562671199339510, -0.630523863494317660, -0.630485054212986060, -0.630446243355441860, -0.630407430921782090, -0.630368616912103660, +-0.630329801326503070, -0.630290984165078670, -0.630252165427926720, -0.630213345115144490, -0.630174523226828760, -0.630135699763076820, -0.630096874723984900, -0.630058048109651490, +-0.630019219920172960, -0.629980390155646440, -0.629941558816168870, -0.629902725901837380, -0.629863891412749120, -0.629825055349001130, -0.629786217710690540, -0.629747378497913730, +-0.629708537710769070, -0.629669695349353130, -0.629630851413762960, -0.629592005904095590, -0.629553158820448270, -0.629514310162918030, -0.629475459931601260, -0.629436608126596630, +-0.629397754748000420, -0.629358899795909870, -0.629320043270422010, -0.629281185171634120, -0.629242325499643210, -0.629203464254546540, -0.629164601436440480, -0.629125737045423630, +-0.629086871081592450, -0.629048003545044090, -0.629009134435875690, -0.628970263754184410, -0.628931391500067490, -0.628892517673621420, -0.628853642274944780, -0.628814765304134050, +-0.628775886761286370, -0.628737006646499010, -0.628698124959869100, -0.628659241701493790, -0.628620356871470550, -0.628581470469896320, -0.628542582496867670, -0.628503692952483320, +-0.628464801836839730, -0.628425909150034160, -0.628387014892163860, -0.628348119063325880, -0.628309221663617020, -0.628270322693135760, -0.628231422151978690, -0.628192520040243170, +-0.628153616358026250, -0.628114711105425270, -0.628075804282537510, -0.628036895889460320, -0.627997985926290860, -0.627959074393125700, -0.627920161290063560, -0.627881246617201020, +-0.627842330374635330, -0.627803412562463970, -0.627764493180783870, -0.627725572229691940, -0.627686649709286780, -0.627647725619664980, -0.627608799960923890, -0.627569872733160780, +-0.627530943936473020, -0.627492013570957850, -0.627453081636712760, -0.627414148133834780, -0.627375213062420830, -0.627336276422569620, -0.627297338214377610, -0.627258398437942290, +-0.627219457093361020, -0.627180514180731060, -0.627141569700149780, -0.627102623651713880, -0.627063676035522160, -0.627024726851671320, -0.626985776100258520, -0.626946823781381330, +-0.626907869895137140, -0.626868914441623290, -0.626829957420937060, -0.626790998833175240, -0.626752038678436650, -0.626713076956817990, -0.626674113668416630, -0.626635148813330050, +-0.626596182391655490, -0.626557214403490550, -0.626518244848931820, -0.626479273728078100, -0.626440301041026330, -0.626401326787873750, -0.626362350968717950, -0.626323373583656200, +-0.626284394632785960, -0.626245414116204820, -0.626206432034009390, -0.626167448386298560, -0.626128463173169170, -0.626089476394718570, -0.626050488051044350, -0.626011498142243770, +-0.625972506668414640, -0.625933513629653440, -0.625894519026059190, -0.625855522857728610, -0.625816525124759160, -0.625777525827248440, -0.625738524965294030, -0.625699522538993190, +-0.625660518548443510, -0.625621512993742580, -0.625582505874987200, -0.625543497192276200, -0.625504486945706590, -0.625465475135375650, -0.625426461761380950, -0.625387446823820190, +-0.625348430322790190, -0.625309412258389650, -0.625270392630715710, -0.625231371439865740, -0.625192348685937320, -0.625153324369028040, -0.625114298489235500, -0.625075271046657170, +-0.625036242041390630, -0.624997211473532820, -0.624958179343182650, -0.624919145650437050, -0.624880110395393600, -0.624841073578149890, -0.624802035198803510, -0.624762995257452050, +-0.624723953754192320, -0.624684910689123460, -0.624645866062342290, -0.624606819873946510, -0.624567772124033580, -0.624528722812701330, -0.624489671940047230, -0.624450619506168980, +-0.624411565511163390, -0.624372509955129720, -0.624333452838164660, -0.624294394160366030, -0.624255333921831410, -0.624216272122658400, -0.624177208762944800, -0.624138143842787430, +-0.624099077362285430, -0.624060009321535710, -0.624020939720635990, -0.623981868559683850, -0.623942795838777100, -0.623903721558013320, -0.623864645717490340, -0.623825568317304960, +-0.623786489357556320, -0.623747408838341570, -0.623708326759758180, -0.623669243121904080, -0.623630157924876750, -0.623591071168774100, -0.623551982853693070, -0.623512892979732780, +-0.623473801546990280, -0.623434708555563270, -0.623395614005549440, -0.623356517897046600, -0.623317420230152570, -0.623278321004964830, -0.623239220221581400, -0.623200117880099100, +-0.623161013980617300, -0.623121908523233010, -0.623082801508043850, -0.623043692935147720, -0.623004582804642330, -0.622965471116624810, -0.622926357871194320, -0.622887243068448000, +-0.622848126708483440, -0.622809008791398670, -0.622769889317291270, -0.622730768286259280, -0.622691645698400300, -0.622652521553812230, -0.622613395852592120, -0.622574268594839220, +-0.622535139780650670, -0.622496009410124280, -0.622456877483357870, -0.622417744000449250, -0.622378608961496220, -0.622339472366596040, -0.622300334215847850, -0.622261194509348800, +-0.622222053247196820, -0.622182910429489700, -0.622143766056325260, -0.622104620127801430, -0.622065472644016020, -0.622026323605066270, -0.621987173011051440, -0.621948020862068570, +-0.621908867158215810, -0.621869711899590730, -0.621830555086291480, -0.621791396718415770, -0.621752236796060840, -0.621713075319326070, -0.621673912288308710, -0.621634747703106450, +-0.621595581563817330, -0.621556413870539280, -0.621517244623370100, -0.621478073822407940, -0.621438901467749830, -0.621399727559495240, -0.621360552097741210, -0.621321375082585890, +-0.621282196514127080, -0.621243016392462820, -0.621203834717691030, -0.621164651489908960, -0.621125466709215980, -0.621086280375709230, -0.621047092489486860, -0.621007903050646680, +-0.620968712059286830, -0.620929519515505120, -0.620890325419399700, -0.620851129771068490, -0.620811932570608630, -0.620772733818119700, -0.620733533513698980, -0.620694331657444360, +-0.620655128249453900, -0.620615923289825620, -0.620576716778656890, -0.620537508716047070, -0.620498299102093420, -0.620459087936894080, -0.620419875220546980, -0.620380660953150250, +-0.620341445134801830, -0.620302227765599850, -0.620263008845642230, -0.620223788375026340, -0.620184566353851770, -0.620145342782215780, -0.620106117660216390, -0.620066890987951760, +-0.620027662765519790, -0.619988432993018760, -0.619949201670545900, -0.619909968798200820, -0.619870734376080760, -0.619831498404283860, -0.619792260882908290, -0.619753021812051940, +-0.619713781191813080, -0.619674539022289860, -0.619635295303579530, -0.619596050035781550, -0.619556803218993650, -0.619517554853313610, -0.619478304938839710, -0.619439053475670080, +-0.619399800463902750, -0.619360545903635210, -0.619321289794967030, -0.619282032137995710, -0.619242772932819260, -0.619203512179535840, -0.619164249878243700, -0.619124986029040870, +-0.619085720632025600, -0.619046453687295270, -0.619007185194949570, -0.618967915155085980, -0.618928643567802530, -0.618889370433197470, -0.618850095751368960, -0.618810819522415230, +-0.618771541746433780, -0.618732262423524080, -0.618692981553783830, -0.618653699137311160, -0.618614415174204120, -0.618575129664561070, -0.618535842608480270, -0.618496554006059850, +-0.618457263857397970, -0.618417972162592310, -0.618378678921742360, -0.618339384134945710, -0.618300087802300610, -0.618260789923905320, -0.618221490499858080, -0.618182189530256390, +-0.618142887015199930, -0.618103582954786180, -0.618064277349113620, -0.618024970198280290, -0.617985661502384430, -0.617946351261524530, -0.617907039475798730, -0.617867726145305380, +-0.617828411270141990, -0.617789094850408230, -0.617749776886201700, -0.617710457377620760, -0.617671136324763780, -0.617631813727728800, -0.617592489586614390, -0.617553163901518040, +-0.617513836672539450, -0.617474507899776310, -0.617435177583326890, -0.617395845723289540, -0.617356512319762520, -0.617317177372844190, -0.617277840882633040, -0.617238502849226540, +-0.617199163272724500, -0.617159822153224510, -0.617120479490824940, -0.617081135285624250, -0.617041789537720600, -0.617002442247212570, -0.616963093414197750, -0.616923743038775840, +-0.616884391121044650, -0.616845037661102440, -0.616805682659047560, -0.616766326114978610, -0.616726968028993740, -0.616687608401191520, -0.616648247231669560, -0.616608884520527640, +-0.616569520267863490, -0.616530154473775680, -0.616490787138362360, -0.616451418261722120, -0.616412047843953310, -0.616372675885153650, -0.616333302385423050, -0.616293927344859220, +-0.616254550763560500, -0.616215172641625510, -0.616175792979152480, -0.616136411776240010, -0.616097029032986470, -0.616057644749490430, -0.616018258925849490, -0.615978871562163690, +-0.615939482658530710, -0.615900092215049040, -0.615860700231817050, -0.615821306708933310, -0.615781911646495650, -0.615742515044603980, -0.615703116903355880, -0.615663717222850070, +-0.615624316003185010, -0.615584913244459080, -0.615545508946770850, -0.615506103110218920, -0.615466695734901760, -0.615427286820917070, -0.615387876368364890, -0.615348464377343030, +-0.615309050847949960, -0.615269635780284370, -0.615230219174444650, -0.615190801030529370, -0.615151381348636340, -0.615111960128865600, -0.615072537371314950, -0.615033113076082990, +-0.614993687243268190, -0.614954259872969260, -0.614914830965284540, -0.614875400520312860, -0.614835968538151920, -0.614796535018901860, -0.614757099962660370, -0.614717663369526160, +-0.614678225239597700, -0.614638785572973800, -0.614599344369752940, -0.614559901630032930, -0.614520457353913920, -0.614481011541493700, -0.614441564192871100, -0.614402115308144480, +-0.614362664887412540, -0.614323212930773970, -0.614283759438327470, -0.614244304410170750, -0.614204847846404060, -0.614165389747125090, -0.614125930112432770, -0.614086468942425690, +-0.614047006237202320, -0.614007541996861470, -0.613968076221501070, -0.613928608911221140, -0.613889140066119720, -0.613849669686295510, -0.613810197771847090, -0.613770724322873160, +-0.613731249339472430, -0.613691772821743480, -0.613652294769785220, -0.613612815183695480, -0.613573334063574390, -0.613533851409519990, -0.613494367221630980, -0.613454881500006040, +-0.613415394244743890, -0.613375905455942560, -0.613336415133702070, -0.613296923278120690, -0.613257429889296880, -0.613217934967329570, -0.613178438512317460, -0.613138940524359130, +-0.613099441003553510, -0.613059939949999410, -0.613020437363794630, -0.612980933245039440, -0.612941427593831970, -0.612901920410270920, -0.612862411694455100, -0.612822901446483210, +-0.612783389666454070, -0.612743876354465700, -0.612704361510618360, -0.612664845135010180, -0.612625327227739880, -0.612585807788906260, -0.612546286818608120, -0.612506764316944170, +-0.612467240284013450, -0.612427714719913860, -0.612388187624745670, -0.612348658998607020, -0.612309128841596720, -0.612269597153813680, -0.612230063935356620, -0.612190529186324330, +-0.612150992906814960, -0.612111455096928990, -0.612071915756764230, -0.612032374886419820, -0.611992832485994340, -0.611953288555586840, -0.611913743095296110, -0.611874196105220980, +-0.611834647585459690, -0.611795097536112500, -0.611755545957277660, -0.611715992849053760, -0.611676438211540050, -0.611636882044835130, -0.611597324349038020, -0.611557765124246980, +-0.611518204370562150, -0.611478642088081780, -0.611439078276904910, -0.611399512937130240, -0.611359946068856910, -0.611320377672183610, -0.611280807747209390, -0.611241236294033150, +-0.611201663312753160, -0.611162088803469670, -0.611122512766280930, -0.611082935201285980, -0.611043356108583740, -0.611003775488273000, -0.610964193340452160, -0.610924609665221550, +-0.610885024462679340, -0.610845437732924660, -0.610805849476056320, -0.610766259692173350, -0.610726668381374790, -0.610687075543759560, -0.610647481179426690, -0.610607885288474320, +-0.610568287871002920, -0.610528688927110870, -0.610489088456897090, -0.610449486460460490, -0.610409882937900330, -0.610370277889314640, -0.610330671314804010, -0.610291063214466690, +-0.610251453588401720, -0.610211842436708120, -0.610172229759484930, -0.610132615556831180, -0.610092999828845790, -0.610053382575628020, -0.610013763797276010, -0.609974143493890340, +-0.609934521665569270, -0.609894898312411950, -0.609855273434517400, -0.609815647031984540, -0.609776019104912640, -0.609736389653400050, -0.609696758677547130, -0.609657126177452270, +-0.609617492153214700, -0.609577856604933350, -0.609538219532707370, -0.609498580936635780, -0.609458940816817840, -0.609419299173351690, -0.609379656006338140, -0.609340011315875340, +-0.609300365102062650, -0.609260717364998980, -0.609221068104783490, -0.609181417321515320, -0.609141765015292940, -0.609102111186216820, -0.609062455834385450, -0.609022798959897970, +-0.608983140562853410, -0.608943480643351130, -0.608903819201490060, -0.608864156237369450, -0.608824491751088440, -0.608784825742745510, -0.608745158212441240, -0.608705489160274000, +-0.608665818586343050, -0.608626146490747640, -0.608586472873586800, -0.608546797734959120, -0.608507121074965070, -0.608467442893703250, -0.608427763191272900, -0.608388081967773050, +-0.608348399223303080, -0.608308714957962020, -0.608269029171849220, -0.608229341865063830, -0.608189653037704450, -0.608149962689871540, -0.608110270821663800, -0.608070577433180270, +-0.608030882524520420, -0.607991186095783290, -0.607951488147067560, -0.607911788678473730, -0.607872087690100480, -0.607832385182047070, -0.607792681154412650, -0.607752975607296460, +-0.607713268540797880, -0.607673559955016150, -0.607633849850050530, -0.607594138225999500, -0.607554425082963870, -0.607514710421042210, -0.607474994240333800, -0.607435276540937870, +-0.607395557322953690, -0.607355836586480620, -0.607316114331617360, -0.607276390558464390, -0.607236665267120610, -0.607196938457685080, -0.607157210130257140, -0.607117480284936170, +-0.607077748921821650, -0.607038016041012600, -0.606998281642607940, -0.606958545726708150, -0.606918808293412050, -0.606879069342818990, -0.606839328875028230, -0.606799586890139130, +-0.606759843388251060, -0.606720098369462610, -0.606680351833874700, -0.606640603781585910, -0.606600854212695610, -0.606561103127303160, -0.606521350525507930, -0.606481596407409280, +-0.606441840773106810, -0.606402083622699540, -0.606362324956286500, -0.606322564773968290, -0.606282803075843700, -0.606243039862012110, -0.606203275132572880, -0.606163508887625490, +-0.606123741127268520, -0.606083971851603010, -0.606044201060727540, -0.606004428754741590, -0.605964654933744630, -0.605924879597835920, -0.605885102747115050, -0.605845324381681480, +-0.605805544501634490, -0.605765763107072970, -0.605725980198097760, -0.605686195774807650, -0.605646409837302000, -0.605606622385680300, -0.605566833420042140, -0.605527042940486090, +-0.605487250947113200, -0.605447457440022150, -0.605407662419312540, -0.605367865885083620, -0.605328067837435090, -0.605288268276466420, -0.605248467202277100, -0.605208664614966580, +-0.605168860514633700, -0.605129054901379470, -0.605089247775302490, -0.605049439136502440, -0.605009628985078710, -0.604969817321130980, -0.604930004144758730, -0.604890189456060660, +-0.604850373255137910, -0.604810555542089180, -0.604770736317014060, -0.604730915580012130, -0.604691093331182870, -0.604651269570625980, -0.604611444298440830, -0.604571617514726430, +-0.604531789219583620, -0.604491959413111400, -0.604452128095409160, -0.604412295266576690, -0.604372460926713480, -0.604332625075919120, -0.604292787714292510, -0.604252948841934590, +-0.604213108458944380, -0.604173266565421360, -0.604133423161465120, -0.604093578247175360, -0.604053731822651650, -0.604013883887993600, -0.603974034443300110, -0.603934183488672340, +-0.603894331024208970, -0.603854477050009940, -0.603814621566174600, -0.603774764572802770, -0.603734906069993920, -0.603695046057847180, -0.603655184536463500, -0.603615321505941880, +-0.603575456966382040, -0.603535590917883450, -0.603495723360545910, -0.603455854294469020, -0.603415983719752580, -0.603376111636496180, -0.603336238044798740, -0.603296362944761410, +-0.603256486336483210, -0.603216608220063730, -0.603176728595602780, -0.603136847463200070, -0.603096964822954380, -0.603057080674967110, -0.603017195019337040, -0.602977307856164100, +-0.602937419185547770, -0.602897529007587970, -0.602857637322384400, -0.602817744130036640, -0.602777849430644610, -0.602737953224307120, -0.602698055511125540, -0.602658156291198790, +-0.602618255564626670, -0.602578353331508890, -0.602538449591945250, -0.602498544346035560, -0.602458637593878630, -0.602418729335575940, -0.602378819571226410, -0.602338908300929840, +-0.602298995524785940, -0.602259081242894620, -0.602219165455355480, -0.602179248162268530, -0.602139329363732710, -0.602099409059849380, -0.602059487250717450, -0.602019563936436740, +-0.601979639117107170, -0.601939712792828540, -0.601899784963700560, -0.601859855629822470, -0.601819924791295420, -0.601779992448218560, -0.601740058600691800, -0.601700123248814720, +-0.601660186392687480, -0.601620248032409770, -0.601580308168081280, -0.601540366799801500, -0.601500423927671450, -0.601460479551790270, -0.601420533672258010, -0.601380586289174350, +-0.601340637402639210, -0.601300687012752520, -0.601260735119613310, -0.601220781723323050, -0.601180826823980890, -0.601140870421686620, -0.601100912516540080, -0.601060953108641380, +-0.601020992198090240, -0.600981029784986690, -0.600941065869430410, -0.600901100451520900, -0.600861133531359280, -0.600821165109044930, -0.600781195184677540, -0.600741223758357150, +-0.600701250830183770, -0.600661276400256570, -0.600621300468676900, -0.600581323035543900, -0.600541344100957610, -0.600501363665018050, -0.600461381727825040, -0.600421398289478490, +-0.600381413350078550, -0.600341426909725030, -0.600301438968517180, -0.600261449526556580, -0.600221458583942270, -0.600181466140774280, -0.600141472197152640, -0.600101476753177380, +-0.600061479808948420, -0.600021481364565010, -0.599981481420128640, -0.599941479975738550, -0.599901477031494770, -0.599861472587497220, -0.599821466643846060, -0.599781459200641190, +-0.599741450257982760, -0.599701439815969910, -0.599661427874704220, -0.599621414434284960, -0.599581399494812150, -0.599541383056385820, -0.599501365119106120, -0.599461345683072970, +-0.599421324748385720, -0.599381302315145860, -0.599341278383452750, -0.599301252953406420, -0.599261226025107010, -0.599221197598654440, -0.599181167674148970, -0.599141136251690520, +-0.599101103331378560, -0.599061068913314560, -0.599021032997597900, -0.598980995584328600, -0.598940956673606920, -0.598900916265532770, -0.598860874360206300, -0.598820830957726980, +-0.598780786058196290, -0.598740739661713590, -0.598700691768379150, -0.598660642378292860, -0.598620591491555000, -0.598580539108265700, -0.598540485228524990, -0.598500429852433120, +-0.598460372980089470, -0.598420314611595620, -0.598380254747050920, -0.598340193386555530, -0.598300130530209810, -0.598260066178113670, -0.598220000330366600, -0.598179932987070400, +-0.598139864148324210, -0.598099793814228510, -0.598059721984883220, -0.598019648660388590, -0.597979573840844880, -0.597939497526352340, -0.597899419717010880, -0.597859340412920330, +-0.597819259614182030, -0.597779177320895580, -0.597739093533161240, -0.597699008251079130, -0.597658921474749530, -0.597618833204272670, -0.597578743439747930, -0.597538652181277110, +-0.597498559428959570, -0.597458465182895690, -0.597418369443185600, -0.597378272209929670, -0.597338173483228040, -0.597298073263180960, -0.597257971549887910, -0.597217868343450700, +-0.597177763643968910, -0.597137657451542570, -0.597097549766272160, -0.597057440588257830, -0.597017329917600040, -0.596977217754398050, -0.596937104098753780, -0.596896988950766700, +-0.596856872310537300, -0.596816754178165600, -0.596776634553751960, -0.596736513437396860, -0.596696390829200450, -0.596656266729262310, -0.596616141137684240, -0.596576014054565840, +-0.596535885480007360, -0.596495755414109150, -0.596455623856971600, -0.596415490808694940, -0.596375356269378880, -0.596335220239125220, -0.596295082718033440, -0.596254943706203910, +-0.596214803203736990, -0.596174661210733150, -0.596134517727292650, -0.596094372753515840, -0.596054226289503110, -0.596014078335354030, -0.595973928891170620, -0.595933777957052270, +-0.595893625533099440, -0.595853471619412600, -0.595813316216092130, -0.595773159323237600, -0.595733000940950940, -0.595692841069331740, -0.595652679708480460, -0.595612516858497370, +-0.595572352519483150, -0.595532186691537960, -0.595492019374762260, -0.595451850569256650, -0.595411680275120590, -0.595371508492456010, -0.595331335221362720, -0.595291160461941190, +-0.595250984214291570, -0.595210806478514650, -0.595170627254710590, -0.595130446542979310, -0.595090264343422600, -0.595050080656140290, -0.595009895481232730, -0.594969708818800510, +-0.594929520668943890, -0.594889331031763560, -0.594849139907359880, -0.594808947295832670, -0.594768753197283730, -0.594728557611812870, -0.594688360539520790, -0.594648161980507630, +-0.594607961934874200, -0.594567760402720750, -0.594527557384147310, -0.594487352879255580, -0.594447146888145480, -0.594406939410917600, -0.594366730447672300, -0.594326519998510160, +-0.594286308063531780, -0.594246094642837620, -0.594205879736527500, -0.594165663344703330, -0.594125445467465150, -0.594085226104913210, -0.594045005257148320, -0.594004782924270840, +-0.593964559106381350, -0.593924333803579900, -0.593884107015968170, -0.593843878743646300, -0.593803648986714670, -0.593763417745273970, -0.593723185019424670, -0.593682950809267470, +-0.593642715114902850, -0.593602477936431390, -0.593562239273953020, -0.593521999127569870, -0.593481757497381630, -0.593441514383489130, -0.593401269785992720, -0.593361023704993110, +-0.593320776140590310, -0.593280527092886260, -0.593240276561980970, -0.593200024547974820, -0.593159771050968730, -0.593119516071063170, -0.593079259608358830, -0.593039001662956420, +-0.592998742234956410, -0.592958481324458830, -0.592918218931565820, -0.592877955056377190, -0.592837689698993750, -0.592797422859515980, -0.592757154538044780, -0.592716884734680650, +-0.592676613449523490, -0.592636340682675680, -0.592596066434236900, -0.592555790704307970, -0.592515513492989590, -0.592475234800382440, -0.592434954626587130, -0.592394672971704560, +-0.592354389835834440, -0.592314105219079230, -0.592273819121538650, -0.592233531543313490, -0.592193242484504560, -0.592152951945212560, -0.592112659925538080, -0.592072366425581360, +-0.592032071445444340, -0.591991774985227150, -0.591951477045030590, -0.591911177624955260, -0.591870876725101970, -0.591830574345571630, -0.591790270486464710, -0.591749965147881470, +-0.591709658329923950, -0.591669350032692390, -0.591629040256287380, -0.591588729000809830, -0.591548416266360460, -0.591508102053040050, -0.591467786360948540, -0.591427469190188400, +-0.591387150540859660, -0.591346830413062910, -0.591306508806899170, -0.591266185722469030, -0.591225861159873520, -0.591185535119213350, -0.591145207600589420, -0.591104878604101660, +-0.591064548129852430, -0.591024216177941760, -0.590983882748470690, -0.590943547841539800, -0.590903211457250110, -0.590862873595701670, -0.590822534256996710, -0.590782193441235500, +-0.590741851148518740, -0.590701507378947330, -0.590661162132622210, -0.590620815409644170, -0.590580467210114150, -0.590540117534132820, -0.590499766381800570, -0.590459413753219640, +-0.590419059648490170, -0.590378704067712980, -0.590338347010989080, -0.590297988478419410, -0.590257628470104660, -0.590217266986145070, -0.590176904026643130, -0.590136539591698870, +-0.590096173681413320, -0.590055806295887280, -0.590015437435221780, -0.589975067099517640, -0.589934695288875880, -0.589894322003396530, -0.589853947243182300, -0.589813571008332980, +-0.589773193298949950, -0.589732814115133790, -0.589692433456985630, -0.589652051324606410, -0.589611667718096370, -0.589571282637557760, -0.589530896083091060, -0.589490508054797080, +-0.589450118552776850, -0.589409727577131280, -0.589369335127961410, -0.589328941205368270, -0.589288545809452000, -0.589248148940315080, -0.589207750598057740, -0.589167350782781150, +-0.589126949494586110, -0.589086546733573630, -0.589046142499844880, -0.589005736793499990, -0.588965329614641540, -0.588924920963369790, -0.588884510839785660, -0.588844099243990280, +-0.588803686176084580, -0.588763271636169820, -0.588722855624346790, -0.588682438140716640, -0.588642019185379620, -0.588601598758438320, -0.588561176859992980, -0.588520753490144770, +-0.588480328648994690, -0.588439902336643670, -0.588399474553192300, -0.588359045298742940, -0.588318614573395960, -0.588278182377252380, -0.588237748710413340, -0.588197313572980000, +-0.588156876965053370, -0.588116438886734480, -0.588075999338124600, -0.588035558319323970, -0.587995115830435070, -0.587954671871558480, -0.587914226442795230, -0.587873779544246360, +-0.587833331176013000, -0.587792881338195630, -0.587752430030896830, -0.587711977254216870, -0.587671523008256980, -0.587631067293118310, -0.587590610108902010, -0.587550151455709100, +-0.587509691333640950, -0.587469229742798470, -0.587428766683282140, -0.587388302155194770, -0.587347836158636500, -0.587307368693708700, -0.587266899760512500, -0.587226429359149040, +-0.587185957489719470, -0.587145484152324260, -0.587105009347066110, -0.587064533074045490, -0.587024055333363440, -0.586983576125121310, -0.586943095449420250, -0.586902613306361400, +-0.586862129696046120, -0.586821644618574670, -0.586781158074049850, -0.586740670062572240, -0.586700180584242890, -0.586659689639163040, -0.586619197227433940, -0.586578703349156960, +-0.586538208004432460, -0.586497711193363140, -0.586457212916049580, -0.586416713172592920, -0.586376211963094530, -0.586335709287655660, -0.586295205146377450, -0.586254699539361160, +-0.586214192466708250, -0.586173683928519100, -0.586133173924896390, -0.586092662455940830, -0.586052149521753550, -0.586011635122436040, -0.585971119258089310, -0.585930601928814080, +-0.585890083134713020, -0.585849562875886850, -0.585809041152436700, -0.585768517964464050, -0.585727993312070040, -0.585687467195356030, -0.585646939614423270, -0.585606410569373350, +-0.585565880060306520, -0.585525348087325810, -0.585484814650531700, -0.585444279750025550, -0.585403743385908730, -0.585363205558282470, -0.585322666267247490, -0.585282125512906700, +-0.585241583295360470, -0.585201039614710260, -0.585160494471057560, -0.585119947864503500, -0.585079399795149670, -0.585038850263097320, -0.584998299268447820, -0.584957746811301860, +-0.584917192891762250, -0.584876637509929690, -0.584836080665905530, -0.584795522359791150, -0.584754962591688020, -0.584714401361697390, -0.584673838669920070, -0.584633274516458860, +-0.584592708901414570, -0.584552141824888350, -0.584511573286981890, -0.584471003287796440, -0.584430431827433480, -0.584389858905994490, -0.584349284523580040, -0.584308708680293170, +-0.584268131376234570, -0.584227552611505610, -0.584186972386207760, -0.584146390700442500, -0.584105807554311180, -0.584065222947914630, -0.584024636881355860, -0.583984049354735360, +-0.583943460368154810, -0.583902869921715690, -0.583862278015519260, -0.583821684649667220, -0.583781089824260910, -0.583740493539401830, -0.583699895795190880, -0.583659296591730880, +-0.583618695929122740, -0.583578093807467720, -0.583537490226867520, -0.583496885187423600, -0.583456278689236770, -0.583415670732409960, -0.583375061317043860, -0.583334450443240280, +-0.583293838111100470, -0.583253224320726130, -0.583212609072218610, -0.583171992365679630, -0.583131374201210750, -0.583090754578912570, -0.583050133498888350, -0.583009510961238760, +-0.582968886966065410, -0.582928261513469770, -0.582887634603553530, -0.582847006236417500, -0.582806376412164600, -0.582765745130895850, -0.582725112392712630, -0.582684478197716740, +-0.582643842546009650, -0.582603205437692840, -0.582562566872868120, -0.582521926851636950, -0.582481285374100270, -0.582440642440361090, -0.582399998050520230, -0.582359352204679490, +-0.582318704902940240, -0.582278056145404290, -0.582237405932173210, -0.582196754263347940, -0.582156101139031490, -0.582115446559324680, -0.582074790524329310, -0.582034133034147080, +-0.581993474088879360, -0.581952813688628060, -0.581912151833494650, -0.581871488523580170, -0.581830823758987760, -0.581790157539818220, -0.581749489866173250, -0.581708820738154660, +-0.581668150155863930, -0.581627478119402850, -0.581586804628872360, -0.581546129684375580, -0.581505453286013440, -0.581464775433887750, -0.581424096128099980, -0.581383415368752040, +-0.581342733155945650, -0.581302049489782370, -0.581261364370363910, -0.581220677797791410, -0.581179989772167890, -0.581139300293594400, -0.581098609362172610, -0.581057916978004350, +-0.581017223141191310, -0.580976527851834510, -0.580935831110036990, -0.580895132915900000, -0.580854433269525130, -0.580813732171014290, -0.580773029620468950, -0.580732325617991150, +-0.580691620163682480, -0.580650913257644840, -0.580610204899979050, -0.580569495090788590, -0.580528783830174370, -0.580488071118238190, -0.580447356955081870, -0.580406641340807110, +-0.580365924275515030, -0.580325205759308790, -0.580284485792289640, -0.580243764374559270, -0.580203041506219370, -0.580162317187371990, -0.580121591418118810, -0.580080864198561640, +-0.580040135528802290, -0.579999405408941900, -0.579958673839083730, -0.579917940819328790, -0.579877206349779020, -0.579836470430536320, -0.579795733061702400, -0.579754994243379170, +-0.579714253975667670, -0.579673512258671360, -0.579632769092491170, -0.579592024477229020, -0.579551278412986930, -0.579510530899866590, -0.579469781937969940, -0.579429031527398770, +-0.579388279668254460, -0.579347526360640020, -0.579306771604656820, -0.579266015400406680, -0.579225257747991500, -0.579184498647513200, -0.579143738099073600, -0.579102976102773950, +-0.579062212658717600, -0.579021447767005700, -0.578980681427740280, -0.578939913641023040, -0.578899144406956000, -0.578858373725641200, -0.578817601597180430, -0.578776828021674850, +-0.578736052999228030, -0.578695276529941020, -0.578654498613915820, -0.578613719251254490, -0.578572938442058700, -0.578532156186430610, -0.578491372484471470, -0.578450587336284630, +-0.578409800741971240, -0.578369012701633320, -0.578328223215372920, -0.578287432283292050, -0.578246639905492520, -0.578205846082076370, -0.578165050813145620, -0.578124254098801530, +-0.578083455939147450, -0.578042656334284870, -0.578001855284315580, -0.577961052789341620, -0.577920248849465130, -0.577879443464787150, -0.577838636635411350, -0.577797828361439000, +-0.577757018642972130, -0.577716207480112540, -0.577675394872962600, -0.577634580821624110, -0.577593765326199100, -0.577552948386789720, -0.577512130003497330, -0.577471310176425280, +-0.577430488905674940, -0.577389666191348350, -0.577348842033547640, -0.577308016432374840, -0.577267189387931980, -0.577226360900320310, -0.577185530969643650, -0.577144699596003010, +-0.577103866779500760, -0.577063032520238720, -0.577022196818319230, -0.576981359673844120, -0.576940521086915630, -0.576899681057635230, -0.576858839586106180, -0.576817996672430170, +-0.576777152316709120, -0.576736306519045170, -0.576695459279540470, -0.576654610598297150, -0.576613760475416570, -0.576572908911002320, -0.576532055905155770, -0.576491201457979050, +-0.576450345569574310, -0.576409488240043790, -0.576368629469489520, -0.576327769258013660, -0.576286907605717660, -0.576246044512705110, -0.576205179979077500, -0.576164314004936950, +-0.576123446590385500, -0.576082577735525510, -0.576041707440459130, -0.576000835705287710, -0.575959962530114830, -0.575919087915042090, -0.575878211860171740, -0.575837334365605800, +-0.575796455431446530, -0.575755575057796070, -0.575714693244756660, -0.575673809992430560, -0.575632925300919250, -0.575592039170326310, -0.575551151600753210, -0.575510262592302310, +-0.575469372145075760, -0.575428480259175810, -0.575387586934703820, -0.575346692171763710, -0.575305795970456830, -0.575264898330885450, -0.575223999253151820, -0.575183098737358180, +-0.575142196783606790, -0.575101293391999890, -0.575060388562639860, -0.575019482295628050, -0.574978574591068270, -0.574937665449062000, -0.574896754869711700, -0.574855842853119410, +-0.574814929399387500, -0.574774014508618310, -0.574733098180913340, -0.574692180416376370, -0.574651261215109010, -0.574610340577213390, -0.574569418502791970, -0.574528494991947030, +-0.574487570044780790, -0.574446643661395640, -0.574405715841893150, -0.574364786586377130, -0.574323855894949160, -0.574282923767711510, -0.574241990204766520, -0.574201055206216670, +-0.574160118772164110, -0.574119180902710410, -0.574078241597959620, -0.574037300858013190, -0.573996358682973610, -0.573955415072943010, -0.573914470028023870, -0.573873523548318660, +-0.573832575633929530, -0.573791626284958280, -0.573750675501508710, -0.573709723283682420, -0.573668769631581870, -0.573627814545309310, -0.573586858024967340, -0.573545900070658090, +-0.573504940682483480, -0.573463979860547200, -0.573423017604950850, -0.573382053915797110, -0.573341088793188240, -0.573300122237226590, -0.573259154248014660, -0.573218184825654790, +-0.573177213970249460, -0.573136241681900470, -0.573095267960711530, -0.573054292806784440, -0.573013316220221560, -0.572972338201125480, -0.572931358749598550, -0.572890377865742370, +-0.572849395549661080, -0.572808411801456250, -0.572767426621230480, -0.572726440009086120, -0.572685451965125550, -0.572644462489451440, -0.572603471582166180, -0.572562479243372220, +-0.572521485473171390, -0.572480490271667470, -0.572439493638962400, -0.572398495575158540, -0.572357496080358460, -0.572316495154664650, -0.572275492798179690, -0.572234489011005150, +-0.572193483793245190, -0.572152477145001500, -0.572111469066376550, -0.572070459557472930, -0.572029448618393220, -0.571988436249239900, -0.571947422450115540, -0.571906407221121740, +-0.571865390562362740, -0.571824372473940250, -0.571783352955956840, -0.571742332008515100, -0.571701309631717500, -0.571660285825666530, -0.571619260590464200, -0.571578233926214430, +-0.571537205833019150, -0.571496176310980710, -0.571455145360201920, -0.571414112980785260, -0.571373079172833310, -0.571332043936448650, -0.571291007271733210, -0.571249969178790900, +-0.571208929657723740, -0.571167888708634220, -0.571126846331625030, -0.571085802526798640, -0.571044757294257740, -0.571003710634104270, -0.570962662546442230, -0.570921613031373560, +-0.570880562089000840, -0.570839509719426760, -0.570798455922753800, -0.570757400699084760, -0.570716344048522230, -0.570675285971168900, -0.570634226467126470, -0.570593165536499300, +-0.570552103179389200, -0.570511039395898870, -0.570469974186130990, -0.570428907550188050, -0.570387839488172180, -0.570346770000187410, -0.570305699086335770, -0.570264626746719850, +-0.570223552981442340, -0.570182477790605930, -0.570141401174313440, -0.570100323132667340, -0.570059243665770430, -0.570018162773724750, -0.569977080456634310, -0.569935996714601270, +-0.569894911547728200, -0.569853824956117800, -0.569812736939872890, -0.569771647499096150, -0.569730556633889500, -0.569689464344357190, -0.569648370630601250, -0.569607275492724390, +-0.569566178930829390, -0.569525080945018860, -0.569483981535395700, -0.569442880702062500, -0.569401778445121410, -0.569360674764676670, -0.569319569660830190, -0.569278463133684800, +-0.569237355183343170, -0.569196245809908240, -0.569155135013482690, -0.569114022794168450, -0.569072909152070090, -0.569031794087289320, -0.568990677599929050, -0.568949559690092200, +-0.568908440357881350, -0.568867319603399420, -0.568826197426749220, -0.568785073828032780, -0.568743948807354350, -0.568702822364816170, -0.568661694500520840, -0.568620565214571270, +-0.568579434507070270, -0.568538302378120750, -0.568497168827824640, -0.568456033856286510, -0.568414897463608180, -0.568373759649892560, -0.568332620415242570, -0.568291479759761130, +-0.568250337683550930, -0.568209194186714890, -0.568168049269355820, -0.568126902931575970, -0.568085755173479480, -0.568044605995168710, -0.568003455396746350, -0.567962303378315440, +-0.567921149939978780, -0.567879995081838400, -0.567838838803998770, -0.567797681106562150, -0.567756521989631220, -0.567715361453309030, -0.567674199497698480, -0.567633036122902390, +-0.567591871329023780, -0.567550705116165450, -0.567509537484429560, -0.567468368433920570, -0.567427197964740730, -0.567386026076992840, -0.567344852770779950, -0.567303678046204850, +-0.567262501903370580, -0.567221324342379370, -0.567180145363335500, -0.567138964966341310, -0.567097783151499720, -0.567056599918913660, -0.567015415268686040, -0.566974229200920000, +-0.566933041715718340, -0.566891852813183330, -0.566850662493419420, -0.566809470756528770, -0.566768277602614610, -0.566727083031779650, -0.566685887044127030, -0.566644689639759670, +-0.566603490818779810, -0.566562290581292040, -0.566521088927398500, -0.566479885857202210, -0.566438681370806220, -0.566397475468313650, -0.566356268149827200, -0.566315059415450240, +-0.566273849265284790, -0.566232637699435440, -0.566191424718004540, -0.566150210321095140, -0.566108994508810140, -0.566067777281252680, -0.566026558638525800, -0.565985338580731740, +-0.565944117107975100, -0.565902894220358110, -0.565861669917983920, -0.565820444200955560, -0.565779217069376060, -0.565737988523348560, -0.565696758562976080, -0.565655527188361760, +-0.565614294399607750, -0.565573060196818860, -0.565531824580097320, -0.565490587549546180, -0.565449349105268560, -0.565408109247367510, -0.565366867975945600, -0.565325625291107080, +-0.565284381192954650, -0.565243135681591240, -0.565201888757119960, -0.565160640419643870, -0.565119390669266310, -0.565078139506090200, -0.565036886930218810, -0.564995632941754480, +-0.564954377540801690, -0.564913120727463030, -0.564871862501841520, -0.564830602864040410, -0.564789341814162740, -0.564748079352311860, -0.564706815478589920, -0.564665550193101720, +-0.564624283495949510, -0.564583015387236760, -0.564541745867066400, -0.564500474935541670, -0.564459202592765830, -0.564417928838841900, -0.564376653673872460, -0.564335377097962110, +-0.564294099111213310, -0.564252819713729200, -0.564211538905613150, -0.564170256686968190, -0.564128973057897550, -0.564087688018503840, -0.564046401568891630, -0.564005113709163290, +-0.563963824439422280, -0.563922533759771750, -0.563881241670314840, -0.563839948171154790, -0.563798653262394870, -0.563757356944137640, -0.563716059216487710, -0.563674760079547640, +-0.563633459533420700, -0.563592157578210020, -0.563550854214019070, -0.563509549440950890, -0.563468243259108160, -0.563426935668595470, -0.563385626669515530, -0.563344316261971460, +-0.563303004446066620, -0.563261691221904390, -0.563220376589587790, -0.563179060549220290, -0.563137743100905140, -0.563096424244744820, -0.563055103980844350, -0.563013782309305990, +-0.562972459230233200, -0.562931134743729240, -0.562889808849897480, -0.562848481548840480, -0.562807152840662960, -0.562765822725467600, -0.562724491203357660, -0.562683158274436490, +-0.562641823938807460, -0.562600488196573820, -0.562559151047838930, -0.562517812492706270, -0.562476472531278300, -0.562435131163659840, -0.562393788389953580, -0.562352444210262870, +-0.562311098624690970, -0.562269751633341470, -0.562228403236316730, -0.562187053433721770, -0.562145702225659180, -0.562104349612232320, -0.562062995593544560, -0.562021640169699350, +-0.561980283340800080, -0.561938925106949980, -0.561897565468252650, -0.561856204424810660, -0.561814841976728930, -0.561773478124110050, -0.561732112867057490, -0.561690746205674610, +-0.561649378140064880, -0.561608008670331780, -0.561566637796577890, -0.561525265518908130, -0.561483891837425200, -0.561442516752232450, -0.561401140263433570, -0.561359762371131720, +-0.561318383075430470, -0.561277002376433300, -0.561235620274242900, -0.561194236768964180, -0.561152851860699850, -0.561111465549553490, -0.561070077835628340, -0.561028688719028000, +-0.560987298199856040, -0.560945906278214950, -0.560904512954209960, -0.560863118227943660, -0.560821722099519530, -0.560780324569041140, -0.560738925636611870, -0.560697525302335300, +-0.560656123566315000, -0.560614720428654350, -0.560573315889456140, -0.560531909948825290, -0.560490502606864840, -0.560449093863678030, -0.560407683719368550, -0.560366272174039780, +-0.560324859227794620, -0.560283444880738110, -0.560242029132972940, -0.560200611984602690, -0.560159193435730840, -0.560117773486461080, -0.560076352136896990, -0.560034929387141830, +-0.559993505237299520, -0.559952079687472630, -0.559910652737766190, -0.559869224388283240, -0.559827794639127240, -0.559786363490401670, -0.559744930942210230, -0.559703496994655710, +-0.559662061647843270, -0.559620624901875590, -0.559579186756856360, -0.559537747212889180, -0.559496306270077630, -0.559454863928525280, -0.559413420188335730, -0.559371975049612780, +-0.559330528512459010, -0.559289080576979680, -0.559247631243277700, -0.559206180511456650, -0.559164728381620120, -0.559123274853871810, -0.559081819928315290, -0.559040363605053490, +-0.558998905884191430, -0.558957446765832260, -0.558915986250079320, -0.558874524337036550, -0.558833061026807410, -0.558791596319495600, -0.558750130215204810, -0.558708662714037960, +-0.558667193816100190, -0.558625723521494420, -0.558584251830324340, -0.558542778742693650, -0.558501304258706030, -0.558459828378465080, -0.558418351102073940, -0.558376872429637520, +-0.558335392361259060, -0.558293910897042060, -0.558252428037090190, -0.558210943781507370, -0.558169458130397200, -0.558127971083863360, -0.558086482642009550, -0.558044992804938800, +-0.558003501572756360, -0.557962008945565020, -0.557920514923468840, -0.557879019506571260, -0.557837522694976220, -0.557796024488786510, -0.557754524888107620, -0.557713023893042340, +-0.557671521503694480, -0.557630017720167850, -0.557588512542566250, -0.557547005970993270, -0.557505498005552820, -0.557463988646348610, -0.557422477893483650, -0.557380965747063310, +-0.557339452207190500, -0.557297937273969040, -0.557256420947502830, -0.557214903227895460, -0.557173384115250190, -0.557131863609672150, -0.557090341711264480, -0.557048818420130880, +-0.557007293736375250, -0.556965767660101420, -0.556924240191413180, -0.556882711330414340, -0.556841181077208700, -0.556799649431899410, -0.556758116394591720, -0.556716581965388760, +-0.556675046144394340, -0.556633508931712260, -0.556591970327446450, -0.556550430331700600, -0.556508888944578060, -0.556467346166183980, -0.556425801996621620, -0.556384256435994650, +-0.556342709484407120, -0.556301161141962710, -0.556259611408765450, -0.556218060284919270, -0.556176507770527070, -0.556134953865694340, -0.556093398570524310, -0.556051841885120690, +-0.556010283809587610, -0.555968724344028660, -0.555927163488547980, -0.555885601243248590, -0.555844037608235970, -0.555802472583613370, -0.555760906169484480, -0.555719338365953330, +-0.555677769173123840, -0.555636198591099920, -0.555594626619985490, -0.555553053259883800, -0.555511478510900100, -0.555469902373137870, -0.555428324846700790, -0.555386745931692900, +-0.555345165628218230, -0.555303583936380570, -0.555262000856283190, -0.555220416388031550, -0.555178830531728900, -0.555137243287479150, -0.555095654655386350, -0.555054064635554400, +-0.555012473228087220, -0.554970880433088950, -0.554929286250663400, -0.554887690680913930, -0.554846093723946000, -0.554804495379862760, -0.554762895648768350, -0.554721294530766680, +-0.554679692025961790, -0.554638088134456810, -0.554596482856357540, -0.554554876191766910, -0.554513268140789160, -0.554471658703528210, -0.554430047880088210, -0.554388435670572940, +-0.554346822075086680, -0.554305207093733320, -0.554263590726616240, -0.554221972973840900, -0.554180353835510680, -0.554138733311729580, -0.554097111402601540, -0.554055488108230800, +-0.554013863428721390, -0.553972237364176450, -0.553930609914701780, -0.553888981080400520, -0.553847350861376820, -0.553805719257734700, -0.553764086269578290, -0.553722451897011750, +-0.553680816140138980, -0.553639178999063450, -0.553597540473890760, -0.553555900564724260, -0.553514259271667860, -0.553472616594825940, -0.553430972534302400, -0.553389327090201500, +-0.553347680262626480, -0.553306032051683050, -0.553264382457474560, -0.553222731480105030, -0.553181079119678730, -0.553139425376299680, -0.553097770250072120, -0.553056113741100090, +-0.553014455849487160, -0.552972796575338710, -0.552931135918758310, -0.552889473879849990, -0.552847810458718110, -0.552806145655466600, -0.552764479470199800, -0.552722811903020970, +-0.552681142954035920, -0.552639472623348000, -0.552597800911061480, -0.552556127817280360, -0.552514453342108910, -0.552472777485651380, -0.552431100248011900, -0.552389421629294610, +-0.552347741629603100, -0.552306060249042940, -0.552264377487717620, -0.552222693345731370, -0.552181007823188460, -0.552139320920192910, -0.552097632636848410, -0.552055942973260550, +-0.552014251929532800, -0.551972559505769400, -0.551930865702074610, -0.551889170518552690, -0.551847473955307870, -0.551805776012444290, -0.551764076690066330, -0.551722375988277450, +-0.551680673907183340, -0.551638970446887480, -0.551597265607494340, -0.551555559389107940, -0.551513851791832650, -0.551472142815772730, -0.551430432461031740, -0.551388720727715280, +-0.551347007615927140, -0.551305293125771480, -0.551263577257352640, -0.551221860010774780, -0.551180141386142240, -0.551138421383559400, -0.551096700003129710, -0.551054977244959110, +-0.551013253109151060, -0.550971527595809810, -0.550929800705039720, -0.550888072436945150, -0.550846342791630470, -0.550804611769199150, -0.550762879369756990, -0.550721145593407680, +-0.550679410440255590, -0.550637673910404860, -0.550595936003959950, -0.550554196721025240, -0.550512456061704960, -0.550470714026102930, -0.550428970614324720, -0.550387225826474150, +-0.550345479662655570, -0.550303732122973230, -0.550261983207531610, -0.550220232916434960, -0.550178481249786970, -0.550136728207693660, -0.550094973790258400, -0.550053217997585660, +-0.550011460829780030, -0.549969702286945640, -0.549927942369187070, -0.549886181076608580, -0.549844418409314640, -0.549802654367408940, -0.549760888950997400, -0.549719122160183590, +-0.549677353995071890, -0.549635584455766880, -0.549593813542372910, -0.549552041254993680, -0.549510267593735110, -0.549468492558700780, -0.549426716149995280, -0.549384938367722950, +-0.549343159211988400, -0.549301378682895750, -0.549259596780549810, -0.549217813505054830, -0.549176028856514620, -0.549134242835034980, -0.549092455440719830, -0.549050666673673420, +-0.549008876534000430, -0.548967085021805250, -0.548925292137192320, -0.548883497880265470, -0.548841702251130600, -0.548799905249891530, -0.548758106876652610, -0.548716307131518420, +-0.548674506014593550, -0.548632703525982370, -0.548590899665789330, -0.548549094434118480, -0.548507287831075500, -0.548465479856764300, -0.548423670511289480, -0.548381859794755400, +-0.548340047707266740, -0.548298234248927980, -0.548256419419842820, -0.548214603220117390, -0.548172785649855500, -0.548130966709161620, -0.548089146398140210, -0.548047324716896100, +-0.548005501665533520, -0.547963677244157290, -0.547921851452871090, -0.547880024291781060, -0.547838195760990910, -0.547796365860605320, -0.547754534590728760, -0.547712701951465930, +-0.547670867942921300, -0.547629032565198680, -0.547587195818404320, -0.547545357702642010, -0.547503518218016240, -0.547461677364631690, -0.547419835142592960, -0.547377991552004620, +-0.547336146592971250, -0.547294300265597560, -0.547252452569987450, -0.547210603506246840, -0.547168753074479760, -0.547126901274790800, -0.547085048107284640, -0.547043193572065770, +-0.547001337669238200, -0.546959480398908070, -0.546917621761179200, -0.546875761756156260, -0.546833900383943970, -0.546792037644646900, -0.546750173538369740, -0.546708308065217200, +-0.546666441225293840, -0.546624573018703600, -0.546582703445552710, -0.546540832505945100, -0.546498960199985340, -0.546457086527778250, -0.546415211489428290, -0.546373335085040490, +-0.546331457314718550, -0.546289578178568600, -0.546247697676694790, -0.546205815809201800, -0.546163932576194220, -0.546122047977776750, -0.546080162014054180, -0.546038274685131330, +-0.545996385991111890, -0.545954495932102320, -0.545912604508206440, -0.545870711719529170, -0.545828817566174960, -0.545786922048248860, -0.545745025165855320, -0.545703126919098610, +-0.545661227308084750, -0.545619326332917760, -0.545577423993702570, -0.545535520290543750, -0.545493615223546220, -0.545451708792814570, -0.545409800998453600, -0.545367891840567440, +-0.545325981319262350, -0.545284069434642250, -0.545242156186811930, -0.545200241575876320, -0.545158325601940110, -0.545116408265107990, -0.545074489565484210, -0.545032569503174800, +-0.544990648078284120, -0.544948725290916760, -0.544906801141177620, -0.544864875629171410, -0.544822948755003030, -0.544781020518777300, -0.544739090920599020, -0.544697159960572220, +-0.544655227638803360, -0.544613293955396370, -0.544571358910456160, -0.544529422504087530, -0.544487484736395410, -0.544445545607483710, -0.544403605117459000, -0.544361663266425210, +-0.544319720054487370, -0.544277775481750160, -0.544235829548318510, -0.544193882254297210, -0.544151933599791300, -0.544109983584905480, -0.544068032209744090, -0.544026079474413280, +-0.543984125379017300, -0.543942169923660960, -0.543900213108449160, -0.543858254933486940, -0.543816295398878990, -0.543774334504729670, -0.543732372251145120, -0.543690408638229710, +-0.543648443666088330, -0.543606477334825700, -0.543564509644546940, -0.543522540595356980, -0.543480570187360620, -0.543438598420662110, -0.543396625295367810, -0.543354650811581960, +-0.543312674969409490, -0.543270697768955310, -0.543228719210324450, -0.543186739293621710, -0.543144758018951460, -0.543102775386419930, -0.543060791396131610, -0.543018806048191190, +-0.542976819342703810, -0.542934831279774380, -0.542892841859507920, -0.542850851082009370, -0.542808858947382840, -0.542766865455734940, -0.542724870607169900, -0.542682874401792640, +-0.542640876839708300, -0.542598877921021680, -0.542556877645837930, -0.542514876014261180, -0.542472873026398020, -0.542430868682352570, -0.542388862982230100, -0.542346855926135410, +-0.542304847514173630, -0.542262837746449570, -0.542220826623068590, -0.542178814144135490, -0.542136800309754640, -0.542094785120032400, -0.542052768575073340, -0.542010750674982280, +-0.541968731419864460, -0.541926710809824690, -0.541884688844967430, -0.541842665525399170, -0.541800640851224370, -0.541758614822547830, -0.541716587439474820, -0.541674558702110340, +-0.541632528610559440, -0.541590497164927130, -0.541548464365318670, -0.541506430211838310, -0.541464394704592620, -0.541422357843685980, -0.541380319629223390, -0.541338280061310020, +-0.541296239140050980, -0.541254196865551320, -0.541212153237915380, -0.541170108257249870, -0.541128061923659030, -0.541086014237248000, -0.541043965198122030, -0.541001914806386150, +-0.540959863062145390, -0.540917809965504980, -0.540875755516569410, -0.540833699715445150, -0.540791642562236550, -0.540749584057048980, -0.540707524199987350, -0.540665462991156920, +-0.540623400430662930, -0.540581336518609620, -0.540539271255103700, -0.540497204640249640, -0.540455136674152570, -0.540413067356917630, -0.540370996688649960, -0.540328924669454920, +-0.540286851299437540, -0.540244776578702180, -0.540202700507355750, -0.540160623085502500, -0.540118544313247790, -0.540076464190696660, -0.540034382717954340, -0.539992299895126090, +-0.539950215722316270, -0.539908130199631800, -0.539866043327176910, -0.539823955105056870, -0.539781865533377040, -0.539739774612242540, -0.539697682341758520, -0.539655588722030340, +-0.539613493753163250, -0.539571397435261610, -0.539529299768432220, -0.539487200752779560, -0.539445100388408980, -0.539402998675425630, -0.539360895613934740, -0.539318791204040910, +-0.539276685445850830, -0.539234578339468970, -0.539192469885000800, -0.539150360082551350, -0.539108248932226090, -0.539066136434130040, -0.539024022588368790, -0.538981907395047480, +-0.538939790854270570, -0.538897672966144990, -0.538855553730775320, -0.538813433148266570, -0.538771311218724350, -0.538729187942253880, -0.538687063318959660, -0.538644937348948470, +-0.538602810032325020, -0.538560681369194550, -0.538518551359662310, -0.538476420003833780, -0.538434287301814090, -0.538392153253708710, -0.538350017859623000, -0.538307881119661440, +-0.538265743033931040, -0.538223603602536180, -0.538181462825582320, -0.538139320703174830, -0.538097177235418940, -0.538055032422420250, -0.538012886264283120, -0.537970738761114560, +-0.537928589913019170, -0.537886439720102310, -0.537844288182469430, -0.537802135300225690, -0.537759981073476670, -0.537717825502327720, -0.537675668586883430, -0.537633510327250710, +-0.537591350723534260, -0.537549189775839320, -0.537507027484271480, -0.537464863848936100, -0.537422698869938540, -0.537380532547383490, -0.537338364881377870, -0.537296195872026260, +-0.537254025519434240, -0.537211853823707170, -0.537169680784950420, -0.537127506403269450, -0.537085330678769730, -0.537043153611556630, -0.537000975201735060, -0.536958795449411610, +-0.536916614354691290, -0.536874431917679470, -0.536832248138481520, -0.536790063017202890, -0.536747876553948400, -0.536705688748824960, -0.536663499601937270, -0.536621309113390900, +-0.536579117283291220, -0.536536924111743810, -0.536494729598854030, -0.536452533744727460, -0.536410336549469460, -0.536368138013184950, -0.536325938135980840, -0.536283736917961830, +-0.536241534359233610, -0.536199330459901420, -0.536157125220070970, -0.536114918639846950, -0.536072710719336380, -0.536030501458643950, -0.535988290857875360, -0.535946078917136080, +-0.535903865636531470, -0.535861651016167340, -0.535819435056149040, -0.535777217756582050, -0.535734999117571390, -0.535692779139223970, -0.535650557821644500, -0.535608335164938780, +-0.535566111169212160, -0.535523885834570220, -0.535481659161118560, -0.535439431148962090, -0.535397201798207710, -0.535354971108960350, -0.535312739081325590, -0.535270505715408910, +-0.535228271011316090, -0.535186034969152510, -0.535143797589023860, -0.535101558871034940, -0.535059318815292890, -0.535017077421902520, -0.534974834690969510, -0.534932590622599350, +-0.534890345216897820, -0.534848098473970300, -0.534805850393921920, -0.534763600976859490, -0.534721350222888250, -0.534679098132113450, -0.534636844704641010, -0.534594589940576510, +-0.534552333840025430, -0.534510076403093560, -0.534467817629886490, -0.534425557520509130, -0.534383296075068630, -0.534341033293669890, -0.534298769176418500, -0.534256503723420260, +-0.534214236934780760, -0.534171968810604910, -0.534129699350999960, -0.534087428556070610, -0.534045156425922760, -0.534002882960662120, -0.533960608160394150, -0.533918332025224650, +-0.533876054555259440, -0.533833775750603980, -0.533791495611363410, -0.533749214137644760, -0.533706931329553160, -0.533664647187194200, -0.533622361710673570, -0.533580074900097070, +-0.533537786755569620, -0.533495497277198470, -0.533453206465088650, -0.533410914319345730, -0.533368620840075520, -0.533326326027383830, -0.533284029881376240, -0.533241732402158660, +-0.533199433589836680, -0.533157133444515320, -0.533114831966301940, -0.533072529155301570, -0.533030225011619780, -0.532987919535362400, -0.532945612726635320, -0.532903304585544140, +-0.532860995112193980, -0.532818684306691990, -0.532776372169143420, -0.532734058699653850, -0.532691743898329070, -0.532649427765275020, -0.532607110300597380, -0.532564791504402060, +-0.532522471376793870, -0.532480149917880290, -0.532437827127766330, -0.532395503006557910, -0.532353177554360620, -0.532310850771280370, -0.532268522657423080, -0.532226193212893660, +-0.532183862437799580, -0.532141530332245760, -0.532099196896338110, -0.532056862130182550, -0.532014526033884770, -0.531972188607550690, -0.531929849851286220, -0.531887509765197050, +-0.531845168349388330, -0.531802825603967520, -0.531760481529039540, -0.531718136124710420, -0.531675789391085950, -0.531633441328272060, -0.531591091936373770, -0.531548741215498440, +-0.531506389165751330, -0.531464035787238220, -0.531421681080065040, -0.531379325044337710, -0.531336967680162030, -0.531294608987643910, -0.531252248966889270, -0.531209887618003250, +-0.531167524941093210, -0.531125160936264380, -0.531082795603622700, -0.531040428943274080, -0.530998060955324310, -0.530955691639878660, -0.530913320997044470, -0.530870949026927110, +-0.530828575729632270, -0.530786201105265980, -0.530743825153934260, -0.530701447875742920, -0.530659069270797980, -0.530616689339205360, -0.530574308081070310, -0.530531925496500190, +-0.530489541585600240, -0.530447156348476500, -0.530404769785234880, -0.530362381895981280, -0.530319992680821750, -0.530277602139861410, -0.530235210273207970, -0.530192817080966330, +-0.530150422563242740, -0.530108026720143120, -0.530065629551773390, -0.530023231058239670, -0.529980831239647790, -0.529938430096103090, -0.529896027627713040, -0.529853623834583010, +-0.529811218716818800, -0.529768812274526660, -0.529726404507812390, -0.529683995416782130, -0.529641585001541130, -0.529599173262196960, -0.529556760198854890, -0.529514345811620820, +-0.529471930100601010, -0.529429513065901250, -0.529387094707627790, -0.529344675025886560, -0.529302254020782900, -0.529259831692424300, -0.529217408040916220, -0.529174983066364570, +-0.529132556768875490, -0.529090129148554910, -0.529047700205509170, -0.529005269939843310, -0.528962838351665020, -0.528920405441079770, -0.528877971208193350, -0.528835535653112140, +-0.528793098775941940, -0.528750660576789100, -0.528708221055759650, -0.528665780212959510, -0.528623338048494260, -0.528580894562471370, -0.528538449754996310, -0.528496003626175100, +-0.528453556176113780, -0.528411107404918700, -0.528368657312695110, -0.528326205899550480, -0.528283753165590510, -0.528241299110920990, -0.528198843735648400, -0.528156387039878550, +-0.528113929023717790, -0.528071469687272250, -0.528029009030647980, -0.527986547053950430, -0.527944083757287300, -0.527901619140763940, -0.527859153204486510, -0.527816685948561240, +-0.527774217373094270, -0.527731747478191740, -0.527689276263959120, -0.527646803730503990, -0.527604329877931930, -0.527561854706348980, -0.527519378215861370, -0.527476900406575360, +-0.527434421278597080, -0.527391940832032780, -0.527349459066987820, -0.527306975983570010, -0.527264491581884820, -0.527222005862038270, -0.527179518824136830, -0.527137030468286530, +-0.527094540794593610, -0.527052049803163670, -0.527009557494104270, -0.526967063867521120, -0.526924568923520130, -0.526882072662207880, -0.526839575083690390, -0.526797076188073920, +-0.526754575975464820, -0.526712074445968460, -0.526669571599692740, -0.526627067436743030, -0.526584561957225690, -0.526542055161246860, -0.526499547048913000, -0.526457037620330250, +-0.526414526875604080, -0.526372014814842410, -0.526329501438150720, -0.526286986745635230, -0.526244470737402330, -0.526201953413558240, -0.526159434774209230, -0.526116914819461660, +-0.526074393549421760, -0.526031870964195240, -0.525989347063889670, -0.525946821848610750, -0.525904295318464830, -0.525861767473558170, -0.525819238313997020, -0.525776707839887060, +-0.525734176051336100, -0.525691642948449720, -0.525649108531334170, -0.525606572800095930, -0.525564035754841230, -0.525521497395676440, -0.525478957722707810, -0.525436416736041910, +-0.525393874435784110, -0.525351330822042440, -0.525308785894922470, -0.525266239654530560, -0.525223692100972970, -0.525181143234356160, -0.525138593054786500, -0.525096041562369660, +-0.525053488757213360, -0.525010934639423500, -0.524968379209106110, -0.524925822466367880, -0.524883264411315160, -0.524840705044054110, -0.524798144364691410, -0.524755582373332640, +-0.524713019070085610, -0.524670454455056000, -0.524627888528350290, -0.524585321290074850, -0.524542752740336130, -0.524500182879240500, -0.524457611706893640, -0.524415039223403490, +-0.524372465428875830, -0.524329890323416930, -0.524287313907133350, -0.524244736180131450, -0.524202157142517720, -0.524159576794398620, -0.524116995135879840, -0.524074412167069290, +-0.524031827888072680, -0.523989242298996570, -0.523946655399947340, -0.523904067191031440, -0.523861477672355360, -0.523818886844024890, -0.523776294706147840, -0.523733701258830120, +-0.523691106502178210, -0.523648510436298450, -0.523605913061297560, -0.523563314377281760, -0.523520714384357650, -0.523478113082631810, -0.523435510472209930, -0.523392906553200030, +-0.523350301325707810, -0.523307694789839850, -0.523265086945702730, -0.523222477793402810, -0.523179867333046000, -0.523137255564740220, -0.523094642488591390, -0.523052028104705860, +-0.523009412413190320, -0.522966795414151250, -0.522924177107695230, -0.522881557493928620, -0.522838936572958210, -0.522796314344889710, -0.522753690809831140, -0.522711065967888410, +-0.522668439819168000, -0.522625812363776480, -0.522583183601820430, -0.522540553533406340, -0.522497922158640220, -0.522455289477629980, -0.522412655490481550, -0.522370020197301500, +-0.522327383598196420, -0.522284745693272770, -0.522242106482637360, -0.522199465966396660, -0.522156824144656470, -0.522114181017525050, -0.522071536585108190, -0.522028890847512470, +-0.521986243804844490, -0.521943595457210920, -0.521900945804718350, -0.521858294847472700, -0.521815642585582110, -0.521772989019152370, -0.521730334148290060, -0.521687677973102000, +-0.521645020493694770, -0.521602361710174930, -0.521559701622649200, -0.521517040231223470, -0.521474377536005900, -0.521431713537102380, -0.521389048234619620, -0.521346381628664200, +-0.521303713719342810, -0.521261044506762140, -0.521218373991028110, -0.521175702172248960, -0.521133029050530490, -0.521090354625979410, -0.521047678898702520, -0.521005001868806380, +-0.520962323536397820, -0.520919643901583410, -0.520876962964469840, -0.520834280725163130, -0.520791597183771550, -0.520748912340400880, -0.520706226195157940, -0.520663538748149520, +-0.520620849999482100, -0.520578159949261930, -0.520535468597597030, -0.520492775944593530, -0.520450081990358140, -0.520407386734997420, -0.520364690178618310, -0.520321992321327480, +-0.520279293163231630, -0.520236592704437560, -0.520193890945051200, -0.520151187885180890, -0.520108483524932660, -0.520065777864413210, -0.520023070903729350, -0.519980362642987750, +-0.519937653082295230, -0.519894942221757810, -0.519852230061483840, -0.519809516601579370, -0.519766801842150960, -0.519724085783305640, -0.519681368425150110, -0.519638649767791060, +-0.519595929811335510, -0.519553208555889270, -0.519510486001560910, -0.519467762148456250, -0.519425036996682080, -0.519382310546345430, -0.519339582797552990, -0.519296853750411680, +-0.519254123405027300, -0.519211391761508540, -0.519168658819961220, -0.519125924580492230, -0.519083189043208490, -0.519040452208216710, -0.518997714075623780, -0.518954974645536640, +-0.518912233918061290, -0.518869491893306110, -0.518826748571377230, -0.518784003952381450, -0.518741258036425680, -0.518698510823616730, -0.518655762314061520, -0.518613012507866070, +-0.518570261405138950, -0.518527509005986100, -0.518484755310514520, -0.518442000318831140, -0.518399244031042650, -0.518356486447256070, -0.518313727567578320, -0.518270967392116200, +-0.518228205920975850, -0.518185443154265850, -0.518142679092092220, -0.518099913734561880, -0.518057147081781740, -0.518014379133858730, -0.517971609890898970, -0.517928839353011040, +-0.517886067520300970, -0.517843294392875690, -0.517800519970842200, -0.517757744254307430, -0.517714967243378290, -0.517672188938161800, -0.517629409338764780, -0.517586628445293460, +-0.517543846257856320, -0.517501062776559610, -0.517458278001510230, -0.517415491932815110, -0.517372704570581380, -0.517329915914915730, -0.517287125965924630, -0.517244334723716450, +-0.517201542188397420, -0.517158748360074580, -0.517115953238854840, -0.517073156824845230, -0.517030359118152650, -0.516987560118884250, -0.516944759827146160, -0.516901958243046970, +-0.516859155366692910, -0.516816351198190920, -0.516773545737648000, -0.516730738985171300, -0.516687930940867620, -0.516645121604843550, -0.516602310977207320, -0.516559499058065310, +-0.516516685847524530, -0.516473871345692110, -0.516431055552674990, -0.516388238468580170, -0.516345420093514810, -0.516302600427585130, -0.516259779470899740, -0.516216957223564870, +-0.516174133685687650, -0.516131308857375020, -0.516088482738734200, -0.516045655329872120, -0.516002826630895140, -0.515959996641911830, -0.515917165363028560, -0.515874332794352350, +-0.515831498935990340, -0.515788663788049660, -0.515745827350637230, -0.515702989623860190, -0.515660150607825770, -0.515617310302640130, -0.515574468708412060, -0.515531625825247810, +-0.515488781653254400, -0.515445936192539090, -0.515403089443209010, -0.515360241405370290, -0.515317392079131850, -0.515274541464599940, -0.515231689561881590, -0.515188836371084040, +-0.515145981892314530, -0.515103126125679880, -0.515060269071287550, -0.515017410729244450, -0.514974551099657060, -0.514931690182634180, -0.514888827978281950, -0.514845964486707720, +-0.514803099708018520, -0.514760233642321600, -0.514717366289724090, -0.514674497650332460, -0.514631627724255300, -0.514588756511599080, -0.514545884012470920, -0.514503010226978090, +-0.514460135155227700, -0.514417258797327030, -0.514374381153383190, -0.514331502223502660, -0.514288622007794130, -0.514245740506364070, -0.514202857719319620, -0.514159973646767910, +-0.514117088288816420, -0.514074201645572160, -0.514031313717141720, -0.513988424503633580, -0.513945534005154530, -0.513902642221811590, -0.513859749153712020, -0.513816854800963170, +-0.513773959163672080, -0.513731062241946090, -0.513688164035891790, -0.513645264545617760, -0.513602363771230590, -0.513559461712837510, -0.513516558370545770, -0.513473653744462630, +-0.513430747834695330, -0.513387840641350460, -0.513344932164536690, -0.513302022404360620, -0.513259111360929500, -0.513216199034350670, -0.513173285424731280, -0.513130370532178580, +-0.513087454356800140, -0.513044536898702890, -0.513001618157993610, -0.512958698134781120, -0.512915776829171780, -0.512872854241273050, -0.512829930371192180, -0.512787005219036420, +-0.512744078784912460, -0.512701151068929000, -0.512658222071192720, -0.512615291791810870, -0.512572360230890810, -0.512529427388539790, -0.512486493264865280, -0.512443557859974530, +-0.512400621173974890, -0.512357683206972840, -0.512314743959077390, -0.512271803430395130, -0.512228861621033320, -0.512185918531099290, -0.512142974160700650, -0.512100028509943630, +-0.512057081578937370, -0.512014133367788450, -0.511971183876604120, -0.511928233105491850, -0.511885281054558990, -0.511842327723913030, -0.511799373113661080, -0.511756417223910850, +-0.511713460054768700, -0.511670501606343750, -0.511627541878742490, -0.511584580872072480, -0.511541618586440870, -0.511498655021955240, -0.511455690178723050, -0.511412724056850900, +-0.511369756656447570, -0.511326787977619880, -0.511283818020475290, -0.511240846785121160, -0.511197874271664850, -0.511154900480213840, -0.511111925410875690, -0.511068949063756880, +-0.511025971438966440, -0.510982992536611170, -0.510940012356798310, -0.510897030899635450, -0.510854048165230060, -0.510811064153689490, -0.510768078865120550, -0.510725092299632140, +-0.510682104457330980, -0.510639115338324620, -0.510596124942720440, -0.510553133270625900, -0.510510140322148590, -0.510467146097395850, -0.510424150596475390, -0.510381153819493670, +-0.510338155766559830, -0.510295156437780670, -0.510252155833263550, -0.510209153953116170, -0.510166150797445760, -0.510123146366359250, -0.510080140659965650, -0.510037133678371780, +-0.509994125421684990, -0.509951115890012850, -0.509908105083462960, -0.509865093002142780, -0.509822079646159890, -0.509779065015621870, -0.509736049110635300, -0.509693031931309440, +-0.509650013477751070, -0.509606993750067570, -0.509563972748366620, -0.509520950472755700, -0.509477926923341710, -0.509434902100233570, -0.509391876003538190, -0.509348848633363160, +-0.509305819989816060, -0.509262790073004350, -0.509219758883035610, -0.509176726420017540, -0.509133692684057730, -0.509090657675262850, -0.509047621393742040, -0.509004583839602230, +-0.508961545012950990, -0.508918504913895790, -0.508875463542544430, -0.508832420899004380, -0.508789376983382450, -0.508746331795787880, -0.508703285336327580, -0.508660237605108920, +-0.508617188602239700, -0.508574138327827610, -0.508531086781980110, -0.508488033964804800, -0.508444979876408800, -0.508401924516901030, -0.508358867886388400, -0.508315809984978720, +-0.508272750812779450, -0.508229690369898290, -0.508186628656442930, -0.508143565672520280, -0.508100501418239370, -0.508057435893707330, -0.508014369099031530, -0.507971301034319980, +-0.507928231699680040, -0.507885161095219640, -0.507842089221046340, -0.507799016077267740, -0.507755941663990850, -0.507712865981324920, -0.507669789029376760, -0.507626710808254170, +-0.507583631318064720, -0.507540550558916340, -0.507497468530915710, -0.507454385234172190, -0.507411300668792700, -0.507368214834885030, -0.507325127732556780, -0.507282039361915630, +-0.507238949723069490, -0.507195858816125940, -0.507152766641192800, -0.507109673198376850, -0.507066578487787580, -0.507023482509531890, -0.506980385263717360, -0.506937286750452020, +-0.506894186969843340, -0.506851085921998460, -0.506807983607026720, -0.506764880025034950, -0.506721775176130930, -0.506678669060422580, -0.506635561678017490, -0.506592453029023560, +-0.506549343113548380, -0.506506231931699970, -0.506463119483585130, -0.506420005769313230, -0.506376890788991400, -0.506333774542727320, -0.506290657030628810, -0.506247538252803660, +-0.506204418209359570, -0.506161296900403790, -0.506118174326045440, -0.506075050486391790, -0.506031925381550400, -0.505988799011629190, -0.505945671376736070, -0.505902542476978630, +-0.505859412312465010, -0.505816280883301990, -0.505773148189599060, -0.505730014231463240, -0.505686879009002330, -0.505643742522324360, -0.505600604771536900, -0.505557465756748090, +-0.505514325478064740, -0.505471183935596310, -0.505428041129449950, -0.505384897059733550, -0.505341751726554820, -0.505298605130021780, -0.505255457270242130, -0.505212308147323990, +-0.505169157761374170, -0.505126006112502360, -0.505082853200815360, -0.505039699026421320, -0.504996543589428140, -0.504953386889943400, -0.504910228928075360, -0.504867069703930920, +-0.504823909217619550, -0.504780747469248390, -0.504737584458925360, -0.504694420186758470, -0.504651254652855430, -0.504608087857324250, -0.504564919800272960, -0.504521750481809250, +-0.504478579902040480, -0.504435408061076010, -0.504392234959022970, -0.504349060595989380, -0.504305884972083060, -0.504262708087412140, -0.504219529942083630, -0.504176350536207130, +-0.504133169869889650, -0.504089987943239340, -0.504046804756363990, -0.504003620309371620, -0.503960434602370280, -0.503917247635467750, -0.503874059408772170, -0.503830869922390680, +-0.503787679176432750, -0.503744487171005730, -0.503701293906217320, -0.503658099382175760, -0.503614903598988970, -0.503571706556764860, -0.503528508255610800, -0.503485308695636240, +-0.503442107876948320, -0.503398905799655180, -0.503355702463864740, -0.503312497869685130, -0.503269292017224150, -0.503226084906590040, -0.503182876537889840, -0.503139666911233350, +-0.503096456026727700, -0.503053243884480810, -0.503010030484600800, -0.502966815827195820, -0.502923599912373680, -0.502880382740241830, -0.502837164310909860, -0.502793944624484900, +-0.502750723681075100, -0.502707501480788470, -0.502664278023733150, -0.502621053310017050, -0.502577827339748320, -0.502534600113034300, -0.502491371629984580, -0.502448141890706410, +-0.502404910895307810, -0.502361678643897020, -0.502318445136581970, -0.502275210373470890, -0.502231974354670930, -0.502188737080291770, -0.502145498550440880, -0.502102258765226180, +-0.502059017724755920, -0.502015775429138000, -0.501972531878480680, -0.501929287072892080, -0.501886041012480240, -0.501842793697352410, -0.501799545127618480, -0.501756295303385720, +-0.501713044224762150, -0.501669791891856010, -0.501626538304775330, -0.501583283463627570, -0.501540027368522430, -0.501496770019567160, -0.501453511416870000, -0.501410251560539090, +-0.501366990450682450, -0.501323728087408440, -0.501280464470824970, -0.501237199601040410, -0.501193933478162100, -0.501150666102299750, -0.501107397473560700, -0.501064127592053210, +-0.501020856457885300, -0.500977584071165330, -0.500934310432001430, -0.500891035540500850, -0.500847759396773620, -0.500804482000926860, -0.500761203353068950, -0.500717923453308010, +-0.500674642301752290, -0.500631359898509930, -0.500588076243689170, -0.500544791337397490, -0.500501505179744570, -0.500458217770837880, -0.500414929110785670, -0.500371639199696070, +-0.500328348037677450, -0.500285055624837940, -0.500241761961285000, -0.500198467047128450, -0.500155170882475740, -0.500111873467435130, -0.500068574802114750, -0.500025274886623070, +-0.499981973721068060, -0.499938671305558190, -0.499895367640200870, -0.499852062725105850, -0.499808756560380710, -0.499765449146133690, -0.499722140482473040, -0.499678830569507020, +-0.499635519407343960, -0.499592206996091300, -0.499548893335858890, -0.499505578426754250, -0.499462262268885680, -0.499418944862361490, -0.499375626207289870, -0.499332306303779230, +-0.499288985151937760, -0.499245662751873880, -0.499202339103695100, -0.499159014207511190, -0.499115688063429760, -0.499072360671559130, -0.499029032032007550, -0.498985702144883470, +-0.498942371010294260, -0.498899038628350000, -0.498855704999158100, -0.498812370122826920, -0.498769033999464820, -0.498725696629180150, -0.498682358012081220, -0.498639018148276380, +-0.498595677037874050, -0.498552334680981700, -0.498508991077709300, -0.498465646228164470, -0.498422300132455480, -0.498378952790690780, -0.498335604202978620, -0.498292254369427530, +-0.498248903290144980, -0.498205550965240940, -0.498162197394823090, -0.498118842578999690, -0.498075486517879200, -0.498032129211569970, -0.497988770660180440, -0.497945410863818990, +-0.497902049822593230, -0.497858687536613110, -0.497815324005986270, -0.497771959230821180, -0.497728593211226090, -0.497685225947309570, -0.497641857439179990, -0.497598487686945030, +-0.497555116690714560, -0.497511744450596320, -0.497468370966698710, -0.497424996239130220, -0.497381620267999200, -0.497338243053414120, -0.497294864595483440, -0.497251484894314870, +-0.497208103950018300, -0.497164721762701490, -0.497121338332472910, -0.497077953659440910, -0.497034567743714070, -0.496991180585400820, -0.496947792184608830, -0.496904402541448190, +-0.496861011656026470, -0.496817619528452270, -0.496774226158833990, -0.496730831547280150, -0.496687435693899230, -0.496644038598799690, -0.496600640262090110, -0.496557240683878130, +-0.496513839864273830, -0.496470437803384900, -0.496427034501319920, -0.496383629958187360, -0.496340224174095680, -0.496296817149152690, -0.496253408883468420, -0.496209999377150660, +-0.496166588630307880, -0.496123176643048610, -0.496079763415481430, -0.496036348947714810, -0.495992933239857330, -0.495949516292017560, -0.495906098104303140, -0.495862678676824320, +-0.495819258009688790, -0.495775836103005070, -0.495732412956881810, -0.495688988571427510, -0.495645562946750720, -0.495602136082959280, -0.495558707980163270, -0.495515278638470450, +-0.495471848057989490, -0.495428416238828830, -0.495384983181097190, -0.495341548884903120, -0.495298113350355120, -0.495254676577561060, -0.495211238566631130, -0.495167799317673070, +-0.495124358830795530, -0.495080917106107080, -0.495037474143716350, -0.494994029943731930, -0.494950584506261670, -0.494907137831415710, -0.494863689919301910, -0.494820240770028840, +-0.494776790383705200, -0.494733338760439620, -0.494689885900340690, -0.494646431803517030, -0.494602976470076510, -0.494559519900129310, -0.494516062093783290, -0.494472603051147150, +-0.494429142772329520, -0.494385681257439040, -0.494342218506584330, -0.494298754519873260, -0.494255289297416130, -0.494211822839320800, -0.494168355145695850, -0.494124886216650070, +-0.494081416052292060, -0.494037944652730490, -0.493994472018074060, -0.493950998148431460, -0.493907523043910560, -0.493864046704621640, -0.493820569130672630, -0.493777090322172210, +-0.493733610279229020, -0.493690129001951810, -0.493646646490448540, -0.493603162744829400, -0.493559677765202380, -0.493516191551676140, -0.493472704104359390, -0.493429215423360930, +-0.493385725508789450, -0.493342234360753580, -0.493298741979362190, -0.493255248364723120, -0.493211753516946740, -0.493168257436141010, -0.493124760122414570, -0.493081261575876280, +-0.493037761796634780, -0.492994260784798910, -0.492950758540476650, -0.492907255063778190, -0.492863750354811670, -0.492820244413685720, -0.492776737240509190, -0.492733228835390780, +-0.492689719198439350, -0.492646208329763580, -0.492602696229471500, -0.492559182897673530, -0.492515668334477520, -0.492472152539992380, -0.492428635514326860, -0.492385117257589770, +-0.492341597769889840, -0.492298077051335160, -0.492254555102036080, -0.492211031922100580, -0.492167507511637570, -0.492123981870755730, -0.492080454999563930, -0.492036926898171020, +-0.491993397566685750, -0.491949867005216260, -0.491906335213872890, -0.491862802192763630, -0.491819267941997370, -0.491775732461682990, -0.491732195751929220, -0.491688657812844990, +-0.491645118644538360, -0.491601578247119700, -0.491558036620697080, -0.491514493765379370, -0.491470949681275420, -0.491427404368494140, -0.491383857827144280, -0.491340310057334810, +-0.491296761059174580, -0.491253210832771630, -0.491209659378236460, -0.491166106695677170, -0.491122552785202560, -0.491078997646921590, -0.491035441280943120, -0.490991883687375290, +-0.490948324866328500, -0.490904764817910900, -0.490861203542231390, -0.490817641039398900, -0.490774077309522270, -0.490730512352710480, -0.490686946169072380, -0.490643378758716940, +-0.490599810121752240, -0.490556240258288870, -0.490512669168434830, -0.490469096852299110, -0.490425523309990670, -0.490381948541618430, -0.490338372547291350, -0.490294795327117510, +-0.490251216881207490, -0.490207637209669420, -0.490164056312612230, -0.490120474190144930, -0.490076890842376430, -0.490033306269415710, -0.489989720471371740, -0.489946133448352640, +-0.489902545200469050, -0.489858955727829060, -0.489815365030541680, -0.489771773108715890, -0.489728179962460650, -0.489684585591884990, -0.489640989997097100, -0.489597393178207500, +-0.489553795135324380, -0.489510195868556820, -0.489466595378013740, -0.489422993663804210, -0.489379390726037140, -0.489335786564821630, -0.489292181180265850, -0.489248574572480440, +-0.489204966741573540, -0.489161357687654290, -0.489117747410831580, -0.489074135911214570, -0.489030523188912160, -0.488986909244032710, -0.488943294076686740, -0.488899677686982500, +-0.488856060075029130, -0.488812441240935590, -0.488768821184810910, -0.488725199906764220, -0.488681577406904490, -0.488637953685340850, -0.488594328742181560, -0.488550702577537190, +-0.488507075191516090, -0.488463446584227300, -0.488419816755779890, -0.488376185706282940, -0.488332553435844750, -0.488288919944575960, -0.488245285232584810, -0.488201649299980560, +-0.488158012146872100, -0.488114373773368640, -0.488070734179579250, -0.488027093365613010, -0.487983451331579000, -0.487939808077585640, -0.487896163603743550, -0.487852517910160990, +-0.487808870996947200, -0.487765222864211200, -0.487721573512062130, -0.487677922940608350, -0.487634271149960550, -0.487590618140227080, -0.487546963911517080, -0.487503308463939630, +-0.487459651797603980, -0.487415993912619140, -0.487372334809094310, -0.487328674487138680, -0.487285012946860550, -0.487241350188370670, -0.487197686211777450, -0.487154021017189960, +-0.487110354604717470, -0.487066686974469090, -0.487023018126553960, -0.486979348061080510, -0.486935676778159520, -0.486892004277899300, -0.486848330560409050, -0.486804655625798000, +-0.486760979474175290, -0.486717302105650120, -0.486673623520331780, -0.486629943718328520, -0.486586262699751190, -0.486542580464708220, -0.486498897013308780, -0.486455212345662140, +-0.486411526461877460, -0.486367839362063960, -0.486324151046330030, -0.486280461514786540, -0.486236770767541900, -0.486193078804705360, -0.486149385626386100, -0.486105691232693370, +-0.486061995623736420, -0.486018298799624440, -0.485974600760466780, -0.485930901506371800, -0.485887201037450370, -0.485843499353810880, -0.485799796455562700, -0.485756092342815030, +-0.485712387015677090, -0.485668680474257430, -0.485624972718666840, -0.485581263749013840, -0.485537553565407620, -0.485493842167957550, -0.485450129556772910, -0.485406415731962910, +-0.485362700693636910, -0.485318984441904130, -0.485275266976873070, -0.485231548298654670, -0.485187828407357410, -0.485144107303090540, -0.485100384985963420, -0.485056661456085340, +-0.485012936713564820, -0.484969210758512740, -0.484925483591037650, -0.484881755211248820, -0.484838025619255650, -0.484794294815167390, -0.484750562799093400, -0.484706829571142970, +-0.484663095131425470, -0.484619359480049530, -0.484575622617125890, -0.484531884542763190, -0.484488145257070850, -0.484444404760158100, -0.484400663052134310, -0.484356920133108940, +-0.484313176003190400, -0.484269430662489790, -0.484225684111115550, -0.484181936349177110, -0.484138187376783820, -0.484094437194045050, -0.484050685801070250, -0.484006933197968670, +-0.483963179384849010, -0.483919424361822170, -0.483875668128996740, -0.483831910686482180, -0.483788152034387850, -0.483744392172823110, -0.483700631101897430, -0.483656868821719380, +-0.483613105332399870, -0.483569340634047660, -0.483525574726772100, -0.483481807610682600, -0.483438039285888580, -0.483394269752499440, -0.483350499010624660, -0.483306727060373640, +-0.483262953901854970, -0.483219179535179730, -0.483175403960456550, -0.483131627177794840, -0.483087849187304070, -0.483044069989093660, -0.483000289583272350, -0.482956507969951040, +-0.482912725149238440, -0.482868941121244120, -0.482825155886077380, -0.482781369443847750, -0.482737581794664690, -0.482693792938637730, -0.482650002875876230, -0.482606211606488980, +-0.482562419130586950, -0.482518625448278890, -0.482474830559674270, -0.482431034464882560, -0.482387237164013270, -0.482343438657175160, -0.482299638944479140, -0.482255838026034110, +-0.482212035901949440, -0.482168232572334650, -0.482124428037299320, -0.482080622296952920, -0.482036815351404970, -0.481993007200764990, -0.481949197845141670, -0.481905387284646160, +-0.481861575519387190, -0.481817762549474280, -0.481773948375016910, -0.481730132996124720, -0.481686316412907210, -0.481642498625473090, -0.481598679633933550, -0.481554859438397260, +-0.481511038038973880, -0.481467215435772870, -0.481423391628903800, -0.481379566618476310, -0.481335740404599870, -0.481291912987383270, -0.481248084366937720, -0.481204254543371900, +-0.481160423516795500, -0.481116591287318040, -0.481072757855049050, -0.481028923220098210, -0.480985087382574280, -0.480941250342588390, -0.480897412100249390, -0.480853572655666860, +-0.480809732008950390, -0.480765890160209600, -0.480722047109554070, -0.480678202857093450, -0.480634357402937310, -0.480590510747194500, -0.480546662889976160, -0.480502813831391210, +-0.480458963571549210, -0.480415112110559760, -0.480371259448532590, -0.480327405585576460, -0.480283550521802600, -0.480239694257319880, -0.480195836792237930, -0.480151978126666380, +-0.480108118260714870, -0.480064257194493080, -0.480020394928110610, -0.479976531461677180, -0.479932666795301670, -0.479888800929095250, -0.479844933863166790, -0.479801065597626030, +-0.479757196132582610, -0.479713325468146210, -0.479669453604425700, -0.479625580541532310, -0.479581706279575030, -0.479537830818663410, -0.479493954158907280, -0.479450076300416250, +-0.479406197243300030, -0.479362316987668290, -0.479318435533630790, -0.479274552881296390, -0.479230669030776380, -0.479186783982179730, -0.479142897735616140, -0.479099010291195280, +-0.479055121649026860, -0.479011231809220670, -0.478967340771885630, -0.478923448537133030, -0.478879555105071740, -0.478835660475811660, -0.478791764649462380, -0.478747867626133640, +-0.478703969405935290, -0.478660069988977030, -0.478616169375367770, -0.478572267565218870, -0.478528364558639340, -0.478484460355738880, -0.478440554956627240, -0.478396648361414270, +-0.478352740570209660, -0.478308831583122370, -0.478264921400263830, -0.478221010021743000, -0.478177097447669620, -0.478133183678153490, -0.478089268713304370, -0.478045352553232160, +-0.478001435198046500, -0.477957516647856520, -0.477913596902773520, -0.477869675962906470, -0.477825753828365280, -0.477781830499259710, -0.477737905975699540, -0.477693980257794640, +-0.477650053345653970, -0.477606125239389000, -0.477562195939108650, -0.477518265444922870, -0.477474333756941370, -0.477430400875274110, -0.477386466800030770, -0.477342531531321280, +-0.477298595069254710, -0.477254657413942460, -0.477210718565493520, -0.477166778524017790, -0.477122837289625120, -0.477078894862425330, -0.477034951242528320, -0.476991006430043940, +-0.476947060425081280, -0.476903113227751700, -0.476859164838164370, -0.476815215256429170, -0.476771264482655890, -0.476727312516954440, -0.476683359359434680, -0.476639405010206570, +-0.476595449469379150, -0.476551492737063930, -0.476507534813369940, -0.476463575698407080, -0.476419615392285330, -0.476375653895114550, -0.476331691207004580, -0.476287727328064630, +-0.476243762258406140, -0.476199795998138280, -0.476155828547370870, -0.476111859906213960, -0.476067890074777340, -0.476023919053171040, -0.475979946841504910, -0.475935973439888140, +-0.475891998848432200, -0.475848023067246270, -0.475804046096440340, -0.475760067936124240, -0.475716088586407960, -0.475672108047401510, -0.475628126319213970, -0.475584143401956870, +-0.475540159295739450, -0.475496174000671620, -0.475452187516863410, -0.475408199844424670, -0.475364210983465430, -0.475320220934095710, -0.475276229696424580, -0.475232237270563740, +-0.475188243656622270, -0.475144248854710180, -0.475100252864937460, -0.475056255687414110, -0.475012257322250160, -0.474968257769554760, -0.474924257029439520, -0.474880255102013590, +-0.474836251987387050, -0.474792247685669910, -0.474748242196972090, -0.474704235521403730, -0.474660227659074730, -0.474616218610094400, -0.474572208374574310, -0.474528196952623660, +-0.474484184344352580, -0.474440170549870980, -0.474396155569288990, -0.474352139402716590, -0.474308122050263850, -0.474264103512040070, -0.474220083788156780, -0.474176062878723270, +-0.474132040783849570, -0.474088017503645820, -0.474043993038221980, -0.473999967387688240, -0.473955940552154510, -0.473911912531730150, -0.473867883326526800, -0.473823852936653740, +-0.473779821362221080, -0.473735788603338870, -0.473691754660117150, -0.473647719532666040, -0.473603683221094860, -0.473559645725515290, -0.473515607046036570, -0.473471567182768840, +-0.473427526135822170, -0.473383483905306710, -0.473339440491332530, -0.473295395894009760, -0.473251350113447710, -0.473207303149758060, -0.473163255003050180, -0.473119205673434130, +-0.473075155161020110, -0.473031103465918200, -0.472987050588238480, -0.472942996528090350, -0.472898941285585570, -0.472854884860833380, -0.472810827253944020, -0.472766768465027580, +-0.472722708494194230, -0.472678647341554070, -0.472634585007217330, -0.472590521491293320, -0.472546456793893840, -0.472502390915128130, -0.472458323855106500, -0.472414255613939070, +-0.472370186191735990, -0.472326115588607430, -0.472282043804662820, -0.472237970840013840, -0.472193896694769970, -0.472149821369041380, -0.472105744862938210, -0.472061667176570670, +-0.472017588310048970, -0.471973508263483280, -0.471929427036983040, -0.471885344630660060, -0.471841261044623710, -0.471797176278984150, -0.471753090333851710, -0.471709003209336510, +-0.471664914905548790, -0.471620825422598810, -0.471576734760596030, -0.471532642919652130, -0.471488549899876650, -0.471444455701379770, -0.471400360324271740, -0.471356263768662850, +-0.471312166034663300, -0.471268067122383340, -0.471223967031932370, -0.471179865763422300, -0.471135763316962610, -0.471091659692663480, -0.471047554890635160, -0.471003448910988000, +-0.470959341753832190, -0.470915233419277270, -0.470871123907435020, -0.470827013218415020, -0.470782901352327420, -0.470738788309282620, -0.470694674089390810, -0.470650558692762340, +-0.470606442119507420, -0.470562324369735660, -0.470518205443558880, -0.470474085341086590, -0.470429964062429040, -0.470385841607696640, -0.470341717976999580, -0.470297593170448280, +-0.470253467188152140, -0.470209340030223190, -0.470165211696770840, -0.470121082187905490, -0.470076951503737460, -0.470032819644376990, -0.469988686609934480, -0.469944552400520300, +-0.469900417016243910, -0.469856280457217280, -0.469812142723549990, -0.469768003815352280, -0.469723863732734560, -0.469679722475807250, -0.469635580044680530, -0.469591436439464160, +-0.469547291660269980, -0.469503145707207530, -0.469458998580387250, -0.469414850279919470, -0.469370700805914530, -0.469326550158482850, -0.469282398337734830, -0.469238245343780000, +-0.469194091176730330, -0.469149935836695450, -0.469105779323785720, -0.469061621638111550, -0.469017462779783350, -0.468973302748911470, -0.468929141545606330, -0.468884979169977570, +-0.468840815622137140, -0.468796650902194630, -0.468752485010260570, -0.468708317946445240, -0.468664149710859120, -0.468619980303612630, -0.468575809724816220, -0.468531637974579470, +-0.468487465053014420, -0.468443290960230680, -0.468399115696338740, -0.468354939261449000, -0.468310761655671930, -0.468266582879117930, -0.468222402931896760, -0.468178221814120280, +-0.468134039525898270, -0.468089856067341210, -0.468045671438559460, -0.468001485639663540, -0.467957298670763910, -0.467913110531971040, -0.467868921223394570, -0.467824730745146630, +-0.467780539097336860, -0.467736346280075710, -0.467692152293473720, -0.467647957137641350, -0.467603760812689060, -0.467559563318726610, -0.467515364655866020, -0.467471164824217020, +-0.467426963823890150, -0.467382761654995820, -0.467338558317644590, -0.467294353811947010, -0.467250148138013520, -0.467205941295953830, -0.467161733285880120, -0.467117524107902080, +-0.467073313762130240, -0.467029102248675050, -0.466984889567647170, -0.466940675719157040, -0.466896460703314420, -0.466852244520231500, -0.466808027170017900, -0.466763808652784270, +-0.466719588968641070, -0.466675368117698940, -0.466631146100068390, -0.466586922915859960, -0.466542698565183430, -0.466498473048150950, -0.466454246364872320, -0.466410018515458050, +-0.466365789500018720, -0.466321559318664920, -0.466277327971507230, -0.466233095458656210, -0.466188861780221670, -0.466144626936315810, -0.466100390927048300, -0.466056153752529840, +-0.466011915412871010, -0.465967675908182390, -0.465923435238574600, -0.465879193404158180, -0.465834950405043020, -0.465790706241341280, -0.465746460913162740, -0.465702214420618100, +-0.465657966763817880, -0.465613717942872760, -0.465569467957893330, -0.465525216808989450, -0.465480964496273300, -0.465436711019854790, -0.465392456379844440, -0.465348200576353010, +-0.465303943609491010, -0.465259685479369190, -0.465215426186098180, -0.465171165729787780, -0.465126904110550240, -0.465082641328495470, -0.465038377383734100, -0.464994112276376770, +-0.464949846006534220, -0.464905578574316970, -0.464861309979835050, -0.464817040223200580, -0.464772769304523550, -0.464728497223914570, -0.464684223981484400, -0.464639949577343610, +-0.464595674011603010, -0.464551397284373170, -0.464507119395764060, -0.464462840345887920, -0.464418560134854720, -0.464374278762775150, -0.464329996229759790, -0.464285712535919490, +-0.464241427681364950, -0.464197141666206010, -0.464152854490554990, -0.464108566154521840, -0.464064276658217310, -0.464019986001752040, -0.463975694185236820, -0.463931401208782400, +-0.463887107072499420, -0.463842811776497940, -0.463798515320890170, -0.463754217705786180, -0.463709918931296590, -0.463665618997532230, -0.463621317904603760, -0.463577015652622050, +-0.463532712241697790, -0.463488407671940990, -0.463444101943463920, -0.463399795056376630, -0.463355487010789820, -0.463311177806814300, -0.463266867444560860, -0.463222555924140190, +-0.463178243245663200, -0.463133929409239810, -0.463089614414982310, -0.463045298263000840, -0.463000980953406140, -0.462956662486308960, -0.462912342861820090, -0.462868022080050400, +-0.462823700141109850, -0.462779377045110850, -0.462735052792163430, -0.462690727382378380, -0.462646400815866440, -0.462602073092738600, -0.462557744213105470, -0.462513414177078030, +-0.462469082984766300, -0.462424750636282630, -0.462380417131737050, -0.462336082471240470, -0.462291746654903690, -0.462247409682837510, -0.462203071555152780, -0.462158732271959640, +-0.462114391833370440, -0.462070050239495270, -0.462025707490444970, -0.461981363586330350, -0.461937018527262380, -0.461892672313351850, -0.461848324944709620, -0.461803976421445830, +-0.461759626743672880, -0.461715275911500860, -0.461670923925040610, -0.461626570784403110, -0.461582216489699100, -0.461537861041039610, -0.461493504438534710, -0.461449146682296810, +-0.461404787772435990, -0.461360427709063270, -0.461316066492289460, -0.461271704122225460, -0.461227340598982240, -0.461182975922670600, -0.461138610093400790, -0.461094243111285220, +-0.461049874976434070, -0.461005505688958210, -0.460961135248968590, -0.460916763656576130, -0.460872390911891800, -0.460828017015025680, -0.460783641966090280, -0.460739265765195800, +-0.460694888412453150, -0.460650509907973290, -0.460606130251867140, -0.460561749444245660, -0.460517367485219820, -0.460472984374900530, -0.460428600113398030, -0.460384214700824800, +-0.460339828137291020, -0.460295440422907710, -0.460251051557785780, -0.460206661542036210, -0.460162270375770010, -0.460117878059097320, -0.460073484592130770, -0.460029089974980430, +-0.459984694207757450, -0.459940297290572670, -0.459895899223537190, -0.459851500006761950, -0.459807099640357930, -0.459762698124435380, -0.459718295459106920, -0.459673891644482690, +-0.459629486680673720, -0.459585080567791020, -0.459540673305945670, -0.459496264895248590, -0.459451855335810120, -0.459407444627742740, -0.459363032771156750, -0.459318619766163230, +-0.459274205612873130, -0.459229790311397490, -0.459185373861847430, -0.459140956264333880, -0.459096537518967170, -0.459052117625859900, -0.459007696585122360, -0.458963274396865570, +-0.458918851061200620, -0.458874426578238510, -0.458830000948090340, -0.458785574170866350, -0.458741146246679220, -0.458696717175639260, -0.458652286957857480, -0.458607855593445020, +-0.458563423082512910, -0.458518989425172220, -0.458474554621534080, -0.458430118671708740, -0.458385681575808890, -0.458341243333944830, -0.458296803946227680, -0.458252363412768540, +-0.458207921733678470, -0.458163478909068610, -0.458119034939049260, -0.458074589823733060, -0.458030143563230460, -0.457985696157652440, -0.457941247607110250, -0.457896797911714890, +-0.457852347071577510, -0.457807895086809360, -0.457763441957521390, -0.457718987683824020, -0.457674532265830050, -0.457630075703649660, -0.457585617997394110, -0.457541159147174530, +-0.457496699153102090, -0.457452238015287840, -0.457407775733842230, -0.457363312308877950, -0.457318847740505410, -0.457274382028835750, -0.457229915173980150, -0.457185447176049700, +-0.457140978035155690, -0.457096507751409250, -0.457052036324920700, -0.457007563755802870, -0.456963090044166130, -0.456918615190121670, -0.456874139193780670, -0.456829662055254330, +-0.456785183774653820, -0.456740704352089580, -0.456696223787674330, -0.456651742081518540, -0.456607259233733410, -0.456562775244430120, -0.456518290113719920, -0.456473803841713990, +-0.456429316428523520, -0.456384827874258990, -0.456340338179033130, -0.456295847342956470, -0.456251355366140200, -0.456206862248695550, -0.456162367990733730, -0.456117872592365970, +-0.456073376053702790, -0.456028878374856890, -0.455984379555938850, -0.455939879597059840, -0.455895378498331120, -0.455850876259863980, -0.455806372881769620, -0.455761868364159330, +-0.455717362707143580, -0.455672855910835280, -0.455628347975344740, -0.455583838900783410, -0.455539328687262430, -0.455494817334893170, -0.455450304843786850, -0.455405791214053950, +-0.455361276445807370, -0.455316760539157650, -0.455272243494215970, -0.455227725311093730, -0.455183205989902140, -0.455138685530752540, -0.455094163933756230, -0.455049641199024520, +-0.455005117326667930, -0.454960592316799310, -0.454916066169529230, -0.454871538884968950, -0.454827010463229870, -0.454782480904423190, -0.454737950208660370, -0.454693418376051870, +-0.454648885406710610, -0.454604351300747170, -0.454559816058272840, -0.454515279679398920, -0.454470742164236830, -0.454426203512897920, -0.454381663725493490, -0.454337122802134060, +-0.454292580742932660, -0.454248037547999810, -0.454203493217446850, -0.454158947751385160, -0.454114401149926070, -0.454069853413181010, -0.454025304541260550, -0.453980754534277550, +-0.453936203392342750, -0.453891651115567400, -0.453847097704062900, -0.453802543157940660, -0.453757987477312110, -0.453713430662288530, -0.453668872712980620, -0.453624313629501340, +-0.453579753411961220, -0.453535192060471770, -0.453490629575144300, -0.453446065956090270, -0.453401501203421100, -0.453356935317247360, -0.453312368297682070, -0.453267800144835860, +-0.453223230858820160, -0.453178660439746360, -0.453134088887725940, -0.453089516202870300, -0.453044942385290860, -0.453000367435098250, -0.452955791352405550, -0.452911214137323330, +-0.452866635789963110, -0.452822056310436320, -0.452777475698854350, -0.452732893955328670, -0.452688311079969980, -0.452643727072891360, -0.452599141934203360, -0.452554555664017530, +-0.452509968262445330, -0.452465379729598160, -0.452420790065587550, -0.452376199270525030, -0.452331607344521160, -0.452287014287689080, -0.452242420100139430, -0.452197824781983780, +-0.452153228333333550, -0.452108630754300240, -0.452064032044995350, -0.452019432205530420, -0.451974831236016060, -0.451930229136565440, -0.451885625907289260, -0.451841021548299030, +-0.451796416059706220, -0.451751809441622350, -0.451707201694159010, -0.451662592817427600, -0.451617982811538980, -0.451573371676606160, -0.451528759412739900, -0.451484146020051770, +-0.451439531498653290, -0.451394915848655930, -0.451350299070171320, -0.451305681163310160, -0.451261062128185560, -0.451216441964908340, -0.451171820673590020, -0.451127198254342110, +-0.451082574707276250, -0.451037950032503960, -0.450993324230136770, -0.450948697300285470, -0.450904069243063200, -0.450859440058580810, -0.450814809746949760, -0.450770178308281750, +-0.450725545742688250, -0.450680912050280880, -0.450636277231170500, -0.450591641285470130, -0.450547004213290750, -0.450502366014743800, -0.450457726689940940, -0.450413086238993790, +-0.450368444662013870, -0.450323801959112870, -0.450279158130401590, -0.450234513175993220, -0.450189867095998510, -0.450145219890529190, -0.450100571559696790, -0.450055922103612950, +-0.450011271522389340, -0.449966619816136730, -0.449921966984968390, -0.449877313028995090, -0.449832657948328550, -0.449788001743080370, -0.449743344413362170, -0.449698685959285580, +-0.449654026380962300, -0.449609365678503180, -0.449564703852021410, -0.449520040901627890, -0.449475376827434270, -0.449430711629552230, -0.449386045308093340, -0.449341377863169410, +-0.449296709294892020, -0.449252039603372070, -0.449207368788722810, -0.449162696851055090, -0.449118023790480660, -0.449073349607111150, -0.449028674301058310, -0.448983997872433760, +-0.448939320321349200, -0.448894641647915540, -0.448849961852246130, -0.448805280934451770, -0.448760598894644200, -0.448715915732935120, -0.448671231449436270, -0.448626546044259390, +-0.448581859517515280, -0.448537171869317350, -0.448492483099776460, -0.448447793209004410, -0.448403102197112880, -0.448358410064213560, -0.448313716810418210, -0.448269022435838600, +-0.448224326940585620, -0.448179630324772590, -0.448134932588510500, -0.448090233731911090, -0.448045533755086100, -0.448000832658147270, -0.447956130441206410, -0.447911427104374370, +-0.447866722647764560, -0.447822017071487940, -0.447777310375656320, -0.447732602560381390, -0.447687893625774940, -0.447643183571948770, -0.447598472399014680, -0.447553760107083590, +-0.447509046696268840, -0.447464332166681520, -0.447419616518433370, -0.447374899751636190, -0.447330181866401780, -0.447285462862841880, -0.447240742741067510, -0.447196021501192090, +-0.447151299143326630, -0.447106575667582940, -0.447061851074072760, -0.447017125362908000, -0.446972398534200400, -0.446927670588061820, -0.446882941524603280, -0.446838211343938140, +-0.446793480046177530, -0.446748747631433190, -0.446704014099816970, -0.446659279451440680, -0.446614543686416230, -0.446569806804855470, -0.446525068806869320, -0.446480329692571340, +-0.446435589462072510, -0.446390848115484740, -0.446346105652919820, -0.446301362074489670, -0.446256617380306090, -0.446211871570480920, -0.446167124645125370, -0.446122376604352720, +-0.446077627448274170, -0.446032877177001570, -0.445988125790646730, -0.445943373289321600, -0.445898619673138040, -0.445853864942207130, -0.445809109096642340, -0.445764352136554800, +-0.445719594062056410, -0.445674834873258980, -0.445630074570274480, -0.445585313153214810, -0.445540550622191830, -0.445495786977316680, -0.445451022218702860, -0.445406256346461530, +-0.445361489360704520, -0.445316721261543760, -0.445271952049091260, -0.445227181723458820, -0.445182410284757690, -0.445137637733101280, -0.445092864068600770, -0.445048089291368130, +-0.445003313401515280, -0.444958536399154110, -0.444913758284396610, -0.444868979057354730, -0.444824198718139610, -0.444779417266864760, -0.444734634703641380, -0.444689851028581440, +-0.444645066241796840, -0.444600280343399600, -0.444555493333501640, -0.444510705212214140, -0.444465915979650680, -0.444421125635922450, -0.444376334181141420, -0.444331541615419550, +-0.444286747938868800, -0.444241953151601140, -0.444197157253728660, -0.444152360245362480, -0.444107562126616170, -0.444062762897600990, -0.444017962558428900, -0.443973161109211870, +-0.443928358550061960, -0.443883554881091160, -0.443838750102411470, -0.443793944214134100, -0.443749137216372660, -0.443704329109238400, -0.443659519892843300, -0.443614709567299430, +-0.443569898132718740, -0.443525085589213330, -0.443480271936895210, -0.443435457175875620, -0.443390641306268150, -0.443345824328184090, -0.443301006241735520, -0.443256187047034340, +-0.443211366744192760, -0.443166545333322780, -0.443121722814535600, -0.443076899187944910, -0.443032074453661990, -0.442987248611798890, -0.442942421662467610, -0.442897593605780350, +-0.442852764441849070, -0.442807934170785900, -0.442763102792702030, -0.442718270307711270, -0.442673436715924850, -0.442628602017454800, -0.442583766212413240, -0.442538929300912260, +-0.442494091283063990, -0.442449252158979680, -0.442404411928773060, -0.442359570592555370, -0.442314728150438760, -0.442269884602535360, -0.442225039948957180, -0.442180194189816470, +-0.442135347325225250, -0.442090499355294870, -0.442045650280139040, -0.442000800099869080, -0.441955948814597100, -0.441911096424435270, -0.441866242929495720, -0.441821388329890540, +-0.441776532625731080, -0.441731675817131130, -0.441686817904201940, -0.441641958887055710, -0.441597098765804610, -0.441552237540560780, -0.441507375211436290, -0.441462511778543400, +-0.441417647241993450, -0.441372781601900190, -0.441327914858374910, -0.441283047011529870, -0.441238178061477250, -0.441193308008329180, -0.441148436852197790, -0.441103564593195330, +-0.441058691231433210, -0.441013816767025110, -0.440968941200082450, -0.440924064530717470, -0.440879186759042360, -0.440834307885169200, -0.440789427909210330, -0.440744546831277890, +-0.440699664651483250, -0.440654781369940300, -0.440609896986760340, -0.440565011502055680, -0.440520124915938500, -0.440475237228520940, -0.440430348439915350, -0.440385458550233090, +-0.440340567559587950, -0.440295675468091400, -0.440250782275855680, -0.440205887982992980, -0.440160992589615610, -0.440116096095835680, -0.440071198501765570, -0.440026299807516620, +-0.439981400013202740, -0.439936499118935400, -0.439891597124826780, -0.439846694030989140, -0.439801789837534820, -0.439756884544575950, -0.439711978152224130, -0.439667070660593180, +-0.439622162069794490, -0.439577252379940440, -0.439532341591143240, -0.439487429703515230, -0.439442516717168610, -0.439397602632215670, -0.439352687448767990, -0.439307771166939310, +-0.439262853786841270, -0.439217935308586050, -0.439173015732286010, -0.439128095058053450, -0.439083173286000660, -0.439038250416239120, -0.438993326448882730, -0.438948401384043010, +-0.438903475221832320, -0.438858547962362950, -0.438813619605747220, -0.438768690152097410, -0.438723759601525880, -0.438678827954144200, -0.438633895210066180, -0.438588961369403450, +-0.438544026432268310, -0.438499090398773110, -0.438454153269030200, -0.438409215043151890, -0.438364275721250580, -0.438319335303437750, -0.438274393789827350, -0.438229451180531030, +-0.438184507475661010, -0.438139562675329770, -0.438094616779649610, -0.438049669788732890, -0.438004721702692060, -0.437959772521638540, -0.437914822245686450, -0.437869870874947280, +-0.437824918409533470, -0.437779964849557330, -0.437735010195131280, -0.437690054446367720, -0.437645097603378160, -0.437600139666276760, -0.437555180635174960, -0.437510220510185180, +-0.437465259291419880, -0.437420296978991430, -0.437375333573012230, -0.437330369073594680, -0.437285403480850430, -0.437240436794893490, -0.437195469015835450, -0.437150500143788700, +-0.437105530178865720, -0.437060559121178920, -0.437015586970840750, -0.436970613727962750, -0.436925639392659100, -0.436880663965041270, -0.436835687445221830, -0.436790709833313140, +-0.436745731129427720, -0.436700751333677920, -0.436655770446176260, -0.436610788467034380, -0.436565805396366360, -0.436520821234283760, -0.436475835980899170, -0.436430849636324950, +-0.436385862200673600, -0.436340873674057660, -0.436295884056588650, -0.436250893348380800, -0.436205901549545690, -0.436160908660195800, -0.436115914680443690, -0.436070919610401730, +-0.436025923450182540, -0.435980926199898480, -0.435935927859661340, -0.435890928429585160, -0.435845927909781720, -0.435800926300363380, -0.435755923601442770, -0.435710919813132310, +-0.435665914935544630, -0.435620908968791300, -0.435575901912986510, -0.435530893768241940, -0.435485884534670190, -0.435440874212383700, -0.435395862801495000, -0.435350850302116680, +-0.435305836714361240, -0.435260822038341160, -0.435215806274168280, -0.435170789421956640, -0.435125771481818080, -0.435080752453865020, -0.435035732338210130, -0.434990711134965900, +-0.434945688844244890, -0.434900665466158850, -0.434855641000821970, -0.434810615448345980, -0.434765588808843420, -0.434720561082426900, -0.434675532269209020, -0.434630502369302290, +-0.434585471382819280, -0.434540439309871800, -0.434495406150574030, -0.434450371905037710, -0.434405336573375540, -0.434360300155699990, -0.434315262652123670, -0.434270224062759170, +-0.434225184387718340, -0.434180143627115380, -0.434135101781062020, -0.434090058849670950, -0.434045014833054690, -0.433999969731325930, -0.433954923544597190, -0.433909876272981170, +-0.433864827916589700, -0.433819778475536880, -0.433774727949934660, -0.433729676339895620, -0.433684623645532400, -0.433639569866957620, -0.433594515004283920, -0.433549459057623100, +-0.433504402027089450, -0.433459343912794780, -0.433414284714851770, -0.433369224433373060, -0.433324163068471270, -0.433279100620259090, -0.433234037088849110, -0.433188972474353280, +-0.433143906776885800, -0.433098839996558570, -0.433053772133484280, -0.433008703187775510, -0.432963633159544950, -0.432918562048905330, -0.432873489855968570, -0.432828416580848810, +-0.432783342223658050, -0.432738266784508880, -0.432693190263514100, -0.432648112660786340, -0.432603033976438290, -0.432557954210582630, -0.432512873363332110, -0.432467791434798630, +-0.432422708425096390, -0.432377624334337460, -0.432332539162634420, -0.432287452910100070, -0.432242365576847090, -0.432197277162988170, -0.432152187668635280, -0.432107097093902710, +-0.432062005438902390, -0.432016912703747040, -0.431971818888549410, -0.431926723993422300, -0.431881628018478290, -0.431836530963830290, -0.431791432829590090, -0.431746333615872170, +-0.431701233322788370, -0.431656131950451490, -0.431611029498974340, -0.431565925968469540, -0.431520821359049960, -0.431475715670827540, -0.431430608903916600, -0.431385501058429150, +-0.431340392134478000, -0.431295282132175770, -0.431250171051635430, -0.431205058892969620, -0.431159945656291120, -0.431114831341712020, -0.431069715949346620, -0.431024599479306940, +-0.430979481931705770, -0.430934363306655850, -0.430889243604270060, -0.430844122824661170, -0.430799000967941160, -0.430753878034224440, -0.430708754023623020, -0.430663628936249710, +-0.430618502772217360, -0.430573375531638710, -0.430528247214626620, -0.430483117821293950, -0.430437987351752700, -0.430392855806117250, -0.430347723184499650, -0.430302589487012780, +-0.430257454713769420, -0.430212318864882370, -0.430167181940464600, -0.430122043940628030, -0.430076904865487160, -0.430031764715154030, -0.429986623489741540, -0.429941481189362430, +-0.429896337814129610, -0.429851193364156000, -0.429806047839554340, -0.429760901240437590, -0.429715753566917820, -0.429670604819109400, -0.429625454997124510, -0.429580304101076000, +-0.429535152131076740, -0.429489999087239560, -0.429444844969677390, -0.429399689778502290, -0.429354533513828800, -0.429309376175768980, -0.429264217764435680, -0.429219058279941830, +-0.429173897722400390, -0.429128736091924150, -0.429083573388626130, -0.429038409612618300, -0.428993244764015290, -0.428948078842929180, -0.428902911849472880, -0.428857743783759290, +-0.428812574645901330, -0.428767404436011910, -0.428722233154203210, -0.428677060800589760, -0.428631887375283630, -0.428586712878397720, -0.428541537310045130, -0.428496360670338640, +-0.428451182959391220, -0.428406004177315890, -0.428360824324224730, -0.428315643400232320, -0.428270461405450830, -0.428225278339993130, -0.428180094203972290, -0.428134908997501170, +-0.428089722720692790, -0.428044535373659330, -0.427999346956515310, -0.427954157469372930, -0.427908966912345150, -0.427863775285544920, -0.427818582589085280, -0.427773388823079190, +-0.427728193987639620, -0.427682998082878800, -0.427637801108911250, -0.427592603065849170, -0.427547403953805640, -0.427502203772893610, -0.427457002523225990, -0.427411800204915930, +-0.427366596818075540, -0.427321392362819460, -0.427276186839259940, -0.427230980247509880, -0.427185772587682420, -0.427140563859890520, -0.427095354064247200, -0.427050143200865540, +-0.427004931269858500, -0.426959718271338270, -0.426914504205419600, -0.426869289072214660, -0.426824072871836550, -0.426778855604398210, -0.426733637270012680, -0.426688417868793140, +-0.426643197400851710, -0.426597975866303100, -0.426552753265259540, -0.426507529597834110, -0.426462304864139890, -0.426417079064289830, -0.426371852198397130, -0.426326624266574810, +-0.426281395268935100, -0.426236165205592710, -0.426190934076659870, -0.426145701882249760, -0.426100468622475360, -0.426055234297449790, -0.426009998907286140, -0.425964762452096690, +-0.425919524931996140, -0.425874286347096730, -0.425829046697511650, -0.425783805983353970, -0.425738564204736770, -0.425693321361773120, -0.425648077454576170, -0.425602832483258250, +-0.425557586447934070, -0.425512339348715910, -0.425467091185716910, -0.425421841959050140, -0.425376591668828800, -0.425331340315165950, -0.425286087898173960, -0.425240834417967560, +-0.425195579874659110, -0.425150324268361630, -0.425105067599188420, -0.425059809867252500, -0.425014551072667060, -0.424969291215545280, -0.424924030295999400, -0.424878768314144280, +-0.424833505270092230, -0.424788241163956470, -0.424742975995850040, -0.424697709765886220, -0.424652442474178100, -0.424607174120838040, -0.424561904705980870, -0.424516634229718970, +-0.424471362692165450, -0.424426090093433570, -0.424380816433636400, -0.424335541712887230, -0.424290265931299200, -0.424244989088984730, -0.424199711186058540, -0.424154432222633100, +-0.424109152198821560, -0.424063871114737150, -0.424018588970493050, -0.423973305766202510, -0.423928021501978670, -0.423882736177933980, -0.423837449794183310, -0.423792162350838940, +-0.423746873848014180, -0.423701584285822270, -0.423656293664376400, -0.423611001983789760, -0.423565709244175640, -0.423520415445646450, -0.423475120588316990, -0.423429824672299730, +-0.423384527697707960, -0.423339229664654810, -0.423293930573253600, -0.423248630423617600, -0.423203329215859180, -0.423158026950093250, -0.423112723626432260, -0.423067419244989470, +-0.423022113805878120, -0.422976807309211500, -0.422931499755102860, -0.422886191143665490, -0.422840881475011810, -0.422795570749256720, -0.422750258966512690, -0.422704946126893080, +-0.422659632230511060, -0.422614317277479950, -0.422569001267913080, -0.422523684201922880, -0.422478366079624250, -0.422433046901129760, -0.422387726666552610, -0.422342405376006150, +-0.422297083029603670, -0.422251759627458530, -0.422206435169683920, -0.422161109656392470, -0.422115783087699040, -0.422070455463716130, -0.422025126784557110, -0.421979797050335280, +-0.421934466261163930, -0.421889134417156420, -0.421843801518425320, -0.421798467565085430, -0.421753132557249440, -0.421707796495030600, -0.421662459378542300, -0.421617121207897790, +-0.421571781983210490, -0.421526441704593750, -0.421481100372160130, -0.421435757986024510, -0.421390414546299550, -0.421345070053098510, -0.421299724506534800, -0.421254377906721820, +-0.421209030253772820, -0.421163681547801320, -0.421118331788919780, -0.421072980977243220, -0.421027629112884220, -0.420982276195956130, -0.420936922226572310, -0.420891567204846220, +-0.420846211130891270, -0.420800854004820700, -0.420755495826747260, -0.420710136596785860, -0.420664776315049120, -0.420619414981650400, -0.420574052596703160, -0.420528689160320820, +-0.420483324672616730, -0.420437959133703580, -0.420392592543696260, -0.420347224902707480, -0.420301856210850700, -0.420256486468239210, -0.420211115674986540, -0.420165743831206030, +-0.420120370937011210, -0.420074996992514660, -0.420029621997831390, -0.419984245953074100, -0.419938868858356180, -0.419893490713791060, -0.419848111519492250, -0.419802731275573160, +-0.419757349982146420, -0.419711967639327110, -0.419666584247227910, -0.419621199805962240, -0.419575814315643560, -0.419530427776385330, -0.419485040188301020, -0.419439651551504140, +-0.419394261866107340, -0.419348871132225690, -0.419303479349971810, -0.419258086519459280, -0.419212692640801520, -0.419167297714112040, -0.419121901739504310, -0.419076504717091010, +-0.419031106646987230, -0.418985707529305750, -0.418940307364159940, -0.418894906151663360, -0.418849503891929540, -0.418804100585072000, -0.418758696231204150, -0.418713290830438790, +-0.418667884382890990, -0.418622476888673490, -0.418577068347899760, -0.418531658760683380, -0.418486248127137860, -0.418440836447376730, -0.418395423721513500, -0.418350009949660930, +-0.418304595131934080, -0.418259179268445800, -0.418213762359309570, -0.418168344404638900, -0.418122925404547370, -0.418077505359148560, -0.418032084268555980, -0.417986662132882380, +-0.417941238952242890, -0.417895814726750360, -0.417850389456518260, -0.417804963141660210, -0.417759535782289750, -0.417714107378520440, -0.417668677930465030, -0.417623247438238750, +-0.417577815901954360, -0.417532383321725430, -0.417486949697665530, -0.417441515029888300, -0.417396079318507250, -0.417350642563635970, -0.417305204765387290, -0.417259765923876420, +-0.417214326039216150, -0.417168885111520060, -0.417123443140901770, -0.417078000127474870, -0.417032556071352920, -0.416987110972648790, -0.416941664831477710, -0.416896217647952480, +-0.416850769422186680, -0.416805320154294000, -0.416759869844387950, -0.416714418492582280, -0.416668966098990570, -0.416623512663725600, -0.416578058186902630, -0.416532602668634570, +-0.416487146109034980, -0.416441688508217560, -0.416396229866295870, -0.416350770183383620, -0.416305309459593650, -0.416259847695041210, -0.416214384889839200, -0.416168921044101140, +-0.416123456157940830, -0.416077990231471850, -0.416032523264807940, -0.415987055258062680, -0.415941586211348970, -0.415896116124782110, -0.415850644998474960, -0.415805172832541260, +-0.415759699627094530, -0.415714225382248610, -0.415668750098117100, -0.415623273774813730, -0.415577796412451410, -0.415532318011145320, -0.415486838571008490, -0.415441358092154540, +-0.415395876574697230, -0.415350394018750180, -0.415304910424427190, -0.415259425791841890, -0.415213940121107240, -0.415168453412338550, -0.415122965665648710, -0.415077476881151490, +-0.415031987058960550, -0.414986496199189590, -0.414941004301952470, -0.414895511367362020, -0.414850017395533570, -0.414804522386580110, -0.414759026340615290, -0.414713529257752960, +-0.414668031138106800, -0.414622531981790550, -0.414577031788917970, -0.414531530559602010, -0.414486028293957980, -0.414440524992098940, -0.414395020654138580, -0.414349515280190650, +-0.414304008870368940, -0.414258501424787210, -0.414212992943558400, -0.414167483426797990, -0.414121972874618770, -0.414076461287134660, -0.414030948664459440, -0.413985435006706810, +-0.413939920313990570, -0.413894404586424570, -0.413848887824121710, -0.413803370027197470, -0.413757851195764800, -0.413712331329937510, -0.413666810429829390, -0.413621288495554240, +-0.413575765527225860, -0.413530241524957260, -0.413484716488863870, -0.413439190419058630, -0.413393663315655520, -0.413348135178768170, -0.413302606008510540, -0.413257075804996380, +-0.413211544568339470, -0.413166012298652960, -0.413120478996052200, -0.413074944660650260, -0.413029409292560930, -0.412983872891898140, -0.412938335458775620, -0.412892796993307280, +-0.412847257495606910, -0.412801716965787600, -0.412756175403964810, -0.412710632810251610, -0.412665089184761800, -0.412619544527609290, -0.412573998838907880, -0.412528452118771480, +-0.412482904367314000, -0.412437355584648390, -0.412391805770890240, -0.412346254926152570, -0.412300703050549280, -0.412255150144194170, -0.412209596207201270, -0.412164041239684310, +-0.412118485241756480, -0.412072928213533200, -0.412027370155127640, -0.411981811066653660, -0.411936250948225110, -0.411890689799955970, -0.411845127621960070, -0.411799564414351390, +-0.411754000177242950, -0.411708434910750380, -0.411662868614986690, -0.411617301290065800, -0.411571732936101660, -0.411526163553208260, -0.411480593141499370, -0.411435021701088250, +-0.411389449232090310, -0.411343875734618840, -0.411298301208787630, -0.411252725654710660, -0.411207149072501890, -0.411161571462275220, -0.411115992824144630, -0.411070413158223290, +-0.411024832464626680, -0.410979250743468030, -0.410933667994861250, -0.410888084218920260, -0.410842499415759070, -0.410796913585491640, -0.410751326728231110, -0.410705738844093120, +-0.410660149933190720, -0.410614559995638010, -0.410568969031548820, -0.410523377041037250, -0.410477784024217250, -0.410432189981202790, -0.410386594912107050, -0.410340998817045610, +-0.410295401696131660, -0.410249803549479260, -0.410204204377202290, -0.410158604179414850, -0.410113002956230880, -0.410067400707764430, -0.410021797434128640, -0.409976193135439150, +-0.409930587811809190, -0.409884981463352780, -0.409839374090183890, -0.409793765692416600, -0.409748156270164920, -0.409702545823542760, -0.409656934352663480, -0.409611321857642710, +-0.409565708338593570, -0.409520093795630200, -0.409474478228866570, -0.409428861638416740, -0.409383244024394800, -0.409337625386913870, -0.409292005726089760, -0.409246385042035590, +-0.409200763334865490, -0.409155140604693430, -0.409109516851633550, -0.409063892075799910, -0.409018266277306470, -0.408972639456266610, -0.408927011612795930, -0.408881382747007750, +-0.408835752859016130, -0.408790121948935100, -0.408744490016878740, -0.408698857062961160, -0.408653223087295680, -0.408607588089997920, -0.408561952071181180, -0.408516315030959590, +-0.408470676969447170, -0.408425037886758100, -0.408379397783006410, -0.408333756658306240, -0.408288114512770810, -0.408242471346515980, -0.408196827159654940, -0.408151181952301820, +-0.408105535724570760, -0.408059888476575870, -0.408014240208431240, -0.407968590920250230, -0.407922940612148510, -0.407877289284239500, -0.407831636936637210, -0.407785983569455830, +-0.407740329182809560, -0.407694673776812400, -0.407649017351578550, -0.407603359907221410, -0.407557701443856610, -0.407512041961597570, -0.407466381460558470, -0.407420719940853380, +-0.407375057402596500, -0.407329393845902000, -0.407283729270883190, -0.407238063677655860, -0.407192397066333370, -0.407146729437029840, -0.407101060789859530, -0.407055391124936610, +-0.407009720442375160, -0.406964048742289420, -0.406918376024793580, -0.406872702290000940, -0.406827027538027410, -0.406781351768986280, -0.406735674982991790, -0.406689997180158080, +-0.406644318360599390, -0.406598638524429900, -0.406552957671763030, -0.406507275802714560, -0.406461592917397920, -0.406415909015927280, -0.406370224098416890, -0.406324538164980880, +-0.406278851215733590, -0.406233163250789120, -0.406187474270260970, -0.406141784274264950, -0.406096093262914460, -0.406050401236323690, -0.406004708194606990, -0.405959014137878490, +-0.405913319066252440, -0.405867622979842300, -0.405821925878763870, -0.405776227763130660, -0.405730528633056920, -0.405684828488656830, -0.405639127330044650, -0.405593425157334650, +-0.405547721970641100, -0.405502017770077440, -0.405456312555759530, -0.405410606327800850, -0.405364899086315680, -0.405319190831418210, -0.405273481563222790, -0.405227771281843670, +-0.405182059987394320, -0.405136347679990630, -0.405090634359746020, -0.405044920026774890, -0.404999204681191440, -0.404953488323109960, -0.404907770952644740, -0.404862052569910150, +-0.404816333175019580, -0.404770612768089010, -0.404724891349231900, -0.404679168918562540, -0.404633445476195290, -0.404587721022244440, -0.404541995556824240, -0.404496269080048270, +-0.404450541592032420, -0.404404813092890230, -0.404359083582735980, -0.404313353061684090, -0.404267621529848740, -0.404221888987344400, -0.404176155434285310, -0.404130420870785820, +-0.404084685296959460, -0.404038948712922230, -0.403993211118787610, -0.403947472514669950, -0.403901732900683650, -0.403855992276942970, -0.403810250643562350, -0.403764508000655280, +-0.403718764348337760, -0.403673019686723310, -0.403627274015926300, -0.403581527336061120, -0.403535779647242130, -0.403490030949583690, -0.403444281243200140, -0.403398530528205120, +-0.403352778804714540, -0.403307026072842080, -0.403261272332701980, -0.403215517584408770, -0.403169761828076730, -0.403124005063820290, -0.403078247291753010, -0.403032488511990920, +-0.402986728724647640, -0.402940967929837520, -0.402895206127674990, -0.402849443318274440, -0.402803679501750280, -0.402757914678216920, -0.402712148847787940, -0.402666382010579470, +-0.402620614166704970, -0.402574845316278960, -0.402529075459415850, -0.402483304596230050, -0.402437532726835970, -0.402391759851347290, -0.402345985969879970, -0.402300211082547710, +-0.402254435189464910, -0.402208658290746040, -0.402162880386505490, -0.402117101476857750, -0.402071321561917270, -0.402025540641797690, -0.401979758716615070, -0.401933975786483040, +-0.401888191851516090, -0.401842406911828600, -0.401796620967535160, -0.401750834018750110, -0.401705046065587210, -0.401659257108162530, -0.401613467146589630, -0.401567676180983100, +-0.401521884211457400, -0.401476091238126940, -0.401430297261106290, -0.401384502280509920, -0.401338706296452240, -0.401292909309047040, -0.401247111318410340, -0.401201312324655830, +-0.401155512327898090, -0.401109711328251570, -0.401063909325830750, -0.401018106320750190, -0.400972302313123530, -0.400926497303066900, -0.400880691290694040, -0.400834884276119460, +-0.400789076259457700, -0.400743267240823210, -0.400697457220330570, -0.400651646198094290, -0.400605834174228070, -0.400560021148848090, -0.400514207122068030, -0.400468392094002480, +-0.400422576064765940, -0.400376759034472950, -0.400330941003238070, -0.400285121971175050, -0.400239301938400020, -0.400193480905026710, -0.400147658871169710, -0.400101835836943590, +-0.400056011802462860, -0.400010186767842110, -0.399964360733195860, -0.399918533698637950, -0.399872705664284460, -0.399826876630249240, -0.399781046596646820, -0.399735215563591820, +-0.399689383531198760, -0.399643550499582220, -0.399597716468856000, -0.399551881439136280, -0.399506045410536910, -0.399460208383172420, -0.399414370357157380, -0.399368531332606410, +-0.399322691309634100, -0.399276850288355130, -0.399231008268883140, -0.399185165251334520, -0.399139321235822910, -0.399093476222463050, -0.399047630211369460, -0.399001783202656830, +-0.398955935196439740, -0.398910086192831970, -0.398864236191949830, -0.398818385193907110, -0.398772533198818390, -0.398726680206798360, -0.398680826217961640, -0.398634971232422810, +-0.398589115250296610, -0.398543258271696730, -0.398497400296739580, -0.398451541325538890, -0.398405681358209420, -0.398359820394865670, -0.398313958435622400, -0.398268095480594220, +-0.398222231529895830, -0.398176366583641030, -0.398130500641946110, -0.398084633704924970, -0.398038765772692260, -0.397992896845362600, -0.397947026923050730, -0.397901156005871230, +-0.397855284093938890, -0.397809411187367510, -0.397763537286273450, -0.397717662390770500, -0.397671786500973400, -0.397625909616996840, -0.397580031738955510, -0.397534152866964140, +-0.397488273001136540, -0.397442392141589050, -0.397396510288435590, -0.397350627441790890, -0.397304743601769590, -0.397258858768486430, -0.397212972942056150, -0.397167086122593380, +-0.397121198310212140, -0.397075309505028730, -0.397029419707156990, -0.396983528916711740, -0.396937637133807640, -0.396891744358559450, -0.396845850591081910, -0.396799955831488920, +-0.396754060079896890, -0.396708163336419670, -0.396662265601172070, -0.396616366874268770, -0.396570467155824560, -0.396524566445954240, -0.396478664744772450, -0.396432762052393190, +-0.396386858368932840, -0.396340953694505340, -0.396295048029225490, -0.396249141373207990, -0.396203233726567630, -0.396157325089419200, -0.396111415461876670, -0.396065504844056340, +-0.396019593236072330, -0.395973680638039280, -0.395927767050072040, -0.395881852472285410, -0.395835936904794130, -0.395790020347713050, -0.395744102801156020, -0.395698184265239620, +-0.395652264740077700, -0.395606344225785170, -0.395560422722476770, -0.395514500230267300, -0.395468576749271610, -0.395422652279604440, -0.395376726821379810, -0.395330800374714240, +-0.395284872939721590, -0.395238944516516810, -0.395193015105214650, -0.395147084705929960, -0.395101153318777600, -0.395055220943872300, -0.395009287581328140, -0.394963353231261580, +-0.394917417893786650, -0.394871481569018190, -0.394825544257071000, -0.394779605958059940, -0.394733666672099910, -0.394687726399304880, -0.394641785139791310, -0.394595842893673330, +-0.394549899661065680, -0.394503955442083330, -0.394458010236841130, -0.394412064045453810, -0.394366116868036410, -0.394320168704702880, -0.394274219555569740, -0.394228269420751010, +-0.394182318300361660, -0.394136366194516470, -0.394090413103330430, -0.394044459026918310, -0.393998503965394210, -0.393952547918874680, -0.393906590887473820, -0.393860632871306460, +-0.393814673870487520, -0.393768713885131850, -0.393722752915354470, -0.393676790961270170, -0.393630828022993040, -0.393584864100639700, -0.393538899194324220, -0.393492933304161460, +-0.393446966430266390, -0.393400998572753850, -0.393355029731738860, -0.393309059907335500, -0.393263089099660230, -0.393217117308827300, -0.393171144534951560, -0.393125170778147960, +-0.393079196038531480, -0.393033220316216960, -0.392987243611319370, -0.392941265923952900, -0.392895287254234060, -0.392849307602276990, -0.392803326968196640, -0.392757345352107990, +-0.392711362754125990, -0.392665379174365610, -0.392619394612941710, -0.392573409069968570, -0.392527422545562670, -0.392481435039838290, -0.392435446552910240, -0.392389457084893640, +-0.392343466635903360, -0.392297475206054400, -0.392251482795461790, -0.392205489404239660, -0.392159495032504580, -0.392113499680370790, -0.392067503347953260, -0.392021506035366950, +-0.391975507742726880, -0.391929508470148070, -0.391883508217744590, -0.391837506985633240, -0.391791504773928100, -0.391745501582744180, -0.391699497412196560, -0.391653492262400150, +-0.391607486133470020, -0.391561479025521130, -0.391515470938667790, -0.391469461873026560, -0.391423451828711690, -0.391377440805838190, -0.391331428804521100, -0.391285415824875420, +-0.391239401867016170, -0.391193386931057650, -0.391147371017116440, -0.391101354125306830, -0.391055336255743850, -0.391009317408542500, -0.390963297583817810, -0.390917276781684970, +-0.390871255002258890, -0.390825232245653850, -0.390779208511986550, -0.390733183801371290, -0.390687158113922960, -0.390641131449756820, -0.390595103808987820, -0.390549075191731100, +-0.390503045598100840, -0.390457015028213780, -0.390410983482184170, -0.390364950960127130, -0.390318917462157690, -0.390272882988390970, -0.390226847538942050, -0.390180811113926000, +-0.390134773713457120, -0.390088735337652090, -0.390042695986625220, -0.389996655660491690, -0.389950614359366450, -0.389904572083364650, -0.389858528832601470, -0.389812484607191980, +-0.389766439407250420, -0.389720393232893590, -0.389674346084235790, -0.389628297961392140, -0.389582248864477730, -0.389536198793607680, -0.389490147748897120, -0.389444095730461240, +-0.389398042738414270, -0.389351988772873030, -0.389305933833951790, -0.389259877921765750, -0.389213821036429990, -0.389167763178059680, -0.389121704346769960, -0.389075644542675180, +-0.389029583765892140, -0.388983522016535080, -0.388937459294719230, -0.388891395600559740, -0.388845330934171730, -0.388799265295670440, -0.388753198685170940, -0.388707131102787650, +-0.388661062548637360, -0.388614993022834420, -0.388568922525493960, -0.388522851056731230, -0.388476778616661360, -0.388430705205399570, -0.388384630823060180, -0.388338555469760040, +-0.388292479145613490, -0.388246401850735720, -0.388200323585241980, -0.388154244349247450, -0.388108164142867250, -0.388062082966216690, -0.388016000819410070, -0.387969917702564280, +-0.387923833615793750, -0.387877748559213590, -0.387831662532939050, -0.387785575537085310, -0.387739487571767680, -0.387693398637100560, -0.387647308733200690, -0.387601217860182590, +-0.387555126018161440, -0.387509033207252440, -0.387462939427570870, -0.387416844679231990, -0.387370748962350960, -0.387324652277042270, -0.387278554623422750, -0.387232456001606830, +-0.387186356411709790, -0.387140255853846870, -0.387094154328133270, -0.387048051834684330, -0.387001948373615230, -0.386955843945040460, -0.386909738549076900, -0.386863632185838970, +-0.386817524855441960, -0.386771416558001120, -0.386725307293631800, -0.386679197062449190, -0.386633085864568570, -0.386586973700104420, -0.386540860569173640, -0.386494746471890750, +-0.386448631408370990, -0.386402515378729610, -0.386356398383082000, -0.386310280421543360, -0.386264161494228150, -0.386218041601253450, -0.386171920742733600, -0.386125798918783960, +-0.386079676129519770, -0.386033552375056430, -0.385987427655509250, -0.385941301970993470, -0.385895175321623600, -0.385849047707516600, -0.385802919128787000, -0.385756789585550100, +-0.385710659077921240, -0.385664527606015720, -0.385618395169948890, -0.385572261769835280, -0.385526127405791790, -0.385479992077932990, -0.385433855786374180, -0.385387718531230770, +-0.385341580312618060, -0.385295441130651390, -0.385249300985446130, -0.385203159877116840, -0.385157017805780380, -0.385110874771551430, -0.385064730774545280, -0.385018585814877300, +-0.384972439892662890, -0.384926293008017340, -0.384880145161055230, -0.384833996351893640, -0.384787846580647020, -0.384741695847430730, -0.384695544152360290, -0.384649391495550940, +-0.384603237877118140, -0.384557083297177190, -0.384510927755842780, -0.384464771253231810, -0.384418613789458960, -0.384372455364639540, -0.384326295978889010, -0.384280135632322720, +-0.384233974325056130, -0.384187812057204540, -0.384141648828882630, -0.384095484640207430, -0.384049319491293510, -0.384003153382256320, -0.383956986313211230, -0.383910818284273650, +-0.383864649295559020, -0.383818479347182830, -0.383772308439259580, -0.383726136571906350, -0.383679963745237830, -0.383633789959369360, -0.383587615214416420, -0.383541439510494460, +-0.383495262847718900, -0.383449085226204360, -0.383402906646067910, -0.383356727107424240, -0.383310546610388710, -0.383264365155076840, -0.383218182741604020, -0.383171999370085780, +-0.383125815040637530, -0.383079629753373900, -0.383033443508412060, -0.382987256305866550, -0.382941068145852940, -0.382894879028486680, -0.382848688953883190, -0.382802497922157980, +-0.382756305933425740, -0.382710112987803500, -0.382663919085406030, -0.382617724226348770, -0.382571528410747150, -0.382525331638716710, -0.382479133910372970, -0.382432935225831380, +-0.382386735585206640, -0.382340534988615870, -0.382294333436173750, -0.382248130927995810, -0.382201927464197570, -0.382155723044894480, -0.382109517670202130, -0.382063311340235130, +-0.382017104055110630, -0.381970895814943420, -0.381924686619848960, -0.381878476469942830, -0.381832265365340430, -0.381786053306157390, -0.381739840292509240, -0.381693626324510650, +-0.381647411402278810, -0.381601195525928470, -0.381554978695575140, -0.381508760911334340, -0.381462542173321650, -0.381416322481652580, -0.381370101836441930, -0.381323880237806830, +-0.381277657685862030, -0.381231434180723080, -0.381185209722505520, -0.381138984311324980, -0.381092757947296970, -0.381046530630537010, -0.381000302361160780, -0.380954073139282980, +-0.380907842965020780, -0.380861611838488990, -0.380815379759803170, -0.380769146729078910, -0.380722912746431770, -0.380676677811977340, -0.380630441925830400, -0.380584205088108200, +-0.380537967298925470, -0.380491728558397860, -0.380445488866640870, -0.380399248223770190, -0.380353006629901350, -0.380306764085150020, -0.380260520589631000, -0.380214276143461430, +-0.380168030746756200, -0.380121784399630900, -0.380075537102201160, -0.380029288854582540, -0.379983039656890730, -0.379936789509240480, -0.379890538411749080, -0.379844286364531320, +-0.379798033367702850, -0.379751779421379330, -0.379705524525676300, -0.379659268680709480, -0.379613011886594520, -0.379566754143446210, -0.379520495451381780, -0.379474235810516200, +-0.379427975220964940, -0.379381713682843790, -0.379335451196268380, -0.379289187761354290, -0.379242923378216410, -0.379196658046972060, -0.379150391767736070, -0.379104124540624140, +-0.379057856365751840, -0.379011587243234920, -0.378965317173189040, -0.378919046155729860, -0.378872774190972210, -0.378826501279033500, -0.378780227420028480, -0.378733952614072940, +-0.378687676861282520, -0.378641400161772890, -0.378595122515659740, -0.378548843923057990, -0.378502564384084970, -0.378456283898855490, -0.378410002467485350, -0.378363720090090170, +-0.378317436766785700, -0.378271152497687610, -0.378224867282911660, -0.378178581122573580, -0.378132294016788160, -0.378086005965672880, -0.378039716969342580, -0.377993427027912940, +-0.377947136141499770, -0.377900844310218750, -0.377854551534185680, -0.377808257813515350, -0.377761963148325160, -0.377715667538730150, -0.377669370984845930, -0.377623073486788250, +-0.377576775044672910, -0.377530475658615640, -0.377484175328732190, -0.377437874055137460, -0.377391571837948860, -0.377345268677281350, -0.377298964573250680, -0.377252659525972590, +-0.377206353535562870, -0.377160046602137200, -0.377113738725810670, -0.377067429906700560, -0.377021120144921900, -0.376974809440590420, -0.376928497793821930, -0.376882185204732210, +-0.376835871673437020, -0.376789557200052140, -0.376743241784692540, -0.376696925427475680, -0.376650608128516470, -0.376604289887930770, -0.376557970705834360, -0.376511650582342980, +-0.376465329517572500, -0.376419007511637870, -0.376372684564656560, -0.376326360676743520, -0.376280035848014560, -0.376233710078585580, -0.376187383368572270, -0.376141055718090480, +-0.376094727127256110, -0.376048397596184080, -0.376002067124991850, -0.375955735713794480, -0.375909403362707730, -0.375863070071847550, -0.375816735841329630, -0.375770400671269880, +-0.375724064561783310, -0.375677727512987390, -0.375631389524997190, -0.375585050597928520, -0.375538710731897150, -0.375492369927019070, -0.375446028183410050, -0.375399685501185960, +-0.375353341880462650, -0.375306997321355200, -0.375260651823981000, -0.375214305388455240, -0.375167958014893670, -0.375121609703412240, -0.375075260454126760, -0.375028910267153180, +-0.374982559142606480, -0.374936207080604160, -0.374889854081261350, -0.374843500144693920, -0.374797145271017710, -0.374750789460348680, -0.374704432712802630, -0.374658075028495520, +-0.374611716407542430, -0.374565356850060820, -0.374518996356165810, -0.374472634925973380, -0.374426272559599320, -0.374379909257159580, -0.374333545018770030, -0.374287179844545850, +-0.374240813734604550, -0.374194446689061160, -0.374148078708031680, -0.374101709791632040, -0.374055339939978080, -0.374008969153185770, -0.373962597431371060, -0.373916224774649030, +-0.373869851183137260, -0.373823476656950870, -0.373777101196205770, -0.373730724801017930, -0.373684347471503250, -0.373637969207777750, -0.373591590009956450, -0.373545209878157040, +-0.373498828812494580, -0.373452446813085090, -0.373406063880044440, -0.373359680013488630, -0.373313295213533620, -0.373266909480295390, -0.373220522813889070, -0.373174135214432270, +-0.373127746682040130, -0.373081357216828610, -0.373034966818913680, -0.372988575488411360, -0.372942183225437600, -0.372895790030107530, -0.372849395902538850, -0.372803000842846680, +-0.372756604851146980, -0.372710207927555770, -0.372663810072189020, -0.372617411285162790, -0.372571011566593000, -0.372524610916595720, -0.372478209335286080, -0.372431806822781710, +-0.372385403379197840, -0.372338999004650450, -0.372292593699255600, -0.372246187463129210, -0.372199780296387390, -0.372153372199145290, -0.372106963171520590, -0.372060553213628460, +-0.372014142325584940, -0.371967730507506090, -0.371921317759507930, -0.371874904081706430, -0.371828489474217700, -0.371782073937156900, -0.371735657470641740, -0.371689240074787490, +-0.371642821749710080, -0.371596402495525670, -0.371549982312350200, -0.371503561200299810, -0.371457139159489690, -0.371410716190037520, -0.371364292292058580, -0.371317867465668920, +-0.371271441710984530, -0.371225015028121610, -0.371178587417196120, -0.371132158878324180, -0.371085729411620990, -0.371039299017204340, -0.370992867695189410, -0.370946435445692280, +-0.370900002268829130, -0.370853568164715930, -0.370807133133468860, -0.370760697175203100, -0.370714260290036400, -0.370667822478084050, -0.370621383739462180, -0.370574944074286820, +-0.370528503482674130, -0.370482061964740150, -0.370435619520601060, -0.370389176150372030, -0.370342731854170940, -0.370296286632113000, -0.370249840484314360, -0.370203393410891090, +-0.370156945411959370, -0.370110496487635280, -0.370064046638034110, -0.370017595863273650, -0.369971144163469210, -0.369924691538736860, -0.369878237989192840, -0.369831783514953220, +-0.369785328116134130, -0.369738871792851700, -0.369692414545221280, -0.369645956373360670, -0.369599497277385170, -0.369553037257410900, -0.369506576313554050, -0.369460114445930740, +-0.369413651654657170, -0.369367187939849460, -0.369320723301622970, -0.369274257740095480, -0.369227791255382350, -0.369181323847599720, -0.369134855516863810, -0.369088386263290770, +-0.369041916086996770, -0.368995444988097940, -0.368948972966709700, -0.368902500022949830, -0.368856026156933750, -0.368809551368777580, -0.368763075658597510, -0.368716599026509770, +-0.368670121472630560, -0.368623642997075170, -0.368577163599961510, -0.368530683281404980, -0.368484202041521710, -0.368437719880427950, -0.368391236798239870, -0.368344752795073730, +-0.368298267871045690, -0.368251782026271120, -0.368205295260867980, -0.368158807574951560, -0.368112318968638160, -0.368065829442043910, -0.368019338995285160, -0.367972847628477980, +-0.367926355341737900, -0.367879862135182760, -0.367833368008927960, -0.367786872963089760, -0.367740376997784340, -0.367693880113127980, -0.367647382309236940, -0.367600883586227440, +-0.367554383944214910, -0.367507883383317250, -0.367461381903649850, -0.367414879505329030, -0.367368376188471010, -0.367321871953192050, -0.367275366799608370, -0.367228860727835500, +-0.367182353737991240, -0.367135845830191150, -0.367089337004551430, -0.367042827261188360, -0.366996316600218250, -0.366949805021757340, -0.366903292525921910, -0.366856779112827380, +-0.366810264782591770, -0.366763749535330530, -0.366717233371159860, -0.366670716290196150, -0.366624198292555600, -0.366577679378354620, -0.366531159547709370, -0.366484638800735450, +-0.366438117137550760, -0.366391594558270750, -0.366345071063011730, -0.366298546651890100, -0.366252021325022050, -0.366205495082523980, -0.366158967924512140, -0.366112439851102090, +-0.366065910862411750, -0.366019380958556630, -0.365972850139653030, -0.365926318405817350, -0.365879785757165840, -0.365833252193814910, -0.365786717715880010, -0.365740182323479100, +-0.365693646016727770, -0.365647108795742300, -0.365600570660639110, -0.365554031611534440, -0.365507491648544740, -0.365460950771786250, -0.365414408981374620, -0.365367866277427730, +-0.365321322660061230, -0.365274778129391410, -0.365228232685534620, -0.365181686328607260, -0.365135139058725690, -0.365088590876005430, -0.365042041780564540, -0.364995491772518550, +-0.364948940851983820, -0.364902389019076730, -0.364855836273913710, -0.364809282616611050, -0.364762728047285210, -0.364716172566051710, -0.364669616173028620, -0.364623058868331460, +-0.364576500652076640, -0.364529941524380620, -0.364483381485359750, -0.364436820535130380, -0.364390258673808140, -0.364343695901511110, -0.364297132218354860, -0.364250567624455730, +-0.364204002119930200, -0.364157435704894670, -0.364110868379465550, -0.364064300143759230, -0.364017730997891360, -0.363971160941979950, -0.363924589976140690, -0.363878018100489920, +-0.363831445315144160, -0.363784871620219720, -0.363738297015833160, -0.363691721502100830, -0.363645145079138370, -0.363598567747063840, -0.363551989505992930, -0.363505410356042060, +-0.363458830297327620, -0.363412249329966130, -0.363365667454074000, -0.363319084669767760, -0.363272500977162900, -0.363225916376377690, -0.363179330867527630, -0.363132744450729240, +-0.363086157126099040, -0.363039568893753440, -0.362992979753808900, -0.362946389706381050, -0.362899798751588120, -0.362853206889545640, -0.362806614120370190, -0.362760020444178160, +-0.362713425861086070, -0.362666830371210450, -0.362620233974667750, -0.362573636671573660, -0.362527038462046260, -0.362480439346201280, -0.362433839324155180, -0.362387238396024550, +-0.362340636561925780, -0.362294033821975390, -0.362247430176289130, -0.362200825624985120, -0.362154220168179050, -0.362107613805987380, -0.362061006538526740, -0.362014398365913540, +-0.361967789288264400, -0.361921179305695730, -0.361874568418323270, -0.361827956626265270, -0.361781343929637340, -0.361734730328556080, -0.361688115823137980, -0.361641500413499630, +-0.361594884099757490, -0.361548266882027290, -0.361501648760427290, -0.361455029735073150, -0.361408409806081410, -0.361361788973568690, -0.361315167237651500, -0.361268544598446370, +-0.361221921056069870, -0.361175296610637740, -0.361128671262268220, -0.361082045011076990, -0.361035417857180680, -0.360988789800695820, -0.360942160841738970, -0.360895530980426760, +-0.360848900216875660, -0.360802268551201510, -0.360755635983522560, -0.360709002513954440, -0.360662368142613880, -0.360615732869617340, -0.360569096695081530, -0.360522459619122940, +-0.360475821641858210, -0.360429182763403130, -0.360382542983875900, -0.360335902303392300, -0.360289260722068900, -0.360242618240022410, -0.360195974857369370, -0.360149330574226380, +-0.360102685390709220, -0.360056039306936190, -0.360009392323023090, -0.359962744439086490, -0.359916095655243020, -0.359869445971609300, -0.359822795388301970, -0.359776143905437720, +-0.359729491523132220, -0.359682838241503820, -0.359636184060668330, -0.359589528980742370, -0.359542873001842570, -0.359496216124085610, -0.359449558347588130, -0.359402899672465910, +-0.359356240098837270, -0.359309579626818030, -0.359262918256524840, -0.359216255988074380, -0.359169592821583230, -0.359122928757168110, -0.359076263794945730, -0.359029597935031810, +-0.358982931177544710, -0.358936263522600270, -0.358889594970315250, -0.358842925520806160, -0.358796255174189780, -0.358749583930582820, -0.358702911790101000, -0.358656238752862730, +-0.358609564818983930, -0.358562889988581160, -0.358516214261771160, -0.358469537638670680, -0.358422860119396280, -0.358376181704064820, -0.358329502392791990, -0.358282822185696290, +-0.358236141082893530, -0.358189459084500390, -0.358142776190633620, -0.358096092401409880, -0.358049407716945930, -0.358002722137358510, -0.357956035662763410, -0.357909348293279030, +-0.357862660029021280, -0.357815970870106910, -0.357769280816652600, -0.357722589868775090, -0.357675898026591110, -0.357629205290217410, -0.357582511659769840, -0.357535817135366810, +-0.357489121717124270, -0.357442425405158910, -0.357395728199587480, -0.357349030100526710, -0.357302331108093400, -0.357255631222403390, -0.357208930443575160, -0.357162228771724600, +-0.357115526206968510, -0.357068822749423530, -0.357022118399206560, -0.356975413156434270, -0.356928707021223420, -0.356881999993690020, -0.356835292073952430, -0.356788583262126590, +-0.356741873558329310, -0.356695162962677340, -0.356648451475287450, -0.356601739096276460, -0.356555025825760260, -0.356508311663857380, -0.356461596610683660, -0.356414880666355960, +-0.356368163830991120, -0.356321446104705790, -0.356274727487616900, -0.356228007979841170, -0.356181287581494590, -0.356134566292695630, -0.356087844113560260, -0.356041121044205270, +-0.355994397084747450, -0.355947672235303660, -0.355900946495990690, -0.355854219866924500, -0.355807492348223620, -0.355760763940004000, -0.355714034642382490, -0.355667304455475900, +-0.355620573379401010, -0.355573841414274730, -0.355527108560213800, -0.355480374817334300, -0.355433640185754680, -0.355386904665590970, -0.355340168256959970, -0.355293430959978560, +-0.355246692774763620, -0.355199953701431930, -0.355153213740100340, -0.355106472890884870, -0.355059731153904050, -0.355012988529273930, -0.354966245017111330, -0.354919500617533080, +-0.354872755330656100, -0.354826009156597230, -0.354779262095473390, -0.354732514147400480, -0.354685765312497180, -0.354639015590879460, -0.354592264982664160, -0.354545513487968260, +-0.354498761106908530, -0.354452007839601900, -0.354405253686164430, -0.354358498646714650, -0.354311742721368620, -0.354264985910243250, -0.354218228213455390, -0.354171469631122000, +-0.354124710163359890, -0.354077949810286060, -0.354031188572016490, -0.353984426448669790, -0.353937663440361980, -0.353890899547210090, -0.353844134769330910, -0.353797369106841340, +-0.353750602559858410, -0.353703835128498120, -0.353657066812879120, -0.353610297613117410, -0.353563527529329960, -0.353516756561633730, -0.353469984710145570, -0.353423211974982440, +-0.353376438356261310, -0.353329663854098200, -0.353282888468611830, -0.353236112199918180, -0.353189335048134270, -0.353142557013377050, -0.353095778095763420, -0.353048998295410370, +-0.353002217612433940, -0.352955436046952840, -0.352908653599083130, -0.352861870268941780, -0.352815086056645740, -0.352768300962312040, -0.352721514986057530, -0.352674728127999270, +-0.352627940388253350, -0.352581151766938440, -0.352534362264170560, -0.352487571880066850, -0.352440780614744210, -0.352393988468319600, -0.352347195440910030, -0.352300401532631650, +-0.352253606743603060, -0.352206811073940470, -0.352160014523760830, -0.352113217093181220, -0.352066418782318540, -0.352019619591289750, -0.351972819520211980, -0.351926018569202140, +-0.351879216738376410, -0.351832414027853540, -0.351785610437749530, -0.351738805968181580, -0.351692000619266590, -0.351645194391121570, -0.351598387283863560, -0.351551579297608770, +-0.351504770432475850, -0.351457960688581040, -0.351411150066041340, -0.351364338564973730, -0.351317526185495280, -0.351270712927722990, -0.351223898791773960, -0.351177083777764300, +-0.351130267885812810, -0.351083451116035620, -0.351036633468549850, -0.350989814943472420, -0.350942995540920510, -0.350896175261011130, -0.350849354103860420, -0.350802532069587170, +-0.350755709158307620, -0.350708885370138780, -0.350662060705197730, -0.350615235163601550, -0.350568408745467240, -0.350521581450911950, -0.350474753280051840, -0.350427924233005670, +-0.350381094309889730, -0.350334263510821030, -0.350287431835916710, -0.350240599285293770, -0.350193765859069310, -0.350146931557359650, -0.350100096380283440, -0.350053260327957030, +-0.350006423400497480, -0.349959585598021870, -0.349912746920647280, -0.349865907368490820, -0.349819066941669590, -0.349772225640299860, -0.349725383464500440, -0.349678540414387510, +-0.349631696490078250, -0.349584851691689740, -0.349538006019339100, -0.349491159473143460, -0.349444312053219070, -0.349397463759684780, -0.349350614592656760, -0.349303764552252260, +-0.349256913638588300, -0.349210061851782110, -0.349163209191950710, -0.349116355659211340, -0.349069501253681020, -0.349022645975476160, -0.348975789824715550, -0.348928932801515380, +-0.348882074905992930, -0.348835216138265290, -0.348788356498449640, -0.348741495986663040, -0.348694634603021910, -0.348647772347644990, -0.348600909220648680, -0.348554045222150060, +-0.348507180352266350, -0.348460314611114650, -0.348413447998812190, -0.348366580515476140, -0.348319712161222760, -0.348272842936171000, -0.348225972840437050, -0.348179101874138200, +-0.348132230037391630, -0.348085357330314430, -0.348038483753023880, -0.347991609305636270, -0.347944733988270470, -0.347897857801042820, -0.347850980744070560, -0.347804102817470820, +-0.347757224021360830, -0.347710344355857790, -0.347663463821078880, -0.347616582417140500, -0.347569700144161440, -0.347522817002258180, -0.347475932991547890, -0.347429048112147700, +-0.347382162364174960, -0.347335275747746750, -0.347288388262979590, -0.347241499909992260, -0.347194610688901170, -0.347147720599823570, -0.347100829642876640, -0.347053937818177670, +-0.347007045125843790, -0.346960151565992360, -0.346913257138739720, -0.346866361844204770, -0.346819465682503880, -0.346772568653754390, -0.346725670758073420, -0.346678771995578280, +-0.346631872366386210, -0.346584971870613660, -0.346538070508379480, -0.346491168279800140, -0.346444265184992830, -0.346397361224074940, -0.346350456397163610, -0.346303550704376130, +-0.346256644145829800, -0.346209736721641790, -0.346162828431928690, -0.346115919276809290, -0.346069009256400110, -0.346022098370818430, -0.345975186620181510, -0.345928274004606570, +-0.345881360524210980, -0.345834446179111190, -0.345787530969426050, -0.345740614895272140, -0.345693697956766690, -0.345646780154026940, -0.345599861487170260, -0.345552941956313970, +-0.345506021561575280, -0.345459100303070750, -0.345412178180919240, -0.345365255195237310, -0.345318331346142260, -0.345271406633751390, -0.345224481058181990, -0.345177554619551350, +-0.345130627317976000, -0.345083699153574950, -0.345036770126464660, -0.344989840236762440, -0.344942909484585560, -0.344895977870051500, -0.344849045393277430, -0.344802112054380770, +-0.344755177853477980, -0.344708242790688070, -0.344661306866127560, -0.344614370079913800, -0.344567432432164140, -0.344520493922995830, -0.344473554552526320, -0.344426614320872130, +-0.344379673228152160, -0.344332731274483050, -0.344285788459982140, -0.344238844784766740, -0.344191900248954190, -0.344144954852661940, -0.344098008596007250, -0.344051061479106750, +-0.344004113502079430, -0.343957164665041780, -0.343910214968111250, -0.343863264411405190, -0.343816312995041010, -0.343769360719136000, -0.343722407583806730, -0.343675453589172290, +-0.343628498735349230, -0.343581543022454920, -0.343534586450606750, -0.343487629019922140, -0.343440670730518430, -0.343393711582513030, -0.343346751576022510, -0.343299790711166010, +-0.343252828988059980, -0.343205866406821880, -0.343158902967569120, -0.343111938670419110, -0.343064973515489260, -0.343018007502896960, -0.342971040632758790, -0.342924072905193890, +-0.342877104320318820, -0.342830134878250980, -0.342783164579107790, -0.342736193423006650, -0.342689221410065080, -0.342642248540400430, -0.342595274814129320, -0.342548300231370890, +-0.342501324792241710, -0.342454348496859180, -0.342407371345340830, -0.342360393337803990, -0.342313414474366200, -0.342266434755144010, -0.342219454180256620, -0.342172472749820540, +-0.342125490463953350, -0.342078507322772400, -0.342031523326395140, -0.341984538474939090, -0.341937552768521720, -0.341890566207259660, -0.341843578791271970, -0.341796590520675350, +-0.341749601395587240, -0.341702611416125120, -0.341655620582406510, -0.341608628894548790, -0.341561636352668730, -0.341514642956885380, -0.341467648707315440, -0.341420653604076360, +-0.341373657647285670, -0.341326660837060760, -0.341279663173519270, -0.341232664656778590, -0.341185665286955490, -0.341138665064168960, -0.341091663988535800, -0.341044662060173530, +-0.340997659279199560, -0.340950655645731460, -0.340903651159886690, -0.340856645821781990, -0.340809639631536490, -0.340762632589266870, -0.340715624695090700, -0.340668615949125450, +-0.340621606351488690, -0.340574595902297880, -0.340527584601670650, -0.340480572449723570, -0.340433559446575880, -0.340386545592344330, -0.340339530887146360, -0.340292515331099610, +-0.340245498924321540, -0.340198481666929790, -0.340151463559041740, -0.340104444600774270, -0.340057424792246490, -0.340010404133575140, -0.339963382624877800, -0.339916360266272030, +-0.339869337057875310, -0.339822312999805250, -0.339775288092179440, -0.339728262335114550, -0.339681235728729880, -0.339634208273142060, -0.339587179968468770, -0.339540150814827520, +-0.339493120812335900, -0.339446089961111420, -0.339399058261270930, -0.339352025712933660, -0.339304992316216250, -0.339257958071236430, -0.339210922978111670, -0.339163887036959600, +-0.339116850247897840, -0.339069812611043910, -0.339022774126514660, -0.338975734794429330, -0.338928694614904600, -0.338881653588058160, -0.338834611714007580, -0.338787568992870490, +-0.338740525424764460, -0.338693481009806290, -0.338646435748115260, -0.338599389639808120, -0.338552342685002510, -0.338505294883816090, -0.338458246236366390, -0.338411196742771040, +-0.338364146403147770, -0.338317095217613270, -0.338270043186286840, -0.338222990309285320, -0.338175936586726340, -0.338128882018727480, -0.338081826605406480, -0.338034770346880840, +-0.337987713243267480, -0.337940655294685700, -0.337893596501252220, -0.337846536863084800, -0.337799476380301000, -0.337752415053018560, -0.337705352881355060, -0.337658289865428120, +-0.337611226005354700, -0.337564161301254000, -0.337517095753242900, -0.337470029361439110, -0.337422962125960180, -0.337375894046923920, -0.337328825124447840, -0.337281755358649740, +-0.337234684749646460, -0.337187613297557250, -0.337140541002499020, -0.337093467864589440, -0.337046393883946190, -0.336999319060686920, -0.336952243394929410, -0.336905166886791230, +-0.336858089536389350, -0.336811011343843060, -0.336763932309269260, -0.336716852432785600, -0.336669771714509850, -0.336622690154559650, -0.336575607753052670, -0.336528524510105900, +-0.336481440425838660, -0.336434355500367770, -0.336387269733811060, -0.336340183126286110, -0.336293095677910710, -0.336246007388802610, -0.336198918259079490, -0.336151828288858200, +-0.336104737478258200, -0.336057645827396330, -0.336010553336390410, -0.335963460005358040, -0.335916365834417030, -0.335869270823685120, -0.335822174973279210, -0.335775078283318710, +-0.335727980753920460, -0.335680882385202270, -0.335633783177281930, -0.335586683130277060, -0.335539582244305520, -0.335492480519485050, -0.335445377955932490, -0.335398274553767360, +-0.335351170313106520, -0.335304065234067750, -0.335256959316768850, -0.335209852561327510, -0.335162744967861580, -0.335115636536487960, -0.335068527267326060, -0.335021417160492830, +-0.334974306216106080, -0.334927194434283540, -0.334880081815143000, -0.334832968358802330, -0.334785854065379140, -0.334738738934990570, -0.334691622967755950, -0.334644506163792270, +-0.334597388523217300, -0.334550270046148900, -0.334503150732704810, -0.334456030583002830, -0.334408909597160800, -0.334361787775295630, -0.334314665117526890, -0.334267541623971430, +-0.334220417294747110, -0.334173292129971770, -0.334126166129763200, -0.334079039294239210, -0.334031911623517640, -0.333984783117715400, -0.333937653776952110, -0.333890523601344640, +-0.333843392591010870, -0.333796260746068610, -0.333749128066635700, -0.333701994552830010, -0.333654860204768420, -0.333607725022570580, -0.333560589006353440, -0.333513452156234790, +-0.333466314472332490, -0.333419175954764450, -0.333372036603648450, -0.333324896419102350, -0.333277755401243210, -0.333230613550190460, -0.333183470866061200, -0.333136327348973300, +-0.333089182999044550, -0.333042037816392860, -0.332994891801136060, -0.332947744953391190, -0.332900597273277810, -0.332853448760912880, -0.332806299416414380, -0.332759149239900130, +-0.332711998231488000, -0.332664846391295900, -0.332617693719441660, -0.332570540216042380, -0.332523385881217550, -0.332476230715084250, -0.332429074717760400, -0.332381917889363830, +-0.332334760230012460, -0.332287601739824250, -0.332240442418916150, -0.332193282267407800, -0.332146121285416260, -0.332098959473059400, -0.332051796830455100, -0.332004633357721350, +-0.331957469054976030, -0.331910303922337000, -0.331863137959921390, -0.331815971167848780, -0.331768803546236220, -0.331721635095201690, -0.331674465814863040, -0.331627295705338280, +-0.331580124766745200, -0.331532952999201880, -0.331485780402825280, -0.331438606977735080, -0.331391432724048420, -0.331344257641883130, -0.331297081731357190, -0.331249904992588550, +-0.331202727425695180, -0.331155549030794920, -0.331108369808005010, -0.331061189757445030, -0.331014008879232050, -0.330966827173484020, -0.330919644640318920, -0.330872461279854760, +-0.330825277092209440, -0.330778092077500030, -0.330730906235846280, -0.330683719567365250, -0.330636532072174920, -0.330589343750393280, -0.330542154602138260, -0.330494964627527870, +-0.330447773826680060, -0.330400582199711970, -0.330353389746743280, -0.330306196467891060, -0.330259002363273440, -0.330211807433008260, -0.330164611677213560, -0.330117415096007340, +-0.330070217689506730, -0.330023019457831410, -0.329975820401098570, -0.329928620519426170, -0.329881419812932230, -0.329834218281734700, -0.329787015925951670, -0.329739812745701080, +-0.329692608741100120, -0.329645403912268490, -0.329598198259323350, -0.329550991782382670, -0.329503784481564590, -0.329456576356987000, -0.329409367408767970, -0.329362157637024640, +-0.329314947041876800, -0.329267735623441640, -0.329220523381837050, -0.329173310317181220, -0.329126096429592120, -0.329078881719187700, -0.329031666186086150, -0.328984449830404590, +-0.328937232652262710, -0.328890014651777750, -0.328842795829067780, -0.328795576184250820, -0.328748355717444870, -0.328701134428768080, -0.328653912318338460, -0.328606689386273190, +-0.328559465632692060, -0.328512241057712260, -0.328465015661451860, -0.328417789444028880, -0.328370562405561510, -0.328323334546167630, -0.328276105865965510, -0.328228876365072250, +-0.328181646043607610, -0.328134414901688880, -0.328087182939434120, -0.328039950156961410, -0.327992716554388770, -0.327945482131834390, -0.327898246889415430, -0.327851010827251770, +-0.327803773945460510, -0.327756536244159850, -0.327709297723467800, -0.327662058383502540, -0.327614818224382150, -0.327567577246224710, -0.327520335449147440, -0.327473092833270200, +-0.327425849398710280, -0.327378605145585640, -0.327331360074014590, -0.327284114184115070, -0.327236867476005280, -0.327189619949802500, -0.327142371605626480, -0.327095122443594570, +-0.327047872463824830, -0.327000621666435400, -0.326953370051544400, -0.326906117619270020, -0.326858864369730330, -0.326811610303042620, -0.326764355419326750, -0.326717099718700000, +-0.326669843201280450, -0.326622585867186340, -0.326575327716535750, -0.326528068749446840, -0.326480808966036930, -0.326433548366425800, -0.326386286950730850, -0.326339024719070170, +-0.326291761671561880, -0.326244497808324260, -0.326197233129475350, -0.326149967635133380, -0.326102701325415630, -0.326055434200441970, -0.326008166260329750, -0.325960897505197080, +-0.325913627935162150, -0.325866357550343210, -0.325819086350858320, -0.325771814336824890, -0.325724541508362770, -0.325677267865589310, -0.325629993408622700, -0.325582718137581050, +-0.325535442052582670, -0.325488165153745620, -0.325440887441188210, -0.325393608915028550, -0.325346329575384060, -0.325299049422374530, -0.325251768456117420, -0.325204486676730850, +-0.325157204084333130, -0.325109920679042370, -0.325062636460976770, -0.325015351430253780, -0.324968065586993260, -0.324920778931312550, -0.324873491463329890, -0.324826203183163520, +-0.324778914090931630, -0.324731624186752440, -0.324684333470744210, -0.324637041943024280, -0.324589749603712620, -0.324542456452926560, -0.324495162490784420, -0.324447867717404300, +-0.324400572132904570, -0.324353275737403360, -0.324305978531018170, -0.324258680513868800, -0.324211381686072770, -0.324164082047748330, -0.324116781599013640, -0.324069480339987000, +-0.324022178270786660, -0.323974875391530860, -0.323927571702337050, -0.323880267203325130, -0.323832961894612580, -0.323785655776317570, -0.323738348848558450, -0.323691041111453470, +-0.323643732565120910, -0.323596423209678130, -0.323549113045245140, -0.323501802071939400, -0.323454490289879100, -0.323407177699182650, -0.323359864299968210, -0.323312550092354100, +-0.323265235076458660, -0.323217919252399230, -0.323170602620295900, -0.323123285180266010, -0.323075966932427960, -0.323028647876899940, -0.322981328013800310, -0.322934007343247400, +-0.322886685865358620, -0.322839363580253950, -0.322792040488050880, -0.322744716588867660, -0.322697391882822700, -0.322650066370034290, -0.322602740050620670, -0.322555412924700190, +-0.322508084992391200, -0.322460756253811150, -0.322413426709080080, -0.322366096358315420, -0.322318765201635490, -0.322271433239158690, -0.322224100471003310, -0.322176766897287640, +-0.322129432518129200, -0.322082097333648070, -0.322034761343961700, -0.321987424549188380, -0.321940086949446540, -0.321892748544854450, -0.321845409335530520, -0.321798069321593050, +-0.321750728503159560, -0.321703386880350110, -0.321656044453282160, -0.321608701222074130, -0.321561357186844310, -0.321514012347711150, -0.321466666704792960, -0.321419320258207190, +-0.321371973008074020, -0.321324624954510920, -0.321277276097636230, -0.321229926437568370, -0.321182575974425680, -0.321135224708326560, -0.321087872639389370, -0.321040519767731680, +-0.320993166093473500, -0.320945811616732410, -0.320898456337626810, -0.320851100256275060, -0.320803743372795550, -0.320756385687306690, -0.320709027199926000, -0.320661667910773610, +-0.320614307819967080, -0.320566946927624720, -0.320519585233865030, -0.320472222738806380, -0.320424859442567160, -0.320377495345265770, -0.320330130447019860, -0.320282764747949420, +-0.320235398248172100, -0.320188030947806230, -0.320140662846970350, -0.320093293945782730, -0.320045924244361960, -0.319998553742825490, -0.319951182441293500, -0.319903810339883520, +-0.319856437438714060, -0.319809063737903470, -0.319761689237570260, -0.319714313937832780, -0.319666937838809560, -0.319619560940618940, -0.319572183243378600, -0.319524804747208680, +-0.319477425452226740, -0.319430045358551180, -0.319382664466300540, -0.319335282775593250, -0.319287900286547740, -0.319240516999281690, -0.319193132913915100, -0.319145748030565720, +-0.319098362349352020, -0.319050975870392330, -0.319003588593805230, -0.318956200519709190, -0.318908811648222600, -0.318861421979463160, -0.318814031513551030, -0.318766640250603810, +-0.318719248190739990, -0.318671855334078050, -0.318624461680736440, -0.318577067230833680, -0.318529671984487450, -0.318482275941817830, -0.318434879102942550, -0.318387481467980070, +-0.318340083037048920, -0.318292683810267540, -0.318245283787754460, -0.318197882969628140, -0.318150481356006260, -0.318103078947009070, -0.318055675742754170, -0.318008271743360050, +-0.317960866948945260, -0.317913461359628340, -0.317866054975527720, -0.317818647796761110, -0.317771239823448790, -0.317723831055708340, -0.317676421493658270, -0.317629011137417210, +-0.317581599987103560, -0.317534188042835950, -0.317486775304732850, -0.317439361772911990, -0.317391947447493550, -0.317344532328595270, -0.317297116416335620, -0.317249699710833220, +-0.317202282212206590, -0.317154863920574180, -0.317107444836053800, -0.317060024958765670, -0.317012604288827440, -0.316965182826357720, -0.316917760571475080, -0.316870337524298000, +-0.316822913684945080, -0.316775489053534860, -0.316728063630185960, -0.316680637415016010, -0.316633210408145350, -0.316585782609691610, -0.316538354019773480, -0.316490924638509420, +-0.316443494466018050, -0.316396063502418000, -0.316348631747826900, -0.316301199202365050, -0.316253765866150230, -0.316206331739300960, -0.316158896821935930, -0.316111461114173600, +-0.316064024616132640, -0.316016587327931590, -0.315969149249688270, -0.315921710381522890, -0.315874270723553230, -0.315826830275897920, -0.315779389038675530, -0.315731947012004630, +-0.315684504196003910, -0.315637060590791050, -0.315589616196486460, -0.315542171013207750, -0.315494725041073620, -0.315447278280202690, -0.315399830730713590, -0.315352382392724890, +-0.315304933266355230, -0.315257483351722380, -0.315210032648946700, -0.315162581158145880, -0.315115128879438660, -0.315067675812943590, -0.315020221958779380, -0.314972767317064580, +-0.314925311887917000, -0.314877855671457040, -0.314830398667802380, -0.314782940877071760, -0.314735482299383750, -0.314688022934857090, -0.314640562783610360, -0.314593101845762170, +-0.314545640121430440, -0.314498177610735450, -0.314450714313794950, -0.314403250230727740, -0.314355785361652370, -0.314308319706687540, -0.314260853265951930, -0.314213386039563340, +-0.314165918027642100, -0.314118449230306070, -0.314070979647673940, -0.314023509279864330, -0.313976038126995980, -0.313928566189187520, -0.313881093466557680, -0.313833619959224210, +-0.313786145667307560, -0.313738670590925530, -0.313691194730196850, -0.313643718085240160, -0.313596240656174200, -0.313548762443117580, -0.313501283446189110, -0.313453803665506570, +-0.313406323101190380, -0.313358841753358370, -0.313311359622129250, -0.313263876707621740, -0.313216393009954520, -0.313168908529246340, -0.313121423265615870, -0.313073937219181030, +-0.313026450390062160, -0.312978962778377170, -0.312931474384244790, -0.312883985207783710, -0.312836495249112670, -0.312789004508350400, -0.312741512985614760, -0.312694020681026200, +-0.312646527594702570, -0.312599033726762620, -0.312551539077325080, -0.312504043646508690, -0.312456547434432240, -0.312409050441214360, -0.312361552666973070, -0.312314054111828670, +-0.312266554775899210, -0.312219054659303330, -0.312171553762159770, -0.312124052084587380, -0.312076549626704840, -0.312029046388630100, -0.311981542370483590, -0.311934037572383190, +-0.311886531994447770, -0.311839025636795940, -0.311791518499546560, -0.311744010582818420, -0.311696501886730200, -0.311648992411399930, -0.311601482156948000, -0.311553971123492370, +-0.311506459311151840, -0.311458946720045150, -0.311411433350291090, -0.311363919202008400, -0.311316404275315100, -0.311268888570331640, -0.311221372087175980, -0.311173854825966880, +-0.311126336786823110, -0.311078817969863530, -0.311031298375206880, -0.310983778002972000, -0.310936256853276800, -0.310888734926241860, -0.310841212221985020, -0.310793688740625180, +-0.310746164482281150, -0.310698639447071660, -0.310651113635115610, -0.310603587046531740, -0.310556059681438120, -0.310508531539955110, -0.310461002622200830, -0.310413472928294020, +-0.310365942458353530, -0.310318411212498200, -0.310270879190846840, -0.310223346393518280, -0.310175812820630500, -0.310128278472304010, -0.310080743348656870, -0.310033207449807830, +-0.309985670775875800, -0.309938133326979610, -0.309890595103238020, -0.309843056104769140, -0.309795516331693500, -0.309747975784129050, -0.309700434462194640, -0.309652892366009120, +-0.309605349495691410, -0.309557805851360280, -0.309510261433134700, -0.309462716241132580, -0.309415170275474550, -0.309367623536278560, -0.309320076023663510, -0.309272527737748270, +-0.309224978678651730, -0.309177428846492740, -0.309129878241389320, -0.309082326863462100, -0.309034774712828970, -0.308987221789608970, -0.308939668093920930, -0.308892113625883650, +-0.308844558385616140, -0.308797002373237210, -0.308749445588864970, -0.308701888032619940, -0.308654329704620150, -0.308606770604984590, -0.308559210733832080, -0.308511650091281560, +-0.308464088677451900, -0.308416526492461150, -0.308368963536429950, -0.308321399809476370, -0.308273835311719260, -0.308226270043277570, -0.308178704004270170, -0.308131137194816050, +-0.308083569615034080, -0.308036001265042330, -0.307988432144961410, -0.307940862254909460, -0.307893291595005340, -0.307845720165367990, -0.307798147966116320, -0.307750574997369240, +-0.307703001259245770, -0.307655426751863970, -0.307607851475344420, -0.307560275429805240, -0.307512698615365400, -0.307465121032143800, -0.307417542680259390, -0.307369963559831150, +-0.307322383670977970, -0.307274803013817990, -0.307227221588471880, -0.307179639395057660, -0.307132056433694340, -0.307084472704500950, -0.307036888207596340, -0.306989302943099510, +-0.306941716911128540, -0.306894130111804160, -0.306846542545244460, -0.306798954211568390, -0.306751365110894960, -0.306703775243343080, -0.306656184609031820, -0.306608593208080040, +-0.306561001040605960, -0.306513408106730220, -0.306465814406570950, -0.306418219940247150, -0.306370624707877790, -0.306323028709581890, -0.306275431945478400, -0.306227834415685460, +-0.306180236120323800, -0.306132637059511600, -0.306085037233367770, -0.306037436642011330, -0.305989835285561280, -0.305942233164136710, -0.305894630277856520, -0.305847026626838880, +-0.305799422211204600, -0.305751817031071680, -0.305704211086559260, -0.305656604377786300, -0.305608996904871810, -0.305561388667934860, -0.305513779667093590, -0.305466169902468720, +-0.305418559374178440, -0.305370948082341720, -0.305323336027077620, -0.305275723208505210, -0.305228109626743520, -0.305180495281911550, -0.305132880174127430, -0.305085264303512020, +-0.305037647670183430, -0.304990030274260690, -0.304942412115862930, -0.304894793195109090, -0.304847173512118320, -0.304799553067009570, -0.304751931859901130, -0.304704309890913680, +-0.304656687160165420, -0.304609063667775510, -0.304561439413862930, -0.304513814398546690, -0.304466188621945970, -0.304418562084179780, -0.304370934785366310, -0.304323306725626410, +-0.304275677905078150, -0.304228048323840760, -0.304180417982033210, -0.304132786879774690, -0.304085155017184140, -0.304037522394379870, -0.303989889011482610, -0.303942254868610650, +-0.303894619965883070, -0.303846984303418940, -0.303799347881337330, -0.303751710699757370, -0.303704072758798130, -0.303656434058577840, -0.303608794599217360, -0.303561154380834810, +-0.303513513403549430, -0.303465871667480290, -0.303418229172746410, -0.303370585919467030, -0.303322941907760270, -0.303275297137747040, -0.303227651609545570, -0.303180005323274940, +-0.303132358279054330, -0.303084710477002810, -0.303037061917239500, -0.302989412599883550, -0.302941762525053230, -0.302894111692869340, -0.302846460103450180, -0.302798807756914870, +-0.302751154653382480, -0.302703500792972260, -0.302655846175803320, -0.302608190801993860, -0.302560534671664830, -0.302512877784934410, -0.302465220141921790, -0.302417561742746140, +-0.302369902587526610, -0.302322242676382300, -0.302274582009432360, -0.302226920586795180, -0.302179258408591500, -0.302131595474939670, -0.302083931785958880, -0.302036267341768250, +-0.301988602142486910, -0.301940936188234090, -0.301893269479128980, -0.301845602015289820, -0.301797933796837450, -0.301750264823890280, -0.301702595096567490, -0.301654924614988160, +-0.301607253379271520, -0.301559581389536810, -0.301511908645903100, -0.301464235148488750, -0.301416560897414700, -0.301368885892799200, -0.301321210134761540, -0.301273533623420800, +-0.301225856358896260, -0.301178178341307110, -0.301130499570771590, -0.301082820047410720, -0.301035139771342830, -0.300987458742687010, -0.300939776961562600, -0.300892094428088730, +-0.300844411142384640, -0.300796727104569510, -0.300749042314761680, -0.300701356773082130, -0.300653670479649190, -0.300605983434582060, -0.300558295638000020, -0.300510607090022200, +-0.300462917790767840, -0.300415227740355340, -0.300367536938905670, -0.300319845386537110, -0.300272153083368960, -0.300224460029520410, -0.300176766225110750, -0.300129071670259150, +-0.300081376365084860, -0.300033680309706290, -0.299985983504244320, -0.299938285948817440, -0.299890587643544870, -0.299842888588545800, -0.299795188783939510, -0.299747488229845260, +-0.299699786926381440, -0.299652084873668960, -0.299604382071826330, -0.299556678520972730, -0.299508974221227410, -0.299461269172709650, -0.299413563375538700, -0.299365856829833910, +-0.299318149535713560, -0.299270441493298730, -0.299222732702707770, -0.299175023164060030, -0.299127312877474680, -0.299079601843071090, -0.299031890060968420, -0.298984177531286090, +-0.298936464254142440, -0.298888750229658500, -0.298841035457952650, -0.298793319939144260, -0.298745603673352570, -0.298697886660696800, -0.298650168901296360, -0.298602450395270500, +-0.298554731142737670, -0.298507011143818890, -0.298459290398632500, -0.298411568907297970, -0.298363846669934480, -0.298316123686661380, -0.298268399957597960, -0.298220675482862680, +-0.298172950262576560, -0.298125224296858060, -0.298077497585826520, -0.298029770129601250, -0.297982041928301580, -0.297934312982046760, -0.297886583290956130, -0.297838852855148220, +-0.297791121674744030, -0.297743389749862030, -0.297695657080621570, -0.297647923667141990, -0.297600189509542590, -0.297552454607942660, -0.297504718962460780, -0.297456982573217950, +-0.297409245440332700, -0.297361507563924320, -0.297313768944112160, -0.297266029581015560, -0.297218289474753870, -0.297170548625446510, -0.297122807033211920, -0.297075064698171130, +-0.297027321620442710, -0.296979577800145940, -0.296931833237400300, -0.296884087932325010, -0.296836341885039550, -0.296788595095662360, -0.296740847564314510, -0.296693099291114590, +-0.296645350276181890, -0.296597600519635800, -0.296549850021595730, -0.296502098782181030, -0.296454346801511110, -0.296406594079704430, -0.296358840616882170, -0.296311086413162780, +-0.296263331468665680, -0.296215575783510210, -0.296167819357815830, -0.296120062191701890, -0.296072304285286970, -0.296024545638692130, -0.295976786252035940, -0.295929026125437760, +-0.295881265259017030, -0.295833503652893130, -0.295785741307185490, -0.295737978222013480, -0.295690214397496490, -0.295642449833753150, -0.295594684530904540, -0.295546918489069220, +-0.295499151708366600, -0.295451384188916090, -0.295403615930837140, -0.295355846934249100, -0.295308077199270660, -0.295260306726022830, -0.295212535514624230, -0.295164763565194330, +-0.295116990877852480, -0.295069217452718190, -0.295021443289910870, -0.294973668389549860, -0.294925892751753900, -0.294878116376644070, -0.294830339264338880, -0.294782561414957900, +-0.294734782828620480, -0.294687003505446130, -0.294639223445554270, -0.294591442649063510, -0.294543661116094980, -0.294495878846767310, -0.294448095841199910, -0.294400312099512280, +-0.294352527621823900, -0.294304742408254160, -0.294256956458922580, -0.294209169773947790, -0.294161382353450910, -0.294113594197550510, -0.294065805306366220, -0.294018015680017340, +-0.293970225318623490, -0.293922434222304020, -0.293874642391177670, -0.293826849825365500, -0.293779056524986260, -0.293731262490159350, -0.293683467721004290, -0.293635672217640530, +-0.293587875980187650, -0.293540079008765050, -0.293492281303491360, -0.293444482864487880, -0.293396683691873160, -0.293348883785766790, -0.293301083146288170, -0.293253281773556810, +-0.293205479667692280, -0.293157676828813160, -0.293109873257040740, -0.293062068952493650, -0.293014263915291340, -0.292966458145553440, -0.292918651643399310, -0.292870844408948620, +-0.292823036442320770, -0.292775227743635350, -0.292727418313011020, -0.292679608150568980, -0.292631797256427960, -0.292583985630707370, -0.292536173273526880, -0.292488360185005960, +-0.292440546365264060, -0.292392731814420050, -0.292344916532594980, -0.292297100519907650, -0.292249283776477580, -0.292201466302424270, -0.292153648097867310, -0.292105829162926270, +-0.292058009497720590, -0.292010189102369090, -0.291962367976992930, -0.291914546121710860, -0.291866723536642450, -0.291818900221907210, -0.291771076177624710, -0.291723251403914530, +-0.291675425900895350, -0.291627599668688510, -0.291579772707412640, -0.291531945017187320, -0.291484116598132170, -0.291436287450366700, -0.291388457574010500, -0.291340626969183230, +-0.291292795636003470, -0.291244963574592560, -0.291197130785069310, -0.291149297267553180, -0.291101463022163830, -0.291053628049020850, -0.291005792348243750, -0.290957955919951330, +-0.290910118764264870, -0.290862280881303110, -0.290814442271185690, -0.290766602934032110, -0.290718762869962070, -0.290670922079095060, -0.290623080561550780, -0.290575238317447970, +-0.290527395346907910, -0.290479551650049350, -0.290431707226991910, -0.290383862077855210, -0.290336016202758840, -0.290288169601822410, -0.290240322275164770, -0.290192474222907120, +-0.290144625445168280, -0.290096775942067950, -0.290048925713725590, -0.290001074760260990, -0.289953223081793670, -0.289905370678443240, -0.289857517550329460, -0.289809663697571000, +-0.289761809120289260, -0.289713953818602990, -0.289666097792631800, -0.289618241042495390, -0.289570383568313380, -0.289522525370205400, -0.289474666448290290, -0.289426806802689340, +-0.289378946433521360, -0.289331085340906010, -0.289283223524963000, -0.289235360985811870, -0.289187497723572380, -0.289139633738364100, -0.289091769030305920, -0.289043903599519150, +-0.288996037446122620, -0.288948170570236030, -0.288900302971979000, -0.288852434651471200, -0.288804565608832330, -0.288756695844181180, -0.288708825357639140, -0.288660954149325020, +-0.288613082219358550, -0.288565209567859360, -0.288517336194947180, -0.288469462100741590, -0.288421587285362380, -0.288373711748928400, -0.288325835491560930, -0.288277958513378900, +-0.288230080814501970, -0.288182202395049820, -0.288134323255142160, -0.288086443394898690, -0.288038562814438290, -0.287990681513882300, -0.287942799493349670, -0.287894916752959970, +-0.287847033292833010, -0.287799149113088460, -0.287751264213846060, -0.287703378595225430, -0.287655492257345600, -0.287607605200327800, -0.287559717424291040, -0.287511828929355010, +-0.287463939715639330, -0.287416049783263850, -0.287368159132348260, -0.287320267763011390, -0.287272375675374720, -0.287224482869557100, -0.287176589345678300, -0.287128695103857970, +-0.287080800144215940, -0.287032904466871910, -0.286985008071945660, -0.286937110959555990, -0.286889213129824350, -0.286841314582869770, -0.286793415318811860, -0.286745515337770370, +-0.286697614639865150, -0.286649713225215870, -0.286601811093942340, -0.286553908246163390, -0.286506004682000550, -0.286458100401572660, -0.286410195404999570, -0.286362289692400960, +-0.286314383263896630, -0.286266476119606320, -0.286218568259649860, -0.286170659684146120, -0.286122750393216550, -0.286074840386980170, -0.286026929665556600, -0.285979018229065800, +-0.285931106077627390, -0.285883193211361240, -0.285835279630386240, -0.285787365334823910, -0.285739450324793140, -0.285691534600413740, -0.285643618161805560, -0.285595701009088270, +-0.285547783142381770, -0.285499864561805820, -0.285451945267479300, -0.285404025259523800, -0.285356104538058260, -0.285308183103202440, -0.285260260955076170, -0.285212338093799260, +-0.285164414519491480, -0.285116490232271810, -0.285068565232261760, -0.285020639519580340, -0.284972713094347300, -0.284924785956682470, -0.284876858106705650, -0.284828929544536700, +-0.284781000270295460, -0.284733070284100830, -0.284685139586074390, -0.284637208176335090, -0.284589276055002780, -0.284541343222197320, -0.284493409678038430, -0.284445475422646090, +-0.284397540456139130, -0.284349604778639240, -0.284301668390265270, -0.284253731291137180, -0.284205793481374760, -0.284157854961097860, -0.284109915730426320, -0.284061975789479950, +-0.284014035138377810, -0.283966093777241470, -0.283918151706189840, -0.283870208925342870, -0.283822265434820360, -0.283774321234742220, -0.283726376325228240, -0.283678430706398310, +-0.283630484378371520, -0.283582537341269310, -0.283534589595210770, -0.283486641140315740, -0.283438691976704130, -0.283390742104495770, -0.283342791523810590, -0.283294840234768420, +-0.283246888237488280, -0.283198935532091740, -0.283150982118697940, -0.283103027997426650, -0.283055073168397790, -0.283007117631731200, -0.282959161387546900, -0.282911204435963790, +-0.282863246777103510, -0.282815288411085160, -0.282767329338028560, -0.282719369558053660, -0.282671409071280300, -0.282623447877828450, -0.282575485977817950, -0.282527523371367880, +-0.282479560058599920, -0.282431596039632970, -0.282383631314587100, -0.282335665883582110, -0.282287699746738010, -0.282239732904174590, -0.282191765356011040, -0.282143797102368920, +-0.282095828143367260, -0.282047858479126060, -0.281999888109765230, -0.281951917035404680, -0.281903945256164300, -0.281855972772164120, -0.281807999583523090, -0.281760025690362960, +-0.281712051092802730, -0.281664075790962420, -0.281616099784961880, -0.281568123074921070, -0.281520145660960010, -0.281472167543197700, -0.281424188721755840, -0.281376209196753490, +-0.281328228968310610, -0.281280248036547220, -0.281232266401583160, -0.281184284063538400, -0.281136301022533010, -0.281088317278685940, -0.281040332832118990, -0.280992347682951170, +-0.280944361831302500, -0.280896375277292890, -0.280848388021042390, -0.280800400062670870, -0.280752411402298400, -0.280704422040044030, -0.280656431976029460, -0.280608441210373820, +-0.280560449743197050, -0.280512457574619180, -0.280464464704760160, -0.280416471133739960, -0.280368476861678590, -0.280320481888695180, -0.280272486214911410, -0.280224489840446460, +-0.280176492765420280, -0.280128494989952850, -0.280080496514164170, -0.280032497338174260, -0.279984497462102240, -0.279936496886069860, -0.279888495610196190, -0.279840493634601340, +-0.279792490959405230, -0.279744487584727860, -0.279696483510689320, -0.279648478737409560, -0.279600473265007750, -0.279552467093605590, -0.279504460223322260, -0.279456452654277820, +-0.279408444386592240, -0.279360435420385520, -0.279312425755777750, -0.279264415392887990, -0.279216404331838140, -0.279168392572747230, -0.279120380115735310, -0.279072366960922470, +-0.279024353108428710, -0.278976338558374060, -0.278928323310878580, -0.278880307366061450, -0.278832290724044420, -0.278784273384946600, -0.278736255348888130, -0.278688236615989020, +-0.278640217186369330, -0.278592197060149090, -0.278544176237447480, -0.278496154718386290, -0.278448132503084760, -0.278400109591662840, -0.278352085984240660, -0.278304061680938300, +-0.278256036681875760, -0.278208010987173130, -0.278159984596949630, -0.278111957511327000, -0.278063929730424490, -0.278015901254362150, -0.277967872083260070, -0.277919842217238310, +-0.277871811656416940, -0.277823780400916040, -0.277775748450854840, -0.277727715806355080, -0.277679682467536050, -0.277631648434517870, -0.277583613707420520, -0.277535578286364160, +-0.277487542171468820, -0.277439505362854670, -0.277391467860640840, -0.277343429664949240, -0.277295390775899040, -0.277247351193610380, -0.277199310918203380, -0.277151269949798050, +-0.277103228288514580, -0.277055185934472150, -0.277007142887792600, -0.276959099148595230, -0.276911054717000120, -0.276863009593127320, -0.276814963777097020, -0.276766917269029360, +-0.276718870069044330, -0.276670822177261360, -0.276622773593802110, -0.276574724318785940, -0.276526674352332970, -0.276478623694563330, -0.276430572345597150, -0.276382520305554490, +-0.276334467574554710, -0.276286414152719590, -0.276238360040168440, -0.276190305237021370, -0.276142249743398570, -0.276094193559420110, -0.276046136685206220, -0.275998079120876980, +-0.275950020866551630, -0.275901961922352110, -0.275853902288397730, -0.275805841964808560, -0.275757780951704780, -0.275709719249206560, -0.275661656857434050, -0.275613593776506520, +-0.275565530006545880, -0.275517465547671370, -0.275469400400003230, -0.275421334563661580, -0.275373268038766610, -0.275325200825438490, -0.275277132923797350, -0.275229064333962490, +-0.275180995056055870, -0.275132925090196710, -0.275084854436505270, -0.275036783095101710, -0.274988711066106170, -0.274940638349638830, -0.274892564945819930, -0.274844490854768750, +-0.274796416076607210, -0.274748340611454640, -0.274700264459431190, -0.274652187620657070, -0.274604110095252540, -0.274556031883337660, -0.274507952985032780, -0.274459873400457080, +-0.274411793129732630, -0.274363712172978670, -0.274315630530315380, -0.274267548201863050, -0.274219465187741870, -0.274171381488072020, -0.274123297102972840, -0.274075212032566300, +-0.274027126276971680, -0.273979039836309280, -0.273930952710699280, -0.273882864900261920, -0.273834776405117330, -0.273786687225385850, -0.273738597361186830, -0.273690506812642120, +-0.273642415579871120, -0.273594323662994130, -0.273546231062131330, -0.273498137777402950, -0.273450043808929180, -0.273401949156829530, -0.273353853821225790, -0.273305757802237430, +-0.273257661099984670, -0.273209563714587770, -0.273161465646167000, -0.273113366894842500, -0.273065267460734620, -0.273017167343962700, -0.272969066544648750, -0.272920965062912080, +-0.272872862898873030, -0.272824760052651830, -0.272776656524368720, -0.272728552314143950, -0.272680447422096960, -0.272632341848349720, -0.272584235593021640, -0.272536128656232950, +-0.272488021038103880, -0.272439912738754840, -0.272391803758305960, -0.272343694096877640, -0.272295583754589180, -0.272247472731562630, -0.272199361027917360, -0.272151248643773770, +-0.272103135579251980, -0.272055021834472390, -0.272006907409555240, -0.271958792304620830, -0.271910676519788560, -0.271862560055180450, -0.271814442910916000, -0.271766325087115400, +-0.271718206583898950, -0.271670087401387040, -0.271621967539699860, -0.271573846998957810, -0.271525725779280300, -0.271477603880789290, -0.271429481303604280, -0.271381358047845580, +-0.271333234113633470, -0.271285109501088250, -0.271236984210330320, -0.271188858241479040, -0.271140731594656460, -0.271092604269982050, -0.271044476267576160, -0.270996347587559030, +-0.270948218230051110, -0.270900088195172580, -0.270851957483043860, -0.270803826093784340, -0.270755694027516150, -0.270707561284358740, -0.270659427864432420, -0.270611293767857470, +-0.270563158994754360, -0.270515023545243320, -0.270466887419443860, -0.270418750617478050, -0.270370613139465370, -0.270322474985526200, -0.270274336155780780, -0.270226196650349530, +-0.270178056469352780, -0.270129915612910890, -0.270081774081143370, -0.270033631874172290, -0.269985488992117110, -0.269937345435098170, -0.269889201203235900, -0.269841056296650670, +-0.269792910715462740, -0.269744764459791670, -0.269696617529759600, -0.269648469925485970, -0.269600321647091130, -0.269552172694695500, -0.269504023068419470, -0.269455872768383340, +-0.269407721794707570, -0.269359570147511610, -0.269311417826917590, -0.269263264833045020, -0.269215111166014320, -0.269166956825945770, -0.269118801812959880, -0.269070646127176960, +-0.269022489768716620, -0.268974332737700880, -0.268926175034249320, -0.268878016658482270, -0.268829857610520250, -0.268781697890483560, -0.268733537498492600, -0.268685376434667830, +-0.268637214699129600, -0.268589052291997480, -0.268540889213393590, -0.268492725463437440, -0.268444561042249560, -0.268396395949950180, -0.268348230186659880, -0.268300063752498990, +-0.268251896647587080, -0.268203728872046300, -0.268155560425996140, -0.268107391309557130, -0.268059221522849670, -0.268011051065994100, -0.267962879939110890, -0.267914708142320550, +-0.267866535675742530, -0.267818362539499030, -0.267770188733709670, -0.267722014258494790, -0.267673839113974850, -0.267625663300270380, -0.267577486817501710, -0.267529309665788470, +-0.267481131845252850, -0.267432953356014360, -0.267384774198193510, -0.267336594371910710, -0.267288413877286410, -0.267240232714441080, -0.267192050883495180, -0.267143868384568330, +-0.267095685217782650, -0.267047501383257720, -0.266999316881114060, -0.266951131711472110, -0.266902945874452290, -0.266854759370175170, -0.266806572198760250, -0.266758384360329780, +-0.266710195855003330, -0.266662006682901410, -0.266613816844144480, -0.266565626338853000, -0.266517435167147430, -0.266469243329148290, -0.266421050824975190, -0.266372857654750330, +-0.266324663818593320, -0.266276469316624630, -0.266228274148964770, -0.266180078315734260, -0.266131881817053490, -0.266083684653042220, -0.266035486823822550, -0.265987288329514180, +-0.265939089170237620, -0.265890889346113320, -0.265842688857261760, -0.265794487703803540, -0.265746285885859020, -0.265698083403548890, -0.265649880256992600, -0.265601676446312500, +-0.265553471971628210, -0.265505266833060250, -0.265457061030729140, -0.265408854564755330, -0.265360647435259440, -0.265312439642361010, -0.265264231186182360, -0.265216022066843190, +-0.265167812284463900, -0.265119601839165110, -0.265071390731067280, -0.265023178960290980, -0.264974966526956790, -0.264926753431184270, -0.264878539673095710, -0.264830325252810860, +-0.264782110170450170, -0.264733894426134210, -0.264685678019983490, -0.264637460952118600, -0.264589243222659200, -0.264541024831727530, -0.264492805779443290, -0.264444586065927080, +-0.264396365691299370, -0.264348144655680740, -0.264299922959191750, -0.264251700601952970, -0.264203477584084080, -0.264155253905707380, -0.264107029566942490, -0.264058804567910090, +-0.264010578908730590, -0.263962352589524720, -0.263914125610412940, -0.263865897971515000, -0.263817669672953170, -0.263769440714847150, -0.263721211097317550, -0.263672980820484900, +-0.263624749884469820, -0.263576518289392820, -0.263528286035374590, -0.263480053122534750, -0.263431819550995650, -0.263383585320876970, -0.263335350432299390, -0.263287114885383370, +-0.263238878680249590, -0.263190641817018620, -0.263142404295810150, -0.263094166116746580, -0.263045927279947580, -0.262997687785533730, -0.262949447633625650, -0.262901206824344040, +-0.262852965357809330, -0.262804723234142220, -0.262756480453463340, -0.262708237015892350, -0.262659992921551680, -0.262611748170560990, -0.262563502763040910, -0.262515256699112130, +-0.262467009978895160, -0.262418762602510680, -0.262370514570078480, -0.262322265881720810, -0.262274016537557440, -0.262225766537709070, -0.262177515882296320, -0.262129264571439700, +-0.262081012605260010, -0.262032759983877710, -0.261984506707412690, -0.261936252775987250, -0.261887998189721190, -0.261839742948735130, -0.261791487053149700, -0.261743230503085570, +-0.261694973298663370, -0.261646715440002840, -0.261598456927226390, -0.261550197760453850, -0.261501937939805750, -0.261453677465402820, -0.261405416337365750, -0.261357154555815100, +-0.261308892120871550, -0.261260629032654900, -0.261212365291287550, -0.261164100896889300, -0.261115835849580810, -0.261067570149482730, -0.261019303796715670, -0.260971036791400430, +-0.260922769133656700, -0.260874500823606860, -0.260826231861370830, -0.260777962247069230, -0.260729691980822690, -0.260681421062751940, -0.260633149492977610, -0.260584877271620440, +-0.260536604398800160, -0.260488330874639300, -0.260440056699257570, -0.260391781872775730, -0.260343506395314390, -0.260295230266994300, -0.260246953487936140, -0.260198676058259750, +-0.260150397978087530, -0.260102119247539290, -0.260053839866735800, -0.260005559835797650, -0.259957279154845620, -0.259908997824000400, -0.259860715843382720, -0.259812433213113200, +-0.259764149933311760, -0.259715866004100790, -0.259667581425600150, -0.259619296197930620, -0.259571010321212770, -0.259522723795567460, -0.259474436621115300, -0.259426148797976150, +-0.259377860326272580, -0.259329571206124270, -0.259281281437652110, -0.259232991020976690, -0.259184699956218790, -0.259136408243499210, -0.259088115882938560, -0.259039822874656770, +-0.258991529218776270, -0.258943234915416930, -0.258894939964699530, -0.258846644366744760, -0.258798348121673400, -0.258750051229606150, -0.258701753690662950, -0.258653455504966210, +-0.258605156672635840, -0.258556857193792570, -0.258508557068557130, -0.258460256297050330, -0.258411954879392840, -0.258363652815705500, -0.258315350106108180, -0.258267046750723320, +-0.258218742749670880, -0.258170438103071550, -0.258122132811046120, -0.258073826873715380, -0.258025520291200070, -0.257977213063620090, -0.257928905191097960, -0.257880596673753570, +-0.257832287511707670, -0.257783977705081050, -0.257735667253994440, -0.257687356158568750, -0.257639044418924600, -0.257590732035182010, -0.257542419007463440, -0.257494105335888850, +-0.257445791020578960, -0.257397476061654640, -0.257349160459236560, -0.257300844213445620, -0.257252527324401740, -0.257204209792227360, -0.257155891617042440, -0.257107572798967840, +-0.257059253338124290, -0.257010933234632590, -0.256962612488613570, -0.256914291100187990, -0.256865969069475840, -0.256817646396599650, -0.256769323081679320, -0.256720999124835700, +-0.256672674526189580, -0.256624349285861750, -0.256576023403973060, -0.256527696880644360, -0.256479369715995500, -0.256431041910149090, -0.256382713463225050, -0.256334384375344280, +-0.256286054646627510, -0.256237724277195660, -0.256189393267169440, -0.256141061616669720, -0.256092729325816560, -0.256044396394732370, -0.255996062823537210, -0.255947728612351880, +-0.255899393761297280, -0.255851058270494150, -0.255802722140063390, -0.255754385370124960, -0.255706047960801430, -0.255657709912212760, -0.255609371224479850, -0.255561031897723500, +-0.255512691932064550, -0.255464351327623910, -0.255416010084522360, -0.255367668202879930, -0.255319325682819180, -0.255270982524460120, -0.255222638727923610, -0.255174294293330490, +-0.255125949220801670, -0.255077603510457940, -0.255029257162419360, -0.254980910176808520, -0.254932562553745360, -0.254884214293350840, -0.254835865395745760, -0.254787515861051030, +-0.254739165689387480, -0.254690814880876030, -0.254642463435636680, -0.254594111353792010, -0.254545758635462140, -0.254497405280767810, -0.254449051289829970, -0.254400696662769490, +-0.254352341399707300, -0.254303985500763390, -0.254255628966060350, -0.254207271795718280, -0.254158913989858020, -0.254110555548600460, -0.254062196472066510, -0.254013836760377090, +-0.253965476413653020, -0.253917115432014450, -0.253868753815583940, -0.253820391564481550, -0.253772028678828200, -0.253723665158744780, -0.253675301004352150, -0.253626936215771310, +-0.253578570793123130, -0.253530204736527600, -0.253481838046107470, -0.253433470721982750, -0.253385102764274340, -0.253336734173103210, -0.253288364948590190, -0.253239995090856260, +-0.253191624600022370, -0.253143253476208530, -0.253094881719537480, -0.253046509330129180, -0.252998136308104580, -0.252949762653584710, -0.252901388366690350, -0.252853013447542570, +-0.252804637896261400, -0.252756261712969500, -0.252707884897786890, -0.252659507450834600, -0.252611129372233570, -0.252562750662104710, -0.252514371320568920, -0.252465991347747280, +-0.252417610743759730, -0.252369229508729090, -0.252320847642775290, -0.252272465146019420, -0.252224082018582370, -0.252175698260585170, -0.252127313872148650, -0.252078928853393000, +-0.252030543204440900, -0.251982156925412480, -0.251933770016428640, -0.251885382477610330, -0.251836994309078630, -0.251788605510954390, -0.251740216083358670, -0.251691826026411550, +-0.251643435340235700, -0.251595044024951310, -0.251546652080679280, -0.251498259507540620, -0.251449866305656300, -0.251401472475147330, -0.251353078016133820, -0.251304682928738480, +-0.251256287213081410, -0.251207890869283630, -0.251159493897466110, -0.251111096297749860, -0.251062698070255890, -0.251014299215105210, -0.250965899732417840, -0.250917499622316630, +-0.250869098884921650, -0.250820697520353960, -0.250772295528734480, -0.250723892910184270, -0.250675489664824340, -0.250627085792775710, -0.250578681294158500, -0.250530276169095400, +-0.250481870417706640, -0.250433464040113190, -0.250385057036436100, -0.250336649406796340, -0.250288241151314980, -0.250239832270113040, -0.250191422763310630, -0.250143012631030500, +-0.250094601873392890, -0.250046190490518740, -0.249997778482529130, -0.249949365849545050, -0.249900952591687600, -0.249852538709076870, -0.249804124201835680, -0.249755709070084150, +-0.249707293313943370, -0.249658876933534330, -0.249610459928978120, -0.249562042300395780, -0.249513624047908310, -0.249465205171635900, -0.249416785671701360, -0.249368365548224860, +-0.249319944801327440, -0.249271523431130150, -0.249223101437754090, -0.249174678821320220, -0.249126255581948840, -0.249077831719762640, -0.249029407234881900, -0.248980982127427610, +-0.248932556397520880, -0.248884130045282760, -0.248835703070834330, -0.248787275474296600, -0.248738847255789850, -0.248690418415436850, -0.248641988953357790, -0.248593558869673770, +-0.248545128164505830, -0.248496696837975100, -0.248448264890202610, -0.248399832321308610, -0.248351399131415850, -0.248302965320644640, -0.248254530889115980, -0.248206095836951020, +-0.248157660164270820, -0.248109223871196470, -0.248060786957849030, -0.248012349424348800, -0.247963911270818540, -0.247915472497378500, -0.247867033104149790, -0.247818593091253480, +-0.247770152458810680, -0.247721711206942530, -0.247673269335770080, -0.247624826845413620, -0.247576383735995910, -0.247527940007637280, -0.247479495660458790, -0.247431050694581570, +-0.247382605110126720, -0.247334158907215330, -0.247285712085968560, -0.247237264646506670, -0.247188816588952450, -0.247140367913426200, -0.247091918620049030, -0.247043468708942060, +-0.246995018180226430, -0.246946567034023230, -0.246898115270452770, -0.246849662889637890, -0.246801209891698850, -0.246752756276756770, -0.246704302044932820, -0.246655847196348120, +-0.246607391731123780, -0.246558935649380940, -0.246510478951239950, -0.246462021636823600, -0.246413563706252200, -0.246365105159646880, -0.246316645997128800, -0.246268186218819130, +-0.246219725824838980, -0.246171264815308630, -0.246122803190350990, -0.246074340950086370, -0.246025878094635860, -0.245977414624120680, -0.245928950538661960, -0.245880485838380850, +-0.245832020523398560, -0.245783554593835330, -0.245735088049814060, -0.245686620891455100, -0.245638153118879570, -0.245589684732208660, -0.245541215731563540, -0.245492746117065400, +-0.245444275888834520, -0.245395805046993790, -0.245347333591663580, -0.245298861522965010, -0.245250388841019300, -0.245201915545947610, -0.245153441637871140, -0.245104967116911070, +-0.245056491983187710, -0.245008016236824000, -0.244959539877940220, -0.244911062906657620, -0.244862585323097350, -0.244814107127380610, -0.244765628319628610, -0.244717148899962540, +-0.244668668868502720, -0.244620188225372100, -0.244571706970691030, -0.244523225104580660, -0.244474742627162260, -0.244426259538556980, -0.244377775838886060, -0.244329291528270680, +-0.244280806606831240, -0.244232321074690640, -0.244183834931969210, -0.244135348178788240, -0.244086860815268870, -0.244038372841532350, -0.243989884257699880, -0.243941395063891870, +-0.243892905260231220, -0.243844414846838300, -0.243795923823834360, -0.243747432191340600, -0.243698939949478280, -0.243650447098368580, -0.243601953638132780, -0.243553459568891210, +-0.243504964890766870, -0.243456469603880120, -0.243407973708352210, -0.243359477204304340, -0.243310980091857780, -0.243262482371133790, -0.243213984042252720, -0.243165485105337560, +-0.243116985560508670, -0.243068485407887340, -0.243019984647594780, -0.242971483279752270, -0.242922981304481030, -0.242874478721902350, -0.242825975532136610, -0.242777471735306780, +-0.242728967331533290, -0.242680462320937370, -0.242631956703640320, -0.242583450479763350, -0.242534943649427760, -0.242486436212753950, -0.242437928169864920, -0.242389419520881080, +-0.242340910265923660, -0.242292400405113990, -0.242243889938573290, -0.242195378866422890, -0.242146867188784030, -0.242098354905777160, -0.242049842017525250, -0.242001328524148740, +-0.241952814425768910, -0.241904299722507040, -0.241855784414484410, -0.241807268501822330, -0.241758751984642080, -0.241710234863064090, -0.241661717137211380, -0.241613198807204360, +-0.241564679873164350, -0.241516160335212640, -0.241467640193470560, -0.241419119448059330, -0.241370598099099470, -0.241322076146713970, -0.241273553591023260, -0.241225030432148680, +-0.241176506670211540, -0.241127982305333140, -0.241079457337634750, -0.241030931767237720, -0.240982405594262540, -0.240933878818832160, -0.240885351441067100, -0.240836823461088670, +-0.240788294879018180, -0.240739765694976960, -0.240691235909086310, -0.240642705521467580, -0.240594174532241220, -0.240545642941530270, -0.240497110749455230, -0.240448577956137420, +-0.240400044561698140, -0.240351510566258780, -0.240302975969940630, -0.240254440772864180, -0.240205904975152480, -0.240157368576926020, -0.240108831578306150, -0.240060293979414200, +-0.240011755780371480, -0.239963216981299410, -0.239914677582319300, -0.239866137583551600, -0.239817596985119450, -0.239769055787143300, -0.239720513989744500, -0.239671971593044430, +-0.239623428597164430, -0.239574885002225850, -0.239526340808349200, -0.239477796015657550, -0.239429250624271420, -0.239380704634312190, -0.239332158045901160, -0.239283610859159750, +-0.239235063074209300, -0.239186514691171190, -0.239137965710165960, -0.239089416131316650, -0.239040865954743830, -0.238992315180568820, -0.238943763808913020, -0.238895211839897810, +-0.238846659273644600, -0.238798106110274720, -0.238749552349908720, -0.238700997992669690, -0.238652443038678160, -0.238603887488055530, -0.238555331340923190, -0.238506774597402520, +-0.238458217257614900, -0.238409659321680900, -0.238361100789723580, -0.238312541661863550, -0.238263981938222120, -0.238215421618920790, -0.238166860704080860, -0.238118299193823800, +-0.238069737088270980, -0.238021174387542940, -0.237972611091762880, -0.237924047201051230, -0.237875482715529500, -0.237826917635319050, -0.237778351960541310, -0.237729785691317700, +-0.237681218827769600, -0.237632651370017630, -0.237584083318184870, -0.237535514672391900, -0.237486945432760140, -0.237438375599411030, -0.237389805172465970, -0.237341234152046390, +-0.237292662538272890, -0.237244090331268590, -0.237195517531154030, -0.237146944138050710, -0.237098370152080020, -0.237049795573363390, -0.237001220402022290, -0.236952644638178140, +-0.236904068281951510, -0.236855491333465590, -0.236806913792840910, -0.236758335660198970, -0.236709756935661180, -0.236661177619348990, -0.236612597711383880, -0.236564017211886380, +-0.236515436120979720, -0.236466854438784490, -0.236418272165422080, -0.236369689301014010, -0.236321105845681720, -0.236272521799546660, -0.236223937162730320, -0.236175351935353240, +-0.236126766117538660, -0.236078179709407170, -0.236029592711080230, -0.235981005122679300, -0.235932416944325850, -0.235883828176141370, -0.235835238818247310, -0.235786648870764310, +-0.235738058333815530, -0.235689467207521620, -0.235640875492004020, -0.235592283187384260, -0.235543690293783780, -0.235495096811324050, -0.235446502740125740, -0.235397908080312050, +-0.235349312832003550, -0.235300716995321820, -0.235252120570388250, -0.235203523557324410, -0.235154925956251730, -0.235106327767291760, -0.235057728990565100, -0.235009129626195000, +-0.234960529674302030, -0.234911929135007770, -0.234863328008433680, -0.234814726294701290, -0.234766123993932070, -0.234717521106247520, -0.234668917631768340, -0.234620313570617690, +-0.234571708922916290, -0.234523103688785590, -0.234474497868347150, -0.234425891461722460, -0.234377284469033050, -0.234328676890399550, -0.234280068725945230, -0.234231459975790730, +-0.234182850640057590, -0.234134240718867320, -0.234085630212341440, -0.234037019120601510, -0.233988407443769000, -0.233939795181964620, -0.233891182335311640, -0.233842568903930680, +-0.233793954887943300, -0.233745340287471020, -0.233696725102635420, -0.233648109333557980, -0.233599492980359420, -0.233550876043162990, -0.233502258522089360, -0.233453640417260080, +-0.233405021728796710, -0.233356402456820790, -0.233307782601453850, -0.233259162162817470, -0.233210541141032320, -0.233161919536221670, -0.233113297348506220, -0.233064674578007530, +-0.233016051224847170, -0.232967427289146660, -0.232918802771027580, -0.232870177670611490, -0.232821551988019130, -0.232772925723373710, -0.232724298876795990, -0.232675671448407530, +-0.232627043438329910, -0.232578414846684650, -0.232529785673593360, -0.232481155919176760, -0.232432525583558120, -0.232383894666858160, -0.232335263169198470, -0.232286631090700610, +-0.232237998431486180, -0.232189365191676770, -0.232140731371393930, -0.232092096970758420, -0.232043461989893510, -0.231994826428919940, -0.231946190287959320, -0.231897553567133210, +-0.231848916266563230, -0.231800278386370960, -0.231751639926677990, -0.231703000887605040, -0.231654361269275470, -0.231605721071809990, -0.231557080295330200, -0.231508438939957730, +-0.231459797005814150, -0.231411154493021080, -0.231362511401699280, -0.231313867731972040, -0.231265223483960140, -0.231216578657785170, -0.231167933253568770, -0.231119287271432520, +-0.231070640711498050, -0.231021993573887000, -0.230973345858720090, -0.230924697566120690, -0.230876048696209530, -0.230827399249108250, -0.230778749224938490, -0.230730098623821820, +-0.230681447445879930, -0.230632795691233570, -0.230584143360006070, -0.230535490452318220, -0.230486836968291610, -0.230438182908047930, -0.230389528271708800, -0.230340873059395850, +-0.230292217271230730, -0.230243560907334170, -0.230194903967829600, -0.230146246452837770, -0.230097588362480290, -0.230048929696878870, -0.230000270456155120, -0.229951610640430680, +-0.229902950249827240, -0.229854289284465520, -0.229805627744468970, -0.229756965629958370, -0.229708302941055320, -0.229659639677881530, -0.229610975840558650, -0.229562311429208300, +-0.229513646443951340, -0.229464980884911100, -0.229416314752208420, -0.229367648045964960, -0.229318980766302360, -0.229270312913342320, -0.229221644487206500, -0.229172975488016570, +-0.229124305915893330, -0.229075635770960210, -0.229026965053338000, -0.228978293763148350, -0.228929621900512970, -0.228880949465553570, -0.228832276458391770, -0.228783602879149260, +-0.228734928727946900, -0.228686254004908080, -0.228637578710153640, -0.228588902843805230, -0.228540226405984560, -0.228491549396813350, -0.228442871816413260, -0.228394193664905130, +-0.228345514942412370, -0.228296835649055810, -0.228248155784957160, -0.228199475350238160, -0.228150794345020450, -0.228102112769425740, -0.228053430623575750, -0.228004747907591340, +-0.227956064621595900, -0.227907380765710320, -0.227858696340056290, -0.227810011344755510, -0.227761325779929690, -0.227712639645700570, -0.227663952942188970, -0.227615265669518370, +-0.227566577827809590, -0.227517889417184400, -0.227469200437764450, -0.227420510889671520, -0.227371820773027310, -0.227323130087953520, -0.227274438834571070, -0.227225747013003380, +-0.227177054623371320, -0.227128361665796640, -0.227079668140401040, -0.227030974047306270, -0.226982279386634070, -0.226933584158505310, -0.226884888363043440, -0.226836192000369360, +-0.226787495070604810, -0.226738797573871500, -0.226690099510291200, -0.226641400879985660, -0.226592701683076630, -0.226544001919684960, -0.226495301589934170, -0.226446600693945090, +-0.226397899231839560, -0.226349197203739250, -0.226300494609765950, -0.226251791450041400, -0.226203087724687390, -0.226154383433824800, -0.226105678577577100, -0.226056973156065210, +-0.226008267169410890, -0.225959560617735920, -0.225910853501162020, -0.225862145819811010, -0.225813437573804620, -0.225764728763263760, -0.225716019388311960, -0.225667309449070120, +-0.225618598945660000, -0.225569887878203370, -0.225521176246822020, -0.225472464051637730, -0.225423751292771420, -0.225375037970346610, -0.225326324084484190, -0.225277609635305960, +-0.225228894622933720, -0.225180179047489240, -0.225131462909094300, -0.225082746207870720, -0.225034028943939400, -0.224985311117423870, -0.224936592728445070, -0.224887873777124770, +-0.224839154263584810, -0.224790434187946950, -0.224741713550333010, -0.224692992350863900, -0.224644270589663210, -0.224595548266851820, -0.224546825382551550, -0.224498101936884240, +-0.224449377929971690, -0.224400653361935650, -0.224351928232898010, -0.224303202542979670, -0.224254476292304190, -0.224205749480992530, -0.224157022109166490, -0.224108294176947890, +-0.224059565684458560, -0.224010836631820310, -0.223962107019154120, -0.223913376846583520, -0.223864646114229460, -0.223815914822213800, -0.223767182970658340, -0.223718450559684950, +-0.223669717589415420, -0.223620984059971580, -0.223572249971474430, -0.223523515324047520, -0.223474780117811830, -0.223426044352889180, -0.223377308029401420, -0.223328571147470400, +-0.223279833707217930, -0.223231095708765900, -0.223182357152235250, -0.223133618037749560, -0.223084878365429840, -0.223036138135397940, -0.222987397347775670, -0.222938656002684920, +-0.222889914100247530, -0.222841171640585340, -0.222792428623819370, -0.222743685050073190, -0.222694940919467820, -0.222646196232125060, -0.222597450988166830, -0.222548705187714970, +-0.222499958830891350, -0.222451211917816970, -0.222402464448615420, -0.222353716423407700, -0.222304967842315710, -0.222256218705461280, -0.222207469012966310, -0.222158718764952660, +-0.222109967961542230, -0.222061216602856020, -0.222012464689017610, -0.221963712220148050, -0.221914959196369220, -0.221866205617802960, -0.221817451484571220, -0.221768696796795840, +-0.221719941554597840, -0.221671185758100880, -0.221622429407425940, -0.221573672502694910, -0.221524915044029710, -0.221476157031552240, -0.221427398465384370, -0.221378639345648000, +-0.221329879672464150, -0.221281119445956490, -0.221232358666246020, -0.221183597333454660, -0.221134835447704290, -0.221086073009116840, -0.221037310017814210, -0.220988546473917440, +-0.220939782377550190, -0.220891017728833460, -0.220842252527889190, -0.220793486774839290, -0.220744720469805670, -0.220695953612910250, -0.220647186204274950, -0.220598418244020820, +-0.220549649732271510, -0.220500880669148050, -0.220452111054772410, -0.220403340889266500, -0.220354570172752230, -0.220305798905351540, -0.220257027087186360, -0.220208254718377740, +-0.220159481799049340, -0.220110708329322220, -0.220061934309318360, -0.220013159739159660, -0.219964384618968060, -0.219915608948865500, -0.219866832728973890, -0.219818055959414370, +-0.219769278640310540, -0.219720500771783540, -0.219671722353955300, -0.219622943386947710, -0.219574163870882800, -0.219525383805882460, -0.219476603192067800, -0.219427822029562510, +-0.219379040318487650, -0.219330258058965190, -0.219281475251117100, -0.219232691895065310, -0.219183907990931790, -0.219135123538838520, -0.219086338538906550, -0.219037552991259600, +-0.218988766896018760, -0.218939980253306020, -0.218891193063243340, -0.218842405325952670, -0.218793617041555980, -0.218744828210174380, -0.218696038831931560, -0.218647248906948670, +-0.218598458435347640, -0.218549667417250490, -0.218500875852779160, -0.218452083742055630, -0.218403291085201900, -0.218354497882339070, -0.218305704133590850, -0.218256909839078390, +-0.218208114998923650, -0.218159319613248640, -0.218110523682175290, -0.218061727205825670, -0.218012930184320830, -0.217964132617784550, -0.217915334506337960, -0.217866535850103020, +-0.217817736649201730, -0.217768936903756090, -0.217720136613888120, -0.217671335779719810, -0.217622534401372300, -0.217573732478969300, -0.217524930012631980, -0.217476127002482340, +-0.217427323448642380, -0.217378519351234120, -0.217329714710379540, -0.217280909526200690, -0.217232103798818720, -0.217183297528357330, -0.217134490714937680, -0.217085683358681840, +-0.217036875459711760, -0.216988067018149520, -0.216939258034117090, -0.216890448507736530, -0.216841638439128960, -0.216792827828418190, -0.216744016675725320, -0.216695204981172450, +-0.216646392744881540, -0.216597579966974650, -0.216548766647573800, -0.216499952786800180, -0.216451138384777560, -0.216402323441627080, -0.216353507957470770, -0.216304691932430710, +-0.216255875366628940, -0.216207058260187430, -0.216158240613228330, -0.216109422425872720, -0.216060603698244450, -0.216011784430464650, -0.215962964622655410, -0.215914144274938740, +-0.215865323387436720, -0.215816501960271380, -0.215767679993563940, -0.215718857487438130, -0.215670034442015210, -0.215621210857417200, -0.215572386733766160, -0.215523562071184140, +-0.215474736869793240, -0.215425911129715460, -0.215377084851072070, -0.215328258033986840, -0.215279430678580940, -0.215230602784976470, -0.215181774353295500, -0.215132945383660070, +-0.215084115876192310, -0.215035285831013360, -0.214986455248247080, -0.214937624128014680, -0.214888792470438210, -0.214839960275639730, -0.214791127543741380, -0.214742294274865210, +-0.214693460469133290, -0.214644626126666850, -0.214595791247589730, -0.214546955832023130, -0.214498119880089130, -0.214449283391909830, -0.214400446367607330, -0.214351608807303700, +-0.214302770711121050, -0.214253932079180640, -0.214205092911606220, -0.214156253208519110, -0.214107412970041350, -0.214058572196295040, -0.214009730887402330, -0.213960889043485260, +-0.213912046664665120, -0.213863203751065710, -0.213814360302808320, -0.213765516320015030, -0.213716671802807930, -0.213667826751309160, -0.213618981165640820, -0.213570135045925010, +-0.213521288392283020, -0.213472441204838690, -0.213423593483713230, -0.213374745229028770, -0.213325896440907490, -0.213277047119471430, -0.213228197264842790, -0.213179346877143630, +-0.213130495956495250, -0.213081644503021470, -0.213032792516843620, -0.212983939998083770, -0.212935086946864060, -0.212886233363306640, -0.212837379247533650, -0.212788524599666320, +-0.212739669419828550, -0.212690813708141640, -0.212641957464727670, -0.212593100689708800, -0.212544243383207180, -0.212495385545344970, -0.212446527176244290, -0.212397668276026410, +-0.212348808844815250, -0.212299948882732040, -0.212251088389898980, -0.212202227366438180, -0.212153365812471820, -0.212104503728122060, -0.212055641113510160, -0.212006777968760020, +-0.211957914293992940, -0.211909050089331090, -0.211860185354896590, -0.211811320090811630, -0.211762454297198390, -0.211713587974179000, -0.211664721121874760, -0.211615853740409620, +-0.211566985829904820, -0.211518117390482540, -0.211469248422265000, -0.211420378925374320, -0.211371508899932700, -0.211322638346062320, -0.211273767263884440, -0.211224895653523040, +-0.211176023515099400, -0.211127150848735710, -0.211078277654554110, -0.211029403932676830, -0.210980529683226060, -0.210931654906323070, -0.210882779602091840, -0.210833903770653640, +-0.210785027412130680, -0.210736150526645160, -0.210687273114319260, -0.210638395175275190, -0.210589516709635110, -0.210540637717520380, -0.210491758199054910, -0.210442878154360080, +-0.210393997583558030, -0.210345116486770980, -0.210296234864121160, -0.210247352715730720, -0.210198470041721930, -0.210149586842216100, -0.210100703117337140, -0.210051818867206450, +-0.210002934091946200, -0.209954048791678620, -0.209905162966525920, -0.209856276616610300, -0.209807389742053120, -0.209758502342978350, -0.209709614419507330, -0.209660725971762250, +-0.209611836999865380, -0.209562947503938890, -0.209514057484105040, -0.209465166940486060, -0.209416275873203300, -0.209367384282380690, -0.209318492168139640, -0.209269599530602340, +-0.209220706369891070, -0.209171812686128030, -0.209122918479435430, -0.209074023749934700, -0.209025128497749760, -0.208976232723002000, -0.208927336425813650, -0.208878439606306980, +-0.208829542264604210, -0.208780644400827550, -0.208731746015099310, -0.208682847107540840, -0.208633947678276120, -0.208585047727426500, -0.208536147255114300, -0.208487246261461700, +-0.208438344746591010, -0.208389442710624430, -0.208340540153684280, -0.208291637075891880, -0.208242733477371270, -0.208193829358243820, -0.208144924718631800, -0.208096019558657470, +-0.208047113878443100, -0.207998207678110920, -0.207949300957782380, -0.207900393717581460, -0.207851485957629530, -0.207802577678048880, -0.207753668878961820, -0.207704759560490560, +-0.207655849722757410, -0.207606939365884650, -0.207558028489993660, -0.207509117095208450, -0.207460205181650480, -0.207411292749441980, -0.207362379798705250, -0.207313466329562570, +-0.207264552342136230, -0.207215637836548480, -0.207166722812920810, -0.207117807271377190, -0.207068891212039030, -0.207019974635028660, -0.206971057540468350, -0.206922139928480380, +-0.206873221799187100, -0.206824303152709860, -0.206775383989172750, -0.206726464308697180, -0.206677544111405430, -0.206628623397419830, -0.206579702166862690, -0.206530780419856290, +-0.206481858156522920, -0.206432935376984040, -0.206384012081363700, -0.206335088269783310, -0.206286163942365240, -0.206237239099231720, -0.206188313740505110, -0.206139387866307730, +-0.206090461476760990, -0.206041534571988980, -0.205992607152113150, -0.205943679217255790, -0.205894750767539210, -0.205845821803085780, -0.205796892324017790, -0.205747962330457560, +-0.205699031822526580, -0.205650100800348870, -0.205601169264045900, -0.205552237213740020, -0.205503304649553550, -0.205454371571608810, -0.205405437980028140, -0.205356503874933870, +-0.205307569256447470, -0.205258634124693030, -0.205209698479792010, -0.205160762321866720, -0.205111825651039550, -0.205062888467432810, -0.205013950771168820, -0.204965012562369130, +-0.204916073841157760, -0.204867134607656180, -0.204818194861986800, -0.204769254604271920, -0.204720313834633900, -0.204671372553195090, -0.204622430760077860, -0.204573488455403660, +-0.204524545639296650, -0.204475602311878250, -0.204426658473270850, -0.204377714123596790, -0.204328769262978470, -0.204279823891538200, -0.204230878009398380, -0.204181931616680500, +-0.204132984713508660, -0.204084037300004350, -0.204035089376289970, -0.203986140942487850, -0.203937191998720370, -0.203888242545109930, -0.203839292581777990, -0.203790342108848720, +-0.203741391126443570, -0.203692439634684950, -0.203643487633695220, -0.203594535123596790, -0.203545582104512010, -0.203496628576563280, -0.203447674539872110, -0.203398719994562600, +-0.203349764940756320, -0.203300809378575610, -0.203251853308142910, -0.203202896729580560, -0.203153939643010960, -0.203104982048555620, -0.203056023946338730, -0.203007065336481750, +-0.202958106219107120, -0.202909146594337230, -0.202860186462294480, -0.202811225823101270, -0.202762264676879970, -0.202713303023752150, -0.202664340863841940, -0.202615378197270880, +-0.202566415024161370, -0.202517451344635830, -0.202468487158816660, -0.202419522466826260, -0.202370557268787080, -0.202321591564820630, -0.202272625355051060, -0.202223658639599930, +-0.202174691418589650, -0.202125723692142630, -0.202076755460381310, -0.202027786723428110, -0.201978817481404590, -0.201929847734434870, -0.201880877482640530, -0.201831906726144010, +-0.201782935465067730, -0.201733963699534090, -0.201684991429665530, -0.201636018655584530, -0.201587045377412590, -0.201538071595273930, -0.201489097309290040, -0.201440122519583460, +-0.201391147226276550, -0.201342171429491760, -0.201293195129351570, -0.201244218325978390, -0.201195241019493760, -0.201146263210021940, -0.201097284897684440, -0.201048306082603740, +-0.200999326764902260, -0.200950346944702460, -0.200901366622126790, -0.200852385797296860, -0.200803404470336820, -0.200754422641368280, -0.200705440310513660, -0.200656457477895460, +-0.200607474143636110, -0.200558490307858080, -0.200509505970683820, -0.200460521132234920, -0.200411535792635570, -0.200362549952007420, -0.200313563610472870, -0.200264576768154400, +-0.200215589425174510, -0.200166601581655640, -0.200117613237719400, -0.200068624393489990, -0.200019635049089040, -0.199970645204638970, -0.199921654860262310, -0.199872664016081500, +-0.199823672672219040, -0.199774680828797400, -0.199725688485938190, -0.199676695643765610, -0.199627702302401320, -0.199578708461967760, -0.199529714122587410, -0.199480719284382800, +-0.199431723947476380, -0.199382728111990650, -0.199333731778047250, -0.199284734945770370, -0.199235737615281660, -0.199186739786703590, -0.199137741460158700, -0.199088742635769420, +-0.199039743313658310, -0.198990743493946960, -0.198941743176759640, -0.198892742362217930, -0.198843741050444390, -0.198794739241561490, -0.198745736935691750, -0.198696734132957660, +-0.198647730833481720, -0.198598727037385600, -0.198549722744793540, -0.198500717955827160, -0.198451712670608990, -0.198402706889261540, -0.198353700611907320, -0.198304693838668860, +-0.198255686569668630, -0.198206678805028350, -0.198157670544872240, -0.198108661789321930, -0.198059652538500000, -0.198010642792528920, -0.197961632551531210, -0.197912621815629460, +-0.197863610584945250, -0.197814598859602900, -0.197765586639724070, -0.197716573925431240, -0.197667560716846990, -0.197618547014093840, -0.197569532817294340, -0.197520518126570980, +-0.197471502942045460, -0.197422487263842070, -0.197373471092082450, -0.197324454426889150, -0.197275437268384730, -0.197226419616691680, -0.197177401471932610, -0.197128382834229180, +-0.197079363703705630, -0.197030344080483700, -0.196981323964685870, -0.196932303356434770, -0.196883282255852890, -0.196834260663062810, -0.196785238578187080, -0.196736216001347390, +-0.196687192932668010, -0.196638169372270660, -0.196589145320277910, -0.196540120776812270, -0.196491095741996330, -0.196442070215952640, -0.196393044198802940, -0.196344017690671470, +-0.196294990691679970, -0.196245963201950980, -0.196196935221607080, -0.196147906750770870, -0.196098877789564860, -0.196049848338111680, -0.196000818396532990, -0.195951787964953130, +-0.195902757043493800, -0.195853725632277600, -0.195804693731427060, -0.195755661341064780, -0.195706628461313370, -0.195657595092295380, -0.195608561234132530, -0.195559526886949160, +-0.195510492050866960, -0.195461456726008510, -0.195412420912496440, -0.195363384610453330, -0.195314347820001730, -0.195265310541264280, -0.195216272774362680, -0.195167234519421280, +-0.195118195776561780, -0.195069156545906790, -0.195020116827578920, -0.194971076621700740, -0.194922035928394880, -0.194872994747783050, -0.194823953079989620, -0.194774910925136300, +-0.194725868283345700, -0.194676825154740440, -0.194627781539443100, -0.194578737437576310, -0.194529692849262690, -0.194480647774623950, -0.194431602213784470, -0.194382556166865980, +-0.194333509633991120, -0.194284462615282450, -0.194235415110862650, -0.194186367120854330, -0.194137318645379170, -0.194088269684561610, -0.194039220238523380, -0.193990170307387110, +-0.193941119891275410, -0.193892068990310890, -0.193843017604616200, -0.193793965734313980, -0.193744913379525980, -0.193695860540376550, -0.193646807216987490, -0.193597753409481380, +-0.193548699117980920, -0.193499644342608690, -0.193450589083487360, -0.193401533340738670, -0.193352477114487050, -0.193303420404854210, -0.193254363211962820, -0.193205305535935540, +-0.193156247376894990, -0.193107188734963800, -0.193058129610264670, -0.193009070002919340, -0.192960009913052180, -0.192910949340785010, -0.192861888286240480, -0.192812826749541200, +-0.192763764730809890, -0.192714702230169150, -0.192665639247741630, -0.192616575783649190, -0.192567511838016150, -0.192518447410964330, -0.192469382502616420, -0.192420317113095010, +-0.192371251242522830, -0.192322184891022540, -0.192273118058716750, -0.192224050745727320, -0.192174982952178640, -0.192125914678192480, -0.192076845923891540, -0.192027776689398490, +-0.191978706974836020, -0.191929636780326730, -0.191880566105992520, -0.191831494951957750, -0.191782423318344250, -0.191733351205274680, -0.191684278612871740, -0.191635205541258120, +-0.191586131990556460, -0.191537057960889490, -0.191487983452379000, -0.191438908465149410, -0.191389832999322550, -0.191340757055021130, -0.191291680632367790, -0.191242603731485240, +-0.191193526352496200, -0.191144448495522480, -0.191095370160688500, -0.191046291348116100, -0.190997212057927970, -0.190948132290246820, -0.190899052045195330, -0.190849971322896220, +-0.190800890123472150, -0.190751808447045010, -0.190702726293739220, -0.190653643663676600, -0.190604560556979890, -0.190555476973771760, -0.190506392914174950, -0.190457308378312150, +-0.190408223366305220, -0.190359137878278600, -0.190310051914354130, -0.190260965474654510, -0.190211878559302490, -0.190162791168420800, -0.190113703302132120, -0.190064614960559150, +-0.190015526143823800, -0.189966436852050500, -0.189917347085361120, -0.189868256843878370, -0.189819166127724980, -0.189770074937023660, -0.189720983271897150, -0.189671891132468180, +-0.189622798518858630, -0.189573705431192950, -0.189524611869592990, -0.189475517834181510, -0.189426423325081250, -0.189377328342414910, -0.189328232886305260, -0.189279136956875040, +-0.189230040554246080, -0.189180943678542910, -0.189131846329887390, -0.189082748508402230, -0.189033650214210200, -0.188984551447434060, -0.188935452208196550, -0.188886352496619500, +-0.188837252312827470, -0.188788151656942290, -0.188739050529086770, -0.188689948929383570, -0.188640846857955540, -0.188591744314925370, -0.188542641300415840, -0.188493537814548860, +-0.188444433857448880, -0.188395329429237810, -0.188346224530038440, -0.188297119159973490, -0.188248013319165770, -0.188198907007738000, -0.188149800225812070, -0.188100692973512530, +-0.188051585250961270, -0.188002477058281050, -0.187953368395594620, -0.187904259263024760, -0.187855149660694280, -0.187806039588725880, -0.187756929047241560, -0.187707818036365770, +-0.187658706556220410, -0.187609594606928330, -0.187560482188612240, -0.187511369301394950, -0.187462255945399230, -0.187413142120747000, -0.187364027827562780, -0.187314913065968510, +-0.187265797836086930, -0.187216682138040880, -0.187167565971953110, -0.187118449337946440, -0.187069332236143640, -0.187020214666666630, -0.186971096629639950, -0.186921978125185550, +-0.186872859153426190, -0.186823739714484680, -0.186774619808483840, -0.186725499435546420, -0.186676378595795280, -0.186627257289352310, -0.186578135516342060, -0.186529013276886480, +-0.186479890571108360, -0.186430767399130530, -0.186381643761075770, -0.186332519657066900, -0.186283395087226740, -0.186234270051677230, -0.186185144550542890, -0.186136018583945680, +-0.186086892152008470, -0.186037765254853990, -0.185988637892605110, -0.185939510065384640, -0.185890381773314520, -0.185841253016519330, -0.185792123795120970, -0.185742994109242330, +-0.185693863959006190, -0.185644733344535410, -0.185595602265952790, -0.185546470723381150, -0.185497338716942490, -0.185448206246761340, -0.185399073312959660, -0.185349939915660320, +-0.185300806054986110, -0.185251671731059890, -0.185202536944004510, -0.185153401693941900, -0.185104265980996660, -0.185055129805290740, -0.185005993166947020, -0.184956856066088300, +-0.184907718502837440, -0.184858580477317290, -0.184809441989650690, -0.184760303039959610, -0.184711163628368650, -0.184662023754999790, -0.184612883419975870, -0.184563742623419710, +-0.184514601365454220, -0.184465459646202230, -0.184416317465785680, -0.184367174824329240, -0.184318031721954880, -0.184268888158785420, -0.184219744134943740, -0.184170599650552690, +-0.184121454705735150, -0.184072309300614000, -0.184023163435311170, -0.183974017109951320, -0.183924870324656400, -0.183875723079549330, -0.183826575374752940, -0.183777427210390140, +-0.183728278586583750, -0.183679129503456660, -0.183629979961130870, -0.183580829959731020, -0.183531679499379100, -0.183482528580197950, -0.183433377202310510, -0.183384225365839590, +-0.183335073070908160, -0.183285920317638130, -0.183236767106154190, -0.183187613436578330, -0.183138459309033440, -0.183089304723642380, -0.183040149680528090, -0.182990994179813400, +-0.182941838221621240, -0.182892681806073630, -0.182843524933295140, -0.182794367603407860, -0.182745209816534690, -0.182696051572798470, -0.182646892872322110, -0.182597733715228530, +-0.182548574101640630, -0.182499414031680410, -0.182450253505472500, -0.182401092523138990, -0.182351931084802740, -0.182302769190586660, -0.182253606840613670, -0.182204444035006660, +-0.182155280773887650, -0.182106117057381330, -0.182056952885609720, -0.182007788258695710, -0.181958623176762230, -0.181909457639932190, -0.181860291648328540, -0.181811125202074130, +-0.181761958301291020, -0.181712790946103930, -0.181663623136634840, -0.181614454873006680, -0.181565286155342400, -0.181516116983764880, -0.181466947358397110, -0.181417777279361060, +-0.181368606746781460, -0.181319435760780330, -0.181270264321480630, -0.181221092429005250, -0.181171920083477160, -0.181122747285019260, -0.181073574033754490, -0.181024400329804910, +-0.180975226173295200, -0.180926051564347430, -0.180876876503084540, -0.180827700989629440, -0.180778525024105100, -0.180729348606634450, -0.180680171737340410, -0.180630994416345090, +-0.180581816643773150, -0.180532638419746650, -0.180483459744388590, -0.180434280617821850, -0.180385101040169420, -0.180335921011554240, -0.180286740532098370, -0.180237559601926530, +-0.180188378221160790, -0.180139196389924120, -0.180090014108339440, -0.180040831376529740, -0.179991648194617960, -0.179942464562727060, -0.179893280480979110, -0.179844095949498850, +-0.179794910968408330, -0.179745725537830550, -0.179696539657888450, -0.179647353328704990, -0.179598166550403170, -0.179548979323105930, -0.179499791646935360, -0.179450603522016170, +-0.179401414948470510, -0.179352225926421280, -0.179303036455991490, -0.179253846537304110, -0.179204656170482120, -0.179155465355647610, -0.179106274092925320, -0.179057082382437340, +-0.179007890224306630, -0.178958697618656240, -0.178909504565609080, -0.178860311065288160, -0.178811117117816470, -0.178761922723316090, -0.178712727881911810, -0.178663532593725690, +-0.178614336858880730, -0.178565140677499960, -0.178515944049706300, -0.178466746975622810, -0.178417549455371580, -0.178368351489077340, -0.178319153076862220, -0.178269954218849200, +-0.178220754915161320, -0.178171555165921540, -0.178122354971252890, -0.178073154331278320, -0.178023953246120030, -0.177974751715902710, -0.177925549740748510, -0.177876347320780420, +-0.177827144456121490, -0.177777941146894690, -0.177728737393223040, -0.177679533195229530, -0.177630328553036340, -0.177581123466768190, -0.177531917936547210, -0.177482711962496460, +-0.177433505544738940, -0.177384298683397640, -0.177335091378595600, -0.177285883630454940, -0.177236675439100460, -0.177187466804654280, -0.177138257727239460, -0.177089048206978960, +-0.177039838243995860, -0.176990627838413160, -0.176941416990353900, -0.176892205699940210, -0.176842993967296890, -0.176793781792546070, -0.176744569175810830, -0.176695356117214130, +-0.176646142616879050, -0.176596928674928630, -0.176547714291485860, -0.176498499466672950, -0.176449284200614680, -0.176400068493433180, -0.176350852345251500, -0.176301635756192700, +-0.176252418726379810, -0.176203201255935860, -0.176153983344983060, -0.176104764993646160, -0.176055546202047330, -0.176006326970309660, -0.175957107298556180, -0.175907887186909920, +-0.175858666635493930, -0.175809445644431290, -0.175760224213844160, -0.175711002343857340, -0.175661780034593010, -0.175612557286174230, -0.175563334098724040, -0.175514110472365560, +-0.175464886407221770, -0.175415661903414900, -0.175366436961069740, -0.175317211580308500, -0.175267985761254240, -0.175218759504029990, -0.175169532808758850, -0.175120305675563890, +-0.175071078104568150, -0.175021850095893860, -0.174972621649665820, -0.174923392766006210, -0.174874163445038120, -0.174824933686884620, -0.174775703491668790, -0.174726472859513700, +-0.174677241790542420, -0.174628010284877180, -0.174578778342642770, -0.174529545963961420, -0.174480313148956210, -0.174431079897750220, -0.174381846210466540, -0.174332612087228220, +-0.174283377528157510, -0.174234142533379240, -0.174184907103015600, -0.174135671237189680, -0.174086434936024600, -0.174037198199643420, -0.173987961028169240, -0.173938723421725170, +-0.173889485380433420, -0.173840246904418850, -0.173791007993803620, -0.173741768648710910, -0.173692528869263760, -0.173643288655585290, -0.173594048007798570, -0.173544806926026780, +-0.173495565410392070, -0.173446323461019320, -0.173397081078030760, -0.173347838261549510, -0.173298595011698640, -0.173249351328601310, -0.173200107212380610, -0.173150862663158740, +-0.173101617681060580, -0.173052372266208400, -0.173003126418725280, -0.172953880138734360, -0.172904633426358730, -0.172855386281721510, -0.172806138704945820, -0.172756890696153940, +-0.172707642255470670, -0.172658393383018300, -0.172609144078919970, -0.172559894343298770, -0.172510644176277820, -0.172461393577980270, -0.172412142548528350, -0.172362891088046980, +-0.172313639196658350, -0.172264386874485640, -0.172215134121651960, -0.172165880938280450, -0.172116627324494200, -0.172067373280416440, -0.172018118806169320, -0.171968863901877820, +-0.171919608567664140, -0.171870352803651430, -0.171821096609962860, -0.171771839986721520, -0.171722582934050600, -0.171673325452073230, -0.171624067540911670, -0.171574809200690790, +-0.171525550431532920, -0.171476291233561150, -0.171427031606898650, -0.171377771551668580, -0.171328511067994100, -0.171279250155997430, -0.171229988815803540, -0.171180727047534680, +-0.171131464851313970, -0.171082202227264640, -0.171032939175509770, -0.170983675696172570, -0.170934411789376180, -0.170885147455242890, -0.170835882693897570, -0.170786617505462590, +-0.170737351890061030, -0.170688085847816110, -0.170638819378850980, -0.170589552483288800, -0.170540285161252720, -0.170491017412865070, -0.170441749238250760, -0.170392480637532070, +-0.170343211610832160, -0.170293942158274230, -0.170244672279981470, -0.170195401976076990, -0.170146131246683150, -0.170096860091924850, -0.170047588511924420, -0.169998316506805000, +-0.169949044076689790, -0.169899771221701970, -0.169850497941964720, -0.169801224237601240, -0.169751950108733810, -0.169702675555487380, -0.169653400577984280, -0.169604125176347650, +-0.169554849350700730, -0.169505573101166680, -0.169456296427868690, -0.169407019330929080, -0.169357741810472810, -0.169308463866622180, -0.169259185499500390, -0.169209906709230640, +-0.169160627495936130, -0.169111347859740050, -0.169062067800765600, -0.169012787319135080, -0.168963506414973490, -0.168914225088403150, -0.168864943339547210, -0.168815661168528950, +-0.168766378575471500, -0.168717095560498130, -0.168667812123731140, -0.168618528265295470, -0.168569243985313500, -0.168519959283908420, -0.168470674161203450, -0.168421388617321780, +-0.168372102652386670, -0.168322816266521260, -0.168273529459847970, -0.168224242232491690, -0.168174954584574850, -0.168125666516220600, -0.168076378027552180, -0.168027089118692820, +-0.167977799789765740, -0.167928510040894150, -0.167879219872200420, -0.167829929283809520, -0.167780638275843800, -0.167731346848426470, -0.167682055001680790, -0.167632762735729970, +-0.167583470050697240, -0.167534176946705800, -0.167484883423878100, -0.167435589482339030, -0.167386295122210980, -0.167337000343617230, -0.167287705146680950, -0.167238409531525410, +-0.167189113498273870, -0.167139817047048640, -0.167090520177974740, -0.167041222891174570, -0.166991925186771330, -0.166942627064888270, -0.166893328525648640, -0.166844029569175710, +-0.166794730195592680, -0.166745430405021960, -0.166696130197588550, -0.166646829573414780, -0.166597528532623970, -0.166548227075339340, -0.166498925201684130, -0.166449622911781610, +-0.166400320205754150, -0.166351017083726770, -0.166301713545821850, -0.166252409592162640, -0.166203105222872430, -0.166153800438074430, -0.166104495237891950, -0.166055189622448220, +-0.166005883591865630, -0.165956577146269210, -0.165907270285781370, -0.165857963010525330, -0.165808655320624390, -0.165759347216201810, -0.165710038697380880, -0.165660729764283950, +-0.165611420417036080, -0.165562110655759650, -0.165512800480577980, -0.165463489891614270, -0.165414178888991850, -0.165364867472833990, -0.165315555643263950, -0.165266243400404160, +-0.165216930744379630, -0.165167617675312770, -0.165118304193326850, -0.165068990298545190, -0.165019675991091050, -0.164970361271087720, -0.164921046138658490, -0.164871730593925760, +-0.164822414637014610, -0.164773098268047400, -0.164723781487147420, -0.164674464294438020, -0.164625146690042440, -0.164575828674084020, -0.164526510246685990, -0.164477191407970850, +-0.164427872158063560, -0.164378552497086630, -0.164329232425163310, -0.164279911942416900, -0.164230591048970730, -0.164181269744948070, -0.164131948030471350, -0.164082625905665640, +-0.164033303370653360, -0.163983980425557840, -0.163934657070502370, -0.163885333305610230, -0.163836009131004770, -0.163786684546809310, -0.163737359553146220, -0.163688034150140630, +-0.163638708337914970, -0.163589382116592520, -0.163540055486296630, -0.163490728447150570, -0.163441400999277730, -0.163392073142800490, -0.163342744877843950, -0.163293416204530530, +-0.163244087122983580, -0.163194757633326410, -0.163145427735682360, -0.163096097430174720, -0.163046766716926860, -0.162997435596061200, -0.162948104067702800, -0.162898772131974180, +-0.162849439788998600, -0.162800107038899440, -0.162750773881800010, -0.162701440317823630, -0.162652106347092790, -0.162602771969732550, -0.162553437185865370, -0.162504101995614630, +-0.162454766399103610, -0.162405430396455660, -0.162356093987794160, -0.162306757173242420, -0.162257419952922920, -0.162208082326960740, -0.162158744295478360, -0.162109405858599090, +-0.162060067016446320, -0.162010727769143410, -0.161961388116813650, -0.161912048059580430, -0.161862707597566210, -0.161813366730896110, -0.161764025459692570, -0.161714683784078990, +-0.161665341704178680, -0.161615999220115020, -0.161566656332011370, -0.161517313039991090, -0.161467969344176620, -0.161418625244693140, -0.161369280741663070, -0.161319935835209820, +-0.161270590525456700, -0.161221244812527110, -0.161171898696544440, -0.161122552177631110, -0.161073205255912290, -0.161023857931510470, -0.160974510204549000, -0.160925162075151230, +-0.160875813543440580, -0.160826464609540390, -0.160777115273574050, -0.160727765535664040, -0.160678415395935470, -0.160629064854510870, -0.160579713911513630, -0.160530362567067100, +-0.160481010821294650, -0.160431658674319660, -0.160382306126264670, -0.160332953177254790, -0.160283599827412530, -0.160234246076861260, -0.160184891925724380, -0.160135537374125250, +-0.160086182422187310, -0.160036827070033890, -0.159987471317787540, -0.159938115165573380, -0.159888758613513950, -0.159839401661732610, -0.159790044310352760, -0.159740686559497800, +-0.159691328409291120, -0.159641969859855270, -0.159592610911315350, -0.159543251563793900, -0.159493891817414330, -0.159444531672300020, -0.159395171128574400, -0.159345810186360850, +-0.159296448845782760, -0.159247087106962670, -0.159197724970025740, -0.159148362435094500, -0.159098999502292370, -0.159049636171742730, -0.159000272443568990, -0.158950908317894570, +-0.158901543794842890, -0.158852178874536480, -0.158802813557100490, -0.158753447842657460, -0.158704081731330830, -0.158654715223243980, -0.158605348318520330, -0.158555981017283330, +-0.158506613319656380, -0.158457245225761990, -0.158407876735725400, -0.158358507849669090, -0.158309138567716530, -0.158259768889991130, -0.158210398816616280, -0.158161028347715450, +-0.158111657483411160, -0.158062286223828620, -0.158012914569090360, -0.157963542519319820, -0.157914170074640430, -0.157864797235175570, -0.157815424001048750, -0.157766050372383390, +-0.157716676349302000, -0.157667301931929790, -0.157617927120389360, -0.157568551914804070, -0.157519176315297410, -0.157469800321992810, -0.157420423935013740, -0.157371047154482720, +-0.157321669980524940, -0.157272292413262990, -0.157222914452820330, -0.157173536099320360, -0.157124157352886540, -0.157074778213642350, -0.157025398681711230, -0.156976018757215700, +-0.156926638440281010, -0.156877257731029730, -0.156827876629585310, -0.156778495136071200, -0.156729113250610840, -0.156679730973327710, -0.156630348304344360, -0.156580965243786040, +-0.156531581791775290, -0.156482197948435570, -0.156432813713890400, -0.156383429088263170, -0.156334044071677340, -0.156284658664256420, -0.156235272866122990, -0.156185886677402240, +-0.156136500098216810, -0.156087113128690090, -0.156037725768945590, -0.155988338019106780, -0.155938949879297130, -0.155889561349640100, -0.155840172430258300, -0.155790783121276950, +-0.155741393422818620, -0.155692003335006820, -0.155642612857965020, -0.155593221991816660, -0.155543830736685260, -0.155494439092693420, -0.155445047059966340, -0.155395654638626670, +-0.155346261828797850, -0.155296868630603350, -0.155247475044166690, -0.155198081069611360, -0.155148686707060830, -0.155099291956637690, -0.155049896818467200, -0.155000501292671980, +-0.154951105379375480, -0.154901709078701240, -0.154852312390772740, -0.154802915315713410, -0.154753517853646830, -0.154704120004695580, -0.154654721768984900, -0.154605323146637410, +-0.154555924137776610, -0.154506524742526020, -0.154457124961009080, -0.154407724793349350, -0.154358324239669440, -0.154308923300094600, -0.154259521974747430, -0.154210120263751470, +-0.154160718167230200, -0.154111315685307140, -0.154061912818105800, -0.154012509565749660, -0.153963105928361380, -0.153913701906066210, -0.153864297498986780, -0.153814892707246630, +-0.153765487530969220, -0.153716081970278080, -0.153666676025296770, -0.153617269696147890, -0.153567862982956690, -0.153518455885845840, -0.153469048404938860, -0.153419640540359250, +-0.153370232292230540, -0.153320823660676260, -0.153271414645819920, -0.153222005247784150, -0.153172595466694260, -0.153123185302672880, -0.153073774755843520, -0.153024363826329750, +-0.152974952514255050, -0.152925540819742970, -0.152876128742917030, -0.152826716283899900, -0.152777303442816870, -0.152727890219790580, -0.152678476614944550, -0.152629062628402340, +-0.152579648260287470, -0.152530233510723480, -0.152480818379833020, -0.152431402867741400, -0.152381986974571280, -0.152332570700446170, -0.152283154045489640, -0.152233737009825230, +-0.152184319593576510, -0.152134901796866950, -0.152085483619819270, -0.152036065062558760, -0.151986646125208070, -0.151937226807890790, -0.151887807110730440, -0.151838387033850550, +-0.151788966577374700, -0.151739545741426450, -0.151690124526128460, -0.151640702931606000, -0.151591280957981830, -0.151541858605379410, -0.151492435873922390, -0.151443012763734260, +-0.151393589274938590, -0.151344165407658080, -0.151294741162018020, -0.151245316538141130, -0.151195891536150930, -0.151146466156171030, -0.151097040398324920, -0.151047614262736250, +-0.150998187749528530, -0.150948760858824440, -0.150899333590749360, -0.150849905945425910, -0.150800477922977740, -0.150751049523528330, -0.150701620747201340, -0.150652191594120270, +-0.150602762064407840, -0.150553332158189390, -0.150503901875587630, -0.150454471216726090, -0.150405040181728370, -0.150355608770718070, -0.150306176983818730, -0.150256744821153950, +-0.150207312282846450, -0.150157879369021530, -0.150108446079801920, -0.150059012415311170, -0.150009578375672910, -0.149960143961010710, -0.149910709171448140, -0.149861274007108800, +-0.149811838468115380, -0.149762402554593280, -0.149712966266665140, -0.149663529604454610, -0.149614092568085220, -0.149564655157680640, -0.149515217373364400, -0.149465779215259250, +-0.149416340683490520, -0.149366901778180930, -0.149317462499454100, -0.149268022847433600, -0.149218582822243070, -0.149169142424006060, -0.149119701652846190, -0.149070260508886190, +-0.149020818992251450, -0.148971377103064630, -0.148921934841449360, -0.148872492207529270, -0.148823049201427940, -0.148773605823269010, -0.148724162073176040, -0.148674717951271800, +-0.148625273457681640, -0.148575828592528300, -0.148526383355935380, -0.148476937748026510, -0.148427491768925310, -0.148378045418755350, -0.148328598697639400, -0.148279151605702850, +-0.148229704143068410, -0.148180256309859730, -0.148130808106200380, -0.148081359532214020, -0.148031910588024260, -0.147982461273754720, -0.147933011589528180, -0.147883561535469940, +-0.147834111111702830, -0.147784660318350440, -0.147735209155536400, -0.147685757623384320, -0.147636305722017860, -0.147586853451559750, -0.147537400812135400, -0.147487947803867540, +-0.147438494426879780, -0.147389040681295820, -0.147339586567239250, -0.147290132084833710, -0.147240677234202870, -0.147191222015469410, -0.147141766428758810, -0.147092310474193770, +-0.147042854151897970, -0.146993397461995020, -0.146943940404608590, -0.146894482979862300, -0.146845025187879810, -0.146795567028783880, -0.146746108502699900, -0.146696649609750650, +-0.146647190350059770, -0.146597730723750930, -0.146548270730947760, -0.146498810371773920, -0.146449349646352170, -0.146399888554807900, -0.146350427097263950, -0.146300965273843900, +-0.146251503084671440, -0.146202040529870240, -0.146152577609563930, -0.146103114323876180, -0.146053650672929770, -0.146004186656850110, -0.145954722275759950, -0.145905257529783030, +-0.145855792419042950, -0.145806326943663380, -0.145756861103768010, -0.145707394899480480, -0.145657928330923560, -0.145608461398222730, -0.145558994101500750, -0.145509526440881250, +-0.145460058416487960, -0.145410590028444530, -0.145361121276874620, -0.145311652161901010, -0.145262182683649150, -0.145212712842241850, -0.145163242637802750, -0.145113772070455560, +-0.145064301140323950, -0.145014829847531560, -0.144965358192202100, -0.144915886174458390, -0.144866413794425830, -0.144816941052227230, -0.144767467947986280, -0.144717994481826650, +-0.144668520653872030, -0.144619046464246140, -0.144569571913071740, -0.144520097000474270, -0.144470621726576600, -0.144421146091502330, -0.144371670095375220, -0.144322193738318920, +-0.144272717020457160, -0.144223239941913580, -0.144173762502811050, -0.144124284703274960, -0.144074806543428190, -0.144025328023394380, -0.143975849143297250, -0.143926369903260520, +-0.143876890303407860, -0.143827410343862950, -0.143777930024748650, -0.143728449346190420, -0.143678968308311030, -0.143629486911234260, -0.143580005155083760, -0.143530523039983230, +-0.143481040566056400, -0.143431557733426080, -0.143382074542217770, -0.143332590992554270, -0.143283107084559270, -0.143233622818356530, -0.143184138194069720, -0.143134653211822560, +-0.143085167871738780, -0.143035682173941190, -0.142986196118555260, -0.142936709705703880, -0.142887222935510680, -0.142837735808099440, -0.142788248323593880, -0.142738760482117670, +-0.142689272283794580, -0.142639783728747440, -0.142590294817101700, -0.142540805548980220, -0.142491315924506730, -0.142441825943804940, -0.142392335606998630, -0.142342844914211420, +-0.142293353865566270, -0.142243862461188590, -0.142194370701201250, -0.142144878585728000, -0.142095386114892530, -0.142045893288818610, -0.141996400107629960, -0.141946906571450320, +-0.141897412680402510, -0.141847918434612060, -0.141798423834201800, -0.141748928879295490, -0.141699433570016850, -0.141649937906489640, -0.141600441888837580, -0.141550945517183530, +-0.141501448791653020, -0.141451951712368850, -0.141402454279454830, -0.141352956493034670, -0.141303458353232100, -0.141253959860170920, -0.141204461013974820, -0.141154961814766670, +-0.141105462262672010, -0.141055962357813700, -0.141006462100315480, -0.140956961490301120, -0.140907460527894320, -0.140857959213218890, -0.140808457546398590, -0.140758955527556240, +-0.140709453156817380, -0.140659950434304880, -0.140610447360142500, -0.140560943934454010, -0.140511440157363170, -0.140461936028993730, -0.140412431549468560, -0.140362926718913180, +-0.140313421537450520, -0.140263916005204270, -0.140214410122298240, -0.140164903888856190, -0.140115397305001890, -0.140065890370859090, -0.140016383086550680, -0.139966875452202180, +-0.139917367467936510, -0.139867859133877420, -0.139818350450148680, -0.139768841416874040, -0.139719332034177330, -0.139669822302182280, -0.139620312221011790, -0.139570801790791400, +-0.139521291011644010, -0.139471779883693390, -0.139422268407063320, -0.139372756581877560, -0.139323244408259940, -0.139273731886333320, -0.139224219016223260, -0.139174705798052630, +-0.139125192231945250, -0.139075678318024860, -0.139026164056415300, -0.138976649447240340, -0.138927134490623740, -0.138877619186688420, -0.138828103535559970, -0.138778587537361220, +-0.138729071192216000, -0.138679554500248130, -0.138630037461581370, -0.138580520076339500, -0.138531002344645440, -0.138481484266624770, -0.138431965842400390, -0.138382447072096100, +-0.138332927955835680, -0.138283408493742960, -0.138233888685941690, -0.138184368532555720, -0.138134848033707960, -0.138085327189523930, -0.138035806000126600, -0.137986284465639760, +-0.137936762586187200, -0.137887240361892730, -0.137837717792880150, -0.137788194879272410, -0.137738671621195070, -0.137689148018771050, -0.137639624072124130, -0.137590099781378180, +-0.137540575146656960, -0.137491050168084330, -0.137441524845784060, -0.137391999179879100, -0.137342473170495030, -0.137292946817754750, -0.137243420121782120, -0.137193893082700940, +-0.137144365700635010, -0.137094837975708210, -0.137045309908044280, -0.136995781497766200, -0.136946252744999550, -0.136896723649867270, -0.136847194212493170, -0.136797664433001090, +-0.136748134311514860, -0.136698603848158300, -0.136649073043055210, -0.136599541896328560, -0.136550010408103940, -0.136500478578504280, -0.136450946407653460, -0.136401413895675230, +-0.136351881042693500, -0.136302347848832050, -0.136252814314213850, -0.136203280438964510, -0.136153746223206950, -0.136104211667065020, -0.136054676770662570, -0.136005141534123440, +-0.135955605957571450, -0.135906070041130450, -0.135856533784923380, -0.135806997189075850, -0.135757460253710850, -0.135707922978952210, -0.135658385364923720, -0.135608847411749310, +-0.135559309119552750, -0.135509770488457050, -0.135460231518587800, -0.135410692210067960, -0.135361152563021420, -0.135311612577571960, -0.135262072253843510, -0.135212531591959840, +-0.135162990592044870, -0.135113449254221530, -0.135063907578615440, -0.135014365565349600, -0.134964823214547840, -0.134915280526334030, -0.134865737500832000, -0.134816194138165650, +-0.134766650438457920, -0.134717106401834430, -0.134667562028418200, -0.134618017318333030, -0.134568472271702850, -0.134518926888651500, -0.134469381169302790, -0.134419835113780670, +-0.134370288722208050, -0.134320741994710590, -0.134271194931411290, -0.134221647532433990, -0.134172099797902590, -0.134122551727940940, -0.134073003322672880, -0.134023454582222340, +-0.133973905506712290, -0.133924356096268320, -0.133874806351013480, -0.133825256271071640, -0.133775705856566650, -0.133726155107622370, -0.133676604024362740, -0.133627052606911570, +-0.133577500855391910, -0.133527948769929380, -0.133478396350646960, -0.133428843597668540, -0.133379290511118050, -0.133329737091119310, -0.133280183337796230, -0.133230629251271800, +-0.133181074831671690, -0.133131520079118880, -0.133081964993737280, -0.133032409575650770, -0.132982853824983230, -0.132933297741858580, -0.132883741326400660, -0.132834184578732500, +-0.132784627498979790, -0.132735070087265480, -0.132685512343713510, -0.132635954268447760, -0.132586395861592130, -0.132536837123270500, -0.132487278053605880, -0.132437718652723970, +-0.132388158920747760, -0.132338598857801140, -0.132289038464008020, -0.132239477739492320, -0.132189916684377930, -0.132140355298788730, -0.132090793582847780, -0.132041231536680710, +-0.131991669160410580, -0.131942106454161270, -0.131892543418056700, -0.131842980052220750, -0.131793416356777350, -0.131743852331849540, -0.131694287977563000, -0.131644723294040730, +-0.131595158281406640, -0.131545592939784660, -0.131496027269298680, -0.131446461270072650, -0.131396894942230450, -0.131347328285895150, -0.131297761301192420, -0.131248193988245250, +-0.131198626347177630, -0.131149058378113440, -0.131099490081176580, -0.131049921456491030, -0.131000352504180660, -0.130950783224368510, -0.130901213617180300, -0.130851643682739050, +-0.130802073421168700, -0.130752502832593150, -0.130702931917136360, -0.130653360674922230, -0.130603789106074700, -0.130554217210716830, -0.130504644988974290, -0.130455072440970130, +-0.130405499566828290, -0.130355926366672700, -0.130306352840627300, -0.130256778988816020, -0.130207204811361920, -0.130157630308390670, -0.130108055480025350, -0.130058480326389890, +-0.130008904847608240, -0.129959329043804310, -0.129909752915102070, -0.129860176461625450, -0.129810599683497510, -0.129761022580843930, -0.129711445153787820, -0.129661867402453080, +-0.129612289326963700, -0.129562710927443560, -0.129513132204016670, -0.129463553156806050, -0.129413973785937410, -0.129364394091533890, -0.129314814073719340, -0.129265233732617780, +-0.129215653068353110, -0.129166072081049330, -0.129116490770830370, -0.129066909137819290, -0.129017327182141820, -0.128967744903921040, -0.128918162303280880, -0.128868579380345320, +-0.128818996135238340, -0.128769412568083830, -0.128719828679004940, -0.128670244468127330, -0.128620659935574140, -0.128571075081469280, -0.128521489905936730, -0.128471904409100470, +-0.128422318591084440, -0.128372732452012610, -0.128323145992008090, -0.128273559211196570, -0.128223972109701130, -0.128174384687645780, -0.128124796945154470, -0.128075208882351160, +-0.128025620499359840, -0.127976031796304480, -0.127926442773308140, -0.127876853430496570, -0.127827263767992890, -0.127777673785921030, -0.127728083484404980, -0.127678492863568720, +-0.127628901923536240, -0.127579310664431510, -0.127529719086377610, -0.127480127189500300, -0.127430534973922680, -0.127380942439768720, -0.127331349587162380, -0.127281756416227710, +-0.127232162927088610, -0.127182569119868250, -0.127132974994692340, -0.127083380551683970, -0.127033785790967160, -0.126984190712665900, -0.126934595316904150, -0.126884999603805920, +-0.126835403573495180, -0.126785807226095060, -0.126736210561731290, -0.126686613580527020, -0.126637016282606210, -0.126587418668092840, -0.126537820737110920, -0.126488222489784470, +-0.126438623926236560, -0.126389025046593000, -0.126339425850976850, -0.126289826339512160, -0.126240226512322890, -0.126190626369533040, -0.126141025911266660, -0.126091425137647680, +-0.126041824048799270, -0.125992222644847190, -0.125942620925914540, -0.125893018892125340, -0.125843416543603620, -0.125793813880473340, -0.125744210902858510, -0.125694607610882280, +-0.125645004004670410, -0.125595400084346030, -0.125545795850033170, -0.125496191301855800, -0.125446586439937950, -0.125396981264403630, -0.125347375775376880, -0.125297769972980780, +-0.125248163857341170, -0.125198557428581130, -0.125148950686824690, -0.125099343632195910, -0.125049736264818720, -0.125000128584817210, -0.124950520592315400, -0.124900912287436380, +-0.124851303670305970, -0.124801694741047310, -0.124752085499784410, -0.124702475946641290, -0.124652866081741980, -0.124603255905210500, -0.124553645417170000, -0.124504034617746270, +-0.124454423507062470, -0.124404812085242590, -0.124355200352410680, -0.124305588308690790, -0.124255975954206910, -0.124206363289083090, -0.124156750313442490, -0.124107137027410900, +-0.124057523431111450, -0.124007909524668210, -0.123958295308205180, -0.123908680781846430, -0.123859065945715950, -0.123809450799937830, -0.123759835344635190, -0.123710219579933850, +-0.123660603505956960, -0.123610987122828560, -0.123561370430672700, -0.123511753429613400, -0.123462136119774720, -0.123412518501279820, -0.123362900574254500, -0.123313282338821940, +-0.123263663795106170, -0.123214044943231240, -0.123164425783321190, -0.123114806315500090, -0.123065186539891970, -0.123015566456620000, -0.122965946065809990, -0.122916325367585120, +-0.122866704362069440, -0.122817083049386990, -0.122767461429661840, -0.122717839503018040, -0.122668217269578740, -0.122618594729469800, -0.122568971882814360, -0.122519348729736510, +-0.122469725270360260, -0.122420101504809710, -0.122370477433208920, -0.122320853055681920, -0.122271228372351910, -0.122221603383344720, -0.122171978088783490, -0.122122352488792340, +-0.122072726583495310, -0.122023100373016460, -0.121973473857479860, -0.121923847037009580, -0.121874219911728800, -0.121824592481763330, -0.121774964747236400, -0.121725336708272060, +-0.121675708364994380, -0.121626079717527410, -0.121576450765995260, -0.121526821510521090, -0.121477191951230750, -0.121427562088247430, -0.121377931921695200, -0.121328301451698150, +-0.121278670678380340, -0.121229039601865860, -0.121179408222278780, -0.121129776539742300, -0.121080144554382250, -0.121030512266321850, -0.120980879675685160, -0.120931246782596270, +-0.120881613587179280, -0.120831980089558240, -0.120782346289857250, -0.120732712188199520, -0.120683077784710880, -0.120633443079514550, -0.120583808072734620, -0.120534172764495170, +-0.120484537154920290, -0.120434901244134060, -0.120385265032259690, -0.120335628519423050, -0.120285991705747330, -0.120236354591356630, -0.120186717176375050, -0.120137079460926680, +-0.120087441445135600, -0.120037803129125930, -0.119988164513020860, -0.119938525596946260, -0.119888886381025350, -0.119839246865382230, -0.119789607050140990, -0.119739966935425730, +-0.119690326521360550, -0.119640685808068680, -0.119591044795675960, -0.119541403484305640, -0.119491761874081820, -0.119442119965128590, -0.119392477757570060, -0.119342835251530330, +-0.119293192447133520, -0.119243549344502830, -0.119193905943764170, -0.119144262245040720, -0.119094618248456640, -0.119044973954136000, -0.118995329362202930, -0.118945684472781530, +-0.118896039285995930, -0.118846393801969350, -0.118796748020827670, -0.118747101942694100, -0.118697455567692790, -0.118647808895947840, -0.118598161927583360, -0.118548514662723480, +-0.118498867101491430, -0.118449219244013110, -0.118399571090411730, -0.118349922640811410, -0.118300273895336300, -0.118250624854110500, -0.118200975517258140, -0.118151325884903350, +-0.118101675957169350, -0.118052025734182040, -0.118002375216064670, -0.117952724402941370, -0.117903073294936250, -0.117853421892173450, -0.117803770194777100, -0.117754118202871310, +-0.117704465916579350, -0.117654813336027110, -0.117605160461337840, -0.117555507292635660, -0.117505853830044720, -0.117456200073689130, -0.117406546023693060, -0.117356891680179740, +-0.117307237043275060, -0.117257582113102300, -0.117207926889785580, -0.117158271373449040, -0.117108615564216830, -0.117058959462213060, -0.117009303067561910, -0.116959646380386630, +-0.116909989400813100, -0.116860332128964600, -0.116810674564965260, -0.116761016708939250, -0.116711358561010680, -0.116661700121303740, -0.116612041389941650, -0.116562382367050340, +-0.116512723052753080, -0.116463063447174000, -0.116413403550437280, -0.116363743362667030, -0.116314082883987440, -0.116264422114522630, -0.116214761054395890, -0.116165099703733120, +-0.116115438062657620, -0.116065776131293500, -0.116016113909764960, -0.115966451398196130, -0.115916788596711170, -0.115867125505434240, -0.115817462124488610, -0.115767798454000200, +-0.115718134494092310, -0.115668470244889080, -0.115618805706514670, -0.115569140879093240, -0.115519475762748970, -0.115469810357605120, -0.115420144663787640, -0.115370478681419780, +-0.115320812410625740, -0.115271145851529660, -0.115221479004255710, -0.115171811868928070, -0.115122144445670900, -0.115072476734607480, -0.115022808735863760, -0.114973140449563010, +-0.114923471875829420, -0.114873803014787140, -0.114824133866560360, -0.114774464431273250, -0.114724794709049960, -0.114675124700013810, -0.114625454404290730, -0.114575783822004020, +-0.114526112953277840, -0.114476441798236390, -0.114426770357003830, -0.114377098629704340, -0.114327426616461230, -0.114277754317400430, -0.114228081732645250, -0.114178408862319860, +-0.114128735706548450, -0.114079062265455190, -0.114029388539164290, -0.113979714527799910, -0.113930040231485370, -0.113880365650346610, -0.113830690784506930, -0.113781015634090530, +-0.113731340199221580, -0.113681664480024290, -0.113631988476622830, -0.113582312189140530, -0.113532635617703310, -0.113482958762434510, -0.113433281623458320, -0.113383604200898940, +-0.113333926494880530, -0.113284248505527300, -0.113234570232963460, -0.113184891677312300, -0.113135212838699800, -0.113085533717249280, -0.113035854313084910, -0.112986174626330910, +-0.112936494657111470, -0.112886814405550790, -0.112837133871773090, -0.112787453055901650, -0.112737771958062480, -0.112688090578378880, -0.112638408916975030, -0.112588726973975180, +-0.112539044749503510, -0.112489362243684220, -0.112439679456640660, -0.112389996388498770, -0.112340313039381880, -0.112290629409414210, -0.112240945498719980, -0.112191261307423380, +-0.112141576835648630, -0.112091892083519940, -0.112042207051160620, -0.111992521738696680, -0.111942836146251430, -0.111893150273949100, -0.111843464121913890, -0.111793777690270020, +-0.111744090979141700, -0.111694403988653160, -0.111644716718927710, -0.111595029170091370, -0.111545341342267440, -0.111495653235580180, -0.111445964850153780, -0.111396276186112450, +-0.111346587243580440, -0.111296898022681080, -0.111247208523540360, -0.111197518746281630, -0.111147828691029090, -0.111098138357906970, -0.111048447747039520, -0.110998756858550940, +-0.110949065692565480, -0.110899374249206460, -0.110849682528599890, -0.110799990530869110, -0.110750298256138370, -0.110700605704531870, -0.110650912876173860, -0.110601219771188570, +-0.110551526389699340, -0.110501832731832190, -0.110452138797710440, -0.110402444587458360, -0.110352750101200160, -0.110303055339060080, -0.110253360301162380, -0.110203664987631260, +-0.110153969398590110, -0.110104273534164910, -0.110054577394479030, -0.110004880979656700, -0.109955184289822180, -0.109905487325099690, -0.109855790085613480, -0.109806092571487800, +-0.109756394782846000, -0.109706696719814100, -0.109656998382515470, -0.109607299771074320, -0.109557600885614950, -0.109507901726261560, -0.109458202293138410, -0.109408502586368870, +-0.109358802606078970, -0.109309102352392070, -0.109259401825432400, -0.109209701025324220, -0.109159999952191790, -0.109110298606159370, -0.109060596987351200, -0.109010895095890650, +-0.108961192931903760, -0.108911490495513870, -0.108861787786845260, -0.108812084806022180, -0.108762381553168890, -0.108712678028409640, -0.108662974231868710, -0.108613270163669450, +-0.108563565823937900, -0.108513861212797440, -0.108464156330372320, -0.108414451176786820, -0.108364745752165180, -0.108315040056631670, -0.108265334090309700, -0.108215627853325250, +-0.108165921345801750, -0.108116214567863440, -0.108066507519634590, -0.108016800201239480, -0.107967092612802370, -0.107917384754447520, -0.107867676626298330, -0.107817968228480830, +-0.107768259561118410, -0.107718550624335340, -0.107668841418255890, -0.107619131943004350, -0.107569422198704970, -0.107519712185481150, -0.107470001903458940, -0.107420291352761710, +-0.107370580533513770, -0.107320869445839360, -0.107271158089862800, -0.107221446465708330, -0.107171734573500250, -0.107122022413361940, -0.107072309985419470, -0.107022597289796210, +-0.106972884326616470, -0.106923171096004520, -0.106873457598084640, -0.106823743832981110, -0.106774029800818220, -0.106724315501719390, -0.106674600935810630, -0.106624886103215380, +-0.106575171004057920, -0.106525455638462520, -0.106475740006553490, -0.106426024108455100, -0.106376307944290770, -0.106326591514186570, -0.106276874818265880, -0.106227157856653000, +-0.106177440629472220, -0.106127723136847850, -0.106078005378904160, -0.106028287355765470, -0.105978569067555180, -0.105928850514399330, -0.105879131696421370, -0.105829412613745580, +-0.105779693266496260, -0.105729973654797690, -0.105680253778774210, -0.105630533638550090, -0.105580813234248740, -0.105531092565996240, -0.105481371633916020, -0.105431650438132370, +-0.105381928978769590, -0.105332207255951990, -0.105282485269803870, -0.105232763020448660, -0.105183040508012420, -0.105133317732618580, -0.105083594694391440, -0.105033871393455320, +-0.104984147829934520, -0.104934424003953350, -0.104884699915636120, -0.104834975565106250, -0.104785250952489830, -0.104735526077910280, -0.104685800941491940, -0.104636075543359060, +-0.104586349883636020, -0.104536623962447090, -0.104486897779915710, -0.104437171336167990, -0.104387444631327330, -0.104337717665518050, -0.104287990438864500, -0.104238262951490950, +-0.104188535203521750, -0.104138807195081210, -0.104089078926292780, -0.104039350397282530, -0.103989621608173900, -0.103939892559091220, -0.103890163250158800, -0.103840433681500990, +-0.103790703853242090, -0.103740973765506410, -0.103691243418417430, -0.103641512812101220, -0.103591781946681240, -0.103542050822281790, -0.103492319439027220, -0.103442587797041850, +-0.103392855896450020, -0.103343123737375160, -0.103293391319943360, -0.103243658644278090, -0.103193925710503680, -0.103144192518744460, -0.103094459069124750, -0.103044725361768900, +-0.102994991396801220, -0.102945257174345190, -0.102895522694526900, -0.102845787957469810, -0.102796052963298230, -0.102746317712136530, -0.102696582204109040, -0.102646846439340090, +-0.102597110417953150, -0.102547374140074300, -0.102497637605827030, -0.102447900815335650, -0.102398163768724530, -0.102348426466118000, -0.102298688907640410, -0.102248951093416090, +-0.102199213023568510, -0.102149474698223770, -0.102099736117505350, -0.102049997281537600, -0.102000258190444850, -0.101950518844351450, -0.101900779243381760, -0.101851039387660120, +-0.101801299277309990, -0.101751558912457500, -0.101701818293226120, -0.101652077419740190, -0.101602336292124060, -0.101552594910502100, -0.101502853274998650, -0.101453111385737180, +-0.101403369242843820, -0.101353626846442030, -0.101303884196656170, -0.101254141293610610, -0.101204398137429690, -0.101154654728237790, -0.101104911066159240, -0.101055167151317530, +-0.101005422983838790, -0.100955678563846480, -0.100905933891464970, -0.100856188966818650, -0.100806443790031840, -0.100756698361228930, -0.100706952680533380, -0.100657206748071340, +-0.100607460563966290, -0.100557714128342570, -0.100507967441324580, -0.100458220503036650, -0.100408473313603200, -0.100358725873148550, -0.100308978181796200, -0.100259230239672290, +-0.100209482046900310, -0.100159733603604610, -0.100109984909909590, -0.100060235965939600, -0.100010486771819030, -0.099960737327672244, -0.099910987633622717, -0.099861237689796614, +-0.099811487496317422, -0.099761737053309499, -0.099711986360897231, -0.099662235419205006, -0.099612484228357195, -0.099562732788477284, -0.099512981099691436, -0.099463229162123121, +-0.099413476975896739, -0.099363724541136664, -0.099313971857967281, -0.099264218926512965, -0.099214465746898101, -0.099164712319246187, -0.099114958643683387, -0.099065204720333172, +-0.099015450549319955, -0.098965696130768124, -0.098915941464802037, -0.098866186551546095, -0.098816431391124698, -0.098766675983661331, -0.098716920329282157, -0.098667164428110687, +-0.098617408280271310, -0.098567651885888397, -0.098517895245086362, -0.098468138357989593, -0.098418381224721602, -0.098368623845408523, -0.098318866220173898, -0.098269108349142098, +-0.098219350232437538, -0.098169591870184592, -0.098119833262507672, -0.098070074409531166, -0.098020315311378586, -0.097970555968176110, -0.097920796380047248, -0.097871036547116388, +-0.097821276469507931, -0.097771516147346291, -0.097721755580755867, -0.097671994769860160, -0.097622233714785345, -0.097572472415654962, -0.097522710872593385, -0.097472949085725027, +-0.097423187055174304, -0.097373424781065615, -0.097323662263523361, -0.097273899502671082, -0.097224136498634914, -0.097174373251538423, -0.097124609761505984, -0.097074846028662037, +-0.097025082053130970, -0.096975317835037184, -0.096925553374505119, -0.096875788671658289, -0.096826023726622856, -0.096776258539522375, -0.096726493110481246, -0.096676727439623883, +-0.096626961527074701, -0.096577195372958113, -0.096527428977397647, -0.096477662340519507, -0.096427895462447205, -0.096378128343305169, -0.096328360983217801, -0.096278593382309541, +-0.096228825540704790, -0.096179057458527978, -0.096129289135902643, -0.096079520572954963, -0.096029751769808491, -0.095979982726587629, -0.095930213443416817, -0.095880443920420458, +-0.095830674157723006, -0.095780904155448862, -0.095731133913721581, -0.095681363432667338, -0.095631592712409688, -0.095581821753073060, -0.095532050554781880, -0.095482279117660565, +-0.095432507441833556, -0.095382735527424392, -0.095332963374559279, -0.095283190983361757, -0.095233418353956253, -0.095183645486467211, -0.095133872381019058, -0.095084099037736208, +-0.095034325456743118, -0.094984551638163342, -0.094934777582123056, -0.094885003288745828, -0.094835228758156101, -0.094785453990478288, -0.094735678985836846, -0.094685903744356217, +-0.094636128266159941, -0.094586352551374223, -0.094536576600122615, -0.094486800412529576, -0.094437023988719532, -0.094387247328816939, -0.094337470432946213, -0.094287693301231823, +-0.094237915933797309, -0.094188138330768889, -0.094138360492270132, -0.094088582418425465, -0.094038804109359345, -0.093989025565196213, -0.093939246786060512, -0.093889467772076698, +-0.093839688523368339, -0.093789909040061625, -0.093740129322280152, -0.093690349370148363, -0.093640569183790684, -0.093590788763331587, -0.093541008108895526, -0.093491227220606057, +-0.093441446098589398, -0.093391664742969130, -0.093341883153869695, -0.093292101331415550, -0.093242319275731164, -0.093192536986940966, -0.093142754465169439, -0.093092971710540137, +-0.093043188723179279, -0.092993405503210461, -0.092943622050758123, -0.092893838365946738, -0.092844054448900759, -0.092794270299744630, -0.092744485918602834, -0.092694701305598939, +-0.092644916460859178, -0.092595131384507118, -0.092545346076667229, -0.092495560537463981, -0.092445774767021829, -0.092395988765465245, -0.092346202532917795, -0.092296416069505727, +-0.092246629375352621, -0.092196842450582947, -0.092147055295321162, -0.092097267909691735, -0.092047480293819137, -0.091997692447827850, -0.091947904371841443, -0.091898116065986149, +-0.091848327530385576, -0.091798538765164181, -0.091748749770446433, -0.091698960546356817, -0.091649171093019802, -0.091599381410558969, -0.091549591499100580, -0.091499801358768201, +-0.091450010989686317, -0.091400220391979412, -0.091350429565771940, -0.091300638511188414, -0.091250847228353291, -0.091201055717390150, -0.091151263978425268, -0.091101472011582224, +-0.091051679816985490, -0.091001887394759562, -0.090952094745028925, -0.090902301867918034, -0.090852508763551401, -0.090802715432052608, -0.090752921873547915, -0.090703128088160917, +-0.090653334076016098, -0.090603539837237942, -0.090553745371950933, -0.090503950680279555, -0.090454155762347430, -0.090404360618280791, -0.090354565248203261, -0.090304769652239311, +-0.090254973830513438, -0.090205177783150126, -0.090155381510273871, -0.090105585012009173, -0.090055788288479613, -0.090005991339811478, -0.089956194166128350, -0.089906396767554755, +-0.089856599144215163, -0.089806801296234057, -0.089757003223735962, -0.089707204926845363, -0.089657406405685855, -0.089607607660383726, -0.089557808691062571, -0.089508009497846902, +-0.089458210080861203, -0.089408410440229985, -0.089358610576077732, -0.089308810488528081, -0.089259010177707279, -0.089209209643738949, -0.089159408886747601, -0.089109607906857721, +-0.089059806704193833, -0.089010005278880422, -0.088960203631041998, -0.088910401760802185, -0.088860599668287257, -0.088810797353620824, -0.088760994816927397, -0.088711192058331473, +-0.088661389077957578, -0.088611585875930210, -0.088561782452372992, -0.088511978807412212, -0.088462174941171479, -0.088412370853775304, -0.088362566545348201, -0.088312762016014679, +-0.088262957265899264, -0.088213152295126454, -0.088163347103819872, -0.088113541692105807, -0.088063736060107894, -0.088013930207950633, -0.087964124135758548, -0.087914317843656165, +-0.087864511331767967, -0.087814704600218507, -0.087764897649131396, -0.087715090478632921, -0.087665283088846732, -0.087615475479897315, -0.087565667651909221, -0.087515859605006963, +-0.087466051339315051, -0.087416242854957124, -0.087366434152059483, -0.087316625230745751, -0.087266816091140453, -0.087217006733368116, -0.087167197157553264, -0.087117387363820423, +-0.087067577352294104, -0.087017767123097972, -0.086967956676358288, -0.086918146012198730, -0.086868335130743796, -0.086818524032118025, -0.086768712716445942, -0.086718901183852087, +-0.086669089434460972, -0.086619277468396247, -0.086569465285784214, -0.086519652886748524, -0.086469840271413703, -0.086420027439904276, -0.086370214392344782, -0.086320401128859747, +-0.086270587649572822, -0.086220773954610322, -0.086170960044095885, -0.086121145918154049, -0.086071331576909341, -0.086021517020486313, -0.085971702249009491, -0.085921887262603414, +-0.085872072061391733, -0.085822256645500750, -0.085772441015054129, -0.085722625170176411, -0.085672809110992121, -0.085622992837625811, -0.085573176350202021, -0.085523359648844402, +-0.085473542733679284, -0.085423725604830289, -0.085373908262421999, -0.085324090706578926, -0.085274272937425621, -0.085224454955086640, -0.085174636759686520, -0.085124818351348927, +-0.085074999730200176, -0.085025180896363919, -0.084975361849964723, -0.084925542591127098, -0.084875723119975641, -0.084825903436634861, -0.084776083541229327, -0.084726263433882704, +-0.084676443114721306, -0.084626622583868785, -0.084576801841449722, -0.084526980887588657, -0.084477159722410128, -0.084427338346038716, -0.084377516758598059, -0.084327694960214500, +-0.084277872951011704, -0.084228050731114223, -0.084178228300646626, -0.084128405659733438, -0.084078582808499253, -0.084028759747068610, -0.083978936475565175, -0.083929112994115290, +-0.083879289302842622, -0.083829465401871722, -0.083779641291327173, -0.083729816971333512, -0.083679992442015308, -0.083630167703497127, -0.083580342755902634, -0.083530517599358173, +-0.083480692233987422, -0.083430866659914935, -0.083381040877265292, -0.083331214886163033, -0.083281388686732738, -0.083231562279098101, -0.083181735663385423, -0.083131908839718424, +-0.083082081808221644, -0.083032254569019665, -0.082982427122237037, -0.082932599467998358, -0.082882771606428166, -0.082832943537650167, -0.082783115261790691, -0.082733286778973431, +-0.082683458089322953, -0.082633629192963826, -0.082583800090020629, -0.082533970780617943, -0.082484141264879435, -0.082434311542931446, -0.082384481614897698, -0.082334651480902743, +-0.082284821141071149, -0.082234990595527510, -0.082185159844396394, -0.082135328887802367, -0.082085497725869150, -0.082035666358723058, -0.081985834786487813, -0.081936003009287980, +-0.081886171027248142, -0.081836338840492864, -0.081786506449146743, -0.081736673853334357, -0.081686841053179401, -0.081637008048808232, -0.081587174840344542, -0.081537341427912913, +-0.081487507811637938, -0.081437673991644186, -0.081387839968056250, -0.081338005740997824, -0.081288171310595264, -0.081238336676972292, -0.081188501840253474, -0.081138666800563392, +-0.081088831558026653, -0.081038996112767839, -0.080989160464911517, -0.080939324614581420, -0.080889488561903894, -0.080839652307002657, -0.080789815850002278, -0.080739979191027364, +-0.080690142330202497, -0.080640305267652285, -0.080590468003501295, -0.080540630537873262, -0.080490792870894529, -0.080440955002688816, -0.080391116933380719, -0.080341278663094831, +-0.080291440191955749, -0.080241601520088052, -0.080191762647615475, -0.080141923574664375, -0.080092084301358474, -0.080042244827822351, -0.079992405154180629, -0.079942565280557876, +-0.079892725207078727, -0.079842884933867764, -0.079793044461048693, -0.079743203788747899, -0.079693362917089103, -0.079643521846196885, -0.079593680576195869, -0.079543839107210662, +-0.079493997439365846, -0.079444155572785155, -0.079394313507594960, -0.079344471243918982, -0.079294628781881829, -0.079244786121608096, -0.079194943263222406, -0.079145100206849353, +-0.079095256952613546, -0.079045413500638720, -0.078995569851051245, -0.078945726003974842, -0.078895881959534120, -0.078846037717853701, -0.078796193279058180, -0.078746348643272179, +-0.078696503810620308, -0.078646658781226286, -0.078596813555216513, -0.078546968132714695, -0.078497122513845469, -0.078447276698733429, -0.078397430687503197, -0.078347584480279384, +-0.078297738077185736, -0.078247891478348625, -0.078198044683891785, -0.078148197693939825, -0.078098350508617381, -0.078048503128049049, -0.077998655552359478, -0.077948807781673249, +-0.077898959816114124, -0.077849111655808489, -0.077799263300880064, -0.077749414751453486, -0.077699566007653376, -0.077649717069604343, -0.077599867937431025, -0.077550018611258043, +-0.077500169091209117, -0.077450319377410648, -0.077400469469986397, -0.077350619369060958, -0.077300769074758982, -0.077250918587205078, -0.077201067906523882, -0.077151217032839128, +-0.077101365966277216, -0.077051514706961879, -0.077001663255017769, -0.076951811610569493, -0.076901959773741702, -0.076852107744658990, -0.076802255523446022, -0.076752403110226533, +-0.076702550505126921, -0.076652697708270920, -0.076602844719783181, -0.076552991539788340, -0.076503138168411006, -0.076453284605775843, -0.076403430852006571, -0.076353576907229603, +-0.076303722771568702, -0.076253868445148490, -0.076204013928093617, -0.076154159220528692, -0.076104304322578378, -0.076054449234367313, -0.076004593956019231, -0.075954738487660545, +-0.075904882829415016, -0.075855026981407281, -0.075805170943761976, -0.075755314716603739, -0.075705458300057232, -0.075655601694247065, -0.075605744899297014, -0.075555887915333478, +-0.075506030742480232, -0.075456173380861899, -0.075406315830603143, -0.075356458091828601, -0.075306600164662910, -0.075256742049229816, -0.075206883745655775, -0.075157025254064508, +-0.075107166574580692, -0.075057307707328949, -0.075007448652433945, -0.074957589410020314, -0.074907729980212709, -0.074857870363134904, -0.074808010558913299, -0.074758150567671669, +-0.074708290389534665, -0.074658430024626923, -0.074608569473073122, -0.074558708734997883, -0.074508847810524997, -0.074458986699780877, -0.074409125402889284, -0.074359263919974883, +-0.074309402251162324, -0.074259540396576257, -0.074209678356341346, -0.074159816130582229, -0.074109953719422680, -0.074060091122989141, -0.074010228341405374, -0.073960365374796042, +-0.073910502223285796, -0.073860638886999286, -0.073810775366061177, -0.073760911660596132, -0.073711047770727928, -0.073661183696582991, -0.073611319438285083, -0.073561454995958897, +-0.073511590369729055, -0.073461725559720248, -0.073411860566057113, -0.073361995388863455, -0.073312130028265685, -0.073262264484387593, -0.073212398757353844, -0.073162532847289102, +-0.073112666754318018, -0.073062800478565268, -0.073012934020155518, -0.072963067379212557, -0.072913200555862798, -0.072863333550230044, -0.072813466362438961, -0.072763598992614212, +-0.072713731440880461, -0.072663863707362372, -0.072613995792183750, -0.072564127695471034, -0.072514259417347987, -0.072464390957939287, -0.072414522317369612, -0.072364653495763639, +-0.072314784493246020, -0.072264915309941447, -0.072215045945973694, -0.072165176401469230, -0.072115306676551805, -0.072065436771346122, -0.072015566685976848, -0.071965696420568659, +-0.071915825975246220, -0.071865955350134222, -0.071816084545356443, -0.071766213561039349, -0.071716342397306718, -0.071666471054283226, -0.071616599532093567, -0.071566727830862403, +-0.071516855950714414, -0.071466983891773403, -0.071417111654165824, -0.071367239238015454, -0.071317366643446997, -0.071267493870585119, -0.071217620919554511, -0.071167747790479852, +-0.071117874483485818, -0.071068000998696201, -0.071018127336237483, -0.070968253496233438, -0.070918379478808774, -0.070868505284088154, -0.070818630912196256, -0.070768756363257801, +-0.070718881637397438, -0.070669006734738998, -0.070619131655408923, -0.070569256399531016, -0.070519380967229969, -0.070469505358630474, -0.070419629573857223, -0.070369753613034880, +-0.070319877476287276, -0.070270001163740867, -0.070220124675519455, -0.070170248011747718, -0.070120371172550378, -0.070070494158052096, -0.070020616968377594, -0.069970739603651536, +-0.069920862063997752, -0.069870984349542697, -0.069821106460410176, -0.069771228396724894, -0.069721350158611542, -0.069671471746194813, -0.069621593159599399, -0.069571714398949117, +-0.069521835464370449, -0.069471956355987172, -0.069422077073924018, -0.069372197618305667, -0.069322317989256824, -0.069272438186902180, -0.069222558211366456, -0.069172678062773441, +-0.069122797741249617, -0.069072917246918789, -0.069023036579905675, -0.068973155740334968, -0.068923274728331374, -0.068873393544019598, -0.068823512187524333, -0.068773630658969409, +-0.068723748958481282, -0.068673867086183796, -0.068623985042201630, -0.068574102826659503, -0.068524220439682121, -0.068474337881394190, -0.068424455151919528, -0.068374572251384616, +-0.068324689179913273, -0.068274805937630204, -0.068224922524660128, -0.068175038941127739, -0.068125155187157754, -0.068075271262874881, -0.068025387168402937, -0.067975502903868418, +-0.067925618469395141, -0.067875733865107812, -0.067825849091131152, -0.067775964147589879, -0.067726079034608686, -0.067676193752312291, -0.067626308300824542, -0.067576422680271891, +-0.067526536890778199, -0.067476650932468157, -0.067426764805466485, -0.067376878509897903, -0.067326992045887130, -0.067277105413557983, -0.067227218613036960, -0.067177331644447891, +-0.067127444507915496, -0.067077557203564481, -0.067027669731519579, -0.066977782091905511, -0.066927894284846981, -0.066878006310467822, -0.066828118168894543, -0.066778229860250962, +-0.066728341384661813, -0.066678452742251801, -0.066628563933145674, -0.066578674957468123, -0.066528785815342995, -0.066478896506896798, -0.066429007032253365, -0.066379117391537401, +-0.066329227584873654, -0.066279337612386829, -0.066229447474201661, -0.066179557170442882, -0.066129666701234324, -0.066079776066702484, -0.066029885266971192, -0.065979994302165196, +-0.065930103172409216, -0.065880211877827985, -0.065830320418546209, -0.065780428794688636, -0.065730537006379111, -0.065680645053744130, -0.065630752936907524, -0.065580860655994055, +-0.065530968211128415, -0.065481075602435365, -0.065431182830039625, -0.065381289894065039, -0.065331396794638119, -0.065281503531882709, -0.065231610105923529, -0.065181716516885341, +-0.065131822764892849, -0.065081928850070803, -0.065032034772543934, -0.064982140532436089, -0.064932246129873777, -0.064882351564980859, -0.064832456837882066, -0.064782561948702119, +-0.064732666897565766, -0.064682771684597754, -0.064632876309922815, -0.064582980773664783, -0.064533085075950208, -0.064483189216902909, -0.064433293196647631, -0.064383397015309124, +-0.064333500673012134, -0.064283604169881381, -0.064233707506040738, -0.064183810681616701, -0.064133913696733144, -0.064084016551514814, -0.064034119246086429, -0.063984221780572753, +-0.063934324155098518, -0.063884426369788472, -0.063834528424766473, -0.063784630320159047, -0.063734732056090038, -0.063684833632684207, -0.063634935050066274, -0.063585036308361029, +-0.063535137407693176, -0.063485238348186590, -0.063435339129967808, -0.063385439753160674, -0.063335540217889938, -0.063285640524280345, -0.063235740672456658, -0.063185840662543624, +-0.063135940494665976, -0.063086040168947602, -0.063036139685515011, -0.062986239044492076, -0.062936338246003531, -0.062886437290174152, -0.062836536177128671, -0.062786634906991851, +-0.062736733479888451, -0.062686831895942319, -0.062636930155280005, -0.062587028258025354, -0.062537126204303142, -0.062487223994238117, -0.062437321627955025, -0.062387419105578629, +-0.062337516427232800, -0.062287613593044071, -0.062237710603136306, -0.062187807457634262, -0.062137904156662697, -0.062088000700346375, -0.062038097088810050, -0.061988193322178489, +-0.061938289400575552, -0.061888385324127777, -0.061838481092959037, -0.061788576707194100, -0.061738672166957720, -0.061688767472374659, -0.061638862623569678, -0.061588957620667538, +-0.061539052463792127, -0.061489147153069960, -0.061439241688624933, -0.061389336070581800, -0.061339430299065328, -0.061289524374200273, -0.061239618296111416, -0.061189712064922623, +-0.061139805680760433, -0.061089899143748738, -0.061039992454012287, -0.060990085611675855, -0.060940178616864217, -0.060890271469702120, -0.060840364170314354, -0.060790456718824791, +-0.060740549115359969, -0.060690641360043776, -0.060640733453000979, -0.060590825394356347, -0.060540917184234655, -0.060491008822760664, -0.060441100310058268, -0.060391191646254012, +-0.060341282831471776, -0.060291373865836329, -0.060241464749472444, -0.060191555482504905, -0.060141646065058472, -0.060091736497257929, -0.060041826779227155, -0.059991916911092701, +-0.059942006892978454, -0.059892096725009190, -0.059842186407309685, -0.059792275940004712, -0.059742365323219054, -0.059692454557077473, -0.059642543641703877, -0.059592632577224809, +-0.059542721363764158, -0.059492810001446704, -0.059442898490397224, -0.059392986830740499, -0.059343075022601305, -0.059293163066103535, -0.059243250961373749, -0.059193338708535832, +-0.059143426307714575, -0.059093513759034745, -0.059043601062621132, -0.058993688218598517, -0.058943775227091683, -0.058893862088224523, -0.058843948802123590, -0.058794035368912791, +-0.058744121788716901, -0.058694208061660709, -0.058644294187868998, -0.058594380167466549, -0.058544466000578145, -0.058494551687327694, -0.058444637227841753, -0.058394722622244218, +-0.058344807870659869, -0.058294892973213511, -0.058244977930029911, -0.058195062741233872, -0.058145147406949288, -0.058095231927302725, -0.058045316302418083, -0.057995400532420145, +-0.057945484617433707, -0.057895568557583557, -0.057845652352994485, -0.057795736003791287, -0.057745819510097857, -0.057695902872040773, -0.057645986089743924, -0.057596069163332111, +-0.057546152092930125, -0.057496234878662761, -0.057446317520654808, -0.057396400019030180, -0.057346482373915431, -0.057296564585434480, -0.057246646653712117, -0.057196728578873139, +-0.057146810361042334, -0.057096892000344505, -0.057046973496904449, -0.056997054850846073, -0.056947136062295942, -0.056897217131377978, -0.056847298058216963, -0.056797378842937708, +-0.056747459485665008, -0.056697539986523653, -0.056647620345638451, -0.056597700563133312, -0.056547780639134806, -0.056497860573766857, -0.056447940367154247, -0.056398020019421791, +-0.056348099530694279, -0.056298178901096528, -0.056248258130752432, -0.056198337219788584, -0.056148416168328892, -0.056098494976498159, -0.056048573644421187, -0.055998652172222788, +-0.055948730560027755, -0.055898808807960894, -0.055848886916146125, -0.055798964884710020, -0.055749042713776509, -0.055699120403470394, -0.055649197953916471, -0.055599275365239557, +-0.055549352637564456, -0.055499429771015969, -0.055449506765718019, -0.055399583621797192, -0.055349660339377410, -0.055299736918583475, -0.055249813359540198, -0.055199889662372388, +-0.055149965827204848, -0.055100041854161515, -0.055050117743368959, -0.055000193494951111, -0.054950269109032779, -0.054900344585738767, -0.054850419925193905, -0.054800495127522983, +-0.054750570192850831, -0.054700645121301364, -0.054650719913001168, -0.054600794568074179, -0.054550869086645200, -0.054500943468839047, -0.054451017714780538, -0.054401091824594482, +-0.054351165798404814, -0.054301239636338115, -0.054251313338518313, -0.054201386905070238, -0.054151460336118687, -0.054101533631788490, -0.054051606792204457, -0.054001679817491405, +-0.053951752707773269, -0.053901825463176636, -0.053851898083825442, -0.053801970569844502, -0.053752042921358635, -0.053702115138492663, -0.053652187221371397, -0.053602259170119668, +-0.053552330984861410, -0.053502402665723203, -0.053452474212828990, -0.053402545626303595, -0.053352616906271834, -0.053302688052858531, -0.053252759066188503, -0.053202829946385699, +-0.053152900693576699, -0.053102971307885452, -0.053053041789436775, -0.053003112138355499, -0.052953182354766440, -0.052903252438794422, -0.052853322390564270, -0.052803392210199931, +-0.052753461897828001, -0.052703531453572407, -0.052653600877557993, -0.052603670169909571, -0.052553739330751977, -0.052503808360210034, -0.052453877258408568, -0.052403946025471528, +-0.052354014661525505, -0.052304083166694444, -0.052254151541103182, -0.052204219784876535, -0.052154287898139341, -0.052104355881016425, -0.052054423733631734, -0.052004491456111870, +-0.051954559048580776, -0.051904626511163288, -0.051854693843984230, -0.051804761047168441, -0.051754828120840750, -0.051704895065125982, -0.051654961880148093, -0.051605028566033689, +-0.051555095122906715, -0.051505161550891999, -0.051455227850114381, -0.051405294020698690, -0.051355360062769764, -0.051305425976451553, -0.051255491761870664, -0.051205557419151046, +-0.051155622948417537, -0.051105688349794967, -0.051055753623408182, -0.051005818769382004, -0.050955883787841286, -0.050905948678909969, -0.050856013442714662, -0.050806078079379327, +-0.050756142589028802, -0.050706206971787911, -0.050656271227781512, -0.050606335357134428, -0.050556399359971506, -0.050506463236416700, -0.050456526986596618, -0.050406590610635224, +-0.050356654108657355, -0.050306717480787848, -0.050256780727151548, -0.050206843847873300, -0.050156906843077047, -0.050106969712889422, -0.050057032457434369, -0.050007095076836733, +-0.049957157571221364, -0.049907219940713100, -0.049857282185436780, -0.049807344305517261, -0.049757406301078493, -0.049707468172247096, -0.049657529919147028, -0.049607591541903133, +-0.049557653040640262, -0.049507714415483260, -0.049457775666556972, -0.049407836793986241, -0.049357897797895033, -0.049307958678409966, -0.049258019435655005, -0.049208080069754995, +-0.049158140580834786, -0.049108200969019224, -0.049058261234433159, -0.049008321377200556, -0.048958381397448035, -0.048908441295299560, -0.048858501070879981, -0.048808560724314151, +-0.048758620255726921, -0.048708679665243136, -0.048658738952987654, -0.048608798119084438, -0.048558857163660110, -0.048508916086838647, -0.048458974888744892, -0.048409033569503691, +-0.048359092129239917, -0.048309150568078406, -0.048259208886143136, -0.048209267083560728, -0.048159325160455152, -0.048109383116951260, -0.048059440953173917, -0.048009498669247967, +-0.047959556265298277, -0.047909613741449690, -0.047859671097826184, -0.047809728334554387, -0.047759785451758269, -0.047709842449562681, -0.047659899328092496, -0.047609956087472559, +-0.047560012727827734, -0.047510069249282874, -0.047460125651961955, -0.047410181935991613, -0.047360238101495811, -0.047310294148599413, -0.047260350077427286, -0.047210405888104275, +-0.047160461580755257, -0.047110517155504197, -0.047060572612477723, -0.047010627951799826, -0.046960683173595356, -0.046910738277989181, -0.046860793265106157, -0.046810848135071151, +-0.046760902888009027, -0.046710957524043757, -0.046661012043301982, -0.046611066445907672, -0.046561120731985699, -0.046511174901660922, -0.046461228955058213, -0.046411282892302425, +-0.046361336713517547, -0.046311390418830214, -0.046261444008364405, -0.046211497482244984, -0.046161550840596824, -0.046111604083544783, -0.046061657211213733, -0.046011710223728540, +-0.045961763121213181, -0.045911815903794305, -0.045861868571595889, -0.045811921124742798, -0.045761973563359912, -0.045712025887572089, -0.045662078097504194, -0.045612130193281114, +-0.045562182175026812, -0.045512234042867951, -0.045462285796928500, -0.045412337437333333, -0.045362388964207329, -0.045312440377675345, -0.045262491677862261, -0.045212542864892062, +-0.045162593938891396, -0.045112644899984240, -0.045062695748295481, -0.045012746483949977, -0.044962797107072607, -0.044912847617788243, -0.044862898016221758, -0.044812948302497144, +-0.044762998476741041, -0.044713048539077448, -0.044663098489631237, -0.044613148328527273, -0.044563198055890436, -0.044513247671845613, -0.044463297176517667, -0.044413346570030585, +-0.044363395852511034, -0.044313445024082986, -0.044263494084871326, -0.044213543035000934, -0.044163591874596682, -0.044113640603783449, -0.044063689222685234, -0.044013737731428679, +-0.043963786130137773, -0.043913834418937411, -0.043863882597952458, -0.043813930667307800, -0.043763978627128317, -0.043714026477538886, -0.043664074218663501, -0.043614121850628823, +-0.043564169373558836, -0.043514216787578421, -0.043464264092812468, -0.043414311289385860, -0.043364358377423466, -0.043314405357049293, -0.043264452228389996, -0.043214498991569567, +-0.043164545646712883, -0.043114592193944846, -0.043064638633390322, -0.043014684965174202, -0.042964731189421367, -0.042914777306255820, -0.042864823315804219, -0.042814869218190561, +-0.042764915013539725, -0.042714960701976605, -0.042665006283626079, -0.042615051758613041, -0.042565097127062371, -0.042515142389098072, -0.042465187544846808, -0.042415232594432570, +-0.042365277537980257, -0.042315322375614743, -0.042265367107460927, -0.042215411733643689, -0.042165456254287040, -0.042115500669517636, -0.042065544979459475, -0.042015589184237458, +-0.041965633283976470, -0.041915677278801390, -0.041865721168837126, -0.041815764954208551, -0.041765808635039682, -0.041715852211457176, -0.041665895683585044, -0.041615939051548166, +-0.041565982315471442, -0.041516025475479765, -0.041466068531698028, -0.041416111484251110, -0.041366154333263030, -0.041316197078860452, -0.041266239721167386, -0.041216282260308712, +-0.041166324696409337, -0.041116367029594154, -0.041066409259988050, -0.041016451387715036, -0.040966493412901775, -0.040916535335672286, -0.040866577156151461, -0.040816618874464188, +-0.040766660490735372, -0.040716702005089901, -0.040666743417652682, -0.040616784728547711, -0.040566825937901667, -0.040516867045838553, -0.040466908052483277, -0.040416948957960733, +-0.040366989762395812, -0.040317030465913416, -0.040267071068637562, -0.040217111570694915, -0.040167151972209485, -0.040117192273306179, -0.040067232474109891, -0.040017272574745529, +-0.039967312575337977, -0.039917352476012143, -0.039867392276892046, -0.039817431978104355, -0.039767471579773082, -0.039717511082023128, -0.039667550484979400, -0.039617589788766797, +-0.039567628993510212, -0.039517668099334560, -0.039467707106363853, -0.039417746014724760, -0.039367784824541306, -0.039317823535938386, -0.039267862149040912, -0.039217900663973779, +-0.039167939080861899, -0.039117977399829279, -0.039068015621002608, -0.039018053744505891, -0.038968091770464043, -0.038918129699001963, -0.038868167530244566, -0.038818205264316744, +-0.038768242901343411, -0.038718280441448587, -0.038668317884758940, -0.038618355231398505, -0.038568392481492179, -0.038518429635164872, -0.038468466692541496, -0.038418503653746952, +-0.038368540518905259, -0.038318577288143099, -0.038268613961584499, -0.038218650539354367, -0.038168687021577601, -0.038118723408379122, -0.038068759699883839, -0.038018795896216651, +-0.037968831997501590, -0.037918868003865333, -0.037868903915431906, -0.037818939732326216, -0.037768975454673184, -0.037719011082597710, -0.037669046616224708, -0.037619082055679091, +-0.037569117401084880, -0.037519152652568763, -0.037469187810254767, -0.037419222874267799, -0.037369257844732773, -0.037319292721774602, -0.037269327505518202, -0.037219362196087596, +-0.037169396793609470, -0.037119431298207849, -0.037069465710007653, -0.037019500029133796, -0.036969534255711187, -0.036919568389864738, -0.036869602431719370, -0.036819636381399110, +-0.036769670239030647, -0.036719704004738007, -0.036669737678646112, -0.036619771260879869, -0.036569804751564197, -0.036519838150824012, -0.036469871458784234, -0.036419904675568888, +-0.036369937801304673, -0.036319970836115607, -0.036270003780126618, -0.036220036633462613, -0.036170069396248526, -0.036120102068609258, -0.036070134650668849, -0.036020167142553995, +-0.035970199544388723, -0.035920231856297946, -0.035870264078406593, -0.035820296210839583, -0.035770328253721825, -0.035720360207178253, -0.035670392071332893, -0.035620423846312435, +-0.035570455532240919, -0.035520487129243265, -0.035470518637444395, -0.035420550056969230, -0.035370581387942683, -0.035320612630488801, -0.035270643784734275, -0.035220674850803137, +-0.035170705828820314, -0.035120736718910722, -0.035070767521199288, -0.035020798235810939, -0.034970828862870597, -0.034920859402502294, -0.034870889854832728, -0.034820920219985937, +-0.034770950498086844, -0.034720980689260376, -0.034671010793631461, -0.034621040811325013, -0.034571070742465966, -0.034521100587178354, -0.034471130345588873, -0.034421160017821577, +-0.034371189604001373, -0.034321219104253196, -0.034271248518701974, -0.034221277847472628, -0.034171307090689197, -0.034121336248478393, -0.034071365320964248, -0.034021394308271682, +-0.033971423210525639, -0.033921452027851032, -0.033871480760372795, -0.033821509408215857, -0.033771537971504263, -0.033721566450364705, -0.033671594844921236, -0.033621623155298777, +-0.033571651381622263, -0.033521679524016613, -0.033471707582606772, -0.033421735557517658, -0.033371763448873319, -0.033321791256800459, -0.033271818981423118, -0.033221846622866237, +-0.033171874181254730, -0.033121901656713547, -0.033071929049367600, -0.033021956359340951, -0.032971983586760296, -0.032922010731749683, -0.032872037794434039, -0.032822064774938306, +-0.032772091673387412, -0.032722118489906284, -0.032672145224619857, -0.032622171877652185, -0.032572198449129973, -0.032522224939177259, -0.032472251347918986, -0.032422277675480081, +-0.032372303921985486, -0.032322330087560129, -0.032272356172328064, -0.032222382176415987, -0.032172408099947959, -0.032122433943048916, -0.032072459705843784, -0.032022485388457499, +-0.031972510991015002, -0.031922536513641235, -0.031872561956460231, -0.031822587319598715, -0.031772612603180726, -0.031722637807331207, -0.031672662932175091, -0.031622687977837322, +-0.031572712944442832, -0.031522737832116558, -0.031472762640982560, -0.031422787371167535, -0.031372812022795543, -0.031322836595991520, -0.031272861090880406, -0.031222885507587138, +-0.031172909846236659, -0.031122934106953017, -0.031072958289862927, -0.031022982395090441, -0.030973006422760501, -0.030923030372998043, -0.030873054245928008, -0.030823078041675341, +-0.030773101760364976, -0.030723125402120969, -0.030673148967070036, -0.030623172455336231, -0.030573195867044496, -0.030523219202319773, -0.030473242461286999, -0.030423265644071117, +-0.030373288750797076, -0.030323311781588921, -0.030273334736573378, -0.030223357615874497, -0.030173380419617219, -0.030123403147926494, -0.030073425800927259, -0.030023448378744461, +-0.029973470881502151, -0.029923493309327056, -0.029873515662343225, -0.029823537940675604, -0.029773560144449141, -0.029723582273788775, -0.029673604328819457, -0.029623626309666126, +-0.029573648216452839, -0.029523670049306321, -0.029473691808350629, -0.029423713493710708, -0.029373735105511504, -0.029323756643877957, -0.029273778108935024, -0.029223799500806755, +-0.029173820819619875, -0.029123842065498444, -0.029073863238567407, -0.029023884338951714, -0.028973905366776308, -0.028923926322166140, -0.028873947205246157, -0.028823968016140417, +-0.028773988754975645, -0.028724009421875901, -0.028674030016966130, -0.028624050540371287, -0.028574070992216320, -0.028524091372626171, -0.028474111681725797, -0.028424131919639255, +-0.028374152086493271, -0.028324172182411907, -0.028274192207520112, -0.028224212161942836, -0.028174232045805030, -0.028124251859231647, -0.028074271602346743, -0.028024291275277047, +-0.027974310878146627, -0.027924330411080427, -0.027874349874203400, -0.027824369267640502, -0.027774388591516676, -0.027724407845956880, -0.027674427031085178, -0.027624446147028296, +-0.027574465193910300, -0.027524484171856139, -0.027474503080990767, -0.027424521921439141, -0.027374540693326205, -0.027324559396776922, -0.027274578031915350, -0.027224596598868223, +-0.027174615097759602, -0.027124633528714442, -0.027074651891857700, -0.027024670187314331, -0.026974688415209284, -0.026924706575666629, -0.026874724668813094, -0.026824742694772748, +-0.026774760653670546, -0.026724778545631440, -0.026674796370780390, -0.026624814129242350, -0.026574831821142272, -0.026524849446604229, -0.026474867005754948, -0.026424884498718500, +-0.026374901925619840, -0.026324919286583929, -0.026274936581735717, -0.026224953811200161, -0.026174970975101339, -0.026124988073565971, -0.026075005106718136, -0.026025022074682790, +-0.025975038977584887, -0.025925055815549384, -0.025875072588701246, -0.025825089297165423, -0.025775105941065992, -0.025725122520529681, -0.025675139035680566, -0.025625155486643601, +-0.025575171873543748, -0.025525188196505968, -0.025475204455655216, -0.025425220651116451, -0.025375236783013750, -0.025325252851473842, -0.025275268856620802, -0.025225284798579592, +-0.025175300677475167, -0.025125316493432494, -0.025075332246576525, -0.025025347937031341, -0.024975363564923674, -0.024925379130377599, -0.024875394633518077, -0.024825410074470068, +-0.024775425453358531, -0.024725440770308433, -0.024675456025444732, -0.024625471218891505, -0.024575486350775486, -0.024525501421220751, -0.024475516430352263, -0.024425531378294982, +-0.024375546265173874, -0.024325561091113904, -0.024275575856240027, -0.024225590560676323, -0.024175605204549529, -0.024125619787983724, -0.024075634311103870, -0.024025648774034930, +-0.023975663176901869, -0.023925677519829647, -0.023875691802942346, -0.023825706026366703, -0.023775720190226796, -0.023725734294647586, -0.023675748339754041, -0.023625762325671127, +-0.023575776252523804, -0.023525790120437044, -0.023475803929534918, -0.023425817679944172, -0.023375831371788881, -0.023325845005194010, -0.023275858580284529, -0.023225872097185400, +-0.023175885556021590, -0.023125898956917180, -0.023075912299998912, -0.023025925585390860, -0.022975938813217994, -0.022925951983605284, -0.022875965096677692, -0.022825978152560187, +-0.022775991151377739, -0.022726004093254423, -0.022676016978316987, -0.022626029806689506, -0.022576042578496949, -0.022526055293864290, -0.022476067952916491, -0.022426080555778521, +-0.022376093102575351, -0.022326105593431057, -0.022276118028472392, -0.022226130407823428, -0.022176142731609141, -0.022126154999954496, -0.022076167212984461, -0.022026179370824010, +-0.021976191473597223, -0.021926203521430845, -0.021876215514448960, -0.021826227452776535, -0.021776239336538539, -0.021726251165859949, -0.021676262940865727, -0.021626274661680850, +-0.021576286328429398, -0.021526297941238118, -0.021476309500231092, -0.021426321005533294, -0.021376332457269692, -0.021326343855565262, -0.021276355200544970, -0.021226366492333788, +-0.021176377731055806, -0.021126388916837765, -0.021076400049803750, -0.021026411130078738, -0.020976422157787698, -0.020926433133055602, -0.020876444056007422, -0.020826454926767247, +-0.020776465745461818, -0.020726476512215229, -0.020676487227152446, -0.020626497890398447, -0.020576508502078202, -0.020526519062316687, -0.020476529571238872, -0.020426540028968848, +-0.020376550435633359, -0.020326560791356498, -0.020276571096263230, -0.020226581350478539, -0.020176591554127390, -0.020126601707334765, -0.020076611810224746, -0.020026621862924088, +-0.019976631865556874, -0.019926641818248082, -0.019876651721122681, -0.019826661574305654, -0.019776671377921974, -0.019726681132096614, -0.019676690836953663, -0.019626700492619872, +-0.019576710099219331, -0.019526719656877016, -0.019476729165717899, -0.019426738625866961, -0.019376748037449178, -0.019326757400589523, -0.019276766715412088, -0.019226775982043622, +-0.019176785200608216, -0.019126794371230847, -0.019076803494036496, -0.019026812569150130, -0.018976821596696739, -0.018926830576800401, -0.018876839509587878, -0.018826848395183254, +-0.018776857233711509, -0.018726866025297623, -0.018676874770066569, -0.018626883468143330, -0.018576892119652882, -0.018526900724719315, -0.018476909283469387, -0.018426917796027183, +-0.018376926262517686, -0.018326934683065871, -0.018276943057796723, -0.018226951386835215, -0.018176959670305439, -0.018126967908334155, -0.018076976101045448, -0.018026984248564304, +-0.017976992351015696, -0.017927000408524612, -0.017877008421216024, -0.017827016389214915, -0.017777024312645377, -0.017727032191634167, -0.017677040026305376, -0.017627047816783984, +-0.017577055563194971, -0.017527063265663324, -0.017477070924314015, -0.017427078539272032, -0.017377086110661463, -0.017327093638609063, -0.017277101123238933, -0.017227108564676050, +-0.017177115963045397, -0.017127123318471951, -0.017077130631080698, -0.017027137900995731, -0.016977145128343803, -0.016927152313249018, -0.016877159455836351, -0.016827166556230785, +-0.016777173614557300, -0.016727180630940884, -0.016677187605506513, -0.016627194538378288, -0.016577201429682966, -0.016527208279544636, -0.016477215088088290, -0.016427221855438903, +-0.016377228581721463, -0.016327235267060949, -0.016277241911582349, -0.016227248515409756, -0.016177255078669930, -0.016127261601486968, -0.016077268083985848, -0.016027274526291560, +-0.015977280928529087, -0.015927287290823409, -0.015877293613298628, -0.015827299896081497, -0.015777306139296118, -0.015727312343067474, -0.015677318507520549, -0.015627324632780330, +-0.015577330718971796, -0.015527336766219937, -0.015477342774648847, -0.015427348744385288, -0.015377354675553359, -0.015327360568278043, -0.015277366422684324, -0.015227372238897190, +-0.015177378017041625, -0.015127383757241725, -0.015077389459624257, -0.015027395124313314, -0.014977400751433882, -0.014927406341110951, -0.014877411893469502, -0.014827417408634523, +-0.014777422886731001, -0.014727428327883034, -0.014677433732217386, -0.014627439099858150, -0.014577444430930319, -0.014527449725558876, -0.014477454983868808, -0.014427460205985104, +-0.014377465392032749, -0.014327470542135842, -0.014277475656421148, -0.014227480735012763, -0.014177485778035678, -0.014127490785614876, -0.014077495757875350, -0.014027500694942083, +-0.013977505596939176, -0.013927510463993393, -0.013877515296228835, -0.013827520093770489, -0.013777524856743341, -0.013727529585272381, -0.013677534279482598, -0.013627538939498980, +-0.013577543565445625, -0.013527548157449300, -0.013477552715634104, -0.013427557240125027, -0.013377561731047058, -0.013327566188525182, -0.013277570612684392, -0.013227575003649676, +-0.013177579361545134, -0.013127583686497531, -0.013077587978630970, -0.013027592238070438, -0.012977596464940925, -0.012927600659367423, -0.012877604821474917, -0.012827608951387511, +-0.012777613049231971, -0.012727617115132400, -0.012677621149213785, -0.012627625151601117, -0.012577629122419387, -0.012527633061793582, -0.012477636969848696, -0.012427640846708830, +-0.012377644692500750, -0.012327648507348557, -0.012277652291377244, -0.012227656044711798, -0.012177659767477214, -0.012127663459798481, -0.012077667121799701, -0.012027670753607641, +-0.011977674355346402, -0.011927677927140980, -0.011877681469116361, -0.011827684981397541, -0.011777688464109506, -0.011727691917377251, -0.011677695341324878, -0.011627698736079155, +-0.011577702101764184, -0.011527705438504959, -0.011477708746426471, -0.011427712025653710, -0.011377715276311668, -0.011327718498525340, -0.011277721692418826, -0.011227724858118897, +-0.011177727995749655, -0.011127731105436094, -0.011077734187303205, -0.011027737241475979, -0.010977740268079411, -0.010927743267237604, -0.010877746239077328, -0.010827749183722686, +-0.010777752101298671, -0.010727754991930275, -0.010677757855742492, -0.010627760692860314, -0.010577763503408734, -0.010527766287511857, -0.010477769045296454, -0.010427771776886627, +-0.010377774482407372, -0.010327777161983680, -0.010277779815740545, -0.010227782443802959, -0.010177785046295918, -0.010127787623343527, -0.010077790175072555, -0.010027792701607108, +-0.009977795203072178, -0.009927797679592761, -0.009877800131293850, -0.009827802558300437, -0.009777804960736630, -0.009727807338729199, -0.009677809692402251, -0.009627812021880778, +-0.009577814327289774, -0.009527816608754234, -0.009477818866399155, -0.009427821100349525, -0.009377823310729457, -0.009327825497665717, -0.009277827661282415, -0.009227829801704543, +-0.009177831919057097, -0.009127834013465071, -0.009077836085053460, -0.009027838133946371, -0.008977840160270574, -0.008927842164150176, -0.008877844145710174, -0.008827846105075561, +-0.008777848042371333, -0.008727849957722486, -0.008677851851254012, -0.008627853723090022, -0.008577855573357284, -0.008527857402179907, -0.008477859209682888, -0.008427860995991221, +-0.008377862761229902, -0.008327864505523924, -0.008277866228998286, -0.008227867931777095, -0.008177869613987121, -0.008127871275752473, -0.008077872917198147, -0.008027874538449140, +-0.007977876139630444, -0.007927877720867060, -0.007877879282283094, -0.007827880824005316, -0.007777882346157837, -0.007727883848865652, -0.007677885332253757, -0.007627886796447149, +-0.007577888241570824, -0.007527889667749779, -0.007477891075108121, -0.007427892463772623, -0.007377893833867394, -0.007327895185517431, -0.007277896518847729, -0.007227897833983287, +-0.007177899131049100, -0.007127900410169277, -0.007077901671470591, -0.007027902915077151, -0.006977904141113954, -0.006927905349705996, -0.006877906540978275, -0.006827907715055787, +-0.006777908872063531, -0.006727910012125614, -0.006677911135368810, -0.006627912241917228, -0.006577913331895865, -0.006527914405429720, -0.006477915462643789, -0.006427916503663068, +-0.006377917528612556, -0.006327918537616363, -0.006277919530801261, -0.006227920508291360, -0.006177921470211658, -0.006127922416687153, -0.006077923347842841, -0.006027924263803722, +-0.005977925164693903, -0.005927926050640159, -0.005877926921766601, -0.005827927778198225, -0.005777928620060029, -0.005727929447477013, -0.005677930260574172, -0.005627931059476505, +-0.005577931844308124, -0.005527932615195800, -0.005477933372263645, -0.005427934115636657, -0.005377934845439833, -0.005327935561798172, -0.005277936264836673, -0.005227936954680332, +-0.005177937631453262, -0.005127938295282235, -0.005077938946291362, -0.005027939584605642, -0.004977940210350073, -0.004927940823649654, -0.004877941424629382, -0.004827942013413369, +-0.004777942590128389, -0.004727943154898552, -0.004677943707848858, -0.004627944249104304, -0.004577944778789890, -0.004527945297030614, -0.004477945803951475, -0.004427946299676583, +-0.004377946784332712, -0.004327947258043976, -0.004277947720935371, -0.004227948173131897, -0.004177948614758552, -0.004127949045940336, -0.004077949466801360, -0.004027949877468397, +-0.003977950278065560, -0.003927950668717847, -0.003877951049550258, -0.003827951420687791, -0.003777951782255445, -0.003727952134378220, -0.003677952477180227, -0.003627952810788240, +-0.003577953135326371, -0.003527953450919620, -0.003477953757692985, -0.003427954055771466, -0.003377954345280061, -0.003327954626343770, -0.003277954899086705, -0.003227955163635641, +-0.003177955420114689, -0.003127955668648848, -0.003077955909363118, -0.003027956142382499, -0.002977956367831988, -0.002927956585835699, -0.002877956796520407, -0.002827957000010223, +-0.002777957196430146, -0.002727957385905176, -0.002677957568560313, -0.002627957744520555, -0.002577957913910904, -0.002527958076855469, -0.002477958233481027, -0.002427958383911690, +-0.002377958528272457, -0.002327958666688328, -0.002277958799284302, -0.002227958926185378, -0.002177959047516558, -0.002127959163401952, -0.002077959273968336, -0.002027959379339822, +-0.001977959479641409, -0.001927959574998098, -0.001877959665534888, -0.001827959751376778, -0.001777959832647881, -0.001727959909474973, -0.001677959981982165, -0.001627960050294457, +-0.001577960114536849, -0.001527960174834340, -0.001477960231311931, -0.001427960284094622, -0.001377960333306523, -0.001327960379074412, -0.001277960421522400, -0.001227960460775487, +-0.001177960496958673, -0.001127960530196958, -0.001077960560615341, -0.001027960588337934, -0.000977960613491515, -0.000927960636200194, -0.000877960656588971, -0.000827960674782847, +-0.000777960690906820, -0.000727960705085893, -0.000677960717445063, -0.000627960728108444, -0.000577960737202810, -0.000527960744852275, -0.000477960751181838, -0.000427960756316500, +-0.000377960760381259, -0.000327960763501117, -0.000277960765801072, -0.000227960767405237, -0.000177960768440389, -0.000127960769030639, -0.000077960769300987 +}; + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_linear_interp_example/ARM/arm_linear_interp_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_linear_interp_example/ARM/arm_linear_interp_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,204 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_linear_interp_example_f32.c +* +* Description: Example code demonstrating usage of sin function +* and uses linear interpolation to get higher precision +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup LinearInterpExample Linear Interpolate Example + * + * CMSIS DSP Software Library -- Linear Interpolate Example + * + * Description + * This example demonstrates usage of linear interpolate modules and fast math modules. + * Method 1 uses fast math sine function to calculate sine values using cubic interpolation and method 2 uses + * linear interpolation function and results are compared to reference output. + * Example shows linear interpolation function can be used to get higher precision compared to fast math sin calculation. + * + * \par Block Diagram: + * \par + * \image html linearInterpExampleMethod1.gif "Method 1: Sine caluclation using fast math" + * \par + * \image html linearInterpExampleMethod2.gif "Method 2: Sine caluclation using interpolation function" + * + * \par Variables Description: + * \par + * \li \c testInputSin_f32 points to the input values for sine calculation + * \li \c testRefSinOutput32_f32 points to the reference values caculated from sin() matlab function + * \li \c testOutput points to output buffer calculation from cubic interpolation + * \li \c testLinIntOutput points to output buffer calculation from linear interpolation + * \li \c snr1 Signal to noise ratio for reference and cubic interpolation output + * \li \c snr2 Signal to noise ratio for reference and linear interpolation output + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_sin_f32() + * - arm_linear_interp_f32() + * + * Refer + * \link arm_linear_interp_example_f32.c \endlink + * + */ + + +/** \example arm_linear_interp_example_f32.c + */ + +#include "arm_math.h" +#include "math_helper.h" + +#define SNR_THRESHOLD 90 +#define TEST_LENGTH_SAMPLES 10 +#define XSPACING (0.00005f) + +/* ---------------------------------------------------------------------- +* Test input data for F32 SIN function +* Generated by the MATLAB rand() function +* randn('state', 0) +* xi = (((1/4.18318581819710)* randn(blockSize, 1) * 2* pi)); +* --------------------------------------------------------------------*/ +float32_t testInputSin_f32[TEST_LENGTH_SAMPLES] = +{ + -0.649716504673081170, -2.501723745497831200, + 0.188250329003310100, 0.432092748487532540, + -1.722010988459680800, 1.788766476323060600, + 1.786136060975809500, -0.056525543169408797, + 0.491596272728153760, 0.262309671126153390 +}; + +/*------------------------------------------------------------------------------ +* Reference out of SIN F32 function for Block Size = 10 +* Calculated from sin(testInputSin_f32) +*------------------------------------------------------------------------------*/ +float32_t testRefSinOutput32_f32[TEST_LENGTH_SAMPLES] = +{ + -0.604960695383043530, -0.597090287967934840, + 0.187140422442966500, 0.418772124875992690, + -0.988588831792106880, 0.976338412038794010, + 0.976903856413481100, -0.056495446835214236, + 0.472033731854734240, 0.259311907228582830 +}; + +/*------------------------------------------------------------------------------ +* Method 1: Test out Buffer Calculated from Cubic Interpolation +*------------------------------------------------------------------------------*/ +float32_t testOutput[TEST_LENGTH_SAMPLES]; + +/*------------------------------------------------------------------------------ +* Method 2: Test out buffer Calculated from Linear Interpolation +*------------------------------------------------------------------------------*/ +float32_t testLinIntOutput[TEST_LENGTH_SAMPLES]; + +/*------------------------------------------------------------------------------ +* External table used for linear interpolation +*------------------------------------------------------------------------------*/ +extern float arm_linear_interep_table[188495]; + +/* ---------------------------------------------------------------------- +* Global Variables for caluclating SNR's for Method1 & Method 2 +* ------------------------------------------------------------------- */ +float32_t snr1; +float32_t snr2; + +/* ---------------------------------------------------------------------------- +* Calculation of Sine values from Cubic Interpolation and Linear interpolation +* ---------------------------------------------------------------------------- */ +int32_t main(void) +{ + uint32_t i; + arm_status status; + + arm_linear_interp_instance_f32 S = {188495, -3.141592653589793238, XSPACING, &arm_linear_interep_table[0]}; + + /*------------------------------------------------------------------------------ + * Method 1: Test out Calculated from Cubic Interpolation + *------------------------------------------------------------------------------*/ + for(i=0; i< TEST_LENGTH_SAMPLES; i++) + { + testOutput[i] = arm_sin_f32(testInputSin_f32[i]); + } + + /*------------------------------------------------------------------------------ + * Method 2: Test out Calculated from Cubic Interpolation and Linear interpolation + *------------------------------------------------------------------------------*/ + + for(i=0; i< TEST_LENGTH_SAMPLES; i++) + { + testLinIntOutput[i] = arm_linear_interp_f32(&S, testInputSin_f32[i]); + } + + /*------------------------------------------------------------------------------ + * SNR calculation for method 1 + *------------------------------------------------------------------------------*/ + snr1 = arm_snr_f32(testRefSinOutput32_f32, testOutput, 2); + + /*------------------------------------------------------------------------------ + * SNR calculation for method 2 + *------------------------------------------------------------------------------*/ + snr2 = arm_snr_f32(testRefSinOutput32_f32, testLinIntOutput, 2); + + /*------------------------------------------------------------------------------ + * Initialise status depending on SNR calculations + *------------------------------------------------------------------------------*/ + if( snr2 > snr1) + { + status = ARM_MATH_SUCCESS; + } + else + { + status = ARM_MATH_TEST_FAILURE; + } + + /* ---------------------------------------------------------------------- + ** Loop here if the signals fail the PASS check. + ** This denotes a test failure + ** ------------------------------------------------------------------- */ + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_linear_interp_example/ARM/math_helper.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_linear_interp_example/ARM/math_helper.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,458 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param float* Pointer to the reference buffer + * @param float* Pointer to the test buffer + * @param uint32_t total number of samples + * @return float SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param q15_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q15_t* Pointer to Ref buffer + * @param q15_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q31_t* Pointer to Ref buffer + * @param q31_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param uint32_t number of additions + * @return none + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Converts Q15 to floating-point + * @param uint32_t number of samples in the buffer + * @return none + */ + +void arm_apply_guard_bits (float32_t * pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param uint32_t number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param pIn input buffer + * @param numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if(pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_linear_interp_example/ARM/math_helper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_linear_interp_example/ARM/math_helper.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_matrix_example/ARM/arm_matrix_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_matrix_example/ARM/arm_matrix_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,233 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_matrix_example_f32.c +* +* Description: Example code demonstrating least square fit to data +* using matrix functions +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup MatrixExample Matrix Example + * + * \par Description: + * \par + * Demonstrates the use of Matrix Transpose, Matrix Muliplication, and Matrix Inverse + * functions to apply least squares fitting to input data. Least squares fitting is + * the procedure for finding the best-fitting curve that minimizes the sum of the + * squares of the offsets (least square error) from a given set of data. + * + * \par Algorithm: + * \par + * The linear combination of parameters considered is as follows: + * \par + * A * X = B, where \c X is the unknown value and can be estimated + * from \c A & \c B. + * \par + * The least squares estimate \c X is given by the following equation: + * \par + * X = Inverse(AT * A) * AT * B + * + * \par Block Diagram: + * \par + * \image html matrixExample.gif + * + * \par Variables Description: + * \par + * \li \c A_f32 input matrix in the linear combination equation + * \li \c B_f32 output matrix in the linear combination equation + * \li \c X_f32 unknown matrix estimated using \c A_f32 & \c B_f32 matrices + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_mat_init_f32() + * - arm_mat_trans_f32() + * - arm_mat_mult_f32() + * - arm_mat_inverse_f32() + * + * Refer + * \link arm_matrix_example_f32.c \endlink + * + */ + + +/** \example arm_matrix_example_f32.c + */ + +#include "arm_math.h" +#include "math_helper.h" + +#define SNR_THRESHOLD 90 + +/* -------------------------------------------------------------------------------- +* Test input data(Cycles) taken from FIR Q15 module for differant cases of blockSize +* and tapSize +* --------------------------------------------------------------------------------- */ + +const float32_t B_f32[4] = +{ + 782.0, 7577.0, 470.0, 4505.0 +}; + +/* -------------------------------------------------------------------------------- +* Formula to fit is C1 + C2 * numTaps + C3 * blockSize + C4 * numTaps * blockSize +* -------------------------------------------------------------------------------- */ + +const float32_t A_f32[16] = +{ + /* Const, numTaps, blockSize, numTaps*blockSize */ + 1.0, 32.0, 4.0, 128.0, + 1.0, 32.0, 64.0, 2048.0, + 1.0, 16.0, 4.0, 64.0, + 1.0, 16.0, 64.0, 1024.0, +}; + + +/* ---------------------------------------------------------------------- +* Temporary buffers for storing intermediate values +* ------------------------------------------------------------------- */ +/* Transpose of A Buffer */ +float32_t AT_f32[16]; +/* (Transpose of A * A) Buffer */ +float32_t ATMA_f32[16]; +/* Inverse(Transpose of A * A) Buffer */ +float32_t ATMAI_f32[16]; +/* Test Output Buffer */ +float32_t X_f32[4]; + +/* ---------------------------------------------------------------------- +* Reference ouput buffer C1, C2, C3 and C4 taken from MATLAB +* ------------------------------------------------------------------- */ +const float32_t xRef_f32[4] = {73.0, 8.0, 21.25, 2.875}; + +float32_t snr; + + +/* ---------------------------------------------------------------------- +* Max magnitude FFT Bin test +* ------------------------------------------------------------------- */ + +int32_t main(void) +{ + + arm_matrix_instance_f32 A; /* Matrix A Instance */ + arm_matrix_instance_f32 AT; /* Matrix AT(A transpose) instance */ + arm_matrix_instance_f32 ATMA; /* Matrix ATMA( AT multiply with A) instance */ + arm_matrix_instance_f32 ATMAI; /* Matrix ATMAI(Inverse of ATMA) instance */ + arm_matrix_instance_f32 B; /* Matrix B instance */ + arm_matrix_instance_f32 X; /* Matrix X(Unknown Matrix) instance */ + + uint32_t srcRows, srcColumns; /* Temporary variables */ + arm_status status; + + /* Initialise A Matrix Instance with numRows, numCols and data array(A_f32) */ + srcRows = 4; + srcColumns = 4; + arm_mat_init_f32(&A, srcRows, srcColumns, (float32_t *)A_f32); + + /* Initialise Matrix Instance AT with numRows, numCols and data array(AT_f32) */ + srcRows = 4; + srcColumns = 4; + arm_mat_init_f32(&AT, srcRows, srcColumns, AT_f32); + + /* calculation of A transpose */ + status = arm_mat_trans_f32(&A, &AT); + + + /* Initialise ATMA Matrix Instance with numRows, numCols and data array(ATMA_f32) */ + srcRows = 4; + srcColumns = 4; + arm_mat_init_f32(&ATMA, srcRows, srcColumns, ATMA_f32); + + /* calculation of AT Multiply with A */ + status = arm_mat_mult_f32(&AT, &A, &ATMA); + + /* Initialise ATMAI Matrix Instance with numRows, numCols and data array(ATMAI_f32) */ + srcRows = 4; + srcColumns = 4; + arm_mat_init_f32(&ATMAI, srcRows, srcColumns, ATMAI_f32); + + /* calculation of Inverse((Transpose(A) * A) */ + status = arm_mat_inverse_f32(&ATMA, &ATMAI); + + /* calculation of (Inverse((Transpose(A) * A)) * Transpose(A)) */ + status = arm_mat_mult_f32(&ATMAI, &AT, &ATMA); + + /* Initialise B Matrix Instance with numRows, numCols and data array(B_f32) */ + srcRows = 4; + srcColumns = 1; + arm_mat_init_f32(&B, srcRows, srcColumns, (float32_t *)B_f32); + + /* Initialise X Matrix Instance with numRows, numCols and data array(X_f32) */ + srcRows = 4; + srcColumns = 1; + arm_mat_init_f32(&X, srcRows, srcColumns, X_f32); + + /* calculation ((Inverse((Transpose(A) * A)) * Transpose(A)) * B) */ + status = arm_mat_mult_f32(&ATMA, &B, &X); + + /* Comparison of reference with test output */ + snr = arm_snr_f32((float32_t *)xRef_f32, X_f32, 4); + + /*------------------------------------------------------------------------------ + * Initialise status depending on SNR calculations + *------------------------------------------------------------------------------*/ + if( snr > SNR_THRESHOLD) + { + status = ARM_MATH_SUCCESS; + } + else + { + status = ARM_MATH_TEST_FAILURE; + } + + + /* ---------------------------------------------------------------------- + ** Loop here if the signals fail the PASS check. + ** This denotes a test failure + ** ------------------------------------------------------------------- */ + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_matrix_example/ARM/math_helper.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_matrix_example/ARM/math_helper.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,458 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param float* Pointer to the reference buffer + * @param float* Pointer to the test buffer + * @param uint32_t total number of samples + * @return float SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param q15_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q15_t* Pointer to Ref buffer + * @param q15_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q31_t* Pointer to Ref buffer + * @param q31_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param uint32_t number of additions + * @return none + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Converts Q15 to floating-point + * @param uint32_t number of samples in the buffer + * @return none + */ + +void arm_apply_guard_bits (float32_t * pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param uint32_t number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param pIn input buffer + * @param numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if(pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_matrix_example/ARM/math_helper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_matrix_example/ARM/math_helper.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_signal_converge_example/ARM/arm_signal_converge_data.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_signal_converge_example/ARM/arm_signal_converge_data.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,269 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_signal_converge_data.c +* +* Description: Test input data for Floating point LMS Norm FIR filter +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +** Test input data for Floating point LMS Norm FIR filter +** Generated by the MATLAB randn() function +** ------------------------------------------------------------------- */ + +float32_t testInput_f32[1536] = +{ +-0.432565, -1.665584, 0.125332, 0.287676, -1.146471, 1.190915, 1.189164, -0.037633, +0.327292, 0.174639, -0.186709, 0.725791, -0.588317, 2.183186, -0.136396, 0.113931, +1.066768, 0.059281, -0.095648, -0.832349, 0.294411, -1.336182, 0.714325, 1.623562, +-0.691776, 0.857997, 1.254001, -1.593730, -1.440964, 0.571148, -0.399886, 0.689997, +0.815622, 0.711908, 1.290250, 0.668601, 1.190838, -1.202457, -0.019790, -0.156717, +-1.604086, 0.257304, -1.056473, 1.415141, -0.805090, 0.528743, 0.219321, -0.921902, +-2.170674, -0.059188, -1.010634, 0.614463, 0.507741, 1.692430, 0.591283, -0.643595, +0.380337, -1.009116, -0.019511, -0.048221, 0.000043, -0.317859, 1.095004, -1.873990, +0.428183, 0.895638, 0.730957, 0.577857, 0.040314, 0.677089, 0.568900, -0.255645, +-0.377469, -0.295887, -1.475135, -0.234004, 0.118445, 0.314809, 1.443508, -0.350975, +0.623234, 0.799049, 0.940890, -0.992092, 0.212035, 0.237882, -1.007763, -0.742045, +1.082295, -0.131500, 0.389880, 0.087987, -0.635465, -0.559573, 0.443653, -0.949904, +0.781182, 0.568961, -0.821714, -0.265607, -1.187777, -2.202321, 0.986337, -0.518635, +0.327368, 0.234057, 0.021466, -1.003944, -0.947146, -0.374429, -1.185886, -1.055903, +1.472480, 0.055744, -1.217317, -0.041227, -1.128344, -1.349278, -0.261102, 0.953465, +0.128644, 0.656468, -1.167819, -0.460605, -0.262440, -1.213152, -1.319437, 0.931218, +0.011245, -0.645146, 0.805729, 0.231626, -0.989760, 1.339586, 0.289502, 1.478917, +1.138028, -0.684139, -1.291936, -0.072926, -0.330599, -0.843628, 0.497770, 1.488490, +-0.546476, -0.846758, -0.246337, 0.663024, -0.854197, -1.201315, -0.119869, -0.065294, +0.485296, -0.595491, -0.149668, -0.434752, -0.079330, 1.535152, -0.606483, -1.347363, +0.469383, -0.903567, 0.035880, -0.627531, 0.535398, 0.552884, -0.203690, -2.054325, +0.132561, 1.592941, 1.018412, -1.580402, -0.078662, -0.681657, -1.024553, -1.234353, +0.288807, -0.429303, 0.055801, -0.367874, -0.464973, 0.370961, 0.728283, 2.112160, +-1.357298, -1.022610, 1.037834, -0.389800, -1.381266, 0.315543, 1.553243, 0.707894, +1.957385, 0.504542, 1.864529, -0.339812, -1.139779, -0.211123, 1.190245, -1.116209, +0.635274, -0.601412, 0.551185, -1.099840, 0.085991, -2.004563, -0.493088, 0.462048, +-0.321005, 1.236556, -0.631280, -2.325211, -1.231637, 1.055648, -0.113224, 0.379224, +0.944200, -2.120427, -0.644679, -0.704302, -1.018137, -0.182082, 1.521013, -0.038439, +1.227448, -0.696205, 0.007524, -0.782893, 0.586939, -0.251207, 0.480136, 0.668155, +-0.078321, 0.889173, 2.309287, 0.524639, -0.011787, 0.913141, 0.055941, -1.107070, +0.485498, -0.005005, -0.276218, 1.276452, 1.863401, -0.522559, 0.103424, -0.807649, +0.680439, -2.364590, 0.990115, 0.218899, 0.261662, 1.213444, -0.274667, -0.133134, +-1.270500, -1.663606, -0.703554, 0.280880, -0.541209, -1.333531, 1.072686, -0.712085, +-0.011286, -0.000817, -0.249436, 0.396575, -0.264013, -1.664011, -1.028975, 0.243095, +-1.256590, -0.347183, -0.941372, -1.174560, -1.021142, -0.401667, 0.173666, -0.116118, +1.064119, -0.245386, -1.517539, 0.009734, 0.071373, 0.316536, 0.499826, 1.278084, +-0.547816, 0.260808, -0.013177, -0.580264, 2.136308, -0.257617, -1.409528, 1.770101, +0.325546, -1.119040, 0.620350, 1.269782, -0.896043, 0.135175, -0.139040, -1.163395, +1.183720, -0.015430, 0.536219, -0.716429, -0.655559, 0.314363, 0.106814, 1.848216, +-0.275106, 2.212554, 1.508526, -1.945079, -1.680543, -0.573534, -0.185817, 0.008934, +0.836950, -0.722271, -0.721490, -0.201181, -0.020464, 0.278890, 1.058295, 0.621673, +-1.750615, 0.697348, 0.811486, 0.636345, 1.310080, 0.327098, -0.672993, -0.149327, +-2.449018, 0.473286, 0.116946, -0.591104, -0.654708, -1.080662, -0.047731, 0.379345, +-0.330361, -0.499898, -0.035979, -0.174760, -0.957265, 1.292548, 0.440910, 1.280941, +-0.497730, -1.118717, 0.807650, 0.041200, -0.756209, -0.089129, -2.008850, 1.083918, +-0.981191, -0.688489, 1.339479, -0.909243, -0.412858, -0.506163, 1.619748, 0.080901, +-1.081056, -1.124518, 1.735676, 1.937459, 1.635068, -1.255940, -0.213538, -0.198932, +0.307499, -0.572325, -0.977648, -0.446809, 1.082092, 2.372648, 0.229288, -0.266623, +0.701672, -0.487590, 1.862480, 1.106851, -1.227566, -0.669885, 1.340929, 0.388083, +0.393059, -1.707334, 0.227859, 0.685633, -0.636790, -1.002606, -0.185621, -1.054033, +-0.071539, 0.279198, 1.373275, 0.179841, -0.542017, 1.634191, 0.825215, 0.230761, +0.671634, -0.508078, 0.856352, 0.268503, 0.624975, -1.047338, 1.535670, 0.434426, +-1.917136, 0.469940, 1.274351, 0.638542, 1.380782, 1.319843, -0.909429, -2.305605, +1.788730, 0.390798, 0.020324, -0.405977, -1.534895, 0.221373, -1.374479, -0.839286, +-0.208643, 0.755913, 0.375734, -1.345413, 1.481876, 0.032736, 1.870453, -1.208991, +-0.782632, -0.767299, -0.107200, -0.977057, -0.963988, -2.379172, -0.838188, 0.257346, +-0.183834, -0.167615, -0.116989, 0.168488, -0.501206, -0.705076, 0.508165, -0.420922, +0.229133, -0.959497, -0.146043, 0.744538, -0.890496, 0.139062, -0.236144, -0.075459, +-0.358572, -2.077635, -0.143546, 1.393341, 0.651804, -0.377134, -0.661443, 0.248958, +-0.383516, -0.528480, 0.055388, 1.253769, -2.520004, 0.584856, -1.008064, 0.944285, +-2.423957, -0.223831, 0.058070, -0.424614, -0.202918, -1.513077, -1.126352, -0.815002, +0.366614, -0.586107, 1.537409, 0.140072, -1.862767, -0.454193, -0.652074, 0.103318, +-0.220632, -0.279043, -0.733662, -0.064534, -1.444004, 0.612340, -1.323503, -0.661577, +-0.146115, 0.248085, -0.076633, 1.738170, 1.621972, 0.626436, 0.091814, -0.807607, +-0.461337, -1.405969, -0.374530, -0.470911, 1.751296, 0.753225, 0.064989, -0.292764, +0.082823, 0.766191, 2.236850, 0.326887, 0.863304, 0.679387, 0.554758, 1.001630, +1.259365, 0.044151, -0.314138, 0.226708, 0.996692, 1.215912, -0.542702, 0.912228, +-0.172141, -0.335955, 0.541487, 0.932111, -0.570253, -1.498605, -0.050346, 0.553025, +0.083498, 1.577524, -0.330774, 0.795155, -0.784800, -1.263121, 0.666655, -1.392632, +-1.300562, -0.605022, -1.488565, 0.558543, -0.277354, -1.293685, -0.888435, -0.986520, +-0.071618, -2.414591, -0.694349, -1.391389, 0.329648, 0.598544, 0.147175, -0.101439, +-2.634981, 0.028053, -0.876310, -0.265477, -0.327578, -1.158247, 0.580053, 0.239756, +-0.350885, 0.892098, 1.578299, -1.108174, -0.025931, -1.110628, 0.750834, 0.500167, +-0.517261, -0.559209, -0.753371, 0.925813, -0.248520, -0.149835, -1.258415, 0.312620, +2.690277, 0.289696, -1.422803, 0.246786, -1.435773, 0.148573, -1.693073, 0.719188, +1.141773, 1.551936, 1.383630, -0.758092, 0.442663, 0.911098, -1.074086, 0.201762, +0.762863, -1.288187, -0.952962, 0.778175, -0.006331, 0.524487, 1.364272, 0.482039, +-0.787066, 0.751999, -0.166888, -0.816228, 2.094065, 0.080153, -0.937295, 0.635739, +1.682028, 0.593634, 0.790153, 0.105254, -0.158579, 0.870907, -0.194759, 0.075474, +-0.526635, -0.685484, -0.268388, -1.188346, 0.248579, 0.102452, -0.041007, -2.247582, +-0.510776, 0.249243, 0.369197, 0.179197, -0.037283, -1.603310, 0.339372, -0.131135, +0.485190, 0.598751, -0.086031, 0.325292, -0.335143, -0.322449, -0.382374, -0.953371, +0.233576, 1.235245, -0.578532, -0.501537, 0.722864, 0.039498, 1.541279, -1.701053, +-1.033741, -0.763708, 2.176426, 0.431612, -0.443765, 0.029996, -0.315671, 0.977846, +0.018295, 0.817963, 0.702341, -0.231271, -0.113690, 0.127941, -0.799410, -0.238612, +-0.089463, -1.023264, 0.937538, -1.131719, -0.710702, -1.169501, 1.065437, -0.680394, +-1.725773, 0.813200, 1.441867, 0.672272, 0.138665, -0.859534, -0.752251, 1.229615, +1.150754, -0.608025, 0.806158, 0.217133, -0.373461, -0.832030, 0.286866, -1.818892, +-1.573051, 2.015666, -0.071982, 2.628909, -0.243317, 0.173276, 0.923207, -0.178553, +-0.521705, 1.431962, -0.870117, 0.807542, -0.510635, 0.743514, 0.847898, -0.829901, +0.532994, 1.032848, -1.052024, 0.362114, -0.036787, -1.227636, -0.275099, -0.160435, +-1.083575, -1.954213, -0.909487, -0.005579, -1.723490, 1.263077, -0.600433, -2.063925, +0.110911, 1.487614, 0.053002, 0.161981, -0.026878, 0.173576, 0.882168, 0.182294, +0.755295, 0.508035, 0.131880, 0.280104, -0.982848, -0.944087, -0.013058, 0.354345, +-0.894709, 0.812111, 0.109537, 2.731644, 0.411079, -1.306862, 0.383806, 0.499504, +-0.510786, 0.234922, -0.597825, 0.020771, 0.419443, 1.191104, 0.771214, -2.644222, +0.285430, 0.826093, -0.008122, 0.858438, 0.774788, 1.305945, 1.231503, 0.958564, +-1.654548, -0.990396, 0.685236, -0.974870, -0.606726, 0.686794, 0.020049, 1.063801, +-1.341050, 0.479510, -1.633974, -1.442665, 0.293781, -0.140364, -1.130341, -0.292538, +-0.582536, -0.896348, 0.248601, -1.489663, 0.313509, -2.025084, 0.528990, 0.343471, +0.758193, -0.691940, 0.680179, -1.072541, 0.899772, -2.123092, 0.284712, -0.733323, +-0.773376, 0.151842, -0.336843, 0.970761, -0.107236, 1.013492, -0.475347, 0.068948, +0.398592, 1.116326, 0.620451, -0.287674, -1.371773, -0.685868, 0.331685, -0.997722, +0.291418, 1.107078, 0.244959, 0.164976, 0.406231, 1.215981, 1.448424, -1.025137, +0.205418, 0.588882, -0.264024, 2.495318, 0.855948, -0.850954, 0.811879, 0.700242, +0.759938, -1.712909, 1.537021, -1.609847, 1.109526, -1.109704, 0.385469, 0.965231, +0.818297, 0.037049, -0.926012, -0.111919, -0.803030, -1.665006, -0.901401, 0.588350, +0.554159, -0.415173, 0.061795, 0.457432, 0.199014, 0.257558, 2.080730, -2.277237, +0.339022, 0.289894, 0.662261, -0.580860, 0.887752, 0.171871, 0.848821, 0.963769, +1.321918, -0.064345, 1.317053, 0.228017, -1.429637, -0.149701, -0.504968, -1.729141, +-0.417472, -0.614969, 0.720777, 0.339364, 0.882845, 0.284245, -0.145541, -0.089646, +0.289161, 1.164831, 0.805729, -1.355643, 0.120893, -0.222178, 0.571732, -0.300140, +1.134277, -0.179356, -1.467067, 1.395346, 0.440836, 0.565384, -0.693623, 0.833869, +-2.237378, 1.097644, -0.001617, -1.614573, -1.228727, 0.207405, 0.220942, -1.006073, +-0.453067, 1.399453, -0.461964, 0.032716, 0.798783, 0.896816, 0.137892, -1.619146, +-1.646606, 0.428707, -0.737231, 0.564926, -1.384167, 0.460268, 0.629384, 0.379847, +-1.013330, -0.347243, 0.441912, -1.590240, -0.701417, -1.077601, 1.002220, 1.729481, +0.709032, -0.747897, 0.228862, -0.223497, -0.853275, 0.345627, 0.109764, -1.133039, +-0.683124, -0.277856, 0.654790, -1.248394, -0.597539, -0.481813, 0.983372, 1.762121, +1.427402, 0.911763, 0.326823, 0.069619, -1.499763, -0.418223, -0.021037, 0.228425, +-1.008196, -0.664622, 0.558177, -1.188542, -0.775481, 0.271042, 1.534976, -1.052283, +0.625559, -0.797626, -0.313522, -0.602210, 1.259060, 0.858484, -2.105292, -0.360937, +0.553557, -1.556384, -0.206666, -0.425568, 0.493778, -0.870908, 0.079828, -0.521619, +-1.413861, -0.384293, -0.457922, -0.291471, -0.301224, -1.588594, 1.094287, 1.324167, +-0.126480, -0.737164, 0.213719, -0.400529, 0.064938, -1.757996, 1.686748, 0.327400, +0.715967, 1.598648, -2.064741, -0.743632, 0.176185, 0.527839, -0.553153, 0.298280, +-1.226607, -0.189676, -0.301713, 0.956956, -0.533366, -0.901082, -0.892552, 0.278717, +-0.745807, 1.603464, 0.574270, 0.320655, -0.151383, 0.315762, 1.343703, -2.237832, +1.292906, -0.378459, 0.002521, 0.884641, 0.582450, -1.614244, -1.503666, 0.573586, +-0.910537, -1.631277, -0.359138, -0.397616, -1.161307, -1.109838, 0.290672, -1.910239, +1.314768, 0.665319, -0.275115, -0.023022, -0.907976, -1.043657, 0.373516, 0.901532, +1.278539, -0.128456, 0.612821, 1.956518, 2.266326, -0.373959, 2.238039, -0.159580, +-0.703281, 0.563477, -0.050296, 1.163593, 0.658808, -1.550089, -3.029118, 0.540578, +-1.008998, 0.908047, 1.582303, -0.979088, 1.007902, 0.158491, -0.586927, 1.574082, +-0.516649, 1.227800, 1.583876, -2.088950, 2.949545, 1.356125, 1.050068, -0.767170, +-0.257653, -1.371845, -1.267656, -0.894948, 0.589089, 1.842629, 1.347967, -0.491253, +-2.177568, 0.237000, -0.735411, -1.779419, 0.448030, 0.581214, 0.856607, -0.266263, +-0.417470, -0.205806, -0.174323, 0.217577, 1.684295, 0.119528, 0.650667, 2.080061, +-0.339225, 0.730113, 0.293969, -0.849109, -2.533858, -2.378941, -0.346276, -0.610937, +-0.408192, -1.415611, 0.227122, 0.207974, -0.719718, 0.757762, -1.643135, -1.056813, +-0.251662, -1.298441, 1.233255, 1.494625, 0.235938, -1.404359, 0.658791, -2.556613, +-0.534945, 3.202525, 0.439198, -1.149901, 0.886765, -0.283386, 1.035336, -0.364878, +1.341987, 1.008872, 0.213874, -0.299264, 0.255849, -0.190826, -0.079060, 0.699851, +-0.796540, -0.801284, -0.007599, -0.726810, -1.490902, 0.870335, -0.265675, -1.566695, +-0.394636, -0.143855, -2.334247, -1.357539, -1.815689, 1.108422, -0.142115, 1.112757, +0.559264, 0.478370, -0.679385, 0.284967, -1.332935, -0.723980, -0.663600, 0.198443, +-1.794868, -1.387673, 0.197768, 1.469328, 0.366493, -0.442775, -0.048563, 0.077709, +1.957910, -0.072848, 0.938810, -0.079608, -0.800959, 0.309424, 1.051826, -1.664211, +-1.090792, -0.191731, 0.463401, -0.924147, -0.649657, 0.622893, -1.335107, 1.047689, +0.863327, -0.642411, 0.660010, 1.294116, 0.314579, 0.859573, 0.128670, 0.016568, +-0.072801, -0.994310, -0.747358, -0.030814, 0.988355, -0.599017, 1.476644, -0.813801, +0.645040, -1.309919, -0.867425, -0.474233, 0.222417, 1.871323, 0.110001, -0.411341, +0.511242, -1.199117, -0.096361, 0.445817, -0.295825, -0.167996, 0.179543, 0.421118, +1.677678, 1.996949, 0.696964, -1.366382, 0.363045, -0.567044, -1.044154, 0.697139, +0.484026, -0.193751, -0.378095, -0.886374, -1.840197, -1.628195, -1.173789, -0.415411, +0.175088, 0.229433, -1.240889, 0.700004, 0.426877, 1.454803, -0.510186, -0.006657, +-0.525496, 0.717698, 1.088374, 0.500552, 2.771790, -0.160309, 0.429489, -1.966817, +-0.546019, -1.888395, -0.107952, -1.316144, -0.672632, -0.902365, -0.154798, 0.947242, +1.550375, 0.429040, -0.560795, 0.179304, -0.771509, -0.943390, -1.407569, -1.906131, +-0.065293, 0.672149, 0.206147, -0.008124, 0.020042, -0.558447, 1.886079, -0.219975, +-1.414395, -0.302811, -0.569574, -0.121495, -0.390171, -0.844287, -1.737757, -0.449520, +-1.547933, -0.095776, 0.907714, 2.369602, 0.519768, 0.410525, 1.052585, 0.428784, +1.295088, -0.186053, 0.130733, -0.657627, -0.759267, -0.595170, 0.812400, 0.069541, +-1.833687, 1.827363, 0.654075, -1.544769, -0.375109, 0.207688, -0.765615, -0.106355, +0.338769, 1.033461, -1.404822, -1.030570, -0.643372, 0.170787, 1.344839, 1.936273, +0.741336, 0.811980, -0.142808, -0.099858, -0.800131, 0.493249, 1.237574, 1.295951, +-0.278196, 0.217127, 0.630728, -0.548549, 0.229632, 0.355311, 0.521284, -0.615971, +1.345803, 0.974922, -2.377934, -1.092319, -0.325710, -2.012228, 1.567660, 0.233337, +0.646420, -1.129412, 0.197038, 1.696870, 0.726034, 0.792526, 0.603357, -0.058405, +-1.108666, 2.144229, -1.352821, 0.457021, 0.391175, 2.073013, -0.323318, 1.468132, +-0.502399, 0.209593, 0.754800, -0.948189, 0.613157, 1.760503, 0.088762, 2.595570, +-0.675470, 2.786804, -0.016827, 0.271651, -0.914102, -1.951371, -0.317418, 0.588333, +0.828996, -1.674851, -1.922293, -0.436662, 0.044974, 2.416609, -0.309892, 0.187583, +0.947699, -0.525703, -1.115605, -1.592320, 1.174844, 0.485144, 1.645480, -0.454233, +1.008768, 2.049403, 0.602020, 0.017860, -1.610426, 1.238752, 0.683587, -0.780716, +0.530979, 2.134498, 0.354361, 0.231700, 1.287980, -0.013488, -1.333345, -0.556343, +0.755597, -0.911854, 1.371684, 0.245580, 0.118845, 0.384690, -0.070152, -0.578309, +0.469308, 1.299687, 1.634798, -0.702809, 0.807253, -1.027451, 1.294496, 0.014930, +0.218705, 1.713188, -2.078805, 0.112917, -1.086491, -1.558311, 0.637406, -0.404576, +-0.403325, 0.084076, -0.435349, -0.562623, 0.878062, -0.814650, -0.258363, 0.493299, +-0.802694, -0.008329, 0.627571, 0.154382, 2.580735, -1.306246, 1.023526, 0.777795, +-0.833884, -0.586663, 0.065664, -0.012342, -0.076987, -1.558587, 1.702607, -0.468984, +0.094619, 0.287071, 0.919354, 0.510136, 0.245440, -1.400519, 0.969571, 1.593698, +-1.437917, -1.534230, -0.074710, 0.081459, -0.843240, -0.564640, -0.028207, -1.243702, +0.733039, 0.059580, 0.149144, 1.595857, -0.777250, 1.550277, 1.055002, -0.166654, +0.314484, 1.419571, 0.327348, 0.475653, 0.398754, -0.072770, 1.314784, 0.978279, +1.722114, -0.412302, 0.565133, 0.739851, 0.220138, 1.312807, 0.629152, -1.107987, +-0.447001, -0.725993, 0.354045, -0.506772, -2.103747, -0.664684, 1.450110, -0.329805, +2.701872, -1.634939, -0.536325, 0.547223, 1.492603, -0.455243, -0.496416, 1.235260, +0.040926, 0.748467, 1.230764, 0.304903, 1.077771, 0.765151, -1.319580, -0.509191, +0.555116, -1.957625, -0.760453, -2.443886, -0.659366, -0.114779, 0.300079, -0.583996, +-3.073745, 1.551042, -0.407369, 1.428095, -1.353242, 0.903970, 0.541671, -0.465020 +}; + + + +/* ---------------------------------------------------------------------- +** Coefficients for 32-tap filter for Floating point LMS FIR filter +* FIR high pass filter with cutoff freq 9.6kHz (transition 9.6KHz to 11.52KHz) +** ------------------------------------------------------------------- */ +float32_t lmsNormCoeff_f32[32] = { +-0.004240, 0.002301, 0.008860, -0.000000, -0.019782, -0.010543, 0.032881, 0.034736, +-0.037374, -0.069586, 0.022397, 0.102169, 0.014185, -0.115908, -0.061648, 0.101018, +0.101018, -0.061648, -0.115908, 0.014185, 0.102169, 0.022397, -0.069586, -0.037374, +0.034736, 0.032881, -0.010543, -0.019782, -0.000000, 0.008860, 0.002301, -0.004240 + +}; + +/* ---------------------------------------------------------------------- +** Coefficients for 32-tap filter for Floating point FIR filter +* FIR low pass filter with cutoff freq 24Hz (transition 24Hz to 240Hz) +** ------------------------------------------------------------------- */ +const float32_t FIRCoeff_f32[32] = { +0.004502, 0.005074, 0.006707, 0.009356, 0.012933, 0.017303, 0.022298, 0.027717, +0.033338, 0.038930, 0.044258, 0.049098, 0.053243, 0.056519, 0.058784, 0.059941, +0.059941, 0.058784, 0.056519, 0.053243, 0.049098, 0.044258, 0.038930, 0.033338, +0.027717, 0.022298, 0.017303, 0.012933, 0.009356, 0.006707, 0.005074, 0.004502 + +}; + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_signal_converge_example/ARM/arm_signal_converge_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_signal_converge_example/ARM/arm_signal_converge_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,259 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_signal_converge_example_f32.c +* +* Description: Example code demonstrating convergence of an adaptive +* filter. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup SignalConvergence Signal Convergence Example + * + * \par Description: + * \par + * Demonstrates the ability of an adaptive filter to "learn" the transfer function of + * a FIR lowpass filter using the Normalized LMS Filter, Finite Impulse + * Response (FIR) Filter, and Basic Math Functions. + * + * \par Algorithm: + * \par + * The figure below illustrates the signal flow in this example. Uniformly distributed white + * noise is passed through an FIR lowpass filter. The output of the FIR filter serves as the + * reference input of the adaptive filter (normalized LMS filter). The white noise is input + * to the adaptive filter. The adaptive filter learns the transfer function of the FIR filter. + * The filter outputs two signals: (1) the output of the internal adaptive FIR filter, and + * (2) the error signal which is the difference between the adaptive filter and the reference + * output of the FIR filter. Over time as the adaptive filter learns the transfer function + * of the FIR filter, the first output approaches the reference output of the FIR filter, + * and the error signal approaches zero. + * \par + * The adaptive filter converges properly even if the input signal has a large dynamic + * range (i.e., varies from small to large values). The coefficients of the adaptive filter + * are initially zero, and then converge over 1536 samples. The internal function test_signal_converge() + * implements the stopping condition. The function checks if all of the values of the error signal have a + * magnitude below a threshold DELTA. + * + * \par Block Diagram: + * \par + * \image html SignalFlow.gif + * + * + * \par Variables Description: + * \par + * \li \c testInput_f32 points to the input data + * \li \c firStateF32 points to FIR state buffer + * \li \c lmsStateF32 points to Normalised Least mean square FIR filter state buffer + * \li \c FIRCoeff_f32 points to coefficient buffer + * \li \c lmsNormCoeff_f32 points to Normalised Least mean square FIR filter coefficient buffer + * \li \c wire1, wir2, wire3 temporary buffers + * \li \c errOutput, err_signal temporary error buffers + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_lms_norm_init_f32() + * - arm_fir_init_f32() + * - arm_fir_f32() + * - arm_lms_norm_f32() + * - arm_scale_f32() + * - arm_abs_f32() + * - arm_sub_f32() + * - arm_min_f32() + * - arm_copy_f32() + * + * Refer + * \link arm_signal_converge_example_f32.c \endlink + * + */ + + +/** \example arm_signal_converge_example_f32.c + */ + +#include "arm_math.h" +#include "math_helper.h" + +/* ---------------------------------------------------------------------- +** Global defines for the simulation +* ------------------------------------------------------------------- */ + +#define TEST_LENGTH_SAMPLES 1536 +#define NUMTAPS 32 +#define BLOCKSIZE 32 +#define DELTA_ERROR 0.000001f +#define DELTA_COEFF 0.0001f +#define MU 0.5f + +#define NUMFRAMES (TEST_LENGTH_SAMPLES / BLOCKSIZE) + +/* ---------------------------------------------------------------------- +* Declare FIR state buffers and structure +* ------------------------------------------------------------------- */ + +float32_t firStateF32[NUMTAPS + BLOCKSIZE]; +arm_fir_instance_f32 LPF_instance; + +/* ---------------------------------------------------------------------- +* Declare LMSNorm state buffers and structure +* ------------------------------------------------------------------- */ + +float32_t lmsStateF32[NUMTAPS + BLOCKSIZE]; +float32_t errOutput[TEST_LENGTH_SAMPLES]; +arm_lms_norm_instance_f32 lmsNorm_instance; + + +/* ---------------------------------------------------------------------- +* Function Declarations for Signal Convergence Example +* ------------------------------------------------------------------- */ + +arm_status test_signal_converge_example( void ); + + +/* ---------------------------------------------------------------------- +* Internal functions +* ------------------------------------------------------------------- */ +arm_status test_signal_converge(float32_t* err_signal, + uint32_t blockSize); + +void getinput(float32_t* input, + uint32_t fr_cnt, + uint32_t blockSize); + +/* ---------------------------------------------------------------------- +* External Declarations for FIR F32 module Test +* ------------------------------------------------------------------- */ +extern float32_t testInput_f32[TEST_LENGTH_SAMPLES]; +extern float32_t lmsNormCoeff_f32[32]; +extern const float32_t FIRCoeff_f32[32]; +extern arm_lms_norm_instance_f32 lmsNorm_instance; + +/* ---------------------------------------------------------------------- +* Declare I/O buffers +* ------------------------------------------------------------------- */ + +float32_t wire1[BLOCKSIZE]; +float32_t wire2[BLOCKSIZE]; +float32_t wire3[BLOCKSIZE]; +float32_t err_signal[BLOCKSIZE]; + +/* ---------------------------------------------------------------------- +* Signal converge test +* ------------------------------------------------------------------- */ + +int32_t main(void) +{ + uint32_t i; + arm_status status; + uint32_t index; + float32_t minValue; + + /* Initialize the LMSNorm data structure */ + arm_lms_norm_init_f32(&lmsNorm_instance, NUMTAPS, lmsNormCoeff_f32, lmsStateF32, MU, BLOCKSIZE); + + /* Initialize the FIR data structure */ + arm_fir_init_f32(&LPF_instance, NUMTAPS, (float32_t *)FIRCoeff_f32, firStateF32, BLOCKSIZE); + + /* ---------------------------------------------------------------------- + * Loop over the frames of data and execute each of the processing + * functions in the system. + * ------------------------------------------------------------------- */ + + for(i=0; i < NUMFRAMES; i++) + { + /* Read the input data - uniformly distributed random noise - into wire1 */ + arm_copy_f32(testInput_f32 + (i * BLOCKSIZE), wire1, BLOCKSIZE); + + /* Execute the FIR processing function. Input wire1 and output wire2 */ + arm_fir_f32(&LPF_instance, wire1, wire2, BLOCKSIZE); + + /* Execute the LMS Norm processing function*/ + + arm_lms_norm_f32(&lmsNorm_instance, /* LMSNorm instance */ + wire1, /* Input signal */ + wire2, /* Reference Signal */ + wire3, /* Converged Signal */ + err_signal, /* Error Signal, this will become small as the signal converges */ + BLOCKSIZE); /* BlockSize */ + + /* apply overall gain */ + arm_scale_f32(wire3, 5, wire3, BLOCKSIZE); /* in-place buffer */ + } + + status = ARM_MATH_SUCCESS; + + /* ------------------------------------------------------------------------------- + * Test whether the error signal has reached towards 0. + * ----------------------------------------------------------------------------- */ + + arm_abs_f32(err_signal, err_signal, BLOCKSIZE); + arm_min_f32(err_signal, BLOCKSIZE, &minValue, &index); + + if (minValue > DELTA_ERROR) + { + status = ARM_MATH_TEST_FAILURE; + } + + /* ---------------------------------------------------------------------- + * Test whether the filter coefficients have converged. + * ------------------------------------------------------------------- */ + + arm_sub_f32((float32_t *)FIRCoeff_f32, lmsNormCoeff_f32, lmsNormCoeff_f32, NUMTAPS); + + arm_abs_f32(lmsNormCoeff_f32, lmsNormCoeff_f32, NUMTAPS); + arm_min_f32(lmsNormCoeff_f32, NUMTAPS, &minValue, &index); + + if (minValue > DELTA_COEFF) + { + status = ARM_MATH_TEST_FAILURE; + } + + /* ---------------------------------------------------------------------- + * Loop here if the signals did not pass the convergence check. + * This denotes a test failure + * ------------------------------------------------------------------- */ + + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_signal_converge_example/ARM/math_helper.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_signal_converge_example/ARM/math_helper.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,458 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param float* Pointer to the reference buffer + * @param float* Pointer to the test buffer + * @param uint32_t total number of samples + * @return float SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if(temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param q15_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q15_t* Pointer to Ref buffer + * @param q15_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param q31_t* Pointer to Ref buffer + * @param q31_t* Pointer to Test buffer + * @param uint32_t number of samples in the buffer + * @return none + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if(diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param q31_t* Pointer to input buffer + * @param uint32_t blockSize + * @param uint32_t guard_bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param uint32_t number of additions + * @return none + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Converts Q15 to floating-point + * @param uint32_t number of samples in the buffer + * @return none + */ + +void arm_apply_guard_bits (float32_t * pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param uint32_t number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param uint32_t number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t * pOut, + uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param pIn input buffer + * @param numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if(pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_signal_converge_example/ARM/math_helper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_signal_converge_example/ARM/math_helper.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_sin_cos_example/ARM/arm_sin_cos_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_sin_cos_example/ARM/arm_sin_cos_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,161 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 12. March 2014 +* $Revision: V1.4.3 +* +* Project: CMSIS DSP Library +* Title: arm_sin_cos_example_f32.c +* +* Description: Example code demonstrating sin and cos calculation of input signal. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup SinCosExample SineCosine Example + * + * \par Description: + * \par + * Demonstrates the Pythagorean trignometric identity with the use of Cosine, Sine, Vector + * Multiplication, and Vector Addition functions. + * + * \par Algorithm: + * \par + * Mathematically, the Pythagorean trignometric identity is defined by the following equation: + *
sin(x) * sin(x) + cos(x) * cos(x) = 1
+ * where \c x is the angle in radians. + * + * \par Block Diagram: + * \par + * \image html sinCos.gif + * + * \par Variables Description: + * \par + * \li \c testInput_f32 array of input angle in radians + * \li \c testOutput stores sum of the squares of sine and cosine values of input angle + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_cos_f32() + * - arm_sin_f32() + * - arm_mult_f32() + * - arm_add_f32() + * + * Refer + * \link arm_sin_cos_example_f32.c \endlink + * + */ + + +/** \example arm_sin_cos_example_f32.c + */ + +#include +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +* Defines each of the tests performed +* ------------------------------------------------------------------- */ +#define MAX_BLOCKSIZE 32 +#define DELTA (0.0001f) + + +/* ---------------------------------------------------------------------- +* Test input data for Floating point sin_cos example for 32-blockSize +* Generated by the MATLAB randn() function +* ------------------------------------------------------------------- */ + +const float32_t testInput_f32[MAX_BLOCKSIZE] = +{ + -1.244916875853235400, -4.793533929171324800, 0.360705030233248850, 0.827929644170887320, -3.299532218312426900, 3.427441903227623800, 3.422401784294607700, -0.108308165334010680, + 0.941943896490312180, 0.502609575000365850, -0.537345278736373500, 2.088817392965764500, -1.693168684143455700, 6.283185307179590700, -0.392545884746175080, 0.327893095115825040, + 3.070147440456292300, 0.170611405884662230, -0.275275082396073010, -2.395492805446796300, 0.847311163536506600, -3.845517018083148800, 2.055818378415868300, 4.672594161978930800, + -1.990923030266425800, 2.469305197656249500, 3.609002606064021000, -4.586736582331667500, -4.147080139136136300, 1.643756718868359500, -1.150866392366494800, 1.985805026477433800 + + +}; + +const float32_t testRefOutput_f32 = 1.000000000; + +/* ---------------------------------------------------------------------- +* Declare Global variables +* ------------------------------------------------------------------- */ +uint32_t blockSize = 32; +float32_t testOutput; +float32_t cosOutput; +float32_t sinOutput; +float32_t cosSquareOutput; +float32_t sinSquareOutput; + +/* ---------------------------------------------------------------------- +* Max magnitude FFT Bin test +* ------------------------------------------------------------------- */ + +arm_status status; + +int32_t main(void) +{ + float32_t diff; + uint32_t i; + + for(i=0; i< blockSize; i++) + { + cosOutput = arm_cos_f32(testInput_f32[i]); + sinOutput = arm_sin_f32(testInput_f32[i]); + + arm_mult_f32(&cosOutput, &cosOutput, &cosSquareOutput, 1); + arm_mult_f32(&sinOutput, &sinOutput, &sinSquareOutput, 1); + + arm_add_f32(&cosSquareOutput, &sinSquareOutput, &testOutput, 1); + + /* absolute value of difference between ref and test */ + diff = fabsf(testRefOutput_f32 - testOutput); + + /* Comparison of sin_cos value with reference */ + if(diff > DELTA) + { + status = ARM_MATH_TEST_FAILURE; + } + + if( status == ARM_MATH_TEST_FAILURE) + { + while(1); + } + + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_variance_example/ARM/arm_variance_example_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Examples/arm_variance_example/ARM/arm_variance_example_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,204 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_variance_example_f32.c +* +* Description: Example code demonstrating variance calculation of input sequence. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup VarianceExample Variance Example + * + * \par Description: + * \par + * Demonstrates the use of Basic Math and Support Functions to calculate the variance of an + * input sequence with N samples. Uniformly distributed white noise is taken as input. + * + * \par Algorithm: + * \par + * The variance of a sequence is the mean of the squared deviation of the sequence from its mean. + * \par + * This is denoted by the following equation: + *
 variance = ((x[0] - x') * (x[0] - x') + (x[1] - x') * (x[1] - x') + ... + * (x[n-1] - x') * (x[n-1] - x')) / (N-1)
+ * where, x[n] is the input sequence, N is the number of input samples, and + * x' is the mean value of the input sequence, x[n]. + * \par + * The mean value x' is defined as: + *
 x' = (x[0] + x[1] + ... + x[n-1]) / N
+ * + * \par Block Diagram: + * \par + * \image html Variance.gif + * + * + * \par Variables Description: + * \par + * \li \c testInput_f32 points to the input data + * \li \c wire1, \c wir2, \c wire3 temporary buffers + * \li \c blockSize number of samples processed at a time + * \li \c refVarianceOut reference variance value + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_dot_prod_f32() + * - arm_mult_f32() + * - arm_sub_f32() + * - arm_fill_f32() + * - arm_copy_f32() + * + * Refer + * \link arm_variance_example_f32.c \endlink + * + */ + + +/** \example arm_variance_example_f32.c + */ +#include +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +* Defines each of the tests performed +* ------------------------------------------------------------------- */ +#define MAX_BLOCKSIZE 32 +#define DELTA (0.000001f) + + +/* ---------------------------------------------------------------------- +* Declare I/O buffers +* ------------------------------------------------------------------- */ +float32_t wire1[MAX_BLOCKSIZE]; +float32_t wire2[MAX_BLOCKSIZE]; +float32_t wire3[MAX_BLOCKSIZE]; + +/* ---------------------------------------------------------------------- +* Test input data for Floating point Variance example for 32-blockSize +* Generated by the MATLAB randn() function +* ------------------------------------------------------------------- */ + +float32_t testInput_f32[32] = +{ + -0.432564811528221, -1.665584378238097, 0.125332306474831, 0.287676420358549, + -1.146471350681464, 1.190915465642999, 1.189164201652103, -0.037633276593318, + 0.327292361408654, 0.174639142820925, -0.186708577681439, 0.725790548293303, + -0.588316543014189, 2.183185818197101, -0.136395883086596, 0.113931313520810, + 1.066768211359189, 0.059281460523605, -0.095648405483669, -0.832349463650022, + 0.294410816392640, -1.336181857937804, 0.714324551818952, 1.623562064446271, + -0.691775701702287, 0.857996672828263, 1.254001421602532, -1.593729576447477, + -1.440964431901020, 0.571147623658178, -0.399885577715363, 0.689997375464345 + +}; + +/* ---------------------------------------------------------------------- +* Declare Global variables +* ------------------------------------------------------------------- */ +uint32_t blockSize = 32; +float32_t refVarianceOut = 0.903941793931839; + +/* ---------------------------------------------------------------------- +* Variance calculation test +* ------------------------------------------------------------------- */ + +int32_t main(void) +{ + arm_status status; + float32_t mean, oneByBlockSize; + float32_t variance; + float32_t diff; + + status = ARM_MATH_SUCCESS; + + /* Calculation of mean value of input */ + + /* x' = 1/blockSize * (x(0)* 1 + x(1) * 1 + ... + x(n-1) * 1) */ + + /* Fill wire1 buffer with 1.0 value */ + arm_fill_f32(1.0, wire1, blockSize); + + /* Calculate the dot product of wire1 and wire2 */ + /* (x(0)* 1 + x(1) * 1 + ...+ x(n-1) * 1) */ + arm_dot_prod_f32(testInput_f32, wire1, blockSize, &mean); + + /* Calculation of 1/blockSize */ + oneByBlockSize = 1.0 / (blockSize); + + /* 1/blockSize * (x(0)* 1 + x(1) * 1 + ... + x(n-1) * 1) */ + arm_mult_f32(&mean, &oneByBlockSize, &mean, 1); + + + /* Calculation of variance value of input */ + + /* (1/blockSize) * (x(0) - x') * (x(0) - x') + (x(1) - x') * (x(1) - x') + ... + (x(n-1) - x') * (x(n-1) - x') */ + + /* Fill wire2 with mean value x' */ + arm_fill_f32(mean, wire2, blockSize); + + /* wire3 contains (x-x') */ + arm_sub_f32(testInput_f32, wire2, wire3, blockSize); + + /* wire2 contains (x-x') */ + arm_copy_f32(wire3, wire2, blockSize); + + /* (x(0) - x') * (x(0) - x') + (x(1) - x') * (x(1) - x') + ... + (x(n-1) - x') * (x(n-1) - x') */ + arm_dot_prod_f32(wire2, wire3, blockSize, &variance); + + /* Calculation of 1/blockSize */ + oneByBlockSize = 1.0 / (blockSize - 1); + + /* Calculation of variance */ + arm_mult_f32(&variance, &oneByBlockSize, &variance, 1); + + /* absolute value of difference between ref and test */ + diff = fabsf(refVarianceOut - variance); + + /* Comparison of variance value with reference */ + if(diff > DELTA) + { + status = ARM_MATH_TEST_FAILURE; + } + + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ +} + + /** \endlink */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,165 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_abs_f32.c +* +* Description: Vector absolute value. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" +#include + +/** + * @ingroup groupMath + */ + +/** + * @defgroup BasicAbs Vector Absolute Value + * + * Computes the absolute value of a vector on an element-by-element basis. + * + *
        
+ *     pDst[n] = abs(pSrc[n]),   0 <= n < blockSize.        
+ * 
+ * + * The functions support in-place computation allowing the source and + * destination pointers to reference the same memory buffer. + * There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + * @addtogroup BasicAbs + * @{ + */ + +/** + * @brief Floating-point vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + +void arm_abs_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t in1, in2, in3, in4; /* temporary variables */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = |A| */ + /* Calculate absolute and then store the results in the destination buffer. */ + /* read sample from source */ + in1 = *pSrc; + in2 = *(pSrc + 1); + in3 = *(pSrc + 2); + + /* find absolute value */ + in1 = fabsf(in1); + + /* read sample from source */ + in4 = *(pSrc + 3); + + /* find absolute value */ + in2 = fabsf(in2); + + /* read sample from source */ + *pDst = in1; + + /* find absolute value */ + in3 = fabsf(in3); + + /* find absolute value */ + in4 = fabsf(in4); + + /* store result to destination */ + *(pDst + 1) = in2; + + /* store result to destination */ + *(pDst + 2) = in3; + + /* store result to destination */ + *(pDst + 3) = in4; + + + /* Update source pointer to process next sampels */ + pSrc += 4u; + + /* Update destination pointer to process next sampels */ + pDst += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = |A| */ + /* Calculate absolute and then store the results in the destination buffer. */ + *pDst++ = fabsf(*pSrc++); + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicAbs group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,179 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_abs_q15.c +* +* Description: Q15 vector absolute value. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicAbs + * @{ + */ + +/** + * @brief Q15 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * The Q15 value -1 (0x8000) will be saturated to the maximum allowable positive value 0x7FFF. + */ + +void arm_abs_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + __SIMD32_TYPE *simd; + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + + q15_t in1; /* Input value1 */ + q15_t in2; /* Input value2 */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + simd = __SIMD32_CONST(pDst); + while(blkCnt > 0u) + { + /* C = |A| */ + /* Read two inputs */ + in1 = *pSrc++; + in2 = *pSrc++; + + + /* Store the Absolute result in the destination buffer by packing the two values, in a single cycle */ +#ifndef ARM_MATH_BIG_ENDIAN + *simd++ = + __PKHBT(((in1 > 0) ? in1 : (q15_t)__QSUB16(0, in1)), + ((in2 > 0) ? in2 : (q15_t)__QSUB16(0, in2)), 16); + +#else + + + *simd++ = + __PKHBT(((in2 > 0) ? in2 : (q15_t)__QSUB16(0, in2)), + ((in1 > 0) ? in1 : (q15_t)__QSUB16(0, in1)), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + in1 = *pSrc++; + in2 = *pSrc++; + + +#ifndef ARM_MATH_BIG_ENDIAN + + *simd++ = + __PKHBT(((in1 > 0) ? in1 : (q15_t)__QSUB16(0, in1)), + ((in2 > 0) ? in2 : (q15_t)__QSUB16(0, in2)), 16); + +#else + + + *simd++ = + __PKHBT(((in2 > 0) ? in2 : (q15_t)__QSUB16(0, in2)), + ((in1 > 0) ? in1 : (q15_t)__QSUB16(0, in1)), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Decrement the loop counter */ + blkCnt--; + } + pDst = (q15_t *)simd; + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = |A| */ + /* Read the input */ + in1 = *pSrc++; + + /* Calculate absolute value of input and then store the result in the destination buffer. */ + *pDst++ = (in1 > 0) ? in1 : (q15_t)__QSUB16(0, in1); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + q15_t in; /* Temporary input variable */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = |A| */ + /* Read the input */ + in = *pSrc++; + + /* Calculate absolute value of input and then store the result in the destination buffer. */ + *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of BasicAbs group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,130 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_abs_q31.c +* +* Description: Q31 vector absolute value. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicAbs + * @{ + */ + + +/** + * @brief Q31 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * The Q31 value -1 (0x80000000) will be saturated to the maximum allowable positive value 0x7FFFFFFF. + */ + +void arm_abs_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + q31_t in; /* Input value */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1, in2, in3, in4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = |A| */ + /* Calculate absolute of input (if -1 then saturated to 0x7fffffff) and then store the results in the destination buffer. */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + *pDst++ = (in1 > 0) ? in1 : (q31_t)__QSUB(0, in1); + *pDst++ = (in2 > 0) ? in2 : (q31_t)__QSUB(0, in2); + *pDst++ = (in3 > 0) ? in3 : (q31_t)__QSUB(0, in3); + *pDst++ = (in4 > 0) ? in4 : (q31_t)__QSUB(0, in4); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = |A| */ + /* Calculate absolute value of the input (if -1 then saturated to 0x7fffffff) and then store the results in the destination buffer. */ + in = *pSrc++; + *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); + + /* Decrement the loop counter */ + blkCnt--; + } + +} + +/** + * @} end of BasicAbs group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,157 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_abs_q7.c +* +* Description: Q7 vector absolute value. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicAbs + * @{ + */ + +/** + * @brief Q7 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + * + * \par Conditions for optimum performance + * Input and output buffers should be aligned by 32-bit + * + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * The Q7 value -1 (0x80) will be saturated to the maximum allowable positive value 0x7F. + */ + +void arm_abs_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + q7_t in; /* Input value1 */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1, in2, in3, in4; /* temporary input variables */ + q31_t out1, out2, out3, out4; /* temporary output variables */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = |A| */ + /* Read inputs */ + in1 = (q31_t) * pSrc; + in2 = (q31_t) * (pSrc + 1); + in3 = (q31_t) * (pSrc + 2); + + /* find absolute value */ + out1 = (in1 > 0) ? in1 : (q31_t)__QSUB8(0, in1); + + /* read input */ + in4 = (q31_t) * (pSrc + 3); + + /* find absolute value */ + out2 = (in2 > 0) ? in2 : (q31_t)__QSUB8(0, in2); + + /* store result to destination */ + *pDst = (q7_t) out1; + + /* find absolute value */ + out3 = (in3 > 0) ? in3 : (q31_t)__QSUB8(0, in3); + + /* find absolute value */ + out4 = (in4 > 0) ? in4 : (q31_t)__QSUB8(0, in4); + + /* store result to destination */ + *(pDst + 1) = (q7_t) out2; + + /* store result to destination */ + *(pDst + 2) = (q7_t) out3; + + /* store result to destination */ + *(pDst + 3) = (q7_t) out4; + + /* update pointers to process next samples */ + pSrc += 4u; + pDst += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; +#else + + /* Run the below code for Cortex-M0 */ + blkCnt = blockSize; + +#endif /* #define ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = |A| */ + /* Read the input */ + in = *pSrc++; + + /* Store the Absolute result in the destination buffer */ + *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? 0x7f : -in); + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicAbs group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,150 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_add_f32.c +* +* Description: Floating-point vector addition. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @defgroup BasicAdd Vector Addition + * + * Element-by-element addition of two vectors. + * + *
        
+ *     pDst[n] = pSrcA[n] + pSrcB[n],   0 <= n < blockSize.        
+ * 
+ * + * There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + * @addtogroup BasicAdd + * @{ + */ + +/** + * @brief Floating-point vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + +void arm_add_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t inA1, inA2, inA3, inA4; /* temporary input variabels */ + float32_t inB1, inB2, inB3, inB4; /* temporary input variables */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + + /* read four inputs from sourceA and four inputs from sourceB */ + inA1 = *pSrcA; + inB1 = *pSrcB; + inA2 = *(pSrcA + 1); + inB2 = *(pSrcB + 1); + inA3 = *(pSrcA + 2); + inB3 = *(pSrcB + 2); + inA4 = *(pSrcA + 3); + inB4 = *(pSrcB + 3); + + /* C = A + B */ + /* add and store result to destination */ + *pDst = inA1 + inB1; + *(pDst + 1) = inA2 + inB2; + *(pDst + 2) = inA3 + inB3; + *(pDst + 3) = inA4 + inB4; + + /* update pointers to process next samples */ + pSrcA += 4u; + pSrcB += 4u; + pDst += 4u; + + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + *pDst++ = (*pSrcA++) + (*pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicAdd group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,140 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_add_q15.c +* +* Description: Q15 vector addition +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicAdd + * @{ + */ + +/** + * @brief Q15 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q15 range [0x8000 0x7FFF] will be saturated. + */ + +void arm_add_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t inA1, inA2, inB1, inB2; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + inA1 = *__SIMD32(pSrcA)++; + inA2 = *__SIMD32(pSrcA)++; + inB1 = *__SIMD32(pSrcB)++; + inB2 = *__SIMD32(pSrcB)++; + + *__SIMD32(pDst)++ = __QADD16(inA1, inB1); + *__SIMD32(pDst)++ = __QADD16(inA2, inB2); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + *pDst++ = (q15_t) __QADD16(*pSrcA++, *pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + *pDst++ = (q15_t) __SSAT(((q31_t) * pSrcA++ + *pSrcB++), 16); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + +} + +/** + * @} end of BasicAdd group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_add_q31.c +* +* Description: Q31 vector addition. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicAdd + * @{ + */ + + +/** + * @brief Q31 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q31 range[0x80000000 0x7FFFFFFF] will be saturated. + */ + +void arm_add_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t inA1, inA2, inA3, inA4; + q31_t inB1, inB2, inB3, inB4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + inA1 = *pSrcA++; + inA2 = *pSrcA++; + inB1 = *pSrcB++; + inB2 = *pSrcB++; + + inA3 = *pSrcA++; + inA4 = *pSrcA++; + inB3 = *pSrcB++; + inB4 = *pSrcB++; + + *pDst++ = __QADD(inA1, inB1); + *pDst++ = __QADD(inA2, inB2); + *pDst++ = __QADD(inA3, inB3); + *pDst++ = __QADD(inA4, inB4); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + *pDst++ = __QADD(*pSrcA++, *pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrcA++ + *pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of BasicAdd group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_add_q7.c +* +* Description: Q7 vector addition. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicAdd + * @{ + */ + +/** + * @brief Q7 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q7 range [0x80 0x7F] will be saturated. + */ + +void arm_add_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + *__SIMD32(pDst)++ = __QADD8(*__SIMD32(pSrcA)++, *__SIMD32(pSrcB)++); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + *pDst++ = (q7_t) __SSAT(*pSrcA++ + *pSrcB++, 8); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A + B */ + /* Add and then store the results in the destination buffer. */ + *pDst++ = (q7_t) __SSAT((q15_t) * pSrcA++ + *pSrcB++, 8); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + +} + +/** + * @} end of BasicAdd group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,135 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_dot_prod_f32.c +* +* Description: Floating-point dot product. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @defgroup dot_prod Vector Dot Product + * + * Computes the dot product of two vectors. + * The vectors are multiplied element-by-element and then summed. + * + *
+ *     sum = pSrcA[0]*pSrcB[0] + pSrcA[1]*pSrcB[1] + ... + pSrcA[blockSize-1]*pSrcB[blockSize-1]
+ * 
+ * + * There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + * @addtogroup dot_prod + * @{ + */ + +/** + * @brief Dot product of floating-point vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + +void arm_dot_prod_f32( + float32_t * pSrcA, + float32_t * pSrcB, + uint32_t blockSize, + float32_t * result) +{ + float32_t sum = 0.0f; /* Temporary result storage */ + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + /* Calculate dot product and then store the result in a temporary buffer */ + sum += (*pSrcA++) * (*pSrcB++); + sum += (*pSrcA++) * (*pSrcB++); + sum += (*pSrcA++) * (*pSrcB++); + sum += (*pSrcA++) * (*pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + while(blkCnt > 0u) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + /* Calculate dot product and then store the result in a temporary buffer. */ + sum += (*pSrcA++) * (*pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } + /* Store the result back in the destination buffer */ + *result = sum; +} + +/** + * @} end of dot_prod group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,140 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_dot_prod_q15.c +* +* Description: Q15 dot product. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup dot_prod + * @{ + */ + +/** + * @brief Dot product of Q15 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The intermediate multiplications are in 1.15 x 1.15 = 2.30 format and these + * results are added to a 64-bit accumulator in 34.30 format. + * Nonsaturating additions are used and given that there are 33 guard bits in the accumulator + * there is no risk of overflow. + * The return result is in 34.30 format. + */ + +void arm_dot_prod_q15( + q15_t * pSrcA, + q15_t * pSrcB, + uint32_t blockSize, + q63_t * result) +{ + q63_t sum = 0; /* Temporary result storage */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + /* Calculate dot product and then store the result in a temporary buffer. */ + sum = __SMLALD(*__SIMD32(pSrcA)++, *__SIMD32(pSrcB)++, sum); + sum = __SMLALD(*__SIMD32(pSrcA)++, *__SIMD32(pSrcB)++, sum); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + /* Calculate dot product and then store the results in a temporary buffer. */ + sum = __SMLALD(*pSrcA++, *pSrcB++, sum); + + /* Decrement the loop counter */ + blkCnt--; + } + + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + /* Calculate dot product and then store the results in a temporary buffer. */ + sum += (q63_t) ((q31_t) * pSrcA++ * *pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + /* Store the result in the destination buffer in 34.30 format */ + *result = sum; + +} + +/** + * @} end of dot_prod group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,143 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_dot_prod_q31.c +* +* Description: Q31 dot product. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup dot_prod + * @{ + */ + +/** + * @brief Dot product of Q31 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The intermediate multiplications are in 1.31 x 1.31 = 2.62 format and these + * are truncated to 2.48 format by discarding the lower 14 bits. + * The 2.48 result is then added without saturation to a 64-bit accumulator in 16.48 format. + * There are 15 guard bits in the accumulator and there is no risk of overflow as long as + * the length of the vectors is less than 2^16 elements. + * The return result is in 16.48 format. + */ + +void arm_dot_prod_q31( + q31_t * pSrcA, + q31_t * pSrcB, + uint32_t blockSize, + q63_t * result) +{ + q63_t sum = 0; /* Temporary result storage */ + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t inA1, inA2, inA3, inA4; + q31_t inB1, inB2, inB3, inB4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + /* Calculate dot product and then store the result in a temporary buffer. */ + inA1 = *pSrcA++; + inA2 = *pSrcA++; + inA3 = *pSrcA++; + inA4 = *pSrcA++; + inB1 = *pSrcB++; + inB2 = *pSrcB++; + inB3 = *pSrcB++; + inB4 = *pSrcB++; + + sum += ((q63_t) inA1 * inB1) >> 14u; + sum += ((q63_t) inA2 * inB2) >> 14u; + sum += ((q63_t) inA3 * inB3) >> 14u; + sum += ((q63_t) inA4 * inB4) >> 14u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + while(blkCnt > 0u) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + /* Calculate dot product and then store the result in a temporary buffer. */ + sum += ((q63_t) * pSrcA++ * *pSrcB++) >> 14u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Store the result in the destination buffer in 16.48 format */ + *result = sum; +} + +/** + * @} end of dot_prod group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,159 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_dot_prod_q7.c +* +* Description: Q7 dot product. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup dot_prod + * @{ + */ + +/** + * @brief Dot product of Q7 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The intermediate multiplications are in 1.7 x 1.7 = 2.14 format and these + * results are added to an accumulator in 18.14 format. + * Nonsaturating additions are used and there is no danger of wrap around as long as + * the vectors are less than 2^18 elements long. + * The return result is in 18.14 format. + */ + +void arm_dot_prod_q7( + q7_t * pSrcA, + q7_t * pSrcB, + uint32_t blockSize, + q31_t * result) +{ + uint32_t blkCnt; /* loop counter */ + + q31_t sum = 0; /* Temporary variables to store output */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t input1, input2; /* Temporary variables to store input */ + q31_t inA1, inA2, inB1, inB2; /* Temporary variables to store input */ + + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* read 4 samples at a time from sourceA */ + input1 = *__SIMD32(pSrcA)++; + /* read 4 samples at a time from sourceB */ + input2 = *__SIMD32(pSrcB)++; + + /* extract two q7_t samples to q15_t samples */ + inA1 = __SXTB16(__ROR(input1, 8)); + /* extract reminaing two samples */ + inA2 = __SXTB16(input1); + /* extract two q7_t samples to q15_t samples */ + inB1 = __SXTB16(__ROR(input2, 8)); + /* extract reminaing two samples */ + inB2 = __SXTB16(input2); + + /* multiply and accumulate two samples at a time */ + sum = __SMLAD(inA1, inB1, sum); + sum = __SMLAD(inA2, inB2, sum); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + /* Dot product and then store the results in a temporary buffer. */ + sum = __SMLAD(*pSrcA++, *pSrcB++, sum); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + /* Dot product and then store the results in a temporary buffer. */ + sum += (q31_t) ((q15_t) * pSrcA++ * *pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + /* Store the result in the destination buffer in 18.14 format */ + *result = sum; +} + +/** + * @} end of dot_prod group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,174 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mult_f32.c +* +* Description: Floating-point vector multiplication. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @defgroup BasicMult Vector Multiplication + * + * Element-by-element multiplication of two vectors. + * + *
        
+ *     pDst[n] = pSrcA[n] * pSrcB[n],   0 <= n < blockSize.        
+ * 
+ * + * There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + * @addtogroup BasicMult + * @{ + */ + +/** + * @brief Floating-point vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + +void arm_mult_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counters */ +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t inA1, inA2, inA3, inA4; /* temporary input variables */ + float32_t inB1, inB2, inB3, inB4; /* temporary input variables */ + float32_t out1, out2, out3, out4; /* temporary output variables */ + + /* loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A * B */ + /* Multiply the inputs and store the results in output buffer */ + /* read sample from sourceA */ + inA1 = *pSrcA; + /* read sample from sourceB */ + inB1 = *pSrcB; + /* read sample from sourceA */ + inA2 = *(pSrcA + 1); + /* read sample from sourceB */ + inB2 = *(pSrcB + 1); + + /* out = sourceA * sourceB */ + out1 = inA1 * inB1; + + /* read sample from sourceA */ + inA3 = *(pSrcA + 2); + /* read sample from sourceB */ + inB3 = *(pSrcB + 2); + + /* out = sourceA * sourceB */ + out2 = inA2 * inB2; + + /* read sample from sourceA */ + inA4 = *(pSrcA + 3); + + /* store result to destination buffer */ + *pDst = out1; + + /* read sample from sourceB */ + inB4 = *(pSrcB + 3); + + /* out = sourceA * sourceB */ + out3 = inA3 * inB3; + + /* store result to destination buffer */ + *(pDst + 1) = out2; + + /* out = sourceA * sourceB */ + out4 = inA4 * inB4; + /* store result to destination buffer */ + *(pDst + 2) = out3; + /* store result to destination buffer */ + *(pDst + 3) = out4; + + + /* update pointers to process next samples */ + pSrcA += 4u; + pSrcB += 4u; + pDst += 4u; + + /* Decrement the blockSize loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A * B */ + /* Multiply the inputs and store the results in output buffer */ + *pDst++ = (*pSrcA++) * (*pSrcB++); + + /* Decrement the blockSize loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,154 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. October 2015 +* $Revision: V.1.4.5 a +* +* Project: CMSIS DSP Library +* Title: arm_mult_q15.c +* +* Description: Q15 vector multiplication. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicMult + * @{ + */ + + +/** + * @brief Q15 vector multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q15 range [0x8000 0x7FFF] will be saturated. + */ + +void arm_mult_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counters */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t inA1, inA2, inB1, inB2; /* temporary input variables */ + q15_t out1, out2, out3, out4; /* temporary output variables */ + q31_t mul1, mul2, mul3, mul4; /* temporary variables */ + + /* loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* read two samples at a time from sourceA */ + inA1 = *__SIMD32(pSrcA)++; + /* read two samples at a time from sourceB */ + inB1 = *__SIMD32(pSrcB)++; + /* read two samples at a time from sourceA */ + inA2 = *__SIMD32(pSrcA)++; + /* read two samples at a time from sourceB */ + inB2 = *__SIMD32(pSrcB)++; + + /* multiply mul = sourceA * sourceB */ + mul1 = (q31_t) ((q15_t) (inA1 >> 16) * (q15_t) (inB1 >> 16)); + mul2 = (q31_t) ((q15_t) inA1 * (q15_t) inB1); + mul3 = (q31_t) ((q15_t) (inA2 >> 16) * (q15_t) (inB2 >> 16)); + mul4 = (q31_t) ((q15_t) inA2 * (q15_t) inB2); + + /* saturate result to 16 bit */ + out1 = (q15_t) __SSAT(mul1 >> 15, 16); + out2 = (q15_t) __SSAT(mul2 >> 15, 16); + out3 = (q15_t) __SSAT(mul3 >> 15, 16); + out4 = (q15_t) __SSAT(mul4 >> 15, 16); + + /* store the result */ +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst)++ = __PKHBT(out2, out1, 16); + *__SIMD32(pDst)++ = __PKHBT(out4, out3, 16); + +#else + + *__SIMD32(pDst)++ = __PKHBT(out2, out1, 16); + *__SIMD32(pDst)++ = __PKHBT(out4, out3, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Decrement the blockSize loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + while(blkCnt > 0u) + { + /* C = A * B */ + /* Multiply the inputs and store the result in the destination buffer */ + *pDst++ = (q15_t) __SSAT((((q31_t) (*pSrcA++) * (*pSrcB++)) >> 15), 16); + + /* Decrement the blockSize loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,160 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mult_q31.c +* +* Description: Q31 vector multiplication. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicMult + * @{ + */ + +/** + * @brief Q31 vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q31 range[0x80000000 0x7FFFFFFF] will be saturated. + */ + +void arm_mult_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counters */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t inA1, inA2, inA3, inA4; /* temporary input variables */ + q31_t inB1, inB2, inB3, inB4; /* temporary input variables */ + q31_t out1, out2, out3, out4; /* temporary output variables */ + + /* loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A * B */ + /* Multiply the inputs and then store the results in the destination buffer. */ + inA1 = *pSrcA++; + inA2 = *pSrcA++; + inA3 = *pSrcA++; + inA4 = *pSrcA++; + inB1 = *pSrcB++; + inB2 = *pSrcB++; + inB3 = *pSrcB++; + inB4 = *pSrcB++; + + out1 = ((q63_t) inA1 * inB1) >> 32; + out2 = ((q63_t) inA2 * inB2) >> 32; + out3 = ((q63_t) inA3 * inB3) >> 32; + out4 = ((q63_t) inA4 * inB4) >> 32; + + out1 = __SSAT(out1, 31); + out2 = __SSAT(out2, 31); + out3 = __SSAT(out3, 31); + out4 = __SSAT(out4, 31); + + *pDst++ = out1 << 1u; + *pDst++ = out2 << 1u; + *pDst++ = out3 << 1u; + *pDst++ = out4 << 1u; + + /* Decrement the blockSize loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A * B */ + /* Multiply the inputs and then store the results in the destination buffer. */ + inA1 = *pSrcA++; + inB1 = *pSrcB++; + out1 = ((q63_t) inA1 * inB1) >> 32; + out1 = __SSAT(out1, 31); + *pDst++ = out1 << 1u; + + /* Decrement the blockSize loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + + while(blkCnt > 0u) + { + /* C = A * B */ + /* Multiply the inputs and then store the results in the destination buffer. */ + *pDst++ = + (q31_t) clip_q63_to_q31(((q63_t) (*pSrcA++) * (*pSrcB++)) >> 31); + + /* Decrement the blockSize loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ +} + +/** + * @} end of BasicMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,127 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mult_q7.c +* +* Description: Q7 vector multiplication. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicMult + * @{ + */ + +/** + * @brief Q7 vector multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q7 range [0x80 0x7F] will be saturated. + */ + +void arm_mult_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counters */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q7_t out1, out2, out3, out4; /* Temporary variables to store the product */ + + /* loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A * B */ + /* Multiply the inputs and store the results in temporary variables */ + out1 = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + out2 = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + out3 = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + out4 = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + + /* Store the results of 4 inputs in the destination buffer in single cycle by packing */ + *__SIMD32(pDst)++ = __PACKq7(out1, out2, out3, out4); + + /* Decrement the blockSize loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + while(blkCnt > 0u) + { + /* C = A * B */ + /* Multiply the inputs and store the result in the destination buffer */ + *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + + /* Decrement the blockSize loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,146 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_negate_f32.c +* +* Description: Negates floating-point vectors. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @defgroup negate Vector Negate + * + * Negates the elements of a vector. + * + *
        
+ *     pDst[n] = -pSrc[n],   0 <= n < blockSize.        
+ * 
+ * + * The functions support in-place computation allowing the source and + * destination pointers to reference the same memory buffer. + * There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + * @addtogroup negate + * @{ + */ + +/** + * @brief Negates the elements of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + +void arm_negate_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t in1, in2, in3, in4; /* temporary variables */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* read inputs from source */ + in1 = *pSrc; + in2 = *(pSrc + 1); + in3 = *(pSrc + 2); + in4 = *(pSrc + 3); + + /* negate the input */ + in1 = -in1; + in2 = -in2; + in3 = -in3; + in4 = -in4; + + /* store the result to destination */ + *pDst = in1; + *(pDst + 1) = in2; + *(pDst + 2) = in3; + *(pDst + 3) = in4; + + /* update pointers to process next samples */ + pSrc += 4u; + pDst += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = -A */ + /* Negate and then store the results in the destination buffer. */ + *pDst++ = -*pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of negate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,142 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_negate_q15.c +* +* Description: Negates Q15 vectors. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup negate + * @{ + */ + +/** + * @brief Negates the elements of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * \par Conditions for optimum performance + * Input and output buffers should be aligned by 32-bit + * + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * The Q15 value -1 (0x8000) will be saturated to the maximum allowable positive value 0x7FFF. + */ + +void arm_negate_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + q15_t in; + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t in1, in2; /* Temporary variables */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = -A */ + /* Read two inputs at a time */ + in1 = _SIMD32_OFFSET(pSrc); + in2 = _SIMD32_OFFSET(pSrc + 2); + + /* negate two samples at a time */ + in1 = __QSUB16(0, in1); + + /* negate two samples at a time */ + in2 = __QSUB16(0, in2); + + /* store the result to destination 2 samples at a time */ + _SIMD32_OFFSET(pDst) = in1; + /* store the result to destination 2 samples at a time */ + _SIMD32_OFFSET(pDst + 2) = in2; + + + /* update pointers to process next samples */ + pSrc += 4u; + pDst += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = -A */ + /* Negate and then store the result in the destination buffer. */ + in = *pSrc++; + *pDst++ = (in == (q15_t) 0x8000) ? 0x7fff : -in; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of negate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,129 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_negate_q31.c +* +* Description: Negates Q31 vectors. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup negate + * @{ + */ + +/** + * @brief Negates the elements of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * The Q31 value -1 (0x80000000) will be saturated to the maximum allowable positive value 0x7FFFFFFF. + */ + +void arm_negate_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t in; /* Temporary variable */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1, in2, in3, in4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = -A */ + /* Negate and then store the results in the destination buffer. */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + *pDst++ = __QSUB(0, in1); + *pDst++ = __QSUB(0, in2); + *pDst++ = __QSUB(0, in3); + *pDst++ = __QSUB(0, in4); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + while(blkCnt > 0u) + { + /* C = -A */ + /* Negate and then store the result in the destination buffer. */ + in = *pSrc++; + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of negate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,125 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_negate_q7.c +* +* Description: Negates Q7 vectors. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup negate + * @{ + */ + +/** + * @brief Negates the elements of a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * The Q7 value -1 (0x80) will be saturated to the maximum allowable positive value 0x7F. + */ + +void arm_negate_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + q7_t in; + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t input; /* Input values1-4 */ + q31_t zero = 0x00000000; + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = -A */ + /* Read four inputs */ + input = *__SIMD32(pSrc)++; + + /* Store the Negated results in the destination buffer in a single cycle by packing the results */ + *__SIMD32(pDst)++ = __QSUB8(zero, input); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = -A */ + /* Negate and then store the results in the destination buffer. */ \ + in = *pSrc++; + *pDst++ = (in == (q7_t) 0x80) ? 0x7f : -in; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of negate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,165 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_offset_f32.c +* +* Description: Floating-point vector offset. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @defgroup offset Vector Offset + * + * Adds a constant offset to each element of a vector. + * + *
        
+ *     pDst[n] = pSrc[n] + offset,   0 <= n < blockSize.        
+ * 
+ * + * The functions support in-place computation allowing the source and + * destination pointers to reference the same memory buffer. + * There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + * @addtogroup offset + * @{ + */ + +/** + * @brief Adds a constant offset to a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + +void arm_offset_f32( + float32_t * pSrc, + float32_t offset, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t in1, in2, in3, in4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the results in the destination buffer. */ + /* read samples from source */ + in1 = *pSrc; + in2 = *(pSrc + 1); + + /* add offset to input */ + in1 = in1 + offset; + + /* read samples from source */ + in3 = *(pSrc + 2); + + /* add offset to input */ + in2 = in2 + offset; + + /* read samples from source */ + in4 = *(pSrc + 3); + + /* add offset to input */ + in3 = in3 + offset; + + /* store result to destination */ + *pDst = in1; + + /* add offset to input */ + in4 = in4 + offset; + + /* store result to destination */ + *(pDst + 1) = in2; + + /* store result to destination */ + *(pDst + 2) = in3; + + /* store result to destination */ + *(pDst + 3) = in4; + + /* update pointers to process next samples */ + pSrc += 4u; + pDst += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the result in the destination buffer. */ + *pDst++ = (*pSrc++) + offset; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of offset group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,136 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_offset_q15.c +* +* Description: Q15 vector offset. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup offset + * @{ + */ + +/** + * @brief Adds a constant offset to a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. + */ + +void arm_offset_q15( + q15_t * pSrc, + q15_t offset, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t offset_packed; /* Offset packed to 32 bit */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* Offset is packed to 32 bit in order to use SIMD32 for addition */ + offset_packed = __PKHBT(offset, offset, 16); + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the results in the destination buffer, 2 samples at a time. */ + *__SIMD32(pDst)++ = __QADD16(*__SIMD32(pSrc)++, offset_packed); + *__SIMD32(pDst)++ = __QADD16(*__SIMD32(pSrc)++, offset_packed); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the results in the destination buffer. */ + *pDst++ = (q15_t) __QADD16(*pSrc++, offset); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the results in the destination buffer. */ + *pDst++ = (q15_t) __SSAT(((q31_t) * pSrc++ + offset), 16); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of offset group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,140 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_offset_q31.c +* +* Description: Q31 vector offset. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup offset + * @{ + */ + +/** + * @brief Adds a constant offset to a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] are saturated. + */ + +void arm_offset_q31( + q31_t * pSrc, + q31_t offset, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1, in2, in3, in4; + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the results in the destination buffer. */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + *pDst++ = __QADD(in1, offset); + *pDst++ = __QADD(in2, offset); + *pDst++ = __QADD(in3, offset); + *pDst++ = __QADD(in4, offset); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the result in the destination buffer. */ + *pDst++ = __QADD(*pSrc++, offset); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the result in the destination buffer. */ + *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of offset group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,135 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_offset_q7.c +* +* Description: Q7 vector offset. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup offset + * @{ + */ + +/** + * @brief Adds a constant offset to a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q7 range [0x80 0x7F] are saturated. + */ + +void arm_offset_q7( + q7_t * pSrc, + q7_t offset, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t offset_packed; /* Offset packed to 32 bit */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* Offset is packed to 32 bit in order to use SIMD32 for addition */ + offset_packed = __PACKq7(offset, offset, offset, offset); + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the results in the destination bufferfor 4 samples at a time. */ + *__SIMD32(pDst)++ = __QADD8(*__SIMD32(pSrc)++, offset_packed); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the result in the destination buffer. */ + *pDst++ = (q7_t) __SSAT(*pSrc++ + offset, 8); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A + offset */ + /* Add offset and then store the result in the destination buffer. */ + *pDst++ = (q7_t) __SSAT((q15_t) * pSrc++ + offset, 8); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of offset group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,169 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_scale_f32.c +* +* Description: Multiplies a floating-point vector by a scalar. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @defgroup scale Vector Scale + * + * Multiply a vector by a scalar value. For floating-point data, the algorithm used is: + * + *
        
+ *     pDst[n] = pSrc[n] * scale,   0 <= n < blockSize.        
+ * 
+ * + * In the fixed-point Q7, Q15, and Q31 functions, scale is represented by + * a fractional multiplication scaleFract and an arithmetic shift shift. + * The shift allows the gain of the scaling operation to exceed 1.0. + * The algorithm used with fixed-point data is: + * + *
        
+ *     pDst[n] = (pSrc[n] * scaleFract) << shift,   0 <= n < blockSize.        
+ * 
+ * + * The overall scale factor applied to the fixed-point data is + *
        
+ *     scale = scaleFract * 2^shift.        
+ * 
+ * + * The functions support in-place computation allowing the source and destination + * pointers to reference the same memory buffer. + */ + +/** + * @addtogroup scale + * @{ + */ + +/** + * @brief Multiplies a floating-point vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scale scale factor to be applied + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + +void arm_scale_f32( + float32_t * pSrc, + float32_t scale, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t in1, in2, in3, in4; /* temporary variabels */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A * scale */ + /* Scale the input and then store the results in the destination buffer. */ + /* read input samples from source */ + in1 = *pSrc; + in2 = *(pSrc + 1); + + /* multiply with scaling factor */ + in1 = in1 * scale; + + /* read input sample from source */ + in3 = *(pSrc + 2); + + /* multiply with scaling factor */ + in2 = in2 * scale; + + /* read input sample from source */ + in4 = *(pSrc + 3); + + /* multiply with scaling factor */ + in3 = in3 * scale; + in4 = in4 * scale; + /* store the result to destination */ + *pDst = in1; + *(pDst + 1) = in2; + *(pDst + 2) = in3; + *(pDst + 3) = in4; + + /* update pointers to process next samples */ + pSrc += 4u; + pDst += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A * scale */ + /* Scale the input and then store the result in the destination buffer. */ + *pDst++ = (*pSrc++) * scale; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of scale group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,162 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_scale_q15.c +* +* Description: Multiplies a Q15 vector by a scalar. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup scale + * @{ + */ + +/** + * @brief Multiplies a Q15 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The input data *pSrc and scaleFract are in 1.15 format. + * These are multiplied to yield a 2.30 intermediate result and this is shifted with saturation to 1.15 format. + */ + + +void arm_scale_q15( + q15_t * pSrc, + q15_t scaleFract, + int8_t shift, + q15_t * pDst, + uint32_t blockSize) +{ + int8_t kShift = 15 - shift; /* shift to apply after scaling */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q15_t in1, in2, in3, in4; + q31_t inA1, inA2; /* Temporary variables */ + q31_t out1, out2, out3, out4; + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Reading 2 inputs from memory */ + inA1 = *__SIMD32(pSrc)++; + inA2 = *__SIMD32(pSrc)++; + + /* C = A * scale */ + /* Scale the inputs and then store the 2 results in the destination buffer + * in single cycle by packing the outputs */ + out1 = (q31_t) ((q15_t) (inA1 >> 16) * scaleFract); + out2 = (q31_t) ((q15_t) inA1 * scaleFract); + out3 = (q31_t) ((q15_t) (inA2 >> 16) * scaleFract); + out4 = (q31_t) ((q15_t) inA2 * scaleFract); + + /* apply shifting */ + out1 = out1 >> kShift; + out2 = out2 >> kShift; + out3 = out3 >> kShift; + out4 = out4 >> kShift; + + /* saturate the output */ + in1 = (q15_t) (__SSAT(out1, 16)); + in2 = (q15_t) (__SSAT(out2, 16)); + in3 = (q15_t) (__SSAT(out3, 16)); + in4 = (q15_t) (__SSAT(out4, 16)); + + /* store the result to destination */ + *__SIMD32(pDst)++ = __PKHBT(in2, in1, 16); + *__SIMD32(pDst)++ = __PKHBT(in4, in3, 16); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A * scale */ + /* Scale the input and then store the result in the destination buffer. */ + *pDst++ = (q15_t) (__SSAT(((*pSrc++) * scaleFract) >> kShift, 16)); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A * scale */ + /* Scale the input and then store the result in the destination buffer. */ + *pDst++ = (q15_t) (__SSAT(((q31_t) * pSrc++ * scaleFract) >> kShift, 16)); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of scale group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,239 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_scale_q31.c +* +* Description: Multiplies a Q31 vector by a scalar. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup scale + * @{ + */ + +/** + * @brief Multiplies a Q31 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The input data *pSrc and scaleFract are in 1.31 format. + * These are multiplied to yield a 2.62 intermediate result and this is shifted with saturation to 1.31 format. + */ + +void arm_scale_q31( + q31_t * pSrc, + q31_t scaleFract, + int8_t shift, + q31_t * pDst, + uint32_t blockSize) +{ + int8_t kShift = shift + 1; /* Shift to apply after scaling */ + int8_t sign = (kShift & 0x80); + uint32_t blkCnt; /* loop counter */ + q31_t in, out; + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t in1, in2, in3, in4; /* temporary input variables */ + q31_t out1, out2, out3, out4; /* temporary output variabels */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + if(sign == 0u) + { + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* read four inputs from source */ + in1 = *pSrc; + in2 = *(pSrc + 1); + in3 = *(pSrc + 2); + in4 = *(pSrc + 3); + + /* multiply input with scaler value */ + in1 = ((q63_t) in1 * scaleFract) >> 32; + in2 = ((q63_t) in2 * scaleFract) >> 32; + in3 = ((q63_t) in3 * scaleFract) >> 32; + in4 = ((q63_t) in4 * scaleFract) >> 32; + + /* apply shifting */ + out1 = in1 << kShift; + out2 = in2 << kShift; + + /* saturate the results. */ + if(in1 != (out1 >> kShift)) + out1 = 0x7FFFFFFF ^ (in1 >> 31); + + if(in2 != (out2 >> kShift)) + out2 = 0x7FFFFFFF ^ (in2 >> 31); + + out3 = in3 << kShift; + out4 = in4 << kShift; + + *pDst = out1; + *(pDst + 1) = out2; + + if(in3 != (out3 >> kShift)) + out3 = 0x7FFFFFFF ^ (in3 >> 31); + + if(in4 != (out4 >> kShift)) + out4 = 0x7FFFFFFF ^ (in4 >> 31); + + /* Store result destination */ + *(pDst + 2) = out3; + *(pDst + 3) = out4; + + /* Update pointers to process next sampels */ + pSrc += 4u; + pDst += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + } + else + { + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* read four inputs from source */ + in1 = *pSrc; + in2 = *(pSrc + 1); + in3 = *(pSrc + 2); + in4 = *(pSrc + 3); + + /* multiply input with scaler value */ + in1 = ((q63_t) in1 * scaleFract) >> 32; + in2 = ((q63_t) in2 * scaleFract) >> 32; + in3 = ((q63_t) in3 * scaleFract) >> 32; + in4 = ((q63_t) in4 * scaleFract) >> 32; + + /* apply shifting */ + out1 = in1 >> -kShift; + out2 = in2 >> -kShift; + + out3 = in3 >> -kShift; + out4 = in4 >> -kShift; + + /* Store result destination */ + *pDst = out1; + *(pDst + 1) = out2; + + *(pDst + 2) = out3; + *(pDst + 3) = out4; + + /* Update pointers to process next sampels */ + pSrc += 4u; + pDst += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + } + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + if(sign == 0) + { + while(blkCnt > 0u) + { + /* C = A * scale */ + /* Scale the input and then store the result in the destination buffer. */ + in = *pSrc++; + in = ((q63_t) in * scaleFract) >> 32; + + out = in << kShift; + + if(in != (out >> kShift)) + out = 0x7FFFFFFF ^ (in >> 31); + + *pDst++ = out; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + while(blkCnt > 0u) + { + /* C = A * scale */ + /* Scale the input and then store the result in the destination buffer. */ + in = *pSrc++; + in = ((q63_t) in * scaleFract) >> 32; + + out = in >> -kShift; + + *pDst++ = out; + + /* Decrement the loop counter */ + blkCnt--; + } + + } +} + +/** + * @} end of scale group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,149 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_scale_q7.c +* +* Description: Multiplies a Q7 vector by a scalar. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup scale + * @{ + */ + +/** + * @brief Multiplies a Q7 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The input data *pSrc and scaleFract are in 1.7 format. + * These are multiplied to yield a 2.14 intermediate result and this is shifted with saturation to 1.7 format. + */ + +void arm_scale_q7( + q7_t * pSrc, + q7_t scaleFract, + int8_t shift, + q7_t * pDst, + uint32_t blockSize) +{ + int8_t kShift = 7 - shift; /* shift to apply after scaling */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q7_t in1, in2, in3, in4, out1, out2, out3, out4; /* Temporary variables to store input & output */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Reading 4 inputs from memory */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + /* C = A * scale */ + /* Scale the inputs and then store the results in the temporary variables. */ + out1 = (q7_t) (__SSAT(((in1) * scaleFract) >> kShift, 8)); + out2 = (q7_t) (__SSAT(((in2) * scaleFract) >> kShift, 8)); + out3 = (q7_t) (__SSAT(((in3) * scaleFract) >> kShift, 8)); + out4 = (q7_t) (__SSAT(((in4) * scaleFract) >> kShift, 8)); + + /* Packing the individual outputs into 32bit and storing in + * destination buffer in single write */ + *__SIMD32(pDst)++ = __PACKq7(out1, out2, out3, out4); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A * scale */ + /* Scale the input and then store the result in the destination buffer. */ + *pDst++ = (q7_t) (__SSAT(((*pSrc++) * scaleFract) >> kShift, 8)); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A * scale */ + /* Scale the input and then store the result in the destination buffer. */ + *pDst++ = (q7_t) (__SSAT((((q15_t) * pSrc++ * scaleFract) >> kShift), 8)); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of scale group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_shift_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_shift_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,248 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_shift_q15.c +* +* Description: Shifts the elements of a Q15 vector by a specified number of bits. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup shift + * @{ + */ + +/** + * @brief Shifts the elements of a Q15 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q15 range [0x8000 0x7FFF] will be saturated. + */ + +void arm_shift_q15( + q15_t * pSrc, + int8_t shiftBits, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + uint8_t sign; /* Sign of shiftBits */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + + q15_t in1, in2; /* Temporary variables */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* Getting the sign of shiftBits */ + sign = (shiftBits & 0x80); + + /* If the shift value is positive then do right shift else left shift */ + if(sign == 0u) + { + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Read 2 inputs */ + in1 = *pSrc++; + in2 = *pSrc++; + /* C = A << shiftBits */ + /* Shift the inputs and then store the results in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst)++ = __PKHBT(__SSAT((in1 << shiftBits), 16), + __SSAT((in2 << shiftBits), 16), 16); + +#else + + *__SIMD32(pDst)++ = __PKHBT(__SSAT((in2 << shiftBits), 16), + __SSAT((in1 << shiftBits), 16), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + in1 = *pSrc++; + in2 = *pSrc++; + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst)++ = __PKHBT(__SSAT((in1 << shiftBits), 16), + __SSAT((in2 << shiftBits), 16), 16); + +#else + + *__SIMD32(pDst)++ = __PKHBT(__SSAT((in2 << shiftBits), 16), + __SSAT((in1 << shiftBits), 16), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A << shiftBits */ + /* Shift and then store the results in the destination buffer. */ + *pDst++ = __SSAT((*pSrc++ << shiftBits), 16); + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Read 2 inputs */ + in1 = *pSrc++; + in2 = *pSrc++; + + /* C = A >> shiftBits */ + /* Shift the inputs and then store the results in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst)++ = __PKHBT((in1 >> -shiftBits), + (in2 >> -shiftBits), 16); + +#else + + *__SIMD32(pDst)++ = __PKHBT((in2 >> -shiftBits), + (in1 >> -shiftBits), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + in1 = *pSrc++; + in2 = *pSrc++; + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst)++ = __PKHBT((in1 >> -shiftBits), + (in2 >> -shiftBits), 16); + +#else + + *__SIMD32(pDst)++ = __PKHBT((in2 >> -shiftBits), + (in1 >> -shiftBits), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A >> shiftBits */ + /* Shift the inputs and then store the results in the destination buffer. */ + *pDst++ = (*pSrc++ >> -shiftBits); + + /* Decrement the loop counter */ + blkCnt--; + } + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Getting the sign of shiftBits */ + sign = (shiftBits & 0x80); + + /* If the shift value is positive then do right shift else left shift */ + if(sign == 0u) + { + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A << shiftBits */ + /* Shift and then store the results in the destination buffer. */ + *pDst++ = __SSAT(((q31_t) * pSrc++ << shiftBits), 16); + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A >> shiftBits */ + /* Shift the inputs and then store the results in the destination buffer. */ + *pDst++ = (*pSrc++ >> -shiftBits); + + /* Decrement the loop counter */ + blkCnt--; + } + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of shift group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_shift_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_shift_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,203 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_shift_q31.c +* +* Description: Shifts the elements of a Q31 vector by a specified number of bits. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ +/** + * @defgroup shift Vector Shift + * + * Shifts the elements of a fixed-point vector by a specified number of bits. + * There are separate functions for Q7, Q15, and Q31 data types. + * The underlying algorithm used is: + * + *
        
+ *     pDst[n] = pSrc[n] << shift,   0 <= n < blockSize.        
+ * 
+ * + * If shift is positive then the elements of the vector are shifted to the left. + * If shift is negative then the elements of the vector are shifted to the right. + * + * The functions support in-place computation allowing the source and destination + * pointers to reference the same memory buffer. + */ + +/** + * @addtogroup shift + * @{ + */ + +/** + * @brief Shifts the elements of a Q31 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] will be saturated. + */ + +void arm_shift_q31( + q31_t * pSrc, + int8_t shiftBits, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + uint8_t sign = (shiftBits & 0x80); /* Sign of shiftBits */ + +#ifndef ARM_MATH_CM0_FAMILY + + q31_t in1, in2, in3, in4; /* Temporary input variables */ + q31_t out1, out2, out3, out4; /* Temporary output variables */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + + if(sign == 0u) + { + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A << shiftBits */ + /* Shift the input and then store the results in the destination buffer. */ + in1 = *pSrc; + in2 = *(pSrc + 1); + out1 = in1 << shiftBits; + in3 = *(pSrc + 2); + out2 = in2 << shiftBits; + in4 = *(pSrc + 3); + if(in1 != (out1 >> shiftBits)) + out1 = 0x7FFFFFFF ^ (in1 >> 31); + + if(in2 != (out2 >> shiftBits)) + out2 = 0x7FFFFFFF ^ (in2 >> 31); + + *pDst = out1; + out3 = in3 << shiftBits; + *(pDst + 1) = out2; + out4 = in4 << shiftBits; + + if(in3 != (out3 >> shiftBits)) + out3 = 0x7FFFFFFF ^ (in3 >> 31); + + if(in4 != (out4 >> shiftBits)) + out4 = 0x7FFFFFFF ^ (in4 >> 31); + + *(pDst + 2) = out3; + *(pDst + 3) = out4; + + /* Update destination pointer to process next sampels */ + pSrc += 4u; + pDst += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A >> shiftBits */ + /* Shift the input and then store the results in the destination buffer. */ + in1 = *pSrc; + in2 = *(pSrc + 1); + in3 = *(pSrc + 2); + in4 = *(pSrc + 3); + + *pDst = (in1 >> -shiftBits); + *(pDst + 1) = (in2 >> -shiftBits); + *(pDst + 2) = (in3 >> -shiftBits); + *(pDst + 3) = (in4 >> -shiftBits); + + + pSrc += 4u; + pDst += 4u; + + blkCnt--; + } + + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + while(blkCnt > 0u) + { + /* C = A (>> or <<) shiftBits */ + /* Shift the input and then store the result in the destination buffer. */ + *pDst++ = (sign == 0u) ? clip_q63_to_q31((q63_t) * pSrc++ << shiftBits) : + (*pSrc++ >> -shiftBits); + + /* Decrement the loop counter */ + blkCnt--; + } + + +} + +/** + * @} end of shift group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_shift_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_shift_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,220 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_shift_q7.c +* +* Description: Processing function for the Q7 Shifting +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup shift + * @{ + */ + + +/** + * @brief Shifts the elements of a Q7 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + * + * \par Conditions for optimum performance + * Input and output buffers should be aligned by 32-bit + * + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q7 range [0x8 0x7F] will be saturated. + */ + +void arm_shift_q7( + q7_t * pSrc, + int8_t shiftBits, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + uint8_t sign; /* Sign of shiftBits */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q7_t in1; /* Input value1 */ + q7_t in2; /* Input value2 */ + q7_t in3; /* Input value3 */ + q7_t in4; /* Input value4 */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* Getting the sign of shiftBits */ + sign = (shiftBits & 0x80); + + /* If the shift value is positive then do right shift else left shift */ + if(sign == 0u) + { + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A << shiftBits */ + /* Read 4 inputs */ + in1 = *pSrc; + in2 = *(pSrc + 1); + in3 = *(pSrc + 2); + in4 = *(pSrc + 3); + + /* Store the Shifted result in the destination buffer in single cycle by packing the outputs */ + *__SIMD32(pDst)++ = __PACKq7(__SSAT((in1 << shiftBits), 8), + __SSAT((in2 << shiftBits), 8), + __SSAT((in3 << shiftBits), 8), + __SSAT((in4 << shiftBits), 8)); + /* Update source pointer to process next sampels */ + pSrc += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A << shiftBits */ + /* Shift the input and then store the result in the destination buffer. */ + *pDst++ = (q7_t) __SSAT((*pSrc++ << shiftBits), 8); + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + shiftBits = -shiftBits; + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A >> shiftBits */ + /* Read 4 inputs */ + in1 = *pSrc; + in2 = *(pSrc + 1); + in3 = *(pSrc + 2); + in4 = *(pSrc + 3); + + /* Store the Shifted result in the destination buffer in single cycle by packing the outputs */ + *__SIMD32(pDst)++ = __PACKq7((in1 >> shiftBits), (in2 >> shiftBits), + (in3 >> shiftBits), (in4 >> shiftBits)); + + + pSrc += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A >> shiftBits */ + /* Shift the input and then store the result in the destination buffer. */ + in1 = *pSrc++; + *pDst++ = (in1 >> shiftBits); + + /* Decrement the loop counter */ + blkCnt--; + } + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Getting the sign of shiftBits */ + sign = (shiftBits & 0x80); + + /* If the shift value is positive then do right shift else left shift */ + if(sign == 0u) + { + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A << shiftBits */ + /* Shift the input and then store the result in the destination buffer. */ + *pDst++ = (q7_t) __SSAT(((q15_t) * pSrc++ << shiftBits), 8); + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A >> shiftBits */ + /* Shift the input and then store the result in the destination buffer. */ + *pDst++ = (*pSrc++ >> -shiftBits); + + /* Decrement the loop counter */ + blkCnt--; + } + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ +} + +/** + * @} end of shift group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,150 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_sub_f32.c +* +* Description: Floating-point vector subtraction. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @defgroup BasicSub Vector Subtraction + * + * Element-by-element subtraction of two vectors. + * + *
        
+ *     pDst[n] = pSrcA[n] - pSrcB[n],   0 <= n < blockSize.        
+ * 
+ * + * There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + * @addtogroup BasicSub + * @{ + */ + + +/** + * @brief Floating-point vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + +void arm_sub_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t inA1, inA2, inA3, inA4; /* temporary variables */ + float32_t inB1, inB2, inB3, inB4; /* temporary variables */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the results in the destination buffer. */ + /* Read 4 input samples from sourceA and sourceB */ + inA1 = *pSrcA; + inB1 = *pSrcB; + inA2 = *(pSrcA + 1); + inB2 = *(pSrcB + 1); + inA3 = *(pSrcA + 2); + inB3 = *(pSrcB + 2); + inA4 = *(pSrcA + 3); + inB4 = *(pSrcB + 3); + + /* dst = srcA - srcB */ + /* subtract and store the result */ + *pDst = inA1 - inB1; + *(pDst + 1) = inA2 - inB2; + *(pDst + 2) = inA3 - inB3; + *(pDst + 3) = inA4 - inB4; + + + /* Update pointers to process next sampels */ + pSrcA += 4u; + pSrcB += 4u; + pDst += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the results in the destination buffer. */ + *pDst++ = (*pSrcA++) - (*pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicSub group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,140 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_sub_q15.c +* +* Description: Q15 vector subtraction. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicSub + * @{ + */ + +/** + * @brief Q15 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q15 range [0x8000 0x7FFF] will be saturated. + */ + +void arm_sub_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t inA1, inA2; + q31_t inB1, inB2; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the results in the destination buffer two samples at a time. */ + inA1 = *__SIMD32(pSrcA)++; + inA2 = *__SIMD32(pSrcA)++; + inB1 = *__SIMD32(pSrcB)++; + inB2 = *__SIMD32(pSrcB)++; + + *__SIMD32(pDst)++ = __QSUB16(inA1, inB1); + *__SIMD32(pDst)++ = __QSUB16(inA2, inB2); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the result in the destination buffer. */ + *pDst++ = (q15_t) __QSUB16(*pSrcA++, *pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the result in the destination buffer. */ + *pDst++ = (q15_t) __SSAT(((q31_t) * pSrcA++ - *pSrcB++), 16); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + +} + +/** + * @} end of BasicSub group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,146 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_sub_q31.c +* +* Description: Q31 vector subtraction. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicSub + * @{ + */ + +/** + * @brief Q31 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] will be saturated. + */ + +void arm_sub_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t inA1, inA2, inA3, inA4; + q31_t inB1, inB2, inB3, inB4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the results in the destination buffer. */ + inA1 = *pSrcA++; + inA2 = *pSrcA++; + inB1 = *pSrcB++; + inB2 = *pSrcB++; + + inA3 = *pSrcA++; + inA4 = *pSrcA++; + inB3 = *pSrcB++; + inB4 = *pSrcB++; + + *pDst++ = __QSUB(inA1, inB1); + *pDst++ = __QSUB(inA2, inB2); + *pDst++ = __QSUB(inA3, inB3); + *pDst++ = __QSUB(inA4, inB4); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the result in the destination buffer. */ + *pDst++ = __QSUB(*pSrcA++, *pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the result in the destination buffer. */ + *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrcA++ - *pSrcB++); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of BasicSub group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,131 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_sub_q7.c +* +* Description: Q7 vector subtraction. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMath + */ + +/** + * @addtogroup BasicSub + * @{ + */ + +/** + * @brief Q7 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q7 range [0x80 0x7F] will be saturated. + */ + +void arm_sub_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the results in the destination buffer 4 samples at a time. */ + *__SIMD32(pDst)++ = __QSUB8(*__SIMD32(pSrcA)++, *__SIMD32(pSrcB)++); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the result in the destination buffer. */ + *pDst++ = __SSAT(*pSrcA++ - *pSrcB++, 8); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A - B */ + /* Subtract and then store the result in the destination buffer. */ + *pDst++ = (q7_t) __SSAT((q15_t) * pSrcA++ - *pSrcB++, 8); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + +} + +/** + * @} end of BasicSub group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/CommonTables/arm_common_tables.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/CommonTables/arm_common_tables.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,27251 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_common_tables.c +* +* Description: This file has common tables like fft twiddle factors, Bitreverse, reciprocal etc which are used across different functions +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup CFFT_CIFFT Complex FFT Tables + * @{ + */ + +/** +* \par +* Pseudo code for Generation of Bit reversal Table is +* \par +*
for(l=1;l <= N/4;l++)    
+* {    
+*   for(i=0;i> 1;    
+*  } 
+* \par +* where N = 4096 logN2 = 12 +* \par +* N is the maximum FFT Size supported +*/ + +/* +* @brief Table for bit reversal process +*/ +const uint16_t armBitRevTable[1024] = { + 0x400, 0x200, 0x600, 0x100, 0x500, 0x300, 0x700, 0x80, 0x480, 0x280, + 0x680, 0x180, 0x580, 0x380, 0x780, 0x40, 0x440, 0x240, 0x640, 0x140, + 0x540, 0x340, 0x740, 0xc0, 0x4c0, 0x2c0, 0x6c0, 0x1c0, 0x5c0, 0x3c0, + 0x7c0, 0x20, 0x420, 0x220, 0x620, 0x120, 0x520, 0x320, 0x720, 0xa0, + 0x4a0, 0x2a0, 0x6a0, 0x1a0, 0x5a0, 0x3a0, 0x7a0, 0x60, 0x460, 0x260, + 0x660, 0x160, 0x560, 0x360, 0x760, 0xe0, 0x4e0, 0x2e0, 0x6e0, 0x1e0, + 0x5e0, 0x3e0, 0x7e0, 0x10, 0x410, 0x210, 0x610, 0x110, 0x510, 0x310, + 0x710, 0x90, 0x490, 0x290, 0x690, 0x190, 0x590, 0x390, 0x790, 0x50, + 0x450, 0x250, 0x650, 0x150, 0x550, 0x350, 0x750, 0xd0, 0x4d0, 0x2d0, + 0x6d0, 0x1d0, 0x5d0, 0x3d0, 0x7d0, 0x30, 0x430, 0x230, 0x630, 0x130, + 0x530, 0x330, 0x730, 0xb0, 0x4b0, 0x2b0, 0x6b0, 0x1b0, 0x5b0, 0x3b0, + 0x7b0, 0x70, 0x470, 0x270, 0x670, 0x170, 0x570, 0x370, 0x770, 0xf0, + 0x4f0, 0x2f0, 0x6f0, 0x1f0, 0x5f0, 0x3f0, 0x7f0, 0x8, 0x408, 0x208, + 0x608, 0x108, 0x508, 0x308, 0x708, 0x88, 0x488, 0x288, 0x688, 0x188, + 0x588, 0x388, 0x788, 0x48, 0x448, 0x248, 0x648, 0x148, 0x548, 0x348, + 0x748, 0xc8, 0x4c8, 0x2c8, 0x6c8, 0x1c8, 0x5c8, 0x3c8, 0x7c8, 0x28, + 0x428, 0x228, 0x628, 0x128, 0x528, 0x328, 0x728, 0xa8, 0x4a8, 0x2a8, + 0x6a8, 0x1a8, 0x5a8, 0x3a8, 0x7a8, 0x68, 0x468, 0x268, 0x668, 0x168, + 0x568, 0x368, 0x768, 0xe8, 0x4e8, 0x2e8, 0x6e8, 0x1e8, 0x5e8, 0x3e8, + 0x7e8, 0x18, 0x418, 0x218, 0x618, 0x118, 0x518, 0x318, 0x718, 0x98, + 0x498, 0x298, 0x698, 0x198, 0x598, 0x398, 0x798, 0x58, 0x458, 0x258, + 0x658, 0x158, 0x558, 0x358, 0x758, 0xd8, 0x4d8, 0x2d8, 0x6d8, 0x1d8, + 0x5d8, 0x3d8, 0x7d8, 0x38, 0x438, 0x238, 0x638, 0x138, 0x538, 0x338, + 0x738, 0xb8, 0x4b8, 0x2b8, 0x6b8, 0x1b8, 0x5b8, 0x3b8, 0x7b8, 0x78, + 0x478, 0x278, 0x678, 0x178, 0x578, 0x378, 0x778, 0xf8, 0x4f8, 0x2f8, + 0x6f8, 0x1f8, 0x5f8, 0x3f8, 0x7f8, 0x4, 0x404, 0x204, 0x604, 0x104, + 0x504, 0x304, 0x704, 0x84, 0x484, 0x284, 0x684, 0x184, 0x584, 0x384, + 0x784, 0x44, 0x444, 0x244, 0x644, 0x144, 0x544, 0x344, 0x744, 0xc4, + 0x4c4, 0x2c4, 0x6c4, 0x1c4, 0x5c4, 0x3c4, 0x7c4, 0x24, 0x424, 0x224, + 0x624, 0x124, 0x524, 0x324, 0x724, 0xa4, 0x4a4, 0x2a4, 0x6a4, 0x1a4, + 0x5a4, 0x3a4, 0x7a4, 0x64, 0x464, 0x264, 0x664, 0x164, 0x564, 0x364, + 0x764, 0xe4, 0x4e4, 0x2e4, 0x6e4, 0x1e4, 0x5e4, 0x3e4, 0x7e4, 0x14, + 0x414, 0x214, 0x614, 0x114, 0x514, 0x314, 0x714, 0x94, 0x494, 0x294, + 0x694, 0x194, 0x594, 0x394, 0x794, 0x54, 0x454, 0x254, 0x654, 0x154, + 0x554, 0x354, 0x754, 0xd4, 0x4d4, 0x2d4, 0x6d4, 0x1d4, 0x5d4, 0x3d4, + 0x7d4, 0x34, 0x434, 0x234, 0x634, 0x134, 0x534, 0x334, 0x734, 0xb4, + 0x4b4, 0x2b4, 0x6b4, 0x1b4, 0x5b4, 0x3b4, 0x7b4, 0x74, 0x474, 0x274, + 0x674, 0x174, 0x574, 0x374, 0x774, 0xf4, 0x4f4, 0x2f4, 0x6f4, 0x1f4, + 0x5f4, 0x3f4, 0x7f4, 0xc, 0x40c, 0x20c, 0x60c, 0x10c, 0x50c, 0x30c, + 0x70c, 0x8c, 0x48c, 0x28c, 0x68c, 0x18c, 0x58c, 0x38c, 0x78c, 0x4c, + 0x44c, 0x24c, 0x64c, 0x14c, 0x54c, 0x34c, 0x74c, 0xcc, 0x4cc, 0x2cc, + 0x6cc, 0x1cc, 0x5cc, 0x3cc, 0x7cc, 0x2c, 0x42c, 0x22c, 0x62c, 0x12c, + 0x52c, 0x32c, 0x72c, 0xac, 0x4ac, 0x2ac, 0x6ac, 0x1ac, 0x5ac, 0x3ac, + 0x7ac, 0x6c, 0x46c, 0x26c, 0x66c, 0x16c, 0x56c, 0x36c, 0x76c, 0xec, + 0x4ec, 0x2ec, 0x6ec, 0x1ec, 0x5ec, 0x3ec, 0x7ec, 0x1c, 0x41c, 0x21c, + 0x61c, 0x11c, 0x51c, 0x31c, 0x71c, 0x9c, 0x49c, 0x29c, 0x69c, 0x19c, + 0x59c, 0x39c, 0x79c, 0x5c, 0x45c, 0x25c, 0x65c, 0x15c, 0x55c, 0x35c, + 0x75c, 0xdc, 0x4dc, 0x2dc, 0x6dc, 0x1dc, 0x5dc, 0x3dc, 0x7dc, 0x3c, + 0x43c, 0x23c, 0x63c, 0x13c, 0x53c, 0x33c, 0x73c, 0xbc, 0x4bc, 0x2bc, + 0x6bc, 0x1bc, 0x5bc, 0x3bc, 0x7bc, 0x7c, 0x47c, 0x27c, 0x67c, 0x17c, + 0x57c, 0x37c, 0x77c, 0xfc, 0x4fc, 0x2fc, 0x6fc, 0x1fc, 0x5fc, 0x3fc, + 0x7fc, 0x2, 0x402, 0x202, 0x602, 0x102, 0x502, 0x302, 0x702, 0x82, + 0x482, 0x282, 0x682, 0x182, 0x582, 0x382, 0x782, 0x42, 0x442, 0x242, + 0x642, 0x142, 0x542, 0x342, 0x742, 0xc2, 0x4c2, 0x2c2, 0x6c2, 0x1c2, + 0x5c2, 0x3c2, 0x7c2, 0x22, 0x422, 0x222, 0x622, 0x122, 0x522, 0x322, + 0x722, 0xa2, 0x4a2, 0x2a2, 0x6a2, 0x1a2, 0x5a2, 0x3a2, 0x7a2, 0x62, + 0x462, 0x262, 0x662, 0x162, 0x562, 0x362, 0x762, 0xe2, 0x4e2, 0x2e2, + 0x6e2, 0x1e2, 0x5e2, 0x3e2, 0x7e2, 0x12, 0x412, 0x212, 0x612, 0x112, + 0x512, 0x312, 0x712, 0x92, 0x492, 0x292, 0x692, 0x192, 0x592, 0x392, + 0x792, 0x52, 0x452, 0x252, 0x652, 0x152, 0x552, 0x352, 0x752, 0xd2, + 0x4d2, 0x2d2, 0x6d2, 0x1d2, 0x5d2, 0x3d2, 0x7d2, 0x32, 0x432, 0x232, + 0x632, 0x132, 0x532, 0x332, 0x732, 0xb2, 0x4b2, 0x2b2, 0x6b2, 0x1b2, + 0x5b2, 0x3b2, 0x7b2, 0x72, 0x472, 0x272, 0x672, 0x172, 0x572, 0x372, + 0x772, 0xf2, 0x4f2, 0x2f2, 0x6f2, 0x1f2, 0x5f2, 0x3f2, 0x7f2, 0xa, + 0x40a, 0x20a, 0x60a, 0x10a, 0x50a, 0x30a, 0x70a, 0x8a, 0x48a, 0x28a, + 0x68a, 0x18a, 0x58a, 0x38a, 0x78a, 0x4a, 0x44a, 0x24a, 0x64a, 0x14a, + 0x54a, 0x34a, 0x74a, 0xca, 0x4ca, 0x2ca, 0x6ca, 0x1ca, 0x5ca, 0x3ca, + 0x7ca, 0x2a, 0x42a, 0x22a, 0x62a, 0x12a, 0x52a, 0x32a, 0x72a, 0xaa, + 0x4aa, 0x2aa, 0x6aa, 0x1aa, 0x5aa, 0x3aa, 0x7aa, 0x6a, 0x46a, 0x26a, + 0x66a, 0x16a, 0x56a, 0x36a, 0x76a, 0xea, 0x4ea, 0x2ea, 0x6ea, 0x1ea, + 0x5ea, 0x3ea, 0x7ea, 0x1a, 0x41a, 0x21a, 0x61a, 0x11a, 0x51a, 0x31a, + 0x71a, 0x9a, 0x49a, 0x29a, 0x69a, 0x19a, 0x59a, 0x39a, 0x79a, 0x5a, + 0x45a, 0x25a, 0x65a, 0x15a, 0x55a, 0x35a, 0x75a, 0xda, 0x4da, 0x2da, + 0x6da, 0x1da, 0x5da, 0x3da, 0x7da, 0x3a, 0x43a, 0x23a, 0x63a, 0x13a, + 0x53a, 0x33a, 0x73a, 0xba, 0x4ba, 0x2ba, 0x6ba, 0x1ba, 0x5ba, 0x3ba, + 0x7ba, 0x7a, 0x47a, 0x27a, 0x67a, 0x17a, 0x57a, 0x37a, 0x77a, 0xfa, + 0x4fa, 0x2fa, 0x6fa, 0x1fa, 0x5fa, 0x3fa, 0x7fa, 0x6, 0x406, 0x206, + 0x606, 0x106, 0x506, 0x306, 0x706, 0x86, 0x486, 0x286, 0x686, 0x186, + 0x586, 0x386, 0x786, 0x46, 0x446, 0x246, 0x646, 0x146, 0x546, 0x346, + 0x746, 0xc6, 0x4c6, 0x2c6, 0x6c6, 0x1c6, 0x5c6, 0x3c6, 0x7c6, 0x26, + 0x426, 0x226, 0x626, 0x126, 0x526, 0x326, 0x726, 0xa6, 0x4a6, 0x2a6, + 0x6a6, 0x1a6, 0x5a6, 0x3a6, 0x7a6, 0x66, 0x466, 0x266, 0x666, 0x166, + 0x566, 0x366, 0x766, 0xe6, 0x4e6, 0x2e6, 0x6e6, 0x1e6, 0x5e6, 0x3e6, + 0x7e6, 0x16, 0x416, 0x216, 0x616, 0x116, 0x516, 0x316, 0x716, 0x96, + 0x496, 0x296, 0x696, 0x196, 0x596, 0x396, 0x796, 0x56, 0x456, 0x256, + 0x656, 0x156, 0x556, 0x356, 0x756, 0xd6, 0x4d6, 0x2d6, 0x6d6, 0x1d6, + 0x5d6, 0x3d6, 0x7d6, 0x36, 0x436, 0x236, 0x636, 0x136, 0x536, 0x336, + 0x736, 0xb6, 0x4b6, 0x2b6, 0x6b6, 0x1b6, 0x5b6, 0x3b6, 0x7b6, 0x76, + 0x476, 0x276, 0x676, 0x176, 0x576, 0x376, 0x776, 0xf6, 0x4f6, 0x2f6, + 0x6f6, 0x1f6, 0x5f6, 0x3f6, 0x7f6, 0xe, 0x40e, 0x20e, 0x60e, 0x10e, + 0x50e, 0x30e, 0x70e, 0x8e, 0x48e, 0x28e, 0x68e, 0x18e, 0x58e, 0x38e, + 0x78e, 0x4e, 0x44e, 0x24e, 0x64e, 0x14e, 0x54e, 0x34e, 0x74e, 0xce, + 0x4ce, 0x2ce, 0x6ce, 0x1ce, 0x5ce, 0x3ce, 0x7ce, 0x2e, 0x42e, 0x22e, + 0x62e, 0x12e, 0x52e, 0x32e, 0x72e, 0xae, 0x4ae, 0x2ae, 0x6ae, 0x1ae, + 0x5ae, 0x3ae, 0x7ae, 0x6e, 0x46e, 0x26e, 0x66e, 0x16e, 0x56e, 0x36e, + 0x76e, 0xee, 0x4ee, 0x2ee, 0x6ee, 0x1ee, 0x5ee, 0x3ee, 0x7ee, 0x1e, + 0x41e, 0x21e, 0x61e, 0x11e, 0x51e, 0x31e, 0x71e, 0x9e, 0x49e, 0x29e, + 0x69e, 0x19e, 0x59e, 0x39e, 0x79e, 0x5e, 0x45e, 0x25e, 0x65e, 0x15e, + 0x55e, 0x35e, 0x75e, 0xde, 0x4de, 0x2de, 0x6de, 0x1de, 0x5de, 0x3de, + 0x7de, 0x3e, 0x43e, 0x23e, 0x63e, 0x13e, 0x53e, 0x33e, 0x73e, 0xbe, + 0x4be, 0x2be, 0x6be, 0x1be, 0x5be, 0x3be, 0x7be, 0x7e, 0x47e, 0x27e, + 0x67e, 0x17e, 0x57e, 0x37e, 0x77e, 0xfe, 0x4fe, 0x2fe, 0x6fe, 0x1fe, + 0x5fe, 0x3fe, 0x7fe, 0x1 +}; + + +/* +* @brief Floating-point Twiddle factors Table Generation +*/ + +/** +* \par +* Example code for Floating-point Twiddle factors Generation: +* \par +*
for(i = 0; i< N/; i++)    
+* {    
+*	twiddleCoef[2*i]= cos(i * 2*PI/(float)N);    
+*	twiddleCoef[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 16 and PI = 3.14159265358979 +* \par +* Cos and Sin values are in interleaved fashion +* +*/ +const float32_t twiddleCoef_16[32] = { + 1.000000000f, 0.000000000f, + 0.923879533f, 0.382683432f, + 0.707106781f, 0.707106781f, + 0.382683432f, 0.923879533f, + 0.000000000f, 1.000000000f, + -0.382683432f, 0.923879533f, + -0.707106781f, 0.707106781f, + -0.923879533f, 0.382683432f, + -1.000000000f, 0.000000000f, + -0.923879533f, -0.382683432f, + -0.707106781f, -0.707106781f, + -0.382683432f, -0.923879533f, + -0.000000000f, -1.000000000f, + 0.382683432f, -0.923879533f, + 0.707106781f, -0.707106781f, + 0.923879533f, -0.382683432f +}; + +/** +* \par +* Example code for Floating-point Twiddle factors Generation: +* \par +*
for(i = 0; i< N/; i++)    
+* {    
+*	twiddleCoef[2*i]= cos(i * 2*PI/(float)N);    
+*	twiddleCoef[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 32 and PI = 3.14159265358979 +* \par +* Cos and Sin values are in interleaved fashion +* +*/ +const float32_t twiddleCoef_32[64] = { + 1.000000000f, 0.000000000f, + 0.980785280f, 0.195090322f, + 0.923879533f, 0.382683432f, + 0.831469612f, 0.555570233f, + 0.707106781f, 0.707106781f, + 0.555570233f, 0.831469612f, + 0.382683432f, 0.923879533f, + 0.195090322f, 0.980785280f, + 0.000000000f, 1.000000000f, + -0.195090322f, 0.980785280f, + -0.382683432f, 0.923879533f, + -0.555570233f, 0.831469612f, + -0.707106781f, 0.707106781f, + -0.831469612f, 0.555570233f, + -0.923879533f, 0.382683432f, + -0.980785280f, 0.195090322f, + -1.000000000f, 0.000000000f, + -0.980785280f, -0.195090322f, + -0.923879533f, -0.382683432f, + -0.831469612f, -0.555570233f, + -0.707106781f, -0.707106781f, + -0.555570233f, -0.831469612f, + -0.382683432f, -0.923879533f, + -0.195090322f, -0.980785280f, + -0.000000000f, -1.000000000f, + 0.195090322f, -0.980785280f, + 0.382683432f, -0.923879533f, + 0.555570233f, -0.831469612f, + 0.707106781f, -0.707106781f, + 0.831469612f, -0.555570233f, + 0.923879533f, -0.382683432f, + 0.980785280f, -0.195090322f +}; + +/** +* \par +* Example code for Floating-point Twiddle factors Generation: +* \par +*
for(i = 0; i< N/; i++)    
+* {    
+*	twiddleCoef[2*i]= cos(i * 2*PI/(float)N);    
+*	twiddleCoef[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 64 and PI = 3.14159265358979 +* \par +* Cos and Sin values are in interleaved fashion +* +*/ +const float32_t twiddleCoef_64[128] = { + 1.000000000f, 0.000000000f, + 0.995184727f, 0.098017140f, + 0.980785280f, 0.195090322f, + 0.956940336f, 0.290284677f, + 0.923879533f, 0.382683432f, + 0.881921264f, 0.471396737f, + 0.831469612f, 0.555570233f, + 0.773010453f, 0.634393284f, + 0.707106781f, 0.707106781f, + 0.634393284f, 0.773010453f, + 0.555570233f, 0.831469612f, + 0.471396737f, 0.881921264f, + 0.382683432f, 0.923879533f, + 0.290284677f, 0.956940336f, + 0.195090322f, 0.980785280f, + 0.098017140f, 0.995184727f, + 0.000000000f, 1.000000000f, + -0.098017140f, 0.995184727f, + -0.195090322f, 0.980785280f, + -0.290284677f, 0.956940336f, + -0.382683432f, 0.923879533f, + -0.471396737f, 0.881921264f, + -0.555570233f, 0.831469612f, + -0.634393284f, 0.773010453f, + -0.707106781f, 0.707106781f, + -0.773010453f, 0.634393284f, + -0.831469612f, 0.555570233f, + -0.881921264f, 0.471396737f, + -0.923879533f, 0.382683432f, + -0.956940336f, 0.290284677f, + -0.980785280f, 0.195090322f, + -0.995184727f, 0.098017140f, + -1.000000000f, 0.000000000f, + -0.995184727f, -0.098017140f, + -0.980785280f, -0.195090322f, + -0.956940336f, -0.290284677f, + -0.923879533f, -0.382683432f, + -0.881921264f, -0.471396737f, + -0.831469612f, -0.555570233f, + -0.773010453f, -0.634393284f, + -0.707106781f, -0.707106781f, + -0.634393284f, -0.773010453f, + -0.555570233f, -0.831469612f, + -0.471396737f, -0.881921264f, + -0.382683432f, -0.923879533f, + -0.290284677f, -0.956940336f, + -0.195090322f, -0.980785280f, + -0.098017140f, -0.995184727f, + -0.000000000f, -1.000000000f, + 0.098017140f, -0.995184727f, + 0.195090322f, -0.980785280f, + 0.290284677f, -0.956940336f, + 0.382683432f, -0.923879533f, + 0.471396737f, -0.881921264f, + 0.555570233f, -0.831469612f, + 0.634393284f, -0.773010453f, + 0.707106781f, -0.707106781f, + 0.773010453f, -0.634393284f, + 0.831469612f, -0.555570233f, + 0.881921264f, -0.471396737f, + 0.923879533f, -0.382683432f, + 0.956940336f, -0.290284677f, + 0.980785280f, -0.195090322f, + 0.995184727f, -0.098017140f +}; + +/** +* \par +* Example code for Floating-point Twiddle factors Generation: +* \par +*
for(i = 0; i< N/; i++)    
+* {    
+*	twiddleCoef[2*i]= cos(i * 2*PI/(float)N);    
+*	twiddleCoef[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 128 and PI = 3.14159265358979 +* \par +* Cos and Sin values are in interleaved fashion +* +*/ + +const float32_t twiddleCoef_128[256] = { + 1.000000000f , 0.000000000f , + 0.998795456f , 0.049067674f , + 0.995184727f , 0.098017140f , + 0.989176510f , 0.146730474f , + 0.980785280f , 0.195090322f , + 0.970031253f , 0.242980180f , + 0.956940336f , 0.290284677f , + 0.941544065f , 0.336889853f , + 0.923879533f , 0.382683432f , + 0.903989293f , 0.427555093f , + 0.881921264f , 0.471396737f , + 0.857728610f , 0.514102744f , + 0.831469612f , 0.555570233f , + 0.803207531f , 0.595699304f , + 0.773010453f , 0.634393284f , + 0.740951125f , 0.671558955f , + 0.707106781f , 0.707106781f , + 0.671558955f , 0.740951125f , + 0.634393284f , 0.773010453f , + 0.595699304f , 0.803207531f , + 0.555570233f , 0.831469612f , + 0.514102744f , 0.857728610f , + 0.471396737f , 0.881921264f , + 0.427555093f , 0.903989293f , + 0.382683432f , 0.923879533f , + 0.336889853f , 0.941544065f , + 0.290284677f , 0.956940336f , + 0.242980180f , 0.970031253f , + 0.195090322f , 0.980785280f , + 0.146730474f , 0.989176510f , + 0.098017140f , 0.995184727f , + 0.049067674f , 0.998795456f , + 0.000000000f , 1.000000000f , + -0.049067674f , 0.998795456f , + -0.098017140f , 0.995184727f , + -0.146730474f , 0.989176510f , + -0.195090322f , 0.980785280f , + -0.242980180f , 0.970031253f , + -0.290284677f , 0.956940336f , + -0.336889853f , 0.941544065f , + -0.382683432f , 0.923879533f , + -0.427555093f , 0.903989293f , + -0.471396737f , 0.881921264f , + -0.514102744f , 0.857728610f , + -0.555570233f , 0.831469612f , + -0.595699304f , 0.803207531f , + -0.634393284f , 0.773010453f , + -0.671558955f , 0.740951125f , + -0.707106781f , 0.707106781f , + -0.740951125f , 0.671558955f , + -0.773010453f , 0.634393284f , + -0.803207531f , 0.595699304f , + -0.831469612f , 0.555570233f , + -0.857728610f , 0.514102744f , + -0.881921264f , 0.471396737f , + -0.903989293f , 0.427555093f , + -0.923879533f , 0.382683432f , + -0.941544065f , 0.336889853f , + -0.956940336f , 0.290284677f , + -0.970031253f , 0.242980180f , + -0.980785280f , 0.195090322f , + -0.989176510f , 0.146730474f , + -0.995184727f , 0.098017140f , + -0.998795456f , 0.049067674f , + -1.000000000f , 0.000000000f , + -0.998795456f , -0.049067674f , + -0.995184727f , -0.098017140f , + -0.989176510f , -0.146730474f , + -0.980785280f , -0.195090322f , + -0.970031253f , -0.242980180f , + -0.956940336f , -0.290284677f , + -0.941544065f , -0.336889853f , + -0.923879533f , -0.382683432f , + -0.903989293f , -0.427555093f , + -0.881921264f , -0.471396737f , + -0.857728610f , -0.514102744f , + -0.831469612f , -0.555570233f , + -0.803207531f , -0.595699304f , + -0.773010453f , -0.634393284f , + -0.740951125f , -0.671558955f , + -0.707106781f , -0.707106781f , + -0.671558955f , -0.740951125f , + -0.634393284f , -0.773010453f , + -0.595699304f , -0.803207531f , + -0.555570233f , -0.831469612f , + -0.514102744f , -0.857728610f , + -0.471396737f , -0.881921264f , + -0.427555093f , -0.903989293f , + -0.382683432f , -0.923879533f , + -0.336889853f , -0.941544065f , + -0.290284677f , -0.956940336f , + -0.242980180f , -0.970031253f , + -0.195090322f , -0.980785280f , + -0.146730474f , -0.989176510f , + -0.098017140f , -0.995184727f , + -0.049067674f , -0.998795456f , + -0.000000000f , -1.000000000f , + 0.049067674f , -0.998795456f , + 0.098017140f , -0.995184727f , + 0.146730474f , -0.989176510f , + 0.195090322f , -0.980785280f , + 0.242980180f , -0.970031253f , + 0.290284677f , -0.956940336f , + 0.336889853f , -0.941544065f , + 0.382683432f , -0.923879533f , + 0.427555093f , -0.903989293f , + 0.471396737f , -0.881921264f , + 0.514102744f , -0.857728610f , + 0.555570233f , -0.831469612f , + 0.595699304f , -0.803207531f , + 0.634393284f , -0.773010453f , + 0.671558955f , -0.740951125f , + 0.707106781f , -0.707106781f , + 0.740951125f , -0.671558955f , + 0.773010453f , -0.634393284f , + 0.803207531f , -0.595699304f , + 0.831469612f , -0.555570233f , + 0.857728610f , -0.514102744f , + 0.881921264f , -0.471396737f , + 0.903989293f , -0.427555093f , + 0.923879533f , -0.382683432f , + 0.941544065f , -0.336889853f , + 0.956940336f , -0.290284677f , + 0.970031253f , -0.242980180f , + 0.980785280f , -0.195090322f , + 0.989176510f , -0.146730474f , + 0.995184727f , -0.098017140f , + 0.998795456f , -0.049067674f +}; + +/** +* \par +* Example code for Floating-point Twiddle factors Generation: +* \par +*
for(i = 0; i< N/; i++)    
+* {    
+*	twiddleCoef[2*i]= cos(i * 2*PI/(float)N);    
+*	twiddleCoef[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 256 and PI = 3.14159265358979 +* \par +* Cos and Sin values are in interleaved fashion +* +*/ +const float32_t twiddleCoef_256[512] = { + 1.000000000f, 0.000000000f, + 0.999698819f, 0.024541229f, + 0.998795456f, 0.049067674f, + 0.997290457f, 0.073564564f, + 0.995184727f, 0.098017140f, + 0.992479535f, 0.122410675f, + 0.989176510f, 0.146730474f, + 0.985277642f, 0.170961889f, + 0.980785280f, 0.195090322f, + 0.975702130f, 0.219101240f, + 0.970031253f, 0.242980180f, + 0.963776066f, 0.266712757f, + 0.956940336f, 0.290284677f, + 0.949528181f, 0.313681740f, + 0.941544065f, 0.336889853f, + 0.932992799f, 0.359895037f, + 0.923879533f, 0.382683432f, + 0.914209756f, 0.405241314f, + 0.903989293f, 0.427555093f, + 0.893224301f, 0.449611330f, + 0.881921264f, 0.471396737f, + 0.870086991f, 0.492898192f, + 0.857728610f, 0.514102744f, + 0.844853565f, 0.534997620f, + 0.831469612f, 0.555570233f, + 0.817584813f, 0.575808191f, + 0.803207531f, 0.595699304f, + 0.788346428f, 0.615231591f, + 0.773010453f, 0.634393284f, + 0.757208847f, 0.653172843f, + 0.740951125f, 0.671558955f, + 0.724247083f, 0.689540545f, + 0.707106781f, 0.707106781f, + 0.689540545f, 0.724247083f, + 0.671558955f, 0.740951125f, + 0.653172843f, 0.757208847f, + 0.634393284f, 0.773010453f, + 0.615231591f, 0.788346428f, + 0.595699304f, 0.803207531f, + 0.575808191f, 0.817584813f, + 0.555570233f, 0.831469612f, + 0.534997620f, 0.844853565f, + 0.514102744f, 0.857728610f, + 0.492898192f, 0.870086991f, + 0.471396737f, 0.881921264f, + 0.449611330f, 0.893224301f, + 0.427555093f, 0.903989293f, + 0.405241314f, 0.914209756f, + 0.382683432f, 0.923879533f, + 0.359895037f, 0.932992799f, + 0.336889853f, 0.941544065f, + 0.313681740f, 0.949528181f, + 0.290284677f, 0.956940336f, + 0.266712757f, 0.963776066f, + 0.242980180f, 0.970031253f, + 0.219101240f, 0.975702130f, + 0.195090322f, 0.980785280f, + 0.170961889f, 0.985277642f, + 0.146730474f, 0.989176510f, + 0.122410675f, 0.992479535f, + 0.098017140f, 0.995184727f, + 0.073564564f, 0.997290457f, + 0.049067674f, 0.998795456f, + 0.024541229f, 0.999698819f, + 0.000000000f, 1.000000000f, + -0.024541229f, 0.999698819f, + -0.049067674f, 0.998795456f, + -0.073564564f, 0.997290457f, + -0.098017140f, 0.995184727f, + -0.122410675f, 0.992479535f, + -0.146730474f, 0.989176510f, + -0.170961889f, 0.985277642f, + -0.195090322f, 0.980785280f, + -0.219101240f, 0.975702130f, + -0.242980180f, 0.970031253f, + -0.266712757f, 0.963776066f, + -0.290284677f, 0.956940336f, + -0.313681740f, 0.949528181f, + -0.336889853f, 0.941544065f, + -0.359895037f, 0.932992799f, + -0.382683432f, 0.923879533f, + -0.405241314f, 0.914209756f, + -0.427555093f, 0.903989293f, + -0.449611330f, 0.893224301f, + -0.471396737f, 0.881921264f, + -0.492898192f, 0.870086991f, + -0.514102744f, 0.857728610f, + -0.534997620f, 0.844853565f, + -0.555570233f, 0.831469612f, + -0.575808191f, 0.817584813f, + -0.595699304f, 0.803207531f, + -0.615231591f, 0.788346428f, + -0.634393284f, 0.773010453f, + -0.653172843f, 0.757208847f, + -0.671558955f, 0.740951125f, + -0.689540545f, 0.724247083f, + -0.707106781f, 0.707106781f, + -0.724247083f, 0.689540545f, + -0.740951125f, 0.671558955f, + -0.757208847f, 0.653172843f, + -0.773010453f, 0.634393284f, + -0.788346428f, 0.615231591f, + -0.803207531f, 0.595699304f, + -0.817584813f, 0.575808191f, + -0.831469612f, 0.555570233f, + -0.844853565f, 0.534997620f, + -0.857728610f, 0.514102744f, + -0.870086991f, 0.492898192f, + -0.881921264f, 0.471396737f, + -0.893224301f, 0.449611330f, + -0.903989293f, 0.427555093f, + -0.914209756f, 0.405241314f, + -0.923879533f, 0.382683432f, + -0.932992799f, 0.359895037f, + -0.941544065f, 0.336889853f, + -0.949528181f, 0.313681740f, + -0.956940336f, 0.290284677f, + -0.963776066f, 0.266712757f, + -0.970031253f, 0.242980180f, + -0.975702130f, 0.219101240f, + -0.980785280f, 0.195090322f, + -0.985277642f, 0.170961889f, + -0.989176510f, 0.146730474f, + -0.992479535f, 0.122410675f, + -0.995184727f, 0.098017140f, + -0.997290457f, 0.073564564f, + -0.998795456f, 0.049067674f, + -0.999698819f, 0.024541229f, + -1.000000000f, 0.000000000f, + -0.999698819f, -0.024541229f, + -0.998795456f, -0.049067674f, + -0.997290457f, -0.073564564f, + -0.995184727f, -0.098017140f, + -0.992479535f, -0.122410675f, + -0.989176510f, -0.146730474f, + -0.985277642f, -0.170961889f, + -0.980785280f, -0.195090322f, + -0.975702130f, -0.219101240f, + -0.970031253f, -0.242980180f, + -0.963776066f, -0.266712757f, + -0.956940336f, -0.290284677f, + -0.949528181f, -0.313681740f, + -0.941544065f, -0.336889853f, + -0.932992799f, -0.359895037f, + -0.923879533f, -0.382683432f, + -0.914209756f, -0.405241314f, + -0.903989293f, -0.427555093f, + -0.893224301f, -0.449611330f, + -0.881921264f, -0.471396737f, + -0.870086991f, -0.492898192f, + -0.857728610f, -0.514102744f, + -0.844853565f, -0.534997620f, + -0.831469612f, -0.555570233f, + -0.817584813f, -0.575808191f, + -0.803207531f, -0.595699304f, + -0.788346428f, -0.615231591f, + -0.773010453f, -0.634393284f, + -0.757208847f, -0.653172843f, + -0.740951125f, -0.671558955f, + -0.724247083f, -0.689540545f, + -0.707106781f, -0.707106781f, + -0.689540545f, -0.724247083f, + -0.671558955f, -0.740951125f, + -0.653172843f, -0.757208847f, + -0.634393284f, -0.773010453f, + -0.615231591f, -0.788346428f, + -0.595699304f, -0.803207531f, + -0.575808191f, -0.817584813f, + -0.555570233f, -0.831469612f, + -0.534997620f, -0.844853565f, + -0.514102744f, -0.857728610f, + -0.492898192f, -0.870086991f, + -0.471396737f, -0.881921264f, + -0.449611330f, -0.893224301f, + -0.427555093f, -0.903989293f, + -0.405241314f, -0.914209756f, + -0.382683432f, -0.923879533f, + -0.359895037f, -0.932992799f, + -0.336889853f, -0.941544065f, + -0.313681740f, -0.949528181f, + -0.290284677f, -0.956940336f, + -0.266712757f, -0.963776066f, + -0.242980180f, -0.970031253f, + -0.219101240f, -0.975702130f, + -0.195090322f, -0.980785280f, + -0.170961889f, -0.985277642f, + -0.146730474f, -0.989176510f, + -0.122410675f, -0.992479535f, + -0.098017140f, -0.995184727f, + -0.073564564f, -0.997290457f, + -0.049067674f, -0.998795456f, + -0.024541229f, -0.999698819f, + -0.000000000f, -1.000000000f, + 0.024541229f, -0.999698819f, + 0.049067674f, -0.998795456f, + 0.073564564f, -0.997290457f, + 0.098017140f, -0.995184727f, + 0.122410675f, -0.992479535f, + 0.146730474f, -0.989176510f, + 0.170961889f, -0.985277642f, + 0.195090322f, -0.980785280f, + 0.219101240f, -0.975702130f, + 0.242980180f, -0.970031253f, + 0.266712757f, -0.963776066f, + 0.290284677f, -0.956940336f, + 0.313681740f, -0.949528181f, + 0.336889853f, -0.941544065f, + 0.359895037f, -0.932992799f, + 0.382683432f, -0.923879533f, + 0.405241314f, -0.914209756f, + 0.427555093f, -0.903989293f, + 0.449611330f, -0.893224301f, + 0.471396737f, -0.881921264f, + 0.492898192f, -0.870086991f, + 0.514102744f, -0.857728610f, + 0.534997620f, -0.844853565f, + 0.555570233f, -0.831469612f, + 0.575808191f, -0.817584813f, + 0.595699304f, -0.803207531f, + 0.615231591f, -0.788346428f, + 0.634393284f, -0.773010453f, + 0.653172843f, -0.757208847f, + 0.671558955f, -0.740951125f, + 0.689540545f, -0.724247083f, + 0.707106781f, -0.707106781f, + 0.724247083f, -0.689540545f, + 0.740951125f, -0.671558955f, + 0.757208847f, -0.653172843f, + 0.773010453f, -0.634393284f, + 0.788346428f, -0.615231591f, + 0.803207531f, -0.595699304f, + 0.817584813f, -0.575808191f, + 0.831469612f, -0.555570233f, + 0.844853565f, -0.534997620f, + 0.857728610f, -0.514102744f, + 0.870086991f, -0.492898192f, + 0.881921264f, -0.471396737f, + 0.893224301f, -0.449611330f, + 0.903989293f, -0.427555093f, + 0.914209756f, -0.405241314f, + 0.923879533f, -0.382683432f, + 0.932992799f, -0.359895037f, + 0.941544065f, -0.336889853f, + 0.949528181f, -0.313681740f, + 0.956940336f, -0.290284677f, + 0.963776066f, -0.266712757f, + 0.970031253f, -0.242980180f, + 0.975702130f, -0.219101240f, + 0.980785280f, -0.195090322f, + 0.985277642f, -0.170961889f, + 0.989176510f, -0.146730474f, + 0.992479535f, -0.122410675f, + 0.995184727f, -0.098017140f, + 0.997290457f, -0.073564564f, + 0.998795456f, -0.049067674f, + 0.999698819f, -0.024541229f +}; + +/** +* \par +* Example code for Floating-point Twiddle factors Generation: +* \par +*
for(i = 0; i< N/; i++)    
+* {    
+*	twiddleCoef[2*i]= cos(i * 2*PI/(float)N);    
+*	twiddleCoef[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 512 and PI = 3.14159265358979 +* \par +* Cos and Sin values are in interleaved fashion +* +*/ +const float32_t twiddleCoef_512[1024] = { + 1.000000000f, 0.000000000f, + 0.999924702f, 0.012271538f, + 0.999698819f, 0.024541229f, + 0.999322385f, 0.036807223f, + 0.998795456f, 0.049067674f, + 0.998118113f, 0.061320736f, + 0.997290457f, 0.073564564f, + 0.996312612f, 0.085797312f, + 0.995184727f, 0.098017140f, + 0.993906970f, 0.110222207f, + 0.992479535f, 0.122410675f, + 0.990902635f, 0.134580709f, + 0.989176510f, 0.146730474f, + 0.987301418f, 0.158858143f, + 0.985277642f, 0.170961889f, + 0.983105487f, 0.183039888f, + 0.980785280f, 0.195090322f, + 0.978317371f, 0.207111376f, + 0.975702130f, 0.219101240f, + 0.972939952f, 0.231058108f, + 0.970031253f, 0.242980180f, + 0.966976471f, 0.254865660f, + 0.963776066f, 0.266712757f, + 0.960430519f, 0.278519689f, + 0.956940336f, 0.290284677f, + 0.953306040f, 0.302005949f, + 0.949528181f, 0.313681740f, + 0.945607325f, 0.325310292f, + 0.941544065f, 0.336889853f, + 0.937339012f, 0.348418680f, + 0.932992799f, 0.359895037f, + 0.928506080f, 0.371317194f, + 0.923879533f, 0.382683432f, + 0.919113852f, 0.393992040f, + 0.914209756f, 0.405241314f, + 0.909167983f, 0.416429560f, + 0.903989293f, 0.427555093f, + 0.898674466f, 0.438616239f, + 0.893224301f, 0.449611330f, + 0.887639620f, 0.460538711f, + 0.881921264f, 0.471396737f, + 0.876070094f, 0.482183772f, + 0.870086991f, 0.492898192f, + 0.863972856f, 0.503538384f, + 0.857728610f, 0.514102744f, + 0.851355193f, 0.524589683f, + 0.844853565f, 0.534997620f, + 0.838224706f, 0.545324988f, + 0.831469612f, 0.555570233f, + 0.824589303f, 0.565731811f, + 0.817584813f, 0.575808191f, + 0.810457198f, 0.585797857f, + 0.803207531f, 0.595699304f, + 0.795836905f, 0.605511041f, + 0.788346428f, 0.615231591f, + 0.780737229f, 0.624859488f, + 0.773010453f, 0.634393284f, + 0.765167266f, 0.643831543f, + 0.757208847f, 0.653172843f, + 0.749136395f, 0.662415778f, + 0.740951125f, 0.671558955f, + 0.732654272f, 0.680600998f, + 0.724247083f, 0.689540545f, + 0.715730825f, 0.698376249f, + 0.707106781f, 0.707106781f, + 0.698376249f, 0.715730825f, + 0.689540545f, 0.724247083f, + 0.680600998f, 0.732654272f, + 0.671558955f, 0.740951125f, + 0.662415778f, 0.749136395f, + 0.653172843f, 0.757208847f, + 0.643831543f, 0.765167266f, + 0.634393284f, 0.773010453f, + 0.624859488f, 0.780737229f, + 0.615231591f, 0.788346428f, + 0.605511041f, 0.795836905f, + 0.595699304f, 0.803207531f, + 0.585797857f, 0.810457198f, + 0.575808191f, 0.817584813f, + 0.565731811f, 0.824589303f, + 0.555570233f, 0.831469612f, + 0.545324988f, 0.838224706f, + 0.534997620f, 0.844853565f, + 0.524589683f, 0.851355193f, + 0.514102744f, 0.857728610f, + 0.503538384f, 0.863972856f, + 0.492898192f, 0.870086991f, + 0.482183772f, 0.876070094f, + 0.471396737f, 0.881921264f, + 0.460538711f, 0.887639620f, + 0.449611330f, 0.893224301f, + 0.438616239f, 0.898674466f, + 0.427555093f, 0.903989293f, + 0.416429560f, 0.909167983f, + 0.405241314f, 0.914209756f, + 0.393992040f, 0.919113852f, + 0.382683432f, 0.923879533f, + 0.371317194f, 0.928506080f, + 0.359895037f, 0.932992799f, + 0.348418680f, 0.937339012f, + 0.336889853f, 0.941544065f, + 0.325310292f, 0.945607325f, + 0.313681740f, 0.949528181f, + 0.302005949f, 0.953306040f, + 0.290284677f, 0.956940336f, + 0.278519689f, 0.960430519f, + 0.266712757f, 0.963776066f, + 0.254865660f, 0.966976471f, + 0.242980180f, 0.970031253f, + 0.231058108f, 0.972939952f, + 0.219101240f, 0.975702130f, + 0.207111376f, 0.978317371f, + 0.195090322f, 0.980785280f, + 0.183039888f, 0.983105487f, + 0.170961889f, 0.985277642f, + 0.158858143f, 0.987301418f, + 0.146730474f, 0.989176510f, + 0.134580709f, 0.990902635f, + 0.122410675f, 0.992479535f, + 0.110222207f, 0.993906970f, + 0.098017140f, 0.995184727f, + 0.085797312f, 0.996312612f, + 0.073564564f, 0.997290457f, + 0.061320736f, 0.998118113f, + 0.049067674f, 0.998795456f, + 0.036807223f, 0.999322385f, + 0.024541229f, 0.999698819f, + 0.012271538f, 0.999924702f, + 0.000000000f, 1.000000000f, + -0.012271538f, 0.999924702f, + -0.024541229f, 0.999698819f, + -0.036807223f, 0.999322385f, + -0.049067674f, 0.998795456f, + -0.061320736f, 0.998118113f, + -0.073564564f, 0.997290457f, + -0.085797312f, 0.996312612f, + -0.098017140f, 0.995184727f, + -0.110222207f, 0.993906970f, + -0.122410675f, 0.992479535f, + -0.134580709f, 0.990902635f, + -0.146730474f, 0.989176510f, + -0.158858143f, 0.987301418f, + -0.170961889f, 0.985277642f, + -0.183039888f, 0.983105487f, + -0.195090322f, 0.980785280f, + -0.207111376f, 0.978317371f, + -0.219101240f, 0.975702130f, + -0.231058108f, 0.972939952f, + -0.242980180f, 0.970031253f, + -0.254865660f, 0.966976471f, + -0.266712757f, 0.963776066f, + -0.278519689f, 0.960430519f, + -0.290284677f, 0.956940336f, + -0.302005949f, 0.953306040f, + -0.313681740f, 0.949528181f, + -0.325310292f, 0.945607325f, + -0.336889853f, 0.941544065f, + -0.348418680f, 0.937339012f, + -0.359895037f, 0.932992799f, + -0.371317194f, 0.928506080f, + -0.382683432f, 0.923879533f, + -0.393992040f, 0.919113852f, + -0.405241314f, 0.914209756f, + -0.416429560f, 0.909167983f, + -0.427555093f, 0.903989293f, + -0.438616239f, 0.898674466f, + -0.449611330f, 0.893224301f, + -0.460538711f, 0.887639620f, + -0.471396737f, 0.881921264f, + -0.482183772f, 0.876070094f, + -0.492898192f, 0.870086991f, + -0.503538384f, 0.863972856f, + -0.514102744f, 0.857728610f, + -0.524589683f, 0.851355193f, + -0.534997620f, 0.844853565f, + -0.545324988f, 0.838224706f, + -0.555570233f, 0.831469612f, + -0.565731811f, 0.824589303f, + -0.575808191f, 0.817584813f, + -0.585797857f, 0.810457198f, + -0.595699304f, 0.803207531f, + -0.605511041f, 0.795836905f, + -0.615231591f, 0.788346428f, + -0.624859488f, 0.780737229f, + -0.634393284f, 0.773010453f, + -0.643831543f, 0.765167266f, + -0.653172843f, 0.757208847f, + -0.662415778f, 0.749136395f, + -0.671558955f, 0.740951125f, + -0.680600998f, 0.732654272f, + -0.689540545f, 0.724247083f, + -0.698376249f, 0.715730825f, + -0.707106781f, 0.707106781f, + -0.715730825f, 0.698376249f, + -0.724247083f, 0.689540545f, + -0.732654272f, 0.680600998f, + -0.740951125f, 0.671558955f, + -0.749136395f, 0.662415778f, + -0.757208847f, 0.653172843f, + -0.765167266f, 0.643831543f, + -0.773010453f, 0.634393284f, + -0.780737229f, 0.624859488f, + -0.788346428f, 0.615231591f, + -0.795836905f, 0.605511041f, + -0.803207531f, 0.595699304f, + -0.810457198f, 0.585797857f, + -0.817584813f, 0.575808191f, + -0.824589303f, 0.565731811f, + -0.831469612f, 0.555570233f, + -0.838224706f, 0.545324988f, + -0.844853565f, 0.534997620f, + -0.851355193f, 0.524589683f, + -0.857728610f, 0.514102744f, + -0.863972856f, 0.503538384f, + -0.870086991f, 0.492898192f, + -0.876070094f, 0.482183772f, + -0.881921264f, 0.471396737f, + -0.887639620f, 0.460538711f, + -0.893224301f, 0.449611330f, + -0.898674466f, 0.438616239f, + -0.903989293f, 0.427555093f, + -0.909167983f, 0.416429560f, + -0.914209756f, 0.405241314f, + -0.919113852f, 0.393992040f, + -0.923879533f, 0.382683432f, + -0.928506080f, 0.371317194f, + -0.932992799f, 0.359895037f, + -0.937339012f, 0.348418680f, + -0.941544065f, 0.336889853f, + -0.945607325f, 0.325310292f, + -0.949528181f, 0.313681740f, + -0.953306040f, 0.302005949f, + -0.956940336f, 0.290284677f, + -0.960430519f, 0.278519689f, + -0.963776066f, 0.266712757f, + -0.966976471f, 0.254865660f, + -0.970031253f, 0.242980180f, + -0.972939952f, 0.231058108f, + -0.975702130f, 0.219101240f, + -0.978317371f, 0.207111376f, + -0.980785280f, 0.195090322f, + -0.983105487f, 0.183039888f, + -0.985277642f, 0.170961889f, + -0.987301418f, 0.158858143f, + -0.989176510f, 0.146730474f, + -0.990902635f, 0.134580709f, + -0.992479535f, 0.122410675f, + -0.993906970f, 0.110222207f, + -0.995184727f, 0.098017140f, + -0.996312612f, 0.085797312f, + -0.997290457f, 0.073564564f, + -0.998118113f, 0.061320736f, + -0.998795456f, 0.049067674f, + -0.999322385f, 0.036807223f, + -0.999698819f, 0.024541229f, + -0.999924702f, 0.012271538f, + -1.000000000f, 0.000000000f, + -0.999924702f, -0.012271538f, + -0.999698819f, -0.024541229f, + -0.999322385f, -0.036807223f, + -0.998795456f, -0.049067674f, + -0.998118113f, -0.061320736f, + -0.997290457f, -0.073564564f, + -0.996312612f, -0.085797312f, + -0.995184727f, -0.098017140f, + -0.993906970f, -0.110222207f, + -0.992479535f, -0.122410675f, + -0.990902635f, -0.134580709f, + -0.989176510f, -0.146730474f, + -0.987301418f, -0.158858143f, + -0.985277642f, -0.170961889f, + -0.983105487f, -0.183039888f, + -0.980785280f, -0.195090322f, + -0.978317371f, -0.207111376f, + -0.975702130f, -0.219101240f, + -0.972939952f, -0.231058108f, + -0.970031253f, -0.242980180f, + -0.966976471f, -0.254865660f, + -0.963776066f, -0.266712757f, + -0.960430519f, -0.278519689f, + -0.956940336f, -0.290284677f, + -0.953306040f, -0.302005949f, + -0.949528181f, -0.313681740f, + -0.945607325f, -0.325310292f, + -0.941544065f, -0.336889853f, + -0.937339012f, -0.348418680f, + -0.932992799f, -0.359895037f, + -0.928506080f, -0.371317194f, + -0.923879533f, -0.382683432f, + -0.919113852f, -0.393992040f, + -0.914209756f, -0.405241314f, + -0.909167983f, -0.416429560f, + -0.903989293f, -0.427555093f, + -0.898674466f, -0.438616239f, + -0.893224301f, -0.449611330f, + -0.887639620f, -0.460538711f, + -0.881921264f, -0.471396737f, + -0.876070094f, -0.482183772f, + -0.870086991f, -0.492898192f, + -0.863972856f, -0.503538384f, + -0.857728610f, -0.514102744f, + -0.851355193f, -0.524589683f, + -0.844853565f, -0.534997620f, + -0.838224706f, -0.545324988f, + -0.831469612f, -0.555570233f, + -0.824589303f, -0.565731811f, + -0.817584813f, -0.575808191f, + -0.810457198f, -0.585797857f, + -0.803207531f, -0.595699304f, + -0.795836905f, -0.605511041f, + -0.788346428f, -0.615231591f, + -0.780737229f, -0.624859488f, + -0.773010453f, -0.634393284f, + -0.765167266f, -0.643831543f, + -0.757208847f, -0.653172843f, + -0.749136395f, -0.662415778f, + -0.740951125f, -0.671558955f, + -0.732654272f, -0.680600998f, + -0.724247083f, -0.689540545f, + -0.715730825f, -0.698376249f, + -0.707106781f, -0.707106781f, + -0.698376249f, -0.715730825f, + -0.689540545f, -0.724247083f, + -0.680600998f, -0.732654272f, + -0.671558955f, -0.740951125f, + -0.662415778f, -0.749136395f, + -0.653172843f, -0.757208847f, + -0.643831543f, -0.765167266f, + -0.634393284f, -0.773010453f, + -0.624859488f, -0.780737229f, + -0.615231591f, -0.788346428f, + -0.605511041f, -0.795836905f, + -0.595699304f, -0.803207531f, + -0.585797857f, -0.810457198f, + -0.575808191f, -0.817584813f, + -0.565731811f, -0.824589303f, + -0.555570233f, -0.831469612f, + -0.545324988f, -0.838224706f, + -0.534997620f, -0.844853565f, + -0.524589683f, -0.851355193f, + -0.514102744f, -0.857728610f, + -0.503538384f, -0.863972856f, + -0.492898192f, -0.870086991f, + -0.482183772f, -0.876070094f, + -0.471396737f, -0.881921264f, + -0.460538711f, -0.887639620f, + -0.449611330f, -0.893224301f, + -0.438616239f, -0.898674466f, + -0.427555093f, -0.903989293f, + -0.416429560f, -0.909167983f, + -0.405241314f, -0.914209756f, + -0.393992040f, -0.919113852f, + -0.382683432f, -0.923879533f, + -0.371317194f, -0.928506080f, + -0.359895037f, -0.932992799f, + -0.348418680f, -0.937339012f, + -0.336889853f, -0.941544065f, + -0.325310292f, -0.945607325f, + -0.313681740f, -0.949528181f, + -0.302005949f, -0.953306040f, + -0.290284677f, -0.956940336f, + -0.278519689f, -0.960430519f, + -0.266712757f, -0.963776066f, + -0.254865660f, -0.966976471f, + -0.242980180f, -0.970031253f, + -0.231058108f, -0.972939952f, + -0.219101240f, -0.975702130f, + -0.207111376f, -0.978317371f, + -0.195090322f, -0.980785280f, + -0.183039888f, -0.983105487f, + -0.170961889f, -0.985277642f, + -0.158858143f, -0.987301418f, + -0.146730474f, -0.989176510f, + -0.134580709f, -0.990902635f, + -0.122410675f, -0.992479535f, + -0.110222207f, -0.993906970f, + -0.098017140f, -0.995184727f, + -0.085797312f, -0.996312612f, + -0.073564564f, -0.997290457f, + -0.061320736f, -0.998118113f, + -0.049067674f, -0.998795456f, + -0.036807223f, -0.999322385f, + -0.024541229f, -0.999698819f, + -0.012271538f, -0.999924702f, + -0.000000000f, -1.000000000f, + 0.012271538f, -0.999924702f, + 0.024541229f, -0.999698819f, + 0.036807223f, -0.999322385f, + 0.049067674f, -0.998795456f, + 0.061320736f, -0.998118113f, + 0.073564564f, -0.997290457f, + 0.085797312f, -0.996312612f, + 0.098017140f, -0.995184727f, + 0.110222207f, -0.993906970f, + 0.122410675f, -0.992479535f, + 0.134580709f, -0.990902635f, + 0.146730474f, -0.989176510f, + 0.158858143f, -0.987301418f, + 0.170961889f, -0.985277642f, + 0.183039888f, -0.983105487f, + 0.195090322f, -0.980785280f, + 0.207111376f, -0.978317371f, + 0.219101240f, -0.975702130f, + 0.231058108f, -0.972939952f, + 0.242980180f, -0.970031253f, + 0.254865660f, -0.966976471f, + 0.266712757f, -0.963776066f, + 0.278519689f, -0.960430519f, + 0.290284677f, -0.956940336f, + 0.302005949f, -0.953306040f, + 0.313681740f, -0.949528181f, + 0.325310292f, -0.945607325f, + 0.336889853f, -0.941544065f, + 0.348418680f, -0.937339012f, + 0.359895037f, -0.932992799f, + 0.371317194f, -0.928506080f, + 0.382683432f, -0.923879533f, + 0.393992040f, -0.919113852f, + 0.405241314f, -0.914209756f, + 0.416429560f, -0.909167983f, + 0.427555093f, -0.903989293f, + 0.438616239f, -0.898674466f, + 0.449611330f, -0.893224301f, + 0.460538711f, -0.887639620f, + 0.471396737f, -0.881921264f, + 0.482183772f, -0.876070094f, + 0.492898192f, -0.870086991f, + 0.503538384f, -0.863972856f, + 0.514102744f, -0.857728610f, + 0.524589683f, -0.851355193f, + 0.534997620f, -0.844853565f, + 0.545324988f, -0.838224706f, + 0.555570233f, -0.831469612f, + 0.565731811f, -0.824589303f, + 0.575808191f, -0.817584813f, + 0.585797857f, -0.810457198f, + 0.595699304f, -0.803207531f, + 0.605511041f, -0.795836905f, + 0.615231591f, -0.788346428f, + 0.624859488f, -0.780737229f, + 0.634393284f, -0.773010453f, + 0.643831543f, -0.765167266f, + 0.653172843f, -0.757208847f, + 0.662415778f, -0.749136395f, + 0.671558955f, -0.740951125f, + 0.680600998f, -0.732654272f, + 0.689540545f, -0.724247083f, + 0.698376249f, -0.715730825f, + 0.707106781f, -0.707106781f, + 0.715730825f, -0.698376249f, + 0.724247083f, -0.689540545f, + 0.732654272f, -0.680600998f, + 0.740951125f, -0.671558955f, + 0.749136395f, -0.662415778f, + 0.757208847f, -0.653172843f, + 0.765167266f, -0.643831543f, + 0.773010453f, -0.634393284f, + 0.780737229f, -0.624859488f, + 0.788346428f, -0.615231591f, + 0.795836905f, -0.605511041f, + 0.803207531f, -0.595699304f, + 0.810457198f, -0.585797857f, + 0.817584813f, -0.575808191f, + 0.824589303f, -0.565731811f, + 0.831469612f, -0.555570233f, + 0.838224706f, -0.545324988f, + 0.844853565f, -0.534997620f, + 0.851355193f, -0.524589683f, + 0.857728610f, -0.514102744f, + 0.863972856f, -0.503538384f, + 0.870086991f, -0.492898192f, + 0.876070094f, -0.482183772f, + 0.881921264f, -0.471396737f, + 0.887639620f, -0.460538711f, + 0.893224301f, -0.449611330f, + 0.898674466f, -0.438616239f, + 0.903989293f, -0.427555093f, + 0.909167983f, -0.416429560f, + 0.914209756f, -0.405241314f, + 0.919113852f, -0.393992040f, + 0.923879533f, -0.382683432f, + 0.928506080f, -0.371317194f, + 0.932992799f, -0.359895037f, + 0.937339012f, -0.348418680f, + 0.941544065f, -0.336889853f, + 0.945607325f, -0.325310292f, + 0.949528181f, -0.313681740f, + 0.953306040f, -0.302005949f, + 0.956940336f, -0.290284677f, + 0.960430519f, -0.278519689f, + 0.963776066f, -0.266712757f, + 0.966976471f, -0.254865660f, + 0.970031253f, -0.242980180f, + 0.972939952f, -0.231058108f, + 0.975702130f, -0.219101240f, + 0.978317371f, -0.207111376f, + 0.980785280f, -0.195090322f, + 0.983105487f, -0.183039888f, + 0.985277642f, -0.170961889f, + 0.987301418f, -0.158858143f, + 0.989176510f, -0.146730474f, + 0.990902635f, -0.134580709f, + 0.992479535f, -0.122410675f, + 0.993906970f, -0.110222207f, + 0.995184727f, -0.098017140f, + 0.996312612f, -0.085797312f, + 0.997290457f, -0.073564564f, + 0.998118113f, -0.061320736f, + 0.998795456f, -0.049067674f, + 0.999322385f, -0.036807223f, + 0.999698819f, -0.024541229f, + 0.999924702f, -0.012271538f +}; +/** +* \par +* Example code for Floating-point Twiddle factors Generation: +* \par +*
for(i = 0; i< N/; i++)    
+* {    
+*	twiddleCoef[2*i]= cos(i * 2*PI/(float)N);    
+*	twiddleCoef[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 1024 and PI = 3.14159265358979 +* \par +* Cos and Sin values are in interleaved fashion +* +*/ +const float32_t twiddleCoef_1024[2048] = { +1.000000000f , 0.000000000f , +0.999981175f , 0.006135885f , +0.999924702f , 0.012271538f , +0.999830582f , 0.018406730f , +0.999698819f , 0.024541229f , +0.999529418f , 0.030674803f , +0.999322385f , 0.036807223f , +0.999077728f , 0.042938257f , +0.998795456f , 0.049067674f , +0.998475581f , 0.055195244f , +0.998118113f , 0.061320736f , +0.997723067f , 0.067443920f , +0.997290457f , 0.073564564f , +0.996820299f , 0.079682438f , +0.996312612f , 0.085797312f , +0.995767414f , 0.091908956f , +0.995184727f , 0.098017140f , +0.994564571f , 0.104121634f , +0.993906970f , 0.110222207f , +0.993211949f , 0.116318631f , +0.992479535f , 0.122410675f , +0.991709754f , 0.128498111f , +0.990902635f , 0.134580709f , +0.990058210f , 0.140658239f , +0.989176510f , 0.146730474f , +0.988257568f , 0.152797185f , +0.987301418f , 0.158858143f , +0.986308097f , 0.164913120f , +0.985277642f , 0.170961889f , +0.984210092f , 0.177004220f , +0.983105487f , 0.183039888f , +0.981963869f , 0.189068664f , +0.980785280f , 0.195090322f , +0.979569766f , 0.201104635f , +0.978317371f , 0.207111376f , +0.977028143f , 0.213110320f , +0.975702130f , 0.219101240f , +0.974339383f , 0.225083911f , +0.972939952f , 0.231058108f , +0.971503891f , 0.237023606f , +0.970031253f , 0.242980180f , +0.968522094f , 0.248927606f , +0.966976471f , 0.254865660f , +0.965394442f , 0.260794118f , +0.963776066f , 0.266712757f , +0.962121404f , 0.272621355f , +0.960430519f , 0.278519689f , +0.958703475f , 0.284407537f , +0.956940336f , 0.290284677f , +0.955141168f , 0.296150888f , +0.953306040f , 0.302005949f , +0.951435021f , 0.307849640f , +0.949528181f , 0.313681740f , +0.947585591f , 0.319502031f , +0.945607325f , 0.325310292f , +0.943593458f , 0.331106306f , +0.941544065f , 0.336889853f , +0.939459224f , 0.342660717f , +0.937339012f , 0.348418680f , +0.935183510f , 0.354163525f , +0.932992799f , 0.359895037f , +0.930766961f , 0.365612998f , +0.928506080f , 0.371317194f , +0.926210242f , 0.377007410f , +0.923879533f , 0.382683432f , +0.921514039f , 0.388345047f , +0.919113852f , 0.393992040f , +0.916679060f , 0.399624200f , +0.914209756f , 0.405241314f , +0.911706032f , 0.410843171f , +0.909167983f , 0.416429560f , +0.906595705f , 0.422000271f , +0.903989293f , 0.427555093f , +0.901348847f , 0.433093819f , +0.898674466f , 0.438616239f , +0.895966250f , 0.444122145f , +0.893224301f , 0.449611330f , +0.890448723f , 0.455083587f , +0.887639620f , 0.460538711f , +0.884797098f , 0.465976496f , +0.881921264f , 0.471396737f , +0.879012226f , 0.476799230f , +0.876070094f , 0.482183772f , +0.873094978f , 0.487550160f , +0.870086991f , 0.492898192f , +0.867046246f , 0.498227667f , +0.863972856f , 0.503538384f , +0.860866939f , 0.508830143f , +0.857728610f , 0.514102744f , +0.854557988f , 0.519355990f , +0.851355193f , 0.524589683f , +0.848120345f , 0.529803625f , +0.844853565f , 0.534997620f , +0.841554977f , 0.540171473f , +0.838224706f , 0.545324988f , +0.834862875f , 0.550457973f , +0.831469612f , 0.555570233f , +0.828045045f , 0.560661576f , +0.824589303f , 0.565731811f , +0.821102515f , 0.570780746f , +0.817584813f , 0.575808191f , +0.814036330f , 0.580813958f , +0.810457198f , 0.585797857f , +0.806847554f , 0.590759702f , +0.803207531f , 0.595699304f , +0.799537269f , 0.600616479f , +0.795836905f , 0.605511041f , +0.792106577f , 0.610382806f , +0.788346428f , 0.615231591f , +0.784556597f , 0.620057212f , +0.780737229f , 0.624859488f , +0.776888466f , 0.629638239f , +0.773010453f , 0.634393284f , +0.769103338f , 0.639124445f , +0.765167266f , 0.643831543f , +0.761202385f , 0.648514401f , +0.757208847f , 0.653172843f , +0.753186799f , 0.657806693f , +0.749136395f , 0.662415778f , +0.745057785f , 0.666999922f , +0.740951125f , 0.671558955f , +0.736816569f , 0.676092704f , +0.732654272f , 0.680600998f , +0.728464390f , 0.685083668f , +0.724247083f , 0.689540545f , +0.720002508f , 0.693971461f , +0.715730825f , 0.698376249f , +0.711432196f , 0.702754744f , +0.707106781f , 0.707106781f , +0.702754744f , 0.711432196f , +0.698376249f , 0.715730825f , +0.693971461f , 0.720002508f , +0.689540545f , 0.724247083f , +0.685083668f , 0.728464390f , +0.680600998f , 0.732654272f , +0.676092704f , 0.736816569f , +0.671558955f , 0.740951125f , +0.666999922f , 0.745057785f , +0.662415778f , 0.749136395f , +0.657806693f , 0.753186799f , +0.653172843f , 0.757208847f , +0.648514401f , 0.761202385f , +0.643831543f , 0.765167266f , +0.639124445f , 0.769103338f , +0.634393284f , 0.773010453f , +0.629638239f , 0.776888466f , +0.624859488f , 0.780737229f , +0.620057212f , 0.784556597f , +0.615231591f , 0.788346428f , +0.610382806f , 0.792106577f , +0.605511041f , 0.795836905f , +0.600616479f , 0.799537269f , +0.595699304f , 0.803207531f , +0.590759702f , 0.806847554f , +0.585797857f , 0.810457198f , +0.580813958f , 0.814036330f , +0.575808191f , 0.817584813f , +0.570780746f , 0.821102515f , +0.565731811f , 0.824589303f , +0.560661576f , 0.828045045f , +0.555570233f , 0.831469612f , +0.550457973f , 0.834862875f , +0.545324988f , 0.838224706f , +0.540171473f , 0.841554977f , +0.534997620f , 0.844853565f , +0.529803625f , 0.848120345f , +0.524589683f , 0.851355193f , +0.519355990f , 0.854557988f , +0.514102744f , 0.857728610f , +0.508830143f , 0.860866939f , +0.503538384f , 0.863972856f , +0.498227667f , 0.867046246f , +0.492898192f , 0.870086991f , +0.487550160f , 0.873094978f , +0.482183772f , 0.876070094f , +0.476799230f , 0.879012226f , +0.471396737f , 0.881921264f , +0.465976496f , 0.884797098f , +0.460538711f , 0.887639620f , +0.455083587f , 0.890448723f , +0.449611330f , 0.893224301f , +0.444122145f , 0.895966250f , +0.438616239f , 0.898674466f , +0.433093819f , 0.901348847f , +0.427555093f , 0.903989293f , +0.422000271f , 0.906595705f , +0.416429560f , 0.909167983f , +0.410843171f , 0.911706032f , +0.405241314f , 0.914209756f , +0.399624200f , 0.916679060f , +0.393992040f , 0.919113852f , +0.388345047f , 0.921514039f , +0.382683432f , 0.923879533f , +0.377007410f , 0.926210242f , +0.371317194f , 0.928506080f , +0.365612998f , 0.930766961f , +0.359895037f , 0.932992799f , +0.354163525f , 0.935183510f , +0.348418680f , 0.937339012f , +0.342660717f , 0.939459224f , +0.336889853f , 0.941544065f , +0.331106306f , 0.943593458f , +0.325310292f , 0.945607325f , +0.319502031f , 0.947585591f , +0.313681740f , 0.949528181f , +0.307849640f , 0.951435021f , +0.302005949f , 0.953306040f , +0.296150888f , 0.955141168f , +0.290284677f , 0.956940336f , +0.284407537f , 0.958703475f , +0.278519689f , 0.960430519f , +0.272621355f , 0.962121404f , +0.266712757f , 0.963776066f , +0.260794118f , 0.965394442f , +0.254865660f , 0.966976471f , +0.248927606f , 0.968522094f , +0.242980180f , 0.970031253f , +0.237023606f , 0.971503891f , +0.231058108f , 0.972939952f , +0.225083911f , 0.974339383f , +0.219101240f , 0.975702130f , +0.213110320f , 0.977028143f , +0.207111376f , 0.978317371f , +0.201104635f , 0.979569766f , +0.195090322f , 0.980785280f , +0.189068664f , 0.981963869f , +0.183039888f , 0.983105487f , +0.177004220f , 0.984210092f , +0.170961889f , 0.985277642f , +0.164913120f , 0.986308097f , +0.158858143f , 0.987301418f , +0.152797185f , 0.988257568f , +0.146730474f , 0.989176510f , +0.140658239f , 0.990058210f , +0.134580709f , 0.990902635f , +0.128498111f , 0.991709754f , +0.122410675f , 0.992479535f , +0.116318631f , 0.993211949f , +0.110222207f , 0.993906970f , +0.104121634f , 0.994564571f , +0.098017140f , 0.995184727f , +0.091908956f , 0.995767414f , +0.085797312f , 0.996312612f , +0.079682438f , 0.996820299f , +0.073564564f , 0.997290457f , +0.067443920f , 0.997723067f , +0.061320736f , 0.998118113f , +0.055195244f , 0.998475581f , +0.049067674f , 0.998795456f , +0.042938257f , 0.999077728f , +0.036807223f , 0.999322385f , +0.030674803f , 0.999529418f , +0.024541229f , 0.999698819f , +0.018406730f , 0.999830582f , +0.012271538f , 0.999924702f , +0.006135885f , 0.999981175f , +0.000000000f , 1.000000000f , +-0.006135885f , 0.999981175f , +-0.012271538f , 0.999924702f , +-0.018406730f , 0.999830582f , +-0.024541229f , 0.999698819f , +-0.030674803f , 0.999529418f , +-0.036807223f , 0.999322385f , +-0.042938257f , 0.999077728f , +-0.049067674f , 0.998795456f , +-0.055195244f , 0.998475581f , +-0.061320736f , 0.998118113f , +-0.067443920f , 0.997723067f , +-0.073564564f , 0.997290457f , +-0.079682438f , 0.996820299f , +-0.085797312f , 0.996312612f , +-0.091908956f , 0.995767414f , +-0.098017140f , 0.995184727f , +-0.104121634f , 0.994564571f , +-0.110222207f , 0.993906970f , +-0.116318631f , 0.993211949f , +-0.122410675f , 0.992479535f , +-0.128498111f , 0.991709754f , +-0.134580709f , 0.990902635f , +-0.140658239f , 0.990058210f , +-0.146730474f , 0.989176510f , +-0.152797185f , 0.988257568f , +-0.158858143f , 0.987301418f , +-0.164913120f , 0.986308097f , +-0.170961889f , 0.985277642f , +-0.177004220f , 0.984210092f , +-0.183039888f , 0.983105487f , +-0.189068664f , 0.981963869f , +-0.195090322f , 0.980785280f , +-0.201104635f , 0.979569766f , +-0.207111376f , 0.978317371f , +-0.213110320f , 0.977028143f , +-0.219101240f , 0.975702130f , +-0.225083911f , 0.974339383f , +-0.231058108f , 0.972939952f , +-0.237023606f , 0.971503891f , +-0.242980180f , 0.970031253f , +-0.248927606f , 0.968522094f , +-0.254865660f , 0.966976471f , +-0.260794118f , 0.965394442f , +-0.266712757f , 0.963776066f , +-0.272621355f , 0.962121404f , +-0.278519689f , 0.960430519f , +-0.284407537f , 0.958703475f , +-0.290284677f , 0.956940336f , +-0.296150888f , 0.955141168f , +-0.302005949f , 0.953306040f , +-0.307849640f , 0.951435021f , +-0.313681740f , 0.949528181f , +-0.319502031f , 0.947585591f , +-0.325310292f , 0.945607325f , +-0.331106306f , 0.943593458f , +-0.336889853f , 0.941544065f , +-0.342660717f , 0.939459224f , +-0.348418680f , 0.937339012f , +-0.354163525f , 0.935183510f , +-0.359895037f , 0.932992799f , +-0.365612998f , 0.930766961f , +-0.371317194f , 0.928506080f , +-0.377007410f , 0.926210242f , +-0.382683432f , 0.923879533f , +-0.388345047f , 0.921514039f , +-0.393992040f , 0.919113852f , +-0.399624200f , 0.916679060f , +-0.405241314f , 0.914209756f , +-0.410843171f , 0.911706032f , +-0.416429560f , 0.909167983f , +-0.422000271f , 0.906595705f , +-0.427555093f , 0.903989293f , +-0.433093819f , 0.901348847f , +-0.438616239f , 0.898674466f , +-0.444122145f , 0.895966250f , +-0.449611330f , 0.893224301f , +-0.455083587f , 0.890448723f , +-0.460538711f , 0.887639620f , +-0.465976496f , 0.884797098f , +-0.471396737f , 0.881921264f , +-0.476799230f , 0.879012226f , +-0.482183772f , 0.876070094f , +-0.487550160f , 0.873094978f , +-0.492898192f , 0.870086991f , +-0.498227667f , 0.867046246f , +-0.503538384f , 0.863972856f , +-0.508830143f , 0.860866939f , +-0.514102744f , 0.857728610f , +-0.519355990f , 0.854557988f , +-0.524589683f , 0.851355193f , +-0.529803625f , 0.848120345f , +-0.534997620f , 0.844853565f , +-0.540171473f , 0.841554977f , +-0.545324988f , 0.838224706f , +-0.550457973f , 0.834862875f , +-0.555570233f , 0.831469612f , +-0.560661576f , 0.828045045f , +-0.565731811f , 0.824589303f , +-0.570780746f , 0.821102515f , +-0.575808191f , 0.817584813f , +-0.580813958f , 0.814036330f , +-0.585797857f , 0.810457198f , +-0.590759702f , 0.806847554f , +-0.595699304f , 0.803207531f , +-0.600616479f , 0.799537269f , +-0.605511041f , 0.795836905f , +-0.610382806f , 0.792106577f , +-0.615231591f , 0.788346428f , +-0.620057212f , 0.784556597f , +-0.624859488f , 0.780737229f , +-0.629638239f , 0.776888466f , +-0.634393284f , 0.773010453f , +-0.639124445f , 0.769103338f , +-0.643831543f , 0.765167266f , +-0.648514401f , 0.761202385f , +-0.653172843f , 0.757208847f , +-0.657806693f , 0.753186799f , +-0.662415778f , 0.749136395f , +-0.666999922f , 0.745057785f , +-0.671558955f , 0.740951125f , +-0.676092704f , 0.736816569f , +-0.680600998f , 0.732654272f , +-0.685083668f , 0.728464390f , +-0.689540545f , 0.724247083f , +-0.693971461f , 0.720002508f , +-0.698376249f , 0.715730825f , +-0.702754744f , 0.711432196f , +-0.707106781f , 0.707106781f , +-0.711432196f , 0.702754744f , +-0.715730825f , 0.698376249f , +-0.720002508f , 0.693971461f , +-0.724247083f , 0.689540545f , +-0.728464390f , 0.685083668f , +-0.732654272f , 0.680600998f , +-0.736816569f , 0.676092704f , +-0.740951125f , 0.671558955f , +-0.745057785f , 0.666999922f , +-0.749136395f , 0.662415778f , +-0.753186799f , 0.657806693f , +-0.757208847f , 0.653172843f , +-0.761202385f , 0.648514401f , +-0.765167266f , 0.643831543f , +-0.769103338f , 0.639124445f , +-0.773010453f , 0.634393284f , +-0.776888466f , 0.629638239f , +-0.780737229f , 0.624859488f , +-0.784556597f , 0.620057212f , +-0.788346428f , 0.615231591f , +-0.792106577f , 0.610382806f , +-0.795836905f , 0.605511041f , +-0.799537269f , 0.600616479f , +-0.803207531f , 0.595699304f , +-0.806847554f , 0.590759702f , +-0.810457198f , 0.585797857f , +-0.814036330f , 0.580813958f , +-0.817584813f , 0.575808191f , +-0.821102515f , 0.570780746f , +-0.824589303f , 0.565731811f , +-0.828045045f , 0.560661576f , +-0.831469612f , 0.555570233f , +-0.834862875f , 0.550457973f , +-0.838224706f , 0.545324988f , +-0.841554977f , 0.540171473f , +-0.844853565f , 0.534997620f , +-0.848120345f , 0.529803625f , +-0.851355193f , 0.524589683f , +-0.854557988f , 0.519355990f , +-0.857728610f , 0.514102744f , +-0.860866939f , 0.508830143f , +-0.863972856f , 0.503538384f , +-0.867046246f , 0.498227667f , +-0.870086991f , 0.492898192f , +-0.873094978f , 0.487550160f , +-0.876070094f , 0.482183772f , +-0.879012226f , 0.476799230f , +-0.881921264f , 0.471396737f , +-0.884797098f , 0.465976496f , +-0.887639620f , 0.460538711f , +-0.890448723f , 0.455083587f , +-0.893224301f , 0.449611330f , +-0.895966250f , 0.444122145f , +-0.898674466f , 0.438616239f , +-0.901348847f , 0.433093819f , +-0.903989293f , 0.427555093f , +-0.906595705f , 0.422000271f , +-0.909167983f , 0.416429560f , +-0.911706032f , 0.410843171f , +-0.914209756f , 0.405241314f , +-0.916679060f , 0.399624200f , +-0.919113852f , 0.393992040f , +-0.921514039f , 0.388345047f , +-0.923879533f , 0.382683432f , +-0.926210242f , 0.377007410f , +-0.928506080f , 0.371317194f , +-0.930766961f , 0.365612998f , +-0.932992799f , 0.359895037f , +-0.935183510f , 0.354163525f , +-0.937339012f , 0.348418680f , +-0.939459224f , 0.342660717f , +-0.941544065f , 0.336889853f , +-0.943593458f , 0.331106306f , +-0.945607325f , 0.325310292f , +-0.947585591f , 0.319502031f , +-0.949528181f , 0.313681740f , +-0.951435021f , 0.307849640f , +-0.953306040f , 0.302005949f , +-0.955141168f , 0.296150888f , +-0.956940336f , 0.290284677f , +-0.958703475f , 0.284407537f , +-0.960430519f , 0.278519689f , +-0.962121404f , 0.272621355f , +-0.963776066f , 0.266712757f , +-0.965394442f , 0.260794118f , +-0.966976471f , 0.254865660f , +-0.968522094f , 0.248927606f , +-0.970031253f , 0.242980180f , +-0.971503891f , 0.237023606f , +-0.972939952f , 0.231058108f , +-0.974339383f , 0.225083911f , +-0.975702130f , 0.219101240f , +-0.977028143f , 0.213110320f , +-0.978317371f , 0.207111376f , +-0.979569766f , 0.201104635f , +-0.980785280f , 0.195090322f , +-0.981963869f , 0.189068664f , +-0.983105487f , 0.183039888f , +-0.984210092f , 0.177004220f , +-0.985277642f , 0.170961889f , +-0.986308097f , 0.164913120f , +-0.987301418f , 0.158858143f , +-0.988257568f , 0.152797185f , +-0.989176510f , 0.146730474f , +-0.990058210f , 0.140658239f , +-0.990902635f , 0.134580709f , +-0.991709754f , 0.128498111f , +-0.992479535f , 0.122410675f , +-0.993211949f , 0.116318631f , +-0.993906970f , 0.110222207f , +-0.994564571f , 0.104121634f , +-0.995184727f , 0.098017140f , +-0.995767414f , 0.091908956f , +-0.996312612f , 0.085797312f , +-0.996820299f , 0.079682438f , +-0.997290457f , 0.073564564f , +-0.997723067f , 0.067443920f , +-0.998118113f , 0.061320736f , +-0.998475581f , 0.055195244f , +-0.998795456f , 0.049067674f , +-0.999077728f , 0.042938257f , +-0.999322385f , 0.036807223f , +-0.999529418f , 0.030674803f , +-0.999698819f , 0.024541229f , +-0.999830582f , 0.018406730f , +-0.999924702f , 0.012271538f , +-0.999981175f , 0.006135885f , +-1.000000000f , 0.000000000f , +-0.999981175f , -0.006135885f , +-0.999924702f , -0.012271538f , +-0.999830582f , -0.018406730f , +-0.999698819f , -0.024541229f , +-0.999529418f , -0.030674803f , +-0.999322385f , -0.036807223f , +-0.999077728f , -0.042938257f , +-0.998795456f , -0.049067674f , +-0.998475581f , -0.055195244f , +-0.998118113f , -0.061320736f , +-0.997723067f , -0.067443920f , +-0.997290457f , -0.073564564f , +-0.996820299f , -0.079682438f , +-0.996312612f , -0.085797312f , +-0.995767414f , -0.091908956f , +-0.995184727f , -0.098017140f , +-0.994564571f , -0.104121634f , +-0.993906970f , -0.110222207f , +-0.993211949f , -0.116318631f , +-0.992479535f , -0.122410675f , +-0.991709754f , -0.128498111f , +-0.990902635f , -0.134580709f , +-0.990058210f , -0.140658239f , +-0.989176510f , -0.146730474f , +-0.988257568f , -0.152797185f , +-0.987301418f , -0.158858143f , +-0.986308097f , -0.164913120f , +-0.985277642f , -0.170961889f , +-0.984210092f , -0.177004220f , +-0.983105487f , -0.183039888f , +-0.981963869f , -0.189068664f , +-0.980785280f , -0.195090322f , +-0.979569766f , -0.201104635f , +-0.978317371f , -0.207111376f , +-0.977028143f , -0.213110320f , +-0.975702130f , -0.219101240f , +-0.974339383f , -0.225083911f , +-0.972939952f , -0.231058108f , +-0.971503891f , -0.237023606f , +-0.970031253f , -0.242980180f , +-0.968522094f , -0.248927606f , +-0.966976471f , -0.254865660f , +-0.965394442f , -0.260794118f , +-0.963776066f , -0.266712757f , +-0.962121404f , -0.272621355f , +-0.960430519f , -0.278519689f , +-0.958703475f , -0.284407537f , +-0.956940336f , -0.290284677f , +-0.955141168f , -0.296150888f , +-0.953306040f , -0.302005949f , +-0.951435021f , -0.307849640f , +-0.949528181f , -0.313681740f , +-0.947585591f , -0.319502031f , +-0.945607325f , -0.325310292f , +-0.943593458f , -0.331106306f , +-0.941544065f , -0.336889853f , +-0.939459224f , -0.342660717f , +-0.937339012f , -0.348418680f , +-0.935183510f , -0.354163525f , +-0.932992799f , -0.359895037f , +-0.930766961f , -0.365612998f , +-0.928506080f , -0.371317194f , +-0.926210242f , -0.377007410f , +-0.923879533f , -0.382683432f , +-0.921514039f , -0.388345047f , +-0.919113852f , -0.393992040f , +-0.916679060f , -0.399624200f , +-0.914209756f , -0.405241314f , +-0.911706032f , -0.410843171f , +-0.909167983f , -0.416429560f , +-0.906595705f , -0.422000271f , +-0.903989293f , -0.427555093f , +-0.901348847f , -0.433093819f , +-0.898674466f , -0.438616239f , +-0.895966250f , -0.444122145f , +-0.893224301f , -0.449611330f , +-0.890448723f , -0.455083587f , +-0.887639620f , -0.460538711f , +-0.884797098f , -0.465976496f , +-0.881921264f , -0.471396737f , +-0.879012226f , -0.476799230f , +-0.876070094f , -0.482183772f , +-0.873094978f , -0.487550160f , +-0.870086991f , -0.492898192f , +-0.867046246f , -0.498227667f , +-0.863972856f , -0.503538384f , +-0.860866939f , -0.508830143f , +-0.857728610f , -0.514102744f , +-0.854557988f , -0.519355990f , +-0.851355193f , -0.524589683f , +-0.848120345f , -0.529803625f , +-0.844853565f , -0.534997620f , +-0.841554977f , -0.540171473f , +-0.838224706f , -0.545324988f , +-0.834862875f , -0.550457973f , +-0.831469612f , -0.555570233f , +-0.828045045f , -0.560661576f , +-0.824589303f , -0.565731811f , +-0.821102515f , -0.570780746f , +-0.817584813f , -0.575808191f , +-0.814036330f , -0.580813958f , +-0.810457198f , -0.585797857f , +-0.806847554f , -0.590759702f , +-0.803207531f , -0.595699304f , +-0.799537269f , -0.600616479f , +-0.795836905f , -0.605511041f , +-0.792106577f , -0.610382806f , +-0.788346428f , -0.615231591f , +-0.784556597f , -0.620057212f , +-0.780737229f , -0.624859488f , +-0.776888466f , -0.629638239f , +-0.773010453f , -0.634393284f , +-0.769103338f , -0.639124445f , +-0.765167266f , -0.643831543f , +-0.761202385f , -0.648514401f , +-0.757208847f , -0.653172843f , +-0.753186799f , -0.657806693f , +-0.749136395f , -0.662415778f , +-0.745057785f , -0.666999922f , +-0.740951125f , -0.671558955f , +-0.736816569f , -0.676092704f , +-0.732654272f , -0.680600998f , +-0.728464390f , -0.685083668f , +-0.724247083f , -0.689540545f , +-0.720002508f , -0.693971461f , +-0.715730825f , -0.698376249f , +-0.711432196f , -0.702754744f , +-0.707106781f , -0.707106781f , +-0.702754744f , -0.711432196f , +-0.698376249f , -0.715730825f , +-0.693971461f , -0.720002508f , +-0.689540545f , -0.724247083f , +-0.685083668f , -0.728464390f , +-0.680600998f , -0.732654272f , +-0.676092704f , -0.736816569f , +-0.671558955f , -0.740951125f , +-0.666999922f , -0.745057785f , +-0.662415778f , -0.749136395f , +-0.657806693f , -0.753186799f , +-0.653172843f , -0.757208847f , +-0.648514401f , -0.761202385f , +-0.643831543f , -0.765167266f , +-0.639124445f , -0.769103338f , +-0.634393284f , -0.773010453f , +-0.629638239f , -0.776888466f , +-0.624859488f , -0.780737229f , +-0.620057212f , -0.784556597f , +-0.615231591f , -0.788346428f , +-0.610382806f , -0.792106577f , +-0.605511041f , -0.795836905f , +-0.600616479f , -0.799537269f , +-0.595699304f , -0.803207531f , +-0.590759702f , -0.806847554f , +-0.585797857f , -0.810457198f , +-0.580813958f , -0.814036330f , +-0.575808191f , -0.817584813f , +-0.570780746f , -0.821102515f , +-0.565731811f , -0.824589303f , +-0.560661576f , -0.828045045f , +-0.555570233f , -0.831469612f , +-0.550457973f , -0.834862875f , +-0.545324988f , -0.838224706f , +-0.540171473f , -0.841554977f , +-0.534997620f , -0.844853565f , +-0.529803625f , -0.848120345f , +-0.524589683f , -0.851355193f , +-0.519355990f , -0.854557988f , +-0.514102744f , -0.857728610f , +-0.508830143f , -0.860866939f , +-0.503538384f , -0.863972856f , +-0.498227667f , -0.867046246f , +-0.492898192f , -0.870086991f , +-0.487550160f , -0.873094978f , +-0.482183772f , -0.876070094f , +-0.476799230f , -0.879012226f , +-0.471396737f , -0.881921264f , +-0.465976496f , -0.884797098f , +-0.460538711f , -0.887639620f , +-0.455083587f , -0.890448723f , +-0.449611330f , -0.893224301f , +-0.444122145f , -0.895966250f , +-0.438616239f , -0.898674466f , +-0.433093819f , -0.901348847f , +-0.427555093f , -0.903989293f , +-0.422000271f , -0.906595705f , +-0.416429560f , -0.909167983f , +-0.410843171f , -0.911706032f , +-0.405241314f , -0.914209756f , +-0.399624200f , -0.916679060f , +-0.393992040f , -0.919113852f , +-0.388345047f , -0.921514039f , +-0.382683432f , -0.923879533f , +-0.377007410f , -0.926210242f , +-0.371317194f , -0.928506080f , +-0.365612998f , -0.930766961f , +-0.359895037f , -0.932992799f , +-0.354163525f , -0.935183510f , +-0.348418680f , -0.937339012f , +-0.342660717f , -0.939459224f , +-0.336889853f , -0.941544065f , +-0.331106306f , -0.943593458f , +-0.325310292f , -0.945607325f , +-0.319502031f , -0.947585591f , +-0.313681740f , -0.949528181f , +-0.307849640f , -0.951435021f , +-0.302005949f , -0.953306040f , +-0.296150888f , -0.955141168f , +-0.290284677f , -0.956940336f , +-0.284407537f , -0.958703475f , +-0.278519689f , -0.960430519f , +-0.272621355f , -0.962121404f , +-0.266712757f , -0.963776066f , +-0.260794118f , -0.965394442f , +-0.254865660f , -0.966976471f , +-0.248927606f , -0.968522094f , +-0.242980180f , -0.970031253f , +-0.237023606f , -0.971503891f , +-0.231058108f , -0.972939952f , +-0.225083911f , -0.974339383f , +-0.219101240f , -0.975702130f , +-0.213110320f , -0.977028143f , +-0.207111376f , -0.978317371f , +-0.201104635f , -0.979569766f , +-0.195090322f , -0.980785280f , +-0.189068664f , -0.981963869f , +-0.183039888f , -0.983105487f , +-0.177004220f , -0.984210092f , +-0.170961889f , -0.985277642f , +-0.164913120f , -0.986308097f , +-0.158858143f , -0.987301418f , +-0.152797185f , -0.988257568f , +-0.146730474f , -0.989176510f , +-0.140658239f , -0.990058210f , +-0.134580709f , -0.990902635f , +-0.128498111f , -0.991709754f , +-0.122410675f , -0.992479535f , +-0.116318631f , -0.993211949f , +-0.110222207f , -0.993906970f , +-0.104121634f , -0.994564571f , +-0.098017140f , -0.995184727f , +-0.091908956f , -0.995767414f , +-0.085797312f , -0.996312612f , +-0.079682438f , -0.996820299f , +-0.073564564f , -0.997290457f , +-0.067443920f , -0.997723067f , +-0.061320736f , -0.998118113f , +-0.055195244f , -0.998475581f , +-0.049067674f , -0.998795456f , +-0.042938257f , -0.999077728f , +-0.036807223f , -0.999322385f , +-0.030674803f , -0.999529418f , +-0.024541229f , -0.999698819f , +-0.018406730f , -0.999830582f , +-0.012271538f , -0.999924702f , +-0.006135885f , -0.999981175f , +-0.000000000f , -1.000000000f , +0.006135885f , -0.999981175f , +0.012271538f , -0.999924702f , +0.018406730f , -0.999830582f , +0.024541229f , -0.999698819f , +0.030674803f , -0.999529418f , +0.036807223f , -0.999322385f , +0.042938257f , -0.999077728f , +0.049067674f , -0.998795456f , +0.055195244f , -0.998475581f , +0.061320736f , -0.998118113f , +0.067443920f , -0.997723067f , +0.073564564f , -0.997290457f , +0.079682438f , -0.996820299f , +0.085797312f , -0.996312612f , +0.091908956f , -0.995767414f , +0.098017140f , -0.995184727f , +0.104121634f , -0.994564571f , +0.110222207f , -0.993906970f , +0.116318631f , -0.993211949f , +0.122410675f , -0.992479535f , +0.128498111f , -0.991709754f , +0.134580709f , -0.990902635f , +0.140658239f , -0.990058210f , +0.146730474f , -0.989176510f , +0.152797185f , -0.988257568f , +0.158858143f , -0.987301418f , +0.164913120f , -0.986308097f , +0.170961889f , -0.985277642f , +0.177004220f , -0.984210092f , +0.183039888f , -0.983105487f , +0.189068664f , -0.981963869f , +0.195090322f , -0.980785280f , +0.201104635f , -0.979569766f , +0.207111376f , -0.978317371f , +0.213110320f , -0.977028143f , +0.219101240f , -0.975702130f , +0.225083911f , -0.974339383f , +0.231058108f , -0.972939952f , +0.237023606f , -0.971503891f , +0.242980180f , -0.970031253f , +0.248927606f , -0.968522094f , +0.254865660f , -0.966976471f , +0.260794118f , -0.965394442f , +0.266712757f , -0.963776066f , +0.272621355f , -0.962121404f , +0.278519689f , -0.960430519f , +0.284407537f , -0.958703475f , +0.290284677f , -0.956940336f , +0.296150888f , -0.955141168f , +0.302005949f , -0.953306040f , +0.307849640f , -0.951435021f , +0.313681740f , -0.949528181f , +0.319502031f , -0.947585591f , +0.325310292f , -0.945607325f , +0.331106306f , -0.943593458f , +0.336889853f , -0.941544065f , +0.342660717f , -0.939459224f , +0.348418680f , -0.937339012f , +0.354163525f , -0.935183510f , +0.359895037f , -0.932992799f , +0.365612998f , -0.930766961f , +0.371317194f , -0.928506080f , +0.377007410f , -0.926210242f , +0.382683432f , -0.923879533f , +0.388345047f , -0.921514039f , +0.393992040f , -0.919113852f , +0.399624200f , -0.916679060f , +0.405241314f , -0.914209756f , +0.410843171f , -0.911706032f , +0.416429560f , -0.909167983f , +0.422000271f , -0.906595705f , +0.427555093f , -0.903989293f , +0.433093819f , -0.901348847f , +0.438616239f , -0.898674466f , +0.444122145f , -0.895966250f , +0.449611330f , -0.893224301f , +0.455083587f , -0.890448723f , +0.460538711f , -0.887639620f , +0.465976496f , -0.884797098f , +0.471396737f , -0.881921264f , +0.476799230f , -0.879012226f , +0.482183772f , -0.876070094f , +0.487550160f , -0.873094978f , +0.492898192f , -0.870086991f , +0.498227667f , -0.867046246f , +0.503538384f , -0.863972856f , +0.508830143f , -0.860866939f , +0.514102744f , -0.857728610f , +0.519355990f , -0.854557988f , +0.524589683f , -0.851355193f , +0.529803625f , -0.848120345f , +0.534997620f , -0.844853565f , +0.540171473f , -0.841554977f , +0.545324988f , -0.838224706f , +0.550457973f , -0.834862875f , +0.555570233f , -0.831469612f , +0.560661576f , -0.828045045f , +0.565731811f , -0.824589303f , +0.570780746f , -0.821102515f , +0.575808191f , -0.817584813f , +0.580813958f , -0.814036330f , +0.585797857f , -0.810457198f , +0.590759702f , -0.806847554f , +0.595699304f , -0.803207531f , +0.600616479f , -0.799537269f , +0.605511041f , -0.795836905f , +0.610382806f , -0.792106577f , +0.615231591f , -0.788346428f , +0.620057212f , -0.784556597f , +0.624859488f , -0.780737229f , +0.629638239f , -0.776888466f , +0.634393284f , -0.773010453f , +0.639124445f , -0.769103338f , +0.643831543f , -0.765167266f , +0.648514401f , -0.761202385f , +0.653172843f , -0.757208847f , +0.657806693f , -0.753186799f , +0.662415778f , -0.749136395f , +0.666999922f , -0.745057785f , +0.671558955f , -0.740951125f , +0.676092704f , -0.736816569f , +0.680600998f , -0.732654272f , +0.685083668f , -0.728464390f , +0.689540545f , -0.724247083f , +0.693971461f , -0.720002508f , +0.698376249f , -0.715730825f , +0.702754744f , -0.711432196f , +0.707106781f , -0.707106781f , +0.711432196f , -0.702754744f , +0.715730825f , -0.698376249f , +0.720002508f , -0.693971461f , +0.724247083f , -0.689540545f , +0.728464390f , -0.685083668f , +0.732654272f , -0.680600998f , +0.736816569f , -0.676092704f , +0.740951125f , -0.671558955f , +0.745057785f , -0.666999922f , +0.749136395f , -0.662415778f , +0.753186799f , -0.657806693f , +0.757208847f , -0.653172843f , +0.761202385f , -0.648514401f , +0.765167266f , -0.643831543f , +0.769103338f , -0.639124445f , +0.773010453f , -0.634393284f , +0.776888466f , -0.629638239f , +0.780737229f , -0.624859488f , +0.784556597f , -0.620057212f , +0.788346428f , -0.615231591f , +0.792106577f , -0.610382806f , +0.795836905f , -0.605511041f , +0.799537269f , -0.600616479f , +0.803207531f , -0.595699304f , +0.806847554f , -0.590759702f , +0.810457198f , -0.585797857f , +0.814036330f , -0.580813958f , +0.817584813f , -0.575808191f , +0.821102515f , -0.570780746f , +0.824589303f , -0.565731811f , +0.828045045f , -0.560661576f , +0.831469612f , -0.555570233f , +0.834862875f , -0.550457973f , +0.838224706f , -0.545324988f , +0.841554977f , -0.540171473f , +0.844853565f , -0.534997620f , +0.848120345f , -0.529803625f , +0.851355193f , -0.524589683f , +0.854557988f , -0.519355990f , +0.857728610f , -0.514102744f , +0.860866939f , -0.508830143f , +0.863972856f , -0.503538384f , +0.867046246f , -0.498227667f , +0.870086991f , -0.492898192f , +0.873094978f , -0.487550160f , +0.876070094f , -0.482183772f , +0.879012226f , -0.476799230f , +0.881921264f , -0.471396737f , +0.884797098f , -0.465976496f , +0.887639620f , -0.460538711f , +0.890448723f , -0.455083587f , +0.893224301f , -0.449611330f , +0.895966250f , -0.444122145f , +0.898674466f , -0.438616239f , +0.901348847f , -0.433093819f , +0.903989293f , -0.427555093f , +0.906595705f , -0.422000271f , +0.909167983f , -0.416429560f , +0.911706032f , -0.410843171f , +0.914209756f , -0.405241314f , +0.916679060f , -0.399624200f , +0.919113852f , -0.393992040f , +0.921514039f , -0.388345047f , +0.923879533f , -0.382683432f , +0.926210242f , -0.377007410f , +0.928506080f , -0.371317194f , +0.930766961f , -0.365612998f , +0.932992799f , -0.359895037f , +0.935183510f , -0.354163525f , +0.937339012f , -0.348418680f , +0.939459224f , -0.342660717f , +0.941544065f , -0.336889853f , +0.943593458f , -0.331106306f , +0.945607325f , -0.325310292f , +0.947585591f , -0.319502031f , +0.949528181f , -0.313681740f , +0.951435021f , -0.307849640f , +0.953306040f , -0.302005949f , +0.955141168f , -0.296150888f , +0.956940336f , -0.290284677f , +0.958703475f , -0.284407537f , +0.960430519f , -0.278519689f , +0.962121404f , -0.272621355f , +0.963776066f , -0.266712757f , +0.965394442f , -0.260794118f , +0.966976471f , -0.254865660f , +0.968522094f , -0.248927606f , +0.970031253f , -0.242980180f , +0.971503891f , -0.237023606f , +0.972939952f , -0.231058108f , +0.974339383f , -0.225083911f , +0.975702130f , -0.219101240f , +0.977028143f , -0.213110320f , +0.978317371f , -0.207111376f , +0.979569766f , -0.201104635f , +0.980785280f , -0.195090322f , +0.981963869f , -0.189068664f , +0.983105487f , -0.183039888f , +0.984210092f , -0.177004220f , +0.985277642f , -0.170961889f , +0.986308097f , -0.164913120f , +0.987301418f , -0.158858143f , +0.988257568f , -0.152797185f , +0.989176510f , -0.146730474f , +0.990058210f , -0.140658239f , +0.990902635f , -0.134580709f , +0.991709754f , -0.128498111f , +0.992479535f , -0.122410675f , +0.993211949f , -0.116318631f , +0.993906970f , -0.110222207f , +0.994564571f , -0.104121634f , +0.995184727f , -0.098017140f , +0.995767414f , -0.091908956f , +0.996312612f , -0.085797312f , +0.996820299f , -0.079682438f , +0.997290457f , -0.073564564f , +0.997723067f , -0.067443920f , +0.998118113f , -0.061320736f , +0.998475581f , -0.055195244f , +0.998795456f , -0.049067674f , +0.999077728f , -0.042938257f , +0.999322385f , -0.036807223f , +0.999529418f , -0.030674803f , +0.999698819f , -0.024541229f , +0.999830582f , -0.018406730f , +0.999924702f , -0.012271538f , +0.999981175f , -0.006135885f +}; + +/** +* \par +* Example code for Floating-point Twiddle factors Generation: +* \par +*
for(i = 0; i< N/; i++)    
+* {    
+*	twiddleCoef[2*i]= cos(i * 2*PI/(float)N);    
+*	twiddleCoef[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 2048 and PI = 3.14159265358979 +* \par +* Cos and Sin values are in interleaved fashion +* +*/ +const float32_t twiddleCoef_2048[4096] = { + 1.000000000f, 0.000000000f, + 0.999995294f, 0.003067957f, + 0.999981175f, 0.006135885f, + 0.999957645f, 0.009203755f, + 0.999924702f, 0.012271538f, + 0.999882347f, 0.015339206f, + 0.999830582f, 0.018406730f, + 0.999769405f, 0.021474080f, + 0.999698819f, 0.024541229f, + 0.999618822f, 0.027608146f, + 0.999529418f, 0.030674803f, + 0.999430605f, 0.033741172f, + 0.999322385f, 0.036807223f, + 0.999204759f, 0.039872928f, + 0.999077728f, 0.042938257f, + 0.998941293f, 0.046003182f, + 0.998795456f, 0.049067674f, + 0.998640218f, 0.052131705f, + 0.998475581f, 0.055195244f, + 0.998301545f, 0.058258265f, + 0.998118113f, 0.061320736f, + 0.997925286f, 0.064382631f, + 0.997723067f, 0.067443920f, + 0.997511456f, 0.070504573f, + 0.997290457f, 0.073564564f, + 0.997060070f, 0.076623861f, + 0.996820299f, 0.079682438f, + 0.996571146f, 0.082740265f, + 0.996312612f, 0.085797312f, + 0.996044701f, 0.088853553f, + 0.995767414f, 0.091908956f, + 0.995480755f, 0.094963495f, + 0.995184727f, 0.098017140f, + 0.994879331f, 0.101069863f, + 0.994564571f, 0.104121634f, + 0.994240449f, 0.107172425f, + 0.993906970f, 0.110222207f, + 0.993564136f, 0.113270952f, + 0.993211949f, 0.116318631f, + 0.992850414f, 0.119365215f, + 0.992479535f, 0.122410675f, + 0.992099313f, 0.125454983f, + 0.991709754f, 0.128498111f, + 0.991310860f, 0.131540029f, + 0.990902635f, 0.134580709f, + 0.990485084f, 0.137620122f, + 0.990058210f, 0.140658239f, + 0.989622017f, 0.143695033f, + 0.989176510f, 0.146730474f, + 0.988721692f, 0.149764535f, + 0.988257568f, 0.152797185f, + 0.987784142f, 0.155828398f, + 0.987301418f, 0.158858143f, + 0.986809402f, 0.161886394f, + 0.986308097f, 0.164913120f, + 0.985797509f, 0.167938295f, + 0.985277642f, 0.170961889f, + 0.984748502f, 0.173983873f, + 0.984210092f, 0.177004220f, + 0.983662419f, 0.180022901f, + 0.983105487f, 0.183039888f, + 0.982539302f, 0.186055152f, + 0.981963869f, 0.189068664f, + 0.981379193f, 0.192080397f, + 0.980785280f, 0.195090322f, + 0.980182136f, 0.198098411f, + 0.979569766f, 0.201104635f, + 0.978948175f, 0.204108966f, + 0.978317371f, 0.207111376f, + 0.977677358f, 0.210111837f, + 0.977028143f, 0.213110320f, + 0.976369731f, 0.216106797f, + 0.975702130f, 0.219101240f, + 0.975025345f, 0.222093621f, + 0.974339383f, 0.225083911f, + 0.973644250f, 0.228072083f, + 0.972939952f, 0.231058108f, + 0.972226497f, 0.234041959f, + 0.971503891f, 0.237023606f, + 0.970772141f, 0.240003022f, + 0.970031253f, 0.242980180f, + 0.969281235f, 0.245955050f, + 0.968522094f, 0.248927606f, + 0.967753837f, 0.251897818f, + 0.966976471f, 0.254865660f, + 0.966190003f, 0.257831102f, + 0.965394442f, 0.260794118f, + 0.964589793f, 0.263754679f, + 0.963776066f, 0.266712757f, + 0.962953267f, 0.269668326f, + 0.962121404f, 0.272621355f, + 0.961280486f, 0.275571819f, + 0.960430519f, 0.278519689f, + 0.959571513f, 0.281464938f, + 0.958703475f, 0.284407537f, + 0.957826413f, 0.287347460f, + 0.956940336f, 0.290284677f, + 0.956045251f, 0.293219163f, + 0.955141168f, 0.296150888f, + 0.954228095f, 0.299079826f, + 0.953306040f, 0.302005949f, + 0.952375013f, 0.304929230f, + 0.951435021f, 0.307849640f, + 0.950486074f, 0.310767153f, + 0.949528181f, 0.313681740f, + 0.948561350f, 0.316593376f, + 0.947585591f, 0.319502031f, + 0.946600913f, 0.322407679f, + 0.945607325f, 0.325310292f, + 0.944604837f, 0.328209844f, + 0.943593458f, 0.331106306f, + 0.942573198f, 0.333999651f, + 0.941544065f, 0.336889853f, + 0.940506071f, 0.339776884f, + 0.939459224f, 0.342660717f, + 0.938403534f, 0.345541325f, + 0.937339012f, 0.348418680f, + 0.936265667f, 0.351292756f, + 0.935183510f, 0.354163525f, + 0.934092550f, 0.357030961f, + 0.932992799f, 0.359895037f, + 0.931884266f, 0.362755724f, + 0.930766961f, 0.365612998f, + 0.929640896f, 0.368466830f, + 0.928506080f, 0.371317194f, + 0.927362526f, 0.374164063f, + 0.926210242f, 0.377007410f, + 0.925049241f, 0.379847209f, + 0.923879533f, 0.382683432f, + 0.922701128f, 0.385516054f, + 0.921514039f, 0.388345047f, + 0.920318277f, 0.391170384f, + 0.919113852f, 0.393992040f, + 0.917900776f, 0.396809987f, + 0.916679060f, 0.399624200f, + 0.915448716f, 0.402434651f, + 0.914209756f, 0.405241314f, + 0.912962190f, 0.408044163f, + 0.911706032f, 0.410843171f, + 0.910441292f, 0.413638312f, + 0.909167983f, 0.416429560f, + 0.907886116f, 0.419216888f, + 0.906595705f, 0.422000271f, + 0.905296759f, 0.424779681f, + 0.903989293f, 0.427555093f, + 0.902673318f, 0.430326481f, + 0.901348847f, 0.433093819f, + 0.900015892f, 0.435857080f, + 0.898674466f, 0.438616239f, + 0.897324581f, 0.441371269f, + 0.895966250f, 0.444122145f, + 0.894599486f, 0.446868840f, + 0.893224301f, 0.449611330f, + 0.891840709f, 0.452349587f, + 0.890448723f, 0.455083587f, + 0.889048356f, 0.457813304f, + 0.887639620f, 0.460538711f, + 0.886222530f, 0.463259784f, + 0.884797098f, 0.465976496f, + 0.883363339f, 0.468688822f, + 0.881921264f, 0.471396737f, + 0.880470889f, 0.474100215f, + 0.879012226f, 0.476799230f, + 0.877545290f, 0.479493758f, + 0.876070094f, 0.482183772f, + 0.874586652f, 0.484869248f, + 0.873094978f, 0.487550160f, + 0.871595087f, 0.490226483f, + 0.870086991f, 0.492898192f, + 0.868570706f, 0.495565262f, + 0.867046246f, 0.498227667f, + 0.865513624f, 0.500885383f, + 0.863972856f, 0.503538384f, + 0.862423956f, 0.506186645f, + 0.860866939f, 0.508830143f, + 0.859301818f, 0.511468850f, + 0.857728610f, 0.514102744f, + 0.856147328f, 0.516731799f, + 0.854557988f, 0.519355990f, + 0.852960605f, 0.521975293f, + 0.851355193f, 0.524589683f, + 0.849741768f, 0.527199135f, + 0.848120345f, 0.529803625f, + 0.846490939f, 0.532403128f, + 0.844853565f, 0.534997620f, + 0.843208240f, 0.537587076f, + 0.841554977f, 0.540171473f, + 0.839893794f, 0.542750785f, + 0.838224706f, 0.545324988f, + 0.836547727f, 0.547894059f, + 0.834862875f, 0.550457973f, + 0.833170165f, 0.553016706f, + 0.831469612f, 0.555570233f, + 0.829761234f, 0.558118531f, + 0.828045045f, 0.560661576f, + 0.826321063f, 0.563199344f, + 0.824589303f, 0.565731811f, + 0.822849781f, 0.568258953f, + 0.821102515f, 0.570780746f, + 0.819347520f, 0.573297167f, + 0.817584813f, 0.575808191f, + 0.815814411f, 0.578313796f, + 0.814036330f, 0.580813958f, + 0.812250587f, 0.583308653f, + 0.810457198f, 0.585797857f, + 0.808656182f, 0.588281548f, + 0.806847554f, 0.590759702f, + 0.805031331f, 0.593232295f, + 0.803207531f, 0.595699304f, + 0.801376172f, 0.598160707f, + 0.799537269f, 0.600616479f, + 0.797690841f, 0.603066599f, + 0.795836905f, 0.605511041f, + 0.793975478f, 0.607949785f, + 0.792106577f, 0.610382806f, + 0.790230221f, 0.612810082f, + 0.788346428f, 0.615231591f, + 0.786455214f, 0.617647308f, + 0.784556597f, 0.620057212f, + 0.782650596f, 0.622461279f, + 0.780737229f, 0.624859488f, + 0.778816512f, 0.627251815f, + 0.776888466f, 0.629638239f, + 0.774953107f, 0.632018736f, + 0.773010453f, 0.634393284f, + 0.771060524f, 0.636761861f, + 0.769103338f, 0.639124445f, + 0.767138912f, 0.641481013f, + 0.765167266f, 0.643831543f, + 0.763188417f, 0.646176013f, + 0.761202385f, 0.648514401f, + 0.759209189f, 0.650846685f, + 0.757208847f, 0.653172843f, + 0.755201377f, 0.655492853f, + 0.753186799f, 0.657806693f, + 0.751165132f, 0.660114342f, + 0.749136395f, 0.662415778f, + 0.747100606f, 0.664710978f, + 0.745057785f, 0.666999922f, + 0.743007952f, 0.669282588f, + 0.740951125f, 0.671558955f, + 0.738887324f, 0.673829000f, + 0.736816569f, 0.676092704f, + 0.734738878f, 0.678350043f, + 0.732654272f, 0.680600998f, + 0.730562769f, 0.682845546f, + 0.728464390f, 0.685083668f, + 0.726359155f, 0.687315341f, + 0.724247083f, 0.689540545f, + 0.722128194f, 0.691759258f, + 0.720002508f, 0.693971461f, + 0.717870045f, 0.696177131f, + 0.715730825f, 0.698376249f, + 0.713584869f, 0.700568794f, + 0.711432196f, 0.702754744f, + 0.709272826f, 0.704934080f, + 0.707106781f, 0.707106781f, + 0.704934080f, 0.709272826f, + 0.702754744f, 0.711432196f, + 0.700568794f, 0.713584869f, + 0.698376249f, 0.715730825f, + 0.696177131f, 0.717870045f, + 0.693971461f, 0.720002508f, + 0.691759258f, 0.722128194f, + 0.689540545f, 0.724247083f, + 0.687315341f, 0.726359155f, + 0.685083668f, 0.728464390f, + 0.682845546f, 0.730562769f, + 0.680600998f, 0.732654272f, + 0.678350043f, 0.734738878f, + 0.676092704f, 0.736816569f, + 0.673829000f, 0.738887324f, + 0.671558955f, 0.740951125f, + 0.669282588f, 0.743007952f, + 0.666999922f, 0.745057785f, + 0.664710978f, 0.747100606f, + 0.662415778f, 0.749136395f, + 0.660114342f, 0.751165132f, + 0.657806693f, 0.753186799f, + 0.655492853f, 0.755201377f, + 0.653172843f, 0.757208847f, + 0.650846685f, 0.759209189f, + 0.648514401f, 0.761202385f, + 0.646176013f, 0.763188417f, + 0.643831543f, 0.765167266f, + 0.641481013f, 0.767138912f, + 0.639124445f, 0.769103338f, + 0.636761861f, 0.771060524f, + 0.634393284f, 0.773010453f, + 0.632018736f, 0.774953107f, + 0.629638239f, 0.776888466f, + 0.627251815f, 0.778816512f, + 0.624859488f, 0.780737229f, + 0.622461279f, 0.782650596f, + 0.620057212f, 0.784556597f, + 0.617647308f, 0.786455214f, + 0.615231591f, 0.788346428f, + 0.612810082f, 0.790230221f, + 0.610382806f, 0.792106577f, + 0.607949785f, 0.793975478f, + 0.605511041f, 0.795836905f, + 0.603066599f, 0.797690841f, + 0.600616479f, 0.799537269f, + 0.598160707f, 0.801376172f, + 0.595699304f, 0.803207531f, + 0.593232295f, 0.805031331f, + 0.590759702f, 0.806847554f, + 0.588281548f, 0.808656182f, + 0.585797857f, 0.810457198f, + 0.583308653f, 0.812250587f, + 0.580813958f, 0.814036330f, + 0.578313796f, 0.815814411f, + 0.575808191f, 0.817584813f, + 0.573297167f, 0.819347520f, + 0.570780746f, 0.821102515f, + 0.568258953f, 0.822849781f, + 0.565731811f, 0.824589303f, + 0.563199344f, 0.826321063f, + 0.560661576f, 0.828045045f, + 0.558118531f, 0.829761234f, + 0.555570233f, 0.831469612f, + 0.553016706f, 0.833170165f, + 0.550457973f, 0.834862875f, + 0.547894059f, 0.836547727f, + 0.545324988f, 0.838224706f, + 0.542750785f, 0.839893794f, + 0.540171473f, 0.841554977f, + 0.537587076f, 0.843208240f, + 0.534997620f, 0.844853565f, + 0.532403128f, 0.846490939f, + 0.529803625f, 0.848120345f, + 0.527199135f, 0.849741768f, + 0.524589683f, 0.851355193f, + 0.521975293f, 0.852960605f, + 0.519355990f, 0.854557988f, + 0.516731799f, 0.856147328f, + 0.514102744f, 0.857728610f, + 0.511468850f, 0.859301818f, + 0.508830143f, 0.860866939f, + 0.506186645f, 0.862423956f, + 0.503538384f, 0.863972856f, + 0.500885383f, 0.865513624f, + 0.498227667f, 0.867046246f, + 0.495565262f, 0.868570706f, + 0.492898192f, 0.870086991f, + 0.490226483f, 0.871595087f, + 0.487550160f, 0.873094978f, + 0.484869248f, 0.874586652f, + 0.482183772f, 0.876070094f, + 0.479493758f, 0.877545290f, + 0.476799230f, 0.879012226f, + 0.474100215f, 0.880470889f, + 0.471396737f, 0.881921264f, + 0.468688822f, 0.883363339f, + 0.465976496f, 0.884797098f, + 0.463259784f, 0.886222530f, + 0.460538711f, 0.887639620f, + 0.457813304f, 0.889048356f, + 0.455083587f, 0.890448723f, + 0.452349587f, 0.891840709f, + 0.449611330f, 0.893224301f, + 0.446868840f, 0.894599486f, + 0.444122145f, 0.895966250f, + 0.441371269f, 0.897324581f, + 0.438616239f, 0.898674466f, + 0.435857080f, 0.900015892f, + 0.433093819f, 0.901348847f, + 0.430326481f, 0.902673318f, + 0.427555093f, 0.903989293f, + 0.424779681f, 0.905296759f, + 0.422000271f, 0.906595705f, + 0.419216888f, 0.907886116f, + 0.416429560f, 0.909167983f, + 0.413638312f, 0.910441292f, + 0.410843171f, 0.911706032f, + 0.408044163f, 0.912962190f, + 0.405241314f, 0.914209756f, + 0.402434651f, 0.915448716f, + 0.399624200f, 0.916679060f, + 0.396809987f, 0.917900776f, + 0.393992040f, 0.919113852f, + 0.391170384f, 0.920318277f, + 0.388345047f, 0.921514039f, + 0.385516054f, 0.922701128f, + 0.382683432f, 0.923879533f, + 0.379847209f, 0.925049241f, + 0.377007410f, 0.926210242f, + 0.374164063f, 0.927362526f, + 0.371317194f, 0.928506080f, + 0.368466830f, 0.929640896f, + 0.365612998f, 0.930766961f, + 0.362755724f, 0.931884266f, + 0.359895037f, 0.932992799f, + 0.357030961f, 0.934092550f, + 0.354163525f, 0.935183510f, + 0.351292756f, 0.936265667f, + 0.348418680f, 0.937339012f, + 0.345541325f, 0.938403534f, + 0.342660717f, 0.939459224f, + 0.339776884f, 0.940506071f, + 0.336889853f, 0.941544065f, + 0.333999651f, 0.942573198f, + 0.331106306f, 0.943593458f, + 0.328209844f, 0.944604837f, + 0.325310292f, 0.945607325f, + 0.322407679f, 0.946600913f, + 0.319502031f, 0.947585591f, + 0.316593376f, 0.948561350f, + 0.313681740f, 0.949528181f, + 0.310767153f, 0.950486074f, + 0.307849640f, 0.951435021f, + 0.304929230f, 0.952375013f, + 0.302005949f, 0.953306040f, + 0.299079826f, 0.954228095f, + 0.296150888f, 0.955141168f, + 0.293219163f, 0.956045251f, + 0.290284677f, 0.956940336f, + 0.287347460f, 0.957826413f, + 0.284407537f, 0.958703475f, + 0.281464938f, 0.959571513f, + 0.278519689f, 0.960430519f, + 0.275571819f, 0.961280486f, + 0.272621355f, 0.962121404f, + 0.269668326f, 0.962953267f, + 0.266712757f, 0.963776066f, + 0.263754679f, 0.964589793f, + 0.260794118f, 0.965394442f, + 0.257831102f, 0.966190003f, + 0.254865660f, 0.966976471f, + 0.251897818f, 0.967753837f, + 0.248927606f, 0.968522094f, + 0.245955050f, 0.969281235f, + 0.242980180f, 0.970031253f, + 0.240003022f, 0.970772141f, + 0.237023606f, 0.971503891f, + 0.234041959f, 0.972226497f, + 0.231058108f, 0.972939952f, + 0.228072083f, 0.973644250f, + 0.225083911f, 0.974339383f, + 0.222093621f, 0.975025345f, + 0.219101240f, 0.975702130f, + 0.216106797f, 0.976369731f, + 0.213110320f, 0.977028143f, + 0.210111837f, 0.977677358f, + 0.207111376f, 0.978317371f, + 0.204108966f, 0.978948175f, + 0.201104635f, 0.979569766f, + 0.198098411f, 0.980182136f, + 0.195090322f, 0.980785280f, + 0.192080397f, 0.981379193f, + 0.189068664f, 0.981963869f, + 0.186055152f, 0.982539302f, + 0.183039888f, 0.983105487f, + 0.180022901f, 0.983662419f, + 0.177004220f, 0.984210092f, + 0.173983873f, 0.984748502f, + 0.170961889f, 0.985277642f, + 0.167938295f, 0.985797509f, + 0.164913120f, 0.986308097f, + 0.161886394f, 0.986809402f, + 0.158858143f, 0.987301418f, + 0.155828398f, 0.987784142f, + 0.152797185f, 0.988257568f, + 0.149764535f, 0.988721692f, + 0.146730474f, 0.989176510f, + 0.143695033f, 0.989622017f, + 0.140658239f, 0.990058210f, + 0.137620122f, 0.990485084f, + 0.134580709f, 0.990902635f, + 0.131540029f, 0.991310860f, + 0.128498111f, 0.991709754f, + 0.125454983f, 0.992099313f, + 0.122410675f, 0.992479535f, + 0.119365215f, 0.992850414f, + 0.116318631f, 0.993211949f, + 0.113270952f, 0.993564136f, + 0.110222207f, 0.993906970f, + 0.107172425f, 0.994240449f, + 0.104121634f, 0.994564571f, + 0.101069863f, 0.994879331f, + 0.098017140f, 0.995184727f, + 0.094963495f, 0.995480755f, + 0.091908956f, 0.995767414f, + 0.088853553f, 0.996044701f, + 0.085797312f, 0.996312612f, + 0.082740265f, 0.996571146f, + 0.079682438f, 0.996820299f, + 0.076623861f, 0.997060070f, + 0.073564564f, 0.997290457f, + 0.070504573f, 0.997511456f, + 0.067443920f, 0.997723067f, + 0.064382631f, 0.997925286f, + 0.061320736f, 0.998118113f, + 0.058258265f, 0.998301545f, + 0.055195244f, 0.998475581f, + 0.052131705f, 0.998640218f, + 0.049067674f, 0.998795456f, + 0.046003182f, 0.998941293f, + 0.042938257f, 0.999077728f, + 0.039872928f, 0.999204759f, + 0.036807223f, 0.999322385f, + 0.033741172f, 0.999430605f, + 0.030674803f, 0.999529418f, + 0.027608146f, 0.999618822f, + 0.024541229f, 0.999698819f, + 0.021474080f, 0.999769405f, + 0.018406730f, 0.999830582f, + 0.015339206f, 0.999882347f, + 0.012271538f, 0.999924702f, + 0.009203755f, 0.999957645f, + 0.006135885f, 0.999981175f, + 0.003067957f, 0.999995294f, + 0.000000000f, 1.000000000f, + -0.003067957f, 0.999995294f, + -0.006135885f, 0.999981175f, + -0.009203755f, 0.999957645f, + -0.012271538f, 0.999924702f, + -0.015339206f, 0.999882347f, + -0.018406730f, 0.999830582f, + -0.021474080f, 0.999769405f, + -0.024541229f, 0.999698819f, + -0.027608146f, 0.999618822f, + -0.030674803f, 0.999529418f, + -0.033741172f, 0.999430605f, + -0.036807223f, 0.999322385f, + -0.039872928f, 0.999204759f, + -0.042938257f, 0.999077728f, + -0.046003182f, 0.998941293f, + -0.049067674f, 0.998795456f, + -0.052131705f, 0.998640218f, + -0.055195244f, 0.998475581f, + -0.058258265f, 0.998301545f, + -0.061320736f, 0.998118113f, + -0.064382631f, 0.997925286f, + -0.067443920f, 0.997723067f, + -0.070504573f, 0.997511456f, + -0.073564564f, 0.997290457f, + -0.076623861f, 0.997060070f, + -0.079682438f, 0.996820299f, + -0.082740265f, 0.996571146f, + -0.085797312f, 0.996312612f, + -0.088853553f, 0.996044701f, + -0.091908956f, 0.995767414f, + -0.094963495f, 0.995480755f, + -0.098017140f, 0.995184727f, + -0.101069863f, 0.994879331f, + -0.104121634f, 0.994564571f, + -0.107172425f, 0.994240449f, + -0.110222207f, 0.993906970f, + -0.113270952f, 0.993564136f, + -0.116318631f, 0.993211949f, + -0.119365215f, 0.992850414f, + -0.122410675f, 0.992479535f, + -0.125454983f, 0.992099313f, + -0.128498111f, 0.991709754f, + -0.131540029f, 0.991310860f, + -0.134580709f, 0.990902635f, + -0.137620122f, 0.990485084f, + -0.140658239f, 0.990058210f, + -0.143695033f, 0.989622017f, + -0.146730474f, 0.989176510f, + -0.149764535f, 0.988721692f, + -0.152797185f, 0.988257568f, + -0.155828398f, 0.987784142f, + -0.158858143f, 0.987301418f, + -0.161886394f, 0.986809402f, + -0.164913120f, 0.986308097f, + -0.167938295f, 0.985797509f, + -0.170961889f, 0.985277642f, + -0.173983873f, 0.984748502f, + -0.177004220f, 0.984210092f, + -0.180022901f, 0.983662419f, + -0.183039888f, 0.983105487f, + -0.186055152f, 0.982539302f, + -0.189068664f, 0.981963869f, + -0.192080397f, 0.981379193f, + -0.195090322f, 0.980785280f, + -0.198098411f, 0.980182136f, + -0.201104635f, 0.979569766f, + -0.204108966f, 0.978948175f, + -0.207111376f, 0.978317371f, + -0.210111837f, 0.977677358f, + -0.213110320f, 0.977028143f, + -0.216106797f, 0.976369731f, + -0.219101240f, 0.975702130f, + -0.222093621f, 0.975025345f, + -0.225083911f, 0.974339383f, + -0.228072083f, 0.973644250f, + -0.231058108f, 0.972939952f, + -0.234041959f, 0.972226497f, + -0.237023606f, 0.971503891f, + -0.240003022f, 0.970772141f, + -0.242980180f, 0.970031253f, + -0.245955050f, 0.969281235f, + -0.248927606f, 0.968522094f, + -0.251897818f, 0.967753837f, + -0.254865660f, 0.966976471f, + -0.257831102f, 0.966190003f, + -0.260794118f, 0.965394442f, + -0.263754679f, 0.964589793f, + -0.266712757f, 0.963776066f, + -0.269668326f, 0.962953267f, + -0.272621355f, 0.962121404f, + -0.275571819f, 0.961280486f, + -0.278519689f, 0.960430519f, + -0.281464938f, 0.959571513f, + -0.284407537f, 0.958703475f, + -0.287347460f, 0.957826413f, + -0.290284677f, 0.956940336f, + -0.293219163f, 0.956045251f, + -0.296150888f, 0.955141168f, + -0.299079826f, 0.954228095f, + -0.302005949f, 0.953306040f, + -0.304929230f, 0.952375013f, + -0.307849640f, 0.951435021f, + -0.310767153f, 0.950486074f, + -0.313681740f, 0.949528181f, + -0.316593376f, 0.948561350f, + -0.319502031f, 0.947585591f, + -0.322407679f, 0.946600913f, + -0.325310292f, 0.945607325f, + -0.328209844f, 0.944604837f, + -0.331106306f, 0.943593458f, + -0.333999651f, 0.942573198f, + -0.336889853f, 0.941544065f, + -0.339776884f, 0.940506071f, + -0.342660717f, 0.939459224f, + -0.345541325f, 0.938403534f, + -0.348418680f, 0.937339012f, + -0.351292756f, 0.936265667f, + -0.354163525f, 0.935183510f, + -0.357030961f, 0.934092550f, + -0.359895037f, 0.932992799f, + -0.362755724f, 0.931884266f, + -0.365612998f, 0.930766961f, + -0.368466830f, 0.929640896f, + -0.371317194f, 0.928506080f, + -0.374164063f, 0.927362526f, + -0.377007410f, 0.926210242f, + -0.379847209f, 0.925049241f, + -0.382683432f, 0.923879533f, + -0.385516054f, 0.922701128f, + -0.388345047f, 0.921514039f, + -0.391170384f, 0.920318277f, + -0.393992040f, 0.919113852f, + -0.396809987f, 0.917900776f, + -0.399624200f, 0.916679060f, + -0.402434651f, 0.915448716f, + -0.405241314f, 0.914209756f, + -0.408044163f, 0.912962190f, + -0.410843171f, 0.911706032f, + -0.413638312f, 0.910441292f, + -0.416429560f, 0.909167983f, + -0.419216888f, 0.907886116f, + -0.422000271f, 0.906595705f, + -0.424779681f, 0.905296759f, + -0.427555093f, 0.903989293f, + -0.430326481f, 0.902673318f, + -0.433093819f, 0.901348847f, + -0.435857080f, 0.900015892f, + -0.438616239f, 0.898674466f, + -0.441371269f, 0.897324581f, + -0.444122145f, 0.895966250f, + -0.446868840f, 0.894599486f, + -0.449611330f, 0.893224301f, + -0.452349587f, 0.891840709f, + -0.455083587f, 0.890448723f, + -0.457813304f, 0.889048356f, + -0.460538711f, 0.887639620f, + -0.463259784f, 0.886222530f, + -0.465976496f, 0.884797098f, + -0.468688822f, 0.883363339f, + -0.471396737f, 0.881921264f, + -0.474100215f, 0.880470889f, + -0.476799230f, 0.879012226f, + -0.479493758f, 0.877545290f, + -0.482183772f, 0.876070094f, + -0.484869248f, 0.874586652f, + -0.487550160f, 0.873094978f, + -0.490226483f, 0.871595087f, + -0.492898192f, 0.870086991f, + -0.495565262f, 0.868570706f, + -0.498227667f, 0.867046246f, + -0.500885383f, 0.865513624f, + -0.503538384f, 0.863972856f, + -0.506186645f, 0.862423956f, + -0.508830143f, 0.860866939f, + -0.511468850f, 0.859301818f, + -0.514102744f, 0.857728610f, + -0.516731799f, 0.856147328f, + -0.519355990f, 0.854557988f, + -0.521975293f, 0.852960605f, + -0.524589683f, 0.851355193f, + -0.527199135f, 0.849741768f, + -0.529803625f, 0.848120345f, + -0.532403128f, 0.846490939f, + -0.534997620f, 0.844853565f, + -0.537587076f, 0.843208240f, + -0.540171473f, 0.841554977f, + -0.542750785f, 0.839893794f, + -0.545324988f, 0.838224706f, + -0.547894059f, 0.836547727f, + -0.550457973f, 0.834862875f, + -0.553016706f, 0.833170165f, + -0.555570233f, 0.831469612f, + -0.558118531f, 0.829761234f, + -0.560661576f, 0.828045045f, + -0.563199344f, 0.826321063f, + -0.565731811f, 0.824589303f, + -0.568258953f, 0.822849781f, + -0.570780746f, 0.821102515f, + -0.573297167f, 0.819347520f, + -0.575808191f, 0.817584813f, + -0.578313796f, 0.815814411f, + -0.580813958f, 0.814036330f, + -0.583308653f, 0.812250587f, + -0.585797857f, 0.810457198f, + -0.588281548f, 0.808656182f, + -0.590759702f, 0.806847554f, + -0.593232295f, 0.805031331f, + -0.595699304f, 0.803207531f, + -0.598160707f, 0.801376172f, + -0.600616479f, 0.799537269f, + -0.603066599f, 0.797690841f, + -0.605511041f, 0.795836905f, + -0.607949785f, 0.793975478f, + -0.610382806f, 0.792106577f, + -0.612810082f, 0.790230221f, + -0.615231591f, 0.788346428f, + -0.617647308f, 0.786455214f, + -0.620057212f, 0.784556597f, + -0.622461279f, 0.782650596f, + -0.624859488f, 0.780737229f, + -0.627251815f, 0.778816512f, + -0.629638239f, 0.776888466f, + -0.632018736f, 0.774953107f, + -0.634393284f, 0.773010453f, + -0.636761861f, 0.771060524f, + -0.639124445f, 0.769103338f, + -0.641481013f, 0.767138912f, + -0.643831543f, 0.765167266f, + -0.646176013f, 0.763188417f, + -0.648514401f, 0.761202385f, + -0.650846685f, 0.759209189f, + -0.653172843f, 0.757208847f, + -0.655492853f, 0.755201377f, + -0.657806693f, 0.753186799f, + -0.660114342f, 0.751165132f, + -0.662415778f, 0.749136395f, + -0.664710978f, 0.747100606f, + -0.666999922f, 0.745057785f, + -0.669282588f, 0.743007952f, + -0.671558955f, 0.740951125f, + -0.673829000f, 0.738887324f, + -0.676092704f, 0.736816569f, + -0.678350043f, 0.734738878f, + -0.680600998f, 0.732654272f, + -0.682845546f, 0.730562769f, + -0.685083668f, 0.728464390f, + -0.687315341f, 0.726359155f, + -0.689540545f, 0.724247083f, + -0.691759258f, 0.722128194f, + -0.693971461f, 0.720002508f, + -0.696177131f, 0.717870045f, + -0.698376249f, 0.715730825f, + -0.700568794f, 0.713584869f, + -0.702754744f, 0.711432196f, + -0.704934080f, 0.709272826f, + -0.707106781f, 0.707106781f, + -0.709272826f, 0.704934080f, + -0.711432196f, 0.702754744f, + -0.713584869f, 0.700568794f, + -0.715730825f, 0.698376249f, + -0.717870045f, 0.696177131f, + -0.720002508f, 0.693971461f, + -0.722128194f, 0.691759258f, + -0.724247083f, 0.689540545f, + -0.726359155f, 0.687315341f, + -0.728464390f, 0.685083668f, + -0.730562769f, 0.682845546f, + -0.732654272f, 0.680600998f, + -0.734738878f, 0.678350043f, + -0.736816569f, 0.676092704f, + -0.738887324f, 0.673829000f, + -0.740951125f, 0.671558955f, + -0.743007952f, 0.669282588f, + -0.745057785f, 0.666999922f, + -0.747100606f, 0.664710978f, + -0.749136395f, 0.662415778f, + -0.751165132f, 0.660114342f, + -0.753186799f, 0.657806693f, + -0.755201377f, 0.655492853f, + -0.757208847f, 0.653172843f, + -0.759209189f, 0.650846685f, + -0.761202385f, 0.648514401f, + -0.763188417f, 0.646176013f, + -0.765167266f, 0.643831543f, + -0.767138912f, 0.641481013f, + -0.769103338f, 0.639124445f, + -0.771060524f, 0.636761861f, + -0.773010453f, 0.634393284f, + -0.774953107f, 0.632018736f, + -0.776888466f, 0.629638239f, + -0.778816512f, 0.627251815f, + -0.780737229f, 0.624859488f, + -0.782650596f, 0.622461279f, + -0.784556597f, 0.620057212f, + -0.786455214f, 0.617647308f, + -0.788346428f, 0.615231591f, + -0.790230221f, 0.612810082f, + -0.792106577f, 0.610382806f, + -0.793975478f, 0.607949785f, + -0.795836905f, 0.605511041f, + -0.797690841f, 0.603066599f, + -0.799537269f, 0.600616479f, + -0.801376172f, 0.598160707f, + -0.803207531f, 0.595699304f, + -0.805031331f, 0.593232295f, + -0.806847554f, 0.590759702f, + -0.808656182f, 0.588281548f, + -0.810457198f, 0.585797857f, + -0.812250587f, 0.583308653f, + -0.814036330f, 0.580813958f, + -0.815814411f, 0.578313796f, + -0.817584813f, 0.575808191f, + -0.819347520f, 0.573297167f, + -0.821102515f, 0.570780746f, + -0.822849781f, 0.568258953f, + -0.824589303f, 0.565731811f, + -0.826321063f, 0.563199344f, + -0.828045045f, 0.560661576f, + -0.829761234f, 0.558118531f, + -0.831469612f, 0.555570233f, + -0.833170165f, 0.553016706f, + -0.834862875f, 0.550457973f, + -0.836547727f, 0.547894059f, + -0.838224706f, 0.545324988f, + -0.839893794f, 0.542750785f, + -0.841554977f, 0.540171473f, + -0.843208240f, 0.537587076f, + -0.844853565f, 0.534997620f, + -0.846490939f, 0.532403128f, + -0.848120345f, 0.529803625f, + -0.849741768f, 0.527199135f, + -0.851355193f, 0.524589683f, + -0.852960605f, 0.521975293f, + -0.854557988f, 0.519355990f, + -0.856147328f, 0.516731799f, + -0.857728610f, 0.514102744f, + -0.859301818f, 0.511468850f, + -0.860866939f, 0.508830143f, + -0.862423956f, 0.506186645f, + -0.863972856f, 0.503538384f, + -0.865513624f, 0.500885383f, + -0.867046246f, 0.498227667f, + -0.868570706f, 0.495565262f, + -0.870086991f, 0.492898192f, + -0.871595087f, 0.490226483f, + -0.873094978f, 0.487550160f, + -0.874586652f, 0.484869248f, + -0.876070094f, 0.482183772f, + -0.877545290f, 0.479493758f, + -0.879012226f, 0.476799230f, + -0.880470889f, 0.474100215f, + -0.881921264f, 0.471396737f, + -0.883363339f, 0.468688822f, + -0.884797098f, 0.465976496f, + -0.886222530f, 0.463259784f, + -0.887639620f, 0.460538711f, + -0.889048356f, 0.457813304f, + -0.890448723f, 0.455083587f, + -0.891840709f, 0.452349587f, + -0.893224301f, 0.449611330f, + -0.894599486f, 0.446868840f, + -0.895966250f, 0.444122145f, + -0.897324581f, 0.441371269f, + -0.898674466f, 0.438616239f, + -0.900015892f, 0.435857080f, + -0.901348847f, 0.433093819f, + -0.902673318f, 0.430326481f, + -0.903989293f, 0.427555093f, + -0.905296759f, 0.424779681f, + -0.906595705f, 0.422000271f, + -0.907886116f, 0.419216888f, + -0.909167983f, 0.416429560f, + -0.910441292f, 0.413638312f, + -0.911706032f, 0.410843171f, + -0.912962190f, 0.408044163f, + -0.914209756f, 0.405241314f, + -0.915448716f, 0.402434651f, + -0.916679060f, 0.399624200f, + -0.917900776f, 0.396809987f, + -0.919113852f, 0.393992040f, + -0.920318277f, 0.391170384f, + -0.921514039f, 0.388345047f, + -0.922701128f, 0.385516054f, + -0.923879533f, 0.382683432f, + -0.925049241f, 0.379847209f, + -0.926210242f, 0.377007410f, + -0.927362526f, 0.374164063f, + -0.928506080f, 0.371317194f, + -0.929640896f, 0.368466830f, + -0.930766961f, 0.365612998f, + -0.931884266f, 0.362755724f, + -0.932992799f, 0.359895037f, + -0.934092550f, 0.357030961f, + -0.935183510f, 0.354163525f, + -0.936265667f, 0.351292756f, + -0.937339012f, 0.348418680f, + -0.938403534f, 0.345541325f, + -0.939459224f, 0.342660717f, + -0.940506071f, 0.339776884f, + -0.941544065f, 0.336889853f, + -0.942573198f, 0.333999651f, + -0.943593458f, 0.331106306f, + -0.944604837f, 0.328209844f, + -0.945607325f, 0.325310292f, + -0.946600913f, 0.322407679f, + -0.947585591f, 0.319502031f, + -0.948561350f, 0.316593376f, + -0.949528181f, 0.313681740f, + -0.950486074f, 0.310767153f, + -0.951435021f, 0.307849640f, + -0.952375013f, 0.304929230f, + -0.953306040f, 0.302005949f, + -0.954228095f, 0.299079826f, + -0.955141168f, 0.296150888f, + -0.956045251f, 0.293219163f, + -0.956940336f, 0.290284677f, + -0.957826413f, 0.287347460f, + -0.958703475f, 0.284407537f, + -0.959571513f, 0.281464938f, + -0.960430519f, 0.278519689f, + -0.961280486f, 0.275571819f, + -0.962121404f, 0.272621355f, + -0.962953267f, 0.269668326f, + -0.963776066f, 0.266712757f, + -0.964589793f, 0.263754679f, + -0.965394442f, 0.260794118f, + -0.966190003f, 0.257831102f, + -0.966976471f, 0.254865660f, + -0.967753837f, 0.251897818f, + -0.968522094f, 0.248927606f, + -0.969281235f, 0.245955050f, + -0.970031253f, 0.242980180f, + -0.970772141f, 0.240003022f, + -0.971503891f, 0.237023606f, + -0.972226497f, 0.234041959f, + -0.972939952f, 0.231058108f, + -0.973644250f, 0.228072083f, + -0.974339383f, 0.225083911f, + -0.975025345f, 0.222093621f, + -0.975702130f, 0.219101240f, + -0.976369731f, 0.216106797f, + -0.977028143f, 0.213110320f, + -0.977677358f, 0.210111837f, + -0.978317371f, 0.207111376f, + -0.978948175f, 0.204108966f, + -0.979569766f, 0.201104635f, + -0.980182136f, 0.198098411f, + -0.980785280f, 0.195090322f, + -0.981379193f, 0.192080397f, + -0.981963869f, 0.189068664f, + -0.982539302f, 0.186055152f, + -0.983105487f, 0.183039888f, + -0.983662419f, 0.180022901f, + -0.984210092f, 0.177004220f, + -0.984748502f, 0.173983873f, + -0.985277642f, 0.170961889f, + -0.985797509f, 0.167938295f, + -0.986308097f, 0.164913120f, + -0.986809402f, 0.161886394f, + -0.987301418f, 0.158858143f, + -0.987784142f, 0.155828398f, + -0.988257568f, 0.152797185f, + -0.988721692f, 0.149764535f, + -0.989176510f, 0.146730474f, + -0.989622017f, 0.143695033f, + -0.990058210f, 0.140658239f, + -0.990485084f, 0.137620122f, + -0.990902635f, 0.134580709f, + -0.991310860f, 0.131540029f, + -0.991709754f, 0.128498111f, + -0.992099313f, 0.125454983f, + -0.992479535f, 0.122410675f, + -0.992850414f, 0.119365215f, + -0.993211949f, 0.116318631f, + -0.993564136f, 0.113270952f, + -0.993906970f, 0.110222207f, + -0.994240449f, 0.107172425f, + -0.994564571f, 0.104121634f, + -0.994879331f, 0.101069863f, + -0.995184727f, 0.098017140f, + -0.995480755f, 0.094963495f, + -0.995767414f, 0.091908956f, + -0.996044701f, 0.088853553f, + -0.996312612f, 0.085797312f, + -0.996571146f, 0.082740265f, + -0.996820299f, 0.079682438f, + -0.997060070f, 0.076623861f, + -0.997290457f, 0.073564564f, + -0.997511456f, 0.070504573f, + -0.997723067f, 0.067443920f, + -0.997925286f, 0.064382631f, + -0.998118113f, 0.061320736f, + -0.998301545f, 0.058258265f, + -0.998475581f, 0.055195244f, + -0.998640218f, 0.052131705f, + -0.998795456f, 0.049067674f, + -0.998941293f, 0.046003182f, + -0.999077728f, 0.042938257f, + -0.999204759f, 0.039872928f, + -0.999322385f, 0.036807223f, + -0.999430605f, 0.033741172f, + -0.999529418f, 0.030674803f, + -0.999618822f, 0.027608146f, + -0.999698819f, 0.024541229f, + -0.999769405f, 0.021474080f, + -0.999830582f, 0.018406730f, + -0.999882347f, 0.015339206f, + -0.999924702f, 0.012271538f, + -0.999957645f, 0.009203755f, + -0.999981175f, 0.006135885f, + -0.999995294f, 0.003067957f, + -1.000000000f, 0.000000000f, + -0.999995294f, -0.003067957f, + -0.999981175f, -0.006135885f, + -0.999957645f, -0.009203755f, + -0.999924702f, -0.012271538f, + -0.999882347f, -0.015339206f, + -0.999830582f, -0.018406730f, + -0.999769405f, -0.021474080f, + -0.999698819f, -0.024541229f, + -0.999618822f, -0.027608146f, + -0.999529418f, -0.030674803f, + -0.999430605f, -0.033741172f, + -0.999322385f, -0.036807223f, + -0.999204759f, -0.039872928f, + -0.999077728f, -0.042938257f, + -0.998941293f, -0.046003182f, + -0.998795456f, -0.049067674f, + -0.998640218f, -0.052131705f, + -0.998475581f, -0.055195244f, + -0.998301545f, -0.058258265f, + -0.998118113f, -0.061320736f, + -0.997925286f, -0.064382631f, + -0.997723067f, -0.067443920f, + -0.997511456f, -0.070504573f, + -0.997290457f, -0.073564564f, + -0.997060070f, -0.076623861f, + -0.996820299f, -0.079682438f, + -0.996571146f, -0.082740265f, + -0.996312612f, -0.085797312f, + -0.996044701f, -0.088853553f, + -0.995767414f, -0.091908956f, + -0.995480755f, -0.094963495f, + -0.995184727f, -0.098017140f, + -0.994879331f, -0.101069863f, + -0.994564571f, -0.104121634f, + -0.994240449f, -0.107172425f, + -0.993906970f, -0.110222207f, + -0.993564136f, -0.113270952f, + -0.993211949f, -0.116318631f, + -0.992850414f, -0.119365215f, + -0.992479535f, -0.122410675f, + -0.992099313f, -0.125454983f, + -0.991709754f, -0.128498111f, + -0.991310860f, -0.131540029f, + -0.990902635f, -0.134580709f, + -0.990485084f, -0.137620122f, + -0.990058210f, -0.140658239f, + -0.989622017f, -0.143695033f, + -0.989176510f, -0.146730474f, + -0.988721692f, -0.149764535f, + -0.988257568f, -0.152797185f, + -0.987784142f, -0.155828398f, + -0.987301418f, -0.158858143f, + -0.986809402f, -0.161886394f, + -0.986308097f, -0.164913120f, + -0.985797509f, -0.167938295f, + -0.985277642f, -0.170961889f, + -0.984748502f, -0.173983873f, + -0.984210092f, -0.177004220f, + -0.983662419f, -0.180022901f, + -0.983105487f, -0.183039888f, + -0.982539302f, -0.186055152f, + -0.981963869f, -0.189068664f, + -0.981379193f, -0.192080397f, + -0.980785280f, -0.195090322f, + -0.980182136f, -0.198098411f, + -0.979569766f, -0.201104635f, + -0.978948175f, -0.204108966f, + -0.978317371f, -0.207111376f, + -0.977677358f, -0.210111837f, + -0.977028143f, -0.213110320f, + -0.976369731f, -0.216106797f, + -0.975702130f, -0.219101240f, + -0.975025345f, -0.222093621f, + -0.974339383f, -0.225083911f, + -0.973644250f, -0.228072083f, + -0.972939952f, -0.231058108f, + -0.972226497f, -0.234041959f, + -0.971503891f, -0.237023606f, + -0.970772141f, -0.240003022f, + -0.970031253f, -0.242980180f, + -0.969281235f, -0.245955050f, + -0.968522094f, -0.248927606f, + -0.967753837f, -0.251897818f, + -0.966976471f, -0.254865660f, + -0.966190003f, -0.257831102f, + -0.965394442f, -0.260794118f, + -0.964589793f, -0.263754679f, + -0.963776066f, -0.266712757f, + -0.962953267f, -0.269668326f, + -0.962121404f, -0.272621355f, + -0.961280486f, -0.275571819f, + -0.960430519f, -0.278519689f, + -0.959571513f, -0.281464938f, + -0.958703475f, -0.284407537f, + -0.957826413f, -0.287347460f, + -0.956940336f, -0.290284677f, + -0.956045251f, -0.293219163f, + -0.955141168f, -0.296150888f, + -0.954228095f, -0.299079826f, + -0.953306040f, -0.302005949f, + -0.952375013f, -0.304929230f, + -0.951435021f, -0.307849640f, + -0.950486074f, -0.310767153f, + -0.949528181f, -0.313681740f, + -0.948561350f, -0.316593376f, + -0.947585591f, -0.319502031f, + -0.946600913f, -0.322407679f, + -0.945607325f, -0.325310292f, + -0.944604837f, -0.328209844f, + -0.943593458f, -0.331106306f, + -0.942573198f, -0.333999651f, + -0.941544065f, -0.336889853f, + -0.940506071f, -0.339776884f, + -0.939459224f, -0.342660717f, + -0.938403534f, -0.345541325f, + -0.937339012f, -0.348418680f, + -0.936265667f, -0.351292756f, + -0.935183510f, -0.354163525f, + -0.934092550f, -0.357030961f, + -0.932992799f, -0.359895037f, + -0.931884266f, -0.362755724f, + -0.930766961f, -0.365612998f, + -0.929640896f, -0.368466830f, + -0.928506080f, -0.371317194f, + -0.927362526f, -0.374164063f, + -0.926210242f, -0.377007410f, + -0.925049241f, -0.379847209f, + -0.923879533f, -0.382683432f, + -0.922701128f, -0.385516054f, + -0.921514039f, -0.388345047f, + -0.920318277f, -0.391170384f, + -0.919113852f, -0.393992040f, + -0.917900776f, -0.396809987f, + -0.916679060f, -0.399624200f, + -0.915448716f, -0.402434651f, + -0.914209756f, -0.405241314f, + -0.912962190f, -0.408044163f, + -0.911706032f, -0.410843171f, + -0.910441292f, -0.413638312f, + -0.909167983f, -0.416429560f, + -0.907886116f, -0.419216888f, + -0.906595705f, -0.422000271f, + -0.905296759f, -0.424779681f, + -0.903989293f, -0.427555093f, + -0.902673318f, -0.430326481f, + -0.901348847f, -0.433093819f, + -0.900015892f, -0.435857080f, + -0.898674466f, -0.438616239f, + -0.897324581f, -0.441371269f, + -0.895966250f, -0.444122145f, + -0.894599486f, -0.446868840f, + -0.893224301f, -0.449611330f, + -0.891840709f, -0.452349587f, + -0.890448723f, -0.455083587f, + -0.889048356f, -0.457813304f, + -0.887639620f, -0.460538711f, + -0.886222530f, -0.463259784f, + -0.884797098f, -0.465976496f, + -0.883363339f, -0.468688822f, + -0.881921264f, -0.471396737f, + -0.880470889f, -0.474100215f, + -0.879012226f, -0.476799230f, + -0.877545290f, -0.479493758f, + -0.876070094f, -0.482183772f, + -0.874586652f, -0.484869248f, + -0.873094978f, -0.487550160f, + -0.871595087f, -0.490226483f, + -0.870086991f, -0.492898192f, + -0.868570706f, -0.495565262f, + -0.867046246f, -0.498227667f, + -0.865513624f, -0.500885383f, + -0.863972856f, -0.503538384f, + -0.862423956f, -0.506186645f, + -0.860866939f, -0.508830143f, + -0.859301818f, -0.511468850f, + -0.857728610f, -0.514102744f, + -0.856147328f, -0.516731799f, + -0.854557988f, -0.519355990f, + -0.852960605f, -0.521975293f, + -0.851355193f, -0.524589683f, + -0.849741768f, -0.527199135f, + -0.848120345f, -0.529803625f, + -0.846490939f, -0.532403128f, + -0.844853565f, -0.534997620f, + -0.843208240f, -0.537587076f, + -0.841554977f, -0.540171473f, + -0.839893794f, -0.542750785f, + -0.838224706f, -0.545324988f, + -0.836547727f, -0.547894059f, + -0.834862875f, -0.550457973f, + -0.833170165f, -0.553016706f, + -0.831469612f, -0.555570233f, + -0.829761234f, -0.558118531f, + -0.828045045f, -0.560661576f, + -0.826321063f, -0.563199344f, + -0.824589303f, -0.565731811f, + -0.822849781f, -0.568258953f, + -0.821102515f, -0.570780746f, + -0.819347520f, -0.573297167f, + -0.817584813f, -0.575808191f, + -0.815814411f, -0.578313796f, + -0.814036330f, -0.580813958f, + -0.812250587f, -0.583308653f, + -0.810457198f, -0.585797857f, + -0.808656182f, -0.588281548f, + -0.806847554f, -0.590759702f, + -0.805031331f, -0.593232295f, + -0.803207531f, -0.595699304f, + -0.801376172f, -0.598160707f, + -0.799537269f, -0.600616479f, + -0.797690841f, -0.603066599f, + -0.795836905f, -0.605511041f, + -0.793975478f, -0.607949785f, + -0.792106577f, -0.610382806f, + -0.790230221f, -0.612810082f, + -0.788346428f, -0.615231591f, + -0.786455214f, -0.617647308f, + -0.784556597f, -0.620057212f, + -0.782650596f, -0.622461279f, + -0.780737229f, -0.624859488f, + -0.778816512f, -0.627251815f, + -0.776888466f, -0.629638239f, + -0.774953107f, -0.632018736f, + -0.773010453f, -0.634393284f, + -0.771060524f, -0.636761861f, + -0.769103338f, -0.639124445f, + -0.767138912f, -0.641481013f, + -0.765167266f, -0.643831543f, + -0.763188417f, -0.646176013f, + -0.761202385f, -0.648514401f, + -0.759209189f, -0.650846685f, + -0.757208847f, -0.653172843f, + -0.755201377f, -0.655492853f, + -0.753186799f, -0.657806693f, + -0.751165132f, -0.660114342f, + -0.749136395f, -0.662415778f, + -0.747100606f, -0.664710978f, + -0.745057785f, -0.666999922f, + -0.743007952f, -0.669282588f, + -0.740951125f, -0.671558955f, + -0.738887324f, -0.673829000f, + -0.736816569f, -0.676092704f, + -0.734738878f, -0.678350043f, + -0.732654272f, -0.680600998f, + -0.730562769f, -0.682845546f, + -0.728464390f, -0.685083668f, + -0.726359155f, -0.687315341f, + -0.724247083f, -0.689540545f, + -0.722128194f, -0.691759258f, + -0.720002508f, -0.693971461f, + -0.717870045f, -0.696177131f, + -0.715730825f, -0.698376249f, + -0.713584869f, -0.700568794f, + -0.711432196f, -0.702754744f, + -0.709272826f, -0.704934080f, + -0.707106781f, -0.707106781f, + -0.704934080f, -0.709272826f, + -0.702754744f, -0.711432196f, + -0.700568794f, -0.713584869f, + -0.698376249f, -0.715730825f, + -0.696177131f, -0.717870045f, + -0.693971461f, -0.720002508f, + -0.691759258f, -0.722128194f, + -0.689540545f, -0.724247083f, + -0.687315341f, -0.726359155f, + -0.685083668f, -0.728464390f, + -0.682845546f, -0.730562769f, + -0.680600998f, -0.732654272f, + -0.678350043f, -0.734738878f, + -0.676092704f, -0.736816569f, + -0.673829000f, -0.738887324f, + -0.671558955f, -0.740951125f, + -0.669282588f, -0.743007952f, + -0.666999922f, -0.745057785f, + -0.664710978f, -0.747100606f, + -0.662415778f, -0.749136395f, + -0.660114342f, -0.751165132f, + -0.657806693f, -0.753186799f, + -0.655492853f, -0.755201377f, + -0.653172843f, -0.757208847f, + -0.650846685f, -0.759209189f, + -0.648514401f, -0.761202385f, + -0.646176013f, -0.763188417f, + -0.643831543f, -0.765167266f, + -0.641481013f, -0.767138912f, + -0.639124445f, -0.769103338f, + -0.636761861f, -0.771060524f, + -0.634393284f, -0.773010453f, + -0.632018736f, -0.774953107f, + -0.629638239f, -0.776888466f, + -0.627251815f, -0.778816512f, + -0.624859488f, -0.780737229f, + -0.622461279f, -0.782650596f, + -0.620057212f, -0.784556597f, + -0.617647308f, -0.786455214f, + -0.615231591f, -0.788346428f, + -0.612810082f, -0.790230221f, + -0.610382806f, -0.792106577f, + -0.607949785f, -0.793975478f, + -0.605511041f, -0.795836905f, + -0.603066599f, -0.797690841f, + -0.600616479f, -0.799537269f, + -0.598160707f, -0.801376172f, + -0.595699304f, -0.803207531f, + -0.593232295f, -0.805031331f, + -0.590759702f, -0.806847554f, + -0.588281548f, -0.808656182f, + -0.585797857f, -0.810457198f, + -0.583308653f, -0.812250587f, + -0.580813958f, -0.814036330f, + -0.578313796f, -0.815814411f, + -0.575808191f, -0.817584813f, + -0.573297167f, -0.819347520f, + -0.570780746f, -0.821102515f, + -0.568258953f, -0.822849781f, + -0.565731811f, -0.824589303f, + -0.563199344f, -0.826321063f, + -0.560661576f, -0.828045045f, + -0.558118531f, -0.829761234f, + -0.555570233f, -0.831469612f, + -0.553016706f, -0.833170165f, + -0.550457973f, -0.834862875f, + -0.547894059f, -0.836547727f, + -0.545324988f, -0.838224706f, + -0.542750785f, -0.839893794f, + -0.540171473f, -0.841554977f, + -0.537587076f, -0.843208240f, + -0.534997620f, -0.844853565f, + -0.532403128f, -0.846490939f, + -0.529803625f, -0.848120345f, + -0.527199135f, -0.849741768f, + -0.524589683f, -0.851355193f, + -0.521975293f, -0.852960605f, + -0.519355990f, -0.854557988f, + -0.516731799f, -0.856147328f, + -0.514102744f, -0.857728610f, + -0.511468850f, -0.859301818f, + -0.508830143f, -0.860866939f, + -0.506186645f, -0.862423956f, + -0.503538384f, -0.863972856f, + -0.500885383f, -0.865513624f, + -0.498227667f, -0.867046246f, + -0.495565262f, -0.868570706f, + -0.492898192f, -0.870086991f, + -0.490226483f, -0.871595087f, + -0.487550160f, -0.873094978f, + -0.484869248f, -0.874586652f, + -0.482183772f, -0.876070094f, + -0.479493758f, -0.877545290f, + -0.476799230f, -0.879012226f, + -0.474100215f, -0.880470889f, + -0.471396737f, -0.881921264f, + -0.468688822f, -0.883363339f, + -0.465976496f, -0.884797098f, + -0.463259784f, -0.886222530f, + -0.460538711f, -0.887639620f, + -0.457813304f, -0.889048356f, + -0.455083587f, -0.890448723f, + -0.452349587f, -0.891840709f, + -0.449611330f, -0.893224301f, + -0.446868840f, -0.894599486f, + -0.444122145f, -0.895966250f, + -0.441371269f, -0.897324581f, + -0.438616239f, -0.898674466f, + -0.435857080f, -0.900015892f, + -0.433093819f, -0.901348847f, + -0.430326481f, -0.902673318f, + -0.427555093f, -0.903989293f, + -0.424779681f, -0.905296759f, + -0.422000271f, -0.906595705f, + -0.419216888f, -0.907886116f, + -0.416429560f, -0.909167983f, + -0.413638312f, -0.910441292f, + -0.410843171f, -0.911706032f, + -0.408044163f, -0.912962190f, + -0.405241314f, -0.914209756f, + -0.402434651f, -0.915448716f, + -0.399624200f, -0.916679060f, + -0.396809987f, -0.917900776f, + -0.393992040f, -0.919113852f, + -0.391170384f, -0.920318277f, + -0.388345047f, -0.921514039f, + -0.385516054f, -0.922701128f, + -0.382683432f, -0.923879533f, + -0.379847209f, -0.925049241f, + -0.377007410f, -0.926210242f, + -0.374164063f, -0.927362526f, + -0.371317194f, -0.928506080f, + -0.368466830f, -0.929640896f, + -0.365612998f, -0.930766961f, + -0.362755724f, -0.931884266f, + -0.359895037f, -0.932992799f, + -0.357030961f, -0.934092550f, + -0.354163525f, -0.935183510f, + -0.351292756f, -0.936265667f, + -0.348418680f, -0.937339012f, + -0.345541325f, -0.938403534f, + -0.342660717f, -0.939459224f, + -0.339776884f, -0.940506071f, + -0.336889853f, -0.941544065f, + -0.333999651f, -0.942573198f, + -0.331106306f, -0.943593458f, + -0.328209844f, -0.944604837f, + -0.325310292f, -0.945607325f, + -0.322407679f, -0.946600913f, + -0.319502031f, -0.947585591f, + -0.316593376f, -0.948561350f, + -0.313681740f, -0.949528181f, + -0.310767153f, -0.950486074f, + -0.307849640f, -0.951435021f, + -0.304929230f, -0.952375013f, + -0.302005949f, -0.953306040f, + -0.299079826f, -0.954228095f, + -0.296150888f, -0.955141168f, + -0.293219163f, -0.956045251f, + -0.290284677f, -0.956940336f, + -0.287347460f, -0.957826413f, + -0.284407537f, -0.958703475f, + -0.281464938f, -0.959571513f, + -0.278519689f, -0.960430519f, + -0.275571819f, -0.961280486f, + -0.272621355f, -0.962121404f, + -0.269668326f, -0.962953267f, + -0.266712757f, -0.963776066f, + -0.263754679f, -0.964589793f, + -0.260794118f, -0.965394442f, + -0.257831102f, -0.966190003f, + -0.254865660f, -0.966976471f, + -0.251897818f, -0.967753837f, + -0.248927606f, -0.968522094f, + -0.245955050f, -0.969281235f, + -0.242980180f, -0.970031253f, + -0.240003022f, -0.970772141f, + -0.237023606f, -0.971503891f, + -0.234041959f, -0.972226497f, + -0.231058108f, -0.972939952f, + -0.228072083f, -0.973644250f, + -0.225083911f, -0.974339383f, + -0.222093621f, -0.975025345f, + -0.219101240f, -0.975702130f, + -0.216106797f, -0.976369731f, + -0.213110320f, -0.977028143f, + -0.210111837f, -0.977677358f, + -0.207111376f, -0.978317371f, + -0.204108966f, -0.978948175f, + -0.201104635f, -0.979569766f, + -0.198098411f, -0.980182136f, + -0.195090322f, -0.980785280f, + -0.192080397f, -0.981379193f, + -0.189068664f, -0.981963869f, + -0.186055152f, -0.982539302f, + -0.183039888f, -0.983105487f, + -0.180022901f, -0.983662419f, + -0.177004220f, -0.984210092f, + -0.173983873f, -0.984748502f, + -0.170961889f, -0.985277642f, + -0.167938295f, -0.985797509f, + -0.164913120f, -0.986308097f, + -0.161886394f, -0.986809402f, + -0.158858143f, -0.987301418f, + -0.155828398f, -0.987784142f, + -0.152797185f, -0.988257568f, + -0.149764535f, -0.988721692f, + -0.146730474f, -0.989176510f, + -0.143695033f, -0.989622017f, + -0.140658239f, -0.990058210f, + -0.137620122f, -0.990485084f, + -0.134580709f, -0.990902635f, + -0.131540029f, -0.991310860f, + -0.128498111f, -0.991709754f, + -0.125454983f, -0.992099313f, + -0.122410675f, -0.992479535f, + -0.119365215f, -0.992850414f, + -0.116318631f, -0.993211949f, + -0.113270952f, -0.993564136f, + -0.110222207f, -0.993906970f, + -0.107172425f, -0.994240449f, + -0.104121634f, -0.994564571f, + -0.101069863f, -0.994879331f, + -0.098017140f, -0.995184727f, + -0.094963495f, -0.995480755f, + -0.091908956f, -0.995767414f, + -0.088853553f, -0.996044701f, + -0.085797312f, -0.996312612f, + -0.082740265f, -0.996571146f, + -0.079682438f, -0.996820299f, + -0.076623861f, -0.997060070f, + -0.073564564f, -0.997290457f, + -0.070504573f, -0.997511456f, + -0.067443920f, -0.997723067f, + -0.064382631f, -0.997925286f, + -0.061320736f, -0.998118113f, + -0.058258265f, -0.998301545f, + -0.055195244f, -0.998475581f, + -0.052131705f, -0.998640218f, + -0.049067674f, -0.998795456f, + -0.046003182f, -0.998941293f, + -0.042938257f, -0.999077728f, + -0.039872928f, -0.999204759f, + -0.036807223f, -0.999322385f, + -0.033741172f, -0.999430605f, + -0.030674803f, -0.999529418f, + -0.027608146f, -0.999618822f, + -0.024541229f, -0.999698819f, + -0.021474080f, -0.999769405f, + -0.018406730f, -0.999830582f, + -0.015339206f, -0.999882347f, + -0.012271538f, -0.999924702f, + -0.009203755f, -0.999957645f, + -0.006135885f, -0.999981175f, + -0.003067957f, -0.999995294f, + -0.000000000f, -1.000000000f, + 0.003067957f, -0.999995294f, + 0.006135885f, -0.999981175f, + 0.009203755f, -0.999957645f, + 0.012271538f, -0.999924702f, + 0.015339206f, -0.999882347f, + 0.018406730f, -0.999830582f, + 0.021474080f, -0.999769405f, + 0.024541229f, -0.999698819f, + 0.027608146f, -0.999618822f, + 0.030674803f, -0.999529418f, + 0.033741172f, -0.999430605f, + 0.036807223f, -0.999322385f, + 0.039872928f, -0.999204759f, + 0.042938257f, -0.999077728f, + 0.046003182f, -0.998941293f, + 0.049067674f, -0.998795456f, + 0.052131705f, -0.998640218f, + 0.055195244f, -0.998475581f, + 0.058258265f, -0.998301545f, + 0.061320736f, -0.998118113f, + 0.064382631f, -0.997925286f, + 0.067443920f, -0.997723067f, + 0.070504573f, -0.997511456f, + 0.073564564f, -0.997290457f, + 0.076623861f, -0.997060070f, + 0.079682438f, -0.996820299f, + 0.082740265f, -0.996571146f, + 0.085797312f, -0.996312612f, + 0.088853553f, -0.996044701f, + 0.091908956f, -0.995767414f, + 0.094963495f, -0.995480755f, + 0.098017140f, -0.995184727f, + 0.101069863f, -0.994879331f, + 0.104121634f, -0.994564571f, + 0.107172425f, -0.994240449f, + 0.110222207f, -0.993906970f, + 0.113270952f, -0.993564136f, + 0.116318631f, -0.993211949f, + 0.119365215f, -0.992850414f, + 0.122410675f, -0.992479535f, + 0.125454983f, -0.992099313f, + 0.128498111f, -0.991709754f, + 0.131540029f, -0.991310860f, + 0.134580709f, -0.990902635f, + 0.137620122f, -0.990485084f, + 0.140658239f, -0.990058210f, + 0.143695033f, -0.989622017f, + 0.146730474f, -0.989176510f, + 0.149764535f, -0.988721692f, + 0.152797185f, -0.988257568f, + 0.155828398f, -0.987784142f, + 0.158858143f, -0.987301418f, + 0.161886394f, -0.986809402f, + 0.164913120f, -0.986308097f, + 0.167938295f, -0.985797509f, + 0.170961889f, -0.985277642f, + 0.173983873f, -0.984748502f, + 0.177004220f, -0.984210092f, + 0.180022901f, -0.983662419f, + 0.183039888f, -0.983105487f, + 0.186055152f, -0.982539302f, + 0.189068664f, -0.981963869f, + 0.192080397f, -0.981379193f, + 0.195090322f, -0.980785280f, + 0.198098411f, -0.980182136f, + 0.201104635f, -0.979569766f, + 0.204108966f, -0.978948175f, + 0.207111376f, -0.978317371f, + 0.210111837f, -0.977677358f, + 0.213110320f, -0.977028143f, + 0.216106797f, -0.976369731f, + 0.219101240f, -0.975702130f, + 0.222093621f, -0.975025345f, + 0.225083911f, -0.974339383f, + 0.228072083f, -0.973644250f, + 0.231058108f, -0.972939952f, + 0.234041959f, -0.972226497f, + 0.237023606f, -0.971503891f, + 0.240003022f, -0.970772141f, + 0.242980180f, -0.970031253f, + 0.245955050f, -0.969281235f, + 0.248927606f, -0.968522094f, + 0.251897818f, -0.967753837f, + 0.254865660f, -0.966976471f, + 0.257831102f, -0.966190003f, + 0.260794118f, -0.965394442f, + 0.263754679f, -0.964589793f, + 0.266712757f, -0.963776066f, + 0.269668326f, -0.962953267f, + 0.272621355f, -0.962121404f, + 0.275571819f, -0.961280486f, + 0.278519689f, -0.960430519f, + 0.281464938f, -0.959571513f, + 0.284407537f, -0.958703475f, + 0.287347460f, -0.957826413f, + 0.290284677f, -0.956940336f, + 0.293219163f, -0.956045251f, + 0.296150888f, -0.955141168f, + 0.299079826f, -0.954228095f, + 0.302005949f, -0.953306040f, + 0.304929230f, -0.952375013f, + 0.307849640f, -0.951435021f, + 0.310767153f, -0.950486074f, + 0.313681740f, -0.949528181f, + 0.316593376f, -0.948561350f, + 0.319502031f, -0.947585591f, + 0.322407679f, -0.946600913f, + 0.325310292f, -0.945607325f, + 0.328209844f, -0.944604837f, + 0.331106306f, -0.943593458f, + 0.333999651f, -0.942573198f, + 0.336889853f, -0.941544065f, + 0.339776884f, -0.940506071f, + 0.342660717f, -0.939459224f, + 0.345541325f, -0.938403534f, + 0.348418680f, -0.937339012f, + 0.351292756f, -0.936265667f, + 0.354163525f, -0.935183510f, + 0.357030961f, -0.934092550f, + 0.359895037f, -0.932992799f, + 0.362755724f, -0.931884266f, + 0.365612998f, -0.930766961f, + 0.368466830f, -0.929640896f, + 0.371317194f, -0.928506080f, + 0.374164063f, -0.927362526f, + 0.377007410f, -0.926210242f, + 0.379847209f, -0.925049241f, + 0.382683432f, -0.923879533f, + 0.385516054f, -0.922701128f, + 0.388345047f, -0.921514039f, + 0.391170384f, -0.920318277f, + 0.393992040f, -0.919113852f, + 0.396809987f, -0.917900776f, + 0.399624200f, -0.916679060f, + 0.402434651f, -0.915448716f, + 0.405241314f, -0.914209756f, + 0.408044163f, -0.912962190f, + 0.410843171f, -0.911706032f, + 0.413638312f, -0.910441292f, + 0.416429560f, -0.909167983f, + 0.419216888f, -0.907886116f, + 0.422000271f, -0.906595705f, + 0.424779681f, -0.905296759f, + 0.427555093f, -0.903989293f, + 0.430326481f, -0.902673318f, + 0.433093819f, -0.901348847f, + 0.435857080f, -0.900015892f, + 0.438616239f, -0.898674466f, + 0.441371269f, -0.897324581f, + 0.444122145f, -0.895966250f, + 0.446868840f, -0.894599486f, + 0.449611330f, -0.893224301f, + 0.452349587f, -0.891840709f, + 0.455083587f, -0.890448723f, + 0.457813304f, -0.889048356f, + 0.460538711f, -0.887639620f, + 0.463259784f, -0.886222530f, + 0.465976496f, -0.884797098f, + 0.468688822f, -0.883363339f, + 0.471396737f, -0.881921264f, + 0.474100215f, -0.880470889f, + 0.476799230f, -0.879012226f, + 0.479493758f, -0.877545290f, + 0.482183772f, -0.876070094f, + 0.484869248f, -0.874586652f, + 0.487550160f, -0.873094978f, + 0.490226483f, -0.871595087f, + 0.492898192f, -0.870086991f, + 0.495565262f, -0.868570706f, + 0.498227667f, -0.867046246f, + 0.500885383f, -0.865513624f, + 0.503538384f, -0.863972856f, + 0.506186645f, -0.862423956f, + 0.508830143f, -0.860866939f, + 0.511468850f, -0.859301818f, + 0.514102744f, -0.857728610f, + 0.516731799f, -0.856147328f, + 0.519355990f, -0.854557988f, + 0.521975293f, -0.852960605f, + 0.524589683f, -0.851355193f, + 0.527199135f, -0.849741768f, + 0.529803625f, -0.848120345f, + 0.532403128f, -0.846490939f, + 0.534997620f, -0.844853565f, + 0.537587076f, -0.843208240f, + 0.540171473f, -0.841554977f, + 0.542750785f, -0.839893794f, + 0.545324988f, -0.838224706f, + 0.547894059f, -0.836547727f, + 0.550457973f, -0.834862875f, + 0.553016706f, -0.833170165f, + 0.555570233f, -0.831469612f, + 0.558118531f, -0.829761234f, + 0.560661576f, -0.828045045f, + 0.563199344f, -0.826321063f, + 0.565731811f, -0.824589303f, + 0.568258953f, -0.822849781f, + 0.570780746f, -0.821102515f, + 0.573297167f, -0.819347520f, + 0.575808191f, -0.817584813f, + 0.578313796f, -0.815814411f, + 0.580813958f, -0.814036330f, + 0.583308653f, -0.812250587f, + 0.585797857f, -0.810457198f, + 0.588281548f, -0.808656182f, + 0.590759702f, -0.806847554f, + 0.593232295f, -0.805031331f, + 0.595699304f, -0.803207531f, + 0.598160707f, -0.801376172f, + 0.600616479f, -0.799537269f, + 0.603066599f, -0.797690841f, + 0.605511041f, -0.795836905f, + 0.607949785f, -0.793975478f, + 0.610382806f, -0.792106577f, + 0.612810082f, -0.790230221f, + 0.615231591f, -0.788346428f, + 0.617647308f, -0.786455214f, + 0.620057212f, -0.784556597f, + 0.622461279f, -0.782650596f, + 0.624859488f, -0.780737229f, + 0.627251815f, -0.778816512f, + 0.629638239f, -0.776888466f, + 0.632018736f, -0.774953107f, + 0.634393284f, -0.773010453f, + 0.636761861f, -0.771060524f, + 0.639124445f, -0.769103338f, + 0.641481013f, -0.767138912f, + 0.643831543f, -0.765167266f, + 0.646176013f, -0.763188417f, + 0.648514401f, -0.761202385f, + 0.650846685f, -0.759209189f, + 0.653172843f, -0.757208847f, + 0.655492853f, -0.755201377f, + 0.657806693f, -0.753186799f, + 0.660114342f, -0.751165132f, + 0.662415778f, -0.749136395f, + 0.664710978f, -0.747100606f, + 0.666999922f, -0.745057785f, + 0.669282588f, -0.743007952f, + 0.671558955f, -0.740951125f, + 0.673829000f, -0.738887324f, + 0.676092704f, -0.736816569f, + 0.678350043f, -0.734738878f, + 0.680600998f, -0.732654272f, + 0.682845546f, -0.730562769f, + 0.685083668f, -0.728464390f, + 0.687315341f, -0.726359155f, + 0.689540545f, -0.724247083f, + 0.691759258f, -0.722128194f, + 0.693971461f, -0.720002508f, + 0.696177131f, -0.717870045f, + 0.698376249f, -0.715730825f, + 0.700568794f, -0.713584869f, + 0.702754744f, -0.711432196f, + 0.704934080f, -0.709272826f, + 0.707106781f, -0.707106781f, + 0.709272826f, -0.704934080f, + 0.711432196f, -0.702754744f, + 0.713584869f, -0.700568794f, + 0.715730825f, -0.698376249f, + 0.717870045f, -0.696177131f, + 0.720002508f, -0.693971461f, + 0.722128194f, -0.691759258f, + 0.724247083f, -0.689540545f, + 0.726359155f, -0.687315341f, + 0.728464390f, -0.685083668f, + 0.730562769f, -0.682845546f, + 0.732654272f, -0.680600998f, + 0.734738878f, -0.678350043f, + 0.736816569f, -0.676092704f, + 0.738887324f, -0.673829000f, + 0.740951125f, -0.671558955f, + 0.743007952f, -0.669282588f, + 0.745057785f, -0.666999922f, + 0.747100606f, -0.664710978f, + 0.749136395f, -0.662415778f, + 0.751165132f, -0.660114342f, + 0.753186799f, -0.657806693f, + 0.755201377f, -0.655492853f, + 0.757208847f, -0.653172843f, + 0.759209189f, -0.650846685f, + 0.761202385f, -0.648514401f, + 0.763188417f, -0.646176013f, + 0.765167266f, -0.643831543f, + 0.767138912f, -0.641481013f, + 0.769103338f, -0.639124445f, + 0.771060524f, -0.636761861f, + 0.773010453f, -0.634393284f, + 0.774953107f, -0.632018736f, + 0.776888466f, -0.629638239f, + 0.778816512f, -0.627251815f, + 0.780737229f, -0.624859488f, + 0.782650596f, -0.622461279f, + 0.784556597f, -0.620057212f, + 0.786455214f, -0.617647308f, + 0.788346428f, -0.615231591f, + 0.790230221f, -0.612810082f, + 0.792106577f, -0.610382806f, + 0.793975478f, -0.607949785f, + 0.795836905f, -0.605511041f, + 0.797690841f, -0.603066599f, + 0.799537269f, -0.600616479f, + 0.801376172f, -0.598160707f, + 0.803207531f, -0.595699304f, + 0.805031331f, -0.593232295f, + 0.806847554f, -0.590759702f, + 0.808656182f, -0.588281548f, + 0.810457198f, -0.585797857f, + 0.812250587f, -0.583308653f, + 0.814036330f, -0.580813958f, + 0.815814411f, -0.578313796f, + 0.817584813f, -0.575808191f, + 0.819347520f, -0.573297167f, + 0.821102515f, -0.570780746f, + 0.822849781f, -0.568258953f, + 0.824589303f, -0.565731811f, + 0.826321063f, -0.563199344f, + 0.828045045f, -0.560661576f, + 0.829761234f, -0.558118531f, + 0.831469612f, -0.555570233f, + 0.833170165f, -0.553016706f, + 0.834862875f, -0.550457973f, + 0.836547727f, -0.547894059f, + 0.838224706f, -0.545324988f, + 0.839893794f, -0.542750785f, + 0.841554977f, -0.540171473f, + 0.843208240f, -0.537587076f, + 0.844853565f, -0.534997620f, + 0.846490939f, -0.532403128f, + 0.848120345f, -0.529803625f, + 0.849741768f, -0.527199135f, + 0.851355193f, -0.524589683f, + 0.852960605f, -0.521975293f, + 0.854557988f, -0.519355990f, + 0.856147328f, -0.516731799f, + 0.857728610f, -0.514102744f, + 0.859301818f, -0.511468850f, + 0.860866939f, -0.508830143f, + 0.862423956f, -0.506186645f, + 0.863972856f, -0.503538384f, + 0.865513624f, -0.500885383f, + 0.867046246f, -0.498227667f, + 0.868570706f, -0.495565262f, + 0.870086991f, -0.492898192f, + 0.871595087f, -0.490226483f, + 0.873094978f, -0.487550160f, + 0.874586652f, -0.484869248f, + 0.876070094f, -0.482183772f, + 0.877545290f, -0.479493758f, + 0.879012226f, -0.476799230f, + 0.880470889f, -0.474100215f, + 0.881921264f, -0.471396737f, + 0.883363339f, -0.468688822f, + 0.884797098f, -0.465976496f, + 0.886222530f, -0.463259784f, + 0.887639620f, -0.460538711f, + 0.889048356f, -0.457813304f, + 0.890448723f, -0.455083587f, + 0.891840709f, -0.452349587f, + 0.893224301f, -0.449611330f, + 0.894599486f, -0.446868840f, + 0.895966250f, -0.444122145f, + 0.897324581f, -0.441371269f, + 0.898674466f, -0.438616239f, + 0.900015892f, -0.435857080f, + 0.901348847f, -0.433093819f, + 0.902673318f, -0.430326481f, + 0.903989293f, -0.427555093f, + 0.905296759f, -0.424779681f, + 0.906595705f, -0.422000271f, + 0.907886116f, -0.419216888f, + 0.909167983f, -0.416429560f, + 0.910441292f, -0.413638312f, + 0.911706032f, -0.410843171f, + 0.912962190f, -0.408044163f, + 0.914209756f, -0.405241314f, + 0.915448716f, -0.402434651f, + 0.916679060f, -0.399624200f, + 0.917900776f, -0.396809987f, + 0.919113852f, -0.393992040f, + 0.920318277f, -0.391170384f, + 0.921514039f, -0.388345047f, + 0.922701128f, -0.385516054f, + 0.923879533f, -0.382683432f, + 0.925049241f, -0.379847209f, + 0.926210242f, -0.377007410f, + 0.927362526f, -0.374164063f, + 0.928506080f, -0.371317194f, + 0.929640896f, -0.368466830f, + 0.930766961f, -0.365612998f, + 0.931884266f, -0.362755724f, + 0.932992799f, -0.359895037f, + 0.934092550f, -0.357030961f, + 0.935183510f, -0.354163525f, + 0.936265667f, -0.351292756f, + 0.937339012f, -0.348418680f, + 0.938403534f, -0.345541325f, + 0.939459224f, -0.342660717f, + 0.940506071f, -0.339776884f, + 0.941544065f, -0.336889853f, + 0.942573198f, -0.333999651f, + 0.943593458f, -0.331106306f, + 0.944604837f, -0.328209844f, + 0.945607325f, -0.325310292f, + 0.946600913f, -0.322407679f, + 0.947585591f, -0.319502031f, + 0.948561350f, -0.316593376f, + 0.949528181f, -0.313681740f, + 0.950486074f, -0.310767153f, + 0.951435021f, -0.307849640f, + 0.952375013f, -0.304929230f, + 0.953306040f, -0.302005949f, + 0.954228095f, -0.299079826f, + 0.955141168f, -0.296150888f, + 0.956045251f, -0.293219163f, + 0.956940336f, -0.290284677f, + 0.957826413f, -0.287347460f, + 0.958703475f, -0.284407537f, + 0.959571513f, -0.281464938f, + 0.960430519f, -0.278519689f, + 0.961280486f, -0.275571819f, + 0.962121404f, -0.272621355f, + 0.962953267f, -0.269668326f, + 0.963776066f, -0.266712757f, + 0.964589793f, -0.263754679f, + 0.965394442f, -0.260794118f, + 0.966190003f, -0.257831102f, + 0.966976471f, -0.254865660f, + 0.967753837f, -0.251897818f, + 0.968522094f, -0.248927606f, + 0.969281235f, -0.245955050f, + 0.970031253f, -0.242980180f, + 0.970772141f, -0.240003022f, + 0.971503891f, -0.237023606f, + 0.972226497f, -0.234041959f, + 0.972939952f, -0.231058108f, + 0.973644250f, -0.228072083f, + 0.974339383f, -0.225083911f, + 0.975025345f, -0.222093621f, + 0.975702130f, -0.219101240f, + 0.976369731f, -0.216106797f, + 0.977028143f, -0.213110320f, + 0.977677358f, -0.210111837f, + 0.978317371f, -0.207111376f, + 0.978948175f, -0.204108966f, + 0.979569766f, -0.201104635f, + 0.980182136f, -0.198098411f, + 0.980785280f, -0.195090322f, + 0.981379193f, -0.192080397f, + 0.981963869f, -0.189068664f, + 0.982539302f, -0.186055152f, + 0.983105487f, -0.183039888f, + 0.983662419f, -0.180022901f, + 0.984210092f, -0.177004220f, + 0.984748502f, -0.173983873f, + 0.985277642f, -0.170961889f, + 0.985797509f, -0.167938295f, + 0.986308097f, -0.164913120f, + 0.986809402f, -0.161886394f, + 0.987301418f, -0.158858143f, + 0.987784142f, -0.155828398f, + 0.988257568f, -0.152797185f, + 0.988721692f, -0.149764535f, + 0.989176510f, -0.146730474f, + 0.989622017f, -0.143695033f, + 0.990058210f, -0.140658239f, + 0.990485084f, -0.137620122f, + 0.990902635f, -0.134580709f, + 0.991310860f, -0.131540029f, + 0.991709754f, -0.128498111f, + 0.992099313f, -0.125454983f, + 0.992479535f, -0.122410675f, + 0.992850414f, -0.119365215f, + 0.993211949f, -0.116318631f, + 0.993564136f, -0.113270952f, + 0.993906970f, -0.110222207f, + 0.994240449f, -0.107172425f, + 0.994564571f, -0.104121634f, + 0.994879331f, -0.101069863f, + 0.995184727f, -0.098017140f, + 0.995480755f, -0.094963495f, + 0.995767414f, -0.091908956f, + 0.996044701f, -0.088853553f, + 0.996312612f, -0.085797312f, + 0.996571146f, -0.082740265f, + 0.996820299f, -0.079682438f, + 0.997060070f, -0.076623861f, + 0.997290457f, -0.073564564f, + 0.997511456f, -0.070504573f, + 0.997723067f, -0.067443920f, + 0.997925286f, -0.064382631f, + 0.998118113f, -0.061320736f, + 0.998301545f, -0.058258265f, + 0.998475581f, -0.055195244f, + 0.998640218f, -0.052131705f, + 0.998795456f, -0.049067674f, + 0.998941293f, -0.046003182f, + 0.999077728f, -0.042938257f, + 0.999204759f, -0.039872928f, + 0.999322385f, -0.036807223f, + 0.999430605f, -0.033741172f, + 0.999529418f, -0.030674803f, + 0.999618822f, -0.027608146f, + 0.999698819f, -0.024541229f, + 0.999769405f, -0.021474080f, + 0.999830582f, -0.018406730f, + 0.999882347f, -0.015339206f, + 0.999924702f, -0.012271538f, + 0.999957645f, -0.009203755f, + 0.999981175f, -0.006135885f, + 0.999995294f, -0.003067957f +}; + +/** +* \par +* Example code for Floating-point Twiddle factors Generation: +* \par +*
for(i = 0; i< N/; i++)    
+* {    
+*	twiddleCoef[2*i]= cos(i * 2*PI/(float)N);    
+*	twiddleCoef[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 4096 and PI = 3.14159265358979 +* \par +* Cos and Sin values are in interleaved fashion +* +*/ +const float32_t twiddleCoef_4096[8192] = { + 1.000000000f, 0.000000000f, + 0.999998823f, 0.001533980f, + 0.999995294f, 0.003067957f, + 0.999989411f, 0.004601926f, + 0.999981175f, 0.006135885f, + 0.999970586f, 0.007669829f, + 0.999957645f, 0.009203755f, + 0.999942350f, 0.010737659f, + 0.999924702f, 0.012271538f, + 0.999904701f, 0.013805389f, + 0.999882347f, 0.015339206f, + 0.999857641f, 0.016872988f, + 0.999830582f, 0.018406730f, + 0.999801170f, 0.019940429f, + 0.999769405f, 0.021474080f, + 0.999735288f, 0.023007681f, + 0.999698819f, 0.024541229f, + 0.999659997f, 0.026074718f, + 0.999618822f, 0.027608146f, + 0.999575296f, 0.029141509f, + 0.999529418f, 0.030674803f, + 0.999481187f, 0.032208025f, + 0.999430605f, 0.033741172f, + 0.999377670f, 0.035274239f, + 0.999322385f, 0.036807223f, + 0.999264747f, 0.038340120f, + 0.999204759f, 0.039872928f, + 0.999142419f, 0.041405641f, + 0.999077728f, 0.042938257f, + 0.999010686f, 0.044470772f, + 0.998941293f, 0.046003182f, + 0.998869550f, 0.047535484f, + 0.998795456f, 0.049067674f, + 0.998719012f, 0.050599749f, + 0.998640218f, 0.052131705f, + 0.998559074f, 0.053663538f, + 0.998475581f, 0.055195244f, + 0.998389737f, 0.056726821f, + 0.998301545f, 0.058258265f, + 0.998211003f, 0.059789571f, + 0.998118113f, 0.061320736f, + 0.998022874f, 0.062851758f, + 0.997925286f, 0.064382631f, + 0.997825350f, 0.065913353f, + 0.997723067f, 0.067443920f, + 0.997618435f, 0.068974328f, + 0.997511456f, 0.070504573f, + 0.997402130f, 0.072034653f, + 0.997290457f, 0.073564564f, + 0.997176437f, 0.075094301f, + 0.997060070f, 0.076623861f, + 0.996941358f, 0.078153242f, + 0.996820299f, 0.079682438f, + 0.996696895f, 0.081211447f, + 0.996571146f, 0.082740265f, + 0.996443051f, 0.084268888f, + 0.996312612f, 0.085797312f, + 0.996179829f, 0.087325535f, + 0.996044701f, 0.088853553f, + 0.995907229f, 0.090381361f, + 0.995767414f, 0.091908956f, + 0.995625256f, 0.093436336f, + 0.995480755f, 0.094963495f, + 0.995333912f, 0.096490431f, + 0.995184727f, 0.098017140f, + 0.995033199f, 0.099543619f, + 0.994879331f, 0.101069863f, + 0.994723121f, 0.102595869f, + 0.994564571f, 0.104121634f, + 0.994403680f, 0.105647154f, + 0.994240449f, 0.107172425f, + 0.994074879f, 0.108697444f, + 0.993906970f, 0.110222207f, + 0.993736722f, 0.111746711f, + 0.993564136f, 0.113270952f, + 0.993389211f, 0.114794927f, + 0.993211949f, 0.116318631f, + 0.993032350f, 0.117842062f, + 0.992850414f, 0.119365215f, + 0.992666142f, 0.120888087f, + 0.992479535f, 0.122410675f, + 0.992290591f, 0.123932975f, + 0.992099313f, 0.125454983f, + 0.991905700f, 0.126976696f, + 0.991709754f, 0.128498111f, + 0.991511473f, 0.130019223f, + 0.991310860f, 0.131540029f, + 0.991107914f, 0.133060525f, + 0.990902635f, 0.134580709f, + 0.990695025f, 0.136100575f, + 0.990485084f, 0.137620122f, + 0.990272812f, 0.139139344f, + 0.990058210f, 0.140658239f, + 0.989841278f, 0.142176804f, + 0.989622017f, 0.143695033f, + 0.989400428f, 0.145212925f, + 0.989176510f, 0.146730474f, + 0.988950265f, 0.148247679f, + 0.988721692f, 0.149764535f, + 0.988490793f, 0.151281038f, + 0.988257568f, 0.152797185f, + 0.988022017f, 0.154312973f, + 0.987784142f, 0.155828398f, + 0.987543942f, 0.157343456f, + 0.987301418f, 0.158858143f, + 0.987056571f, 0.160372457f, + 0.986809402f, 0.161886394f, + 0.986559910f, 0.163399949f, + 0.986308097f, 0.164913120f, + 0.986053963f, 0.166425904f, + 0.985797509f, 0.167938295f, + 0.985538735f, 0.169450291f, + 0.985277642f, 0.170961889f, + 0.985014231f, 0.172473084f, + 0.984748502f, 0.173983873f, + 0.984480455f, 0.175494253f, + 0.984210092f, 0.177004220f, + 0.983937413f, 0.178513771f, + 0.983662419f, 0.180022901f, + 0.983385110f, 0.181531608f, + 0.983105487f, 0.183039888f, + 0.982823551f, 0.184547737f, + 0.982539302f, 0.186055152f, + 0.982252741f, 0.187562129f, + 0.981963869f, 0.189068664f, + 0.981672686f, 0.190574755f, + 0.981379193f, 0.192080397f, + 0.981083391f, 0.193585587f, + 0.980785280f, 0.195090322f, + 0.980484862f, 0.196594598f, + 0.980182136f, 0.198098411f, + 0.979877104f, 0.199601758f, + 0.979569766f, 0.201104635f, + 0.979260123f, 0.202607039f, + 0.978948175f, 0.204108966f, + 0.978633924f, 0.205610413f, + 0.978317371f, 0.207111376f, + 0.977998515f, 0.208611852f, + 0.977677358f, 0.210111837f, + 0.977353900f, 0.211611327f, + 0.977028143f, 0.213110320f, + 0.976700086f, 0.214608811f, + 0.976369731f, 0.216106797f, + 0.976037079f, 0.217604275f, + 0.975702130f, 0.219101240f, + 0.975364885f, 0.220597690f, + 0.975025345f, 0.222093621f, + 0.974683511f, 0.223589029f, + 0.974339383f, 0.225083911f, + 0.973992962f, 0.226578264f, + 0.973644250f, 0.228072083f, + 0.973293246f, 0.229565366f, + 0.972939952f, 0.231058108f, + 0.972584369f, 0.232550307f, + 0.972226497f, 0.234041959f, + 0.971866337f, 0.235533059f, + 0.971503891f, 0.237023606f, + 0.971139158f, 0.238513595f, + 0.970772141f, 0.240003022f, + 0.970402839f, 0.241491885f, + 0.970031253f, 0.242980180f, + 0.969657385f, 0.244467903f, + 0.969281235f, 0.245955050f, + 0.968902805f, 0.247441619f, + 0.968522094f, 0.248927606f, + 0.968139105f, 0.250413007f, + 0.967753837f, 0.251897818f, + 0.967366292f, 0.253382037f, + 0.966976471f, 0.254865660f, + 0.966584374f, 0.256348682f, + 0.966190003f, 0.257831102f, + 0.965793359f, 0.259312915f, + 0.965394442f, 0.260794118f, + 0.964993253f, 0.262274707f, + 0.964589793f, 0.263754679f, + 0.964184064f, 0.265234030f, + 0.963776066f, 0.266712757f, + 0.963365800f, 0.268190857f, + 0.962953267f, 0.269668326f, + 0.962538468f, 0.271145160f, + 0.962121404f, 0.272621355f, + 0.961702077f, 0.274096910f, + 0.961280486f, 0.275571819f, + 0.960856633f, 0.277046080f, + 0.960430519f, 0.278519689f, + 0.960002146f, 0.279992643f, + 0.959571513f, 0.281464938f, + 0.959138622f, 0.282936570f, + 0.958703475f, 0.284407537f, + 0.958266071f, 0.285877835f, + 0.957826413f, 0.287347460f, + 0.957384501f, 0.288816408f, + 0.956940336f, 0.290284677f, + 0.956493919f, 0.291752263f, + 0.956045251f, 0.293219163f, + 0.955594334f, 0.294685372f, + 0.955141168f, 0.296150888f, + 0.954685755f, 0.297615707f, + 0.954228095f, 0.299079826f, + 0.953768190f, 0.300543241f, + 0.953306040f, 0.302005949f, + 0.952841648f, 0.303467947f, + 0.952375013f, 0.304929230f, + 0.951906137f, 0.306389795f, + 0.951435021f, 0.307849640f, + 0.950961666f, 0.309308760f, + 0.950486074f, 0.310767153f, + 0.950008245f, 0.312224814f, + 0.949528181f, 0.313681740f, + 0.949045882f, 0.315137929f, + 0.948561350f, 0.316593376f, + 0.948074586f, 0.318048077f, + 0.947585591f, 0.319502031f, + 0.947094366f, 0.320955232f, + 0.946600913f, 0.322407679f, + 0.946105232f, 0.323859367f, + 0.945607325f, 0.325310292f, + 0.945107193f, 0.326760452f, + 0.944604837f, 0.328209844f, + 0.944100258f, 0.329658463f, + 0.943593458f, 0.331106306f, + 0.943084437f, 0.332553370f, + 0.942573198f, 0.333999651f, + 0.942059740f, 0.335445147f, + 0.941544065f, 0.336889853f, + 0.941026175f, 0.338333767f, + 0.940506071f, 0.339776884f, + 0.939983753f, 0.341219202f, + 0.939459224f, 0.342660717f, + 0.938932484f, 0.344101426f, + 0.938403534f, 0.345541325f, + 0.937872376f, 0.346980411f, + 0.937339012f, 0.348418680f, + 0.936803442f, 0.349856130f, + 0.936265667f, 0.351292756f, + 0.935725689f, 0.352728556f, + 0.935183510f, 0.354163525f, + 0.934639130f, 0.355597662f, + 0.934092550f, 0.357030961f, + 0.933543773f, 0.358463421f, + 0.932992799f, 0.359895037f, + 0.932439629f, 0.361325806f, + 0.931884266f, 0.362755724f, + 0.931326709f, 0.364184790f, + 0.930766961f, 0.365612998f, + 0.930205023f, 0.367040346f, + 0.929640896f, 0.368466830f, + 0.929074581f, 0.369892447f, + 0.928506080f, 0.371317194f, + 0.927935395f, 0.372741067f, + 0.927362526f, 0.374164063f, + 0.926787474f, 0.375586178f, + 0.926210242f, 0.377007410f, + 0.925630831f, 0.378427755f, + 0.925049241f, 0.379847209f, + 0.924465474f, 0.381265769f, + 0.923879533f, 0.382683432f, + 0.923291417f, 0.384100195f, + 0.922701128f, 0.385516054f, + 0.922108669f, 0.386931006f, + 0.921514039f, 0.388345047f, + 0.920917242f, 0.389758174f, + 0.920318277f, 0.391170384f, + 0.919717146f, 0.392581674f, + 0.919113852f, 0.393992040f, + 0.918508394f, 0.395401479f, + 0.917900776f, 0.396809987f, + 0.917290997f, 0.398217562f, + 0.916679060f, 0.399624200f, + 0.916064966f, 0.401029897f, + 0.915448716f, 0.402434651f, + 0.914830312f, 0.403838458f, + 0.914209756f, 0.405241314f, + 0.913587048f, 0.406643217f, + 0.912962190f, 0.408044163f, + 0.912335185f, 0.409444149f, + 0.911706032f, 0.410843171f, + 0.911074734f, 0.412241227f, + 0.910441292f, 0.413638312f, + 0.909805708f, 0.415034424f, + 0.909167983f, 0.416429560f, + 0.908528119f, 0.417823716f, + 0.907886116f, 0.419216888f, + 0.907241978f, 0.420609074f, + 0.906595705f, 0.422000271f, + 0.905947298f, 0.423390474f, + 0.905296759f, 0.424779681f, + 0.904644091f, 0.426167889f, + 0.903989293f, 0.427555093f, + 0.903332368f, 0.428941292f, + 0.902673318f, 0.430326481f, + 0.902012144f, 0.431710658f, + 0.901348847f, 0.433093819f, + 0.900683429f, 0.434475961f, + 0.900015892f, 0.435857080f, + 0.899346237f, 0.437237174f, + 0.898674466f, 0.438616239f, + 0.898000580f, 0.439994271f, + 0.897324581f, 0.441371269f, + 0.896646470f, 0.442747228f, + 0.895966250f, 0.444122145f, + 0.895283921f, 0.445496017f, + 0.894599486f, 0.446868840f, + 0.893912945f, 0.448240612f, + 0.893224301f, 0.449611330f, + 0.892533555f, 0.450980989f, + 0.891840709f, 0.452349587f, + 0.891145765f, 0.453717121f, + 0.890448723f, 0.455083587f, + 0.889749586f, 0.456448982f, + 0.889048356f, 0.457813304f, + 0.888345033f, 0.459176548f, + 0.887639620f, 0.460538711f, + 0.886932119f, 0.461899791f, + 0.886222530f, 0.463259784f, + 0.885510856f, 0.464618686f, + 0.884797098f, 0.465976496f, + 0.884081259f, 0.467333209f, + 0.883363339f, 0.468688822f, + 0.882643340f, 0.470043332f, + 0.881921264f, 0.471396737f, + 0.881197113f, 0.472749032f, + 0.880470889f, 0.474100215f, + 0.879742593f, 0.475450282f, + 0.879012226f, 0.476799230f, + 0.878279792f, 0.478147056f, + 0.877545290f, 0.479493758f, + 0.876808724f, 0.480839331f, + 0.876070094f, 0.482183772f, + 0.875329403f, 0.483527079f, + 0.874586652f, 0.484869248f, + 0.873841843f, 0.486210276f, + 0.873094978f, 0.487550160f, + 0.872346059f, 0.488888897f, + 0.871595087f, 0.490226483f, + 0.870842063f, 0.491562916f, + 0.870086991f, 0.492898192f, + 0.869329871f, 0.494232309f, + 0.868570706f, 0.495565262f, + 0.867809497f, 0.496897049f, + 0.867046246f, 0.498227667f, + 0.866280954f, 0.499557113f, + 0.865513624f, 0.500885383f, + 0.864744258f, 0.502212474f, + 0.863972856f, 0.503538384f, + 0.863199422f, 0.504863109f, + 0.862423956f, 0.506186645f, + 0.861646461f, 0.507508991f, + 0.860866939f, 0.508830143f, + 0.860085390f, 0.510150097f, + 0.859301818f, 0.511468850f, + 0.858516224f, 0.512786401f, + 0.857728610f, 0.514102744f, + 0.856938977f, 0.515417878f, + 0.856147328f, 0.516731799f, + 0.855353665f, 0.518044504f, + 0.854557988f, 0.519355990f, + 0.853760301f, 0.520666254f, + 0.852960605f, 0.521975293f, + 0.852158902f, 0.523283103f, + 0.851355193f, 0.524589683f, + 0.850549481f, 0.525895027f, + 0.849741768f, 0.527199135f, + 0.848932055f, 0.528502002f, + 0.848120345f, 0.529803625f, + 0.847306639f, 0.531104001f, + 0.846490939f, 0.532403128f, + 0.845673247f, 0.533701002f, + 0.844853565f, 0.534997620f, + 0.844031895f, 0.536292979f, + 0.843208240f, 0.537587076f, + 0.842382600f, 0.538879909f, + 0.841554977f, 0.540171473f, + 0.840725375f, 0.541461766f, + 0.839893794f, 0.542750785f, + 0.839060237f, 0.544038527f, + 0.838224706f, 0.545324988f, + 0.837387202f, 0.546610167f, + 0.836547727f, 0.547894059f, + 0.835706284f, 0.549176662f, + 0.834862875f, 0.550457973f, + 0.834017501f, 0.551737988f, + 0.833170165f, 0.553016706f, + 0.832320868f, 0.554294121f, + 0.831469612f, 0.555570233f, + 0.830616400f, 0.556845037f, + 0.829761234f, 0.558118531f, + 0.828904115f, 0.559390712f, + 0.828045045f, 0.560661576f, + 0.827184027f, 0.561931121f, + 0.826321063f, 0.563199344f, + 0.825456154f, 0.564466242f, + 0.824589303f, 0.565731811f, + 0.823720511f, 0.566996049f, + 0.822849781f, 0.568258953f, + 0.821977115f, 0.569520519f, + 0.821102515f, 0.570780746f, + 0.820225983f, 0.572039629f, + 0.819347520f, 0.573297167f, + 0.818467130f, 0.574553355f, + 0.817584813f, 0.575808191f, + 0.816700573f, 0.577061673f, + 0.815814411f, 0.578313796f, + 0.814926329f, 0.579564559f, + 0.814036330f, 0.580813958f, + 0.813144415f, 0.582061990f, + 0.812250587f, 0.583308653f, + 0.811354847f, 0.584553943f, + 0.810457198f, 0.585797857f, + 0.809557642f, 0.587040394f, + 0.808656182f, 0.588281548f, + 0.807752818f, 0.589521319f, + 0.806847554f, 0.590759702f, + 0.805940391f, 0.591996695f, + 0.805031331f, 0.593232295f, + 0.804120377f, 0.594466499f, + 0.803207531f, 0.595699304f, + 0.802292796f, 0.596930708f, + 0.801376172f, 0.598160707f, + 0.800457662f, 0.599389298f, + 0.799537269f, 0.600616479f, + 0.798614995f, 0.601842247f, + 0.797690841f, 0.603066599f, + 0.796764810f, 0.604289531f, + 0.795836905f, 0.605511041f, + 0.794907126f, 0.606731127f, + 0.793975478f, 0.607949785f, + 0.793041960f, 0.609167012f, + 0.792106577f, 0.610382806f, + 0.791169330f, 0.611597164f, + 0.790230221f, 0.612810082f, + 0.789289253f, 0.614021559f, + 0.788346428f, 0.615231591f, + 0.787401747f, 0.616440175f, + 0.786455214f, 0.617647308f, + 0.785506830f, 0.618852988f, + 0.784556597f, 0.620057212f, + 0.783604519f, 0.621259977f, + 0.782650596f, 0.622461279f, + 0.781694832f, 0.623661118f, + 0.780737229f, 0.624859488f, + 0.779777788f, 0.626056388f, + 0.778816512f, 0.627251815f, + 0.777853404f, 0.628445767f, + 0.776888466f, 0.629638239f, + 0.775921699f, 0.630829230f, + 0.774953107f, 0.632018736f, + 0.773982691f, 0.633206755f, + 0.773010453f, 0.634393284f, + 0.772036397f, 0.635578320f, + 0.771060524f, 0.636761861f, + 0.770082837f, 0.637943904f, + 0.769103338f, 0.639124445f, + 0.768122029f, 0.640303482f, + 0.767138912f, 0.641481013f, + 0.766153990f, 0.642657034f, + 0.765167266f, 0.643831543f, + 0.764178741f, 0.645004537f, + 0.763188417f, 0.646176013f, + 0.762196298f, 0.647345969f, + 0.761202385f, 0.648514401f, + 0.760206682f, 0.649681307f, + 0.759209189f, 0.650846685f, + 0.758209910f, 0.652010531f, + 0.757208847f, 0.653172843f, + 0.756206001f, 0.654333618f, + 0.755201377f, 0.655492853f, + 0.754194975f, 0.656650546f, + 0.753186799f, 0.657806693f, + 0.752176850f, 0.658961293f, + 0.751165132f, 0.660114342f, + 0.750151646f, 0.661265838f, + 0.749136395f, 0.662415778f, + 0.748119380f, 0.663564159f, + 0.747100606f, 0.664710978f, + 0.746080074f, 0.665856234f, + 0.745057785f, 0.666999922f, + 0.744033744f, 0.668142041f, + 0.743007952f, 0.669282588f, + 0.741980412f, 0.670421560f, + 0.740951125f, 0.671558955f, + 0.739920095f, 0.672694769f, + 0.738887324f, 0.673829000f, + 0.737852815f, 0.674961646f, + 0.736816569f, 0.676092704f, + 0.735778589f, 0.677222170f, + 0.734738878f, 0.678350043f, + 0.733697438f, 0.679476320f, + 0.732654272f, 0.680600998f, + 0.731609381f, 0.681724074f, + 0.730562769f, 0.682845546f, + 0.729514438f, 0.683965412f, + 0.728464390f, 0.685083668f, + 0.727412629f, 0.686200312f, + 0.726359155f, 0.687315341f, + 0.725303972f, 0.688428753f, + 0.724247083f, 0.689540545f, + 0.723188489f, 0.690650714f, + 0.722128194f, 0.691759258f, + 0.721066199f, 0.692866175f, + 0.720002508f, 0.693971461f, + 0.718937122f, 0.695075114f, + 0.717870045f, 0.696177131f, + 0.716801279f, 0.697277511f, + 0.715730825f, 0.698376249f, + 0.714658688f, 0.699473345f, + 0.713584869f, 0.700568794f, + 0.712509371f, 0.701662595f, + 0.711432196f, 0.702754744f, + 0.710353347f, 0.703845241f, + 0.709272826f, 0.704934080f, + 0.708190637f, 0.706021261f, + 0.707106781f, 0.707106781f, + 0.706021261f, 0.708190637f, + 0.704934080f, 0.709272826f, + 0.703845241f, 0.710353347f, + 0.702754744f, 0.711432196f, + 0.701662595f, 0.712509371f, + 0.700568794f, 0.713584869f, + 0.699473345f, 0.714658688f, + 0.698376249f, 0.715730825f, + 0.697277511f, 0.716801279f, + 0.696177131f, 0.717870045f, + 0.695075114f, 0.718937122f, + 0.693971461f, 0.720002508f, + 0.692866175f, 0.721066199f, + 0.691759258f, 0.722128194f, + 0.690650714f, 0.723188489f, + 0.689540545f, 0.724247083f, + 0.688428753f, 0.725303972f, + 0.687315341f, 0.726359155f, + 0.686200312f, 0.727412629f, + 0.685083668f, 0.728464390f, + 0.683965412f, 0.729514438f, + 0.682845546f, 0.730562769f, + 0.681724074f, 0.731609381f, + 0.680600998f, 0.732654272f, + 0.679476320f, 0.733697438f, + 0.678350043f, 0.734738878f, + 0.677222170f, 0.735778589f, + 0.676092704f, 0.736816569f, + 0.674961646f, 0.737852815f, + 0.673829000f, 0.738887324f, + 0.672694769f, 0.739920095f, + 0.671558955f, 0.740951125f, + 0.670421560f, 0.741980412f, + 0.669282588f, 0.743007952f, + 0.668142041f, 0.744033744f, + 0.666999922f, 0.745057785f, + 0.665856234f, 0.746080074f, + 0.664710978f, 0.747100606f, + 0.663564159f, 0.748119380f, + 0.662415778f, 0.749136395f, + 0.661265838f, 0.750151646f, + 0.660114342f, 0.751165132f, + 0.658961293f, 0.752176850f, + 0.657806693f, 0.753186799f, + 0.656650546f, 0.754194975f, + 0.655492853f, 0.755201377f, + 0.654333618f, 0.756206001f, + 0.653172843f, 0.757208847f, + 0.652010531f, 0.758209910f, + 0.650846685f, 0.759209189f, + 0.649681307f, 0.760206682f, + 0.648514401f, 0.761202385f, + 0.647345969f, 0.762196298f, + 0.646176013f, 0.763188417f, + 0.645004537f, 0.764178741f, + 0.643831543f, 0.765167266f, + 0.642657034f, 0.766153990f, + 0.641481013f, 0.767138912f, + 0.640303482f, 0.768122029f, + 0.639124445f, 0.769103338f, + 0.637943904f, 0.770082837f, + 0.636761861f, 0.771060524f, + 0.635578320f, 0.772036397f, + 0.634393284f, 0.773010453f, + 0.633206755f, 0.773982691f, + 0.632018736f, 0.774953107f, + 0.630829230f, 0.775921699f, + 0.629638239f, 0.776888466f, + 0.628445767f, 0.777853404f, + 0.627251815f, 0.778816512f, + 0.626056388f, 0.779777788f, + 0.624859488f, 0.780737229f, + 0.623661118f, 0.781694832f, + 0.622461279f, 0.782650596f, + 0.621259977f, 0.783604519f, + 0.620057212f, 0.784556597f, + 0.618852988f, 0.785506830f, + 0.617647308f, 0.786455214f, + 0.616440175f, 0.787401747f, + 0.615231591f, 0.788346428f, + 0.614021559f, 0.789289253f, + 0.612810082f, 0.790230221f, + 0.611597164f, 0.791169330f, + 0.610382806f, 0.792106577f, + 0.609167012f, 0.793041960f, + 0.607949785f, 0.793975478f, + 0.606731127f, 0.794907126f, + 0.605511041f, 0.795836905f, + 0.604289531f, 0.796764810f, + 0.603066599f, 0.797690841f, + 0.601842247f, 0.798614995f, + 0.600616479f, 0.799537269f, + 0.599389298f, 0.800457662f, + 0.598160707f, 0.801376172f, + 0.596930708f, 0.802292796f, + 0.595699304f, 0.803207531f, + 0.594466499f, 0.804120377f, + 0.593232295f, 0.805031331f, + 0.591996695f, 0.805940391f, + 0.590759702f, 0.806847554f, + 0.589521319f, 0.807752818f, + 0.588281548f, 0.808656182f, + 0.587040394f, 0.809557642f, + 0.585797857f, 0.810457198f, + 0.584553943f, 0.811354847f, + 0.583308653f, 0.812250587f, + 0.582061990f, 0.813144415f, + 0.580813958f, 0.814036330f, + 0.579564559f, 0.814926329f, + 0.578313796f, 0.815814411f, + 0.577061673f, 0.816700573f, + 0.575808191f, 0.817584813f, + 0.574553355f, 0.818467130f, + 0.573297167f, 0.819347520f, + 0.572039629f, 0.820225983f, + 0.570780746f, 0.821102515f, + 0.569520519f, 0.821977115f, + 0.568258953f, 0.822849781f, + 0.566996049f, 0.823720511f, + 0.565731811f, 0.824589303f, + 0.564466242f, 0.825456154f, + 0.563199344f, 0.826321063f, + 0.561931121f, 0.827184027f, + 0.560661576f, 0.828045045f, + 0.559390712f, 0.828904115f, + 0.558118531f, 0.829761234f, + 0.556845037f, 0.830616400f, + 0.555570233f, 0.831469612f, + 0.554294121f, 0.832320868f, + 0.553016706f, 0.833170165f, + 0.551737988f, 0.834017501f, + 0.550457973f, 0.834862875f, + 0.549176662f, 0.835706284f, + 0.547894059f, 0.836547727f, + 0.546610167f, 0.837387202f, + 0.545324988f, 0.838224706f, + 0.544038527f, 0.839060237f, + 0.542750785f, 0.839893794f, + 0.541461766f, 0.840725375f, + 0.540171473f, 0.841554977f, + 0.538879909f, 0.842382600f, + 0.537587076f, 0.843208240f, + 0.536292979f, 0.844031895f, + 0.534997620f, 0.844853565f, + 0.533701002f, 0.845673247f, + 0.532403128f, 0.846490939f, + 0.531104001f, 0.847306639f, + 0.529803625f, 0.848120345f, + 0.528502002f, 0.848932055f, + 0.527199135f, 0.849741768f, + 0.525895027f, 0.850549481f, + 0.524589683f, 0.851355193f, + 0.523283103f, 0.852158902f, + 0.521975293f, 0.852960605f, + 0.520666254f, 0.853760301f, + 0.519355990f, 0.854557988f, + 0.518044504f, 0.855353665f, + 0.516731799f, 0.856147328f, + 0.515417878f, 0.856938977f, + 0.514102744f, 0.857728610f, + 0.512786401f, 0.858516224f, + 0.511468850f, 0.859301818f, + 0.510150097f, 0.860085390f, + 0.508830143f, 0.860866939f, + 0.507508991f, 0.861646461f, + 0.506186645f, 0.862423956f, + 0.504863109f, 0.863199422f, + 0.503538384f, 0.863972856f, + 0.502212474f, 0.864744258f, + 0.500885383f, 0.865513624f, + 0.499557113f, 0.866280954f, + 0.498227667f, 0.867046246f, + 0.496897049f, 0.867809497f, + 0.495565262f, 0.868570706f, + 0.494232309f, 0.869329871f, + 0.492898192f, 0.870086991f, + 0.491562916f, 0.870842063f, + 0.490226483f, 0.871595087f, + 0.488888897f, 0.872346059f, + 0.487550160f, 0.873094978f, + 0.486210276f, 0.873841843f, + 0.484869248f, 0.874586652f, + 0.483527079f, 0.875329403f, + 0.482183772f, 0.876070094f, + 0.480839331f, 0.876808724f, + 0.479493758f, 0.877545290f, + 0.478147056f, 0.878279792f, + 0.476799230f, 0.879012226f, + 0.475450282f, 0.879742593f, + 0.474100215f, 0.880470889f, + 0.472749032f, 0.881197113f, + 0.471396737f, 0.881921264f, + 0.470043332f, 0.882643340f, + 0.468688822f, 0.883363339f, + 0.467333209f, 0.884081259f, + 0.465976496f, 0.884797098f, + 0.464618686f, 0.885510856f, + 0.463259784f, 0.886222530f, + 0.461899791f, 0.886932119f, + 0.460538711f, 0.887639620f, + 0.459176548f, 0.888345033f, + 0.457813304f, 0.889048356f, + 0.456448982f, 0.889749586f, + 0.455083587f, 0.890448723f, + 0.453717121f, 0.891145765f, + 0.452349587f, 0.891840709f, + 0.450980989f, 0.892533555f, + 0.449611330f, 0.893224301f, + 0.448240612f, 0.893912945f, + 0.446868840f, 0.894599486f, + 0.445496017f, 0.895283921f, + 0.444122145f, 0.895966250f, + 0.442747228f, 0.896646470f, + 0.441371269f, 0.897324581f, + 0.439994271f, 0.898000580f, + 0.438616239f, 0.898674466f, + 0.437237174f, 0.899346237f, + 0.435857080f, 0.900015892f, + 0.434475961f, 0.900683429f, + 0.433093819f, 0.901348847f, + 0.431710658f, 0.902012144f, + 0.430326481f, 0.902673318f, + 0.428941292f, 0.903332368f, + 0.427555093f, 0.903989293f, + 0.426167889f, 0.904644091f, + 0.424779681f, 0.905296759f, + 0.423390474f, 0.905947298f, + 0.422000271f, 0.906595705f, + 0.420609074f, 0.907241978f, + 0.419216888f, 0.907886116f, + 0.417823716f, 0.908528119f, + 0.416429560f, 0.909167983f, + 0.415034424f, 0.909805708f, + 0.413638312f, 0.910441292f, + 0.412241227f, 0.911074734f, + 0.410843171f, 0.911706032f, + 0.409444149f, 0.912335185f, + 0.408044163f, 0.912962190f, + 0.406643217f, 0.913587048f, + 0.405241314f, 0.914209756f, + 0.403838458f, 0.914830312f, + 0.402434651f, 0.915448716f, + 0.401029897f, 0.916064966f, + 0.399624200f, 0.916679060f, + 0.398217562f, 0.917290997f, + 0.396809987f, 0.917900776f, + 0.395401479f, 0.918508394f, + 0.393992040f, 0.919113852f, + 0.392581674f, 0.919717146f, + 0.391170384f, 0.920318277f, + 0.389758174f, 0.920917242f, + 0.388345047f, 0.921514039f, + 0.386931006f, 0.922108669f, + 0.385516054f, 0.922701128f, + 0.384100195f, 0.923291417f, + 0.382683432f, 0.923879533f, + 0.381265769f, 0.924465474f, + 0.379847209f, 0.925049241f, + 0.378427755f, 0.925630831f, + 0.377007410f, 0.926210242f, + 0.375586178f, 0.926787474f, + 0.374164063f, 0.927362526f, + 0.372741067f, 0.927935395f, + 0.371317194f, 0.928506080f, + 0.369892447f, 0.929074581f, + 0.368466830f, 0.929640896f, + 0.367040346f, 0.930205023f, + 0.365612998f, 0.930766961f, + 0.364184790f, 0.931326709f, + 0.362755724f, 0.931884266f, + 0.361325806f, 0.932439629f, + 0.359895037f, 0.932992799f, + 0.358463421f, 0.933543773f, + 0.357030961f, 0.934092550f, + 0.355597662f, 0.934639130f, + 0.354163525f, 0.935183510f, + 0.352728556f, 0.935725689f, + 0.351292756f, 0.936265667f, + 0.349856130f, 0.936803442f, + 0.348418680f, 0.937339012f, + 0.346980411f, 0.937872376f, + 0.345541325f, 0.938403534f, + 0.344101426f, 0.938932484f, + 0.342660717f, 0.939459224f, + 0.341219202f, 0.939983753f, + 0.339776884f, 0.940506071f, + 0.338333767f, 0.941026175f, + 0.336889853f, 0.941544065f, + 0.335445147f, 0.942059740f, + 0.333999651f, 0.942573198f, + 0.332553370f, 0.943084437f, + 0.331106306f, 0.943593458f, + 0.329658463f, 0.944100258f, + 0.328209844f, 0.944604837f, + 0.326760452f, 0.945107193f, + 0.325310292f, 0.945607325f, + 0.323859367f, 0.946105232f, + 0.322407679f, 0.946600913f, + 0.320955232f, 0.947094366f, + 0.319502031f, 0.947585591f, + 0.318048077f, 0.948074586f, + 0.316593376f, 0.948561350f, + 0.315137929f, 0.949045882f, + 0.313681740f, 0.949528181f, + 0.312224814f, 0.950008245f, + 0.310767153f, 0.950486074f, + 0.309308760f, 0.950961666f, + 0.307849640f, 0.951435021f, + 0.306389795f, 0.951906137f, + 0.304929230f, 0.952375013f, + 0.303467947f, 0.952841648f, + 0.302005949f, 0.953306040f, + 0.300543241f, 0.953768190f, + 0.299079826f, 0.954228095f, + 0.297615707f, 0.954685755f, + 0.296150888f, 0.955141168f, + 0.294685372f, 0.955594334f, + 0.293219163f, 0.956045251f, + 0.291752263f, 0.956493919f, + 0.290284677f, 0.956940336f, + 0.288816408f, 0.957384501f, + 0.287347460f, 0.957826413f, + 0.285877835f, 0.958266071f, + 0.284407537f, 0.958703475f, + 0.282936570f, 0.959138622f, + 0.281464938f, 0.959571513f, + 0.279992643f, 0.960002146f, + 0.278519689f, 0.960430519f, + 0.277046080f, 0.960856633f, + 0.275571819f, 0.961280486f, + 0.274096910f, 0.961702077f, + 0.272621355f, 0.962121404f, + 0.271145160f, 0.962538468f, + 0.269668326f, 0.962953267f, + 0.268190857f, 0.963365800f, + 0.266712757f, 0.963776066f, + 0.265234030f, 0.964184064f, + 0.263754679f, 0.964589793f, + 0.262274707f, 0.964993253f, + 0.260794118f, 0.965394442f, + 0.259312915f, 0.965793359f, + 0.257831102f, 0.966190003f, + 0.256348682f, 0.966584374f, + 0.254865660f, 0.966976471f, + 0.253382037f, 0.967366292f, + 0.251897818f, 0.967753837f, + 0.250413007f, 0.968139105f, + 0.248927606f, 0.968522094f, + 0.247441619f, 0.968902805f, + 0.245955050f, 0.969281235f, + 0.244467903f, 0.969657385f, + 0.242980180f, 0.970031253f, + 0.241491885f, 0.970402839f, + 0.240003022f, 0.970772141f, + 0.238513595f, 0.971139158f, + 0.237023606f, 0.971503891f, + 0.235533059f, 0.971866337f, + 0.234041959f, 0.972226497f, + 0.232550307f, 0.972584369f, + 0.231058108f, 0.972939952f, + 0.229565366f, 0.973293246f, + 0.228072083f, 0.973644250f, + 0.226578264f, 0.973992962f, + 0.225083911f, 0.974339383f, + 0.223589029f, 0.974683511f, + 0.222093621f, 0.975025345f, + 0.220597690f, 0.975364885f, + 0.219101240f, 0.975702130f, + 0.217604275f, 0.976037079f, + 0.216106797f, 0.976369731f, + 0.214608811f, 0.976700086f, + 0.213110320f, 0.977028143f, + 0.211611327f, 0.977353900f, + 0.210111837f, 0.977677358f, + 0.208611852f, 0.977998515f, + 0.207111376f, 0.978317371f, + 0.205610413f, 0.978633924f, + 0.204108966f, 0.978948175f, + 0.202607039f, 0.979260123f, + 0.201104635f, 0.979569766f, + 0.199601758f, 0.979877104f, + 0.198098411f, 0.980182136f, + 0.196594598f, 0.980484862f, + 0.195090322f, 0.980785280f, + 0.193585587f, 0.981083391f, + 0.192080397f, 0.981379193f, + 0.190574755f, 0.981672686f, + 0.189068664f, 0.981963869f, + 0.187562129f, 0.982252741f, + 0.186055152f, 0.982539302f, + 0.184547737f, 0.982823551f, + 0.183039888f, 0.983105487f, + 0.181531608f, 0.983385110f, + 0.180022901f, 0.983662419f, + 0.178513771f, 0.983937413f, + 0.177004220f, 0.984210092f, + 0.175494253f, 0.984480455f, + 0.173983873f, 0.984748502f, + 0.172473084f, 0.985014231f, + 0.170961889f, 0.985277642f, + 0.169450291f, 0.985538735f, + 0.167938295f, 0.985797509f, + 0.166425904f, 0.986053963f, + 0.164913120f, 0.986308097f, + 0.163399949f, 0.986559910f, + 0.161886394f, 0.986809402f, + 0.160372457f, 0.987056571f, + 0.158858143f, 0.987301418f, + 0.157343456f, 0.987543942f, + 0.155828398f, 0.987784142f, + 0.154312973f, 0.988022017f, + 0.152797185f, 0.988257568f, + 0.151281038f, 0.988490793f, + 0.149764535f, 0.988721692f, + 0.148247679f, 0.988950265f, + 0.146730474f, 0.989176510f, + 0.145212925f, 0.989400428f, + 0.143695033f, 0.989622017f, + 0.142176804f, 0.989841278f, + 0.140658239f, 0.990058210f, + 0.139139344f, 0.990272812f, + 0.137620122f, 0.990485084f, + 0.136100575f, 0.990695025f, + 0.134580709f, 0.990902635f, + 0.133060525f, 0.991107914f, + 0.131540029f, 0.991310860f, + 0.130019223f, 0.991511473f, + 0.128498111f, 0.991709754f, + 0.126976696f, 0.991905700f, + 0.125454983f, 0.992099313f, + 0.123932975f, 0.992290591f, + 0.122410675f, 0.992479535f, + 0.120888087f, 0.992666142f, + 0.119365215f, 0.992850414f, + 0.117842062f, 0.993032350f, + 0.116318631f, 0.993211949f, + 0.114794927f, 0.993389211f, + 0.113270952f, 0.993564136f, + 0.111746711f, 0.993736722f, + 0.110222207f, 0.993906970f, + 0.108697444f, 0.994074879f, + 0.107172425f, 0.994240449f, + 0.105647154f, 0.994403680f, + 0.104121634f, 0.994564571f, + 0.102595869f, 0.994723121f, + 0.101069863f, 0.994879331f, + 0.099543619f, 0.995033199f, + 0.098017140f, 0.995184727f, + 0.096490431f, 0.995333912f, + 0.094963495f, 0.995480755f, + 0.093436336f, 0.995625256f, + 0.091908956f, 0.995767414f, + 0.090381361f, 0.995907229f, + 0.088853553f, 0.996044701f, + 0.087325535f, 0.996179829f, + 0.085797312f, 0.996312612f, + 0.084268888f, 0.996443051f, + 0.082740265f, 0.996571146f, + 0.081211447f, 0.996696895f, + 0.079682438f, 0.996820299f, + 0.078153242f, 0.996941358f, + 0.076623861f, 0.997060070f, + 0.075094301f, 0.997176437f, + 0.073564564f, 0.997290457f, + 0.072034653f, 0.997402130f, + 0.070504573f, 0.997511456f, + 0.068974328f, 0.997618435f, + 0.067443920f, 0.997723067f, + 0.065913353f, 0.997825350f, + 0.064382631f, 0.997925286f, + 0.062851758f, 0.998022874f, + 0.061320736f, 0.998118113f, + 0.059789571f, 0.998211003f, + 0.058258265f, 0.998301545f, + 0.056726821f, 0.998389737f, + 0.055195244f, 0.998475581f, + 0.053663538f, 0.998559074f, + 0.052131705f, 0.998640218f, + 0.050599749f, 0.998719012f, + 0.049067674f, 0.998795456f, + 0.047535484f, 0.998869550f, + 0.046003182f, 0.998941293f, + 0.044470772f, 0.999010686f, + 0.042938257f, 0.999077728f, + 0.041405641f, 0.999142419f, + 0.039872928f, 0.999204759f, + 0.038340120f, 0.999264747f, + 0.036807223f, 0.999322385f, + 0.035274239f, 0.999377670f, + 0.033741172f, 0.999430605f, + 0.032208025f, 0.999481187f, + 0.030674803f, 0.999529418f, + 0.029141509f, 0.999575296f, + 0.027608146f, 0.999618822f, + 0.026074718f, 0.999659997f, + 0.024541229f, 0.999698819f, + 0.023007681f, 0.999735288f, + 0.021474080f, 0.999769405f, + 0.019940429f, 0.999801170f, + 0.018406730f, 0.999830582f, + 0.016872988f, 0.999857641f, + 0.015339206f, 0.999882347f, + 0.013805389f, 0.999904701f, + 0.012271538f, 0.999924702f, + 0.010737659f, 0.999942350f, + 0.009203755f, 0.999957645f, + 0.007669829f, 0.999970586f, + 0.006135885f, 0.999981175f, + 0.004601926f, 0.999989411f, + 0.003067957f, 0.999995294f, + 0.001533980f, 0.999998823f, + 0.000000000f, 1.000000000f, + -0.001533980f, 0.999998823f, + -0.003067957f, 0.999995294f, + -0.004601926f, 0.999989411f, + -0.006135885f, 0.999981175f, + -0.007669829f, 0.999970586f, + -0.009203755f, 0.999957645f, + -0.010737659f, 0.999942350f, + -0.012271538f, 0.999924702f, + -0.013805389f, 0.999904701f, + -0.015339206f, 0.999882347f, + -0.016872988f, 0.999857641f, + -0.018406730f, 0.999830582f, + -0.019940429f, 0.999801170f, + -0.021474080f, 0.999769405f, + -0.023007681f, 0.999735288f, + -0.024541229f, 0.999698819f, + -0.026074718f, 0.999659997f, + -0.027608146f, 0.999618822f, + -0.029141509f, 0.999575296f, + -0.030674803f, 0.999529418f, + -0.032208025f, 0.999481187f, + -0.033741172f, 0.999430605f, + -0.035274239f, 0.999377670f, + -0.036807223f, 0.999322385f, + -0.038340120f, 0.999264747f, + -0.039872928f, 0.999204759f, + -0.041405641f, 0.999142419f, + -0.042938257f, 0.999077728f, + -0.044470772f, 0.999010686f, + -0.046003182f, 0.998941293f, + -0.047535484f, 0.998869550f, + -0.049067674f, 0.998795456f, + -0.050599749f, 0.998719012f, + -0.052131705f, 0.998640218f, + -0.053663538f, 0.998559074f, + -0.055195244f, 0.998475581f, + -0.056726821f, 0.998389737f, + -0.058258265f, 0.998301545f, + -0.059789571f, 0.998211003f, + -0.061320736f, 0.998118113f, + -0.062851758f, 0.998022874f, + -0.064382631f, 0.997925286f, + -0.065913353f, 0.997825350f, + -0.067443920f, 0.997723067f, + -0.068974328f, 0.997618435f, + -0.070504573f, 0.997511456f, + -0.072034653f, 0.997402130f, + -0.073564564f, 0.997290457f, + -0.075094301f, 0.997176437f, + -0.076623861f, 0.997060070f, + -0.078153242f, 0.996941358f, + -0.079682438f, 0.996820299f, + -0.081211447f, 0.996696895f, + -0.082740265f, 0.996571146f, + -0.084268888f, 0.996443051f, + -0.085797312f, 0.996312612f, + -0.087325535f, 0.996179829f, + -0.088853553f, 0.996044701f, + -0.090381361f, 0.995907229f, + -0.091908956f, 0.995767414f, + -0.093436336f, 0.995625256f, + -0.094963495f, 0.995480755f, + -0.096490431f, 0.995333912f, + -0.098017140f, 0.995184727f, + -0.099543619f, 0.995033199f, + -0.101069863f, 0.994879331f, + -0.102595869f, 0.994723121f, + -0.104121634f, 0.994564571f, + -0.105647154f, 0.994403680f, + -0.107172425f, 0.994240449f, + -0.108697444f, 0.994074879f, + -0.110222207f, 0.993906970f, + -0.111746711f, 0.993736722f, + -0.113270952f, 0.993564136f, + -0.114794927f, 0.993389211f, + -0.116318631f, 0.993211949f, + -0.117842062f, 0.993032350f, + -0.119365215f, 0.992850414f, + -0.120888087f, 0.992666142f, + -0.122410675f, 0.992479535f, + -0.123932975f, 0.992290591f, + -0.125454983f, 0.992099313f, + -0.126976696f, 0.991905700f, + -0.128498111f, 0.991709754f, + -0.130019223f, 0.991511473f, + -0.131540029f, 0.991310860f, + -0.133060525f, 0.991107914f, + -0.134580709f, 0.990902635f, + -0.136100575f, 0.990695025f, + -0.137620122f, 0.990485084f, + -0.139139344f, 0.990272812f, + -0.140658239f, 0.990058210f, + -0.142176804f, 0.989841278f, + -0.143695033f, 0.989622017f, + -0.145212925f, 0.989400428f, + -0.146730474f, 0.989176510f, + -0.148247679f, 0.988950265f, + -0.149764535f, 0.988721692f, + -0.151281038f, 0.988490793f, + -0.152797185f, 0.988257568f, + -0.154312973f, 0.988022017f, + -0.155828398f, 0.987784142f, + -0.157343456f, 0.987543942f, + -0.158858143f, 0.987301418f, + -0.160372457f, 0.987056571f, + -0.161886394f, 0.986809402f, + -0.163399949f, 0.986559910f, + -0.164913120f, 0.986308097f, + -0.166425904f, 0.986053963f, + -0.167938295f, 0.985797509f, + -0.169450291f, 0.985538735f, + -0.170961889f, 0.985277642f, + -0.172473084f, 0.985014231f, + -0.173983873f, 0.984748502f, + -0.175494253f, 0.984480455f, + -0.177004220f, 0.984210092f, + -0.178513771f, 0.983937413f, + -0.180022901f, 0.983662419f, + -0.181531608f, 0.983385110f, + -0.183039888f, 0.983105487f, + -0.184547737f, 0.982823551f, + -0.186055152f, 0.982539302f, + -0.187562129f, 0.982252741f, + -0.189068664f, 0.981963869f, + -0.190574755f, 0.981672686f, + -0.192080397f, 0.981379193f, + -0.193585587f, 0.981083391f, + -0.195090322f, 0.980785280f, + -0.196594598f, 0.980484862f, + -0.198098411f, 0.980182136f, + -0.199601758f, 0.979877104f, + -0.201104635f, 0.979569766f, + -0.202607039f, 0.979260123f, + -0.204108966f, 0.978948175f, + -0.205610413f, 0.978633924f, + -0.207111376f, 0.978317371f, + -0.208611852f, 0.977998515f, + -0.210111837f, 0.977677358f, + -0.211611327f, 0.977353900f, + -0.213110320f, 0.977028143f, + -0.214608811f, 0.976700086f, + -0.216106797f, 0.976369731f, + -0.217604275f, 0.976037079f, + -0.219101240f, 0.975702130f, + -0.220597690f, 0.975364885f, + -0.222093621f, 0.975025345f, + -0.223589029f, 0.974683511f, + -0.225083911f, 0.974339383f, + -0.226578264f, 0.973992962f, + -0.228072083f, 0.973644250f, + -0.229565366f, 0.973293246f, + -0.231058108f, 0.972939952f, + -0.232550307f, 0.972584369f, + -0.234041959f, 0.972226497f, + -0.235533059f, 0.971866337f, + -0.237023606f, 0.971503891f, + -0.238513595f, 0.971139158f, + -0.240003022f, 0.970772141f, + -0.241491885f, 0.970402839f, + -0.242980180f, 0.970031253f, + -0.244467903f, 0.969657385f, + -0.245955050f, 0.969281235f, + -0.247441619f, 0.968902805f, + -0.248927606f, 0.968522094f, + -0.250413007f, 0.968139105f, + -0.251897818f, 0.967753837f, + -0.253382037f, 0.967366292f, + -0.254865660f, 0.966976471f, + -0.256348682f, 0.966584374f, + -0.257831102f, 0.966190003f, + -0.259312915f, 0.965793359f, + -0.260794118f, 0.965394442f, + -0.262274707f, 0.964993253f, + -0.263754679f, 0.964589793f, + -0.265234030f, 0.964184064f, + -0.266712757f, 0.963776066f, + -0.268190857f, 0.963365800f, + -0.269668326f, 0.962953267f, + -0.271145160f, 0.962538468f, + -0.272621355f, 0.962121404f, + -0.274096910f, 0.961702077f, + -0.275571819f, 0.961280486f, + -0.277046080f, 0.960856633f, + -0.278519689f, 0.960430519f, + -0.279992643f, 0.960002146f, + -0.281464938f, 0.959571513f, + -0.282936570f, 0.959138622f, + -0.284407537f, 0.958703475f, + -0.285877835f, 0.958266071f, + -0.287347460f, 0.957826413f, + -0.288816408f, 0.957384501f, + -0.290284677f, 0.956940336f, + -0.291752263f, 0.956493919f, + -0.293219163f, 0.956045251f, + -0.294685372f, 0.955594334f, + -0.296150888f, 0.955141168f, + -0.297615707f, 0.954685755f, + -0.299079826f, 0.954228095f, + -0.300543241f, 0.953768190f, + -0.302005949f, 0.953306040f, + -0.303467947f, 0.952841648f, + -0.304929230f, 0.952375013f, + -0.306389795f, 0.951906137f, + -0.307849640f, 0.951435021f, + -0.309308760f, 0.950961666f, + -0.310767153f, 0.950486074f, + -0.312224814f, 0.950008245f, + -0.313681740f, 0.949528181f, + -0.315137929f, 0.949045882f, + -0.316593376f, 0.948561350f, + -0.318048077f, 0.948074586f, + -0.319502031f, 0.947585591f, + -0.320955232f, 0.947094366f, + -0.322407679f, 0.946600913f, + -0.323859367f, 0.946105232f, + -0.325310292f, 0.945607325f, + -0.326760452f, 0.945107193f, + -0.328209844f, 0.944604837f, + -0.329658463f, 0.944100258f, + -0.331106306f, 0.943593458f, + -0.332553370f, 0.943084437f, + -0.333999651f, 0.942573198f, + -0.335445147f, 0.942059740f, + -0.336889853f, 0.941544065f, + -0.338333767f, 0.941026175f, + -0.339776884f, 0.940506071f, + -0.341219202f, 0.939983753f, + -0.342660717f, 0.939459224f, + -0.344101426f, 0.938932484f, + -0.345541325f, 0.938403534f, + -0.346980411f, 0.937872376f, + -0.348418680f, 0.937339012f, + -0.349856130f, 0.936803442f, + -0.351292756f, 0.936265667f, + -0.352728556f, 0.935725689f, + -0.354163525f, 0.935183510f, + -0.355597662f, 0.934639130f, + -0.357030961f, 0.934092550f, + -0.358463421f, 0.933543773f, + -0.359895037f, 0.932992799f, + -0.361325806f, 0.932439629f, + -0.362755724f, 0.931884266f, + -0.364184790f, 0.931326709f, + -0.365612998f, 0.930766961f, + -0.367040346f, 0.930205023f, + -0.368466830f, 0.929640896f, + -0.369892447f, 0.929074581f, + -0.371317194f, 0.928506080f, + -0.372741067f, 0.927935395f, + -0.374164063f, 0.927362526f, + -0.375586178f, 0.926787474f, + -0.377007410f, 0.926210242f, + -0.378427755f, 0.925630831f, + -0.379847209f, 0.925049241f, + -0.381265769f, 0.924465474f, + -0.382683432f, 0.923879533f, + -0.384100195f, 0.923291417f, + -0.385516054f, 0.922701128f, + -0.386931006f, 0.922108669f, + -0.388345047f, 0.921514039f, + -0.389758174f, 0.920917242f, + -0.391170384f, 0.920318277f, + -0.392581674f, 0.919717146f, + -0.393992040f, 0.919113852f, + -0.395401479f, 0.918508394f, + -0.396809987f, 0.917900776f, + -0.398217562f, 0.917290997f, + -0.399624200f, 0.916679060f, + -0.401029897f, 0.916064966f, + -0.402434651f, 0.915448716f, + -0.403838458f, 0.914830312f, + -0.405241314f, 0.914209756f, + -0.406643217f, 0.913587048f, + -0.408044163f, 0.912962190f, + -0.409444149f, 0.912335185f, + -0.410843171f, 0.911706032f, + -0.412241227f, 0.911074734f, + -0.413638312f, 0.910441292f, + -0.415034424f, 0.909805708f, + -0.416429560f, 0.909167983f, + -0.417823716f, 0.908528119f, + -0.419216888f, 0.907886116f, + -0.420609074f, 0.907241978f, + -0.422000271f, 0.906595705f, + -0.423390474f, 0.905947298f, + -0.424779681f, 0.905296759f, + -0.426167889f, 0.904644091f, + -0.427555093f, 0.903989293f, + -0.428941292f, 0.903332368f, + -0.430326481f, 0.902673318f, + -0.431710658f, 0.902012144f, + -0.433093819f, 0.901348847f, + -0.434475961f, 0.900683429f, + -0.435857080f, 0.900015892f, + -0.437237174f, 0.899346237f, + -0.438616239f, 0.898674466f, + -0.439994271f, 0.898000580f, + -0.441371269f, 0.897324581f, + -0.442747228f, 0.896646470f, + -0.444122145f, 0.895966250f, + -0.445496017f, 0.895283921f, + -0.446868840f, 0.894599486f, + -0.448240612f, 0.893912945f, + -0.449611330f, 0.893224301f, + -0.450980989f, 0.892533555f, + -0.452349587f, 0.891840709f, + -0.453717121f, 0.891145765f, + -0.455083587f, 0.890448723f, + -0.456448982f, 0.889749586f, + -0.457813304f, 0.889048356f, + -0.459176548f, 0.888345033f, + -0.460538711f, 0.887639620f, + -0.461899791f, 0.886932119f, + -0.463259784f, 0.886222530f, + -0.464618686f, 0.885510856f, + -0.465976496f, 0.884797098f, + -0.467333209f, 0.884081259f, + -0.468688822f, 0.883363339f, + -0.470043332f, 0.882643340f, + -0.471396737f, 0.881921264f, + -0.472749032f, 0.881197113f, + -0.474100215f, 0.880470889f, + -0.475450282f, 0.879742593f, + -0.476799230f, 0.879012226f, + -0.478147056f, 0.878279792f, + -0.479493758f, 0.877545290f, + -0.480839331f, 0.876808724f, + -0.482183772f, 0.876070094f, + -0.483527079f, 0.875329403f, + -0.484869248f, 0.874586652f, + -0.486210276f, 0.873841843f, + -0.487550160f, 0.873094978f, + -0.488888897f, 0.872346059f, + -0.490226483f, 0.871595087f, + -0.491562916f, 0.870842063f, + -0.492898192f, 0.870086991f, + -0.494232309f, 0.869329871f, + -0.495565262f, 0.868570706f, + -0.496897049f, 0.867809497f, + -0.498227667f, 0.867046246f, + -0.499557113f, 0.866280954f, + -0.500885383f, 0.865513624f, + -0.502212474f, 0.864744258f, + -0.503538384f, 0.863972856f, + -0.504863109f, 0.863199422f, + -0.506186645f, 0.862423956f, + -0.507508991f, 0.861646461f, + -0.508830143f, 0.860866939f, + -0.510150097f, 0.860085390f, + -0.511468850f, 0.859301818f, + -0.512786401f, 0.858516224f, + -0.514102744f, 0.857728610f, + -0.515417878f, 0.856938977f, + -0.516731799f, 0.856147328f, + -0.518044504f, 0.855353665f, + -0.519355990f, 0.854557988f, + -0.520666254f, 0.853760301f, + -0.521975293f, 0.852960605f, + -0.523283103f, 0.852158902f, + -0.524589683f, 0.851355193f, + -0.525895027f, 0.850549481f, + -0.527199135f, 0.849741768f, + -0.528502002f, 0.848932055f, + -0.529803625f, 0.848120345f, + -0.531104001f, 0.847306639f, + -0.532403128f, 0.846490939f, + -0.533701002f, 0.845673247f, + -0.534997620f, 0.844853565f, + -0.536292979f, 0.844031895f, + -0.537587076f, 0.843208240f, + -0.538879909f, 0.842382600f, + -0.540171473f, 0.841554977f, + -0.541461766f, 0.840725375f, + -0.542750785f, 0.839893794f, + -0.544038527f, 0.839060237f, + -0.545324988f, 0.838224706f, + -0.546610167f, 0.837387202f, + -0.547894059f, 0.836547727f, + -0.549176662f, 0.835706284f, + -0.550457973f, 0.834862875f, + -0.551737988f, 0.834017501f, + -0.553016706f, 0.833170165f, + -0.554294121f, 0.832320868f, + -0.555570233f, 0.831469612f, + -0.556845037f, 0.830616400f, + -0.558118531f, 0.829761234f, + -0.559390712f, 0.828904115f, + -0.560661576f, 0.828045045f, + -0.561931121f, 0.827184027f, + -0.563199344f, 0.826321063f, + -0.564466242f, 0.825456154f, + -0.565731811f, 0.824589303f, + -0.566996049f, 0.823720511f, + -0.568258953f, 0.822849781f, + -0.569520519f, 0.821977115f, + -0.570780746f, 0.821102515f, + -0.572039629f, 0.820225983f, + -0.573297167f, 0.819347520f, + -0.574553355f, 0.818467130f, + -0.575808191f, 0.817584813f, + -0.577061673f, 0.816700573f, + -0.578313796f, 0.815814411f, + -0.579564559f, 0.814926329f, + -0.580813958f, 0.814036330f, + -0.582061990f, 0.813144415f, + -0.583308653f, 0.812250587f, + -0.584553943f, 0.811354847f, + -0.585797857f, 0.810457198f, + -0.587040394f, 0.809557642f, + -0.588281548f, 0.808656182f, + -0.589521319f, 0.807752818f, + -0.590759702f, 0.806847554f, + -0.591996695f, 0.805940391f, + -0.593232295f, 0.805031331f, + -0.594466499f, 0.804120377f, + -0.595699304f, 0.803207531f, + -0.596930708f, 0.802292796f, + -0.598160707f, 0.801376172f, + -0.599389298f, 0.800457662f, + -0.600616479f, 0.799537269f, + -0.601842247f, 0.798614995f, + -0.603066599f, 0.797690841f, + -0.604289531f, 0.796764810f, + -0.605511041f, 0.795836905f, + -0.606731127f, 0.794907126f, + -0.607949785f, 0.793975478f, + -0.609167012f, 0.793041960f, + -0.610382806f, 0.792106577f, + -0.611597164f, 0.791169330f, + -0.612810082f, 0.790230221f, + -0.614021559f, 0.789289253f, + -0.615231591f, 0.788346428f, + -0.616440175f, 0.787401747f, + -0.617647308f, 0.786455214f, + -0.618852988f, 0.785506830f, + -0.620057212f, 0.784556597f, + -0.621259977f, 0.783604519f, + -0.622461279f, 0.782650596f, + -0.623661118f, 0.781694832f, + -0.624859488f, 0.780737229f, + -0.626056388f, 0.779777788f, + -0.627251815f, 0.778816512f, + -0.628445767f, 0.777853404f, + -0.629638239f, 0.776888466f, + -0.630829230f, 0.775921699f, + -0.632018736f, 0.774953107f, + -0.633206755f, 0.773982691f, + -0.634393284f, 0.773010453f, + -0.635578320f, 0.772036397f, + -0.636761861f, 0.771060524f, + -0.637943904f, 0.770082837f, + -0.639124445f, 0.769103338f, + -0.640303482f, 0.768122029f, + -0.641481013f, 0.767138912f, + -0.642657034f, 0.766153990f, + -0.643831543f, 0.765167266f, + -0.645004537f, 0.764178741f, + -0.646176013f, 0.763188417f, + -0.647345969f, 0.762196298f, + -0.648514401f, 0.761202385f, + -0.649681307f, 0.760206682f, + -0.650846685f, 0.759209189f, + -0.652010531f, 0.758209910f, + -0.653172843f, 0.757208847f, + -0.654333618f, 0.756206001f, + -0.655492853f, 0.755201377f, + -0.656650546f, 0.754194975f, + -0.657806693f, 0.753186799f, + -0.658961293f, 0.752176850f, + -0.660114342f, 0.751165132f, + -0.661265838f, 0.750151646f, + -0.662415778f, 0.749136395f, + -0.663564159f, 0.748119380f, + -0.664710978f, 0.747100606f, + -0.665856234f, 0.746080074f, + -0.666999922f, 0.745057785f, + -0.668142041f, 0.744033744f, + -0.669282588f, 0.743007952f, + -0.670421560f, 0.741980412f, + -0.671558955f, 0.740951125f, + -0.672694769f, 0.739920095f, + -0.673829000f, 0.738887324f, + -0.674961646f, 0.737852815f, + -0.676092704f, 0.736816569f, + -0.677222170f, 0.735778589f, + -0.678350043f, 0.734738878f, + -0.679476320f, 0.733697438f, + -0.680600998f, 0.732654272f, + -0.681724074f, 0.731609381f, + -0.682845546f, 0.730562769f, + -0.683965412f, 0.729514438f, + -0.685083668f, 0.728464390f, + -0.686200312f, 0.727412629f, + -0.687315341f, 0.726359155f, + -0.688428753f, 0.725303972f, + -0.689540545f, 0.724247083f, + -0.690650714f, 0.723188489f, + -0.691759258f, 0.722128194f, + -0.692866175f, 0.721066199f, + -0.693971461f, 0.720002508f, + -0.695075114f, 0.718937122f, + -0.696177131f, 0.717870045f, + -0.697277511f, 0.716801279f, + -0.698376249f, 0.715730825f, + -0.699473345f, 0.714658688f, + -0.700568794f, 0.713584869f, + -0.701662595f, 0.712509371f, + -0.702754744f, 0.711432196f, + -0.703845241f, 0.710353347f, + -0.704934080f, 0.709272826f, + -0.706021261f, 0.708190637f, + -0.707106781f, 0.707106781f, + -0.708190637f, 0.706021261f, + -0.709272826f, 0.704934080f, + -0.710353347f, 0.703845241f, + -0.711432196f, 0.702754744f, + -0.712509371f, 0.701662595f, + -0.713584869f, 0.700568794f, + -0.714658688f, 0.699473345f, + -0.715730825f, 0.698376249f, + -0.716801279f, 0.697277511f, + -0.717870045f, 0.696177131f, + -0.718937122f, 0.695075114f, + -0.720002508f, 0.693971461f, + -0.721066199f, 0.692866175f, + -0.722128194f, 0.691759258f, + -0.723188489f, 0.690650714f, + -0.724247083f, 0.689540545f, + -0.725303972f, 0.688428753f, + -0.726359155f, 0.687315341f, + -0.727412629f, 0.686200312f, + -0.728464390f, 0.685083668f, + -0.729514438f, 0.683965412f, + -0.730562769f, 0.682845546f, + -0.731609381f, 0.681724074f, + -0.732654272f, 0.680600998f, + -0.733697438f, 0.679476320f, + -0.734738878f, 0.678350043f, + -0.735778589f, 0.677222170f, + -0.736816569f, 0.676092704f, + -0.737852815f, 0.674961646f, + -0.738887324f, 0.673829000f, + -0.739920095f, 0.672694769f, + -0.740951125f, 0.671558955f, + -0.741980412f, 0.670421560f, + -0.743007952f, 0.669282588f, + -0.744033744f, 0.668142041f, + -0.745057785f, 0.666999922f, + -0.746080074f, 0.665856234f, + -0.747100606f, 0.664710978f, + -0.748119380f, 0.663564159f, + -0.749136395f, 0.662415778f, + -0.750151646f, 0.661265838f, + -0.751165132f, 0.660114342f, + -0.752176850f, 0.658961293f, + -0.753186799f, 0.657806693f, + -0.754194975f, 0.656650546f, + -0.755201377f, 0.655492853f, + -0.756206001f, 0.654333618f, + -0.757208847f, 0.653172843f, + -0.758209910f, 0.652010531f, + -0.759209189f, 0.650846685f, + -0.760206682f, 0.649681307f, + -0.761202385f, 0.648514401f, + -0.762196298f, 0.647345969f, + -0.763188417f, 0.646176013f, + -0.764178741f, 0.645004537f, + -0.765167266f, 0.643831543f, + -0.766153990f, 0.642657034f, + -0.767138912f, 0.641481013f, + -0.768122029f, 0.640303482f, + -0.769103338f, 0.639124445f, + -0.770082837f, 0.637943904f, + -0.771060524f, 0.636761861f, + -0.772036397f, 0.635578320f, + -0.773010453f, 0.634393284f, + -0.773982691f, 0.633206755f, + -0.774953107f, 0.632018736f, + -0.775921699f, 0.630829230f, + -0.776888466f, 0.629638239f, + -0.777853404f, 0.628445767f, + -0.778816512f, 0.627251815f, + -0.779777788f, 0.626056388f, + -0.780737229f, 0.624859488f, + -0.781694832f, 0.623661118f, + -0.782650596f, 0.622461279f, + -0.783604519f, 0.621259977f, + -0.784556597f, 0.620057212f, + -0.785506830f, 0.618852988f, + -0.786455214f, 0.617647308f, + -0.787401747f, 0.616440175f, + -0.788346428f, 0.615231591f, + -0.789289253f, 0.614021559f, + -0.790230221f, 0.612810082f, + -0.791169330f, 0.611597164f, + -0.792106577f, 0.610382806f, + -0.793041960f, 0.609167012f, + -0.793975478f, 0.607949785f, + -0.794907126f, 0.606731127f, + -0.795836905f, 0.605511041f, + -0.796764810f, 0.604289531f, + -0.797690841f, 0.603066599f, + -0.798614995f, 0.601842247f, + -0.799537269f, 0.600616479f, + -0.800457662f, 0.599389298f, + -0.801376172f, 0.598160707f, + -0.802292796f, 0.596930708f, + -0.803207531f, 0.595699304f, + -0.804120377f, 0.594466499f, + -0.805031331f, 0.593232295f, + -0.805940391f, 0.591996695f, + -0.806847554f, 0.590759702f, + -0.807752818f, 0.589521319f, + -0.808656182f, 0.588281548f, + -0.809557642f, 0.587040394f, + -0.810457198f, 0.585797857f, + -0.811354847f, 0.584553943f, + -0.812250587f, 0.583308653f, + -0.813144415f, 0.582061990f, + -0.814036330f, 0.580813958f, + -0.814926329f, 0.579564559f, + -0.815814411f, 0.578313796f, + -0.816700573f, 0.577061673f, + -0.817584813f, 0.575808191f, + -0.818467130f, 0.574553355f, + -0.819347520f, 0.573297167f, + -0.820225983f, 0.572039629f, + -0.821102515f, 0.570780746f, + -0.821977115f, 0.569520519f, + -0.822849781f, 0.568258953f, + -0.823720511f, 0.566996049f, + -0.824589303f, 0.565731811f, + -0.825456154f, 0.564466242f, + -0.826321063f, 0.563199344f, + -0.827184027f, 0.561931121f, + -0.828045045f, 0.560661576f, + -0.828904115f, 0.559390712f, + -0.829761234f, 0.558118531f, + -0.830616400f, 0.556845037f, + -0.831469612f, 0.555570233f, + -0.832320868f, 0.554294121f, + -0.833170165f, 0.553016706f, + -0.834017501f, 0.551737988f, + -0.834862875f, 0.550457973f, + -0.835706284f, 0.549176662f, + -0.836547727f, 0.547894059f, + -0.837387202f, 0.546610167f, + -0.838224706f, 0.545324988f, + -0.839060237f, 0.544038527f, + -0.839893794f, 0.542750785f, + -0.840725375f, 0.541461766f, + -0.841554977f, 0.540171473f, + -0.842382600f, 0.538879909f, + -0.843208240f, 0.537587076f, + -0.844031895f, 0.536292979f, + -0.844853565f, 0.534997620f, + -0.845673247f, 0.533701002f, + -0.846490939f, 0.532403128f, + -0.847306639f, 0.531104001f, + -0.848120345f, 0.529803625f, + -0.848932055f, 0.528502002f, + -0.849741768f, 0.527199135f, + -0.850549481f, 0.525895027f, + -0.851355193f, 0.524589683f, + -0.852158902f, 0.523283103f, + -0.852960605f, 0.521975293f, + -0.853760301f, 0.520666254f, + -0.854557988f, 0.519355990f, + -0.855353665f, 0.518044504f, + -0.856147328f, 0.516731799f, + -0.856938977f, 0.515417878f, + -0.857728610f, 0.514102744f, + -0.858516224f, 0.512786401f, + -0.859301818f, 0.511468850f, + -0.860085390f, 0.510150097f, + -0.860866939f, 0.508830143f, + -0.861646461f, 0.507508991f, + -0.862423956f, 0.506186645f, + -0.863199422f, 0.504863109f, + -0.863972856f, 0.503538384f, + -0.864744258f, 0.502212474f, + -0.865513624f, 0.500885383f, + -0.866280954f, 0.499557113f, + -0.867046246f, 0.498227667f, + -0.867809497f, 0.496897049f, + -0.868570706f, 0.495565262f, + -0.869329871f, 0.494232309f, + -0.870086991f, 0.492898192f, + -0.870842063f, 0.491562916f, + -0.871595087f, 0.490226483f, + -0.872346059f, 0.488888897f, + -0.873094978f, 0.487550160f, + -0.873841843f, 0.486210276f, + -0.874586652f, 0.484869248f, + -0.875329403f, 0.483527079f, + -0.876070094f, 0.482183772f, + -0.876808724f, 0.480839331f, + -0.877545290f, 0.479493758f, + -0.878279792f, 0.478147056f, + -0.879012226f, 0.476799230f, + -0.879742593f, 0.475450282f, + -0.880470889f, 0.474100215f, + -0.881197113f, 0.472749032f, + -0.881921264f, 0.471396737f, + -0.882643340f, 0.470043332f, + -0.883363339f, 0.468688822f, + -0.884081259f, 0.467333209f, + -0.884797098f, 0.465976496f, + -0.885510856f, 0.464618686f, + -0.886222530f, 0.463259784f, + -0.886932119f, 0.461899791f, + -0.887639620f, 0.460538711f, + -0.888345033f, 0.459176548f, + -0.889048356f, 0.457813304f, + -0.889749586f, 0.456448982f, + -0.890448723f, 0.455083587f, + -0.891145765f, 0.453717121f, + -0.891840709f, 0.452349587f, + -0.892533555f, 0.450980989f, + -0.893224301f, 0.449611330f, + -0.893912945f, 0.448240612f, + -0.894599486f, 0.446868840f, + -0.895283921f, 0.445496017f, + -0.895966250f, 0.444122145f, + -0.896646470f, 0.442747228f, + -0.897324581f, 0.441371269f, + -0.898000580f, 0.439994271f, + -0.898674466f, 0.438616239f, + -0.899346237f, 0.437237174f, + -0.900015892f, 0.435857080f, + -0.900683429f, 0.434475961f, + -0.901348847f, 0.433093819f, + -0.902012144f, 0.431710658f, + -0.902673318f, 0.430326481f, + -0.903332368f, 0.428941292f, + -0.903989293f, 0.427555093f, + -0.904644091f, 0.426167889f, + -0.905296759f, 0.424779681f, + -0.905947298f, 0.423390474f, + -0.906595705f, 0.422000271f, + -0.907241978f, 0.420609074f, + -0.907886116f, 0.419216888f, + -0.908528119f, 0.417823716f, + -0.909167983f, 0.416429560f, + -0.909805708f, 0.415034424f, + -0.910441292f, 0.413638312f, + -0.911074734f, 0.412241227f, + -0.911706032f, 0.410843171f, + -0.912335185f, 0.409444149f, + -0.912962190f, 0.408044163f, + -0.913587048f, 0.406643217f, + -0.914209756f, 0.405241314f, + -0.914830312f, 0.403838458f, + -0.915448716f, 0.402434651f, + -0.916064966f, 0.401029897f, + -0.916679060f, 0.399624200f, + -0.917290997f, 0.398217562f, + -0.917900776f, 0.396809987f, + -0.918508394f, 0.395401479f, + -0.919113852f, 0.393992040f, + -0.919717146f, 0.392581674f, + -0.920318277f, 0.391170384f, + -0.920917242f, 0.389758174f, + -0.921514039f, 0.388345047f, + -0.922108669f, 0.386931006f, + -0.922701128f, 0.385516054f, + -0.923291417f, 0.384100195f, + -0.923879533f, 0.382683432f, + -0.924465474f, 0.381265769f, + -0.925049241f, 0.379847209f, + -0.925630831f, 0.378427755f, + -0.926210242f, 0.377007410f, + -0.926787474f, 0.375586178f, + -0.927362526f, 0.374164063f, + -0.927935395f, 0.372741067f, + -0.928506080f, 0.371317194f, + -0.929074581f, 0.369892447f, + -0.929640896f, 0.368466830f, + -0.930205023f, 0.367040346f, + -0.930766961f, 0.365612998f, + -0.931326709f, 0.364184790f, + -0.931884266f, 0.362755724f, + -0.932439629f, 0.361325806f, + -0.932992799f, 0.359895037f, + -0.933543773f, 0.358463421f, + -0.934092550f, 0.357030961f, + -0.934639130f, 0.355597662f, + -0.935183510f, 0.354163525f, + -0.935725689f, 0.352728556f, + -0.936265667f, 0.351292756f, + -0.936803442f, 0.349856130f, + -0.937339012f, 0.348418680f, + -0.937872376f, 0.346980411f, + -0.938403534f, 0.345541325f, + -0.938932484f, 0.344101426f, + -0.939459224f, 0.342660717f, + -0.939983753f, 0.341219202f, + -0.940506071f, 0.339776884f, + -0.941026175f, 0.338333767f, + -0.941544065f, 0.336889853f, + -0.942059740f, 0.335445147f, + -0.942573198f, 0.333999651f, + -0.943084437f, 0.332553370f, + -0.943593458f, 0.331106306f, + -0.944100258f, 0.329658463f, + -0.944604837f, 0.328209844f, + -0.945107193f, 0.326760452f, + -0.945607325f, 0.325310292f, + -0.946105232f, 0.323859367f, + -0.946600913f, 0.322407679f, + -0.947094366f, 0.320955232f, + -0.947585591f, 0.319502031f, + -0.948074586f, 0.318048077f, + -0.948561350f, 0.316593376f, + -0.949045882f, 0.315137929f, + -0.949528181f, 0.313681740f, + -0.950008245f, 0.312224814f, + -0.950486074f, 0.310767153f, + -0.950961666f, 0.309308760f, + -0.951435021f, 0.307849640f, + -0.951906137f, 0.306389795f, + -0.952375013f, 0.304929230f, + -0.952841648f, 0.303467947f, + -0.953306040f, 0.302005949f, + -0.953768190f, 0.300543241f, + -0.954228095f, 0.299079826f, + -0.954685755f, 0.297615707f, + -0.955141168f, 0.296150888f, + -0.955594334f, 0.294685372f, + -0.956045251f, 0.293219163f, + -0.956493919f, 0.291752263f, + -0.956940336f, 0.290284677f, + -0.957384501f, 0.288816408f, + -0.957826413f, 0.287347460f, + -0.958266071f, 0.285877835f, + -0.958703475f, 0.284407537f, + -0.959138622f, 0.282936570f, + -0.959571513f, 0.281464938f, + -0.960002146f, 0.279992643f, + -0.960430519f, 0.278519689f, + -0.960856633f, 0.277046080f, + -0.961280486f, 0.275571819f, + -0.961702077f, 0.274096910f, + -0.962121404f, 0.272621355f, + -0.962538468f, 0.271145160f, + -0.962953267f, 0.269668326f, + -0.963365800f, 0.268190857f, + -0.963776066f, 0.266712757f, + -0.964184064f, 0.265234030f, + -0.964589793f, 0.263754679f, + -0.964993253f, 0.262274707f, + -0.965394442f, 0.260794118f, + -0.965793359f, 0.259312915f, + -0.966190003f, 0.257831102f, + -0.966584374f, 0.256348682f, + -0.966976471f, 0.254865660f, + -0.967366292f, 0.253382037f, + -0.967753837f, 0.251897818f, + -0.968139105f, 0.250413007f, + -0.968522094f, 0.248927606f, + -0.968902805f, 0.247441619f, + -0.969281235f, 0.245955050f, + -0.969657385f, 0.244467903f, + -0.970031253f, 0.242980180f, + -0.970402839f, 0.241491885f, + -0.970772141f, 0.240003022f, + -0.971139158f, 0.238513595f, + -0.971503891f, 0.237023606f, + -0.971866337f, 0.235533059f, + -0.972226497f, 0.234041959f, + -0.972584369f, 0.232550307f, + -0.972939952f, 0.231058108f, + -0.973293246f, 0.229565366f, + -0.973644250f, 0.228072083f, + -0.973992962f, 0.226578264f, + -0.974339383f, 0.225083911f, + -0.974683511f, 0.223589029f, + -0.975025345f, 0.222093621f, + -0.975364885f, 0.220597690f, + -0.975702130f, 0.219101240f, + -0.976037079f, 0.217604275f, + -0.976369731f, 0.216106797f, + -0.976700086f, 0.214608811f, + -0.977028143f, 0.213110320f, + -0.977353900f, 0.211611327f, + -0.977677358f, 0.210111837f, + -0.977998515f, 0.208611852f, + -0.978317371f, 0.207111376f, + -0.978633924f, 0.205610413f, + -0.978948175f, 0.204108966f, + -0.979260123f, 0.202607039f, + -0.979569766f, 0.201104635f, + -0.979877104f, 0.199601758f, + -0.980182136f, 0.198098411f, + -0.980484862f, 0.196594598f, + -0.980785280f, 0.195090322f, + -0.981083391f, 0.193585587f, + -0.981379193f, 0.192080397f, + -0.981672686f, 0.190574755f, + -0.981963869f, 0.189068664f, + -0.982252741f, 0.187562129f, + -0.982539302f, 0.186055152f, + -0.982823551f, 0.184547737f, + -0.983105487f, 0.183039888f, + -0.983385110f, 0.181531608f, + -0.983662419f, 0.180022901f, + -0.983937413f, 0.178513771f, + -0.984210092f, 0.177004220f, + -0.984480455f, 0.175494253f, + -0.984748502f, 0.173983873f, + -0.985014231f, 0.172473084f, + -0.985277642f, 0.170961889f, + -0.985538735f, 0.169450291f, + -0.985797509f, 0.167938295f, + -0.986053963f, 0.166425904f, + -0.986308097f, 0.164913120f, + -0.986559910f, 0.163399949f, + -0.986809402f, 0.161886394f, + -0.987056571f, 0.160372457f, + -0.987301418f, 0.158858143f, + -0.987543942f, 0.157343456f, + -0.987784142f, 0.155828398f, + -0.988022017f, 0.154312973f, + -0.988257568f, 0.152797185f, + -0.988490793f, 0.151281038f, + -0.988721692f, 0.149764535f, + -0.988950265f, 0.148247679f, + -0.989176510f, 0.146730474f, + -0.989400428f, 0.145212925f, + -0.989622017f, 0.143695033f, + -0.989841278f, 0.142176804f, + -0.990058210f, 0.140658239f, + -0.990272812f, 0.139139344f, + -0.990485084f, 0.137620122f, + -0.990695025f, 0.136100575f, + -0.990902635f, 0.134580709f, + -0.991107914f, 0.133060525f, + -0.991310860f, 0.131540029f, + -0.991511473f, 0.130019223f, + -0.991709754f, 0.128498111f, + -0.991905700f, 0.126976696f, + -0.992099313f, 0.125454983f, + -0.992290591f, 0.123932975f, + -0.992479535f, 0.122410675f, + -0.992666142f, 0.120888087f, + -0.992850414f, 0.119365215f, + -0.993032350f, 0.117842062f, + -0.993211949f, 0.116318631f, + -0.993389211f, 0.114794927f, + -0.993564136f, 0.113270952f, + -0.993736722f, 0.111746711f, + -0.993906970f, 0.110222207f, + -0.994074879f, 0.108697444f, + -0.994240449f, 0.107172425f, + -0.994403680f, 0.105647154f, + -0.994564571f, 0.104121634f, + -0.994723121f, 0.102595869f, + -0.994879331f, 0.101069863f, + -0.995033199f, 0.099543619f, + -0.995184727f, 0.098017140f, + -0.995333912f, 0.096490431f, + -0.995480755f, 0.094963495f, + -0.995625256f, 0.093436336f, + -0.995767414f, 0.091908956f, + -0.995907229f, 0.090381361f, + -0.996044701f, 0.088853553f, + -0.996179829f, 0.087325535f, + -0.996312612f, 0.085797312f, + -0.996443051f, 0.084268888f, + -0.996571146f, 0.082740265f, + -0.996696895f, 0.081211447f, + -0.996820299f, 0.079682438f, + -0.996941358f, 0.078153242f, + -0.997060070f, 0.076623861f, + -0.997176437f, 0.075094301f, + -0.997290457f, 0.073564564f, + -0.997402130f, 0.072034653f, + -0.997511456f, 0.070504573f, + -0.997618435f, 0.068974328f, + -0.997723067f, 0.067443920f, + -0.997825350f, 0.065913353f, + -0.997925286f, 0.064382631f, + -0.998022874f, 0.062851758f, + -0.998118113f, 0.061320736f, + -0.998211003f, 0.059789571f, + -0.998301545f, 0.058258265f, + -0.998389737f, 0.056726821f, + -0.998475581f, 0.055195244f, + -0.998559074f, 0.053663538f, + -0.998640218f, 0.052131705f, + -0.998719012f, 0.050599749f, + -0.998795456f, 0.049067674f, + -0.998869550f, 0.047535484f, + -0.998941293f, 0.046003182f, + -0.999010686f, 0.044470772f, + -0.999077728f, 0.042938257f, + -0.999142419f, 0.041405641f, + -0.999204759f, 0.039872928f, + -0.999264747f, 0.038340120f, + -0.999322385f, 0.036807223f, + -0.999377670f, 0.035274239f, + -0.999430605f, 0.033741172f, + -0.999481187f, 0.032208025f, + -0.999529418f, 0.030674803f, + -0.999575296f, 0.029141509f, + -0.999618822f, 0.027608146f, + -0.999659997f, 0.026074718f, + -0.999698819f, 0.024541229f, + -0.999735288f, 0.023007681f, + -0.999769405f, 0.021474080f, + -0.999801170f, 0.019940429f, + -0.999830582f, 0.018406730f, + -0.999857641f, 0.016872988f, + -0.999882347f, 0.015339206f, + -0.999904701f, 0.013805389f, + -0.999924702f, 0.012271538f, + -0.999942350f, 0.010737659f, + -0.999957645f, 0.009203755f, + -0.999970586f, 0.007669829f, + -0.999981175f, 0.006135885f, + -0.999989411f, 0.004601926f, + -0.999995294f, 0.003067957f, + -0.999998823f, 0.001533980f, + -1.000000000f, 0.000000000f, + -0.999998823f, -0.001533980f, + -0.999995294f, -0.003067957f, + -0.999989411f, -0.004601926f, + -0.999981175f, -0.006135885f, + -0.999970586f, -0.007669829f, + -0.999957645f, -0.009203755f, + -0.999942350f, -0.010737659f, + -0.999924702f, -0.012271538f, + -0.999904701f, -0.013805389f, + -0.999882347f, -0.015339206f, + -0.999857641f, -0.016872988f, + -0.999830582f, -0.018406730f, + -0.999801170f, -0.019940429f, + -0.999769405f, -0.021474080f, + -0.999735288f, -0.023007681f, + -0.999698819f, -0.024541229f, + -0.999659997f, -0.026074718f, + -0.999618822f, -0.027608146f, + -0.999575296f, -0.029141509f, + -0.999529418f, -0.030674803f, + -0.999481187f, -0.032208025f, + -0.999430605f, -0.033741172f, + -0.999377670f, -0.035274239f, + -0.999322385f, -0.036807223f, + -0.999264747f, -0.038340120f, + -0.999204759f, -0.039872928f, + -0.999142419f, -0.041405641f, + -0.999077728f, -0.042938257f, + -0.999010686f, -0.044470772f, + -0.998941293f, -0.046003182f, + -0.998869550f, -0.047535484f, + -0.998795456f, -0.049067674f, + -0.998719012f, -0.050599749f, + -0.998640218f, -0.052131705f, + -0.998559074f, -0.053663538f, + -0.998475581f, -0.055195244f, + -0.998389737f, -0.056726821f, + -0.998301545f, -0.058258265f, + -0.998211003f, -0.059789571f, + -0.998118113f, -0.061320736f, + -0.998022874f, -0.062851758f, + -0.997925286f, -0.064382631f, + -0.997825350f, -0.065913353f, + -0.997723067f, -0.067443920f, + -0.997618435f, -0.068974328f, + -0.997511456f, -0.070504573f, + -0.997402130f, -0.072034653f, + -0.997290457f, -0.073564564f, + -0.997176437f, -0.075094301f, + -0.997060070f, -0.076623861f, + -0.996941358f, -0.078153242f, + -0.996820299f, -0.079682438f, + -0.996696895f, -0.081211447f, + -0.996571146f, -0.082740265f, + -0.996443051f, -0.084268888f, + -0.996312612f, -0.085797312f, + -0.996179829f, -0.087325535f, + -0.996044701f, -0.088853553f, + -0.995907229f, -0.090381361f, + -0.995767414f, -0.091908956f, + -0.995625256f, -0.093436336f, + -0.995480755f, -0.094963495f, + -0.995333912f, -0.096490431f, + -0.995184727f, -0.098017140f, + -0.995033199f, -0.099543619f, + -0.994879331f, -0.101069863f, + -0.994723121f, -0.102595869f, + -0.994564571f, -0.104121634f, + -0.994403680f, -0.105647154f, + -0.994240449f, -0.107172425f, + -0.994074879f, -0.108697444f, + -0.993906970f, -0.110222207f, + -0.993736722f, -0.111746711f, + -0.993564136f, -0.113270952f, + -0.993389211f, -0.114794927f, + -0.993211949f, -0.116318631f, + -0.993032350f, -0.117842062f, + -0.992850414f, -0.119365215f, + -0.992666142f, -0.120888087f, + -0.992479535f, -0.122410675f, + -0.992290591f, -0.123932975f, + -0.992099313f, -0.125454983f, + -0.991905700f, -0.126976696f, + -0.991709754f, -0.128498111f, + -0.991511473f, -0.130019223f, + -0.991310860f, -0.131540029f, + -0.991107914f, -0.133060525f, + -0.990902635f, -0.134580709f, + -0.990695025f, -0.136100575f, + -0.990485084f, -0.137620122f, + -0.990272812f, -0.139139344f, + -0.990058210f, -0.140658239f, + -0.989841278f, -0.142176804f, + -0.989622017f, -0.143695033f, + -0.989400428f, -0.145212925f, + -0.989176510f, -0.146730474f, + -0.988950265f, -0.148247679f, + -0.988721692f, -0.149764535f, + -0.988490793f, -0.151281038f, + -0.988257568f, -0.152797185f, + -0.988022017f, -0.154312973f, + -0.987784142f, -0.155828398f, + -0.987543942f, -0.157343456f, + -0.987301418f, -0.158858143f, + -0.987056571f, -0.160372457f, + -0.986809402f, -0.161886394f, + -0.986559910f, -0.163399949f, + -0.986308097f, -0.164913120f, + -0.986053963f, -0.166425904f, + -0.985797509f, -0.167938295f, + -0.985538735f, -0.169450291f, + -0.985277642f, -0.170961889f, + -0.985014231f, -0.172473084f, + -0.984748502f, -0.173983873f, + -0.984480455f, -0.175494253f, + -0.984210092f, -0.177004220f, + -0.983937413f, -0.178513771f, + -0.983662419f, -0.180022901f, + -0.983385110f, -0.181531608f, + -0.983105487f, -0.183039888f, + -0.982823551f, -0.184547737f, + -0.982539302f, -0.186055152f, + -0.982252741f, -0.187562129f, + -0.981963869f, -0.189068664f, + -0.981672686f, -0.190574755f, + -0.981379193f, -0.192080397f, + -0.981083391f, -0.193585587f, + -0.980785280f, -0.195090322f, + -0.980484862f, -0.196594598f, + -0.980182136f, -0.198098411f, + -0.979877104f, -0.199601758f, + -0.979569766f, -0.201104635f, + -0.979260123f, -0.202607039f, + -0.978948175f, -0.204108966f, + -0.978633924f, -0.205610413f, + -0.978317371f, -0.207111376f, + -0.977998515f, -0.208611852f, + -0.977677358f, -0.210111837f, + -0.977353900f, -0.211611327f, + -0.977028143f, -0.213110320f, + -0.976700086f, -0.214608811f, + -0.976369731f, -0.216106797f, + -0.976037079f, -0.217604275f, + -0.975702130f, -0.219101240f, + -0.975364885f, -0.220597690f, + -0.975025345f, -0.222093621f, + -0.974683511f, -0.223589029f, + -0.974339383f, -0.225083911f, + -0.973992962f, -0.226578264f, + -0.973644250f, -0.228072083f, + -0.973293246f, -0.229565366f, + -0.972939952f, -0.231058108f, + -0.972584369f, -0.232550307f, + -0.972226497f, -0.234041959f, + -0.971866337f, -0.235533059f, + -0.971503891f, -0.237023606f, + -0.971139158f, -0.238513595f, + -0.970772141f, -0.240003022f, + -0.970402839f, -0.241491885f, + -0.970031253f, -0.242980180f, + -0.969657385f, -0.244467903f, + -0.969281235f, -0.245955050f, + -0.968902805f, -0.247441619f, + -0.968522094f, -0.248927606f, + -0.968139105f, -0.250413007f, + -0.967753837f, -0.251897818f, + -0.967366292f, -0.253382037f, + -0.966976471f, -0.254865660f, + -0.966584374f, -0.256348682f, + -0.966190003f, -0.257831102f, + -0.965793359f, -0.259312915f, + -0.965394442f, -0.260794118f, + -0.964993253f, -0.262274707f, + -0.964589793f, -0.263754679f, + -0.964184064f, -0.265234030f, + -0.963776066f, -0.266712757f, + -0.963365800f, -0.268190857f, + -0.962953267f, -0.269668326f, + -0.962538468f, -0.271145160f, + -0.962121404f, -0.272621355f, + -0.961702077f, -0.274096910f, + -0.961280486f, -0.275571819f, + -0.960856633f, -0.277046080f, + -0.960430519f, -0.278519689f, + -0.960002146f, -0.279992643f, + -0.959571513f, -0.281464938f, + -0.959138622f, -0.282936570f, + -0.958703475f, -0.284407537f, + -0.958266071f, -0.285877835f, + -0.957826413f, -0.287347460f, + -0.957384501f, -0.288816408f, + -0.956940336f, -0.290284677f, + -0.956493919f, -0.291752263f, + -0.956045251f, -0.293219163f, + -0.955594334f, -0.294685372f, + -0.955141168f, -0.296150888f, + -0.954685755f, -0.297615707f, + -0.954228095f, -0.299079826f, + -0.953768190f, -0.300543241f, + -0.953306040f, -0.302005949f, + -0.952841648f, -0.303467947f, + -0.952375013f, -0.304929230f, + -0.951906137f, -0.306389795f, + -0.951435021f, -0.307849640f, + -0.950961666f, -0.309308760f, + -0.950486074f, -0.310767153f, + -0.950008245f, -0.312224814f, + -0.949528181f, -0.313681740f, + -0.949045882f, -0.315137929f, + -0.948561350f, -0.316593376f, + -0.948074586f, -0.318048077f, + -0.947585591f, -0.319502031f, + -0.947094366f, -0.320955232f, + -0.946600913f, -0.322407679f, + -0.946105232f, -0.323859367f, + -0.945607325f, -0.325310292f, + -0.945107193f, -0.326760452f, + -0.944604837f, -0.328209844f, + -0.944100258f, -0.329658463f, + -0.943593458f, -0.331106306f, + -0.943084437f, -0.332553370f, + -0.942573198f, -0.333999651f, + -0.942059740f, -0.335445147f, + -0.941544065f, -0.336889853f, + -0.941026175f, -0.338333767f, + -0.940506071f, -0.339776884f, + -0.939983753f, -0.341219202f, + -0.939459224f, -0.342660717f, + -0.938932484f, -0.344101426f, + -0.938403534f, -0.345541325f, + -0.937872376f, -0.346980411f, + -0.937339012f, -0.348418680f, + -0.936803442f, -0.349856130f, + -0.936265667f, -0.351292756f, + -0.935725689f, -0.352728556f, + -0.935183510f, -0.354163525f, + -0.934639130f, -0.355597662f, + -0.934092550f, -0.357030961f, + -0.933543773f, -0.358463421f, + -0.932992799f, -0.359895037f, + -0.932439629f, -0.361325806f, + -0.931884266f, -0.362755724f, + -0.931326709f, -0.364184790f, + -0.930766961f, -0.365612998f, + -0.930205023f, -0.367040346f, + -0.929640896f, -0.368466830f, + -0.929074581f, -0.369892447f, + -0.928506080f, -0.371317194f, + -0.927935395f, -0.372741067f, + -0.927362526f, -0.374164063f, + -0.926787474f, -0.375586178f, + -0.926210242f, -0.377007410f, + -0.925630831f, -0.378427755f, + -0.925049241f, -0.379847209f, + -0.924465474f, -0.381265769f, + -0.923879533f, -0.382683432f, + -0.923291417f, -0.384100195f, + -0.922701128f, -0.385516054f, + -0.922108669f, -0.386931006f, + -0.921514039f, -0.388345047f, + -0.920917242f, -0.389758174f, + -0.920318277f, -0.391170384f, + -0.919717146f, -0.392581674f, + -0.919113852f, -0.393992040f, + -0.918508394f, -0.395401479f, + -0.917900776f, -0.396809987f, + -0.917290997f, -0.398217562f, + -0.916679060f, -0.399624200f, + -0.916064966f, -0.401029897f, + -0.915448716f, -0.402434651f, + -0.914830312f, -0.403838458f, + -0.914209756f, -0.405241314f, + -0.913587048f, -0.406643217f, + -0.912962190f, -0.408044163f, + -0.912335185f, -0.409444149f, + -0.911706032f, -0.410843171f, + -0.911074734f, -0.412241227f, + -0.910441292f, -0.413638312f, + -0.909805708f, -0.415034424f, + -0.909167983f, -0.416429560f, + -0.908528119f, -0.417823716f, + -0.907886116f, -0.419216888f, + -0.907241978f, -0.420609074f, + -0.906595705f, -0.422000271f, + -0.905947298f, -0.423390474f, + -0.905296759f, -0.424779681f, + -0.904644091f, -0.426167889f, + -0.903989293f, -0.427555093f, + -0.903332368f, -0.428941292f, + -0.902673318f, -0.430326481f, + -0.902012144f, -0.431710658f, + -0.901348847f, -0.433093819f, + -0.900683429f, -0.434475961f, + -0.900015892f, -0.435857080f, + -0.899346237f, -0.437237174f, + -0.898674466f, -0.438616239f, + -0.898000580f, -0.439994271f, + -0.897324581f, -0.441371269f, + -0.896646470f, -0.442747228f, + -0.895966250f, -0.444122145f, + -0.895283921f, -0.445496017f, + -0.894599486f, -0.446868840f, + -0.893912945f, -0.448240612f, + -0.893224301f, -0.449611330f, + -0.892533555f, -0.450980989f, + -0.891840709f, -0.452349587f, + -0.891145765f, -0.453717121f, + -0.890448723f, -0.455083587f, + -0.889749586f, -0.456448982f, + -0.889048356f, -0.457813304f, + -0.888345033f, -0.459176548f, + -0.887639620f, -0.460538711f, + -0.886932119f, -0.461899791f, + -0.886222530f, -0.463259784f, + -0.885510856f, -0.464618686f, + -0.884797098f, -0.465976496f, + -0.884081259f, -0.467333209f, + -0.883363339f, -0.468688822f, + -0.882643340f, -0.470043332f, + -0.881921264f, -0.471396737f, + -0.881197113f, -0.472749032f, + -0.880470889f, -0.474100215f, + -0.879742593f, -0.475450282f, + -0.879012226f, -0.476799230f, + -0.878279792f, -0.478147056f, + -0.877545290f, -0.479493758f, + -0.876808724f, -0.480839331f, + -0.876070094f, -0.482183772f, + -0.875329403f, -0.483527079f, + -0.874586652f, -0.484869248f, + -0.873841843f, -0.486210276f, + -0.873094978f, -0.487550160f, + -0.872346059f, -0.488888897f, + -0.871595087f, -0.490226483f, + -0.870842063f, -0.491562916f, + -0.870086991f, -0.492898192f, + -0.869329871f, -0.494232309f, + -0.868570706f, -0.495565262f, + -0.867809497f, -0.496897049f, + -0.867046246f, -0.498227667f, + -0.866280954f, -0.499557113f, + -0.865513624f, -0.500885383f, + -0.864744258f, -0.502212474f, + -0.863972856f, -0.503538384f, + -0.863199422f, -0.504863109f, + -0.862423956f, -0.506186645f, + -0.861646461f, -0.507508991f, + -0.860866939f, -0.508830143f, + -0.860085390f, -0.510150097f, + -0.859301818f, -0.511468850f, + -0.858516224f, -0.512786401f, + -0.857728610f, -0.514102744f, + -0.856938977f, -0.515417878f, + -0.856147328f, -0.516731799f, + -0.855353665f, -0.518044504f, + -0.854557988f, -0.519355990f, + -0.853760301f, -0.520666254f, + -0.852960605f, -0.521975293f, + -0.852158902f, -0.523283103f, + -0.851355193f, -0.524589683f, + -0.850549481f, -0.525895027f, + -0.849741768f, -0.527199135f, + -0.848932055f, -0.528502002f, + -0.848120345f, -0.529803625f, + -0.847306639f, -0.531104001f, + -0.846490939f, -0.532403128f, + -0.845673247f, -0.533701002f, + -0.844853565f, -0.534997620f, + -0.844031895f, -0.536292979f, + -0.843208240f, -0.537587076f, + -0.842382600f, -0.538879909f, + -0.841554977f, -0.540171473f, + -0.840725375f, -0.541461766f, + -0.839893794f, -0.542750785f, + -0.839060237f, -0.544038527f, + -0.838224706f, -0.545324988f, + -0.837387202f, -0.546610167f, + -0.836547727f, -0.547894059f, + -0.835706284f, -0.549176662f, + -0.834862875f, -0.550457973f, + -0.834017501f, -0.551737988f, + -0.833170165f, -0.553016706f, + -0.832320868f, -0.554294121f, + -0.831469612f, -0.555570233f, + -0.830616400f, -0.556845037f, + -0.829761234f, -0.558118531f, + -0.828904115f, -0.559390712f, + -0.828045045f, -0.560661576f, + -0.827184027f, -0.561931121f, + -0.826321063f, -0.563199344f, + -0.825456154f, -0.564466242f, + -0.824589303f, -0.565731811f, + -0.823720511f, -0.566996049f, + -0.822849781f, -0.568258953f, + -0.821977115f, -0.569520519f, + -0.821102515f, -0.570780746f, + -0.820225983f, -0.572039629f, + -0.819347520f, -0.573297167f, + -0.818467130f, -0.574553355f, + -0.817584813f, -0.575808191f, + -0.816700573f, -0.577061673f, + -0.815814411f, -0.578313796f, + -0.814926329f, -0.579564559f, + -0.814036330f, -0.580813958f, + -0.813144415f, -0.582061990f, + -0.812250587f, -0.583308653f, + -0.811354847f, -0.584553943f, + -0.810457198f, -0.585797857f, + -0.809557642f, -0.587040394f, + -0.808656182f, -0.588281548f, + -0.807752818f, -0.589521319f, + -0.806847554f, -0.590759702f, + -0.805940391f, -0.591996695f, + -0.805031331f, -0.593232295f, + -0.804120377f, -0.594466499f, + -0.803207531f, -0.595699304f, + -0.802292796f, -0.596930708f, + -0.801376172f, -0.598160707f, + -0.800457662f, -0.599389298f, + -0.799537269f, -0.600616479f, + -0.798614995f, -0.601842247f, + -0.797690841f, -0.603066599f, + -0.796764810f, -0.604289531f, + -0.795836905f, -0.605511041f, + -0.794907126f, -0.606731127f, + -0.793975478f, -0.607949785f, + -0.793041960f, -0.609167012f, + -0.792106577f, -0.610382806f, + -0.791169330f, -0.611597164f, + -0.790230221f, -0.612810082f, + -0.789289253f, -0.614021559f, + -0.788346428f, -0.615231591f, + -0.787401747f, -0.616440175f, + -0.786455214f, -0.617647308f, + -0.785506830f, -0.618852988f, + -0.784556597f, -0.620057212f, + -0.783604519f, -0.621259977f, + -0.782650596f, -0.622461279f, + -0.781694832f, -0.623661118f, + -0.780737229f, -0.624859488f, + -0.779777788f, -0.626056388f, + -0.778816512f, -0.627251815f, + -0.777853404f, -0.628445767f, + -0.776888466f, -0.629638239f, + -0.775921699f, -0.630829230f, + -0.774953107f, -0.632018736f, + -0.773982691f, -0.633206755f, + -0.773010453f, -0.634393284f, + -0.772036397f, -0.635578320f, + -0.771060524f, -0.636761861f, + -0.770082837f, -0.637943904f, + -0.769103338f, -0.639124445f, + -0.768122029f, -0.640303482f, + -0.767138912f, -0.641481013f, + -0.766153990f, -0.642657034f, + -0.765167266f, -0.643831543f, + -0.764178741f, -0.645004537f, + -0.763188417f, -0.646176013f, + -0.762196298f, -0.647345969f, + -0.761202385f, -0.648514401f, + -0.760206682f, -0.649681307f, + -0.759209189f, -0.650846685f, + -0.758209910f, -0.652010531f, + -0.757208847f, -0.653172843f, + -0.756206001f, -0.654333618f, + -0.755201377f, -0.655492853f, + -0.754194975f, -0.656650546f, + -0.753186799f, -0.657806693f, + -0.752176850f, -0.658961293f, + -0.751165132f, -0.660114342f, + -0.750151646f, -0.661265838f, + -0.749136395f, -0.662415778f, + -0.748119380f, -0.663564159f, + -0.747100606f, -0.664710978f, + -0.746080074f, -0.665856234f, + -0.745057785f, -0.666999922f, + -0.744033744f, -0.668142041f, + -0.743007952f, -0.669282588f, + -0.741980412f, -0.670421560f, + -0.740951125f, -0.671558955f, + -0.739920095f, -0.672694769f, + -0.738887324f, -0.673829000f, + -0.737852815f, -0.674961646f, + -0.736816569f, -0.676092704f, + -0.735778589f, -0.677222170f, + -0.734738878f, -0.678350043f, + -0.733697438f, -0.679476320f, + -0.732654272f, -0.680600998f, + -0.731609381f, -0.681724074f, + -0.730562769f, -0.682845546f, + -0.729514438f, -0.683965412f, + -0.728464390f, -0.685083668f, + -0.727412629f, -0.686200312f, + -0.726359155f, -0.687315341f, + -0.725303972f, -0.688428753f, + -0.724247083f, -0.689540545f, + -0.723188489f, -0.690650714f, + -0.722128194f, -0.691759258f, + -0.721066199f, -0.692866175f, + -0.720002508f, -0.693971461f, + -0.718937122f, -0.695075114f, + -0.717870045f, -0.696177131f, + -0.716801279f, -0.697277511f, + -0.715730825f, -0.698376249f, + -0.714658688f, -0.699473345f, + -0.713584869f, -0.700568794f, + -0.712509371f, -0.701662595f, + -0.711432196f, -0.702754744f, + -0.710353347f, -0.703845241f, + -0.709272826f, -0.704934080f, + -0.708190637f, -0.706021261f, + -0.707106781f, -0.707106781f, + -0.706021261f, -0.708190637f, + -0.704934080f, -0.709272826f, + -0.703845241f, -0.710353347f, + -0.702754744f, -0.711432196f, + -0.701662595f, -0.712509371f, + -0.700568794f, -0.713584869f, + -0.699473345f, -0.714658688f, + -0.698376249f, -0.715730825f, + -0.697277511f, -0.716801279f, + -0.696177131f, -0.717870045f, + -0.695075114f, -0.718937122f, + -0.693971461f, -0.720002508f, + -0.692866175f, -0.721066199f, + -0.691759258f, -0.722128194f, + -0.690650714f, -0.723188489f, + -0.689540545f, -0.724247083f, + -0.688428753f, -0.725303972f, + -0.687315341f, -0.726359155f, + -0.686200312f, -0.727412629f, + -0.685083668f, -0.728464390f, + -0.683965412f, -0.729514438f, + -0.682845546f, -0.730562769f, + -0.681724074f, -0.731609381f, + -0.680600998f, -0.732654272f, + -0.679476320f, -0.733697438f, + -0.678350043f, -0.734738878f, + -0.677222170f, -0.735778589f, + -0.676092704f, -0.736816569f, + -0.674961646f, -0.737852815f, + -0.673829000f, -0.738887324f, + -0.672694769f, -0.739920095f, + -0.671558955f, -0.740951125f, + -0.670421560f, -0.741980412f, + -0.669282588f, -0.743007952f, + -0.668142041f, -0.744033744f, + -0.666999922f, -0.745057785f, + -0.665856234f, -0.746080074f, + -0.664710978f, -0.747100606f, + -0.663564159f, -0.748119380f, + -0.662415778f, -0.749136395f, + -0.661265838f, -0.750151646f, + -0.660114342f, -0.751165132f, + -0.658961293f, -0.752176850f, + -0.657806693f, -0.753186799f, + -0.656650546f, -0.754194975f, + -0.655492853f, -0.755201377f, + -0.654333618f, -0.756206001f, + -0.653172843f, -0.757208847f, + -0.652010531f, -0.758209910f, + -0.650846685f, -0.759209189f, + -0.649681307f, -0.760206682f, + -0.648514401f, -0.761202385f, + -0.647345969f, -0.762196298f, + -0.646176013f, -0.763188417f, + -0.645004537f, -0.764178741f, + -0.643831543f, -0.765167266f, + -0.642657034f, -0.766153990f, + -0.641481013f, -0.767138912f, + -0.640303482f, -0.768122029f, + -0.639124445f, -0.769103338f, + -0.637943904f, -0.770082837f, + -0.636761861f, -0.771060524f, + -0.635578320f, -0.772036397f, + -0.634393284f, -0.773010453f, + -0.633206755f, -0.773982691f, + -0.632018736f, -0.774953107f, + -0.630829230f, -0.775921699f, + -0.629638239f, -0.776888466f, + -0.628445767f, -0.777853404f, + -0.627251815f, -0.778816512f, + -0.626056388f, -0.779777788f, + -0.624859488f, -0.780737229f, + -0.623661118f, -0.781694832f, + -0.622461279f, -0.782650596f, + -0.621259977f, -0.783604519f, + -0.620057212f, -0.784556597f, + -0.618852988f, -0.785506830f, + -0.617647308f, -0.786455214f, + -0.616440175f, -0.787401747f, + -0.615231591f, -0.788346428f, + -0.614021559f, -0.789289253f, + -0.612810082f, -0.790230221f, + -0.611597164f, -0.791169330f, + -0.610382806f, -0.792106577f, + -0.609167012f, -0.793041960f, + -0.607949785f, -0.793975478f, + -0.606731127f, -0.794907126f, + -0.605511041f, -0.795836905f, + -0.604289531f, -0.796764810f, + -0.603066599f, -0.797690841f, + -0.601842247f, -0.798614995f, + -0.600616479f, -0.799537269f, + -0.599389298f, -0.800457662f, + -0.598160707f, -0.801376172f, + -0.596930708f, -0.802292796f, + -0.595699304f, -0.803207531f, + -0.594466499f, -0.804120377f, + -0.593232295f, -0.805031331f, + -0.591996695f, -0.805940391f, + -0.590759702f, -0.806847554f, + -0.589521319f, -0.807752818f, + -0.588281548f, -0.808656182f, + -0.587040394f, -0.809557642f, + -0.585797857f, -0.810457198f, + -0.584553943f, -0.811354847f, + -0.583308653f, -0.812250587f, + -0.582061990f, -0.813144415f, + -0.580813958f, -0.814036330f, + -0.579564559f, -0.814926329f, + -0.578313796f, -0.815814411f, + -0.577061673f, -0.816700573f, + -0.575808191f, -0.817584813f, + -0.574553355f, -0.818467130f, + -0.573297167f, -0.819347520f, + -0.572039629f, -0.820225983f, + -0.570780746f, -0.821102515f, + -0.569520519f, -0.821977115f, + -0.568258953f, -0.822849781f, + -0.566996049f, -0.823720511f, + -0.565731811f, -0.824589303f, + -0.564466242f, -0.825456154f, + -0.563199344f, -0.826321063f, + -0.561931121f, -0.827184027f, + -0.560661576f, -0.828045045f, + -0.559390712f, -0.828904115f, + -0.558118531f, -0.829761234f, + -0.556845037f, -0.830616400f, + -0.555570233f, -0.831469612f, + -0.554294121f, -0.832320868f, + -0.553016706f, -0.833170165f, + -0.551737988f, -0.834017501f, + -0.550457973f, -0.834862875f, + -0.549176662f, -0.835706284f, + -0.547894059f, -0.836547727f, + -0.546610167f, -0.837387202f, + -0.545324988f, -0.838224706f, + -0.544038527f, -0.839060237f, + -0.542750785f, -0.839893794f, + -0.541461766f, -0.840725375f, + -0.540171473f, -0.841554977f, + -0.538879909f, -0.842382600f, + -0.537587076f, -0.843208240f, + -0.536292979f, -0.844031895f, + -0.534997620f, -0.844853565f, + -0.533701002f, -0.845673247f, + -0.532403128f, -0.846490939f, + -0.531104001f, -0.847306639f, + -0.529803625f, -0.848120345f, + -0.528502002f, -0.848932055f, + -0.527199135f, -0.849741768f, + -0.525895027f, -0.850549481f, + -0.524589683f, -0.851355193f, + -0.523283103f, -0.852158902f, + -0.521975293f, -0.852960605f, + -0.520666254f, -0.853760301f, + -0.519355990f, -0.854557988f, + -0.518044504f, -0.855353665f, + -0.516731799f, -0.856147328f, + -0.515417878f, -0.856938977f, + -0.514102744f, -0.857728610f, + -0.512786401f, -0.858516224f, + -0.511468850f, -0.859301818f, + -0.510150097f, -0.860085390f, + -0.508830143f, -0.860866939f, + -0.507508991f, -0.861646461f, + -0.506186645f, -0.862423956f, + -0.504863109f, -0.863199422f, + -0.503538384f, -0.863972856f, + -0.502212474f, -0.864744258f, + -0.500885383f, -0.865513624f, + -0.499557113f, -0.866280954f, + -0.498227667f, -0.867046246f, + -0.496897049f, -0.867809497f, + -0.495565262f, -0.868570706f, + -0.494232309f, -0.869329871f, + -0.492898192f, -0.870086991f, + -0.491562916f, -0.870842063f, + -0.490226483f, -0.871595087f, + -0.488888897f, -0.872346059f, + -0.487550160f, -0.873094978f, + -0.486210276f, -0.873841843f, + -0.484869248f, -0.874586652f, + -0.483527079f, -0.875329403f, + -0.482183772f, -0.876070094f, + -0.480839331f, -0.876808724f, + -0.479493758f, -0.877545290f, + -0.478147056f, -0.878279792f, + -0.476799230f, -0.879012226f, + -0.475450282f, -0.879742593f, + -0.474100215f, -0.880470889f, + -0.472749032f, -0.881197113f, + -0.471396737f, -0.881921264f, + -0.470043332f, -0.882643340f, + -0.468688822f, -0.883363339f, + -0.467333209f, -0.884081259f, + -0.465976496f, -0.884797098f, + -0.464618686f, -0.885510856f, + -0.463259784f, -0.886222530f, + -0.461899791f, -0.886932119f, + -0.460538711f, -0.887639620f, + -0.459176548f, -0.888345033f, + -0.457813304f, -0.889048356f, + -0.456448982f, -0.889749586f, + -0.455083587f, -0.890448723f, + -0.453717121f, -0.891145765f, + -0.452349587f, -0.891840709f, + -0.450980989f, -0.892533555f, + -0.449611330f, -0.893224301f, + -0.448240612f, -0.893912945f, + -0.446868840f, -0.894599486f, + -0.445496017f, -0.895283921f, + -0.444122145f, -0.895966250f, + -0.442747228f, -0.896646470f, + -0.441371269f, -0.897324581f, + -0.439994271f, -0.898000580f, + -0.438616239f, -0.898674466f, + -0.437237174f, -0.899346237f, + -0.435857080f, -0.900015892f, + -0.434475961f, -0.900683429f, + -0.433093819f, -0.901348847f, + -0.431710658f, -0.902012144f, + -0.430326481f, -0.902673318f, + -0.428941292f, -0.903332368f, + -0.427555093f, -0.903989293f, + -0.426167889f, -0.904644091f, + -0.424779681f, -0.905296759f, + -0.423390474f, -0.905947298f, + -0.422000271f, -0.906595705f, + -0.420609074f, -0.907241978f, + -0.419216888f, -0.907886116f, + -0.417823716f, -0.908528119f, + -0.416429560f, -0.909167983f, + -0.415034424f, -0.909805708f, + -0.413638312f, -0.910441292f, + -0.412241227f, -0.911074734f, + -0.410843171f, -0.911706032f, + -0.409444149f, -0.912335185f, + -0.408044163f, -0.912962190f, + -0.406643217f, -0.913587048f, + -0.405241314f, -0.914209756f, + -0.403838458f, -0.914830312f, + -0.402434651f, -0.915448716f, + -0.401029897f, -0.916064966f, + -0.399624200f, -0.916679060f, + -0.398217562f, -0.917290997f, + -0.396809987f, -0.917900776f, + -0.395401479f, -0.918508394f, + -0.393992040f, -0.919113852f, + -0.392581674f, -0.919717146f, + -0.391170384f, -0.920318277f, + -0.389758174f, -0.920917242f, + -0.388345047f, -0.921514039f, + -0.386931006f, -0.922108669f, + -0.385516054f, -0.922701128f, + -0.384100195f, -0.923291417f, + -0.382683432f, -0.923879533f, + -0.381265769f, -0.924465474f, + -0.379847209f, -0.925049241f, + -0.378427755f, -0.925630831f, + -0.377007410f, -0.926210242f, + -0.375586178f, -0.926787474f, + -0.374164063f, -0.927362526f, + -0.372741067f, -0.927935395f, + -0.371317194f, -0.928506080f, + -0.369892447f, -0.929074581f, + -0.368466830f, -0.929640896f, + -0.367040346f, -0.930205023f, + -0.365612998f, -0.930766961f, + -0.364184790f, -0.931326709f, + -0.362755724f, -0.931884266f, + -0.361325806f, -0.932439629f, + -0.359895037f, -0.932992799f, + -0.358463421f, -0.933543773f, + -0.357030961f, -0.934092550f, + -0.355597662f, -0.934639130f, + -0.354163525f, -0.935183510f, + -0.352728556f, -0.935725689f, + -0.351292756f, -0.936265667f, + -0.349856130f, -0.936803442f, + -0.348418680f, -0.937339012f, + -0.346980411f, -0.937872376f, + -0.345541325f, -0.938403534f, + -0.344101426f, -0.938932484f, + -0.342660717f, -0.939459224f, + -0.341219202f, -0.939983753f, + -0.339776884f, -0.940506071f, + -0.338333767f, -0.941026175f, + -0.336889853f, -0.941544065f, + -0.335445147f, -0.942059740f, + -0.333999651f, -0.942573198f, + -0.332553370f, -0.943084437f, + -0.331106306f, -0.943593458f, + -0.329658463f, -0.944100258f, + -0.328209844f, -0.944604837f, + -0.326760452f, -0.945107193f, + -0.325310292f, -0.945607325f, + -0.323859367f, -0.946105232f, + -0.322407679f, -0.946600913f, + -0.320955232f, -0.947094366f, + -0.319502031f, -0.947585591f, + -0.318048077f, -0.948074586f, + -0.316593376f, -0.948561350f, + -0.315137929f, -0.949045882f, + -0.313681740f, -0.949528181f, + -0.312224814f, -0.950008245f, + -0.310767153f, -0.950486074f, + -0.309308760f, -0.950961666f, + -0.307849640f, -0.951435021f, + -0.306389795f, -0.951906137f, + -0.304929230f, -0.952375013f, + -0.303467947f, -0.952841648f, + -0.302005949f, -0.953306040f, + -0.300543241f, -0.953768190f, + -0.299079826f, -0.954228095f, + -0.297615707f, -0.954685755f, + -0.296150888f, -0.955141168f, + -0.294685372f, -0.955594334f, + -0.293219163f, -0.956045251f, + -0.291752263f, -0.956493919f, + -0.290284677f, -0.956940336f, + -0.288816408f, -0.957384501f, + -0.287347460f, -0.957826413f, + -0.285877835f, -0.958266071f, + -0.284407537f, -0.958703475f, + -0.282936570f, -0.959138622f, + -0.281464938f, -0.959571513f, + -0.279992643f, -0.960002146f, + -0.278519689f, -0.960430519f, + -0.277046080f, -0.960856633f, + -0.275571819f, -0.961280486f, + -0.274096910f, -0.961702077f, + -0.272621355f, -0.962121404f, + -0.271145160f, -0.962538468f, + -0.269668326f, -0.962953267f, + -0.268190857f, -0.963365800f, + -0.266712757f, -0.963776066f, + -0.265234030f, -0.964184064f, + -0.263754679f, -0.964589793f, + -0.262274707f, -0.964993253f, + -0.260794118f, -0.965394442f, + -0.259312915f, -0.965793359f, + -0.257831102f, -0.966190003f, + -0.256348682f, -0.966584374f, + -0.254865660f, -0.966976471f, + -0.253382037f, -0.967366292f, + -0.251897818f, -0.967753837f, + -0.250413007f, -0.968139105f, + -0.248927606f, -0.968522094f, + -0.247441619f, -0.968902805f, + -0.245955050f, -0.969281235f, + -0.244467903f, -0.969657385f, + -0.242980180f, -0.970031253f, + -0.241491885f, -0.970402839f, + -0.240003022f, -0.970772141f, + -0.238513595f, -0.971139158f, + -0.237023606f, -0.971503891f, + -0.235533059f, -0.971866337f, + -0.234041959f, -0.972226497f, + -0.232550307f, -0.972584369f, + -0.231058108f, -0.972939952f, + -0.229565366f, -0.973293246f, + -0.228072083f, -0.973644250f, + -0.226578264f, -0.973992962f, + -0.225083911f, -0.974339383f, + -0.223589029f, -0.974683511f, + -0.222093621f, -0.975025345f, + -0.220597690f, -0.975364885f, + -0.219101240f, -0.975702130f, + -0.217604275f, -0.976037079f, + -0.216106797f, -0.976369731f, + -0.214608811f, -0.976700086f, + -0.213110320f, -0.977028143f, + -0.211611327f, -0.977353900f, + -0.210111837f, -0.977677358f, + -0.208611852f, -0.977998515f, + -0.207111376f, -0.978317371f, + -0.205610413f, -0.978633924f, + -0.204108966f, -0.978948175f, + -0.202607039f, -0.979260123f, + -0.201104635f, -0.979569766f, + -0.199601758f, -0.979877104f, + -0.198098411f, -0.980182136f, + -0.196594598f, -0.980484862f, + -0.195090322f, -0.980785280f, + -0.193585587f, -0.981083391f, + -0.192080397f, -0.981379193f, + -0.190574755f, -0.981672686f, + -0.189068664f, -0.981963869f, + -0.187562129f, -0.982252741f, + -0.186055152f, -0.982539302f, + -0.184547737f, -0.982823551f, + -0.183039888f, -0.983105487f, + -0.181531608f, -0.983385110f, + -0.180022901f, -0.983662419f, + -0.178513771f, -0.983937413f, + -0.177004220f, -0.984210092f, + -0.175494253f, -0.984480455f, + -0.173983873f, -0.984748502f, + -0.172473084f, -0.985014231f, + -0.170961889f, -0.985277642f, + -0.169450291f, -0.985538735f, + -0.167938295f, -0.985797509f, + -0.166425904f, -0.986053963f, + -0.164913120f, -0.986308097f, + -0.163399949f, -0.986559910f, + -0.161886394f, -0.986809402f, + -0.160372457f, -0.987056571f, + -0.158858143f, -0.987301418f, + -0.157343456f, -0.987543942f, + -0.155828398f, -0.987784142f, + -0.154312973f, -0.988022017f, + -0.152797185f, -0.988257568f, + -0.151281038f, -0.988490793f, + -0.149764535f, -0.988721692f, + -0.148247679f, -0.988950265f, + -0.146730474f, -0.989176510f, + -0.145212925f, -0.989400428f, + -0.143695033f, -0.989622017f, + -0.142176804f, -0.989841278f, + -0.140658239f, -0.990058210f, + -0.139139344f, -0.990272812f, + -0.137620122f, -0.990485084f, + -0.136100575f, -0.990695025f, + -0.134580709f, -0.990902635f, + -0.133060525f, -0.991107914f, + -0.131540029f, -0.991310860f, + -0.130019223f, -0.991511473f, + -0.128498111f, -0.991709754f, + -0.126976696f, -0.991905700f, + -0.125454983f, -0.992099313f, + -0.123932975f, -0.992290591f, + -0.122410675f, -0.992479535f, + -0.120888087f, -0.992666142f, + -0.119365215f, -0.992850414f, + -0.117842062f, -0.993032350f, + -0.116318631f, -0.993211949f, + -0.114794927f, -0.993389211f, + -0.113270952f, -0.993564136f, + -0.111746711f, -0.993736722f, + -0.110222207f, -0.993906970f, + -0.108697444f, -0.994074879f, + -0.107172425f, -0.994240449f, + -0.105647154f, -0.994403680f, + -0.104121634f, -0.994564571f, + -0.102595869f, -0.994723121f, + -0.101069863f, -0.994879331f, + -0.099543619f, -0.995033199f, + -0.098017140f, -0.995184727f, + -0.096490431f, -0.995333912f, + -0.094963495f, -0.995480755f, + -0.093436336f, -0.995625256f, + -0.091908956f, -0.995767414f, + -0.090381361f, -0.995907229f, + -0.088853553f, -0.996044701f, + -0.087325535f, -0.996179829f, + -0.085797312f, -0.996312612f, + -0.084268888f, -0.996443051f, + -0.082740265f, -0.996571146f, + -0.081211447f, -0.996696895f, + -0.079682438f, -0.996820299f, + -0.078153242f, -0.996941358f, + -0.076623861f, -0.997060070f, + -0.075094301f, -0.997176437f, + -0.073564564f, -0.997290457f, + -0.072034653f, -0.997402130f, + -0.070504573f, -0.997511456f, + -0.068974328f, -0.997618435f, + -0.067443920f, -0.997723067f, + -0.065913353f, -0.997825350f, + -0.064382631f, -0.997925286f, + -0.062851758f, -0.998022874f, + -0.061320736f, -0.998118113f, + -0.059789571f, -0.998211003f, + -0.058258265f, -0.998301545f, + -0.056726821f, -0.998389737f, + -0.055195244f, -0.998475581f, + -0.053663538f, -0.998559074f, + -0.052131705f, -0.998640218f, + -0.050599749f, -0.998719012f, + -0.049067674f, -0.998795456f, + -0.047535484f, -0.998869550f, + -0.046003182f, -0.998941293f, + -0.044470772f, -0.999010686f, + -0.042938257f, -0.999077728f, + -0.041405641f, -0.999142419f, + -0.039872928f, -0.999204759f, + -0.038340120f, -0.999264747f, + -0.036807223f, -0.999322385f, + -0.035274239f, -0.999377670f, + -0.033741172f, -0.999430605f, + -0.032208025f, -0.999481187f, + -0.030674803f, -0.999529418f, + -0.029141509f, -0.999575296f, + -0.027608146f, -0.999618822f, + -0.026074718f, -0.999659997f, + -0.024541229f, -0.999698819f, + -0.023007681f, -0.999735288f, + -0.021474080f, -0.999769405f, + -0.019940429f, -0.999801170f, + -0.018406730f, -0.999830582f, + -0.016872988f, -0.999857641f, + -0.015339206f, -0.999882347f, + -0.013805389f, -0.999904701f, + -0.012271538f, -0.999924702f, + -0.010737659f, -0.999942350f, + -0.009203755f, -0.999957645f, + -0.007669829f, -0.999970586f, + -0.006135885f, -0.999981175f, + -0.004601926f, -0.999989411f, + -0.003067957f, -0.999995294f, + -0.001533980f, -0.999998823f, + -0.000000000f, -1.000000000f, + 0.001533980f, -0.999998823f, + 0.003067957f, -0.999995294f, + 0.004601926f, -0.999989411f, + 0.006135885f, -0.999981175f, + 0.007669829f, -0.999970586f, + 0.009203755f, -0.999957645f, + 0.010737659f, -0.999942350f, + 0.012271538f, -0.999924702f, + 0.013805389f, -0.999904701f, + 0.015339206f, -0.999882347f, + 0.016872988f, -0.999857641f, + 0.018406730f, -0.999830582f, + 0.019940429f, -0.999801170f, + 0.021474080f, -0.999769405f, + 0.023007681f, -0.999735288f, + 0.024541229f, -0.999698819f, + 0.026074718f, -0.999659997f, + 0.027608146f, -0.999618822f, + 0.029141509f, -0.999575296f, + 0.030674803f, -0.999529418f, + 0.032208025f, -0.999481187f, + 0.033741172f, -0.999430605f, + 0.035274239f, -0.999377670f, + 0.036807223f, -0.999322385f, + 0.038340120f, -0.999264747f, + 0.039872928f, -0.999204759f, + 0.041405641f, -0.999142419f, + 0.042938257f, -0.999077728f, + 0.044470772f, -0.999010686f, + 0.046003182f, -0.998941293f, + 0.047535484f, -0.998869550f, + 0.049067674f, -0.998795456f, + 0.050599749f, -0.998719012f, + 0.052131705f, -0.998640218f, + 0.053663538f, -0.998559074f, + 0.055195244f, -0.998475581f, + 0.056726821f, -0.998389737f, + 0.058258265f, -0.998301545f, + 0.059789571f, -0.998211003f, + 0.061320736f, -0.998118113f, + 0.062851758f, -0.998022874f, + 0.064382631f, -0.997925286f, + 0.065913353f, -0.997825350f, + 0.067443920f, -0.997723067f, + 0.068974328f, -0.997618435f, + 0.070504573f, -0.997511456f, + 0.072034653f, -0.997402130f, + 0.073564564f, -0.997290457f, + 0.075094301f, -0.997176437f, + 0.076623861f, -0.997060070f, + 0.078153242f, -0.996941358f, + 0.079682438f, -0.996820299f, + 0.081211447f, -0.996696895f, + 0.082740265f, -0.996571146f, + 0.084268888f, -0.996443051f, + 0.085797312f, -0.996312612f, + 0.087325535f, -0.996179829f, + 0.088853553f, -0.996044701f, + 0.090381361f, -0.995907229f, + 0.091908956f, -0.995767414f, + 0.093436336f, -0.995625256f, + 0.094963495f, -0.995480755f, + 0.096490431f, -0.995333912f, + 0.098017140f, -0.995184727f, + 0.099543619f, -0.995033199f, + 0.101069863f, -0.994879331f, + 0.102595869f, -0.994723121f, + 0.104121634f, -0.994564571f, + 0.105647154f, -0.994403680f, + 0.107172425f, -0.994240449f, + 0.108697444f, -0.994074879f, + 0.110222207f, -0.993906970f, + 0.111746711f, -0.993736722f, + 0.113270952f, -0.993564136f, + 0.114794927f, -0.993389211f, + 0.116318631f, -0.993211949f, + 0.117842062f, -0.993032350f, + 0.119365215f, -0.992850414f, + 0.120888087f, -0.992666142f, + 0.122410675f, -0.992479535f, + 0.123932975f, -0.992290591f, + 0.125454983f, -0.992099313f, + 0.126976696f, -0.991905700f, + 0.128498111f, -0.991709754f, + 0.130019223f, -0.991511473f, + 0.131540029f, -0.991310860f, + 0.133060525f, -0.991107914f, + 0.134580709f, -0.990902635f, + 0.136100575f, -0.990695025f, + 0.137620122f, -0.990485084f, + 0.139139344f, -0.990272812f, + 0.140658239f, -0.990058210f, + 0.142176804f, -0.989841278f, + 0.143695033f, -0.989622017f, + 0.145212925f, -0.989400428f, + 0.146730474f, -0.989176510f, + 0.148247679f, -0.988950265f, + 0.149764535f, -0.988721692f, + 0.151281038f, -0.988490793f, + 0.152797185f, -0.988257568f, + 0.154312973f, -0.988022017f, + 0.155828398f, -0.987784142f, + 0.157343456f, -0.987543942f, + 0.158858143f, -0.987301418f, + 0.160372457f, -0.987056571f, + 0.161886394f, -0.986809402f, + 0.163399949f, -0.986559910f, + 0.164913120f, -0.986308097f, + 0.166425904f, -0.986053963f, + 0.167938295f, -0.985797509f, + 0.169450291f, -0.985538735f, + 0.170961889f, -0.985277642f, + 0.172473084f, -0.985014231f, + 0.173983873f, -0.984748502f, + 0.175494253f, -0.984480455f, + 0.177004220f, -0.984210092f, + 0.178513771f, -0.983937413f, + 0.180022901f, -0.983662419f, + 0.181531608f, -0.983385110f, + 0.183039888f, -0.983105487f, + 0.184547737f, -0.982823551f, + 0.186055152f, -0.982539302f, + 0.187562129f, -0.982252741f, + 0.189068664f, -0.981963869f, + 0.190574755f, -0.981672686f, + 0.192080397f, -0.981379193f, + 0.193585587f, -0.981083391f, + 0.195090322f, -0.980785280f, + 0.196594598f, -0.980484862f, + 0.198098411f, -0.980182136f, + 0.199601758f, -0.979877104f, + 0.201104635f, -0.979569766f, + 0.202607039f, -0.979260123f, + 0.204108966f, -0.978948175f, + 0.205610413f, -0.978633924f, + 0.207111376f, -0.978317371f, + 0.208611852f, -0.977998515f, + 0.210111837f, -0.977677358f, + 0.211611327f, -0.977353900f, + 0.213110320f, -0.977028143f, + 0.214608811f, -0.976700086f, + 0.216106797f, -0.976369731f, + 0.217604275f, -0.976037079f, + 0.219101240f, -0.975702130f, + 0.220597690f, -0.975364885f, + 0.222093621f, -0.975025345f, + 0.223589029f, -0.974683511f, + 0.225083911f, -0.974339383f, + 0.226578264f, -0.973992962f, + 0.228072083f, -0.973644250f, + 0.229565366f, -0.973293246f, + 0.231058108f, -0.972939952f, + 0.232550307f, -0.972584369f, + 0.234041959f, -0.972226497f, + 0.235533059f, -0.971866337f, + 0.237023606f, -0.971503891f, + 0.238513595f, -0.971139158f, + 0.240003022f, -0.970772141f, + 0.241491885f, -0.970402839f, + 0.242980180f, -0.970031253f, + 0.244467903f, -0.969657385f, + 0.245955050f, -0.969281235f, + 0.247441619f, -0.968902805f, + 0.248927606f, -0.968522094f, + 0.250413007f, -0.968139105f, + 0.251897818f, -0.967753837f, + 0.253382037f, -0.967366292f, + 0.254865660f, -0.966976471f, + 0.256348682f, -0.966584374f, + 0.257831102f, -0.966190003f, + 0.259312915f, -0.965793359f, + 0.260794118f, -0.965394442f, + 0.262274707f, -0.964993253f, + 0.263754679f, -0.964589793f, + 0.265234030f, -0.964184064f, + 0.266712757f, -0.963776066f, + 0.268190857f, -0.963365800f, + 0.269668326f, -0.962953267f, + 0.271145160f, -0.962538468f, + 0.272621355f, -0.962121404f, + 0.274096910f, -0.961702077f, + 0.275571819f, -0.961280486f, + 0.277046080f, -0.960856633f, + 0.278519689f, -0.960430519f, + 0.279992643f, -0.960002146f, + 0.281464938f, -0.959571513f, + 0.282936570f, -0.959138622f, + 0.284407537f, -0.958703475f, + 0.285877835f, -0.958266071f, + 0.287347460f, -0.957826413f, + 0.288816408f, -0.957384501f, + 0.290284677f, -0.956940336f, + 0.291752263f, -0.956493919f, + 0.293219163f, -0.956045251f, + 0.294685372f, -0.955594334f, + 0.296150888f, -0.955141168f, + 0.297615707f, -0.954685755f, + 0.299079826f, -0.954228095f, + 0.300543241f, -0.953768190f, + 0.302005949f, -0.953306040f, + 0.303467947f, -0.952841648f, + 0.304929230f, -0.952375013f, + 0.306389795f, -0.951906137f, + 0.307849640f, -0.951435021f, + 0.309308760f, -0.950961666f, + 0.310767153f, -0.950486074f, + 0.312224814f, -0.950008245f, + 0.313681740f, -0.949528181f, + 0.315137929f, -0.949045882f, + 0.316593376f, -0.948561350f, + 0.318048077f, -0.948074586f, + 0.319502031f, -0.947585591f, + 0.320955232f, -0.947094366f, + 0.322407679f, -0.946600913f, + 0.323859367f, -0.946105232f, + 0.325310292f, -0.945607325f, + 0.326760452f, -0.945107193f, + 0.328209844f, -0.944604837f, + 0.329658463f, -0.944100258f, + 0.331106306f, -0.943593458f, + 0.332553370f, -0.943084437f, + 0.333999651f, -0.942573198f, + 0.335445147f, -0.942059740f, + 0.336889853f, -0.941544065f, + 0.338333767f, -0.941026175f, + 0.339776884f, -0.940506071f, + 0.341219202f, -0.939983753f, + 0.342660717f, -0.939459224f, + 0.344101426f, -0.938932484f, + 0.345541325f, -0.938403534f, + 0.346980411f, -0.937872376f, + 0.348418680f, -0.937339012f, + 0.349856130f, -0.936803442f, + 0.351292756f, -0.936265667f, + 0.352728556f, -0.935725689f, + 0.354163525f, -0.935183510f, + 0.355597662f, -0.934639130f, + 0.357030961f, -0.934092550f, + 0.358463421f, -0.933543773f, + 0.359895037f, -0.932992799f, + 0.361325806f, -0.932439629f, + 0.362755724f, -0.931884266f, + 0.364184790f, -0.931326709f, + 0.365612998f, -0.930766961f, + 0.367040346f, -0.930205023f, + 0.368466830f, -0.929640896f, + 0.369892447f, -0.929074581f, + 0.371317194f, -0.928506080f, + 0.372741067f, -0.927935395f, + 0.374164063f, -0.927362526f, + 0.375586178f, -0.926787474f, + 0.377007410f, -0.926210242f, + 0.378427755f, -0.925630831f, + 0.379847209f, -0.925049241f, + 0.381265769f, -0.924465474f, + 0.382683432f, -0.923879533f, + 0.384100195f, -0.923291417f, + 0.385516054f, -0.922701128f, + 0.386931006f, -0.922108669f, + 0.388345047f, -0.921514039f, + 0.389758174f, -0.920917242f, + 0.391170384f, -0.920318277f, + 0.392581674f, -0.919717146f, + 0.393992040f, -0.919113852f, + 0.395401479f, -0.918508394f, + 0.396809987f, -0.917900776f, + 0.398217562f, -0.917290997f, + 0.399624200f, -0.916679060f, + 0.401029897f, -0.916064966f, + 0.402434651f, -0.915448716f, + 0.403838458f, -0.914830312f, + 0.405241314f, -0.914209756f, + 0.406643217f, -0.913587048f, + 0.408044163f, -0.912962190f, + 0.409444149f, -0.912335185f, + 0.410843171f, -0.911706032f, + 0.412241227f, -0.911074734f, + 0.413638312f, -0.910441292f, + 0.415034424f, -0.909805708f, + 0.416429560f, -0.909167983f, + 0.417823716f, -0.908528119f, + 0.419216888f, -0.907886116f, + 0.420609074f, -0.907241978f, + 0.422000271f, -0.906595705f, + 0.423390474f, -0.905947298f, + 0.424779681f, -0.905296759f, + 0.426167889f, -0.904644091f, + 0.427555093f, -0.903989293f, + 0.428941292f, -0.903332368f, + 0.430326481f, -0.902673318f, + 0.431710658f, -0.902012144f, + 0.433093819f, -0.901348847f, + 0.434475961f, -0.900683429f, + 0.435857080f, -0.900015892f, + 0.437237174f, -0.899346237f, + 0.438616239f, -0.898674466f, + 0.439994271f, -0.898000580f, + 0.441371269f, -0.897324581f, + 0.442747228f, -0.896646470f, + 0.444122145f, -0.895966250f, + 0.445496017f, -0.895283921f, + 0.446868840f, -0.894599486f, + 0.448240612f, -0.893912945f, + 0.449611330f, -0.893224301f, + 0.450980989f, -0.892533555f, + 0.452349587f, -0.891840709f, + 0.453717121f, -0.891145765f, + 0.455083587f, -0.890448723f, + 0.456448982f, -0.889749586f, + 0.457813304f, -0.889048356f, + 0.459176548f, -0.888345033f, + 0.460538711f, -0.887639620f, + 0.461899791f, -0.886932119f, + 0.463259784f, -0.886222530f, + 0.464618686f, -0.885510856f, + 0.465976496f, -0.884797098f, + 0.467333209f, -0.884081259f, + 0.468688822f, -0.883363339f, + 0.470043332f, -0.882643340f, + 0.471396737f, -0.881921264f, + 0.472749032f, -0.881197113f, + 0.474100215f, -0.880470889f, + 0.475450282f, -0.879742593f, + 0.476799230f, -0.879012226f, + 0.478147056f, -0.878279792f, + 0.479493758f, -0.877545290f, + 0.480839331f, -0.876808724f, + 0.482183772f, -0.876070094f, + 0.483527079f, -0.875329403f, + 0.484869248f, -0.874586652f, + 0.486210276f, -0.873841843f, + 0.487550160f, -0.873094978f, + 0.488888897f, -0.872346059f, + 0.490226483f, -0.871595087f, + 0.491562916f, -0.870842063f, + 0.492898192f, -0.870086991f, + 0.494232309f, -0.869329871f, + 0.495565262f, -0.868570706f, + 0.496897049f, -0.867809497f, + 0.498227667f, -0.867046246f, + 0.499557113f, -0.866280954f, + 0.500885383f, -0.865513624f, + 0.502212474f, -0.864744258f, + 0.503538384f, -0.863972856f, + 0.504863109f, -0.863199422f, + 0.506186645f, -0.862423956f, + 0.507508991f, -0.861646461f, + 0.508830143f, -0.860866939f, + 0.510150097f, -0.860085390f, + 0.511468850f, -0.859301818f, + 0.512786401f, -0.858516224f, + 0.514102744f, -0.857728610f, + 0.515417878f, -0.856938977f, + 0.516731799f, -0.856147328f, + 0.518044504f, -0.855353665f, + 0.519355990f, -0.854557988f, + 0.520666254f, -0.853760301f, + 0.521975293f, -0.852960605f, + 0.523283103f, -0.852158902f, + 0.524589683f, -0.851355193f, + 0.525895027f, -0.850549481f, + 0.527199135f, -0.849741768f, + 0.528502002f, -0.848932055f, + 0.529803625f, -0.848120345f, + 0.531104001f, -0.847306639f, + 0.532403128f, -0.846490939f, + 0.533701002f, -0.845673247f, + 0.534997620f, -0.844853565f, + 0.536292979f, -0.844031895f, + 0.537587076f, -0.843208240f, + 0.538879909f, -0.842382600f, + 0.540171473f, -0.841554977f, + 0.541461766f, -0.840725375f, + 0.542750785f, -0.839893794f, + 0.544038527f, -0.839060237f, + 0.545324988f, -0.838224706f, + 0.546610167f, -0.837387202f, + 0.547894059f, -0.836547727f, + 0.549176662f, -0.835706284f, + 0.550457973f, -0.834862875f, + 0.551737988f, -0.834017501f, + 0.553016706f, -0.833170165f, + 0.554294121f, -0.832320868f, + 0.555570233f, -0.831469612f, + 0.556845037f, -0.830616400f, + 0.558118531f, -0.829761234f, + 0.559390712f, -0.828904115f, + 0.560661576f, -0.828045045f, + 0.561931121f, -0.827184027f, + 0.563199344f, -0.826321063f, + 0.564466242f, -0.825456154f, + 0.565731811f, -0.824589303f, + 0.566996049f, -0.823720511f, + 0.568258953f, -0.822849781f, + 0.569520519f, -0.821977115f, + 0.570780746f, -0.821102515f, + 0.572039629f, -0.820225983f, + 0.573297167f, -0.819347520f, + 0.574553355f, -0.818467130f, + 0.575808191f, -0.817584813f, + 0.577061673f, -0.816700573f, + 0.578313796f, -0.815814411f, + 0.579564559f, -0.814926329f, + 0.580813958f, -0.814036330f, + 0.582061990f, -0.813144415f, + 0.583308653f, -0.812250587f, + 0.584553943f, -0.811354847f, + 0.585797857f, -0.810457198f, + 0.587040394f, -0.809557642f, + 0.588281548f, -0.808656182f, + 0.589521319f, -0.807752818f, + 0.590759702f, -0.806847554f, + 0.591996695f, -0.805940391f, + 0.593232295f, -0.805031331f, + 0.594466499f, -0.804120377f, + 0.595699304f, -0.803207531f, + 0.596930708f, -0.802292796f, + 0.598160707f, -0.801376172f, + 0.599389298f, -0.800457662f, + 0.600616479f, -0.799537269f, + 0.601842247f, -0.798614995f, + 0.603066599f, -0.797690841f, + 0.604289531f, -0.796764810f, + 0.605511041f, -0.795836905f, + 0.606731127f, -0.794907126f, + 0.607949785f, -0.793975478f, + 0.609167012f, -0.793041960f, + 0.610382806f, -0.792106577f, + 0.611597164f, -0.791169330f, + 0.612810082f, -0.790230221f, + 0.614021559f, -0.789289253f, + 0.615231591f, -0.788346428f, + 0.616440175f, -0.787401747f, + 0.617647308f, -0.786455214f, + 0.618852988f, -0.785506830f, + 0.620057212f, -0.784556597f, + 0.621259977f, -0.783604519f, + 0.622461279f, -0.782650596f, + 0.623661118f, -0.781694832f, + 0.624859488f, -0.780737229f, + 0.626056388f, -0.779777788f, + 0.627251815f, -0.778816512f, + 0.628445767f, -0.777853404f, + 0.629638239f, -0.776888466f, + 0.630829230f, -0.775921699f, + 0.632018736f, -0.774953107f, + 0.633206755f, -0.773982691f, + 0.634393284f, -0.773010453f, + 0.635578320f, -0.772036397f, + 0.636761861f, -0.771060524f, + 0.637943904f, -0.770082837f, + 0.639124445f, -0.769103338f, + 0.640303482f, -0.768122029f, + 0.641481013f, -0.767138912f, + 0.642657034f, -0.766153990f, + 0.643831543f, -0.765167266f, + 0.645004537f, -0.764178741f, + 0.646176013f, -0.763188417f, + 0.647345969f, -0.762196298f, + 0.648514401f, -0.761202385f, + 0.649681307f, -0.760206682f, + 0.650846685f, -0.759209189f, + 0.652010531f, -0.758209910f, + 0.653172843f, -0.757208847f, + 0.654333618f, -0.756206001f, + 0.655492853f, -0.755201377f, + 0.656650546f, -0.754194975f, + 0.657806693f, -0.753186799f, + 0.658961293f, -0.752176850f, + 0.660114342f, -0.751165132f, + 0.661265838f, -0.750151646f, + 0.662415778f, -0.749136395f, + 0.663564159f, -0.748119380f, + 0.664710978f, -0.747100606f, + 0.665856234f, -0.746080074f, + 0.666999922f, -0.745057785f, + 0.668142041f, -0.744033744f, + 0.669282588f, -0.743007952f, + 0.670421560f, -0.741980412f, + 0.671558955f, -0.740951125f, + 0.672694769f, -0.739920095f, + 0.673829000f, -0.738887324f, + 0.674961646f, -0.737852815f, + 0.676092704f, -0.736816569f, + 0.677222170f, -0.735778589f, + 0.678350043f, -0.734738878f, + 0.679476320f, -0.733697438f, + 0.680600998f, -0.732654272f, + 0.681724074f, -0.731609381f, + 0.682845546f, -0.730562769f, + 0.683965412f, -0.729514438f, + 0.685083668f, -0.728464390f, + 0.686200312f, -0.727412629f, + 0.687315341f, -0.726359155f, + 0.688428753f, -0.725303972f, + 0.689540545f, -0.724247083f, + 0.690650714f, -0.723188489f, + 0.691759258f, -0.722128194f, + 0.692866175f, -0.721066199f, + 0.693971461f, -0.720002508f, + 0.695075114f, -0.718937122f, + 0.696177131f, -0.717870045f, + 0.697277511f, -0.716801279f, + 0.698376249f, -0.715730825f, + 0.699473345f, -0.714658688f, + 0.700568794f, -0.713584869f, + 0.701662595f, -0.712509371f, + 0.702754744f, -0.711432196f, + 0.703845241f, -0.710353347f, + 0.704934080f, -0.709272826f, + 0.706021261f, -0.708190637f, + 0.707106781f, -0.707106781f, + 0.708190637f, -0.706021261f, + 0.709272826f, -0.704934080f, + 0.710353347f, -0.703845241f, + 0.711432196f, -0.702754744f, + 0.712509371f, -0.701662595f, + 0.713584869f, -0.700568794f, + 0.714658688f, -0.699473345f, + 0.715730825f, -0.698376249f, + 0.716801279f, -0.697277511f, + 0.717870045f, -0.696177131f, + 0.718937122f, -0.695075114f, + 0.720002508f, -0.693971461f, + 0.721066199f, -0.692866175f, + 0.722128194f, -0.691759258f, + 0.723188489f, -0.690650714f, + 0.724247083f, -0.689540545f, + 0.725303972f, -0.688428753f, + 0.726359155f, -0.687315341f, + 0.727412629f, -0.686200312f, + 0.728464390f, -0.685083668f, + 0.729514438f, -0.683965412f, + 0.730562769f, -0.682845546f, + 0.731609381f, -0.681724074f, + 0.732654272f, -0.680600998f, + 0.733697438f, -0.679476320f, + 0.734738878f, -0.678350043f, + 0.735778589f, -0.677222170f, + 0.736816569f, -0.676092704f, + 0.737852815f, -0.674961646f, + 0.738887324f, -0.673829000f, + 0.739920095f, -0.672694769f, + 0.740951125f, -0.671558955f, + 0.741980412f, -0.670421560f, + 0.743007952f, -0.669282588f, + 0.744033744f, -0.668142041f, + 0.745057785f, -0.666999922f, + 0.746080074f, -0.665856234f, + 0.747100606f, -0.664710978f, + 0.748119380f, -0.663564159f, + 0.749136395f, -0.662415778f, + 0.750151646f, -0.661265838f, + 0.751165132f, -0.660114342f, + 0.752176850f, -0.658961293f, + 0.753186799f, -0.657806693f, + 0.754194975f, -0.656650546f, + 0.755201377f, -0.655492853f, + 0.756206001f, -0.654333618f, + 0.757208847f, -0.653172843f, + 0.758209910f, -0.652010531f, + 0.759209189f, -0.650846685f, + 0.760206682f, -0.649681307f, + 0.761202385f, -0.648514401f, + 0.762196298f, -0.647345969f, + 0.763188417f, -0.646176013f, + 0.764178741f, -0.645004537f, + 0.765167266f, -0.643831543f, + 0.766153990f, -0.642657034f, + 0.767138912f, -0.641481013f, + 0.768122029f, -0.640303482f, + 0.769103338f, -0.639124445f, + 0.770082837f, -0.637943904f, + 0.771060524f, -0.636761861f, + 0.772036397f, -0.635578320f, + 0.773010453f, -0.634393284f, + 0.773982691f, -0.633206755f, + 0.774953107f, -0.632018736f, + 0.775921699f, -0.630829230f, + 0.776888466f, -0.629638239f, + 0.777853404f, -0.628445767f, + 0.778816512f, -0.627251815f, + 0.779777788f, -0.626056388f, + 0.780737229f, -0.624859488f, + 0.781694832f, -0.623661118f, + 0.782650596f, -0.622461279f, + 0.783604519f, -0.621259977f, + 0.784556597f, -0.620057212f, + 0.785506830f, -0.618852988f, + 0.786455214f, -0.617647308f, + 0.787401747f, -0.616440175f, + 0.788346428f, -0.615231591f, + 0.789289253f, -0.614021559f, + 0.790230221f, -0.612810082f, + 0.791169330f, -0.611597164f, + 0.792106577f, -0.610382806f, + 0.793041960f, -0.609167012f, + 0.793975478f, -0.607949785f, + 0.794907126f, -0.606731127f, + 0.795836905f, -0.605511041f, + 0.796764810f, -0.604289531f, + 0.797690841f, -0.603066599f, + 0.798614995f, -0.601842247f, + 0.799537269f, -0.600616479f, + 0.800457662f, -0.599389298f, + 0.801376172f, -0.598160707f, + 0.802292796f, -0.596930708f, + 0.803207531f, -0.595699304f, + 0.804120377f, -0.594466499f, + 0.805031331f, -0.593232295f, + 0.805940391f, -0.591996695f, + 0.806847554f, -0.590759702f, + 0.807752818f, -0.589521319f, + 0.808656182f, -0.588281548f, + 0.809557642f, -0.587040394f, + 0.810457198f, -0.585797857f, + 0.811354847f, -0.584553943f, + 0.812250587f, -0.583308653f, + 0.813144415f, -0.582061990f, + 0.814036330f, -0.580813958f, + 0.814926329f, -0.579564559f, + 0.815814411f, -0.578313796f, + 0.816700573f, -0.577061673f, + 0.817584813f, -0.575808191f, + 0.818467130f, -0.574553355f, + 0.819347520f, -0.573297167f, + 0.820225983f, -0.572039629f, + 0.821102515f, -0.570780746f, + 0.821977115f, -0.569520519f, + 0.822849781f, -0.568258953f, + 0.823720511f, -0.566996049f, + 0.824589303f, -0.565731811f, + 0.825456154f, -0.564466242f, + 0.826321063f, -0.563199344f, + 0.827184027f, -0.561931121f, + 0.828045045f, -0.560661576f, + 0.828904115f, -0.559390712f, + 0.829761234f, -0.558118531f, + 0.830616400f, -0.556845037f, + 0.831469612f, -0.555570233f, + 0.832320868f, -0.554294121f, + 0.833170165f, -0.553016706f, + 0.834017501f, -0.551737988f, + 0.834862875f, -0.550457973f, + 0.835706284f, -0.549176662f, + 0.836547727f, -0.547894059f, + 0.837387202f, -0.546610167f, + 0.838224706f, -0.545324988f, + 0.839060237f, -0.544038527f, + 0.839893794f, -0.542750785f, + 0.840725375f, -0.541461766f, + 0.841554977f, -0.540171473f, + 0.842382600f, -0.538879909f, + 0.843208240f, -0.537587076f, + 0.844031895f, -0.536292979f, + 0.844853565f, -0.534997620f, + 0.845673247f, -0.533701002f, + 0.846490939f, -0.532403128f, + 0.847306639f, -0.531104001f, + 0.848120345f, -0.529803625f, + 0.848932055f, -0.528502002f, + 0.849741768f, -0.527199135f, + 0.850549481f, -0.525895027f, + 0.851355193f, -0.524589683f, + 0.852158902f, -0.523283103f, + 0.852960605f, -0.521975293f, + 0.853760301f, -0.520666254f, + 0.854557988f, -0.519355990f, + 0.855353665f, -0.518044504f, + 0.856147328f, -0.516731799f, + 0.856938977f, -0.515417878f, + 0.857728610f, -0.514102744f, + 0.858516224f, -0.512786401f, + 0.859301818f, -0.511468850f, + 0.860085390f, -0.510150097f, + 0.860866939f, -0.508830143f, + 0.861646461f, -0.507508991f, + 0.862423956f, -0.506186645f, + 0.863199422f, -0.504863109f, + 0.863972856f, -0.503538384f, + 0.864744258f, -0.502212474f, + 0.865513624f, -0.500885383f, + 0.866280954f, -0.499557113f, + 0.867046246f, -0.498227667f, + 0.867809497f, -0.496897049f, + 0.868570706f, -0.495565262f, + 0.869329871f, -0.494232309f, + 0.870086991f, -0.492898192f, + 0.870842063f, -0.491562916f, + 0.871595087f, -0.490226483f, + 0.872346059f, -0.488888897f, + 0.873094978f, -0.487550160f, + 0.873841843f, -0.486210276f, + 0.874586652f, -0.484869248f, + 0.875329403f, -0.483527079f, + 0.876070094f, -0.482183772f, + 0.876808724f, -0.480839331f, + 0.877545290f, -0.479493758f, + 0.878279792f, -0.478147056f, + 0.879012226f, -0.476799230f, + 0.879742593f, -0.475450282f, + 0.880470889f, -0.474100215f, + 0.881197113f, -0.472749032f, + 0.881921264f, -0.471396737f, + 0.882643340f, -0.470043332f, + 0.883363339f, -0.468688822f, + 0.884081259f, -0.467333209f, + 0.884797098f, -0.465976496f, + 0.885510856f, -0.464618686f, + 0.886222530f, -0.463259784f, + 0.886932119f, -0.461899791f, + 0.887639620f, -0.460538711f, + 0.888345033f, -0.459176548f, + 0.889048356f, -0.457813304f, + 0.889749586f, -0.456448982f, + 0.890448723f, -0.455083587f, + 0.891145765f, -0.453717121f, + 0.891840709f, -0.452349587f, + 0.892533555f, -0.450980989f, + 0.893224301f, -0.449611330f, + 0.893912945f, -0.448240612f, + 0.894599486f, -0.446868840f, + 0.895283921f, -0.445496017f, + 0.895966250f, -0.444122145f, + 0.896646470f, -0.442747228f, + 0.897324581f, -0.441371269f, + 0.898000580f, -0.439994271f, + 0.898674466f, -0.438616239f, + 0.899346237f, -0.437237174f, + 0.900015892f, -0.435857080f, + 0.900683429f, -0.434475961f, + 0.901348847f, -0.433093819f, + 0.902012144f, -0.431710658f, + 0.902673318f, -0.430326481f, + 0.903332368f, -0.428941292f, + 0.903989293f, -0.427555093f, + 0.904644091f, -0.426167889f, + 0.905296759f, -0.424779681f, + 0.905947298f, -0.423390474f, + 0.906595705f, -0.422000271f, + 0.907241978f, -0.420609074f, + 0.907886116f, -0.419216888f, + 0.908528119f, -0.417823716f, + 0.909167983f, -0.416429560f, + 0.909805708f, -0.415034424f, + 0.910441292f, -0.413638312f, + 0.911074734f, -0.412241227f, + 0.911706032f, -0.410843171f, + 0.912335185f, -0.409444149f, + 0.912962190f, -0.408044163f, + 0.913587048f, -0.406643217f, + 0.914209756f, -0.405241314f, + 0.914830312f, -0.403838458f, + 0.915448716f, -0.402434651f, + 0.916064966f, -0.401029897f, + 0.916679060f, -0.399624200f, + 0.917290997f, -0.398217562f, + 0.917900776f, -0.396809987f, + 0.918508394f, -0.395401479f, + 0.919113852f, -0.393992040f, + 0.919717146f, -0.392581674f, + 0.920318277f, -0.391170384f, + 0.920917242f, -0.389758174f, + 0.921514039f, -0.388345047f, + 0.922108669f, -0.386931006f, + 0.922701128f, -0.385516054f, + 0.923291417f, -0.384100195f, + 0.923879533f, -0.382683432f, + 0.924465474f, -0.381265769f, + 0.925049241f, -0.379847209f, + 0.925630831f, -0.378427755f, + 0.926210242f, -0.377007410f, + 0.926787474f, -0.375586178f, + 0.927362526f, -0.374164063f, + 0.927935395f, -0.372741067f, + 0.928506080f, -0.371317194f, + 0.929074581f, -0.369892447f, + 0.929640896f, -0.368466830f, + 0.930205023f, -0.367040346f, + 0.930766961f, -0.365612998f, + 0.931326709f, -0.364184790f, + 0.931884266f, -0.362755724f, + 0.932439629f, -0.361325806f, + 0.932992799f, -0.359895037f, + 0.933543773f, -0.358463421f, + 0.934092550f, -0.357030961f, + 0.934639130f, -0.355597662f, + 0.935183510f, -0.354163525f, + 0.935725689f, -0.352728556f, + 0.936265667f, -0.351292756f, + 0.936803442f, -0.349856130f, + 0.937339012f, -0.348418680f, + 0.937872376f, -0.346980411f, + 0.938403534f, -0.345541325f, + 0.938932484f, -0.344101426f, + 0.939459224f, -0.342660717f, + 0.939983753f, -0.341219202f, + 0.940506071f, -0.339776884f, + 0.941026175f, -0.338333767f, + 0.941544065f, -0.336889853f, + 0.942059740f, -0.335445147f, + 0.942573198f, -0.333999651f, + 0.943084437f, -0.332553370f, + 0.943593458f, -0.331106306f, + 0.944100258f, -0.329658463f, + 0.944604837f, -0.328209844f, + 0.945107193f, -0.326760452f, + 0.945607325f, -0.325310292f, + 0.946105232f, -0.323859367f, + 0.946600913f, -0.322407679f, + 0.947094366f, -0.320955232f, + 0.947585591f, -0.319502031f, + 0.948074586f, -0.318048077f, + 0.948561350f, -0.316593376f, + 0.949045882f, -0.315137929f, + 0.949528181f, -0.313681740f, + 0.950008245f, -0.312224814f, + 0.950486074f, -0.310767153f, + 0.950961666f, -0.309308760f, + 0.951435021f, -0.307849640f, + 0.951906137f, -0.306389795f, + 0.952375013f, -0.304929230f, + 0.952841648f, -0.303467947f, + 0.953306040f, -0.302005949f, + 0.953768190f, -0.300543241f, + 0.954228095f, -0.299079826f, + 0.954685755f, -0.297615707f, + 0.955141168f, -0.296150888f, + 0.955594334f, -0.294685372f, + 0.956045251f, -0.293219163f, + 0.956493919f, -0.291752263f, + 0.956940336f, -0.290284677f, + 0.957384501f, -0.288816408f, + 0.957826413f, -0.287347460f, + 0.958266071f, -0.285877835f, + 0.958703475f, -0.284407537f, + 0.959138622f, -0.282936570f, + 0.959571513f, -0.281464938f, + 0.960002146f, -0.279992643f, + 0.960430519f, -0.278519689f, + 0.960856633f, -0.277046080f, + 0.961280486f, -0.275571819f, + 0.961702077f, -0.274096910f, + 0.962121404f, -0.272621355f, + 0.962538468f, -0.271145160f, + 0.962953267f, -0.269668326f, + 0.963365800f, -0.268190857f, + 0.963776066f, -0.266712757f, + 0.964184064f, -0.265234030f, + 0.964589793f, -0.263754679f, + 0.964993253f, -0.262274707f, + 0.965394442f, -0.260794118f, + 0.965793359f, -0.259312915f, + 0.966190003f, -0.257831102f, + 0.966584374f, -0.256348682f, + 0.966976471f, -0.254865660f, + 0.967366292f, -0.253382037f, + 0.967753837f, -0.251897818f, + 0.968139105f, -0.250413007f, + 0.968522094f, -0.248927606f, + 0.968902805f, -0.247441619f, + 0.969281235f, -0.245955050f, + 0.969657385f, -0.244467903f, + 0.970031253f, -0.242980180f, + 0.970402839f, -0.241491885f, + 0.970772141f, -0.240003022f, + 0.971139158f, -0.238513595f, + 0.971503891f, -0.237023606f, + 0.971866337f, -0.235533059f, + 0.972226497f, -0.234041959f, + 0.972584369f, -0.232550307f, + 0.972939952f, -0.231058108f, + 0.973293246f, -0.229565366f, + 0.973644250f, -0.228072083f, + 0.973992962f, -0.226578264f, + 0.974339383f, -0.225083911f, + 0.974683511f, -0.223589029f, + 0.975025345f, -0.222093621f, + 0.975364885f, -0.220597690f, + 0.975702130f, -0.219101240f, + 0.976037079f, -0.217604275f, + 0.976369731f, -0.216106797f, + 0.976700086f, -0.214608811f, + 0.977028143f, -0.213110320f, + 0.977353900f, -0.211611327f, + 0.977677358f, -0.210111837f, + 0.977998515f, -0.208611852f, + 0.978317371f, -0.207111376f, + 0.978633924f, -0.205610413f, + 0.978948175f, -0.204108966f, + 0.979260123f, -0.202607039f, + 0.979569766f, -0.201104635f, + 0.979877104f, -0.199601758f, + 0.980182136f, -0.198098411f, + 0.980484862f, -0.196594598f, + 0.980785280f, -0.195090322f, + 0.981083391f, -0.193585587f, + 0.981379193f, -0.192080397f, + 0.981672686f, -0.190574755f, + 0.981963869f, -0.189068664f, + 0.982252741f, -0.187562129f, + 0.982539302f, -0.186055152f, + 0.982823551f, -0.184547737f, + 0.983105487f, -0.183039888f, + 0.983385110f, -0.181531608f, + 0.983662419f, -0.180022901f, + 0.983937413f, -0.178513771f, + 0.984210092f, -0.177004220f, + 0.984480455f, -0.175494253f, + 0.984748502f, -0.173983873f, + 0.985014231f, -0.172473084f, + 0.985277642f, -0.170961889f, + 0.985538735f, -0.169450291f, + 0.985797509f, -0.167938295f, + 0.986053963f, -0.166425904f, + 0.986308097f, -0.164913120f, + 0.986559910f, -0.163399949f, + 0.986809402f, -0.161886394f, + 0.987056571f, -0.160372457f, + 0.987301418f, -0.158858143f, + 0.987543942f, -0.157343456f, + 0.987784142f, -0.155828398f, + 0.988022017f, -0.154312973f, + 0.988257568f, -0.152797185f, + 0.988490793f, -0.151281038f, + 0.988721692f, -0.149764535f, + 0.988950265f, -0.148247679f, + 0.989176510f, -0.146730474f, + 0.989400428f, -0.145212925f, + 0.989622017f, -0.143695033f, + 0.989841278f, -0.142176804f, + 0.990058210f, -0.140658239f, + 0.990272812f, -0.139139344f, + 0.990485084f, -0.137620122f, + 0.990695025f, -0.136100575f, + 0.990902635f, -0.134580709f, + 0.991107914f, -0.133060525f, + 0.991310860f, -0.131540029f, + 0.991511473f, -0.130019223f, + 0.991709754f, -0.128498111f, + 0.991905700f, -0.126976696f, + 0.992099313f, -0.125454983f, + 0.992290591f, -0.123932975f, + 0.992479535f, -0.122410675f, + 0.992666142f, -0.120888087f, + 0.992850414f, -0.119365215f, + 0.993032350f, -0.117842062f, + 0.993211949f, -0.116318631f, + 0.993389211f, -0.114794927f, + 0.993564136f, -0.113270952f, + 0.993736722f, -0.111746711f, + 0.993906970f, -0.110222207f, + 0.994074879f, -0.108697444f, + 0.994240449f, -0.107172425f, + 0.994403680f, -0.105647154f, + 0.994564571f, -0.104121634f, + 0.994723121f, -0.102595869f, + 0.994879331f, -0.101069863f, + 0.995033199f, -0.099543619f, + 0.995184727f, -0.098017140f, + 0.995333912f, -0.096490431f, + 0.995480755f, -0.094963495f, + 0.995625256f, -0.093436336f, + 0.995767414f, -0.091908956f, + 0.995907229f, -0.090381361f, + 0.996044701f, -0.088853553f, + 0.996179829f, -0.087325535f, + 0.996312612f, -0.085797312f, + 0.996443051f, -0.084268888f, + 0.996571146f, -0.082740265f, + 0.996696895f, -0.081211447f, + 0.996820299f, -0.079682438f, + 0.996941358f, -0.078153242f, + 0.997060070f, -0.076623861f, + 0.997176437f, -0.075094301f, + 0.997290457f, -0.073564564f, + 0.997402130f, -0.072034653f, + 0.997511456f, -0.070504573f, + 0.997618435f, -0.068974328f, + 0.997723067f, -0.067443920f, + 0.997825350f, -0.065913353f, + 0.997925286f, -0.064382631f, + 0.998022874f, -0.062851758f, + 0.998118113f, -0.061320736f, + 0.998211003f, -0.059789571f, + 0.998301545f, -0.058258265f, + 0.998389737f, -0.056726821f, + 0.998475581f, -0.055195244f, + 0.998559074f, -0.053663538f, + 0.998640218f, -0.052131705f, + 0.998719012f, -0.050599749f, + 0.998795456f, -0.049067674f, + 0.998869550f, -0.047535484f, + 0.998941293f, -0.046003182f, + 0.999010686f, -0.044470772f, + 0.999077728f, -0.042938257f, + 0.999142419f, -0.041405641f, + 0.999204759f, -0.039872928f, + 0.999264747f, -0.038340120f, + 0.999322385f, -0.036807223f, + 0.999377670f, -0.035274239f, + 0.999430605f, -0.033741172f, + 0.999481187f, -0.032208025f, + 0.999529418f, -0.030674803f, + 0.999575296f, -0.029141509f, + 0.999618822f, -0.027608146f, + 0.999659997f, -0.026074718f, + 0.999698819f, -0.024541229f, + 0.999735288f, -0.023007681f, + 0.999769405f, -0.021474080f, + 0.999801170f, -0.019940429f, + 0.999830582f, -0.018406730f, + 0.999857641f, -0.016872988f, + 0.999882347f, -0.015339206f, + 0.999904701f, -0.013805389f, + 0.999924702f, -0.012271538f, + 0.999942350f, -0.010737659f, + 0.999957645f, -0.009203755f, + 0.999970586f, -0.007669829f, + 0.999981175f, -0.006135885f, + 0.999989411f, -0.004601926f, + 0.999995294f, -0.003067957f, + 0.999998823f, -0.001533980f +}; + +/* +* @brief Q31 Twiddle factors Table +*/ + + +/** +* \par +* Example code for Q31 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefQ31[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefQ31[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 16 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to Q31(Fixed point 1.31): +* round(twiddleCoefQ31(i) * pow(2, 31)) +* +*/ +const q31_t twiddleCoef_16_q31[24] = { + 0x7FFFFFFF, 0x00000000, + 0x7641AF3C, 0x30FBC54D, + 0x5A82799A, 0x5A82799A, + 0x30FBC54D, 0x7641AF3C, + 0x00000000, 0x7FFFFFFF, + 0xCF043AB2, 0x7641AF3C, + 0xA57D8666, 0x5A82799A, + 0x89BE50C3, 0x30FBC54D, + 0x80000000, 0x00000000, + 0x89BE50C3, 0xCF043AB2, + 0xA57D8666, 0xA57D8666, + 0xCF043AB2, 0x89BE50C3 +}; + +/** +* \par +* Example code for Q31 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefQ31[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefQ31[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 32 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to Q31(Fixed point 1.31): +* round(twiddleCoefQ31(i) * pow(2, 31)) +* +*/ +const q31_t twiddleCoef_32_q31[48] = { + 0x7FFFFFFF, 0x00000000, + 0x7D8A5F3F, 0x18F8B83C, + 0x7641AF3C, 0x30FBC54D, + 0x6A6D98A4, 0x471CECE6, + 0x5A82799A, 0x5A82799A, + 0x471CECE6, 0x6A6D98A4, + 0x30FBC54D, 0x7641AF3C, + 0x18F8B83C, 0x7D8A5F3F, + 0x00000000, 0x7FFFFFFF, + 0xE70747C3, 0x7D8A5F3F, + 0xCF043AB2, 0x7641AF3C, + 0xB8E31319, 0x6A6D98A4, + 0xA57D8666, 0x5A82799A, + 0x9592675B, 0x471CECE6, + 0x89BE50C3, 0x30FBC54D, + 0x8275A0C0, 0x18F8B83C, + 0x80000000, 0x00000000, + 0x8275A0C0, 0xE70747C3, + 0x89BE50C3, 0xCF043AB2, + 0x9592675B, 0xB8E31319, + 0xA57D8666, 0xA57D8666, + 0xB8E31319, 0x9592675B, + 0xCF043AB2, 0x89BE50C3, + 0xE70747C3, 0x8275A0C0 +}; + +/** +* \par +* Example code for Q31 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefQ31[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefQ31[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 64 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to Q31(Fixed point 1.31): +* round(twiddleCoefQ31(i) * pow(2, 31)) +* +*/ +const q31_t twiddleCoef_64_q31[96] = { + 0x7FFFFFFF, 0x00000000, + 0x7F62368F, 0x0C8BD35E, + 0x7D8A5F3F, 0x18F8B83C, + 0x7A7D055B, 0x25280C5D, + 0x7641AF3C, 0x30FBC54D, + 0x70E2CBC6, 0x3C56BA70, + 0x6A6D98A4, 0x471CECE6, + 0x62F201AC, 0x5133CC94, + 0x5A82799A, 0x5A82799A, + 0x5133CC94, 0x62F201AC, + 0x471CECE6, 0x6A6D98A4, + 0x3C56BA70, 0x70E2CBC6, + 0x30FBC54D, 0x7641AF3C, + 0x25280C5D, 0x7A7D055B, + 0x18F8B83C, 0x7D8A5F3F, + 0x0C8BD35E, 0x7F62368F, + 0x00000000, 0x7FFFFFFF, + 0xF3742CA1, 0x7F62368F, + 0xE70747C3, 0x7D8A5F3F, + 0xDAD7F3A2, 0x7A7D055B, + 0xCF043AB2, 0x7641AF3C, + 0xC3A9458F, 0x70E2CBC6, + 0xB8E31319, 0x6A6D98A4, + 0xAECC336B, 0x62F201AC, + 0xA57D8666, 0x5A82799A, + 0x9D0DFE53, 0x5133CC94, + 0x9592675B, 0x471CECE6, + 0x8F1D343A, 0x3C56BA70, + 0x89BE50C3, 0x30FBC54D, + 0x8582FAA4, 0x25280C5D, + 0x8275A0C0, 0x18F8B83C, + 0x809DC970, 0x0C8BD35E, + 0x80000000, 0x00000000, + 0x809DC970, 0xF3742CA1, + 0x8275A0C0, 0xE70747C3, + 0x8582FAA4, 0xDAD7F3A2, + 0x89BE50C3, 0xCF043AB2, + 0x8F1D343A, 0xC3A9458F, + 0x9592675B, 0xB8E31319, + 0x9D0DFE53, 0xAECC336B, + 0xA57D8666, 0xA57D8666, + 0xAECC336B, 0x9D0DFE53, + 0xB8E31319, 0x9592675B, + 0xC3A9458F, 0x8F1D343A, + 0xCF043AB2, 0x89BE50C3, + 0xDAD7F3A2, 0x8582FAA4, + 0xE70747C3, 0x8275A0C0, + 0xF3742CA1, 0x809DC970 +}; + +/** +* \par +* Example code for Q31 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefQ31[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefQ31[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 128 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to Q31(Fixed point 1.31): +* round(twiddleCoefQ31(i) * pow(2, 31)) +* +*/ +const q31_t twiddleCoef_128_q31[192] = { + 0x7FFFFFFF, 0x00000000, + 0x7FD8878D, 0x0647D97C, + 0x7F62368F, 0x0C8BD35E, + 0x7E9D55FC, 0x12C8106E, + 0x7D8A5F3F, 0x18F8B83C, + 0x7C29FBEE, 0x1F19F97B, + 0x7A7D055B, 0x25280C5D, + 0x78848413, 0x2B1F34EB, + 0x7641AF3C, 0x30FBC54D, + 0x73B5EBD0, 0x36BA2013, + 0x70E2CBC6, 0x3C56BA70, + 0x6DCA0D14, 0x41CE1E64, + 0x6A6D98A4, 0x471CECE6, + 0x66CF811F, 0x4C3FDFF3, + 0x62F201AC, 0x5133CC94, + 0x5ED77C89, 0x55F5A4D2, + 0x5A82799A, 0x5A82799A, + 0x55F5A4D2, 0x5ED77C89, + 0x5133CC94, 0x62F201AC, + 0x4C3FDFF3, 0x66CF811F, + 0x471CECE6, 0x6A6D98A4, + 0x41CE1E64, 0x6DCA0D14, + 0x3C56BA70, 0x70E2CBC6, + 0x36BA2013, 0x73B5EBD0, + 0x30FBC54D, 0x7641AF3C, + 0x2B1F34EB, 0x78848413, + 0x25280C5D, 0x7A7D055B, + 0x1F19F97B, 0x7C29FBEE, + 0x18F8B83C, 0x7D8A5F3F, + 0x12C8106E, 0x7E9D55FC, + 0x0C8BD35E, 0x7F62368F, + 0x0647D97C, 0x7FD8878D, + 0x00000000, 0x7FFFFFFF, + 0xF9B82683, 0x7FD8878D, + 0xF3742CA1, 0x7F62368F, + 0xED37EF91, 0x7E9D55FC, + 0xE70747C3, 0x7D8A5F3F, + 0xE0E60684, 0x7C29FBEE, + 0xDAD7F3A2, 0x7A7D055B, + 0xD4E0CB14, 0x78848413, + 0xCF043AB2, 0x7641AF3C, + 0xC945DFEC, 0x73B5EBD0, + 0xC3A9458F, 0x70E2CBC6, + 0xBE31E19B, 0x6DCA0D14, + 0xB8E31319, 0x6A6D98A4, + 0xB3C0200C, 0x66CF811F, + 0xAECC336B, 0x62F201AC, + 0xAA0A5B2D, 0x5ED77C89, + 0xA57D8666, 0x5A82799A, + 0xA1288376, 0x55F5A4D2, + 0x9D0DFE53, 0x5133CC94, + 0x99307EE0, 0x4C3FDFF3, + 0x9592675B, 0x471CECE6, + 0x9235F2EB, 0x41CE1E64, + 0x8F1D343A, 0x3C56BA70, + 0x8C4A142F, 0x36BA2013, + 0x89BE50C3, 0x30FBC54D, + 0x877B7BEC, 0x2B1F34EB, + 0x8582FAA4, 0x25280C5D, + 0x83D60411, 0x1F19F97B, + 0x8275A0C0, 0x18F8B83C, + 0x8162AA03, 0x12C8106E, + 0x809DC970, 0x0C8BD35E, + 0x80277872, 0x0647D97C, + 0x80000000, 0x00000000, + 0x80277872, 0xF9B82683, + 0x809DC970, 0xF3742CA1, + 0x8162AA03, 0xED37EF91, + 0x8275A0C0, 0xE70747C3, + 0x83D60411, 0xE0E60684, + 0x8582FAA4, 0xDAD7F3A2, + 0x877B7BEC, 0xD4E0CB14, + 0x89BE50C3, 0xCF043AB2, + 0x8C4A142F, 0xC945DFEC, + 0x8F1D343A, 0xC3A9458F, + 0x9235F2EB, 0xBE31E19B, + 0x9592675B, 0xB8E31319, + 0x99307EE0, 0xB3C0200C, + 0x9D0DFE53, 0xAECC336B, + 0xA1288376, 0xAA0A5B2D, + 0xA57D8666, 0xA57D8666, + 0xAA0A5B2D, 0xA1288376, + 0xAECC336B, 0x9D0DFE53, + 0xB3C0200C, 0x99307EE0, + 0xB8E31319, 0x9592675B, + 0xBE31E19B, 0x9235F2EB, + 0xC3A9458F, 0x8F1D343A, + 0xC945DFEC, 0x8C4A142F, + 0xCF043AB2, 0x89BE50C3, + 0xD4E0CB14, 0x877B7BEC, + 0xDAD7F3A2, 0x8582FAA4, + 0xE0E60684, 0x83D60411, + 0xE70747C3, 0x8275A0C0, + 0xED37EF91, 0x8162AA03, + 0xF3742CA1, 0x809DC970, + 0xF9B82683, 0x80277872 +}; + +/** +* \par +* Example code for Q31 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefQ31[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefQ31[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 256 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to Q31(Fixed point 1.31): +* round(twiddleCoefQ31(i) * pow(2, 31)) +* +*/ +const q31_t twiddleCoef_256_q31[384] = { + 0x7FFFFFFF, 0x00000000, + 0x7FF62182, 0x03242ABF, + 0x7FD8878D, 0x0647D97C, + 0x7FA736B4, 0x096A9049, + 0x7F62368F, 0x0C8BD35E, + 0x7F0991C3, 0x0FAB272B, + 0x7E9D55FC, 0x12C8106E, + 0x7E1D93E9, 0x15E21444, + 0x7D8A5F3F, 0x18F8B83C, + 0x7CE3CEB1, 0x1C0B826A, + 0x7C29FBEE, 0x1F19F97B, + 0x7B5D039D, 0x2223A4C5, + 0x7A7D055B, 0x25280C5D, + 0x798A23B1, 0x2826B928, + 0x78848413, 0x2B1F34EB, + 0x776C4EDB, 0x2E110A62, + 0x7641AF3C, 0x30FBC54D, + 0x7504D345, 0x33DEF287, + 0x73B5EBD0, 0x36BA2013, + 0x72552C84, 0x398CDD32, + 0x70E2CBC6, 0x3C56BA70, + 0x6F5F02B1, 0x3F1749B7, + 0x6DCA0D14, 0x41CE1E64, + 0x6C242960, 0x447ACD50, + 0x6A6D98A4, 0x471CECE6, + 0x68A69E81, 0x49B41533, + 0x66CF811F, 0x4C3FDFF3, + 0x64E88926, 0x4EBFE8A4, + 0x62F201AC, 0x5133CC94, + 0x60EC3830, 0x539B2AEF, + 0x5ED77C89, 0x55F5A4D2, + 0x5CB420DF, 0x5842DD54, + 0x5A82799A, 0x5A82799A, + 0x5842DD54, 0x5CB420DF, + 0x55F5A4D2, 0x5ED77C89, + 0x539B2AEF, 0x60EC3830, + 0x5133CC94, 0x62F201AC, + 0x4EBFE8A4, 0x64E88926, + 0x4C3FDFF3, 0x66CF811F, + 0x49B41533, 0x68A69E81, + 0x471CECE6, 0x6A6D98A4, + 0x447ACD50, 0x6C242960, + 0x41CE1E64, 0x6DCA0D14, + 0x3F1749B7, 0x6F5F02B1, + 0x3C56BA70, 0x70E2CBC6, + 0x398CDD32, 0x72552C84, + 0x36BA2013, 0x73B5EBD0, + 0x33DEF287, 0x7504D345, + 0x30FBC54D, 0x7641AF3C, + 0x2E110A62, 0x776C4EDB, + 0x2B1F34EB, 0x78848413, + 0x2826B928, 0x798A23B1, + 0x25280C5D, 0x7A7D055B, + 0x2223A4C5, 0x7B5D039D, + 0x1F19F97B, 0x7C29FBEE, + 0x1C0B826A, 0x7CE3CEB1, + 0x18F8B83C, 0x7D8A5F3F, + 0x15E21444, 0x7E1D93E9, + 0x12C8106E, 0x7E9D55FC, + 0x0FAB272B, 0x7F0991C3, + 0x0C8BD35E, 0x7F62368F, + 0x096A9049, 0x7FA736B4, + 0x0647D97C, 0x7FD8878D, + 0x03242ABF, 0x7FF62182, + 0x00000000, 0x7FFFFFFF, + 0xFCDBD541, 0x7FF62182, + 0xF9B82683, 0x7FD8878D, + 0xF6956FB6, 0x7FA736B4, + 0xF3742CA1, 0x7F62368F, + 0xF054D8D4, 0x7F0991C3, + 0xED37EF91, 0x7E9D55FC, + 0xEA1DEBBB, 0x7E1D93E9, + 0xE70747C3, 0x7D8A5F3F, + 0xE3F47D95, 0x7CE3CEB1, + 0xE0E60684, 0x7C29FBEE, + 0xDDDC5B3A, 0x7B5D039D, + 0xDAD7F3A2, 0x7A7D055B, + 0xD7D946D7, 0x798A23B1, + 0xD4E0CB14, 0x78848413, + 0xD1EEF59E, 0x776C4EDB, + 0xCF043AB2, 0x7641AF3C, + 0xCC210D78, 0x7504D345, + 0xC945DFEC, 0x73B5EBD0, + 0xC67322CD, 0x72552C84, + 0xC3A9458F, 0x70E2CBC6, + 0xC0E8B648, 0x6F5F02B1, + 0xBE31E19B, 0x6DCA0D14, + 0xBB8532AF, 0x6C242960, + 0xB8E31319, 0x6A6D98A4, + 0xB64BEACC, 0x68A69E81, + 0xB3C0200C, 0x66CF811F, + 0xB140175B, 0x64E88926, + 0xAECC336B, 0x62F201AC, + 0xAC64D510, 0x60EC3830, + 0xAA0A5B2D, 0x5ED77C89, + 0xA7BD22AB, 0x5CB420DF, + 0xA57D8666, 0x5A82799A, + 0xA34BDF20, 0x5842DD54, + 0xA1288376, 0x55F5A4D2, + 0x9F13C7D0, 0x539B2AEF, + 0x9D0DFE53, 0x5133CC94, + 0x9B1776D9, 0x4EBFE8A4, + 0x99307EE0, 0x4C3FDFF3, + 0x9759617E, 0x49B41533, + 0x9592675B, 0x471CECE6, + 0x93DBD69F, 0x447ACD50, + 0x9235F2EB, 0x41CE1E64, + 0x90A0FD4E, 0x3F1749B7, + 0x8F1D343A, 0x3C56BA70, + 0x8DAAD37B, 0x398CDD32, + 0x8C4A142F, 0x36BA2013, + 0x8AFB2CBA, 0x33DEF287, + 0x89BE50C3, 0x30FBC54D, + 0x8893B124, 0x2E110A62, + 0x877B7BEC, 0x2B1F34EB, + 0x8675DC4E, 0x2826B928, + 0x8582FAA4, 0x25280C5D, + 0x84A2FC62, 0x2223A4C5, + 0x83D60411, 0x1F19F97B, + 0x831C314E, 0x1C0B826A, + 0x8275A0C0, 0x18F8B83C, + 0x81E26C16, 0x15E21444, + 0x8162AA03, 0x12C8106E, + 0x80F66E3C, 0x0FAB272B, + 0x809DC970, 0x0C8BD35E, + 0x8058C94C, 0x096A9049, + 0x80277872, 0x0647D97C, + 0x8009DE7D, 0x03242ABF, + 0x80000000, 0x00000000, + 0x8009DE7D, 0xFCDBD541, + 0x80277872, 0xF9B82683, + 0x8058C94C, 0xF6956FB6, + 0x809DC970, 0xF3742CA1, + 0x80F66E3C, 0xF054D8D4, + 0x8162AA03, 0xED37EF91, + 0x81E26C16, 0xEA1DEBBB, + 0x8275A0C0, 0xE70747C3, + 0x831C314E, 0xE3F47D95, + 0x83D60411, 0xE0E60684, + 0x84A2FC62, 0xDDDC5B3A, + 0x8582FAA4, 0xDAD7F3A2, + 0x8675DC4E, 0xD7D946D7, + 0x877B7BEC, 0xD4E0CB14, + 0x8893B124, 0xD1EEF59E, + 0x89BE50C3, 0xCF043AB2, + 0x8AFB2CBA, 0xCC210D78, + 0x8C4A142F, 0xC945DFEC, + 0x8DAAD37B, 0xC67322CD, + 0x8F1D343A, 0xC3A9458F, + 0x90A0FD4E, 0xC0E8B648, + 0x9235F2EB, 0xBE31E19B, + 0x93DBD69F, 0xBB8532AF, + 0x9592675B, 0xB8E31319, + 0x9759617E, 0xB64BEACC, + 0x99307EE0, 0xB3C0200C, + 0x9B1776D9, 0xB140175B, + 0x9D0DFE53, 0xAECC336B, + 0x9F13C7D0, 0xAC64D510, + 0xA1288376, 0xAA0A5B2D, + 0xA34BDF20, 0xA7BD22AB, + 0xA57D8666, 0xA57D8666, + 0xA7BD22AB, 0xA34BDF20, + 0xAA0A5B2D, 0xA1288376, + 0xAC64D510, 0x9F13C7D0, + 0xAECC336B, 0x9D0DFE53, + 0xB140175B, 0x9B1776D9, + 0xB3C0200C, 0x99307EE0, + 0xB64BEACC, 0x9759617E, + 0xB8E31319, 0x9592675B, + 0xBB8532AF, 0x93DBD69F, + 0xBE31E19B, 0x9235F2EB, + 0xC0E8B648, 0x90A0FD4E, + 0xC3A9458F, 0x8F1D343A, + 0xC67322CD, 0x8DAAD37B, + 0xC945DFEC, 0x8C4A142F, + 0xCC210D78, 0x8AFB2CBA, + 0xCF043AB2, 0x89BE50C3, + 0xD1EEF59E, 0x8893B124, + 0xD4E0CB14, 0x877B7BEC, + 0xD7D946D7, 0x8675DC4E, + 0xDAD7F3A2, 0x8582FAA4, + 0xDDDC5B3A, 0x84A2FC62, + 0xE0E60684, 0x83D60411, + 0xE3F47D95, 0x831C314E, + 0xE70747C3, 0x8275A0C0, + 0xEA1DEBBB, 0x81E26C16, + 0xED37EF91, 0x8162AA03, + 0xF054D8D4, 0x80F66E3C, + 0xF3742CA1, 0x809DC970, + 0xF6956FB6, 0x8058C94C, + 0xF9B82683, 0x80277872, + 0xFCDBD541, 0x8009DE7D +}; + +/** +* \par +* Example code for Q31 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefQ31[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefQ31[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 512 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to Q31(Fixed point 1.31): +* round(twiddleCoefQ31(i) * pow(2, 31)) +* +*/ +const q31_t twiddleCoef_512_q31[768] = { + 0x7FFFFFFF, 0x00000000, + 0x7FFD885A, 0x01921D1F, + 0x7FF62182, 0x03242ABF, + 0x7FE9CBC0, 0x04B6195D, + 0x7FD8878D, 0x0647D97C, + 0x7FC25596, 0x07D95B9E, + 0x7FA736B4, 0x096A9049, + 0x7F872BF3, 0x0AFB6805, + 0x7F62368F, 0x0C8BD35E, + 0x7F3857F5, 0x0E1BC2E3, + 0x7F0991C3, 0x0FAB272B, + 0x7ED5E5C6, 0x1139F0CE, + 0x7E9D55FC, 0x12C8106E, + 0x7E5FE493, 0x145576B1, + 0x7E1D93E9, 0x15E21444, + 0x7DD6668E, 0x176DD9DE, + 0x7D8A5F3F, 0x18F8B83C, + 0x7D3980EC, 0x1A82A025, + 0x7CE3CEB1, 0x1C0B826A, + 0x7C894BDD, 0x1D934FE5, + 0x7C29FBEE, 0x1F19F97B, + 0x7BC5E28F, 0x209F701C, + 0x7B5D039D, 0x2223A4C5, + 0x7AEF6323, 0x23A6887E, + 0x7A7D055B, 0x25280C5D, + 0x7A05EEAD, 0x26A82185, + 0x798A23B1, 0x2826B928, + 0x7909A92C, 0x29A3C484, + 0x78848413, 0x2B1F34EB, + 0x77FAB988, 0x2C98FBBA, + 0x776C4EDB, 0x2E110A62, + 0x76D94988, 0x2F875262, + 0x7641AF3C, 0x30FBC54D, + 0x75A585CF, 0x326E54C7, + 0x7504D345, 0x33DEF287, + 0x745F9DD1, 0x354D9056, + 0x73B5EBD0, 0x36BA2013, + 0x7307C3D0, 0x382493B0, + 0x72552C84, 0x398CDD32, + 0x719E2CD2, 0x3AF2EEB7, + 0x70E2CBC6, 0x3C56BA70, + 0x70231099, 0x3DB832A5, + 0x6F5F02B1, 0x3F1749B7, + 0x6E96A99C, 0x4073F21D, + 0x6DCA0D14, 0x41CE1E64, + 0x6CF934FB, 0x4325C135, + 0x6C242960, 0x447ACD50, + 0x6B4AF278, 0x45CD358F, + 0x6A6D98A4, 0x471CECE6, + 0x698C246C, 0x4869E664, + 0x68A69E81, 0x49B41533, + 0x67BD0FBC, 0x4AFB6C97, + 0x66CF811F, 0x4C3FDFF3, + 0x65DDFBD3, 0x4D8162C4, + 0x64E88926, 0x4EBFE8A4, + 0x63EF328F, 0x4FFB654D, + 0x62F201AC, 0x5133CC94, + 0x61F1003E, 0x5269126E, + 0x60EC3830, 0x539B2AEF, + 0x5FE3B38D, 0x54CA0A4A, + 0x5ED77C89, 0x55F5A4D2, + 0x5DC79D7C, 0x571DEEF9, + 0x5CB420DF, 0x5842DD54, + 0x5B9D1153, 0x59646497, + 0x5A82799A, 0x5A82799A, + 0x59646497, 0x5B9D1153, + 0x5842DD54, 0x5CB420DF, + 0x571DEEF9, 0x5DC79D7C, + 0x55F5A4D2, 0x5ED77C89, + 0x54CA0A4A, 0x5FE3B38D, + 0x539B2AEF, 0x60EC3830, + 0x5269126E, 0x61F1003E, + 0x5133CC94, 0x62F201AC, + 0x4FFB654D, 0x63EF328F, + 0x4EBFE8A4, 0x64E88926, + 0x4D8162C4, 0x65DDFBD3, + 0x4C3FDFF3, 0x66CF811F, + 0x4AFB6C97, 0x67BD0FBC, + 0x49B41533, 0x68A69E81, + 0x4869E664, 0x698C246C, + 0x471CECE6, 0x6A6D98A4, + 0x45CD358F, 0x6B4AF278, + 0x447ACD50, 0x6C242960, + 0x4325C135, 0x6CF934FB, + 0x41CE1E64, 0x6DCA0D14, + 0x4073F21D, 0x6E96A99C, + 0x3F1749B7, 0x6F5F02B1, + 0x3DB832A5, 0x70231099, + 0x3C56BA70, 0x70E2CBC6, + 0x3AF2EEB7, 0x719E2CD2, + 0x398CDD32, 0x72552C84, + 0x382493B0, 0x7307C3D0, + 0x36BA2013, 0x73B5EBD0, + 0x354D9056, 0x745F9DD1, + 0x33DEF287, 0x7504D345, + 0x326E54C7, 0x75A585CF, + 0x30FBC54D, 0x7641AF3C, + 0x2F875262, 0x76D94988, + 0x2E110A62, 0x776C4EDB, + 0x2C98FBBA, 0x77FAB988, + 0x2B1F34EB, 0x78848413, + 0x29A3C484, 0x7909A92C, + 0x2826B928, 0x798A23B1, + 0x26A82185, 0x7A05EEAD, + 0x25280C5D, 0x7A7D055B, + 0x23A6887E, 0x7AEF6323, + 0x2223A4C5, 0x7B5D039D, + 0x209F701C, 0x7BC5E28F, + 0x1F19F97B, 0x7C29FBEE, + 0x1D934FE5, 0x7C894BDD, + 0x1C0B826A, 0x7CE3CEB1, + 0x1A82A025, 0x7D3980EC, + 0x18F8B83C, 0x7D8A5F3F, + 0x176DD9DE, 0x7DD6668E, + 0x15E21444, 0x7E1D93E9, + 0x145576B1, 0x7E5FE493, + 0x12C8106E, 0x7E9D55FC, + 0x1139F0CE, 0x7ED5E5C6, + 0x0FAB272B, 0x7F0991C3, + 0x0E1BC2E3, 0x7F3857F5, + 0x0C8BD35E, 0x7F62368F, + 0x0AFB6805, 0x7F872BF3, + 0x096A9049, 0x7FA736B4, + 0x07D95B9E, 0x7FC25596, + 0x0647D97C, 0x7FD8878D, + 0x04B6195D, 0x7FE9CBC0, + 0x03242ABF, 0x7FF62182, + 0x01921D1F, 0x7FFD885A, + 0x00000000, 0x7FFFFFFF, + 0xFE6DE2E0, 0x7FFD885A, + 0xFCDBD541, 0x7FF62182, + 0xFB49E6A2, 0x7FE9CBC0, + 0xF9B82683, 0x7FD8878D, + 0xF826A461, 0x7FC25596, + 0xF6956FB6, 0x7FA736B4, + 0xF50497FA, 0x7F872BF3, + 0xF3742CA1, 0x7F62368F, + 0xF1E43D1C, 0x7F3857F5, + 0xF054D8D4, 0x7F0991C3, + 0xEEC60F31, 0x7ED5E5C6, + 0xED37EF91, 0x7E9D55FC, + 0xEBAA894E, 0x7E5FE493, + 0xEA1DEBBB, 0x7E1D93E9, + 0xE8922621, 0x7DD6668E, + 0xE70747C3, 0x7D8A5F3F, + 0xE57D5FDA, 0x7D3980EC, + 0xE3F47D95, 0x7CE3CEB1, + 0xE26CB01A, 0x7C894BDD, + 0xE0E60684, 0x7C29FBEE, + 0xDF608FE3, 0x7BC5E28F, + 0xDDDC5B3A, 0x7B5D039D, + 0xDC597781, 0x7AEF6323, + 0xDAD7F3A2, 0x7A7D055B, + 0xD957DE7A, 0x7A05EEAD, + 0xD7D946D7, 0x798A23B1, + 0xD65C3B7B, 0x7909A92C, + 0xD4E0CB14, 0x78848413, + 0xD3670445, 0x77FAB988, + 0xD1EEF59E, 0x776C4EDB, + 0xD078AD9D, 0x76D94988, + 0xCF043AB2, 0x7641AF3C, + 0xCD91AB38, 0x75A585CF, + 0xCC210D78, 0x7504D345, + 0xCAB26FA9, 0x745F9DD1, + 0xC945DFEC, 0x73B5EBD0, + 0xC7DB6C50, 0x7307C3D0, + 0xC67322CD, 0x72552C84, + 0xC50D1148, 0x719E2CD2, + 0xC3A9458F, 0x70E2CBC6, + 0xC247CD5A, 0x70231099, + 0xC0E8B648, 0x6F5F02B1, + 0xBF8C0DE2, 0x6E96A99C, + 0xBE31E19B, 0x6DCA0D14, + 0xBCDA3ECA, 0x6CF934FB, + 0xBB8532AF, 0x6C242960, + 0xBA32CA70, 0x6B4AF278, + 0xB8E31319, 0x6A6D98A4, + 0xB796199B, 0x698C246C, + 0xB64BEACC, 0x68A69E81, + 0xB5049368, 0x67BD0FBC, + 0xB3C0200C, 0x66CF811F, + 0xB27E9D3B, 0x65DDFBD3, + 0xB140175B, 0x64E88926, + 0xB0049AB2, 0x63EF328F, + 0xAECC336B, 0x62F201AC, + 0xAD96ED91, 0x61F1003E, + 0xAC64D510, 0x60EC3830, + 0xAB35F5B5, 0x5FE3B38D, + 0xAA0A5B2D, 0x5ED77C89, + 0xA8E21106, 0x5DC79D7C, + 0xA7BD22AB, 0x5CB420DF, + 0xA69B9B68, 0x5B9D1153, + 0xA57D8666, 0x5A82799A, + 0xA462EEAC, 0x59646497, + 0xA34BDF20, 0x5842DD54, + 0xA2386283, 0x571DEEF9, + 0xA1288376, 0x55F5A4D2, + 0xA01C4C72, 0x54CA0A4A, + 0x9F13C7D0, 0x539B2AEF, + 0x9E0EFFC1, 0x5269126E, + 0x9D0DFE53, 0x5133CC94, + 0x9C10CD70, 0x4FFB654D, + 0x9B1776D9, 0x4EBFE8A4, + 0x9A22042C, 0x4D8162C4, + 0x99307EE0, 0x4C3FDFF3, + 0x9842F043, 0x4AFB6C97, + 0x9759617E, 0x49B41533, + 0x9673DB94, 0x4869E664, + 0x9592675B, 0x471CECE6, + 0x94B50D87, 0x45CD358F, + 0x93DBD69F, 0x447ACD50, + 0x9306CB04, 0x4325C135, + 0x9235F2EB, 0x41CE1E64, + 0x91695663, 0x4073F21D, + 0x90A0FD4E, 0x3F1749B7, + 0x8FDCEF66, 0x3DB832A5, + 0x8F1D343A, 0x3C56BA70, + 0x8E61D32D, 0x3AF2EEB7, + 0x8DAAD37B, 0x398CDD32, + 0x8CF83C30, 0x382493B0, + 0x8C4A142F, 0x36BA2013, + 0x8BA0622F, 0x354D9056, + 0x8AFB2CBA, 0x33DEF287, + 0x8A5A7A30, 0x326E54C7, + 0x89BE50C3, 0x30FBC54D, + 0x8926B677, 0x2F875262, + 0x8893B124, 0x2E110A62, + 0x88054677, 0x2C98FBBA, + 0x877B7BEC, 0x2B1F34EB, + 0x86F656D3, 0x29A3C484, + 0x8675DC4E, 0x2826B928, + 0x85FA1152, 0x26A82185, + 0x8582FAA4, 0x25280C5D, + 0x85109CDC, 0x23A6887E, + 0x84A2FC62, 0x2223A4C5, + 0x843A1D70, 0x209F701C, + 0x83D60411, 0x1F19F97B, + 0x8376B422, 0x1D934FE5, + 0x831C314E, 0x1C0B826A, + 0x82C67F13, 0x1A82A025, + 0x8275A0C0, 0x18F8B83C, + 0x82299971, 0x176DD9DE, + 0x81E26C16, 0x15E21444, + 0x81A01B6C, 0x145576B1, + 0x8162AA03, 0x12C8106E, + 0x812A1A39, 0x1139F0CE, + 0x80F66E3C, 0x0FAB272B, + 0x80C7A80A, 0x0E1BC2E3, + 0x809DC970, 0x0C8BD35E, + 0x8078D40D, 0x0AFB6805, + 0x8058C94C, 0x096A9049, + 0x803DAA69, 0x07D95B9E, + 0x80277872, 0x0647D97C, + 0x80163440, 0x04B6195D, + 0x8009DE7D, 0x03242ABF, + 0x800277A5, 0x01921D1F, + 0x80000000, 0x00000000, + 0x800277A5, 0xFE6DE2E0, + 0x8009DE7D, 0xFCDBD541, + 0x80163440, 0xFB49E6A2, + 0x80277872, 0xF9B82683, + 0x803DAA69, 0xF826A461, + 0x8058C94C, 0xF6956FB6, + 0x8078D40D, 0xF50497FA, + 0x809DC970, 0xF3742CA1, + 0x80C7A80A, 0xF1E43D1C, + 0x80F66E3C, 0xF054D8D4, + 0x812A1A39, 0xEEC60F31, + 0x8162AA03, 0xED37EF91, + 0x81A01B6C, 0xEBAA894E, + 0x81E26C16, 0xEA1DEBBB, + 0x82299971, 0xE8922621, + 0x8275A0C0, 0xE70747C3, + 0x82C67F13, 0xE57D5FDA, + 0x831C314E, 0xE3F47D95, + 0x8376B422, 0xE26CB01A, + 0x83D60411, 0xE0E60684, + 0x843A1D70, 0xDF608FE3, + 0x84A2FC62, 0xDDDC5B3A, + 0x85109CDC, 0xDC597781, + 0x8582FAA4, 0xDAD7F3A2, + 0x85FA1152, 0xD957DE7A, + 0x8675DC4E, 0xD7D946D7, + 0x86F656D3, 0xD65C3B7B, + 0x877B7BEC, 0xD4E0CB14, + 0x88054677, 0xD3670445, + 0x8893B124, 0xD1EEF59E, + 0x8926B677, 0xD078AD9D, + 0x89BE50C3, 0xCF043AB2, + 0x8A5A7A30, 0xCD91AB38, + 0x8AFB2CBA, 0xCC210D78, + 0x8BA0622F, 0xCAB26FA9, + 0x8C4A142F, 0xC945DFEC, + 0x8CF83C30, 0xC7DB6C50, + 0x8DAAD37B, 0xC67322CD, + 0x8E61D32D, 0xC50D1148, + 0x8F1D343A, 0xC3A9458F, + 0x8FDCEF66, 0xC247CD5A, + 0x90A0FD4E, 0xC0E8B648, + 0x91695663, 0xBF8C0DE2, + 0x9235F2EB, 0xBE31E19B, + 0x9306CB04, 0xBCDA3ECA, + 0x93DBD69F, 0xBB8532AF, + 0x94B50D87, 0xBA32CA70, + 0x9592675B, 0xB8E31319, + 0x9673DB94, 0xB796199B, + 0x9759617E, 0xB64BEACC, + 0x9842F043, 0xB5049368, + 0x99307EE0, 0xB3C0200C, + 0x9A22042C, 0xB27E9D3B, + 0x9B1776D9, 0xB140175B, + 0x9C10CD70, 0xB0049AB2, + 0x9D0DFE53, 0xAECC336B, + 0x9E0EFFC1, 0xAD96ED91, + 0x9F13C7D0, 0xAC64D510, + 0xA01C4C72, 0xAB35F5B5, + 0xA1288376, 0xAA0A5B2D, + 0xA2386283, 0xA8E21106, + 0xA34BDF20, 0xA7BD22AB, + 0xA462EEAC, 0xA69B9B68, + 0xA57D8666, 0xA57D8666, + 0xA69B9B68, 0xA462EEAC, + 0xA7BD22AB, 0xA34BDF20, + 0xA8E21106, 0xA2386283, + 0xAA0A5B2D, 0xA1288376, + 0xAB35F5B5, 0xA01C4C72, + 0xAC64D510, 0x9F13C7D0, + 0xAD96ED91, 0x9E0EFFC1, + 0xAECC336B, 0x9D0DFE53, + 0xB0049AB2, 0x9C10CD70, + 0xB140175B, 0x9B1776D9, + 0xB27E9D3B, 0x9A22042C, + 0xB3C0200C, 0x99307EE0, + 0xB5049368, 0x9842F043, + 0xB64BEACC, 0x9759617E, + 0xB796199B, 0x9673DB94, + 0xB8E31319, 0x9592675B, + 0xBA32CA70, 0x94B50D87, + 0xBB8532AF, 0x93DBD69F, + 0xBCDA3ECA, 0x9306CB04, + 0xBE31E19B, 0x9235F2EB, + 0xBF8C0DE2, 0x91695663, + 0xC0E8B648, 0x90A0FD4E, + 0xC247CD5A, 0x8FDCEF66, + 0xC3A9458F, 0x8F1D343A, + 0xC50D1148, 0x8E61D32D, + 0xC67322CD, 0x8DAAD37B, + 0xC7DB6C50, 0x8CF83C30, + 0xC945DFEC, 0x8C4A142F, + 0xCAB26FA9, 0x8BA0622F, + 0xCC210D78, 0x8AFB2CBA, + 0xCD91AB38, 0x8A5A7A30, + 0xCF043AB2, 0x89BE50C3, + 0xD078AD9D, 0x8926B677, + 0xD1EEF59E, 0x8893B124, + 0xD3670445, 0x88054677, + 0xD4E0CB14, 0x877B7BEC, + 0xD65C3B7B, 0x86F656D3, + 0xD7D946D7, 0x8675DC4E, + 0xD957DE7A, 0x85FA1152, + 0xDAD7F3A2, 0x8582FAA4, + 0xDC597781, 0x85109CDC, + 0xDDDC5B3A, 0x84A2FC62, + 0xDF608FE3, 0x843A1D70, + 0xE0E60684, 0x83D60411, + 0xE26CB01A, 0x8376B422, + 0xE3F47D95, 0x831C314E, + 0xE57D5FDA, 0x82C67F13, + 0xE70747C3, 0x8275A0C0, + 0xE8922621, 0x82299971, + 0xEA1DEBBB, 0x81E26C16, + 0xEBAA894E, 0x81A01B6C, + 0xED37EF91, 0x8162AA03, + 0xEEC60F31, 0x812A1A39, + 0xF054D8D4, 0x80F66E3C, + 0xF1E43D1C, 0x80C7A80A, + 0xF3742CA1, 0x809DC970, + 0xF50497FA, 0x8078D40D, + 0xF6956FB6, 0x8058C94C, + 0xF826A461, 0x803DAA69, + 0xF9B82683, 0x80277872, + 0xFB49E6A2, 0x80163440, + 0xFCDBD541, 0x8009DE7D, + 0xFE6DE2E0, 0x800277A5 +}; + +/** +* \par +* Example code for Q31 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefQ31[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefQ31[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 1024 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to Q31(Fixed point 1.31): +* round(twiddleCoefQ31(i) * pow(2, 31)) +* +*/ +const q31_t twiddleCoef_1024_q31[1536] = { + 0x7FFFFFFF, 0x00000000, + 0x7FFF6216, 0x00C90F88, + 0x7FFD885A, 0x01921D1F, + 0x7FFA72D1, 0x025B26D7, + 0x7FF62182, 0x03242ABF, + 0x7FF09477, 0x03ED26E6, + 0x7FE9CBC0, 0x04B6195D, + 0x7FE1C76B, 0x057F0034, + 0x7FD8878D, 0x0647D97C, + 0x7FCE0C3E, 0x0710A344, + 0x7FC25596, 0x07D95B9E, + 0x7FB563B2, 0x08A2009A, + 0x7FA736B4, 0x096A9049, + 0x7F97CEBC, 0x0A3308BC, + 0x7F872BF3, 0x0AFB6805, + 0x7F754E7F, 0x0BC3AC35, + 0x7F62368F, 0x0C8BD35E, + 0x7F4DE450, 0x0D53DB92, + 0x7F3857F5, 0x0E1BC2E3, + 0x7F2191B4, 0x0EE38765, + 0x7F0991C3, 0x0FAB272B, + 0x7EF0585F, 0x1072A047, + 0x7ED5E5C6, 0x1139F0CE, + 0x7EBA3A39, 0x120116D4, + 0x7E9D55FC, 0x12C8106E, + 0x7E7F3956, 0x138EDBB0, + 0x7E5FE493, 0x145576B1, + 0x7E3F57FE, 0x151BDF85, + 0x7E1D93E9, 0x15E21444, + 0x7DFA98A7, 0x16A81305, + 0x7DD6668E, 0x176DD9DE, + 0x7DB0FDF7, 0x183366E8, + 0x7D8A5F3F, 0x18F8B83C, + 0x7D628AC5, 0x19BDCBF2, + 0x7D3980EC, 0x1A82A025, + 0x7D0F4218, 0x1B4732EF, + 0x7CE3CEB1, 0x1C0B826A, + 0x7CB72724, 0x1CCF8CB3, + 0x7C894BDD, 0x1D934FE5, + 0x7C5A3D4F, 0x1E56CA1E, + 0x7C29FBEE, 0x1F19F97B, + 0x7BF88830, 0x1FDCDC1A, + 0x7BC5E28F, 0x209F701C, + 0x7B920B89, 0x2161B39F, + 0x7B5D039D, 0x2223A4C5, + 0x7B26CB4F, 0x22E541AE, + 0x7AEF6323, 0x23A6887E, + 0x7AB6CBA3, 0x24677757, + 0x7A7D055B, 0x25280C5D, + 0x7A4210D8, 0x25E845B5, + 0x7A05EEAD, 0x26A82185, + 0x79C89F6D, 0x27679DF4, + 0x798A23B1, 0x2826B928, + 0x794A7C11, 0x28E5714A, + 0x7909A92C, 0x29A3C484, + 0x78C7ABA1, 0x2A61B101, + 0x78848413, 0x2B1F34EB, + 0x78403328, 0x2BDC4E6F, + 0x77FAB988, 0x2C98FBBA, + 0x77B417DF, 0x2D553AFB, + 0x776C4EDB, 0x2E110A62, + 0x77235F2D, 0x2ECC681E, + 0x76D94988, 0x2F875262, + 0x768E0EA5, 0x3041C760, + 0x7641AF3C, 0x30FBC54D, + 0x75F42C0A, 0x31B54A5D, + 0x75A585CF, 0x326E54C7, + 0x7555BD4B, 0x3326E2C2, + 0x7504D345, 0x33DEF287, + 0x74B2C883, 0x3496824F, + 0x745F9DD1, 0x354D9056, + 0x740B53FA, 0x36041AD9, + 0x73B5EBD0, 0x36BA2013, + 0x735F6626, 0x376F9E46, + 0x7307C3D0, 0x382493B0, + 0x72AF05A6, 0x38D8FE93, + 0x72552C84, 0x398CDD32, + 0x71FA3948, 0x3A402DD1, + 0x719E2CD2, 0x3AF2EEB7, + 0x71410804, 0x3BA51E29, + 0x70E2CBC6, 0x3C56BA70, + 0x708378FE, 0x3D07C1D5, + 0x70231099, 0x3DB832A5, + 0x6FC19385, 0x3E680B2C, + 0x6F5F02B1, 0x3F1749B7, + 0x6EFB5F12, 0x3FC5EC97, + 0x6E96A99C, 0x4073F21D, + 0x6E30E349, 0x4121589A, + 0x6DCA0D14, 0x41CE1E64, + 0x6D6227FA, 0x427A41D0, + 0x6CF934FB, 0x4325C135, + 0x6C8F351C, 0x43D09AEC, + 0x6C242960, 0x447ACD50, + 0x6BB812D0, 0x452456BC, + 0x6B4AF278, 0x45CD358F, + 0x6ADCC964, 0x46756827, + 0x6A6D98A4, 0x471CECE6, + 0x69FD614A, 0x47C3C22E, + 0x698C246C, 0x4869E664, + 0x6919E320, 0x490F57EE, + 0x68A69E81, 0x49B41533, + 0x683257AA, 0x4A581C9D, + 0x67BD0FBC, 0x4AFB6C97, + 0x6746C7D7, 0x4B9E038F, + 0x66CF811F, 0x4C3FDFF3, + 0x66573CBB, 0x4CE10034, + 0x65DDFBD3, 0x4D8162C4, + 0x6563BF92, 0x4E210617, + 0x64E88926, 0x4EBFE8A4, + 0x646C59BF, 0x4F5E08E3, + 0x63EF328F, 0x4FFB654D, + 0x637114CC, 0x5097FC5E, + 0x62F201AC, 0x5133CC94, + 0x6271FA69, 0x51CED46E, + 0x61F1003E, 0x5269126E, + 0x616F146B, 0x53028517, + 0x60EC3830, 0x539B2AEF, + 0x60686CCE, 0x5433027D, + 0x5FE3B38D, 0x54CA0A4A, + 0x5F5E0DB3, 0x556040E2, + 0x5ED77C89, 0x55F5A4D2, + 0x5E50015D, 0x568A34A9, + 0x5DC79D7C, 0x571DEEF9, + 0x5D3E5236, 0x57B0D256, + 0x5CB420DF, 0x5842DD54, + 0x5C290ACC, 0x58D40E8C, + 0x5B9D1153, 0x59646497, + 0x5B1035CF, 0x59F3DE12, + 0x5A82799A, 0x5A82799A, + 0x59F3DE12, 0x5B1035CF, + 0x59646497, 0x5B9D1153, + 0x58D40E8C, 0x5C290ACC, + 0x5842DD54, 0x5CB420DF, + 0x57B0D256, 0x5D3E5236, + 0x571DEEF9, 0x5DC79D7C, + 0x568A34A9, 0x5E50015D, + 0x55F5A4D2, 0x5ED77C89, + 0x556040E2, 0x5F5E0DB3, + 0x54CA0A4A, 0x5FE3B38D, + 0x5433027D, 0x60686CCE, + 0x539B2AEF, 0x60EC3830, + 0x53028517, 0x616F146B, + 0x5269126E, 0x61F1003E, + 0x51CED46E, 0x6271FA69, + 0x5133CC94, 0x62F201AC, + 0x5097FC5E, 0x637114CC, + 0x4FFB654D, 0x63EF328F, + 0x4F5E08E3, 0x646C59BF, + 0x4EBFE8A4, 0x64E88926, + 0x4E210617, 0x6563BF92, + 0x4D8162C4, 0x65DDFBD3, + 0x4CE10034, 0x66573CBB, + 0x4C3FDFF3, 0x66CF811F, + 0x4B9E038F, 0x6746C7D7, + 0x4AFB6C97, 0x67BD0FBC, + 0x4A581C9D, 0x683257AA, + 0x49B41533, 0x68A69E81, + 0x490F57EE, 0x6919E320, + 0x4869E664, 0x698C246C, + 0x47C3C22E, 0x69FD614A, + 0x471CECE6, 0x6A6D98A4, + 0x46756827, 0x6ADCC964, + 0x45CD358F, 0x6B4AF278, + 0x452456BC, 0x6BB812D0, + 0x447ACD50, 0x6C242960, + 0x43D09AEC, 0x6C8F351C, + 0x4325C135, 0x6CF934FB, + 0x427A41D0, 0x6D6227FA, + 0x41CE1E64, 0x6DCA0D14, + 0x4121589A, 0x6E30E349, + 0x4073F21D, 0x6E96A99C, + 0x3FC5EC97, 0x6EFB5F12, + 0x3F1749B7, 0x6F5F02B1, + 0x3E680B2C, 0x6FC19385, + 0x3DB832A5, 0x70231099, + 0x3D07C1D5, 0x708378FE, + 0x3C56BA70, 0x70E2CBC6, + 0x3BA51E29, 0x71410804, + 0x3AF2EEB7, 0x719E2CD2, + 0x3A402DD1, 0x71FA3948, + 0x398CDD32, 0x72552C84, + 0x38D8FE93, 0x72AF05A6, + 0x382493B0, 0x7307C3D0, + 0x376F9E46, 0x735F6626, + 0x36BA2013, 0x73B5EBD0, + 0x36041AD9, 0x740B53FA, + 0x354D9056, 0x745F9DD1, + 0x3496824F, 0x74B2C883, + 0x33DEF287, 0x7504D345, + 0x3326E2C2, 0x7555BD4B, + 0x326E54C7, 0x75A585CF, + 0x31B54A5D, 0x75F42C0A, + 0x30FBC54D, 0x7641AF3C, + 0x3041C760, 0x768E0EA5, + 0x2F875262, 0x76D94988, + 0x2ECC681E, 0x77235F2D, + 0x2E110A62, 0x776C4EDB, + 0x2D553AFB, 0x77B417DF, + 0x2C98FBBA, 0x77FAB988, + 0x2BDC4E6F, 0x78403328, + 0x2B1F34EB, 0x78848413, + 0x2A61B101, 0x78C7ABA1, + 0x29A3C484, 0x7909A92C, + 0x28E5714A, 0x794A7C11, + 0x2826B928, 0x798A23B1, + 0x27679DF4, 0x79C89F6D, + 0x26A82185, 0x7A05EEAD, + 0x25E845B5, 0x7A4210D8, + 0x25280C5D, 0x7A7D055B, + 0x24677757, 0x7AB6CBA3, + 0x23A6887E, 0x7AEF6323, + 0x22E541AE, 0x7B26CB4F, + 0x2223A4C5, 0x7B5D039D, + 0x2161B39F, 0x7B920B89, + 0x209F701C, 0x7BC5E28F, + 0x1FDCDC1A, 0x7BF88830, + 0x1F19F97B, 0x7C29FBEE, + 0x1E56CA1E, 0x7C5A3D4F, + 0x1D934FE5, 0x7C894BDD, + 0x1CCF8CB3, 0x7CB72724, + 0x1C0B826A, 0x7CE3CEB1, + 0x1B4732EF, 0x7D0F4218, + 0x1A82A025, 0x7D3980EC, + 0x19BDCBF2, 0x7D628AC5, + 0x18F8B83C, 0x7D8A5F3F, + 0x183366E8, 0x7DB0FDF7, + 0x176DD9DE, 0x7DD6668E, + 0x16A81305, 0x7DFA98A7, + 0x15E21444, 0x7E1D93E9, + 0x151BDF85, 0x7E3F57FE, + 0x145576B1, 0x7E5FE493, + 0x138EDBB0, 0x7E7F3956, + 0x12C8106E, 0x7E9D55FC, + 0x120116D4, 0x7EBA3A39, + 0x1139F0CE, 0x7ED5E5C6, + 0x1072A047, 0x7EF0585F, + 0x0FAB272B, 0x7F0991C3, + 0x0EE38765, 0x7F2191B4, + 0x0E1BC2E3, 0x7F3857F5, + 0x0D53DB92, 0x7F4DE450, + 0x0C8BD35E, 0x7F62368F, + 0x0BC3AC35, 0x7F754E7F, + 0x0AFB6805, 0x7F872BF3, + 0x0A3308BC, 0x7F97CEBC, + 0x096A9049, 0x7FA736B4, + 0x08A2009A, 0x7FB563B2, + 0x07D95B9E, 0x7FC25596, + 0x0710A344, 0x7FCE0C3E, + 0x0647D97C, 0x7FD8878D, + 0x057F0034, 0x7FE1C76B, + 0x04B6195D, 0x7FE9CBC0, + 0x03ED26E6, 0x7FF09477, + 0x03242ABF, 0x7FF62182, + 0x025B26D7, 0x7FFA72D1, + 0x01921D1F, 0x7FFD885A, + 0x00C90F88, 0x7FFF6216, + 0x00000000, 0x7FFFFFFF, + 0xFF36F078, 0x7FFF6216, + 0xFE6DE2E0, 0x7FFD885A, + 0xFDA4D928, 0x7FFA72D1, + 0xFCDBD541, 0x7FF62182, + 0xFC12D919, 0x7FF09477, + 0xFB49E6A2, 0x7FE9CBC0, + 0xFA80FFCB, 0x7FE1C76B, + 0xF9B82683, 0x7FD8878D, + 0xF8EF5CBB, 0x7FCE0C3E, + 0xF826A461, 0x7FC25596, + 0xF75DFF65, 0x7FB563B2, + 0xF6956FB6, 0x7FA736B4, + 0xF5CCF743, 0x7F97CEBC, + 0xF50497FA, 0x7F872BF3, + 0xF43C53CA, 0x7F754E7F, + 0xF3742CA1, 0x7F62368F, + 0xF2AC246D, 0x7F4DE450, + 0xF1E43D1C, 0x7F3857F5, + 0xF11C789A, 0x7F2191B4, + 0xF054D8D4, 0x7F0991C3, + 0xEF8D5FB8, 0x7EF0585F, + 0xEEC60F31, 0x7ED5E5C6, + 0xEDFEE92B, 0x7EBA3A39, + 0xED37EF91, 0x7E9D55FC, + 0xEC71244F, 0x7E7F3956, + 0xEBAA894E, 0x7E5FE493, + 0xEAE4207A, 0x7E3F57FE, + 0xEA1DEBBB, 0x7E1D93E9, + 0xE957ECFB, 0x7DFA98A7, + 0xE8922621, 0x7DD6668E, + 0xE7CC9917, 0x7DB0FDF7, + 0xE70747C3, 0x7D8A5F3F, + 0xE642340D, 0x7D628AC5, + 0xE57D5FDA, 0x7D3980EC, + 0xE4B8CD10, 0x7D0F4218, + 0xE3F47D95, 0x7CE3CEB1, + 0xE330734C, 0x7CB72724, + 0xE26CB01A, 0x7C894BDD, + 0xE1A935E1, 0x7C5A3D4F, + 0xE0E60684, 0x7C29FBEE, + 0xE02323E5, 0x7BF88830, + 0xDF608FE3, 0x7BC5E28F, + 0xDE9E4C60, 0x7B920B89, + 0xDDDC5B3A, 0x7B5D039D, + 0xDD1ABE51, 0x7B26CB4F, + 0xDC597781, 0x7AEF6323, + 0xDB9888A8, 0x7AB6CBA3, + 0xDAD7F3A2, 0x7A7D055B, + 0xDA17BA4A, 0x7A4210D8, + 0xD957DE7A, 0x7A05EEAD, + 0xD898620C, 0x79C89F6D, + 0xD7D946D7, 0x798A23B1, + 0xD71A8EB5, 0x794A7C11, + 0xD65C3B7B, 0x7909A92C, + 0xD59E4EFE, 0x78C7ABA1, + 0xD4E0CB14, 0x78848413, + 0xD423B190, 0x78403328, + 0xD3670445, 0x77FAB988, + 0xD2AAC504, 0x77B417DF, + 0xD1EEF59E, 0x776C4EDB, + 0xD13397E1, 0x77235F2D, + 0xD078AD9D, 0x76D94988, + 0xCFBE389F, 0x768E0EA5, + 0xCF043AB2, 0x7641AF3C, + 0xCE4AB5A2, 0x75F42C0A, + 0xCD91AB38, 0x75A585CF, + 0xCCD91D3D, 0x7555BD4B, + 0xCC210D78, 0x7504D345, + 0xCB697DB0, 0x74B2C883, + 0xCAB26FA9, 0x745F9DD1, + 0xC9FBE527, 0x740B53FA, + 0xC945DFEC, 0x73B5EBD0, + 0xC89061BA, 0x735F6626, + 0xC7DB6C50, 0x7307C3D0, + 0xC727016C, 0x72AF05A6, + 0xC67322CD, 0x72552C84, + 0xC5BFD22E, 0x71FA3948, + 0xC50D1148, 0x719E2CD2, + 0xC45AE1D7, 0x71410804, + 0xC3A9458F, 0x70E2CBC6, + 0xC2F83E2A, 0x708378FE, + 0xC247CD5A, 0x70231099, + 0xC197F4D3, 0x6FC19385, + 0xC0E8B648, 0x6F5F02B1, + 0xC03A1368, 0x6EFB5F12, + 0xBF8C0DE2, 0x6E96A99C, + 0xBEDEA765, 0x6E30E349, + 0xBE31E19B, 0x6DCA0D14, + 0xBD85BE2F, 0x6D6227FA, + 0xBCDA3ECA, 0x6CF934FB, + 0xBC2F6513, 0x6C8F351C, + 0xBB8532AF, 0x6C242960, + 0xBADBA943, 0x6BB812D0, + 0xBA32CA70, 0x6B4AF278, + 0xB98A97D8, 0x6ADCC964, + 0xB8E31319, 0x6A6D98A4, + 0xB83C3DD1, 0x69FD614A, + 0xB796199B, 0x698C246C, + 0xB6F0A811, 0x6919E320, + 0xB64BEACC, 0x68A69E81, + 0xB5A7E362, 0x683257AA, + 0xB5049368, 0x67BD0FBC, + 0xB461FC70, 0x6746C7D7, + 0xB3C0200C, 0x66CF811F, + 0xB31EFFCB, 0x66573CBB, + 0xB27E9D3B, 0x65DDFBD3, + 0xB1DEF9E8, 0x6563BF92, + 0xB140175B, 0x64E88926, + 0xB0A1F71C, 0x646C59BF, + 0xB0049AB2, 0x63EF328F, + 0xAF6803A1, 0x637114CC, + 0xAECC336B, 0x62F201AC, + 0xAE312B91, 0x6271FA69, + 0xAD96ED91, 0x61F1003E, + 0xACFD7AE8, 0x616F146B, + 0xAC64D510, 0x60EC3830, + 0xABCCFD82, 0x60686CCE, + 0xAB35F5B5, 0x5FE3B38D, + 0xAA9FBF1D, 0x5F5E0DB3, + 0xAA0A5B2D, 0x5ED77C89, + 0xA975CB56, 0x5E50015D, + 0xA8E21106, 0x5DC79D7C, + 0xA84F2DA9, 0x5D3E5236, + 0xA7BD22AB, 0x5CB420DF, + 0xA72BF173, 0x5C290ACC, + 0xA69B9B68, 0x5B9D1153, + 0xA60C21ED, 0x5B1035CF, + 0xA57D8666, 0x5A82799A, + 0xA4EFCA31, 0x59F3DE12, + 0xA462EEAC, 0x59646497, + 0xA3D6F533, 0x58D40E8C, + 0xA34BDF20, 0x5842DD54, + 0xA2C1ADC9, 0x57B0D256, + 0xA2386283, 0x571DEEF9, + 0xA1AFFEA2, 0x568A34A9, + 0xA1288376, 0x55F5A4D2, + 0xA0A1F24C, 0x556040E2, + 0xA01C4C72, 0x54CA0A4A, + 0x9F979331, 0x5433027D, + 0x9F13C7D0, 0x539B2AEF, + 0x9E90EB94, 0x53028517, + 0x9E0EFFC1, 0x5269126E, + 0x9D8E0596, 0x51CED46E, + 0x9D0DFE53, 0x5133CC94, + 0x9C8EEB33, 0x5097FC5E, + 0x9C10CD70, 0x4FFB654D, + 0x9B93A640, 0x4F5E08E3, + 0x9B1776D9, 0x4EBFE8A4, + 0x9A9C406D, 0x4E210617, + 0x9A22042C, 0x4D8162C4, + 0x99A8C344, 0x4CE10034, + 0x99307EE0, 0x4C3FDFF3, + 0x98B93828, 0x4B9E038F, + 0x9842F043, 0x4AFB6C97, + 0x97CDA855, 0x4A581C9D, + 0x9759617E, 0x49B41533, + 0x96E61CDF, 0x490F57EE, + 0x9673DB94, 0x4869E664, + 0x96029EB5, 0x47C3C22E, + 0x9592675B, 0x471CECE6, + 0x9523369B, 0x46756827, + 0x94B50D87, 0x45CD358F, + 0x9447ED2F, 0x452456BC, + 0x93DBD69F, 0x447ACD50, + 0x9370CAE4, 0x43D09AEC, + 0x9306CB04, 0x4325C135, + 0x929DD805, 0x427A41D0, + 0x9235F2EB, 0x41CE1E64, + 0x91CF1CB6, 0x4121589A, + 0x91695663, 0x4073F21D, + 0x9104A0ED, 0x3FC5EC97, + 0x90A0FD4E, 0x3F1749B7, + 0x903E6C7A, 0x3E680B2C, + 0x8FDCEF66, 0x3DB832A5, + 0x8F7C8701, 0x3D07C1D5, + 0x8F1D343A, 0x3C56BA70, + 0x8EBEF7FB, 0x3BA51E29, + 0x8E61D32D, 0x3AF2EEB7, + 0x8E05C6B7, 0x3A402DD1, + 0x8DAAD37B, 0x398CDD32, + 0x8D50FA59, 0x38D8FE93, + 0x8CF83C30, 0x382493B0, + 0x8CA099D9, 0x376F9E46, + 0x8C4A142F, 0x36BA2013, + 0x8BF4AC05, 0x36041AD9, + 0x8BA0622F, 0x354D9056, + 0x8B4D377C, 0x3496824F, + 0x8AFB2CBA, 0x33DEF287, + 0x8AAA42B4, 0x3326E2C2, + 0x8A5A7A30, 0x326E54C7, + 0x8A0BD3F5, 0x31B54A5D, + 0x89BE50C3, 0x30FBC54D, + 0x8971F15A, 0x3041C760, + 0x8926B677, 0x2F875262, + 0x88DCA0D3, 0x2ECC681E, + 0x8893B124, 0x2E110A62, + 0x884BE820, 0x2D553AFB, + 0x88054677, 0x2C98FBBA, + 0x87BFCCD7, 0x2BDC4E6F, + 0x877B7BEC, 0x2B1F34EB, + 0x8738545E, 0x2A61B101, + 0x86F656D3, 0x29A3C484, + 0x86B583EE, 0x28E5714A, + 0x8675DC4E, 0x2826B928, + 0x86376092, 0x27679DF4, + 0x85FA1152, 0x26A82185, + 0x85BDEF27, 0x25E845B5, + 0x8582FAA4, 0x25280C5D, + 0x8549345C, 0x24677757, + 0x85109CDC, 0x23A6887E, + 0x84D934B0, 0x22E541AE, + 0x84A2FC62, 0x2223A4C5, + 0x846DF476, 0x2161B39F, + 0x843A1D70, 0x209F701C, + 0x840777CF, 0x1FDCDC1A, + 0x83D60411, 0x1F19F97B, + 0x83A5C2B0, 0x1E56CA1E, + 0x8376B422, 0x1D934FE5, + 0x8348D8DB, 0x1CCF8CB3, + 0x831C314E, 0x1C0B826A, + 0x82F0BDE8, 0x1B4732EF, + 0x82C67F13, 0x1A82A025, + 0x829D753A, 0x19BDCBF2, + 0x8275A0C0, 0x18F8B83C, + 0x824F0208, 0x183366E8, + 0x82299971, 0x176DD9DE, + 0x82056758, 0x16A81305, + 0x81E26C16, 0x15E21444, + 0x81C0A801, 0x151BDF85, + 0x81A01B6C, 0x145576B1, + 0x8180C6A9, 0x138EDBB0, + 0x8162AA03, 0x12C8106E, + 0x8145C5C6, 0x120116D4, + 0x812A1A39, 0x1139F0CE, + 0x810FA7A0, 0x1072A047, + 0x80F66E3C, 0x0FAB272B, + 0x80DE6E4C, 0x0EE38765, + 0x80C7A80A, 0x0E1BC2E3, + 0x80B21BAF, 0x0D53DB92, + 0x809DC970, 0x0C8BD35E, + 0x808AB180, 0x0BC3AC35, + 0x8078D40D, 0x0AFB6805, + 0x80683143, 0x0A3308BC, + 0x8058C94C, 0x096A9049, + 0x804A9C4D, 0x08A2009A, + 0x803DAA69, 0x07D95B9E, + 0x8031F3C1, 0x0710A344, + 0x80277872, 0x0647D97C, + 0x801E3894, 0x057F0034, + 0x80163440, 0x04B6195D, + 0x800F6B88, 0x03ED26E6, + 0x8009DE7D, 0x03242ABF, + 0x80058D2E, 0x025B26D7, + 0x800277A5, 0x01921D1F, + 0x80009DE9, 0x00C90F88, + 0x80000000, 0x00000000, + 0x80009DE9, 0xFF36F078, + 0x800277A5, 0xFE6DE2E0, + 0x80058D2E, 0xFDA4D928, + 0x8009DE7D, 0xFCDBD541, + 0x800F6B88, 0xFC12D919, + 0x80163440, 0xFB49E6A2, + 0x801E3894, 0xFA80FFCB, + 0x80277872, 0xF9B82683, + 0x8031F3C1, 0xF8EF5CBB, + 0x803DAA69, 0xF826A461, + 0x804A9C4D, 0xF75DFF65, + 0x8058C94C, 0xF6956FB6, + 0x80683143, 0xF5CCF743, + 0x8078D40D, 0xF50497FA, + 0x808AB180, 0xF43C53CA, + 0x809DC970, 0xF3742CA1, + 0x80B21BAF, 0xF2AC246D, + 0x80C7A80A, 0xF1E43D1C, + 0x80DE6E4C, 0xF11C789A, + 0x80F66E3C, 0xF054D8D4, + 0x810FA7A0, 0xEF8D5FB8, + 0x812A1A39, 0xEEC60F31, + 0x8145C5C6, 0xEDFEE92B, + 0x8162AA03, 0xED37EF91, + 0x8180C6A9, 0xEC71244F, + 0x81A01B6C, 0xEBAA894E, + 0x81C0A801, 0xEAE4207A, + 0x81E26C16, 0xEA1DEBBB, + 0x82056758, 0xE957ECFB, + 0x82299971, 0xE8922621, + 0x824F0208, 0xE7CC9917, + 0x8275A0C0, 0xE70747C3, + 0x829D753A, 0xE642340D, + 0x82C67F13, 0xE57D5FDA, + 0x82F0BDE8, 0xE4B8CD10, + 0x831C314E, 0xE3F47D95, + 0x8348D8DB, 0xE330734C, + 0x8376B422, 0xE26CB01A, + 0x83A5C2B0, 0xE1A935E1, + 0x83D60411, 0xE0E60684, + 0x840777CF, 0xE02323E5, + 0x843A1D70, 0xDF608FE3, + 0x846DF476, 0xDE9E4C60, + 0x84A2FC62, 0xDDDC5B3A, + 0x84D934B0, 0xDD1ABE51, + 0x85109CDC, 0xDC597781, + 0x8549345C, 0xDB9888A8, + 0x8582FAA4, 0xDAD7F3A2, + 0x85BDEF27, 0xDA17BA4A, + 0x85FA1152, 0xD957DE7A, + 0x86376092, 0xD898620C, + 0x8675DC4E, 0xD7D946D7, + 0x86B583EE, 0xD71A8EB5, + 0x86F656D3, 0xD65C3B7B, + 0x8738545E, 0xD59E4EFE, + 0x877B7BEC, 0xD4E0CB14, + 0x87BFCCD7, 0xD423B190, + 0x88054677, 0xD3670445, + 0x884BE820, 0xD2AAC504, + 0x8893B124, 0xD1EEF59E, + 0x88DCA0D3, 0xD13397E1, + 0x8926B677, 0xD078AD9D, + 0x8971F15A, 0xCFBE389F, + 0x89BE50C3, 0xCF043AB2, + 0x8A0BD3F5, 0xCE4AB5A2, + 0x8A5A7A30, 0xCD91AB38, + 0x8AAA42B4, 0xCCD91D3D, + 0x8AFB2CBA, 0xCC210D78, + 0x8B4D377C, 0xCB697DB0, + 0x8BA0622F, 0xCAB26FA9, + 0x8BF4AC05, 0xC9FBE527, + 0x8C4A142F, 0xC945DFEC, + 0x8CA099D9, 0xC89061BA, + 0x8CF83C30, 0xC7DB6C50, + 0x8D50FA59, 0xC727016C, + 0x8DAAD37B, 0xC67322CD, + 0x8E05C6B7, 0xC5BFD22E, + 0x8E61D32D, 0xC50D1148, + 0x8EBEF7FB, 0xC45AE1D7, + 0x8F1D343A, 0xC3A9458F, + 0x8F7C8701, 0xC2F83E2A, + 0x8FDCEF66, 0xC247CD5A, + 0x903E6C7A, 0xC197F4D3, + 0x90A0FD4E, 0xC0E8B648, + 0x9104A0ED, 0xC03A1368, + 0x91695663, 0xBF8C0DE2, + 0x91CF1CB6, 0xBEDEA765, + 0x9235F2EB, 0xBE31E19B, + 0x929DD805, 0xBD85BE2F, + 0x9306CB04, 0xBCDA3ECA, + 0x9370CAE4, 0xBC2F6513, + 0x93DBD69F, 0xBB8532AF, + 0x9447ED2F, 0xBADBA943, + 0x94B50D87, 0xBA32CA70, + 0x9523369B, 0xB98A97D8, + 0x9592675B, 0xB8E31319, + 0x96029EB5, 0xB83C3DD1, + 0x9673DB94, 0xB796199B, + 0x96E61CDF, 0xB6F0A811, + 0x9759617E, 0xB64BEACC, + 0x97CDA855, 0xB5A7E362, + 0x9842F043, 0xB5049368, + 0x98B93828, 0xB461FC70, + 0x99307EE0, 0xB3C0200C, + 0x99A8C344, 0xB31EFFCB, + 0x9A22042C, 0xB27E9D3B, + 0x9A9C406D, 0xB1DEF9E8, + 0x9B1776D9, 0xB140175B, + 0x9B93A640, 0xB0A1F71C, + 0x9C10CD70, 0xB0049AB2, + 0x9C8EEB33, 0xAF6803A1, + 0x9D0DFE53, 0xAECC336B, + 0x9D8E0596, 0xAE312B91, + 0x9E0EFFC1, 0xAD96ED91, + 0x9E90EB94, 0xACFD7AE8, + 0x9F13C7D0, 0xAC64D510, + 0x9F979331, 0xABCCFD82, + 0xA01C4C72, 0xAB35F5B5, + 0xA0A1F24C, 0xAA9FBF1D, + 0xA1288376, 0xAA0A5B2D, + 0xA1AFFEA2, 0xA975CB56, + 0xA2386283, 0xA8E21106, + 0xA2C1ADC9, 0xA84F2DA9, + 0xA34BDF20, 0xA7BD22AB, + 0xA3D6F533, 0xA72BF173, + 0xA462EEAC, 0xA69B9B68, + 0xA4EFCA31, 0xA60C21ED, + 0xA57D8666, 0xA57D8666, + 0xA60C21ED, 0xA4EFCA31, + 0xA69B9B68, 0xA462EEAC, + 0xA72BF173, 0xA3D6F533, + 0xA7BD22AB, 0xA34BDF20, + 0xA84F2DA9, 0xA2C1ADC9, + 0xA8E21106, 0xA2386283, + 0xA975CB56, 0xA1AFFEA2, + 0xAA0A5B2D, 0xA1288376, + 0xAA9FBF1D, 0xA0A1F24C, + 0xAB35F5B5, 0xA01C4C72, + 0xABCCFD82, 0x9F979331, + 0xAC64D510, 0x9F13C7D0, + 0xACFD7AE8, 0x9E90EB94, + 0xAD96ED91, 0x9E0EFFC1, + 0xAE312B91, 0x9D8E0596, + 0xAECC336B, 0x9D0DFE53, + 0xAF6803A1, 0x9C8EEB33, + 0xB0049AB2, 0x9C10CD70, + 0xB0A1F71C, 0x9B93A640, + 0xB140175B, 0x9B1776D9, + 0xB1DEF9E8, 0x9A9C406D, + 0xB27E9D3B, 0x9A22042C, + 0xB31EFFCB, 0x99A8C344, + 0xB3C0200C, 0x99307EE0, + 0xB461FC70, 0x98B93828, + 0xB5049368, 0x9842F043, + 0xB5A7E362, 0x97CDA855, + 0xB64BEACC, 0x9759617E, + 0xB6F0A811, 0x96E61CDF, + 0xB796199B, 0x9673DB94, + 0xB83C3DD1, 0x96029EB5, + 0xB8E31319, 0x9592675B, + 0xB98A97D8, 0x9523369B, + 0xBA32CA70, 0x94B50D87, + 0xBADBA943, 0x9447ED2F, + 0xBB8532AF, 0x93DBD69F, + 0xBC2F6513, 0x9370CAE4, + 0xBCDA3ECA, 0x9306CB04, + 0xBD85BE2F, 0x929DD805, + 0xBE31E19B, 0x9235F2EB, + 0xBEDEA765, 0x91CF1CB6, + 0xBF8C0DE2, 0x91695663, + 0xC03A1368, 0x9104A0ED, + 0xC0E8B648, 0x90A0FD4E, + 0xC197F4D3, 0x903E6C7A, + 0xC247CD5A, 0x8FDCEF66, + 0xC2F83E2A, 0x8F7C8701, + 0xC3A9458F, 0x8F1D343A, + 0xC45AE1D7, 0x8EBEF7FB, + 0xC50D1148, 0x8E61D32D, + 0xC5BFD22E, 0x8E05C6B7, + 0xC67322CD, 0x8DAAD37B, + 0xC727016C, 0x8D50FA59, + 0xC7DB6C50, 0x8CF83C30, + 0xC89061BA, 0x8CA099D9, + 0xC945DFEC, 0x8C4A142F, + 0xC9FBE527, 0x8BF4AC05, + 0xCAB26FA9, 0x8BA0622F, + 0xCB697DB0, 0x8B4D377C, + 0xCC210D78, 0x8AFB2CBA, + 0xCCD91D3D, 0x8AAA42B4, + 0xCD91AB38, 0x8A5A7A30, + 0xCE4AB5A2, 0x8A0BD3F5, + 0xCF043AB2, 0x89BE50C3, + 0xCFBE389F, 0x8971F15A, + 0xD078AD9D, 0x8926B677, + 0xD13397E1, 0x88DCA0D3, + 0xD1EEF59E, 0x8893B124, + 0xD2AAC504, 0x884BE820, + 0xD3670445, 0x88054677, + 0xD423B190, 0x87BFCCD7, + 0xD4E0CB14, 0x877B7BEC, + 0xD59E4EFE, 0x8738545E, + 0xD65C3B7B, 0x86F656D3, + 0xD71A8EB5, 0x86B583EE, + 0xD7D946D7, 0x8675DC4E, + 0xD898620C, 0x86376092, + 0xD957DE7A, 0x85FA1152, + 0xDA17BA4A, 0x85BDEF27, + 0xDAD7F3A2, 0x8582FAA4, + 0xDB9888A8, 0x8549345C, + 0xDC597781, 0x85109CDC, + 0xDD1ABE51, 0x84D934B0, + 0xDDDC5B3A, 0x84A2FC62, + 0xDE9E4C60, 0x846DF476, + 0xDF608FE3, 0x843A1D70, + 0xE02323E5, 0x840777CF, + 0xE0E60684, 0x83D60411, + 0xE1A935E1, 0x83A5C2B0, + 0xE26CB01A, 0x8376B422, + 0xE330734C, 0x8348D8DB, + 0xE3F47D95, 0x831C314E, + 0xE4B8CD10, 0x82F0BDE8, + 0xE57D5FDA, 0x82C67F13, + 0xE642340D, 0x829D753A, + 0xE70747C3, 0x8275A0C0, + 0xE7CC9917, 0x824F0208, + 0xE8922621, 0x82299971, + 0xE957ECFB, 0x82056758, + 0xEA1DEBBB, 0x81E26C16, + 0xEAE4207A, 0x81C0A801, + 0xEBAA894E, 0x81A01B6C, + 0xEC71244F, 0x8180C6A9, + 0xED37EF91, 0x8162AA03, + 0xEDFEE92B, 0x8145C5C6, + 0xEEC60F31, 0x812A1A39, + 0xEF8D5FB8, 0x810FA7A0, + 0xF054D8D4, 0x80F66E3C, + 0xF11C789A, 0x80DE6E4C, + 0xF1E43D1C, 0x80C7A80A, + 0xF2AC246D, 0x80B21BAF, + 0xF3742CA1, 0x809DC970, + 0xF43C53CA, 0x808AB180, + 0xF50497FA, 0x8078D40D, + 0xF5CCF743, 0x80683143, + 0xF6956FB6, 0x8058C94C, + 0xF75DFF65, 0x804A9C4D, + 0xF826A461, 0x803DAA69, + 0xF8EF5CBB, 0x8031F3C1, + 0xF9B82683, 0x80277872, + 0xFA80FFCB, 0x801E3894, + 0xFB49E6A2, 0x80163440, + 0xFC12D919, 0x800F6B88, + 0xFCDBD541, 0x8009DE7D, + 0xFDA4D928, 0x80058D2E, + 0xFE6DE2E0, 0x800277A5, + 0xFF36F078, 0x80009DE9 +}; + +/** +* \par +* Example code for Q31 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefQ31[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefQ31[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 2048 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to Q31(Fixed point 1.31): +* round(twiddleCoefQ31(i) * pow(2, 31)) +* +*/ +const q31_t twiddleCoef_2048_q31[3072] = { + 0x7FFFFFFF, 0x00000000, + 0x7FFFD885, 0x006487E3, + 0x7FFF6216, 0x00C90F88, + 0x7FFE9CB2, 0x012D96B0, + 0x7FFD885A, 0x01921D1F, + 0x7FFC250F, 0x01F6A296, + 0x7FFA72D1, 0x025B26D7, + 0x7FF871A1, 0x02BFA9A4, + 0x7FF62182, 0x03242ABF, + 0x7FF38273, 0x0388A9E9, + 0x7FF09477, 0x03ED26E6, + 0x7FED5790, 0x0451A176, + 0x7FE9CBC0, 0x04B6195D, + 0x7FE5F108, 0x051A8E5C, + 0x7FE1C76B, 0x057F0034, + 0x7FDD4EEC, 0x05E36EA9, + 0x7FD8878D, 0x0647D97C, + 0x7FD37152, 0x06AC406F, + 0x7FCE0C3E, 0x0710A344, + 0x7FC85853, 0x077501BE, + 0x7FC25596, 0x07D95B9E, + 0x7FBC040A, 0x083DB0A7, + 0x7FB563B2, 0x08A2009A, + 0x7FAE7494, 0x09064B3A, + 0x7FA736B4, 0x096A9049, + 0x7F9FAA15, 0x09CECF89, + 0x7F97CEBC, 0x0A3308BC, + 0x7F8FA4AF, 0x0A973BA5, + 0x7F872BF3, 0x0AFB6805, + 0x7F7E648B, 0x0B5F8D9F, + 0x7F754E7F, 0x0BC3AC35, + 0x7F6BE9D4, 0x0C27C389, + 0x7F62368F, 0x0C8BD35E, + 0x7F5834B6, 0x0CEFDB75, + 0x7F4DE450, 0x0D53DB92, + 0x7F434563, 0x0DB7D376, + 0x7F3857F5, 0x0E1BC2E3, + 0x7F2D1C0E, 0x0E7FA99D, + 0x7F2191B4, 0x0EE38765, + 0x7F15B8EE, 0x0F475BFE, + 0x7F0991C3, 0x0FAB272B, + 0x7EFD1C3C, 0x100EE8AD, + 0x7EF0585F, 0x1072A047, + 0x7EE34635, 0x10D64DBC, + 0x7ED5E5C6, 0x1139F0CE, + 0x7EC8371A, 0x119D8940, + 0x7EBA3A39, 0x120116D4, + 0x7EABEF2C, 0x1264994E, + 0x7E9D55FC, 0x12C8106E, + 0x7E8E6EB1, 0x132B7BF9, + 0x7E7F3956, 0x138EDBB0, + 0x7E6FB5F3, 0x13F22F57, + 0x7E5FE493, 0x145576B1, + 0x7E4FC53E, 0x14B8B17F, + 0x7E3F57FE, 0x151BDF85, + 0x7E2E9CDF, 0x157F0086, + 0x7E1D93E9, 0x15E21444, + 0x7E0C3D29, 0x16451A83, + 0x7DFA98A7, 0x16A81305, + 0x7DE8A670, 0x170AFD8D, + 0x7DD6668E, 0x176DD9DE, + 0x7DC3D90D, 0x17D0A7BB, + 0x7DB0FDF7, 0x183366E8, + 0x7D9DD55A, 0x18961727, + 0x7D8A5F3F, 0x18F8B83C, + 0x7D769BB5, 0x195B49E9, + 0x7D628AC5, 0x19BDCBF2, + 0x7D4E2C7E, 0x1A203E1B, + 0x7D3980EC, 0x1A82A025, + 0x7D24881A, 0x1AE4F1D6, + 0x7D0F4218, 0x1B4732EF, + 0x7CF9AEF0, 0x1BA96334, + 0x7CE3CEB1, 0x1C0B826A, + 0x7CCDA168, 0x1C6D9053, + 0x7CB72724, 0x1CCF8CB3, + 0x7CA05FF1, 0x1D31774D, + 0x7C894BDD, 0x1D934FE5, + 0x7C71EAF8, 0x1DF5163F, + 0x7C5A3D4F, 0x1E56CA1E, + 0x7C4242F2, 0x1EB86B46, + 0x7C29FBEE, 0x1F19F97B, + 0x7C116853, 0x1F7B7480, + 0x7BF88830, 0x1FDCDC1A, + 0x7BDF5B94, 0x203E300D, + 0x7BC5E28F, 0x209F701C, + 0x7BAC1D31, 0x21009C0B, + 0x7B920B89, 0x2161B39F, + 0x7B77ADA8, 0x21C2B69C, + 0x7B5D039D, 0x2223A4C5, + 0x7B420D7A, 0x22847DDF, + 0x7B26CB4F, 0x22E541AE, + 0x7B0B3D2C, 0x2345EFF7, + 0x7AEF6323, 0x23A6887E, + 0x7AD33D45, 0x24070B07, + 0x7AB6CBA3, 0x24677757, + 0x7A9A0E4F, 0x24C7CD32, + 0x7A7D055B, 0x25280C5D, + 0x7A5FB0D8, 0x2588349D, + 0x7A4210D8, 0x25E845B5, + 0x7A24256E, 0x26483F6C, + 0x7A05EEAD, 0x26A82185, + 0x79E76CA6, 0x2707EBC6, + 0x79C89F6D, 0x27679DF4, + 0x79A98715, 0x27C737D2, + 0x798A23B1, 0x2826B928, + 0x796A7554, 0x288621B9, + 0x794A7C11, 0x28E5714A, + 0x792A37FE, 0x2944A7A2, + 0x7909A92C, 0x29A3C484, + 0x78E8CFB1, 0x2A02C7B8, + 0x78C7ABA1, 0x2A61B101, + 0x78A63D10, 0x2AC08025, + 0x78848413, 0x2B1F34EB, + 0x786280BF, 0x2B7DCF17, + 0x78403328, 0x2BDC4E6F, + 0x781D9B64, 0x2C3AB2B9, + 0x77FAB988, 0x2C98FBBA, + 0x77D78DAA, 0x2CF72939, + 0x77B417DF, 0x2D553AFB, + 0x7790583D, 0x2DB330C7, + 0x776C4EDB, 0x2E110A62, + 0x7747FBCE, 0x2E6EC792, + 0x77235F2D, 0x2ECC681E, + 0x76FE790E, 0x2F29EBCC, + 0x76D94988, 0x2F875262, + 0x76B3D0B3, 0x2FE49BA6, + 0x768E0EA5, 0x3041C760, + 0x76680376, 0x309ED555, + 0x7641AF3C, 0x30FBC54D, + 0x761B1211, 0x3158970D, + 0x75F42C0A, 0x31B54A5D, + 0x75CCFD42, 0x3211DF03, + 0x75A585CF, 0x326E54C7, + 0x757DC5CA, 0x32CAAB6F, + 0x7555BD4B, 0x3326E2C2, + 0x752D6C6C, 0x3382FA88, + 0x7504D345, 0x33DEF287, + 0x74DBF1EF, 0x343ACA87, + 0x74B2C883, 0x3496824F, + 0x7489571B, 0x34F219A7, + 0x745F9DD1, 0x354D9056, + 0x74359CBD, 0x35A8E624, + 0x740B53FA, 0x36041AD9, + 0x73E0C3A3, 0x365F2E3B, + 0x73B5EBD0, 0x36BA2013, + 0x738ACC9E, 0x3714F02A, + 0x735F6626, 0x376F9E46, + 0x7333B883, 0x37CA2A30, + 0x7307C3D0, 0x382493B0, + 0x72DB8828, 0x387EDA8E, + 0x72AF05A6, 0x38D8FE93, + 0x72823C66, 0x3932FF87, + 0x72552C84, 0x398CDD32, + 0x7227D61C, 0x39E6975D, + 0x71FA3948, 0x3A402DD1, + 0x71CC5626, 0x3A99A057, + 0x719E2CD2, 0x3AF2EEB7, + 0x716FBD68, 0x3B4C18BA, + 0x71410804, 0x3BA51E29, + 0x71120CC5, 0x3BFDFECD, + 0x70E2CBC6, 0x3C56BA70, + 0x70B34524, 0x3CAF50DA, + 0x708378FE, 0x3D07C1D5, + 0x70536771, 0x3D600D2B, + 0x70231099, 0x3DB832A5, + 0x6FF27496, 0x3E10320D, + 0x6FC19385, 0x3E680B2C, + 0x6F906D84, 0x3EBFBDCC, + 0x6F5F02B1, 0x3F1749B7, + 0x6F2D532C, 0x3F6EAEB8, + 0x6EFB5F12, 0x3FC5EC97, + 0x6EC92682, 0x401D0320, + 0x6E96A99C, 0x4073F21D, + 0x6E63E87F, 0x40CAB957, + 0x6E30E349, 0x4121589A, + 0x6DFD9A1B, 0x4177CFB0, + 0x6DCA0D14, 0x41CE1E64, + 0x6D963C54, 0x42244480, + 0x6D6227FA, 0x427A41D0, + 0x6D2DD027, 0x42D0161E, + 0x6CF934FB, 0x4325C135, + 0x6CC45697, 0x437B42E1, + 0x6C8F351C, 0x43D09AEC, + 0x6C59D0A9, 0x4425C923, + 0x6C242960, 0x447ACD50, + 0x6BEE3F62, 0x44CFA73F, + 0x6BB812D0, 0x452456BC, + 0x6B81A3CD, 0x4578DB93, + 0x6B4AF278, 0x45CD358F, + 0x6B13FEF5, 0x4621647C, + 0x6ADCC964, 0x46756827, + 0x6AA551E8, 0x46C9405C, + 0x6A6D98A4, 0x471CECE6, + 0x6A359DB9, 0x47706D93, + 0x69FD614A, 0x47C3C22E, + 0x69C4E37A, 0x4816EA85, + 0x698C246C, 0x4869E664, + 0x69532442, 0x48BCB598, + 0x6919E320, 0x490F57EE, + 0x68E06129, 0x4961CD32, + 0x68A69E81, 0x49B41533, + 0x686C9B4B, 0x4A062FBD, + 0x683257AA, 0x4A581C9D, + 0x67F7D3C4, 0x4AA9DBA1, + 0x67BD0FBC, 0x4AFB6C97, + 0x67820BB6, 0x4B4CCF4D, + 0x6746C7D7, 0x4B9E038F, + 0x670B4443, 0x4BEF092D, + 0x66CF811F, 0x4C3FDFF3, + 0x66937E90, 0x4C9087B1, + 0x66573CBB, 0x4CE10034, + 0x661ABBC5, 0x4D31494B, + 0x65DDFBD3, 0x4D8162C4, + 0x65A0FD0B, 0x4DD14C6E, + 0x6563BF92, 0x4E210617, + 0x6526438E, 0x4E708F8F, + 0x64E88926, 0x4EBFE8A4, + 0x64AA907F, 0x4F0F1126, + 0x646C59BF, 0x4F5E08E3, + 0x642DE50D, 0x4FACCFAB, + 0x63EF328F, 0x4FFB654D, + 0x63B0426D, 0x5049C999, + 0x637114CC, 0x5097FC5E, + 0x6331A9D4, 0x50E5FD6C, + 0x62F201AC, 0x5133CC94, + 0x62B21C7B, 0x518169A4, + 0x6271FA69, 0x51CED46E, + 0x62319B9D, 0x521C0CC1, + 0x61F1003E, 0x5269126E, + 0x61B02876, 0x52B5E545, + 0x616F146B, 0x53028517, + 0x612DC446, 0x534EF1B5, + 0x60EC3830, 0x539B2AEF, + 0x60AA704F, 0x53E73097, + 0x60686CCE, 0x5433027D, + 0x60262DD5, 0x547EA073, + 0x5FE3B38D, 0x54CA0A4A, + 0x5FA0FE1E, 0x55153FD4, + 0x5F5E0DB3, 0x556040E2, + 0x5F1AE273, 0x55AB0D46, + 0x5ED77C89, 0x55F5A4D2, + 0x5E93DC1F, 0x56400757, + 0x5E50015D, 0x568A34A9, + 0x5E0BEC6E, 0x56D42C99, + 0x5DC79D7C, 0x571DEEF9, + 0x5D8314B0, 0x57677B9D, + 0x5D3E5236, 0x57B0D256, + 0x5CF95638, 0x57F9F2F7, + 0x5CB420DF, 0x5842DD54, + 0x5C6EB258, 0x588B913F, + 0x5C290ACC, 0x58D40E8C, + 0x5BE32A67, 0x591C550E, + 0x5B9D1153, 0x59646497, + 0x5B56BFBD, 0x59AC3CFD, + 0x5B1035CF, 0x59F3DE12, + 0x5AC973B4, 0x5A3B47AA, + 0x5A82799A, 0x5A82799A, + 0x5A3B47AA, 0x5AC973B4, + 0x59F3DE12, 0x5B1035CF, + 0x59AC3CFD, 0x5B56BFBD, + 0x59646497, 0x5B9D1153, + 0x591C550E, 0x5BE32A67, + 0x58D40E8C, 0x5C290ACC, + 0x588B913F, 0x5C6EB258, + 0x5842DD54, 0x5CB420DF, + 0x57F9F2F7, 0x5CF95638, + 0x57B0D256, 0x5D3E5236, + 0x57677B9D, 0x5D8314B0, + 0x571DEEF9, 0x5DC79D7C, + 0x56D42C99, 0x5E0BEC6E, + 0x568A34A9, 0x5E50015D, + 0x56400757, 0x5E93DC1F, + 0x55F5A4D2, 0x5ED77C89, + 0x55AB0D46, 0x5F1AE273, + 0x556040E2, 0x5F5E0DB3, + 0x55153FD4, 0x5FA0FE1E, + 0x54CA0A4A, 0x5FE3B38D, + 0x547EA073, 0x60262DD5, + 0x5433027D, 0x60686CCE, + 0x53E73097, 0x60AA704F, + 0x539B2AEF, 0x60EC3830, + 0x534EF1B5, 0x612DC446, + 0x53028517, 0x616F146B, + 0x52B5E545, 0x61B02876, + 0x5269126E, 0x61F1003E, + 0x521C0CC1, 0x62319B9D, + 0x51CED46E, 0x6271FA69, + 0x518169A4, 0x62B21C7B, + 0x5133CC94, 0x62F201AC, + 0x50E5FD6C, 0x6331A9D4, + 0x5097FC5E, 0x637114CC, + 0x5049C999, 0x63B0426D, + 0x4FFB654D, 0x63EF328F, + 0x4FACCFAB, 0x642DE50D, + 0x4F5E08E3, 0x646C59BF, + 0x4F0F1126, 0x64AA907F, + 0x4EBFE8A4, 0x64E88926, + 0x4E708F8F, 0x6526438E, + 0x4E210617, 0x6563BF92, + 0x4DD14C6E, 0x65A0FD0B, + 0x4D8162C4, 0x65DDFBD3, + 0x4D31494B, 0x661ABBC5, + 0x4CE10034, 0x66573CBB, + 0x4C9087B1, 0x66937E90, + 0x4C3FDFF3, 0x66CF811F, + 0x4BEF092D, 0x670B4443, + 0x4B9E038F, 0x6746C7D7, + 0x4B4CCF4D, 0x67820BB6, + 0x4AFB6C97, 0x67BD0FBC, + 0x4AA9DBA1, 0x67F7D3C4, + 0x4A581C9D, 0x683257AA, + 0x4A062FBD, 0x686C9B4B, + 0x49B41533, 0x68A69E81, + 0x4961CD32, 0x68E06129, + 0x490F57EE, 0x6919E320, + 0x48BCB598, 0x69532442, + 0x4869E664, 0x698C246C, + 0x4816EA85, 0x69C4E37A, + 0x47C3C22E, 0x69FD614A, + 0x47706D93, 0x6A359DB9, + 0x471CECE6, 0x6A6D98A4, + 0x46C9405C, 0x6AA551E8, + 0x46756827, 0x6ADCC964, + 0x4621647C, 0x6B13FEF5, + 0x45CD358F, 0x6B4AF278, + 0x4578DB93, 0x6B81A3CD, + 0x452456BC, 0x6BB812D0, + 0x44CFA73F, 0x6BEE3F62, + 0x447ACD50, 0x6C242960, + 0x4425C923, 0x6C59D0A9, + 0x43D09AEC, 0x6C8F351C, + 0x437B42E1, 0x6CC45697, + 0x4325C135, 0x6CF934FB, + 0x42D0161E, 0x6D2DD027, + 0x427A41D0, 0x6D6227FA, + 0x42244480, 0x6D963C54, + 0x41CE1E64, 0x6DCA0D14, + 0x4177CFB0, 0x6DFD9A1B, + 0x4121589A, 0x6E30E349, + 0x40CAB957, 0x6E63E87F, + 0x4073F21D, 0x6E96A99C, + 0x401D0320, 0x6EC92682, + 0x3FC5EC97, 0x6EFB5F12, + 0x3F6EAEB8, 0x6F2D532C, + 0x3F1749B7, 0x6F5F02B1, + 0x3EBFBDCC, 0x6F906D84, + 0x3E680B2C, 0x6FC19385, + 0x3E10320D, 0x6FF27496, + 0x3DB832A5, 0x70231099, + 0x3D600D2B, 0x70536771, + 0x3D07C1D5, 0x708378FE, + 0x3CAF50DA, 0x70B34524, + 0x3C56BA70, 0x70E2CBC6, + 0x3BFDFECD, 0x71120CC5, + 0x3BA51E29, 0x71410804, + 0x3B4C18BA, 0x716FBD68, + 0x3AF2EEB7, 0x719E2CD2, + 0x3A99A057, 0x71CC5626, + 0x3A402DD1, 0x71FA3948, + 0x39E6975D, 0x7227D61C, + 0x398CDD32, 0x72552C84, + 0x3932FF87, 0x72823C66, + 0x38D8FE93, 0x72AF05A6, + 0x387EDA8E, 0x72DB8828, + 0x382493B0, 0x7307C3D0, + 0x37CA2A30, 0x7333B883, + 0x376F9E46, 0x735F6626, + 0x3714F02A, 0x738ACC9E, + 0x36BA2013, 0x73B5EBD0, + 0x365F2E3B, 0x73E0C3A3, + 0x36041AD9, 0x740B53FA, + 0x35A8E624, 0x74359CBD, + 0x354D9056, 0x745F9DD1, + 0x34F219A7, 0x7489571B, + 0x3496824F, 0x74B2C883, + 0x343ACA87, 0x74DBF1EF, + 0x33DEF287, 0x7504D345, + 0x3382FA88, 0x752D6C6C, + 0x3326E2C2, 0x7555BD4B, + 0x32CAAB6F, 0x757DC5CA, + 0x326E54C7, 0x75A585CF, + 0x3211DF03, 0x75CCFD42, + 0x31B54A5D, 0x75F42C0A, + 0x3158970D, 0x761B1211, + 0x30FBC54D, 0x7641AF3C, + 0x309ED555, 0x76680376, + 0x3041C760, 0x768E0EA5, + 0x2FE49BA6, 0x76B3D0B3, + 0x2F875262, 0x76D94988, + 0x2F29EBCC, 0x76FE790E, + 0x2ECC681E, 0x77235F2D, + 0x2E6EC792, 0x7747FBCE, + 0x2E110A62, 0x776C4EDB, + 0x2DB330C7, 0x7790583D, + 0x2D553AFB, 0x77B417DF, + 0x2CF72939, 0x77D78DAA, + 0x2C98FBBA, 0x77FAB988, + 0x2C3AB2B9, 0x781D9B64, + 0x2BDC4E6F, 0x78403328, + 0x2B7DCF17, 0x786280BF, + 0x2B1F34EB, 0x78848413, + 0x2AC08025, 0x78A63D10, + 0x2A61B101, 0x78C7ABA1, + 0x2A02C7B8, 0x78E8CFB1, + 0x29A3C484, 0x7909A92C, + 0x2944A7A2, 0x792A37FE, + 0x28E5714A, 0x794A7C11, + 0x288621B9, 0x796A7554, + 0x2826B928, 0x798A23B1, + 0x27C737D2, 0x79A98715, + 0x27679DF4, 0x79C89F6D, + 0x2707EBC6, 0x79E76CA6, + 0x26A82185, 0x7A05EEAD, + 0x26483F6C, 0x7A24256E, + 0x25E845B5, 0x7A4210D8, + 0x2588349D, 0x7A5FB0D8, + 0x25280C5D, 0x7A7D055B, + 0x24C7CD32, 0x7A9A0E4F, + 0x24677757, 0x7AB6CBA3, + 0x24070B07, 0x7AD33D45, + 0x23A6887E, 0x7AEF6323, + 0x2345EFF7, 0x7B0B3D2C, + 0x22E541AE, 0x7B26CB4F, + 0x22847DDF, 0x7B420D7A, + 0x2223A4C5, 0x7B5D039D, + 0x21C2B69C, 0x7B77ADA8, + 0x2161B39F, 0x7B920B89, + 0x21009C0B, 0x7BAC1D31, + 0x209F701C, 0x7BC5E28F, + 0x203E300D, 0x7BDF5B94, + 0x1FDCDC1A, 0x7BF88830, + 0x1F7B7480, 0x7C116853, + 0x1F19F97B, 0x7C29FBEE, + 0x1EB86B46, 0x7C4242F2, + 0x1E56CA1E, 0x7C5A3D4F, + 0x1DF5163F, 0x7C71EAF8, + 0x1D934FE5, 0x7C894BDD, + 0x1D31774D, 0x7CA05FF1, + 0x1CCF8CB3, 0x7CB72724, + 0x1C6D9053, 0x7CCDA168, + 0x1C0B826A, 0x7CE3CEB1, + 0x1BA96334, 0x7CF9AEF0, + 0x1B4732EF, 0x7D0F4218, + 0x1AE4F1D6, 0x7D24881A, + 0x1A82A025, 0x7D3980EC, + 0x1A203E1B, 0x7D4E2C7E, + 0x19BDCBF2, 0x7D628AC5, + 0x195B49E9, 0x7D769BB5, + 0x18F8B83C, 0x7D8A5F3F, + 0x18961727, 0x7D9DD55A, + 0x183366E8, 0x7DB0FDF7, + 0x17D0A7BB, 0x7DC3D90D, + 0x176DD9DE, 0x7DD6668E, + 0x170AFD8D, 0x7DE8A670, + 0x16A81305, 0x7DFA98A7, + 0x16451A83, 0x7E0C3D29, + 0x15E21444, 0x7E1D93E9, + 0x157F0086, 0x7E2E9CDF, + 0x151BDF85, 0x7E3F57FE, + 0x14B8B17F, 0x7E4FC53E, + 0x145576B1, 0x7E5FE493, + 0x13F22F57, 0x7E6FB5F3, + 0x138EDBB0, 0x7E7F3956, + 0x132B7BF9, 0x7E8E6EB1, + 0x12C8106E, 0x7E9D55FC, + 0x1264994E, 0x7EABEF2C, + 0x120116D4, 0x7EBA3A39, + 0x119D8940, 0x7EC8371A, + 0x1139F0CE, 0x7ED5E5C6, + 0x10D64DBC, 0x7EE34635, + 0x1072A047, 0x7EF0585F, + 0x100EE8AD, 0x7EFD1C3C, + 0x0FAB272B, 0x7F0991C3, + 0x0F475BFE, 0x7F15B8EE, + 0x0EE38765, 0x7F2191B4, + 0x0E7FA99D, 0x7F2D1C0E, + 0x0E1BC2E3, 0x7F3857F5, + 0x0DB7D376, 0x7F434563, + 0x0D53DB92, 0x7F4DE450, + 0x0CEFDB75, 0x7F5834B6, + 0x0C8BD35E, 0x7F62368F, + 0x0C27C389, 0x7F6BE9D4, + 0x0BC3AC35, 0x7F754E7F, + 0x0B5F8D9F, 0x7F7E648B, + 0x0AFB6805, 0x7F872BF3, + 0x0A973BA5, 0x7F8FA4AF, + 0x0A3308BC, 0x7F97CEBC, + 0x09CECF89, 0x7F9FAA15, + 0x096A9049, 0x7FA736B4, + 0x09064B3A, 0x7FAE7494, + 0x08A2009A, 0x7FB563B2, + 0x083DB0A7, 0x7FBC040A, + 0x07D95B9E, 0x7FC25596, + 0x077501BE, 0x7FC85853, + 0x0710A344, 0x7FCE0C3E, + 0x06AC406F, 0x7FD37152, + 0x0647D97C, 0x7FD8878D, + 0x05E36EA9, 0x7FDD4EEC, + 0x057F0034, 0x7FE1C76B, + 0x051A8E5C, 0x7FE5F108, + 0x04B6195D, 0x7FE9CBC0, + 0x0451A176, 0x7FED5790, + 0x03ED26E6, 0x7FF09477, + 0x0388A9E9, 0x7FF38273, + 0x03242ABF, 0x7FF62182, + 0x02BFA9A4, 0x7FF871A1, + 0x025B26D7, 0x7FFA72D1, + 0x01F6A296, 0x7FFC250F, + 0x01921D1F, 0x7FFD885A, + 0x012D96B0, 0x7FFE9CB2, + 0x00C90F88, 0x7FFF6216, + 0x006487E3, 0x7FFFD885, + 0x00000000, 0x7FFFFFFF, + 0xFF9B781D, 0x7FFFD885, + 0xFF36F078, 0x7FFF6216, + 0xFED2694F, 0x7FFE9CB2, + 0xFE6DE2E0, 0x7FFD885A, + 0xFE095D69, 0x7FFC250F, + 0xFDA4D928, 0x7FFA72D1, + 0xFD40565B, 0x7FF871A1, + 0xFCDBD541, 0x7FF62182, + 0xFC775616, 0x7FF38273, + 0xFC12D919, 0x7FF09477, + 0xFBAE5E89, 0x7FED5790, + 0xFB49E6A2, 0x7FE9CBC0, + 0xFAE571A4, 0x7FE5F108, + 0xFA80FFCB, 0x7FE1C76B, + 0xFA1C9156, 0x7FDD4EEC, + 0xF9B82683, 0x7FD8878D, + 0xF953BF90, 0x7FD37152, + 0xF8EF5CBB, 0x7FCE0C3E, + 0xF88AFE41, 0x7FC85853, + 0xF826A461, 0x7FC25596, + 0xF7C24F58, 0x7FBC040A, + 0xF75DFF65, 0x7FB563B2, + 0xF6F9B4C5, 0x7FAE7494, + 0xF6956FB6, 0x7FA736B4, + 0xF6313076, 0x7F9FAA15, + 0xF5CCF743, 0x7F97CEBC, + 0xF568C45A, 0x7F8FA4AF, + 0xF50497FA, 0x7F872BF3, + 0xF4A07260, 0x7F7E648B, + 0xF43C53CA, 0x7F754E7F, + 0xF3D83C76, 0x7F6BE9D4, + 0xF3742CA1, 0x7F62368F, + 0xF310248A, 0x7F5834B6, + 0xF2AC246D, 0x7F4DE450, + 0xF2482C89, 0x7F434563, + 0xF1E43D1C, 0x7F3857F5, + 0xF1805662, 0x7F2D1C0E, + 0xF11C789A, 0x7F2191B4, + 0xF0B8A401, 0x7F15B8EE, + 0xF054D8D4, 0x7F0991C3, + 0xEFF11752, 0x7EFD1C3C, + 0xEF8D5FB8, 0x7EF0585F, + 0xEF29B243, 0x7EE34635, + 0xEEC60F31, 0x7ED5E5C6, + 0xEE6276BF, 0x7EC8371A, + 0xEDFEE92B, 0x7EBA3A39, + 0xED9B66B2, 0x7EABEF2C, + 0xED37EF91, 0x7E9D55FC, + 0xECD48406, 0x7E8E6EB1, + 0xEC71244F, 0x7E7F3956, + 0xEC0DD0A8, 0x7E6FB5F3, + 0xEBAA894E, 0x7E5FE493, + 0xEB474E80, 0x7E4FC53E, + 0xEAE4207A, 0x7E3F57FE, + 0xEA80FF79, 0x7E2E9CDF, + 0xEA1DEBBB, 0x7E1D93E9, + 0xE9BAE57C, 0x7E0C3D29, + 0xE957ECFB, 0x7DFA98A7, + 0xE8F50273, 0x7DE8A670, + 0xE8922621, 0x7DD6668E, + 0xE82F5844, 0x7DC3D90D, + 0xE7CC9917, 0x7DB0FDF7, + 0xE769E8D8, 0x7D9DD55A, + 0xE70747C3, 0x7D8A5F3F, + 0xE6A4B616, 0x7D769BB5, + 0xE642340D, 0x7D628AC5, + 0xE5DFC1E4, 0x7D4E2C7E, + 0xE57D5FDA, 0x7D3980EC, + 0xE51B0E2A, 0x7D24881A, + 0xE4B8CD10, 0x7D0F4218, + 0xE4569CCB, 0x7CF9AEF0, + 0xE3F47D95, 0x7CE3CEB1, + 0xE3926FAC, 0x7CCDA168, + 0xE330734C, 0x7CB72724, + 0xE2CE88B2, 0x7CA05FF1, + 0xE26CB01A, 0x7C894BDD, + 0xE20AE9C1, 0x7C71EAF8, + 0xE1A935E1, 0x7C5A3D4F, + 0xE14794B9, 0x7C4242F2, + 0xE0E60684, 0x7C29FBEE, + 0xE0848B7F, 0x7C116853, + 0xE02323E5, 0x7BF88830, + 0xDFC1CFF2, 0x7BDF5B94, + 0xDF608FE3, 0x7BC5E28F, + 0xDEFF63F4, 0x7BAC1D31, + 0xDE9E4C60, 0x7B920B89, + 0xDE3D4963, 0x7B77ADA8, + 0xDDDC5B3A, 0x7B5D039D, + 0xDD7B8220, 0x7B420D7A, + 0xDD1ABE51, 0x7B26CB4F, + 0xDCBA1008, 0x7B0B3D2C, + 0xDC597781, 0x7AEF6323, + 0xDBF8F4F8, 0x7AD33D45, + 0xDB9888A8, 0x7AB6CBA3, + 0xDB3832CD, 0x7A9A0E4F, + 0xDAD7F3A2, 0x7A7D055B, + 0xDA77CB62, 0x7A5FB0D8, + 0xDA17BA4A, 0x7A4210D8, + 0xD9B7C093, 0x7A24256E, + 0xD957DE7A, 0x7A05EEAD, + 0xD8F81439, 0x79E76CA6, + 0xD898620C, 0x79C89F6D, + 0xD838C82D, 0x79A98715, + 0xD7D946D7, 0x798A23B1, + 0xD779DE46, 0x796A7554, + 0xD71A8EB5, 0x794A7C11, + 0xD6BB585D, 0x792A37FE, + 0xD65C3B7B, 0x7909A92C, + 0xD5FD3847, 0x78E8CFB1, + 0xD59E4EFE, 0x78C7ABA1, + 0xD53F7FDA, 0x78A63D10, + 0xD4E0CB14, 0x78848413, + 0xD48230E8, 0x786280BF, + 0xD423B190, 0x78403328, + 0xD3C54D46, 0x781D9B64, + 0xD3670445, 0x77FAB988, + 0xD308D6C6, 0x77D78DAA, + 0xD2AAC504, 0x77B417DF, + 0xD24CCF38, 0x7790583D, + 0xD1EEF59E, 0x776C4EDB, + 0xD191386D, 0x7747FBCE, + 0xD13397E1, 0x77235F2D, + 0xD0D61433, 0x76FE790E, + 0xD078AD9D, 0x76D94988, + 0xD01B6459, 0x76B3D0B3, + 0xCFBE389F, 0x768E0EA5, + 0xCF612AAA, 0x76680376, + 0xCF043AB2, 0x7641AF3C, + 0xCEA768F2, 0x761B1211, + 0xCE4AB5A2, 0x75F42C0A, + 0xCDEE20FC, 0x75CCFD42, + 0xCD91AB38, 0x75A585CF, + 0xCD355490, 0x757DC5CA, + 0xCCD91D3D, 0x7555BD4B, + 0xCC7D0577, 0x752D6C6C, + 0xCC210D78, 0x7504D345, + 0xCBC53578, 0x74DBF1EF, + 0xCB697DB0, 0x74B2C883, + 0xCB0DE658, 0x7489571B, + 0xCAB26FA9, 0x745F9DD1, + 0xCA5719DB, 0x74359CBD, + 0xC9FBE527, 0x740B53FA, + 0xC9A0D1C4, 0x73E0C3A3, + 0xC945DFEC, 0x73B5EBD0, + 0xC8EB0FD6, 0x738ACC9E, + 0xC89061BA, 0x735F6626, + 0xC835D5D0, 0x7333B883, + 0xC7DB6C50, 0x7307C3D0, + 0xC7812571, 0x72DB8828, + 0xC727016C, 0x72AF05A6, + 0xC6CD0079, 0x72823C66, + 0xC67322CD, 0x72552C84, + 0xC61968A2, 0x7227D61C, + 0xC5BFD22E, 0x71FA3948, + 0xC5665FA8, 0x71CC5626, + 0xC50D1148, 0x719E2CD2, + 0xC4B3E746, 0x716FBD68, + 0xC45AE1D7, 0x71410804, + 0xC4020132, 0x71120CC5, + 0xC3A9458F, 0x70E2CBC6, + 0xC350AF25, 0x70B34524, + 0xC2F83E2A, 0x708378FE, + 0xC29FF2D4, 0x70536771, + 0xC247CD5A, 0x70231099, + 0xC1EFCDF2, 0x6FF27496, + 0xC197F4D3, 0x6FC19385, + 0xC1404233, 0x6F906D84, + 0xC0E8B648, 0x6F5F02B1, + 0xC0915147, 0x6F2D532C, + 0xC03A1368, 0x6EFB5F12, + 0xBFE2FCDF, 0x6EC92682, + 0xBF8C0DE2, 0x6E96A99C, + 0xBF3546A8, 0x6E63E87F, + 0xBEDEA765, 0x6E30E349, + 0xBE88304F, 0x6DFD9A1B, + 0xBE31E19B, 0x6DCA0D14, + 0xBDDBBB7F, 0x6D963C54, + 0xBD85BE2F, 0x6D6227FA, + 0xBD2FE9E1, 0x6D2DD027, + 0xBCDA3ECA, 0x6CF934FB, + 0xBC84BD1E, 0x6CC45697, + 0xBC2F6513, 0x6C8F351C, + 0xBBDA36DC, 0x6C59D0A9, + 0xBB8532AF, 0x6C242960, + 0xBB3058C0, 0x6BEE3F62, + 0xBADBA943, 0x6BB812D0, + 0xBA87246C, 0x6B81A3CD, + 0xBA32CA70, 0x6B4AF278, + 0xB9DE9B83, 0x6B13FEF5, + 0xB98A97D8, 0x6ADCC964, + 0xB936BFA3, 0x6AA551E8, + 0xB8E31319, 0x6A6D98A4, + 0xB88F926C, 0x6A359DB9, + 0xB83C3DD1, 0x69FD614A, + 0xB7E9157A, 0x69C4E37A, + 0xB796199B, 0x698C246C, + 0xB7434A67, 0x69532442, + 0xB6F0A811, 0x6919E320, + 0xB69E32CD, 0x68E06129, + 0xB64BEACC, 0x68A69E81, + 0xB5F9D042, 0x686C9B4B, + 0xB5A7E362, 0x683257AA, + 0xB556245E, 0x67F7D3C4, + 0xB5049368, 0x67BD0FBC, + 0xB4B330B2, 0x67820BB6, + 0xB461FC70, 0x6746C7D7, + 0xB410F6D2, 0x670B4443, + 0xB3C0200C, 0x66CF811F, + 0xB36F784E, 0x66937E90, + 0xB31EFFCB, 0x66573CBB, + 0xB2CEB6B5, 0x661ABBC5, + 0xB27E9D3B, 0x65DDFBD3, + 0xB22EB392, 0x65A0FD0B, + 0xB1DEF9E8, 0x6563BF92, + 0xB18F7070, 0x6526438E, + 0xB140175B, 0x64E88926, + 0xB0F0EEDA, 0x64AA907F, + 0xB0A1F71C, 0x646C59BF, + 0xB0533055, 0x642DE50D, + 0xB0049AB2, 0x63EF328F, + 0xAFB63667, 0x63B0426D, + 0xAF6803A1, 0x637114CC, + 0xAF1A0293, 0x6331A9D4, + 0xAECC336B, 0x62F201AC, + 0xAE7E965B, 0x62B21C7B, + 0xAE312B91, 0x6271FA69, + 0xADE3F33E, 0x62319B9D, + 0xAD96ED91, 0x61F1003E, + 0xAD4A1ABA, 0x61B02876, + 0xACFD7AE8, 0x616F146B, + 0xACB10E4A, 0x612DC446, + 0xAC64D510, 0x60EC3830, + 0xAC18CF68, 0x60AA704F, + 0xABCCFD82, 0x60686CCE, + 0xAB815F8C, 0x60262DD5, + 0xAB35F5B5, 0x5FE3B38D, + 0xAAEAC02B, 0x5FA0FE1E, + 0xAA9FBF1D, 0x5F5E0DB3, + 0xAA54F2B9, 0x5F1AE273, + 0xAA0A5B2D, 0x5ED77C89, + 0xA9BFF8A8, 0x5E93DC1F, + 0xA975CB56, 0x5E50015D, + 0xA92BD366, 0x5E0BEC6E, + 0xA8E21106, 0x5DC79D7C, + 0xA8988463, 0x5D8314B0, + 0xA84F2DA9, 0x5D3E5236, + 0xA8060D08, 0x5CF95638, + 0xA7BD22AB, 0x5CB420DF, + 0xA7746EC0, 0x5C6EB258, + 0xA72BF173, 0x5C290ACC, + 0xA6E3AAF2, 0x5BE32A67, + 0xA69B9B68, 0x5B9D1153, + 0xA653C302, 0x5B56BFBD, + 0xA60C21ED, 0x5B1035CF, + 0xA5C4B855, 0x5AC973B4, + 0xA57D8666, 0x5A82799A, + 0xA5368C4B, 0x5A3B47AA, + 0xA4EFCA31, 0x59F3DE12, + 0xA4A94042, 0x59AC3CFD, + 0xA462EEAC, 0x59646497, + 0xA41CD598, 0x591C550E, + 0xA3D6F533, 0x58D40E8C, + 0xA3914DA7, 0x588B913F, + 0xA34BDF20, 0x5842DD54, + 0xA306A9C7, 0x57F9F2F7, + 0xA2C1ADC9, 0x57B0D256, + 0xA27CEB4F, 0x57677B9D, + 0xA2386283, 0x571DEEF9, + 0xA1F41391, 0x56D42C99, + 0xA1AFFEA2, 0x568A34A9, + 0xA16C23E1, 0x56400757, + 0xA1288376, 0x55F5A4D2, + 0xA0E51D8C, 0x55AB0D46, + 0xA0A1F24C, 0x556040E2, + 0xA05F01E1, 0x55153FD4, + 0xA01C4C72, 0x54CA0A4A, + 0x9FD9D22A, 0x547EA073, + 0x9F979331, 0x5433027D, + 0x9F558FB0, 0x53E73097, + 0x9F13C7D0, 0x539B2AEF, + 0x9ED23BB9, 0x534EF1B5, + 0x9E90EB94, 0x53028517, + 0x9E4FD789, 0x52B5E545, + 0x9E0EFFC1, 0x5269126E, + 0x9DCE6462, 0x521C0CC1, + 0x9D8E0596, 0x51CED46E, + 0x9D4DE384, 0x518169A4, + 0x9D0DFE53, 0x5133CC94, + 0x9CCE562B, 0x50E5FD6C, + 0x9C8EEB33, 0x5097FC5E, + 0x9C4FBD92, 0x5049C999, + 0x9C10CD70, 0x4FFB654D, + 0x9BD21AF2, 0x4FACCFAB, + 0x9B93A640, 0x4F5E08E3, + 0x9B556F80, 0x4F0F1126, + 0x9B1776D9, 0x4EBFE8A4, + 0x9AD9BC71, 0x4E708F8F, + 0x9A9C406D, 0x4E210617, + 0x9A5F02F5, 0x4DD14C6E, + 0x9A22042C, 0x4D8162C4, + 0x99E5443A, 0x4D31494B, + 0x99A8C344, 0x4CE10034, + 0x996C816F, 0x4C9087B1, + 0x99307EE0, 0x4C3FDFF3, + 0x98F4BBBC, 0x4BEF092D, + 0x98B93828, 0x4B9E038F, + 0x987DF449, 0x4B4CCF4D, + 0x9842F043, 0x4AFB6C97, + 0x98082C3B, 0x4AA9DBA1, + 0x97CDA855, 0x4A581C9D, + 0x979364B5, 0x4A062FBD, + 0x9759617E, 0x49B41533, + 0x971F9ED6, 0x4961CD32, + 0x96E61CDF, 0x490F57EE, + 0x96ACDBBD, 0x48BCB598, + 0x9673DB94, 0x4869E664, + 0x963B1C85, 0x4816EA85, + 0x96029EB5, 0x47C3C22E, + 0x95CA6246, 0x47706D93, + 0x9592675B, 0x471CECE6, + 0x955AAE17, 0x46C9405C, + 0x9523369B, 0x46756827, + 0x94EC010B, 0x4621647C, + 0x94B50D87, 0x45CD358F, + 0x947E5C32, 0x4578DB93, + 0x9447ED2F, 0x452456BC, + 0x9411C09D, 0x44CFA73F, + 0x93DBD69F, 0x447ACD50, + 0x93A62F56, 0x4425C923, + 0x9370CAE4, 0x43D09AEC, + 0x933BA968, 0x437B42E1, + 0x9306CB04, 0x4325C135, + 0x92D22FD8, 0x42D0161E, + 0x929DD805, 0x427A41D0, + 0x9269C3AC, 0x42244480, + 0x9235F2EB, 0x41CE1E64, + 0x920265E4, 0x4177CFB0, + 0x91CF1CB6, 0x4121589A, + 0x919C1780, 0x40CAB957, + 0x91695663, 0x4073F21D, + 0x9136D97D, 0x401D0320, + 0x9104A0ED, 0x3FC5EC97, + 0x90D2ACD3, 0x3F6EAEB8, + 0x90A0FD4E, 0x3F1749B7, + 0x906F927B, 0x3EBFBDCC, + 0x903E6C7A, 0x3E680B2C, + 0x900D8B69, 0x3E10320D, + 0x8FDCEF66, 0x3DB832A5, + 0x8FAC988E, 0x3D600D2B, + 0x8F7C8701, 0x3D07C1D5, + 0x8F4CBADB, 0x3CAF50DA, + 0x8F1D343A, 0x3C56BA70, + 0x8EEDF33B, 0x3BFDFECD, + 0x8EBEF7FB, 0x3BA51E29, + 0x8E904298, 0x3B4C18BA, + 0x8E61D32D, 0x3AF2EEB7, + 0x8E33A9D9, 0x3A99A057, + 0x8E05C6B7, 0x3A402DD1, + 0x8DD829E4, 0x39E6975D, + 0x8DAAD37B, 0x398CDD32, + 0x8D7DC399, 0x3932FF87, + 0x8D50FA59, 0x38D8FE93, + 0x8D2477D8, 0x387EDA8E, + 0x8CF83C30, 0x382493B0, + 0x8CCC477D, 0x37CA2A30, + 0x8CA099D9, 0x376F9E46, + 0x8C753361, 0x3714F02A, + 0x8C4A142F, 0x36BA2013, + 0x8C1F3C5C, 0x365F2E3B, + 0x8BF4AC05, 0x36041AD9, + 0x8BCA6342, 0x35A8E624, + 0x8BA0622F, 0x354D9056, + 0x8B76A8E4, 0x34F219A7, + 0x8B4D377C, 0x3496824F, + 0x8B240E10, 0x343ACA87, + 0x8AFB2CBA, 0x33DEF287, + 0x8AD29393, 0x3382FA88, + 0x8AAA42B4, 0x3326E2C2, + 0x8A823A35, 0x32CAAB6F, + 0x8A5A7A30, 0x326E54C7, + 0x8A3302BD, 0x3211DF03, + 0x8A0BD3F5, 0x31B54A5D, + 0x89E4EDEE, 0x3158970D, + 0x89BE50C3, 0x30FBC54D, + 0x8997FC89, 0x309ED555, + 0x8971F15A, 0x3041C760, + 0x894C2F4C, 0x2FE49BA6, + 0x8926B677, 0x2F875262, + 0x890186F1, 0x2F29EBCC, + 0x88DCA0D3, 0x2ECC681E, + 0x88B80431, 0x2E6EC792, + 0x8893B124, 0x2E110A62, + 0x886FA7C2, 0x2DB330C7, + 0x884BE820, 0x2D553AFB, + 0x88287255, 0x2CF72939, + 0x88054677, 0x2C98FBBA, + 0x87E2649B, 0x2C3AB2B9, + 0x87BFCCD7, 0x2BDC4E6F, + 0x879D7F40, 0x2B7DCF17, + 0x877B7BEC, 0x2B1F34EB, + 0x8759C2EF, 0x2AC08025, + 0x8738545E, 0x2A61B101, + 0x8717304E, 0x2A02C7B8, + 0x86F656D3, 0x29A3C484, + 0x86D5C802, 0x2944A7A2, + 0x86B583EE, 0x28E5714A, + 0x86958AAB, 0x288621B9, + 0x8675DC4E, 0x2826B928, + 0x865678EA, 0x27C737D2, + 0x86376092, 0x27679DF4, + 0x86189359, 0x2707EBC6, + 0x85FA1152, 0x26A82185, + 0x85DBDA91, 0x26483F6C, + 0x85BDEF27, 0x25E845B5, + 0x85A04F28, 0x2588349D, + 0x8582FAA4, 0x25280C5D, + 0x8565F1B0, 0x24C7CD32, + 0x8549345C, 0x24677757, + 0x852CC2BA, 0x24070B07, + 0x85109CDC, 0x23A6887E, + 0x84F4C2D3, 0x2345EFF7, + 0x84D934B0, 0x22E541AE, + 0x84BDF285, 0x22847DDF, + 0x84A2FC62, 0x2223A4C5, + 0x84885257, 0x21C2B69C, + 0x846DF476, 0x2161B39F, + 0x8453E2CE, 0x21009C0B, + 0x843A1D70, 0x209F701C, + 0x8420A46B, 0x203E300D, + 0x840777CF, 0x1FDCDC1A, + 0x83EE97AC, 0x1F7B7480, + 0x83D60411, 0x1F19F97B, + 0x83BDBD0D, 0x1EB86B46, + 0x83A5C2B0, 0x1E56CA1E, + 0x838E1507, 0x1DF5163F, + 0x8376B422, 0x1D934FE5, + 0x835FA00E, 0x1D31774D, + 0x8348D8DB, 0x1CCF8CB3, + 0x83325E97, 0x1C6D9053, + 0x831C314E, 0x1C0B826A, + 0x8306510F, 0x1BA96334, + 0x82F0BDE8, 0x1B4732EF, + 0x82DB77E5, 0x1AE4F1D6, + 0x82C67F13, 0x1A82A025, + 0x82B1D381, 0x1A203E1B, + 0x829D753A, 0x19BDCBF2, + 0x8289644A, 0x195B49E9, + 0x8275A0C0, 0x18F8B83C, + 0x82622AA5, 0x18961727, + 0x824F0208, 0x183366E8, + 0x823C26F2, 0x17D0A7BB, + 0x82299971, 0x176DD9DE, + 0x8217598F, 0x170AFD8D, + 0x82056758, 0x16A81305, + 0x81F3C2D7, 0x16451A83, + 0x81E26C16, 0x15E21444, + 0x81D16320, 0x157F0086, + 0x81C0A801, 0x151BDF85, + 0x81B03AC1, 0x14B8B17F, + 0x81A01B6C, 0x145576B1, + 0x81904A0C, 0x13F22F57, + 0x8180C6A9, 0x138EDBB0, + 0x8171914E, 0x132B7BF9, + 0x8162AA03, 0x12C8106E, + 0x815410D3, 0x1264994E, + 0x8145C5C6, 0x120116D4, + 0x8137C8E6, 0x119D8940, + 0x812A1A39, 0x1139F0CE, + 0x811CB9CA, 0x10D64DBC, + 0x810FA7A0, 0x1072A047, + 0x8102E3C3, 0x100EE8AD, + 0x80F66E3C, 0x0FAB272B, + 0x80EA4712, 0x0F475BFE, + 0x80DE6E4C, 0x0EE38765, + 0x80D2E3F1, 0x0E7FA99D, + 0x80C7A80A, 0x0E1BC2E3, + 0x80BCBA9C, 0x0DB7D376, + 0x80B21BAF, 0x0D53DB92, + 0x80A7CB49, 0x0CEFDB75, + 0x809DC970, 0x0C8BD35E, + 0x8094162B, 0x0C27C389, + 0x808AB180, 0x0BC3AC35, + 0x80819B74, 0x0B5F8D9F, + 0x8078D40D, 0x0AFB6805, + 0x80705B50, 0x0A973BA5, + 0x80683143, 0x0A3308BC, + 0x806055EA, 0x09CECF89, + 0x8058C94C, 0x096A9049, + 0x80518B6B, 0x09064B3A, + 0x804A9C4D, 0x08A2009A, + 0x8043FBF6, 0x083DB0A7, + 0x803DAA69, 0x07D95B9E, + 0x8037A7AC, 0x077501BE, + 0x8031F3C1, 0x0710A344, + 0x802C8EAD, 0x06AC406F, + 0x80277872, 0x0647D97C, + 0x8022B113, 0x05E36EA9, + 0x801E3894, 0x057F0034, + 0x801A0EF7, 0x051A8E5C, + 0x80163440, 0x04B6195D, + 0x8012A86F, 0x0451A176, + 0x800F6B88, 0x03ED26E6, + 0x800C7D8C, 0x0388A9E9, + 0x8009DE7D, 0x03242ABF, + 0x80078E5E, 0x02BFA9A4, + 0x80058D2E, 0x025B26D7, + 0x8003DAF0, 0x01F6A296, + 0x800277A5, 0x01921D1F, + 0x8001634D, 0x012D96B0, + 0x80009DE9, 0x00C90F88, + 0x8000277A, 0x006487E3, + 0x80000000, 0x00000000, + 0x8000277A, 0xFF9B781D, + 0x80009DE9, 0xFF36F078, + 0x8001634D, 0xFED2694F, + 0x800277A5, 0xFE6DE2E0, + 0x8003DAF0, 0xFE095D69, + 0x80058D2E, 0xFDA4D928, + 0x80078E5E, 0xFD40565B, + 0x8009DE7D, 0xFCDBD541, + 0x800C7D8C, 0xFC775616, + 0x800F6B88, 0xFC12D919, + 0x8012A86F, 0xFBAE5E89, + 0x80163440, 0xFB49E6A2, + 0x801A0EF7, 0xFAE571A4, + 0x801E3894, 0xFA80FFCB, + 0x8022B113, 0xFA1C9156, + 0x80277872, 0xF9B82683, + 0x802C8EAD, 0xF953BF90, + 0x8031F3C1, 0xF8EF5CBB, + 0x8037A7AC, 0xF88AFE41, + 0x803DAA69, 0xF826A461, + 0x8043FBF6, 0xF7C24F58, + 0x804A9C4D, 0xF75DFF65, + 0x80518B6B, 0xF6F9B4C5, + 0x8058C94C, 0xF6956FB6, + 0x806055EA, 0xF6313076, + 0x80683143, 0xF5CCF743, + 0x80705B50, 0xF568C45A, + 0x8078D40D, 0xF50497FA, + 0x80819B74, 0xF4A07260, + 0x808AB180, 0xF43C53CA, + 0x8094162B, 0xF3D83C76, + 0x809DC970, 0xF3742CA1, + 0x80A7CB49, 0xF310248A, + 0x80B21BAF, 0xF2AC246D, + 0x80BCBA9C, 0xF2482C89, + 0x80C7A80A, 0xF1E43D1C, + 0x80D2E3F1, 0xF1805662, + 0x80DE6E4C, 0xF11C789A, + 0x80EA4712, 0xF0B8A401, + 0x80F66E3C, 0xF054D8D4, + 0x8102E3C3, 0xEFF11752, + 0x810FA7A0, 0xEF8D5FB8, + 0x811CB9CA, 0xEF29B243, + 0x812A1A39, 0xEEC60F31, + 0x8137C8E6, 0xEE6276BF, + 0x8145C5C6, 0xEDFEE92B, + 0x815410D3, 0xED9B66B2, + 0x8162AA03, 0xED37EF91, + 0x8171914E, 0xECD48406, + 0x8180C6A9, 0xEC71244F, + 0x81904A0C, 0xEC0DD0A8, + 0x81A01B6C, 0xEBAA894E, + 0x81B03AC1, 0xEB474E80, + 0x81C0A801, 0xEAE4207A, + 0x81D16320, 0xEA80FF79, + 0x81E26C16, 0xEA1DEBBB, + 0x81F3C2D7, 0xE9BAE57C, + 0x82056758, 0xE957ECFB, + 0x8217598F, 0xE8F50273, + 0x82299971, 0xE8922621, + 0x823C26F2, 0xE82F5844, + 0x824F0208, 0xE7CC9917, + 0x82622AA5, 0xE769E8D8, + 0x8275A0C0, 0xE70747C3, + 0x8289644A, 0xE6A4B616, + 0x829D753A, 0xE642340D, + 0x82B1D381, 0xE5DFC1E4, + 0x82C67F13, 0xE57D5FDA, + 0x82DB77E5, 0xE51B0E2A, + 0x82F0BDE8, 0xE4B8CD10, + 0x8306510F, 0xE4569CCB, + 0x831C314E, 0xE3F47D95, + 0x83325E97, 0xE3926FAC, + 0x8348D8DB, 0xE330734C, + 0x835FA00E, 0xE2CE88B2, + 0x8376B422, 0xE26CB01A, + 0x838E1507, 0xE20AE9C1, + 0x83A5C2B0, 0xE1A935E1, + 0x83BDBD0D, 0xE14794B9, + 0x83D60411, 0xE0E60684, + 0x83EE97AC, 0xE0848B7F, + 0x840777CF, 0xE02323E5, + 0x8420A46B, 0xDFC1CFF2, + 0x843A1D70, 0xDF608FE3, + 0x8453E2CE, 0xDEFF63F4, + 0x846DF476, 0xDE9E4C60, + 0x84885257, 0xDE3D4963, + 0x84A2FC62, 0xDDDC5B3A, + 0x84BDF285, 0xDD7B8220, + 0x84D934B0, 0xDD1ABE51, + 0x84F4C2D3, 0xDCBA1008, + 0x85109CDC, 0xDC597781, + 0x852CC2BA, 0xDBF8F4F8, + 0x8549345C, 0xDB9888A8, + 0x8565F1B0, 0xDB3832CD, + 0x8582FAA4, 0xDAD7F3A2, + 0x85A04F28, 0xDA77CB62, + 0x85BDEF27, 0xDA17BA4A, + 0x85DBDA91, 0xD9B7C093, + 0x85FA1152, 0xD957DE7A, + 0x86189359, 0xD8F81439, + 0x86376092, 0xD898620C, + 0x865678EA, 0xD838C82D, + 0x8675DC4E, 0xD7D946D7, + 0x86958AAB, 0xD779DE46, + 0x86B583EE, 0xD71A8EB5, + 0x86D5C802, 0xD6BB585D, + 0x86F656D3, 0xD65C3B7B, + 0x8717304E, 0xD5FD3847, + 0x8738545E, 0xD59E4EFE, + 0x8759C2EF, 0xD53F7FDA, + 0x877B7BEC, 0xD4E0CB14, + 0x879D7F40, 0xD48230E8, + 0x87BFCCD7, 0xD423B190, + 0x87E2649B, 0xD3C54D46, + 0x88054677, 0xD3670445, + 0x88287255, 0xD308D6C6, + 0x884BE820, 0xD2AAC504, + 0x886FA7C2, 0xD24CCF38, + 0x8893B124, 0xD1EEF59E, + 0x88B80431, 0xD191386D, + 0x88DCA0D3, 0xD13397E1, + 0x890186F1, 0xD0D61433, + 0x8926B677, 0xD078AD9D, + 0x894C2F4C, 0xD01B6459, + 0x8971F15A, 0xCFBE389F, + 0x8997FC89, 0xCF612AAA, + 0x89BE50C3, 0xCF043AB2, + 0x89E4EDEE, 0xCEA768F2, + 0x8A0BD3F5, 0xCE4AB5A2, + 0x8A3302BD, 0xCDEE20FC, + 0x8A5A7A30, 0xCD91AB38, + 0x8A823A35, 0xCD355490, + 0x8AAA42B4, 0xCCD91D3D, + 0x8AD29393, 0xCC7D0577, + 0x8AFB2CBA, 0xCC210D78, + 0x8B240E10, 0xCBC53578, + 0x8B4D377C, 0xCB697DB0, + 0x8B76A8E4, 0xCB0DE658, + 0x8BA0622F, 0xCAB26FA9, + 0x8BCA6342, 0xCA5719DB, + 0x8BF4AC05, 0xC9FBE527, + 0x8C1F3C5C, 0xC9A0D1C4, + 0x8C4A142F, 0xC945DFEC, + 0x8C753361, 0xC8EB0FD6, + 0x8CA099D9, 0xC89061BA, + 0x8CCC477D, 0xC835D5D0, + 0x8CF83C30, 0xC7DB6C50, + 0x8D2477D8, 0xC7812571, + 0x8D50FA59, 0xC727016C, + 0x8D7DC399, 0xC6CD0079, + 0x8DAAD37B, 0xC67322CD, + 0x8DD829E4, 0xC61968A2, + 0x8E05C6B7, 0xC5BFD22E, + 0x8E33A9D9, 0xC5665FA8, + 0x8E61D32D, 0xC50D1148, + 0x8E904298, 0xC4B3E746, + 0x8EBEF7FB, 0xC45AE1D7, + 0x8EEDF33B, 0xC4020132, + 0x8F1D343A, 0xC3A9458F, + 0x8F4CBADB, 0xC350AF25, + 0x8F7C8701, 0xC2F83E2A, + 0x8FAC988E, 0xC29FF2D4, + 0x8FDCEF66, 0xC247CD5A, + 0x900D8B69, 0xC1EFCDF2, + 0x903E6C7A, 0xC197F4D3, + 0x906F927B, 0xC1404233, + 0x90A0FD4E, 0xC0E8B648, + 0x90D2ACD3, 0xC0915147, + 0x9104A0ED, 0xC03A1368, + 0x9136D97D, 0xBFE2FCDF, + 0x91695663, 0xBF8C0DE2, + 0x919C1780, 0xBF3546A8, + 0x91CF1CB6, 0xBEDEA765, + 0x920265E4, 0xBE88304F, + 0x9235F2EB, 0xBE31E19B, + 0x9269C3AC, 0xBDDBBB7F, + 0x929DD805, 0xBD85BE2F, + 0x92D22FD8, 0xBD2FE9E1, + 0x9306CB04, 0xBCDA3ECA, + 0x933BA968, 0xBC84BD1E, + 0x9370CAE4, 0xBC2F6513, + 0x93A62F56, 0xBBDA36DC, + 0x93DBD69F, 0xBB8532AF, + 0x9411C09D, 0xBB3058C0, + 0x9447ED2F, 0xBADBA943, + 0x947E5C32, 0xBA87246C, + 0x94B50D87, 0xBA32CA70, + 0x94EC010B, 0xB9DE9B83, + 0x9523369B, 0xB98A97D8, + 0x955AAE17, 0xB936BFA3, + 0x9592675B, 0xB8E31319, + 0x95CA6246, 0xB88F926C, + 0x96029EB5, 0xB83C3DD1, + 0x963B1C85, 0xB7E9157A, + 0x9673DB94, 0xB796199B, + 0x96ACDBBD, 0xB7434A67, + 0x96E61CDF, 0xB6F0A811, + 0x971F9ED6, 0xB69E32CD, + 0x9759617E, 0xB64BEACC, + 0x979364B5, 0xB5F9D042, + 0x97CDA855, 0xB5A7E362, + 0x98082C3B, 0xB556245E, + 0x9842F043, 0xB5049368, + 0x987DF449, 0xB4B330B2, + 0x98B93828, 0xB461FC70, + 0x98F4BBBC, 0xB410F6D2, + 0x99307EE0, 0xB3C0200C, + 0x996C816F, 0xB36F784E, + 0x99A8C344, 0xB31EFFCB, + 0x99E5443A, 0xB2CEB6B5, + 0x9A22042C, 0xB27E9D3B, + 0x9A5F02F5, 0xB22EB392, + 0x9A9C406D, 0xB1DEF9E8, + 0x9AD9BC71, 0xB18F7070, + 0x9B1776D9, 0xB140175B, + 0x9B556F80, 0xB0F0EEDA, + 0x9B93A640, 0xB0A1F71C, + 0x9BD21AF2, 0xB0533055, + 0x9C10CD70, 0xB0049AB2, + 0x9C4FBD92, 0xAFB63667, + 0x9C8EEB33, 0xAF6803A1, + 0x9CCE562B, 0xAF1A0293, + 0x9D0DFE53, 0xAECC336B, + 0x9D4DE384, 0xAE7E965B, + 0x9D8E0596, 0xAE312B91, + 0x9DCE6462, 0xADE3F33E, + 0x9E0EFFC1, 0xAD96ED91, + 0x9E4FD789, 0xAD4A1ABA, + 0x9E90EB94, 0xACFD7AE8, + 0x9ED23BB9, 0xACB10E4A, + 0x9F13C7D0, 0xAC64D510, + 0x9F558FB0, 0xAC18CF68, + 0x9F979331, 0xABCCFD82, + 0x9FD9D22A, 0xAB815F8C, + 0xA01C4C72, 0xAB35F5B5, + 0xA05F01E1, 0xAAEAC02B, + 0xA0A1F24C, 0xAA9FBF1D, + 0xA0E51D8C, 0xAA54F2B9, + 0xA1288376, 0xAA0A5B2D, + 0xA16C23E1, 0xA9BFF8A8, + 0xA1AFFEA2, 0xA975CB56, + 0xA1F41391, 0xA92BD366, + 0xA2386283, 0xA8E21106, + 0xA27CEB4F, 0xA8988463, + 0xA2C1ADC9, 0xA84F2DA9, + 0xA306A9C7, 0xA8060D08, + 0xA34BDF20, 0xA7BD22AB, + 0xA3914DA7, 0xA7746EC0, + 0xA3D6F533, 0xA72BF173, + 0xA41CD598, 0xA6E3AAF2, + 0xA462EEAC, 0xA69B9B68, + 0xA4A94042, 0xA653C302, + 0xA4EFCA31, 0xA60C21ED, + 0xA5368C4B, 0xA5C4B855, + 0xA57D8666, 0xA57D8666, + 0xA5C4B855, 0xA5368C4B, + 0xA60C21ED, 0xA4EFCA31, + 0xA653C302, 0xA4A94042, + 0xA69B9B68, 0xA462EEAC, + 0xA6E3AAF2, 0xA41CD598, + 0xA72BF173, 0xA3D6F533, + 0xA7746EC0, 0xA3914DA7, + 0xA7BD22AB, 0xA34BDF20, + 0xA8060D08, 0xA306A9C7, + 0xA84F2DA9, 0xA2C1ADC9, + 0xA8988463, 0xA27CEB4F, + 0xA8E21106, 0xA2386283, + 0xA92BD366, 0xA1F41391, + 0xA975CB56, 0xA1AFFEA2, + 0xA9BFF8A8, 0xA16C23E1, + 0xAA0A5B2D, 0xA1288376, + 0xAA54F2B9, 0xA0E51D8C, + 0xAA9FBF1D, 0xA0A1F24C, + 0xAAEAC02B, 0xA05F01E1, + 0xAB35F5B5, 0xA01C4C72, + 0xAB815F8C, 0x9FD9D22A, + 0xABCCFD82, 0x9F979331, + 0xAC18CF68, 0x9F558FB0, + 0xAC64D510, 0x9F13C7D0, + 0xACB10E4A, 0x9ED23BB9, + 0xACFD7AE8, 0x9E90EB94, + 0xAD4A1ABA, 0x9E4FD789, + 0xAD96ED91, 0x9E0EFFC1, + 0xADE3F33E, 0x9DCE6462, + 0xAE312B91, 0x9D8E0596, + 0xAE7E965B, 0x9D4DE384, + 0xAECC336B, 0x9D0DFE53, + 0xAF1A0293, 0x9CCE562B, + 0xAF6803A1, 0x9C8EEB33, + 0xAFB63667, 0x9C4FBD92, + 0xB0049AB2, 0x9C10CD70, + 0xB0533055, 0x9BD21AF2, + 0xB0A1F71C, 0x9B93A640, + 0xB0F0EEDA, 0x9B556F80, + 0xB140175B, 0x9B1776D9, + 0xB18F7070, 0x9AD9BC71, + 0xB1DEF9E8, 0x9A9C406D, + 0xB22EB392, 0x9A5F02F5, + 0xB27E9D3B, 0x9A22042C, + 0xB2CEB6B5, 0x99E5443A, + 0xB31EFFCB, 0x99A8C344, + 0xB36F784E, 0x996C816F, + 0xB3C0200C, 0x99307EE0, + 0xB410F6D2, 0x98F4BBBC, + 0xB461FC70, 0x98B93828, + 0xB4B330B2, 0x987DF449, + 0xB5049368, 0x9842F043, + 0xB556245E, 0x98082C3B, + 0xB5A7E362, 0x97CDA855, + 0xB5F9D042, 0x979364B5, + 0xB64BEACC, 0x9759617E, + 0xB69E32CD, 0x971F9ED6, + 0xB6F0A811, 0x96E61CDF, + 0xB7434A67, 0x96ACDBBD, + 0xB796199B, 0x9673DB94, + 0xB7E9157A, 0x963B1C85, + 0xB83C3DD1, 0x96029EB5, + 0xB88F926C, 0x95CA6246, + 0xB8E31319, 0x9592675B, + 0xB936BFA3, 0x955AAE17, + 0xB98A97D8, 0x9523369B, + 0xB9DE9B83, 0x94EC010B, + 0xBA32CA70, 0x94B50D87, + 0xBA87246C, 0x947E5C32, + 0xBADBA943, 0x9447ED2F, + 0xBB3058C0, 0x9411C09D, + 0xBB8532AF, 0x93DBD69F, + 0xBBDA36DC, 0x93A62F56, + 0xBC2F6513, 0x9370CAE4, + 0xBC84BD1E, 0x933BA968, + 0xBCDA3ECA, 0x9306CB04, + 0xBD2FE9E1, 0x92D22FD8, + 0xBD85BE2F, 0x929DD805, + 0xBDDBBB7F, 0x9269C3AC, + 0xBE31E19B, 0x9235F2EB, + 0xBE88304F, 0x920265E4, + 0xBEDEA765, 0x91CF1CB6, + 0xBF3546A8, 0x919C1780, + 0xBF8C0DE2, 0x91695663, + 0xBFE2FCDF, 0x9136D97D, + 0xC03A1368, 0x9104A0ED, + 0xC0915147, 0x90D2ACD3, + 0xC0E8B648, 0x90A0FD4E, + 0xC1404233, 0x906F927B, + 0xC197F4D3, 0x903E6C7A, + 0xC1EFCDF2, 0x900D8B69, + 0xC247CD5A, 0x8FDCEF66, + 0xC29FF2D4, 0x8FAC988E, + 0xC2F83E2A, 0x8F7C8701, + 0xC350AF25, 0x8F4CBADB, + 0xC3A9458F, 0x8F1D343A, + 0xC4020132, 0x8EEDF33B, + 0xC45AE1D7, 0x8EBEF7FB, + 0xC4B3E746, 0x8E904298, + 0xC50D1148, 0x8E61D32D, + 0xC5665FA8, 0x8E33A9D9, + 0xC5BFD22E, 0x8E05C6B7, + 0xC61968A2, 0x8DD829E4, + 0xC67322CD, 0x8DAAD37B, + 0xC6CD0079, 0x8D7DC399, + 0xC727016C, 0x8D50FA59, + 0xC7812571, 0x8D2477D8, + 0xC7DB6C50, 0x8CF83C30, + 0xC835D5D0, 0x8CCC477D, + 0xC89061BA, 0x8CA099D9, + 0xC8EB0FD6, 0x8C753361, + 0xC945DFEC, 0x8C4A142F, + 0xC9A0D1C4, 0x8C1F3C5C, + 0xC9FBE527, 0x8BF4AC05, + 0xCA5719DB, 0x8BCA6342, + 0xCAB26FA9, 0x8BA0622F, + 0xCB0DE658, 0x8B76A8E4, + 0xCB697DB0, 0x8B4D377C, + 0xCBC53578, 0x8B240E10, + 0xCC210D78, 0x8AFB2CBA, + 0xCC7D0577, 0x8AD29393, + 0xCCD91D3D, 0x8AAA42B4, + 0xCD355490, 0x8A823A35, + 0xCD91AB38, 0x8A5A7A30, + 0xCDEE20FC, 0x8A3302BD, + 0xCE4AB5A2, 0x8A0BD3F5, + 0xCEA768F2, 0x89E4EDEE, + 0xCF043AB2, 0x89BE50C3, + 0xCF612AAA, 0x8997FC89, + 0xCFBE389F, 0x8971F15A, + 0xD01B6459, 0x894C2F4C, + 0xD078AD9D, 0x8926B677, + 0xD0D61433, 0x890186F1, + 0xD13397E1, 0x88DCA0D3, + 0xD191386D, 0x88B80431, + 0xD1EEF59E, 0x8893B124, + 0xD24CCF38, 0x886FA7C2, + 0xD2AAC504, 0x884BE820, + 0xD308D6C6, 0x88287255, + 0xD3670445, 0x88054677, + 0xD3C54D46, 0x87E2649B, + 0xD423B190, 0x87BFCCD7, + 0xD48230E8, 0x879D7F40, + 0xD4E0CB14, 0x877B7BEC, + 0xD53F7FDA, 0x8759C2EF, + 0xD59E4EFE, 0x8738545E, + 0xD5FD3847, 0x8717304E, + 0xD65C3B7B, 0x86F656D3, + 0xD6BB585D, 0x86D5C802, + 0xD71A8EB5, 0x86B583EE, + 0xD779DE46, 0x86958AAB, + 0xD7D946D7, 0x8675DC4E, + 0xD838C82D, 0x865678EA, + 0xD898620C, 0x86376092, + 0xD8F81439, 0x86189359, + 0xD957DE7A, 0x85FA1152, + 0xD9B7C093, 0x85DBDA91, + 0xDA17BA4A, 0x85BDEF27, + 0xDA77CB62, 0x85A04F28, + 0xDAD7F3A2, 0x8582FAA4, + 0xDB3832CD, 0x8565F1B0, + 0xDB9888A8, 0x8549345C, + 0xDBF8F4F8, 0x852CC2BA, + 0xDC597781, 0x85109CDC, + 0xDCBA1008, 0x84F4C2D3, + 0xDD1ABE51, 0x84D934B0, + 0xDD7B8220, 0x84BDF285, + 0xDDDC5B3A, 0x84A2FC62, + 0xDE3D4963, 0x84885257, + 0xDE9E4C60, 0x846DF476, + 0xDEFF63F4, 0x8453E2CE, + 0xDF608FE3, 0x843A1D70, + 0xDFC1CFF2, 0x8420A46B, + 0xE02323E5, 0x840777CF, + 0xE0848B7F, 0x83EE97AC, + 0xE0E60684, 0x83D60411, + 0xE14794B9, 0x83BDBD0D, + 0xE1A935E1, 0x83A5C2B0, + 0xE20AE9C1, 0x838E1507, + 0xE26CB01A, 0x8376B422, + 0xE2CE88B2, 0x835FA00E, + 0xE330734C, 0x8348D8DB, + 0xE3926FAC, 0x83325E97, + 0xE3F47D95, 0x831C314E, + 0xE4569CCB, 0x8306510F, + 0xE4B8CD10, 0x82F0BDE8, + 0xE51B0E2A, 0x82DB77E5, + 0xE57D5FDA, 0x82C67F13, + 0xE5DFC1E4, 0x82B1D381, + 0xE642340D, 0x829D753A, + 0xE6A4B616, 0x8289644A, + 0xE70747C3, 0x8275A0C0, + 0xE769E8D8, 0x82622AA5, + 0xE7CC9917, 0x824F0208, + 0xE82F5844, 0x823C26F2, + 0xE8922621, 0x82299971, + 0xE8F50273, 0x8217598F, + 0xE957ECFB, 0x82056758, + 0xE9BAE57C, 0x81F3C2D7, + 0xEA1DEBBB, 0x81E26C16, + 0xEA80FF79, 0x81D16320, + 0xEAE4207A, 0x81C0A801, + 0xEB474E80, 0x81B03AC1, + 0xEBAA894E, 0x81A01B6C, + 0xEC0DD0A8, 0x81904A0C, + 0xEC71244F, 0x8180C6A9, + 0xECD48406, 0x8171914E, + 0xED37EF91, 0x8162AA03, + 0xED9B66B2, 0x815410D3, + 0xEDFEE92B, 0x8145C5C6, + 0xEE6276BF, 0x8137C8E6, + 0xEEC60F31, 0x812A1A39, + 0xEF29B243, 0x811CB9CA, + 0xEF8D5FB8, 0x810FA7A0, + 0xEFF11752, 0x8102E3C3, + 0xF054D8D4, 0x80F66E3C, + 0xF0B8A401, 0x80EA4712, + 0xF11C789A, 0x80DE6E4C, + 0xF1805662, 0x80D2E3F1, + 0xF1E43D1C, 0x80C7A80A, + 0xF2482C89, 0x80BCBA9C, + 0xF2AC246D, 0x80B21BAF, + 0xF310248A, 0x80A7CB49, + 0xF3742CA1, 0x809DC970, + 0xF3D83C76, 0x8094162B, + 0xF43C53CA, 0x808AB180, + 0xF4A07260, 0x80819B74, + 0xF50497FA, 0x8078D40D, + 0xF568C45A, 0x80705B50, + 0xF5CCF743, 0x80683143, + 0xF6313076, 0x806055EA, + 0xF6956FB6, 0x8058C94C, + 0xF6F9B4C5, 0x80518B6B, + 0xF75DFF65, 0x804A9C4D, + 0xF7C24F58, 0x8043FBF6, + 0xF826A461, 0x803DAA69, + 0xF88AFE41, 0x8037A7AC, + 0xF8EF5CBB, 0x8031F3C1, + 0xF953BF90, 0x802C8EAD, + 0xF9B82683, 0x80277872, + 0xFA1C9156, 0x8022B113, + 0xFA80FFCB, 0x801E3894, + 0xFAE571A4, 0x801A0EF7, + 0xFB49E6A2, 0x80163440, + 0xFBAE5E89, 0x8012A86F, + 0xFC12D919, 0x800F6B88, + 0xFC775616, 0x800C7D8C, + 0xFCDBD541, 0x8009DE7D, + 0xFD40565B, 0x80078E5E, + 0xFDA4D928, 0x80058D2E, + 0xFE095D69, 0x8003DAF0, + 0xFE6DE2E0, 0x800277A5, + 0xFED2694F, 0x8001634D, + 0xFF36F078, 0x80009DE9, + 0xFF9B781D, 0x8000277A +}; + +/** +* \par +* Example code for Q31 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefQ31[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefQ31[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 4096 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to Q31(Fixed point 1.31): +* round(twiddleCoefQ31(i) * pow(2, 31)) +* +*/ +const q31_t twiddleCoef_4096_q31[6144] = +{ + 0x7FFFFFFF, 0x00000000, + 0x7FFFF621, 0x003243F5, + 0x7FFFD885, 0x006487E3, + 0x7FFFA72C, 0x0096CBC1, + 0x7FFF6216, 0x00C90F88, + 0x7FFF0942, 0x00FB532F, + 0x7FFE9CB2, 0x012D96B0, + 0x7FFE1C64, 0x015FDA03, + 0x7FFD885A, 0x01921D1F, + 0x7FFCE093, 0x01C45FFE, + 0x7FFC250F, 0x01F6A296, + 0x7FFB55CE, 0x0228E4E1, + 0x7FFA72D1, 0x025B26D7, + 0x7FF97C17, 0x028D6870, + 0x7FF871A1, 0x02BFA9A4, + 0x7FF7536F, 0x02F1EA6B, + 0x7FF62182, 0x03242ABF, + 0x7FF4DBD8, 0x03566A96, + 0x7FF38273, 0x0388A9E9, + 0x7FF21553, 0x03BAE8B1, + 0x7FF09477, 0x03ED26E6, + 0x7FEEFFE1, 0x041F647F, + 0x7FED5790, 0x0451A176, + 0x7FEB9B85, 0x0483DDC3, + 0x7FE9CBC0, 0x04B6195D, + 0x7FE7E840, 0x04E8543D, + 0x7FE5F108, 0x051A8E5C, + 0x7FE3E616, 0x054CC7B0, + 0x7FE1C76B, 0x057F0034, + 0x7FDF9508, 0x05B137DF, + 0x7FDD4EEC, 0x05E36EA9, + 0x7FDAF518, 0x0615A48A, + 0x7FD8878D, 0x0647D97C, + 0x7FD6064B, 0x067A0D75, + 0x7FD37152, 0x06AC406F, + 0x7FD0C8A3, 0x06DE7261, + 0x7FCE0C3E, 0x0710A344, + 0x7FCB3C23, 0x0742D310, + 0x7FC85853, 0x077501BE, + 0x7FC560CF, 0x07A72F45, + 0x7FC25596, 0x07D95B9E, + 0x7FBF36A9, 0x080B86C1, + 0x7FBC040A, 0x083DB0A7, + 0x7FB8BDB7, 0x086FD947, + 0x7FB563B2, 0x08A2009A, + 0x7FB1F5FC, 0x08D42698, + 0x7FAE7494, 0x09064B3A, + 0x7FAADF7C, 0x09386E77, + 0x7FA736B4, 0x096A9049, + 0x7FA37A3C, 0x099CB0A7, + 0x7F9FAA15, 0x09CECF89, + 0x7F9BC63F, 0x0A00ECE8, + 0x7F97CEBC, 0x0A3308BC, + 0x7F93C38C, 0x0A6522FE, + 0x7F8FA4AF, 0x0A973BA5, + 0x7F8B7226, 0x0AC952AA, + 0x7F872BF3, 0x0AFB6805, + 0x7F82D214, 0x0B2D7BAE, + 0x7F7E648B, 0x0B5F8D9F, + 0x7F79E35A, 0x0B919DCE, + 0x7F754E7F, 0x0BC3AC35, + 0x7F70A5FD, 0x0BF5B8CB, + 0x7F6BE9D4, 0x0C27C389, + 0x7F671A04, 0x0C59CC67, + 0x7F62368F, 0x0C8BD35E, + 0x7F5D3F75, 0x0CBDD865, + 0x7F5834B6, 0x0CEFDB75, + 0x7F531654, 0x0D21DC87, + 0x7F4DE450, 0x0D53DB92, + 0x7F489EAA, 0x0D85D88F, + 0x7F434563, 0x0DB7D376, + 0x7F3DD87C, 0x0DE9CC3F, + 0x7F3857F5, 0x0E1BC2E3, + 0x7F32C3D0, 0x0E4DB75B, + 0x7F2D1C0E, 0x0E7FA99D, + 0x7F2760AF, 0x0EB199A3, + 0x7F2191B4, 0x0EE38765, + 0x7F1BAF1E, 0x0F1572DC, + 0x7F15B8EE, 0x0F475BFE, + 0x7F0FAF24, 0x0F7942C6, + 0x7F0991C3, 0x0FAB272B, + 0x7F0360CB, 0x0FDD0925, + 0x7EFD1C3C, 0x100EE8AD, + 0x7EF6C418, 0x1040C5BB, + 0x7EF0585F, 0x1072A047, + 0x7EE9D913, 0x10A4784A, + 0x7EE34635, 0x10D64DBC, + 0x7EDC9FC6, 0x11082096, + 0x7ED5E5C6, 0x1139F0CE, + 0x7ECF1837, 0x116BBE5F, + 0x7EC8371A, 0x119D8940, + 0x7EC1426F, 0x11CF516A, + 0x7EBA3A39, 0x120116D4, + 0x7EB31E77, 0x1232D978, + 0x7EABEF2C, 0x1264994E, + 0x7EA4AC58, 0x1296564D, + 0x7E9D55FC, 0x12C8106E, + 0x7E95EC19, 0x12F9C7AA, + 0x7E8E6EB1, 0x132B7BF9, + 0x7E86DDC5, 0x135D2D53, + 0x7E7F3956, 0x138EDBB0, + 0x7E778165, 0x13C0870A, + 0x7E6FB5F3, 0x13F22F57, + 0x7E67D702, 0x1423D492, + 0x7E5FE493, 0x145576B1, + 0x7E57DEA6, 0x148715AD, + 0x7E4FC53E, 0x14B8B17F, + 0x7E47985B, 0x14EA4A1F, + 0x7E3F57FE, 0x151BDF85, + 0x7E37042A, 0x154D71AA, + 0x7E2E9CDF, 0x157F0086, + 0x7E26221E, 0x15B08C11, + 0x7E1D93E9, 0x15E21444, + 0x7E14F242, 0x16139917, + 0x7E0C3D29, 0x16451A83, + 0x7E03749F, 0x1676987F, + 0x7DFA98A7, 0x16A81305, + 0x7DF1A942, 0x16D98A0C, + 0x7DE8A670, 0x170AFD8D, + 0x7DDF9034, 0x173C6D80, + 0x7DD6668E, 0x176DD9DE, + 0x7DCD2981, 0x179F429F, + 0x7DC3D90D, 0x17D0A7BB, + 0x7DBA7534, 0x1802092C, + 0x7DB0FDF7, 0x183366E8, + 0x7DA77359, 0x1864C0E9, + 0x7D9DD55A, 0x18961727, + 0x7D9423FB, 0x18C7699B, + 0x7D8A5F3F, 0x18F8B83C, + 0x7D808727, 0x192A0303, + 0x7D769BB5, 0x195B49E9, + 0x7D6C9CE9, 0x198C8CE6, + 0x7D628AC5, 0x19BDCBF2, + 0x7D58654C, 0x19EF0706, + 0x7D4E2C7E, 0x1A203E1B, + 0x7D43E05E, 0x1A517127, + 0x7D3980EC, 0x1A82A025, + 0x7D2F0E2A, 0x1AB3CB0C, + 0x7D24881A, 0x1AE4F1D6, + 0x7D19EEBE, 0x1B161479, + 0x7D0F4218, 0x1B4732EF, + 0x7D048228, 0x1B784D30, + 0x7CF9AEF0, 0x1BA96334, + 0x7CEEC873, 0x1BDA74F5, + 0x7CE3CEB1, 0x1C0B826A, + 0x7CD8C1AD, 0x1C3C8B8C, + 0x7CCDA168, 0x1C6D9053, + 0x7CC26DE5, 0x1C9E90B8, + 0x7CB72724, 0x1CCF8CB3, + 0x7CABCD27, 0x1D00843C, + 0x7CA05FF1, 0x1D31774D, + 0x7C94DF82, 0x1D6265DD, + 0x7C894BDD, 0x1D934FE5, + 0x7C7DA504, 0x1DC4355D, + 0x7C71EAF8, 0x1DF5163F, + 0x7C661DBB, 0x1E25F281, + 0x7C5A3D4F, 0x1E56CA1E, + 0x7C4E49B6, 0x1E879D0C, + 0x7C4242F2, 0x1EB86B46, + 0x7C362904, 0x1EE934C2, + 0x7C29FBEE, 0x1F19F97B, + 0x7C1DBBB2, 0x1F4AB967, + 0x7C116853, 0x1F7B7480, + 0x7C0501D1, 0x1FAC2ABF, + 0x7BF88830, 0x1FDCDC1A, + 0x7BEBFB70, 0x200D888C, + 0x7BDF5B94, 0x203E300D, + 0x7BD2A89E, 0x206ED295, + 0x7BC5E28F, 0x209F701C, + 0x7BB9096A, 0x20D0089B, + 0x7BAC1D31, 0x21009C0B, + 0x7B9F1DE5, 0x21312A65, + 0x7B920B89, 0x2161B39F, + 0x7B84E61E, 0x219237B4, + 0x7B77ADA8, 0x21C2B69C, + 0x7B6A6227, 0x21F3304E, + 0x7B5D039D, 0x2223A4C5, + 0x7B4F920E, 0x225413F8, + 0x7B420D7A, 0x22847DDF, + 0x7B3475E4, 0x22B4E274, + 0x7B26CB4F, 0x22E541AE, + 0x7B190DBB, 0x23159B87, + 0x7B0B3D2C, 0x2345EFF7, + 0x7AFD59A3, 0x23763EF7, + 0x7AEF6323, 0x23A6887E, + 0x7AE159AE, 0x23D6CC86, + 0x7AD33D45, 0x24070B07, + 0x7AC50DEB, 0x243743FA, + 0x7AB6CBA3, 0x24677757, + 0x7AA8766E, 0x2497A517, + 0x7A9A0E4F, 0x24C7CD32, + 0x7A8B9348, 0x24F7EFA1, + 0x7A7D055B, 0x25280C5D, + 0x7A6E648A, 0x2558235E, + 0x7A5FB0D8, 0x2588349D, + 0x7A50EA46, 0x25B84012, + 0x7A4210D8, 0x25E845B5, + 0x7A33248F, 0x26184581, + 0x7A24256E, 0x26483F6C, + 0x7A151377, 0x26783370, + 0x7A05EEAD, 0x26A82185, + 0x79F6B711, 0x26D809A5, + 0x79E76CA6, 0x2707EBC6, + 0x79D80F6F, 0x2737C7E3, + 0x79C89F6D, 0x27679DF4, + 0x79B91CA4, 0x27976DF1, + 0x79A98715, 0x27C737D2, + 0x7999DEC3, 0x27F6FB92, + 0x798A23B1, 0x2826B928, + 0x797A55E0, 0x2856708C, + 0x796A7554, 0x288621B9, + 0x795A820E, 0x28B5CCA5, + 0x794A7C11, 0x28E5714A, + 0x793A6360, 0x29150FA1, + 0x792A37FE, 0x2944A7A2, + 0x7919F9EB, 0x29743945, + 0x7909A92C, 0x29A3C484, + 0x78F945C3, 0x29D34958, + 0x78E8CFB1, 0x2A02C7B8, + 0x78D846FB, 0x2A323F9D, + 0x78C7ABA1, 0x2A61B101, + 0x78B6FDA8, 0x2A911BDB, + 0x78A63D10, 0x2AC08025, + 0x789569DE, 0x2AEFDDD8, + 0x78848413, 0x2B1F34EB, + 0x78738BB3, 0x2B4E8558, + 0x786280BF, 0x2B7DCF17, + 0x7851633B, 0x2BAD1221, + 0x78403328, 0x2BDC4E6F, + 0x782EF08B, 0x2C0B83F9, + 0x781D9B64, 0x2C3AB2B9, + 0x780C33B8, 0x2C69DAA6, + 0x77FAB988, 0x2C98FBBA, + 0x77E92CD8, 0x2CC815ED, + 0x77D78DAA, 0x2CF72939, + 0x77C5DC01, 0x2D263595, + 0x77B417DF, 0x2D553AFB, + 0x77A24148, 0x2D843963, + 0x7790583D, 0x2DB330C7, + 0x777E5CC3, 0x2DE2211E, + 0x776C4EDB, 0x2E110A62, + 0x775A2E88, 0x2E3FEC8B, + 0x7747FBCE, 0x2E6EC792, + 0x7735B6AE, 0x2E9D9B70, + 0x77235F2D, 0x2ECC681E, + 0x7710F54B, 0x2EFB2D94, + 0x76FE790E, 0x2F29EBCC, + 0x76EBEA77, 0x2F58A2BD, + 0x76D94988, 0x2F875262, + 0x76C69646, 0x2FB5FAB2, + 0x76B3D0B3, 0x2FE49BA6, + 0x76A0F8D2, 0x30133538, + 0x768E0EA5, 0x3041C760, + 0x767B1230, 0x30705217, + 0x76680376, 0x309ED555, + 0x7654E279, 0x30CD5114, + 0x7641AF3C, 0x30FBC54D, + 0x762E69C3, 0x312A31F8, + 0x761B1211, 0x3158970D, + 0x7607A827, 0x3186F487, + 0x75F42C0A, 0x31B54A5D, + 0x75E09DBD, 0x31E39889, + 0x75CCFD42, 0x3211DF03, + 0x75B94A9C, 0x32401DC5, + 0x75A585CF, 0x326E54C7, + 0x7591AEDD, 0x329C8402, + 0x757DC5CA, 0x32CAAB6F, + 0x7569CA98, 0x32F8CB07, + 0x7555BD4B, 0x3326E2C2, + 0x75419DE6, 0x3354F29A, + 0x752D6C6C, 0x3382FA88, + 0x751928E0, 0x33B0FA84, + 0x7504D345, 0x33DEF287, + 0x74F06B9E, 0x340CE28A, + 0x74DBF1EF, 0x343ACA87, + 0x74C7663A, 0x3468AA76, + 0x74B2C883, 0x3496824F, + 0x749E18CD, 0x34C4520D, + 0x7489571B, 0x34F219A7, + 0x74748371, 0x351FD917, + 0x745F9DD1, 0x354D9056, + 0x744AA63E, 0x357B3F5D, + 0x74359CBD, 0x35A8E624, + 0x74208150, 0x35D684A5, + 0x740B53FA, 0x36041AD9, + 0x73F614C0, 0x3631A8B7, + 0x73E0C3A3, 0x365F2E3B, + 0x73CB60A7, 0x368CAB5C, + 0x73B5EBD0, 0x36BA2013, + 0x73A06522, 0x36E78C5A, + 0x738ACC9E, 0x3714F02A, + 0x73752249, 0x37424B7A, + 0x735F6626, 0x376F9E46, + 0x73499838, 0x379CE884, + 0x7333B883, 0x37CA2A30, + 0x731DC709, 0x37F76340, + 0x7307C3D0, 0x382493B0, + 0x72F1AED8, 0x3851BB76, + 0x72DB8828, 0x387EDA8E, + 0x72C54FC0, 0x38ABF0EF, + 0x72AF05A6, 0x38D8FE93, + 0x7298A9DC, 0x39060372, + 0x72823C66, 0x3932FF87, + 0x726BBD48, 0x395FF2C9, + 0x72552C84, 0x398CDD32, + 0x723E8A1F, 0x39B9BEBB, + 0x7227D61C, 0x39E6975D, + 0x7211107D, 0x3A136712, + 0x71FA3948, 0x3A402DD1, + 0x71E3507F, 0x3A6CEB95, + 0x71CC5626, 0x3A99A057, + 0x71B54A40, 0x3AC64C0F, + 0x719E2CD2, 0x3AF2EEB7, + 0x7186FDDE, 0x3B1F8847, + 0x716FBD68, 0x3B4C18BA, + 0x71586B73, 0x3B78A007, + 0x71410804, 0x3BA51E29, + 0x7129931E, 0x3BD19317, + 0x71120CC5, 0x3BFDFECD, + 0x70FA74FB, 0x3C2A6142, + 0x70E2CBC6, 0x3C56BA70, + 0x70CB1127, 0x3C830A4F, + 0x70B34524, 0x3CAF50DA, + 0x709B67C0, 0x3CDB8E09, + 0x708378FE, 0x3D07C1D5, + 0x706B78E3, 0x3D33EC39, + 0x70536771, 0x3D600D2B, + 0x703B44AC, 0x3D8C24A7, + 0x70231099, 0x3DB832A5, + 0x700ACB3B, 0x3DE4371F, + 0x6FF27496, 0x3E10320D, + 0x6FDA0CAD, 0x3E3C2369, + 0x6FC19385, 0x3E680B2C, + 0x6FA90920, 0x3E93E94F, + 0x6F906D84, 0x3EBFBDCC, + 0x6F77C0B3, 0x3EEB889C, + 0x6F5F02B1, 0x3F1749B7, + 0x6F463383, 0x3F430118, + 0x6F2D532C, 0x3F6EAEB8, + 0x6F1461AF, 0x3F9A528F, + 0x6EFB5F12, 0x3FC5EC97, + 0x6EE24B57, 0x3FF17CCA, + 0x6EC92682, 0x401D0320, + 0x6EAFF098, 0x40487F93, + 0x6E96A99C, 0x4073F21D, + 0x6E7D5193, 0x409F5AB6, + 0x6E63E87F, 0x40CAB957, + 0x6E4A6E65, 0x40F60DFB, + 0x6E30E349, 0x4121589A, + 0x6E17472F, 0x414C992E, + 0x6DFD9A1B, 0x4177CFB0, + 0x6DE3DC11, 0x41A2FC1A, + 0x6DCA0D14, 0x41CE1E64, + 0x6DB02D29, 0x41F93688, + 0x6D963C54, 0x42244480, + 0x6D7C3A98, 0x424F4845, + 0x6D6227FA, 0x427A41D0, + 0x6D48047E, 0x42A5311A, + 0x6D2DD027, 0x42D0161E, + 0x6D138AFA, 0x42FAF0D4, + 0x6CF934FB, 0x4325C135, + 0x6CDECE2E, 0x4350873C, + 0x6CC45697, 0x437B42E1, + 0x6CA9CE3A, 0x43A5F41E, + 0x6C8F351C, 0x43D09AEC, + 0x6C748B3F, 0x43FB3745, + 0x6C59D0A9, 0x4425C923, + 0x6C3F055D, 0x4450507E, + 0x6C242960, 0x447ACD50, + 0x6C093CB6, 0x44A53F93, + 0x6BEE3F62, 0x44CFA73F, + 0x6BD3316A, 0x44FA044F, + 0x6BB812D0, 0x452456BC, + 0x6B9CE39B, 0x454E9E80, + 0x6B81A3CD, 0x4578DB93, + 0x6B66536A, 0x45A30DF0, + 0x6B4AF278, 0x45CD358F, + 0x6B2F80FA, 0x45F7526B, + 0x6B13FEF5, 0x4621647C, + 0x6AF86C6C, 0x464B6BBD, + 0x6ADCC964, 0x46756827, + 0x6AC115E1, 0x469F59B4, + 0x6AA551E8, 0x46C9405C, + 0x6A897D7D, 0x46F31C1A, + 0x6A6D98A4, 0x471CECE6, + 0x6A51A361, 0x4746B2BC, + 0x6A359DB9, 0x47706D93, + 0x6A1987B0, 0x479A1D66, + 0x69FD614A, 0x47C3C22E, + 0x69E12A8C, 0x47ED5BE6, + 0x69C4E37A, 0x4816EA85, + 0x69A88C18, 0x48406E07, + 0x698C246C, 0x4869E664, + 0x696FAC78, 0x48935397, + 0x69532442, 0x48BCB598, + 0x69368BCE, 0x48E60C62, + 0x6919E320, 0x490F57EE, + 0x68FD2A3D, 0x49389836, + 0x68E06129, 0x4961CD32, + 0x68C387E9, 0x498AF6DE, + 0x68A69E81, 0x49B41533, + 0x6889A4F5, 0x49DD282A, + 0x686C9B4B, 0x4A062FBD, + 0x684F8186, 0x4A2F2BE5, + 0x683257AA, 0x4A581C9D, + 0x68151DBE, 0x4A8101DE, + 0x67F7D3C4, 0x4AA9DBA1, + 0x67DA79C2, 0x4AD2A9E1, + 0x67BD0FBC, 0x4AFB6C97, + 0x679F95B7, 0x4B2423BD, + 0x67820BB6, 0x4B4CCF4D, + 0x676471C0, 0x4B756F3F, + 0x6746C7D7, 0x4B9E038F, + 0x67290E02, 0x4BC68C36, + 0x670B4443, 0x4BEF092D, + 0x66ED6AA1, 0x4C177A6E, + 0x66CF811F, 0x4C3FDFF3, + 0x66B187C3, 0x4C6839B6, + 0x66937E90, 0x4C9087B1, + 0x6675658C, 0x4CB8C9DD, + 0x66573CBB, 0x4CE10034, + 0x66390422, 0x4D092AB0, + 0x661ABBC5, 0x4D31494B, + 0x65FC63A9, 0x4D595BFE, + 0x65DDFBD3, 0x4D8162C4, + 0x65BF8447, 0x4DA95D96, + 0x65A0FD0B, 0x4DD14C6E, + 0x65826622, 0x4DF92F45, + 0x6563BF92, 0x4E210617, + 0x6545095F, 0x4E48D0DC, + 0x6526438E, 0x4E708F8F, + 0x65076E24, 0x4E984229, + 0x64E88926, 0x4EBFE8A4, + 0x64C99498, 0x4EE782FA, + 0x64AA907F, 0x4F0F1126, + 0x648B7CDF, 0x4F369320, + 0x646C59BF, 0x4F5E08E3, + 0x644D2722, 0x4F857268, + 0x642DE50D, 0x4FACCFAB, + 0x640E9385, 0x4FD420A3, + 0x63EF328F, 0x4FFB654D, + 0x63CFC230, 0x50229DA0, + 0x63B0426D, 0x5049C999, + 0x6390B34A, 0x5070E92F, + 0x637114CC, 0x5097FC5E, + 0x635166F8, 0x50BF031F, + 0x6331A9D4, 0x50E5FD6C, + 0x6311DD63, 0x510CEB40, + 0x62F201AC, 0x5133CC94, + 0x62D216B2, 0x515AA162, + 0x62B21C7B, 0x518169A4, + 0x6292130C, 0x51A82555, + 0x6271FA69, 0x51CED46E, + 0x6251D297, 0x51F576E9, + 0x62319B9D, 0x521C0CC1, + 0x6211557D, 0x524295EF, + 0x61F1003E, 0x5269126E, + 0x61D09BE5, 0x528F8237, + 0x61B02876, 0x52B5E545, + 0x618FA5F6, 0x52DC3B92, + 0x616F146B, 0x53028517, + 0x614E73D9, 0x5328C1D0, + 0x612DC446, 0x534EF1B5, + 0x610D05B7, 0x537514C1, + 0x60EC3830, 0x539B2AEF, + 0x60CB5BB6, 0x53C13438, + 0x60AA704F, 0x53E73097, + 0x60897600, 0x540D2005, + 0x60686CCE, 0x5433027D, + 0x604754BE, 0x5458D7F9, + 0x60262DD5, 0x547EA073, + 0x6004F818, 0x54A45BE5, + 0x5FE3B38D, 0x54CA0A4A, + 0x5FC26038, 0x54EFAB9C, + 0x5FA0FE1E, 0x55153FD4, + 0x5F7F8D46, 0x553AC6ED, + 0x5F5E0DB3, 0x556040E2, + 0x5F3C7F6B, 0x5585ADAC, + 0x5F1AE273, 0x55AB0D46, + 0x5EF936D1, 0x55D05FAA, + 0x5ED77C89, 0x55F5A4D2, + 0x5EB5B3A1, 0x561ADCB8, + 0x5E93DC1F, 0x56400757, + 0x5E71F606, 0x566524AA, + 0x5E50015D, 0x568A34A9, + 0x5E2DFE28, 0x56AF3750, + 0x5E0BEC6E, 0x56D42C99, + 0x5DE9CC32, 0x56F9147E, + 0x5DC79D7C, 0x571DEEF9, + 0x5DA5604E, 0x5742BC05, + 0x5D8314B0, 0x57677B9D, + 0x5D60BAA6, 0x578C2DB9, + 0x5D3E5236, 0x57B0D256, + 0x5D1BDB65, 0x57D5696C, + 0x5CF95638, 0x57F9F2F7, + 0x5CD6C2B4, 0x581E6EF1, + 0x5CB420DF, 0x5842DD54, + 0x5C9170BF, 0x58673E1B, + 0x5C6EB258, 0x588B913F, + 0x5C4BE5B0, 0x58AFD6BC, + 0x5C290ACC, 0x58D40E8C, + 0x5C0621B2, 0x58F838A9, + 0x5BE32A67, 0x591C550E, + 0x5BC024F0, 0x594063B4, + 0x5B9D1153, 0x59646497, + 0x5B79EF96, 0x598857B1, + 0x5B56BFBD, 0x59AC3CFD, + 0x5B3381CE, 0x59D01474, + 0x5B1035CF, 0x59F3DE12, + 0x5AECDBC4, 0x5A1799D0, + 0x5AC973B4, 0x5A3B47AA, + 0x5AA5FDA4, 0x5A5EE79A, + 0x5A82799A, 0x5A82799A, + 0x5A5EE79A, 0x5AA5FDA4, + 0x5A3B47AA, 0x5AC973B4, + 0x5A1799D0, 0x5AECDBC4, + 0x59F3DE12, 0x5B1035CF, + 0x59D01474, 0x5B3381CE, + 0x59AC3CFD, 0x5B56BFBD, + 0x598857B1, 0x5B79EF96, + 0x59646497, 0x5B9D1153, + 0x594063B4, 0x5BC024F0, + 0x591C550E, 0x5BE32A67, + 0x58F838A9, 0x5C0621B2, + 0x58D40E8C, 0x5C290ACC, + 0x58AFD6BC, 0x5C4BE5B0, + 0x588B913F, 0x5C6EB258, + 0x58673E1B, 0x5C9170BF, + 0x5842DD54, 0x5CB420DF, + 0x581E6EF1, 0x5CD6C2B4, + 0x57F9F2F7, 0x5CF95638, + 0x57D5696C, 0x5D1BDB65, + 0x57B0D256, 0x5D3E5236, + 0x578C2DB9, 0x5D60BAA6, + 0x57677B9D, 0x5D8314B0, + 0x5742BC05, 0x5DA5604E, + 0x571DEEF9, 0x5DC79D7C, + 0x56F9147E, 0x5DE9CC32, + 0x56D42C99, 0x5E0BEC6E, + 0x56AF3750, 0x5E2DFE28, + 0x568A34A9, 0x5E50015D, + 0x566524AA, 0x5E71F606, + 0x56400757, 0x5E93DC1F, + 0x561ADCB8, 0x5EB5B3A1, + 0x55F5A4D2, 0x5ED77C89, + 0x55D05FAA, 0x5EF936D1, + 0x55AB0D46, 0x5F1AE273, + 0x5585ADAC, 0x5F3C7F6B, + 0x556040E2, 0x5F5E0DB3, + 0x553AC6ED, 0x5F7F8D46, + 0x55153FD4, 0x5FA0FE1E, + 0x54EFAB9C, 0x5FC26038, + 0x54CA0A4A, 0x5FE3B38D, + 0x54A45BE5, 0x6004F818, + 0x547EA073, 0x60262DD5, + 0x5458D7F9, 0x604754BE, + 0x5433027D, 0x60686CCE, + 0x540D2005, 0x60897600, + 0x53E73097, 0x60AA704F, + 0x53C13438, 0x60CB5BB6, + 0x539B2AEF, 0x60EC3830, + 0x537514C1, 0x610D05B7, + 0x534EF1B5, 0x612DC446, + 0x5328C1D0, 0x614E73D9, + 0x53028517, 0x616F146B, + 0x52DC3B92, 0x618FA5F6, + 0x52B5E545, 0x61B02876, + 0x528F8237, 0x61D09BE5, + 0x5269126E, 0x61F1003E, + 0x524295EF, 0x6211557D, + 0x521C0CC1, 0x62319B9D, + 0x51F576E9, 0x6251D297, + 0x51CED46E, 0x6271FA69, + 0x51A82555, 0x6292130C, + 0x518169A4, 0x62B21C7B, + 0x515AA162, 0x62D216B2, + 0x5133CC94, 0x62F201AC, + 0x510CEB40, 0x6311DD63, + 0x50E5FD6C, 0x6331A9D4, + 0x50BF031F, 0x635166F8, + 0x5097FC5E, 0x637114CC, + 0x5070E92F, 0x6390B34A, + 0x5049C999, 0x63B0426D, + 0x50229DA0, 0x63CFC230, + 0x4FFB654D, 0x63EF328F, + 0x4FD420A3, 0x640E9385, + 0x4FACCFAB, 0x642DE50D, + 0x4F857268, 0x644D2722, + 0x4F5E08E3, 0x646C59BF, + 0x4F369320, 0x648B7CDF, + 0x4F0F1126, 0x64AA907F, + 0x4EE782FA, 0x64C99498, + 0x4EBFE8A4, 0x64E88926, + 0x4E984229, 0x65076E24, + 0x4E708F8F, 0x6526438E, + 0x4E48D0DC, 0x6545095F, + 0x4E210617, 0x6563BF92, + 0x4DF92F45, 0x65826622, + 0x4DD14C6E, 0x65A0FD0B, + 0x4DA95D96, 0x65BF8447, + 0x4D8162C4, 0x65DDFBD3, + 0x4D595BFE, 0x65FC63A9, + 0x4D31494B, 0x661ABBC5, + 0x4D092AB0, 0x66390422, + 0x4CE10034, 0x66573CBB, + 0x4CB8C9DD, 0x6675658C, + 0x4C9087B1, 0x66937E90, + 0x4C6839B6, 0x66B187C3, + 0x4C3FDFF3, 0x66CF811F, + 0x4C177A6E, 0x66ED6AA1, + 0x4BEF092D, 0x670B4443, + 0x4BC68C36, 0x67290E02, + 0x4B9E038F, 0x6746C7D7, + 0x4B756F3F, 0x676471C0, + 0x4B4CCF4D, 0x67820BB6, + 0x4B2423BD, 0x679F95B7, + 0x4AFB6C97, 0x67BD0FBC, + 0x4AD2A9E1, 0x67DA79C2, + 0x4AA9DBA1, 0x67F7D3C4, + 0x4A8101DE, 0x68151DBE, + 0x4A581C9D, 0x683257AA, + 0x4A2F2BE5, 0x684F8186, + 0x4A062FBD, 0x686C9B4B, + 0x49DD282A, 0x6889A4F5, + 0x49B41533, 0x68A69E81, + 0x498AF6DE, 0x68C387E9, + 0x4961CD32, 0x68E06129, + 0x49389836, 0x68FD2A3D, + 0x490F57EE, 0x6919E320, + 0x48E60C62, 0x69368BCE, + 0x48BCB598, 0x69532442, + 0x48935397, 0x696FAC78, + 0x4869E664, 0x698C246C, + 0x48406E07, 0x69A88C18, + 0x4816EA85, 0x69C4E37A, + 0x47ED5BE6, 0x69E12A8C, + 0x47C3C22E, 0x69FD614A, + 0x479A1D66, 0x6A1987B0, + 0x47706D93, 0x6A359DB9, + 0x4746B2BC, 0x6A51A361, + 0x471CECE6, 0x6A6D98A4, + 0x46F31C1A, 0x6A897D7D, + 0x46C9405C, 0x6AA551E8, + 0x469F59B4, 0x6AC115E1, + 0x46756827, 0x6ADCC964, + 0x464B6BBD, 0x6AF86C6C, + 0x4621647C, 0x6B13FEF5, + 0x45F7526B, 0x6B2F80FA, + 0x45CD358F, 0x6B4AF278, + 0x45A30DF0, 0x6B66536A, + 0x4578DB93, 0x6B81A3CD, + 0x454E9E80, 0x6B9CE39B, + 0x452456BC, 0x6BB812D0, + 0x44FA044F, 0x6BD3316A, + 0x44CFA73F, 0x6BEE3F62, + 0x44A53F93, 0x6C093CB6, + 0x447ACD50, 0x6C242960, + 0x4450507E, 0x6C3F055D, + 0x4425C923, 0x6C59D0A9, + 0x43FB3745, 0x6C748B3F, + 0x43D09AEC, 0x6C8F351C, + 0x43A5F41E, 0x6CA9CE3A, + 0x437B42E1, 0x6CC45697, + 0x4350873C, 0x6CDECE2E, + 0x4325C135, 0x6CF934FB, + 0x42FAF0D4, 0x6D138AFA, + 0x42D0161E, 0x6D2DD027, + 0x42A5311A, 0x6D48047E, + 0x427A41D0, 0x6D6227FA, + 0x424F4845, 0x6D7C3A98, + 0x42244480, 0x6D963C54, + 0x41F93688, 0x6DB02D29, + 0x41CE1E64, 0x6DCA0D14, + 0x41A2FC1A, 0x6DE3DC11, + 0x4177CFB0, 0x6DFD9A1B, + 0x414C992E, 0x6E17472F, + 0x4121589A, 0x6E30E349, + 0x40F60DFB, 0x6E4A6E65, + 0x40CAB957, 0x6E63E87F, + 0x409F5AB6, 0x6E7D5193, + 0x4073F21D, 0x6E96A99C, + 0x40487F93, 0x6EAFF098, + 0x401D0320, 0x6EC92682, + 0x3FF17CCA, 0x6EE24B57, + 0x3FC5EC97, 0x6EFB5F12, + 0x3F9A528F, 0x6F1461AF, + 0x3F6EAEB8, 0x6F2D532C, + 0x3F430118, 0x6F463383, + 0x3F1749B7, 0x6F5F02B1, + 0x3EEB889C, 0x6F77C0B3, + 0x3EBFBDCC, 0x6F906D84, + 0x3E93E94F, 0x6FA90920, + 0x3E680B2C, 0x6FC19385, + 0x3E3C2369, 0x6FDA0CAD, + 0x3E10320D, 0x6FF27496, + 0x3DE4371F, 0x700ACB3B, + 0x3DB832A5, 0x70231099, + 0x3D8C24A7, 0x703B44AC, + 0x3D600D2B, 0x70536771, + 0x3D33EC39, 0x706B78E3, + 0x3D07C1D5, 0x708378FE, + 0x3CDB8E09, 0x709B67C0, + 0x3CAF50DA, 0x70B34524, + 0x3C830A4F, 0x70CB1127, + 0x3C56BA70, 0x70E2CBC6, + 0x3C2A6142, 0x70FA74FB, + 0x3BFDFECD, 0x71120CC5, + 0x3BD19317, 0x7129931E, + 0x3BA51E29, 0x71410804, + 0x3B78A007, 0x71586B73, + 0x3B4C18BA, 0x716FBD68, + 0x3B1F8847, 0x7186FDDE, + 0x3AF2EEB7, 0x719E2CD2, + 0x3AC64C0F, 0x71B54A40, + 0x3A99A057, 0x71CC5626, + 0x3A6CEB95, 0x71E3507F, + 0x3A402DD1, 0x71FA3948, + 0x3A136712, 0x7211107D, + 0x39E6975D, 0x7227D61C, + 0x39B9BEBB, 0x723E8A1F, + 0x398CDD32, 0x72552C84, + 0x395FF2C9, 0x726BBD48, + 0x3932FF87, 0x72823C66, + 0x39060372, 0x7298A9DC, + 0x38D8FE93, 0x72AF05A6, + 0x38ABF0EF, 0x72C54FC0, + 0x387EDA8E, 0x72DB8828, + 0x3851BB76, 0x72F1AED8, + 0x382493B0, 0x7307C3D0, + 0x37F76340, 0x731DC709, + 0x37CA2A30, 0x7333B883, + 0x379CE884, 0x73499838, + 0x376F9E46, 0x735F6626, + 0x37424B7A, 0x73752249, + 0x3714F02A, 0x738ACC9E, + 0x36E78C5A, 0x73A06522, + 0x36BA2013, 0x73B5EBD0, + 0x368CAB5C, 0x73CB60A7, + 0x365F2E3B, 0x73E0C3A3, + 0x3631A8B7, 0x73F614C0, + 0x36041AD9, 0x740B53FA, + 0x35D684A5, 0x74208150, + 0x35A8E624, 0x74359CBD, + 0x357B3F5D, 0x744AA63E, + 0x354D9056, 0x745F9DD1, + 0x351FD917, 0x74748371, + 0x34F219A7, 0x7489571B, + 0x34C4520D, 0x749E18CD, + 0x3496824F, 0x74B2C883, + 0x3468AA76, 0x74C7663A, + 0x343ACA87, 0x74DBF1EF, + 0x340CE28A, 0x74F06B9E, + 0x33DEF287, 0x7504D345, + 0x33B0FA84, 0x751928E0, + 0x3382FA88, 0x752D6C6C, + 0x3354F29A, 0x75419DE6, + 0x3326E2C2, 0x7555BD4B, + 0x32F8CB07, 0x7569CA98, + 0x32CAAB6F, 0x757DC5CA, + 0x329C8402, 0x7591AEDD, + 0x326E54C7, 0x75A585CF, + 0x32401DC5, 0x75B94A9C, + 0x3211DF03, 0x75CCFD42, + 0x31E39889, 0x75E09DBD, + 0x31B54A5D, 0x75F42C0A, + 0x3186F487, 0x7607A827, + 0x3158970D, 0x761B1211, + 0x312A31F8, 0x762E69C3, + 0x30FBC54D, 0x7641AF3C, + 0x30CD5114, 0x7654E279, + 0x309ED555, 0x76680376, + 0x30705217, 0x767B1230, + 0x3041C760, 0x768E0EA5, + 0x30133538, 0x76A0F8D2, + 0x2FE49BA6, 0x76B3D0B3, + 0x2FB5FAB2, 0x76C69646, + 0x2F875262, 0x76D94988, + 0x2F58A2BD, 0x76EBEA77, + 0x2F29EBCC, 0x76FE790E, + 0x2EFB2D94, 0x7710F54B, + 0x2ECC681E, 0x77235F2D, + 0x2E9D9B70, 0x7735B6AE, + 0x2E6EC792, 0x7747FBCE, + 0x2E3FEC8B, 0x775A2E88, + 0x2E110A62, 0x776C4EDB, + 0x2DE2211E, 0x777E5CC3, + 0x2DB330C7, 0x7790583D, + 0x2D843963, 0x77A24148, + 0x2D553AFB, 0x77B417DF, + 0x2D263595, 0x77C5DC01, + 0x2CF72939, 0x77D78DAA, + 0x2CC815ED, 0x77E92CD8, + 0x2C98FBBA, 0x77FAB988, + 0x2C69DAA6, 0x780C33B8, + 0x2C3AB2B9, 0x781D9B64, + 0x2C0B83F9, 0x782EF08B, + 0x2BDC4E6F, 0x78403328, + 0x2BAD1221, 0x7851633B, + 0x2B7DCF17, 0x786280BF, + 0x2B4E8558, 0x78738BB3, + 0x2B1F34EB, 0x78848413, + 0x2AEFDDD8, 0x789569DE, + 0x2AC08025, 0x78A63D10, + 0x2A911BDB, 0x78B6FDA8, + 0x2A61B101, 0x78C7ABA1, + 0x2A323F9D, 0x78D846FB, + 0x2A02C7B8, 0x78E8CFB1, + 0x29D34958, 0x78F945C3, + 0x29A3C484, 0x7909A92C, + 0x29743945, 0x7919F9EB, + 0x2944A7A2, 0x792A37FE, + 0x29150FA1, 0x793A6360, + 0x28E5714A, 0x794A7C11, + 0x28B5CCA5, 0x795A820E, + 0x288621B9, 0x796A7554, + 0x2856708C, 0x797A55E0, + 0x2826B928, 0x798A23B1, + 0x27F6FB92, 0x7999DEC3, + 0x27C737D2, 0x79A98715, + 0x27976DF1, 0x79B91CA4, + 0x27679DF4, 0x79C89F6D, + 0x2737C7E3, 0x79D80F6F, + 0x2707EBC6, 0x79E76CA6, + 0x26D809A5, 0x79F6B711, + 0x26A82185, 0x7A05EEAD, + 0x26783370, 0x7A151377, + 0x26483F6C, 0x7A24256E, + 0x26184581, 0x7A33248F, + 0x25E845B5, 0x7A4210D8, + 0x25B84012, 0x7A50EA46, + 0x2588349D, 0x7A5FB0D8, + 0x2558235E, 0x7A6E648A, + 0x25280C5D, 0x7A7D055B, + 0x24F7EFA1, 0x7A8B9348, + 0x24C7CD32, 0x7A9A0E4F, + 0x2497A517, 0x7AA8766E, + 0x24677757, 0x7AB6CBA3, + 0x243743FA, 0x7AC50DEB, + 0x24070B07, 0x7AD33D45, + 0x23D6CC86, 0x7AE159AE, + 0x23A6887E, 0x7AEF6323, + 0x23763EF7, 0x7AFD59A3, + 0x2345EFF7, 0x7B0B3D2C, + 0x23159B87, 0x7B190DBB, + 0x22E541AE, 0x7B26CB4F, + 0x22B4E274, 0x7B3475E4, + 0x22847DDF, 0x7B420D7A, + 0x225413F8, 0x7B4F920E, + 0x2223A4C5, 0x7B5D039D, + 0x21F3304E, 0x7B6A6227, + 0x21C2B69C, 0x7B77ADA8, + 0x219237B4, 0x7B84E61E, + 0x2161B39F, 0x7B920B89, + 0x21312A65, 0x7B9F1DE5, + 0x21009C0B, 0x7BAC1D31, + 0x20D0089B, 0x7BB9096A, + 0x209F701C, 0x7BC5E28F, + 0x206ED295, 0x7BD2A89E, + 0x203E300D, 0x7BDF5B94, + 0x200D888C, 0x7BEBFB70, + 0x1FDCDC1A, 0x7BF88830, + 0x1FAC2ABF, 0x7C0501D1, + 0x1F7B7480, 0x7C116853, + 0x1F4AB967, 0x7C1DBBB2, + 0x1F19F97B, 0x7C29FBEE, + 0x1EE934C2, 0x7C362904, + 0x1EB86B46, 0x7C4242F2, + 0x1E879D0C, 0x7C4E49B6, + 0x1E56CA1E, 0x7C5A3D4F, + 0x1E25F281, 0x7C661DBB, + 0x1DF5163F, 0x7C71EAF8, + 0x1DC4355D, 0x7C7DA504, + 0x1D934FE5, 0x7C894BDD, + 0x1D6265DD, 0x7C94DF82, + 0x1D31774D, 0x7CA05FF1, + 0x1D00843C, 0x7CABCD27, + 0x1CCF8CB3, 0x7CB72724, + 0x1C9E90B8, 0x7CC26DE5, + 0x1C6D9053, 0x7CCDA168, + 0x1C3C8B8C, 0x7CD8C1AD, + 0x1C0B826A, 0x7CE3CEB1, + 0x1BDA74F5, 0x7CEEC873, + 0x1BA96334, 0x7CF9AEF0, + 0x1B784D30, 0x7D048228, + 0x1B4732EF, 0x7D0F4218, + 0x1B161479, 0x7D19EEBE, + 0x1AE4F1D6, 0x7D24881A, + 0x1AB3CB0C, 0x7D2F0E2A, + 0x1A82A025, 0x7D3980EC, + 0x1A517127, 0x7D43E05E, + 0x1A203E1B, 0x7D4E2C7E, + 0x19EF0706, 0x7D58654C, + 0x19BDCBF2, 0x7D628AC5, + 0x198C8CE6, 0x7D6C9CE9, + 0x195B49E9, 0x7D769BB5, + 0x192A0303, 0x7D808727, + 0x18F8B83C, 0x7D8A5F3F, + 0x18C7699B, 0x7D9423FB, + 0x18961727, 0x7D9DD55A, + 0x1864C0E9, 0x7DA77359, + 0x183366E8, 0x7DB0FDF7, + 0x1802092C, 0x7DBA7534, + 0x17D0A7BB, 0x7DC3D90D, + 0x179F429F, 0x7DCD2981, + 0x176DD9DE, 0x7DD6668E, + 0x173C6D80, 0x7DDF9034, + 0x170AFD8D, 0x7DE8A670, + 0x16D98A0C, 0x7DF1A942, + 0x16A81305, 0x7DFA98A7, + 0x1676987F, 0x7E03749F, + 0x16451A83, 0x7E0C3D29, + 0x16139917, 0x7E14F242, + 0x15E21444, 0x7E1D93E9, + 0x15B08C11, 0x7E26221E, + 0x157F0086, 0x7E2E9CDF, + 0x154D71AA, 0x7E37042A, + 0x151BDF85, 0x7E3F57FE, + 0x14EA4A1F, 0x7E47985B, + 0x14B8B17F, 0x7E4FC53E, + 0x148715AD, 0x7E57DEA6, + 0x145576B1, 0x7E5FE493, + 0x1423D492, 0x7E67D702, + 0x13F22F57, 0x7E6FB5F3, + 0x13C0870A, 0x7E778165, + 0x138EDBB0, 0x7E7F3956, + 0x135D2D53, 0x7E86DDC5, + 0x132B7BF9, 0x7E8E6EB1, + 0x12F9C7AA, 0x7E95EC19, + 0x12C8106E, 0x7E9D55FC, + 0x1296564D, 0x7EA4AC58, + 0x1264994E, 0x7EABEF2C, + 0x1232D978, 0x7EB31E77, + 0x120116D4, 0x7EBA3A39, + 0x11CF516A, 0x7EC1426F, + 0x119D8940, 0x7EC8371A, + 0x116BBE5F, 0x7ECF1837, + 0x1139F0CE, 0x7ED5E5C6, + 0x11082096, 0x7EDC9FC6, + 0x10D64DBC, 0x7EE34635, + 0x10A4784A, 0x7EE9D913, + 0x1072A047, 0x7EF0585F, + 0x1040C5BB, 0x7EF6C418, + 0x100EE8AD, 0x7EFD1C3C, + 0x0FDD0925, 0x7F0360CB, + 0x0FAB272B, 0x7F0991C3, + 0x0F7942C6, 0x7F0FAF24, + 0x0F475BFE, 0x7F15B8EE, + 0x0F1572DC, 0x7F1BAF1E, + 0x0EE38765, 0x7F2191B4, + 0x0EB199A3, 0x7F2760AF, + 0x0E7FA99D, 0x7F2D1C0E, + 0x0E4DB75B, 0x7F32C3D0, + 0x0E1BC2E3, 0x7F3857F5, + 0x0DE9CC3F, 0x7F3DD87C, + 0x0DB7D376, 0x7F434563, + 0x0D85D88F, 0x7F489EAA, + 0x0D53DB92, 0x7F4DE450, + 0x0D21DC87, 0x7F531654, + 0x0CEFDB75, 0x7F5834B6, + 0x0CBDD865, 0x7F5D3F75, + 0x0C8BD35E, 0x7F62368F, + 0x0C59CC67, 0x7F671A04, + 0x0C27C389, 0x7F6BE9D4, + 0x0BF5B8CB, 0x7F70A5FD, + 0x0BC3AC35, 0x7F754E7F, + 0x0B919DCE, 0x7F79E35A, + 0x0B5F8D9F, 0x7F7E648B, + 0x0B2D7BAE, 0x7F82D214, + 0x0AFB6805, 0x7F872BF3, + 0x0AC952AA, 0x7F8B7226, + 0x0A973BA5, 0x7F8FA4AF, + 0x0A6522FE, 0x7F93C38C, + 0x0A3308BC, 0x7F97CEBC, + 0x0A00ECE8, 0x7F9BC63F, + 0x09CECF89, 0x7F9FAA15, + 0x099CB0A7, 0x7FA37A3C, + 0x096A9049, 0x7FA736B4, + 0x09386E77, 0x7FAADF7C, + 0x09064B3A, 0x7FAE7494, + 0x08D42698, 0x7FB1F5FC, + 0x08A2009A, 0x7FB563B2, + 0x086FD947, 0x7FB8BDB7, + 0x083DB0A7, 0x7FBC040A, + 0x080B86C1, 0x7FBF36A9, + 0x07D95B9E, 0x7FC25596, + 0x07A72F45, 0x7FC560CF, + 0x077501BE, 0x7FC85853, + 0x0742D310, 0x7FCB3C23, + 0x0710A344, 0x7FCE0C3E, + 0x06DE7261, 0x7FD0C8A3, + 0x06AC406F, 0x7FD37152, + 0x067A0D75, 0x7FD6064B, + 0x0647D97C, 0x7FD8878D, + 0x0615A48A, 0x7FDAF518, + 0x05E36EA9, 0x7FDD4EEC, + 0x05B137DF, 0x7FDF9508, + 0x057F0034, 0x7FE1C76B, + 0x054CC7B0, 0x7FE3E616, + 0x051A8E5C, 0x7FE5F108, + 0x04E8543D, 0x7FE7E840, + 0x04B6195D, 0x7FE9CBC0, + 0x0483DDC3, 0x7FEB9B85, + 0x0451A176, 0x7FED5790, + 0x041F647F, 0x7FEEFFE1, + 0x03ED26E6, 0x7FF09477, + 0x03BAE8B1, 0x7FF21553, + 0x0388A9E9, 0x7FF38273, + 0x03566A96, 0x7FF4DBD8, + 0x03242ABF, 0x7FF62182, + 0x02F1EA6B, 0x7FF7536F, + 0x02BFA9A4, 0x7FF871A1, + 0x028D6870, 0x7FF97C17, + 0x025B26D7, 0x7FFA72D1, + 0x0228E4E1, 0x7FFB55CE, + 0x01F6A296, 0x7FFC250F, + 0x01C45FFE, 0x7FFCE093, + 0x01921D1F, 0x7FFD885A, + 0x015FDA03, 0x7FFE1C64, + 0x012D96B0, 0x7FFE9CB2, + 0x00FB532F, 0x7FFF0942, + 0x00C90F88, 0x7FFF6216, + 0x0096CBC1, 0x7FFFA72C, + 0x006487E3, 0x7FFFD885, + 0x003243F5, 0x7FFFF621, + 0x00000000, 0x7FFFFFFF, + 0xFFCDBC0A, 0x7FFFF621, + 0xFF9B781D, 0x7FFFD885, + 0xFF69343E, 0x7FFFA72C, + 0xFF36F078, 0x7FFF6216, + 0xFF04ACD0, 0x7FFF0942, + 0xFED2694F, 0x7FFE9CB2, + 0xFEA025FC, 0x7FFE1C64, + 0xFE6DE2E0, 0x7FFD885A, + 0xFE3BA001, 0x7FFCE093, + 0xFE095D69, 0x7FFC250F, + 0xFDD71B1E, 0x7FFB55CE, + 0xFDA4D928, 0x7FFA72D1, + 0xFD72978F, 0x7FF97C17, + 0xFD40565B, 0x7FF871A1, + 0xFD0E1594, 0x7FF7536F, + 0xFCDBD541, 0x7FF62182, + 0xFCA99569, 0x7FF4DBD8, + 0xFC775616, 0x7FF38273, + 0xFC45174E, 0x7FF21553, + 0xFC12D919, 0x7FF09477, + 0xFBE09B80, 0x7FEEFFE1, + 0xFBAE5E89, 0x7FED5790, + 0xFB7C223C, 0x7FEB9B85, + 0xFB49E6A2, 0x7FE9CBC0, + 0xFB17ABC2, 0x7FE7E840, + 0xFAE571A4, 0x7FE5F108, + 0xFAB3384F, 0x7FE3E616, + 0xFA80FFCB, 0x7FE1C76B, + 0xFA4EC820, 0x7FDF9508, + 0xFA1C9156, 0x7FDD4EEC, + 0xF9EA5B75, 0x7FDAF518, + 0xF9B82683, 0x7FD8878D, + 0xF985F28A, 0x7FD6064B, + 0xF953BF90, 0x7FD37152, + 0xF9218D9E, 0x7FD0C8A3, + 0xF8EF5CBB, 0x7FCE0C3E, + 0xF8BD2CEF, 0x7FCB3C23, + 0xF88AFE41, 0x7FC85853, + 0xF858D0BA, 0x7FC560CF, + 0xF826A461, 0x7FC25596, + 0xF7F4793E, 0x7FBF36A9, + 0xF7C24F58, 0x7FBC040A, + 0xF79026B8, 0x7FB8BDB7, + 0xF75DFF65, 0x7FB563B2, + 0xF72BD967, 0x7FB1F5FC, + 0xF6F9B4C5, 0x7FAE7494, + 0xF6C79188, 0x7FAADF7C, + 0xF6956FB6, 0x7FA736B4, + 0xF6634F58, 0x7FA37A3C, + 0xF6313076, 0x7F9FAA15, + 0xF5FF1317, 0x7F9BC63F, + 0xF5CCF743, 0x7F97CEBC, + 0xF59ADD01, 0x7F93C38C, + 0xF568C45A, 0x7F8FA4AF, + 0xF536AD55, 0x7F8B7226, + 0xF50497FA, 0x7F872BF3, + 0xF4D28451, 0x7F82D214, + 0xF4A07260, 0x7F7E648B, + 0xF46E6231, 0x7F79E35A, + 0xF43C53CA, 0x7F754E7F, + 0xF40A4734, 0x7F70A5FD, + 0xF3D83C76, 0x7F6BE9D4, + 0xF3A63398, 0x7F671A04, + 0xF3742CA1, 0x7F62368F, + 0xF342279A, 0x7F5D3F75, + 0xF310248A, 0x7F5834B6, + 0xF2DE2378, 0x7F531654, + 0xF2AC246D, 0x7F4DE450, + 0xF27A2770, 0x7F489EAA, + 0xF2482C89, 0x7F434563, + 0xF21633C0, 0x7F3DD87C, + 0xF1E43D1C, 0x7F3857F5, + 0xF1B248A5, 0x7F32C3D0, + 0xF1805662, 0x7F2D1C0E, + 0xF14E665C, 0x7F2760AF, + 0xF11C789A, 0x7F2191B4, + 0xF0EA8D23, 0x7F1BAF1E, + 0xF0B8A401, 0x7F15B8EE, + 0xF086BD39, 0x7F0FAF24, + 0xF054D8D4, 0x7F0991C3, + 0xF022F6DA, 0x7F0360CB, + 0xEFF11752, 0x7EFD1C3C, + 0xEFBF3A44, 0x7EF6C418, + 0xEF8D5FB8, 0x7EF0585F, + 0xEF5B87B5, 0x7EE9D913, + 0xEF29B243, 0x7EE34635, + 0xEEF7DF6A, 0x7EDC9FC6, + 0xEEC60F31, 0x7ED5E5C6, + 0xEE9441A0, 0x7ECF1837, + 0xEE6276BF, 0x7EC8371A, + 0xEE30AE95, 0x7EC1426F, + 0xEDFEE92B, 0x7EBA3A39, + 0xEDCD2687, 0x7EB31E77, + 0xED9B66B2, 0x7EABEF2C, + 0xED69A9B2, 0x7EA4AC58, + 0xED37EF91, 0x7E9D55FC, + 0xED063855, 0x7E95EC19, + 0xECD48406, 0x7E8E6EB1, + 0xECA2D2AC, 0x7E86DDC5, + 0xEC71244F, 0x7E7F3956, + 0xEC3F78F5, 0x7E778165, + 0xEC0DD0A8, 0x7E6FB5F3, + 0xEBDC2B6D, 0x7E67D702, + 0xEBAA894E, 0x7E5FE493, + 0xEB78EA52, 0x7E57DEA6, + 0xEB474E80, 0x7E4FC53E, + 0xEB15B5E0, 0x7E47985B, + 0xEAE4207A, 0x7E3F57FE, + 0xEAB28E55, 0x7E37042A, + 0xEA80FF79, 0x7E2E9CDF, + 0xEA4F73EE, 0x7E26221E, + 0xEA1DEBBB, 0x7E1D93E9, + 0xE9EC66E8, 0x7E14F242, + 0xE9BAE57C, 0x7E0C3D29, + 0xE9896780, 0x7E03749F, + 0xE957ECFB, 0x7DFA98A7, + 0xE92675F4, 0x7DF1A942, + 0xE8F50273, 0x7DE8A670, + 0xE8C3927F, 0x7DDF9034, + 0xE8922621, 0x7DD6668E, + 0xE860BD60, 0x7DCD2981, + 0xE82F5844, 0x7DC3D90D, + 0xE7FDF6D3, 0x7DBA7534, + 0xE7CC9917, 0x7DB0FDF7, + 0xE79B3F16, 0x7DA77359, + 0xE769E8D8, 0x7D9DD55A, + 0xE7389664, 0x7D9423FB, + 0xE70747C3, 0x7D8A5F3F, + 0xE6D5FCFC, 0x7D808727, + 0xE6A4B616, 0x7D769BB5, + 0xE6737319, 0x7D6C9CE9, + 0xE642340D, 0x7D628AC5, + 0xE610F8F9, 0x7D58654C, + 0xE5DFC1E4, 0x7D4E2C7E, + 0xE5AE8ED8, 0x7D43E05E, + 0xE57D5FDA, 0x7D3980EC, + 0xE54C34F3, 0x7D2F0E2A, + 0xE51B0E2A, 0x7D24881A, + 0xE4E9EB86, 0x7D19EEBE, + 0xE4B8CD10, 0x7D0F4218, + 0xE487B2CF, 0x7D048228, + 0xE4569CCB, 0x7CF9AEF0, + 0xE4258B0A, 0x7CEEC873, + 0xE3F47D95, 0x7CE3CEB1, + 0xE3C37473, 0x7CD8C1AD, + 0xE3926FAC, 0x7CCDA168, + 0xE3616F47, 0x7CC26DE5, + 0xE330734C, 0x7CB72724, + 0xE2FF7BC3, 0x7CABCD27, + 0xE2CE88B2, 0x7CA05FF1, + 0xE29D9A22, 0x7C94DF82, + 0xE26CB01A, 0x7C894BDD, + 0xE23BCAA2, 0x7C7DA504, + 0xE20AE9C1, 0x7C71EAF8, + 0xE1DA0D7E, 0x7C661DBB, + 0xE1A935E1, 0x7C5A3D4F, + 0xE17862F3, 0x7C4E49B6, + 0xE14794B9, 0x7C4242F2, + 0xE116CB3D, 0x7C362904, + 0xE0E60684, 0x7C29FBEE, + 0xE0B54698, 0x7C1DBBB2, + 0xE0848B7F, 0x7C116853, + 0xE053D541, 0x7C0501D1, + 0xE02323E5, 0x7BF88830, + 0xDFF27773, 0x7BEBFB70, + 0xDFC1CFF2, 0x7BDF5B94, + 0xDF912D6A, 0x7BD2A89E, + 0xDF608FE3, 0x7BC5E28F, + 0xDF2FF764, 0x7BB9096A, + 0xDEFF63F4, 0x7BAC1D31, + 0xDECED59B, 0x7B9F1DE5, + 0xDE9E4C60, 0x7B920B89, + 0xDE6DC84B, 0x7B84E61E, + 0xDE3D4963, 0x7B77ADA8, + 0xDE0CCFB1, 0x7B6A6227, + 0xDDDC5B3A, 0x7B5D039D, + 0xDDABEC07, 0x7B4F920E, + 0xDD7B8220, 0x7B420D7A, + 0xDD4B1D8B, 0x7B3475E4, + 0xDD1ABE51, 0x7B26CB4F, + 0xDCEA6478, 0x7B190DBB, + 0xDCBA1008, 0x7B0B3D2C, + 0xDC89C108, 0x7AFD59A3, + 0xDC597781, 0x7AEF6323, + 0xDC293379, 0x7AE159AE, + 0xDBF8F4F8, 0x7AD33D45, + 0xDBC8BC05, 0x7AC50DEB, + 0xDB9888A8, 0x7AB6CBA3, + 0xDB685AE8, 0x7AA8766E, + 0xDB3832CD, 0x7A9A0E4F, + 0xDB08105E, 0x7A8B9348, + 0xDAD7F3A2, 0x7A7D055B, + 0xDAA7DCA1, 0x7A6E648A, + 0xDA77CB62, 0x7A5FB0D8, + 0xDA47BFED, 0x7A50EA46, + 0xDA17BA4A, 0x7A4210D8, + 0xD9E7BA7E, 0x7A33248F, + 0xD9B7C093, 0x7A24256E, + 0xD987CC8F, 0x7A151377, + 0xD957DE7A, 0x7A05EEAD, + 0xD927F65B, 0x79F6B711, + 0xD8F81439, 0x79E76CA6, + 0xD8C8381C, 0x79D80F6F, + 0xD898620C, 0x79C89F6D, + 0xD868920F, 0x79B91CA4, + 0xD838C82D, 0x79A98715, + 0xD809046D, 0x7999DEC3, + 0xD7D946D7, 0x798A23B1, + 0xD7A98F73, 0x797A55E0, + 0xD779DE46, 0x796A7554, + 0xD74A335A, 0x795A820E, + 0xD71A8EB5, 0x794A7C11, + 0xD6EAF05E, 0x793A6360, + 0xD6BB585D, 0x792A37FE, + 0xD68BC6BA, 0x7919F9EB, + 0xD65C3B7B, 0x7909A92C, + 0xD62CB6A7, 0x78F945C3, + 0xD5FD3847, 0x78E8CFB1, + 0xD5CDC062, 0x78D846FB, + 0xD59E4EFE, 0x78C7ABA1, + 0xD56EE424, 0x78B6FDA8, + 0xD53F7FDA, 0x78A63D10, + 0xD5102227, 0x789569DE, + 0xD4E0CB14, 0x78848413, + 0xD4B17AA7, 0x78738BB3, + 0xD48230E8, 0x786280BF, + 0xD452EDDE, 0x7851633B, + 0xD423B190, 0x78403328, + 0xD3F47C06, 0x782EF08B, + 0xD3C54D46, 0x781D9B64, + 0xD3962559, 0x780C33B8, + 0xD3670445, 0x77FAB988, + 0xD337EA12, 0x77E92CD8, + 0xD308D6C6, 0x77D78DAA, + 0xD2D9CA6A, 0x77C5DC01, + 0xD2AAC504, 0x77B417DF, + 0xD27BC69C, 0x77A24148, + 0xD24CCF38, 0x7790583D, + 0xD21DDEE1, 0x777E5CC3, + 0xD1EEF59E, 0x776C4EDB, + 0xD1C01374, 0x775A2E88, + 0xD191386D, 0x7747FBCE, + 0xD162648F, 0x7735B6AE, + 0xD13397E1, 0x77235F2D, + 0xD104D26B, 0x7710F54B, + 0xD0D61433, 0x76FE790E, + 0xD0A75D42, 0x76EBEA77, + 0xD078AD9D, 0x76D94988, + 0xD04A054D, 0x76C69646, + 0xD01B6459, 0x76B3D0B3, + 0xCFECCAC7, 0x76A0F8D2, + 0xCFBE389F, 0x768E0EA5, + 0xCF8FADE8, 0x767B1230, + 0xCF612AAA, 0x76680376, + 0xCF32AEEB, 0x7654E279, + 0xCF043AB2, 0x7641AF3C, + 0xCED5CE08, 0x762E69C3, + 0xCEA768F2, 0x761B1211, + 0xCE790B78, 0x7607A827, + 0xCE4AB5A2, 0x75F42C0A, + 0xCE1C6776, 0x75E09DBD, + 0xCDEE20FC, 0x75CCFD42, + 0xCDBFE23A, 0x75B94A9C, + 0xCD91AB38, 0x75A585CF, + 0xCD637BFD, 0x7591AEDD, + 0xCD355490, 0x757DC5CA, + 0xCD0734F8, 0x7569CA98, + 0xCCD91D3D, 0x7555BD4B, + 0xCCAB0D65, 0x75419DE6, + 0xCC7D0577, 0x752D6C6C, + 0xCC4F057B, 0x751928E0, + 0xCC210D78, 0x7504D345, + 0xCBF31D75, 0x74F06B9E, + 0xCBC53578, 0x74DBF1EF, + 0xCB975589, 0x74C7663A, + 0xCB697DB0, 0x74B2C883, + 0xCB3BADF2, 0x749E18CD, + 0xCB0DE658, 0x7489571B, + 0xCAE026E8, 0x74748371, + 0xCAB26FA9, 0x745F9DD1, + 0xCA84C0A2, 0x744AA63E, + 0xCA5719DB, 0x74359CBD, + 0xCA297B5A, 0x74208150, + 0xC9FBE527, 0x740B53FA, + 0xC9CE5748, 0x73F614C0, + 0xC9A0D1C4, 0x73E0C3A3, + 0xC97354A3, 0x73CB60A7, + 0xC945DFEC, 0x73B5EBD0, + 0xC91873A5, 0x73A06522, + 0xC8EB0FD6, 0x738ACC9E, + 0xC8BDB485, 0x73752249, + 0xC89061BA, 0x735F6626, + 0xC863177B, 0x73499838, + 0xC835D5D0, 0x7333B883, + 0xC8089CBF, 0x731DC709, + 0xC7DB6C50, 0x7307C3D0, + 0xC7AE4489, 0x72F1AED8, + 0xC7812571, 0x72DB8828, + 0xC7540F10, 0x72C54FC0, + 0xC727016C, 0x72AF05A6, + 0xC6F9FC8D, 0x7298A9DC, + 0xC6CD0079, 0x72823C66, + 0xC6A00D36, 0x726BBD48, + 0xC67322CD, 0x72552C84, + 0xC6464144, 0x723E8A1F, + 0xC61968A2, 0x7227D61C, + 0xC5EC98ED, 0x7211107D, + 0xC5BFD22E, 0x71FA3948, + 0xC593146A, 0x71E3507F, + 0xC5665FA8, 0x71CC5626, + 0xC539B3F0, 0x71B54A40, + 0xC50D1148, 0x719E2CD2, + 0xC4E077B8, 0x7186FDDE, + 0xC4B3E746, 0x716FBD68, + 0xC4875FF8, 0x71586B73, + 0xC45AE1D7, 0x71410804, + 0xC42E6CE8, 0x7129931E, + 0xC4020132, 0x71120CC5, + 0xC3D59EBD, 0x70FA74FB, + 0xC3A9458F, 0x70E2CBC6, + 0xC37CF5B0, 0x70CB1127, + 0xC350AF25, 0x70B34524, + 0xC32471F6, 0x709B67C0, + 0xC2F83E2A, 0x708378FE, + 0xC2CC13C7, 0x706B78E3, + 0xC29FF2D4, 0x70536771, + 0xC273DB58, 0x703B44AC, + 0xC247CD5A, 0x70231099, + 0xC21BC8E0, 0x700ACB3B, + 0xC1EFCDF2, 0x6FF27496, + 0xC1C3DC96, 0x6FDA0CAD, + 0xC197F4D3, 0x6FC19385, + 0xC16C16B0, 0x6FA90920, + 0xC1404233, 0x6F906D84, + 0xC1147763, 0x6F77C0B3, + 0xC0E8B648, 0x6F5F02B1, + 0xC0BCFEE7, 0x6F463383, + 0xC0915147, 0x6F2D532C, + 0xC065AD70, 0x6F1461AF, + 0xC03A1368, 0x6EFB5F12, + 0xC00E8335, 0x6EE24B57, + 0xBFE2FCDF, 0x6EC92682, + 0xBFB7806C, 0x6EAFF098, + 0xBF8C0DE2, 0x6E96A99C, + 0xBF60A54A, 0x6E7D5193, + 0xBF3546A8, 0x6E63E87F, + 0xBF09F204, 0x6E4A6E65, + 0xBEDEA765, 0x6E30E349, + 0xBEB366D1, 0x6E17472F, + 0xBE88304F, 0x6DFD9A1B, + 0xBE5D03E5, 0x6DE3DC11, + 0xBE31E19B, 0x6DCA0D14, + 0xBE06C977, 0x6DB02D29, + 0xBDDBBB7F, 0x6D963C54, + 0xBDB0B7BA, 0x6D7C3A98, + 0xBD85BE2F, 0x6D6227FA, + 0xBD5ACEE5, 0x6D48047E, + 0xBD2FE9E1, 0x6D2DD027, + 0xBD050F2C, 0x6D138AFA, + 0xBCDA3ECA, 0x6CF934FB, + 0xBCAF78C3, 0x6CDECE2E, + 0xBC84BD1E, 0x6CC45697, + 0xBC5A0BE1, 0x6CA9CE3A, + 0xBC2F6513, 0x6C8F351C, + 0xBC04C8BA, 0x6C748B3F, + 0xBBDA36DC, 0x6C59D0A9, + 0xBBAFAF81, 0x6C3F055D, + 0xBB8532AF, 0x6C242960, + 0xBB5AC06C, 0x6C093CB6, + 0xBB3058C0, 0x6BEE3F62, + 0xBB05FBB0, 0x6BD3316A, + 0xBADBA943, 0x6BB812D0, + 0xBAB1617F, 0x6B9CE39B, + 0xBA87246C, 0x6B81A3CD, + 0xBA5CF210, 0x6B66536A, + 0xBA32CA70, 0x6B4AF278, + 0xBA08AD94, 0x6B2F80FA, + 0xB9DE9B83, 0x6B13FEF5, + 0xB9B49442, 0x6AF86C6C, + 0xB98A97D8, 0x6ADCC964, + 0xB960A64B, 0x6AC115E1, + 0xB936BFA3, 0x6AA551E8, + 0xB90CE3E6, 0x6A897D7D, + 0xB8E31319, 0x6A6D98A4, + 0xB8B94D44, 0x6A51A361, + 0xB88F926C, 0x6A359DB9, + 0xB865E299, 0x6A1987B0, + 0xB83C3DD1, 0x69FD614A, + 0xB812A419, 0x69E12A8C, + 0xB7E9157A, 0x69C4E37A, + 0xB7BF91F8, 0x69A88C18, + 0xB796199B, 0x698C246C, + 0xB76CAC68, 0x696FAC78, + 0xB7434A67, 0x69532442, + 0xB719F39D, 0x69368BCE, + 0xB6F0A811, 0x6919E320, + 0xB6C767CA, 0x68FD2A3D, + 0xB69E32CD, 0x68E06129, + 0xB6750921, 0x68C387E9, + 0xB64BEACC, 0x68A69E81, + 0xB622D7D5, 0x6889A4F5, + 0xB5F9D042, 0x686C9B4B, + 0xB5D0D41A, 0x684F8186, + 0xB5A7E362, 0x683257AA, + 0xB57EFE21, 0x68151DBE, + 0xB556245E, 0x67F7D3C4, + 0xB52D561E, 0x67DA79C2, + 0xB5049368, 0x67BD0FBC, + 0xB4DBDC42, 0x679F95B7, + 0xB4B330B2, 0x67820BB6, + 0xB48A90C0, 0x676471C0, + 0xB461FC70, 0x6746C7D7, + 0xB43973C9, 0x67290E02, + 0xB410F6D2, 0x670B4443, + 0xB3E88591, 0x66ED6AA1, + 0xB3C0200C, 0x66CF811F, + 0xB397C649, 0x66B187C3, + 0xB36F784E, 0x66937E90, + 0xB3473622, 0x6675658C, + 0xB31EFFCB, 0x66573CBB, + 0xB2F6D54F, 0x66390422, + 0xB2CEB6B5, 0x661ABBC5, + 0xB2A6A401, 0x65FC63A9, + 0xB27E9D3B, 0x65DDFBD3, + 0xB256A26A, 0x65BF8447, + 0xB22EB392, 0x65A0FD0B, + 0xB206D0BA, 0x65826622, + 0xB1DEF9E8, 0x6563BF92, + 0xB1B72F23, 0x6545095F, + 0xB18F7070, 0x6526438E, + 0xB167BDD6, 0x65076E24, + 0xB140175B, 0x64E88926, + 0xB1187D05, 0x64C99498, + 0xB0F0EEDA, 0x64AA907F, + 0xB0C96CDF, 0x648B7CDF, + 0xB0A1F71C, 0x646C59BF, + 0xB07A8D97, 0x644D2722, + 0xB0533055, 0x642DE50D, + 0xB02BDF5C, 0x640E9385, + 0xB0049AB2, 0x63EF328F, + 0xAFDD625F, 0x63CFC230, + 0xAFB63667, 0x63B0426D, + 0xAF8F16D0, 0x6390B34A, + 0xAF6803A1, 0x637114CC, + 0xAF40FCE0, 0x635166F8, + 0xAF1A0293, 0x6331A9D4, + 0xAEF314BF, 0x6311DD63, + 0xAECC336B, 0x62F201AC, + 0xAEA55E9D, 0x62D216B2, + 0xAE7E965B, 0x62B21C7B, + 0xAE57DAAA, 0x6292130C, + 0xAE312B91, 0x6271FA69, + 0xAE0A8916, 0x6251D297, + 0xADE3F33E, 0x62319B9D, + 0xADBD6A10, 0x6211557D, + 0xAD96ED91, 0x61F1003E, + 0xAD707DC8, 0x61D09BE5, + 0xAD4A1ABA, 0x61B02876, + 0xAD23C46D, 0x618FA5F6, + 0xACFD7AE8, 0x616F146B, + 0xACD73E30, 0x614E73D9, + 0xACB10E4A, 0x612DC446, + 0xAC8AEB3E, 0x610D05B7, + 0xAC64D510, 0x60EC3830, + 0xAC3ECBC7, 0x60CB5BB6, + 0xAC18CF68, 0x60AA704F, + 0xABF2DFFA, 0x60897600, + 0xABCCFD82, 0x60686CCE, + 0xABA72806, 0x604754BE, + 0xAB815F8C, 0x60262DD5, + 0xAB5BA41A, 0x6004F818, + 0xAB35F5B5, 0x5FE3B38D, + 0xAB105464, 0x5FC26038, + 0xAAEAC02B, 0x5FA0FE1E, + 0xAAC53912, 0x5F7F8D46, + 0xAA9FBF1D, 0x5F5E0DB3, + 0xAA7A5253, 0x5F3C7F6B, + 0xAA54F2B9, 0x5F1AE273, + 0xAA2FA055, 0x5EF936D1, + 0xAA0A5B2D, 0x5ED77C89, + 0xA9E52347, 0x5EB5B3A1, + 0xA9BFF8A8, 0x5E93DC1F, + 0xA99ADB56, 0x5E71F606, + 0xA975CB56, 0x5E50015D, + 0xA950C8AF, 0x5E2DFE28, + 0xA92BD366, 0x5E0BEC6E, + 0xA906EB81, 0x5DE9CC32, + 0xA8E21106, 0x5DC79D7C, + 0xA8BD43FA, 0x5DA5604E, + 0xA8988463, 0x5D8314B0, + 0xA873D246, 0x5D60BAA6, + 0xA84F2DA9, 0x5D3E5236, + 0xA82A9693, 0x5D1BDB65, + 0xA8060D08, 0x5CF95638, + 0xA7E1910E, 0x5CD6C2B4, + 0xA7BD22AB, 0x5CB420DF, + 0xA798C1E4, 0x5C9170BF, + 0xA7746EC0, 0x5C6EB258, + 0xA7502943, 0x5C4BE5B0, + 0xA72BF173, 0x5C290ACC, + 0xA707C756, 0x5C0621B2, + 0xA6E3AAF2, 0x5BE32A67, + 0xA6BF9C4B, 0x5BC024F0, + 0xA69B9B68, 0x5B9D1153, + 0xA677A84E, 0x5B79EF96, + 0xA653C302, 0x5B56BFBD, + 0xA62FEB8B, 0x5B3381CE, + 0xA60C21ED, 0x5B1035CF, + 0xA5E8662F, 0x5AECDBC4, + 0xA5C4B855, 0x5AC973B4, + 0xA5A11865, 0x5AA5FDA4, + 0xA57D8666, 0x5A82799A, + 0xA55A025B, 0x5A5EE79A, + 0xA5368C4B, 0x5A3B47AA, + 0xA513243B, 0x5A1799D0, + 0xA4EFCA31, 0x59F3DE12, + 0xA4CC7E31, 0x59D01474, + 0xA4A94042, 0x59AC3CFD, + 0xA4861069, 0x598857B1, + 0xA462EEAC, 0x59646497, + 0xA43FDB0F, 0x594063B4, + 0xA41CD598, 0x591C550E, + 0xA3F9DE4D, 0x58F838A9, + 0xA3D6F533, 0x58D40E8C, + 0xA3B41A4F, 0x58AFD6BC, + 0xA3914DA7, 0x588B913F, + 0xA36E8F40, 0x58673E1B, + 0xA34BDF20, 0x5842DD54, + 0xA3293D4B, 0x581E6EF1, + 0xA306A9C7, 0x57F9F2F7, + 0xA2E4249A, 0x57D5696C, + 0xA2C1ADC9, 0x57B0D256, + 0xA29F4559, 0x578C2DB9, + 0xA27CEB4F, 0x57677B9D, + 0xA25A9FB1, 0x5742BC05, + 0xA2386283, 0x571DEEF9, + 0xA21633CD, 0x56F9147E, + 0xA1F41391, 0x56D42C99, + 0xA1D201D7, 0x56AF3750, + 0xA1AFFEA2, 0x568A34A9, + 0xA18E09F9, 0x566524AA, + 0xA16C23E1, 0x56400757, + 0xA14A4C5E, 0x561ADCB8, + 0xA1288376, 0x55F5A4D2, + 0xA106C92E, 0x55D05FAA, + 0xA0E51D8C, 0x55AB0D46, + 0xA0C38094, 0x5585ADAC, + 0xA0A1F24C, 0x556040E2, + 0xA08072BA, 0x553AC6ED, + 0xA05F01E1, 0x55153FD4, + 0xA03D9FC7, 0x54EFAB9C, + 0xA01C4C72, 0x54CA0A4A, + 0x9FFB07E7, 0x54A45BE5, + 0x9FD9D22A, 0x547EA073, + 0x9FB8AB41, 0x5458D7F9, + 0x9F979331, 0x5433027D, + 0x9F7689FF, 0x540D2005, + 0x9F558FB0, 0x53E73097, + 0x9F34A449, 0x53C13438, + 0x9F13C7D0, 0x539B2AEF, + 0x9EF2FA48, 0x537514C1, + 0x9ED23BB9, 0x534EF1B5, + 0x9EB18C26, 0x5328C1D0, + 0x9E90EB94, 0x53028517, + 0x9E705A09, 0x52DC3B92, + 0x9E4FD789, 0x52B5E545, + 0x9E2F641A, 0x528F8237, + 0x9E0EFFC1, 0x5269126E, + 0x9DEEAA82, 0x524295EF, + 0x9DCE6462, 0x521C0CC1, + 0x9DAE2D68, 0x51F576E9, + 0x9D8E0596, 0x51CED46E, + 0x9D6DECF4, 0x51A82555, + 0x9D4DE384, 0x518169A4, + 0x9D2DE94D, 0x515AA162, + 0x9D0DFE53, 0x5133CC94, + 0x9CEE229C, 0x510CEB40, + 0x9CCE562B, 0x50E5FD6C, + 0x9CAE9907, 0x50BF031F, + 0x9C8EEB33, 0x5097FC5E, + 0x9C6F4CB5, 0x5070E92F, + 0x9C4FBD92, 0x5049C999, + 0x9C303DCF, 0x50229DA0, + 0x9C10CD70, 0x4FFB654D, + 0x9BF16C7A, 0x4FD420A3, + 0x9BD21AF2, 0x4FACCFAB, + 0x9BB2D8DD, 0x4F857268, + 0x9B93A640, 0x4F5E08E3, + 0x9B748320, 0x4F369320, + 0x9B556F80, 0x4F0F1126, + 0x9B366B67, 0x4EE782FA, + 0x9B1776D9, 0x4EBFE8A4, + 0x9AF891DB, 0x4E984229, + 0x9AD9BC71, 0x4E708F8F, + 0x9ABAF6A0, 0x4E48D0DC, + 0x9A9C406D, 0x4E210617, + 0x9A7D99DD, 0x4DF92F45, + 0x9A5F02F5, 0x4DD14C6E, + 0x9A407BB8, 0x4DA95D96, + 0x9A22042C, 0x4D8162C4, + 0x9A039C56, 0x4D595BFE, + 0x99E5443A, 0x4D31494B, + 0x99C6FBDE, 0x4D092AB0, + 0x99A8C344, 0x4CE10034, + 0x998A9A73, 0x4CB8C9DD, + 0x996C816F, 0x4C9087B1, + 0x994E783C, 0x4C6839B6, + 0x99307EE0, 0x4C3FDFF3, + 0x9912955E, 0x4C177A6E, + 0x98F4BBBC, 0x4BEF092D, + 0x98D6F1FE, 0x4BC68C36, + 0x98B93828, 0x4B9E038F, + 0x989B8E3F, 0x4B756F3F, + 0x987DF449, 0x4B4CCF4D, + 0x98606A48, 0x4B2423BD, + 0x9842F043, 0x4AFB6C97, + 0x9825863D, 0x4AD2A9E1, + 0x98082C3B, 0x4AA9DBA1, + 0x97EAE241, 0x4A8101DE, + 0x97CDA855, 0x4A581C9D, + 0x97B07E7A, 0x4A2F2BE5, + 0x979364B5, 0x4A062FBD, + 0x97765B0A, 0x49DD282A, + 0x9759617E, 0x49B41533, + 0x973C7816, 0x498AF6DE, + 0x971F9ED6, 0x4961CD32, + 0x9702D5C2, 0x49389836, + 0x96E61CDF, 0x490F57EE, + 0x96C97431, 0x48E60C62, + 0x96ACDBBD, 0x48BCB598, + 0x96905387, 0x48935397, + 0x9673DB94, 0x4869E664, + 0x965773E7, 0x48406E07, + 0x963B1C85, 0x4816EA85, + 0x961ED573, 0x47ED5BE6, + 0x96029EB5, 0x47C3C22E, + 0x95E6784F, 0x479A1D66, + 0x95CA6246, 0x47706D93, + 0x95AE5C9E, 0x4746B2BC, + 0x9592675B, 0x471CECE6, + 0x95768282, 0x46F31C1A, + 0x955AAE17, 0x46C9405C, + 0x953EEA1E, 0x469F59B4, + 0x9523369B, 0x46756827, + 0x95079393, 0x464B6BBD, + 0x94EC010B, 0x4621647C, + 0x94D07F05, 0x45F7526B, + 0x94B50D87, 0x45CD358F, + 0x9499AC95, 0x45A30DF0, + 0x947E5C32, 0x4578DB93, + 0x94631C64, 0x454E9E80, + 0x9447ED2F, 0x452456BC, + 0x942CCE95, 0x44FA044F, + 0x9411C09D, 0x44CFA73F, + 0x93F6C34A, 0x44A53F93, + 0x93DBD69F, 0x447ACD50, + 0x93C0FAA2, 0x4450507E, + 0x93A62F56, 0x4425C923, + 0x938B74C0, 0x43FB3745, + 0x9370CAE4, 0x43D09AEC, + 0x935631C5, 0x43A5F41E, + 0x933BA968, 0x437B42E1, + 0x932131D1, 0x4350873C, + 0x9306CB04, 0x4325C135, + 0x92EC7505, 0x42FAF0D4, + 0x92D22FD8, 0x42D0161E, + 0x92B7FB82, 0x42A5311A, + 0x929DD805, 0x427A41D0, + 0x9283C567, 0x424F4845, + 0x9269C3AC, 0x42244480, + 0x924FD2D6, 0x41F93688, + 0x9235F2EB, 0x41CE1E64, + 0x921C23EE, 0x41A2FC1A, + 0x920265E4, 0x4177CFB0, + 0x91E8B8D0, 0x414C992E, + 0x91CF1CB6, 0x4121589A, + 0x91B5919A, 0x40F60DFB, + 0x919C1780, 0x40CAB957, + 0x9182AE6C, 0x409F5AB6, + 0x91695663, 0x4073F21D, + 0x91500F67, 0x40487F93, + 0x9136D97D, 0x401D0320, + 0x911DB4A8, 0x3FF17CCA, + 0x9104A0ED, 0x3FC5EC97, + 0x90EB9E50, 0x3F9A528F, + 0x90D2ACD3, 0x3F6EAEB8, + 0x90B9CC7C, 0x3F430118, + 0x90A0FD4E, 0x3F1749B7, + 0x90883F4C, 0x3EEB889C, + 0x906F927B, 0x3EBFBDCC, + 0x9056F6DF, 0x3E93E94F, + 0x903E6C7A, 0x3E680B2C, + 0x9025F352, 0x3E3C2369, + 0x900D8B69, 0x3E10320D, + 0x8FF534C4, 0x3DE4371F, + 0x8FDCEF66, 0x3DB832A5, + 0x8FC4BB53, 0x3D8C24A7, + 0x8FAC988E, 0x3D600D2B, + 0x8F94871D, 0x3D33EC39, + 0x8F7C8701, 0x3D07C1D5, + 0x8F64983F, 0x3CDB8E09, + 0x8F4CBADB, 0x3CAF50DA, + 0x8F34EED8, 0x3C830A4F, + 0x8F1D343A, 0x3C56BA70, + 0x8F058B04, 0x3C2A6142, + 0x8EEDF33B, 0x3BFDFECD, + 0x8ED66CE1, 0x3BD19317, + 0x8EBEF7FB, 0x3BA51E29, + 0x8EA7948C, 0x3B78A007, + 0x8E904298, 0x3B4C18BA, + 0x8E790222, 0x3B1F8847, + 0x8E61D32D, 0x3AF2EEB7, + 0x8E4AB5BF, 0x3AC64C0F, + 0x8E33A9D9, 0x3A99A057, + 0x8E1CAF80, 0x3A6CEB95, + 0x8E05C6B7, 0x3A402DD1, + 0x8DEEEF82, 0x3A136712, + 0x8DD829E4, 0x39E6975D, + 0x8DC175E0, 0x39B9BEBB, + 0x8DAAD37B, 0x398CDD32, + 0x8D9442B7, 0x395FF2C9, + 0x8D7DC399, 0x3932FF87, + 0x8D675623, 0x39060372, + 0x8D50FA59, 0x38D8FE93, + 0x8D3AB03F, 0x38ABF0EF, + 0x8D2477D8, 0x387EDA8E, + 0x8D0E5127, 0x3851BB76, + 0x8CF83C30, 0x382493B0, + 0x8CE238F6, 0x37F76340, + 0x8CCC477D, 0x37CA2A30, + 0x8CB667C7, 0x379CE884, + 0x8CA099D9, 0x376F9E46, + 0x8C8ADDB6, 0x37424B7A, + 0x8C753361, 0x3714F02A, + 0x8C5F9ADD, 0x36E78C5A, + 0x8C4A142F, 0x36BA2013, + 0x8C349F58, 0x368CAB5C, + 0x8C1F3C5C, 0x365F2E3B, + 0x8C09EB40, 0x3631A8B7, + 0x8BF4AC05, 0x36041AD9, + 0x8BDF7EAF, 0x35D684A5, + 0x8BCA6342, 0x35A8E624, + 0x8BB559C1, 0x357B3F5D, + 0x8BA0622F, 0x354D9056, + 0x8B8B7C8F, 0x351FD917, + 0x8B76A8E4, 0x34F219A7, + 0x8B61E732, 0x34C4520D, + 0x8B4D377C, 0x3496824F, + 0x8B3899C5, 0x3468AA76, + 0x8B240E10, 0x343ACA87, + 0x8B0F9461, 0x340CE28A, + 0x8AFB2CBA, 0x33DEF287, + 0x8AE6D71F, 0x33B0FA84, + 0x8AD29393, 0x3382FA88, + 0x8ABE6219, 0x3354F29A, + 0x8AAA42B4, 0x3326E2C2, + 0x8A963567, 0x32F8CB07, + 0x8A823A35, 0x32CAAB6F, + 0x8A6E5122, 0x329C8402, + 0x8A5A7A30, 0x326E54C7, + 0x8A46B563, 0x32401DC5, + 0x8A3302BD, 0x3211DF03, + 0x8A1F6242, 0x31E39889, + 0x8A0BD3F5, 0x31B54A5D, + 0x89F857D8, 0x3186F487, + 0x89E4EDEE, 0x3158970D, + 0x89D1963C, 0x312A31F8, + 0x89BE50C3, 0x30FBC54D, + 0x89AB1D86, 0x30CD5114, + 0x8997FC89, 0x309ED555, + 0x8984EDCF, 0x30705217, + 0x8971F15A, 0x3041C760, + 0x895F072D, 0x30133538, + 0x894C2F4C, 0x2FE49BA6, + 0x893969B9, 0x2FB5FAB2, + 0x8926B677, 0x2F875262, + 0x89141589, 0x2F58A2BD, + 0x890186F1, 0x2F29EBCC, + 0x88EF0AB4, 0x2EFB2D94, + 0x88DCA0D3, 0x2ECC681E, + 0x88CA4951, 0x2E9D9B70, + 0x88B80431, 0x2E6EC792, + 0x88A5D177, 0x2E3FEC8B, + 0x8893B124, 0x2E110A62, + 0x8881A33C, 0x2DE2211E, + 0x886FA7C2, 0x2DB330C7, + 0x885DBEB7, 0x2D843963, + 0x884BE820, 0x2D553AFB, + 0x883A23FE, 0x2D263595, + 0x88287255, 0x2CF72939, + 0x8816D327, 0x2CC815ED, + 0x88054677, 0x2C98FBBA, + 0x87F3CC47, 0x2C69DAA6, + 0x87E2649B, 0x2C3AB2B9, + 0x87D10F75, 0x2C0B83F9, + 0x87BFCCD7, 0x2BDC4E6F, + 0x87AE9CC5, 0x2BAD1221, + 0x879D7F40, 0x2B7DCF17, + 0x878C744C, 0x2B4E8558, + 0x877B7BEC, 0x2B1F34EB, + 0x876A9621, 0x2AEFDDD8, + 0x8759C2EF, 0x2AC08025, + 0x87490257, 0x2A911BDB, + 0x8738545E, 0x2A61B101, + 0x8727B904, 0x2A323F9D, + 0x8717304E, 0x2A02C7B8, + 0x8706BA3C, 0x29D34958, + 0x86F656D3, 0x29A3C484, + 0x86E60614, 0x29743945, + 0x86D5C802, 0x2944A7A2, + 0x86C59C9F, 0x29150FA1, + 0x86B583EE, 0x28E5714A, + 0x86A57DF1, 0x28B5CCA5, + 0x86958AAB, 0x288621B9, + 0x8685AA1F, 0x2856708C, + 0x8675DC4E, 0x2826B928, + 0x8666213C, 0x27F6FB92, + 0x865678EA, 0x27C737D2, + 0x8646E35B, 0x27976DF1, + 0x86376092, 0x27679DF4, + 0x8627F090, 0x2737C7E3, + 0x86189359, 0x2707EBC6, + 0x860948EE, 0x26D809A5, + 0x85FA1152, 0x26A82185, + 0x85EAEC88, 0x26783370, + 0x85DBDA91, 0x26483F6C, + 0x85CCDB70, 0x26184581, + 0x85BDEF27, 0x25E845B5, + 0x85AF15B9, 0x25B84012, + 0x85A04F28, 0x2588349D, + 0x85919B75, 0x2558235E, + 0x8582FAA4, 0x25280C5D, + 0x85746CB7, 0x24F7EFA1, + 0x8565F1B0, 0x24C7CD32, + 0x85578991, 0x2497A517, + 0x8549345C, 0x24677757, + 0x853AF214, 0x243743FA, + 0x852CC2BA, 0x24070B07, + 0x851EA652, 0x23D6CC86, + 0x85109CDC, 0x23A6887E, + 0x8502A65C, 0x23763EF7, + 0x84F4C2D3, 0x2345EFF7, + 0x84E6F244, 0x23159B87, + 0x84D934B0, 0x22E541AE, + 0x84CB8A1B, 0x22B4E274, + 0x84BDF285, 0x22847DDF, + 0x84B06DF1, 0x225413F8, + 0x84A2FC62, 0x2223A4C5, + 0x84959DD9, 0x21F3304E, + 0x84885257, 0x21C2B69C, + 0x847B19E1, 0x219237B4, + 0x846DF476, 0x2161B39F, + 0x8460E21A, 0x21312A65, + 0x8453E2CE, 0x21009C0B, + 0x8446F695, 0x20D0089B, + 0x843A1D70, 0x209F701C, + 0x842D5761, 0x206ED295, + 0x8420A46B, 0x203E300D, + 0x8414048F, 0x200D888C, + 0x840777CF, 0x1FDCDC1A, + 0x83FAFE2E, 0x1FAC2ABF, + 0x83EE97AC, 0x1F7B7480, + 0x83E2444D, 0x1F4AB967, + 0x83D60411, 0x1F19F97B, + 0x83C9D6FB, 0x1EE934C2, + 0x83BDBD0D, 0x1EB86B46, + 0x83B1B649, 0x1E879D0C, + 0x83A5C2B0, 0x1E56CA1E, + 0x8399E244, 0x1E25F281, + 0x838E1507, 0x1DF5163F, + 0x83825AFB, 0x1DC4355D, + 0x8376B422, 0x1D934FE5, + 0x836B207D, 0x1D6265DD, + 0x835FA00E, 0x1D31774D, + 0x835432D8, 0x1D00843C, + 0x8348D8DB, 0x1CCF8CB3, + 0x833D921A, 0x1C9E90B8, + 0x83325E97, 0x1C6D9053, + 0x83273E52, 0x1C3C8B8C, + 0x831C314E, 0x1C0B826A, + 0x8311378C, 0x1BDA74F5, + 0x8306510F, 0x1BA96334, + 0x82FB7DD8, 0x1B784D30, + 0x82F0BDE8, 0x1B4732EF, + 0x82E61141, 0x1B161479, + 0x82DB77E5, 0x1AE4F1D6, + 0x82D0F1D5, 0x1AB3CB0C, + 0x82C67F13, 0x1A82A025, + 0x82BC1FA1, 0x1A517127, + 0x82B1D381, 0x1A203E1B, + 0x82A79AB3, 0x19EF0706, + 0x829D753A, 0x19BDCBF2, + 0x82936316, 0x198C8CE6, + 0x8289644A, 0x195B49E9, + 0x827F78D8, 0x192A0303, + 0x8275A0C0, 0x18F8B83C, + 0x826BDC04, 0x18C7699B, + 0x82622AA5, 0x18961727, + 0x82588CA6, 0x1864C0E9, + 0x824F0208, 0x183366E8, + 0x82458ACB, 0x1802092C, + 0x823C26F2, 0x17D0A7BB, + 0x8232D67E, 0x179F429F, + 0x82299971, 0x176DD9DE, + 0x82206FCB, 0x173C6D80, + 0x8217598F, 0x170AFD8D, + 0x820E56BE, 0x16D98A0C, + 0x82056758, 0x16A81305, + 0x81FC8B60, 0x1676987F, + 0x81F3C2D7, 0x16451A83, + 0x81EB0DBD, 0x16139917, + 0x81E26C16, 0x15E21444, + 0x81D9DDE1, 0x15B08C11, + 0x81D16320, 0x157F0086, + 0x81C8FBD5, 0x154D71AA, + 0x81C0A801, 0x151BDF85, + 0x81B867A4, 0x14EA4A1F, + 0x81B03AC1, 0x14B8B17F, + 0x81A82159, 0x148715AD, + 0x81A01B6C, 0x145576B1, + 0x819828FD, 0x1423D492, + 0x81904A0C, 0x13F22F57, + 0x81887E9A, 0x13C0870A, + 0x8180C6A9, 0x138EDBB0, + 0x8179223A, 0x135D2D53, + 0x8171914E, 0x132B7BF9, + 0x816A13E6, 0x12F9C7AA, + 0x8162AA03, 0x12C8106E, + 0x815B53A8, 0x1296564D, + 0x815410D3, 0x1264994E, + 0x814CE188, 0x1232D978, + 0x8145C5C6, 0x120116D4, + 0x813EBD90, 0x11CF516A, + 0x8137C8E6, 0x119D8940, + 0x8130E7C8, 0x116BBE5F, + 0x812A1A39, 0x1139F0CE, + 0x81236039, 0x11082096, + 0x811CB9CA, 0x10D64DBC, + 0x811626EC, 0x10A4784A, + 0x810FA7A0, 0x1072A047, + 0x81093BE8, 0x1040C5BB, + 0x8102E3C3, 0x100EE8AD, + 0x80FC9F35, 0x0FDD0925, + 0x80F66E3C, 0x0FAB272B, + 0x80F050DB, 0x0F7942C6, + 0x80EA4712, 0x0F475BFE, + 0x80E450E2, 0x0F1572DC, + 0x80DE6E4C, 0x0EE38765, + 0x80D89F51, 0x0EB199A3, + 0x80D2E3F1, 0x0E7FA99D, + 0x80CD3C2F, 0x0E4DB75B, + 0x80C7A80A, 0x0E1BC2E3, + 0x80C22783, 0x0DE9CC3F, + 0x80BCBA9C, 0x0DB7D376, + 0x80B76155, 0x0D85D88F, + 0x80B21BAF, 0x0D53DB92, + 0x80ACE9AB, 0x0D21DC87, + 0x80A7CB49, 0x0CEFDB75, + 0x80A2C08B, 0x0CBDD865, + 0x809DC970, 0x0C8BD35E, + 0x8098E5FB, 0x0C59CC67, + 0x8094162B, 0x0C27C389, + 0x808F5A02, 0x0BF5B8CB, + 0x808AB180, 0x0BC3AC35, + 0x80861CA5, 0x0B919DCE, + 0x80819B74, 0x0B5F8D9F, + 0x807D2DEB, 0x0B2D7BAE, + 0x8078D40D, 0x0AFB6805, + 0x80748DD9, 0x0AC952AA, + 0x80705B50, 0x0A973BA5, + 0x806C3C73, 0x0A6522FE, + 0x80683143, 0x0A3308BC, + 0x806439C0, 0x0A00ECE8, + 0x806055EA, 0x09CECF89, + 0x805C85C3, 0x099CB0A7, + 0x8058C94C, 0x096A9049, + 0x80552083, 0x09386E77, + 0x80518B6B, 0x09064B3A, + 0x804E0A03, 0x08D42698, + 0x804A9C4D, 0x08A2009A, + 0x80474248, 0x086FD947, + 0x8043FBF6, 0x083DB0A7, + 0x8040C956, 0x080B86C1, + 0x803DAA69, 0x07D95B9E, + 0x803A9F31, 0x07A72F45, + 0x8037A7AC, 0x077501BE, + 0x8034C3DC, 0x0742D310, + 0x8031F3C1, 0x0710A344, + 0x802F375C, 0x06DE7261, + 0x802C8EAD, 0x06AC406F, + 0x8029F9B4, 0x067A0D75, + 0x80277872, 0x0647D97C, + 0x80250AE7, 0x0615A48A, + 0x8022B113, 0x05E36EA9, + 0x80206AF8, 0x05B137DF, + 0x801E3894, 0x057F0034, + 0x801C19E9, 0x054CC7B0, + 0x801A0EF7, 0x051A8E5C, + 0x801817BF, 0x04E8543D, + 0x80163440, 0x04B6195D, + 0x8014647A, 0x0483DDC3, + 0x8012A86F, 0x0451A176, + 0x8011001E, 0x041F647F, + 0x800F6B88, 0x03ED26E6, + 0x800DEAAC, 0x03BAE8B1, + 0x800C7D8C, 0x0388A9E9, + 0x800B2427, 0x03566A96, + 0x8009DE7D, 0x03242ABF, + 0x8008AC90, 0x02F1EA6B, + 0x80078E5E, 0x02BFA9A4, + 0x800683E8, 0x028D6870, + 0x80058D2E, 0x025B26D7, + 0x8004AA31, 0x0228E4E1, + 0x8003DAF0, 0x01F6A296, + 0x80031F6C, 0x01C45FFE, + 0x800277A5, 0x01921D1F, + 0x8001E39B, 0x015FDA03, + 0x8001634D, 0x012D96B0, + 0x8000F6BD, 0x00FB532F, + 0x80009DE9, 0x00C90F88, + 0x800058D3, 0x0096CBC1, + 0x8000277A, 0x006487E3, + 0x800009DE, 0x003243F5, + 0x80000000, 0x00000000, + 0x800009DE, 0xFFCDBC0A, + 0x8000277A, 0xFF9B781D, + 0x800058D3, 0xFF69343E, + 0x80009DE9, 0xFF36F078, + 0x8000F6BD, 0xFF04ACD0, + 0x8001634D, 0xFED2694F, + 0x8001E39B, 0xFEA025FC, + 0x800277A5, 0xFE6DE2E0, + 0x80031F6C, 0xFE3BA001, + 0x8003DAF0, 0xFE095D69, + 0x8004AA31, 0xFDD71B1E, + 0x80058D2E, 0xFDA4D928, + 0x800683E8, 0xFD72978F, + 0x80078E5E, 0xFD40565B, + 0x8008AC90, 0xFD0E1594, + 0x8009DE7D, 0xFCDBD541, + 0x800B2427, 0xFCA99569, + 0x800C7D8C, 0xFC775616, + 0x800DEAAC, 0xFC45174E, + 0x800F6B88, 0xFC12D919, + 0x8011001E, 0xFBE09B80, + 0x8012A86F, 0xFBAE5E89, + 0x8014647A, 0xFB7C223C, + 0x80163440, 0xFB49E6A2, + 0x801817BF, 0xFB17ABC2, + 0x801A0EF7, 0xFAE571A4, + 0x801C19E9, 0xFAB3384F, + 0x801E3894, 0xFA80FFCB, + 0x80206AF8, 0xFA4EC820, + 0x8022B113, 0xFA1C9156, + 0x80250AE7, 0xF9EA5B75, + 0x80277872, 0xF9B82683, + 0x8029F9B4, 0xF985F28A, + 0x802C8EAD, 0xF953BF90, + 0x802F375C, 0xF9218D9E, + 0x8031F3C1, 0xF8EF5CBB, + 0x8034C3DC, 0xF8BD2CEF, + 0x8037A7AC, 0xF88AFE41, + 0x803A9F31, 0xF858D0BA, + 0x803DAA69, 0xF826A461, + 0x8040C956, 0xF7F4793E, + 0x8043FBF6, 0xF7C24F58, + 0x80474248, 0xF79026B8, + 0x804A9C4D, 0xF75DFF65, + 0x804E0A03, 0xF72BD967, + 0x80518B6B, 0xF6F9B4C5, + 0x80552083, 0xF6C79188, + 0x8058C94C, 0xF6956FB6, + 0x805C85C3, 0xF6634F58, + 0x806055EA, 0xF6313076, + 0x806439C0, 0xF5FF1317, + 0x80683143, 0xF5CCF743, + 0x806C3C73, 0xF59ADD01, + 0x80705B50, 0xF568C45A, + 0x80748DD9, 0xF536AD55, + 0x8078D40D, 0xF50497FA, + 0x807D2DEB, 0xF4D28451, + 0x80819B74, 0xF4A07260, + 0x80861CA5, 0xF46E6231, + 0x808AB180, 0xF43C53CA, + 0x808F5A02, 0xF40A4734, + 0x8094162B, 0xF3D83C76, + 0x8098E5FB, 0xF3A63398, + 0x809DC970, 0xF3742CA1, + 0x80A2C08B, 0xF342279A, + 0x80A7CB49, 0xF310248A, + 0x80ACE9AB, 0xF2DE2378, + 0x80B21BAF, 0xF2AC246D, + 0x80B76155, 0xF27A2770, + 0x80BCBA9C, 0xF2482C89, + 0x80C22783, 0xF21633C0, + 0x80C7A80A, 0xF1E43D1C, + 0x80CD3C2F, 0xF1B248A5, + 0x80D2E3F1, 0xF1805662, + 0x80D89F51, 0xF14E665C, + 0x80DE6E4C, 0xF11C789A, + 0x80E450E2, 0xF0EA8D23, + 0x80EA4712, 0xF0B8A401, + 0x80F050DB, 0xF086BD39, + 0x80F66E3C, 0xF054D8D4, + 0x80FC9F35, 0xF022F6DA, + 0x8102E3C3, 0xEFF11752, + 0x81093BE8, 0xEFBF3A44, + 0x810FA7A0, 0xEF8D5FB8, + 0x811626EC, 0xEF5B87B5, + 0x811CB9CA, 0xEF29B243, + 0x81236039, 0xEEF7DF6A, + 0x812A1A39, 0xEEC60F31, + 0x8130E7C8, 0xEE9441A0, + 0x8137C8E6, 0xEE6276BF, + 0x813EBD90, 0xEE30AE95, + 0x8145C5C6, 0xEDFEE92B, + 0x814CE188, 0xEDCD2687, + 0x815410D3, 0xED9B66B2, + 0x815B53A8, 0xED69A9B2, + 0x8162AA03, 0xED37EF91, + 0x816A13E6, 0xED063855, + 0x8171914E, 0xECD48406, + 0x8179223A, 0xECA2D2AC, + 0x8180C6A9, 0xEC71244F, + 0x81887E9A, 0xEC3F78F5, + 0x81904A0C, 0xEC0DD0A8, + 0x819828FD, 0xEBDC2B6D, + 0x81A01B6C, 0xEBAA894E, + 0x81A82159, 0xEB78EA52, + 0x81B03AC1, 0xEB474E80, + 0x81B867A4, 0xEB15B5E0, + 0x81C0A801, 0xEAE4207A, + 0x81C8FBD5, 0xEAB28E55, + 0x81D16320, 0xEA80FF79, + 0x81D9DDE1, 0xEA4F73EE, + 0x81E26C16, 0xEA1DEBBB, + 0x81EB0DBD, 0xE9EC66E8, + 0x81F3C2D7, 0xE9BAE57C, + 0x81FC8B60, 0xE9896780, + 0x82056758, 0xE957ECFB, + 0x820E56BE, 0xE92675F4, + 0x8217598F, 0xE8F50273, + 0x82206FCB, 0xE8C3927F, + 0x82299971, 0xE8922621, + 0x8232D67E, 0xE860BD60, + 0x823C26F2, 0xE82F5844, + 0x82458ACB, 0xE7FDF6D3, + 0x824F0208, 0xE7CC9917, + 0x82588CA6, 0xE79B3F16, + 0x82622AA5, 0xE769E8D8, + 0x826BDC04, 0xE7389664, + 0x8275A0C0, 0xE70747C3, + 0x827F78D8, 0xE6D5FCFC, + 0x8289644A, 0xE6A4B616, + 0x82936316, 0xE6737319, + 0x829D753A, 0xE642340D, + 0x82A79AB3, 0xE610F8F9, + 0x82B1D381, 0xE5DFC1E4, + 0x82BC1FA1, 0xE5AE8ED8, + 0x82C67F13, 0xE57D5FDA, + 0x82D0F1D5, 0xE54C34F3, + 0x82DB77E5, 0xE51B0E2A, + 0x82E61141, 0xE4E9EB86, + 0x82F0BDE8, 0xE4B8CD10, + 0x82FB7DD8, 0xE487B2CF, + 0x8306510F, 0xE4569CCB, + 0x8311378C, 0xE4258B0A, + 0x831C314E, 0xE3F47D95, + 0x83273E52, 0xE3C37473, + 0x83325E97, 0xE3926FAC, + 0x833D921A, 0xE3616F47, + 0x8348D8DB, 0xE330734C, + 0x835432D8, 0xE2FF7BC3, + 0x835FA00E, 0xE2CE88B2, + 0x836B207D, 0xE29D9A22, + 0x8376B422, 0xE26CB01A, + 0x83825AFB, 0xE23BCAA2, + 0x838E1507, 0xE20AE9C1, + 0x8399E244, 0xE1DA0D7E, + 0x83A5C2B0, 0xE1A935E1, + 0x83B1B649, 0xE17862F3, + 0x83BDBD0D, 0xE14794B9, + 0x83C9D6FB, 0xE116CB3D, + 0x83D60411, 0xE0E60684, + 0x83E2444D, 0xE0B54698, + 0x83EE97AC, 0xE0848B7F, + 0x83FAFE2E, 0xE053D541, + 0x840777CF, 0xE02323E5, + 0x8414048F, 0xDFF27773, + 0x8420A46B, 0xDFC1CFF2, + 0x842D5761, 0xDF912D6A, + 0x843A1D70, 0xDF608FE3, + 0x8446F695, 0xDF2FF764, + 0x8453E2CE, 0xDEFF63F4, + 0x8460E21A, 0xDECED59B, + 0x846DF476, 0xDE9E4C60, + 0x847B19E1, 0xDE6DC84B, + 0x84885257, 0xDE3D4963, + 0x84959DD9, 0xDE0CCFB1, + 0x84A2FC62, 0xDDDC5B3A, + 0x84B06DF1, 0xDDABEC07, + 0x84BDF285, 0xDD7B8220, + 0x84CB8A1B, 0xDD4B1D8B, + 0x84D934B0, 0xDD1ABE51, + 0x84E6F244, 0xDCEA6478, + 0x84F4C2D3, 0xDCBA1008, + 0x8502A65C, 0xDC89C108, + 0x85109CDC, 0xDC597781, + 0x851EA652, 0xDC293379, + 0x852CC2BA, 0xDBF8F4F8, + 0x853AF214, 0xDBC8BC05, + 0x8549345C, 0xDB9888A8, + 0x85578991, 0xDB685AE8, + 0x8565F1B0, 0xDB3832CD, + 0x85746CB7, 0xDB08105E, + 0x8582FAA4, 0xDAD7F3A2, + 0x85919B75, 0xDAA7DCA1, + 0x85A04F28, 0xDA77CB62, + 0x85AF15B9, 0xDA47BFED, + 0x85BDEF27, 0xDA17BA4A, + 0x85CCDB70, 0xD9E7BA7E, + 0x85DBDA91, 0xD9B7C093, + 0x85EAEC88, 0xD987CC8F, + 0x85FA1152, 0xD957DE7A, + 0x860948EE, 0xD927F65B, + 0x86189359, 0xD8F81439, + 0x8627F090, 0xD8C8381C, + 0x86376092, 0xD898620C, + 0x8646E35B, 0xD868920F, + 0x865678EA, 0xD838C82D, + 0x8666213C, 0xD809046D, + 0x8675DC4E, 0xD7D946D7, + 0x8685AA1F, 0xD7A98F73, + 0x86958AAB, 0xD779DE46, + 0x86A57DF1, 0xD74A335A, + 0x86B583EE, 0xD71A8EB5, + 0x86C59C9F, 0xD6EAF05E, + 0x86D5C802, 0xD6BB585D, + 0x86E60614, 0xD68BC6BA, + 0x86F656D3, 0xD65C3B7B, + 0x8706BA3C, 0xD62CB6A7, + 0x8717304E, 0xD5FD3847, + 0x8727B904, 0xD5CDC062, + 0x8738545E, 0xD59E4EFE, + 0x87490257, 0xD56EE424, + 0x8759C2EF, 0xD53F7FDA, + 0x876A9621, 0xD5102227, + 0x877B7BEC, 0xD4E0CB14, + 0x878C744C, 0xD4B17AA7, + 0x879D7F40, 0xD48230E8, + 0x87AE9CC5, 0xD452EDDE, + 0x87BFCCD7, 0xD423B190, + 0x87D10F75, 0xD3F47C06, + 0x87E2649B, 0xD3C54D46, + 0x87F3CC47, 0xD3962559, + 0x88054677, 0xD3670445, + 0x8816D327, 0xD337EA12, + 0x88287255, 0xD308D6C6, + 0x883A23FE, 0xD2D9CA6A, + 0x884BE820, 0xD2AAC504, + 0x885DBEB7, 0xD27BC69C, + 0x886FA7C2, 0xD24CCF38, + 0x8881A33C, 0xD21DDEE1, + 0x8893B124, 0xD1EEF59E, + 0x88A5D177, 0xD1C01374, + 0x88B80431, 0xD191386D, + 0x88CA4951, 0xD162648F, + 0x88DCA0D3, 0xD13397E1, + 0x88EF0AB4, 0xD104D26B, + 0x890186F1, 0xD0D61433, + 0x89141589, 0xD0A75D42, + 0x8926B677, 0xD078AD9D, + 0x893969B9, 0xD04A054D, + 0x894C2F4C, 0xD01B6459, + 0x895F072D, 0xCFECCAC7, + 0x8971F15A, 0xCFBE389F, + 0x8984EDCF, 0xCF8FADE8, + 0x8997FC89, 0xCF612AAA, + 0x89AB1D86, 0xCF32AEEB, + 0x89BE50C3, 0xCF043AB2, + 0x89D1963C, 0xCED5CE08, + 0x89E4EDEE, 0xCEA768F2, + 0x89F857D8, 0xCE790B78, + 0x8A0BD3F5, 0xCE4AB5A2, + 0x8A1F6242, 0xCE1C6776, + 0x8A3302BD, 0xCDEE20FC, + 0x8A46B563, 0xCDBFE23A, + 0x8A5A7A30, 0xCD91AB38, + 0x8A6E5122, 0xCD637BFD, + 0x8A823A35, 0xCD355490, + 0x8A963567, 0xCD0734F8, + 0x8AAA42B4, 0xCCD91D3D, + 0x8ABE6219, 0xCCAB0D65, + 0x8AD29393, 0xCC7D0577, + 0x8AE6D71F, 0xCC4F057B, + 0x8AFB2CBA, 0xCC210D78, + 0x8B0F9461, 0xCBF31D75, + 0x8B240E10, 0xCBC53578, + 0x8B3899C5, 0xCB975589, + 0x8B4D377C, 0xCB697DB0, + 0x8B61E732, 0xCB3BADF2, + 0x8B76A8E4, 0xCB0DE658, + 0x8B8B7C8F, 0xCAE026E8, + 0x8BA0622F, 0xCAB26FA9, + 0x8BB559C1, 0xCA84C0A2, + 0x8BCA6342, 0xCA5719DB, + 0x8BDF7EAF, 0xCA297B5A, + 0x8BF4AC05, 0xC9FBE527, + 0x8C09EB40, 0xC9CE5748, + 0x8C1F3C5C, 0xC9A0D1C4, + 0x8C349F58, 0xC97354A3, + 0x8C4A142F, 0xC945DFEC, + 0x8C5F9ADD, 0xC91873A5, + 0x8C753361, 0xC8EB0FD6, + 0x8C8ADDB6, 0xC8BDB485, + 0x8CA099D9, 0xC89061BA, + 0x8CB667C7, 0xC863177B, + 0x8CCC477D, 0xC835D5D0, + 0x8CE238F6, 0xC8089CBF, + 0x8CF83C30, 0xC7DB6C50, + 0x8D0E5127, 0xC7AE4489, + 0x8D2477D8, 0xC7812571, + 0x8D3AB03F, 0xC7540F10, + 0x8D50FA59, 0xC727016C, + 0x8D675623, 0xC6F9FC8D, + 0x8D7DC399, 0xC6CD0079, + 0x8D9442B7, 0xC6A00D36, + 0x8DAAD37B, 0xC67322CD, + 0x8DC175E0, 0xC6464144, + 0x8DD829E4, 0xC61968A2, + 0x8DEEEF82, 0xC5EC98ED, + 0x8E05C6B7, 0xC5BFD22E, + 0x8E1CAF80, 0xC593146A, + 0x8E33A9D9, 0xC5665FA8, + 0x8E4AB5BF, 0xC539B3F0, + 0x8E61D32D, 0xC50D1148, + 0x8E790222, 0xC4E077B8, + 0x8E904298, 0xC4B3E746, + 0x8EA7948C, 0xC4875FF8, + 0x8EBEF7FB, 0xC45AE1D7, + 0x8ED66CE1, 0xC42E6CE8, + 0x8EEDF33B, 0xC4020132, + 0x8F058B04, 0xC3D59EBD, + 0x8F1D343A, 0xC3A9458F, + 0x8F34EED8, 0xC37CF5B0, + 0x8F4CBADB, 0xC350AF25, + 0x8F64983F, 0xC32471F6, + 0x8F7C8701, 0xC2F83E2A, + 0x8F94871D, 0xC2CC13C7, + 0x8FAC988E, 0xC29FF2D4, + 0x8FC4BB53, 0xC273DB58, + 0x8FDCEF66, 0xC247CD5A, + 0x8FF534C4, 0xC21BC8E0, + 0x900D8B69, 0xC1EFCDF2, + 0x9025F352, 0xC1C3DC96, + 0x903E6C7A, 0xC197F4D3, + 0x9056F6DF, 0xC16C16B0, + 0x906F927B, 0xC1404233, + 0x90883F4C, 0xC1147763, + 0x90A0FD4E, 0xC0E8B648, + 0x90B9CC7C, 0xC0BCFEE7, + 0x90D2ACD3, 0xC0915147, + 0x90EB9E50, 0xC065AD70, + 0x9104A0ED, 0xC03A1368, + 0x911DB4A8, 0xC00E8335, + 0x9136D97D, 0xBFE2FCDF, + 0x91500F67, 0xBFB7806C, + 0x91695663, 0xBF8C0DE2, + 0x9182AE6C, 0xBF60A54A, + 0x919C1780, 0xBF3546A8, + 0x91B5919A, 0xBF09F204, + 0x91CF1CB6, 0xBEDEA765, + 0x91E8B8D0, 0xBEB366D1, + 0x920265E4, 0xBE88304F, + 0x921C23EE, 0xBE5D03E5, + 0x9235F2EB, 0xBE31E19B, + 0x924FD2D6, 0xBE06C977, + 0x9269C3AC, 0xBDDBBB7F, + 0x9283C567, 0xBDB0B7BA, + 0x929DD805, 0xBD85BE2F, + 0x92B7FB82, 0xBD5ACEE5, + 0x92D22FD8, 0xBD2FE9E1, + 0x92EC7505, 0xBD050F2C, + 0x9306CB04, 0xBCDA3ECA, + 0x932131D1, 0xBCAF78C3, + 0x933BA968, 0xBC84BD1E, + 0x935631C5, 0xBC5A0BE1, + 0x9370CAE4, 0xBC2F6513, + 0x938B74C0, 0xBC04C8BA, + 0x93A62F56, 0xBBDA36DC, + 0x93C0FAA2, 0xBBAFAF81, + 0x93DBD69F, 0xBB8532AF, + 0x93F6C34A, 0xBB5AC06C, + 0x9411C09D, 0xBB3058C0, + 0x942CCE95, 0xBB05FBB0, + 0x9447ED2F, 0xBADBA943, + 0x94631C64, 0xBAB1617F, + 0x947E5C32, 0xBA87246C, + 0x9499AC95, 0xBA5CF210, + 0x94B50D87, 0xBA32CA70, + 0x94D07F05, 0xBA08AD94, + 0x94EC010B, 0xB9DE9B83, + 0x95079393, 0xB9B49442, + 0x9523369B, 0xB98A97D8, + 0x953EEA1E, 0xB960A64B, + 0x955AAE17, 0xB936BFA3, + 0x95768282, 0xB90CE3E6, + 0x9592675B, 0xB8E31319, + 0x95AE5C9E, 0xB8B94D44, + 0x95CA6246, 0xB88F926C, + 0x95E6784F, 0xB865E299, + 0x96029EB5, 0xB83C3DD1, + 0x961ED573, 0xB812A419, + 0x963B1C85, 0xB7E9157A, + 0x965773E7, 0xB7BF91F8, + 0x9673DB94, 0xB796199B, + 0x96905387, 0xB76CAC68, + 0x96ACDBBD, 0xB7434A67, + 0x96C97431, 0xB719F39D, + 0x96E61CDF, 0xB6F0A811, + 0x9702D5C2, 0xB6C767CA, + 0x971F9ED6, 0xB69E32CD, + 0x973C7816, 0xB6750921, + 0x9759617E, 0xB64BEACC, + 0x97765B0A, 0xB622D7D5, + 0x979364B5, 0xB5F9D042, + 0x97B07E7A, 0xB5D0D41A, + 0x97CDA855, 0xB5A7E362, + 0x97EAE241, 0xB57EFE21, + 0x98082C3B, 0xB556245E, + 0x9825863D, 0xB52D561E, + 0x9842F043, 0xB5049368, + 0x98606A48, 0xB4DBDC42, + 0x987DF449, 0xB4B330B2, + 0x989B8E3F, 0xB48A90C0, + 0x98B93828, 0xB461FC70, + 0x98D6F1FE, 0xB43973C9, + 0x98F4BBBC, 0xB410F6D2, + 0x9912955E, 0xB3E88591, + 0x99307EE0, 0xB3C0200C, + 0x994E783C, 0xB397C649, + 0x996C816F, 0xB36F784E, + 0x998A9A73, 0xB3473622, + 0x99A8C344, 0xB31EFFCB, + 0x99C6FBDE, 0xB2F6D54F, + 0x99E5443A, 0xB2CEB6B5, + 0x9A039C56, 0xB2A6A401, + 0x9A22042C, 0xB27E9D3B, + 0x9A407BB8, 0xB256A26A, + 0x9A5F02F5, 0xB22EB392, + 0x9A7D99DD, 0xB206D0BA, + 0x9A9C406D, 0xB1DEF9E8, + 0x9ABAF6A0, 0xB1B72F23, + 0x9AD9BC71, 0xB18F7070, + 0x9AF891DB, 0xB167BDD6, + 0x9B1776D9, 0xB140175B, + 0x9B366B67, 0xB1187D05, + 0x9B556F80, 0xB0F0EEDA, + 0x9B748320, 0xB0C96CDF, + 0x9B93A640, 0xB0A1F71C, + 0x9BB2D8DD, 0xB07A8D97, + 0x9BD21AF2, 0xB0533055, + 0x9BF16C7A, 0xB02BDF5C, + 0x9C10CD70, 0xB0049AB2, + 0x9C303DCF, 0xAFDD625F, + 0x9C4FBD92, 0xAFB63667, + 0x9C6F4CB5, 0xAF8F16D0, + 0x9C8EEB33, 0xAF6803A1, + 0x9CAE9907, 0xAF40FCE0, + 0x9CCE562B, 0xAF1A0293, + 0x9CEE229C, 0xAEF314BF, + 0x9D0DFE53, 0xAECC336B, + 0x9D2DE94D, 0xAEA55E9D, + 0x9D4DE384, 0xAE7E965B, + 0x9D6DECF4, 0xAE57DAAA, + 0x9D8E0596, 0xAE312B91, + 0x9DAE2D68, 0xAE0A8916, + 0x9DCE6462, 0xADE3F33E, + 0x9DEEAA82, 0xADBD6A10, + 0x9E0EFFC1, 0xAD96ED91, + 0x9E2F641A, 0xAD707DC8, + 0x9E4FD789, 0xAD4A1ABA, + 0x9E705A09, 0xAD23C46D, + 0x9E90EB94, 0xACFD7AE8, + 0x9EB18C26, 0xACD73E30, + 0x9ED23BB9, 0xACB10E4A, + 0x9EF2FA48, 0xAC8AEB3E, + 0x9F13C7D0, 0xAC64D510, + 0x9F34A449, 0xAC3ECBC7, + 0x9F558FB0, 0xAC18CF68, + 0x9F7689FF, 0xABF2DFFA, + 0x9F979331, 0xABCCFD82, + 0x9FB8AB41, 0xABA72806, + 0x9FD9D22A, 0xAB815F8C, + 0x9FFB07E7, 0xAB5BA41A, + 0xA01C4C72, 0xAB35F5B5, + 0xA03D9FC7, 0xAB105464, + 0xA05F01E1, 0xAAEAC02B, + 0xA08072BA, 0xAAC53912, + 0xA0A1F24C, 0xAA9FBF1D, + 0xA0C38094, 0xAA7A5253, + 0xA0E51D8C, 0xAA54F2B9, + 0xA106C92E, 0xAA2FA055, + 0xA1288376, 0xAA0A5B2D, + 0xA14A4C5E, 0xA9E52347, + 0xA16C23E1, 0xA9BFF8A8, + 0xA18E09F9, 0xA99ADB56, + 0xA1AFFEA2, 0xA975CB56, + 0xA1D201D7, 0xA950C8AF, + 0xA1F41391, 0xA92BD366, + 0xA21633CD, 0xA906EB81, + 0xA2386283, 0xA8E21106, + 0xA25A9FB1, 0xA8BD43FA, + 0xA27CEB4F, 0xA8988463, + 0xA29F4559, 0xA873D246, + 0xA2C1ADC9, 0xA84F2DA9, + 0xA2E4249A, 0xA82A9693, + 0xA306A9C7, 0xA8060D08, + 0xA3293D4B, 0xA7E1910E, + 0xA34BDF20, 0xA7BD22AB, + 0xA36E8F40, 0xA798C1E4, + 0xA3914DA7, 0xA7746EC0, + 0xA3B41A4F, 0xA7502943, + 0xA3D6F533, 0xA72BF173, + 0xA3F9DE4D, 0xA707C756, + 0xA41CD598, 0xA6E3AAF2, + 0xA43FDB0F, 0xA6BF9C4B, + 0xA462EEAC, 0xA69B9B68, + 0xA4861069, 0xA677A84E, + 0xA4A94042, 0xA653C302, + 0xA4CC7E31, 0xA62FEB8B, + 0xA4EFCA31, 0xA60C21ED, + 0xA513243B, 0xA5E8662F, + 0xA5368C4B, 0xA5C4B855, + 0xA55A025B, 0xA5A11865, + 0xA57D8666, 0xA57D8666, + 0xA5A11865, 0xA55A025B, + 0xA5C4B855, 0xA5368C4B, + 0xA5E8662F, 0xA513243B, + 0xA60C21ED, 0xA4EFCA31, + 0xA62FEB8B, 0xA4CC7E31, + 0xA653C302, 0xA4A94042, + 0xA677A84E, 0xA4861069, + 0xA69B9B68, 0xA462EEAC, + 0xA6BF9C4B, 0xA43FDB0F, + 0xA6E3AAF2, 0xA41CD598, + 0xA707C756, 0xA3F9DE4D, + 0xA72BF173, 0xA3D6F533, + 0xA7502943, 0xA3B41A4F, + 0xA7746EC0, 0xA3914DA7, + 0xA798C1E4, 0xA36E8F40, + 0xA7BD22AB, 0xA34BDF20, + 0xA7E1910E, 0xA3293D4B, + 0xA8060D08, 0xA306A9C7, + 0xA82A9693, 0xA2E4249A, + 0xA84F2DA9, 0xA2C1ADC9, + 0xA873D246, 0xA29F4559, + 0xA8988463, 0xA27CEB4F, + 0xA8BD43FA, 0xA25A9FB1, + 0xA8E21106, 0xA2386283, + 0xA906EB81, 0xA21633CD, + 0xA92BD366, 0xA1F41391, + 0xA950C8AF, 0xA1D201D7, + 0xA975CB56, 0xA1AFFEA2, + 0xA99ADB56, 0xA18E09F9, + 0xA9BFF8A8, 0xA16C23E1, + 0xA9E52347, 0xA14A4C5E, + 0xAA0A5B2D, 0xA1288376, + 0xAA2FA055, 0xA106C92E, + 0xAA54F2B9, 0xA0E51D8C, + 0xAA7A5253, 0xA0C38094, + 0xAA9FBF1D, 0xA0A1F24C, + 0xAAC53912, 0xA08072BA, + 0xAAEAC02B, 0xA05F01E1, + 0xAB105464, 0xA03D9FC7, + 0xAB35F5B5, 0xA01C4C72, + 0xAB5BA41A, 0x9FFB07E7, + 0xAB815F8C, 0x9FD9D22A, + 0xABA72806, 0x9FB8AB41, + 0xABCCFD82, 0x9F979331, + 0xABF2DFFA, 0x9F7689FF, + 0xAC18CF68, 0x9F558FB0, + 0xAC3ECBC7, 0x9F34A449, + 0xAC64D510, 0x9F13C7D0, + 0xAC8AEB3E, 0x9EF2FA48, + 0xACB10E4A, 0x9ED23BB9, + 0xACD73E30, 0x9EB18C26, + 0xACFD7AE8, 0x9E90EB94, + 0xAD23C46D, 0x9E705A09, + 0xAD4A1ABA, 0x9E4FD789, + 0xAD707DC8, 0x9E2F641A, + 0xAD96ED91, 0x9E0EFFC1, + 0xADBD6A10, 0x9DEEAA82, + 0xADE3F33E, 0x9DCE6462, + 0xAE0A8916, 0x9DAE2D68, + 0xAE312B91, 0x9D8E0596, + 0xAE57DAAA, 0x9D6DECF4, + 0xAE7E965B, 0x9D4DE384, + 0xAEA55E9D, 0x9D2DE94D, + 0xAECC336B, 0x9D0DFE53, + 0xAEF314BF, 0x9CEE229C, + 0xAF1A0293, 0x9CCE562B, + 0xAF40FCE0, 0x9CAE9907, + 0xAF6803A1, 0x9C8EEB33, + 0xAF8F16D0, 0x9C6F4CB5, + 0xAFB63667, 0x9C4FBD92, + 0xAFDD625F, 0x9C303DCF, + 0xB0049AB2, 0x9C10CD70, + 0xB02BDF5C, 0x9BF16C7A, + 0xB0533055, 0x9BD21AF2, + 0xB07A8D97, 0x9BB2D8DD, + 0xB0A1F71C, 0x9B93A640, + 0xB0C96CDF, 0x9B748320, + 0xB0F0EEDA, 0x9B556F80, + 0xB1187D05, 0x9B366B67, + 0xB140175B, 0x9B1776D9, + 0xB167BDD6, 0x9AF891DB, + 0xB18F7070, 0x9AD9BC71, + 0xB1B72F23, 0x9ABAF6A0, + 0xB1DEF9E8, 0x9A9C406D, + 0xB206D0BA, 0x9A7D99DD, + 0xB22EB392, 0x9A5F02F5, + 0xB256A26A, 0x9A407BB8, + 0xB27E9D3B, 0x9A22042C, + 0xB2A6A401, 0x9A039C56, + 0xB2CEB6B5, 0x99E5443A, + 0xB2F6D54F, 0x99C6FBDE, + 0xB31EFFCB, 0x99A8C344, + 0xB3473622, 0x998A9A73, + 0xB36F784E, 0x996C816F, + 0xB397C649, 0x994E783C, + 0xB3C0200C, 0x99307EE0, + 0xB3E88591, 0x9912955E, + 0xB410F6D2, 0x98F4BBBC, + 0xB43973C9, 0x98D6F1FE, + 0xB461FC70, 0x98B93828, + 0xB48A90C0, 0x989B8E3F, + 0xB4B330B2, 0x987DF449, + 0xB4DBDC42, 0x98606A48, + 0xB5049368, 0x9842F043, + 0xB52D561E, 0x9825863D, + 0xB556245E, 0x98082C3B, + 0xB57EFE21, 0x97EAE241, + 0xB5A7E362, 0x97CDA855, + 0xB5D0D41A, 0x97B07E7A, + 0xB5F9D042, 0x979364B5, + 0xB622D7D5, 0x97765B0A, + 0xB64BEACC, 0x9759617E, + 0xB6750921, 0x973C7816, + 0xB69E32CD, 0x971F9ED6, + 0xB6C767CA, 0x9702D5C2, + 0xB6F0A811, 0x96E61CDF, + 0xB719F39D, 0x96C97431, + 0xB7434A67, 0x96ACDBBD, + 0xB76CAC68, 0x96905387, + 0xB796199B, 0x9673DB94, + 0xB7BF91F8, 0x965773E7, + 0xB7E9157A, 0x963B1C85, + 0xB812A419, 0x961ED573, + 0xB83C3DD1, 0x96029EB5, + 0xB865E299, 0x95E6784F, + 0xB88F926C, 0x95CA6246, + 0xB8B94D44, 0x95AE5C9E, + 0xB8E31319, 0x9592675B, + 0xB90CE3E6, 0x95768282, + 0xB936BFA3, 0x955AAE17, + 0xB960A64B, 0x953EEA1E, + 0xB98A97D8, 0x9523369B, + 0xB9B49442, 0x95079393, + 0xB9DE9B83, 0x94EC010B, + 0xBA08AD94, 0x94D07F05, + 0xBA32CA70, 0x94B50D87, + 0xBA5CF210, 0x9499AC95, + 0xBA87246C, 0x947E5C32, + 0xBAB1617F, 0x94631C64, + 0xBADBA943, 0x9447ED2F, + 0xBB05FBB0, 0x942CCE95, + 0xBB3058C0, 0x9411C09D, + 0xBB5AC06C, 0x93F6C34A, + 0xBB8532AF, 0x93DBD69F, + 0xBBAFAF81, 0x93C0FAA2, + 0xBBDA36DC, 0x93A62F56, + 0xBC04C8BA, 0x938B74C0, + 0xBC2F6513, 0x9370CAE4, + 0xBC5A0BE1, 0x935631C5, + 0xBC84BD1E, 0x933BA968, + 0xBCAF78C3, 0x932131D1, + 0xBCDA3ECA, 0x9306CB04, + 0xBD050F2C, 0x92EC7505, + 0xBD2FE9E1, 0x92D22FD8, + 0xBD5ACEE5, 0x92B7FB82, + 0xBD85BE2F, 0x929DD805, + 0xBDB0B7BA, 0x9283C567, + 0xBDDBBB7F, 0x9269C3AC, + 0xBE06C977, 0x924FD2D6, + 0xBE31E19B, 0x9235F2EB, + 0xBE5D03E5, 0x921C23EE, + 0xBE88304F, 0x920265E4, + 0xBEB366D1, 0x91E8B8D0, + 0xBEDEA765, 0x91CF1CB6, + 0xBF09F204, 0x91B5919A, + 0xBF3546A8, 0x919C1780, + 0xBF60A54A, 0x9182AE6C, + 0xBF8C0DE2, 0x91695663, + 0xBFB7806C, 0x91500F67, + 0xBFE2FCDF, 0x9136D97D, + 0xC00E8335, 0x911DB4A8, + 0xC03A1368, 0x9104A0ED, + 0xC065AD70, 0x90EB9E50, + 0xC0915147, 0x90D2ACD3, + 0xC0BCFEE7, 0x90B9CC7C, + 0xC0E8B648, 0x90A0FD4E, + 0xC1147763, 0x90883F4C, + 0xC1404233, 0x906F927B, + 0xC16C16B0, 0x9056F6DF, + 0xC197F4D3, 0x903E6C7A, + 0xC1C3DC96, 0x9025F352, + 0xC1EFCDF2, 0x900D8B69, + 0xC21BC8E0, 0x8FF534C4, + 0xC247CD5A, 0x8FDCEF66, + 0xC273DB58, 0x8FC4BB53, + 0xC29FF2D4, 0x8FAC988E, + 0xC2CC13C7, 0x8F94871D, + 0xC2F83E2A, 0x8F7C8701, + 0xC32471F6, 0x8F64983F, + 0xC350AF25, 0x8F4CBADB, + 0xC37CF5B0, 0x8F34EED8, + 0xC3A9458F, 0x8F1D343A, + 0xC3D59EBD, 0x8F058B04, + 0xC4020132, 0x8EEDF33B, + 0xC42E6CE8, 0x8ED66CE1, + 0xC45AE1D7, 0x8EBEF7FB, + 0xC4875FF8, 0x8EA7948C, + 0xC4B3E746, 0x8E904298, + 0xC4E077B8, 0x8E790222, + 0xC50D1148, 0x8E61D32D, + 0xC539B3F0, 0x8E4AB5BF, + 0xC5665FA8, 0x8E33A9D9, + 0xC593146A, 0x8E1CAF80, + 0xC5BFD22E, 0x8E05C6B7, + 0xC5EC98ED, 0x8DEEEF82, + 0xC61968A2, 0x8DD829E4, + 0xC6464144, 0x8DC175E0, + 0xC67322CD, 0x8DAAD37B, + 0xC6A00D36, 0x8D9442B7, + 0xC6CD0079, 0x8D7DC399, + 0xC6F9FC8D, 0x8D675623, + 0xC727016C, 0x8D50FA59, + 0xC7540F10, 0x8D3AB03F, + 0xC7812571, 0x8D2477D8, + 0xC7AE4489, 0x8D0E5127, + 0xC7DB6C50, 0x8CF83C30, + 0xC8089CBF, 0x8CE238F6, + 0xC835D5D0, 0x8CCC477D, + 0xC863177B, 0x8CB667C7, + 0xC89061BA, 0x8CA099D9, + 0xC8BDB485, 0x8C8ADDB6, + 0xC8EB0FD6, 0x8C753361, + 0xC91873A5, 0x8C5F9ADD, + 0xC945DFEC, 0x8C4A142F, + 0xC97354A3, 0x8C349F58, + 0xC9A0D1C4, 0x8C1F3C5C, + 0xC9CE5748, 0x8C09EB40, + 0xC9FBE527, 0x8BF4AC05, + 0xCA297B5A, 0x8BDF7EAF, + 0xCA5719DB, 0x8BCA6342, + 0xCA84C0A2, 0x8BB559C1, + 0xCAB26FA9, 0x8BA0622F, + 0xCAE026E8, 0x8B8B7C8F, + 0xCB0DE658, 0x8B76A8E4, + 0xCB3BADF2, 0x8B61E732, + 0xCB697DB0, 0x8B4D377C, + 0xCB975589, 0x8B3899C5, + 0xCBC53578, 0x8B240E10, + 0xCBF31D75, 0x8B0F9461, + 0xCC210D78, 0x8AFB2CBA, + 0xCC4F057B, 0x8AE6D71F, + 0xCC7D0577, 0x8AD29393, + 0xCCAB0D65, 0x8ABE6219, + 0xCCD91D3D, 0x8AAA42B4, + 0xCD0734F8, 0x8A963567, + 0xCD355490, 0x8A823A35, + 0xCD637BFD, 0x8A6E5122, + 0xCD91AB38, 0x8A5A7A30, + 0xCDBFE23A, 0x8A46B563, + 0xCDEE20FC, 0x8A3302BD, + 0xCE1C6776, 0x8A1F6242, + 0xCE4AB5A2, 0x8A0BD3F5, + 0xCE790B78, 0x89F857D8, + 0xCEA768F2, 0x89E4EDEE, + 0xCED5CE08, 0x89D1963C, + 0xCF043AB2, 0x89BE50C3, + 0xCF32AEEB, 0x89AB1D86, + 0xCF612AAA, 0x8997FC89, + 0xCF8FADE8, 0x8984EDCF, + 0xCFBE389F, 0x8971F15A, + 0xCFECCAC7, 0x895F072D, + 0xD01B6459, 0x894C2F4C, + 0xD04A054D, 0x893969B9, + 0xD078AD9D, 0x8926B677, + 0xD0A75D42, 0x89141589, + 0xD0D61433, 0x890186F1, + 0xD104D26B, 0x88EF0AB4, + 0xD13397E1, 0x88DCA0D3, + 0xD162648F, 0x88CA4951, + 0xD191386D, 0x88B80431, + 0xD1C01374, 0x88A5D177, + 0xD1EEF59E, 0x8893B124, + 0xD21DDEE1, 0x8881A33C, + 0xD24CCF38, 0x886FA7C2, + 0xD27BC69C, 0x885DBEB7, + 0xD2AAC504, 0x884BE820, + 0xD2D9CA6A, 0x883A23FE, + 0xD308D6C6, 0x88287255, + 0xD337EA12, 0x8816D327, + 0xD3670445, 0x88054677, + 0xD3962559, 0x87F3CC47, + 0xD3C54D46, 0x87E2649B, + 0xD3F47C06, 0x87D10F75, + 0xD423B190, 0x87BFCCD7, + 0xD452EDDE, 0x87AE9CC5, + 0xD48230E8, 0x879D7F40, + 0xD4B17AA7, 0x878C744C, + 0xD4E0CB14, 0x877B7BEC, + 0xD5102227, 0x876A9621, + 0xD53F7FDA, 0x8759C2EF, + 0xD56EE424, 0x87490257, + 0xD59E4EFE, 0x8738545E, + 0xD5CDC062, 0x8727B904, + 0xD5FD3847, 0x8717304E, + 0xD62CB6A7, 0x8706BA3C, + 0xD65C3B7B, 0x86F656D3, + 0xD68BC6BA, 0x86E60614, + 0xD6BB585D, 0x86D5C802, + 0xD6EAF05E, 0x86C59C9F, + 0xD71A8EB5, 0x86B583EE, + 0xD74A335A, 0x86A57DF1, + 0xD779DE46, 0x86958AAB, + 0xD7A98F73, 0x8685AA1F, + 0xD7D946D7, 0x8675DC4E, + 0xD809046D, 0x8666213C, + 0xD838C82D, 0x865678EA, + 0xD868920F, 0x8646E35B, + 0xD898620C, 0x86376092, + 0xD8C8381C, 0x8627F090, + 0xD8F81439, 0x86189359, + 0xD927F65B, 0x860948EE, + 0xD957DE7A, 0x85FA1152, + 0xD987CC8F, 0x85EAEC88, + 0xD9B7C093, 0x85DBDA91, + 0xD9E7BA7E, 0x85CCDB70, + 0xDA17BA4A, 0x85BDEF27, + 0xDA47BFED, 0x85AF15B9, + 0xDA77CB62, 0x85A04F28, + 0xDAA7DCA1, 0x85919B75, + 0xDAD7F3A2, 0x8582FAA4, + 0xDB08105E, 0x85746CB7, + 0xDB3832CD, 0x8565F1B0, + 0xDB685AE8, 0x85578991, + 0xDB9888A8, 0x8549345C, + 0xDBC8BC05, 0x853AF214, + 0xDBF8F4F8, 0x852CC2BA, + 0xDC293379, 0x851EA652, + 0xDC597781, 0x85109CDC, + 0xDC89C108, 0x8502A65C, + 0xDCBA1008, 0x84F4C2D3, + 0xDCEA6478, 0x84E6F244, + 0xDD1ABE51, 0x84D934B0, + 0xDD4B1D8B, 0x84CB8A1B, + 0xDD7B8220, 0x84BDF285, + 0xDDABEC07, 0x84B06DF1, + 0xDDDC5B3A, 0x84A2FC62, + 0xDE0CCFB1, 0x84959DD9, + 0xDE3D4963, 0x84885257, + 0xDE6DC84B, 0x847B19E1, + 0xDE9E4C60, 0x846DF476, + 0xDECED59B, 0x8460E21A, + 0xDEFF63F4, 0x8453E2CE, + 0xDF2FF764, 0x8446F695, + 0xDF608FE3, 0x843A1D70, + 0xDF912D6A, 0x842D5761, + 0xDFC1CFF2, 0x8420A46B, + 0xDFF27773, 0x8414048F, + 0xE02323E5, 0x840777CF, + 0xE053D541, 0x83FAFE2E, + 0xE0848B7F, 0x83EE97AC, + 0xE0B54698, 0x83E2444D, + 0xE0E60684, 0x83D60411, + 0xE116CB3D, 0x83C9D6FB, + 0xE14794B9, 0x83BDBD0D, + 0xE17862F3, 0x83B1B649, + 0xE1A935E1, 0x83A5C2B0, + 0xE1DA0D7E, 0x8399E244, + 0xE20AE9C1, 0x838E1507, + 0xE23BCAA2, 0x83825AFB, + 0xE26CB01A, 0x8376B422, + 0xE29D9A22, 0x836B207D, + 0xE2CE88B2, 0x835FA00E, + 0xE2FF7BC3, 0x835432D8, + 0xE330734C, 0x8348D8DB, + 0xE3616F47, 0x833D921A, + 0xE3926FAC, 0x83325E97, + 0xE3C37473, 0x83273E52, + 0xE3F47D95, 0x831C314E, + 0xE4258B0A, 0x8311378C, + 0xE4569CCB, 0x8306510F, + 0xE487B2CF, 0x82FB7DD8, + 0xE4B8CD10, 0x82F0BDE8, + 0xE4E9EB86, 0x82E61141, + 0xE51B0E2A, 0x82DB77E5, + 0xE54C34F3, 0x82D0F1D5, + 0xE57D5FDA, 0x82C67F13, + 0xE5AE8ED8, 0x82BC1FA1, + 0xE5DFC1E4, 0x82B1D381, + 0xE610F8F9, 0x82A79AB3, + 0xE642340D, 0x829D753A, + 0xE6737319, 0x82936316, + 0xE6A4B616, 0x8289644A, + 0xE6D5FCFC, 0x827F78D8, + 0xE70747C3, 0x8275A0C0, + 0xE7389664, 0x826BDC04, + 0xE769E8D8, 0x82622AA5, + 0xE79B3F16, 0x82588CA6, + 0xE7CC9917, 0x824F0208, + 0xE7FDF6D3, 0x82458ACB, + 0xE82F5844, 0x823C26F2, + 0xE860BD60, 0x8232D67E, + 0xE8922621, 0x82299971, + 0xE8C3927F, 0x82206FCB, + 0xE8F50273, 0x8217598F, + 0xE92675F4, 0x820E56BE, + 0xE957ECFB, 0x82056758, + 0xE9896780, 0x81FC8B60, + 0xE9BAE57C, 0x81F3C2D7, + 0xE9EC66E8, 0x81EB0DBD, + 0xEA1DEBBB, 0x81E26C16, + 0xEA4F73EE, 0x81D9DDE1, + 0xEA80FF79, 0x81D16320, + 0xEAB28E55, 0x81C8FBD5, + 0xEAE4207A, 0x81C0A801, + 0xEB15B5E0, 0x81B867A4, + 0xEB474E80, 0x81B03AC1, + 0xEB78EA52, 0x81A82159, + 0xEBAA894E, 0x81A01B6C, + 0xEBDC2B6D, 0x819828FD, + 0xEC0DD0A8, 0x81904A0C, + 0xEC3F78F5, 0x81887E9A, + 0xEC71244F, 0x8180C6A9, + 0xECA2D2AC, 0x8179223A, + 0xECD48406, 0x8171914E, + 0xED063855, 0x816A13E6, + 0xED37EF91, 0x8162AA03, + 0xED69A9B2, 0x815B53A8, + 0xED9B66B2, 0x815410D3, + 0xEDCD2687, 0x814CE188, + 0xEDFEE92B, 0x8145C5C6, + 0xEE30AE95, 0x813EBD90, + 0xEE6276BF, 0x8137C8E6, + 0xEE9441A0, 0x8130E7C8, + 0xEEC60F31, 0x812A1A39, + 0xEEF7DF6A, 0x81236039, + 0xEF29B243, 0x811CB9CA, + 0xEF5B87B5, 0x811626EC, + 0xEF8D5FB8, 0x810FA7A0, + 0xEFBF3A44, 0x81093BE8, + 0xEFF11752, 0x8102E3C3, + 0xF022F6DA, 0x80FC9F35, + 0xF054D8D4, 0x80F66E3C, + 0xF086BD39, 0x80F050DB, + 0xF0B8A401, 0x80EA4712, + 0xF0EA8D23, 0x80E450E2, + 0xF11C789A, 0x80DE6E4C, + 0xF14E665C, 0x80D89F51, + 0xF1805662, 0x80D2E3F1, + 0xF1B248A5, 0x80CD3C2F, + 0xF1E43D1C, 0x80C7A80A, + 0xF21633C0, 0x80C22783, + 0xF2482C89, 0x80BCBA9C, + 0xF27A2770, 0x80B76155, + 0xF2AC246D, 0x80B21BAF, + 0xF2DE2378, 0x80ACE9AB, + 0xF310248A, 0x80A7CB49, + 0xF342279A, 0x80A2C08B, + 0xF3742CA1, 0x809DC970, + 0xF3A63398, 0x8098E5FB, + 0xF3D83C76, 0x8094162B, + 0xF40A4734, 0x808F5A02, + 0xF43C53CA, 0x808AB180, + 0xF46E6231, 0x80861CA5, + 0xF4A07260, 0x80819B74, + 0xF4D28451, 0x807D2DEB, + 0xF50497FA, 0x8078D40D, + 0xF536AD55, 0x80748DD9, + 0xF568C45A, 0x80705B50, + 0xF59ADD01, 0x806C3C73, + 0xF5CCF743, 0x80683143, + 0xF5FF1317, 0x806439C0, + 0xF6313076, 0x806055EA, + 0xF6634F58, 0x805C85C3, + 0xF6956FB6, 0x8058C94C, + 0xF6C79188, 0x80552083, + 0xF6F9B4C5, 0x80518B6B, + 0xF72BD967, 0x804E0A03, + 0xF75DFF65, 0x804A9C4D, + 0xF79026B8, 0x80474248, + 0xF7C24F58, 0x8043FBF6, + 0xF7F4793E, 0x8040C956, + 0xF826A461, 0x803DAA69, + 0xF858D0BA, 0x803A9F31, + 0xF88AFE41, 0x8037A7AC, + 0xF8BD2CEF, 0x8034C3DC, + 0xF8EF5CBB, 0x8031F3C1, + 0xF9218D9E, 0x802F375C, + 0xF953BF90, 0x802C8EAD, + 0xF985F28A, 0x8029F9B4, + 0xF9B82683, 0x80277872, + 0xF9EA5B75, 0x80250AE7, + 0xFA1C9156, 0x8022B113, + 0xFA4EC820, 0x80206AF8, + 0xFA80FFCB, 0x801E3894, + 0xFAB3384F, 0x801C19E9, + 0xFAE571A4, 0x801A0EF7, + 0xFB17ABC2, 0x801817BF, + 0xFB49E6A2, 0x80163440, + 0xFB7C223C, 0x8014647A, + 0xFBAE5E89, 0x8012A86F, + 0xFBE09B80, 0x8011001E, + 0xFC12D919, 0x800F6B88, + 0xFC45174E, 0x800DEAAC, + 0xFC775616, 0x800C7D8C, + 0xFCA99569, 0x800B2427, + 0xFCDBD541, 0x8009DE7D, + 0xFD0E1594, 0x8008AC90, + 0xFD40565B, 0x80078E5E, + 0xFD72978F, 0x800683E8, + 0xFDA4D928, 0x80058D2E, + 0xFDD71B1E, 0x8004AA31, + 0xFE095D69, 0x8003DAF0, + 0xFE3BA001, 0x80031F6C, + 0xFE6DE2E0, 0x800277A5, + 0xFEA025FC, 0x8001E39B, + 0xFED2694F, 0x8001634D, + 0xFF04ACD0, 0x8000F6BD, + 0xFF36F078, 0x80009DE9, + 0xFF69343E, 0x800058D3, + 0xFF9B781D, 0x8000277A, + 0xFFCDBC0A, 0x800009DE +}; + + + +/* +* @brief q15 Twiddle factors Table +*/ + + +/** +* \par +* Example code for q15 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefq15[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefq15[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 16 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to q15(Fixed point 1.15): +* round(twiddleCoefq15(i) * pow(2, 15)) +* +*/ +const q15_t twiddleCoef_16_q15[24] = { + 0x7FFF, 0x0000, + 0x7641, 0x30FB, + 0x5A82, 0x5A82, + 0x30FB, 0x7641, + 0x0000, 0x7FFF, + 0xCF04, 0x7641, + 0xA57D, 0x5A82, + 0x89BE, 0x30FB, + 0x8000, 0x0000, + 0x89BE, 0xCF04, + 0xA57D, 0xA57D, + 0xCF04, 0x89BE +}; + +/** +* \par +* Example code for q15 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefq15[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefq15[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 32 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to q15(Fixed point 1.15): +* round(twiddleCoefq15(i) * pow(2, 15)) +* +*/ +const q15_t twiddleCoef_32_q15[48] = { + 0x7FFF, 0x0000, + 0x7D8A, 0x18F8, + 0x7641, 0x30FB, + 0x6A6D, 0x471C, + 0x5A82, 0x5A82, + 0x471C, 0x6A6D, + 0x30FB, 0x7641, + 0x18F8, 0x7D8A, + 0x0000, 0x7FFF, + 0xE707, 0x7D8A, + 0xCF04, 0x7641, + 0xB8E3, 0x6A6D, + 0xA57D, 0x5A82, + 0x9592, 0x471C, + 0x89BE, 0x30FB, + 0x8275, 0x18F8, + 0x8000, 0x0000, + 0x8275, 0xE707, + 0x89BE, 0xCF04, + 0x9592, 0xB8E3, + 0xA57D, 0xA57D, + 0xB8E3, 0x9592, + 0xCF04, 0x89BE, + 0xE707, 0x8275 +}; + +/** +* \par +* Example code for q15 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefq15[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefq15[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 64 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to q15(Fixed point 1.15): +* round(twiddleCoefq15(i) * pow(2, 15)) +* +*/ +const q15_t twiddleCoef_64_q15[96] = { + 0x7FFF, 0x0000, + 0x7F62, 0x0C8B, + 0x7D8A, 0x18F8, + 0x7A7D, 0x2528, + 0x7641, 0x30FB, + 0x70E2, 0x3C56, + 0x6A6D, 0x471C, + 0x62F2, 0x5133, + 0x5A82, 0x5A82, + 0x5133, 0x62F2, + 0x471C, 0x6A6D, + 0x3C56, 0x70E2, + 0x30FB, 0x7641, + 0x2528, 0x7A7D, + 0x18F8, 0x7D8A, + 0x0C8B, 0x7F62, + 0x0000, 0x7FFF, + 0xF374, 0x7F62, + 0xE707, 0x7D8A, + 0xDAD7, 0x7A7D, + 0xCF04, 0x7641, + 0xC3A9, 0x70E2, + 0xB8E3, 0x6A6D, + 0xAECC, 0x62F2, + 0xA57D, 0x5A82, + 0x9D0D, 0x5133, + 0x9592, 0x471C, + 0x8F1D, 0x3C56, + 0x89BE, 0x30FB, + 0x8582, 0x2528, + 0x8275, 0x18F8, + 0x809D, 0x0C8B, + 0x8000, 0x0000, + 0x809D, 0xF374, + 0x8275, 0xE707, + 0x8582, 0xDAD7, + 0x89BE, 0xCF04, + 0x8F1D, 0xC3A9, + 0x9592, 0xB8E3, + 0x9D0D, 0xAECC, + 0xA57D, 0xA57D, + 0xAECC, 0x9D0D, + 0xB8E3, 0x9592, + 0xC3A9, 0x8F1D, + 0xCF04, 0x89BE, + 0xDAD7, 0x8582, + 0xE707, 0x8275, + 0xF374, 0x809D +}; + +/** +* \par +* Example code for q15 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefq15[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefq15[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 128 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to q15(Fixed point 1.15): +* round(twiddleCoefq15(i) * pow(2, 15)) +* +*/ +const q15_t twiddleCoef_128_q15[192] = { + 0x7FFF, 0x0000, + 0x7FD8, 0x0647, + 0x7F62, 0x0C8B, + 0x7E9D, 0x12C8, + 0x7D8A, 0x18F8, + 0x7C29, 0x1F19, + 0x7A7D, 0x2528, + 0x7884, 0x2B1F, + 0x7641, 0x30FB, + 0x73B5, 0x36BA, + 0x70E2, 0x3C56, + 0x6DCA, 0x41CE, + 0x6A6D, 0x471C, + 0x66CF, 0x4C3F, + 0x62F2, 0x5133, + 0x5ED7, 0x55F5, + 0x5A82, 0x5A82, + 0x55F5, 0x5ED7, + 0x5133, 0x62F2, + 0x4C3F, 0x66CF, + 0x471C, 0x6A6D, + 0x41CE, 0x6DCA, + 0x3C56, 0x70E2, + 0x36BA, 0x73B5, + 0x30FB, 0x7641, + 0x2B1F, 0x7884, + 0x2528, 0x7A7D, + 0x1F19, 0x7C29, + 0x18F8, 0x7D8A, + 0x12C8, 0x7E9D, + 0x0C8B, 0x7F62, + 0x0647, 0x7FD8, + 0x0000, 0x7FFF, + 0xF9B8, 0x7FD8, + 0xF374, 0x7F62, + 0xED37, 0x7E9D, + 0xE707, 0x7D8A, + 0xE0E6, 0x7C29, + 0xDAD7, 0x7A7D, + 0xD4E0, 0x7884, + 0xCF04, 0x7641, + 0xC945, 0x73B5, + 0xC3A9, 0x70E2, + 0xBE31, 0x6DCA, + 0xB8E3, 0x6A6D, + 0xB3C0, 0x66CF, + 0xAECC, 0x62F2, + 0xAA0A, 0x5ED7, + 0xA57D, 0x5A82, + 0xA128, 0x55F5, + 0x9D0D, 0x5133, + 0x9930, 0x4C3F, + 0x9592, 0x471C, + 0x9235, 0x41CE, + 0x8F1D, 0x3C56, + 0x8C4A, 0x36BA, + 0x89BE, 0x30FB, + 0x877B, 0x2B1F, + 0x8582, 0x2528, + 0x83D6, 0x1F19, + 0x8275, 0x18F8, + 0x8162, 0x12C8, + 0x809D, 0x0C8B, + 0x8027, 0x0647, + 0x8000, 0x0000, + 0x8027, 0xF9B8, + 0x809D, 0xF374, + 0x8162, 0xED37, + 0x8275, 0xE707, + 0x83D6, 0xE0E6, + 0x8582, 0xDAD7, + 0x877B, 0xD4E0, + 0x89BE, 0xCF04, + 0x8C4A, 0xC945, + 0x8F1D, 0xC3A9, + 0x9235, 0xBE31, + 0x9592, 0xB8E3, + 0x9930, 0xB3C0, + 0x9D0D, 0xAECC, + 0xA128, 0xAA0A, + 0xA57D, 0xA57D, + 0xAA0A, 0xA128, + 0xAECC, 0x9D0D, + 0xB3C0, 0x9930, + 0xB8E3, 0x9592, + 0xBE31, 0x9235, + 0xC3A9, 0x8F1D, + 0xC945, 0x8C4A, + 0xCF04, 0x89BE, + 0xD4E0, 0x877B, + 0xDAD7, 0x8582, + 0xE0E6, 0x83D6, + 0xE707, 0x8275, + 0xED37, 0x8162, + 0xF374, 0x809D, + 0xF9B8, 0x8027 +}; + +/** +* \par +* Example code for q15 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefq15[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefq15[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 256 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to q15(Fixed point 1.15): +* round(twiddleCoefq15(i) * pow(2, 15)) +* +*/ +const q15_t twiddleCoef_256_q15[384] = { + 0x7FFF, 0x0000, + 0x7FF6, 0x0324, + 0x7FD8, 0x0647, + 0x7FA7, 0x096A, + 0x7F62, 0x0C8B, + 0x7F09, 0x0FAB, + 0x7E9D, 0x12C8, + 0x7E1D, 0x15E2, + 0x7D8A, 0x18F8, + 0x7CE3, 0x1C0B, + 0x7C29, 0x1F19, + 0x7B5D, 0x2223, + 0x7A7D, 0x2528, + 0x798A, 0x2826, + 0x7884, 0x2B1F, + 0x776C, 0x2E11, + 0x7641, 0x30FB, + 0x7504, 0x33DE, + 0x73B5, 0x36BA, + 0x7255, 0x398C, + 0x70E2, 0x3C56, + 0x6F5F, 0x3F17, + 0x6DCA, 0x41CE, + 0x6C24, 0x447A, + 0x6A6D, 0x471C, + 0x68A6, 0x49B4, + 0x66CF, 0x4C3F, + 0x64E8, 0x4EBF, + 0x62F2, 0x5133, + 0x60EC, 0x539B, + 0x5ED7, 0x55F5, + 0x5CB4, 0x5842, + 0x5A82, 0x5A82, + 0x5842, 0x5CB4, + 0x55F5, 0x5ED7, + 0x539B, 0x60EC, + 0x5133, 0x62F2, + 0x4EBF, 0x64E8, + 0x4C3F, 0x66CF, + 0x49B4, 0x68A6, + 0x471C, 0x6A6D, + 0x447A, 0x6C24, + 0x41CE, 0x6DCA, + 0x3F17, 0x6F5F, + 0x3C56, 0x70E2, + 0x398C, 0x7255, + 0x36BA, 0x73B5, + 0x33DE, 0x7504, + 0x30FB, 0x7641, + 0x2E11, 0x776C, + 0x2B1F, 0x7884, + 0x2826, 0x798A, + 0x2528, 0x7A7D, + 0x2223, 0x7B5D, + 0x1F19, 0x7C29, + 0x1C0B, 0x7CE3, + 0x18F8, 0x7D8A, + 0x15E2, 0x7E1D, + 0x12C8, 0x7E9D, + 0x0FAB, 0x7F09, + 0x0C8B, 0x7F62, + 0x096A, 0x7FA7, + 0x0647, 0x7FD8, + 0x0324, 0x7FF6, + 0x0000, 0x7FFF, + 0xFCDB, 0x7FF6, + 0xF9B8, 0x7FD8, + 0xF695, 0x7FA7, + 0xF374, 0x7F62, + 0xF054, 0x7F09, + 0xED37, 0x7E9D, + 0xEA1D, 0x7E1D, + 0xE707, 0x7D8A, + 0xE3F4, 0x7CE3, + 0xE0E6, 0x7C29, + 0xDDDC, 0x7B5D, + 0xDAD7, 0x7A7D, + 0xD7D9, 0x798A, + 0xD4E0, 0x7884, + 0xD1EE, 0x776C, + 0xCF04, 0x7641, + 0xCC21, 0x7504, + 0xC945, 0x73B5, + 0xC673, 0x7255, + 0xC3A9, 0x70E2, + 0xC0E8, 0x6F5F, + 0xBE31, 0x6DCA, + 0xBB85, 0x6C24, + 0xB8E3, 0x6A6D, + 0xB64B, 0x68A6, + 0xB3C0, 0x66CF, + 0xB140, 0x64E8, + 0xAECC, 0x62F2, + 0xAC64, 0x60EC, + 0xAA0A, 0x5ED7, + 0xA7BD, 0x5CB4, + 0xA57D, 0x5A82, + 0xA34B, 0x5842, + 0xA128, 0x55F5, + 0x9F13, 0x539B, + 0x9D0D, 0x5133, + 0x9B17, 0x4EBF, + 0x9930, 0x4C3F, + 0x9759, 0x49B4, + 0x9592, 0x471C, + 0x93DB, 0x447A, + 0x9235, 0x41CE, + 0x90A0, 0x3F17, + 0x8F1D, 0x3C56, + 0x8DAA, 0x398C, + 0x8C4A, 0x36BA, + 0x8AFB, 0x33DE, + 0x89BE, 0x30FB, + 0x8893, 0x2E11, + 0x877B, 0x2B1F, + 0x8675, 0x2826, + 0x8582, 0x2528, + 0x84A2, 0x2223, + 0x83D6, 0x1F19, + 0x831C, 0x1C0B, + 0x8275, 0x18F8, + 0x81E2, 0x15E2, + 0x8162, 0x12C8, + 0x80F6, 0x0FAB, + 0x809D, 0x0C8B, + 0x8058, 0x096A, + 0x8027, 0x0647, + 0x8009, 0x0324, + 0x8000, 0x0000, + 0x8009, 0xFCDB, + 0x8027, 0xF9B8, + 0x8058, 0xF695, + 0x809D, 0xF374, + 0x80F6, 0xF054, + 0x8162, 0xED37, + 0x81E2, 0xEA1D, + 0x8275, 0xE707, + 0x831C, 0xE3F4, + 0x83D6, 0xE0E6, + 0x84A2, 0xDDDC, + 0x8582, 0xDAD7, + 0x8675, 0xD7D9, + 0x877B, 0xD4E0, + 0x8893, 0xD1EE, + 0x89BE, 0xCF04, + 0x8AFB, 0xCC21, + 0x8C4A, 0xC945, + 0x8DAA, 0xC673, + 0x8F1D, 0xC3A9, + 0x90A0, 0xC0E8, + 0x9235, 0xBE31, + 0x93DB, 0xBB85, + 0x9592, 0xB8E3, + 0x9759, 0xB64B, + 0x9930, 0xB3C0, + 0x9B17, 0xB140, + 0x9D0D, 0xAECC, + 0x9F13, 0xAC64, + 0xA128, 0xAA0A, + 0xA34B, 0xA7BD, + 0xA57D, 0xA57D, + 0xA7BD, 0xA34B, + 0xAA0A, 0xA128, + 0xAC64, 0x9F13, + 0xAECC, 0x9D0D, + 0xB140, 0x9B17, + 0xB3C0, 0x9930, + 0xB64B, 0x9759, + 0xB8E3, 0x9592, + 0xBB85, 0x93DB, + 0xBE31, 0x9235, + 0xC0E8, 0x90A0, + 0xC3A9, 0x8F1D, + 0xC673, 0x8DAA, + 0xC945, 0x8C4A, + 0xCC21, 0x8AFB, + 0xCF04, 0x89BE, + 0xD1EE, 0x8893, + 0xD4E0, 0x877B, + 0xD7D9, 0x8675, + 0xDAD7, 0x8582, + 0xDDDC, 0x84A2, + 0xE0E6, 0x83D6, + 0xE3F4, 0x831C, + 0xE707, 0x8275, + 0xEA1D, 0x81E2, + 0xED37, 0x8162, + 0xF054, 0x80F6, + 0xF374, 0x809D, + 0xF695, 0x8058, + 0xF9B8, 0x8027, + 0xFCDB, 0x8009 +}; + +/** +* \par +* Example code for q15 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefq15[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefq15[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 512 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to q15(Fixed point 1.15): +* round(twiddleCoefq15(i) * pow(2, 15)) +* +*/ +const q15_t twiddleCoef_512_q15[768] = { + 0x7FFF, 0x0000, + 0x7FFD, 0x0192, + 0x7FF6, 0x0324, + 0x7FE9, 0x04B6, + 0x7FD8, 0x0647, + 0x7FC2, 0x07D9, + 0x7FA7, 0x096A, + 0x7F87, 0x0AFB, + 0x7F62, 0x0C8B, + 0x7F38, 0x0E1B, + 0x7F09, 0x0FAB, + 0x7ED5, 0x1139, + 0x7E9D, 0x12C8, + 0x7E5F, 0x1455, + 0x7E1D, 0x15E2, + 0x7DD6, 0x176D, + 0x7D8A, 0x18F8, + 0x7D39, 0x1A82, + 0x7CE3, 0x1C0B, + 0x7C89, 0x1D93, + 0x7C29, 0x1F19, + 0x7BC5, 0x209F, + 0x7B5D, 0x2223, + 0x7AEF, 0x23A6, + 0x7A7D, 0x2528, + 0x7A05, 0x26A8, + 0x798A, 0x2826, + 0x7909, 0x29A3, + 0x7884, 0x2B1F, + 0x77FA, 0x2C98, + 0x776C, 0x2E11, + 0x76D9, 0x2F87, + 0x7641, 0x30FB, + 0x75A5, 0x326E, + 0x7504, 0x33DE, + 0x745F, 0x354D, + 0x73B5, 0x36BA, + 0x7307, 0x3824, + 0x7255, 0x398C, + 0x719E, 0x3AF2, + 0x70E2, 0x3C56, + 0x7023, 0x3DB8, + 0x6F5F, 0x3F17, + 0x6E96, 0x4073, + 0x6DCA, 0x41CE, + 0x6CF9, 0x4325, + 0x6C24, 0x447A, + 0x6B4A, 0x45CD, + 0x6A6D, 0x471C, + 0x698C, 0x4869, + 0x68A6, 0x49B4, + 0x67BD, 0x4AFB, + 0x66CF, 0x4C3F, + 0x65DD, 0x4D81, + 0x64E8, 0x4EBF, + 0x63EF, 0x4FFB, + 0x62F2, 0x5133, + 0x61F1, 0x5269, + 0x60EC, 0x539B, + 0x5FE3, 0x54CA, + 0x5ED7, 0x55F5, + 0x5DC7, 0x571D, + 0x5CB4, 0x5842, + 0x5B9D, 0x5964, + 0x5A82, 0x5A82, + 0x5964, 0x5B9D, + 0x5842, 0x5CB4, + 0x571D, 0x5DC7, + 0x55F5, 0x5ED7, + 0x54CA, 0x5FE3, + 0x539B, 0x60EC, + 0x5269, 0x61F1, + 0x5133, 0x62F2, + 0x4FFB, 0x63EF, + 0x4EBF, 0x64E8, + 0x4D81, 0x65DD, + 0x4C3F, 0x66CF, + 0x4AFB, 0x67BD, + 0x49B4, 0x68A6, + 0x4869, 0x698C, + 0x471C, 0x6A6D, + 0x45CD, 0x6B4A, + 0x447A, 0x6C24, + 0x4325, 0x6CF9, + 0x41CE, 0x6DCA, + 0x4073, 0x6E96, + 0x3F17, 0x6F5F, + 0x3DB8, 0x7023, + 0x3C56, 0x70E2, + 0x3AF2, 0x719E, + 0x398C, 0x7255, + 0x3824, 0x7307, + 0x36BA, 0x73B5, + 0x354D, 0x745F, + 0x33DE, 0x7504, + 0x326E, 0x75A5, + 0x30FB, 0x7641, + 0x2F87, 0x76D9, + 0x2E11, 0x776C, + 0x2C98, 0x77FA, + 0x2B1F, 0x7884, + 0x29A3, 0x7909, + 0x2826, 0x798A, + 0x26A8, 0x7A05, + 0x2528, 0x7A7D, + 0x23A6, 0x7AEF, + 0x2223, 0x7B5D, + 0x209F, 0x7BC5, + 0x1F19, 0x7C29, + 0x1D93, 0x7C89, + 0x1C0B, 0x7CE3, + 0x1A82, 0x7D39, + 0x18F8, 0x7D8A, + 0x176D, 0x7DD6, + 0x15E2, 0x7E1D, + 0x1455, 0x7E5F, + 0x12C8, 0x7E9D, + 0x1139, 0x7ED5, + 0x0FAB, 0x7F09, + 0x0E1B, 0x7F38, + 0x0C8B, 0x7F62, + 0x0AFB, 0x7F87, + 0x096A, 0x7FA7, + 0x07D9, 0x7FC2, + 0x0647, 0x7FD8, + 0x04B6, 0x7FE9, + 0x0324, 0x7FF6, + 0x0192, 0x7FFD, + 0x0000, 0x7FFF, + 0xFE6D, 0x7FFD, + 0xFCDB, 0x7FF6, + 0xFB49, 0x7FE9, + 0xF9B8, 0x7FD8, + 0xF826, 0x7FC2, + 0xF695, 0x7FA7, + 0xF504, 0x7F87, + 0xF374, 0x7F62, + 0xF1E4, 0x7F38, + 0xF054, 0x7F09, + 0xEEC6, 0x7ED5, + 0xED37, 0x7E9D, + 0xEBAA, 0x7E5F, + 0xEA1D, 0x7E1D, + 0xE892, 0x7DD6, + 0xE707, 0x7D8A, + 0xE57D, 0x7D39, + 0xE3F4, 0x7CE3, + 0xE26C, 0x7C89, + 0xE0E6, 0x7C29, + 0xDF60, 0x7BC5, + 0xDDDC, 0x7B5D, + 0xDC59, 0x7AEF, + 0xDAD7, 0x7A7D, + 0xD957, 0x7A05, + 0xD7D9, 0x798A, + 0xD65C, 0x7909, + 0xD4E0, 0x7884, + 0xD367, 0x77FA, + 0xD1EE, 0x776C, + 0xD078, 0x76D9, + 0xCF04, 0x7641, + 0xCD91, 0x75A5, + 0xCC21, 0x7504, + 0xCAB2, 0x745F, + 0xC945, 0x73B5, + 0xC7DB, 0x7307, + 0xC673, 0x7255, + 0xC50D, 0x719E, + 0xC3A9, 0x70E2, + 0xC247, 0x7023, + 0xC0E8, 0x6F5F, + 0xBF8C, 0x6E96, + 0xBE31, 0x6DCA, + 0xBCDA, 0x6CF9, + 0xBB85, 0x6C24, + 0xBA32, 0x6B4A, + 0xB8E3, 0x6A6D, + 0xB796, 0x698C, + 0xB64B, 0x68A6, + 0xB504, 0x67BD, + 0xB3C0, 0x66CF, + 0xB27E, 0x65DD, + 0xB140, 0x64E8, + 0xB004, 0x63EF, + 0xAECC, 0x62F2, + 0xAD96, 0x61F1, + 0xAC64, 0x60EC, + 0xAB35, 0x5FE3, + 0xAA0A, 0x5ED7, + 0xA8E2, 0x5DC7, + 0xA7BD, 0x5CB4, + 0xA69B, 0x5B9D, + 0xA57D, 0x5A82, + 0xA462, 0x5964, + 0xA34B, 0x5842, + 0xA238, 0x571D, + 0xA128, 0x55F5, + 0xA01C, 0x54CA, + 0x9F13, 0x539B, + 0x9E0E, 0x5269, + 0x9D0D, 0x5133, + 0x9C10, 0x4FFB, + 0x9B17, 0x4EBF, + 0x9A22, 0x4D81, + 0x9930, 0x4C3F, + 0x9842, 0x4AFB, + 0x9759, 0x49B4, + 0x9673, 0x4869, + 0x9592, 0x471C, + 0x94B5, 0x45CD, + 0x93DB, 0x447A, + 0x9306, 0x4325, + 0x9235, 0x41CE, + 0x9169, 0x4073, + 0x90A0, 0x3F17, + 0x8FDC, 0x3DB8, + 0x8F1D, 0x3C56, + 0x8E61, 0x3AF2, + 0x8DAA, 0x398C, + 0x8CF8, 0x3824, + 0x8C4A, 0x36BA, + 0x8BA0, 0x354D, + 0x8AFB, 0x33DE, + 0x8A5A, 0x326E, + 0x89BE, 0x30FB, + 0x8926, 0x2F87, + 0x8893, 0x2E11, + 0x8805, 0x2C98, + 0x877B, 0x2B1F, + 0x86F6, 0x29A3, + 0x8675, 0x2826, + 0x85FA, 0x26A8, + 0x8582, 0x2528, + 0x8510, 0x23A6, + 0x84A2, 0x2223, + 0x843A, 0x209F, + 0x83D6, 0x1F19, + 0x8376, 0x1D93, + 0x831C, 0x1C0B, + 0x82C6, 0x1A82, + 0x8275, 0x18F8, + 0x8229, 0x176D, + 0x81E2, 0x15E2, + 0x81A0, 0x1455, + 0x8162, 0x12C8, + 0x812A, 0x1139, + 0x80F6, 0x0FAB, + 0x80C7, 0x0E1B, + 0x809D, 0x0C8B, + 0x8078, 0x0AFB, + 0x8058, 0x096A, + 0x803D, 0x07D9, + 0x8027, 0x0647, + 0x8016, 0x04B6, + 0x8009, 0x0324, + 0x8002, 0x0192, + 0x8000, 0x0000, + 0x8002, 0xFE6D, + 0x8009, 0xFCDB, + 0x8016, 0xFB49, + 0x8027, 0xF9B8, + 0x803D, 0xF826, + 0x8058, 0xF695, + 0x8078, 0xF504, + 0x809D, 0xF374, + 0x80C7, 0xF1E4, + 0x80F6, 0xF054, + 0x812A, 0xEEC6, + 0x8162, 0xED37, + 0x81A0, 0xEBAA, + 0x81E2, 0xEA1D, + 0x8229, 0xE892, + 0x8275, 0xE707, + 0x82C6, 0xE57D, + 0x831C, 0xE3F4, + 0x8376, 0xE26C, + 0x83D6, 0xE0E6, + 0x843A, 0xDF60, + 0x84A2, 0xDDDC, + 0x8510, 0xDC59, + 0x8582, 0xDAD7, + 0x85FA, 0xD957, + 0x8675, 0xD7D9, + 0x86F6, 0xD65C, + 0x877B, 0xD4E0, + 0x8805, 0xD367, + 0x8893, 0xD1EE, + 0x8926, 0xD078, + 0x89BE, 0xCF04, + 0x8A5A, 0xCD91, + 0x8AFB, 0xCC21, + 0x8BA0, 0xCAB2, + 0x8C4A, 0xC945, + 0x8CF8, 0xC7DB, + 0x8DAA, 0xC673, + 0x8E61, 0xC50D, + 0x8F1D, 0xC3A9, + 0x8FDC, 0xC247, + 0x90A0, 0xC0E8, + 0x9169, 0xBF8C, + 0x9235, 0xBE31, + 0x9306, 0xBCDA, + 0x93DB, 0xBB85, + 0x94B5, 0xBA32, + 0x9592, 0xB8E3, + 0x9673, 0xB796, + 0x9759, 0xB64B, + 0x9842, 0xB504, + 0x9930, 0xB3C0, + 0x9A22, 0xB27E, + 0x9B17, 0xB140, + 0x9C10, 0xB004, + 0x9D0D, 0xAECC, + 0x9E0E, 0xAD96, + 0x9F13, 0xAC64, + 0xA01C, 0xAB35, + 0xA128, 0xAA0A, + 0xA238, 0xA8E2, + 0xA34B, 0xA7BD, + 0xA462, 0xA69B, + 0xA57D, 0xA57D, + 0xA69B, 0xA462, + 0xA7BD, 0xA34B, + 0xA8E2, 0xA238, + 0xAA0A, 0xA128, + 0xAB35, 0xA01C, + 0xAC64, 0x9F13, + 0xAD96, 0x9E0E, + 0xAECC, 0x9D0D, + 0xB004, 0x9C10, + 0xB140, 0x9B17, + 0xB27E, 0x9A22, + 0xB3C0, 0x9930, + 0xB504, 0x9842, + 0xB64B, 0x9759, + 0xB796, 0x9673, + 0xB8E3, 0x9592, + 0xBA32, 0x94B5, + 0xBB85, 0x93DB, + 0xBCDA, 0x9306, + 0xBE31, 0x9235, + 0xBF8C, 0x9169, + 0xC0E8, 0x90A0, + 0xC247, 0x8FDC, + 0xC3A9, 0x8F1D, + 0xC50D, 0x8E61, + 0xC673, 0x8DAA, + 0xC7DB, 0x8CF8, + 0xC945, 0x8C4A, + 0xCAB2, 0x8BA0, + 0xCC21, 0x8AFB, + 0xCD91, 0x8A5A, + 0xCF04, 0x89BE, + 0xD078, 0x8926, + 0xD1EE, 0x8893, + 0xD367, 0x8805, + 0xD4E0, 0x877B, + 0xD65C, 0x86F6, + 0xD7D9, 0x8675, + 0xD957, 0x85FA, + 0xDAD7, 0x8582, + 0xDC59, 0x8510, + 0xDDDC, 0x84A2, + 0xDF60, 0x843A, + 0xE0E6, 0x83D6, + 0xE26C, 0x8376, + 0xE3F4, 0x831C, + 0xE57D, 0x82C6, + 0xE707, 0x8275, + 0xE892, 0x8229, + 0xEA1D, 0x81E2, + 0xEBAA, 0x81A0, + 0xED37, 0x8162, + 0xEEC6, 0x812A, + 0xF054, 0x80F6, + 0xF1E4, 0x80C7, + 0xF374, 0x809D, + 0xF504, 0x8078, + 0xF695, 0x8058, + 0xF826, 0x803D, + 0xF9B8, 0x8027, + 0xFB49, 0x8016, + 0xFCDB, 0x8009, + 0xFE6D, 0x8002 +}; + +/** +* \par +* Example code for q15 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefq15[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefq15[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 1024 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to q15(Fixed point 1.15): +* round(twiddleCoefq15(i) * pow(2, 15)) +* +*/ +const q15_t twiddleCoef_1024_q15[1536] = { + 0x7FFF, 0x0000, + 0x7FFF, 0x00C9, + 0x7FFD, 0x0192, + 0x7FFA, 0x025B, + 0x7FF6, 0x0324, + 0x7FF0, 0x03ED, + 0x7FE9, 0x04B6, + 0x7FE1, 0x057F, + 0x7FD8, 0x0647, + 0x7FCE, 0x0710, + 0x7FC2, 0x07D9, + 0x7FB5, 0x08A2, + 0x7FA7, 0x096A, + 0x7F97, 0x0A33, + 0x7F87, 0x0AFB, + 0x7F75, 0x0BC3, + 0x7F62, 0x0C8B, + 0x7F4D, 0x0D53, + 0x7F38, 0x0E1B, + 0x7F21, 0x0EE3, + 0x7F09, 0x0FAB, + 0x7EF0, 0x1072, + 0x7ED5, 0x1139, + 0x7EBA, 0x1201, + 0x7E9D, 0x12C8, + 0x7E7F, 0x138E, + 0x7E5F, 0x1455, + 0x7E3F, 0x151B, + 0x7E1D, 0x15E2, + 0x7DFA, 0x16A8, + 0x7DD6, 0x176D, + 0x7DB0, 0x1833, + 0x7D8A, 0x18F8, + 0x7D62, 0x19BD, + 0x7D39, 0x1A82, + 0x7D0F, 0x1B47, + 0x7CE3, 0x1C0B, + 0x7CB7, 0x1CCF, + 0x7C89, 0x1D93, + 0x7C5A, 0x1E56, + 0x7C29, 0x1F19, + 0x7BF8, 0x1FDC, + 0x7BC5, 0x209F, + 0x7B92, 0x2161, + 0x7B5D, 0x2223, + 0x7B26, 0x22E5, + 0x7AEF, 0x23A6, + 0x7AB6, 0x2467, + 0x7A7D, 0x2528, + 0x7A42, 0x25E8, + 0x7A05, 0x26A8, + 0x79C8, 0x2767, + 0x798A, 0x2826, + 0x794A, 0x28E5, + 0x7909, 0x29A3, + 0x78C7, 0x2A61, + 0x7884, 0x2B1F, + 0x7840, 0x2BDC, + 0x77FA, 0x2C98, + 0x77B4, 0x2D55, + 0x776C, 0x2E11, + 0x7723, 0x2ECC, + 0x76D9, 0x2F87, + 0x768E, 0x3041, + 0x7641, 0x30FB, + 0x75F4, 0x31B5, + 0x75A5, 0x326E, + 0x7555, 0x3326, + 0x7504, 0x33DE, + 0x74B2, 0x3496, + 0x745F, 0x354D, + 0x740B, 0x3604, + 0x73B5, 0x36BA, + 0x735F, 0x376F, + 0x7307, 0x3824, + 0x72AF, 0x38D8, + 0x7255, 0x398C, + 0x71FA, 0x3A40, + 0x719E, 0x3AF2, + 0x7141, 0x3BA5, + 0x70E2, 0x3C56, + 0x7083, 0x3D07, + 0x7023, 0x3DB8, + 0x6FC1, 0x3E68, + 0x6F5F, 0x3F17, + 0x6EFB, 0x3FC5, + 0x6E96, 0x4073, + 0x6E30, 0x4121, + 0x6DCA, 0x41CE, + 0x6D62, 0x427A, + 0x6CF9, 0x4325, + 0x6C8F, 0x43D0, + 0x6C24, 0x447A, + 0x6BB8, 0x4524, + 0x6B4A, 0x45CD, + 0x6ADC, 0x4675, + 0x6A6D, 0x471C, + 0x69FD, 0x47C3, + 0x698C, 0x4869, + 0x6919, 0x490F, + 0x68A6, 0x49B4, + 0x6832, 0x4A58, + 0x67BD, 0x4AFB, + 0x6746, 0x4B9E, + 0x66CF, 0x4C3F, + 0x6657, 0x4CE1, + 0x65DD, 0x4D81, + 0x6563, 0x4E21, + 0x64E8, 0x4EBF, + 0x646C, 0x4F5E, + 0x63EF, 0x4FFB, + 0x6371, 0x5097, + 0x62F2, 0x5133, + 0x6271, 0x51CE, + 0x61F1, 0x5269, + 0x616F, 0x5302, + 0x60EC, 0x539B, + 0x6068, 0x5433, + 0x5FE3, 0x54CA, + 0x5F5E, 0x5560, + 0x5ED7, 0x55F5, + 0x5E50, 0x568A, + 0x5DC7, 0x571D, + 0x5D3E, 0x57B0, + 0x5CB4, 0x5842, + 0x5C29, 0x58D4, + 0x5B9D, 0x5964, + 0x5B10, 0x59F3, + 0x5A82, 0x5A82, + 0x59F3, 0x5B10, + 0x5964, 0x5B9D, + 0x58D4, 0x5C29, + 0x5842, 0x5CB4, + 0x57B0, 0x5D3E, + 0x571D, 0x5DC7, + 0x568A, 0x5E50, + 0x55F5, 0x5ED7, + 0x5560, 0x5F5E, + 0x54CA, 0x5FE3, + 0x5433, 0x6068, + 0x539B, 0x60EC, + 0x5302, 0x616F, + 0x5269, 0x61F1, + 0x51CE, 0x6271, + 0x5133, 0x62F2, + 0x5097, 0x6371, + 0x4FFB, 0x63EF, + 0x4F5E, 0x646C, + 0x4EBF, 0x64E8, + 0x4E21, 0x6563, + 0x4D81, 0x65DD, + 0x4CE1, 0x6657, + 0x4C3F, 0x66CF, + 0x4B9E, 0x6746, + 0x4AFB, 0x67BD, + 0x4A58, 0x6832, + 0x49B4, 0x68A6, + 0x490F, 0x6919, + 0x4869, 0x698C, + 0x47C3, 0x69FD, + 0x471C, 0x6A6D, + 0x4675, 0x6ADC, + 0x45CD, 0x6B4A, + 0x4524, 0x6BB8, + 0x447A, 0x6C24, + 0x43D0, 0x6C8F, + 0x4325, 0x6CF9, + 0x427A, 0x6D62, + 0x41CE, 0x6DCA, + 0x4121, 0x6E30, + 0x4073, 0x6E96, + 0x3FC5, 0x6EFB, + 0x3F17, 0x6F5F, + 0x3E68, 0x6FC1, + 0x3DB8, 0x7023, + 0x3D07, 0x7083, + 0x3C56, 0x70E2, + 0x3BA5, 0x7141, + 0x3AF2, 0x719E, + 0x3A40, 0x71FA, + 0x398C, 0x7255, + 0x38D8, 0x72AF, + 0x3824, 0x7307, + 0x376F, 0x735F, + 0x36BA, 0x73B5, + 0x3604, 0x740B, + 0x354D, 0x745F, + 0x3496, 0x74B2, + 0x33DE, 0x7504, + 0x3326, 0x7555, + 0x326E, 0x75A5, + 0x31B5, 0x75F4, + 0x30FB, 0x7641, + 0x3041, 0x768E, + 0x2F87, 0x76D9, + 0x2ECC, 0x7723, + 0x2E11, 0x776C, + 0x2D55, 0x77B4, + 0x2C98, 0x77FA, + 0x2BDC, 0x7840, + 0x2B1F, 0x7884, + 0x2A61, 0x78C7, + 0x29A3, 0x7909, + 0x28E5, 0x794A, + 0x2826, 0x798A, + 0x2767, 0x79C8, + 0x26A8, 0x7A05, + 0x25E8, 0x7A42, + 0x2528, 0x7A7D, + 0x2467, 0x7AB6, + 0x23A6, 0x7AEF, + 0x22E5, 0x7B26, + 0x2223, 0x7B5D, + 0x2161, 0x7B92, + 0x209F, 0x7BC5, + 0x1FDC, 0x7BF8, + 0x1F19, 0x7C29, + 0x1E56, 0x7C5A, + 0x1D93, 0x7C89, + 0x1CCF, 0x7CB7, + 0x1C0B, 0x7CE3, + 0x1B47, 0x7D0F, + 0x1A82, 0x7D39, + 0x19BD, 0x7D62, + 0x18F8, 0x7D8A, + 0x1833, 0x7DB0, + 0x176D, 0x7DD6, + 0x16A8, 0x7DFA, + 0x15E2, 0x7E1D, + 0x151B, 0x7E3F, + 0x1455, 0x7E5F, + 0x138E, 0x7E7F, + 0x12C8, 0x7E9D, + 0x1201, 0x7EBA, + 0x1139, 0x7ED5, + 0x1072, 0x7EF0, + 0x0FAB, 0x7F09, + 0x0EE3, 0x7F21, + 0x0E1B, 0x7F38, + 0x0D53, 0x7F4D, + 0x0C8B, 0x7F62, + 0x0BC3, 0x7F75, + 0x0AFB, 0x7F87, + 0x0A33, 0x7F97, + 0x096A, 0x7FA7, + 0x08A2, 0x7FB5, + 0x07D9, 0x7FC2, + 0x0710, 0x7FCE, + 0x0647, 0x7FD8, + 0x057F, 0x7FE1, + 0x04B6, 0x7FE9, + 0x03ED, 0x7FF0, + 0x0324, 0x7FF6, + 0x025B, 0x7FFA, + 0x0192, 0x7FFD, + 0x00C9, 0x7FFF, + 0x0000, 0x7FFF, + 0xFF36, 0x7FFF, + 0xFE6D, 0x7FFD, + 0xFDA4, 0x7FFA, + 0xFCDB, 0x7FF6, + 0xFC12, 0x7FF0, + 0xFB49, 0x7FE9, + 0xFA80, 0x7FE1, + 0xF9B8, 0x7FD8, + 0xF8EF, 0x7FCE, + 0xF826, 0x7FC2, + 0xF75D, 0x7FB5, + 0xF695, 0x7FA7, + 0xF5CC, 0x7F97, + 0xF504, 0x7F87, + 0xF43C, 0x7F75, + 0xF374, 0x7F62, + 0xF2AC, 0x7F4D, + 0xF1E4, 0x7F38, + 0xF11C, 0x7F21, + 0xF054, 0x7F09, + 0xEF8D, 0x7EF0, + 0xEEC6, 0x7ED5, + 0xEDFE, 0x7EBA, + 0xED37, 0x7E9D, + 0xEC71, 0x7E7F, + 0xEBAA, 0x7E5F, + 0xEAE4, 0x7E3F, + 0xEA1D, 0x7E1D, + 0xE957, 0x7DFA, + 0xE892, 0x7DD6, + 0xE7CC, 0x7DB0, + 0xE707, 0x7D8A, + 0xE642, 0x7D62, + 0xE57D, 0x7D39, + 0xE4B8, 0x7D0F, + 0xE3F4, 0x7CE3, + 0xE330, 0x7CB7, + 0xE26C, 0x7C89, + 0xE1A9, 0x7C5A, + 0xE0E6, 0x7C29, + 0xE023, 0x7BF8, + 0xDF60, 0x7BC5, + 0xDE9E, 0x7B92, + 0xDDDC, 0x7B5D, + 0xDD1A, 0x7B26, + 0xDC59, 0x7AEF, + 0xDB98, 0x7AB6, + 0xDAD7, 0x7A7D, + 0xDA17, 0x7A42, + 0xD957, 0x7A05, + 0xD898, 0x79C8, + 0xD7D9, 0x798A, + 0xD71A, 0x794A, + 0xD65C, 0x7909, + 0xD59E, 0x78C7, + 0xD4E0, 0x7884, + 0xD423, 0x7840, + 0xD367, 0x77FA, + 0xD2AA, 0x77B4, + 0xD1EE, 0x776C, + 0xD133, 0x7723, + 0xD078, 0x76D9, + 0xCFBE, 0x768E, + 0xCF04, 0x7641, + 0xCE4A, 0x75F4, + 0xCD91, 0x75A5, + 0xCCD9, 0x7555, + 0xCC21, 0x7504, + 0xCB69, 0x74B2, + 0xCAB2, 0x745F, + 0xC9FB, 0x740B, + 0xC945, 0x73B5, + 0xC890, 0x735F, + 0xC7DB, 0x7307, + 0xC727, 0x72AF, + 0xC673, 0x7255, + 0xC5BF, 0x71FA, + 0xC50D, 0x719E, + 0xC45A, 0x7141, + 0xC3A9, 0x70E2, + 0xC2F8, 0x7083, + 0xC247, 0x7023, + 0xC197, 0x6FC1, + 0xC0E8, 0x6F5F, + 0xC03A, 0x6EFB, + 0xBF8C, 0x6E96, + 0xBEDE, 0x6E30, + 0xBE31, 0x6DCA, + 0xBD85, 0x6D62, + 0xBCDA, 0x6CF9, + 0xBC2F, 0x6C8F, + 0xBB85, 0x6C24, + 0xBADB, 0x6BB8, + 0xBA32, 0x6B4A, + 0xB98A, 0x6ADC, + 0xB8E3, 0x6A6D, + 0xB83C, 0x69FD, + 0xB796, 0x698C, + 0xB6F0, 0x6919, + 0xB64B, 0x68A6, + 0xB5A7, 0x6832, + 0xB504, 0x67BD, + 0xB461, 0x6746, + 0xB3C0, 0x66CF, + 0xB31E, 0x6657, + 0xB27E, 0x65DD, + 0xB1DE, 0x6563, + 0xB140, 0x64E8, + 0xB0A1, 0x646C, + 0xB004, 0x63EF, + 0xAF68, 0x6371, + 0xAECC, 0x62F2, + 0xAE31, 0x6271, + 0xAD96, 0x61F1, + 0xACFD, 0x616F, + 0xAC64, 0x60EC, + 0xABCC, 0x6068, + 0xAB35, 0x5FE3, + 0xAA9F, 0x5F5E, + 0xAA0A, 0x5ED7, + 0xA975, 0x5E50, + 0xA8E2, 0x5DC7, + 0xA84F, 0x5D3E, + 0xA7BD, 0x5CB4, + 0xA72B, 0x5C29, + 0xA69B, 0x5B9D, + 0xA60C, 0x5B10, + 0xA57D, 0x5A82, + 0xA4EF, 0x59F3, + 0xA462, 0x5964, + 0xA3D6, 0x58D4, + 0xA34B, 0x5842, + 0xA2C1, 0x57B0, + 0xA238, 0x571D, + 0xA1AF, 0x568A, + 0xA128, 0x55F5, + 0xA0A1, 0x5560, + 0xA01C, 0x54CA, + 0x9F97, 0x5433, + 0x9F13, 0x539B, + 0x9E90, 0x5302, + 0x9E0E, 0x5269, + 0x9D8E, 0x51CE, + 0x9D0D, 0x5133, + 0x9C8E, 0x5097, + 0x9C10, 0x4FFB, + 0x9B93, 0x4F5E, + 0x9B17, 0x4EBF, + 0x9A9C, 0x4E21, + 0x9A22, 0x4D81, + 0x99A8, 0x4CE1, + 0x9930, 0x4C3F, + 0x98B9, 0x4B9E, + 0x9842, 0x4AFB, + 0x97CD, 0x4A58, + 0x9759, 0x49B4, + 0x96E6, 0x490F, + 0x9673, 0x4869, + 0x9602, 0x47C3, + 0x9592, 0x471C, + 0x9523, 0x4675, + 0x94B5, 0x45CD, + 0x9447, 0x4524, + 0x93DB, 0x447A, + 0x9370, 0x43D0, + 0x9306, 0x4325, + 0x929D, 0x427A, + 0x9235, 0x41CE, + 0x91CF, 0x4121, + 0x9169, 0x4073, + 0x9104, 0x3FC5, + 0x90A0, 0x3F17, + 0x903E, 0x3E68, + 0x8FDC, 0x3DB8, + 0x8F7C, 0x3D07, + 0x8F1D, 0x3C56, + 0x8EBE, 0x3BA5, + 0x8E61, 0x3AF2, + 0x8E05, 0x3A40, + 0x8DAA, 0x398C, + 0x8D50, 0x38D8, + 0x8CF8, 0x3824, + 0x8CA0, 0x376F, + 0x8C4A, 0x36BA, + 0x8BF4, 0x3604, + 0x8BA0, 0x354D, + 0x8B4D, 0x3496, + 0x8AFB, 0x33DE, + 0x8AAA, 0x3326, + 0x8A5A, 0x326E, + 0x8A0B, 0x31B5, + 0x89BE, 0x30FB, + 0x8971, 0x3041, + 0x8926, 0x2F87, + 0x88DC, 0x2ECC, + 0x8893, 0x2E11, + 0x884B, 0x2D55, + 0x8805, 0x2C98, + 0x87BF, 0x2BDC, + 0x877B, 0x2B1F, + 0x8738, 0x2A61, + 0x86F6, 0x29A3, + 0x86B5, 0x28E5, + 0x8675, 0x2826, + 0x8637, 0x2767, + 0x85FA, 0x26A8, + 0x85BD, 0x25E8, + 0x8582, 0x2528, + 0x8549, 0x2467, + 0x8510, 0x23A6, + 0x84D9, 0x22E5, + 0x84A2, 0x2223, + 0x846D, 0x2161, + 0x843A, 0x209F, + 0x8407, 0x1FDC, + 0x83D6, 0x1F19, + 0x83A5, 0x1E56, + 0x8376, 0x1D93, + 0x8348, 0x1CCF, + 0x831C, 0x1C0B, + 0x82F0, 0x1B47, + 0x82C6, 0x1A82, + 0x829D, 0x19BD, + 0x8275, 0x18F8, + 0x824F, 0x1833, + 0x8229, 0x176D, + 0x8205, 0x16A8, + 0x81E2, 0x15E2, + 0x81C0, 0x151B, + 0x81A0, 0x1455, + 0x8180, 0x138E, + 0x8162, 0x12C8, + 0x8145, 0x1201, + 0x812A, 0x1139, + 0x810F, 0x1072, + 0x80F6, 0x0FAB, + 0x80DE, 0x0EE3, + 0x80C7, 0x0E1B, + 0x80B2, 0x0D53, + 0x809D, 0x0C8B, + 0x808A, 0x0BC3, + 0x8078, 0x0AFB, + 0x8068, 0x0A33, + 0x8058, 0x096A, + 0x804A, 0x08A2, + 0x803D, 0x07D9, + 0x8031, 0x0710, + 0x8027, 0x0647, + 0x801E, 0x057F, + 0x8016, 0x04B6, + 0x800F, 0x03ED, + 0x8009, 0x0324, + 0x8005, 0x025B, + 0x8002, 0x0192, + 0x8000, 0x00C9, + 0x8000, 0x0000, + 0x8000, 0xFF36, + 0x8002, 0xFE6D, + 0x8005, 0xFDA4, + 0x8009, 0xFCDB, + 0x800F, 0xFC12, + 0x8016, 0xFB49, + 0x801E, 0xFA80, + 0x8027, 0xF9B8, + 0x8031, 0xF8EF, + 0x803D, 0xF826, + 0x804A, 0xF75D, + 0x8058, 0xF695, + 0x8068, 0xF5CC, + 0x8078, 0xF504, + 0x808A, 0xF43C, + 0x809D, 0xF374, + 0x80B2, 0xF2AC, + 0x80C7, 0xF1E4, + 0x80DE, 0xF11C, + 0x80F6, 0xF054, + 0x810F, 0xEF8D, + 0x812A, 0xEEC6, + 0x8145, 0xEDFE, + 0x8162, 0xED37, + 0x8180, 0xEC71, + 0x81A0, 0xEBAA, + 0x81C0, 0xEAE4, + 0x81E2, 0xEA1D, + 0x8205, 0xE957, + 0x8229, 0xE892, + 0x824F, 0xE7CC, + 0x8275, 0xE707, + 0x829D, 0xE642, + 0x82C6, 0xE57D, + 0x82F0, 0xE4B8, + 0x831C, 0xE3F4, + 0x8348, 0xE330, + 0x8376, 0xE26C, + 0x83A5, 0xE1A9, + 0x83D6, 0xE0E6, + 0x8407, 0xE023, + 0x843A, 0xDF60, + 0x846D, 0xDE9E, + 0x84A2, 0xDDDC, + 0x84D9, 0xDD1A, + 0x8510, 0xDC59, + 0x8549, 0xDB98, + 0x8582, 0xDAD7, + 0x85BD, 0xDA17, + 0x85FA, 0xD957, + 0x8637, 0xD898, + 0x8675, 0xD7D9, + 0x86B5, 0xD71A, + 0x86F6, 0xD65C, + 0x8738, 0xD59E, + 0x877B, 0xD4E0, + 0x87BF, 0xD423, + 0x8805, 0xD367, + 0x884B, 0xD2AA, + 0x8893, 0xD1EE, + 0x88DC, 0xD133, + 0x8926, 0xD078, + 0x8971, 0xCFBE, + 0x89BE, 0xCF04, + 0x8A0B, 0xCE4A, + 0x8A5A, 0xCD91, + 0x8AAA, 0xCCD9, + 0x8AFB, 0xCC21, + 0x8B4D, 0xCB69, + 0x8BA0, 0xCAB2, + 0x8BF4, 0xC9FB, + 0x8C4A, 0xC945, + 0x8CA0, 0xC890, + 0x8CF8, 0xC7DB, + 0x8D50, 0xC727, + 0x8DAA, 0xC673, + 0x8E05, 0xC5BF, + 0x8E61, 0xC50D, + 0x8EBE, 0xC45A, + 0x8F1D, 0xC3A9, + 0x8F7C, 0xC2F8, + 0x8FDC, 0xC247, + 0x903E, 0xC197, + 0x90A0, 0xC0E8, + 0x9104, 0xC03A, + 0x9169, 0xBF8C, + 0x91CF, 0xBEDE, + 0x9235, 0xBE31, + 0x929D, 0xBD85, + 0x9306, 0xBCDA, + 0x9370, 0xBC2F, + 0x93DB, 0xBB85, + 0x9447, 0xBADB, + 0x94B5, 0xBA32, + 0x9523, 0xB98A, + 0x9592, 0xB8E3, + 0x9602, 0xB83C, + 0x9673, 0xB796, + 0x96E6, 0xB6F0, + 0x9759, 0xB64B, + 0x97CD, 0xB5A7, + 0x9842, 0xB504, + 0x98B9, 0xB461, + 0x9930, 0xB3C0, + 0x99A8, 0xB31E, + 0x9A22, 0xB27E, + 0x9A9C, 0xB1DE, + 0x9B17, 0xB140, + 0x9B93, 0xB0A1, + 0x9C10, 0xB004, + 0x9C8E, 0xAF68, + 0x9D0D, 0xAECC, + 0x9D8E, 0xAE31, + 0x9E0E, 0xAD96, + 0x9E90, 0xACFD, + 0x9F13, 0xAC64, + 0x9F97, 0xABCC, + 0xA01C, 0xAB35, + 0xA0A1, 0xAA9F, + 0xA128, 0xAA0A, + 0xA1AF, 0xA975, + 0xA238, 0xA8E2, + 0xA2C1, 0xA84F, + 0xA34B, 0xA7BD, + 0xA3D6, 0xA72B, + 0xA462, 0xA69B, + 0xA4EF, 0xA60C, + 0xA57D, 0xA57D, + 0xA60C, 0xA4EF, + 0xA69B, 0xA462, + 0xA72B, 0xA3D6, + 0xA7BD, 0xA34B, + 0xA84F, 0xA2C1, + 0xA8E2, 0xA238, + 0xA975, 0xA1AF, + 0xAA0A, 0xA128, + 0xAA9F, 0xA0A1, + 0xAB35, 0xA01C, + 0xABCC, 0x9F97, + 0xAC64, 0x9F13, + 0xACFD, 0x9E90, + 0xAD96, 0x9E0E, + 0xAE31, 0x9D8E, + 0xAECC, 0x9D0D, + 0xAF68, 0x9C8E, + 0xB004, 0x9C10, + 0xB0A1, 0x9B93, + 0xB140, 0x9B17, + 0xB1DE, 0x9A9C, + 0xB27E, 0x9A22, + 0xB31E, 0x99A8, + 0xB3C0, 0x9930, + 0xB461, 0x98B9, + 0xB504, 0x9842, + 0xB5A7, 0x97CD, + 0xB64B, 0x9759, + 0xB6F0, 0x96E6, + 0xB796, 0x9673, + 0xB83C, 0x9602, + 0xB8E3, 0x9592, + 0xB98A, 0x9523, + 0xBA32, 0x94B5, + 0xBADB, 0x9447, + 0xBB85, 0x93DB, + 0xBC2F, 0x9370, + 0xBCDA, 0x9306, + 0xBD85, 0x929D, + 0xBE31, 0x9235, + 0xBEDE, 0x91CF, + 0xBF8C, 0x9169, + 0xC03A, 0x9104, + 0xC0E8, 0x90A0, + 0xC197, 0x903E, + 0xC247, 0x8FDC, + 0xC2F8, 0x8F7C, + 0xC3A9, 0x8F1D, + 0xC45A, 0x8EBE, + 0xC50D, 0x8E61, + 0xC5BF, 0x8E05, + 0xC673, 0x8DAA, + 0xC727, 0x8D50, + 0xC7DB, 0x8CF8, + 0xC890, 0x8CA0, + 0xC945, 0x8C4A, + 0xC9FB, 0x8BF4, + 0xCAB2, 0x8BA0, + 0xCB69, 0x8B4D, + 0xCC21, 0x8AFB, + 0xCCD9, 0x8AAA, + 0xCD91, 0x8A5A, + 0xCE4A, 0x8A0B, + 0xCF04, 0x89BE, + 0xCFBE, 0x8971, + 0xD078, 0x8926, + 0xD133, 0x88DC, + 0xD1EE, 0x8893, + 0xD2AA, 0x884B, + 0xD367, 0x8805, + 0xD423, 0x87BF, + 0xD4E0, 0x877B, + 0xD59E, 0x8738, + 0xD65C, 0x86F6, + 0xD71A, 0x86B5, + 0xD7D9, 0x8675, + 0xD898, 0x8637, + 0xD957, 0x85FA, + 0xDA17, 0x85BD, + 0xDAD7, 0x8582, + 0xDB98, 0x8549, + 0xDC59, 0x8510, + 0xDD1A, 0x84D9, + 0xDDDC, 0x84A2, + 0xDE9E, 0x846D, + 0xDF60, 0x843A, + 0xE023, 0x8407, + 0xE0E6, 0x83D6, + 0xE1A9, 0x83A5, + 0xE26C, 0x8376, + 0xE330, 0x8348, + 0xE3F4, 0x831C, + 0xE4B8, 0x82F0, + 0xE57D, 0x82C6, + 0xE642, 0x829D, + 0xE707, 0x8275, + 0xE7CC, 0x824F, + 0xE892, 0x8229, + 0xE957, 0x8205, + 0xEA1D, 0x81E2, + 0xEAE4, 0x81C0, + 0xEBAA, 0x81A0, + 0xEC71, 0x8180, + 0xED37, 0x8162, + 0xEDFE, 0x8145, + 0xEEC6, 0x812A, + 0xEF8D, 0x810F, + 0xF054, 0x80F6, + 0xF11C, 0x80DE, + 0xF1E4, 0x80C7, + 0xF2AC, 0x80B2, + 0xF374, 0x809D, + 0xF43C, 0x808A, + 0xF504, 0x8078, + 0xF5CC, 0x8068, + 0xF695, 0x8058, + 0xF75D, 0x804A, + 0xF826, 0x803D, + 0xF8EF, 0x8031, + 0xF9B8, 0x8027, + 0xFA80, 0x801E, + 0xFB49, 0x8016, + 0xFC12, 0x800F, + 0xFCDB, 0x8009, + 0xFDA4, 0x8005, + 0xFE6D, 0x8002, + 0xFF36, 0x8000 +}; + +/** +* \par +* Example code for q15 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefq15[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefq15[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 2048 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to q15(Fixed point 1.15): +* round(twiddleCoefq15(i) * pow(2, 15)) +* +*/ +const q15_t twiddleCoef_2048_q15[3072] = { + 0x7FFF, 0x0000, + 0x7FFF, 0x0064, + 0x7FFF, 0x00C9, + 0x7FFE, 0x012D, + 0x7FFD, 0x0192, + 0x7FFC, 0x01F6, + 0x7FFA, 0x025B, + 0x7FF8, 0x02BF, + 0x7FF6, 0x0324, + 0x7FF3, 0x0388, + 0x7FF0, 0x03ED, + 0x7FED, 0x0451, + 0x7FE9, 0x04B6, + 0x7FE5, 0x051A, + 0x7FE1, 0x057F, + 0x7FDD, 0x05E3, + 0x7FD8, 0x0647, + 0x7FD3, 0x06AC, + 0x7FCE, 0x0710, + 0x7FC8, 0x0775, + 0x7FC2, 0x07D9, + 0x7FBC, 0x083D, + 0x7FB5, 0x08A2, + 0x7FAE, 0x0906, + 0x7FA7, 0x096A, + 0x7F9F, 0x09CE, + 0x7F97, 0x0A33, + 0x7F8F, 0x0A97, + 0x7F87, 0x0AFB, + 0x7F7E, 0x0B5F, + 0x7F75, 0x0BC3, + 0x7F6B, 0x0C27, + 0x7F62, 0x0C8B, + 0x7F58, 0x0CEF, + 0x7F4D, 0x0D53, + 0x7F43, 0x0DB7, + 0x7F38, 0x0E1B, + 0x7F2D, 0x0E7F, + 0x7F21, 0x0EE3, + 0x7F15, 0x0F47, + 0x7F09, 0x0FAB, + 0x7EFD, 0x100E, + 0x7EF0, 0x1072, + 0x7EE3, 0x10D6, + 0x7ED5, 0x1139, + 0x7EC8, 0x119D, + 0x7EBA, 0x1201, + 0x7EAB, 0x1264, + 0x7E9D, 0x12C8, + 0x7E8E, 0x132B, + 0x7E7F, 0x138E, + 0x7E6F, 0x13F2, + 0x7E5F, 0x1455, + 0x7E4F, 0x14B8, + 0x7E3F, 0x151B, + 0x7E2E, 0x157F, + 0x7E1D, 0x15E2, + 0x7E0C, 0x1645, + 0x7DFA, 0x16A8, + 0x7DE8, 0x170A, + 0x7DD6, 0x176D, + 0x7DC3, 0x17D0, + 0x7DB0, 0x1833, + 0x7D9D, 0x1896, + 0x7D8A, 0x18F8, + 0x7D76, 0x195B, + 0x7D62, 0x19BD, + 0x7D4E, 0x1A20, + 0x7D39, 0x1A82, + 0x7D24, 0x1AE4, + 0x7D0F, 0x1B47, + 0x7CF9, 0x1BA9, + 0x7CE3, 0x1C0B, + 0x7CCD, 0x1C6D, + 0x7CB7, 0x1CCF, + 0x7CA0, 0x1D31, + 0x7C89, 0x1D93, + 0x7C71, 0x1DF5, + 0x7C5A, 0x1E56, + 0x7C42, 0x1EB8, + 0x7C29, 0x1F19, + 0x7C11, 0x1F7B, + 0x7BF8, 0x1FDC, + 0x7BDF, 0x203E, + 0x7BC5, 0x209F, + 0x7BAC, 0x2100, + 0x7B92, 0x2161, + 0x7B77, 0x21C2, + 0x7B5D, 0x2223, + 0x7B42, 0x2284, + 0x7B26, 0x22E5, + 0x7B0B, 0x2345, + 0x7AEF, 0x23A6, + 0x7AD3, 0x2407, + 0x7AB6, 0x2467, + 0x7A9A, 0x24C7, + 0x7A7D, 0x2528, + 0x7A5F, 0x2588, + 0x7A42, 0x25E8, + 0x7A24, 0x2648, + 0x7A05, 0x26A8, + 0x79E7, 0x2707, + 0x79C8, 0x2767, + 0x79A9, 0x27C7, + 0x798A, 0x2826, + 0x796A, 0x2886, + 0x794A, 0x28E5, + 0x792A, 0x2944, + 0x7909, 0x29A3, + 0x78E8, 0x2A02, + 0x78C7, 0x2A61, + 0x78A6, 0x2AC0, + 0x7884, 0x2B1F, + 0x7862, 0x2B7D, + 0x7840, 0x2BDC, + 0x781D, 0x2C3A, + 0x77FA, 0x2C98, + 0x77D7, 0x2CF7, + 0x77B4, 0x2D55, + 0x7790, 0x2DB3, + 0x776C, 0x2E11, + 0x7747, 0x2E6E, + 0x7723, 0x2ECC, + 0x76FE, 0x2F29, + 0x76D9, 0x2F87, + 0x76B3, 0x2FE4, + 0x768E, 0x3041, + 0x7668, 0x309E, + 0x7641, 0x30FB, + 0x761B, 0x3158, + 0x75F4, 0x31B5, + 0x75CC, 0x3211, + 0x75A5, 0x326E, + 0x757D, 0x32CA, + 0x7555, 0x3326, + 0x752D, 0x3382, + 0x7504, 0x33DE, + 0x74DB, 0x343A, + 0x74B2, 0x3496, + 0x7489, 0x34F2, + 0x745F, 0x354D, + 0x7435, 0x35A8, + 0x740B, 0x3604, + 0x73E0, 0x365F, + 0x73B5, 0x36BA, + 0x738A, 0x3714, + 0x735F, 0x376F, + 0x7333, 0x37CA, + 0x7307, 0x3824, + 0x72DB, 0x387E, + 0x72AF, 0x38D8, + 0x7282, 0x3932, + 0x7255, 0x398C, + 0x7227, 0x39E6, + 0x71FA, 0x3A40, + 0x71CC, 0x3A99, + 0x719E, 0x3AF2, + 0x716F, 0x3B4C, + 0x7141, 0x3BA5, + 0x7112, 0x3BFD, + 0x70E2, 0x3C56, + 0x70B3, 0x3CAF, + 0x7083, 0x3D07, + 0x7053, 0x3D60, + 0x7023, 0x3DB8, + 0x6FF2, 0x3E10, + 0x6FC1, 0x3E68, + 0x6F90, 0x3EBF, + 0x6F5F, 0x3F17, + 0x6F2D, 0x3F6E, + 0x6EFB, 0x3FC5, + 0x6EC9, 0x401D, + 0x6E96, 0x4073, + 0x6E63, 0x40CA, + 0x6E30, 0x4121, + 0x6DFD, 0x4177, + 0x6DCA, 0x41CE, + 0x6D96, 0x4224, + 0x6D62, 0x427A, + 0x6D2D, 0x42D0, + 0x6CF9, 0x4325, + 0x6CC4, 0x437B, + 0x6C8F, 0x43D0, + 0x6C59, 0x4425, + 0x6C24, 0x447A, + 0x6BEE, 0x44CF, + 0x6BB8, 0x4524, + 0x6B81, 0x4578, + 0x6B4A, 0x45CD, + 0x6B13, 0x4621, + 0x6ADC, 0x4675, + 0x6AA5, 0x46C9, + 0x6A6D, 0x471C, + 0x6A35, 0x4770, + 0x69FD, 0x47C3, + 0x69C4, 0x4816, + 0x698C, 0x4869, + 0x6953, 0x48BC, + 0x6919, 0x490F, + 0x68E0, 0x4961, + 0x68A6, 0x49B4, + 0x686C, 0x4A06, + 0x6832, 0x4A58, + 0x67F7, 0x4AA9, + 0x67BD, 0x4AFB, + 0x6782, 0x4B4C, + 0x6746, 0x4B9E, + 0x670B, 0x4BEF, + 0x66CF, 0x4C3F, + 0x6693, 0x4C90, + 0x6657, 0x4CE1, + 0x661A, 0x4D31, + 0x65DD, 0x4D81, + 0x65A0, 0x4DD1, + 0x6563, 0x4E21, + 0x6526, 0x4E70, + 0x64E8, 0x4EBF, + 0x64AA, 0x4F0F, + 0x646C, 0x4F5E, + 0x642D, 0x4FAC, + 0x63EF, 0x4FFB, + 0x63B0, 0x5049, + 0x6371, 0x5097, + 0x6331, 0x50E5, + 0x62F2, 0x5133, + 0x62B2, 0x5181, + 0x6271, 0x51CE, + 0x6231, 0x521C, + 0x61F1, 0x5269, + 0x61B0, 0x52B5, + 0x616F, 0x5302, + 0x612D, 0x534E, + 0x60EC, 0x539B, + 0x60AA, 0x53E7, + 0x6068, 0x5433, + 0x6026, 0x547E, + 0x5FE3, 0x54CA, + 0x5FA0, 0x5515, + 0x5F5E, 0x5560, + 0x5F1A, 0x55AB, + 0x5ED7, 0x55F5, + 0x5E93, 0x5640, + 0x5E50, 0x568A, + 0x5E0B, 0x56D4, + 0x5DC7, 0x571D, + 0x5D83, 0x5767, + 0x5D3E, 0x57B0, + 0x5CF9, 0x57F9, + 0x5CB4, 0x5842, + 0x5C6E, 0x588B, + 0x5C29, 0x58D4, + 0x5BE3, 0x591C, + 0x5B9D, 0x5964, + 0x5B56, 0x59AC, + 0x5B10, 0x59F3, + 0x5AC9, 0x5A3B, + 0x5A82, 0x5A82, + 0x5A3B, 0x5AC9, + 0x59F3, 0x5B10, + 0x59AC, 0x5B56, + 0x5964, 0x5B9D, + 0x591C, 0x5BE3, + 0x58D4, 0x5C29, + 0x588B, 0x5C6E, + 0x5842, 0x5CB4, + 0x57F9, 0x5CF9, + 0x57B0, 0x5D3E, + 0x5767, 0x5D83, + 0x571D, 0x5DC7, + 0x56D4, 0x5E0B, + 0x568A, 0x5E50, + 0x5640, 0x5E93, + 0x55F5, 0x5ED7, + 0x55AB, 0x5F1A, + 0x5560, 0x5F5E, + 0x5515, 0x5FA0, + 0x54CA, 0x5FE3, + 0x547E, 0x6026, + 0x5433, 0x6068, + 0x53E7, 0x60AA, + 0x539B, 0x60EC, + 0x534E, 0x612D, + 0x5302, 0x616F, + 0x52B5, 0x61B0, + 0x5269, 0x61F1, + 0x521C, 0x6231, + 0x51CE, 0x6271, + 0x5181, 0x62B2, + 0x5133, 0x62F2, + 0x50E5, 0x6331, + 0x5097, 0x6371, + 0x5049, 0x63B0, + 0x4FFB, 0x63EF, + 0x4FAC, 0x642D, + 0x4F5E, 0x646C, + 0x4F0F, 0x64AA, + 0x4EBF, 0x64E8, + 0x4E70, 0x6526, + 0x4E21, 0x6563, + 0x4DD1, 0x65A0, + 0x4D81, 0x65DD, + 0x4D31, 0x661A, + 0x4CE1, 0x6657, + 0x4C90, 0x6693, + 0x4C3F, 0x66CF, + 0x4BEF, 0x670B, + 0x4B9E, 0x6746, + 0x4B4C, 0x6782, + 0x4AFB, 0x67BD, + 0x4AA9, 0x67F7, + 0x4A58, 0x6832, + 0x4A06, 0x686C, + 0x49B4, 0x68A6, + 0x4961, 0x68E0, + 0x490F, 0x6919, + 0x48BC, 0x6953, + 0x4869, 0x698C, + 0x4816, 0x69C4, + 0x47C3, 0x69FD, + 0x4770, 0x6A35, + 0x471C, 0x6A6D, + 0x46C9, 0x6AA5, + 0x4675, 0x6ADC, + 0x4621, 0x6B13, + 0x45CD, 0x6B4A, + 0x4578, 0x6B81, + 0x4524, 0x6BB8, + 0x44CF, 0x6BEE, + 0x447A, 0x6C24, + 0x4425, 0x6C59, + 0x43D0, 0x6C8F, + 0x437B, 0x6CC4, + 0x4325, 0x6CF9, + 0x42D0, 0x6D2D, + 0x427A, 0x6D62, + 0x4224, 0x6D96, + 0x41CE, 0x6DCA, + 0x4177, 0x6DFD, + 0x4121, 0x6E30, + 0x40CA, 0x6E63, + 0x4073, 0x6E96, + 0x401D, 0x6EC9, + 0x3FC5, 0x6EFB, + 0x3F6E, 0x6F2D, + 0x3F17, 0x6F5F, + 0x3EBF, 0x6F90, + 0x3E68, 0x6FC1, + 0x3E10, 0x6FF2, + 0x3DB8, 0x7023, + 0x3D60, 0x7053, + 0x3D07, 0x7083, + 0x3CAF, 0x70B3, + 0x3C56, 0x70E2, + 0x3BFD, 0x7112, + 0x3BA5, 0x7141, + 0x3B4C, 0x716F, + 0x3AF2, 0x719E, + 0x3A99, 0x71CC, + 0x3A40, 0x71FA, + 0x39E6, 0x7227, + 0x398C, 0x7255, + 0x3932, 0x7282, + 0x38D8, 0x72AF, + 0x387E, 0x72DB, + 0x3824, 0x7307, + 0x37CA, 0x7333, + 0x376F, 0x735F, + 0x3714, 0x738A, + 0x36BA, 0x73B5, + 0x365F, 0x73E0, + 0x3604, 0x740B, + 0x35A8, 0x7435, + 0x354D, 0x745F, + 0x34F2, 0x7489, + 0x3496, 0x74B2, + 0x343A, 0x74DB, + 0x33DE, 0x7504, + 0x3382, 0x752D, + 0x3326, 0x7555, + 0x32CA, 0x757D, + 0x326E, 0x75A5, + 0x3211, 0x75CC, + 0x31B5, 0x75F4, + 0x3158, 0x761B, + 0x30FB, 0x7641, + 0x309E, 0x7668, + 0x3041, 0x768E, + 0x2FE4, 0x76B3, + 0x2F87, 0x76D9, + 0x2F29, 0x76FE, + 0x2ECC, 0x7723, + 0x2E6E, 0x7747, + 0x2E11, 0x776C, + 0x2DB3, 0x7790, + 0x2D55, 0x77B4, + 0x2CF7, 0x77D7, + 0x2C98, 0x77FA, + 0x2C3A, 0x781D, + 0x2BDC, 0x7840, + 0x2B7D, 0x7862, + 0x2B1F, 0x7884, + 0x2AC0, 0x78A6, + 0x2A61, 0x78C7, + 0x2A02, 0x78E8, + 0x29A3, 0x7909, + 0x2944, 0x792A, + 0x28E5, 0x794A, + 0x2886, 0x796A, + 0x2826, 0x798A, + 0x27C7, 0x79A9, + 0x2767, 0x79C8, + 0x2707, 0x79E7, + 0x26A8, 0x7A05, + 0x2648, 0x7A24, + 0x25E8, 0x7A42, + 0x2588, 0x7A5F, + 0x2528, 0x7A7D, + 0x24C7, 0x7A9A, + 0x2467, 0x7AB6, + 0x2407, 0x7AD3, + 0x23A6, 0x7AEF, + 0x2345, 0x7B0B, + 0x22E5, 0x7B26, + 0x2284, 0x7B42, + 0x2223, 0x7B5D, + 0x21C2, 0x7B77, + 0x2161, 0x7B92, + 0x2100, 0x7BAC, + 0x209F, 0x7BC5, + 0x203E, 0x7BDF, + 0x1FDC, 0x7BF8, + 0x1F7B, 0x7C11, + 0x1F19, 0x7C29, + 0x1EB8, 0x7C42, + 0x1E56, 0x7C5A, + 0x1DF5, 0x7C71, + 0x1D93, 0x7C89, + 0x1D31, 0x7CA0, + 0x1CCF, 0x7CB7, + 0x1C6D, 0x7CCD, + 0x1C0B, 0x7CE3, + 0x1BA9, 0x7CF9, + 0x1B47, 0x7D0F, + 0x1AE4, 0x7D24, + 0x1A82, 0x7D39, + 0x1A20, 0x7D4E, + 0x19BD, 0x7D62, + 0x195B, 0x7D76, + 0x18F8, 0x7D8A, + 0x1896, 0x7D9D, + 0x1833, 0x7DB0, + 0x17D0, 0x7DC3, + 0x176D, 0x7DD6, + 0x170A, 0x7DE8, + 0x16A8, 0x7DFA, + 0x1645, 0x7E0C, + 0x15E2, 0x7E1D, + 0x157F, 0x7E2E, + 0x151B, 0x7E3F, + 0x14B8, 0x7E4F, + 0x1455, 0x7E5F, + 0x13F2, 0x7E6F, + 0x138E, 0x7E7F, + 0x132B, 0x7E8E, + 0x12C8, 0x7E9D, + 0x1264, 0x7EAB, + 0x1201, 0x7EBA, + 0x119D, 0x7EC8, + 0x1139, 0x7ED5, + 0x10D6, 0x7EE3, + 0x1072, 0x7EF0, + 0x100E, 0x7EFD, + 0x0FAB, 0x7F09, + 0x0F47, 0x7F15, + 0x0EE3, 0x7F21, + 0x0E7F, 0x7F2D, + 0x0E1B, 0x7F38, + 0x0DB7, 0x7F43, + 0x0D53, 0x7F4D, + 0x0CEF, 0x7F58, + 0x0C8B, 0x7F62, + 0x0C27, 0x7F6B, + 0x0BC3, 0x7F75, + 0x0B5F, 0x7F7E, + 0x0AFB, 0x7F87, + 0x0A97, 0x7F8F, + 0x0A33, 0x7F97, + 0x09CE, 0x7F9F, + 0x096A, 0x7FA7, + 0x0906, 0x7FAE, + 0x08A2, 0x7FB5, + 0x083D, 0x7FBC, + 0x07D9, 0x7FC2, + 0x0775, 0x7FC8, + 0x0710, 0x7FCE, + 0x06AC, 0x7FD3, + 0x0647, 0x7FD8, + 0x05E3, 0x7FDD, + 0x057F, 0x7FE1, + 0x051A, 0x7FE5, + 0x04B6, 0x7FE9, + 0x0451, 0x7FED, + 0x03ED, 0x7FF0, + 0x0388, 0x7FF3, + 0x0324, 0x7FF6, + 0x02BF, 0x7FF8, + 0x025B, 0x7FFA, + 0x01F6, 0x7FFC, + 0x0192, 0x7FFD, + 0x012D, 0x7FFE, + 0x00C9, 0x7FFF, + 0x0064, 0x7FFF, + 0x0000, 0x7FFF, + 0xFF9B, 0x7FFF, + 0xFF36, 0x7FFF, + 0xFED2, 0x7FFE, + 0xFE6D, 0x7FFD, + 0xFE09, 0x7FFC, + 0xFDA4, 0x7FFA, + 0xFD40, 0x7FF8, + 0xFCDB, 0x7FF6, + 0xFC77, 0x7FF3, + 0xFC12, 0x7FF0, + 0xFBAE, 0x7FED, + 0xFB49, 0x7FE9, + 0xFAE5, 0x7FE5, + 0xFA80, 0x7FE1, + 0xFA1C, 0x7FDD, + 0xF9B8, 0x7FD8, + 0xF953, 0x7FD3, + 0xF8EF, 0x7FCE, + 0xF88A, 0x7FC8, + 0xF826, 0x7FC2, + 0xF7C2, 0x7FBC, + 0xF75D, 0x7FB5, + 0xF6F9, 0x7FAE, + 0xF695, 0x7FA7, + 0xF631, 0x7F9F, + 0xF5CC, 0x7F97, + 0xF568, 0x7F8F, + 0xF504, 0x7F87, + 0xF4A0, 0x7F7E, + 0xF43C, 0x7F75, + 0xF3D8, 0x7F6B, + 0xF374, 0x7F62, + 0xF310, 0x7F58, + 0xF2AC, 0x7F4D, + 0xF248, 0x7F43, + 0xF1E4, 0x7F38, + 0xF180, 0x7F2D, + 0xF11C, 0x7F21, + 0xF0B8, 0x7F15, + 0xF054, 0x7F09, + 0xEFF1, 0x7EFD, + 0xEF8D, 0x7EF0, + 0xEF29, 0x7EE3, + 0xEEC6, 0x7ED5, + 0xEE62, 0x7EC8, + 0xEDFE, 0x7EBA, + 0xED9B, 0x7EAB, + 0xED37, 0x7E9D, + 0xECD4, 0x7E8E, + 0xEC71, 0x7E7F, + 0xEC0D, 0x7E6F, + 0xEBAA, 0x7E5F, + 0xEB47, 0x7E4F, + 0xEAE4, 0x7E3F, + 0xEA80, 0x7E2E, + 0xEA1D, 0x7E1D, + 0xE9BA, 0x7E0C, + 0xE957, 0x7DFA, + 0xE8F5, 0x7DE8, + 0xE892, 0x7DD6, + 0xE82F, 0x7DC3, + 0xE7CC, 0x7DB0, + 0xE769, 0x7D9D, + 0xE707, 0x7D8A, + 0xE6A4, 0x7D76, + 0xE642, 0x7D62, + 0xE5DF, 0x7D4E, + 0xE57D, 0x7D39, + 0xE51B, 0x7D24, + 0xE4B8, 0x7D0F, + 0xE456, 0x7CF9, + 0xE3F4, 0x7CE3, + 0xE392, 0x7CCD, + 0xE330, 0x7CB7, + 0xE2CE, 0x7CA0, + 0xE26C, 0x7C89, + 0xE20A, 0x7C71, + 0xE1A9, 0x7C5A, + 0xE147, 0x7C42, + 0xE0E6, 0x7C29, + 0xE084, 0x7C11, + 0xE023, 0x7BF8, + 0xDFC1, 0x7BDF, + 0xDF60, 0x7BC5, + 0xDEFF, 0x7BAC, + 0xDE9E, 0x7B92, + 0xDE3D, 0x7B77, + 0xDDDC, 0x7B5D, + 0xDD7B, 0x7B42, + 0xDD1A, 0x7B26, + 0xDCBA, 0x7B0B, + 0xDC59, 0x7AEF, + 0xDBF8, 0x7AD3, + 0xDB98, 0x7AB6, + 0xDB38, 0x7A9A, + 0xDAD7, 0x7A7D, + 0xDA77, 0x7A5F, + 0xDA17, 0x7A42, + 0xD9B7, 0x7A24, + 0xD957, 0x7A05, + 0xD8F8, 0x79E7, + 0xD898, 0x79C8, + 0xD838, 0x79A9, + 0xD7D9, 0x798A, + 0xD779, 0x796A, + 0xD71A, 0x794A, + 0xD6BB, 0x792A, + 0xD65C, 0x7909, + 0xD5FD, 0x78E8, + 0xD59E, 0x78C7, + 0xD53F, 0x78A6, + 0xD4E0, 0x7884, + 0xD482, 0x7862, + 0xD423, 0x7840, + 0xD3C5, 0x781D, + 0xD367, 0x77FA, + 0xD308, 0x77D7, + 0xD2AA, 0x77B4, + 0xD24C, 0x7790, + 0xD1EE, 0x776C, + 0xD191, 0x7747, + 0xD133, 0x7723, + 0xD0D6, 0x76FE, + 0xD078, 0x76D9, + 0xD01B, 0x76B3, + 0xCFBE, 0x768E, + 0xCF61, 0x7668, + 0xCF04, 0x7641, + 0xCEA7, 0x761B, + 0xCE4A, 0x75F4, + 0xCDEE, 0x75CC, + 0xCD91, 0x75A5, + 0xCD35, 0x757D, + 0xCCD9, 0x7555, + 0xCC7D, 0x752D, + 0xCC21, 0x7504, + 0xCBC5, 0x74DB, + 0xCB69, 0x74B2, + 0xCB0D, 0x7489, + 0xCAB2, 0x745F, + 0xCA57, 0x7435, + 0xC9FB, 0x740B, + 0xC9A0, 0x73E0, + 0xC945, 0x73B5, + 0xC8EB, 0x738A, + 0xC890, 0x735F, + 0xC835, 0x7333, + 0xC7DB, 0x7307, + 0xC781, 0x72DB, + 0xC727, 0x72AF, + 0xC6CD, 0x7282, + 0xC673, 0x7255, + 0xC619, 0x7227, + 0xC5BF, 0x71FA, + 0xC566, 0x71CC, + 0xC50D, 0x719E, + 0xC4B3, 0x716F, + 0xC45A, 0x7141, + 0xC402, 0x7112, + 0xC3A9, 0x70E2, + 0xC350, 0x70B3, + 0xC2F8, 0x7083, + 0xC29F, 0x7053, + 0xC247, 0x7023, + 0xC1EF, 0x6FF2, + 0xC197, 0x6FC1, + 0xC140, 0x6F90, + 0xC0E8, 0x6F5F, + 0xC091, 0x6F2D, + 0xC03A, 0x6EFB, + 0xBFE2, 0x6EC9, + 0xBF8C, 0x6E96, + 0xBF35, 0x6E63, + 0xBEDE, 0x6E30, + 0xBE88, 0x6DFD, + 0xBE31, 0x6DCA, + 0xBDDB, 0x6D96, + 0xBD85, 0x6D62, + 0xBD2F, 0x6D2D, + 0xBCDA, 0x6CF9, + 0xBC84, 0x6CC4, + 0xBC2F, 0x6C8F, + 0xBBDA, 0x6C59, + 0xBB85, 0x6C24, + 0xBB30, 0x6BEE, + 0xBADB, 0x6BB8, + 0xBA87, 0x6B81, + 0xBA32, 0x6B4A, + 0xB9DE, 0x6B13, + 0xB98A, 0x6ADC, + 0xB936, 0x6AA5, + 0xB8E3, 0x6A6D, + 0xB88F, 0x6A35, + 0xB83C, 0x69FD, + 0xB7E9, 0x69C4, + 0xB796, 0x698C, + 0xB743, 0x6953, + 0xB6F0, 0x6919, + 0xB69E, 0x68E0, + 0xB64B, 0x68A6, + 0xB5F9, 0x686C, + 0xB5A7, 0x6832, + 0xB556, 0x67F7, + 0xB504, 0x67BD, + 0xB4B3, 0x6782, + 0xB461, 0x6746, + 0xB410, 0x670B, + 0xB3C0, 0x66CF, + 0xB36F, 0x6693, + 0xB31E, 0x6657, + 0xB2CE, 0x661A, + 0xB27E, 0x65DD, + 0xB22E, 0x65A0, + 0xB1DE, 0x6563, + 0xB18F, 0x6526, + 0xB140, 0x64E8, + 0xB0F0, 0x64AA, + 0xB0A1, 0x646C, + 0xB053, 0x642D, + 0xB004, 0x63EF, + 0xAFB6, 0x63B0, + 0xAF68, 0x6371, + 0xAF1A, 0x6331, + 0xAECC, 0x62F2, + 0xAE7E, 0x62B2, + 0xAE31, 0x6271, + 0xADE3, 0x6231, + 0xAD96, 0x61F1, + 0xAD4A, 0x61B0, + 0xACFD, 0x616F, + 0xACB1, 0x612D, + 0xAC64, 0x60EC, + 0xAC18, 0x60AA, + 0xABCC, 0x6068, + 0xAB81, 0x6026, + 0xAB35, 0x5FE3, + 0xAAEA, 0x5FA0, + 0xAA9F, 0x5F5E, + 0xAA54, 0x5F1A, + 0xAA0A, 0x5ED7, + 0xA9BF, 0x5E93, + 0xA975, 0x5E50, + 0xA92B, 0x5E0B, + 0xA8E2, 0x5DC7, + 0xA898, 0x5D83, + 0xA84F, 0x5D3E, + 0xA806, 0x5CF9, + 0xA7BD, 0x5CB4, + 0xA774, 0x5C6E, + 0xA72B, 0x5C29, + 0xA6E3, 0x5BE3, + 0xA69B, 0x5B9D, + 0xA653, 0x5B56, + 0xA60C, 0x5B10, + 0xA5C4, 0x5AC9, + 0xA57D, 0x5A82, + 0xA536, 0x5A3B, + 0xA4EF, 0x59F3, + 0xA4A9, 0x59AC, + 0xA462, 0x5964, + 0xA41C, 0x591C, + 0xA3D6, 0x58D4, + 0xA391, 0x588B, + 0xA34B, 0x5842, + 0xA306, 0x57F9, + 0xA2C1, 0x57B0, + 0xA27C, 0x5767, + 0xA238, 0x571D, + 0xA1F4, 0x56D4, + 0xA1AF, 0x568A, + 0xA16C, 0x5640, + 0xA128, 0x55F5, + 0xA0E5, 0x55AB, + 0xA0A1, 0x5560, + 0xA05F, 0x5515, + 0xA01C, 0x54CA, + 0x9FD9, 0x547E, + 0x9F97, 0x5433, + 0x9F55, 0x53E7, + 0x9F13, 0x539B, + 0x9ED2, 0x534E, + 0x9E90, 0x5302, + 0x9E4F, 0x52B5, + 0x9E0E, 0x5269, + 0x9DCE, 0x521C, + 0x9D8E, 0x51CE, + 0x9D4D, 0x5181, + 0x9D0D, 0x5133, + 0x9CCE, 0x50E5, + 0x9C8E, 0x5097, + 0x9C4F, 0x5049, + 0x9C10, 0x4FFB, + 0x9BD2, 0x4FAC, + 0x9B93, 0x4F5E, + 0x9B55, 0x4F0F, + 0x9B17, 0x4EBF, + 0x9AD9, 0x4E70, + 0x9A9C, 0x4E21, + 0x9A5F, 0x4DD1, + 0x9A22, 0x4D81, + 0x99E5, 0x4D31, + 0x99A8, 0x4CE1, + 0x996C, 0x4C90, + 0x9930, 0x4C3F, + 0x98F4, 0x4BEF, + 0x98B9, 0x4B9E, + 0x987D, 0x4B4C, + 0x9842, 0x4AFB, + 0x9808, 0x4AA9, + 0x97CD, 0x4A58, + 0x9793, 0x4A06, + 0x9759, 0x49B4, + 0x971F, 0x4961, + 0x96E6, 0x490F, + 0x96AC, 0x48BC, + 0x9673, 0x4869, + 0x963B, 0x4816, + 0x9602, 0x47C3, + 0x95CA, 0x4770, + 0x9592, 0x471C, + 0x955A, 0x46C9, + 0x9523, 0x4675, + 0x94EC, 0x4621, + 0x94B5, 0x45CD, + 0x947E, 0x4578, + 0x9447, 0x4524, + 0x9411, 0x44CF, + 0x93DB, 0x447A, + 0x93A6, 0x4425, + 0x9370, 0x43D0, + 0x933B, 0x437B, + 0x9306, 0x4325, + 0x92D2, 0x42D0, + 0x929D, 0x427A, + 0x9269, 0x4224, + 0x9235, 0x41CE, + 0x9202, 0x4177, + 0x91CF, 0x4121, + 0x919C, 0x40CA, + 0x9169, 0x4073, + 0x9136, 0x401D, + 0x9104, 0x3FC5, + 0x90D2, 0x3F6E, + 0x90A0, 0x3F17, + 0x906F, 0x3EBF, + 0x903E, 0x3E68, + 0x900D, 0x3E10, + 0x8FDC, 0x3DB8, + 0x8FAC, 0x3D60, + 0x8F7C, 0x3D07, + 0x8F4C, 0x3CAF, + 0x8F1D, 0x3C56, + 0x8EED, 0x3BFD, + 0x8EBE, 0x3BA5, + 0x8E90, 0x3B4C, + 0x8E61, 0x3AF2, + 0x8E33, 0x3A99, + 0x8E05, 0x3A40, + 0x8DD8, 0x39E6, + 0x8DAA, 0x398C, + 0x8D7D, 0x3932, + 0x8D50, 0x38D8, + 0x8D24, 0x387E, + 0x8CF8, 0x3824, + 0x8CCC, 0x37CA, + 0x8CA0, 0x376F, + 0x8C75, 0x3714, + 0x8C4A, 0x36BA, + 0x8C1F, 0x365F, + 0x8BF4, 0x3604, + 0x8BCA, 0x35A8, + 0x8BA0, 0x354D, + 0x8B76, 0x34F2, + 0x8B4D, 0x3496, + 0x8B24, 0x343A, + 0x8AFB, 0x33DE, + 0x8AD2, 0x3382, + 0x8AAA, 0x3326, + 0x8A82, 0x32CA, + 0x8A5A, 0x326E, + 0x8A33, 0x3211, + 0x8A0B, 0x31B5, + 0x89E4, 0x3158, + 0x89BE, 0x30FB, + 0x8997, 0x309E, + 0x8971, 0x3041, + 0x894C, 0x2FE4, + 0x8926, 0x2F87, + 0x8901, 0x2F29, + 0x88DC, 0x2ECC, + 0x88B8, 0x2E6E, + 0x8893, 0x2E11, + 0x886F, 0x2DB3, + 0x884B, 0x2D55, + 0x8828, 0x2CF7, + 0x8805, 0x2C98, + 0x87E2, 0x2C3A, + 0x87BF, 0x2BDC, + 0x879D, 0x2B7D, + 0x877B, 0x2B1F, + 0x8759, 0x2AC0, + 0x8738, 0x2A61, + 0x8717, 0x2A02, + 0x86F6, 0x29A3, + 0x86D5, 0x2944, + 0x86B5, 0x28E5, + 0x8695, 0x2886, + 0x8675, 0x2826, + 0x8656, 0x27C7, + 0x8637, 0x2767, + 0x8618, 0x2707, + 0x85FA, 0x26A8, + 0x85DB, 0x2648, + 0x85BD, 0x25E8, + 0x85A0, 0x2588, + 0x8582, 0x2528, + 0x8565, 0x24C7, + 0x8549, 0x2467, + 0x852C, 0x2407, + 0x8510, 0x23A6, + 0x84F4, 0x2345, + 0x84D9, 0x22E5, + 0x84BD, 0x2284, + 0x84A2, 0x2223, + 0x8488, 0x21C2, + 0x846D, 0x2161, + 0x8453, 0x2100, + 0x843A, 0x209F, + 0x8420, 0x203E, + 0x8407, 0x1FDC, + 0x83EE, 0x1F7B, + 0x83D6, 0x1F19, + 0x83BD, 0x1EB8, + 0x83A5, 0x1E56, + 0x838E, 0x1DF5, + 0x8376, 0x1D93, + 0x835F, 0x1D31, + 0x8348, 0x1CCF, + 0x8332, 0x1C6D, + 0x831C, 0x1C0B, + 0x8306, 0x1BA9, + 0x82F0, 0x1B47, + 0x82DB, 0x1AE4, + 0x82C6, 0x1A82, + 0x82B1, 0x1A20, + 0x829D, 0x19BD, + 0x8289, 0x195B, + 0x8275, 0x18F8, + 0x8262, 0x1896, + 0x824F, 0x1833, + 0x823C, 0x17D0, + 0x8229, 0x176D, + 0x8217, 0x170A, + 0x8205, 0x16A8, + 0x81F3, 0x1645, + 0x81E2, 0x15E2, + 0x81D1, 0x157F, + 0x81C0, 0x151B, + 0x81B0, 0x14B8, + 0x81A0, 0x1455, + 0x8190, 0x13F2, + 0x8180, 0x138E, + 0x8171, 0x132B, + 0x8162, 0x12C8, + 0x8154, 0x1264, + 0x8145, 0x1201, + 0x8137, 0x119D, + 0x812A, 0x1139, + 0x811C, 0x10D6, + 0x810F, 0x1072, + 0x8102, 0x100E, + 0x80F6, 0x0FAB, + 0x80EA, 0x0F47, + 0x80DE, 0x0EE3, + 0x80D2, 0x0E7F, + 0x80C7, 0x0E1B, + 0x80BC, 0x0DB7, + 0x80B2, 0x0D53, + 0x80A7, 0x0CEF, + 0x809D, 0x0C8B, + 0x8094, 0x0C27, + 0x808A, 0x0BC3, + 0x8081, 0x0B5F, + 0x8078, 0x0AFB, + 0x8070, 0x0A97, + 0x8068, 0x0A33, + 0x8060, 0x09CE, + 0x8058, 0x096A, + 0x8051, 0x0906, + 0x804A, 0x08A2, + 0x8043, 0x083D, + 0x803D, 0x07D9, + 0x8037, 0x0775, + 0x8031, 0x0710, + 0x802C, 0x06AC, + 0x8027, 0x0647, + 0x8022, 0x05E3, + 0x801E, 0x057F, + 0x801A, 0x051A, + 0x8016, 0x04B6, + 0x8012, 0x0451, + 0x800F, 0x03ED, + 0x800C, 0x0388, + 0x8009, 0x0324, + 0x8007, 0x02BF, + 0x8005, 0x025B, + 0x8003, 0x01F6, + 0x8002, 0x0192, + 0x8001, 0x012D, + 0x8000, 0x00C9, + 0x8000, 0x0064, + 0x8000, 0x0000, + 0x8000, 0xFF9B, + 0x8000, 0xFF36, + 0x8001, 0xFED2, + 0x8002, 0xFE6D, + 0x8003, 0xFE09, + 0x8005, 0xFDA4, + 0x8007, 0xFD40, + 0x8009, 0xFCDB, + 0x800C, 0xFC77, + 0x800F, 0xFC12, + 0x8012, 0xFBAE, + 0x8016, 0xFB49, + 0x801A, 0xFAE5, + 0x801E, 0xFA80, + 0x8022, 0xFA1C, + 0x8027, 0xF9B8, + 0x802C, 0xF953, + 0x8031, 0xF8EF, + 0x8037, 0xF88A, + 0x803D, 0xF826, + 0x8043, 0xF7C2, + 0x804A, 0xF75D, + 0x8051, 0xF6F9, + 0x8058, 0xF695, + 0x8060, 0xF631, + 0x8068, 0xF5CC, + 0x8070, 0xF568, + 0x8078, 0xF504, + 0x8081, 0xF4A0, + 0x808A, 0xF43C, + 0x8094, 0xF3D8, + 0x809D, 0xF374, + 0x80A7, 0xF310, + 0x80B2, 0xF2AC, + 0x80BC, 0xF248, + 0x80C7, 0xF1E4, + 0x80D2, 0xF180, + 0x80DE, 0xF11C, + 0x80EA, 0xF0B8, + 0x80F6, 0xF054, + 0x8102, 0xEFF1, + 0x810F, 0xEF8D, + 0x811C, 0xEF29, + 0x812A, 0xEEC6, + 0x8137, 0xEE62, + 0x8145, 0xEDFE, + 0x8154, 0xED9B, + 0x8162, 0xED37, + 0x8171, 0xECD4, + 0x8180, 0xEC71, + 0x8190, 0xEC0D, + 0x81A0, 0xEBAA, + 0x81B0, 0xEB47, + 0x81C0, 0xEAE4, + 0x81D1, 0xEA80, + 0x81E2, 0xEA1D, + 0x81F3, 0xE9BA, + 0x8205, 0xE957, + 0x8217, 0xE8F5, + 0x8229, 0xE892, + 0x823C, 0xE82F, + 0x824F, 0xE7CC, + 0x8262, 0xE769, + 0x8275, 0xE707, + 0x8289, 0xE6A4, + 0x829D, 0xE642, + 0x82B1, 0xE5DF, + 0x82C6, 0xE57D, + 0x82DB, 0xE51B, + 0x82F0, 0xE4B8, + 0x8306, 0xE456, + 0x831C, 0xE3F4, + 0x8332, 0xE392, + 0x8348, 0xE330, + 0x835F, 0xE2CE, + 0x8376, 0xE26C, + 0x838E, 0xE20A, + 0x83A5, 0xE1A9, + 0x83BD, 0xE147, + 0x83D6, 0xE0E6, + 0x83EE, 0xE084, + 0x8407, 0xE023, + 0x8420, 0xDFC1, + 0x843A, 0xDF60, + 0x8453, 0xDEFF, + 0x846D, 0xDE9E, + 0x8488, 0xDE3D, + 0x84A2, 0xDDDC, + 0x84BD, 0xDD7B, + 0x84D9, 0xDD1A, + 0x84F4, 0xDCBA, + 0x8510, 0xDC59, + 0x852C, 0xDBF8, + 0x8549, 0xDB98, + 0x8565, 0xDB38, + 0x8582, 0xDAD7, + 0x85A0, 0xDA77, + 0x85BD, 0xDA17, + 0x85DB, 0xD9B7, + 0x85FA, 0xD957, + 0x8618, 0xD8F8, + 0x8637, 0xD898, + 0x8656, 0xD838, + 0x8675, 0xD7D9, + 0x8695, 0xD779, + 0x86B5, 0xD71A, + 0x86D5, 0xD6BB, + 0x86F6, 0xD65C, + 0x8717, 0xD5FD, + 0x8738, 0xD59E, + 0x8759, 0xD53F, + 0x877B, 0xD4E0, + 0x879D, 0xD482, + 0x87BF, 0xD423, + 0x87E2, 0xD3C5, + 0x8805, 0xD367, + 0x8828, 0xD308, + 0x884B, 0xD2AA, + 0x886F, 0xD24C, + 0x8893, 0xD1EE, + 0x88B8, 0xD191, + 0x88DC, 0xD133, + 0x8901, 0xD0D6, + 0x8926, 0xD078, + 0x894C, 0xD01B, + 0x8971, 0xCFBE, + 0x8997, 0xCF61, + 0x89BE, 0xCF04, + 0x89E4, 0xCEA7, + 0x8A0B, 0xCE4A, + 0x8A33, 0xCDEE, + 0x8A5A, 0xCD91, + 0x8A82, 0xCD35, + 0x8AAA, 0xCCD9, + 0x8AD2, 0xCC7D, + 0x8AFB, 0xCC21, + 0x8B24, 0xCBC5, + 0x8B4D, 0xCB69, + 0x8B76, 0xCB0D, + 0x8BA0, 0xCAB2, + 0x8BCA, 0xCA57, + 0x8BF4, 0xC9FB, + 0x8C1F, 0xC9A0, + 0x8C4A, 0xC945, + 0x8C75, 0xC8EB, + 0x8CA0, 0xC890, + 0x8CCC, 0xC835, + 0x8CF8, 0xC7DB, + 0x8D24, 0xC781, + 0x8D50, 0xC727, + 0x8D7D, 0xC6CD, + 0x8DAA, 0xC673, + 0x8DD8, 0xC619, + 0x8E05, 0xC5BF, + 0x8E33, 0xC566, + 0x8E61, 0xC50D, + 0x8E90, 0xC4B3, + 0x8EBE, 0xC45A, + 0x8EED, 0xC402, + 0x8F1D, 0xC3A9, + 0x8F4C, 0xC350, + 0x8F7C, 0xC2F8, + 0x8FAC, 0xC29F, + 0x8FDC, 0xC247, + 0x900D, 0xC1EF, + 0x903E, 0xC197, + 0x906F, 0xC140, + 0x90A0, 0xC0E8, + 0x90D2, 0xC091, + 0x9104, 0xC03A, + 0x9136, 0xBFE2, + 0x9169, 0xBF8C, + 0x919C, 0xBF35, + 0x91CF, 0xBEDE, + 0x9202, 0xBE88, + 0x9235, 0xBE31, + 0x9269, 0xBDDB, + 0x929D, 0xBD85, + 0x92D2, 0xBD2F, + 0x9306, 0xBCDA, + 0x933B, 0xBC84, + 0x9370, 0xBC2F, + 0x93A6, 0xBBDA, + 0x93DB, 0xBB85, + 0x9411, 0xBB30, + 0x9447, 0xBADB, + 0x947E, 0xBA87, + 0x94B5, 0xBA32, + 0x94EC, 0xB9DE, + 0x9523, 0xB98A, + 0x955A, 0xB936, + 0x9592, 0xB8E3, + 0x95CA, 0xB88F, + 0x9602, 0xB83C, + 0x963B, 0xB7E9, + 0x9673, 0xB796, + 0x96AC, 0xB743, + 0x96E6, 0xB6F0, + 0x971F, 0xB69E, + 0x9759, 0xB64B, + 0x9793, 0xB5F9, + 0x97CD, 0xB5A7, + 0x9808, 0xB556, + 0x9842, 0xB504, + 0x987D, 0xB4B3, + 0x98B9, 0xB461, + 0x98F4, 0xB410, + 0x9930, 0xB3C0, + 0x996C, 0xB36F, + 0x99A8, 0xB31E, + 0x99E5, 0xB2CE, + 0x9A22, 0xB27E, + 0x9A5F, 0xB22E, + 0x9A9C, 0xB1DE, + 0x9AD9, 0xB18F, + 0x9B17, 0xB140, + 0x9B55, 0xB0F0, + 0x9B93, 0xB0A1, + 0x9BD2, 0xB053, + 0x9C10, 0xB004, + 0x9C4F, 0xAFB6, + 0x9C8E, 0xAF68, + 0x9CCE, 0xAF1A, + 0x9D0D, 0xAECC, + 0x9D4D, 0xAE7E, + 0x9D8E, 0xAE31, + 0x9DCE, 0xADE3, + 0x9E0E, 0xAD96, + 0x9E4F, 0xAD4A, + 0x9E90, 0xACFD, + 0x9ED2, 0xACB1, + 0x9F13, 0xAC64, + 0x9F55, 0xAC18, + 0x9F97, 0xABCC, + 0x9FD9, 0xAB81, + 0xA01C, 0xAB35, + 0xA05F, 0xAAEA, + 0xA0A1, 0xAA9F, + 0xA0E5, 0xAA54, + 0xA128, 0xAA0A, + 0xA16C, 0xA9BF, + 0xA1AF, 0xA975, + 0xA1F4, 0xA92B, + 0xA238, 0xA8E2, + 0xA27C, 0xA898, + 0xA2C1, 0xA84F, + 0xA306, 0xA806, + 0xA34B, 0xA7BD, + 0xA391, 0xA774, + 0xA3D6, 0xA72B, + 0xA41C, 0xA6E3, + 0xA462, 0xA69B, + 0xA4A9, 0xA653, + 0xA4EF, 0xA60C, + 0xA536, 0xA5C4, + 0xA57D, 0xA57D, + 0xA5C4, 0xA536, + 0xA60C, 0xA4EF, + 0xA653, 0xA4A9, + 0xA69B, 0xA462, + 0xA6E3, 0xA41C, + 0xA72B, 0xA3D6, + 0xA774, 0xA391, + 0xA7BD, 0xA34B, + 0xA806, 0xA306, + 0xA84F, 0xA2C1, + 0xA898, 0xA27C, + 0xA8E2, 0xA238, + 0xA92B, 0xA1F4, + 0xA975, 0xA1AF, + 0xA9BF, 0xA16C, + 0xAA0A, 0xA128, + 0xAA54, 0xA0E5, + 0xAA9F, 0xA0A1, + 0xAAEA, 0xA05F, + 0xAB35, 0xA01C, + 0xAB81, 0x9FD9, + 0xABCC, 0x9F97, + 0xAC18, 0x9F55, + 0xAC64, 0x9F13, + 0xACB1, 0x9ED2, + 0xACFD, 0x9E90, + 0xAD4A, 0x9E4F, + 0xAD96, 0x9E0E, + 0xADE3, 0x9DCE, + 0xAE31, 0x9D8E, + 0xAE7E, 0x9D4D, + 0xAECC, 0x9D0D, + 0xAF1A, 0x9CCE, + 0xAF68, 0x9C8E, + 0xAFB6, 0x9C4F, + 0xB004, 0x9C10, + 0xB053, 0x9BD2, + 0xB0A1, 0x9B93, + 0xB0F0, 0x9B55, + 0xB140, 0x9B17, + 0xB18F, 0x9AD9, + 0xB1DE, 0x9A9C, + 0xB22E, 0x9A5F, + 0xB27E, 0x9A22, + 0xB2CE, 0x99E5, + 0xB31E, 0x99A8, + 0xB36F, 0x996C, + 0xB3C0, 0x9930, + 0xB410, 0x98F4, + 0xB461, 0x98B9, + 0xB4B3, 0x987D, + 0xB504, 0x9842, + 0xB556, 0x9808, + 0xB5A7, 0x97CD, + 0xB5F9, 0x9793, + 0xB64B, 0x9759, + 0xB69E, 0x971F, + 0xB6F0, 0x96E6, + 0xB743, 0x96AC, + 0xB796, 0x9673, + 0xB7E9, 0x963B, + 0xB83C, 0x9602, + 0xB88F, 0x95CA, + 0xB8E3, 0x9592, + 0xB936, 0x955A, + 0xB98A, 0x9523, + 0xB9DE, 0x94EC, + 0xBA32, 0x94B5, + 0xBA87, 0x947E, + 0xBADB, 0x9447, + 0xBB30, 0x9411, + 0xBB85, 0x93DB, + 0xBBDA, 0x93A6, + 0xBC2F, 0x9370, + 0xBC84, 0x933B, + 0xBCDA, 0x9306, + 0xBD2F, 0x92D2, + 0xBD85, 0x929D, + 0xBDDB, 0x9269, + 0xBE31, 0x9235, + 0xBE88, 0x9202, + 0xBEDE, 0x91CF, + 0xBF35, 0x919C, + 0xBF8C, 0x9169, + 0xBFE2, 0x9136, + 0xC03A, 0x9104, + 0xC091, 0x90D2, + 0xC0E8, 0x90A0, + 0xC140, 0x906F, + 0xC197, 0x903E, + 0xC1EF, 0x900D, + 0xC247, 0x8FDC, + 0xC29F, 0x8FAC, + 0xC2F8, 0x8F7C, + 0xC350, 0x8F4C, + 0xC3A9, 0x8F1D, + 0xC402, 0x8EED, + 0xC45A, 0x8EBE, + 0xC4B3, 0x8E90, + 0xC50D, 0x8E61, + 0xC566, 0x8E33, + 0xC5BF, 0x8E05, + 0xC619, 0x8DD8, + 0xC673, 0x8DAA, + 0xC6CD, 0x8D7D, + 0xC727, 0x8D50, + 0xC781, 0x8D24, + 0xC7DB, 0x8CF8, + 0xC835, 0x8CCC, + 0xC890, 0x8CA0, + 0xC8EB, 0x8C75, + 0xC945, 0x8C4A, + 0xC9A0, 0x8C1F, + 0xC9FB, 0x8BF4, + 0xCA57, 0x8BCA, + 0xCAB2, 0x8BA0, + 0xCB0D, 0x8B76, + 0xCB69, 0x8B4D, + 0xCBC5, 0x8B24, + 0xCC21, 0x8AFB, + 0xCC7D, 0x8AD2, + 0xCCD9, 0x8AAA, + 0xCD35, 0x8A82, + 0xCD91, 0x8A5A, + 0xCDEE, 0x8A33, + 0xCE4A, 0x8A0B, + 0xCEA7, 0x89E4, + 0xCF04, 0x89BE, + 0xCF61, 0x8997, + 0xCFBE, 0x8971, + 0xD01B, 0x894C, + 0xD078, 0x8926, + 0xD0D6, 0x8901, + 0xD133, 0x88DC, + 0xD191, 0x88B8, + 0xD1EE, 0x8893, + 0xD24C, 0x886F, + 0xD2AA, 0x884B, + 0xD308, 0x8828, + 0xD367, 0x8805, + 0xD3C5, 0x87E2, + 0xD423, 0x87BF, + 0xD482, 0x879D, + 0xD4E0, 0x877B, + 0xD53F, 0x8759, + 0xD59E, 0x8738, + 0xD5FD, 0x8717, + 0xD65C, 0x86F6, + 0xD6BB, 0x86D5, + 0xD71A, 0x86B5, + 0xD779, 0x8695, + 0xD7D9, 0x8675, + 0xD838, 0x8656, + 0xD898, 0x8637, + 0xD8F8, 0x8618, + 0xD957, 0x85FA, + 0xD9B7, 0x85DB, + 0xDA17, 0x85BD, + 0xDA77, 0x85A0, + 0xDAD7, 0x8582, + 0xDB38, 0x8565, + 0xDB98, 0x8549, + 0xDBF8, 0x852C, + 0xDC59, 0x8510, + 0xDCBA, 0x84F4, + 0xDD1A, 0x84D9, + 0xDD7B, 0x84BD, + 0xDDDC, 0x84A2, + 0xDE3D, 0x8488, + 0xDE9E, 0x846D, + 0xDEFF, 0x8453, + 0xDF60, 0x843A, + 0xDFC1, 0x8420, + 0xE023, 0x8407, + 0xE084, 0x83EE, + 0xE0E6, 0x83D6, + 0xE147, 0x83BD, + 0xE1A9, 0x83A5, + 0xE20A, 0x838E, + 0xE26C, 0x8376, + 0xE2CE, 0x835F, + 0xE330, 0x8348, + 0xE392, 0x8332, + 0xE3F4, 0x831C, + 0xE456, 0x8306, + 0xE4B8, 0x82F0, + 0xE51B, 0x82DB, + 0xE57D, 0x82C6, + 0xE5DF, 0x82B1, + 0xE642, 0x829D, + 0xE6A4, 0x8289, + 0xE707, 0x8275, + 0xE769, 0x8262, + 0xE7CC, 0x824F, + 0xE82F, 0x823C, + 0xE892, 0x8229, + 0xE8F5, 0x8217, + 0xE957, 0x8205, + 0xE9BA, 0x81F3, + 0xEA1D, 0x81E2, + 0xEA80, 0x81D1, + 0xEAE4, 0x81C0, + 0xEB47, 0x81B0, + 0xEBAA, 0x81A0, + 0xEC0D, 0x8190, + 0xEC71, 0x8180, + 0xECD4, 0x8171, + 0xED37, 0x8162, + 0xED9B, 0x8154, + 0xEDFE, 0x8145, + 0xEE62, 0x8137, + 0xEEC6, 0x812A, + 0xEF29, 0x811C, + 0xEF8D, 0x810F, + 0xEFF1, 0x8102, + 0xF054, 0x80F6, + 0xF0B8, 0x80EA, + 0xF11C, 0x80DE, + 0xF180, 0x80D2, + 0xF1E4, 0x80C7, + 0xF248, 0x80BC, + 0xF2AC, 0x80B2, + 0xF310, 0x80A7, + 0xF374, 0x809D, + 0xF3D8, 0x8094, + 0xF43C, 0x808A, + 0xF4A0, 0x8081, + 0xF504, 0x8078, + 0xF568, 0x8070, + 0xF5CC, 0x8068, + 0xF631, 0x8060, + 0xF695, 0x8058, + 0xF6F9, 0x8051, + 0xF75D, 0x804A, + 0xF7C2, 0x8043, + 0xF826, 0x803D, + 0xF88A, 0x8037, + 0xF8EF, 0x8031, + 0xF953, 0x802C, + 0xF9B8, 0x8027, + 0xFA1C, 0x8022, + 0xFA80, 0x801E, + 0xFAE5, 0x801A, + 0xFB49, 0x8016, + 0xFBAE, 0x8012, + 0xFC12, 0x800F, + 0xFC77, 0x800C, + 0xFCDB, 0x8009, + 0xFD40, 0x8007, + 0xFDA4, 0x8005, + 0xFE09, 0x8003, + 0xFE6D, 0x8002, + 0xFED2, 0x8001, + 0xFF36, 0x8000, + 0xFF9B, 0x8000 +}; + +/** +* \par +* Example code for q15 Twiddle factors Generation:: +* \par +*
for(i = 0; i< 3N/4; i++)    
+* {    
+*    twiddleCoefq15[2*i]= cos(i * 2*PI/(float)N);    
+*    twiddleCoefq15[2*i+1]= sin(i * 2*PI/(float)N);    
+* } 
+* \par +* where N = 4096 and PI = 3.14159265358979 +* \par +* Cos and Sin values are interleaved fashion +* \par +* Convert Floating point to q15(Fixed point 1.15): +* round(twiddleCoefq15(i) * pow(2, 15)) +* +*/ +const q15_t twiddleCoef_4096_q15[6144] = +{ + 0x7FFF, 0x0000, + 0x7FFF, 0x0032, + 0x7FFF, 0x0064, + 0x7FFF, 0x0096, + 0x7FFF, 0x00C9, + 0x7FFF, 0x00FB, + 0x7FFE, 0x012D, + 0x7FFE, 0x015F, + 0x7FFD, 0x0192, + 0x7FFC, 0x01C4, + 0x7FFC, 0x01F6, + 0x7FFB, 0x0228, + 0x7FFA, 0x025B, + 0x7FF9, 0x028D, + 0x7FF8, 0x02BF, + 0x7FF7, 0x02F1, + 0x7FF6, 0x0324, + 0x7FF4, 0x0356, + 0x7FF3, 0x0388, + 0x7FF2, 0x03BA, + 0x7FF0, 0x03ED, + 0x7FEE, 0x041F, + 0x7FED, 0x0451, + 0x7FEB, 0x0483, + 0x7FE9, 0x04B6, + 0x7FE7, 0x04E8, + 0x7FE5, 0x051A, + 0x7FE3, 0x054C, + 0x7FE1, 0x057F, + 0x7FDF, 0x05B1, + 0x7FDD, 0x05E3, + 0x7FDA, 0x0615, + 0x7FD8, 0x0647, + 0x7FD6, 0x067A, + 0x7FD3, 0x06AC, + 0x7FD0, 0x06DE, + 0x7FCE, 0x0710, + 0x7FCB, 0x0742, + 0x7FC8, 0x0775, + 0x7FC5, 0x07A7, + 0x7FC2, 0x07D9, + 0x7FBF, 0x080B, + 0x7FBC, 0x083D, + 0x7FB8, 0x086F, + 0x7FB5, 0x08A2, + 0x7FB1, 0x08D4, + 0x7FAE, 0x0906, + 0x7FAA, 0x0938, + 0x7FA7, 0x096A, + 0x7FA3, 0x099C, + 0x7F9F, 0x09CE, + 0x7F9B, 0x0A00, + 0x7F97, 0x0A33, + 0x7F93, 0x0A65, + 0x7F8F, 0x0A97, + 0x7F8B, 0x0AC9, + 0x7F87, 0x0AFB, + 0x7F82, 0x0B2D, + 0x7F7E, 0x0B5F, + 0x7F79, 0x0B91, + 0x7F75, 0x0BC3, + 0x7F70, 0x0BF5, + 0x7F6B, 0x0C27, + 0x7F67, 0x0C59, + 0x7F62, 0x0C8B, + 0x7F5D, 0x0CBD, + 0x7F58, 0x0CEF, + 0x7F53, 0x0D21, + 0x7F4D, 0x0D53, + 0x7F48, 0x0D85, + 0x7F43, 0x0DB7, + 0x7F3D, 0x0DE9, + 0x7F38, 0x0E1B, + 0x7F32, 0x0E4D, + 0x7F2D, 0x0E7F, + 0x7F27, 0x0EB1, + 0x7F21, 0x0EE3, + 0x7F1B, 0x0F15, + 0x7F15, 0x0F47, + 0x7F0F, 0x0F79, + 0x7F09, 0x0FAB, + 0x7F03, 0x0FDD, + 0x7EFD, 0x100E, + 0x7EF6, 0x1040, + 0x7EF0, 0x1072, + 0x7EE9, 0x10A4, + 0x7EE3, 0x10D6, + 0x7EDC, 0x1108, + 0x7ED5, 0x1139, + 0x7ECF, 0x116B, + 0x7EC8, 0x119D, + 0x7EC1, 0x11CF, + 0x7EBA, 0x1201, + 0x7EB3, 0x1232, + 0x7EAB, 0x1264, + 0x7EA4, 0x1296, + 0x7E9D, 0x12C8, + 0x7E95, 0x12F9, + 0x7E8E, 0x132B, + 0x7E86, 0x135D, + 0x7E7F, 0x138E, + 0x7E77, 0x13C0, + 0x7E6F, 0x13F2, + 0x7E67, 0x1423, + 0x7E5F, 0x1455, + 0x7E57, 0x1487, + 0x7E4F, 0x14B8, + 0x7E47, 0x14EA, + 0x7E3F, 0x151B, + 0x7E37, 0x154D, + 0x7E2E, 0x157F, + 0x7E26, 0x15B0, + 0x7E1D, 0x15E2, + 0x7E14, 0x1613, + 0x7E0C, 0x1645, + 0x7E03, 0x1676, + 0x7DFA, 0x16A8, + 0x7DF1, 0x16D9, + 0x7DE8, 0x170A, + 0x7DDF, 0x173C, + 0x7DD6, 0x176D, + 0x7DCD, 0x179F, + 0x7DC3, 0x17D0, + 0x7DBA, 0x1802, + 0x7DB0, 0x1833, + 0x7DA7, 0x1864, + 0x7D9D, 0x1896, + 0x7D94, 0x18C7, + 0x7D8A, 0x18F8, + 0x7D80, 0x192A, + 0x7D76, 0x195B, + 0x7D6C, 0x198C, + 0x7D62, 0x19BD, + 0x7D58, 0x19EF, + 0x7D4E, 0x1A20, + 0x7D43, 0x1A51, + 0x7D39, 0x1A82, + 0x7D2F, 0x1AB3, + 0x7D24, 0x1AE4, + 0x7D19, 0x1B16, + 0x7D0F, 0x1B47, + 0x7D04, 0x1B78, + 0x7CF9, 0x1BA9, + 0x7CEE, 0x1BDA, + 0x7CE3, 0x1C0B, + 0x7CD8, 0x1C3C, + 0x7CCD, 0x1C6D, + 0x7CC2, 0x1C9E, + 0x7CB7, 0x1CCF, + 0x7CAB, 0x1D00, + 0x7CA0, 0x1D31, + 0x7C94, 0x1D62, + 0x7C89, 0x1D93, + 0x7C7D, 0x1DC4, + 0x7C71, 0x1DF5, + 0x7C66, 0x1E25, + 0x7C5A, 0x1E56, + 0x7C4E, 0x1E87, + 0x7C42, 0x1EB8, + 0x7C36, 0x1EE9, + 0x7C29, 0x1F19, + 0x7C1D, 0x1F4A, + 0x7C11, 0x1F7B, + 0x7C05, 0x1FAC, + 0x7BF8, 0x1FDC, + 0x7BEB, 0x200D, + 0x7BDF, 0x203E, + 0x7BD2, 0x206E, + 0x7BC5, 0x209F, + 0x7BB9, 0x20D0, + 0x7BAC, 0x2100, + 0x7B9F, 0x2131, + 0x7B92, 0x2161, + 0x7B84, 0x2192, + 0x7B77, 0x21C2, + 0x7B6A, 0x21F3, + 0x7B5D, 0x2223, + 0x7B4F, 0x2254, + 0x7B42, 0x2284, + 0x7B34, 0x22B4, + 0x7B26, 0x22E5, + 0x7B19, 0x2315, + 0x7B0B, 0x2345, + 0x7AFD, 0x2376, + 0x7AEF, 0x23A6, + 0x7AE1, 0x23D6, + 0x7AD3, 0x2407, + 0x7AC5, 0x2437, + 0x7AB6, 0x2467, + 0x7AA8, 0x2497, + 0x7A9A, 0x24C7, + 0x7A8B, 0x24F7, + 0x7A7D, 0x2528, + 0x7A6E, 0x2558, + 0x7A5F, 0x2588, + 0x7A50, 0x25B8, + 0x7A42, 0x25E8, + 0x7A33, 0x2618, + 0x7A24, 0x2648, + 0x7A15, 0x2678, + 0x7A05, 0x26A8, + 0x79F6, 0x26D8, + 0x79E7, 0x2707, + 0x79D8, 0x2737, + 0x79C8, 0x2767, + 0x79B9, 0x2797, + 0x79A9, 0x27C7, + 0x7999, 0x27F6, + 0x798A, 0x2826, + 0x797A, 0x2856, + 0x796A, 0x2886, + 0x795A, 0x28B5, + 0x794A, 0x28E5, + 0x793A, 0x2915, + 0x792A, 0x2944, + 0x7919, 0x2974, + 0x7909, 0x29A3, + 0x78F9, 0x29D3, + 0x78E8, 0x2A02, + 0x78D8, 0x2A32, + 0x78C7, 0x2A61, + 0x78B6, 0x2A91, + 0x78A6, 0x2AC0, + 0x7895, 0x2AEF, + 0x7884, 0x2B1F, + 0x7873, 0x2B4E, + 0x7862, 0x2B7D, + 0x7851, 0x2BAD, + 0x7840, 0x2BDC, + 0x782E, 0x2C0B, + 0x781D, 0x2C3A, + 0x780C, 0x2C69, + 0x77FA, 0x2C98, + 0x77E9, 0x2CC8, + 0x77D7, 0x2CF7, + 0x77C5, 0x2D26, + 0x77B4, 0x2D55, + 0x77A2, 0x2D84, + 0x7790, 0x2DB3, + 0x777E, 0x2DE2, + 0x776C, 0x2E11, + 0x775A, 0x2E3F, + 0x7747, 0x2E6E, + 0x7735, 0x2E9D, + 0x7723, 0x2ECC, + 0x7710, 0x2EFB, + 0x76FE, 0x2F29, + 0x76EB, 0x2F58, + 0x76D9, 0x2F87, + 0x76C6, 0x2FB5, + 0x76B3, 0x2FE4, + 0x76A0, 0x3013, + 0x768E, 0x3041, + 0x767B, 0x3070, + 0x7668, 0x309E, + 0x7654, 0x30CD, + 0x7641, 0x30FB, + 0x762E, 0x312A, + 0x761B, 0x3158, + 0x7607, 0x3186, + 0x75F4, 0x31B5, + 0x75E0, 0x31E3, + 0x75CC, 0x3211, + 0x75B9, 0x3240, + 0x75A5, 0x326E, + 0x7591, 0x329C, + 0x757D, 0x32CA, + 0x7569, 0x32F8, + 0x7555, 0x3326, + 0x7541, 0x3354, + 0x752D, 0x3382, + 0x7519, 0x33B0, + 0x7504, 0x33DE, + 0x74F0, 0x340C, + 0x74DB, 0x343A, + 0x74C7, 0x3468, + 0x74B2, 0x3496, + 0x749E, 0x34C4, + 0x7489, 0x34F2, + 0x7474, 0x351F, + 0x745F, 0x354D, + 0x744A, 0x357B, + 0x7435, 0x35A8, + 0x7420, 0x35D6, + 0x740B, 0x3604, + 0x73F6, 0x3631, + 0x73E0, 0x365F, + 0x73CB, 0x368C, + 0x73B5, 0x36BA, + 0x73A0, 0x36E7, + 0x738A, 0x3714, + 0x7375, 0x3742, + 0x735F, 0x376F, + 0x7349, 0x379C, + 0x7333, 0x37CA, + 0x731D, 0x37F7, + 0x7307, 0x3824, + 0x72F1, 0x3851, + 0x72DB, 0x387E, + 0x72C5, 0x38AB, + 0x72AF, 0x38D8, + 0x7298, 0x3906, + 0x7282, 0x3932, + 0x726B, 0x395F, + 0x7255, 0x398C, + 0x723E, 0x39B9, + 0x7227, 0x39E6, + 0x7211, 0x3A13, + 0x71FA, 0x3A40, + 0x71E3, 0x3A6C, + 0x71CC, 0x3A99, + 0x71B5, 0x3AC6, + 0x719E, 0x3AF2, + 0x7186, 0x3B1F, + 0x716F, 0x3B4C, + 0x7158, 0x3B78, + 0x7141, 0x3BA5, + 0x7129, 0x3BD1, + 0x7112, 0x3BFD, + 0x70FA, 0x3C2A, + 0x70E2, 0x3C56, + 0x70CB, 0x3C83, + 0x70B3, 0x3CAF, + 0x709B, 0x3CDB, + 0x7083, 0x3D07, + 0x706B, 0x3D33, + 0x7053, 0x3D60, + 0x703B, 0x3D8C, + 0x7023, 0x3DB8, + 0x700A, 0x3DE4, + 0x6FF2, 0x3E10, + 0x6FDA, 0x3E3C, + 0x6FC1, 0x3E68, + 0x6FA9, 0x3E93, + 0x6F90, 0x3EBF, + 0x6F77, 0x3EEB, + 0x6F5F, 0x3F17, + 0x6F46, 0x3F43, + 0x6F2D, 0x3F6E, + 0x6F14, 0x3F9A, + 0x6EFB, 0x3FC5, + 0x6EE2, 0x3FF1, + 0x6EC9, 0x401D, + 0x6EAF, 0x4048, + 0x6E96, 0x4073, + 0x6E7D, 0x409F, + 0x6E63, 0x40CA, + 0x6E4A, 0x40F6, + 0x6E30, 0x4121, + 0x6E17, 0x414C, + 0x6DFD, 0x4177, + 0x6DE3, 0x41A2, + 0x6DCA, 0x41CE, + 0x6DB0, 0x41F9, + 0x6D96, 0x4224, + 0x6D7C, 0x424F, + 0x6D62, 0x427A, + 0x6D48, 0x42A5, + 0x6D2D, 0x42D0, + 0x6D13, 0x42FA, + 0x6CF9, 0x4325, + 0x6CDE, 0x4350, + 0x6CC4, 0x437B, + 0x6CA9, 0x43A5, + 0x6C8F, 0x43D0, + 0x6C74, 0x43FB, + 0x6C59, 0x4425, + 0x6C3F, 0x4450, + 0x6C24, 0x447A, + 0x6C09, 0x44A5, + 0x6BEE, 0x44CF, + 0x6BD3, 0x44FA, + 0x6BB8, 0x4524, + 0x6B9C, 0x454E, + 0x6B81, 0x4578, + 0x6B66, 0x45A3, + 0x6B4A, 0x45CD, + 0x6B2F, 0x45F7, + 0x6B13, 0x4621, + 0x6AF8, 0x464B, + 0x6ADC, 0x4675, + 0x6AC1, 0x469F, + 0x6AA5, 0x46C9, + 0x6A89, 0x46F3, + 0x6A6D, 0x471C, + 0x6A51, 0x4746, + 0x6A35, 0x4770, + 0x6A19, 0x479A, + 0x69FD, 0x47C3, + 0x69E1, 0x47ED, + 0x69C4, 0x4816, + 0x69A8, 0x4840, + 0x698C, 0x4869, + 0x696F, 0x4893, + 0x6953, 0x48BC, + 0x6936, 0x48E6, + 0x6919, 0x490F, + 0x68FD, 0x4938, + 0x68E0, 0x4961, + 0x68C3, 0x498A, + 0x68A6, 0x49B4, + 0x6889, 0x49DD, + 0x686C, 0x4A06, + 0x684F, 0x4A2F, + 0x6832, 0x4A58, + 0x6815, 0x4A81, + 0x67F7, 0x4AA9, + 0x67DA, 0x4AD2, + 0x67BD, 0x4AFB, + 0x679F, 0x4B24, + 0x6782, 0x4B4C, + 0x6764, 0x4B75, + 0x6746, 0x4B9E, + 0x6729, 0x4BC6, + 0x670B, 0x4BEF, + 0x66ED, 0x4C17, + 0x66CF, 0x4C3F, + 0x66B1, 0x4C68, + 0x6693, 0x4C90, + 0x6675, 0x4CB8, + 0x6657, 0x4CE1, + 0x6639, 0x4D09, + 0x661A, 0x4D31, + 0x65FC, 0x4D59, + 0x65DD, 0x4D81, + 0x65BF, 0x4DA9, + 0x65A0, 0x4DD1, + 0x6582, 0x4DF9, + 0x6563, 0x4E21, + 0x6545, 0x4E48, + 0x6526, 0x4E70, + 0x6507, 0x4E98, + 0x64E8, 0x4EBF, + 0x64C9, 0x4EE7, + 0x64AA, 0x4F0F, + 0x648B, 0x4F36, + 0x646C, 0x4F5E, + 0x644D, 0x4F85, + 0x642D, 0x4FAC, + 0x640E, 0x4FD4, + 0x63EF, 0x4FFB, + 0x63CF, 0x5022, + 0x63B0, 0x5049, + 0x6390, 0x5070, + 0x6371, 0x5097, + 0x6351, 0x50BF, + 0x6331, 0x50E5, + 0x6311, 0x510C, + 0x62F2, 0x5133, + 0x62D2, 0x515A, + 0x62B2, 0x5181, + 0x6292, 0x51A8, + 0x6271, 0x51CE, + 0x6251, 0x51F5, + 0x6231, 0x521C, + 0x6211, 0x5242, + 0x61F1, 0x5269, + 0x61D0, 0x528F, + 0x61B0, 0x52B5, + 0x618F, 0x52DC, + 0x616F, 0x5302, + 0x614E, 0x5328, + 0x612D, 0x534E, + 0x610D, 0x5375, + 0x60EC, 0x539B, + 0x60CB, 0x53C1, + 0x60AA, 0x53E7, + 0x6089, 0x540D, + 0x6068, 0x5433, + 0x6047, 0x5458, + 0x6026, 0x547E, + 0x6004, 0x54A4, + 0x5FE3, 0x54CA, + 0x5FC2, 0x54EF, + 0x5FA0, 0x5515, + 0x5F7F, 0x553A, + 0x5F5E, 0x5560, + 0x5F3C, 0x5585, + 0x5F1A, 0x55AB, + 0x5EF9, 0x55D0, + 0x5ED7, 0x55F5, + 0x5EB5, 0x561A, + 0x5E93, 0x5640, + 0x5E71, 0x5665, + 0x5E50, 0x568A, + 0x5E2D, 0x56AF, + 0x5E0B, 0x56D4, + 0x5DE9, 0x56F9, + 0x5DC7, 0x571D, + 0x5DA5, 0x5742, + 0x5D83, 0x5767, + 0x5D60, 0x578C, + 0x5D3E, 0x57B0, + 0x5D1B, 0x57D5, + 0x5CF9, 0x57F9, + 0x5CD6, 0x581E, + 0x5CB4, 0x5842, + 0x5C91, 0x5867, + 0x5C6E, 0x588B, + 0x5C4B, 0x58AF, + 0x5C29, 0x58D4, + 0x5C06, 0x58F8, + 0x5BE3, 0x591C, + 0x5BC0, 0x5940, + 0x5B9D, 0x5964, + 0x5B79, 0x5988, + 0x5B56, 0x59AC, + 0x5B33, 0x59D0, + 0x5B10, 0x59F3, + 0x5AEC, 0x5A17, + 0x5AC9, 0x5A3B, + 0x5AA5, 0x5A5E, + 0x5A82, 0x5A82, + 0x5A5E, 0x5AA5, + 0x5A3B, 0x5AC9, + 0x5A17, 0x5AEC, + 0x59F3, 0x5B10, + 0x59D0, 0x5B33, + 0x59AC, 0x5B56, + 0x5988, 0x5B79, + 0x5964, 0x5B9D, + 0x5940, 0x5BC0, + 0x591C, 0x5BE3, + 0x58F8, 0x5C06, + 0x58D4, 0x5C29, + 0x58AF, 0x5C4B, + 0x588B, 0x5C6E, + 0x5867, 0x5C91, + 0x5842, 0x5CB4, + 0x581E, 0x5CD6, + 0x57F9, 0x5CF9, + 0x57D5, 0x5D1B, + 0x57B0, 0x5D3E, + 0x578C, 0x5D60, + 0x5767, 0x5D83, + 0x5742, 0x5DA5, + 0x571D, 0x5DC7, + 0x56F9, 0x5DE9, + 0x56D4, 0x5E0B, + 0x56AF, 0x5E2D, + 0x568A, 0x5E50, + 0x5665, 0x5E71, + 0x5640, 0x5E93, + 0x561A, 0x5EB5, + 0x55F5, 0x5ED7, + 0x55D0, 0x5EF9, + 0x55AB, 0x5F1A, + 0x5585, 0x5F3C, + 0x5560, 0x5F5E, + 0x553A, 0x5F7F, + 0x5515, 0x5FA0, + 0x54EF, 0x5FC2, + 0x54CA, 0x5FE3, + 0x54A4, 0x6004, + 0x547E, 0x6026, + 0x5458, 0x6047, + 0x5433, 0x6068, + 0x540D, 0x6089, + 0x53E7, 0x60AA, + 0x53C1, 0x60CB, + 0x539B, 0x60EC, + 0x5375, 0x610D, + 0x534E, 0x612D, + 0x5328, 0x614E, + 0x5302, 0x616F, + 0x52DC, 0x618F, + 0x52B5, 0x61B0, + 0x528F, 0x61D0, + 0x5269, 0x61F1, + 0x5242, 0x6211, + 0x521C, 0x6231, + 0x51F5, 0x6251, + 0x51CE, 0x6271, + 0x51A8, 0x6292, + 0x5181, 0x62B2, + 0x515A, 0x62D2, + 0x5133, 0x62F2, + 0x510C, 0x6311, + 0x50E5, 0x6331, + 0x50BF, 0x6351, + 0x5097, 0x6371, + 0x5070, 0x6390, + 0x5049, 0x63B0, + 0x5022, 0x63CF, + 0x4FFB, 0x63EF, + 0x4FD4, 0x640E, + 0x4FAC, 0x642D, + 0x4F85, 0x644D, + 0x4F5E, 0x646C, + 0x4F36, 0x648B, + 0x4F0F, 0x64AA, + 0x4EE7, 0x64C9, + 0x4EBF, 0x64E8, + 0x4E98, 0x6507, + 0x4E70, 0x6526, + 0x4E48, 0x6545, + 0x4E21, 0x6563, + 0x4DF9, 0x6582, + 0x4DD1, 0x65A0, + 0x4DA9, 0x65BF, + 0x4D81, 0x65DD, + 0x4D59, 0x65FC, + 0x4D31, 0x661A, + 0x4D09, 0x6639, + 0x4CE1, 0x6657, + 0x4CB8, 0x6675, + 0x4C90, 0x6693, + 0x4C68, 0x66B1, + 0x4C3F, 0x66CF, + 0x4C17, 0x66ED, + 0x4BEF, 0x670B, + 0x4BC6, 0x6729, + 0x4B9E, 0x6746, + 0x4B75, 0x6764, + 0x4B4C, 0x6782, + 0x4B24, 0x679F, + 0x4AFB, 0x67BD, + 0x4AD2, 0x67DA, + 0x4AA9, 0x67F7, + 0x4A81, 0x6815, + 0x4A58, 0x6832, + 0x4A2F, 0x684F, + 0x4A06, 0x686C, + 0x49DD, 0x6889, + 0x49B4, 0x68A6, + 0x498A, 0x68C3, + 0x4961, 0x68E0, + 0x4938, 0x68FD, + 0x490F, 0x6919, + 0x48E6, 0x6936, + 0x48BC, 0x6953, + 0x4893, 0x696F, + 0x4869, 0x698C, + 0x4840, 0x69A8, + 0x4816, 0x69C4, + 0x47ED, 0x69E1, + 0x47C3, 0x69FD, + 0x479A, 0x6A19, + 0x4770, 0x6A35, + 0x4746, 0x6A51, + 0x471C, 0x6A6D, + 0x46F3, 0x6A89, + 0x46C9, 0x6AA5, + 0x469F, 0x6AC1, + 0x4675, 0x6ADC, + 0x464B, 0x6AF8, + 0x4621, 0x6B13, + 0x45F7, 0x6B2F, + 0x45CD, 0x6B4A, + 0x45A3, 0x6B66, + 0x4578, 0x6B81, + 0x454E, 0x6B9C, + 0x4524, 0x6BB8, + 0x44FA, 0x6BD3, + 0x44CF, 0x6BEE, + 0x44A5, 0x6C09, + 0x447A, 0x6C24, + 0x4450, 0x6C3F, + 0x4425, 0x6C59, + 0x43FB, 0x6C74, + 0x43D0, 0x6C8F, + 0x43A5, 0x6CA9, + 0x437B, 0x6CC4, + 0x4350, 0x6CDE, + 0x4325, 0x6CF9, + 0x42FA, 0x6D13, + 0x42D0, 0x6D2D, + 0x42A5, 0x6D48, + 0x427A, 0x6D62, + 0x424F, 0x6D7C, + 0x4224, 0x6D96, + 0x41F9, 0x6DB0, + 0x41CE, 0x6DCA, + 0x41A2, 0x6DE3, + 0x4177, 0x6DFD, + 0x414C, 0x6E17, + 0x4121, 0x6E30, + 0x40F6, 0x6E4A, + 0x40CA, 0x6E63, + 0x409F, 0x6E7D, + 0x4073, 0x6E96, + 0x4048, 0x6EAF, + 0x401D, 0x6EC9, + 0x3FF1, 0x6EE2, + 0x3FC5, 0x6EFB, + 0x3F9A, 0x6F14, + 0x3F6E, 0x6F2D, + 0x3F43, 0x6F46, + 0x3F17, 0x6F5F, + 0x3EEB, 0x6F77, + 0x3EBF, 0x6F90, + 0x3E93, 0x6FA9, + 0x3E68, 0x6FC1, + 0x3E3C, 0x6FDA, + 0x3E10, 0x6FF2, + 0x3DE4, 0x700A, + 0x3DB8, 0x7023, + 0x3D8C, 0x703B, + 0x3D60, 0x7053, + 0x3D33, 0x706B, + 0x3D07, 0x7083, + 0x3CDB, 0x709B, + 0x3CAF, 0x70B3, + 0x3C83, 0x70CB, + 0x3C56, 0x70E2, + 0x3C2A, 0x70FA, + 0x3BFD, 0x7112, + 0x3BD1, 0x7129, + 0x3BA5, 0x7141, + 0x3B78, 0x7158, + 0x3B4C, 0x716F, + 0x3B1F, 0x7186, + 0x3AF2, 0x719E, + 0x3AC6, 0x71B5, + 0x3A99, 0x71CC, + 0x3A6C, 0x71E3, + 0x3A40, 0x71FA, + 0x3A13, 0x7211, + 0x39E6, 0x7227, + 0x39B9, 0x723E, + 0x398C, 0x7255, + 0x395F, 0x726B, + 0x3932, 0x7282, + 0x3906, 0x7298, + 0x38D8, 0x72AF, + 0x38AB, 0x72C5, + 0x387E, 0x72DB, + 0x3851, 0x72F1, + 0x3824, 0x7307, + 0x37F7, 0x731D, + 0x37CA, 0x7333, + 0x379C, 0x7349, + 0x376F, 0x735F, + 0x3742, 0x7375, + 0x3714, 0x738A, + 0x36E7, 0x73A0, + 0x36BA, 0x73B5, + 0x368C, 0x73CB, + 0x365F, 0x73E0, + 0x3631, 0x73F6, + 0x3604, 0x740B, + 0x35D6, 0x7420, + 0x35A8, 0x7435, + 0x357B, 0x744A, + 0x354D, 0x745F, + 0x351F, 0x7474, + 0x34F2, 0x7489, + 0x34C4, 0x749E, + 0x3496, 0x74B2, + 0x3468, 0x74C7, + 0x343A, 0x74DB, + 0x340C, 0x74F0, + 0x33DE, 0x7504, + 0x33B0, 0x7519, + 0x3382, 0x752D, + 0x3354, 0x7541, + 0x3326, 0x7555, + 0x32F8, 0x7569, + 0x32CA, 0x757D, + 0x329C, 0x7591, + 0x326E, 0x75A5, + 0x3240, 0x75B9, + 0x3211, 0x75CC, + 0x31E3, 0x75E0, + 0x31B5, 0x75F4, + 0x3186, 0x7607, + 0x3158, 0x761B, + 0x312A, 0x762E, + 0x30FB, 0x7641, + 0x30CD, 0x7654, + 0x309E, 0x7668, + 0x3070, 0x767B, + 0x3041, 0x768E, + 0x3013, 0x76A0, + 0x2FE4, 0x76B3, + 0x2FB5, 0x76C6, + 0x2F87, 0x76D9, + 0x2F58, 0x76EB, + 0x2F29, 0x76FE, + 0x2EFB, 0x7710, + 0x2ECC, 0x7723, + 0x2E9D, 0x7735, + 0x2E6E, 0x7747, + 0x2E3F, 0x775A, + 0x2E11, 0x776C, + 0x2DE2, 0x777E, + 0x2DB3, 0x7790, + 0x2D84, 0x77A2, + 0x2D55, 0x77B4, + 0x2D26, 0x77C5, + 0x2CF7, 0x77D7, + 0x2CC8, 0x77E9, + 0x2C98, 0x77FA, + 0x2C69, 0x780C, + 0x2C3A, 0x781D, + 0x2C0B, 0x782E, + 0x2BDC, 0x7840, + 0x2BAD, 0x7851, + 0x2B7D, 0x7862, + 0x2B4E, 0x7873, + 0x2B1F, 0x7884, + 0x2AEF, 0x7895, + 0x2AC0, 0x78A6, + 0x2A91, 0x78B6, + 0x2A61, 0x78C7, + 0x2A32, 0x78D8, + 0x2A02, 0x78E8, + 0x29D3, 0x78F9, + 0x29A3, 0x7909, + 0x2974, 0x7919, + 0x2944, 0x792A, + 0x2915, 0x793A, + 0x28E5, 0x794A, + 0x28B5, 0x795A, + 0x2886, 0x796A, + 0x2856, 0x797A, + 0x2826, 0x798A, + 0x27F6, 0x7999, + 0x27C7, 0x79A9, + 0x2797, 0x79B9, + 0x2767, 0x79C8, + 0x2737, 0x79D8, + 0x2707, 0x79E7, + 0x26D8, 0x79F6, + 0x26A8, 0x7A05, + 0x2678, 0x7A15, + 0x2648, 0x7A24, + 0x2618, 0x7A33, + 0x25E8, 0x7A42, + 0x25B8, 0x7A50, + 0x2588, 0x7A5F, + 0x2558, 0x7A6E, + 0x2528, 0x7A7D, + 0x24F7, 0x7A8B, + 0x24C7, 0x7A9A, + 0x2497, 0x7AA8, + 0x2467, 0x7AB6, + 0x2437, 0x7AC5, + 0x2407, 0x7AD3, + 0x23D6, 0x7AE1, + 0x23A6, 0x7AEF, + 0x2376, 0x7AFD, + 0x2345, 0x7B0B, + 0x2315, 0x7B19, + 0x22E5, 0x7B26, + 0x22B4, 0x7B34, + 0x2284, 0x7B42, + 0x2254, 0x7B4F, + 0x2223, 0x7B5D, + 0x21F3, 0x7B6A, + 0x21C2, 0x7B77, + 0x2192, 0x7B84, + 0x2161, 0x7B92, + 0x2131, 0x7B9F, + 0x2100, 0x7BAC, + 0x20D0, 0x7BB9, + 0x209F, 0x7BC5, + 0x206E, 0x7BD2, + 0x203E, 0x7BDF, + 0x200D, 0x7BEB, + 0x1FDC, 0x7BF8, + 0x1FAC, 0x7C05, + 0x1F7B, 0x7C11, + 0x1F4A, 0x7C1D, + 0x1F19, 0x7C29, + 0x1EE9, 0x7C36, + 0x1EB8, 0x7C42, + 0x1E87, 0x7C4E, + 0x1E56, 0x7C5A, + 0x1E25, 0x7C66, + 0x1DF5, 0x7C71, + 0x1DC4, 0x7C7D, + 0x1D93, 0x7C89, + 0x1D62, 0x7C94, + 0x1D31, 0x7CA0, + 0x1D00, 0x7CAB, + 0x1CCF, 0x7CB7, + 0x1C9E, 0x7CC2, + 0x1C6D, 0x7CCD, + 0x1C3C, 0x7CD8, + 0x1C0B, 0x7CE3, + 0x1BDA, 0x7CEE, + 0x1BA9, 0x7CF9, + 0x1B78, 0x7D04, + 0x1B47, 0x7D0F, + 0x1B16, 0x7D19, + 0x1AE4, 0x7D24, + 0x1AB3, 0x7D2F, + 0x1A82, 0x7D39, + 0x1A51, 0x7D43, + 0x1A20, 0x7D4E, + 0x19EF, 0x7D58, + 0x19BD, 0x7D62, + 0x198C, 0x7D6C, + 0x195B, 0x7D76, + 0x192A, 0x7D80, + 0x18F8, 0x7D8A, + 0x18C7, 0x7D94, + 0x1896, 0x7D9D, + 0x1864, 0x7DA7, + 0x1833, 0x7DB0, + 0x1802, 0x7DBA, + 0x17D0, 0x7DC3, + 0x179F, 0x7DCD, + 0x176D, 0x7DD6, + 0x173C, 0x7DDF, + 0x170A, 0x7DE8, + 0x16D9, 0x7DF1, + 0x16A8, 0x7DFA, + 0x1676, 0x7E03, + 0x1645, 0x7E0C, + 0x1613, 0x7E14, + 0x15E2, 0x7E1D, + 0x15B0, 0x7E26, + 0x157F, 0x7E2E, + 0x154D, 0x7E37, + 0x151B, 0x7E3F, + 0x14EA, 0x7E47, + 0x14B8, 0x7E4F, + 0x1487, 0x7E57, + 0x1455, 0x7E5F, + 0x1423, 0x7E67, + 0x13F2, 0x7E6F, + 0x13C0, 0x7E77, + 0x138E, 0x7E7F, + 0x135D, 0x7E86, + 0x132B, 0x7E8E, + 0x12F9, 0x7E95, + 0x12C8, 0x7E9D, + 0x1296, 0x7EA4, + 0x1264, 0x7EAB, + 0x1232, 0x7EB3, + 0x1201, 0x7EBA, + 0x11CF, 0x7EC1, + 0x119D, 0x7EC8, + 0x116B, 0x7ECF, + 0x1139, 0x7ED5, + 0x1108, 0x7EDC, + 0x10D6, 0x7EE3, + 0x10A4, 0x7EE9, + 0x1072, 0x7EF0, + 0x1040, 0x7EF6, + 0x100E, 0x7EFD, + 0x0FDD, 0x7F03, + 0x0FAB, 0x7F09, + 0x0F79, 0x7F0F, + 0x0F47, 0x7F15, + 0x0F15, 0x7F1B, + 0x0EE3, 0x7F21, + 0x0EB1, 0x7F27, + 0x0E7F, 0x7F2D, + 0x0E4D, 0x7F32, + 0x0E1B, 0x7F38, + 0x0DE9, 0x7F3D, + 0x0DB7, 0x7F43, + 0x0D85, 0x7F48, + 0x0D53, 0x7F4D, + 0x0D21, 0x7F53, + 0x0CEF, 0x7F58, + 0x0CBD, 0x7F5D, + 0x0C8B, 0x7F62, + 0x0C59, 0x7F67, + 0x0C27, 0x7F6B, + 0x0BF5, 0x7F70, + 0x0BC3, 0x7F75, + 0x0B91, 0x7F79, + 0x0B5F, 0x7F7E, + 0x0B2D, 0x7F82, + 0x0AFB, 0x7F87, + 0x0AC9, 0x7F8B, + 0x0A97, 0x7F8F, + 0x0A65, 0x7F93, + 0x0A33, 0x7F97, + 0x0A00, 0x7F9B, + 0x09CE, 0x7F9F, + 0x099C, 0x7FA3, + 0x096A, 0x7FA7, + 0x0938, 0x7FAA, + 0x0906, 0x7FAE, + 0x08D4, 0x7FB1, + 0x08A2, 0x7FB5, + 0x086F, 0x7FB8, + 0x083D, 0x7FBC, + 0x080B, 0x7FBF, + 0x07D9, 0x7FC2, + 0x07A7, 0x7FC5, + 0x0775, 0x7FC8, + 0x0742, 0x7FCB, + 0x0710, 0x7FCE, + 0x06DE, 0x7FD0, + 0x06AC, 0x7FD3, + 0x067A, 0x7FD6, + 0x0647, 0x7FD8, + 0x0615, 0x7FDA, + 0x05E3, 0x7FDD, + 0x05B1, 0x7FDF, + 0x057F, 0x7FE1, + 0x054C, 0x7FE3, + 0x051A, 0x7FE5, + 0x04E8, 0x7FE7, + 0x04B6, 0x7FE9, + 0x0483, 0x7FEB, + 0x0451, 0x7FED, + 0x041F, 0x7FEE, + 0x03ED, 0x7FF0, + 0x03BA, 0x7FF2, + 0x0388, 0x7FF3, + 0x0356, 0x7FF4, + 0x0324, 0x7FF6, + 0x02F1, 0x7FF7, + 0x02BF, 0x7FF8, + 0x028D, 0x7FF9, + 0x025B, 0x7FFA, + 0x0228, 0x7FFB, + 0x01F6, 0x7FFC, + 0x01C4, 0x7FFC, + 0x0192, 0x7FFD, + 0x015F, 0x7FFE, + 0x012D, 0x7FFE, + 0x00FB, 0x7FFF, + 0x00C9, 0x7FFF, + 0x0096, 0x7FFF, + 0x0064, 0x7FFF, + 0x0032, 0x7FFF, + 0x0000, 0x7FFF, + 0xFFCD, 0x7FFF, + 0xFF9B, 0x7FFF, + 0xFF69, 0x7FFF, + 0xFF36, 0x7FFF, + 0xFF04, 0x7FFF, + 0xFED2, 0x7FFE, + 0xFEA0, 0x7FFE, + 0xFE6D, 0x7FFD, + 0xFE3B, 0x7FFC, + 0xFE09, 0x7FFC, + 0xFDD7, 0x7FFB, + 0xFDA4, 0x7FFA, + 0xFD72, 0x7FF9, + 0xFD40, 0x7FF8, + 0xFD0E, 0x7FF7, + 0xFCDB, 0x7FF6, + 0xFCA9, 0x7FF4, + 0xFC77, 0x7FF3, + 0xFC45, 0x7FF2, + 0xFC12, 0x7FF0, + 0xFBE0, 0x7FEE, + 0xFBAE, 0x7FED, + 0xFB7C, 0x7FEB, + 0xFB49, 0x7FE9, + 0xFB17, 0x7FE7, + 0xFAE5, 0x7FE5, + 0xFAB3, 0x7FE3, + 0xFA80, 0x7FE1, + 0xFA4E, 0x7FDF, + 0xFA1C, 0x7FDD, + 0xF9EA, 0x7FDA, + 0xF9B8, 0x7FD8, + 0xF985, 0x7FD6, + 0xF953, 0x7FD3, + 0xF921, 0x7FD0, + 0xF8EF, 0x7FCE, + 0xF8BD, 0x7FCB, + 0xF88A, 0x7FC8, + 0xF858, 0x7FC5, + 0xF826, 0x7FC2, + 0xF7F4, 0x7FBF, + 0xF7C2, 0x7FBC, + 0xF790, 0x7FB8, + 0xF75D, 0x7FB5, + 0xF72B, 0x7FB1, + 0xF6F9, 0x7FAE, + 0xF6C7, 0x7FAA, + 0xF695, 0x7FA7, + 0xF663, 0x7FA3, + 0xF631, 0x7F9F, + 0xF5FF, 0x7F9B, + 0xF5CC, 0x7F97, + 0xF59A, 0x7F93, + 0xF568, 0x7F8F, + 0xF536, 0x7F8B, + 0xF504, 0x7F87, + 0xF4D2, 0x7F82, + 0xF4A0, 0x7F7E, + 0xF46E, 0x7F79, + 0xF43C, 0x7F75, + 0xF40A, 0x7F70, + 0xF3D8, 0x7F6B, + 0xF3A6, 0x7F67, + 0xF374, 0x7F62, + 0xF342, 0x7F5D, + 0xF310, 0x7F58, + 0xF2DE, 0x7F53, + 0xF2AC, 0x7F4D, + 0xF27A, 0x7F48, + 0xF248, 0x7F43, + 0xF216, 0x7F3D, + 0xF1E4, 0x7F38, + 0xF1B2, 0x7F32, + 0xF180, 0x7F2D, + 0xF14E, 0x7F27, + 0xF11C, 0x7F21, + 0xF0EA, 0x7F1B, + 0xF0B8, 0x7F15, + 0xF086, 0x7F0F, + 0xF054, 0x7F09, + 0xF022, 0x7F03, + 0xEFF1, 0x7EFD, + 0xEFBF, 0x7EF6, + 0xEF8D, 0x7EF0, + 0xEF5B, 0x7EE9, + 0xEF29, 0x7EE3, + 0xEEF7, 0x7EDC, + 0xEEC6, 0x7ED5, + 0xEE94, 0x7ECF, + 0xEE62, 0x7EC8, + 0xEE30, 0x7EC1, + 0xEDFE, 0x7EBA, + 0xEDCD, 0x7EB3, + 0xED9B, 0x7EAB, + 0xED69, 0x7EA4, + 0xED37, 0x7E9D, + 0xED06, 0x7E95, + 0xECD4, 0x7E8E, + 0xECA2, 0x7E86, + 0xEC71, 0x7E7F, + 0xEC3F, 0x7E77, + 0xEC0D, 0x7E6F, + 0xEBDC, 0x7E67, + 0xEBAA, 0x7E5F, + 0xEB78, 0x7E57, + 0xEB47, 0x7E4F, + 0xEB15, 0x7E47, + 0xEAE4, 0x7E3F, + 0xEAB2, 0x7E37, + 0xEA80, 0x7E2E, + 0xEA4F, 0x7E26, + 0xEA1D, 0x7E1D, + 0xE9EC, 0x7E14, + 0xE9BA, 0x7E0C, + 0xE989, 0x7E03, + 0xE957, 0x7DFA, + 0xE926, 0x7DF1, + 0xE8F5, 0x7DE8, + 0xE8C3, 0x7DDF, + 0xE892, 0x7DD6, + 0xE860, 0x7DCD, + 0xE82F, 0x7DC3, + 0xE7FD, 0x7DBA, + 0xE7CC, 0x7DB0, + 0xE79B, 0x7DA7, + 0xE769, 0x7D9D, + 0xE738, 0x7D94, + 0xE707, 0x7D8A, + 0xE6D5, 0x7D80, + 0xE6A4, 0x7D76, + 0xE673, 0x7D6C, + 0xE642, 0x7D62, + 0xE610, 0x7D58, + 0xE5DF, 0x7D4E, + 0xE5AE, 0x7D43, + 0xE57D, 0x7D39, + 0xE54C, 0x7D2F, + 0xE51B, 0x7D24, + 0xE4E9, 0x7D19, + 0xE4B8, 0x7D0F, + 0xE487, 0x7D04, + 0xE456, 0x7CF9, + 0xE425, 0x7CEE, + 0xE3F4, 0x7CE3, + 0xE3C3, 0x7CD8, + 0xE392, 0x7CCD, + 0xE361, 0x7CC2, + 0xE330, 0x7CB7, + 0xE2FF, 0x7CAB, + 0xE2CE, 0x7CA0, + 0xE29D, 0x7C94, + 0xE26C, 0x7C89, + 0xE23B, 0x7C7D, + 0xE20A, 0x7C71, + 0xE1DA, 0x7C66, + 0xE1A9, 0x7C5A, + 0xE178, 0x7C4E, + 0xE147, 0x7C42, + 0xE116, 0x7C36, + 0xE0E6, 0x7C29, + 0xE0B5, 0x7C1D, + 0xE084, 0x7C11, + 0xE053, 0x7C05, + 0xE023, 0x7BF8, + 0xDFF2, 0x7BEB, + 0xDFC1, 0x7BDF, + 0xDF91, 0x7BD2, + 0xDF60, 0x7BC5, + 0xDF2F, 0x7BB9, + 0xDEFF, 0x7BAC, + 0xDECE, 0x7B9F, + 0xDE9E, 0x7B92, + 0xDE6D, 0x7B84, + 0xDE3D, 0x7B77, + 0xDE0C, 0x7B6A, + 0xDDDC, 0x7B5D, + 0xDDAB, 0x7B4F, + 0xDD7B, 0x7B42, + 0xDD4B, 0x7B34, + 0xDD1A, 0x7B26, + 0xDCEA, 0x7B19, + 0xDCBA, 0x7B0B, + 0xDC89, 0x7AFD, + 0xDC59, 0x7AEF, + 0xDC29, 0x7AE1, + 0xDBF8, 0x7AD3, + 0xDBC8, 0x7AC5, + 0xDB98, 0x7AB6, + 0xDB68, 0x7AA8, + 0xDB38, 0x7A9A, + 0xDB08, 0x7A8B, + 0xDAD7, 0x7A7D, + 0xDAA7, 0x7A6E, + 0xDA77, 0x7A5F, + 0xDA47, 0x7A50, + 0xDA17, 0x7A42, + 0xD9E7, 0x7A33, + 0xD9B7, 0x7A24, + 0xD987, 0x7A15, + 0xD957, 0x7A05, + 0xD927, 0x79F6, + 0xD8F8, 0x79E7, + 0xD8C8, 0x79D8, + 0xD898, 0x79C8, + 0xD868, 0x79B9, + 0xD838, 0x79A9, + 0xD809, 0x7999, + 0xD7D9, 0x798A, + 0xD7A9, 0x797A, + 0xD779, 0x796A, + 0xD74A, 0x795A, + 0xD71A, 0x794A, + 0xD6EA, 0x793A, + 0xD6BB, 0x792A, + 0xD68B, 0x7919, + 0xD65C, 0x7909, + 0xD62C, 0x78F9, + 0xD5FD, 0x78E8, + 0xD5CD, 0x78D8, + 0xD59E, 0x78C7, + 0xD56E, 0x78B6, + 0xD53F, 0x78A6, + 0xD510, 0x7895, + 0xD4E0, 0x7884, + 0xD4B1, 0x7873, + 0xD482, 0x7862, + 0xD452, 0x7851, + 0xD423, 0x7840, + 0xD3F4, 0x782E, + 0xD3C5, 0x781D, + 0xD396, 0x780C, + 0xD367, 0x77FA, + 0xD337, 0x77E9, + 0xD308, 0x77D7, + 0xD2D9, 0x77C5, + 0xD2AA, 0x77B4, + 0xD27B, 0x77A2, + 0xD24C, 0x7790, + 0xD21D, 0x777E, + 0xD1EE, 0x776C, + 0xD1C0, 0x775A, + 0xD191, 0x7747, + 0xD162, 0x7735, + 0xD133, 0x7723, + 0xD104, 0x7710, + 0xD0D6, 0x76FE, + 0xD0A7, 0x76EB, + 0xD078, 0x76D9, + 0xD04A, 0x76C6, + 0xD01B, 0x76B3, + 0xCFEC, 0x76A0, + 0xCFBE, 0x768E, + 0xCF8F, 0x767B, + 0xCF61, 0x7668, + 0xCF32, 0x7654, + 0xCF04, 0x7641, + 0xCED5, 0x762E, + 0xCEA7, 0x761B, + 0xCE79, 0x7607, + 0xCE4A, 0x75F4, + 0xCE1C, 0x75E0, + 0xCDEE, 0x75CC, + 0xCDBF, 0x75B9, + 0xCD91, 0x75A5, + 0xCD63, 0x7591, + 0xCD35, 0x757D, + 0xCD07, 0x7569, + 0xCCD9, 0x7555, + 0xCCAB, 0x7541, + 0xCC7D, 0x752D, + 0xCC4F, 0x7519, + 0xCC21, 0x7504, + 0xCBF3, 0x74F0, + 0xCBC5, 0x74DB, + 0xCB97, 0x74C7, + 0xCB69, 0x74B2, + 0xCB3B, 0x749E, + 0xCB0D, 0x7489, + 0xCAE0, 0x7474, + 0xCAB2, 0x745F, + 0xCA84, 0x744A, + 0xCA57, 0x7435, + 0xCA29, 0x7420, + 0xC9FB, 0x740B, + 0xC9CE, 0x73F6, + 0xC9A0, 0x73E0, + 0xC973, 0x73CB, + 0xC945, 0x73B5, + 0xC918, 0x73A0, + 0xC8EB, 0x738A, + 0xC8BD, 0x7375, + 0xC890, 0x735F, + 0xC863, 0x7349, + 0xC835, 0x7333, + 0xC808, 0x731D, + 0xC7DB, 0x7307, + 0xC7AE, 0x72F1, + 0xC781, 0x72DB, + 0xC754, 0x72C5, + 0xC727, 0x72AF, + 0xC6F9, 0x7298, + 0xC6CD, 0x7282, + 0xC6A0, 0x726B, + 0xC673, 0x7255, + 0xC646, 0x723E, + 0xC619, 0x7227, + 0xC5EC, 0x7211, + 0xC5BF, 0x71FA, + 0xC593, 0x71E3, + 0xC566, 0x71CC, + 0xC539, 0x71B5, + 0xC50D, 0x719E, + 0xC4E0, 0x7186, + 0xC4B3, 0x716F, + 0xC487, 0x7158, + 0xC45A, 0x7141, + 0xC42E, 0x7129, + 0xC402, 0x7112, + 0xC3D5, 0x70FA, + 0xC3A9, 0x70E2, + 0xC37C, 0x70CB, + 0xC350, 0x70B3, + 0xC324, 0x709B, + 0xC2F8, 0x7083, + 0xC2CC, 0x706B, + 0xC29F, 0x7053, + 0xC273, 0x703B, + 0xC247, 0x7023, + 0xC21B, 0x700A, + 0xC1EF, 0x6FF2, + 0xC1C3, 0x6FDA, + 0xC197, 0x6FC1, + 0xC16C, 0x6FA9, + 0xC140, 0x6F90, + 0xC114, 0x6F77, + 0xC0E8, 0x6F5F, + 0xC0BC, 0x6F46, + 0xC091, 0x6F2D, + 0xC065, 0x6F14, + 0xC03A, 0x6EFB, + 0xC00E, 0x6EE2, + 0xBFE2, 0x6EC9, + 0xBFB7, 0x6EAF, + 0xBF8C, 0x6E96, + 0xBF60, 0x6E7D, + 0xBF35, 0x6E63, + 0xBF09, 0x6E4A, + 0xBEDE, 0x6E30, + 0xBEB3, 0x6E17, + 0xBE88, 0x6DFD, + 0xBE5D, 0x6DE3, + 0xBE31, 0x6DCA, + 0xBE06, 0x6DB0, + 0xBDDB, 0x6D96, + 0xBDB0, 0x6D7C, + 0xBD85, 0x6D62, + 0xBD5A, 0x6D48, + 0xBD2F, 0x6D2D, + 0xBD05, 0x6D13, + 0xBCDA, 0x6CF9, + 0xBCAF, 0x6CDE, + 0xBC84, 0x6CC4, + 0xBC5A, 0x6CA9, + 0xBC2F, 0x6C8F, + 0xBC04, 0x6C74, + 0xBBDA, 0x6C59, + 0xBBAF, 0x6C3F, + 0xBB85, 0x6C24, + 0xBB5A, 0x6C09, + 0xBB30, 0x6BEE, + 0xBB05, 0x6BD3, + 0xBADB, 0x6BB8, + 0xBAB1, 0x6B9C, + 0xBA87, 0x6B81, + 0xBA5C, 0x6B66, + 0xBA32, 0x6B4A, + 0xBA08, 0x6B2F, + 0xB9DE, 0x6B13, + 0xB9B4, 0x6AF8, + 0xB98A, 0x6ADC, + 0xB960, 0x6AC1, + 0xB936, 0x6AA5, + 0xB90C, 0x6A89, + 0xB8E3, 0x6A6D, + 0xB8B9, 0x6A51, + 0xB88F, 0x6A35, + 0xB865, 0x6A19, + 0xB83C, 0x69FD, + 0xB812, 0x69E1, + 0xB7E9, 0x69C4, + 0xB7BF, 0x69A8, + 0xB796, 0x698C, + 0xB76C, 0x696F, + 0xB743, 0x6953, + 0xB719, 0x6936, + 0xB6F0, 0x6919, + 0xB6C7, 0x68FD, + 0xB69E, 0x68E0, + 0xB675, 0x68C3, + 0xB64B, 0x68A6, + 0xB622, 0x6889, + 0xB5F9, 0x686C, + 0xB5D0, 0x684F, + 0xB5A7, 0x6832, + 0xB57E, 0x6815, + 0xB556, 0x67F7, + 0xB52D, 0x67DA, + 0xB504, 0x67BD, + 0xB4DB, 0x679F, + 0xB4B3, 0x6782, + 0xB48A, 0x6764, + 0xB461, 0x6746, + 0xB439, 0x6729, + 0xB410, 0x670B, + 0xB3E8, 0x66ED, + 0xB3C0, 0x66CF, + 0xB397, 0x66B1, + 0xB36F, 0x6693, + 0xB347, 0x6675, + 0xB31E, 0x6657, + 0xB2F6, 0x6639, + 0xB2CE, 0x661A, + 0xB2A6, 0x65FC, + 0xB27E, 0x65DD, + 0xB256, 0x65BF, + 0xB22E, 0x65A0, + 0xB206, 0x6582, + 0xB1DE, 0x6563, + 0xB1B7, 0x6545, + 0xB18F, 0x6526, + 0xB167, 0x6507, + 0xB140, 0x64E8, + 0xB118, 0x64C9, + 0xB0F0, 0x64AA, + 0xB0C9, 0x648B, + 0xB0A1, 0x646C, + 0xB07A, 0x644D, + 0xB053, 0x642D, + 0xB02B, 0x640E, + 0xB004, 0x63EF, + 0xAFDD, 0x63CF, + 0xAFB6, 0x63B0, + 0xAF8F, 0x6390, + 0xAF68, 0x6371, + 0xAF40, 0x6351, + 0xAF1A, 0x6331, + 0xAEF3, 0x6311, + 0xAECC, 0x62F2, + 0xAEA5, 0x62D2, + 0xAE7E, 0x62B2, + 0xAE57, 0x6292, + 0xAE31, 0x6271, + 0xAE0A, 0x6251, + 0xADE3, 0x6231, + 0xADBD, 0x6211, + 0xAD96, 0x61F1, + 0xAD70, 0x61D0, + 0xAD4A, 0x61B0, + 0xAD23, 0x618F, + 0xACFD, 0x616F, + 0xACD7, 0x614E, + 0xACB1, 0x612D, + 0xAC8A, 0x610D, + 0xAC64, 0x60EC, + 0xAC3E, 0x60CB, + 0xAC18, 0x60AA, + 0xABF2, 0x6089, + 0xABCC, 0x6068, + 0xABA7, 0x6047, + 0xAB81, 0x6026, + 0xAB5B, 0x6004, + 0xAB35, 0x5FE3, + 0xAB10, 0x5FC2, + 0xAAEA, 0x5FA0, + 0xAAC5, 0x5F7F, + 0xAA9F, 0x5F5E, + 0xAA7A, 0x5F3C, + 0xAA54, 0x5F1A, + 0xAA2F, 0x5EF9, + 0xAA0A, 0x5ED7, + 0xA9E5, 0x5EB5, + 0xA9BF, 0x5E93, + 0xA99A, 0x5E71, + 0xA975, 0x5E50, + 0xA950, 0x5E2D, + 0xA92B, 0x5E0B, + 0xA906, 0x5DE9, + 0xA8E2, 0x5DC7, + 0xA8BD, 0x5DA5, + 0xA898, 0x5D83, + 0xA873, 0x5D60, + 0xA84F, 0x5D3E, + 0xA82A, 0x5D1B, + 0xA806, 0x5CF9, + 0xA7E1, 0x5CD6, + 0xA7BD, 0x5CB4, + 0xA798, 0x5C91, + 0xA774, 0x5C6E, + 0xA750, 0x5C4B, + 0xA72B, 0x5C29, + 0xA707, 0x5C06, + 0xA6E3, 0x5BE3, + 0xA6BF, 0x5BC0, + 0xA69B, 0x5B9D, + 0xA677, 0x5B79, + 0xA653, 0x5B56, + 0xA62F, 0x5B33, + 0xA60C, 0x5B10, + 0xA5E8, 0x5AEC, + 0xA5C4, 0x5AC9, + 0xA5A1, 0x5AA5, + 0xA57D, 0x5A82, + 0xA55A, 0x5A5E, + 0xA536, 0x5A3B, + 0xA513, 0x5A17, + 0xA4EF, 0x59F3, + 0xA4CC, 0x59D0, + 0xA4A9, 0x59AC, + 0xA486, 0x5988, + 0xA462, 0x5964, + 0xA43F, 0x5940, + 0xA41C, 0x591C, + 0xA3F9, 0x58F8, + 0xA3D6, 0x58D4, + 0xA3B4, 0x58AF, + 0xA391, 0x588B, + 0xA36E, 0x5867, + 0xA34B, 0x5842, + 0xA329, 0x581E, + 0xA306, 0x57F9, + 0xA2E4, 0x57D5, + 0xA2C1, 0x57B0, + 0xA29F, 0x578C, + 0xA27C, 0x5767, + 0xA25A, 0x5742, + 0xA238, 0x571D, + 0xA216, 0x56F9, + 0xA1F4, 0x56D4, + 0xA1D2, 0x56AF, + 0xA1AF, 0x568A, + 0xA18E, 0x5665, + 0xA16C, 0x5640, + 0xA14A, 0x561A, + 0xA128, 0x55F5, + 0xA106, 0x55D0, + 0xA0E5, 0x55AB, + 0xA0C3, 0x5585, + 0xA0A1, 0x5560, + 0xA080, 0x553A, + 0xA05F, 0x5515, + 0xA03D, 0x54EF, + 0xA01C, 0x54CA, + 0x9FFB, 0x54A4, + 0x9FD9, 0x547E, + 0x9FB8, 0x5458, + 0x9F97, 0x5433, + 0x9F76, 0x540D, + 0x9F55, 0x53E7, + 0x9F34, 0x53C1, + 0x9F13, 0x539B, + 0x9EF2, 0x5375, + 0x9ED2, 0x534E, + 0x9EB1, 0x5328, + 0x9E90, 0x5302, + 0x9E70, 0x52DC, + 0x9E4F, 0x52B5, + 0x9E2F, 0x528F, + 0x9E0E, 0x5269, + 0x9DEE, 0x5242, + 0x9DCE, 0x521C, + 0x9DAE, 0x51F5, + 0x9D8E, 0x51CE, + 0x9D6D, 0x51A8, + 0x9D4D, 0x5181, + 0x9D2D, 0x515A, + 0x9D0D, 0x5133, + 0x9CEE, 0x510C, + 0x9CCE, 0x50E5, + 0x9CAE, 0x50BF, + 0x9C8E, 0x5097, + 0x9C6F, 0x5070, + 0x9C4F, 0x5049, + 0x9C30, 0x5022, + 0x9C10, 0x4FFB, + 0x9BF1, 0x4FD4, + 0x9BD2, 0x4FAC, + 0x9BB2, 0x4F85, + 0x9B93, 0x4F5E, + 0x9B74, 0x4F36, + 0x9B55, 0x4F0F, + 0x9B36, 0x4EE7, + 0x9B17, 0x4EBF, + 0x9AF8, 0x4E98, + 0x9AD9, 0x4E70, + 0x9ABA, 0x4E48, + 0x9A9C, 0x4E21, + 0x9A7D, 0x4DF9, + 0x9A5F, 0x4DD1, + 0x9A40, 0x4DA9, + 0x9A22, 0x4D81, + 0x9A03, 0x4D59, + 0x99E5, 0x4D31, + 0x99C6, 0x4D09, + 0x99A8, 0x4CE1, + 0x998A, 0x4CB8, + 0x996C, 0x4C90, + 0x994E, 0x4C68, + 0x9930, 0x4C3F, + 0x9912, 0x4C17, + 0x98F4, 0x4BEF, + 0x98D6, 0x4BC6, + 0x98B9, 0x4B9E, + 0x989B, 0x4B75, + 0x987D, 0x4B4C, + 0x9860, 0x4B24, + 0x9842, 0x4AFB, + 0x9825, 0x4AD2, + 0x9808, 0x4AA9, + 0x97EA, 0x4A81, + 0x97CD, 0x4A58, + 0x97B0, 0x4A2F, + 0x9793, 0x4A06, + 0x9776, 0x49DD, + 0x9759, 0x49B4, + 0x973C, 0x498A, + 0x971F, 0x4961, + 0x9702, 0x4938, + 0x96E6, 0x490F, + 0x96C9, 0x48E6, + 0x96AC, 0x48BC, + 0x9690, 0x4893, + 0x9673, 0x4869, + 0x9657, 0x4840, + 0x963B, 0x4816, + 0x961E, 0x47ED, + 0x9602, 0x47C3, + 0x95E6, 0x479A, + 0x95CA, 0x4770, + 0x95AE, 0x4746, + 0x9592, 0x471C, + 0x9576, 0x46F3, + 0x955A, 0x46C9, + 0x953E, 0x469F, + 0x9523, 0x4675, + 0x9507, 0x464B, + 0x94EC, 0x4621, + 0x94D0, 0x45F7, + 0x94B5, 0x45CD, + 0x9499, 0x45A3, + 0x947E, 0x4578, + 0x9463, 0x454E, + 0x9447, 0x4524, + 0x942C, 0x44FA, + 0x9411, 0x44CF, + 0x93F6, 0x44A5, + 0x93DB, 0x447A, + 0x93C0, 0x4450, + 0x93A6, 0x4425, + 0x938B, 0x43FB, + 0x9370, 0x43D0, + 0x9356, 0x43A5, + 0x933B, 0x437B, + 0x9321, 0x4350, + 0x9306, 0x4325, + 0x92EC, 0x42FA, + 0x92D2, 0x42D0, + 0x92B7, 0x42A5, + 0x929D, 0x427A, + 0x9283, 0x424F, + 0x9269, 0x4224, + 0x924F, 0x41F9, + 0x9235, 0x41CE, + 0x921C, 0x41A2, + 0x9202, 0x4177, + 0x91E8, 0x414C, + 0x91CF, 0x4121, + 0x91B5, 0x40F6, + 0x919C, 0x40CA, + 0x9182, 0x409F, + 0x9169, 0x4073, + 0x9150, 0x4048, + 0x9136, 0x401D, + 0x911D, 0x3FF1, + 0x9104, 0x3FC5, + 0x90EB, 0x3F9A, + 0x90D2, 0x3F6E, + 0x90B9, 0x3F43, + 0x90A0, 0x3F17, + 0x9088, 0x3EEB, + 0x906F, 0x3EBF, + 0x9056, 0x3E93, + 0x903E, 0x3E68, + 0x9025, 0x3E3C, + 0x900D, 0x3E10, + 0x8FF5, 0x3DE4, + 0x8FDC, 0x3DB8, + 0x8FC4, 0x3D8C, + 0x8FAC, 0x3D60, + 0x8F94, 0x3D33, + 0x8F7C, 0x3D07, + 0x8F64, 0x3CDB, + 0x8F4C, 0x3CAF, + 0x8F34, 0x3C83, + 0x8F1D, 0x3C56, + 0x8F05, 0x3C2A, + 0x8EED, 0x3BFD, + 0x8ED6, 0x3BD1, + 0x8EBE, 0x3BA5, + 0x8EA7, 0x3B78, + 0x8E90, 0x3B4C, + 0x8E79, 0x3B1F, + 0x8E61, 0x3AF2, + 0x8E4A, 0x3AC6, + 0x8E33, 0x3A99, + 0x8E1C, 0x3A6C, + 0x8E05, 0x3A40, + 0x8DEE, 0x3A13, + 0x8DD8, 0x39E6, + 0x8DC1, 0x39B9, + 0x8DAA, 0x398C, + 0x8D94, 0x395F, + 0x8D7D, 0x3932, + 0x8D67, 0x3906, + 0x8D50, 0x38D8, + 0x8D3A, 0x38AB, + 0x8D24, 0x387E, + 0x8D0E, 0x3851, + 0x8CF8, 0x3824, + 0x8CE2, 0x37F7, + 0x8CCC, 0x37CA, + 0x8CB6, 0x379C, + 0x8CA0, 0x376F, + 0x8C8A, 0x3742, + 0x8C75, 0x3714, + 0x8C5F, 0x36E7, + 0x8C4A, 0x36BA, + 0x8C34, 0x368C, + 0x8C1F, 0x365F, + 0x8C09, 0x3631, + 0x8BF4, 0x3604, + 0x8BDF, 0x35D6, + 0x8BCA, 0x35A8, + 0x8BB5, 0x357B, + 0x8BA0, 0x354D, + 0x8B8B, 0x351F, + 0x8B76, 0x34F2, + 0x8B61, 0x34C4, + 0x8B4D, 0x3496, + 0x8B38, 0x3468, + 0x8B24, 0x343A, + 0x8B0F, 0x340C, + 0x8AFB, 0x33DE, + 0x8AE6, 0x33B0, + 0x8AD2, 0x3382, + 0x8ABE, 0x3354, + 0x8AAA, 0x3326, + 0x8A96, 0x32F8, + 0x8A82, 0x32CA, + 0x8A6E, 0x329C, + 0x8A5A, 0x326E, + 0x8A46, 0x3240, + 0x8A33, 0x3211, + 0x8A1F, 0x31E3, + 0x8A0B, 0x31B5, + 0x89F8, 0x3186, + 0x89E4, 0x3158, + 0x89D1, 0x312A, + 0x89BE, 0x30FB, + 0x89AB, 0x30CD, + 0x8997, 0x309E, + 0x8984, 0x3070, + 0x8971, 0x3041, + 0x895F, 0x3013, + 0x894C, 0x2FE4, + 0x8939, 0x2FB5, + 0x8926, 0x2F87, + 0x8914, 0x2F58, + 0x8901, 0x2F29, + 0x88EF, 0x2EFB, + 0x88DC, 0x2ECC, + 0x88CA, 0x2E9D, + 0x88B8, 0x2E6E, + 0x88A5, 0x2E3F, + 0x8893, 0x2E11, + 0x8881, 0x2DE2, + 0x886F, 0x2DB3, + 0x885D, 0x2D84, + 0x884B, 0x2D55, + 0x883A, 0x2D26, + 0x8828, 0x2CF7, + 0x8816, 0x2CC8, + 0x8805, 0x2C98, + 0x87F3, 0x2C69, + 0x87E2, 0x2C3A, + 0x87D1, 0x2C0B, + 0x87BF, 0x2BDC, + 0x87AE, 0x2BAD, + 0x879D, 0x2B7D, + 0x878C, 0x2B4E, + 0x877B, 0x2B1F, + 0x876A, 0x2AEF, + 0x8759, 0x2AC0, + 0x8749, 0x2A91, + 0x8738, 0x2A61, + 0x8727, 0x2A32, + 0x8717, 0x2A02, + 0x8706, 0x29D3, + 0x86F6, 0x29A3, + 0x86E6, 0x2974, + 0x86D5, 0x2944, + 0x86C5, 0x2915, + 0x86B5, 0x28E5, + 0x86A5, 0x28B5, + 0x8695, 0x2886, + 0x8685, 0x2856, + 0x8675, 0x2826, + 0x8666, 0x27F6, + 0x8656, 0x27C7, + 0x8646, 0x2797, + 0x8637, 0x2767, + 0x8627, 0x2737, + 0x8618, 0x2707, + 0x8609, 0x26D8, + 0x85FA, 0x26A8, + 0x85EA, 0x2678, + 0x85DB, 0x2648, + 0x85CC, 0x2618, + 0x85BD, 0x25E8, + 0x85AF, 0x25B8, + 0x85A0, 0x2588, + 0x8591, 0x2558, + 0x8582, 0x2528, + 0x8574, 0x24F7, + 0x8565, 0x24C7, + 0x8557, 0x2497, + 0x8549, 0x2467, + 0x853A, 0x2437, + 0x852C, 0x2407, + 0x851E, 0x23D6, + 0x8510, 0x23A6, + 0x8502, 0x2376, + 0x84F4, 0x2345, + 0x84E6, 0x2315, + 0x84D9, 0x22E5, + 0x84CB, 0x22B4, + 0x84BD, 0x2284, + 0x84B0, 0x2254, + 0x84A2, 0x2223, + 0x8495, 0x21F3, + 0x8488, 0x21C2, + 0x847B, 0x2192, + 0x846D, 0x2161, + 0x8460, 0x2131, + 0x8453, 0x2100, + 0x8446, 0x20D0, + 0x843A, 0x209F, + 0x842D, 0x206E, + 0x8420, 0x203E, + 0x8414, 0x200D, + 0x8407, 0x1FDC, + 0x83FA, 0x1FAC, + 0x83EE, 0x1F7B, + 0x83E2, 0x1F4A, + 0x83D6, 0x1F19, + 0x83C9, 0x1EE9, + 0x83BD, 0x1EB8, + 0x83B1, 0x1E87, + 0x83A5, 0x1E56, + 0x8399, 0x1E25, + 0x838E, 0x1DF5, + 0x8382, 0x1DC4, + 0x8376, 0x1D93, + 0x836B, 0x1D62, + 0x835F, 0x1D31, + 0x8354, 0x1D00, + 0x8348, 0x1CCF, + 0x833D, 0x1C9E, + 0x8332, 0x1C6D, + 0x8327, 0x1C3C, + 0x831C, 0x1C0B, + 0x8311, 0x1BDA, + 0x8306, 0x1BA9, + 0x82FB, 0x1B78, + 0x82F0, 0x1B47, + 0x82E6, 0x1B16, + 0x82DB, 0x1AE4, + 0x82D0, 0x1AB3, + 0x82C6, 0x1A82, + 0x82BC, 0x1A51, + 0x82B1, 0x1A20, + 0x82A7, 0x19EF, + 0x829D, 0x19BD, + 0x8293, 0x198C, + 0x8289, 0x195B, + 0x827F, 0x192A, + 0x8275, 0x18F8, + 0x826B, 0x18C7, + 0x8262, 0x1896, + 0x8258, 0x1864, + 0x824F, 0x1833, + 0x8245, 0x1802, + 0x823C, 0x17D0, + 0x8232, 0x179F, + 0x8229, 0x176D, + 0x8220, 0x173C, + 0x8217, 0x170A, + 0x820E, 0x16D9, + 0x8205, 0x16A8, + 0x81FC, 0x1676, + 0x81F3, 0x1645, + 0x81EB, 0x1613, + 0x81E2, 0x15E2, + 0x81D9, 0x15B0, + 0x81D1, 0x157F, + 0x81C8, 0x154D, + 0x81C0, 0x151B, + 0x81B8, 0x14EA, + 0x81B0, 0x14B8, + 0x81A8, 0x1487, + 0x81A0, 0x1455, + 0x8198, 0x1423, + 0x8190, 0x13F2, + 0x8188, 0x13C0, + 0x8180, 0x138E, + 0x8179, 0x135D, + 0x8171, 0x132B, + 0x816A, 0x12F9, + 0x8162, 0x12C8, + 0x815B, 0x1296, + 0x8154, 0x1264, + 0x814C, 0x1232, + 0x8145, 0x1201, + 0x813E, 0x11CF, + 0x8137, 0x119D, + 0x8130, 0x116B, + 0x812A, 0x1139, + 0x8123, 0x1108, + 0x811C, 0x10D6, + 0x8116, 0x10A4, + 0x810F, 0x1072, + 0x8109, 0x1040, + 0x8102, 0x100E, + 0x80FC, 0x0FDD, + 0x80F6, 0x0FAB, + 0x80F0, 0x0F79, + 0x80EA, 0x0F47, + 0x80E4, 0x0F15, + 0x80DE, 0x0EE3, + 0x80D8, 0x0EB1, + 0x80D2, 0x0E7F, + 0x80CD, 0x0E4D, + 0x80C7, 0x0E1B, + 0x80C2, 0x0DE9, + 0x80BC, 0x0DB7, + 0x80B7, 0x0D85, + 0x80B2, 0x0D53, + 0x80AC, 0x0D21, + 0x80A7, 0x0CEF, + 0x80A2, 0x0CBD, + 0x809D, 0x0C8B, + 0x8098, 0x0C59, + 0x8094, 0x0C27, + 0x808F, 0x0BF5, + 0x808A, 0x0BC3, + 0x8086, 0x0B91, + 0x8081, 0x0B5F, + 0x807D, 0x0B2D, + 0x8078, 0x0AFB, + 0x8074, 0x0AC9, + 0x8070, 0x0A97, + 0x806C, 0x0A65, + 0x8068, 0x0A33, + 0x8064, 0x0A00, + 0x8060, 0x09CE, + 0x805C, 0x099C, + 0x8058, 0x096A, + 0x8055, 0x0938, + 0x8051, 0x0906, + 0x804E, 0x08D4, + 0x804A, 0x08A2, + 0x8047, 0x086F, + 0x8043, 0x083D, + 0x8040, 0x080B, + 0x803D, 0x07D9, + 0x803A, 0x07A7, + 0x8037, 0x0775, + 0x8034, 0x0742, + 0x8031, 0x0710, + 0x802F, 0x06DE, + 0x802C, 0x06AC, + 0x8029, 0x067A, + 0x8027, 0x0647, + 0x8025, 0x0615, + 0x8022, 0x05E3, + 0x8020, 0x05B1, + 0x801E, 0x057F, + 0x801C, 0x054C, + 0x801A, 0x051A, + 0x8018, 0x04E8, + 0x8016, 0x04B6, + 0x8014, 0x0483, + 0x8012, 0x0451, + 0x8011, 0x041F, + 0x800F, 0x03ED, + 0x800D, 0x03BA, + 0x800C, 0x0388, + 0x800B, 0x0356, + 0x8009, 0x0324, + 0x8008, 0x02F1, + 0x8007, 0x02BF, + 0x8006, 0x028D, + 0x8005, 0x025B, + 0x8004, 0x0228, + 0x8003, 0x01F6, + 0x8003, 0x01C4, + 0x8002, 0x0192, + 0x8001, 0x015F, + 0x8001, 0x012D, + 0x8000, 0x00FB, + 0x8000, 0x00C9, + 0x8000, 0x0096, + 0x8000, 0x0064, + 0x8000, 0x0032, + 0x8000, 0x0000, + 0x8000, 0xFFCD, + 0x8000, 0xFF9B, + 0x8000, 0xFF69, + 0x8000, 0xFF36, + 0x8000, 0xFF04, + 0x8001, 0xFED2, + 0x8001, 0xFEA0, + 0x8002, 0xFE6D, + 0x8003, 0xFE3B, + 0x8003, 0xFE09, + 0x8004, 0xFDD7, + 0x8005, 0xFDA4, + 0x8006, 0xFD72, + 0x8007, 0xFD40, + 0x8008, 0xFD0E, + 0x8009, 0xFCDB, + 0x800B, 0xFCA9, + 0x800C, 0xFC77, + 0x800D, 0xFC45, + 0x800F, 0xFC12, + 0x8011, 0xFBE0, + 0x8012, 0xFBAE, + 0x8014, 0xFB7C, + 0x8016, 0xFB49, + 0x8018, 0xFB17, + 0x801A, 0xFAE5, + 0x801C, 0xFAB3, + 0x801E, 0xFA80, + 0x8020, 0xFA4E, + 0x8022, 0xFA1C, + 0x8025, 0xF9EA, + 0x8027, 0xF9B8, + 0x8029, 0xF985, + 0x802C, 0xF953, + 0x802F, 0xF921, + 0x8031, 0xF8EF, + 0x8034, 0xF8BD, + 0x8037, 0xF88A, + 0x803A, 0xF858, + 0x803D, 0xF826, + 0x8040, 0xF7F4, + 0x8043, 0xF7C2, + 0x8047, 0xF790, + 0x804A, 0xF75D, + 0x804E, 0xF72B, + 0x8051, 0xF6F9, + 0x8055, 0xF6C7, + 0x8058, 0xF695, + 0x805C, 0xF663, + 0x8060, 0xF631, + 0x8064, 0xF5FF, + 0x8068, 0xF5CC, + 0x806C, 0xF59A, + 0x8070, 0xF568, + 0x8074, 0xF536, + 0x8078, 0xF504, + 0x807D, 0xF4D2, + 0x8081, 0xF4A0, + 0x8086, 0xF46E, + 0x808A, 0xF43C, + 0x808F, 0xF40A, + 0x8094, 0xF3D8, + 0x8098, 0xF3A6, + 0x809D, 0xF374, + 0x80A2, 0xF342, + 0x80A7, 0xF310, + 0x80AC, 0xF2DE, + 0x80B2, 0xF2AC, + 0x80B7, 0xF27A, + 0x80BC, 0xF248, + 0x80C2, 0xF216, + 0x80C7, 0xF1E4, + 0x80CD, 0xF1B2, + 0x80D2, 0xF180, + 0x80D8, 0xF14E, + 0x80DE, 0xF11C, + 0x80E4, 0xF0EA, + 0x80EA, 0xF0B8, + 0x80F0, 0xF086, + 0x80F6, 0xF054, + 0x80FC, 0xF022, + 0x8102, 0xEFF1, + 0x8109, 0xEFBF, + 0x810F, 0xEF8D, + 0x8116, 0xEF5B, + 0x811C, 0xEF29, + 0x8123, 0xEEF7, + 0x812A, 0xEEC6, + 0x8130, 0xEE94, + 0x8137, 0xEE62, + 0x813E, 0xEE30, + 0x8145, 0xEDFE, + 0x814C, 0xEDCD, + 0x8154, 0xED9B, + 0x815B, 0xED69, + 0x8162, 0xED37, + 0x816A, 0xED06, + 0x8171, 0xECD4, + 0x8179, 0xECA2, + 0x8180, 0xEC71, + 0x8188, 0xEC3F, + 0x8190, 0xEC0D, + 0x8198, 0xEBDC, + 0x81A0, 0xEBAA, + 0x81A8, 0xEB78, + 0x81B0, 0xEB47, + 0x81B8, 0xEB15, + 0x81C0, 0xEAE4, + 0x81C8, 0xEAB2, + 0x81D1, 0xEA80, + 0x81D9, 0xEA4F, + 0x81E2, 0xEA1D, + 0x81EB, 0xE9EC, + 0x81F3, 0xE9BA, + 0x81FC, 0xE989, + 0x8205, 0xE957, + 0x820E, 0xE926, + 0x8217, 0xE8F5, + 0x8220, 0xE8C3, + 0x8229, 0xE892, + 0x8232, 0xE860, + 0x823C, 0xE82F, + 0x8245, 0xE7FD, + 0x824F, 0xE7CC, + 0x8258, 0xE79B, + 0x8262, 0xE769, + 0x826B, 0xE738, + 0x8275, 0xE707, + 0x827F, 0xE6D5, + 0x8289, 0xE6A4, + 0x8293, 0xE673, + 0x829D, 0xE642, + 0x82A7, 0xE610, + 0x82B1, 0xE5DF, + 0x82BC, 0xE5AE, + 0x82C6, 0xE57D, + 0x82D0, 0xE54C, + 0x82DB, 0xE51B, + 0x82E6, 0xE4E9, + 0x82F0, 0xE4B8, + 0x82FB, 0xE487, + 0x8306, 0xE456, + 0x8311, 0xE425, + 0x831C, 0xE3F4, + 0x8327, 0xE3C3, + 0x8332, 0xE392, + 0x833D, 0xE361, + 0x8348, 0xE330, + 0x8354, 0xE2FF, + 0x835F, 0xE2CE, + 0x836B, 0xE29D, + 0x8376, 0xE26C, + 0x8382, 0xE23B, + 0x838E, 0xE20A, + 0x8399, 0xE1DA, + 0x83A5, 0xE1A9, + 0x83B1, 0xE178, + 0x83BD, 0xE147, + 0x83C9, 0xE116, + 0x83D6, 0xE0E6, + 0x83E2, 0xE0B5, + 0x83EE, 0xE084, + 0x83FA, 0xE053, + 0x8407, 0xE023, + 0x8414, 0xDFF2, + 0x8420, 0xDFC1, + 0x842D, 0xDF91, + 0x843A, 0xDF60, + 0x8446, 0xDF2F, + 0x8453, 0xDEFF, + 0x8460, 0xDECE, + 0x846D, 0xDE9E, + 0x847B, 0xDE6D, + 0x8488, 0xDE3D, + 0x8495, 0xDE0C, + 0x84A2, 0xDDDC, + 0x84B0, 0xDDAB, + 0x84BD, 0xDD7B, + 0x84CB, 0xDD4B, + 0x84D9, 0xDD1A, + 0x84E6, 0xDCEA, + 0x84F4, 0xDCBA, + 0x8502, 0xDC89, + 0x8510, 0xDC59, + 0x851E, 0xDC29, + 0x852C, 0xDBF8, + 0x853A, 0xDBC8, + 0x8549, 0xDB98, + 0x8557, 0xDB68, + 0x8565, 0xDB38, + 0x8574, 0xDB08, + 0x8582, 0xDAD7, + 0x8591, 0xDAA7, + 0x85A0, 0xDA77, + 0x85AF, 0xDA47, + 0x85BD, 0xDA17, + 0x85CC, 0xD9E7, + 0x85DB, 0xD9B7, + 0x85EA, 0xD987, + 0x85FA, 0xD957, + 0x8609, 0xD927, + 0x8618, 0xD8F8, + 0x8627, 0xD8C8, + 0x8637, 0xD898, + 0x8646, 0xD868, + 0x8656, 0xD838, + 0x8666, 0xD809, + 0x8675, 0xD7D9, + 0x8685, 0xD7A9, + 0x8695, 0xD779, + 0x86A5, 0xD74A, + 0x86B5, 0xD71A, + 0x86C5, 0xD6EA, + 0x86D5, 0xD6BB, + 0x86E6, 0xD68B, + 0x86F6, 0xD65C, + 0x8706, 0xD62C, + 0x8717, 0xD5FD, + 0x8727, 0xD5CD, + 0x8738, 0xD59E, + 0x8749, 0xD56E, + 0x8759, 0xD53F, + 0x876A, 0xD510, + 0x877B, 0xD4E0, + 0x878C, 0xD4B1, + 0x879D, 0xD482, + 0x87AE, 0xD452, + 0x87BF, 0xD423, + 0x87D1, 0xD3F4, + 0x87E2, 0xD3C5, + 0x87F3, 0xD396, + 0x8805, 0xD367, + 0x8816, 0xD337, + 0x8828, 0xD308, + 0x883A, 0xD2D9, + 0x884B, 0xD2AA, + 0x885D, 0xD27B, + 0x886F, 0xD24C, + 0x8881, 0xD21D, + 0x8893, 0xD1EE, + 0x88A5, 0xD1C0, + 0x88B8, 0xD191, + 0x88CA, 0xD162, + 0x88DC, 0xD133, + 0x88EF, 0xD104, + 0x8901, 0xD0D6, + 0x8914, 0xD0A7, + 0x8926, 0xD078, + 0x8939, 0xD04A, + 0x894C, 0xD01B, + 0x895F, 0xCFEC, + 0x8971, 0xCFBE, + 0x8984, 0xCF8F, + 0x8997, 0xCF61, + 0x89AB, 0xCF32, + 0x89BE, 0xCF04, + 0x89D1, 0xCED5, + 0x89E4, 0xCEA7, + 0x89F8, 0xCE79, + 0x8A0B, 0xCE4A, + 0x8A1F, 0xCE1C, + 0x8A33, 0xCDEE, + 0x8A46, 0xCDBF, + 0x8A5A, 0xCD91, + 0x8A6E, 0xCD63, + 0x8A82, 0xCD35, + 0x8A96, 0xCD07, + 0x8AAA, 0xCCD9, + 0x8ABE, 0xCCAB, + 0x8AD2, 0xCC7D, + 0x8AE6, 0xCC4F, + 0x8AFB, 0xCC21, + 0x8B0F, 0xCBF3, + 0x8B24, 0xCBC5, + 0x8B38, 0xCB97, + 0x8B4D, 0xCB69, + 0x8B61, 0xCB3B, + 0x8B76, 0xCB0D, + 0x8B8B, 0xCAE0, + 0x8BA0, 0xCAB2, + 0x8BB5, 0xCA84, + 0x8BCA, 0xCA57, + 0x8BDF, 0xCA29, + 0x8BF4, 0xC9FB, + 0x8C09, 0xC9CE, + 0x8C1F, 0xC9A0, + 0x8C34, 0xC973, + 0x8C4A, 0xC945, + 0x8C5F, 0xC918, + 0x8C75, 0xC8EB, + 0x8C8A, 0xC8BD, + 0x8CA0, 0xC890, + 0x8CB6, 0xC863, + 0x8CCC, 0xC835, + 0x8CE2, 0xC808, + 0x8CF8, 0xC7DB, + 0x8D0E, 0xC7AE, + 0x8D24, 0xC781, + 0x8D3A, 0xC754, + 0x8D50, 0xC727, + 0x8D67, 0xC6F9, + 0x8D7D, 0xC6CD, + 0x8D94, 0xC6A0, + 0x8DAA, 0xC673, + 0x8DC1, 0xC646, + 0x8DD8, 0xC619, + 0x8DEE, 0xC5EC, + 0x8E05, 0xC5BF, + 0x8E1C, 0xC593, + 0x8E33, 0xC566, + 0x8E4A, 0xC539, + 0x8E61, 0xC50D, + 0x8E79, 0xC4E0, + 0x8E90, 0xC4B3, + 0x8EA7, 0xC487, + 0x8EBE, 0xC45A, + 0x8ED6, 0xC42E, + 0x8EED, 0xC402, + 0x8F05, 0xC3D5, + 0x8F1D, 0xC3A9, + 0x8F34, 0xC37C, + 0x8F4C, 0xC350, + 0x8F64, 0xC324, + 0x8F7C, 0xC2F8, + 0x8F94, 0xC2CC, + 0x8FAC, 0xC29F, + 0x8FC4, 0xC273, + 0x8FDC, 0xC247, + 0x8FF5, 0xC21B, + 0x900D, 0xC1EF, + 0x9025, 0xC1C3, + 0x903E, 0xC197, + 0x9056, 0xC16C, + 0x906F, 0xC140, + 0x9088, 0xC114, + 0x90A0, 0xC0E8, + 0x90B9, 0xC0BC, + 0x90D2, 0xC091, + 0x90EB, 0xC065, + 0x9104, 0xC03A, + 0x911D, 0xC00E, + 0x9136, 0xBFE2, + 0x9150, 0xBFB7, + 0x9169, 0xBF8C, + 0x9182, 0xBF60, + 0x919C, 0xBF35, + 0x91B5, 0xBF09, + 0x91CF, 0xBEDE, + 0x91E8, 0xBEB3, + 0x9202, 0xBE88, + 0x921C, 0xBE5D, + 0x9235, 0xBE31, + 0x924F, 0xBE06, + 0x9269, 0xBDDB, + 0x9283, 0xBDB0, + 0x929D, 0xBD85, + 0x92B7, 0xBD5A, + 0x92D2, 0xBD2F, + 0x92EC, 0xBD05, + 0x9306, 0xBCDA, + 0x9321, 0xBCAF, + 0x933B, 0xBC84, + 0x9356, 0xBC5A, + 0x9370, 0xBC2F, + 0x938B, 0xBC04, + 0x93A6, 0xBBDA, + 0x93C0, 0xBBAF, + 0x93DB, 0xBB85, + 0x93F6, 0xBB5A, + 0x9411, 0xBB30, + 0x942C, 0xBB05, + 0x9447, 0xBADB, + 0x9463, 0xBAB1, + 0x947E, 0xBA87, + 0x9499, 0xBA5C, + 0x94B5, 0xBA32, + 0x94D0, 0xBA08, + 0x94EC, 0xB9DE, + 0x9507, 0xB9B4, + 0x9523, 0xB98A, + 0x953E, 0xB960, + 0x955A, 0xB936, + 0x9576, 0xB90C, + 0x9592, 0xB8E3, + 0x95AE, 0xB8B9, + 0x95CA, 0xB88F, + 0x95E6, 0xB865, + 0x9602, 0xB83C, + 0x961E, 0xB812, + 0x963B, 0xB7E9, + 0x9657, 0xB7BF, + 0x9673, 0xB796, + 0x9690, 0xB76C, + 0x96AC, 0xB743, + 0x96C9, 0xB719, + 0x96E6, 0xB6F0, + 0x9702, 0xB6C7, + 0x971F, 0xB69E, + 0x973C, 0xB675, + 0x9759, 0xB64B, + 0x9776, 0xB622, + 0x9793, 0xB5F9, + 0x97B0, 0xB5D0, + 0x97CD, 0xB5A7, + 0x97EA, 0xB57E, + 0x9808, 0xB556, + 0x9825, 0xB52D, + 0x9842, 0xB504, + 0x9860, 0xB4DB, + 0x987D, 0xB4B3, + 0x989B, 0xB48A, + 0x98B9, 0xB461, + 0x98D6, 0xB439, + 0x98F4, 0xB410, + 0x9912, 0xB3E8, + 0x9930, 0xB3C0, + 0x994E, 0xB397, + 0x996C, 0xB36F, + 0x998A, 0xB347, + 0x99A8, 0xB31E, + 0x99C6, 0xB2F6, + 0x99E5, 0xB2CE, + 0x9A03, 0xB2A6, + 0x9A22, 0xB27E, + 0x9A40, 0xB256, + 0x9A5F, 0xB22E, + 0x9A7D, 0xB206, + 0x9A9C, 0xB1DE, + 0x9ABA, 0xB1B7, + 0x9AD9, 0xB18F, + 0x9AF8, 0xB167, + 0x9B17, 0xB140, + 0x9B36, 0xB118, + 0x9B55, 0xB0F0, + 0x9B74, 0xB0C9, + 0x9B93, 0xB0A1, + 0x9BB2, 0xB07A, + 0x9BD2, 0xB053, + 0x9BF1, 0xB02B, + 0x9C10, 0xB004, + 0x9C30, 0xAFDD, + 0x9C4F, 0xAFB6, + 0x9C6F, 0xAF8F, + 0x9C8E, 0xAF68, + 0x9CAE, 0xAF40, + 0x9CCE, 0xAF1A, + 0x9CEE, 0xAEF3, + 0x9D0D, 0xAECC, + 0x9D2D, 0xAEA5, + 0x9D4D, 0xAE7E, + 0x9D6D, 0xAE57, + 0x9D8E, 0xAE31, + 0x9DAE, 0xAE0A, + 0x9DCE, 0xADE3, + 0x9DEE, 0xADBD, + 0x9E0E, 0xAD96, + 0x9E2F, 0xAD70, + 0x9E4F, 0xAD4A, + 0x9E70, 0xAD23, + 0x9E90, 0xACFD, + 0x9EB1, 0xACD7, + 0x9ED2, 0xACB1, + 0x9EF2, 0xAC8A, + 0x9F13, 0xAC64, + 0x9F34, 0xAC3E, + 0x9F55, 0xAC18, + 0x9F76, 0xABF2, + 0x9F97, 0xABCC, + 0x9FB8, 0xABA7, + 0x9FD9, 0xAB81, + 0x9FFB, 0xAB5B, + 0xA01C, 0xAB35, + 0xA03D, 0xAB10, + 0xA05F, 0xAAEA, + 0xA080, 0xAAC5, + 0xA0A1, 0xAA9F, + 0xA0C3, 0xAA7A, + 0xA0E5, 0xAA54, + 0xA106, 0xAA2F, + 0xA128, 0xAA0A, + 0xA14A, 0xA9E5, + 0xA16C, 0xA9BF, + 0xA18E, 0xA99A, + 0xA1AF, 0xA975, + 0xA1D2, 0xA950, + 0xA1F4, 0xA92B, + 0xA216, 0xA906, + 0xA238, 0xA8E2, + 0xA25A, 0xA8BD, + 0xA27C, 0xA898, + 0xA29F, 0xA873, + 0xA2C1, 0xA84F, + 0xA2E4, 0xA82A, + 0xA306, 0xA806, + 0xA329, 0xA7E1, + 0xA34B, 0xA7BD, + 0xA36E, 0xA798, + 0xA391, 0xA774, + 0xA3B4, 0xA750, + 0xA3D6, 0xA72B, + 0xA3F9, 0xA707, + 0xA41C, 0xA6E3, + 0xA43F, 0xA6BF, + 0xA462, 0xA69B, + 0xA486, 0xA677, + 0xA4A9, 0xA653, + 0xA4CC, 0xA62F, + 0xA4EF, 0xA60C, + 0xA513, 0xA5E8, + 0xA536, 0xA5C4, + 0xA55A, 0xA5A1, + 0xA57D, 0xA57D, + 0xA5A1, 0xA55A, + 0xA5C4, 0xA536, + 0xA5E8, 0xA513, + 0xA60C, 0xA4EF, + 0xA62F, 0xA4CC, + 0xA653, 0xA4A9, + 0xA677, 0xA486, + 0xA69B, 0xA462, + 0xA6BF, 0xA43F, + 0xA6E3, 0xA41C, + 0xA707, 0xA3F9, + 0xA72B, 0xA3D6, + 0xA750, 0xA3B4, + 0xA774, 0xA391, + 0xA798, 0xA36E, + 0xA7BD, 0xA34B, + 0xA7E1, 0xA329, + 0xA806, 0xA306, + 0xA82A, 0xA2E4, + 0xA84F, 0xA2C1, + 0xA873, 0xA29F, + 0xA898, 0xA27C, + 0xA8BD, 0xA25A, + 0xA8E2, 0xA238, + 0xA906, 0xA216, + 0xA92B, 0xA1F4, + 0xA950, 0xA1D2, + 0xA975, 0xA1AF, + 0xA99A, 0xA18E, + 0xA9BF, 0xA16C, + 0xA9E5, 0xA14A, + 0xAA0A, 0xA128, + 0xAA2F, 0xA106, + 0xAA54, 0xA0E5, + 0xAA7A, 0xA0C3, + 0xAA9F, 0xA0A1, + 0xAAC5, 0xA080, + 0xAAEA, 0xA05F, + 0xAB10, 0xA03D, + 0xAB35, 0xA01C, + 0xAB5B, 0x9FFB, + 0xAB81, 0x9FD9, + 0xABA7, 0x9FB8, + 0xABCC, 0x9F97, + 0xABF2, 0x9F76, + 0xAC18, 0x9F55, + 0xAC3E, 0x9F34, + 0xAC64, 0x9F13, + 0xAC8A, 0x9EF2, + 0xACB1, 0x9ED2, + 0xACD7, 0x9EB1, + 0xACFD, 0x9E90, + 0xAD23, 0x9E70, + 0xAD4A, 0x9E4F, + 0xAD70, 0x9E2F, + 0xAD96, 0x9E0E, + 0xADBD, 0x9DEE, + 0xADE3, 0x9DCE, + 0xAE0A, 0x9DAE, + 0xAE31, 0x9D8E, + 0xAE57, 0x9D6D, + 0xAE7E, 0x9D4D, + 0xAEA5, 0x9D2D, + 0xAECC, 0x9D0D, + 0xAEF3, 0x9CEE, + 0xAF1A, 0x9CCE, + 0xAF40, 0x9CAE, + 0xAF68, 0x9C8E, + 0xAF8F, 0x9C6F, + 0xAFB6, 0x9C4F, + 0xAFDD, 0x9C30, + 0xB004, 0x9C10, + 0xB02B, 0x9BF1, + 0xB053, 0x9BD2, + 0xB07A, 0x9BB2, + 0xB0A1, 0x9B93, + 0xB0C9, 0x9B74, + 0xB0F0, 0x9B55, + 0xB118, 0x9B36, + 0xB140, 0x9B17, + 0xB167, 0x9AF8, + 0xB18F, 0x9AD9, + 0xB1B7, 0x9ABA, + 0xB1DE, 0x9A9C, + 0xB206, 0x9A7D, + 0xB22E, 0x9A5F, + 0xB256, 0x9A40, + 0xB27E, 0x9A22, + 0xB2A6, 0x9A03, + 0xB2CE, 0x99E5, + 0xB2F6, 0x99C6, + 0xB31E, 0x99A8, + 0xB347, 0x998A, + 0xB36F, 0x996C, + 0xB397, 0x994E, + 0xB3C0, 0x9930, + 0xB3E8, 0x9912, + 0xB410, 0x98F4, + 0xB439, 0x98D6, + 0xB461, 0x98B9, + 0xB48A, 0x989B, + 0xB4B3, 0x987D, + 0xB4DB, 0x9860, + 0xB504, 0x9842, + 0xB52D, 0x9825, + 0xB556, 0x9808, + 0xB57E, 0x97EA, + 0xB5A7, 0x97CD, + 0xB5D0, 0x97B0, + 0xB5F9, 0x9793, + 0xB622, 0x9776, + 0xB64B, 0x9759, + 0xB675, 0x973C, + 0xB69E, 0x971F, + 0xB6C7, 0x9702, + 0xB6F0, 0x96E6, + 0xB719, 0x96C9, + 0xB743, 0x96AC, + 0xB76C, 0x9690, + 0xB796, 0x9673, + 0xB7BF, 0x9657, + 0xB7E9, 0x963B, + 0xB812, 0x961E, + 0xB83C, 0x9602, + 0xB865, 0x95E6, + 0xB88F, 0x95CA, + 0xB8B9, 0x95AE, + 0xB8E3, 0x9592, + 0xB90C, 0x9576, + 0xB936, 0x955A, + 0xB960, 0x953E, + 0xB98A, 0x9523, + 0xB9B4, 0x9507, + 0xB9DE, 0x94EC, + 0xBA08, 0x94D0, + 0xBA32, 0x94B5, + 0xBA5C, 0x9499, + 0xBA87, 0x947E, + 0xBAB1, 0x9463, + 0xBADB, 0x9447, + 0xBB05, 0x942C, + 0xBB30, 0x9411, + 0xBB5A, 0x93F6, + 0xBB85, 0x93DB, + 0xBBAF, 0x93C0, + 0xBBDA, 0x93A6, + 0xBC04, 0x938B, + 0xBC2F, 0x9370, + 0xBC5A, 0x9356, + 0xBC84, 0x933B, + 0xBCAF, 0x9321, + 0xBCDA, 0x9306, + 0xBD05, 0x92EC, + 0xBD2F, 0x92D2, + 0xBD5A, 0x92B7, + 0xBD85, 0x929D, + 0xBDB0, 0x9283, + 0xBDDB, 0x9269, + 0xBE06, 0x924F, + 0xBE31, 0x9235, + 0xBE5D, 0x921C, + 0xBE88, 0x9202, + 0xBEB3, 0x91E8, + 0xBEDE, 0x91CF, + 0xBF09, 0x91B5, + 0xBF35, 0x919C, + 0xBF60, 0x9182, + 0xBF8C, 0x9169, + 0xBFB7, 0x9150, + 0xBFE2, 0x9136, + 0xC00E, 0x911D, + 0xC03A, 0x9104, + 0xC065, 0x90EB, + 0xC091, 0x90D2, + 0xC0BC, 0x90B9, + 0xC0E8, 0x90A0, + 0xC114, 0x9088, + 0xC140, 0x906F, + 0xC16C, 0x9056, + 0xC197, 0x903E, + 0xC1C3, 0x9025, + 0xC1EF, 0x900D, + 0xC21B, 0x8FF5, + 0xC247, 0x8FDC, + 0xC273, 0x8FC4, + 0xC29F, 0x8FAC, + 0xC2CC, 0x8F94, + 0xC2F8, 0x8F7C, + 0xC324, 0x8F64, + 0xC350, 0x8F4C, + 0xC37C, 0x8F34, + 0xC3A9, 0x8F1D, + 0xC3D5, 0x8F05, + 0xC402, 0x8EED, + 0xC42E, 0x8ED6, + 0xC45A, 0x8EBE, + 0xC487, 0x8EA7, + 0xC4B3, 0x8E90, + 0xC4E0, 0x8E79, + 0xC50D, 0x8E61, + 0xC539, 0x8E4A, + 0xC566, 0x8E33, + 0xC593, 0x8E1C, + 0xC5BF, 0x8E05, + 0xC5EC, 0x8DEE, + 0xC619, 0x8DD8, + 0xC646, 0x8DC1, + 0xC673, 0x8DAA, + 0xC6A0, 0x8D94, + 0xC6CD, 0x8D7D, + 0xC6F9, 0x8D67, + 0xC727, 0x8D50, + 0xC754, 0x8D3A, + 0xC781, 0x8D24, + 0xC7AE, 0x8D0E, + 0xC7DB, 0x8CF8, + 0xC808, 0x8CE2, + 0xC835, 0x8CCC, + 0xC863, 0x8CB6, + 0xC890, 0x8CA0, + 0xC8BD, 0x8C8A, + 0xC8EB, 0x8C75, + 0xC918, 0x8C5F, + 0xC945, 0x8C4A, + 0xC973, 0x8C34, + 0xC9A0, 0x8C1F, + 0xC9CE, 0x8C09, + 0xC9FB, 0x8BF4, + 0xCA29, 0x8BDF, + 0xCA57, 0x8BCA, + 0xCA84, 0x8BB5, + 0xCAB2, 0x8BA0, + 0xCAE0, 0x8B8B, + 0xCB0D, 0x8B76, + 0xCB3B, 0x8B61, + 0xCB69, 0x8B4D, + 0xCB97, 0x8B38, + 0xCBC5, 0x8B24, + 0xCBF3, 0x8B0F, + 0xCC21, 0x8AFB, + 0xCC4F, 0x8AE6, + 0xCC7D, 0x8AD2, + 0xCCAB, 0x8ABE, + 0xCCD9, 0x8AAA, + 0xCD07, 0x8A96, + 0xCD35, 0x8A82, + 0xCD63, 0x8A6E, + 0xCD91, 0x8A5A, + 0xCDBF, 0x8A46, + 0xCDEE, 0x8A33, + 0xCE1C, 0x8A1F, + 0xCE4A, 0x8A0B, + 0xCE79, 0x89F8, + 0xCEA7, 0x89E4, + 0xCED5, 0x89D1, + 0xCF04, 0x89BE, + 0xCF32, 0x89AB, + 0xCF61, 0x8997, + 0xCF8F, 0x8984, + 0xCFBE, 0x8971, + 0xCFEC, 0x895F, + 0xD01B, 0x894C, + 0xD04A, 0x8939, + 0xD078, 0x8926, + 0xD0A7, 0x8914, + 0xD0D6, 0x8901, + 0xD104, 0x88EF, + 0xD133, 0x88DC, + 0xD162, 0x88CA, + 0xD191, 0x88B8, + 0xD1C0, 0x88A5, + 0xD1EE, 0x8893, + 0xD21D, 0x8881, + 0xD24C, 0x886F, + 0xD27B, 0x885D, + 0xD2AA, 0x884B, + 0xD2D9, 0x883A, + 0xD308, 0x8828, + 0xD337, 0x8816, + 0xD367, 0x8805, + 0xD396, 0x87F3, + 0xD3C5, 0x87E2, + 0xD3F4, 0x87D1, + 0xD423, 0x87BF, + 0xD452, 0x87AE, + 0xD482, 0x879D, + 0xD4B1, 0x878C, + 0xD4E0, 0x877B, + 0xD510, 0x876A, + 0xD53F, 0x8759, + 0xD56E, 0x8749, + 0xD59E, 0x8738, + 0xD5CD, 0x8727, + 0xD5FD, 0x8717, + 0xD62C, 0x8706, + 0xD65C, 0x86F6, + 0xD68B, 0x86E6, + 0xD6BB, 0x86D5, + 0xD6EA, 0x86C5, + 0xD71A, 0x86B5, + 0xD74A, 0x86A5, + 0xD779, 0x8695, + 0xD7A9, 0x8685, + 0xD7D9, 0x8675, + 0xD809, 0x8666, + 0xD838, 0x8656, + 0xD868, 0x8646, + 0xD898, 0x8637, + 0xD8C8, 0x8627, + 0xD8F8, 0x8618, + 0xD927, 0x8609, + 0xD957, 0x85FA, + 0xD987, 0x85EA, + 0xD9B7, 0x85DB, + 0xD9E7, 0x85CC, + 0xDA17, 0x85BD, + 0xDA47, 0x85AF, + 0xDA77, 0x85A0, + 0xDAA7, 0x8591, + 0xDAD7, 0x8582, + 0xDB08, 0x8574, + 0xDB38, 0x8565, + 0xDB68, 0x8557, + 0xDB98, 0x8549, + 0xDBC8, 0x853A, + 0xDBF8, 0x852C, + 0xDC29, 0x851E, + 0xDC59, 0x8510, + 0xDC89, 0x8502, + 0xDCBA, 0x84F4, + 0xDCEA, 0x84E6, + 0xDD1A, 0x84D9, + 0xDD4B, 0x84CB, + 0xDD7B, 0x84BD, + 0xDDAB, 0x84B0, + 0xDDDC, 0x84A2, + 0xDE0C, 0x8495, + 0xDE3D, 0x8488, + 0xDE6D, 0x847B, + 0xDE9E, 0x846D, + 0xDECE, 0x8460, + 0xDEFF, 0x8453, + 0xDF2F, 0x8446, + 0xDF60, 0x843A, + 0xDF91, 0x842D, + 0xDFC1, 0x8420, + 0xDFF2, 0x8414, + 0xE023, 0x8407, + 0xE053, 0x83FA, + 0xE084, 0x83EE, + 0xE0B5, 0x83E2, + 0xE0E6, 0x83D6, + 0xE116, 0x83C9, + 0xE147, 0x83BD, + 0xE178, 0x83B1, + 0xE1A9, 0x83A5, + 0xE1DA, 0x8399, + 0xE20A, 0x838E, + 0xE23B, 0x8382, + 0xE26C, 0x8376, + 0xE29D, 0x836B, + 0xE2CE, 0x835F, + 0xE2FF, 0x8354, + 0xE330, 0x8348, + 0xE361, 0x833D, + 0xE392, 0x8332, + 0xE3C3, 0x8327, + 0xE3F4, 0x831C, + 0xE425, 0x8311, + 0xE456, 0x8306, + 0xE487, 0x82FB, + 0xE4B8, 0x82F0, + 0xE4E9, 0x82E6, + 0xE51B, 0x82DB, + 0xE54C, 0x82D0, + 0xE57D, 0x82C6, + 0xE5AE, 0x82BC, + 0xE5DF, 0x82B1, + 0xE610, 0x82A7, + 0xE642, 0x829D, + 0xE673, 0x8293, + 0xE6A4, 0x8289, + 0xE6D5, 0x827F, + 0xE707, 0x8275, + 0xE738, 0x826B, + 0xE769, 0x8262, + 0xE79B, 0x8258, + 0xE7CC, 0x824F, + 0xE7FD, 0x8245, + 0xE82F, 0x823C, + 0xE860, 0x8232, + 0xE892, 0x8229, + 0xE8C3, 0x8220, + 0xE8F5, 0x8217, + 0xE926, 0x820E, + 0xE957, 0x8205, + 0xE989, 0x81FC, + 0xE9BA, 0x81F3, + 0xE9EC, 0x81EB, + 0xEA1D, 0x81E2, + 0xEA4F, 0x81D9, + 0xEA80, 0x81D1, + 0xEAB2, 0x81C8, + 0xEAE4, 0x81C0, + 0xEB15, 0x81B8, + 0xEB47, 0x81B0, + 0xEB78, 0x81A8, + 0xEBAA, 0x81A0, + 0xEBDC, 0x8198, + 0xEC0D, 0x8190, + 0xEC3F, 0x8188, + 0xEC71, 0x8180, + 0xECA2, 0x8179, + 0xECD4, 0x8171, + 0xED06, 0x816A, + 0xED37, 0x8162, + 0xED69, 0x815B, + 0xED9B, 0x8154, + 0xEDCD, 0x814C, + 0xEDFE, 0x8145, + 0xEE30, 0x813E, + 0xEE62, 0x8137, + 0xEE94, 0x8130, + 0xEEC6, 0x812A, + 0xEEF7, 0x8123, + 0xEF29, 0x811C, + 0xEF5B, 0x8116, + 0xEF8D, 0x810F, + 0xEFBF, 0x8109, + 0xEFF1, 0x8102, + 0xF022, 0x80FC, + 0xF054, 0x80F6, + 0xF086, 0x80F0, + 0xF0B8, 0x80EA, + 0xF0EA, 0x80E4, + 0xF11C, 0x80DE, + 0xF14E, 0x80D8, + 0xF180, 0x80D2, + 0xF1B2, 0x80CD, + 0xF1E4, 0x80C7, + 0xF216, 0x80C2, + 0xF248, 0x80BC, + 0xF27A, 0x80B7, + 0xF2AC, 0x80B2, + 0xF2DE, 0x80AC, + 0xF310, 0x80A7, + 0xF342, 0x80A2, + 0xF374, 0x809D, + 0xF3A6, 0x8098, + 0xF3D8, 0x8094, + 0xF40A, 0x808F, + 0xF43C, 0x808A, + 0xF46E, 0x8086, + 0xF4A0, 0x8081, + 0xF4D2, 0x807D, + 0xF504, 0x8078, + 0xF536, 0x8074, + 0xF568, 0x8070, + 0xF59A, 0x806C, + 0xF5CC, 0x8068, + 0xF5FF, 0x8064, + 0xF631, 0x8060, + 0xF663, 0x805C, + 0xF695, 0x8058, + 0xF6C7, 0x8055, + 0xF6F9, 0x8051, + 0xF72B, 0x804E, + 0xF75D, 0x804A, + 0xF790, 0x8047, + 0xF7C2, 0x8043, + 0xF7F4, 0x8040, + 0xF826, 0x803D, + 0xF858, 0x803A, + 0xF88A, 0x8037, + 0xF8BD, 0x8034, + 0xF8EF, 0x8031, + 0xF921, 0x802F, + 0xF953, 0x802C, + 0xF985, 0x8029, + 0xF9B8, 0x8027, + 0xF9EA, 0x8025, + 0xFA1C, 0x8022, + 0xFA4E, 0x8020, + 0xFA80, 0x801E, + 0xFAB3, 0x801C, + 0xFAE5, 0x801A, + 0xFB17, 0x8018, + 0xFB49, 0x8016, + 0xFB7C, 0x8014, + 0xFBAE, 0x8012, + 0xFBE0, 0x8011, + 0xFC12, 0x800F, + 0xFC45, 0x800D, + 0xFC77, 0x800C, + 0xFCA9, 0x800B, + 0xFCDB, 0x8009, + 0xFD0E, 0x8008, + 0xFD40, 0x8007, + 0xFD72, 0x8006, + 0xFDA4, 0x8005, + 0xFDD7, 0x8004, + 0xFE09, 0x8003, + 0xFE3B, 0x8003, + 0xFE6D, 0x8002, + 0xFEA0, 0x8001, + 0xFED2, 0x8001, + 0xFF04, 0x8000, + 0xFF36, 0x8000, + 0xFF69, 0x8000, + 0xFF9B, 0x8000, + 0xFFCD, 0x8000 +}; + + +/** +* @} end of CFFT_CIFFT group +*/ + +/* +* @brief Q15 table for reciprocal +*/ +const q15_t ALIGN4 armRecipTableQ15[64] = { + 0x7F03, 0x7D13, 0x7B31, 0x795E, 0x7798, 0x75E0, + 0x7434, 0x7294, 0x70FF, 0x6F76, 0x6DF6, 0x6C82, + 0x6B16, 0x69B5, 0x685C, 0x670C, 0x65C4, 0x6484, + 0x634C, 0x621C, 0x60F3, 0x5FD0, 0x5EB5, 0x5DA0, + 0x5C91, 0x5B88, 0x5A85, 0x5988, 0x5890, 0x579E, + 0x56B0, 0x55C8, 0x54E4, 0x5405, 0x532B, 0x5255, + 0x5183, 0x50B6, 0x4FEC, 0x4F26, 0x4E64, 0x4DA6, + 0x4CEC, 0x4C34, 0x4B81, 0x4AD0, 0x4A23, 0x4978, + 0x48D1, 0x482D, 0x478C, 0x46ED, 0x4651, 0x45B8, + 0x4521, 0x448D, 0x43FC, 0x436C, 0x42DF, 0x4255, + 0x41CC, 0x4146, 0x40C2, 0x4040 +}; + +/* +* @brief Q31 table for reciprocal +*/ +const q31_t armRecipTableQ31[64] = { + 0x7F03F03F, 0x7D137420, 0x7B31E739, 0x795E9F94, 0x7798FD29, 0x75E06928, + 0x7434554D, 0x72943B4B, 0x70FF9C40, 0x6F760031, 0x6DF6F593, 0x6C8210E3, + 0x6B16EC3A, 0x69B526F6, 0x685C655F, 0x670C505D, 0x65C4952D, 0x6484E519, + 0x634CF53E, 0x621C7E4F, 0x60F33C61, 0x5FD0EEB3, 0x5EB55785, 0x5DA03BEB, + 0x5C9163A1, 0x5B8898E6, 0x5A85A85A, 0x598860DF, 0x58909373, 0x579E1318, + 0x56B0B4B8, 0x55C84F0B, 0x54E4BA80, 0x5405D124, 0x532B6E8F, 0x52556FD0, + 0x5183B35A, 0x50B618F3, 0x4FEC81A2, 0x4F26CFA2, 0x4E64E64E, 0x4DA6AA1D, + 0x4CEC008B, 0x4C34D010, 0x4B810016, 0x4AD078EF, 0x4A2323C4, 0x4978EA96, + 0x48D1B827, 0x482D77FE, 0x478C1657, 0x46ED801D, 0x4651A2E5, 0x45B86CE2, + 0x4521CCE1, 0x448DB244, 0x43FC0CFA, 0x436CCD78, 0x42DFE4B4, 0x42554426, + 0x41CCDDB6, 0x4146A3C6, 0x40C28923, 0x40408102 +}; + +const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE__16_TABLE_LENGTH] = +{ + //8x2, size 20 + 8,64, 24,72, 16,64, 40,80, 32,64, 56,88, 48,72, 88,104, 72,96, 104,112 +}; + +const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE__32_TABLE_LENGTH] = +{ + //8x4, size 48 + 8,64, 16,128, 24,192, 32,64, 40,72, 48,136, 56,200, 64,128, 72,80, 88,208, + 80,144, 96,192, 104,208, 112,152, 120,216, 136,192, 144,160, 168,208, + 152,224, 176,208, 184,232, 216,240, 200,224, 232,240 +}; + +const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE__64_TABLE_LENGTH] = +{ + //radix 8, size 56 + 8,64, 16,128, 24,192, 32,256, 40,320, 48,384, 56,448, 80,136, 88,200, + 96,264, 104,328, 112,392, 120,456, 152,208, 160,272, 168,336, 176,400, + 184,464, 224,280, 232,344, 240,408, 248,472, 296,352, 304,416, 312,480, + 368,424, 376,488, 440,496 +}; + +const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH] = +{ + //8x2, size 208 + 8,512, 16,64, 24,576, 32,128, 40,640, 48,192, 56,704, 64,256, 72,768, + 80,320, 88,832, 96,384, 104,896, 112,448, 120,960, 128,512, 136,520, + 144,768, 152,584, 160,520, 168,648, 176,200, 184,712, 192,264, 200,776, + 208,328, 216,840, 224,392, 232,904, 240,456, 248,968, 264,528, 272,320, + 280,592, 288,768, 296,656, 304,328, 312,720, 328,784, 344,848, 352,400, + 360,912, 368,464, 376,976, 384,576, 392,536, 400,832, 408,600, 416,584, + 424,664, 432,840, 440,728, 448,592, 456,792, 464,848, 472,856, 480,600, + 488,920, 496,856, 504,984, 520,544, 528,576, 536,608, 552,672, 560,608, + 568,736, 576,768, 584,800, 592,832, 600,864, 608,800, 616,928, 624,864, + 632,992, 648,672, 656,896, 664,928, 688,904, 696,744, 704,896, 712,808, + 720,912, 728,872, 736,928, 744,936, 752,920, 760,1000, 776,800, 784,832, + 792,864, 808,904, 816,864, 824,920, 840,864, 856,880, 872,944, 888,1008, + 904,928, 912,960, 920,992, 944,968, 952,1000, 968,992, 984,1008 +}; + +const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH] = +{ + //8x4, size 440 + 8,512, 16,1024, 24,1536, 32,64, 40,576, 48,1088, 56,1600, 64,128, 72,640, + 80,1152, 88,1664, 96,192, 104,704, 112,1216, 120,1728, 128,256, 136,768, + 144,1280, 152,1792, 160,320, 168,832, 176,1344, 184,1856, 192,384, + 200,896, 208,1408, 216,1920, 224,448, 232,960, 240,1472, 248,1984, + 256,512, 264,520, 272,1032, 280,1544, 288,640, 296,584, 304,1096, 312,1608, + 320,768, 328,648, 336,1160, 344,1672, 352,896, 360,712, 368,1224, 376,1736, + 384,520, 392,776, 400,1288, 408,1800, 416,648, 424,840, 432,1352, 440,1864, + 448,776, 456,904, 464,1416, 472,1928, 480,904, 488,968, 496,1480, 504,1992, + 520,528, 512,1024, 528,1040, 536,1552, 544,1152, 552,592, 560,1104, + 568,1616, 576,1280, 584,656, 592,1168, 600,1680, 608,1408, 616,720, + 624,1232, 632,1744, 640,1032, 648,784, 656,1296, 664,1808, 672,1160, + 680,848, 688,1360, 696,1872, 704,1288, 712,912, 720,1424, 728,1936, + 736,1416, 744,976, 752,1488, 760,2000, 768,1536, 776,1552, 784,1048, + 792,1560, 800,1664, 808,1680, 816,1112, 824,1624, 832,1792, 840,1808, + 848,1176, 856,1688, 864,1920, 872,1936, 880,1240, 888,1752, 896,1544, + 904,1560, 912,1304, 920,1816, 928,1672, 936,1688, 944,1368, 952,1880, + 960,1800, 968,1816, 976,1432, 984,1944, 992,1928, 1000,1944, 1008,1496, + 1016,2008, 1032,1152, 1040,1056, 1048,1568, 1064,1408, 1072,1120, + 1080,1632, 1088,1536, 1096,1160, 1104,1184, 1112,1696, 1120,1552, + 1128,1416, 1136,1248, 1144,1760, 1160,1664, 1168,1312, 1176,1824, + 1184,1544, 1192,1920, 1200,1376, 1208,1888, 1216,1568, 1224,1672, + 1232,1440, 1240,1952, 1248,1560, 1256,1928, 1264,1504, 1272,2016, + 1288,1312, 1296,1408, 1304,1576, 1320,1424, 1328,1416, 1336,1640, + 1344,1792, 1352,1824, 1360,1920, 1368,1704, 1376,1800, 1384,1432, + 1392,1928, 1400,1768, 1416,1680, 1432,1832, 1440,1576, 1448,1936, + 1456,1832, 1464,1896, 1472,1808, 1480,1688, 1488,1936, 1496,1960, + 1504,1816, 1512,1944, 1520,1944, 1528,2024, 1560,1584, 1592,1648, + 1600,1792, 1608,1920, 1616,1800, 1624,1712, 1632,1808, 1640,1936, + 1648,1816, 1656,1776, 1672,1696, 1688,1840, 1704,1952, 1712,1928, + 1720,1904, 1728,1824, 1736,1952, 1744,1832, 1752,1968, 1760,1840, + 1768,1960, 1776,1944, 1784,2032, 1864,1872, 1848,1944, 1872,1888, + 1880,1904, 1888,1984, 1896,2000, 1912,2032, 1904,2016, 1976,2032, + 1960,1968, 2008,2032, 1992,2016, 2024,2032 +}; + +const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH] = +{ + //radix 8, size 448 + 8,512, 16,1024, 24,1536, 32,2048, 40,2560, 48,3072, 56,3584, 72,576, + 80,1088, 88,1600, 96,2112, 104,2624, 112,3136, 120,3648, 136,640, 144,1152, + 152,1664, 160,2176, 168,2688, 176,3200, 184,3712, 200,704, 208,1216, + 216,1728, 224,2240, 232,2752, 240,3264, 248,3776, 264,768, 272,1280, + 280,1792, 288,2304, 296,2816, 304,3328, 312,3840, 328,832, 336,1344, + 344,1856, 352,2368, 360,2880, 368,3392, 376,3904, 392,896, 400,1408, + 408,1920, 416,2432, 424,2944, 432,3456, 440,3968, 456,960, 464,1472, + 472,1984, 480,2496, 488,3008, 496,3520, 504,4032, 528,1032, 536,1544, + 544,2056, 552,2568, 560,3080, 568,3592, 592,1096, 600,1608, 608,2120, + 616,2632, 624,3144, 632,3656, 656,1160, 664,1672, 672,2184, 680,2696, + 688,3208, 696,3720, 720,1224, 728,1736, 736,2248, 744,2760, 752,3272, + 760,3784, 784,1288, 792,1800, 800,2312, 808,2824, 816,3336, 824,3848, + 848,1352, 856,1864, 864,2376, 872,2888, 880,3400, 888,3912, 912,1416, + 920,1928, 928,2440, 936,2952, 944,3464, 952,3976, 976,1480, 984,1992, + 992,2504, 1000,3016, 1008,3528, 1016,4040, 1048,1552, 1056,2064, 1064,2576, + 1072,3088, 1080,3600, 1112,1616, 1120,2128, 1128,2640, 1136,3152, + 1144,3664, 1176,1680, 1184,2192, 1192,2704, 1200,3216, 1208,3728, + 1240,1744, 1248,2256, 1256,2768, 1264,3280, 1272,3792, 1304,1808, + 1312,2320, 1320,2832, 1328,3344, 1336,3856, 1368,1872, 1376,2384, + 1384,2896, 1392,3408, 1400,3920, 1432,1936, 1440,2448, 1448,2960, + 1456,3472, 1464,3984, 1496,2000, 1504,2512, 1512,3024, 1520,3536, + 1528,4048, 1568,2072, 1576,2584, 1584,3096, 1592,3608, 1632,2136, + 1640,2648, 1648,3160, 1656,3672, 1696,2200, 1704,2712, 1712,3224, + 1720,3736, 1760,2264, 1768,2776, 1776,3288, 1784,3800, 1824,2328, + 1832,2840, 1840,3352, 1848,3864, 1888,2392, 1896,2904, 1904,3416, + 1912,3928, 1952,2456, 1960,2968, 1968,3480, 1976,3992, 2016,2520, + 2024,3032, 2032,3544, 2040,4056, 2088,2592, 2096,3104, 2104,3616, + 2152,2656, 2160,3168, 2168,3680, 2216,2720, 2224,3232, 2232,3744, + 2280,2784, 2288,3296, 2296,3808, 2344,2848, 2352,3360, 2360,3872, + 2408,2912, 2416,3424, 2424,3936, 2472,2976, 2480,3488, 2488,4000, + 2536,3040, 2544,3552, 2552,4064, 2608,3112, 2616,3624, 2672,3176, + 2680,3688, 2736,3240, 2744,3752, 2800,3304, 2808,3816, 2864,3368, + 2872,3880, 2928,3432, 2936,3944, 2992,3496, 3000,4008, 3056,3560, + 3064,4072, 3128,3632, 3192,3696, 3256,3760, 3320,3824, 3384,3888, + 3448,3952, 3512,4016, 3576,4080 +}; + +const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE1024_TABLE_LENGTH] = +{ + //8x2, size 1800 + 8,4096, 16,512, 24,4608, 32,1024, 40,5120, 48,1536, 56,5632, 64,2048, + 72,6144, 80,2560, 88,6656, 96,3072, 104,7168, 112,3584, 120,7680, 128,2048, + 136,4160, 144,576, 152,4672, 160,1088, 168,5184, 176,1600, 184,5696, + 192,2112, 200,6208, 208,2624, 216,6720, 224,3136, 232,7232, 240,3648, + 248,7744, 256,2048, 264,4224, 272,640, 280,4736, 288,1152, 296,5248, + 304,1664, 312,5760, 320,2176, 328,6272, 336,2688, 344,6784, 352,3200, + 360,7296, 368,3712, 376,7808, 384,2112, 392,4288, 400,704, 408,4800, + 416,1216, 424,5312, 432,1728, 440,5824, 448,2240, 456,6336, 464,2752, + 472,6848, 480,3264, 488,7360, 496,3776, 504,7872, 512,2048, 520,4352, + 528,768, 536,4864, 544,1280, 552,5376, 560,1792, 568,5888, 576,2304, + 584,6400, 592,2816, 600,6912, 608,3328, 616,7424, 624,3840, 632,7936, + 640,2176, 648,4416, 656,832, 664,4928, 672,1344, 680,5440, 688,1856, + 696,5952, 704,2368, 712,6464, 720,2880, 728,6976, 736,3392, 744,7488, + 752,3904, 760,8000, 768,2112, 776,4480, 784,896, 792,4992, 800,1408, + 808,5504, 816,1920, 824,6016, 832,2432, 840,6528, 848,2944, 856,7040, + 864,3456, 872,7552, 880,3968, 888,8064, 896,2240, 904,4544, 912,960, + 920,5056, 928,1472, 936,5568, 944,1984, 952,6080, 960,2496, 968,6592, + 976,3008, 984,7104, 992,3520, 1000,7616, 1008,4032, 1016,8128, 1024,4096, + 1032,4104, 1040,4352, 1048,4616, 1056,4104, 1064,5128, 1072,1544, + 1080,5640, 1088,2056, 1096,6152, 1104,2568, 1112,6664, 1120,3080, + 1128,7176, 1136,3592, 1144,7688, 1152,6144, 1160,4168, 1168,6400, + 1176,4680, 1184,6152, 1192,5192, 1200,1608, 1208,5704, 1216,2120, + 1224,6216, 1232,2632, 1240,6728, 1248,3144, 1256,7240, 1264,3656, + 1272,7752, 1280,4160, 1288,4232, 1296,4416, 1304,4744, 1312,4168, + 1320,5256, 1328,1672, 1336,5768, 1344,2184, 1352,6280, 1360,2696, + 1368,6792, 1376,3208, 1384,7304, 1392,3720, 1400,7816, 1408,6208, + 1416,4296, 1424,6464, 1432,4808, 1440,6216, 1448,5320, 1456,1736, + 1464,5832, 1472,2248, 1480,6344, 1488,2760, 1496,6856, 1504,3272, + 1512,7368, 1520,3784, 1528,7880, 1536,4224, 1544,4360, 1552,4480, + 1560,4872, 1568,4232, 1576,5384, 1584,1800, 1592,5896, 1600,2312, + 1608,6408, 1616,2824, 1624,6920, 1632,3336, 1640,7432, 1648,3848, + 1656,7944, 1664,6272, 1672,4424, 1680,6528, 1688,4936, 1696,6280, + 1704,5448, 1712,1864, 1720,5960, 1728,2376, 1736,6472, 1744,2888, + 1752,6984, 1760,3400, 1768,7496, 1776,3912, 1784,8008, 1792,4288, + 1800,4488, 1808,4544, 1816,5000, 1824,4296, 1832,5512, 1840,1928, + 1848,6024, 1856,2440, 1864,6536, 1872,2952, 1880,7048, 1888,3464, + 1896,7560, 1904,3976, 1912,8072, 1920,6336, 1928,4552, 1936,6592, + 1944,5064, 1952,6344, 1960,5576, 1968,1992, 1976,6088, 1984,2504, + 1992,6600, 2000,3016, 2008,7112, 2016,3528, 2024,7624, 2032,4040, + 2040,8136, 2056,4112, 2064,2112, 2072,4624, 2080,4352, 2088,5136, + 2096,4480, 2104,5648, 2120,6160, 2128,2576, 2136,6672, 2144,3088, + 2152,7184, 2160,3600, 2168,7696, 2176,2560, 2184,4176, 2192,2816, + 2200,4688, 2208,2568, 2216,5200, 2224,2824, 2232,5712, 2240,2576, + 2248,6224, 2256,2640, 2264,6736, 2272,3152, 2280,7248, 2288,3664, + 2296,7760, 2312,4240, 2320,2432, 2328,4752, 2336,6400, 2344,5264, + 2352,6528, 2360,5776, 2368,2816, 2376,6288, 2384,2704, 2392,6800, + 2400,3216, 2408,7312, 2416,3728, 2424,7824, 2432,2624, 2440,4304, + 2448,2880, 2456,4816, 2464,2632, 2472,5328, 2480,2888, 2488,5840, + 2496,2640, 2504,6352, 2512,2768, 2520,6864, 2528,3280, 2536,7376, + 2544,3792, 2552,7888, 2568,4368, 2584,4880, 2592,4416, 2600,5392, + 2608,4544, 2616,5904, 2632,6416, 2640,2832, 2648,6928, 2656,3344, + 2664,7440, 2672,3856, 2680,7952, 2696,4432, 2704,2944, 2712,4944, + 2720,4432, 2728,5456, 2736,2952, 2744,5968, 2752,2944, 2760,6480, + 2768,2896, 2776,6992, 2784,3408, 2792,7504, 2800,3920, 2808,8016, + 2824,4496, 2840,5008, 2848,6464, 2856,5520, 2864,6592, 2872,6032, + 2888,6544, 2896,2960, 2904,7056, 2912,3472, 2920,7568, 2928,3984, + 2936,8080, 2952,4560, 2960,3008, 2968,5072, 2976,6480, 2984,5584, + 2992,3016, 3000,6096, 3016,6608, 3032,7120, 3040,3536, 3048,7632, + 3056,4048, 3064,8144, 3072,4608, 3080,4120, 3088,4864, 3096,4632, + 3104,4616, 3112,5144, 3120,4872, 3128,5656, 3136,4624, 3144,6168, + 3152,4880, 3160,6680, 3168,4632, 3176,7192, 3184,3608, 3192,7704, + 3200,6656, 3208,4184, 3216,6912, 3224,4696, 3232,6664, 3240,5208, + 3248,6920, 3256,5720, 3264,6672, 3272,6232, 3280,6928, 3288,6744, + 3296,6680, 3304,7256, 3312,3672, 3320,7768, 3328,4672, 3336,4248, + 3344,4928, 3352,4760, 3360,4680, 3368,5272, 3376,4936, 3384,5784, + 3392,4688, 3400,6296, 3408,4944, 3416,6808, 3424,4696, 3432,7320, + 3440,3736, 3448,7832, 3456,6720, 3464,4312, 3472,6976, 3480,4824, + 3488,6728, 3496,5336, 3504,6984, 3512,5848, 3520,6736, 3528,6360, + 3536,6992, 3544,6872, 3552,6744, 3560,7384, 3568,3800, 3576,7896, + 3584,4736, 3592,4376, 3600,4992, 3608,4888, 3616,4744, 3624,5400, + 3632,5000, 3640,5912, 3648,4752, 3656,6424, 3664,5008, 3672,6936, + 3680,4760, 3688,7448, 3696,3864, 3704,7960, 3712,6784, 3720,4440, + 3728,7040, 3736,4952, 3744,6792, 3752,5464, 3760,7048, 3768,5976, + 3776,6800, 3784,6488, 3792,7056, 3800,7000, 3808,6808, 3816,7512, + 3824,3928, 3832,8024, 3840,4800, 3848,4504, 3856,5056, 3864,5016, + 3872,4808, 3880,5528, 3888,5064, 3896,6040, 3904,4816, 3912,6552, + 3920,5072, 3928,7064, 3936,4824, 3944,7576, 3952,3992, 3960,8088, + 3968,6848, 3976,4568, 3984,7104, 3992,5080, 4000,6856, 4008,5592, + 4016,7112, 4024,6104, 4032,6864, 4040,6616, 4048,7120, 4056,7128, + 4064,6872, 4072,7640, 4080,7128, 4088,8152, 4104,4128, 4112,4160, + 4120,4640, 4136,5152, 4144,4232, 4152,5664, 4160,4352, 4168,6176, + 4176,4416, 4184,6688, 4192,4616, 4200,7200, 4208,4744, 4216,7712, + 4224,4608, 4232,4616, 4240,4672, 4248,4704, 4256,4640, 4264,5216, + 4272,4704, 4280,5728, 4288,4864, 4296,6240, 4304,4928, 4312,6752, + 4320,4632, 4328,7264, 4336,4760, 4344,7776, 4360,4640, 4368,4416, + 4376,4768, 4384,6152, 4392,5280, 4400,6280, 4408,5792, 4424,6304, + 4440,6816, 4448,6664, 4456,7328, 4464,6792, 4472,7840, 4480,4624, + 4488,4632, 4496,4688, 4504,4832, 4512,6168, 4520,5344, 4528,6296, + 4536,5856, 4544,4880, 4552,6368, 4560,4944, 4568,6880, 4576,6680, + 4584,7392, 4592,6808, 4600,7904, 4608,6144, 4616,6152, 4624,6208, + 4632,4896, 4640,6176, 4648,5408, 4656,6240, 4664,5920, 4672,6400, + 4680,6432, 4688,6464, 4696,6944, 4704,6432, 4712,7456, 4720,4808, + 4728,7968, 4736,6656, 4744,6664, 4752,6720, 4760,4960, 4768,6688, + 4776,5472, 4784,6752, 4792,5984, 4800,6912, 4808,6496, 4816,6976, + 4824,7008, 4832,6944, 4840,7520, 4848,7008, 4856,8032, 4864,6160, + 4872,6168, 4880,6224, 4888,5024, 4896,6216, 4904,5536, 4912,6344, + 4920,6048, 4928,6416, 4936,6560, 4944,6480, 4952,7072, 4960,6728, + 4968,7584, 4976,6856, 4984,8096, 4992,6672, 5000,6680, 5008,6736, + 5016,5088, 5024,6232, 5032,5600, 5040,6360, 5048,6112, 5056,6928, + 5064,6624, 5072,6992, 5080,7136, 5088,6744, 5096,7648, 5104,6872, + 5112,8160, 5128,5152, 5136,5376, 5144,5408, 5168,5384, 5176,5672, + 5184,5376, 5192,6184, 5200,5392, 5208,6696, 5216,5408, 5224,7208, + 5232,5400, 5240,7720, 5248,7168, 5256,7200, 5264,7424, 5272,7456, + 5280,7176, 5288,7208, 5296,7432, 5304,5736, 5312,7184, 5320,6248, + 5328,7440, 5336,6760, 5344,7192, 5352,7272, 5360,7448, 5368,7784, + 5384,5408, 5392,5440, 5400,5472, 5408,6184, 5416,7208, 5424,5448, + 5432,5800, 5448,6312, 5464,6824, 5472,6696, 5480,7336, 5488,6824, + 5496,7848, 5504,7232, 5512,7264, 5520,7488, 5528,7520, 5536,7240, + 5544,7272, 5552,7496, 5560,5864, 5568,7248, 5576,6376, 5584,7504, + 5592,6888, 5600,7256, 5608,7400, 5616,7512, 5624,7912, 5632,7168, + 5640,7176, 5648,7232, 5656,7240, 5664,7200, 5672,7208, 5680,7264, + 5688,5928, 5696,7424, 5704,6440, 5712,7488, 5720,6952, 5728,7456, + 5736,7464, 5744,7520, 5752,7976, 5760,7296, 5768,7328, 5776,7552, + 5784,7584, 5792,7304, 5800,7336, 5808,7560, 5816,5992, 5824,7312, + 5832,6504, 5840,7568, 5848,7016, 5856,7320, 5864,7528, 5872,7576, + 5880,8040, 5888,7184, 5896,7192, 5904,7248, 5912,7256, 5920,6248, + 5928,7272, 5936,6376, 5944,6056, 5952,7440, 5960,6568, 5968,7504, + 5976,7080, 5984,6760, 5992,7592, 6000,6888, 6008,8104, 6016,7360, + 6024,7392, 6032,7616, 6040,7648, 6048,7368, 6056,7400, 6064,7624, + 6072,6120, 6080,7376, 6088,6632, 6096,7632, 6104,7144, 6112,7384, + 6120,7656, 6128,7640, 6136,8168, 6168,6240, 6192,6216, 6200,7264, + 6232,6704, 6248,7216, 6256,6680, 6264,7728, 6272,6656, 6280,6664, + 6288,6912, 6296,6496, 6304,6688, 6312,6696, 6320,6944, 6328,7520, + 6336,6672, 6344,6680, 6352,6928, 6360,6768, 6368,6704, 6376,7280, + 6384,6744, 6392,7792, 6408,6432, 6424,6752, 6440,7432, 6448,6536, + 6456,7560, 6472,6944, 6488,6832, 6496,6920, 6504,7344, 6512,7048, + 6520,7856, 6528,6720, 6536,6728, 6544,6976, 6552,7008, 6560,6752, + 6568,7448, 6576,7008, 6584,7576, 6592,6736, 6600,6744, 6608,6992, + 6616,6896, 6624,6936, 6632,7408, 6640,7064, 6648,7920, 6712,7280, + 6744,6960, 6760,7472, 6768,6936, 6776,7984, 6800,6848, 6808,6856, + 6832,6880, 6840,6888, 6848,7040, 6856,7048, 6864,7104, 6872,7024, + 6880,7072, 6888,7536, 6896,7136, 6904,8048, 6952,7496, 6968,7624, + 6984,7008, 7000,7088, 7016,7600, 7024,7112, 7032,8112, 7056,7104, + 7064,7112, 7080,7512, 7088,7136, 7096,7640, 7128,7152, 7144,7664, + 7160,8176, 7176,7200, 7192,7216, 7224,7272, 7240,7264, 7256,7280, + 7288,7736, 7296,7680, 7304,7712, 7312,7936, 7320,7968, 7328,7688, + 7336,7720, 7344,7944, 7352,7976, 7360,7696, 7368,7728, 7376,7952, + 7384,7984, 7392,7704, 7400,7736, 7408,7960, 7416,7800, 7432,7456, + 7448,7472, 7480,7592, 7496,7520, 7512,7536, 7528,7976, 7544,7864, + 7552,7744, 7560,7776, 7568,8000, 7576,8032, 7584,7752, 7592,7784, + 7600,8008, 7608,8040, 7616,7760, 7624,7792, 7632,8016, 7640,8048, + 7648,7768, 7656,7800, 7664,8024, 7672,7928, 7688,7712, 7704,7728, + 7752,7776, 7768,7792, 7800,7992, 7816,7840, 7824,8064, 7832,8096, + 7856,8072, 7864,8104, 7872,8064, 7880,8072, 7888,8080, 7896,8112, + 7904,8096, 7912,8104, 7920,8088, 7928,8056, 7944,7968, 7960,7984, + 8008,8032, 8024,8048, 8056,8120, 8072,8096, 8080,8128, 8088,8160, + 8112,8136, 8120,8168, 8136,8160, 8152,8176 +}; + +const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE2048_TABLE_LENGTH] = +{ + //8x2, size 3808 + 8,4096, 16,8192, 24,12288, 32,512, 40,4608, 48,8704, 56,12800, 64,1024, + 72,5120, 80,9216, 88,13312, 96,1536, 104,5632, 112,9728, 120,13824, + 128,2048, 136,6144, 144,10240, 152,14336, 160,2560, 168,6656, 176,10752, + 184,14848, 192,3072, 200,7168, 208,11264, 216,15360, 224,3584, 232,7680, + 240,11776, 248,15872, 256,1024, 264,4160, 272,8256, 280,12352, 288,576, + 296,4672, 304,8768, 312,12864, 320,1088, 328,5184, 336,9280, 344,13376, + 352,1600, 360,5696, 368,9792, 376,13888, 384,2112, 392,6208, 400,10304, + 408,14400, 416,2624, 424,6720, 432,10816, 440,14912, 448,3136, 456,7232, + 464,11328, 472,15424, 480,3648, 488,7744, 496,11840, 504,15936, 512,2048, + 520,4224, 528,8320, 536,12416, 544,640, 552,4736, 560,8832, 568,12928, + 576,1152, 584,5248, 592,9344, 600,13440, 608,1664, 616,5760, 624,9856, + 632,13952, 640,2176, 648,6272, 656,10368, 664,14464, 672,2688, 680,6784, + 688,10880, 696,14976, 704,3200, 712,7296, 720,11392, 728,15488, 736,3712, + 744,7808, 752,11904, 760,16000, 768,3072, 776,4288, 784,8384, 792,12480, + 800,3200, 808,4800, 816,8896, 824,12992, 832,1216, 840,5312, 848,9408, + 856,13504, 864,1728, 872,5824, 880,9920, 888,14016, 896,2240, 904,6336, + 912,10432, 920,14528, 928,2752, 936,6848, 944,10944, 952,15040, 960,3264, + 968,7360, 976,11456, 984,15552, 992,3776, 1000,7872, 1008,11968, 1016,16064, + 1032,4352, 1040,8448, 1048,12544, 1056,3072, 1064,4864, 1072,8960, + 1080,13056, 1088,1280, 1096,5376, 1104,9472, 1112,13568, 1120,1792, + 1128,5888, 1136,9984, 1144,14080, 1152,2304, 1160,6400, 1168,10496, + 1176,14592, 1184,2816, 1192,6912, 1200,11008, 1208,15104, 1216,3328, + 1224,7424, 1232,11520, 1240,15616, 1248,3840, 1256,7936, 1264,12032, + 1272,16128, 1288,4416, 1296,8512, 1304,12608, 1312,3328, 1320,4928, + 1328,9024, 1336,13120, 1352,5440, 1360,9536, 1368,13632, 1376,1856, + 1384,5952, 1392,10048, 1400,14144, 1408,2368, 1416,6464, 1424,10560, + 1432,14656, 1440,2880, 1448,6976, 1456,11072, 1464,15168, 1472,3392, + 1480,7488, 1488,11584, 1496,15680, 1504,3904, 1512,8000, 1520,12096, + 1528,16192, 1536,2112, 1544,4480, 1552,8576, 1560,12672, 1568,2240, + 1576,4992, 1584,9088, 1592,13184, 1600,2368, 1608,5504, 1616,9600, + 1624,13696, 1632,1920, 1640,6016, 1648,10112, 1656,14208, 1664,2432, + 1672,6528, 1680,10624, 1688,14720, 1696,2944, 1704,7040, 1712,11136, + 1720,15232, 1728,3456, 1736,7552, 1744,11648, 1752,15744, 1760,3968, + 1768,8064, 1776,12160, 1784,16256, 1792,3136, 1800,4544, 1808,8640, + 1816,12736, 1824,3264, 1832,5056, 1840,9152, 1848,13248, 1856,3392, + 1864,5568, 1872,9664, 1880,13760, 1888,1984, 1896,6080, 1904,10176, + 1912,14272, 1920,2496, 1928,6592, 1936,10688, 1944,14784, 1952,3008, + 1960,7104, 1968,11200, 1976,15296, 1984,3520, 1992,7616, 2000,11712, + 2008,15808, 2016,4032, 2024,8128, 2032,12224, 2040,16320, 2048,4096, + 2056,4104, 2064,8200, 2072,12296, 2080,4224, 2088,4616, 2096,8712, + 2104,12808, 2112,4352, 2120,5128, 2128,9224, 2136,13320, 2144,4480, + 2152,5640, 2160,9736, 2168,13832, 2176,4104, 2184,6152, 2192,10248, + 2200,14344, 2208,2568, 2216,6664, 2224,10760, 2232,14856, 2240,3080, + 2248,7176, 2256,11272, 2264,15368, 2272,3592, 2280,7688, 2288,11784, + 2296,15880, 2304,5120, 2312,4168, 2320,8264, 2328,12360, 2336,5248, + 2344,4680, 2352,8776, 2360,12872, 2368,5376, 2376,5192, 2384,9288, + 2392,13384, 2400,5504, 2408,5704, 2416,9800, 2424,13896, 2432,5128, + 2440,6216, 2448,10312, 2456,14408, 2464,2632, 2472,6728, 2480,10824, + 2488,14920, 2496,3144, 2504,7240, 2512,11336, 2520,15432, 2528,3656, + 2536,7752, 2544,11848, 2552,15944, 2560,6144, 2568,4232, 2576,8328, + 2584,12424, 2592,6272, 2600,4744, 2608,8840, 2616,12936, 2624,6400, + 2632,5256, 2640,9352, 2648,13448, 2656,6528, 2664,5768, 2672,9864, + 2680,13960, 2688,6152, 2696,6280, 2704,10376, 2712,14472, 2720,6280, + 2728,6792, 2736,10888, 2744,14984, 2752,3208, 2760,7304, 2768,11400, + 2776,15496, 2784,3720, 2792,7816, 2800,11912, 2808,16008, 2816,7168, + 2824,4296, 2832,8392, 2840,12488, 2848,7296, 2856,4808, 2864,8904, + 2872,13000, 2880,7424, 2888,5320, 2896,9416, 2904,13512, 2912,7552, + 2920,5832, 2928,9928, 2936,14024, 2944,7176, 2952,6344, 2960,10440, + 2968,14536, 2976,7304, 2984,6856, 2992,10952, 3000,15048, 3008,3272, + 3016,7368, 3024,11464, 3032,15560, 3040,3784, 3048,7880, 3056,11976, + 3064,16072, 3072,4160, 3080,4360, 3088,8456, 3096,12552, 3104,4288, + 3112,4872, 3120,8968, 3128,13064, 3136,4416, 3144,5384, 3152,9480, + 3160,13576, 3168,4544, 3176,5896, 3184,9992, 3192,14088, 3200,4168, + 3208,6408, 3216,10504, 3224,14600, 3232,4296, 3240,6920, 3248,11016, + 3256,15112, 3264,3336, 3272,7432, 3280,11528, 3288,15624, 3296,3848, + 3304,7944, 3312,12040, 3320,16136, 3328,5184, 3336,4424, 3344,8520, + 3352,12616, 3360,5312, 3368,4936, 3376,9032, 3384,13128, 3392,5440, + 3400,5448, 3408,9544, 3416,13640, 3424,5568, 3432,5960, 3440,10056, + 3448,14152, 3456,5192, 3464,6472, 3472,10568, 3480,14664, 3488,5320, + 3496,6984, 3504,11080, 3512,15176, 3520,5448, 3528,7496, 3536,11592, + 3544,15688, 3552,3912, 3560,8008, 3568,12104, 3576,16200, 3584,6208, + 3592,4488, 3600,8584, 3608,12680, 3616,6336, 3624,5000, 3632,9096, + 3640,13192, 3648,6464, 3656,5512, 3664,9608, 3672,13704, 3680,6592, + 3688,6024, 3696,10120, 3704,14216, 3712,6216, 3720,6536, 3728,10632, + 3736,14728, 3744,6344, 3752,7048, 3760,11144, 3768,15240, 3776,6472, + 3784,7560, 3792,11656, 3800,15752, 3808,3976, 3816,8072, 3824,12168, + 3832,16264, 3840,7232, 3848,4552, 3856,8648, 3864,12744, 3872,7360, + 3880,5064, 3888,9160, 3896,13256, 3904,7488, 3912,5576, 3920,9672, + 3928,13768, 3936,7616, 3944,6088, 3952,10184, 3960,14280, 3968,7240, + 3976,6600, 3984,10696, 3992,14792, 4000,7368, 4008,7112, 4016,11208, + 4024,15304, 4032,7496, 4040,7624, 4048,11720, 4056,15816, 4064,7624, + 4072,8136, 4080,12232, 4088,16328, 4096,8192, 4104,4112, 4112,8208, + 4120,12304, 4128,8320, 4136,4624, 4144,8720, 4152,12816, 4160,8448, + 4168,5136, 4176,9232, 4184,13328, 4192,8576, 4200,5648, 4208,9744, + 4216,13840, 4224,8200, 4232,6160, 4240,10256, 4248,14352, 4256,8328, + 4264,6672, 4272,10768, 4280,14864, 4288,8456, 4296,7184, 4304,11280, + 4312,15376, 4320,8584, 4328,7696, 4336,11792, 4344,15888, 4352,9216, + 4360,9232, 4368,8272, 4376,12368, 4384,9344, 4392,4688, 4400,8784, + 4408,12880, 4416,9472, 4424,5200, 4432,9296, 4440,13392, 4448,9600, + 4456,5712, 4464,9808, 4472,13904, 4480,9224, 4488,6224, 4496,10320, + 4504,14416, 4512,9352, 4520,6736, 4528,10832, 4536,14928, 4544,9480, + 4552,7248, 4560,11344, 4568,15440, 4576,9608, 4584,7760, 4592,11856, + 4600,15952, 4608,10240, 4616,10256, 4624,8336, 4632,12432, 4640,10368, + 4648,4752, 4656,8848, 4664,12944, 4672,10496, 4680,5264, 4688,9360, + 4696,13456, 4704,10624, 4712,5776, 4720,9872, 4728,13968, 4736,10248, + 4744,6288, 4752,10384, 4760,14480, 4768,10376, 4776,6800, 4784,10896, + 4792,14992, 4800,10504, 4808,7312, 4816,11408, 4824,15504, 4832,10632, + 4840,7824, 4848,11920, 4856,16016, 4864,11264, 4872,11280, 4880,8400, + 4888,12496, 4896,11392, 4904,11408, 4912,8912, 4920,13008, 4928,11520, + 4936,5328, 4944,9424, 4952,13520, 4960,11648, 4968,5840, 4976,9936, + 4984,14032, 4992,11272, 5000,6352, 5008,10448, 5016,14544, 5024,11400, + 5032,6864, 5040,10960, 5048,15056, 5056,11528, 5064,7376, 5072,11472, + 5080,15568, 5088,11656, 5096,7888, 5104,11984, 5112,16080, 5120,8256, + 5128,8272, 5136,8464, 5144,12560, 5152,8384, 5160,8400, 5168,8976, + 5176,13072, 5184,8512, 5192,5392, 5200,9488, 5208,13584, 5216,8640, + 5224,5904, 5232,10000, 5240,14096, 5248,8264, 5256,6416, 5264,10512, + 5272,14608, 5280,8392, 5288,6928, 5296,11024, 5304,15120, 5312,8520, + 5320,7440, 5328,11536, 5336,15632, 5344,8648, 5352,7952, 5360,12048, + 5368,16144, 5376,9280, 5384,9296, 5392,8528, 5400,12624, 5408,9408, + 5416,9424, 5424,9040, 5432,13136, 5440,9536, 5448,5456, 5456,9552, + 5464,13648, 5472,9664, 5480,5968, 5488,10064, 5496,14160, 5504,9288, + 5512,6480, 5520,10576, 5528,14672, 5536,9416, 5544,6992, 5552,11088, + 5560,15184, 5568,9544, 5576,7504, 5584,11600, 5592,15696, 5600,9672, + 5608,8016, 5616,12112, 5624,16208, 5632,10304, 5640,10320, 5648,8592, + 5656,12688, 5664,10432, 5672,10448, 5680,9104, 5688,13200, 5696,10560, + 5704,10576, 5712,9616, 5720,13712, 5728,10688, 5736,6032, 5744,10128, + 5752,14224, 5760,10312, 5768,6544, 5776,10640, 5784,14736, 5792,10440, + 5800,7056, 5808,11152, 5816,15248, 5824,10568, 5832,7568, 5840,11664, + 5848,15760, 5856,10696, 5864,8080, 5872,12176, 5880,16272, 5888,11328, + 5896,11344, 5904,8656, 5912,12752, 5920,11456, 5928,11472, 5936,9168, + 5944,13264, 5952,11584, 5960,11600, 5968,9680, 5976,13776, 5984,11712, + 5992,6096, 6000,10192, 6008,14288, 6016,11336, 6024,6608, 6032,10704, + 6040,14800, 6048,11464, 6056,7120, 6064,11216, 6072,15312, 6080,11592, + 6088,7632, 6096,11728, 6104,15824, 6112,11720, 6120,8144, 6128,12240, + 6136,16336, 6144,12288, 6152,12304, 6160,8216, 6168,12312, 6176,12416, + 6184,12432, 6192,8728, 6200,12824, 6208,12544, 6216,12560, 6224,9240, + 6232,13336, 6240,12672, 6248,12688, 6256,9752, 6264,13848, 6272,12296, + 6280,12312, 6288,10264, 6296,14360, 6304,12424, 6312,6680, 6320,10776, + 6328,14872, 6336,12552, 6344,7192, 6352,11288, 6360,15384, 6368,12680, + 6376,7704, 6384,11800, 6392,15896, 6400,13312, 6408,13328, 6416,8280, + 6424,12376, 6432,13440, 6440,13456, 6448,8792, 6456,12888, 6464,13568, + 6472,13584, 6480,9304, 6488,13400, 6496,13696, 6504,13712, 6512,9816, + 6520,13912, 6528,13320, 6536,13336, 6544,10328, 6552,14424, 6560,13448, + 6568,6744, 6576,10840, 6584,14936, 6592,13576, 6600,7256, 6608,11352, + 6616,15448, 6624,13704, 6632,7768, 6640,11864, 6648,15960, 6656,14336, + 6664,14352, 6672,8344, 6680,12440, 6688,14464, 6696,14480, 6704,8856, + 6712,12952, 6720,14592, 6728,14608, 6736,9368, 6744,13464, 6752,14720, + 6760,14736, 6768,9880, 6776,13976, 6784,14344, 6792,14360, 6800,10392, + 6808,14488, 6816,14472, 6824,14488, 6832,10904, 6840,15000, 6848,14600, + 6856,7320, 6864,11416, 6872,15512, 6880,14728, 6888,7832, 6896,11928, + 6904,16024, 6912,15360, 6920,15376, 6928,8408, 6936,12504, 6944,15488, + 6952,15504, 6960,8920, 6968,13016, 6976,15616, 6984,15632, 6992,9432, + 7000,13528, 7008,15744, 7016,15760, 7024,9944, 7032,14040, 7040,15368, + 7048,15384, 7056,10456, 7064,14552, 7072,15496, 7080,15512, 7088,10968, + 7096,15064, 7104,15624, 7112,7384, 7120,11480, 7128,15576, 7136,15752, + 7144,7896, 7152,11992, 7160,16088, 7168,12352, 7176,12368, 7184,8472, + 7192,12568, 7200,12480, 7208,12496, 7216,8984, 7224,13080, 7232,12608, + 7240,12624, 7248,9496, 7256,13592, 7264,12736, 7272,12752, 7280,10008, + 7288,14104, 7296,12360, 7304,12376, 7312,10520, 7320,14616, 7328,12488, + 7336,12504, 7344,11032, 7352,15128, 7360,12616, 7368,7448, 7376,11544, + 7384,15640, 7392,12744, 7400,7960, 7408,12056, 7416,16152, 7424,13376, + 7432,13392, 7440,8536, 7448,12632, 7456,13504, 7464,13520, 7472,9048, + 7480,13144, 7488,13632, 7496,13648, 7504,9560, 7512,13656, 7520,13760, + 7528,13776, 7536,10072, 7544,14168, 7552,13384, 7560,13400, 7568,10584, + 7576,14680, 7584,13512, 7592,13528, 7600,11096, 7608,15192, 7616,13640, + 7624,13656, 7632,11608, 7640,15704, 7648,13768, 7656,8024, 7664,12120, + 7672,16216, 7680,14400, 7688,14416, 7696,8600, 7704,12696, 7712,14528, + 7720,14544, 7728,9112, 7736,13208, 7744,14656, 7752,14672, 7760,9624, + 7768,13720, 7776,14784, 7784,14800, 7792,10136, 7800,14232, 7808,14408, + 7816,14424, 7824,10648, 7832,14744, 7840,14536, 7848,14552, 7856,11160, + 7864,15256, 7872,14664, 7880,14680, 7888,11672, 7896,15768, 7904,14792, + 7912,8088, 7920,12184, 7928,16280, 7936,15424, 7944,15440, 7952,8664, + 7960,12760, 7968,15552, 7976,15568, 7984,9176, 7992,13272, 8000,15680, + 8008,15696, 8016,9688, 8024,13784, 8032,15808, 8040,15824, 8048,10200, + 8056,14296, 8064,15432, 8072,15448, 8080,10712, 8088,14808, 8096,15560, + 8104,15576, 8112,11224, 8120,15320, 8128,15688, 8136,15704, 8144,11736, + 8152,15832, 8160,15816, 8168,15832, 8176,12248, 8184,16344, 8200,8320, + 8208,8224, 8216,12320, 8232,10368, 8240,8736, 8248,12832, 8256,8448, + 8264,8384, 8272,9248, 8280,13344, 8288,9232, 8296,10432, 8304,9760, + 8312,13856, 8328,12416, 8336,10272, 8344,14368, 8352,12296, 8360,14464, + 8368,10784, 8376,14880, 8384,8456, 8392,12480, 8400,11296, 8408,15392, + 8416,12552, 8424,14528, 8432,11808, 8440,15904, 8448,9216, 8456,8576, + 8464,9232, 8472,12384, 8480,9248, 8488,10624, 8496,8800, 8504,12896, + 8512,9472, 8520,8640, 8528,9312, 8536,13408, 8544,9296, 8552,10688, + 8560,9824, 8568,13920, 8576,9224, 8584,12672, 8592,10336, 8600,14432, + 8608,13320, 8616,14720, 8624,10848, 8632,14944, 8640,9480, 8648,12736, + 8656,11360, 8664,15456, 8672,13576, 8680,14784, 8688,11872, 8696,15968, + 8704,12288, 8712,12416, 8720,12296, 8728,12448, 8736,12304, 8744,10376, + 8752,8864, 8760,12960, 8768,12352, 8776,12480, 8784,9376, 8792,13472, + 8800,12368, 8808,10440, 8816,9888, 8824,13984, 8832,12320, 8840,12424, + 8848,10400, 8856,14496, 8864,12312, 8872,14472, 8880,10912, 8888,15008, + 8896,12384, 8904,12488, 8912,11424, 8920,15520, 8928,12568, 8936,14536, + 8944,11936, 8952,16032, 8960,12544, 8968,12672, 8976,12552, 8984,12512, + 8992,12560, 9000,10632, 9008,12568, 9016,13024, 9024,12608, 9032,12736, + 9040,9440, 9048,13536, 9056,12624, 9064,10696, 9072,9952, 9080,14048, + 9088,9240, 9096,12680, 9104,10464, 9112,14560, 9120,13336, 9128,14728, + 9136,10976, 9144,15072, 9152,9496, 9160,12744, 9168,11488, 9176,15584, + 9184,13592, 9192,14792, 9200,12000, 9208,16096, 9224,9344, 9232,9248, + 9240,12576, 9256,11392, 9264,12560, 9272,13088, 9280,9472, 9288,9408, + 9296,9504, 9304,13600, 9312,9488, 9320,11456, 9328,10016, 9336,14112, + 9352,13440, 9360,10528, 9368,14624, 9376,12360, 9384,15488, 9392,11040, + 9400,15136, 9408,9480, 9416,13504, 9424,11552, 9432,15648, 9440,12616, + 9448,15552, 9456,12064, 9464,16160, 9480,9600, 9488,9504, 9496,12640, + 9512,11648, 9520,12624, 9528,13152, 9544,9664, 9552,9568, 9560,13664, + 9576,11712, 9584,10080, 9592,14176, 9608,13696, 9616,10592, 9624,14688, + 9632,13384, 9640,15744, 9648,11104, 9656,15200, 9672,13760, 9680,11616, + 9688,15712, 9696,13640, 9704,15808, 9712,12128, 9720,16224, 9728,13312, + 9736,13440, 9744,13320, 9752,12704, 9760,13328, 9768,11400, 9776,13336, + 9784,13216, 9792,13376, 9800,13504, 9808,13384, 9816,13728, 9824,13392, + 9832,11464, 9840,10144, 9848,14240, 9856,13344, 9864,13448, 9872,10656, + 9880,14752, 9888,12376, 9896,15496, 9904,11168, 9912,15264, 9920,13408, + 9928,13512, 9936,11680, 9944,15776, 9952,12632, 9960,15560, 9968,12192, + 9976,16288, 9984,13568, 9992,13696, 10000,13576, 10008,12768, 10016,13584, + 10024,11656, 10032,13592, 10040,13280, 10048,13632, 10056,13760, + 10064,13640, 10072,13792, 10080,13648, 10088,11720, 10096,10208, + 10104,14304, 10112,13600, 10120,13704, 10128,10720, 10136,14816, + 10144,13400, 10152,15752, 10160,11232, 10168,15328, 10176,13664, + 10184,13768, 10192,11744, 10200,15840, 10208,13656, 10216,15816, + 10224,12256, 10232,16352, 10248,10272, 10256,10368, 10264,12328, + 10280,10384, 10288,10376, 10296,12840, 10304,11264, 10312,11296, + 10320,11392, 10328,13352, 10336,11272, 10344,10448, 10352,11400, + 10360,13864, 10376,12432, 10392,14376, 10400,12328, 10408,14480, + 10416,10792, 10424,14888, 10432,11280, 10440,12496, 10448,11304, + 10456,15400, 10464,11288, 10472,14544, 10480,11816, 10488,15912, + 10496,11264, 10504,11272, 10512,11280, 10520,12392, 10528,11296, + 10536,10640, 10544,12496, 10552,12904, 10560,11328, 10568,11360, + 10576,11456, 10584,13416, 10592,11336, 10600,10704, 10608,11464, + 10616,13928, 10624,11392, 10632,12688, 10640,11304, 10648,14440, + 10656,13352, 10664,14736, 10672,10856, 10680,14952, 10688,11344, + 10696,12752, 10704,11368, 10712,15464, 10720,11352, 10728,14800, + 10736,11880, 10744,15976, 10752,14336, 10760,14368, 10768,14464, + 10776,12456, 10784,14344, 10792,14376, 10800,14472, 10808,12968, + 10816,15360, 10824,15392, 10832,15488, 10840,13480, 10848,15368, + 10856,15400, 10864,15496, 10872,13992, 10880,14352, 10888,12440, + 10896,14480, 10904,14504, 10912,14360, 10920,14488, 10928,14488, + 10936,15016, 10944,15376, 10952,12504, 10960,11432, 10968,15528, + 10976,15384, 10984,14552, 10992,11944, 11000,16040, 11008,14400, + 11016,14432, 11024,14528, 11032,12520, 11040,14408, 11048,14440, + 11056,14536, 11064,13032, 11072,15424, 11080,15456, 11088,15552, + 11096,13544, 11104,15432, 11112,15464, 11120,15560, 11128,14056, + 11136,14416, 11144,12696, 11152,14544, 11160,14568, 11168,14424, + 11176,14744, 11184,14552, 11192,15080, 11200,15440, 11208,12760, + 11216,11496, 11224,15592, 11232,15448, 11240,14808, 11248,12008, + 11256,16104, 11272,11296, 11280,11392, 11288,12584, 11304,11408, + 11312,12688, 11320,13096, 11328,11520, 11336,11552, 11344,11648, + 11352,13608, 11360,11528, 11368,11472, 11376,11656, 11384,14120, + 11400,13456, 11416,14632, 11424,12392, 11432,15504, 11440,14440, + 11448,15144, 11456,11536, 11464,13520, 11472,11560, 11480,15656, + 11488,11544, 11496,15568, 11504,12072, 11512,16168, 11528,11552, + 11536,11648, 11544,12648, 11560,11664, 11568,12752, 11576,13160, + 11592,11616, 11600,11712, 11608,13672, 11624,11728, 11632,11720, + 11640,14184, 11656,13712, 11672,14696, 11680,13416, 11688,15760, + 11696,15464, 11704,15208, 11720,13776, 11736,15720, 11744,13672, + 11752,15824, 11760,12136, 11768,16232, 11776,14592, 11784,14624, + 11792,14720, 11800,12712, 11808,14600, 11816,14632, 11824,14728, + 11832,13224, 11840,15616, 11848,15648, 11856,15744, 11864,13736, + 11872,15624, 11880,15656, 11888,15752, 11896,14248, 11904,14608, + 11912,13464, 11920,14736, 11928,14760, 11936,14616, 11944,15512, + 11952,14744, 11960,15272, 11968,15632, 11976,13528, 11984,15760, + 11992,15784, 12000,15640, 12008,15576, 12016,12200, 12024,16296, + 12032,14656, 12040,14688, 12048,14784, 12056,12776, 12064,14664, + 12072,14696, 12080,14792, 12088,13288, 12096,15680, 12104,15712, + 12112,15808, 12120,13800, 12128,15688, 12136,15720, 12144,15816, + 12152,14312, 12160,14672, 12168,13720, 12176,14800, 12184,14824, + 12192,14680, 12200,15768, 12208,14808, 12216,15336, 12224,15696, + 12232,13784, 12240,15824, 12248,15848, 12256,15704, 12264,15832, + 12272,15832, 12280,16360, 12312,12336, 12344,12848, 12352,12544, + 12360,12552, 12368,12560, 12376,13360, 12384,12576, 12392,12584, + 12400,13336, 12408,13872, 12424,12448, 12440,14384, 12456,14496, + 12464,14472, 12472,14896, 12480,12672, 12488,12512, 12496,12688, + 12504,15408, 12512,12680, 12520,14560, 12528,14728, 12536,15920, + 12544,13312, 12552,13320, 12560,13328, 12568,13336, 12576,13344, + 12584,13352, 12592,13360, 12600,12912, 12608,13568, 12616,13576, + 12624,13584, 12632,13424, 12640,13600, 12648,13608, 12656,13400, + 12664,13936, 12672,13440, 12680,12704, 12688,13456, 12696,14448, + 12704,13448, 12712,14752, 12720,15496, 12728,14960, 12736,13696, + 12744,12768, 12752,13712, 12760,15472, 12768,13704, 12776,14816, + 12784,15752, 12792,15984, 12800,14336, 12808,14464, 12816,14344, + 12824,14472, 12832,14352, 12840,14480, 12848,14360, 12856,12976, + 12864,14400, 12872,14528, 12880,14408, 12888,13488, 12896,14416, + 12904,14544, 12912,14424, 12920,14000, 12928,14368, 12936,14496, + 12944,14376, 12952,14512, 12960,14384, 12968,14504, 12976,14488, + 12984,15024, 12992,14432, 13000,14560, 13008,14440, 13016,15536, + 13024,14448, 13032,14568, 13040,14744, 13048,16048, 13056,14592, + 13064,14720, 13072,14600, 13080,14728, 13088,14608, 13096,14736, + 13104,14616, 13112,14744, 13120,14656, 13128,14784, 13136,14664, + 13144,13552, 13152,14672, 13160,14800, 13168,14680, 13176,14064, + 13184,14624, 13192,14752, 13200,14632, 13208,14576, 13216,13464, + 13224,14760, 13232,15512, 13240,15088, 13248,14688, 13256,14816, + 13264,14696, 13272,15600, 13280,13720, 13288,14824, 13296,15768, + 13304,16112, 13336,13360, 13368,14616, 13376,13568, 13384,13576, + 13392,13584, 13400,13616, 13408,13600, 13416,13608, 13424,13592, + 13432,14128, 13448,13472, 13464,14640, 13480,15520, 13488,14536, + 13496,15152, 13504,13696, 13512,13536, 13520,13712, 13528,15664, + 13536,13704, 13544,15584, 13552,14792, 13560,16176, 13592,13616, + 13624,14680, 13656,13680, 13688,14192, 13704,13728, 13720,14704, + 13736,15776, 13744,15560, 13752,15216, 13768,13792, 13784,15728, + 13800,15840, 13808,15816, 13816,16240, 13824,15360, 13832,15488, + 13840,15368, 13848,15496, 13856,15376, 13864,15504, 13872,15384, + 13880,15512, 13888,15424, 13896,15552, 13904,15432, 13912,15560, + 13920,15440, 13928,15568, 13936,15448, 13944,14256, 13952,15392, + 13960,15520, 13968,15400, 13976,14768, 13984,15408, 13992,15528, + 14000,14552, 14008,15280, 14016,15456, 14024,15584, 14032,15464, + 14040,15792, 14048,15472, 14056,15592, 14064,14808, 14072,16304, + 14080,15616, 14088,15744, 14096,15624, 14104,15752, 14112,15632, + 14120,15760, 14128,15640, 14136,15768, 14144,15680, 14152,15808, + 14160,15688, 14168,15816, 14176,15696, 14184,15824, 14192,15704, + 14200,14320, 14208,15648, 14216,15776, 14224,15656, 14232,14832, + 14240,15664, 14248,15784, 14256,15576, 14264,15344, 14272,15712, + 14280,15840, 14288,15720, 14296,15856, 14304,15728, 14312,15848, + 14320,15832, 14328,16368, 14392,14488, 14400,14592, 14408,14600, + 14416,14608, 14424,14616, 14432,14624, 14440,14632, 14448,14640, + 14456,15512, 14504,14512, 14520,14904, 14528,14720, 14536,14728, + 14544,14736, 14552,15416, 14560,14752, 14568,14576, 14584,15928, + 14576,14760, 14592,15360, 14600,15368, 14608,15376, 14616,15384, + 14624,15392, 14632,15400, 14640,15408, 14648,15416, 14656,15616, + 14664,15624, 14672,15632, 14680,15640, 14688,15648, 14696,15656, + 14704,15664, 14712,15576, 14720,15488, 14728,15496, 14736,15504, + 14744,15512, 14752,15520, 14760,14768, 14776,14968, 14768,15528, + 14784,15744, 14792,15752, 14800,15760, 14808,15480, 14816,15776, + 14824,14832, 14840,15992, 14832,15784, 14856,14864, 14864,14880, + 14872,14896, 14880,14976, 14888,14992, 14896,15008, 14904,15024, + 14912,15104, 14920,15120, 14928,15136, 14936,15152, 14944,15232, + 14952,15248, 14960,15264, 14968,15280, 14984,15008, 15000,15024, + 15016,15024, 15040,15112, 15048,15128, 15056,15144, 15064,15544, + 15072,15240, 15080,15256, 15088,15272, 15096,16056, 15104,15872, + 15112,15888, 15120,15904, 15128,15920, 15136,16000, 15144,16016, + 15152,16032, 15160,16048, 15168,16128, 15176,16144, 15184,16160, + 15192,16176, 15200,16256, 15208,16272, 15216,16288, 15224,16304, + 15232,15880, 15240,15896, 15248,15912, 15256,15928, 15264,16008, + 15272,16024, 15280,16040, 15288,16056, 15296,16136, 15304,16152, + 15312,16168, 15320,15608, 15328,16264, 15336,16280, 15344,16296, + 15352,16120, 15416,15512, 15424,15616, 15432,15624, 15440,15632, + 15448,15640, 15456,15648, 15464,15656, 15472,15664, 15480,15768, + 15528,15536, 15544,16048, 15552,15744, 15560,15752, 15568,15760, + 15576,15672, 15584,15776, 15592,15600, 15600,15784, 15608,16184, + 15672,15768, 15736,15832, 15784,15792, 15800,16304, 15848,15856, + 15880,16000, 15864,16248, 15888,16000, 15896,16008, 15904,16000, + 15912,16016, 15920,16008, 15928,16024, 15936,16128, 15944,16160, + 15952,16256, 15960,16288, 15968,16136, 15976,16168, 15984,16264, + 15992,16296, 16008,16032, 16024,16040, 16064,16144, 16040,16048, + 16072,16176, 16080,16272, 16088,16304, 16096,16152, 16104,16184, + 16112,16280, 16136,16256, 16120,16312, 16144,16256, 16152,16264, + 16160,16256, 16168,16272, 16176,16264, 16184,16280, 16200,16208, + 16208,16224, 16216,16240, 16224,16320, 16232,16336, 16240,16352, + 16248,16368, 16264,16288, 16280,16296, 16296,16304, 16344,16368, + 16328,16352, 16360,16368 +}; + +const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE4096_TABLE_LENGTH] = +{ + //radix 8, size 4032 + 8,4096, 16,8192, 24,12288, 32,16384, 40,20480, 48,24576, 56,28672, 64,512, + 72,4608, 80,8704, 88,12800, 96,16896, 104,20992, 112,25088, 120,29184, + 128,1024, 136,5120, 144,9216, 152,13312, 160,17408, 168,21504, 176,25600, + 184,29696, 192,1536, 200,5632, 208,9728, 216,13824, 224,17920, 232,22016, + 240,26112, 248,30208, 256,2048, 264,6144, 272,10240, 280,14336, 288,18432, + 296,22528, 304,26624, 312,30720, 320,2560, 328,6656, 336,10752, 344,14848, + 352,18944, 360,23040, 368,27136, 376,31232, 384,3072, 392,7168, 400,11264, + 408,15360, 416,19456, 424,23552, 432,27648, 440,31744, 448,3584, 456,7680, + 464,11776, 472,15872, 480,19968, 488,24064, 496,28160, 504,32256, 520,4160, + 528,8256, 536,12352, 544,16448, 552,20544, 560,24640, 568,28736, 584,4672, + 592,8768, 600,12864, 608,16960, 616,21056, 624,25152, 632,29248, 640,1088, + 648,5184, 656,9280, 664,13376, 672,17472, 680,21568, 688,25664, 696,29760, + 704,1600, 712,5696, 720,9792, 728,13888, 736,17984, 744,22080, 752,26176, + 760,30272, 768,2112, 776,6208, 784,10304, 792,14400, 800,18496, 808,22592, + 816,26688, 824,30784, 832,2624, 840,6720, 848,10816, 856,14912, 864,19008, + 872,23104, 880,27200, 888,31296, 896,3136, 904,7232, 912,11328, 920,15424, + 928,19520, 936,23616, 944,27712, 952,31808, 960,3648, 968,7744, 976,11840, + 984,15936, 992,20032, 1000,24128, 1008,28224, 1016,32320, 1032,4224, + 1040,8320, 1048,12416, 1056,16512, 1064,20608, 1072,24704, 1080,28800, + 1096,4736, 1104,8832, 1112,12928, 1120,17024, 1128,21120, 1136,25216, + 1144,29312, 1160,5248, 1168,9344, 1176,13440, 1184,17536, 1192,21632, + 1200,25728, 1208,29824, 1216,1664, 1224,5760, 1232,9856, 1240,13952, + 1248,18048, 1256,22144, 1264,26240, 1272,30336, 1280,2176, 1288,6272, + 1296,10368, 1304,14464, 1312,18560, 1320,22656, 1328,26752, 1336,30848, + 1344,2688, 1352,6784, 1360,10880, 1368,14976, 1376,19072, 1384,23168, + 1392,27264, 1400,31360, 1408,3200, 1416,7296, 1424,11392, 1432,15488, + 1440,19584, 1448,23680, 1456,27776, 1464,31872, 1472,3712, 1480,7808, + 1488,11904, 1496,16000, 1504,20096, 1512,24192, 1520,28288, 1528,32384, + 1544,4288, 1552,8384, 1560,12480, 1568,16576, 1576,20672, 1584,24768, + 1592,28864, 1608,4800, 1616,8896, 1624,12992, 1632,17088, 1640,21184, + 1648,25280, 1656,29376, 1672,5312, 1680,9408, 1688,13504, 1696,17600, + 1704,21696, 1712,25792, 1720,29888, 1736,5824, 1744,9920, 1752,14016, + 1760,18112, 1768,22208, 1776,26304, 1784,30400, 1792,2240, 1800,6336, + 1808,10432, 1816,14528, 1824,18624, 1832,22720, 1840,26816, 1848,30912, + 1856,2752, 1864,6848, 1872,10944, 1880,15040, 1888,19136, 1896,23232, + 1904,27328, 1912,31424, 1920,3264, 1928,7360, 1936,11456, 1944,15552, + 1952,19648, 1960,23744, 1968,27840, 1976,31936, 1984,3776, 1992,7872, + 2000,11968, 2008,16064, 2016,20160, 2024,24256, 2032,28352, 2040,32448, + 2056,4352, 2064,8448, 2072,12544, 2080,16640, 2088,20736, 2096,24832, + 2104,28928, 2120,4864, 2128,8960, 2136,13056, 2144,17152, 2152,21248, + 2160,25344, 2168,29440, 2184,5376, 2192,9472, 2200,13568, 2208,17664, + 2216,21760, 2224,25856, 2232,29952, 2248,5888, 2256,9984, 2264,14080, + 2272,18176, 2280,22272, 2288,26368, 2296,30464, 2312,6400, 2320,10496, + 2328,14592, 2336,18688, 2344,22784, 2352,26880, 2360,30976, 2368,2816, + 2376,6912, 2384,11008, 2392,15104, 2400,19200, 2408,23296, 2416,27392, + 2424,31488, 2432,3328, 2440,7424, 2448,11520, 2456,15616, 2464,19712, + 2472,23808, 2480,27904, 2488,32000, 2496,3840, 2504,7936, 2512,12032, + 2520,16128, 2528,20224, 2536,24320, 2544,28416, 2552,32512, 2568,4416, + 2576,8512, 2584,12608, 2592,16704, 2600,20800, 2608,24896, 2616,28992, + 2632,4928, 2640,9024, 2648,13120, 2656,17216, 2664,21312, 2672,25408, + 2680,29504, 2696,5440, 2704,9536, 2712,13632, 2720,17728, 2728,21824, + 2736,25920, 2744,30016, 2760,5952, 2768,10048, 2776,14144, 2784,18240, + 2792,22336, 2800,26432, 2808,30528, 2824,6464, 2832,10560, 2840,14656, + 2848,18752, 2856,22848, 2864,26944, 2872,31040, 2888,6976, 2896,11072, + 2904,15168, 2912,19264, 2920,23360, 2928,27456, 2936,31552, 2944,3392, + 2952,7488, 2960,11584, 2968,15680, 2976,19776, 2984,23872, 2992,27968, + 3000,32064, 3008,3904, 3016,8000, 3024,12096, 3032,16192, 3040,20288, + 3048,24384, 3056,28480, 3064,32576, 3080,4480, 3088,8576, 3096,12672, + 3104,16768, 3112,20864, 3120,24960, 3128,29056, 3144,4992, 3152,9088, + 3160,13184, 3168,17280, 3176,21376, 3184,25472, 3192,29568, 3208,5504, + 3216,9600, 3224,13696, 3232,17792, 3240,21888, 3248,25984, 3256,30080, + 3272,6016, 3280,10112, 3288,14208, 3296,18304, 3304,22400, 3312,26496, + 3320,30592, 3336,6528, 3344,10624, 3352,14720, 3360,18816, 3368,22912, + 3376,27008, 3384,31104, 3400,7040, 3408,11136, 3416,15232, 3424,19328, + 3432,23424, 3440,27520, 3448,31616, 3464,7552, 3472,11648, 3480,15744, + 3488,19840, 3496,23936, 3504,28032, 3512,32128, 3520,3968, 3528,8064, + 3536,12160, 3544,16256, 3552,20352, 3560,24448, 3568,28544, 3576,32640, + 3592,4544, 3600,8640, 3608,12736, 3616,16832, 3624,20928, 3632,25024, + 3640,29120, 3656,5056, 3664,9152, 3672,13248, 3680,17344, 3688,21440, + 3696,25536, 3704,29632, 3720,5568, 3728,9664, 3736,13760, 3744,17856, + 3752,21952, 3760,26048, 3768,30144, 3784,6080, 3792,10176, 3800,14272, + 3808,18368, 3816,22464, 3824,26560, 3832,30656, 3848,6592, 3856,10688, + 3864,14784, 3872,18880, 3880,22976, 3888,27072, 3896,31168, 3912,7104, + 3920,11200, 3928,15296, 3936,19392, 3944,23488, 3952,27584, 3960,31680, + 3976,7616, 3984,11712, 3992,15808, 4000,19904, 4008,24000, 4016,28096, + 4024,32192, 4040,8128, 4048,12224, 4056,16320, 4064,20416, 4072,24512, + 4080,28608, 4088,32704, 4112,8200, 4120,12296, 4128,16392, 4136,20488, + 4144,24584, 4152,28680, 4168,4616, 4176,8712, 4184,12808, 4192,16904, + 4200,21000, 4208,25096, 4216,29192, 4232,5128, 4240,9224, 4248,13320, + 4256,17416, 4264,21512, 4272,25608, 4280,29704, 4296,5640, 4304,9736, + 4312,13832, 4320,17928, 4328,22024, 4336,26120, 4344,30216, 4360,6152, + 4368,10248, 4376,14344, 4384,18440, 4392,22536, 4400,26632, 4408,30728, + 4424,6664, 4432,10760, 4440,14856, 4448,18952, 4456,23048, 4464,27144, + 4472,31240, 4488,7176, 4496,11272, 4504,15368, 4512,19464, 4520,23560, + 4528,27656, 4536,31752, 4552,7688, 4560,11784, 4568,15880, 4576,19976, + 4584,24072, 4592,28168, 4600,32264, 4624,8264, 4632,12360, 4640,16456, + 4648,20552, 4656,24648, 4664,28744, 4688,8776, 4696,12872, 4704,16968, + 4712,21064, 4720,25160, 4728,29256, 4744,5192, 4752,9288, 4760,13384, + 4768,17480, 4776,21576, 4784,25672, 4792,29768, 4808,5704, 4816,9800, + 4824,13896, 4832,17992, 4840,22088, 4848,26184, 4856,30280, 4872,6216, + 4880,10312, 4888,14408, 4896,18504, 4904,22600, 4912,26696, 4920,30792, + 4936,6728, 4944,10824, 4952,14920, 4960,19016, 4968,23112, 4976,27208, + 4984,31304, 5000,7240, 5008,11336, 5016,15432, 5024,19528, 5032,23624, + 5040,27720, 5048,31816, 5064,7752, 5072,11848, 5080,15944, 5088,20040, + 5096,24136, 5104,28232, 5112,32328, 5136,8328, 5144,12424, 5152,16520, + 5160,20616, 5168,24712, 5176,28808, 5200,8840, 5208,12936, 5216,17032, + 5224,21128, 5232,25224, 5240,29320, 5264,9352, 5272,13448, 5280,17544, + 5288,21640, 5296,25736, 5304,29832, 5320,5768, 5328,9864, 5336,13960, + 5344,18056, 5352,22152, 5360,26248, 5368,30344, 5384,6280, 5392,10376, + 5400,14472, 5408,18568, 5416,22664, 5424,26760, 5432,30856, 5448,6792, + 5456,10888, 5464,14984, 5472,19080, 5480,23176, 5488,27272, 5496,31368, + 5512,7304, 5520,11400, 5528,15496, 5536,19592, 5544,23688, 5552,27784, + 5560,31880, 5576,7816, 5584,11912, 5592,16008, 5600,20104, 5608,24200, + 5616,28296, 5624,32392, 5648,8392, 5656,12488, 5664,16584, 5672,20680, + 5680,24776, 5688,28872, 5712,8904, 5720,13000, 5728,17096, 5736,21192, + 5744,25288, 5752,29384, 5776,9416, 5784,13512, 5792,17608, 5800,21704, + 5808,25800, 5816,29896, 5840,9928, 5848,14024, 5856,18120, 5864,22216, + 5872,26312, 5880,30408, 5896,6344, 5904,10440, 5912,14536, 5920,18632, + 5928,22728, 5936,26824, 5944,30920, 5960,6856, 5968,10952, 5976,15048, + 5984,19144, 5992,23240, 6000,27336, 6008,31432, 6024,7368, 6032,11464, + 6040,15560, 6048,19656, 6056,23752, 6064,27848, 6072,31944, 6088,7880, + 6096,11976, 6104,16072, 6112,20168, 6120,24264, 6128,28360, 6136,32456, + 6160,8456, 6168,12552, 6176,16648, 6184,20744, 6192,24840, 6200,28936, + 6224,8968, 6232,13064, 6240,17160, 6248,21256, 6256,25352, 6264,29448, + 6288,9480, 6296,13576, 6304,17672, 6312,21768, 6320,25864, 6328,29960, + 6352,9992, 6360,14088, 6368,18184, 6376,22280, 6384,26376, 6392,30472, + 6416,10504, 6424,14600, 6432,18696, 6440,22792, 6448,26888, 6456,30984, + 6472,6920, 6480,11016, 6488,15112, 6496,19208, 6504,23304, 6512,27400, + 6520,31496, 6536,7432, 6544,11528, 6552,15624, 6560,19720, 6568,23816, + 6576,27912, 6584,32008, 6600,7944, 6608,12040, 6616,16136, 6624,20232, + 6632,24328, 6640,28424, 6648,32520, 6672,8520, 6680,12616, 6688,16712, + 6696,20808, 6704,24904, 6712,29000, 6736,9032, 6744,13128, 6752,17224, + 6760,21320, 6768,25416, 6776,29512, 6800,9544, 6808,13640, 6816,17736, + 6824,21832, 6832,25928, 6840,30024, 6864,10056, 6872,14152, 6880,18248, + 6888,22344, 6896,26440, 6904,30536, 6928,10568, 6936,14664, 6944,18760, + 6952,22856, 6960,26952, 6968,31048, 6992,11080, 7000,15176, 7008,19272, + 7016,23368, 7024,27464, 7032,31560, 7048,7496, 7056,11592, 7064,15688, + 7072,19784, 7080,23880, 7088,27976, 7096,32072, 7112,8008, 7120,12104, + 7128,16200, 7136,20296, 7144,24392, 7152,28488, 7160,32584, 7184,8584, + 7192,12680, 7200,16776, 7208,20872, 7216,24968, 7224,29064, 7248,9096, + 7256,13192, 7264,17288, 7272,21384, 7280,25480, 7288,29576, 7312,9608, + 7320,13704, 7328,17800, 7336,21896, 7344,25992, 7352,30088, 7376,10120, + 7384,14216, 7392,18312, 7400,22408, 7408,26504, 7416,30600, 7440,10632, + 7448,14728, 7456,18824, 7464,22920, 7472,27016, 7480,31112, 7504,11144, + 7512,15240, 7520,19336, 7528,23432, 7536,27528, 7544,31624, 7568,11656, + 7576,15752, 7584,19848, 7592,23944, 7600,28040, 7608,32136, 7624,8072, + 7632,12168, 7640,16264, 7648,20360, 7656,24456, 7664,28552, 7672,32648, + 7696,8648, 7704,12744, 7712,16840, 7720,20936, 7728,25032, 7736,29128, + 7760,9160, 7768,13256, 7776,17352, 7784,21448, 7792,25544, 7800,29640, + 7824,9672, 7832,13768, 7840,17864, 7848,21960, 7856,26056, 7864,30152, + 7888,10184, 7896,14280, 7904,18376, 7912,22472, 7920,26568, 7928,30664, + 7952,10696, 7960,14792, 7968,18888, 7976,22984, 7984,27080, 7992,31176, + 8016,11208, 8024,15304, 8032,19400, 8040,23496, 8048,27592, 8056,31688, + 8080,11720, 8088,15816, 8096,19912, 8104,24008, 8112,28104, 8120,32200, + 8144,12232, 8152,16328, 8160,20424, 8168,24520, 8176,28616, 8184,32712, + 8216,12304, 8224,16400, 8232,20496, 8240,24592, 8248,28688, 8272,8720, + 8280,12816, 8288,16912, 8296,21008, 8304,25104, 8312,29200, 8336,9232, + 8344,13328, 8352,17424, 8360,21520, 8368,25616, 8376,29712, 8400,9744, + 8408,13840, 8416,17936, 8424,22032, 8432,26128, 8440,30224, 8464,10256, + 8472,14352, 8480,18448, 8488,22544, 8496,26640, 8504,30736, 8528,10768, + 8536,14864, 8544,18960, 8552,23056, 8560,27152, 8568,31248, 8592,11280, + 8600,15376, 8608,19472, 8616,23568, 8624,27664, 8632,31760, 8656,11792, + 8664,15888, 8672,19984, 8680,24080, 8688,28176, 8696,32272, 8728,12368, + 8736,16464, 8744,20560, 8752,24656, 8760,28752, 8792,12880, 8800,16976, + 8808,21072, 8816,25168, 8824,29264, 8848,9296, 8856,13392, 8864,17488, + 8872,21584, 8880,25680, 8888,29776, 8912,9808, 8920,13904, 8928,18000, + 8936,22096, 8944,26192, 8952,30288, 8976,10320, 8984,14416, 8992,18512, + 9000,22608, 9008,26704, 9016,30800, 9040,10832, 9048,14928, 9056,19024, + 9064,23120, 9072,27216, 9080,31312, 9104,11344, 9112,15440, 9120,19536, + 9128,23632, 9136,27728, 9144,31824, 9168,11856, 9176,15952, 9184,20048, + 9192,24144, 9200,28240, 9208,32336, 9240,12432, 9248,16528, 9256,20624, + 9264,24720, 9272,28816, 9304,12944, 9312,17040, 9320,21136, 9328,25232, + 9336,29328, 9368,13456, 9376,17552, 9384,21648, 9392,25744, 9400,29840, + 9424,9872, 9432,13968, 9440,18064, 9448,22160, 9456,26256, 9464,30352, + 9488,10384, 9496,14480, 9504,18576, 9512,22672, 9520,26768, 9528,30864, + 9552,10896, 9560,14992, 9568,19088, 9576,23184, 9584,27280, 9592,31376, + 9616,11408, 9624,15504, 9632,19600, 9640,23696, 9648,27792, 9656,31888, + 9680,11920, 9688,16016, 9696,20112, 9704,24208, 9712,28304, 9720,32400, + 9752,12496, 9760,16592, 9768,20688, 9776,24784, 9784,28880, 9816,13008, + 9824,17104, 9832,21200, 9840,25296, 9848,29392, 9880,13520, 9888,17616, + 9896,21712, 9904,25808, 9912,29904, 9944,14032, 9952,18128, 9960,22224, + 9968,26320, 9976,30416, 10000,10448, 10008,14544, 10016,18640, 10024,22736, + 10032,26832, 10040,30928, 10064,10960, 10072,15056, 10080,19152, + 10088,23248, 10096,27344, 10104,31440, 10128,11472, 10136,15568, + 10144,19664, 10152,23760, 10160,27856, 10168,31952, 10192,11984, + 10200,16080, 10208,20176, 10216,24272, 10224,28368, 10232,32464, + 10264,12560, 10272,16656, 10280,20752, 10288,24848, 10296,28944, + 10328,13072, 10336,17168, 10344,21264, 10352,25360, 10360,29456, + 10392,13584, 10400,17680, 10408,21776, 10416,25872, 10424,29968, + 10456,14096, 10464,18192, 10472,22288, 10480,26384, 10488,30480, + 10520,14608, 10528,18704, 10536,22800, 10544,26896, 10552,30992, + 10576,11024, 10584,15120, 10592,19216, 10600,23312, 10608,27408, + 10616,31504, 10640,11536, 10648,15632, 10656,19728, 10664,23824, + 10672,27920, 10680,32016, 10704,12048, 10712,16144, 10720,20240, + 10728,24336, 10736,28432, 10744,32528, 10776,12624, 10784,16720, + 10792,20816, 10800,24912, 10808,29008, 10840,13136, 10848,17232, + 10856,21328, 10864,25424, 10872,29520, 10904,13648, 10912,17744, + 10920,21840, 10928,25936, 10936,30032, 10968,14160, 10976,18256, + 10984,22352, 10992,26448, 11000,30544, 11032,14672, 11040,18768, + 11048,22864, 11056,26960, 11064,31056, 11096,15184, 11104,19280, + 11112,23376, 11120,27472, 11128,31568, 11152,11600, 11160,15696, + 11168,19792, 11176,23888, 11184,27984, 11192,32080, 11216,12112, + 11224,16208, 11232,20304, 11240,24400, 11248,28496, 11256,32592, + 11288,12688, 11296,16784, 11304,20880, 11312,24976, 11320,29072, + 11352,13200, 11360,17296, 11368,21392, 11376,25488, 11384,29584, + 11416,13712, 11424,17808, 11432,21904, 11440,26000, 11448,30096, + 11480,14224, 11488,18320, 11496,22416, 11504,26512, 11512,30608, + 11544,14736, 11552,18832, 11560,22928, 11568,27024, 11576,31120, + 11608,15248, 11616,19344, 11624,23440, 11632,27536, 11640,31632, + 11672,15760, 11680,19856, 11688,23952, 11696,28048, 11704,32144, + 11728,12176, 11736,16272, 11744,20368, 11752,24464, 11760,28560, + 11768,32656, 11800,12752, 11808,16848, 11816,20944, 11824,25040, + 11832,29136, 11864,13264, 11872,17360, 11880,21456, 11888,25552, + 11896,29648, 11928,13776, 11936,17872, 11944,21968, 11952,26064, + 11960,30160, 11992,14288, 12000,18384, 12008,22480, 12016,26576, + 12024,30672, 12056,14800, 12064,18896, 12072,22992, 12080,27088, + 12088,31184, 12120,15312, 12128,19408, 12136,23504, 12144,27600, + 12152,31696, 12184,15824, 12192,19920, 12200,24016, 12208,28112, + 12216,32208, 12248,16336, 12256,20432, 12264,24528, 12272,28624, + 12280,32720, 12320,16408, 12328,20504, 12336,24600, 12344,28696, + 12376,12824, 12384,16920, 12392,21016, 12400,25112, 12408,29208, + 12440,13336, 12448,17432, 12456,21528, 12464,25624, 12472,29720, + 12504,13848, 12512,17944, 12520,22040, 12528,26136, 12536,30232, + 12568,14360, 12576,18456, 12584,22552, 12592,26648, 12600,30744, + 12632,14872, 12640,18968, 12648,23064, 12656,27160, 12664,31256, + 12696,15384, 12704,19480, 12712,23576, 12720,27672, 12728,31768, + 12760,15896, 12768,19992, 12776,24088, 12784,28184, 12792,32280, + 12832,16472, 12840,20568, 12848,24664, 12856,28760, 12896,16984, + 12904,21080, 12912,25176, 12920,29272, 12952,13400, 12960,17496, + 12968,21592, 12976,25688, 12984,29784, 13016,13912, 13024,18008, + 13032,22104, 13040,26200, 13048,30296, 13080,14424, 13088,18520, + 13096,22616, 13104,26712, 13112,30808, 13144,14936, 13152,19032, + 13160,23128, 13168,27224, 13176,31320, 13208,15448, 13216,19544, + 13224,23640, 13232,27736, 13240,31832, 13272,15960, 13280,20056, + 13288,24152, 13296,28248, 13304,32344, 13344,16536, 13352,20632, + 13360,24728, 13368,28824, 13408,17048, 13416,21144, 13424,25240, + 13432,29336, 13472,17560, 13480,21656, 13488,25752, 13496,29848, + 13528,13976, 13536,18072, 13544,22168, 13552,26264, 13560,30360, + 13592,14488, 13600,18584, 13608,22680, 13616,26776, 13624,30872, + 13656,15000, 13664,19096, 13672,23192, 13680,27288, 13688,31384, + 13720,15512, 13728,19608, 13736,23704, 13744,27800, 13752,31896, + 13784,16024, 13792,20120, 13800,24216, 13808,28312, 13816,32408, + 13856,16600, 13864,20696, 13872,24792, 13880,28888, 13920,17112, + 13928,21208, 13936,25304, 13944,29400, 13984,17624, 13992,21720, + 14000,25816, 14008,29912, 14048,18136, 14056,22232, 14064,26328, + 14072,30424, 14104,14552, 14112,18648, 14120,22744, 14128,26840, + 14136,30936, 14168,15064, 14176,19160, 14184,23256, 14192,27352, + 14200,31448, 14232,15576, 14240,19672, 14248,23768, 14256,27864, + 14264,31960, 14296,16088, 14304,20184, 14312,24280, 14320,28376, + 14328,32472, 14368,16664, 14376,20760, 14384,24856, 14392,28952, + 14432,17176, 14440,21272, 14448,25368, 14456,29464, 14496,17688, + 14504,21784, 14512,25880, 14520,29976, 14560,18200, 14568,22296, + 14576,26392, 14584,30488, 14624,18712, 14632,22808, 14640,26904, + 14648,31000, 14680,15128, 14688,19224, 14696,23320, 14704,27416, + 14712,31512, 14744,15640, 14752,19736, 14760,23832, 14768,27928, + 14776,32024, 14808,16152, 14816,20248, 14824,24344, 14832,28440, + 14840,32536, 14880,16728, 14888,20824, 14896,24920, 14904,29016, + 14944,17240, 14952,21336, 14960,25432, 14968,29528, 15008,17752, + 15016,21848, 15024,25944, 15032,30040, 15072,18264, 15080,22360, + 15088,26456, 15096,30552, 15136,18776, 15144,22872, 15152,26968, + 15160,31064, 15200,19288, 15208,23384, 15216,27480, 15224,31576, + 15256,15704, 15264,19800, 15272,23896, 15280,27992, 15288,32088, + 15320,16216, 15328,20312, 15336,24408, 15344,28504, 15352,32600, + 15392,16792, 15400,20888, 15408,24984, 15416,29080, 15456,17304, + 15464,21400, 15472,25496, 15480,29592, 15520,17816, 15528,21912, + 15536,26008, 15544,30104, 15584,18328, 15592,22424, 15600,26520, + 15608,30616, 15648,18840, 15656,22936, 15664,27032, 15672,31128, + 15712,19352, 15720,23448, 15728,27544, 15736,31640, 15776,19864, + 15784,23960, 15792,28056, 15800,32152, 15832,16280, 15840,20376, + 15848,24472, 15856,28568, 15864,32664, 15904,16856, 15912,20952, + 15920,25048, 15928,29144, 15968,17368, 15976,21464, 15984,25560, + 15992,29656, 16032,17880, 16040,21976, 16048,26072, 16056,30168, + 16096,18392, 16104,22488, 16112,26584, 16120,30680, 16160,18904, + 16168,23000, 16176,27096, 16184,31192, 16224,19416, 16232,23512, + 16240,27608, 16248,31704, 16288,19928, 16296,24024, 16304,28120, + 16312,32216, 16352,20440, 16360,24536, 16368,28632, 16376,32728, + 16424,20512, 16432,24608, 16440,28704, 16480,16928, 16488,21024, + 16496,25120, 16504,29216, 16544,17440, 16552,21536, 16560,25632, + 16568,29728, 16608,17952, 16616,22048, 16624,26144, 16632,30240, + 16672,18464, 16680,22560, 16688,26656, 16696,30752, 16736,18976, + 16744,23072, 16752,27168, 16760,31264, 16800,19488, 16808,23584, + 16816,27680, 16824,31776, 16864,20000, 16872,24096, 16880,28192, + 16888,32288, 16936,20576, 16944,24672, 16952,28768, 17000,21088, + 17008,25184, 17016,29280, 17056,17504, 17064,21600, 17072,25696, + 17080,29792, 17120,18016, 17128,22112, 17136,26208, 17144,30304, + 17184,18528, 17192,22624, 17200,26720, 17208,30816, 17248,19040, + 17256,23136, 17264,27232, 17272,31328, 17312,19552, 17320,23648, + 17328,27744, 17336,31840, 17376,20064, 17384,24160, 17392,28256, + 17400,32352, 17448,20640, 17456,24736, 17464,28832, 17512,21152, + 17520,25248, 17528,29344, 17576,21664, 17584,25760, 17592,29856, + 17632,18080, 17640,22176, 17648,26272, 17656,30368, 17696,18592, + 17704,22688, 17712,26784, 17720,30880, 17760,19104, 17768,23200, + 17776,27296, 17784,31392, 17824,19616, 17832,23712, 17840,27808, + 17848,31904, 17888,20128, 17896,24224, 17904,28320, 17912,32416, + 17960,20704, 17968,24800, 17976,28896, 18024,21216, 18032,25312, + 18040,29408, 18088,21728, 18096,25824, 18104,29920, 18152,22240, + 18160,26336, 18168,30432, 18208,18656, 18216,22752, 18224,26848, + 18232,30944, 18272,19168, 18280,23264, 18288,27360, 18296,31456, + 18336,19680, 18344,23776, 18352,27872, 18360,31968, 18400,20192, + 18408,24288, 18416,28384, 18424,32480, 18472,20768, 18480,24864, + 18488,28960, 18536,21280, 18544,25376, 18552,29472, 18600,21792, + 18608,25888, 18616,29984, 18664,22304, 18672,26400, 18680,30496, + 18728,22816, 18736,26912, 18744,31008, 18784,19232, 18792,23328, + 18800,27424, 18808,31520, 18848,19744, 18856,23840, 18864,27936, + 18872,32032, 18912,20256, 18920,24352, 18928,28448, 18936,32544, + 18984,20832, 18992,24928, 19000,29024, 19048,21344, 19056,25440, + 19064,29536, 19112,21856, 19120,25952, 19128,30048, 19176,22368, + 19184,26464, 19192,30560, 19240,22880, 19248,26976, 19256,31072, + 19304,23392, 19312,27488, 19320,31584, 19360,19808, 19368,23904, + 19376,28000, 19384,32096, 19424,20320, 19432,24416, 19440,28512, + 19448,32608, 19496,20896, 19504,24992, 19512,29088, 19560,21408, + 19568,25504, 19576,29600, 19624,21920, 19632,26016, 19640,30112, + 19688,22432, 19696,26528, 19704,30624, 19752,22944, 19760,27040, + 19768,31136, 19816,23456, 19824,27552, 19832,31648, 19880,23968, + 19888,28064, 19896,32160, 19936,20384, 19944,24480, 19952,28576, + 19960,32672, 20008,20960, 20016,25056, 20024,29152, 20072,21472, + 20080,25568, 20088,29664, 20136,21984, 20144,26080, 20152,30176, + 20200,22496, 20208,26592, 20216,30688, 20264,23008, 20272,27104, + 20280,31200, 20328,23520, 20336,27616, 20344,31712, 20392,24032, + 20400,28128, 20408,32224, 20456,24544, 20464,28640, 20472,32736, + 20528,24616, 20536,28712, 20584,21032, 20592,25128, 20600,29224, + 20648,21544, 20656,25640, 20664,29736, 20712,22056, 20720,26152, + 20728,30248, 20776,22568, 20784,26664, 20792,30760, 20840,23080, + 20848,27176, 20856,31272, 20904,23592, 20912,27688, 20920,31784, + 20968,24104, 20976,28200, 20984,32296, 21040,24680, 21048,28776, + 21104,25192, 21112,29288, 21160,21608, 21168,25704, 21176,29800, + 21224,22120, 21232,26216, 21240,30312, 21288,22632, 21296,26728, + 21304,30824, 21352,23144, 21360,27240, 21368,31336, 21416,23656, + 21424,27752, 21432,31848, 21480,24168, 21488,28264, 21496,32360, + 21552,24744, 21560,28840, 21616,25256, 21624,29352, 21680,25768, + 21688,29864, 21736,22184, 21744,26280, 21752,30376, 21800,22696, + 21808,26792, 21816,30888, 21864,23208, 21872,27304, 21880,31400, + 21928,23720, 21936,27816, 21944,31912, 21992,24232, 22000,28328, + 22008,32424, 22064,24808, 22072,28904, 22128,25320, 22136,29416, + 22192,25832, 22200,29928, 22256,26344, 22264,30440, 22312,22760, + 22320,26856, 22328,30952, 22376,23272, 22384,27368, 22392,31464, + 22440,23784, 22448,27880, 22456,31976, 22504,24296, 22512,28392, + 22520,32488, 22576,24872, 22584,28968, 22640,25384, 22648,29480, + 22704,25896, 22712,29992, 22768,26408, 22776,30504, 22832,26920, + 22840,31016, 22888,23336, 22896,27432, 22904,31528, 22952,23848, + 22960,27944, 22968,32040, 23016,24360, 23024,28456, 23032,32552, + 23088,24936, 23096,29032, 23152,25448, 23160,29544, 23216,25960, + 23224,30056, 23280,26472, 23288,30568, 23344,26984, 23352,31080, + 23408,27496, 23416,31592, 23464,23912, 23472,28008, 23480,32104, + 23528,24424, 23536,28520, 23544,32616, 23600,25000, 23608,29096, + 23664,25512, 23672,29608, 23728,26024, 23736,30120, 23792,26536, + 23800,30632, 23856,27048, 23864,31144, 23920,27560, 23928,31656, + 23984,28072, 23992,32168, 24040,24488, 24048,28584, 24056,32680, + 24112,25064, 24120,29160, 24176,25576, 24184,29672, 24240,26088, + 24248,30184, 24304,26600, 24312,30696, 24368,27112, 24376,31208, + 24432,27624, 24440,31720, 24496,28136, 24504,32232, 24560,28648, + 24568,32744, 24632,28720, 24688,25136, 24696,29232, 24752,25648, + 24760,29744, 24816,26160, 24824,30256, 24880,26672, 24888,30768, + 24944,27184, 24952,31280, 25008,27696, 25016,31792, 25072,28208, + 25080,32304, 25144,28784, 25208,29296, 25264,25712, 25272,29808, + 25328,26224, 25336,30320, 25392,26736, 25400,30832, 25456,27248, + 25464,31344, 25520,27760, 25528,31856, 25584,28272, 25592,32368, + 25656,28848, 25720,29360, 25784,29872, 25840,26288, 25848,30384, + 25904,26800, 25912,30896, 25968,27312, 25976,31408, 26032,27824, + 26040,31920, 26096,28336, 26104,32432, 26168,28912, 26232,29424, + 26296,29936, 26360,30448, 26416,26864, 26424,30960, 26480,27376, + 26488,31472, 26544,27888, 26552,31984, 26608,28400, 26616,32496, + 26680,28976, 26744,29488, 26808,30000, 26872,30512, 26936,31024, + 26992,27440, 27000,31536, 27056,27952, 27064,32048, 27120,28464, + 27128,32560, 27192,29040, 27256,29552, 27320,30064, 27384,30576, + 27448,31088, 27512,31600, 27568,28016, 27576,32112, 27632,28528, + 27640,32624, 27704,29104, 27768,29616, 27832,30128, 27896,30640, + 27960,31152, 28024,31664, 28088,32176, 28144,28592, 28152,32688, + 28216,29168, 28280,29680, 28344,30192, 28408,30704, 28472,31216, + 28536,31728, 28600,32240, 28664,32752, 28792,29240, 28856,29752, + 28920,30264, 28984,30776, 29048,31288, 29112,31800, 29176,32312, + 29368,29816, 29432,30328, 29496,30840, 29560,31352, 29624,31864, + 29688,32376, 29944,30392, 30008,30904, 30072,31416, 30136,31928, + 30200,32440, 30520,30968, 30584,31480, 30648,31992, 30712,32504, + 31096,31544, 31160,32056, 31224,32568, 31672,32120, 31736,32632, + 32248,32696 +}; + + +const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH] = +{ + //radix 4, size 12 + 8,64, 16,32, 24,96, 40,80, 56,112, 88,104 +}; + +const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH] = +{ + //4x2, size 24 + 8,128, 16,64, 24,192, 40,160, 48,96, 56,224, 72,144, + 88,208, 104,176, 120,240, 152,200, 184,232 +}; + +const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH] = +{ + //radix 4, size 56 + 8,256, 16,128, 24,384, 32,64, 40,320, 48,192, 56,448, 72,288, 80,160, 88,416, 104,352, + 112,224, 120,480, 136,272, 152,400, 168,336, 176,208, 184,464, 200,304, 216,432, + 232,368, 248,496, 280,392, 296,328, 312,456, 344,424, 376,488, 440,472 +}; + +const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH] = +{ + //4x2, size 112 + 8,512, 16,256, 24,768, 32,128, 40,640, 48,384, 56,896, 72,576, 80,320, 88,832, 96,192, + 104,704, 112,448, 120,960, 136,544, 144,288, 152,800, 168,672, 176,416, 184,928, 200,608, + 208,352, 216,864, 232,736, 240,480, 248,992, 264,528, 280,784, 296,656, 304,400, 312,912, + 328,592, 344,848, 360,720, 368,464, 376,976, 392,560, 408,816, 424,688, 440,944, 456,624, + 472,880, 488,752, 504,1008, 536,776, 552,648, 568,904, 600,840, 616,712, 632,968, + 664,808, 696,936, 728,872, 760,1000, 824,920, 888,984 +}; + +const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH] = +{ + //radix 4, size 240 + 8,1024, 16,512, 24,1536, 32,256, 40,1280, 48,768, 56,1792, 64,128, 72,1152, 80,640, + 88,1664, 96,384, 104,1408, 112,896, 120,1920, 136,1088, 144,576, 152,1600, 160,320, + 168,1344, 176,832, 184,1856, 200,1216, 208,704, 216,1728, 224,448, 232,1472, 240,960, + 248,1984, 264,1056, 272,544, 280,1568, 296,1312, 304,800, 312,1824, 328,1184, 336,672, + 344,1696, 352,416, 360,1440, 368,928, 376,1952, 392,1120, 400,608, 408,1632, 424,1376, + 432,864, 440,1888, 456,1248, 464,736, 472,1760, 488,1504, 496,992, 504,2016, 520,1040, + 536,1552, 552,1296, 560,784, 568,1808, 584,1168, 592,656, 600,1680, 616,1424, 624,912, + 632,1936, 648,1104, 664,1616, 680,1360, 688,848, 696,1872, 712,1232, 728,1744, 744,1488, + 752,976, 760,2000, 776,1072, 792,1584, 808,1328, 824,1840, 840,1200, 856,1712, 872,1456, + 880,944, 888,1968, 904,1136, 920,1648, 936,1392, 952,1904, 968,1264, 984,1776, 1000,1520, + 1016,2032, 1048,1544, 1064,1288, 1080,1800, 1096,1160, 1112,1672, 1128,1416, 1144,1928, + 1176,1608, 1192,1352, 1208,1864, 1240,1736, 1256,1480, 1272,1992, 1304,1576, 1336,1832, + 1368,1704, 1384,1448, 1400,1960, 1432,1640, 1464,1896, 1496,1768, 1528,2024, 1592,1816, + 1624,1688, 1656,1944, 1720,1880, 1784,2008, 1912,1976 +}; + +const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH] = +{ + //4x2, size 480 + 8,2048, 16,1024, 24,3072, 32,512, 40,2560, 48,1536, 56,3584, 64,256, 72,2304, 80,1280, + 88,3328, 96,768, 104,2816, 112,1792, 120,3840, 136,2176, 144,1152, 152,3200, 160,640, + 168,2688, 176,1664, 184,3712, 192,384, 200,2432, 208,1408, 216,3456, 224,896, 232,2944, + 240,1920, 248,3968, 264,2112, 272,1088, 280,3136, 288,576, 296,2624, 304,1600, 312,3648, + 328,2368, 336,1344, 344,3392, 352,832, 360,2880, 368,1856, 376,3904, 392,2240, 400,1216, + 408,3264, 416,704, 424,2752, 432,1728, 440,3776, 456,2496, 464,1472, 472,3520, 480,960, + 488,3008, 496,1984, 504,4032, 520,2080, 528,1056, 536,3104, 552,2592, 560,1568, 568,3616, + 584,2336, 592,1312, 600,3360, 608,800, 616,2848, 624,1824, 632,3872, 648,2208, 656,1184, + 664,3232, 680,2720, 688,1696, 696,3744, 712,2464, 720,1440, 728,3488, 736,928, 744,2976, + 752,1952, 760,4000, 776,2144, 784,1120, 792,3168, 808,2656, 816,1632, 824,3680, 840,2400, + 848,1376, 856,3424, 872,2912, 880,1888, 888,3936, 904,2272, 912,1248, 920,3296, 936,2784, + 944,1760, 952,3808, 968,2528, 976,1504, 984,3552, 1000,3040, 1008,2016, 1016,4064, + 1032,2064, 1048,3088, 1064,2576, 1072,1552, 1080,3600, 1096,2320, 1104,1296, 1112,3344, + 1128,2832, 1136,1808, 1144,3856, 1160,2192, 1176,3216, 1192,2704, 1200,1680, 1208,3728, + 1224,2448, 1232,1424, 1240,3472, 1256,2960, 1264,1936, 1272,3984, 1288,2128, 1304,3152, + 1320,2640, 1328,1616, 1336,3664, 1352,2384, 1368,3408, 1384,2896, 1392,1872, 1400,3920, + 1416,2256, 1432,3280, 1448,2768, 1456,1744, 1464,3792, 1480,2512, 1496,3536, 1512,3024, + 1520,2000, 1528,4048, 1544,2096, 1560,3120, 1576,2608, 1592,3632, 1608,2352, 1624,3376, + 1640,2864, 1648,1840, 1656,3888, 1672,2224, 1688,3248, 1704,2736, 1720,3760, 1736,2480, + 1752,3504, 1768,2992, 1776,1968, 1784,4016, 1800,2160, 1816,3184, 1832,2672, 1848,3696, + 1864,2416, 1880,3440, 1896,2928, 1912,3952, 1928,2288, 1944,3312, 1960,2800, 1976,3824, + 1992,2544, 2008,3568, 2024,3056, 2040,4080, 2072,3080, 2088,2568, 2104,3592, 2120,2312, + 2136,3336, 2152,2824, 2168,3848, 2200,3208, 2216,2696, 2232,3720, 2248,2440, 2264,3464, + 2280,2952, 2296,3976, 2328,3144, 2344,2632, 2360,3656, 2392,3400, 2408,2888, 2424,3912, + 2456,3272, 2472,2760, 2488,3784, 2520,3528, 2536,3016, 2552,4040, 2584,3112, 2616,3624, + 2648,3368, 2664,2856, 2680,3880, 2712,3240, 2744,3752, 2776,3496, 2792,2984, 2808,4008, + 2840,3176, 2872,3688, 2904,3432, 2936,3944, 2968,3304, 3000,3816, 3032,3560, 3064,4072, + 3128,3608, 3160,3352, 3192,3864, 3256,3736, 3288,3480, 3320,3992, 3384,3672, 3448,3928, + 3512,3800, 3576,4056, 3704,3896, 3832,4024 +}; + +const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH] = +{ + //radix 4, size 992 + 8,4096, 16,2048, 24,6144, 32,1024, 40,5120, 48,3072, 56,7168, 64,512, 72,4608, + 80,2560, 88,6656, 96,1536, 104,5632, 112,3584, 120,7680, 128,256, 136,4352, + 144,2304, 152,6400, 160,1280, 168,5376, 176,3328, 184,7424, 192,768, 200,4864, + 208,2816, 216,6912, 224,1792, 232,5888, 240,3840, 248,7936, 264,4224, 272,2176, + 280,6272, 288,1152, 296,5248, 304,3200, 312,7296, 320,640, 328,4736, 336,2688, + 344,6784, 352,1664, 360,5760, 368,3712, 376,7808, 392,4480, 400,2432, 408,6528, + 416,1408, 424,5504, 432,3456, 440,7552, 448,896, 456,4992, 464,2944, 472,7040, + 480,1920, 488,6016, 496,3968, 504,8064, 520,4160, 528,2112, 536,6208, 544,1088, + 552,5184, 560,3136, 568,7232, 584,4672, 592,2624, 600,6720, 608,1600, 616,5696, + 624,3648, 632,7744, 648,4416, 656,2368, 664,6464, 672,1344, 680,5440, 688,3392, + 696,7488, 704,832, 712,4928, 720,2880, 728,6976, 736,1856, 744,5952, 752,3904, + 760,8000, 776,4288, 784,2240, 792,6336, 800,1216, 808,5312, 816,3264, 824,7360, + 840,4800, 848,2752, 856,6848, 864,1728, 872,5824, 880,3776, 888,7872, 904,4544, + 912,2496, 920,6592, 928,1472, 936,5568, 944,3520, 952,7616, 968,5056, 976,3008, + 984,7104, 992,1984, 1000,6080, 1008,4032, 1016,8128, 1032,4128, 1040,2080, + 1048,6176, 1064,5152, 1072,3104, 1080,7200, 1096,4640, 1104,2592, 1112,6688, + 1120,1568, 1128,5664, 1136,3616, 1144,7712, 1160,4384, 1168,2336, 1176,6432, + 1184,1312, 1192,5408, 1200,3360, 1208,7456, 1224,4896, 1232,2848, 1240,6944, + 1248,1824, 1256,5920, 1264,3872, 1272,7968, 1288,4256, 1296,2208, 1304,6304, + 1320,5280, 1328,3232, 1336,7328, 1352,4768, 1360,2720, 1368,6816, 1376,1696, + 1384,5792, 1392,3744, 1400,7840, 1416,4512, 1424,2464, 1432,6560, 1448,5536, + 1456,3488, 1464,7584, 1480,5024, 1488,2976, 1496,7072, 1504,1952, 1512,6048, + 1520,4000, 1528,8096, 1544,4192, 1552,2144, 1560,6240, 1576,5216, 1584,3168, + 1592,7264, 1608,4704, 1616,2656, 1624,6752, 1640,5728, 1648,3680, 1656,7776, + 1672,4448, 1680,2400, 1688,6496, 1704,5472, 1712,3424, 1720,7520, 1736,4960, + 1744,2912, 1752,7008, 1760,1888, 1768,5984, 1776,3936, 1784,8032, 1800,4320, + 1808,2272, 1816,6368, 1832,5344, 1840,3296, 1848,7392, 1864,4832, 1872,2784, + 1880,6880, 1896,5856, 1904,3808, 1912,7904, 1928,4576, 1936,2528, 1944,6624, + 1960,5600, 1968,3552, 1976,7648, 1992,5088, 2000,3040, 2008,7136, 2024,6112, + 2032,4064, 2040,8160, 2056,4112, 2072,6160, 2088,5136, 2096,3088, 2104,7184, + 2120,4624, 2128,2576, 2136,6672, 2152,5648, 2160,3600, 2168,7696, 2184,4368, + 2192,2320, 2200,6416, 2216,5392, 2224,3344, 2232,7440, 2248,4880, 2256,2832, + 2264,6928, 2280,5904, 2288,3856, 2296,7952, 2312,4240, 2328,6288, 2344,5264, + 2352,3216, 2360,7312, 2376,4752, 2384,2704, 2392,6800, 2408,5776, 2416,3728, + 2424,7824, 2440,4496, 2456,6544, 2472,5520, 2480,3472, 2488,7568, 2504,5008, + 2512,2960, 2520,7056, 2536,6032, 2544,3984, 2552,8080, 2568,4176, 2584,6224, + 2600,5200, 2608,3152, 2616,7248, 2632,4688, 2648,6736, 2664,5712, 2672,3664, + 2680,7760, 2696,4432, 2712,6480, 2728,5456, 2736,3408, 2744,7504, 2760,4944, + 2768,2896, 2776,6992, 2792,5968, 2800,3920, 2808,8016, 2824,4304, 2840,6352, + 2856,5328, 2864,3280, 2872,7376, 2888,4816, 2904,6864, 2920,5840, 2928,3792, + 2936,7888, 2952,4560, 2968,6608, 2984,5584, 2992,3536, 3000,7632, 3016,5072, + 3032,7120, 3048,6096, 3056,4048, 3064,8144, 3080,4144, 3096,6192, 3112,5168, + 3128,7216, 3144,4656, 3160,6704, 3176,5680, 3184,3632, 3192,7728, 3208,4400, + 3224,6448, 3240,5424, 3248,3376, 3256,7472, 3272,4912, 3288,6960, 3304,5936, + 3312,3888, 3320,7984, 3336,4272, 3352,6320, 3368,5296, 3384,7344, 3400,4784, + 3416,6832, 3432,5808, 3440,3760, 3448,7856, 3464,4528, 3480,6576, 3496,5552, + 3512,7600, 3528,5040, 3544,7088, 3560,6064, 3568,4016, 3576,8112, 3592,4208, + 3608,6256, 3624,5232, 3640,7280, 3656,4720, 3672,6768, 3688,5744, 3704,7792, + 3720,4464, 3736,6512, 3752,5488, 3768,7536, 3784,4976, 3800,7024, 3816,6000, + 3824,3952, 3832,8048, 3848,4336, 3864,6384, 3880,5360, 3896,7408, 3912,4848, + 3928,6896, 3944,5872, 3960,7920, 3976,4592, 3992,6640, 4008,5616, 4024,7664, + 4040,5104, 4056,7152, 4072,6128, 4088,8176, 4120,6152, 4136,5128, 4152,7176, + 4168,4616, 4184,6664, 4200,5640, 4216,7688, 4232,4360, 4248,6408, 4264,5384, + 4280,7432, 4296,4872, 4312,6920, 4328,5896, 4344,7944, 4376,6280, 4392,5256, + 4408,7304, 4424,4744, 4440,6792, 4456,5768, 4472,7816, 4504,6536, 4520,5512, + 4536,7560, 4552,5000, 4568,7048, 4584,6024, 4600,8072, 4632,6216, 4648,5192, + 4664,7240, 4696,6728, 4712,5704, 4728,7752, 4760,6472, 4776,5448, 4792,7496, + 4808,4936, 4824,6984, 4840,5960, 4856,8008, 4888,6344, 4904,5320, 4920,7368, + 4952,6856, 4968,5832, 4984,7880, 5016,6600, 5032,5576, 5048,7624, 5080,7112, + 5096,6088, 5112,8136, 5144,6184, 5176,7208, 5208,6696, 5224,5672, 5240,7720, + 5272,6440, 5288,5416, 5304,7464, 5336,6952, 5352,5928, 5368,7976, 5400,6312, + 5432,7336, 5464,6824, 5480,5800, 5496,7848, 5528,6568, 5560,7592, 5592,7080, + 5608,6056, 5624,8104, 5656,6248, 5688,7272, 5720,6760, 5752,7784, 5784,6504, + 5816,7528, 5848,7016, 5864,5992, 5880,8040, 5912,6376, 5944,7400, 5976,6888, + 6008,7912, 6040,6632, 6072,7656, 6104,7144, 6136,8168, 6200,7192, 6232,6680, + 6264,7704, 6296,6424, 6328,7448, 6360,6936, 6392,7960, 6456,7320, 6488,6808, + 6520,7832, 6584,7576, 6616,7064, 6648,8088, 6712,7256, 6776,7768, 6840,7512, + 6872,7000, 6904,8024, 6968,7384, 7032,7896, 7096,7640, 7160,8152, 7288,7736, + 7352,7480, 7416,7992, 7544,7864, 7672,8120, 7928,8056 +}; + +const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH] = +{ + //4x2, size 1984 + 8,8192, 16,4096, 24,12288, 32,2048, 40,10240, 48,6144, 56,14336, 64,1024, + 72,9216, 80,5120, 88,13312, 96,3072, 104,11264, 112,7168, 120,15360, 128,512, + 136,8704, 144,4608, 152,12800, 160,2560, 168,10752, 176,6656, 184,14848, + 192,1536, 200,9728, 208,5632, 216,13824, 224,3584, 232,11776, 240,7680, + 248,15872, 264,8448, 272,4352, 280,12544, 288,2304, 296,10496, 304,6400, + 312,14592, 320,1280, 328,9472, 336,5376, 344,13568, 352,3328, 360,11520, + 368,7424, 376,15616, 384,768, 392,8960, 400,4864, 408,13056, 416,2816, + 424,11008, 432,6912, 440,15104, 448,1792, 456,9984, 464,5888, 472,14080, + 480,3840, 488,12032, 496,7936, 504,16128, 520,8320, 528,4224, 536,12416, + 544,2176, 552,10368, 560,6272, 568,14464, 576,1152, 584,9344, 592,5248, + 600,13440, 608,3200, 616,11392, 624,7296, 632,15488, 648,8832, 656,4736, + 664,12928, 672,2688, 680,10880, 688,6784, 696,14976, 704,1664, 712,9856, + 720,5760, 728,13952, 736,3712, 744,11904, 752,7808, 760,16000, 776,8576, + 784,4480, 792,12672, 800,2432, 808,10624, 816,6528, 824,14720, 832,1408, + 840,9600, 848,5504, 856,13696, 864,3456, 872,11648, 880,7552, 888,15744, + 904,9088, 912,4992, 920,13184, 928,2944, 936,11136, 944,7040, 952,15232, + 960,1920, 968,10112, 976,6016, 984,14208, 992,3968, 1000,12160, 1008,8064, + 1016,16256, 1032,8256, 1040,4160, 1048,12352, 1056,2112, 1064,10304, 1072,6208, + 1080,14400, 1096,9280, 1104,5184, 1112,13376, 1120,3136, 1128,11328, 1136,7232, + 1144,15424, 1160,8768, 1168,4672, 1176,12864, 1184,2624, 1192,10816, 1200,6720, + 1208,14912, 1216,1600, 1224,9792, 1232,5696, 1240,13888, 1248,3648, 1256,11840, + 1264,7744, 1272,15936, 1288,8512, 1296,4416, 1304,12608, 1312,2368, 1320,10560, + 1328,6464, 1336,14656, 1352,9536, 1360,5440, 1368,13632, 1376,3392, 1384,11584, + 1392,7488, 1400,15680, 1416,9024, 1424,4928, 1432,13120, 1440,2880, 1448,11072, + 1456,6976, 1464,15168, 1472,1856, 1480,10048, 1488,5952, 1496,14144, 1504,3904, + 1512,12096, 1520,8000, 1528,16192, 1544,8384, 1552,4288, 1560,12480, 1568,2240, + 1576,10432, 1584,6336, 1592,14528, 1608,9408, 1616,5312, 1624,13504, 1632,3264, + 1640,11456, 1648,7360, 1656,15552, 1672,8896, 1680,4800, 1688,12992, 1696,2752, + 1704,10944, 1712,6848, 1720,15040, 1736,9920, 1744,5824, 1752,14016, 1760,3776, + 1768,11968, 1776,7872, 1784,16064, 1800,8640, 1808,4544, 1816,12736, 1824,2496, + 1832,10688, 1840,6592, 1848,14784, 1864,9664, 1872,5568, 1880,13760, 1888,3520, + 1896,11712, 1904,7616, 1912,15808, 1928,9152, 1936,5056, 1944,13248, 1952,3008, + 1960,11200, 1968,7104, 1976,15296, 1992,10176, 2000,6080, 2008,14272, 2016,4032, + 2024,12224, 2032,8128, 2040,16320, 2056,8224, 2064,4128, 2072,12320, 2088,10272, + 2096,6176, 2104,14368, 2120,9248, 2128,5152, 2136,13344, 2144,3104, 2152,11296, + 2160,7200, 2168,15392, 2184,8736, 2192,4640, 2200,12832, 2208,2592, 2216,10784, + 2224,6688, 2232,14880, 2248,9760, 2256,5664, 2264,13856, 2272,3616, 2280,11808, + 2288,7712, 2296,15904, 2312,8480, 2320,4384, 2328,12576, 2344,10528, 2352,6432, + 2360,14624, 2376,9504, 2384,5408, 2392,13600, 2400,3360, 2408,11552, 2416,7456, + 2424,15648, 2440,8992, 2448,4896, 2456,13088, 2464,2848, 2472,11040, 2480,6944, + 2488,15136, 2504,10016, 2512,5920, 2520,14112, 2528,3872, 2536,12064, 2544,7968, + 2552,16160, 2568,8352, 2576,4256, 2584,12448, 2600,10400, 2608,6304, 2616,14496, + 2632,9376, 2640,5280, 2648,13472, 2656,3232, 2664,11424, 2672,7328, 2680,15520, + 2696,8864, 2704,4768, 2712,12960, 2728,10912, 2736,6816, 2744,15008, 2760,9888, + 2768,5792, 2776,13984, 2784,3744, 2792,11936, 2800,7840, 2808,16032, 2824,8608, + 2832,4512, 2840,12704, 2856,10656, 2864,6560, 2872,14752, 2888,9632, 2896,5536, + 2904,13728, 2912,3488, 2920,11680, 2928,7584, 2936,15776, 2952,9120, 2960,5024, + 2968,13216, 2984,11168, 2992,7072, 3000,15264, 3016,10144, 3024,6048, + 3032,14240, 3040,4000, 3048,12192, 3056,8096, 3064,16288, 3080,8288, 3088,4192, + 3096,12384, 3112,10336, 3120,6240, 3128,14432, 3144,9312, 3152,5216, 3160,13408, + 3176,11360, 3184,7264, 3192,15456, 3208,8800, 3216,4704, 3224,12896, 3240,10848, + 3248,6752, 3256,14944, 3272,9824, 3280,5728, 3288,13920, 3296,3680, 3304,11872, + 3312,7776, 3320,15968, 3336,8544, 3344,4448, 3352,12640, 3368,10592, 3376,6496, + 3384,14688, 3400,9568, 3408,5472, 3416,13664, 3432,11616, 3440,7520, 3448,15712, + 3464,9056, 3472,4960, 3480,13152, 3496,11104, 3504,7008, 3512,15200, 3528,10080, + 3536,5984, 3544,14176, 3552,3936, 3560,12128, 3568,8032, 3576,16224, 3592,8416, + 3600,4320, 3608,12512, 3624,10464, 3632,6368, 3640,14560, 3656,9440, 3664,5344, + 3672,13536, 3688,11488, 3696,7392, 3704,15584, 3720,8928, 3728,4832, 3736,13024, + 3752,10976, 3760,6880, 3768,15072, 3784,9952, 3792,5856, 3800,14048, 3816,12000, + 3824,7904, 3832,16096, 3848,8672, 3856,4576, 3864,12768, 3880,10720, 3888,6624, + 3896,14816, 3912,9696, 3920,5600, 3928,13792, 3944,11744, 3952,7648, 3960,15840, + 3976,9184, 3984,5088, 3992,13280, 4008,11232, 4016,7136, 4024,15328, 4040,10208, + 4048,6112, 4056,14304, 4072,12256, 4080,8160, 4088,16352, 4104,8208, 4120,12304, + 4136,10256, 4144,6160, 4152,14352, 4168,9232, 4176,5136, 4184,13328, 4200,11280, + 4208,7184, 4216,15376, 4232,8720, 4240,4624, 4248,12816, 4264,10768, 4272,6672, + 4280,14864, 4296,9744, 4304,5648, 4312,13840, 4328,11792, 4336,7696, 4344,15888, + 4360,8464, 4376,12560, 4392,10512, 4400,6416, 4408,14608, 4424,9488, 4432,5392, + 4440,13584, 4456,11536, 4464,7440, 4472,15632, 4488,8976, 4496,4880, 4504,13072, + 4520,11024, 4528,6928, 4536,15120, 4552,10000, 4560,5904, 4568,14096, + 4584,12048, 4592,7952, 4600,16144, 4616,8336, 4632,12432, 4648,10384, 4656,6288, + 4664,14480, 4680,9360, 4688,5264, 4696,13456, 4712,11408, 4720,7312, 4728,15504, + 4744,8848, 4760,12944, 4776,10896, 4784,6800, 4792,14992, 4808,9872, 4816,5776, + 4824,13968, 4840,11920, 4848,7824, 4856,16016, 4872,8592, 4888,12688, + 4904,10640, 4912,6544, 4920,14736, 4936,9616, 4944,5520, 4952,13712, 4968,11664, + 4976,7568, 4984,15760, 5000,9104, 5016,13200, 5032,11152, 5040,7056, 5048,15248, + 5064,10128, 5072,6032, 5080,14224, 5096,12176, 5104,8080, 5112,16272, 5128,8272, + 5144,12368, 5160,10320, 5168,6224, 5176,14416, 5192,9296, 5208,13392, + 5224,11344, 5232,7248, 5240,15440, 5256,8784, 5272,12880, 5288,10832, 5296,6736, + 5304,14928, 5320,9808, 5328,5712, 5336,13904, 5352,11856, 5360,7760, 5368,15952, + 5384,8528, 5400,12624, 5416,10576, 5424,6480, 5432,14672, 5448,9552, 5464,13648, + 5480,11600, 5488,7504, 5496,15696, 5512,9040, 5528,13136, 5544,11088, 5552,6992, + 5560,15184, 5576,10064, 5584,5968, 5592,14160, 5608,12112, 5616,8016, + 5624,16208, 5640,8400, 5656,12496, 5672,10448, 5680,6352, 5688,14544, 5704,9424, + 5720,13520, 5736,11472, 5744,7376, 5752,15568, 5768,8912, 5784,13008, + 5800,10960, 5808,6864, 5816,15056, 5832,9936, 5848,14032, 5864,11984, 5872,7888, + 5880,16080, 5896,8656, 5912,12752, 5928,10704, 5936,6608, 5944,14800, 5960,9680, + 5976,13776, 5992,11728, 6000,7632, 6008,15824, 6024,9168, 6040,13264, + 6056,11216, 6064,7120, 6072,15312, 6088,10192, 6104,14288, 6120,12240, + 6128,8144, 6136,16336, 6152,8240, 6168,12336, 6184,10288, 6200,14384, 6216,9264, + 6232,13360, 6248,11312, 6256,7216, 6264,15408, 6280,8752, 6296,12848, + 6312,10800, 6320,6704, 6328,14896, 6344,9776, 6360,13872, 6376,11824, 6384,7728, + 6392,15920, 6408,8496, 6424,12592, 6440,10544, 6456,14640, 6472,9520, + 6488,13616, 6504,11568, 6512,7472, 6520,15664, 6536,9008, 6552,13104, + 6568,11056, 6576,6960, 6584,15152, 6600,10032, 6616,14128, 6632,12080, + 6640,7984, 6648,16176, 6664,8368, 6680,12464, 6696,10416, 6712,14512, 6728,9392, + 6744,13488, 6760,11440, 6768,7344, 6776,15536, 6792,8880, 6808,12976, + 6824,10928, 6840,15024, 6856,9904, 6872,14000, 6888,11952, 6896,7856, + 6904,16048, 6920,8624, 6936,12720, 6952,10672, 6968,14768, 6984,9648, + 7000,13744, 7016,11696, 7024,7600, 7032,15792, 7048,9136, 7064,13232, + 7080,11184, 7096,15280, 7112,10160, 7128,14256, 7144,12208, 7152,8112, + 7160,16304, 7176,8304, 7192,12400, 7208,10352, 7224,14448, 7240,9328, + 7256,13424, 7272,11376, 7288,15472, 7304,8816, 7320,12912, 7336,10864, + 7352,14960, 7368,9840, 7384,13936, 7400,11888, 7408,7792, 7416,15984, 7432,8560, + 7448,12656, 7464,10608, 7480,14704, 7496,9584, 7512,13680, 7528,11632, + 7544,15728, 7560,9072, 7576,13168, 7592,11120, 7608,15216, 7624,10096, + 7640,14192, 7656,12144, 7664,8048, 7672,16240, 7688,8432, 7704,12528, + 7720,10480, 7736,14576, 7752,9456, 7768,13552, 7784,11504, 7800,15600, + 7816,8944, 7832,13040, 7848,10992, 7864,15088, 7880,9968, 7896,14064, + 7912,12016, 7928,16112, 7944,8688, 7960,12784, 7976,10736, 7992,14832, + 8008,9712, 8024,13808, 8040,11760, 8056,15856, 8072,9200, 8088,13296, + 8104,11248, 8120,15344, 8136,10224, 8152,14320, 8168,12272, 8184,16368, + 8216,12296, 8232,10248, 8248,14344, 8264,9224, 8280,13320, 8296,11272, + 8312,15368, 8328,8712, 8344,12808, 8360,10760, 8376,14856, 8392,9736, + 8408,13832, 8424,11784, 8440,15880, 8472,12552, 8488,10504, 8504,14600, + 8520,9480, 8536,13576, 8552,11528, 8568,15624, 8584,8968, 8600,13064, + 8616,11016, 8632,15112, 8648,9992, 8664,14088, 8680,12040, 8696,16136, + 8728,12424, 8744,10376, 8760,14472, 8776,9352, 8792,13448, 8808,11400, + 8824,15496, 8856,12936, 8872,10888, 8888,14984, 8904,9864, 8920,13960, + 8936,11912, 8952,16008, 8984,12680, 9000,10632, 9016,14728, 9032,9608, + 9048,13704, 9064,11656, 9080,15752, 9112,13192, 9128,11144, 9144,15240, + 9160,10120, 9176,14216, 9192,12168, 9208,16264, 9240,12360, 9256,10312, + 9272,14408, 9304,13384, 9320,11336, 9336,15432, 9368,12872, 9384,10824, + 9400,14920, 9416,9800, 9432,13896, 9448,11848, 9464,15944, 9496,12616, + 9512,10568, 9528,14664, 9560,13640, 9576,11592, 9592,15688, 9624,13128, + 9640,11080, 9656,15176, 9672,10056, 9688,14152, 9704,12104, 9720,16200, + 9752,12488, 9768,10440, 9784,14536, 9816,13512, 9832,11464, 9848,15560, + 9880,13000, 9896,10952, 9912,15048, 9944,14024, 9960,11976, 9976,16072, + 10008,12744, 10024,10696, 10040,14792, 10072,13768, 10088,11720, 10104,15816, + 10136,13256, 10152,11208, 10168,15304, 10200,14280, 10216,12232, 10232,16328, + 10264,12328, 10296,14376, 10328,13352, 10344,11304, 10360,15400, 10392,12840, + 10408,10792, 10424,14888, 10456,13864, 10472,11816, 10488,15912, 10520,12584, + 10552,14632, 10584,13608, 10600,11560, 10616,15656, 10648,13096, 10664,11048, + 10680,15144, 10712,14120, 10728,12072, 10744,16168, 10776,12456, 10808,14504, + 10840,13480, 10856,11432, 10872,15528, 10904,12968, 10936,15016, 10968,13992, + 10984,11944, 11000,16040, 11032,12712, 11064,14760, 11096,13736, 11112,11688, + 11128,15784, 11160,13224, 11192,15272, 11224,14248, 11240,12200, 11256,16296, + 11288,12392, 11320,14440, 11352,13416, 11384,15464, 11416,12904, 11448,14952, + 11480,13928, 11496,11880, 11512,15976, 11544,12648, 11576,14696, 11608,13672, + 11640,15720, 11672,13160, 11704,15208, 11736,14184, 11752,12136, 11768,16232, + 11800,12520, 11832,14568, 11864,13544, 11896,15592, 11928,13032, 11960,15080, + 11992,14056, 12024,16104, 12056,12776, 12088,14824, 12120,13800, 12152,15848, + 12184,13288, 12216,15336, 12248,14312, 12280,16360, 12344,14360, 12376,13336, + 12408,15384, 12440,12824, 12472,14872, 12504,13848, 12536,15896, 12600,14616, + 12632,13592, 12664,15640, 12696,13080, 12728,15128, 12760,14104, 12792,16152, + 12856,14488, 12888,13464, 12920,15512, 12984,15000, 13016,13976, 13048,16024, + 13112,14744, 13144,13720, 13176,15768, 13240,15256, 13272,14232, 13304,16280, + 13368,14424, 13432,15448, 13496,14936, 13528,13912, 13560,15960, 13624,14680, + 13688,15704, 13752,15192, 13784,14168, 13816,16216, 13880,14552, 13944,15576, + 14008,15064, 14072,16088, 14136,14808, 14200,15832, 14264,15320, 14328,16344, + 14456,15416, 14520,14904, 14584,15928, 14712,15672, 14776,15160, 14840,16184, + 14968,15544, 15096,16056, 15224,15800, 15352,16312, 15608,15992, 15864,16248 +}; + +const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH] = +{ + //radix 4, size 4032 + 8,16384, 16,8192, 24,24576, 32,4096, 40,20480, 48,12288, 56,28672, 64,2048, + 72,18432, 80,10240, 88,26624, 96,6144, 104,22528, 112,14336, 120,30720, + 128,1024, 136,17408, 144,9216, 152,25600, 160,5120, 168,21504, 176,13312, + 184,29696, 192,3072, 200,19456, 208,11264, 216,27648, 224,7168, 232,23552, + 240,15360, 248,31744, 256,512, 264,16896, 272,8704, 280,25088, 288,4608, + 296,20992, 304,12800, 312,29184, 320,2560, 328,18944, 336,10752, 344,27136, + 352,6656, 360,23040, 368,14848, 376,31232, 384,1536, 392,17920, 400,9728, + 408,26112, 416,5632, 424,22016, 432,13824, 440,30208, 448,3584, 456,19968, + 464,11776, 472,28160, 480,7680, 488,24064, 496,15872, 504,32256, 520,16640, + 528,8448, 536,24832, 544,4352, 552,20736, 560,12544, 568,28928, 576,2304, + 584,18688, 592,10496, 600,26880, 608,6400, 616,22784, 624,14592, 632,30976, + 640,1280, 648,17664, 656,9472, 664,25856, 672,5376, 680,21760, 688,13568, + 696,29952, 704,3328, 712,19712, 720,11520, 728,27904, 736,7424, 744,23808, + 752,15616, 760,32000, 776,17152, 784,8960, 792,25344, 800,4864, 808,21248, + 816,13056, 824,29440, 832,2816, 840,19200, 848,11008, 856,27392, 864,6912, + 872,23296, 880,15104, 888,31488, 896,1792, 904,18176, 912,9984, 920,26368, + 928,5888, 936,22272, 944,14080, 952,30464, 960,3840, 968,20224, 976,12032, + 984,28416, 992,7936, 1000,24320, 1008,16128, 1016,32512, 1032,16512, 1040,8320, + 1048,24704, 1056,4224, 1064,20608, 1072,12416, 1080,28800, 1088,2176, + 1096,18560, 1104,10368, 1112,26752, 1120,6272, 1128,22656, 1136,14464, + 1144,30848, 1160,17536, 1168,9344, 1176,25728, 1184,5248, 1192,21632, + 1200,13440, 1208,29824, 1216,3200, 1224,19584, 1232,11392, 1240,27776, + 1248,7296, 1256,23680, 1264,15488, 1272,31872, 1288,17024, 1296,8832, + 1304,25216, 1312,4736, 1320,21120, 1328,12928, 1336,29312, 1344,2688, + 1352,19072, 1360,10880, 1368,27264, 1376,6784, 1384,23168, 1392,14976, + 1400,31360, 1408,1664, 1416,18048, 1424,9856, 1432,26240, 1440,5760, 1448,22144, + 1456,13952, 1464,30336, 1472,3712, 1480,20096, 1488,11904, 1496,28288, + 1504,7808, 1512,24192, 1520,16000, 1528,32384, 1544,16768, 1552,8576, + 1560,24960, 1568,4480, 1576,20864, 1584,12672, 1592,29056, 1600,2432, + 1608,18816, 1616,10624, 1624,27008, 1632,6528, 1640,22912, 1648,14720, + 1656,31104, 1672,17792, 1680,9600, 1688,25984, 1696,5504, 1704,21888, + 1712,13696, 1720,30080, 1728,3456, 1736,19840, 1744,11648, 1752,28032, + 1760,7552, 1768,23936, 1776,15744, 1784,32128, 1800,17280, 1808,9088, + 1816,25472, 1824,4992, 1832,21376, 1840,13184, 1848,29568, 1856,2944, + 1864,19328, 1872,11136, 1880,27520, 1888,7040, 1896,23424, 1904,15232, + 1912,31616, 1928,18304, 1936,10112, 1944,26496, 1952,6016, 1960,22400, + 1968,14208, 1976,30592, 1984,3968, 1992,20352, 2000,12160, 2008,28544, + 2016,8064, 2024,24448, 2032,16256, 2040,32640, 2056,16448, 2064,8256, + 2072,24640, 2080,4160, 2088,20544, 2096,12352, 2104,28736, 2120,18496, + 2128,10304, 2136,26688, 2144,6208, 2152,22592, 2160,14400, 2168,30784, + 2184,17472, 2192,9280, 2200,25664, 2208,5184, 2216,21568, 2224,13376, + 2232,29760, 2240,3136, 2248,19520, 2256,11328, 2264,27712, 2272,7232, + 2280,23616, 2288,15424, 2296,31808, 2312,16960, 2320,8768, 2328,25152, + 2336,4672, 2344,21056, 2352,12864, 2360,29248, 2368,2624, 2376,19008, + 2384,10816, 2392,27200, 2400,6720, 2408,23104, 2416,14912, 2424,31296, + 2440,17984, 2448,9792, 2456,26176, 2464,5696, 2472,22080, 2480,13888, + 2488,30272, 2496,3648, 2504,20032, 2512,11840, 2520,28224, 2528,7744, + 2536,24128, 2544,15936, 2552,32320, 2568,16704, 2576,8512, 2584,24896, + 2592,4416, 2600,20800, 2608,12608, 2616,28992, 2632,18752, 2640,10560, + 2648,26944, 2656,6464, 2664,22848, 2672,14656, 2680,31040, 2696,17728, + 2704,9536, 2712,25920, 2720,5440, 2728,21824, 2736,13632, 2744,30016, 2752,3392, + 2760,19776, 2768,11584, 2776,27968, 2784,7488, 2792,23872, 2800,15680, + 2808,32064, 2824,17216, 2832,9024, 2840,25408, 2848,4928, 2856,21312, + 2864,13120, 2872,29504, 2888,19264, 2896,11072, 2904,27456, 2912,6976, + 2920,23360, 2928,15168, 2936,31552, 2952,18240, 2960,10048, 2968,26432, + 2976,5952, 2984,22336, 2992,14144, 3000,30528, 3008,3904, 3016,20288, + 3024,12096, 3032,28480, 3040,8000, 3048,24384, 3056,16192, 3064,32576, + 3080,16576, 3088,8384, 3096,24768, 3104,4288, 3112,20672, 3120,12480, + 3128,28864, 3144,18624, 3152,10432, 3160,26816, 3168,6336, 3176,22720, + 3184,14528, 3192,30912, 3208,17600, 3216,9408, 3224,25792, 3232,5312, + 3240,21696, 3248,13504, 3256,29888, 3272,19648, 3280,11456, 3288,27840, + 3296,7360, 3304,23744, 3312,15552, 3320,31936, 3336,17088, 3344,8896, + 3352,25280, 3360,4800, 3368,21184, 3376,12992, 3384,29376, 3400,19136, + 3408,10944, 3416,27328, 3424,6848, 3432,23232, 3440,15040, 3448,31424, + 3464,18112, 3472,9920, 3480,26304, 3488,5824, 3496,22208, 3504,14016, + 3512,30400, 3520,3776, 3528,20160, 3536,11968, 3544,28352, 3552,7872, + 3560,24256, 3568,16064, 3576,32448, 3592,16832, 3600,8640, 3608,25024, + 3616,4544, 3624,20928, 3632,12736, 3640,29120, 3656,18880, 3664,10688, + 3672,27072, 3680,6592, 3688,22976, 3696,14784, 3704,31168, 3720,17856, + 3728,9664, 3736,26048, 3744,5568, 3752,21952, 3760,13760, 3768,30144, + 3784,19904, 3792,11712, 3800,28096, 3808,7616, 3816,24000, 3824,15808, + 3832,32192, 3848,17344, 3856,9152, 3864,25536, 3872,5056, 3880,21440, + 3888,13248, 3896,29632, 3912,19392, 3920,11200, 3928,27584, 3936,7104, + 3944,23488, 3952,15296, 3960,31680, 3976,18368, 3984,10176, 3992,26560, + 4000,6080, 4008,22464, 4016,14272, 4024,30656, 4040,20416, 4048,12224, + 4056,28608, 4064,8128, 4072,24512, 4080,16320, 4088,32704, 4104,16416, + 4112,8224, 4120,24608, 4136,20512, 4144,12320, 4152,28704, 4168,18464, + 4176,10272, 4184,26656, 4192,6176, 4200,22560, 4208,14368, 4216,30752, + 4232,17440, 4240,9248, 4248,25632, 4256,5152, 4264,21536, 4272,13344, + 4280,29728, 4296,19488, 4304,11296, 4312,27680, 4320,7200, 4328,23584, + 4336,15392, 4344,31776, 4360,16928, 4368,8736, 4376,25120, 4384,4640, + 4392,21024, 4400,12832, 4408,29216, 4424,18976, 4432,10784, 4440,27168, + 4448,6688, 4456,23072, 4464,14880, 4472,31264, 4488,17952, 4496,9760, + 4504,26144, 4512,5664, 4520,22048, 4528,13856, 4536,30240, 4552,20000, + 4560,11808, 4568,28192, 4576,7712, 4584,24096, 4592,15904, 4600,32288, + 4616,16672, 4624,8480, 4632,24864, 4648,20768, 4656,12576, 4664,28960, + 4680,18720, 4688,10528, 4696,26912, 4704,6432, 4712,22816, 4720,14624, + 4728,31008, 4744,17696, 4752,9504, 4760,25888, 4768,5408, 4776,21792, + 4784,13600, 4792,29984, 4808,19744, 4816,11552, 4824,27936, 4832,7456, + 4840,23840, 4848,15648, 4856,32032, 4872,17184, 4880,8992, 4888,25376, + 4904,21280, 4912,13088, 4920,29472, 4936,19232, 4944,11040, 4952,27424, + 4960,6944, 4968,23328, 4976,15136, 4984,31520, 5000,18208, 5008,10016, + 5016,26400, 5024,5920, 5032,22304, 5040,14112, 5048,30496, 5064,20256, + 5072,12064, 5080,28448, 5088,7968, 5096,24352, 5104,16160, 5112,32544, + 5128,16544, 5136,8352, 5144,24736, 5160,20640, 5168,12448, 5176,28832, + 5192,18592, 5200,10400, 5208,26784, 5216,6304, 5224,22688, 5232,14496, + 5240,30880, 5256,17568, 5264,9376, 5272,25760, 5288,21664, 5296,13472, + 5304,29856, 5320,19616, 5328,11424, 5336,27808, 5344,7328, 5352,23712, + 5360,15520, 5368,31904, 5384,17056, 5392,8864, 5400,25248, 5416,21152, + 5424,12960, 5432,29344, 5448,19104, 5456,10912, 5464,27296, 5472,6816, + 5480,23200, 5488,15008, 5496,31392, 5512,18080, 5520,9888, 5528,26272, + 5536,5792, 5544,22176, 5552,13984, 5560,30368, 5576,20128, 5584,11936, + 5592,28320, 5600,7840, 5608,24224, 5616,16032, 5624,32416, 5640,16800, + 5648,8608, 5656,24992, 5672,20896, 5680,12704, 5688,29088, 5704,18848, + 5712,10656, 5720,27040, 5728,6560, 5736,22944, 5744,14752, 5752,31136, + 5768,17824, 5776,9632, 5784,26016, 5800,21920, 5808,13728, 5816,30112, + 5832,19872, 5840,11680, 5848,28064, 5856,7584, 5864,23968, 5872,15776, + 5880,32160, 5896,17312, 5904,9120, 5912,25504, 5928,21408, 5936,13216, + 5944,29600, 5960,19360, 5968,11168, 5976,27552, 5984,7072, 5992,23456, + 6000,15264, 6008,31648, 6024,18336, 6032,10144, 6040,26528, 6056,22432, + 6064,14240, 6072,30624, 6088,20384, 6096,12192, 6104,28576, 6112,8096, + 6120,24480, 6128,16288, 6136,32672, 6152,16480, 6160,8288, 6168,24672, + 6184,20576, 6192,12384, 6200,28768, 6216,18528, 6224,10336, 6232,26720, + 6248,22624, 6256,14432, 6264,30816, 6280,17504, 6288,9312, 6296,25696, + 6312,21600, 6320,13408, 6328,29792, 6344,19552, 6352,11360, 6360,27744, + 6368,7264, 6376,23648, 6384,15456, 6392,31840, 6408,16992, 6416,8800, + 6424,25184, 6440,21088, 6448,12896, 6456,29280, 6472,19040, 6480,10848, + 6488,27232, 6496,6752, 6504,23136, 6512,14944, 6520,31328, 6536,18016, + 6544,9824, 6552,26208, 6568,22112, 6576,13920, 6584,30304, 6600,20064, + 6608,11872, 6616,28256, 6624,7776, 6632,24160, 6640,15968, 6648,32352, + 6664,16736, 6672,8544, 6680,24928, 6696,20832, 6704,12640, 6712,29024, + 6728,18784, 6736,10592, 6744,26976, 6760,22880, 6768,14688, 6776,31072, + 6792,17760, 6800,9568, 6808,25952, 6824,21856, 6832,13664, 6840,30048, + 6856,19808, 6864,11616, 6872,28000, 6880,7520, 6888,23904, 6896,15712, + 6904,32096, 6920,17248, 6928,9056, 6936,25440, 6952,21344, 6960,13152, + 6968,29536, 6984,19296, 6992,11104, 7000,27488, 7016,23392, 7024,15200, + 7032,31584, 7048,18272, 7056,10080, 7064,26464, 7080,22368, 7088,14176, + 7096,30560, 7112,20320, 7120,12128, 7128,28512, 7136,8032, 7144,24416, + 7152,16224, 7160,32608, 7176,16608, 7184,8416, 7192,24800, 7208,20704, + 7216,12512, 7224,28896, 7240,18656, 7248,10464, 7256,26848, 7272,22752, + 7280,14560, 7288,30944, 7304,17632, 7312,9440, 7320,25824, 7336,21728, + 7344,13536, 7352,29920, 7368,19680, 7376,11488, 7384,27872, 7400,23776, + 7408,15584, 7416,31968, 7432,17120, 7440,8928, 7448,25312, 7464,21216, + 7472,13024, 7480,29408, 7496,19168, 7504,10976, 7512,27360, 7528,23264, + 7536,15072, 7544,31456, 7560,18144, 7568,9952, 7576,26336, 7592,22240, + 7600,14048, 7608,30432, 7624,20192, 7632,12000, 7640,28384, 7648,7904, + 7656,24288, 7664,16096, 7672,32480, 7688,16864, 7696,8672, 7704,25056, + 7720,20960, 7728,12768, 7736,29152, 7752,18912, 7760,10720, 7768,27104, + 7784,23008, 7792,14816, 7800,31200, 7816,17888, 7824,9696, 7832,26080, + 7848,21984, 7856,13792, 7864,30176, 7880,19936, 7888,11744, 7896,28128, + 7912,24032, 7920,15840, 7928,32224, 7944,17376, 7952,9184, 7960,25568, + 7976,21472, 7984,13280, 7992,29664, 8008,19424, 8016,11232, 8024,27616, + 8040,23520, 8048,15328, 8056,31712, 8072,18400, 8080,10208, 8088,26592, + 8104,22496, 8112,14304, 8120,30688, 8136,20448, 8144,12256, 8152,28640, + 8168,24544, 8176,16352, 8184,32736, 8200,16400, 8216,24592, 8232,20496, + 8240,12304, 8248,28688, 8264,18448, 8272,10256, 8280,26640, 8296,22544, + 8304,14352, 8312,30736, 8328,17424, 8336,9232, 8344,25616, 8360,21520, + 8368,13328, 8376,29712, 8392,19472, 8400,11280, 8408,27664, 8424,23568, + 8432,15376, 8440,31760, 8456,16912, 8464,8720, 8472,25104, 8488,21008, + 8496,12816, 8504,29200, 8520,18960, 8528,10768, 8536,27152, 8552,23056, + 8560,14864, 8568,31248, 8584,17936, 8592,9744, 8600,26128, 8616,22032, + 8624,13840, 8632,30224, 8648,19984, 8656,11792, 8664,28176, 8680,24080, + 8688,15888, 8696,32272, 8712,16656, 8728,24848, 8744,20752, 8752,12560, + 8760,28944, 8776,18704, 8784,10512, 8792,26896, 8808,22800, 8816,14608, + 8824,30992, 8840,17680, 8848,9488, 8856,25872, 8872,21776, 8880,13584, + 8888,29968, 8904,19728, 8912,11536, 8920,27920, 8936,23824, 8944,15632, + 8952,32016, 8968,17168, 8984,25360, 9000,21264, 9008,13072, 9016,29456, + 9032,19216, 9040,11024, 9048,27408, 9064,23312, 9072,15120, 9080,31504, + 9096,18192, 9104,10000, 9112,26384, 9128,22288, 9136,14096, 9144,30480, + 9160,20240, 9168,12048, 9176,28432, 9192,24336, 9200,16144, 9208,32528, + 9224,16528, 9240,24720, 9256,20624, 9264,12432, 9272,28816, 9288,18576, + 9296,10384, 9304,26768, 9320,22672, 9328,14480, 9336,30864, 9352,17552, + 9368,25744, 9384,21648, 9392,13456, 9400,29840, 9416,19600, 9424,11408, + 9432,27792, 9448,23696, 9456,15504, 9464,31888, 9480,17040, 9496,25232, + 9512,21136, 9520,12944, 9528,29328, 9544,19088, 9552,10896, 9560,27280, + 9576,23184, 9584,14992, 9592,31376, 9608,18064, 9616,9872, 9624,26256, + 9640,22160, 9648,13968, 9656,30352, 9672,20112, 9680,11920, 9688,28304, + 9704,24208, 9712,16016, 9720,32400, 9736,16784, 9752,24976, 9768,20880, + 9776,12688, 9784,29072, 9800,18832, 9808,10640, 9816,27024, 9832,22928, + 9840,14736, 9848,31120, 9864,17808, 9880,26000, 9896,21904, 9904,13712, + 9912,30096, 9928,19856, 9936,11664, 9944,28048, 9960,23952, 9968,15760, + 9976,32144, 9992,17296, 10008,25488, 10024,21392, 10032,13200, 10040,29584, + 10056,19344, 10064,11152, 10072,27536, 10088,23440, 10096,15248, 10104,31632, + 10120,18320, 10136,26512, 10152,22416, 10160,14224, 10168,30608, 10184,20368, + 10192,12176, 10200,28560, 10216,24464, 10224,16272, 10232,32656, 10248,16464, + 10264,24656, 10280,20560, 10288,12368, 10296,28752, 10312,18512, 10328,26704, + 10344,22608, 10352,14416, 10360,30800, 10376,17488, 10392,25680, 10408,21584, + 10416,13392, 10424,29776, 10440,19536, 10448,11344, 10456,27728, 10472,23632, + 10480,15440, 10488,31824, 10504,16976, 10520,25168, 10536,21072, 10544,12880, + 10552,29264, 10568,19024, 10576,10832, 10584,27216, 10600,23120, 10608,14928, + 10616,31312, 10632,18000, 10648,26192, 10664,22096, 10672,13904, 10680,30288, + 10696,20048, 10704,11856, 10712,28240, 10728,24144, 10736,15952, 10744,32336, + 10760,16720, 10776,24912, 10792,20816, 10800,12624, 10808,29008, 10824,18768, + 10840,26960, 10856,22864, 10864,14672, 10872,31056, 10888,17744, 10904,25936, + 10920,21840, 10928,13648, 10936,30032, 10952,19792, 10960,11600, 10968,27984, + 10984,23888, 10992,15696, 11000,32080, 11016,17232, 11032,25424, 11048,21328, + 11056,13136, 11064,29520, 11080,19280, 11096,27472, 11112,23376, 11120,15184, + 11128,31568, 11144,18256, 11160,26448, 11176,22352, 11184,14160, 11192,30544, + 11208,20304, 11216,12112, 11224,28496, 11240,24400, 11248,16208, 11256,32592, + 11272,16592, 11288,24784, 11304,20688, 11312,12496, 11320,28880, 11336,18640, + 11352,26832, 11368,22736, 11376,14544, 11384,30928, 11400,17616, 11416,25808, + 11432,21712, 11440,13520, 11448,29904, 11464,19664, 11480,27856, 11496,23760, + 11504,15568, 11512,31952, 11528,17104, 11544,25296, 11560,21200, 11568,13008, + 11576,29392, 11592,19152, 11608,27344, 11624,23248, 11632,15056, 11640,31440, + 11656,18128, 11672,26320, 11688,22224, 11696,14032, 11704,30416, 11720,20176, + 11728,11984, 11736,28368, 11752,24272, 11760,16080, 11768,32464, 11784,16848, + 11800,25040, 11816,20944, 11824,12752, 11832,29136, 11848,18896, 11864,27088, + 11880,22992, 11888,14800, 11896,31184, 11912,17872, 11928,26064, 11944,21968, + 11952,13776, 11960,30160, 11976,19920, 11992,28112, 12008,24016, 12016,15824, + 12024,32208, 12040,17360, 12056,25552, 12072,21456, 12080,13264, 12088,29648, + 12104,19408, 12120,27600, 12136,23504, 12144,15312, 12152,31696, 12168,18384, + 12184,26576, 12200,22480, 12208,14288, 12216,30672, 12232,20432, 12248,28624, + 12264,24528, 12272,16336, 12280,32720, 12296,16432, 12312,24624, 12328,20528, + 12344,28720, 12360,18480, 12376,26672, 12392,22576, 12400,14384, 12408,30768, + 12424,17456, 12440,25648, 12456,21552, 12464,13360, 12472,29744, 12488,19504, + 12504,27696, 12520,23600, 12528,15408, 12536,31792, 12552,16944, 12568,25136, + 12584,21040, 12592,12848, 12600,29232, 12616,18992, 12632,27184, 12648,23088, + 12656,14896, 12664,31280, 12680,17968, 12696,26160, 12712,22064, 12720,13872, + 12728,30256, 12744,20016, 12760,28208, 12776,24112, 12784,15920, 12792,32304, + 12808,16688, 12824,24880, 12840,20784, 12856,28976, 12872,18736, 12888,26928, + 12904,22832, 12912,14640, 12920,31024, 12936,17712, 12952,25904, 12968,21808, + 12976,13616, 12984,30000, 13000,19760, 13016,27952, 13032,23856, 13040,15664, + 13048,32048, 13064,17200, 13080,25392, 13096,21296, 13112,29488, 13128,19248, + 13144,27440, 13160,23344, 13168,15152, 13176,31536, 13192,18224, 13208,26416, + 13224,22320, 13232,14128, 13240,30512, 13256,20272, 13272,28464, 13288,24368, + 13296,16176, 13304,32560, 13320,16560, 13336,24752, 13352,20656, 13368,28848, + 13384,18608, 13400,26800, 13416,22704, 13424,14512, 13432,30896, 13448,17584, + 13464,25776, 13480,21680, 13496,29872, 13512,19632, 13528,27824, 13544,23728, + 13552,15536, 13560,31920, 13576,17072, 13592,25264, 13608,21168, 13624,29360, + 13640,19120, 13656,27312, 13672,23216, 13680,15024, 13688,31408, 13704,18096, + 13720,26288, 13736,22192, 13744,14000, 13752,30384, 13768,20144, 13784,28336, + 13800,24240, 13808,16048, 13816,32432, 13832,16816, 13848,25008, 13864,20912, + 13880,29104, 13896,18864, 13912,27056, 13928,22960, 13936,14768, 13944,31152, + 13960,17840, 13976,26032, 13992,21936, 14008,30128, 14024,19888, 14040,28080, + 14056,23984, 14064,15792, 14072,32176, 14088,17328, 14104,25520, 14120,21424, + 14136,29616, 14152,19376, 14168,27568, 14184,23472, 14192,15280, 14200,31664, + 14216,18352, 14232,26544, 14248,22448, 14264,30640, 14280,20400, 14296,28592, + 14312,24496, 14320,16304, 14328,32688, 14344,16496, 14360,24688, 14376,20592, + 14392,28784, 14408,18544, 14424,26736, 14440,22640, 14456,30832, 14472,17520, + 14488,25712, 14504,21616, 14520,29808, 14536,19568, 14552,27760, 14568,23664, + 14576,15472, 14584,31856, 14600,17008, 14616,25200, 14632,21104, 14648,29296, + 14664,19056, 14680,27248, 14696,23152, 14704,14960, 14712,31344, 14728,18032, + 14744,26224, 14760,22128, 14776,30320, 14792,20080, 14808,28272, 14824,24176, + 14832,15984, 14840,32368, 14856,16752, 14872,24944, 14888,20848, 14904,29040, + 14920,18800, 14936,26992, 14952,22896, 14968,31088, 14984,17776, 15000,25968, + 15016,21872, 15032,30064, 15048,19824, 15064,28016, 15080,23920, 15088,15728, + 15096,32112, 15112,17264, 15128,25456, 15144,21360, 15160,29552, 15176,19312, + 15192,27504, 15208,23408, 15224,31600, 15240,18288, 15256,26480, 15272,22384, + 15288,30576, 15304,20336, 15320,28528, 15336,24432, 15344,16240, 15352,32624, + 15368,16624, 15384,24816, 15400,20720, 15416,28912, 15432,18672, 15448,26864, + 15464,22768, 15480,30960, 15496,17648, 15512,25840, 15528,21744, 15544,29936, + 15560,19696, 15576,27888, 15592,23792, 15608,31984, 15624,17136, 15640,25328, + 15656,21232, 15672,29424, 15688,19184, 15704,27376, 15720,23280, 15736,31472, + 15752,18160, 15768,26352, 15784,22256, 15800,30448, 15816,20208, 15832,28400, + 15848,24304, 15856,16112, 15864,32496, 15880,16880, 15896,25072, 15912,20976, + 15928,29168, 15944,18928, 15960,27120, 15976,23024, 15992,31216, 16008,17904, + 16024,26096, 16040,22000, 16056,30192, 16072,19952, 16088,28144, 16104,24048, + 16120,32240, 16136,17392, 16152,25584, 16168,21488, 16184,29680, 16200,19440, + 16216,27632, 16232,23536, 16248,31728, 16264,18416, 16280,26608, 16296,22512, + 16312,30704, 16328,20464, 16344,28656, 16360,24560, 16376,32752, 16408,24584, + 16424,20488, 16440,28680, 16456,18440, 16472,26632, 16488,22536, 16504,30728, + 16520,17416, 16536,25608, 16552,21512, 16568,29704, 16584,19464, 16600,27656, + 16616,23560, 16632,31752, 16648,16904, 16664,25096, 16680,21000, 16696,29192, + 16712,18952, 16728,27144, 16744,23048, 16760,31240, 16776,17928, 16792,26120, + 16808,22024, 16824,30216, 16840,19976, 16856,28168, 16872,24072, 16888,32264, + 16920,24840, 16936,20744, 16952,28936, 16968,18696, 16984,26888, 17000,22792, + 17016,30984, 17032,17672, 17048,25864, 17064,21768, 17080,29960, 17096,19720, + 17112,27912, 17128,23816, 17144,32008, 17176,25352, 17192,21256, 17208,29448, + 17224,19208, 17240,27400, 17256,23304, 17272,31496, 17288,18184, 17304,26376, + 17320,22280, 17336,30472, 17352,20232, 17368,28424, 17384,24328, 17400,32520, + 17432,24712, 17448,20616, 17464,28808, 17480,18568, 17496,26760, 17512,22664, + 17528,30856, 17560,25736, 17576,21640, 17592,29832, 17608,19592, 17624,27784, + 17640,23688, 17656,31880, 17688,25224, 17704,21128, 17720,29320, 17736,19080, + 17752,27272, 17768,23176, 17784,31368, 17800,18056, 17816,26248, 17832,22152, + 17848,30344, 17864,20104, 17880,28296, 17896,24200, 17912,32392, 17944,24968, + 17960,20872, 17976,29064, 17992,18824, 18008,27016, 18024,22920, 18040,31112, + 18072,25992, 18088,21896, 18104,30088, 18120,19848, 18136,28040, 18152,23944, + 18168,32136, 18200,25480, 18216,21384, 18232,29576, 18248,19336, 18264,27528, + 18280,23432, 18296,31624, 18328,26504, 18344,22408, 18360,30600, 18376,20360, + 18392,28552, 18408,24456, 18424,32648, 18456,24648, 18472,20552, 18488,28744, + 18520,26696, 18536,22600, 18552,30792, 18584,25672, 18600,21576, 18616,29768, + 18632,19528, 18648,27720, 18664,23624, 18680,31816, 18712,25160, 18728,21064, + 18744,29256, 18760,19016, 18776,27208, 18792,23112, 18808,31304, 18840,26184, + 18856,22088, 18872,30280, 18888,20040, 18904,28232, 18920,24136, 18936,32328, + 18968,24904, 18984,20808, 19000,29000, 19032,26952, 19048,22856, 19064,31048, + 19096,25928, 19112,21832, 19128,30024, 19144,19784, 19160,27976, 19176,23880, + 19192,32072, 19224,25416, 19240,21320, 19256,29512, 19288,27464, 19304,23368, + 19320,31560, 19352,26440, 19368,22344, 19384,30536, 19400,20296, 19416,28488, + 19432,24392, 19448,32584, 19480,24776, 19496,20680, 19512,28872, 19544,26824, + 19560,22728, 19576,30920, 19608,25800, 19624,21704, 19640,29896, 19672,27848, + 19688,23752, 19704,31944, 19736,25288, 19752,21192, 19768,29384, 19800,27336, + 19816,23240, 19832,31432, 19864,26312, 19880,22216, 19896,30408, 19912,20168, + 19928,28360, 19944,24264, 19960,32456, 19992,25032, 20008,20936, 20024,29128, + 20056,27080, 20072,22984, 20088,31176, 20120,26056, 20136,21960, 20152,30152, + 20184,28104, 20200,24008, 20216,32200, 20248,25544, 20264,21448, 20280,29640, + 20312,27592, 20328,23496, 20344,31688, 20376,26568, 20392,22472, 20408,30664, + 20440,28616, 20456,24520, 20472,32712, 20504,24616, 20536,28712, 20568,26664, + 20584,22568, 20600,30760, 20632,25640, 20648,21544, 20664,29736, 20696,27688, + 20712,23592, 20728,31784, 20760,25128, 20776,21032, 20792,29224, 20824,27176, + 20840,23080, 20856,31272, 20888,26152, 20904,22056, 20920,30248, 20952,28200, + 20968,24104, 20984,32296, 21016,24872, 21048,28968, 21080,26920, 21096,22824, + 21112,31016, 21144,25896, 21160,21800, 21176,29992, 21208,27944, 21224,23848, + 21240,32040, 21272,25384, 21304,29480, 21336,27432, 21352,23336, 21368,31528, + 21400,26408, 21416,22312, 21432,30504, 21464,28456, 21480,24360, 21496,32552, + 21528,24744, 21560,28840, 21592,26792, 21608,22696, 21624,30888, 21656,25768, + 21688,29864, 21720,27816, 21736,23720, 21752,31912, 21784,25256, 21816,29352, + 21848,27304, 21864,23208, 21880,31400, 21912,26280, 21928,22184, 21944,30376, + 21976,28328, 21992,24232, 22008,32424, 22040,25000, 22072,29096, 22104,27048, + 22120,22952, 22136,31144, 22168,26024, 22200,30120, 22232,28072, 22248,23976, + 22264,32168, 22296,25512, 22328,29608, 22360,27560, 22376,23464, 22392,31656, + 22424,26536, 22456,30632, 22488,28584, 22504,24488, 22520,32680, 22552,24680, + 22584,28776, 22616,26728, 22648,30824, 22680,25704, 22712,29800, 22744,27752, + 22760,23656, 22776,31848, 22808,25192, 22840,29288, 22872,27240, 22888,23144, + 22904,31336, 22936,26216, 22968,30312, 23000,28264, 23016,24168, 23032,32360, + 23064,24936, 23096,29032, 23128,26984, 23160,31080, 23192,25960, 23224,30056, + 23256,28008, 23272,23912, 23288,32104, 23320,25448, 23352,29544, 23384,27496, + 23416,31592, 23448,26472, 23480,30568, 23512,28520, 23528,24424, 23544,32616, + 23576,24808, 23608,28904, 23640,26856, 23672,30952, 23704,25832, 23736,29928, + 23768,27880, 23800,31976, 23832,25320, 23864,29416, 23896,27368, 23928,31464, + 23960,26344, 23992,30440, 24024,28392, 24040,24296, 24056,32488, 24088,25064, + 24120,29160, 24152,27112, 24184,31208, 24216,26088, 24248,30184, 24280,28136, + 24312,32232, 24344,25576, 24376,29672, 24408,27624, 24440,31720, 24472,26600, + 24504,30696, 24536,28648, 24568,32744, 24632,28696, 24664,26648, 24696,30744, + 24728,25624, 24760,29720, 24792,27672, 24824,31768, 24856,25112, 24888,29208, + 24920,27160, 24952,31256, 24984,26136, 25016,30232, 25048,28184, 25080,32280, + 25144,28952, 25176,26904, 25208,31000, 25240,25880, 25272,29976, 25304,27928, + 25336,32024, 25400,29464, 25432,27416, 25464,31512, 25496,26392, 25528,30488, + 25560,28440, 25592,32536, 25656,28824, 25688,26776, 25720,30872, 25784,29848, + 25816,27800, 25848,31896, 25912,29336, 25944,27288, 25976,31384, 26008,26264, + 26040,30360, 26072,28312, 26104,32408, 26168,29080, 26200,27032, 26232,31128, + 26296,30104, 26328,28056, 26360,32152, 26424,29592, 26456,27544, 26488,31640, + 26552,30616, 26584,28568, 26616,32664, 26680,28760, 26744,30808, 26808,29784, + 26840,27736, 26872,31832, 26936,29272, 26968,27224, 27000,31320, 27064,30296, + 27096,28248, 27128,32344, 27192,29016, 27256,31064, 27320,30040, 27352,27992, + 27384,32088, 27448,29528, 27512,31576, 27576,30552, 27608,28504, 27640,32600, + 27704,28888, 27768,30936, 27832,29912, 27896,31960, 27960,29400, 28024,31448, + 28088,30424, 28120,28376, 28152,32472, 28216,29144, 28280,31192, 28344,30168, + 28408,32216, 28472,29656, 28536,31704, 28600,30680, 28664,32728, 28792,30776, + 28856,29752, 28920,31800, 28984,29240, 29048,31288, 29112,30264, 29176,32312, + 29304,31032, 29368,30008, 29432,32056, 29560,31544, 29624,30520, 29688,32568, + 29816,30904, 29944,31928, 30072,31416, 30136,30392, 30200,32440, 30328,31160, + 30456,32184, 30584,31672, 30712,32696, 30968,31864, 31096,31352, 31224,32376, + 31480,32120, 31736,32632, 32248,32504 +}; + +/** +* \par +* Example code for Floating-point RFFT Twiddle factors Generation: +* \par +*
TW = exp(2*pi*i*[0:L/2-1]/L - pi/2*i).' 
+* \par +* Real and Imag values are in interleaved fashion +*/ +const float32_t twiddleCoef_rfft_32[32] = { +0.0f , 1.0f , +0.195090322f , 0.98078528f , +0.382683432f , 0.923879533f , +0.555570233f , 0.831469612f , +0.707106781f , 0.707106781f , +0.831469612f , 0.555570233f , +0.923879533f , 0.382683432f , +0.98078528f , 0.195090322f , +1.0f , 0.0f , +0.98078528f , -0.195090322f , +0.923879533f , -0.382683432f , +0.831469612f , -0.555570233f , +0.707106781f , -0.707106781f , +0.555570233f , -0.831469612f , +0.382683432f , -0.923879533f , +0.195090322f , -0.98078528f +}; + +const float32_t twiddleCoef_rfft_64[64] = { +0.0f, 1.0f, +0.098017140329561f, 0.995184726672197f, +0.195090322016128f, 0.98078528040323f, +0.290284677254462f, 0.956940335732209f, +0.38268343236509f, 0.923879532511287f, +0.471396736825998f, 0.881921264348355f, +0.555570233019602f, 0.831469612302545f, +0.634393284163645f, 0.773010453362737f, +0.707106781186547f, 0.707106781186548f, +0.773010453362737f, 0.634393284163645f, +0.831469612302545f, 0.555570233019602f, +0.881921264348355f, 0.471396736825998f, +0.923879532511287f, 0.38268343236509f, +0.956940335732209f, 0.290284677254462f, +0.98078528040323f, 0.195090322016128f, +0.995184726672197f, 0.098017140329561f, +1.0f, 0.0f, +0.995184726672197f, -0.098017140329561f, +0.98078528040323f, -0.195090322016128f, +0.956940335732209f, -0.290284677254462f, +0.923879532511287f, -0.38268343236509f, +0.881921264348355f, -0.471396736825998f, +0.831469612302545f, -0.555570233019602f, +0.773010453362737f, -0.634393284163645f, +0.707106781186548f, -0.707106781186547f, +0.634393284163645f, -0.773010453362737f, +0.555570233019602f, -0.831469612302545f, +0.471396736825998f, -0.881921264348355f, +0.38268343236509f, -0.923879532511287f, +0.290284677254462f, -0.956940335732209f, +0.195090322016129f, -0.98078528040323f, +0.098017140329561f, -0.995184726672197f +}; + +const float32_t twiddleCoef_rfft_128[128] = { + 0.000000000f, 1.000000000f, + 0.049067674f, 0.998795456f, + 0.098017140f, 0.995184727f, + 0.146730474f, 0.989176510f, + 0.195090322f, 0.980785280f, + 0.242980180f, 0.970031253f, + 0.290284677f, 0.956940336f, + 0.336889853f, 0.941544065f, + 0.382683432f, 0.923879533f, + 0.427555093f, 0.903989293f, + 0.471396737f, 0.881921264f, + 0.514102744f, 0.857728610f, + 0.555570233f, 0.831469612f, + 0.595699304f, 0.803207531f, + 0.634393284f, 0.773010453f, + 0.671558955f, 0.740951125f, + 0.707106781f, 0.707106781f, + 0.740951125f, 0.671558955f, + 0.773010453f, 0.634393284f, + 0.803207531f, 0.595699304f, + 0.831469612f, 0.555570233f, + 0.857728610f, 0.514102744f, + 0.881921264f, 0.471396737f, + 0.903989293f, 0.427555093f, + 0.923879533f, 0.382683432f, + 0.941544065f, 0.336889853f, + 0.956940336f, 0.290284677f, + 0.970031253f, 0.242980180f, + 0.980785280f, 0.195090322f, + 0.989176510f, 0.146730474f, + 0.995184727f, 0.098017140f, + 0.998795456f, 0.049067674f, + 1.000000000f, 0.000000000f, + 0.998795456f, -0.049067674f, + 0.995184727f, -0.098017140f, + 0.989176510f, -0.146730474f, + 0.980785280f, -0.195090322f, + 0.970031253f, -0.242980180f, + 0.956940336f, -0.290284677f, + 0.941544065f, -0.336889853f, + 0.923879533f, -0.382683432f, + 0.903989293f, -0.427555093f, + 0.881921264f, -0.471396737f, + 0.857728610f, -0.514102744f, + 0.831469612f, -0.555570233f, + 0.803207531f, -0.595699304f, + 0.773010453f, -0.634393284f, + 0.740951125f, -0.671558955f, + 0.707106781f, -0.707106781f, + 0.671558955f, -0.740951125f, + 0.634393284f, -0.773010453f, + 0.595699304f, -0.803207531f, + 0.555570233f, -0.831469612f, + 0.514102744f, -0.857728610f, + 0.471396737f, -0.881921264f, + 0.427555093f, -0.903989293f, + 0.382683432f, -0.923879533f, + 0.336889853f, -0.941544065f, + 0.290284677f, -0.956940336f, + 0.242980180f, -0.970031253f, + 0.195090322f, -0.980785280f, + 0.146730474f, -0.989176510f, + 0.098017140f, -0.995184727f, + 0.049067674f, -0.998795456f +}; + +const float32_t twiddleCoef_rfft_256[256] = { + 0.000000000f, 1.000000000f, + 0.024541229f, 0.999698819f, + 0.049067674f, 0.998795456f, + 0.073564564f, 0.997290457f, + 0.098017140f, 0.995184727f, + 0.122410675f, 0.992479535f, + 0.146730474f, 0.989176510f, + 0.170961889f, 0.985277642f, + 0.195090322f, 0.980785280f, + 0.219101240f, 0.975702130f, + 0.242980180f, 0.970031253f, + 0.266712757f, 0.963776066f, + 0.290284677f, 0.956940336f, + 0.313681740f, 0.949528181f, + 0.336889853f, 0.941544065f, + 0.359895037f, 0.932992799f, + 0.382683432f, 0.923879533f, + 0.405241314f, 0.914209756f, + 0.427555093f, 0.903989293f, + 0.449611330f, 0.893224301f, + 0.471396737f, 0.881921264f, + 0.492898192f, 0.870086991f, + 0.514102744f, 0.857728610f, + 0.534997620f, 0.844853565f, + 0.555570233f, 0.831469612f, + 0.575808191f, 0.817584813f, + 0.595699304f, 0.803207531f, + 0.615231591f, 0.788346428f, + 0.634393284f, 0.773010453f, + 0.653172843f, 0.757208847f, + 0.671558955f, 0.740951125f, + 0.689540545f, 0.724247083f, + 0.707106781f, 0.707106781f, + 0.724247083f, 0.689540545f, + 0.740951125f, 0.671558955f, + 0.757208847f, 0.653172843f, + 0.773010453f, 0.634393284f, + 0.788346428f, 0.615231591f, + 0.803207531f, 0.595699304f, + 0.817584813f, 0.575808191f, + 0.831469612f, 0.555570233f, + 0.844853565f, 0.534997620f, + 0.857728610f, 0.514102744f, + 0.870086991f, 0.492898192f, + 0.881921264f, 0.471396737f, + 0.893224301f, 0.449611330f, + 0.903989293f, 0.427555093f, + 0.914209756f, 0.405241314f, + 0.923879533f, 0.382683432f, + 0.932992799f, 0.359895037f, + 0.941544065f, 0.336889853f, + 0.949528181f, 0.313681740f, + 0.956940336f, 0.290284677f, + 0.963776066f, 0.266712757f, + 0.970031253f, 0.242980180f, + 0.975702130f, 0.219101240f, + 0.980785280f, 0.195090322f, + 0.985277642f, 0.170961889f, + 0.989176510f, 0.146730474f, + 0.992479535f, 0.122410675f, + 0.995184727f, 0.098017140f, + 0.997290457f, 0.073564564f, + 0.998795456f, 0.049067674f, + 0.999698819f, 0.024541229f, + 1.000000000f, 0.000000000f, + 0.999698819f, -0.024541229f, + 0.998795456f, -0.049067674f, + 0.997290457f, -0.073564564f, + 0.995184727f, -0.098017140f, + 0.992479535f, -0.122410675f, + 0.989176510f, -0.146730474f, + 0.985277642f, -0.170961889f, + 0.980785280f, -0.195090322f, + 0.975702130f, -0.219101240f, + 0.970031253f, -0.242980180f, + 0.963776066f, -0.266712757f, + 0.956940336f, -0.290284677f, + 0.949528181f, -0.313681740f, + 0.941544065f, -0.336889853f, + 0.932992799f, -0.359895037f, + 0.923879533f, -0.382683432f, + 0.914209756f, -0.405241314f, + 0.903989293f, -0.427555093f, + 0.893224301f, -0.449611330f, + 0.881921264f, -0.471396737f, + 0.870086991f, -0.492898192f, + 0.857728610f, -0.514102744f, + 0.844853565f, -0.534997620f, + 0.831469612f, -0.555570233f, + 0.817584813f, -0.575808191f, + 0.803207531f, -0.595699304f, + 0.788346428f, -0.615231591f, + 0.773010453f, -0.634393284f, + 0.757208847f, -0.653172843f, + 0.740951125f, -0.671558955f, + 0.724247083f, -0.689540545f, + 0.707106781f, -0.707106781f, + 0.689540545f, -0.724247083f, + 0.671558955f, -0.740951125f, + 0.653172843f, -0.757208847f, + 0.634393284f, -0.773010453f, + 0.615231591f, -0.788346428f, + 0.595699304f, -0.803207531f, + 0.575808191f, -0.817584813f, + 0.555570233f, -0.831469612f, + 0.534997620f, -0.844853565f, + 0.514102744f, -0.857728610f, + 0.492898192f, -0.870086991f, + 0.471396737f, -0.881921264f, + 0.449611330f, -0.893224301f, + 0.427555093f, -0.903989293f, + 0.405241314f, -0.914209756f, + 0.382683432f, -0.923879533f, + 0.359895037f, -0.932992799f, + 0.336889853f, -0.941544065f, + 0.313681740f, -0.949528181f, + 0.290284677f, -0.956940336f, + 0.266712757f, -0.963776066f, + 0.242980180f, -0.970031253f, + 0.219101240f, -0.975702130f, + 0.195090322f, -0.980785280f, + 0.170961889f, -0.985277642f, + 0.146730474f, -0.989176510f, + 0.122410675f, -0.992479535f, + 0.098017140f, -0.995184727f, + 0.073564564f, -0.997290457f, + 0.049067674f, -0.998795456f, + 0.024541229f, -0.999698819f +}; + +const float32_t twiddleCoef_rfft_512[512] = { + 0.000000000f, 1.000000000f, + 0.012271538f, 0.999924702f, + 0.024541229f, 0.999698819f, + 0.036807223f, 0.999322385f, + 0.049067674f, 0.998795456f, + 0.061320736f, 0.998118113f, + 0.073564564f, 0.997290457f, + 0.085797312f, 0.996312612f, + 0.098017140f, 0.995184727f, + 0.110222207f, 0.993906970f, + 0.122410675f, 0.992479535f, + 0.134580709f, 0.990902635f, + 0.146730474f, 0.989176510f, + 0.158858143f, 0.987301418f, + 0.170961889f, 0.985277642f, + 0.183039888f, 0.983105487f, + 0.195090322f, 0.980785280f, + 0.207111376f, 0.978317371f, + 0.219101240f, 0.975702130f, + 0.231058108f, 0.972939952f, + 0.242980180f, 0.970031253f, + 0.254865660f, 0.966976471f, + 0.266712757f, 0.963776066f, + 0.278519689f, 0.960430519f, + 0.290284677f, 0.956940336f, + 0.302005949f, 0.953306040f, + 0.313681740f, 0.949528181f, + 0.325310292f, 0.945607325f, + 0.336889853f, 0.941544065f, + 0.348418680f, 0.937339012f, + 0.359895037f, 0.932992799f, + 0.371317194f, 0.928506080f, + 0.382683432f, 0.923879533f, + 0.393992040f, 0.919113852f, + 0.405241314f, 0.914209756f, + 0.416429560f, 0.909167983f, + 0.427555093f, 0.903989293f, + 0.438616239f, 0.898674466f, + 0.449611330f, 0.893224301f, + 0.460538711f, 0.887639620f, + 0.471396737f, 0.881921264f, + 0.482183772f, 0.876070094f, + 0.492898192f, 0.870086991f, + 0.503538384f, 0.863972856f, + 0.514102744f, 0.857728610f, + 0.524589683f, 0.851355193f, + 0.534997620f, 0.844853565f, + 0.545324988f, 0.838224706f, + 0.555570233f, 0.831469612f, + 0.565731811f, 0.824589303f, + 0.575808191f, 0.817584813f, + 0.585797857f, 0.810457198f, + 0.595699304f, 0.803207531f, + 0.605511041f, 0.795836905f, + 0.615231591f, 0.788346428f, + 0.624859488f, 0.780737229f, + 0.634393284f, 0.773010453f, + 0.643831543f, 0.765167266f, + 0.653172843f, 0.757208847f, + 0.662415778f, 0.749136395f, + 0.671558955f, 0.740951125f, + 0.680600998f, 0.732654272f, + 0.689540545f, 0.724247083f, + 0.698376249f, 0.715730825f, + 0.707106781f, 0.707106781f, + 0.715730825f, 0.698376249f, + 0.724247083f, 0.689540545f, + 0.732654272f, 0.680600998f, + 0.740951125f, 0.671558955f, + 0.749136395f, 0.662415778f, + 0.757208847f, 0.653172843f, + 0.765167266f, 0.643831543f, + 0.773010453f, 0.634393284f, + 0.780737229f, 0.624859488f, + 0.788346428f, 0.615231591f, + 0.795836905f, 0.605511041f, + 0.803207531f, 0.595699304f, + 0.810457198f, 0.585797857f, + 0.817584813f, 0.575808191f, + 0.824589303f, 0.565731811f, + 0.831469612f, 0.555570233f, + 0.838224706f, 0.545324988f, + 0.844853565f, 0.534997620f, + 0.851355193f, 0.524589683f, + 0.857728610f, 0.514102744f, + 0.863972856f, 0.503538384f, + 0.870086991f, 0.492898192f, + 0.876070094f, 0.482183772f, + 0.881921264f, 0.471396737f, + 0.887639620f, 0.460538711f, + 0.893224301f, 0.449611330f, + 0.898674466f, 0.438616239f, + 0.903989293f, 0.427555093f, + 0.909167983f, 0.416429560f, + 0.914209756f, 0.405241314f, + 0.919113852f, 0.393992040f, + 0.923879533f, 0.382683432f, + 0.928506080f, 0.371317194f, + 0.932992799f, 0.359895037f, + 0.937339012f, 0.348418680f, + 0.941544065f, 0.336889853f, + 0.945607325f, 0.325310292f, + 0.949528181f, 0.313681740f, + 0.953306040f, 0.302005949f, + 0.956940336f, 0.290284677f, + 0.960430519f, 0.278519689f, + 0.963776066f, 0.266712757f, + 0.966976471f, 0.254865660f, + 0.970031253f, 0.242980180f, + 0.972939952f, 0.231058108f, + 0.975702130f, 0.219101240f, + 0.978317371f, 0.207111376f, + 0.980785280f, 0.195090322f, + 0.983105487f, 0.183039888f, + 0.985277642f, 0.170961889f, + 0.987301418f, 0.158858143f, + 0.989176510f, 0.146730474f, + 0.990902635f, 0.134580709f, + 0.992479535f, 0.122410675f, + 0.993906970f, 0.110222207f, + 0.995184727f, 0.098017140f, + 0.996312612f, 0.085797312f, + 0.997290457f, 0.073564564f, + 0.998118113f, 0.061320736f, + 0.998795456f, 0.049067674f, + 0.999322385f, 0.036807223f, + 0.999698819f, 0.024541229f, + 0.999924702f, 0.012271538f, + 1.000000000f, 0.000000000f, + 0.999924702f, -0.012271538f, + 0.999698819f, -0.024541229f, + 0.999322385f, -0.036807223f, + 0.998795456f, -0.049067674f, + 0.998118113f, -0.061320736f, + 0.997290457f, -0.073564564f, + 0.996312612f, -0.085797312f, + 0.995184727f, -0.098017140f, + 0.993906970f, -0.110222207f, + 0.992479535f, -0.122410675f, + 0.990902635f, -0.134580709f, + 0.989176510f, -0.146730474f, + 0.987301418f, -0.158858143f, + 0.985277642f, -0.170961889f, + 0.983105487f, -0.183039888f, + 0.980785280f, -0.195090322f, + 0.978317371f, -0.207111376f, + 0.975702130f, -0.219101240f, + 0.972939952f, -0.231058108f, + 0.970031253f, -0.242980180f, + 0.966976471f, -0.254865660f, + 0.963776066f, -0.266712757f, + 0.960430519f, -0.278519689f, + 0.956940336f, -0.290284677f, + 0.953306040f, -0.302005949f, + 0.949528181f, -0.313681740f, + 0.945607325f, -0.325310292f, + 0.941544065f, -0.336889853f, + 0.937339012f, -0.348418680f, + 0.932992799f, -0.359895037f, + 0.928506080f, -0.371317194f, + 0.923879533f, -0.382683432f, + 0.919113852f, -0.393992040f, + 0.914209756f, -0.405241314f, + 0.909167983f, -0.416429560f, + 0.903989293f, -0.427555093f, + 0.898674466f, -0.438616239f, + 0.893224301f, -0.449611330f, + 0.887639620f, -0.460538711f, + 0.881921264f, -0.471396737f, + 0.876070094f, -0.482183772f, + 0.870086991f, -0.492898192f, + 0.863972856f, -0.503538384f, + 0.857728610f, -0.514102744f, + 0.851355193f, -0.524589683f, + 0.844853565f, -0.534997620f, + 0.838224706f, -0.545324988f, + 0.831469612f, -0.555570233f, + 0.824589303f, -0.565731811f, + 0.817584813f, -0.575808191f, + 0.810457198f, -0.585797857f, + 0.803207531f, -0.595699304f, + 0.795836905f, -0.605511041f, + 0.788346428f, -0.615231591f, + 0.780737229f, -0.624859488f, + 0.773010453f, -0.634393284f, + 0.765167266f, -0.643831543f, + 0.757208847f, -0.653172843f, + 0.749136395f, -0.662415778f, + 0.740951125f, -0.671558955f, + 0.732654272f, -0.680600998f, + 0.724247083f, -0.689540545f, + 0.715730825f, -0.698376249f, + 0.707106781f, -0.707106781f, + 0.698376249f, -0.715730825f, + 0.689540545f, -0.724247083f, + 0.680600998f, -0.732654272f, + 0.671558955f, -0.740951125f, + 0.662415778f, -0.749136395f, + 0.653172843f, -0.757208847f, + 0.643831543f, -0.765167266f, + 0.634393284f, -0.773010453f, + 0.624859488f, -0.780737229f, + 0.615231591f, -0.788346428f, + 0.605511041f, -0.795836905f, + 0.595699304f, -0.803207531f, + 0.585797857f, -0.810457198f, + 0.575808191f, -0.817584813f, + 0.565731811f, -0.824589303f, + 0.555570233f, -0.831469612f, + 0.545324988f, -0.838224706f, + 0.534997620f, -0.844853565f, + 0.524589683f, -0.851355193f, + 0.514102744f, -0.857728610f, + 0.503538384f, -0.863972856f, + 0.492898192f, -0.870086991f, + 0.482183772f, -0.876070094f, + 0.471396737f, -0.881921264f, + 0.460538711f, -0.887639620f, + 0.449611330f, -0.893224301f, + 0.438616239f, -0.898674466f, + 0.427555093f, -0.903989293f, + 0.416429560f, -0.909167983f, + 0.405241314f, -0.914209756f, + 0.393992040f, -0.919113852f, + 0.382683432f, -0.923879533f, + 0.371317194f, -0.928506080f, + 0.359895037f, -0.932992799f, + 0.348418680f, -0.937339012f, + 0.336889853f, -0.941544065f, + 0.325310292f, -0.945607325f, + 0.313681740f, -0.949528181f, + 0.302005949f, -0.953306040f, + 0.290284677f, -0.956940336f, + 0.278519689f, -0.960430519f, + 0.266712757f, -0.963776066f, + 0.254865660f, -0.966976471f, + 0.242980180f, -0.970031253f, + 0.231058108f, -0.972939952f, + 0.219101240f, -0.975702130f, + 0.207111376f, -0.978317371f, + 0.195090322f, -0.980785280f, + 0.183039888f, -0.983105487f, + 0.170961889f, -0.985277642f, + 0.158858143f, -0.987301418f, + 0.146730474f, -0.989176510f, + 0.134580709f, -0.990902635f, + 0.122410675f, -0.992479535f, + 0.110222207f, -0.993906970f, + 0.098017140f, -0.995184727f, + 0.085797312f, -0.996312612f, + 0.073564564f, -0.997290457f, + 0.061320736f, -0.998118113f, + 0.049067674f, -0.998795456f, + 0.036807223f, -0.999322385f, + 0.024541229f, -0.999698819f, + 0.012271538f, -0.999924702f +}; + +const float32_t twiddleCoef_rfft_1024[1024] = { + 0.000000000f, 1.000000000f, + 0.006135885f, 0.999981175f, + 0.012271538f, 0.999924702f, + 0.018406730f, 0.999830582f, + 0.024541229f, 0.999698819f, + 0.030674803f, 0.999529418f, + 0.036807223f, 0.999322385f, + 0.042938257f, 0.999077728f, + 0.049067674f, 0.998795456f, + 0.055195244f, 0.998475581f, + 0.061320736f, 0.998118113f, + 0.067443920f, 0.997723067f, + 0.073564564f, 0.997290457f, + 0.079682438f, 0.996820299f, + 0.085797312f, 0.996312612f, + 0.091908956f, 0.995767414f, + 0.098017140f, 0.995184727f, + 0.104121634f, 0.994564571f, + 0.110222207f, 0.993906970f, + 0.116318631f, 0.993211949f, + 0.122410675f, 0.992479535f, + 0.128498111f, 0.991709754f, + 0.134580709f, 0.990902635f, + 0.140658239f, 0.990058210f, + 0.146730474f, 0.989176510f, + 0.152797185f, 0.988257568f, + 0.158858143f, 0.987301418f, + 0.164913120f, 0.986308097f, + 0.170961889f, 0.985277642f, + 0.177004220f, 0.984210092f, + 0.183039888f, 0.983105487f, + 0.189068664f, 0.981963869f, + 0.195090322f, 0.980785280f, + 0.201104635f, 0.979569766f, + 0.207111376f, 0.978317371f, + 0.213110320f, 0.977028143f, + 0.219101240f, 0.975702130f, + 0.225083911f, 0.974339383f, + 0.231058108f, 0.972939952f, + 0.237023606f, 0.971503891f, + 0.242980180f, 0.970031253f, + 0.248927606f, 0.968522094f, + 0.254865660f, 0.966976471f, + 0.260794118f, 0.965394442f, + 0.266712757f, 0.963776066f, + 0.272621355f, 0.962121404f, + 0.278519689f, 0.960430519f, + 0.284407537f, 0.958703475f, + 0.290284677f, 0.956940336f, + 0.296150888f, 0.955141168f, + 0.302005949f, 0.953306040f, + 0.307849640f, 0.951435021f, + 0.313681740f, 0.949528181f, + 0.319502031f, 0.947585591f, + 0.325310292f, 0.945607325f, + 0.331106306f, 0.943593458f, + 0.336889853f, 0.941544065f, + 0.342660717f, 0.939459224f, + 0.348418680f, 0.937339012f, + 0.354163525f, 0.935183510f, + 0.359895037f, 0.932992799f, + 0.365612998f, 0.930766961f, + 0.371317194f, 0.928506080f, + 0.377007410f, 0.926210242f, + 0.382683432f, 0.923879533f, + 0.388345047f, 0.921514039f, + 0.393992040f, 0.919113852f, + 0.399624200f, 0.916679060f, + 0.405241314f, 0.914209756f, + 0.410843171f, 0.911706032f, + 0.416429560f, 0.909167983f, + 0.422000271f, 0.906595705f, + 0.427555093f, 0.903989293f, + 0.433093819f, 0.901348847f, + 0.438616239f, 0.898674466f, + 0.444122145f, 0.895966250f, + 0.449611330f, 0.893224301f, + 0.455083587f, 0.890448723f, + 0.460538711f, 0.887639620f, + 0.465976496f, 0.884797098f, + 0.471396737f, 0.881921264f, + 0.476799230f, 0.879012226f, + 0.482183772f, 0.876070094f, + 0.487550160f, 0.873094978f, + 0.492898192f, 0.870086991f, + 0.498227667f, 0.867046246f, + 0.503538384f, 0.863972856f, + 0.508830143f, 0.860866939f, + 0.514102744f, 0.857728610f, + 0.519355990f, 0.854557988f, + 0.524589683f, 0.851355193f, + 0.529803625f, 0.848120345f, + 0.534997620f, 0.844853565f, + 0.540171473f, 0.841554977f, + 0.545324988f, 0.838224706f, + 0.550457973f, 0.834862875f, + 0.555570233f, 0.831469612f, + 0.560661576f, 0.828045045f, + 0.565731811f, 0.824589303f, + 0.570780746f, 0.821102515f, + 0.575808191f, 0.817584813f, + 0.580813958f, 0.814036330f, + 0.585797857f, 0.810457198f, + 0.590759702f, 0.806847554f, + 0.595699304f, 0.803207531f, + 0.600616479f, 0.799537269f, + 0.605511041f, 0.795836905f, + 0.610382806f, 0.792106577f, + 0.615231591f, 0.788346428f, + 0.620057212f, 0.784556597f, + 0.624859488f, 0.780737229f, + 0.629638239f, 0.776888466f, + 0.634393284f, 0.773010453f, + 0.639124445f, 0.769103338f, + 0.643831543f, 0.765167266f, + 0.648514401f, 0.761202385f, + 0.653172843f, 0.757208847f, + 0.657806693f, 0.753186799f, + 0.662415778f, 0.749136395f, + 0.666999922f, 0.745057785f, + 0.671558955f, 0.740951125f, + 0.676092704f, 0.736816569f, + 0.680600998f, 0.732654272f, + 0.685083668f, 0.728464390f, + 0.689540545f, 0.724247083f, + 0.693971461f, 0.720002508f, + 0.698376249f, 0.715730825f, + 0.702754744f, 0.711432196f, + 0.707106781f, 0.707106781f, + 0.711432196f, 0.702754744f, + 0.715730825f, 0.698376249f, + 0.720002508f, 0.693971461f, + 0.724247083f, 0.689540545f, + 0.728464390f, 0.685083668f, + 0.732654272f, 0.680600998f, + 0.736816569f, 0.676092704f, + 0.740951125f, 0.671558955f, + 0.745057785f, 0.666999922f, + 0.749136395f, 0.662415778f, + 0.753186799f, 0.657806693f, + 0.757208847f, 0.653172843f, + 0.761202385f, 0.648514401f, + 0.765167266f, 0.643831543f, + 0.769103338f, 0.639124445f, + 0.773010453f, 0.634393284f, + 0.776888466f, 0.629638239f, + 0.780737229f, 0.624859488f, + 0.784556597f, 0.620057212f, + 0.788346428f, 0.615231591f, + 0.792106577f, 0.610382806f, + 0.795836905f, 0.605511041f, + 0.799537269f, 0.600616479f, + 0.803207531f, 0.595699304f, + 0.806847554f, 0.590759702f, + 0.810457198f, 0.585797857f, + 0.814036330f, 0.580813958f, + 0.817584813f, 0.575808191f, + 0.821102515f, 0.570780746f, + 0.824589303f, 0.565731811f, + 0.828045045f, 0.560661576f, + 0.831469612f, 0.555570233f, + 0.834862875f, 0.550457973f, + 0.838224706f, 0.545324988f, + 0.841554977f, 0.540171473f, + 0.844853565f, 0.534997620f, + 0.848120345f, 0.529803625f, + 0.851355193f, 0.524589683f, + 0.854557988f, 0.519355990f, + 0.857728610f, 0.514102744f, + 0.860866939f, 0.508830143f, + 0.863972856f, 0.503538384f, + 0.867046246f, 0.498227667f, + 0.870086991f, 0.492898192f, + 0.873094978f, 0.487550160f, + 0.876070094f, 0.482183772f, + 0.879012226f, 0.476799230f, + 0.881921264f, 0.471396737f, + 0.884797098f, 0.465976496f, + 0.887639620f, 0.460538711f, + 0.890448723f, 0.455083587f, + 0.893224301f, 0.449611330f, + 0.895966250f, 0.444122145f, + 0.898674466f, 0.438616239f, + 0.901348847f, 0.433093819f, + 0.903989293f, 0.427555093f, + 0.906595705f, 0.422000271f, + 0.909167983f, 0.416429560f, + 0.911706032f, 0.410843171f, + 0.914209756f, 0.405241314f, + 0.916679060f, 0.399624200f, + 0.919113852f, 0.393992040f, + 0.921514039f, 0.388345047f, + 0.923879533f, 0.382683432f, + 0.926210242f, 0.377007410f, + 0.928506080f, 0.371317194f, + 0.930766961f, 0.365612998f, + 0.932992799f, 0.359895037f, + 0.935183510f, 0.354163525f, + 0.937339012f, 0.348418680f, + 0.939459224f, 0.342660717f, + 0.941544065f, 0.336889853f, + 0.943593458f, 0.331106306f, + 0.945607325f, 0.325310292f, + 0.947585591f, 0.319502031f, + 0.949528181f, 0.313681740f, + 0.951435021f, 0.307849640f, + 0.953306040f, 0.302005949f, + 0.955141168f, 0.296150888f, + 0.956940336f, 0.290284677f, + 0.958703475f, 0.284407537f, + 0.960430519f, 0.278519689f, + 0.962121404f, 0.272621355f, + 0.963776066f, 0.266712757f, + 0.965394442f, 0.260794118f, + 0.966976471f, 0.254865660f, + 0.968522094f, 0.248927606f, + 0.970031253f, 0.242980180f, + 0.971503891f, 0.237023606f, + 0.972939952f, 0.231058108f, + 0.974339383f, 0.225083911f, + 0.975702130f, 0.219101240f, + 0.977028143f, 0.213110320f, + 0.978317371f, 0.207111376f, + 0.979569766f, 0.201104635f, + 0.980785280f, 0.195090322f, + 0.981963869f, 0.189068664f, + 0.983105487f, 0.183039888f, + 0.984210092f, 0.177004220f, + 0.985277642f, 0.170961889f, + 0.986308097f, 0.164913120f, + 0.987301418f, 0.158858143f, + 0.988257568f, 0.152797185f, + 0.989176510f, 0.146730474f, + 0.990058210f, 0.140658239f, + 0.990902635f, 0.134580709f, + 0.991709754f, 0.128498111f, + 0.992479535f, 0.122410675f, + 0.993211949f, 0.116318631f, + 0.993906970f, 0.110222207f, + 0.994564571f, 0.104121634f, + 0.995184727f, 0.098017140f, + 0.995767414f, 0.091908956f, + 0.996312612f, 0.085797312f, + 0.996820299f, 0.079682438f, + 0.997290457f, 0.073564564f, + 0.997723067f, 0.067443920f, + 0.998118113f, 0.061320736f, + 0.998475581f, 0.055195244f, + 0.998795456f, 0.049067674f, + 0.999077728f, 0.042938257f, + 0.999322385f, 0.036807223f, + 0.999529418f, 0.030674803f, + 0.999698819f, 0.024541229f, + 0.999830582f, 0.018406730f, + 0.999924702f, 0.012271538f, + 0.999981175f, 0.006135885f, + 1.000000000f, 0.000000000f, + 0.999981175f, -0.006135885f, + 0.999924702f, -0.012271538f, + 0.999830582f, -0.018406730f, + 0.999698819f, -0.024541229f, + 0.999529418f, -0.030674803f, + 0.999322385f, -0.036807223f, + 0.999077728f, -0.042938257f, + 0.998795456f, -0.049067674f, + 0.998475581f, -0.055195244f, + 0.998118113f, -0.061320736f, + 0.997723067f, -0.067443920f, + 0.997290457f, -0.073564564f, + 0.996820299f, -0.079682438f, + 0.996312612f, -0.085797312f, + 0.995767414f, -0.091908956f, + 0.995184727f, -0.098017140f, + 0.994564571f, -0.104121634f, + 0.993906970f, -0.110222207f, + 0.993211949f, -0.116318631f, + 0.992479535f, -0.122410675f, + 0.991709754f, -0.128498111f, + 0.990902635f, -0.134580709f, + 0.990058210f, -0.140658239f, + 0.989176510f, -0.146730474f, + 0.988257568f, -0.152797185f, + 0.987301418f, -0.158858143f, + 0.986308097f, -0.164913120f, + 0.985277642f, -0.170961889f, + 0.984210092f, -0.177004220f, + 0.983105487f, -0.183039888f, + 0.981963869f, -0.189068664f, + 0.980785280f, -0.195090322f, + 0.979569766f, -0.201104635f, + 0.978317371f, -0.207111376f, + 0.977028143f, -0.213110320f, + 0.975702130f, -0.219101240f, + 0.974339383f, -0.225083911f, + 0.972939952f, -0.231058108f, + 0.971503891f, -0.237023606f, + 0.970031253f, -0.242980180f, + 0.968522094f, -0.248927606f, + 0.966976471f, -0.254865660f, + 0.965394442f, -0.260794118f, + 0.963776066f, -0.266712757f, + 0.962121404f, -0.272621355f, + 0.960430519f, -0.278519689f, + 0.958703475f, -0.284407537f, + 0.956940336f, -0.290284677f, + 0.955141168f, -0.296150888f, + 0.953306040f, -0.302005949f, + 0.951435021f, -0.307849640f, + 0.949528181f, -0.313681740f, + 0.947585591f, -0.319502031f, + 0.945607325f, -0.325310292f, + 0.943593458f, -0.331106306f, + 0.941544065f, -0.336889853f, + 0.939459224f, -0.342660717f, + 0.937339012f, -0.348418680f, + 0.935183510f, -0.354163525f, + 0.932992799f, -0.359895037f, + 0.930766961f, -0.365612998f, + 0.928506080f, -0.371317194f, + 0.926210242f, -0.377007410f, + 0.923879533f, -0.382683432f, + 0.921514039f, -0.388345047f, + 0.919113852f, -0.393992040f, + 0.916679060f, -0.399624200f, + 0.914209756f, -0.405241314f, + 0.911706032f, -0.410843171f, + 0.909167983f, -0.416429560f, + 0.906595705f, -0.422000271f, + 0.903989293f, -0.427555093f, + 0.901348847f, -0.433093819f, + 0.898674466f, -0.438616239f, + 0.895966250f, -0.444122145f, + 0.893224301f, -0.449611330f, + 0.890448723f, -0.455083587f, + 0.887639620f, -0.460538711f, + 0.884797098f, -0.465976496f, + 0.881921264f, -0.471396737f, + 0.879012226f, -0.476799230f, + 0.876070094f, -0.482183772f, + 0.873094978f, -0.487550160f, + 0.870086991f, -0.492898192f, + 0.867046246f, -0.498227667f, + 0.863972856f, -0.503538384f, + 0.860866939f, -0.508830143f, + 0.857728610f, -0.514102744f, + 0.854557988f, -0.519355990f, + 0.851355193f, -0.524589683f, + 0.848120345f, -0.529803625f, + 0.844853565f, -0.534997620f, + 0.841554977f, -0.540171473f, + 0.838224706f, -0.545324988f, + 0.834862875f, -0.550457973f, + 0.831469612f, -0.555570233f, + 0.828045045f, -0.560661576f, + 0.824589303f, -0.565731811f, + 0.821102515f, -0.570780746f, + 0.817584813f, -0.575808191f, + 0.814036330f, -0.580813958f, + 0.810457198f, -0.585797857f, + 0.806847554f, -0.590759702f, + 0.803207531f, -0.595699304f, + 0.799537269f, -0.600616479f, + 0.795836905f, -0.605511041f, + 0.792106577f, -0.610382806f, + 0.788346428f, -0.615231591f, + 0.784556597f, -0.620057212f, + 0.780737229f, -0.624859488f, + 0.776888466f, -0.629638239f, + 0.773010453f, -0.634393284f, + 0.769103338f, -0.639124445f, + 0.765167266f, -0.643831543f, + 0.761202385f, -0.648514401f, + 0.757208847f, -0.653172843f, + 0.753186799f, -0.657806693f, + 0.749136395f, -0.662415778f, + 0.745057785f, -0.666999922f, + 0.740951125f, -0.671558955f, + 0.736816569f, -0.676092704f, + 0.732654272f, -0.680600998f, + 0.728464390f, -0.685083668f, + 0.724247083f, -0.689540545f, + 0.720002508f, -0.693971461f, + 0.715730825f, -0.698376249f, + 0.711432196f, -0.702754744f, + 0.707106781f, -0.707106781f, + 0.702754744f, -0.711432196f, + 0.698376249f, -0.715730825f, + 0.693971461f, -0.720002508f, + 0.689540545f, -0.724247083f, + 0.685083668f, -0.728464390f, + 0.680600998f, -0.732654272f, + 0.676092704f, -0.736816569f, + 0.671558955f, -0.740951125f, + 0.666999922f, -0.745057785f, + 0.662415778f, -0.749136395f, + 0.657806693f, -0.753186799f, + 0.653172843f, -0.757208847f, + 0.648514401f, -0.761202385f, + 0.643831543f, -0.765167266f, + 0.639124445f, -0.769103338f, + 0.634393284f, -0.773010453f, + 0.629638239f, -0.776888466f, + 0.624859488f, -0.780737229f, + 0.620057212f, -0.784556597f, + 0.615231591f, -0.788346428f, + 0.610382806f, -0.792106577f, + 0.605511041f, -0.795836905f, + 0.600616479f, -0.799537269f, + 0.595699304f, -0.803207531f, + 0.590759702f, -0.806847554f, + 0.585797857f, -0.810457198f, + 0.580813958f, -0.814036330f, + 0.575808191f, -0.817584813f, + 0.570780746f, -0.821102515f, + 0.565731811f, -0.824589303f, + 0.560661576f, -0.828045045f, + 0.555570233f, -0.831469612f, + 0.550457973f, -0.834862875f, + 0.545324988f, -0.838224706f, + 0.540171473f, -0.841554977f, + 0.534997620f, -0.844853565f, + 0.529803625f, -0.848120345f, + 0.524589683f, -0.851355193f, + 0.519355990f, -0.854557988f, + 0.514102744f, -0.857728610f, + 0.508830143f, -0.860866939f, + 0.503538384f, -0.863972856f, + 0.498227667f, -0.867046246f, + 0.492898192f, -0.870086991f, + 0.487550160f, -0.873094978f, + 0.482183772f, -0.876070094f, + 0.476799230f, -0.879012226f, + 0.471396737f, -0.881921264f, + 0.465976496f, -0.884797098f, + 0.460538711f, -0.887639620f, + 0.455083587f, -0.890448723f, + 0.449611330f, -0.893224301f, + 0.444122145f, -0.895966250f, + 0.438616239f, -0.898674466f, + 0.433093819f, -0.901348847f, + 0.427555093f, -0.903989293f, + 0.422000271f, -0.906595705f, + 0.416429560f, -0.909167983f, + 0.410843171f, -0.911706032f, + 0.405241314f, -0.914209756f, + 0.399624200f, -0.916679060f, + 0.393992040f, -0.919113852f, + 0.388345047f, -0.921514039f, + 0.382683432f, -0.923879533f, + 0.377007410f, -0.926210242f, + 0.371317194f, -0.928506080f, + 0.365612998f, -0.930766961f, + 0.359895037f, -0.932992799f, + 0.354163525f, -0.935183510f, + 0.348418680f, -0.937339012f, + 0.342660717f, -0.939459224f, + 0.336889853f, -0.941544065f, + 0.331106306f, -0.943593458f, + 0.325310292f, -0.945607325f, + 0.319502031f, -0.947585591f, + 0.313681740f, -0.949528181f, + 0.307849640f, -0.951435021f, + 0.302005949f, -0.953306040f, + 0.296150888f, -0.955141168f, + 0.290284677f, -0.956940336f, + 0.284407537f, -0.958703475f, + 0.278519689f, -0.960430519f, + 0.272621355f, -0.962121404f, + 0.266712757f, -0.963776066f, + 0.260794118f, -0.965394442f, + 0.254865660f, -0.966976471f, + 0.248927606f, -0.968522094f, + 0.242980180f, -0.970031253f, + 0.237023606f, -0.971503891f, + 0.231058108f, -0.972939952f, + 0.225083911f, -0.974339383f, + 0.219101240f, -0.975702130f, + 0.213110320f, -0.977028143f, + 0.207111376f, -0.978317371f, + 0.201104635f, -0.979569766f, + 0.195090322f, -0.980785280f, + 0.189068664f, -0.981963869f, + 0.183039888f, -0.983105487f, + 0.177004220f, -0.984210092f, + 0.170961889f, -0.985277642f, + 0.164913120f, -0.986308097f, + 0.158858143f, -0.987301418f, + 0.152797185f, -0.988257568f, + 0.146730474f, -0.989176510f, + 0.140658239f, -0.990058210f, + 0.134580709f, -0.990902635f, + 0.128498111f, -0.991709754f, + 0.122410675f, -0.992479535f, + 0.116318631f, -0.993211949f, + 0.110222207f, -0.993906970f, + 0.104121634f, -0.994564571f, + 0.098017140f, -0.995184727f, + 0.091908956f, -0.995767414f, + 0.085797312f, -0.996312612f, + 0.079682438f, -0.996820299f, + 0.073564564f, -0.997290457f, + 0.067443920f, -0.997723067f, + 0.061320736f, -0.998118113f, + 0.055195244f, -0.998475581f, + 0.049067674f, -0.998795456f, + 0.042938257f, -0.999077728f, + 0.036807223f, -0.999322385f, + 0.030674803f, -0.999529418f, + 0.024541229f, -0.999698819f, + 0.018406730f, -0.999830582f, + 0.012271538f, -0.999924702f, + 0.006135885f, -0.999981175f +}; + +const float32_t twiddleCoef_rfft_2048[2048] = { + 0.000000000f, 1.000000000f, + 0.003067957f, 0.999995294f, + 0.006135885f, 0.999981175f, + 0.009203755f, 0.999957645f, + 0.012271538f, 0.999924702f, + 0.015339206f, 0.999882347f, + 0.018406730f, 0.999830582f, + 0.021474080f, 0.999769405f, + 0.024541229f, 0.999698819f, + 0.027608146f, 0.999618822f, + 0.030674803f, 0.999529418f, + 0.033741172f, 0.999430605f, + 0.036807223f, 0.999322385f, + 0.039872928f, 0.999204759f, + 0.042938257f, 0.999077728f, + 0.046003182f, 0.998941293f, + 0.049067674f, 0.998795456f, + 0.052131705f, 0.998640218f, + 0.055195244f, 0.998475581f, + 0.058258265f, 0.998301545f, + 0.061320736f, 0.998118113f, + 0.064382631f, 0.997925286f, + 0.067443920f, 0.997723067f, + 0.070504573f, 0.997511456f, + 0.073564564f, 0.997290457f, + 0.076623861f, 0.997060070f, + 0.079682438f, 0.996820299f, + 0.082740265f, 0.996571146f, + 0.085797312f, 0.996312612f, + 0.088853553f, 0.996044701f, + 0.091908956f, 0.995767414f, + 0.094963495f, 0.995480755f, + 0.098017140f, 0.995184727f, + 0.101069863f, 0.994879331f, + 0.104121634f, 0.994564571f, + 0.107172425f, 0.994240449f, + 0.110222207f, 0.993906970f, + 0.113270952f, 0.993564136f, + 0.116318631f, 0.993211949f, + 0.119365215f, 0.992850414f, + 0.122410675f, 0.992479535f, + 0.125454983f, 0.992099313f, + 0.128498111f, 0.991709754f, + 0.131540029f, 0.991310860f, + 0.134580709f, 0.990902635f, + 0.137620122f, 0.990485084f, + 0.140658239f, 0.990058210f, + 0.143695033f, 0.989622017f, + 0.146730474f, 0.989176510f, + 0.149764535f, 0.988721692f, + 0.152797185f, 0.988257568f, + 0.155828398f, 0.987784142f, + 0.158858143f, 0.987301418f, + 0.161886394f, 0.986809402f, + 0.164913120f, 0.986308097f, + 0.167938295f, 0.985797509f, + 0.170961889f, 0.985277642f, + 0.173983873f, 0.984748502f, + 0.177004220f, 0.984210092f, + 0.180022901f, 0.983662419f, + 0.183039888f, 0.983105487f, + 0.186055152f, 0.982539302f, + 0.189068664f, 0.981963869f, + 0.192080397f, 0.981379193f, + 0.195090322f, 0.980785280f, + 0.198098411f, 0.980182136f, + 0.201104635f, 0.979569766f, + 0.204108966f, 0.978948175f, + 0.207111376f, 0.978317371f, + 0.210111837f, 0.977677358f, + 0.213110320f, 0.977028143f, + 0.216106797f, 0.976369731f, + 0.219101240f, 0.975702130f, + 0.222093621f, 0.975025345f, + 0.225083911f, 0.974339383f, + 0.228072083f, 0.973644250f, + 0.231058108f, 0.972939952f, + 0.234041959f, 0.972226497f, + 0.237023606f, 0.971503891f, + 0.240003022f, 0.970772141f, + 0.242980180f, 0.970031253f, + 0.245955050f, 0.969281235f, + 0.248927606f, 0.968522094f, + 0.251897818f, 0.967753837f, + 0.254865660f, 0.966976471f, + 0.257831102f, 0.966190003f, + 0.260794118f, 0.965394442f, + 0.263754679f, 0.964589793f, + 0.266712757f, 0.963776066f, + 0.269668326f, 0.962953267f, + 0.272621355f, 0.962121404f, + 0.275571819f, 0.961280486f, + 0.278519689f, 0.960430519f, + 0.281464938f, 0.959571513f, + 0.284407537f, 0.958703475f, + 0.287347460f, 0.957826413f, + 0.290284677f, 0.956940336f, + 0.293219163f, 0.956045251f, + 0.296150888f, 0.955141168f, + 0.299079826f, 0.954228095f, + 0.302005949f, 0.953306040f, + 0.304929230f, 0.952375013f, + 0.307849640f, 0.951435021f, + 0.310767153f, 0.950486074f, + 0.313681740f, 0.949528181f, + 0.316593376f, 0.948561350f, + 0.319502031f, 0.947585591f, + 0.322407679f, 0.946600913f, + 0.325310292f, 0.945607325f, + 0.328209844f, 0.944604837f, + 0.331106306f, 0.943593458f, + 0.333999651f, 0.942573198f, + 0.336889853f, 0.941544065f, + 0.339776884f, 0.940506071f, + 0.342660717f, 0.939459224f, + 0.345541325f, 0.938403534f, + 0.348418680f, 0.937339012f, + 0.351292756f, 0.936265667f, + 0.354163525f, 0.935183510f, + 0.357030961f, 0.934092550f, + 0.359895037f, 0.932992799f, + 0.362755724f, 0.931884266f, + 0.365612998f, 0.930766961f, + 0.368466830f, 0.929640896f, + 0.371317194f, 0.928506080f, + 0.374164063f, 0.927362526f, + 0.377007410f, 0.926210242f, + 0.379847209f, 0.925049241f, + 0.382683432f, 0.923879533f, + 0.385516054f, 0.922701128f, + 0.388345047f, 0.921514039f, + 0.391170384f, 0.920318277f, + 0.393992040f, 0.919113852f, + 0.396809987f, 0.917900776f, + 0.399624200f, 0.916679060f, + 0.402434651f, 0.915448716f, + 0.405241314f, 0.914209756f, + 0.408044163f, 0.912962190f, + 0.410843171f, 0.911706032f, + 0.413638312f, 0.910441292f, + 0.416429560f, 0.909167983f, + 0.419216888f, 0.907886116f, + 0.422000271f, 0.906595705f, + 0.424779681f, 0.905296759f, + 0.427555093f, 0.903989293f, + 0.430326481f, 0.902673318f, + 0.433093819f, 0.901348847f, + 0.435857080f, 0.900015892f, + 0.438616239f, 0.898674466f, + 0.441371269f, 0.897324581f, + 0.444122145f, 0.895966250f, + 0.446868840f, 0.894599486f, + 0.449611330f, 0.893224301f, + 0.452349587f, 0.891840709f, + 0.455083587f, 0.890448723f, + 0.457813304f, 0.889048356f, + 0.460538711f, 0.887639620f, + 0.463259784f, 0.886222530f, + 0.465976496f, 0.884797098f, + 0.468688822f, 0.883363339f, + 0.471396737f, 0.881921264f, + 0.474100215f, 0.880470889f, + 0.476799230f, 0.879012226f, + 0.479493758f, 0.877545290f, + 0.482183772f, 0.876070094f, + 0.484869248f, 0.874586652f, + 0.487550160f, 0.873094978f, + 0.490226483f, 0.871595087f, + 0.492898192f, 0.870086991f, + 0.495565262f, 0.868570706f, + 0.498227667f, 0.867046246f, + 0.500885383f, 0.865513624f, + 0.503538384f, 0.863972856f, + 0.506186645f, 0.862423956f, + 0.508830143f, 0.860866939f, + 0.511468850f, 0.859301818f, + 0.514102744f, 0.857728610f, + 0.516731799f, 0.856147328f, + 0.519355990f, 0.854557988f, + 0.521975293f, 0.852960605f, + 0.524589683f, 0.851355193f, + 0.527199135f, 0.849741768f, + 0.529803625f, 0.848120345f, + 0.532403128f, 0.846490939f, + 0.534997620f, 0.844853565f, + 0.537587076f, 0.843208240f, + 0.540171473f, 0.841554977f, + 0.542750785f, 0.839893794f, + 0.545324988f, 0.838224706f, + 0.547894059f, 0.836547727f, + 0.550457973f, 0.834862875f, + 0.553016706f, 0.833170165f, + 0.555570233f, 0.831469612f, + 0.558118531f, 0.829761234f, + 0.560661576f, 0.828045045f, + 0.563199344f, 0.826321063f, + 0.565731811f, 0.824589303f, + 0.568258953f, 0.822849781f, + 0.570780746f, 0.821102515f, + 0.573297167f, 0.819347520f, + 0.575808191f, 0.817584813f, + 0.578313796f, 0.815814411f, + 0.580813958f, 0.814036330f, + 0.583308653f, 0.812250587f, + 0.585797857f, 0.810457198f, + 0.588281548f, 0.808656182f, + 0.590759702f, 0.806847554f, + 0.593232295f, 0.805031331f, + 0.595699304f, 0.803207531f, + 0.598160707f, 0.801376172f, + 0.600616479f, 0.799537269f, + 0.603066599f, 0.797690841f, + 0.605511041f, 0.795836905f, + 0.607949785f, 0.793975478f, + 0.610382806f, 0.792106577f, + 0.612810082f, 0.790230221f, + 0.615231591f, 0.788346428f, + 0.617647308f, 0.786455214f, + 0.620057212f, 0.784556597f, + 0.622461279f, 0.782650596f, + 0.624859488f, 0.780737229f, + 0.627251815f, 0.778816512f, + 0.629638239f, 0.776888466f, + 0.632018736f, 0.774953107f, + 0.634393284f, 0.773010453f, + 0.636761861f, 0.771060524f, + 0.639124445f, 0.769103338f, + 0.641481013f, 0.767138912f, + 0.643831543f, 0.765167266f, + 0.646176013f, 0.763188417f, + 0.648514401f, 0.761202385f, + 0.650846685f, 0.759209189f, + 0.653172843f, 0.757208847f, + 0.655492853f, 0.755201377f, + 0.657806693f, 0.753186799f, + 0.660114342f, 0.751165132f, + 0.662415778f, 0.749136395f, + 0.664710978f, 0.747100606f, + 0.666999922f, 0.745057785f, + 0.669282588f, 0.743007952f, + 0.671558955f, 0.740951125f, + 0.673829000f, 0.738887324f, + 0.676092704f, 0.736816569f, + 0.678350043f, 0.734738878f, + 0.680600998f, 0.732654272f, + 0.682845546f, 0.730562769f, + 0.685083668f, 0.728464390f, + 0.687315341f, 0.726359155f, + 0.689540545f, 0.724247083f, + 0.691759258f, 0.722128194f, + 0.693971461f, 0.720002508f, + 0.696177131f, 0.717870045f, + 0.698376249f, 0.715730825f, + 0.700568794f, 0.713584869f, + 0.702754744f, 0.711432196f, + 0.704934080f, 0.709272826f, + 0.707106781f, 0.707106781f, + 0.709272826f, 0.704934080f, + 0.711432196f, 0.702754744f, + 0.713584869f, 0.700568794f, + 0.715730825f, 0.698376249f, + 0.717870045f, 0.696177131f, + 0.720002508f, 0.693971461f, + 0.722128194f, 0.691759258f, + 0.724247083f, 0.689540545f, + 0.726359155f, 0.687315341f, + 0.728464390f, 0.685083668f, + 0.730562769f, 0.682845546f, + 0.732654272f, 0.680600998f, + 0.734738878f, 0.678350043f, + 0.736816569f, 0.676092704f, + 0.738887324f, 0.673829000f, + 0.740951125f, 0.671558955f, + 0.743007952f, 0.669282588f, + 0.745057785f, 0.666999922f, + 0.747100606f, 0.664710978f, + 0.749136395f, 0.662415778f, + 0.751165132f, 0.660114342f, + 0.753186799f, 0.657806693f, + 0.755201377f, 0.655492853f, + 0.757208847f, 0.653172843f, + 0.759209189f, 0.650846685f, + 0.761202385f, 0.648514401f, + 0.763188417f, 0.646176013f, + 0.765167266f, 0.643831543f, + 0.767138912f, 0.641481013f, + 0.769103338f, 0.639124445f, + 0.771060524f, 0.636761861f, + 0.773010453f, 0.634393284f, + 0.774953107f, 0.632018736f, + 0.776888466f, 0.629638239f, + 0.778816512f, 0.627251815f, + 0.780737229f, 0.624859488f, + 0.782650596f, 0.622461279f, + 0.784556597f, 0.620057212f, + 0.786455214f, 0.617647308f, + 0.788346428f, 0.615231591f, + 0.790230221f, 0.612810082f, + 0.792106577f, 0.610382806f, + 0.793975478f, 0.607949785f, + 0.795836905f, 0.605511041f, + 0.797690841f, 0.603066599f, + 0.799537269f, 0.600616479f, + 0.801376172f, 0.598160707f, + 0.803207531f, 0.595699304f, + 0.805031331f, 0.593232295f, + 0.806847554f, 0.590759702f, + 0.808656182f, 0.588281548f, + 0.810457198f, 0.585797857f, + 0.812250587f, 0.583308653f, + 0.814036330f, 0.580813958f, + 0.815814411f, 0.578313796f, + 0.817584813f, 0.575808191f, + 0.819347520f, 0.573297167f, + 0.821102515f, 0.570780746f, + 0.822849781f, 0.568258953f, + 0.824589303f, 0.565731811f, + 0.826321063f, 0.563199344f, + 0.828045045f, 0.560661576f, + 0.829761234f, 0.558118531f, + 0.831469612f, 0.555570233f, + 0.833170165f, 0.553016706f, + 0.834862875f, 0.550457973f, + 0.836547727f, 0.547894059f, + 0.838224706f, 0.545324988f, + 0.839893794f, 0.542750785f, + 0.841554977f, 0.540171473f, + 0.843208240f, 0.537587076f, + 0.844853565f, 0.534997620f, + 0.846490939f, 0.532403128f, + 0.848120345f, 0.529803625f, + 0.849741768f, 0.527199135f, + 0.851355193f, 0.524589683f, + 0.852960605f, 0.521975293f, + 0.854557988f, 0.519355990f, + 0.856147328f, 0.516731799f, + 0.857728610f, 0.514102744f, + 0.859301818f, 0.511468850f, + 0.860866939f, 0.508830143f, + 0.862423956f, 0.506186645f, + 0.863972856f, 0.503538384f, + 0.865513624f, 0.500885383f, + 0.867046246f, 0.498227667f, + 0.868570706f, 0.495565262f, + 0.870086991f, 0.492898192f, + 0.871595087f, 0.490226483f, + 0.873094978f, 0.487550160f, + 0.874586652f, 0.484869248f, + 0.876070094f, 0.482183772f, + 0.877545290f, 0.479493758f, + 0.879012226f, 0.476799230f, + 0.880470889f, 0.474100215f, + 0.881921264f, 0.471396737f, + 0.883363339f, 0.468688822f, + 0.884797098f, 0.465976496f, + 0.886222530f, 0.463259784f, + 0.887639620f, 0.460538711f, + 0.889048356f, 0.457813304f, + 0.890448723f, 0.455083587f, + 0.891840709f, 0.452349587f, + 0.893224301f, 0.449611330f, + 0.894599486f, 0.446868840f, + 0.895966250f, 0.444122145f, + 0.897324581f, 0.441371269f, + 0.898674466f, 0.438616239f, + 0.900015892f, 0.435857080f, + 0.901348847f, 0.433093819f, + 0.902673318f, 0.430326481f, + 0.903989293f, 0.427555093f, + 0.905296759f, 0.424779681f, + 0.906595705f, 0.422000271f, + 0.907886116f, 0.419216888f, + 0.909167983f, 0.416429560f, + 0.910441292f, 0.413638312f, + 0.911706032f, 0.410843171f, + 0.912962190f, 0.408044163f, + 0.914209756f, 0.405241314f, + 0.915448716f, 0.402434651f, + 0.916679060f, 0.399624200f, + 0.917900776f, 0.396809987f, + 0.919113852f, 0.393992040f, + 0.920318277f, 0.391170384f, + 0.921514039f, 0.388345047f, + 0.922701128f, 0.385516054f, + 0.923879533f, 0.382683432f, + 0.925049241f, 0.379847209f, + 0.926210242f, 0.377007410f, + 0.927362526f, 0.374164063f, + 0.928506080f, 0.371317194f, + 0.929640896f, 0.368466830f, + 0.930766961f, 0.365612998f, + 0.931884266f, 0.362755724f, + 0.932992799f, 0.359895037f, + 0.934092550f, 0.357030961f, + 0.935183510f, 0.354163525f, + 0.936265667f, 0.351292756f, + 0.937339012f, 0.348418680f, + 0.938403534f, 0.345541325f, + 0.939459224f, 0.342660717f, + 0.940506071f, 0.339776884f, + 0.941544065f, 0.336889853f, + 0.942573198f, 0.333999651f, + 0.943593458f, 0.331106306f, + 0.944604837f, 0.328209844f, + 0.945607325f, 0.325310292f, + 0.946600913f, 0.322407679f, + 0.947585591f, 0.319502031f, + 0.948561350f, 0.316593376f, + 0.949528181f, 0.313681740f, + 0.950486074f, 0.310767153f, + 0.951435021f, 0.307849640f, + 0.952375013f, 0.304929230f, + 0.953306040f, 0.302005949f, + 0.954228095f, 0.299079826f, + 0.955141168f, 0.296150888f, + 0.956045251f, 0.293219163f, + 0.956940336f, 0.290284677f, + 0.957826413f, 0.287347460f, + 0.958703475f, 0.284407537f, + 0.959571513f, 0.281464938f, + 0.960430519f, 0.278519689f, + 0.961280486f, 0.275571819f, + 0.962121404f, 0.272621355f, + 0.962953267f, 0.269668326f, + 0.963776066f, 0.266712757f, + 0.964589793f, 0.263754679f, + 0.965394442f, 0.260794118f, + 0.966190003f, 0.257831102f, + 0.966976471f, 0.254865660f, + 0.967753837f, 0.251897818f, + 0.968522094f, 0.248927606f, + 0.969281235f, 0.245955050f, + 0.970031253f, 0.242980180f, + 0.970772141f, 0.240003022f, + 0.971503891f, 0.237023606f, + 0.972226497f, 0.234041959f, + 0.972939952f, 0.231058108f, + 0.973644250f, 0.228072083f, + 0.974339383f, 0.225083911f, + 0.975025345f, 0.222093621f, + 0.975702130f, 0.219101240f, + 0.976369731f, 0.216106797f, + 0.977028143f, 0.213110320f, + 0.977677358f, 0.210111837f, + 0.978317371f, 0.207111376f, + 0.978948175f, 0.204108966f, + 0.979569766f, 0.201104635f, + 0.980182136f, 0.198098411f, + 0.980785280f, 0.195090322f, + 0.981379193f, 0.192080397f, + 0.981963869f, 0.189068664f, + 0.982539302f, 0.186055152f, + 0.983105487f, 0.183039888f, + 0.983662419f, 0.180022901f, + 0.984210092f, 0.177004220f, + 0.984748502f, 0.173983873f, + 0.985277642f, 0.170961889f, + 0.985797509f, 0.167938295f, + 0.986308097f, 0.164913120f, + 0.986809402f, 0.161886394f, + 0.987301418f, 0.158858143f, + 0.987784142f, 0.155828398f, + 0.988257568f, 0.152797185f, + 0.988721692f, 0.149764535f, + 0.989176510f, 0.146730474f, + 0.989622017f, 0.143695033f, + 0.990058210f, 0.140658239f, + 0.990485084f, 0.137620122f, + 0.990902635f, 0.134580709f, + 0.991310860f, 0.131540029f, + 0.991709754f, 0.128498111f, + 0.992099313f, 0.125454983f, + 0.992479535f, 0.122410675f, + 0.992850414f, 0.119365215f, + 0.993211949f, 0.116318631f, + 0.993564136f, 0.113270952f, + 0.993906970f, 0.110222207f, + 0.994240449f, 0.107172425f, + 0.994564571f, 0.104121634f, + 0.994879331f, 0.101069863f, + 0.995184727f, 0.098017140f, + 0.995480755f, 0.094963495f, + 0.995767414f, 0.091908956f, + 0.996044701f, 0.088853553f, + 0.996312612f, 0.085797312f, + 0.996571146f, 0.082740265f, + 0.996820299f, 0.079682438f, + 0.997060070f, 0.076623861f, + 0.997290457f, 0.073564564f, + 0.997511456f, 0.070504573f, + 0.997723067f, 0.067443920f, + 0.997925286f, 0.064382631f, + 0.998118113f, 0.061320736f, + 0.998301545f, 0.058258265f, + 0.998475581f, 0.055195244f, + 0.998640218f, 0.052131705f, + 0.998795456f, 0.049067674f, + 0.998941293f, 0.046003182f, + 0.999077728f, 0.042938257f, + 0.999204759f, 0.039872928f, + 0.999322385f, 0.036807223f, + 0.999430605f, 0.033741172f, + 0.999529418f, 0.030674803f, + 0.999618822f, 0.027608146f, + 0.999698819f, 0.024541229f, + 0.999769405f, 0.021474080f, + 0.999830582f, 0.018406730f, + 0.999882347f, 0.015339206f, + 0.999924702f, 0.012271538f, + 0.999957645f, 0.009203755f, + 0.999981175f, 0.006135885f, + 0.999995294f, 0.003067957f, + 1.000000000f, 0.000000000f, + 0.999995294f, -0.003067957f, + 0.999981175f, -0.006135885f, + 0.999957645f, -0.009203755f, + 0.999924702f, -0.012271538f, + 0.999882347f, -0.015339206f, + 0.999830582f, -0.018406730f, + 0.999769405f, -0.021474080f, + 0.999698819f, -0.024541229f, + 0.999618822f, -0.027608146f, + 0.999529418f, -0.030674803f, + 0.999430605f, -0.033741172f, + 0.999322385f, -0.036807223f, + 0.999204759f, -0.039872928f, + 0.999077728f, -0.042938257f, + 0.998941293f, -0.046003182f, + 0.998795456f, -0.049067674f, + 0.998640218f, -0.052131705f, + 0.998475581f, -0.055195244f, + 0.998301545f, -0.058258265f, + 0.998118113f, -0.061320736f, + 0.997925286f, -0.064382631f, + 0.997723067f, -0.067443920f, + 0.997511456f, -0.070504573f, + 0.997290457f, -0.073564564f, + 0.997060070f, -0.076623861f, + 0.996820299f, -0.079682438f, + 0.996571146f, -0.082740265f, + 0.996312612f, -0.085797312f, + 0.996044701f, -0.088853553f, + 0.995767414f, -0.091908956f, + 0.995480755f, -0.094963495f, + 0.995184727f, -0.098017140f, + 0.994879331f, -0.101069863f, + 0.994564571f, -0.104121634f, + 0.994240449f, -0.107172425f, + 0.993906970f, -0.110222207f, + 0.993564136f, -0.113270952f, + 0.993211949f, -0.116318631f, + 0.992850414f, -0.119365215f, + 0.992479535f, -0.122410675f, + 0.992099313f, -0.125454983f, + 0.991709754f, -0.128498111f, + 0.991310860f, -0.131540029f, + 0.990902635f, -0.134580709f, + 0.990485084f, -0.137620122f, + 0.990058210f, -0.140658239f, + 0.989622017f, -0.143695033f, + 0.989176510f, -0.146730474f, + 0.988721692f, -0.149764535f, + 0.988257568f, -0.152797185f, + 0.987784142f, -0.155828398f, + 0.987301418f, -0.158858143f, + 0.986809402f, -0.161886394f, + 0.986308097f, -0.164913120f, + 0.985797509f, -0.167938295f, + 0.985277642f, -0.170961889f, + 0.984748502f, -0.173983873f, + 0.984210092f, -0.177004220f, + 0.983662419f, -0.180022901f, + 0.983105487f, -0.183039888f, + 0.982539302f, -0.186055152f, + 0.981963869f, -0.189068664f, + 0.981379193f, -0.192080397f, + 0.980785280f, -0.195090322f, + 0.980182136f, -0.198098411f, + 0.979569766f, -0.201104635f, + 0.978948175f, -0.204108966f, + 0.978317371f, -0.207111376f, + 0.977677358f, -0.210111837f, + 0.977028143f, -0.213110320f, + 0.976369731f, -0.216106797f, + 0.975702130f, -0.219101240f, + 0.975025345f, -0.222093621f, + 0.974339383f, -0.225083911f, + 0.973644250f, -0.228072083f, + 0.972939952f, -0.231058108f, + 0.972226497f, -0.234041959f, + 0.971503891f, -0.237023606f, + 0.970772141f, -0.240003022f, + 0.970031253f, -0.242980180f, + 0.969281235f, -0.245955050f, + 0.968522094f, -0.248927606f, + 0.967753837f, -0.251897818f, + 0.966976471f, -0.254865660f, + 0.966190003f, -0.257831102f, + 0.965394442f, -0.260794118f, + 0.964589793f, -0.263754679f, + 0.963776066f, -0.266712757f, + 0.962953267f, -0.269668326f, + 0.962121404f, -0.272621355f, + 0.961280486f, -0.275571819f, + 0.960430519f, -0.278519689f, + 0.959571513f, -0.281464938f, + 0.958703475f, -0.284407537f, + 0.957826413f, -0.287347460f, + 0.956940336f, -0.290284677f, + 0.956045251f, -0.293219163f, + 0.955141168f, -0.296150888f, + 0.954228095f, -0.299079826f, + 0.953306040f, -0.302005949f, + 0.952375013f, -0.304929230f, + 0.951435021f, -0.307849640f, + 0.950486074f, -0.310767153f, + 0.949528181f, -0.313681740f, + 0.948561350f, -0.316593376f, + 0.947585591f, -0.319502031f, + 0.946600913f, -0.322407679f, + 0.945607325f, -0.325310292f, + 0.944604837f, -0.328209844f, + 0.943593458f, -0.331106306f, + 0.942573198f, -0.333999651f, + 0.941544065f, -0.336889853f, + 0.940506071f, -0.339776884f, + 0.939459224f, -0.342660717f, + 0.938403534f, -0.345541325f, + 0.937339012f, -0.348418680f, + 0.936265667f, -0.351292756f, + 0.935183510f, -0.354163525f, + 0.934092550f, -0.357030961f, + 0.932992799f, -0.359895037f, + 0.931884266f, -0.362755724f, + 0.930766961f, -0.365612998f, + 0.929640896f, -0.368466830f, + 0.928506080f, -0.371317194f, + 0.927362526f, -0.374164063f, + 0.926210242f, -0.377007410f, + 0.925049241f, -0.379847209f, + 0.923879533f, -0.382683432f, + 0.922701128f, -0.385516054f, + 0.921514039f, -0.388345047f, + 0.920318277f, -0.391170384f, + 0.919113852f, -0.393992040f, + 0.917900776f, -0.396809987f, + 0.916679060f, -0.399624200f, + 0.915448716f, -0.402434651f, + 0.914209756f, -0.405241314f, + 0.912962190f, -0.408044163f, + 0.911706032f, -0.410843171f, + 0.910441292f, -0.413638312f, + 0.909167983f, -0.416429560f, + 0.907886116f, -0.419216888f, + 0.906595705f, -0.422000271f, + 0.905296759f, -0.424779681f, + 0.903989293f, -0.427555093f, + 0.902673318f, -0.430326481f, + 0.901348847f, -0.433093819f, + 0.900015892f, -0.435857080f, + 0.898674466f, -0.438616239f, + 0.897324581f, -0.441371269f, + 0.895966250f, -0.444122145f, + 0.894599486f, -0.446868840f, + 0.893224301f, -0.449611330f, + 0.891840709f, -0.452349587f, + 0.890448723f, -0.455083587f, + 0.889048356f, -0.457813304f, + 0.887639620f, -0.460538711f, + 0.886222530f, -0.463259784f, + 0.884797098f, -0.465976496f, + 0.883363339f, -0.468688822f, + 0.881921264f, -0.471396737f, + 0.880470889f, -0.474100215f, + 0.879012226f, -0.476799230f, + 0.877545290f, -0.479493758f, + 0.876070094f, -0.482183772f, + 0.874586652f, -0.484869248f, + 0.873094978f, -0.487550160f, + 0.871595087f, -0.490226483f, + 0.870086991f, -0.492898192f, + 0.868570706f, -0.495565262f, + 0.867046246f, -0.498227667f, + 0.865513624f, -0.500885383f, + 0.863972856f, -0.503538384f, + 0.862423956f, -0.506186645f, + 0.860866939f, -0.508830143f, + 0.859301818f, -0.511468850f, + 0.857728610f, -0.514102744f, + 0.856147328f, -0.516731799f, + 0.854557988f, -0.519355990f, + 0.852960605f, -0.521975293f, + 0.851355193f, -0.524589683f, + 0.849741768f, -0.527199135f, + 0.848120345f, -0.529803625f, + 0.846490939f, -0.532403128f, + 0.844853565f, -0.534997620f, + 0.843208240f, -0.537587076f, + 0.841554977f, -0.540171473f, + 0.839893794f, -0.542750785f, + 0.838224706f, -0.545324988f, + 0.836547727f, -0.547894059f, + 0.834862875f, -0.550457973f, + 0.833170165f, -0.553016706f, + 0.831469612f, -0.555570233f, + 0.829761234f, -0.558118531f, + 0.828045045f, -0.560661576f, + 0.826321063f, -0.563199344f, + 0.824589303f, -0.565731811f, + 0.822849781f, -0.568258953f, + 0.821102515f, -0.570780746f, + 0.819347520f, -0.573297167f, + 0.817584813f, -0.575808191f, + 0.815814411f, -0.578313796f, + 0.814036330f, -0.580813958f, + 0.812250587f, -0.583308653f, + 0.810457198f, -0.585797857f, + 0.808656182f, -0.588281548f, + 0.806847554f, -0.590759702f, + 0.805031331f, -0.593232295f, + 0.803207531f, -0.595699304f, + 0.801376172f, -0.598160707f, + 0.799537269f, -0.600616479f, + 0.797690841f, -0.603066599f, + 0.795836905f, -0.605511041f, + 0.793975478f, -0.607949785f, + 0.792106577f, -0.610382806f, + 0.790230221f, -0.612810082f, + 0.788346428f, -0.615231591f, + 0.786455214f, -0.617647308f, + 0.784556597f, -0.620057212f, + 0.782650596f, -0.622461279f, + 0.780737229f, -0.624859488f, + 0.778816512f, -0.627251815f, + 0.776888466f, -0.629638239f, + 0.774953107f, -0.632018736f, + 0.773010453f, -0.634393284f, + 0.771060524f, -0.636761861f, + 0.769103338f, -0.639124445f, + 0.767138912f, -0.641481013f, + 0.765167266f, -0.643831543f, + 0.763188417f, -0.646176013f, + 0.761202385f, -0.648514401f, + 0.759209189f, -0.650846685f, + 0.757208847f, -0.653172843f, + 0.755201377f, -0.655492853f, + 0.753186799f, -0.657806693f, + 0.751165132f, -0.660114342f, + 0.749136395f, -0.662415778f, + 0.747100606f, -0.664710978f, + 0.745057785f, -0.666999922f, + 0.743007952f, -0.669282588f, + 0.740951125f, -0.671558955f, + 0.738887324f, -0.673829000f, + 0.736816569f, -0.676092704f, + 0.734738878f, -0.678350043f, + 0.732654272f, -0.680600998f, + 0.730562769f, -0.682845546f, + 0.728464390f, -0.685083668f, + 0.726359155f, -0.687315341f, + 0.724247083f, -0.689540545f, + 0.722128194f, -0.691759258f, + 0.720002508f, -0.693971461f, + 0.717870045f, -0.696177131f, + 0.715730825f, -0.698376249f, + 0.713584869f, -0.700568794f, + 0.711432196f, -0.702754744f, + 0.709272826f, -0.704934080f, + 0.707106781f, -0.707106781f, + 0.704934080f, -0.709272826f, + 0.702754744f, -0.711432196f, + 0.700568794f, -0.713584869f, + 0.698376249f, -0.715730825f, + 0.696177131f, -0.717870045f, + 0.693971461f, -0.720002508f, + 0.691759258f, -0.722128194f, + 0.689540545f, -0.724247083f, + 0.687315341f, -0.726359155f, + 0.685083668f, -0.728464390f, + 0.682845546f, -0.730562769f, + 0.680600998f, -0.732654272f, + 0.678350043f, -0.734738878f, + 0.676092704f, -0.736816569f, + 0.673829000f, -0.738887324f, + 0.671558955f, -0.740951125f, + 0.669282588f, -0.743007952f, + 0.666999922f, -0.745057785f, + 0.664710978f, -0.747100606f, + 0.662415778f, -0.749136395f, + 0.660114342f, -0.751165132f, + 0.657806693f, -0.753186799f, + 0.655492853f, -0.755201377f, + 0.653172843f, -0.757208847f, + 0.650846685f, -0.759209189f, + 0.648514401f, -0.761202385f, + 0.646176013f, -0.763188417f, + 0.643831543f, -0.765167266f, + 0.641481013f, -0.767138912f, + 0.639124445f, -0.769103338f, + 0.636761861f, -0.771060524f, + 0.634393284f, -0.773010453f, + 0.632018736f, -0.774953107f, + 0.629638239f, -0.776888466f, + 0.627251815f, -0.778816512f, + 0.624859488f, -0.780737229f, + 0.622461279f, -0.782650596f, + 0.620057212f, -0.784556597f, + 0.617647308f, -0.786455214f, + 0.615231591f, -0.788346428f, + 0.612810082f, -0.790230221f, + 0.610382806f, -0.792106577f, + 0.607949785f, -0.793975478f, + 0.605511041f, -0.795836905f, + 0.603066599f, -0.797690841f, + 0.600616479f, -0.799537269f, + 0.598160707f, -0.801376172f, + 0.595699304f, -0.803207531f, + 0.593232295f, -0.805031331f, + 0.590759702f, -0.806847554f, + 0.588281548f, -0.808656182f, + 0.585797857f, -0.810457198f, + 0.583308653f, -0.812250587f, + 0.580813958f, -0.814036330f, + 0.578313796f, -0.815814411f, + 0.575808191f, -0.817584813f, + 0.573297167f, -0.819347520f, + 0.570780746f, -0.821102515f, + 0.568258953f, -0.822849781f, + 0.565731811f, -0.824589303f, + 0.563199344f, -0.826321063f, + 0.560661576f, -0.828045045f, + 0.558118531f, -0.829761234f, + 0.555570233f, -0.831469612f, + 0.553016706f, -0.833170165f, + 0.550457973f, -0.834862875f, + 0.547894059f, -0.836547727f, + 0.545324988f, -0.838224706f, + 0.542750785f, -0.839893794f, + 0.540171473f, -0.841554977f, + 0.537587076f, -0.843208240f, + 0.534997620f, -0.844853565f, + 0.532403128f, -0.846490939f, + 0.529803625f, -0.848120345f, + 0.527199135f, -0.849741768f, + 0.524589683f, -0.851355193f, + 0.521975293f, -0.852960605f, + 0.519355990f, -0.854557988f, + 0.516731799f, -0.856147328f, + 0.514102744f, -0.857728610f, + 0.511468850f, -0.859301818f, + 0.508830143f, -0.860866939f, + 0.506186645f, -0.862423956f, + 0.503538384f, -0.863972856f, + 0.500885383f, -0.865513624f, + 0.498227667f, -0.867046246f, + 0.495565262f, -0.868570706f, + 0.492898192f, -0.870086991f, + 0.490226483f, -0.871595087f, + 0.487550160f, -0.873094978f, + 0.484869248f, -0.874586652f, + 0.482183772f, -0.876070094f, + 0.479493758f, -0.877545290f, + 0.476799230f, -0.879012226f, + 0.474100215f, -0.880470889f, + 0.471396737f, -0.881921264f, + 0.468688822f, -0.883363339f, + 0.465976496f, -0.884797098f, + 0.463259784f, -0.886222530f, + 0.460538711f, -0.887639620f, + 0.457813304f, -0.889048356f, + 0.455083587f, -0.890448723f, + 0.452349587f, -0.891840709f, + 0.449611330f, -0.893224301f, + 0.446868840f, -0.894599486f, + 0.444122145f, -0.895966250f, + 0.441371269f, -0.897324581f, + 0.438616239f, -0.898674466f, + 0.435857080f, -0.900015892f, + 0.433093819f, -0.901348847f, + 0.430326481f, -0.902673318f, + 0.427555093f, -0.903989293f, + 0.424779681f, -0.905296759f, + 0.422000271f, -0.906595705f, + 0.419216888f, -0.907886116f, + 0.416429560f, -0.909167983f, + 0.413638312f, -0.910441292f, + 0.410843171f, -0.911706032f, + 0.408044163f, -0.912962190f, + 0.405241314f, -0.914209756f, + 0.402434651f, -0.915448716f, + 0.399624200f, -0.916679060f, + 0.396809987f, -0.917900776f, + 0.393992040f, -0.919113852f, + 0.391170384f, -0.920318277f, + 0.388345047f, -0.921514039f, + 0.385516054f, -0.922701128f, + 0.382683432f, -0.923879533f, + 0.379847209f, -0.925049241f, + 0.377007410f, -0.926210242f, + 0.374164063f, -0.927362526f, + 0.371317194f, -0.928506080f, + 0.368466830f, -0.929640896f, + 0.365612998f, -0.930766961f, + 0.362755724f, -0.931884266f, + 0.359895037f, -0.932992799f, + 0.357030961f, -0.934092550f, + 0.354163525f, -0.935183510f, + 0.351292756f, -0.936265667f, + 0.348418680f, -0.937339012f, + 0.345541325f, -0.938403534f, + 0.342660717f, -0.939459224f, + 0.339776884f, -0.940506071f, + 0.336889853f, -0.941544065f, + 0.333999651f, -0.942573198f, + 0.331106306f, -0.943593458f, + 0.328209844f, -0.944604837f, + 0.325310292f, -0.945607325f, + 0.322407679f, -0.946600913f, + 0.319502031f, -0.947585591f, + 0.316593376f, -0.948561350f, + 0.313681740f, -0.949528181f, + 0.310767153f, -0.950486074f, + 0.307849640f, -0.951435021f, + 0.304929230f, -0.952375013f, + 0.302005949f, -0.953306040f, + 0.299079826f, -0.954228095f, + 0.296150888f, -0.955141168f, + 0.293219163f, -0.956045251f, + 0.290284677f, -0.956940336f, + 0.287347460f, -0.957826413f, + 0.284407537f, -0.958703475f, + 0.281464938f, -0.959571513f, + 0.278519689f, -0.960430519f, + 0.275571819f, -0.961280486f, + 0.272621355f, -0.962121404f, + 0.269668326f, -0.962953267f, + 0.266712757f, -0.963776066f, + 0.263754679f, -0.964589793f, + 0.260794118f, -0.965394442f, + 0.257831102f, -0.966190003f, + 0.254865660f, -0.966976471f, + 0.251897818f, -0.967753837f, + 0.248927606f, -0.968522094f, + 0.245955050f, -0.969281235f, + 0.242980180f, -0.970031253f, + 0.240003022f, -0.970772141f, + 0.237023606f, -0.971503891f, + 0.234041959f, -0.972226497f, + 0.231058108f, -0.972939952f, + 0.228072083f, -0.973644250f, + 0.225083911f, -0.974339383f, + 0.222093621f, -0.975025345f, + 0.219101240f, -0.975702130f, + 0.216106797f, -0.976369731f, + 0.213110320f, -0.977028143f, + 0.210111837f, -0.977677358f, + 0.207111376f, -0.978317371f, + 0.204108966f, -0.978948175f, + 0.201104635f, -0.979569766f, + 0.198098411f, -0.980182136f, + 0.195090322f, -0.980785280f, + 0.192080397f, -0.981379193f, + 0.189068664f, -0.981963869f, + 0.186055152f, -0.982539302f, + 0.183039888f, -0.983105487f, + 0.180022901f, -0.983662419f, + 0.177004220f, -0.984210092f, + 0.173983873f, -0.984748502f, + 0.170961889f, -0.985277642f, + 0.167938295f, -0.985797509f, + 0.164913120f, -0.986308097f, + 0.161886394f, -0.986809402f, + 0.158858143f, -0.987301418f, + 0.155828398f, -0.987784142f, + 0.152797185f, -0.988257568f, + 0.149764535f, -0.988721692f, + 0.146730474f, -0.989176510f, + 0.143695033f, -0.989622017f, + 0.140658239f, -0.990058210f, + 0.137620122f, -0.990485084f, + 0.134580709f, -0.990902635f, + 0.131540029f, -0.991310860f, + 0.128498111f, -0.991709754f, + 0.125454983f, -0.992099313f, + 0.122410675f, -0.992479535f, + 0.119365215f, -0.992850414f, + 0.116318631f, -0.993211949f, + 0.113270952f, -0.993564136f, + 0.110222207f, -0.993906970f, + 0.107172425f, -0.994240449f, + 0.104121634f, -0.994564571f, + 0.101069863f, -0.994879331f, + 0.098017140f, -0.995184727f, + 0.094963495f, -0.995480755f, + 0.091908956f, -0.995767414f, + 0.088853553f, -0.996044701f, + 0.085797312f, -0.996312612f, + 0.082740265f, -0.996571146f, + 0.079682438f, -0.996820299f, + 0.076623861f, -0.997060070f, + 0.073564564f, -0.997290457f, + 0.070504573f, -0.997511456f, + 0.067443920f, -0.997723067f, + 0.064382631f, -0.997925286f, + 0.061320736f, -0.998118113f, + 0.058258265f, -0.998301545f, + 0.055195244f, -0.998475581f, + 0.052131705f, -0.998640218f, + 0.049067674f, -0.998795456f, + 0.046003182f, -0.998941293f, + 0.042938257f, -0.999077728f, + 0.039872928f, -0.999204759f, + 0.036807223f, -0.999322385f, + 0.033741172f, -0.999430605f, + 0.030674803f, -0.999529418f, + 0.027608146f, -0.999618822f, + 0.024541229f, -0.999698819f, + 0.021474080f, -0.999769405f, + 0.018406730f, -0.999830582f, + 0.015339206f, -0.999882347f, + 0.012271538f, -0.999924702f, + 0.009203755f, -0.999957645f, + 0.006135885f, -0.999981175f, + 0.003067957f, -0.999995294f +}; + +const float32_t twiddleCoef_rfft_4096[4096] = { + 0.000000000f, 1.000000000f, + 0.001533980f, 0.999998823f, + 0.003067957f, 0.999995294f, + 0.004601926f, 0.999989411f, + 0.006135885f, 0.999981175f, + 0.007669829f, 0.999970586f, + 0.009203755f, 0.999957645f, + 0.010737659f, 0.999942350f, + 0.012271538f, 0.999924702f, + 0.013805389f, 0.999904701f, + 0.015339206f, 0.999882347f, + 0.016872988f, 0.999857641f, + 0.018406730f, 0.999830582f, + 0.019940429f, 0.999801170f, + 0.021474080f, 0.999769405f, + 0.023007681f, 0.999735288f, + 0.024541229f, 0.999698819f, + 0.026074718f, 0.999659997f, + 0.027608146f, 0.999618822f, + 0.029141509f, 0.999575296f, + 0.030674803f, 0.999529418f, + 0.032208025f, 0.999481187f, + 0.033741172f, 0.999430605f, + 0.035274239f, 0.999377670f, + 0.036807223f, 0.999322385f, + 0.038340120f, 0.999264747f, + 0.039872928f, 0.999204759f, + 0.041405641f, 0.999142419f, + 0.042938257f, 0.999077728f, + 0.044470772f, 0.999010686f, + 0.046003182f, 0.998941293f, + 0.047535484f, 0.998869550f, + 0.049067674f, 0.998795456f, + 0.050599749f, 0.998719012f, + 0.052131705f, 0.998640218f, + 0.053663538f, 0.998559074f, + 0.055195244f, 0.998475581f, + 0.056726821f, 0.998389737f, + 0.058258265f, 0.998301545f, + 0.059789571f, 0.998211003f, + 0.061320736f, 0.998118113f, + 0.062851758f, 0.998022874f, + 0.064382631f, 0.997925286f, + 0.065913353f, 0.997825350f, + 0.067443920f, 0.997723067f, + 0.068974328f, 0.997618435f, + 0.070504573f, 0.997511456f, + 0.072034653f, 0.997402130f, + 0.073564564f, 0.997290457f, + 0.075094301f, 0.997176437f, + 0.076623861f, 0.997060070f, + 0.078153242f, 0.996941358f, + 0.079682438f, 0.996820299f, + 0.081211447f, 0.996696895f, + 0.082740265f, 0.996571146f, + 0.084268888f, 0.996443051f, + 0.085797312f, 0.996312612f, + 0.087325535f, 0.996179829f, + 0.088853553f, 0.996044701f, + 0.090381361f, 0.995907229f, + 0.091908956f, 0.995767414f, + 0.093436336f, 0.995625256f, + 0.094963495f, 0.995480755f, + 0.096490431f, 0.995333912f, + 0.098017140f, 0.995184727f, + 0.099543619f, 0.995033199f, + 0.101069863f, 0.994879331f, + 0.102595869f, 0.994723121f, + 0.104121634f, 0.994564571f, + 0.105647154f, 0.994403680f, + 0.107172425f, 0.994240449f, + 0.108697444f, 0.994074879f, + 0.110222207f, 0.993906970f, + 0.111746711f, 0.993736722f, + 0.113270952f, 0.993564136f, + 0.114794927f, 0.993389211f, + 0.116318631f, 0.993211949f, + 0.117842062f, 0.993032350f, + 0.119365215f, 0.992850414f, + 0.120888087f, 0.992666142f, + 0.122410675f, 0.992479535f, + 0.123932975f, 0.992290591f, + 0.125454983f, 0.992099313f, + 0.126976696f, 0.991905700f, + 0.128498111f, 0.991709754f, + 0.130019223f, 0.991511473f, + 0.131540029f, 0.991310860f, + 0.133060525f, 0.991107914f, + 0.134580709f, 0.990902635f, + 0.136100575f, 0.990695025f, + 0.137620122f, 0.990485084f, + 0.139139344f, 0.990272812f, + 0.140658239f, 0.990058210f, + 0.142176804f, 0.989841278f, + 0.143695033f, 0.989622017f, + 0.145212925f, 0.989400428f, + 0.146730474f, 0.989176510f, + 0.148247679f, 0.988950265f, + 0.149764535f, 0.988721692f, + 0.151281038f, 0.988490793f, + 0.152797185f, 0.988257568f, + 0.154312973f, 0.988022017f, + 0.155828398f, 0.987784142f, + 0.157343456f, 0.987543942f, + 0.158858143f, 0.987301418f, + 0.160372457f, 0.987056571f, + 0.161886394f, 0.986809402f, + 0.163399949f, 0.986559910f, + 0.164913120f, 0.986308097f, + 0.166425904f, 0.986053963f, + 0.167938295f, 0.985797509f, + 0.169450291f, 0.985538735f, + 0.170961889f, 0.985277642f, + 0.172473084f, 0.985014231f, + 0.173983873f, 0.984748502f, + 0.175494253f, 0.984480455f, + 0.177004220f, 0.984210092f, + 0.178513771f, 0.983937413f, + 0.180022901f, 0.983662419f, + 0.181531608f, 0.983385110f, + 0.183039888f, 0.983105487f, + 0.184547737f, 0.982823551f, + 0.186055152f, 0.982539302f, + 0.187562129f, 0.982252741f, + 0.189068664f, 0.981963869f, + 0.190574755f, 0.981672686f, + 0.192080397f, 0.981379193f, + 0.193585587f, 0.981083391f, + 0.195090322f, 0.980785280f, + 0.196594598f, 0.980484862f, + 0.198098411f, 0.980182136f, + 0.199601758f, 0.979877104f, + 0.201104635f, 0.979569766f, + 0.202607039f, 0.979260123f, + 0.204108966f, 0.978948175f, + 0.205610413f, 0.978633924f, + 0.207111376f, 0.978317371f, + 0.208611852f, 0.977998515f, + 0.210111837f, 0.977677358f, + 0.211611327f, 0.977353900f, + 0.213110320f, 0.977028143f, + 0.214608811f, 0.976700086f, + 0.216106797f, 0.976369731f, + 0.217604275f, 0.976037079f, + 0.219101240f, 0.975702130f, + 0.220597690f, 0.975364885f, + 0.222093621f, 0.975025345f, + 0.223589029f, 0.974683511f, + 0.225083911f, 0.974339383f, + 0.226578264f, 0.973992962f, + 0.228072083f, 0.973644250f, + 0.229565366f, 0.973293246f, + 0.231058108f, 0.972939952f, + 0.232550307f, 0.972584369f, + 0.234041959f, 0.972226497f, + 0.235533059f, 0.971866337f, + 0.237023606f, 0.971503891f, + 0.238513595f, 0.971139158f, + 0.240003022f, 0.970772141f, + 0.241491885f, 0.970402839f, + 0.242980180f, 0.970031253f, + 0.244467903f, 0.969657385f, + 0.245955050f, 0.969281235f, + 0.247441619f, 0.968902805f, + 0.248927606f, 0.968522094f, + 0.250413007f, 0.968139105f, + 0.251897818f, 0.967753837f, + 0.253382037f, 0.967366292f, + 0.254865660f, 0.966976471f, + 0.256348682f, 0.966584374f, + 0.257831102f, 0.966190003f, + 0.259312915f, 0.965793359f, + 0.260794118f, 0.965394442f, + 0.262274707f, 0.964993253f, + 0.263754679f, 0.964589793f, + 0.265234030f, 0.964184064f, + 0.266712757f, 0.963776066f, + 0.268190857f, 0.963365800f, + 0.269668326f, 0.962953267f, + 0.271145160f, 0.962538468f, + 0.272621355f, 0.962121404f, + 0.274096910f, 0.961702077f, + 0.275571819f, 0.961280486f, + 0.277046080f, 0.960856633f, + 0.278519689f, 0.960430519f, + 0.279992643f, 0.960002146f, + 0.281464938f, 0.959571513f, + 0.282936570f, 0.959138622f, + 0.284407537f, 0.958703475f, + 0.285877835f, 0.958266071f, + 0.287347460f, 0.957826413f, + 0.288816408f, 0.957384501f, + 0.290284677f, 0.956940336f, + 0.291752263f, 0.956493919f, + 0.293219163f, 0.956045251f, + 0.294685372f, 0.955594334f, + 0.296150888f, 0.955141168f, + 0.297615707f, 0.954685755f, + 0.299079826f, 0.954228095f, + 0.300543241f, 0.953768190f, + 0.302005949f, 0.953306040f, + 0.303467947f, 0.952841648f, + 0.304929230f, 0.952375013f, + 0.306389795f, 0.951906137f, + 0.307849640f, 0.951435021f, + 0.309308760f, 0.950961666f, + 0.310767153f, 0.950486074f, + 0.312224814f, 0.950008245f, + 0.313681740f, 0.949528181f, + 0.315137929f, 0.949045882f, + 0.316593376f, 0.948561350f, + 0.318048077f, 0.948074586f, + 0.319502031f, 0.947585591f, + 0.320955232f, 0.947094366f, + 0.322407679f, 0.946600913f, + 0.323859367f, 0.946105232f, + 0.325310292f, 0.945607325f, + 0.326760452f, 0.945107193f, + 0.328209844f, 0.944604837f, + 0.329658463f, 0.944100258f, + 0.331106306f, 0.943593458f, + 0.332553370f, 0.943084437f, + 0.333999651f, 0.942573198f, + 0.335445147f, 0.942059740f, + 0.336889853f, 0.941544065f, + 0.338333767f, 0.941026175f, + 0.339776884f, 0.940506071f, + 0.341219202f, 0.939983753f, + 0.342660717f, 0.939459224f, + 0.344101426f, 0.938932484f, + 0.345541325f, 0.938403534f, + 0.346980411f, 0.937872376f, + 0.348418680f, 0.937339012f, + 0.349856130f, 0.936803442f, + 0.351292756f, 0.936265667f, + 0.352728556f, 0.935725689f, + 0.354163525f, 0.935183510f, + 0.355597662f, 0.934639130f, + 0.357030961f, 0.934092550f, + 0.358463421f, 0.933543773f, + 0.359895037f, 0.932992799f, + 0.361325806f, 0.932439629f, + 0.362755724f, 0.931884266f, + 0.364184790f, 0.931326709f, + 0.365612998f, 0.930766961f, + 0.367040346f, 0.930205023f, + 0.368466830f, 0.929640896f, + 0.369892447f, 0.929074581f, + 0.371317194f, 0.928506080f, + 0.372741067f, 0.927935395f, + 0.374164063f, 0.927362526f, + 0.375586178f, 0.926787474f, + 0.377007410f, 0.926210242f, + 0.378427755f, 0.925630831f, + 0.379847209f, 0.925049241f, + 0.381265769f, 0.924465474f, + 0.382683432f, 0.923879533f, + 0.384100195f, 0.923291417f, + 0.385516054f, 0.922701128f, + 0.386931006f, 0.922108669f, + 0.388345047f, 0.921514039f, + 0.389758174f, 0.920917242f, + 0.391170384f, 0.920318277f, + 0.392581674f, 0.919717146f, + 0.393992040f, 0.919113852f, + 0.395401479f, 0.918508394f, + 0.396809987f, 0.917900776f, + 0.398217562f, 0.917290997f, + 0.399624200f, 0.916679060f, + 0.401029897f, 0.916064966f, + 0.402434651f, 0.915448716f, + 0.403838458f, 0.914830312f, + 0.405241314f, 0.914209756f, + 0.406643217f, 0.913587048f, + 0.408044163f, 0.912962190f, + 0.409444149f, 0.912335185f, + 0.410843171f, 0.911706032f, + 0.412241227f, 0.911074734f, + 0.413638312f, 0.910441292f, + 0.415034424f, 0.909805708f, + 0.416429560f, 0.909167983f, + 0.417823716f, 0.908528119f, + 0.419216888f, 0.907886116f, + 0.420609074f, 0.907241978f, + 0.422000271f, 0.906595705f, + 0.423390474f, 0.905947298f, + 0.424779681f, 0.905296759f, + 0.426167889f, 0.904644091f, + 0.427555093f, 0.903989293f, + 0.428941292f, 0.903332368f, + 0.430326481f, 0.902673318f, + 0.431710658f, 0.902012144f, + 0.433093819f, 0.901348847f, + 0.434475961f, 0.900683429f, + 0.435857080f, 0.900015892f, + 0.437237174f, 0.899346237f, + 0.438616239f, 0.898674466f, + 0.439994271f, 0.898000580f, + 0.441371269f, 0.897324581f, + 0.442747228f, 0.896646470f, + 0.444122145f, 0.895966250f, + 0.445496017f, 0.895283921f, + 0.446868840f, 0.894599486f, + 0.448240612f, 0.893912945f, + 0.449611330f, 0.893224301f, + 0.450980989f, 0.892533555f, + 0.452349587f, 0.891840709f, + 0.453717121f, 0.891145765f, + 0.455083587f, 0.890448723f, + 0.456448982f, 0.889749586f, + 0.457813304f, 0.889048356f, + 0.459176548f, 0.888345033f, + 0.460538711f, 0.887639620f, + 0.461899791f, 0.886932119f, + 0.463259784f, 0.886222530f, + 0.464618686f, 0.885510856f, + 0.465976496f, 0.884797098f, + 0.467333209f, 0.884081259f, + 0.468688822f, 0.883363339f, + 0.470043332f, 0.882643340f, + 0.471396737f, 0.881921264f, + 0.472749032f, 0.881197113f, + 0.474100215f, 0.880470889f, + 0.475450282f, 0.879742593f, + 0.476799230f, 0.879012226f, + 0.478147056f, 0.878279792f, + 0.479493758f, 0.877545290f, + 0.480839331f, 0.876808724f, + 0.482183772f, 0.876070094f, + 0.483527079f, 0.875329403f, + 0.484869248f, 0.874586652f, + 0.486210276f, 0.873841843f, + 0.487550160f, 0.873094978f, + 0.488888897f, 0.872346059f, + 0.490226483f, 0.871595087f, + 0.491562916f, 0.870842063f, + 0.492898192f, 0.870086991f, + 0.494232309f, 0.869329871f, + 0.495565262f, 0.868570706f, + 0.496897049f, 0.867809497f, + 0.498227667f, 0.867046246f, + 0.499557113f, 0.866280954f, + 0.500885383f, 0.865513624f, + 0.502212474f, 0.864744258f, + 0.503538384f, 0.863972856f, + 0.504863109f, 0.863199422f, + 0.506186645f, 0.862423956f, + 0.507508991f, 0.861646461f, + 0.508830143f, 0.860866939f, + 0.510150097f, 0.860085390f, + 0.511468850f, 0.859301818f, + 0.512786401f, 0.858516224f, + 0.514102744f, 0.857728610f, + 0.515417878f, 0.856938977f, + 0.516731799f, 0.856147328f, + 0.518044504f, 0.855353665f, + 0.519355990f, 0.854557988f, + 0.520666254f, 0.853760301f, + 0.521975293f, 0.852960605f, + 0.523283103f, 0.852158902f, + 0.524589683f, 0.851355193f, + 0.525895027f, 0.850549481f, + 0.527199135f, 0.849741768f, + 0.528502002f, 0.848932055f, + 0.529803625f, 0.848120345f, + 0.531104001f, 0.847306639f, + 0.532403128f, 0.846490939f, + 0.533701002f, 0.845673247f, + 0.534997620f, 0.844853565f, + 0.536292979f, 0.844031895f, + 0.537587076f, 0.843208240f, + 0.538879909f, 0.842382600f, + 0.540171473f, 0.841554977f, + 0.541461766f, 0.840725375f, + 0.542750785f, 0.839893794f, + 0.544038527f, 0.839060237f, + 0.545324988f, 0.838224706f, + 0.546610167f, 0.837387202f, + 0.547894059f, 0.836547727f, + 0.549176662f, 0.835706284f, + 0.550457973f, 0.834862875f, + 0.551737988f, 0.834017501f, + 0.553016706f, 0.833170165f, + 0.554294121f, 0.832320868f, + 0.555570233f, 0.831469612f, + 0.556845037f, 0.830616400f, + 0.558118531f, 0.829761234f, + 0.559390712f, 0.828904115f, + 0.560661576f, 0.828045045f, + 0.561931121f, 0.827184027f, + 0.563199344f, 0.826321063f, + 0.564466242f, 0.825456154f, + 0.565731811f, 0.824589303f, + 0.566996049f, 0.823720511f, + 0.568258953f, 0.822849781f, + 0.569520519f, 0.821977115f, + 0.570780746f, 0.821102515f, + 0.572039629f, 0.820225983f, + 0.573297167f, 0.819347520f, + 0.574553355f, 0.818467130f, + 0.575808191f, 0.817584813f, + 0.577061673f, 0.816700573f, + 0.578313796f, 0.815814411f, + 0.579564559f, 0.814926329f, + 0.580813958f, 0.814036330f, + 0.582061990f, 0.813144415f, + 0.583308653f, 0.812250587f, + 0.584553943f, 0.811354847f, + 0.585797857f, 0.810457198f, + 0.587040394f, 0.809557642f, + 0.588281548f, 0.808656182f, + 0.589521319f, 0.807752818f, + 0.590759702f, 0.806847554f, + 0.591996695f, 0.805940391f, + 0.593232295f, 0.805031331f, + 0.594466499f, 0.804120377f, + 0.595699304f, 0.803207531f, + 0.596930708f, 0.802292796f, + 0.598160707f, 0.801376172f, + 0.599389298f, 0.800457662f, + 0.600616479f, 0.799537269f, + 0.601842247f, 0.798614995f, + 0.603066599f, 0.797690841f, + 0.604289531f, 0.796764810f, + 0.605511041f, 0.795836905f, + 0.606731127f, 0.794907126f, + 0.607949785f, 0.793975478f, + 0.609167012f, 0.793041960f, + 0.610382806f, 0.792106577f, + 0.611597164f, 0.791169330f, + 0.612810082f, 0.790230221f, + 0.614021559f, 0.789289253f, + 0.615231591f, 0.788346428f, + 0.616440175f, 0.787401747f, + 0.617647308f, 0.786455214f, + 0.618852988f, 0.785506830f, + 0.620057212f, 0.784556597f, + 0.621259977f, 0.783604519f, + 0.622461279f, 0.782650596f, + 0.623661118f, 0.781694832f, + 0.624859488f, 0.780737229f, + 0.626056388f, 0.779777788f, + 0.627251815f, 0.778816512f, + 0.628445767f, 0.777853404f, + 0.629638239f, 0.776888466f, + 0.630829230f, 0.775921699f, + 0.632018736f, 0.774953107f, + 0.633206755f, 0.773982691f, + 0.634393284f, 0.773010453f, + 0.635578320f, 0.772036397f, + 0.636761861f, 0.771060524f, + 0.637943904f, 0.770082837f, + 0.639124445f, 0.769103338f, + 0.640303482f, 0.768122029f, + 0.641481013f, 0.767138912f, + 0.642657034f, 0.766153990f, + 0.643831543f, 0.765167266f, + 0.645004537f, 0.764178741f, + 0.646176013f, 0.763188417f, + 0.647345969f, 0.762196298f, + 0.648514401f, 0.761202385f, + 0.649681307f, 0.760206682f, + 0.650846685f, 0.759209189f, + 0.652010531f, 0.758209910f, + 0.653172843f, 0.757208847f, + 0.654333618f, 0.756206001f, + 0.655492853f, 0.755201377f, + 0.656650546f, 0.754194975f, + 0.657806693f, 0.753186799f, + 0.658961293f, 0.752176850f, + 0.660114342f, 0.751165132f, + 0.661265838f, 0.750151646f, + 0.662415778f, 0.749136395f, + 0.663564159f, 0.748119380f, + 0.664710978f, 0.747100606f, + 0.665856234f, 0.746080074f, + 0.666999922f, 0.745057785f, + 0.668142041f, 0.744033744f, + 0.669282588f, 0.743007952f, + 0.670421560f, 0.741980412f, + 0.671558955f, 0.740951125f, + 0.672694769f, 0.739920095f, + 0.673829000f, 0.738887324f, + 0.674961646f, 0.737852815f, + 0.676092704f, 0.736816569f, + 0.677222170f, 0.735778589f, + 0.678350043f, 0.734738878f, + 0.679476320f, 0.733697438f, + 0.680600998f, 0.732654272f, + 0.681724074f, 0.731609381f, + 0.682845546f, 0.730562769f, + 0.683965412f, 0.729514438f, + 0.685083668f, 0.728464390f, + 0.686200312f, 0.727412629f, + 0.687315341f, 0.726359155f, + 0.688428753f, 0.725303972f, + 0.689540545f, 0.724247083f, + 0.690650714f, 0.723188489f, + 0.691759258f, 0.722128194f, + 0.692866175f, 0.721066199f, + 0.693971461f, 0.720002508f, + 0.695075114f, 0.718937122f, + 0.696177131f, 0.717870045f, + 0.697277511f, 0.716801279f, + 0.698376249f, 0.715730825f, + 0.699473345f, 0.714658688f, + 0.700568794f, 0.713584869f, + 0.701662595f, 0.712509371f, + 0.702754744f, 0.711432196f, + 0.703845241f, 0.710353347f, + 0.704934080f, 0.709272826f, + 0.706021261f, 0.708190637f, + 0.707106781f, 0.707106781f, + 0.708190637f, 0.706021261f, + 0.709272826f, 0.704934080f, + 0.710353347f, 0.703845241f, + 0.711432196f, 0.702754744f, + 0.712509371f, 0.701662595f, + 0.713584869f, 0.700568794f, + 0.714658688f, 0.699473345f, + 0.715730825f, 0.698376249f, + 0.716801279f, 0.697277511f, + 0.717870045f, 0.696177131f, + 0.718937122f, 0.695075114f, + 0.720002508f, 0.693971461f, + 0.721066199f, 0.692866175f, + 0.722128194f, 0.691759258f, + 0.723188489f, 0.690650714f, + 0.724247083f, 0.689540545f, + 0.725303972f, 0.688428753f, + 0.726359155f, 0.687315341f, + 0.727412629f, 0.686200312f, + 0.728464390f, 0.685083668f, + 0.729514438f, 0.683965412f, + 0.730562769f, 0.682845546f, + 0.731609381f, 0.681724074f, + 0.732654272f, 0.680600998f, + 0.733697438f, 0.679476320f, + 0.734738878f, 0.678350043f, + 0.735778589f, 0.677222170f, + 0.736816569f, 0.676092704f, + 0.737852815f, 0.674961646f, + 0.738887324f, 0.673829000f, + 0.739920095f, 0.672694769f, + 0.740951125f, 0.671558955f, + 0.741980412f, 0.670421560f, + 0.743007952f, 0.669282588f, + 0.744033744f, 0.668142041f, + 0.745057785f, 0.666999922f, + 0.746080074f, 0.665856234f, + 0.747100606f, 0.664710978f, + 0.748119380f, 0.663564159f, + 0.749136395f, 0.662415778f, + 0.750151646f, 0.661265838f, + 0.751165132f, 0.660114342f, + 0.752176850f, 0.658961293f, + 0.753186799f, 0.657806693f, + 0.754194975f, 0.656650546f, + 0.755201377f, 0.655492853f, + 0.756206001f, 0.654333618f, + 0.757208847f, 0.653172843f, + 0.758209910f, 0.652010531f, + 0.759209189f, 0.650846685f, + 0.760206682f, 0.649681307f, + 0.761202385f, 0.648514401f, + 0.762196298f, 0.647345969f, + 0.763188417f, 0.646176013f, + 0.764178741f, 0.645004537f, + 0.765167266f, 0.643831543f, + 0.766153990f, 0.642657034f, + 0.767138912f, 0.641481013f, + 0.768122029f, 0.640303482f, + 0.769103338f, 0.639124445f, + 0.770082837f, 0.637943904f, + 0.771060524f, 0.636761861f, + 0.772036397f, 0.635578320f, + 0.773010453f, 0.634393284f, + 0.773982691f, 0.633206755f, + 0.774953107f, 0.632018736f, + 0.775921699f, 0.630829230f, + 0.776888466f, 0.629638239f, + 0.777853404f, 0.628445767f, + 0.778816512f, 0.627251815f, + 0.779777788f, 0.626056388f, + 0.780737229f, 0.624859488f, + 0.781694832f, 0.623661118f, + 0.782650596f, 0.622461279f, + 0.783604519f, 0.621259977f, + 0.784556597f, 0.620057212f, + 0.785506830f, 0.618852988f, + 0.786455214f, 0.617647308f, + 0.787401747f, 0.616440175f, + 0.788346428f, 0.615231591f, + 0.789289253f, 0.614021559f, + 0.790230221f, 0.612810082f, + 0.791169330f, 0.611597164f, + 0.792106577f, 0.610382806f, + 0.793041960f, 0.609167012f, + 0.793975478f, 0.607949785f, + 0.794907126f, 0.606731127f, + 0.795836905f, 0.605511041f, + 0.796764810f, 0.604289531f, + 0.797690841f, 0.603066599f, + 0.798614995f, 0.601842247f, + 0.799537269f, 0.600616479f, + 0.800457662f, 0.599389298f, + 0.801376172f, 0.598160707f, + 0.802292796f, 0.596930708f, + 0.803207531f, 0.595699304f, + 0.804120377f, 0.594466499f, + 0.805031331f, 0.593232295f, + 0.805940391f, 0.591996695f, + 0.806847554f, 0.590759702f, + 0.807752818f, 0.589521319f, + 0.808656182f, 0.588281548f, + 0.809557642f, 0.587040394f, + 0.810457198f, 0.585797857f, + 0.811354847f, 0.584553943f, + 0.812250587f, 0.583308653f, + 0.813144415f, 0.582061990f, + 0.814036330f, 0.580813958f, + 0.814926329f, 0.579564559f, + 0.815814411f, 0.578313796f, + 0.816700573f, 0.577061673f, + 0.817584813f, 0.575808191f, + 0.818467130f, 0.574553355f, + 0.819347520f, 0.573297167f, + 0.820225983f, 0.572039629f, + 0.821102515f, 0.570780746f, + 0.821977115f, 0.569520519f, + 0.822849781f, 0.568258953f, + 0.823720511f, 0.566996049f, + 0.824589303f, 0.565731811f, + 0.825456154f, 0.564466242f, + 0.826321063f, 0.563199344f, + 0.827184027f, 0.561931121f, + 0.828045045f, 0.560661576f, + 0.828904115f, 0.559390712f, + 0.829761234f, 0.558118531f, + 0.830616400f, 0.556845037f, + 0.831469612f, 0.555570233f, + 0.832320868f, 0.554294121f, + 0.833170165f, 0.553016706f, + 0.834017501f, 0.551737988f, + 0.834862875f, 0.550457973f, + 0.835706284f, 0.549176662f, + 0.836547727f, 0.547894059f, + 0.837387202f, 0.546610167f, + 0.838224706f, 0.545324988f, + 0.839060237f, 0.544038527f, + 0.839893794f, 0.542750785f, + 0.840725375f, 0.541461766f, + 0.841554977f, 0.540171473f, + 0.842382600f, 0.538879909f, + 0.843208240f, 0.537587076f, + 0.844031895f, 0.536292979f, + 0.844853565f, 0.534997620f, + 0.845673247f, 0.533701002f, + 0.846490939f, 0.532403128f, + 0.847306639f, 0.531104001f, + 0.848120345f, 0.529803625f, + 0.848932055f, 0.528502002f, + 0.849741768f, 0.527199135f, + 0.850549481f, 0.525895027f, + 0.851355193f, 0.524589683f, + 0.852158902f, 0.523283103f, + 0.852960605f, 0.521975293f, + 0.853760301f, 0.520666254f, + 0.854557988f, 0.519355990f, + 0.855353665f, 0.518044504f, + 0.856147328f, 0.516731799f, + 0.856938977f, 0.515417878f, + 0.857728610f, 0.514102744f, + 0.858516224f, 0.512786401f, + 0.859301818f, 0.511468850f, + 0.860085390f, 0.510150097f, + 0.860866939f, 0.508830143f, + 0.861646461f, 0.507508991f, + 0.862423956f, 0.506186645f, + 0.863199422f, 0.504863109f, + 0.863972856f, 0.503538384f, + 0.864744258f, 0.502212474f, + 0.865513624f, 0.500885383f, + 0.866280954f, 0.499557113f, + 0.867046246f, 0.498227667f, + 0.867809497f, 0.496897049f, + 0.868570706f, 0.495565262f, + 0.869329871f, 0.494232309f, + 0.870086991f, 0.492898192f, + 0.870842063f, 0.491562916f, + 0.871595087f, 0.490226483f, + 0.872346059f, 0.488888897f, + 0.873094978f, 0.487550160f, + 0.873841843f, 0.486210276f, + 0.874586652f, 0.484869248f, + 0.875329403f, 0.483527079f, + 0.876070094f, 0.482183772f, + 0.876808724f, 0.480839331f, + 0.877545290f, 0.479493758f, + 0.878279792f, 0.478147056f, + 0.879012226f, 0.476799230f, + 0.879742593f, 0.475450282f, + 0.880470889f, 0.474100215f, + 0.881197113f, 0.472749032f, + 0.881921264f, 0.471396737f, + 0.882643340f, 0.470043332f, + 0.883363339f, 0.468688822f, + 0.884081259f, 0.467333209f, + 0.884797098f, 0.465976496f, + 0.885510856f, 0.464618686f, + 0.886222530f, 0.463259784f, + 0.886932119f, 0.461899791f, + 0.887639620f, 0.460538711f, + 0.888345033f, 0.459176548f, + 0.889048356f, 0.457813304f, + 0.889749586f, 0.456448982f, + 0.890448723f, 0.455083587f, + 0.891145765f, 0.453717121f, + 0.891840709f, 0.452349587f, + 0.892533555f, 0.450980989f, + 0.893224301f, 0.449611330f, + 0.893912945f, 0.448240612f, + 0.894599486f, 0.446868840f, + 0.895283921f, 0.445496017f, + 0.895966250f, 0.444122145f, + 0.896646470f, 0.442747228f, + 0.897324581f, 0.441371269f, + 0.898000580f, 0.439994271f, + 0.898674466f, 0.438616239f, + 0.899346237f, 0.437237174f, + 0.900015892f, 0.435857080f, + 0.900683429f, 0.434475961f, + 0.901348847f, 0.433093819f, + 0.902012144f, 0.431710658f, + 0.902673318f, 0.430326481f, + 0.903332368f, 0.428941292f, + 0.903989293f, 0.427555093f, + 0.904644091f, 0.426167889f, + 0.905296759f, 0.424779681f, + 0.905947298f, 0.423390474f, + 0.906595705f, 0.422000271f, + 0.907241978f, 0.420609074f, + 0.907886116f, 0.419216888f, + 0.908528119f, 0.417823716f, + 0.909167983f, 0.416429560f, + 0.909805708f, 0.415034424f, + 0.910441292f, 0.413638312f, + 0.911074734f, 0.412241227f, + 0.911706032f, 0.410843171f, + 0.912335185f, 0.409444149f, + 0.912962190f, 0.408044163f, + 0.913587048f, 0.406643217f, + 0.914209756f, 0.405241314f, + 0.914830312f, 0.403838458f, + 0.915448716f, 0.402434651f, + 0.916064966f, 0.401029897f, + 0.916679060f, 0.399624200f, + 0.917290997f, 0.398217562f, + 0.917900776f, 0.396809987f, + 0.918508394f, 0.395401479f, + 0.919113852f, 0.393992040f, + 0.919717146f, 0.392581674f, + 0.920318277f, 0.391170384f, + 0.920917242f, 0.389758174f, + 0.921514039f, 0.388345047f, + 0.922108669f, 0.386931006f, + 0.922701128f, 0.385516054f, + 0.923291417f, 0.384100195f, + 0.923879533f, 0.382683432f, + 0.924465474f, 0.381265769f, + 0.925049241f, 0.379847209f, + 0.925630831f, 0.378427755f, + 0.926210242f, 0.377007410f, + 0.926787474f, 0.375586178f, + 0.927362526f, 0.374164063f, + 0.927935395f, 0.372741067f, + 0.928506080f, 0.371317194f, + 0.929074581f, 0.369892447f, + 0.929640896f, 0.368466830f, + 0.930205023f, 0.367040346f, + 0.930766961f, 0.365612998f, + 0.931326709f, 0.364184790f, + 0.931884266f, 0.362755724f, + 0.932439629f, 0.361325806f, + 0.932992799f, 0.359895037f, + 0.933543773f, 0.358463421f, + 0.934092550f, 0.357030961f, + 0.934639130f, 0.355597662f, + 0.935183510f, 0.354163525f, + 0.935725689f, 0.352728556f, + 0.936265667f, 0.351292756f, + 0.936803442f, 0.349856130f, + 0.937339012f, 0.348418680f, + 0.937872376f, 0.346980411f, + 0.938403534f, 0.345541325f, + 0.938932484f, 0.344101426f, + 0.939459224f, 0.342660717f, + 0.939983753f, 0.341219202f, + 0.940506071f, 0.339776884f, + 0.941026175f, 0.338333767f, + 0.941544065f, 0.336889853f, + 0.942059740f, 0.335445147f, + 0.942573198f, 0.333999651f, + 0.943084437f, 0.332553370f, + 0.943593458f, 0.331106306f, + 0.944100258f, 0.329658463f, + 0.944604837f, 0.328209844f, + 0.945107193f, 0.326760452f, + 0.945607325f, 0.325310292f, + 0.946105232f, 0.323859367f, + 0.946600913f, 0.322407679f, + 0.947094366f, 0.320955232f, + 0.947585591f, 0.319502031f, + 0.948074586f, 0.318048077f, + 0.948561350f, 0.316593376f, + 0.949045882f, 0.315137929f, + 0.949528181f, 0.313681740f, + 0.950008245f, 0.312224814f, + 0.950486074f, 0.310767153f, + 0.950961666f, 0.309308760f, + 0.951435021f, 0.307849640f, + 0.951906137f, 0.306389795f, + 0.952375013f, 0.304929230f, + 0.952841648f, 0.303467947f, + 0.953306040f, 0.302005949f, + 0.953768190f, 0.300543241f, + 0.954228095f, 0.299079826f, + 0.954685755f, 0.297615707f, + 0.955141168f, 0.296150888f, + 0.955594334f, 0.294685372f, + 0.956045251f, 0.293219163f, + 0.956493919f, 0.291752263f, + 0.956940336f, 0.290284677f, + 0.957384501f, 0.288816408f, + 0.957826413f, 0.287347460f, + 0.958266071f, 0.285877835f, + 0.958703475f, 0.284407537f, + 0.959138622f, 0.282936570f, + 0.959571513f, 0.281464938f, + 0.960002146f, 0.279992643f, + 0.960430519f, 0.278519689f, + 0.960856633f, 0.277046080f, + 0.961280486f, 0.275571819f, + 0.961702077f, 0.274096910f, + 0.962121404f, 0.272621355f, + 0.962538468f, 0.271145160f, + 0.962953267f, 0.269668326f, + 0.963365800f, 0.268190857f, + 0.963776066f, 0.266712757f, + 0.964184064f, 0.265234030f, + 0.964589793f, 0.263754679f, + 0.964993253f, 0.262274707f, + 0.965394442f, 0.260794118f, + 0.965793359f, 0.259312915f, + 0.966190003f, 0.257831102f, + 0.966584374f, 0.256348682f, + 0.966976471f, 0.254865660f, + 0.967366292f, 0.253382037f, + 0.967753837f, 0.251897818f, + 0.968139105f, 0.250413007f, + 0.968522094f, 0.248927606f, + 0.968902805f, 0.247441619f, + 0.969281235f, 0.245955050f, + 0.969657385f, 0.244467903f, + 0.970031253f, 0.242980180f, + 0.970402839f, 0.241491885f, + 0.970772141f, 0.240003022f, + 0.971139158f, 0.238513595f, + 0.971503891f, 0.237023606f, + 0.971866337f, 0.235533059f, + 0.972226497f, 0.234041959f, + 0.972584369f, 0.232550307f, + 0.972939952f, 0.231058108f, + 0.973293246f, 0.229565366f, + 0.973644250f, 0.228072083f, + 0.973992962f, 0.226578264f, + 0.974339383f, 0.225083911f, + 0.974683511f, 0.223589029f, + 0.975025345f, 0.222093621f, + 0.975364885f, 0.220597690f, + 0.975702130f, 0.219101240f, + 0.976037079f, 0.217604275f, + 0.976369731f, 0.216106797f, + 0.976700086f, 0.214608811f, + 0.977028143f, 0.213110320f, + 0.977353900f, 0.211611327f, + 0.977677358f, 0.210111837f, + 0.977998515f, 0.208611852f, + 0.978317371f, 0.207111376f, + 0.978633924f, 0.205610413f, + 0.978948175f, 0.204108966f, + 0.979260123f, 0.202607039f, + 0.979569766f, 0.201104635f, + 0.979877104f, 0.199601758f, + 0.980182136f, 0.198098411f, + 0.980484862f, 0.196594598f, + 0.980785280f, 0.195090322f, + 0.981083391f, 0.193585587f, + 0.981379193f, 0.192080397f, + 0.981672686f, 0.190574755f, + 0.981963869f, 0.189068664f, + 0.982252741f, 0.187562129f, + 0.982539302f, 0.186055152f, + 0.982823551f, 0.184547737f, + 0.983105487f, 0.183039888f, + 0.983385110f, 0.181531608f, + 0.983662419f, 0.180022901f, + 0.983937413f, 0.178513771f, + 0.984210092f, 0.177004220f, + 0.984480455f, 0.175494253f, + 0.984748502f, 0.173983873f, + 0.985014231f, 0.172473084f, + 0.985277642f, 0.170961889f, + 0.985538735f, 0.169450291f, + 0.985797509f, 0.167938295f, + 0.986053963f, 0.166425904f, + 0.986308097f, 0.164913120f, + 0.986559910f, 0.163399949f, + 0.986809402f, 0.161886394f, + 0.987056571f, 0.160372457f, + 0.987301418f, 0.158858143f, + 0.987543942f, 0.157343456f, + 0.987784142f, 0.155828398f, + 0.988022017f, 0.154312973f, + 0.988257568f, 0.152797185f, + 0.988490793f, 0.151281038f, + 0.988721692f, 0.149764535f, + 0.988950265f, 0.148247679f, + 0.989176510f, 0.146730474f, + 0.989400428f, 0.145212925f, + 0.989622017f, 0.143695033f, + 0.989841278f, 0.142176804f, + 0.990058210f, 0.140658239f, + 0.990272812f, 0.139139344f, + 0.990485084f, 0.137620122f, + 0.990695025f, 0.136100575f, + 0.990902635f, 0.134580709f, + 0.991107914f, 0.133060525f, + 0.991310860f, 0.131540029f, + 0.991511473f, 0.130019223f, + 0.991709754f, 0.128498111f, + 0.991905700f, 0.126976696f, + 0.992099313f, 0.125454983f, + 0.992290591f, 0.123932975f, + 0.992479535f, 0.122410675f, + 0.992666142f, 0.120888087f, + 0.992850414f, 0.119365215f, + 0.993032350f, 0.117842062f, + 0.993211949f, 0.116318631f, + 0.993389211f, 0.114794927f, + 0.993564136f, 0.113270952f, + 0.993736722f, 0.111746711f, + 0.993906970f, 0.110222207f, + 0.994074879f, 0.108697444f, + 0.994240449f, 0.107172425f, + 0.994403680f, 0.105647154f, + 0.994564571f, 0.104121634f, + 0.994723121f, 0.102595869f, + 0.994879331f, 0.101069863f, + 0.995033199f, 0.099543619f, + 0.995184727f, 0.098017140f, + 0.995333912f, 0.096490431f, + 0.995480755f, 0.094963495f, + 0.995625256f, 0.093436336f, + 0.995767414f, 0.091908956f, + 0.995907229f, 0.090381361f, + 0.996044701f, 0.088853553f, + 0.996179829f, 0.087325535f, + 0.996312612f, 0.085797312f, + 0.996443051f, 0.084268888f, + 0.996571146f, 0.082740265f, + 0.996696895f, 0.081211447f, + 0.996820299f, 0.079682438f, + 0.996941358f, 0.078153242f, + 0.997060070f, 0.076623861f, + 0.997176437f, 0.075094301f, + 0.997290457f, 0.073564564f, + 0.997402130f, 0.072034653f, + 0.997511456f, 0.070504573f, + 0.997618435f, 0.068974328f, + 0.997723067f, 0.067443920f, + 0.997825350f, 0.065913353f, + 0.997925286f, 0.064382631f, + 0.998022874f, 0.062851758f, + 0.998118113f, 0.061320736f, + 0.998211003f, 0.059789571f, + 0.998301545f, 0.058258265f, + 0.998389737f, 0.056726821f, + 0.998475581f, 0.055195244f, + 0.998559074f, 0.053663538f, + 0.998640218f, 0.052131705f, + 0.998719012f, 0.050599749f, + 0.998795456f, 0.049067674f, + 0.998869550f, 0.047535484f, + 0.998941293f, 0.046003182f, + 0.999010686f, 0.044470772f, + 0.999077728f, 0.042938257f, + 0.999142419f, 0.041405641f, + 0.999204759f, 0.039872928f, + 0.999264747f, 0.038340120f, + 0.999322385f, 0.036807223f, + 0.999377670f, 0.035274239f, + 0.999430605f, 0.033741172f, + 0.999481187f, 0.032208025f, + 0.999529418f, 0.030674803f, + 0.999575296f, 0.029141509f, + 0.999618822f, 0.027608146f, + 0.999659997f, 0.026074718f, + 0.999698819f, 0.024541229f, + 0.999735288f, 0.023007681f, + 0.999769405f, 0.021474080f, + 0.999801170f, 0.019940429f, + 0.999830582f, 0.018406730f, + 0.999857641f, 0.016872988f, + 0.999882347f, 0.015339206f, + 0.999904701f, 0.013805389f, + 0.999924702f, 0.012271538f, + 0.999942350f, 0.010737659f, + 0.999957645f, 0.009203755f, + 0.999970586f, 0.007669829f, + 0.999981175f, 0.006135885f, + 0.999989411f, 0.004601926f, + 0.999995294f, 0.003067957f, + 0.999998823f, 0.001533980f, + 1.000000000f, 0.000000000f, + 0.999998823f, -0.001533980f, + 0.999995294f, -0.003067957f, + 0.999989411f, -0.004601926f, + 0.999981175f, -0.006135885f, + 0.999970586f, -0.007669829f, + 0.999957645f, -0.009203755f, + 0.999942350f, -0.010737659f, + 0.999924702f, -0.012271538f, + 0.999904701f, -0.013805389f, + 0.999882347f, -0.015339206f, + 0.999857641f, -0.016872988f, + 0.999830582f, -0.018406730f, + 0.999801170f, -0.019940429f, + 0.999769405f, -0.021474080f, + 0.999735288f, -0.023007681f, + 0.999698819f, -0.024541229f, + 0.999659997f, -0.026074718f, + 0.999618822f, -0.027608146f, + 0.999575296f, -0.029141509f, + 0.999529418f, -0.030674803f, + 0.999481187f, -0.032208025f, + 0.999430605f, -0.033741172f, + 0.999377670f, -0.035274239f, + 0.999322385f, -0.036807223f, + 0.999264747f, -0.038340120f, + 0.999204759f, -0.039872928f, + 0.999142419f, -0.041405641f, + 0.999077728f, -0.042938257f, + 0.999010686f, -0.044470772f, + 0.998941293f, -0.046003182f, + 0.998869550f, -0.047535484f, + 0.998795456f, -0.049067674f, + 0.998719012f, -0.050599749f, + 0.998640218f, -0.052131705f, + 0.998559074f, -0.053663538f, + 0.998475581f, -0.055195244f, + 0.998389737f, -0.056726821f, + 0.998301545f, -0.058258265f, + 0.998211003f, -0.059789571f, + 0.998118113f, -0.061320736f, + 0.998022874f, -0.062851758f, + 0.997925286f, -0.064382631f, + 0.997825350f, -0.065913353f, + 0.997723067f, -0.067443920f, + 0.997618435f, -0.068974328f, + 0.997511456f, -0.070504573f, + 0.997402130f, -0.072034653f, + 0.997290457f, -0.073564564f, + 0.997176437f, -0.075094301f, + 0.997060070f, -0.076623861f, + 0.996941358f, -0.078153242f, + 0.996820299f, -0.079682438f, + 0.996696895f, -0.081211447f, + 0.996571146f, -0.082740265f, + 0.996443051f, -0.084268888f, + 0.996312612f, -0.085797312f, + 0.996179829f, -0.087325535f, + 0.996044701f, -0.088853553f, + 0.995907229f, -0.090381361f, + 0.995767414f, -0.091908956f, + 0.995625256f, -0.093436336f, + 0.995480755f, -0.094963495f, + 0.995333912f, -0.096490431f, + 0.995184727f, -0.098017140f, + 0.995033199f, -0.099543619f, + 0.994879331f, -0.101069863f, + 0.994723121f, -0.102595869f, + 0.994564571f, -0.104121634f, + 0.994403680f, -0.105647154f, + 0.994240449f, -0.107172425f, + 0.994074879f, -0.108697444f, + 0.993906970f, -0.110222207f, + 0.993736722f, -0.111746711f, + 0.993564136f, -0.113270952f, + 0.993389211f, -0.114794927f, + 0.993211949f, -0.116318631f, + 0.993032350f, -0.117842062f, + 0.992850414f, -0.119365215f, + 0.992666142f, -0.120888087f, + 0.992479535f, -0.122410675f, + 0.992290591f, -0.123932975f, + 0.992099313f, -0.125454983f, + 0.991905700f, -0.126976696f, + 0.991709754f, -0.128498111f, + 0.991511473f, -0.130019223f, + 0.991310860f, -0.131540029f, + 0.991107914f, -0.133060525f, + 0.990902635f, -0.134580709f, + 0.990695025f, -0.136100575f, + 0.990485084f, -0.137620122f, + 0.990272812f, -0.139139344f, + 0.990058210f, -0.140658239f, + 0.989841278f, -0.142176804f, + 0.989622017f, -0.143695033f, + 0.989400428f, -0.145212925f, + 0.989176510f, -0.146730474f, + 0.988950265f, -0.148247679f, + 0.988721692f, -0.149764535f, + 0.988490793f, -0.151281038f, + 0.988257568f, -0.152797185f, + 0.988022017f, -0.154312973f, + 0.987784142f, -0.155828398f, + 0.987543942f, -0.157343456f, + 0.987301418f, -0.158858143f, + 0.987056571f, -0.160372457f, + 0.986809402f, -0.161886394f, + 0.986559910f, -0.163399949f, + 0.986308097f, -0.164913120f, + 0.986053963f, -0.166425904f, + 0.985797509f, -0.167938295f, + 0.985538735f, -0.169450291f, + 0.985277642f, -0.170961889f, + 0.985014231f, -0.172473084f, + 0.984748502f, -0.173983873f, + 0.984480455f, -0.175494253f, + 0.984210092f, -0.177004220f, + 0.983937413f, -0.178513771f, + 0.983662419f, -0.180022901f, + 0.983385110f, -0.181531608f, + 0.983105487f, -0.183039888f, + 0.982823551f, -0.184547737f, + 0.982539302f, -0.186055152f, + 0.982252741f, -0.187562129f, + 0.981963869f, -0.189068664f, + 0.981672686f, -0.190574755f, + 0.981379193f, -0.192080397f, + 0.981083391f, -0.193585587f, + 0.980785280f, -0.195090322f, + 0.980484862f, -0.196594598f, + 0.980182136f, -0.198098411f, + 0.979877104f, -0.199601758f, + 0.979569766f, -0.201104635f, + 0.979260123f, -0.202607039f, + 0.978948175f, -0.204108966f, + 0.978633924f, -0.205610413f, + 0.978317371f, -0.207111376f, + 0.977998515f, -0.208611852f, + 0.977677358f, -0.210111837f, + 0.977353900f, -0.211611327f, + 0.977028143f, -0.213110320f, + 0.976700086f, -0.214608811f, + 0.976369731f, -0.216106797f, + 0.976037079f, -0.217604275f, + 0.975702130f, -0.219101240f, + 0.975364885f, -0.220597690f, + 0.975025345f, -0.222093621f, + 0.974683511f, -0.223589029f, + 0.974339383f, -0.225083911f, + 0.973992962f, -0.226578264f, + 0.973644250f, -0.228072083f, + 0.973293246f, -0.229565366f, + 0.972939952f, -0.231058108f, + 0.972584369f, -0.232550307f, + 0.972226497f, -0.234041959f, + 0.971866337f, -0.235533059f, + 0.971503891f, -0.237023606f, + 0.971139158f, -0.238513595f, + 0.970772141f, -0.240003022f, + 0.970402839f, -0.241491885f, + 0.970031253f, -0.242980180f, + 0.969657385f, -0.244467903f, + 0.969281235f, -0.245955050f, + 0.968902805f, -0.247441619f, + 0.968522094f, -0.248927606f, + 0.968139105f, -0.250413007f, + 0.967753837f, -0.251897818f, + 0.967366292f, -0.253382037f, + 0.966976471f, -0.254865660f, + 0.966584374f, -0.256348682f, + 0.966190003f, -0.257831102f, + 0.965793359f, -0.259312915f, + 0.965394442f, -0.260794118f, + 0.964993253f, -0.262274707f, + 0.964589793f, -0.263754679f, + 0.964184064f, -0.265234030f, + 0.963776066f, -0.266712757f, + 0.963365800f, -0.268190857f, + 0.962953267f, -0.269668326f, + 0.962538468f, -0.271145160f, + 0.962121404f, -0.272621355f, + 0.961702077f, -0.274096910f, + 0.961280486f, -0.275571819f, + 0.960856633f, -0.277046080f, + 0.960430519f, -0.278519689f, + 0.960002146f, -0.279992643f, + 0.959571513f, -0.281464938f, + 0.959138622f, -0.282936570f, + 0.958703475f, -0.284407537f, + 0.958266071f, -0.285877835f, + 0.957826413f, -0.287347460f, + 0.957384501f, -0.288816408f, + 0.956940336f, -0.290284677f, + 0.956493919f, -0.291752263f, + 0.956045251f, -0.293219163f, + 0.955594334f, -0.294685372f, + 0.955141168f, -0.296150888f, + 0.954685755f, -0.297615707f, + 0.954228095f, -0.299079826f, + 0.953768190f, -0.300543241f, + 0.953306040f, -0.302005949f, + 0.952841648f, -0.303467947f, + 0.952375013f, -0.304929230f, + 0.951906137f, -0.306389795f, + 0.951435021f, -0.307849640f, + 0.950961666f, -0.309308760f, + 0.950486074f, -0.310767153f, + 0.950008245f, -0.312224814f, + 0.949528181f, -0.313681740f, + 0.949045882f, -0.315137929f, + 0.948561350f, -0.316593376f, + 0.948074586f, -0.318048077f, + 0.947585591f, -0.319502031f, + 0.947094366f, -0.320955232f, + 0.946600913f, -0.322407679f, + 0.946105232f, -0.323859367f, + 0.945607325f, -0.325310292f, + 0.945107193f, -0.326760452f, + 0.944604837f, -0.328209844f, + 0.944100258f, -0.329658463f, + 0.943593458f, -0.331106306f, + 0.943084437f, -0.332553370f, + 0.942573198f, -0.333999651f, + 0.942059740f, -0.335445147f, + 0.941544065f, -0.336889853f, + 0.941026175f, -0.338333767f, + 0.940506071f, -0.339776884f, + 0.939983753f, -0.341219202f, + 0.939459224f, -0.342660717f, + 0.938932484f, -0.344101426f, + 0.938403534f, -0.345541325f, + 0.937872376f, -0.346980411f, + 0.937339012f, -0.348418680f, + 0.936803442f, -0.349856130f, + 0.936265667f, -0.351292756f, + 0.935725689f, -0.352728556f, + 0.935183510f, -0.354163525f, + 0.934639130f, -0.355597662f, + 0.934092550f, -0.357030961f, + 0.933543773f, -0.358463421f, + 0.932992799f, -0.359895037f, + 0.932439629f, -0.361325806f, + 0.931884266f, -0.362755724f, + 0.931326709f, -0.364184790f, + 0.930766961f, -0.365612998f, + 0.930205023f, -0.367040346f, + 0.929640896f, -0.368466830f, + 0.929074581f, -0.369892447f, + 0.928506080f, -0.371317194f, + 0.927935395f, -0.372741067f, + 0.927362526f, -0.374164063f, + 0.926787474f, -0.375586178f, + 0.926210242f, -0.377007410f, + 0.925630831f, -0.378427755f, + 0.925049241f, -0.379847209f, + 0.924465474f, -0.381265769f, + 0.923879533f, -0.382683432f, + 0.923291417f, -0.384100195f, + 0.922701128f, -0.385516054f, + 0.922108669f, -0.386931006f, + 0.921514039f, -0.388345047f, + 0.920917242f, -0.389758174f, + 0.920318277f, -0.391170384f, + 0.919717146f, -0.392581674f, + 0.919113852f, -0.393992040f, + 0.918508394f, -0.395401479f, + 0.917900776f, -0.396809987f, + 0.917290997f, -0.398217562f, + 0.916679060f, -0.399624200f, + 0.916064966f, -0.401029897f, + 0.915448716f, -0.402434651f, + 0.914830312f, -0.403838458f, + 0.914209756f, -0.405241314f, + 0.913587048f, -0.406643217f, + 0.912962190f, -0.408044163f, + 0.912335185f, -0.409444149f, + 0.911706032f, -0.410843171f, + 0.911074734f, -0.412241227f, + 0.910441292f, -0.413638312f, + 0.909805708f, -0.415034424f, + 0.909167983f, -0.416429560f, + 0.908528119f, -0.417823716f, + 0.907886116f, -0.419216888f, + 0.907241978f, -0.420609074f, + 0.906595705f, -0.422000271f, + 0.905947298f, -0.423390474f, + 0.905296759f, -0.424779681f, + 0.904644091f, -0.426167889f, + 0.903989293f, -0.427555093f, + 0.903332368f, -0.428941292f, + 0.902673318f, -0.430326481f, + 0.902012144f, -0.431710658f, + 0.901348847f, -0.433093819f, + 0.900683429f, -0.434475961f, + 0.900015892f, -0.435857080f, + 0.899346237f, -0.437237174f, + 0.898674466f, -0.438616239f, + 0.898000580f, -0.439994271f, + 0.897324581f, -0.441371269f, + 0.896646470f, -0.442747228f, + 0.895966250f, -0.444122145f, + 0.895283921f, -0.445496017f, + 0.894599486f, -0.446868840f, + 0.893912945f, -0.448240612f, + 0.893224301f, -0.449611330f, + 0.892533555f, -0.450980989f, + 0.891840709f, -0.452349587f, + 0.891145765f, -0.453717121f, + 0.890448723f, -0.455083587f, + 0.889749586f, -0.456448982f, + 0.889048356f, -0.457813304f, + 0.888345033f, -0.459176548f, + 0.887639620f, -0.460538711f, + 0.886932119f, -0.461899791f, + 0.886222530f, -0.463259784f, + 0.885510856f, -0.464618686f, + 0.884797098f, -0.465976496f, + 0.884081259f, -0.467333209f, + 0.883363339f, -0.468688822f, + 0.882643340f, -0.470043332f, + 0.881921264f, -0.471396737f, + 0.881197113f, -0.472749032f, + 0.880470889f, -0.474100215f, + 0.879742593f, -0.475450282f, + 0.879012226f, -0.476799230f, + 0.878279792f, -0.478147056f, + 0.877545290f, -0.479493758f, + 0.876808724f, -0.480839331f, + 0.876070094f, -0.482183772f, + 0.875329403f, -0.483527079f, + 0.874586652f, -0.484869248f, + 0.873841843f, -0.486210276f, + 0.873094978f, -0.487550160f, + 0.872346059f, -0.488888897f, + 0.871595087f, -0.490226483f, + 0.870842063f, -0.491562916f, + 0.870086991f, -0.492898192f, + 0.869329871f, -0.494232309f, + 0.868570706f, -0.495565262f, + 0.867809497f, -0.496897049f, + 0.867046246f, -0.498227667f, + 0.866280954f, -0.499557113f, + 0.865513624f, -0.500885383f, + 0.864744258f, -0.502212474f, + 0.863972856f, -0.503538384f, + 0.863199422f, -0.504863109f, + 0.862423956f, -0.506186645f, + 0.861646461f, -0.507508991f, + 0.860866939f, -0.508830143f, + 0.860085390f, -0.510150097f, + 0.859301818f, -0.511468850f, + 0.858516224f, -0.512786401f, + 0.857728610f, -0.514102744f, + 0.856938977f, -0.515417878f, + 0.856147328f, -0.516731799f, + 0.855353665f, -0.518044504f, + 0.854557988f, -0.519355990f, + 0.853760301f, -0.520666254f, + 0.852960605f, -0.521975293f, + 0.852158902f, -0.523283103f, + 0.851355193f, -0.524589683f, + 0.850549481f, -0.525895027f, + 0.849741768f, -0.527199135f, + 0.848932055f, -0.528502002f, + 0.848120345f, -0.529803625f, + 0.847306639f, -0.531104001f, + 0.846490939f, -0.532403128f, + 0.845673247f, -0.533701002f, + 0.844853565f, -0.534997620f, + 0.844031895f, -0.536292979f, + 0.843208240f, -0.537587076f, + 0.842382600f, -0.538879909f, + 0.841554977f, -0.540171473f, + 0.840725375f, -0.541461766f, + 0.839893794f, -0.542750785f, + 0.839060237f, -0.544038527f, + 0.838224706f, -0.545324988f, + 0.837387202f, -0.546610167f, + 0.836547727f, -0.547894059f, + 0.835706284f, -0.549176662f, + 0.834862875f, -0.550457973f, + 0.834017501f, -0.551737988f, + 0.833170165f, -0.553016706f, + 0.832320868f, -0.554294121f, + 0.831469612f, -0.555570233f, + 0.830616400f, -0.556845037f, + 0.829761234f, -0.558118531f, + 0.828904115f, -0.559390712f, + 0.828045045f, -0.560661576f, + 0.827184027f, -0.561931121f, + 0.826321063f, -0.563199344f, + 0.825456154f, -0.564466242f, + 0.824589303f, -0.565731811f, + 0.823720511f, -0.566996049f, + 0.822849781f, -0.568258953f, + 0.821977115f, -0.569520519f, + 0.821102515f, -0.570780746f, + 0.820225983f, -0.572039629f, + 0.819347520f, -0.573297167f, + 0.818467130f, -0.574553355f, + 0.817584813f, -0.575808191f, + 0.816700573f, -0.577061673f, + 0.815814411f, -0.578313796f, + 0.814926329f, -0.579564559f, + 0.814036330f, -0.580813958f, + 0.813144415f, -0.582061990f, + 0.812250587f, -0.583308653f, + 0.811354847f, -0.584553943f, + 0.810457198f, -0.585797857f, + 0.809557642f, -0.587040394f, + 0.808656182f, -0.588281548f, + 0.807752818f, -0.589521319f, + 0.806847554f, -0.590759702f, + 0.805940391f, -0.591996695f, + 0.805031331f, -0.593232295f, + 0.804120377f, -0.594466499f, + 0.803207531f, -0.595699304f, + 0.802292796f, -0.596930708f, + 0.801376172f, -0.598160707f, + 0.800457662f, -0.599389298f, + 0.799537269f, -0.600616479f, + 0.798614995f, -0.601842247f, + 0.797690841f, -0.603066599f, + 0.796764810f, -0.604289531f, + 0.795836905f, -0.605511041f, + 0.794907126f, -0.606731127f, + 0.793975478f, -0.607949785f, + 0.793041960f, -0.609167012f, + 0.792106577f, -0.610382806f, + 0.791169330f, -0.611597164f, + 0.790230221f, -0.612810082f, + 0.789289253f, -0.614021559f, + 0.788346428f, -0.615231591f, + 0.787401747f, -0.616440175f, + 0.786455214f, -0.617647308f, + 0.785506830f, -0.618852988f, + 0.784556597f, -0.620057212f, + 0.783604519f, -0.621259977f, + 0.782650596f, -0.622461279f, + 0.781694832f, -0.623661118f, + 0.780737229f, -0.624859488f, + 0.779777788f, -0.626056388f, + 0.778816512f, -0.627251815f, + 0.777853404f, -0.628445767f, + 0.776888466f, -0.629638239f, + 0.775921699f, -0.630829230f, + 0.774953107f, -0.632018736f, + 0.773982691f, -0.633206755f, + 0.773010453f, -0.634393284f, + 0.772036397f, -0.635578320f, + 0.771060524f, -0.636761861f, + 0.770082837f, -0.637943904f, + 0.769103338f, -0.639124445f, + 0.768122029f, -0.640303482f, + 0.767138912f, -0.641481013f, + 0.766153990f, -0.642657034f, + 0.765167266f, -0.643831543f, + 0.764178741f, -0.645004537f, + 0.763188417f, -0.646176013f, + 0.762196298f, -0.647345969f, + 0.761202385f, -0.648514401f, + 0.760206682f, -0.649681307f, + 0.759209189f, -0.650846685f, + 0.758209910f, -0.652010531f, + 0.757208847f, -0.653172843f, + 0.756206001f, -0.654333618f, + 0.755201377f, -0.655492853f, + 0.754194975f, -0.656650546f, + 0.753186799f, -0.657806693f, + 0.752176850f, -0.658961293f, + 0.751165132f, -0.660114342f, + 0.750151646f, -0.661265838f, + 0.749136395f, -0.662415778f, + 0.748119380f, -0.663564159f, + 0.747100606f, -0.664710978f, + 0.746080074f, -0.665856234f, + 0.745057785f, -0.666999922f, + 0.744033744f, -0.668142041f, + 0.743007952f, -0.669282588f, + 0.741980412f, -0.670421560f, + 0.740951125f, -0.671558955f, + 0.739920095f, -0.672694769f, + 0.738887324f, -0.673829000f, + 0.737852815f, -0.674961646f, + 0.736816569f, -0.676092704f, + 0.735778589f, -0.677222170f, + 0.734738878f, -0.678350043f, + 0.733697438f, -0.679476320f, + 0.732654272f, -0.680600998f, + 0.731609381f, -0.681724074f, + 0.730562769f, -0.682845546f, + 0.729514438f, -0.683965412f, + 0.728464390f, -0.685083668f, + 0.727412629f, -0.686200312f, + 0.726359155f, -0.687315341f, + 0.725303972f, -0.688428753f, + 0.724247083f, -0.689540545f, + 0.723188489f, -0.690650714f, + 0.722128194f, -0.691759258f, + 0.721066199f, -0.692866175f, + 0.720002508f, -0.693971461f, + 0.718937122f, -0.695075114f, + 0.717870045f, -0.696177131f, + 0.716801279f, -0.697277511f, + 0.715730825f, -0.698376249f, + 0.714658688f, -0.699473345f, + 0.713584869f, -0.700568794f, + 0.712509371f, -0.701662595f, + 0.711432196f, -0.702754744f, + 0.710353347f, -0.703845241f, + 0.709272826f, -0.704934080f, + 0.708190637f, -0.706021261f, + 0.707106781f, -0.707106781f, + 0.706021261f, -0.708190637f, + 0.704934080f, -0.709272826f, + 0.703845241f, -0.710353347f, + 0.702754744f, -0.711432196f, + 0.701662595f, -0.712509371f, + 0.700568794f, -0.713584869f, + 0.699473345f, -0.714658688f, + 0.698376249f, -0.715730825f, + 0.697277511f, -0.716801279f, + 0.696177131f, -0.717870045f, + 0.695075114f, -0.718937122f, + 0.693971461f, -0.720002508f, + 0.692866175f, -0.721066199f, + 0.691759258f, -0.722128194f, + 0.690650714f, -0.723188489f, + 0.689540545f, -0.724247083f, + 0.688428753f, -0.725303972f, + 0.687315341f, -0.726359155f, + 0.686200312f, -0.727412629f, + 0.685083668f, -0.728464390f, + 0.683965412f, -0.729514438f, + 0.682845546f, -0.730562769f, + 0.681724074f, -0.731609381f, + 0.680600998f, -0.732654272f, + 0.679476320f, -0.733697438f, + 0.678350043f, -0.734738878f, + 0.677222170f, -0.735778589f, + 0.676092704f, -0.736816569f, + 0.674961646f, -0.737852815f, + 0.673829000f, -0.738887324f, + 0.672694769f, -0.739920095f, + 0.671558955f, -0.740951125f, + 0.670421560f, -0.741980412f, + 0.669282588f, -0.743007952f, + 0.668142041f, -0.744033744f, + 0.666999922f, -0.745057785f, + 0.665856234f, -0.746080074f, + 0.664710978f, -0.747100606f, + 0.663564159f, -0.748119380f, + 0.662415778f, -0.749136395f, + 0.661265838f, -0.750151646f, + 0.660114342f, -0.751165132f, + 0.658961293f, -0.752176850f, + 0.657806693f, -0.753186799f, + 0.656650546f, -0.754194975f, + 0.655492853f, -0.755201377f, + 0.654333618f, -0.756206001f, + 0.653172843f, -0.757208847f, + 0.652010531f, -0.758209910f, + 0.650846685f, -0.759209189f, + 0.649681307f, -0.760206682f, + 0.648514401f, -0.761202385f, + 0.647345969f, -0.762196298f, + 0.646176013f, -0.763188417f, + 0.645004537f, -0.764178741f, + 0.643831543f, -0.765167266f, + 0.642657034f, -0.766153990f, + 0.641481013f, -0.767138912f, + 0.640303482f, -0.768122029f, + 0.639124445f, -0.769103338f, + 0.637943904f, -0.770082837f, + 0.636761861f, -0.771060524f, + 0.635578320f, -0.772036397f, + 0.634393284f, -0.773010453f, + 0.633206755f, -0.773982691f, + 0.632018736f, -0.774953107f, + 0.630829230f, -0.775921699f, + 0.629638239f, -0.776888466f, + 0.628445767f, -0.777853404f, + 0.627251815f, -0.778816512f, + 0.626056388f, -0.779777788f, + 0.624859488f, -0.780737229f, + 0.623661118f, -0.781694832f, + 0.622461279f, -0.782650596f, + 0.621259977f, -0.783604519f, + 0.620057212f, -0.784556597f, + 0.618852988f, -0.785506830f, + 0.617647308f, -0.786455214f, + 0.616440175f, -0.787401747f, + 0.615231591f, -0.788346428f, + 0.614021559f, -0.789289253f, + 0.612810082f, -0.790230221f, + 0.611597164f, -0.791169330f, + 0.610382806f, -0.792106577f, + 0.609167012f, -0.793041960f, + 0.607949785f, -0.793975478f, + 0.606731127f, -0.794907126f, + 0.605511041f, -0.795836905f, + 0.604289531f, -0.796764810f, + 0.603066599f, -0.797690841f, + 0.601842247f, -0.798614995f, + 0.600616479f, -0.799537269f, + 0.599389298f, -0.800457662f, + 0.598160707f, -0.801376172f, + 0.596930708f, -0.802292796f, + 0.595699304f, -0.803207531f, + 0.594466499f, -0.804120377f, + 0.593232295f, -0.805031331f, + 0.591996695f, -0.805940391f, + 0.590759702f, -0.806847554f, + 0.589521319f, -0.807752818f, + 0.588281548f, -0.808656182f, + 0.587040394f, -0.809557642f, + 0.585797857f, -0.810457198f, + 0.584553943f, -0.811354847f, + 0.583308653f, -0.812250587f, + 0.582061990f, -0.813144415f, + 0.580813958f, -0.814036330f, + 0.579564559f, -0.814926329f, + 0.578313796f, -0.815814411f, + 0.577061673f, -0.816700573f, + 0.575808191f, -0.817584813f, + 0.574553355f, -0.818467130f, + 0.573297167f, -0.819347520f, + 0.572039629f, -0.820225983f, + 0.570780746f, -0.821102515f, + 0.569520519f, -0.821977115f, + 0.568258953f, -0.822849781f, + 0.566996049f, -0.823720511f, + 0.565731811f, -0.824589303f, + 0.564466242f, -0.825456154f, + 0.563199344f, -0.826321063f, + 0.561931121f, -0.827184027f, + 0.560661576f, -0.828045045f, + 0.559390712f, -0.828904115f, + 0.558118531f, -0.829761234f, + 0.556845037f, -0.830616400f, + 0.555570233f, -0.831469612f, + 0.554294121f, -0.832320868f, + 0.553016706f, -0.833170165f, + 0.551737988f, -0.834017501f, + 0.550457973f, -0.834862875f, + 0.549176662f, -0.835706284f, + 0.547894059f, -0.836547727f, + 0.546610167f, -0.837387202f, + 0.545324988f, -0.838224706f, + 0.544038527f, -0.839060237f, + 0.542750785f, -0.839893794f, + 0.541461766f, -0.840725375f, + 0.540171473f, -0.841554977f, + 0.538879909f, -0.842382600f, + 0.537587076f, -0.843208240f, + 0.536292979f, -0.844031895f, + 0.534997620f, -0.844853565f, + 0.533701002f, -0.845673247f, + 0.532403128f, -0.846490939f, + 0.531104001f, -0.847306639f, + 0.529803625f, -0.848120345f, + 0.528502002f, -0.848932055f, + 0.527199135f, -0.849741768f, + 0.525895027f, -0.850549481f, + 0.524589683f, -0.851355193f, + 0.523283103f, -0.852158902f, + 0.521975293f, -0.852960605f, + 0.520666254f, -0.853760301f, + 0.519355990f, -0.854557988f, + 0.518044504f, -0.855353665f, + 0.516731799f, -0.856147328f, + 0.515417878f, -0.856938977f, + 0.514102744f, -0.857728610f, + 0.512786401f, -0.858516224f, + 0.511468850f, -0.859301818f, + 0.510150097f, -0.860085390f, + 0.508830143f, -0.860866939f, + 0.507508991f, -0.861646461f, + 0.506186645f, -0.862423956f, + 0.504863109f, -0.863199422f, + 0.503538384f, -0.863972856f, + 0.502212474f, -0.864744258f, + 0.500885383f, -0.865513624f, + 0.499557113f, -0.866280954f, + 0.498227667f, -0.867046246f, + 0.496897049f, -0.867809497f, + 0.495565262f, -0.868570706f, + 0.494232309f, -0.869329871f, + 0.492898192f, -0.870086991f, + 0.491562916f, -0.870842063f, + 0.490226483f, -0.871595087f, + 0.488888897f, -0.872346059f, + 0.487550160f, -0.873094978f, + 0.486210276f, -0.873841843f, + 0.484869248f, -0.874586652f, + 0.483527079f, -0.875329403f, + 0.482183772f, -0.876070094f, + 0.480839331f, -0.876808724f, + 0.479493758f, -0.877545290f, + 0.478147056f, -0.878279792f, + 0.476799230f, -0.879012226f, + 0.475450282f, -0.879742593f, + 0.474100215f, -0.880470889f, + 0.472749032f, -0.881197113f, + 0.471396737f, -0.881921264f, + 0.470043332f, -0.882643340f, + 0.468688822f, -0.883363339f, + 0.467333209f, -0.884081259f, + 0.465976496f, -0.884797098f, + 0.464618686f, -0.885510856f, + 0.463259784f, -0.886222530f, + 0.461899791f, -0.886932119f, + 0.460538711f, -0.887639620f, + 0.459176548f, -0.888345033f, + 0.457813304f, -0.889048356f, + 0.456448982f, -0.889749586f, + 0.455083587f, -0.890448723f, + 0.453717121f, -0.891145765f, + 0.452349587f, -0.891840709f, + 0.450980989f, -0.892533555f, + 0.449611330f, -0.893224301f, + 0.448240612f, -0.893912945f, + 0.446868840f, -0.894599486f, + 0.445496017f, -0.895283921f, + 0.444122145f, -0.895966250f, + 0.442747228f, -0.896646470f, + 0.441371269f, -0.897324581f, + 0.439994271f, -0.898000580f, + 0.438616239f, -0.898674466f, + 0.437237174f, -0.899346237f, + 0.435857080f, -0.900015892f, + 0.434475961f, -0.900683429f, + 0.433093819f, -0.901348847f, + 0.431710658f, -0.902012144f, + 0.430326481f, -0.902673318f, + 0.428941292f, -0.903332368f, + 0.427555093f, -0.903989293f, + 0.426167889f, -0.904644091f, + 0.424779681f, -0.905296759f, + 0.423390474f, -0.905947298f, + 0.422000271f, -0.906595705f, + 0.420609074f, -0.907241978f, + 0.419216888f, -0.907886116f, + 0.417823716f, -0.908528119f, + 0.416429560f, -0.909167983f, + 0.415034424f, -0.909805708f, + 0.413638312f, -0.910441292f, + 0.412241227f, -0.911074734f, + 0.410843171f, -0.911706032f, + 0.409444149f, -0.912335185f, + 0.408044163f, -0.912962190f, + 0.406643217f, -0.913587048f, + 0.405241314f, -0.914209756f, + 0.403838458f, -0.914830312f, + 0.402434651f, -0.915448716f, + 0.401029897f, -0.916064966f, + 0.399624200f, -0.916679060f, + 0.398217562f, -0.917290997f, + 0.396809987f, -0.917900776f, + 0.395401479f, -0.918508394f, + 0.393992040f, -0.919113852f, + 0.392581674f, -0.919717146f, + 0.391170384f, -0.920318277f, + 0.389758174f, -0.920917242f, + 0.388345047f, -0.921514039f, + 0.386931006f, -0.922108669f, + 0.385516054f, -0.922701128f, + 0.384100195f, -0.923291417f, + 0.382683432f, -0.923879533f, + 0.381265769f, -0.924465474f, + 0.379847209f, -0.925049241f, + 0.378427755f, -0.925630831f, + 0.377007410f, -0.926210242f, + 0.375586178f, -0.926787474f, + 0.374164063f, -0.927362526f, + 0.372741067f, -0.927935395f, + 0.371317194f, -0.928506080f, + 0.369892447f, -0.929074581f, + 0.368466830f, -0.929640896f, + 0.367040346f, -0.930205023f, + 0.365612998f, -0.930766961f, + 0.364184790f, -0.931326709f, + 0.362755724f, -0.931884266f, + 0.361325806f, -0.932439629f, + 0.359895037f, -0.932992799f, + 0.358463421f, -0.933543773f, + 0.357030961f, -0.934092550f, + 0.355597662f, -0.934639130f, + 0.354163525f, -0.935183510f, + 0.352728556f, -0.935725689f, + 0.351292756f, -0.936265667f, + 0.349856130f, -0.936803442f, + 0.348418680f, -0.937339012f, + 0.346980411f, -0.937872376f, + 0.345541325f, -0.938403534f, + 0.344101426f, -0.938932484f, + 0.342660717f, -0.939459224f, + 0.341219202f, -0.939983753f, + 0.339776884f, -0.940506071f, + 0.338333767f, -0.941026175f, + 0.336889853f, -0.941544065f, + 0.335445147f, -0.942059740f, + 0.333999651f, -0.942573198f, + 0.332553370f, -0.943084437f, + 0.331106306f, -0.943593458f, + 0.329658463f, -0.944100258f, + 0.328209844f, -0.944604837f, + 0.326760452f, -0.945107193f, + 0.325310292f, -0.945607325f, + 0.323859367f, -0.946105232f, + 0.322407679f, -0.946600913f, + 0.320955232f, -0.947094366f, + 0.319502031f, -0.947585591f, + 0.318048077f, -0.948074586f, + 0.316593376f, -0.948561350f, + 0.315137929f, -0.949045882f, + 0.313681740f, -0.949528181f, + 0.312224814f, -0.950008245f, + 0.310767153f, -0.950486074f, + 0.309308760f, -0.950961666f, + 0.307849640f, -0.951435021f, + 0.306389795f, -0.951906137f, + 0.304929230f, -0.952375013f, + 0.303467947f, -0.952841648f, + 0.302005949f, -0.953306040f, + 0.300543241f, -0.953768190f, + 0.299079826f, -0.954228095f, + 0.297615707f, -0.954685755f, + 0.296150888f, -0.955141168f, + 0.294685372f, -0.955594334f, + 0.293219163f, -0.956045251f, + 0.291752263f, -0.956493919f, + 0.290284677f, -0.956940336f, + 0.288816408f, -0.957384501f, + 0.287347460f, -0.957826413f, + 0.285877835f, -0.958266071f, + 0.284407537f, -0.958703475f, + 0.282936570f, -0.959138622f, + 0.281464938f, -0.959571513f, + 0.279992643f, -0.960002146f, + 0.278519689f, -0.960430519f, + 0.277046080f, -0.960856633f, + 0.275571819f, -0.961280486f, + 0.274096910f, -0.961702077f, + 0.272621355f, -0.962121404f, + 0.271145160f, -0.962538468f, + 0.269668326f, -0.962953267f, + 0.268190857f, -0.963365800f, + 0.266712757f, -0.963776066f, + 0.265234030f, -0.964184064f, + 0.263754679f, -0.964589793f, + 0.262274707f, -0.964993253f, + 0.260794118f, -0.965394442f, + 0.259312915f, -0.965793359f, + 0.257831102f, -0.966190003f, + 0.256348682f, -0.966584374f, + 0.254865660f, -0.966976471f, + 0.253382037f, -0.967366292f, + 0.251897818f, -0.967753837f, + 0.250413007f, -0.968139105f, + 0.248927606f, -0.968522094f, + 0.247441619f, -0.968902805f, + 0.245955050f, -0.969281235f, + 0.244467903f, -0.969657385f, + 0.242980180f, -0.970031253f, + 0.241491885f, -0.970402839f, + 0.240003022f, -0.970772141f, + 0.238513595f, -0.971139158f, + 0.237023606f, -0.971503891f, + 0.235533059f, -0.971866337f, + 0.234041959f, -0.972226497f, + 0.232550307f, -0.972584369f, + 0.231058108f, -0.972939952f, + 0.229565366f, -0.973293246f, + 0.228072083f, -0.973644250f, + 0.226578264f, -0.973992962f, + 0.225083911f, -0.974339383f, + 0.223589029f, -0.974683511f, + 0.222093621f, -0.975025345f, + 0.220597690f, -0.975364885f, + 0.219101240f, -0.975702130f, + 0.217604275f, -0.976037079f, + 0.216106797f, -0.976369731f, + 0.214608811f, -0.976700086f, + 0.213110320f, -0.977028143f, + 0.211611327f, -0.977353900f, + 0.210111837f, -0.977677358f, + 0.208611852f, -0.977998515f, + 0.207111376f, -0.978317371f, + 0.205610413f, -0.978633924f, + 0.204108966f, -0.978948175f, + 0.202607039f, -0.979260123f, + 0.201104635f, -0.979569766f, + 0.199601758f, -0.979877104f, + 0.198098411f, -0.980182136f, + 0.196594598f, -0.980484862f, + 0.195090322f, -0.980785280f, + 0.193585587f, -0.981083391f, + 0.192080397f, -0.981379193f, + 0.190574755f, -0.981672686f, + 0.189068664f, -0.981963869f, + 0.187562129f, -0.982252741f, + 0.186055152f, -0.982539302f, + 0.184547737f, -0.982823551f, + 0.183039888f, -0.983105487f, + 0.181531608f, -0.983385110f, + 0.180022901f, -0.983662419f, + 0.178513771f, -0.983937413f, + 0.177004220f, -0.984210092f, + 0.175494253f, -0.984480455f, + 0.173983873f, -0.984748502f, + 0.172473084f, -0.985014231f, + 0.170961889f, -0.985277642f, + 0.169450291f, -0.985538735f, + 0.167938295f, -0.985797509f, + 0.166425904f, -0.986053963f, + 0.164913120f, -0.986308097f, + 0.163399949f, -0.986559910f, + 0.161886394f, -0.986809402f, + 0.160372457f, -0.987056571f, + 0.158858143f, -0.987301418f, + 0.157343456f, -0.987543942f, + 0.155828398f, -0.987784142f, + 0.154312973f, -0.988022017f, + 0.152797185f, -0.988257568f, + 0.151281038f, -0.988490793f, + 0.149764535f, -0.988721692f, + 0.148247679f, -0.988950265f, + 0.146730474f, -0.989176510f, + 0.145212925f, -0.989400428f, + 0.143695033f, -0.989622017f, + 0.142176804f, -0.989841278f, + 0.140658239f, -0.990058210f, + 0.139139344f, -0.990272812f, + 0.137620122f, -0.990485084f, + 0.136100575f, -0.990695025f, + 0.134580709f, -0.990902635f, + 0.133060525f, -0.991107914f, + 0.131540029f, -0.991310860f, + 0.130019223f, -0.991511473f, + 0.128498111f, -0.991709754f, + 0.126976696f, -0.991905700f, + 0.125454983f, -0.992099313f, + 0.123932975f, -0.992290591f, + 0.122410675f, -0.992479535f, + 0.120888087f, -0.992666142f, + 0.119365215f, -0.992850414f, + 0.117842062f, -0.993032350f, + 0.116318631f, -0.993211949f, + 0.114794927f, -0.993389211f, + 0.113270952f, -0.993564136f, + 0.111746711f, -0.993736722f, + 0.110222207f, -0.993906970f, + 0.108697444f, -0.994074879f, + 0.107172425f, -0.994240449f, + 0.105647154f, -0.994403680f, + 0.104121634f, -0.994564571f, + 0.102595869f, -0.994723121f, + 0.101069863f, -0.994879331f, + 0.099543619f, -0.995033199f, + 0.098017140f, -0.995184727f, + 0.096490431f, -0.995333912f, + 0.094963495f, -0.995480755f, + 0.093436336f, -0.995625256f, + 0.091908956f, -0.995767414f, + 0.090381361f, -0.995907229f, + 0.088853553f, -0.996044701f, + 0.087325535f, -0.996179829f, + 0.085797312f, -0.996312612f, + 0.084268888f, -0.996443051f, + 0.082740265f, -0.996571146f, + 0.081211447f, -0.996696895f, + 0.079682438f, -0.996820299f, + 0.078153242f, -0.996941358f, + 0.076623861f, -0.997060070f, + 0.075094301f, -0.997176437f, + 0.073564564f, -0.997290457f, + 0.072034653f, -0.997402130f, + 0.070504573f, -0.997511456f, + 0.068974328f, -0.997618435f, + 0.067443920f, -0.997723067f, + 0.065913353f, -0.997825350f, + 0.064382631f, -0.997925286f, + 0.062851758f, -0.998022874f, + 0.061320736f, -0.998118113f, + 0.059789571f, -0.998211003f, + 0.058258265f, -0.998301545f, + 0.056726821f, -0.998389737f, + 0.055195244f, -0.998475581f, + 0.053663538f, -0.998559074f, + 0.052131705f, -0.998640218f, + 0.050599749f, -0.998719012f, + 0.049067674f, -0.998795456f, + 0.047535484f, -0.998869550f, + 0.046003182f, -0.998941293f, + 0.044470772f, -0.999010686f, + 0.042938257f, -0.999077728f, + 0.041405641f, -0.999142419f, + 0.039872928f, -0.999204759f, + 0.038340120f, -0.999264747f, + 0.036807223f, -0.999322385f, + 0.035274239f, -0.999377670f, + 0.033741172f, -0.999430605f, + 0.032208025f, -0.999481187f, + 0.030674803f, -0.999529418f, + 0.029141509f, -0.999575296f, + 0.027608146f, -0.999618822f, + 0.026074718f, -0.999659997f, + 0.024541229f, -0.999698819f, + 0.023007681f, -0.999735288f, + 0.021474080f, -0.999769405f, + 0.019940429f, -0.999801170f, + 0.018406730f, -0.999830582f, + 0.016872988f, -0.999857641f, + 0.015339206f, -0.999882347f, + 0.013805389f, -0.999904701f, + 0.012271538f, -0.999924702f, + 0.010737659f, -0.999942350f, + 0.009203755f, -0.999957645f, + 0.007669829f, -0.999970586f, + 0.006135885f, -0.999981175f, + 0.004601926f, -0.999989411f, + 0.003067957f, -0.999995294f, + 0.001533980f, -0.999998823f +}; + + +/** + * \par + * Example code for the generation of the floating-point sine table: + *
+ * tableSize = 512;    
+ * for(n = 0; n < (tableSize + 1); n++)    
+ * {    
+ *	sinTable[n]=sin(2*pi*n/tableSize);    
+ * }
+ * \par + * where pi value is 3.14159265358979 + */ + +const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1] = { + 0.00000000f, 0.01227154f, 0.02454123f, 0.03680722f, 0.04906767f, 0.06132074f, + 0.07356456f, 0.08579731f, 0.09801714f, 0.11022221f, 0.12241068f, 0.13458071f, + 0.14673047f, 0.15885814f, 0.17096189f, 0.18303989f, 0.19509032f, 0.20711138f, + 0.21910124f, 0.23105811f, 0.24298018f, 0.25486566f, 0.26671276f, 0.27851969f, + 0.29028468f, 0.30200595f, 0.31368174f, 0.32531029f, 0.33688985f, 0.34841868f, + 0.35989504f, 0.37131719f, 0.38268343f, 0.39399204f, 0.40524131f, 0.41642956f, + 0.42755509f, 0.43861624f, 0.44961133f, 0.46053871f, 0.47139674f, 0.48218377f, + 0.49289819f, 0.50353838f, 0.51410274f, 0.52458968f, 0.53499762f, 0.54532499f, + 0.55557023f, 0.56573181f, 0.57580819f, 0.58579786f, 0.59569930f, 0.60551104f, + 0.61523159f, 0.62485949f, 0.63439328f, 0.64383154f, 0.65317284f, 0.66241578f, + 0.67155895f, 0.68060100f, 0.68954054f, 0.69837625f, 0.70710678f, 0.71573083f, + 0.72424708f, 0.73265427f, 0.74095113f, 0.74913639f, 0.75720885f, 0.76516727f, + 0.77301045f, 0.78073723f, 0.78834643f, 0.79583690f, 0.80320753f, 0.81045720f, + 0.81758481f, 0.82458930f, 0.83146961f, 0.83822471f, 0.84485357f, 0.85135519f, + 0.85772861f, 0.86397286f, 0.87008699f, 0.87607009f, 0.88192126f, 0.88763962f, + 0.89322430f, 0.89867447f, 0.90398929f, 0.90916798f, 0.91420976f, 0.91911385f, + 0.92387953f, 0.92850608f, 0.93299280f, 0.93733901f, 0.94154407f, 0.94560733f, + 0.94952818f, 0.95330604f, 0.95694034f, 0.96043052f, 0.96377607f, 0.96697647f, + 0.97003125f, 0.97293995f, 0.97570213f, 0.97831737f, 0.98078528f, 0.98310549f, + 0.98527764f, 0.98730142f, 0.98917651f, 0.99090264f, 0.99247953f, 0.99390697f, + 0.99518473f, 0.99631261f, 0.99729046f, 0.99811811f, 0.99879546f, 0.99932238f, + 0.99969882f, 0.99992470f, 1.00000000f, 0.99992470f, 0.99969882f, 0.99932238f, + 0.99879546f, 0.99811811f, 0.99729046f, 0.99631261f, 0.99518473f, 0.99390697f, + 0.99247953f, 0.99090264f, 0.98917651f, 0.98730142f, 0.98527764f, 0.98310549f, + 0.98078528f, 0.97831737f, 0.97570213f, 0.97293995f, 0.97003125f, 0.96697647f, + 0.96377607f, 0.96043052f, 0.95694034f, 0.95330604f, 0.94952818f, 0.94560733f, + 0.94154407f, 0.93733901f, 0.93299280f, 0.92850608f, 0.92387953f, 0.91911385f, + 0.91420976f, 0.90916798f, 0.90398929f, 0.89867447f, 0.89322430f, 0.88763962f, + 0.88192126f, 0.87607009f, 0.87008699f, 0.86397286f, 0.85772861f, 0.85135519f, + 0.84485357f, 0.83822471f, 0.83146961f, 0.82458930f, 0.81758481f, 0.81045720f, + 0.80320753f, 0.79583690f, 0.78834643f, 0.78073723f, 0.77301045f, 0.76516727f, + 0.75720885f, 0.74913639f, 0.74095113f, 0.73265427f, 0.72424708f, 0.71573083f, + 0.70710678f, 0.69837625f, 0.68954054f, 0.68060100f, 0.67155895f, 0.66241578f, + 0.65317284f, 0.64383154f, 0.63439328f, 0.62485949f, 0.61523159f, 0.60551104f, + 0.59569930f, 0.58579786f, 0.57580819f, 0.56573181f, 0.55557023f, 0.54532499f, + 0.53499762f, 0.52458968f, 0.51410274f, 0.50353838f, 0.49289819f, 0.48218377f, + 0.47139674f, 0.46053871f, 0.44961133f, 0.43861624f, 0.42755509f, 0.41642956f, + 0.40524131f, 0.39399204f, 0.38268343f, 0.37131719f, 0.35989504f, 0.34841868f, + 0.33688985f, 0.32531029f, 0.31368174f, 0.30200595f, 0.29028468f, 0.27851969f, + 0.26671276f, 0.25486566f, 0.24298018f, 0.23105811f, 0.21910124f, 0.20711138f, + 0.19509032f, 0.18303989f, 0.17096189f, 0.15885814f, 0.14673047f, 0.13458071f, + 0.12241068f, 0.11022221f, 0.09801714f, 0.08579731f, 0.07356456f, 0.06132074f, + 0.04906767f, 0.03680722f, 0.02454123f, 0.01227154f, 0.00000000f, -0.01227154f, + -0.02454123f, -0.03680722f, -0.04906767f, -0.06132074f, -0.07356456f, + -0.08579731f, -0.09801714f, -0.11022221f, -0.12241068f, -0.13458071f, + -0.14673047f, -0.15885814f, -0.17096189f, -0.18303989f, -0.19509032f, + -0.20711138f, -0.21910124f, -0.23105811f, -0.24298018f, -0.25486566f, + -0.26671276f, -0.27851969f, -0.29028468f, -0.30200595f, -0.31368174f, + -0.32531029f, -0.33688985f, -0.34841868f, -0.35989504f, -0.37131719f, + -0.38268343f, -0.39399204f, -0.40524131f, -0.41642956f, -0.42755509f, + -0.43861624f, -0.44961133f, -0.46053871f, -0.47139674f, -0.48218377f, + -0.49289819f, -0.50353838f, -0.51410274f, -0.52458968f, -0.53499762f, + -0.54532499f, -0.55557023f, -0.56573181f, -0.57580819f, -0.58579786f, + -0.59569930f, -0.60551104f, -0.61523159f, -0.62485949f, -0.63439328f, + -0.64383154f, -0.65317284f, -0.66241578f, -0.67155895f, -0.68060100f, + -0.68954054f, -0.69837625f, -0.70710678f, -0.71573083f, -0.72424708f, + -0.73265427f, -0.74095113f, -0.74913639f, -0.75720885f, -0.76516727f, + -0.77301045f, -0.78073723f, -0.78834643f, -0.79583690f, -0.80320753f, + -0.81045720f, -0.81758481f, -0.82458930f, -0.83146961f, -0.83822471f, + -0.84485357f, -0.85135519f, -0.85772861f, -0.86397286f, -0.87008699f, + -0.87607009f, -0.88192126f, -0.88763962f, -0.89322430f, -0.89867447f, + -0.90398929f, -0.90916798f, -0.91420976f, -0.91911385f, -0.92387953f, + -0.92850608f, -0.93299280f, -0.93733901f, -0.94154407f, -0.94560733f, + -0.94952818f, -0.95330604f, -0.95694034f, -0.96043052f, -0.96377607f, + -0.96697647f, -0.97003125f, -0.97293995f, -0.97570213f, -0.97831737f, + -0.98078528f, -0.98310549f, -0.98527764f, -0.98730142f, -0.98917651f, + -0.99090264f, -0.99247953f, -0.99390697f, -0.99518473f, -0.99631261f, + -0.99729046f, -0.99811811f, -0.99879546f, -0.99932238f, -0.99969882f, + -0.99992470f, -1.00000000f, -0.99992470f, -0.99969882f, -0.99932238f, + -0.99879546f, -0.99811811f, -0.99729046f, -0.99631261f, -0.99518473f, + -0.99390697f, -0.99247953f, -0.99090264f, -0.98917651f, -0.98730142f, + -0.98527764f, -0.98310549f, -0.98078528f, -0.97831737f, -0.97570213f, + -0.97293995f, -0.97003125f, -0.96697647f, -0.96377607f, -0.96043052f, + -0.95694034f, -0.95330604f, -0.94952818f, -0.94560733f, -0.94154407f, + -0.93733901f, -0.93299280f, -0.92850608f, -0.92387953f, -0.91911385f, + -0.91420976f, -0.90916798f, -0.90398929f, -0.89867447f, -0.89322430f, + -0.88763962f, -0.88192126f, -0.87607009f, -0.87008699f, -0.86397286f, + -0.85772861f, -0.85135519f, -0.84485357f, -0.83822471f, -0.83146961f, + -0.82458930f, -0.81758481f, -0.81045720f, -0.80320753f, -0.79583690f, + -0.78834643f, -0.78073723f, -0.77301045f, -0.76516727f, -0.75720885f, + -0.74913639f, -0.74095113f, -0.73265427f, -0.72424708f, -0.71573083f, + -0.70710678f, -0.69837625f, -0.68954054f, -0.68060100f, -0.67155895f, + -0.66241578f, -0.65317284f, -0.64383154f, -0.63439328f, -0.62485949f, + -0.61523159f, -0.60551104f, -0.59569930f, -0.58579786f, -0.57580819f, + -0.56573181f, -0.55557023f, -0.54532499f, -0.53499762f, -0.52458968f, + -0.51410274f, -0.50353838f, -0.49289819f, -0.48218377f, -0.47139674f, + -0.46053871f, -0.44961133f, -0.43861624f, -0.42755509f, -0.41642956f, + -0.40524131f, -0.39399204f, -0.38268343f, -0.37131719f, -0.35989504f, + -0.34841868f, -0.33688985f, -0.32531029f, -0.31368174f, -0.30200595f, + -0.29028468f, -0.27851969f, -0.26671276f, -0.25486566f, -0.24298018f, + -0.23105811f, -0.21910124f, -0.20711138f, -0.19509032f, -0.18303989f, + -0.17096189f, -0.15885814f, -0.14673047f, -0.13458071f, -0.12241068f, + -0.11022221f, -0.09801714f, -0.08579731f, -0.07356456f, -0.06132074f, + -0.04906767f, -0.03680722f, -0.02454123f, -0.01227154f, -0.00000000f +}; + +/** + * \par + * Table values are in Q31 (1.31 fixed-point format) and generation is done in + * three steps. First, generate sin values in floating point: + *
+ * tableSize = 512;      
+ * for(n = 0; n < (tableSize + 1); n++)    
+ * {    
+ *	sinTable[n]= sin(2*pi*n/tableSize);    
+ * } 
+ * where pi value is 3.14159265358979 + * \par + * Second, convert floating-point to Q31 (Fixed point): + * (sinTable[i] * pow(2, 31)) + * \par + * Finally, round to the nearest integer value: + * sinTable[i] += (sinTable[i] > 0 ? 0.5 :-0.5); + */ +const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1] = { + 0x00000000, 0x01921D20, 0x03242ABF, 0x04B6195D, 0x0647D97C, 0x07D95B9E, + 0x096A9049, 0x0AFB6805, 0x0C8BD35E, 0x0E1BC2E4, 0x0FAB272B, 0x1139F0CF, + 0x12C8106F, 0x145576B1, 0x15E21445, 0x176DD9DE, 0x18F8B83C, 0x1A82A026, + 0x1C0B826A, 0x1D934FE5, 0x1F19F97B, 0x209F701C, 0x2223A4C5, 0x23A6887F, + 0x25280C5E, 0x26A82186, 0x2826B928, 0x29A3C485, 0x2B1F34EB, 0x2C98FBBA, + 0x2E110A62, 0x2F875262, 0x30FBC54D, 0x326E54C7, 0x33DEF287, 0x354D9057, + 0x36BA2014, 0x382493B0, 0x398CDD32, 0x3AF2EEB7, 0x3C56BA70, 0x3DB832A6, + 0x3F1749B8, 0x4073F21D, 0x41CE1E65, 0x4325C135, 0x447ACD50, 0x45CD358F, + 0x471CECE7, 0x4869E665, 0x49B41533, 0x4AFB6C98, 0x4C3FDFF4, 0x4D8162C4, + 0x4EBFE8A5, 0x4FFB654D, 0x5133CC94, 0x5269126E, 0x539B2AF0, 0x54CA0A4B, + 0x55F5A4D2, 0x571DEEFA, 0x5842DD54, 0x59646498, 0x5A82799A, 0x5B9D1154, + 0x5CB420E0, 0x5DC79D7C, 0x5ED77C8A, 0x5FE3B38D, 0x60EC3830, 0x61F1003F, + 0x62F201AC, 0x63EF3290, 0x64E88926, 0x65DDFBD3, 0x66CF8120, 0x67BD0FBD, + 0x68A69E81, 0x698C246C, 0x6A6D98A4, 0x6B4AF279, 0x6C242960, 0x6CF934FC, + 0x6DCA0D14, 0x6E96A99D, 0x6F5F02B2, 0x7023109A, 0x70E2CBC6, 0x719E2CD2, + 0x72552C85, 0x7307C3D0, 0x73B5EBD1, 0x745F9DD1, 0x7504D345, 0x75A585CF, + 0x7641AF3D, 0x76D94989, 0x776C4EDB, 0x77FAB989, 0x78848414, 0x7909A92D, + 0x798A23B1, 0x7A05EEAD, 0x7A7D055B, 0x7AEF6323, 0x7B5D039E, 0x7BC5E290, + 0x7C29FBEE, 0x7C894BDE, 0x7CE3CEB2, 0x7D3980EC, 0x7D8A5F40, 0x7DD6668F, + 0x7E1D93EA, 0x7E5FE493, 0x7E9D55FC, 0x7ED5E5C6, 0x7F0991C4, 0x7F3857F6, + 0x7F62368F, 0x7F872BF3, 0x7FA736B4, 0x7FC25596, 0x7FD8878E, 0x7FE9CBC0, + 0x7FF62182, 0x7FFD885A, 0x7FFFFFFF, 0x7FFD885A, 0x7FF62182, 0x7FE9CBC0, + 0x7FD8878E, 0x7FC25596, 0x7FA736B4, 0x7F872BF3, 0x7F62368F, 0x7F3857F6, + 0x7F0991C4, 0x7ED5E5C6, 0x7E9D55FC, 0x7E5FE493, 0x7E1D93EA, 0x7DD6668F, + 0x7D8A5F40, 0x7D3980EC, 0x7CE3CEB2, 0x7C894BDE, 0x7C29FBEE, 0x7BC5E290, + 0x7B5D039E, 0x7AEF6323, 0x7A7D055B, 0x7A05EEAD, 0x798A23B1, 0x7909A92D, + 0x78848414, 0x77FAB989, 0x776C4EDB, 0x76D94989, 0x7641AF3D, 0x75A585CF, + 0x7504D345, 0x745F9DD1, 0x73B5EBD1, 0x7307C3D0, 0x72552C85, 0x719E2CD2, + 0x70E2CBC6, 0x7023109A, 0x6F5F02B2, 0x6E96A99D, 0x6DCA0D14, 0x6CF934FC, + 0x6C242960, 0x6B4AF279, 0x6A6D98A4, 0x698C246C, 0x68A69E81, 0x67BD0FBD, + 0x66CF8120, 0x65DDFBD3, 0x64E88926, 0x63EF3290, 0x62F201AC, 0x61F1003F, + 0x60EC3830, 0x5FE3B38D, 0x5ED77C8A, 0x5DC79D7C, 0x5CB420E0, 0x5B9D1154, + 0x5A82799A, 0x59646498, 0x5842DD54, 0x571DEEFA, 0x55F5A4D2, 0x54CA0A4B, + 0x539B2AF0, 0x5269126E, 0x5133CC94, 0x4FFB654D, 0x4EBFE8A5, 0x4D8162C4, + 0x4C3FDFF4, 0x4AFB6C98, 0x49B41533, 0x4869E665, 0x471CECE7, 0x45CD358F, + 0x447ACD50, 0x4325C135, 0x41CE1E65, 0x4073F21D, 0x3F1749B8, 0x3DB832A6, + 0x3C56BA70, 0x3AF2EEB7, 0x398CDD32, 0x382493B0, 0x36BA2014, 0x354D9057, + 0x33DEF287, 0x326E54C7, 0x30FBC54D, 0x2F875262, 0x2E110A62, 0x2C98FBBA, + 0x2B1F34EB, 0x29A3C485, 0x2826B928, 0x26A82186, 0x25280C5E, 0x23A6887F, + 0x2223A4C5, 0x209F701C, 0x1F19F97B, 0x1D934FE5, 0x1C0B826A, 0x1A82A026, + 0x18F8B83C, 0x176DD9DE, 0x15E21445, 0x145576B1, 0x12C8106F, 0x1139F0CF, + 0x0FAB272B, 0x0E1BC2E4, 0x0C8BD35E, 0x0AFB6805, 0x096A9049, 0x07D95B9E, + 0x0647D97C, 0x04B6195D, 0x03242ABF, 0x01921D20, 0x00000000, 0xFE6DE2E0, + 0xFCDBD541, 0xFB49E6A3, 0xF9B82684, 0xF826A462, 0xF6956FB7, 0xF50497FB, + 0xF3742CA2, 0xF1E43D1C, 0xF054D8D5, 0xEEC60F31, 0xED37EF91, 0xEBAA894F, + 0xEA1DEBBB, 0xE8922622, 0xE70747C4, 0xE57D5FDA, 0xE3F47D96, 0xE26CB01B, + 0xE0E60685, 0xDF608FE4, 0xDDDC5B3B, 0xDC597781, 0xDAD7F3A2, 0xD957DE7A, + 0xD7D946D8, 0xD65C3B7B, 0xD4E0CB15, 0xD3670446, 0xD1EEF59E, 0xD078AD9E, + 0xCF043AB3, 0xCD91AB39, 0xCC210D79, 0xCAB26FA9, 0xC945DFEC, 0xC7DB6C50, + 0xC67322CE, 0xC50D1149, 0xC3A94590, 0xC247CD5A, 0xC0E8B648, 0xBF8C0DE3, + 0xBE31E19B, 0xBCDA3ECB, 0xBB8532B0, 0xBA32CA71, 0xB8E31319, 0xB796199B, + 0xB64BEACD, 0xB5049368, 0xB3C0200C, 0xB27E9D3C, 0xB140175B, 0xB0049AB3, + 0xAECC336C, 0xAD96ED92, 0xAC64D510, 0xAB35F5B5, 0xAA0A5B2E, 0xA8E21106, + 0xA7BD22AC, 0xA69B9B68, 0xA57D8666, 0xA462EEAC, 0xA34BDF20, 0xA2386284, + 0xA1288376, 0xA01C4C73, 0x9F13C7D0, 0x9E0EFFC1, 0x9D0DFE54, 0x9C10CD70, + 0x9B1776DA, 0x9A22042D, 0x99307EE0, 0x9842F043, 0x9759617F, 0x9673DB94, + 0x9592675C, 0x94B50D87, 0x93DBD6A0, 0x9306CB04, 0x9235F2EC, 0x91695663, + 0x90A0FD4E, 0x8FDCEF66, 0x8F1D343A, 0x8E61D32E, 0x8DAAD37B, 0x8CF83C30, + 0x8C4A142F, 0x8BA0622F, 0x8AFB2CBB, 0x8A5A7A31, 0x89BE50C3, 0x8926B677, + 0x8893B125, 0x88054677, 0x877B7BEC, 0x86F656D3, 0x8675DC4F, 0x85FA1153, + 0x8582FAA5, 0x85109CDD, 0x84A2FC62, 0x843A1D70, 0x83D60412, 0x8376B422, + 0x831C314E, 0x82C67F14, 0x8275A0C0, 0x82299971, 0x81E26C16, 0x81A01B6D, + 0x8162AA04, 0x812A1A3A, 0x80F66E3C, 0x80C7A80A, 0x809DC971, 0x8078D40D, + 0x8058C94C, 0x803DAA6A, 0x80277872, 0x80163440, 0x8009DE7E, 0x800277A6, + 0x80000000, 0x800277A6, 0x8009DE7E, 0x80163440, 0x80277872, 0x803DAA6A, + 0x8058C94C, 0x8078D40D, 0x809DC971, 0x80C7A80A, 0x80F66E3C, 0x812A1A3A, + 0x8162AA04, 0x81A01B6D, 0x81E26C16, 0x82299971, 0x8275A0C0, 0x82C67F14, + 0x831C314E, 0x8376B422, 0x83D60412, 0x843A1D70, 0x84A2FC62, 0x85109CDD, + 0x8582FAA5, 0x85FA1153, 0x8675DC4F, 0x86F656D3, 0x877B7BEC, 0x88054677, + 0x8893B125, 0x8926B677, 0x89BE50C3, 0x8A5A7A31, 0x8AFB2CBB, 0x8BA0622F, + 0x8C4A142F, 0x8CF83C30, 0x8DAAD37B, 0x8E61D32E, 0x8F1D343A, 0x8FDCEF66, + 0x90A0FD4E, 0x91695663, 0x9235F2EC, 0x9306CB04, 0x93DBD6A0, 0x94B50D87, + 0x9592675C, 0x9673DB94, 0x9759617F, 0x9842F043, 0x99307EE0, 0x9A22042D, + 0x9B1776DA, 0x9C10CD70, 0x9D0DFE54, 0x9E0EFFC1, 0x9F13C7D0, 0xA01C4C73, + 0xA1288376, 0xA2386284, 0xA34BDF20, 0xA462EEAC, 0xA57D8666, 0xA69B9B68, + 0xA7BD22AC, 0xA8E21106, 0xAA0A5B2E, 0xAB35F5B5, 0xAC64D510, 0xAD96ED92, + 0xAECC336C, 0xB0049AB3, 0xB140175B, 0xB27E9D3C, 0xB3C0200C, 0xB5049368, + 0xB64BEACD, 0xB796199B, 0xB8E31319, 0xBA32CA71, 0xBB8532B0, 0xBCDA3ECB, + 0xBE31E19B, 0xBF8C0DE3, 0xC0E8B648, 0xC247CD5A, 0xC3A94590, 0xC50D1149, + 0xC67322CE, 0xC7DB6C50, 0xC945DFEC, 0xCAB26FA9, 0xCC210D79, 0xCD91AB39, + 0xCF043AB3, 0xD078AD9E, 0xD1EEF59E, 0xD3670446, 0xD4E0CB15, 0xD65C3B7B, + 0xD7D946D8, 0xD957DE7A, 0xDAD7F3A2, 0xDC597781, 0xDDDC5B3B, 0xDF608FE4, + 0xE0E60685, 0xE26CB01B, 0xE3F47D96, 0xE57D5FDA, 0xE70747C4, 0xE8922622, + 0xEA1DEBBB, 0xEBAA894F, 0xED37EF91, 0xEEC60F31, 0xF054D8D5, 0xF1E43D1C, + 0xF3742CA2, 0xF50497FB, 0xF6956FB7, 0xF826A462, 0xF9B82684, 0xFB49E6A3, + 0xFCDBD541, 0xFE6DE2E0, 0x00000000 +}; + +/** + * \par + * Table values are in Q15 (1.15 fixed-point format) and generation is done in + * three steps. First, generate sin values in floating point: + *
+ * tableSize = 512;      
+ * for(n = 0; n < (tableSize + 1); n++)    
+ * {    
+ *	sinTable[n]= sin(2*pi*n/tableSize);    
+ * } 
+ * where pi value is 3.14159265358979 + * \par + * Second, convert floating-point to Q15 (Fixed point): + * (sinTable[i] * pow(2, 15)) + * \par + * Finally, round to the nearest integer value: + * sinTable[i] += (sinTable[i] > 0 ? 0.5 :-0.5); + */ +const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1] = { + 0x0000, 0x0192, 0x0324, 0x04B6, 0x0648, 0x07D9, 0x096B, 0x0AFB, 0x0C8C, 0x0E1C, 0x0FAB, 0x113A, 0x12C8, + 0x1455, 0x15E2, 0x176E, 0x18F9, 0x1A83, 0x1C0C, 0x1D93, 0x1F1A, 0x209F, 0x2224, 0x23A7, 0x2528, 0x26A8, + 0x2827, 0x29A4, 0x2B1F, 0x2C99, 0x2E11, 0x2F87, 0x30FC, 0x326E, 0x33DF, 0x354E, 0x36BA, 0x3825, 0x398D, + 0x3AF3, 0x3C57, 0x3DB8, 0x3F17, 0x4074, 0x41CE, 0x4326, 0x447B, 0x45CD, 0x471D, 0x486A, 0x49B4, 0x4AFB, + 0x4C40, 0x4D81, 0x4EC0, 0x4FFB, 0x5134, 0x5269, 0x539B, 0x54CA, 0x55F6, 0x571E, 0x5843, 0x5964, 0x5A82, + 0x5B9D, 0x5CB4, 0x5DC8, 0x5ED7, 0x5FE4, 0x60EC, 0x61F1, 0x62F2, 0x63EF, 0x64E9, 0x65DE, 0x66D0, 0x67BD, + 0x68A7, 0x698C, 0x6A6E, 0x6B4B, 0x6C24, 0x6CF9, 0x6DCA, 0x6E97, 0x6F5F, 0x7023, 0x70E3, 0x719E, 0x7255, + 0x7308, 0x73B6, 0x7460, 0x7505, 0x75A6, 0x7642, 0x76D9, 0x776C, 0x77FB, 0x7885, 0x790A, 0x798A, 0x7A06, + 0x7A7D, 0x7AEF, 0x7B5D, 0x7BC6, 0x7C2A, 0x7C89, 0x7CE4, 0x7D3A, 0x7D8A, 0x7DD6, 0x7E1E, 0x7E60, 0x7E9D, + 0x7ED6, 0x7F0A, 0x7F38, 0x7F62, 0x7F87, 0x7FA7, 0x7FC2, 0x7FD9, 0x7FEA, 0x7FF6, 0x7FFE, 0x7FFF, 0x7FFE, + 0x7FF6, 0x7FEA, 0x7FD9, 0x7FC2, 0x7FA7, 0x7F87, 0x7F62, 0x7F38, 0x7F0A, 0x7ED6, 0x7E9D, 0x7E60, 0x7E1E, + 0x7DD6, 0x7D8A, 0x7D3A, 0x7CE4, 0x7C89, 0x7C2A, 0x7BC6, 0x7B5D, 0x7AEF, 0x7A7D, 0x7A06, 0x798A, 0x790A, + 0x7885, 0x77FB, 0x776C, 0x76D9, 0x7642, 0x75A6, 0x7505, 0x7460, 0x73B6, 0x7308, 0x7255, 0x719E, 0x70E3, + 0x7023, 0x6F5F, 0x6E97, 0x6DCA, 0x6CF9, 0x6C24, 0x6B4B, 0x6A6E, 0x698C, 0x68A7, 0x67BD, 0x66D0, 0x65DE, + 0x64E9, 0x63EF, 0x62F2, 0x61F1, 0x60EC, 0x5FE4, 0x5ED7, 0x5DC8, 0x5CB4, 0x5B9D, 0x5A82, 0x5964, 0x5843, + 0x571E, 0x55F6, 0x54CA, 0x539B, 0x5269, 0x5134, 0x4FFB, 0x4EC0, 0x4D81, 0x4C40, 0x4AFB, 0x49B4, 0x486A, + 0x471D, 0x45CD, 0x447B, 0x4326, 0x41CE, 0x4074, 0x3F17, 0x3DB8, 0x3C57, 0x3AF3, 0x398D, 0x3825, 0x36BA, + 0x354E, 0x33DF, 0x326E, 0x30FC, 0x2F87, 0x2E11, 0x2C99, 0x2B1F, 0x29A4, 0x2827, 0x26A8, 0x2528, 0x23A7, + 0x2224, 0x209F, 0x1F1A, 0x1D93, 0x1C0C, 0x1A83, 0x18F9, 0x176E, 0x15E2, 0x1455, 0x12C8, 0x113A, 0x0FAB, + 0x0E1C, 0x0C8C, 0x0AFB, 0x096B, 0x07D9, 0x0648, 0x04B6, 0x0324, 0x0192, 0x0000, 0xFE6E, 0xFCDC, 0xFB4A, + 0xF9B8, 0xF827, 0xF695, 0xF505, 0xF374, 0xF1E4, 0xF055, 0xEEC6, 0xED38, 0xEBAB, 0xEA1E, 0xE892, 0xE707, + 0xE57D, 0xE3F4, 0xE26D, 0xE0E6, 0xDF61, 0xDDDC, 0xDC59, 0xDAD8, 0xD958, 0xD7D9, 0xD65C, 0xD4E1, 0xD367, + 0xD1EF, 0xD079, 0xCF04, 0xCD92, 0xCC21, 0xCAB2, 0xC946, 0xC7DB, 0xC673, 0xC50D, 0xC3A9, 0xC248, 0xC0E9, + 0xBF8C, 0xBE32, 0xBCDA, 0xBB85, 0xBA33, 0xB8E3, 0xB796, 0xB64C, 0xB505, 0xB3C0, 0xB27F, 0xB140, 0xB005, + 0xAECC, 0xAD97, 0xAC65, 0xAB36, 0xAA0A, 0xA8E2, 0xA7BD, 0xA69C, 0xA57E, 0xA463, 0xA34C, 0xA238, 0xA129, + 0xA01C, 0x9F14, 0x9E0F, 0x9D0E, 0x9C11, 0x9B17, 0x9A22, 0x9930, 0x9843, 0x9759, 0x9674, 0x9592, 0x94B5, + 0x93DC, 0x9307, 0x9236, 0x9169, 0x90A1, 0x8FDD, 0x8F1D, 0x8E62, 0x8DAB, 0x8CF8, 0x8C4A, 0x8BA0, 0x8AFB, + 0x8A5A, 0x89BE, 0x8927, 0x8894, 0x8805, 0x877B, 0x86F6, 0x8676, 0x85FA, 0x8583, 0x8511, 0x84A3, 0x843A, + 0x83D6, 0x8377, 0x831C, 0x82C6, 0x8276, 0x822A, 0x81E2, 0x81A0, 0x8163, 0x812A, 0x80F6, 0x80C8, 0x809E, + 0x8079, 0x8059, 0x803E, 0x8027, 0x8016, 0x800A, 0x8002, 0x8000, 0x8002, 0x800A, 0x8016, 0x8027, 0x803E, + 0x8059, 0x8079, 0x809E, 0x80C8, 0x80F6, 0x812A, 0x8163, 0x81A0, 0x81E2, 0x822A, 0x8276, 0x82C6, 0x831C, + 0x8377, 0x83D6, 0x843A, 0x84A3, 0x8511, 0x8583, 0x85FA, 0x8676, 0x86F6, 0x877B, 0x8805, 0x8894, 0x8927, + 0x89BE, 0x8A5A, 0x8AFB, 0x8BA0, 0x8C4A, 0x8CF8, 0x8DAB, 0x8E62, 0x8F1D, 0x8FDD, 0x90A1, 0x9169, 0x9236, + 0x9307, 0x93DC, 0x94B5, 0x9592, 0x9674, 0x9759, 0x9843, 0x9930, 0x9A22, 0x9B17, 0x9C11, 0x9D0E, 0x9E0F, + 0x9F14, 0xA01C, 0xA129, 0xA238, 0xA34C, 0xA463, 0xA57E, 0xA69C, 0xA7BD, 0xA8E2, 0xAA0A, 0xAB36, 0xAC65, + 0xAD97, 0xAECC, 0xB005, 0xB140, 0xB27F, 0xB3C0, 0xB505, 0xB64C, 0xB796, 0xB8E3, 0xBA33, 0xBB85, 0xBCDA, + 0xBE32, 0xBF8C, 0xC0E9, 0xC248, 0xC3A9, 0xC50D, 0xC673, 0xC7DB, 0xC946, 0xCAB2, 0xCC21, 0xCD92, 0xCF04, + 0xD079, 0xD1EF, 0xD367, 0xD4E1, 0xD65C, 0xD7D9, 0xD958, 0xDAD8, 0xDC59, 0xDDDC, 0xDF61, 0xE0E6, 0xE26D, + 0xE3F4, 0xE57D, 0xE707, 0xE892, 0xEA1E, 0xEBAB, 0xED38, 0xEEC6, 0xF055, 0xF1E4, 0xF374, 0xF505, 0xF695, + 0xF827, 0xF9B8, 0xFB4A, 0xFCDC, 0xFE6E, 0x0000 +}; diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/CommonTables/arm_const_structs.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/CommonTables/arm_const_structs.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,156 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_const_structs.c +* +* Description: This file has constant structs that are initialized for +* user convenience. For example, some can be given as +* arguments to the arm_cfft_f32() function. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_const_structs.h" + +//Floating-point structs + +const arm_cfft_instance_f32 arm_cfft_sR_f32_len16 = { + 16, twiddleCoef_16, armBitRevIndexTable16, ARMBITREVINDEXTABLE__16_TABLE_LENGTH +}; + +const arm_cfft_instance_f32 arm_cfft_sR_f32_len32 = { + 32, twiddleCoef_32, armBitRevIndexTable32, ARMBITREVINDEXTABLE__32_TABLE_LENGTH +}; + +const arm_cfft_instance_f32 arm_cfft_sR_f32_len64 = { + 64, twiddleCoef_64, armBitRevIndexTable64, ARMBITREVINDEXTABLE__64_TABLE_LENGTH +}; + +const arm_cfft_instance_f32 arm_cfft_sR_f32_len128 = { + 128, twiddleCoef_128, armBitRevIndexTable128, ARMBITREVINDEXTABLE_128_TABLE_LENGTH +}; + +const arm_cfft_instance_f32 arm_cfft_sR_f32_len256 = { + 256, twiddleCoef_256, armBitRevIndexTable256, ARMBITREVINDEXTABLE_256_TABLE_LENGTH +}; + +const arm_cfft_instance_f32 arm_cfft_sR_f32_len512 = { + 512, twiddleCoef_512, armBitRevIndexTable512, ARMBITREVINDEXTABLE_512_TABLE_LENGTH +}; + +const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024 = { + 1024, twiddleCoef_1024, armBitRevIndexTable1024, ARMBITREVINDEXTABLE1024_TABLE_LENGTH +}; + +const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048 = { + 2048, twiddleCoef_2048, armBitRevIndexTable2048, ARMBITREVINDEXTABLE2048_TABLE_LENGTH +}; + +const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096 = { + 4096, twiddleCoef_4096, armBitRevIndexTable4096, ARMBITREVINDEXTABLE4096_TABLE_LENGTH +}; + +//Fixed-point structs + +const arm_cfft_instance_q31 arm_cfft_sR_q31_len16 = { + 16, twiddleCoef_16_q31, armBitRevIndexTable_fixed_16, ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH +}; + +const arm_cfft_instance_q31 arm_cfft_sR_q31_len32 = { + 32, twiddleCoef_32_q31, armBitRevIndexTable_fixed_32, ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH +}; + +const arm_cfft_instance_q31 arm_cfft_sR_q31_len64 = { + 64, twiddleCoef_64_q31, armBitRevIndexTable_fixed_64, ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH +}; + +const arm_cfft_instance_q31 arm_cfft_sR_q31_len128 = { + 128, twiddleCoef_128_q31, armBitRevIndexTable_fixed_128, ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH +}; + +const arm_cfft_instance_q31 arm_cfft_sR_q31_len256 = { + 256, twiddleCoef_256_q31, armBitRevIndexTable_fixed_256, ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH +}; + +const arm_cfft_instance_q31 arm_cfft_sR_q31_len512 = { + 512, twiddleCoef_512_q31, armBitRevIndexTable_fixed_512, ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH +}; + +const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024 = { + 1024, twiddleCoef_1024_q31, armBitRevIndexTable_fixed_1024, ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH +}; + +const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048 = { + 2048, twiddleCoef_2048_q31, armBitRevIndexTable_fixed_2048, ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH +}; + +const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096 = { + 4096, twiddleCoef_4096_q31, armBitRevIndexTable_fixed_4096, ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH +}; + + +const arm_cfft_instance_q15 arm_cfft_sR_q15_len16 = { + 16, twiddleCoef_16_q15, armBitRevIndexTable_fixed_16, ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH +}; + +const arm_cfft_instance_q15 arm_cfft_sR_q15_len32 = { + 32, twiddleCoef_32_q15, armBitRevIndexTable_fixed_32, ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH +}; + +const arm_cfft_instance_q15 arm_cfft_sR_q15_len64 = { + 64, twiddleCoef_64_q15, armBitRevIndexTable_fixed_64, ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH +}; + +const arm_cfft_instance_q15 arm_cfft_sR_q15_len128 = { + 128, twiddleCoef_128_q15, armBitRevIndexTable_fixed_128, ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH +}; + +const arm_cfft_instance_q15 arm_cfft_sR_q15_len256 = { + 256, twiddleCoef_256_q15, armBitRevIndexTable_fixed_256, ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH +}; + +const arm_cfft_instance_q15 arm_cfft_sR_q15_len512 = { + 512, twiddleCoef_512_q15, armBitRevIndexTable_fixed_512, ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH +}; + +const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024 = { + 1024, twiddleCoef_1024_q15, armBitRevIndexTable_fixed_1024, ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH +}; + +const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048 = { + 2048, twiddleCoef_2048_q15, armBitRevIndexTable_fixed_2048, ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH +}; + +const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096 = { + 4096, twiddleCoef_4096_q15, armBitRevIndexTable_fixed_4096, ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH +}; diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,182 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cmplx_conj_f32.c +* +* Description: Floating-point complex conjugate. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ +#include "arm_math.h" + +/** + * @ingroup groupCmplxMath + */ + +/** + * @defgroup cmplx_conj Complex Conjugate + * + * Conjugates the elements of a complex data vector. + * + * The pSrc points to the source data and + * pDst points to the where the result should be written. + * numSamples specifies the number of complex samples + * and the data in each array is stored in an interleaved fashion + * (real, imag, real, imag, ...). + * Each array has a total of 2*numSamples values. + * The underlying algorithm is used: + * + *
        
+ * for(n=0; n        
+ *        
+ * There are separate functions for floating-point, Q15, and Q31 data types.        
+ */
+
+/**        
+ * @addtogroup cmplx_conj        
+ * @{        
+ */
+
+/**        
+ * @brief  Floating-point complex conjugate.        
+ * @param  *pSrc points to the input vector        
+ * @param  *pDst points to the output vector        
+ * @param  numSamples number of complex samples in each vector        
+ * @return none.        
+ */
+
+void arm_cmplx_conj_f32(
+  float32_t * pSrc,
+  float32_t * pDst,
+  uint32_t numSamples)
+{
+  uint32_t blkCnt;                               /* loop counter */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  float32_t inR1, inR2, inR3, inR4;
+  float32_t inI1, inI2, inI3, inI4;
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.        
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[0]+jC[1] = A[0]+ j (-1) A[1] */
+    /* Calculate Complex Conjugate and then store the results in the destination buffer. */
+    /* read real input samples */
+    inR1 = pSrc[0];
+    /* store real samples to destination */
+    pDst[0] = inR1;
+    inR2 = pSrc[2];
+    pDst[2] = inR2;
+    inR3 = pSrc[4];
+    pDst[4] = inR3;
+    inR4 = pSrc[6];
+    pDst[6] = inR4;
+
+    /* read imaginary input samples */
+    inI1 = pSrc[1];
+    inI2 = pSrc[3];
+
+    /* conjugate input */
+    inI1 = -inI1;
+
+    /* read imaginary input samples */
+    inI3 = pSrc[5];
+
+    /* conjugate input */
+    inI2 = -inI2;
+
+    /* read imaginary input samples */
+    inI4 = pSrc[7];
+
+    /* conjugate input */
+    inI3 = -inI3;
+
+    /* store imaginary samples to destination */
+    pDst[1] = inI1;
+    pDst[3] = inI2;
+
+    /* conjugate input */
+    inI4 = -inI4;
+
+    /* store imaginary samples to destination */
+    pDst[5] = inI3;
+
+    /* increment source pointer by 8 to process next sampels */
+    pSrc += 8u;
+
+    /* store imaginary sample to destination */
+    pDst[7] = inI4;
+
+    /* increment destination pointer by 8 to store next samples */
+    pDst += 8u;
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.        
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+  blkCnt = numSamples;
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+  while(blkCnt > 0u)
+  {
+    /* realOut + j (imagOut) = realIn + j (-1) imagIn */
+    /* Calculate Complex Conjugate and then store the results in the destination buffer. */
+    *pDst++ = *pSrc++;
+    *pDst++ = -*pSrc++;
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+}
+
+/**        
+ * @} end of cmplx_conj group        
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,161 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. October 2015
+* $Revision: 	V.1.4.5 a
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_conj_q15.c    
+*    
+* Description:	Q15 complex conjugate.    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.   
+* ---------------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @addtogroup cmplx_conj    
+ * @{    
+ */
+
+/**    
+ * @brief  Q15 complex conjugate.    
+ * @param  *pSrc points to the input vector    
+ * @param  *pDst points to the output vector    
+ * @param  numSamples number of complex samples in each vector    
+ * @return none.    
+ *    
+ * Scaling and Overflow Behavior:    
+ * \par    
+ * The function uses saturating arithmetic.    
+ * The Q15 value -1 (0x8000) will be saturated to the maximum allowable positive value 0x7FFF.    
+ */
+
+void arm_cmplx_conj_q15(
+  q15_t * pSrc,
+  q15_t * pDst,
+  uint32_t numSamples)
+{
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counter */
+  q31_t in1, in2, in3, in4;
+  q31_t zero = 0;
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[0]+jC[1] = A[0]+ j (-1) A[1] */
+    /* Calculate Complex Conjugate and then store the results in the destination buffer. */
+    in1 = *__SIMD32(pSrc)++;
+    in2 = *__SIMD32(pSrc)++;
+    in3 = *__SIMD32(pSrc)++;
+    in4 = *__SIMD32(pSrc)++;
+
+#ifndef ARM_MATH_BIG_ENDIAN
+
+    in1 = __QASX(zero, in1);
+    in2 = __QASX(zero, in2);
+    in3 = __QASX(zero, in3);
+    in4 = __QASX(zero, in4);
+
+#else
+
+    in1 = __QSAX(zero, in1);
+    in2 = __QSAX(zero, in2);
+    in3 = __QSAX(zero, in3);
+    in4 = __QSAX(zero, in4);
+
+#endif /* #ifndef ARM_MATH_BIG_ENDIAN */
+
+    in1 = ((uint32_t) in1 >> 16) | ((uint32_t) in1 << 16);
+    in2 = ((uint32_t) in2 >> 16) | ((uint32_t) in2 << 16);
+    in3 = ((uint32_t) in3 >> 16) | ((uint32_t) in3 << 16);
+    in4 = ((uint32_t) in4 >> 16) | ((uint32_t) in4 << 16);
+
+    *__SIMD32(pDst)++ = in1;
+    *__SIMD32(pDst)++ = in2;
+    *__SIMD32(pDst)++ = in3;
+    *__SIMD32(pDst)++ = in4;
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+    /* C[0]+jC[1] = A[0]+ j (-1) A[1] */
+    /* Calculate Complex Conjugate and then store the results in the destination buffer. */
+    *pDst++ = *pSrc++;
+    *pDst++ = __SSAT(-*pSrc++, 16);
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+#else
+
+  q15_t in;
+
+  /* Run the below code for Cortex-M0 */
+
+  while(numSamples > 0u)
+  {
+    /* realOut + j (imagOut) = realIn+ j (-1) imagIn */
+    /* Calculate Complex Conjugate and then store the results in the destination buffer. */
+    *pDst++ = *pSrc++;
+    in = *pSrc++;
+    *pDst++ = (in == (q15_t) 0x8000) ? 0x7fff : -in;
+
+    /* Decrement the loop counter */
+    numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+}
+
+/**    
+ * @} end of cmplx_conj group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,180 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_conj_q31.c    
+*    
+* Description:	Q31 complex conjugate.    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.    
+* ---------------------------------------------------------------------------- */
+#include "arm_math.h"
+
+/**        
+ * @ingroup groupCmplxMath        
+ */
+
+/**        
+ * @addtogroup cmplx_conj        
+ * @{        
+ */
+
+/**        
+ * @brief  Q31 complex conjugate.        
+ * @param  *pSrc points to the input vector        
+ * @param  *pDst points to the output vector        
+ * @param  numSamples number of complex samples in each vector        
+ * @return none.        
+ *        
+ * Scaling and Overflow Behavior:        
+ * \par        
+ * The function uses saturating arithmetic.        
+ * The Q31 value -1 (0x80000000) will be saturated to the maximum allowable positive value 0x7FFFFFFF.        
+ */
+
+void arm_cmplx_conj_q31(
+  q31_t * pSrc,
+  q31_t * pDst,
+  uint32_t numSamples)
+{
+  uint32_t blkCnt;                               /* loop counter */
+  q31_t in;                                      /* Input value */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  q31_t inR1, inR2, inR3, inR4;                  /* Temporary real variables */
+  q31_t inI1, inI2, inI3, inI4;                  /* Temporary imaginary variables */
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.        
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[0]+jC[1] = A[0]+ j (-1) A[1] */
+    /* Calculate Complex Conjugate and then store the results in the destination buffer. */
+    /* Saturated to 0x7fffffff if the input is -1(0x80000000) */
+    /* read real input sample */
+    inR1 = pSrc[0];
+    /* store real input sample */
+    pDst[0] = inR1;
+
+    /* read imaginary input sample */
+    inI1 = pSrc[1];
+
+    /* read real input sample */
+    inR2 = pSrc[2];
+    /* store real input sample */
+    pDst[2] = inR2;
+
+    /* read imaginary input sample */
+    inI2 = pSrc[3];
+
+    /* negate imaginary input sample */
+    inI1 = __QSUB(0, inI1);
+
+    /* read real input sample */
+    inR3 = pSrc[4];
+    /* store real input sample */
+    pDst[4] = inR3;
+
+    /* read imaginary input sample */
+    inI3 = pSrc[5];
+
+    /* negate imaginary input sample */
+    inI2 = __QSUB(0, inI2);
+
+    /* read real input sample */
+    inR4 = pSrc[6];
+    /* store real input sample */
+    pDst[6] = inR4;
+
+    /* negate imaginary input sample */
+    inI3 = __QSUB(0, inI3);
+
+    /* store imaginary input sample */
+    inI4 = pSrc[7];
+
+    /* store imaginary input samples */
+    pDst[1] = inI1;
+
+    /* negate imaginary input sample */
+    inI4 = __QSUB(0, inI4);
+
+    /* store imaginary input samples */
+    pDst[3] = inI2;
+
+    /* increment source pointer by 8 to proecess next samples */
+    pSrc += 8u;
+
+    /* store imaginary input samples */
+    pDst[5] = inI3;
+    pDst[7] = inI4;
+
+    /* increment destination pointer by 8 to process next samples */
+    pDst += 8u;
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.        
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+  blkCnt = numSamples;
+
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+  while(blkCnt > 0u)
+  {
+    /* C[0]+jC[1] = A[0]+ j (-1) A[1] */
+    /* Calculate Complex Conjugate and then store the results in the destination buffer. */
+    /* Saturated to 0x7fffffff if the input is -1(0x80000000) */
+    *pDst++ = *pSrc++;
+    in = *pSrc++;
+    *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in;
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+}
+
+/**        
+ * @} end of cmplx_conj group        
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,203 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_dot_prod_f32.c    
+*    
+* Description:	Floating-point complex dot product    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.    
+* ---------------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @defgroup cmplx_dot_prod Complex Dot Product    
+ *    
+ * Computes the dot product of two complex vectors.    
+ * The vectors are multiplied element-by-element and then summed.    
+ *   
+ * The pSrcA points to the first complex input vector and    
+ * pSrcB points to the second complex input vector.    
+ * numSamples specifies the number of complex samples    
+ * and the data in each array is stored in an interleaved fashion    
+ * (real, imag, real, imag, ...).    
+ * Each array has a total of 2*numSamples values.    
+ *    
+ * The underlying algorithm is used:    
+ * 
    
+ * realResult=0;    
+ * imagResult=0;    
+ * for(n=0; n    
+ *    
+ * There are separate functions for floating-point, Q15, and Q31 data types.    
+ */
+
+/**    
+ * @addtogroup cmplx_dot_prod    
+ * @{    
+ */
+
+/**    
+ * @brief  Floating-point complex dot product    
+ * @param  *pSrcA points to the first input vector    
+ * @param  *pSrcB points to the second input vector    
+ * @param  numSamples number of complex samples in each vector    
+ * @param  *realResult real part of the result returned here    
+ * @param  *imagResult imaginary part of the result returned here    
+ * @return none.    
+ */
+
+void arm_cmplx_dot_prod_f32(
+  float32_t * pSrcA,
+  float32_t * pSrcB,
+  uint32_t numSamples,
+  float32_t * realResult,
+  float32_t * imagResult)
+{
+  float32_t real_sum = 0.0f, imag_sum = 0.0f;    /* Temporary result storage */
+  float32_t a0,b0,c0,d0;
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counter */
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += a0 * c0;
+      imag_sum += a0 * d0;
+      real_sum -= b0 * d0;
+      imag_sum += b0 * c0;
+    
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++; 
+  
+      real_sum += a0 * c0;
+      imag_sum += a0 * d0;
+      real_sum -= b0 * d0;
+      imag_sum += b0 * c0;
+      
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += a0 * c0;
+      imag_sum += a0 * d0;
+      real_sum -= b0 * d0;
+      imag_sum += b0 * c0;
+    
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++; 
+  
+      real_sum += a0 * c0;
+      imag_sum += a0 * d0;
+      real_sum -= b0 * d0;
+      imag_sum += b0 * c0;
+
+      /* Decrement the loop counter */
+      blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples & 0x3u;
+
+  while(blkCnt > 0u)
+  {
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += a0 * c0;
+      imag_sum += a0 * d0;
+      real_sum -= b0 * d0;
+      imag_sum += b0 * c0;
+
+      /* Decrement the loop counter */
+      blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  while(numSamples > 0u)
+  {
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += a0 * c0;
+      imag_sum += a0 * d0;
+      real_sum -= b0 * d0;
+      imag_sum += b0 * c0;
+
+      /* Decrement the loop counter */
+      numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+  /* Store the real and imaginary results in the destination buffers */
+  *realResult = real_sum;
+  *imagResult = imag_sum;
+}
+
+/**    
+ * @} end of cmplx_dot_prod group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,189 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_dot_prod_q15.c    
+*    
+* Description:	Processing function for the Q15 Complex Dot product    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.  
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @addtogroup cmplx_dot_prod    
+ * @{    
+ */
+
+/**    
+ * @brief  Q15 complex dot product    
+ * @param  *pSrcA points to the first input vector    
+ * @param  *pSrcB points to the second input vector    
+ * @param  numSamples number of complex samples in each vector    
+ * @param  *realResult real part of the result returned here    
+ * @param  *imagResult imaginary part of the result returned here    
+ * @return none.    
+ *    
+ * Scaling and Overflow Behavior:    
+ * \par    
+ * The function is implemented using an internal 64-bit accumulator.    
+ * The intermediate 1.15 by 1.15 multiplications are performed with full precision and yield a 2.30 result.    
+ * These are accumulated in a 64-bit accumulator with 34.30 precision.    
+ * As a final step, the accumulators are converted to 8.24 format.    
+ * The return results realResult and imagResult are in 8.24 format.    
+ */
+
+void arm_cmplx_dot_prod_q15(
+  q15_t * pSrcA,
+  q15_t * pSrcB,
+  uint32_t numSamples,
+  q31_t * realResult,
+  q31_t * imagResult)
+{
+  q63_t real_sum = 0, imag_sum = 0;              /* Temporary result storage */
+  q15_t a0,b0,c0,d0;
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counter */
+
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += (q31_t)a0 * c0;
+      imag_sum += (q31_t)a0 * d0;
+      real_sum -= (q31_t)b0 * d0;
+      imag_sum += (q31_t)b0 * c0;
+      
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += (q31_t)a0 * c0;
+      imag_sum += (q31_t)a0 * d0;
+      real_sum -= (q31_t)b0 * d0;
+      imag_sum += (q31_t)b0 * c0;
+      
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += (q31_t)a0 * c0;
+      imag_sum += (q31_t)a0 * d0;
+      real_sum -= (q31_t)b0 * d0;
+      imag_sum += (q31_t)b0 * c0;
+      
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += (q31_t)a0 * c0;
+      imag_sum += (q31_t)a0 * d0;
+      real_sum -= (q31_t)b0 * d0;
+      imag_sum += (q31_t)b0 * c0;
+
+      /* Decrement the loop counter */
+      blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += (q31_t)a0 * c0;
+      imag_sum += (q31_t)a0 * d0;
+      real_sum -= (q31_t)b0 * d0;
+      imag_sum += (q31_t)b0 * c0;
+
+      /* Decrement the loop counter */
+      blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  while(numSamples > 0u)
+  {
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += a0 * c0;
+      imag_sum += a0 * d0;
+      real_sum -= b0 * d0;
+      imag_sum += b0 * c0;
+
+
+      /* Decrement the loop counter */
+      numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+  /* Store the real and imaginary results in 8.24 format  */
+  /* Convert real data in 34.30 to 8.24 by 6 right shifts */
+  *realResult = (q31_t) (real_sum >> 6);
+  /* Convert imaginary data in 34.30 to 8.24 by 6 right shifts */
+  *imagResult = (q31_t) (imag_sum >> 6);
+}
+
+/**    
+ * @} end of cmplx_dot_prod group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,187 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_dot_prod_q31.c    
+*    
+* Description:	Q31 complex dot product    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.   
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @addtogroup cmplx_dot_prod    
+ * @{    
+ */
+
+/**    
+ * @brief  Q31 complex dot product    
+ * @param  *pSrcA points to the first input vector    
+ * @param  *pSrcB points to the second input vector    
+ * @param  numSamples number of complex samples in each vector    
+ * @param  *realResult real part of the result returned here    
+ * @param  *imagResult imaginary part of the result returned here    
+ * @return none.    
+ *    
+ * Scaling and Overflow Behavior:    
+ * \par    
+ * The function is implemented using an internal 64-bit accumulator.    
+ * The intermediate 1.31 by 1.31 multiplications are performed with 64-bit precision and then shifted to 16.48 format.    
+ * The internal real and imaginary accumulators are in 16.48 format and provide 15 guard bits.    
+ * Additions are nonsaturating and no overflow will occur as long as numSamples is less than 32768.    
+ * The return results realResult and imagResult are in 16.48 format.    
+ * Input down scaling is not required.    
+ */
+
+void arm_cmplx_dot_prod_q31(
+  q31_t * pSrcA,
+  q31_t * pSrcB,
+  uint32_t numSamples,
+  q63_t * realResult,
+  q63_t * imagResult)
+{
+  q63_t real_sum = 0, imag_sum = 0;              /* Temporary result storage */
+  q31_t a0,b0,c0,d0;
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counter */
+
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += ((q63_t)a0 * c0) >> 14;
+      imag_sum += ((q63_t)a0 * d0) >> 14;
+      real_sum -= ((q63_t)b0 * d0) >> 14;
+      imag_sum += ((q63_t)b0 * c0) >> 14;
+      
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += ((q63_t)a0 * c0) >> 14;
+      imag_sum += ((q63_t)a0 * d0) >> 14;
+      real_sum -= ((q63_t)b0 * d0) >> 14;
+      imag_sum += ((q63_t)b0 * c0) >> 14;
+      
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += ((q63_t)a0 * c0) >> 14;
+      imag_sum += ((q63_t)a0 * d0) >> 14;
+      real_sum -= ((q63_t)b0 * d0) >> 14;
+      imag_sum += ((q63_t)b0 * c0) >> 14;
+      
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += ((q63_t)a0 * c0) >> 14;
+      imag_sum += ((q63_t)a0 * d0) >> 14;
+      real_sum -= ((q63_t)b0 * d0) >> 14;
+      imag_sum += ((q63_t)b0 * c0) >> 14;
+
+      /* Decrement the loop counter */
+      blkCnt--;
+  }
+
+  /* If the numSamples  is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += ((q63_t)a0 * c0) >> 14;
+      imag_sum += ((q63_t)a0 * d0) >> 14;
+      real_sum -= ((q63_t)b0 * d0) >> 14;
+      imag_sum += ((q63_t)b0 * c0) >> 14;
+
+      /* Decrement the loop counter */
+      blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  while(numSamples > 0u)
+  {
+      a0 = *pSrcA++;
+      b0 = *pSrcA++;
+      c0 = *pSrcB++;
+      d0 = *pSrcB++;  
+  
+      real_sum += ((q63_t)a0 * c0) >> 14;
+      imag_sum += ((q63_t)a0 * d0) >> 14;
+      real_sum -= ((q63_t)b0 * d0) >> 14;
+      imag_sum += ((q63_t)b0 * c0) >> 14;
+
+      /* Decrement the loop counter */
+      numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+  /* Store the real and imaginary results in 16.48 format  */
+  *realResult = real_sum;
+  *imagResult = imag_sum;
+}
+
+/**    
+ * @} end of cmplx_dot_prod group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,165 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_mag_f32.c    
+*    
+* Description:	Floating-point complex magnitude.    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.  
+* ---------------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @defgroup cmplx_mag Complex Magnitude    
+ *    
+ * Computes the magnitude of the elements of a complex data vector.    
+ *   
+ * The pSrc points to the source data and    
+ * pDst points to the where the result should be written.    
+ * numSamples specifies the number of complex samples    
+ * in the input array and the data is stored in an interleaved fashion    
+ * (real, imag, real, imag, ...).    
+ * The input array has a total of 2*numSamples values;    
+ * the output array has a total of numSamples values.    
+ * The underlying algorithm is used:    
+ *    
+ * 
    
+ * for(n=0; n    
+ *    
+ * There are separate functions for floating-point, Q15, and Q31 data types.    
+ */
+
+/**    
+ * @addtogroup cmplx_mag    
+ * @{    
+ */
+/**    
+ * @brief Floating-point complex magnitude.    
+ * @param[in]       *pSrc points to complex input buffer    
+ * @param[out]      *pDst points to real output buffer    
+ * @param[in]       numSamples number of complex samples in the input vector    
+ * @return none.    
+ *    
+ */
+
+
+void arm_cmplx_mag_f32(
+  float32_t * pSrc,
+  float32_t * pDst,
+  uint32_t numSamples)
+{
+  float32_t realIn, imagIn;                      /* Temporary variables to hold input values */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counter */
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+
+    /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */
+    realIn = *pSrc++;
+    imagIn = *pSrc++;
+    /* store the result in the destination buffer. */
+    arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++);
+
+    realIn = *pSrc++;
+    imagIn = *pSrc++;
+    arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++);
+
+    realIn = *pSrc++;
+    imagIn = *pSrc++;
+    arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++);
+
+    realIn = *pSrc++;
+    imagIn = *pSrc++;
+    arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++);
+
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+    /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */
+    realIn = *pSrc++;
+    imagIn = *pSrc++;
+    /* store the result in the destination buffer. */
+    arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++);
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  while(numSamples > 0u)
+  {
+    /* out = sqrt((real * real) + (imag * imag)) */
+    realIn = *pSrc++;
+    imagIn = *pSrc++;
+    /* store the result in the destination buffer. */
+    arm_sqrt_f32((realIn * realIn) + (imagIn * imagIn), pDst++);
+
+    /* Decrement the loop counter */
+    numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+}
+
+/**    
+ * @} end of cmplx_mag group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,153 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_mag_q15.c    
+*    
+* Description:	Q15 complex magnitude.    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.  
+* ---------------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @addtogroup cmplx_mag    
+ * @{    
+ */
+
+
+/**    
+ * @brief  Q15 complex magnitude    
+ * @param  *pSrc points to the complex input vector    
+ * @param  *pDst points to the real output vector    
+ * @param  numSamples number of complex samples in the input vector    
+ * @return none.    
+ *    
+ * Scaling and Overflow Behavior:    
+ * \par    
+ * The function implements 1.15 by 1.15 multiplications and finally output is converted into 2.14 format.    
+ */
+
+void arm_cmplx_mag_q15(
+  q15_t * pSrc,
+  q15_t * pDst,
+  uint32_t numSamples)
+{
+  q31_t acc0, acc1;                              /* Accumulators */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counter */
+  q31_t in1, in2, in3, in4;
+  q31_t acc2, acc3;
+
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+
+    /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */
+    in1 = *__SIMD32(pSrc)++;
+    in2 = *__SIMD32(pSrc)++;
+    in3 = *__SIMD32(pSrc)++;
+    in4 = *__SIMD32(pSrc)++;
+
+    acc0 = __SMUAD(in1, in1);
+    acc1 = __SMUAD(in2, in2);
+    acc2 = __SMUAD(in3, in3);
+    acc3 = __SMUAD(in4, in4);
+
+    /* store the result in 2.14 format in the destination buffer. */
+    arm_sqrt_q15((q15_t) ((acc0) >> 17), pDst++);
+    arm_sqrt_q15((q15_t) ((acc1) >> 17), pDst++);
+    arm_sqrt_q15((q15_t) ((acc2) >> 17), pDst++);
+    arm_sqrt_q15((q15_t) ((acc3) >> 17), pDst++);
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+    /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */
+    in1 = *__SIMD32(pSrc)++;
+    acc0 = __SMUAD(in1, in1);
+
+    /* store the result in 2.14 format in the destination buffer. */
+    arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++);
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+  q15_t real, imag;                              /* Temporary variables to hold input values */
+
+  while(numSamples > 0u)
+  {
+    /* out = sqrt(real * real + imag * imag) */
+    real = *pSrc++;
+    imag = *pSrc++;
+
+    acc0 = (real * real);
+    acc1 = (imag * imag);
+
+    /* store the result in 2.14 format in the destination buffer. */
+    arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++);
+
+    /* Decrement the loop counter */
+    numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+}
+
+/**    
+ * @} end of cmplx_mag group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,185 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_mag_q31.c    
+*    
+* Description:	Q31 complex magnitude    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.  
+* ---------------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**        
+ * @ingroup groupCmplxMath        
+ */
+
+/**        
+ * @addtogroup cmplx_mag        
+ * @{        
+ */
+
+/**        
+ * @brief  Q31 complex magnitude        
+ * @param  *pSrc points to the complex input vector        
+ * @param  *pDst points to the real output vector        
+ * @param  numSamples number of complex samples in the input vector        
+ * @return none.        
+ *        
+ * Scaling and Overflow Behavior:        
+ * \par        
+ * The function implements 1.31 by 1.31 multiplications and finally output is converted into 2.30 format.        
+ * Input down scaling is not required.        
+ */
+
+void arm_cmplx_mag_q31(
+  q31_t * pSrc,
+  q31_t * pDst,
+  uint32_t numSamples)
+{
+  q31_t real, imag;                              /* Temporary variables to hold input values */
+  q31_t acc0, acc1;                              /* Accumulators */
+  uint32_t blkCnt;                               /* loop counter */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  q31_t real1, real2, imag1, imag2;              /* Temporary variables to hold input values */
+  q31_t out1, out2, out3, out4;                  /* Accumulators */
+  q63_t mul1, mul2, mul3, mul4;                  /* Temporary variables */
+
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.        
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* read complex input from source buffer */
+    real1 = pSrc[0];
+    imag1 = pSrc[1];
+    real2 = pSrc[2];
+    imag2 = pSrc[3];
+
+    /* calculate power of input values */
+    mul1 = (q63_t) real1 *real1;
+    mul2 = (q63_t) imag1 *imag1;
+    mul3 = (q63_t) real2 *real2;
+    mul4 = (q63_t) imag2 *imag2;
+
+    /* get the result to 3.29 format */
+    out1 = (q31_t) (mul1 >> 33);
+    out2 = (q31_t) (mul2 >> 33);
+    out3 = (q31_t) (mul3 >> 33);
+    out4 = (q31_t) (mul4 >> 33);
+
+    /* add real and imaginary accumulators */
+    out1 = out1 + out2;
+    out3 = out3 + out4;
+
+    /* read complex input from source buffer */
+    real1 = pSrc[4];
+    imag1 = pSrc[5];
+    real2 = pSrc[6];
+    imag2 = pSrc[7];
+
+    /* calculate square root */
+    arm_sqrt_q31(out1, &pDst[0]);
+
+    /* calculate power of input values */
+    mul1 = (q63_t) real1 *real1;
+
+    /* calculate square root */
+    arm_sqrt_q31(out3, &pDst[1]);
+
+    /* calculate power of input values */
+    mul2 = (q63_t) imag1 *imag1;
+    mul3 = (q63_t) real2 *real2;
+    mul4 = (q63_t) imag2 *imag2;
+
+    /* get the result to 3.29 format */
+    out1 = (q31_t) (mul1 >> 33);
+    out2 = (q31_t) (mul2 >> 33);
+    out3 = (q31_t) (mul3 >> 33);
+    out4 = (q31_t) (mul4 >> 33);
+
+    /* add real and imaginary accumulators */
+    out1 = out1 + out2;
+    out3 = out3 + out4;
+
+    /* calculate square root */
+    arm_sqrt_q31(out1, &pDst[2]);
+
+    /* increment destination by 8 to process next samples */
+    pSrc += 8u;
+
+    /* calculate square root */
+    arm_sqrt_q31(out3, &pDst[3]);
+
+    /* increment destination by 4 to process next samples */
+    pDst += 4u;
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.        
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+  blkCnt = numSamples;
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+  while(blkCnt > 0u)
+  {
+    /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */
+    real = *pSrc++;
+    imag = *pSrc++;
+    acc0 = (q31_t) (((q63_t) real * real) >> 33);
+    acc1 = (q31_t) (((q63_t) imag * imag) >> 33);
+    /* store the result in 2.30 format in the destination buffer. */
+    arm_sqrt_q31(acc0 + acc1, pDst++);
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+}
+
+/**        
+ * @} end of cmplx_mag group        
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,215 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_mag_squared_f32.c    
+*    
+* Description:	Floating-point complex magnitude squared.    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.  
+* ---------------------------------------------------------------------------- */
+#include "arm_math.h"
+
+/**        
+ * @ingroup groupCmplxMath        
+ */
+
+/**        
+ * @defgroup cmplx_mag_squared Complex Magnitude Squared        
+ *        
+ * Computes the magnitude squared of the elements of a complex data vector.        
+ *       
+ * The pSrc points to the source data and        
+ * pDst points to the where the result should be written.        
+ * numSamples specifies the number of complex samples        
+ * in the input array and the data is stored in an interleaved fashion        
+ * (real, imag, real, imag, ...).        
+ * The input array has a total of 2*numSamples values;        
+ * the output array has a total of numSamples values.        
+ *        
+ * The underlying algorithm is used:        
+ *        
+ * 
        
+ * for(n=0; n        
+ *        
+ * There are separate functions for floating-point, Q15, and Q31 data types.        
+ */
+
+/**        
+ * @addtogroup cmplx_mag_squared        
+ * @{        
+ */
+
+
+/**        
+ * @brief  Floating-point complex magnitude squared        
+ * @param[in]  *pSrc points to the complex input vector        
+ * @param[out]  *pDst points to the real output vector        
+ * @param[in]  numSamples number of complex samples in the input vector        
+ * @return none.        
+ */
+
+void arm_cmplx_mag_squared_f32(
+  float32_t * pSrc,
+  float32_t * pDst,
+  uint32_t numSamples)
+{
+  float32_t real, imag;                          /* Temporary variables to store real and imaginary values */
+  uint32_t blkCnt;                               /* loop counter */
+
+#ifndef ARM_MATH_CM0_FAMILY
+  float32_t real1, real2, real3, real4;          /* Temporary variables to hold real values */
+  float32_t imag1, imag2, imag3, imag4;          /* Temporary variables to hold imaginary values */
+  float32_t mul1, mul2, mul3, mul4;              /* Temporary variables */
+  float32_t mul5, mul6, mul7, mul8;              /* Temporary variables */
+  float32_t out1, out2, out3, out4;              /* Temporary variables to hold output values */
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.        
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[0] = (A[0] * A[0] + A[1] * A[1]) */
+    /* read real input sample from source buffer */
+    real1 = pSrc[0];
+    /* read imaginary input sample from source buffer */
+    imag1 = pSrc[1];
+
+    /* calculate power of real value */
+    mul1 = real1 * real1;
+
+    /* read real input sample from source buffer */
+    real2 = pSrc[2];
+
+    /* calculate power of imaginary value */
+    mul2 = imag1 * imag1;
+
+    /* read imaginary input sample from source buffer */
+    imag2 = pSrc[3];
+
+    /* calculate power of real value */
+    mul3 = real2 * real2;
+
+    /* read real input sample from source buffer */
+    real3 = pSrc[4];
+
+    /* calculate power of imaginary value */
+    mul4 = imag2 * imag2;
+
+    /* read imaginary input sample from source buffer */
+    imag3 = pSrc[5];
+
+    /* calculate power of real value */
+    mul5 = real3 * real3;
+    /* calculate power of imaginary value */
+    mul6 = imag3 * imag3;
+
+    /* read real input sample from source buffer */
+    real4 = pSrc[6];
+
+    /* accumulate real and imaginary powers */
+    out1 = mul1 + mul2;
+
+    /* read imaginary input sample from source buffer */
+    imag4 = pSrc[7];
+
+    /* accumulate real and imaginary powers */
+    out2 = mul3 + mul4;
+
+    /* calculate power of real value */
+    mul7 = real4 * real4;
+    /* calculate power of imaginary value */
+    mul8 = imag4 * imag4;
+
+    /* store output to destination */
+    pDst[0] = out1;
+
+    /* accumulate real and imaginary powers */
+    out3 = mul5 + mul6;
+
+    /* store output to destination */
+    pDst[1] = out2;
+
+    /* accumulate real and imaginary powers */
+    out4 = mul7 + mul8;
+
+    /* store output to destination */
+    pDst[2] = out3;
+
+    /* increment destination pointer by 8 to process next samples */
+    pSrc += 8u;
+
+    /* store output to destination */
+    pDst[3] = out4;
+
+    /* increment destination pointer by 4 to process next samples */
+    pDst += 4u;
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.        
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  blkCnt = numSamples;
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+  while(blkCnt > 0u)
+  {
+    /* C[0] = (A[0] * A[0] + A[1] * A[1]) */
+    real = *pSrc++;
+    imag = *pSrc++;
+
+    /* out = (real * real) + (imag * imag) */
+    /* store the result in the destination buffer. */
+    *pDst++ = (real * real) + (imag * imag);
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+}
+
+/**        
+ * @} end of cmplx_mag_squared group        
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,148 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_mag_squared_q15.c    
+*    
+* Description:	Q15 complex magnitude squared.    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.   
+* ---------------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @addtogroup cmplx_mag_squared    
+ * @{    
+ */
+
+/**    
+ * @brief  Q15 complex magnitude squared    
+ * @param  *pSrc points to the complex input vector    
+ * @param  *pDst points to the real output vector    
+ * @param  numSamples number of complex samples in the input vector    
+ * @return none.    
+ *    
+ * Scaling and Overflow Behavior:    
+ * \par    
+ * The function implements 1.15 by 1.15 multiplications and finally output is converted into 3.13 format.    
+ */
+
+void arm_cmplx_mag_squared_q15(
+  q15_t * pSrc,
+  q15_t * pDst,
+  uint32_t numSamples)
+{
+  q31_t acc0, acc1;                              /* Accumulators */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counter */
+  q31_t in1, in2, in3, in4;
+  q31_t acc2, acc3;
+
+  /*loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[0] = (A[0] * A[0] + A[1] * A[1]) */
+    in1 = *__SIMD32(pSrc)++;
+    in2 = *__SIMD32(pSrc)++;
+    in3 = *__SIMD32(pSrc)++;
+    in4 = *__SIMD32(pSrc)++;
+
+    acc0 = __SMUAD(in1, in1);
+    acc1 = __SMUAD(in2, in2);
+    acc2 = __SMUAD(in3, in3);
+    acc3 = __SMUAD(in4, in4);
+
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ = (q15_t) (acc0 >> 17);
+    *pDst++ = (q15_t) (acc1 >> 17);
+    *pDst++ = (q15_t) (acc2 >> 17);
+    *pDst++ = (q15_t) (acc3 >> 17);
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+    /* C[0] = (A[0] * A[0] + A[1] * A[1]) */
+    in1 = *__SIMD32(pSrc)++;
+    acc0 = __SMUAD(in1, in1);
+
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ = (q15_t) (acc0 >> 17);
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+  q15_t real, imag;                              /* Temporary variables to store real and imaginary values */
+
+  while(numSamples > 0u)
+  {
+    /* out = ((real * real) + (imag * imag)) */
+    real = *pSrc++;
+    imag = *pSrc++;
+    acc0 = (real * real);
+    acc1 = (imag * imag);
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17);
+
+    /* Decrement the loop counter */
+    numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+}
+
+/**    
+ * @} end of cmplx_mag_squared group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,161 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_cmplx_mag_squared_q31.c    
+*    
+* Description:	Q31 complex magnitude squared.    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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. 
+* ---------------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @addtogroup cmplx_mag_squared    
+ * @{    
+ */
+
+
+/**    
+ * @brief  Q31 complex magnitude squared    
+ * @param  *pSrc points to the complex input vector    
+ * @param  *pDst points to the real output vector    
+ * @param  numSamples number of complex samples in the input vector    
+ * @return none.    
+ *    
+ * Scaling and Overflow Behavior:    
+ * \par    
+ * The function implements 1.31 by 1.31 multiplications and finally output is converted into 3.29 format.    
+ * Input down scaling is not required.    
+ */
+
+void arm_cmplx_mag_squared_q31(
+  q31_t * pSrc,
+  q31_t * pDst,
+  uint32_t numSamples)
+{
+  q31_t real, imag;                              /* Temporary variables to store real and imaginary values */
+  q31_t acc0, acc1;                              /* Accumulators */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counter */
+
+  /* loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[0] = (A[0] * A[0] + A[1] * A[1]) */
+    real = *pSrc++;
+    imag = *pSrc++;
+    acc0 = (q31_t) (((q63_t) real * real) >> 33);
+    acc1 = (q31_t) (((q63_t) imag * imag) >> 33);
+    /* store the result in 3.29 format in the destination buffer. */
+    *pDst++ = acc0 + acc1;
+
+    real = *pSrc++;
+    imag = *pSrc++;
+    acc0 = (q31_t) (((q63_t) real * real) >> 33);
+    acc1 = (q31_t) (((q63_t) imag * imag) >> 33);
+    /* store the result in 3.29 format in the destination buffer. */
+    *pDst++ = acc0 + acc1;
+
+    real = *pSrc++;
+    imag = *pSrc++;
+    acc0 = (q31_t) (((q63_t) real * real) >> 33);
+    acc1 = (q31_t) (((q63_t) imag * imag) >> 33);
+    /* store the result in 3.29 format in the destination buffer. */
+    *pDst++ = acc0 + acc1;
+
+    real = *pSrc++;
+    imag = *pSrc++;
+    acc0 = (q31_t) (((q63_t) real * real) >> 33);
+    acc1 = (q31_t) (((q63_t) imag * imag) >> 33);
+    /* store the result in 3.29 format in the destination buffer. */
+    *pDst++ = acc0 + acc1;
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+    /* C[0] = (A[0] * A[0] + A[1] * A[1]) */
+    real = *pSrc++;
+    imag = *pSrc++;
+    acc0 = (q31_t) (((q63_t) real * real) >> 33);
+    acc1 = (q31_t) (((q63_t) imag * imag) >> 33);
+    /* store the result in 3.29 format in the destination buffer. */
+    *pDst++ = acc0 + acc1;
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  while(numSamples > 0u)
+  {
+    /* out = ((real * real) + (imag * imag)) */
+    real = *pSrc++;
+    imag = *pSrc++;
+    acc0 = (q31_t) (((q63_t) real * real) >> 33);
+    acc1 = (q31_t) (((q63_t) imag * imag) >> 33);
+    /* store the result in 3.29 format in the destination buffer. */
+    *pDst++ = acc0 + acc1;
+
+    /* Decrement the loop counter */
+    numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+}
+
+/**    
+ * @} end of cmplx_mag_squared group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,207 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_cmplx_mult_cmplx_f32.c    
+*    
+* Description:	Floating-point complex-by-complex multiplication    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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. 
+* -------------------------------------------------------------------- */
+#include "arm_math.h"
+
+/**        
+ * @ingroup groupCmplxMath        
+ */
+
+/**        
+ * @defgroup CmplxByCmplxMult Complex-by-Complex Multiplication        
+ *        
+ * Multiplies a complex vector by another complex vector and generates a complex result.        
+ * The data in the complex arrays is stored in an interleaved fashion        
+ * (real, imag, real, imag, ...).        
+ * The parameter numSamples represents the number of complex        
+ * samples processed.  The complex arrays have a total of 2*numSamples        
+ * real values.        
+ *        
+ * The underlying algorithm is used:        
+ *        
+ * 
        
+ * for(n=0; n        
+ *        
+ * There are separate functions for floating-point, Q15, and Q31 data types.        
+ */
+
+/**        
+ * @addtogroup CmplxByCmplxMult        
+ * @{        
+ */
+
+
+/**        
+ * @brief  Floating-point complex-by-complex multiplication        
+ * @param[in]  *pSrcA points to the first input vector        
+ * @param[in]  *pSrcB points to the second input vector        
+ * @param[out]  *pDst  points to the output vector        
+ * @param[in]  numSamples number of complex samples in each vector        
+ * @return none.        
+ */
+
+void arm_cmplx_mult_cmplx_f32(
+  float32_t * pSrcA,
+  float32_t * pSrcB,
+  float32_t * pDst,
+  uint32_t numSamples)
+{
+  float32_t a1, b1, c1, d1;                      /* Temporary variables to store real and imaginary values */
+  uint32_t blkCnt;                               /* loop counters */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  float32_t a2, b2, c2, d2;                      /* Temporary variables to store real and imaginary values */
+  float32_t acc1, acc2, acc3, acc4;
+
+
+  /* loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.        
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1].  */
+    /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i].  */
+    a1 = *pSrcA;                /* A[2 * i] */
+    c1 = *pSrcB;                /* B[2 * i] */
+
+    b1 = *(pSrcA + 1);          /* A[2 * i + 1] */
+    acc1 = a1 * c1;             /* acc1 = A[2 * i] * B[2 * i] */
+
+    a2 = *(pSrcA + 2);          /* A[2 * i + 2] */
+    acc2 = (b1 * c1);           /* acc2 = A[2 * i + 1] * B[2 * i] */
+
+    d1 = *(pSrcB + 1);          /* B[2 * i + 1] */
+    c2 = *(pSrcB + 2);          /* B[2 * i + 2] */
+    acc1 -= b1 * d1;            /* acc1 =      A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1] */
+
+    d2 = *(pSrcB + 3);          /* B[2 * i + 3] */
+    acc3 = a2 * c2;             /* acc3 =       A[2 * i + 2] * B[2 * i + 2] */
+
+    b2 = *(pSrcA + 3);          /* A[2 * i + 3] */
+    acc2 += (a1 * d1);          /* acc2 =      A[2 * i + 1] * B[2 * i] + A[2 * i] * B[2 * i + 1] */
+
+    a1 = *(pSrcA + 4);          /* A[2 * i + 4] */
+    acc4 = (a2 * d2);           /* acc4 =   A[2 * i + 2] * B[2 * i + 3] */
+
+    c1 = *(pSrcB + 4);          /* B[2 * i + 4] */
+    acc3 -= (b2 * d2);          /* acc3 =       A[2 * i + 2] * B[2 * i + 2] - A[2 * i + 3] * B[2 * i + 3] */
+    *pDst = acc1;               /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1] */
+
+    b1 = *(pSrcA + 5);          /* A[2 * i + 5] */
+    acc4 += b2 * c2;            /* acc4 =   A[2 * i + 2] * B[2 * i + 3] + A[2 * i + 3] * B[2 * i + 2] */
+
+    *(pDst + 1) = acc2;         /* C[2 * i + 1] = A[2 * i + 1] * B[2 * i] + A[2 * i] * B[2 * i + 1]  */
+    acc1 = (a1 * c1);
+
+    d1 = *(pSrcB + 5);
+    acc2 = (b1 * c1);
+
+    *(pDst + 2) = acc3;
+    *(pDst + 3) = acc4;
+
+    a2 = *(pSrcA + 6);
+    acc1 -= (b1 * d1);
+
+    c2 = *(pSrcB + 6);
+    acc2 += (a1 * d1);
+
+    b2 = *(pSrcA + 7);
+    acc3 = (a2 * c2);
+
+    d2 = *(pSrcB + 7);
+    acc4 = (b2 * c2);
+
+    *(pDst + 4) = acc1;
+    pSrcA += 8u;
+
+    acc3 -= (b2 * d2);
+    acc4 += (a2 * d2);
+
+    *(pDst + 5) = acc2;
+    pSrcB += 8u;
+
+    *(pDst + 6) = acc3;
+    *(pDst + 7) = acc4;
+
+    pDst += 8u;
+
+    /* Decrement the numSamples loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.        
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+  blkCnt = numSamples;
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1].  */
+    /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i].  */
+    a1 = *pSrcA++;
+    b1 = *pSrcA++;
+    c1 = *pSrcB++;
+    d1 = *pSrcB++;
+
+    /* store the result in the destination buffer. */
+    *pDst++ = (a1 * c1) - (b1 * d1);
+    *pDst++ = (a1 * d1) + (b1 * c1);
+
+    /* Decrement the numSamples loop counter */
+    blkCnt--;
+  }
+}
+
+/**        
+ * @} end of CmplxByCmplxMult group        
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,193 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_cmplx_mult_cmplx_q15.c    
+*    
+* Description:	Q15 complex-by-complex multiplication    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.   
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @addtogroup CmplxByCmplxMult    
+ * @{    
+ */
+
+/**    
+ * @brief  Q15 complex-by-complex multiplication    
+ * @param[in]  *pSrcA points to the first input vector    
+ * @param[in]  *pSrcB points to the second input vector    
+ * @param[out]  *pDst  points to the output vector    
+ * @param[in]  numSamples number of complex samples in each vector    
+ * @return none.    
+ *    
+ * Scaling and Overflow Behavior:    
+ * \par    
+ * The function implements 1.15 by 1.15 multiplications and finally output is converted into 3.13 format.    
+ */
+
+void arm_cmplx_mult_cmplx_q15(
+  q15_t * pSrcA,
+  q15_t * pSrcB,
+  q15_t * pDst,
+  uint32_t numSamples)
+{
+  q15_t a, b, c, d;                              /* Temporary variables to store real and imaginary values */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counters */
+
+  /* loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1].  */
+    /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i].  */
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17);
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17);
+
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17);
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17);
+
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17);
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17);
+
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17);
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17);
+
+    /* Decrement the blockSize loop counter */
+    blkCnt--;
+  }
+
+  /* If the blockSize is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1].  */
+    /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i].  */
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17);
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17);
+
+    /* Decrement the blockSize loop counter */
+    blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  while(numSamples > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1].  */
+    /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i].  */
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17);
+    /* store the result in 3.13 format in the destination buffer. */
+    *pDst++ =
+      (q15_t) (q31_t) (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17);
+
+    /* Decrement the blockSize loop counter */
+    numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+}
+
+/**    
+ * @} end of CmplxByCmplxMult group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,326 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_cmplx_mult_cmplx_q31.c    
+*    
+* Description:	Q31 complex-by-complex multiplication    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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. 
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @addtogroup CmplxByCmplxMult    
+ * @{    
+ */
+
+
+/**    
+ * @brief  Q31 complex-by-complex multiplication    
+ * @param[in]  *pSrcA points to the first input vector    
+ * @param[in]  *pSrcB points to the second input vector    
+ * @param[out]  *pDst  points to the output vector    
+ * @param[in]  numSamples number of complex samples in each vector    
+ * @return none.    
+ *    
+ * Scaling and Overflow Behavior:    
+ * \par    
+ * The function implements 1.31 by 1.31 multiplications and finally output is converted into 3.29 format.    
+ * Input down scaling is not required.    
+ */
+
+void arm_cmplx_mult_cmplx_q31(
+  q31_t * pSrcA,
+  q31_t * pSrcB,
+  q31_t * pDst,
+  uint32_t numSamples)
+{
+  q31_t a, b, c, d;                              /* Temporary variables to store real and imaginary values */
+  uint32_t blkCnt;                               /* loop counters */
+  q31_t mul1, mul2, mul3, mul4;
+  q31_t out1, out2;
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+
+  /* loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1].  */
+    /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i].  */
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    mul1 = (q31_t) (((q63_t) a * c) >> 32);
+    mul2 = (q31_t) (((q63_t) b * d) >> 32);
+    mul3 = (q31_t) (((q63_t) a * d) >> 32);
+    mul4 = (q31_t) (((q63_t) b * c) >> 32);
+
+    mul1 = (mul1 >> 1);
+    mul2 = (mul2 >> 1);
+    mul3 = (mul3 >> 1);
+    mul4 = (mul4 >> 1);
+
+    out1 = mul1 - mul2;
+    out2 = mul3 + mul4;
+
+    /* store the real result in 3.29 format in the destination buffer. */
+    *pDst++ = out1;
+    /* store the imag result in 3.29 format in the destination buffer. */
+    *pDst++ = out2;
+
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    mul1 = (q31_t) (((q63_t) a * c) >> 32);
+    mul2 = (q31_t) (((q63_t) b * d) >> 32);
+    mul3 = (q31_t) (((q63_t) a * d) >> 32);
+    mul4 = (q31_t) (((q63_t) b * c) >> 32);
+
+    mul1 = (mul1 >> 1);
+    mul2 = (mul2 >> 1);
+    mul3 = (mul3 >> 1);
+    mul4 = (mul4 >> 1);
+
+    out1 = mul1 - mul2;
+    out2 = mul3 + mul4;
+
+    /* store the real result in 3.29 format in the destination buffer. */
+    *pDst++ = out1;
+    /* store the imag result in 3.29 format in the destination buffer. */
+    *pDst++ = out2;
+
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    mul1 = (q31_t) (((q63_t) a * c) >> 32);
+    mul2 = (q31_t) (((q63_t) b * d) >> 32);
+    mul3 = (q31_t) (((q63_t) a * d) >> 32);
+    mul4 = (q31_t) (((q63_t) b * c) >> 32);
+
+    mul1 = (mul1 >> 1);
+    mul2 = (mul2 >> 1);
+    mul3 = (mul3 >> 1);
+    mul4 = (mul4 >> 1);
+
+    out1 = mul1 - mul2;
+    out2 = mul3 + mul4;
+
+    /* store the real result in 3.29 format in the destination buffer. */
+    *pDst++ = out1;
+    /* store the imag result in 3.29 format in the destination buffer. */
+    *pDst++ = out2;
+
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    mul1 = (q31_t) (((q63_t) a * c) >> 32);
+    mul2 = (q31_t) (((q63_t) b * d) >> 32);
+    mul3 = (q31_t) (((q63_t) a * d) >> 32);
+    mul4 = (q31_t) (((q63_t) b * c) >> 32);
+
+    mul1 = (mul1 >> 1);
+    mul2 = (mul2 >> 1);
+    mul3 = (mul3 >> 1);
+    mul4 = (mul4 >> 1);
+
+    out1 = mul1 - mul2;
+    out2 = mul3 + mul4;
+
+    /* store the real result in 3.29 format in the destination buffer. */
+    *pDst++ = out1;
+    /* store the imag result in 3.29 format in the destination buffer. */
+    *pDst++ = out2;
+
+    /* Decrement the blockSize loop counter */
+    blkCnt--;
+  }
+
+  /* If the blockSize is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1].  */
+    /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i].  */
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    mul1 = (q31_t) (((q63_t) a * c) >> 32);
+    mul2 = (q31_t) (((q63_t) b * d) >> 32);
+    mul3 = (q31_t) (((q63_t) a * d) >> 32);
+    mul4 = (q31_t) (((q63_t) b * c) >> 32);
+
+    mul1 = (mul1 >> 1);
+    mul2 = (mul2 >> 1);
+    mul3 = (mul3 >> 1);
+    mul4 = (mul4 >> 1);
+
+    out1 = mul1 - mul2;
+    out2 = mul3 + mul4;
+
+    /* store the real result in 3.29 format in the destination buffer. */
+    *pDst++ = out1;
+    /* store the imag result in 3.29 format in the destination buffer. */
+    *pDst++ = out2;
+
+    /* Decrement the blockSize loop counter */
+    blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  /* loop Unrolling */
+  blkCnt = numSamples >> 1u;
+
+  /* First part of the processing with loop unrolling.  Compute 2 outputs at a time.     
+   ** a second loop below computes the remaining 1 sample. */
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1].  */
+    /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i].  */
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    mul1 = (q31_t) (((q63_t) a * c) >> 32);
+    mul2 = (q31_t) (((q63_t) b * d) >> 32);
+    mul3 = (q31_t) (((q63_t) a * d) >> 32);
+    mul4 = (q31_t) (((q63_t) b * c) >> 32);
+
+    mul1 = (mul1 >> 1);
+    mul2 = (mul2 >> 1);
+    mul3 = (mul3 >> 1);
+    mul4 = (mul4 >> 1);
+
+    out1 = mul1 - mul2;
+    out2 = mul3 + mul4;
+
+    /* store the real result in 3.29 format in the destination buffer. */
+    *pDst++ = out1;
+    /* store the imag result in 3.29 format in the destination buffer. */
+    *pDst++ = out2;
+
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    mul1 = (q31_t) (((q63_t) a * c) >> 32);
+    mul2 = (q31_t) (((q63_t) b * d) >> 32);
+    mul3 = (q31_t) (((q63_t) a * d) >> 32);
+    mul4 = (q31_t) (((q63_t) b * c) >> 32);
+
+    mul1 = (mul1 >> 1);
+    mul2 = (mul2 >> 1);
+    mul3 = (mul3 >> 1);
+    mul4 = (mul4 >> 1);
+
+    out1 = mul1 - mul2;
+    out2 = mul3 + mul4;
+
+    /* store the real result in 3.29 format in the destination buffer. */
+    *pDst++ = out1;
+    /* store the imag result in 3.29 format in the destination buffer. */
+    *pDst++ = out2;
+
+    /* Decrement the blockSize loop counter */
+    blkCnt--;
+  }
+
+  /* If the blockSize is not a multiple of 2, compute any remaining output samples here.     
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x2u;
+
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1].  */
+    /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i].  */
+    a = *pSrcA++;
+    b = *pSrcA++;
+    c = *pSrcB++;
+    d = *pSrcB++;
+
+    mul1 = (q31_t) (((q63_t) a * c) >> 32);
+    mul2 = (q31_t) (((q63_t) b * d) >> 32);
+    mul3 = (q31_t) (((q63_t) a * d) >> 32);
+    mul4 = (q31_t) (((q63_t) b * c) >> 32);
+
+    mul1 = (mul1 >> 1);
+    mul2 = (mul2 >> 1);
+    mul3 = (mul3 >> 1);
+    mul4 = (mul4 >> 1);
+
+    out1 = mul1 - mul2;
+    out2 = mul3 + mul4;
+
+    /* store the real result in 3.29 format in the destination buffer. */
+    *pDst++ = out1;
+    /* store the imag result in 3.29 format in the destination buffer. */
+    *pDst++ = out2;
+
+    /* Decrement the blockSize loop counter */
+    blkCnt--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+}
+
+/**    
+ * @} end of CmplxByCmplxMult group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,225 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_cmplx_mult_real_f32.c    
+*    
+* Description:	Floating-point complex by real multiplication    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.  
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**        
+ * @ingroup groupCmplxMath        
+ */
+
+/**        
+ * @defgroup CmplxByRealMult Complex-by-Real Multiplication        
+ *        
+ * Multiplies a complex vector by a real vector and generates a complex result.        
+ * The data in the complex arrays is stored in an interleaved fashion        
+ * (real, imag, real, imag, ...).        
+ * The parameter numSamples represents the number of complex        
+ * samples processed.  The complex arrays have a total of 2*numSamples        
+ * real values while the real array has a total of numSamples        
+ * real values.        
+ *        
+ * The underlying algorithm is used:        
+ *        
+ * 
        
+ * for(n=0; n        
+ *        
+ * There are separate functions for floating-point, Q15, and Q31 data types.        
+ */
+
+/**        
+ * @addtogroup CmplxByRealMult        
+ * @{        
+ */
+
+
+/**        
+ * @brief  Floating-point complex-by-real multiplication        
+ * @param[in]  *pSrcCmplx points to the complex input vector        
+ * @param[in]  *pSrcReal points to the real input vector        
+ * @param[out]  *pCmplxDst points to the complex output vector        
+ * @param[in]  numSamples number of samples in each vector        
+ * @return none.        
+ */
+
+void arm_cmplx_mult_real_f32(
+  float32_t * pSrcCmplx,
+  float32_t * pSrcReal,
+  float32_t * pCmplxDst,
+  uint32_t numSamples)
+{
+  float32_t in;                                  /* Temporary variable to store input value */
+  uint32_t blkCnt;                               /* loop counters */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  float32_t inA1, inA2, inA3, inA4;              /* Temporary variables to hold input data */
+  float32_t inA5, inA6, inA7, inA8;              /* Temporary variables to hold input data */
+  float32_t inB1, inB2, inB3, inB4;              /* Temporary variables to hold input data */
+  float32_t out1, out2, out3, out4;              /* Temporary variables to hold output data */
+  float32_t out5, out6, out7, out8;              /* Temporary variables to hold output data */
+
+  /* loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.        
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[i].            */
+    /* C[2 * i + 1] = A[2 * i + 1] * B[i].        */
+    /* read input from complex input buffer */
+    inA1 = pSrcCmplx[0];
+    inA2 = pSrcCmplx[1];
+    /* read input from real input buffer */
+    inB1 = pSrcReal[0];
+
+    /* read input from complex input buffer */
+    inA3 = pSrcCmplx[2];
+
+    /* multiply complex buffer real input with real buffer input */
+    out1 = inA1 * inB1;
+
+    /* read input from complex input buffer */
+    inA4 = pSrcCmplx[3];
+
+    /* multiply complex buffer imaginary input with real buffer input */
+    out2 = inA2 * inB1;
+
+    /* read input from real input buffer */
+    inB2 = pSrcReal[1];
+    /* read input from complex input buffer */
+    inA5 = pSrcCmplx[4];
+
+    /* multiply complex buffer real input with real buffer input */
+    out3 = inA3 * inB2;
+
+    /* read input from complex input buffer */
+    inA6 = pSrcCmplx[5];
+    /* read input from real input buffer */
+    inB3 = pSrcReal[2];
+
+    /* multiply complex buffer imaginary input with real buffer input */
+    out4 = inA4 * inB2;
+
+    /* read input from complex input buffer */
+    inA7 = pSrcCmplx[6];
+
+    /* multiply complex buffer real input with real buffer input */
+    out5 = inA5 * inB3;
+
+    /* read input from complex input buffer */
+    inA8 = pSrcCmplx[7];
+
+    /* multiply complex buffer imaginary input with real buffer input */
+    out6 = inA6 * inB3;
+
+    /* read input from real input buffer */
+    inB4 = pSrcReal[3];
+
+    /* store result to destination bufer */
+    pCmplxDst[0] = out1;
+
+    /* multiply complex buffer real input with real buffer input */
+    out7 = inA7 * inB4;
+
+    /* store result to destination bufer */
+    pCmplxDst[1] = out2;
+
+    /* multiply complex buffer imaginary input with real buffer input */
+    out8 = inA8 * inB4;
+
+    /* store result to destination bufer */
+    pCmplxDst[2] = out3;
+    pCmplxDst[3] = out4;
+    pCmplxDst[4] = out5;
+
+    /* incremnet complex input buffer by 8 to process next samples */
+    pSrcCmplx += 8u;
+
+    /* store result to destination bufer */
+    pCmplxDst[5] = out6;
+
+    /* increment real input buffer by 4 to process next samples */
+    pSrcReal += 4u;
+
+    /* store result to destination bufer */
+    pCmplxDst[6] = out7;
+    pCmplxDst[7] = out8;
+
+    /* increment destination buffer by 8 to process next sampels */
+    pCmplxDst += 8u;
+
+    /* Decrement the numSamples loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.        
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+  blkCnt = numSamples;
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[i].            */
+    /* C[2 * i + 1] = A[2 * i + 1] * B[i].        */
+    in = *pSrcReal++;
+    /* store the result in the destination buffer. */
+    *pCmplxDst++ = (*pSrcCmplx++) * (in);
+    *pCmplxDst++ = (*pSrcCmplx++) * (in);
+
+    /* Decrement the numSamples loop counter */
+    blkCnt--;
+  }
+}
+
+/**        
+ * @} end of CmplxByRealMult group        
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,203 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. October 2015
+* $Revision: 	V.1.4.5 a
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_cmplx_mult_real_q15.c    
+*    
+* Description:	Q15 complex by real multiplication    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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. 
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @addtogroup CmplxByRealMult    
+ * @{    
+ */
+
+
+/**    
+ * @brief  Q15 complex-by-real multiplication    
+ * @param[in]  *pSrcCmplx points to the complex input vector    
+ * @param[in]  *pSrcReal points to the real input vector    
+ * @param[out]  *pCmplxDst points to the complex output vector    
+ * @param[in]  numSamples number of samples in each vector    
+ * @return none.    
+ *    
+ * Scaling and Overflow Behavior:    
+ * \par    
+ * The function uses saturating arithmetic.    
+ * Results outside of the allowable Q15 range [0x8000 0x7FFF] will be saturated.    
+ */
+
+void arm_cmplx_mult_real_q15(
+  q15_t * pSrcCmplx,
+  q15_t * pSrcReal,
+  q15_t * pCmplxDst,
+  uint32_t numSamples)
+{
+  q15_t in;                                      /* Temporary variable to store input value */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counters */
+  q31_t inA1, inA2;                              /* Temporary variables to hold input data */
+  q31_t inB1;                                    /* Temporary variables to hold input data */
+  q15_t out1, out2, out3, out4;                  /* Temporary variables to hold output data */
+  q31_t mul1, mul2, mul3, mul4;                  /* Temporary variables to hold intermediate data */
+
+  /* loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[i].            */
+    /* C[2 * i + 1] = A[2 * i + 1] * B[i].        */
+    /* read complex number both real and imaginary from complex input buffer */
+    inA1 = *__SIMD32(pSrcCmplx)++;
+    /* read two real values at a time from real input buffer */
+    inB1 = *__SIMD32(pSrcReal)++;
+    /* read complex number both real and imaginary from complex input buffer */
+    inA2 = *__SIMD32(pSrcCmplx)++;
+
+    /* multiply complex number with real numbers */
+#ifndef ARM_MATH_BIG_ENDIAN
+
+    mul1 = (q31_t) ((q15_t) (inA1) * (q15_t) (inB1));
+    mul2 = (q31_t) ((q15_t) (inA1 >> 16) * (q15_t) (inB1));
+    mul3 = (q31_t) ((q15_t) (inA2) * (q15_t) (inB1 >> 16));
+    mul4 = (q31_t) ((q15_t) (inA2 >> 16) * (q15_t) (inB1 >> 16));
+
+#else
+
+    mul2 = (q31_t) ((q15_t) (inA1 >> 16) * (q15_t) (inB1 >> 16));
+    mul1 = (q31_t) ((q15_t) inA1 * (q15_t) (inB1 >> 16));
+    mul4 = (q31_t) ((q15_t) (inA2 >> 16) * (q15_t) inB1);
+    mul3 = (q31_t) ((q15_t) inA2 * (q15_t) inB1);
+
+#endif /* #ifndef ARM_MATH_BIG_ENDIAN */
+
+    /* saturate the result */
+    out1 = (q15_t) __SSAT(mul1 >> 15u, 16);
+    out2 = (q15_t) __SSAT(mul2 >> 15u, 16);
+    out3 = (q15_t) __SSAT(mul3 >> 15u, 16);
+    out4 = (q15_t) __SSAT(mul4 >> 15u, 16);
+
+    /* pack real and imaginary outputs and store them to destination */
+    *__SIMD32(pCmplxDst)++ = __PKHBT(out1, out2, 16);
+    *__SIMD32(pCmplxDst)++ = __PKHBT(out3, out4, 16);
+
+    inA1 = *__SIMD32(pSrcCmplx)++;
+    inB1 = *__SIMD32(pSrcReal)++;
+    inA2 = *__SIMD32(pSrcCmplx)++;
+
+#ifndef ARM_MATH_BIG_ENDIAN
+
+    mul1 = (q31_t) ((q15_t) (inA1) * (q15_t) (inB1));
+    mul2 = (q31_t) ((q15_t) (inA1 >> 16) * (q15_t) (inB1));
+    mul3 = (q31_t) ((q15_t) (inA2) * (q15_t) (inB1 >> 16));
+    mul4 = (q31_t) ((q15_t) (inA2 >> 16) * (q15_t) (inB1 >> 16));
+
+#else
+
+    mul2 = (q31_t) ((q15_t) (inA1 >> 16) * (q15_t) (inB1 >> 16));
+    mul1 = (q31_t) ((q15_t) inA1 * (q15_t) (inB1 >> 16));
+    mul4 = (q31_t) ((q15_t) (inA2 >> 16) * (q15_t) inB1);
+    mul3 = (q31_t) ((q15_t) inA2 * (q15_t) inB1);
+
+#endif /* #ifndef ARM_MATH_BIG_ENDIAN */
+
+    out1 = (q15_t) __SSAT(mul1 >> 15u, 16);
+    out2 = (q15_t) __SSAT(mul2 >> 15u, 16);
+    out3 = (q15_t) __SSAT(mul3 >> 15u, 16);
+    out4 = (q15_t) __SSAT(mul4 >> 15u, 16);
+
+    *__SIMD32(pCmplxDst)++ = __PKHBT(out1, out2, 16);
+    *__SIMD32(pCmplxDst)++ = __PKHBT(out3, out4, 16);
+
+    /* Decrement the numSamples loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[i].            */
+    /* C[2 * i + 1] = A[2 * i + 1] * B[i].        */
+    in = *pSrcReal++;
+    /* store the result in the destination buffer. */
+    *pCmplxDst++ =
+      (q15_t) __SSAT((((q31_t) (*pSrcCmplx++) * (in)) >> 15), 16);
+    *pCmplxDst++ =
+      (q15_t) __SSAT((((q31_t) (*pSrcCmplx++) * (in)) >> 15), 16);
+
+    /* Decrement the numSamples loop counter */
+    blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  while(numSamples > 0u)
+  {
+    /* realOut = realA * realB.            */
+    /* imagOut = imagA * realB.                */
+    in = *pSrcReal++;
+    /* store the result in the destination buffer. */
+    *pCmplxDst++ =
+      (q15_t) __SSAT((((q31_t) (*pSrcCmplx++) * (in)) >> 15), 16);
+    *pCmplxDst++ =
+      (q15_t) __SSAT((((q31_t) (*pSrcCmplx++) * (in)) >> 15), 16);
+
+    /* Decrement the numSamples loop counter */
+    numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+}
+
+/**    
+ * @} end of CmplxByRealMult group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,223 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_cmplx_mult_real_q31.c    
+*    
+* Description:	Q31 complex by real multiplication    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.   
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+/**    
+ * @ingroup groupCmplxMath    
+ */
+
+/**    
+ * @addtogroup CmplxByRealMult    
+ * @{    
+ */
+
+
+/**    
+ * @brief  Q31 complex-by-real multiplication    
+ * @param[in]  *pSrcCmplx points to the complex input vector    
+ * @param[in]  *pSrcReal points to the real input vector    
+ * @param[out]  *pCmplxDst points to the complex output vector    
+ * @param[in]  numSamples number of samples in each vector    
+ * @return none.    
+ *    
+ * Scaling and Overflow Behavior:    
+ * \par    
+ * The function uses saturating arithmetic.    
+ * Results outside of the allowable Q31 range[0x80000000 0x7FFFFFFF] will be saturated.    
+ */
+
+void arm_cmplx_mult_real_q31(
+  q31_t * pSrcCmplx,
+  q31_t * pSrcReal,
+  q31_t * pCmplxDst,
+  uint32_t numSamples)
+{
+  q31_t inA1;                                    /* Temporary variable to store input value */
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+  uint32_t blkCnt;                               /* loop counters */
+  q31_t inA2, inA3, inA4;                        /* Temporary variables to hold input data */
+  q31_t inB1, inB2;                              /* Temporary variabels to hold input data */
+  q31_t out1, out2, out3, out4;                  /* Temporary variables to hold output data */
+
+  /* loop Unrolling */
+  blkCnt = numSamples >> 2u;
+
+  /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.    
+   ** a second loop below computes the remaining 1 to 3 samples. */
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[i].            */
+    /* C[2 * i + 1] = A[2 * i + 1] * B[i].        */
+    /* read real input from complex input buffer */
+    inA1 = *pSrcCmplx++;
+    inA2 = *pSrcCmplx++;
+    /* read input from real input bufer */
+    inB1 = *pSrcReal++;
+    inB2 = *pSrcReal++;
+    /* read imaginary input from complex input buffer */
+    inA3 = *pSrcCmplx++;
+    inA4 = *pSrcCmplx++;
+
+    /* multiply complex input with real input */
+    out1 = ((q63_t) inA1 * inB1) >> 32;
+    out2 = ((q63_t) inA2 * inB1) >> 32;
+    out3 = ((q63_t) inA3 * inB2) >> 32;
+    out4 = ((q63_t) inA4 * inB2) >> 32;
+
+    /* sature the result */
+    out1 = __SSAT(out1, 31);
+    out2 = __SSAT(out2, 31);
+    out3 = __SSAT(out3, 31);
+    out4 = __SSAT(out4, 31);
+
+    /* get result in 1.31 format */
+    out1 = out1 << 1;
+    out2 = out2 << 1;
+    out3 = out3 << 1;
+    out4 = out4 << 1;
+
+    /* store the result to destination buffer */
+    *pCmplxDst++ = out1;
+    *pCmplxDst++ = out2;
+    *pCmplxDst++ = out3;
+    *pCmplxDst++ = out4;
+
+    /* read real input from complex input buffer */
+    inA1 = *pSrcCmplx++;
+    inA2 = *pSrcCmplx++;
+    /* read input from real input bufer */
+    inB1 = *pSrcReal++;
+    inB2 = *pSrcReal++;
+    /* read imaginary input from complex input buffer */
+    inA3 = *pSrcCmplx++;
+    inA4 = *pSrcCmplx++;
+
+    /* multiply complex input with real input */
+    out1 = ((q63_t) inA1 * inB1) >> 32;
+    out2 = ((q63_t) inA2 * inB1) >> 32;
+    out3 = ((q63_t) inA3 * inB2) >> 32;
+    out4 = ((q63_t) inA4 * inB2) >> 32;
+
+    /* sature the result */
+    out1 = __SSAT(out1, 31);
+    out2 = __SSAT(out2, 31);
+    out3 = __SSAT(out3, 31);
+    out4 = __SSAT(out4, 31);
+
+    /* get result in 1.31 format */
+    out1 = out1 << 1;
+    out2 = out2 << 1;
+    out3 = out3 << 1;
+    out4 = out4 << 1;
+
+    /* store the result to destination buffer */
+    *pCmplxDst++ = out1;
+    *pCmplxDst++ = out2;
+    *pCmplxDst++ = out3;
+    *pCmplxDst++ = out4;
+
+    /* Decrement the numSamples loop counter */
+    blkCnt--;
+  }
+
+  /* If the numSamples is not a multiple of 4, compute any remaining output samples here.    
+   ** No loop unrolling is used. */
+  blkCnt = numSamples % 0x4u;
+
+  while(blkCnt > 0u)
+  {
+    /* C[2 * i] = A[2 * i] * B[i].            */
+    /* C[2 * i + 1] = A[2 * i + 1] * B[i].        */
+    /* read real input from complex input buffer */
+    inA1 = *pSrcCmplx++;
+    inA2 = *pSrcCmplx++;
+    /* read input from real input bufer */
+    inB1 = *pSrcReal++;
+
+    /* multiply complex input with real input */
+    out1 = ((q63_t) inA1 * inB1) >> 32;
+    out2 = ((q63_t) inA2 * inB1) >> 32;
+
+    /* sature the result */
+    out1 = __SSAT(out1, 31);
+    out2 = __SSAT(out2, 31);
+
+    /* get result in 1.31 format */
+    out1 = out1 << 1;
+    out2 = out2 << 1;
+
+    /* store the result to destination buffer */
+    *pCmplxDst++ = out1;
+    *pCmplxDst++ = out2;
+
+    /* Decrement the numSamples loop counter */
+    blkCnt--;
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  while(numSamples > 0u)
+  {
+    /* realOut = realA * realB.            */
+    /* imagReal = imagA * realB.               */
+    inA1 = *pSrcReal++;
+    /* store the result in the destination buffer. */
+    *pCmplxDst++ =
+      (q31_t) clip_q63_to_q31(((q63_t) * pSrcCmplx++ * inA1) >> 31);
+    *pCmplxDst++ =
+      (q31_t) clip_q63_to_q31(((q63_t) * pSrcCmplx++ * inA1) >> 31);
+
+    /* Decrement the numSamples loop counter */
+    numSamples--;
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+}
+
+/**    
+ * @} end of CmplxByRealMult group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_init_f32.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_init_f32.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,87 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_pid_init_f32.c    
+*    
+* Description:	Floating-point PID Control initialization function    
+*				   
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.   
+* ------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+ /**    
+ * @addtogroup PID    
+ * @{    
+ */
+
+/**    
+ * @brief  Initialization function for the floating-point PID Control.   
+ * @param[in,out] *S points to an instance of the PID structure.   
+ * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state & 1 = reset the state.   
+ * @return none.   
+ * \par Description:   
+ * \par    
+ * The resetStateFlag specifies whether to set state to zero or not. \n   
+ * The function computes the structure fields: A0, A1 A2    
+ * using the proportional gain( \c Kp), integral gain( \c Ki) and derivative gain( \c Kd)    
+ * also sets the state variables to all zeros.    
+ */
+
+void arm_pid_init_f32(
+  arm_pid_instance_f32 * S,
+  int32_t resetStateFlag)
+{
+
+  /* Derived coefficient A0 */
+  S->A0 = S->Kp + S->Ki + S->Kd;
+
+  /* Derived coefficient A1 */
+  S->A1 = (-S->Kp) - ((float32_t) 2.0 * S->Kd);
+
+  /* Derived coefficient A2 */
+  S->A2 = S->Kd;
+
+  /* Check whether state needs reset or not */
+  if(resetStateFlag)
+  {
+    /* Clear the state buffer.  The size will be always 3 samples */
+    memset(S->state, 0, 3u * sizeof(float32_t));
+  }
+
+}
+
+/**    
+ * @} end of PID group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_init_q15.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_init_q15.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,122 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_pid_init_q15.c    
+*    
+* Description:	Q15 PID Control initialization function    
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.  
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+ /**    
+ * @addtogroup PID    
+ * @{    
+ */
+
+/**    
+ * @details    
+ * @param[in,out] *S points to an instance of the Q15 PID structure.    
+ * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.    
+ * @return none.    
+ * \par Description:   
+ * \par    
+ * The resetStateFlag specifies whether to set state to zero or not. \n   
+ * The function computes the structure fields: A0, A1 A2    
+ * using the proportional gain( \c Kp), integral gain( \c Ki) and derivative gain( \c Kd)    
+ * also sets the state variables to all zeros.    
+ */
+
+void arm_pid_init_q15(
+  arm_pid_instance_q15 * S,
+  int32_t resetStateFlag)
+{
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+
+  /* Derived coefficient A0 */
+  S->A0 = __QADD16(__QADD16(S->Kp, S->Ki), S->Kd);
+
+  /* Derived coefficients and pack into A1 */
+
+#ifndef  ARM_MATH_BIG_ENDIAN
+
+  S->A1 = __PKHBT(-__QADD16(__QADD16(S->Kd, S->Kd), S->Kp), S->Kd, 16);
+
+#else
+
+  S->A1 = __PKHBT(S->Kd, -__QADD16(__QADD16(S->Kd, S->Kd), S->Kp), 16);
+
+#endif /*      #ifndef  ARM_MATH_BIG_ENDIAN    */
+
+  /* Check whether state needs reset or not */
+  if(resetStateFlag)
+  {
+    /* Clear the state buffer.  The size will be always 3 samples */
+    memset(S->state, 0, 3u * sizeof(q15_t));
+  }
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  q31_t temp;                                    /*to store the sum */
+
+  /* Derived coefficient A0 */
+  temp = S->Kp + S->Ki + S->Kd;
+  S->A0 = (q15_t) __SSAT(temp, 16);
+
+  /* Derived coefficients and pack into A1 */
+  temp = -(S->Kd + S->Kd + S->Kp);
+  S->A1 = (q15_t) __SSAT(temp, 16);
+  S->A2 = S->Kd;
+
+
+
+  /* Check whether state needs reset or not */
+  if(resetStateFlag)
+  {
+    /* Clear the state buffer.  The size will be always 3 samples */
+    memset(S->state, 0, 3u * sizeof(q15_t));
+  }
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+}
+
+/**    
+ * @} end of PID group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_init_q31.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_init_q31.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,107 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_pid_init_q31.c    
+*    
+* Description:	Q31 PID Control initialization function     
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.  
+* ------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+ /**    
+ * @addtogroup PID    
+ * @{    
+ */
+
+/**    
+ * @brief  Initialization function for the Q31 PID Control.   
+ * @param[in,out] *S points to an instance of the Q31 PID structure.   
+ * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.   
+ * @return none.    
+ * \par Description:   
+ * \par    
+ * The resetStateFlag specifies whether to set state to zero or not. \n   
+ * The function computes the structure fields: A0, A1 A2    
+ * using the proportional gain( \c Kp), integral gain( \c Ki) and derivative gain( \c Kd)    
+ * also sets the state variables to all zeros.    
+ */
+
+void arm_pid_init_q31(
+  arm_pid_instance_q31 * S,
+  int32_t resetStateFlag)
+{
+
+#ifndef ARM_MATH_CM0_FAMILY
+
+  /* Run the below code for Cortex-M4 and Cortex-M3 */
+
+  /* Derived coefficient A0 */
+  S->A0 = __QADD(__QADD(S->Kp, S->Ki), S->Kd);
+
+  /* Derived coefficient A1 */
+  S->A1 = -__QADD(__QADD(S->Kd, S->Kd), S->Kp);
+
+
+#else
+
+  /* Run the below code for Cortex-M0 */
+
+  q31_t temp;
+
+  /* Derived coefficient A0 */
+  temp = clip_q63_to_q31((q63_t) S->Kp + S->Ki);
+  S->A0 = clip_q63_to_q31((q63_t) temp + S->Kd);
+
+  /* Derived coefficient A1 */
+  temp = clip_q63_to_q31((q63_t) S->Kd + S->Kd);
+  S->A1 = -clip_q63_to_q31((q63_t) temp + S->Kp);
+
+#endif /* #ifndef ARM_MATH_CM0_FAMILY */
+
+  /* Derived coefficient A2 */
+  S->A2 = S->Kd;
+
+  /* Check whether state needs reset or not */
+  if(resetStateFlag)
+  {
+    /* Clear the state buffer.  The size will be always 3 samples */
+    memset(S->state, 0, 3u * sizeof(q31_t));
+  }
+
+}
+
+/**    
+ * @} end of PID group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_f32.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_f32.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,65 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_pid_reset_f32.c    
+*    
+* Description:	Floating-point PID Control reset function   
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.   
+* ------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+ /**    
+ * @addtogroup PID    
+ * @{    
+ */
+
+/**    
+* @brief  Reset function for the floating-point PID Control.   
+* @param[in] *S	Instance pointer of PID control data structure.   
+* @return none.    
+* \par Description:   
+* The function resets the state buffer to zeros.    
+*/
+void arm_pid_reset_f32(
+  arm_pid_instance_f32 * S)
+{
+
+  /* Clear the state buffer.  The size will be always 3 samples */
+  memset(S->state, 0, 3u * sizeof(float32_t));
+}
+
+/**    
+ * @} end of PID group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_q15.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_q15.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,64 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_pid_reset_q15.c    
+*    
+* Description:	Q15 PID Control reset function   
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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. 
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+ /**    
+ * @addtogroup PID    
+ * @{    
+ */
+
+/**    
+* @brief  Reset function for the Q15 PID Control.   
+* @param[in] *S		Instance pointer of PID control data structure.   
+* @return none.    
+* \par Description:   
+* The function resets the state buffer to zeros.    
+*/
+void arm_pid_reset_q15(
+  arm_pid_instance_q15 * S)
+{
+  /* Reset state to zero, The size will be always 3 samples */
+  memset(S->state, 0, 3u * sizeof(q15_t));
+}
+
+/**    
+ * @} end of PID group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_q31.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_q31.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,65 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_pid_reset_q31.c    
+*    
+* Description:	Q31 PID Control reset function   
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.    
+* ------------------------------------------------------------------- */
+
+#include "arm_math.h"
+
+ /**    
+ * @addtogroup PID    
+ * @{    
+ */
+
+/**    
+* @brief  Reset function for the Q31 PID Control.   
+* @param[in] *S	Instance pointer of PID control data structure.   
+* @return none.    
+* \par Description:   
+* The function resets the state buffer to zeros.    
+*/
+void arm_pid_reset_q31(
+  arm_pid_instance_q31 * S)
+{
+
+  /* Clear the state buffer.  The size will be always 3 samples */
+  memset(S->state, 0, 3u * sizeof(q31_t));
+}
+
+/**    
+ * @} end of PID group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_f32.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_f32.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,149 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_sin_cos_f32.c    
+*    
+* Description:	Sine and Cosine calculation for floating-point values.   
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.   
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+#include "arm_common_tables.h"
+
+/**    
+ * @ingroup groupController    
+ */
+
+/**    
+ * @defgroup SinCos Sine Cosine   
+ *    
+ * Computes the trigonometric sine and cosine values using a combination of table lookup   
+ * and linear interpolation.     
+ * There are separate functions for Q31 and floating-point data types.   
+ * The input to the floating-point version is in degrees while the   
+ * fixed-point Q31 have a scaled input with the range   
+ * [-1 0.9999] mapping to [-180 +180] degrees.   
+ *
+ * The floating point function also allows values that are out of the usual range. When this happens, the function will
+ * take extra time to adjust the input value to the range of [-180 180].
+ *   
+ * The implementation is based on table lookup using 360 values together with linear interpolation.   
+ * The steps used are:   
+ *  -# Calculation of the nearest integer table index.   
+ *  -# Compute the fractional portion (fract) of the input.   
+ *  -# Fetch the value corresponding to \c index from sine table to \c y0 and also value from \c index+1 to \c y1.      
+ *  -# Sine value is computed as  *psinVal = y0 + (fract * (y1 - y0)).    
+ *  -# Fetch the value corresponding to \c index from cosine table to \c y0 and also value from \c index+1 to \c y1.      
+ *  -# Cosine value is computed as  *pcosVal = y0 + (fract * (y1 - y0)).    
+ */
+
+ /**    
+ * @addtogroup SinCos    
+ * @{    
+ */
+
+/**    
+ * @brief  Floating-point sin_cos function.   
+ * @param[in]  theta    input value in degrees    
+ * @param[out] *pSinVal points to the processed sine output.    
+ * @param[out] *pCosVal points to the processed cos output.    
+ * @return none.   
+ */
+
+void arm_sin_cos_f32(
+  float32_t theta,
+  float32_t * pSinVal,
+  float32_t * pCosVal)
+{
+  float32_t fract, in;                             /* Temporary variables for input, output */
+  uint16_t indexS, indexC;                         /* Index variable */
+  float32_t f1, f2, d1, d2;                        /* Two nearest output values */
+  int32_t n;
+  float32_t findex, Dn, Df, temp;
+
+  /* input x is in degrees */
+  /* Scale the input, divide input by 360, for cosine add 0.25 (pi/2) to read sine table */
+  in = theta * 0.00277777777778f;
+
+  /* Calculation of floor value of input */
+  n = (int32_t) in;
+
+  /* Make negative values towards -infinity */
+  if(in < 0.0f)
+  {
+    n--;
+  }
+  /* Map input value to [0 1] */
+  in = in - (float32_t) n;
+
+  /* Calculation of index of the table */
+  findex = (float32_t) FAST_MATH_TABLE_SIZE * in;
+  indexS = ((uint16_t)findex) & 0x1ff;
+  indexC = (indexS + (FAST_MATH_TABLE_SIZE / 4)) & 0x1ff;
+
+  /* fractional value calculation */
+  fract = findex - (float32_t) indexS;
+
+  /* Read two nearest values of input value from the cos & sin tables */
+  f1 = sinTable_f32[indexC+0];
+  f2 = sinTable_f32[indexC+1];
+  d1 = -sinTable_f32[indexS+0];
+  d2 = -sinTable_f32[indexS+1];
+
+  Dn = 0.0122718463030f; // delta between the two points (fixed), in this case 2*pi/FAST_MATH_TABLE_SIZE
+  Df = f2 - f1; // delta between the values of the functions
+  temp = Dn*(d1 + d2) - 2*Df;
+  temp = fract*temp + (3*Df - (d2 + 2*d1)*Dn);
+  temp = fract*temp + d1*Dn;
+
+  /* Calculation of cosine value */
+  *pCosVal = fract*temp + f1;
+  
+  /* Read two nearest values of input value from the cos & sin tables */
+  f1 = sinTable_f32[indexS+0];
+  f2 = sinTable_f32[indexS+1];
+  d1 = sinTable_f32[indexC+0];
+  d2 = sinTable_f32[indexC+1];
+
+  Df = f2 - f1; // delta between the values of the functions
+  temp = Dn*(d1 + d2) - 2*Df;
+  temp = fract*temp + (3*Df - (d2 + 2*d1)*Dn);
+  temp = fract*temp + d1*Dn;
+  
+  /* Calculation of sine value */
+  *pSinVal = fract*temp + f1;
+}
+/**    
+ * @} end of SinCos group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_q31.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_q31.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,122 @@
+/* ----------------------------------------------------------------------    
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.    
+*    
+* $Date:        19. March 2015
+* $Revision: 	V.1.4.5
+*    
+* Project: 	    CMSIS DSP Library    
+* Title:		arm_sin_cos_q31.c    
+*    
+* Description:	Cosine & Sine calculation for Q31 values.   
+*    
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*  
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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 
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.    
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+#include "arm_common_tables.h"
+
+/**    
+ * @ingroup groupController    
+ */
+
+ /**    
+ * @addtogroup SinCos    
+ * @{    
+ */
+
+/**    
+ * @brief  Q31 sin_cos function.   
+ * @param[in]  theta    scaled input value in degrees    
+ * @param[out] *pSinVal points to the processed sine output.    
+ * @param[out] *pCosVal points to the processed cosine output.    
+ * @return none.   
+ *    
+ * The Q31 input value is in the range [-1 0.999999] and is mapped to a degree value in the range [-180 179].   
+ *    
+ */
+
+void arm_sin_cos_q31(
+  q31_t theta,
+  q31_t * pSinVal,
+  q31_t * pCosVal)
+{
+  q31_t fract;                                 /* Temporary variables for input, output */
+  uint16_t indexS, indexC;                     /* Index variable */
+  q31_t f1, f2, d1, d2;                        /* Two nearest output values */
+  q31_t Dn, Df;
+  q63_t temp;
+  
+  /* Calculate the nearest index */
+  indexS = (uint32_t)theta >> CONTROLLER_Q31_SHIFT;
+  indexC = (indexS + 128) & 0x1ff;
+
+  /* Calculation of fractional value */
+  fract = (theta - (indexS << CONTROLLER_Q31_SHIFT)) << 8;
+  
+  /* Read two nearest values of input value from the cos & sin tables */
+  f1 = sinTable_q31[indexC+0];
+  f2 = sinTable_q31[indexC+1];
+  d1 = -sinTable_q31[indexS+0];
+  d2 = -sinTable_q31[indexS+1];
+
+  Dn = 0x1921FB5; // delta between the two points (fixed), in this case 2*pi/FAST_MATH_TABLE_SIZE
+  Df = f2 - f1; // delta between the values of the functions
+  temp = Dn*((q63_t)d1 + d2);
+  temp = temp - ((q63_t)Df << 32);
+  temp = (q63_t)fract*(temp >> 31);
+  temp = temp + ((3*(q63_t)Df << 31) - (d2 + ((q63_t)d1 << 1))*Dn);
+  temp = (q63_t)fract*(temp >> 31);
+  temp = temp + (q63_t)d1*Dn;
+  temp = (q63_t)fract*(temp >> 31);
+
+  /* Calculation of cosine value */
+  *pCosVal = clip_q63_to_q31((temp >> 31) + (q63_t)f1);
+  
+  /* Read two nearest values of input value from the cos & sin tables */
+  f1 = sinTable_q31[indexS+0];
+  f2 = sinTable_q31[indexS+1];
+  d1 = sinTable_q31[indexC+0];
+  d2 = sinTable_q31[indexC+1];
+
+  Df = f2 - f1; // delta between the values of the functions
+  temp = Dn*((q63_t)d1 + d2);
+  temp = temp - ((q63_t)Df << 32);
+  temp = (q63_t)fract*(temp >> 31);
+  temp = temp + ((3*(q63_t)Df << 31) - (d2 + ((q63_t)d1 << 1))*Dn);
+  temp = (q63_t)fract*(temp >> 31);
+  temp = temp + (q63_t)d1*Dn;
+  temp = (q63_t)fract*(temp >> 31);
+  
+  /* Calculation of sine value */
+  *pSinVal = clip_q63_to_q31((temp >> 31) + (q63_t)f1);
+}
+
+/**    
+ * @} end of SinCos group    
+ */
diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_cos_f32.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_cos_f32.c	Mon Jan 16 11:04:47 2017 +0300
@@ -0,0 +1,127 @@
+/* ----------------------------------------------------------------------
+* Copyright (C) 2010-2014 ARM Limited. All rights reserved.
+*
+* $Date:        21. September 2015
+* $Revision:    V.1.4.5 a
+*
+* Project:      CMSIS DSP Library
+* Title:        arm_cos_f32.c
+*
+* Description:  Fast cosine calculation for floating-point values.
+*
+* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
+*
+* 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.
+*   - Neither the name of ARM LIMITED nor the names of its contributors
+*     may be used to endorse or promote products derived from this
+*     software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "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
+* COPYRIGHT OWNER OR CONTRIBUTORS 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.
+* -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+#include "arm_common_tables.h"
+/**
+ * @ingroup groupFastMath
+ */
+
+/**
+ * @defgroup cos Cosine
+ *
+ * Computes the trigonometric cosine function using a combination of table lookup
+ * and linear interpolation.  There are separate functions for
+ * Q15, Q31, and floating-point data types.
+ * The input to the floating-point version is in radians while the
+ * fixed-point Q15 and Q31 have a scaled input with the range
+ * [0 +0.9999] mapping to [0 2*pi).  The fixed-point range is chosen so that a
+ * value of 2*pi wraps around to 0.
+ *
+ * The implementation is based on table lookup using 256 values together with linear interpolation.
+ * The steps used are:
+ *  -# Calculation of the nearest integer table index
+ *  -# Compute the fractional portion (fract) of the table index.
+ *  -# The final result equals (1.0f-fract)*a + fract*b;
+ *
+ * where
+ * 
+ *    b=Table[index+0];
+ *    c=Table[index+1];
+ * 
+ */ + + /** + * @addtogroup cos + * @{ + */ + +/** + * @brief Fast approximation to the trigonometric cosine function for floating-point data. + * @param[in] x input value in radians. + * @return cos(x). + */ + +float32_t arm_cos_f32( + float32_t x) +{ + float32_t cosVal, fract, in; /* Temporary variables for input, output */ + uint16_t index; /* Index variable */ + float32_t a, b; /* Two nearest output values */ + int32_t n; + float32_t findex; + + /* input x is in radians */ + /* Scale the input to [0 1] range from [0 2*PI] , divide input by 2*pi, add 0.25 (pi/2) to read sine table */ + in = x * 0.159154943092f + 0.25f; + + /* Calculation of floor value of input */ + n = (int32_t) in; + + /* Make negative values towards -infinity */ + if(in < 0.0f) + { + n--; + } + + /* Map input value to [0 1] */ + in = in - (float32_t) n; + + /* Calculation of index of the table */ + findex = (float32_t) FAST_MATH_TABLE_SIZE * in; + index = ((uint16_t)findex) & 0x1ff; + + /* fractional value calculation */ + fract = findex - (float32_t) index; + + /* Read two nearest values of input value from the cos table */ + a = sinTable_f32[index]; + b = sinTable_f32[index+1]; + + /* Linear interpolation process */ + cosVal = (1.0f-fract)*a + fract*b; + + /* Return the output value */ + return (cosVal); +} + +/** + * @} end of cos group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_cos_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_cos_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,96 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 07. September 2015 +* $Revision: V.1.4.5 a +* +* Project: CMSIS DSP Library +* Title: arm_cos_q15.c +* +* Description: Fast cosine calculation for Q15 values. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupFastMath + */ + + /** + * @addtogroup cos + * @{ + */ + +/** + * @brief Fast approximation to the trigonometric cosine function for Q15 data. + * @param[in] x Scaled input value in radians. + * @return cos(x). + * + * The Q15 input value is in the range [0 +0.9999] and is mapped to a radian + * value in the range [0 2*pi). + */ + +q15_t arm_cos_q15( + q15_t x) +{ + q15_t cosVal; /* Temporary variables for input, output */ + int32_t index; /* Index variables */ + q15_t a, b; /* Four nearest output values */ + q15_t fract; /* Temporary values for fractional values */ + + /* add 0.25 (pi/2) to read sine table */ + x = (uint16_t)x + 0x2000; + if(x < 0) + { /* convert negative numbers to corresponding positive ones */ + x = (uint16_t)x + 0x8000; + } + + /* Calculate the nearest index */ + index = (uint32_t)x >> FAST_MATH_Q15_SHIFT; + + /* Calculation of fractional value */ + fract = (x - (index << FAST_MATH_Q15_SHIFT)) << 9; + + /* Read two nearest values of input value from the sin table */ + a = sinTable_q15[index]; + b = sinTable_q15[index+1]; + + /* Linear interpolation process */ + cosVal = (q31_t)(0x8000-fract)*a >> 16; + cosVal = (q15_t)((((q31_t)cosVal << 16) + ((q31_t)fract*b)) >> 16); + + return cosVal << 1; +} + +/** + * @} end of cos group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_cos_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_cos_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,96 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 07. September 2015 +* $Revision: V.1.4.5 a +* +* Project: CMSIS DSP Library +* Title: arm_cos_q31.c +* +* Description: Fast cosine calculation for Q31 values. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupFastMath + */ + + /** + * @addtogroup cos + * @{ + */ + +/** + * @brief Fast approximation to the trigonometric cosine function for Q31 data. + * @param[in] x Scaled input value in radians. + * @return cos(x). + * + * The Q31 input value is in the range [0 +0.9999] and is mapped to a radian + * value in the range [0 2*pi). + */ + +q31_t arm_cos_q31( + q31_t x) +{ + q31_t cosVal; /* Temporary variables for input, output */ + int32_t index; /* Index variables */ + q31_t a, b; /* Four nearest output values */ + q31_t fract; /* Temporary values for fractional values */ + + /* add 0.25 (pi/2) to read sine table */ + x = (uint32_t)x + 0x20000000; + if(x < 0) + { /* convert negative numbers to corresponding positive ones */ + x = (uint32_t)x + 0x80000000; + } + + /* Calculate the nearest index */ + index = (uint32_t)x >> FAST_MATH_Q31_SHIFT; + + /* Calculation of fractional value */ + fract = (x - (index << FAST_MATH_Q31_SHIFT)) << 9; + + /* Read two nearest values of input value from the sin table */ + a = sinTable_q31[index]; + b = sinTable_q31[index+1]; + + /* Linear interpolation process */ + cosVal = (q63_t)(0x80000000-fract)*a >> 32; + cosVal = (q31_t)((((q63_t)cosVal << 32) + ((q63_t)fract*b)) >> 32); + + return cosVal << 1; +} + +/** + * @} end of cos group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sin_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sin_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,133 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 21. September 2015 +* $Revision: V.1.4.5 a +* +* Project: CMSIS DSP Library +* Title: arm_sin_f32.c +* +* Description: Fast sine calculation for floating-point values. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" +#include + +/** + * @ingroup groupFastMath + */ + +/** + * @defgroup sin Sine + * + * Computes the trigonometric sine function using a combination of table lookup + * and linear interpolation. There are separate functions for + * Q15, Q31, and floating-point data types. + * The input to the floating-point version is in radians while the + * fixed-point Q15 and Q31 have a scaled input with the range + * [0 +0.9999] mapping to [0 2*pi). The fixed-point range is chosen so that a + * value of 2*pi wraps around to 0. + * + * The implementation is based on table lookup using 256 values together with linear interpolation. + * The steps used are: + * -# Calculation of the nearest integer table index + * -# Compute the fractional portion (fract) of the table index. + * -# The final result equals (1.0f-fract)*a + fract*b; + * + * where + *
+ *    b=Table[index+0];
+ *    c=Table[index+1];
+ * 
+ */ + +/** + * @addtogroup sin + * @{ + */ + +/** + * @brief Fast approximation to the trigonometric sine function for floating-point data. + * @param[in] x input value in radians. + * @return sin(x). + */ + +float32_t arm_sin_f32( + float32_t x) +{ + float32_t sinVal, fract, in; /* Temporary variables for input, output */ + uint16_t index; /* Index variable */ + float32_t a, b; /* Two nearest output values */ + int32_t n; + float32_t findex; + + /* input x is in radians */ + /* Scale the input to [0 1] range from [0 2*PI] , divide input by 2*pi */ + in = x * 0.159154943092f; + + /* Calculation of floor value of input */ + n = (int32_t) in; + + /* Make negative values towards -infinity */ + if(x < 0.0f) + { + n--; + } + + /* Map input value to [0 1] */ + in = in - (float32_t) n; + + /* Calculation of index of the table */ + findex = (float32_t) FAST_MATH_TABLE_SIZE * in; + if (findex >= 512.0f) { + findex -= 512.0f; + } + + index = ((uint16_t)findex) & 0x1ff; + + /* fractional value calculation */ + fract = findex - (float32_t) index; + + /* Read two nearest values of input value from the sin table */ + a = sinTable_f32[index]; + b = sinTable_f32[index+1]; + + /* Linear interpolation process */ + sinVal = (1.0f-fract)*a + fract*b; + + /* Return the output value */ + return (sinVal); +} + +/** + * @} end of sin group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sin_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sin_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,88 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_sin_q15.c +* +* Description: Fast sine calculation for Q15 values. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupFastMath + */ + + /** + * @addtogroup sin + * @{ + */ + +/** + * @brief Fast approximation to the trigonometric sine function for Q15 data. + * @param[in] x Scaled input value in radians. + * @return sin(x). + * + * The Q15 input value is in the range [0 +0.9999] and is mapped to a radian value in the range [0 2*pi). + */ + +q15_t arm_sin_q15( + q15_t x) +{ + q15_t sinVal; /* Temporary variables for input, output */ + int32_t index; /* Index variables */ + q15_t a, b; /* Four nearest output values */ + q15_t fract; /* Temporary values for fractional values */ + + /* Calculate the nearest index */ + index = (uint32_t)x >> FAST_MATH_Q15_SHIFT; + + /* Calculation of fractional value */ + fract = (x - (index << FAST_MATH_Q15_SHIFT)) << 9; + + /* Read two nearest values of input value from the sin table */ + a = sinTable_q15[index]; + b = sinTable_q15[index+1]; + + /* Linear interpolation process */ + sinVal = (q31_t)(0x8000-fract)*a >> 16; + sinVal = (q15_t)((((q31_t)sinVal << 16) + ((q31_t)fract*b)) >> 16); + + return sinVal << 1; +} + +/** + * @} end of sin group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sin_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sin_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,87 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_sin_q31.c +* +* Description: Fast sine calculation for Q31 values. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupFastMath + */ + + /** + * @addtogroup sin + * @{ + */ + +/** + * @brief Fast approximation to the trigonometric sine function for Q31 data. + * @param[in] x Scaled input value in radians. + * @return sin(x). + * + * The Q31 input value is in the range [0 +0.9999] and is mapped to a radian value in the range [0 2*pi). */ + +q31_t arm_sin_q31( + q31_t x) +{ + q31_t sinVal; /* Temporary variables for input, output */ + int32_t index; /* Index variables */ + q31_t a, b; /* Four nearest output values */ + q31_t fract; /* Temporary values for fractional values */ + + /* Calculate the nearest index */ + index = (uint32_t)x >> FAST_MATH_Q31_SHIFT; + + /* Calculation of fractional value */ + fract = (x - (index << FAST_MATH_Q31_SHIFT)) << 9; + + /* Read two nearest values of input value from the sin table */ + a = sinTable_q31[index]; + b = sinTable_q31[index+1]; + + /* Linear interpolation process */ + sinVal = (q63_t)(0x80000000-fract)*a >> 32; + sinVal = (q31_t)((((q63_t)sinVal << 32) + ((q63_t)fract*b)) >> 32); + + return sinVal << 1; +} + +/** + * @} end of sin group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sqrt_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sqrt_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,155 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. October 2015 +* $Revision: V.1.4.5 a +* +* Project: CMSIS DSP Library +* Title: arm_sqrt_q15.c +* +* Description: Q15 square root function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ +#include "arm_math.h" +#include "arm_common_tables.h" + + +/** + * @ingroup groupFastMath + */ + +/** + * @addtogroup SQRT + * @{ + */ + + /** + * @brief Q15 square root function. + * @param[in] in input value. The range of the input value is [0 +1) or 0x0000 to 0x7FFF. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if the input value is positive + * and ARM_MATH_ARGUMENT_ERROR if the input is negative. For + * negative inputs, the function returns *pOut = 0. + */ + +arm_status arm_sqrt_q15( + q15_t in, + q15_t * pOut) +{ + q15_t number, temp1, var1, signBits1, half; + q31_t bits_val1; + float32_t temp_float1; + union + { + q31_t fracval; + float32_t floatval; + } tempconv; + + number = in; + + /* If the input is a positive number then compute the signBits. */ + if(number > 0) + { + signBits1 = __CLZ(number) - 17; + + /* Shift by the number of signBits1 */ + if((signBits1 % 2) == 0) + { + number = number << signBits1; + } + else + { + number = number << (signBits1 - 1); + } + + /* Calculate half value of the number */ + half = number >> 1; + /* Store the number for later use */ + temp1 = number; + + /* Convert to float */ + temp_float1 = number * 3.051757812500000e-005f; + /*Store as integer */ + tempconv.floatval = temp_float1; + bits_val1 = tempconv.fracval; + /* Subtract the shifted value from the magic number to give intial guess */ + bits_val1 = 0x5f3759df - (bits_val1 >> 1); /* gives initial guess */ + /* Store as float */ + tempconv.fracval = bits_val1; + temp_float1 = tempconv.floatval; + /* Convert to integer format */ + var1 = (q31_t) (temp_float1 * 16384); + + /* 1st iteration */ + var1 = ((q15_t) ((q31_t) var1 * (0x3000 - + ((q15_t) + ((((q15_t) + (((q31_t) var1 * var1) >> 15)) * + (q31_t) half) >> 15))) >> 15)) << 2; + /* 2nd iteration */ + var1 = ((q15_t) ((q31_t) var1 * (0x3000 - + ((q15_t) + ((((q15_t) + (((q31_t) var1 * var1) >> 15)) * + (q31_t) half) >> 15))) >> 15)) << 2; + /* 3rd iteration */ + var1 = ((q15_t) ((q31_t) var1 * (0x3000 - + ((q15_t) + ((((q15_t) + (((q31_t) var1 * var1) >> 15)) * + (q31_t) half) >> 15))) >> 15)) << 2; + + /* Multiply the inverse square root with the original value */ + var1 = ((q15_t) (((q31_t) temp1 * var1) >> 15)) << 1; + + /* Shift the output down accordingly */ + if((signBits1 % 2) == 0) + { + var1 = var1 >> (signBits1 / 2); + } + else + { + var1 = var1 >> ((signBits1 - 1) / 2); + } + *pOut = var1; + + return (ARM_MATH_SUCCESS); + } + /* If the number is a negative number then store zero as its square root value */ + else + { + *pOut = 0; + return (ARM_MATH_ARGUMENT_ERROR); + } +} + +/** + * @} end of SQRT group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sqrt_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sqrt_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,153 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. October 2015 +* $Revision: V.1.4.5 a +* +* Project: CMSIS DSP Library +* Title: arm_sqrt_q31.c +* +* Description: Q31 square root function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupFastMath + */ + +/** + * @addtogroup SQRT + * @{ + */ + +/** + * @brief Q31 square root function. + * @param[in] in input value. The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if the input value is positive + * and ARM_MATH_ARGUMENT_ERROR if the input is negative. For + * negative inputs, the function returns *pOut = 0. + */ + +arm_status arm_sqrt_q31( + q31_t in, + q31_t * pOut) +{ + q31_t number, temp1, bits_val1, var1, signBits1, half; + float32_t temp_float1; + union + { + q31_t fracval; + float32_t floatval; + } tempconv; + + number = in; + + /* If the input is a positive number then compute the signBits. */ + if(number > 0) + { + signBits1 = __CLZ(number) - 1; + + /* Shift by the number of signBits1 */ + if((signBits1 % 2) == 0) + { + number = number << signBits1; + } + else + { + number = number << (signBits1 - 1); + } + + /* Calculate half value of the number */ + half = number >> 1; + /* Store the number for later use */ + temp1 = number; + + /*Convert to float */ + temp_float1 = number * 4.6566128731e-010f; + /*Store as integer */ + tempconv.floatval = temp_float1; + bits_val1 = tempconv.fracval; + /* Subtract the shifted value from the magic number to give intial guess */ + bits_val1 = 0x5f3759df - (bits_val1 >> 1); /* gives initial guess */ + /* Store as float */ + tempconv.fracval = bits_val1; + temp_float1 = tempconv.floatval; + /* Convert to integer format */ + var1 = (q31_t) (temp_float1 * 1073741824); + + /* 1st iteration */ + var1 = ((q31_t) ((q63_t) var1 * (0x30000000 - + ((q31_t) + ((((q31_t) + (((q63_t) var1 * var1) >> 31)) * + (q63_t) half) >> 31))) >> 31)) << 2; + /* 2nd iteration */ + var1 = ((q31_t) ((q63_t) var1 * (0x30000000 - + ((q31_t) + ((((q31_t) + (((q63_t) var1 * var1) >> 31)) * + (q63_t) half) >> 31))) >> 31)) << 2; + /* 3rd iteration */ + var1 = ((q31_t) ((q63_t) var1 * (0x30000000 - + ((q31_t) + ((((q31_t) + (((q63_t) var1 * var1) >> 31)) * + (q63_t) half) >> 31))) >> 31)) << 2; + + /* Multiply the inverse square root with the original value */ + var1 = ((q31_t) (((q63_t) temp1 * var1) >> 31)) << 1; + + /* Shift the output down accordingly */ + if((signBits1 % 2) == 0) + { + var1 = var1 >> (signBits1 / 2); + } + else + { + var1 = var1 >> ((signBits1 - 1) / 2); + } + *pOut = var1; + + return (ARM_MATH_SUCCESS); + } + /* If the number is a negative number then store zero as its square root value */ + else + { + *pOut = 0; + return (ARM_MATH_ARGUMENT_ERROR); + } +} + +/** + * @} end of SQRT group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,110 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df1_32x64_init_q31.c +* +* Description: High precision Q31 Biquad cascade filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF1_32x64 + * @{ + */ + +/** + * @details + * + * @param[in,out] *S points to an instance of the high precision Q31 Biquad cascade filter structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift Shift to be applied after the accumulator. Varies according to the coefficients format. + * @return none + * + * Coefficient and State Ordering: + * + * \par + * The coefficients are stored in the array pCoeffs in the following order: + *
    
+ *     {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}    
+ * 
+ * where b1x and a1x are the coefficients for the first stage, + * b2x and a2x are the coefficients for the second stage, + * and so on. The pCoeffs array contains a total of 5*numStages values. + * + * \par + * The pState points to state variables array and size of each state variable is 1.63 format. + * Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. + * The state variables are arranged in the state array as: + *
    
+ *     {x[n-1], x[n-2], y[n-1], y[n-2]}    
+ * 
+ * The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + * The state array has a total length of 4*numStages values. + * The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cas_df1_32x64_init_q31( + arm_biquad_cas_df1_32x64_ins_q31 * S, + uint8_t numStages, + q31_t * pCoeffs, + q63_t * pState, + uint8_t postShift) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign postShift to be applied to the output */ + S->postShift = postShift; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 4 * numStages */ + memset(pState, 0, (4u * (uint32_t) numStages) * sizeof(q63_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + * @} end of BiquadCascadeDF1_32x64 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,561 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. October 2015 +* $Revision: V.1.4.5 a +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df1_32x64_q31.c +* +* Description: High precision Q31 Biquad cascade filter processing function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup BiquadCascadeDF1_32x64 High Precision Q31 Biquad Cascade Filter + * + * This function implements a high precision Biquad cascade filter which operates on + * Q31 data values. The filter coefficients are in 1.31 format and the state variables + * are in 1.63 format. The double precision state variables reduce quantization noise + * in the filter and provide a cleaner output. + * These filters are particularly useful when implementing filters in which the + * singularities are close to the unit circle. This is common for low pass or high + * pass filters with very low cutoff frequencies. + * + * The function operates on blocks of input and output data + * and each call to the function processes blockSize samples through + * the filter. pSrc and pDst points to input and output arrays + * containing blockSize Q31 values. + * + * \par Algorithm + * Each Biquad stage implements a second order filter using the difference equation: + *
    
+ *     y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2]    
+ * 
+ * A Direct Form I algorithm is used with 5 coefficients and 4 state variables per stage. + * \image html Biquad.gif "Single Biquad filter stage" + * Coefficients b0, b1, and b2 multiply the input signal x[n] and are referred to as the feedforward coefficients. + * Coefficients a1 and a2 multiply the output signal y[n] and are referred to as the feedback coefficients. + * Pay careful attention to the sign of the feedback coefficients. + * Some design tools use the difference equation + *
    
+ *     y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] - a1 * y[n-1] - a2 * y[n-2]    
+ * 
+ * In this case the feedback coefficients a1 and a2 must be negated when used with the CMSIS DSP Library. + * + * \par + * Higher order filters are realized as a cascade of second order sections. + * numStages refers to the number of second order stages used. + * For example, an 8th order filter would be realized with numStages=4 second order stages. + * \image html BiquadCascade.gif "8th order filter using a cascade of Biquad stages" + * A 9th order filter would be realized with numStages=5 second order stages with the coefficients for one of the stages configured as a first order filter (b2=0 and a2=0). + * + * \par + * The pState points to state variables array . + * Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2] and each state variable in 1.63 format to improve precision. + * The state variables are arranged in the array as: + *
    
+ *     {x[n-1], x[n-2], y[n-1], y[n-2]}    
+ * 
+ * + * \par + * The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + * The state array has a total length of 4*numStages values of data in 1.63 format. + * The state variables are updated after each block of data is processed; the coefficients are untouched. + * + * \par Instance Structure + * The coefficients and state variables for a filter are stored together in an instance data structure. + * A separate instance structure must be defined for each filter. + * Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. + * + * \par Init Function + * There is also an associated initialization function which performs the following operations: + * - Sets the values of the internal structure fields. + * - Zeros out the values in the state buffer. + * To do this manually without calling the init function, assign the follow subfields of the instance structure: + * numStages, pCoeffs, postShift, pState. Also set all of the values in pState to zero. + * + * \par + * Use of the initialization function is optional. + * However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + * To place an instance structure into a const data section, the instance structure must be manually initialized. + * Set the values in the state buffer to zeros before static initialization. + * For example, to statically initialize the filter instance structure use + *
    
+ *     arm_biquad_cas_df1_32x64_ins_q31 S1 = {numStages, pState, pCoeffs, postShift};    
+ * 
+ * where numStages is the number of Biquad stages in the filter; pState is the address of the state buffer; + * pCoeffs is the address of the coefficient buffer; postShift shift to be applied which is described in detail below. + * \par Fixed-Point Behavior + * Care must be taken while using Biquad Cascade 32x64 filter function. + * Following issues must be considered: + * - Scaling of coefficients + * - Filter gain + * - Overflow and saturation + * + * \par + * Filter coefficients are represented as fractional values and + * restricted to lie in the range [-1 +1). + * The processing function has an additional scaling parameter postShift + * which allows the filter coefficients to exceed the range [+1 -1). + * At the output of the filter's accumulator is a shift register which shifts the result by postShift bits. + * \image html BiquadPostshift.gif "Fixed-point Biquad with shift by postShift bits after accumulator" + * This essentially scales the filter coefficients by 2^postShift. + * For example, to realize the coefficients + *
    
+ *    {1.5, -0.8, 1.2, 1.6, -0.9}    
+ * 
+ * set the Coefficient array to: + *
    
+ *    {0.75, -0.4, 0.6, 0.8, -0.45}    
+ * 
+ * and set postShift=1 + * + * \par + * The second thing to keep in mind is the gain through the filter. + * The frequency response of a Biquad filter is a function of its coefficients. + * It is possible for the gain through the filter to exceed 1.0 meaning that the filter increases the amplitude of certain frequencies. + * This means that an input signal with amplitude < 1.0 may result in an output > 1.0 and these are saturated or overflowed based on the implementation of the filter. + * To avoid this behavior the filter needs to be scaled down such that its peak gain < 1.0 or the input signal must be scaled down so that the combination of input and filter are never overflowed. + * + * \par + * The third item to consider is the overflow and saturation behavior of the fixed-point Q31 version. + * This is described in the function specific documentation below. + */ + +/** + * @addtogroup BiquadCascadeDF1_32x64 + * @{ + */ + +/** + * @details + + * @param[in] *S points to an instance of the high precision Q31 Biquad cascade filter. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + * + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clip. + * In order to avoid overflows completely the input signal must be scaled down by 2 bits and lie in the range [-0.25 +0.25). + * After all 5 multiply-accumulates are performed, the 2.62 accumulator is shifted by postShift bits and the result truncated to + * 1.31 format by discarding the low 32 bits. + * + * \par + * Two related functions are provided in the CMSIS DSP library. + * arm_biquad_cascade_df1_q31() implements a Biquad cascade with 32-bit coefficients and state variables with a Q63 accumulator. + * arm_biquad_cascade_df1_fast_q31() implements a Biquad cascade with 32-bit coefficients and state variables with a Q31 accumulator. + */ + +void arm_biquad_cas_df1_32x64_q31( + const arm_biquad_cas_df1_32x64_ins_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pIn = pSrc; /* input pointer initialization */ + q31_t *pOut = pDst; /* output pointer initialization */ + q63_t *pState = S->pState; /* state pointer initialization */ + q31_t *pCoeffs = S->pCoeffs; /* coeff pointer initialization */ + q63_t acc; /* accumulator */ + q31_t Xn1, Xn2; /* Input Filter state variables */ + q63_t Yn1, Yn2; /* Output Filter state variables */ + q31_t b0, b1, b2, a1, a2; /* Filter coefficients */ + q31_t Xn; /* temporary input */ + int32_t shift = (int32_t) S->postShift + 1; /* Shift to be applied to the output */ + uint32_t sample, stage = S->numStages; /* loop counters */ + q31_t acc_l, acc_h; /* temporary output */ + uint32_t uShift = ((uint32_t) S->postShift + 1u); + uint32_t lShift = 32u - uShift; /* Shift to be applied to the output */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the state values */ + Xn1 = (q31_t) (pState[0]); + Xn2 = (q31_t) (pState[1]); + Yn1 = pState[2]; + Yn2 = pState[3]; + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + /* The variable acc hold output value that is being computed and + * stored in the destination buffer + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + sample = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) Xn *b0; + + /* acc += b1 * x[n-1] */ + acc += (q63_t) Xn1 *b1; + + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn2 *b2; + + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn1, a1); + + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn2, a2); + + /* The result is converted to 1.63 , Yn2 variable is reused */ + Yn2 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer in 1.31 format. */ + *pOut = acc_h; + + /* Read the second input into Xn2, to reuse the value */ + Xn2 = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc += b1 * x[n-1] */ + acc = (q63_t) Xn *b1; + + /* acc = b0 * x[n] */ + acc += (q63_t) Xn2 *b0; + + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn1 *b2; + + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn2, a1); + + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn1, a2); + + /* The result is converted to 1.63, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Read the third input into Xn1, to reuse the value */ + Xn1 = *pIn++; + + /* The result is converted to 1.31 */ + /* Store the output in the destination buffer. */ + *(pOut + 1u) = acc_h; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) Xn1 *b0; + + /* acc += b1 * x[n-1] */ + acc += (q63_t) Xn2 *b1; + + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn *b2; + + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn1, a1); + + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn2, a2); + + /* The result is converted to 1.63, Yn2 variable is reused */ + Yn2 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer in 1.31 format. */ + *(pOut + 2u) = acc_h; + + /* Read the fourth input into Xn, to reuse the value */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + acc = (q63_t) Xn *b0; + + /* acc += b1 * x[n-1] */ + acc += (q63_t) Xn1 *b1; + + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn2 *b2; + + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn2, a1); + + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn1, a2); + + /* The result is converted to 1.63, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer in 1.31 format. */ + *(pOut + 3u) = acc_h; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + + /* update output pointer */ + pOut += 4u; + + /* decrement the loop counter */ + sample--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + sample = (blockSize & 0x3u); + + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) Xn *b0; + /* acc += b1 * x[n-1] */ + acc += (q63_t) Xn1 *b1; + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn2 *b2; + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn1, a1); + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn2, a2); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + /* The result is converted to 1.63, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer in 1.31 format. */ + *pOut++ = acc_h; + /* Yn1 = acc << shift; */ + + /* Store the output in the destination buffer in 1.31 format. */ +/* *pOut++ = (q31_t) (acc >> (32 - shift)); */ + + /* decrement the loop counter */ + sample--; + } + + /* The first stage output is given as input to the second stage. */ + pIn = pDst; + + /* Reset to destination buffer working pointer */ + pOut = pDst; + + /* Store the updated state variables back into the pState array */ + /* Store the updated state variables back into the pState array */ + *pState++ = (q63_t) Xn1; + *pState++ = (q63_t) Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + } while(--stage); + +#else + + /* Run the below code for Cortex-M0 */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the state values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + + /* The variable acc hold output value that is being computed and + * stored in the destination buffer + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + sample = blockSize; + + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + acc = (q63_t) Xn *b0; + /* acc += b1 * x[n-1] */ + acc += (q63_t) Xn1 *b1; + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn2 *b2; + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn1, a1); + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn2, a2); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + + /* The result is converted to 1.63, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer in 1.31 format. */ + *pOut++ = acc_h; + + /* Yn1 = acc << shift; */ + + /* Store the output in the destination buffer in 1.31 format. */ + /* *pOut++ = (q31_t) (acc >> (32 - shift)); */ + + /* decrement the loop counter */ + sample--; + } + + /* The first stage output is given as input to the second stage. */ + pIn = pDst; + + /* Reset to destination buffer working pointer */ + pOut = pDst; + + /* Store the updated state variables back into the pState array */ + *pState++ = (q63_t) Xn1; + *pState++ = (q63_t) Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + } while(--stage); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ +} + + /** + * @} end of BiquadCascadeDF1_32x64 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,425 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df1_f32.c +* +* Description: Processing function for the +* floating-point Biquad cascade DirectFormI(DF1) filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup BiquadCascadeDF1 Biquad Cascade IIR Filters Using Direct Form I Structure + * + * This set of functions implements arbitrary order recursive (IIR) filters. + * The filters are implemented as a cascade of second order Biquad sections. + * The functions support Q15, Q31 and floating-point data types. + * Fast version of Q15 and Q31 also supported on CortexM4 and Cortex-M3. + * + * The functions operate on blocks of input and output data and each call to the function + * processes blockSize samples through the filter. + * pSrc points to the array of input data and + * pDst points to the array of output data. + * Both arrays contain blockSize values. + * + * \par Algorithm + * Each Biquad stage implements a second order filter using the difference equation: + *
    
+ *     y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2]    
+ * 
+ * A Direct Form I algorithm is used with 5 coefficients and 4 state variables per stage. + * \image html Biquad.gif "Single Biquad filter stage" + * Coefficients b0, b1 and b2 multiply the input signal x[n] and are referred to as the feedforward coefficients. + * Coefficients a1 and a2 multiply the output signal y[n] and are referred to as the feedback coefficients. + * Pay careful attention to the sign of the feedback coefficients. + * Some design tools use the difference equation + *
    
+ *     y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] - a1 * y[n-1] - a2 * y[n-2]    
+ * 
+ * In this case the feedback coefficients a1 and a2 must be negated when used with the CMSIS DSP Library. + * + * \par + * Higher order filters are realized as a cascade of second order sections. + * numStages refers to the number of second order stages used. + * For example, an 8th order filter would be realized with numStages=4 second order stages. + * \image html BiquadCascade.gif "8th order filter using a cascade of Biquad stages" + * A 9th order filter would be realized with numStages=5 second order stages with the coefficients for one of the stages configured as a first order filter (b2=0 and a2=0). + * + * \par + * The pState points to state variables array. + * Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. + * The state variables are arranged in the pState array as: + *
    
+ *     {x[n-1], x[n-2], y[n-1], y[n-2]}    
+ * 
+ * + * \par + * The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + * The state array has a total length of 4*numStages values. + * The state variables are updated after each block of data is processed, the coefficients are untouched. + * + * \par Instance Structure + * The coefficients and state variables for a filter are stored together in an instance data structure. + * A separate instance structure must be defined for each filter. + * Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Init Functions + * There is also an associated initialization function for each data type. + * The initialization function performs following operations: + * - Sets the values of the internal structure fields. + * - Zeros out the values in the state buffer. + * To do this manually without calling the init function, assign the follow subfields of the instance structure: + * numStages, pCoeffs, pState. Also set all of the values in pState to zero. + * + * \par + * Use of the initialization function is optional. + * However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + * To place an instance structure into a const data section, the instance structure must be manually initialized. + * Set the values in the state buffer to zeros before static initialization. + * The code below statically initializes each of the 3 different data type filter instance structures + *
    
+ *     arm_biquad_casd_df1_inst_f32 S1 = {numStages, pState, pCoeffs};    
+ *     arm_biquad_casd_df1_inst_q15 S2 = {numStages, pState, pCoeffs, postShift};    
+ *     arm_biquad_casd_df1_inst_q31 S3 = {numStages, pState, pCoeffs, postShift};    
+ * 
+ * where numStages is the number of Biquad stages in the filter; pState is the address of the state buffer; + * pCoeffs is the address of the coefficient buffer; postShift shift to be applied. + * + * \par Fixed-Point Behavior + * Care must be taken when using the Q15 and Q31 versions of the Biquad Cascade filter functions. + * Following issues must be considered: + * - Scaling of coefficients + * - Filter gain + * - Overflow and saturation + * + * \par + * Scaling of coefficients: + * Filter coefficients are represented as fractional values and + * coefficients are restricted to lie in the range [-1 +1). + * The fixed-point functions have an additional scaling parameter postShift + * which allow the filter coefficients to exceed the range [+1 -1). + * At the output of the filter's accumulator is a shift register which shifts the result by postShift bits. + * \image html BiquadPostshift.gif "Fixed-point Biquad with shift by postShift bits after accumulator" + * This essentially scales the filter coefficients by 2^postShift. + * For example, to realize the coefficients + *
    
+ *    {1.5, -0.8, 1.2, 1.6, -0.9}    
+ * 
+ * set the pCoeffs array to: + *
    
+ *    {0.75, -0.4, 0.6, 0.8, -0.45}    
+ * 
+ * and set postShift=1 + * + * \par + * Filter gain: + * The frequency response of a Biquad filter is a function of its coefficients. + * It is possible for the gain through the filter to exceed 1.0 meaning that the filter increases the amplitude of certain frequencies. + * This means that an input signal with amplitude < 1.0 may result in an output > 1.0 and these are saturated or overflowed based on the implementation of the filter. + * To avoid this behavior the filter needs to be scaled down such that its peak gain < 1.0 or the input signal must be scaled down so that the combination of input and filter are never overflowed. + * + * \par + * Overflow and saturation: + * For Q15 and Q31 versions, it is described separately as part of the function specific documentation below. + */ + +/** + * @addtogroup BiquadCascadeDF1 + * @{ + */ + +/** + * @param[in] *S points to an instance of the floating-point Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process per call. + * @return none. + * + */ + +void arm_biquad_cascade_df1_f32( + const arm_biquad_casd_df1_inst_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t *pIn = pSrc; /* source pointer */ + float32_t *pOut = pDst; /* destination pointer */ + float32_t *pState = S->pState; /* pState pointer */ + float32_t *pCoeffs = S->pCoeffs; /* coefficient pointer */ + float32_t acc; /* Simulates the accumulator */ + float32_t b0, b1, b2, a1, a2; /* Filter coefficients */ + float32_t Xn1, Xn2, Yn1, Yn2; /* Filter pState variables */ + float32_t Xn; /* temporary input */ + uint32_t sample, stage = S->numStages; /* loop counters */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the pState values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + /* The variable acc hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + sample = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(sample > 0u) + { + /* Read the first input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + Yn2 = (b0 * Xn) + (b1 * Xn1) + (b2 * Xn2) + (a1 * Yn1) + (a2 * Yn2); + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = Yn2; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + + /* Read the second input */ + Xn2 = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + Yn1 = (b0 * Xn2) + (b1 * Xn) + (b2 * Xn1) + (a1 * Yn2) + (a2 * Yn1); + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = Yn1; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + + /* Read the third input */ + Xn1 = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + Yn2 = (b0 * Xn1) + (b1 * Xn2) + (b2 * Xn) + (a1 * Yn1) + (a2 * Yn2); + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = Yn2; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + + /* Read the forth input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + Yn1 = (b0 * Xn) + (b1 * Xn1) + (b2 * Xn2) + (a1 * Yn2) + (a2 * Yn1); + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = Yn1; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + + /* decrement the loop counter */ + sample--; + + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + sample = blockSize & 0x3u; + + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + acc = (b0 * Xn) + (b1 * Xn1) + (b2 * Xn2) + (a1 * Yn1) + (a2 * Yn2); + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + Yn1 = acc; + + /* decrement the loop counter */ + sample--; + + } + + /* Store the updated state variables back into the pState array */ + *pState++ = Xn1; + *pState++ = Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent numStages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset the output pointer */ + pOut = pDst; + + /* decrement the loop counter */ + stage--; + + } while(stage > 0u); + +#else + + /* Run the below code for Cortex-M0 */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the pState values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + + /* The variables acc holds the output value that is computed: + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + sample = blockSize; + + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + acc = (b0 * Xn) + (b1 * Xn1) + (b2 * Xn2) + (a1 * Yn1) + (a2 * Yn2); + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + Yn1 = acc; + + /* decrement the loop counter */ + sample--; + } + + /* Store the updated state variables back into the pState array */ + *pState++ = Xn1; + *pState++ = Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent numStages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset the output pointer */ + pOut = pDst; + + /* decrement the loop counter */ + stage--; + + } while(stage > 0u); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + + + /** + * @} end of BiquadCascadeDF1 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,286 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df1_fast_q15.c +* +* Description: Fast processing function for the +* Q15 Biquad cascade filter. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF1 + * @{ + */ + +/** + * @details + * @param[in] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * This fast version uses a 32-bit accumulator with 2.30 format. + * The accumulator maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around and distorts the result. + * In order to avoid overflows completely the input signal must be scaled down by two bits and lie in the range [-0.25 +0.25). + * The 2.30 accumulator is then shifted by postShift bits and the result truncated to 1.15 format by discarding the low 16 bits. + * + * \par + * Refer to the function arm_biquad_cascade_df1_q15() for a slower implementation of this function which uses 64-bit accumulation to avoid wrap around distortion. Both the slow and the fast versions use the same instance structure. + * Use the function arm_biquad_cascade_df1_init_q15() to initialize the filter structure. + * + */ + +void arm_biquad_cascade_df1_fast_q15( + const arm_biquad_casd_df1_inst_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pIn = pSrc; /* Source pointer */ + q15_t *pOut = pDst; /* Destination pointer */ + q31_t in; /* Temporary variable to hold input value */ + q31_t out; /* Temporary variable to hold output value */ + q31_t b0; /* Temporary variable to hold bo value */ + q31_t b1, a1; /* Filter coefficients */ + q31_t state_in, state_out; /* Filter state variables */ + q31_t acc; /* Accumulator */ + int32_t shift = (int32_t) (15 - S->postShift); /* Post shift */ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + uint32_t sample, stage = S->numStages; /* Stage loop counter */ + + + + do + { + + /* Read the b0 and 0 coefficients using SIMD */ + b0 = *__SIMD32(pCoeffs)++; + + /* Read the b1 and b2 coefficients using SIMD */ + b1 = *__SIMD32(pCoeffs)++; + + /* Read the a1 and a2 coefficients using SIMD */ + a1 = *__SIMD32(pCoeffs)++; + + /* Read the input state values from the state buffer: x[n-1], x[n-2] */ + state_in = *__SIMD32(pState)++; + + /* Read the output state values from the state buffer: y[n-1], y[n-2] */ + state_out = *__SIMD32(pState)--; + + /* Apply loop unrolling and compute 2 output values simultaneously. */ + /* The variable acc hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + sample = blockSize >> 1u; + + /* First part of the processing with loop unrolling. Compute 2 outputs at a time. + ** a second loop below computes the remaining 1 sample. */ + while(sample > 0u) + { + + /* Read the input */ + in = *__SIMD32(pIn)++; + + /* out = b0 * x[n] + 0 * 0 */ + out = __SMUAD(b0, in); + /* acc = b1 * x[n-1] + acc += b2 * x[n-2] + out */ + acc = __SMLAD(b1, state_in, out); + /* acc += a1 * y[n-1] + acc += a2 * y[n-2] */ + acc = __SMLAD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 and then saturation is applied */ + out = __SSAT((acc >> shift), 16); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ + +#ifndef ARM_MATH_BIG_ENDIAN + + state_in = __PKHBT(in, state_in, 16); + state_out = __PKHBT(out, state_out, 16); + +#else + + state_in = __PKHBT(state_in >> 16, (in >> 16), 16); + state_out = __PKHBT(state_out >> 16, (out), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* out = b0 * x[n] + 0 * 0 */ + out = __SMUADX(b0, in); + /* acc0 = b1 * x[n-1] , acc0 += b2 * x[n-2] + out */ + acc = __SMLAD(b1, state_in, out); + /* acc += a1 * y[n-1] + acc += a2 * y[n-2] */ + acc = __SMLAD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 and then saturation is applied */ + out = __SSAT((acc >> shift), 16); + + + /* Store the output in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = __PKHBT(state_out, out, 16); + +#else + + *__SIMD32(pOut)++ = __PKHBT(out, state_out >> 16, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ + +#ifndef ARM_MATH_BIG_ENDIAN + + state_in = __PKHBT(in >> 16, state_in, 16); + state_out = __PKHBT(out, state_out, 16); + +#else + + state_in = __PKHBT(state_in >> 16, in, 16); + state_out = __PKHBT(state_out >> 16, out, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + + /* Decrement the loop counter */ + sample--; + + } + + /* If the blockSize is not a multiple of 2, compute any remaining output samples here. + ** No loop unrolling is used. */ + + if((blockSize & 0x1u) != 0u) + { + /* Read the input */ + in = *pIn++; + + /* out = b0 * x[n] + 0 * 0 */ + +#ifndef ARM_MATH_BIG_ENDIAN + + out = __SMUAD(b0, in); + +#else + + out = __SMUADX(b0, in); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc = b1 * x[n-1], acc += b2 * x[n-2] + out */ + acc = __SMLAD(b1, state_in, out); + /* acc += a1 * y[n-1] + acc += a2 * y[n-2] */ + acc = __SMLAD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 and then saturation is applied */ + out = __SSAT((acc >> shift), 16); + + /* Store the output in the destination buffer. */ + *pOut++ = (q15_t) out; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ + +#ifndef ARM_MATH_BIG_ENDIAN + + state_in = __PKHBT(in, state_in, 16); + state_out = __PKHBT(out, state_out, 16); + +#else + + state_in = __PKHBT(state_in >> 16, in, 16); + state_out = __PKHBT(state_out >> 16, out, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + } + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent (numStages - 1) occur in-place in the output buffer */ + pIn = pDst; + + /* Reset the output pointer */ + pOut = pDst; + + /* Store the updated state variables back into the state array */ + *__SIMD32(pState)++ = state_in; + *__SIMD32(pState)++ = state_out; + + + /* Decrement the loop counter */ + stage--; + + } while(stage > 0u); +} + + +/** + * @} end of BiquadCascadeDF1 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,305 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. October 2015 +* $Revision: V.1.4.5 a +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df1_fast_q31.c +* +* Description: Processing function for the +* Q31 Fast Biquad cascade DirectFormI(DF1) filter. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF1 + * @{ + */ + +/** + * @details + * + * @param[in] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * This function is optimized for speed at the expense of fixed-point precision and overflow protection. + * The result of each 1.31 x 1.31 multiplication is truncated to 2.30 format. + * These intermediate results are added to a 2.30 accumulator. + * Finally, the accumulator is saturated and converted to a 1.31 result. + * The fast version has the same overflow behavior as the standard version and provides less precision since it discards the low 32 bits of each multiplication result. + * In order to avoid overflows completely the input signal must be scaled down by two bits and lie in the range [-0.25 +0.25). Use the intialization function + * arm_biquad_cascade_df1_init_q31() to initialize filter structure. + * + * \par + * Refer to the function arm_biquad_cascade_df1_q31() for a slower implementation of this function which uses 64-bit accumulation to provide higher precision. Both the slow and the fast versions use the same instance structure. + * Use the function arm_biquad_cascade_df1_init_q31() to initialize the filter structure. + */ + +void arm_biquad_cascade_df1_fast_q31( + const arm_biquad_casd_df1_inst_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t acc = 0; /* accumulator */ + q31_t Xn1, Xn2, Yn1, Yn2; /* Filter state variables */ + q31_t b0, b1, b2, a1, a2; /* Filter coefficients */ + q31_t *pIn = pSrc; /* input pointer initialization */ + q31_t *pOut = pDst; /* output pointer initialization */ + q31_t *pState = S->pState; /* pState pointer initialization */ + q31_t *pCoeffs = S->pCoeffs; /* coeff pointer initialization */ + q31_t Xn; /* temporary input */ + int32_t shift = (int32_t) S->postShift + 1; /* Shift to be applied to the output */ + uint32_t sample, stage = S->numStages; /* loop counters */ + + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the state values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + /* The variables acc ... acc3 hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + sample = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + /*acc = (q31_t) (((q63_t) b1 * Xn1) >> 32);*/ + mult_32x32_keep32_R(acc, b1, Xn1); + /* acc += b1 * x[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b0 * (Xn))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b0, Xn); + /* acc += b[2] * x[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b2 * (Xn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b2, Xn2); + /* acc += a1 * y[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a1 * (Yn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a1, Yn1); + /* acc += a2 * y[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a2 * (Yn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a2, Yn2); + + /* The result is converted to 1.31 , Yn2 variable is reused */ + Yn2 = acc << shift; + + /* Read the second input */ + Xn2 = *(pIn + 1u); + + /* Store the output in the destination buffer. */ + *pOut = Yn2; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + /*acc = (q31_t) (((q63_t) b0 * (Xn2)) >> 32);*/ + mult_32x32_keep32_R(acc, b0, Xn2); + /* acc += b1 * x[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b1 * (Xn))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b1, Xn); + /* acc += b[2] * x[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b2 * (Xn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b2, Xn1); + /* acc += a1 * y[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a1 * (Yn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a1, Yn2); + /* acc += a2 * y[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a2 * (Yn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a2, Yn1); + + /* The result is converted to 1.31, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Read the third input */ + Xn1 = *(pIn + 2u); + + /* Store the output in the destination buffer. */ + *(pOut + 1u) = Yn1; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + /*acc = (q31_t) (((q63_t) b0 * (Xn1)) >> 32);*/ + mult_32x32_keep32_R(acc, b0, Xn1); + /* acc += b1 * x[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b1 * (Xn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b1, Xn2); + /* acc += b[2] * x[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b2 * (Xn))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b2, Xn); + /* acc += a1 * y[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a1 * (Yn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a1, Yn1); + /* acc += a2 * y[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a2 * (Yn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a2, Yn2); + + /* The result is converted to 1.31, Yn2 variable is reused */ + Yn2 = acc << shift; + + /* Read the forth input */ + Xn = *(pIn + 3u); + + /* Store the output in the destination buffer. */ + *(pOut + 2u) = Yn2; + pIn += 4u; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + /*acc = (q31_t) (((q63_t) b0 * (Xn)) >> 32);*/ + mult_32x32_keep32_R(acc, b0, Xn); + /* acc += b1 * x[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b1 * (Xn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b1, Xn1); + /* acc += b[2] * x[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b2 * (Xn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b2, Xn2); + /* acc += a1 * y[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a1 * (Yn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a1, Yn2); + /* acc += a2 * y[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a2 * (Yn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a2, Yn1); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + Xn2 = Xn1; + + /* The result is converted to 1.31, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Xn1 = Xn */ + Xn1 = Xn; + + /* Store the output in the destination buffer. */ + *(pOut + 3u) = Yn1; + pOut += 4u; + + /* decrement the loop counter */ + sample--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + sample = (blockSize & 0x3u); + + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + /*acc = (q31_t) (((q63_t) b0 * (Xn)) >> 32);*/ + mult_32x32_keep32_R(acc, b0, Xn); + /* acc += b1 * x[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b1 * (Xn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b1, Xn1); + /* acc += b[2] * x[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b2 * (Xn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b2, Xn2); + /* acc += a1 * y[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a1 * (Yn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a1, Yn1); + /* acc += a2 * y[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a2 * (Yn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a2, Yn2); + + /* The result is converted to 1.31 */ + acc = acc << shift; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + Yn1 = acc; + + /* Store the output in the destination buffer. */ + *pOut++ = acc; + + /* decrement the loop counter */ + sample--; + } + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent stages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset to destination pointer */ + pOut = pDst; + + /* Store the updated state variables back into the pState array */ + *pState++ = Xn1; + *pState++ = Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + } while(--stage); +} + +/** + * @} end of BiquadCascadeDF1 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,109 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df1_init_f32.c +* +* Description: floating-point Biquad cascade DirectFormI(DF1) filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF1 + * @{ + */ + +/** + * @details + * @brief Initialization function for the floating-point Biquad cascade filter. + * @param[in,out] *S points to an instance of the floating-point Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients array. + * @param[in] *pState points to the state array. + * @return none + * + * + * Coefficient and State Ordering: + * + * \par + * The coefficients are stored in the array pCoeffs in the following order: + *
    
+ *     {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}    
+ * 
+ * + * \par + * where b1x and a1x are the coefficients for the first stage, + * b2x and a2x are the coefficients for the second stage, + * and so on. The pCoeffs array contains a total of 5*numStages values. + * + * \par + * The pState is a pointer to state array. + * Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. + * The state variables are arranged in the pState array as: + *
    
+ *     {x[n-1], x[n-2], y[n-1], y[n-2]}    
+ * 
+ * The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + * The state array has a total length of 4*numStages values. + * The state variables are updated after each block of data is processed; the coefficients are untouched. + * + */ + +void arm_biquad_cascade_df1_init_f32( + arm_biquad_casd_df1_inst_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 4 * numStages */ + memset(pState, 0, (4u * (uint32_t) numStages) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + * @} end of BiquadCascadeDF1 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,111 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df1_init_q15.c +* +* Description: Q15 Biquad cascade DirectFormI(DF1) filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF1 + * @{ + */ + +/** + * @details + * + * @param[in,out] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift Shift to be applied to the accumulator result. Varies according to the coefficients format + * @return none + * + * Coefficient and State Ordering: + * + * \par + * The coefficients are stored in the array pCoeffs in the following order: + *
    
+ *     {b10, 0, b11, b12, a11, a12, b20, 0, b21, b22, a21, a22, ...}    
+ * 
+ * where b1x and a1x are the coefficients for the first stage, + * b2x and a2x are the coefficients for the second stage, + * and so on. The pCoeffs array contains a total of 6*numStages values. + * The zero coefficient between b1 and b2 facilities use of 16-bit SIMD instructions on the Cortex-M4. + * + * \par + * The state variables are stored in the array pState. + * Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. + * The state variables are arranged in the pState array as: + *
    
+ *     {x[n-1], x[n-2], y[n-1], y[n-2]}    
+ * 
+ * The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + * The state array has a total length of 4*numStages values. + * The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cascade_df1_init_q15( + arm_biquad_casd_df1_inst_q15 * S, + uint8_t numStages, + q15_t * pCoeffs, + q15_t * pState, + int8_t postShift) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign postShift to be applied to the output */ + S->postShift = postShift; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 4 * numStages */ + memset(pState, 0, (4u * (uint32_t) numStages) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + * @} end of BiquadCascadeDF1 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,111 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df1_init_q31.c +* +* Description: Q31 Biquad cascade DirectFormI(DF1) filter initialization function. +* +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF1 + * @{ + */ + +/** + * @details + * + * @param[in,out] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients buffer. + * @param[in] *pState points to the state buffer. + * @param[in] postShift Shift to be applied after the accumulator. Varies according to the coefficients format + * @return none + * + * Coefficient and State Ordering: + * + * \par + * The coefficients are stored in the array pCoeffs in the following order: + *
    
+ *     {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}    
+ * 
+ * where b1x and a1x are the coefficients for the first stage, + * b2x and a2x are the coefficients for the second stage, + * and so on. The pCoeffs array contains a total of 5*numStages values. + * + * \par + * The pState points to state variables array. + * Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. + * The state variables are arranged in the pState array as: + *
    
+ *     {x[n-1], x[n-2], y[n-1], y[n-2]}    
+ * 
+ * The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + * The state array has a total length of 4*numStages values. + * The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cascade_df1_init_q31( + arm_biquad_casd_df1_inst_q31 * S, + uint8_t numStages, + q31_t * pCoeffs, + q31_t * pState, + int8_t postShift) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign postShift to be applied to the output */ + S->postShift = postShift; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 4 * numStages */ + memset(pState, 0, (4u * (uint32_t) numStages) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + * @} end of BiquadCascadeDF1 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,411 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df1_q15.c +* +* Description: Processing function for the +* Q15 Biquad cascade DirectFormI(DF1) filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF1 + * @{ + */ + +/** + * @brief Processing function for the Q15 Biquad cascade filter. + * @param[in] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] blockSize number of samples to process per call. + * @return none. + * + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * The accumulator is then shifted by postShift bits to truncate the result to 1.15 format by discarding the low 16 bits. + * Finally, the result is saturated to 1.15 format. + * + * \par + * Refer to the function arm_biquad_cascade_df1_fast_q15() for a faster but less precise implementation of this filter for Cortex-M3 and Cortex-M4. + */ + +void arm_biquad_cascade_df1_q15( + const arm_biquad_casd_df1_inst_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q15_t *pIn = pSrc; /* Source pointer */ + q15_t *pOut = pDst; /* Destination pointer */ + q31_t in; /* Temporary variable to hold input value */ + q31_t out; /* Temporary variable to hold output value */ + q31_t b0; /* Temporary variable to hold bo value */ + q31_t b1, a1; /* Filter coefficients */ + q31_t state_in, state_out; /* Filter state variables */ + q31_t acc_l, acc_h; + q63_t acc; /* Accumulator */ + int32_t lShift = (15 - (int32_t) S->postShift); /* Post shift */ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + uint32_t sample, stage = (uint32_t) S->numStages; /* Stage loop counter */ + int32_t uShift = (32 - lShift); + + do + { + /* Read the b0 and 0 coefficients using SIMD */ + b0 = *__SIMD32(pCoeffs)++; + + /* Read the b1 and b2 coefficients using SIMD */ + b1 = *__SIMD32(pCoeffs)++; + + /* Read the a1 and a2 coefficients using SIMD */ + a1 = *__SIMD32(pCoeffs)++; + + /* Read the input state values from the state buffer: x[n-1], x[n-2] */ + state_in = *__SIMD32(pState)++; + + /* Read the output state values from the state buffer: y[n-1], y[n-2] */ + state_out = *__SIMD32(pState)--; + + /* Apply loop unrolling and compute 2 output values simultaneously. */ + /* The variable acc hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + sample = blockSize >> 1u; + + /* First part of the processing with loop unrolling. Compute 2 outputs at a time. + ** a second loop below computes the remaining 1 sample. */ + while(sample > 0u) + { + + /* Read the input */ + in = *__SIMD32(pIn)++; + + /* out = b0 * x[n] + 0 * 0 */ + out = __SMUAD(b0, in); + + /* acc += b1 * x[n-1] + b2 * x[n-2] + out */ + acc = __SMLALD(b1, state_in, out); + /* acc += a1 * y[n-1] + a2 * y[n-2] */ + acc = __SMLALD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 if postShift = 1, and then saturation is applied */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + out = (uint32_t) acc_l >> lShift | acc_h << uShift; + + out = __SSAT(out, 16); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ + +#ifndef ARM_MATH_BIG_ENDIAN + + state_in = __PKHBT(in, state_in, 16); + state_out = __PKHBT(out, state_out, 16); + +#else + + state_in = __PKHBT(state_in >> 16, (in >> 16), 16); + state_out = __PKHBT(state_out >> 16, (out), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* out = b0 * x[n] + 0 * 0 */ + out = __SMUADX(b0, in); + /* acc += b1 * x[n-1] + b2 * x[n-2] + out */ + acc = __SMLALD(b1, state_in, out); + /* acc += a1 * y[n-1] + a2 * y[n-2] */ + acc = __SMLALD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 if postShift = 1, and then saturation is applied */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + out = (uint32_t) acc_l >> lShift | acc_h << uShift; + + out = __SSAT(out, 16); + + /* Store the output in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = __PKHBT(state_out, out, 16); + +#else + + *__SIMD32(pOut)++ = __PKHBT(out, state_out >> 16, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ +#ifndef ARM_MATH_BIG_ENDIAN + + state_in = __PKHBT(in >> 16, state_in, 16); + state_out = __PKHBT(out, state_out, 16); + +#else + + state_in = __PKHBT(state_in >> 16, in, 16); + state_out = __PKHBT(state_out >> 16, out, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + + /* Decrement the loop counter */ + sample--; + + } + + /* If the blockSize is not a multiple of 2, compute any remaining output samples here. + ** No loop unrolling is used. */ + + if((blockSize & 0x1u) != 0u) + { + /* Read the input */ + in = *pIn++; + + /* out = b0 * x[n] + 0 * 0 */ + +#ifndef ARM_MATH_BIG_ENDIAN + + out = __SMUAD(b0, in); + +#else + + out = __SMUADX(b0, in); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc = b1 * x[n-1] + b2 * x[n-2] + out */ + acc = __SMLALD(b1, state_in, out); + /* acc += a1 * y[n-1] + a2 * y[n-2] */ + acc = __SMLALD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 if postShift = 1, and then saturation is applied */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + out = (uint32_t) acc_l >> lShift | acc_h << uShift; + + out = __SSAT(out, 16); + + /* Store the output in the destination buffer. */ + *pOut++ = (q15_t) out; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ + +#ifndef ARM_MATH_BIG_ENDIAN + + state_in = __PKHBT(in, state_in, 16); + state_out = __PKHBT(out, state_out, 16); + +#else + + state_in = __PKHBT(state_in >> 16, in, 16); + state_out = __PKHBT(state_out >> 16, out, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + } + + /* The first stage goes from the input wire to the output wire. */ + /* Subsequent numStages occur in-place in the output wire */ + pIn = pDst; + + /* Reset the output pointer */ + pOut = pDst; + + /* Store the updated state variables back into the state array */ + *__SIMD32(pState)++ = state_in; + *__SIMD32(pState)++ = state_out; + + + /* Decrement the loop counter */ + stage--; + + } while(stage > 0u); + +#else + + /* Run the below code for Cortex-M0 */ + + q15_t *pIn = pSrc; /* Source pointer */ + q15_t *pOut = pDst; /* Destination pointer */ + q15_t b0, b1, b2, a1, a2; /* Filter coefficients */ + q15_t Xn1, Xn2, Yn1, Yn2; /* Filter state variables */ + q15_t Xn; /* temporary input */ + q63_t acc; /* Accumulator */ + int32_t shift = (15 - (int32_t) S->postShift); /* Post shift */ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + uint32_t sample, stage = (uint32_t) S->numStages; /* Stage loop counter */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + pCoeffs++; // skip the 0 coefficient + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the state values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + + /* The variables acc holds the output value that is computed: + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + sample = blockSize; + + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + acc = (q31_t) b0 *Xn; + + /* acc += b1 * x[n-1] */ + acc += (q31_t) b1 *Xn1; + /* acc += b[2] * x[n-2] */ + acc += (q31_t) b2 *Xn2; + /* acc += a1 * y[n-1] */ + acc += (q31_t) a1 *Yn1; + /* acc += a2 * y[n-2] */ + acc += (q31_t) a2 *Yn2; + + /* The result is converted to 1.31 */ + acc = __SSAT((acc >> shift), 16); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + Yn1 = (q15_t) acc; + + /* Store the output in the destination buffer. */ + *pOut++ = (q15_t) acc; + + /* decrement the loop counter */ + sample--; + } + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent stages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset to destination pointer */ + pOut = pDst; + + /* Store the updated state variables back into the pState array */ + *pState++ = Xn1; + *pState++ = Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + } while(--stage); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + + +/** + * @} end of BiquadCascadeDF1 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,405 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df1_q31.c +* +* Description: Processing function for the +* Q31 Biquad cascade filter +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF1 + * @{ + */ + +/** + * @brief Processing function for the Q31 Biquad cascade filter. + * @param[in] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clip. + * In order to avoid overflows completely the input signal must be scaled down by 2 bits and lie in the range [-0.25 +0.25). + * After all 5 multiply-accumulates are performed, the 2.62 accumulator is shifted by postShift bits and the result truncated to + * 1.31 format by discarding the low 32 bits. + * + * \par + * Refer to the function arm_biquad_cascade_df1_fast_q31() for a faster but less precise implementation of this filter for Cortex-M3 and Cortex-M4. + */ + +void arm_biquad_cascade_df1_q31( + const arm_biquad_casd_df1_inst_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q63_t acc; /* accumulator */ + uint32_t uShift = ((uint32_t) S->postShift + 1u); + uint32_t lShift = 32u - uShift; /* Shift to be applied to the output */ + q31_t *pIn = pSrc; /* input pointer initialization */ + q31_t *pOut = pDst; /* output pointer initialization */ + q31_t *pState = S->pState; /* pState pointer initialization */ + q31_t *pCoeffs = S->pCoeffs; /* coeff pointer initialization */ + q31_t Xn1, Xn2, Yn1, Yn2; /* Filter state variables */ + q31_t b0, b1, b2, a1, a2; /* Filter coefficients */ + q31_t Xn; /* temporary input */ + uint32_t sample, stage = S->numStages; /* loop counters */ + + +#ifndef ARM_MATH_CM0_FAMILY_FAMILY + + q31_t acc_l, acc_h; /* temporary output variables */ + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the state values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + /* The variable acc hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + sample = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) b0 *Xn; + /* acc += b1 * x[n-1] */ + acc += (q63_t) b1 *Xn1; + /* acc += b[2] * x[n-2] */ + acc += (q63_t) b2 *Xn2; + /* acc += a1 * y[n-1] */ + acc += (q63_t) a1 *Yn1; + /* acc += a2 * y[n-2] */ + acc += (q63_t) a2 *Yn2; + + /* The result is converted to 1.31 , Yn2 variable is reused */ + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + Yn2 = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer. */ + *pOut++ = Yn2; + + /* Read the second input */ + Xn2 = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) b0 *Xn2; + /* acc += b1 * x[n-1] */ + acc += (q63_t) b1 *Xn; + /* acc += b[2] * x[n-2] */ + acc += (q63_t) b2 *Xn1; + /* acc += a1 * y[n-1] */ + acc += (q63_t) a1 *Yn2; + /* acc += a2 * y[n-2] */ + acc += (q63_t) a2 *Yn1; + + + /* The result is converted to 1.31, Yn1 variable is reused */ + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + + /* Apply shift for lower part of acc and upper part of acc */ + Yn1 = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer. */ + *pOut++ = Yn1; + + /* Read the third input */ + Xn1 = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) b0 *Xn1; + /* acc += b1 * x[n-1] */ + acc += (q63_t) b1 *Xn2; + /* acc += b[2] * x[n-2] */ + acc += (q63_t) b2 *Xn; + /* acc += a1 * y[n-1] */ + acc += (q63_t) a1 *Yn1; + /* acc += a2 * y[n-2] */ + acc += (q63_t) a2 *Yn2; + + /* The result is converted to 1.31, Yn2 variable is reused */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + + /* Apply shift for lower part of acc and upper part of acc */ + Yn2 = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer. */ + *pOut++ = Yn2; + + /* Read the forth input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) b0 *Xn; + /* acc += b1 * x[n-1] */ + acc += (q63_t) b1 *Xn1; + /* acc += b[2] * x[n-2] */ + acc += (q63_t) b2 *Xn2; + /* acc += a1 * y[n-1] */ + acc += (q63_t) a1 *Yn2; + /* acc += a2 * y[n-2] */ + acc += (q63_t) a2 *Yn1; + + /* The result is converted to 1.31, Yn1 variable is reused */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + Yn1 = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + + /* Store the output in the destination buffer. */ + *pOut++ = Yn1; + + /* decrement the loop counter */ + sample--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + sample = (blockSize & 0x3u); + + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) b0 *Xn; + /* acc += b1 * x[n-1] */ + acc += (q63_t) b1 *Xn1; + /* acc += b[2] * x[n-2] */ + acc += (q63_t) b2 *Xn2; + /* acc += a1 * y[n-1] */ + acc += (q63_t) a1 *Yn1; + /* acc += a2 * y[n-2] */ + acc += (q63_t) a2 *Yn2; + + /* The result is converted to 1.31 */ + acc = acc >> lShift; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + Yn1 = (q31_t) acc; + + /* Store the output in the destination buffer. */ + *pOut++ = (q31_t) acc; + + /* decrement the loop counter */ + sample--; + } + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent stages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset to destination pointer */ + pOut = pDst; + + /* Store the updated state variables back into the pState array */ + *pState++ = Xn1; + *pState++ = Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + } while(--stage); + +#else + + /* Run the below code for Cortex-M0 */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the state values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + + /* The variables acc holds the output value that is computed: + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + sample = blockSize; + + while(sample > 0u) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + acc = (q63_t) b0 *Xn; + + /* acc += b1 * x[n-1] */ + acc += (q63_t) b1 *Xn1; + /* acc += b[2] * x[n-2] */ + acc += (q63_t) b2 *Xn2; + /* acc += a1 * y[n-1] */ + acc += (q63_t) a1 *Yn1; + /* acc += a2 * y[n-2] */ + acc += (q63_t) a2 *Yn2; + + /* The result is converted to 1.31 */ + acc = acc >> lShift; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + Yn1 = (q31_t) acc; + + /* Store the output in the destination buffer. */ + *pOut++ = (q31_t) acc; + + /* decrement the loop counter */ + sample--; + } + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent stages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset to destination pointer */ + pOut = pDst; + + /* Store the updated state variables back into the pState array */ + *pState++ = Xn1; + *pState++ = Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + } while(--stage); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY_FAMILY */ +} + + + + +/** + * @} end of BiquadCascadeDF1 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,603 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df2T_f32.c +* +* Description: Processing function for the floating-point transposed +* direct form II Biquad cascade filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** +* @ingroup groupFilters +*/ + +/** +* @defgroup BiquadCascadeDF2T Biquad Cascade IIR Filters Using a Direct Form II Transposed Structure +* +* This set of functions implements arbitrary order recursive (IIR) filters using a transposed direct form II structure. +* The filters are implemented as a cascade of second order Biquad sections. +* These functions provide a slight memory savings as compared to the direct form I Biquad filter functions. +* Only floating-point data is supported. +* +* This function operate on blocks of input and output data and each call to the function +* processes blockSize samples through the filter. +* pSrc points to the array of input data and +* pDst points to the array of output data. +* Both arrays contain blockSize values. +* +* \par Algorithm +* Each Biquad stage implements a second order filter using the difference equation: +*
       
+*    y[n] = b0 * x[n] + d1       
+*    d1 = b1 * x[n] + a1 * y[n] + d2       
+*    d2 = b2 * x[n] + a2 * y[n]       
+* 
+* where d1 and d2 represent the two state values. +* +* \par +* A Biquad filter using a transposed Direct Form II structure is shown below. +* \image html BiquadDF2Transposed.gif "Single transposed Direct Form II Biquad" +* Coefficients b0, b1, and b2 multiply the input signal x[n] and are referred to as the feedforward coefficients. +* Coefficients a1 and a2 multiply the output signal y[n] and are referred to as the feedback coefficients. +* Pay careful attention to the sign of the feedback coefficients. +* Some design tools flip the sign of the feedback coefficients: +*
       
+*    y[n] = b0 * x[n] + d1;       
+*    d1 = b1 * x[n] - a1 * y[n] + d2;       
+*    d2 = b2 * x[n] - a2 * y[n];       
+* 
+* In this case the feedback coefficients a1 and a2 must be negated when used with the CMSIS DSP Library. +* +* \par +* Higher order filters are realized as a cascade of second order sections. +* numStages refers to the number of second order stages used. +* For example, an 8th order filter would be realized with numStages=4 second order stages. +* A 9th order filter would be realized with numStages=5 second order stages with the +* coefficients for one of the stages configured as a first order filter (b2=0 and a2=0). +* +* \par +* pState points to the state variable array. +* Each Biquad stage has 2 state variables d1 and d2. +* The state variables are arranged in the pState array as: +*
       
+*     {d11, d12, d21, d22, ...}       
+* 
+* where d1x refers to the state variables for the first Biquad and +* d2x refers to the state variables for the second Biquad. +* The state array has a total length of 2*numStages values. +* The state variables are updated after each block of data is processed; the coefficients are untouched. +* +* \par +* The CMSIS library contains Biquad filters in both Direct Form I and transposed Direct Form II. +* The advantage of the Direct Form I structure is that it is numerically more robust for fixed-point data types. +* That is why the Direct Form I structure supports Q15 and Q31 data types. +* The transposed Direct Form II structure, on the other hand, requires a wide dynamic range for the state variables d1 and d2. +* Because of this, the CMSIS library only has a floating-point version of the Direct Form II Biquad. +* The advantage of the Direct Form II Biquad is that it requires half the number of state variables, 2 rather than 4, per Biquad stage. +* +* \par Instance Structure +* The coefficients and state variables for a filter are stored together in an instance data structure. +* A separate instance structure must be defined for each filter. +* Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. +* +* \par Init Functions +* There is also an associated initialization function. +* The initialization function performs following operations: +* - Sets the values of the internal structure fields. +* - Zeros out the values in the state buffer. +* To do this manually without calling the init function, assign the follow subfields of the instance structure: +* numStages, pCoeffs, pState. Also set all of the values in pState to zero. +* +* \par +* Use of the initialization function is optional. +* However, if the initialization function is used, then the instance structure cannot be placed into a const data section. +* To place an instance structure into a const data section, the instance structure must be manually initialized. +* Set the values in the state buffer to zeros before static initialization. +* For example, to statically initialize the instance structure use +*
       
+*     arm_biquad_cascade_df2T_instance_f32 S1 = {numStages, pState, pCoeffs};       
+* 
+* where numStages is the number of Biquad stages in the filter; pState is the address of the state buffer. +* pCoeffs is the address of the coefficient buffer; +* +*/ + +/** +* @addtogroup BiquadCascadeDF2T +* @{ +*/ + +/** +* @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. +* @param[in] *S points to an instance of the filter data structure. +* @param[in] *pSrc points to the block of input data. +* @param[out] *pDst points to the block of output data +* @param[in] blockSize number of samples to process. +* @return none. +*/ + + +LOW_OPTIMIZATION_ENTER +void arm_biquad_cascade_df2T_f32( +const arm_biquad_cascade_df2T_instance_f32 * S, +float32_t * pSrc, +float32_t * pDst, +uint32_t blockSize) +{ + + float32_t *pIn = pSrc; /* source pointer */ + float32_t *pOut = pDst; /* destination pointer */ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* coefficient pointer */ + float32_t acc1; /* accumulator */ + float32_t b0, b1, b2, a1, a2; /* Filter coefficients */ + float32_t Xn1; /* temporary input */ + float32_t d1, d2; /* state variables */ + uint32_t sample, stage = S->numStages; /* loop counters */ + +#if defined(ARM_MATH_CM7) + + float32_t Xn2, Xn3, Xn4, Xn5, Xn6, Xn7, Xn8; /* Input State variables */ + float32_t Xn9, Xn10, Xn11, Xn12, Xn13, Xn14, Xn15, Xn16; + float32_t acc2, acc3, acc4, acc5, acc6, acc7; /* Simulates the accumulator */ + float32_t acc8, acc9, acc10, acc11, acc12, acc13, acc14, acc15, acc16; + + do + { + /* Reading the coefficients */ + b0 = pCoeffs[0]; + b1 = pCoeffs[1]; + b2 = pCoeffs[2]; + a1 = pCoeffs[3]; + /* Apply loop unrolling and compute 16 output values simultaneously. */ + sample = blockSize >> 4u; + a2 = pCoeffs[4]; + + /*Reading the state values */ + d1 = pState[0]; + d2 = pState[1]; + + pCoeffs += 5u; + + + /* First part of the processing with loop unrolling. Compute 16 outputs at a time. + ** a second loop below computes the remaining 1 to 15 samples. */ + while(sample > 0u) { + + /* y[n] = b0 * x[n] + d1 */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + /* d2 = b2 * x[n] + a2 * y[n] */ + + /* Read the first 2 inputs. 2 cycles */ + Xn1 = pIn[0 ]; + Xn2 = pIn[1 ]; + + /* Sample 1. 5 cycles */ + Xn3 = pIn[2 ]; + acc1 = b0 * Xn1 + d1; + + Xn4 = pIn[3 ]; + d1 = b1 * Xn1 + d2; + + Xn5 = pIn[4 ]; + d2 = b2 * Xn1; + + Xn6 = pIn[5 ]; + d1 += a1 * acc1; + + Xn7 = pIn[6 ]; + d2 += a2 * acc1; + + /* Sample 2. 5 cycles */ + Xn8 = pIn[7 ]; + acc2 = b0 * Xn2 + d1; + + Xn9 = pIn[8 ]; + d1 = b1 * Xn2 + d2; + + Xn10 = pIn[9 ]; + d2 = b2 * Xn2; + + Xn11 = pIn[10]; + d1 += a1 * acc2; + + Xn12 = pIn[11]; + d2 += a2 * acc2; + + /* Sample 3. 5 cycles */ + Xn13 = pIn[12]; + acc3 = b0 * Xn3 + d1; + + Xn14 = pIn[13]; + d1 = b1 * Xn3 + d2; + + Xn15 = pIn[14]; + d2 = b2 * Xn3; + + Xn16 = pIn[15]; + d1 += a1 * acc3; + + pIn += 16; + d2 += a2 * acc3; + + /* Sample 4. 5 cycles */ + acc4 = b0 * Xn4 + d1; + d1 = b1 * Xn4 + d2; + d2 = b2 * Xn4; + d1 += a1 * acc4; + d2 += a2 * acc4; + + /* Sample 5. 5 cycles */ + acc5 = b0 * Xn5 + d1; + d1 = b1 * Xn5 + d2; + d2 = b2 * Xn5; + d1 += a1 * acc5; + d2 += a2 * acc5; + + /* Sample 6. 5 cycles */ + acc6 = b0 * Xn6 + d1; + d1 = b1 * Xn6 + d2; + d2 = b2 * Xn6; + d1 += a1 * acc6; + d2 += a2 * acc6; + + /* Sample 7. 5 cycles */ + acc7 = b0 * Xn7 + d1; + d1 = b1 * Xn7 + d2; + d2 = b2 * Xn7; + d1 += a1 * acc7; + d2 += a2 * acc7; + + /* Sample 8. 5 cycles */ + acc8 = b0 * Xn8 + d1; + d1 = b1 * Xn8 + d2; + d2 = b2 * Xn8; + d1 += a1 * acc8; + d2 += a2 * acc8; + + /* Sample 9. 5 cycles */ + acc9 = b0 * Xn9 + d1; + d1 = b1 * Xn9 + d2; + d2 = b2 * Xn9; + d1 += a1 * acc9; + d2 += a2 * acc9; + + /* Sample 10. 5 cycles */ + acc10 = b0 * Xn10 + d1; + d1 = b1 * Xn10 + d2; + d2 = b2 * Xn10; + d1 += a1 * acc10; + d2 += a2 * acc10; + + /* Sample 11. 5 cycles */ + acc11 = b0 * Xn11 + d1; + d1 = b1 * Xn11 + d2; + d2 = b2 * Xn11; + d1 += a1 * acc11; + d2 += a2 * acc11; + + /* Sample 12. 5 cycles */ + acc12 = b0 * Xn12 + d1; + d1 = b1 * Xn12 + d2; + d2 = b2 * Xn12; + d1 += a1 * acc12; + d2 += a2 * acc12; + + /* Sample 13. 5 cycles */ + acc13 = b0 * Xn13 + d1; + d1 = b1 * Xn13 + d2; + d2 = b2 * Xn13; + + pOut[0 ] = acc1 ; + d1 += a1 * acc13; + + pOut[1 ] = acc2 ; + d2 += a2 * acc13; + + /* Sample 14. 5 cycles */ + pOut[2 ] = acc3 ; + acc14 = b0 * Xn14 + d1; + + pOut[3 ] = acc4 ; + d1 = b1 * Xn14 + d2; + + pOut[4 ] = acc5 ; + d2 = b2 * Xn14; + + pOut[5 ] = acc6 ; + d1 += a1 * acc14; + + pOut[6 ] = acc7 ; + d2 += a2 * acc14; + + /* Sample 15. 5 cycles */ + pOut[7 ] = acc8 ; + pOut[8 ] = acc9 ; + acc15 = b0 * Xn15 + d1; + + pOut[9 ] = acc10; + d1 = b1 * Xn15 + d2; + + pOut[10] = acc11; + d2 = b2 * Xn15; + + pOut[11] = acc12; + d1 += a1 * acc15; + + pOut[12] = acc13; + d2 += a2 * acc15; + + /* Sample 16. 5 cycles */ + pOut[13] = acc14; + acc16 = b0 * Xn16 + d1; + + pOut[14] = acc15; + d1 = b1 * Xn16 + d2; + + pOut[15] = acc16; + d2 = b2 * Xn16; + + sample--; + d1 += a1 * acc16; + + pOut += 16; + d2 += a2 * acc16; + } + + sample = blockSize & 0xFu; + while(sample > 0u) { + Xn1 = *pIn; + acc1 = b0 * Xn1 + d1; + + pIn++; + d1 = b1 * Xn1 + d2; + + *pOut = acc1; + d2 = b2 * Xn1; + + pOut++; + d1 += a1 * acc1; + + sample--; + d2 += a2 * acc1; + } + + /* Store the updated state variables back into the state array */ + pState[0] = d1; + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + + pState[1] = d2; + /* decrement the loop counter */ + stage--; + + pState += 2u; + + /*Reset the output working pointer */ + pOut = pDst; + + } while(stage > 0u); + +#elif defined(ARM_MATH_CM0_FAMILY) + + /* Run the below code for Cortex-M0 */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /*Reading the state values */ + d1 = pState[0]; + d2 = pState[1]; + + + sample = blockSize; + + while(sample > 0u) + { + /* Read the input */ + Xn1 = *pIn++; + + /* y[n] = b0 * x[n] + d1 */ + acc1 = (b0 * Xn1) + d1; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc1; + + /* Every time after the output is computed state should be updated. */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + d1 = ((b1 * Xn1) + (a1 * acc1)) + d2; + + /* d2 = b2 * x[n] + a2 * y[n] */ + d2 = (b2 * Xn1) + (a2 * acc1); + + /* decrement the loop counter */ + sample--; + } + + /* Store the updated state variables back into the state array */ + *pState++ = d1; + *pState++ = d2; + + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + + /*Reset the output working pointer */ + pOut = pDst; + + /* decrement the loop counter */ + stage--; + + } while(stage > 0u); + +#else + + float32_t Xn2, Xn3, Xn4; /* Input State variables */ + float32_t acc2, acc3, acc4; /* accumulator */ + + + float32_t p0, p1, p2, p3, p4, A1; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + + /*Reading the state values */ + d1 = pState[0]; + d2 = pState[1]; + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + sample = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(sample > 0u) { + + /* y[n] = b0 * x[n] + d1 */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + /* d2 = b2 * x[n] + a2 * y[n] */ + + /* Read the four inputs */ + Xn1 = pIn[0]; + Xn2 = pIn[1]; + Xn3 = pIn[2]; + Xn4 = pIn[3]; + pIn += 4; + + p0 = b0 * Xn1; + p1 = b1 * Xn1; + acc1 = p0 + d1; + p0 = b0 * Xn2; + p3 = a1 * acc1; + p2 = b2 * Xn1; + A1 = p1 + p3; + p4 = a2 * acc1; + d1 = A1 + d2; + d2 = p2 + p4; + + p1 = b1 * Xn2; + acc2 = p0 + d1; + p0 = b0 * Xn3; + p3 = a1 * acc2; + p2 = b2 * Xn2; + A1 = p1 + p3; + p4 = a2 * acc2; + d1 = A1 + d2; + d2 = p2 + p4; + + p1 = b1 * Xn3; + acc3 = p0 + d1; + p0 = b0 * Xn4; + p3 = a1 * acc3; + p2 = b2 * Xn3; + A1 = p1 + p3; + p4 = a2 * acc3; + d1 = A1 + d2; + d2 = p2 + p4; + + acc4 = p0 + d1; + p1 = b1 * Xn4; + p3 = a1 * acc4; + p2 = b2 * Xn4; + A1 = p1 + p3; + p4 = a2 * acc4; + d1 = A1 + d2; + d2 = p2 + p4; + + pOut[0] = acc1; + pOut[1] = acc2; + pOut[2] = acc3; + pOut[3] = acc4; + pOut += 4; + + sample--; + } + + sample = blockSize & 0x3u; + while(sample > 0u) { + Xn1 = *pIn++; + + p0 = b0 * Xn1; + p1 = b1 * Xn1; + acc1 = p0 + d1; + p3 = a1 * acc1; + p2 = b2 * Xn1; + A1 = p1 + p3; + p4 = a2 * acc1; + d1 = A1 + d2; + d2 = p2 + p4; + + *pOut++ = acc1; + + sample--; + } + + /* Store the updated state variables back into the state array */ + *pState++ = d1; + *pState++ = d2; + + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + + /*Reset the output working pointer */ + pOut = pDst; + + /* decrement the loop counter */ + stage--; + + } while(stage > 0u); + +#endif + +} +LOW_OPTIMIZATION_EXIT + +/** + * @} end of BiquadCascadeDF2T group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,603 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df2T_f64.c +* +* Description: Processing function for the floating-point transposed +* direct form II Biquad cascade filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** +* @ingroup groupFilters +*/ + +/** +* @defgroup BiquadCascadeDF2T Biquad Cascade IIR Filters Using a Direct Form II Transposed Structure +* +* This set of functions implements arbitrary order recursive (IIR) filters using a transposed direct form II structure. +* The filters are implemented as a cascade of second order Biquad sections. +* These functions provide a slight memory savings as compared to the direct form I Biquad filter functions. +* Only floating-point data is supported. +* +* This function operate on blocks of input and output data and each call to the function +* processes blockSize samples through the filter. +* pSrc points to the array of input data and +* pDst points to the array of output data. +* Both arrays contain blockSize values. +* +* \par Algorithm +* Each Biquad stage implements a second order filter using the difference equation: +*
       
+*    y[n] = b0 * x[n] + d1       
+*    d1 = b1 * x[n] + a1 * y[n] + d2       
+*    d2 = b2 * x[n] + a2 * y[n]       
+* 
+* where d1 and d2 represent the two state values. +* +* \par +* A Biquad filter using a transposed Direct Form II structure is shown below. +* \image html BiquadDF2Transposed.gif "Single transposed Direct Form II Biquad" +* Coefficients b0, b1, and b2 multiply the input signal x[n] and are referred to as the feedforward coefficients. +* Coefficients a1 and a2 multiply the output signal y[n] and are referred to as the feedback coefficients. +* Pay careful attention to the sign of the feedback coefficients. +* Some design tools flip the sign of the feedback coefficients: +*
       
+*    y[n] = b0 * x[n] + d1;       
+*    d1 = b1 * x[n] - a1 * y[n] + d2;       
+*    d2 = b2 * x[n] - a2 * y[n];       
+* 
+* In this case the feedback coefficients a1 and a2 must be negated when used with the CMSIS DSP Library. +* +* \par +* Higher order filters are realized as a cascade of second order sections. +* numStages refers to the number of second order stages used. +* For example, an 8th order filter would be realized with numStages=4 second order stages. +* A 9th order filter would be realized with numStages=5 second order stages with the +* coefficients for one of the stages configured as a first order filter (b2=0 and a2=0). +* +* \par +* pState points to the state variable array. +* Each Biquad stage has 2 state variables d1 and d2. +* The state variables are arranged in the pState array as: +*
       
+*     {d11, d12, d21, d22, ...}       
+* 
+* where d1x refers to the state variables for the first Biquad and +* d2x refers to the state variables for the second Biquad. +* The state array has a total length of 2*numStages values. +* The state variables are updated after each block of data is processed; the coefficients are untouched. +* +* \par +* The CMSIS library contains Biquad filters in both Direct Form I and transposed Direct Form II. +* The advantage of the Direct Form I structure is that it is numerically more robust for fixed-point data types. +* That is why the Direct Form I structure supports Q15 and Q31 data types. +* The transposed Direct Form II structure, on the other hand, requires a wide dynamic range for the state variables d1 and d2. +* Because of this, the CMSIS library only has a floating-point version of the Direct Form II Biquad. +* The advantage of the Direct Form II Biquad is that it requires half the number of state variables, 2 rather than 4, per Biquad stage. +* +* \par Instance Structure +* The coefficients and state variables for a filter are stored together in an instance data structure. +* A separate instance structure must be defined for each filter. +* Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. +* +* \par Init Functions +* There is also an associated initialization function. +* The initialization function performs following operations: +* - Sets the values of the internal structure fields. +* - Zeros out the values in the state buffer. +* To do this manually without calling the init function, assign the follow subfields of the instance structure: +* numStages, pCoeffs, pState. Also set all of the values in pState to zero. +* +* \par +* Use of the initialization function is optional. +* However, if the initialization function is used, then the instance structure cannot be placed into a const data section. +* To place an instance structure into a const data section, the instance structure must be manually initialized. +* Set the values in the state buffer to zeros before static initialization. +* For example, to statically initialize the instance structure use +*
       
+*     arm_biquad_cascade_df2T_instance_f64 S1 = {numStages, pState, pCoeffs};       
+* 
+* where numStages is the number of Biquad stages in the filter; pState is the address of the state buffer. +* pCoeffs is the address of the coefficient buffer; +* +*/ + +/** +* @addtogroup BiquadCascadeDF2T +* @{ +*/ + +/** +* @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. +* @param[in] *S points to an instance of the filter data structure. +* @param[in] *pSrc points to the block of input data. +* @param[out] *pDst points to the block of output data +* @param[in] blockSize number of samples to process. +* @return none. +*/ + + +LOW_OPTIMIZATION_ENTER +void arm_biquad_cascade_df2T_f64( +const arm_biquad_cascade_df2T_instance_f64 * S, +float64_t * pSrc, +float64_t * pDst, +uint32_t blockSize) +{ + + float64_t *pIn = pSrc; /* source pointer */ + float64_t *pOut = pDst; /* destination pointer */ + float64_t *pState = S->pState; /* State pointer */ + float64_t *pCoeffs = S->pCoeffs; /* coefficient pointer */ + float64_t acc1; /* accumulator */ + float64_t b0, b1, b2, a1, a2; /* Filter coefficients */ + float64_t Xn1; /* temporary input */ + float64_t d1, d2; /* state variables */ + uint32_t sample, stage = S->numStages; /* loop counters */ + +#if defined(ARM_MATH_CM7) + + float64_t Xn2, Xn3, Xn4, Xn5, Xn6, Xn7, Xn8; /* Input State variables */ + float64_t Xn9, Xn10, Xn11, Xn12, Xn13, Xn14, Xn15, Xn16; + float64_t acc2, acc3, acc4, acc5, acc6, acc7; /* Simulates the accumulator */ + float64_t acc8, acc9, acc10, acc11, acc12, acc13, acc14, acc15, acc16; + + do + { + /* Reading the coefficients */ + b0 = pCoeffs[0]; + b1 = pCoeffs[1]; + b2 = pCoeffs[2]; + a1 = pCoeffs[3]; + /* Apply loop unrolling and compute 16 output values simultaneously. */ + sample = blockSize >> 4u; + a2 = pCoeffs[4]; + + /*Reading the state values */ + d1 = pState[0]; + d2 = pState[1]; + + pCoeffs += 5u; + + + /* First part of the processing with loop unrolling. Compute 16 outputs at a time. + ** a second loop below computes the remaining 1 to 15 samples. */ + while(sample > 0u) { + + /* y[n] = b0 * x[n] + d1 */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + /* d2 = b2 * x[n] + a2 * y[n] */ + + /* Read the first 2 inputs. 2 cycles */ + Xn1 = pIn[0 ]; + Xn2 = pIn[1 ]; + + /* Sample 1. 5 cycles */ + Xn3 = pIn[2 ]; + acc1 = b0 * Xn1 + d1; + + Xn4 = pIn[3 ]; + d1 = b1 * Xn1 + d2; + + Xn5 = pIn[4 ]; + d2 = b2 * Xn1; + + Xn6 = pIn[5 ]; + d1 += a1 * acc1; + + Xn7 = pIn[6 ]; + d2 += a2 * acc1; + + /* Sample 2. 5 cycles */ + Xn8 = pIn[7 ]; + acc2 = b0 * Xn2 + d1; + + Xn9 = pIn[8 ]; + d1 = b1 * Xn2 + d2; + + Xn10 = pIn[9 ]; + d2 = b2 * Xn2; + + Xn11 = pIn[10]; + d1 += a1 * acc2; + + Xn12 = pIn[11]; + d2 += a2 * acc2; + + /* Sample 3. 5 cycles */ + Xn13 = pIn[12]; + acc3 = b0 * Xn3 + d1; + + Xn14 = pIn[13]; + d1 = b1 * Xn3 + d2; + + Xn15 = pIn[14]; + d2 = b2 * Xn3; + + Xn16 = pIn[15]; + d1 += a1 * acc3; + + pIn += 16; + d2 += a2 * acc3; + + /* Sample 4. 5 cycles */ + acc4 = b0 * Xn4 + d1; + d1 = b1 * Xn4 + d2; + d2 = b2 * Xn4; + d1 += a1 * acc4; + d2 += a2 * acc4; + + /* Sample 5. 5 cycles */ + acc5 = b0 * Xn5 + d1; + d1 = b1 * Xn5 + d2; + d2 = b2 * Xn5; + d1 += a1 * acc5; + d2 += a2 * acc5; + + /* Sample 6. 5 cycles */ + acc6 = b0 * Xn6 + d1; + d1 = b1 * Xn6 + d2; + d2 = b2 * Xn6; + d1 += a1 * acc6; + d2 += a2 * acc6; + + /* Sample 7. 5 cycles */ + acc7 = b0 * Xn7 + d1; + d1 = b1 * Xn7 + d2; + d2 = b2 * Xn7; + d1 += a1 * acc7; + d2 += a2 * acc7; + + /* Sample 8. 5 cycles */ + acc8 = b0 * Xn8 + d1; + d1 = b1 * Xn8 + d2; + d2 = b2 * Xn8; + d1 += a1 * acc8; + d2 += a2 * acc8; + + /* Sample 9. 5 cycles */ + acc9 = b0 * Xn9 + d1; + d1 = b1 * Xn9 + d2; + d2 = b2 * Xn9; + d1 += a1 * acc9; + d2 += a2 * acc9; + + /* Sample 10. 5 cycles */ + acc10 = b0 * Xn10 + d1; + d1 = b1 * Xn10 + d2; + d2 = b2 * Xn10; + d1 += a1 * acc10; + d2 += a2 * acc10; + + /* Sample 11. 5 cycles */ + acc11 = b0 * Xn11 + d1; + d1 = b1 * Xn11 + d2; + d2 = b2 * Xn11; + d1 += a1 * acc11; + d2 += a2 * acc11; + + /* Sample 12. 5 cycles */ + acc12 = b0 * Xn12 + d1; + d1 = b1 * Xn12 + d2; + d2 = b2 * Xn12; + d1 += a1 * acc12; + d2 += a2 * acc12; + + /* Sample 13. 5 cycles */ + acc13 = b0 * Xn13 + d1; + d1 = b1 * Xn13 + d2; + d2 = b2 * Xn13; + + pOut[0 ] = acc1 ; + d1 += a1 * acc13; + + pOut[1 ] = acc2 ; + d2 += a2 * acc13; + + /* Sample 14. 5 cycles */ + pOut[2 ] = acc3 ; + acc14 = b0 * Xn14 + d1; + + pOut[3 ] = acc4 ; + d1 = b1 * Xn14 + d2; + + pOut[4 ] = acc5 ; + d2 = b2 * Xn14; + + pOut[5 ] = acc6 ; + d1 += a1 * acc14; + + pOut[6 ] = acc7 ; + d2 += a2 * acc14; + + /* Sample 15. 5 cycles */ + pOut[7 ] = acc8 ; + pOut[8 ] = acc9 ; + acc15 = b0 * Xn15 + d1; + + pOut[9 ] = acc10; + d1 = b1 * Xn15 + d2; + + pOut[10] = acc11; + d2 = b2 * Xn15; + + pOut[11] = acc12; + d1 += a1 * acc15; + + pOut[12] = acc13; + d2 += a2 * acc15; + + /* Sample 16. 5 cycles */ + pOut[13] = acc14; + acc16 = b0 * Xn16 + d1; + + pOut[14] = acc15; + d1 = b1 * Xn16 + d2; + + pOut[15] = acc16; + d2 = b2 * Xn16; + + sample--; + d1 += a1 * acc16; + + pOut += 16; + d2 += a2 * acc16; + } + + sample = blockSize & 0xFu; + while(sample > 0u) { + Xn1 = *pIn; + acc1 = b0 * Xn1 + d1; + + pIn++; + d1 = b1 * Xn1 + d2; + + *pOut = acc1; + d2 = b2 * Xn1; + + pOut++; + d1 += a1 * acc1; + + sample--; + d2 += a2 * acc1; + } + + /* Store the updated state variables back into the state array */ + pState[0] = d1; + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + + pState[1] = d2; + /* decrement the loop counter */ + stage--; + + pState += 2u; + + /*Reset the output working pointer */ + pOut = pDst; + + } while(stage > 0u); + +#elif defined(ARM_MATH_CM0_FAMILY) + + /* Run the below code for Cortex-M0 */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /*Reading the state values */ + d1 = pState[0]; + d2 = pState[1]; + + + sample = blockSize; + + while(sample > 0u) + { + /* Read the input */ + Xn1 = *pIn++; + + /* y[n] = b0 * x[n] + d1 */ + acc1 = (b0 * Xn1) + d1; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc1; + + /* Every time after the output is computed state should be updated. */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + d1 = ((b1 * Xn1) + (a1 * acc1)) + d2; + + /* d2 = b2 * x[n] + a2 * y[n] */ + d2 = (b2 * Xn1) + (a2 * acc1); + + /* decrement the loop counter */ + sample--; + } + + /* Store the updated state variables back into the state array */ + *pState++ = d1; + *pState++ = d2; + + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + + /*Reset the output working pointer */ + pOut = pDst; + + /* decrement the loop counter */ + stage--; + + } while(stage > 0u); + +#else + + float64_t Xn2, Xn3, Xn4; /* Input State variables */ + float64_t acc2, acc3, acc4; /* accumulator */ + + + float64_t p0, p1, p2, p3, p4, A1; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + + /*Reading the state values */ + d1 = pState[0]; + d2 = pState[1]; + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + sample = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(sample > 0u) { + + /* y[n] = b0 * x[n] + d1 */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + /* d2 = b2 * x[n] + a2 * y[n] */ + + /* Read the four inputs */ + Xn1 = pIn[0]; + Xn2 = pIn[1]; + Xn3 = pIn[2]; + Xn4 = pIn[3]; + pIn += 4; + + p0 = b0 * Xn1; + p1 = b1 * Xn1; + acc1 = p0 + d1; + p0 = b0 * Xn2; + p3 = a1 * acc1; + p2 = b2 * Xn1; + A1 = p1 + p3; + p4 = a2 * acc1; + d1 = A1 + d2; + d2 = p2 + p4; + + p1 = b1 * Xn2; + acc2 = p0 + d1; + p0 = b0 * Xn3; + p3 = a1 * acc2; + p2 = b2 * Xn2; + A1 = p1 + p3; + p4 = a2 * acc2; + d1 = A1 + d2; + d2 = p2 + p4; + + p1 = b1 * Xn3; + acc3 = p0 + d1; + p0 = b0 * Xn4; + p3 = a1 * acc3; + p2 = b2 * Xn3; + A1 = p1 + p3; + p4 = a2 * acc3; + d1 = A1 + d2; + d2 = p2 + p4; + + acc4 = p0 + d1; + p1 = b1 * Xn4; + p3 = a1 * acc4; + p2 = b2 * Xn4; + A1 = p1 + p3; + p4 = a2 * acc4; + d1 = A1 + d2; + d2 = p2 + p4; + + pOut[0] = acc1; + pOut[1] = acc2; + pOut[2] = acc3; + pOut[3] = acc4; + pOut += 4; + + sample--; + } + + sample = blockSize & 0x3u; + while(sample > 0u) { + Xn1 = *pIn++; + + p0 = b0 * Xn1; + p1 = b1 * Xn1; + acc1 = p0 + d1; + p3 = a1 * acc1; + p2 = b2 * Xn1; + A1 = p1 + p3; + p4 = a2 * acc1; + d1 = A1 + d2; + d2 = p2 + p4; + + *pOut++ = acc1; + + sample--; + } + + /* Store the updated state variables back into the state array */ + *pState++ = d1; + *pState++ = d2; + + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + + /*Reset the output working pointer */ + pOut = pDst; + + /* decrement the loop counter */ + stage--; + + } while(stage > 0u); + +#endif + +} +LOW_OPTIMIZATION_EXIT + +/** + * @} end of BiquadCascadeDF2T group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,102 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df2T_init_f32.c +* +* Description: Initialization function for the floating-point transposed +* direct form II Biquad cascade filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF2T + * @{ + */ + +/** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] *S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + * + * Coefficient and State Ordering: + * \par + * The coefficients are stored in the array pCoeffs in the following order: + *
    
+ *     {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}    
+ * 
+ * + * \par + * where b1x and a1x are the coefficients for the first stage, + * b2x and a2x are the coefficients for the second stage, + * and so on. The pCoeffs array contains a total of 5*numStages values. + * + * \par + * The pState is a pointer to state array. + * Each Biquad stage has 2 state variables d1, and d2. + * The 2 state variables for stage 1 are first, then the 2 state variables for stage 2, and so on. + * The state array has a total length of 2*numStages values. + * The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cascade_df2T_init_f32( + arm_biquad_cascade_df2T_instance_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 2 * numStages */ + memset(pState, 0, (2u * (uint32_t) numStages) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + * @} end of BiquadCascadeDF2T group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,102 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_df2T_init_f64.c +* +* Description: Initialization function for the floating-point transposed +* direct form II Biquad cascade filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF2T + * @{ + */ + +/** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] *S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + * + * Coefficient and State Ordering: + * \par + * The coefficients are stored in the array pCoeffs in the following order: + *
    
+ *     {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}    
+ * 
+ * + * \par + * where b1x and a1x are the coefficients for the first stage, + * b2x and a2x are the coefficients for the second stage, + * and so on. The pCoeffs array contains a total of 5*numStages values. + * + * \par + * The pState is a pointer to state array. + * Each Biquad stage has 2 state variables d1, and d2. + * The 2 state variables for stage 1 are first, then the 2 state variables for stage 2, and so on. + * The state array has a total length of 2*numStages values. + * The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cascade_df2T_init_f64( + arm_biquad_cascade_df2T_instance_f64 * S, + uint8_t numStages, + float64_t * pCoeffs, + float64_t * pState) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 2 * numStages */ + memset(pState, 0, (2u * (uint32_t) numStages) * sizeof(float64_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + * @} end of BiquadCascadeDF2T group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,683 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_stereo_df2T_f32.c +* +* Description: Processing function for the floating-point transposed +* direct form II Biquad cascade filter. 2 channels +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** +* @ingroup groupFilters +*/ + +/** +* @defgroup BiquadCascadeDF2T Biquad Cascade IIR Filters Using a Direct Form II Transposed Structure +* +* This set of functions implements arbitrary order recursive (IIR) filters using a transposed direct form II structure. +* The filters are implemented as a cascade of second order Biquad sections. +* These functions provide a slight memory savings as compared to the direct form I Biquad filter functions. +* Only floating-point data is supported. +* +* This function operate on blocks of input and output data and each call to the function +* processes blockSize samples through the filter. +* pSrc points to the array of input data and +* pDst points to the array of output data. +* Both arrays contain blockSize values. +* +* \par Algorithm +* Each Biquad stage implements a second order filter using the difference equation: +*
       
+*    y[n] = b0 * x[n] + d1       
+*    d1 = b1 * x[n] + a1 * y[n] + d2       
+*    d2 = b2 * x[n] + a2 * y[n]       
+* 
+* where d1 and d2 represent the two state values. +* +* \par +* A Biquad filter using a transposed Direct Form II structure is shown below. +* \image html BiquadDF2Transposed.gif "Single transposed Direct Form II Biquad" +* Coefficients b0, b1, and b2 multiply the input signal x[n] and are referred to as the feedforward coefficients. +* Coefficients a1 and a2 multiply the output signal y[n] and are referred to as the feedback coefficients. +* Pay careful attention to the sign of the feedback coefficients. +* Some design tools flip the sign of the feedback coefficients: +*
       
+*    y[n] = b0 * x[n] + d1;       
+*    d1 = b1 * x[n] - a1 * y[n] + d2;       
+*    d2 = b2 * x[n] - a2 * y[n];       
+* 
+* In this case the feedback coefficients a1 and a2 must be negated when used with the CMSIS DSP Library. +* +* \par +* Higher order filters are realized as a cascade of second order sections. +* numStages refers to the number of second order stages used. +* For example, an 8th order filter would be realized with numStages=4 second order stages. +* A 9th order filter would be realized with numStages=5 second order stages with the +* coefficients for one of the stages configured as a first order filter (b2=0 and a2=0). +* +* \par +* pState points to the state variable array. +* Each Biquad stage has 2 state variables d1 and d2. +* The state variables are arranged in the pState array as: +*
       
+*     {d11, d12, d21, d22, ...}       
+* 
+* where d1x refers to the state variables for the first Biquad and +* d2x refers to the state variables for the second Biquad. +* The state array has a total length of 2*numStages values. +* The state variables are updated after each block of data is processed; the coefficients are untouched. +* +* \par +* The CMSIS library contains Biquad filters in both Direct Form I and transposed Direct Form II. +* The advantage of the Direct Form I structure is that it is numerically more robust for fixed-point data types. +* That is why the Direct Form I structure supports Q15 and Q31 data types. +* The transposed Direct Form II structure, on the other hand, requires a wide dynamic range for the state variables d1 and d2. +* Because of this, the CMSIS library only has a floating-point version of the Direct Form II Biquad. +* The advantage of the Direct Form II Biquad is that it requires half the number of state variables, 2 rather than 4, per Biquad stage. +* +* \par Instance Structure +* The coefficients and state variables for a filter are stored together in an instance data structure. +* A separate instance structure must be defined for each filter. +* Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. +* +* \par Init Functions +* There is also an associated initialization function. +* The initialization function performs following operations: +* - Sets the values of the internal structure fields. +* - Zeros out the values in the state buffer. +* To do this manually without calling the init function, assign the follow subfields of the instance structure: +* numStages, pCoeffs, pState. Also set all of the values in pState to zero. +* +* \par +* Use of the initialization function is optional. +* However, if the initialization function is used, then the instance structure cannot be placed into a const data section. +* To place an instance structure into a const data section, the instance structure must be manually initialized. +* Set the values in the state buffer to zeros before static initialization. +* For example, to statically initialize the instance structure use +*
       
+*     arm_biquad_cascade_df2T_instance_f32 S1 = {numStages, pState, pCoeffs};       
+* 
+* where numStages is the number of Biquad stages in the filter; pState is the address of the state buffer. +* pCoeffs is the address of the coefficient buffer; +* +*/ + +/** +* @addtogroup BiquadCascadeDF2T +* @{ +*/ + +/** +* @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. +* @param[in] *S points to an instance of the filter data structure. +* @param[in] *pSrc points to the block of input data. +* @param[out] *pDst points to the block of output data +* @param[in] blockSize number of samples to process. +* @return none. +*/ + + +LOW_OPTIMIZATION_ENTER +void arm_biquad_cascade_stereo_df2T_f32( +const arm_biquad_cascade_stereo_df2T_instance_f32 * S, +float32_t * pSrc, +float32_t * pDst, +uint32_t blockSize) +{ + + float32_t *pIn = pSrc; /* source pointer */ + float32_t *pOut = pDst; /* destination pointer */ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* coefficient pointer */ + float32_t acc1a, acc1b; /* accumulator */ + float32_t b0, b1, b2, a1, a2; /* Filter coefficients */ + float32_t Xn1a, Xn1b; /* temporary input */ + float32_t d1a, d2a, d1b, d2b; /* state variables */ + uint32_t sample, stage = S->numStages; /* loop counters */ + +#if defined(ARM_MATH_CM7) + + float32_t Xn2a, Xn3a, Xn4a, Xn5a, Xn6a, Xn7a, Xn8a; /* Input State variables */ + float32_t Xn2b, Xn3b, Xn4b, Xn5b, Xn6b, Xn7b, Xn8b; /* Input State variables */ + float32_t acc2a, acc3a, acc4a, acc5a, acc6a, acc7a, acc8a; /* Simulates the accumulator */ + float32_t acc2b, acc3b, acc4b, acc5b, acc6b, acc7b, acc8b; /* Simulates the accumulator */ + + do + { + /* Reading the coefficients */ + b0 = pCoeffs[0]; + b1 = pCoeffs[1]; + b2 = pCoeffs[2]; + a1 = pCoeffs[3]; + /* Apply loop unrolling and compute 8 output values simultaneously. */ + sample = blockSize >> 3u; + a2 = pCoeffs[4]; + + /*Reading the state values */ + d1a = pState[0]; + d2a = pState[1]; + d1b = pState[2]; + d2b = pState[3]; + + pCoeffs += 5u; + + /* First part of the processing with loop unrolling. Compute 8 outputs at a time. + ** a second loop below computes the remaining 1 to 7 samples. */ + while(sample > 0u) { + + /* y[n] = b0 * x[n] + d1 */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + /* d2 = b2 * x[n] + a2 * y[n] */ + + /* Read the first 2 inputs. 2 cycles */ + Xn1a = pIn[0 ]; + Xn1b = pIn[1 ]; + + /* Sample 1. 5 cycles */ + Xn2a = pIn[2 ]; + acc1a = b0 * Xn1a + d1a; + + Xn2b = pIn[3 ]; + d1a = b1 * Xn1a + d2a; + + Xn3a = pIn[4 ]; + d2a = b2 * Xn1a; + + Xn3b = pIn[5 ]; + d1a += a1 * acc1a; + + Xn4a = pIn[6 ]; + d2a += a2 * acc1a; + + /* Sample 2. 5 cycles */ + Xn4b = pIn[7 ]; + acc1b = b0 * Xn1b + d1b; + + Xn5a = pIn[8 ]; + d1b = b1 * Xn1b + d2b; + + Xn5b = pIn[9 ]; + d2b = b2 * Xn1b; + + Xn6a = pIn[10]; + d1b += a1 * acc1b; + + Xn6b = pIn[11]; + d2b += a2 * acc1b; + + /* Sample 3. 5 cycles */ + Xn7a = pIn[12]; + acc2a = b0 * Xn2a + d1a; + + Xn7b = pIn[13]; + d1a = b1 * Xn2a + d2a; + + Xn8a = pIn[14]; + d2a = b2 * Xn2a; + + Xn8b = pIn[15]; + d1a += a1 * acc2a; + + pIn += 16; + d2a += a2 * acc2a; + + /* Sample 4. 5 cycles */ + acc2b = b0 * Xn2b + d1b; + d1b = b1 * Xn2b + d2b; + d2b = b2 * Xn2b; + d1b += a1 * acc2b; + d2b += a2 * acc2b; + + /* Sample 5. 5 cycles */ + acc3a = b0 * Xn3a + d1a; + d1a = b1 * Xn3a + d2a; + d2a = b2 * Xn3a; + d1a += a1 * acc3a; + d2a += a2 * acc3a; + + /* Sample 6. 5 cycles */ + acc3b = b0 * Xn3b + d1b; + d1b = b1 * Xn3b + d2b; + d2b = b2 * Xn3b; + d1b += a1 * acc3b; + d2b += a2 * acc3b; + + /* Sample 7. 5 cycles */ + acc4a = b0 * Xn4a + d1a; + d1a = b1 * Xn4a + d2a; + d2a = b2 * Xn4a; + d1a += a1 * acc4a; + d2a += a2 * acc4a; + + /* Sample 8. 5 cycles */ + acc4b = b0 * Xn4b + d1b; + d1b = b1 * Xn4b + d2b; + d2b = b2 * Xn4b; + d1b += a1 * acc4b; + d2b += a2 * acc4b; + + /* Sample 9. 5 cycles */ + acc5a = b0 * Xn5a + d1a; + d1a = b1 * Xn5a + d2a; + d2a = b2 * Xn5a; + d1a += a1 * acc5a; + d2a += a2 * acc5a; + + /* Sample 10. 5 cycles */ + acc5b = b0 * Xn5b + d1b; + d1b = b1 * Xn5b + d2b; + d2b = b2 * Xn5b; + d1b += a1 * acc5b; + d2b += a2 * acc5b; + + /* Sample 11. 5 cycles */ + acc6a = b0 * Xn6a + d1a; + d1a = b1 * Xn6a + d2a; + d2a = b2 * Xn6a; + d1a += a1 * acc6a; + d2a += a2 * acc6a; + + /* Sample 12. 5 cycles */ + acc6b = b0 * Xn6b + d1b; + d1b = b1 * Xn6b + d2b; + d2b = b2 * Xn6b; + d1b += a1 * acc6b; + d2b += a2 * acc6b; + + /* Sample 13. 5 cycles */ + acc7a = b0 * Xn7a + d1a; + d1a = b1 * Xn7a + d2a; + + pOut[0 ] = acc1a ; + d2a = b2 * Xn7a; + + pOut[1 ] = acc1b ; + d1a += a1 * acc7a; + + pOut[2 ] = acc2a ; + d2a += a2 * acc7a; + + /* Sample 14. 5 cycles */ + pOut[3 ] = acc2b ; + acc7b = b0 * Xn7b + d1b; + + pOut[4 ] = acc3a ; + d1b = b1 * Xn7b + d2b; + + pOut[5 ] = acc3b ; + d2b = b2 * Xn7b; + + pOut[6 ] = acc4a ; + d1b += a1 * acc7b; + + pOut[7 ] = acc4b ; + d2b += a2 * acc7b; + + /* Sample 15. 5 cycles */ + pOut[8 ] = acc5a ; + acc8a = b0 * Xn8a + d1a; + + pOut[9 ] = acc5b; + d1a = b1 * Xn8a + d2a; + + pOut[10] = acc6a; + d2a = b2 * Xn8a; + + pOut[11] = acc6b; + d1a += a1 * acc8a; + + pOut[12] = acc7a; + d2a += a2 * acc8a; + + /* Sample 16. 5 cycles */ + pOut[13] = acc7b; + acc8b = b0 * Xn8b + d1b; + + pOut[14] = acc8a; + d1b = b1 * Xn8b + d2b; + + pOut[15] = acc8b; + d2b = b2 * Xn8b; + + sample--; + d1b += a1 * acc8b; + + pOut += 16; + d2b += a2 * acc8b; + } + + sample = blockSize & 0x7u; + while(sample > 0u) { + /* Read the input */ + Xn1a = *pIn++; //Channel a + Xn1b = *pIn++; //Channel b + + /* y[n] = b0 * x[n] + d1 */ + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc1a; + *pOut++ = acc1b; + + /* Every time after the output is computed state should be updated. */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + /* d2 = b2 * x[n] + a2 * y[n] */ + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + + sample--; + } + + /* Store the updated state variables back into the state array */ + pState[0] = d1a; + pState[1] = d2a; + + pState[2] = d1b; + pState[3] = d2b; + + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + /* decrement the loop counter */ + stage--; + + pState += 4u; + /*Reset the output working pointer */ + pOut = pDst; + + } while(stage > 0u); + +#elif defined(ARM_MATH_CM0_FAMILY) + + /* Run the below code for Cortex-M0 */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /*Reading the state values */ + d1a = pState[0]; + d2a = pState[1]; + d1b = pState[2]; + d2b = pState[3]; + + + sample = blockSize; + + while(sample > 0u) + { + /* Read the input */ + Xn1a = *pIn++; //Channel a + Xn1b = *pIn++; //Channel b + + /* y[n] = b0 * x[n] + d1 */ + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc1a; + *pOut++ = acc1b; + + /* Every time after the output is computed state should be updated. */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + /* d2 = b2 * x[n] + a2 * y[n] */ + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + + /* decrement the loop counter */ + sample--; + } + + /* Store the updated state variables back into the state array */ + *pState++ = d1a; + *pState++ = d2a; + *pState++ = d1b; + *pState++ = d2b; + + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + + /*Reset the output working pointer */ + pOut = pDst; + + /* decrement the loop counter */ + stage--; + + } while(stage > 0u); + +#else + + float32_t Xn2a, Xn3a, Xn4a; /* Input State variables */ + float32_t Xn2b, Xn3b, Xn4b; /* Input State variables */ + float32_t acc2a, acc3a, acc4a; /* accumulator */ + float32_t acc2b, acc3b, acc4b; /* accumulator */ + float32_t p0a, p1a, p2a, p3a, p4a, A1a; + float32_t p0b, p1b, p2b, p3b, p4b, A1b; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /*Reading the state values */ + d1a = pState[0]; + d2a = pState[1]; + d1b = pState[2]; + d2b = pState[3]; + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + sample = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(sample > 0u) { + + /* y[n] = b0 * x[n] + d1 */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + /* d2 = b2 * x[n] + a2 * y[n] */ + + /* Read the four inputs */ + Xn1a = pIn[0]; + Xn1b = pIn[1]; + Xn2a = pIn[2]; + Xn2b = pIn[3]; + Xn3a = pIn[4]; + Xn3b = pIn[5]; + Xn4a = pIn[6]; + Xn4b = pIn[7]; + pIn += 8; + + p0a = b0 * Xn1a; + p0b = b0 * Xn1b; + p1a = b1 * Xn1a; + p1b = b1 * Xn1b; + acc1a = p0a + d1a; + acc1b = p0b + d1b; + p0a = b0 * Xn2a; + p0b = b0 * Xn2b; + p3a = a1 * acc1a; + p3b = a1 * acc1b; + p2a = b2 * Xn1a; + p2b = b2 * Xn1b; + A1a = p1a + p3a; + A1b = p1b + p3b; + p4a = a2 * acc1a; + p4b = a2 * acc1b; + d1a = A1a + d2a; + d1b = A1b + d2b; + d2a = p2a + p4a; + d2b = p2b + p4b; + + p1a = b1 * Xn2a; + p1b = b1 * Xn2b; + acc2a = p0a + d1a; + acc2b = p0b + d1b; + p0a = b0 * Xn3a; + p0b = b0 * Xn3b; + p3a = a1 * acc2a; + p3b = a1 * acc2b; + p2a = b2 * Xn2a; + p2b = b2 * Xn2b; + A1a = p1a + p3a; + A1b = p1b + p3b; + p4a = a2 * acc2a; + p4b = a2 * acc2b; + d1a = A1a + d2a; + d1b = A1b + d2b; + d2a = p2a + p4a; + d2b = p2b + p4b; + + p1a = b1 * Xn3a; + p1b = b1 * Xn3b; + acc3a = p0a + d1a; + acc3b = p0b + d1b; + p0a = b0 * Xn4a; + p0b = b0 * Xn4b; + p3a = a1 * acc3a; + p3b = a1 * acc3b; + p2a = b2 * Xn3a; + p2b = b2 * Xn3b; + A1a = p1a + p3a; + A1b = p1b + p3b; + p4a = a2 * acc3a; + p4b = a2 * acc3b; + d1a = A1a + d2a; + d1b = A1b + d2b; + d2a = p2a + p4a; + d2b = p2b + p4b; + + acc4a = p0a + d1a; + acc4b = p0b + d1b; + p1a = b1 * Xn4a; + p1b = b1 * Xn4b; + p3a = a1 * acc4a; + p3b = a1 * acc4b; + p2a = b2 * Xn4a; + p2b = b2 * Xn4b; + A1a = p1a + p3a; + A1b = p1b + p3b; + p4a = a2 * acc4a; + p4b = a2 * acc4b; + d1a = A1a + d2a; + d1b = A1b + d2b; + d2a = p2a + p4a; + d2b = p2b + p4b; + + pOut[0] = acc1a; + pOut[1] = acc1b; + pOut[2] = acc2a; + pOut[3] = acc2b; + pOut[4] = acc3a; + pOut[5] = acc3b; + pOut[6] = acc4a; + pOut[7] = acc4b; + pOut += 8; + + sample--; + } + + sample = blockSize & 0x3u; + while(sample > 0u) { + Xn1a = *pIn++; + Xn1b = *pIn++; + + p0a = b0 * Xn1a; + p0b = b0 * Xn1b; + p1a = b1 * Xn1a; + p1b = b1 * Xn1b; + acc1a = p0a + d1a; + acc1b = p0b + d1b; + p3a = a1 * acc1a; + p3b = a1 * acc1b; + p2a = b2 * Xn1a; + p2b = b2 * Xn1b; + A1a = p1a + p3a; + A1b = p1b + p3b; + p4a = a2 * acc1a; + p4b = a2 * acc1b; + d1a = A1a + d2a; + d1b = A1b + d2b; + d2a = p2a + p4a; + d2b = p2b + p4b; + + *pOut++ = acc1a; + *pOut++ = acc1b; + + sample--; + } + + /* Store the updated state variables back into the state array */ + *pState++ = d1a; + *pState++ = d2a; + *pState++ = d1b; + *pState++ = d2b; + + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + + /*Reset the output working pointer */ + pOut = pDst; + + /* decrement the loop counter */ + stage--; + + } while(stage > 0u); + +#endif + +} +LOW_OPTIMIZATION_EXIT + +/** + * @} end of BiquadCascadeDF2T group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,102 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_biquad_cascade_stereo_df2T_init_f32.c +* +* Description: Initialization function for the floating-point transposed +* direct form II Biquad cascade filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup BiquadCascadeDF2T + * @{ + */ + +/** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] *S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + * + * Coefficient and State Ordering: + * \par + * The coefficients are stored in the array pCoeffs in the following order: + *
    
+ *     {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}    
+ * 
+ * + * \par + * where b1x and a1x are the coefficients for the first stage, + * b2x and a2x are the coefficients for the second stage, + * and so on. The pCoeffs array contains a total of 5*numStages values. + * + * \par + * The pState is a pointer to state array. + * Each Biquad stage has 2 state variables d1, and d2 for each channel. + * The 2 state variables for stage 1 are first, then the 2 state variables for stage 2, and so on. + * The state array has a total length of 2*numStages values. + * The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cascade_stereo_df2T_init_f32( + arm_biquad_cascade_stereo_df2T_instance_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 4 * numStages */ + memset(pState, 0, (4u * (uint32_t) numStages) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + * @} end of BiquadCascadeDF2T group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,647 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_f32.c +* +* Description: Convolution of floating-point sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup Conv Convolution + * + * Convolution is a mathematical operation that operates on two finite length vectors to generate a finite length output vector. + * Convolution is similar to correlation and is frequently used in filtering and data analysis. + * The CMSIS DSP library contains functions for convolving Q7, Q15, Q31, and floating-point data types. + * The library also provides fast versions of the Q15 and Q31 functions on Cortex-M4 and Cortex-M3. + * + * \par Algorithm + * Let a[n] and b[n] be sequences of length srcALen and srcBLen samples respectively. + * Then the convolution + * + *
    
+ *                   c[n] = a[n] * b[n]    
+ * 
+ * + * \par + * is defined as + * \image html ConvolutionEquation.gif + * \par + * Note that c[n] is of length srcALen + srcBLen - 1 and is defined over the interval n=0, 1, 2, ..., srcALen + srcBLen - 2. + * pSrcA points to the first input vector of length srcALen and + * pSrcB points to the second input vector of length srcBLen. + * The output result is written to pDst and the calling function must allocate srcALen+srcBLen-1 words for the result. + * + * \par + * Conceptually, when two signals a[n] and b[n] are convolved, + * the signal b[n] slides over a[n]. + * For each offset \c n, the overlapping portions of a[n] and b[n] are multiplied and summed together. + * + * \par + * Note that convolution is a commutative operation: + * + *
    
+ *                   a[n] * b[n] = b[n] * a[n].    
+ * 
+ * + * \par + * This means that switching the A and B arguments to the convolution functions has no effect. + * + * Fixed-Point Behavior + * + * \par + * Convolution requires summing up a large number of intermediate products. + * As such, the Q7, Q15, and Q31 functions run a risk of overflow and saturation. + * Refer to the function specific documentation below for further details of the particular algorithm used. + * + * + * Fast Versions + * + * \par + * Fast versions are supported for Q31 and Q15. Cycles for Fast versions are less compared to Q31 and Q15 of conv and the design requires + * the input signals should be scaled down to avoid intermediate overflows. + * + * + * Opt Versions + * + * \par + * Opt versions are supported for Q15 and Q7. Design uses internal scratch buffer for getting good optimisation. + * These versions are optimised in cycles and consumes more memory(Scratch memory) compared to Q15 and Q7 versions + */ + +/** + * @addtogroup Conv + * @{ + */ + +/** + * @brief Convolution of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + */ + +void arm_conv_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst) +{ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float32_t *pIn1; /* inputA pointer */ + float32_t *pIn2; /* inputB pointer */ + float32_t *pOut = pDst; /* output pointer */ + float32_t *px; /* Intermediate inputA pointer */ + float32_t *py; /* Intermediate inputB pointer */ + float32_t *pSrc1, *pSrc2; /* Intermediate pointers */ + float32_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + float32_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t j, k, count, blkCnt, blockSize1, blockSize2, blockSize3; /* loop counters */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 1] */ + sum += *px++ * *py--; + + /* x[1] * y[srcBLen - 2] */ + sum += *px++ * *py--; + + /* x[2] * y[srcBLen - 3] */ + sum += *px++ * *py--; + + /* x[3] * y[srcBLen - 4] */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0.0f; + acc1 = 0.0f; + acc2 = 0.0f; + acc3 = 0.0f; + + /* read x[0], x[1], x[2] samples */ + x0 = *(px++); + x1 = *(px++); + x2 = *(px++); + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *(py--); + + /* Read x[3] sample */ + x3 = *(px); + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[srcBLen - 1] */ + acc0 += x0 * c0; + + /* acc1 += x[1] * y[srcBLen - 1] */ + acc1 += x1 * c0; + + /* acc2 += x[2] * y[srcBLen - 1] */ + acc2 += x2 * c0; + + /* acc3 += x[3] * y[srcBLen - 1] */ + acc3 += x3 * c0; + + /* Read y[srcBLen - 2] sample */ + c0 = *(py--); + + /* Read x[4] sample */ + x0 = *(px + 1u); + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[srcBLen - 2] */ + acc0 += x1 * c0; + /* acc1 += x[2] * y[srcBLen - 2] */ + acc1 += x2 * c0; + /* acc2 += x[3] * y[srcBLen - 2] */ + acc2 += x3 * c0; + /* acc3 += x[4] * y[srcBLen - 2] */ + acc3 += x0 * c0; + + /* Read y[srcBLen - 3] sample */ + c0 = *(py--); + + /* Read x[5] sample */ + x1 = *(px + 2u); + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[srcBLen - 3] */ + acc0 += x2 * c0; + /* acc1 += x[3] * y[srcBLen - 2] */ + acc1 += x3 * c0; + /* acc2 += x[4] * y[srcBLen - 2] */ + acc2 += x0 * c0; + /* acc3 += x[5] * y[srcBLen - 2] */ + acc3 += x1 * c0; + + /* Read y[srcBLen - 4] sample */ + c0 = *(py--); + + /* Read x[6] sample */ + x2 = *(px + 3u); + px += 4u; + + /* Perform the multiply-accumulates */ + /* acc0 += x[3] * y[srcBLen - 4] */ + acc0 += x3 * c0; + /* acc1 += x[4] * y[srcBLen - 4] */ + acc1 += x0 * c0; + /* acc2 += x[5] * y[srcBLen - 4] */ + acc2 += x1 * c0; + /* acc3 += x[6] * y[srcBLen - 4] */ + acc3 += x2 * c0; + + + } while(--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Read y[srcBLen - 5] sample */ + c0 = *(py--); + + /* Read x[7] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 += x0 * c0; + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 += x1 * c0; + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 += x2 * c0; + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 += x3 * c0; + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc0; + *pOut++ = acc1; + *pOut++ = acc2; + *pOut++ = acc3; + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + + /* Decrement the loop counter */ + blkCnt--; + } + + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += *px++ * *py--; + sum += *px++ * *py--; + sum += *px++ * *py--; + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3 >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + sum += *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum += *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + sum += *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* If the blockSize3 is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = blockSize3 % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the loop counter */ + blockSize3--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + float32_t *pIn1 = pSrcA; /* inputA pointer */ + float32_t *pIn2 = pSrcB; /* inputB pointer */ + float32_t sum; /* Accumulator */ + uint32_t i, j; /* loop counters */ + + /* Loop to calculate convolution for output length number of times */ + for (i = 0u; i < ((srcALen + srcBLen) - 1u); i++) + { + /* Initialize sum with zero to carry out MAC operations */ + sum = 0.0f; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0u; j <= i; j++) + { + /* Check the array limitations */ + if((((i - j) < srcBLen) && (j < srcALen))) + { + /* z[i] += x[i-j] * y[j] */ + sum += pIn1[j] * pIn2[i - j]; + } + } + /* Store the output in the destination buffer */ + pDst[i] = sum; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of Conv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_opt_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_opt_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,543 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_fast_opt_q15.c +* +* Description: Fast Q15 Convolution. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Conv + * @{ + */ + +/** + * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @param[in] *pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return none. + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, scratch1 and scratch2 buffers should be aligned by 32-bit + * + * Scaling and Overflow Behavior: + * + * \par + * This fast version uses a 32-bit accumulator with 2.30 format. + * The accumulator maintains full precision of the intermediate multiplication results + * but provides only a single guard bit. There is no saturation on intermediate additions. + * Thus, if the accumulator overflows it wraps around and distorts the result. + * The input signals should be scaled down to avoid intermediate overflows. + * Scale down the inputs by log2(min(srcALen, srcBLen)) (log2 is read as log to the base 2) times to avoid overflows, + * as maximum of min(srcALen, srcBLen) number of additions are carried internally. + * The 2.30 accumulator is right shifted by 15 bits and then saturated to 1.15 format to yield the final result. + * + * \par + * See arm_conv_q15() for a slower implementation of this function which uses 64-bit accumulation to avoid wrap around distortion. + */ + +void arm_conv_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2) +{ + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + q31_t x1, x2, x3; /* Temporary variables to hold state and coefficient values */ + q31_t y1, y2; /* State variables */ + q15_t *pOut = pDst; /* output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, k, blkCnt; /* loop counter */ + uint32_t tapCnt; /* loop count */ +#ifdef UNALIGNED_SUPPORT_DISABLE + + q15_t a, b; + +#endif /* #ifdef UNALIGNED_SUPPORT_DISABLE */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Pointer to take end of scratch2 buffer */ + pScr2 = pScratch2 + srcBLen - 1; + + /* points to smaller length sequence */ + px = pIn2; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + + /* Copy smaller length input sequence in reverse order into second scratch buffer */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Assuming scratch1 buffer is aligned by 32-bit */ + /* Fill (srcBLen - 1u) zeros in scratch1 buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1u); + + /* Copy bigger length sequence(srcALen) samples in scratch1 buffer */ + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr1, srcALen); + + /* Update pointers */ + pScr1 += srcALen; + +#else + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcALen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcALen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = *pIn1++; + + /* Decrement the loop counter */ + k--; + } + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Fill (srcBLen - 1u) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update pointer */ + pScr1 += (srcBLen - 1u); + +#else + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = (srcBLen - 1u) >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = (srcBLen - 1u) % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + + /* Initialization of pIn2 pointer */ + pIn2 = py; + + /* First part of the processing with loop unrolling process 4 data points at a time. + ** a second loop below process for the remaining 1 to 3 samples. */ + + /* Actual convolution process starts here */ + blkCnt = (srcALen + srcBLen - 1u) >> 2; + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* Read next two samples from scratch1 buffer */ + x2 = *__SIMD32(pScr1)++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pIn2); + y2 = _SIMD32_OFFSET(pIn2 + 2u); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = _SIMD32_OFFSET(pScr1); + + /* multiply and accumlate */ + acc0 = __SMLAD(x2, y2, acc0); + acc2 = __SMLAD(x1, y2, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + acc1 = __SMLADX(x3, y2, acc1); + + x2 = _SIMD32_OFFSET(pScr1 + 2u); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y2, acc3); + +#else + + /* Read four samples from smaller buffer */ + a = *pIn2; + b = *(pIn2 + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + y1 = __PKHBT(a, b, 16); +#else + y1 = __PKHBT(b, a, 16); +#endif + + a = *(pIn2 + 2); + b = *(pIn2 + 3); +#ifndef ARM_MATH_BIG_ENDIAN + y2 = __PKHBT(a, b, 16); +#else + y2 = __PKHBT(b, a, 16); +#endif + + acc0 = __SMLAD(x1, y1, acc0); + + acc2 = __SMLAD(x2, y1, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc1 = __SMLADX(x3, y1, acc1); + + a = *pScr1; + b = *(pScr1 + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(a, b, 16); +#else + x1 = __PKHBT(b, a, 16); +#endif + + acc0 = __SMLAD(x2, y2, acc0); + + acc2 = __SMLAD(x1, y2, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + acc1 = __SMLADX(x3, y2, acc1); + + a = *(pScr1 + 2); + b = *(pScr1 + 3); + +#ifndef ARM_MATH_BIG_ENDIAN + x2 = __PKHBT(a, b, 16); +#else + x2 = __PKHBT(b, a, 16); +#endif + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y2, acc3); + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* update scratch pointers */ + pIn2 += 4u; + pScr1 += 4u; + + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4u; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + + /* Store the results in the accumulators in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16); + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16); + + +#else + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16); + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16); + + + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 4u; + + } + + + blkCnt = (srcALen + srcBLen - 1u) & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + + acc0 += (*pScr1++ * *pIn2++); + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + ** Then store the output in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 1u; + + } + +} + +/** + * @} end of Conv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1410 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_fast_q15.c +* +* Description: Fast Q15 Convolution. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Conv + * @{ + */ + +/** + * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + * + * Scaling and Overflow Behavior: + * + * \par + * This fast version uses a 32-bit accumulator with 2.30 format. + * The accumulator maintains full precision of the intermediate multiplication results + * but provides only a single guard bit. There is no saturation on intermediate additions. + * Thus, if the accumulator overflows it wraps around and distorts the result. + * The input signals should be scaled down to avoid intermediate overflows. + * Scale down the inputs by log2(min(srcALen, srcBLen)) (log2 is read as log to the base 2) times to avoid overflows, + * as maximum of min(srcALen, srcBLen) number of additions are carried internally. + * The 2.30 accumulator is right shifted by 15 bits and then saturated to 1.15 format to yield the final result. + * + * \par + * See arm_conv_q15() for a slower implementation of this function which uses 64-bit accumulation to avoid wrap around distortion. + */ + +void arm_conv_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst) +{ +#ifndef UNALIGNED_SUPPORT_DISABLE + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *pOut = pDst; /* output pointer */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t blockSize1, blockSize2, blockSize3, j, k, count, blkCnt; /* loop counter */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations less than 4 */ + /* Second part of this stage computes the MAC operations greater than or equal to 4 */ + + /* The first part of the stage starts here */ + while((count < 4u) && (blockSize1 > 0u)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over number of MAC operations between + * inputA samples and inputB samples */ + k = count; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* The second part of the stage starts here */ + /* The internal loop, over count, is unrolled by 4 */ + /* To, read the last two inputB samples using SIMD: + * y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */ + py = py - 1; + + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* x[0], x[1] are multiplied with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLADX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLADX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1u; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + (count - 1u); + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0u; + + + /* -------------------- + * Stage2 process + * -------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + py = py - 1u; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + + /* read x[0], x[1] samples */ + x0 = *__SIMD32(px); + /* read x[1], x[2] samples */ + x1 = _SIMD32_OFFSET(px+1); + px+= 2u; + + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the last two inputB samples using SIMD: + * y[srcBLen - 1] and y[srcBLen - 2] */ + c0 = *__SIMD32(py)--; + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLADX(x0, c0, acc0); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLADX(x1, c0, acc1); + + /* Read x[2], x[3] */ + x2 = *__SIMD32(px); + + /* Read x[3], x[4] */ + x3 = _SIMD32_OFFSET(px+1); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLADX(x2, c0, acc2); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLADX(x3, c0, acc3); + + /* Read y[srcBLen - 3] and y[srcBLen - 4] */ + c0 = *__SIMD32(py)--; + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLADX(x2, c0, acc0); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLADX(x3, c0, acc1); + + /* Read x[4], x[5] */ + x0 = _SIMD32_OFFSET(px+2); + + /* Read x[5], x[6] */ + x1 = _SIMD32_OFFSET(px+3); + px += 4u; + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLADX(x0, c0, acc2); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLADX(x1, c0, acc3); + + } while(--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + if(k == 1u) + { + /* Read y[srcBLen - 5] */ + c0 = *(py+1); + +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; + +#else + + c0 = c0 & 0x0000FFFF; + +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + x3 = *__SIMD32(px); + px++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLADX(x1, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + if(k == 2u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = _SIMD32_OFFSET(py); + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px+1); + px += 2u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + } + + if(k == 3u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = _SIMD32_OFFSET(py); + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px+1); + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + + /* Read y[srcBLen - 7] */ + c0 = *(py-1); +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; +#else + + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + x3 = _SIMD32_OFFSET(px+2); + px += 3u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x1, c0, acc0); + acc1 = __SMLAD(x2, c0, acc1); + acc2 = __SMLADX(x2, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + /* Store the results in the accumulators in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = __PKHBT((acc0 >> 15), (acc1 >> 15), 16); + *__SIMD32(pOut)++ = __PKHBT((acc2 >> 15), (acc3 >> 15), 16); + +#else + + *__SIMD32(pOut)++ = __PKHBT((acc1 >> 15), (acc0 >> 15), 16); + *__SIMD32(pOut)++ = __PKHBT((acc3 >> 15), (acc2 >> 15), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + pIn2 = pSrc2 - 1u; + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations greater than 4 */ + /* Second part of this stage computes the MAC operations less than or equal to 4 */ + + /* The first part of the stage starts here */ + j = blockSize3 >> 2u; + + while((j > 0u) && (blockSize3 > 0u)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3 >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[srcALen - srcBLen + 1], x[srcALen - srcBLen + 2] are multiplied + * with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLADX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied + * with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLADX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1u; + + /* If the blockSize3 is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = blockSize3 % 0x4u; + + while(k > 0u) + { + /* sum += x[srcALen - srcBLen + 5] * y[srcBLen - 5] */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the loop counter */ + blockSize3--; + + j--; + } + + /* The second part of the stage starts here */ + /* SIMD is not used for the next MAC operations, + * so pointer py is updated to read only one sample at a time */ + py = py + 1u; + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the loop counter */ + blockSize3--; + } + +#else + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *pOut = pDst; /* output pointer */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t blockSize1, blockSize2, blockSize3, j, k, count, blkCnt; /* loop counter */ + q15_t a, b; + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations less than 4 */ + /* Second part of this stage computes the MAC operations greater than or equal to 4 */ + + /* The first part of the stage starts here */ + while((count < 4u) && (blockSize1 > 0u)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over number of MAC operations between + * inputA samples and inputB samples */ + k = count; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* The second part of the stage starts here */ + /* The internal loop, over count, is unrolled by 4 */ + /* To, read the last two inputB samples using SIMD: + * y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */ + py = py - 1; + + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + py++; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + (count - 1u); + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0u; + + + /* -------------------- + * Stage2 process + * -------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + py = py - 1u; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1] samples */ + a = *px++; + b = *px++; + +#ifndef ARM_MATH_BIG_ENDIAN + + x0 = __PKHBT(a, b, 16); + a = *px; + x1 = __PKHBT(b, a, 16); + +#else + + x0 = __PKHBT(b, a, 16); + a = *px; + x1 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the last two inputB samples using SIMD: + * y[srcBLen - 1] and y[srcBLen - 2] */ + a = *py; + b = *(py+1); + py -= 2; + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLADX(x0, c0, acc0); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLADX(x1, c0, acc1); + + a = *px; + b = *(px + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + x2 = __PKHBT(a, b, 16); + a = *(px + 2); + x3 = __PKHBT(b, a, 16); + +#else + + x2 = __PKHBT(b, a, 16); + a = *(px + 2); + x3 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLADX(x2, c0, acc2); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLADX(x3, c0, acc3); + + /* Read y[srcBLen - 3] and y[srcBLen - 4] */ + a = *py; + b = *(py+1); + py -= 2; + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLADX(x2, c0, acc0); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLADX(x3, c0, acc1); + + /* Read x[4], x[5], x[6] */ + a = *(px + 2); + b = *(px + 3); + +#ifndef ARM_MATH_BIG_ENDIAN + + x0 = __PKHBT(a, b, 16); + a = *(px + 4); + x1 = __PKHBT(b, a, 16); + +#else + + x0 = __PKHBT(b, a, 16); + a = *(px + 4); + x1 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + px += 4u; + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLADX(x0, c0, acc2); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLADX(x1, c0, acc3); + + } while(--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + if(k == 1u) + { + /* Read y[srcBLen - 5] */ + c0 = *(py+1); + +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; + +#else + + c0 = c0 & 0x0000FFFF; + +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + a = *px; + b = *(px+1); + px++; + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + +#else + + x3 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLADX(x1, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + if(k == 2u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + a = *py; + b = *(py+1); + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7], x[8], x[9] */ + a = *px; + b = *(px + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + a = *(px + 2); + x2 = __PKHBT(b, a, 16); + +#else + + x3 = __PKHBT(b, a, 16); + a = *(px + 2); + x2 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + px += 2u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + } + + if(k == 3u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + a = *py; + b = *(py+1); + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7], x[8], x[9] */ + a = *px; + b = *(px + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + a = *(px + 2); + x2 = __PKHBT(b, a, 16); + +#else + + x3 = __PKHBT(b, a, 16); + a = *(px + 2); + x2 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + + /* Read y[srcBLen - 7] */ + c0 = *(py-1); +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; +#else + + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + a = *(px+2); + b = *(px+3); + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + +#else + + x3 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + px += 3u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x1, c0, acc0); + acc1 = __SMLAD(x2, c0, acc1); + acc2 = __SMLADX(x2, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + /* Store the results in the accumulators in the destination buffer. */ + *pOut++ = (q15_t)(acc0 >> 15); + *pOut++ = (q15_t)(acc1 >> 15); + *pOut++ = (q15_t)(acc2 >> 15); + *pOut++ = (q15_t)(acc3 >> 15); + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + pIn2 = pSrc2 - 1u; + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations greater than 4 */ + /* Second part of this stage computes the MAC operations less than or equal to 4 */ + + /* The first part of the stage starts here */ + j = blockSize3 >> 2u; + + while((j > 0u) && (blockSize3 > 0u)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3 >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + py++; + + while(k > 0u) + { + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + /* Decrement the loop counter */ + k--; + } + + /* If the blockSize3 is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = blockSize3 % 0x4u; + + while(k > 0u) + { + /* sum += x[srcALen - srcBLen + 5] * y[srcBLen - 5] */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the loop counter */ + blockSize3--; + + j--; + } + + /* The second part of the stage starts here */ + /* SIMD is not used for the next MAC operations, + * so pointer py is updated to read only one sample at a time */ + py = py + 1u; + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the loop counter */ + blockSize3--; + } + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ +} + +/** + * @} end of Conv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,577 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_fast_q31.c +* +* Description: Q31 Convolution (fast version). +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Conv + * @{ + */ + +/** + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * This function is optimized for speed at the expense of fixed-point precision and overflow protection. + * The result of each 1.31 x 1.31 multiplication is truncated to 2.30 format. + * These intermediate results are accumulated in a 32-bit register in 2.30 format. + * Finally, the accumulator is saturated and converted to a 1.31 result. + * + * \par + * The fast version has the same overflow behavior as the standard version but provides less precision since it discards the low 32 bits of each multiplication result. + * In order to avoid overflows completely the input signals must be scaled down. + * Scale down the inputs by log2(min(srcALen, srcBLen)) (log2 is read as log to the base 2) times to avoid overflows, + * as maximum of min(srcALen, srcBLen) number of additions are carried internally. + * + * \par + * See arm_conv_q31() for a slower implementation of this function which uses 64-bit accumulation to provide higher precision. + */ + +void arm_conv_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst) +{ + q31_t *pIn1; /* inputA pointer */ + q31_t *pIn2; /* inputB pointer */ + q31_t *pOut = pDst; /* output pointer */ + q31_t *px; /* Intermediate inputA pointer */ + q31_t *py; /* Intermediate inputB pointer */ + q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + q31_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t j, k, count, blkCnt, blockSize1, blockSize2, blockSize3; /* loop counter */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* x[1] * y[srcBLen - 2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* x[2] * y[srcBLen - 3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* x[3] * y[srcBLen - 4] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *(px++); + x1 = *(px++); + x2 = *(px++); + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *(py--); + + /* Read x[3] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[0] * y[srcBLen - 1] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* acc1 += x[1] * y[srcBLen - 1] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* acc2 += x[2] * y[srcBLen - 1] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + + /* acc3 += x[3] * y[srcBLen - 1] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Read y[srcBLen - 2] sample */ + c0 = *(py--); + + /* Read x[4] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[srcBLen - 2] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc1 += x[2] * y[srcBLen - 2] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc2 += x[3] * y[srcBLen - 2] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc3 += x[4] * y[srcBLen - 2] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Read y[srcBLen - 3] sample */ + c0 = *(py--); + + /* Read x[5] sample */ + x1 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[srcBLen - 3] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc1 += x[3] * y[srcBLen - 3] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc2 += x[4] * y[srcBLen - 3] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc3 += x[5] * y[srcBLen - 3] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* Read y[srcBLen - 4] sample */ + c0 = *(py--); + + /* Read x[6] sample */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[3] * y[srcBLen - 4] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc1 += x[4] * y[srcBLen - 4] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc2 += x[5] * y[srcBLen - 4] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc3 += x[6] * y[srcBLen - 4] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x2 * c0)) >> 32); + + + } while(--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Read y[srcBLen - 5] sample */ + c0 = *(py--); + + /* Read x[7] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the results in the accumulators in the destination buffer. */ + *pOut++ = (q31_t) (acc0 << 1); + *pOut++ = (q31_t) (acc1 << 1); + *pOut++ = (q31_t) (acc2 << 1); + *pOut++ = (q31_t) (acc3 << 1); + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3 >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* If the blockSize3 is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = blockSize3 % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the loop counter */ + blockSize3--; + } + +} + +/** + * @} end of Conv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_opt_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_opt_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,545 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_opt_q15.c +* +* Description: Convolution of Q15 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Conv + * @{ + */ + +/** + * @brief Convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @param[in] *pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return none. + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, scratch1 and scratch2 buffers should be aligned by 32-bit + * + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both inputs are in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * This approach provides 33 guard bits and there is no risk of overflow. + * The 34.30 result is then truncated to 34.15 format by discarding the low 15 bits and then saturated to 1.15 format. + * + * + * \par + * Refer to arm_conv_fast_q15() for a faster but less precise version of this function for Cortex-M3 and Cortex-M4. + * + * + */ + +void arm_conv_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2) +{ + q63_t acc0, acc1, acc2, acc3; /* Accumulator */ + q31_t x1, x2, x3; /* Temporary variables to hold state and coefficient values */ + q31_t y1, y2; /* State variables */ + q15_t *pOut = pDst; /* output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, k, blkCnt; /* loop counter */ + uint32_t tapCnt; /* loop count */ +#ifdef UNALIGNED_SUPPORT_DISABLE + + q15_t a, b; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2 + srcBLen - 1; + + /* points to smaller length sequence */ + px = pIn2; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + /* Copy smaller length input sequence in reverse order into second scratch buffer */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Assuming scratch1 buffer is aligned by 32-bit */ + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1u); + + /* Copy bigger length sequence(srcALen) samples in scratch1 buffer */ + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr1, srcALen); + + /* Update pointers */ + pScr1 += srcALen; + +#else + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcALen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcALen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = *pIn1++; + + /* Decrement the loop counter */ + k--; + } + +#endif + + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Fill (srcBLen - 1u) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update pointer */ + pScr1 += (srcBLen - 1u); + +#else + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = (srcBLen - 1u) >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = (srcBLen - 1u) % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + +#endif + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + + /* Initialization of pIn2 pointer */ + pIn2 = py; + + /* First part of the processing with loop unrolling process 4 data points at a time. + ** a second loop below process for the remaining 1 to 3 samples. */ + + /* Actual convolution process starts here */ + blkCnt = (srcALen + srcBLen - 1u) >> 2; + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* Read next two samples from scratch1 buffer */ + x2 = *__SIMD32(pScr1)++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pIn2); + y2 = _SIMD32_OFFSET(pIn2 + 2u); + + /* multiply and accumlate */ + acc0 = __SMLALD(x1, y1, acc0); + acc2 = __SMLALD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLALDX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = _SIMD32_OFFSET(pScr1); + + /* multiply and accumlate */ + acc0 = __SMLALD(x2, y2, acc0); + acc2 = __SMLALD(x1, y2, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLALDX(x3, y1, acc3); + acc1 = __SMLALDX(x3, y2, acc1); + + x2 = _SIMD32_OFFSET(pScr1 + 2u); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLALDX(x3, y2, acc3); + +#else + + /* Read four samples from smaller buffer */ + a = *pIn2; + b = *(pIn2 + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + y1 = __PKHBT(a, b, 16); +#else + y1 = __PKHBT(b, a, 16); +#endif + + a = *(pIn2 + 2); + b = *(pIn2 + 3); +#ifndef ARM_MATH_BIG_ENDIAN + y2 = __PKHBT(a, b, 16); +#else + y2 = __PKHBT(b, a, 16); +#endif + + acc0 = __SMLALD(x1, y1, acc0); + + acc2 = __SMLALD(x2, y1, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc1 = __SMLALDX(x3, y1, acc1); + + a = *pScr1; + b = *(pScr1 + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(a, b, 16); +#else + x1 = __PKHBT(b, a, 16); +#endif + + acc0 = __SMLALD(x2, y2, acc0); + + acc2 = __SMLALD(x1, y2, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLALDX(x3, y1, acc3); + + acc1 = __SMLALDX(x3, y2, acc1); + + a = *(pScr1 + 2); + b = *(pScr1 + 3); + +#ifndef ARM_MATH_BIG_ENDIAN + x2 = __PKHBT(a, b, 16); +#else + x2 = __PKHBT(b, a, 16); +#endif + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLALDX(x3, y2, acc3); + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + pIn2 += 4u; + pScr1 += 4u; + + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4u; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + + /* Store the results in the accumulators in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16); + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16); + +#else + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16); + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16); + + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 4u; + + } + + + blkCnt = (srcALen + srcBLen - 1u) & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + + /* Read next two samples from scratch1 buffer */ + acc0 += (*pScr1++ * *pIn2++); + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + ** Then store the output in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 1u; + + } + +} + + +/** + * @} end of Conv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_opt_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_opt_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,435 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_opt_q7.c +* +* Description: Convolution of Q7 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Conv + * @{ + */ + +/** + * @brief Convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @param[in] *pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + * @return none. + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, scratch1 and scratch2 buffers should be aligned by 32-bit + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 32-bit internal accumulator. + * Both the inputs are represented in 1.7 format and multiplications yield a 2.14 result. + * The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + * This approach provides 17 guard bits and there is no risk of overflow as long as max(srcALen, srcBLen)<131072. + * The 18.14 result is then truncated to 18.7 format by discarding the low 7 bits and then saturated to 1.7 format. + * + */ + +void arm_conv_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2) +{ + + q15_t *pScr2, *pScr1; /* Intermediate pointers for scratch pointers */ + q15_t x4; /* Temporary input variable */ + q7_t *pIn1, *pIn2; /* inputA and inputB pointer */ + uint32_t j, k, blkCnt, tapCnt; /* loop counter */ + q7_t *px; /* Temporary input1 pointer */ + q15_t *py; /* Temporary input2 pointer */ + q31_t acc0, acc1, acc2, acc3; /* Accumulator */ + q31_t x1, x2, x3, y1; /* Temporary input variables */ + q7_t *pOut = pDst; /* output pointer */ + q7_t out0, out1, out2, out3; /* temporary variables */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2; + + /* points to smaller length sequence */ + px = pIn2 + srcBLen - 1; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) * px--; + *pScr2++ = x4; + x4 = (q15_t) * px--; + *pScr2++ = x4; + x4 = (q15_t) * px--; + *pScr2++ = x4; + x4 = (q15_t) * px--; + *pScr2++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) * px--; + *pScr2++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1u); + + /* Copy (srcALen) samples in scratch buffer */ + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcALen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcALen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Fill (srcBLen - 1u) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update pointer */ + pScr1 += (srcBLen - 1u); + +#else + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = (srcBLen - 1u) >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = (srcBLen - 1u) % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + +#endif + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* Initialization of pIn2 pointer */ + pIn2 = (q7_t *) py; + + pScr2 = py; + + /* Actual convolution process starts here */ + blkCnt = (srcALen + srcBLen - 1u) >> 2; + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* Read next two samples from scratch1 buffer */ + x2 = *__SIMD32(pScr1)++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pScr2); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pScr2 + 2u); + + acc0 = __SMLAD(x2, y1, acc0); + + acc2 = __SMLAD(x1, y1, acc2); + + acc1 = __SMLADX(x3, y1, acc1); + + x2 = *__SIMD32(pScr1)++; + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + pScr2 += 4u; + + + /* Decrement the loop counter */ + tapCnt--; + } + + + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4u; + + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2); + acc1 += (*pScr1++ * *pScr2); + acc2 += (*pScr1++ * *pScr2); + acc3 += (*pScr1++ * *pScr2++); + + pScr1 -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + out0 = (q7_t) (__SSAT(acc0 >> 7u, 8)); + out1 = (q7_t) (__SSAT(acc1 >> 7u, 8)); + out2 = (q7_t) (__SSAT(acc2 >> 7u, 8)); + out3 = (q7_t) (__SSAT(acc3 >> 7u, 8)); + + *__SIMD32(pOut)++ = __PACKq7(out0, out1, out2, out3); + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 4u; + + } + + + blkCnt = (srcALen + srcBLen - 1u) & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + acc0 += (*pScr1++ * *pScr2++); + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(acc0 >> 7u, 8)); + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 1u; + + } + +} + + +/** + * @} end of Conv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,669 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_partial_f32.c +* +* Description: Partial convolution of floating-point sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup PartialConv Partial Convolution + * + * Partial Convolution is equivalent to Convolution except that a subset of the output samples is generated. + * Each function has two additional arguments. + * firstIndex specifies the starting index of the subset of output samples. + * numPoints is the number of output samples to compute. + * The function computes the output in the range + * [firstIndex, ..., firstIndex+numPoints-1]. + * The output array pDst contains numPoints values. + * + * The allowable range of output indices is [0 srcALen+srcBLen-2]. + * If the requested subset does not fall in this range then the functions return ARM_MATH_ARGUMENT_ERROR. + * Otherwise the functions return ARM_MATH_SUCCESS. + * \note Refer arm_conv_f32() for details on fixed point behavior. + * + * + * Fast Versions + * + * \par + * Fast versions are supported for Q31 and Q15 of partial convolution. Cycles for Fast versions are less compared to Q31 and Q15 of partial conv and the design requires + * the input signals should be scaled down to avoid intermediate overflows. + * + * + * Opt Versions + * + * \par + * Opt versions are supported for Q15 and Q7. Design uses internal scratch buffer for getting good optimisation. + * These versions are optimised in cycles and consumes more memory(Scratch memory) compared to Q15 and Q7 versions of partial convolution + */ + +/** + * @addtogroup PartialConv + * @{ + */ + +/** + * @brief Partial convolution of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + +arm_status arm_conv_partial_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float32_t *pIn1 = pSrcA; /* inputA pointer */ + float32_t *pIn2 = pSrcB; /* inputB pointer */ + float32_t *pOut = pDst; /* output pointer */ + float32_t *px; /* Intermediate inputA pointer */ + float32_t *py; /* Intermediate inputB pointer */ + float32_t *pSrc1, *pSrc2; /* Intermediate pointers */ + float32_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + float32_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t j, k, count = 0u, blkCnt, check; + int32_t blockSize1, blockSize2, blockSize3; /* loop counters */ + arm_status status; /* status of Partial convolution */ + + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = ((int32_t) srcBLen - 1) - (int32_t) firstIndex; + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1u)) ? blockSize1 : + (int32_t) numPoints) : 0; + blockSize2 = ((int32_t) check - blockSize3) - + (blockSize1 + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1u + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + firstIndex; + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while(blockSize1 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 1] */ + sum += *px++ * *py--; + + /* x[1] * y[srcBLen - 2] */ + sum += *px++ * *py--; + + /* x[2] * y[srcBLen - 3] */ + sum += *px++ * *py--; + + /* x[3] * y[srcBLen - 4] */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc1; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + px = pIn1 + firstIndex - srcBLen + 1; + } + else + { + px = pIn1; + } + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = ((uint32_t) blockSize2 >> 2u); + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0.0f; + acc1 = 0.0f; + acc2 = 0.0f; + acc3 = 0.0f; + + /* read x[0], x[1], x[2] samples */ + x0 = *(px++); + x1 = *(px++); + x2 = *(px++); + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *(py--); + + /* Read x[3] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[srcBLen - 1] */ + acc0 += x0 * c0; + + /* acc1 += x[1] * y[srcBLen - 1] */ + acc1 += x1 * c0; + + /* acc2 += x[2] * y[srcBLen - 1] */ + acc2 += x2 * c0; + + /* acc3 += x[3] * y[srcBLen - 1] */ + acc3 += x3 * c0; + + /* Read y[srcBLen - 2] sample */ + c0 = *(py--); + + /* Read x[4] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[srcBLen - 2] */ + acc0 += x1 * c0; + /* acc1 += x[2] * y[srcBLen - 2] */ + acc1 += x2 * c0; + /* acc2 += x[3] * y[srcBLen - 2] */ + acc2 += x3 * c0; + /* acc3 += x[4] * y[srcBLen - 2] */ + acc3 += x0 * c0; + + /* Read y[srcBLen - 3] sample */ + c0 = *(py--); + + /* Read x[5] sample */ + x1 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[srcBLen - 3] */ + acc0 += x2 * c0; + /* acc1 += x[3] * y[srcBLen - 2] */ + acc1 += x3 * c0; + /* acc2 += x[4] * y[srcBLen - 2] */ + acc2 += x0 * c0; + /* acc3 += x[5] * y[srcBLen - 2] */ + acc3 += x1 * c0; + + /* Read y[srcBLen - 4] sample */ + c0 = *(py--); + + /* Read x[6] sample */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[3] * y[srcBLen - 4] */ + acc0 += x3 * c0; + /* acc1 += x[4] * y[srcBLen - 4] */ + acc1 += x0 * c0; + /* acc2 += x[5] * y[srcBLen - 4] */ + acc2 += x1 * c0; + /* acc3 += x[6] * y[srcBLen - 4] */ + acc3 += x2 * c0; + + + } while(--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Read y[srcBLen - 5] sample */ + c0 = *(py--); + + /* Read x[7] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 += x0 * c0; + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 += x1 * c0; + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 += x2 * c0; + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 += x3 * c0; + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc0; + *pOut++ = acc1; + *pOut++ = acc2; + *pOut++ = acc3; + + /* Increment the pointer pIn1 index, count by 1 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = (uint32_t) blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += *px++ * *py--; + sum += *px++ * *py--; + sum += *px++ * *py--; + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + while(blockSize3 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + sum += *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum += *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + sum += *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum += *px++ * *py--; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#else + + /* Run the below code for Cortex-M0 */ + + float32_t *pIn1 = pSrcA; /* inputA pointer */ + float32_t *pIn2 = pSrcB; /* inputB pointer */ + float32_t sum; /* Accumulator */ + uint32_t i, j; /* loop counters */ + arm_status status; /* status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* Loop to calculate convolution for output length number of values */ + for (i = firstIndex; i <= (firstIndex + numPoints - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0.0f; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0u; j <= i; j++) + { + /* Check the array limitations for inputs */ + if((((i - j) < srcBLen) && (j < srcALen))) + { + /* z[i] += x[i-j] * y[j] */ + sum += pIn1[j] * pIn2[i - j]; + } + } + /* Store the output in the destination buffer */ + pDst[i] = sum; + } + /* set status as ARM_SUCCESS as there are no argument errors */ + status = ARM_MATH_SUCCESS; + } + return (status); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of PartialConv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,768 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_partial_fast_opt_q15.c +* +* Description: Fast Q15 Partial convolution. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup PartialConv + * @{ + */ + +/** + * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] *pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + * + * See arm_conv_partial_q15() for a slower implementation of this function which uses a 64-bit accumulator to avoid wrap around distortion. + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, scratch1 and scratch2 buffers should be aligned by 32-bit + * + */ + +#ifndef UNALIGNED_SUPPORT_DISABLE + +arm_status arm_conv_partial_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2) +{ + + q15_t *pOut = pDst; /* output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ + q31_t acc0, acc1, acc2, acc3; /* Accumulator */ + q31_t x1, x2, x3; /* Temporary variables to hold state and coefficient values */ + q31_t y1, y2; /* State variables */ + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, k, blkCnt; /* loop counter */ + arm_status status; + + uint32_t tapCnt; /* loop count */ + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2 + srcBLen - 1; + + /* points to smaller length sequence */ + px = pIn2; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + + /* Copy smaller length input sequence in reverse order into second scratch buffer */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Assuming scratch1 buffer is aligned by 32-bit */ + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1u); + + /* Copy bigger length sequence(srcALen) samples in scratch1 buffer */ + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr1, srcALen); + + /* Update pointers */ + pScr1 += srcALen; + + /* Fill (srcBLen - 1u) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update pointer */ + pScr1 += (srcBLen - 1u); + + /* Initialization of pIn2 pointer */ + pIn2 = py; + + pScratch1 += firstIndex; + + pOut = pDst + firstIndex; + + /* First part of the processing with loop unrolling process 4 data points at a time. + ** a second loop below process for the remaining 1 to 3 samples. */ + + /* Actual convolution process starts here */ + blkCnt = (numPoints) >> 2; + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* Read next two samples from scratch1 buffer */ + x2 = *__SIMD32(pScr1)++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pIn2); + y2 = _SIMD32_OFFSET(pIn2 + 2u); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = _SIMD32_OFFSET(pScr1); + + /* multiply and accumlate */ + acc0 = __SMLAD(x2, y2, acc0); + + acc2 = __SMLAD(x1, y2, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + acc1 = __SMLADX(x3, y2, acc1); + + x2 = _SIMD32_OFFSET(pScr1 + 2u); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y2, acc3); + + /* update scratch pointers */ + pIn2 += 4u; + pScr1 += 4u; + + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4u; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + + /* Store the results in the accumulators in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16); + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16); + +#else + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16); + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 4u; + + } + + + blkCnt = numPoints & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + + /* Read next two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* Read two samples from smaller buffer */ + y1 = *__SIMD32(pIn2)++; + + acc0 = __SMLAD(x1, y1, acc0); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + ** Then store the output in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 1u; + + } + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + /* Return to application */ + return (status); +} + +#else + +arm_status arm_conv_partial_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2) +{ + + q15_t *pOut = pDst; /* output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ + q31_t acc0, acc1, acc2, acc3; /* Accumulator */ + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, k, blkCnt; /* loop counter */ + arm_status status; /* Status variable */ + uint32_t tapCnt; /* loop count */ + q15_t x10, x11, x20, x21; /* Temporary variables to hold srcA buffer */ + q15_t y10, y11; /* Temporary variables to hold srcB buffer */ + + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2 + srcBLen - 1; + + /* points to smaller length sequence */ + px = pIn2; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1u); + + /* Copy bigger length sequence(srcALen) samples in scratch1 buffer */ + + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcALen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcALen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = *pIn1++; + + /* Decrement the loop counter */ + k--; + } + + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = (srcBLen - 1u) >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = (srcBLen - 1u) % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + + + /* Initialization of pIn2 pointer */ + pIn2 = py; + + pScratch1 += firstIndex; + + pOut = pDst + firstIndex; + + /* Actual convolution process starts here */ + blkCnt = (numPoints) >> 2; + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x10 = *pScr1++; + x11 = *pScr1++; + + /* Read next two samples from scratch1 buffer */ + x20 = *pScr1++; + x21 = *pScr1++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + + /* Read two samples from smaller buffer */ + y10 = *pIn2; + y11 = *(pIn2 + 1u); + + /* multiply and accumlate */ + acc0 += (q31_t) x10 *y10; + acc0 += (q31_t) x11 *y11; + acc2 += (q31_t) x20 *y10; + acc2 += (q31_t) x21 *y11; + + /* multiply and accumlate */ + acc1 += (q31_t) x11 *y10; + acc1 += (q31_t) x20 *y11; + + /* Read next two samples from scratch1 buffer */ + x10 = *pScr1; + x11 = *(pScr1 + 1u); + + /* multiply and accumlate */ + acc3 += (q31_t) x21 *y10; + acc3 += (q31_t) x10 *y11; + + /* Read next two samples from scratch2 buffer */ + y10 = *(pIn2 + 2u); + y11 = *(pIn2 + 3u); + + /* multiply and accumlate */ + acc0 += (q31_t) x20 *y10; + acc0 += (q31_t) x21 *y11; + acc2 += (q31_t) x10 *y10; + acc2 += (q31_t) x11 *y11; + acc1 += (q31_t) x21 *y10; + acc1 += (q31_t) x10 *y11; + + /* Read next two samples from scratch1 buffer */ + x20 = *(pScr1 + 2); + x21 = *(pScr1 + 3); + + /* multiply and accumlate */ + acc3 += (q31_t) x11 *y10; + acc3 += (q31_t) x20 *y11; + + /* update scratch pointers */ + pIn2 += 4u; + pScr1 += 4u; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4u; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + + /* Store the results in the accumulators in the destination buffer. */ + *pOut++ = __SSAT((acc0 >> 15), 16); + *pOut++ = __SSAT((acc1 >> 15), 16); + *pOut++ = __SSAT((acc2 >> 15), 16); + *pOut++ = __SSAT((acc3 >> 15), 16); + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 4u; + + } + + + blkCnt = numPoints & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + + /* Read next two samples from scratch1 buffer */ + x10 = *pScr1++; + x11 = *pScr1++; + + /* Read two samples from smaller buffer */ + y10 = *pIn2++; + y11 = *pIn2++; + + /* multiply and accumlate */ + acc0 += (q31_t) x10 *y10; + acc0 += (q31_t) x11 *y11; + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 1u; + + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + + } + + /* Return to application */ + return (status); +} + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + +/** + * @} end of PartialConv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1492 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_partial_fast_q15.c +* +* Description: Fast Q15 Partial convolution. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup PartialConv + * @{ + */ + +/** + * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + * + * See arm_conv_partial_q15() for a slower implementation of this function which uses a 64-bit accumulator to avoid wrap around distortion. + */ + + +arm_status arm_conv_partial_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ +#ifndef UNALIGNED_SUPPORT_DISABLE + + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *pOut = pDst; /* output pointer */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; + uint32_t j, k, count, check, blkCnt; + int32_t blockSize1, blockSize2, blockSize3; /* loop counters */ + arm_status status; /* status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >=srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = (((int32_t) srcBLen - 1) - (int32_t) firstIndex); + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1u)) ? blockSize1 : + (int32_t) numPoints) : 0; + blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) + + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1u + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations less than 4 */ + /* Second part of this stage computes the MAC operations greater than or equal to 4 */ + + /* The first part of the stage starts here */ + while((count < 4u) && (blockSize1 > 0)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over number of MAC operations between + * inputA samples and inputB samples */ + k = count; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* The second part of the stage starts here */ + /* The internal loop, over count, is unrolled by 4 */ + /* To, read the last two inputB samples using SIMD: + * y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */ + py = py - 1; + + while(blockSize1 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* x[0], x[1] are multiplied with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLADX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLADX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1u; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2 - 1u; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + px = pIn1 + firstIndex - srcBLen + 1; + } + else + { + px = pIn1; + } + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0u; + + + /* -------------------- + * Stage2 process + * -------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = ((uint32_t) blockSize2 >> 2u); + + while(blkCnt > 0u) + { + py = py - 1u; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + + /* read x[0], x[1] samples */ + x0 = *__SIMD32(px); + /* read x[1], x[2] samples */ + x1 = _SIMD32_OFFSET(px+1); + px+= 2u; + + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the last two inputB samples using SIMD: + * y[srcBLen - 1] and y[srcBLen - 2] */ + c0 = *__SIMD32(py)--; + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLADX(x0, c0, acc0); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLADX(x1, c0, acc1); + + /* Read x[2], x[3] */ + x2 = *__SIMD32(px); + + /* Read x[3], x[4] */ + x3 = _SIMD32_OFFSET(px+1); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLADX(x2, c0, acc2); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLADX(x3, c0, acc3); + + /* Read y[srcBLen - 3] and y[srcBLen - 4] */ + c0 = *__SIMD32(py)--; + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLADX(x2, c0, acc0); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLADX(x3, c0, acc1); + + /* Read x[4], x[5] */ + x0 = _SIMD32_OFFSET(px+2); + + /* Read x[5], x[6] */ + x1 = _SIMD32_OFFSET(px+3); + px += 4u; + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLADX(x0, c0, acc2); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLADX(x1, c0, acc3); + + } while(--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + if(k == 1u) + { + /* Read y[srcBLen - 5] */ + c0 = *(py+1); +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; + +#else + + c0 = c0 & 0x0000FFFF; + +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + x3 = *__SIMD32(px); + px++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLADX(x1, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + if(k == 2u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = _SIMD32_OFFSET(py); + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px+1); + px += 2u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + } + + if(k == 3u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = _SIMD32_OFFSET(py); + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px+1); + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + + c0 = *(py-1); +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; +#else + + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + x3 = _SIMD32_OFFSET(px+2); + px += 3u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x1, c0, acc0); + acc1 = __SMLAD(x2, c0, acc1); + acc2 = __SMLADX(x2, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + /* Store the results in the accumulators in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = __PKHBT(acc0 >> 15, acc1 >> 15, 16); + *__SIMD32(pOut)++ = __PKHBT(acc2 >> 15, acc3 >> 15, 16); + +#else + + *__SIMD32(pOut)++ = __PKHBT(acc1 >> 15, acc0 >> 15, 16); + *__SIMD32(pOut)++ = __PKHBT(acc3 >> 15, acc2 >> 15, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = (uint32_t) blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + pIn2 = pSrc2 - 1u; + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations greater than 4 */ + /* Second part of this stage computes the MAC operations less than or equal to 4 */ + + /* The first part of the stage starts here */ + j = count >> 2u; + + while((j > 0u) && (blockSize3 > 0)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[srcALen - srcBLen + 1], x[srcALen - srcBLen + 2] are multiplied + * with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLADX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied + * with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLADX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1u; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* sum += x[srcALen - srcBLen + 5] * y[srcBLen - 5] */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + + j--; + } + + /* The second part of the stage starts here */ + /* SIMD is not used for the next MAC operations, + * so pointer py is updated to read only one sample at a time */ + py = py + 1u; + + while(blockSize3 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#else + + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *pOut = pDst; /* output pointer */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; + uint32_t j, k, count, check, blkCnt; + int32_t blockSize1, blockSize2, blockSize3; /* loop counters */ + arm_status status; /* status of Partial convolution */ + q15_t a, b; + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >=srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = ((int32_t) srcBLen - 1) - (int32_t) firstIndex; + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1u)) ? blockSize1 : + (int32_t) numPoints) : 0; + blockSize2 = ((int32_t) check - blockSize3) - + (blockSize1 + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1u + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations less than 4 */ + /* Second part of this stage computes the MAC operations greater than or equal to 4 */ + + /* The first part of the stage starts here */ + while((count < 4u) && (blockSize1 > 0)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over number of MAC operations between + * inputA samples and inputB samples */ + k = count; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* The second part of the stage starts here */ + /* The internal loop, over count, is unrolled by 4 */ + /* To, read the last two inputB samples using SIMD: + * y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */ + py = py - 1; + + while(blockSize1 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + py++; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2 - 1u; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + px = pIn1 + firstIndex - srcBLen + 1; + } + else + { + px = pIn1; + } + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0u; + + + /* -------------------- + * Stage2 process + * -------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = ((uint32_t) blockSize2 >> 2u); + + while(blkCnt > 0u) + { + py = py - 1u; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1] samples */ + a = *px++; + b = *px++; + +#ifndef ARM_MATH_BIG_ENDIAN + + x0 = __PKHBT(a, b, 16); + a = *px; + x1 = __PKHBT(b, a, 16); + +#else + + x0 = __PKHBT(b, a, 16); + a = *px; + x1 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the last two inputB samples using SIMD: + * y[srcBLen - 1] and y[srcBLen - 2] */ + a = *py; + b = *(py+1); + py -= 2; + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLADX(x0, c0, acc0); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLADX(x1, c0, acc1); + + a = *px; + b = *(px + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + x2 = __PKHBT(a, b, 16); + a = *(px + 2); + x3 = __PKHBT(b, a, 16); + +#else + + x2 = __PKHBT(b, a, 16); + a = *(px + 2); + x3 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLADX(x2, c0, acc2); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLADX(x3, c0, acc3); + + /* Read y[srcBLen - 3] and y[srcBLen - 4] */ + a = *py; + b = *(py+1); + py -= 2; + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLADX(x2, c0, acc0); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLADX(x3, c0, acc1); + + /* Read x[4], x[5], x[6] */ + a = *(px + 2); + b = *(px + 3); + +#ifndef ARM_MATH_BIG_ENDIAN + + x0 = __PKHBT(a, b, 16); + a = *(px + 4); + x1 = __PKHBT(b, a, 16); + +#else + + x0 = __PKHBT(b, a, 16); + a = *(px + 4); + x1 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + px += 4u; + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLADX(x0, c0, acc2); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLADX(x1, c0, acc3); + + } while(--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + if(k == 1u) + { + /* Read y[srcBLen - 5] */ + c0 = *(py+1); + +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; + +#else + + c0 = c0 & 0x0000FFFF; + +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + a = *px; + b = *(px+1); + px++; + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + +#else + + x3 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLADX(x1, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + if(k == 2u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + a = *py; + b = *(py+1); + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7], x[8], x[9] */ + a = *px; + b = *(px + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + a = *(px + 2); + x2 = __PKHBT(b, a, 16); + +#else + + x3 = __PKHBT(b, a, 16); + a = *(px + 2); + x2 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + px += 2u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + } + + if(k == 3u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + a = *py; + b = *(py+1); + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7], x[8], x[9] */ + a = *px; + b = *(px + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + a = *(px + 2); + x2 = __PKHBT(b, a, 16); + +#else + + x3 = __PKHBT(b, a, 16); + a = *(px + 2); + x2 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + + /* Read y[srcBLen - 7] */ + c0 = *(py-1); +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; +#else + + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + a = *(px+2); + b = *(px+3); + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + +#else + + x3 = __PKHBT(b, a, 16);; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + px += 3u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x1, c0, acc0); + acc1 = __SMLAD(x2, c0, acc1); + acc2 = __SMLADX(x2, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + /* Store the results in the accumulators in the destination buffer. */ + *pOut++ = (q15_t)(acc0 >> 15); + *pOut++ = (q15_t)(acc1 >> 15); + *pOut++ = (q15_t)(acc2 >> 15); + *pOut++ = (q15_t)(acc3 >> 15); + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = (uint32_t) blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + pIn2 = pSrc2 - 1u; + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations greater than 4 */ + /* Second part of this stage computes the MAC operations less than or equal to 4 */ + + /* The first part of the stage starts here */ + j = count >> 2u; + + while((j > 0u) && (blockSize3 > 0)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + py++; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + sum += ((q31_t) * px++ * *py--); + /* Decrement the loop counter */ + k--; + } + + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + + j--; + } + + /* The second part of the stage starts here */ + /* SIMD is not used for the next MAC operations, + * so pointer py is updated to read only one sample at a time */ + py = py + 1u; + + while(blockSize3 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ +} + +/** + * @} end of PartialConv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,611 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_partial_fast_q31.c +* +* Description: Fast Q31 Partial convolution. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup PartialConv + * @{ + */ + +/** + * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + * + * \par + * See arm_conv_partial_q31() for a slower implementation of this function which uses a 64-bit accumulator to provide higher precision. + */ + +arm_status arm_conv_partial_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + q31_t *pIn1; /* inputA pointer */ + q31_t *pIn2; /* inputB pointer */ + q31_t *pOut = pDst; /* output pointer */ + q31_t *px; /* Intermediate inputA pointer */ + q31_t *py; /* Intermediate inputB pointer */ + q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + q31_t x0, x1, x2, x3, c0; + uint32_t j, k, count, check, blkCnt; + int32_t blockSize1, blockSize2, blockSize3; /* loop counters */ + arm_status status; /* status of Partial convolution */ + + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = (((int32_t) srcBLen - 1) - (int32_t) firstIndex); + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1u)) ? blockSize1 : + (int32_t) numPoints) : 0; + blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) + + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1u + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first loop starts here */ + while(blockSize1 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* x[1] * y[srcBLen - 2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* x[2] * y[srcBLen - 3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* x[3] * y[srcBLen - 4] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + px = pIn1 + firstIndex - srcBLen + 1; + } + else + { + px = pIn1; + } + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2 */ + blkCnt = ((uint32_t) blockSize2 >> 2u); + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *(px++); + x1 = *(px++); + x2 = *(px++); + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *(py--); + + /* Read x[3] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[srcBLen - 1] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* acc1 += x[1] * y[srcBLen - 1] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* acc2 += x[2] * y[srcBLen - 1] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + + /* acc3 += x[3] * y[srcBLen - 1] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Read y[srcBLen - 2] sample */ + c0 = *(py--); + + /* Read x[4] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[srcBLen - 2] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc1 += x[2] * y[srcBLen - 2] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc2 += x[3] * y[srcBLen - 2] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc3 += x[4] * y[srcBLen - 2] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Read y[srcBLen - 3] sample */ + c0 = *(py--); + + /* Read x[5] sample */ + x1 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[srcBLen - 3] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc1 += x[3] * y[srcBLen - 2] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc2 += x[4] * y[srcBLen - 2] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc3 += x[5] * y[srcBLen - 2] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* Read y[srcBLen - 4] sample */ + c0 = *(py--); + + /* Read x[6] sample */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[3] * y[srcBLen - 4] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc1 += x[4] * y[srcBLen - 4] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc2 += x[5] * y[srcBLen - 4] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc3 += x[6] * y[srcBLen - 4] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x2 * c0)) >> 32); + + + } while(--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Read y[srcBLen - 5] sample */ + c0 = *(py--); + + /* Read x[7] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (acc0 << 1); + *pOut++ = (q31_t) (acc1 << 1); + *pOut++ = (q31_t) (acc2 << 1); + *pOut++ = (q31_t) (acc3 << 1); + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = (uint32_t) blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +} + +/** + * @} end of PartialConv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_opt_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_opt_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,765 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_partial_opt_q15.c +* +* Description: Partial convolution of Q15 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup PartialConv + * @{ + */ + +/** + * @brief Partial convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] *pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, state buffers should be aligned by 32-bit + * + * Refer to arm_conv_partial_fast_q15() for a faster but less precise version of this function for Cortex-M3 and Cortex-M4. + * + * + */ + +#ifndef UNALIGNED_SUPPORT_DISABLE + +arm_status arm_conv_partial_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2) +{ + + q15_t *pOut = pDst; /* output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ + q63_t acc0, acc1, acc2, acc3; /* Accumulator */ + q31_t x1, x2, x3; /* Temporary variables to hold state and coefficient values */ + q31_t y1, y2; /* State variables */ + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, k, blkCnt; /* loop counter */ + arm_status status; /* Status variable */ + uint32_t tapCnt; /* loop count */ + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2 + srcBLen - 1; + + /* points to smaller length sequence */ + px = pIn2; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1u); + + /* Copy bigger length sequence(srcALen) samples in scratch1 buffer */ + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr1, srcALen); + + /* Update pointers */ + pScr1 += srcALen; + + /* Fill (srcBLen - 1u) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update pointer */ + pScr1 += (srcBLen - 1u); + + /* Initialization of pIn2 pointer */ + pIn2 = py; + + pScratch1 += firstIndex; + + pOut = pDst + firstIndex; + + /* Actual convolution process starts here */ + blkCnt = (numPoints) >> 2; + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* Read next two samples from scratch1 buffer */ + x2 = *__SIMD32(pScr1)++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pIn2); + y2 = _SIMD32_OFFSET(pIn2 + 2u); + + /* multiply and accumlate */ + acc0 = __SMLALD(x1, y1, acc0); + acc2 = __SMLALD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLALDX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = _SIMD32_OFFSET(pScr1); + + /* multiply and accumlate */ + acc0 = __SMLALD(x2, y2, acc0); + acc2 = __SMLALD(x1, y2, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLALDX(x3, y1, acc3); + acc1 = __SMLALDX(x3, y2, acc1); + + x2 = _SIMD32_OFFSET(pScr1 + 2u); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLALDX(x3, y2, acc3); + + /* update scratch pointers */ + pIn2 += 4u; + pScr1 += 4u; + + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4u; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + + /* Store the results in the accumulators in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16); + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16); + +#else + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16); + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 4u; + + } + + + blkCnt = numPoints & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + + /* Read next two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* Read two samples from smaller buffer */ + y1 = *__SIMD32(pIn2)++; + + acc0 = __SMLALD(x1, y1, acc0); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 1u; + + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + + } + + /* Return to application */ + return (status); +} + +#else + +arm_status arm_conv_partial_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2) +{ + + q15_t *pOut = pDst; /* output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ + q63_t acc0, acc1, acc2, acc3; /* Accumulator */ + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, k, blkCnt; /* loop counter */ + arm_status status; /* Status variable */ + uint32_t tapCnt; /* loop count */ + q15_t x10, x11, x20, x21; /* Temporary variables to hold srcA buffer */ + q15_t y10, y11; /* Temporary variables to hold srcB buffer */ + + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2 + srcBLen - 1; + + /* points to smaller length sequence */ + px = pIn2; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr2-- = *px++; + + /* Decrement the loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1u); + + /* Copy bigger length sequence(srcALen) samples in scratch1 buffer */ + + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcALen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + *pScr1++ = *pIn1++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcALen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = *pIn1++; + + /* Decrement the loop counter */ + k--; + } + + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = (srcBLen - 1u) >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = (srcBLen - 1u) % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + + + /* Initialization of pIn2 pointer */ + pIn2 = py; + + pScratch1 += firstIndex; + + pOut = pDst + firstIndex; + + /* Actual convolution process starts here */ + blkCnt = (numPoints) >> 2; + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x10 = *pScr1++; + x11 = *pScr1++; + + /* Read next two samples from scratch1 buffer */ + x20 = *pScr1++; + x21 = *pScr1++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + + /* Read two samples from smaller buffer */ + y10 = *pIn2; + y11 = *(pIn2 + 1u); + + /* multiply and accumlate */ + acc0 += (q63_t) x10 *y10; + acc0 += (q63_t) x11 *y11; + acc2 += (q63_t) x20 *y10; + acc2 += (q63_t) x21 *y11; + + /* multiply and accumlate */ + acc1 += (q63_t) x11 *y10; + acc1 += (q63_t) x20 *y11; + + /* Read next two samples from scratch1 buffer */ + x10 = *pScr1; + x11 = *(pScr1 + 1u); + + /* multiply and accumlate */ + acc3 += (q63_t) x21 *y10; + acc3 += (q63_t) x10 *y11; + + /* Read next two samples from scratch2 buffer */ + y10 = *(pIn2 + 2u); + y11 = *(pIn2 + 3u); + + /* multiply and accumlate */ + acc0 += (q63_t) x20 *y10; + acc0 += (q63_t) x21 *y11; + acc2 += (q63_t) x10 *y10; + acc2 += (q63_t) x11 *y11; + acc1 += (q63_t) x21 *y10; + acc1 += (q63_t) x10 *y11; + + /* Read next two samples from scratch1 buffer */ + x20 = *(pScr1 + 2); + x21 = *(pScr1 + 3); + + /* multiply and accumlate */ + acc3 += (q63_t) x11 *y10; + acc3 += (q63_t) x20 *y11; + + /* update scratch pointers */ + pIn2 += 4u; + pScr1 += 4u; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4u; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + + /* Store the results in the accumulators in the destination buffer. */ + *pOut++ = __SSAT((acc0 >> 15), 16); + *pOut++ = __SSAT((acc1 >> 15), 16); + *pOut++ = __SSAT((acc2 >> 15), 16); + *pOut++ = __SSAT((acc3 >> 15), 16); + + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 4u; + + } + + + blkCnt = numPoints & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + + /* Read next two samples from scratch1 buffer */ + x10 = *pScr1++; + x11 = *pScr1++; + + /* Read two samples from smaller buffer */ + y10 = *pIn2++; + y11 = *pIn2++; + + /* multiply and accumlate */ + acc0 += (q63_t) x10 *y10; + acc0 += (q63_t) x11 *y11; + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 1u; + + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + + } + + /* Return to application */ + return (status); +} + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + +/** + * @} end of PartialConv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_opt_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_opt_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,803 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_partial_opt_q7.c +* +* Description: Partial convolution of Q7 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup PartialConv + * @{ + */ + +/** + * @brief Partial convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] *pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, scratch1 and scratch2 buffers should be aligned by 32-bit + * + * + * + */ + + +#ifndef UNALIGNED_SUPPORT_DISABLE + +arm_status arm_conv_partial_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2) +{ + + q15_t *pScr2, *pScr1; /* Intermediate pointers for scratch pointers */ + q15_t x4; /* Temporary input variable */ + q7_t *pIn1, *pIn2; /* inputA and inputB pointer */ + uint32_t j, k, blkCnt, tapCnt; /* loop counter */ + q7_t *px; /* Temporary input1 pointer */ + q15_t *py; /* Temporary input2 pointer */ + q31_t acc0, acc1, acc2, acc3; /* Accumulator */ + q31_t x1, x2, x3, y1; /* Temporary input variables */ + arm_status status; + q7_t *pOut = pDst; /* output pointer */ + q7_t out0, out1, out2, out3; /* temporary variables */ + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2; + + /* points to smaller length sequence */ + px = pIn2 + srcBLen - 1; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) * px--; + *pScr2++ = x4; + x4 = (q15_t) * px--; + *pScr2++ = x4; + x4 = (q15_t) * px--; + *pScr2++ = x4; + x4 = (q15_t) * px--; + *pScr2++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) * px--; + *pScr2++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1u); + + /* Copy (srcALen) samples in scratch buffer */ + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcALen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcALen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* Fill (srcBLen - 1u) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update pointer */ + pScr1 += (srcBLen - 1u); + + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* Initialization of pIn2 pointer */ + pIn2 = (q7_t *) py; + + pScr2 = py; + + pOut = pDst + firstIndex; + + pScratch1 += firstIndex; + + /* Actual convolution process starts here */ + blkCnt = (numPoints) >> 2; + + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* Read next two samples from scratch1 buffer */ + x2 = *__SIMD32(pScr1)++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pScr2); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pScr2 + 2u); + + acc0 = __SMLAD(x2, y1, acc0); + + acc2 = __SMLAD(x1, y1, acc2); + + acc1 = __SMLADX(x3, y1, acc1); + + x2 = *__SIMD32(pScr1)++; + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + pScr2 += 4u; + + + /* Decrement the loop counter */ + tapCnt--; + } + + + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4u; + + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2); + acc1 += (*pScr1++ * *pScr2); + acc2 += (*pScr1++ * *pScr2); + acc3 += (*pScr1++ * *pScr2++); + + pScr1 -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + out0 = (q7_t) (__SSAT(acc0 >> 7u, 8)); + out1 = (q7_t) (__SSAT(acc1 >> 7u, 8)); + out2 = (q7_t) (__SSAT(acc2 >> 7u, 8)); + out3 = (q7_t) (__SSAT(acc3 >> 7u, 8)); + + *__SIMD32(pOut)++ = __PACKq7(out0, out1, out2, out3); + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 4u; + + } + + blkCnt = (numPoints) & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + + /* Read next two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* Read two samples from smaller buffer */ + y1 = *__SIMD32(pScr2)++; + + acc0 = __SMLAD(x1, y1, acc0); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(acc0 >> 7u, 8)); + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 1u; + + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + + + } + + return (status); + +} + +#else + +arm_status arm_conv_partial_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2) +{ + + q15_t *pScr2, *pScr1; /* Intermediate pointers for scratch pointers */ + q15_t x4; /* Temporary input variable */ + q7_t *pIn1, *pIn2; /* inputA and inputB pointer */ + uint32_t j, k, blkCnt, tapCnt; /* loop counter */ + q7_t *px; /* Temporary input1 pointer */ + q15_t *py; /* Temporary input2 pointer */ + q31_t acc0, acc1, acc2, acc3; /* Accumulator */ + arm_status status; + q7_t *pOut = pDst; /* output pointer */ + q15_t x10, x11, x20, x21; /* Temporary input variables */ + q15_t y10, y11; /* Temporary input variables */ + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2; + + /* points to smaller length sequence */ + px = pIn2 + srcBLen - 1; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) * px--; + *pScr2++ = x4; + x4 = (q15_t) * px--; + *pScr2++ = x4; + x4 = (q15_t) * px--; + *pScr2++ = x4; + x4 = (q15_t) * px--; + *pScr2++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) * px--; + *pScr2++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1u); + + /* Copy (srcALen) samples in scratch buffer */ + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcALen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcALen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = (srcBLen - 1u) >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = (srcBLen - 1u) % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* Initialization of pIn2 pointer */ + pIn2 = (q7_t *) py; + + pScr2 = py; + + pOut = pDst + firstIndex; + + pScratch1 += firstIndex; + + /* Actual convolution process starts here */ + blkCnt = (numPoints) >> 2; + + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x10 = *pScr1++; + x11 = *pScr1++; + + /* Read next two samples from scratch1 buffer */ + x20 = *pScr1++; + x21 = *pScr1++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + + /* Read four samples from smaller buffer */ + y10 = *pScr2; + y11 = *(pScr2 + 1u); + + /* multiply and accumlate */ + acc0 += (q31_t) x10 *y10; + acc0 += (q31_t) x11 *y11; + acc2 += (q31_t) x20 *y10; + acc2 += (q31_t) x21 *y11; + + + acc1 += (q31_t) x11 *y10; + acc1 += (q31_t) x20 *y11; + + /* Read next two samples from scratch1 buffer */ + x10 = *pScr1; + x11 = *(pScr1 + 1u); + + /* multiply and accumlate */ + acc3 += (q31_t) x21 *y10; + acc3 += (q31_t) x10 *y11; + + /* Read next two samples from scratch2 buffer */ + y10 = *(pScr2 + 2u); + y11 = *(pScr2 + 3u); + + /* multiply and accumlate */ + acc0 += (q31_t) x20 *y10; + acc0 += (q31_t) x21 *y11; + acc2 += (q31_t) x10 *y10; + acc2 += (q31_t) x11 *y11; + acc1 += (q31_t) x21 *y10; + acc1 += (q31_t) x10 *y11; + + /* Read next two samples from scratch1 buffer */ + x20 = *(pScr1 + 2); + x21 = *(pScr1 + 3); + + /* multiply and accumlate */ + acc3 += (q31_t) x11 *y10; + acc3 += (q31_t) x20 *y11; + + /* update scratch pointers */ + + pScr1 += 4u; + pScr2 += 4u; + + /* Decrement the loop counter */ + tapCnt--; + } + + + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4u; + + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2); + acc1 += (*pScr1++ * *pScr2); + acc2 += (*pScr1++ * *pScr2); + acc3 += (*pScr1++ * *pScr2++); + + pScr1 -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(acc0 >> 7u, 8)); + *pOut++ = (q7_t) (__SSAT(acc1 >> 7u, 8)); + *pOut++ = (q7_t) (__SSAT(acc2 >> 7u, 8)); + *pOut++ = (q7_t) (__SSAT(acc3 >> 7u, 8)); + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 4u; + + } + + blkCnt = (numPoints) & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + + /* Read next two samples from scratch1 buffer */ + x10 = *pScr1++; + x11 = *pScr1++; + + /* Read two samples from smaller buffer */ + y10 = *pScr2++; + y11 = *pScr2++; + + /* multiply and accumlate */ + acc0 += (q31_t) x10 *y10; + acc0 += (q31_t) x11 *y11; + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(acc0 >> 7u, 8)); + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 1u; + + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + + } + + return (status); + +} + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + + +/** + * @} end of PartialConv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,786 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_partial_q15.c +* +* Description: Partial convolution of Q15 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup PartialConv + * @{ + */ + +/** + * @brief Partial convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + * + * Refer to arm_conv_partial_fast_q15() for a faster but less precise version of this function for Cortex-M3 and Cortex-M4. + * + * \par + * Refer the function arm_conv_partial_opt_q15() for a faster implementation of this function using scratch buffers. + * + */ + + +arm_status arm_conv_partial_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + +#if (defined(ARM_MATH_CM4) || defined(ARM_MATH_CM3)) && !defined(UNALIGNED_SUPPORT_DISABLE) + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *pOut = pDst; /* output pointer */ + q63_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* Temporary input variables */ + uint32_t j, k, count, check, blkCnt; + int32_t blockSize1, blockSize2, blockSize3; /* loop counter */ + arm_status status; /* status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = (((int32_t) srcBLen - 1) - (int32_t) firstIndex); + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1u)) ? blockSize1 : + (int32_t) numPoints) : 0; + blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) + + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1u + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations less than 4 */ + /* Second part of this stage computes the MAC operations greater than or equal to 4 */ + + /* The first part of the stage starts here */ + while((count < 4u) && (blockSize1 > 0)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over number of MAC operations between + * inputA samples and inputB samples */ + k = count; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* The second part of the stage starts here */ + /* The internal loop, over count, is unrolled by 4 */ + /* To, read the last two inputB samples using SIMD: + * y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */ + py = py - 1; + + while(blockSize1 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* x[0], x[1] are multiplied with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLALDX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLALDX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1u; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2 - 1u; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + px = pIn1 + firstIndex - srcBLen + 1; + } + else + { + px = pIn1; + } + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0u; + + + /* -------------------- + * Stage2 process + * -------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + py = py - 1u; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + + /* read x[0], x[1] samples */ + x0 = *__SIMD32(px); + /* read x[1], x[2] samples */ + x1 = _SIMD32_OFFSET(px+1); + px+= 2u; + + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the last two inputB samples using SIMD: + * y[srcBLen - 1] and y[srcBLen - 2] */ + c0 = *__SIMD32(py)--; + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLALDX(x0, c0, acc0); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLALDX(x1, c0, acc1); + + /* Read x[2], x[3] */ + x2 = *__SIMD32(px); + + /* Read x[3], x[4] */ + x3 = _SIMD32_OFFSET(px+1); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLALDX(x2, c0, acc2); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLALDX(x3, c0, acc3); + + /* Read y[srcBLen - 3] and y[srcBLen - 4] */ + c0 = *__SIMD32(py)--; + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLALDX(x2, c0, acc0); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLALDX(x3, c0, acc1); + + /* Read x[4], x[5] */ + x0 = _SIMD32_OFFSET(px+2); + + /* Read x[5], x[6] */ + x1 = _SIMD32_OFFSET(px+3); + px += 4u; + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLALDX(x0, c0, acc2); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLALDX(x1, c0, acc3); + + } while(--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + if(k == 1u) + { + /* Read y[srcBLen - 5] */ + c0 = *(py+1); + +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; + +#else + + c0 = c0 & 0x0000FFFF; + +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + x3 = *__SIMD32(px); + px++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALD(x0, c0, acc0); + acc1 = __SMLALD(x1, c0, acc1); + acc2 = __SMLALDX(x1, c0, acc2); + acc3 = __SMLALDX(x3, c0, acc3); + } + + if(k == 2u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = _SIMD32_OFFSET(py); + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px+1); + px += 2u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALDX(x0, c0, acc0); + acc1 = __SMLALDX(x1, c0, acc1); + acc2 = __SMLALDX(x3, c0, acc2); + acc3 = __SMLALDX(x2, c0, acc3); + } + + if(k == 3u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = _SIMD32_OFFSET(py); + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px+1); + + /* Perform the multiply-accumulates */ + acc0 = __SMLALDX(x0, c0, acc0); + acc1 = __SMLALDX(x1, c0, acc1); + acc2 = __SMLALDX(x3, c0, acc2); + acc3 = __SMLALDX(x2, c0, acc3); + + c0 = *(py-1); + +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; +#else + + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + x3 = _SIMD32_OFFSET(px+2); + px += 3u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALDX(x1, c0, acc0); + acc1 = __SMLALD(x2, c0, acc1); + acc2 = __SMLALDX(x2, c0, acc2); + acc3 = __SMLALDX(x3, c0, acc3); + } + + + /* Store the results in the accumulators in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16); + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16); + +#else + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16); + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = (uint32_t) blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += (q63_t) ((q31_t) * px++ * *py--); + sum += (q63_t) ((q31_t) * px++ * *py--); + sum += (q63_t) ((q31_t) * px++ * *py--); + sum += (q63_t) ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += (q63_t) ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT(sum >> 15, 16)); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT(sum >> 15, 16)); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + pIn2 = pSrc2 - 1u; + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations greater than 4 */ + /* Second part of this stage computes the MAC operations less than or equal to 4 */ + + /* The first part of the stage starts here */ + j = count >> 2u; + + while((j > 0u) && (blockSize3 > 0)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[srcALen - srcBLen + 1], x[srcALen - srcBLen + 2] are multiplied + * with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLALDX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied + * with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLALDX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1u; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* sum += x[srcALen - srcBLen + 5] * y[srcBLen - 5] */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + + j--; + } + + /* The second part of the stage starts here */ + /* SIMD is not used for the next MAC operations, + * so pointer py is updated to read only one sample at a time */ + py = py + 1u; + + while(blockSize3 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#else + + /* Run the below code for Cortex-M0 */ + + q15_t *pIn1 = pSrcA; /* inputA pointer */ + q15_t *pIn2 = pSrcB; /* inputB pointer */ + q63_t sum; /* Accumulator */ + uint32_t i, j; /* loop counters */ + arm_status status; /* status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* Loop to calculate convolution for output length number of values */ + for (i = firstIndex; i <= (firstIndex + numPoints - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0; j <= i; j++) + { + /* Check the array limitations */ + if(((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q31_t) pIn1[j] * (pIn2[i - j])); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = (q15_t) __SSAT((sum >> 15u), 16u); + } + /* set status as ARM_SUCCESS as there are no argument errors */ + status = ARM_MATH_SUCCESS; + } + return (status); + +#endif /* #if (defined(ARM_MATH_CM4) || defined(ARM_MATH_CM3)) && !defined(UNALIGNED_SUPPORT_DISABLE) */ + +} + +/** + * @} end of PartialConv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,607 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_partial_q31.c +* +* Description: Partial convolution of Q31 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup PartialConv + * @{ + */ + +/** + * @brief Partial convolution of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + * + * See arm_conv_partial_fast_q31() for a faster but less precise implementation of this function for Cortex-M3 and Cortex-M4. + */ + +arm_status arm_conv_partial_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t *pIn1; /* inputA pointer */ + q31_t *pIn2; /* inputB pointer */ + q31_t *pOut = pDst; /* output pointer */ + q31_t *px; /* Intermediate inputA pointer */ + q31_t *py; /* Intermediate inputB pointer */ + q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q63_t sum, acc0, acc1, acc2; /* Accumulator */ + q31_t x0, x1, x2, c0; + uint32_t j, k, count, check, blkCnt; + int32_t blockSize1, blockSize2, blockSize3; /* loop counter */ + arm_status status; /* status of Partial convolution */ + + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = (((int32_t) srcBLen - 1) - (int32_t) firstIndex); + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1u)) ? blockSize1 : + (int32_t) numPoints) : 0; + blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) + + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1u + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first loop starts here */ + while(blockSize1 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 1] */ + sum += (q63_t) * px++ * (*py--); + /* x[1] * y[srcBLen - 2] */ + sum += (q63_t) * px++ * (*py--); + /* x[2] * y[srcBLen - 3] */ + sum += (q63_t) * px++ * (*py--); + /* x[3] * y[srcBLen - 4] */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + px = pIn1 + firstIndex - srcBLen + 1; + } + else + { + px = pIn1; + } + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blkCnt */ + + blkCnt = blockSize2 / 3; + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + + /* read x[0], x[1] samples */ + x0 = *(px++); + x1 = *(px++); + + /* Apply loop unrolling and compute 3 MACs simultaneously. */ + k = srcBLen / 3; + + /* First part of the processing with loop unrolling. Compute 3 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 2 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *(py); + + /* Read x[2] sample */ + x2 = *(px); + + /* Perform the multiply-accumulates */ + /* acc0 += x[0] * y[srcBLen - 1] */ + acc0 += (q63_t) x0 *c0; + /* acc1 += x[1] * y[srcBLen - 1] */ + acc1 += (q63_t) x1 *c0; + /* acc2 += x[2] * y[srcBLen - 1] */ + acc2 += (q63_t) x2 *c0; + + /* Read y[srcBLen - 2] sample */ + c0 = *(py - 1u); + + /* Read x[3] sample */ + x0 = *(px + 1u); + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[srcBLen - 2] */ + acc0 += (q63_t) x1 *c0; + /* acc1 += x[2] * y[srcBLen - 2] */ + acc1 += (q63_t) x2 *c0; + /* acc2 += x[3] * y[srcBLen - 2] */ + acc2 += (q63_t) x0 *c0; + + /* Read y[srcBLen - 3] sample */ + c0 = *(py - 2u); + + /* Read x[4] sample */ + x1 = *(px + 2u); + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[srcBLen - 3] */ + acc0 += (q63_t) x2 *c0; + /* acc1 += x[3] * y[srcBLen - 2] */ + acc1 += (q63_t) x0 *c0; + /* acc2 += x[4] * y[srcBLen - 2] */ + acc2 += (q63_t) x1 *c0; + + + px += 3u; + + py -= 3u; + + } while(--k); + + /* If the srcBLen is not a multiple of 3, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen - (3 * (srcBLen / 3)); + + while(k > 0u) + { + /* Read y[srcBLen - 5] sample */ + c0 = *(py--); + + /* Read x[7] sample */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 += (q63_t) x0 *c0; + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 += (q63_t) x1 *c0; + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 += (q63_t) x2 *c0; + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (acc0 >> 31); + *pOut++ = (q31_t) (acc1 >> 31); + *pOut++ = (q31_t) (acc2 >> 31); + + /* Increment the pointer pIn1 index, count by 3 */ + count += 3u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 3, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 - 3 * (blockSize2 / 3); + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += (q63_t) * px++ * (*py--); + sum += (q63_t) * px++ * (*py--); + sum += (q63_t) * px++ * (*py--); + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + sum += (q63_t) * px++ * (*py--); + sum += (q63_t) * px++ * (*py--); + sum += (q63_t) * px++ * (*py--); + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the blockSize3 is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#else + + /* Run the below code for Cortex-M0 */ + + q31_t *pIn1 = pSrcA; /* inputA pointer */ + q31_t *pIn2 = pSrcB; /* inputB pointer */ + q63_t sum; /* Accumulator */ + uint32_t i, j; /* loop counters */ + arm_status status; /* status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* Loop to calculate convolution for output length number of values */ + for (i = firstIndex; i <= (firstIndex + numPoints - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0; j <= i; j++) + { + /* Check the array limitations */ + if(((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q63_t) pIn1[j] * (pIn2[i - j])); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = (q31_t) (sum >> 31u); + } + /* set status as ARM_SUCCESS as there are no argument errors */ + status = ARM_MATH_SUCCESS; + } + return (status); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of PartialConv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,741 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_partial_q7.c +* +* Description: Partial convolution of Q7 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup PartialConv + * @{ + */ + +/** + * @brief Partial convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + * + * \par + * Refer the function arm_conv_partial_opt_q7() for a faster implementation of this function. + * + */ + +arm_status arm_conv_partial_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q7_t *pIn1; /* inputA pointer */ + q7_t *pIn2; /* inputB pointer */ + q7_t *pOut = pDst; /* output pointer */ + q7_t *px; /* Intermediate inputA pointer */ + q7_t *py; /* Intermediate inputB pointer */ + q7_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + q31_t input1, input2; + q15_t in1, in2; + q7_t x0, x1, x2, x3, c0, c1; + uint32_t j, k, count, check, blkCnt; + int32_t blockSize1, blockSize2, blockSize3; /* loop counter */ + arm_status status; + + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = (((int32_t) srcBLen - 1) - (int32_t) firstIndex); + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1u)) ? blockSize1 : + (int32_t) numPoints) : 0; + blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) + + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1u + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while(blockSize1 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] , x[1] */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 1] , y[srcBLen - 2] */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* x[0] * y[srcBLen - 1] */ + /* x[1] * y[srcBLen - 2] */ + sum = __SMLAD(input1, input2, sum); + + /* x[2] , x[3] */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 3] , y[srcBLen - 4] */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* x[2] * y[srcBLen - 3] */ + /* x[3] * y[srcBLen - 4] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7, 8)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + px = pIn1 + firstIndex - srcBLen + 1; + } + else + { + px = pIn1; + } + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = ((uint32_t) blockSize2 >> 2u); + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *(px++); + x1 = *(px++); + x2 = *(px++); + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *(py--); + /* Read y[srcBLen - 2] sample */ + c1 = *(py--); + + /* Read x[3] sample */ + x3 = *(px++); + + /* x[0] and x[1] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 1] and y[srcBLen - 2] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[1] and x[2] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[4] sample */ + x0 = *(px++); + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLAD(input1, input2, acc3); + + /* Read y[srcBLen - 3] sample */ + c0 = *(py--); + /* Read y[srcBLen - 4] sample */ + c1 = *(py--); + + /* Read x[5] sample */ + x1 = *(px++); + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 3] and y[srcBLen - 4] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[4] and x[5] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[6] sample */ + x2 = *(px++); + + /* x[5] and x[6] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLAD(input1, input2, acc3); + + } while(--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Read y[srcBLen - 5] sample */ + c0 = *(py--); + + /* Read x[7] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 += ((q31_t) x0 * c0); + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 += ((q31_t) x1 * c0); + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 += ((q31_t) x2 * c0); + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 += ((q31_t) x3 * c0); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(acc0 >> 7, 8)); + *pOut++ = (q7_t) (__SSAT(acc1 >> 7, 8)); + *pOut++ = (q7_t) (__SSAT(acc2 >> 7, 8)); + *pOut++ = (q7_t) (__SSAT(acc3 >> 7, 8)); + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = (uint32_t) blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Perform the multiply-accumulates */ + sum = __SMLAD(input1, input2, sum); + + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Perform the multiply-accumulates */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7, 8)); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7, 8)); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Reading two inputs, x[srcALen - srcBLen + 1] and x[srcALen - srcBLen + 2] of SrcA buffer and packing */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Reading two inputs, y[srcBLen - 1] and y[srcBLen - 2] of SrcB buffer and packing */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum = __SMLAD(input1, input2, sum); + + /* Reading two inputs, x[srcALen - srcBLen + 3] and x[srcALen - srcBLen + 4] of SrcA buffer and packing */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Reading two inputs, y[srcBLen - 3] and y[srcBLen - 4] of SrcB buffer and packing */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7, 8)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#else + + /* Run the below code for Cortex-M0 */ + + q7_t *pIn1 = pSrcA; /* inputA pointer */ + q7_t *pIn2 = pSrcB; /* inputB pointer */ + q31_t sum; /* Accumulator */ + uint32_t i, j; /* loop counters */ + arm_status status; /* status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u)))) + { + /* Set status as ARM_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* Loop to calculate convolution for output length number of values */ + for (i = firstIndex; i <= (firstIndex + numPoints - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0; j <= i; j++) + { + /* Check the array limitations */ + if(((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q15_t) pIn1[j] * (pIn2[i - j])); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = (q7_t) __SSAT((sum >> 7u), 8u); + } + /* set status as ARM_SUCCESS as there are no argument errors */ + status = ARM_MATH_SUCCESS; + } + return (status); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of PartialConv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,734 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_q15.c +* +* Description: Convolution of Q15 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Conv + * @{ + */ + +/** + * @brief Convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both inputs are in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * This approach provides 33 guard bits and there is no risk of overflow. + * The 34.30 result is then truncated to 34.15 format by discarding the low 15 bits and then saturated to 1.15 format. + * + * \par + * Refer to arm_conv_fast_q15() for a faster but less precise version of this function for Cortex-M3 and Cortex-M4. + * + * \par + * Refer the function arm_conv_opt_q15() for a faster implementation of this function using scratch buffers. + * + */ + +void arm_conv_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst) +{ + +#if (defined(ARM_MATH_CM4) || defined(ARM_MATH_CM3)) && !defined(UNALIGNED_SUPPORT_DISABLE) + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *pOut = pDst; /* output pointer */ + q63_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t blockSize1, blockSize2, blockSize3, j, k, count, blkCnt; /* loop counter */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations less than 4 */ + /* Second part of this stage computes the MAC operations greater than or equal to 4 */ + + /* The first part of the stage starts here */ + while((count < 4u) && (blockSize1 > 0u)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over number of MAC operations between + * inputA samples and inputB samples */ + k = count; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* The second part of the stage starts here */ + /* The internal loop, over count, is unrolled by 4 */ + /* To, read the last two inputB samples using SIMD: + * y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */ + py = py - 1; + + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* x[0], x[1] are multiplied with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLALDX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLALDX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1u; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + (count - 1u); + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0u; + + + /* -------------------- + * Stage2 process + * -------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + py = py - 1u; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + + /* read x[0], x[1] samples */ + x0 = *__SIMD32(px); + /* read x[1], x[2] samples */ + x1 = _SIMD32_OFFSET(px+1); + px+= 2u; + + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the last two inputB samples using SIMD: + * y[srcBLen - 1] and y[srcBLen - 2] */ + c0 = *__SIMD32(py)--; + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLALDX(x0, c0, acc0); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLALDX(x1, c0, acc1); + + /* Read x[2], x[3] */ + x2 = *__SIMD32(px); + + /* Read x[3], x[4] */ + x3 = _SIMD32_OFFSET(px+1); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLALDX(x2, c0, acc2); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLALDX(x3, c0, acc3); + + /* Read y[srcBLen - 3] and y[srcBLen - 4] */ + c0 = *__SIMD32(py)--; + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLALDX(x2, c0, acc0); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLALDX(x3, c0, acc1); + + /* Read x[4], x[5] */ + x0 = _SIMD32_OFFSET(px+2); + + /* Read x[5], x[6] */ + x1 = _SIMD32_OFFSET(px+3); + px += 4u; + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLALDX(x0, c0, acc2); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLALDX(x1, c0, acc3); + + } while(--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + if(k == 1u) + { + /* Read y[srcBLen - 5] */ + c0 = *(py+1); + +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; + +#else + + c0 = c0 & 0x0000FFFF; + +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + /* Read x[7] */ + x3 = *__SIMD32(px); + px++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALD(x0, c0, acc0); + acc1 = __SMLALD(x1, c0, acc1); + acc2 = __SMLALDX(x1, c0, acc2); + acc3 = __SMLALDX(x3, c0, acc3); + } + + if(k == 2u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = _SIMD32_OFFSET(py); + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px+1); + px += 2u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALDX(x0, c0, acc0); + acc1 = __SMLALDX(x1, c0, acc1); + acc2 = __SMLALDX(x3, c0, acc2); + acc3 = __SMLALDX(x2, c0, acc3); + } + + if(k == 3u) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = _SIMD32_OFFSET(py); + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px+1); + + /* Perform the multiply-accumulates */ + acc0 = __SMLALDX(x0, c0, acc0); + acc1 = __SMLALDX(x1, c0, acc1); + acc2 = __SMLALDX(x3, c0, acc2); + acc3 = __SMLALDX(x2, c0, acc3); + + c0 = *(py-1); + +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; +#else + + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + /* Read x[10] */ + x3 = _SIMD32_OFFSET(px+2); + px += 3u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALDX(x1, c0, acc0); + acc1 = __SMLALD(x2, c0, acc1); + acc2 = __SMLALDX(x2, c0, acc2); + acc3 = __SMLALDX(x3, c0, acc3); + } + + + /* Store the results in the accumulators in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16); + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16); + +#else + + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16); + *__SIMD32(pOut)++ = + __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += (q63_t) ((q31_t) * px++ * *py--); + sum += (q63_t) ((q31_t) * px++ * *py--); + sum += (q63_t) ((q31_t) * px++ * *py--); + sum += (q63_t) ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += (q63_t) ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT(sum >> 15, 16)); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) ((q31_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT(sum >> 15, 16)); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + + blockSize3 = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + pIn2 = pSrc2 - 1u; + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations greater than 4 */ + /* Second part of this stage computes the MAC operations less than or equal to 4 */ + + /* The first part of the stage starts here */ + j = blockSize3 >> 2u; + + while((j > 0u) && (blockSize3 > 0u)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3 >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[srcALen - srcBLen + 1], x[srcALen - srcBLen + 2] are multiplied + * with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLALDX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied + * with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLALDX(*__SIMD32(px)++, *__SIMD32(py)--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1u; + + /* If the blockSize3 is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = blockSize3 % 0x4u; + + while(k > 0u) + { + /* sum += x[srcALen - srcBLen + 5] * y[srcBLen - 5] */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the loop counter */ + blockSize3--; + + j--; + } + + /* The second part of the stage starts here */ + /* SIMD is not used for the next MAC operations, + * so pointer py is updated to read only one sample at a time */ + py = py + 1u; + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the loop counter */ + blockSize3--; + } + +#else + +/* Run the below code for Cortex-M0 */ + + q15_t *pIn1 = pSrcA; /* input pointer */ + q15_t *pIn2 = pSrcB; /* coefficient pointer */ + q63_t sum; /* Accumulator */ + uint32_t i, j; /* loop counter */ + + /* Loop to calculate output of convolution for output length number of times */ + for (i = 0; i < (srcALen + srcBLen - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0; j <= i; j++) + { + /* Check the array limitations */ + if(((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += (q31_t) pIn1[j] * (pIn2[i - j]); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = (q15_t) __SSAT((sum >> 15u), 16u); + } + +#endif /* #if (defined(ARM_MATH_CM4) || defined(ARM_MATH_CM3)) && !defined(UNALIGNED_SUPPORT_DISABLE)*/ + +} + +/** + * @} end of Conv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,565 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_q31.c +* +* Description: Convolution of Q31 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Conv + * @{ + */ + +/** + * @brief Convolution of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * There is no saturation on intermediate additions. + * Thus, if the accumulator overflows it wraps around and distorts the result. + * The input signals should be scaled down to avoid intermediate overflows. + * Scale down the inputs by log2(min(srcALen, srcBLen)) (log2 is read as log to the base 2) times to avoid overflows, + * as maximum of min(srcALen, srcBLen) number of additions are carried internally. + * The 2.62 accumulator is right shifted by 31 bits and saturated to 1.31 format to yield the final result. + * + * \par + * See arm_conv_fast_q31() for a faster but less precise implementation of this function for Cortex-M3 and Cortex-M4. + */ + +void arm_conv_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst) +{ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t *pIn1; /* inputA pointer */ + q31_t *pIn2; /* inputB pointer */ + q31_t *pOut = pDst; /* output pointer */ + q31_t *px; /* Intermediate inputA pointer */ + q31_t *py; /* Intermediate inputB pointer */ + q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q63_t sum; /* Accumulator */ + q63_t acc0, acc1, acc2; /* Accumulator */ + q31_t x0, x1, x2, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t j, k, count, blkCnt, blockSize1, blockSize2, blockSize3; /* loop counter */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = (q31_t *) pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = (q31_t *) pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 1] */ + sum += (q63_t) * px++ * (*py--); + /* x[1] * y[srcBLen - 2] */ + sum += (q63_t) * px++ * (*py--); + /* x[2] * y[srcBLen - 3] */ + sum += (q63_t) * px++ * (*py--); + /* x[3] * y[srcBLen - 4] */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll by 3 */ + blkCnt = blockSize2 / 3; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *(px++); + x1 = *(px++); + + /* Apply loop unrolling and compute 3 MACs simultaneously. */ + k = srcBLen / 3; + + /* First part of the processing with loop unrolling. Compute 3 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 2 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *(py); + + /* Read x[3] sample */ + x2 = *(px); + + /* Perform the multiply-accumulates */ + /* acc0 += x[0] * y[srcBLen - 1] */ + acc0 += ((q63_t) x0 * c0); + /* acc1 += x[1] * y[srcBLen - 1] */ + acc1 += ((q63_t) x1 * c0); + /* acc2 += x[2] * y[srcBLen - 1] */ + acc2 += ((q63_t) x2 * c0); + + /* Read y[srcBLen - 2] sample */ + c0 = *(py - 1u); + + /* Read x[4] sample */ + x0 = *(px + 1u); + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[srcBLen - 2] */ + acc0 += ((q63_t) x1 * c0); + /* acc1 += x[2] * y[srcBLen - 2] */ + acc1 += ((q63_t) x2 * c0); + /* acc2 += x[3] * y[srcBLen - 2] */ + acc2 += ((q63_t) x0 * c0); + + /* Read y[srcBLen - 3] sample */ + c0 = *(py - 2u); + + /* Read x[5] sample */ + x1 = *(px + 2u); + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[srcBLen - 3] */ + acc0 += ((q63_t) x2 * c0); + /* acc1 += x[3] * y[srcBLen - 2] */ + acc1 += ((q63_t) x0 * c0); + /* acc2 += x[4] * y[srcBLen - 2] */ + acc2 += ((q63_t) x1 * c0); + + /* update scratch pointers */ + px += 3u; + py -= 3u; + + } while(--k); + + /* If the srcBLen is not a multiple of 3, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen - (3 * (srcBLen / 3)); + + while(k > 0u) + { + /* Read y[srcBLen - 5] sample */ + c0 = *(py--); + + /* Read x[7] sample */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 += ((q63_t) x0 * c0); + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 += ((q63_t) x1 * c0); + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 += ((q63_t) x2 * c0); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + + /* Decrement the loop counter */ + k--; + } + + /* Store the results in the accumulators in the destination buffer. */ + *pOut++ = (q31_t) (acc0 >> 31); + *pOut++ = (q31_t) (acc1 >> 31); + *pOut++ = (q31_t) (acc2 >> 31); + + /* Increment the pointer pIn1 index, count by 3 */ + count += 3u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 3, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 - 3 * (blockSize2 / 3); + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += (q63_t) * px++ * (*py--); + sum += (q63_t) * px++ * (*py--); + sum += (q63_t) * px++ * (*py--); + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3 >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + sum += (q63_t) * px++ * (*py--); + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum += (q63_t) * px++ * (*py--); + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + sum += (q63_t) * px++ * (*py--); + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* If the blockSize3 is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = blockSize3 % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) * px++ * (*py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the loop counter */ + blockSize3--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + q31_t *pIn1 = pSrcA; /* input pointer */ + q31_t *pIn2 = pSrcB; /* coefficient pointer */ + q63_t sum; /* Accumulator */ + uint32_t i, j; /* loop counter */ + + /* Loop to calculate output of convolution for output length number of times */ + for (i = 0; i < (srcALen + srcBLen - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0; j <= i; j++) + { + /* Check the array limitations */ + if(((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q63_t) pIn1[j] * (pIn2[i - j])); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = (q31_t) (sum >> 31u); + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of Conv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,690 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_conv_q7.c +* +* Description: Convolution of Q7 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Conv + * @{ + */ + +/** + * @brief Convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 32-bit internal accumulator. + * Both the inputs are represented in 1.7 format and multiplications yield a 2.14 result. + * The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + * This approach provides 17 guard bits and there is no risk of overflow as long as max(srcALen, srcBLen)<131072. + * The 18.14 result is then truncated to 18.7 format by discarding the low 7 bits and then saturated to 1.7 format. + * + * \par + * Refer the function arm_conv_opt_q7() for a faster implementation of this function. + * + */ + +void arm_conv_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst) +{ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q7_t *pIn1; /* inputA pointer */ + q7_t *pIn2; /* inputB pointer */ + q7_t *pOut = pDst; /* output pointer */ + q7_t *px; /* Intermediate inputA pointer */ + q7_t *py; /* Intermediate inputB pointer */ + q7_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q7_t x0, x1, x2, x3, c0, c1; /* Temporary variables to hold state and coefficient values */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + q31_t input1, input2; /* Temporary input variables */ + q15_t in1, in2; /* Temporary input variables */ + uint32_t j, k, count, blkCnt, blockSize1, blockSize2, blockSize3; /* loop counter */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = (srcALen - srcBLen) + 1u; + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] , x[1] */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* y[srcBLen - 1] , y[srcBLen - 2] */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* x[0] * y[srcBLen - 1] */ + /* x[1] * y[srcBLen - 2] */ + sum = __SMLAD(input1, input2, sum); + + /* x[2] , x[3] */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* y[srcBLen - 3] , y[srcBLen - 4] */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* x[2] * y[srcBLen - 3] */ + /* x[3] * y[srcBLen - 4] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q15_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7u, 8)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *(px++); + x1 = *(px++); + x2 = *(px++); + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *(py--); + /* Read y[srcBLen - 2] sample */ + c1 = *(py--); + + /* Read x[3] sample */ + x3 = *(px++); + + /* x[0] and x[1] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* y[srcBLen - 1] and y[srcBLen - 2] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[1] and x[2] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[4] sample */ + x0 = *(px++); + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLAD(input1, input2, acc3); + + /* Read y[srcBLen - 3] sample */ + c0 = *(py--); + /* Read y[srcBLen - 4] sample */ + c1 = *(py--); + + /* Read x[5] sample */ + x1 = *(px++); + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* y[srcBLen - 3] and y[srcBLen - 4] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[4] and x[5] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[6] sample */ + x2 = *(px++); + + /* x[5] and x[6] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLAD(input1, input2, acc3); + + } while(--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Read y[srcBLen - 5] sample */ + c0 = *(py--); + + /* Read x[7] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 += ((q15_t) x0 * c0); + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 += ((q15_t) x1 * c0); + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 += ((q15_t) x2 * c0); + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 += ((q15_t) x3 * c0); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(acc0 >> 7u, 8)); + *pOut++ = (q7_t) (__SSAT(acc1 >> 7u, 8)); + *pOut++ = (q7_t) (__SSAT(acc2 >> 7u, 8)); + *pOut++ = (q7_t) (__SSAT(acc3 >> 7u, 8)); + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* Perform the multiply-accumulates */ + sum = __SMLAD(input1, input2, sum); + + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* Perform the multiply-accumulates */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q15_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7u, 8)); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += ((q15_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7u, 8)); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + + /* Working pointer of inputA */ + pSrc1 = pIn1 + (srcALen - (srcBLen - 1u)); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1u); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3 >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Reading two inputs, x[srcALen - srcBLen + 1] and x[srcALen - srcBLen + 2] of SrcA buffer and packing */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* Reading two inputs, y[srcBLen - 1] and y[srcBLen - 2] of SrcB buffer and packing */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum = __SMLAD(input1, input2, sum); + + /* Reading two inputs, x[srcALen - srcBLen + 3] and x[srcALen - srcBLen + 4] of SrcA buffer and packing */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* Reading two inputs, y[srcBLen - 3] and y[srcBLen - 4] of SrcB buffer and packing */ + in1 = (q15_t) * py--; + in2 = (q15_t) * py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16u); + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the blockSize3 is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = blockSize3 % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q15_t) * px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7u, 8)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the loop counter */ + blockSize3--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + q7_t *pIn1 = pSrcA; /* input pointer */ + q7_t *pIn2 = pSrcB; /* coefficient pointer */ + q31_t sum; /* Accumulator */ + uint32_t i, j; /* loop counter */ + + /* Loop to calculate output of convolution for output length number of times */ + for (i = 0; i < (srcALen + srcBLen - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0; j <= i; j++) + { + /* Check the array limitations */ + if(((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += (q15_t) pIn1[j] * (pIn2[i - j]); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = (q7_t) __SSAT((sum >> 7u), 8u); + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of Conv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,739 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_correlate_f32.c +* +* Description: Correlation of floating-point sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup Corr Correlation + * + * Correlation is a mathematical operation that is similar to convolution. + * As with convolution, correlation uses two signals to produce a third signal. + * The underlying algorithms in correlation and convolution are identical except that one of the inputs is flipped in convolution. + * Correlation is commonly used to measure the similarity between two signals. + * It has applications in pattern recognition, cryptanalysis, and searching. + * The CMSIS library provides correlation functions for Q7, Q15, Q31 and floating-point data types. + * Fast versions of the Q15 and Q31 functions are also provided. + * + * \par Algorithm + * Let a[n] and b[n] be sequences of length srcALen and srcBLen samples respectively. + * The convolution of the two signals is denoted by + *
    
+ *                   c[n] = a[n] * b[n]    
+ * 
+ * In correlation, one of the signals is flipped in time + *
    
+ *                   c[n] = a[n] * b[-n]    
+ * 
+ * + * \par + * and this is mathematically defined as + * \image html CorrelateEquation.gif + * \par + * The pSrcA points to the first input vector of length srcALen and pSrcB points to the second input vector of length srcBLen. + * The result c[n] is of length 2 * max(srcALen, srcBLen) - 1 and is defined over the interval n=0, 1, 2, ..., (2 * max(srcALen, srcBLen) - 2). + * The output result is written to pDst and the calling function must allocate 2 * max(srcALen, srcBLen) - 1 words for the result. + * + * Note + * \par + * The pDst should be initialized to all zeros before being used. + * + * Fixed-Point Behavior + * \par + * Correlation requires summing up a large number of intermediate products. + * As such, the Q7, Q15, and Q31 functions run a risk of overflow and saturation. + * Refer to the function specific documentation below for further details of the particular algorithm used. + * + * + * Fast Versions + * + * \par + * Fast versions are supported for Q31 and Q15. Cycles for Fast versions are less compared to Q31 and Q15 of correlate and the design requires + * the input signals should be scaled down to avoid intermediate overflows. + * + * + * Opt Versions + * + * \par + * Opt versions are supported for Q15 and Q7. Design uses internal scratch buffer for getting good optimisation. + * These versions are optimised in cycles and consumes more memory(Scratch memory) compared to Q15 and Q7 versions of correlate + */ + +/** + * @addtogroup Corr + * @{ + */ +/** + * @brief Correlation of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + +void arm_correlate_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst) +{ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float32_t *pIn1; /* inputA pointer */ + float32_t *pIn2; /* inputB pointer */ + float32_t *pOut = pDst; /* output pointer */ + float32_t *px; /* Intermediate inputA pointer */ + float32_t *py; /* Intermediate inputB pointer */ + float32_t *pSrc1; /* Intermediate pointers */ + float32_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + float32_t x0, x1, x2, x3, c0; /* temporary variables for holding input and coefficient values */ + uint32_t j, k = 0u, count, blkCnt, outBlockSize, blockSize1, blockSize2, blockSize3; /* loop counters */ + int32_t inc = 1; /* Destination address modifier */ + + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we assume zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + + /* Number of output samples is calculated */ + outBlockSize = (2u * srcALen) - 1u; + + /* When srcALen > srcBLen, zero padding has to be done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1u)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + //while(j > 0u) + //{ + // /* Zero is stored in the destination buffer */ + // *pOut++ = 0.0f; + + // /* Decrement the loop counter */ + // j--; + //} + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2u); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + /* The function is internally + * divided into three parts according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first part of the + * algorithm, the multiplications increase by one for every iteration. + * In the second part of the algorithm, srcBLen number of multiplications are done. + * In the third part of the algorithm, the multiplications decrease by one + * for every iteration.*/ + /* The algorithm is implemented in three stages. + * The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[srcBlen - 1] + * sum = x[0] * y[srcBlen-2] + x[1] * y[srcBlen - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen - 1] * y[srcBLen - 1] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + (srcBLen - 1u); + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 4] */ + sum += *px++ * *py++; + /* x[1] * y[srcBLen - 3] */ + sum += *px++ * *py++; + /* x[2] * y[srcBLen - 2] */ + sum += *px++ * *py++; + /* x[3] * y[srcBLen - 1] */ + sum += *px++ * *py++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + /* x[0] * y[srcBLen - 1] */ + sum += *px++ * *py++; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pSrc1 - count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen-1] * y[srcBLen-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[srcBLen] * y[srcBLen-1] + * .... + * sum = x[srcALen-srcBLen-2] * y[0] + x[srcALen-srcBLen-1] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4, to loop unroll the srcBLen loop */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0.0f; + acc1 = 0.0f; + acc2 = 0.0f; + acc3 = 0.0f; + + /* read x[0], x[1], x[2] samples */ + x0 = *(px++); + x1 = *(px++); + x2 = *(px++); + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[0] sample */ + c0 = *(py++); + + /* Read x[3] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[0] */ + acc0 += x0 * c0; + /* acc1 += x[1] * y[0] */ + acc1 += x1 * c0; + /* acc2 += x[2] * y[0] */ + acc2 += x2 * c0; + /* acc3 += x[3] * y[0] */ + acc3 += x3 * c0; + + /* Read y[1] sample */ + c0 = *(py++); + + /* Read x[4] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[1] */ + acc0 += x1 * c0; + /* acc1 += x[2] * y[1] */ + acc1 += x2 * c0; + /* acc2 += x[3] * y[1] */ + acc2 += x3 * c0; + /* acc3 += x[4] * y[1] */ + acc3 += x0 * c0; + + /* Read y[2] sample */ + c0 = *(py++); + + /* Read x[5] sample */ + x1 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[2] */ + acc0 += x2 * c0; + /* acc1 += x[3] * y[2] */ + acc1 += x3 * c0; + /* acc2 += x[4] * y[2] */ + acc2 += x0 * c0; + /* acc3 += x[5] * y[2] */ + acc3 += x1 * c0; + + /* Read y[3] sample */ + c0 = *(py++); + + /* Read x[6] sample */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[3] * y[3] */ + acc0 += x3 * c0; + /* acc1 += x[4] * y[3] */ + acc1 += x0 * c0; + /* acc2 += x[5] * y[3] */ + acc2 += x1 * c0; + /* acc3 += x[6] * y[3] */ + acc3 += x2 * c0; + + + } while(--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Read y[4] sample */ + c0 = *(py++); + + /* Read x[7] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[4] */ + acc0 += x0 * c0; + /* acc1 += x[5] * y[4] */ + acc1 += x1 * c0; + /* acc2 += x[6] * y[4] */ + acc2 += x2 * c0; + /* acc3 += x[7] * y[4] */ + acc3 += x3 * c0; + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = acc0; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + *pOut = acc1; + pOut += inc; + + *pOut = acc2; + pOut += inc; + + *pOut = acc3; + pOut += inc; + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += *px++ * *py++; + sum += *px++ * *py++; + sum += *px++ * *py++; + sum += *px++ * *py++; + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += *px++ * *py++; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* Loop over srcBLen */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += *px++ * *py++; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[0] + x[srcALen-srcBLen+2] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * sum += x[srcALen-srcBLen+2] * y[0] + x[srcALen-srcBLen+3] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * .... + * sum += x[srcALen-2] * y[0] + x[srcALen-1] * y[1] + * sum += x[srcALen-1] * y[0] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = pIn1 + (srcALen - (srcBLen - 1u)); + px = pSrc1; + + /* Working pointer of inputB */ + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen - srcBLen + 4] * y[3] */ + sum += *px++ * *py++; + /* sum += x[srcALen - srcBLen + 3] * y[2] */ + sum += *px++ * *py++; + /* sum += x[srcALen - srcBLen + 2] * y[1] */ + sum += *px++ * *py++; + /* sum += x[srcALen - srcBLen + 1] * y[0] */ + sum += *px++ * *py++; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += *px++ * *py++; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + float32_t *pIn1 = pSrcA; /* inputA pointer */ + float32_t *pIn2 = pSrcB + (srcBLen - 1u); /* inputB pointer */ + float32_t sum; /* Accumulator */ + uint32_t i = 0u, j; /* loop counters */ + uint32_t inv = 0u; /* Reverse order flag */ + uint32_t tot = 0u; /* Length */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and a varaible, inv is set to 1 */ + /* If lengths are not equal then zero pad has to be done to make the two + * inputs of same length. But to improve the performance, we assume zeroes + * in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, (srcALen - srcBLen) zeroes has to included in the + * starting of the output buffer */ + /* If srcALen < srcBLen, (srcALen - srcBLen) zeroes has to included in the + * ending of the output buffer */ + /* Once the zero padding is done the remaining of the output is calcualted + * using convolution but with the shorter signal time shifted. */ + + /* Calculate the length of the remaining sequence */ + tot = ((srcALen + srcBLen) - 2u); + + if(srcALen > srcBLen) + { + /* Calculating the number of zeros to be padded to the output */ + j = srcALen - srcBLen; + + /* Initialise the pointer after zero padding */ + pDst += j; + } + + else if(srcALen < srcBLen) + { + /* Initialization to inputB pointer */ + pIn1 = pSrcB; + + /* Initialization to the end of inputA pointer */ + pIn2 = pSrcA + (srcALen - 1u); + + /* Initialisation of the pointer after zero padding */ + pDst = pDst + tot; + + /* Swapping the lengths */ + j = srcALen; + srcALen = srcBLen; + srcBLen = j; + + /* Setting the reverse flag */ + inv = 1; + + } + + /* Loop to calculate convolution for output length number of times */ + for (i = 0u; i <= tot; i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0.0f; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0u; j <= i; j++) + { + /* Check the array limitations */ + if((((i - j) < srcBLen) && (j < srcALen))) + { + /* z[i] += x[i-j] * y[j] */ + sum += pIn1[j] * pIn2[-((int32_t) i - j)]; + } + } + /* Store the output in the destination buffer */ + if(inv == 1) + *pDst-- = sum; + else + *pDst++ = sum; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of Corr group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,512 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_correlate_fast_opt_q15.c +* +* Description: Fast Q15 Correlation. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Corr + * @{ + */ + +/** + * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] *pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @return none. + * + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, scratch buffers should be aligned by 32-bit + * + * + * Scaling and Overflow Behavior: + * + * \par + * This fast version uses a 32-bit accumulator with 2.30 format. + * The accumulator maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * There is no saturation on intermediate additions. + * Thus, if the accumulator overflows it wraps around and distorts the result. + * The input signals should be scaled down to avoid intermediate overflows. + * Scale down one of the inputs by 1/min(srcALen, srcBLen) to avoid overflow since a + * maximum of min(srcALen, srcBLen) number of additions is carried internally. + * The 2.30 accumulator is right shifted by 15 bits and then saturated to 1.15 format to yield the final result. + * + * \par + * See arm_correlate_q15() for a slower implementation of this function which uses a 64-bit accumulator to avoid wrap around distortion. + */ + +void arm_correlate_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch) +{ + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + q15_t *py; /* Intermediate inputB pointer */ + q31_t x1, x2, x3; /* temporary variables for holding input and coefficient values */ + uint32_t j, blkCnt, outBlockSize; /* loop counter */ + int32_t inc = 1; /* Destination address modifier */ + uint32_t tapCnt; + q31_t y1, y2; + q15_t *pScr; /* Intermediate pointers */ + q15_t *pOut = pDst; /* output pointer */ +#ifdef UNALIGNED_SUPPORT_DISABLE + + q15_t a, b; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcA); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcB); + + /* Number of output samples is calculated */ + outBlockSize = (2u * srcALen) - 1u; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1u)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcB); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcA); + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2u); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + pScr = pScratch; + + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr += (srcBLen - 1u); + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr, srcALen); + + /* Update pointers */ + pScr += srcALen; + +#else + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + j = srcALen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(j > 0u) + { + /* copy second buffer in reversal manner */ + *pScr++ = *pIn1++; + *pScr++ = *pIn1++; + *pScr++ = *pIn1++; + *pScr++ = *pIn1++; + + /* Decrement the loop counter */ + j--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + j = srcALen % 0x4u; + + while(j > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr++ = *pIn1++; + + /* Decrement the loop counter */ + j--; + } + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Fill (srcBLen - 1u) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr, (srcBLen - 1u)); + + /* Update pointer */ + pScr += (srcBLen - 1u); + +#else + +/* Apply loop unrolling and do 4 Copies simultaneously. */ + j = (srcBLen - 1u) >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(j > 0u) + { + /* copy second buffer in reversal manner */ + *pScr++ = 0; + *pScr++ = 0; + *pScr++ = 0; + *pScr++ = 0; + + /* Decrement the loop counter */ + j--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + j = (srcBLen - 1u) % 0x4u; + + while(j > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr++ = 0; + + /* Decrement the loop counter */ + j--; + } + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Temporary pointer for scratch2 */ + py = pIn2; + + + /* Actual correlation process starts here */ + blkCnt = (srcALen + srcBLen - 1u) >> 2; + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr = pScratch; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read four samples from scratch1 buffer */ + x1 = *__SIMD32(pScr)++; + + /* Read next four samples from scratch1 buffer */ + x2 = *__SIMD32(pScr)++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pIn2); + y2 = _SIMD32_OFFSET(pIn2 + 2u); + + acc0 = __SMLAD(x1, y1, acc0); + + acc2 = __SMLAD(x2, y1, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc1 = __SMLADX(x3, y1, acc1); + + x1 = _SIMD32_OFFSET(pScr); + + acc0 = __SMLAD(x2, y2, acc0); + + acc2 = __SMLAD(x1, y2, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + acc1 = __SMLADX(x3, y2, acc1); + + x2 = _SIMD32_OFFSET(pScr + 2u); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y2, acc3); +#else + + /* Read four samples from smaller buffer */ + a = *pIn2; + b = *(pIn2 + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + y1 = __PKHBT(a, b, 16); +#else + y1 = __PKHBT(b, a, 16); +#endif + + a = *(pIn2 + 2); + b = *(pIn2 + 3); +#ifndef ARM_MATH_BIG_ENDIAN + y2 = __PKHBT(a, b, 16); +#else + y2 = __PKHBT(b, a, 16); +#endif + + acc0 = __SMLAD(x1, y1, acc0); + + acc2 = __SMLAD(x2, y1, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc1 = __SMLADX(x3, y1, acc1); + + a = *pScr; + b = *(pScr + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(a, b, 16); +#else + x1 = __PKHBT(b, a, 16); +#endif + + acc0 = __SMLAD(x2, y2, acc0); + + acc2 = __SMLAD(x1, y2, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + acc1 = __SMLADX(x3, y2, acc1); + + a = *(pScr + 2); + b = *(pScr + 3); + +#ifndef ARM_MATH_BIG_ENDIAN + x2 = __PKHBT(a, b, 16); +#else + x2 = __PKHBT(b, a, 16); +#endif + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y2, acc3); + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + pIn2 += 4u; + + pScr += 4u; + + + /* Decrement the loop counter */ + tapCnt--; + } + + + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr -= 4u; + + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr++ * *pIn2); + acc1 += (*pScr++ * *pIn2); + acc2 += (*pScr++ * *pIn2); + acc3 += (*pScr++ * *pIn2++); + + pScr -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + + /* Store the results in the accumulators in the destination buffer. */ + *pOut = (__SSAT(acc0 >> 15u, 16)); + pOut += inc; + *pOut = (__SSAT(acc1 >> 15u, 16)); + pOut += inc; + *pOut = (__SSAT(acc2 >> 15u, 16)); + pOut += inc; + *pOut = (__SSAT(acc3 >> 15u, 16)); + pOut += inc; + + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch += 4u; + + } + + + blkCnt = (srcALen + srcBLen - 1u) & 0x3; + + /* Calculate correlation for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr = pScratch; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + + acc0 += (*pScr++ * *pIn2++); + acc0 += (*pScr++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + + *pOut = (q15_t) (__SSAT((acc0 >> 15), 16)); + + pOut += inc; + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch += 1u; + + } +} + +/** + * @} end of Corr group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1319 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_correlate_fast_q15.c +* +* Description: Fast Q15 Correlation. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Corr + * @{ + */ + +/** + * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + * + * Scaling and Overflow Behavior: + * + * \par + * This fast version uses a 32-bit accumulator with 2.30 format. + * The accumulator maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * There is no saturation on intermediate additions. + * Thus, if the accumulator overflows it wraps around and distorts the result. + * The input signals should be scaled down to avoid intermediate overflows. + * Scale down one of the inputs by 1/min(srcALen, srcBLen) to avoid overflow since a + * maximum of min(srcALen, srcBLen) number of additions is carried internally. + * The 2.30 accumulator is right shifted by 15 bits and then saturated to 1.15 format to yield the final result. + * + * \par + * See arm_correlate_q15() for a slower implementation of this function which uses a 64-bit accumulator to avoid wrap around distortion. + */ + +void arm_correlate_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst) +{ +#ifndef UNALIGNED_SUPPORT_DISABLE + + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *pOut = pDst; /* output pointer */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + q15_t *pSrc1; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* temporary variables for holding input and coefficient values */ + uint32_t j, k = 0u, count, blkCnt, outBlockSize, blockSize1, blockSize2, blockSize3; /* loop counter */ + int32_t inc = 1; /* Destination address modifier */ + + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcA); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcB); + + /* Number of output samples is calculated */ + outBlockSize = (2u * srcALen) - 1u; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1u)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcB); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcA); + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2u); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + /* The function is internally + * divided into three parts according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first part of the + * algorithm, the multiplications increase by one for every iteration. + * In the second part of the algorithm, srcBLen number of multiplications are done. + * In the third part of the algorithm, the multiplications decrease by one + * for every iteration.*/ + /* The algorithm is implemented in three stages. + * The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[srcBlen - 1] + * sum = x[0] * y[srcBlen - 2] + x[1] * y[srcBlen - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen - 1] * y[srcBLen - 1] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + (srcBLen - 1u); + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first loop starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 4] , x[1] * y[srcBLen - 3] */ + sum = __SMLAD(*__SIMD32(px)++, *__SIMD32(py)++, sum); + /* x[3] * y[srcBLen - 1] , x[2] * y[srcBLen - 2] */ + sum = __SMLAD(*__SIMD32(px)++, *__SIMD32(py)++, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* x[0] * y[srcBLen - 1] */ + sum = __SMLAD(*px++, *py++, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pSrc1 - count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen-1] * y[srcBLen-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[srcBLen] * y[srcBLen-1] + * .... + * sum = x[srcALen-srcBLen-2] * y[0] + x[srcALen-srcBLen-1] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4, to loop unroll the srcBLen loop */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1] samples */ + x0 = *__SIMD32(px); + /* read x[1], x[2] samples */ + x1 = _SIMD32_OFFSET(px + 1); + px += 2u; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the first two inputB samples using SIMD: + * y[0] and y[1] */ + c0 = *__SIMD32(py)++; + + /* acc0 += x[0] * y[0] + x[1] * y[1] */ + acc0 = __SMLAD(x0, c0, acc0); + + /* acc1 += x[1] * y[0] + x[2] * y[1] */ + acc1 = __SMLAD(x1, c0, acc1); + + /* Read x[2], x[3] */ + x2 = *__SIMD32(px); + + /* Read x[3], x[4] */ + x3 = _SIMD32_OFFSET(px + 1); + + /* acc2 += x[2] * y[0] + x[3] * y[1] */ + acc2 = __SMLAD(x2, c0, acc2); + + /* acc3 += x[3] * y[0] + x[4] * y[1] */ + acc3 = __SMLAD(x3, c0, acc3); + + /* Read y[2] and y[3] */ + c0 = *__SIMD32(py)++; + + /* acc0 += x[2] * y[2] + x[3] * y[3] */ + acc0 = __SMLAD(x2, c0, acc0); + + /* acc1 += x[3] * y[2] + x[4] * y[3] */ + acc1 = __SMLAD(x3, c0, acc1); + + /* Read x[4], x[5] */ + x0 = _SIMD32_OFFSET(px + 2); + + /* Read x[5], x[6] */ + x1 = _SIMD32_OFFSET(px + 3); + px += 4u; + + /* acc2 += x[4] * y[2] + x[5] * y[3] */ + acc2 = __SMLAD(x0, c0, acc2); + + /* acc3 += x[5] * y[2] + x[6] * y[3] */ + acc3 = __SMLAD(x1, c0, acc3); + + } while(--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + if(k == 1u) + { + /* Read y[4] */ + c0 = *py; +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; + +#else + + c0 = c0 & 0x0000FFFF; + +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + x3 = *__SIMD32(px); + px++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLADX(x1, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + if(k == 2u) + { + /* Read y[4], y[5] */ + c0 = *__SIMD32(py); + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px + 1); + px += 2u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLAD(x3, c0, acc2); + acc3 = __SMLAD(x2, c0, acc3); + } + + if(k == 3u) + { + /* Read y[4], y[5] */ + c0 = *__SIMD32(py)++; + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px + 1); + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLAD(x3, c0, acc2); + acc3 = __SMLAD(x2, c0, acc3); + + c0 = (*py); + /* Read y[6] */ +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; +#else + + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + x3 = _SIMD32_OFFSET(px + 2); + px += 3u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x1, c0, acc0); + acc1 = __SMLAD(x2, c0, acc1); + acc2 = __SMLADX(x2, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (acc0 >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + *pOut = (q15_t) (acc1 >> 15); + pOut += inc; + + *pOut = (q15_t) (acc2 >> 15); + pOut += inc; + + *pOut = (q15_t) (acc3 >> 15); + pOut += inc; + + /* Increment the pointer pIn1 index, count by 1 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over srcBLen */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[0] + x[srcALen-srcBLen+2] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * sum += x[srcALen-srcBLen+2] * y[0] + x[srcALen-srcBLen+3] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * .... + * sum += x[srcALen-2] * y[0] + x[srcALen-1] * y[1] + * sum += x[srcALen-1] * y[0] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen - srcBLen + 4] * y[3] , sum += x[srcALen - srcBLen + 3] * y[2] */ + sum = __SMLAD(*__SIMD32(px)++, *__SIMD32(py)++, sum); + /* sum += x[srcALen - srcBLen + 2] * y[1] , sum += x[srcALen - srcBLen + 1] * y[0] */ + sum = __SMLAD(*__SIMD32(px)++, *__SIMD32(py)++, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = __SMLAD(*px++, *py++, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + +#else + + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *pOut = pDst; /* output pointer */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + q15_t *pSrc1; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* temporary variables for holding input and coefficient values */ + uint32_t j, k = 0u, count, blkCnt, outBlockSize, blockSize1, blockSize2, blockSize3; /* loop counter */ + int32_t inc = 1; /* Destination address modifier */ + q15_t a, b; + + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcA); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcB); + + /* Number of output samples is calculated */ + outBlockSize = (2u * srcALen) - 1u; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1u)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcB); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcA); + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2u); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + /* The function is internally + * divided into three parts according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first part of the + * algorithm, the multiplications increase by one for every iteration. + * In the second part of the algorithm, srcBLen number of multiplications are done. + * In the third part of the algorithm, the multiplications decrease by one + * for every iteration.*/ + /* The algorithm is implemented in three stages. + * The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[srcBlen - 1] + * sum = x[0] * y[srcBlen - 2] + x[1] * y[srcBlen - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen - 1] * y[srcBLen - 1] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + (srcBLen - 1u); + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first loop starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 4] , x[1] * y[srcBLen - 3] */ + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* x[0] * y[srcBLen - 1] */ + sum += ((q31_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pSrc1 - count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen-1] * y[srcBLen-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[srcBLen] * y[srcBLen-1] + * .... + * sum = x[srcALen-srcBLen-2] * y[0] + x[srcALen-srcBLen-1] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4, to loop unroll the srcBLen loop */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + a = *px; + b = *(px + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + x0 = __PKHBT(a, b, 16); + a = *(px + 2); + x1 = __PKHBT(b, a, 16); + +#else + + x0 = __PKHBT(b, a, 16); + a = *(px + 2); + x1 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + px += 2u; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the first two inputB samples using SIMD: + * y[0] and y[1] */ + a = *py; + b = *(py + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc0 += x[0] * y[0] + x[1] * y[1] */ + acc0 = __SMLAD(x0, c0, acc0); + + /* acc1 += x[1] * y[0] + x[2] * y[1] */ + acc1 = __SMLAD(x1, c0, acc1); + + /* Read x[2], x[3], x[4] */ + a = *px; + b = *(px + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + x2 = __PKHBT(a, b, 16); + a = *(px + 2); + x3 = __PKHBT(b, a, 16); + +#else + + x2 = __PKHBT(b, a, 16); + a = *(px + 2); + x3 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc2 += x[2] * y[0] + x[3] * y[1] */ + acc2 = __SMLAD(x2, c0, acc2); + + /* acc3 += x[3] * y[0] + x[4] * y[1] */ + acc3 = __SMLAD(x3, c0, acc3); + + /* Read y[2] and y[3] */ + a = *(py + 2); + b = *(py + 3); + + py += 4u; + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc0 += x[2] * y[2] + x[3] * y[3] */ + acc0 = __SMLAD(x2, c0, acc0); + + /* acc1 += x[3] * y[2] + x[4] * y[3] */ + acc1 = __SMLAD(x3, c0, acc1); + + /* Read x[4], x[5], x[6] */ + a = *(px + 2); + b = *(px + 3); + +#ifndef ARM_MATH_BIG_ENDIAN + + x0 = __PKHBT(a, b, 16); + a = *(px + 4); + x1 = __PKHBT(b, a, 16); + +#else + + x0 = __PKHBT(b, a, 16); + a = *(px + 4); + x1 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + px += 4u; + + /* acc2 += x[4] * y[2] + x[5] * y[3] */ + acc2 = __SMLAD(x0, c0, acc2); + + /* acc3 += x[5] * y[2] + x[6] * y[3] */ + acc3 = __SMLAD(x1, c0, acc3); + + } while(--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + if(k == 1u) + { + /* Read y[4] */ + c0 = *py; +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; + +#else + + c0 = c0 & 0x0000FFFF; + +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + a = *px; + b = *(px + 1); + + px++;; + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + +#else + + x3 = __PKHBT(b, a, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + px++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLADX(x1, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + if(k == 2u) + { + /* Read y[4], y[5] */ + a = *py; + b = *(py + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7], x[8], x[9] */ + a = *px; + b = *(px + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + a = *(px + 2); + x2 = __PKHBT(b, a, 16); + +#else + + x3 = __PKHBT(b, a, 16); + a = *(px + 2); + x2 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + px += 2u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLAD(x3, c0, acc2); + acc3 = __SMLAD(x2, c0, acc3); + } + + if(k == 3u) + { + /* Read y[4], y[5] */ + a = *py; + b = *(py + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + c0 = __PKHBT(a, b, 16); + +#else + + c0 = __PKHBT(b, a, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + py += 2u; + + /* Read x[7], x[8], x[9] */ + a = *px; + b = *(px + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + a = *(px + 2); + x2 = __PKHBT(b, a, 16); + +#else + + x3 = __PKHBT(b, a, 16); + a = *(px + 2); + x2 = __PKHBT(a, b, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLAD(x3, c0, acc2); + acc3 = __SMLAD(x2, c0, acc3); + + c0 = (*py); + /* Read y[6] */ +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; +#else + + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + b = *(px + 3); + +#ifndef ARM_MATH_BIG_ENDIAN + + x3 = __PKHBT(a, b, 16); + +#else + + x3 = __PKHBT(b, a, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + px += 3u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x1, c0, acc0); + acc1 = __SMLAD(x2, c0, acc1); + acc2 = __SMLADX(x2, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (acc0 >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + *pOut = (q15_t) (acc1 >> 15); + pOut += inc; + + *pOut = (q15_t) (acc2 >> 15); + pOut += inc; + + *pOut = (q15_t) (acc3 >> 15); + pOut += inc; + + /* Increment the pointer pIn1 index, count by 1 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over srcBLen */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[0] + x[srcALen-srcBLen+2] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * sum += x[srcALen-srcBLen+2] * y[0] + x[srcALen-srcBLen+3] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * .... + * sum += x[srcALen-2] * y[0] + x[srcALen-1] * y[1] + * sum += x[srcALen-1] * y[0] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + sum += ((q31_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + +} + +/** + * @} end of Corr group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,612 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_correlate_fast_q31.c +* +* Description: Fast Q31 Correlation. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Corr + * @{ + */ + +/** + * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * This function is optimized for speed at the expense of fixed-point precision and overflow protection. + * The result of each 1.31 x 1.31 multiplication is truncated to 2.30 format. + * These intermediate results are accumulated in a 32-bit register in 2.30 format. + * Finally, the accumulator is saturated and converted to a 1.31 result. + * + * \par + * The fast version has the same overflow behavior as the standard version but provides less precision since it discards the low 32 bits of each multiplication result. + * In order to avoid overflows completely the input signals must be scaled down. + * The input signals should be scaled down to avoid intermediate overflows. + * Scale down one of the inputs by 1/min(srcALen, srcBLen)to avoid overflows since a + * maximum of min(srcALen, srcBLen) number of additions is carried internally. + * + * \par + * See arm_correlate_q31() for a slower implementation of this function which uses 64-bit accumulation to provide higher precision. + */ + +void arm_correlate_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst) +{ + q31_t *pIn1; /* inputA pointer */ + q31_t *pIn2; /* inputB pointer */ + q31_t *pOut = pDst; /* output pointer */ + q31_t *px; /* Intermediate inputA pointer */ + q31_t *py; /* Intermediate inputB pointer */ + q31_t *pSrc1; /* Intermediate pointers */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + q31_t x0, x1, x2, x3, c0; /* temporary variables for holding input and coefficient values */ + uint32_t j, k = 0u, count, blkCnt, outBlockSize, blockSize1, blockSize2, blockSize3; /* loop counter */ + int32_t inc = 1; /* Destination address modifier */ + + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcA); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcB); + + /* Number of output samples is calculated */ + outBlockSize = (2u * srcALen) - 1u; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1u)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcB); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcA); + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2u); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + /* The function is internally + * divided into three parts according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first part of the + * algorithm, the multiplications increase by one for every iteration. + * In the second part of the algorithm, srcBLen number of multiplications are done. + * In the third part of the algorithm, the multiplications decrease by one + * for every iteration.*/ + /* The algorithm is implemented in three stages. + * The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[srcBlen - 1] + * sum = x[0] * y[srcBlen - 2] + x[1] * y[srcBlen - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen - 1] * y[srcBLen - 1] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + (srcBLen - 1u); + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 4] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + /* x[1] * y[srcBLen - 3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + /* x[2] * y[srcBLen - 2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + /* x[3] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* x[0] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum << 1; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pSrc1 - count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen-1] * y[srcBLen-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[srcBLen] * y[srcBLen-1] + * .... + * sum = x[srcALen-srcBLen-2] * y[0] + x[srcALen-srcBLen-1] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *(px++); + x1 = *(px++); + x2 = *(px++); + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[0] sample */ + c0 = *(py++); + + /* Read x[3] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[0] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc1 += x[1] * y[0] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc2 += x[2] * y[0] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc3 += x[3] * y[0] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Read y[1] sample */ + c0 = *(py++); + + /* Read x[4] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[1] * y[1] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc1 += x[2] * y[1] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc2 += x[3] * y[1] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc3 += x[4] * y[1] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Read y[2] sample */ + c0 = *(py++); + + /* Read x[5] sample */ + x1 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[2] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc1 += x[3] * y[2] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc2 += x[4] * y[2] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc3 += x[5] * y[2] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* Read y[3] sample */ + c0 = *(py++); + + /* Read x[6] sample */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[3] * y[3] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc1 += x[4] * y[3] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc2 += x[5] * y[3] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc3 += x[6] * y[3] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x2 * c0)) >> 32); + + + } while(--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Read y[4] sample */ + c0 = *(py++); + + /* Read x[7] sample */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[4] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc1 += x[5] * y[4] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc2 += x[6] * y[4] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc3 += x[7] * y[4] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q31_t) (acc0 << 1); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + *pOut = (q31_t) (acc1 << 1); + pOut += inc; + + *pOut = (q31_t) (acc2 << 1); + pOut += inc; + + *pOut = (q31_t) (acc3 << 1); + pOut += inc; + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum << 1; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over srcBLen */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum << 1; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[0] + x[srcALen-srcBLen+2] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * sum += x[srcALen-srcBLen+2] * y[0] + x[srcALen-srcBLen+3] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * .... + * sum += x[srcALen-2] * y[0] + x[srcALen-1] * y[1] + * sum += x[srcALen-1] * y[0] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = ((pIn1 + srcALen) - srcBLen) + 1u; + px = pSrc1; + + /* Working pointer of inputB */ + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen - srcBLen + 4] * y[3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + /* sum += x[srcALen - srcBLen + 3] * y[2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + /* sum += x[srcALen - srcBLen + 2] * y[1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + /* sum += x[srcALen - srcBLen + 1] * y[0] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py++))) >> 32); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum << 1; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + +} + +/** + * @} end of Corr group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_opt_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_opt_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,513 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_correlate_opt_q15.c +* +* Description: Correlation of Q15 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Corr + * @{ + */ + +/** + * @brief Correlation of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] *pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @return none. + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, scratch buffers should be aligned by 32-bit + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both inputs are in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * This approach provides 33 guard bits and there is no risk of overflow. + * The 34.30 result is then truncated to 34.15 format by discarding the low 15 bits and then saturated to 1.15 format. + * + * \par + * Refer to arm_correlate_fast_q15() for a faster but less precise version of this function for Cortex-M3 and Cortex-M4. + * + * + */ + + +void arm_correlate_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch) +{ + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q63_t acc0, acc1, acc2, acc3; /* Accumulators */ + q15_t *py; /* Intermediate inputB pointer */ + q31_t x1, x2, x3; /* temporary variables for holding input1 and input2 values */ + uint32_t j, blkCnt, outBlockSize; /* loop counter */ + int32_t inc = 1; /* output pointer increment */ + uint32_t tapCnt; + q31_t y1, y2; + q15_t *pScr; /* Intermediate pointers */ + q15_t *pOut = pDst; /* output pointer */ +#ifdef UNALIGNED_SUPPORT_DISABLE + + q15_t a, b; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcA); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcB); + + /* Number of output samples is calculated */ + outBlockSize = (2u * srcALen) - 1u; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1u)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcB); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcA); + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2u); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + pScr = pScratch; + + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr += (srcBLen - 1u); + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr, srcALen); + + /* Update pointers */ + //pIn1 += srcALen; + pScr += srcALen; + +#else + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + j = srcALen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(j > 0u) + { + /* copy second buffer in reversal manner */ + *pScr++ = *pIn1++; + *pScr++ = *pIn1++; + *pScr++ = *pIn1++; + *pScr++ = *pIn1++; + + /* Decrement the loop counter */ + j--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + j = srcALen % 0x4u; + + while(j > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr++ = *pIn1++; + + /* Decrement the loop counter */ + j--; + } + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Fill (srcBLen - 1u) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr, (srcBLen - 1u)); + + /* Update pointer */ + pScr += (srcBLen - 1u); + +#else + +/* Apply loop unrolling and do 4 Copies simultaneously. */ + j = (srcBLen - 1u) >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(j > 0u) + { + /* copy second buffer in reversal manner */ + *pScr++ = 0; + *pScr++ = 0; + *pScr++ = 0; + *pScr++ = 0; + + /* Decrement the loop counter */ + j--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + j = (srcBLen - 1u) % 0x4u; + + while(j > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr++ = 0; + + /* Decrement the loop counter */ + j--; + } + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Temporary pointer for scratch2 */ + py = pIn2; + + + /* Actual correlation process starts here */ + blkCnt = (srcALen + srcBLen - 1u) >> 2; + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr = pScratch; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read four samples from scratch1 buffer */ + x1 = *__SIMD32(pScr)++; + + /* Read next four samples from scratch1 buffer */ + x2 = *__SIMD32(pScr)++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pIn2); + y2 = _SIMD32_OFFSET(pIn2 + 2u); + + acc0 = __SMLALD(x1, y1, acc0); + + acc2 = __SMLALD(x2, y1, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc1 = __SMLALDX(x3, y1, acc1); + + x1 = _SIMD32_OFFSET(pScr); + + acc0 = __SMLALD(x2, y2, acc0); + + acc2 = __SMLALD(x1, y2, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLALDX(x3, y1, acc3); + + acc1 = __SMLALDX(x3, y2, acc1); + + x2 = _SIMD32_OFFSET(pScr + 2u); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLALDX(x3, y2, acc3); + +#else + + /* Read four samples from smaller buffer */ + a = *pIn2; + b = *(pIn2 + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + y1 = __PKHBT(a, b, 16); +#else + y1 = __PKHBT(b, a, 16); +#endif + + a = *(pIn2 + 2); + b = *(pIn2 + 3); +#ifndef ARM_MATH_BIG_ENDIAN + y2 = __PKHBT(a, b, 16); +#else + y2 = __PKHBT(b, a, 16); +#endif + + acc0 = __SMLALD(x1, y1, acc0); + + acc2 = __SMLALD(x2, y1, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc1 = __SMLALDX(x3, y1, acc1); + + a = *pScr; + b = *(pScr + 1); + +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(a, b, 16); +#else + x1 = __PKHBT(b, a, 16); +#endif + + acc0 = __SMLALD(x2, y2, acc0); + + acc2 = __SMLALD(x1, y2, acc2); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLALDX(x3, y1, acc3); + + acc1 = __SMLALDX(x3, y2, acc1); + + a = *(pScr + 2); + b = *(pScr + 3); + +#ifndef ARM_MATH_BIG_ENDIAN + x2 = __PKHBT(a, b, 16); +#else + x2 = __PKHBT(b, a, 16); +#endif + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLALDX(x3, y2, acc3); + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + pIn2 += 4u; + + pScr += 4u; + + + /* Decrement the loop counter */ + tapCnt--; + } + + + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr -= 4u; + + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr++ * *pIn2); + acc1 += (*pScr++ * *pIn2); + acc2 += (*pScr++ * *pIn2); + acc3 += (*pScr++ * *pIn2++); + + pScr -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + + /* Store the results in the accumulators in the destination buffer. */ + *pOut = (__SSAT(acc0 >> 15u, 16)); + pOut += inc; + *pOut = (__SSAT(acc1 >> 15u, 16)); + pOut += inc; + *pOut = (__SSAT(acc2 >> 15u, 16)); + pOut += inc; + *pOut = (__SSAT(acc3 >> 15u, 16)); + pOut += inc; + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch += 4u; + + } + + + blkCnt = (srcALen + srcBLen - 1u) & 0x3; + + /* Calculate correlation for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr = pScratch; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + + acc0 += (*pScr++ * *pIn2++); + acc0 += (*pScr++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr++ * *pIn2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (__SSAT((acc0 >> 15), 16)); + + pOut += inc; + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch += 1u; + + } + + +} + +/** + * @} end of Corr group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_opt_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_opt_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,464 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_correlate_opt_q7.c +* +* Description: Correlation of Q7 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Corr + * @{ + */ + +/** + * @brief Correlation of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] *pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + * @return none. + * + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, scratch1 and scratch2 buffers should be aligned by 32-bit + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 32-bit internal accumulator. + * Both the inputs are represented in 1.7 format and multiplications yield a 2.14 result. + * The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + * This approach provides 17 guard bits and there is no risk of overflow as long as max(srcALen, srcBLen)<131072. + * The 18.14 result is then truncated to 18.7 format by discarding the low 7 bits and saturated to 1.7 format. + * + * + */ + + + +void arm_correlate_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2) +{ + q7_t *pOut = pDst; /* output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch */ + q7_t *pIn1; /* inputA pointer */ + q7_t *pIn2; /* inputB pointer */ + q15_t *py; /* Intermediate inputB pointer */ + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + uint32_t j, k = 0u, blkCnt; /* loop counter */ + int32_t inc = 1; /* output pointer increment */ + uint32_t outBlockSize; /* loop counter */ + q15_t x4; /* Temporary input variable */ + uint32_t tapCnt; /* loop counter */ + q31_t x1, x2, x3, y1; /* Temporary input variables */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcA); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcB); + + /* Number of output samples is calculated */ + outBlockSize = (2u * srcALen) - 1u; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1u)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcB); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcA); + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2u); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + + /* Copy (srcBLen) samples in scratch buffer */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) * pIn2++; + *pScr2++ = x4; + x4 = (q15_t) * pIn2++; + *pScr2++ = x4; + x4 = (q15_t) * pIn2++; + *pScr2++ = x4; + x4 = (q15_t) * pIn2++; + *pScr2++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) * pIn2++; + *pScr2++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* Fill (srcBLen - 1u) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1u); + + /* Copy (srcALen) samples in scratch buffer */ + k = srcALen >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcALen % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Fill (srcBLen - 1u) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1u)); + + /* Update pointer */ + pScr1 += (srcBLen - 1u); + +#else + +/* Apply loop unrolling and do 4 Copies simultaneously. */ + k = (srcBLen - 1u) >> 2u; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* copy second buffer in reversal manner */ + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = (srcBLen - 1u) % 0x4u; + + while(k > 0u) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr1++ = 0; + + /* Decrement the loop counter */ + k--; + } + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Temporary pointer for second sequence */ + py = pScratch2; + + /* Initialization of pScr2 pointer */ + pScr2 = pScratch2; + + /* Actual correlation process starts here */ + blkCnt = (srcALen + srcBLen - 1u) >> 2; + + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* Read next two samples from scratch1 buffer */ + x2 = *__SIMD32(pScr1)++; + + tapCnt = (srcBLen) >> 2u; + + while(tapCnt > 0u) + { + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pScr2); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = *__SIMD32(pScr1)++; + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + /* Read four samples from smaller buffer */ + y1 = _SIMD32_OFFSET(pScr2 + 2u); + + acc0 = __SMLAD(x2, y1, acc0); + + acc2 = __SMLAD(x1, y1, acc2); + + acc1 = __SMLADX(x3, y1, acc1); + + x2 = *__SIMD32(pScr1)++; + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + pScr2 += 4u; + + + /* Decrement the loop counter */ + tapCnt--; + } + + + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4u; + + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3u; + + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2); + acc1 += (*pScr1++ * *pScr2); + acc2 += (*pScr1++ * *pScr2); + acc3 += (*pScr1++ * *pScr2++); + + pScr1 -= 3u; + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(acc0 >> 7u, 8)); + pOut += inc; + *pOut = (q7_t) (__SSAT(acc1 >> 7u, 8)); + pOut += inc; + *pOut = (q7_t) (__SSAT(acc2 >> 7u, 8)); + pOut += inc; + *pOut = (q7_t) (__SSAT(acc3 >> 7u, 8)); + pOut += inc; + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 4u; + + } + + + blkCnt = (srcALen + srcBLen - 1u) & 0x3; + + /* Calculate correlation for remaining samples of Bigger length sequence */ + while(blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1u; + + while(tapCnt > 0u) + { + acc0 += (*pScr1++ * *pScr2++); + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1u; + + /* apply same above for remaining samples of smaller length sequence */ + while(tapCnt > 0u) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement the loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(acc0 >> 7u, 8)); + + pOut += inc; + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 1u; + + } + +} + +/** + * @} end of Corr group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,719 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_correlate_q15.c +* +* Description: Correlation of Q15 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Corr + * @{ + */ + +/** + * @brief Correlation of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both inputs are in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * This approach provides 33 guard bits and there is no risk of overflow. + * The 34.30 result is then truncated to 34.15 format by discarding the low 15 bits and then saturated to 1.15 format. + * + * \par + * Refer to arm_correlate_fast_q15() for a faster but less precise version of this function for Cortex-M3 and Cortex-M4. + * + * \par + * Refer the function arm_correlate_opt_q15() for a faster implementation of this function using scratch buffers. + * + */ + +void arm_correlate_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst) +{ + +#if (defined(ARM_MATH_CM4) || defined(ARM_MATH_CM3)) && !defined(UNALIGNED_SUPPORT_DISABLE) + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q15_t *pIn1; /* inputA pointer */ + q15_t *pIn2; /* inputB pointer */ + q15_t *pOut = pDst; /* output pointer */ + q63_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + q15_t *pSrc1; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* temporary variables for holding input and coefficient values */ + uint32_t j, k = 0u, count, blkCnt, outBlockSize, blockSize1, blockSize2, blockSize3; /* loop counter */ + int32_t inc = 1; /* Destination address modifier */ + + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcA); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcB); + + /* Number of output samples is calculated */ + outBlockSize = (2u * srcALen) - 1u; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1u)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcB); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcA); + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2u); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + /* The function is internally + * divided into three parts according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first part of the + * algorithm, the multiplications increase by one for every iteration. + * In the second part of the algorithm, srcBLen number of multiplications are done. + * In the third part of the algorithm, the multiplications decrease by one + * for every iteration.*/ + /* The algorithm is implemented in three stages. + * The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[srcBlen - 1] + * sum = x[0] * y[srcBlen - 2] + x[1] * y[srcBlen - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen - 1] * y[srcBLen - 1] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + (srcBLen - 1u); + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first loop starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 4] , x[1] * y[srcBLen - 3] */ + sum = __SMLALD(*__SIMD32(px)++, *__SIMD32(py)++, sum); + /* x[3] * y[srcBLen - 1] , x[2] * y[srcBLen - 2] */ + sum = __SMLALD(*__SIMD32(px)++, *__SIMD32(py)++, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* x[0] * y[srcBLen - 1] */ + sum = __SMLALD(*px++, *py++, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (__SSAT((sum >> 15), 16)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pSrc1 - count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen-1] * y[srcBLen-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[srcBLen] * y[srcBLen-1] + * .... + * sum = x[srcALen-srcBLen-2] * y[0] + x[srcALen-srcBLen-1] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4, to loop unroll the srcBLen loop */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1] samples */ + x0 = *__SIMD32(px); + /* read x[1], x[2] samples */ + x1 = _SIMD32_OFFSET(px + 1); + px += 2u; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the first two inputB samples using SIMD: + * y[0] and y[1] */ + c0 = *__SIMD32(py)++; + + /* acc0 += x[0] * y[0] + x[1] * y[1] */ + acc0 = __SMLALD(x0, c0, acc0); + + /* acc1 += x[1] * y[0] + x[2] * y[1] */ + acc1 = __SMLALD(x1, c0, acc1); + + /* Read x[2], x[3] */ + x2 = *__SIMD32(px); + + /* Read x[3], x[4] */ + x3 = _SIMD32_OFFSET(px + 1); + + /* acc2 += x[2] * y[0] + x[3] * y[1] */ + acc2 = __SMLALD(x2, c0, acc2); + + /* acc3 += x[3] * y[0] + x[4] * y[1] */ + acc3 = __SMLALD(x3, c0, acc3); + + /* Read y[2] and y[3] */ + c0 = *__SIMD32(py)++; + + /* acc0 += x[2] * y[2] + x[3] * y[3] */ + acc0 = __SMLALD(x2, c0, acc0); + + /* acc1 += x[3] * y[2] + x[4] * y[3] */ + acc1 = __SMLALD(x3, c0, acc1); + + /* Read x[4], x[5] */ + x0 = _SIMD32_OFFSET(px + 2); + + /* Read x[5], x[6] */ + x1 = _SIMD32_OFFSET(px + 3); + + px += 4u; + + /* acc2 += x[4] * y[2] + x[5] * y[3] */ + acc2 = __SMLALD(x0, c0, acc2); + + /* acc3 += x[5] * y[2] + x[6] * y[3] */ + acc3 = __SMLALD(x1, c0, acc3); + + } while(--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + if(k == 1u) + { + /* Read y[4] */ + c0 = *py; +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; + +#else + + c0 = c0 & 0x0000FFFF; + +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + /* Read x[7] */ + x3 = *__SIMD32(px); + px++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALD(x0, c0, acc0); + acc1 = __SMLALD(x1, c0, acc1); + acc2 = __SMLALDX(x1, c0, acc2); + acc3 = __SMLALDX(x3, c0, acc3); + } + + if(k == 2u) + { + /* Read y[4], y[5] */ + c0 = *__SIMD32(py); + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px + 1); + px += 2u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALD(x0, c0, acc0); + acc1 = __SMLALD(x1, c0, acc1); + acc2 = __SMLALD(x3, c0, acc2); + acc3 = __SMLALD(x2, c0, acc3); + } + + if(k == 3u) + { + /* Read y[4], y[5] */ + c0 = *__SIMD32(py)++; + + /* Read x[7], x[8] */ + x3 = *__SIMD32(px); + + /* Read x[9] */ + x2 = _SIMD32_OFFSET(px + 1); + + /* Perform the multiply-accumulates */ + acc0 = __SMLALD(x0, c0, acc0); + acc1 = __SMLALD(x1, c0, acc1); + acc2 = __SMLALD(x3, c0, acc2); + acc3 = __SMLALD(x2, c0, acc3); + + c0 = (*py); + + /* Read y[6] */ +#ifdef ARM_MATH_BIG_ENDIAN + + c0 = c0 << 16u; +#else + + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + /* Read x[10] */ + x3 = _SIMD32_OFFSET(px + 2); + px += 3u; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALDX(x1, c0, acc0); + acc1 = __SMLALD(x2, c0, acc1); + acc2 = __SMLALDX(x2, c0, acc2); + acc3 = __SMLALDX(x3, c0, acc3); + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (__SSAT(acc0 >> 15, 16)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + *pOut = (q15_t) (__SSAT(acc1 >> 15, 16)); + pOut += inc; + + *pOut = (q15_t) (__SSAT(acc2 >> 15, 16)); + pOut += inc; + + *pOut = (q15_t) (__SSAT(acc3 >> 15, 16)); + pOut += inc; + + /* Increment the count by 4 as 4 output values are computed */ + count += 4u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q63_t) * px++ * *py++); + sum += ((q63_t) * px++ * *py++); + sum += ((q63_t) * px++ * *py++); + sum += ((q63_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q63_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (__SSAT(sum >> 15, 16)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment count by 1, as one output value is computed */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over srcBLen */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += ((q63_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (__SSAT(sum >> 15, 16)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[0] + x[srcALen-srcBLen+2] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * sum += x[srcALen-srcBLen+2] * y[0] + x[srcALen-srcBLen+3] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * .... + * sum += x[srcALen-2] * y[0] + x[srcALen-1] * y[1] + * sum += x[srcALen-1] * y[0] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u); + px = pSrc1; + + /* Working pointer of inputB */ + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen - srcBLen + 4] * y[3] , sum += x[srcALen - srcBLen + 3] * y[2] */ + sum = __SMLALD(*__SIMD32(px)++, *__SIMD32(py)++, sum); + /* sum += x[srcALen - srcBLen + 2] * y[1] , sum += x[srcALen - srcBLen + 1] * y[0] */ + sum = __SMLALD(*__SIMD32(px)++, *__SIMD32(py)++, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum = __SMLALD(*px++, *py++, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (__SSAT((sum >> 15), 16)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + +#else + +/* Run the below code for Cortex-M0 */ + + q15_t *pIn1 = pSrcA; /* inputA pointer */ + q15_t *pIn2 = pSrcB + (srcBLen - 1u); /* inputB pointer */ + q63_t sum; /* Accumulators */ + uint32_t i = 0u, j; /* loop counters */ + uint32_t inv = 0u; /* Reverse order flag */ + uint32_t tot = 0u; /* Length */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and a varaible, inv is set to 1 */ + /* If lengths are not equal then zero pad has to be done to make the two + * inputs of same length. But to improve the performance, we include zeroes + * in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, (srcALen - srcBLen) zeroes has to included in the + * starting of the output buffer */ + /* If srcALen < srcBLen, (srcALen - srcBLen) zeroes has to included in the + * ending of the output buffer */ + /* Once the zero padding is done the remaining of the output is calcualted + * using convolution but with the shorter signal time shifted. */ + + /* Calculate the length of the remaining sequence */ + tot = ((srcALen + srcBLen) - 2u); + + if(srcALen > srcBLen) + { + /* Calculating the number of zeros to be padded to the output */ + j = srcALen - srcBLen; + + /* Initialise the pointer after zero padding */ + pDst += j; + } + + else if(srcALen < srcBLen) + { + /* Initialization to inputB pointer */ + pIn1 = pSrcB; + + /* Initialization to the end of inputA pointer */ + pIn2 = pSrcA + (srcALen - 1u); + + /* Initialisation of the pointer after zero padding */ + pDst = pDst + tot; + + /* Swapping the lengths */ + j = srcALen; + srcALen = srcBLen; + srcBLen = j; + + /* Setting the reverse flag */ + inv = 1; + + } + + /* Loop to calculate convolution for output length number of times */ + for (i = 0u; i <= tot; i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0u; j <= i; j++) + { + /* Check the array limitations */ + if((((i - j) < srcBLen) && (j < srcALen))) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q31_t) pIn1[j] * pIn2[-((int32_t) i - j)]); + } + } + /* Store the output in the destination buffer */ + if(inv == 1) + *pDst-- = (q15_t) __SSAT((sum >> 15u), 16u); + else + *pDst++ = (q15_t) __SSAT((sum >> 15u), 16u); + } + +#endif /*#if (defined(ARM_MATH_CM4) || defined(ARM_MATH_CM3)) && !defined(UNALIGNED_SUPPORT_DISABLE) */ + +} + +/** + * @} end of Corr group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,665 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_correlate_q31.c +* +* Description: Correlation of Q31 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Corr + * @{ + */ + +/** + * @brief Correlation of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * There is no saturation on intermediate additions. + * Thus, if the accumulator overflows it wraps around and distorts the result. + * The input signals should be scaled down to avoid intermediate overflows. + * Scale down one of the inputs by 1/min(srcALen, srcBLen)to avoid overflows since a + * maximum of min(srcALen, srcBLen) number of additions is carried internally. + * The 2.62 accumulator is right shifted by 31 bits and saturated to 1.31 format to yield the final result. + * + * \par + * See arm_correlate_fast_q31() for a faster but less precise implementation of this function for Cortex-M3 and Cortex-M4. + */ + +void arm_correlate_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst) +{ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t *pIn1; /* inputA pointer */ + q31_t *pIn2; /* inputB pointer */ + q31_t *pOut = pDst; /* output pointer */ + q31_t *px; /* Intermediate inputA pointer */ + q31_t *py; /* Intermediate inputB pointer */ + q31_t *pSrc1; /* Intermediate pointers */ + q63_t sum, acc0, acc1, acc2; /* Accumulators */ + q31_t x0, x1, x2, c0; /* temporary variables for holding input and coefficient values */ + uint32_t j, k = 0u, count, blkCnt, outBlockSize, blockSize1, blockSize2, blockSize3; /* loop counter */ + int32_t inc = 1; /* Destination address modifier */ + + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcA); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcB); + + /* Number of output samples is calculated */ + outBlockSize = (2u * srcALen) - 1u; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1u)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcB); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcA); + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2u); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + /* The function is internally + * divided into three parts according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first part of the + * algorithm, the multiplications increase by one for every iteration. + * In the second part of the algorithm, srcBLen number of multiplications are done. + * In the third part of the algorithm, the multiplications decrease by one + * for every iteration.*/ + /* The algorithm is implemented in three stages. + * The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[srcBlen - 1] + * sum = x[0] * y[srcBlen - 2] + x[1] * y[srcBlen - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen - 1] * y[srcBLen - 1] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + (srcBLen - 1u); + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] * y[srcBLen - 4] */ + sum += (q63_t) * px++ * (*py++); + /* x[1] * y[srcBLen - 3] */ + sum += (q63_t) * px++ * (*py++); + /* x[2] * y[srcBLen - 2] */ + sum += (q63_t) * px++ * (*py++); + /* x[3] * y[srcBLen - 1] */ + sum += (q63_t) * px++ * (*py++); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* x[0] * y[srcBLen - 1] */ + sum += (q63_t) * px++ * (*py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q31_t) (sum >> 31); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pSrc1 - count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen-1] * y[srcBLen-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[srcBLen] * y[srcBLen-1] + * .... + * sum = x[srcALen-srcBLen-2] * y[0] + x[srcALen-srcBLen-1] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll by 3 */ + blkCnt = blockSize2 / 3; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + + /* read x[0], x[1] samples */ + x0 = *(px++); + x1 = *(px++); + + /* Apply loop unrolling and compute 3 MACs simultaneously. */ + k = srcBLen / 3; + + /* First part of the processing with loop unrolling. Compute 3 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 2 samples. */ + do + { + /* Read y[0] sample */ + c0 = *(py); + + /* Read x[2] sample */ + x2 = *(px); + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[0] */ + acc0 += ((q63_t) x0 * c0); + /* acc1 += x[1] * y[0] */ + acc1 += ((q63_t) x1 * c0); + /* acc2 += x[2] * y[0] */ + acc2 += ((q63_t) x2 * c0); + + /* Read y[1] sample */ + c0 = *(py + 1u); + + /* Read x[3] sample */ + x0 = *(px + 1u); + + /* Perform the multiply-accumulates */ + /* acc0 += x[1] * y[1] */ + acc0 += ((q63_t) x1 * c0); + /* acc1 += x[2] * y[1] */ + acc1 += ((q63_t) x2 * c0); + /* acc2 += x[3] * y[1] */ + acc2 += ((q63_t) x0 * c0); + + /* Read y[2] sample */ + c0 = *(py + 2u); + + /* Read x[4] sample */ + x1 = *(px + 2u); + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[2] */ + acc0 += ((q63_t) x2 * c0); + /* acc1 += x[3] * y[2] */ + acc1 += ((q63_t) x0 * c0); + /* acc2 += x[4] * y[2] */ + acc2 += ((q63_t) x1 * c0); + + /* update scratch pointers */ + px += 3u; + py += 3u; + + } while(--k); + + /* If the srcBLen is not a multiple of 3, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen - (3 * (srcBLen / 3)); + + while(k > 0u) + { + /* Read y[4] sample */ + c0 = *(py++); + + /* Read x[7] sample */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[4] */ + acc0 += ((q63_t) x0 * c0); + /* acc1 += x[5] * y[4] */ + acc1 += ((q63_t) x1 * c0); + /* acc2 += x[6] * y[4] */ + acc2 += ((q63_t) x2 * c0); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q31_t) (acc0 >> 31); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + *pOut = (q31_t) (acc1 >> 31); + pOut += inc; + + *pOut = (q31_t) (acc2 >> 31); + pOut += inc; + + /* Increment the pointer pIn1 index, count by 3 */ + count += 3u; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 3, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 - 3 * (blockSize2 / 3); + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += (q63_t) * px++ * (*py++); + sum += (q63_t) * px++ * (*py++); + sum += (q63_t) * px++ * (*py++); + sum += (q63_t) * px++ * (*py++); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) * px++ * (*py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q31_t) (sum >> 31); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over srcBLen */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) * px++ * (*py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q31_t) (sum >> 31); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[0] + x[srcALen-srcBLen+2] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * sum += x[srcALen-srcBLen+2] * y[0] + x[srcALen-srcBLen+3] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * .... + * sum += x[srcALen-2] * y[0] + x[srcALen-1] * y[1] + * sum += x[srcALen-1] * y[0] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = pIn1 + (srcALen - (srcBLen - 1u)); + px = pSrc1; + + /* Working pointer of inputB */ + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen - srcBLen + 4] * y[3] */ + sum += (q63_t) * px++ * (*py++); + /* sum += x[srcALen - srcBLen + 3] * y[2] */ + sum += (q63_t) * px++ * (*py++); + /* sum += x[srcALen - srcBLen + 2] * y[1] */ + sum += (q63_t) * px++ * (*py++); + /* sum += x[srcALen - srcBLen + 1] * y[0] */ + sum += (q63_t) * px++ * (*py++); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += (q63_t) * px++ * (*py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q31_t) (sum >> 31); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + q31_t *pIn1 = pSrcA; /* inputA pointer */ + q31_t *pIn2 = pSrcB + (srcBLen - 1u); /* inputB pointer */ + q63_t sum; /* Accumulators */ + uint32_t i = 0u, j; /* loop counters */ + uint32_t inv = 0u; /* Reverse order flag */ + uint32_t tot = 0u; /* Length */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and a varaible, inv is set to 1 */ + /* If lengths are not equal then zero pad has to be done to make the two + * inputs of same length. But to improve the performance, we include zeroes + * in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, (srcALen - srcBLen) zeroes has to included in the + * starting of the output buffer */ + /* If srcALen < srcBLen, (srcALen - srcBLen) zeroes has to included in the + * ending of the output buffer */ + /* Once the zero padding is done the remaining of the output is calcualted + * using correlation but with the shorter signal time shifted. */ + + /* Calculate the length of the remaining sequence */ + tot = ((srcALen + srcBLen) - 2u); + + if(srcALen > srcBLen) + { + /* Calculating the number of zeros to be padded to the output */ + j = srcALen - srcBLen; + + /* Initialise the pointer after zero padding */ + pDst += j; + } + + else if(srcALen < srcBLen) + { + /* Initialization to inputB pointer */ + pIn1 = pSrcB; + + /* Initialization to the end of inputA pointer */ + pIn2 = pSrcA + (srcALen - 1u); + + /* Initialisation of the pointer after zero padding */ + pDst = pDst + tot; + + /* Swapping the lengths */ + j = srcALen; + srcALen = srcBLen; + srcBLen = j; + + /* Setting the reverse flag */ + inv = 1; + + } + + /* Loop to calculate correlation for output length number of times */ + for (i = 0u; i <= tot; i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to correlation equation */ + for (j = 0u; j <= i; j++) + { + /* Check the array limitations */ + if((((i - j) < srcBLen) && (j < srcALen))) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q63_t) pIn1[j] * pIn2[-((int32_t) i - j)]); + } + } + /* Store the output in the destination buffer */ + if(inv == 1) + *pDst-- = (q31_t) (sum >> 31u); + else + *pDst++ = (q31_t) (sum >> 31u); + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of Corr group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,790 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_correlate_q7.c +* +* Description: Correlation of Q7 sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup Corr + * @{ + */ + +/** + * @brief Correlation of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 32-bit internal accumulator. + * Both the inputs are represented in 1.7 format and multiplications yield a 2.14 result. + * The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + * This approach provides 17 guard bits and there is no risk of overflow as long as max(srcALen, srcBLen)<131072. + * The 18.14 result is then truncated to 18.7 format by discarding the low 7 bits and saturated to 1.7 format. + * + * \par + * Refer the function arm_correlate_opt_q7() for a faster implementation of this function. + * + */ + +void arm_correlate_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst) +{ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q7_t *pIn1; /* inputA pointer */ + q7_t *pIn2; /* inputB pointer */ + q7_t *pOut = pDst; /* output pointer */ + q7_t *px; /* Intermediate inputA pointer */ + q7_t *py; /* Intermediate inputB pointer */ + q7_t *pSrc1; /* Intermediate pointers */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + q31_t input1, input2; /* temporary variables */ + q15_t in1, in2; /* temporary variables */ + q7_t x0, x1, x2, x3, c0, c1; /* temporary variables for holding input and coefficient values */ + uint32_t j, k = 0u, count, blkCnt, outBlockSize, blockSize1, blockSize2, blockSize3; /* loop counter */ + int32_t inc = 1; + + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if(srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcA); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcB); + + /* Number of output samples is calculated */ + outBlockSize = (2u * srcALen) - 1u; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1u)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = (pSrcB); + + /* Initialization of inputB pointer */ + pIn2 = (pSrcA); + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2u); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + /* The function is internally + * divided into three parts according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first part of the + * algorithm, the multiplications increase by one for every iteration. + * In the second part of the algorithm, srcBLen number of multiplications are done. + * In the third part of the algorithm, the multiplications decrease by one + * for every iteration.*/ + /* The algorithm is implemented in three stages. + * The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1u; + blockSize2 = srcALen - (srcBLen - 1u); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[srcBlen - 1] + * sum = x[0] * y[srcBlen - 2] + x[1] * y[srcBlen - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen - 1] * y[srcBLen - 1] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1u; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + (srcBLen - 1u); + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while(blockSize1 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[0] , x[1] */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 4] , y[srcBLen - 3] */ + in1 = (q15_t) * py++; + in2 = (q15_t) * py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* x[0] * y[srcBLen - 4] */ + /* x[1] * y[srcBLen - 3] */ + sum = __SMLAD(input1, input2, sum); + + /* x[2] , x[3] */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 2] , y[srcBLen - 1] */ + in1 = (q15_t) * py++; + in2 = (q15_t) * py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* x[2] * y[srcBLen - 2] */ + /* x[3] * y[srcBLen - 1] */ + sum = __SMLAD(input1, input2, sum); + + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + /* x[0] * y[srcBLen - 1] */ + sum += (q31_t) ((q15_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(sum >> 7, 8)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pSrc1 - count; + px = pIn1; + + /* Increment the MAC count */ + count++; + + /* Decrement the loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen-1] * y[srcBLen-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[srcBLen] * y[srcBLen-1] + * .... + * sum = x[srcALen-srcBLen-2] * y[0] + x[srcALen-srcBLen-1] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0u; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if(srcBLen >= 4u) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2u; + + while(blkCnt > 0u) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[0] sample */ + c0 = *py++; + /* Read y[1] sample */ + c1 = *py++; + + /* Read x[3] sample */ + x3 = *px++; + + /* x[0] and x[1] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[0] and y[1] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc0 += x[0] * y[0] + x[1] * y[1] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[1] and x[2] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc1 += x[1] * y[0] + x[2] * y[1] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc2 += x[2] * y[0] + x[3] * y[1] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[4] sample */ + x0 = *(px++); + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc3 += x[3] * y[0] + x[4] * y[1] */ + acc3 = __SMLAD(input1, input2, acc3); + + /* Read y[2] sample */ + c0 = *py++; + /* Read y[3] sample */ + c1 = *py++; + + /* Read x[5] sample */ + x1 = *px++; + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[2] and y[3] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc0 += x[2] * y[2] + x[3] * y[3] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc1 += x[3] * y[2] + x[4] * y[3] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[4] and x[5] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc2 += x[4] * y[2] + x[5] * y[3] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[6] sample */ + x2 = *px++; + + /* x[5] and x[6] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc3 += x[5] * y[2] + x[6] * y[3] */ + acc3 = __SMLAD(input1, input2, acc3); + + } while(--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Read y[4] sample */ + c0 = *py++; + + /* Read x[7] sample */ + x3 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[4] */ + acc0 += ((q15_t) x0 * c0); + /* acc1 += x[5] * y[4] */ + acc1 += ((q15_t) x1 * c0); + /* acc2 += x[6] * y[4] */ + acc2 += ((q15_t) x2 * c0); + /* acc3 += x[7] * y[4] */ + acc3 += ((q15_t) x3 * c0); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(acc0 >> 7, 8)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + *pOut = (q7_t) (__SSAT(acc1 >> 7, 8)); + pOut += inc; + + *pOut = (q7_t) (__SSAT(acc2 >> 7, 8)); + pOut += inc; + + *pOut = (q7_t) (__SSAT(acc3 >> 7, 8)); + pOut += inc; + + count += 4u; + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4u; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) * py++; + in2 = (q15_t) * py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Perform the multiply-accumulates */ + sum = __SMLAD(input1, input2, sum); + + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) * py++; + in2 = (q15_t) * py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Perform the multiply-accumulates */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q15_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(sum >> 7, 8)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while(blkCnt > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over srcBLen */ + k = srcBLen; + + while(k > 0u) + { + /* Perform the multiply-accumulate */ + sum += ((q15_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(sum >> 7, 8)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + + /* Decrement the loop counter */ + blkCnt--; + } + } + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[0] + x[srcALen-srcBLen+2] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * sum += x[srcALen-srcBLen+2] * y[0] + x[srcALen-srcBLen+3] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * .... + * sum += x[srcALen-2] * y[0] + x[srcALen-1] * y[1] + * sum += x[srcALen-1] * y[0] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1u; + + /* Working pointer of inputA */ + pSrc1 = pIn1 + (srcALen - (srcBLen - 1u)); + px = pSrc1; + + /* Working pointer of inputB */ + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while(blockSize3 > 0u) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while(k > 0u) + { + /* x[srcALen - srcBLen + 1] , x[srcALen - srcBLen + 2] */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[0] , y[1] */ + in1 = (q15_t) * py++; + in2 = (q15_t) * py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* sum += x[srcALen - srcBLen + 1] * y[0] */ + /* sum += x[srcALen - srcBLen + 2] * y[1] */ + sum = __SMLAD(input1, input2, sum); + + /* x[srcALen - srcBLen + 3] , x[srcALen - srcBLen + 4] */ + in1 = (q15_t) * px++; + in2 = (q15_t) * px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[2] , y[3] */ + in1 = (q15_t) * py++; + in2 = (q15_t) * py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* sum += x[srcALen - srcBLen + 3] * y[2] */ + /* sum += x[srcALen - srcBLen + 4] * y[3] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement the loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4u; + + while(k > 0u) + { + /* Perform the multiply-accumulates */ + sum += ((q15_t) * px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(sum >> 7, 8)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + +#else + +/* Run the below code for Cortex-M0 */ + + q7_t *pIn1 = pSrcA; /* inputA pointer */ + q7_t *pIn2 = pSrcB + (srcBLen - 1u); /* inputB pointer */ + q31_t sum; /* Accumulator */ + uint32_t i = 0u, j; /* loop counters */ + uint32_t inv = 0u; /* Reverse order flag */ + uint32_t tot = 0u; /* Length */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and a varaible, inv is set to 1 */ + /* If lengths are not equal then zero pad has to be done to make the two + * inputs of same length. But to improve the performance, we include zeroes + * in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, (srcALen - srcBLen) zeroes has to included in the + * starting of the output buffer */ + /* If srcALen < srcBLen, (srcALen - srcBLen) zeroes has to included in the + * ending of the output buffer */ + /* Once the zero padding is done the remaining of the output is calcualted + * using convolution but with the shorter signal time shifted. */ + + /* Calculate the length of the remaining sequence */ + tot = ((srcALen + srcBLen) - 2u); + + if(srcALen > srcBLen) + { + /* Calculating the number of zeros to be padded to the output */ + j = srcALen - srcBLen; + + /* Initialise the pointer after zero padding */ + pDst += j; + } + + else if(srcALen < srcBLen) + { + /* Initialization to inputB pointer */ + pIn1 = pSrcB; + + /* Initialization to the end of inputA pointer */ + pIn2 = pSrcA + (srcALen - 1u); + + /* Initialisation of the pointer after zero padding */ + pDst = pDst + tot; + + /* Swapping the lengths */ + j = srcALen; + srcALen = srcBLen; + srcBLen = j; + + /* Setting the reverse flag */ + inv = 1; + + } + + /* Loop to calculate convolution for output length number of times */ + for (i = 0u; i <= tot; i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0u; j <= i; j++) + { + /* Check the array limitations */ + if((((i - j) < srcBLen) && (j < srcALen))) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q15_t) pIn1[j] * pIn2[-((int32_t) i - j)]); + } + } + /* Store the output in the destination buffer */ + if(inv == 1) + *pDst-- = (q7_t) __SSAT((sum >> 7u), 8u); + else + *pDst++ = (q7_t) __SSAT((sum >> 7u), 8u); + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of Corr group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,524 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_decimate_f32.c +* +* Description: FIR decimation for floating-point sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup FIR_decimate Finite Impulse Response (FIR) Decimator + * + * These functions combine an FIR filter together with a decimator. + * They are used in multirate systems for reducing the sample rate of a signal without introducing aliasing distortion. + * Conceptually, the functions are equivalent to the block diagram below: + * \image html FIRDecimator.gif "Components included in the FIR Decimator functions" + * When decimating by a factor of M, the signal should be prefiltered by a lowpass filter with a normalized + * cutoff frequency of 1/M in order to prevent aliasing distortion. + * The user of the function is responsible for providing the filter coefficients. + * + * The FIR decimator functions provided in the CMSIS DSP Library combine the FIR filter and the decimator in an efficient manner. + * Instead of calculating all of the FIR filter outputs and discarding M-1 out of every M, only the + * samples output by the decimator are computed. + * The functions operate on blocks of input and output data. + * pSrc points to an array of blockSize input values and + * pDst points to an array of blockSize/M output values. + * In order to have an integer number of output samples blockSize + * must always be a multiple of the decimation factor M. + * + * The library provides separate functions for Q15, Q31 and floating-point data types. + * + * \par Algorithm: + * The FIR portion of the algorithm uses the standard form filter: + *
    
+ *    y[n] = b[0] * x[n] + b[1] * x[n-1] + b[2] * x[n-2] + ...+ b[numTaps-1] * x[n-numTaps+1]    
+ * 
+ * where, b[n] are the filter coefficients. + * \par + * The pCoeffs points to a coefficient array of size numTaps. + * Coefficients are stored in time reversed order. + * \par + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * \par + * pState points to a state array of size numTaps + blockSize - 1. + * Samples in the state buffer are stored in the order: + * \par + *
    
+ *    {x[n-numTaps+1], x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2]....x[0], x[1], ..., x[blockSize-1]}    
+ * 
+ * The state variables are updated after each block of data is processed, the coefficients are untouched. + * + * \par Instance Structure + * The coefficients and state variables for a filter are stored together in an instance data structure. + * A separate instance structure must be defined for each filter. + * Coefficient arrays may be shared among several instances while state variable array should be allocated separately. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Sets the values of the internal structure fields. + * - Zeros out the values in the state buffer. + * - Checks to make sure that the size of the input is a multiple of the decimation factor. + * To do this manually without calling the init function, assign the follow subfields of the instance structure: + * numTaps, pCoeffs, M (decimation factor), pState. Also set all of the values in pState to zero. + * + * \par + * Use of the initialization function is optional. + * However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + * To place an instance structure into a const data section, the instance structure must be manually initialized. + * The code below statically initializes each of the 3 different data type filter instance structures + *
    
+ *arm_fir_decimate_instance_f32 S = {M, numTaps, pCoeffs, pState};    
+ *arm_fir_decimate_instance_q31 S = {M, numTaps, pCoeffs, pState};    
+ *arm_fir_decimate_instance_q15 S = {M, numTaps, pCoeffs, pState};    
+ * 
+ * where M is the decimation factor; numTaps is the number of filter coefficients in the filter; + * pCoeffs is the address of the coefficient buffer; + * pState is the address of the state buffer. + * Be sure to set the values in the state buffer to zeros when doing static initialization. + * + * \par Fixed-Point Behavior + * Care must be taken when using the fixed-point versions of the FIR decimate filter functions. + * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + +/** + * @addtogroup FIR_decimate + * @{ + */ + + /** + * @brief Processing function for the floating-point FIR decimator. + * @param[in] *S points to an instance of the floating-point FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + +void arm_fir_decimate_f32( + const arm_fir_decimate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + float32_t sum0; /* Accumulator */ + float32_t x0, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + +#ifndef ARM_MATH_CM0_FAMILY + + uint32_t blkCntN4; + float32_t *px0, *px1, *px2, *px3; + float32_t acc0, acc1, acc2, acc3; + float32_t x1, x2, x3; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize / 4; + blkCntN4 = outBlockSize - (4 * blkCnt); + + while(blkCnt > 0u) + { + /* Copy 4 * decimation factor number of new input samples into the state buffer */ + i = 4 * S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulators to zero */ + acc0 = 0.0f; + acc1 = 0.0f; + acc2 = 0.0f; + acc3 = 0.0f; + + /* Initialize state pointer for all the samples */ + px0 = pState; + px1 = pState + S->M; + px2 = pState + 2 * S->M; + px3 = pState + 3 * S->M; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + + while(tapCnt > 0u) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-1] sample for acc0 */ + x0 = *(px0++); + /* Read x[n-numTaps-1] sample for acc1 */ + x1 = *(px1++); + /* Read x[n-numTaps-1] sample for acc2 */ + x2 = *(px2++); + /* Read x[n-numTaps-1] sample for acc3 */ + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-2] sample for acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-3] sample acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-4] sample acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch state variables for acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + 4 * S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = acc0; + *pDst++ = acc1; + *pDst++ = acc2; + *pDst++ = acc3; + + /* Decrement the loop counter */ + blkCnt--; + } + + while(blkCntN4 > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulator to zero */ + sum0 = 0.0f; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-1] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-2] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-3] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-4] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = sum0; + + /* Decrement the loop counter */ + blkCntN4--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = (numTaps - 1u) >> 2; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + + i = (numTaps - 1u) % 0x04u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + +#else + +/* Run the below code for Cortex-M0 */ + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize; + + while(blkCnt > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulator to zero */ + sum0 = 0.0f; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = sum0; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + /* Copy numTaps number of values */ + i = (numTaps - 1u); + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR_decimate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,598 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_decimate_fast_q15.c +* +* Description: Fast Q15 FIR Decimator. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_decimate + * @{ + */ + +/** + * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, state buffers should be aligned by 32-bit + * + * Scaling and Overflow Behavior: + * \par + * This fast version uses a 32-bit accumulator with 2.30 format. + * The accumulator maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around and distorts the result. + * In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits (log2 is read as log to the base 2). + * The 2.30 accumulator is then truncated to 2.15 format and saturated to yield the 1.15 result. + * + * \par + * Refer to the function arm_fir_decimate_q15() for a slower implementation of this function which uses 64-bit accumulation to avoid wrap around distortion. + * Both the slow and the fast versions use the same instance structure. + * Use the function arm_fir_decimate_init_q15() to initialize the filter structure. + */ + +#ifndef UNALIGNED_SUPPORT_DISABLE + +void arm_fir_decimate_fast_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *px; /* Temporary pointer for state buffer */ + q15_t *pb; /* Temporary pointer coefficient buffer */ + q31_t x0, x1, c0, c1; /* Temporary variables to hold state and coefficient values */ + q31_t sum0; /* Accumulators */ + q31_t acc0, acc1; + q15_t *px0, *px1; + uint32_t blkCntN3; + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, blkCnt, tapCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize / 2; + blkCntN3 = outBlockSize - (2 * blkCnt); + + + while(blkCnt > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = 2 * S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer */ + px0 = pState; + + px1 = pState + S->M; + + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the Read b[numTaps-1] and b[numTaps-2] coefficients */ + c0 = *__SIMD32(pb)++; + + /* Read x[n-numTaps-1] and x[n-numTaps-2]sample */ + x0 = *__SIMD32(px0)++; + + x1 = *__SIMD32(px1)++; + + /* Perform the multiply-accumulate */ + acc0 = __SMLAD(x0, c0, acc0); + + acc1 = __SMLAD(x1, c0, acc1); + + /* Read the b[numTaps-3] and b[numTaps-4] coefficient */ + c0 = *__SIMD32(pb)++; + + /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ + x0 = *__SIMD32(px0)++; + + x1 = *__SIMD32(px1)++; + + /* Perform the multiply-accumulate */ + acc0 = __SMLAD(x0, c0, acc0); + + acc1 = __SMLAD(x1, c0, acc1); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px0++; + + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 2; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + *pDst++ = (q15_t) (__SSAT((acc1 >> 15), 16)); + + /* Decrement the loop counter */ + blkCnt--; + } + + + + while(blkCntN3 > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /*Set sum to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the Read b[numTaps-1] and b[numTaps-2] coefficients */ + c0 = *__SIMD32(pb)++; + + /* Read x[n-numTaps-1] and x[n-numTaps-2]sample */ + x0 = *__SIMD32(px)++; + + /* Read the b[numTaps-3] and b[numTaps-4] coefficient */ + c1 = *__SIMD32(pb)++; + + /* Perform the multiply-accumulate */ + sum0 = __SMLAD(x0, c0, sum0); + + /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ + x0 = *__SIMD32(px)++; + + /* Perform the multiply-accumulate */ + sum0 = __SMLAD(x0, c1, sum0); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 = __SMLAD(x0, c0, sum0); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Decrement the loop counter */ + blkCntN3--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = (numTaps - 1u) >> 2u; + + /* copy data */ + while(i > 0u) + { + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + + /* Decrement the loop counter */ + i--; + } + + i = (numTaps - 1u) % 0x04u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } +} + +#else + + +void arm_fir_decimate_fast_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *px; /* Temporary pointer for state buffer */ + q15_t *pb; /* Temporary pointer coefficient buffer */ + q15_t x0, x1, c0; /* Temporary variables to hold state and coefficient values */ + q31_t sum0; /* Accumulators */ + q31_t acc0, acc1; + q15_t *px0, *px1; + uint32_t blkCntN3; + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, blkCnt, tapCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize / 2; + blkCntN3 = outBlockSize - (2 * blkCnt); + + while(blkCnt > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = 2 * S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer */ + px0 = pState; + + px1 = pState + S->M; + + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the Read b[numTaps-1] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-1] for sample 0 and for sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-3] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-3] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 2; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + *pDst++ = (q15_t) (__SSAT((acc1 >> 15), 16)); + + + /* Decrement the loop counter */ + blkCnt--; + } + + while(blkCntN3 > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /*Set sum to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the Read b[numTaps-1] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-1] and sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] and sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-3] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-3] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Decrement the loop counter */ + blkCntN3--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = (numTaps - 1u) >> 2u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + + i = (numTaps - 1u) % 0x04u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } +} + + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + +/** + * @} end of FIR_decimate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,351 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_decimate_fast_q31.c +* +* Description: Fast Q31 FIR Decimator. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_decimate + * @{ + */ + +/** + * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + * + * Scaling and Overflow Behavior: + * + * \par + * This function is optimized for speed at the expense of fixed-point precision and overflow protection. + * The result of each 1.31 x 1.31 multiplication is truncated to 2.30 format. + * These intermediate results are added to a 2.30 accumulator. + * Finally, the accumulator is saturated and converted to a 1.31 result. + * The fast version has the same overflow behavior as the standard version and provides less precision since it discards the low 32 bits of each multiplication result. + * In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits (where log2 is read as log to the base 2). + * + * \par + * Refer to the function arm_fir_decimate_q31() for a slower implementation of this function which uses a 64-bit accumulator to provide higher precision. + * Both the slow and the fast versions use the same instance structure. + * Use the function arm_fir_decimate_init_q31() to initialize the filter structure. + */ + +void arm_fir_decimate_fast_q31( + arm_fir_decimate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t x0, c0; /* Temporary variables to hold state and coefficient values */ + q31_t *px; /* Temporary pointers for state buffer */ + q31_t *pb; /* Temporary pointers for coefficient buffer */ + q31_t sum0; /* Accumulator */ + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, tapCnt, blkCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + uint32_t blkCntN2; + q31_t x1; + q31_t acc0, acc1; + q31_t *px0, *px1; + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + /* Total number of output samples to be computed */ + + blkCnt = outBlockSize / 2; + blkCntN2 = outBlockSize - (2 * blkCnt); + + while(blkCnt > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = 2 * S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer */ + px0 = pState; + px1 = pState + S->M; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb); + + /* Read x[n-numTaps-1] for sample 0 sample 1 */ + x0 = *(px0); + x1 = *(px1); + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb + 1u); + + /* Read x[n-numTaps-2] for sample 0 sample 1 */ + x0 = *(px0 + 1u); + x1 = *(px1 + 1u); + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* Read the b[numTaps-3] coefficient */ + c0 = *(pb + 2u); + + /* Read x[n-numTaps-3] for sample 0 sample 1 */ + x0 = *(px0 + 2u); + x1 = *(px1 + 2u); + pb += 4u; + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb - 1u); + + /* Read x[n-numTaps-4] for sample 0 sample 1 */ + x0 = *(px0 + 3u); + x1 = *(px1 + 3u); + + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* update state pointers */ + px0 += 4u; + px1 += 4u; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x0 = *(px0++); + x1 = *(px1++); + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 2; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (acc0 << 1); + *pDst++ = (q31_t) (acc1 << 1); + + /* Decrement the loop counter */ + blkCnt--; + } + + while(blkCntN2 > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-1] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 = (q31_t) ((((q63_t) sum0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-2] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 = (q31_t) ((((q63_t) sum0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Read the b[numTaps-3] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-3] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 = (q31_t) ((((q63_t) sum0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-4] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 = (q31_t) ((((q63_t) sum0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 = (q31_t) ((((q63_t) sum0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (sum0 << 1); + + /* Decrement the loop counter */ + blkCntN2--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = (numTaps - 1u) >> 2u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + + i = (numTaps - 1u) % 0x04u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } +} + +/** + * @} end of FIR_decimate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,117 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_decimate_init_f32.c +* +* Description: Floating-point FIR Decimator initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_decimate + * @{ + */ + +/** + * @brief Initialization function for the floating-point FIR decimator. + * @param[in,out] *S points to an instance of the floating-point FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * \par + * pState points to the array of state variables. + * pState is of length numTaps+blockSize-1 words where blockSize is the number of input samples passed to arm_fir_decimate_f32(). + * M is the decimation factor. + */ + +arm_status arm_fir_decimate_init_f32( + arm_fir_decimate_instance_f32 * S, + uint16_t numTaps, + uint8_t M, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The size of the input block must be a multiple of the decimation factor */ + if((blockSize % M) != 0u) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always (blockSize + numTaps - 1) */ + memset(pState, 0, (numTaps + (blockSize - 1u)) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Decimation Factor */ + S->M = M; + + status = ARM_MATH_SUCCESS; + } + + return (status); + +} + +/** + * @} end of FIR_decimate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,119 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_decimate_init_q15.c +* +* Description: Initialization function for the Q15 FIR Decimator. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_decimate + * @{ + */ + +/** + * @brief Initialization function for the Q15 FIR decimator. + * @param[in,out] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * \par + * pState points to the array of state variables. + * pState is of length numTaps+blockSize-1 words where blockSize is the number of input samples + * to the call arm_fir_decimate_q15(). + * M is the decimation factor. + */ + +arm_status arm_fir_decimate_init_q15( + arm_fir_decimate_instance_q15 * S, + uint16_t numTaps, + uint8_t M, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize) +{ + + arm_status status; + + /* The size of the input block must be a multiple of the decimation factor */ + if((blockSize % M) != 0u) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear the state buffer. The size of buffer is always (blockSize + numTaps - 1) */ + memset(pState, 0, (numTaps + (blockSize - 1u)) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Decimation factor */ + S->M = M; + + status = ARM_MATH_SUCCESS; + } + + return (status); + +} + +/** + * @} end of FIR_decimate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,117 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_decimate_init_q31.c +* +* Description: Initialization function for Q31 FIR Decimation filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_decimate + * @{ + */ + +/** + * @brief Initialization function for the Q31 FIR decimator. + * @param[in,out] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * \par + * pState points to the array of state variables. + * pState is of length numTaps+blockSize-1 words where blockSize is the number of input samples passed to arm_fir_decimate_q31(). + * M is the decimation factor. + */ + +arm_status arm_fir_decimate_init_q31( + arm_fir_decimate_instance_q31 * S, + uint16_t numTaps, + uint8_t M, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The size of the input block must be a multiple of the decimation factor */ + if((blockSize % M) != 0u) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear the state buffer. The size is always (blockSize + numTaps - 1) */ + memset(pState, 0, (numTaps + (blockSize - 1)) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Decimation factor */ + S->M = M; + + status = ARM_MATH_SUCCESS; + } + + return (status); + +} + +/** + * @} end of FIR_decimate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,696 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_decimate_q15.c +* +* Description: Q15 FIR Decimator. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_decimate + * @{ + */ + +/** + * @brief Processing function for the Q15 FIR decimator. + * @param[in] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the location where the output result is written. + * @param[in] blockSize number of input samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + * Lastly, the accumulator is saturated to yield a result in 1.15 format. + * + * \par + * Refer to the function arm_fir_decimate_fast_q15() for a faster but less precise implementation of this function for Cortex-M3 and Cortex-M4. + */ + +#ifndef ARM_MATH_CM0_FAMILY + +#ifndef UNALIGNED_SUPPORT_DISABLE + +void arm_fir_decimate_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *px; /* Temporary pointer for state buffer */ + q15_t *pb; /* Temporary pointer coefficient buffer */ + q31_t x0, x1, c0, c1; /* Temporary variables to hold state and coefficient values */ + q63_t sum0; /* Accumulators */ + q63_t acc0, acc1; + q15_t *px0, *px1; + uint32_t blkCntN3; + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, blkCnt, tapCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize / 2; + blkCntN3 = outBlockSize - (2 * blkCnt); + + + while(blkCnt > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = 2 * S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer */ + px0 = pState; + + px1 = pState + S->M; + + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the Read b[numTaps-1] and b[numTaps-2] coefficients */ + c0 = *__SIMD32(pb)++; + + /* Read x[n-numTaps-1] and x[n-numTaps-2]sample */ + x0 = *__SIMD32(px0)++; + + x1 = *__SIMD32(px1)++; + + /* Perform the multiply-accumulate */ + acc0 = __SMLALD(x0, c0, acc0); + + acc1 = __SMLALD(x1, c0, acc1); + + /* Read the b[numTaps-3] and b[numTaps-4] coefficient */ + c0 = *__SIMD32(pb)++; + + /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ + x0 = *__SIMD32(px0)++; + + x1 = *__SIMD32(px1)++; + + /* Perform the multiply-accumulate */ + acc0 = __SMLALD(x0, c0, acc0); + + acc1 = __SMLALD(x1, c0, acc1); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px0++; + + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 = __SMLALD(x0, c0, acc0); + acc1 = __SMLALD(x1, c0, acc1); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 2; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + *pDst++ = (q15_t) (__SSAT((acc1 >> 15), 16)); + + /* Decrement the loop counter */ + blkCnt--; + } + + + + while(blkCntN3 > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /*Set sum to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the Read b[numTaps-1] and b[numTaps-2] coefficients */ + c0 = *__SIMD32(pb)++; + + /* Read x[n-numTaps-1] and x[n-numTaps-2]sample */ + x0 = *__SIMD32(px)++; + + /* Read the b[numTaps-3] and b[numTaps-4] coefficient */ + c1 = *__SIMD32(pb)++; + + /* Perform the multiply-accumulate */ + sum0 = __SMLALD(x0, c0, sum0); + + /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ + x0 = *__SIMD32(px)++; + + /* Perform the multiply-accumulate */ + sum0 = __SMLALD(x0, c1, sum0); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 = __SMLALD(x0, c0, sum0); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Decrement the loop counter */ + blkCntN3--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = (numTaps - 1u) >> 2u; + + /* copy data */ + while(i > 0u) + { + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + + /* Decrement the loop counter */ + i--; + } + + i = (numTaps - 1u) % 0x04u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } +} + +#else + + +void arm_fir_decimate_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *px; /* Temporary pointer for state buffer */ + q15_t *pb; /* Temporary pointer coefficient buffer */ + q15_t x0, x1, c0; /* Temporary variables to hold state and coefficient values */ + q63_t sum0; /* Accumulators */ + q63_t acc0, acc1; + q15_t *px0, *px1; + uint32_t blkCntN3; + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, blkCnt, tapCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize / 2; + blkCntN3 = outBlockSize - (2 * blkCnt); + + while(blkCnt > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = 2 * S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer */ + px0 = pState; + + px1 = pState + S->M; + + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the Read b[numTaps-1] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-1] for sample 0 and for sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-3] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-3] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 2; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + *pDst++ = (q15_t) (__SSAT((acc1 >> 15), 16)); + + /* Decrement the loop counter */ + blkCnt--; + } + + while(blkCntN3 > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /*Set sum to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the Read b[numTaps-1] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-1] and sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] and sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-3] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-3] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Decrement the loop counter */ + blkCntN3--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = (numTaps - 1u) >> 2u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + + i = (numTaps - 1u) % 0x04u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } +} + + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + +#else + + +void arm_fir_decimate_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *px; /* Temporary pointer for state buffer */ + q15_t *pb; /* Temporary pointer coefficient buffer */ + q31_t x0, c0; /* Temporary variables to hold state and coefficient values */ + q63_t sum0; /* Accumulators */ + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, blkCnt, tapCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + + + +/* Run the below code for Cortex-M0 */ + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize; + + while(blkCnt > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /*Set sum to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += (q31_t) x0 *c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /*Store filter output , smlad will return the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = numTaps - 1u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + + +} +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + +/** + * @} end of FIR_decimate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,311 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_decimate_q31.c +* +* Description: Q31 FIR Decimator. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_decimate + * @{ + */ + +/** + * @brief Processing function for the Q31 FIR decimator. + * @param[in] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clip. + * In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits (where log2 is read as log to the base 2). + * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. + * + * \par + * Refer to the function arm_fir_decimate_fast_q31() for a faster but less precise implementation of this function for Cortex-M3 and Cortex-M4. + */ + +void arm_fir_decimate_q31( + const arm_fir_decimate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t x0, c0; /* Temporary variables to hold state and coefficient values */ + q31_t *px; /* Temporary pointers for state buffer */ + q31_t *pb; /* Temporary pointers for coefficient buffer */ + q63_t sum0; /* Accumulator */ + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, tapCnt, blkCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize; + + while(blkCnt > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + while(tapCnt > 0u) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-1] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-2] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-3] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-4] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (sum0 >> 31); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = (numTaps - 1u) >> 2u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + + i = (numTaps - 1u) % 0x04u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + +#else + +/* Run the below code for Cortex-M0 */ + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize; + + while(blkCnt > 0u) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while(--i); + + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (sum0 >> 31); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = numTaps - 1u; + + /* copy data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR_decimate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,997 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_f32.c +* +* Description: Floating-point FIR filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** +* @ingroup groupFilters +*/ + +/** +* @defgroup FIR Finite Impulse Response (FIR) Filters +* +* This set of functions implements Finite Impulse Response (FIR) filters +* for Q7, Q15, Q31, and floating-point data types. Fast versions of Q15 and Q31 are also provided. +* The functions operate on blocks of input and output data and each call to the function processes +* blockSize samples through the filter. pSrc and +* pDst points to input and output arrays containing blockSize values. +* +* \par Algorithm: +* The FIR filter algorithm is based upon a sequence of multiply-accumulate (MAC) operations. +* Each filter coefficient b[n] is multiplied by a state variable which equals a previous input sample x[n]. +*
  
+*    y[n] = b[0] * x[n] + b[1] * x[n-1] + b[2] * x[n-2] + ...+ b[numTaps-1] * x[n-numTaps+1]  
+* 
+* \par +* \image html FIR.gif "Finite Impulse Response filter" +* \par +* pCoeffs points to a coefficient array of size numTaps. +* Coefficients are stored in time reversed order. +* \par +*
  
+*    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}  
+* 
+* \par +* pState points to a state array of size numTaps + blockSize - 1. +* Samples in the state buffer are stored in the following order. +* \par +*
  
+*    {x[n-numTaps+1], x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2]....x[0], x[1], ..., x[blockSize-1]}  
+* 
+* \par +* Note that the length of the state buffer exceeds the length of the coefficient array by blockSize-1. +* The increased state buffer length allows circular addressing, which is traditionally used in the FIR filters, +* to be avoided and yields a significant speed improvement. +* The state variables are updated after each block of data is processed; the coefficients are untouched. +* \par Instance Structure +* The coefficients and state variables for a filter are stored together in an instance data structure. +* A separate instance structure must be defined for each filter. +* Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. +* There are separate instance structure declarations for each of the 4 supported data types. +* +* \par Initialization Functions +* There is also an associated initialization function for each data type. +* The initialization function performs the following operations: +* - Sets the values of the internal structure fields. +* - Zeros out the values in the state buffer. +* To do this manually without calling the init function, assign the follow subfields of the instance structure: +* numTaps, pCoeffs, pState. Also set all of the values in pState to zero. +* +* \par +* Use of the initialization function is optional. +* However, if the initialization function is used, then the instance structure cannot be placed into a const data section. +* To place an instance structure into a const data section, the instance structure must be manually initialized. +* Set the values in the state buffer to zeros before static initialization. +* The code below statically initializes each of the 4 different data type filter instance structures +*
  
+*arm_fir_instance_f32 S = {numTaps, pState, pCoeffs};  
+*arm_fir_instance_q31 S = {numTaps, pState, pCoeffs};  
+*arm_fir_instance_q15 S = {numTaps, pState, pCoeffs};  
+*arm_fir_instance_q7 S =  {numTaps, pState, pCoeffs};  
+* 
+* +* where numTaps is the number of filter coefficients in the filter; pState is the address of the state buffer; +* pCoeffs is the address of the coefficient buffer. +* +* \par Fixed-Point Behavior +* Care must be taken when using the fixed-point versions of the FIR filter functions. +* In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. +* Refer to the function specific documentation below for usage guidelines. +*/ + +/** +* @addtogroup FIR +* @{ +*/ + +/** +* +* @param[in] *S points to an instance of the floating-point FIR filter structure. +* @param[in] *pSrc points to the block of input data. +* @param[out] *pDst points to the block of output data. +* @param[in] blockSize number of samples to process per call. +* @return none. +* +*/ + +#if defined(ARM_MATH_CM7) + +void arm_fir_f32( +const arm_fir_instance_f32 * S, +float32_t * pSrc, +float32_t * pDst, +uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + float32_t acc0, acc1, acc2, acc3, acc4, acc5, acc6, acc7; /* Accumulators */ + float32_t x0, x1, x2, x3, x4, x5, x6, x7, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt; /* Loop counters */ + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Apply loop unrolling and compute 8 output values simultaneously. + * The variables acc0 ... acc7 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + blkCnt = blockSize >> 3; + + /* First part of the processing with loop unrolling. Compute 8 outputs at a time. + ** a second loop below computes the remaining 1 to 7 samples. */ + while(blkCnt > 0u) + { + /* Copy four new input samples into the state buffer */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Set all accumulators to zero */ + acc0 = 0.0f; + acc1 = 0.0f; + acc2 = 0.0f; + acc3 = 0.0f; + acc4 = 0.0f; + acc5 = 0.0f; + acc6 = 0.0f; + acc7 = 0.0f; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* This is separated from the others to avoid + * a call to __aeabi_memmove which would be slower + */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Read the first seven samples from the state buffer: x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2] */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + x3 = *px++; + x4 = *px++; + x5 = *px++; + x6 = *px++; + + /* Loop unrolling. Process 8 taps at a time. */ + tapCnt = numTaps >> 3u; + + /* Loop over the number of taps. Unroll by a factor of 8. + ** Repeat until we've computed numTaps-8 coefficients. */ + while(tapCnt > 0u) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-3] sample */ + x7 = *(px++); + + /* acc0 += b[numTaps-1] * x[n-numTaps] */ + acc0 += x0 * c0; + + /* acc1 += b[numTaps-1] * x[n-numTaps-1] */ + acc1 += x1 * c0; + + /* acc2 += b[numTaps-1] * x[n-numTaps-2] */ + acc2 += x2 * c0; + + /* acc3 += b[numTaps-1] * x[n-numTaps-3] */ + acc3 += x3 * c0; + + /* acc4 += b[numTaps-1] * x[n-numTaps-4] */ + acc4 += x4 * c0; + + /* acc1 += b[numTaps-1] * x[n-numTaps-5] */ + acc5 += x5 * c0; + + /* acc2 += b[numTaps-1] * x[n-numTaps-6] */ + acc6 += x6 * c0; + + /* acc3 += b[numTaps-1] * x[n-numTaps-7] */ + acc7 += x7 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-4] sample */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + acc0 += x1 * c0; + acc1 += x2 * c0; + acc2 += x3 * c0; + acc3 += x4 * c0; + acc4 += x5 * c0; + acc5 += x6 * c0; + acc6 += x7 * c0; + acc7 += x0 * c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-5] sample */ + x1 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += x2 * c0; + acc1 += x3 * c0; + acc2 += x4 * c0; + acc3 += x5 * c0; + acc4 += x6 * c0; + acc5 += x7 * c0; + acc6 += x0 * c0; + acc7 += x1 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-6] sample */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += x3 * c0; + acc1 += x4 * c0; + acc2 += x5 * c0; + acc3 += x6 * c0; + acc4 += x7 * c0; + acc5 += x0 * c0; + acc6 += x1 * c0; + acc7 += x2 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-6] sample */ + x3 = *(px++); + /* Perform the multiply-accumulates */ + acc0 += x4 * c0; + acc1 += x5 * c0; + acc2 += x6 * c0; + acc3 += x7 * c0; + acc4 += x0 * c0; + acc5 += x1 * c0; + acc6 += x2 * c0; + acc7 += x3 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-6] sample */ + x4 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += x5 * c0; + acc1 += x6 * c0; + acc2 += x7 * c0; + acc3 += x0 * c0; + acc4 += x1 * c0; + acc5 += x2 * c0; + acc6 += x3 * c0; + acc7 += x4 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-6] sample */ + x5 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += x6 * c0; + acc1 += x7 * c0; + acc2 += x0 * c0; + acc3 += x1 * c0; + acc4 += x2 * c0; + acc5 += x3 * c0; + acc6 += x4 * c0; + acc7 += x5 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-6] sample */ + x6 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += x7 * c0; + acc1 += x0 * c0; + acc2 += x1 * c0; + acc3 += x2 * c0; + acc4 += x3 * c0; + acc5 += x4 * c0; + acc6 += x5 * c0; + acc7 += x6 * c0; + + tapCnt--; + } + + /* If the filter length is not a multiple of 8, compute the remaining filter taps */ + tapCnt = numTaps % 0x8u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x7 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + acc4 += x4 * c0; + acc5 += x5 * c0; + acc6 += x6 * c0; + acc7 += x7 * c0; + + /* Reuse the present sample states for next sample */ + x0 = x1; + x1 = x2; + x2 = x3; + x3 = x4; + x4 = x5; + x5 = x6; + x6 = x7; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by 8 to process the next group of 8 samples */ + pState = pState + 8; + + /* The results in the 8 accumulators, store in the destination buffer. */ + *pDst++ = acc0; + *pDst++ = acc1; + *pDst++ = acc2; + *pDst++ = acc3; + *pDst++ = acc4; + *pDst++ = acc5; + *pDst++ = acc6; + *pDst++ = acc7; + + blkCnt--; + } + + /* If the blockSize is not a multiple of 8, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x8u; + + while(blkCnt > 0u) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0.0f; + + /* Initialize state pointer */ + px = pState; + + /* Initialize Coefficient pointer */ + pb = (pCoeffs); + + i = numTaps; + + /* Perform the multiply-accumulates */ + do + { + acc0 += *px++ * *pb++; + i--; + + } while(i > 0u); + + /* The result is store in the destination buffer. */ + *pDst++ = acc0; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + tapCnt = (numTaps - 1u) >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } +} + +#elif defined(ARM_MATH_CM0_FAMILY) + +void arm_fir_f32( +const arm_fir_instance_f32 * S, +float32_t * pSrc, +float32_t * pDst, +uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt; /* Loop counters */ + + /* Run the below code for Cortex-M0 */ + + float32_t acc; + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Initialize blkCnt with blockSize */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc = 0.0f; + + /* Initialize state pointer */ + px = pState; + + /* Initialize Coefficient pointer */ + pb = pCoeffs; + + i = numTaps; + + /* Perform the multiply-accumulates */ + do + { + /* acc = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] */ + acc += *px++ * *pb++; + i--; + + } while(i > 0u); + + /* The result is store in the destination buffer. */ + *pDst++ = acc; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the starting of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + /* Copy numTaps number of values */ + tapCnt = numTaps - 1u; + + /* Copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} + +#else + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + +void arm_fir_f32( +const arm_fir_instance_f32 * S, +float32_t * pSrc, +float32_t * pDst, +uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + float32_t acc0, acc1, acc2, acc3, acc4, acc5, acc6, acc7; /* Accumulators */ + float32_t x0, x1, x2, x3, x4, x5, x6, x7, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt; /* Loop counters */ + float32_t p0,p1,p2,p3,p4,p5,p6,p7; /* Temporary product values */ + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Apply loop unrolling and compute 8 output values simultaneously. + * The variables acc0 ... acc7 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + blkCnt = blockSize >> 3; + + /* First part of the processing with loop unrolling. Compute 8 outputs at a time. + ** a second loop below computes the remaining 1 to 7 samples. */ + while(blkCnt > 0u) + { + /* Copy four new input samples into the state buffer */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Set all accumulators to zero */ + acc0 = 0.0f; + acc1 = 0.0f; + acc2 = 0.0f; + acc3 = 0.0f; + acc4 = 0.0f; + acc5 = 0.0f; + acc6 = 0.0f; + acc7 = 0.0f; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* This is separated from the others to avoid + * a call to __aeabi_memmove which would be slower + */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Read the first seven samples from the state buffer: x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2] */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + x3 = *px++; + x4 = *px++; + x5 = *px++; + x6 = *px++; + + /* Loop unrolling. Process 8 taps at a time. */ + tapCnt = numTaps >> 3u; + + /* Loop over the number of taps. Unroll by a factor of 8. + ** Repeat until we've computed numTaps-8 coefficients. */ + while(tapCnt > 0u) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-3] sample */ + x7 = *(px++); + + /* acc0 += b[numTaps-1] * x[n-numTaps] */ + p0 = x0 * c0; + + /* acc1 += b[numTaps-1] * x[n-numTaps-1] */ + p1 = x1 * c0; + + /* acc2 += b[numTaps-1] * x[n-numTaps-2] */ + p2 = x2 * c0; + + /* acc3 += b[numTaps-1] * x[n-numTaps-3] */ + p3 = x3 * c0; + + /* acc4 += b[numTaps-1] * x[n-numTaps-4] */ + p4 = x4 * c0; + + /* acc1 += b[numTaps-1] * x[n-numTaps-5] */ + p5 = x5 * c0; + + /* acc2 += b[numTaps-1] * x[n-numTaps-6] */ + p6 = x6 * c0; + + /* acc3 += b[numTaps-1] * x[n-numTaps-7] */ + p7 = x7 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-4] sample */ + x0 = *(px++); + + acc0 += p0; + acc1 += p1; + acc2 += p2; + acc3 += p3; + acc4 += p4; + acc5 += p5; + acc6 += p6; + acc7 += p7; + + + /* Perform the multiply-accumulate */ + p0 = x1 * c0; + p1 = x2 * c0; + p2 = x3 * c0; + p3 = x4 * c0; + p4 = x5 * c0; + p5 = x6 * c0; + p6 = x7 * c0; + p7 = x0 * c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-5] sample */ + x1 = *(px++); + + acc0 += p0; + acc1 += p1; + acc2 += p2; + acc3 += p3; + acc4 += p4; + acc5 += p5; + acc6 += p6; + acc7 += p7; + + /* Perform the multiply-accumulates */ + p0 = x2 * c0; + p1 = x3 * c0; + p2 = x4 * c0; + p3 = x5 * c0; + p4 = x6 * c0; + p5 = x7 * c0; + p6 = x0 * c0; + p7 = x1 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-6] sample */ + x2 = *(px++); + + acc0 += p0; + acc1 += p1; + acc2 += p2; + acc3 += p3; + acc4 += p4; + acc5 += p5; + acc6 += p6; + acc7 += p7; + + /* Perform the multiply-accumulates */ + p0 = x3 * c0; + p1 = x4 * c0; + p2 = x5 * c0; + p3 = x6 * c0; + p4 = x7 * c0; + p5 = x0 * c0; + p6 = x1 * c0; + p7 = x2 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-6] sample */ + x3 = *(px++); + + acc0 += p0; + acc1 += p1; + acc2 += p2; + acc3 += p3; + acc4 += p4; + acc5 += p5; + acc6 += p6; + acc7 += p7; + + /* Perform the multiply-accumulates */ + p0 = x4 * c0; + p1 = x5 * c0; + p2 = x6 * c0; + p3 = x7 * c0; + p4 = x0 * c0; + p5 = x1 * c0; + p6 = x2 * c0; + p7 = x3 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-6] sample */ + x4 = *(px++); + + acc0 += p0; + acc1 += p1; + acc2 += p2; + acc3 += p3; + acc4 += p4; + acc5 += p5; + acc6 += p6; + acc7 += p7; + + /* Perform the multiply-accumulates */ + p0 = x5 * c0; + p1 = x6 * c0; + p2 = x7 * c0; + p3 = x0 * c0; + p4 = x1 * c0; + p5 = x2 * c0; + p6 = x3 * c0; + p7 = x4 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-6] sample */ + x5 = *(px++); + + acc0 += p0; + acc1 += p1; + acc2 += p2; + acc3 += p3; + acc4 += p4; + acc5 += p5; + acc6 += p6; + acc7 += p7; + + /* Perform the multiply-accumulates */ + p0 = x6 * c0; + p1 = x7 * c0; + p2 = x0 * c0; + p3 = x1 * c0; + p4 = x2 * c0; + p5 = x3 * c0; + p6 = x4 * c0; + p7 = x5 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-6] sample */ + x6 = *(px++); + + acc0 += p0; + acc1 += p1; + acc2 += p2; + acc3 += p3; + acc4 += p4; + acc5 += p5; + acc6 += p6; + acc7 += p7; + + /* Perform the multiply-accumulates */ + p0 = x7 * c0; + p1 = x0 * c0; + p2 = x1 * c0; + p3 = x2 * c0; + p4 = x3 * c0; + p5 = x4 * c0; + p6 = x5 * c0; + p7 = x6 * c0; + + tapCnt--; + + acc0 += p0; + acc1 += p1; + acc2 += p2; + acc3 += p3; + acc4 += p4; + acc5 += p5; + acc6 += p6; + acc7 += p7; + } + + /* If the filter length is not a multiple of 8, compute the remaining filter taps */ + tapCnt = numTaps % 0x8u; + + while(tapCnt > 0u) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x7 = *(px++); + + /* Perform the multiply-accumulates */ + p0 = x0 * c0; + p1 = x1 * c0; + p2 = x2 * c0; + p3 = x3 * c0; + p4 = x4 * c0; + p5 = x5 * c0; + p6 = x6 * c0; + p7 = x7 * c0; + + /* Reuse the present sample states for next sample */ + x0 = x1; + x1 = x2; + x2 = x3; + x3 = x4; + x4 = x5; + x5 = x6; + x6 = x7; + + acc0 += p0; + acc1 += p1; + acc2 += p2; + acc3 += p3; + acc4 += p4; + acc5 += p5; + acc6 += p6; + acc7 += p7; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by 8 to process the next group of 8 samples */ + pState = pState + 8; + + /* The results in the 8 accumulators, store in the destination buffer. */ + *pDst++ = acc0; + *pDst++ = acc1; + *pDst++ = acc2; + *pDst++ = acc3; + *pDst++ = acc4; + *pDst++ = acc5; + *pDst++ = acc6; + *pDst++ = acc7; + + blkCnt--; + } + + /* If the blockSize is not a multiple of 8, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x8u; + + while(blkCnt > 0u) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0.0f; + + /* Initialize state pointer */ + px = pState; + + /* Initialize Coefficient pointer */ + pb = (pCoeffs); + + i = numTaps; + + /* Perform the multiply-accumulates */ + do + { + acc0 += *px++ * *pb++; + i--; + + } while(i > 0u); + + /* The result is store in the destination buffer. */ + *pDst++ = acc0; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + tapCnt = (numTaps - 1u) >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } +} + +#endif + +/** +* @} end of FIR group +*/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_fast_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_fast_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,345 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_fast_q15.c +* +* Description: Q15 Fast FIR filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR + * @{ + */ + +/** + * @param[in] *S points to an instance of the Q15 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * This fast version uses a 32-bit accumulator with 2.30 format. + * The accumulator maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around and distorts the result. + * In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits. + * The 2.30 accumulator is then truncated to 2.15 format and saturated to yield the 1.15 result. + * + * \par + * Refer to the function arm_fir_q15() for a slower implementation of this function which uses 64-bit accumulation to avoid wrap around distortion. Both the slow and the fast versions use the same instance structure. + * Use the function arm_fir_init_q15() to initialize the filter structure. + */ + +void arm_fir_fast_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + q15_t *pb; /* Temporary pointer for coefficient buffer */ + q15_t *px; /* Temporary q31 pointer for SIMD state buffer accesses */ + q31_t x0, x1, x2, c0; /* Temporary variables to hold SIMD state and coefficient values */ + uint32_t numTaps = S->numTaps; /* Number of taps in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Apply loop unrolling and compute 4 output values simultaneously. + * The variables acc0 ... acc3 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + + blkCnt = blockSize >> 2; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Copy four new input samples into the state buffer. + ** Use 32-bit SIMD to move the 16-bit data. Only requires two copies. */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Typecast q15_t pointer to q31_t pointer for state reading in q31_t */ + px = pState; + + /* Typecast q15_t pointer to q31_t pointer for coefficient reading in q31_t */ + pb = pCoeffs; + + /* Read the first two samples from the state buffer: x[n-N], x[n-N-1] */ + x0 = *__SIMD32(px)++; + + /* Read the third and forth samples from the state buffer: x[n-N-2], x[n-N-3] */ + x2 = *__SIMD32(px)++; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-(numTaps%4) coefficients. */ + tapCnt = numTaps >> 2; + + while(tapCnt > 0) + { + /* Read the first two coefficients using SIMD: b[N] and b[N-1] coefficients */ + c0 = *__SIMD32(pb)++; + + /* acc0 += b[N] * x[n-N] + b[N-1] * x[n-N-1] */ + acc0 = __SMLAD(x0, c0, acc0); + + /* acc2 += b[N] * x[n-N-2] + b[N-1] * x[n-N-3] */ + acc2 = __SMLAD(x2, c0, acc2); + + /* pack x[n-N-1] and x[n-N-2] */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x2, x0, 0); +#else + x1 = __PKHBT(x0, x2, 0); +#endif + + /* Read state x[n-N-4], x[n-N-5] */ + x0 = _SIMD32_OFFSET(px); + + /* acc1 += b[N] * x[n-N-1] + b[N-1] * x[n-N-2] */ + acc1 = __SMLADX(x1, c0, acc1); + + /* pack x[n-N-3] and x[n-N-4] */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x0, x2, 0); +#else + x1 = __PKHBT(x2, x0, 0); +#endif + + /* acc3 += b[N] * x[n-N-3] + b[N-1] * x[n-N-4] */ + acc3 = __SMLADX(x1, c0, acc3); + + /* Read coefficients b[N-2], b[N-3] */ + c0 = *__SIMD32(pb)++; + + /* acc0 += b[N-2] * x[n-N-2] + b[N-3] * x[n-N-3] */ + acc0 = __SMLAD(x2, c0, acc0); + + /* Read state x[n-N-6], x[n-N-7] with offset */ + x2 = _SIMD32_OFFSET(px + 2u); + + /* acc2 += b[N-2] * x[n-N-4] + b[N-3] * x[n-N-5] */ + acc2 = __SMLAD(x0, c0, acc2); + + /* acc1 += b[N-2] * x[n-N-3] + b[N-3] * x[n-N-4] */ + acc1 = __SMLADX(x1, c0, acc1); + + /* pack x[n-N-5] and x[n-N-6] */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x2, x0, 0); +#else + x1 = __PKHBT(x0, x2, 0); +#endif + + /* acc3 += b[N-2] * x[n-N-5] + b[N-3] * x[n-N-6] */ + acc3 = __SMLADX(x1, c0, acc3); + + /* Update state pointer for next state reading */ + px += 4u; + + /* Decrement tap count */ + tapCnt--; + + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps. + ** This is always be 2 taps since the filter length is even. */ + if((numTaps & 0x3u) != 0u) + { + + /* Read last two coefficients */ + c0 = *__SIMD32(pb)++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc2 = __SMLAD(x2, c0, acc2); + + /* pack state variables */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x2, x0, 0); +#else + x1 = __PKHBT(x0, x2, 0); +#endif + + /* Read last state variables */ + x0 = *__SIMD32(px); + + /* Perform the multiply-accumulates */ + acc1 = __SMLADX(x1, c0, acc1); + + /* pack state variables */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x0, x2, 0); +#else + x1 = __PKHBT(x2, x0, 0); +#endif + + /* Perform the multiply-accumulates */ + acc3 = __SMLADX(x1, c0, acc3); + } + + /* The results in the 4 accumulators are in 2.30 format. Convert to 1.15 with saturation. + ** Then store the 4 outputs in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16); + + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16); + +#else + + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16); + + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16); + + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + while(blkCnt > 0u) + { + /* Copy two samples into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0; + + /* Use SIMD to hold states and coefficients */ + px = pState; + pb = pCoeffs; + + tapCnt = numTaps >> 1u; + + do + { + + acc0 += (q31_t) * px++ * *pb++; + acc0 += (q31_t) * px++ * *pb++; + + tapCnt--; + } + while(tapCnt > 0u); + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + ** Then store the output in the destination buffer. */ + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + /* Calculation of count for copying integer writes */ + tapCnt = (numTaps - 1u) >> 2; + + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + tapCnt--; + + } + + /* Calculation of count for remaining q15_t data */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* copy remaining data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} + +/** + * @} end of FIR group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_fast_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_fast_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,305 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_fast_q31.c +* +* Description: Processing function for the Q31 Fast FIR filter. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR + * @{ + */ + +/** + * @param[in] *S points to an instance of the Q31 structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block output data. + * @param[in] blockSize number of samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * + * \par + * This function is optimized for speed at the expense of fixed-point precision and overflow protection. + * The result of each 1.31 x 1.31 multiplication is truncated to 2.30 format. + * These intermediate results are added to a 2.30 accumulator. + * Finally, the accumulator is saturated and converted to a 1.31 result. + * The fast version has the same overflow behavior as the standard version and provides less precision since it discards the low 32 bits of each multiplication result. + * In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits. + * + * \par + * Refer to the function arm_fir_q31() for a slower implementation of this function which uses a 64-bit accumulator to provide higher precision. Both the slow and the fast versions use the same instance structure. + * Use the function arm_fir_init_q31() to initialize the filter structure. + */ + +IAR_ONLY_LOW_OPTIMIZATION_ENTER +void arm_fir_fast_q31( + const arm_fir_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t x0, x1, x2, x3; /* Temporary variables to hold state */ + q31_t c0; /* Temporary variable to hold coefficient value */ + q31_t *px; /* Temporary pointer for state */ + q31_t *pb; /* Temporary pointer for coefficient buffer */ + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt; /* Loop counters */ + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Apply loop unrolling and compute 4 output values simultaneously. + * The variables acc0 ... acc3 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + blkCnt = blockSize >> 2; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Copy four new input samples into the state buffer */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Read the first three samples from the state buffer: + * x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2] */ + x0 = *(px++); + x1 = *(px++); + x2 = *(px++); + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + i = tapCnt; + + while(i > 0u) + { + /* Read the b[numTaps] coefficient */ + c0 = *pb; + + /* Read x[n-numTaps-3] sample */ + x3 = *px; + + /* acc0 += b[numTaps] * x[n-numTaps] */ + multAcc_32x32_keep32_R(acc0, x0, c0); + + /* acc1 += b[numTaps] * x[n-numTaps-1] */ + multAcc_32x32_keep32_R(acc1, x1, c0); + + /* acc2 += b[numTaps] * x[n-numTaps-2] */ + multAcc_32x32_keep32_R(acc2, x2, c0); + + /* acc3 += b[numTaps] * x[n-numTaps-3] */ + multAcc_32x32_keep32_R(acc3, x3, c0); + + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb + 1u); + + /* Read x[n-numTaps-4] sample */ + x0 = *(px + 1u); + + /* Perform the multiply-accumulates */ + multAcc_32x32_keep32_R(acc0, x1, c0); + multAcc_32x32_keep32_R(acc1, x2, c0); + multAcc_32x32_keep32_R(acc2, x3, c0); + multAcc_32x32_keep32_R(acc3, x0, c0); + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb + 2u); + + /* Read x[n-numTaps-5] sample */ + x1 = *(px + 2u); + + /* Perform the multiply-accumulates */ + multAcc_32x32_keep32_R(acc0, x2, c0); + multAcc_32x32_keep32_R(acc1, x3, c0); + multAcc_32x32_keep32_R(acc2, x0, c0); + multAcc_32x32_keep32_R(acc3, x1, c0); + + /* Read the b[numTaps-3] coefficients */ + c0 = *(pb + 3u); + + /* Read x[n-numTaps-6] sample */ + x2 = *(px + 3u); + + /* Perform the multiply-accumulates */ + multAcc_32x32_keep32_R(acc0, x3, c0); + multAcc_32x32_keep32_R(acc1, x0, c0); + multAcc_32x32_keep32_R(acc2, x1, c0); + multAcc_32x32_keep32_R(acc3, x2, c0); + + /* update coefficient pointer */ + pb += 4u; + px += 4u; + + /* Decrement the loop counter */ + i--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + + i = numTaps - (tapCnt * 4u); + while(i > 0u) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + multAcc_32x32_keep32_R(acc0, x0, c0); + multAcc_32x32_keep32_R(acc1, x1, c0); + multAcc_32x32_keep32_R(acc2, x2, c0); + multAcc_32x32_keep32_R(acc3, x3, c0); + + /* Reuse the present sample states for next sample */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 4; + + /* The results in the 4 accumulators are in 2.30 format. Convert to 1.31 + ** Then store the 4 outputs in the destination buffer. */ + *pDst++ = (q31_t) (acc0 << 1); + *pDst++ = (q31_t) (acc1 << 1); + *pDst++ = (q31_t) (acc2 << 1); + *pDst++ = (q31_t) (acc3 << 1); + + /* Decrement the samples loop counter */ + blkCnt--; + } + + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 4u; + + while(blkCnt > 0u) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize Coefficient pointer */ + pb = (pCoeffs); + + i = numTaps; + + /* Perform the multiply-accumulates */ + do + { + multAcc_32x32_keep32_R(acc0, (*px++), (*(pb++))); + i--; + } while(i > 0u); + + /* The result is in 2.30 format. Convert to 1.31 + ** Then store the output in the destination buffer. */ + *pDst++ = (q31_t) (acc0 << 1); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the samples loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1u); + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + +} +IAR_ONLY_LOW_OPTIMIZATION_EXIT +/** + * @} end of FIR group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,96 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_init_f32.c +* +* Description: Floating-point FIR filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR + * @{ + */ + +/** + * @details + * + * @param[in,out] *S points to an instance of the floating-point FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed per call. + * @return none. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * \par + * pState points to the array of state variables. + * pState is of length numTaps+blockSize-1 samples, where blockSize is the number of input samples processed by each call to arm_fir_f32(). + */ + +void arm_fir_init_f32( + arm_fir_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and the size of state buffer is (blockSize + numTaps - 1) */ + memset(pState, 0, (numTaps + (blockSize - 1u)) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + +} + +/** + * @} end of FIR group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,154 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_init_q15.c +* +* Description: Q15 FIR filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR + * @{ + */ + +/** + * @param[in,out] *S points to an instance of the Q15 FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. Must be even and greater than or equal to 4. + * @param[in] *pCoeffs points to the filter coefficients buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize is number of samples processed per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if + * numTaps is not greater than or equal to 4 and even. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * Note that numTaps must be even and greater than or equal to 4. + * To implement an odd length filter simply increase numTaps by 1 and set the last coefficient to zero. + * For example, to implement a filter with numTaps=3 and coefficients + *
    
+ *     {0.3, -0.8, 0.3}    
+ * 
+ * set numTaps=4 and use the coefficients: + *
    
+ *     {0.3, -0.8, 0.3, 0}.    
+ * 
+ * Similarly, to implement a two point filter + *
    
+ *     {0.3, -0.3}    
+ * 
+ * set numTaps=4 and use the coefficients: + *
    
+ *     {0.3, -0.3, 0, 0}.    
+ * 
+ * \par + * pState points to the array of state variables. + * pState is of length numTaps+blockSize, when running on Cortex-M4 and Cortex-M3 and is of length numTaps+blockSize-1, when running on Cortex-M0 where blockSize is the number of input samples processed by each call to arm_fir_q15(). + */ + +arm_status arm_fir_init_q15( + arm_fir_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize) +{ + arm_status status; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* The Number of filter coefficients in the filter must be even and at least 4 */ + if(numTaps & 0x1u) + { + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear the state buffer. The size is always (blockSize + numTaps ) */ + memset(pState, 0, (numTaps + (blockSize)) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + + status = ARM_MATH_SUCCESS; + } + + return (status); + +#else + + /* Run the below code for Cortex-M0 */ + + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear the state buffer. The size is always (blockSize + numTaps - 1) */ + memset(pState, 0, (numTaps + (blockSize - 1u)) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + + status = ARM_MATH_SUCCESS; + + return (status); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,96 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_init_q31.c +* +* Description: Q31 FIR filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR + * @{ + */ + +/** + * @details + * + * @param[in,out] *S points to an instance of the Q31 FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed per call. + * @return none. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * \par + * pState points to the array of state variables. + * pState is of length numTaps+blockSize-1 samples, where blockSize is the number of input samples processed by each call to arm_fir_q31(). + */ + +void arm_fir_init_q31( + arm_fir_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and state array size is (blockSize + numTaps - 1) */ + memset(pState, 0, (blockSize + ((uint32_t) numTaps - 1u)) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; + +} + +/** + * @} end of FIR group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,94 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_init_q7.c +* +* Description: Q7 FIR filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR + * @{ + */ +/** + * @param[in,out] *S points to an instance of the Q7 FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed per call. + * @return none + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * \par + * pState points to the array of state variables. + * pState is of length numTaps+blockSize-1 samples, where blockSize is the number of input samples processed by each call to arm_fir_q7(). + */ + +void arm_fir_init_q7( + arm_fir_instance_q7 * S, + uint16_t numTaps, + q7_t * pCoeffs, + q7_t * pState, + uint32_t blockSize) +{ + + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear the state buffer. The size is always (blockSize + numTaps - 1) */ + memset(pState, 0, (numTaps + (blockSize - 1u)) * sizeof(q7_t)); + + /* Assign state pointer */ + S->pState = pState; + +} + +/** + * @} end of FIR group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,581 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_interpolate_f32.c +* +* Description: FIR interpolation for floating-point sequences. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @defgroup FIR_Interpolate Finite Impulse Response (FIR) Interpolator + * + * These functions combine an upsampler (zero stuffer) and an FIR filter. + * They are used in multirate systems for increasing the sample rate of a signal without introducing high frequency images. + * Conceptually, the functions are equivalent to the block diagram below: + * \image html FIRInterpolator.gif "Components included in the FIR Interpolator functions" + * After upsampling by a factor of L, the signal should be filtered by a lowpass filter with a normalized + * cutoff frequency of 1/L in order to eliminate high frequency copies of the spectrum. + * The user of the function is responsible for providing the filter coefficients. + * + * The FIR interpolator functions provided in the CMSIS DSP Library combine the upsampler and FIR filter in an efficient manner. + * The upsampler inserts L-1 zeros between each sample. + * Instead of multiplying by these zero values, the FIR filter is designed to skip them. + * This leads to an efficient implementation without any wasted effort. + * The functions operate on blocks of input and output data. + * pSrc points to an array of blockSize input values and + * pDst points to an array of blockSize*L output values. + * + * The library provides separate functions for Q15, Q31, and floating-point data types. + * + * \par Algorithm: + * The functions use a polyphase filter structure: + *
    
+ *    y[n] = b[0] * x[n] + b[L]   * x[n-1] + ... + b[L*(phaseLength-1)] * x[n-phaseLength+1]    
+ *    y[n+1] = b[1] * x[n] + b[L+1] * x[n-1] + ... + b[L*(phaseLength-1)+1] * x[n-phaseLength+1]    
+ *    ...    
+ *    y[n+(L-1)] = b[L-1] * x[n] + b[2*L-1] * x[n-1] + ....+ b[L*(phaseLength-1)+(L-1)] * x[n-phaseLength+1]    
+ * 
+ * This approach is more efficient than straightforward upsample-then-filter algorithms. + * With this method the computation is reduced by a factor of 1/L when compared to using a standard FIR filter. + * \par + * pCoeffs points to a coefficient array of size numTaps. + * numTaps must be a multiple of the interpolation factor L and this is checked by the + * initialization functions. + * Internally, the function divides the FIR filter's impulse response into shorter filters of length + * phaseLength=numTaps/L. + * Coefficients are stored in time reversed order. + * \par + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * \par + * pState points to a state array of size blockSize + phaseLength - 1. + * Samples in the state buffer are stored in the order: + * \par + *
    
+ *    {x[n-phaseLength+1], x[n-phaseLength], x[n-phaseLength-1], x[n-phaseLength-2]....x[0], x[1], ..., x[blockSize-1]}    
+ * 
+ * The state variables are updated after each block of data is processed, the coefficients are untouched. + * + * \par Instance Structure + * The coefficients and state variables for a filter are stored together in an instance data structure. + * A separate instance structure must be defined for each filter. + * Coefficient arrays may be shared among several instances while state variable array should be allocated separately. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Sets the values of the internal structure fields. + * - Zeros out the values in the state buffer. + * - Checks to make sure that the length of the filter is a multiple of the interpolation factor. + * To do this manually without calling the init function, assign the follow subfields of the instance structure: + * L (interpolation factor), pCoeffs, phaseLength (numTaps / L), pState. Also set all of the values in pState to zero. + * + * \par + * Use of the initialization function is optional. + * However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + * To place an instance structure into a const data section, the instance structure must be manually initialized. + * The code below statically initializes each of the 3 different data type filter instance structures + *
    
+ * arm_fir_interpolate_instance_f32 S = {L, phaseLength, pCoeffs, pState};    
+ * arm_fir_interpolate_instance_q31 S = {L, phaseLength, pCoeffs, pState};    
+ * arm_fir_interpolate_instance_q15 S = {L, phaseLength, pCoeffs, pState};    
+ * 
+ * where L is the interpolation factor; phaseLength=numTaps/L is the + * length of each of the shorter FIR filters used internally, + * pCoeffs is the address of the coefficient buffer; + * pState is the address of the state buffer. + * Be sure to set the values in the state buffer to zeros when doing static initialization. + * + * \par Fixed-Point Behavior + * Care must be taken when using the fixed-point versions of the FIR interpolate filter functions. + * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + +/** + * @addtogroup FIR_Interpolate + * @{ + */ + +/** + * @brief Processing function for the floating-point FIR interpolator. + * @param[in] *S points to an instance of the floating-point FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + +void arm_fir_interpolate_f32( + const arm_fir_interpolate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *ptr1, *ptr2; /* Temporary pointers for state and coefficient buffers */ + float32_t sum0; /* Accumulators */ + float32_t x0, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t i, blkCnt, j; /* Loop counters */ + uint16_t phaseLen = S->phaseLength, tapCnt; /* Length of each polyphase filter component */ + float32_t acc0, acc1, acc2, acc3; + float32_t x1, x2, x3; + uint32_t blkCntN4; + float32_t c1, c2, c3; + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (phaseLen - 1u); + + /* Initialise blkCnt */ + blkCnt = blockSize / 4; + blkCntN4 = blockSize - (4 * blkCnt); + + /* Samples loop unrolled by 4 */ + while(blkCnt > 0u) + { + /* Copy new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1u; + + /* Loop over the Interpolation factor. */ + i = (S->L); + + while(i > 0u) + { + /* Set accumulator to zero */ + acc0 = 0.0f; + acc1 = 0.0f; + acc2 = 0.0f; + acc3 = 0.0f; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2u; + + x0 = *(ptr1++); + x1 = *(ptr1++); + x2 = *(ptr1++); + + while(tapCnt > 0u) + { + + /* Read the input sample */ + x3 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Read the coefficient */ + c1 = *(ptr2 + S->L); + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += x1 * c1; + acc1 += x2 * c1; + acc2 += x3 * c1; + acc3 += x0 * c1; + + /* Read the coefficient */ + c2 = *(ptr2 + S->L * 2); + + /* Read the input sample */ + x1 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += x2 * c2; + acc1 += x3 * c2; + acc2 += x0 * c2; + acc3 += x1 * c2; + + /* Read the coefficient */ + c3 = *(ptr2 + S->L * 3); + + /* Read the input sample */ + x2 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += x3 * c3; + acc1 += x0 * c3; + acc2 += x1 * c3; + acc3 += x2 * c3; + + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += 4 * S->L; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen % 0x4u; + + while(tapCnt > 0u) + { + + /* Read the input sample */ + x3 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* update states for next sample processing */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst = acc0; + *(pDst + S->L) = acc1; + *(pDst + 2 * S->L) = acc2; + *(pDst + 3 * S->L) = acc3; + + pDst++; + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 4; + + pDst += S->L * 3; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + + while(blkCntN4 > 0u) + { + /* Copy new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1u; + + /* Loop over the Interpolation factor. */ + i = S->L; + while(i > 0u) + { + /* Set accumulator to zero */ + sum0 = 0.0f; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2u; + while(tapCnt > 0u) + { + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + sum0 += *(ptr1++) * (*ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = sum0; + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCntN4--; + } + + /* Processing is complete. + ** Now copy the last phaseLen - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + tapCnt = (phaseLen - 1u) >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (phaseLen - 1u) % 0x04u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } +} + +#else + + /* Run the below code for Cortex-M0 */ + +void arm_fir_interpolate_f32( + const arm_fir_interpolate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *ptr1, *ptr2; /* Temporary pointers for state and coefficient buffers */ + + + float32_t sum; /* Accumulator */ + uint32_t i, blkCnt; /* Loop counters */ + uint16_t phaseLen = S->phaseLength, tapCnt; /* Length of each polyphase filter component */ + + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (phaseLen - 1u); + + /* Total number of intput samples */ + blkCnt = blockSize; + + /* Loop over the blockSize. */ + while(blkCnt > 0u) + { + /* Copy new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Loop over the Interpolation factor. */ + i = S->L; + + while(i > 0u) + { + /* Set accumulator to zero */ + sum = 0.0f; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (i - 1u); + + /* Loop over the polyPhase length */ + tapCnt = phaseLen; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + sum += *ptr1++ * *ptr2; + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = sum; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last phaseLen - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + tapCnt = phaseLen - 1u; + + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + + /** + * @} end of FIR_Interpolate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,121 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_interpolate_init_f32.c +* +* Description: Floating-point FIR interpolator initialization function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Interpolate + * @{ + */ + +/** + * @brief Initialization function for the floating-point FIR interpolator. + * @param[in,out] *S points to an instance of the floating-point FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[numTaps-2], ..., b[1], b[0]}    
+ * 
+ * The length of the filter numTaps must be a multiple of the interpolation factor L. + * \par + * pState points to the array of state variables. + * pState is of length (numTaps/L)+blockSize-1 words + * where blockSize is the number of input samples processed by each call to arm_fir_interpolate_f32(). + */ + +arm_status arm_fir_interpolate_init_f32( + arm_fir_interpolate_instance_f32 * S, + uint8_t L, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The filter length must be a multiple of the interpolation factor */ + if((numTaps % L) != 0u) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign Interpolation factor */ + S->L = L; + + /* Assign polyPhaseLength */ + S->phaseLength = numTaps / L; + + /* Clear state buffer and size of state array is always phaseLength + blockSize - 1 */ + memset(pState, 0, + (blockSize + + ((uint32_t) S->phaseLength - 1u)) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + + status = ARM_MATH_SUCCESS; + } + + return (status); + +} + + /** + * @} end of FIR_Interpolate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,120 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_interpolate_init_q15.c +* +* Description: Q15 FIR interpolator initialization function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Interpolate + * @{ + */ + +/** + * @brief Initialization function for the Q15 FIR interpolator. + * @param[in,out] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[numTaps-2], ..., b[1], b[0]}    
+ * 
+ * The length of the filter numTaps must be a multiple of the interpolation factor L. + * \par + * pState points to the array of state variables. + * pState is of length (numTaps/L)+blockSize-1 words + * where blockSize is the number of input samples processed by each call to arm_fir_interpolate_q15(). + */ + +arm_status arm_fir_interpolate_init_q15( + arm_fir_interpolate_instance_q15 * S, + uint8_t L, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The filter length must be a multiple of the interpolation factor */ + if((numTaps % L) != 0u) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign Interpolation factor */ + S->L = L; + + /* Assign polyPhaseLength */ + S->phaseLength = numTaps / L; + + /* Clear state buffer and size of buffer is always phaseLength + blockSize - 1 */ + memset(pState, 0, + (blockSize + ((uint32_t) S->phaseLength - 1u)) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + + status = ARM_MATH_SUCCESS; + } + + return (status); + +} + + /** + * @} end of FIR_Interpolate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,121 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_interpolate_init_q31.c +* +* Description: Q31 FIR interpolator initialization function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Interpolate + * @{ + */ + + +/** + * @brief Initialization function for the Q31 FIR interpolator. + * @param[in,out] *S points to an instance of the Q31 FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[numTaps-2], ..., b[1], b[0]}    
+ * 
+ * The length of the filter numTaps must be a multiple of the interpolation factor L. + * \par + * pState points to the array of state variables. + * pState is of length (numTaps/L)+blockSize-1 words + * where blockSize is the number of input samples processed by each call to arm_fir_interpolate_q31(). + */ + +arm_status arm_fir_interpolate_init_q31( + arm_fir_interpolate_instance_q31 * S, + uint8_t L, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The filter length must be a multiple of the interpolation factor */ + if((numTaps % L) != 0u) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign Interpolation factor */ + S->L = L; + + /* Assign polyPhaseLength */ + S->phaseLength = numTaps / L; + + /* Clear state buffer and size of buffer is always phaseLength + blockSize - 1 */ + memset(pState, 0, + (blockSize + ((uint32_t) S->phaseLength - 1u)) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; + + status = ARM_MATH_SUCCESS; + } + + return (status); + +} + + /** + * @} end of FIR_Interpolate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,508 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_interpolate_q15.c +* +* Description: Q15 FIR interpolation. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Interpolate + * @{ + */ + +/** + * @brief Processing function for the Q15 FIR interpolator. + * @param[in] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + * Lastly, the accumulator is saturated to yield a result in 1.15 format. + */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + +void arm_fir_interpolate_q15( + const arm_fir_interpolate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *ptr1, *ptr2; /* Temporary pointers for state and coefficient buffers */ + q63_t sum0; /* Accumulators */ + q15_t x0, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t i, blkCnt, j, tapCnt; /* Loop counters */ + uint16_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ + uint32_t blkCntN2; + q63_t acc0, acc1; + q15_t x1; + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + ((q31_t) phaseLen - 1); + + /* Initialise blkCnt */ + blkCnt = blockSize / 2; + blkCntN2 = blockSize - (2 * blkCnt); + + /* Samples loop unrolled by 2 */ + while(blkCnt > 0u) + { + /* Copy new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1u; + + /* Loop over the Interpolation factor. */ + i = (S->L); + + while(i > 0u) + { + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2u; + + x0 = *(ptr1++); + + while(tapCnt > 0u) + { + + /* Read the input sample */ + x1 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 *c0; + acc1 += (q63_t) x1 *c0; + + + /* Read the coefficient */ + c0 = *(ptr2 + S->L); + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x1 *c0; + acc1 += (q63_t) x0 *c0; + + + /* Read the coefficient */ + c0 = *(ptr2 + S->L * 2); + + /* Read the input sample */ + x1 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 *c0; + acc1 += (q63_t) x1 *c0; + + /* Read the coefficient */ + c0 = *(ptr2 + S->L * 3); + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x1 *c0; + acc1 += (q63_t) x0 *c0; + + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += 4 * S->L; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen % 0x4u; + + while(tapCnt > 0u) + { + + /* Read the input sample */ + x1 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 *c0; + acc1 += (q63_t) x1 *c0; + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* update states for next sample processing */ + x0 = x1; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst = (q15_t) (__SSAT((acc0 >> 15), 16)); + *(pDst + S->L) = (q15_t) (__SSAT((acc1 >> 15), 16)); + + pDst++; + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 2; + + pDst += S->L; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 2, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blkCntN2; + + /* Loop over the blockSize. */ + while(blkCnt > 0u) + { + /* Copy new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1u; + + /* Loop over the Interpolation factor. */ + i = S->L; + while(i > 0u) + { + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2; + while(tapCnt > 0u) + { + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen & 0x3u; + + while(tapCnt > 0u) + { + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + + /* Processing is complete. + ** Now copy the last phaseLen - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = ((uint32_t) phaseLen - 1u) >> 2u; + + /* copy data */ + while(i > 0u) + { +#ifndef UNALIGNED_SUPPORT_DISABLE + + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + +#else + + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Decrement the loop counter */ + i--; + } + + i = ((uint32_t) phaseLen - 1u) % 0x04u; + + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } +} + +#else + + /* Run the below code for Cortex-M0 */ + +void arm_fir_interpolate_q15( + const arm_fir_interpolate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *ptr1, *ptr2; /* Temporary pointers for state and coefficient buffers */ + q63_t sum; /* Accumulator */ + q15_t x0, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t i, blkCnt, tapCnt; /* Loop counters */ + uint16_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ + + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (phaseLen - 1u); + + /* Total number of intput samples */ + blkCnt = blockSize; + + /* Loop over the blockSize. */ + while(blkCnt > 0u) + { + /* Copy new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Loop over the Interpolation factor. */ + i = S->L; + + while(i > 0u) + { + /* Set accumulator to zero */ + sum = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (i - 1u); + + /* Loop over the polyPhase length */ + tapCnt = (uint32_t) phaseLen; + + while(tapCnt > 0u) + { + /* Read the coefficient */ + c0 = *ptr2; + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *ptr1++; + + /* Perform the multiply-accumulate */ + sum += ((q31_t) x0 * c0); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Store the result after converting to 1.15 format in the destination buffer */ + *pDst++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last phaseLen - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = (uint32_t) phaseLen - 1u; + + while(i > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } + +} + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + /** + * @} end of FIR_Interpolate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,504 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_interpolate_q31.c +* +* Description: Q31 FIR interpolation. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Interpolate + * @{ + */ + +/** + * @brief Processing function for the Q31 FIR interpolator. + * @param[in] *S points to an instance of the Q31 FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clip. + * In order to avoid overflows completely the input signal must be scaled down by 1/(numTaps/L). + * since numTaps/L additions occur per output sample. + * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. + */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + +void arm_fir_interpolate_q31( + const arm_fir_interpolate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t *ptr1, *ptr2; /* Temporary pointers for state and coefficient buffers */ + q63_t sum0; /* Accumulators */ + q31_t x0, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t i, blkCnt, j; /* Loop counters */ + uint16_t phaseLen = S->phaseLength, tapCnt; /* Length of each polyphase filter component */ + + uint32_t blkCntN2; + q63_t acc0, acc1; + q31_t x1; + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + ((q31_t) phaseLen - 1); + + /* Initialise blkCnt */ + blkCnt = blockSize / 2; + blkCntN2 = blockSize - (2 * blkCnt); + + /* Samples loop unrolled by 2 */ + while(blkCnt > 0u) + { + /* Copy new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1u; + + /* Loop over the Interpolation factor. */ + i = (S->L); + + while(i > 0u) + { + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2u; + + x0 = *(ptr1++); + + while(tapCnt > 0u) + { + + /* Read the input sample */ + x1 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 *c0; + acc1 += (q63_t) x1 *c0; + + + /* Read the coefficient */ + c0 = *(ptr2 + S->L); + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x1 *c0; + acc1 += (q63_t) x0 *c0; + + + /* Read the coefficient */ + c0 = *(ptr2 + S->L * 2); + + /* Read the input sample */ + x1 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 *c0; + acc1 += (q63_t) x1 *c0; + + /* Read the coefficient */ + c0 = *(ptr2 + S->L * 3); + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x1 *c0; + acc1 += (q63_t) x0 *c0; + + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += 4 * S->L; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen % 0x4u; + + while(tapCnt > 0u) + { + + /* Read the input sample */ + x1 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 *c0; + acc1 += (q63_t) x1 *c0; + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* update states for next sample processing */ + x0 = x1; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst = (q31_t) (acc0 >> 31); + *(pDst + S->L) = (q31_t) (acc1 >> 31); + + + pDst++; + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 2; + + pDst += S->L; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 2, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blkCntN2; + + /* Loop over the blockSize. */ + while(blkCnt > 0u) + { + /* Copy new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1u; + + /* Loop over the Interpolation factor. */ + i = S->L; + while(i > 0u) + { + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2; + while(tapCnt > 0u) + { + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen & 0x3u; + + while(tapCnt > 0u) + { + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + sum0 += (q63_t) x0 *c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (sum0 >> 31); + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last phaseLen - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + tapCnt = (phaseLen - 1u) >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (phaseLen - 1u) % 0x04u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} + + +#else + +void arm_fir_interpolate_q31( + const arm_fir_interpolate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t *ptr1, *ptr2; /* Temporary pointers for state and coefficient buffers */ + + /* Run the below code for Cortex-M0 */ + + q63_t sum; /* Accumulator */ + q31_t x0, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t i, blkCnt; /* Loop counters */ + uint16_t phaseLen = S->phaseLength, tapCnt; /* Length of each polyphase filter component */ + + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + ((q31_t) phaseLen - 1); + + /* Total number of intput samples */ + blkCnt = blockSize; + + /* Loop over the blockSize. */ + while(blkCnt > 0u) + { + /* Copy new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Loop over the Interpolation factor. */ + i = S->L; + + while(i > 0u) + { + /* Set accumulator to zero */ + sum = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (i - 1u); + + tapCnt = phaseLen; + + while(tapCnt > 0u) + { + /* Read the coefficient */ + c0 = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0 = *ptr1++; + + /* Perform the multiply-accumulate */ + sum += (q63_t) x0 *c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (sum >> 31); + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last phaseLen - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + tapCnt = phaseLen - 1u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + /** + * @} end of FIR_Interpolate group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,506 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_lattice_f32.c +* +* Description: Processing function for the floating-point FIR Lattice filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup FIR_Lattice Finite Impulse Response (FIR) Lattice Filters + * + * This set of functions implements Finite Impulse Response (FIR) lattice filters + * for Q15, Q31 and floating-point data types. Lattice filters are used in a + * variety of adaptive filter applications. The filter structure is feedforward and + * the net impulse response is finite length. + * The functions operate on blocks + * of input and output data and each call to the function processes + * blockSize samples through the filter. pSrc and + * pDst point to input and output arrays containing blockSize values. + * + * \par Algorithm: + * \image html FIRLattice.gif "Finite Impulse Response Lattice filter" + * The following difference equation is implemented: + *
    
+ *    f0[n] = g0[n] = x[n]    
+ *    fm[n] = fm-1[n] + km * gm-1[n-1] for m = 1, 2, ...M    
+ *    gm[n] = km * fm-1[n] + gm-1[n-1] for m = 1, 2, ...M    
+ *    y[n] = fM[n]    
+ * 
+ * \par + * pCoeffs points to tha array of reflection coefficients of size numStages. + * Reflection Coefficients are stored in the following order. + * \par + *
    
+ *    {k1, k2, ..., kM}    
+ * 
+ * where M is number of stages + * \par + * pState points to a state array of size numStages. + * The state variables (g values) hold previous inputs and are stored in the following order. + *
    
+ *    {g0[n], g1[n], g2[n] ...gM-1[n]}    
+ * 
+ * The state variables are updated after each block of data is processed; the coefficients are untouched. + * \par Instance Structure + * The coefficients and state variables for a filter are stored together in an instance data structure. + * A separate instance structure must be defined for each filter. + * Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Sets the values of the internal structure fields. + * - Zeros out the values in the state buffer. + * To do this manually without calling the init function, assign the follow subfields of the instance structure: + * numStages, pCoeffs, pState. Also set all of the values in pState to zero. + * + * \par + * Use of the initialization function is optional. + * However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + * To place an instance structure into a const data section, the instance structure must be manually initialized. + * Set the values in the state buffer to zeros and then manually initialize the instance structure as follows: + *
    
+ *arm_fir_lattice_instance_f32 S = {numStages, pState, pCoeffs};    
+ *arm_fir_lattice_instance_q31 S = {numStages, pState, pCoeffs};    
+ *arm_fir_lattice_instance_q15 S = {numStages, pState, pCoeffs};    
+ * 
+ * \par + * where numStages is the number of stages in the filter; pState is the address of the state buffer; + * pCoeffs is the address of the coefficient buffer. + * \par Fixed-Point Behavior + * Care must be taken when using the fixed-point versions of the FIR Lattice filter functions. + * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + +/** + * @addtogroup FIR_Lattice + * @{ + */ + + + /** + * @brief Processing function for the floating-point FIR lattice filter. + * @param[in] *S points to an instance of the floating-point FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + +void arm_fir_lattice_f32( + const arm_fir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t *pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *px; /* temporary state pointer */ + float32_t *pk; /* temporary coefficient pointer */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float32_t fcurr1, fnext1, gcurr1, gnext1; /* temporary variables for first sample in loop unrolling */ + float32_t fcurr2, fnext2, gnext2; /* temporary variables for second sample in loop unrolling */ + float32_t fcurr3, fnext3, gnext3; /* temporary variables for third sample in loop unrolling */ + float32_t fcurr4, fnext4, gnext4; /* temporary variables for fourth sample in loop unrolling */ + uint32_t numStages = S->numStages; /* Number of stages in the filter */ + uint32_t blkCnt, stageCnt; /* temporary variables for counts */ + + gcurr1 = 0.0f; + pState = &S->pState[0]; + + blkCnt = blockSize >> 2; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + + /* Read two samples from input buffer */ + /* f0(n) = x(n) */ + fcurr1 = *pSrc++; + fcurr2 = *pSrc++; + + /* Initialize coeff pointer */ + pk = (pCoeffs); + + /* Initialize state pointer */ + px = pState; + + /* Read g0(n-1) from state */ + gcurr1 = *px; + + /* Process first sample for first tap */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext1 = fcurr1 + ((*pk) * gcurr1); + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext1 = (fcurr1 * (*pk)) + gcurr1; + + /* Process second sample for first tap */ + /* for sample 2 processing */ + fnext2 = fcurr2 + ((*pk) * fcurr1); + gnext2 = (fcurr2 * (*pk)) + fcurr1; + + /* Read next two samples from input buffer */ + /* f0(n+2) = x(n+2) */ + fcurr3 = *pSrc++; + fcurr4 = *pSrc++; + + /* Copy only last input samples into the state buffer + which will be used for next four samples processing */ + *px++ = fcurr4; + + /* Process third sample for first tap */ + fnext3 = fcurr3 + ((*pk) * fcurr2); + gnext3 = (fcurr3 * (*pk)) + fcurr2; + + /* Process fourth sample for first tap */ + fnext4 = fcurr4 + ((*pk) * fcurr3); + gnext4 = (fcurr4 * (*pk++)) + fcurr3; + + /* Update of f values for next coefficient set processing */ + fcurr1 = fnext1; + fcurr2 = fnext2; + fcurr3 = fnext3; + fcurr4 = fnext4; + + /* Loop unrolling. Process 4 taps at a time . */ + stageCnt = (numStages - 1u) >> 2u; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numStages-3 coefficients. */ + + /* Process 2nd, 3rd, 4th and 5th taps ... here */ + while(stageCnt > 0u) + { + /* Read g1(n-1), g3(n-1) .... from state */ + gcurr1 = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext4; + + /* Process first sample for 2nd, 6th .. tap */ + /* Sample processing for K2, K6.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext1 = fcurr1 + ((*pk) * gcurr1); + /* Process second sample for 2nd, 6th .. tap */ + /* for sample 2 processing */ + fnext2 = fcurr2 + ((*pk) * gnext1); + /* Process third sample for 2nd, 6th .. tap */ + fnext3 = fcurr3 + ((*pk) * gnext2); + /* Process fourth sample for 2nd, 6th .. tap */ + fnext4 = fcurr4 + ((*pk) * gnext3); + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + /* Calculation of state values for next stage */ + gnext4 = (fcurr4 * (*pk)) + gnext3; + gnext3 = (fcurr3 * (*pk)) + gnext2; + gnext2 = (fcurr2 * (*pk)) + gnext1; + gnext1 = (fcurr1 * (*pk++)) + gcurr1; + + + /* Read g2(n-1), g4(n-1) .... from state */ + gcurr1 = *px; + + /* save g2(n) in state buffer */ + *px++ = gnext4; + + /* Sample processing for K3, K7.... */ + /* Process first sample for 3rd, 7th .. tap */ + /* f3(n) = f2(n) + K3 * g2(n-1) */ + fcurr1 = fnext1 + ((*pk) * gcurr1); + /* Process second sample for 3rd, 7th .. tap */ + fcurr2 = fnext2 + ((*pk) * gnext1); + /* Process third sample for 3rd, 7th .. tap */ + fcurr3 = fnext3 + ((*pk) * gnext2); + /* Process fourth sample for 3rd, 7th .. tap */ + fcurr4 = fnext4 + ((*pk) * gnext3); + + /* Calculation of state values for next stage */ + /* g3(n) = f2(n) * K3 + g2(n-1) */ + gnext4 = (fnext4 * (*pk)) + gnext3; + gnext3 = (fnext3 * (*pk)) + gnext2; + gnext2 = (fnext2 * (*pk)) + gnext1; + gnext1 = (fnext1 * (*pk++)) + gcurr1; + + + /* Read g1(n-1), g3(n-1) .... from state */ + gcurr1 = *px; + + /* save g3(n) in state buffer */ + *px++ = gnext4; + + /* Sample processing for K4, K8.... */ + /* Process first sample for 4th, 8th .. tap */ + /* f4(n) = f3(n) + K4 * g3(n-1) */ + fnext1 = fcurr1 + ((*pk) * gcurr1); + /* Process second sample for 4th, 8th .. tap */ + /* for sample 2 processing */ + fnext2 = fcurr2 + ((*pk) * gnext1); + /* Process third sample for 4th, 8th .. tap */ + fnext3 = fcurr3 + ((*pk) * gnext2); + /* Process fourth sample for 4th, 8th .. tap */ + fnext4 = fcurr4 + ((*pk) * gnext3); + + /* g4(n) = f3(n) * K4 + g3(n-1) */ + /* Calculation of state values for next stage */ + gnext4 = (fcurr4 * (*pk)) + gnext3; + gnext3 = (fcurr3 * (*pk)) + gnext2; + gnext2 = (fcurr2 * (*pk)) + gnext1; + gnext1 = (fcurr1 * (*pk++)) + gcurr1; + + /* Read g2(n-1), g4(n-1) .... from state */ + gcurr1 = *px; + + /* save g4(n) in state buffer */ + *px++ = gnext4; + + /* Sample processing for K5, K9.... */ + /* Process first sample for 5th, 9th .. tap */ + /* f5(n) = f4(n) + K5 * g4(n-1) */ + fcurr1 = fnext1 + ((*pk) * gcurr1); + /* Process second sample for 5th, 9th .. tap */ + fcurr2 = fnext2 + ((*pk) * gnext1); + /* Process third sample for 5th, 9th .. tap */ + fcurr3 = fnext3 + ((*pk) * gnext2); + /* Process fourth sample for 5th, 9th .. tap */ + fcurr4 = fnext4 + ((*pk) * gnext3); + + /* Calculation of state values for next stage */ + /* g5(n) = f4(n) * K5 + g4(n-1) */ + gnext4 = (fnext4 * (*pk)) + gnext3; + gnext3 = (fnext3 * (*pk)) + gnext2; + gnext2 = (fnext2 * (*pk)) + gnext1; + gnext1 = (fnext1 * (*pk++)) + gcurr1; + + stageCnt--; + } + + /* If the (filter length -1) is not a multiple of 4, compute the remaining filter taps */ + stageCnt = (numStages - 1u) % 0x4u; + + while(stageCnt > 0u) + { + gcurr1 = *px; + + /* save g value in state buffer */ + *px++ = gnext4; + + /* Process four samples for last three taps here */ + fnext1 = fcurr1 + ((*pk) * gcurr1); + fnext2 = fcurr2 + ((*pk) * gnext1); + fnext3 = fcurr3 + ((*pk) * gnext2); + fnext4 = fcurr4 + ((*pk) * gnext3); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext4 = (fcurr4 * (*pk)) + gnext3; + gnext3 = (fcurr3 * (*pk)) + gnext2; + gnext2 = (fcurr2 * (*pk)) + gnext1; + gnext1 = (fcurr1 * (*pk++)) + gcurr1; + + /* Update of f values for next coefficient set processing */ + fcurr1 = fnext1; + fcurr2 = fnext2; + fcurr3 = fnext3; + fcurr4 = fnext4; + + stageCnt--; + + } + + /* The results in the 4 accumulators, store in the destination buffer. */ + /* y(n) = fN(n) */ + *pDst++ = fcurr1; + *pDst++ = fcurr2; + *pDst++ = fcurr3; + *pDst++ = fcurr4; + + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* f0(n) = x(n) */ + fcurr1 = *pSrc++; + + /* Initialize coeff pointer */ + pk = (pCoeffs); + + /* Initialize state pointer */ + px = pState; + + /* read g2(n) from state buffer */ + gcurr1 = *px; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext1 = fcurr1 + ((*pk) * gcurr1); + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext1 = (fcurr1 * (*pk++)) + gcurr1; + + /* save g1(n) in state buffer */ + *px++ = fcurr1; + + /* f1(n) is saved in fcurr1 + for next stage processing */ + fcurr1 = fnext1; + + stageCnt = (numStages - 1u); + + /* stage loop */ + while(stageCnt > 0u) + { + /* read g2(n) from state buffer */ + gcurr1 = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext1; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext1 = fcurr1 + ((*pk) * gcurr1); + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext1 = (fcurr1 * (*pk++)) + gcurr1; + + /* f1(n) is saved in fcurr1 + for next stage processing */ + fcurr1 = fnext1; + + stageCnt--; + + } + + /* y(n) = fN(n) */ + *pDst++ = fcurr1; + + blkCnt--; + + } + +#else + + /* Run the below code for Cortex-M0 */ + + float32_t fcurr, fnext, gcurr, gnext; /* temporary variables */ + uint32_t numStages = S->numStages; /* Length of the filter */ + uint32_t blkCnt, stageCnt; /* temporary variables for counts */ + + pState = &S->pState[0]; + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* f0(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize coeff pointer */ + pk = pCoeffs; + + /* Initialize state pointer */ + px = pState; + + /* read g0(n-1) from state buffer */ + gcurr = *px; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext = fcurr + ((*pk) * gcurr); + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext = (fcurr * (*pk++)) + gcurr; + + /* save f0(n) in state buffer */ + *px++ = fcurr; + + /* f1(n) is saved in fcurr + for next stage processing */ + fcurr = fnext; + + stageCnt = (numStages - 1u); + + /* stage loop */ + while(stageCnt > 0u) + { + /* read g2(n) from state buffer */ + gcurr = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext = fcurr + ((*pk) * gcurr); + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext = (fcurr * (*pk++)) + gcurr; + + /* f1(n) is saved in fcurr1 + for next stage processing */ + fcurr = fnext; + + stageCnt--; + + } + + /* y(n) = fN(n) */ + *pDst++ = fcurr; + + blkCnt--; + + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,83 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_lattice_init_f32.c +* +* Description: Floating-point FIR Lattice filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Lattice + * @{ + */ + +/** + * @brief Initialization function for the floating-point FIR lattice filter. + * @param[in] *S points to an instance of the floating-point FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + +void arm_fir_lattice_init_f32( + arm_fir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pCoeffs, + float32_t * pState) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always numStages */ + memset(pState, 0, (numStages) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + +} + +/** + * @} end of FIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,83 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_lattice_init_q15.c +* +* Description: Q15 FIR Lattice filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Lattice + * @{ + */ + + /** + * @brief Initialization function for the Q15 FIR lattice filter. + * @param[in] *S points to an instance of the Q15 FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + +void arm_fir_lattice_init_q15( + arm_fir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pCoeffs, + q15_t * pState) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always numStages */ + memset(pState, 0, (numStages) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + +} + +/** + * @} end of FIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,83 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_lattice_init_q31.c +* +* Description: Q31 FIR lattice filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Lattice + * @{ + */ + + /** + * @brief Initialization function for the Q31 FIR lattice filter. + * @param[in] *S points to an instance of the Q31 FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + +void arm_fir_lattice_init_q31( + arm_fir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pCoeffs, + q31_t * pState) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always numStages */ + memset(pState, 0, (numStages) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; + +} + +/** + * @} end of FIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,536 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_lattice_q15.c +* +* Description: Q15 FIR lattice filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Lattice + * @{ + */ + + +/** + * @brief Processing function for the Q15 FIR lattice filter. + * @param[in] *S points to an instance of the Q15 FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + +void arm_fir_lattice_q15( + const arm_fir_lattice_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *px; /* temporary state pointer */ + q15_t *pk; /* temporary coefficient pointer */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t fcurnt1, fnext1, gcurnt1 = 0, gnext1; /* temporary variables for first sample in loop unrolling */ + q31_t fcurnt2, fnext2, gnext2; /* temporary variables for second sample in loop unrolling */ + q31_t fcurnt3, fnext3, gnext3; /* temporary variables for third sample in loop unrolling */ + q31_t fcurnt4, fnext4, gnext4; /* temporary variables for fourth sample in loop unrolling */ + uint32_t numStages = S->numStages; /* Number of stages in the filter */ + uint32_t blkCnt, stageCnt; /* temporary variables for counts */ + + pState = &S->pState[0]; + + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + + /* Read two samples from input buffer */ + /* f0(n) = x(n) */ + fcurnt1 = *pSrc++; + fcurnt2 = *pSrc++; + + /* Initialize coeff pointer */ + pk = (pCoeffs); + + /* Initialize state pointer */ + px = pState; + + /* Read g0(n-1) from state */ + gcurnt1 = *px; + + /* Process first sample for first tap */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext1 = (q31_t) ((gcurnt1 * (*pk)) >> 15u) + fcurnt1; + fnext1 = __SSAT(fnext1, 16); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext1 = (q31_t) ((fcurnt1 * (*pk)) >> 15u) + gcurnt1; + gnext1 = __SSAT(gnext1, 16); + + /* Process second sample for first tap */ + /* for sample 2 processing */ + fnext2 = (q31_t) ((fcurnt1 * (*pk)) >> 15u) + fcurnt2; + fnext2 = __SSAT(fnext2, 16); + + gnext2 = (q31_t) ((fcurnt2 * (*pk)) >> 15u) + fcurnt1; + gnext2 = __SSAT(gnext2, 16); + + + /* Read next two samples from input buffer */ + /* f0(n+2) = x(n+2) */ + fcurnt3 = *pSrc++; + fcurnt4 = *pSrc++; + + /* Copy only last input samples into the state buffer + which is used for next four samples processing */ + *px++ = (q15_t) fcurnt4; + + /* Process third sample for first tap */ + fnext3 = (q31_t) ((fcurnt2 * (*pk)) >> 15u) + fcurnt3; + fnext3 = __SSAT(fnext3, 16); + gnext3 = (q31_t) ((fcurnt3 * (*pk)) >> 15u) + fcurnt2; + gnext3 = __SSAT(gnext3, 16); + + /* Process fourth sample for first tap */ + fnext4 = (q31_t) ((fcurnt3 * (*pk)) >> 15u) + fcurnt4; + fnext4 = __SSAT(fnext4, 16); + gnext4 = (q31_t) ((fcurnt4 * (*pk++)) >> 15u) + fcurnt3; + gnext4 = __SSAT(gnext4, 16); + + /* Update of f values for next coefficient set processing */ + fcurnt1 = fnext1; + fcurnt2 = fnext2; + fcurnt3 = fnext3; + fcurnt4 = fnext4; + + + /* Loop unrolling. Process 4 taps at a time . */ + stageCnt = (numStages - 1u) >> 2; + + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numStages-3 coefficients. */ + + /* Process 2nd, 3rd, 4th and 5th taps ... here */ + while(stageCnt > 0u) + { + /* Read g1(n-1), g3(n-1) .... from state */ + gcurnt1 = *px; + + /* save g1(n) in state buffer */ + *px++ = (q15_t) gnext4; + + /* Process first sample for 2nd, 6th .. tap */ + /* Sample processing for K2, K6.... */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext1 = (q31_t) ((gcurnt1 * (*pk)) >> 15u) + fcurnt1; + fnext1 = __SSAT(fnext1, 16); + + + /* Process second sample for 2nd, 6th .. tap */ + /* for sample 2 processing */ + fnext2 = (q31_t) ((gnext1 * (*pk)) >> 15u) + fcurnt2; + fnext2 = __SSAT(fnext2, 16); + /* Process third sample for 2nd, 6th .. tap */ + fnext3 = (q31_t) ((gnext2 * (*pk)) >> 15u) + fcurnt3; + fnext3 = __SSAT(fnext3, 16); + /* Process fourth sample for 2nd, 6th .. tap */ + /* fnext4 = fcurnt4 + (*pk) * gnext3; */ + fnext4 = (q31_t) ((gnext3 * (*pk)) >> 15u) + fcurnt4; + fnext4 = __SSAT(fnext4, 16); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + /* Calculation of state values for next stage */ + gnext4 = (q31_t) ((fcurnt4 * (*pk)) >> 15u) + gnext3; + gnext4 = __SSAT(gnext4, 16); + gnext3 = (q31_t) ((fcurnt3 * (*pk)) >> 15u) + gnext2; + gnext3 = __SSAT(gnext3, 16); + + gnext2 = (q31_t) ((fcurnt2 * (*pk)) >> 15u) + gnext1; + gnext2 = __SSAT(gnext2, 16); + + gnext1 = (q31_t) ((fcurnt1 * (*pk++)) >> 15u) + gcurnt1; + gnext1 = __SSAT(gnext1, 16); + + + /* Read g2(n-1), g4(n-1) .... from state */ + gcurnt1 = *px; + + /* save g1(n) in state buffer */ + *px++ = (q15_t) gnext4; + + /* Sample processing for K3, K7.... */ + /* Process first sample for 3rd, 7th .. tap */ + /* f3(n) = f2(n) + K3 * g2(n-1) */ + fcurnt1 = (q31_t) ((gcurnt1 * (*pk)) >> 15u) + fnext1; + fcurnt1 = __SSAT(fcurnt1, 16); + + /* Process second sample for 3rd, 7th .. tap */ + fcurnt2 = (q31_t) ((gnext1 * (*pk)) >> 15u) + fnext2; + fcurnt2 = __SSAT(fcurnt2, 16); + + /* Process third sample for 3rd, 7th .. tap */ + fcurnt3 = (q31_t) ((gnext2 * (*pk)) >> 15u) + fnext3; + fcurnt3 = __SSAT(fcurnt3, 16); + + /* Process fourth sample for 3rd, 7th .. tap */ + fcurnt4 = (q31_t) ((gnext3 * (*pk)) >> 15u) + fnext4; + fcurnt4 = __SSAT(fcurnt4, 16); + + /* Calculation of state values for next stage */ + /* g3(n) = f2(n) * K3 + g2(n-1) */ + gnext4 = (q31_t) ((fnext4 * (*pk)) >> 15u) + gnext3; + gnext4 = __SSAT(gnext4, 16); + + gnext3 = (q31_t) ((fnext3 * (*pk)) >> 15u) + gnext2; + gnext3 = __SSAT(gnext3, 16); + + gnext2 = (q31_t) ((fnext2 * (*pk)) >> 15u) + gnext1; + gnext2 = __SSAT(gnext2, 16); + + gnext1 = (q31_t) ((fnext1 * (*pk++)) >> 15u) + gcurnt1; + gnext1 = __SSAT(gnext1, 16); + + /* Read g1(n-1), g3(n-1) .... from state */ + gcurnt1 = *px; + + /* save g1(n) in state buffer */ + *px++ = (q15_t) gnext4; + + /* Sample processing for K4, K8.... */ + /* Process first sample for 4th, 8th .. tap */ + /* f4(n) = f3(n) + K4 * g3(n-1) */ + fnext1 = (q31_t) ((gcurnt1 * (*pk)) >> 15u) + fcurnt1; + fnext1 = __SSAT(fnext1, 16); + + /* Process second sample for 4th, 8th .. tap */ + /* for sample 2 processing */ + fnext2 = (q31_t) ((gnext1 * (*pk)) >> 15u) + fcurnt2; + fnext2 = __SSAT(fnext2, 16); + + /* Process third sample for 4th, 8th .. tap */ + fnext3 = (q31_t) ((gnext2 * (*pk)) >> 15u) + fcurnt3; + fnext3 = __SSAT(fnext3, 16); + + /* Process fourth sample for 4th, 8th .. tap */ + fnext4 = (q31_t) ((gnext3 * (*pk)) >> 15u) + fcurnt4; + fnext4 = __SSAT(fnext4, 16); + + /* g4(n) = f3(n) * K4 + g3(n-1) */ + /* Calculation of state values for next stage */ + gnext4 = (q31_t) ((fcurnt4 * (*pk)) >> 15u) + gnext3; + gnext4 = __SSAT(gnext4, 16); + + gnext3 = (q31_t) ((fcurnt3 * (*pk)) >> 15u) + gnext2; + gnext3 = __SSAT(gnext3, 16); + + gnext2 = (q31_t) ((fcurnt2 * (*pk)) >> 15u) + gnext1; + gnext2 = __SSAT(gnext2, 16); + gnext1 = (q31_t) ((fcurnt1 * (*pk++)) >> 15u) + gcurnt1; + gnext1 = __SSAT(gnext1, 16); + + + /* Read g2(n-1), g4(n-1) .... from state */ + gcurnt1 = *px; + + /* save g4(n) in state buffer */ + *px++ = (q15_t) gnext4; + + /* Sample processing for K5, K9.... */ + /* Process first sample for 5th, 9th .. tap */ + /* f5(n) = f4(n) + K5 * g4(n-1) */ + fcurnt1 = (q31_t) ((gcurnt1 * (*pk)) >> 15u) + fnext1; + fcurnt1 = __SSAT(fcurnt1, 16); + + /* Process second sample for 5th, 9th .. tap */ + fcurnt2 = (q31_t) ((gnext1 * (*pk)) >> 15u) + fnext2; + fcurnt2 = __SSAT(fcurnt2, 16); + + /* Process third sample for 5th, 9th .. tap */ + fcurnt3 = (q31_t) ((gnext2 * (*pk)) >> 15u) + fnext3; + fcurnt3 = __SSAT(fcurnt3, 16); + + /* Process fourth sample for 5th, 9th .. tap */ + fcurnt4 = (q31_t) ((gnext3 * (*pk)) >> 15u) + fnext4; + fcurnt4 = __SSAT(fcurnt4, 16); + + /* Calculation of state values for next stage */ + /* g5(n) = f4(n) * K5 + g4(n-1) */ + gnext4 = (q31_t) ((fnext4 * (*pk)) >> 15u) + gnext3; + gnext4 = __SSAT(gnext4, 16); + gnext3 = (q31_t) ((fnext3 * (*pk)) >> 15u) + gnext2; + gnext3 = __SSAT(gnext3, 16); + gnext2 = (q31_t) ((fnext2 * (*pk)) >> 15u) + gnext1; + gnext2 = __SSAT(gnext2, 16); + gnext1 = (q31_t) ((fnext1 * (*pk++)) >> 15u) + gcurnt1; + gnext1 = __SSAT(gnext1, 16); + + stageCnt--; + } + + /* If the (filter length -1) is not a multiple of 4, compute the remaining filter taps */ + stageCnt = (numStages - 1u) % 0x4u; + + while(stageCnt > 0u) + { + gcurnt1 = *px; + + /* save g value in state buffer */ + *px++ = (q15_t) gnext4; + + /* Process four samples for last three taps here */ + fnext1 = (q31_t) ((gcurnt1 * (*pk)) >> 15u) + fcurnt1; + fnext1 = __SSAT(fnext1, 16); + fnext2 = (q31_t) ((gnext1 * (*pk)) >> 15u) + fcurnt2; + fnext2 = __SSAT(fnext2, 16); + + fnext3 = (q31_t) ((gnext2 * (*pk)) >> 15u) + fcurnt3; + fnext3 = __SSAT(fnext3, 16); + + fnext4 = (q31_t) ((gnext3 * (*pk)) >> 15u) + fcurnt4; + fnext4 = __SSAT(fnext4, 16); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext4 = (q31_t) ((fcurnt4 * (*pk)) >> 15u) + gnext3; + gnext4 = __SSAT(gnext4, 16); + gnext3 = (q31_t) ((fcurnt3 * (*pk)) >> 15u) + gnext2; + gnext3 = __SSAT(gnext3, 16); + gnext2 = (q31_t) ((fcurnt2 * (*pk)) >> 15u) + gnext1; + gnext2 = __SSAT(gnext2, 16); + gnext1 = (q31_t) ((fcurnt1 * (*pk++)) >> 15u) + gcurnt1; + gnext1 = __SSAT(gnext1, 16); + + /* Update of f values for next coefficient set processing */ + fcurnt1 = fnext1; + fcurnt2 = fnext2; + fcurnt3 = fnext3; + fcurnt4 = fnext4; + + stageCnt--; + + } + + /* The results in the 4 accumulators, store in the destination buffer. */ + /* y(n) = fN(n) */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst)++ = __PKHBT(fcurnt1, fcurnt2, 16); + *__SIMD32(pDst)++ = __PKHBT(fcurnt3, fcurnt4, 16); + +#else + + *__SIMD32(pDst)++ = __PKHBT(fcurnt2, fcurnt1, 16); + *__SIMD32(pDst)++ = __PKHBT(fcurnt4, fcurnt3, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* f0(n) = x(n) */ + fcurnt1 = *pSrc++; + + /* Initialize coeff pointer */ + pk = (pCoeffs); + + /* Initialize state pointer */ + px = pState; + + /* read g2(n) from state buffer */ + gcurnt1 = *px; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext1 = (((q31_t) gcurnt1 * (*pk)) >> 15u) + fcurnt1; + fnext1 = __SSAT(fnext1, 16); + + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext1 = (((q31_t) fcurnt1 * (*pk++)) >> 15u) + gcurnt1; + gnext1 = __SSAT(gnext1, 16); + + /* save g1(n) in state buffer */ + *px++ = (q15_t) fcurnt1; + + /* f1(n) is saved in fcurnt1 + for next stage processing */ + fcurnt1 = fnext1; + + stageCnt = (numStages - 1u); + + /* stage loop */ + while(stageCnt > 0u) + { + /* read g2(n) from state buffer */ + gcurnt1 = *px; + + /* save g1(n) in state buffer */ + *px++ = (q15_t) gnext1; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext1 = (((q31_t) gcurnt1 * (*pk)) >> 15u) + fcurnt1; + fnext1 = __SSAT(fnext1, 16); + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext1 = (((q31_t) fcurnt1 * (*pk++)) >> 15u) + gcurnt1; + gnext1 = __SSAT(gnext1, 16); + + + /* f1(n) is saved in fcurnt1 + for next stage processing */ + fcurnt1 = fnext1; + + stageCnt--; + + } + + /* y(n) = fN(n) */ + *pDst++ = __SSAT(fcurnt1, 16); + + + blkCnt--; + + } + +#else + + /* Run the below code for Cortex-M0 */ + + q31_t fcurnt, fnext, gcurnt, gnext; /* temporary variables */ + uint32_t numStages = S->numStages; /* Length of the filter */ + uint32_t blkCnt, stageCnt; /* temporary variables for counts */ + + pState = &S->pState[0]; + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* f0(n) = x(n) */ + fcurnt = *pSrc++; + + /* Initialize coeff pointer */ + pk = (pCoeffs); + + /* Initialize state pointer */ + px = pState; + + /* read g0(n-1) from state buffer */ + gcurnt = *px; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext = ((gcurnt * (*pk)) >> 15u) + fcurnt; + fnext = __SSAT(fnext, 16); + + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext = ((fcurnt * (*pk++)) >> 15u) + gcurnt; + gnext = __SSAT(gnext, 16); + + /* save f0(n) in state buffer */ + *px++ = (q15_t) fcurnt; + + /* f1(n) is saved in fcurnt + for next stage processing */ + fcurnt = fnext; + + stageCnt = (numStages - 1u); + + /* stage loop */ + while(stageCnt > 0u) + { + /* read g1(n-1) from state buffer */ + gcurnt = *px; + + /* save g0(n-1) in state buffer */ + *px++ = (q15_t) gnext; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext = ((gcurnt * (*pk)) >> 15u) + fcurnt; + fnext = __SSAT(fnext, 16); + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext = ((fcurnt * (*pk++)) >> 15u) + gcurnt; + gnext = __SSAT(gnext, 16); + + + /* f1(n) is saved in fcurnt + for next stage processing */ + fcurnt = fnext; + + stageCnt--; + + } + + /* y(n) = fN(n) */ + *pDst++ = __SSAT(fcurnt, 16); + + + blkCnt--; + + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,353 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_lattice_q31.c +* +* Description: Q31 FIR lattice filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Lattice + * @{ + */ + + +/** + * @brief Processing function for the Q31 FIR lattice filter. + * @param[in] *S points to an instance of the Q31 FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * In order to avoid overflows the input signal must be scaled down by 2*log2(numStages) bits. + */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + +void arm_fir_lattice_q31( + const arm_fir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *px; /* temporary state pointer */ + q31_t *pk; /* temporary coefficient pointer */ + q31_t fcurr1, fnext1, gcurr1 = 0, gnext1; /* temporary variables for first sample in loop unrolling */ + q31_t fcurr2, fnext2, gnext2; /* temporary variables for second sample in loop unrolling */ + uint32_t numStages = S->numStages; /* Length of the filter */ + uint32_t blkCnt, stageCnt; /* temporary variables for counts */ + q31_t k; + + pState = &S->pState[0]; + + blkCnt = blockSize >> 1u; + + /* First part of the processing with loop unrolling. Compute 2 outputs at a time. + a second loop below computes the remaining 1 sample. */ + while(blkCnt > 0u) + { + /* f0(n) = x(n) */ + fcurr1 = *pSrc++; + + /* f0(n) = x(n) */ + fcurr2 = *pSrc++; + + /* Initialize coeff pointer */ + pk = (pCoeffs); + + /* Initialize state pointer */ + px = pState; + + /* read g0(n - 1) from state buffer */ + gcurr1 = *px; + + /* Read the reflection coefficient */ + k = *pk++; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext1 = (q31_t) (((q63_t) gcurr1 * k) >> 32); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext1 = (q31_t) (((q63_t) fcurr1 * (k)) >> 32); + fnext1 = fcurr1 + (fnext1 << 1u); + gnext1 = gcurr1 + (gnext1 << 1u); + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext2 = (q31_t) (((q63_t) fcurr1 * k) >> 32); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext2 = (q31_t) (((q63_t) fcurr2 * (k)) >> 32); + fnext2 = fcurr2 + (fnext2 << 1u); + gnext2 = fcurr1 + (gnext2 << 1u); + + /* save g1(n) in state buffer */ + *px++ = fcurr2; + + /* f1(n) is saved in fcurr1 + for next stage processing */ + fcurr1 = fnext1; + fcurr2 = fnext2; + + stageCnt = (numStages - 1u); + + /* stage loop */ + while(stageCnt > 0u) + { + + /* Read the reflection coefficient */ + k = *pk++; + + /* read g2(n) from state buffer */ + gcurr1 = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext2; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext1 = (q31_t) (((q63_t) gcurr1 * k) >> 32); + fnext2 = (q31_t) (((q63_t) gnext1 * k) >> 32); + + fnext1 = fcurr1 + (fnext1 << 1u); + fnext2 = fcurr2 + (fnext2 << 1u); + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext2 = (q31_t) (((q63_t) fcurr2 * (k)) >> 32); + gnext2 = gnext1 + (gnext2 << 1u); + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext1 = (q31_t) (((q63_t) fcurr1 * (k)) >> 32); + gnext1 = gcurr1 + (gnext1 << 1u); + + /* f1(n) is saved in fcurr1 + for next stage processing */ + fcurr1 = fnext1; + fcurr2 = fnext2; + + stageCnt--; + + } + + /* y(n) = fN(n) */ + *pDst++ = fcurr1; + *pDst++ = fcurr2; + + blkCnt--; + + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x2u; + + while(blkCnt > 0u) + { + /* f0(n) = x(n) */ + fcurr1 = *pSrc++; + + /* Initialize coeff pointer */ + pk = (pCoeffs); + + /* Initialize state pointer */ + px = pState; + + /* read g0(n - 1) from state buffer */ + gcurr1 = *px; + + /* Read the reflection coefficient */ + k = *pk++; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext1 = (q31_t) (((q63_t) gcurr1 * k) >> 32); + fnext1 = fcurr1 + (fnext1 << 1u); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext1 = (q31_t) (((q63_t) fcurr1 * (k)) >> 32); + gnext1 = gcurr1 + (gnext1 << 1u); + + /* save g1(n) in state buffer */ + *px++ = fcurr1; + + /* f1(n) is saved in fcurr1 + for next stage processing */ + fcurr1 = fnext1; + + stageCnt = (numStages - 1u); + + /* stage loop */ + while(stageCnt > 0u) + { + /* Read the reflection coefficient */ + k = *pk++; + + /* read g2(n) from state buffer */ + gcurr1 = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext1; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext1 = (q31_t) (((q63_t) gcurr1 * k) >> 32); + fnext1 = fcurr1 + (fnext1 << 1u); + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext1 = (q31_t) (((q63_t) fcurr1 * (k)) >> 32); + gnext1 = gcurr1 + (gnext1 << 1u); + + /* f1(n) is saved in fcurr1 + for next stage processing */ + fcurr1 = fnext1; + + stageCnt--; + + } + + + /* y(n) = fN(n) */ + *pDst++ = fcurr1; + + blkCnt--; + + } + + +} + + +#else + +/* Run the below code for Cortex-M0 */ + +void arm_fir_lattice_q31( + const arm_fir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *px; /* temporary state pointer */ + q31_t *pk; /* temporary coefficient pointer */ + q31_t fcurr, fnext, gcurr, gnext; /* temporary variables */ + uint32_t numStages = S->numStages; /* Length of the filter */ + uint32_t blkCnt, stageCnt; /* temporary variables for counts */ + + pState = &S->pState[0]; + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* f0(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize coeff pointer */ + pk = (pCoeffs); + + /* Initialize state pointer */ + px = pState; + + /* read g0(n-1) from state buffer */ + gcurr = *px; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext = (q31_t) (((q63_t) gcurr * (*pk)) >> 31) + fcurr; + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext = (q31_t) (((q63_t) fcurr * (*pk++)) >> 31) + gcurr; + /* save g1(n) in state buffer */ + *px++ = fcurr; + + /* f1(n) is saved in fcurr1 + for next stage processing */ + fcurr = fnext; + + stageCnt = (numStages - 1u); + + /* stage loop */ + while(stageCnt > 0u) + { + /* read g2(n) from state buffer */ + gcurr = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext = (q31_t) (((q63_t) gcurr * (*pk)) >> 31) + fcurr; + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext = (q31_t) (((q63_t) fcurr * (*pk++)) >> 31) + gcurr; + + /* f1(n) is saved in fcurr1 + for next stage processing */ + fcurr = fnext; + + stageCnt--; + + } + + /* y(n) = fN(n) */ + *pDst++ = fcurr; + + blkCnt--; + + } + +} + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + +/** + * @} end of FIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,691 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_q15.c +* +* Description: Q15 FIR filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR + * @{ + */ + +/** + * @brief Processing function for the Q15 FIR filter. + * @param[in] *S points to an instance of the Q15 FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process per call. + * @return none. + * + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, state buffers should be aligned by 32-bit + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + * Lastly, the accumulator is saturated to yield a result in 1.15 format. + * + * \par + * Refer to the function arm_fir_fast_q15() for a faster but less precise implementation of this function. + */ + +#ifndef ARM_MATH_CM0_FAMILY + +/* Run the below code for Cortex-M4 and Cortex-M3 */ + +#ifndef UNALIGNED_SUPPORT_DISABLE + + +void arm_fir_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *px1; /* Temporary q15 pointer for state buffer */ + q15_t *pb; /* Temporary pointer for coefficient buffer */ + q31_t x0, x1, x2, x3, c0; /* Temporary variables to hold SIMD state and coefficient values */ + q63_t acc0, acc1, acc2, acc3; /* Accumulators */ + uint32_t numTaps = S->numTaps; /* Number of taps in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Apply loop unrolling and compute 4 output values simultaneously. + * The variables acc0 ... acc3 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + + blkCnt = blockSize >> 2; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Copy four new input samples into the state buffer. + ** Use 32-bit SIMD to move the 16-bit data. Only requires two copies. */ + *__SIMD32(pStateCurnt)++ = *__SIMD32(pSrc)++; + *__SIMD32(pStateCurnt)++ = *__SIMD32(pSrc)++; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Initialize state pointer of type q15 */ + px1 = pState; + + /* Initialize coeff pointer of type q31 */ + pb = pCoeffs; + + /* Read the first two samples from the state buffer: x[n-N], x[n-N-1] */ + x0 = _SIMD32_OFFSET(px1); + + /* Read the third and forth samples from the state buffer: x[n-N-1], x[n-N-2] */ + x1 = _SIMD32_OFFSET(px1 + 1u); + + px1 += 2u; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-4 coefficients. */ + tapCnt = numTaps >> 2; + + while(tapCnt > 0u) + { + /* Read the first two coefficients using SIMD: b[N] and b[N-1] coefficients */ + c0 = *__SIMD32(pb)++; + + /* acc0 += b[N] * x[n-N] + b[N-1] * x[n-N-1] */ + acc0 = __SMLALD(x0, c0, acc0); + + /* acc1 += b[N] * x[n-N-1] + b[N-1] * x[n-N-2] */ + acc1 = __SMLALD(x1, c0, acc1); + + /* Read state x[n-N-2], x[n-N-3] */ + x2 = _SIMD32_OFFSET(px1); + + /* Read state x[n-N-3], x[n-N-4] */ + x3 = _SIMD32_OFFSET(px1 + 1u); + + /* acc2 += b[N] * x[n-N-2] + b[N-1] * x[n-N-3] */ + acc2 = __SMLALD(x2, c0, acc2); + + /* acc3 += b[N] * x[n-N-3] + b[N-1] * x[n-N-4] */ + acc3 = __SMLALD(x3, c0, acc3); + + /* Read coefficients b[N-2], b[N-3] */ + c0 = *__SIMD32(pb)++; + + /* acc0 += b[N-2] * x[n-N-2] + b[N-3] * x[n-N-3] */ + acc0 = __SMLALD(x2, c0, acc0); + + /* acc1 += b[N-2] * x[n-N-3] + b[N-3] * x[n-N-4] */ + acc1 = __SMLALD(x3, c0, acc1); + + /* Read state x[n-N-4], x[n-N-5] */ + x0 = _SIMD32_OFFSET(px1 + 2u); + + /* Read state x[n-N-5], x[n-N-6] */ + x1 = _SIMD32_OFFSET(px1 + 3u); + + /* acc2 += b[N-2] * x[n-N-4] + b[N-3] * x[n-N-5] */ + acc2 = __SMLALD(x0, c0, acc2); + + /* acc3 += b[N-2] * x[n-N-5] + b[N-3] * x[n-N-6] */ + acc3 = __SMLALD(x1, c0, acc3); + + px1 += 4u; + + tapCnt--; + + } + + + /* If the filter length is not a multiple of 4, compute the remaining filter taps. + ** This is always be 2 taps since the filter length is even. */ + if((numTaps & 0x3u) != 0u) + { + /* Read 2 coefficients */ + c0 = *__SIMD32(pb)++; + + /* Fetch 4 state variables */ + x2 = _SIMD32_OFFSET(px1); + + x3 = _SIMD32_OFFSET(px1 + 1u); + + /* Perform the multiply-accumulates */ + acc0 = __SMLALD(x0, c0, acc0); + + px1 += 2u; + + acc1 = __SMLALD(x1, c0, acc1); + acc2 = __SMLALD(x2, c0, acc2); + acc3 = __SMLALD(x3, c0, acc3); + } + + /* The results in the 4 accumulators are in 2.30 format. Convert to 1.15 with saturation. + ** Then store the 4 outputs in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16); + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16); + +#else + + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16); + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + while(blkCnt > 0u) + { + /* Copy two samples into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0; + + /* Initialize state pointer of type q15 */ + px1 = pState; + + /* Initialize coeff pointer of type q31 */ + pb = pCoeffs; + + tapCnt = numTaps >> 1; + + do + { + + c0 = *__SIMD32(pb)++; + x0 = *__SIMD32(px1)++; + + acc0 = __SMLALD(x0, c0, acc0); + tapCnt--; + } + while(tapCnt > 0u); + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + ** Then store the output in the destination buffer. */ + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + /* Calculation of count for copying integer writes */ + tapCnt = (numTaps - 1u) >> 2; + + while(tapCnt > 0u) + { + + /* Copy state values to start of state buffer */ + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + + tapCnt--; + + } + + /* Calculation of count for remaining q15_t data */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* copy remaining data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } +} + +#else /* UNALIGNED_SUPPORT_DISABLE */ + +void arm_fir_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q63_t acc0, acc1, acc2, acc3; /* Accumulators */ + q15_t *pb; /* Temporary pointer for coefficient buffer */ + q15_t *px; /* Temporary q31 pointer for SIMD state buffer accesses */ + q31_t x0, x1, x2, c0; /* Temporary variables to hold SIMD state and coefficient values */ + uint32_t numTaps = S->numTaps; /* Number of taps in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Apply loop unrolling and compute 4 output values simultaneously. + * The variables acc0 ... acc3 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + + blkCnt = blockSize >> 2; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Copy four new input samples into the state buffer. + ** Use 32-bit SIMD to move the 16-bit data. Only requires two copies. */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Typecast q15_t pointer to q31_t pointer for state reading in q31_t */ + px = pState; + + /* Typecast q15_t pointer to q31_t pointer for coefficient reading in q31_t */ + pb = pCoeffs; + + /* Read the first two samples from the state buffer: x[n-N], x[n-N-1] */ + x0 = *__SIMD32(px)++; + + /* Read the third and forth samples from the state buffer: x[n-N-2], x[n-N-3] */ + x2 = *__SIMD32(px)++; + + /* Loop over the number of taps. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-(numTaps%4) coefficients. */ + tapCnt = numTaps >> 2; + + while(tapCnt > 0) + { + /* Read the first two coefficients using SIMD: b[N] and b[N-1] coefficients */ + c0 = *__SIMD32(pb)++; + + /* acc0 += b[N] * x[n-N] + b[N-1] * x[n-N-1] */ + acc0 = __SMLALD(x0, c0, acc0); + + /* acc2 += b[N] * x[n-N-2] + b[N-1] * x[n-N-3] */ + acc2 = __SMLALD(x2, c0, acc2); + + /* pack x[n-N-1] and x[n-N-2] */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x2, x0, 0); +#else + x1 = __PKHBT(x0, x2, 0); +#endif + + /* Read state x[n-N-4], x[n-N-5] */ + x0 = _SIMD32_OFFSET(px); + + /* acc1 += b[N] * x[n-N-1] + b[N-1] * x[n-N-2] */ + acc1 = __SMLALDX(x1, c0, acc1); + + /* pack x[n-N-3] and x[n-N-4] */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x0, x2, 0); +#else + x1 = __PKHBT(x2, x0, 0); +#endif + + /* acc3 += b[N] * x[n-N-3] + b[N-1] * x[n-N-4] */ + acc3 = __SMLALDX(x1, c0, acc3); + + /* Read coefficients b[N-2], b[N-3] */ + c0 = *__SIMD32(pb)++; + + /* acc0 += b[N-2] * x[n-N-2] + b[N-3] * x[n-N-3] */ + acc0 = __SMLALD(x2, c0, acc0); + + /* Read state x[n-N-6], x[n-N-7] with offset */ + x2 = _SIMD32_OFFSET(px + 2u); + + /* acc2 += b[N-2] * x[n-N-4] + b[N-3] * x[n-N-5] */ + acc2 = __SMLALD(x0, c0, acc2); + + /* acc1 += b[N-2] * x[n-N-3] + b[N-3] * x[n-N-4] */ + acc1 = __SMLALDX(x1, c0, acc1); + + /* pack x[n-N-5] and x[n-N-6] */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x2, x0, 0); +#else + x1 = __PKHBT(x0, x2, 0); +#endif + + /* acc3 += b[N-2] * x[n-N-5] + b[N-3] * x[n-N-6] */ + acc3 = __SMLALDX(x1, c0, acc3); + + /* Update state pointer for next state reading */ + px += 4u; + + /* Decrement tap count */ + tapCnt--; + + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps. + ** This is always be 2 taps since the filter length is even. */ + if((numTaps & 0x3u) != 0u) + { + + /* Read last two coefficients */ + c0 = *__SIMD32(pb)++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALD(x0, c0, acc0); + acc2 = __SMLALD(x2, c0, acc2); + + /* pack state variables */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x2, x0, 0); +#else + x1 = __PKHBT(x0, x2, 0); +#endif + + /* Read last state variables */ + x0 = *__SIMD32(px); + + /* Perform the multiply-accumulates */ + acc1 = __SMLALDX(x1, c0, acc1); + + /* pack state variables */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x0, x2, 0); +#else + x1 = __PKHBT(x2, x0, 0); +#endif + + /* Perform the multiply-accumulates */ + acc3 = __SMLALDX(x1, c0, acc3); + } + + /* The results in the 4 accumulators are in 2.30 format. Convert to 1.15 with saturation. + ** Then store the 4 outputs in the destination buffer. */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16); + + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16); + +#else + + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16); + + *__SIMD32(pDst)++ = + __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + while(blkCnt > 0u) + { + /* Copy two samples into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0; + + /* Use SIMD to hold states and coefficients */ + px = pState; + pb = pCoeffs; + + tapCnt = numTaps >> 1u; + + do + { + acc0 += (q31_t) * px++ * *pb++; + acc0 += (q31_t) * px++ * *pb++; + tapCnt--; + } + while(tapCnt > 0u); + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + ** Then store the output in the destination buffer. */ + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + /* Calculation of count for copying integer writes */ + tapCnt = (numTaps - 1u) >> 2; + + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + tapCnt--; + + } + + /* Calculation of count for remaining q15_t data */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* copy remaining data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } +} + + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + +#else /* ARM_MATH_CM0_FAMILY */ + + +/* Run the below code for Cortex-M0 */ + +void arm_fir_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + + + + q15_t *px; /* Temporary pointer for state buffer */ + q15_t *pb; /* Temporary pointer for coefficient buffer */ + q63_t acc; /* Accumulator */ + uint32_t numTaps = S->numTaps; /* Number of nTaps in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Initialize blkCnt with blockSize */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize Coefficient pointer */ + pb = pCoeffs; + + tapCnt = numTaps; + + /* Perform the multiply-accumulates */ + do + { + /* acc = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] */ + acc += (q31_t) * px++ * *pb++; + tapCnt--; + } while(tapCnt > 0u); + + /* The result is in 2.30 format. Convert to 1.15 + ** Then store the output in the destination buffer. */ + *pDst++ = (q15_t) __SSAT((acc >> 15u), 16); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the samples loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + /* Copy numTaps number of values */ + tapCnt = (numTaps - 1u); + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + + +/** + * @} end of FIR group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,365 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_q31.c +* +* Description: Q31 FIR filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR + * @{ + */ + +/** + * @param[in] *S points to an instance of the Q31 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process per call. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clip. + * In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits. + * After all multiply-accumulates are performed, the 2.62 accumulator is right shifted by 31 bits and saturated to 1.31 format to yield the final result. + * + * \par + * Refer to the function arm_fir_fast_q31() for a faster but less precise implementation of this filter for Cortex-M3 and Cortex-M4. + */ + +void arm_fir_q31( + const arm_fir_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t x0, x1, x2; /* Temporary variables to hold state */ + q31_t c0; /* Temporary variable to hold coefficient value */ + q31_t *px; /* Temporary pointer for state */ + q31_t *pb; /* Temporary pointer for coefficient buffer */ + q63_t acc0, acc1, acc2; /* Accumulators */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt, tapCntN3; /* Loop counters */ + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Apply loop unrolling and compute 4 output values simultaneously. + * The variables acc0 ... acc3 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + blkCnt = blockSize / 3; + blockSize = blockSize - (3 * blkCnt); + + tapCnt = numTaps / 3; + tapCntN3 = numTaps - (3 * tapCnt); + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Copy three new input samples into the state buffer */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Read the first two samples from the state buffer: + * x[n-numTaps], x[n-numTaps-1] */ + x0 = *(px++); + x1 = *(px++); + + /* Loop unrolling. Process 3 taps at a time. */ + i = tapCnt; + + while(i > 0u) + { + /* Read the b[numTaps] coefficient */ + c0 = *pb; + + /* Read x[n-numTaps-2] sample */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += ((q63_t) x0 * c0); + acc1 += ((q63_t) x1 * c0); + acc2 += ((q63_t) x2 * c0); + + /* Read the coefficient and state */ + c0 = *(pb + 1u); + x0 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += ((q63_t) x1 * c0); + acc1 += ((q63_t) x2 * c0); + acc2 += ((q63_t) x0 * c0); + + /* Read the coefficient and state */ + c0 = *(pb + 2u); + x1 = *(px++); + + /* update coefficient pointer */ + pb += 3u; + + /* Perform the multiply-accumulates */ + acc0 += ((q63_t) x2 * c0); + acc1 += ((q63_t) x0 * c0); + acc2 += ((q63_t) x1 * c0); + + /* Decrement the loop counter */ + i--; + } + + /* If the filter length is not a multiple of 3, compute the remaining filter taps */ + + i = tapCntN3; + + while(i > 0u) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x2 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += ((q63_t) x0 * c0); + acc1 += ((q63_t) x1 * c0); + acc2 += ((q63_t) x2 * c0); + + /* Reuse the present sample states for next sample */ + x0 = x1; + x1 = x2; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 3 to process the next group of 3 samples */ + pState = pState + 3; + + /* The results in the 3 accumulators are in 2.30 format. Convert to 1.31 + ** Then store the 3 outputs in the destination buffer. */ + *pDst++ = (q31_t) (acc0 >> 31u); + *pDst++ = (q31_t) (acc1 >> 31u); + *pDst++ = (q31_t) (acc2 >> 31u); + + /* Decrement the samples loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 3, compute any remaining output samples here. + ** No loop unrolling is used. */ + + while(blockSize > 0u) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize Coefficient pointer */ + pb = (pCoeffs); + + i = numTaps; + + /* Perform the multiply-accumulates */ + do + { + acc0 += (q63_t) * (px++) * (*(pb++)); + i--; + } while(i > 0u); + + /* The result is in 2.62 format. Convert to 1.31 + ** Then store the output in the destination buffer. */ + *pDst++ = (q31_t) (acc0 >> 31u); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the samples loop counter */ + blockSize--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + tapCnt = (numTaps - 1u) >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#else + +/* Run the below code for Cortex-M0 */ + + q31_t *px; /* Temporary pointer for state */ + q31_t *pb; /* Temporary pointer for coefficient buffer */ + q63_t acc; /* Accumulator */ + uint32_t numTaps = S->numTaps; /* Length of the filter */ + uint32_t i, tapCnt, blkCnt; /* Loop counters */ + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Initialize blkCnt with blockSize */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize Coefficient pointer */ + pb = pCoeffs; + + i = numTaps; + + /* Perform the multiply-accumulates */ + do + { + /* acc = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] */ + acc += (q63_t) * px++ * *pb++; + i--; + } while(i > 0u); + + /* The result is in 2.62 format. Convert to 1.31 + ** Then store the output in the destination buffer. */ + *pDst++ = (q31_t) (acc >> 31u); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the samples loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the starting of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + /* Copy numTaps number of values */ + tapCnt = numTaps - 1u; + + /* Copy the data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,397 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_q7.c +* +* Description: Q7 FIR filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR + * @{ + */ + +/** + * @param[in] *S points to an instance of the Q7 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 32-bit internal accumulator. + * Both coefficients and state variables are represented in 1.7 format and multiplications yield a 2.14 result. + * The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * The accumulator is converted to 18.7 format by discarding the low 7 bits. + * Finally, the result is truncated to 1.7 format. + */ + +void arm_fir_q7( + const arm_fir_instance_q7 * S, + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q7_t *pState = S->pState; /* State pointer */ + q7_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q7_t *pStateCurnt; /* Points to the current sample of the state */ + q7_t x0, x1, x2, x3; /* Temporary variables to hold state */ + q7_t c0; /* Temporary variable to hold coefficient value */ + q7_t *px; /* Temporary pointer for state */ + q7_t *pb; /* Temporary pointer for coefficient buffer */ + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt; /* Loop counters */ + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Apply loop unrolling and compute 4 output values simultaneously. + * The variables acc0 ... acc3 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + blkCnt = blockSize >> 2; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Copy four new input samples into the state buffer */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Read the first three samples from the state buffer: + * x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2] */ + x0 = *(px++); + x1 = *(px++); + x2 = *(px++); + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + i = tapCnt; + + while(i > 0u) + { + /* Read the b[numTaps] coefficient */ + c0 = *pb; + + /* Read x[n-numTaps-3] sample */ + x3 = *px; + + /* acc0 += b[numTaps] * x[n-numTaps] */ + acc0 += ((q15_t) x0 * c0); + + /* acc1 += b[numTaps] * x[n-numTaps-1] */ + acc1 += ((q15_t) x1 * c0); + + /* acc2 += b[numTaps] * x[n-numTaps-2] */ + acc2 += ((q15_t) x2 * c0); + + /* acc3 += b[numTaps] * x[n-numTaps-3] */ + acc3 += ((q15_t) x3 * c0); + + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb + 1u); + + /* Read x[n-numTaps-4] sample */ + x0 = *(px + 1u); + + /* Perform the multiply-accumulates */ + acc0 += ((q15_t) x1 * c0); + acc1 += ((q15_t) x2 * c0); + acc2 += ((q15_t) x3 * c0); + acc3 += ((q15_t) x0 * c0); + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb + 2u); + + /* Read x[n-numTaps-5] sample */ + x1 = *(px + 2u); + + /* Perform the multiply-accumulates */ + acc0 += ((q15_t) x2 * c0); + acc1 += ((q15_t) x3 * c0); + acc2 += ((q15_t) x0 * c0); + acc3 += ((q15_t) x1 * c0); + + /* Read the b[numTaps-3] coefficients */ + c0 = *(pb + 3u); + + /* Read x[n-numTaps-6] sample */ + x2 = *(px + 3u); + + /* Perform the multiply-accumulates */ + acc0 += ((q15_t) x3 * c0); + acc1 += ((q15_t) x0 * c0); + acc2 += ((q15_t) x1 * c0); + acc3 += ((q15_t) x2 * c0); + + /* update coefficient pointer */ + pb += 4u; + px += 4u; + + /* Decrement the loop counter */ + i--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + + i = numTaps - (tapCnt * 4u); + while(i > 0u) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += ((q15_t) x0 * c0); + acc1 += ((q15_t) x1 * c0); + acc2 += ((q15_t) x2 * c0); + acc3 += ((q15_t) x3 * c0); + + /* Reuse the present sample states for next sample */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 4; + + /* The results in the 4 accumulators are in 2.62 format. Convert to 1.31 + ** Then store the 4 outputs in the destination buffer. */ + acc0 = __SSAT((acc0 >> 7u), 8); + *pDst++ = acc0; + acc1 = __SSAT((acc1 >> 7u), 8); + *pDst++ = acc1; + acc2 = __SSAT((acc2 >> 7u), 8); + *pDst++ = acc2; + acc3 = __SSAT((acc3 >> 7u), 8); + *pDst++ = acc3; + + /* Decrement the samples loop counter */ + blkCnt--; + } + + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 4u; + + while(blkCnt > 0u) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize Coefficient pointer */ + pb = (pCoeffs); + + i = numTaps; + + /* Perform the multiply-accumulates */ + do + { + acc0 += (q15_t) * (px++) * (*(pb++)); + i--; + } while(i > 0u); + + /* The result is in 2.14 format. Convert to 1.7 + ** Then store the output in the destination buffer. */ + *pDst++ = __SSAT((acc0 >> 7u), 8); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the samples loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + tapCnt = (numTaps - 1u) >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#else + +/* Run the below code for Cortex-M0 */ + + uint32_t numTaps = S->numTaps; /* Number of taps in the filter */ + uint32_t i, blkCnt; /* Loop counters */ + q7_t *pState = S->pState; /* State pointer */ + q7_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q7_t *px, *pb; /* Temporary pointers to state and coeff */ + q31_t acc = 0; /* Accumlator */ + q7_t *pStateCurnt; /* Points to the current sample of the state */ + + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1u); + + /* Initialize blkCnt with blockSize */ + blkCnt = blockSize; + + /* Perform filtering upto BlockSize - BlockSize%4 */ + while(blkCnt > 0u) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set accumulator to zero */ + acc = 0; + + /* Initialize state pointer of type q7 */ + px = pState; + + /* Initialize coeff pointer of type q7 */ + pb = pCoeffs; + + + i = numTaps; + + while(i > 0u) + { + /* acc = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] */ + acc += (q15_t) * px++ * *pb++; + i--; + } + + /* Store the 1.7 format filter output in destination buffer */ + *pDst++ = (q7_t) __SSAT((acc >> 7), 8); + + /* Advance the state pointer by 1 to process the next sample */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + + /* Copy numTaps number of values */ + i = (numTaps - 1u); + + /* Copy q7_t data */ + while(i > 0u) + { + *pStateCurnt++ = *pState++; + i--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,444 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_sparse_f32.c +* +* Description: Floating-point sparse FIR filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ------------------------------------------------------------------- */ +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup FIR_Sparse Finite Impulse Response (FIR) Sparse Filters + * + * This group of functions implements sparse FIR filters. + * Sparse FIR filters are equivalent to standard FIR filters except that most of the coefficients are equal to zero. + * Sparse filters are used for simulating reflections in communications and audio applications. + * + * There are separate functions for Q7, Q15, Q31, and floating-point data types. + * The functions operate on blocks of input and output data and each call to the function processes + * blockSize samples through the filter. pSrc and + * pDst points to input and output arrays respectively containing blockSize values. + * + * \par Algorithm: + * The sparse filter instant structure contains an array of tap indices pTapDelay which specifies the locations of the non-zero coefficients. + * This is in addition to the coefficient array b. + * The implementation essentially skips the multiplications by zero and leads to an efficient realization. + *
   
+ *     y[n] = b[0] * x[n-pTapDelay[0]] + b[1] * x[n-pTapDelay[1]] + b[2] * x[n-pTapDelay[2]] + ...+ b[numTaps-1] * x[n-pTapDelay[numTaps-1]]    
+ * 
+ * \par + * \image html FIRSparse.gif "Sparse FIR filter. b[n] represents the filter coefficients" + * \par + * pCoeffs points to a coefficient array of size numTaps; + * pTapDelay points to an array of nonzero indices and is also of size numTaps; + * pState points to a state array of size maxDelay + blockSize, where + * maxDelay is the largest offset value that is ever used in the pTapDelay array. + * Some of the processing functions also require temporary working buffers. + * + * \par Instance Structure + * The coefficients and state variables for a filter are stored together in an instance data structure. + * A separate instance structure must be defined for each filter. + * Coefficient and offset arrays may be shared among several instances while state variable arrays cannot be shared. + * There are separate instance structure declarations for each of the 4 supported data types. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Sets the values of the internal structure fields. + * - Zeros out the values in the state buffer. + * To do this manually without calling the init function, assign the follow subfields of the instance structure: + * numTaps, pCoeffs, pTapDelay, maxDelay, stateIndex, pState. Also set all of the values in pState to zero. + * + * \par + * Use of the initialization function is optional. + * However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + * To place an instance structure into a const data section, the instance structure must be manually initialized. + * Set the values in the state buffer to zeros before static initialization. + * The code below statically initializes each of the 4 different data type filter instance structures + *
    
+ *arm_fir_sparse_instance_f32 S = {numTaps, 0, pState, pCoeffs, maxDelay, pTapDelay};    
+ *arm_fir_sparse_instance_q31 S = {numTaps, 0, pState, pCoeffs, maxDelay, pTapDelay};    
+ *arm_fir_sparse_instance_q15 S = {numTaps, 0, pState, pCoeffs, maxDelay, pTapDelay};    
+ *arm_fir_sparse_instance_q7 S =  {numTaps, 0, pState, pCoeffs, maxDelay, pTapDelay};    
+ * 
+ * \par + * + * \par Fixed-Point Behavior + * Care must be taken when using the fixed-point versions of the sparse FIR filter functions. + * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + +/** + * @addtogroup FIR_Sparse + * @{ + */ + +/** + * @brief Processing function for the floating-point sparse FIR filter. + * @param[in] *S points to an instance of the floating-point sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + +void arm_fir_sparse_f32( + arm_fir_sparse_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + float32_t * pScratchIn, + uint32_t blockSize) +{ + + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *px; /* Scratch buffer pointer */ + float32_t *py = pState; /* Temporary pointers for state buffer */ + float32_t *pb = pScratchIn; /* Temporary pointers for scratch buffer */ + float32_t *pOut; /* Destination pointer */ + int32_t *pTapDelay = S->pTapDelay; /* Pointer to the array containing offset of the non-zero tap values. */ + uint32_t delaySize = S->maxDelay + blockSize; /* state length */ + uint16_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + int32_t readIndex; /* Read index of the state buffer */ + uint32_t tapCnt, blkCnt; /* loop counters */ + float32_t coeff = *pCoeffs++; /* Read the first coefficient value */ + + + + /* BlockSize of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_f32((int32_t *) py, delaySize, &S->stateIndex, 1, + (int32_t *) pSrc, 1, blockSize); + + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = ((int32_t) S->stateIndex - (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, + blockSize); + + /* Working pointer for the scratch buffer */ + px = pb; + + /* Working pointer for destination buffer */ + pOut = pDst; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 Multiplications at a time. */ + blkCnt = blockSize >> 2u; + + while(blkCnt > 0u) + { + /* Perform Multiplications and store in destination buffer */ + *pOut++ = *px++ * coeff; + *pOut++ = *px++ * coeff; + *pOut++ = *px++ * coeff; + *pOut++ = *px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform Multiplications and store in destination buffer */ + *pOut++ = *px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = ((int32_t) S->stateIndex - (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2u; + + while(tapCnt > 0u) + { + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, + blockSize); + + /* Working pointer for the scratch buffer */ + px = pb; + + /* Working pointer for destination buffer */ + pOut = pDst; + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 MACS at a time. */ + blkCnt = blockSize >> 2u; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pOut++ += *px++ * coeff; + *pOut++ += *px++ * coeff; + *pOut++ += *px++ * coeff; + *pOut++ += *px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pOut++ += *px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = ((int32_t) S->stateIndex - + (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement the tap loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, + blockSize); + + /* Working pointer for the scratch buffer */ + px = pb; + + /* Working pointer for destination buffer */ + pOut = pDst; + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 MACS at a time. */ + blkCnt = blockSize >> 2u; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pOut++ += *px++ * coeff; + *pOut++ += *px++ * coeff; + *pOut++ += *px++ * coeff; + *pOut++ += *px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pOut++ += *px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + +/* Run the below code for Cortex-M0 */ + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform Multiplications and store in destination buffer */ + *pOut++ = *px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = ((int32_t) S->stateIndex - (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2u; + + while(tapCnt > 0u) + { + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, + blockSize); + + /* Working pointer for the scratch buffer */ + px = pb; + + /* Working pointer for destination buffer */ + pOut = pDst; + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pOut++ += *px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = + ((int32_t) S->stateIndex - (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement the tap loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, + blockSize); + + /* Working pointer for the scratch buffer */ + px = pb; + + /* Working pointer for destination buffer */ + pOut = pDst; + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pOut++ += *px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR_Sparse group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,107 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_sparse_init_f32.c +* +* Description: Floating-point sparse FIR filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Sparse + * @{ + */ + +/** + * @brief Initialization function for the floating-point sparse FIR filter. + * @param[in,out] *S points to an instance of the floating-point sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + * + * Description: + * \par + * pCoeffs holds the filter coefficients and has length numTaps. + * pState holds the filter's state variables and must be of length + * maxDelay + blockSize, where maxDelay + * is the maximum number of delay line values. + * blockSize is the + * number of samples processed by the arm_fir_sparse_f32() function. + */ + +void arm_fir_sparse_init_f32( + arm_fir_sparse_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign TapDelay pointer */ + S->pTapDelay = pTapDelay; + + /* Assign MaxDelay */ + S->maxDelay = maxDelay; + + /* reset the stateIndex to 0 */ + S->stateIndex = 0u; + + /* Clear state buffer and size is always maxDelay + blockSize */ + memset(pState, 0, (maxDelay + blockSize) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + +} + +/** + * @} end of FIR_Sparse group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,107 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_sparse_init_q15.c +* +* Description: Q15 sparse FIR filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Sparse + * @{ + */ + +/** + * @brief Initialization function for the Q15 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q15 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + * + * Description: + * \par + * pCoeffs holds the filter coefficients and has length numTaps. + * pState holds the filter's state variables and must be of length + * maxDelay + blockSize, where maxDelay + * is the maximum number of delay line values. + * blockSize is the + * number of words processed by arm_fir_sparse_q15() function. + */ + +void arm_fir_sparse_init_q15( + arm_fir_sparse_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign TapDelay pointer */ + S->pTapDelay = pTapDelay; + + /* Assign MaxDelay */ + S->maxDelay = maxDelay; + + /* reset the stateIndex to 0 */ + S->stateIndex = 0u; + + /* Clear state buffer and size is always maxDelay + blockSize */ + memset(pState, 0, (maxDelay + blockSize) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + +} + +/** + * @} end of FIR_Sparse group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,106 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_sparse_init_q31.c +* +* Description: Q31 sparse FIR filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Sparse + * @{ + */ + +/** + * @brief Initialization function for the Q31 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q31 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + * + * Description: + * \par + * pCoeffs holds the filter coefficients and has length numTaps. + * pState holds the filter's state variables and must be of length + * maxDelay + blockSize, where maxDelay + * is the maximum number of delay line values. + * blockSize is the number of words processed by arm_fir_sparse_q31() function. + */ + +void arm_fir_sparse_init_q31( + arm_fir_sparse_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign TapDelay pointer */ + S->pTapDelay = pTapDelay; + + /* Assign MaxDelay */ + S->maxDelay = maxDelay; + + /* reset the stateIndex to 0 */ + S->stateIndex = 0u; + + /* Clear state buffer and size is always maxDelay + blockSize */ + memset(pState, 0, (maxDelay + blockSize) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; + +} + +/** + * @} end of FIR_Sparse group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,107 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_sparse_init_q7.c +* +* Description: Q7 sparse FIR filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Sparse + * @{ + */ + +/** + * @brief Initialization function for the Q7 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q7 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + * + * Description: + * \par + * pCoeffs holds the filter coefficients and has length numTaps. + * pState holds the filter's state variables and must be of length + * maxDelay + blockSize, where maxDelay + * is the maximum number of delay line values. + * blockSize is the + * number of samples processed by the arm_fir_sparse_q7() function. + */ + +void arm_fir_sparse_init_q7( + arm_fir_sparse_instance_q7 * S, + uint16_t numTaps, + q7_t * pCoeffs, + q7_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign TapDelay pointer */ + S->pTapDelay = pTapDelay; + + /* Assign MaxDelay */ + S->maxDelay = maxDelay; + + /* reset the stateIndex to 0 */ + S->stateIndex = 0u; + + /* Clear state buffer and size is always maxDelay + blockSize */ + memset(pState, 0, (maxDelay + blockSize) * sizeof(q7_t)); + + /* Assign state pointer */ + S->pState = pState; + +} + +/** + * @} end of FIR_Sparse group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,481 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_sparse_q15.c +* +* Description: Q15 sparse FIR filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ------------------------------------------------------------------- */ +#include "arm_math.h" + +/** + * @addtogroup FIR_Sparse + * @{ + */ + +/** + * @brief Processing function for the Q15 sparse FIR filter. + * @param[in] *S points to an instance of the Q15 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] *pScratchOut points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The 1.15 x 1.15 multiplications yield a 2.30 result and these are added to a 2.30 accumulator. + * Thus the full precision of the multiplications is maintained but there is only a single guard bit in the accumulator. + * If the accumulator result overflows it will wrap around rather than saturate. + * After all multiply-accumulates are performed, the 2.30 accumulator is truncated to 2.15 format and then saturated to 1.15 format. + * In order to avoid overflows the input signal or coefficients must be scaled down by log2(numTaps) bits. + */ + + +void arm_fir_sparse_q15( + arm_fir_sparse_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + q15_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize) +{ + + q15_t *pState = S->pState; /* State pointer */ + q15_t *pIn = pSrc; /* Working pointer for input */ + q15_t *pOut = pDst; /* Working pointer for output */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *px; /* Temporary pointers for scratch buffer */ + q15_t *pb = pScratchIn; /* Temporary pointers for scratch buffer */ + q15_t *py = pState; /* Temporary pointers for state buffer */ + int32_t *pTapDelay = S->pTapDelay; /* Pointer to the array containing offset of the non-zero tap values. */ + uint32_t delaySize = S->maxDelay + blockSize; /* state length */ + uint16_t numTaps = S->numTaps; /* Filter order */ + int32_t readIndex; /* Read index of the state buffer */ + uint32_t tapCnt, blkCnt; /* loop counters */ + q15_t coeff = *pCoeffs++; /* Read the first coefficient value */ + q31_t *pScr2 = pScratchOut; /* Working pointer for pScratchOut */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t in1, in2; /* Temporary variables */ + + + /* BlockSize of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_q15(py, delaySize, &S->stateIndex, 1, pIn, 1, blockSize); + + /* Loop over the number of taps. */ + tapCnt = numTaps; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q15(py, delaySize, &readIndex, 1, + pb, pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 multiplications at a time. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + /* Perform multiplication and store in the scratch buffer */ + *pScratchOut++ = ((q31_t) * px++ * coeff); + *pScratchOut++ = ((q31_t) * px++ * coeff); + *pScratchOut++ = ((q31_t) * px++ * coeff); + *pScratchOut++ = ((q31_t) * px++ * coeff); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform multiplication and store in the scratch buffer */ + *pScratchOut++ = ((q31_t) * px++ * coeff); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2u; + + while(tapCnt > 0u) + { + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q15(py, delaySize, &readIndex, 1, + pb, pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 MACS at a time. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pScratchOut++ += (q31_t) * px++ * coeff; + *pScratchOut++ += (q31_t) * px++ * coeff; + *pScratchOut++ += (q31_t) * px++ * coeff; + *pScratchOut++ += (q31_t) * px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pScratchOut++ += (q31_t) * px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement the tap loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q15(py, delaySize, &readIndex, 1, + pb, pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 MACS at a time. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pScratchOut++ += (q31_t) * px++ * coeff; + *pScratchOut++ += (q31_t) * px++ * coeff; + *pScratchOut++ += (q31_t) * px++ * coeff; + *pScratchOut++ += (q31_t) * px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pScratchOut++ += (q31_t) * px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* All the output values are in pScratchOut buffer. + Convert them into 1.15 format, saturate and store in the destination buffer. */ + /* Loop over the blockSize. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + in1 = *pScr2++; + in2 = *pScr2++; + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = + __PKHBT((q15_t) __SSAT(in1 >> 15, 16), (q15_t) __SSAT(in2 >> 15, 16), + 16); + +#else + *__SIMD32(pOut)++ = + __PKHBT((q15_t) __SSAT(in2 >> 15, 16), (q15_t) __SSAT(in1 >> 15, 16), + 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + in1 = *pScr2++; + + in2 = *pScr2++; + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pOut)++ = + __PKHBT((q15_t) __SSAT(in1 >> 15, 16), (q15_t) __SSAT(in2 >> 15, 16), + 16); + +#else + + *__SIMD32(pOut)++ = + __PKHBT((q15_t) __SSAT(in2 >> 15, 16), (q15_t) __SSAT(in1 >> 15, 16), + 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + + blkCnt--; + + } + + /* If the blockSize is not a multiple of 4, + remaining samples are processed in the below loop */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + *pOut++ = (q15_t) __SSAT(*pScr2++ >> 15, 16); + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* BlockSize of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_q15(py, delaySize, &S->stateIndex, 1, pIn, 1, blockSize); + + /* Loop over the number of taps. */ + tapCnt = numTaps; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q15(py, delaySize, &readIndex, 1, + pb, pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform multiplication and store in the scratch buffer */ + *pScratchOut++ = ((q31_t) * px++ * coeff); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2u; + + while(tapCnt > 0u) + { + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q15(py, delaySize, &readIndex, 1, + pb, pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pScratchOut++ += (q31_t) * px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement the tap loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q15(py, delaySize, &readIndex, 1, + pb, pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + *pScratchOut++ += (q31_t) * px++ * coeff; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* All the output values are in pScratchOut buffer. + Convert them into 1.15 format, saturate and store in the destination buffer. */ + /* Loop over the blockSize. */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + *pOut++ = (q15_t) __SSAT(*pScr2++ >> 15, 16); + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR_Sparse group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,461 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_sparse_q31.c +* +* Description: Q31 sparse FIR filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ------------------------------------------------------------------- */ +#include "arm_math.h" + + +/** + * @addtogroup FIR_Sparse + * @{ + */ + +/** + * @brief Processing function for the Q31 sparse FIR filter. + * @param[in] *S points to an instance of the Q31 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The 1.31 x 1.31 multiplications are truncated to 2.30 format. + * This leads to loss of precision on the intermediate multiplications and provides only a single guard bit. + * If the accumulator result overflows, it wraps around rather than saturate. + * In order to avoid overflows the input signal or coefficients must be scaled down by log2(numTaps) bits. + */ + +void arm_fir_sparse_q31( + arm_fir_sparse_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + q31_t * pScratchIn, + uint32_t blockSize) +{ + + q31_t *pState = S->pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *px; /* Scratch buffer pointer */ + q31_t *py = pState; /* Temporary pointers for state buffer */ + q31_t *pb = pScratchIn; /* Temporary pointers for scratch buffer */ + q31_t *pOut; /* Destination pointer */ + q63_t out; /* Temporary output variable */ + int32_t *pTapDelay = S->pTapDelay; /* Pointer to the array containing offset of the non-zero tap values. */ + uint32_t delaySize = S->maxDelay + blockSize; /* state length */ + uint16_t numTaps = S->numTaps; /* Filter order */ + int32_t readIndex; /* Read index of the state buffer */ + uint32_t tapCnt, blkCnt; /* loop counters */ + q31_t coeff = *pCoeffs++; /* Read the first coefficient value */ + q31_t in; + + + /* BlockSize of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_f32((int32_t *) py, delaySize, &S->stateIndex, 1, + (int32_t *) pSrc, 1, blockSize); + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, + blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 Multiplications at a time. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + /* Perform Multiplications and store in the destination buffer */ + *pOut++ = (q31_t) (((q63_t) * px++ * coeff) >> 32); + *pOut++ = (q31_t) (((q63_t) * px++ * coeff) >> 32); + *pOut++ = (q31_t) (((q63_t) * px++ * coeff) >> 32); + *pOut++ = (q31_t) (((q63_t) * px++ * coeff) >> 32); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform Multiplications and store in the destination buffer */ + *pOut++ = (q31_t) (((q63_t) * px++ * coeff) >> 32); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2u; + + while(tapCnt > 0u) + { + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, + blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 MACS at a time. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement the tap loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, + blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 MACS at a time. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Working output pointer is updated */ + pOut = pDst; + + /* Output is converted into 1.31 format. */ + /* Loop over the blockSize. Unroll by a factor of 4. + * process 4 output samples at a time. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + in = *pOut << 1; + *pOut++ = in; + in = *pOut << 1; + *pOut++ = in; + in = *pOut << 1; + *pOut++ = in; + in = *pOut << 1; + *pOut++ = in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * process the remaining output samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + in = *pOut << 1; + *pOut++ = in; + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform Multiplications and store in the destination buffer */ + *pOut++ = (q31_t) (((q63_t) * px++ * coeff) >> 32); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2u; + + while(tapCnt > 0u) + { + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, + blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement the tap loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, + blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Working output pointer is updated */ + pOut = pDst; + + /* Output is converted into 1.31 format. */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + in = *pOut << 1; + *pOut++ = in; + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR_Sparse group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,480 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fir_sparse_q7.c +* +* Description: Q7 sparse FIR filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ------------------------------------------------------------------- */ +#include "arm_math.h" + + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup FIR_Sparse + * @{ + */ + + +/** + * @brief Processing function for the Q7 sparse FIR filter. + * @param[in] *S points to an instance of the Q7 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] *pScratchOut points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 32-bit internal accumulator. + * Both coefficients and state variables are represented in 1.7 format and multiplications yield a 2.14 result. + * The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * The accumulator is then converted to 18.7 format by discarding the low 7 bits. + * Finally, the result is truncated to 1.7 format. + */ + +void arm_fir_sparse_q7( + arm_fir_sparse_instance_q7 * S, + q7_t * pSrc, + q7_t * pDst, + q7_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize) +{ + + q7_t *pState = S->pState; /* State pointer */ + q7_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q7_t *px; /* Scratch buffer pointer */ + q7_t *py = pState; /* Temporary pointers for state buffer */ + q7_t *pb = pScratchIn; /* Temporary pointers for scratch buffer */ + q7_t *pOut = pDst; /* Destination pointer */ + int32_t *pTapDelay = S->pTapDelay; /* Pointer to the array containing offset of the non-zero tap values. */ + uint32_t delaySize = S->maxDelay + blockSize; /* state length */ + uint16_t numTaps = S->numTaps; /* Filter order */ + int32_t readIndex; /* Read index of the state buffer */ + uint32_t tapCnt, blkCnt; /* loop counters */ + q7_t coeff = *pCoeffs++; /* Read the coefficient value */ + q31_t *pScr2 = pScratchOut; /* Working pointer for scratch buffer of output values */ + q31_t in; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q7_t in1, in2, in3, in4; + + /* BlockSize of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_q7(py, (int32_t) delaySize, &S->stateIndex, 1, pSrc, 1, + blockSize); + + /* Loop over the number of taps. */ + tapCnt = numTaps; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = ((int32_t) S->stateIndex - (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q7(py, (int32_t) delaySize, &readIndex, 1, pb, pb, + (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 multiplications at a time. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + /* Perform multiplication and store in the scratch buffer */ + *pScratchOut++ = ((q31_t) * px++ * coeff); + *pScratchOut++ = ((q31_t) * px++ * coeff); + *pScratchOut++ = ((q31_t) * px++ * coeff); + *pScratchOut++ = ((q31_t) * px++ * coeff); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform multiplication and store in the scratch buffer */ + *pScratchOut++ = ((q31_t) * px++ * coeff); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = ((int32_t) S->stateIndex - (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2u; + + while(tapCnt > 0u) + { + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q7(py, (int32_t) delaySize, &readIndex, 1, pb, pb, + (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 MACS at a time. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = ((int32_t) S->stateIndex - + (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement the tap loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q7(py, (int32_t) delaySize, &readIndex, 1, pb, pb, + (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + /* Loop over the blockSize. Unroll by a factor of 4. + * Compute 4 MACS at a time. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + * compute the remaining samples */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* All the output values are in pScratchOut buffer. + Convert them into 1.15 format, saturate and store in the destination buffer. */ + /* Loop over the blockSize. */ + blkCnt = blockSize >> 2; + + while(blkCnt > 0u) + { + in1 = (q7_t) __SSAT(*pScr2++ >> 7, 8); + in2 = (q7_t) __SSAT(*pScr2++ >> 7, 8); + in3 = (q7_t) __SSAT(*pScr2++ >> 7, 8); + in4 = (q7_t) __SSAT(*pScr2++ >> 7, 8); + + *__SIMD32(pOut)++ = __PACKq7(in1, in2, in3, in4); + + /* Decrement the blockSize loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, + remaining samples are processed in the below loop */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + *pOut++ = (q7_t) __SSAT(*pScr2++ >> 7, 8); + + /* Decrement the blockSize loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* BlockSize of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_q7(py, (int32_t) delaySize, &S->stateIndex, 1, pSrc, 1, + blockSize); + + /* Loop over the number of taps. */ + tapCnt = numTaps; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = ((int32_t) S->stateIndex - (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q7(py, (int32_t) delaySize, &readIndex, 1, pb, pb, + (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + /* Loop over the blockSize */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform multiplication and store in the scratch buffer */ + *pScratchOut++ = ((q31_t) * px++ * coeff); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = ((int32_t) S->stateIndex - (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2u; + + while(tapCnt > 0u) + { + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q7(py, (int32_t) delaySize, &readIndex, 1, pb, pb, + (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + /* Loop over the blockSize */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = + ((int32_t) S->stateIndex - (int32_t) blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if(readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement the tap loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q7(py, (int32_t) delaySize, &readIndex, 1, pb, pb, + (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + /* Loop over the blockSize */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Perform Multiply-Accumulate */ + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* All the output values are in pScratchOut buffer. + Convert them into 1.15 format, saturate and store in the destination buffer. */ + /* Loop over the blockSize. */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + *pOut++ = (q7_t) __SSAT(*pScr2++ >> 7, 8); + + /* Decrement the blockSize loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of FIR_Sparse group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,447 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_iir_lattice_f32.c +* +* Description: Floating-point IIR Lattice filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup IIR_Lattice Infinite Impulse Response (IIR) Lattice Filters + * + * This set of functions implements lattice filters + * for Q15, Q31 and floating-point data types. Lattice filters are used in a + * variety of adaptive filter applications. The filter structure has feedforward and + * feedback components and the net impulse response is infinite length. + * The functions operate on blocks + * of input and output data and each call to the function processes + * blockSize samples through the filter. pSrc and + * pDst point to input and output arrays containing blockSize values. + + * \par Algorithm: + * \image html IIRLattice.gif "Infinite Impulse Response Lattice filter" + *
    
+ *    fN(n)   =  x(n)    
+ *    fm-1(n) = fm(n) - km * gm-1(n-1)   for m = N, N-1, ...1    
+ *    gm(n)   = km * fm-1(n) + gm-1(n-1) for m = N, N-1, ...1    
+ *    y(n)    = vN * gN(n) + vN-1 * gN-1(n) + ...+ v0 * g0(n)    
+ * 
+ * \par + * pkCoeffs points to array of reflection coefficients of size numStages. + * Reflection coefficients are stored in time-reversed order. + * \par + *
    
+ *    {kN, kN-1, ....k1}    
+ * 
+ * pvCoeffs points to the array of ladder coefficients of size (numStages+1). + * Ladder coefficients are stored in time-reversed order. + * \par + *
    
+ *    {vN, vN-1, ...v0}    
+ * 
+ * pState points to a state array of size numStages + blockSize. + * The state variables shown in the figure above (the g values) are stored in the pState array. + * The state variables are updated after each block of data is processed; the coefficients are untouched. + * \par Instance Structure + * The coefficients and state variables for a filter are stored together in an instance data structure. + * A separate instance structure must be defined for each filter. + * Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Sets the values of the internal structure fields. + * - Zeros out the values in the state buffer. + * To do this manually without calling the init function, assign the follow subfields of the instance structure: + * numStages, pkCoeffs, pvCoeffs, pState. Also set all of the values in pState to zero. + * + * \par + * Use of the initialization function is optional. + * However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + * To place an instance structure into a const data section, the instance structure must be manually initialized. + * Set the values in the state buffer to zeros and then manually initialize the instance structure as follows: + *
    
+ *arm_iir_lattice_instance_f32 S = {numStages, pState, pkCoeffs, pvCoeffs};    
+ *arm_iir_lattice_instance_q31 S = {numStages, pState, pkCoeffs, pvCoeffs};    
+ *arm_iir_lattice_instance_q15 S = {numStages, pState, pkCoeffs, pvCoeffs};    
+ * 
+ * \par + * where numStages is the number of stages in the filter; pState points to the state buffer array; + * pkCoeffs points to array of the reflection coefficients; pvCoeffs points to the array of ladder coefficients. + * \par Fixed-Point Behavior + * Care must be taken when using the fixed-point versions of the IIR lattice filter functions. + * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + +/** + * @addtogroup IIR_Lattice + * @{ + */ + +/** + * @brief Processing function for the floating-point IIR lattice filter. + * @param[in] *S points to an instance of the floating-point IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + +void arm_iir_lattice_f32( + const arm_iir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t fnext1, gcurr1, gnext; /* Temporary variables for lattice stages */ + float32_t acc; /* Accumlator */ + uint32_t blkCnt, tapCnt; /* temporary variables for counts */ + float32_t *px1, *px2, *pk, *pv; /* temporary pointers for state and coef */ + uint32_t numStages = S->numStages; /* number of stages */ + float32_t *pState; /* State pointer */ + float32_t *pStateCurnt; /* State current pointer */ + float32_t k1, k2; + float32_t v1, v2, v3, v4; + float32_t gcurr2; + float32_t fnext2; + + /* initialise loop count */ + blkCnt = blockSize; + + /* initialise state pointer */ + pState = &S->pState[0]; + + /* Sample processing */ + while(blkCnt > 0u) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fnext2 = *pSrc++; + + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + /* Initialize state read pointer */ + px1 = pState; + /* Initialize state write pointer */ + px2 = pState; + + /* Set accumulator to zero */ + acc = 0.0; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = (numStages) >> 2; + + while(tapCnt > 0u) + { + /* Read gN-1(n-1) from state buffer */ + gcurr1 = *px1; + + /* read reflection coefficient kN */ + k1 = *pk; + + /* fN-1(n) = fN(n) - kN * gN-1(n-1) */ + fnext1 = fnext2 - (k1 * gcurr1); + + /* read ladder coefficient vN */ + v1 = *pv; + + /* read next reflection coefficient kN-1 */ + k2 = *(pk + 1u); + + /* Read gN-2(n-1) from state buffer */ + gcurr2 = *(px1 + 1u); + + /* read next ladder coefficient vN-1 */ + v2 = *(pv + 1u); + + /* fN-2(n) = fN-1(n) - kN-1 * gN-2(n-1) */ + fnext2 = fnext1 - (k2 * gcurr2); + + /* gN(n) = kN * fN-1(n) + gN-1(n-1) */ + gnext = gcurr1 + (k1 * fnext1); + + /* read reflection coefficient kN-2 */ + k1 = *(pk + 2u); + + /* write gN(n) into state for next sample processing */ + *px2++ = gnext; + + /* Read gN-3(n-1) from state buffer */ + gcurr1 = *(px1 + 2u); + + /* y(n) += gN(n) * vN */ + acc += (gnext * v1); + + /* fN-3(n) = fN-2(n) - kN-2 * gN-3(n-1) */ + fnext1 = fnext2 - (k1 * gcurr1); + + /* gN-1(n) = kN-1 * fN-2(n) + gN-2(n-1) */ + gnext = gcurr2 + (k2 * fnext2); + + /* Read gN-4(n-1) from state buffer */ + gcurr2 = *(px1 + 3u); + + /* y(n) += gN-1(n) * vN-1 */ + acc += (gnext * v2); + + /* read reflection coefficient kN-3 */ + k2 = *(pk + 3u); + + /* write gN-1(n) into state for next sample processing */ + *px2++ = gnext; + + /* fN-4(n) = fN-3(n) - kN-3 * gN-4(n-1) */ + fnext2 = fnext1 - (k2 * gcurr2); + + /* gN-2(n) = kN-2 * fN-3(n) + gN-3(n-1) */ + gnext = gcurr1 + (k1 * fnext1); + + /* read ladder coefficient vN-2 */ + v3 = *(pv + 2u); + + /* y(n) += gN-2(n) * vN-2 */ + acc += (gnext * v3); + + /* write gN-2(n) into state for next sample processing */ + *px2++ = gnext; + + /* update pointer */ + pk += 4u; + + /* gN-3(n) = kN-3 * fN-4(n) + gN-4(n-1) */ + gnext = (fnext2 * k2) + gcurr2; + + /* read next ladder coefficient vN-3 */ + v4 = *(pv + 3u); + + /* y(n) += gN-4(n) * vN-4 */ + acc += (gnext * v4); + + /* write gN-3(n) into state for next sample processing */ + *px2++ = gnext; + + /* update pointers */ + px1 += 4u; + pv += 4u; + + tapCnt--; + + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = (numStages) % 0x4u; + + while(tapCnt > 0u) + { + gcurr1 = *px1++; + /* Process sample for last taps */ + fnext1 = fnext2 - ((*pk) * gcurr1); + gnext = (fnext1 * (*pk++)) + gcurr1; + /* Output samples for last taps */ + acc += (gnext * (*pv++)); + *px2++ = gnext; + fnext2 = fnext1; + + tapCnt--; + + } + + /* y(n) += g0(n) * v0 */ + acc += (fnext2 * (*pv)); + + *px2++ = fnext2; + + /* write out into pDst */ + *pDst++ = acc; + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 1u; + + blkCnt--; + + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + + /* Points to the start of the state buffer */ + pStateCurnt = &S->pState[0]; + pState = &S->pState[blockSize]; + + tapCnt = numStages >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + + } + + /* Calculate remaining number of copies */ + tapCnt = (numStages) % 0x4u; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } +} + +#else + +void arm_iir_lattice_f32( + const arm_iir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t fcurr, fnext = 0, gcurr, gnext; /* Temporary variables for lattice stages */ + float32_t acc; /* Accumlator */ + uint32_t blkCnt, tapCnt; /* temporary variables for counts */ + float32_t *px1, *px2, *pk, *pv; /* temporary pointers for state and coef */ + uint32_t numStages = S->numStages; /* number of stages */ + float32_t *pState; /* State pointer */ + float32_t *pStateCurnt; /* State current pointer */ + + + /* Run the below code for Cortex-M0 */ + + blkCnt = blockSize; + + pState = &S->pState[0]; + + /* Sample processing */ + while(blkCnt > 0u) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize state read pointer */ + px1 = pState; + /* Initialize state write pointer */ + px2 = pState; + /* Set accumulator to zero */ + acc = 0.0f; + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + + /* Process sample for numStages */ + tapCnt = numStages; + + while(tapCnt > 0u) + { + gcurr = *px1++; + /* Process sample for last taps */ + fnext = fcurr - ((*pk) * gcurr); + gnext = (fnext * (*pk++)) + gcurr; + + /* Output samples for last taps */ + acc += (gnext * (*pv++)); + *px2++ = gnext; + fcurr = fnext; + + /* Decrementing loop counter */ + tapCnt--; + + } + + /* y(n) += g0(n) * v0 */ + acc += (fnext * (*pv)); + + *px2++ = fnext; + + /* write out into pDst */ + *pDst++ = acc; + + /* Advance the state pointer by 1 to process the next group of samples */ + pState = pState + 1u; + blkCnt--; + + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + + /* Points to the start of the state buffer */ + pStateCurnt = &S->pState[0]; + pState = &S->pState[blockSize]; + + tapCnt = numStages; + + /* Copy the data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + +/** + * @} end of IIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,91 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_iir_lattice_init_f32.c +* +* Description: Floating-point IIR lattice filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup IIR_Lattice + * @{ + */ + +/** + * @brief Initialization function for the floating-point IIR lattice filter. + * @param[in] *S points to an instance of the floating-point IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to the state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process. + * @return none. + */ + +void arm_iir_lattice_init_f32( + arm_iir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pkCoeffs, + float32_t * pvCoeffs, + float32_t * pState, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign reflection coefficient pointer */ + S->pkCoeffs = pkCoeffs; + + /* Assign ladder coefficient pointer */ + S->pvCoeffs = pvCoeffs; + + /* Clear state buffer and size is always blockSize + numStages */ + memset(pState, 0, (numStages + blockSize) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + + +} + + /** + * @} end of IIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,91 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_iir_lattice_init_q15.c +* +* Description: Q15 IIR lattice filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup IIR_Lattice + * @{ + */ + + /** + * @brief Initialization function for the Q15 IIR lattice filter. + * @param[in] *S points to an instance of the Q15 IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process per call. + * @return none. + */ + +void arm_iir_lattice_init_q15( + arm_iir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pkCoeffs, + q15_t * pvCoeffs, + q15_t * pState, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign reflection coefficient pointer */ + S->pkCoeffs = pkCoeffs; + + /* Assign ladder coefficient pointer */ + S->pvCoeffs = pvCoeffs; + + /* Clear state buffer and size is always blockSize + numStages */ + memset(pState, 0, (numStages + blockSize) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + + +} + +/** + * @} end of IIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,91 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_iir_lattice_init_q31.c +* +* Description: Initialization function for the Q31 IIR lattice filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup IIR_Lattice + * @{ + */ + + /** + * @brief Initialization function for the Q31 IIR lattice filter. + * @param[in] *S points to an instance of the Q31 IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to the state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process. + * @return none. + */ + +void arm_iir_lattice_init_q31( + arm_iir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pkCoeffs, + q31_t * pvCoeffs, + q31_t * pState, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign reflection coefficient pointer */ + S->pkCoeffs = pkCoeffs; + + /* Assign ladder coefficient pointer */ + S->pvCoeffs = pvCoeffs; + + /* Clear state buffer and size is always blockSize + numStages */ + memset(pState, 0, (numStages + blockSize) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; + + +} + +/** + * @} end of IIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,464 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_iir_lattice_q15.c +* +* Description: Q15 IIR lattice filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup IIR_Lattice + * @{ + */ + +/** + * @brief Processing function for the Q15 IIR lattice filter. + * @param[in] *S points to an instance of the Q15 IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + * Lastly, the accumulator is saturated to yield a result in 1.15 format. + */ + +void arm_iir_lattice_q15( + const arm_iir_lattice_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t fcurr, fnext, gcurr = 0, gnext; /* Temporary variables for lattice stages */ + q15_t gnext1, gnext2; /* Temporary variables for lattice stages */ + uint32_t stgCnt; /* Temporary variables for counts */ + q63_t acc; /* Accumlator */ + uint32_t blkCnt, tapCnt; /* Temporary variables for counts */ + q15_t *px1, *px2, *pk, *pv; /* temporary pointers for state and coef */ + uint32_t numStages = S->numStages; /* number of stages */ + q15_t *pState; /* State pointer */ + q15_t *pStateCurnt; /* State current pointer */ + q15_t out; /* Temporary variable for output */ + q31_t v; /* Temporary variable for ladder coefficient */ +#ifdef UNALIGNED_SUPPORT_DISABLE + q15_t v1, v2; +#endif + + + blkCnt = blockSize; + + pState = &S->pState[0]; + + /* Sample processing */ + while(blkCnt > 0u) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize state read pointer */ + px1 = pState; + /* Initialize state write pointer */ + px2 = pState; + /* Set accumulator to zero */ + acc = 0; + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + + /* Process sample for first tap */ + gcurr = *px1++; + /* fN-1(n) = fN(n) - kN * gN-1(n-1) */ + fnext = fcurr - (((q31_t) gcurr * (*pk)) >> 15); + fnext = __SSAT(fnext, 16); + /* gN(n) = kN * fN-1(n) + gN-1(n-1) */ + gnext = (((q31_t) fnext * (*pk++)) >> 15) + gcurr; + gnext = __SSAT(gnext, 16); + /* write gN(n) into state for next sample processing */ + *px2++ = (q15_t) gnext; + /* y(n) += gN(n) * vN */ + acc += (q31_t) ((gnext * (*pv++))); + + + /* Update f values for next coefficient processing */ + fcurr = fnext; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = (numStages - 1u) >> 2; + + while(tapCnt > 0u) + { + + /* Process sample for 2nd, 6th ...taps */ + /* Read gN-2(n-1) from state buffer */ + gcurr = *px1++; + /* Process sample for 2nd, 6th .. taps */ + /* fN-2(n) = fN-1(n) - kN-1 * gN-2(n-1) */ + fnext = fcurr - (((q31_t) gcurr * (*pk)) >> 15); + fnext = __SSAT(fnext, 16); + /* gN-1(n) = kN-1 * fN-2(n) + gN-2(n-1) */ + gnext = (((q31_t) fnext * (*pk++)) >> 15) + gcurr; + gnext1 = (q15_t) __SSAT(gnext, 16); + /* write gN-1(n) into state */ + *px2++ = (q15_t) gnext1; + + + /* Process sample for 3nd, 7th ...taps */ + /* Read gN-3(n-1) from state */ + gcurr = *px1++; + /* Process sample for 3rd, 7th .. taps */ + /* fN-3(n) = fN-2(n) - kN-2 * gN-3(n-1) */ + fcurr = fnext - (((q31_t) gcurr * (*pk)) >> 15); + fcurr = __SSAT(fcurr, 16); + /* gN-2(n) = kN-2 * fN-3(n) + gN-3(n-1) */ + gnext = (((q31_t) fcurr * (*pk++)) >> 15) + gcurr; + gnext2 = (q15_t) __SSAT(gnext, 16); + /* write gN-2(n) into state */ + *px2++ = (q15_t) gnext2; + + /* Read vN-1 and vN-2 at a time */ +#ifndef UNALIGNED_SUPPORT_DISABLE + + v = *__SIMD32(pv)++; + +#else + + v1 = *pv++; + v2 = *pv++; + +#ifndef ARM_MATH_BIG_ENDIAN + + v = __PKHBT(v1, v2, 16); + +#else + + v = __PKHBT(v2, v1, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + + /* Pack gN-1(n) and gN-2(n) */ + +#ifndef ARM_MATH_BIG_ENDIAN + + gnext = __PKHBT(gnext1, gnext2, 16); + +#else + + gnext = __PKHBT(gnext2, gnext1, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* y(n) += gN-1(n) * vN-1 */ + /* process for gN-5(n) * vN-5, gN-9(n) * vN-9 ... */ + /* y(n) += gN-2(n) * vN-2 */ + /* process for gN-6(n) * vN-6, gN-10(n) * vN-10 ... */ + acc = __SMLALD(gnext, v, acc); + + + /* Process sample for 4th, 8th ...taps */ + /* Read gN-4(n-1) from state */ + gcurr = *px1++; + /* Process sample for 4th, 8th .. taps */ + /* fN-4(n) = fN-3(n) - kN-3 * gN-4(n-1) */ + fnext = fcurr - (((q31_t) gcurr * (*pk)) >> 15); + fnext = __SSAT(fnext, 16); + /* gN-3(n) = kN-3 * fN-1(n) + gN-1(n-1) */ + gnext = (((q31_t) fnext * (*pk++)) >> 15) + gcurr; + gnext1 = (q15_t) __SSAT(gnext, 16); + /* write gN-3(n) for the next sample process */ + *px2++ = (q15_t) gnext1; + + + /* Process sample for 5th, 9th ...taps */ + /* Read gN-5(n-1) from state */ + gcurr = *px1++; + /* Process sample for 5th, 9th .. taps */ + /* fN-5(n) = fN-4(n) - kN-4 * gN-5(n-1) */ + fcurr = fnext - (((q31_t) gcurr * (*pk)) >> 15); + fcurr = __SSAT(fcurr, 16); + /* gN-4(n) = kN-4 * fN-5(n) + gN-5(n-1) */ + gnext = (((q31_t) fcurr * (*pk++)) >> 15) + gcurr; + gnext2 = (q15_t) __SSAT(gnext, 16); + /* write gN-4(n) for the next sample process */ + *px2++ = (q15_t) gnext2; + + /* Read vN-3 and vN-4 at a time */ +#ifndef UNALIGNED_SUPPORT_DISABLE + + v = *__SIMD32(pv)++; + +#else + + v1 = *pv++; + v2 = *pv++; + +#ifndef ARM_MATH_BIG_ENDIAN + + v = __PKHBT(v1, v2, 16); + +#else + + v = __PKHBT(v2, v1, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + + /* Pack gN-3(n) and gN-4(n) */ +#ifndef ARM_MATH_BIG_ENDIAN + + gnext = __PKHBT(gnext1, gnext2, 16); + +#else + + gnext = __PKHBT(gnext2, gnext1, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* y(n) += gN-4(n) * vN-4 */ + /* process for gN-8(n) * vN-8, gN-12(n) * vN-12 ... */ + /* y(n) += gN-3(n) * vN-3 */ + /* process for gN-7(n) * vN-7, gN-11(n) * vN-11 ... */ + acc = __SMLALD(gnext, v, acc); + + tapCnt--; + + } + + fnext = fcurr; + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = (numStages - 1u) % 0x4u; + + while(tapCnt > 0u) + { + gcurr = *px1++; + /* Process sample for last taps */ + fnext = fcurr - (((q31_t) gcurr * (*pk)) >> 15); + fnext = __SSAT(fnext, 16); + gnext = (((q31_t) fnext * (*pk++)) >> 15) + gcurr; + gnext = __SSAT(gnext, 16); + /* Output samples for last taps */ + acc += (q31_t) (((q31_t) gnext * (*pv++))); + *px2++ = (q15_t) gnext; + fcurr = fnext; + + tapCnt--; + } + + /* y(n) += g0(n) * v0 */ + acc += (q31_t) (((q31_t) fnext * (*pv++))); + + out = (q15_t) __SSAT(acc >> 15, 16); + *px2++ = (q15_t) fnext; + + /* write out into pDst */ + *pDst++ = out; + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 1u; + blkCnt--; + + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + /* Points to the start of the state buffer */ + pStateCurnt = &S->pState[0]; + pState = &S->pState[blockSize]; + + stgCnt = (numStages >> 2u); + + /* copy data */ + while(stgCnt > 0u) + { +#ifndef UNALIGNED_SUPPORT_DISABLE + + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + +#else + + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Decrement the loop counter */ + stgCnt--; + + } + + /* Calculation of count for remaining q15_t data */ + stgCnt = (numStages) % 0x4u; + + /* copy data */ + while(stgCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + stgCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + q31_t fcurr, fnext = 0, gcurr = 0, gnext; /* Temporary variables for lattice stages */ + uint32_t stgCnt; /* Temporary variables for counts */ + q63_t acc; /* Accumlator */ + uint32_t blkCnt, tapCnt; /* Temporary variables for counts */ + q15_t *px1, *px2, *pk, *pv; /* temporary pointers for state and coef */ + uint32_t numStages = S->numStages; /* number of stages */ + q15_t *pState; /* State pointer */ + q15_t *pStateCurnt; /* State current pointer */ + q15_t out; /* Temporary variable for output */ + + + blkCnt = blockSize; + + pState = &S->pState[0]; + + /* Sample processing */ + while(blkCnt > 0u) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize state read pointer */ + px1 = pState; + /* Initialize state write pointer */ + px2 = pState; + /* Set accumulator to zero */ + acc = 0; + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + tapCnt = numStages; + + while(tapCnt > 0u) + { + gcurr = *px1++; + /* Process sample */ + /* fN-1(n) = fN(n) - kN * gN-1(n-1) */ + fnext = fcurr - ((gcurr * (*pk)) >> 15); + fnext = __SSAT(fnext, 16); + /* gN(n) = kN * fN-1(n) + gN-1(n-1) */ + gnext = ((fnext * (*pk++)) >> 15) + gcurr; + gnext = __SSAT(gnext, 16); + /* Output samples */ + /* y(n) += gN(n) * vN */ + acc += (q31_t) ((gnext * (*pv++))); + /* write gN(n) into state for next sample processing */ + *px2++ = (q15_t) gnext; + /* Update f values for next coefficient processing */ + fcurr = fnext; + + tapCnt--; + } + + /* y(n) += g0(n) * v0 */ + acc += (q31_t) ((fnext * (*pv++))); + + out = (q15_t) __SSAT(acc >> 15, 16); + *px2++ = (q15_t) fnext; + + /* write out into pDst */ + *pDst++ = out; + + /* Advance the state pointer by 1 to process the next group of samples */ + pState = pState + 1u; + blkCnt--; + + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + /* Points to the start of the state buffer */ + pStateCurnt = &S->pState[0]; + pState = &S->pState[blockSize]; + + stgCnt = numStages; + + /* copy data */ + while(stgCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + stgCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + + + + +/** + * @} end of IIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,350 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_iir_lattice_q31.c +* +* Description: Q31 IIR lattice filter processing function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup IIR_Lattice + * @{ + */ + +/** + * @brief Processing function for the Q31 IIR lattice filter. + * @param[in] *S points to an instance of the Q31 IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clip. + * In order to avoid overflows completely the input signal must be scaled down by 2*log2(numStages) bits. + * After all multiply-accumulates are performed, the 2.62 accumulator is saturated to 1.32 format and then truncated to 1.31 format. + */ + +void arm_iir_lattice_q31( + const arm_iir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t fcurr, fnext = 0, gcurr = 0, gnext; /* Temporary variables for lattice stages */ + q63_t acc; /* Accumlator */ + uint32_t blkCnt, tapCnt; /* Temporary variables for counts */ + q31_t *px1, *px2, *pk, *pv; /* Temporary pointers for state and coef */ + uint32_t numStages = S->numStages; /* number of stages */ + q31_t *pState; /* State pointer */ + q31_t *pStateCurnt; /* State current pointer */ + + blkCnt = blockSize; + + pState = &S->pState[0]; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Sample processing */ + while(blkCnt > 0u) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize state read pointer */ + px1 = pState; + /* Initialize state write pointer */ + px2 = pState; + /* Set accumulator to zero */ + acc = 0; + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + + /* Process sample for first tap */ + gcurr = *px1++; + /* fN-1(n) = fN(n) - kN * gN-1(n-1) */ + fnext = __QSUB(fcurr, (q31_t) (((q63_t) gcurr * (*pk)) >> 31)); + /* gN(n) = kN * fN-1(n) + gN-1(n-1) */ + gnext = __QADD(gcurr, (q31_t) (((q63_t) fnext * (*pk++)) >> 31)); + /* write gN-1(n-1) into state for next sample processing */ + *px2++ = gnext; + /* y(n) += gN(n) * vN */ + acc += ((q63_t) gnext * *pv++); + + /* Update f values for next coefficient processing */ + fcurr = fnext; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = (numStages - 1u) >> 2; + + while(tapCnt > 0u) + { + + /* Process sample for 2nd, 6th .. taps */ + /* Read gN-2(n-1) from state buffer */ + gcurr = *px1++; + /* fN-2(n) = fN-1(n) - kN-1 * gN-2(n-1) */ + fnext = __QSUB(fcurr, (q31_t) (((q63_t) gcurr * (*pk)) >> 31)); + /* gN-1(n) = kN-1 * fN-2(n) + gN-2(n-1) */ + gnext = __QADD(gcurr, (q31_t) (((q63_t) fnext * (*pk++)) >> 31)); + /* y(n) += gN-1(n) * vN-1 */ + /* process for gN-5(n) * vN-5, gN-9(n) * vN-9 ... */ + acc += ((q63_t) gnext * *pv++); + /* write gN-1(n) into state for next sample processing */ + *px2++ = gnext; + + /* Process sample for 3nd, 7th ...taps */ + /* Read gN-3(n-1) from state buffer */ + gcurr = *px1++; + /* Process sample for 3rd, 7th .. taps */ + /* fN-3(n) = fN-2(n) - kN-2 * gN-3(n-1) */ + fcurr = __QSUB(fnext, (q31_t) (((q63_t) gcurr * (*pk)) >> 31)); + /* gN-2(n) = kN-2 * fN-3(n) + gN-3(n-1) */ + gnext = __QADD(gcurr, (q31_t) (((q63_t) fcurr * (*pk++)) >> 31)); + /* y(n) += gN-2(n) * vN-2 */ + /* process for gN-6(n) * vN-6, gN-10(n) * vN-10 ... */ + acc += ((q63_t) gnext * *pv++); + /* write gN-2(n) into state for next sample processing */ + *px2++ = gnext; + + + /* Process sample for 4th, 8th ...taps */ + /* Read gN-4(n-1) from state buffer */ + gcurr = *px1++; + /* Process sample for 4th, 8th .. taps */ + /* fN-4(n) = fN-3(n) - kN-3 * gN-4(n-1) */ + fnext = __QSUB(fcurr, (q31_t) (((q63_t) gcurr * (*pk)) >> 31)); + /* gN-3(n) = kN-3 * fN-4(n) + gN-4(n-1) */ + gnext = __QADD(gcurr, (q31_t) (((q63_t) fnext * (*pk++)) >> 31)); + /* y(n) += gN-3(n) * vN-3 */ + /* process for gN-7(n) * vN-7, gN-11(n) * vN-11 ... */ + acc += ((q63_t) gnext * *pv++); + /* write gN-3(n) into state for next sample processing */ + *px2++ = gnext; + + + /* Process sample for 5th, 9th ...taps */ + /* Read gN-5(n-1) from state buffer */ + gcurr = *px1++; + /* Process sample for 5th, 9th .. taps */ + /* fN-5(n) = fN-4(n) - kN-4 * gN-1(n-1) */ + fcurr = __QSUB(fnext, (q31_t) (((q63_t) gcurr * (*pk)) >> 31)); + /* gN-4(n) = kN-4 * fN-5(n) + gN-5(n-1) */ + gnext = __QADD(gcurr, (q31_t) (((q63_t) fcurr * (*pk++)) >> 31)); + /* y(n) += gN-4(n) * vN-4 */ + /* process for gN-8(n) * vN-8, gN-12(n) * vN-12 ... */ + acc += ((q63_t) gnext * *pv++); + /* write gN-4(n) into state for next sample processing */ + *px2++ = gnext; + + tapCnt--; + + } + + fnext = fcurr; + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = (numStages - 1u) % 0x4u; + + while(tapCnt > 0u) + { + gcurr = *px1++; + /* Process sample for last taps */ + fnext = __QSUB(fcurr, (q31_t) (((q63_t) gcurr * (*pk)) >> 31)); + gnext = __QADD(gcurr, (q31_t) (((q63_t) fnext * (*pk++)) >> 31)); + /* Output samples for last taps */ + acc += ((q63_t) gnext * *pv++); + *px2++ = gnext; + fcurr = fnext; + + tapCnt--; + + } + + /* y(n) += g0(n) * v0 */ + acc += (q63_t) fnext *( + *pv++); + + *px2++ = fnext; + + /* write out into pDst */ + *pDst++ = (q31_t) (acc >> 31u); + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 1u; + blkCnt--; + + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + + /* Points to the start of the state buffer */ + pStateCurnt = &S->pState[0]; + pState = &S->pState[blockSize]; + + tapCnt = numStages >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + + } + + /* Calculate remaining number of copies */ + tapCnt = (numStages) % 0x4u; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + }; + +#else + + /* Run the below code for Cortex-M0 */ + /* Sample processing */ + while(blkCnt > 0u) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize state read pointer */ + px1 = pState; + /* Initialize state write pointer */ + px2 = pState; + /* Set accumulator to zero */ + acc = 0; + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + tapCnt = numStages; + + while(tapCnt > 0u) + { + gcurr = *px1++; + /* Process sample */ + /* fN-1(n) = fN(n) - kN * gN-1(n-1) */ + fnext = + clip_q63_to_q31(((q63_t) fcurr - + ((q31_t) (((q63_t) gcurr * (*pk)) >> 31)))); + /* gN(n) = kN * fN-1(n) + gN-1(n-1) */ + gnext = + clip_q63_to_q31(((q63_t) gcurr + + ((q31_t) (((q63_t) fnext * (*pk++)) >> 31)))); + /* Output samples */ + /* y(n) += gN(n) * vN */ + acc += ((q63_t) gnext * *pv++); + /* write gN-1(n-1) into state for next sample processing */ + *px2++ = gnext; + /* Update f values for next coefficient processing */ + fcurr = fnext; + + tapCnt--; + } + + /* y(n) += g0(n) * v0 */ + acc += (q63_t) fnext *( + *pv++); + + *px2++ = fnext; + + /* write out into pDst */ + *pDst++ = (q31_t) (acc >> 31u); + + /* Advance the state pointer by 1 to process the next group of samples */ + pState = pState + 1u; + blkCnt--; + + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + + /* Points to the start of the state buffer */ + pStateCurnt = &S->pState[0]; + pState = &S->pState[blockSize]; + + tapCnt = numStages; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + + + + +/** + * @} end of IIR_Lattice group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,442 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_f32.c +* +* Description: Processing function for the floating-point LMS filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup LMS Least Mean Square (LMS) Filters + * + * LMS filters are a class of adaptive filters that are able to "learn" an unknown transfer functions. + * LMS filters use a gradient descent method in which the filter coefficients are updated based on the instantaneous error signal. + * Adaptive filters are often used in communication systems, equalizers, and noise removal. + * The CMSIS DSP Library contains LMS filter functions that operate on Q15, Q31, and floating-point data types. + * The library also contains normalized LMS filters in which the filter coefficient adaptation is indepedent of the level of the input signal. + * + * An LMS filter consists of two components as shown below. + * The first component is a standard transversal or FIR filter. + * The second component is a coefficient update mechanism. + * The LMS filter has two input signals. + * The "input" feeds the FIR filter while the "reference input" corresponds to the desired output of the FIR filter. + * That is, the FIR filter coefficients are updated so that the output of the FIR filter matches the reference input. + * The filter coefficient update mechanism is based on the difference between the FIR filter output and the reference input. + * This "error signal" tends towards zero as the filter adapts. + * The LMS processing functions accept the input and reference input signals and generate the filter output and error signal. + * \image html LMS.gif "Internal structure of the Least Mean Square filter" + * + * The functions operate on blocks of data and each call to the function processes + * blockSize samples through the filter. + * pSrc points to input signal, pRef points to reference signal, + * pOut points to output signal and pErr points to error signal. + * All arrays contain blockSize values. + * + * The functions operate on a block-by-block basis. + * Internally, the filter coefficients b[n] are updated on a sample-by-sample basis. + * The convergence of the LMS filter is slower compared to the normalized LMS algorithm. + * + * \par Algorithm: + * The output signal y[n] is computed by a standard FIR filter: + *
    
+ *     y[n] = b[0] * x[n] + b[1] * x[n-1] + b[2] * x[n-2] + ...+ b[numTaps-1] * x[n-numTaps+1]    
+ * 
+ * + * \par + * The error signal equals the difference between the reference signal d[n] and the filter output: + *
    
+ *     e[n] = d[n] - y[n].    
+ * 
+ * + * \par + * After each sample of the error signal is computed, the filter coefficients b[k] are updated on a sample-by-sample basis: + *
    
+ *     b[k] = b[k] + e[n] * mu * x[n-k],  for k=0, 1, ..., numTaps-1    
+ * 
+ * where mu is the step size and controls the rate of coefficient convergence. + *\par + * In the APIs, pCoeffs points to a coefficient array of size numTaps. + * Coefficients are stored in time reversed order. + * \par + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * \par + * pState points to a state array of size numTaps + blockSize - 1. + * Samples in the state buffer are stored in the order: + * \par + *
    
+ *    {x[n-numTaps+1], x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2]....x[0], x[1], ..., x[blockSize-1]}    
+ * 
+ * \par + * Note that the length of the state buffer exceeds the length of the coefficient array by blockSize-1 samples. + * The increased state buffer length allows circular addressing, which is traditionally used in FIR filters, + * to be avoided and yields a significant speed improvement. + * The state variables are updated after each block of data is processed. + * \par Instance Structure + * The coefficients and state variables for a filter are stored together in an instance data structure. + * A separate instance structure must be defined for each filter and + * coefficient and state arrays cannot be shared among instances. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Sets the values of the internal structure fields. + * - Zeros out the values in the state buffer. + * To do this manually without calling the init function, assign the follow subfields of the instance structure: + * numTaps, pCoeffs, mu, postShift (not for f32), pState. Also set all of the values in pState to zero. + * + * \par + * Use of the initialization function is optional. + * However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + * To place an instance structure into a const data section, the instance structure must be manually initialized. + * Set the values in the state buffer to zeros before static initialization. + * The code below statically initializes each of the 3 different data type filter instance structures + *
    
+ *    arm_lms_instance_f32 S = {numTaps, pState, pCoeffs, mu};    
+ *    arm_lms_instance_q31 S = {numTaps, pState, pCoeffs, mu, postShift};    
+ *    arm_lms_instance_q15 S = {numTaps, pState, pCoeffs, mu, postShift};    
+ * 
+ * where numTaps is the number of filter coefficients in the filter; pState is the address of the state buffer; + * pCoeffs is the address of the coefficient buffer; mu is the step size parameter; and postShift is the shift applied to coefficients. + * + * \par Fixed-Point Behavior: + * Care must be taken when using the Q15 and Q31 versions of the LMS filter. + * The following issues must be considered: + * - Scaling of coefficients + * - Overflow and saturation + * + * \par Scaling of Coefficients: + * Filter coefficients are represented as fractional values and + * coefficients are restricted to lie in the range [-1 +1). + * The fixed-point functions have an additional scaling parameter postShift. + * At the output of the filter's accumulator is a shift register which shifts the result by postShift bits. + * This essentially scales the filter coefficients by 2^postShift and + * allows the filter coefficients to exceed the range [+1 -1). + * The value of postShift is set by the user based on the expected gain through the system being modeled. + * + * \par Overflow and Saturation: + * Overflow and saturation behavior of the fixed-point Q15 and Q31 versions are + * described separately as part of the function specific documentation below. + */ + +/** + * @addtogroup LMS + * @{ + */ + +/** + * @details + * This function operates on floating-point data types. + * + * @brief Processing function for floating-point LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + +void arm_lms_f32( + const arm_lms_instance_f32 * S, + float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + float32_t mu = S->mu; /* Adaptive factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + float32_t sum, e, d; /* accumulator, error, reference data sample */ + float32_t w = 0.0f; /* weight factor */ + + e = 0.0f; + d = 0.0f; + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + blkCnt = blockSize; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + while(blkCnt > 0u) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Set the accumulator to zero */ + sum = 0.0f; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + sum += (*px++) * (*pb++); + sum += (*px++) * (*pb++); + sum += (*px++) * (*pb++); + sum += (*px++) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + sum += (*px++) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result in the accumulator, store in the destination buffer. */ + *pOut++ = sum; + + /* Compute and store error */ + d = (float32_t) (*pRef++); + e = d - sum; + *pErr++ = e; + + /* Calculation of Weighting factor for the updating filter coefficients */ + w = e * mu; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Update filter coefficients */ + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + *pb = *pb + (w * (*px++)); + pb++; + + *pb = *pb + (w * (*px++)); + pb++; + + *pb = *pb + (w * (*px++)); + pb++; + + *pb = *pb + (w * (*px++)); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + *pb = *pb + (w * (*px++)); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + satrt of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Loop unrolling for (numTaps - 1u) samples copy */ + tapCnt = (numTaps - 1u) >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + while(blkCnt > 0u) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize pCoeffs pointer */ + pb = pCoeffs; + + /* Set the accumulator to zero */ + sum = 0.0f; + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + sum += (*px++) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is stored in the destination buffer. */ + *pOut++ = sum; + + /* Compute and store error */ + d = (float32_t) (*pRef++); + e = d - sum; + *pErr++ = e; + + /* Weighting factor for the LMS version */ + w = e * mu; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize pCoeffs pointer */ + pb = pCoeffs; + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + *pb = *pb + (w * (*px++)); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + * start of the state buffer. This prepares the state buffer for the + * next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Copy (numTaps - 1u) samples */ + tapCnt = (numTaps - 1u); + + /* Copy the data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of LMS group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,95 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_init_f32.c +* +* Description: Floating-point LMS filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @addtogroup LMS + * @{ + */ + + /** + * @brief Initialization function for floating-point LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to the coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @return none. + */ + +/** + * \par Description: + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * The initial filter coefficients serve as a starting point for the adaptive filter. + * pState points to an array of length numTaps+blockSize-1 samples, where blockSize is the number of input samples processed by each call to arm_lms_f32(). + */ + +void arm_lms_init_f32( + arm_lms_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps */ + memset(pState, 0, (numTaps + (blockSize - 1)) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; +} + +/** + * @} end of LMS group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,105 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_init_q15.c +* +* Description: Q15 LMS filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup LMS + * @{ + */ + +/** +* @brief Initialization function for the Q15 LMS filter. +* @param[in] *S points to an instance of the Q15 LMS filter structure. +* @param[in] numTaps number of filter coefficients. +* @param[in] *pCoeffs points to the coefficient buffer. +* @param[in] *pState points to the state buffer. +* @param[in] mu step size that controls filter coefficient updates. +* @param[in] blockSize number of samples to process. +* @param[in] postShift bit shift applied to coefficients. +* @return none. +* +* \par Description: +* pCoeffs points to the array of filter coefficients stored in time reversed order: +*
    
+*    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+* 
+* The initial filter coefficients serve as a starting point for the adaptive filter. +* pState points to the array of state variables and size of array is +* numTaps+blockSize-1 samples, where blockSize is the number of +* input samples processed by each call to arm_lms_q15(). +*/ + +void arm_lms_init_q15( + arm_lms_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint32_t postShift) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps - 1 */ + memset(pState, 0, (numTaps + (blockSize - 1u)) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; + + /* Assign postShift value to be applied */ + S->postShift = postShift; + +} + +/** + * @} end of LMS group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,105 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_init_q31.c +* +* Description: Q31 LMS filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup LMS + * @{ + */ + + /** + * @brief Initialization function for Q31 LMS filter. + * @param[in] *S points to an instance of the Q31 LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + * + * \par Description: + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * The initial filter coefficients serve as a starting point for the adaptive filter. + * pState points to an array of length numTaps+blockSize-1 samples, + * where blockSize is the number of input samples processed by each call to + * arm_lms_q31(). + */ + +void arm_lms_init_q31( + arm_lms_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint32_t postShift) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps - 1 */ + memset(pState, 0, ((uint32_t) numTaps + (blockSize - 1u)) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; + + /* Assign postShift value to be applied */ + S->postShift = postShift; + +} + +/** + * @} end of LMS group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,466 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_norm_f32.c +* +* Description: Processing function for the floating-point Normalised LMS. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @defgroup LMS_NORM Normalized LMS Filters + * + * This set of functions implements a commonly used adaptive filter. + * It is related to the Least Mean Square (LMS) adaptive filter and includes an additional normalization + * factor which increases the adaptation rate of the filter. + * The CMSIS DSP Library contains normalized LMS filter functions that operate on Q15, Q31, and floating-point data types. + * + * A normalized least mean square (NLMS) filter consists of two components as shown below. + * The first component is a standard transversal or FIR filter. + * The second component is a coefficient update mechanism. + * The NLMS filter has two input signals. + * The "input" feeds the FIR filter while the "reference input" corresponds to the desired output of the FIR filter. + * That is, the FIR filter coefficients are updated so that the output of the FIR filter matches the reference input. + * The filter coefficient update mechanism is based on the difference between the FIR filter output and the reference input. + * This "error signal" tends towards zero as the filter adapts. + * The NLMS processing functions accept the input and reference input signals and generate the filter output and error signal. + * \image html LMS.gif "Internal structure of the NLMS adaptive filter" + * + * The functions operate on blocks of data and each call to the function processes + * blockSize samples through the filter. + * pSrc points to input signal, pRef points to reference signal, + * pOut points to output signal and pErr points to error signal. + * All arrays contain blockSize values. + * + * The functions operate on a block-by-block basis. + * Internally, the filter coefficients b[n] are updated on a sample-by-sample basis. + * The convergence of the LMS filter is slower compared to the normalized LMS algorithm. + * + * \par Algorithm: + * The output signal y[n] is computed by a standard FIR filter: + *
    
+ *     y[n] = b[0] * x[n] + b[1] * x[n-1] + b[2] * x[n-2] + ...+ b[numTaps-1] * x[n-numTaps+1]    
+ * 
+ * + * \par + * The error signal equals the difference between the reference signal d[n] and the filter output: + *
    
+ *     e[n] = d[n] - y[n].    
+ * 
+ * + * \par + * After each sample of the error signal is computed the instanteous energy of the filter state variables is calculated: + *
    
+ *    E = x[n]^2 + x[n-1]^2 + ... + x[n-numTaps+1]^2.    
+ * 
+ * The filter coefficients b[k] are then updated on a sample-by-sample basis: + *
    
+ *     b[k] = b[k] + e[n] * (mu/E) * x[n-k],  for k=0, 1, ..., numTaps-1    
+ * 
+ * where mu is the step size and controls the rate of coefficient convergence. + *\par + * In the APIs, pCoeffs points to a coefficient array of size numTaps. + * Coefficients are stored in time reversed order. + * \par + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * \par + * pState points to a state array of size numTaps + blockSize - 1. + * Samples in the state buffer are stored in the order: + * \par + *
    
+ *    {x[n-numTaps+1], x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2]....x[0], x[1], ..., x[blockSize-1]}    
+ * 
+ * \par + * Note that the length of the state buffer exceeds the length of the coefficient array by blockSize-1 samples. + * The increased state buffer length allows circular addressing, which is traditionally used in FIR filters, + * to be avoided and yields a significant speed improvement. + * The state variables are updated after each block of data is processed. + * \par Instance Structure + * The coefficients and state variables for a filter are stored together in an instance data structure. + * A separate instance structure must be defined for each filter and + * coefficient and state arrays cannot be shared among instances. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Sets the values of the internal structure fields. + * - Zeros out the values in the state buffer. + * To do this manually without calling the init function, assign the follow subfields of the instance structure: + * numTaps, pCoeffs, mu, energy, x0, pState. Also set all of the values in pState to zero. + * For Q7, Q15, and Q31 the following fields must also be initialized; + * recipTable, postShift + * + * \par + * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function. + * \par Fixed-Point Behavior: + * Care must be taken when using the Q15 and Q31 versions of the normalised LMS filter. + * The following issues must be considered: + * - Scaling of coefficients + * - Overflow and saturation + * + * \par Scaling of Coefficients: + * Filter coefficients are represented as fractional values and + * coefficients are restricted to lie in the range [-1 +1). + * The fixed-point functions have an additional scaling parameter postShift. + * At the output of the filter's accumulator is a shift register which shifts the result by postShift bits. + * This essentially scales the filter coefficients by 2^postShift and + * allows the filter coefficients to exceed the range [+1 -1). + * The value of postShift is set by the user based on the expected gain through the system being modeled. + * + * \par Overflow and Saturation: + * Overflow and saturation behavior of the fixed-point Q15 and Q31 versions are + * described separately as part of the function specific documentation below. + */ + + +/** + * @addtogroup LMS_NORM + * @{ + */ + + + /** + * @brief Processing function for floating-point normalized LMS filter. + * @param[in] *S points to an instance of the floating-point normalized LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + +void arm_lms_norm_f32( + arm_lms_norm_instance_f32 * S, + float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + float32_t mu = S->mu; /* Adaptive factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + float32_t energy; /* Energy of the input */ + float32_t sum, e, d; /* accumulator, error, reference data sample */ + float32_t w, x0, in; /* weight factor, temporary variable to hold input sample and state */ + + /* Initializations of error, difference, Coefficient update */ + e = 0.0f; + d = 0.0f; + w = 0.0f; + + energy = S->energy; + x0 = S->x0; + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + while(blkCnt > 0u) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Read the sample from input buffer */ + in = *pSrc++; + + /* Update the energy calculation */ + energy -= x0 * x0; + energy += in * in; + + /* Set the accumulator to zero */ + sum = 0.0f; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + sum += (*px++) * (*pb++); + sum += (*px++) * (*pb++); + sum += (*px++) * (*pb++); + sum += (*px++) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + sum += (*px++) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result in the accumulator, store in the destination buffer. */ + *pOut++ = sum; + + /* Compute and store error */ + d = (float32_t) (*pRef++); + e = d - sum; + *pErr++ = e; + + /* Calculation of Weighting factor for updating filter coefficients */ + /* epsilon value 0.000000119209289f */ + w = (e * mu) / (energy + 0.000000119209289f); + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Update filter coefficients */ + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + *pb += w * (*px++); + pb++; + + *pb += w * (*px++); + pb++; + + *pb += w * (*px++); + pb++; + + *pb += w * (*px++); + pb++; + + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + *pb += w * (*px++); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + x0 = *pState; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + S->energy = energy; + S->x0 = x0; + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + satrt of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Loop unrolling for (numTaps - 1u)/4 samples copy */ + tapCnt = (numTaps - 1u) >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + while(blkCnt > 0u) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize pCoeffs pointer */ + pb = pCoeffs; + + /* Read the sample from input buffer */ + in = *pSrc++; + + /* Update the energy calculation */ + energy -= x0 * x0; + energy += in * in; + + /* Set the accumulator to zero */ + sum = 0.0f; + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + sum += (*px++) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result in the accumulator is stored in the destination buffer. */ + *pOut++ = sum; + + /* Compute and store error */ + d = (float32_t) (*pRef++); + e = d - sum; + *pErr++ = e; + + /* Calculation of Weighting factor for updating filter coefficients */ + /* epsilon value 0.000000119209289f */ + w = (e * mu) / (energy + 0.000000119209289f); + + /* Initialize pState pointer */ + px = pState; + + /* Initialize pCcoeffs pointer */ + pb = pCoeffs; + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + *pb += w * (*px++); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + x0 = *pState; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + S->energy = energy; + S->x0 = x0; + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + satrt of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Copy (numTaps - 1u) samples */ + tapCnt = (numTaps - 1u); + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of LMS_NORM group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,105 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_norm_init_f32.c +* +* Description: Floating-point NLMS filter initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup LMS_NORM + * @{ + */ + + /** + * @brief Initialization function for floating-point normalized LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @return none. + * + * \par Description: + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * The initial filter coefficients serve as a starting point for the adaptive filter. + * pState points to an array of length numTaps+blockSize-1 samples, + * where blockSize is the number of input samples processed by each call to arm_lms_norm_f32(). + */ + +void arm_lms_norm_init_f32( + arm_lms_norm_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps - 1 */ + memset(pState, 0, (numTaps + (blockSize - 1u)) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; + + /* Initialise Energy to zero */ + S->energy = 0.0f; + + /* Initialise x0 to zero */ + S->x0 = 0.0f; + +} + +/** + * @} end of LMS_NORM group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,112 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_norm_init_q15.c +* +* Description: Q15 NLMS initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @addtogroup LMS_NORM + * @{ + */ + + /** + * @brief Initialization function for Q15 normalized LMS filter. + * @param[in] *S points to an instance of the Q15 normalized LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * The initial filter coefficients serve as a starting point for the adaptive filter. + * pState points to the array of state variables and size of array is + * numTaps+blockSize-1 samples, where blockSize is the number of input samples processed + * by each call to arm_lms_norm_q15(). + */ + +void arm_lms_norm_init_q15( + arm_lms_norm_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint8_t postShift) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps - 1 */ + memset(pState, 0, (numTaps + (blockSize - 1u)) * sizeof(q15_t)); + + /* Assign post Shift value applied to coefficients */ + S->postShift = postShift; + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; + + /* Initialize reciprocal pointer table */ + S->recipTable = (q15_t *) armRecipTableQ15; + + /* Initialise Energy to zero */ + S->energy = 0; + + /* Initialise x0 to zero */ + S->x0 = 0; + +} + +/** + * @} end of LMS_NORM group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,111 @@ +/*----------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_norm_init_q31.c +* +* Description: Q31 NLMS initialization function. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------*/ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @addtogroup LMS_NORM + * @{ + */ + + /** + * @brief Initialization function for Q31 normalized LMS filter. + * @param[in] *S points to an instance of the Q31 normalized LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + * + * Description: + * \par + * pCoeffs points to the array of filter coefficients stored in time reversed order: + *
    
+ *    {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}    
+ * 
+ * The initial filter coefficients serve as a starting point for the adaptive filter. + * pState points to an array of length numTaps+blockSize-1 samples, + * where blockSize is the number of input samples processed by each call to arm_lms_norm_q31(). + */ + +void arm_lms_norm_init_q31( + arm_lms_norm_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint8_t postShift) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps - 1 */ + memset(pState, 0, (numTaps + (blockSize - 1u)) * sizeof(q31_t)); + + /* Assign post Shift value applied to coefficients */ + S->postShift = postShift; + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; + + /* Initialize reciprocal pointer table */ + S->recipTable = (q31_t *) armRecipTableQ31; + + /* Initialise Energy to zero */ + S->energy = 0; + + /* Initialise x0 to zero */ + S->x0 = 0; + +} + +/** + * @} end of LMS_NORM group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,440 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_norm_q15.c +* +* Description: Q15 NLMS filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup LMS_NORM + * @{ + */ + +/** +* @brief Processing function for Q15 normalized LMS filter. +* @param[in] *S points to an instance of the Q15 normalized LMS filter structure. +* @param[in] *pSrc points to the block of input data. +* @param[in] *pRef points to the block of reference data. +* @param[out] *pOut points to the block of output data. +* @param[out] *pErr points to the block of error data. +* @param[in] blockSize number of samples to process. +* @return none. +* +* Scaling and Overflow Behavior: +* \par +* The function is implemented using a 64-bit internal accumulator. +* Both coefficients and state variables are represented in 1.15 format and +* multiplications yield a 2.30 result. The 2.30 intermediate results are +* accumulated in a 64-bit accumulator in 34.30 format. +* There is no risk of internal overflow with this approach and the full +* precision of intermediate multiplications is preserved. After all additions +* have been performed, the accumulator is truncated to 34.15 format by +* discarding low 15 bits. Lastly, the accumulator is saturated to yield a +* result in 1.15 format. +* +* \par +* In this filter, filter coefficients are updated for each sample and the updation of filter cofficients are saturted. +* + */ + +void arm_lms_norm_q15( + arm_lms_norm_instance_q15 * S, + q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + q15_t mu = S->mu; /* Adaptive factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + q31_t energy; /* Energy of the input */ + q63_t acc; /* Accumulator */ + q15_t e = 0, d = 0; /* error, reference data sample */ + q15_t w = 0, in; /* weight factor and state */ + q15_t x0; /* temporary variable to hold input sample */ + //uint32_t shift = (uint32_t) S->postShift + 1u; /* Shift to be applied to the output */ + q15_t errorXmu, oneByEnergy; /* Temporary variables to store error and mu product and reciprocal of energy */ + q15_t postShift; /* Post shift to be applied to weight after reciprocal calculation */ + q31_t coef; /* Teporary variable for coefficient */ + q31_t acc_l, acc_h; + int32_t lShift = (15 - (int32_t) S->postShift); /* Post shift */ + int32_t uShift = (32 - lShift); + + energy = S->energy; + x0 = S->x0; + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + while(blkCnt > 0u) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Read the sample from input buffer */ + in = *pSrc++; + + /* Update the energy calculation */ + energy -= (((q31_t) x0 * (x0)) >> 15); + energy += (((q31_t) in * (in)) >> 15); + + /* Set the accumulator to zero */ + acc = 0; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + while(tapCnt > 0u) + { + + /* Perform the multiply-accumulate */ +#ifndef UNALIGNED_SUPPORT_DISABLE + + acc = __SMLALD(*__SIMD32(px)++, (*__SIMD32(pb)++), acc); + acc = __SMLALD(*__SIMD32(px)++, (*__SIMD32(pb)++), acc); + +#else + + acc += (((q31_t) * px++ * (*pb++))); + acc += (((q31_t) * px++ * (*pb++))); + acc += (((q31_t) * px++ * (*pb++))); + acc += (((q31_t) * px++ * (*pb++))); + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + acc += (((q31_t) * px++ * (*pb++))); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Converting the result to 1.15 format and saturate the output */ + acc = __SSAT(acc, 16u); + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q15_t) acc; + + /* Compute and store error */ + d = *pRef++; + e = d - (q15_t) acc; + *pErr++ = e; + + /* Calculation of 1/energy */ + postShift = arm_recip_q15((q15_t) energy + DELTA_Q15, + &oneByEnergy, S->recipTable); + + /* Calculation of e * mu value */ + errorXmu = (q15_t) (((q31_t) e * mu) >> 15); + + /* Calculation of (e * mu) * (1/energy) value */ + acc = (((q31_t) errorXmu * oneByEnergy) >> (15 - postShift)); + + /* Weighting factor for the normalized version */ + w = (q15_t) __SSAT((q31_t) acc, 16); + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Update filter coefficients */ + while(tapCnt > 0u) + { + coef = *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + coef = *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + coef = *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + coef = *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + coef = *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Read the sample from state buffer */ + x0 = *pState; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Save energy and x0 values for the next frame */ + S->energy = (q15_t) energy; + S->x0 = x0; + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + satrt of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Calculation of count for copying integer writes */ + tapCnt = (numTaps - 1u) >> 2; + + while(tapCnt > 0u) + { + +#ifndef UNALIGNED_SUPPORT_DISABLE + + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + +#else + + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + +#endif + + tapCnt--; + + } + + /* Calculation of count for remaining q15_t data */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + while(blkCnt > 0u) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize pCoeffs pointer */ + pb = pCoeffs; + + /* Read the sample from input buffer */ + in = *pSrc++; + + /* Update the energy calculation */ + energy -= (((q31_t) x0 * (x0)) >> 15); + energy += (((q31_t) in * (in)) >> 15); + + /* Set the accumulator to zero */ + acc = 0; + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + acc += (((q31_t) * px++ * (*pb++))); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Converting the result to 1.15 format and saturate the output */ + acc = __SSAT(acc, 16u); + + /* Converting the result to 1.15 format */ + //acc = __SSAT((acc >> (16u - shift)), 16u); + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q15_t) acc; + + /* Compute and store error */ + d = *pRef++; + e = d - (q15_t) acc; + *pErr++ = e; + + /* Calculation of 1/energy */ + postShift = arm_recip_q15((q15_t) energy + DELTA_Q15, + &oneByEnergy, S->recipTable); + + /* Calculation of e * mu value */ + errorXmu = (q15_t) (((q31_t) e * mu) >> 15); + + /* Calculation of (e * mu) * (1/energy) value */ + acc = (((q31_t) errorXmu * oneByEnergy) >> (15 - postShift)); + + /* Weighting factor for the normalized version */ + w = (q15_t) __SSAT((q31_t) acc, 16); + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + coef = *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Read the sample from state buffer */ + x0 = *pState; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Save energy and x0 values for the next frame */ + S->energy = (q15_t) energy; + S->x0 = x0; + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + satrt of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* copy (numTaps - 1u) data */ + tapCnt = (numTaps - 1u); + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + + +/** + * @} end of LMS_NORM group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,431 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_norm_q31.c +* +* Description: Processing function for the Q31 NLMS filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup LMS_NORM + * @{ + */ + +/** +* @brief Processing function for Q31 normalized LMS filter. +* @param[in] *S points to an instance of the Q31 normalized LMS filter structure. +* @param[in] *pSrc points to the block of input data. +* @param[in] *pRef points to the block of reference data. +* @param[out] *pOut points to the block of output data. +* @param[out] *pErr points to the block of error data. +* @param[in] blockSize number of samples to process. +* @return none. +* +* Scaling and Overflow Behavior: +* \par +* The function is implemented using an internal 64-bit accumulator. +* The accumulator has a 2.62 format and maintains full precision of the intermediate +* multiplication results but provides only a single guard bit. +* Thus, if the accumulator result overflows it wraps around rather than clip. +* In order to avoid overflows completely the input signal must be scaled down by +* log2(numTaps) bits. The reference signal should not be scaled down. +* After all multiply-accumulates are performed, the 2.62 accumulator is shifted +* and saturated to 1.31 format to yield the final result. +* The output signal and error signal are in 1.31 format. +* +* \par +* In this filter, filter coefficients are updated for each sample and the +* updation of filter cofficients are saturted. +* +*/ + +void arm_lms_norm_q31( + arm_lms_norm_instance_q31 * S, + q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + q31_t mu = S->mu; /* Adaptive factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + q63_t energy; /* Energy of the input */ + q63_t acc; /* Accumulator */ + q31_t e = 0, d = 0; /* error, reference data sample */ + q31_t w = 0, in; /* weight factor and state */ + q31_t x0; /* temporary variable to hold input sample */ +// uint32_t shift = 32u - ((uint32_t) S->postShift + 1u); /* Shift to be applied to the output */ + q31_t errorXmu, oneByEnergy; /* Temporary variables to store error and mu product and reciprocal of energy */ + q31_t postShift; /* Post shift to be applied to weight after reciprocal calculation */ + q31_t coef; /* Temporary variable for coef */ + q31_t acc_l, acc_h; /* temporary input */ + uint32_t uShift = ((uint32_t) S->postShift + 1u); + uint32_t lShift = 32u - uShift; /* Shift to be applied to the output */ + + energy = S->energy; + x0 = S->x0; + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + while(blkCnt > 0u) + { + + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Read the sample from input buffer */ + in = *pSrc++; + + /* Update the energy calculation */ + energy = (q31_t) ((((q63_t) energy << 32) - + (((q63_t) x0 * x0) << 1)) >> 32); + energy = (q31_t) (((((q63_t) in * in) << 1) + (energy << 32)) >> 32); + + /* Set the accumulator to zero */ + acc = 0; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + acc += ((q63_t) (*px++)) * (*pb++); + acc += ((q63_t) (*px++)) * (*pb++); + acc += ((q63_t) (*px++)) * (*pb++); + acc += ((q63_t) (*px++)) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Converting the result to 1.31 format */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q31_t) acc; + + /* Compute and store error */ + d = *pRef++; + e = d - (q31_t) acc; + *pErr++ = e; + + /* Calculates the reciprocal of energy */ + postShift = arm_recip_q31(energy + DELTA_Q31, + &oneByEnergy, &S->recipTable[0]); + + /* Calculation of product of (e * mu) */ + errorXmu = (q31_t) (((q63_t) e * mu) >> 31); + + /* Weighting factor for the normalized version */ + w = clip_q63_to_q31(((q63_t) errorXmu * oneByEnergy) >> (31 - postShift)); + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Update filter coefficients */ + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + + /* coef is in 2.30 format */ + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + /* get coef in 1.31 format by left shifting */ + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + /* update coefficient buffer to next coefficient */ + pb++; + + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + pb++; + + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + pb++; + + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Read the sample from state buffer */ + x0 = *pState; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Save energy and x0 values for the next frame */ + S->energy = (q31_t) energy; + S->x0 = x0; + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + satrt of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Loop unrolling for (numTaps - 1u) samples copy */ + tapCnt = (numTaps - 1u) >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + while(blkCnt > 0u) + { + + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize pCoeffs pointer */ + pb = pCoeffs; + + /* Read the sample from input buffer */ + in = *pSrc++; + + /* Update the energy calculation */ + energy = + (q31_t) ((((q63_t) energy << 32) - (((q63_t) x0 * x0) << 1)) >> 32); + energy = (q31_t) (((((q63_t) in * in) << 1) + (energy << 32)) >> 32); + + /* Set the accumulator to zero */ + acc = 0; + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Converting the result to 1.31 format */ + /* Converting the result to 1.31 format */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + + //acc = (q31_t) (acc >> shift); + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q31_t) acc; + + /* Compute and store error */ + d = *pRef++; + e = d - (q31_t) acc; + *pErr++ = e; + + /* Calculates the reciprocal of energy */ + postShift = + arm_recip_q31(energy + DELTA_Q31, &oneByEnergy, &S->recipTable[0]); + + /* Calculation of product of (e * mu) */ + errorXmu = (q31_t) (((q63_t) e * mu) >> 31); + + /* Weighting factor for the normalized version */ + w = clip_q63_to_q31(((q63_t) errorXmu * oneByEnergy) >> (31 - postShift)); + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + /* coef is in 2.30 format */ + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + /* get coef in 1.31 format by left shifting */ + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + /* update coefficient buffer to next coefficient */ + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Read the sample from state buffer */ + x0 = *pState; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Save energy and x0 values for the next frame */ + S->energy = (q31_t) energy; + S->x0 = x0; + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + start of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Loop for (numTaps - 1u) samples copy */ + tapCnt = (numTaps - 1u); + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of LMS_NORM group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,380 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_q15.c +* +* Description: Processing function for the Q15 LMS filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup LMS + * @{ + */ + + /** + * @brief Processing function for Q15 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + * + * \par Scaling and Overflow Behavior: + * The function is implemented using a 64-bit internal accumulator. + * Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + * Lastly, the accumulator is saturated to yield a result in 1.15 format. + * + * \par + * In this filter, filter coefficients are updated for each sample and the updation of filter cofficients are saturted. + * + */ + +void arm_lms_q15( + const arm_lms_instance_q15 * S, + q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t mu = S->mu; /* Adaptive factor */ + q15_t *px; /* Temporary pointer for state */ + q15_t *pb; /* Temporary pointer for coefficient buffer */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + q63_t acc; /* Accumulator */ + q15_t e = 0; /* error of data sample */ + q15_t alpha; /* Intermediate constant for taps update */ + q31_t coef; /* Teporary variable for coefficient */ + q31_t acc_l, acc_h; + int32_t lShift = (15 - (int32_t) S->postShift); /* Post shift */ + int32_t uShift = (32 - lShift); + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Initializing blkCnt with blockSize */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Set the accumulator to zero */ + acc = 0; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2u; + + while(tapCnt > 0u) + { + /* acc += b[N] * x[n-N] + b[N-1] * x[n-N-1] */ + /* Perform the multiply-accumulate */ +#ifndef UNALIGNED_SUPPORT_DISABLE + + acc = __SMLALD(*__SIMD32(px)++, (*__SIMD32(pb)++), acc); + acc = __SMLALD(*__SIMD32(px)++, (*__SIMD32(pb)++), acc); + +#else + + acc += (q63_t) (((q31_t) (*px++) * (*pb++))); + acc += (q63_t) (((q31_t) (*px++) * (*pb++))); + acc += (q63_t) (((q31_t) (*px++) * (*pb++))); + acc += (q63_t) (((q31_t) (*px++) * (*pb++))); + + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + acc += (q63_t) (((q31_t) (*px++) * (*pb++))); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Converting the result to 1.15 format and saturate the output */ + acc = __SSAT(acc, 16); + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q15_t) acc; + + /* Compute and store error */ + e = *pRef++ - (q15_t) acc; + + *pErr++ = (q15_t) e; + + /* Compute alpha i.e. intermediate constant for taps update */ + alpha = (q15_t) (((q31_t) e * (mu)) >> 15); + + /* Initialize state pointer */ + /* Advance state pointer by 1 for the next sample */ + px = pState++; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2u; + + /* Update filter coefficients */ + while(tapCnt > 0u) + { + coef = (q31_t) * pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + coef = (q31_t) * pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + coef = (q31_t) * pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + coef = (q31_t) * pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + coef = (q31_t) * pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Decrement the loop counter */ + blkCnt--; + + } + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + satrt of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Calculation of count for copying integer writes */ + tapCnt = (numTaps - 1u) >> 2; + + while(tapCnt > 0u) + { + +#ifndef UNALIGNED_SUPPORT_DISABLE + + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; + *__SIMD32(pStateCurnt)++ = *__SIMD32(pState)++; +#else + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; +#endif + + tapCnt--; + + } + + /* Calculation of count for remaining q15_t data */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize pCoeffs pointer */ + pb = pCoeffs; + + /* Set the accumulator to zero */ + acc = 0; + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + acc += (q63_t) ((q31_t) (*px++) * (*pb++)); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Converting the result to 1.15 format and saturate the output */ + acc = __SSAT(acc, 16); + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q15_t) acc; + + /* Compute and store error */ + e = *pRef++ - (q15_t) acc; + + *pErr++ = (q15_t) e; + + /* Compute alpha i.e. intermediate constant for taps update */ + alpha = (q15_t) (((q31_t) e * (mu)) >> 15); + + /* Initialize pState pointer */ + /* Advance state pointer by 1 for the next sample */ + px = pState++; + + /* Initialize pCoeffs pointer */ + pb = pCoeffs; + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + coef = (q31_t) * pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Decrement the loop counter */ + blkCnt--; + + } + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + start of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Copy (numTaps - 1u) samples */ + tapCnt = (numTaps - 1u); + + /* Copy the data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of LMS group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,369 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_lms_q31.c +* +* Description: Processing function for the Q31 LMS filter. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +/** + * @ingroup groupFilters + */ + +/** + * @addtogroup LMS + * @{ + */ + + /** + * @brief Processing function for Q31 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + * + * \par Scaling and Overflow Behavior: + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate + * multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clips. + * In order to avoid overflows completely the input signal must be scaled down by + * log2(numTaps) bits. + * The reference signal should not be scaled down. + * After all multiply-accumulates are performed, the 2.62 accumulator is shifted + * and saturated to 1.31 format to yield the final result. + * The output signal and error signal are in 1.31 format. + * + * \par + * In this filter, filter coefficients are updated for each sample and the updation of filter cofficients are saturted. + */ + +void arm_lms_q31( + const arm_lms_instance_q31 * S, + q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t mu = S->mu; /* Adaptive factor */ + q31_t *px; /* Temporary pointer for state */ + q31_t *pb; /* Temporary pointer for coefficient buffer */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + q63_t acc; /* Accumulator */ + q31_t e = 0; /* error of data sample */ + q31_t alpha; /* Intermediate constant for taps update */ + q31_t coef; /* Temporary variable for coef */ + q31_t acc_l, acc_h; /* temporary input */ + uint32_t uShift = ((uint32_t) S->postShift + 1u); + uint32_t lShift = 32u - uShift; /* Shift to be applied to the output */ + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1u)]); + + /* Initializing blkCnt with blockSize */ + blkCnt = blockSize; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + while(blkCnt > 0u) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Set the accumulator to zero */ + acc = 0; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + /* acc += b[N] * x[n-N] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* acc += b[N-1] * x[n-N-1] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* acc += b[N-2] * x[n-N-2] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* acc += b[N-3] * x[n-N-3] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Converting the result to 1.31 format */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q31_t) acc; + + /* Compute and store error */ + e = *pRef++ - (q31_t) acc; + + *pErr++ = (q31_t) e; + + /* Compute alpha i.e. intermediate constant for taps update */ + alpha = (q31_t) (((q63_t) e * mu) >> 31); + + /* Initialize state pointer */ + /* Advance state pointer by 1 for the next sample */ + px = pState++; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Update filter coefficients */ + while(tapCnt > 0u) + { + /* coef is in 2.30 format */ + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + /* get coef in 1.31 format by left shifting */ + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + /* update coefficient buffer to next coefficient */ + pb++; + + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + pb++; + + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + pb++; + + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4u; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + satrt of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Loop unrolling for (numTaps - 1u) samples copy */ + tapCnt = (numTaps - 1u) >> 2u; + + /* copy data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1u) % 0x4u; + + /* Copy the remaining q31_t data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + while(blkCnt > 0u) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize pCoeffs pointer */ + pb = pCoeffs; + + /* Set the accumulator to zero */ + acc = 0; + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Converting the result to 1.31 format */ + /* Store the result from accumulator into the destination buffer. */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + *pOut++ = (q31_t) acc; + + /* Compute and store error */ + e = *pRef++ - (q31_t) acc; + + *pErr++ = (q31_t) e; + + /* Weighting factor for the LMS version */ + alpha = (q31_t) (((q63_t) e * mu) >> 31); + + /* Initialize pState pointer */ + /* Advance state pointer by 1 for the next sample */ + px = pState++; + + /* Initialize pCoeffs pointer */ + pb = pCoeffs; + + /* Loop over numTaps number of values */ + tapCnt = numTaps; + + while(tapCnt > 0u) + { + /* Perform the multiply-accumulate */ + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1u)); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + start of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Copy (numTaps - 1u) samples */ + tapCnt = (numTaps - 1u); + + /* Copy the data */ + while(tapCnt > 0u) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of LMS group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_add_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_add_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,208 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_add_f32.c +* +* Description: Floating-point matrix addition +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @defgroup MatrixAdd Matrix Addition + * + * Adds two matrices. + * \image html MatrixAddition.gif "Addition of two 3 x 3 matrices" + * + * The functions check to make sure that + * pSrcA, pSrcB, and pDst have the same + * number of rows and columns. + */ + +/** + * @addtogroup MatrixAdd + * @{ + */ + + +/** + * @brief Floating-point matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + +arm_status arm_mat_add_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst) +{ + float32_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + float32_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + float32_t *pOut = pDst->pData; /* output data matrix pointer */ + +#ifndef ARM_MATH_CM0_FAMILY + + float32_t inA1, inA2, inB1, inB2, out1, out2; /* temporary variables */ + +#endif // #ifndef ARM_MATH_CM0_FAMILY + + uint32_t numSamples; /* total number of elements in the matrix */ + uint32_t blkCnt; /* loop counters */ + arm_status status; /* status of matrix addition */ + +#ifdef ARM_MATH_MATRIX_CHECK + /* Check for matrix mismatch condition */ + if((pSrcA->numRows != pSrcB->numRows) || + (pSrcA->numCols != pSrcB->numCols) || + (pSrcA->numRows != pDst->numRows) || (pSrcA->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif + { + + /* Total number of samples in the input matrix */ + numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Loop unrolling */ + blkCnt = numSamples >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) + B(m,n) */ + /* Add and then store the results in the destination buffer. */ + /* Read values from source A */ + inA1 = pIn1[0]; + + /* Read values from source B */ + inB1 = pIn2[0]; + + /* Read values from source A */ + inA2 = pIn1[1]; + + /* out = sourceA + sourceB */ + out1 = inA1 + inB1; + + /* Read values from source B */ + inB2 = pIn2[1]; + + /* Read values from source A */ + inA1 = pIn1[2]; + + /* out = sourceA + sourceB */ + out2 = inA2 + inB2; + + /* Read values from source B */ + inB1 = pIn2[2]; + + /* Store result in destination */ + pOut[0] = out1; + pOut[1] = out2; + + /* Read values from source A */ + inA2 = pIn1[3]; + + /* Read values from source B */ + inB2 = pIn2[3]; + + /* out = sourceA + sourceB */ + out1 = inA1 + inB1; + + /* out = sourceA + sourceB */ + out2 = inA2 + inB2; + + /* Store result in destination */ + pOut[2] = out1; + + /* Store result in destination */ + pOut[3] = out2; + + + /* update pointers to process next sampels */ + pIn1 += 4u; + pIn2 += 4u; + pOut += 4u; + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the numSamples is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = numSamples % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) + B(m,n) */ + /* Add and then store the results in the destination buffer. */ + *pOut++ = (*pIn1++) + (*pIn2++); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixAdd group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_add_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_add_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,163 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_add_q15.c +* +* Description: Q15 matrix addition +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixAdd + * @{ + */ + +/** + * @brief Q15 matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q15 range [0x8000 0x7FFF] will be saturated. + */ + +arm_status arm_mat_add_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst) +{ + q15_t *pInA = pSrcA->pData; /* input data matrix pointer A */ + q15_t *pInB = pSrcB->pData; /* input data matrix pointer B */ + q15_t *pOut = pDst->pData; /* output data matrix pointer */ + uint16_t numSamples; /* total number of elements in the matrix */ + uint32_t blkCnt; /* loop counters */ + arm_status status; /* status of matrix addition */ + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrcA->numRows != pSrcB->numRows) || + (pSrcA->numCols != pSrcB->numCols) || + (pSrcA->numRows != pDst->numRows) || (pSrcA->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* Total number of samples in the input matrix */ + numSamples = (uint16_t) (pSrcA->numRows * pSrcA->numCols); + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Loop unrolling */ + blkCnt = (uint32_t) numSamples >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) + B(m,n) */ + /* Add, Saturate and then store the results in the destination buffer. */ + *__SIMD32(pOut)++ = __QADD16(*__SIMD32(pInA)++, *__SIMD32(pInB)++); + *__SIMD32(pOut)++ = __QADD16(*__SIMD32(pInA)++, *__SIMD32(pInB)++); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = (uint32_t) numSamples % 0x4u; + + /* q15 pointers of input and output are initialized */ + + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) + B(m,n) */ + /* Add, Saturate and then store the results in the destination buffer. */ + *pOut++ = (q15_t) __QADD16(*pInA++, *pInB++); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = (uint32_t) numSamples; + + + /* q15 pointers of input and output are initialized */ + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) + B(m,n) */ + /* Add, Saturate and then store the results in the destination buffer. */ + *pOut++ = (q15_t) __SSAT(((q31_t) * pInA++ + *pInB++), 16); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixAdd group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_add_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_add_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,207 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_add_q31.c +* +* Description: Q31 matrix addition +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixAdd + * @{ + */ + +/** + * @brief Q31 matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] will be saturated. + */ + +arm_status arm_mat_add_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst) +{ + q31_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + q31_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + q31_t *pOut = pDst->pData; /* output data matrix pointer */ + q31_t inA1, inB1; /* temporary variables */ + +#ifndef ARM_MATH_CM0_FAMILY + + q31_t inA2, inB2; /* temporary variables */ + q31_t out1, out2; /* temporary variables */ + +#endif // #ifndef ARM_MATH_CM0_FAMILY + + uint32_t numSamples; /* total number of elements in the matrix */ + uint32_t blkCnt; /* loop counters */ + arm_status status; /* status of matrix addition */ + +#ifdef ARM_MATH_MATRIX_CHECK + /* Check for matrix mismatch condition */ + if((pSrcA->numRows != pSrcB->numRows) || + (pSrcA->numCols != pSrcB->numCols) || + (pSrcA->numRows != pDst->numRows) || (pSrcA->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif + { + /* Total number of samples in the input matrix */ + numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Loop Unrolling */ + blkCnt = numSamples >> 2u; + + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) + B(m,n) */ + /* Add, saturate and then store the results in the destination buffer. */ + /* Read values from source A */ + inA1 = pIn1[0]; + + /* Read values from source B */ + inB1 = pIn2[0]; + + /* Read values from source A */ + inA2 = pIn1[1]; + + /* Add and saturate */ + out1 = __QADD(inA1, inB1); + + /* Read values from source B */ + inB2 = pIn2[1]; + + /* Read values from source A */ + inA1 = pIn1[2]; + + /* Add and saturate */ + out2 = __QADD(inA2, inB2); + + /* Read values from source B */ + inB1 = pIn2[2]; + + /* Store result in destination */ + pOut[0] = out1; + pOut[1] = out2; + + /* Read values from source A */ + inA2 = pIn1[3]; + + /* Read values from source B */ + inB2 = pIn2[3]; + + /* Add and saturate */ + out1 = __QADD(inA1, inB1); + out2 = __QADD(inA2, inB2); + + /* Store result in destination */ + pOut[2] = out1; + pOut[3] = out2; + + /* update pointers to process next sampels */ + pIn1 += 4u; + pIn2 += 4u; + pOut += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the numSamples is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = numSamples % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) + B(m,n) */ + /* Add, saturate and then store the results in the destination buffer. */ + inA1 = *pIn1++; + inB1 = *pIn2++; + + inA1 = __QADD(inA1, inB1); + + /* Decrement the loop counter */ + blkCnt--; + + *pOut++ = inA1; + + } + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixAdd group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,283 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_cmplx_mult_f32.c +* +* Description: Floating-point matrix multiplication. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @defgroup CmplxMatrixMult Complex Matrix Multiplication + * + * Complex Matrix multiplication is only defined if the number of columns of the + * first matrix equals the number of rows of the second matrix. + * Multiplying an M x N matrix with an N x P matrix results + * in an M x P matrix. + * When matrix size checking is enabled, the functions check: (1) that the inner dimensions of + * pSrcA and pSrcB are equal; and (2) that the size of the output + * matrix equals the outer dimensions of pSrcA and pSrcB. + */ + + +/** + * @addtogroup CmplxMatrixMult + * @{ + */ + +/** + * @brief Floating-point Complex matrix multiplication. + * @param[in] *pSrcA points to the first input complex matrix structure + * @param[in] *pSrcB points to the second input complex matrix structure + * @param[out] *pDst points to output complex matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + +arm_status arm_mat_cmplx_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst) +{ + float32_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + float32_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + float32_t *pInA = pSrcA->pData; /* input data matrix pointer A */ + float32_t *pOut = pDst->pData; /* output data matrix pointer */ + float32_t *px; /* Temporary output data matrix pointer */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + float32_t sumReal1, sumImag1; /* accumulator */ + float32_t a0, b0, c0, d0; + float32_t a1, b1, c1, d1; + float32_t sumReal2, sumImag2; /* accumulator */ + + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + uint16_t col, i = 0u, j, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + 2 * i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + j = 0u; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sumReal1 = 0.0f; + sumImag1 = 0.0f; + + sumReal2 = 0.0f; + sumImag2 = 0.0f; + + /* Initiate the pointer pIn1 to point to the starting address of the column being processed */ + pIn1 = pInA; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + colCnt = numColsA >> 2; + + /* matrix multiplication */ + while(colCnt > 0u) + { + + /* Reading real part of complex matrix A */ + a0 = *pIn1; + + /* Reading real part of complex matrix B */ + c0 = *pIn2; + + /* Reading imaginary part of complex matrix A */ + b0 = *(pIn1 + 1u); + + /* Reading imaginary part of complex matrix B */ + d0 = *(pIn2 + 1u); + + sumReal1 += a0 * c0; + sumImag1 += b0 * c0; + + pIn1 += 2u; + pIn2 += 2 * numColsB; + + sumReal2 -= b0 * d0; + sumImag2 += a0 * d0; + + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + + a1 = *pIn1; + c1 = *pIn2; + + b1 = *(pIn1 + 1u); + d1 = *(pIn2 + 1u); + + sumReal1 += a1 * c1; + sumImag1 += b1 * c1; + + pIn1 += 2u; + pIn2 += 2 * numColsB; + + sumReal2 -= b1 * d1; + sumImag2 += a1 * d1; + + a0 = *pIn1; + c0 = *pIn2; + + b0 = *(pIn1 + 1u); + d0 = *(pIn2 + 1u); + + sumReal1 += a0 * c0; + sumImag1 += b0 * c0; + + pIn1 += 2u; + pIn2 += 2 * numColsB; + + sumReal2 -= b0 * d0; + sumImag2 += a0 * d0; + + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + + a1 = *pIn1; + c1 = *pIn2; + + b1 = *(pIn1 + 1u); + d1 = *(pIn2 + 1u); + + sumReal1 += a1 * c1; + sumImag1 += b1 * c1; + + pIn1 += 2u; + pIn2 += 2 * numColsB; + + sumReal2 -= b1 * d1; + sumImag2 += a1 * d1; + + /* Decrement the loop count */ + colCnt--; + } + + /* If the columns of pSrcA is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + colCnt = numColsA % 0x4u; + + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + a1 = *pIn1; + c1 = *pIn2; + + b1 = *(pIn1 + 1u); + d1 = *(pIn2 + 1u); + + sumReal1 += a1 * c1; + sumImag1 += b1 * c1; + + pIn1 += 2u; + pIn2 += 2 * numColsB; + + sumReal2 -= b1 * d1; + sumImag2 += a1 * d1; + + /* Decrement the loop counter */ + colCnt--; + } + + sumReal1 += sumReal2; + sumImag1 += sumImag2; + + /* Store the result in the destination buffer */ + *px++ = sumReal1; + *px++ = sumImag1; + + /* Update the pointer pIn2 to point to the starting address of the next column */ + j++; + pIn2 = pSrcB->pData + 2u * j; + + /* Decrement the column loop counter */ + col--; + + } while(col > 0u); + + /* Update the pointer pInA to point to the starting address of the next row */ + i = i + numColsB; + pInA = pInA + 2 * numColsA; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,424 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cmplx_mat_mult_q15.c +* +* Description: Q15 complex matrix multiplication. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup CmplxMatrixMult + * @{ + */ + + +/** + * @brief Q15 Complex matrix multiplication + * @param[in] *pSrcA points to the first input complex matrix structure + * @param[in] *pSrcB points to the second input complex matrix structure + * @param[out] *pDst points to output complex matrix structure + * @param[in] *pScratch points to the array for storing intermediate results + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * \par Conditions for optimum performance + * Input, output and state buffers should be aligned by 32-bit + * + * \par Restrictions + * If the silicon does not support unaligned memory access enable the macro UNALIGNED_SUPPORT_DISABLE + * In this case input, output, scratch buffers should be aligned by 32-bit + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. The inputs to the + * multiplications are in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate + * results are accumulated in a 64-bit accumulator in 34.30 format. This approach + * provides 33 guard bits and there is no risk of overflow. The 34.30 result is then + * truncated to 34.15 format by discarding the low 15 bits and then saturated to + * 1.15 format. + * + * \par + * Refer to arm_mat_mult_fast_q15() for a faster but less precise version of this function. + * + */ + + + + +arm_status arm_mat_cmplx_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pScratch) +{ + /* accumulator */ + q15_t *pSrcBT = pScratch; /* input data matrix pointer for transpose */ + q15_t *pInA = pSrcA->pData; /* input data matrix pointer A of Q15 type */ + q15_t *pInB = pSrcB->pData; /* input data matrix pointer B of Q15 type */ + q15_t *px; /* Temporary output data matrix pointer */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + uint16_t numRowsB = pSrcB->numRows; /* number of rows of input matrix A */ + uint16_t col, i = 0u, row = numRowsB, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + q63_t sumReal, sumImag; + +#ifdef UNALIGNED_SUPPORT_DISABLE + q15_t in; /* Temporary variable to hold the input value */ + q15_t a, b, c, d; +#else + q31_t in; /* Temporary variable to hold the input value */ + q31_t prod1, prod2; + q31_t pSourceA, pSourceB; +#endif + +#ifdef ARM_MATH_MATRIX_CHECK + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif + { + /* Matrix transpose */ + do + { + /* Apply loop unrolling and exchange the columns with row elements */ + col = numColsB >> 2; + + /* The pointer px is set to starting address of the column being processed */ + px = pSrcBT + i; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(col > 0u) + { +#ifdef UNALIGNED_SUPPORT_DISABLE + /* Read two elements from the row */ + in = *pInB++; + *px = in; + in = *pInB++; + px[1] = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB * 2; + + /* Read two elements from the row */ + in = *pInB++; + *px = in; + in = *pInB++; + px[1] = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB * 2; + + /* Read two elements from the row */ + in = *pInB++; + *px = in; + in = *pInB++; + px[1] = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB * 2; + + /* Read two elements from the row */ + in = *pInB++; + *px = in; + in = *pInB++; + px[1] = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB * 2; + + /* Decrement the column loop counter */ + col--; + } + + /* If the columns of pSrcB is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + col = numColsB % 0x4u; + + while(col > 0u) + { + /* Read two elements from the row */ + in = *pInB++; + *px = in; + in = *pInB++; + px[1] = in; +#else + + /* Read two elements from the row */ + in = *__SIMD32(pInB)++; + + *__SIMD32(px) = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB * 2; + + + /* Read two elements from the row */ + in = *__SIMD32(pInB)++; + + *__SIMD32(px) = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB * 2; + + /* Read two elements from the row */ + in = *__SIMD32(pInB)++; + + *__SIMD32(px) = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB * 2; + + /* Read two elements from the row */ + in = *__SIMD32(pInB)++; + + *__SIMD32(px) = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB * 2; + + /* Decrement the column loop counter */ + col--; + } + + /* If the columns of pSrcB is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + col = numColsB % 0x4u; + + while(col > 0u) + { + /* Read two elements from the row */ + in = *__SIMD32(pInB)++; + + *__SIMD32(px) = in; +#endif + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB * 2; + + /* Decrement the column loop counter */ + col--; + } + + i = i + 2u; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + + /* Reset the variables for the usage in the following multiplication process */ + row = numRowsA; + i = 0u; + px = pDst->pData; + + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the transposed pSrcB data */ + pInB = pSrcBT; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sumReal = 0; + sumImag = 0; + + /* Apply loop unrolling and compute 2 MACs simultaneously. */ + colCnt = numColsA >> 1; + + /* Initiate the pointer pIn1 to point to the starting address of the column being processed */ + pInA = pSrcA->pData + i * 2; + + + /* matrix multiplication */ + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + +#ifdef UNALIGNED_SUPPORT_DISABLE + + /* read real and imag values from pSrcA buffer */ + a = *pInA; + b = *(pInA + 1u); + /* read real and imag values from pSrcB buffer */ + c = *pInB; + d = *(pInB + 1u); + + /* Multiply and Accumlates */ + sumReal += (q31_t) a *c; + sumImag += (q31_t) a *d; + sumReal -= (q31_t) b *d; + sumImag += (q31_t) b *c; + + /* read next real and imag values from pSrcA buffer */ + a = *(pInA + 2u); + b = *(pInA + 3u); + /* read next real and imag values from pSrcB buffer */ + c = *(pInB + 2u); + d = *(pInB + 3u); + + /* update pointer */ + pInA += 4u; + + /* Multiply and Accumlates */ + sumReal += (q31_t) a *c; + sumImag += (q31_t) a *d; + sumReal -= (q31_t) b *d; + sumImag += (q31_t) b *c; + /* update pointer */ + pInB += 4u; +#else + /* read real and imag values from pSrcA and pSrcB buffer */ + pSourceA = *__SIMD32(pInA)++; + pSourceB = *__SIMD32(pInB)++; + + /* Multiply and Accumlates */ +#ifdef ARM_MATH_BIG_ENDIAN + prod1 = -__SMUSD(pSourceA, pSourceB); +#else + prod1 = __SMUSD(pSourceA, pSourceB); +#endif + prod2 = __SMUADX(pSourceA, pSourceB); + sumReal += (q63_t) prod1; + sumImag += (q63_t) prod2; + + /* read real and imag values from pSrcA and pSrcB buffer */ + pSourceA = *__SIMD32(pInA)++; + pSourceB = *__SIMD32(pInB)++; + + /* Multiply and Accumlates */ +#ifdef ARM_MATH_BIG_ENDIAN + prod1 = -__SMUSD(pSourceA, pSourceB); +#else + prod1 = __SMUSD(pSourceA, pSourceB); +#endif + prod2 = __SMUADX(pSourceA, pSourceB); + sumReal += (q63_t) prod1; + sumImag += (q63_t) prod2; + +#endif /* #ifdef UNALIGNED_SUPPORT_DISABLE */ + + /* Decrement the loop counter */ + colCnt--; + } + + /* process odd column samples */ + if((numColsA & 0x1u) > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + +#ifdef UNALIGNED_SUPPORT_DISABLE + + /* read real and imag values from pSrcA and pSrcB buffer */ + a = *pInA++; + b = *pInA++; + c = *pInB++; + d = *pInB++; + + /* Multiply and Accumlates */ + sumReal += (q31_t) a *c; + sumImag += (q31_t) a *d; + sumReal -= (q31_t) b *d; + sumImag += (q31_t) b *c; + +#else + /* read real and imag values from pSrcA and pSrcB buffer */ + pSourceA = *__SIMD32(pInA)++; + pSourceB = *__SIMD32(pInB)++; + + /* Multiply and Accumlates */ +#ifdef ARM_MATH_BIG_ENDIAN + prod1 = -__SMUSD(pSourceA, pSourceB); +#else + prod1 = __SMUSD(pSourceA, pSourceB); +#endif + prod2 = __SMUADX(pSourceA, pSourceB); + sumReal += (q63_t) prod1; + sumImag += (q63_t) prod2; + +#endif /* #ifdef UNALIGNED_SUPPORT_DISABLE */ + + } + + /* Saturate and store the result in the destination buffer */ + + *px++ = (q15_t) (__SSAT(sumReal >> 15, 16)); + *px++ = (q15_t) (__SSAT(sumImag >> 15, 16)); + + /* Decrement the column loop counter */ + col--; + + } while(col > 0u); + + i = i + numColsA; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,293 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_cmplx_mult_q31.c +* +* Description: Floating-point matrix multiplication. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup CmplxMatrixMult + * @{ + */ + +/** + * @brief Q31 Complex matrix multiplication + * @param[in] *pSrcA points to the first input complex matrix structure + * @param[in] *pSrcB points to the second input complex matrix structure + * @param[out] *pDst points to output complex matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate + * multiplication results but provides only a single guard bit. There is no saturation + * on intermediate additions. Thus, if the accumulator overflows it wraps around and + * distorts the result. The input signals should be scaled down to avoid intermediate + * overflows. The input is thus scaled down by log2(numColsA) bits + * to avoid overflows, as a total of numColsA additions are performed internally. + * The 2.62 accumulator is right shifted by 31 bits and saturated to 1.31 format to yield the final result. + * + * + */ + +arm_status arm_mat_cmplx_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst) +{ + q31_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + q31_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + q31_t *pInA = pSrcA->pData; /* input data matrix pointer A */ + q31_t *pOut = pDst->pData; /* output data matrix pointer */ + q31_t *px; /* Temporary output data matrix pointer */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + q63_t sumReal1, sumImag1; /* accumulator */ + q31_t a0, b0, c0, d0; + q31_t a1, b1, c1, d1; + + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + uint16_t col, i = 0u, j, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + 2 * i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + j = 0u; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sumReal1 = 0.0; + sumImag1 = 0.0; + + /* Initiate the pointer pIn1 to point to the starting address of the column being processed */ + pIn1 = pInA; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + colCnt = numColsA >> 2; + + /* matrix multiplication */ + while(colCnt > 0u) + { + + /* Reading real part of complex matrix A */ + a0 = *pIn1; + + /* Reading real part of complex matrix B */ + c0 = *pIn2; + + /* Reading imaginary part of complex matrix A */ + b0 = *(pIn1 + 1u); + + /* Reading imaginary part of complex matrix B */ + d0 = *(pIn2 + 1u); + + /* Multiply and Accumlates */ + sumReal1 += (q63_t) a0 *c0; + sumImag1 += (q63_t) b0 *c0; + + /* update pointers */ + pIn1 += 2u; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal1 -= (q63_t) b0 *d0; + sumImag1 += (q63_t) a0 *d0; + + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + + /* read real and imag values from pSrcA and pSrcB buffer */ + a1 = *pIn1; + c1 = *pIn2; + b1 = *(pIn1 + 1u); + d1 = *(pIn2 + 1u); + + /* Multiply and Accumlates */ + sumReal1 += (q63_t) a1 *c1; + sumImag1 += (q63_t) b1 *c1; + + /* update pointers */ + pIn1 += 2u; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal1 -= (q63_t) b1 *d1; + sumImag1 += (q63_t) a1 *d1; + + a0 = *pIn1; + c0 = *pIn2; + + b0 = *(pIn1 + 1u); + d0 = *(pIn2 + 1u); + + /* Multiply and Accumlates */ + sumReal1 += (q63_t) a0 *c0; + sumImag1 += (q63_t) b0 *c0; + + /* update pointers */ + pIn1 += 2u; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal1 -= (q63_t) b0 *d0; + sumImag1 += (q63_t) a0 *d0; + + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + + a1 = *pIn1; + c1 = *pIn2; + + b1 = *(pIn1 + 1u); + d1 = *(pIn2 + 1u); + + /* Multiply and Accumlates */ + sumReal1 += (q63_t) a1 *c1; + sumImag1 += (q63_t) b1 *c1; + + /* update pointers */ + pIn1 += 2u; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal1 -= (q63_t) b1 *d1; + sumImag1 += (q63_t) a1 *d1; + + /* Decrement the loop count */ + colCnt--; + } + + /* If the columns of pSrcA is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + colCnt = numColsA % 0x4u; + + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + a1 = *pIn1; + c1 = *pIn2; + + b1 = *(pIn1 + 1u); + d1 = *(pIn2 + 1u); + + /* Multiply and Accumlates */ + sumReal1 += (q63_t) a1 *c1; + sumImag1 += (q63_t) b1 *c1; + + /* update pointers */ + pIn1 += 2u; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal1 -= (q63_t) b1 *d1; + sumImag1 += (q63_t) a1 *d1; + + /* Decrement the loop counter */ + colCnt--; + } + + /* Store the result in the destination buffer */ + *px++ = (q31_t) clip_q63_to_q31(sumReal1 >> 31); + *px++ = (q31_t) clip_q63_to_q31(sumImag1 >> 31); + + /* Update the pointer pIn2 to point to the starting address of the next column */ + j++; + pIn2 = pSrcB->pData + 2u * j; + + /* Decrement the column loop counter */ + col--; + + } while(col > 0u); + + /* Update the pointer pInA to point to the starting address of the next row */ + i = i + numColsB; + pInA = pInA + 2 * numColsA; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,88 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_init_f32.c +* +* Description: Floating-point matrix initialization. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @defgroup MatrixInit Matrix Initialization + * + * Initializes the underlying matrix data structure. + * The functions set the numRows, + * numCols, and pData fields + * of the matrix data structure. + */ + +/** + * @addtogroup MatrixInit + * @{ + */ + +/** + * @brief Floating-point matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + +void arm_mat_init_f32( + arm_matrix_instance_f32 * S, + uint16_t nRows, + uint16_t nColumns, + float32_t * pData) +{ + /* Assign Number of Rows */ + S->numRows = nRows; + + /* Assign Number of Columns */ + S->numCols = nColumns; + + /* Assign Data pointer */ + S->pData = pData; +} + +/** + * @} end of MatrixInit group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,80 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_init_q15.c +* +* Description: Q15 matrix initialization. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------------- */ + + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixInit + * @{ + */ + + /** + * @brief Q15 matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + +void arm_mat_init_q15( + arm_matrix_instance_q15 * S, + uint16_t nRows, + uint16_t nColumns, + q15_t * pData) +{ + /* Assign Number of Rows */ + S->numRows = nRows; + + /* Assign Number of Columns */ + S->numCols = nColumns; + + /* Assign Data pointer */ + S->pData = pData; +} + +/** + * @} end of MatrixInit group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,84 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_init_q31.c +* +* Description: Q31 matrix initialization. +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------------- */ + + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @defgroup MatrixInit Matrix Initialization + * + */ + +/** + * @addtogroup MatrixInit + * @{ + */ + + /** + * @brief Q31 matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + +void arm_mat_init_q31( + arm_matrix_instance_q31 * S, + uint16_t nRows, + uint16_t nColumns, + q31_t * pData) +{ + /* Assign Number of Rows */ + S->numRows = nRows; + + /* Assign Number of Columns */ + S->numCols = nColumns; + + /* Assign Data pointer */ + S->pData = pData; +} + +/** + * @} end of MatrixInit group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_inverse_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_inverse_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,703 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_inverse_f32.c +* +* Description: Floating-point matrix inverse. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @defgroup MatrixInv Matrix Inverse + * + * Computes the inverse of a matrix. + * + * The inverse is defined only if the input matrix is square and non-singular (the determinant + * is non-zero). The function checks that the input and output matrices are square and of the + * same size. + * + * Matrix inversion is numerically sensitive and the CMSIS DSP library only supports matrix + * inversion of floating-point matrices. + * + * \par Algorithm + * The Gauss-Jordan method is used to find the inverse. + * The algorithm performs a sequence of elementary row-operations until it + * reduces the input matrix to an identity matrix. Applying the same sequence + * of elementary row-operations to an identity matrix yields the inverse matrix. + * If the input matrix is singular, then the algorithm terminates and returns error status + * ARM_MATH_SINGULAR. + * \image html MatrixInverse.gif "Matrix Inverse of a 3 x 3 matrix using Gauss-Jordan Method" + */ + +/** + * @addtogroup MatrixInv + * @{ + */ + +/** + * @brief Floating-point matrix inverse. + * @param[in] *pSrc points to input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns + * ARM_MATH_SIZE_MISMATCH if the input matrix is not square or if the size + * of the output matrix does not match the size of the input matrix. + * If the input matrix is found to be singular (non-invertible), then the function returns + * ARM_MATH_SINGULAR. Otherwise, the function returns ARM_MATH_SUCCESS. + */ + +arm_status arm_mat_inverse_f32( + const arm_matrix_instance_f32 * pSrc, + arm_matrix_instance_f32 * pDst) +{ + float32_t *pIn = pSrc->pData; /* input data matrix pointer */ + float32_t *pOut = pDst->pData; /* output data matrix pointer */ + float32_t *pInT1, *pInT2; /* Temporary input data matrix pointer */ + float32_t *pOutT1, *pOutT2; /* Temporary output data matrix pointer */ + float32_t *pPivotRowIn, *pPRT_in, *pPivotRowDst, *pPRT_pDst; /* Temporary input and output data matrix pointer */ + uint32_t numRows = pSrc->numRows; /* Number of rows in the matrix */ + uint32_t numCols = pSrc->numCols; /* Number of Cols in the matrix */ + +#ifndef ARM_MATH_CM0_FAMILY + float32_t maxC; /* maximum value in the column */ + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float32_t Xchg, in = 0.0f, in1; /* Temporary input values */ + uint32_t i, rowCnt, flag = 0u, j, loopCnt, k, l; /* loop counters */ + arm_status status; /* status of matrix inverse */ + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pSrc->numCols) || (pDst->numRows != pDst->numCols) + || (pSrc->numRows != pDst->numRows)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + + /*-------------------------------------------------------------------------------------------------------------- + * Matrix Inverse can be solved using elementary row operations. + * + * Gauss-Jordan Method: + * + * 1. First combine the identity matrix and the input matrix separated by a bar to form an + * augmented matrix as follows: + * _ _ _ _ + * | a11 a12 | 1 0 | | X11 X12 | + * | | | = | | + * |_ a21 a22 | 0 1 _| |_ X21 X21 _| + * + * 2. In our implementation, pDst Matrix is used as identity matrix. + * + * 3. Begin with the first row. Let i = 1. + * + * 4. Check to see if the pivot for column i is the greatest of the column. + * The pivot is the element of the main diagonal that is on the current row. + * For instance, if working with row i, then the pivot element is aii. + * If the pivot is not the most significant of the columns, exchange that row with a row + * below it that does contain the most significant value in column i. If the most + * significant value of the column is zero, then an inverse to that matrix does not exist. + * The most significant value of the column is the absolute maximum. + * + * 5. Divide every element of row i by the pivot. + * + * 6. For every row below and row i, replace that row with the sum of that row and + * a multiple of row i so that each new element in column i below row i is zero. + * + * 7. Move to the next row and column and repeat steps 2 through 5 until you have zeros + * for every element below and above the main diagonal. + * + * 8. Now an identical matrix is formed to the left of the bar(input matrix, pSrc). + * Therefore, the matrix to the right of the bar is our solution(pDst matrix, pDst). + *----------------------------------------------------------------------------------------------------------------*/ + + /* Working pointer for destination matrix */ + pOutT1 = pOut; + + /* Loop over the number of rows */ + rowCnt = numRows; + + /* Making the destination matrix as identity matrix */ + while(rowCnt > 0u) + { + /* Writing all zeroes in lower triangle of the destination matrix */ + j = numRows - rowCnt; + while(j > 0u) + { + *pOutT1++ = 0.0f; + j--; + } + + /* Writing all ones in the diagonal of the destination matrix */ + *pOutT1++ = 1.0f; + + /* Writing all zeroes in upper triangle of the destination matrix */ + j = rowCnt - 1u; + while(j > 0u) + { + *pOutT1++ = 0.0f; + j--; + } + + /* Decrement the loop counter */ + rowCnt--; + } + + /* Loop over the number of columns of the input matrix. + All the elements in each column are processed by the row operations */ + loopCnt = numCols; + + /* Index modifier to navigate through the columns */ + l = 0u; + + while(loopCnt > 0u) + { + /* Check if the pivot element is zero.. + * If it is zero then interchange the row with non zero row below. + * If there is no non zero element to replace in the rows below, + * then the matrix is Singular. */ + + /* Working pointer for the input matrix that points + * to the pivot element of the particular row */ + pInT1 = pIn + (l * numCols); + + /* Working pointer for the destination matrix that points + * to the pivot element of the particular row */ + pOutT1 = pOut + (l * numCols); + + /* Temporary variable to hold the pivot value */ + in = *pInT1; + + /* Grab the most significant value from column l */ + maxC = 0; + for (i = l; i < numRows; i++) + { + maxC = *pInT1 > 0 ? (*pInT1 > maxC ? *pInT1 : maxC) : (-*pInT1 > maxC ? -*pInT1 : maxC); + pInT1 += numCols; + } + + /* Update the status if the matrix is singular */ + if(maxC == 0.0f) + { + return ARM_MATH_SINGULAR; + } + + /* Restore pInT1 */ + pInT1 = pIn; + + /* Destination pointer modifier */ + k = 1u; + + /* Check if the pivot element is the most significant of the column */ + if( (in > 0.0f ? in : -in) != maxC) + { + /* Loop over the number rows present below */ + i = numRows - (l + 1u); + + while(i > 0u) + { + /* Update the input and destination pointers */ + pInT2 = pInT1 + (numCols * l); + pOutT2 = pOutT1 + (numCols * k); + + /* Look for the most significant element to + * replace in the rows below */ + if((*pInT2 > 0.0f ? *pInT2: -*pInT2) == maxC) + { + /* Loop over number of columns + * to the right of the pilot element */ + j = numCols - l; + + while(j > 0u) + { + /* Exchange the row elements of the input matrix */ + Xchg = *pInT2; + *pInT2++ = *pInT1; + *pInT1++ = Xchg; + + /* Decrement the loop counter */ + j--; + } + + /* Loop over number of columns of the destination matrix */ + j = numCols; + + while(j > 0u) + { + /* Exchange the row elements of the destination matrix */ + Xchg = *pOutT2; + *pOutT2++ = *pOutT1; + *pOutT1++ = Xchg; + + /* Decrement the loop counter */ + j--; + } + + /* Flag to indicate whether exchange is done or not */ + flag = 1u; + + /* Break after exchange is done */ + break; + } + + /* Update the destination pointer modifier */ + k++; + + /* Decrement the loop counter */ + i--; + } + } + + /* Update the status if the matrix is singular */ + if((flag != 1u) && (in == 0.0f)) + { + return ARM_MATH_SINGULAR; + } + + /* Points to the pivot row of input and destination matrices */ + pPivotRowIn = pIn + (l * numCols); + pPivotRowDst = pOut + (l * numCols); + + /* Temporary pointers to the pivot row pointers */ + pInT1 = pPivotRowIn; + pInT2 = pPivotRowDst; + + /* Pivot element of the row */ + in = *pPivotRowIn; + + /* Loop over number of columns + * to the right of the pilot element */ + j = (numCols - l); + + while(j > 0u) + { + /* Divide each element of the row of the input matrix + * by the pivot element */ + in1 = *pInT1; + *pInT1++ = in1 / in; + + /* Decrement the loop counter */ + j--; + } + + /* Loop over number of columns of the destination matrix */ + j = numCols; + + while(j > 0u) + { + /* Divide each element of the row of the destination matrix + * by the pivot element */ + in1 = *pInT2; + *pInT2++ = in1 / in; + + /* Decrement the loop counter */ + j--; + } + + /* Replace the rows with the sum of that row and a multiple of row i + * so that each new element in column i above row i is zero.*/ + + /* Temporary pointers for input and destination matrices */ + pInT1 = pIn; + pInT2 = pOut; + + /* index used to check for pivot element */ + i = 0u; + + /* Loop over number of rows */ + /* to be replaced by the sum of that row and a multiple of row i */ + k = numRows; + + while(k > 0u) + { + /* Check for the pivot element */ + if(i == l) + { + /* If the processing element is the pivot element, + only the columns to the right are to be processed */ + pInT1 += numCols - l; + + pInT2 += numCols; + } + else + { + /* Element of the reference row */ + in = *pInT1; + + /* Working pointers for input and destination pivot rows */ + pPRT_in = pPivotRowIn; + pPRT_pDst = pPivotRowDst; + + /* Loop over the number of columns to the right of the pivot element, + to replace the elements in the input matrix */ + j = (numCols - l); + + while(j > 0u) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + in1 = *pInT1; + *pInT1++ = in1 - (in * *pPRT_in++); + + /* Decrement the loop counter */ + j--; + } + + /* Loop over the number of columns to + replace the elements in the destination matrix */ + j = numCols; + + while(j > 0u) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + in1 = *pInT2; + *pInT2++ = in1 - (in * *pPRT_pDst++); + + /* Decrement the loop counter */ + j--; + } + + } + + /* Increment the temporary input pointer */ + pInT1 = pInT1 + l; + + /* Decrement the loop counter */ + k--; + + /* Increment the pivot index */ + i++; + } + + /* Increment the input pointer */ + pIn++; + + /* Decrement the loop counter */ + loopCnt--; + + /* Increment the index modifier */ + l++; + } + + +#else + + /* Run the below code for Cortex-M0 */ + + float32_t Xchg, in = 0.0f; /* Temporary input values */ + uint32_t i, rowCnt, flag = 0u, j, loopCnt, k, l; /* loop counters */ + arm_status status; /* status of matrix inverse */ + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pSrc->numCols) || (pDst->numRows != pDst->numCols) + || (pSrc->numRows != pDst->numRows)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + { + + /*-------------------------------------------------------------------------------------------------------------- + * Matrix Inverse can be solved using elementary row operations. + * + * Gauss-Jordan Method: + * + * 1. First combine the identity matrix and the input matrix separated by a bar to form an + * augmented matrix as follows: + * _ _ _ _ _ _ _ _ + * | | a11 a12 | | | 1 0 | | | X11 X12 | + * | | | | | | | = | | + * |_ |_ a21 a22 _| | |_0 1 _| _| |_ X21 X21 _| + * + * 2. In our implementation, pDst Matrix is used as identity matrix. + * + * 3. Begin with the first row. Let i = 1. + * + * 4. Check to see if the pivot for row i is zero. + * The pivot is the element of the main diagonal that is on the current row. + * For instance, if working with row i, then the pivot element is aii. + * If the pivot is zero, exchange that row with a row below it that does not + * contain a zero in column i. If this is not possible, then an inverse + * to that matrix does not exist. + * + * 5. Divide every element of row i by the pivot. + * + * 6. For every row below and row i, replace that row with the sum of that row and + * a multiple of row i so that each new element in column i below row i is zero. + * + * 7. Move to the next row and column and repeat steps 2 through 5 until you have zeros + * for every element below and above the main diagonal. + * + * 8. Now an identical matrix is formed to the left of the bar(input matrix, src). + * Therefore, the matrix to the right of the bar is our solution(dst matrix, dst). + *----------------------------------------------------------------------------------------------------------------*/ + + /* Working pointer for destination matrix */ + pOutT1 = pOut; + + /* Loop over the number of rows */ + rowCnt = numRows; + + /* Making the destination matrix as identity matrix */ + while(rowCnt > 0u) + { + /* Writing all zeroes in lower triangle of the destination matrix */ + j = numRows - rowCnt; + while(j > 0u) + { + *pOutT1++ = 0.0f; + j--; + } + + /* Writing all ones in the diagonal of the destination matrix */ + *pOutT1++ = 1.0f; + + /* Writing all zeroes in upper triangle of the destination matrix */ + j = rowCnt - 1u; + while(j > 0u) + { + *pOutT1++ = 0.0f; + j--; + } + + /* Decrement the loop counter */ + rowCnt--; + } + + /* Loop over the number of columns of the input matrix. + All the elements in each column are processed by the row operations */ + loopCnt = numCols; + + /* Index modifier to navigate through the columns */ + l = 0u; + //for(loopCnt = 0u; loopCnt < numCols; loopCnt++) + while(loopCnt > 0u) + { + /* Check if the pivot element is zero.. + * If it is zero then interchange the row with non zero row below. + * If there is no non zero element to replace in the rows below, + * then the matrix is Singular. */ + + /* Working pointer for the input matrix that points + * to the pivot element of the particular row */ + pInT1 = pIn + (l * numCols); + + /* Working pointer for the destination matrix that points + * to the pivot element of the particular row */ + pOutT1 = pOut + (l * numCols); + + /* Temporary variable to hold the pivot value */ + in = *pInT1; + + /* Destination pointer modifier */ + k = 1u; + + /* Check if the pivot element is zero */ + if(*pInT1 == 0.0f) + { + /* Loop over the number rows present below */ + for (i = (l + 1u); i < numRows; i++) + { + /* Update the input and destination pointers */ + pInT2 = pInT1 + (numCols * l); + pOutT2 = pOutT1 + (numCols * k); + + /* Check if there is a non zero pivot element to + * replace in the rows below */ + if(*pInT2 != 0.0f) + { + /* Loop over number of columns + * to the right of the pilot element */ + for (j = 0u; j < (numCols - l); j++) + { + /* Exchange the row elements of the input matrix */ + Xchg = *pInT2; + *pInT2++ = *pInT1; + *pInT1++ = Xchg; + } + + for (j = 0u; j < numCols; j++) + { + Xchg = *pOutT2; + *pOutT2++ = *pOutT1; + *pOutT1++ = Xchg; + } + + /* Flag to indicate whether exchange is done or not */ + flag = 1u; + + /* Break after exchange is done */ + break; + } + + /* Update the destination pointer modifier */ + k++; + } + } + + /* Update the status if the matrix is singular */ + if((flag != 1u) && (in == 0.0f)) + { + return ARM_MATH_SINGULAR; + } + + /* Points to the pivot row of input and destination matrices */ + pPivotRowIn = pIn + (l * numCols); + pPivotRowDst = pOut + (l * numCols); + + /* Temporary pointers to the pivot row pointers */ + pInT1 = pPivotRowIn; + pOutT1 = pPivotRowDst; + + /* Pivot element of the row */ + in = *(pIn + (l * numCols)); + + /* Loop over number of columns + * to the right of the pilot element */ + for (j = 0u; j < (numCols - l); j++) + { + /* Divide each element of the row of the input matrix + * by the pivot element */ + *pInT1 = *pInT1 / in; + pInT1++; + } + for (j = 0u; j < numCols; j++) + { + /* Divide each element of the row of the destination matrix + * by the pivot element */ + *pOutT1 = *pOutT1 / in; + pOutT1++; + } + + /* Replace the rows with the sum of that row and a multiple of row i + * so that each new element in column i above row i is zero.*/ + + /* Temporary pointers for input and destination matrices */ + pInT1 = pIn; + pOutT1 = pOut; + + for (i = 0u; i < numRows; i++) + { + /* Check for the pivot element */ + if(i == l) + { + /* If the processing element is the pivot element, + only the columns to the right are to be processed */ + pInT1 += numCols - l; + pOutT1 += numCols; + } + else + { + /* Element of the reference row */ + in = *pInT1; + + /* Working pointers for input and destination pivot rows */ + pPRT_in = pPivotRowIn; + pPRT_pDst = pPivotRowDst; + + /* Loop over the number of columns to the right of the pivot element, + to replace the elements in the input matrix */ + for (j = 0u; j < (numCols - l); j++) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + *pInT1 = *pInT1 - (in * *pPRT_in++); + pInT1++; + } + /* Loop over the number of columns to + replace the elements in the destination matrix */ + for (j = 0u; j < numCols; j++) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + *pOutT1 = *pOutT1 - (in * *pPRT_pDst++); + pOutT1++; + } + + } + /* Increment the temporary input pointer */ + pInT1 = pInT1 + l; + } + /* Increment the input pointer */ + pIn++; + + /* Decrement the loop counter */ + loopCnt--; + /* Increment the index modifier */ + l++; + } + + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + + if((flag != 1u) && (in == 0.0f)) + { + pIn = pSrc->pData; + for (i = 0; i < numRows * numCols; i++) + { + if (pIn[i] != 0.0f) + break; + } + + if (i == numRows * numCols) + status = ARM_MATH_SINGULAR; + } + } + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixInv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_inverse_f64.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_inverse_f64.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,703 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_inverse_f64.c +* +* Description: Floating-point matrix inverse. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @defgroup MatrixInv Matrix Inverse + * + * Computes the inverse of a matrix. + * + * The inverse is defined only if the input matrix is square and non-singular (the determinant + * is non-zero). The function checks that the input and output matrices are square and of the + * same size. + * + * Matrix inversion is numerically sensitive and the CMSIS DSP library only supports matrix + * inversion of floating-point matrices. + * + * \par Algorithm + * The Gauss-Jordan method is used to find the inverse. + * The algorithm performs a sequence of elementary row-operations until it + * reduces the input matrix to an identity matrix. Applying the same sequence + * of elementary row-operations to an identity matrix yields the inverse matrix. + * If the input matrix is singular, then the algorithm terminates and returns error status + * ARM_MATH_SINGULAR. + * \image html MatrixInverse.gif "Matrix Inverse of a 3 x 3 matrix using Gauss-Jordan Method" + */ + +/** + * @addtogroup MatrixInv + * @{ + */ + +/** + * @brief Floating-point matrix inverse. + * @param[in] *pSrc points to input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns + * ARM_MATH_SIZE_MISMATCH if the input matrix is not square or if the size + * of the output matrix does not match the size of the input matrix. + * If the input matrix is found to be singular (non-invertible), then the function returns + * ARM_MATH_SINGULAR. Otherwise, the function returns ARM_MATH_SUCCESS. + */ + +arm_status arm_mat_inverse_f64( + const arm_matrix_instance_f64 * pSrc, + arm_matrix_instance_f64 * pDst) +{ + float64_t *pIn = pSrc->pData; /* input data matrix pointer */ + float64_t *pOut = pDst->pData; /* output data matrix pointer */ + float64_t *pInT1, *pInT2; /* Temporary input data matrix pointer */ + float64_t *pOutT1, *pOutT2; /* Temporary output data matrix pointer */ + float64_t *pPivotRowIn, *pPRT_in, *pPivotRowDst, *pPRT_pDst; /* Temporary input and output data matrix pointer */ + uint32_t numRows = pSrc->numRows; /* Number of rows in the matrix */ + uint32_t numCols = pSrc->numCols; /* Number of Cols in the matrix */ + +#ifndef ARM_MATH_CM0_FAMILY + float64_t maxC; /* maximum value in the column */ + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float64_t Xchg, in = 0.0f, in1; /* Temporary input values */ + uint32_t i, rowCnt, flag = 0u, j, loopCnt, k, l; /* loop counters */ + arm_status status; /* status of matrix inverse */ + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pSrc->numCols) || (pDst->numRows != pDst->numCols) + || (pSrc->numRows != pDst->numRows)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + + /*-------------------------------------------------------------------------------------------------------------- + * Matrix Inverse can be solved using elementary row operations. + * + * Gauss-Jordan Method: + * + * 1. First combine the identity matrix and the input matrix separated by a bar to form an + * augmented matrix as follows: + * _ _ _ _ + * | a11 a12 | 1 0 | | X11 X12 | + * | | | = | | + * |_ a21 a22 | 0 1 _| |_ X21 X21 _| + * + * 2. In our implementation, pDst Matrix is used as identity matrix. + * + * 3. Begin with the first row. Let i = 1. + * + * 4. Check to see if the pivot for column i is the greatest of the column. + * The pivot is the element of the main diagonal that is on the current row. + * For instance, if working with row i, then the pivot element is aii. + * If the pivot is not the most significant of the columns, exchange that row with a row + * below it that does contain the most significant value in column i. If the most + * significant value of the column is zero, then an inverse to that matrix does not exist. + * The most significant value of the column is the absolute maximum. + * + * 5. Divide every element of row i by the pivot. + * + * 6. For every row below and row i, replace that row with the sum of that row and + * a multiple of row i so that each new element in column i below row i is zero. + * + * 7. Move to the next row and column and repeat steps 2 through 5 until you have zeros + * for every element below and above the main diagonal. + * + * 8. Now an identical matrix is formed to the left of the bar(input matrix, pSrc). + * Therefore, the matrix to the right of the bar is our solution(pDst matrix, pDst). + *----------------------------------------------------------------------------------------------------------------*/ + + /* Working pointer for destination matrix */ + pOutT1 = pOut; + + /* Loop over the number of rows */ + rowCnt = numRows; + + /* Making the destination matrix as identity matrix */ + while(rowCnt > 0u) + { + /* Writing all zeroes in lower triangle of the destination matrix */ + j = numRows - rowCnt; + while(j > 0u) + { + *pOutT1++ = 0.0f; + j--; + } + + /* Writing all ones in the diagonal of the destination matrix */ + *pOutT1++ = 1.0f; + + /* Writing all zeroes in upper triangle of the destination matrix */ + j = rowCnt - 1u; + while(j > 0u) + { + *pOutT1++ = 0.0f; + j--; + } + + /* Decrement the loop counter */ + rowCnt--; + } + + /* Loop over the number of columns of the input matrix. + All the elements in each column are processed by the row operations */ + loopCnt = numCols; + + /* Index modifier to navigate through the columns */ + l = 0u; + + while(loopCnt > 0u) + { + /* Check if the pivot element is zero.. + * If it is zero then interchange the row with non zero row below. + * If there is no non zero element to replace in the rows below, + * then the matrix is Singular. */ + + /* Working pointer for the input matrix that points + * to the pivot element of the particular row */ + pInT1 = pIn + (l * numCols); + + /* Working pointer for the destination matrix that points + * to the pivot element of the particular row */ + pOutT1 = pOut + (l * numCols); + + /* Temporary variable to hold the pivot value */ + in = *pInT1; + + /* Grab the most significant value from column l */ + maxC = 0; + for (i = l; i < numRows; i++) + { + maxC = *pInT1 > 0 ? (*pInT1 > maxC ? *pInT1 : maxC) : (-*pInT1 > maxC ? -*pInT1 : maxC); + pInT1 += numCols; + } + + /* Update the status if the matrix is singular */ + if(maxC == 0.0f) + { + return ARM_MATH_SINGULAR; + } + + /* Restore pInT1 */ + pInT1 = pIn; + + /* Destination pointer modifier */ + k = 1u; + + /* Check if the pivot element is the most significant of the column */ + if( (in > 0.0f ? in : -in) != maxC) + { + /* Loop over the number rows present below */ + i = numRows - (l + 1u); + + while(i > 0u) + { + /* Update the input and destination pointers */ + pInT2 = pInT1 + (numCols * l); + pOutT2 = pOutT1 + (numCols * k); + + /* Look for the most significant element to + * replace in the rows below */ + if((*pInT2 > 0.0f ? *pInT2: -*pInT2) == maxC) + { + /* Loop over number of columns + * to the right of the pilot element */ + j = numCols - l; + + while(j > 0u) + { + /* Exchange the row elements of the input matrix */ + Xchg = *pInT2; + *pInT2++ = *pInT1; + *pInT1++ = Xchg; + + /* Decrement the loop counter */ + j--; + } + + /* Loop over number of columns of the destination matrix */ + j = numCols; + + while(j > 0u) + { + /* Exchange the row elements of the destination matrix */ + Xchg = *pOutT2; + *pOutT2++ = *pOutT1; + *pOutT1++ = Xchg; + + /* Decrement the loop counter */ + j--; + } + + /* Flag to indicate whether exchange is done or not */ + flag = 1u; + + /* Break after exchange is done */ + break; + } + + /* Update the destination pointer modifier */ + k++; + + /* Decrement the loop counter */ + i--; + } + } + + /* Update the status if the matrix is singular */ + if((flag != 1u) && (in == 0.0f)) + { + return ARM_MATH_SINGULAR; + } + + /* Points to the pivot row of input and destination matrices */ + pPivotRowIn = pIn + (l * numCols); + pPivotRowDst = pOut + (l * numCols); + + /* Temporary pointers to the pivot row pointers */ + pInT1 = pPivotRowIn; + pInT2 = pPivotRowDst; + + /* Pivot element of the row */ + in = *pPivotRowIn; + + /* Loop over number of columns + * to the right of the pilot element */ + j = (numCols - l); + + while(j > 0u) + { + /* Divide each element of the row of the input matrix + * by the pivot element */ + in1 = *pInT1; + *pInT1++ = in1 / in; + + /* Decrement the loop counter */ + j--; + } + + /* Loop over number of columns of the destination matrix */ + j = numCols; + + while(j > 0u) + { + /* Divide each element of the row of the destination matrix + * by the pivot element */ + in1 = *pInT2; + *pInT2++ = in1 / in; + + /* Decrement the loop counter */ + j--; + } + + /* Replace the rows with the sum of that row and a multiple of row i + * so that each new element in column i above row i is zero.*/ + + /* Temporary pointers for input and destination matrices */ + pInT1 = pIn; + pInT2 = pOut; + + /* index used to check for pivot element */ + i = 0u; + + /* Loop over number of rows */ + /* to be replaced by the sum of that row and a multiple of row i */ + k = numRows; + + while(k > 0u) + { + /* Check for the pivot element */ + if(i == l) + { + /* If the processing element is the pivot element, + only the columns to the right are to be processed */ + pInT1 += numCols - l; + + pInT2 += numCols; + } + else + { + /* Element of the reference row */ + in = *pInT1; + + /* Working pointers for input and destination pivot rows */ + pPRT_in = pPivotRowIn; + pPRT_pDst = pPivotRowDst; + + /* Loop over the number of columns to the right of the pivot element, + to replace the elements in the input matrix */ + j = (numCols - l); + + while(j > 0u) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + in1 = *pInT1; + *pInT1++ = in1 - (in * *pPRT_in++); + + /* Decrement the loop counter */ + j--; + } + + /* Loop over the number of columns to + replace the elements in the destination matrix */ + j = numCols; + + while(j > 0u) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + in1 = *pInT2; + *pInT2++ = in1 - (in * *pPRT_pDst++); + + /* Decrement the loop counter */ + j--; + } + + } + + /* Increment the temporary input pointer */ + pInT1 = pInT1 + l; + + /* Decrement the loop counter */ + k--; + + /* Increment the pivot index */ + i++; + } + + /* Increment the input pointer */ + pIn++; + + /* Decrement the loop counter */ + loopCnt--; + + /* Increment the index modifier */ + l++; + } + + +#else + + /* Run the below code for Cortex-M0 */ + + float64_t Xchg, in = 0.0f; /* Temporary input values */ + uint32_t i, rowCnt, flag = 0u, j, loopCnt, k, l; /* loop counters */ + arm_status status; /* status of matrix inverse */ + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pSrc->numCols) || (pDst->numRows != pDst->numCols) + || (pSrc->numRows != pDst->numRows)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + { + + /*-------------------------------------------------------------------------------------------------------------- + * Matrix Inverse can be solved using elementary row operations. + * + * Gauss-Jordan Method: + * + * 1. First combine the identity matrix and the input matrix separated by a bar to form an + * augmented matrix as follows: + * _ _ _ _ _ _ _ _ + * | | a11 a12 | | | 1 0 | | | X11 X12 | + * | | | | | | | = | | + * |_ |_ a21 a22 _| | |_0 1 _| _| |_ X21 X21 _| + * + * 2. In our implementation, pDst Matrix is used as identity matrix. + * + * 3. Begin with the first row. Let i = 1. + * + * 4. Check to see if the pivot for row i is zero. + * The pivot is the element of the main diagonal that is on the current row. + * For instance, if working with row i, then the pivot element is aii. + * If the pivot is zero, exchange that row with a row below it that does not + * contain a zero in column i. If this is not possible, then an inverse + * to that matrix does not exist. + * + * 5. Divide every element of row i by the pivot. + * + * 6. For every row below and row i, replace that row with the sum of that row and + * a multiple of row i so that each new element in column i below row i is zero. + * + * 7. Move to the next row and column and repeat steps 2 through 5 until you have zeros + * for every element below and above the main diagonal. + * + * 8. Now an identical matrix is formed to the left of the bar(input matrix, src). + * Therefore, the matrix to the right of the bar is our solution(dst matrix, dst). + *----------------------------------------------------------------------------------------------------------------*/ + + /* Working pointer for destination matrix */ + pOutT1 = pOut; + + /* Loop over the number of rows */ + rowCnt = numRows; + + /* Making the destination matrix as identity matrix */ + while(rowCnt > 0u) + { + /* Writing all zeroes in lower triangle of the destination matrix */ + j = numRows - rowCnt; + while(j > 0u) + { + *pOutT1++ = 0.0f; + j--; + } + + /* Writing all ones in the diagonal of the destination matrix */ + *pOutT1++ = 1.0f; + + /* Writing all zeroes in upper triangle of the destination matrix */ + j = rowCnt - 1u; + while(j > 0u) + { + *pOutT1++ = 0.0f; + j--; + } + + /* Decrement the loop counter */ + rowCnt--; + } + + /* Loop over the number of columns of the input matrix. + All the elements in each column are processed by the row operations */ + loopCnt = numCols; + + /* Index modifier to navigate through the columns */ + l = 0u; + //for(loopCnt = 0u; loopCnt < numCols; loopCnt++) + while(loopCnt > 0u) + { + /* Check if the pivot element is zero.. + * If it is zero then interchange the row with non zero row below. + * If there is no non zero element to replace in the rows below, + * then the matrix is Singular. */ + + /* Working pointer for the input matrix that points + * to the pivot element of the particular row */ + pInT1 = pIn + (l * numCols); + + /* Working pointer for the destination matrix that points + * to the pivot element of the particular row */ + pOutT1 = pOut + (l * numCols); + + /* Temporary variable to hold the pivot value */ + in = *pInT1; + + /* Destination pointer modifier */ + k = 1u; + + /* Check if the pivot element is zero */ + if(*pInT1 == 0.0f) + { + /* Loop over the number rows present below */ + for (i = (l + 1u); i < numRows; i++) + { + /* Update the input and destination pointers */ + pInT2 = pInT1 + (numCols * l); + pOutT2 = pOutT1 + (numCols * k); + + /* Check if there is a non zero pivot element to + * replace in the rows below */ + if(*pInT2 != 0.0f) + { + /* Loop over number of columns + * to the right of the pilot element */ + for (j = 0u; j < (numCols - l); j++) + { + /* Exchange the row elements of the input matrix */ + Xchg = *pInT2; + *pInT2++ = *pInT1; + *pInT1++ = Xchg; + } + + for (j = 0u; j < numCols; j++) + { + Xchg = *pOutT2; + *pOutT2++ = *pOutT1; + *pOutT1++ = Xchg; + } + + /* Flag to indicate whether exchange is done or not */ + flag = 1u; + + /* Break after exchange is done */ + break; + } + + /* Update the destination pointer modifier */ + k++; + } + } + + /* Update the status if the matrix is singular */ + if((flag != 1u) && (in == 0.0f)) + { + return ARM_MATH_SINGULAR; + } + + /* Points to the pivot row of input and destination matrices */ + pPivotRowIn = pIn + (l * numCols); + pPivotRowDst = pOut + (l * numCols); + + /* Temporary pointers to the pivot row pointers */ + pInT1 = pPivotRowIn; + pOutT1 = pPivotRowDst; + + /* Pivot element of the row */ + in = *(pIn + (l * numCols)); + + /* Loop over number of columns + * to the right of the pilot element */ + for (j = 0u; j < (numCols - l); j++) + { + /* Divide each element of the row of the input matrix + * by the pivot element */ + *pInT1 = *pInT1 / in; + pInT1++; + } + for (j = 0u; j < numCols; j++) + { + /* Divide each element of the row of the destination matrix + * by the pivot element */ + *pOutT1 = *pOutT1 / in; + pOutT1++; + } + + /* Replace the rows with the sum of that row and a multiple of row i + * so that each new element in column i above row i is zero.*/ + + /* Temporary pointers for input and destination matrices */ + pInT1 = pIn; + pOutT1 = pOut; + + for (i = 0u; i < numRows; i++) + { + /* Check for the pivot element */ + if(i == l) + { + /* If the processing element is the pivot element, + only the columns to the right are to be processed */ + pInT1 += numCols - l; + pOutT1 += numCols; + } + else + { + /* Element of the reference row */ + in = *pInT1; + + /* Working pointers for input and destination pivot rows */ + pPRT_in = pPivotRowIn; + pPRT_pDst = pPivotRowDst; + + /* Loop over the number of columns to the right of the pivot element, + to replace the elements in the input matrix */ + for (j = 0u; j < (numCols - l); j++) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + *pInT1 = *pInT1 - (in * *pPRT_in++); + pInT1++; + } + /* Loop over the number of columns to + replace the elements in the destination matrix */ + for (j = 0u; j < numCols; j++) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + *pOutT1 = *pOutT1 - (in * *pPRT_pDst++); + pOutT1++; + } + + } + /* Increment the temporary input pointer */ + pInT1 = pInT1 + l; + } + /* Increment the input pointer */ + pIn++; + + /* Decrement the loop counter */ + loopCnt--; + /* Increment the index modifier */ + l++; + } + + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + + if((flag != 1u) && (in == 0.0f)) + { + pIn = pSrc->pData; + for (i = 0; i < numRows * numCols; i++) + { + if (pIn[i] != 0.0f) + break; + } + + if (i == numRows * numCols) + status = ARM_MATH_SINGULAR; + } + } + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixInv group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,286 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_mult_f32.c +* +* Description: Floating-point matrix multiplication. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @defgroup MatrixMult Matrix Multiplication + * + * Multiplies two matrices. + * + * \image html MatrixMultiplication.gif "Multiplication of two 3 x 3 matrices" + + * Matrix multiplication is only defined if the number of columns of the + * first matrix equals the number of rows of the second matrix. + * Multiplying an M x N matrix with an N x P matrix results + * in an M x P matrix. + * When matrix size checking is enabled, the functions check: (1) that the inner dimensions of + * pSrcA and pSrcB are equal; and (2) that the size of the output + * matrix equals the outer dimensions of pSrcA and pSrcB. + */ + + +/** + * @addtogroup MatrixMult + * @{ + */ + +/** + * @brief Floating-point matrix multiplication. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + +arm_status arm_mat_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst) +{ + float32_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + float32_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + float32_t *pInA = pSrcA->pData; /* input data matrix pointer A */ + float32_t *pOut = pDst->pData; /* output data matrix pointer */ + float32_t *px; /* Temporary output data matrix pointer */ + float32_t sum; /* Accumulator */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float32_t in1, in2, in3, in4; + uint16_t col, i = 0u, j, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + j = 0u; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sum = 0.0f; + + /* Initiate the pointer pIn1 to point to the starting address of the column being processed */ + pIn1 = pInA; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + colCnt = numColsA >> 2u; + + /* matrix multiplication */ + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + in3 = *pIn2; + pIn2 += numColsB; + in1 = pIn1[0]; + in2 = pIn1[1]; + sum += in1 * in3; + in4 = *pIn2; + pIn2 += numColsB; + sum += in2 * in4; + + in3 = *pIn2; + pIn2 += numColsB; + in1 = pIn1[2]; + in2 = pIn1[3]; + sum += in1 * in3; + in4 = *pIn2; + pIn2 += numColsB; + sum += in2 * in4; + pIn1 += 4u; + + /* Decrement the loop count */ + colCnt--; + } + + /* If the columns of pSrcA is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + colCnt = numColsA % 0x4u; + + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + sum += *pIn1++ * (*pIn2); + pIn2 += numColsB; + + /* Decrement the loop counter */ + colCnt--; + } + + /* Store the result in the destination buffer */ + *px++ = sum; + + /* Update the pointer pIn2 to point to the starting address of the next column */ + j++; + pIn2 = pSrcB->pData + j; + + /* Decrement the column loop counter */ + col--; + + } while(col > 0u); + +#else + + /* Run the below code for Cortex-M0 */ + + float32_t *pInB = pSrcB->pData; /* input data matrix pointer B */ + uint16_t col, i = 0u, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pInA with each column in pInB */ + /* row loop */ + do + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sum = 0.0f; + + /* Initialize the pointer pIn1 to point to the starting address of the row being processed */ + pIn1 = pInA; + + /* Matrix A columns number of MAC operations are to be performed */ + colCnt = numColsA; + + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + sum += *pIn1++ * (*pIn2); + pIn2 += numColsB; + + /* Decrement the loop counter */ + colCnt--; + } + + /* Store the result in the destination buffer */ + *px++ = sum; + + /* Decrement the column loop counter */ + col--; + + /* Update the pointer pIn2 to point to the starting address of the next column */ + pIn2 = pInB + (numColsB - col); + + } while(col > 0u); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + /* Update the pointer pInA to point to the starting address of the next row */ + i = i + numColsB; + pInA = pInA + numColsA; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_fast_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_fast_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,369 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_mult_fast_q15.c +* +* Description: Q15 matrix multiplication (fast variant) +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixMult + * @{ + */ + + +/** + * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @param[in] *pState points to the array for storing intermediate results + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The difference between the function arm_mat_mult_q15() and this fast variant is that + * the fast variant use a 32-bit rather than a 64-bit accumulator. + * The result of each 1.15 x 1.15 multiplication is truncated to + * 2.30 format. These intermediate results are accumulated in a 32-bit register in 2.30 + * format. Finally, the accumulator is saturated and converted to a 1.15 result. + * + * \par + * The fast version has the same overflow behavior as the standard version but provides + * less precision since it discards the low 16 bits of each multiplication result. + * In order to avoid overflows completely the input signals must be scaled down. + * Scale down one of the input matrices by log2(numColsA) bits to + * avoid overflows, as a total of numColsA additions are computed internally for each + * output element. + * + * \par + * See arm_mat_mult_q15() for a slower implementation of this function + * which uses 64-bit accumulation to provide higher precision. + */ + +arm_status arm_mat_mult_fast_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState) +{ + q31_t sum; /* accumulator */ + q15_t *pSrcBT = pState; /* input data matrix pointer for transpose */ + q15_t *pInA = pSrcA->pData; /* input data matrix pointer A of Q15 type */ + q15_t *pInB = pSrcB->pData; /* input data matrix pointer B of Q15 type */ + q15_t *px; /* Temporary output data matrix pointer */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + uint16_t numRowsB = pSrcB->numRows; /* number of rows of input matrix A */ + uint16_t col, i = 0u, row = numRowsB, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + +#ifndef UNALIGNED_SUPPORT_DISABLE + + q31_t in; /* Temporary variable to hold the input value */ + q31_t inA1, inA2, inB1, inB2; + +#else + + q15_t in; /* Temporary variable to hold the input value */ + q15_t inA1, inA2, inB1, inB2; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + +#ifdef ARM_MATH_MATRIX_CHECK + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif + { + /* Matrix transpose */ + do + { + /* Apply loop unrolling and exchange the columns with row elements */ + col = numColsB >> 2; + + /* The pointer px is set to starting address of the column being processed */ + px = pSrcBT + i; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(col > 0u) + { +#ifndef UNALIGNED_SUPPORT_DISABLE + /* Read two elements from the row */ + in = *__SIMD32(pInB)++; + + /* Unpack and store one element in the destination */ +#ifndef ARM_MATH_BIG_ENDIAN + + *px = (q15_t) in; + +#else + + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Unpack and store the second element in the destination */ +#ifndef ARM_MATH_BIG_ENDIAN + + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#else + + *px = (q15_t) in; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Read two elements from the row */ + in = *__SIMD32(pInB)++; + + /* Unpack and store one element in the destination */ +#ifndef ARM_MATH_BIG_ENDIAN + + *px = (q15_t) in; + +#else + + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Unpack and store the second element in the destination */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#else + + *px = (q15_t) in; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + +#else + + /* Read one element from the row */ + in = *pInB++; + + /* Store one element in the destination */ + *px = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Read one element from the row */ + in = *pInB++; + + /* Store one element in the destination */ + *px = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Read one element from the row */ + in = *pInB++; + + /* Store one element in the destination */ + *px = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Read one element from the row */ + in = *pInB++; + + /* Store one element in the destination */ + *px = in; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Decrement the column loop counter */ + col--; + } + + /* If the columns of pSrcB is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + col = numColsB % 0x4u; + + while(col > 0u) + { + /* Read and store the input element in the destination */ + *px = *pInB++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Decrement the column loop counter */ + col--; + } + + i++; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + + /* Reset the variables for the usage in the following multiplication process */ + row = numRowsA; + i = 0u; + px = pDst->pData; + + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the transposed pSrcB data */ + pInB = pSrcBT; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sum = 0; + + /* Apply loop unrolling and compute 2 MACs simultaneously. */ + colCnt = numColsA >> 2; + + /* Initiate the pointer pIn1 to point to the starting address of the column being processed */ + pInA = pSrcA->pData + i; + + /* matrix multiplication */ + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ +#ifndef UNALIGNED_SUPPORT_DISABLE + + inA1 = *__SIMD32(pInA)++; + inB1 = *__SIMD32(pInB)++; + inA2 = *__SIMD32(pInA)++; + inB2 = *__SIMD32(pInB)++; + + sum = __SMLAD(inA1, inB1, sum); + sum = __SMLAD(inA2, inB2, sum); + +#else + + inA1 = *pInA++; + inB1 = *pInB++; + inA2 = *pInA++; + sum += inA1 * inB1; + inB2 = *pInB++; + + inA1 = *pInA++; + inB1 = *pInB++; + sum += inA2 * inB2; + inA2 = *pInA++; + inB2 = *pInB++; + + sum += inA1 * inB1; + sum += inA2 * inB2; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Decrement the loop counter */ + colCnt--; + } + + /* process odd column samples */ + colCnt = numColsA % 0x4u; + + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + sum += (q31_t) (*pInA++) * (*pInB++); + + colCnt--; + } + + /* Saturate and store the result in the destination buffer */ + *px = (q15_t) (sum >> 15); + px++; + + /* Decrement the column loop counter */ + col--; + + } while(col > 0u); + + i = i + numColsA; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_fast_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_fast_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,226 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_mult_fast_q31.c +* +* Description: Q31 matrix multiplication (fast variant). +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixMult + * @{ + */ + +/** + * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The difference between the function arm_mat_mult_q31() and this fast variant is that + * the fast variant use a 32-bit rather than a 64-bit accumulator. + * The result of each 1.31 x 1.31 multiplication is truncated to + * 2.30 format. These intermediate results are accumulated in a 32-bit register in 2.30 + * format. Finally, the accumulator is saturated and converted to a 1.31 result. + * + * \par + * The fast version has the same overflow behavior as the standard version but provides + * less precision since it discards the low 32 bits of each multiplication result. + * In order to avoid overflows completely the input signals must be scaled down. + * Scale down one of the input matrices by log2(numColsA) bits to + * avoid overflows, as a total of numColsA additions are computed internally for each + * output element. + * + * \par + * See arm_mat_mult_q31() for a slower implementation of this function + * which uses 64-bit accumulation to provide higher precision. + */ + +arm_status arm_mat_mult_fast_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst) +{ + q31_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + q31_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + q31_t *pInA = pSrcA->pData; /* input data matrix pointer A */ +// q31_t *pSrcB = pSrcB->pData; /* input data matrix pointer B */ + q31_t *pOut = pDst->pData; /* output data matrix pointer */ + q31_t *px; /* Temporary output data matrix pointer */ + q31_t sum; /* Accumulator */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + uint16_t col, i = 0u, j, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + q31_t inA1, inA2, inA3, inA4, inB1, inB2, inB3, inB4; + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + j = 0u; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sum = 0; + + /* Initiate the pointer pIn1 to point to the starting address of pInA */ + pIn1 = pInA; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + colCnt = numColsA >> 2; + + + /* matrix multiplication */ + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + /* Perform the multiply-accumulates */ + inB1 = *pIn2; + pIn2 += numColsB; + + inA1 = pIn1[0]; + inA2 = pIn1[1]; + + inB2 = *pIn2; + pIn2 += numColsB; + + inB3 = *pIn2; + pIn2 += numColsB; + + sum = (q31_t) ((((q63_t) sum << 32) + ((q63_t) inA1 * inB1)) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + ((q63_t) inA2 * inB2)) >> 32); + + inA3 = pIn1[2]; + inA4 = pIn1[3]; + + inB4 = *pIn2; + pIn2 += numColsB; + + sum = (q31_t) ((((q63_t) sum << 32) + ((q63_t) inA3 * inB3)) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + ((q63_t) inA4 * inB4)) >> 32); + + pIn1 += 4u; + + /* Decrement the loop counter */ + colCnt--; + } + + /* If the columns of pSrcA is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + colCnt = numColsA % 0x4u; + + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + /* Perform the multiply-accumulates */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * pIn1++ * (*pIn2))) >> 32); + pIn2 += numColsB; + + /* Decrement the loop counter */ + colCnt--; + } + + /* Convert the result from 2.30 to 1.31 format and store in destination buffer */ + *px++ = sum << 1; + + /* Update the pointer pIn2 to point to the starting address of the next column */ + j++; + pIn2 = pSrcB->pData + j; + + /* Decrement the column loop counter */ + col--; + + } while(col > 0u); + + /* Update the pointer pInA to point to the starting address of the next row */ + i = i + numColsB; + pInA = pInA + numColsA; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,469 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_mult_q15.c +* +* Description: Q15 matrix multiplication. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixMult + * @{ + */ + + +/** + * @brief Q15 matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @param[in] *pState points to the array for storing intermediate results (Unused) + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. The inputs to the + * multiplications are in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate + * results are accumulated in a 64-bit accumulator in 34.30 format. This approach + * provides 33 guard bits and there is no risk of overflow. The 34.30 result is then + * truncated to 34.15 format by discarding the low 15 bits and then saturated to + * 1.15 format. + * + * \par + * Refer to arm_mat_mult_fast_q15() for a faster but less precise version of this function for Cortex-M3 and Cortex-M4. + * + */ + +arm_status arm_mat_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState CMSIS_UNUSED) +{ + q63_t sum; /* accumulator */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q15_t *pSrcBT = pState; /* input data matrix pointer for transpose */ + q15_t *pInA = pSrcA->pData; /* input data matrix pointer A of Q15 type */ + q15_t *pInB = pSrcB->pData; /* input data matrix pointer B of Q15 type */ + q15_t *px; /* Temporary output data matrix pointer */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + uint16_t numRowsB = pSrcB->numRows; /* number of rows of input matrix A */ + uint16_t col, i = 0u, row = numRowsB, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + +#ifndef UNALIGNED_SUPPORT_DISABLE + + q31_t in; /* Temporary variable to hold the input value */ + q31_t pSourceA1, pSourceB1, pSourceA2, pSourceB2; + +#else + + q15_t in; /* Temporary variable to hold the input value */ + q15_t inA1, inB1, inA2, inB2; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + +#ifdef ARM_MATH_MATRIX_CHECK + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + { + /* Matrix transpose */ + do + { + /* Apply loop unrolling and exchange the columns with row elements */ + col = numColsB >> 2; + + /* The pointer px is set to starting address of the column being processed */ + px = pSrcBT + i; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(col > 0u) + { +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Read two elements from the row */ + in = *__SIMD32(pInB)++; + + /* Unpack and store one element in the destination */ +#ifndef ARM_MATH_BIG_ENDIAN + + *px = (q15_t) in; + +#else + + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Unpack and store the second element in the destination */ +#ifndef ARM_MATH_BIG_ENDIAN + + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#else + + *px = (q15_t) in; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Read two elements from the row */ + in = *__SIMD32(pInB)++; + + /* Unpack and store one element in the destination */ +#ifndef ARM_MATH_BIG_ENDIAN + + *px = (q15_t) in; + +#else + + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Unpack and store the second element in the destination */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#else + + *px = (q15_t) in; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + +#else + + /* Read one element from the row */ + in = *pInB++; + + /* Store one element in the destination */ + *px = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Read one element from the row */ + in = *pInB++; + + /* Store one element in the destination */ + *px = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Read one element from the row */ + in = *pInB++; + + /* Store one element in the destination */ + *px = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Read one element from the row */ + in = *pInB++; + + /* Store one element in the destination */ + *px = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Decrement the column loop counter */ + col--; + } + + /* If the columns of pSrcB is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + col = numColsB % 0x4u; + + while(col > 0u) + { + /* Read and store the input element in the destination */ + *px = *pInB++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += numRowsB; + + /* Decrement the column loop counter */ + col--; + } + + i++; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + + /* Reset the variables for the usage in the following multiplication process */ + row = numRowsA; + i = 0u; + px = pDst->pData; + + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the transposed pSrcB data */ + pInB = pSrcBT; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sum = 0; + + /* Apply loop unrolling and compute 2 MACs simultaneously. */ + colCnt = numColsA >> 2; + + /* Initiate the pointer pIn1 to point to the starting address of the column being processed */ + pInA = pSrcA->pData + i; + + + /* matrix multiplication */ + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* read real and imag values from pSrcA and pSrcB buffer */ + pSourceA1 = *__SIMD32(pInA)++; + pSourceB1 = *__SIMD32(pInB)++; + + pSourceA2 = *__SIMD32(pInA)++; + pSourceB2 = *__SIMD32(pInB)++; + + /* Multiply and Accumlates */ + sum = __SMLALD(pSourceA1, pSourceB1, sum); + sum = __SMLALD(pSourceA2, pSourceB2, sum); + +#else + /* read real and imag values from pSrcA and pSrcB buffer */ + inA1 = *pInA++; + inB1 = *pInB++; + inA2 = *pInA++; + /* Multiply and Accumlates */ + sum += inA1 * inB1; + inB2 = *pInB++; + + inA1 = *pInA++; + inB1 = *pInB++; + /* Multiply and Accumlates */ + sum += inA2 * inB2; + inA2 = *pInA++; + inB2 = *pInB++; + + /* Multiply and Accumlates */ + sum += inA1 * inB1; + sum += inA2 * inB2; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Decrement the loop counter */ + colCnt--; + } + + /* process remaining column samples */ + colCnt = numColsA & 3u; + + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + sum += *pInA++ * *pInB++; + + /* Decrement the loop counter */ + colCnt--; + } + + /* Saturate and store the result in the destination buffer */ + *px = (q15_t) (__SSAT((sum >> 15), 16)); + px++; + + /* Decrement the column loop counter */ + col--; + + } while(col > 0u); + + i = i + numColsA; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + +#else + + /* Run the below code for Cortex-M0 */ + + q15_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + q15_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + q15_t *pInA = pSrcA->pData; /* input data matrix pointer A of Q15 type */ + q15_t *pInB = pSrcB->pData; /* input data matrix pointer B of Q15 type */ + q15_t *pOut = pDst->pData; /* output data matrix pointer */ + q15_t *px; /* Temporary output data matrix pointer */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t col, i = 0u, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sum = 0; + + /* Initiate the pointer pIn1 to point to the starting address of pSrcA */ + pIn1 = pInA; + + /* Matrix A columns number of MAC operations are to be performed */ + colCnt = numColsA; + + /* matrix multiplication */ + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + /* Perform the multiply-accumulates */ + sum += (q31_t) * pIn1++ * *pIn2; + pIn2 += numColsB; + + /* Decrement the loop counter */ + colCnt--; + } + + /* Convert the result from 34.30 to 1.15 format and store the saturated value in destination buffer */ + /* Saturate and store the result in the destination buffer */ + *px++ = (q15_t) __SSAT((sum >> 15), 16); + + /* Decrement the column loop counter */ + col--; + + /* Update the pointer pIn2 to point to the starting address of the next column */ + pIn2 = pInB + (numColsB - col); + + } while(col > 0u); + + /* Update the pointer pSrcA to point to the starting address of the next row */ + i = i + numColsB; + pInA = pInA + numColsA; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,294 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_mult_q31.c +* +* Description: Q31 matrix multiplication. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixMult + * @{ + */ + +/** + * @brief Q31 matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate + * multiplication results but provides only a single guard bit. There is no saturation + * on intermediate additions. Thus, if the accumulator overflows it wraps around and + * distorts the result. The input signals should be scaled down to avoid intermediate + * overflows. The input is thus scaled down by log2(numColsA) bits + * to avoid overflows, as a total of numColsA additions are performed internally. + * The 2.62 accumulator is right shifted by 31 bits and saturated to 1.31 format to yield the final result. + * + * \par + * See arm_mat_mult_fast_q31() for a faster but less precise implementation of this function for Cortex-M3 and Cortex-M4. + * + */ + +arm_status arm_mat_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst) +{ + q31_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + q31_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + q31_t *pInA = pSrcA->pData; /* input data matrix pointer A */ + q31_t *pOut = pDst->pData; /* output data matrix pointer */ + q31_t *px; /* Temporary output data matrix pointer */ + q63_t sum; /* Accumulator */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + uint16_t col, i = 0u, j, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + q31_t a0, a1, a2, a3, b0, b1, b2, b3; + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + j = 0u; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sum = 0; + + /* Initiate the pointer pIn1 to point to the starting address of pInA */ + pIn1 = pInA; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + colCnt = numColsA >> 2; + + + /* matrix multiplication */ + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + /* Perform the multiply-accumulates */ + b0 = *pIn2; + pIn2 += numColsB; + + a0 = *pIn1++; + a1 = *pIn1++; + + b1 = *pIn2; + pIn2 += numColsB; + b2 = *pIn2; + pIn2 += numColsB; + + sum += (q63_t) a0 *b0; + sum += (q63_t) a1 *b1; + + a2 = *pIn1++; + a3 = *pIn1++; + + b3 = *pIn2; + pIn2 += numColsB; + + sum += (q63_t) a2 *b2; + sum += (q63_t) a3 *b3; + + /* Decrement the loop counter */ + colCnt--; + } + + /* If the columns of pSrcA is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + colCnt = numColsA % 0x4u; + + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + /* Perform the multiply-accumulates */ + sum += (q63_t) * pIn1++ * *pIn2; + pIn2 += numColsB; + + /* Decrement the loop counter */ + colCnt--; + } + + /* Convert the result from 2.62 to 1.31 format and store in destination buffer */ + *px++ = (q31_t) (sum >> 31); + + /* Update the pointer pIn2 to point to the starting address of the next column */ + j++; + pIn2 = (pSrcB->pData) + j; + + /* Decrement the column loop counter */ + col--; + + } while(col > 0u); + +#else + + /* Run the below code for Cortex-M0 */ + + q31_t *pInB = pSrcB->pData; /* input data matrix pointer B */ + uint16_t col, i = 0u, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sum = 0; + + /* Initiate the pointer pIn1 to point to the starting address of pInA */ + pIn1 = pInA; + + /* Matrix A columns number of MAC operations are to be performed */ + colCnt = numColsA; + + /* matrix multiplication */ + while(colCnt > 0u) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2) * b(2,1) + .... + a(m,p)*b(p,n) */ + /* Perform the multiply-accumulates */ + sum += (q63_t) * pIn1++ * *pIn2; + pIn2 += numColsB; + + /* Decrement the loop counter */ + colCnt--; + } + + /* Convert the result from 2.62 to 1.31 format and store in destination buffer */ + *px++ = (q31_t) clip_q63_to_q31(sum >> 31); + + /* Decrement the column loop counter */ + col--; + + /* Update the pointer pIn2 to point to the starting address of the next column */ + pIn2 = pInB + (numColsB - col); + + } while(col > 0u); + +#endif + + /* Update the pointer pInA to point to the starting address of the next row */ + i = i + numColsB; + pInA = pInA + numColsA; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixMult group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,181 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_scale_f32.c +* +* Description: Multiplies a floating-point matrix by a scalar. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @defgroup MatrixScale Matrix Scale + * + * Multiplies a matrix by a scalar. This is accomplished by multiplying each element in the + * matrix by the scalar. For example: + * \image html MatrixScale.gif "Matrix Scaling of a 3 x 3 matrix" + * + * The function checks to make sure that the input and output matrices are of the same size. + * + * In the fixed-point Q15 and Q31 functions, scale is represented by + * a fractional multiplication scaleFract and an arithmetic shift shift. + * The shift allows the gain of the scaling operation to exceed 1.0. + * The overall scale factor applied to the fixed-point data is + *
        
+ *     scale = scaleFract * 2^shift.        
+ * 
+ */ + +/** + * @addtogroup MatrixScale + * @{ + */ + +/** + * @brief Floating-point matrix scaling. + * @param[in] *pSrc points to input matrix structure + * @param[in] scale scale factor to be applied + * @param[out] *pDst points to output matrix structure + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + * + */ + +arm_status arm_mat_scale_f32( + const arm_matrix_instance_f32 * pSrc, + float32_t scale, + arm_matrix_instance_f32 * pDst) +{ + float32_t *pIn = pSrc->pData; /* input data matrix pointer */ + float32_t *pOut = pDst->pData; /* output data matrix pointer */ + uint32_t numSamples; /* total number of elements in the matrix */ + uint32_t blkCnt; /* loop counters */ + arm_status status; /* status of matrix scaling */ + +#ifndef ARM_MATH_CM0_FAMILY + + float32_t in1, in2, in3, in4; /* temporary variables */ + float32_t out1, out2, out3, out4; /* temporary variables */ + +#endif // #ifndef ARM_MATH_CM0_FAMILY + +#ifdef ARM_MATH_MATRIX_CHECK + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pDst->numRows) || (pSrc->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + { + /* Total number of samples in the input matrix */ + numSamples = (uint32_t) pSrc->numRows * pSrc->numCols; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Loop Unrolling */ + blkCnt = numSamples >> 2; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) * scale */ + /* Scaling and results are stored in the destination buffer. */ + in1 = pIn[0]; + in2 = pIn[1]; + in3 = pIn[2]; + in4 = pIn[3]; + + out1 = in1 * scale; + out2 = in2 * scale; + out3 = in3 * scale; + out4 = in4 * scale; + + + pOut[0] = out1; + pOut[1] = out2; + pOut[2] = out3; + pOut[3] = out4; + + /* update pointers to process next sampels */ + pIn += 4u; + pOut += 4u; + + /* Decrement the numSamples loop counter */ + blkCnt--; + } + + /* If the numSamples is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = numSamples % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) * scale */ + /* The results are stored in the destination buffer. */ + *pOut++ = (*pIn++) * scale; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixScale group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,183 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_scale_q15.c +* +* Description: Multiplies a Q15 matrix by a scalar. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixScale + * @{ + */ + +/** + * @brief Q15 matrix scaling. + * @param[in] *pSrc points to input matrix + * @param[in] scaleFract fractional portion of the scale factor + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * @details + * Scaling and Overflow Behavior: + * \par + * The input data *pSrc and scaleFract are in 1.15 format. + * These are multiplied to yield a 2.30 intermediate result and this is shifted with saturation to 1.15 format. + */ + +arm_status arm_mat_scale_q15( + const arm_matrix_instance_q15 * pSrc, + q15_t scaleFract, + int32_t shift, + arm_matrix_instance_q15 * pDst) +{ + q15_t *pIn = pSrc->pData; /* input data matrix pointer */ + q15_t *pOut = pDst->pData; /* output data matrix pointer */ + uint32_t numSamples; /* total number of elements in the matrix */ + int32_t totShift = 15 - shift; /* total shift to apply after scaling */ + uint32_t blkCnt; /* loop counters */ + arm_status status; /* status of matrix scaling */ + +#ifndef ARM_MATH_CM0_FAMILY + + q15_t in1, in2, in3, in4; + q31_t out1, out2, out3, out4; + q31_t inA1, inA2; + +#endif // #ifndef ARM_MATH_CM0_FAMILY + +#ifdef ARM_MATH_MATRIX_CHECK + /* Check for matrix mismatch */ + if((pSrc->numRows != pDst->numRows) || (pSrc->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif // #ifdef ARM_MATH_MATRIX_CHECK + { + /* Total number of samples in the input matrix */ + numSamples = (uint32_t) pSrc->numRows * pSrc->numCols; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + /* Loop Unrolling */ + blkCnt = numSamples >> 2; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) * k */ + /* Scale, saturate and then store the results in the destination buffer. */ + /* Reading 2 inputs from memory */ + inA1 = _SIMD32_OFFSET(pIn); + inA2 = _SIMD32_OFFSET(pIn + 2); + + /* C = A * scale */ + /* Scale the inputs and then store the 2 results in the destination buffer + * in single cycle by packing the outputs */ + out1 = (q31_t) ((q15_t) (inA1 >> 16) * scaleFract); + out2 = (q31_t) ((q15_t) inA1 * scaleFract); + out3 = (q31_t) ((q15_t) (inA2 >> 16) * scaleFract); + out4 = (q31_t) ((q15_t) inA2 * scaleFract); + + out1 = out1 >> totShift; + inA1 = _SIMD32_OFFSET(pIn + 4); + out2 = out2 >> totShift; + inA2 = _SIMD32_OFFSET(pIn + 6); + out3 = out3 >> totShift; + out4 = out4 >> totShift; + + in1 = (q15_t) (__SSAT(out1, 16)); + in2 = (q15_t) (__SSAT(out2, 16)); + in3 = (q15_t) (__SSAT(out3, 16)); + in4 = (q15_t) (__SSAT(out4, 16)); + + _SIMD32_OFFSET(pOut) = __PKHBT(in2, in1, 16); + _SIMD32_OFFSET(pOut + 2) = __PKHBT(in4, in3, 16); + + /* update pointers to process next sampels */ + pIn += 4u; + pOut += 4u; + + + /* Decrement the numSamples loop counter */ + blkCnt--; + } + + /* If the numSamples is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = numSamples % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) * k */ + /* Scale, saturate and then store the results in the destination buffer. */ + *pOut++ = + (q15_t) (__SSAT(((q31_t) (*pIn++) * scaleFract) >> totShift, 16)); + + /* Decrement the numSamples loop counter */ + blkCnt--; + } + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixScale group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,202 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_scale_q31.c +* +* Description: Multiplies a Q31 matrix by a scalar. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. ------------------------------------------------ */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixScale + * @{ + */ + +/** + * @brief Q31 matrix scaling. + * @param[in] *pSrc points to input matrix + * @param[in] scaleFract fractional portion of the scale factor + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * @details + * Scaling and Overflow Behavior: + * \par + * The input data *pSrc and scaleFract are in 1.31 format. + * These are multiplied to yield a 2.62 intermediate result and this is shifted with saturation to 1.31 format. + */ + +arm_status arm_mat_scale_q31( + const arm_matrix_instance_q31 * pSrc, + q31_t scaleFract, + int32_t shift, + arm_matrix_instance_q31 * pDst) +{ + q31_t *pIn = pSrc->pData; /* input data matrix pointer */ + q31_t *pOut = pDst->pData; /* output data matrix pointer */ + uint32_t numSamples; /* total number of elements in the matrix */ + int32_t totShift = shift + 1; /* shift to apply after scaling */ + uint32_t blkCnt; /* loop counters */ + arm_status status; /* status of matrix scaling */ + q31_t in1, in2, out1; /* temporary variabels */ + +#ifndef ARM_MATH_CM0_FAMILY + + q31_t in3, in4, out2, out3, out4; /* temporary variables */ + +#endif // #ifndef ARM_MAT_CM0 + +#ifdef ARM_MATH_MATRIX_CHECK + /* Check for matrix mismatch */ + if((pSrc->numRows != pDst->numRows) || (pSrc->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif // #ifdef ARM_MATH_MATRIX_CHECK + { + /* Total number of samples in the input matrix */ + numSamples = (uint32_t) pSrc->numRows * pSrc->numCols; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Loop Unrolling */ + blkCnt = numSamples >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) * k */ + /* Read values from input */ + in1 = *pIn; + in2 = *(pIn + 1); + in3 = *(pIn + 2); + in4 = *(pIn + 3); + + /* multiply input with scaler value */ + in1 = ((q63_t) in1 * scaleFract) >> 32; + in2 = ((q63_t) in2 * scaleFract) >> 32; + in3 = ((q63_t) in3 * scaleFract) >> 32; + in4 = ((q63_t) in4 * scaleFract) >> 32; + + /* apply shifting */ + out1 = in1 << totShift; + out2 = in2 << totShift; + + /* saturate the results. */ + if(in1 != (out1 >> totShift)) + out1 = 0x7FFFFFFF ^ (in1 >> 31); + + if(in2 != (out2 >> totShift)) + out2 = 0x7FFFFFFF ^ (in2 >> 31); + + out3 = in3 << totShift; + out4 = in4 << totShift; + + *pOut = out1; + *(pOut + 1) = out2; + + if(in3 != (out3 >> totShift)) + out3 = 0x7FFFFFFF ^ (in3 >> 31); + + if(in4 != (out4 >> totShift)) + out4 = 0x7FFFFFFF ^ (in4 >> 31); + + + *(pOut + 2) = out3; + *(pOut + 3) = out4; + + /* update pointers to process next sampels */ + pIn += 4u; + pOut += 4u; + + + /* Decrement the numSamples loop counter */ + blkCnt--; + } + + /* If the numSamples is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = numSamples % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) * k */ + /* Scale, saturate and then store the results in the destination buffer. */ + in1 = *pIn++; + + in2 = ((q63_t) in1 * scaleFract) >> 32; + + out1 = in2 << totShift; + + if(in2 != (out1 >> totShift)) + out1 = 0x7FFFFFFF ^ (in2 >> 31); + + *pOut++ = out1; + + /* Decrement the numSamples loop counter */ + blkCnt--; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixScale group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,209 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_sub_f32.c +* +* Description: Floating-point matrix subtraction. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @defgroup MatrixSub Matrix Subtraction + * + * Subtract two matrices. + * \image html MatrixSubtraction.gif "Subraction of two 3 x 3 matrices" + * + * The functions check to make sure that + * pSrcA, pSrcB, and pDst have the same + * number of rows and columns. + */ + +/** + * @addtogroup MatrixSub + * @{ + */ + +/** + * @brief Floating-point matrix subtraction + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + +arm_status arm_mat_sub_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst) +{ + float32_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + float32_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + float32_t *pOut = pDst->pData; /* output data matrix pointer */ + +#ifndef ARM_MATH_CM0_FAMILY + + float32_t inA1, inA2, inB1, inB2, out1, out2; /* temporary variables */ + +#endif // #ifndef ARM_MATH_CM0_FAMILY + + uint32_t numSamples; /* total number of elements in the matrix */ + uint32_t blkCnt; /* loop counters */ + arm_status status; /* status of matrix subtraction */ + +#ifdef ARM_MATH_MATRIX_CHECK + /* Check for matrix mismatch condition */ + if((pSrcA->numRows != pSrcB->numRows) || + (pSrcA->numCols != pSrcB->numCols) || + (pSrcA->numRows != pDst->numRows) || (pSrcA->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + { + /* Total number of samples in the input matrix */ + numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Loop Unrolling */ + blkCnt = numSamples >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) - B(m,n) */ + /* Subtract and then store the results in the destination buffer. */ + /* Read values from source A */ + inA1 = pIn1[0]; + + /* Read values from source B */ + inB1 = pIn2[0]; + + /* Read values from source A */ + inA2 = pIn1[1]; + + /* out = sourceA - sourceB */ + out1 = inA1 - inB1; + + /* Read values from source B */ + inB2 = pIn2[1]; + + /* Read values from source A */ + inA1 = pIn1[2]; + + /* out = sourceA - sourceB */ + out2 = inA2 - inB2; + + /* Read values from source B */ + inB1 = pIn2[2]; + + /* Store result in destination */ + pOut[0] = out1; + pOut[1] = out2; + + /* Read values from source A */ + inA2 = pIn1[3]; + + /* Read values from source B */ + inB2 = pIn2[3]; + + /* out = sourceA - sourceB */ + out1 = inA1 - inB1; + + + /* out = sourceA - sourceB */ + out2 = inA2 - inB2; + + /* Store result in destination */ + pOut[2] = out1; + + /* Store result in destination */ + pOut[3] = out2; + + + /* update pointers to process next sampels */ + pIn1 += 4u; + pIn2 += 4u; + pOut += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the numSamples is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = numSamples % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) - B(m,n) */ + /* Subtract and then store the results in the destination buffer. */ + *pOut++ = (*pIn1++) - (*pIn2++); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixSub group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,160 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_sub_q15.c +* +* Description: Q15 Matrix subtraction +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixSub + * @{ + */ + +/** + * @brief Q15 matrix subtraction. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q15 range [0x8000 0x7FFF] will be saturated. + */ + +arm_status arm_mat_sub_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst) +{ + q15_t *pInA = pSrcA->pData; /* input data matrix pointer A */ + q15_t *pInB = pSrcB->pData; /* input data matrix pointer B */ + q15_t *pOut = pDst->pData; /* output data matrix pointer */ + uint32_t numSamples; /* total number of elements in the matrix */ + uint32_t blkCnt; /* loop counters */ + arm_status status; /* status of matrix subtraction */ + + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrcA->numRows != pSrcB->numRows) || + (pSrcA->numCols != pSrcB->numCols) || + (pSrcA->numRows != pDst->numRows) || (pSrcA->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* Total number of samples in the input matrix */ + numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Apply loop unrolling */ + blkCnt = numSamples >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) - B(m,n) */ + /* Subtract, Saturate and then store the results in the destination buffer. */ + *__SIMD32(pOut)++ = __QSUB16(*__SIMD32(pInA)++, *__SIMD32(pInB)++); + *__SIMD32(pOut)++ = __QSUB16(*__SIMD32(pInA)++, *__SIMD32(pInB)++); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = numSamples % 0x4u; + + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) - B(m,n) */ + /* Subtract and then store the results in the destination buffer. */ + *pOut++ = (q15_t) __QSUB16(*pInA++, *pInB++); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) - B(m,n) */ + /* Subtract and then store the results in the destination buffer. */ + *pOut++ = (q15_t) __SSAT(((q31_t) * pInA++ - *pInB++), 16); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixSub group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,208 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_sub_q31.c +* +* Description: Q31 matrix subtraction +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixSub + * @{ + */ + +/** + * @brief Q31 matrix subtraction. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + * + * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] will be saturated. + */ + + +arm_status arm_mat_sub_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst) +{ + q31_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + q31_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + q31_t *pOut = pDst->pData; /* output data matrix pointer */ + q31_t inA1, inB1; /* temporary variables */ + +#ifndef ARM_MATH_CM0_FAMILY + + q31_t inA2, inB2; /* temporary variables */ + q31_t out1, out2; /* temporary variables */ + +#endif // #ifndef ARM_MATH_CM0_FAMILY + + uint32_t numSamples; /* total number of elements in the matrix */ + uint32_t blkCnt; /* loop counters */ + arm_status status; /* status of matrix subtraction */ + + +#ifdef ARM_MATH_MATRIX_CHECK + /* Check for matrix mismatch condition */ + if((pSrcA->numRows != pSrcB->numRows) || + (pSrcA->numCols != pSrcB->numCols) || + (pSrcA->numRows != pDst->numRows) || (pSrcA->numCols != pDst->numCols)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif + { + /* Total number of samples in the input matrix */ + numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Loop Unrolling */ + blkCnt = numSamples >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) - B(m,n) */ + /* Subtract, saturate and then store the results in the destination buffer. */ + /* Read values from source A */ + inA1 = pIn1[0]; + + /* Read values from source B */ + inB1 = pIn2[0]; + + /* Read values from source A */ + inA2 = pIn1[1]; + + /* Subtract and saturate */ + out1 = __QSUB(inA1, inB1); + + /* Read values from source B */ + inB2 = pIn2[1]; + + /* Read values from source A */ + inA1 = pIn1[2]; + + /* Subtract and saturate */ + out2 = __QSUB(inA2, inB2); + + /* Read values from source B */ + inB1 = pIn2[2]; + + /* Store result in destination */ + pOut[0] = out1; + pOut[1] = out2; + + /* Read values from source A */ + inA2 = pIn1[3]; + + /* Read values from source B */ + inB2 = pIn2[3]; + + /* Subtract and saturate */ + out1 = __QSUB(inA1, inB1); + + /* Subtract and saturate */ + out2 = __QSUB(inA2, inB2); + + /* Store result in destination */ + pOut[2] = out1; + pOut[3] = out2; + + /* update pointers to process next samples */ + pIn1 += 4u; + pIn2 += 4u; + pOut += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the numSamples is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = numSamples % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C(m,n) = A(m,n) - B(m,n) */ + /* Subtract, saturate and then store the results in the destination buffer. */ + inA1 = *pIn1++; + inB1 = *pIn2++; + + inA1 = __QSUB(inA1, inB1); + + *pOut++ = inA1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixSub group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,218 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_trans_f32.c +* +* Description: Floating-point matrix transpose. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +/** + * @defgroup MatrixTrans Matrix Transpose + * + * Tranposes a matrix. + * Transposing an M x N matrix flips it around the center diagonal and results in an N x M matrix. + * \image html MatrixTranspose.gif "Transpose of a 3 x 3 matrix" + */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixTrans + * @{ + */ + +/** + * @brief Floating-point matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + +arm_status arm_mat_trans_f32( + const arm_matrix_instance_f32 * pSrc, + arm_matrix_instance_f32 * pDst) +{ + float32_t *pIn = pSrc->pData; /* input data matrix pointer */ + float32_t *pOut = pDst->pData; /* output data matrix pointer */ + float32_t *px; /* Temporary output data matrix pointer */ + uint16_t nRows = pSrc->numRows; /* number of rows */ + uint16_t nColumns = pSrc->numCols; /* number of columns */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + uint16_t blkCnt, i = 0u, row = nRows; /* loop counters */ + arm_status status; /* status of matrix transpose */ + + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pDst->numCols) || (pSrc->numCols != pDst->numRows)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* Matrix transpose by exchanging the rows with columns */ + /* row loop */ + do + { + /* Loop Unrolling */ + blkCnt = nColumns >> 2; + + /* The pointer px is set to starting address of the column being processed */ + px = pOut + i; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) /* column loop */ + { + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Decrement the column loop counter */ + blkCnt--; + } + + /* Perform matrix transpose for last 3 samples here. */ + blkCnt = nColumns % 0x4u; + + while(blkCnt > 0u) + { + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Decrement the column loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + uint16_t col, i = 0u, row = nRows; /* loop counters */ + arm_status status; /* status of matrix transpose */ + + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pDst->numCols) || (pSrc->numCols != pDst->numRows)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* Matrix transpose by exchanging the rows with columns */ + /* row loop */ + do + { + /* The pointer px is set to starting address of the column being processed */ + px = pOut + i; + + /* Initialize column loop counter */ + col = nColumns; + + while(col > 0u) + { + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Decrement the column loop counter */ + col--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + i++; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); /* row loop end */ + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixTrans group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,284 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_trans_q15.c +* +* Description: Q15 matrix transpose. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixTrans + * @{ + */ + +/* + * @brief Q15 matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + +arm_status arm_mat_trans_q15( + const arm_matrix_instance_q15 * pSrc, + arm_matrix_instance_q15 * pDst) +{ + q15_t *pSrcA = pSrc->pData; /* input data matrix pointer */ + q15_t *pOut = pDst->pData; /* output data matrix pointer */ + uint16_t nRows = pSrc->numRows; /* number of nRows */ + uint16_t nColumns = pSrc->numCols; /* number of nColumns */ + uint16_t col, row = nRows, i = 0u; /* row and column loop counters */ + arm_status status; /* status of matrix transpose */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ +#ifndef UNALIGNED_SUPPORT_DISABLE + + q31_t in; /* variable to hold temporary output */ + +#else + + q15_t in; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pDst->numCols) || (pSrc->numCols != pDst->numRows)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* Matrix transpose by exchanging the rows with columns */ + /* row loop */ + do + { + + /* Apply loop unrolling and exchange the columns with row elements */ + col = nColumns >> 2u; + + /* The pointer pOut is set to starting address of the column being processed */ + pOut = pDst->pData + i; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(col > 0u) + { +#ifndef UNALIGNED_SUPPORT_DISABLE + + /* Read two elements from the row */ + in = *__SIMD32(pSrcA)++; + + /* Unpack and store one element in the destination */ +#ifndef ARM_MATH_BIG_ENDIAN + + *pOut = (q15_t) in; + +#else + + *pOut = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update the pointer pOut to point to the next row of the transposed matrix */ + pOut += nRows; + + /* Unpack and store the second element in the destination */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *pOut = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#else + + *pOut = (q15_t) in; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update the pointer pOut to point to the next row of the transposed matrix */ + pOut += nRows; + + /* Read two elements from the row */ +#ifndef ARM_MATH_BIG_ENDIAN + + in = *__SIMD32(pSrcA)++; + +#else + + in = *__SIMD32(pSrcA)++; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Unpack and store one element in the destination */ +#ifndef ARM_MATH_BIG_ENDIAN + + *pOut = (q15_t) in; + +#else + + *pOut = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update the pointer pOut to point to the next row of the transposed matrix */ + pOut += nRows; + + /* Unpack and store the second element in the destination */ +#ifndef ARM_MATH_BIG_ENDIAN + + *pOut = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); + +#else + + *pOut = (q15_t) in; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + +#else + /* Read one element from the row */ + in = *pSrcA++; + + /* Store one element in the destination */ + *pOut = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + pOut += nRows; + + /* Read one element from the row */ + in = *pSrcA++; + + /* Store one element in the destination */ + *pOut = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + pOut += nRows; + + /* Read one element from the row */ + in = *pSrcA++; + + /* Store one element in the destination */ + *pOut = in; + + /* Update the pointer px to point to the next row of the transposed matrix */ + pOut += nRows; + + /* Read one element from the row */ + in = *pSrcA++; + + /* Store one element in the destination */ + *pOut = in; + +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /* Update the pointer pOut to point to the next row of the transposed matrix */ + pOut += nRows; + + /* Decrement the column loop counter */ + col--; + } + + /* Perform matrix transpose for last 3 samples here. */ + col = nColumns % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pDst->numCols) || (pSrc->numCols != pDst->numRows)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* Matrix transpose by exchanging the rows with columns */ + /* row loop */ + do + { + /* The pointer pOut is set to starting address of the column being processed */ + pOut = pDst->pData + i; + + /* Initialize column loop counter */ + col = nColumns; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(col > 0u) + { + /* Read and store the input element in the destination */ + *pOut = *pSrcA++; + + /* Update the pointer pOut to point to the next row of the transposed matrix */ + pOut += nRows; + + /* Decrement the column loop counter */ + col--; + } + + i++; + + /* Decrement the row loop counter */ + row--; + + } while(row > 0u); + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixTrans group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,210 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mat_trans_q31.c +* +* Description: Q31 matrix transpose. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupMatrix + */ + +/** + * @addtogroup MatrixTrans + * @{ + */ + +/* + * @brief Q31 matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + +arm_status arm_mat_trans_q31( + const arm_matrix_instance_q31 * pSrc, + arm_matrix_instance_q31 * pDst) +{ + q31_t *pIn = pSrc->pData; /* input data matrix pointer */ + q31_t *pOut = pDst->pData; /* output data matrix pointer */ + q31_t *px; /* Temporary output data matrix pointer */ + uint16_t nRows = pSrc->numRows; /* number of nRows */ + uint16_t nColumns = pSrc->numCols; /* number of nColumns */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + uint16_t blkCnt, i = 0u, row = nRows; /* loop counters */ + arm_status status; /* status of matrix transpose */ + + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pDst->numCols) || (pSrc->numCols != pDst->numRows)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* Matrix transpose by exchanging the rows with columns */ + /* row loop */ + do + { + /* Apply loop unrolling and exchange the columns with row elements */ + blkCnt = nColumns >> 2u; + + /* The pointer px is set to starting address of the column being processed */ + px = pOut + i; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Decrement the column loop counter */ + blkCnt--; + } + + /* Perform matrix transpose for last 3 samples here. */ + blkCnt = nColumns % 0x4u; + + while(blkCnt > 0u) + { + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Decrement the column loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + uint16_t col, i = 0u, row = nRows; /* loop counters */ + arm_status status; /* status of matrix transpose */ + + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if((pSrc->numRows != pDst->numCols) || (pSrc->numCols != pDst->numRows)) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* Matrix transpose by exchanging the rows with columns */ + /* row loop */ + do + { + /* The pointer px is set to starting address of the column being processed */ + px = pOut + i; + + /* Initialize column loop counter */ + col = nColumns; + + while(col > 0u) + { + /* Read and store the input element in the destination */ + *px = *pIn++; + + /* Update the pointer px to point to the next row of the transposed matrix */ + px += nRows; + + /* Decrement the column loop counter */ + col--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + i++; + + /* Decrement the row loop counter */ + row--; + + } + while(row > 0u); /* row loop end */ + + /* set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + * @} end of MatrixTrans group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,186 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_max_f32.c +* +* Description: Maximum value of a floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @defgroup Max Maximum + * + * Computes the maximum value of an array of data. + * The function returns both the maximum value and its position within the array. + * There are separate functions for floating-point, Q31, Q15, and Q7 data types. + */ + +/** + * @addtogroup Max + * @{ + */ + + +/** + * @brief Maximum value of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + +void arm_max_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex) +{ +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t maxVal1, maxVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + /* Initialise the count value. */ + count = 0u; + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + /* Loop unrolling */ + blkCnt = (blockSize - 1u) >> 2u; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + while(blkCnt > 0u) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + maxVal2 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and its index */ + out = maxVal1; + outIndex = count + 1u; + } + + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal2) + { + /* Update the maximum value and its index */ + out = maxVal2; + outIndex = count + 2u; + } + + maxVal2 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and its index */ + out = maxVal1; + outIndex = count + 3u; + } + + /* compare for the maximum value */ + if(out < maxVal2) + { + /* Update the maximum value and its index */ + out = maxVal2; + outIndex = count + 4u; + } + + count += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* if (blockSize - 1u) is not multiple of 4 */ + blkCnt = (blockSize - 1u) % 4u; + +#else + + /* Run the below code for Cortex-M0 */ + float32_t maxVal1, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* loop counter */ + + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + blkCnt = (blockSize - 1u); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and it's index */ + out = maxVal1; + outIndex = blockSize - blkCnt; + } + + + /* Decrement the loop counter */ + blkCnt--; + + } + + /* Store the maximum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + * @} end of Max group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,176 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_max_q15.c +* +* Description: Maximum value of a Q15 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup Max + * @{ + */ + + +/** + * @brief Maximum value of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + +void arm_max_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex) +{ +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q15_t maxVal1, maxVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + /* Initialise the count value. */ + count = 0u; + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + /* Loop unrolling */ + blkCnt = (blockSize - 1u) >> 2u; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + while(blkCnt > 0u) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + maxVal2 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and its index */ + out = maxVal1; + outIndex = count + 1u; + } + + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal2) + { + /* Update the maximum value and its index */ + out = maxVal2; + outIndex = count + 2u; + } + + maxVal2 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and its index */ + out = maxVal1; + outIndex = count + 3u; + } + + /* compare for the maximum value */ + if(out < maxVal2) + { + /* Update the maximum value and its index */ + out = maxVal2; + outIndex = count + 4u; + } + + count += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* if (blockSize - 1u) is not multiple of 4 */ + blkCnt = (blockSize - 1u) % 4u; + +#else + + /* Run the below code for Cortex-M0 */ + q15_t maxVal1, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* loop counter */ + + blkCnt = (blockSize - 1u); + + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and it's index */ + out = maxVal1; + outIndex = blockSize - blkCnt; + } + /* Decrement the loop counter */ + blkCnt--; + + } + + /* Store the maximum value and its index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + * @} end of Max group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,177 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_max_q31.c +* +* Description: Maximum value of a Q31 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup Max + * @{ + */ + + +/** + * @brief Maximum value of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + +void arm_max_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex) +{ +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t maxVal1, maxVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + /* Initialise the count value. */ + count = 0u; + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + /* Loop unrolling */ + blkCnt = (blockSize - 1u) >> 2u; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + while(blkCnt > 0u) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + maxVal2 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and its index */ + out = maxVal1; + outIndex = count + 1u; + } + + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal2) + { + /* Update the maximum value and its index */ + out = maxVal2; + outIndex = count + 2u; + } + + maxVal2 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and its index */ + out = maxVal1; + outIndex = count + 3u; + } + + /* compare for the maximum value */ + if(out < maxVal2) + { + /* Update the maximum value and its index */ + out = maxVal2; + outIndex = count + 4u; + } + + count += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* if (blockSize - 1u) is not multiple of 4 */ + blkCnt = (blockSize - 1u) % 4u; + +#else + + /* Run the below code for Cortex-M0 */ + q31_t maxVal1, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* loop counter */ + + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + blkCnt = (blockSize - 1u); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and it's index */ + out = maxVal1; + outIndex = blockSize - blkCnt; + } + + /* Decrement the loop counter */ + blkCnt--; + + } + + /* Store the maximum value and its index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + * @} end of Max group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,177 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_max_q7.c +* +* Description: Maximum value of a Q7 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup Max + * @{ + */ + + +/** + * @brief Maximum value of a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + +void arm_max_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex) +{ +#ifndef ARM_MATH_CM0_FAMILY + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q7_t maxVal1, maxVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + /* Initialise the count value. */ + count = 0u; + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + /* Loop unrolling */ + blkCnt = (blockSize - 1u) >> 2u; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + while(blkCnt > 0u) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + maxVal2 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and its index */ + out = maxVal1; + outIndex = count + 1u; + } + + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal2) + { + /* Update the maximum value and its index */ + out = maxVal2; + outIndex = count + 2u; + } + + maxVal2 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and its index */ + out = maxVal1; + outIndex = count + 3u; + } + + /* compare for the maximum value */ + if(out < maxVal2) + { + /* Update the maximum value and its index */ + out = maxVal2; + outIndex = count + 4u; + } + + count += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* if (blockSize - 1u) is not multiple of 4 */ + blkCnt = (blockSize - 1u) % 4u; + +#else + + /* Run the below code for Cortex-M0 */ + q7_t maxVal1, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* loop counter */ + + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + blkCnt = (blockSize - 1u); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and it's index */ + out = maxVal1; + outIndex = blockSize - blkCnt; + } + /* Decrement the loop counter */ + blkCnt--; + + } + + /* Store the maximum value and its index into destination pointers */ + *pResult = out; + *pIndex = outIndex; + +} + +/** + * @} end of Max group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,139 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mean_f32.c +* +* Description: Mean value of a floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @defgroup mean Mean + * + * Calculates the mean of the input vector. Mean is defined as the average of the elements in the vector. + * The underlying algorithm is used: + * + *
    
+ * 	Result = (pSrc[0] + pSrc[1] + pSrc[2] + ... + pSrc[blockSize-1]) / blockSize;    
+ * 
+ * + * There are separate functions for floating-point, Q31, Q15, and Q7 data types. + */ + +/** + * @addtogroup mean + * @{ + */ + + +/** + * @brief Mean value of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult mean value returned here + * @return none. + */ + + +void arm_mean_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + float32_t sum = 0.0f; /* Temporary result storage */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t in1, in2, in3, in4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + sum += in1; + sum += in2; + sum += in3; + sum += in4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ + /* Store the result to the destination */ + *pResult = sum / (float32_t) blockSize; +} + +/** + * @} end of mean group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,133 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mean_q15.c +* +* Description: Mean value of a Q15 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup mean + * @{ + */ + +/** + * @brief Mean value of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult mean value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 32-bit internal accumulator. + * The input is represented in 1.15 format and is accumulated in a 32-bit + * accumulator in 17.15 format. + * There is no risk of internal overflow with this approach, and the + * full precision of intermediate result is preserved. + * Finally, the accumulator is saturated and truncated to yield a result of 1.15 format. + * + */ + + +void arm_mean_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult) +{ + q31_t sum = 0; /* Temporary result storage */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + in = *__SIMD32(pSrc)++; + sum += ((in << 16) >> 16); + sum += (in >> 16); + in = *__SIMD32(pSrc)++; + sum += ((in << 16) >> 16); + sum += (in >> 16); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ + /* Store the result to the destination */ + *pResult = (q15_t) (sum / (q31_t)blockSize); +} + +/** + * @} end of mean group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,136 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mean_q31.c +* +* Description: Mean value of a Q31 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup mean + * @{ + */ + +/** + * @brief Mean value of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult mean value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + *\par + * The function is implemented using a 64-bit internal accumulator. + * The input is represented in 1.31 format and is accumulated in a 64-bit + * accumulator in 33.31 format. + * There is no risk of internal overflow with this approach, and the + * full precision of intermediate result is preserved. + * Finally, the accumulator is truncated to yield a result of 1.31 format. + * + */ + + +void arm_mean_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult) +{ + q63_t sum = 0; /* Temporary result storage */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1, in2, in3, in4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + sum += in1; + sum += in2; + sum += in3; + sum += in4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ + /* Store the result to the destination */ + *pResult = (q31_t) (sum / (int32_t) blockSize); +} + +/** + * @} end of mean group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,133 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_mean_q7.c +* +* Description: Mean value of a Q7 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup mean + * @{ + */ + +/** + * @brief Mean value of a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult mean value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 32-bit internal accumulator. + * The input is represented in 1.7 format and is accumulated in a 32-bit + * accumulator in 25.7 format. + * There is no risk of internal overflow with this approach, and the + * full precision of intermediate result is preserved. + * Finally, the accumulator is truncated to yield a result of 1.7 format. + * + */ + + +void arm_mean_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult) +{ + q31_t sum = 0; /* Temporary result storage */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + in = *__SIMD32(pSrc)++; + + sum += ((in << 24) >> 24); + sum += ((in << 16) >> 24); + sum += ((in << 8) >> 24); + sum += (in >> 24); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ + /* Store the result to the destination */ + *pResult = (q7_t) (sum / (int32_t) blockSize); +} + +/** + * @} end of mean group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,183 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_min_f32.c +* +* Description: Minimum value of a floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @defgroup Min Minimum + * + * Computes the minimum value of an array of data. + * The function returns both the minimum value and its position within the array. + * There are separate functions for floating-point, Q31, Q15, and Q7 data types. + */ + +/** + * @addtogroup Min + * @{ + */ + + +/** + * @brief Minimum value of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult minimum value returned here + * @param[out] *pIndex index of minimum value returned here + * @return none. + * + */ + +void arm_min_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex) +{ +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float32_t minVal1, minVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + /* Initialise the count value. */ + count = 0u; + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + /* Loop unrolling */ + blkCnt = (blockSize - 1u) >> 2u; + + while(blkCnt > 0) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal1 = *pSrc++; + minVal2 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and its index */ + out = minVal1; + outIndex = count + 1u; + } + + minVal1 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal2) + { + /* Update the minimum value and its index */ + out = minVal2; + outIndex = count + 2u; + } + + minVal2 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and its index */ + out = minVal1; + outIndex = count + 3u; + } + + /* compare for the minimum value */ + if(out > minVal2) + { + /* Update the minimum value and its index */ + out = minVal2; + outIndex = count + 4u; + } + + count += 4u; + + blkCnt--; + } + + /* if (blockSize - 1u ) is not multiple of 4 */ + blkCnt = (blockSize - 1u) % 4u; + +#else + + /* Run the below code for Cortex-M0 */ + float32_t minVal1, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* loop counter */ + + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + blkCnt = (blockSize - 1u); + +#endif // #ifndef ARM_MATH_CM0_FAMILY + + while(blkCnt > 0) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal1 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and it's index */ + out = minVal1; + outIndex = blockSize - blkCnt; + } + + blkCnt--; + + } + + /* Store the minimum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + * @} end of Min group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,177 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_min_q15.c +* +* Description: Minimum value of a Q15 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + + +/** + * @addtogroup Min + * @{ + */ + + +/** + * @brief Minimum value of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult minimum value returned here + * @param[out] *pIndex index of minimum value returned here + * @return none. + * + */ + +void arm_min_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex) +{ +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q15_t minVal1, minVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + /* Initialise the count value. */ + count = 0u; + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + /* Loop unrolling */ + blkCnt = (blockSize - 1u) >> 2u; + + while(blkCnt > 0) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal1 = *pSrc++; + minVal2 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and its index */ + out = minVal1; + outIndex = count + 1u; + } + + minVal1 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal2) + { + /* Update the minimum value and its index */ + out = minVal2; + outIndex = count + 2u; + } + + minVal2 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and its index */ + out = minVal1; + outIndex = count + 3u; + } + + /* compare for the minimum value */ + if(out > minVal2) + { + /* Update the minimum value and its index */ + out = minVal2; + outIndex = count + 4u; + } + + count += 4u; + + blkCnt--; + } + + /* if (blockSize - 1u ) is not multiple of 4 */ + blkCnt = (blockSize - 1u) % 4u; + +#else + + /* Run the below code for Cortex-M0 */ + q15_t minVal1, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* loop counter */ + + blkCnt = (blockSize - 1u); + + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#endif // #ifndef ARM_MATH_CM0_FAMILY + + while(blkCnt > 0) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal1 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and it's index */ + out = minVal1; + outIndex = blockSize - blkCnt; + } + + blkCnt--; + + } + + + + /* Store the minimum value and its index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + * @} end of Min group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,176 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_min_q31.c +* +* Description: Minimum value of a Q31 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + + +/** + * @addtogroup Min + * @{ + */ + + +/** + * @brief Minimum value of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult minimum value returned here + * @param[out] *pIndex index of minimum value returned here + * @return none. + * + */ + +void arm_min_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex) +{ +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t minVal1, minVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + /* Initialise the count value. */ + count = 0u; + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + + /* Loop unrolling */ + blkCnt = (blockSize - 1u) >> 2u; + + while(blkCnt > 0) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal1 = *pSrc++; + minVal2 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and its index */ + out = minVal1; + outIndex = count + 1u; + } + + minVal1 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal2) + { + /* Update the minimum value and its index */ + out = minVal2; + outIndex = count + 2u; + } + + minVal2 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and its index */ + out = minVal1; + outIndex = count + 3u; + } + + /* compare for the minimum value */ + if(out > minVal2) + { + /* Update the minimum value and its index */ + out = minVal2; + outIndex = count + 4u; + } + + count += 4u; + + blkCnt--; + } + + /* if (blockSize - 1u ) is not multiple of 4 */ + blkCnt = (blockSize - 1u) % 4u; + +#else + + /* Run the below code for Cortex-M0 */ + q31_t minVal1, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* loop counter */ + + blkCnt = (blockSize - 1u); + + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#endif // #ifndef ARM_MATH_CM0_FAMILY + + while(blkCnt > 0) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal1 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and it's index */ + out = minVal1; + outIndex = blockSize - blkCnt; + } + + blkCnt--; + + } + + /* Store the minimum value and its index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + * @} end of Min group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,178 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_min_q7.c +* +* Description: Minimum value of a Q7 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup Min + * @{ + */ + + +/** + * @brief Minimum value of a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult minimum value returned here + * @param[out] *pIndex index of minimum value returned here + * @return none. + * + */ + +void arm_min_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex) +{ +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q7_t minVal1, minVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + /* Initialise the count value. */ + count = 0u; + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + /* Loop unrolling */ + blkCnt = (blockSize - 1u) >> 2u; + + while(blkCnt > 0) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal1 = *pSrc++; + minVal2 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and its index */ + out = minVal1; + outIndex = count + 1u; + } + + minVal1 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal2) + { + /* Update the minimum value and its index */ + out = minVal2; + outIndex = count + 2u; + } + + minVal2 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and its index */ + out = minVal1; + outIndex = count + 3u; + } + + /* compare for the minimum value */ + if(out > minVal2) + { + /* Update the minimum value and its index */ + out = minVal2; + outIndex = count + 4u; + } + + count += 4u; + + blkCnt--; + } + + /* if (blockSize - 1u ) is not multiple of 4 */ + blkCnt = (blockSize - 1u) % 4u; + +#else + + /* Run the below code for Cortex-M0 */ + + q7_t minVal1, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* loop counter */ + + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + blkCnt = (blockSize - 1u); + +#endif // #ifndef ARM_MATH_CM0_FAMILY + + while(blkCnt > 0) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal1 = *pSrc++; + + /* compare for the minimum value */ + if(out > minVal1) + { + /* Update the minimum value and it's index */ + out = minVal1; + outIndex = blockSize - blkCnt; + } + + blkCnt--; + + } + + /* Store the minimum value and its index into destination pointers */ + *pResult = out; + *pIndex = outIndex; + + +} + +/** + * @} end of Min group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,143 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_power_f32.c +* +* Description: Sum of the squares of the elements of a floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @defgroup power Power + * + * Calculates the sum of the squares of the elements in the input vector. + * The underlying algorithm is used: + * + *
    
+ * 	Result = pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + pSrc[2] * pSrc[2] + ... + pSrc[blockSize-1] * pSrc[blockSize-1];    
+ * 
+ * + * There are separate functions for floating point, Q31, Q15, and Q7 data types. + */ + +/** + * @addtogroup power + * @{ + */ + + +/** + * @brief Sum of the squares of the elements of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult sum of the squares value returned here + * @return none. + * + */ + + +void arm_power_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + float32_t sum = 0.0f; /* accumulator */ + float32_t in; /* Temporary variable to store input value */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute Power and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += in * in; + in = *pSrc++; + sum += in * in; + in = *pSrc++; + sum += in * in; + in = *pSrc++; + sum += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* compute power and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Store the result to the destination */ + *pResult = sum; +} + +/** + * @} end of power group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,152 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_power_q15.c +* +* Description: Sum of the squares of the elements of a Q15 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup power + * @{ + */ + +/** + * @brief Sum of the squares of the elements of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult sum of the squares value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. + * The input is represented in 1.15 format. + * Intermediate multiplication yields a 2.30 format, and this + * result is added without saturation to a 64-bit accumulator in 34.30 format. + * With 33 guard bits in the accumulator, there is no risk of overflow, and the + * full precision of the intermediate multiplication is preserved. + * Finally, the return result is in 34.30 format. + * + */ + +void arm_power_q15( + q15_t * pSrc, + uint32_t blockSize, + q63_t * pResult) +{ + q63_t sum = 0; /* Temporary result storage */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t in32; /* Temporary variable to store input value */ + q15_t in16; /* Temporary variable to store input value */ + uint32_t blkCnt; /* loop counter */ + + + /* loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute Power and then store the result in a temporary variable, sum. */ + in32 = *__SIMD32(pSrc)++; + sum = __SMLALD(in32, in32, sum); + in32 = *__SIMD32(pSrc)++; + sum = __SMLALD(in32, in32, sum); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute Power and then store the result in a temporary variable, sum. */ + in16 = *pSrc++; + sum = __SMLALD(in16, in16, sum); + + /* Decrement the loop counter */ + blkCnt--; + } + +#else + + /* Run the below code for Cortex-M0 */ + + q15_t in; /* Temporary variable to store input value */ + uint32_t blkCnt; /* loop counter */ + + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute Power and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += ((q31_t) in * in); + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + /* Store the results in 34.30 format */ + *pResult = sum; +} + +/** + * @} end of power group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,143 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_power_q31.c +* +* Description: Sum of the squares of the elements of a Q31 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup power + * @{ + */ + +/** + * @brief Sum of the squares of the elements of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult sum of the squares value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. + * The input is represented in 1.31 format. + * Intermediate multiplication yields a 2.62 format, and this + * result is truncated to 2.48 format by discarding the lower 14 bits. + * The 2.48 result is then added without saturation to a 64-bit accumulator in 16.48 format. + * With 15 guard bits in the accumulator, there is no risk of overflow, and the + * full precision of the intermediate multiplication is preserved. + * Finally, the return result is in 16.48 format. + * + */ + +void arm_power_q31( + q31_t * pSrc, + uint32_t blockSize, + q63_t * pResult) +{ + q63_t sum = 0; /* Temporary result storage */ + q31_t in; + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute Power then shift intermediate results by 14 bits to maintain 16.48 format and then store the result in a temporary variable sum, providing 15 guard bits. */ + in = *pSrc++; + sum += ((q63_t) in * in) >> 14u; + + in = *pSrc++; + sum += ((q63_t) in * in) >> 14u; + + in = *pSrc++; + sum += ((q63_t) in * in) >> 14u; + + in = *pSrc++; + sum += ((q63_t) in * in) >> 14u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute Power and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += ((q63_t) in * in) >> 14u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Store the results in 16.48 format */ + *pResult = sum; +} + +/** + * @} end of power group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,141 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_power_q7.c +* +* Description: Sum of the squares of the elements of a Q7 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup power + * @{ + */ + +/** + * @brief Sum of the squares of the elements of a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult sum of the squares value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 32-bit internal accumulator. + * The input is represented in 1.7 format. + * Intermediate multiplication yields a 2.14 format, and this + * result is added without saturation to an accumulator in 18.14 format. + * With 17 guard bits in the accumulator, there is no risk of overflow, and the + * full precision of the intermediate multiplication is preserved. + * Finally, the return result is in 18.14 format. + * + */ + +void arm_power_q7( + q7_t * pSrc, + uint32_t blockSize, + q31_t * pResult) +{ + q31_t sum = 0; /* Temporary result storage */ + q7_t in; /* Temporary variable to store input */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t input1; /* Temporary variable to store packed input */ + q31_t in1, in2; /* Temporary variables to store input */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* Reading two inputs of pSrc vector and packing */ + input1 = *__SIMD32(pSrc)++; + + in1 = __SXTB16(__ROR(input1, 8)); + in2 = __SXTB16(input1); + + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* calculate power and accumulate to accumulator */ + sum = __SMLAD(in1, in1, sum); + sum = __SMLAD(in2, in2, sum); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute Power and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += ((q15_t) in * in); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Store the result in 18.14 format */ + *pResult = sum; +} + +/** + * @} end of power group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_rms_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_rms_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,141 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_rms_f32.c +* +* Description: Root mean square value of an array of F32 type +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @defgroup RMS Root mean square (RMS) + * + * + * Calculates the Root Mean Sqaure of the elements in the input vector. + * The underlying algorithm is used: + * + *
    
+ * 	Result = sqrt(((pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] * pSrc[blockSize-1]) / blockSize));    
+ * 
+ * + * There are separate functions for floating point, Q31, and Q15 data types. + */ + +/** + * @addtogroup RMS + * @{ + */ + + +/** + * @brief Root Mean Square of the elements of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult rms value returned here + * @return none. + * + */ + +void arm_rms_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + float32_t sum = 0.0f; /* Accumulator */ + float32_t in; /* Tempoprary variable to store input value */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute sum of the squares and then store the result in a temporary variable, sum */ + in = *pSrc++; + sum += in * in; + in = *pSrc++; + sum += in * in; + in = *pSrc++; + sum += in * in; + in = *pSrc++; + sum += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute sum of the squares and then store the results in a temporary variable, sum */ + in = *pSrc++; + sum += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Rms and store the result in the destination */ + arm_sqrt_f32(sum / (float32_t) blockSize, pResult); +} + +/** + * @} end of RMS group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_rms_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_rms_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,153 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_rms_q15.c +* +* Description: Root Mean Square of the elements of a Q15 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @addtogroup RMS + * @{ + */ + +/** + * @brief Root Mean Square of the elements of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult rms value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. + * The input is represented in 1.15 format. + * Intermediate multiplication yields a 2.30 format, and this + * result is added without saturation to a 64-bit accumulator in 34.30 format. + * With 33 guard bits in the accumulator, there is no risk of overflow, and the + * full precision of the intermediate multiplication is preserved. + * Finally, the 34.30 result is truncated to 34.15 format by discarding the lower + * 15 bits, and then saturated to yield a result in 1.15 format. + * + */ + +void arm_rms_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult) +{ + q63_t sum = 0; /* accumulator */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t in; /* temporary variable to store the input value */ + q15_t in1; /* temporary variable to store the input value */ + uint32_t blkCnt; /* loop counter */ + + /* loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute sum of the squares and then store the results in a temporary variable, sum */ + in = *__SIMD32(pSrc)++; + sum = __SMLALD(in, in, sum); + in = *__SIMD32(pSrc)++; + sum = __SMLALD(in, in, sum); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute sum of the squares and then store the results in a temporary variable, sum */ + in1 = *pSrc++; + sum = __SMLALD(in1, in1, sum); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Truncating and saturating the accumulator to 1.15 format */ + /* Store the result in the destination */ + arm_sqrt_q15(__SSAT((sum / (q63_t)blockSize) >> 15, 16), pResult); + +#else + + /* Run the below code for Cortex-M0 */ + + q15_t in; /* temporary variable to store the input value */ + uint32_t blkCnt; /* loop counter */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute sum of the squares and then store the results in a temporary variable, sum */ + in = *pSrc++; + sum += ((q31_t) in * in); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Truncating and saturating the accumulator to 1.15 format */ + /* Store the result in the destination */ + arm_sqrt_q15(__SSAT((sum / (q63_t)blockSize) >> 15, 16), pResult); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of RMS group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_rms_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_rms_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,150 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_rms_q31.c +* +* Description: Root Mean Square of the elements of a Q31 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @addtogroup RMS + * @{ + */ + + +/** + * @brief Root Mean Square of the elements of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult rms value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + *\par + * The function is implemented using an internal 64-bit accumulator. + * The input is represented in 1.31 format, and intermediate multiplication + * yields a 2.62 format. + * The accumulator maintains full precision of the intermediate multiplication results, + * but provides only a single guard bit. + * There is no saturation on intermediate additions. + * If the accumulator overflows, it wraps around and distorts the result. + * In order to avoid overflows completely, the input signal must be scaled down by + * log2(blockSize) bits, as a total of blockSize additions are performed internally. + * Finally, the 2.62 accumulator is right shifted by 31 bits to yield a 1.31 format value. + * + */ + +void arm_rms_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult) +{ + q63_t sum = 0; /* accumulator */ + q31_t in; /* Temporary variable to store the input */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t in1, in2, in3, in4; /* Temporary input variables */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 8 outputs at a time. + ** a second loop below computes the remaining 1 to 7 samples. */ + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute sum of the squares and then store the result in a temporary variable, sum */ + /* read two samples from source buffer */ + in1 = pSrc[0]; + in2 = pSrc[1]; + + /* calculate power and accumulate to accumulator */ + sum += (q63_t) in1 *in1; + sum += (q63_t) in2 *in2; + + /* read two samples from source buffer */ + in3 = pSrc[2]; + in4 = pSrc[3]; + + /* calculate power and accumulate to accumulator */ + sum += (q63_t) in3 *in3; + sum += (q63_t) in4 *in4; + + + /* update source buffer to process next samples */ + pSrc += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 8, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute sum of the squares and then store the results in a temporary variable, sum */ + in = *pSrc++; + sum += (q63_t) in *in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Convert data in 2.62 to 1.31 by 31 right shifts and saturate */ + /* Compute Rms and store the result in the destination vector */ + arm_sqrt_q31(clip_q63_to_q31((sum / (q63_t) blockSize) >> 31), pResult); +} + +/** + * @} end of RMS group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_std_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_std_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,208 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_std_f32.c +* +* Description: Standard deviation of the elements of a floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @defgroup STD Standard deviation + * + * Calculates the standard deviation of the elements in the input vector. + * The underlying algorithm is used: + * + *
    
+ * 	Result = sqrt((sumOfSquares - sum2 / blockSize) / (blockSize - 1))   
+ *   
+ *	   where, sumOfSquares = pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] * pSrc[blockSize-1]   
+ *   
+ *	                   sum = pSrc[0] + pSrc[1] + pSrc[2] + ... + pSrc[blockSize-1]   
+ * 
+ * + * There are separate functions for floating point, Q31, and Q15 data types. + */ + +/** + * @addtogroup STD + * @{ + */ + + +/** + * @brief Standard deviation of the elements of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult standard deviation value returned here + * @return none. + * + */ + + +void arm_std_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + float32_t sum = 0.0f; /* Temporary result storage */ + float32_t sumOfSquares = 0.0f; /* Sum of squares */ + float32_t in; /* input value */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float32_t meanOfSquares, mean, squareOfMean; + + if(blockSize == 1) + { + *pResult = 0; + return; + } + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += in; + sumOfSquares += in * in; + in = *pSrc++; + sum += in; + sumOfSquares += in * in; + in = *pSrc++; + sum += in; + sumOfSquares += in * in; + in = *pSrc++; + sum += in; + sumOfSquares += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += in; + sumOfSquares += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Mean of squares of the input samples + * and then store the result in a temporary variable, meanOfSquares. */ + meanOfSquares = sumOfSquares / ((float32_t) blockSize - 1.0f); + + /* Compute mean of all input values */ + mean = sum / (float32_t) blockSize; + + /* Compute square of mean */ + squareOfMean = (mean * mean) * (((float32_t) blockSize) / + ((float32_t) blockSize - 1.0f)); + + /* Compute standard deviation and then store the result to the destination */ + arm_sqrt_f32((meanOfSquares - squareOfMean), pResult); + +#else + + /* Run the below code for Cortex-M0 */ + + float32_t squareOfSum; /* Square of Sum */ + float32_t var; /* Temporary varaince storage */ + + if(blockSize == 1) + { + *pResult = 0; + return; + } + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sumOfSquares. */ + in = *pSrc++; + sumOfSquares += in * in; + + /* C = (A[0] + A[1] + ... + A[blockSize-1]) */ + /* Compute Sum of the input samples + * and then store the result in a temporary variable, sum. */ + sum += in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute the square of sum */ + squareOfSum = ((sum * sum) / (float32_t) blockSize); + + /* Compute the variance */ + var = ((sumOfSquares - squareOfSum) / (float32_t) (blockSize - 1.0f)); + + /* Compute standard deviation and then store the result to the destination */ + arm_sqrt_f32(var, pResult); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of STD group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_std_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_std_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,195 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_std_q15.c +* +* Description: Standard deviation of an array of Q15 type. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup STD + * @{ + */ + +/** + * @brief Standard deviation of the elements of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult standard deviation value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. + * The input is represented in 1.15 format. + * Intermediate multiplication yields a 2.30 format, and this + * result is added without saturation to a 64-bit accumulator in 34.30 format. + * With 33 guard bits in the accumulator, there is no risk of overflow, and the + * full precision of the intermediate multiplication is preserved. + * Finally, the 34.30 result is truncated to 34.15 format by discarding the lower + * 15 bits, and then saturated to yield a result in 1.15 format. + */ + +void arm_std_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult) +{ + q31_t sum = 0; /* Accumulator */ + q31_t meanOfSquares, squareOfMean; /* square of mean and mean of square */ + uint32_t blkCnt; /* loop counter */ + q63_t sumOfSquares = 0; /* Accumulator */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t in; /* input value */ + q15_t in1; /* input value */ + + if(blockSize == 1) + { + *pResult = 0; + return; + } + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in = *__SIMD32(pSrc)++; + sum += ((in << 16) >> 16); + sum += (in >> 16); + sumOfSquares = __SMLALD(in, in, sumOfSquares); + in = *__SIMD32(pSrc)++; + sum += ((in << 16) >> 16); + sum += (in >> 16); + sumOfSquares = __SMLALD(in, in, sumOfSquares); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in1 = *pSrc++; + sumOfSquares = __SMLALD(in1, in1, sumOfSquares); + sum += in1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Mean of squares of the input samples + * and then store the result in a temporary variable, meanOfSquares. */ + meanOfSquares = (q31_t)(sumOfSquares / (q63_t)(blockSize - 1)); + + /* Compute square of mean */ + squareOfMean = (q31_t) ((q63_t)sum * sum / (q63_t)(blockSize * (blockSize - 1))); + + /* mean of the squares minus the square of the mean. */ + /* Compute standard deviation and store the result to the destination */ + arm_sqrt_q15(__SSAT((meanOfSquares - squareOfMean) >> 15, 16u), pResult); + +#else + + /* Run the below code for Cortex-M0 */ + q15_t in; /* input value */ + + if(blockSize == 1) + { + *pResult = 0; + return; + } + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sumOfSquares. */ + in = *pSrc++; + sumOfSquares += (in * in); + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + /* Compute sum of all input values and then store the result in a temporary variable, sum. */ + sum += in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Mean of squares of the input samples + * and then store the result in a temporary variable, meanOfSquares. */ + meanOfSquares = (q31_t)(sumOfSquares / (q63_t)(blockSize - 1)); + + /* Compute square of mean */ + squareOfMean = (q31_t) ((q63_t)sum * sum / (q63_t)(blockSize * (blockSize - 1))); + + /* mean of the squares minus the square of the mean. */ + /* Compute standard deviation and store the result to the destination */ + arm_sqrt_q15(__SSAT((meanOfSquares - squareOfMean) >> 15, 16u), pResult); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + +} + +/** + * @} end of STD group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_std_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_std_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,186 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_std_q31.c +* +* Description: Standard deviation of an array of Q31 type. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup STD + * @{ + */ + + +/** + * @brief Standard deviation of the elements of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult standard deviation value returned here + * @return none. + * @details + * Scaling and Overflow Behavior: + * + *\par + * The function is implemented using an internal 64-bit accumulator. + * The input is represented in 1.31 format, which is then downshifted by 8 bits + * which yields 1.23, and intermediate multiplication yields a 2.46 format. + * The accumulator maintains full precision of the intermediate multiplication results, + * but provides only a 16 guard bits. + * There is no saturation on intermediate additions. + * If the accumulator overflows it wraps around and distorts the result. + * In order to avoid overflows completely the input signal must be scaled down by + * log2(blockSize)-8 bits, as a total of blockSize additions are performed internally. + * After division, internal variables should be Q18.46 + * Finally, the 18.46 accumulator is right shifted by 15 bits to yield a 1.31 format value. + * + */ + + +void arm_std_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult) +{ + q63_t sum = 0; /* Accumulator */ + q63_t meanOfSquares, squareOfMean; /* square of mean and mean of square */ + q31_t in; /* input value */ + uint32_t blkCnt; /* loop counter */ + q63_t sumOfSquares = 0; /* Accumulator */ + + if(blockSize == 1) + { + *pResult = 0; + return; + } + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in = *pSrc++ >> 8; + sum += in; + sumOfSquares += ((q63_t) (in) * (in)); + in = *pSrc++ >> 8; + sum += in; + sumOfSquares += ((q63_t) (in) * (in)); + in = *pSrc++ >> 8; + sum += in; + sumOfSquares += ((q63_t) (in) * (in)); + in = *pSrc++ >> 8; + sum += in; + sumOfSquares += ((q63_t) (in) * (in)); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in = *pSrc++ >> 8; + sum += in; + sumOfSquares += ((q63_t) (in) * (in)); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Mean of squares of the input samples + * and then store the result in a temporary variable, meanOfSquares. */ + meanOfSquares = sumOfSquares / (q63_t)(blockSize - 1); + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sumOfSquares. */ + in = *pSrc++ >> 8; + sumOfSquares += ((q63_t) (in) * (in)); + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + /* Compute sum of all input values and then store the result in a temporary variable, sum. */ + sum += in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Mean of squares of the input samples + * and then store the result in a temporary variable, meanOfSquares. */ + meanOfSquares = sumOfSquares / (q63_t)(blockSize - 1); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + /* Compute square of mean */ + squareOfMean = sum * sum / (q63_t)(blockSize * (blockSize - 1u)); + + /* Compute standard deviation and then store the result to the destination */ + arm_sqrt_q31((meanOfSquares - squareOfMean) >> 15, pResult); + +} + +/** + * @} end of STD group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_var_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_var_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,204 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_var_f32.c +* +* Description: Variance of the elements of a floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @defgroup variance Variance + * + * Calculates the variance of the elements in the input vector. + * The underlying algorithm is used: + * + *
    
+ * 	Result = (sumOfSquares - sum2 / blockSize) / (blockSize - 1)   
+ *   
+ *	   where, sumOfSquares = pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] * pSrc[blockSize-1]   
+ *   
+ *	                   sum = pSrc[0] + pSrc[1] + pSrc[2] + ... + pSrc[blockSize-1]   
+ * 
+ * + * There are separate functions for floating point, Q31, and Q15 data types. + */ + +/** + * @addtogroup variance + * @{ + */ + + +/** + * @brief Variance of the elements of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult variance value returned here + * @return none. + * + */ + + +void arm_var_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + + float32_t sum = 0.0f; /* Temporary result storage */ + float32_t sumOfSquares = 0.0f; /* Sum of squares */ + float32_t in; /* input value */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float32_t meanOfSquares, mean, squareOfMean; /* Temporary variables */ + + if(blockSize == 1) + { + *pResult = 0; + return; + } + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += in; + sumOfSquares += in * in; + in = *pSrc++; + sum += in; + sumOfSquares += in * in; + in = *pSrc++; + sum += in; + sumOfSquares += in * in; + in = *pSrc++; + sum += in; + sumOfSquares += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += in; + sumOfSquares += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Mean of squares of the input samples + * and then store the result in a temporary variable, meanOfSquares. */ + meanOfSquares = sumOfSquares / ((float32_t) blockSize - 1.0f); + + /* Compute mean of all input values */ + mean = sum / (float32_t) blockSize; + + /* Compute square of mean */ + squareOfMean = (mean * mean) * (((float32_t) blockSize) / + ((float32_t) blockSize - 1.0f)); + + /* Compute variance and then store the result to the destination */ + *pResult = meanOfSquares - squareOfMean; + +#else + + /* Run the below code for Cortex-M0 */ + float32_t squareOfSum; /* Square of Sum */ + + if(blockSize == 1) + { + *pResult = 0; + return; + } + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sumOfSquares. */ + in = *pSrc++; + sumOfSquares += in * in; + + /* C = (A[0] + A[1] + ... + A[blockSize-1]) */ + /* Compute Sum of the input samples + * and then store the result in a temporary variable, sum. */ + sum += in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute the square of sum */ + squareOfSum = ((sum * sum) / (float32_t) blockSize); + + /* Compute the variance */ + *pResult = ((sumOfSquares - squareOfSum) / (float32_t) (blockSize - 1.0f)); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of variance group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_var_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_var_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,195 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_var_q15.c +* +* Description: Variance of an array of Q15 type. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup variance + * @{ + */ + +/** + * @brief Variance of the elements of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult variance value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + * \par + * The function is implemented using a 64-bit internal accumulator. + * The input is represented in 1.15 format. + * Intermediate multiplication yields a 2.30 format, and this + * result is added without saturation to a 64-bit accumulator in 34.30 format. + * With 33 guard bits in the accumulator, there is no risk of overflow, and the + * full precision of the intermediate multiplication is preserved. + * Finally, the 34.30 result is truncated to 34.15 format by discarding the lower + * 15 bits, and then saturated to yield a result in 1.15 format. + * + */ + + +void arm_var_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult) +{ + + q31_t sum = 0; /* Accumulator */ + q31_t meanOfSquares, squareOfMean; /* square of mean and mean of square */ + uint32_t blkCnt; /* loop counter */ + q63_t sumOfSquares = 0; /* Accumulator */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t in; /* input value */ + q15_t in1; /* input value */ + + if(blockSize == 1) + { + *pResult = 0; + return; + } + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in = *__SIMD32(pSrc)++; + sum += ((in << 16) >> 16); + sum += (in >> 16); + sumOfSquares = __SMLALD(in, in, sumOfSquares); + in = *__SIMD32(pSrc)++; + sum += ((in << 16) >> 16); + sum += (in >> 16); + sumOfSquares = __SMLALD(in, in, sumOfSquares); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in1 = *pSrc++; + sumOfSquares = __SMLALD(in1, in1, sumOfSquares); + sum += in1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Mean of squares of the input samples + * and then store the result in a temporary variable, meanOfSquares. */ + meanOfSquares = (q31_t) (sumOfSquares / (q63_t)(blockSize - 1)); + + /* Compute square of mean */ + squareOfMean = (q31_t)((q63_t)sum * sum / (q63_t)(blockSize * (blockSize - 1))); + + /* mean of the squares minus the square of the mean. */ + *pResult = (meanOfSquares - squareOfMean) >> 15; + +#else + + /* Run the below code for Cortex-M0 */ + q15_t in; /* input value */ + + if(blockSize == 1) + { + *pResult = 0; + return; + } + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sumOfSquares. */ + in = *pSrc++; + sumOfSquares += (in * in); + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + /* Compute sum of all input values and then store the result in a temporary variable, sum. */ + sum += in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Mean of squares of the input samples + * and then store the result in a temporary variable, meanOfSquares. */ + meanOfSquares = (q31_t) (sumOfSquares / (q63_t)(blockSize - 1)); + + /* Compute square of mean */ + squareOfMean = (q31_t)((q63_t)sum * sum / (q63_t)(blockSize * (blockSize - 1))); + + /* mean of the squares minus the square of the mean. */ + *pResult = (meanOfSquares - squareOfMean) >> 15; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of variance group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_var_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_var_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,187 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_var_q31.c +* +* Description: Variance of an array of Q31 type. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupStats + */ + +/** + * @addtogroup variance + * @{ + */ + +/** + * @brief Variance of the elements of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult variance value returned here + * @return none. + * + * @details + * Scaling and Overflow Behavior: + * + *\par + * The function is implemented using an internal 64-bit accumulator. + * The input is represented in 1.31 format, which is then downshifted by 8 bits + * which yields 1.23, and intermediate multiplication yields a 2.46 format. + * The accumulator maintains full precision of the intermediate multiplication results, + * but provides only a 16 guard bits. + * There is no saturation on intermediate additions. + * If the accumulator overflows it wraps around and distorts the result. + * In order to avoid overflows completely the input signal must be scaled down by + * log2(blockSize)-8 bits, as a total of blockSize additions are performed internally. + * After division, internal variables should be Q18.46 + * Finally, the 18.46 accumulator is right shifted by 15 bits to yield a 1.31 format value. + * + */ + + +void arm_var_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult) +{ + q63_t sum = 0; /* Accumulator */ + q63_t meanOfSquares, squareOfMean; /* square of mean and mean of square */ + q31_t in; /* input value */ + uint32_t blkCnt; /* loop counter */ + q63_t sumOfSquares = 0; /* Accumulator */ + + if(blockSize == 1) + { + *pResult = 0; + return; + } + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in = *pSrc++ >> 8; + sum += in; + sumOfSquares += ((q63_t) (in) * (in)); + in = *pSrc++ >> 8; + sum += in; + sumOfSquares += ((q63_t) (in) * (in)); + in = *pSrc++ >> 8; + sum += in; + sumOfSquares += ((q63_t) (in) * (in)); + in = *pSrc++ >> 8; + sum += in; + sumOfSquares += ((q63_t) (in) * (in)); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sum. */ + in = *pSrc++ >> 8; + sum += in; + sumOfSquares += ((q63_t) (in) * (in)); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Mean of squares of the input samples + * and then store the result in a temporary variable, meanOfSquares. */ + meanOfSquares = sumOfSquares / (q63_t)(blockSize - 1); + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + /* C = (A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1]) */ + /* Compute Sum of squares of the input samples + * and then store the result in a temporary variable, sumOfSquares. */ + in = *pSrc++ >> 8; + sumOfSquares += ((q63_t) (in) * (in)); + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + /* Compute sum of all input values and then store the result in a temporary variable, sum. */ + sum += in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Mean of squares of the input samples + * and then store the result in a temporary variable, meanOfSquares. */ + meanOfSquares = sumOfSquares / (q63_t)(blockSize - 1); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + /* Compute square of mean */ + squareOfMean = sum * sum / (q63_t)(blockSize * (blockSize - 1u)); + + + /* Compute standard deviation and then store the result to the destination */ + *pResult = (meanOfSquares - squareOfMean) >> 15; + +} + +/** + * @} end of variance group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,135 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_copy_f32.c +* +* Description: Copies the elements of a floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @defgroup copy Vector Copy + * + * Copies sample by sample from source vector to destination vector. + * + *
    
+ * 	pDst[n] = pSrc[n];   0 <= n < blockSize.    
+ * 
+ * + * There are separate functions for floating point, Q31, Q15, and Q7 data types. + */ + +/** + * @addtogroup copy + * @{ + */ + +/** + * @brief Copies the elements of a floating-point vector. + * @param[in] *pSrc points to input vector + * @param[out] *pDst points to output vector + * @param[in] blockSize length of the input vector + * @return none. + * + */ + + +void arm_copy_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t in1, in2, in3, in4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A */ + /* Copy and then store the results in the destination buffer */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + *pDst++ = in1; + *pDst++ = in2; + *pDst++ = in3; + *pDst++ = in4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A */ + /* Copy and then store the results in the destination buffer */ + *pDst++ = *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicCopy group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,114 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_copy_q15.c +* +* Description: Copies the elements of a Q15 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup copy + * @{ + */ +/** + * @brief Copies the elements of a Q15 vector. + * @param[in] *pSrc points to input vector + * @param[out] *pDst points to output vector + * @param[in] blockSize length of the input vector + * @return none. + * + */ + +void arm_copy_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A */ + /* Read two inputs */ + *__SIMD32(pDst)++ = *__SIMD32(pSrc)++; + *__SIMD32(pDst)++ = *__SIMD32(pSrc)++; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A */ + /* Copy and then store the value in the destination buffer */ + *pDst++ = *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicCopy group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,123 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_copy_q31.c +* +* Description: Copies the elements of a Q31 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup copy + * @{ + */ + +/** + * @brief Copies the elements of a Q31 vector. + * @param[in] *pSrc points to input vector + * @param[out] *pDst points to output vector + * @param[in] blockSize length of the input vector + * @return none. + * + */ + +void arm_copy_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1, in2, in3, in4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A */ + /* Copy and then store the values in the destination buffer */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + *pDst++ = in1; + *pDst++ = in2; + *pDst++ = in3; + *pDst++ = in4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = A */ + /* Copy and then store the value in the destination buffer */ + *pDst++ = *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicCopy group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,115 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_copy_q7.c +* +* Description: Copies the elements of a Q7 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup copy + * @{ + */ + +/** + * @brief Copies the elements of a Q7 vector. + * @param[in] *pSrc points to input vector + * @param[out] *pDst points to output vector + * @param[in] blockSize length of the input vector + * @return none. + * + */ + +void arm_copy_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = A */ + /* Copy and then store the results in the destination buffer */ + /* 4 samples are copied and stored at a time using SIMD */ + *__SIMD32(pDst)++ = *__SIMD32(pSrc)++; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + while(blkCnt > 0u) + { + /* C = A */ + /* Copy and then store the results in the destination buffer */ + *pDst++ = *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of BasicCopy group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fill_f32.c +* +* Description: Fills a constant value into a floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @defgroup Fill Vector Fill + * + * Fills the destination vector with a constant value. + * + *
    
+ * 	pDst[n] = value;   0 <= n < blockSize.    
+ * 
+ * + * There are separate functions for floating point, Q31, Q15, and Q7 data types. + */ + +/** + * @addtogroup Fill + * @{ + */ + +/** + * @brief Fills a constant value into a floating-point vector. + * @param[in] value input value to be filled + * @param[out] *pDst points to output vector + * @param[in] blockSize length of the output vector + * @return none. + * + */ + + +void arm_fill_f32( + float32_t value, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + float32_t in1 = value; + float32_t in2 = value; + float32_t in3 = value; + float32_t in4 = value; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = value */ + /* Fill the value in the destination buffer */ + *pDst++ = in1; + *pDst++ = in2; + *pDst++ = in3; + *pDst++ = in4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + + while(blkCnt > 0u) + { + /* C = value */ + /* Fill the value in the destination buffer */ + *pDst++ = value; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of Fill group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,120 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fill_q15.c +* +* Description: Fills a constant value into a Q15 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup Fill + * @{ + */ + +/** + * @brief Fills a constant value into a Q15 vector. + * @param[in] value input value to be filled + * @param[out] *pDst points to output vector + * @param[in] blockSize length of the output vector + * @return none. + * + */ + +void arm_fill_q15( + q15_t value, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t packedValue; /* value packed to 32 bits */ + + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* Packing two 16 bit values to 32 bit value in order to use SIMD */ + packedValue = __PKHBT(value, value, 16u); + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = value */ + /* Fill the value in the destination buffer */ + *__SIMD32(pDst)++ = packedValue; + *__SIMD32(pDst)++ = packedValue; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = value */ + /* Fill the value in the destination buffer */ + *pDst++ = value; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of Fill group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,121 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fill_q31.c +* +* Description: Fills a constant value into a Q31 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup Fill + * @{ + */ + +/** + * @brief Fills a constant value into a Q31 vector. + * @param[in] value input value to be filled + * @param[out] *pDst points to output vector + * @param[in] blockSize length of the output vector + * @return none. + * + */ + +void arm_fill_q31( + q31_t value, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1 = value; + q31_t in2 = value; + q31_t in3 = value; + q31_t in4 = value; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = value */ + /* Fill the value in the destination buffer */ + *pDst++ = in1; + *pDst++ = in2; + *pDst++ = in3; + *pDst++ = in4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = value */ + /* Fill the value in the destination buffer */ + *pDst++ = value; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of Fill group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,118 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_fill_q7.c +* +* Description: Fills a constant value into a Q7 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup Fill + * @{ + */ + +/** + * @brief Fills a constant value into a Q7 vector. + * @param[in] value input value to be filled + * @param[out] *pDst points to output vector + * @param[in] blockSize length of the output vector + * @return none. + * + */ + +void arm_fill_q7( + q7_t value, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t packedValue; /* value packed to 32 bits */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* Packing four 8 bit values to 32 bit value in order to use SIMD */ + packedValue = __PACKq7(value, value, value, value); + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = value */ + /* Fill the value in the destination buffer */ + *__SIMD32(pDst)++ = packedValue; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = value */ + /* Fill the value in the destination buffer */ + *pDst++ = value; + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of Fill group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_float_to_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_float_to_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,204 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_float_to_q15.c +* +* Description: Converts the elements of the floating-point vector to Q15 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup float_to_x + * @{ + */ + +/** + * @brief Converts the elements of the floating-point vector to Q15 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q15 output vector + * @param[in] blockSize length of the input vector + * @return none. + * + * \par Description: + * \par + * The equation used for the conversion process is: + *
    
+ * 	pDst[n] = (q15_t)(pSrc[n] * 32768);   0 <= n < blockSize.    
+ * 
+ * \par Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q15 range [0x8000 0x7FFF] will be saturated. + * \note + * In order to apply rounding, the library should be rebuilt with the ROUNDING macro + * defined in the preprocessor section of project options. + * + */ + + +void arm_float_to_q15( + float32_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + float32_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + +#ifdef ARM_MATH_ROUNDING + + float32_t in; + +#endif /* #ifdef ARM_MATH_ROUNDING */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + +#ifdef ARM_MATH_ROUNDING + /* C = A * 32768 */ + /* convert from float to q15 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + + in = *pIn++; + in = (in * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + + in = *pIn++; + in = (in * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + + in = *pIn++; + in = (in * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + +#else + + /* C = A * 32768 */ + /* convert from float to q15 and then store the results in the destination buffer */ + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + +#ifdef ARM_MATH_ROUNDING + /* C = A * 32768 */ + /* convert from float to q15 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + +#else + + /* C = A * 32768 */ + /* convert from float to q15 and then store the results in the destination buffer */ + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + +#ifdef ARM_MATH_ROUNDING + /* C = A * 32768 */ + /* convert from float to q15 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 32768.0f); + in += in > 0 ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + +#else + + /* C = A * 32768 */ + /* convert from float to q15 and then store the results in the destination buffer */ + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of float_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_float_to_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_float_to_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,211 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_float_to_q31.c +* +* Description: Converts the elements of the floating-point vector to Q31 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @defgroup float_to_x Convert 32-bit floating point value + */ + +/** + * @addtogroup float_to_x + * @{ + */ + +/** + * @brief Converts the elements of the floating-point vector to Q31 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q31 output vector + * @param[in] blockSize length of the input vector + * @return none. + * + *\par Description: + * \par + * The equation used for the conversion process is: + * + *
    
+ * 	pDst[n] = (q31_t)(pSrc[n] * 2147483648);   0 <= n < blockSize.    
+ * 
+ * Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q31 range[0x80000000 0x7FFFFFFF] will be saturated. + * + * \note In order to apply rounding, the library should be rebuilt with the ROUNDING macro + * defined in the preprocessor section of project options. + */ + + +void arm_float_to_q31( + float32_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + float32_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + +#ifdef ARM_MATH_ROUNDING + + float32_t in; + +#endif /* #ifdef ARM_MATH_ROUNDING */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + +#ifdef ARM_MATH_ROUNDING + + /* C = A * 32768 */ + /* convert from float to Q31 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + + in = *pIn++; + in = (in * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + + in = *pIn++; + in = (in * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + + in = *pIn++; + in = (in * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + +#else + + /* C = A * 2147483648 */ + /* convert from float to Q31 and then store the results in the destination buffer */ + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + +#ifdef ARM_MATH_ROUNDING + + /* C = A * 2147483648 */ + /* convert from float to Q31 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + +#else + + /* C = A * 2147483648 */ + /* convert from float to Q31 and then store the results in the destination buffer */ + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { + +#ifdef ARM_MATH_ROUNDING + + /* C = A * 2147483648 */ + /* convert from float to Q31 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 2147483648.0f); + in += in > 0 ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + +#else + + /* C = A * 2147483648 */ + /* convert from float to Q31 and then store the results in the destination buffer */ + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of float_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_float_to_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_float_to_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,203 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_float_to_q7.c +* +* Description: Converts the elements of the floating-point vector to Q7 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup float_to_x + * @{ + */ + +/** + * @brief Converts the elements of the floating-point vector to Q7 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q7 output vector + * @param[in] blockSize length of the input vector + * @return none. + * + *\par Description: + * \par + * The equation used for the conversion process is: + *
    
+ * 	pDst[n] = (q7_t)(pSrc[n] * 128);   0 <= n < blockSize.    
+ * 
+ * \par Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q7 range [0x80 0x7F] will be saturated. + * \note + * In order to apply rounding, the library should be rebuilt with the ROUNDING macro + * defined in the preprocessor section of project options. + */ + + +void arm_float_to_q7( + float32_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + float32_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + +#ifdef ARM_MATH_ROUNDING + + float32_t in; + +#endif /* #ifdef ARM_MATH_ROUNDING */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + +#ifdef ARM_MATH_ROUNDING + /* C = A * 128 */ + /* convert from float to q7 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + + in = *pIn++; + in = (in * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + + in = *pIn++; + in = (in * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + + in = *pIn++; + in = (in * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + +#else + + /* C = A * 128 */ + /* convert from float to q7 and then store the results in the destination buffer */ + *pDst++ = __SSAT((q31_t) (*pIn++ * 128.0f), 8); + *pDst++ = __SSAT((q31_t) (*pIn++ * 128.0f), 8); + *pDst++ = __SSAT((q31_t) (*pIn++ * 128.0f), 8); + *pDst++ = __SSAT((q31_t) (*pIn++ * 128.0f), 8); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + + while(blkCnt > 0u) + { + +#ifdef ARM_MATH_ROUNDING + /* C = A * 128 */ + /* convert from float to q7 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + +#else + + /* C = A * 128 */ + /* convert from float to q7 and then store the results in the destination buffer */ + *pDst++ = __SSAT((q31_t) (*pIn++ * 128.0f), 8); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + + +#else + + /* Run the below code for Cortex-M0 */ + + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while(blkCnt > 0u) + { +#ifdef ARM_MATH_ROUNDING + /* C = A * 128 */ + /* convert from float to q7 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 128.0f); + in += in > 0 ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q31_t) (in), 8)); + +#else + + /* C = A * 128 */ + /* convert from float to q7 and then store the results in the destination buffer */ + *pDst++ = (q7_t) __SSAT((q31_t) (*pIn++ * 128.0f), 8); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of float_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q15_to_float.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q15_to_float.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_q15_to_float.c +* +* Description: Converts the elements of the Q15 vector to floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @defgroup q15_to_x Convert 16-bit Integer value + */ + +/** + * @addtogroup q15_to_x + * @{ + */ + + + + +/** + * @brief Converts the elements of the Q15 vector to floating-point vector. + * @param[in] *pSrc points to the Q15 input vector + * @param[out] *pDst points to the floating-point output vector + * @param[in] blockSize length of the input vector + * @return none. + * + * \par Description: + * + * The equation used for the conversion process is: + * + *
    
+ * 	pDst[n] = (float32_t) pSrc[n] / 32768;   0 <= n < blockSize.    
+ * 
+ * + */ + + +void arm_q15_to_float( + q15_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + q15_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (float32_t) A / 32768 */ + /* convert from q15 to float and then store the results in the destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 32768.0f); + *pDst++ = ((float32_t) * pIn++ / 32768.0f); + *pDst++ = ((float32_t) * pIn++ / 32768.0f); + *pDst++ = ((float32_t) * pIn++ / 32768.0f); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (float32_t) A / 32768 */ + /* convert from q15 to float and then store the results in the destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 32768.0f); + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of q15_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q15_to_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q15_to_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,156 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_q15_to_q31.c +* +* Description: Converts the elements of the Q15 vector to Q31 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup q15_to_x + * @{ + */ + +/** + * @brief Converts the elements of the Q15 vector to Q31 vector. + * @param[in] *pSrc points to the Q15 input vector + * @param[out] *pDst points to the Q31 output vector + * @param[in] blockSize length of the input vector + * @return none. + * + * \par Description: + * + * The equation used for the conversion process is: + * + *
    
+ * 	pDst[n] = (q31_t) pSrc[n] << 16;   0 <= n < blockSize.    
+ * 
+ * + */ + + +void arm_q15_to_q31( + q15_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q15_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1, in2; + q31_t out1, out2, out3, out4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (q31_t)A << 16 */ + /* convert from q15 to q31 and then store the results in the destination buffer */ + in1 = *__SIMD32(pIn)++; + in2 = *__SIMD32(pIn)++; + +#ifndef ARM_MATH_BIG_ENDIAN + + /* extract lower 16 bits to 32 bit result */ + out1 = in1 << 16u; + /* extract upper 16 bits to 32 bit result */ + out2 = in1 & 0xFFFF0000; + /* extract lower 16 bits to 32 bit result */ + out3 = in2 << 16u; + /* extract upper 16 bits to 32 bit result */ + out4 = in2 & 0xFFFF0000; + +#else + + /* extract upper 16 bits to 32 bit result */ + out1 = in1 & 0xFFFF0000; + /* extract lower 16 bits to 32 bit result */ + out2 = in1 << 16u; + /* extract upper 16 bits to 32 bit result */ + out3 = in2 & 0xFFFF0000; + /* extract lower 16 bits to 32 bit result */ + out4 = in2 << 16u; + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + *pDst++ = out1; + *pDst++ = out2; + *pDst++ = out3; + *pDst++ = out4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (q31_t)A << 16 */ + /* convert from q15 to q31 and then store the results in the destination buffer */ + *pDst++ = (q31_t) * pIn++ << 16; + + /* Decrement the loop counter */ + blkCnt--; + } + +} + +/** + * @} end of q15_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q15_to_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q15_to_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,154 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_q15_to_q7.c +* +* Description: Converts the elements of the Q15 vector to Q7 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup q15_to_x + * @{ + */ + + +/** + * @brief Converts the elements of the Q15 vector to Q7 vector. + * @param[in] *pSrc points to the Q15 input vector + * @param[out] *pDst points to the Q7 output vector + * @param[in] blockSize length of the input vector + * @return none. + * + * \par Description: + * + * The equation used for the conversion process is: + * + *
    
+ * 	pDst[n] = (q7_t) pSrc[n] >> 8;   0 <= n < blockSize.    
+ * 
+ * + */ + + +void arm_q15_to_q7( + q15_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + q15_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1, in2; + q31_t out1, out2; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (q7_t) A >> 8 */ + /* convert from q15 to q7 and then store the results in the destination buffer */ + in1 = *__SIMD32(pIn)++; + in2 = *__SIMD32(pIn)++; + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __PKHTB(in2, in1, 16); + out2 = __PKHBT(in2, in1, 16); + +#else + + out1 = __PKHTB(in1, in2, 16); + out2 = __PKHBT(in1, in2, 16); + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + /* rotate packed value by 24 */ + out2 = ((uint32_t) out2 << 8) | ((uint32_t) out2 >> 24); + + /* anding with 0xff00ff00 to get two 8 bit values */ + out1 = out1 & 0xFF00FF00; + /* anding with 0x00ff00ff to get two 8 bit values */ + out2 = out2 & 0x00FF00FF; + + /* oring two values(contains two 8 bit values) to get four packed 8 bit values */ + out1 = out1 | out2; + + /* store 4 samples at a time to destiantion buffer */ + *__SIMD32(pDst)++ = out1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (q7_t) A >> 8 */ + /* convert from q15 to q7 and then store the results in the destination buffer */ + *pDst++ = (q7_t) (*pIn++ >> 8); + + /* Decrement the loop counter */ + blkCnt--; + } + +} + +/** + * @} end of q15_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q31_to_float.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q31_to_float.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,131 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_q31_to_float.c +* +* Description: Converts the elements of the Q31 vector to floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @defgroup q31_to_x Convert 32-bit Integer value + */ + +/** + * @addtogroup q31_to_x + * @{ + */ + +/** + * @brief Converts the elements of the Q31 vector to floating-point vector. + * @param[in] *pSrc points to the Q31 input vector + * @param[out] *pDst points to the floating-point output vector + * @param[in] blockSize length of the input vector + * @return none. + * + * \par Description: + * + * The equation used for the conversion process is: + * + *
    
+ * 	pDst[n] = (float32_t) pSrc[n] / 2147483648;   0 <= n < blockSize.    
+ * 
+ * + */ + + +void arm_q31_to_float( + q31_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + q31_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (float32_t) A / 2147483648 */ + /* convert from q31 to float and then store the results in the destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 2147483648.0f); + *pDst++ = ((float32_t) * pIn++ / 2147483648.0f); + *pDst++ = ((float32_t) * pIn++ / 2147483648.0f); + *pDst++ = ((float32_t) * pIn++ / 2147483648.0f); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (float32_t) A / 2147483648 */ + /* convert from q31 to float and then store the results in the destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 2147483648.0f); + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of q31_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q31_to_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q31_to_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,145 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_q31_to_q15.c +* +* Description: Converts the elements of the Q31 vector to Q15 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup q31_to_x + * @{ + */ + +/** + * @brief Converts the elements of the Q31 vector to Q15 vector. + * @param[in] *pSrc points to the Q31 input vector + * @param[out] *pDst points to the Q15 output vector + * @param[in] blockSize length of the input vector + * @return none. + * + * \par Description: + * + * The equation used for the conversion process is: + * + *
    
+ * 	pDst[n] = (q15_t) pSrc[n] >> 16;   0 <= n < blockSize.    
+ * 
+ * + */ + + +void arm_q31_to_q15( + q31_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q31_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1, in2, in3, in4; + q31_t out1, out2; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (q15_t) A >> 16 */ + /* convert from q31 to q15 and then store the results in the destination buffer */ + in1 = *pIn++; + in2 = *pIn++; + in3 = *pIn++; + in4 = *pIn++; + + /* pack two higher 16-bit values from two 32-bit values */ +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __PKHTB(in2, in1, 16); + out2 = __PKHTB(in4, in3, 16); + +#else + + out1 = __PKHTB(in1, in2, 16); + out2 = __PKHTB(in3, in4, 16); + +#endif // #ifdef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst)++ = out1; + *__SIMD32(pDst)++ = out2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (q15_t) A >> 16 */ + /* convert from q31 to q15 and then store the results in the destination buffer */ + *pDst++ = (q15_t) (*pIn++ >> 16); + + /* Decrement the loop counter */ + blkCnt--; + } + +} + +/** + * @} end of q31_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q31_to_q7.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q31_to_q7.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,136 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_q31_to_q7.c +* +* Description: Converts the elements of the Q31 vector to Q7 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup q31_to_x + * @{ + */ + +/** + * @brief Converts the elements of the Q31 vector to Q7 vector. + * @param[in] *pSrc points to the Q31 input vector + * @param[out] *pDst points to the Q7 output vector + * @param[in] blockSize length of the input vector + * @return none. + * + * \par Description: + * + * The equation used for the conversion process is: + * + *
    
+ * 	pDst[n] = (q7_t) pSrc[n] >> 24;   0 <= n < blockSize.     
+ * 
+ * + */ + + +void arm_q31_to_q7( + q31_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + q31_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t in1, in2, in3, in4; + q7_t out1, out2, out3, out4; + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (q7_t) A >> 24 */ + /* convert from q31 to q7 and then store the results in the destination buffer */ + in1 = *pIn++; + in2 = *pIn++; + in3 = *pIn++; + in4 = *pIn++; + + out1 = (q7_t) (in1 >> 24); + out2 = (q7_t) (in2 >> 24); + out3 = (q7_t) (in3 >> 24); + out4 = (q7_t) (in4 >> 24); + + *__SIMD32(pDst)++ = __PACKq7(out1, out2, out3, out4); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (q7_t) A >> 24 */ + /* convert from q31 to q7 and then store the results in the destination buffer */ + *pDst++ = (q7_t) (*pIn++ >> 24); + + /* Decrement the loop counter */ + blkCnt--; + } + +} + +/** + * @} end of q31_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q7_to_float.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q7_to_float.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,131 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_q7_to_float.c +* +* Description: Converts the elements of the Q7 vector to floating-point vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @defgroup q7_to_x Convert 8-bit Integer value + */ + +/** + * @addtogroup q7_to_x + * @{ + */ + +/** + * @brief Converts the elements of the Q7 vector to floating-point vector. + * @param[in] *pSrc points to the Q7 input vector + * @param[out] *pDst points to the floating-point output vector + * @param[in] blockSize length of the input vector + * @return none. + * + * \par Description: + * + * The equation used for the conversion process is: + * + *
    
+ * 	pDst[n] = (float32_t) pSrc[n] / 128;   0 <= n < blockSize.    
+ * 
+ * + */ + + +void arm_q7_to_float( + q7_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + q7_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (float32_t) A / 128 */ + /* convert from q7 to float and then store the results in the destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 128.0f); + *pDst++ = ((float32_t) * pIn++ / 128.0f); + *pDst++ = ((float32_t) * pIn++ / 128.0f); + *pDst++ = ((float32_t) * pIn++ / 128.0f); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (float32_t) A / 128 */ + /* convert from q7 to float and then store the results in the destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 128.0f); + + /* Decrement the loop counter */ + blkCnt--; + } +} + +/** + * @} end of q7_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q7_to_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q7_to_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,157 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_q7_to_q15.c +* +* Description: Converts the elements of the Q7 vector to Q15 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup q7_to_x + * @{ + */ + + + + +/** + * @brief Converts the elements of the Q7 vector to Q15 vector. + * @param[in] *pSrc points to the Q7 input vector + * @param[out] *pDst points to the Q15 output vector + * @param[in] blockSize length of the input vector + * @return none. + * + * \par Description: + * + * The equation used for the conversion process is: + * + *
    
+ * 	pDst[n] = (q15_t) pSrc[n] << 8;   0 <= n < blockSize.    
+ * 
+ * + */ + + +void arm_q7_to_q15( + q7_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q7_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + q31_t in; + q31_t in1, in2; + q31_t out1, out2; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (q15_t) A << 8 */ + /* convert from q7 to q15 and then store the results in the destination buffer */ + in = *__SIMD32(pIn)++; + + /* rotatate in by 8 and extend two q7_t values to q15_t values */ + in1 = __SXTB16(__ROR(in, 8)); + + /* extend remainig two q7_t values to q15_t values */ + in2 = __SXTB16(in); + + in1 = in1 << 8u; + in2 = in2 << 8u; + + in1 = in1 & 0xFF00FF00; + in2 = in2 & 0xFF00FF00; + +#ifndef ARM_MATH_BIG_ENDIAN + + out2 = __PKHTB(in1, in2, 16); + out1 = __PKHBT(in2, in1, 16); + +#else + + out1 = __PKHTB(in1, in2, 16); + out2 = __PKHBT(in2, in1, 16); + +#endif + + *__SIMD32(pDst)++ = out1; + *__SIMD32(pDst)++ = out2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (q15_t) A << 8 */ + /* convert from q7 to q15 and then store the results in the destination buffer */ + *pDst++ = (q15_t) * pIn++ << 8; + + /* Decrement the loop counter */ + blkCnt--; + } + +} + +/** + * @} end of q7_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q7_to_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/SupportFunctions/arm_q7_to_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,142 @@ +/* ---------------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_q7_to_q31.c +* +* Description: Converts the elements of the Q7 vector to Q31 vector. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* ---------------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupSupport + */ + +/** + * @addtogroup q7_to_x + * @{ + */ + +/** + * @brief Converts the elements of the Q7 vector to Q31 vector. + * @param[in] *pSrc points to the Q7 input vector + * @param[out] *pDst points to the Q31 output vector + * @param[in] blockSize length of the input vector + * @return none. + * + * \par Description: + * + * The equation used for the conversion process is: + * + *
    
+ * 	pDst[n] = (q31_t) pSrc[n] << 24;   0 <= n < blockSize.   
+ * 
+ * + */ + + +void arm_q7_to_q31( + q7_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q7_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + +#ifndef ARM_MATH_CM0_FAMILY + + q31_t in; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /*loop Unrolling */ + blkCnt = blockSize >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while(blkCnt > 0u) + { + /* C = (q31_t) A << 24 */ + /* convert from q7 to q31 and then store the results in the destination buffer */ + in = *__SIMD32(pIn)++; + +#ifndef ARM_MATH_BIG_ENDIAN + + *pDst++ = (__ROR(in, 8)) & 0xFF000000; + *pDst++ = (__ROR(in, 16)) & 0xFF000000; + *pDst++ = (__ROR(in, 24)) & 0xFF000000; + *pDst++ = (in & 0xFF000000); + +#else + + *pDst++ = (in & 0xFF000000); + *pDst++ = (__ROR(in, 24)) & 0xFF000000; + *pDst++ = (__ROR(in, 16)) & 0xFF000000; + *pDst++ = (__ROR(in, 8)) & 0xFF000000; + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4u; + +#else + + /* Run the below code for Cortex-M0 */ + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* C = (q31_t) A << 24 */ + /* convert from q7 to q31 and then store the results in the destination buffer */ + *pDst++ = (q31_t) * pIn++ << 24; + + /* Decrement the loop counter */ + blkCnt--; + } + +} + +/** + * @} end of q7_to_x group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_bitreversal.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_bitreversal.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,242 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_bitreversal.c +* +* Description: This file has common tables like Bitreverse, reciprocal etc which are used across different functions +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/* +* @brief In-place bit reversal function. +* @param[in, out] *pSrc points to the in-place buffer of floating-point data type. +* @param[in] fftSize length of the FFT. +* @param[in] bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table. +* @param[in] *pBitRevTab points to the bit reversal table. +* @return none. +*/ + +void arm_bitreversal_f32( +float32_t * pSrc, +uint16_t fftSize, +uint16_t bitRevFactor, +uint16_t * pBitRevTab) +{ + uint16_t fftLenBy2, fftLenBy2p1; + uint16_t i, j; + float32_t in; + + /* Initializations */ + j = 0u; + fftLenBy2 = fftSize >> 1u; + fftLenBy2p1 = (fftSize >> 1u) + 1u; + + /* Bit Reversal Implementation */ + for (i = 0u; i <= (fftLenBy2 - 2u); i += 2u) + { + if(i < j) + { + /* pSrc[i] <-> pSrc[j]; */ + in = pSrc[2u * i]; + pSrc[2u * i] = pSrc[2u * j]; + pSrc[2u * j] = in; + + /* pSrc[i+1u] <-> pSrc[j+1u] */ + in = pSrc[(2u * i) + 1u]; + pSrc[(2u * i) + 1u] = pSrc[(2u * j) + 1u]; + pSrc[(2u * j) + 1u] = in; + + /* pSrc[i+fftLenBy2p1] <-> pSrc[j+fftLenBy2p1] */ + in = pSrc[2u * (i + fftLenBy2p1)]; + pSrc[2u * (i + fftLenBy2p1)] = pSrc[2u * (j + fftLenBy2p1)]; + pSrc[2u * (j + fftLenBy2p1)] = in; + + /* pSrc[i+fftLenBy2p1+1u] <-> pSrc[j+fftLenBy2p1+1u] */ + in = pSrc[(2u * (i + fftLenBy2p1)) + 1u]; + pSrc[(2u * (i + fftLenBy2p1)) + 1u] = + pSrc[(2u * (j + fftLenBy2p1)) + 1u]; + pSrc[(2u * (j + fftLenBy2p1)) + 1u] = in; + + } + + /* pSrc[i+1u] <-> pSrc[j+1u] */ + in = pSrc[2u * (i + 1u)]; + pSrc[2u * (i + 1u)] = pSrc[2u * (j + fftLenBy2)]; + pSrc[2u * (j + fftLenBy2)] = in; + + /* pSrc[i+2u] <-> pSrc[j+2u] */ + in = pSrc[(2u * (i + 1u)) + 1u]; + pSrc[(2u * (i + 1u)) + 1u] = pSrc[(2u * (j + fftLenBy2)) + 1u]; + pSrc[(2u * (j + fftLenBy2)) + 1u] = in; + + /* Reading the index for the bit reversal */ + j = *pBitRevTab; + + /* Updating the bit reversal index depending on the fft length */ + pBitRevTab += bitRevFactor; + } +} + + + +/* +* @brief In-place bit reversal function. +* @param[in, out] *pSrc points to the in-place buffer of Q31 data type. +* @param[in] fftLen length of the FFT. +* @param[in] bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table +* @param[in] *pBitRevTab points to bit reversal table. +* @return none. +*/ + +void arm_bitreversal_q31( +q31_t * pSrc, +uint32_t fftLen, +uint16_t bitRevFactor, +uint16_t * pBitRevTable) +{ + uint32_t fftLenBy2, fftLenBy2p1, i, j; + q31_t in; + + /* Initializations */ + j = 0u; + fftLenBy2 = fftLen / 2u; + fftLenBy2p1 = (fftLen / 2u) + 1u; + + /* Bit Reversal Implementation */ + for (i = 0u; i <= (fftLenBy2 - 2u); i += 2u) + { + if(i < j) + { + /* pSrc[i] <-> pSrc[j]; */ + in = pSrc[2u * i]; + pSrc[2u * i] = pSrc[2u * j]; + pSrc[2u * j] = in; + + /* pSrc[i+1u] <-> pSrc[j+1u] */ + in = pSrc[(2u * i) + 1u]; + pSrc[(2u * i) + 1u] = pSrc[(2u * j) + 1u]; + pSrc[(2u * j) + 1u] = in; + + /* pSrc[i+fftLenBy2p1] <-> pSrc[j+fftLenBy2p1] */ + in = pSrc[2u * (i + fftLenBy2p1)]; + pSrc[2u * (i + fftLenBy2p1)] = pSrc[2u * (j + fftLenBy2p1)]; + pSrc[2u * (j + fftLenBy2p1)] = in; + + /* pSrc[i+fftLenBy2p1+1u] <-> pSrc[j+fftLenBy2p1+1u] */ + in = pSrc[(2u * (i + fftLenBy2p1)) + 1u]; + pSrc[(2u * (i + fftLenBy2p1)) + 1u] = + pSrc[(2u * (j + fftLenBy2p1)) + 1u]; + pSrc[(2u * (j + fftLenBy2p1)) + 1u] = in; + + } + + /* pSrc[i+1u] <-> pSrc[j+1u] */ + in = pSrc[2u * (i + 1u)]; + pSrc[2u * (i + 1u)] = pSrc[2u * (j + fftLenBy2)]; + pSrc[2u * (j + fftLenBy2)] = in; + + /* pSrc[i+2u] <-> pSrc[j+2u] */ + in = pSrc[(2u * (i + 1u)) + 1u]; + pSrc[(2u * (i + 1u)) + 1u] = pSrc[(2u * (j + fftLenBy2)) + 1u]; + pSrc[(2u * (j + fftLenBy2)) + 1u] = in; + + /* Reading the index for the bit reversal */ + j = *pBitRevTable; + + /* Updating the bit reversal index depending on the fft length */ + pBitRevTable += bitRevFactor; + } +} + + + +/* + * @brief In-place bit reversal function. + * @param[in, out] *pSrc points to the in-place buffer of Q15 data type. + * @param[in] fftLen length of the FFT. + * @param[in] bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table + * @param[in] *pBitRevTab points to bit reversal table. + * @return none. +*/ + +void arm_bitreversal_q15( +q15_t * pSrc16, +uint32_t fftLen, +uint16_t bitRevFactor, +uint16_t * pBitRevTab) +{ + q31_t *pSrc = (q31_t *) pSrc16; + q31_t in; + uint32_t fftLenBy2, fftLenBy2p1; + uint32_t i, j; + + /* Initializations */ + j = 0u; + fftLenBy2 = fftLen / 2u; + fftLenBy2p1 = (fftLen / 2u) + 1u; + + /* Bit Reversal Implementation */ + for (i = 0u; i <= (fftLenBy2 - 2u); i += 2u) + { + if(i < j) + { + /* pSrc[i] <-> pSrc[j]; */ + /* pSrc[i+1u] <-> pSrc[j+1u] */ + in = pSrc[i]; + pSrc[i] = pSrc[j]; + pSrc[j] = in; + + /* pSrc[i + fftLenBy2p1] <-> pSrc[j + fftLenBy2p1]; */ + /* pSrc[i + fftLenBy2p1+1u] <-> pSrc[j + fftLenBy2p1+1u] */ + in = pSrc[i + fftLenBy2p1]; + pSrc[i + fftLenBy2p1] = pSrc[j + fftLenBy2p1]; + pSrc[j + fftLenBy2p1] = in; + } + + /* pSrc[i+1u] <-> pSrc[j+fftLenBy2]; */ + /* pSrc[i+2] <-> pSrc[j+fftLenBy2+1u] */ + in = pSrc[i + 1u]; + pSrc[i + 1u] = pSrc[j + fftLenBy2]; + pSrc[j + fftLenBy2] = in; + + /* Reading the index for the bit reversal */ + j = *pBitRevTab; + + /* Updating the bit reversal index depending on the fft length */ + pBitRevTab += bitRevFactor; + } +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,632 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_f32.c +* +* Description: Combined Radix Decimation in Frequency CFFT Floating point processing function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +extern void arm_radix8_butterfly_f32( + float32_t * pSrc, + uint16_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier); + +extern void arm_bitreversal_32( + uint32_t * pSrc, + const uint16_t bitRevLen, + const uint16_t * pBitRevTable); + +/** +* @ingroup groupTransforms +*/ + +/** +* @defgroup ComplexFFT Complex FFT Functions +* +* \par +* The Fast Fourier Transform (FFT) is an efficient algorithm for computing the +* Discrete Fourier Transform (DFT). The FFT can be orders of magnitude faster +* than the DFT, especially for long lengths. +* The algorithms described in this section +* operate on complex data. A separate set of functions is devoted to handling +* of real sequences. +* \par +* There are separate algorithms for handling floating-point, Q15, and Q31 data +* types. The algorithms available for each data type are described next. +* \par +* The FFT functions operate in-place. That is, the array holding the input data +* will also be used to hold the corresponding result. The input data is complex +* and contains 2*fftLen interleaved values as shown below. +*
 {real[0], imag[0], real[1], imag[1],..} 
+* The FFT result will be contained in the same array and the frequency domain +* values will have the same interleaving. +* +* \par Floating-point +* The floating-point complex FFT uses a mixed-radix algorithm. Multiple radix-8 +* stages are performed along with a single radix-2 or radix-4 stage, as needed. +* The algorithm supports lengths of [16, 32, 64, ..., 4096] and each length uses +* a different twiddle factor table. +* \par +* The function uses the standard FFT definition and output values may grow by a +* factor of fftLen when computing the forward transform. The +* inverse transform includes a scale of 1/fftLen as part of the +* calculation and this matches the textbook definition of the inverse FFT. +* \par +* Pre-initialized data structures containing twiddle factors and bit reversal +* tables are provided and defined in arm_const_structs.h. Include +* this header in your function and then pass one of the constant structures as +* an argument to arm_cfft_f32. For example: +* \par +* arm_cfft_f32(arm_cfft_sR_f32_len64, pSrc, 1, 1) +* \par +* computes a 64-point inverse complex FFT including bit reversal. +* The data structures are treated as constant data and not modified during the +* calculation. The same data structure can be reused for multiple transforms +* including mixing forward and inverse transforms. +* \par +* Earlier releases of the library provided separate radix-2 and radix-4 +* algorithms that operated on floating-point data. These functions are still +* provided but are deprecated. The older functions are slower and less general +* than the new functions. +* \par +* An example of initialization of the constants for the arm_cfft_f32 function follows: +* \code +* const static arm_cfft_instance_f32 *S; +* ... +* switch (length) { +* case 16: +* S = &arm_cfft_sR_f32_len16; +* break; +* case 32: +* S = &arm_cfft_sR_f32_len32; +* break; +* case 64: +* S = &arm_cfft_sR_f32_len64; +* break; +* case 128: +* S = &arm_cfft_sR_f32_len128; +* break; +* case 256: +* S = &arm_cfft_sR_f32_len256; +* break; +* case 512: +* S = &arm_cfft_sR_f32_len512; +* break; +* case 1024: +* S = &arm_cfft_sR_f32_len1024; +* break; +* case 2048: +* S = &arm_cfft_sR_f32_len2048; +* break; +* case 4096: +* S = &arm_cfft_sR_f32_len4096; +* break; +* } +* \endcode +* \par Q15 and Q31 +* The floating-point complex FFT uses a mixed-radix algorithm. Multiple radix-4 +* stages are performed along with a single radix-2 stage, as needed. +* The algorithm supports lengths of [16, 32, 64, ..., 4096] and each length uses +* a different twiddle factor table. +* \par +* The function uses the standard FFT definition and output values may grow by a +* factor of fftLen when computing the forward transform. The +* inverse transform includes a scale of 1/fftLen as part of the +* calculation and this matches the textbook definition of the inverse FFT. +* \par +* Pre-initialized data structures containing twiddle factors and bit reversal +* tables are provided and defined in arm_const_structs.h. Include +* this header in your function and then pass one of the constant structures as +* an argument to arm_cfft_q31. For example: +* \par +* arm_cfft_q31(arm_cfft_sR_q31_len64, pSrc, 1, 1) +* \par +* computes a 64-point inverse complex FFT including bit reversal. +* The data structures are treated as constant data and not modified during the +* calculation. The same data structure can be reused for multiple transforms +* including mixing forward and inverse transforms. +* \par +* Earlier releases of the library provided separate radix-2 and radix-4 +* algorithms that operated on floating-point data. These functions are still +* provided but are deprecated. The older functions are slower and less general +* than the new functions. +* \par +* An example of initialization of the constants for the arm_cfft_q31 function follows: +* \code +* const static arm_cfft_instance_q31 *S; +* ... +* switch (length) { +* case 16: +* S = &arm_cfft_sR_q31_len16; +* break; +* case 32: +* S = &arm_cfft_sR_q31_len32; +* break; +* case 64: +* S = &arm_cfft_sR_q31_len64; +* break; +* case 128: +* S = &arm_cfft_sR_q31_len128; +* break; +* case 256: +* S = &arm_cfft_sR_q31_len256; +* break; +* case 512: +* S = &arm_cfft_sR_q31_len512; +* break; +* case 1024: +* S = &arm_cfft_sR_q31_len1024; +* break; +* case 2048: +* S = &arm_cfft_sR_q31_len2048; +* break; +* case 4096: +* S = &arm_cfft_sR_q31_len4096; +* break; +* } +* \endcode +* +*/ + +void arm_cfft_radix8by2_f32( arm_cfft_instance_f32 * S, float32_t * p1) +{ + uint32_t L = S->fftLen; + float32_t * pCol1, * pCol2, * pMid1, * pMid2; + float32_t * p2 = p1 + L; + const float32_t * tw = (float32_t *) S->pTwiddle; + float32_t t1[4], t2[4], t3[4], t4[4], twR, twI; + float32_t m0, m1, m2, m3; + uint32_t l; + + pCol1 = p1; + pCol2 = p2; + + // Define new length + L >>= 1; + // Initialize mid pointers + pMid1 = p1 + L; + pMid2 = p2 + L; + + // do two dot Fourier transform + for ( l = L >> 2; l > 0; l-- ) + { + t1[0] = p1[0]; + t1[1] = p1[1]; + t1[2] = p1[2]; + t1[3] = p1[3]; + + t2[0] = p2[0]; + t2[1] = p2[1]; + t2[2] = p2[2]; + t2[3] = p2[3]; + + t3[0] = pMid1[0]; + t3[1] = pMid1[1]; + t3[2] = pMid1[2]; + t3[3] = pMid1[3]; + + t4[0] = pMid2[0]; + t4[1] = pMid2[1]; + t4[2] = pMid2[2]; + t4[3] = pMid2[3]; + + *p1++ = t1[0] + t2[0]; + *p1++ = t1[1] + t2[1]; + *p1++ = t1[2] + t2[2]; + *p1++ = t1[3] + t2[3]; // col 1 + + t2[0] = t1[0] - t2[0]; + t2[1] = t1[1] - t2[1]; + t2[2] = t1[2] - t2[2]; + t2[3] = t1[3] - t2[3]; // for col 2 + + *pMid1++ = t3[0] + t4[0]; + *pMid1++ = t3[1] + t4[1]; + *pMid1++ = t3[2] + t4[2]; + *pMid1++ = t3[3] + t4[3]; // col 1 + + t4[0] = t4[0] - t3[0]; + t4[1] = t4[1] - t3[1]; + t4[2] = t4[2] - t3[2]; + t4[3] = t4[3] - t3[3]; // for col 2 + + twR = *tw++; + twI = *tw++; + + // multiply by twiddle factors + m0 = t2[0] * twR; + m1 = t2[1] * twI; + m2 = t2[1] * twR; + m3 = t2[0] * twI; + + // R = R * Tr - I * Ti + *p2++ = m0 + m1; + // I = I * Tr + R * Ti + *p2++ = m2 - m3; + + // use vertical symmetry + // 0.9988 - 0.0491i <==> -0.0491 - 0.9988i + m0 = t4[0] * twI; + m1 = t4[1] * twR; + m2 = t4[1] * twI; + m3 = t4[0] * twR; + + *pMid2++ = m0 - m1; + *pMid2++ = m2 + m3; + + twR = *tw++; + twI = *tw++; + + m0 = t2[2] * twR; + m1 = t2[3] * twI; + m2 = t2[3] * twR; + m3 = t2[2] * twI; + + *p2++ = m0 + m1; + *p2++ = m2 - m3; + + m0 = t4[2] * twI; + m1 = t4[3] * twR; + m2 = t4[3] * twI; + m3 = t4[2] * twR; + + *pMid2++ = m0 - m1; + *pMid2++ = m2 + m3; + } + + // first col + arm_radix8_butterfly_f32( pCol1, L, (float32_t *) S->pTwiddle, 2u); + // second col + arm_radix8_butterfly_f32( pCol2, L, (float32_t *) S->pTwiddle, 2u); +} + +void arm_cfft_radix8by4_f32( arm_cfft_instance_f32 * S, float32_t * p1) +{ + uint32_t L = S->fftLen >> 1; + float32_t * pCol1, *pCol2, *pCol3, *pCol4, *pEnd1, *pEnd2, *pEnd3, *pEnd4; + const float32_t *tw2, *tw3, *tw4; + float32_t * p2 = p1 + L; + float32_t * p3 = p2 + L; + float32_t * p4 = p3 + L; + float32_t t2[4], t3[4], t4[4], twR, twI; + float32_t p1ap3_0, p1sp3_0, p1ap3_1, p1sp3_1; + float32_t m0, m1, m2, m3; + uint32_t l, twMod2, twMod3, twMod4; + + pCol1 = p1; // points to real values by default + pCol2 = p2; + pCol3 = p3; + pCol4 = p4; + pEnd1 = p2 - 1; // points to imaginary values by default + pEnd2 = p3 - 1; + pEnd3 = p4 - 1; + pEnd4 = pEnd3 + L; + + tw2 = tw3 = tw4 = (float32_t *) S->pTwiddle; + + L >>= 1; + + // do four dot Fourier transform + + twMod2 = 2; + twMod3 = 4; + twMod4 = 6; + + // TOP + p1ap3_0 = p1[0] + p3[0]; + p1sp3_0 = p1[0] - p3[0]; + p1ap3_1 = p1[1] + p3[1]; + p1sp3_1 = p1[1] - p3[1]; + + // col 2 + t2[0] = p1sp3_0 + p2[1] - p4[1]; + t2[1] = p1sp3_1 - p2[0] + p4[0]; + // col 3 + t3[0] = p1ap3_0 - p2[0] - p4[0]; + t3[1] = p1ap3_1 - p2[1] - p4[1]; + // col 4 + t4[0] = p1sp3_0 - p2[1] + p4[1]; + t4[1] = p1sp3_1 + p2[0] - p4[0]; + // col 1 + *p1++ = p1ap3_0 + p2[0] + p4[0]; + *p1++ = p1ap3_1 + p2[1] + p4[1]; + + // Twiddle factors are ones + *p2++ = t2[0]; + *p2++ = t2[1]; + *p3++ = t3[0]; + *p3++ = t3[1]; + *p4++ = t4[0]; + *p4++ = t4[1]; + + tw2 += twMod2; + tw3 += twMod3; + tw4 += twMod4; + + for (l = (L - 2) >> 1; l > 0; l-- ) + { + // TOP + p1ap3_0 = p1[0] + p3[0]; + p1sp3_0 = p1[0] - p3[0]; + p1ap3_1 = p1[1] + p3[1]; + p1sp3_1 = p1[1] - p3[1]; + // col 2 + t2[0] = p1sp3_0 + p2[1] - p4[1]; + t2[1] = p1sp3_1 - p2[0] + p4[0]; + // col 3 + t3[0] = p1ap3_0 - p2[0] - p4[0]; + t3[1] = p1ap3_1 - p2[1] - p4[1]; + // col 4 + t4[0] = p1sp3_0 - p2[1] + p4[1]; + t4[1] = p1sp3_1 + p2[0] - p4[0]; + // col 1 - top + *p1++ = p1ap3_0 + p2[0] + p4[0]; + *p1++ = p1ap3_1 + p2[1] + p4[1]; + + // BOTTOM + p1ap3_1 = pEnd1[-1] + pEnd3[-1]; + p1sp3_1 = pEnd1[-1] - pEnd3[-1]; + p1ap3_0 = pEnd1[0] + pEnd3[0]; + p1sp3_0 = pEnd1[0] - pEnd3[0]; + // col 2 + t2[2] = pEnd2[0] - pEnd4[0] + p1sp3_1; + t2[3] = pEnd1[0] - pEnd3[0] - pEnd2[-1] + pEnd4[-1]; + // col 3 + t3[2] = p1ap3_1 - pEnd2[-1] - pEnd4[-1]; + t3[3] = p1ap3_0 - pEnd2[0] - pEnd4[0]; + // col 4 + t4[2] = pEnd2[0] - pEnd4[0] - p1sp3_1; + t4[3] = pEnd4[-1] - pEnd2[-1] - p1sp3_0; + // col 1 - Bottom + *pEnd1-- = p1ap3_0 + pEnd2[0] + pEnd4[0]; + *pEnd1-- = p1ap3_1 + pEnd2[-1] + pEnd4[-1]; + + // COL 2 + // read twiddle factors + twR = *tw2++; + twI = *tw2++; + // multiply by twiddle factors + // let Z1 = a + i(b), Z2 = c + i(d) + // => Z1 * Z2 = (a*c - b*d) + i(b*c + a*d) + + // Top + m0 = t2[0] * twR; + m1 = t2[1] * twI; + m2 = t2[1] * twR; + m3 = t2[0] * twI; + + *p2++ = m0 + m1; + *p2++ = m2 - m3; + // use vertical symmetry col 2 + // 0.9997 - 0.0245i <==> 0.0245 - 0.9997i + // Bottom + m0 = t2[3] * twI; + m1 = t2[2] * twR; + m2 = t2[2] * twI; + m3 = t2[3] * twR; + + *pEnd2-- = m0 - m1; + *pEnd2-- = m2 + m3; + + // COL 3 + twR = tw3[0]; + twI = tw3[1]; + tw3 += twMod3; + // Top + m0 = t3[0] * twR; + m1 = t3[1] * twI; + m2 = t3[1] * twR; + m3 = t3[0] * twI; + + *p3++ = m0 + m1; + *p3++ = m2 - m3; + // use vertical symmetry col 3 + // 0.9988 - 0.0491i <==> -0.9988 - 0.0491i + // Bottom + m0 = -t3[3] * twR; + m1 = t3[2] * twI; + m2 = t3[2] * twR; + m3 = t3[3] * twI; + + *pEnd3-- = m0 - m1; + *pEnd3-- = m3 - m2; + + // COL 4 + twR = tw4[0]; + twI = tw4[1]; + tw4 += twMod4; + // Top + m0 = t4[0] * twR; + m1 = t4[1] * twI; + m2 = t4[1] * twR; + m3 = t4[0] * twI; + + *p4++ = m0 + m1; + *p4++ = m2 - m3; + // use vertical symmetry col 4 + // 0.9973 - 0.0736i <==> -0.0736 + 0.9973i + // Bottom + m0 = t4[3] * twI; + m1 = t4[2] * twR; + m2 = t4[2] * twI; + m3 = t4[3] * twR; + + *pEnd4-- = m0 - m1; + *pEnd4-- = m2 + m3; + } + + //MIDDLE + // Twiddle factors are + // 1.0000 0.7071-0.7071i -1.0000i -0.7071-0.7071i + p1ap3_0 = p1[0] + p3[0]; + p1sp3_0 = p1[0] - p3[0]; + p1ap3_1 = p1[1] + p3[1]; + p1sp3_1 = p1[1] - p3[1]; + + // col 2 + t2[0] = p1sp3_0 + p2[1] - p4[1]; + t2[1] = p1sp3_1 - p2[0] + p4[0]; + // col 3 + t3[0] = p1ap3_0 - p2[0] - p4[0]; + t3[1] = p1ap3_1 - p2[1] - p4[1]; + // col 4 + t4[0] = p1sp3_0 - p2[1] + p4[1]; + t4[1] = p1sp3_1 + p2[0] - p4[0]; + // col 1 - Top + *p1++ = p1ap3_0 + p2[0] + p4[0]; + *p1++ = p1ap3_1 + p2[1] + p4[1]; + + // COL 2 + twR = tw2[0]; + twI = tw2[1]; + + m0 = t2[0] * twR; + m1 = t2[1] * twI; + m2 = t2[1] * twR; + m3 = t2[0] * twI; + + *p2++ = m0 + m1; + *p2++ = m2 - m3; + // COL 3 + twR = tw3[0]; + twI = tw3[1]; + + m0 = t3[0] * twR; + m1 = t3[1] * twI; + m2 = t3[1] * twR; + m3 = t3[0] * twI; + + *p3++ = m0 + m1; + *p3++ = m2 - m3; + // COL 4 + twR = tw4[0]; + twI = tw4[1]; + + m0 = t4[0] * twR; + m1 = t4[1] * twI; + m2 = t4[1] * twR; + m3 = t4[0] * twI; + + *p4++ = m0 + m1; + *p4++ = m2 - m3; + + // first col + arm_radix8_butterfly_f32( pCol1, L, (float32_t *) S->pTwiddle, 4u); + // second col + arm_radix8_butterfly_f32( pCol2, L, (float32_t *) S->pTwiddle, 4u); + // third col + arm_radix8_butterfly_f32( pCol3, L, (float32_t *) S->pTwiddle, 4u); + // fourth col + arm_radix8_butterfly_f32( pCol4, L, (float32_t *) S->pTwiddle, 4u); +} + +/** +* @addtogroup ComplexFFT +* @{ +*/ + +/** +* @details +* @brief Processing function for the floating-point complex FFT. +* @param[in] *S points to an instance of the floating-point CFFT structure. +* @param[in, out] *p1 points to the complex data buffer of size 2*fftLen. Processing occurs in-place. +* @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return none. +*/ + +void arm_cfft_f32( + const arm_cfft_instance_f32 * S, + float32_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + uint32_t L = S->fftLen, l; + float32_t invL, * pSrc; + + if(ifftFlag == 1u) + { + /* Conjugate input data */ + pSrc = p1 + 1; + for(l=0; lpTwiddle, 1); + break; + } + + if( bitReverseFlag ) + arm_bitreversal_32((uint32_t*)p1,S->bitRevLength,S->pBitRevTable); + + if(ifftFlag == 1u) + { + invL = 1.0f/(float32_t)L; + /* Conjugate and scale output data */ + pSrc = p1; + for(l=0; l2*fftLen. Processing occurs in-place. +* @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return none. +*/ + +void arm_cfft_q15( + const arm_cfft_instance_q15 * S, + q15_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + uint32_t L = S->fftLen; + + if(ifftFlag == 1u) + { + switch (L) + { + case 16: + case 64: + case 256: + case 1024: + case 4096: + arm_radix4_butterfly_inverse_q15 ( p1, L, (q15_t*)S->pTwiddle, 1 ); + break; + + case 32: + case 128: + case 512: + case 2048: + arm_cfft_radix4by2_inverse_q15 ( p1, L, S->pTwiddle ); + break; + } + } + else + { + switch (L) + { + case 16: + case 64: + case 256: + case 1024: + case 4096: + arm_radix4_butterfly_q15 ( p1, L, (q15_t*)S->pTwiddle, 1 ); + break; + + case 32: + case 128: + case 512: + case 2048: + arm_cfft_radix4by2_q15 ( p1, L, S->pTwiddle ); + break; + } + } + + if( bitReverseFlag ) + arm_bitreversal_16((uint16_t*)p1,S->bitRevLength,S->pBitRevTable); +} + +/** +* @} end of ComplexFFT group +*/ + +void arm_cfft_radix4by2_q15( + q15_t * pSrc, + uint32_t fftLen, + const q15_t * pCoef) +{ + uint32_t i; + uint32_t n2; + q15_t p0, p1, p2, p3; +#ifndef ARM_MATH_CM0_FAMILY + q31_t T, S, R; + q31_t coeff, out1, out2; + const q15_t *pC = pCoef; + q15_t *pSi = pSrc; + q15_t *pSl = pSrc + fftLen; +#else + uint32_t ia, l; + q15_t xt, yt, cosVal, sinVal; +#endif + + n2 = fftLen >> 1; + +#ifndef ARM_MATH_CM0_FAMILY + + for (i = n2; i > 0; i--) + { + coeff = _SIMD32_OFFSET(pC); + pC += 2; + + T = _SIMD32_OFFSET(pSi); + T = __SHADD16(T, 0); // this is just a SIMD arithmetic shift right by 1 + + S = _SIMD32_OFFSET(pSl); + S = __SHADD16(S, 0); // this is just a SIMD arithmetic shift right by 1 + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSi) = __SHADD16(T, S); + pSi += 2; + + #ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUAD(coeff, R) >> 16; + out2 = __SMUSDX(coeff, R); + + #else + + out1 = __SMUSDX(R, coeff) >> 16u; + out2 = __SMUAD(coeff, R); + + #endif // #ifndef ARM_MATH_BIG_ENDIAN + + _SIMD32_OFFSET(pSl) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSl += 2; + } + +#else // #ifndef ARM_MATH_CM0_FAMILY + + ia = 0; + for (i = 0; i < n2; i++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia++; + + l = i + n2; + + xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u); + pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u; + + yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u); + pSrc[2 * i + 1] = + ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u; + + pSrc[2u * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16)) + + ((int16_t) (((q31_t) yt * sinVal) >> 16))); + + pSrc[2u * l + 1u] = (((int16_t) (((q31_t) yt * cosVal) >> 16)) - + ((int16_t) (((q31_t) xt * sinVal) >> 16))); + } + +#endif // #ifndef ARM_MATH_CM0_FAMILY + + // first col + arm_radix4_butterfly_q15( pSrc, n2, (q15_t*)pCoef, 2u); + // second col + arm_radix4_butterfly_q15( pSrc + fftLen, n2, (q15_t*)pCoef, 2u); + + for (i = 0; i < fftLen >> 1; i++) + { + p0 = pSrc[4*i+0]; + p1 = pSrc[4*i+1]; + p2 = pSrc[4*i+2]; + p3 = pSrc[4*i+3]; + + p0 <<= 1; + p1 <<= 1; + p2 <<= 1; + p3 <<= 1; + + pSrc[4*i+0] = p0; + pSrc[4*i+1] = p1; + pSrc[4*i+2] = p2; + pSrc[4*i+3] = p3; + } +} + +void arm_cfft_radix4by2_inverse_q15( + q15_t * pSrc, + uint32_t fftLen, + const q15_t * pCoef) +{ + uint32_t i; + uint32_t n2; + q15_t p0, p1, p2, p3; +#ifndef ARM_MATH_CM0_FAMILY + q31_t T, S, R; + q31_t coeff, out1, out2; + const q15_t *pC = pCoef; + q15_t *pSi = pSrc; + q15_t *pSl = pSrc + fftLen; +#else + uint32_t ia, l; + q15_t xt, yt, cosVal, sinVal; +#endif + + n2 = fftLen >> 1; + +#ifndef ARM_MATH_CM0_FAMILY + + for (i = n2; i > 0; i--) + { + coeff = _SIMD32_OFFSET(pC); + pC += 2; + + T = _SIMD32_OFFSET(pSi); + T = __SHADD16(T, 0); // this is just a SIMD arithmetic shift right by 1 + + S = _SIMD32_OFFSET(pSl); + S = __SHADD16(S, 0); // this is just a SIMD arithmetic shift right by 1 + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSi) = __SHADD16(T, S); + pSi += 2; + + #ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUSD(coeff, R) >> 16; + out2 = __SMUADX(coeff, R); + #else + + out1 = __SMUADX(R, coeff) >> 16u; + out2 = __SMUSD(__QSUB(0, coeff), R); + + #endif // #ifndef ARM_MATH_BIG_ENDIAN + + _SIMD32_OFFSET(pSl) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSl += 2; + } + +#else // #ifndef ARM_MATH_CM0_FAMILY + + ia = 0; + for (i = 0; i < n2; i++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia++; + + l = i + n2; + xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u); + pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u; + + yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u); + pSrc[2 * i + 1] = + ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u; + + pSrc[2u * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16)) - + ((int16_t) (((q31_t) yt * sinVal) >> 16))); + + pSrc[2u * l + 1u] = (((int16_t) (((q31_t) yt * cosVal) >> 16)) + + ((int16_t) (((q31_t) xt * sinVal) >> 16))); + } + +#endif // #ifndef ARM_MATH_CM0_FAMILY + + // first col + arm_radix4_butterfly_inverse_q15( pSrc, n2, (q15_t*)pCoef, 2u); + // second col + arm_radix4_butterfly_inverse_q15( pSrc + fftLen, n2, (q15_t*)pCoef, 2u); + + for (i = 0; i < fftLen >> 1; i++) + { + p0 = pSrc[4*i+0]; + p1 = pSrc[4*i+1]; + p2 = pSrc[4*i+2]; + p3 = pSrc[4*i+3]; + + p0 <<= 1; + p1 <<= 1; + p2 <<= 1; + p3 <<= 1; + + pSrc[4*i+0] = p0; + pSrc[4*i+1] = p1; + pSrc[4*i+2] = p2; + pSrc[4*i+3] = p3; + } +} + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,264 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_q31.c +* +* Description: Combined Radix Decimation in Frequency CFFT fixed point processing function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +extern void arm_radix4_butterfly_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pCoef, + uint32_t twidCoefModifier); + +extern void arm_radix4_butterfly_inverse_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pCoef, + uint32_t twidCoefModifier); + +extern void arm_bitreversal_32( + uint32_t * pSrc, + const uint16_t bitRevLen, + const uint16_t * pBitRevTable); + +void arm_cfft_radix4by2_q31( + q31_t * pSrc, + uint32_t fftLen, + const q31_t * pCoef); + +void arm_cfft_radix4by2_inverse_q31( + q31_t * pSrc, + uint32_t fftLen, + const q31_t * pCoef); + +/** +* @ingroup groupTransforms +*/ + +/** +* @addtogroup ComplexFFT +* @{ +*/ + +/** +* @details +* @brief Processing function for the fixed-point complex FFT in Q31 format. +* @param[in] *S points to an instance of the fixed-point CFFT structure. +* @param[in, out] *p1 points to the complex data buffer of size 2*fftLen. Processing occurs in-place. +* @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return none. +*/ + +void arm_cfft_q31( + const arm_cfft_instance_q31 * S, + q31_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + uint32_t L = S->fftLen; + + if(ifftFlag == 1u) + { + switch (L) + { + case 16: + case 64: + case 256: + case 1024: + case 4096: + arm_radix4_butterfly_inverse_q31 ( p1, L, (q31_t*)S->pTwiddle, 1 ); + break; + + case 32: + case 128: + case 512: + case 2048: + arm_cfft_radix4by2_inverse_q31 ( p1, L, S->pTwiddle ); + break; + } + } + else + { + switch (L) + { + case 16: + case 64: + case 256: + case 1024: + case 4096: + arm_radix4_butterfly_q31 ( p1, L, (q31_t*)S->pTwiddle, 1 ); + break; + + case 32: + case 128: + case 512: + case 2048: + arm_cfft_radix4by2_q31 ( p1, L, S->pTwiddle ); + break; + } + } + + if( bitReverseFlag ) + arm_bitreversal_32((uint32_t*)p1,S->bitRevLength,S->pBitRevTable); +} + +/** +* @} end of ComplexFFT group +*/ + +void arm_cfft_radix4by2_q31( + q31_t * pSrc, + uint32_t fftLen, + const q31_t * pCoef) +{ + uint32_t i, l; + uint32_t n2, ia; + q31_t xt, yt, cosVal, sinVal; + q31_t p0, p1; + + n2 = fftLen >> 1; + ia = 0; + for (i = 0; i < n2; i++) + { + cosVal = pCoef[2*ia]; + sinVal = pCoef[2*ia + 1]; + ia++; + + l = i + n2; + xt = (pSrc[2 * i] >> 2) - (pSrc[2 * l] >> 2); + pSrc[2 * i] = (pSrc[2 * i] >> 2) + (pSrc[2 * l] >> 2); + + yt = (pSrc[2 * i + 1] >> 2) - (pSrc[2 * l + 1] >> 2); + pSrc[2 * i + 1] = (pSrc[2 * l + 1] >> 2) + (pSrc[2 * i + 1] >> 2); + + mult_32x32_keep32_R(p0, xt, cosVal); + mult_32x32_keep32_R(p1, yt, cosVal); + multAcc_32x32_keep32_R(p0, yt, sinVal); + multSub_32x32_keep32_R(p1, xt, sinVal); + + pSrc[2u * l] = p0 << 1; + pSrc[2u * l + 1u] = p1 << 1; + + } + + // first col + arm_radix4_butterfly_q31( pSrc, n2, (q31_t*)pCoef, 2u); + // second col + arm_radix4_butterfly_q31( pSrc + fftLen, n2, (q31_t*)pCoef, 2u); + + for (i = 0; i < fftLen >> 1; i++) + { + p0 = pSrc[4*i+0]; + p1 = pSrc[4*i+1]; + xt = pSrc[4*i+2]; + yt = pSrc[4*i+3]; + + p0 <<= 1; + p1 <<= 1; + xt <<= 1; + yt <<= 1; + + pSrc[4*i+0] = p0; + pSrc[4*i+1] = p1; + pSrc[4*i+2] = xt; + pSrc[4*i+3] = yt; + } + +} + +void arm_cfft_radix4by2_inverse_q31( + q31_t * pSrc, + uint32_t fftLen, + const q31_t * pCoef) +{ + uint32_t i, l; + uint32_t n2, ia; + q31_t xt, yt, cosVal, sinVal; + q31_t p0, p1; + + n2 = fftLen >> 1; + ia = 0; + for (i = 0; i < n2; i++) + { + cosVal = pCoef[2*ia]; + sinVal = pCoef[2*ia + 1]; + ia++; + + l = i + n2; + xt = (pSrc[2 * i] >> 2) - (pSrc[2 * l] >> 2); + pSrc[2 * i] = (pSrc[2 * i] >> 2) + (pSrc[2 * l] >> 2); + + yt = (pSrc[2 * i + 1] >> 2) - (pSrc[2 * l + 1] >> 2); + pSrc[2 * i + 1] = (pSrc[2 * l + 1] >> 2) + (pSrc[2 * i + 1] >> 2); + + mult_32x32_keep32_R(p0, xt, cosVal); + mult_32x32_keep32_R(p1, yt, cosVal); + multSub_32x32_keep32_R(p0, yt, sinVal); + multAcc_32x32_keep32_R(p1, xt, sinVal); + + pSrc[2u * l] = p0 << 1; + pSrc[2u * l + 1u] = p1 << 1; + + } + + // first col + arm_radix4_butterfly_inverse_q31( pSrc, n2, (q31_t*)pCoef, 2u); + // second col + arm_radix4_butterfly_inverse_q31( pSrc + fftLen, n2, (q31_t*)pCoef, 2u); + + for (i = 0; i < fftLen >> 1; i++) + { + p0 = pSrc[4*i+0]; + p1 = pSrc[4*i+1]; + xt = pSrc[4*i+2]; + yt = pSrc[4*i+3]; + + p0 <<= 1; + p1 <<= 1; + xt <<= 1; + yt <<= 1; + + pSrc[4*i+0] = p0; + pSrc[4*i+1] = p1; + pSrc[4*i+2] = xt; + pSrc[4*i+3] = yt; + } +} + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,485 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix2_f32.c +* +* Description: Radix-2 Decimation in Frequency CFFT & CIFFT Floating point processing function +* +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +void arm_radix2_butterfly_f32( + float32_t * pSrc, + uint32_t fftLen, + float32_t * pCoef, + uint16_t twidCoefModifier); + +void arm_radix2_butterfly_inverse_f32( + float32_t * pSrc, + uint32_t fftLen, + float32_t * pCoef, + uint16_t twidCoefModifier, + float32_t onebyfftLen); + +extern void arm_bitreversal_f32( + float32_t * pSrc, + uint16_t fftSize, + uint16_t bitRevFactor, + uint16_t * pBitRevTab); + +/** +* @ingroup groupTransforms +*/ + +/** +* @addtogroup ComplexFFT +* @{ +*/ + +/** +* @details +* @brief Radix-2 CFFT/CIFFT. +* @deprecated Do not use this function. It has been superseded by \ref arm_cfft_f32 and will be removed +* in the future. +* @param[in] *S points to an instance of the floating-point Radix-2 CFFT/CIFFT structure. +* @param[in, out] *pSrc points to the complex data buffer of size 2*fftLen. Processing occurs in-place. +* @return none. +*/ + +void arm_cfft_radix2_f32( +const arm_cfft_radix2_instance_f32 * S, +float32_t * pSrc) +{ + + if(S->ifftFlag == 1u) + { + /* Complex IFFT radix-2 */ + arm_radix2_butterfly_inverse_f32(pSrc, S->fftLen, S->pTwiddle, + S->twidCoefModifier, S->onebyfftLen); + } + else + { + /* Complex FFT radix-2 */ + arm_radix2_butterfly_f32(pSrc, S->fftLen, S->pTwiddle, + S->twidCoefModifier); + } + + if(S->bitReverseFlag == 1u) + { + /* Bit Reversal */ + arm_bitreversal_f32(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable); + } + +} + + +/** +* @} end of ComplexFFT group +*/ + + + +/* ---------------------------------------------------------------------- +** Internal helper function used by the FFTs +** ------------------------------------------------------------------- */ + +/* +* @brief Core function for the floating-point CFFT butterfly process. +* @param[in, out] *pSrc points to the in-place buffer of floating-point data type. +* @param[in] fftLen length of the FFT. +* @param[in] *pCoef points to the twiddle coefficient buffer. +* @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. +* @return none. +*/ + +void arm_radix2_butterfly_f32( +float32_t * pSrc, +uint32_t fftLen, +float32_t * pCoef, +uint16_t twidCoefModifier) +{ + + uint32_t i, j, k, l; + uint32_t n1, n2, ia; + float32_t xt, yt, cosVal, sinVal; + float32_t p0, p1, p2, p3; + float32_t a0, a1; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Initializations for the first stage */ + n2 = fftLen >> 1; + ia = 0; + i = 0; + + // loop for groups + for (k = n2; k > 0; k--) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + + /* Twiddle coefficients index modifier */ + ia += twidCoefModifier; + + /* index calculation for the input as, */ + /* pSrc[i + 0], pSrc[i + fftLen/1] */ + l = i + n2; + + /* Butterfly implementation */ + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 + p1; + pSrc[2 * l + 1] = p2 - p3; + + i++; + } // groups loop end + + twidCoefModifier <<= 1u; + + // loop for stage + for (k = n2; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + j = 0; + do + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia += twidCoefModifier; + + // loop for butterfly + i = j; + do + { + l = i + n2; + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 + p1; + pSrc[2 * l + 1] = p2 - p3; + + i += n1; + } while( i < fftLen ); // butterfly loop end + j++; + } while( j < n2); // groups loop end + twidCoefModifier <<= 1u; + } // stages loop end + + // loop for butterfly + for (i = 0; i < fftLen; i += 2) + { + a0 = pSrc[2 * i] + pSrc[2 * i + 2]; + xt = pSrc[2 * i] - pSrc[2 * i + 2]; + + yt = pSrc[2 * i + 1] - pSrc[2 * i + 3]; + a1 = pSrc[2 * i + 3] + pSrc[2 * i + 1]; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + pSrc[2 * i + 2] = xt; + pSrc[2 * i + 3] = yt; + } // groups loop end + +#else + + n2 = fftLen; + + // loop for stage + for (k = fftLen; k > 1; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + j = 0; + do + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia += twidCoefModifier; + + // loop for butterfly + i = j; + do + { + l = i + n2; + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 + p1; + pSrc[2 * l + 1] = p2 - p3; + + i += n1; + } while(i < fftLen); + j++; + } while(j < n2); + twidCoefModifier <<= 1u; + } + +#endif // #ifndef ARM_MATH_CM0_FAMILY + +} + + +void arm_radix2_butterfly_inverse_f32( +float32_t * pSrc, +uint32_t fftLen, +float32_t * pCoef, +uint16_t twidCoefModifier, +float32_t onebyfftLen) +{ + + uint32_t i, j, k, l; + uint32_t n1, n2, ia; + float32_t xt, yt, cosVal, sinVal; + float32_t p0, p1, p2, p3; + float32_t a0, a1; + +#ifndef ARM_MATH_CM0_FAMILY + + n2 = fftLen >> 1; + ia = 0; + + // loop for groups + for (i = 0; i < n2; i++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia += twidCoefModifier; + + l = i + n2; + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 - p1; + pSrc[2 * l + 1] = p2 + p3; + } // groups loop end + + twidCoefModifier <<= 1u; + + // loop for stage + for (k = fftLen / 2; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + j = 0; + do + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia += twidCoefModifier; + + // loop for butterfly + i = j; + do + { + l = i + n2; + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 - p1; + pSrc[2 * l + 1] = p2 + p3; + + i += n1; + } while( i < fftLen ); // butterfly loop end + j++; + } while(j < n2); // groups loop end + + twidCoefModifier <<= 1u; + } // stages loop end + + // loop for butterfly + for (i = 0; i < fftLen; i += 2) + { + a0 = pSrc[2 * i] + pSrc[2 * i + 2]; + xt = pSrc[2 * i] - pSrc[2 * i + 2]; + + a1 = pSrc[2 * i + 3] + pSrc[2 * i + 1]; + yt = pSrc[2 * i + 1] - pSrc[2 * i + 3]; + + p0 = a0 * onebyfftLen; + p2 = xt * onebyfftLen; + p1 = a1 * onebyfftLen; + p3 = yt * onebyfftLen; + + pSrc[2 * i] = p0; + pSrc[2 * i + 1] = p1; + pSrc[2 * i + 2] = p2; + pSrc[2 * i + 3] = p3; + } // butterfly loop end + +#else + + n2 = fftLen; + + // loop for stage + for (k = fftLen; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + j = 0; + do + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + // loop for butterfly + i = j; + do + { + l = i + n2; + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 - p1; + pSrc[2 * l + 1] = p2 + p3; + + i += n1; + } while( i < fftLen ); // butterfly loop end + j++; + } while( j < n2 ); // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + } // stages loop end + + n1 = n2; + n2 = n2 >> 1; + + // loop for butterfly + for (i = 0; i < fftLen; i += n1) + { + l = i + n2; + + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + + p0 = a0 * onebyfftLen; + p2 = xt * onebyfftLen; + p1 = a1 * onebyfftLen; + p3 = yt * onebyfftLen; + + pSrc[2 * i] = p0; + pSrc[2u * l] = p2; + + pSrc[2 * i + 1] = p1; + pSrc[2u * l + 1u] = p3; + } // butterfly loop end + +#endif // #ifndef ARM_MATH_CM0_FAMILY + +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,205 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix4_init_f32.c +* +* Description: Radix-4 Decimation in Frequency Floating-point CFFT & CIFFT Initialization function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup ComplexFFT + * @{ + */ + +/** +* @brief Initialization function for the floating-point CFFT/CIFFT. +* @deprecated Do not use this function. It has been superseded by \ref arm_cfft_f32 and will be removed +* in the future. +* @param[in,out] *S points to an instance of the floating-point CFFT/CIFFT structure. +* @param[in] fftLen length of the FFT. +* @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLen is not a supported value. +* +* \par Description: +* \par +* The parameter ifftFlag controls whether a forward or inverse transform is computed. +* Set(=1) ifftFlag for calculation of CIFFT otherwise CFFT is calculated +* \par +* The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. +* Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. +* \par +* The parameter fftLen Specifies length of CFFT/CIFFT process. Supported FFT Lengths are 16, 64, 256, 1024. +* \par +* This Function also initializes Twiddle factor table pointer and Bit reversal table pointer. +*/ +arm_status arm_cfft_radix2_init_f32( + arm_cfft_radix2_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialise the FFT length */ + S->fftLen = fftLen; + + /* Initialise the Twiddle coefficient pointer */ + S->pTwiddle = (float32_t *) twiddleCoef; + + /* Initialise the Flag for selection of CFFT or CIFFT */ + S->ifftFlag = ifftFlag; + + /* Initialise the Flag for calculation Bit reversal or not */ + S->bitReverseFlag = bitReverseFlag; + + /* Initializations of structure parameters depending on the FFT length */ + switch (S->fftLen) + { + + case 4096u: + /* Initializations of structure parameters for 4096 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 1u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 1u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) armBitRevTable; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.000244140625; + break; + + case 2048u: + /* Initializations of structure parameters for 2048 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 2u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 2u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[1]; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.00048828125; + break; + + case 1024u: + /* Initializations of structure parameters for 1024 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 4u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 4u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[3]; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.0009765625f; + break; + + case 512u: + /* Initializations of structure parameters for 512 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 8u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 8u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[7]; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.001953125; + break; + + case 256u: + /* Initializations of structure parameters for 256 point FFT */ + S->twidCoefModifier = 16u; + S->bitRevFactor = 16u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[15]; + S->onebyfftLen = 0.00390625f; + break; + + case 128u: + /* Initializations of structure parameters for 128 point FFT */ + S->twidCoefModifier = 32u; + S->bitRevFactor = 32u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[31]; + S->onebyfftLen = 0.0078125; + break; + + case 64u: + /* Initializations of structure parameters for 64 point FFT */ + S->twidCoefModifier = 64u; + S->bitRevFactor = 64u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[63]; + S->onebyfftLen = 0.015625f; + break; + + case 32u: + /* Initializations of structure parameters for 64 point FFT */ + S->twidCoefModifier = 128u; + S->bitRevFactor = 128u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[127]; + S->onebyfftLen = 0.03125; + break; + + case 16u: + /* Initializations of structure parameters for 16 point FFT */ + S->twidCoefModifier = 256u; + S->bitRevFactor = 256u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[255]; + S->onebyfftLen = 0.0625f; + break; + + + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + return (status); +} + +/** + * @} end of ComplexFFT group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,189 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix2_init_q15.c +* +* Description: Radix-2 Decimation in Frequency Q15 FFT & IFFT initialization function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupTransforms + */ + + +/** + * @addtogroup ComplexFFT + * @{ + */ + +/** +* @brief Initialization function for the Q15 CFFT/CIFFT. +* @deprecated Do not use this function. It has been superseded by \ref arm_cfft_q15 and will be removed +* @param[in,out] *S points to an instance of the Q15 CFFT/CIFFT structure. +* @param[in] fftLen length of the FFT. +* @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLen is not a supported value. +* +* \par Description: +* \par +* The parameter ifftFlag controls whether a forward or inverse transform is computed. +* Set(=1) ifftFlag for calculation of CIFFT otherwise CFFT is calculated +* \par +* The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. +* Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. +* \par +* The parameter fftLen Specifies length of CFFT/CIFFT process. Supported FFT Lengths are 16, 64, 256, 1024. +* \par +* This Function also initializes Twiddle factor table pointer and Bit reversal table pointer. +*/ + +arm_status arm_cfft_radix2_init_q15( + arm_cfft_radix2_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialise the FFT length */ + S->fftLen = fftLen; + + /* Initialise the Twiddle coefficient pointer */ + S->pTwiddle = (q15_t *) twiddleCoef_4096_q15; + /* Initialise the Flag for selection of CFFT or CIFFT */ + S->ifftFlag = ifftFlag; + /* Initialise the Flag for calculation Bit reversal or not */ + S->bitReverseFlag = bitReverseFlag; + + /* Initializations of structure parameters depending on the FFT length */ + switch (S->fftLen) + { + case 4096u: + /* Initializations of structure parameters for 4096 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 1u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 1u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) armBitRevTable; + + break; + + case 2048u: + /* Initializations of structure parameters for 2048 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 2u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 2u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[1]; + + break; + + case 1024u: + /* Initializations of structure parameters for 1024 point FFT */ + S->twidCoefModifier = 4u; + S->bitRevFactor = 4u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[3]; + + break; + + case 512u: + /* Initializations of structure parameters for 512 point FFT */ + S->twidCoefModifier = 8u; + S->bitRevFactor = 8u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[7]; + + break; + + case 256u: + /* Initializations of structure parameters for 256 point FFT */ + S->twidCoefModifier = 16u; + S->bitRevFactor = 16u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[15]; + + break; + + case 128u: + /* Initializations of structure parameters for 128 point FFT */ + S->twidCoefModifier = 32u; + S->bitRevFactor = 32u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[31]; + + break; + + case 64u: + /* Initializations of structure parameters for 64 point FFT */ + S->twidCoefModifier = 64u; + S->bitRevFactor = 64u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[63]; + + break; + + case 32u: + /* Initializations of structure parameters for 32 point FFT */ + S->twidCoefModifier = 128u; + S->bitRevFactor = 128u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[127]; + + break; + + case 16u: + /* Initializations of structure parameters for 16 point FFT */ + S->twidCoefModifier = 256u; + S->bitRevFactor = 256u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[255]; + + break; + + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + return (status); +} + +/** + * @} end of ComplexFFT group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,187 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix2_init_q31.c +* +* Description: Radix-2 Decimation in Frequency Fixed-point CFFT & CIFFT Initialization function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup ComplexFFT + * @{ + */ + + +/** +* +* @brief Initialization function for the Q31 CFFT/CIFFT. +* @deprecated Do not use this function. It has been superseded by \ref arm_cfft_q31 and will be removed +* @param[in,out] *S points to an instance of the Q31 CFFT/CIFFT structure. +* @param[in] fftLen length of the FFT. +* @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLen is not a supported value. +* +* \par Description: +* \par +* The parameter ifftFlag controls whether a forward or inverse transform is computed. +* Set(=1) ifftFlag for calculation of CIFFT otherwise CFFT is calculated +* \par +* The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. +* Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. +* \par +* The parameter fftLen Specifies length of CFFT/CIFFT process. Supported FFT Lengths are 16, 64, 256, 1024. +* \par +* This Function also initializes Twiddle factor table pointer and Bit reversal table pointer. +*/ + +arm_status arm_cfft_radix2_init_q31( + arm_cfft_radix2_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialise the FFT length */ + S->fftLen = fftLen; + + /* Initialise the Twiddle coefficient pointer */ + S->pTwiddle = (q31_t *) twiddleCoef_4096_q31; + /* Initialise the Flag for selection of CFFT or CIFFT */ + S->ifftFlag = ifftFlag; + /* Initialise the Flag for calculation Bit reversal or not */ + S->bitReverseFlag = bitReverseFlag; + + /* Initializations of Instance structure depending on the FFT length */ + switch (S->fftLen) + { + /* Initializations of structure parameters for 4096 point FFT */ + case 4096u: + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 1u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 1u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) armBitRevTable; + break; + + /* Initializations of structure parameters for 2048 point FFT */ + case 2048u: + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 2u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 2u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[1]; + break; + + /* Initializations of structure parameters for 1024 point FFT */ + case 1024u: + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 4u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 4u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[3]; + break; + + /* Initializations of structure parameters for 512 point FFT */ + case 512u: + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 8u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 8u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[7]; + break; + + case 256u: + /* Initializations of structure parameters for 256 point FFT */ + S->twidCoefModifier = 16u; + S->bitRevFactor = 16u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[15]; + break; + + case 128u: + /* Initializations of structure parameters for 128 point FFT */ + S->twidCoefModifier = 32u; + S->bitRevFactor = 32u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[31]; + break; + + case 64u: + /* Initializations of structure parameters for 64 point FFT */ + S->twidCoefModifier = 64u; + S->bitRevFactor = 64u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[63]; + break; + + case 32u: + /* Initializations of structure parameters for 32 point FFT */ + S->twidCoefModifier = 128u; + S->bitRevFactor = 128u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[127]; + break; + + case 16u: + /* Initializations of structure parameters for 16 point FFT */ + S->twidCoefModifier = 256u; + S->bitRevFactor = 256u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[255]; + break; + + + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + return (status); +} + +/** + * @} end of ComplexFFT group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,742 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix2_q15.c +* +* Description: Radix-2 Decimation in Frequency CFFT & CIFFT Fixed point processing function +* +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +void arm_radix2_butterfly_q15( + q15_t * pSrc, + uint32_t fftLen, + q15_t * pCoef, + uint16_t twidCoefModifier); + +void arm_radix2_butterfly_inverse_q15( + q15_t * pSrc, + uint32_t fftLen, + q15_t * pCoef, + uint16_t twidCoefModifier); + +void arm_bitreversal_q15( + q15_t * pSrc, + uint32_t fftLen, + uint16_t bitRevFactor, + uint16_t * pBitRevTab); + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup ComplexFFT + * @{ + */ + +/** + * @details + * @brief Processing function for the fixed-point CFFT/CIFFT. + * @deprecated Do not use this function. It has been superseded by \ref arm_cfft_q15 and will be removed + * @param[in] *S points to an instance of the fixed-point CFFT/CIFFT structure. + * @param[in, out] *pSrc points to the complex data buffer of size 2*fftLen. Processing occurs in-place. + * @return none. + */ + +void arm_cfft_radix2_q15( + const arm_cfft_radix2_instance_q15 * S, + q15_t * pSrc) +{ + + if(S->ifftFlag == 1u) + { + arm_radix2_butterfly_inverse_q15(pSrc, S->fftLen, + S->pTwiddle, S->twidCoefModifier); + } + else + { + arm_radix2_butterfly_q15(pSrc, S->fftLen, + S->pTwiddle, S->twidCoefModifier); + } + + arm_bitreversal_q15(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable); +} + +/** + * @} end of ComplexFFT group + */ + +void arm_radix2_butterfly_q15( + q15_t * pSrc, + uint32_t fftLen, + q15_t * pCoef, + uint16_t twidCoefModifier) +{ +#ifndef ARM_MATH_CM0_FAMILY + + unsigned i, j, k, l; + unsigned n1, n2, ia; + q15_t in; + q31_t T, S, R; + q31_t coeff, out1, out2; + + //N = fftLen; + n2 = fftLen; + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (i = 0; i < n2; i++) + { + coeff = _SIMD32_OFFSET(pCoef + (ia * 2u)); + + ia = ia + twidCoefModifier; + + l = i + n2; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + in = ((int16_t) (T & 0xFFFF)) >> 1; + T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + in = ((int16_t) (S & 0xFFFF)) >> 1; + S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __SHADD16(T, S); + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUAD(coeff, R) >> 16; + out2 = __SMUSDX(coeff, R); + +#else + + out1 = __SMUSDX(R, coeff) >> 16u; + out2 = __SMUAD(coeff, R); + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + _SIMD32_OFFSET(pSrc + (2u * l)) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + + coeff = _SIMD32_OFFSET(pCoef + (ia * 2u)); + + ia = ia + twidCoefModifier; + + // loop for butterfly + i++; + l++; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + in = ((int16_t) (T & 0xFFFF)) >> 1; + T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + in = ((int16_t) (S & 0xFFFF)) >> 1; + S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __SHADD16(T, S); + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUAD(coeff, R) >> 16; + out2 = __SMUSDX(coeff, R); + +#else + + out1 = __SMUSDX(R, coeff) >> 16u; + out2 = __SMUAD(coeff, R); + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + _SIMD32_OFFSET(pSrc + (2u * l)) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + + // loop for stage + for (k = fftLen / 2; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (j = 0; j < n2; j++) + { + coeff = _SIMD32_OFFSET(pCoef + (ia * 2u)); + + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = j; i < fftLen; i += n1) + { + l = i + n2; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __SHADD16(T, S); + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUAD(coeff, R) >> 16; + out2 = __SMUSDX(coeff, R); + +#else + + out1 = __SMUSDX(R, coeff) >> 16u; + out2 = __SMUAD(coeff, R); + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + _SIMD32_OFFSET(pSrc + (2u * l)) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + + i += n1; + + l = i + n2; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __SHADD16(T, S); + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUAD(coeff, R) >> 16; + out2 = __SMUSDX(coeff, R); + +#else + + out1 = __SMUSDX(R, coeff) >> 16u; + out2 = __SMUAD(coeff, R); + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + _SIMD32_OFFSET(pSrc + (2u * l)) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + + } // butterfly loop end + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + } // stages loop end + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + coeff = _SIMD32_OFFSET(pCoef + (ia * 2u)); + + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = 0; i < fftLen; i += n1) + { + l = i + n2; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __QADD16(T, S); + + _SIMD32_OFFSET(pSrc + (2u * l)) = R; + + i += n1; + l = i + n2; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __QADD16(T, S); + + _SIMD32_OFFSET(pSrc + (2u * l)) = R; + + } // groups loop end + + +#else + + unsigned i, j, k, l; + unsigned n1, n2, ia; + q15_t xt, yt, cosVal, sinVal; + + + //N = fftLen; + n2 = fftLen; + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (j = 0; j < n2; j++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = j; i < fftLen; i += n1) + { + l = i + n2; + xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u); + pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u; + + yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u); + pSrc[2 * i + 1] = + ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u; + + pSrc[2u * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16)) + + ((int16_t) (((q31_t) yt * sinVal) >> 16))); + + pSrc[2u * l + 1u] = (((int16_t) (((q31_t) yt * cosVal) >> 16)) - + ((int16_t) (((q31_t) xt * sinVal) >> 16))); + + } // butterfly loop end + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + + // loop for stage + for (k = fftLen / 2; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (j = 0; j < n2; j++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = j; i < fftLen; i += n1) + { + l = i + n2; + xt = pSrc[2 * i] - pSrc[2 * l]; + pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u; + + pSrc[2u * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16)) + + ((int16_t) (((q31_t) yt * sinVal) >> 16))); + + pSrc[2u * l + 1u] = (((int16_t) (((q31_t) yt * cosVal) >> 16)) - + ((int16_t) (((q31_t) xt * sinVal) >> 16))); + + } // butterfly loop end + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + } // stages loop end + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (j = 0; j < n2; j++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = j; i < fftLen; i += n1) + { + l = i + n2; + xt = pSrc[2 * i] - pSrc[2 * l]; + pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]); + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]); + + pSrc[2u * l] = xt; + + pSrc[2u * l + 1u] = yt; + + } // butterfly loop end + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + +#endif // #ifndef ARM_MATH_CM0_FAMILY + +} + + +void arm_radix2_butterfly_inverse_q15( + q15_t * pSrc, + uint32_t fftLen, + q15_t * pCoef, + uint16_t twidCoefModifier) +{ +#ifndef ARM_MATH_CM0_FAMILY + + unsigned i, j, k, l; + unsigned n1, n2, ia; + q15_t in; + q31_t T, S, R; + q31_t coeff, out1, out2; + + //N = fftLen; + n2 = fftLen; + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (i = 0; i < n2; i++) + { + coeff = _SIMD32_OFFSET(pCoef + (ia * 2u)); + + ia = ia + twidCoefModifier; + + l = i + n2; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + in = ((int16_t) (T & 0xFFFF)) >> 1; + T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + in = ((int16_t) (S & 0xFFFF)) >> 1; + S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __SHADD16(T, S); + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUSD(coeff, R) >> 16; + out2 = __SMUADX(coeff, R); +#else + + out1 = __SMUADX(R, coeff) >> 16u; + out2 = __SMUSD(__QSUB(0, coeff), R); + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + _SIMD32_OFFSET(pSrc + (2u * l)) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + + coeff = _SIMD32_OFFSET(pCoef + (ia * 2u)); + + ia = ia + twidCoefModifier; + + // loop for butterfly + i++; + l++; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + in = ((int16_t) (T & 0xFFFF)) >> 1; + T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + in = ((int16_t) (S & 0xFFFF)) >> 1; + S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __SHADD16(T, S); + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUSD(coeff, R) >> 16; + out2 = __SMUADX(coeff, R); +#else + + out1 = __SMUADX(R, coeff) >> 16u; + out2 = __SMUSD(__QSUB(0, coeff), R); + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + _SIMD32_OFFSET(pSrc + (2u * l)) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + + // loop for stage + for (k = fftLen / 2; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (j = 0; j < n2; j++) + { + coeff = _SIMD32_OFFSET(pCoef + (ia * 2u)); + + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = j; i < fftLen; i += n1) + { + l = i + n2; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __SHADD16(T, S); + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUSD(coeff, R) >> 16; + out2 = __SMUADX(coeff, R); + +#else + + out1 = __SMUADX(R, coeff) >> 16u; + out2 = __SMUSD(__QSUB(0, coeff), R); + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + _SIMD32_OFFSET(pSrc + (2u * l)) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + + i += n1; + + l = i + n2; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __SHADD16(T, S); + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUSD(coeff, R) >> 16; + out2 = __SMUADX(coeff, R); +#else + + out1 = __SMUADX(R, coeff) >> 16u; + out2 = __SMUSD(__QSUB(0, coeff), R); + +#endif // #ifndef ARM_MATH_BIG_ENDIAN + + _SIMD32_OFFSET(pSrc + (2u * l)) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + + } // butterfly loop end + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + } // stages loop end + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (j = 0; j < n2; j++) + { + coeff = _SIMD32_OFFSET(pCoef + (ia * 2u)); + + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = j; i < fftLen; i += n1) + { + l = i + n2; + + T = _SIMD32_OFFSET(pSrc + (2 * i)); + + S = _SIMD32_OFFSET(pSrc + (2 * l)); + + R = __QSUB16(T, S); + + _SIMD32_OFFSET(pSrc + (2 * i)) = __QADD16(T, S); + + _SIMD32_OFFSET(pSrc + (2u * l)) = R; + + } // butterfly loop end + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + +#else + + + unsigned i, j, k, l; + unsigned n1, n2, ia; + q15_t xt, yt, cosVal, sinVal; + + //N = fftLen; + n2 = fftLen; + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (j = 0; j < n2; j++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = j; i < fftLen; i += n1) + { + l = i + n2; + xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u); + pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u; + + yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u); + pSrc[2 * i + 1] = + ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u; + + pSrc[2u * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16)) - + ((int16_t) (((q31_t) yt * sinVal) >> 16))); + + pSrc[2u * l + 1u] = (((int16_t) (((q31_t) yt * cosVal) >> 16)) + + ((int16_t) (((q31_t) xt * sinVal) >> 16))); + + } // butterfly loop end + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + + // loop for stage + for (k = fftLen / 2; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (j = 0; j < n2; j++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = j; i < fftLen; i += n1) + { + l = i + n2; + xt = pSrc[2 * i] - pSrc[2 * l]; + pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u; + + pSrc[2u * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16)) - + ((int16_t) (((q31_t) yt * sinVal) >> 16))); + + pSrc[2u * l + 1u] = (((int16_t) (((q31_t) yt * cosVal) >> 16)) + + ((int16_t) (((q31_t) xt * sinVal) >> 16))); + + } // butterfly loop end + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + } // stages loop end + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = 0; i < fftLen; i += n1) + { + l = i + n2; + xt = pSrc[2 * i] - pSrc[2 * l]; + pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]); + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]); + + pSrc[2u * l] = xt; + + pSrc[2u * l + 1u] = yt; + + } // groups loop end + + +#endif // #ifndef ARM_MATH_CM0_FAMILY + +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,351 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix2_q31.c +* +* Description: Radix-2 Decimation in Frequency CFFT & CIFFT Fixed point processing function +* +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +void arm_radix2_butterfly_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pCoef, + uint16_t twidCoefModifier); + +void arm_radix2_butterfly_inverse_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pCoef, + uint16_t twidCoefModifier); + +void arm_bitreversal_q31( + q31_t * pSrc, + uint32_t fftLen, + uint16_t bitRevFactor, + uint16_t * pBitRevTab); + +/** +* @ingroup groupTransforms +*/ + +/** +* @addtogroup ComplexFFT +* @{ +*/ + +/** +* @details +* @brief Processing function for the fixed-point CFFT/CIFFT. +* @deprecated Do not use this function. It has been superseded by \ref arm_cfft_q31 and will be removed +* @param[in] *S points to an instance of the fixed-point CFFT/CIFFT structure. +* @param[in, out] *pSrc points to the complex data buffer of size 2*fftLen. Processing occurs in-place. +* @return none. +*/ + +void arm_cfft_radix2_q31( +const arm_cfft_radix2_instance_q31 * S, +q31_t * pSrc) +{ + + if(S->ifftFlag == 1u) + { + arm_radix2_butterfly_inverse_q31(pSrc, S->fftLen, + S->pTwiddle, S->twidCoefModifier); + } + else + { + arm_radix2_butterfly_q31(pSrc, S->fftLen, + S->pTwiddle, S->twidCoefModifier); + } + + arm_bitreversal_q31(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable); +} + +/** +* @} end of ComplexFFT group +*/ + +void arm_radix2_butterfly_q31( +q31_t * pSrc, +uint32_t fftLen, +q31_t * pCoef, +uint16_t twidCoefModifier) +{ + + unsigned i, j, k, l, m; + unsigned n1, n2, ia; + q31_t xt, yt, cosVal, sinVal; + q31_t p0, p1; + + //N = fftLen; + n2 = fftLen; + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (i = 0; i < n2; i++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + l = i + n2; + xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u); + pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u; + + yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u); + pSrc[2 * i + 1] = + ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u; + + mult_32x32_keep32_R(p0, xt, cosVal); + mult_32x32_keep32_R(p1, yt, cosVal); + multAcc_32x32_keep32_R(p0, yt, sinVal); + multSub_32x32_keep32_R(p1, xt, sinVal); + + pSrc[2u * l] = p0; + pSrc[2u * l + 1u] = p1; + + } // groups loop end + + twidCoefModifier <<= 1u; + + // loop for stage + for (k = fftLen / 2; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (j = 0; j < n2; j++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + // loop for butterfly + i = j; + m = fftLen / n1; + do + { + l = i + n2; + xt = pSrc[2 * i] - pSrc[2 * l]; + pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u; + + mult_32x32_keep32_R(p0, xt, cosVal); + mult_32x32_keep32_R(p1, yt, cosVal); + multAcc_32x32_keep32_R(p0, yt, sinVal); + multSub_32x32_keep32_R(p1, xt, sinVal); + + pSrc[2u * l] = p0; + pSrc[2u * l + 1u] = p1; + i += n1; + m--; + } while( m > 0); // butterfly loop end + + } // groups loop end + + twidCoefModifier <<= 1u; + } // stages loop end + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = 0; i < fftLen; i += n1) + { + l = i + n2; + xt = pSrc[2 * i] - pSrc[2 * l]; + pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]); + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]); + + pSrc[2u * l] = xt; + + pSrc[2u * l + 1u] = yt; + + i += n1; + l = i + n2; + + xt = pSrc[2 * i] - pSrc[2 * l]; + pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]); + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]); + + pSrc[2u * l] = xt; + + pSrc[2u * l + 1u] = yt; + + } // butterfly loop end + +} + + +void arm_radix2_butterfly_inverse_q31( +q31_t * pSrc, +uint32_t fftLen, +q31_t * pCoef, +uint16_t twidCoefModifier) +{ + + unsigned i, j, k, l; + unsigned n1, n2, ia; + q31_t xt, yt, cosVal, sinVal; + q31_t p0, p1; + + //N = fftLen; + n2 = fftLen; + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (i = 0; i < n2; i++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + l = i + n2; + xt = (pSrc[2 * i] >> 1u) - (pSrc[2 * l] >> 1u); + pSrc[2 * i] = ((pSrc[2 * i] >> 1u) + (pSrc[2 * l] >> 1u)) >> 1u; + + yt = (pSrc[2 * i + 1] >> 1u) - (pSrc[2 * l + 1] >> 1u); + pSrc[2 * i + 1] = + ((pSrc[2 * l + 1] >> 1u) + (pSrc[2 * i + 1] >> 1u)) >> 1u; + + mult_32x32_keep32_R(p0, xt, cosVal); + mult_32x32_keep32_R(p1, yt, cosVal); + multSub_32x32_keep32_R(p0, yt, sinVal); + multAcc_32x32_keep32_R(p1, xt, sinVal); + + pSrc[2u * l] = p0; + pSrc[2u * l + 1u] = p1; + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + + // loop for stage + for (k = fftLen / 2; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + for (j = 0; j < n2; j++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = j; i < fftLen; i += n1) + { + l = i + n2; + xt = pSrc[2 * i] - pSrc[2 * l]; + pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u; + + mult_32x32_keep32_R(p0, xt, cosVal); + mult_32x32_keep32_R(p1, yt, cosVal); + multSub_32x32_keep32_R(p0, yt, sinVal); + multAcc_32x32_keep32_R(p1, xt, sinVal); + + pSrc[2u * l] = p0; + pSrc[2u * l + 1u] = p1; + } // butterfly loop end + + } // groups loop end + + twidCoefModifier = twidCoefModifier << 1u; + } // stages loop end + + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + // loop for butterfly + for (i = 0; i < fftLen; i += n1) + { + l = i + n2; + xt = pSrc[2 * i] - pSrc[2 * l]; + pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]); + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]); + + pSrc[2u * l] = xt; + + pSrc[2u * l + 1u] = yt; + + i += n1; + l = i + n2; + + xt = pSrc[2 * i] - pSrc[2 * l]; + pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]); + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]); + + pSrc[2u * l] = xt; + + pSrc[2u * l + 1u] = yt; + + } // butterfly loop end + +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1210 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix4_f32.c +* +* Description: Radix-4 Decimation in Frequency CFFT & CIFFT Floating point processing function +* +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +extern void arm_bitreversal_f32( +float32_t * pSrc, +uint16_t fftSize, +uint16_t bitRevFactor, +uint16_t * pBitRevTab); + +/** +* @ingroup groupTransforms +*/ + +/* ---------------------------------------------------------------------- +** Internal helper function used by the FFTs +** ------------------------------------------------------------------- */ + +/* +* @brief Core function for the floating-point CFFT butterfly process. +* @param[in, out] *pSrc points to the in-place buffer of floating-point data type. +* @param[in] fftLen length of the FFT. +* @param[in] *pCoef points to the twiddle coefficient buffer. +* @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. +* @return none. +*/ + +void arm_radix4_butterfly_f32( +float32_t * pSrc, +uint16_t fftLen, +float32_t * pCoef, +uint16_t twidCoefModifier) +{ + + float32_t co1, co2, co3, si1, si2, si3; + uint32_t ia1, ia2, ia3; + uint32_t i0, i1, i2, i3; + uint32_t n1, n2, j, k; + +#ifndef ARM_MATH_CM0_FAMILY_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + float32_t xaIn, yaIn, xbIn, ybIn, xcIn, ycIn, xdIn, ydIn; + float32_t Xaplusc, Xbplusd, Yaplusc, Ybplusd, Xaminusc, Xbminusd, Yaminusc, + Ybminusd; + float32_t Xb12C_out, Yb12C_out, Xc12C_out, Yc12C_out, Xd12C_out, Yd12C_out; + float32_t Xb12_out, Yb12_out, Xc12_out, Yc12_out, Xd12_out, Yd12_out; + float32_t *ptr1; + float32_t p0,p1,p2,p3,p4,p5; + float32_t a0,a1,a2,a3,a4,a5,a6,a7; + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + + /* n2 = fftLen/4 */ + n2 >>= 2u; + i0 = 0u; + ia1 = 0u; + + j = n2; + + /* Calculation of first stage */ + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + xaIn = pSrc[(2u * i0)]; + yaIn = pSrc[(2u * i0) + 1u]; + + xbIn = pSrc[(2u * i1)]; + ybIn = pSrc[(2u * i1) + 1u]; + + xcIn = pSrc[(2u * i2)]; + ycIn = pSrc[(2u * i2) + 1u]; + + xdIn = pSrc[(2u * i3)]; + ydIn = pSrc[(2u * i3) + 1u]; + + /* xa + xc */ + Xaplusc = xaIn + xcIn; + /* xb + xd */ + Xbplusd = xbIn + xdIn; + /* ya + yc */ + Yaplusc = yaIn + ycIn; + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + /* xb - xd */ + Xbminusd = xbIn - xdIn; + /* ya - yc */ + Yaminusc = yaIn - ycIn; + /* yb - yd */ + Ybminusd = ybIn - ydIn; + + /* xa' = xa + xb + xc + xd */ + pSrc[(2u * i0)] = Xaplusc + Xbplusd; + /* ya' = ya + yb + yc + yd */ + pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd; + + /* (xa - xc) + (yb - yd) */ + Xb12C_out = (Xaminusc + Ybminusd); + /* (ya - yc) + (xb - xd) */ + Yb12C_out = (Yaminusc - Xbminusd); + /* (xa + xc) - (xb + xd) */ + Xc12C_out = (Xaplusc - Xbplusd); + /* (ya + yc) - (yb + yd) */ + Yc12C_out = (Yaplusc - Ybplusd); + /* (xa - xc) - (yb - yd) */ + Xd12C_out = (Xaminusc - Ybminusd); + /* (ya - yc) + (xb - xd) */ + Yd12C_out = (Xbminusd + Yaminusc); + + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + + /* index calculation for the coefficients */ + ia3 = ia2 + ia1; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + + Xb12_out = Xb12C_out * co1; + Yb12_out = Yb12C_out * co1; + Xc12_out = Xc12C_out * co2; + Yc12_out = Yc12C_out * co2; + Xd12_out = Xd12C_out * co3; + Yd12_out = Yd12C_out * co3; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + //Xb12_out -= Yb12C_out * si1; + p0 = Yb12C_out * si1; + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + //Yb12_out += Xb12C_out * si1; + p1 = Xb12C_out * si1; + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + //Xc12_out -= Yc12C_out * si2; + p2 = Yc12C_out * si2; + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + //Yc12_out += Xc12C_out * si2; + p3 = Xc12C_out * si2; + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + //Xd12_out -= Yd12C_out * si3; + p4 = Yd12C_out * si3; + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + //Yd12_out += Xd12C_out * si3; + p5 = Xd12C_out * si3; + + Xb12_out += p0; + Yb12_out -= p1; + Xc12_out += p2; + Yc12_out -= p3; + Xd12_out += p4; + Yd12_out -= p5; + + /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = Xc12_out; + + /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ + pSrc[(2u * i1) + 1u] = Yc12_out; + + /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = Xb12_out; + + /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = Yb12_out; + + /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ + pSrc[2u * i3] = Xd12_out; + + /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = Yd12_out; + + /* Twiddle coefficients index modifier */ + ia1 += twidCoefModifier; + + /* Updating input index */ + i0++; + + } + while(--j); + + twidCoefModifier <<= 2u; + + /* Calculation of second stage to excluding last stage */ + for (k = fftLen >> 2u; k > 4u; k >>= 2u) + { + /* Initializations for the first stage */ + n1 = n2; + n2 >>= 2u; + ia1 = 0u; + + /* Calculation of first stage */ + j = 0; + do + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + + /* Twiddle coefficients index modifier */ + ia1 += twidCoefModifier; + + i0 = j; + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + xaIn = pSrc[(2u * i0)]; + yaIn = pSrc[(2u * i0) + 1u]; + + xbIn = pSrc[(2u * i1)]; + ybIn = pSrc[(2u * i1) + 1u]; + + xcIn = pSrc[(2u * i2)]; + ycIn = pSrc[(2u * i2) + 1u]; + + xdIn = pSrc[(2u * i3)]; + ydIn = pSrc[(2u * i3) + 1u]; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + /* (xb - xd) */ + Xbminusd = xbIn - xdIn; + /* ya - yc */ + Yaminusc = yaIn - ycIn; + /* (yb - yd) */ + Ybminusd = ybIn - ydIn; + + /* xa + xc */ + Xaplusc = xaIn + xcIn; + /* xb + xd */ + Xbplusd = xbIn + xdIn; + /* ya + yc */ + Yaplusc = yaIn + ycIn; + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* (xa - xc) + (yb - yd) */ + Xb12C_out = (Xaminusc + Ybminusd); + /* (ya - yc) - (xb - xd) */ + Yb12C_out = (Yaminusc - Xbminusd); + /* xa + xc -(xb + xd) */ + Xc12C_out = (Xaplusc - Xbplusd); + /* (ya + yc) - (yb + yd) */ + Yc12C_out = (Yaplusc - Ybplusd); + /* (xa - xc) - (yb - yd) */ + Xd12C_out = (Xaminusc - Ybminusd); + /* (ya - yc) + (xb - xd) */ + Yd12C_out = (Xbminusd + Yaminusc); + + pSrc[(2u * i0)] = Xaplusc + Xbplusd; + pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd; + + Xb12_out = Xb12C_out * co1; + Yb12_out = Yb12C_out * co1; + Xc12_out = Xc12C_out * co2; + Yc12_out = Yc12C_out * co2; + Xd12_out = Xd12C_out * co3; + Yd12_out = Yd12C_out * co3; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + //Xb12_out -= Yb12C_out * si1; + p0 = Yb12C_out * si1; + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + //Yb12_out += Xb12C_out * si1; + p1 = Xb12C_out * si1; + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + //Xc12_out -= Yc12C_out * si2; + p2 = Yc12C_out * si2; + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + //Yc12_out += Xc12C_out * si2; + p3 = Xc12C_out * si2; + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + //Xd12_out -= Yd12C_out * si3; + p4 = Yd12C_out * si3; + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + //Yd12_out += Xd12C_out * si3; + p5 = Xd12C_out * si3; + + Xb12_out += p0; + Yb12_out -= p1; + Xc12_out += p2; + Yc12_out -= p3; + Xd12_out += p4; + Yd12_out -= p5; + + /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = Xc12_out; + + /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ + pSrc[(2u * i1) + 1u] = Yc12_out; + + /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = Xb12_out; + + /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = Yb12_out; + + /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ + pSrc[2u * i3] = Xd12_out; + + /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = Yd12_out; + + i0 += n1; + } while(i0 < fftLen); + j++; + } while(j <= (n2 - 1u)); + twidCoefModifier <<= 2u; + } + + j = fftLen >> 2; + ptr1 = &pSrc[0]; + + /* Calculations of last stage */ + do + { + xaIn = ptr1[0]; + yaIn = ptr1[1]; + xbIn = ptr1[2]; + ybIn = ptr1[3]; + xcIn = ptr1[4]; + ycIn = ptr1[5]; + xdIn = ptr1[6]; + ydIn = ptr1[7]; + + /* xa + xc */ + Xaplusc = xaIn + xcIn; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + + /* ya + yc */ + Yaplusc = yaIn + ycIn; + + /* ya - yc */ + Yaminusc = yaIn - ycIn; + + /* xb + xd */ + Xbplusd = xbIn + xdIn; + + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* (xb-xd) */ + Xbminusd = xbIn - xdIn; + + /* (yb-yd) */ + Ybminusd = ybIn - ydIn; + + /* xa' = xa + xb + xc + xd */ + a0 = (Xaplusc + Xbplusd); + /* ya' = ya + yb + yc + yd */ + a1 = (Yaplusc + Ybplusd); + /* xc' = (xa-xb+xc-xd) */ + a2 = (Xaplusc - Xbplusd); + /* yc' = (ya-yb+yc-yd) */ + a3 = (Yaplusc - Ybplusd); + /* xb' = (xa+yb-xc-yd) */ + a4 = (Xaminusc + Ybminusd); + /* yb' = (ya-xb-yc+xd) */ + a5 = (Yaminusc - Xbminusd); + /* xd' = (xa-yb-xc+yd)) */ + a6 = (Xaminusc - Ybminusd); + /* yd' = (ya+xb-yc-xd) */ + a7 = (Xbminusd + Yaminusc); + + ptr1[0] = a0; + ptr1[1] = a1; + ptr1[2] = a2; + ptr1[3] = a3; + ptr1[4] = a4; + ptr1[5] = a5; + ptr1[6] = a6; + ptr1[7] = a7; + + /* increment pointer by 8 */ + ptr1 += 8u; + } while(--j); + +#else + + float32_t t1, t2, r1, r2, s1, s2; + + /* Run the below code for Cortex-M0 */ + + /* Initializations for the fft calculation */ + n2 = fftLen; + n1 = n2; + for (k = fftLen; k > 1u; k >>= 2u) + { + /* Initializations for the fft calculation */ + n1 = n2; + n2 >>= 2u; + ia1 = 0u; + + /* FFT Calculation */ + j = 0; + do + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + i0 = j; + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* xa + xc */ + r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)]; + + /* xa - xc */ + r2 = pSrc[(2u * i0)] - pSrc[(2u * i2)]; + + /* ya + yc */ + s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u]; + + /* ya - yc */ + s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u]; + + /* xb + xd */ + t1 = pSrc[2u * i1] + pSrc[2u * i3]; + + /* xa' = xa + xb + xc + xd */ + pSrc[2u * i0] = r1 + t1; + + /* xa + xc -(xb + xd) */ + r1 = r1 - t1; + + /* yb + yd */ + t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u]; + + /* ya' = ya + yb + yc + yd */ + pSrc[(2u * i0) + 1u] = s1 + t2; + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* (yb - yd) */ + t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u]; + + /* (xb - xd) */ + t2 = pSrc[2u * i1] - pSrc[2u * i3]; + + /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = (r1 * co2) + (s1 * si2); + + /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ + pSrc[(2u * i1) + 1u] = (s1 * co2) - (r1 * si2); + + /* (xa - xc) + (yb - yd) */ + r1 = r2 + t1; + + /* (xa - xc) - (yb - yd) */ + r2 = r2 - t1; + + /* (ya - yc) - (xb - xd) */ + s1 = s2 - t2; + + /* (ya - yc) + (xb - xd) */ + s2 = s2 + t2; + + /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = (r1 * co1) + (s1 * si1); + + /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = (s1 * co1) - (r1 * si1); + + /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ + pSrc[2u * i3] = (r2 * co3) + (s2 * si3); + + /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = (s2 * co3) - (r2 * si3); + + i0 += n1; + } while( i0 < fftLen); + j++; + } while(j <= (n2 - 1u)); + twidCoefModifier <<= 2u; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY_FAMILY */ + +} + +/* +* @brief Core function for the floating-point CIFFT butterfly process. +* @param[in, out] *pSrc points to the in-place buffer of floating-point data type. +* @param[in] fftLen length of the FFT. +* @param[in] *pCoef points to twiddle coefficient buffer. +* @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. +* @param[in] onebyfftLen value of 1/fftLen. +* @return none. +*/ + +void arm_radix4_butterfly_inverse_f32( +float32_t * pSrc, +uint16_t fftLen, +float32_t * pCoef, +uint16_t twidCoefModifier, +float32_t onebyfftLen) +{ + float32_t co1, co2, co3, si1, si2, si3; + uint32_t ia1, ia2, ia3; + uint32_t i0, i1, i2, i3; + uint32_t n1, n2, j, k; + +#ifndef ARM_MATH_CM0_FAMILY_FAMILY + + float32_t xaIn, yaIn, xbIn, ybIn, xcIn, ycIn, xdIn, ydIn; + float32_t Xaplusc, Xbplusd, Yaplusc, Ybplusd, Xaminusc, Xbminusd, Yaminusc, + Ybminusd; + float32_t Xb12C_out, Yb12C_out, Xc12C_out, Yc12C_out, Xd12C_out, Yd12C_out; + float32_t Xb12_out, Yb12_out, Xc12_out, Yc12_out, Xd12_out, Yd12_out; + float32_t *ptr1; + float32_t p0,p1,p2,p3,p4,p5,p6,p7; + float32_t a0,a1,a2,a3,a4,a5,a6,a7; + + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + + /* n2 = fftLen/4 */ + n2 >>= 2u; + i0 = 0u; + ia1 = 0u; + + j = n2; + + /* Calculation of first stage */ + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Butterfly implementation */ + xaIn = pSrc[(2u * i0)]; + yaIn = pSrc[(2u * i0) + 1u]; + + xcIn = pSrc[(2u * i2)]; + ycIn = pSrc[(2u * i2) + 1u]; + + xbIn = pSrc[(2u * i1)]; + ybIn = pSrc[(2u * i1) + 1u]; + + xdIn = pSrc[(2u * i3)]; + ydIn = pSrc[(2u * i3) + 1u]; + + /* xa + xc */ + Xaplusc = xaIn + xcIn; + /* xb + xd */ + Xbplusd = xbIn + xdIn; + /* ya + yc */ + Yaplusc = yaIn + ycIn; + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + /* xb - xd */ + Xbminusd = xbIn - xdIn; + /* ya - yc */ + Yaminusc = yaIn - ycIn; + /* yb - yd */ + Ybminusd = ybIn - ydIn; + + /* xa' = xa + xb + xc + xd */ + pSrc[(2u * i0)] = Xaplusc + Xbplusd; + + /* ya' = ya + yb + yc + yd */ + pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd; + + /* (xa - xc) - (yb - yd) */ + Xb12C_out = (Xaminusc - Ybminusd); + /* (ya - yc) + (xb - xd) */ + Yb12C_out = (Yaminusc + Xbminusd); + /* (xa + xc) - (xb + xd) */ + Xc12C_out = (Xaplusc - Xbplusd); + /* (ya + yc) - (yb + yd) */ + Yc12C_out = (Yaplusc - Ybplusd); + /* (xa - xc) + (yb - yd) */ + Xd12C_out = (Xaminusc + Ybminusd); + /* (ya - yc) - (xb - xd) */ + Yd12C_out = (Yaminusc - Xbminusd); + + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + + /* index calculation for the coefficients */ + ia3 = ia2 + ia1; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + + Xb12_out = Xb12C_out * co1; + Yb12_out = Yb12C_out * co1; + Xc12_out = Xc12C_out * co2; + Yc12_out = Yc12C_out * co2; + Xd12_out = Xd12C_out * co3; + Yd12_out = Yd12C_out * co3; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + //Xb12_out -= Yb12C_out * si1; + p0 = Yb12C_out * si1; + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + //Yb12_out += Xb12C_out * si1; + p1 = Xb12C_out * si1; + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + //Xc12_out -= Yc12C_out * si2; + p2 = Yc12C_out * si2; + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + //Yc12_out += Xc12C_out * si2; + p3 = Xc12C_out * si2; + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + //Xd12_out -= Yd12C_out * si3; + p4 = Yd12C_out * si3; + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + //Yd12_out += Xd12C_out * si3; + p5 = Xd12C_out * si3; + + Xb12_out -= p0; + Yb12_out += p1; + Xc12_out -= p2; + Yc12_out += p3; + Xd12_out -= p4; + Yd12_out += p5; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = Xc12_out; + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSrc[(2u * i1) + 1u] = Yc12_out; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = Xb12_out; + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = Yb12_out; + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSrc[2u * i3] = Xd12_out; + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = Yd12_out; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + /* Updating input index */ + i0 = i0 + 1u; + + } while(--j); + + twidCoefModifier <<= 2u; + + /* Calculation of second stage to excluding last stage */ + for (k = fftLen >> 2u; k > 4u; k >>= 2u) + { + /* Initializations for the first stage */ + n1 = n2; + n2 >>= 2u; + ia1 = 0u; + + /* Calculation of first stage */ + j = 0; + do + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + i0 = j; + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + xaIn = pSrc[(2u * i0)]; + yaIn = pSrc[(2u * i0) + 1u]; + + xbIn = pSrc[(2u * i1)]; + ybIn = pSrc[(2u * i1) + 1u]; + + xcIn = pSrc[(2u * i2)]; + ycIn = pSrc[(2u * i2) + 1u]; + + xdIn = pSrc[(2u * i3)]; + ydIn = pSrc[(2u * i3) + 1u]; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + /* (xb - xd) */ + Xbminusd = xbIn - xdIn; + /* ya - yc */ + Yaminusc = yaIn - ycIn; + /* (yb - yd) */ + Ybminusd = ybIn - ydIn; + + /* xa + xc */ + Xaplusc = xaIn + xcIn; + /* xb + xd */ + Xbplusd = xbIn + xdIn; + /* ya + yc */ + Yaplusc = yaIn + ycIn; + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* (xa - xc) - (yb - yd) */ + Xb12C_out = (Xaminusc - Ybminusd); + /* (ya - yc) + (xb - xd) */ + Yb12C_out = (Yaminusc + Xbminusd); + /* xa + xc -(xb + xd) */ + Xc12C_out = (Xaplusc - Xbplusd); + /* (ya + yc) - (yb + yd) */ + Yc12C_out = (Yaplusc - Ybplusd); + /* (xa - xc) + (yb - yd) */ + Xd12C_out = (Xaminusc + Ybminusd); + /* (ya - yc) - (xb - xd) */ + Yd12C_out = (Yaminusc - Xbminusd); + + pSrc[(2u * i0)] = Xaplusc + Xbplusd; + pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd; + + Xb12_out = Xb12C_out * co1; + Yb12_out = Yb12C_out * co1; + Xc12_out = Xc12C_out * co2; + Yc12_out = Yc12C_out * co2; + Xd12_out = Xd12C_out * co3; + Yd12_out = Yd12C_out * co3; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + //Xb12_out -= Yb12C_out * si1; + p0 = Yb12C_out * si1; + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + //Yb12_out += Xb12C_out * si1; + p1 = Xb12C_out * si1; + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + //Xc12_out -= Yc12C_out * si2; + p2 = Yc12C_out * si2; + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + //Yc12_out += Xc12C_out * si2; + p3 = Xc12C_out * si2; + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + //Xd12_out -= Yd12C_out * si3; + p4 = Yd12C_out * si3; + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + //Yd12_out += Xd12C_out * si3; + p5 = Xd12C_out * si3; + + Xb12_out -= p0; + Yb12_out += p1; + Xc12_out -= p2; + Yc12_out += p3; + Xd12_out -= p4; + Yd12_out += p5; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = Xc12_out; + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSrc[(2u * i1) + 1u] = Yc12_out; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = Xb12_out; + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = Yb12_out; + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSrc[2u * i3] = Xd12_out; + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = Yd12_out; + + i0 += n1; + } while(i0 < fftLen); + j++; + } while(j <= (n2 - 1u)); + twidCoefModifier <<= 2u; + } + /* Initializations of last stage */ + + j = fftLen >> 2; + ptr1 = &pSrc[0]; + + /* Calculations of last stage */ + do + { + xaIn = ptr1[0]; + yaIn = ptr1[1]; + xbIn = ptr1[2]; + ybIn = ptr1[3]; + xcIn = ptr1[4]; + ycIn = ptr1[5]; + xdIn = ptr1[6]; + ydIn = ptr1[7]; + + /* Butterfly implementation */ + /* xa + xc */ + Xaplusc = xaIn + xcIn; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + + /* ya + yc */ + Yaplusc = yaIn + ycIn; + + /* ya - yc */ + Yaminusc = yaIn - ycIn; + + /* xb + xd */ + Xbplusd = xbIn + xdIn; + + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* (xb-xd) */ + Xbminusd = xbIn - xdIn; + + /* (yb-yd) */ + Ybminusd = ybIn - ydIn; + + /* xa' = (xa+xb+xc+xd) * onebyfftLen */ + a0 = (Xaplusc + Xbplusd); + /* ya' = (ya+yb+yc+yd) * onebyfftLen */ + a1 = (Yaplusc + Ybplusd); + /* xc' = (xa-xb+xc-xd) * onebyfftLen */ + a2 = (Xaplusc - Xbplusd); + /* yc' = (ya-yb+yc-yd) * onebyfftLen */ + a3 = (Yaplusc - Ybplusd); + /* xb' = (xa-yb-xc+yd) * onebyfftLen */ + a4 = (Xaminusc - Ybminusd); + /* yb' = (ya+xb-yc-xd) * onebyfftLen */ + a5 = (Yaminusc + Xbminusd); + /* xd' = (xa-yb-xc+yd) * onebyfftLen */ + a6 = (Xaminusc + Ybminusd); + /* yd' = (ya-xb-yc+xd) * onebyfftLen */ + a7 = (Yaminusc - Xbminusd); + + p0 = a0 * onebyfftLen; + p1 = a1 * onebyfftLen; + p2 = a2 * onebyfftLen; + p3 = a3 * onebyfftLen; + p4 = a4 * onebyfftLen; + p5 = a5 * onebyfftLen; + p6 = a6 * onebyfftLen; + p7 = a7 * onebyfftLen; + + /* xa' = (xa+xb+xc+xd) * onebyfftLen */ + ptr1[0] = p0; + /* ya' = (ya+yb+yc+yd) * onebyfftLen */ + ptr1[1] = p1; + /* xc' = (xa-xb+xc-xd) * onebyfftLen */ + ptr1[2] = p2; + /* yc' = (ya-yb+yc-yd) * onebyfftLen */ + ptr1[3] = p3; + /* xb' = (xa-yb-xc+yd) * onebyfftLen */ + ptr1[4] = p4; + /* yb' = (ya+xb-yc-xd) * onebyfftLen */ + ptr1[5] = p5; + /* xd' = (xa-yb-xc+yd) * onebyfftLen */ + ptr1[6] = p6; + /* yd' = (ya-xb-yc+xd) * onebyfftLen */ + ptr1[7] = p7; + + /* increment source pointer by 8 for next calculations */ + ptr1 = ptr1 + 8u; + + } while(--j); + +#else + + float32_t t1, t2, r1, r2, s1, s2; + + /* Run the below code for Cortex-M0 */ + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + + /* Calculation of first stage */ + for (k = fftLen; k > 4u; k >>= 2u) + { + /* Initializations for the first stage */ + n1 = n2; + n2 >>= 2u; + ia1 = 0u; + + /* Calculation of first stage */ + j = 0; + do + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + i0 = j; + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* xa + xc */ + r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)]; + + /* xa - xc */ + r2 = pSrc[(2u * i0)] - pSrc[(2u * i2)]; + + /* ya + yc */ + s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u]; + + /* ya - yc */ + s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u]; + + /* xb + xd */ + t1 = pSrc[2u * i1] + pSrc[2u * i3]; + + /* xa' = xa + xb + xc + xd */ + pSrc[2u * i0] = r1 + t1; + + /* xa + xc -(xb + xd) */ + r1 = r1 - t1; + + /* yb + yd */ + t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u]; + + /* ya' = ya + yb + yc + yd */ + pSrc[(2u * i0) + 1u] = s1 + t2; + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* (yb - yd) */ + t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u]; + + /* (xb - xd) */ + t2 = pSrc[2u * i1] - pSrc[2u * i3]; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = (r1 * co2) - (s1 * si2); + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSrc[(2u * i1) + 1u] = (s1 * co2) + (r1 * si2); + + /* (xa - xc) - (yb - yd) */ + r1 = r2 - t1; + + /* (xa - xc) + (yb - yd) */ + r2 = r2 + t1; + + /* (ya - yc) + (xb - xd) */ + s1 = s2 + t2; + + /* (ya - yc) - (xb - xd) */ + s2 = s2 - t2; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = (r1 * co1) - (s1 * si1); + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = (s1 * co1) + (r1 * si1); + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSrc[2u * i3] = (r2 * co3) - (s2 * si3); + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = (s2 * co3) + (r2 * si3); + + i0 += n1; + } while( i0 < fftLen); + j++; + } while(j <= (n2 - 1u)); + twidCoefModifier <<= 2u; + } + /* Initializations of last stage */ + n1 = n2; + n2 >>= 2u; + + /* Calculations of last stage */ + for (i0 = 0u; i0 <= (fftLen - n1); i0 += n1) + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Butterfly implementation */ + /* xa + xc */ + r1 = pSrc[2u * i0] + pSrc[2u * i2]; + + /* xa - xc */ + r2 = pSrc[2u * i0] - pSrc[2u * i2]; + + /* ya + yc */ + s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u]; + + /* ya - yc */ + s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u]; + + /* xc + xd */ + t1 = pSrc[2u * i1] + pSrc[2u * i3]; + + /* xa' = xa + xb + xc + xd */ + pSrc[2u * i0] = (r1 + t1) * onebyfftLen; + + /* (xa + xb) - (xc + xd) */ + r1 = r1 - t1; + + /* yb + yd */ + t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u]; + + /* ya' = ya + yb + yc + yd */ + pSrc[(2u * i0) + 1u] = (s1 + t2) * onebyfftLen; + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* (yb-yd) */ + t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u]; + + /* (xb-xd) */ + t2 = pSrc[2u * i1] - pSrc[2u * i3]; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = r1 * onebyfftLen; + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSrc[(2u * i1) + 1u] = s1 * onebyfftLen; + + /* (xa - xc) - (yb-yd) */ + r1 = r2 - t1; + + /* (xa - xc) + (yb-yd) */ + r2 = r2 + t1; + + /* (ya - yc) + (xb-xd) */ + s1 = s2 + t2; + + /* (ya - yc) - (xb-xd) */ + s2 = s2 - t2; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = r1 * onebyfftLen; + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = s1 * onebyfftLen; + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSrc[2u * i3] = r2 * onebyfftLen; + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = s2 * onebyfftLen; + } + +#endif /* #ifndef ARM_MATH_CM0_FAMILY_FAMILY */ +} + +/** +* @addtogroup ComplexFFT +* @{ +*/ + +/** +* @details +* @brief Processing function for the floating-point Radix-4 CFFT/CIFFT. +* @deprecated Do not use this function. It has been superseded by \ref arm_cfft_f32 and will be removed +* in the future. +* @param[in] *S points to an instance of the floating-point Radix-4 CFFT/CIFFT structure. +* @param[in, out] *pSrc points to the complex data buffer of size 2*fftLen. Processing occurs in-place. +* @return none. +*/ + +void arm_cfft_radix4_f32( +const arm_cfft_radix4_instance_f32 * S, +float32_t * pSrc) +{ + + if(S->ifftFlag == 1u) + { + /* Complex IFFT radix-4 */ + arm_radix4_butterfly_inverse_f32(pSrc, S->fftLen, S->pTwiddle, + S->twidCoefModifier, S->onebyfftLen); + } + else + { + /* Complex FFT radix-4 */ + arm_radix4_butterfly_f32(pSrc, S->fftLen, S->pTwiddle, + S->twidCoefModifier); + } + + if(S->bitReverseFlag == 1u) + { + /* Bit Reversal */ + arm_bitreversal_f32(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable); + } + +} + +/** +* @} end of ComplexFFT group +*/ + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,165 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix4_init_f32.c +* +* Description: Radix-4 Decimation in Frequency Floating-point CFFT & CIFFT Initialization function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup ComplexFFT + * @{ + */ + +/** +* @brief Initialization function for the floating-point CFFT/CIFFT. +* @deprecated Do not use this function. It has been superceded by \ref arm_cfft_f32 and will be removed +* in the future. +* @param[in,out] *S points to an instance of the floating-point CFFT/CIFFT structure. +* @param[in] fftLen length of the FFT. +* @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLen is not a supported value. +* +* \par Description: +* \par +* The parameter ifftFlag controls whether a forward or inverse transform is computed. +* Set(=1) ifftFlag for calculation of CIFFT otherwise CFFT is calculated +* \par +* The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. +* Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. +* \par +* The parameter fftLen Specifies length of CFFT/CIFFT process. Supported FFT Lengths are 16, 64, 256, 1024. +* \par +* This Function also initializes Twiddle factor table pointer and Bit reversal table pointer. +*/ + +arm_status arm_cfft_radix4_init_f32( + arm_cfft_radix4_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialise the FFT length */ + S->fftLen = fftLen; + + /* Initialise the Twiddle coefficient pointer */ + S->pTwiddle = (float32_t *) twiddleCoef; + + /* Initialise the Flag for selection of CFFT or CIFFT */ + S->ifftFlag = ifftFlag; + + /* Initialise the Flag for calculation Bit reversal or not */ + S->bitReverseFlag = bitReverseFlag; + + /* Initializations of structure parameters depending on the FFT length */ + switch (S->fftLen) + { + + case 4096u: + /* Initializations of structure parameters for 4096 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 1u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 1u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) armBitRevTable; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.000244140625; + break; + + case 1024u: + /* Initializations of structure parameters for 1024 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 4u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 4u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[3]; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.0009765625f; + break; + + + case 256u: + /* Initializations of structure parameters for 256 point FFT */ + S->twidCoefModifier = 16u; + S->bitRevFactor = 16u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[15]; + S->onebyfftLen = 0.00390625f; + break; + + case 64u: + /* Initializations of structure parameters for 64 point FFT */ + S->twidCoefModifier = 64u; + S->bitRevFactor = 64u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[63]; + S->onebyfftLen = 0.015625f; + break; + + case 16u: + /* Initializations of structure parameters for 16 point FFT */ + S->twidCoefModifier = 256u; + S->bitRevFactor = 256u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[255]; + S->onebyfftLen = 0.0625f; + break; + + + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + return (status); +} + +/** + * @} end of ComplexFFT group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,152 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix4_init_q15.c +* +* Description: Radix-4 Decimation in Frequency Q15 FFT & IFFT initialization function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupTransforms + */ + + +/** + * @addtogroup ComplexFFT + * @{ + */ + + +/** +* @brief Initialization function for the Q15 CFFT/CIFFT. +* @deprecated Do not use this function. It has been superseded by \ref arm_cfft_q15 and will be removed +* @param[in,out] *S points to an instance of the Q15 CFFT/CIFFT structure. +* @param[in] fftLen length of the FFT. +* @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLen is not a supported value. +* +* \par Description: +* \par +* The parameter ifftFlag controls whether a forward or inverse transform is computed. +* Set(=1) ifftFlag for calculation of CIFFT otherwise CFFT is calculated +* \par +* The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. +* Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. +* \par +* The parameter fftLen Specifies length of CFFT/CIFFT process. Supported FFT Lengths are 16, 64, 256, 1024. +* \par +* This Function also initializes Twiddle factor table pointer and Bit reversal table pointer. +*/ + +arm_status arm_cfft_radix4_init_q15( + arm_cfft_radix4_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + /* Initialise the FFT length */ + S->fftLen = fftLen; + /* Initialise the Twiddle coefficient pointer */ + S->pTwiddle = (q15_t *) twiddleCoef_4096_q15; + /* Initialise the Flag for selection of CFFT or CIFFT */ + S->ifftFlag = ifftFlag; + /* Initialise the Flag for calculation Bit reversal or not */ + S->bitReverseFlag = bitReverseFlag; + + /* Initializations of structure parameters depending on the FFT length */ + switch (S->fftLen) + { + case 4096u: + /* Initializations of structure parameters for 4096 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 1u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 1u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) armBitRevTable; + + break; + + case 1024u: + /* Initializations of structure parameters for 1024 point FFT */ + S->twidCoefModifier = 4u; + S->bitRevFactor = 4u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[3]; + + break; + + case 256u: + /* Initializations of structure parameters for 256 point FFT */ + S->twidCoefModifier = 16u; + S->bitRevFactor = 16u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[15]; + + break; + + case 64u: + /* Initializations of structure parameters for 64 point FFT */ + S->twidCoefModifier = 64u; + S->bitRevFactor = 64u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[63]; + + break; + + case 16u: + /* Initializations of structure parameters for 16 point FFT */ + S->twidCoefModifier = 256u; + S->bitRevFactor = 256u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[255]; + + break; + + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + return (status); +} + +/** + * @} end of ComplexFFT group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix4_init_q31.c +* +* Description: Radix-4 Decimation in Frequency Q31 FFT & IFFT initialization function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup ComplexFFT + * @{ + */ + +/** +* +* @brief Initialization function for the Q31 CFFT/CIFFT. +* @deprecated Do not use this function. It has been superseded by \ref arm_cfft_q31 and will be removed +* @param[in,out] *S points to an instance of the Q31 CFFT/CIFFT structure. +* @param[in] fftLen length of the FFT. +* @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLen is not a supported value. +* +* \par Description: +* \par +* The parameter ifftFlag controls whether a forward or inverse transform is computed. +* Set(=1) ifftFlag for calculation of CIFFT otherwise CFFT is calculated +* \par +* The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. +* Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. +* \par +* The parameter fftLen Specifies length of CFFT/CIFFT process. Supported FFT Lengths are 16, 64, 256, 1024. +* \par +* This Function also initializes Twiddle factor table pointer and Bit reversal table pointer. +*/ + +arm_status arm_cfft_radix4_init_q31( + arm_cfft_radix4_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + /* Initialise the FFT length */ + S->fftLen = fftLen; + /* Initialise the Twiddle coefficient pointer */ + S->pTwiddle = (q31_t *) twiddleCoef_4096_q31; + /* Initialise the Flag for selection of CFFT or CIFFT */ + S->ifftFlag = ifftFlag; + /* Initialise the Flag for calculation Bit reversal or not */ + S->bitReverseFlag = bitReverseFlag; + + /* Initializations of Instance structure depending on the FFT length */ + switch (S->fftLen) + { + /* Initializations of structure parameters for 4096 point FFT */ + case 4096u: + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 1u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 1u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) armBitRevTable; + break; + + /* Initializations of structure parameters for 1024 point FFT */ + case 1024u: + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 4u; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 4u; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[3]; + break; + + case 256u: + /* Initializations of structure parameters for 256 point FFT */ + S->twidCoefModifier = 16u; + S->bitRevFactor = 16u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[15]; + break; + + case 64u: + /* Initializations of structure parameters for 64 point FFT */ + S->twidCoefModifier = 64u; + S->bitRevFactor = 64u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[63]; + break; + + case 16u: + /* Initializations of structure parameters for 16 point FFT */ + S->twidCoefModifier = 256u; + S->bitRevFactor = 256u; + S->pBitRevTable = (uint16_t *) & armBitRevTable[255]; + break; + + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + return (status); +} + +/** + * @} end of ComplexFFT group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1924 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix4_q15.c +* +* Description: This file has function definition of Radix-4 FFT & IFFT function and +* In-place bit reversal using bit reversal table +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + + +void arm_radix4_butterfly_q15( + q15_t * pSrc16, + uint32_t fftLen, + q15_t * pCoef16, + uint32_t twidCoefModifier); + +void arm_radix4_butterfly_inverse_q15( + q15_t * pSrc16, + uint32_t fftLen, + q15_t * pCoef16, + uint32_t twidCoefModifier); + +void arm_bitreversal_q15( + q15_t * pSrc, + uint32_t fftLen, + uint16_t bitRevFactor, + uint16_t * pBitRevTab); + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup ComplexFFT + * @{ + */ + + +/** + * @details + * @brief Processing function for the Q15 CFFT/CIFFT. + * @deprecated Do not use this function. It has been superseded by \ref arm_cfft_q15 and will be removed + * @param[in] *S points to an instance of the Q15 CFFT/CIFFT structure. + * @param[in, out] *pSrc points to the complex data buffer. Processing occurs in-place. + * @return none. + * + * \par Input and output formats: + * \par + * Internally input is downscaled by 2 for every stage to avoid saturations inside CFFT/CIFFT process. + * Hence the output format is different for different FFT sizes. + * The input and output formats for different FFT sizes and number of bits to upscale are mentioned in the tables below for CFFT and CIFFT: + * \par + * \image html CFFTQ15.gif "Input and Output Formats for Q15 CFFT" + * \image html CIFFTQ15.gif "Input and Output Formats for Q15 CIFFT" + */ + +void arm_cfft_radix4_q15( + const arm_cfft_radix4_instance_q15 * S, + q15_t * pSrc) +{ + if(S->ifftFlag == 1u) + { + /* Complex IFFT radix-4 */ + arm_radix4_butterfly_inverse_q15(pSrc, S->fftLen, S->pTwiddle, + S->twidCoefModifier); + } + else + { + /* Complex FFT radix-4 */ + arm_radix4_butterfly_q15(pSrc, S->fftLen, S->pTwiddle, + S->twidCoefModifier); + } + + if(S->bitReverseFlag == 1u) + { + /* Bit Reversal */ + arm_bitreversal_q15(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable); + } + +} + +/** + * @} end of ComplexFFT group + */ + +/* +* Radix-4 FFT algorithm used is : +* +* Input real and imaginary data: +* x(n) = xa + j * ya +* x(n+N/4 ) = xb + j * yb +* x(n+N/2 ) = xc + j * yc +* x(n+3N 4) = xd + j * yd +* +* +* Output real and imaginary data: +* x(4r) = xa'+ j * ya' +* x(4r+1) = xb'+ j * yb' +* x(4r+2) = xc'+ j * yc' +* x(4r+3) = xd'+ j * yd' +* +* +* Twiddle factors for radix-4 FFT: +* Wn = co1 + j * (- si1) +* W2n = co2 + j * (- si2) +* W3n = co3 + j * (- si3) + +* The real and imaginary output values for the radix-4 butterfly are +* xa' = xa + xb + xc + xd +* ya' = ya + yb + yc + yd +* xb' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) +* yb' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) +* xc' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) +* yc' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) +* xd' = (xa-yb-xc+yd)* co3 + (ya+xb-yc-xd)* (si3) +* yd' = (ya+xb-yc-xd)* co3 - (xa-yb-xc+yd)* (si3) +* +*/ + +/** + * @brief Core function for the Q15 CFFT butterfly process. + * @param[in, out] *pSrc16 points to the in-place buffer of Q15 data type. + * @param[in] fftLen length of the FFT. + * @param[in] *pCoef16 points to twiddle coefficient buffer. + * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + +void arm_radix4_butterfly_q15( + q15_t * pSrc16, + uint32_t fftLen, + q15_t * pCoef16, + uint32_t twidCoefModifier) +{ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t R, S, T, U; + q31_t C1, C2, C3, out1, out2; + uint32_t n1, n2, ic, i0, j, k; + + q15_t *ptr1; + q15_t *pSi0; + q15_t *pSi1; + q15_t *pSi2; + q15_t *pSi3; + + q31_t xaya, xbyb, xcyc, xdyd; + + /* Total process is divided into three stages */ + + /* process first stage, middle stages, & last stage */ + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + + /* n2 = fftLen/4 */ + n2 >>= 2u; + + /* Index for twiddle coefficient */ + ic = 0u; + + /* Index for input read and output write */ + j = n2; + + pSi0 = pSrc16; + pSi1 = pSi0 + 2 * n2; + pSi2 = pSi1 + 2 * n2; + pSi3 = pSi2 + 2 * n2; + + /* Input is in 1.15(q15) format */ + + /* start of first stage process */ + do + { + /* Butterfly implementation */ + + /* Reading i0, i0+fftLen/2 inputs */ + /* Read ya (real), xa(imag) input */ + T = _SIMD32_OFFSET(pSi0); + T = __SHADD16(T, 0); // this is just a SIMD arithmetic shift right by 1 + T = __SHADD16(T, 0); // it turns out doing this twice is 2 cycles, the alternative takes 3 cycles + //in = ((int16_t) (T & 0xFFFF)) >> 2; // alternative code that takes 3 cycles + //T = ((T >> 2) & 0xFFFF0000) | (in & 0xFFFF); + + /* Read yc (real), xc(imag) input */ + S = _SIMD32_OFFSET(pSi2); + S = __SHADD16(S, 0); + S = __SHADD16(S, 0); + + /* R = packed((ya + yc), (xa + xc) ) */ + R = __QADD16(T, S); + + /* S = packed((ya - yc), (xa - xc) ) */ + S = __QSUB16(T, S); + + /* Reading i0+fftLen/4 , i0+3fftLen/4 inputs */ + /* Read yb (real), xb(imag) input */ + T = _SIMD32_OFFSET(pSi1); + T = __SHADD16(T, 0); + T = __SHADD16(T, 0); + + /* Read yd (real), xd(imag) input */ + U = _SIMD32_OFFSET(pSi3); + U = __SHADD16(U, 0); + U = __SHADD16(U, 0); + + /* T = packed((yb + yd), (xb + xd) ) */ + T = __QADD16(T, U); + + /* writing the butterfly processed i0 sample */ + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + _SIMD32_OFFSET(pSi0) = __SHADD16(R, T); + pSi0 += 2; + + /* R = packed((ya + yc) - (yb + yd), (xa + xc)- (xb + xd)) */ + R = __QSUB16(R, T); + + /* co2 & si2 are read from SIMD Coefficient pointer */ + C2 = _SIMD32_OFFSET(pCoef16 + (4u * ic)); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* xc' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) */ + out1 = __SMUAD(C2, R) >> 16u; + /* yc' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + out2 = __SMUSDX(C2, R); + +#else + + /* xc' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + out1 = __SMUSDX(R, C2) >> 16u; + /* yc' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) */ + out2 = __SMUAD(C2, R); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Reading i0+fftLen/4 */ + /* T = packed(yb, xb) */ + T = _SIMD32_OFFSET(pSi1); + T = __SHADD16(T, 0); + T = __SHADD16(T, 0); + + /* writing the butterfly processed i0 + fftLen/4 sample */ + /* writing output(xc', yc') in little endian format */ + _SIMD32_OFFSET(pSi1) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSi1 += 2; + + /* Butterfly calculations */ + /* U = packed(yd, xd) */ + U = _SIMD32_OFFSET(pSi3); + U = __SHADD16(U, 0); + U = __SHADD16(U, 0); + + /* T = packed(yb-yd, xb-xd) */ + T = __QSUB16(T, U); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* R = packed((ya-yc) + (xb- xd) , (xa-xc) - (yb-yd)) */ + R = __QASX(S, T); + /* S = packed((ya-yc) - (xb- xd), (xa-xc) + (yb-yd)) */ + S = __QSAX(S, T); + +#else + + /* R = packed((ya-yc) + (xb- xd) , (xa-xc) - (yb-yd)) */ + R = __QSAX(S, T); + /* S = packed((ya-yc) - (xb- xd), (xa-xc) + (yb-yd)) */ + S = __QASX(S, T); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* co1 & si1 are read from SIMD Coefficient pointer */ + C1 = _SIMD32_OFFSET(pCoef16 + (2u * ic)); + /* Butterfly process for the i0+fftLen/2 sample */ + +#ifndef ARM_MATH_BIG_ENDIAN + + /* xb' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) */ + out1 = __SMUAD(C1, S) >> 16u; + /* yb' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) */ + out2 = __SMUSDX(C1, S); + +#else + + /* xb' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) */ + out1 = __SMUSDX(S, C1) >> 16u; + /* yb' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) */ + out2 = __SMUAD(C1, S); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* writing output(xb', yb') in little endian format */ + _SIMD32_OFFSET(pSi2) = + ((out2) & 0xFFFF0000) | ((out1) & 0x0000FFFF); + pSi2 += 2; + + + /* co3 & si3 are read from SIMD Coefficient pointer */ + C3 = _SIMD32_OFFSET(pCoef16 + (6u * ic)); + /* Butterfly process for the i0+3fftLen/4 sample */ + +#ifndef ARM_MATH_BIG_ENDIAN + + /* xd' = (xa-yb-xc+yd)* co3 + (ya+xb-yc-xd)* (si3) */ + out1 = __SMUAD(C3, R) >> 16u; + /* yd' = (ya+xb-yc-xd)* co3 - (xa-yb-xc+yd)* (si3) */ + out2 = __SMUSDX(C3, R); + +#else + + /* xd' = (ya+xb-yc-xd)* co3 - (xa-yb-xc+yd)* (si3) */ + out1 = __SMUSDX(R, C3) >> 16u; + /* yd' = (xa-yb-xc+yd)* co3 + (ya+xb-yc-xd)* (si3) */ + out2 = __SMUAD(C3, R); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* writing output(xd', yd') in little endian format */ + _SIMD32_OFFSET(pSi3) = + ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSi3 += 2; + + /* Twiddle coefficients index modifier */ + ic = ic + twidCoefModifier; + + } while(--j); + /* data is in 4.11(q11) format */ + + /* end of first stage process */ + + + /* start of middle stage process */ + + /* Twiddle coefficients index modifier */ + twidCoefModifier <<= 2u; + + /* Calculation of Middle stage */ + for (k = fftLen / 4u; k > 4u; k >>= 2u) + { + /* Initializations for the middle stage */ + n1 = n2; + n2 >>= 2u; + ic = 0u; + + for (j = 0u; j <= (n2 - 1u); j++) + { + /* index calculation for the coefficients */ + C1 = _SIMD32_OFFSET(pCoef16 + (2u * ic)); + C2 = _SIMD32_OFFSET(pCoef16 + (4u * ic)); + C3 = _SIMD32_OFFSET(pCoef16 + (6u * ic)); + + /* Twiddle coefficients index modifier */ + ic = ic + twidCoefModifier; + + pSi0 = pSrc16 + 2 * j; + pSi1 = pSi0 + 2 * n2; + pSi2 = pSi1 + 2 * n2; + pSi3 = pSi2 + 2 * n2; + + /* Butterfly implementation */ + for (i0 = j; i0 < fftLen; i0 += n1) + { + /* Reading i0, i0+fftLen/2 inputs */ + /* Read ya (real), xa(imag) input */ + T = _SIMD32_OFFSET(pSi0); + + /* Read yc (real), xc(imag) input */ + S = _SIMD32_OFFSET(pSi2); + + /* R = packed( (ya + yc), (xa + xc)) */ + R = __QADD16(T, S); + + /* S = packed((ya - yc), (xa - xc)) */ + S = __QSUB16(T, S); + + /* Reading i0+fftLen/4 , i0+3fftLen/4 inputs */ + /* Read yb (real), xb(imag) input */ + T = _SIMD32_OFFSET(pSi1); + + /* Read yd (real), xd(imag) input */ + U = _SIMD32_OFFSET(pSi3); + + /* T = packed( (yb + yd), (xb + xd)) */ + T = __QADD16(T, U); + + /* writing the butterfly processed i0 sample */ + + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + out1 = __SHADD16(R, T); + out1 = __SHADD16(out1, 0); + _SIMD32_OFFSET(pSi0) = out1; + pSi0 += 2 * n1; + + /* R = packed( (ya + yc) - (yb + yd), (xa + xc) - (xb + xd)) */ + R = __SHSUB16(R, T); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* (ya-yb+yc-yd)* (si2) + (xa-xb+xc-xd)* co2 */ + out1 = __SMUAD(C2, R) >> 16u; + + /* (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + out2 = __SMUSDX(C2, R); + +#else + + /* (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + out1 = __SMUSDX(R, C2) >> 16u; + + /* (ya-yb+yc-yd)* (si2) + (xa-xb+xc-xd)* co2 */ + out2 = __SMUAD(C2, R); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Reading i0+3fftLen/4 */ + /* Read yb (real), xb(imag) input */ + T = _SIMD32_OFFSET(pSi1); + + /* writing the butterfly processed i0 + fftLen/4 sample */ + /* xc' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) */ + /* yc' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + _SIMD32_OFFSET(pSi1) = + ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSi1 += 2 * n1; + + /* Butterfly calculations */ + + /* Read yd (real), xd(imag) input */ + U = _SIMD32_OFFSET(pSi3); + + /* T = packed(yb-yd, xb-xd) */ + T = __QSUB16(T, U); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* R = packed((ya-yc) + (xb- xd) , (xa-xc) - (yb-yd)) */ + R = __SHASX(S, T); + + /* S = packed((ya-yc) - (xb- xd), (xa-xc) + (yb-yd)) */ + S = __SHSAX(S, T); + + + /* Butterfly process for the i0+fftLen/2 sample */ + out1 = __SMUAD(C1, S) >> 16u; + out2 = __SMUSDX(C1, S); + +#else + + /* R = packed((ya-yc) + (xb- xd) , (xa-xc) - (yb-yd)) */ + R = __SHSAX(S, T); + + /* S = packed((ya-yc) - (xb- xd), (xa-xc) + (yb-yd)) */ + S = __SHASX(S, T); + + + /* Butterfly process for the i0+fftLen/2 sample */ + out1 = __SMUSDX(S, C1) >> 16u; + out2 = __SMUAD(C1, S); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* xb' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) */ + /* yb' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) */ + _SIMD32_OFFSET(pSi2) = + ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSi2 += 2 * n1; + + /* Butterfly process for the i0+3fftLen/4 sample */ + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUAD(C3, R) >> 16u; + out2 = __SMUSDX(C3, R); + +#else + + out1 = __SMUSDX(R, C3) >> 16u; + out2 = __SMUAD(C3, R); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* xd' = (xa-yb-xc+yd)* co3 + (ya+xb-yc-xd)* (si3) */ + /* yd' = (ya+xb-yc-xd)* co3 - (xa-yb-xc+yd)* (si3) */ + _SIMD32_OFFSET(pSi3) = + ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSi3 += 2 * n1; + } + } + /* Twiddle coefficients index modifier */ + twidCoefModifier <<= 2u; + } + /* end of middle stage process */ + + + /* data is in 10.6(q6) format for the 1024 point */ + /* data is in 8.8(q8) format for the 256 point */ + /* data is in 6.10(q10) format for the 64 point */ + /* data is in 4.12(q12) format for the 16 point */ + + /* Initializations for the last stage */ + j = fftLen >> 2; + + ptr1 = &pSrc16[0]; + + /* start of last stage process */ + + /* Butterfly implementation */ + do + { + /* Read xa (real), ya(imag) input */ + xaya = *__SIMD32(ptr1)++; + + /* Read xb (real), yb(imag) input */ + xbyb = *__SIMD32(ptr1)++; + + /* Read xc (real), yc(imag) input */ + xcyc = *__SIMD32(ptr1)++; + + /* Read xd (real), yd(imag) input */ + xdyd = *__SIMD32(ptr1)++; + + /* R = packed((ya + yc), (xa + xc)) */ + R = __QADD16(xaya, xcyc); + + /* T = packed((yb + yd), (xb + xd)) */ + T = __QADD16(xbyb, xdyd); + + /* pointer updation for writing */ + ptr1 = ptr1 - 8u; + + + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + *__SIMD32(ptr1)++ = __SHADD16(R, T); + + /* T = packed((yb + yd), (xb + xd)) */ + T = __QADD16(xbyb, xdyd); + + /* xc' = (xa-xb+xc-xd) */ + /* yc' = (ya-yb+yc-yd) */ + *__SIMD32(ptr1)++ = __SHSUB16(R, T); + + /* S = packed((ya - yc), (xa - xc)) */ + S = __QSUB16(xaya, xcyc); + + /* Read yd (real), xd(imag) input */ + /* T = packed( (yb - yd), (xb - xd)) */ + U = __QSUB16(xbyb, xdyd); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* xb' = (xa+yb-xc-yd) */ + /* yb' = (ya-xb-yc+xd) */ + *__SIMD32(ptr1)++ = __SHSAX(S, U); + + + /* xd' = (xa-yb-xc+yd) */ + /* yd' = (ya+xb-yc-xd) */ + *__SIMD32(ptr1)++ = __SHASX(S, U); + +#else + + /* xb' = (xa+yb-xc-yd) */ + /* yb' = (ya-xb-yc+xd) */ + *__SIMD32(ptr1)++ = __SHASX(S, U); + + + /* xd' = (xa-yb-xc+yd) */ + /* yd' = (ya+xb-yc-xd) */ + *__SIMD32(ptr1)++ = __SHSAX(S, U); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + } while(--j); + + /* end of last stage process */ + + /* output is in 11.5(q5) format for the 1024 point */ + /* output is in 9.7(q7) format for the 256 point */ + /* output is in 7.9(q9) format for the 64 point */ + /* output is in 5.11(q11) format for the 16 point */ + + +#else + + /* Run the below code for Cortex-M0 */ + + q15_t R0, R1, S0, S1, T0, T1, U0, U1; + q15_t Co1, Si1, Co2, Si2, Co3, Si3, out1, out2; + uint32_t n1, n2, ic, i0, i1, i2, i3, j, k; + + /* Total process is divided into three stages */ + + /* process first stage, middle stages, & last stage */ + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + + /* n2 = fftLen/4 */ + n2 >>= 2u; + + /* Index for twiddle coefficient */ + ic = 0u; + + /* Index for input read and output write */ + i0 = 0u; + j = n2; + + /* Input is in 1.15(q15) format */ + + /* start of first stage process */ + do + { + /* Butterfly implementation */ + + /* index calculation for the input as, */ + /* pSrc16[i0 + 0], pSrc16[i0 + fftLen/4], pSrc16[i0 + fftLen/2], pSrc16[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Reading i0, i0+fftLen/2 inputs */ + + /* input is down scale by 4 to avoid overflow */ + /* Read ya (real), xa(imag) input */ + T0 = pSrc16[i0 * 2u] >> 2u; + T1 = pSrc16[(i0 * 2u) + 1u] >> 2u; + + /* input is down scale by 4 to avoid overflow */ + /* Read yc (real), xc(imag) input */ + S0 = pSrc16[i2 * 2u] >> 2u; + S1 = pSrc16[(i2 * 2u) + 1u] >> 2u; + + /* R0 = (ya + yc) */ + R0 = __SSAT(T0 + S0, 16u); + /* R1 = (xa + xc) */ + R1 = __SSAT(T1 + S1, 16u); + + /* S0 = (ya - yc) */ + S0 = __SSAT(T0 - S0, 16); + /* S1 = (xa - xc) */ + S1 = __SSAT(T1 - S1, 16); + + /* Reading i0+fftLen/4 , i0+3fftLen/4 inputs */ + /* input is down scale by 4 to avoid overflow */ + /* Read yb (real), xb(imag) input */ + T0 = pSrc16[i1 * 2u] >> 2u; + T1 = pSrc16[(i1 * 2u) + 1u] >> 2u; + + /* input is down scale by 4 to avoid overflow */ + /* Read yd (real), xd(imag) input */ + U0 = pSrc16[i3 * 2u] >> 2u; + U1 = pSrc16[(i3 * 2u) + 1] >> 2u; + + /* T0 = (yb + yd) */ + T0 = __SSAT(T0 + U0, 16u); + /* T1 = (xb + xd) */ + T1 = __SSAT(T1 + U1, 16u); + + /* writing the butterfly processed i0 sample */ + /* ya' = ya + yb + yc + yd */ + /* xa' = xa + xb + xc + xd */ + pSrc16[i0 * 2u] = (R0 >> 1u) + (T0 >> 1u); + pSrc16[(i0 * 2u) + 1u] = (R1 >> 1u) + (T1 >> 1u); + + /* R0 = (ya + yc) - (yb + yd) */ + /* R1 = (xa + xc) - (xb + xd) */ + R0 = __SSAT(R0 - T0, 16u); + R1 = __SSAT(R1 - T1, 16u); + + /* co2 & si2 are read from Coefficient pointer */ + Co2 = pCoef16[2u * ic * 2u]; + Si2 = pCoef16[(2u * ic * 2u) + 1]; + + /* xc' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) */ + out1 = (q15_t) ((Co2 * R0 + Si2 * R1) >> 16u); + /* yc' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + out2 = (q15_t) ((-Si2 * R0 + Co2 * R1) >> 16u); + + /* Reading i0+fftLen/4 */ + /* input is down scale by 4 to avoid overflow */ + /* T0 = yb, T1 = xb */ + T0 = pSrc16[i1 * 2u] >> 2; + T1 = pSrc16[(i1 * 2u) + 1] >> 2; + + /* writing the butterfly processed i0 + fftLen/4 sample */ + /* writing output(xc', yc') in little endian format */ + pSrc16[i1 * 2u] = out1; + pSrc16[(i1 * 2u) + 1] = out2; + + /* Butterfly calculations */ + /* input is down scale by 4 to avoid overflow */ + /* U0 = yd, U1 = xd */ + U0 = pSrc16[i3 * 2u] >> 2; + U1 = pSrc16[(i3 * 2u) + 1] >> 2; + /* T0 = yb-yd */ + T0 = __SSAT(T0 - U0, 16); + /* T1 = xb-xd */ + T1 = __SSAT(T1 - U1, 16); + + /* R1 = (ya-yc) + (xb- xd), R0 = (xa-xc) - (yb-yd)) */ + R0 = (q15_t) __SSAT((q31_t) (S0 - T1), 16); + R1 = (q15_t) __SSAT((q31_t) (S1 + T0), 16); + + /* S1 = (ya-yc) - (xb- xd), S0 = (xa-xc) + (yb-yd)) */ + S0 = (q15_t) __SSAT(((q31_t) S0 + T1), 16u); + S1 = (q15_t) __SSAT(((q31_t) S1 - T0), 16u); + + /* co1 & si1 are read from Coefficient pointer */ + Co1 = pCoef16[ic * 2u]; + Si1 = pCoef16[(ic * 2u) + 1]; + /* Butterfly process for the i0+fftLen/2 sample */ + /* xb' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) */ + out1 = (q15_t) ((Si1 * S1 + Co1 * S0) >> 16); + /* yb' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) */ + out2 = (q15_t) ((-Si1 * S0 + Co1 * S1) >> 16); + + /* writing output(xb', yb') in little endian format */ + pSrc16[i2 * 2u] = out1; + pSrc16[(i2 * 2u) + 1] = out2; + + /* Co3 & si3 are read from Coefficient pointer */ + Co3 = pCoef16[3u * (ic * 2u)]; + Si3 = pCoef16[(3u * (ic * 2u)) + 1]; + /* Butterfly process for the i0+3fftLen/4 sample */ + /* xd' = (xa-yb-xc+yd)* Co3 + (ya+xb-yc-xd)* (si3) */ + out1 = (q15_t) ((Si3 * R1 + Co3 * R0) >> 16u); + /* yd' = (ya+xb-yc-xd)* Co3 - (xa-yb-xc+yd)* (si3) */ + out2 = (q15_t) ((-Si3 * R0 + Co3 * R1) >> 16u); + /* writing output(xd', yd') in little endian format */ + pSrc16[i3 * 2u] = out1; + pSrc16[(i3 * 2u) + 1] = out2; + + /* Twiddle coefficients index modifier */ + ic = ic + twidCoefModifier; + + /* Updating input index */ + i0 = i0 + 1u; + + } while(--j); + /* data is in 4.11(q11) format */ + + /* end of first stage process */ + + + /* start of middle stage process */ + + /* Twiddle coefficients index modifier */ + twidCoefModifier <<= 2u; + + /* Calculation of Middle stage */ + for (k = fftLen / 4u; k > 4u; k >>= 2u) + { + /* Initializations for the middle stage */ + n1 = n2; + n2 >>= 2u; + ic = 0u; + + for (j = 0u; j <= (n2 - 1u); j++) + { + /* index calculation for the coefficients */ + Co1 = pCoef16[ic * 2u]; + Si1 = pCoef16[(ic * 2u) + 1u]; + Co2 = pCoef16[2u * (ic * 2u)]; + Si2 = pCoef16[(2u * (ic * 2u)) + 1u]; + Co3 = pCoef16[3u * (ic * 2u)]; + Si3 = pCoef16[(3u * (ic * 2u)) + 1u]; + + /* Twiddle coefficients index modifier */ + ic = ic + twidCoefModifier; + + /* Butterfly implementation */ + for (i0 = j; i0 < fftLen; i0 += n1) + { + /* index calculation for the input as, */ + /* pSrc16[i0 + 0], pSrc16[i0 + fftLen/4], pSrc16[i0 + fftLen/2], pSrc16[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Reading i0, i0+fftLen/2 inputs */ + /* Read ya (real), xa(imag) input */ + T0 = pSrc16[i0 * 2u]; + T1 = pSrc16[(i0 * 2u) + 1u]; + + /* Read yc (real), xc(imag) input */ + S0 = pSrc16[i2 * 2u]; + S1 = pSrc16[(i2 * 2u) + 1u]; + + /* R0 = (ya + yc), R1 = (xa + xc) */ + R0 = __SSAT(T0 + S0, 16); + R1 = __SSAT(T1 + S1, 16); + + /* S0 = (ya - yc), S1 =(xa - xc) */ + S0 = __SSAT(T0 - S0, 16); + S1 = __SSAT(T1 - S1, 16); + + /* Reading i0+fftLen/4 , i0+3fftLen/4 inputs */ + /* Read yb (real), xb(imag) input */ + T0 = pSrc16[i1 * 2u]; + T1 = pSrc16[(i1 * 2u) + 1u]; + + /* Read yd (real), xd(imag) input */ + U0 = pSrc16[i3 * 2u]; + U1 = pSrc16[(i3 * 2u) + 1u]; + + + /* T0 = (yb + yd), T1 = (xb + xd) */ + T0 = __SSAT(T0 + U0, 16); + T1 = __SSAT(T1 + U1, 16); + + /* writing the butterfly processed i0 sample */ + + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + out1 = ((R0 >> 1u) + (T0 >> 1u)) >> 1u; + out2 = ((R1 >> 1u) + (T1 >> 1u)) >> 1u; + + pSrc16[i0 * 2u] = out1; + pSrc16[(2u * i0) + 1u] = out2; + + /* R0 = (ya + yc) - (yb + yd), R1 = (xa + xc) - (xb + xd) */ + R0 = (R0 >> 1u) - (T0 >> 1u); + R1 = (R1 >> 1u) - (T1 >> 1u); + + /* (ya-yb+yc-yd)* (si2) + (xa-xb+xc-xd)* co2 */ + out1 = (q15_t) ((Co2 * R0 + Si2 * R1) >> 16u); + + /* (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + out2 = (q15_t) ((-Si2 * R0 + Co2 * R1) >> 16u); + + /* Reading i0+3fftLen/4 */ + /* Read yb (real), xb(imag) input */ + T0 = pSrc16[i1 * 2u]; + T1 = pSrc16[(i1 * 2u) + 1u]; + + /* writing the butterfly processed i0 + fftLen/4 sample */ + /* xc' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) */ + /* yc' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + pSrc16[i1 * 2u] = out1; + pSrc16[(i1 * 2u) + 1u] = out2; + + /* Butterfly calculations */ + + /* Read yd (real), xd(imag) input */ + U0 = pSrc16[i3 * 2u]; + U1 = pSrc16[(i3 * 2u) + 1u]; + + /* T0 = yb-yd, T1 = xb-xd */ + T0 = __SSAT(T0 - U0, 16); + T1 = __SSAT(T1 - U1, 16); + + /* R0 = (ya-yc) + (xb- xd), R1 = (xa-xc) - (yb-yd)) */ + R0 = (S0 >> 1u) - (T1 >> 1u); + R1 = (S1 >> 1u) + (T0 >> 1u); + + /* S0 = (ya-yc) - (xb- xd), S1 = (xa-xc) + (yb-yd)) */ + S0 = (S0 >> 1u) + (T1 >> 1u); + S1 = (S1 >> 1u) - (T0 >> 1u); + + /* Butterfly process for the i0+fftLen/2 sample */ + out1 = (q15_t) ((Co1 * S0 + Si1 * S1) >> 16u); + + out2 = (q15_t) ((-Si1 * S0 + Co1 * S1) >> 16u); + + /* xb' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) */ + /* yb' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) */ + pSrc16[i2 * 2u] = out1; + pSrc16[(i2 * 2u) + 1u] = out2; + + /* Butterfly process for the i0+3fftLen/4 sample */ + out1 = (q15_t) ((Si3 * R1 + Co3 * R0) >> 16u); + + out2 = (q15_t) ((-Si3 * R0 + Co3 * R1) >> 16u); + /* xd' = (xa-yb-xc+yd)* Co3 + (ya+xb-yc-xd)* (si3) */ + /* yd' = (ya+xb-yc-xd)* Co3 - (xa-yb-xc+yd)* (si3) */ + pSrc16[i3 * 2u] = out1; + pSrc16[(i3 * 2u) + 1u] = out2; + } + } + /* Twiddle coefficients index modifier */ + twidCoefModifier <<= 2u; + } + /* end of middle stage process */ + + + /* data is in 10.6(q6) format for the 1024 point */ + /* data is in 8.8(q8) format for the 256 point */ + /* data is in 6.10(q10) format for the 64 point */ + /* data is in 4.12(q12) format for the 16 point */ + + /* Initializations for the last stage */ + n1 = n2; + n2 >>= 2u; + + /* start of last stage process */ + + /* Butterfly implementation */ + for (i0 = 0u; i0 <= (fftLen - n1); i0 += n1) + { + /* index calculation for the input as, */ + /* pSrc16[i0 + 0], pSrc16[i0 + fftLen/4], pSrc16[i0 + fftLen/2], pSrc16[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Reading i0, i0+fftLen/2 inputs */ + /* Read ya (real), xa(imag) input */ + T0 = pSrc16[i0 * 2u]; + T1 = pSrc16[(i0 * 2u) + 1u]; + + /* Read yc (real), xc(imag) input */ + S0 = pSrc16[i2 * 2u]; + S1 = pSrc16[(i2 * 2u) + 1u]; + + /* R0 = (ya + yc), R1 = (xa + xc) */ + R0 = __SSAT(T0 + S0, 16u); + R1 = __SSAT(T1 + S1, 16u); + + /* S0 = (ya - yc), S1 = (xa - xc) */ + S0 = __SSAT(T0 - S0, 16u); + S1 = __SSAT(T1 - S1, 16u); + + /* Reading i0+fftLen/4 , i0+3fftLen/4 inputs */ + /* Read yb (real), xb(imag) input */ + T0 = pSrc16[i1 * 2u]; + T1 = pSrc16[(i1 * 2u) + 1u]; + /* Read yd (real), xd(imag) input */ + U0 = pSrc16[i3 * 2u]; + U1 = pSrc16[(i3 * 2u) + 1u]; + + /* T0 = (yb + yd), T1 = (xb + xd)) */ + T0 = __SSAT(T0 + U0, 16u); + T1 = __SSAT(T1 + U1, 16u); + + /* writing the butterfly processed i0 sample */ + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + pSrc16[i0 * 2u] = (R0 >> 1u) + (T0 >> 1u); + pSrc16[(i0 * 2u) + 1u] = (R1 >> 1u) + (T1 >> 1u); + + /* R0 = (ya + yc) - (yb + yd), R1 = (xa + xc) - (xb + xd) */ + R0 = (R0 >> 1u) - (T0 >> 1u); + R1 = (R1 >> 1u) - (T1 >> 1u); + /* Read yb (real), xb(imag) input */ + T0 = pSrc16[i1 * 2u]; + T1 = pSrc16[(i1 * 2u) + 1u]; + + /* writing the butterfly processed i0 + fftLen/4 sample */ + /* xc' = (xa-xb+xc-xd) */ + /* yc' = (ya-yb+yc-yd) */ + pSrc16[i1 * 2u] = R0; + pSrc16[(i1 * 2u) + 1u] = R1; + + /* Read yd (real), xd(imag) input */ + U0 = pSrc16[i3 * 2u]; + U1 = pSrc16[(i3 * 2u) + 1u]; + /* T0 = (yb - yd), T1 = (xb - xd) */ + T0 = __SSAT(T0 - U0, 16u); + T1 = __SSAT(T1 - U1, 16u); + + /* writing the butterfly processed i0 + fftLen/2 sample */ + /* xb' = (xa+yb-xc-yd) */ + /* yb' = (ya-xb-yc+xd) */ + pSrc16[i2 * 2u] = (S0 >> 1u) + (T1 >> 1u); + pSrc16[(i2 * 2u) + 1u] = (S1 >> 1u) - (T0 >> 1u); + + /* writing the butterfly processed i0 + 3fftLen/4 sample */ + /* xd' = (xa-yb-xc+yd) */ + /* yd' = (ya+xb-yc-xd) */ + pSrc16[i3 * 2u] = (S0 >> 1u) - (T1 >> 1u); + pSrc16[(i3 * 2u) + 1u] = (S1 >> 1u) + (T0 >> 1u); + + } + + /* end of last stage process */ + + /* output is in 11.5(q5) format for the 1024 point */ + /* output is in 9.7(q7) format for the 256 point */ + /* output is in 7.9(q9) format for the 64 point */ + /* output is in 5.11(q11) format for the 16 point */ + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + + +/** + * @brief Core function for the Q15 CIFFT butterfly process. + * @param[in, out] *pSrc16 points to the in-place buffer of Q15 data type. + * @param[in] fftLen length of the FFT. + * @param[in] *pCoef16 points to twiddle coefficient buffer. + * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + +/* +* Radix-4 IFFT algorithm used is : +* +* CIFFT uses same twiddle coefficients as CFFT function +* x[k] = x[n] + (j)k * x[n + fftLen/4] + (-1)k * x[n+fftLen/2] + (-j)k * x[n+3*fftLen/4] +* +* +* IFFT is implemented with following changes in equations from FFT +* +* Input real and imaginary data: +* x(n) = xa + j * ya +* x(n+N/4 ) = xb + j * yb +* x(n+N/2 ) = xc + j * yc +* x(n+3N 4) = xd + j * yd +* +* +* Output real and imaginary data: +* x(4r) = xa'+ j * ya' +* x(4r+1) = xb'+ j * yb' +* x(4r+2) = xc'+ j * yc' +* x(4r+3) = xd'+ j * yd' +* +* +* Twiddle factors for radix-4 IFFT: +* Wn = co1 + j * (si1) +* W2n = co2 + j * (si2) +* W3n = co3 + j * (si3) + +* The real and imaginary output values for the radix-4 butterfly are +* xa' = xa + xb + xc + xd +* ya' = ya + yb + yc + yd +* xb' = (xa-yb-xc+yd)* co1 - (ya+xb-yc-xd)* (si1) +* yb' = (ya+xb-yc-xd)* co1 + (xa-yb-xc+yd)* (si1) +* xc' = (xa-xb+xc-xd)* co2 - (ya-yb+yc-yd)* (si2) +* yc' = (ya-yb+yc-yd)* co2 + (xa-xb+xc-xd)* (si2) +* xd' = (xa+yb-xc-yd)* co3 - (ya-xb-yc+xd)* (si3) +* yd' = (ya-xb-yc+xd)* co3 + (xa+yb-xc-yd)* (si3) +* +*/ + +void arm_radix4_butterfly_inverse_q15( + q15_t * pSrc16, + uint32_t fftLen, + q15_t * pCoef16, + uint32_t twidCoefModifier) +{ + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + q31_t R, S, T, U; + q31_t C1, C2, C3, out1, out2; + uint32_t n1, n2, ic, i0, j, k; + + q15_t *ptr1; + q15_t *pSi0; + q15_t *pSi1; + q15_t *pSi2; + q15_t *pSi3; + + q31_t xaya, xbyb, xcyc, xdyd; + + /* Total process is divided into three stages */ + + /* process first stage, middle stages, & last stage */ + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + + /* n2 = fftLen/4 */ + n2 >>= 2u; + + /* Index for twiddle coefficient */ + ic = 0u; + + /* Index for input read and output write */ + j = n2; + + pSi0 = pSrc16; + pSi1 = pSi0 + 2 * n2; + pSi2 = pSi1 + 2 * n2; + pSi3 = pSi2 + 2 * n2; + + /* Input is in 1.15(q15) format */ + + /* start of first stage process */ + do + { + /* Butterfly implementation */ + + /* Reading i0, i0+fftLen/2 inputs */ + /* Read ya (real), xa(imag) input */ + T = _SIMD32_OFFSET(pSi0); + T = __SHADD16(T, 0); + T = __SHADD16(T, 0); + + /* Read yc (real), xc(imag) input */ + S = _SIMD32_OFFSET(pSi2); + S = __SHADD16(S, 0); + S = __SHADD16(S, 0); + + /* R = packed((ya + yc), (xa + xc) ) */ + R = __QADD16(T, S); + + /* S = packed((ya - yc), (xa - xc) ) */ + S = __QSUB16(T, S); + + /* Reading i0+fftLen/4 , i0+3fftLen/4 inputs */ + /* Read yb (real), xb(imag) input */ + T = _SIMD32_OFFSET(pSi1); + T = __SHADD16(T, 0); + T = __SHADD16(T, 0); + + /* Read yd (real), xd(imag) input */ + U = _SIMD32_OFFSET(pSi3); + U = __SHADD16(U, 0); + U = __SHADD16(U, 0); + + /* T = packed((yb + yd), (xb + xd) ) */ + T = __QADD16(T, U); + + /* writing the butterfly processed i0 sample */ + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + _SIMD32_OFFSET(pSi0) = __SHADD16(R, T); + pSi0 += 2; + + /* R = packed((ya + yc) - (yb + yd), (xa + xc)- (xb + xd)) */ + R = __QSUB16(R, T); + + /* co2 & si2 are read from SIMD Coefficient pointer */ + C2 = _SIMD32_OFFSET(pCoef16 + (4u * ic)); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* xc' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) */ + out1 = __SMUSD(C2, R) >> 16u; + /* yc' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + out2 = __SMUADX(C2, R); + +#else + + /* xc' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + out1 = __SMUADX(C2, R) >> 16u; + /* yc' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) */ + out2 = __SMUSD(__QSUB16(0, C2), R); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Reading i0+fftLen/4 */ + /* T = packed(yb, xb) */ + T = _SIMD32_OFFSET(pSi1); + T = __SHADD16(T, 0); + T = __SHADD16(T, 0); + + /* writing the butterfly processed i0 + fftLen/4 sample */ + /* writing output(xc', yc') in little endian format */ + _SIMD32_OFFSET(pSi1) = + (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSi1 += 2; + + /* Butterfly calculations */ + /* U = packed(yd, xd) */ + U = _SIMD32_OFFSET(pSi3); + U = __SHADD16(U, 0); + U = __SHADD16(U, 0); + + /* T = packed(yb-yd, xb-xd) */ + T = __QSUB16(T, U); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* R = packed((ya-yc) + (xb- xd) , (xa-xc) - (yb-yd)) */ + R = __QSAX(S, T); + /* S = packed((ya-yc) + (xb- xd), (xa-xc) - (yb-yd)) */ + S = __QASX(S, T); + +#else + + /* R = packed((ya-yc) + (xb- xd) , (xa-xc) - (yb-yd)) */ + R = __QASX(S, T); + /* S = packed((ya-yc) - (xb- xd), (xa-xc) + (yb-yd)) */ + S = __QSAX(S, T); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* co1 & si1 are read from SIMD Coefficient pointer */ + C1 = _SIMD32_OFFSET(pCoef16 + (2u * ic)); + /* Butterfly process for the i0+fftLen/2 sample */ + +#ifndef ARM_MATH_BIG_ENDIAN + + /* xb' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) */ + out1 = __SMUSD(C1, S) >> 16u; + /* yb' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) */ + out2 = __SMUADX(C1, S); + +#else + + /* xb' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) */ + out1 = __SMUADX(C1, S) >> 16u; + /* yb' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) */ + out2 = __SMUSD(__QSUB16(0, C1), S); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* writing output(xb', yb') in little endian format */ + _SIMD32_OFFSET(pSi2) = + ((out2) & 0xFFFF0000) | ((out1) & 0x0000FFFF); + pSi2 += 2; + + + /* co3 & si3 are read from SIMD Coefficient pointer */ + C3 = _SIMD32_OFFSET(pCoef16 + (6u * ic)); + /* Butterfly process for the i0+3fftLen/4 sample */ + +#ifndef ARM_MATH_BIG_ENDIAN + + /* xd' = (xa-yb-xc+yd)* co3 + (ya+xb-yc-xd)* (si3) */ + out1 = __SMUSD(C3, R) >> 16u; + /* yd' = (ya+xb-yc-xd)* co3 - (xa-yb-xc+yd)* (si3) */ + out2 = __SMUADX(C3, R); + +#else + + /* xd' = (ya+xb-yc-xd)* co3 - (xa-yb-xc+yd)* (si3) */ + out1 = __SMUADX(C3, R) >> 16u; + /* yd' = (xa-yb-xc+yd)* co3 + (ya+xb-yc-xd)* (si3) */ + out2 = __SMUSD(__QSUB16(0, C3), R); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* writing output(xd', yd') in little endian format */ + _SIMD32_OFFSET(pSi3) = + ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSi3 += 2; + + /* Twiddle coefficients index modifier */ + ic = ic + twidCoefModifier; + + } while(--j); + /* data is in 4.11(q11) format */ + + /* end of first stage process */ + + + /* start of middle stage process */ + + /* Twiddle coefficients index modifier */ + twidCoefModifier <<= 2u; + + /* Calculation of Middle stage */ + for (k = fftLen / 4u; k > 4u; k >>= 2u) + { + /* Initializations for the middle stage */ + n1 = n2; + n2 >>= 2u; + ic = 0u; + + for (j = 0u; j <= (n2 - 1u); j++) + { + /* index calculation for the coefficients */ + C1 = _SIMD32_OFFSET(pCoef16 + (2u * ic)); + C2 = _SIMD32_OFFSET(pCoef16 + (4u * ic)); + C3 = _SIMD32_OFFSET(pCoef16 + (6u * ic)); + + /* Twiddle coefficients index modifier */ + ic = ic + twidCoefModifier; + + pSi0 = pSrc16 + 2 * j; + pSi1 = pSi0 + 2 * n2; + pSi2 = pSi1 + 2 * n2; + pSi3 = pSi2 + 2 * n2; + + /* Butterfly implementation */ + for (i0 = j; i0 < fftLen; i0 += n1) + { + /* Reading i0, i0+fftLen/2 inputs */ + /* Read ya (real), xa(imag) input */ + T = _SIMD32_OFFSET(pSi0); + + /* Read yc (real), xc(imag) input */ + S = _SIMD32_OFFSET(pSi2); + + /* R = packed( (ya + yc), (xa + xc)) */ + R = __QADD16(T, S); + + /* S = packed((ya - yc), (xa - xc)) */ + S = __QSUB16(T, S); + + /* Reading i0+fftLen/4 , i0+3fftLen/4 inputs */ + /* Read yb (real), xb(imag) input */ + T = _SIMD32_OFFSET(pSi1); + + /* Read yd (real), xd(imag) input */ + U = _SIMD32_OFFSET(pSi3); + + /* T = packed( (yb + yd), (xb + xd)) */ + T = __QADD16(T, U); + + /* writing the butterfly processed i0 sample */ + + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + out1 = __SHADD16(R, T); + out1 = __SHADD16(out1, 0); + _SIMD32_OFFSET(pSi0) = out1; + pSi0 += 2 * n1; + + /* R = packed( (ya + yc) - (yb + yd), (xa + xc) - (xb + xd)) */ + R = __SHSUB16(R, T); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* (ya-yb+yc-yd)* (si2) + (xa-xb+xc-xd)* co2 */ + out1 = __SMUSD(C2, R) >> 16u; + + /* (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + out2 = __SMUADX(C2, R); + +#else + + /* (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + out1 = __SMUADX(R, C2) >> 16u; + + /* (ya-yb+yc-yd)* (si2) + (xa-xb+xc-xd)* co2 */ + out2 = __SMUSD(__QSUB16(0, C2), R); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Reading i0+3fftLen/4 */ + /* Read yb (real), xb(imag) input */ + T = _SIMD32_OFFSET(pSi1); + + /* writing the butterfly processed i0 + fftLen/4 sample */ + /* xc' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) */ + /* yc' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) */ + _SIMD32_OFFSET(pSi1) = + ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSi1 += 2 * n1; + + /* Butterfly calculations */ + + /* Read yd (real), xd(imag) input */ + U = _SIMD32_OFFSET(pSi3); + + /* T = packed(yb-yd, xb-xd) */ + T = __QSUB16(T, U); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* R = packed((ya-yc) + (xb- xd) , (xa-xc) - (yb-yd)) */ + R = __SHSAX(S, T); + + /* S = packed((ya-yc) - (xb- xd), (xa-xc) + (yb-yd)) */ + S = __SHASX(S, T); + + + /* Butterfly process for the i0+fftLen/2 sample */ + out1 = __SMUSD(C1, S) >> 16u; + out2 = __SMUADX(C1, S); + +#else + + /* R = packed((ya-yc) + (xb- xd) , (xa-xc) - (yb-yd)) */ + R = __SHASX(S, T); + + /* S = packed((ya-yc) - (xb- xd), (xa-xc) + (yb-yd)) */ + S = __SHSAX(S, T); + + + /* Butterfly process for the i0+fftLen/2 sample */ + out1 = __SMUADX(S, C1) >> 16u; + out2 = __SMUSD(__QSUB16(0, C1), S); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* xb' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) */ + /* yb' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) */ + _SIMD32_OFFSET(pSi2) = + ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSi2 += 2 * n1; + + /* Butterfly process for the i0+3fftLen/4 sample */ + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __SMUSD(C3, R) >> 16u; + out2 = __SMUADX(C3, R); + +#else + + out1 = __SMUADX(C3, R) >> 16u; + out2 = __SMUSD(__QSUB16(0, C3), R); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* xd' = (xa-yb-xc+yd)* co3 + (ya+xb-yc-xd)* (si3) */ + /* yd' = (ya+xb-yc-xd)* co3 - (xa-yb-xc+yd)* (si3) */ + _SIMD32_OFFSET(pSi3) = + ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF); + pSi3 += 2 * n1; + } + } + /* Twiddle coefficients index modifier */ + twidCoefModifier <<= 2u; + } + /* end of middle stage process */ + + /* data is in 10.6(q6) format for the 1024 point */ + /* data is in 8.8(q8) format for the 256 point */ + /* data is in 6.10(q10) format for the 64 point */ + /* data is in 4.12(q12) format for the 16 point */ + + /* Initializations for the last stage */ + j = fftLen >> 2; + + ptr1 = &pSrc16[0]; + + /* start of last stage process */ + + /* Butterfly implementation */ + do + { + /* Read xa (real), ya(imag) input */ + xaya = *__SIMD32(ptr1)++; + + /* Read xb (real), yb(imag) input */ + xbyb = *__SIMD32(ptr1)++; + + /* Read xc (real), yc(imag) input */ + xcyc = *__SIMD32(ptr1)++; + + /* Read xd (real), yd(imag) input */ + xdyd = *__SIMD32(ptr1)++; + + /* R = packed((ya + yc), (xa + xc)) */ + R = __QADD16(xaya, xcyc); + + /* T = packed((yb + yd), (xb + xd)) */ + T = __QADD16(xbyb, xdyd); + + /* pointer updation for writing */ + ptr1 = ptr1 - 8u; + + + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + *__SIMD32(ptr1)++ = __SHADD16(R, T); + + /* T = packed((yb + yd), (xb + xd)) */ + T = __QADD16(xbyb, xdyd); + + /* xc' = (xa-xb+xc-xd) */ + /* yc' = (ya-yb+yc-yd) */ + *__SIMD32(ptr1)++ = __SHSUB16(R, T); + + /* S = packed((ya - yc), (xa - xc)) */ + S = __QSUB16(xaya, xcyc); + + /* Read yd (real), xd(imag) input */ + /* T = packed( (yb - yd), (xb - xd)) */ + U = __QSUB16(xbyb, xdyd); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* xb' = (xa+yb-xc-yd) */ + /* yb' = (ya-xb-yc+xd) */ + *__SIMD32(ptr1)++ = __SHASX(S, U); + + + /* xd' = (xa-yb-xc+yd) */ + /* yd' = (ya+xb-yc-xd) */ + *__SIMD32(ptr1)++ = __SHSAX(S, U); + +#else + + /* xb' = (xa+yb-xc-yd) */ + /* yb' = (ya-xb-yc+xd) */ + *__SIMD32(ptr1)++ = __SHSAX(S, U); + + + /* xd' = (xa-yb-xc+yd) */ + /* yd' = (ya+xb-yc-xd) */ + *__SIMD32(ptr1)++ = __SHASX(S, U); + + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + } while(--j); + + /* end of last stage process */ + + /* output is in 11.5(q5) format for the 1024 point */ + /* output is in 9.7(q7) format for the 256 point */ + /* output is in 7.9(q9) format for the 64 point */ + /* output is in 5.11(q11) format for the 16 point */ + + +#else + + /* Run the below code for Cortex-M0 */ + + q15_t R0, R1, S0, S1, T0, T1, U0, U1; + q15_t Co1, Si1, Co2, Si2, Co3, Si3, out1, out2; + uint32_t n1, n2, ic, i0, i1, i2, i3, j, k; + + /* Total process is divided into three stages */ + + /* process first stage, middle stages, & last stage */ + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + + /* n2 = fftLen/4 */ + n2 >>= 2u; + + /* Index for twiddle coefficient */ + ic = 0u; + + /* Index for input read and output write */ + i0 = 0u; + + j = n2; + + /* Input is in 1.15(q15) format */ + + /* Start of first stage process */ + do + { + /* Butterfly implementation */ + + /* index calculation for the input as, */ + /* pSrc16[i0 + 0], pSrc16[i0 + fftLen/4], pSrc16[i0 + fftLen/2], pSrc16[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Reading i0, i0+fftLen/2 inputs */ + /* input is down scale by 4 to avoid overflow */ + /* Read ya (real), xa(imag) input */ + T0 = pSrc16[i0 * 2u] >> 2u; + T1 = pSrc16[(i0 * 2u) + 1u] >> 2u; + /* input is down scale by 4 to avoid overflow */ + /* Read yc (real), xc(imag) input */ + S0 = pSrc16[i2 * 2u] >> 2u; + S1 = pSrc16[(i2 * 2u) + 1u] >> 2u; + + /* R0 = (ya + yc), R1 = (xa + xc) */ + R0 = __SSAT(T0 + S0, 16u); + R1 = __SSAT(T1 + S1, 16u); + /* S0 = (ya - yc), S1 = (xa - xc) */ + S0 = __SSAT(T0 - S0, 16u); + S1 = __SSAT(T1 - S1, 16u); + + /* Reading i0+fftLen/4 , i0+3fftLen/4 inputs */ + /* input is down scale by 4 to avoid overflow */ + /* Read yb (real), xb(imag) input */ + T0 = pSrc16[i1 * 2u] >> 2u; + T1 = pSrc16[(i1 * 2u) + 1u] >> 2u; + /* Read yd (real), xd(imag) input */ + /* input is down scale by 4 to avoid overflow */ + U0 = pSrc16[i3 * 2u] >> 2u; + U1 = pSrc16[(i3 * 2u) + 1u] >> 2u; + + /* T0 = (yb + yd), T1 = (xb + xd) */ + T0 = __SSAT(T0 + U0, 16u); + T1 = __SSAT(T1 + U1, 16u); + + /* writing the butterfly processed i0 sample */ + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + pSrc16[i0 * 2u] = (R0 >> 1u) + (T0 >> 1u); + pSrc16[(i0 * 2u) + 1u] = (R1 >> 1u) + (T1 >> 1u); + + /* R0 = (ya + yc) - (yb + yd), R1 = (xa + xc)- (xb + xd) */ + R0 = __SSAT(R0 - T0, 16u); + R1 = __SSAT(R1 - T1, 16u); + /* co2 & si2 are read from Coefficient pointer */ + Co2 = pCoef16[2u * ic * 2u]; + Si2 = pCoef16[(2u * ic * 2u) + 1u]; + /* xc' = (xa-xb+xc-xd)* co2 - (ya-yb+yc-yd)* (si2) */ + out1 = (q15_t) ((Co2 * R0 - Si2 * R1) >> 16u); + /* yc' = (ya-yb+yc-yd)* co2 + (xa-xb+xc-xd)* (si2) */ + out2 = (q15_t) ((Si2 * R0 + Co2 * R1) >> 16u); + + /* Reading i0+fftLen/4 */ + /* input is down scale by 4 to avoid overflow */ + /* T0 = yb, T1 = xb */ + T0 = pSrc16[i1 * 2u] >> 2u; + T1 = pSrc16[(i1 * 2u) + 1u] >> 2u; + + /* writing the butterfly processed i0 + fftLen/4 sample */ + /* writing output(xc', yc') in little endian format */ + pSrc16[i1 * 2u] = out1; + pSrc16[(i1 * 2u) + 1u] = out2; + + /* Butterfly calculations */ + /* input is down scale by 4 to avoid overflow */ + /* U0 = yd, U1 = xd) */ + U0 = pSrc16[i3 * 2u] >> 2u; + U1 = pSrc16[(i3 * 2u) + 1u] >> 2u; + + /* T0 = yb-yd, T1 = xb-xd) */ + T0 = __SSAT(T0 - U0, 16u); + T1 = __SSAT(T1 - U1, 16u); + /* R0 = (ya-yc) - (xb- xd) , R1 = (xa-xc) + (yb-yd) */ + R0 = (q15_t) __SSAT((q31_t) (S0 + T1), 16); + R1 = (q15_t) __SSAT((q31_t) (S1 - T0), 16); + /* S = (ya-yc) + (xb- xd), S1 = (xa-xc) - (yb-yd) */ + S0 = (q15_t) __SSAT((q31_t) (S0 - T1), 16); + S1 = (q15_t) __SSAT((q31_t) (S1 + T0), 16); + + /* co1 & si1 are read from Coefficient pointer */ + Co1 = pCoef16[ic * 2u]; + Si1 = pCoef16[(ic * 2u) + 1u]; + /* Butterfly process for the i0+fftLen/2 sample */ + /* xb' = (xa-yb-xc+yd)* co1 - (ya+xb-yc-xd)* (si1) */ + out1 = (q15_t) ((Co1 * S0 - Si1 * S1) >> 16u); + /* yb' = (ya+xb-yc-xd)* co1 + (xa-yb-xc+yd)* (si1) */ + out2 = (q15_t) ((Si1 * S0 + Co1 * S1) >> 16u); + /* writing output(xb', yb') in little endian format */ + pSrc16[i2 * 2u] = out1; + pSrc16[(i2 * 2u) + 1u] = out2; + + /* Co3 & si3 are read from Coefficient pointer */ + Co3 = pCoef16[3u * ic * 2u]; + Si3 = pCoef16[(3u * ic * 2u) + 1u]; + /* Butterfly process for the i0+3fftLen/4 sample */ + /* xd' = (xa+yb-xc-yd)* Co3 - (ya-xb-yc+xd)* (si3) */ + out1 = (q15_t) ((Co3 * R0 - Si3 * R1) >> 16u); + /* yd' = (ya-xb-yc+xd)* Co3 + (xa+yb-xc-yd)* (si3) */ + out2 = (q15_t) ((Si3 * R0 + Co3 * R1) >> 16u); + /* writing output(xd', yd') in little endian format */ + pSrc16[i3 * 2u] = out1; + pSrc16[(i3 * 2u) + 1u] = out2; + + /* Twiddle coefficients index modifier */ + ic = ic + twidCoefModifier; + + /* Updating input index */ + i0 = i0 + 1u; + + } while(--j); + + /* End of first stage process */ + + /* data is in 4.11(q11) format */ + + + /* Start of Middle stage process */ + + /* Twiddle coefficients index modifier */ + twidCoefModifier <<= 2u; + + /* Calculation of Middle stage */ + for (k = fftLen / 4u; k > 4u; k >>= 2u) + { + /* Initializations for the middle stage */ + n1 = n2; + n2 >>= 2u; + ic = 0u; + + for (j = 0u; j <= (n2 - 1u); j++) + { + /* index calculation for the coefficients */ + Co1 = pCoef16[ic * 2u]; + Si1 = pCoef16[(ic * 2u) + 1u]; + Co2 = pCoef16[2u * ic * 2u]; + Si2 = pCoef16[2u * ic * 2u + 1u]; + Co3 = pCoef16[3u * ic * 2u]; + Si3 = pCoef16[(3u * ic * 2u) + 1u]; + + /* Twiddle coefficients index modifier */ + ic = ic + twidCoefModifier; + + /* Butterfly implementation */ + for (i0 = j; i0 < fftLen; i0 += n1) + { + /* index calculation for the input as, */ + /* pSrc16[i0 + 0], pSrc16[i0 + fftLen/4], pSrc16[i0 + fftLen/2], pSrc16[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Reading i0, i0+fftLen/2 inputs */ + /* Read ya (real), xa(imag) input */ + T0 = pSrc16[i0 * 2u]; + T1 = pSrc16[(i0 * 2u) + 1u]; + + /* Read yc (real), xc(imag) input */ + S0 = pSrc16[i2 * 2u]; + S1 = pSrc16[(i2 * 2u) + 1u]; + + + /* R0 = (ya + yc), R1 = (xa + xc) */ + R0 = __SSAT(T0 + S0, 16u); + R1 = __SSAT(T1 + S1, 16u); + /* S0 = (ya - yc), S1 = (xa - xc) */ + S0 = __SSAT(T0 - S0, 16u); + S1 = __SSAT(T1 - S1, 16u); + + /* Reading i0+fftLen/4 , i0+3fftLen/4 inputs */ + /* Read yb (real), xb(imag) input */ + T0 = pSrc16[i1 * 2u]; + T1 = pSrc16[(i1 * 2u) + 1u]; + + /* Read yd (real), xd(imag) input */ + U0 = pSrc16[i3 * 2u]; + U1 = pSrc16[(i3 * 2u) + 1u]; + + /* T0 = (yb + yd), T1 = (xb + xd) */ + T0 = __SSAT(T0 + U0, 16u); + T1 = __SSAT(T1 + U1, 16u); + + /* writing the butterfly processed i0 sample */ + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + pSrc16[i0 * 2u] = ((R0 >> 1u) + (T0 >> 1u)) >> 1u; + pSrc16[(i0 * 2u) + 1u] = ((R1 >> 1u) + (T1 >> 1u)) >> 1u; + + /* R0 = (ya + yc) - (yb + yd), R1 = (xa + xc) - (xb + xd) */ + R0 = (R0 >> 1u) - (T0 >> 1u); + R1 = (R1 >> 1u) - (T1 >> 1u); + + /* (ya-yb+yc-yd)* (si2) - (xa-xb+xc-xd)* co2 */ + out1 = (q15_t) ((Co2 * R0 - Si2 * R1) >> 16); + /* (ya-yb+yc-yd)* co2 + (xa-xb+xc-xd)* (si2) */ + out2 = (q15_t) ((Si2 * R0 + Co2 * R1) >> 16); + + /* Reading i0+3fftLen/4 */ + /* Read yb (real), xb(imag) input */ + T0 = pSrc16[i1 * 2u]; + T1 = pSrc16[(i1 * 2u) + 1u]; + + /* writing the butterfly processed i0 + fftLen/4 sample */ + /* xc' = (xa-xb+xc-xd)* co2 - (ya-yb+yc-yd)* (si2) */ + /* yc' = (ya-yb+yc-yd)* co2 + (xa-xb+xc-xd)* (si2) */ + pSrc16[i1 * 2u] = out1; + pSrc16[(i1 * 2u) + 1u] = out2; + + /* Butterfly calculations */ + /* Read yd (real), xd(imag) input */ + U0 = pSrc16[i3 * 2u]; + U1 = pSrc16[(i3 * 2u) + 1u]; + + /* T0 = yb-yd, T1 = xb-xd) */ + T0 = __SSAT(T0 - U0, 16u); + T1 = __SSAT(T1 - U1, 16u); + + /* R0 = (ya-yc) - (xb- xd) , R1 = (xa-xc) + (yb-yd) */ + R0 = (S0 >> 1u) + (T1 >> 1u); + R1 = (S1 >> 1u) - (T0 >> 1u); + + /* S1 = (ya-yc) + (xb- xd), S1 = (xa-xc) - (yb-yd) */ + S0 = (S0 >> 1u) - (T1 >> 1u); + S1 = (S1 >> 1u) + (T0 >> 1u); + + /* Butterfly process for the i0+fftLen/2 sample */ + out1 = (q15_t) ((Co1 * S0 - Si1 * S1) >> 16u); + out2 = (q15_t) ((Si1 * S0 + Co1 * S1) >> 16u); + /* xb' = (xa-yb-xc+yd)* co1 - (ya+xb-yc-xd)* (si1) */ + /* yb' = (ya+xb-yc-xd)* co1 + (xa-yb-xc+yd)* (si1) */ + pSrc16[i2 * 2u] = out1; + pSrc16[(i2 * 2u) + 1u] = out2; + + /* Butterfly process for the i0+3fftLen/4 sample */ + out1 = (q15_t) ((Co3 * R0 - Si3 * R1) >> 16u); + + out2 = (q15_t) ((Si3 * R0 + Co3 * R1) >> 16u); + /* xd' = (xa+yb-xc-yd)* Co3 - (ya-xb-yc+xd)* (si3) */ + /* yd' = (ya-xb-yc+xd)* Co3 + (xa+yb-xc-yd)* (si3) */ + pSrc16[i3 * 2u] = out1; + pSrc16[(i3 * 2u) + 1u] = out2; + + + } + } + /* Twiddle coefficients index modifier */ + twidCoefModifier <<= 2u; + } + /* End of Middle stages process */ + + + /* data is in 10.6(q6) format for the 1024 point */ + /* data is in 8.8(q8) format for the 256 point */ + /* data is in 6.10(q10) format for the 64 point */ + /* data is in 4.12(q12) format for the 16 point */ + + /* start of last stage process */ + + + /* Initializations for the last stage */ + n1 = n2; + n2 >>= 2u; + + /* Butterfly implementation */ + for (i0 = 0u; i0 <= (fftLen - n1); i0 += n1) + { + /* index calculation for the input as, */ + /* pSrc16[i0 + 0], pSrc16[i0 + fftLen/4], pSrc16[i0 + fftLen/2], pSrc16[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Reading i0, i0+fftLen/2 inputs */ + /* Read ya (real), xa(imag) input */ + T0 = pSrc16[i0 * 2u]; + T1 = pSrc16[(i0 * 2u) + 1u]; + /* Read yc (real), xc(imag) input */ + S0 = pSrc16[i2 * 2u]; + S1 = pSrc16[(i2 * 2u) + 1u]; + + /* R0 = (ya + yc), R1 = (xa + xc) */ + R0 = __SSAT(T0 + S0, 16u); + R1 = __SSAT(T1 + S1, 16u); + /* S0 = (ya - yc), S1 = (xa - xc) */ + S0 = __SSAT(T0 - S0, 16u); + S1 = __SSAT(T1 - S1, 16u); + + /* Reading i0+fftLen/4 , i0+3fftLen/4 inputs */ + /* Read yb (real), xb(imag) input */ + T0 = pSrc16[i1 * 2u]; + T1 = pSrc16[(i1 * 2u) + 1u]; + /* Read yd (real), xd(imag) input */ + U0 = pSrc16[i3 * 2u]; + U1 = pSrc16[(i3 * 2u) + 1u]; + + /* T0 = (yb + yd), T1 = (xb + xd) */ + T0 = __SSAT(T0 + U0, 16u); + T1 = __SSAT(T1 + U1, 16u); + + /* writing the butterfly processed i0 sample */ + /* xa' = xa + xb + xc + xd */ + /* ya' = ya + yb + yc + yd */ + pSrc16[i0 * 2u] = (R0 >> 1u) + (T0 >> 1u); + pSrc16[(i0 * 2u) + 1u] = (R1 >> 1u) + (T1 >> 1u); + + /* R0 = (ya + yc) - (yb + yd), R1 = (xa + xc) - (xb + xd) */ + R0 = (R0 >> 1u) - (T0 >> 1u); + R1 = (R1 >> 1u) - (T1 >> 1u); + + /* Read yb (real), xb(imag) input */ + T0 = pSrc16[i1 * 2u]; + T1 = pSrc16[(i1 * 2u) + 1u]; + + /* writing the butterfly processed i0 + fftLen/4 sample */ + /* xc' = (xa-xb+xc-xd) */ + /* yc' = (ya-yb+yc-yd) */ + pSrc16[i1 * 2u] = R0; + pSrc16[(i1 * 2u) + 1u] = R1; + + /* Read yd (real), xd(imag) input */ + U0 = pSrc16[i3 * 2u]; + U1 = pSrc16[(i3 * 2u) + 1u]; + /* T0 = (yb - yd), T1 = (xb - xd) */ + T0 = __SSAT(T0 - U0, 16u); + T1 = __SSAT(T1 - U1, 16u); + + /* writing the butterfly processed i0 + fftLen/2 sample */ + /* xb' = (xa-yb-xc+yd) */ + /* yb' = (ya+xb-yc-xd) */ + pSrc16[i2 * 2u] = (S0 >> 1u) - (T1 >> 1u); + pSrc16[(i2 * 2u) + 1u] = (S1 >> 1u) + (T0 >> 1u); + + + /* writing the butterfly processed i0 + 3fftLen/4 sample */ + /* xd' = (xa+yb-xc-yd) */ + /* yd' = (ya-xb-yc+xd) */ + pSrc16[i3 * 2u] = (S0 >> 1u) + (T1 >> 1u); + pSrc16[(i3 * 2u) + 1u] = (S1 >> 1u) - (T0 >> 1u); + } + /* end of last stage process */ + + /* output is in 11.5(q5) format for the 1024 point */ + /* output is in 9.7(q7) format for the 256 point */ + /* output is in 7.9(q9) format for the 64 point */ + /* output is in 5.11(q11) format for the 16 point */ + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1404 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix4_q31.c +* +* Description: This file has function definition of Radix-4 FFT & IFFT function and +* In-place bit reversal using bit reversal table +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +void arm_radix4_butterfly_inverse_q31( +q31_t * pSrc, +uint32_t fftLen, +q31_t * pCoef, +uint32_t twidCoefModifier); + +void arm_radix4_butterfly_q31( +q31_t * pSrc, +uint32_t fftLen, +q31_t * pCoef, +uint32_t twidCoefModifier); + +void arm_bitreversal_q31( +q31_t * pSrc, +uint32_t fftLen, +uint16_t bitRevFactor, +uint16_t * pBitRevTab); + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup ComplexFFT + * @{ + */ + +/** + * @details + * @brief Processing function for the Q31 CFFT/CIFFT. + * @deprecated Do not use this function. It has been superseded by \ref arm_cfft_q31 and will be removed + * @param[in] *S points to an instance of the Q31 CFFT/CIFFT structure. + * @param[in, out] *pSrc points to the complex data buffer of size 2*fftLen. Processing occurs in-place. + * @return none. + * + * \par Input and output formats: + * \par + * Internally input is downscaled by 2 for every stage to avoid saturations inside CFFT/CIFFT process. + * Hence the output format is different for different FFT sizes. + * The input and output formats for different FFT sizes and number of bits to upscale are mentioned in the tables below for CFFT and CIFFT: + * \par + * \image html CFFTQ31.gif "Input and Output Formats for Q31 CFFT" + * \image html CIFFTQ31.gif "Input and Output Formats for Q31 CIFFT" + * + */ + +void arm_cfft_radix4_q31( + const arm_cfft_radix4_instance_q31 * S, + q31_t * pSrc) +{ + if(S->ifftFlag == 1u) + { + /* Complex IFFT radix-4 */ + arm_radix4_butterfly_inverse_q31(pSrc, S->fftLen, S->pTwiddle, + S->twidCoefModifier); + } + else + { + /* Complex FFT radix-4 */ + arm_radix4_butterfly_q31(pSrc, S->fftLen, S->pTwiddle, + S->twidCoefModifier); + } + + + if(S->bitReverseFlag == 1u) + { + /* Bit Reversal */ + arm_bitreversal_q31(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable); + } + +} + +/** + * @} end of ComplexFFT group + */ + +/* +* Radix-4 FFT algorithm used is : +* +* Input real and imaginary data: +* x(n) = xa + j * ya +* x(n+N/4 ) = xb + j * yb +* x(n+N/2 ) = xc + j * yc +* x(n+3N 4) = xd + j * yd +* +* +* Output real and imaginary data: +* x(4r) = xa'+ j * ya' +* x(4r+1) = xb'+ j * yb' +* x(4r+2) = xc'+ j * yc' +* x(4r+3) = xd'+ j * yd' +* +* +* Twiddle factors for radix-4 FFT: +* Wn = co1 + j * (- si1) +* W2n = co2 + j * (- si2) +* W3n = co3 + j * (- si3) +* +* Butterfly implementation: +* xa' = xa + xb + xc + xd +* ya' = ya + yb + yc + yd +* xb' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) +* yb' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) +* xc' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) +* yc' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) +* xd' = (xa-yb-xc+yd)* co3 + (ya+xb-yc-xd)* (si3) +* yd' = (ya+xb-yc-xd)* co3 - (xa-yb-xc+yd)* (si3) +* +*/ + +/** + * @brief Core function for the Q31 CFFT butterfly process. + * @param[in, out] *pSrc points to the in-place buffer of Q31 data type. + * @param[in] fftLen length of the FFT. + * @param[in] *pCoef points to twiddle coefficient buffer. + * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + +void arm_radix4_butterfly_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pCoef, + uint32_t twidCoefModifier) +{ +#if defined(ARM_MATH_CM7) + uint32_t n1, n2, ia1, ia2, ia3, i0, i1, i2, i3, j, k; + q31_t t1, t2, r1, r2, s1, s2, co1, co2, co3, si1, si2, si3; + + q31_t xa, xb, xc, xd; + q31_t ya, yb, yc, yd; + q31_t xa_out, xb_out, xc_out, xd_out; + q31_t ya_out, yb_out, yc_out, yd_out; + + q31_t *ptr1; + q63_t xaya, xbyb, xcyc, xdyd; + /* Total process is divided into three stages */ + + /* process first stage, middle stages, & last stage */ + + + /* start of first stage process */ + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + /* n2 = fftLen/4 */ + n2 >>= 2u; + i0 = 0u; + ia1 = 0u; + + j = n2; + + /* Calculation of first stage */ + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2u], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* input is in 1.31(q31) format and provide 4 guard bits for the input */ + + /* Butterfly implementation */ + /* xa + xc */ + r1 = (pSrc[(2u * i0)] >> 4u) + (pSrc[(2u * i2)] >> 4u); + /* xa - xc */ + r2 = (pSrc[2u * i0] >> 4u) - (pSrc[2u * i2] >> 4u); + + /* xb + xd */ + t1 = (pSrc[2u * i1] >> 4u) + (pSrc[2u * i3] >> 4u); + + /* ya + yc */ + s1 = (pSrc[(2u * i0) + 1u] >> 4u) + (pSrc[(2u * i2) + 1u] >> 4u); + /* ya - yc */ + s2 = (pSrc[(2u * i0) + 1u] >> 4u) - (pSrc[(2u * i2) + 1u] >> 4u); + + /* xa' = xa + xb + xc + xd */ + pSrc[2u * i0] = (r1 + t1); + /* (xa + xc) - (xb + xd) */ + r1 = r1 - t1; + /* yb + yd */ + t2 = (pSrc[(2u * i1) + 1u] >> 4u) + (pSrc[(2u * i3) + 1u] >> 4u); + + /* ya' = ya + yb + yc + yd */ + pSrc[(2u * i0) + 1u] = (s1 + t2); + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* yb - yd */ + t1 = (pSrc[(2u * i1) + 1u] >> 4u) - (pSrc[(2u * i3) + 1u] >> 4u); + /* xb - xd */ + t2 = (pSrc[2u * i1] >> 4u) - (pSrc[2u * i3] >> 4u); + + /* index calculation for the coefficients */ + ia2 = 2u * ia1; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + + /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = (((int32_t) (((q63_t) r1 * co2) >> 32)) + + ((int32_t) (((q63_t) s1 * si2) >> 32))) << 1u; + + /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ + pSrc[(2u * i1) + 1u] = (((int32_t) (((q63_t) s1 * co2) >> 32)) - + ((int32_t) (((q63_t) r1 * si2) >> 32))) << 1u; + + /* (xa - xc) + (yb - yd) */ + r1 = r2 + t1; + /* (xa - xc) - (yb - yd) */ + r2 = r2 - t1; + + /* (ya - yc) - (xb - xd) */ + s1 = s2 - t2; + /* (ya - yc) + (xb - xd) */ + s2 = s2 + t2; + + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + + /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = (((int32_t) (((q63_t) r1 * co1) >> 32)) + + ((int32_t) (((q63_t) s1 * si1) >> 32))) << 1u; + + /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = (((int32_t) (((q63_t) s1 * co1) >> 32)) - + ((int32_t) (((q63_t) r1 * si1) >> 32))) << 1u; + + /* index calculation for the coefficients */ + ia3 = 3u * ia1; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + + /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ + pSrc[2u * i3] = (((int32_t) (((q63_t) r2 * co3) >> 32)) + + ((int32_t) (((q63_t) s2 * si3) >> 32))) << 1u; + + /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = (((int32_t) (((q63_t) s2 * co3) >> 32)) - + ((int32_t) (((q63_t) r2 * si3) >> 32))) << 1u; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + /* Updating input index */ + i0 = i0 + 1u; + + } while(--j); + + /* end of first stage process */ + + /* data is in 5.27(q27) format */ + + + /* start of Middle stages process */ + + + /* each stage in middle stages provides two down scaling of the input */ + + twidCoefModifier <<= 2u; + + + for (k = fftLen / 4u; k > 4u; k >>= 2u) + { + /* Initializations for the first stage */ + n1 = n2; + n2 >>= 2u; + ia1 = 0u; + + /* Calculation of first stage */ + for (j = 0u; j <= (n2 - 1u); j++) + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + for (i0 = j; i0 < fftLen; i0 += n1) + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2u], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Butterfly implementation */ + /* xa + xc */ + r1 = pSrc[2u * i0] + pSrc[2u * i2]; + /* xa - xc */ + r2 = pSrc[2u * i0] - pSrc[2u * i2]; + + /* ya + yc */ + s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u]; + /* ya - yc */ + s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u]; + + /* xb + xd */ + t1 = pSrc[2u * i1] + pSrc[2u * i3]; + + /* xa' = xa + xb + xc + xd */ + pSrc[2u * i0] = (r1 + t1) >> 2u; + /* xa + xc -(xb + xd) */ + r1 = r1 - t1; + + /* yb + yd */ + t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u]; + /* ya' = ya + yb + yc + yd */ + pSrc[(2u * i0) + 1u] = (s1 + t2) >> 2u; + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* (yb - yd) */ + t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u]; + /* (xb - xd) */ + t2 = pSrc[2u * i1] - pSrc[2u * i3]; + + /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = (((int32_t) (((q63_t) r1 * co2) >> 32)) + + ((int32_t) (((q63_t) s1 * si2) >> 32))) >> 1u; + + /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ + pSrc[(2u * i1) + 1u] = (((int32_t) (((q63_t) s1 * co2) >> 32)) - + ((int32_t) (((q63_t) r1 * si2) >> 32))) >> 1u; + + /* (xa - xc) + (yb - yd) */ + r1 = r2 + t1; + /* (xa - xc) - (yb - yd) */ + r2 = r2 - t1; + + /* (ya - yc) - (xb - xd) */ + s1 = s2 - t2; + /* (ya - yc) + (xb - xd) */ + s2 = s2 + t2; + + /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = (((int32_t) (((q63_t) r1 * co1) >> 32)) + + ((int32_t) (((q63_t) s1 * si1) >> 32))) >> 1u; + + /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = (((int32_t) (((q63_t) s1 * co1) >> 32)) - + ((int32_t) (((q63_t) r1 * si1) >> 32))) >> 1u; + + /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ + pSrc[2u * i3] = (((int32_t) (((q63_t) r2 * co3) >> 32)) + + ((int32_t) (((q63_t) s2 * si3) >> 32))) >> 1u; + + /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = (((int32_t) (((q63_t) s2 * co3) >> 32)) - + ((int32_t) (((q63_t) r2 * si3) >> 32))) >> 1u; + } + } + twidCoefModifier <<= 2u; + } +#else + uint32_t n1, n2, ia1, ia2, ia3, i0, j, k; + q31_t t1, t2, r1, r2, s1, s2, co1, co2, co3, si1, si2, si3; + + q31_t xa, xb, xc, xd; + q31_t ya, yb, yc, yd; + q31_t xa_out, xb_out, xc_out, xd_out; + q31_t ya_out, yb_out, yc_out, yd_out; + + q31_t *ptr1; + q31_t *pSi0; + q31_t *pSi1; + q31_t *pSi2; + q31_t *pSi3; + q63_t xaya, xbyb, xcyc, xdyd; + /* Total process is divided into three stages */ + + /* process first stage, middle stages, & last stage */ + + + /* start of first stage process */ + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + /* n2 = fftLen/4 */ + n2 >>= 2u; + + ia1 = 0u; + + j = n2; + + pSi0 = pSrc; + pSi1 = pSi0 + 2 * n2; + pSi2 = pSi1 + 2 * n2; + pSi3 = pSi2 + 2 * n2; + + /* Calculation of first stage */ + do + { + /* input is in 1.31(q31) format and provide 4 guard bits for the input */ + + /* Butterfly implementation */ + /* xa + xc */ + r1 = (pSi0[0] >> 4u) + (pSi2[0] >> 4u); + /* xa - xc */ + r2 = (pSi0[0] >> 4u) - (pSi2[0] >> 4u); + + /* xb + xd */ + t1 = (pSi1[0] >> 4u) + (pSi3[0] >> 4u); + + /* ya + yc */ + s1 = (pSi0[1] >> 4u) + (pSi2[1] >> 4u); + /* ya - yc */ + s2 = (pSi0[1] >> 4u) - (pSi2[1] >> 4u); + + /* xa' = xa + xb + xc + xd */ + *pSi0++ = (r1 + t1); + /* (xa + xc) - (xb + xd) */ + r1 = r1 - t1; + /* yb + yd */ + t2 = (pSi1[1] >> 4u) + (pSi3[1] >> 4u); + + /* ya' = ya + yb + yc + yd */ + *pSi0++ = (s1 + t2); + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* yb - yd */ + t1 = (pSi1[1] >> 4u) - (pSi3[1] >> 4u); + /* xb - xd */ + t2 = (pSi1[0] >> 4u) - (pSi3[0] >> 4u); + + /* index calculation for the coefficients */ + ia2 = 2u * ia1; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + + /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ + *pSi1++ = (((int32_t) (((q63_t) r1 * co2) >> 32)) + + ((int32_t) (((q63_t) s1 * si2) >> 32))) << 1u; + + /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ + *pSi1++ = (((int32_t) (((q63_t) s1 * co2) >> 32)) - + ((int32_t) (((q63_t) r1 * si2) >> 32))) << 1u; + + /* (xa - xc) + (yb - yd) */ + r1 = r2 + t1; + /* (xa - xc) - (yb - yd) */ + r2 = r2 - t1; + + /* (ya - yc) - (xb - xd) */ + s1 = s2 - t2; + /* (ya - yc) + (xb - xd) */ + s2 = s2 + t2; + + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + + /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ + *pSi2++ = (((int32_t) (((q63_t) r1 * co1) >> 32)) + + ((int32_t) (((q63_t) s1 * si1) >> 32))) << 1u; + + /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ + *pSi2++ = (((int32_t) (((q63_t) s1 * co1) >> 32)) - + ((int32_t) (((q63_t) r1 * si1) >> 32))) << 1u; + + /* index calculation for the coefficients */ + ia3 = 3u * ia1; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + + /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ + *pSi3++ = (((int32_t) (((q63_t) r2 * co3) >> 32)) + + ((int32_t) (((q63_t) s2 * si3) >> 32))) << 1u; + + /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ + *pSi3++ = (((int32_t) (((q63_t) s2 * co3) >> 32)) - + ((int32_t) (((q63_t) r2 * si3) >> 32))) << 1u; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + } while(--j); + + /* end of first stage process */ + + /* data is in 5.27(q27) format */ + + + /* start of Middle stages process */ + + + /* each stage in middle stages provides two down scaling of the input */ + + twidCoefModifier <<= 2u; + + + for (k = fftLen / 4u; k > 4u; k >>= 2u) + { + /* Initializations for the first stage */ + n1 = n2; + n2 >>= 2u; + ia1 = 0u; + + /* Calculation of first stage */ + for (j = 0u; j <= (n2 - 1u); j++) + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + pSi0 = pSrc + 2 * j; + pSi1 = pSi0 + 2 * n2; + pSi2 = pSi1 + 2 * n2; + pSi3 = pSi2 + 2 * n2; + + for (i0 = j; i0 < fftLen; i0 += n1) + { + /* Butterfly implementation */ + /* xa + xc */ + r1 = pSi0[0] + pSi2[0]; + + /* xa - xc */ + r2 = pSi0[0] - pSi2[0]; + + + /* ya + yc */ + s1 = pSi0[1] + pSi2[1]; + + /* ya - yc */ + s2 = pSi0[1] - pSi2[1]; + + + /* xb + xd */ + t1 = pSi1[0] + pSi3[0]; + + + /* xa' = xa + xb + xc + xd */ + pSi0[0] = (r1 + t1) >> 2u; + /* xa + xc -(xb + xd) */ + r1 = r1 - t1; + + /* yb + yd */ + t2 = pSi1[1] + pSi3[1]; + + /* ya' = ya + yb + yc + yd */ + pSi0[1] = (s1 + t2) >> 2u; + pSi0 += 2 * n1; + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* (yb - yd) */ + t1 = pSi1[1] - pSi3[1]; + + /* (xb - xd) */ + t2 = pSi1[0] - pSi3[0]; + + + /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ + pSi1[0] = (((int32_t) (((q63_t) r1 * co2) >> 32)) + + ((int32_t) (((q63_t) s1 * si2) >> 32))) >> 1u; + + /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ + pSi1[1] = (((int32_t) (((q63_t) s1 * co2) >> 32)) - + ((int32_t) (((q63_t) r1 * si2) >> 32))) >> 1u; + pSi1 += 2 * n1; + + /* (xa - xc) + (yb - yd) */ + r1 = r2 + t1; + /* (xa - xc) - (yb - yd) */ + r2 = r2 - t1; + + /* (ya - yc) - (xb - xd) */ + s1 = s2 - t2; + /* (ya - yc) + (xb - xd) */ + s2 = s2 + t2; + + /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ + pSi2[0] = (((int32_t) (((q63_t) r1 * co1) >> 32)) + + ((int32_t) (((q63_t) s1 * si1) >> 32))) >> 1u; + + /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ + pSi2[1] = (((int32_t) (((q63_t) s1 * co1) >> 32)) - + ((int32_t) (((q63_t) r1 * si1) >> 32))) >> 1u; + pSi2 += 2 * n1; + + /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ + pSi3[0] = (((int32_t) (((q63_t) r2 * co3) >> 32)) + + ((int32_t) (((q63_t) s2 * si3) >> 32))) >> 1u; + + /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ + pSi3[1] = (((int32_t) (((q63_t) s2 * co3) >> 32)) - + ((int32_t) (((q63_t) r2 * si3) >> 32))) >> 1u; + pSi3 += 2 * n1; + } + } + twidCoefModifier <<= 2u; + } +#endif + + /* End of Middle stages process */ + + /* data is in 11.21(q21) format for the 1024 point as there are 3 middle stages */ + /* data is in 9.23(q23) format for the 256 point as there are 2 middle stages */ + /* data is in 7.25(q25) format for the 64 point as there are 1 middle stage */ + /* data is in 5.27(q27) format for the 16 point as there are no middle stages */ + + + /* start of Last stage process */ + /* Initializations for the last stage */ + j = fftLen >> 2; + ptr1 = &pSrc[0]; + + /* Calculations of last stage */ + do + { + +#ifndef ARM_MATH_BIG_ENDIAN + + /* Read xa (real), ya(imag) input */ + xaya = *__SIMD64(ptr1)++; + xa = (q31_t) xaya; + ya = (q31_t) (xaya >> 32); + + /* Read xb (real), yb(imag) input */ + xbyb = *__SIMD64(ptr1)++; + xb = (q31_t) xbyb; + yb = (q31_t) (xbyb >> 32); + + /* Read xc (real), yc(imag) input */ + xcyc = *__SIMD64(ptr1)++; + xc = (q31_t) xcyc; + yc = (q31_t) (xcyc >> 32); + + /* Read xc (real), yc(imag) input */ + xdyd = *__SIMD64(ptr1)++; + xd = (q31_t) xdyd; + yd = (q31_t) (xdyd >> 32); + +#else + + /* Read xa (real), ya(imag) input */ + xaya = *__SIMD64(ptr1)++; + ya = (q31_t) xaya; + xa = (q31_t) (xaya >> 32); + + /* Read xb (real), yb(imag) input */ + xbyb = *__SIMD64(ptr1)++; + yb = (q31_t) xbyb; + xb = (q31_t) (xbyb >> 32); + + /* Read xc (real), yc(imag) input */ + xcyc = *__SIMD64(ptr1)++; + yc = (q31_t) xcyc; + xc = (q31_t) (xcyc >> 32); + + /* Read xc (real), yc(imag) input */ + xdyd = *__SIMD64(ptr1)++; + yd = (q31_t) xdyd; + xd = (q31_t) (xdyd >> 32); + + +#endif + + /* xa' = xa + xb + xc + xd */ + xa_out = xa + xb + xc + xd; + + /* ya' = ya + yb + yc + yd */ + ya_out = ya + yb + yc + yd; + + /* pointer updation for writing */ + ptr1 = ptr1 - 8u; + + /* writing xa' and ya' */ + *ptr1++ = xa_out; + *ptr1++ = ya_out; + + xc_out = (xa - xb + xc - xd); + yc_out = (ya - yb + yc - yd); + + /* writing xc' and yc' */ + *ptr1++ = xc_out; + *ptr1++ = yc_out; + + xb_out = (xa + yb - xc - yd); + yb_out = (ya - xb - yc + xd); + + /* writing xb' and yb' */ + *ptr1++ = xb_out; + *ptr1++ = yb_out; + + xd_out = (xa - yb - xc + yd); + yd_out = (ya + xb - yc - xd); + + /* writing xd' and yd' */ + *ptr1++ = xd_out; + *ptr1++ = yd_out; + + + } while(--j); + + /* output is in 11.21(q21) format for the 1024 point */ + /* output is in 9.23(q23) format for the 256 point */ + /* output is in 7.25(q25) format for the 64 point */ + /* output is in 5.27(q27) format for the 16 point */ + + /* End of last stage process */ + +} + + +/** + * @brief Core function for the Q31 CIFFT butterfly process. + * @param[in, out] *pSrc points to the in-place buffer of Q31 data type. + * @param[in] fftLen length of the FFT. + * @param[in] *pCoef points to twiddle coefficient buffer. + * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + + +/* +* Radix-4 IFFT algorithm used is : +* +* CIFFT uses same twiddle coefficients as CFFT Function +* x[k] = x[n] + (j)k * x[n + fftLen/4] + (-1)k * x[n+fftLen/2] + (-j)k * x[n+3*fftLen/4] +* +* +* IFFT is implemented with following changes in equations from FFT +* +* Input real and imaginary data: +* x(n) = xa + j * ya +* x(n+N/4 ) = xb + j * yb +* x(n+N/2 ) = xc + j * yc +* x(n+3N 4) = xd + j * yd +* +* +* Output real and imaginary data: +* x(4r) = xa'+ j * ya' +* x(4r+1) = xb'+ j * yb' +* x(4r+2) = xc'+ j * yc' +* x(4r+3) = xd'+ j * yd' +* +* +* Twiddle factors for radix-4 IFFT: +* Wn = co1 + j * (si1) +* W2n = co2 + j * (si2) +* W3n = co3 + j * (si3) + +* The real and imaginary output values for the radix-4 butterfly are +* xa' = xa + xb + xc + xd +* ya' = ya + yb + yc + yd +* xb' = (xa-yb-xc+yd)* co1 - (ya+xb-yc-xd)* (si1) +* yb' = (ya+xb-yc-xd)* co1 + (xa-yb-xc+yd)* (si1) +* xc' = (xa-xb+xc-xd)* co2 - (ya-yb+yc-yd)* (si2) +* yc' = (ya-yb+yc-yd)* co2 + (xa-xb+xc-xd)* (si2) +* xd' = (xa+yb-xc-yd)* co3 - (ya-xb-yc+xd)* (si3) +* yd' = (ya-xb-yc+xd)* co3 + (xa+yb-xc-yd)* (si3) +* +*/ + +void arm_radix4_butterfly_inverse_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pCoef, + uint32_t twidCoefModifier) +{ +#if defined(ARM_MATH_CM7) + uint32_t n1, n2, ia1, ia2, ia3, i0, i1, i2, i3, j, k; + q31_t t1, t2, r1, r2, s1, s2, co1, co2, co3, si1, si2, si3; + q31_t xa, xb, xc, xd; + q31_t ya, yb, yc, yd; + q31_t xa_out, xb_out, xc_out, xd_out; + q31_t ya_out, yb_out, yc_out, yd_out; + + q31_t *ptr1; + q63_t xaya, xbyb, xcyc, xdyd; + + /* input is be 1.31(q31) format for all FFT sizes */ + /* Total process is divided into three stages */ + /* process first stage, middle stages, & last stage */ + + /* Start of first stage process */ + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + /* n2 = fftLen/4 */ + n2 >>= 2u; + i0 = 0u; + ia1 = 0u; + + j = n2; + + do + { + + /* input is in 1.31(q31) format and provide 4 guard bits for the input */ + + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2u], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Butterfly implementation */ + /* xa + xc */ + r1 = (pSrc[2u * i0] >> 4u) + (pSrc[2u * i2] >> 4u); + /* xa - xc */ + r2 = (pSrc[2u * i0] >> 4u) - (pSrc[2u * i2] >> 4u); + + /* xb + xd */ + t1 = (pSrc[2u * i1] >> 4u) + (pSrc[2u * i3] >> 4u); + + /* ya + yc */ + s1 = (pSrc[(2u * i0) + 1u] >> 4u) + (pSrc[(2u * i2) + 1u] >> 4u); + /* ya - yc */ + s2 = (pSrc[(2u * i0) + 1u] >> 4u) - (pSrc[(2u * i2) + 1u] >> 4u); + + /* xa' = xa + xb + xc + xd */ + pSrc[2u * i0] = (r1 + t1); + /* (xa + xc) - (xb + xd) */ + r1 = r1 - t1; + /* yb + yd */ + t2 = (pSrc[(2u * i1) + 1u] >> 4u) + (pSrc[(2u * i3) + 1u] >> 4u); + /* ya' = ya + yb + yc + yd */ + pSrc[(2u * i0) + 1u] = (s1 + t2); + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* yb - yd */ + t1 = (pSrc[(2u * i1) + 1u] >> 4u) - (pSrc[(2u * i3) + 1u] >> 4u); + /* xb - xd */ + t2 = (pSrc[2u * i1] >> 4u) - (pSrc[2u * i3] >> 4u); + + /* index calculation for the coefficients */ + ia2 = 2u * ia1; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = (((int32_t) (((q63_t) r1 * co2) >> 32)) - + ((int32_t) (((q63_t) s1 * si2) >> 32))) << 1u; + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSrc[2u * i1 + 1u] = (((int32_t) (((q63_t) s1 * co2) >> 32)) + + ((int32_t) (((q63_t) r1 * si2) >> 32))) << 1u; + + /* (xa - xc) - (yb - yd) */ + r1 = r2 - t1; + /* (xa - xc) + (yb - yd) */ + r2 = r2 + t1; + + /* (ya - yc) + (xb - xd) */ + s1 = s2 + t2; + /* (ya - yc) - (xb - xd) */ + s2 = s2 - t2; + + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = (((int32_t) (((q63_t) r1 * co1) >> 32)) - + ((int32_t) (((q63_t) s1 * si1) >> 32))) << 1u; + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = (((int32_t) (((q63_t) s1 * co1) >> 32)) + + ((int32_t) (((q63_t) r1 * si1) >> 32))) << 1u; + + /* index calculation for the coefficients */ + ia3 = 3u * ia1; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSrc[2u * i3] = (((int32_t) (((q63_t) r2 * co3) >> 32)) - + ((int32_t) (((q63_t) s2 * si3) >> 32))) << 1u; + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = (((int32_t) (((q63_t) s2 * co3) >> 32)) + + ((int32_t) (((q63_t) r2 * si3) >> 32))) << 1u; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + /* Updating input index */ + i0 = i0 + 1u; + + } while(--j); + + /* data is in 5.27(q27) format */ + /* each stage provides two down scaling of the input */ + + + /* Start of Middle stages process */ + + twidCoefModifier <<= 2u; + + /* Calculation of second stage to excluding last stage */ + for (k = fftLen / 4u; k > 4u; k >>= 2u) + { + /* Initializations for the first stage */ + n1 = n2; + n2 >>= 2u; + ia1 = 0u; + + for (j = 0; j <= (n2 - 1u); j++) + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + for (i0 = j; i0 < fftLen; i0 += n1) + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2u], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Butterfly implementation */ + /* xa + xc */ + r1 = pSrc[2u * i0] + pSrc[2u * i2]; + /* xa - xc */ + r2 = pSrc[2u * i0] - pSrc[2u * i2]; + + /* ya + yc */ + s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u]; + /* ya - yc */ + s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u]; + + /* xb + xd */ + t1 = pSrc[2u * i1] + pSrc[2u * i3]; + + /* xa' = xa + xb + xc + xd */ + pSrc[2u * i0] = (r1 + t1) >> 2u; + /* xa + xc -(xb + xd) */ + r1 = r1 - t1; + /* yb + yd */ + t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u]; + /* ya' = ya + yb + yc + yd */ + pSrc[(2u * i0) + 1u] = (s1 + t2) >> 2u; + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* (yb - yd) */ + t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u]; + /* (xb - xd) */ + t2 = pSrc[2u * i1] - pSrc[2u * i3]; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSrc[2u * i1] = (((int32_t) (((q63_t) r1 * co2) >> 32u)) - + ((int32_t) (((q63_t) s1 * si2) >> 32u))) >> 1u; + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSrc[(2u * i1) + 1u] = + (((int32_t) (((q63_t) s1 * co2) >> 32u)) + + ((int32_t) (((q63_t) r1 * si2) >> 32u))) >> 1u; + + /* (xa - xc) - (yb - yd) */ + r1 = r2 - t1; + /* (xa - xc) + (yb - yd) */ + r2 = r2 + t1; + + /* (ya - yc) + (xb - xd) */ + s1 = s2 + t2; + /* (ya - yc) - (xb - xd) */ + s2 = s2 - t2; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSrc[2u * i2] = (((int32_t) (((q63_t) r1 * co1) >> 32)) - + ((int32_t) (((q63_t) s1 * si1) >> 32))) >> 1u; + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSrc[(2u * i2) + 1u] = (((int32_t) (((q63_t) s1 * co1) >> 32)) + + ((int32_t) (((q63_t) r1 * si1) >> 32))) >> 1u; + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSrc[(2u * i3)] = (((int32_t) (((q63_t) r2 * co3) >> 32)) - + ((int32_t) (((q63_t) s2 * si3) >> 32))) >> 1u; + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSrc[(2u * i3) + 1u] = (((int32_t) (((q63_t) s2 * co3) >> 32)) + + ((int32_t) (((q63_t) r2 * si3) >> 32))) >> 1u; + } + } + twidCoefModifier <<= 2u; + } +#else + uint32_t n1, n2, ia1, ia2, ia3, i0, j, k; + q31_t t1, t2, r1, r2, s1, s2, co1, co2, co3, si1, si2, si3; + q31_t xa, xb, xc, xd; + q31_t ya, yb, yc, yd; + q31_t xa_out, xb_out, xc_out, xd_out; + q31_t ya_out, yb_out, yc_out, yd_out; + + q31_t *ptr1; + q31_t *pSi0; + q31_t *pSi1; + q31_t *pSi2; + q31_t *pSi3; + q63_t xaya, xbyb, xcyc, xdyd; + + /* input is be 1.31(q31) format for all FFT sizes */ + /* Total process is divided into three stages */ + /* process first stage, middle stages, & last stage */ + + /* Start of first stage process */ + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + /* n2 = fftLen/4 */ + n2 >>= 2u; + + ia1 = 0u; + + j = n2; + + pSi0 = pSrc; + pSi1 = pSi0 + 2 * n2; + pSi2 = pSi1 + 2 * n2; + pSi3 = pSi2 + 2 * n2; + + do + { + /* Butterfly implementation */ + /* xa + xc */ + r1 = (pSi0[0] >> 4u) + (pSi2[0] >> 4u); + /* xa - xc */ + r2 = (pSi0[0] >> 4u) - (pSi2[0] >> 4u); + + /* xb + xd */ + t1 = (pSi1[0] >> 4u) + (pSi3[0] >> 4u); + + /* ya + yc */ + s1 = (pSi0[1] >> 4u) + (pSi2[1] >> 4u); + /* ya - yc */ + s2 = (pSi0[1] >> 4u) - (pSi2[1] >> 4u); + + /* xa' = xa + xb + xc + xd */ + *pSi0++ = (r1 + t1); + /* (xa + xc) - (xb + xd) */ + r1 = r1 - t1; + /* yb + yd */ + t2 = (pSi1[1] >> 4u) + (pSi3[1] >> 4u); + /* ya' = ya + yb + yc + yd */ + *pSi0++ = (s1 + t2); + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* yb - yd */ + t1 = (pSi1[1] >> 4u) - (pSi3[1] >> 4u); + /* xb - xd */ + t2 = (pSi1[0] >> 4u) - (pSi3[0] >> 4u); + + /* index calculation for the coefficients */ + ia2 = 2u * ia1; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + *pSi1++ = (((int32_t) (((q63_t) r1 * co2) >> 32)) - + ((int32_t) (((q63_t) s1 * si2) >> 32))) << 1u; + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + *pSi1++ = (((int32_t) (((q63_t) s1 * co2) >> 32)) + + ((int32_t) (((q63_t) r1 * si2) >> 32))) << 1u; + + /* (xa - xc) - (yb - yd) */ + r1 = r2 - t1; + /* (xa - xc) + (yb - yd) */ + r2 = r2 + t1; + + /* (ya - yc) + (xb - xd) */ + s1 = s2 + t2; + /* (ya - yc) - (xb - xd) */ + s2 = s2 - t2; + + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + *pSi2++ = (((int32_t) (((q63_t) r1 * co1) >> 32)) - + ((int32_t) (((q63_t) s1 * si1) >> 32))) << 1u; + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + *pSi2++ = (((int32_t) (((q63_t) s1 * co1) >> 32)) + + ((int32_t) (((q63_t) r1 * si1) >> 32))) << 1u; + + /* index calculation for the coefficients */ + ia3 = 3u * ia1; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + *pSi3++ = (((int32_t) (((q63_t) r2 * co3) >> 32)) - + ((int32_t) (((q63_t) s2 * si3) >> 32))) << 1u; + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + *pSi3++ = (((int32_t) (((q63_t) s2 * co3) >> 32)) + + ((int32_t) (((q63_t) r2 * si3) >> 32))) << 1u; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + } while(--j); + + /* data is in 5.27(q27) format */ + /* each stage provides two down scaling of the input */ + + + /* Start of Middle stages process */ + + twidCoefModifier <<= 2u; + + /* Calculation of second stage to excluding last stage */ + for (k = fftLen / 4u; k > 4u; k >>= 2u) + { + /* Initializations for the first stage */ + n1 = n2; + n2 >>= 2u; + ia1 = 0u; + + for (j = 0; j <= (n2 - 1u); j++) + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2u]; + si1 = pCoef[(ia1 * 2u) + 1u]; + co2 = pCoef[ia2 * 2u]; + si2 = pCoef[(ia2 * 2u) + 1u]; + co3 = pCoef[ia3 * 2u]; + si3 = pCoef[(ia3 * 2u) + 1u]; + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + pSi0 = pSrc + 2 * j; + pSi1 = pSi0 + 2 * n2; + pSi2 = pSi1 + 2 * n2; + pSi3 = pSi2 + 2 * n2; + + for (i0 = j; i0 < fftLen; i0 += n1) + { + /* Butterfly implementation */ + /* xa + xc */ + r1 = pSi0[0] + pSi2[0]; + + /* xa - xc */ + r2 = pSi0[0] - pSi2[0]; + + + /* ya + yc */ + s1 = pSi0[1] + pSi2[1]; + + /* ya - yc */ + s2 = pSi0[1] - pSi2[1]; + + + /* xb + xd */ + t1 = pSi1[0] + pSi3[0]; + + + /* xa' = xa + xb + xc + xd */ + pSi0[0] = (r1 + t1) >> 2u; + /* xa + xc -(xb + xd) */ + r1 = r1 - t1; + /* yb + yd */ + t2 = pSi1[1] + pSi3[1]; + + /* ya' = ya + yb + yc + yd */ + pSi0[1] = (s1 + t2) >> 2u; + pSi0 += 2 * n1; + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* (yb - yd) */ + t1 = pSi1[1] - pSi3[1]; + + /* (xb - xd) */ + t2 = pSi1[0] - pSi3[0]; + + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSi1[0] = (((int32_t) (((q63_t) r1 * co2) >> 32u)) - + ((int32_t) (((q63_t) s1 * si2) >> 32u))) >> 1u; + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSi1[1] = + + (((int32_t) (((q63_t) s1 * co2) >> 32u)) + + ((int32_t) (((q63_t) r1 * si2) >> 32u))) >> 1u; + pSi1 += 2 * n1; + + /* (xa - xc) - (yb - yd) */ + r1 = r2 - t1; + /* (xa - xc) + (yb - yd) */ + r2 = r2 + t1; + + /* (ya - yc) + (xb - xd) */ + s1 = s2 + t2; + /* (ya - yc) - (xb - xd) */ + s2 = s2 - t2; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSi2[0] = (((int32_t) (((q63_t) r1 * co1) >> 32)) - + ((int32_t) (((q63_t) s1 * si1) >> 32))) >> 1u; + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSi2[1] = (((int32_t) (((q63_t) s1 * co1) >> 32)) + + ((int32_t) (((q63_t) r1 * si1) >> 32))) >> 1u; + pSi2 += 2 * n1; + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSi3[0] = (((int32_t) (((q63_t) r2 * co3) >> 32)) - + ((int32_t) (((q63_t) s2 * si3) >> 32))) >> 1u; + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSi3[1] = (((int32_t) (((q63_t) s2 * co3) >> 32)) + + ((int32_t) (((q63_t) r2 * si3) >> 32))) >> 1u; + pSi3 += 2 * n1; + } + } + twidCoefModifier <<= 2u; + } +#endif + + /* End of Middle stages process */ + + /* data is in 11.21(q21) format for the 1024 point as there are 3 middle stages */ + /* data is in 9.23(q23) format for the 256 point as there are 2 middle stages */ + /* data is in 7.25(q25) format for the 64 point as there are 1 middle stage */ + /* data is in 5.27(q27) format for the 16 point as there are no middle stages */ + + + /* Start of last stage process */ + + + /* Initializations for the last stage */ + j = fftLen >> 2; + ptr1 = &pSrc[0]; + + /* Calculations of last stage */ + do + { +#ifndef ARM_MATH_BIG_ENDIAN + /* Read xa (real), ya(imag) input */ + xaya = *__SIMD64(ptr1)++; + xa = (q31_t) xaya; + ya = (q31_t) (xaya >> 32); + + /* Read xb (real), yb(imag) input */ + xbyb = *__SIMD64(ptr1)++; + xb = (q31_t) xbyb; + yb = (q31_t) (xbyb >> 32); + + /* Read xc (real), yc(imag) input */ + xcyc = *__SIMD64(ptr1)++; + xc = (q31_t) xcyc; + yc = (q31_t) (xcyc >> 32); + + /* Read xc (real), yc(imag) input */ + xdyd = *__SIMD64(ptr1)++; + xd = (q31_t) xdyd; + yd = (q31_t) (xdyd >> 32); + +#else + + /* Read xa (real), ya(imag) input */ + xaya = *__SIMD64(ptr1)++; + ya = (q31_t) xaya; + xa = (q31_t) (xaya >> 32); + + /* Read xb (real), yb(imag) input */ + xbyb = *__SIMD64(ptr1)++; + yb = (q31_t) xbyb; + xb = (q31_t) (xbyb >> 32); + + /* Read xc (real), yc(imag) input */ + xcyc = *__SIMD64(ptr1)++; + yc = (q31_t) xcyc; + xc = (q31_t) (xcyc >> 32); + + /* Read xc (real), yc(imag) input */ + xdyd = *__SIMD64(ptr1)++; + yd = (q31_t) xdyd; + xd = (q31_t) (xdyd >> 32); + + +#endif + + /* xa' = xa + xb + xc + xd */ + xa_out = xa + xb + xc + xd; + + /* ya' = ya + yb + yc + yd */ + ya_out = ya + yb + yc + yd; + + /* pointer updation for writing */ + ptr1 = ptr1 - 8u; + + /* writing xa' and ya' */ + *ptr1++ = xa_out; + *ptr1++ = ya_out; + + xc_out = (xa - xb + xc - xd); + yc_out = (ya - yb + yc - yd); + + /* writing xc' and yc' */ + *ptr1++ = xc_out; + *ptr1++ = yc_out; + + xb_out = (xa - yb - xc + yd); + yb_out = (ya + xb - yc - xd); + + /* writing xb' and yb' */ + *ptr1++ = xb_out; + *ptr1++ = yb_out; + + xd_out = (xa + yb - xc - yd); + yd_out = (ya - xb - yc + xd); + + /* writing xd' and yd' */ + *ptr1++ = xd_out; + *ptr1++ = yd_out; + + } while(--j); + + /* output is in 11.21(q21) format for the 1024 point */ + /* output is in 9.23(q23) format for the 256 point */ + /* output is in 7.25(q25) format for the 64 point */ + /* output is in 5.27(q27) format for the 16 point */ + + /* End of last stage process */ +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix8_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix8_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,384 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_radix8_f32.c +* +* Description: Radix-8 Decimation in Frequency CFFT & CIFFT Floating point processing function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** +* @ingroup groupTransforms +*/ + +/** +* @defgroup Radix8_CFFT_CIFFT Radix-8 Complex FFT Functions +* +* \par +* Complex Fast Fourier Transform(CFFT) and Complex Inverse Fast Fourier Transform(CIFFT) is an efficient algorithm to compute Discrete Fourier Transform(DFT) and Inverse Discrete Fourier Transform(IDFT). +* Computational complexity of CFFT reduces drastically when compared to DFT. +* \par +* This set of functions implements CFFT/CIFFT +* for floating-point data types. The functions operates on in-place buffer which uses same buffer for input and output. +* Complex input is stored in input buffer in an interleaved fashion. +* +* \par +* The functions operate on blocks of input and output data and each call to the function processes +* 2*fftLen samples through the transform. pSrc points to In-place arrays containing 2*fftLen values. +* \par +* The pSrc points to the array of in-place buffer of size 2*fftLen and inputs and outputs are stored in an interleaved fashion as shown below. +*
 {real[0], imag[0], real[1], imag[1],..} 
+* +* \par Lengths supported by the transform: +* \par +* Internally, the function utilize a Radix-8 decimation in frequency(DIF) algorithm +* and the size of the FFT supported are of the lengths [ 64, 512, 4096]. +* +* +* \par Algorithm: +* +* Complex Fast Fourier Transform: +* \par +* Input real and imaginary data: +*
    
+* x(n) = xa + j * ya    
+* x(n+N/4 ) = xb + j * yb    
+* x(n+N/2 ) = xc + j * yc    
+* x(n+3N 4) = xd + j * yd    
+* 
+* where N is length of FFT +* \par +* Output real and imaginary data: +*
    
+* X(4r) = xa'+ j * ya'    
+* X(4r+1) = xb'+ j * yb'    
+* X(4r+2) = xc'+ j * yc'    
+* X(4r+3) = xd'+ j * yd'    
+* 
+* \par +* Twiddle factors for Radix-8 FFT: +*
    
+* Wn = co1 + j * (- si1)    
+* W2n = co2 + j * (- si2)    
+* W3n = co3 + j * (- si3)    
+* 
+* +* \par +* \image html CFFT.gif "Radix-8 Decimation-in Frequency Complex Fast Fourier Transform" +* +* \par +* Output from Radix-8 CFFT Results in Digit reversal order. Interchange middle two branches of every butterfly results in Bit reversed output. +* \par +* Butterfly CFFT equations: +*
    
+* xa' = xa + xb + xc + xd    
+* ya' = ya + yb + yc + yd    
+* xc' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1)    
+* yc' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1)    
+* xb' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2)    
+* yb' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2)    
+* xd' = (xa-yb-xc+yd)* co3 + (ya+xb-yc-xd)* (si3)    
+* yd' = (ya+xb-yc-xd)* co3 - (xa-yb-xc+yd)* (si3)    
+* 
+* +* \par +* where fftLen length of CFFT/CIFFT; ifftFlag Flag for selection of CFFT or CIFFT(Set ifftFlag to calculate CIFFT otherwise calculates CFFT); +* bitReverseFlag Flag for selection of output order(Set bitReverseFlag to output in normal order otherwise output in bit reversed order); +* pTwiddlepoints to array of twiddle coefficients; pBitRevTable points to the array of bit reversal table. +* twidCoefModifier modifier for twiddle factor table which supports all FFT lengths with same table; +* pBitRevTable modifier for bit reversal table which supports all FFT lengths with same table. +* onebyfftLen value of 1/fftLen to calculate CIFFT; +* +* \par Fixed-Point Behavior +* Care must be taken when using the fixed-point versions of the CFFT/CIFFT function. +* Refer to the function specific documentation below for usage guidelines. +*/ + + +/* +* @brief Core function for the floating-point CFFT butterfly process. +* @param[in, out] *pSrc points to the in-place buffer of floating-point data type. +* @param[in] fftLen length of the FFT. +* @param[in] *pCoef points to the twiddle coefficient buffer. +* @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. +* @return none. +*/ + +void arm_radix8_butterfly_f32( +float32_t * pSrc, +uint16_t fftLen, +const float32_t * pCoef, +uint16_t twidCoefModifier) +{ + uint32_t ia1, ia2, ia3, ia4, ia5, ia6, ia7; + uint32_t i1, i2, i3, i4, i5, i6, i7, i8; + uint32_t id; + uint32_t n1, n2, j; + + float32_t r1, r2, r3, r4, r5, r6, r7, r8; + float32_t t1, t2; + float32_t s1, s2, s3, s4, s5, s6, s7, s8; + float32_t p1, p2, p3, p4; + float32_t co2, co3, co4, co5, co6, co7, co8; + float32_t si2, si3, si4, si5, si6, si7, si8; + const float32_t C81 = 0.70710678118f; + + n2 = fftLen; + + do + { + n1 = n2; + n2 = n2 >> 3; + i1 = 0; + + do + { + i2 = i1 + n2; + i3 = i2 + n2; + i4 = i3 + n2; + i5 = i4 + n2; + i6 = i5 + n2; + i7 = i6 + n2; + i8 = i7 + n2; + r1 = pSrc[2 * i1] + pSrc[2 * i5]; + r5 = pSrc[2 * i1] - pSrc[2 * i5]; + r2 = pSrc[2 * i2] + pSrc[2 * i6]; + r6 = pSrc[2 * i2] - pSrc[2 * i6]; + r3 = pSrc[2 * i3] + pSrc[2 * i7]; + r7 = pSrc[2 * i3] - pSrc[2 * i7]; + r4 = pSrc[2 * i4] + pSrc[2 * i8]; + r8 = pSrc[2 * i4] - pSrc[2 * i8]; + t1 = r1 - r3; + r1 = r1 + r3; + r3 = r2 - r4; + r2 = r2 + r4; + pSrc[2 * i1] = r1 + r2; + pSrc[2 * i5] = r1 - r2; + r1 = pSrc[2 * i1 + 1] + pSrc[2 * i5 + 1]; + s5 = pSrc[2 * i1 + 1] - pSrc[2 * i5 + 1]; + r2 = pSrc[2 * i2 + 1] + pSrc[2 * i6 + 1]; + s6 = pSrc[2 * i2 + 1] - pSrc[2 * i6 + 1]; + s3 = pSrc[2 * i3 + 1] + pSrc[2 * i7 + 1]; + s7 = pSrc[2 * i3 + 1] - pSrc[2 * i7 + 1]; + r4 = pSrc[2 * i4 + 1] + pSrc[2 * i8 + 1]; + s8 = pSrc[2 * i4 + 1] - pSrc[2 * i8 + 1]; + t2 = r1 - s3; + r1 = r1 + s3; + s3 = r2 - r4; + r2 = r2 + r4; + pSrc[2 * i1 + 1] = r1 + r2; + pSrc[2 * i5 + 1] = r1 - r2; + pSrc[2 * i3] = t1 + s3; + pSrc[2 * i7] = t1 - s3; + pSrc[2 * i3 + 1] = t2 - r3; + pSrc[2 * i7 + 1] = t2 + r3; + r1 = (r6 - r8) * C81; + r6 = (r6 + r8) * C81; + r2 = (s6 - s8) * C81; + s6 = (s6 + s8) * C81; + t1 = r5 - r1; + r5 = r5 + r1; + r8 = r7 - r6; + r7 = r7 + r6; + t2 = s5 - r2; + s5 = s5 + r2; + s8 = s7 - s6; + s7 = s7 + s6; + pSrc[2 * i2] = r5 + s7; + pSrc[2 * i8] = r5 - s7; + pSrc[2 * i6] = t1 + s8; + pSrc[2 * i4] = t1 - s8; + pSrc[2 * i2 + 1] = s5 - r7; + pSrc[2 * i8 + 1] = s5 + r7; + pSrc[2 * i6 + 1] = t2 - r8; + pSrc[2 * i4 + 1] = t2 + r8; + + i1 += n1; + } while(i1 < fftLen); + + if(n2 < 8) + break; + + ia1 = 0; + j = 1; + + do + { + /* index calculation for the coefficients */ + id = ia1 + twidCoefModifier; + ia1 = id; + ia2 = ia1 + id; + ia3 = ia2 + id; + ia4 = ia3 + id; + ia5 = ia4 + id; + ia6 = ia5 + id; + ia7 = ia6 + id; + + co2 = pCoef[2 * ia1]; + co3 = pCoef[2 * ia2]; + co4 = pCoef[2 * ia3]; + co5 = pCoef[2 * ia4]; + co6 = pCoef[2 * ia5]; + co7 = pCoef[2 * ia6]; + co8 = pCoef[2 * ia7]; + si2 = pCoef[2 * ia1 + 1]; + si3 = pCoef[2 * ia2 + 1]; + si4 = pCoef[2 * ia3 + 1]; + si5 = pCoef[2 * ia4 + 1]; + si6 = pCoef[2 * ia5 + 1]; + si7 = pCoef[2 * ia6 + 1]; + si8 = pCoef[2 * ia7 + 1]; + + i1 = j; + + do + { + /* index calculation for the input */ + i2 = i1 + n2; + i3 = i2 + n2; + i4 = i3 + n2; + i5 = i4 + n2; + i6 = i5 + n2; + i7 = i6 + n2; + i8 = i7 + n2; + r1 = pSrc[2 * i1] + pSrc[2 * i5]; + r5 = pSrc[2 * i1] - pSrc[2 * i5]; + r2 = pSrc[2 * i2] + pSrc[2 * i6]; + r6 = pSrc[2 * i2] - pSrc[2 * i6]; + r3 = pSrc[2 * i3] + pSrc[2 * i7]; + r7 = pSrc[2 * i3] - pSrc[2 * i7]; + r4 = pSrc[2 * i4] + pSrc[2 * i8]; + r8 = pSrc[2 * i4] - pSrc[2 * i8]; + t1 = r1 - r3; + r1 = r1 + r3; + r3 = r2 - r4; + r2 = r2 + r4; + pSrc[2 * i1] = r1 + r2; + r2 = r1 - r2; + s1 = pSrc[2 * i1 + 1] + pSrc[2 * i5 + 1]; + s5 = pSrc[2 * i1 + 1] - pSrc[2 * i5 + 1]; + s2 = pSrc[2 * i2 + 1] + pSrc[2 * i6 + 1]; + s6 = pSrc[2 * i2 + 1] - pSrc[2 * i6 + 1]; + s3 = pSrc[2 * i3 + 1] + pSrc[2 * i7 + 1]; + s7 = pSrc[2 * i3 + 1] - pSrc[2 * i7 + 1]; + s4 = pSrc[2 * i4 + 1] + pSrc[2 * i8 + 1]; + s8 = pSrc[2 * i4 + 1] - pSrc[2 * i8 + 1]; + t2 = s1 - s3; + s1 = s1 + s3; + s3 = s2 - s4; + s2 = s2 + s4; + r1 = t1 + s3; + t1 = t1 - s3; + pSrc[2 * i1 + 1] = s1 + s2; + s2 = s1 - s2; + s1 = t2 - r3; + t2 = t2 + r3; + p1 = co5 * r2; + p2 = si5 * s2; + p3 = co5 * s2; + p4 = si5 * r2; + pSrc[2 * i5] = p1 + p2; + pSrc[2 * i5 + 1] = p3 - p4; + p1 = co3 * r1; + p2 = si3 * s1; + p3 = co3 * s1; + p4 = si3 * r1; + pSrc[2 * i3] = p1 + p2; + pSrc[2 * i3 + 1] = p3 - p4; + p1 = co7 * t1; + p2 = si7 * t2; + p3 = co7 * t2; + p4 = si7 * t1; + pSrc[2 * i7] = p1 + p2; + pSrc[2 * i7 + 1] = p3 - p4; + r1 = (r6 - r8) * C81; + r6 = (r6 + r8) * C81; + s1 = (s6 - s8) * C81; + s6 = (s6 + s8) * C81; + t1 = r5 - r1; + r5 = r5 + r1; + r8 = r7 - r6; + r7 = r7 + r6; + t2 = s5 - s1; + s5 = s5 + s1; + s8 = s7 - s6; + s7 = s7 + s6; + r1 = r5 + s7; + r5 = r5 - s7; + r6 = t1 + s8; + t1 = t1 - s8; + s1 = s5 - r7; + s5 = s5 + r7; + s6 = t2 - r8; + t2 = t2 + r8; + p1 = co2 * r1; + p2 = si2 * s1; + p3 = co2 * s1; + p4 = si2 * r1; + pSrc[2 * i2] = p1 + p2; + pSrc[2 * i2 + 1] = p3 - p4; + p1 = co8 * r5; + p2 = si8 * s5; + p3 = co8 * s5; + p4 = si8 * r5; + pSrc[2 * i8] = p1 + p2; + pSrc[2 * i8 + 1] = p3 - p4; + p1 = co6 * r6; + p2 = si6 * s6; + p3 = co6 * s6; + p4 = si6 * r6; + pSrc[2 * i6] = p1 + p2; + pSrc[2 * i6 + 1] = p3 - p4; + p1 = co4 * t1; + p2 = si4 * t2; + p3 = co4 * t2; + p4 = si4 * t1; + pSrc[2 * i4] = p1 + p2; + pSrc[2 * i4 + 1] = p3 - p4; + + i1 += n1; + } while(i1 < fftLen); + + j++; + } while(j < n2); + + twidCoefModifier <<= 3; + } while(n2 > 7); +} + +/** +* @} end of Radix8_CFFT_CIFFT group +*/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,461 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_dct4_f32.c +* +* Description: Processing function of DCT4 & IDCT4 F32. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @defgroup DCT4_IDCT4 DCT Type IV Functions + * Representation of signals by minimum number of values is important for storage and transmission. + * The possibility of large discontinuity between the beginning and end of a period of a signal + * in DFT can be avoided by extending the signal so that it is even-symmetric. + * Discrete Cosine Transform (DCT) is constructed such that its energy is heavily concentrated in the lower part of the + * spectrum and is very widely used in signal and image coding applications. + * The family of DCTs (DCT type- 1,2,3,4) is the outcome of different combinations of homogeneous boundary conditions. + * DCT has an excellent energy-packing capability, hence has many applications and in data compression in particular. + * + * DCT is essentially the Discrete Fourier Transform(DFT) of an even-extended real signal. + * Reordering of the input data makes the computation of DCT just a problem of + * computing the DFT of a real signal with a few additional operations. + * This approach provides regular, simple, and very efficient DCT algorithms for practical hardware and software implementations. + * + * DCT type-II can be implemented using Fast fourier transform (FFT) internally, as the transform is applied on real values, Real FFT can be used. + * DCT4 is implemented using DCT2 as their implementations are similar except with some added pre-processing and post-processing. + * DCT2 implementation can be described in the following steps: + * - Re-ordering input + * - Calculating Real FFT + * - Multiplication of weights and Real FFT output and getting real part from the product. + * + * This process is explained by the block diagram below: + * \image html DCT4.gif "Discrete Cosine Transform - type-IV" + * + * \par Algorithm: + * The N-point type-IV DCT is defined as a real, linear transformation by the formula: + * \image html DCT4Equation.gif + * where k = 0,1,2,.....N-1 + *\par + * Its inverse is defined as follows: + * \image html IDCT4Equation.gif + * where n = 0,1,2,.....N-1 + *\par + * The DCT4 matrices become involutory (i.e. they are self-inverse) by multiplying with an overall scale factor of sqrt(2/N). + * The symmetry of the transform matrix indicates that the fast algorithms for the forward + * and inverse transform computation are identical. + * Note that the implementation of Inverse DCT4 and DCT4 is same, hence same process function can be used for both. + * + * \par Lengths supported by the transform: + * As DCT4 internally uses Real FFT, it supports all the lengths supported by arm_rfft_f32(). + * The library provides separate functions for Q15, Q31, and floating-point data types. + * \par Instance Structure + * The instances for Real FFT and FFT, cosine values table and twiddle factor table are stored in an instance data structure. + * A separate instance structure must be defined for each transform. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Sets the values of the internal structure fields. + * - Initializes Real FFT as its process function is used internally in DCT4, by calling arm_rfft_init_f32(). + * \par + * Use of the initialization function is optional. + * However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + * To place an instance structure into a const data section, the instance structure must be manually initialized. + * Manually initialize the instance structure as follows: + *
    
+ *arm_dct4_instance_f32 S = {N, Nby2, normalize, pTwiddle, pCosFactor, pRfft, pCfft};    
+ *arm_dct4_instance_q31 S = {N, Nby2, normalize, pTwiddle, pCosFactor, pRfft, pCfft};   
+ *arm_dct4_instance_q15 S = {N, Nby2, normalize, pTwiddle, pCosFactor, pRfft, pCfft};   
+ * 
+ * where \c N is the length of the DCT4; \c Nby2 is half of the length of the DCT4; + * \c normalize is normalizing factor used and is equal to sqrt(2/N); + * \c pTwiddle points to the twiddle factor table; + * \c pCosFactor points to the cosFactor table; + * \c pRfft points to the real FFT instance; + * \c pCfft points to the complex FFT instance; + * The CFFT and RFFT structures also needs to be initialized, refer to arm_cfft_radix4_f32() + * and arm_rfft_f32() respectively for details regarding static initialization. + * + * \par Fixed-Point Behavior + * Care must be taken when using the fixed-point versions of the DCT4 transform functions. + * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup DCT4_IDCT4 + * @{ + */ + +/** + * @brief Processing function for the floating-point DCT4/IDCT4. + * @param[in] *S points to an instance of the floating-point DCT4/IDCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + */ + +void arm_dct4_f32( + const arm_dct4_instance_f32 * S, + float32_t * pState, + float32_t * pInlineBuffer) +{ + uint32_t i; /* Loop counter */ + float32_t *weights = S->pTwiddle; /* Pointer to the Weights table */ + float32_t *cosFact = S->pCosFactor; /* Pointer to the cos factors table */ + float32_t *pS1, *pS2, *pbuff; /* Temporary pointers for input buffer and pState buffer */ + float32_t in; /* Temporary variable */ + + + /* DCT4 computation involves DCT2 (which is calculated using RFFT) + * along with some pre-processing and post-processing. + * Computational procedure is explained as follows: + * (a) Pre-processing involves multiplying input with cos factor, + * r(n) = 2 * u(n) * cos(pi*(2*n+1)/(4*n)) + * where, + * r(n) -- output of preprocessing + * u(n) -- input to preprocessing(actual Source buffer) + * (b) Calculation of DCT2 using FFT is divided into three steps: + * Step1: Re-ordering of even and odd elements of input. + * Step2: Calculating FFT of the re-ordered input. + * Step3: Taking the real part of the product of FFT output and weights. + * (c) Post-processing - DCT4 can be obtained from DCT2 output using the following equation: + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * where, + * Y4 -- DCT4 output, Y2 -- DCT2 output + * (d) Multiplying the output with the normalizing factor sqrt(2/N). + */ + + /*-------- Pre-processing ------------*/ + /* Multiplying input with cos factor i.e. r(n) = 2 * x(n) * cos(pi*(2*n+1)/(4*n)) */ + arm_scale_f32(pInlineBuffer, 2.0f, pInlineBuffer, S->N); + arm_mult_f32(pInlineBuffer, cosFact, pInlineBuffer, S->N); + + /* ---------------------------------------------------------------- + * Step1: Re-ordering of even and odd elements as, + * pState[i] = pInlineBuffer[2*i] and + * pState[N-i-1] = pInlineBuffer[2*i+1] where i = 0 to N/2 + ---------------------------------------------------------------------*/ + + /* pS1 initialized to pState */ + pS1 = pState; + + /* pS2 initialized to pState+N-1, so that it points to the end of the state buffer */ + pS2 = pState + (S->N - 1u); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Initializing the loop counter to N/2 >> 2 for loop unrolling by 4 */ + i = (uint32_t) S->Nby2 >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + do + { + /* Re-ordering of even and odd elements */ + /* pState[i] = pInlineBuffer[2*i] */ + *pS1++ = *pbuff++; + /* pState[N-i-1] = pInlineBuffer[2*i+1] */ + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Initializing the loop counter to N/4 instead of N for loop unrolling */ + i = (uint32_t) S->N >> 2u; + + /* Processing with loop unrolling 4 times as N is always multiple of 4. + * Compute 4 outputs at a time */ + do + { + /* Writing the re-ordered output back to inplace input buffer */ + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + + /* --------------------------------------------------------- + * Step2: Calculate RFFT for N-point input + * ---------------------------------------------------------- */ + /* pInlineBuffer is real input of length N , pState is the complex output of length 2N */ + arm_rfft_f32(S->pRfft, pInlineBuffer, pState); + + /*---------------------------------------------------------------------- + * Step3: Multiply the FFT output with the weights. + *----------------------------------------------------------------------*/ + arm_cmplx_mult_cmplx_f32(pState, weights, pState, S->N); + + /* ----------- Post-processing ---------- */ + /* DCT-IV can be obtained from DCT-II by the equation, + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * Hence, Y4(0) = Y2(0)/2 */ + /* Getting only real part from the output and Converting to DCT-IV */ + + /* Initializing the loop counter to N >> 2 for loop unrolling by 4 */ + i = ((uint32_t) S->N - 1u) >> 2u; + + /* pbuff initialized to input buffer. */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Calculating Y4(0) from Y2(0) using Y4(0) = Y2(0)/2 */ + in = *pS1++ * (float32_t) 0.5; + /* input buffer acts as inplace, so output values are stored in the input itself. */ + *pbuff++ = in; + + /* pState pointer is incremented twice as the real values are located alternatively in the array */ + pS1++; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + do + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + /* points to the next real value */ + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + i = ((uint32_t) S->N - 1u) % 0x4u; + + while(i > 0u) + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + /* points to the next real value */ + pS1++; + + /* Decrement the loop counter */ + i--; + } + + + /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ + + /* Initializing the loop counter to N/4 instead of N for loop unrolling */ + i = (uint32_t) S->N >> 2u; + + /* pbuff initialized to the pInlineBuffer(now contains the output values) */ + pbuff = pInlineBuffer; + + /* Processing with loop unrolling 4 times as N is always multiple of 4. Compute 4 outputs at a time */ + do + { + /* Multiplying pInlineBuffer with the normalizing factor sqrt(2/N) */ + in = *pbuff; + *pbuff++ = in * S->normalize; + + in = *pbuff; + *pbuff++ = in * S->normalize; + + in = *pbuff; + *pbuff++ = in * S->normalize; + + in = *pbuff; + *pbuff++ = in * S->normalize; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initializing the loop counter to N/2 */ + i = (uint32_t) S->Nby2; + + do + { + /* Re-ordering of even and odd elements */ + /* pState[i] = pInlineBuffer[2*i] */ + *pS1++ = *pbuff++; + /* pState[N-i-1] = pInlineBuffer[2*i+1] */ + *pS2-- = *pbuff++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Initializing the loop counter */ + i = (uint32_t) S->N; + + do + { + /* Writing the re-ordered output back to inplace input buffer */ + *pbuff++ = *pS1++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + + /* --------------------------------------------------------- + * Step2: Calculate RFFT for N-point input + * ---------------------------------------------------------- */ + /* pInlineBuffer is real input of length N , pState is the complex output of length 2N */ + arm_rfft_f32(S->pRfft, pInlineBuffer, pState); + + /*---------------------------------------------------------------------- + * Step3: Multiply the FFT output with the weights. + *----------------------------------------------------------------------*/ + arm_cmplx_mult_cmplx_f32(pState, weights, pState, S->N); + + /* ----------- Post-processing ---------- */ + /* DCT-IV can be obtained from DCT-II by the equation, + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * Hence, Y4(0) = Y2(0)/2 */ + /* Getting only real part from the output and Converting to DCT-IV */ + + /* pbuff initialized to input buffer. */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Calculating Y4(0) from Y2(0) using Y4(0) = Y2(0)/2 */ + in = *pS1++ * (float32_t) 0.5; + /* input buffer acts as inplace, so output values are stored in the input itself. */ + *pbuff++ = in; + + /* pState pointer is incremented twice as the real values are located alternatively in the array */ + pS1++; + + /* Initializing the loop counter */ + i = ((uint32_t) S->N - 1u); + + do + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + /* points to the next real value */ + pS1++; + + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + + /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ + + /* Initializing the loop counter */ + i = (uint32_t) S->N; + + /* pbuff initialized to the pInlineBuffer(now contains the output values) */ + pbuff = pInlineBuffer; + + do + { + /* Multiplying pInlineBuffer with the normalizing factor sqrt(2/N) */ + in = *pbuff; + *pbuff++ = in * S->normalize; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of DCT4_IDCT4 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,16519 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_dct4_init_f32.c +* +* Description: Initialization function of DCT-4 & IDCT4 F32 +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup DCT4_IDCT4 + * @{ + */ + +/* +* @brief Weights Table +*/ + +/** +* \par +* Weights tables are generated using the formula :
weights[n] = e^(-j*n*pi/(2*N))
+* \par +* C command to generate the table +*
    
+* for(i = 0; i< N; i++)    
+* {    
+*    weights[2*i]= cos(i*c);    
+*    weights[(2*i)+1]= -sin(i * c);    
+* } 
+* \par +* Where N is the Number of weights to be calculated and c is pi/(2*N) +* \par +* In the tables below the real and imaginary values are placed alternatively, hence the +* array length is 2*N. +*/ + +static const float32_t Weights_128[256] = { + 1.000000000000000000f, 0.000000000000000000f, 0.999924701839144500f, + -0.012271538285719925f, + 0.999698818696204250f, -0.024541228522912288f, 0.999322384588349540f, + -0.036807222941358832f, + 0.998795456205172410f, -0.049067674327418015f, 0.998118112900149180f, + -0.061320736302208578f, + 0.997290456678690210f, -0.073564563599667426f, 0.996312612182778000f, + -0.085797312344439894f, + 0.995184726672196930f, -0.098017140329560604f, 0.993906970002356060f, + -0.110222207293883060f, + 0.992479534598709970f, -0.122410675199216200f, 0.990902635427780010f, + -0.134580708507126170f, + 0.989176509964781010f, -0.146730474455361750f, 0.987301418157858430f, + -0.158858143333861450f, + 0.985277642388941220f, -0.170961888760301220f, 0.983105487431216290f, + -0.183039887955140950f, + 0.980785280403230430f, -0.195090322016128250f, 0.978317370719627650f, + -0.207111376192218560f, + 0.975702130038528570f, -0.219101240156869800f, 0.972939952205560180f, + -0.231058108280671110f, + 0.970031253194543970f, -0.242980179903263870f, 0.966976471044852070f, + -0.254865659604514570f, + 0.963776065795439840f, -0.266712757474898370f, 0.960430519415565790f, + -0.278519689385053060f, + 0.956940335732208820f, -0.290284677254462330f, 0.953306040354193860f, + -0.302005949319228080f, + 0.949528180593036670f, -0.313681740398891520f, 0.945607325380521280f, + -0.325310292162262930f, + 0.941544065183020810f, -0.336889853392220050f, 0.937339011912574960f, + -0.348418680249434560f, + 0.932992798834738960f, -0.359895036534988110f, 0.928506080473215590f, + -0.371317193951837540f, + 0.923879532511286740f, -0.382683432365089780f, 0.919113851690057770f, + -0.393992040061048100f, + 0.914209755703530690f, -0.405241314004989860f, 0.909167983090522380f, + -0.416429560097637150f, + 0.903989293123443340f, -0.427555093430282080f, 0.898674465693953820f, + -0.438616238538527660f, + 0.893224301195515320f, -0.449611329654606540f, 0.887639620402853930f, + -0.460538710958240010f, + 0.881921264348355050f, -0.471396736825997640f, 0.876070094195406600f, + -0.482183772079122720f, + 0.870086991108711460f, -0.492898192229784040f, 0.863972856121586810f, + -0.503538383725717580f, + 0.857728610000272120f, -0.514102744193221660f, 0.851355193105265200f, + -0.524589682678468950f, + 0.844853565249707120f, -0.534997619887097150f, 0.838224705554838080f, + -0.545324988422046460f, + 0.831469612302545240f, -0.555570233019602180f, 0.824589302785025290f, + -0.565731810783613120f, + 0.817584813151583710f, -0.575808191417845340f, 0.810457198252594770f, + -0.585797857456438860f, + 0.803207531480644940f, -0.595699304492433360f, 0.795836904608883570f, + -0.605511041404325550f, + 0.788346427626606340f, -0.615231590580626820f, 0.780737228572094490f, + -0.624859488142386340f, + 0.773010453362736990f, -0.634393284163645490f, 0.765167265622458960f, + -0.643831542889791390f, + 0.757208846506484570f, -0.653172842953776760f, 0.749136394523459370f, + -0.662415777590171780f, + 0.740951125354959110f, -0.671558954847018330f, 0.732654271672412820f, + -0.680600997795453020f, + 0.724247082951467000f, -0.689540544737066830f, 0.715730825283818590f, + -0.698376249408972920f, + 0.707106781186547570f, -0.707106781186547460f, 0.698376249408972920f, + -0.715730825283818590f, + 0.689540544737066940f, -0.724247082951466890f, 0.680600997795453130f, + -0.732654271672412820f, + 0.671558954847018330f, -0.740951125354959110f, 0.662415777590171780f, + -0.749136394523459260f, + 0.653172842953776760f, -0.757208846506484460f, 0.643831542889791500f, + -0.765167265622458960f, + 0.634393284163645490f, -0.773010453362736990f, 0.624859488142386450f, + -0.780737228572094380f, + 0.615231590580626820f, -0.788346427626606230f, 0.605511041404325550f, + -0.795836904608883460f, + 0.595699304492433470f, -0.803207531480644830f, 0.585797857456438860f, + -0.810457198252594770f, + 0.575808191417845340f, -0.817584813151583710f, 0.565731810783613230f, + -0.824589302785025290f, + 0.555570233019602290f, -0.831469612302545240f, 0.545324988422046460f, + -0.838224705554837970f, + 0.534997619887097260f, -0.844853565249707010f, 0.524589682678468840f, + -0.851355193105265200f, + 0.514102744193221660f, -0.857728610000272120f, 0.503538383725717580f, + -0.863972856121586700f, + 0.492898192229784090f, -0.870086991108711350f, 0.482183772079122830f, + -0.876070094195406600f, + 0.471396736825997810f, -0.881921264348354940f, 0.460538710958240010f, + -0.887639620402853930f, + 0.449611329654606600f, -0.893224301195515320f, 0.438616238538527710f, + -0.898674465693953820f, + 0.427555093430282200f, -0.903989293123443340f, 0.416429560097637320f, + -0.909167983090522270f, + 0.405241314004989860f, -0.914209755703530690f, 0.393992040061048100f, + -0.919113851690057770f, + 0.382683432365089840f, -0.923879532511286740f, 0.371317193951837600f, + -0.928506080473215480f, + 0.359895036534988280f, -0.932992798834738850f, 0.348418680249434510f, + -0.937339011912574960f, + 0.336889853392220050f, -0.941544065183020810f, 0.325310292162262980f, + -0.945607325380521280f, + 0.313681740398891570f, -0.949528180593036670f, 0.302005949319228200f, + -0.953306040354193750f, + 0.290284677254462330f, -0.956940335732208940f, 0.278519689385053060f, + -0.960430519415565790f, + 0.266712757474898420f, -0.963776065795439840f, 0.254865659604514630f, + -0.966976471044852070f, + 0.242980179903263980f, -0.970031253194543970f, 0.231058108280671280f, + -0.972939952205560070f, + 0.219101240156869770f, -0.975702130038528570f, 0.207111376192218560f, + -0.978317370719627650f, + 0.195090322016128330f, -0.980785280403230430f, 0.183039887955141060f, + -0.983105487431216290f, + 0.170961888760301360f, -0.985277642388941220f, 0.158858143333861390f, + -0.987301418157858430f, + 0.146730474455361750f, -0.989176509964781010f, 0.134580708507126220f, + -0.990902635427780010f, + 0.122410675199216280f, -0.992479534598709970f, 0.110222207293883180f, + -0.993906970002356060f, + 0.098017140329560770f, -0.995184726672196820f, 0.085797312344439880f, + -0.996312612182778000f, + 0.073564563599667454f, -0.997290456678690210f, 0.061320736302208648f, + -0.998118112900149180f, + 0.049067674327418126f, -0.998795456205172410f, 0.036807222941358991f, + -0.999322384588349540f, + 0.024541228522912264f, -0.999698818696204250f, 0.012271538285719944f, + -0.999924701839144500f +}; + +static const float32_t Weights_512[1024] = { + 1.000000000000000000f, 0.000000000000000000f, 0.999995293809576190f, + -0.003067956762965976f, + 0.999981175282601110f, -0.006135884649154475f, 0.999957644551963900f, + -0.009203754782059819f, + 0.999924701839144500f, -0.012271538285719925f, 0.999882347454212560f, + -0.015339206284988100f, + 0.999830581795823400f, -0.018406729905804820f, 0.999769405351215280f, + -0.021474080275469508f, + 0.999698818696204250f, -0.024541228522912288f, 0.999618822495178640f, + -0.027608145778965740f, + 0.999529417501093140f, -0.030674803176636626f, 0.999430604555461730f, + -0.033741171851377580f, + 0.999322384588349540f, -0.036807222941358832f, 0.999204758618363890f, + -0.039872927587739811f, + 0.999077727752645360f, -0.042938256934940820f, 0.998941293186856870f, + -0.046003182130914623f, + 0.998795456205172410f, -0.049067674327418015f, 0.998640218180265270f, + -0.052131704680283324f, + 0.998475580573294770f, -0.055195244349689934f, 0.998301544933892890f, + -0.058258264500435752f, + 0.998118112900149180f, -0.061320736302208578f, 0.997925286198596000f, + -0.064382630929857465f, + 0.997723066644191640f, -0.067443919563664051f, 0.997511456140303450f, + -0.070504573389613856f, + 0.997290456678690210f, -0.073564563599667426f, 0.997060070339482960f, + -0.076623861392031492f, + 0.996820299291165670f, -0.079682437971430126f, 0.996571145790554840f, + -0.082740264549375692f, + 0.996312612182778000f, -0.085797312344439894f, 0.996044700901251970f, + -0.088853552582524600f, + 0.995767414467659820f, -0.091908956497132724f, 0.995480755491926940f, + -0.094963495329638992f, + 0.995184726672196930f, -0.098017140329560604f, 0.994879330794805620f, + -0.101069862754827820f, + 0.994564570734255420f, -0.104121633872054590f, 0.994240449453187900f, + -0.107172424956808840f, + 0.993906970002356060f, -0.110222207293883060f, 0.993564135520595300f, + -0.113270952177564350f, + 0.993211949234794500f, -0.116318630911904750f, 0.992850414459865100f, + -0.119365214810991350f, + 0.992479534598709970f, -0.122410675199216200f, 0.992099313142191800f, + -0.125454983411546230f, + 0.991709753669099530f, -0.128498110793793170f, 0.991310859846115440f, + -0.131540028702883120f, + 0.990902635427780010f, -0.134580708507126170f, 0.990485084256457090f, + -0.137620121586486040f, + 0.990058210262297120f, -0.140658239332849210f, 0.989622017463200890f, + -0.143695033150294470f, + 0.989176509964781010f, -0.146730474455361750f, 0.988721691960323780f, + -0.149764534677321510f, + 0.988257567730749460f, -0.152797185258443440f, 0.987784141644572180f, + -0.155828397654265230f, + 0.987301418157858430f, -0.158858143333861450f, 0.986809401814185530f, + -0.161886393780111830f, + 0.986308097244598670f, -0.164913120489969890f, 0.985797509167567480f, + -0.167938294974731170f, + 0.985277642388941220f, -0.170961888760301220f, 0.984748501801904210f, + -0.173983873387463820f, + 0.984210092386929030f, -0.177004220412148750f, 0.983662419211730250f, + -0.180022901405699510f, + 0.983105487431216290f, -0.183039887955140950f, 0.982539302287441240f, + -0.186055151663446630f, + 0.981963869109555240f, -0.189068664149806190f, 0.981379193313754560f, + -0.192080397049892440f, + 0.980785280403230430f, -0.195090322016128250f, 0.980182135968117430f, + -0.198098410717953560f, + 0.979569765685440520f, -0.201104634842091900f, 0.978948175319062200f, + -0.204108966092816870f, + 0.978317370719627650f, -0.207111376192218560f, 0.977677357824509930f, + -0.210111836880469610f, + 0.977028142657754390f, -0.213110319916091360f, 0.976369731330021140f, + -0.216106797076219520f, + 0.975702130038528570f, -0.219101240156869800f, 0.975025345066994120f, + -0.222093620973203510f, + 0.974339382785575860f, -0.225083911359792830f, 0.973644249650811980f, + -0.228072083170885730f, + 0.972939952205560180f, -0.231058108280671110f, 0.972226497078936270f, + -0.234041958583543430f, + 0.971503890986251780f, -0.237023605994367200f, 0.970772140728950350f, + -0.240003022448741500f, + 0.970031253194543970f, -0.242980179903263870f, 0.969281235356548530f, + -0.245955050335794590f, + 0.968522094274417380f, -0.248927605745720150f, 0.967753837093475510f, + -0.251897818154216970f, + 0.966976471044852070f, -0.254865659604514570f, 0.966190003445412500f, + -0.257831102162158990f, + 0.965394441697689400f, -0.260794117915275510f, 0.964589793289812760f, + -0.263754678974831350f, + 0.963776065795439840f, -0.266712757474898370f, 0.962953266873683880f, + -0.269668325572915090f, + 0.962121404269041580f, -0.272621355449948980f, 0.961280485811320640f, + -0.275571819310958140f, + 0.960430519415565790f, -0.278519689385053060f, 0.959571513081984520f, + -0.281464937925757940f, + 0.958703474895871600f, -0.284407537211271880f, 0.957826413027532910f, + -0.287347459544729510f, + 0.956940335732208820f, -0.290284677254462330f, 0.956045251349996410f, + -0.293219162694258630f, + 0.955141168305770780f, -0.296150888243623790f, 0.954228095109105670f, + -0.299079826308040480f, + 0.953306040354193860f, -0.302005949319228080f, 0.952375012719765880f, + -0.304929229735402370f, + 0.951435020969008340f, -0.307849640041534870f, 0.950486073949481700f, + -0.310767152749611470f, + 0.949528180593036670f, -0.313681740398891520f, 0.948561349915730270f, + -0.316593375556165850f, + 0.947585591017741090f, -0.319502030816015690f, 0.946600913083283530f, + -0.322407678801069850f, + 0.945607325380521280f, -0.325310292162262930f, 0.944604837261480260f, + -0.328209843579092500f, + 0.943593458161960390f, -0.331106305759876430f, 0.942573197601446870f, + -0.333999651442009380f, + 0.941544065183020810f, -0.336889853392220050f, 0.940506070593268300f, + -0.339776884406826850f, + 0.939459223602189920f, -0.342660717311994380f, 0.938403534063108060f, + -0.345541324963989090f, + 0.937339011912574960f, -0.348418680249434560f, 0.936265667170278260f, + -0.351292756085567090f, + 0.935183509938947610f, -0.354163525420490340f, 0.934092550404258980f, + -0.357030961233429980f, + 0.932992798834738960f, -0.359895036534988110f, 0.931884265581668150f, + -0.362755724367397230f, + 0.930766961078983710f, -0.365612997804773850f, 0.929640895843181330f, + -0.368466829953372320f, + 0.928506080473215590f, -0.371317193951837540f, 0.927362525650401110f, + -0.374164062971457930f, + 0.926210242138311380f, -0.377007410216418260f, 0.925049240782677580f, + -0.379847208924051160f, + 0.923879532511286740f, -0.382683432365089780f, 0.922701128333878630f, + -0.385516053843918850f, + 0.921514039342042010f, -0.388345046698826250f, 0.920318276709110590f, + -0.391170384302253870f, + 0.919113851690057770f, -0.393992040061048100f, 0.917900775621390500f, + -0.396809987416710310f, + 0.916679059921042700f, -0.399624199845646790f, 0.915448716088267830f, + -0.402434650859418430f, + 0.914209755703530690f, -0.405241314004989860f, 0.912962190428398210f, + -0.408044162864978690f, + 0.911706032005429880f, -0.410843171057903910f, 0.910441292258067250f, + -0.413638312238434500f, + 0.909167983090522380f, -0.416429560097637150f, 0.907886116487666260f, + -0.419216888363223910f, + 0.906595704514915330f, -0.422000270799799680f, 0.905296759318118820f, + -0.424779681209108810f, + 0.903989293123443340f, -0.427555093430282080f, 0.902673318237258830f, + -0.430326481340082610f, + 0.901348847046022030f, -0.433093818853151960f, 0.900015892016160280f, + -0.435857079922255470f, + 0.898674465693953820f, -0.438616238538527660f, 0.897324580705418320f, + -0.441371268731716670f, + 0.895966249756185220f, -0.444122144570429200f, 0.894599485631382700f, + -0.446868840162374160f, + 0.893224301195515320f, -0.449611329654606540f, 0.891840709392342720f, + -0.452349587233770890f, + 0.890448723244757880f, -0.455083587126343840f, 0.889048355854664570f, + -0.457813303598877170f, + 0.887639620402853930f, -0.460538710958240010f, 0.886222530148880640f, + -0.463259783551860150f, + 0.884797098430937790f, -0.465976495767966180f, 0.883363338665731580f, + -0.468688822035827900f, + 0.881921264348355050f, -0.471396736825997640f, 0.880470889052160750f, + -0.474100214650549970f, + 0.879012226428633530f, -0.476799230063322090f, 0.877545290207261350f, + -0.479493757660153010f, + 0.876070094195406600f, -0.482183772079122720f, 0.874586652278176110f, + -0.484869248000791060f, + 0.873094978418290090f, -0.487550160148436000f, 0.871595086655950980f, + -0.490226483288291160f, + 0.870086991108711460f, -0.492898192229784040f, 0.868570705971340900f, + -0.495565261825772540f, + 0.867046245515692650f, -0.498227666972781870f, 0.865513624090569090f, + -0.500885382611240710f, + 0.863972856121586810f, -0.503538383725717580f, 0.862423956111040610f, + -0.506186645345155230f, + 0.860866938637767310f, -0.508830142543106990f, 0.859301818357008470f, + -0.511468850437970300f, + 0.857728610000272120f, -0.514102744193221660f, 0.856147328375194470f, + -0.516731799017649870f, + 0.854557988365400530f, -0.519355990165589640f, 0.852960604930363630f, + -0.521975292937154390f, + 0.851355193105265200f, -0.524589682678468950f, 0.849741768000852550f, + -0.527199134781901280f, + 0.848120344803297230f, -0.529803624686294610f, 0.846490938774052130f, + -0.532403127877197900f, + 0.844853565249707120f, -0.534997619887097150f, 0.843208239641845440f, + -0.537587076295645390f, + 0.841554977436898440f, -0.540171472729892850f, 0.839893794195999520f, + -0.542750784864515890f, + 0.838224705554838080f, -0.545324988422046460f, 0.836547727223512010f, + -0.547894059173100190f, + 0.834862874986380010f, -0.550457972936604810f, 0.833170164701913190f, + -0.553016705580027470f, + 0.831469612302545240f, -0.555570233019602180f, 0.829761233794523050f, + -0.558118531220556100f, + 0.828045045257755800f, -0.560661576197336030f, 0.826321062845663530f, + -0.563199344013834090f, + 0.824589302785025290f, -0.565731810783613120f, 0.822849781375826430f, + -0.568258952670131490f, + 0.821102514991104650f, -0.570780745886967260f, 0.819347520076796900f, + -0.573297166698042200f, + 0.817584813151583710f, -0.575808191417845340f, 0.815814410806733780f, + -0.578313796411655590f, + 0.814036329705948410f, -0.580813958095764530f, 0.812250586585203880f, + -0.583308652937698290f, + 0.810457198252594770f, -0.585797857456438860f, 0.808656181588174980f, + -0.588281548222645220f, + 0.806847553543799330f, -0.590759701858874160f, 0.805031331142963660f, + -0.593232295039799800f, + 0.803207531480644940f, -0.595699304492433360f, 0.801376171723140240f, + -0.598160706996342270f, + 0.799537269107905010f, -0.600616479383868970f, 0.797690840943391160f, + -0.603066598540348160f, + 0.795836904608883570f, -0.605511041404325550f, 0.793975477554337170f, + -0.607949784967773630f, + 0.792106577300212390f, -0.610382806276309480f, 0.790230221437310030f, + -0.612810082429409710f, + 0.788346427626606340f, -0.615231590580626820f, 0.786455213599085770f, + -0.617647307937803870f, + 0.784556597155575240f, -0.620057211763289100f, 0.782650596166575730f, + -0.622461279374149970f, + 0.780737228572094490f, -0.624859488142386340f, 0.778816512381475980f, + -0.627251815495144080f, + 0.776888465673232440f, -0.629638238914926980f, 0.774953106594873930f, + -0.632018735939809060f, + 0.773010453362736990f, -0.634393284163645490f, 0.771060524261813820f, + -0.636761861236284200f, + 0.769103337645579700f, -0.639124444863775730f, 0.767138911935820400f, + -0.641481012808583160f, + 0.765167265622458960f, -0.643831542889791390f, 0.763188417263381270f, + -0.646176012983316280f, + 0.761202385484261780f, -0.648514401022112440f, 0.759209188978388070f, + -0.650846684996380880f, + 0.757208846506484570f, -0.653172842953776760f, 0.755201376896536550f, + -0.655492852999615350f, + 0.753186799043612520f, -0.657806693297078640f, 0.751165131909686480f, + -0.660114342067420480f, + 0.749136394523459370f, -0.662415777590171780f, 0.747100605980180130f, + -0.664710978203344790f, + 0.745057785441466060f, -0.666999922303637470f, 0.743007952135121720f, + -0.669282588346636010f, + 0.740951125354959110f, -0.671558954847018330f, 0.738887324460615110f, + -0.673829000378756040f, + 0.736816568877369900f, -0.676092703575315920f, 0.734738878095963500f, + -0.678350043129861470f, + 0.732654271672412820f, -0.680600997795453020f, 0.730562769227827590f, + -0.682845546385248080f, + 0.728464390448225200f, -0.685083667772700360f, 0.726359155084346010f, + -0.687315340891759050f, + 0.724247082951467000f, -0.689540544737066830f, 0.722128193929215350f, + -0.691759258364157750f, + 0.720002507961381650f, -0.693971460889654000f, 0.717870045055731710f, + -0.696177131491462990f, + 0.715730825283818590f, -0.698376249408972920f, 0.713584868780793640f, + -0.700568793943248340f, + 0.711432195745216430f, -0.702754744457225300f, 0.709272826438865690f, + -0.704934080375904880f, + 0.707106781186547570f, -0.707106781186547460f, 0.704934080375904990f, + -0.709272826438865580f, + 0.702754744457225300f, -0.711432195745216430f, 0.700568793943248450f, + -0.713584868780793520f, + 0.698376249408972920f, -0.715730825283818590f, 0.696177131491462990f, + -0.717870045055731710f, + 0.693971460889654000f, -0.720002507961381650f, 0.691759258364157750f, + -0.722128193929215350f, + 0.689540544737066940f, -0.724247082951466890f, 0.687315340891759160f, + -0.726359155084346010f, + 0.685083667772700360f, -0.728464390448225200f, 0.682845546385248080f, + -0.730562769227827590f, + 0.680600997795453130f, -0.732654271672412820f, 0.678350043129861580f, + -0.734738878095963390f, + 0.676092703575316030f, -0.736816568877369790f, 0.673829000378756150f, + -0.738887324460615110f, + 0.671558954847018330f, -0.740951125354959110f, 0.669282588346636010f, + -0.743007952135121720f, + 0.666999922303637470f, -0.745057785441465950f, 0.664710978203344900f, + -0.747100605980180130f, + 0.662415777590171780f, -0.749136394523459260f, 0.660114342067420480f, + -0.751165131909686370f, + 0.657806693297078640f, -0.753186799043612410f, 0.655492852999615460f, + -0.755201376896536550f, + 0.653172842953776760f, -0.757208846506484460f, 0.650846684996380990f, + -0.759209188978387960f, + 0.648514401022112550f, -0.761202385484261780f, 0.646176012983316390f, + -0.763188417263381270f, + 0.643831542889791500f, -0.765167265622458960f, 0.641481012808583160f, + -0.767138911935820400f, + 0.639124444863775730f, -0.769103337645579590f, 0.636761861236284200f, + -0.771060524261813710f, + 0.634393284163645490f, -0.773010453362736990f, 0.632018735939809060f, + -0.774953106594873820f, + 0.629638238914927100f, -0.776888465673232440f, 0.627251815495144190f, + -0.778816512381475870f, + 0.624859488142386450f, -0.780737228572094380f, 0.622461279374150080f, + -0.782650596166575730f, + 0.620057211763289210f, -0.784556597155575240f, 0.617647307937803980f, + -0.786455213599085770f, + 0.615231590580626820f, -0.788346427626606230f, 0.612810082429409710f, + -0.790230221437310030f, + 0.610382806276309480f, -0.792106577300212390f, 0.607949784967773740f, + -0.793975477554337170f, + 0.605511041404325550f, -0.795836904608883460f, 0.603066598540348280f, + -0.797690840943391040f, + 0.600616479383868970f, -0.799537269107905010f, 0.598160706996342380f, + -0.801376171723140130f, + 0.595699304492433470f, -0.803207531480644830f, 0.593232295039799800f, + -0.805031331142963660f, + 0.590759701858874280f, -0.806847553543799220f, 0.588281548222645330f, + -0.808656181588174980f, + 0.585797857456438860f, -0.810457198252594770f, 0.583308652937698290f, + -0.812250586585203880f, + 0.580813958095764530f, -0.814036329705948300f, 0.578313796411655590f, + -0.815814410806733780f, + 0.575808191417845340f, -0.817584813151583710f, 0.573297166698042320f, + -0.819347520076796900f, + 0.570780745886967370f, -0.821102514991104650f, 0.568258952670131490f, + -0.822849781375826320f, + 0.565731810783613230f, -0.824589302785025290f, 0.563199344013834090f, + -0.826321062845663420f, + 0.560661576197336030f, -0.828045045257755800f, 0.558118531220556100f, + -0.829761233794523050f, + 0.555570233019602290f, -0.831469612302545240f, 0.553016705580027580f, + -0.833170164701913190f, + 0.550457972936604810f, -0.834862874986380010f, 0.547894059173100190f, + -0.836547727223511890f, + 0.545324988422046460f, -0.838224705554837970f, 0.542750784864516000f, + -0.839893794195999410f, + 0.540171472729892970f, -0.841554977436898330f, 0.537587076295645510f, + -0.843208239641845440f, + 0.534997619887097260f, -0.844853565249707010f, 0.532403127877198010f, + -0.846490938774052020f, + 0.529803624686294830f, -0.848120344803297120f, 0.527199134781901390f, + -0.849741768000852440f, + 0.524589682678468840f, -0.851355193105265200f, 0.521975292937154390f, + -0.852960604930363630f, + 0.519355990165589530f, -0.854557988365400530f, 0.516731799017649980f, + -0.856147328375194470f, + 0.514102744193221660f, -0.857728610000272120f, 0.511468850437970520f, + -0.859301818357008360f, + 0.508830142543106990f, -0.860866938637767310f, 0.506186645345155450f, + -0.862423956111040500f, + 0.503538383725717580f, -0.863972856121586700f, 0.500885382611240940f, + -0.865513624090568980f, + 0.498227666972781870f, -0.867046245515692650f, 0.495565261825772490f, + -0.868570705971340900f, + 0.492898192229784090f, -0.870086991108711350f, 0.490226483288291100f, + -0.871595086655951090f, + 0.487550160148436050f, -0.873094978418290090f, 0.484869248000791120f, + -0.874586652278176110f, + 0.482183772079122830f, -0.876070094195406600f, 0.479493757660153010f, + -0.877545290207261240f, + 0.476799230063322250f, -0.879012226428633410f, 0.474100214650550020f, + -0.880470889052160750f, + 0.471396736825997810f, -0.881921264348354940f, 0.468688822035827960f, + -0.883363338665731580f, + 0.465976495767966130f, -0.884797098430937790f, 0.463259783551860260f, + -0.886222530148880640f, + 0.460538710958240010f, -0.887639620402853930f, 0.457813303598877290f, + -0.889048355854664570f, + 0.455083587126343840f, -0.890448723244757880f, 0.452349587233771000f, + -0.891840709392342720f, + 0.449611329654606600f, -0.893224301195515320f, 0.446868840162374330f, + -0.894599485631382580f, + 0.444122144570429260f, -0.895966249756185110f, 0.441371268731716620f, + -0.897324580705418320f, + 0.438616238538527710f, -0.898674465693953820f, 0.435857079922255470f, + -0.900015892016160280f, + 0.433093818853152010f, -0.901348847046022030f, 0.430326481340082610f, + -0.902673318237258830f, + 0.427555093430282200f, -0.903989293123443340f, 0.424779681209108810f, + -0.905296759318118820f, + 0.422000270799799790f, -0.906595704514915330f, 0.419216888363223960f, + -0.907886116487666150f, + 0.416429560097637320f, -0.909167983090522270f, 0.413638312238434560f, + -0.910441292258067140f, + 0.410843171057903910f, -0.911706032005429880f, 0.408044162864978740f, + -0.912962190428398100f, + 0.405241314004989860f, -0.914209755703530690f, 0.402434650859418540f, + -0.915448716088267830f, + 0.399624199845646790f, -0.916679059921042700f, 0.396809987416710420f, + -0.917900775621390390f, + 0.393992040061048100f, -0.919113851690057770f, 0.391170384302253980f, + -0.920318276709110480f, + 0.388345046698826300f, -0.921514039342041900f, 0.385516053843919020f, + -0.922701128333878520f, + 0.382683432365089840f, -0.923879532511286740f, 0.379847208924051110f, + -0.925049240782677580f, + 0.377007410216418310f, -0.926210242138311270f, 0.374164062971457990f, + -0.927362525650401110f, + 0.371317193951837600f, -0.928506080473215480f, 0.368466829953372320f, + -0.929640895843181330f, + 0.365612997804773960f, -0.930766961078983710f, 0.362755724367397230f, + -0.931884265581668150f, + 0.359895036534988280f, -0.932992798834738850f, 0.357030961233430030f, + -0.934092550404258870f, + 0.354163525420490510f, -0.935183509938947500f, 0.351292756085567150f, + -0.936265667170278260f, + 0.348418680249434510f, -0.937339011912574960f, 0.345541324963989150f, + -0.938403534063108060f, + 0.342660717311994380f, -0.939459223602189920f, 0.339776884406826960f, + -0.940506070593268300f, + 0.336889853392220050f, -0.941544065183020810f, 0.333999651442009490f, + -0.942573197601446870f, + 0.331106305759876430f, -0.943593458161960390f, 0.328209843579092660f, + -0.944604837261480260f, + 0.325310292162262980f, -0.945607325380521280f, 0.322407678801070020f, + -0.946600913083283530f, + 0.319502030816015750f, -0.947585591017741090f, 0.316593375556165850f, + -0.948561349915730270f, + 0.313681740398891570f, -0.949528180593036670f, 0.310767152749611470f, + -0.950486073949481700f, + 0.307849640041534980f, -0.951435020969008340f, 0.304929229735402430f, + -0.952375012719765880f, + 0.302005949319228200f, -0.953306040354193750f, 0.299079826308040480f, + -0.954228095109105670f, + 0.296150888243623960f, -0.955141168305770670f, 0.293219162694258680f, + -0.956045251349996410f, + 0.290284677254462330f, -0.956940335732208940f, 0.287347459544729570f, + -0.957826413027532910f, + 0.284407537211271820f, -0.958703474895871600f, 0.281464937925758050f, + -0.959571513081984520f, + 0.278519689385053060f, -0.960430519415565790f, 0.275571819310958250f, + -0.961280485811320640f, + 0.272621355449948980f, -0.962121404269041580f, 0.269668325572915200f, + -0.962953266873683880f, + 0.266712757474898420f, -0.963776065795439840f, 0.263754678974831510f, + -0.964589793289812650f, + 0.260794117915275570f, -0.965394441697689400f, 0.257831102162158930f, + -0.966190003445412620f, + 0.254865659604514630f, -0.966976471044852070f, 0.251897818154216910f, + -0.967753837093475510f, + 0.248927605745720260f, -0.968522094274417270f, 0.245955050335794590f, + -0.969281235356548530f, + 0.242980179903263980f, -0.970031253194543970f, 0.240003022448741500f, + -0.970772140728950350f, + 0.237023605994367340f, -0.971503890986251780f, 0.234041958583543460f, + -0.972226497078936270f, + 0.231058108280671280f, -0.972939952205560070f, 0.228072083170885790f, + -0.973644249650811870f, + 0.225083911359792780f, -0.974339382785575860f, 0.222093620973203590f, + -0.975025345066994120f, + 0.219101240156869770f, -0.975702130038528570f, 0.216106797076219600f, + -0.976369731330021140f, + 0.213110319916091360f, -0.977028142657754390f, 0.210111836880469720f, + -0.977677357824509930f, + 0.207111376192218560f, -0.978317370719627650f, 0.204108966092817010f, + -0.978948175319062200f, + 0.201104634842091960f, -0.979569765685440520f, 0.198098410717953730f, + -0.980182135968117320f, + 0.195090322016128330f, -0.980785280403230430f, 0.192080397049892380f, + -0.981379193313754560f, + 0.189068664149806280f, -0.981963869109555240f, 0.186055151663446630f, + -0.982539302287441240f, + 0.183039887955141060f, -0.983105487431216290f, 0.180022901405699510f, + -0.983662419211730250f, + 0.177004220412148860f, -0.984210092386929030f, 0.173983873387463850f, + -0.984748501801904210f, + 0.170961888760301360f, -0.985277642388941220f, 0.167938294974731230f, + -0.985797509167567370f, + 0.164913120489970090f, -0.986308097244598670f, 0.161886393780111910f, + -0.986809401814185420f, + 0.158858143333861390f, -0.987301418157858430f, 0.155828397654265320f, + -0.987784141644572180f, + 0.152797185258443410f, -0.988257567730749460f, 0.149764534677321620f, + -0.988721691960323780f, + 0.146730474455361750f, -0.989176509964781010f, 0.143695033150294580f, + -0.989622017463200780f, + 0.140658239332849240f, -0.990058210262297120f, 0.137620121586486180f, + -0.990485084256456980f, + 0.134580708507126220f, -0.990902635427780010f, 0.131540028702883280f, + -0.991310859846115440f, + 0.128498110793793220f, -0.991709753669099530f, 0.125454983411546210f, + -0.992099313142191800f, + 0.122410675199216280f, -0.992479534598709970f, 0.119365214810991350f, + -0.992850414459865100f, + 0.116318630911904880f, -0.993211949234794500f, 0.113270952177564360f, + -0.993564135520595300f, + 0.110222207293883180f, -0.993906970002356060f, 0.107172424956808870f, + -0.994240449453187900f, + 0.104121633872054730f, -0.994564570734255420f, 0.101069862754827880f, + -0.994879330794805620f, + 0.098017140329560770f, -0.995184726672196820f, 0.094963495329639061f, + -0.995480755491926940f, + 0.091908956497132696f, -0.995767414467659820f, 0.088853552582524684f, + -0.996044700901251970f, + 0.085797312344439880f, -0.996312612182778000f, 0.082740264549375803f, + -0.996571145790554840f, + 0.079682437971430126f, -0.996820299291165670f, 0.076623861392031617f, + -0.997060070339482960f, + 0.073564563599667454f, -0.997290456678690210f, 0.070504573389614009f, + -0.997511456140303450f, + 0.067443919563664106f, -0.997723066644191640f, 0.064382630929857410f, + -0.997925286198596000f, + 0.061320736302208648f, -0.998118112900149180f, 0.058258264500435732f, + -0.998301544933892890f, + 0.055195244349690031f, -0.998475580573294770f, 0.052131704680283317f, + -0.998640218180265270f, + 0.049067674327418126f, -0.998795456205172410f, 0.046003182130914644f, + -0.998941293186856870f, + 0.042938256934940959f, -0.999077727752645360f, 0.039872927587739845f, + -0.999204758618363890f, + 0.036807222941358991f, -0.999322384588349540f, 0.033741171851377642f, + -0.999430604555461730f, + 0.030674803176636581f, -0.999529417501093140f, 0.027608145778965820f, + -0.999618822495178640f, + 0.024541228522912264f, -0.999698818696204250f, 0.021474080275469605f, + -0.999769405351215280f, + 0.018406729905804820f, -0.999830581795823400f, 0.015339206284988220f, + -0.999882347454212560f, + 0.012271538285719944f, -0.999924701839144500f, 0.009203754782059960f, + -0.999957644551963900f, + 0.006135884649154515f, -0.999981175282601110f, 0.003067956762966138f, + -0.999995293809576190f +}; + +static const float32_t Weights_2048[4096] = { + 1.000000000000000000f, 0.000000000000000000f, 0.999999705862882230f, + -0.000766990318742704f, + 0.999998823451701880f, -0.001533980186284766f, 0.999997352766978210f, + -0.002300969151425805f, + 0.999995293809576190f, -0.003067956762965976f, 0.999992646580707190f, + -0.003834942569706228f, + 0.999989411081928400f, -0.004601926120448571f, 0.999985587315143200f, + -0.005368906963996343f, + 0.999981175282601110f, -0.006135884649154475f, 0.999976174986897610f, + -0.006902858724729756f, + 0.999970586430974140f, -0.007669828739531097f, 0.999964409618118280f, + -0.008436794242369799f, + 0.999957644551963900f, -0.009203754782059819f, 0.999950291236490480f, + -0.009970709907418031f, + 0.999942349676023910f, -0.010737659167264491f, 0.999933819875236000f, + -0.011504602110422714f, + 0.999924701839144500f, -0.012271538285719925f, 0.999914995573113470f, + -0.013038467241987334f, + 0.999904701082852900f, -0.013805388528060391f, 0.999893818374418490f, + -0.014572301692779064f, + 0.999882347454212560f, -0.015339206284988100f, 0.999870288328982950f, + -0.016106101853537287f, + 0.999857641005823860f, -0.016872987947281710f, 0.999844405492175240f, + -0.017639864115082053f, + 0.999830581795823400f, -0.018406729905804820f, 0.999816169924900410f, + -0.019173584868322623f, + 0.999801169887884260f, -0.019940428551514441f, 0.999785581693599210f, + -0.020707260504265895f, + 0.999769405351215280f, -0.021474080275469508f, 0.999752640870248840f, + -0.022240887414024961f, + 0.999735288260561680f, -0.023007681468839369f, 0.999717347532362190f, + -0.023774461988827555f, + 0.999698818696204250f, -0.024541228522912288f, 0.999679701762987930f, + -0.025307980620024571f, + 0.999659996743959220f, -0.026074717829103901f, 0.999639703650710200f, + -0.026841439699098531f, + 0.999618822495178640f, -0.027608145778965740f, 0.999597353289648380f, + -0.028374835617672099f, + 0.999575296046749220f, -0.029141508764193722f, 0.999552650779456990f, + -0.029908164767516555f, + 0.999529417501093140f, -0.030674803176636626f, 0.999505596225325310f, + -0.031441423540560301f, + 0.999481186966166950f, -0.032208025408304586f, 0.999456189737977340f, + -0.032974608328897335f, + 0.999430604555461730f, -0.033741171851377580f, 0.999404431433671300f, + -0.034507715524795750f, + 0.999377670388002850f, -0.035274238898213947f, 0.999350321434199440f, + -0.036040741520706229f, + 0.999322384588349540f, -0.036807222941358832f, 0.999293859866887790f, + -0.037573682709270494f, + 0.999264747286594420f, -0.038340120373552694f, 0.999235046864595850f, + -0.039106535483329888f, + 0.999204758618363890f, -0.039872927587739811f, 0.999173882565716380f, + -0.040639296235933736f, + 0.999142418724816910f, -0.041405640977076739f, 0.999110367114174890f, + -0.042171961360347947f, + 0.999077727752645360f, -0.042938256934940820f, 0.999044500659429290f, + -0.043704527250063421f, + 0.999010685854073380f, -0.044470771854938668f, 0.998976283356469820f, + -0.045236990298804590f, + 0.998941293186856870f, -0.046003182130914623f, 0.998905715365818290f, + -0.046769346900537863f, + 0.998869549914283560f, -0.047535484156959303f, 0.998832796853527990f, + -0.048301593449480144f, + 0.998795456205172410f, -0.049067674327418015f, 0.998757527991183340f, + -0.049833726340107277f, + 0.998719012233872940f, -0.050599749036899282f, 0.998679908955899090f, + -0.051365741967162593f, + 0.998640218180265270f, -0.052131704680283324f, 0.998599939930320370f, + -0.052897636725665324f, + 0.998559074229759310f, -0.053663537652730520f, 0.998517621102622210f, + -0.054429407010919133f, + 0.998475580573294770f, -0.055195244349689934f, 0.998432952666508440f, + -0.055961049218520569f, + 0.998389737407340160f, -0.056726821166907748f, 0.998345934821212370f, + -0.057492559744367566f, + 0.998301544933892890f, -0.058258264500435752f, 0.998256567771495180f, + -0.059023934984667931f, + 0.998211003360478190f, -0.059789570746639868f, 0.998164851727646240f, + -0.060555171335947788f, + 0.998118112900149180f, -0.061320736302208578f, 0.998070786905482340f, + -0.062086265195060088f, + 0.998022873771486240f, -0.062851757564161406f, 0.997974373526346990f, + -0.063617212959193106f, + 0.997925286198596000f, -0.064382630929857465f, 0.997875611817110150f, + -0.065148011025878833f, + 0.997825350411111640f, -0.065913352797003805f, 0.997774502010167820f, + -0.066678655793001557f, + 0.997723066644191640f, -0.067443919563664051f, 0.997671044343441000f, + -0.068209143658806329f, + 0.997618435138519550f, -0.068974327628266746f, 0.997565239060375750f, + -0.069739471021907307f, + 0.997511456140303450f, -0.070504573389613856f, 0.997457086409941910f, + -0.071269634281296401f, + 0.997402129901275300f, -0.072034653246889332f, 0.997346586646633230f, + -0.072799629836351673f, + 0.997290456678690210f, -0.073564563599667426f, 0.997233740030466280f, + -0.074329454086845756f, + 0.997176436735326190f, -0.075094300847921305f, 0.997118546826979980f, + -0.075859103432954447f, + 0.997060070339482960f, -0.076623861392031492f, 0.997001007307235290f, + -0.077388574275265049f, + 0.996941357764982160f, -0.078153241632794232f, 0.996881121747813850f, + -0.078917863014784942f, + 0.996820299291165670f, -0.079682437971430126f, 0.996758890430818000f, + -0.080446966052950014f, + 0.996696895202896060f, -0.081211446809592441f, 0.996634313643869900f, + -0.081975879791633066f, + 0.996571145790554840f, -0.082740264549375692f, 0.996507391680110820f, + -0.083504600633152432f, + 0.996443051350042630f, -0.084268887593324071f, 0.996378124838200210f, + -0.085033124980280275f, + 0.996312612182778000f, -0.085797312344439894f, 0.996246513422315520f, + -0.086561449236251170f, + 0.996179828595696980f, -0.087325535206192059f, 0.996112557742151130f, + -0.088089569804770507f, + 0.996044700901251970f, -0.088853552582524600f, 0.995976258112917790f, + -0.089617483090022959f, + 0.995907229417411720f, -0.090381360877864983f, 0.995837614855341610f, + -0.091145185496681005f, + 0.995767414467659820f, -0.091908956497132724f, 0.995696628295663520f, + -0.092672673429913310f, + 0.995625256380994310f, -0.093436335845747787f, 0.995553298765638470f, + -0.094199943295393204f, + 0.995480755491926940f, -0.094963495329638992f, 0.995407626602534900f, + -0.095726991499307162f, + 0.995333912140482280f, -0.096490431355252593f, 0.995259612149133390f, + -0.097253814448363271f, + 0.995184726672196930f, -0.098017140329560604f, 0.995109255753726110f, + -0.098780408549799623f, + 0.995033199438118630f, -0.099543618660069319f, 0.994956557770116380f, + -0.100306770211392860f, + 0.994879330794805620f, -0.101069862754827820f, 0.994801518557617110f, + -0.101832895841466530f, + 0.994723121104325700f, -0.102595869022436280f, 0.994644138481050710f, + -0.103358781848899610f, + 0.994564570734255420f, -0.104121633872054590f, 0.994484417910747600f, + -0.104884424643134970f, + 0.994403680057679100f, -0.105647153713410620f, 0.994322357222545810f, + -0.106409820634187680f, + 0.994240449453187900f, -0.107172424956808840f, 0.994157956797789730f, + -0.107934966232653650f, + 0.994074879304879370f, -0.108697444013138720f, 0.993991217023329380f, + -0.109459857849717980f, + 0.993906970002356060f, -0.110222207293883060f, 0.993822138291519660f, + -0.110984491897163390f, + 0.993736721940724600f, -0.111746711211126590f, 0.993650721000219120f, + -0.112508864787378690f, + 0.993564135520595300f, -0.113270952177564350f, 0.993476965552789190f, + -0.114032972933367200f, + 0.993389211148080650f, -0.114794926606510080f, 0.993300872358093280f, + -0.115556812748755260f, + 0.993211949234794500f, -0.116318630911904750f, 0.993122441830495580f, + -0.117080380647800590f, + 0.993032350197851410f, -0.117842061508324980f, 0.992941674389860470f, + -0.118603673045400720f, + 0.992850414459865100f, -0.119365214810991350f, 0.992758570461551140f, + -0.120126686357101500f, + 0.992666142448948020f, -0.120888087235777080f, 0.992573130476428810f, + -0.121649416999105530f, + 0.992479534598709970f, -0.122410675199216200f, 0.992385354870851670f, + -0.123171861388280480f, + 0.992290591348257370f, -0.123932975118512160f, 0.992195244086673920f, + -0.124694015942167640f, + 0.992099313142191800f, -0.125454983411546230f, 0.992002798571244520f, + -0.126215877078990350f, + 0.991905700430609330f, -0.126976696496885870f, 0.991808018777406430f, + -0.127737441217662310f, + 0.991709753669099530f, -0.128498110793793170f, 0.991610905163495370f, + -0.129258704777796140f, + 0.991511473318743900f, -0.130019222722233350f, 0.991411458193338540f, + -0.130779664179711710f, + 0.991310859846115440f, -0.131540028702883120f, 0.991209678336254060f, + -0.132300315844444650f, + 0.991107913723276890f, -0.133060525157139060f, 0.991005566067049370f, + -0.133820656193754720f, + 0.990902635427780010f, -0.134580708507126170f, 0.990799121866020370f, + -0.135340681650134210f, + 0.990695025442664630f, -0.136100575175706200f, 0.990590346218950150f, + -0.136860388636816380f, + 0.990485084256457090f, -0.137620121586486040f, 0.990379239617108160f, + -0.138379773577783890f, + 0.990272812363169110f, -0.139139344163826200f, 0.990165802557248400f, + -0.139898832897777210f, + 0.990058210262297120f, -0.140658239332849210f, 0.989950035541608990f, + -0.141417563022303020f, + 0.989841278458820530f, -0.142176803519448030f, 0.989731939077910570f, + -0.142935960377642670f, + 0.989622017463200890f, -0.143695033150294470f, 0.989511513679355190f, + -0.144454021390860470f, + 0.989400427791380380f, -0.145212924652847460f, 0.989288759864625170f, + -0.145971742489812210f, + 0.989176509964781010f, -0.146730474455361750f, 0.989063678157881540f, + -0.147489120103153570f, + 0.988950264510302990f, -0.148247678986896030f, 0.988836269088763540f, + -0.149006150660348450f, + 0.988721691960323780f, -0.149764534677321510f, 0.988606533192386450f, + -0.150522830591677400f, + 0.988490792852696590f, -0.151281037957330220f, 0.988374471009341280f, + -0.152039156328246050f, + 0.988257567730749460f, -0.152797185258443440f, 0.988140083085692570f, + -0.153555124301993450f, + 0.988022017143283530f, -0.154312973013020100f, 0.987903369972977790f, + -0.155070730945700510f, + 0.987784141644572180f, -0.155828397654265230f, 0.987664332228205710f, + -0.156585972692998430f, + 0.987543941794359230f, -0.157343455616238250f, 0.987422970413855410f, + -0.158100845978376980f, + 0.987301418157858430f, -0.158858143333861450f, 0.987179285097874340f, + -0.159615347237193060f, + 0.987056571305750970f, -0.160372457242928280f, 0.986933276853677710f, + -0.161129472905678810f, + 0.986809401814185530f, -0.161886393780111830f, 0.986684946260146690f, + -0.162643219420950310f, + 0.986559910264775410f, -0.163399949382973230f, 0.986434293901627180f, + -0.164156583221015810f, + 0.986308097244598670f, -0.164913120489969890f, 0.986181320367928270f, + -0.165669560744784120f, + 0.986053963346195440f, -0.166425903540464100f, 0.985926026254321130f, + -0.167182148432072940f, + 0.985797509167567480f, -0.167938294974731170f, 0.985668412161537550f, + -0.168694342723617330f, + 0.985538735312176060f, -0.169450291233967960f, 0.985408478695768420f, + -0.170206140061078070f, + 0.985277642388941220f, -0.170961888760301220f, 0.985146226468662230f, + -0.171717536887049970f, + 0.985014231012239840f, -0.172473083996795950f, 0.984881656097323700f, + -0.173228529645070320f, + 0.984748501801904210f, -0.173983873387463820f, 0.984614768204312600f, + -0.174739114779627200f, + 0.984480455383220930f, -0.175494253377271430f, 0.984345563417641900f, + -0.176249288736167880f, + 0.984210092386929030f, -0.177004220412148750f, 0.984074042370776450f, + -0.177759047961107170f, + 0.983937413449218920f, -0.178513770938997510f, 0.983800205702631600f, + -0.179268388901835750f, + 0.983662419211730250f, -0.180022901405699510f, 0.983524054057571260f, + -0.180777308006728590f, + 0.983385110321551180f, -0.181531608261124970f, 0.983245588085407070f, + -0.182285801725153300f, + 0.983105487431216290f, -0.183039887955140950f, 0.982964808441396440f, + -0.183793866507478450f, + 0.982823551198705240f, -0.184547736938619620f, 0.982681715786240860f, + -0.185301498805081900f, + 0.982539302287441240f, -0.186055151663446630f, 0.982396310786084690f, + -0.186808695070359270f, + 0.982252741366289370f, -0.187562128582529600f, 0.982108594112513610f, + -0.188315451756732120f, + 0.981963869109555240f, -0.189068664149806190f, 0.981818566442552500f, + -0.189821765318656410f, + 0.981672686196983110f, -0.190574754820252740f, 0.981526228458664770f, + -0.191327632211630900f, + 0.981379193313754560f, -0.192080397049892440f, 0.981231580848749730f, + -0.192833048892205230f, + 0.981083391150486710f, -0.193585587295803610f, 0.980934624306141640f, + -0.194338011817988600f, + 0.980785280403230430f, -0.195090322016128250f, 0.980635359529608120f, + -0.195842517447657850f, + 0.980484861773469380f, -0.196594597670080220f, 0.980333787223347960f, + -0.197346562240965920f, + 0.980182135968117430f, -0.198098410717953560f, 0.980029908096990090f, + -0.198850142658750090f, + 0.979877103699517640f, -0.199601757621130970f, 0.979723722865591170f, + -0.200353255162940450f, + 0.979569765685440520f, -0.201104634842091900f, 0.979415232249634780f, + -0.201855896216568050f, + 0.979260122649082020f, -0.202607038844421130f, 0.979104436975029250f, + -0.203358062283773320f, + 0.978948175319062200f, -0.204108966092816870f, 0.978791337773105670f, + -0.204859749829814420f, + 0.978633924429423210f, -0.205610413053099240f, 0.978475935380616830f, + -0.206360955321075510f, + 0.978317370719627650f, -0.207111376192218560f, 0.978158230539735050f, + -0.207861675225075070f, + 0.977998514934557140f, -0.208611851978263490f, 0.977838223998050430f, + -0.209361906010474160f, + 0.977677357824509930f, -0.210111836880469610f, 0.977515916508569280f, + -0.210861644147084860f, + 0.977353900145199960f, -0.211611327369227550f, 0.977191308829712280f, + -0.212360886105878420f, + 0.977028142657754390f, -0.213110319916091360f, 0.976864401725312640f, + -0.213859628358993750f, + 0.976700086128711840f, -0.214608810993786760f, 0.976535195964614470f, + -0.215357867379745550f, + 0.976369731330021140f, -0.216106797076219520f, 0.976203692322270560f, + -0.216855599642632620f, + 0.976037079039039020f, -0.217604274638483640f, 0.975869891578341030f, + -0.218352821623346320f, + 0.975702130038528570f, -0.219101240156869800f, 0.975533794518291360f, + -0.219849529798778700f, + 0.975364885116656980f, -0.220597690108873510f, 0.975195401932990370f, + -0.221345720647030810f, + 0.975025345066994120f, -0.222093620973203510f, 0.974854714618708430f, + -0.222841390647421120f, + 0.974683510688510670f, -0.223589029229789990f, 0.974511733377115720f, + -0.224336536280493600f, + 0.974339382785575860f, -0.225083911359792830f, 0.974166459015280320f, + -0.225831154028026170f, + 0.973992962167955830f, -0.226578263845610000f, 0.973818892345666100f, + -0.227325240373038860f, + 0.973644249650811980f, -0.228072083170885730f, 0.973469034186131070f, + -0.228818791799802220f, + 0.973293246054698250f, -0.229565365820518870f, 0.973116885359925130f, + -0.230311804793845440f, + 0.972939952205560180f, -0.231058108280671110f, 0.972762446695688570f, + -0.231804275841964780f, + 0.972584368934732210f, -0.232550307038775240f, 0.972405719027449770f, + -0.233296201432231590f, + 0.972226497078936270f, -0.234041958583543430f, 0.972046703194623500f, + -0.234787578054000970f, + 0.971866337480279400f, -0.235533059404975490f, 0.971685400042008540f, + -0.236278402197919570f, + 0.971503890986251780f, -0.237023605994367200f, 0.971321810419786160f, + -0.237768670355934190f, + 0.971139158449725090f, -0.238513594844318420f, 0.970955935183517970f, + -0.239258379021299980f, + 0.970772140728950350f, -0.240003022448741500f, 0.970587775194143630f, + -0.240747524688588430f, + 0.970402838687555500f, -0.241491885302869330f, 0.970217331317979160f, + -0.242236103853696010f, + 0.970031253194543970f, -0.242980179903263870f, 0.969844604426714830f, + -0.243724113013852160f, + 0.969657385124292450f, -0.244467902747824150f, 0.969469595397413060f, + -0.245211548667627540f, + 0.969281235356548530f, -0.245955050335794590f, 0.969092305112506210f, + -0.246698407314942410f, + 0.968902804776428870f, -0.247441619167773270f, 0.968712734459794780f, + -0.248184685457074780f, + 0.968522094274417380f, -0.248927605745720150f, 0.968330884332445190f, + -0.249670379596668570f, + 0.968139104746362440f, -0.250413006572965220f, 0.967946755628987800f, + -0.251155486237741920f, + 0.967753837093475510f, -0.251897818154216970f, 0.967560349253314360f, + -0.252640001885695520f, + 0.967366292222328510f, -0.253382036995570160f, 0.967171666114676640f, + -0.254123923047320620f, + 0.966976471044852070f, -0.254865659604514570f, 0.966780707127683270f, + -0.255607246230807380f, + 0.966584374478333120f, -0.256348682489942910f, 0.966387473212298900f, + -0.257089967945753120f, + 0.966190003445412500f, -0.257831102162158990f, 0.965991965293840570f, + -0.258572084703170340f, + 0.965793358874083680f, -0.259312915132886230f, 0.965594184302976830f, + -0.260053593015495190f, + 0.965394441697689400f, -0.260794117915275510f, 0.965194131175724720f, + -0.261534489396595520f, + 0.964993252854920320f, -0.262274707023913590f, 0.964791806853447900f, + -0.263014770361779000f, + 0.964589793289812760f, -0.263754678974831350f, 0.964387212282854290f, + -0.264494432427801630f, + 0.964184063951745830f, -0.265234030285511790f, 0.963980348415994110f, + -0.265973472112875590f, + 0.963776065795439840f, -0.266712757474898370f, 0.963571216210257320f, + -0.267451885936677620f, + 0.963365799780954050f, -0.268190857063403180f, 0.963159816628371360f, + -0.268929670420357260f, + 0.962953266873683880f, -0.269668325572915090f, 0.962746150638399410f, + -0.270406822086544820f, + 0.962538468044359160f, -0.271145159526808010f, 0.962330219213737400f, + -0.271883337459359720f, + 0.962121404269041580f, -0.272621355449948980f, 0.961912023333112210f, + -0.273359213064418680f, + 0.961702076529122540f, -0.274096909868706380f, 0.961491563980579000f, + -0.274834445428843940f, + 0.961280485811320640f, -0.275571819310958140f, 0.961068842145519350f, + -0.276309031081271080f, + 0.960856633107679660f, -0.277046080306099900f, 0.960643858822638590f, + -0.277782966551857690f, + 0.960430519415565790f, -0.278519689385053060f, 0.960216615011963430f, + -0.279256248372291180f, + 0.960002145737665960f, -0.279992643080273220f, 0.959787111718839900f, + -0.280728873075797190f, + 0.959571513081984520f, -0.281464937925757940f, 0.959355349953930790f, + -0.282200837197147560f, + 0.959138622461841890f, -0.282936570457055390f, 0.958921330733213170f, + -0.283672137272668430f, + 0.958703474895871600f, -0.284407537211271880f, 0.958485055077976100f, + -0.285142769840248670f, + 0.958266071408017670f, -0.285877834727080620f, 0.958046524014818600f, + -0.286612731439347790f, + 0.957826413027532910f, -0.287347459544729510f, 0.957605738575646350f, + -0.288082018611004130f, + 0.957384500788975860f, -0.288816408206049480f, 0.957162699797670210f, + -0.289550627897843030f, + 0.956940335732208820f, -0.290284677254462330f, 0.956717408723403050f, + -0.291018555844085090f, + 0.956493918902395100f, -0.291752263234989260f, 0.956269866400658030f, + -0.292485798995553880f, + 0.956045251349996410f, -0.293219162694258630f, 0.955820073882545420f, + -0.293952353899684660f, + 0.955594334130771110f, -0.294685372180514330f, 0.955368032227470350f, + -0.295418217105532010f, + 0.955141168305770780f, -0.296150888243623790f, 0.954913742499130520f, + -0.296883385163778270f, + 0.954685754941338340f, -0.297615707435086200f, 0.954457205766513490f, + -0.298347854626741400f, + 0.954228095109105670f, -0.299079826308040480f, 0.953998423103894490f, + -0.299811622048383350f, + 0.953768189885990330f, -0.300543241417273450f, 0.953537395590833280f, + -0.301274683984317950f, + 0.953306040354193860f, -0.302005949319228080f, 0.953074124312172200f, + -0.302737036991819140f, + 0.952841647601198720f, -0.303467946572011320f, 0.952608610358033350f, + -0.304198677629829110f, + 0.952375012719765880f, -0.304929229735402370f, 0.952140854823815830f, + -0.305659602458966120f, + 0.951906136807932350f, -0.306389795370860920f, 0.951670858810193860f, + -0.307119808041533100f, + 0.951435020969008340f, -0.307849640041534870f, 0.951198623423113230f, + -0.308579290941525090f, + 0.950961666311575080f, -0.309308760312268730f, 0.950724149773789610f, + -0.310038047724637890f, + 0.950486073949481700f, -0.310767152749611470f, 0.950247438978705230f, + -0.311496074958275910f, + 0.950008245001843000f, -0.312224813921824880f, 0.949768492159606680f, + -0.312953369211560200f, + 0.949528180593036670f, -0.313681740398891520f, 0.949287310443502120f, + -0.314409927055336660f, + 0.949045881852700560f, -0.315137928752522440f, 0.948803894962658490f, + -0.315865745062183960f, + 0.948561349915730270f, -0.316593375556165850f, 0.948318246854599090f, + -0.317320819806421740f, + 0.948074585922276230f, -0.318048077385014950f, 0.947830367262101010f, + -0.318775147864118480f, + 0.947585591017741090f, -0.319502030816015690f, 0.947340257333192050f, + -0.320228725813099860f, + 0.947094366352777220f, -0.320955232427875210f, 0.946847918221148000f, + -0.321681550232956580f, + 0.946600913083283530f, -0.322407678801069850f, 0.946353351084490590f, + -0.323133617705052330f, + 0.946105232370403450f, -0.323859366517852850f, 0.945856557086983910f, + -0.324584924812532150f, + 0.945607325380521280f, -0.325310292162262930f, 0.945357537397632290f, + -0.326035468140330240f, + 0.945107193285260610f, -0.326760452320131730f, 0.944856293190677210f, + -0.327485244275178000f, + 0.944604837261480260f, -0.328209843579092500f, 0.944352825645594750f, + -0.328934249805612200f, + 0.944100258491272660f, -0.329658462528587490f, 0.943847135947092690f, + -0.330382481321982780f, + 0.943593458161960390f, -0.331106305759876430f, 0.943339225285107720f, + -0.331829935416461110f, + 0.943084437466093490f, -0.332553369866044220f, 0.942829094854802710f, + -0.333276608683047930f, + 0.942573197601446870f, -0.333999651442009380f, 0.942316745856563780f, + -0.334722497717581220f, + 0.942059739771017310f, -0.335445147084531600f, 0.941802179495997650f, + -0.336167599117744520f, + 0.941544065183020810f, -0.336889853392220050f, 0.941285396983928660f, + -0.337611909483074620f, + 0.941026175050889260f, -0.338333766965541130f, 0.940766399536396070f, + -0.339055425414969640f, + 0.940506070593268300f, -0.339776884406826850f, 0.940245188374650880f, + -0.340498143516697160f, + 0.939983753034014050f, -0.341219202320282360f, 0.939721764725153340f, + -0.341940060393402190f, + 0.939459223602189920f, -0.342660717311994380f, 0.939196129819569900f, + -0.343381172652115040f, + 0.938932483532064600f, -0.344101425989938810f, 0.938668284894770170f, + -0.344821476901759290f, + 0.938403534063108060f, -0.345541324963989090f, 0.938138231192824360f, + -0.346260969753160010f, + 0.937872376439989890f, -0.346980410845923680f, 0.937605969960999990f, + -0.347699647819051380f, + 0.937339011912574960f, -0.348418680249434560f, 0.937071502451759190f, + -0.349137507714084970f, + 0.936803441735921560f, -0.349856129790134920f, 0.936534829922755500f, + -0.350574546054837510f, + 0.936265667170278260f, -0.351292756085567090f, 0.935995953636831410f, + -0.352010759459819080f, + 0.935725689481080370f, -0.352728555755210730f, 0.935454874862014620f, + -0.353446144549480810f, + 0.935183509938947610f, -0.354163525420490340f, 0.934911594871516090f, + -0.354880697946222790f, + 0.934639129819680780f, -0.355597661704783850f, 0.934366114943725790f, + -0.356314416274402410f, + 0.934092550404258980f, -0.357030961233429980f, 0.933818436362210960f, + -0.357747296160341900f, + 0.933543772978836170f, -0.358463420633736540f, 0.933268560415712050f, + -0.359179334232336500f, + 0.932992798834738960f, -0.359895036534988110f, 0.932716488398140250f, + -0.360610527120662270f, + 0.932439629268462360f, -0.361325805568454280f, 0.932162221608574430f, + -0.362040871457584180f, + 0.931884265581668150f, -0.362755724367397230f, 0.931605761351257830f, + -0.363470363877363760f, + 0.931326709081180430f, -0.364184789567079890f, 0.931047108935595280f, + -0.364899001016267320f, + 0.930766961078983710f, -0.365612997804773850f, 0.930486265676149780f, + -0.366326779512573590f, + 0.930205022892219070f, -0.367040345719767180f, 0.929923232892639670f, + -0.367753696006581980f, + 0.929640895843181330f, -0.368466829953372320f, 0.929358011909935500f, + -0.369179747140620020f, + 0.929074581259315860f, -0.369892447148934100f, 0.928790604058057020f, + -0.370604929559051670f, + 0.928506080473215590f, -0.371317193951837540f, 0.928221010672169440f, + -0.372029239908285010f, + 0.927935394822617890f, -0.372741067009515760f, 0.927649233092581180f, + -0.373452674836780300f, + 0.927362525650401110f, -0.374164062971457930f, 0.927075272664740100f, + -0.374875230995057540f, + 0.926787474304581750f, -0.375586178489217220f, 0.926499130739230510f, + -0.376296905035704790f, + 0.926210242138311380f, -0.377007410216418260f, 0.925920808671770070f, + -0.377717693613385640f, + 0.925630830509872720f, -0.378427754808765560f, 0.925340307823206310f, + -0.379137593384847320f, + 0.925049240782677580f, -0.379847208924051160f, 0.924757629559513910f, + -0.380556601008928520f, + 0.924465474325262600f, -0.381265769222162380f, 0.924172775251791200f, + -0.381974713146567220f, + 0.923879532511286740f, -0.382683432365089780f, 0.923585746276256670f, + -0.383391926460808660f, + 0.923291416719527640f, -0.384100195016935040f, 0.922996544014246250f, + -0.384808237616812880f, + 0.922701128333878630f, -0.385516053843918850f, 0.922405169852209880f, + -0.386223643281862980f, + 0.922108668743345180f, -0.386931005514388580f, 0.921811625181708120f, + -0.387638140125372730f, + 0.921514039342042010f, -0.388345046698826250f, 0.921215911399408730f, + -0.389051724818894380f, + 0.920917241529189520f, -0.389758174069856410f, 0.920618029907083970f, + -0.390464394036126590f, + 0.920318276709110590f, -0.391170384302253870f, 0.920017982111606570f, + -0.391876144452922350f, + 0.919717146291227360f, -0.392581674072951470f, 0.919415769424947070f, + -0.393286972747296400f, + 0.919113851690057770f, -0.393992040061048100f, 0.918811393264170050f, + -0.394696875599433560f, + 0.918508394325212250f, -0.395401478947816350f, 0.918204855051430900f, + -0.396105849691696270f, + 0.917900775621390500f, -0.396809987416710310f, 0.917596156213972950f, + -0.397513891708632330f, + 0.917290997008377910f, -0.398217562153373560f, 0.916985298184123000f, + -0.398920998336982910f, + 0.916679059921042700f, -0.399624199845646790f, 0.916372282399289140f, + -0.400327166265690090f, + 0.916064965799331720f, -0.401029897183575620f, 0.915757110301956720f, + -0.401732392185905010f, + 0.915448716088267830f, -0.402434650859418430f, 0.915139783339685260f, + -0.403136672790995300f, + 0.914830312237946200f, -0.403838457567654070f, 0.914520302965104450f, + -0.404540004776553000f, + 0.914209755703530690f, -0.405241314004989860f, 0.913898670635911680f, + -0.405942384840402510f, + 0.913587047945250810f, -0.406643216870369030f, 0.913274887814867760f, + -0.407343809682607970f, + 0.912962190428398210f, -0.408044162864978690f, 0.912648955969793900f, + -0.408744276005481360f, + 0.912335184623322750f, -0.409444148692257590f, 0.912020876573568340f, + -0.410143780513590240f, + 0.911706032005429880f, -0.410843171057903910f, 0.911390651104122430f, + -0.411542319913765220f, + 0.911074734055176360f, -0.412241226669882890f, 0.910758281044437570f, + -0.412939890915108080f, + 0.910441292258067250f, -0.413638312238434500f, 0.910123767882541680f, + -0.414336490228999100f, + 0.909805708104652220f, -0.415034424476081630f, 0.909487113111505430f, + -0.415732114569105360f, + 0.909167983090522380f, -0.416429560097637150f, 0.908848318229439120f, + -0.417126760651387870f, + 0.908528118716306120f, -0.417823715820212270f, 0.908207384739488700f, + -0.418520425194109700f, + 0.907886116487666260f, -0.419216888363223910f, 0.907564314149832630f, + -0.419913104917843620f, + 0.907241977915295820f, -0.420609074448402510f, 0.906919107973678140f, + -0.421304796545479640f, + 0.906595704514915330f, -0.422000270799799680f, 0.906271767729257660f, + -0.422695496802232950f, + 0.905947297807268460f, -0.423390474143796050f, 0.905622294939825270f, + -0.424085202415651560f, + 0.905296759318118820f, -0.424779681209108810f, 0.904970691133653250f, + -0.425473910115623800f, + 0.904644090578246240f, -0.426167888726799620f, 0.904316957844028320f, + -0.426861616634386430f, + 0.903989293123443340f, -0.427555093430282080f, 0.903661096609247980f, + -0.428248318706531960f, + 0.903332368494511820f, -0.428941292055329490f, 0.903003108972617150f, + -0.429634013069016380f, + 0.902673318237258830f, -0.430326481340082610f, 0.902342996482444200f, + -0.431018696461167030f, + 0.902012143902493180f, -0.431710658025057260f, 0.901680760692037730f, + -0.432402365624690140f, + 0.901348847046022030f, -0.433093818853151960f, 0.901016403159702330f, + -0.433785017303678520f, + 0.900683429228646970f, -0.434475960569655650f, 0.900349925448735600f, + -0.435166648244619260f, + 0.900015892016160280f, -0.435857079922255470f, 0.899681329127423930f, + -0.436547255196401200f, + 0.899346236979341570f, -0.437237173661044090f, 0.899010615769039070f, + -0.437926834910322860f, + 0.898674465693953820f, -0.438616238538527660f, 0.898337786951834310f, + -0.439305384140099950f, + 0.898000579740739880f, -0.439994271309633260f, 0.897662844259040860f, + -0.440682899641872900f, + 0.897324580705418320f, -0.441371268731716670f, 0.896985789278863970f, + -0.442059378174214700f, + 0.896646470178680150f, -0.442747227564570020f, 0.896306623604479550f, + -0.443434816498138480f, + 0.895966249756185220f, -0.444122144570429200f, 0.895625348834030110f, + -0.444809211377104880f, + 0.895283921038557580f, -0.445496016513981740f, 0.894941966570620750f, + -0.446182559577030070f, + 0.894599485631382700f, -0.446868840162374160f, 0.894256478422316040f, + -0.447554857866293010f, + 0.893912945145203250f, -0.448240612285219890f, 0.893568886002135910f, + -0.448926103015743260f, + 0.893224301195515320f, -0.449611329654606540f, 0.892879190928051680f, + -0.450296291798708610f, + 0.892533555402764580f, -0.450980989045103860f, 0.892187394822982480f, + -0.451665420991002490f, + 0.891840709392342720f, -0.452349587233770890f, 0.891493499314791380f, + -0.453033487370931580f, + 0.891145764794583180f, -0.453717121000163870f, 0.890797506036281490f, + -0.454400487719303580f, + 0.890448723244757880f, -0.455083587126343840f, 0.890099416625192320f, + -0.455766418819434640f, + 0.889749586383072780f, -0.456448982396883920f, 0.889399232724195520f, + -0.457131277457156980f, + 0.889048355854664570f, -0.457813303598877170f, 0.888696955980891600f, + -0.458495060420826270f, + 0.888345033309596350f, -0.459176547521944090f, 0.887992588047805560f, + -0.459857764501329540f, + 0.887639620402853930f, -0.460538710958240010f, 0.887286130582383150f, + -0.461219386492092380f, + 0.886932118794342190f, -0.461899790702462730f, 0.886577585246987040f, + -0.462579923189086810f, + 0.886222530148880640f, -0.463259783551860150f, 0.885866953708892790f, + -0.463939371390838520f, + 0.885510856136199950f, -0.464618686306237820f, 0.885154237640285110f, + -0.465297727898434600f, + 0.884797098430937790f, -0.465976495767966180f, 0.884439438718253810f, + -0.466654989515530920f, + 0.884081258712634990f, -0.467333208741988420f, 0.883722558624789660f, + -0.468011153048359830f, + 0.883363338665731580f, -0.468688822035827900f, 0.883003599046780830f, + -0.469366215305737520f, + 0.882643339979562790f, -0.470043332459595620f, 0.882282561676008710f, + -0.470720173099071600f, + 0.881921264348355050f, -0.471396736825997640f, 0.881559448209143780f, + -0.472073023242368660f, + 0.881197113471222090f, -0.472749031950342790f, 0.880834260347742040f, + -0.473424762552241530f, + 0.880470889052160750f, -0.474100214650549970f, 0.880106999798240360f, + -0.474775387847917120f, + 0.879742592800047410f, -0.475450281747155870f, 0.879377668271953290f, + -0.476124895951243580f, + 0.879012226428633530f, -0.476799230063322090f, 0.878646267485068130f, + -0.477473283686698060f, + 0.878279791656541580f, -0.478147056424843010f, 0.877912799158641840f, + -0.478820547881393890f, + 0.877545290207261350f, -0.479493757660153010f, 0.877177265018595940f, + -0.480166685365088390f, + 0.876808723809145650f, -0.480839330600333960f, 0.876439666795713610f, + -0.481511692970189860f, + 0.876070094195406600f, -0.482183772079122720f, 0.875700006225634600f, + -0.482855567531765670f, + 0.875329403104110890f, -0.483527078932918740f, 0.874958285048851650f, + -0.484198305887549030f, + 0.874586652278176110f, -0.484869248000791060f, 0.874214505010706300f, + -0.485539904877946960f, + 0.873841843465366860f, -0.486210276124486420f, 0.873468667861384880f, + -0.486880361346047340f, + 0.873094978418290090f, -0.487550160148436000f, 0.872720775355914300f, + -0.488219672137626790f, + 0.872346058894391540f, -0.488888896919763170f, 0.871970829254157810f, + -0.489557834101157440f, + 0.871595086655950980f, -0.490226483288291160f, 0.871218831320811020f, + -0.490894844087815090f, + 0.870842063470078980f, -0.491562916106549900f, 0.870464783325397670f, + -0.492230698951486020f, + 0.870086991108711460f, -0.492898192229784040f, 0.869708687042265670f, + -0.493565395548774770f, + 0.869329871348606840f, -0.494232308515959670f, 0.868950544250582380f, + -0.494898930739011260f, + 0.868570705971340900f, -0.495565261825772540f, 0.868190356734331310f, + -0.496231301384258250f, + 0.867809496763303320f, -0.496897049022654470f, 0.867428126282306920f, + -0.497562504349319150f, + 0.867046245515692650f, -0.498227666972781870f, 0.866663854688111130f, + -0.498892536501744590f, + 0.866280954024512990f, -0.499557112545081840f, 0.865897543750148820f, + -0.500221394711840680f, + 0.865513624090569090f, -0.500885382611240710f, 0.865129195271623800f, + -0.501549075852675390f, + 0.864744257519462380f, -0.502212474045710790f, 0.864358811060534030f, + -0.502875576800086990f, + 0.863972856121586810f, -0.503538383725717580f, 0.863586392929668100f, + -0.504200894432690340f, + 0.863199421712124160f, -0.504863108531267590f, 0.862811942696600330f, + -0.505525025631885390f, + 0.862423956111040610f, -0.506186645345155230f, 0.862035462183687210f, + -0.506847967281863210f, + 0.861646461143081300f, -0.507508991052970870f, 0.861256953218062170f, + -0.508169716269614600f, + 0.860866938637767310f, -0.508830142543106990f, 0.860476417631632070f, + -0.509490269484936360f, + 0.860085390429390140f, -0.510150096706766810f, 0.859693857261072610f, + -0.510809623820439040f, + 0.859301818357008470f, -0.511468850437970300f, 0.858909273947823900f, + -0.512127776171554690f, + 0.858516224264442740f, -0.512786400633562960f, 0.858122669538086140f, + -0.513444723436543460f, + 0.857728610000272120f, -0.514102744193221660f, 0.857334045882815590f, + -0.514760462516501200f, + 0.856938977417828760f, -0.515417878019462930f, 0.856543404837719960f, + -0.516074990315366630f, + 0.856147328375194470f, -0.516731799017649870f, 0.855750748263253920f, + -0.517388303739929060f, + 0.855353664735196030f, -0.518044504095999340f, 0.854956078024614930f, + -0.518700399699834950f, + 0.854557988365400530f, -0.519355990165589640f, 0.854159395991738850f, + -0.520011275107596040f, + 0.853760301138111410f, -0.520666254140367160f, 0.853360704039295430f, + -0.521320926878595660f, + 0.852960604930363630f, -0.521975292937154390f, 0.852560004046684080f, + -0.522629351931096610f, + 0.852158901623919830f, -0.523283103475656430f, 0.851757297898029120f, + -0.523936547186248600f, + 0.851355193105265200f, -0.524589682678468950f, 0.850952587482175730f, + -0.525242509568094710f, + 0.850549481265603480f, -0.525895027471084630f, 0.850145874692685210f, + -0.526547236003579440f, + 0.849741768000852550f, -0.527199134781901280f, 0.849337161427830780f, + -0.527850723422555230f, + 0.848932055211639610f, -0.528502001542228480f, 0.848526449590592650f, + -0.529152968757790610f, + 0.848120344803297230f, -0.529803624686294610f, 0.847713741088654380f, + -0.530453968944976320f, + 0.847306638685858320f, -0.531104001151255000f, 0.846899037834397240f, + -0.531753720922733320f, + 0.846490938774052130f, -0.532403127877197900f, 0.846082341744897050f, + -0.533052221632619450f, + 0.845673246987299070f, -0.533701001807152960f, 0.845263654741918220f, + -0.534349468019137520f, + 0.844853565249707120f, -0.534997619887097150f, 0.844442978751910660f, + -0.535645457029741090f, + 0.844031895490066410f, -0.536292979065963180f, 0.843620315706004150f, + -0.536940185614842910f, + 0.843208239641845440f, -0.537587076295645390f, 0.842795667540004120f, + -0.538233650727821700f, + 0.842382599643185850f, -0.538879908531008420f, 0.841969036194387680f, + -0.539525849325028890f, + 0.841554977436898440f, -0.540171472729892850f, 0.841140423614298080f, + -0.540816778365796670f, + 0.840725374970458070f, -0.541461765853123440f, 0.840309831749540770f, + -0.542106434812443920f, + 0.839893794195999520f, -0.542750784864515890f, 0.839477262554578550f, + -0.543394815630284800f, + 0.839060237070312740f, -0.544038526730883820f, 0.838642717988527300f, + -0.544681917787634530f, + 0.838224705554838080f, -0.545324988422046460f, 0.837806200015150940f, + -0.545967738255817570f, + 0.837387201615661940f, -0.546610166910834860f, 0.836967710602857020f, + -0.547252274009174090f, + 0.836547727223512010f, -0.547894059173100190f, 0.836127251724692270f, + -0.548535522025067390f, + 0.835706284353752600f, -0.549176662187719660f, 0.835284825358337370f, + -0.549817479283890910f, + 0.834862874986380010f, -0.550457972936604810f, 0.834440433486103190f, + -0.551098142769075430f, + 0.834017501106018130f, -0.551737988404707340f, 0.833594078094925140f, + -0.552377509467096070f, + 0.833170164701913190f, -0.553016705580027470f, 0.832745761176359460f, + -0.553655576367479310f, + 0.832320867767929680f, -0.554294121453620000f, 0.831895484726577590f, + -0.554932340462810370f, + 0.831469612302545240f, -0.555570233019602180f, 0.831043250746362320f, + -0.556207798748739930f, + 0.830616400308846310f, -0.556845037275160100f, 0.830189061241102370f, + -0.557481948223991550f, + 0.829761233794523050f, -0.558118531220556100f, 0.829332918220788250f, + -0.558754785890368310f, + 0.828904114771864870f, -0.559390711859136140f, 0.828474823700007130f, + -0.560026308752760380f, + 0.828045045257755800f, -0.560661576197336030f, 0.827614779697938400f, + -0.561296513819151470f, + 0.827184027273669130f, -0.561931121244689470f, 0.826752788238348520f, + -0.562565398100626560f, + 0.826321062845663530f, -0.563199344013834090f, 0.825888851349586780f, + -0.563832958611378170f, + 0.825456154004377550f, -0.564466241520519500f, 0.825022971064580220f, + -0.565099192368713980f, + 0.824589302785025290f, -0.565731810783613120f, 0.824155149420828570f, + -0.566364096393063840f, + 0.823720511227391430f, -0.566996048825108680f, 0.823285388460400110f, + -0.567627667707986230f, + 0.822849781375826430f, -0.568258952670131490f, 0.822413690229926390f, + -0.568889903340175860f, + 0.821977115279241550f, -0.569520519346947140f, 0.821540056780597610f, + -0.570150800319470300f, + 0.821102514991104650f, -0.570780745886967260f, 0.820664490168157460f, + -0.571410355678857230f, + 0.820225982569434690f, -0.572039629324757050f, 0.819786992452898990f, + -0.572668566454481160f, + 0.819347520076796900f, -0.573297166698042200f, 0.818907565699658950f, + -0.573925429685650750f, + 0.818467129580298660f, -0.574553355047715760f, 0.818026211977813440f, + -0.575180942414845080f, + 0.817584813151583710f, -0.575808191417845340f, 0.817142933361272970f, + -0.576435101687721830f, + 0.816700572866827850f, -0.577061672855679440f, 0.816257731928477390f, + -0.577687904553122800f, + 0.815814410806733780f, -0.578313796411655590f, 0.815370609762391290f, + -0.578939348063081780f, + 0.814926329056526620f, -0.579564559139405630f, 0.814481568950498610f, + -0.580189429272831680f, + 0.814036329705948410f, -0.580813958095764530f, 0.813590611584798510f, + -0.581438145240810170f, + 0.813144414849253590f, -0.582061990340775440f, 0.812697739761799490f, + -0.582685493028668460f, + 0.812250586585203880f, -0.583308652937698290f, 0.811802955582515470f, + -0.583931469701276180f, + 0.811354847017063730f, -0.584553942953015330f, 0.810906261152459670f, + -0.585176072326730410f, + 0.810457198252594770f, -0.585797857456438860f, 0.810007658581641140f, + -0.586419297976360500f, + 0.809557642404051260f, -0.587040393520917970f, 0.809107149984558240f, + -0.587661143724736660f, + 0.808656181588174980f, -0.588281548222645220f, 0.808204737480194720f, + -0.588901606649675720f, + 0.807752817926190360f, -0.589521318641063940f, 0.807300423192014450f, + -0.590140683832248820f, + 0.806847553543799330f, -0.590759701858874160f, 0.806394209247956240f, + -0.591378372356787580f, + 0.805940390571176280f, -0.591996694962040990f, 0.805486097780429230f, + -0.592614669310891130f, + 0.805031331142963660f, -0.593232295039799800f, 0.804576090926307110f, + -0.593849571785433630f, + 0.804120377398265810f, -0.594466499184664430f, 0.803664190826924090f, + -0.595083076874569960f, + 0.803207531480644940f, -0.595699304492433360f, 0.802750399628069160f, + -0.596315181675743710f, + 0.802292795538115720f, -0.596930708062196500f, 0.801834719479981310f, + -0.597545883289693160f, + 0.801376171723140240f, -0.598160706996342270f, 0.800917152537344300f, + -0.598775178820458720f, + 0.800457662192622820f, -0.599389298400564540f, 0.799997700959281910f, + -0.600003065375388940f, + 0.799537269107905010f, -0.600616479383868970f, 0.799076366909352350f, + -0.601229540065148500f, + 0.798614994634760820f, -0.601842247058580030f, 0.798153152555543750f, + -0.602454600003723750f, + 0.797690840943391160f, -0.603066598540348160f, 0.797228060070268810f, + -0.603678242308430370f, + 0.796764810208418830f, -0.604289530948155960f, 0.796301091630359110f, + -0.604900464099919820f, + 0.795836904608883570f, -0.605511041404325550f, 0.795372249417061310f, + -0.606121262502186120f, + 0.794907126328237010f, -0.606731127034524480f, 0.794441535616030590f, + -0.607340634642572930f, + 0.793975477554337170f, -0.607949784967773630f, 0.793508952417326660f, + -0.608558577651779450f, + 0.793041960479443640f, -0.609167012336453210f, 0.792574502015407690f, + -0.609775088663868430f, + 0.792106577300212390f, -0.610382806276309480f, 0.791638186609125880f, + -0.610990164816271660f, + 0.791169330217690200f, -0.611597163926461910f, 0.790700008401721610f, + -0.612203803249797950f, + 0.790230221437310030f, -0.612810082429409710f, 0.789759969600819070f, + -0.613416001108638590f, + 0.789289253168885650f, -0.614021558931038380f, 0.788818072418420280f, + -0.614626755540375050f, + 0.788346427626606340f, -0.615231590580626820f, 0.787874319070900220f, + -0.615836063695985090f, + 0.787401747029031430f, -0.616440174530853650f, 0.786928711779001810f, + -0.617043922729849760f, + 0.786455213599085770f, -0.617647307937803870f, 0.785981252767830150f, + -0.618250329799760250f, + 0.785506829564053930f, -0.618852987960976320f, 0.785031944266848080f, + -0.619455282066924020f, + 0.784556597155575240f, -0.620057211763289100f, 0.784080788509869950f, + -0.620658776695972140f, + 0.783604518609638200f, -0.621259976511087550f, 0.783127787735057310f, + -0.621860810854965360f, + 0.782650596166575730f, -0.622461279374149970f, 0.782172944184913010f, + -0.623061381715401260f, + 0.781694832071059390f, -0.623661117525694530f, 0.781216260106276090f, + -0.624260486452220650f, + 0.780737228572094490f, -0.624859488142386340f, 0.780257737750316590f, + -0.625458122243814360f, + 0.779777787923014550f, -0.626056388404343520f, 0.779297379372530300f, + -0.626654286272029350f, + 0.778816512381475980f, -0.627251815495144080f, 0.778335187232733210f, + -0.627848975722176460f, + 0.777853404209453150f, -0.628445766601832710f, 0.777371163595056310f, + -0.629042187783036000f, + 0.776888465673232440f, -0.629638238914926980f, 0.776405310727940390f, + -0.630233919646864370f, + 0.775921699043407690f, -0.630829229628424470f, 0.775437630904130540f, + -0.631424168509401860f, + 0.774953106594873930f, -0.632018735939809060f, 0.774468126400670860f, + -0.632612931569877410f, + 0.773982690606822900f, -0.633206755050057190f, 0.773496799498899050f, + -0.633800206031017280f, + 0.773010453362736990f, -0.634393284163645490f, 0.772523652484441330f, + -0.634985989099049460f, + 0.772036397150384520f, -0.635578320488556110f, 0.771548687647206300f, + -0.636170277983712170f, + 0.771060524261813820f, -0.636761861236284200f, 0.770571907281380810f, + -0.637353069898259130f, + 0.770082836993347900f, -0.637943903621844060f, 0.769593313685422940f, + -0.638534362059466790f, + 0.769103337645579700f, -0.639124444863775730f, 0.768612909162058380f, + -0.639714151687640450f, + 0.768122028523365420f, -0.640303482184151670f, 0.767630696018273380f, + -0.640892436006621380f, + 0.767138911935820400f, -0.641481012808583160f, 0.766646676565310380f, + -0.642069212243792540f, + 0.766153990196312920f, -0.642657033966226860f, 0.765660853118662500f, + -0.643244477630085850f, + 0.765167265622458960f, -0.643831542889791390f, 0.764673227998067140f, + -0.644418229399988380f, + 0.764178740536116670f, -0.645004536815543930f, 0.763683803527501870f, + -0.645590464791548690f, + 0.763188417263381270f, -0.646176012983316280f, 0.762692582035177980f, + -0.646761181046383920f, + 0.762196298134578900f, -0.647345968636512060f, 0.761699565853535380f, + -0.647930375409685340f, + 0.761202385484261780f, -0.648514401022112440f, 0.760704757319236920f, + -0.649098045130225950f, + 0.760206681651202420f, -0.649681307390683190f, 0.759708158773163440f, + -0.650264187460365850f, + 0.759209188978388070f, -0.650846684996380880f, 0.758709772560407390f, + -0.651428799656059820f, + 0.758209909813015280f, -0.652010531096959500f, 0.757709601030268080f, + -0.652591878976862440f, + 0.757208846506484570f, -0.653172842953776760f, 0.756707646536245670f, + -0.653753422685936060f, + 0.756206001414394540f, -0.654333617831800440f, 0.755703911436035880f, + -0.654913428050056030f, + 0.755201376896536550f, -0.655492852999615350f, 0.754698398091524500f, + -0.656071892339617600f, + 0.754194975316889170f, -0.656650545729428940f, 0.753691108868781210f, + -0.657228812828642540f, + 0.753186799043612520f, -0.657806693297078640f, 0.752682046138055340f, + -0.658384186794785050f, + 0.752176850449042810f, -0.658961292982037320f, 0.751671212273768430f, + -0.659538011519338660f, + 0.751165131909686480f, -0.660114342067420480f, 0.750658609654510700f, + -0.660690284287242300f, + 0.750151645806215070f, -0.661265837839992270f, 0.749644240663033480f, + -0.661841002387086870f, + 0.749136394523459370f, -0.662415777590171780f, 0.748628107686245440f, + -0.662990163111121470f, + 0.748119380450403600f, -0.663564158612039770f, 0.747610213115205150f, + -0.664137763755260010f, + 0.747100605980180130f, -0.664710978203344790f, 0.746590559345117310f, + -0.665283801619087180f, + 0.746080073510063780f, -0.665856233665509720f, 0.745569148775325430f, + -0.666428274005865240f, + 0.745057785441466060f, -0.666999922303637470f, 0.744545983809307370f, + -0.667571178222540310f, + 0.744033744179929290f, -0.668142041426518450f, 0.743521066854669120f, + -0.668712511579747980f, + 0.743007952135121720f, -0.669282588346636010f, 0.742494400323139180f, + -0.669852271391821020f, + 0.741980411720831070f, -0.670421560380173090f, 0.741465986630563290f, + -0.670990454976794220f, + 0.740951125354959110f, -0.671558954847018330f, 0.740435828196898020f, + -0.672127059656411730f, + 0.739920095459516200f, -0.672694769070772860f, 0.739403927446205760f, + -0.673262082756132970f, + 0.738887324460615110f, -0.673829000378756040f, 0.738370286806648620f, + -0.674395521605139050f, + 0.737852814788465980f, -0.674961646102011930f, 0.737334908710482910f, + -0.675527373536338520f, + 0.736816568877369900f, -0.676092703575315920f, 0.736297795594053170f, + -0.676657635886374950f, + 0.735778589165713590f, -0.677222170137180330f, 0.735258949897786840f, + -0.677786305995631500f, + 0.734738878095963500f, -0.678350043129861470f, 0.734218374066188280f, + -0.678913381208238410f, + 0.733697438114660370f, -0.679476319899364970f, 0.733176070547832740f, + -0.680038858872078930f, + 0.732654271672412820f, -0.680600997795453020f, 0.732132041795361290f, + -0.681162736338795430f, + 0.731609381223892630f, -0.681724074171649710f, 0.731086290265474340f, + -0.682285010963795570f, + 0.730562769227827590f, -0.682845546385248080f, 0.730038818418926260f, + -0.683405680106258680f, + 0.729514438146997010f, -0.683965411797315400f, 0.728989628720519420f, + -0.684524741129142300f, + 0.728464390448225200f, -0.685083667772700360f, 0.727938723639098620f, + -0.685642191399187470f, + 0.727412628602375770f, -0.686200311680038590f, 0.726886105647544970f, + -0.686758028286925890f, + 0.726359155084346010f, -0.687315340891759050f, 0.725831777222770370f, + -0.687872249166685550f, + 0.725303972373060770f, -0.688428752784090440f, 0.724775740845711280f, + -0.688984851416597040f, + 0.724247082951467000f, -0.689540544737066830f, 0.723717999001323500f, + -0.690095832418599950f, + 0.723188489306527460f, -0.690650714134534600f, 0.722658554178575610f, + -0.691205189558448450f, + 0.722128193929215350f, -0.691759258364157750f, 0.721597408870443770f, + -0.692312920225718220f, + 0.721066199314508110f, -0.692866174817424630f, 0.720534565573905270f, + -0.693419021813811760f, + 0.720002507961381650f, -0.693971460889654000f, 0.719470026789932990f, + -0.694523491719965520f, + 0.718937122372804490f, -0.695075113980000880f, 0.718403795023489830f, + -0.695626327345254870f, + 0.717870045055731710f, -0.696177131491462990f, 0.717335872783521730f, + -0.696727526094601200f, + 0.716801278521099540f, -0.697277510830886520f, 0.716266262582953120f, + -0.697827085376777290f, + 0.715730825283818590f, -0.698376249408972920f, 0.715194966938680120f, + -0.698925002604414150f, + 0.714658687862769090f, -0.699473344640283770f, 0.714121988371564820f, + -0.700021275194006250f, + 0.713584868780793640f, -0.700568793943248340f, 0.713047329406429340f, + -0.701115900565918660f, + 0.712509370564692320f, -0.701662594740168450f, 0.711970992572050100f, + -0.702208876144391870f, + 0.711432195745216430f, -0.702754744457225300f, 0.710892980401151680f, + -0.703300199357548730f, + 0.710353346857062420f, -0.703845240524484940f, 0.709813295430400840f, + -0.704389867637400410f, + 0.709272826438865690f, -0.704934080375904880f, 0.708731940200400650f, + -0.705477878419852100f, + 0.708190637033195400f, -0.706021261449339740f, 0.707648917255684350f, + -0.706564229144709510f, + 0.707106781186547570f, -0.707106781186547460f, 0.706564229144709620f, + -0.707648917255684350f, + 0.706021261449339740f, -0.708190637033195290f, 0.705477878419852210f, + -0.708731940200400650f, + 0.704934080375904990f, -0.709272826438865580f, 0.704389867637400410f, + -0.709813295430400840f, + 0.703845240524484940f, -0.710353346857062310f, 0.703300199357548730f, + -0.710892980401151680f, + 0.702754744457225300f, -0.711432195745216430f, 0.702208876144391870f, + -0.711970992572049990f, + 0.701662594740168570f, -0.712509370564692320f, 0.701115900565918660f, + -0.713047329406429230f, + 0.700568793943248450f, -0.713584868780793520f, 0.700021275194006360f, + -0.714121988371564710f, + 0.699473344640283770f, -0.714658687862768980f, 0.698925002604414150f, + -0.715194966938680010f, + 0.698376249408972920f, -0.715730825283818590f, 0.697827085376777290f, + -0.716266262582953120f, + 0.697277510830886630f, -0.716801278521099540f, 0.696727526094601200f, + -0.717335872783521730f, + 0.696177131491462990f, -0.717870045055731710f, 0.695626327345254870f, + -0.718403795023489720f, + 0.695075113980000880f, -0.718937122372804380f, 0.694523491719965520f, + -0.719470026789932990f, + 0.693971460889654000f, -0.720002507961381650f, 0.693419021813811880f, + -0.720534565573905270f, + 0.692866174817424740f, -0.721066199314508110f, 0.692312920225718220f, + -0.721597408870443660f, + 0.691759258364157750f, -0.722128193929215350f, 0.691205189558448450f, + -0.722658554178575610f, + 0.690650714134534720f, -0.723188489306527350f, 0.690095832418599950f, + -0.723717999001323390f, + 0.689540544737066940f, -0.724247082951466890f, 0.688984851416597150f, + -0.724775740845711280f, + 0.688428752784090550f, -0.725303972373060660f, 0.687872249166685550f, + -0.725831777222770370f, + 0.687315340891759160f, -0.726359155084346010f, 0.686758028286925890f, + -0.726886105647544970f, + 0.686200311680038700f, -0.727412628602375770f, 0.685642191399187470f, + -0.727938723639098620f, + 0.685083667772700360f, -0.728464390448225200f, 0.684524741129142300f, + -0.728989628720519310f, + 0.683965411797315510f, -0.729514438146996900f, 0.683405680106258790f, + -0.730038818418926150f, + 0.682845546385248080f, -0.730562769227827590f, 0.682285010963795570f, + -0.731086290265474230f, + 0.681724074171649820f, -0.731609381223892520f, 0.681162736338795430f, + -0.732132041795361290f, + 0.680600997795453130f, -0.732654271672412820f, 0.680038858872079040f, + -0.733176070547832740f, + 0.679476319899365080f, -0.733697438114660260f, 0.678913381208238410f, + -0.734218374066188170f, + 0.678350043129861580f, -0.734738878095963390f, 0.677786305995631500f, + -0.735258949897786730f, + 0.677222170137180450f, -0.735778589165713480f, 0.676657635886374950f, + -0.736297795594053060f, + 0.676092703575316030f, -0.736816568877369790f, 0.675527373536338630f, + -0.737334908710482790f, + 0.674961646102012040f, -0.737852814788465980f, 0.674395521605139050f, + -0.738370286806648510f, + 0.673829000378756150f, -0.738887324460615110f, 0.673262082756132970f, + -0.739403927446205760f, + 0.672694769070772970f, -0.739920095459516090f, 0.672127059656411840f, + -0.740435828196898020f, + 0.671558954847018330f, -0.740951125354959110f, 0.670990454976794220f, + -0.741465986630563290f, + 0.670421560380173090f, -0.741980411720830960f, 0.669852271391821130f, + -0.742494400323139180f, + 0.669282588346636010f, -0.743007952135121720f, 0.668712511579748090f, + -0.743521066854669120f, + 0.668142041426518560f, -0.744033744179929180f, 0.667571178222540310f, + -0.744545983809307250f, + 0.666999922303637470f, -0.745057785441465950f, 0.666428274005865350f, + -0.745569148775325430f, + 0.665856233665509720f, -0.746080073510063780f, 0.665283801619087180f, + -0.746590559345117310f, + 0.664710978203344900f, -0.747100605980180130f, 0.664137763755260010f, + -0.747610213115205150f, + 0.663564158612039880f, -0.748119380450403490f, 0.662990163111121470f, + -0.748628107686245330f, + 0.662415777590171780f, -0.749136394523459260f, 0.661841002387086870f, + -0.749644240663033480f, + 0.661265837839992270f, -0.750151645806214960f, 0.660690284287242300f, + -0.750658609654510590f, + 0.660114342067420480f, -0.751165131909686370f, 0.659538011519338770f, + -0.751671212273768430f, + 0.658961292982037320f, -0.752176850449042700f, 0.658384186794785050f, + -0.752682046138055230f, + 0.657806693297078640f, -0.753186799043612410f, 0.657228812828642650f, + -0.753691108868781210f, + 0.656650545729429050f, -0.754194975316889170f, 0.656071892339617710f, + -0.754698398091524390f, + 0.655492852999615460f, -0.755201376896536550f, 0.654913428050056150f, + -0.755703911436035880f, + 0.654333617831800550f, -0.756206001414394540f, 0.653753422685936170f, + -0.756707646536245670f, + 0.653172842953776760f, -0.757208846506484460f, 0.652591878976862550f, + -0.757709601030268080f, + 0.652010531096959500f, -0.758209909813015280f, 0.651428799656059820f, + -0.758709772560407390f, + 0.650846684996380990f, -0.759209188978387960f, 0.650264187460365960f, + -0.759708158773163440f, + 0.649681307390683190f, -0.760206681651202420f, 0.649098045130226060f, + -0.760704757319236920f, + 0.648514401022112550f, -0.761202385484261780f, 0.647930375409685460f, + -0.761699565853535270f, + 0.647345968636512060f, -0.762196298134578900f, 0.646761181046383920f, + -0.762692582035177870f, + 0.646176012983316390f, -0.763188417263381270f, 0.645590464791548800f, + -0.763683803527501870f, + 0.645004536815544040f, -0.764178740536116670f, 0.644418229399988380f, + -0.764673227998067140f, + 0.643831542889791500f, -0.765167265622458960f, 0.643244477630085850f, + -0.765660853118662390f, + 0.642657033966226860f, -0.766153990196312810f, 0.642069212243792540f, + -0.766646676565310380f, + 0.641481012808583160f, -0.767138911935820400f, 0.640892436006621380f, + -0.767630696018273270f, + 0.640303482184151670f, -0.768122028523365310f, 0.639714151687640450f, + -0.768612909162058270f, + 0.639124444863775730f, -0.769103337645579590f, 0.638534362059466790f, + -0.769593313685422940f, + 0.637943903621844170f, -0.770082836993347900f, 0.637353069898259130f, + -0.770571907281380700f, + 0.636761861236284200f, -0.771060524261813710f, 0.636170277983712170f, + -0.771548687647206300f, + 0.635578320488556230f, -0.772036397150384410f, 0.634985989099049460f, + -0.772523652484441330f, + 0.634393284163645490f, -0.773010453362736990f, 0.633800206031017280f, + -0.773496799498899050f, + 0.633206755050057190f, -0.773982690606822790f, 0.632612931569877520f, + -0.774468126400670860f, + 0.632018735939809060f, -0.774953106594873820f, 0.631424168509401860f, + -0.775437630904130430f, + 0.630829229628424470f, -0.775921699043407580f, 0.630233919646864480f, + -0.776405310727940390f, + 0.629638238914927100f, -0.776888465673232440f, 0.629042187783036000f, + -0.777371163595056200f, + 0.628445766601832710f, -0.777853404209453040f, 0.627848975722176570f, + -0.778335187232733090f, + 0.627251815495144190f, -0.778816512381475870f, 0.626654286272029460f, + -0.779297379372530300f, + 0.626056388404343520f, -0.779777787923014440f, 0.625458122243814360f, + -0.780257737750316590f, + 0.624859488142386450f, -0.780737228572094380f, 0.624260486452220650f, + -0.781216260106276090f, + 0.623661117525694640f, -0.781694832071059390f, 0.623061381715401370f, + -0.782172944184912900f, + 0.622461279374150080f, -0.782650596166575730f, 0.621860810854965360f, + -0.783127787735057310f, + 0.621259976511087660f, -0.783604518609638200f, 0.620658776695972140f, + -0.784080788509869950f, + 0.620057211763289210f, -0.784556597155575240f, 0.619455282066924020f, + -0.785031944266848080f, + 0.618852987960976320f, -0.785506829564053930f, 0.618250329799760250f, + -0.785981252767830150f, + 0.617647307937803980f, -0.786455213599085770f, 0.617043922729849760f, + -0.786928711779001700f, + 0.616440174530853650f, -0.787401747029031320f, 0.615836063695985090f, + -0.787874319070900110f, + 0.615231590580626820f, -0.788346427626606230f, 0.614626755540375050f, + -0.788818072418420170f, + 0.614021558931038490f, -0.789289253168885650f, 0.613416001108638590f, + -0.789759969600819070f, + 0.612810082429409710f, -0.790230221437310030f, 0.612203803249798060f, + -0.790700008401721610f, + 0.611597163926462020f, -0.791169330217690090f, 0.610990164816271770f, + -0.791638186609125770f, + 0.610382806276309480f, -0.792106577300212390f, 0.609775088663868430f, + -0.792574502015407580f, + 0.609167012336453210f, -0.793041960479443640f, 0.608558577651779450f, + -0.793508952417326660f, + 0.607949784967773740f, -0.793975477554337170f, 0.607340634642572930f, + -0.794441535616030590f, + 0.606731127034524480f, -0.794907126328237010f, 0.606121262502186230f, + -0.795372249417061190f, + 0.605511041404325550f, -0.795836904608883460f, 0.604900464099919930f, + -0.796301091630359110f, + 0.604289530948156070f, -0.796764810208418720f, 0.603678242308430370f, + -0.797228060070268700f, + 0.603066598540348280f, -0.797690840943391040f, 0.602454600003723860f, + -0.798153152555543750f, + 0.601842247058580030f, -0.798614994634760820f, 0.601229540065148620f, + -0.799076366909352350f, + 0.600616479383868970f, -0.799537269107905010f, 0.600003065375389060f, + -0.799997700959281910f, + 0.599389298400564540f, -0.800457662192622710f, 0.598775178820458720f, + -0.800917152537344300f, + 0.598160706996342380f, -0.801376171723140130f, 0.597545883289693270f, + -0.801834719479981310f, + 0.596930708062196500f, -0.802292795538115720f, 0.596315181675743820f, + -0.802750399628069160f, + 0.595699304492433470f, -0.803207531480644830f, 0.595083076874569960f, + -0.803664190826924090f, + 0.594466499184664540f, -0.804120377398265700f, 0.593849571785433630f, + -0.804576090926307000f, + 0.593232295039799800f, -0.805031331142963660f, 0.592614669310891130f, + -0.805486097780429120f, + 0.591996694962040990f, -0.805940390571176280f, 0.591378372356787580f, + -0.806394209247956240f, + 0.590759701858874280f, -0.806847553543799220f, 0.590140683832248940f, + -0.807300423192014450f, + 0.589521318641063940f, -0.807752817926190360f, 0.588901606649675840f, + -0.808204737480194720f, + 0.588281548222645330f, -0.808656181588174980f, 0.587661143724736770f, + -0.809107149984558130f, + 0.587040393520918080f, -0.809557642404051260f, 0.586419297976360500f, + -0.810007658581641140f, + 0.585797857456438860f, -0.810457198252594770f, 0.585176072326730410f, + -0.810906261152459670f, + 0.584553942953015330f, -0.811354847017063730f, 0.583931469701276300f, + -0.811802955582515360f, + 0.583308652937698290f, -0.812250586585203880f, 0.582685493028668460f, + -0.812697739761799490f, + 0.582061990340775550f, -0.813144414849253590f, 0.581438145240810280f, + -0.813590611584798510f, + 0.580813958095764530f, -0.814036329705948300f, 0.580189429272831680f, + -0.814481568950498610f, + 0.579564559139405740f, -0.814926329056526620f, 0.578939348063081890f, + -0.815370609762391290f, + 0.578313796411655590f, -0.815814410806733780f, 0.577687904553122800f, + -0.816257731928477390f, + 0.577061672855679550f, -0.816700572866827850f, 0.576435101687721830f, + -0.817142933361272970f, + 0.575808191417845340f, -0.817584813151583710f, 0.575180942414845190f, + -0.818026211977813440f, + 0.574553355047715760f, -0.818467129580298660f, 0.573925429685650750f, + -0.818907565699658950f, + 0.573297166698042320f, -0.819347520076796900f, 0.572668566454481160f, + -0.819786992452898990f, + 0.572039629324757050f, -0.820225982569434690f, 0.571410355678857340f, + -0.820664490168157460f, + 0.570780745886967370f, -0.821102514991104650f, 0.570150800319470300f, + -0.821540056780597610f, + 0.569520519346947250f, -0.821977115279241550f, 0.568889903340175970f, + -0.822413690229926390f, + 0.568258952670131490f, -0.822849781375826320f, 0.567627667707986230f, + -0.823285388460400110f, + 0.566996048825108680f, -0.823720511227391320f, 0.566364096393063950f, + -0.824155149420828570f, + 0.565731810783613230f, -0.824589302785025290f, 0.565099192368714090f, + -0.825022971064580220f, + 0.564466241520519500f, -0.825456154004377440f, 0.563832958611378170f, + -0.825888851349586780f, + 0.563199344013834090f, -0.826321062845663420f, 0.562565398100626560f, + -0.826752788238348520f, + 0.561931121244689470f, -0.827184027273669020f, 0.561296513819151470f, + -0.827614779697938400f, + 0.560661576197336030f, -0.828045045257755800f, 0.560026308752760380f, + -0.828474823700007130f, + 0.559390711859136140f, -0.828904114771864870f, 0.558754785890368310f, + -0.829332918220788250f, + 0.558118531220556100f, -0.829761233794523050f, 0.557481948223991660f, + -0.830189061241102370f, + 0.556845037275160100f, -0.830616400308846200f, 0.556207798748739930f, + -0.831043250746362320f, + 0.555570233019602290f, -0.831469612302545240f, 0.554932340462810370f, + -0.831895484726577590f, + 0.554294121453620110f, -0.832320867767929680f, 0.553655576367479310f, + -0.832745761176359460f, + 0.553016705580027580f, -0.833170164701913190f, 0.552377509467096070f, + -0.833594078094925140f, + 0.551737988404707450f, -0.834017501106018130f, 0.551098142769075430f, + -0.834440433486103190f, + 0.550457972936604810f, -0.834862874986380010f, 0.549817479283891020f, + -0.835284825358337370f, + 0.549176662187719770f, -0.835706284353752600f, 0.548535522025067390f, + -0.836127251724692160f, + 0.547894059173100190f, -0.836547727223511890f, 0.547252274009174090f, + -0.836967710602857020f, + 0.546610166910834860f, -0.837387201615661940f, 0.545967738255817680f, + -0.837806200015150940f, + 0.545324988422046460f, -0.838224705554837970f, 0.544681917787634530f, + -0.838642717988527300f, + 0.544038526730883930f, -0.839060237070312630f, 0.543394815630284800f, + -0.839477262554578550f, + 0.542750784864516000f, -0.839893794195999410f, 0.542106434812444030f, + -0.840309831749540770f, + 0.541461765853123560f, -0.840725374970458070f, 0.540816778365796670f, + -0.841140423614298080f, + 0.540171472729892970f, -0.841554977436898330f, 0.539525849325029010f, + -0.841969036194387680f, + 0.538879908531008420f, -0.842382599643185960f, 0.538233650727821700f, + -0.842795667540004120f, + 0.537587076295645510f, -0.843208239641845440f, 0.536940185614843020f, + -0.843620315706004040f, + 0.536292979065963180f, -0.844031895490066410f, 0.535645457029741090f, + -0.844442978751910660f, + 0.534997619887097260f, -0.844853565249707010f, 0.534349468019137520f, + -0.845263654741918220f, + 0.533701001807152960f, -0.845673246987299070f, 0.533052221632619670f, + -0.846082341744896940f, + 0.532403127877198010f, -0.846490938774052020f, 0.531753720922733320f, + -0.846899037834397350f, + 0.531104001151255000f, -0.847306638685858320f, 0.530453968944976320f, + -0.847713741088654270f, + 0.529803624686294830f, -0.848120344803297120f, 0.529152968757790720f, + -0.848526449590592650f, + 0.528502001542228480f, -0.848932055211639610f, 0.527850723422555460f, + -0.849337161427830670f, + 0.527199134781901390f, -0.849741768000852440f, 0.526547236003579330f, + -0.850145874692685210f, + 0.525895027471084740f, -0.850549481265603370f, 0.525242509568094710f, + -0.850952587482175730f, + 0.524589682678468840f, -0.851355193105265200f, 0.523936547186248600f, + -0.851757297898029120f, + 0.523283103475656430f, -0.852158901623919830f, 0.522629351931096720f, + -0.852560004046683970f, + 0.521975292937154390f, -0.852960604930363630f, 0.521320926878595550f, + -0.853360704039295430f, + 0.520666254140367270f, -0.853760301138111300f, 0.520011275107596040f, + -0.854159395991738730f, + 0.519355990165589530f, -0.854557988365400530f, 0.518700399699835170f, + -0.854956078024614820f, + 0.518044504095999340f, -0.855353664735196030f, 0.517388303739929060f, + -0.855750748263253920f, + 0.516731799017649980f, -0.856147328375194470f, 0.516074990315366630f, + -0.856543404837719960f, + 0.515417878019463150f, -0.856938977417828650f, 0.514760462516501200f, + -0.857334045882815590f, + 0.514102744193221660f, -0.857728610000272120f, 0.513444723436543570f, + -0.858122669538086020f, + 0.512786400633563070f, -0.858516224264442740f, 0.512127776171554690f, + -0.858909273947823900f, + 0.511468850437970520f, -0.859301818357008360f, 0.510809623820439040f, + -0.859693857261072610f, + 0.510150096706766700f, -0.860085390429390140f, 0.509490269484936360f, + -0.860476417631632070f, + 0.508830142543106990f, -0.860866938637767310f, 0.508169716269614710f, + -0.861256953218062060f, + 0.507508991052970870f, -0.861646461143081300f, 0.506847967281863320f, + -0.862035462183687210f, + 0.506186645345155450f, -0.862423956111040500f, 0.505525025631885510f, + -0.862811942696600330f, + 0.504863108531267480f, -0.863199421712124160f, 0.504200894432690560f, + -0.863586392929667990f, + 0.503538383725717580f, -0.863972856121586700f, 0.502875576800086880f, + -0.864358811060534030f, + 0.502212474045710900f, -0.864744257519462380f, 0.501549075852675390f, + -0.865129195271623690f, + 0.500885382611240940f, -0.865513624090568980f, 0.500221394711840680f, + -0.865897543750148820f, + 0.499557112545081890f, -0.866280954024512990f, 0.498892536501744750f, + -0.866663854688111020f, + 0.498227666972781870f, -0.867046245515692650f, 0.497562504349319090f, + -0.867428126282306920f, + 0.496897049022654640f, -0.867809496763303210f, 0.496231301384258310f, + -0.868190356734331310f, + 0.495565261825772490f, -0.868570705971340900f, 0.494898930739011310f, + -0.868950544250582380f, + 0.494232308515959730f, -0.869329871348606730f, 0.493565395548774880f, + -0.869708687042265560f, + 0.492898192229784090f, -0.870086991108711350f, 0.492230698951486080f, + -0.870464783325397670f, + 0.491562916106550060f, -0.870842063470078860f, 0.490894844087815140f, + -0.871218831320810900f, + 0.490226483288291100f, -0.871595086655951090f, 0.489557834101157550f, + -0.871970829254157700f, + 0.488888896919763230f, -0.872346058894391540f, 0.488219672137626740f, + -0.872720775355914300f, + 0.487550160148436050f, -0.873094978418290090f, 0.486880361346047400f, + -0.873468667861384880f, + 0.486210276124486530f, -0.873841843465366750f, 0.485539904877947020f, + -0.874214505010706300f, + 0.484869248000791120f, -0.874586652278176110f, 0.484198305887549140f, + -0.874958285048851540f, + 0.483527078932918740f, -0.875329403104110780f, 0.482855567531765670f, + -0.875700006225634600f, + 0.482183772079122830f, -0.876070094195406600f, 0.481511692970189920f, + -0.876439666795713610f, + 0.480839330600333900f, -0.876808723809145760f, 0.480166685365088440f, + -0.877177265018595940f, + 0.479493757660153010f, -0.877545290207261240f, 0.478820547881394050f, + -0.877912799158641730f, + 0.478147056424843120f, -0.878279791656541460f, 0.477473283686698060f, + -0.878646267485068130f, + 0.476799230063322250f, -0.879012226428633410f, 0.476124895951243630f, + -0.879377668271953180f, + 0.475450281747155870f, -0.879742592800047410f, 0.474775387847917230f, + -0.880106999798240360f, + 0.474100214650550020f, -0.880470889052160750f, 0.473424762552241530f, + -0.880834260347742040f, + 0.472749031950342900f, -0.881197113471221980f, 0.472073023242368660f, + -0.881559448209143780f, + 0.471396736825997810f, -0.881921264348354940f, 0.470720173099071710f, + -0.882282561676008600f, + 0.470043332459595620f, -0.882643339979562790f, 0.469366215305737630f, + -0.883003599046780720f, + 0.468688822035827960f, -0.883363338665731580f, 0.468011153048359830f, + -0.883722558624789660f, + 0.467333208741988530f, -0.884081258712634990f, 0.466654989515530970f, + -0.884439438718253700f, + 0.465976495767966130f, -0.884797098430937790f, 0.465297727898434650f, + -0.885154237640285110f, + 0.464618686306237820f, -0.885510856136199950f, 0.463939371390838460f, + -0.885866953708892790f, + 0.463259783551860260f, -0.886222530148880640f, 0.462579923189086810f, + -0.886577585246987040f, + 0.461899790702462840f, -0.886932118794342080f, 0.461219386492092430f, + -0.887286130582383150f, + 0.460538710958240010f, -0.887639620402853930f, 0.459857764501329650f, + -0.887992588047805560f, + 0.459176547521944150f, -0.888345033309596240f, 0.458495060420826220f, + -0.888696955980891710f, + 0.457813303598877290f, -0.889048355854664570f, 0.457131277457156980f, + -0.889399232724195520f, + 0.456448982396883860f, -0.889749586383072890f, 0.455766418819434750f, + -0.890099416625192210f, + 0.455083587126343840f, -0.890448723244757880f, 0.454400487719303750f, + -0.890797506036281490f, + 0.453717121000163930f, -0.891145764794583180f, 0.453033487370931580f, + -0.891493499314791380f, + 0.452349587233771000f, -0.891840709392342720f, 0.451665420991002540f, + -0.892187394822982480f, + 0.450980989045103810f, -0.892533555402764690f, 0.450296291798708730f, + -0.892879190928051680f, + 0.449611329654606600f, -0.893224301195515320f, 0.448926103015743260f, + -0.893568886002136020f, + 0.448240612285220000f, -0.893912945145203250f, 0.447554857866293010f, + -0.894256478422316040f, + 0.446868840162374330f, -0.894599485631382580f, 0.446182559577030120f, + -0.894941966570620750f, + 0.445496016513981740f, -0.895283921038557580f, 0.444809211377105000f, + -0.895625348834030000f, + 0.444122144570429260f, -0.895966249756185110f, 0.443434816498138430f, + -0.896306623604479660f, + 0.442747227564570130f, -0.896646470178680150f, 0.442059378174214760f, + -0.896985789278863970f, + 0.441371268731716620f, -0.897324580705418320f, 0.440682899641873020f, + -0.897662844259040750f, + 0.439994271309633260f, -0.898000579740739880f, 0.439305384140100060f, + -0.898337786951834190f, + 0.438616238538527710f, -0.898674465693953820f, 0.437926834910322860f, + -0.899010615769039070f, + 0.437237173661044200f, -0.899346236979341460f, 0.436547255196401250f, + -0.899681329127423930f, + 0.435857079922255470f, -0.900015892016160280f, 0.435166648244619370f, + -0.900349925448735600f, + 0.434475960569655710f, -0.900683429228646860f, 0.433785017303678520f, + -0.901016403159702330f, + 0.433093818853152010f, -0.901348847046022030f, 0.432402365624690140f, + -0.901680760692037730f, + 0.431710658025057370f, -0.902012143902493070f, 0.431018696461167080f, + -0.902342996482444200f, + 0.430326481340082610f, -0.902673318237258830f, 0.429634013069016500f, + -0.903003108972617040f, + 0.428941292055329550f, -0.903332368494511820f, 0.428248318706531910f, + -0.903661096609247980f, + 0.427555093430282200f, -0.903989293123443340f, 0.426861616634386490f, + -0.904316957844028320f, + 0.426167888726799620f, -0.904644090578246240f, 0.425473910115623910f, + -0.904970691133653250f, + 0.424779681209108810f, -0.905296759318118820f, 0.424085202415651670f, + -0.905622294939825160f, + 0.423390474143796100f, -0.905947297807268460f, 0.422695496802232950f, + -0.906271767729257660f, + 0.422000270799799790f, -0.906595704514915330f, 0.421304796545479700f, + -0.906919107973678030f, + 0.420609074448402510f, -0.907241977915295930f, 0.419913104917843730f, + -0.907564314149832520f, + 0.419216888363223960f, -0.907886116487666150f, 0.418520425194109700f, + -0.908207384739488700f, + 0.417823715820212380f, -0.908528118716306120f, 0.417126760651387870f, + -0.908848318229439120f, + 0.416429560097637320f, -0.909167983090522270f, 0.415732114569105420f, + -0.909487113111505430f, + 0.415034424476081630f, -0.909805708104652220f, 0.414336490228999210f, + -0.910123767882541570f, + 0.413638312238434560f, -0.910441292258067140f, 0.412939890915108020f, + -0.910758281044437570f, + 0.412241226669883000f, -0.911074734055176250f, 0.411542319913765280f, + -0.911390651104122320f, + 0.410843171057903910f, -0.911706032005429880f, 0.410143780513590350f, + -0.912020876573568230f, + 0.409444148692257590f, -0.912335184623322750f, 0.408744276005481520f, + -0.912648955969793900f, + 0.408044162864978740f, -0.912962190428398100f, 0.407343809682607970f, + -0.913274887814867760f, + 0.406643216870369140f, -0.913587047945250810f, 0.405942384840402570f, + -0.913898670635911680f, + 0.405241314004989860f, -0.914209755703530690f, 0.404540004776553110f, + -0.914520302965104450f, + 0.403838457567654130f, -0.914830312237946090f, 0.403136672790995240f, + -0.915139783339685260f, + 0.402434650859418540f, -0.915448716088267830f, 0.401732392185905010f, + -0.915757110301956720f, + 0.401029897183575790f, -0.916064965799331610f, 0.400327166265690150f, + -0.916372282399289140f, + 0.399624199845646790f, -0.916679059921042700f, 0.398920998336983020f, + -0.916985298184122890f, + 0.398217562153373620f, -0.917290997008377910f, 0.397513891708632330f, + -0.917596156213972950f, + 0.396809987416710420f, -0.917900775621390390f, 0.396105849691696320f, + -0.918204855051430900f, + 0.395401478947816300f, -0.918508394325212250f, 0.394696875599433670f, + -0.918811393264169940f, + 0.393992040061048100f, -0.919113851690057770f, 0.393286972747296570f, + -0.919415769424946960f, + 0.392581674072951530f, -0.919717146291227360f, 0.391876144452922350f, + -0.920017982111606570f, + 0.391170384302253980f, -0.920318276709110480f, 0.390464394036126650f, + -0.920618029907083860f, + 0.389758174069856410f, -0.920917241529189520f, 0.389051724818894500f, + -0.921215911399408730f, + 0.388345046698826300f, -0.921514039342041900f, 0.387638140125372680f, + -0.921811625181708120f, + 0.386931005514388690f, -0.922108668743345070f, 0.386223643281862980f, + -0.922405169852209880f, + 0.385516053843919020f, -0.922701128333878520f, 0.384808237616812930f, + -0.922996544014246250f, + 0.384100195016935040f, -0.923291416719527640f, 0.383391926460808770f, + -0.923585746276256560f, + 0.382683432365089840f, -0.923879532511286740f, 0.381974713146567220f, + -0.924172775251791200f, + 0.381265769222162490f, -0.924465474325262600f, 0.380556601008928570f, + -0.924757629559513910f, + 0.379847208924051110f, -0.925049240782677580f, 0.379137593384847430f, + -0.925340307823206200f, + 0.378427754808765620f, -0.925630830509872720f, 0.377717693613385810f, + -0.925920808671769960f, + 0.377007410216418310f, -0.926210242138311270f, 0.376296905035704790f, + -0.926499130739230510f, + 0.375586178489217330f, -0.926787474304581750f, 0.374875230995057600f, + -0.927075272664740100f, + 0.374164062971457990f, -0.927362525650401110f, 0.373452674836780410f, + -0.927649233092581180f, + 0.372741067009515810f, -0.927935394822617890f, 0.372029239908284960f, + -0.928221010672169440f, + 0.371317193951837600f, -0.928506080473215480f, 0.370604929559051670f, + -0.928790604058057020f, + 0.369892447148934270f, -0.929074581259315750f, 0.369179747140620070f, + -0.929358011909935500f, + 0.368466829953372320f, -0.929640895843181330f, 0.367753696006582090f, + -0.929923232892639560f, + 0.367040345719767240f, -0.930205022892219070f, 0.366326779512573590f, + -0.930486265676149780f, + 0.365612997804773960f, -0.930766961078983710f, 0.364899001016267380f, + -0.931047108935595170f, + 0.364184789567079840f, -0.931326709081180430f, 0.363470363877363870f, + -0.931605761351257830f, + 0.362755724367397230f, -0.931884265581668150f, 0.362040871457584350f, + -0.932162221608574320f, + 0.361325805568454340f, -0.932439629268462360f, 0.360610527120662270f, + -0.932716488398140250f, + 0.359895036534988280f, -0.932992798834738850f, 0.359179334232336560f, + -0.933268560415712050f, + 0.358463420633736540f, -0.933543772978836170f, 0.357747296160342010f, + -0.933818436362210960f, + 0.357030961233430030f, -0.934092550404258870f, 0.356314416274402360f, + -0.934366114943725900f, + 0.355597661704783960f, -0.934639129819680780f, 0.354880697946222790f, + -0.934911594871516090f, + 0.354163525420490510f, -0.935183509938947500f, 0.353446144549480870f, + -0.935454874862014620f, + 0.352728555755210730f, -0.935725689481080370f, 0.352010759459819240f, + -0.935995953636831300f, + 0.351292756085567150f, -0.936265667170278260f, 0.350574546054837570f, + -0.936534829922755500f, + 0.349856129790135030f, -0.936803441735921560f, 0.349137507714085030f, + -0.937071502451759190f, + 0.348418680249434510f, -0.937339011912574960f, 0.347699647819051490f, + -0.937605969960999990f, + 0.346980410845923680f, -0.937872376439989890f, 0.346260969753160170f, + -0.938138231192824360f, + 0.345541324963989150f, -0.938403534063108060f, 0.344821476901759290f, + -0.938668284894770170f, + 0.344101425989938980f, -0.938932483532064490f, 0.343381172652115100f, + -0.939196129819569900f, + 0.342660717311994380f, -0.939459223602189920f, 0.341940060393402300f, + -0.939721764725153340f, + 0.341219202320282410f, -0.939983753034013940f, 0.340498143516697100f, + -0.940245188374650880f, + 0.339776884406826960f, -0.940506070593268300f, 0.339055425414969640f, + -0.940766399536396070f, + 0.338333766965541290f, -0.941026175050889260f, 0.337611909483074680f, + -0.941285396983928660f, + 0.336889853392220050f, -0.941544065183020810f, 0.336167599117744690f, + -0.941802179495997650f, + 0.335445147084531660f, -0.942059739771017310f, 0.334722497717581220f, + -0.942316745856563780f, + 0.333999651442009490f, -0.942573197601446870f, 0.333276608683047980f, + -0.942829094854802710f, + 0.332553369866044220f, -0.943084437466093490f, 0.331829935416461220f, + -0.943339225285107720f, + 0.331106305759876430f, -0.943593458161960390f, 0.330382481321982950f, + -0.943847135947092690f, + 0.329658462528587550f, -0.944100258491272660f, 0.328934249805612200f, + -0.944352825645594750f, + 0.328209843579092660f, -0.944604837261480260f, 0.327485244275178060f, + -0.944856293190677210f, + 0.326760452320131790f, -0.945107193285260610f, 0.326035468140330350f, + -0.945357537397632290f, + 0.325310292162262980f, -0.945607325380521280f, 0.324584924812532150f, + -0.945856557086983910f, + 0.323859366517852960f, -0.946105232370403340f, 0.323133617705052330f, + -0.946353351084490590f, + 0.322407678801070020f, -0.946600913083283530f, 0.321681550232956640f, + -0.946847918221148000f, + 0.320955232427875210f, -0.947094366352777220f, 0.320228725813100020f, + -0.947340257333191940f, + 0.319502030816015750f, -0.947585591017741090f, 0.318775147864118480f, + -0.947830367262101010f, + 0.318048077385015060f, -0.948074585922276230f, 0.317320819806421790f, + -0.948318246854599090f, + 0.316593375556165850f, -0.948561349915730270f, 0.315865745062184070f, + -0.948803894962658380f, + 0.315137928752522440f, -0.949045881852700560f, 0.314409927055336820f, + -0.949287310443502010f, + 0.313681740398891570f, -0.949528180593036670f, 0.312953369211560200f, + -0.949768492159606680f, + 0.312224813921825050f, -0.950008245001843000f, 0.311496074958275970f, + -0.950247438978705230f, + 0.310767152749611470f, -0.950486073949481700f, 0.310038047724638000f, + -0.950724149773789610f, + 0.309308760312268780f, -0.950961666311575080f, 0.308579290941525030f, + -0.951198623423113230f, + 0.307849640041534980f, -0.951435020969008340f, 0.307119808041533100f, + -0.951670858810193860f, + 0.306389795370861080f, -0.951906136807932230f, 0.305659602458966230f, + -0.952140854823815830f, + 0.304929229735402430f, -0.952375012719765880f, 0.304198677629829270f, + -0.952608610358033240f, + 0.303467946572011370f, -0.952841647601198720f, 0.302737036991819140f, + -0.953074124312172200f, + 0.302005949319228200f, -0.953306040354193750f, 0.301274683984318000f, + -0.953537395590833280f, + 0.300543241417273400f, -0.953768189885990330f, 0.299811622048383460f, + -0.953998423103894490f, + 0.299079826308040480f, -0.954228095109105670f, 0.298347854626741570f, + -0.954457205766513490f, + 0.297615707435086310f, -0.954685754941338340f, 0.296883385163778270f, + -0.954913742499130520f, + 0.296150888243623960f, -0.955141168305770670f, 0.295418217105532070f, + -0.955368032227470240f, + 0.294685372180514330f, -0.955594334130771110f, 0.293952353899684770f, + -0.955820073882545420f, + 0.293219162694258680f, -0.956045251349996410f, 0.292485798995553830f, + -0.956269866400658140f, + 0.291752263234989370f, -0.956493918902394990f, 0.291018555844085090f, + -0.956717408723403050f, + 0.290284677254462330f, -0.956940335732208940f, 0.289550627897843140f, + -0.957162699797670100f, + 0.288816408206049480f, -0.957384500788975860f, 0.288082018611004300f, + -0.957605738575646240f, + 0.287347459544729570f, -0.957826413027532910f, 0.286612731439347790f, + -0.958046524014818600f, + 0.285877834727080730f, -0.958266071408017670f, 0.285142769840248720f, + -0.958485055077976100f, + 0.284407537211271820f, -0.958703474895871600f, 0.283672137272668550f, + -0.958921330733213060f, + 0.282936570457055390f, -0.959138622461841890f, 0.282200837197147500f, + -0.959355349953930790f, + 0.281464937925758050f, -0.959571513081984520f, 0.280728873075797190f, + -0.959787111718839900f, + 0.279992643080273380f, -0.960002145737665850f, 0.279256248372291240f, + -0.960216615011963430f, + 0.278519689385053060f, -0.960430519415565790f, 0.277782966551857800f, + -0.960643858822638470f, + 0.277046080306099950f, -0.960856633107679660f, 0.276309031081271030f, + -0.961068842145519350f, + 0.275571819310958250f, -0.961280485811320640f, 0.274834445428843940f, + -0.961491563980579000f, + 0.274096909868706330f, -0.961702076529122540f, 0.273359213064418790f, + -0.961912023333112100f, + 0.272621355449948980f, -0.962121404269041580f, 0.271883337459359890f, + -0.962330219213737400f, + 0.271145159526808070f, -0.962538468044359160f, 0.270406822086544820f, + -0.962746150638399410f, + 0.269668325572915200f, -0.962953266873683880f, 0.268929670420357310f, + -0.963159816628371360f, + 0.268190857063403180f, -0.963365799780954050f, 0.267451885936677740f, + -0.963571216210257210f, + 0.266712757474898420f, -0.963776065795439840f, 0.265973472112875530f, + -0.963980348415994110f, + 0.265234030285511900f, -0.964184063951745720f, 0.264494432427801630f, + -0.964387212282854290f, + 0.263754678974831510f, -0.964589793289812650f, 0.263014770361779060f, + -0.964791806853447900f, + 0.262274707023913590f, -0.964993252854920320f, 0.261534489396595630f, + -0.965194131175724720f, + 0.260794117915275570f, -0.965394441697689400f, 0.260053593015495130f, + -0.965594184302976830f, + 0.259312915132886350f, -0.965793358874083570f, 0.258572084703170390f, + -0.965991965293840570f, + 0.257831102162158930f, -0.966190003445412620f, 0.257089967945753230f, + -0.966387473212298790f, + 0.256348682489942910f, -0.966584374478333120f, 0.255607246230807550f, + -0.966780707127683270f, + 0.254865659604514630f, -0.966976471044852070f, 0.254123923047320620f, + -0.967171666114676640f, + 0.253382036995570270f, -0.967366292222328510f, 0.252640001885695580f, + -0.967560349253314360f, + 0.251897818154216910f, -0.967753837093475510f, 0.251155486237742030f, + -0.967946755628987800f, + 0.250413006572965280f, -0.968139104746362330f, 0.249670379596668520f, + -0.968330884332445300f, + 0.248927605745720260f, -0.968522094274417270f, 0.248184685457074780f, + -0.968712734459794780f, + 0.247441619167773440f, -0.968902804776428870f, 0.246698407314942500f, + -0.969092305112506100f, + 0.245955050335794590f, -0.969281235356548530f, 0.245211548667627680f, + -0.969469595397412950f, + 0.244467902747824210f, -0.969657385124292450f, 0.243724113013852130f, + -0.969844604426714830f, + 0.242980179903263980f, -0.970031253194543970f, 0.242236103853696070f, + -0.970217331317979160f, + 0.241491885302869300f, -0.970402838687555500f, 0.240747524688588540f, + -0.970587775194143630f, + 0.240003022448741500f, -0.970772140728950350f, 0.239258379021300120f, + -0.970955935183517970f, + 0.238513594844318500f, -0.971139158449725090f, 0.237768670355934210f, + -0.971321810419786160f, + 0.237023605994367340f, -0.971503890986251780f, 0.236278402197919620f, + -0.971685400042008540f, + 0.235533059404975460f, -0.971866337480279400f, 0.234787578054001080f, + -0.972046703194623500f, + 0.234041958583543460f, -0.972226497078936270f, 0.233296201432231560f, + -0.972405719027449770f, + 0.232550307038775330f, -0.972584368934732210f, 0.231804275841964780f, + -0.972762446695688570f, + 0.231058108280671280f, -0.972939952205560070f, 0.230311804793845530f, + -0.973116885359925130f, + 0.229565365820518870f, -0.973293246054698250f, 0.228818791799802360f, + -0.973469034186130950f, + 0.228072083170885790f, -0.973644249650811870f, 0.227325240373038830f, + -0.973818892345666100f, + 0.226578263845610110f, -0.973992962167955830f, 0.225831154028026200f, + -0.974166459015280320f, + 0.225083911359792780f, -0.974339382785575860f, 0.224336536280493690f, + -0.974511733377115720f, + 0.223589029229790020f, -0.974683510688510670f, 0.222841390647421280f, + -0.974854714618708430f, + 0.222093620973203590f, -0.975025345066994120f, 0.221345720647030810f, + -0.975195401932990370f, + 0.220597690108873650f, -0.975364885116656870f, 0.219849529798778750f, + -0.975533794518291360f, + 0.219101240156869770f, -0.975702130038528570f, 0.218352821623346430f, + -0.975869891578341030f, + 0.217604274638483670f, -0.976037079039039020f, 0.216855599642632570f, + -0.976203692322270560f, + 0.216106797076219600f, -0.976369731330021140f, 0.215357867379745550f, + -0.976535195964614470f, + 0.214608810993786920f, -0.976700086128711840f, 0.213859628358993830f, + -0.976864401725312640f, + 0.213110319916091360f, -0.977028142657754390f, 0.212360886105878580f, + -0.977191308829712280f, + 0.211611327369227610f, -0.977353900145199960f, 0.210861644147084830f, + -0.977515916508569280f, + 0.210111836880469720f, -0.977677357824509930f, 0.209361906010474190f, + -0.977838223998050430f, + 0.208611851978263460f, -0.977998514934557140f, 0.207861675225075150f, + -0.978158230539735050f, + 0.207111376192218560f, -0.978317370719627650f, 0.206360955321075680f, + -0.978475935380616830f, + 0.205610413053099320f, -0.978633924429423100f, 0.204859749829814420f, + -0.978791337773105670f, + 0.204108966092817010f, -0.978948175319062200f, 0.203358062283773370f, + -0.979104436975029250f, + 0.202607038844421110f, -0.979260122649082020f, 0.201855896216568160f, + -0.979415232249634780f, + 0.201104634842091960f, -0.979569765685440520f, 0.200353255162940420f, + -0.979723722865591170f, + 0.199601757621131050f, -0.979877103699517640f, 0.198850142658750120f, + -0.980029908096989980f, + 0.198098410717953730f, -0.980182135968117320f, 0.197346562240966000f, + -0.980333787223347960f, + 0.196594597670080220f, -0.980484861773469380f, 0.195842517447657990f, + -0.980635359529608120f, + 0.195090322016128330f, -0.980785280403230430f, 0.194338011817988600f, + -0.980934624306141640f, + 0.193585587295803750f, -0.981083391150486590f, 0.192833048892205290f, + -0.981231580848749730f, + 0.192080397049892380f, -0.981379193313754560f, 0.191327632211630990f, + -0.981526228458664660f, + 0.190574754820252800f, -0.981672686196983110f, 0.189821765318656580f, + -0.981818566442552500f, + 0.189068664149806280f, -0.981963869109555240f, 0.188315451756732120f, + -0.982108594112513610f, + 0.187562128582529740f, -0.982252741366289370f, 0.186808695070359330f, + -0.982396310786084690f, + 0.186055151663446630f, -0.982539302287441240f, 0.185301498805082040f, + -0.982681715786240860f, + 0.184547736938619640f, -0.982823551198705240f, 0.183793866507478390f, + -0.982964808441396440f, + 0.183039887955141060f, -0.983105487431216290f, 0.182285801725153320f, + -0.983245588085407070f, + 0.181531608261125130f, -0.983385110321551180f, 0.180777308006728670f, + -0.983524054057571260f, + 0.180022901405699510f, -0.983662419211730250f, 0.179268388901835880f, + -0.983800205702631490f, + 0.178513770938997590f, -0.983937413449218920f, 0.177759047961107140f, + -0.984074042370776450f, + 0.177004220412148860f, -0.984210092386929030f, 0.176249288736167940f, + -0.984345563417641900f, + 0.175494253377271400f, -0.984480455383220930f, 0.174739114779627310f, + -0.984614768204312600f, + 0.173983873387463850f, -0.984748501801904210f, 0.173228529645070490f, + -0.984881656097323700f, + 0.172473083996796030f, -0.985014231012239840f, 0.171717536887049970f, + -0.985146226468662230f, + 0.170961888760301360f, -0.985277642388941220f, 0.170206140061078120f, + -0.985408478695768420f, + 0.169450291233967930f, -0.985538735312176060f, 0.168694342723617440f, + -0.985668412161537550f, + 0.167938294974731230f, -0.985797509167567370f, 0.167182148432072880f, + -0.985926026254321130f, + 0.166425903540464220f, -0.986053963346195440f, 0.165669560744784140f, + -0.986181320367928270f, + 0.164913120489970090f, -0.986308097244598670f, 0.164156583221015890f, + -0.986434293901627070f, + 0.163399949382973230f, -0.986559910264775410f, 0.162643219420950450f, + -0.986684946260146690f, + 0.161886393780111910f, -0.986809401814185420f, 0.161129472905678780f, + -0.986933276853677710f, + 0.160372457242928400f, -0.987056571305750970f, 0.159615347237193090f, + -0.987179285097874340f, + 0.158858143333861390f, -0.987301418157858430f, 0.158100845978377090f, + -0.987422970413855410f, + 0.157343455616238280f, -0.987543941794359230f, 0.156585972692998590f, + -0.987664332228205710f, + 0.155828397654265320f, -0.987784141644572180f, 0.155070730945700510f, + -0.987903369972977790f, + 0.154312973013020240f, -0.988022017143283530f, 0.153555124301993500f, + -0.988140083085692570f, + 0.152797185258443410f, -0.988257567730749460f, 0.152039156328246160f, + -0.988374471009341280f, + 0.151281037957330250f, -0.988490792852696590f, 0.150522830591677370f, + -0.988606533192386450f, + 0.149764534677321620f, -0.988721691960323780f, 0.149006150660348470f, + -0.988836269088763540f, + 0.148247678986896200f, -0.988950264510302990f, 0.147489120103153680f, + -0.989063678157881540f, + 0.146730474455361750f, -0.989176509964781010f, 0.145971742489812370f, + -0.989288759864625170f, + 0.145212924652847520f, -0.989400427791380380f, 0.144454021390860440f, + -0.989511513679355190f, + 0.143695033150294580f, -0.989622017463200780f, 0.142935960377642700f, + -0.989731939077910570f, + 0.142176803519448000f, -0.989841278458820530f, 0.141417563022303130f, + -0.989950035541608990f, + 0.140658239332849240f, -0.990058210262297120f, 0.139898832897777380f, + -0.990165802557248400f, + 0.139139344163826280f, -0.990272812363169110f, 0.138379773577783890f, + -0.990379239617108160f, + 0.137620121586486180f, -0.990485084256456980f, 0.136860388636816430f, + -0.990590346218950150f, + 0.136100575175706200f, -0.990695025442664630f, 0.135340681650134330f, + -0.990799121866020370f, + 0.134580708507126220f, -0.990902635427780010f, 0.133820656193754690f, + -0.991005566067049370f, + 0.133060525157139180f, -0.991107913723276780f, 0.132300315844444680f, + -0.991209678336254060f, + 0.131540028702883280f, -0.991310859846115440f, 0.130779664179711790f, + -0.991411458193338540f, + 0.130019222722233350f, -0.991511473318743900f, 0.129258704777796270f, + -0.991610905163495370f, + 0.128498110793793220f, -0.991709753669099530f, 0.127737441217662280f, + -0.991808018777406430f, + 0.126976696496885980f, -0.991905700430609330f, 0.126215877078990400f, + -0.992002798571244520f, + 0.125454983411546210f, -0.992099313142191800f, 0.124694015942167770f, + -0.992195244086673920f, + 0.123932975118512200f, -0.992290591348257370f, 0.123171861388280650f, + -0.992385354870851670f, + 0.122410675199216280f, -0.992479534598709970f, 0.121649416999105540f, + -0.992573130476428810f, + 0.120888087235777220f, -0.992666142448948020f, 0.120126686357101580f, + -0.992758570461551140f, + 0.119365214810991350f, -0.992850414459865100f, 0.118603673045400840f, + -0.992941674389860470f, + 0.117842061508325020f, -0.993032350197851410f, 0.117080380647800550f, + -0.993122441830495580f, + 0.116318630911904880f, -0.993211949234794500f, 0.115556812748755290f, + -0.993300872358093280f, + 0.114794926606510250f, -0.993389211148080650f, 0.114032972933367300f, + -0.993476965552789190f, + 0.113270952177564360f, -0.993564135520595300f, 0.112508864787378830f, + -0.993650721000219120f, + 0.111746711211126660f, -0.993736721940724600f, 0.110984491897163380f, + -0.993822138291519660f, + 0.110222207293883180f, -0.993906970002356060f, 0.109459857849718030f, + -0.993991217023329380f, + 0.108697444013138670f, -0.994074879304879370f, 0.107934966232653760f, + -0.994157956797789730f, + 0.107172424956808870f, -0.994240449453187900f, 0.106409820634187840f, + -0.994322357222545810f, + 0.105647153713410700f, -0.994403680057679100f, 0.104884424643134970f, + -0.994484417910747600f, + 0.104121633872054730f, -0.994564570734255420f, 0.103358781848899700f, + -0.994644138481050710f, + 0.102595869022436280f, -0.994723121104325700f, 0.101832895841466670f, + -0.994801518557617110f, + 0.101069862754827880f, -0.994879330794805620f, 0.100306770211392820f, + -0.994956557770116380f, + 0.099543618660069444f, -0.995033199438118630f, 0.098780408549799664f, + -0.995109255753726110f, + 0.098017140329560770f, -0.995184726672196820f, 0.097253814448363354f, + -0.995259612149133390f, + 0.096490431355252607f, -0.995333912140482280f, 0.095726991499307315f, + -0.995407626602534900f, + 0.094963495329639061f, -0.995480755491926940f, 0.094199943295393190f, + -0.995553298765638470f, + 0.093436335845747912f, -0.995625256380994310f, 0.092672673429913366f, + -0.995696628295663520f, + 0.091908956497132696f, -0.995767414467659820f, 0.091145185496681130f, + -0.995837614855341610f, + 0.090381360877865011f, -0.995907229417411720f, 0.089617483090022917f, + -0.995976258112917790f, + 0.088853552582524684f, -0.996044700901251970f, 0.088089569804770507f, + -0.996112557742151130f, + 0.087325535206192226f, -0.996179828595696870f, 0.086561449236251239f, + -0.996246513422315520f, + 0.085797312344439880f, -0.996312612182778000f, 0.085033124980280414f, + -0.996378124838200210f, + 0.084268887593324127f, -0.996443051350042630f, 0.083504600633152404f, + -0.996507391680110820f, + 0.082740264549375803f, -0.996571145790554840f, 0.081975879791633108f, + -0.996634313643869900f, + 0.081211446809592386f, -0.996696895202896060f, 0.080446966052950097f, + -0.996758890430818000f, + 0.079682437971430126f, -0.996820299291165670f, 0.078917863014785095f, + -0.996881121747813850f, + 0.078153241632794315f, -0.996941357764982160f, 0.077388574275265049f, + -0.997001007307235290f, + 0.076623861392031617f, -0.997060070339482960f, 0.075859103432954503f, + -0.997118546826979980f, + 0.075094300847921291f, -0.997176436735326190f, 0.074329454086845867f, + -0.997233740030466160f, + 0.073564563599667454f, -0.997290456678690210f, 0.072799629836351618f, + -0.997346586646633230f, + 0.072034653246889416f, -0.997402129901275300f, 0.071269634281296415f, + -0.997457086409941910f, + 0.070504573389614009f, -0.997511456140303450f, 0.069739471021907376f, + -0.997565239060375750f, + 0.068974327628266732f, -0.997618435138519550f, 0.068209143658806454f, + -0.997671044343441000f, + 0.067443919563664106f, -0.997723066644191640f, 0.066678655793001543f, + -0.997774502010167820f, + 0.065913352797003930f, -0.997825350411111640f, 0.065148011025878860f, + -0.997875611817110150f, + 0.064382630929857410f, -0.997925286198596000f, 0.063617212959193190f, + -0.997974373526346990f, + 0.062851757564161420f, -0.998022873771486240f, 0.062086265195060247f, + -0.998070786905482340f, + 0.061320736302208648f, -0.998118112900149180f, 0.060555171335947781f, + -0.998164851727646240f, + 0.059789570746640007f, -0.998211003360478190f, 0.059023934984667986f, + -0.998256567771495180f, + 0.058258264500435732f, -0.998301544933892890f, 0.057492559744367684f, + -0.998345934821212370f, + 0.056726821166907783f, -0.998389737407340160f, 0.055961049218520520f, + -0.998432952666508440f, + 0.055195244349690031f, -0.998475580573294770f, 0.054429407010919147f, + -0.998517621102622210f, + 0.053663537652730679f, -0.998559074229759310f, 0.052897636725665401f, + -0.998599939930320370f, + 0.052131704680283317f, -0.998640218180265270f, 0.051365741967162731f, + -0.998679908955899090f, + 0.050599749036899337f, -0.998719012233872940f, 0.049833726340107257f, + -0.998757527991183340f, + 0.049067674327418126f, -0.998795456205172410f, 0.048301593449480172f, + -0.998832796853527990f, + 0.047535484156959261f, -0.998869549914283560f, 0.046769346900537960f, + -0.998905715365818290f, + 0.046003182130914644f, -0.998941293186856870f, 0.045236990298804750f, + -0.998976283356469820f, + 0.044470771854938744f, -0.999010685854073380f, 0.043704527250063421f, + -0.999044500659429290f, + 0.042938256934940959f, -0.999077727752645360f, 0.042171961360348002f, + -0.999110367114174890f, + 0.041405640977076712f, -0.999142418724816910f, 0.040639296235933854f, + -0.999173882565716380f, + 0.039872927587739845f, -0.999204758618363890f, 0.039106535483329839f, + -0.999235046864595850f, + 0.038340120373552791f, -0.999264747286594420f, 0.037573682709270514f, + -0.999293859866887790f, + 0.036807222941358991f, -0.999322384588349540f, 0.036040741520706299f, + -0.999350321434199440f, + 0.035274238898213947f, -0.999377670388002850f, 0.034507715524795889f, + -0.999404431433671300f, + 0.033741171851377642f, -0.999430604555461730f, 0.032974608328897315f, + -0.999456189737977340f, + 0.032208025408304704f, -0.999481186966166950f, 0.031441423540560343f, + -0.999505596225325310f, + 0.030674803176636581f, -0.999529417501093140f, 0.029908164767516655f, + -0.999552650779456990f, + 0.029141508764193740f, -0.999575296046749220f, 0.028374835617672258f, + -0.999597353289648380f, + 0.027608145778965820f, -0.999618822495178640f, 0.026841439699098527f, + -0.999639703650710200f, + 0.026074717829104040f, -0.999659996743959220f, 0.025307980620024630f, + -0.999679701762987930f, + 0.024541228522912264f, -0.999698818696204250f, 0.023774461988827676f, + -0.999717347532362190f, + 0.023007681468839410f, -0.999735288260561680f, 0.022240887414024919f, + -0.999752640870248840f, + 0.021474080275469605f, -0.999769405351215280f, 0.020707260504265912f, + -0.999785581693599210f, + 0.019940428551514598f, -0.999801169887884260f, 0.019173584868322699f, + -0.999816169924900410f, + 0.018406729905804820f, -0.999830581795823400f, 0.017639864115082195f, + -0.999844405492175240f, + 0.016872987947281773f, -0.999857641005823860f, 0.016106101853537263f, + -0.999870288328982950f, + 0.015339206284988220f, -0.999882347454212560f, 0.014572301692779104f, + -0.999893818374418490f, + 0.013805388528060349f, -0.999904701082852900f, 0.013038467241987433f, + -0.999914995573113470f, + 0.012271538285719944f, -0.999924701839144500f, 0.011504602110422875f, + -0.999933819875236000f, + 0.010737659167264572f, -0.999942349676023910f, 0.009970709907418029f, + -0.999950291236490480f, + 0.009203754782059960f, -0.999957644551963900f, 0.008436794242369860f, + -0.999964409618118280f, + 0.007669828739531077f, -0.999970586430974140f, 0.006902858724729877f, + -0.999976174986897610f, + 0.006135884649154515f, -0.999981175282601110f, 0.005368906963996303f, + -0.999985587315143200f, + 0.004601926120448672f, -0.999989411081928400f, 0.003834942569706248f, + -0.999992646580707190f, + 0.003067956762966138f, -0.999995293809576190f, 0.002300969151425887f, + -0.999997352766978210f, + 0.001533980186284766f, -0.999998823451701880f, 0.000766990318742846f, + -0.999999705862882230f +}; + +static const float32_t Weights_8192[16384] = { + 1.000000000000000000, -0.000000000000000000, 0.999999981616429330, + -0.000191747597310703, + 0.999999926465717890, -0.000383495187571396, 0.999999834547867670, + -0.000575242763732066, + 0.999999705862882230, -0.000766990318742704, 0.999999540410766110, + -0.000958737845553301, + 0.999999338191525530, -0.001150485337113849, 0.999999099205167830, + -0.001342232786374338, + 0.999998823451701880, -0.001533980186284766, 0.999998510931137790, + -0.001725727529795126, + 0.999998161643486980, -0.001917474809855419, 0.999997775588762350, + -0.002109222019415644, + 0.999997352766978210, -0.002300969151425805, 0.999996893178149880, + -0.002492716198835908, + 0.999996396822294350, -0.002684463154595962, 0.999995863699429940, + -0.002876210011655979, + 0.999995293809576190, -0.003067956762965976, 0.999994687152754080, + -0.003259703401475973, + 0.999994043728985820, -0.003451449920135994, 0.999993363538295150, + -0.003643196311896068, + 0.999992646580707190, -0.003834942569706228, 0.999991892856248010, + -0.004026688686516512, + 0.999991102364945590, -0.004218434655276963, 0.999990275106828920, + -0.004410180468937631, + 0.999989411081928400, -0.004601926120448571, 0.999988510290275690, + -0.004793671602759841, + 0.999987572731904080, -0.004985416908821511, 0.999986598406848000, + -0.005177162031583651, + 0.999985587315143200, -0.005368906963996343, 0.999984539456826970, + -0.005560651699009674, + 0.999983454831937730, -0.005752396229573736, 0.999982333440515350, + -0.005944140548638633, + 0.999981175282601110, -0.006135884649154475, 0.999979980358237650, + -0.006327628524071378, + 0.999978748667468830, -0.006519372166339468, 0.999977480210339940, + -0.006711115568908879, + 0.999976174986897610, -0.006902858724729756, 0.999974832997189810, + -0.007094601626752250, + 0.999973454241265940, -0.007286344267926521, 0.999972038719176730, + -0.007478086641202744, + 0.999970586430974140, -0.007669828739531097, 0.999969097376711580, + -0.007861570555861772, + 0.999967571556443780, -0.008053312083144972, 0.999966008970226920, + -0.008245053314330906, + 0.999964409618118280, -0.008436794242369799, 0.999962773500176930, + -0.008628534860211886, + 0.999961100616462820, -0.008820275160807412, 0.999959390967037450, + -0.009012015137106633, + 0.999957644551963900, -0.009203754782059819, 0.999955861371306100, + -0.009395494088617252, + 0.999954041425129780, -0.009587233049729225, 0.999952184713501780, + -0.009778971658346044, + 0.999950291236490480, -0.009970709907418031, 0.999948360994165400, + -0.010162447789895513, + 0.999946393986597460, -0.010354185298728842, 0.999944390213859060, + -0.010545922426868378, + 0.999942349676023910, -0.010737659167264491, 0.999940272373166960, + -0.010929395512867571, + 0.999938158305364590, -0.011121131456628021, 0.999936007472694620, + -0.011312866991496258, + 0.999933819875236000, -0.011504602110422714, 0.999931595513069200, + -0.011696336806357838, + 0.999929334386276070, -0.011888071072252092, 0.999927036494939640, + -0.012079804901055957, + 0.999924701839144500, -0.012271538285719925, 0.999922330418976490, + -0.012463271219194511, + 0.999919922234522750, -0.012655003694430242, 0.999917477285871770, + -0.012846735704377662, + 0.999914995573113470, -0.013038467241987334, 0.999912477096339240, + -0.013230198300209835, + 0.999909921855641540, -0.013421928871995765, 0.999907329851114300, + -0.013613658950295740, + 0.999904701082852900, -0.013805388528060391, 0.999902035550953920, + -0.013997117598240367, + 0.999899333255515390, -0.014188846153786345, 0.999896594196636680, + -0.014380574187649006, + 0.999893818374418490, -0.014572301692779064, 0.999891005788962950, + -0.014764028662127246, + 0.999888156440373320, -0.014955755088644296, 0.999885270328754520, + -0.015147480965280987, + 0.999882347454212560, -0.015339206284988100, 0.999879387816854930, + -0.015530931040716447, + 0.999876391416790410, -0.015722655225416857, 0.999873358254129260, + -0.015914378832040183, + 0.999870288328982950, -0.016106101853537287, 0.999867181641464380, + -0.016297824282859065, + 0.999864038191687680, -0.016489546112956437, 0.999860857979768540, + -0.016681267336780332, + 0.999857641005823860, -0.016872987947281710, 0.999854387269971890, + -0.017064707937411563, + 0.999851096772332190, -0.017256427300120877, 0.999847769513025900, + -0.017448146028360693, + 0.999844405492175240, -0.017639864115082053, 0.999841004709904000, + -0.017831581553236039, + 0.999837567166337090, -0.018023298335773746, 0.999834092861600960, + -0.018215014455646290, + 0.999830581795823400, -0.018406729905804820, 0.999827033969133420, + -0.018598444679200511, + 0.999823449381661570, -0.018790158768784555, 0.999819828033539420, + -0.018981872167508178, + 0.999816169924900410, -0.019173584868322623, 0.999812475055878780, + -0.019365296864179156, + 0.999808743426610520, -0.019557008148029083, 0.999804975037232870, + -0.019748718712823729, + 0.999801169887884260, -0.019940428551514441, 0.999797327978704690, + -0.020132137657052594, + 0.999793449309835270, -0.020323846022389593, 0.999789533881418780, + -0.020515553640476875, + 0.999785581693599210, -0.020707260504265895, 0.999781592746521670, + -0.020898966606708137, + 0.999777567040332940, -0.021090671940755121, 0.999773504575180990, + -0.021282376499358387, + 0.999769405351215280, -0.021474080275469508, 0.999765269368586450, + -0.021665783262040078, + 0.999761096627446610, -0.021857485452021735, 0.999756887127949080, + -0.022049186838366135, + 0.999752640870248840, -0.022240887414024961, 0.999748357854501780, + -0.022432587171949934, + 0.999744038080865430, -0.022624286105092803, 0.999739681549498660, + -0.022815984206405345, + 0.999735288260561680, -0.023007681468839369, 0.999730858214216030, + -0.023199377885346720, + 0.999726391410624470, -0.023391073448879258, 0.999721887849951310, + -0.023582768152388894, + 0.999717347532362190, -0.023774461988827555, 0.999712770458023870, + -0.023966154951147210, + 0.999708156627104880, -0.024157847032299864, 0.999703506039774650, + -0.024349538225237534, + 0.999698818696204250, -0.024541228522912288, 0.999694094596566000, + -0.024732917918276223, + 0.999689333741033640, -0.024924606404281468, 0.999684536129782140, + -0.025116293973880186, + 0.999679701762987930, -0.025307980620024571, 0.999674830640828740, + -0.025499666335666853, + 0.999669922763483760, -0.025691351113759295, 0.999664978131133310, + -0.025883034947254198, + 0.999659996743959220, -0.026074717829103901, 0.999654978602144690, + -0.026266399752260760, + 0.999649923705874240, -0.026458080709677187, 0.999644832055333610, + -0.026649760694305618, + 0.999639703650710200, -0.026841439699098531, 0.999634538492192300, + -0.027033117717008431, + 0.999629336579970110, -0.027224794740987875, 0.999624097914234570, + -0.027416470763989436, + 0.999618822495178640, -0.027608145778965740, 0.999613510322995950, + -0.027799819778869445, + 0.999608161397882110, -0.027991492756653243, 0.999602775720033530, + -0.028183164705269874, + 0.999597353289648380, -0.028374835617672099, 0.999591894106925950, + -0.028566505486812728, + 0.999586398172067070, -0.028758174305644615, 0.999580865485273700, + -0.028949842067120635, + 0.999575296046749220, -0.029141508764193722, 0.999569689856698580, + -0.029333174389816835, + 0.999564046915327740, -0.029524838936942976, 0.999558367222844300, + -0.029716502398525191, + 0.999552650779456990, -0.029908164767516555, 0.999546897585375960, + -0.030099826036870198, + 0.999541107640812940, -0.030291486199539284, 0.999535280945980540, + -0.030483145248477009, + 0.999529417501093140, -0.030674803176636626, 0.999523517306366350, + -0.030866459976971412, + 0.999517580362016990, -0.031058115642434700, 0.999511606668263440, + -0.031249770165979861, + 0.999505596225325310, -0.031441423540560301, 0.999499549033423640, + -0.031633075759129478, + 0.999493465092780590, -0.031824726814640887, 0.999487344403620080, + -0.032016376700048060, + 0.999481186966166950, -0.032208025408304586, 0.999474992780647780, + -0.032399672932364086, + 0.999468761847290050, -0.032591319265180226, 0.999462494166323160, + -0.032782964399706724, + 0.999456189737977340, -0.032974608328897335, 0.999449848562484530, + -0.033166251045705857, + 0.999443470640077770, -0.033357892543086139, 0.999437055970991530, + -0.033549532813992068, + 0.999430604555461730, -0.033741171851377580, 0.999424116393725640, + -0.033932809648196664, + 0.999417591486021720, -0.034124446197403326, 0.999411029832589780, + -0.034316081491951651, + 0.999404431433671300, -0.034507715524795750, 0.999397796289508640, + -0.034699348288889799, + 0.999391124400346050, -0.034890979777188004, 0.999384415766428560, + -0.035082609982644619, + 0.999377670388002850, -0.035274238898213947, 0.999370888265317170, + -0.035465866516850353, + 0.999364069398620550, -0.035657492831508222, 0.999357213788164000, + -0.035849117835142018, + 0.999350321434199440, -0.036040741520706229, 0.999343392336980220, + -0.036232363881155395, + 0.999336426496761240, -0.036423984909444110, 0.999329423913798420, + -0.036615604598527030, + 0.999322384588349540, -0.036807222941358832, 0.999315308520673070, + -0.036998839930894263, + 0.999308195711029470, -0.037190455560088119, 0.999301046159680070, + -0.037382069821895229, + 0.999293859866887790, -0.037573682709270494, 0.999286636832916740, + -0.037765294215168860, + 0.999279377058032710, -0.037956904332545310, 0.999272080542502610, + -0.038148513054354891, + 0.999264747286594420, -0.038340120373552694, 0.999257377290578060, + -0.038531726283093870, + 0.999249970554724420, -0.038723330775933623, 0.999242527079305830, + -0.038914933845027193, + 0.999235046864595850, -0.039106535483329888, 0.999227529910869610, + -0.039298135683797059, + 0.999219976218403530, -0.039489734439384118, 0.999212385787475290, + -0.039681331743046527, + 0.999204758618363890, -0.039872927587739811, 0.999197094711349880, + -0.040064521966419520, + 0.999189394066714920, -0.040256114872041282, 0.999181656684742350, + -0.040447706297560782, + 0.999173882565716380, -0.040639296235933736, 0.999166071709923000, + -0.040830884680115948, + 0.999158224117649430, -0.041022471623063238, 0.999150339789184110, + -0.041214057057731519, + 0.999142418724816910, -0.041405640977076739, 0.999134460924839150, + -0.041597223374054894, + 0.999126466389543390, -0.041788804241622061, 0.999118435119223490, + -0.041980383572734356, + 0.999110367114174890, -0.042171961360347947, 0.999102262374694130, + -0.042363537597419072, + 0.999094120901079070, -0.042555112276904020, 0.999085942693629270, + -0.042746685391759132, + 0.999077727752645360, -0.042938256934940820, 0.999069476078429330, + -0.043129826899405546, + 0.999061187671284600, -0.043321395278109825, 0.999052862531515930, + -0.043512962064010237, + 0.999044500659429290, -0.043704527250063421, 0.999036102055332330, + -0.043896090829226068, + 0.999027666719533690, -0.044087652794454944, 0.999019194652343460, + -0.044279213138706849, + 0.999010685854073380, -0.044470771854938668, 0.999002140325035980, + -0.044662328936107325, + 0.998993558065545680, -0.044853884375169815, 0.998984939075918010, + -0.045045438165083197, + 0.998976283356469820, -0.045236990298804590, 0.998967590907519300, + -0.045428540769291155, + 0.998958861729386080, -0.045620089569500144, 0.998950095822391250, + -0.045811636692388844, + 0.998941293186856870, -0.046003182130914623, 0.998932453823106690, + -0.046194725878034908, + 0.998923577731465780, -0.046386267926707157, 0.998914664912260440, + -0.046577808269888943, + 0.998905715365818290, -0.046769346900537863, 0.998896729092468410, + -0.046960883811611592, + 0.998887706092541290, -0.047152418996067869, 0.998878646366368690, + -0.047343952446864478, + 0.998869549914283560, -0.047535484156959303, 0.998860416736620520, + -0.047727014119310254, + 0.998851246833715180, -0.047918542326875327, 0.998842040205904840, + -0.048110068772612591, + 0.998832796853527990, -0.048301593449480144, 0.998823516776924490, + -0.048493116350436176, + 0.998814199976435390, -0.048684637468438943, 0.998804846452403420, + -0.048876156796446760, + 0.998795456205172410, -0.049067674327418015, 0.998786029235087640, + -0.049259190054311140, + 0.998776565542495610, -0.049450703970084664, 0.998767065127744380, + -0.049642216067697156, + 0.998757527991183340, -0.049833726340107277, 0.998747954133162860, + -0.050025234780273729, + 0.998738343554035230, -0.050216741381155311, 0.998728696254153720, + -0.050408246135710856, + 0.998719012233872940, -0.050599749036899282, 0.998709291493549030, + -0.050791250077679581, + 0.998699534033539280, -0.050982749251010803, 0.998689739854202620, + -0.051174246549852080, + 0.998679908955899090, -0.051365741967162593, 0.998670041338990070, + -0.051557235495901611, + 0.998660137003838490, -0.051748727129028456, 0.998650195950808280, + -0.051940216859502536, + 0.998640218180265270, -0.052131704680283324, 0.998630203692576050, + -0.052323190584330347, + 0.998620152488108870, -0.052514674564603223, 0.998610064567233340, + -0.052706156614061632, + 0.998599939930320370, -0.052897636725665324, 0.998589778577742230, + -0.053089114892374133, + 0.998579580509872500, -0.053280591107147945, 0.998569345727086110, + -0.053472065362946727, + 0.998559074229759310, -0.053663537652730520, 0.998548766018269920, + -0.053855007969459440, + 0.998538421092996730, -0.054046476306093660, 0.998528039454320230, + -0.054237942655593452, + 0.998517621102622210, -0.054429407010919133, 0.998507166038285490, + -0.054620869365031105, + 0.998496674261694640, -0.054812329710889854, 0.998486145773235360, + -0.055003788041455920, + 0.998475580573294770, -0.055195244349689934, 0.998464978662261250, + -0.055386698628552597, + 0.998454340040524800, -0.055578150871004678, 0.998443664708476340, + -0.055769601070007030, + 0.998432952666508440, -0.055961049218520569, 0.998422203915015020, + -0.056152495309506292, + 0.998411418454391300, -0.056343939335925290, 0.998400596285033640, + -0.056535381290738700, + 0.998389737407340160, -0.056726821166907748, 0.998378841821709990, + -0.056918258957393740, + 0.998367909528543820, -0.057109694655158062, 0.998356940528243420, + -0.057301128253162158, + 0.998345934821212370, -0.057492559744367566, 0.998334892407855000, + -0.057683989121735904, + 0.998323813288577560, -0.057875416378228857, 0.998312697463787260, + -0.058066841506808194, + 0.998301544933892890, -0.058258264500435752, 0.998290355699304350, + -0.058449685352073476, + 0.998279129760433200, -0.058641104054683341, 0.998267867117692110, + -0.058832520601227435, + 0.998256567771495180, -0.059023934984667931, 0.998245231722257880, + -0.059215347197967061, + 0.998233858970396850, -0.059406757234087150, 0.998222449516330550, + -0.059598165085990591, + 0.998211003360478190, -0.059789570746639868, 0.998199520503260660, + -0.059980974208997548, + 0.998188000945100300, -0.060172375466026259, 0.998176444686420530, + -0.060363774510688743, + 0.998164851727646240, -0.060555171335947788, 0.998153222069203760, + -0.060746565934766288, + 0.998141555711520520, -0.060937958300107203, 0.998129852655025630, + -0.061129348424933588, + 0.998118112900149180, -0.061320736302208578, 0.998106336447323050, + -0.061512121924895378, + 0.998094523296980010, -0.061703505285957298, 0.998082673449554590, + -0.061894886378357716, + 0.998070786905482340, -0.062086265195060088, 0.998058863665200250, + -0.062277641729027972, + 0.998046903729146840, -0.062469015973224996, 0.998034907097761770, + -0.062660387920614874, + 0.998022873771486240, -0.062851757564161406, 0.998010803750762450, + -0.063043124896828492, + 0.997998697036034390, -0.063234489911580066, 0.997986553627747020, + -0.063425852601380228, + 0.997974373526346990, -0.063617212959193106, 0.997962156732281950, + -0.063808570977982898, + 0.997949903246001190, -0.063999926650713940, 0.997937613067955250, + -0.064191279970350637, + 0.997925286198596000, -0.064382630929857465, 0.997912922638376610, + -0.064573979522198982, + 0.997900522387751620, -0.064765325740339885, 0.997888085447177110, + -0.064956669577244872, + 0.997875611817110150, -0.065148011025878833, 0.997863101498009500, + -0.065339350079206632, + 0.997850554490335110, -0.065530686730193327, 0.997837970794548280, + -0.065722020971803990, + 0.997825350411111640, -0.065913352797003805, 0.997812693340489280, + -0.066104682198758077, + 0.997799999583146470, -0.066296009170032130, 0.997787269139549960, + -0.066487333703791451, + 0.997774502010167820, -0.066678655793001557, 0.997761698195469560, + -0.066869975430628115, + 0.997748857695925690, -0.067061292609636822, 0.997735980512008620, + -0.067252607322993499, + 0.997723066644191640, -0.067443919563664051, 0.997710116092949570, + -0.067635229324614479, + 0.997697128858758500, -0.067826536598810869, 0.997684104942096030, + -0.068017841379219388, + 0.997671044343441000, -0.068209143658806329, 0.997657947063273710, + -0.068400443430538013, + 0.997644813102075420, -0.068591740687380942, 0.997631642460329320, + -0.068783035422301630, + 0.997618435138519550, -0.068974327628266746, 0.997605191137131640, + -0.069165617298242985, + 0.997591910456652630, -0.069356904425197208, 0.997578593097570800, + -0.069548189002096306, + 0.997565239060375750, -0.069739471021907307, 0.997551848345558430, + -0.069930750477597309, + 0.997538420953611340, -0.070122027362133521, 0.997524956885027960, + -0.070313301668483250, + 0.997511456140303450, -0.070504573389613856, 0.997497918719934210, + -0.070695842518492855, + 0.997484344624417930, -0.070887109048087801, 0.997470733854253670, + -0.071078372971366405, + 0.997457086409941910, -0.071269634281296401, 0.997443402291984360, + -0.071460892970845680, + 0.997429681500884180, -0.071652149032982212, 0.997415924037145960, + -0.071843402460674027, + 0.997402129901275300, -0.072034653246889332, 0.997388299093779460, + -0.072225901384596322, + 0.997374431615167150, -0.072417146866763413, 0.997360527465947940, + -0.072608389686358993, + 0.997346586646633230, -0.072799629836351673, 0.997332609157735470, + -0.072990867309710036, + 0.997318594999768600, -0.073182102099402888, 0.997304544173247990, + -0.073373334198399032, + 0.997290456678690210, -0.073564563599667426, 0.997276332516613180, + -0.073755790296177098, + 0.997262171687536170, -0.073947014280897200, 0.997247974191979860, + -0.074138235546796979, + 0.997233740030466280, -0.074329454086845756, 0.997219469203518670, + -0.074520669894013000, + 0.997205161711661850, -0.074711882961268211, 0.997190817555421940, + -0.074903093281581082, + 0.997176436735326190, -0.075094300847921305, 0.997162019251903290, + -0.075285505653258769, + 0.997147565105683480, -0.075476707690563388, 0.997133074297198110, + -0.075667906952805231, + 0.997118546826979980, -0.075859103432954447, 0.997103982695563330, + -0.076050297123981259, + 0.997089381903483400, -0.076241488018856066, 0.997074744451277310, + -0.076432676110549283, + 0.997060070339482960, -0.076623861392031492, 0.997045359568640040, + -0.076815043856273343, + 0.997030612139289450, -0.077006223496245640, 0.997015828051973310, + -0.077197400304919200, + 0.997001007307235290, -0.077388574275265049, 0.996986149905620180, + -0.077579745400254224, + 0.996971255847674320, -0.077770913672857947, 0.996956325133945280, + -0.077962079086047492, + 0.996941357764982160, -0.078153241632794232, 0.996926353741335090, + -0.078344401306069705, + 0.996911313063555740, -0.078535558098845479, 0.996896235732197210, + -0.078726712004093299, + 0.996881121747813850, -0.078917863014784942, 0.996865971110961310, + -0.079109011123892375, + 0.996850783822196610, -0.079300156324387597, 0.996835559882078170, + -0.079491298609242769, + 0.996820299291165670, -0.079682437971430126, 0.996805002050020430, + -0.079873574403921996, + 0.996789668159204560, -0.080064707899690890, 0.996774297619282050, + -0.080255838451709319, + 0.996758890430818000, -0.080446966052950014, 0.996743446594378860, + -0.080638090696385709, + 0.996727966110532490, -0.080829212374989329, 0.996712448979848010, + -0.081020331081733857, + 0.996696895202896060, -0.081211446809592441, 0.996681304780248300, + -0.081402559551538245, + 0.996665677712478160, -0.081593669300544652, 0.996650014000160070, + -0.081784776049585076, + 0.996634313643869900, -0.081975879791633066, 0.996618576644185070, + -0.082166980519662314, + 0.996602803001684130, -0.082358078226646536, 0.996586992716946950, + -0.082549172905559673, + 0.996571145790554840, -0.082740264549375692, 0.996555262223090540, + -0.082931353151068699, + 0.996539342015137940, -0.083122438703612911, 0.996523385167282450, + -0.083313521199982685, + 0.996507391680110820, -0.083504600633152432, 0.996491361554210920, + -0.083695676996096716, + 0.996475294790172160, -0.083886750281790226, 0.996459191388585410, + -0.084077820483207694, + 0.996443051350042630, -0.084268887593324071, 0.996426874675137240, + -0.084459951605114325, + 0.996410661364464100, -0.084651012511553617, 0.996394411418619290, + -0.084842070305617134, + 0.996378124838200210, -0.085033124980280275, 0.996361801623805720, + -0.085224176528518478, + 0.996345441776035900, -0.085415224943307333, 0.996329045295492380, + -0.085606270217622529, + 0.996312612182778000, -0.085797312344439894, 0.996296142438496850, + -0.085988351316735337, + 0.996279636063254650, -0.086179387127484894, 0.996263093057658140, + -0.086370419769664752, + 0.996246513422315520, -0.086561449236251170, 0.996229897157836500, + -0.086752475520220543, + 0.996213244264832040, -0.086943498614549378, 0.996196554743914220, + -0.087134518512214307, + 0.996179828595696980, -0.087325535206192059, 0.996163065820794950, + -0.087516548689459531, + 0.996146266419824620, -0.087707558954993659, 0.996129430393403740, + -0.087898565995771588, + 0.996112557742151130, -0.088089569804770507, 0.996095648466687300, + -0.088280570374967740, + 0.996078702567633980, -0.088471567699340767, 0.996061720045614000, + -0.088662561770867149, + 0.996044700901251970, -0.088853552582524600, 0.996027645135173610, + -0.089044540127290892, + 0.996010552748005870, -0.089235524398144014, 0.995993423740377360, + -0.089426505388061961, + 0.995976258112917790, -0.089617483090022959, 0.995959055866258320, + -0.089808457497005278, + 0.995941817001031350, -0.089999428601987341, 0.995924541517870800, + -0.090190396397947695, + 0.995907229417411720, -0.090381360877864983, 0.995889880700290720, + -0.090572322034717989, + 0.995872495367145730, -0.090763279861485621, 0.995855073418615790, + -0.090954234351146926, + 0.995837614855341610, -0.091145185496681005, 0.995820119677964910, + -0.091336133291067184, + 0.995802587887129160, -0.091527077727284828, 0.995785019483478750, + -0.091718018798313455, + 0.995767414467659820, -0.091908956497132724, 0.995749772840319510, + -0.092099890816722388, + 0.995732094602106430, -0.092290821750062355, 0.995714379753670610, + -0.092481749290132600, + 0.995696628295663520, -0.092672673429913310, 0.995678840228737540, + -0.092863594162384724, + 0.995661015553546910, -0.093054511480527249, 0.995643154270746900, + -0.093245425377321375, + 0.995625256380994310, -0.093436335845747787, 0.995607321884947050, + -0.093627242878787195, + 0.995589350783264600, -0.093818146469420549, 0.995571343076607770, + -0.094009046610628838, + 0.995553298765638470, -0.094199943295393204, 0.995535217851020390, + -0.094390836516694943, + 0.995517100333418110, -0.094581726267515445, 0.995498946213497770, + -0.094772612540836243, + 0.995480755491926940, -0.094963495329638992, 0.995462528169374420, + -0.095154374626905486, + 0.995444264246510340, -0.095345250425617617, 0.995425963724006160, + -0.095536122718757471, + 0.995407626602534900, -0.095726991499307162, 0.995389252882770690, + -0.095917856760249040, + 0.995370842565388990, -0.096108718494565509, 0.995352395651066810, + -0.096299576695239128, + 0.995333912140482280, -0.096490431355252593, 0.995315392034315070, + -0.096681282467588725, + 0.995296835333246090, -0.096872130025230471, 0.995278242037957670, + -0.097062974021160917, + 0.995259612149133390, -0.097253814448363271, 0.995240945667458130, + -0.097444651299820870, + 0.995222242593618360, -0.097635484568517200, 0.995203502928301510, + -0.097826314247435861, + 0.995184726672196930, -0.098017140329560604, 0.995165913825994620, + -0.098207962807875276, + 0.995147064390386470, -0.098398781675363881, 0.995128178366065490, + -0.098589596925010584, + 0.995109255753726110, -0.098780408549799623, 0.995090296554064000, + -0.098971216542715429, + 0.995071300767776170, -0.099162020896742503, 0.995052268395561050, + -0.099352821604865540, + 0.995033199438118630, -0.099543618660069319, 0.995014093896149700, + -0.099734412055338825, + 0.994994951770357020, -0.099925201783659073, 0.994975773061444140, + -0.100115987838015310, + 0.994956557770116380, -0.100306770211392860, 0.994937305897080070, + -0.100497548896777200, + 0.994918017443043200, -0.100688323887153960, 0.994898692408714870, + -0.100879095175508860, + 0.994879330794805620, -0.101069862754827820, 0.994859932602027320, + -0.101260626618096830, + 0.994840497831093180, -0.101451386758302080, 0.994821026482717860, + -0.101642143168429830, + 0.994801518557617110, -0.101832895841466530, 0.994781974056508260, + -0.102023644770398740, + 0.994762392980109930, -0.102214389948213210, 0.994742775329142010, + -0.102405131367896720, + 0.994723121104325700, -0.102595869022436280, 0.994703430306383860, + -0.102786602904819040, + 0.994683702936040250, -0.102977333008032220, 0.994663938994020390, + -0.103168059325063230, + 0.994644138481050710, -0.103358781848899610, 0.994624301397859400, + -0.103549500572529070, + 0.994604427745175660, -0.103740215488939370, 0.994584517523730340, + -0.103930926591118510, + 0.994564570734255420, -0.104121633872054590, 0.994544587377484300, + -0.104312337324735800, + 0.994524567454151740, -0.104503036942150570, 0.994504510964993700, + -0.104693732717287390, + 0.994484417910747600, -0.104884424643134970, 0.994464288292152390, + -0.105075112712682040, + 0.994444122109948040, -0.105265796918917600, 0.994423919364875950, + -0.105456477254830710, + 0.994403680057679100, -0.105647153713410620, 0.994383404189101430, + -0.105837826287646670, + 0.994363091759888570, -0.106028494970528410, 0.994342742770787270, + -0.106219159755045480, + 0.994322357222545810, -0.106409820634187680, 0.994301935115913580, + -0.106600477600944960, + 0.994281476451641550, -0.106791130648307390, 0.994260981230481790, + -0.106981779769265230, + 0.994240449453187900, -0.107172424956808840, 0.994219881120514960, + -0.107363066203928760, + 0.994199276233218910, -0.107553703503615620, 0.994178634792057590, + -0.107744336848860280, + 0.994157956797789730, -0.107934966232653650, 0.994137242251175720, + -0.108125591647986870, + 0.994116491152977070, -0.108316213087851170, 0.994095703503956930, + -0.108506830545237920, + 0.994074879304879370, -0.108697444013138720, 0.994054018556510210, + -0.108888053484545190, + 0.994033121259616400, -0.109078658952449240, 0.994012187414966220, + -0.109269260409842780, + 0.993991217023329380, -0.109459857849717980, 0.993970210085476920, + -0.109650451265067100, + 0.993949166602181130, -0.109841040648882600, 0.993928086574215830, + -0.110031625994157000, + 0.993906970002356060, -0.110222207293883060, 0.993885816887378090, + -0.110412784541053630, + 0.993864627230059750, -0.110603357728661730, 0.993843401031180180, + -0.110793926849700560, + 0.993822138291519660, -0.110984491897163390, 0.993800839011860120, + -0.111175052864043720, + 0.993779503192984580, -0.111365609743335160, 0.993758130835677430, + -0.111556162528031480, + 0.993736721940724600, -0.111746711211126590, 0.993715276508913230, + -0.111937255785614570, + 0.993693794541031790, -0.112127796244489640, 0.993672276037870010, + -0.112318332580746170, + 0.993650721000219120, -0.112508864787378690, 0.993629129428871720, + -0.112699392857381860, + 0.993607501324621610, -0.112889916783750520, 0.993585836688263950, + -0.113080436559479620, + 0.993564135520595300, -0.113270952177564350, 0.993542397822413600, + -0.113461463630999950, + 0.993520623594518090, -0.113651970912781870, 0.993498812837709360, + -0.113842474015905710, + 0.993476965552789190, -0.114032972933367200, 0.993455081740560960, + -0.114223467658162260, + 0.993433161401829360, -0.114413958183286920, 0.993411204537400060, + -0.114604444501737420, + 0.993389211148080650, -0.114794926606510080, 0.993367181234679600, + -0.114985404490601460, + 0.993345114798006910, -0.115175878147008190, 0.993323011838873950, + -0.115366347568727140, + 0.993300872358093280, -0.115556812748755260, 0.993278696356479030, + -0.115747273680089720, + 0.993256483834846440, -0.115937730355727780, 0.993234234794012290, + -0.116128182768666930, + 0.993211949234794500, -0.116318630911904750, 0.993189627158012620, + -0.116509074778439040, + 0.993167268564487230, -0.116699514361267690, 0.993144873455040430, + -0.116889949653388780, + 0.993122441830495580, -0.117080380647800590, 0.993099973691677570, + -0.117270807337501460, + 0.993077469039412300, -0.117461229715489990, 0.993054927874527320, + -0.117651647774764860, + 0.993032350197851410, -0.117842061508324980, 0.993009736010214580, + -0.118032470909169340, + 0.992987085312448390, -0.118222875970297170, 0.992964398105385610, + -0.118413276684707790, + 0.992941674389860470, -0.118603673045400720, 0.992918914166708300, + -0.118794065045375640, + 0.992896117436765980, -0.118984452677632340, 0.992873284200871730, + -0.119174835935170880, + 0.992850414459865100, -0.119365214810991350, 0.992827508214586760, + -0.119555589298094110, + 0.992804565465879140, -0.119745959389479600, 0.992781586214585570, + -0.119936325078148470, + 0.992758570461551140, -0.120126686357101500, 0.992735518207621850, + -0.120317043219339680, + 0.992712429453645460, -0.120507395657864130, 0.992689304200470750, + -0.120697743665676110, + 0.992666142448948020, -0.120888087235777080, 0.992642944199928820, + -0.121078426361168640, + 0.992619709454266140, -0.121268761034852600, 0.992596438212814290, + -0.121459091249830840, + 0.992573130476428810, -0.121649416999105530, 0.992549786245966680, + -0.121839738275678890, + 0.992526405522286100, -0.122030055072553360, 0.992502988306246950, + -0.122220367382731540, + 0.992479534598709970, -0.122410675199216200, 0.992456044400537700, + -0.122600978515010240, + 0.992432517712593660, -0.122791277323116770, 0.992408954535742850, + -0.122981571616539050, + 0.992385354870851670, -0.123171861388280480, 0.992361718718787870, + -0.123362146631344680, + 0.992338046080420420, -0.123552427338735370, 0.992314336956619640, + -0.123742703503456510, + 0.992290591348257370, -0.123932975118512160, 0.992266809256206580, + -0.124123242176906600, + 0.992242990681341700, -0.124313504671644230, 0.992219135624538450, + -0.124503762595729660, + 0.992195244086673920, -0.124694015942167640, 0.992171316068626520, + -0.124884264703963130, + 0.992147351571276090, -0.125074508874121170, 0.992123350595503720, + -0.125264748445647060, + 0.992099313142191800, -0.125454983411546230, 0.992075239212224070, + -0.125645213764824290, + 0.992051128806485720, -0.125835439498487000, 0.992026981925863360, + -0.126025660605540320, + 0.992002798571244520, -0.126215877078990350, 0.991978578743518580, + -0.126406088911843380, + 0.991954322443575950, -0.126596296097105850, 0.991930029672308480, + -0.126786498627784410, + 0.991905700430609330, -0.126976696496885870, 0.991881334719373010, + -0.127166889697417160, + 0.991856932539495470, -0.127357078222385400, 0.991832493891873780, + -0.127547262064797970, + 0.991808018777406430, -0.127737441217662310, 0.991783507196993490, + -0.127927615673986080, + 0.991758959151536110, -0.128117785426777130, 0.991734374641936810, + -0.128307950469043420, + 0.991709753669099530, -0.128498110793793170, 0.991685096233929420, + -0.128688266394034690, + 0.991660402337333210, -0.128878417262776550, 0.991635671980218740, + -0.129068563393027410, + 0.991610905163495370, -0.129258704777796140, 0.991586101888073500, + -0.129448841410091780, + 0.991561262154865290, -0.129638973282923560, 0.991536385964783880, + -0.129829100389300930, + 0.991511473318743900, -0.130019222722233350, 0.991486524217661480, + -0.130209340274730630, + 0.991461538662453790, -0.130399453039802690, 0.991436516654039420, + -0.130589561010459650, + 0.991411458193338540, -0.130779664179711710, 0.991386363281272280, + -0.130969762540569380, + 0.991361231918763460, -0.131159856086043270, 0.991336064106736140, + -0.131349944809144190, + 0.991310859846115440, -0.131540028702883120, 0.991285619137828200, + -0.131730107760271160, + 0.991260341982802440, -0.131920181974319790, 0.991235028381967420, + -0.132110251338040360, + 0.991209678336254060, -0.132300315844444650, 0.991184291846594180, + -0.132490375486544550, + 0.991158868913921350, -0.132680430257352070, 0.991133409539170170, + -0.132870480149879430, + 0.991107913723276890, -0.133060525157139060, 0.991082381467178640, + -0.133250565272143570, + 0.991056812771814340, -0.133440600487905680, 0.991031207638124130, + -0.133630630797438340, + 0.991005566067049370, -0.133820656193754720, 0.990979888059532740, + -0.134010676669868130, + 0.990954173616518500, -0.134200692218792020, 0.990928422738951990, + -0.134390702833540070, + 0.990902635427780010, -0.134580708507126170, 0.990876811683950700, + -0.134770709232564350, + 0.990850951508413620, -0.134960705002868750, 0.990825054902119470, + -0.135150695811053850, + 0.990799121866020370, -0.135340681650134210, 0.990773152401069780, + -0.135530662513124590, + 0.990747146508222710, -0.135720638393039910, 0.990721104188435180, + -0.135910609282895330, + 0.990695025442664630, -0.136100575175706200, 0.990668910271870100, + -0.136290536064487960, + 0.990642758677011570, -0.136480491942256280, 0.990616570659050620, + -0.136670442802027090, + 0.990590346218950150, -0.136860388636816380, 0.990564085357674370, + -0.137050329439640410, + 0.990537788076188750, -0.137240265203515590, 0.990511454375460290, + -0.137430195921458550, + 0.990485084256457090, -0.137620121586486040, 0.990458677720148620, + -0.137810042191615080, + 0.990432234767505970, -0.137999957729862790, 0.990405755399501260, + -0.138189868194246560, + 0.990379239617108160, -0.138379773577783890, 0.990352687421301450, + -0.138569673873492500, + 0.990326098813057330, -0.138759569074390350, 0.990299473793353590, + -0.138949459173495490, + 0.990272812363169110, -0.139139344163826200, 0.990246114523483990, + -0.139329224038400980, + 0.990219380275280000, -0.139519098790238490, 0.990192609619540030, + -0.139708968412357550, + 0.990165802557248400, -0.139898832897777210, 0.990138959089390650, + -0.140088692239516670, + 0.990112079216953770, -0.140278546430595420, 0.990085162940925970, + -0.140468395464033000, + 0.990058210262297120, -0.140658239332849210, 0.990031221182058000, + -0.140848078030064080, + 0.990004195701200910, -0.141037911548697710, 0.989977133820719610, + -0.141227739881770510, + 0.989950035541608990, -0.141417563022303020, 0.989922900864865450, + -0.141607380963316020, + 0.989895729791486660, -0.141797193697830390, 0.989868522322471580, + -0.141987001218867290, + 0.989841278458820530, -0.142176803519448030, 0.989813998201535260, + -0.142366600592594180, + 0.989786681551618640, -0.142556392431327340, 0.989759328510075200, + -0.142746179028669460, + 0.989731939077910570, -0.142935960377642670, 0.989704513256131850, + -0.143125736471269190, + 0.989677051045747210, -0.143315507302571500, 0.989649552447766530, + -0.143505272864572290, + 0.989622017463200890, -0.143695033150294470, 0.989594446093062460, + -0.143884788152760980, + 0.989566838338365120, -0.144074537864995160, 0.989539194200123930, + -0.144264282280020440, + 0.989511513679355190, -0.144454021390860470, 0.989483796777076760, + -0.144643755190539040, + 0.989456043494307710, -0.144833483672080210, 0.989428253832068230, + -0.145023206828508220, + 0.989400427791380380, -0.145212924652847460, 0.989372565373267010, + -0.145402637138122570, + 0.989344666578752640, -0.145592344277358340, 0.989316731408863000, + -0.145782046063579860, + 0.989288759864625170, -0.145971742489812210, 0.989260751947067640, + -0.146161433549080900, + 0.989232707657220050, -0.146351119234411460, 0.989204626996113780, + -0.146540799538829760, + 0.989176509964781010, -0.146730474455361750, 0.989148356564255590, + -0.146920143977033620, + 0.989120166795572690, -0.147109808096871820, 0.989091940659768800, + -0.147299466807902850, + 0.989063678157881540, -0.147489120103153570, 0.989035379290950310, + -0.147678767975650970, + 0.989007044060015270, -0.147868410418422220, 0.988978672466118480, + -0.148058047424494720, + 0.988950264510302990, -0.148247678986896030, 0.988921820193613190, + -0.148437305098653970, + 0.988893339517095130, -0.148626925752796540, 0.988864822481795640, + -0.148816540942351920, + 0.988836269088763540, -0.149006150660348450, 0.988807679339048450, + -0.149195754899814820, + 0.988779053233701520, -0.149385353653779720, 0.988750390773775360, + -0.149574946915272230, + 0.988721691960323780, -0.149764534677321510, 0.988692956794401940, + -0.149954116932956960, + 0.988664185277066230, -0.150143693675208190, 0.988635377409374790, + -0.150333264897105000, + 0.988606533192386450, -0.150522830591677400, 0.988577652627162020, + -0.150712390751955610, + 0.988548735714763200, -0.150901945370970040, 0.988519782456253270, + -0.151091494441751300, + 0.988490792852696590, -0.151281037957330220, 0.988461766905159300, + -0.151470575910737810, + 0.988432704614708340, -0.151660108295005310, 0.988403605982412390, + -0.151849635103164180, + 0.988374471009341280, -0.152039156328246050, 0.988345299696566150, + -0.152228671963282740, + 0.988316092045159690, -0.152418182001306330, 0.988286848056195820, + -0.152607686435349050, + 0.988257567730749460, -0.152797185258443440, 0.988228251069897420, + -0.152986678463622040, + 0.988198898074717610, -0.153176166043917840, 0.988169508746289060, + -0.153365647992363880, + 0.988140083085692570, -0.153555124301993450, 0.988110621094009820, + -0.153744594965840030, + 0.988081122772324070, -0.153934059976937350, 0.988051588121720110, + -0.154123519328319360, + 0.988022017143283530, -0.154312973013020100, 0.987992409838101880, + -0.154502421024073940, + 0.987962766207263420, -0.154691863354515430, 0.987933086251858380, + -0.154881299997379320, + 0.987903369972977790, -0.155070730945700510, 0.987873617371714200, + -0.155260156192514240, + 0.987843828449161740, -0.155449575730855850, 0.987814003206415550, + -0.155638989553760900, + 0.987784141644572180, -0.155828397654265230, 0.987754243764729530, + -0.156017800025404800, + 0.987724309567986960, -0.156207196660215900, 0.987694339055445130, + -0.156396587551734880, + 0.987664332228205710, -0.156585972692998430, 0.987634289087372160, + -0.156775352077043350, + 0.987604209634049160, -0.156964725696906780, 0.987574093869342360, + -0.157154093545625900, + 0.987543941794359230, -0.157343455616238250, 0.987513753410208420, + -0.157532811901781530, + 0.987483528717999710, -0.157722162395293630, 0.987453267718844560, + -0.157911507089812660, + 0.987422970413855410, -0.158100845978376980, 0.987392636804146240, + -0.158290179054025180, + 0.987362266890832400, -0.158479506309795960, 0.987331860675030430, + -0.158668827738728310, + 0.987301418157858430, -0.158858143333861450, 0.987270939340435420, + -0.159047453088234760, + 0.987240424223882250, -0.159236756994887850, 0.987209872809320820, + -0.159426055046860580, + 0.987179285097874340, -0.159615347237193060, 0.987148661090667570, + -0.159804633558925440, + 0.987118000788826280, -0.159993914005098270, 0.987087304193477900, + -0.160183188568752220, + 0.987056571305750970, -0.160372457242928280, 0.987025802126775600, + -0.160561720020667490, + 0.986994996657682980, -0.160750976895011220, 0.986964154899605650, + -0.160940227859001080, + 0.986933276853677710, -0.161129472905678810, 0.986902362521034470, + -0.161318712028086400, + 0.986871411902812470, -0.161507945219266120, 0.986840425000149680, + -0.161697172472260400, + 0.986809401814185530, -0.161886393780111830, 0.986778342346060430, + -0.162075609135863330, + 0.986747246596916590, -0.162264818532558000, 0.986716114567897100, + -0.162454021963239190, + 0.986684946260146690, -0.162643219420950310, 0.986653741674811350, + -0.162832410898735210, + 0.986622500813038480, -0.163021596389637840, 0.986591223675976400, + -0.163210775886702380, + 0.986559910264775410, -0.163399949382973230, 0.986528560580586690, + -0.163589116871495020, + 0.986497174624562880, -0.163778278345312670, 0.986465752397857940, + -0.163967433797471170, + 0.986434293901627180, -0.164156583221015810, 0.986402799137027220, + -0.164345726608992190, + 0.986371268105216030, -0.164534863954446000, 0.986339700807353000, + -0.164723995250423170, + 0.986308097244598670, -0.164913120489969890, 0.986276457418115090, + -0.165102239666132660, + 0.986244781329065460, -0.165291352771958000, 0.986213068978614490, + -0.165480459800492780, + 0.986181320367928270, -0.165669560744784120, 0.986149535498173860, + -0.165858655597879300, + 0.986117714370520090, -0.166047744352825790, 0.986085856986136820, + -0.166236827002671420, + 0.986053963346195440, -0.166425903540464100, 0.986022033451868560, + -0.166614973959252090, + 0.985990067304330140, -0.166804038252083730, 0.985958064904755460, + -0.166993096412007710, + 0.985926026254321130, -0.167182148432072940, 0.985893951354205210, + -0.167371194305328430, + 0.985861840205586980, -0.167560234024823560, 0.985829692809647050, + -0.167749267583607890, + 0.985797509167567480, -0.167938294974731170, 0.985765289280531310, + -0.168127316191243410, + 0.985733033149723490, -0.168316331226194830, 0.985700740776329850, + -0.168505340072635900, + 0.985668412161537550, -0.168694342723617330, 0.985636047306535420, + -0.168883339172189980, + 0.985603646212513400, -0.169072329411405010, 0.985571208880662740, + -0.169261313434313830, + 0.985538735312176060, -0.169450291233967960, 0.985506225508247290, + -0.169639262803419290, + 0.985473679470071810, -0.169828228135719850, 0.985441097198846210, + -0.170017187223921950, + 0.985408478695768420, -0.170206140061078070, 0.985375823962037710, + -0.170395086640240940, + 0.985343132998854790, -0.170584026954463590, 0.985310405807421570, + -0.170772960996799230, + 0.985277642388941220, -0.170961888760301220, 0.985244842744618540, + -0.171150810238023280, + 0.985212006875659350, -0.171339725423019310, 0.985179134783271130, + -0.171528634308343420, + 0.985146226468662230, -0.171717536887049970, 0.985113281933042710, + -0.171906433152193530, + 0.985080301177623800, -0.172095323096829010, 0.985047284203618200, + -0.172284206714011370, + 0.985014231012239840, -0.172473083996795950, 0.984981141604703960, + -0.172661954938238270, + 0.984948015982227030, -0.172850819531394080, 0.984914854146027200, + -0.173039677769319360, + 0.984881656097323700, -0.173228529645070320, 0.984848421837337010, + -0.173417375151703470, + 0.984815151367289140, -0.173606214282275410, 0.984781844688403350, + -0.173795047029843160, + 0.984748501801904210, -0.173983873387463820, 0.984715122709017620, + -0.174172693348194820, + 0.984681707410970940, -0.174361506905093750, 0.984648255908992630, + -0.174550314051218510, + 0.984614768204312600, -0.174739114779627200, 0.984581244298162180, + -0.174927909083378160, + 0.984547684191773960, -0.175116696955529920, 0.984514087886381840, + -0.175305478389141320, + 0.984480455383220930, -0.175494253377271430, 0.984446786683527920, + -0.175683021912979490, + 0.984413081788540700, -0.175871783989325040, 0.984379340699498510, + -0.176060539599367820, + 0.984345563417641900, -0.176249288736167880, 0.984311749944212780, + -0.176438031392785410, + 0.984277900280454370, -0.176626767562280880, 0.984244014427611110, + -0.176815497237715000, + 0.984210092386929030, -0.177004220412148750, 0.984176134159655320, + -0.177192937078643280, + 0.984142139747038570, -0.177381647230260040, 0.984108109150328540, + -0.177570350860060710, + 0.984074042370776450, -0.177759047961107170, 0.984039939409634970, + -0.177947738526461560, + 0.984005800268157870, -0.178136422549186300, 0.983971624947600270, + -0.178325100022344000, + 0.983937413449218920, -0.178513770938997510, 0.983903165774271500, + -0.178702435292209970, + 0.983868881924017220, -0.178891093075044720, 0.983834561899716630, + -0.179079744280565390, + 0.983800205702631600, -0.179268388901835750, 0.983765813334025240, + -0.179457026931919890, + 0.983731384795162090, -0.179645658363882160, 0.983696920087308140, + -0.179834283190787090, + 0.983662419211730250, -0.180022901405699510, 0.983627882169697210, + -0.180211513001684450, + 0.983593308962478650, -0.180400117971807240, 0.983558699591345900, + -0.180588716309133340, + 0.983524054057571260, -0.180777308006728590, 0.983489372362428730, + -0.180965893057658980, + 0.983454654507193270, -0.181154471454990810, 0.983419900493141540, + -0.181343043191790540, + 0.983385110321551180, -0.181531608261124970, 0.983350283993701500, + -0.181720166656061110, + 0.983315421510872810, -0.181908718369666160, 0.983280522874346970, + -0.182097263395007650, + 0.983245588085407070, -0.182285801725153300, 0.983210617145337640, + -0.182474333353171120, + 0.983175610055424420, -0.182662858272129270, 0.983140566816954500, + -0.182851376475096330, + 0.983105487431216290, -0.183039887955140950, 0.983070371899499640, + -0.183228392705332140, + 0.983035220223095640, -0.183416890718739100, 0.983000032403296590, + -0.183605381988431270, + 0.982964808441396440, -0.183793866507478450, 0.982929548338690170, + -0.183982344268950520, + 0.982894252096474070, -0.184170815265917720, 0.982858919716046110, + -0.184359279491450510, + 0.982823551198705240, -0.184547736938619620, 0.982788146545751970, + -0.184736187600495950, + 0.982752705758487830, -0.184924631470150790, 0.982717228838215990, + -0.185113068540655540, + 0.982681715786240860, -0.185301498805081900, 0.982646166603868050, + -0.185489922256501880, + 0.982610581292404750, -0.185678338887987630, 0.982574959853159240, + -0.185866748692611660, + 0.982539302287441240, -0.186055151663446630, 0.982503608596561830, + -0.186243547793565560, + 0.982467878781833170, -0.186431937076041610, 0.982432112844569110, + -0.186620319503948280, + 0.982396310786084690, -0.186808695070359270, 0.982360472607696210, + -0.186997063768348540, + 0.982324598310721280, -0.187185425590990330, 0.982288687896478830, + -0.187373780531359110, + 0.982252741366289370, -0.187562128582529600, 0.982216758721474510, + -0.187750469737576780, + 0.982180739963357090, -0.187938803989575910, 0.982144685093261580, + -0.188127131331602420, + 0.982108594112513610, -0.188315451756732120, 0.982072467022440000, + -0.188503765258040940, + 0.982036303824369020, -0.188692071828605230, 0.982000104519630490, + -0.188880371461501380, + 0.981963869109555240, -0.189068664149806190, 0.981927597595475540, + -0.189256949886596750, + 0.981891289978725100, -0.189445228664950230, 0.981854946260638630, + -0.189633500477944190, + 0.981818566442552500, -0.189821765318656410, 0.981782150525804310, + -0.190010023180164990, + 0.981745698511732990, -0.190198274055548150, 0.981709210401678800, + -0.190386517937884470, + 0.981672686196983110, -0.190574754820252740, 0.981636125898989080, + -0.190762984695732110, + 0.981599529509040720, -0.190951207557401800, 0.981562897028483650, + -0.191139423398341450, + 0.981526228458664770, -0.191327632211630900, 0.981489523800932130, + -0.191515833990350210, + 0.981452783056635520, -0.191704028727579800, 0.981416006227125550, + -0.191892216416400220, + 0.981379193313754560, -0.192080397049892440, 0.981342344317876040, + -0.192268570621137500, + 0.981305459240844670, -0.192456737123216840, 0.981268538084016710, + -0.192644896549212100, + 0.981231580848749730, -0.192833048892205230, 0.981194587536402320, + -0.193021194145278380, + 0.981157558148334830, -0.193209332301513960, 0.981120492685908730, + -0.193397463353994740, + 0.981083391150486710, -0.193585587295803610, 0.981046253543432780, + -0.193773704120023820, + 0.981009079866112630, -0.193961813819738840, 0.980971870119892840, + -0.194149916388032450, + 0.980934624306141640, -0.194338011817988600, 0.980897342426228390, + -0.194526100102691610, + 0.980860024481523870, -0.194714181235225960, 0.980822670473400100, + -0.194902255208676520, + 0.980785280403230430, -0.195090322016128250, 0.980747854272389750, + -0.195278381650666550, + 0.980710392082253970, -0.195466434105376980, 0.980672893834200530, + -0.195654479373345370, + 0.980635359529608120, -0.195842517447657850, 0.980597789169856850, + -0.196030548321400790, + 0.980560182756327840, -0.196218571987660880, 0.980522540290404090, + -0.196406588439524970, + 0.980484861773469380, -0.196594597670080220, 0.980447147206909060, + -0.196782599672414100, + 0.980409396592109910, -0.196970594439614340, 0.980371609930459800, + -0.197158581964768880, + 0.980333787223347960, -0.197346562240965920, 0.980295928472165290, + -0.197534535261294030, + 0.980258033678303550, -0.197722501018841920, 0.980220102843156080, + -0.197910459506698670, + 0.980182135968117430, -0.198098410717953560, 0.980144133054583590, + -0.198286354645696220, + 0.980106094103951770, -0.198474291283016390, 0.980068019117620650, + -0.198662220623004200, + 0.980029908096990090, -0.198850142658750090, 0.979991761043461200, + -0.199038057383344680, + 0.979953577958436740, -0.199225964789878830, 0.979915358843320480, + -0.199413864871443770, + 0.979877103699517640, -0.199601757621130970, 0.979838812528434740, + -0.199789643032032090, + 0.979800485331479790, -0.199977521097239150, 0.979762122110061750, + -0.200165391809844440, + 0.979723722865591170, -0.200353255162940450, 0.979685287599479930, + -0.200541111149619980, + 0.979646816313141210, -0.200728959762976140, 0.979608309007989450, + -0.200916800996102230, + 0.979569765685440520, -0.201104634842091900, 0.979531186346911500, + -0.201292461294039020, + 0.979492570993820810, -0.201480280345037730, 0.979453919627588210, + -0.201668091988182530, + 0.979415232249634780, -0.201855896216568050, 0.979376508861383170, + -0.202043693023289260, + 0.979337749464256780, -0.202231482401441450, 0.979298954059681040, + -0.202419264344120160, + 0.979260122649082020, -0.202607038844421130, 0.979221255233887700, + -0.202794805895440440, + 0.979182351815526930, -0.202982565490274440, 0.979143412395430230, + -0.203170317622019790, + 0.979104436975029250, -0.203358062283773320, 0.979065425555756930, + -0.203545799468632190, + 0.979026378139047580, -0.203733529169693920, 0.978987294726337050, + -0.203921251380056120, + 0.978948175319062200, -0.204108966092816870, 0.978909019918661310, + -0.204296673301074370, + 0.978869828526574120, -0.204484372997927240, 0.978830601144241470, + -0.204672065176474210, + 0.978791337773105670, -0.204859749829814420, 0.978752038414610340, + -0.205047426951047250, + 0.978712703070200420, -0.205235096533272350, 0.978673331741322210, + -0.205422758569589610, + 0.978633924429423210, -0.205610413053099240, 0.978594481135952270, + -0.205798059976901790, + 0.978555001862359550, -0.205985699334097910, 0.978515486610096910, + -0.206173331117788710, + 0.978475935380616830, -0.206360955321075510, 0.978436348175373730, + -0.206548571937059890, + 0.978396724995823090, -0.206736180958843690, 0.978357065843421640, + -0.206923782379529100, + 0.978317370719627650, -0.207111376192218560, 0.978277639625900530, + -0.207298962390014750, + 0.978237872563701090, -0.207486540966020650, 0.978198069534491400, + -0.207674111913339570, + 0.978158230539735050, -0.207861675225075070, 0.978118355580896660, + -0.208049230894330940, + 0.978078444659442380, -0.208236778914211330, 0.978038497776839600, + -0.208424319277820600, + 0.977998514934557140, -0.208611851978263490, 0.977958496134064830, + -0.208799377008644900, + 0.977918441376834370, -0.208986894362070070, 0.977878350664338150, + -0.209174404031644580, + 0.977838223998050430, -0.209361906010474160, 0.977798061379446360, + -0.209549400291664940, + 0.977757862810002760, -0.209736886868323290, 0.977717628291197460, + -0.209924365733555880, + 0.977677357824509930, -0.210111836880469610, 0.977637051411420770, + -0.210299300302171730, + 0.977596709053411890, -0.210486755991769720, 0.977556330751966460, + -0.210674203942371440, + 0.977515916508569280, -0.210861644147084860, 0.977475466324706170, + -0.211049076599018390, + 0.977434980201864260, -0.211236501291280710, 0.977394458141532250, + -0.211423918216980670, + 0.977353900145199960, -0.211611327369227550, 0.977313306214358750, + -0.211798728741130840, + 0.977272676350500860, -0.211986122325800330, 0.977232010555120320, + -0.212173508116346080, + 0.977191308829712280, -0.212360886105878420, 0.977150571175773200, + -0.212548256287508060, + 0.977109797594800880, -0.212735618654345930, 0.977068988088294450, + -0.212922973199503180, + 0.977028142657754390, -0.213110319916091360, 0.976987261304682390, + -0.213297658797222320, + 0.976946344030581670, -0.213484989836008050, 0.976905390836956490, + -0.213672313025560970, + 0.976864401725312640, -0.213859628358993750, 0.976823376697157240, + -0.214046935829419360, + 0.976782315753998650, -0.214234235429950990, 0.976741218897346550, + -0.214421527153702160, + 0.976700086128711840, -0.214608810993786760, 0.976658917449606980, + -0.214796086943318860, + 0.976617712861545640, -0.214983354995412820, 0.976576472366042610, + -0.215170615143183390, + 0.976535195964614470, -0.215357867379745550, 0.976493883658778650, + -0.215545111698214500, + 0.976452535450054060, -0.215732348091705880, 0.976411151339961040, + -0.215919576553335490, + 0.976369731330021140, -0.216106797076219520, 0.976328275421757260, + -0.216294009653474340, + 0.976286783616693630, -0.216481214278216730, 0.976245255916355800, + -0.216668410943563730, + 0.976203692322270560, -0.216855599642632620, 0.976162092835966110, + -0.217042780368540990, + 0.976120457458971910, -0.217229953114406790, 0.976078786192818850, + -0.217417117873348190, + 0.976037079039039020, -0.217604274638483640, 0.975995335999165990, + -0.217791423402931950, + 0.975953557074734300, -0.217978564159812200, 0.975911742267280170, + -0.218165696902243800, + 0.975869891578341030, -0.218352821623346320, 0.975828005009455660, + -0.218539938316239770, + 0.975786082562163930, -0.218727046974044440, 0.975744124238007270, + -0.218914147589880840, + 0.975702130038528570, -0.219101240156869800, 0.975660099965271590, + -0.219288324668132470, + 0.975618034019781750, -0.219475401116790310, 0.975575932203605720, + -0.219662469495965050, + 0.975533794518291360, -0.219849529798778700, 0.975491620965388110, + -0.220036582018353580, + 0.975449411546446380, -0.220223626147812380, 0.975407166263018270, + -0.220410662180277940, + 0.975364885116656980, -0.220597690108873510, 0.975322568108916930, + -0.220784709926722610, + 0.975280215241354220, -0.220971721626949110, 0.975237826515525820, + -0.221158725202677010, + 0.975195401932990370, -0.221345720647030810, 0.975152941495307620, + -0.221532707953135230, + 0.975110445204038890, -0.221719687114115220, 0.975067913060746470, + -0.221906658123096100, + 0.975025345066994120, -0.222093620973203510, 0.974982741224347140, + -0.222280575657563370, + 0.974940101534371830, -0.222467522169301880, 0.974897425998635820, + -0.222654460501545500, + 0.974854714618708430, -0.222841390647421120, 0.974811967396159830, + -0.223028312600055820, + 0.974769184332561770, -0.223215226352576980, 0.974726365429487320, + -0.223402131898112370, + 0.974683510688510670, -0.223589029229789990, 0.974640620111207560, + -0.223775918340738150, + 0.974597693699155050, -0.223962799224085460, 0.974554731453931230, + -0.224149671872960870, + 0.974511733377115720, -0.224336536280493600, 0.974468699470289580, + -0.224523392439813170, + 0.974425629735034990, -0.224710240344049430, 0.974382524172935470, + -0.224897079986332490, + 0.974339382785575860, -0.225083911359792830, 0.974296205574542440, + -0.225270734457561160, + 0.974252992541422500, -0.225457549272768540, 0.974209743687805220, + -0.225644355798546330, + 0.974166459015280320, -0.225831154028026170, 0.974123138525439640, + -0.226017943954340020, + 0.974079782219875680, -0.226204725570620190, 0.974036390100182610, + -0.226391498869999240, + 0.973992962167955830, -0.226578263845610000, 0.973949498424792170, + -0.226765020490585690, + 0.973905998872289570, -0.226951768798059810, 0.973862463512047300, + -0.227138508761166170, + 0.973818892345666100, -0.227325240373038860, 0.973775285374748110, + -0.227511963626812280, + 0.973731642600896400, -0.227698678515621170, 0.973687964025715670, + -0.227885385032600530, + 0.973644249650811980, -0.228072083170885730, 0.973600499477792370, + -0.228258772923612380, + 0.973556713508265560, -0.228445454283916470, 0.973512891743841370, + -0.228632127244934230, + 0.973469034186131070, -0.228818791799802220, 0.973425140836747030, + -0.229005447941657340, + 0.973381211697303290, -0.229192095663636770, 0.973337246769414910, + -0.229378734958878010, + 0.973293246054698250, -0.229565365820518870, 0.973249209554771230, + -0.229751988241697490, + 0.973205137271252800, -0.229938602215552210, 0.973161029205763530, + -0.230125207735221850, + 0.973116885359925130, -0.230311804793845440, 0.973072705735360530, + -0.230498393384562350, + 0.973028490333694210, -0.230684973500512200, 0.972984239156551740, + -0.230871545134835020, + 0.972939952205560180, -0.231058108280671110, 0.972895629482347760, + -0.231244662931161050, + 0.972851270988544180, -0.231431209079445750, 0.972806876725780370, + -0.231617746718666470, + 0.972762446695688570, -0.231804275841964780, 0.972717980899902250, + -0.231990796442482440, + 0.972673479340056430, -0.232177308513361710, 0.972628942017787270, + -0.232363812047745030, + 0.972584368934732210, -0.232550307038775240, 0.972539760092530180, + -0.232736793479595390, + 0.972495115492821190, -0.232923271363348980, 0.972450435137246830, + -0.233109740683179690, + 0.972405719027449770, -0.233296201432231590, 0.972360967165074140, + -0.233482653603649090, + 0.972316179551765300, -0.233669097190576820, 0.972271356189170040, + -0.233855532186159840, + 0.972226497078936270, -0.234041958583543430, 0.972181602222713440, + -0.234228376375873210, + 0.972136671622152230, -0.234414785556295160, 0.972091705278904430, + -0.234601186117955550, + 0.972046703194623500, -0.234787578054000970, 0.972001665370963890, + -0.234973961357578250, + 0.971956591809581720, -0.235160336021834730, 0.971911482512134000, + -0.235346702039917840, + 0.971866337480279400, -0.235533059404975490, 0.971821156715677700, + -0.235719408110155820, + 0.971775940219990140, -0.235905748148607370, 0.971730687994879160, + -0.236092079513478910, + 0.971685400042008540, -0.236278402197919570, 0.971640076363043390, + -0.236464716195078780, + 0.971594716959650160, -0.236651021498106380, 0.971549321833496630, + -0.236837318100152380, + 0.971503890986251780, -0.237023605994367200, 0.971458424419585960, + -0.237209885173901600, + 0.971412922135170940, -0.237396155631906610, 0.971367384134679490, + -0.237582417361533570, + 0.971321810419786160, -0.237768670355934190, 0.971276200992166490, + -0.237954914608260540, + 0.971230555853497380, -0.238141150111664840, 0.971184875005457030, + -0.238327376859299810, + 0.971139158449725090, -0.238513594844318420, 0.971093406187982460, + -0.238699804059873980, + 0.971047618221911100, -0.238886004499120040, 0.971001794553194690, + -0.239072196155210610, + 0.970955935183517970, -0.239258379021299980, 0.970910040114567050, + -0.239444553090542630, + 0.970864109348029470, -0.239630718356093560, 0.970818142885593870, + -0.239816874811108000, + 0.970772140728950350, -0.240003022448741500, 0.970726102879790110, + -0.240189161262149900, + 0.970680029339806130, -0.240375291244489450, 0.970633920110692160, + -0.240561412388916650, + 0.970587775194143630, -0.240747524688588430, 0.970541594591857070, + -0.240933628136661910, + 0.970495378305530560, -0.241119722726294590, 0.970449126336863090, + -0.241305808450644370, + 0.970402838687555500, -0.241491885302869330, 0.970356515359309450, + -0.241677953276128010, + 0.970310156353828110, -0.241864012363579180, 0.970263761672816140, + -0.242050062558382070, + 0.970217331317979160, -0.242236103853696010, 0.970170865291024480, + -0.242422136242680890, + 0.970124363593660280, -0.242608159718496810, 0.970077826227596420, + -0.242794174274304220, + 0.970031253194543970, -0.242980179903263870, 0.969984644496215240, + -0.243166176598536900, + 0.969938000134323960, -0.243352164353284740, 0.969891320110585100, + -0.243538143160669130, + 0.969844604426714830, -0.243724113013852160, 0.969797853084430890, + -0.243910073905996260, + 0.969751066085452140, -0.244096025830264210, 0.969704243431498860, + -0.244281968779819030, + 0.969657385124292450, -0.244467902747824150, 0.969610491165555870, + -0.244653827727443320, + 0.969563561557013180, -0.244839743711840670, 0.969516596300390000, + -0.245025650694180470, + 0.969469595397413060, -0.245211548667627540, 0.969422558849810320, + -0.245397437625346960, + 0.969375486659311280, -0.245583317560504060, 0.969328378827646660, + -0.245769188466264580, + 0.969281235356548530, -0.245955050335794590, 0.969234056247750050, + -0.246140903162260530, + 0.969186841502985950, -0.246326746938829030, 0.969139591123992280, + -0.246512581658667210, + 0.969092305112506210, -0.246698407314942410, 0.969044983470266240, + -0.246884223900822430, + 0.968997626199012420, -0.247070031409475250, 0.968950233300485800, + -0.247255829834069300, + 0.968902804776428870, -0.247441619167773270, 0.968855340628585580, + -0.247627399403756280, + 0.968807840858700970, -0.247813170535187670, 0.968760305468521430, + -0.247998932555237110, + 0.968712734459794780, -0.248184685457074780, 0.968665127834270060, + -0.248370429233870980, + 0.968617485593697540, -0.248556163878796560, 0.968569807739828930, + -0.248741889385022480, + 0.968522094274417380, -0.248927605745720150, 0.968474345199216820, + -0.249113312954061360, + 0.968426560515983190, -0.249299011003218190, 0.968378740226473300, + -0.249484699886362960, + 0.968330884332445190, -0.249670379596668550, 0.968282992835658660, + -0.249856050127307990, + 0.968235065737874320, -0.250041711471454650, 0.968187103040854420, + -0.250227363622282370, + 0.968139104746362440, -0.250413006572965220, 0.968091070856162970, + -0.250598640316677670, + 0.968043001372022260, -0.250784264846594500, 0.967994896295707670, + -0.250969880155890720, + 0.967946755628987800, -0.251155486237741920, 0.967898579373632660, + -0.251341083085323880, + 0.967850367531413620, -0.251526670691812610, 0.967802120104103270, + -0.251712249050384700, + 0.967753837093475510, -0.251897818154216970, 0.967705518501305480, + -0.252083377996486450, + 0.967657164329369880, -0.252268928570370810, 0.967608774579446500, + -0.252454469869047740, + 0.967560349253314360, -0.252640001885695520, 0.967511888352754150, + -0.252825524613492610, + 0.967463391879547550, -0.253011038045617860, 0.967414859835477480, + -0.253196542175250560, + 0.967366292222328510, -0.253382036995570160, 0.967317689041886310, + -0.253567522499756560, + 0.967269050295937790, -0.253752998680989990, 0.967220375986271420, + -0.253938465532451090, + 0.967171666114676640, -0.254123923047320620, 0.967122920682944360, + -0.254309371218780000, + 0.967074139692867040, -0.254494810040010730, 0.967025323146238010, + -0.254680239504194830, + 0.966976471044852070, -0.254865659604514570, 0.966927583390505660, + -0.255051070334152470, + 0.966878660184995910, -0.255236471686291710, 0.966829701430121810, + -0.255421863654115460, + 0.966780707127683270, -0.255607246230807380, 0.966731677279481840, + -0.255792619409551610, + 0.966682611887320080, -0.255977983183532430, 0.966633510953002100, + -0.256163337545934460, + 0.966584374478333120, -0.256348682489942910, 0.966535202465119700, + -0.256534018008743040, + 0.966485994915169840, -0.256719344095520660, 0.966436751830292650, + -0.256904660743461910, + 0.966387473212298900, -0.257089967945753120, 0.966338159063000130, + -0.257275265695581120, + 0.966288809384209690, -0.257460553986133100, 0.966239424177741890, + -0.257645832810596390, + 0.966190003445412500, -0.257831102162158990, 0.966140547189038750, + -0.258016362034009020, + 0.966091055410438830, -0.258201612419334870, 0.966041528111432400, + -0.258386853311325600, + 0.965991965293840570, -0.258572084703170340, 0.965942366959485540, + -0.258757306588058680, + 0.965892733110190860, -0.258942518959180520, 0.965843063747781510, + -0.259127721809726150, + 0.965793358874083680, -0.259312915132886230, 0.965743618490924830, + -0.259498098921851660, + 0.965693842600133690, -0.259683273169813770, 0.965644031203540590, + -0.259868437869964270, + 0.965594184302976830, -0.260053593015495190, 0.965544301900275180, + -0.260238738599598840, + 0.965494383997269500, -0.260423874615468010, 0.965444430595795430, + -0.260609001056295750, + 0.965394441697689400, -0.260794117915275510, 0.965344417304789370, + -0.260979225185601070, + 0.965294357418934660, -0.261164322860466480, 0.965244262041965780, + -0.261349410933066350, + 0.965194131175724720, -0.261534489396595520, 0.965143964822054450, + -0.261719558244249030, + 0.965093762982799590, -0.261904617469222610, 0.965043525659805890, + -0.262089667064712040, + 0.964993252854920320, -0.262274707023913590, 0.964942944569991410, + -0.262459737340023980, + 0.964892600806868890, -0.262644758006240040, 0.964842221567403620, + -0.262829769015759160, + 0.964791806853447900, -0.263014770361779000, 0.964741356666855340, + -0.263199762037497560, + 0.964690871009481030, -0.263384744036113280, 0.964640349883180930, + -0.263569716350824880, + 0.964589793289812760, -0.263754678974831350, 0.964539201231235150, + -0.263939631901332350, + 0.964488573709308410, -0.264124575123527550, 0.964437910725893910, + -0.264309508634617110, + 0.964387212282854290, -0.264494432427801630, 0.964336478382053720, + -0.264679346496281890, + 0.964285709025357480, -0.264864250833259260, 0.964234904214632200, + -0.265049145431935250, + 0.964184063951745830, -0.265234030285511790, 0.964133188238567640, + -0.265418905387191260, + 0.964082277076968140, -0.265603770730176330, 0.964031330468819280, + -0.265788626307669920, + 0.963980348415994110, -0.265973472112875590, 0.963929330920367140, + -0.266158308138996990, + 0.963878277983814200, -0.266343134379238180, 0.963827189608212340, + -0.266527950826803690, + 0.963776065795439840, -0.266712757474898370, 0.963724906547376530, + -0.266897554316727350, + 0.963673711865903230, -0.267082341345496300, 0.963622481752902220, + -0.267267118554410930, + 0.963571216210257320, -0.267451885936677620, 0.963519915239853140, + -0.267636643485503090, + 0.963468578843575950, -0.267821391194094150, 0.963417207023313350, + -0.268006129055658290, + 0.963365799780954050, -0.268190857063403180, 0.963314357118388200, + -0.268375575210536900, + 0.963262879037507070, -0.268560283490267890, 0.963211365540203480, + -0.268744981895804980, + 0.963159816628371360, -0.268929670420357260, 0.963108232303906190, + -0.269114349057134380, + 0.963056612568704340, -0.269299017799346120, 0.963004957424663850, + -0.269483676640202840, + 0.962953266873683880, -0.269668325572915090, 0.962901540917665000, + -0.269852964590693860, + 0.962849779558509030, -0.270037593686750570, 0.962797982798119010, + -0.270222212854296870, + 0.962746150638399410, -0.270406822086544820, 0.962694283081255930, + -0.270591421376706940, + 0.962642380128595710, -0.270776010717996010, 0.962590441782326890, + -0.270960590103625170, + 0.962538468044359160, -0.271145159526808010, 0.962486458916603450, + -0.271329718980758420, + 0.962434414400972100, -0.271514268458690700, 0.962382334499378380, + -0.271698807953819510, + 0.962330219213737400, -0.271883337459359720, 0.962278068545965090, + -0.272067856968526920, + 0.962225882497979020, -0.272252366474536710, 0.962173661071697880, + -0.272436865970605240, + 0.962121404269041580, -0.272621355449948980, 0.962069112091931580, + -0.272805834905784810, + 0.962016784542290560, -0.272990304331329920, 0.961964421622042320, + -0.273174763719801930, + 0.961912023333112210, -0.273359213064418680, 0.961859589677426570, + -0.273543652358398730, + 0.961807120656913540, -0.273728081594960540, 0.961754616273502010, + -0.273912500767323260, + 0.961702076529122540, -0.274096909868706380, 0.961649501425706820, + -0.274281308892329660, + 0.961596890965187860, -0.274465697831413220, 0.961544245149499990, + -0.274650076679177680, + 0.961491563980579000, -0.274834445428843940, 0.961438847460361680, + -0.275018804073633220, + 0.961386095590786250, -0.275203152606767310, 0.961333308373792270, + -0.275387491021468140, + 0.961280485811320640, -0.275571819310958140, 0.961227627905313460, + -0.275756137468460120, + 0.961174734657714080, -0.275940445487197150, 0.961121806070467380, + -0.276124743360392830, + 0.961068842145519350, -0.276309031081271080, 0.961015842884817230, + -0.276493308643055990, + 0.960962808290309780, -0.276677576038972420, 0.960909738363946770, + -0.276861833262245280, + 0.960856633107679660, -0.277046080306099900, 0.960803492523460760, + -0.277230317163762170, + 0.960750316613243950, -0.277414543828458090, 0.960697105378984450, + -0.277598760293414290, + 0.960643858822638590, -0.277782966551857690, 0.960590576946164120, + -0.277967162597015370, + 0.960537259751520050, -0.278151348422115090, 0.960483907240666790, + -0.278335524020384920, + 0.960430519415565790, -0.278519689385053060, 0.960377096278180130, + -0.278703844509348490, + 0.960323637830473920, -0.278887989386500280, 0.960270144074412800, + -0.279072124009737800, + 0.960216615011963430, -0.279256248372291180, 0.960163050645094000, + -0.279440362467390510, + 0.960109450975773940, -0.279624466288266590, 0.960055816005973890, + -0.279808559828150390, + 0.960002145737665960, -0.279992643080273220, 0.959948440172823210, + -0.280176716037866980, + 0.959894699313420530, -0.280360778694163810, 0.959840923161433770, + -0.280544831042396250, + 0.959787111718839900, -0.280728873075797190, 0.959733264987617680, + -0.280912904787600000, + 0.959679382969746750, -0.281096926171038260, 0.959625465667208190, + -0.281280937219346110, + 0.959571513081984520, -0.281464937925757940, 0.959517525216059260, + -0.281648928283508630, + 0.959463502071417510, -0.281832908285833350, 0.959409443650045550, + -0.282016877925967640, + 0.959355349953930790, -0.282200837197147560, 0.959301220985062210, + -0.282384786092609360, + 0.959247056745430090, -0.282568724605589740, 0.959192857237025740, + -0.282752652729325930, + 0.959138622461841890, -0.282936570457055390, 0.959084352421872730, + -0.283120477782015820, + 0.959030047119113660, -0.283304374697445740, 0.958975706555561080, + -0.283488261196583550, + 0.958921330733213170, -0.283672137272668430, 0.958866919654069010, + -0.283856002918939750, + 0.958812473320129310, -0.284039858128637190, 0.958757991733395710, + -0.284223702895001040, + 0.958703474895871600, -0.284407537211271880, 0.958648922809561150, + -0.284591361070690440, + 0.958594335476470220, -0.284775174466498300, 0.958539712898605730, + -0.284958977391937040, + 0.958485055077976100, -0.285142769840248670, 0.958430362016590930, + -0.285326551804675870, + 0.958375633716461170, -0.285510323278461260, 0.958320870179598880, + -0.285694084254848320, + 0.958266071408017670, -0.285877834727080620, 0.958211237403732260, + -0.286061574688402040, + 0.958156368168758820, -0.286245304132057120, 0.958101463705114730, + -0.286429023051290700, + 0.958046524014818600, -0.286612731439347790, 0.957991549099890370, + -0.286796429289474080, + 0.957936538962351420, -0.286980116594915570, 0.957881493604224370, + -0.287163793348918390, + 0.957826413027532910, -0.287347459544729510, 0.957771297234302320, + -0.287531115175595930, + 0.957716146226558870, -0.287714760234765170, 0.957660960006330610, + -0.287898394715485170, + 0.957605738575646350, -0.288082018611004130, 0.957550481936536470, + -0.288265631914570770, + 0.957495190091032570, -0.288449234619434220, 0.957439863041167680, + -0.288632826718843830, + 0.957384500788975860, -0.288816408206049480, 0.957329103336492790, + -0.288999979074301420, + 0.957273670685755200, -0.289183539316850200, 0.957218202838801210, + -0.289367088926947010, + 0.957162699797670210, -0.289550627897843030, 0.957107161564402790, + -0.289734156222790250, + 0.957051588141040970, -0.289917673895040750, 0.956995979529628230, + -0.290101180907847090, + 0.956940335732208820, -0.290284677254462330, 0.956884656750828900, + -0.290468162928139820, + 0.956828942587535370, -0.290651637922133220, 0.956773193244376930, + -0.290835102229696830, + 0.956717408723403050, -0.291018555844085090, 0.956661589026665090, + -0.291201998758552900, + 0.956605734156215080, -0.291385430966355660, 0.956549844114106820, + -0.291568852460749040, + 0.956493918902395100, -0.291752263234989260, 0.956437958523136180, + -0.291935663282332780, + 0.956381962978387730, -0.292119052596036380, 0.956325932270208230, + -0.292302431169357560, + 0.956269866400658030, -0.292485798995553880, 0.956213765371798470, + -0.292669156067883460, + 0.956157629185692140, -0.292852502379604810, 0.956101457844403040, + -0.293035837923976810, + 0.956045251349996410, -0.293219162694258630, 0.955989009704538930, + -0.293402476683710110, + 0.955932732910098280, -0.293585779885591200, 0.955876420968743590, + -0.293769072293162400, + 0.955820073882545420, -0.293952353899684660, 0.955763691653575440, + -0.294135624698419030, + 0.955707274283906560, -0.294318884682627400, 0.955650821775613330, + -0.294502133845571670, + 0.955594334130771110, -0.294685372180514330, 0.955537811351456880, + -0.294868599680718270, + 0.955481253439748770, -0.295051816339446720, 0.955424660397726330, + -0.295235022149963220, + 0.955368032227470350, -0.295418217105532010, 0.955311368931062720, + -0.295601401199417360, + 0.955254670510586990, -0.295784574424884260, 0.955197936968127710, + -0.295967736775197890, + 0.955141168305770780, -0.296150888243623790, 0.955084364525603410, + -0.296334028823428190, + 0.955027525629714160, -0.296517158507877470, 0.954970651620192790, + -0.296700277290238350, + 0.954913742499130520, -0.296883385163778270, 0.954856798268619580, + -0.297066482121764730, + 0.954799818930753720, -0.297249568157465840, 0.954742804487627940, + -0.297432643264150030, + 0.954685754941338340, -0.297615707435086200, 0.954628670293982680, + -0.297798760663543550, + 0.954571550547659630, -0.297981802942791810, 0.954514395704469500, + -0.298164834266100850, + 0.954457205766513490, -0.298347854626741400, 0.954399980735894490, + -0.298530864017984120, + 0.954342720614716480, -0.298713862433100330, 0.954285425405084650, + -0.298896849865361800, + 0.954228095109105670, -0.299079826308040480, 0.954170729728887280, + -0.299262791754408840, + 0.954113329266538800, -0.299445746197739890, 0.954055893724170660, + -0.299628689631306790, + 0.953998423103894490, -0.299811622048383350, 0.953940917407823500, + -0.299994543442243580, + 0.953883376638071770, -0.300177453806161950, 0.953825800796755050, + -0.300360353133413530, + 0.953768189885990330, -0.300543241417273450, 0.953710543907895670, + -0.300726118651017500, + 0.953652862864590500, -0.300908984827921890, 0.953595146758195680, + -0.301091839941263100, + 0.953537395590833280, -0.301274683984317950, 0.953479609364626610, + -0.301457516950363940, + 0.953421788081700310, -0.301640338832678770, 0.953363931744180330, + -0.301823149624540650, + 0.953306040354193860, -0.302005949319228080, 0.953248113913869320, + -0.302188737910019990, + 0.953190152425336670, -0.302371515390195970, 0.953132155890726750, + -0.302554281753035610, + 0.953074124312172200, -0.302737036991819140, 0.953016057691806530, + -0.302919781099827310, + 0.952957956031764700, -0.303102514070341060, 0.952899819334182880, + -0.303285235896641750, + 0.952841647601198720, -0.303467946572011320, 0.952783440834950920, + -0.303650646089731910, + 0.952725199037579570, -0.303833334443086360, 0.952666922211226170, + -0.304016011625357570, + 0.952608610358033350, -0.304198677629829110, 0.952550263480144930, + -0.304381332449784880, + 0.952491881579706320, -0.304563976078509100, 0.952433464658864030, + -0.304746608509286530, + 0.952375012719765880, -0.304929229735402370, 0.952316525764560940, + -0.305111839750142110, + 0.952258003795399600, -0.305294438546791670, 0.952199446814433580, + -0.305477026118637420, + 0.952140854823815830, -0.305659602458966120, 0.952082227825700620, + -0.305842167561065080, + 0.952023565822243570, -0.306024721418221790, 0.951964868815601380, + -0.306207264023724220, + 0.951906136807932350, -0.306389795370860920, 0.951847369801395620, + -0.306572315452920740, + 0.951788567798152130, -0.306754824263192780, 0.951729730800363830, + -0.306937321794966910, + 0.951670858810193860, -0.307119808041533100, 0.951611951829806850, + -0.307302282996181790, + 0.951553009861368590, -0.307484746652204100, 0.951494032907046370, + -0.307667199002891190, + 0.951435020969008340, -0.307849640041534870, 0.951375974049424420, + -0.308032069761427330, + 0.951316892150465550, -0.308214488155861050, 0.951257775274304000, + -0.308396895218129190, + 0.951198623423113230, -0.308579290941525090, 0.951139436599068190, + -0.308761675319342450, + 0.951080214804345010, -0.308944048344875710, 0.951020958041121080, + -0.309126410011419440, + 0.950961666311575080, -0.309308760312268730, 0.950902339617887060, + -0.309491099240719100, + 0.950842977962238160, -0.309673426790066380, 0.950783581346811070, + -0.309855742953607070, + 0.950724149773789610, -0.310038047724637890, 0.950664683245358910, + -0.310220341096455850, + 0.950605181763705340, -0.310402623062358720, 0.950545645331016600, + -0.310584893615644450, + 0.950486073949481700, -0.310767152749611470, 0.950426467621290900, + -0.310949400457558640, + 0.950366826348635780, -0.311131636732785270, 0.950307150133709260, + -0.311313861568590920, + 0.950247438978705230, -0.311496074958275910, 0.950187692885819280, + -0.311678276895140550, + 0.950127911857248100, -0.311860467372486020, 0.950068095895189590, + -0.312042646383613510, + 0.950008245001843000, -0.312224813921824880, 0.949948359179409010, + -0.312406969980422440, + 0.949888438430089300, -0.312589114552708710, 0.949828482756087110, + -0.312771247631986770, + 0.949768492159606680, -0.312953369211560200, 0.949708466642853800, + -0.313135479284732840, + 0.949648406208035480, -0.313317577844809010, 0.949588310857359950, + -0.313499664885093510, + 0.949528180593036670, -0.313681740398891520, 0.949468015417276550, + -0.313863804379508500, + 0.949407815332291570, -0.314045856820250710, 0.949347580340295210, + -0.314227897714424440, + 0.949287310443502120, -0.314409927055336660, 0.949227005644128210, + -0.314591944836294660, + 0.949166665944390700, -0.314773951050606070, 0.949106291346508260, + -0.314955945691579140, + 0.949045881852700560, -0.315137928752522440, 0.948985437465188710, + -0.315319900226744890, + 0.948924958186195160, -0.315501860107555990, 0.948864444017943340, + -0.315683808388265650, + 0.948803894962658490, -0.315865745062183960, 0.948743311022566480, + -0.316047670122621860, + 0.948682692199895090, -0.316229583562890330, 0.948622038496872990, + -0.316411485376300980, + 0.948561349915730270, -0.316593375556165850, 0.948500626458698260, + -0.316775254095797270, + 0.948439868128009620, -0.316957120988508150, 0.948379074925898120, + -0.317138976227611780, + 0.948318246854599090, -0.317320819806421740, 0.948257383916349060, + -0.317502651718252260, + 0.948196486113385580, -0.317684471956417970, 0.948135553447947980, + -0.317866280514233660, + 0.948074585922276230, -0.318048077385014950, 0.948013583538612200, + -0.318229862562077530, + 0.947952546299198670, -0.318411636038737790, 0.947891474206279840, + -0.318593397808312420, + 0.947830367262101010, -0.318775147864118480, 0.947769225468909180, + -0.318956886199473650, + 0.947708048828952100, -0.319138612807695900, 0.947646837344479300, + -0.319320327682103610, + 0.947585591017741090, -0.319502030816015690, 0.947524309850989570, + -0.319683722202751430, + 0.947462993846477700, -0.319865401835630500, 0.947401643006459900, + -0.320047069707973140, + 0.947340257333192050, -0.320228725813099860, 0.947278836828930880, + -0.320410370144331820, + 0.947217381495934820, -0.320592002694990330, 0.947155891336463270, + -0.320773623458397330, + 0.947094366352777220, -0.320955232427875210, 0.947032806547138620, + -0.321136829596746660, + 0.946971211921810880, -0.321318414958334850, 0.946909582479058760, + -0.321499988505963510, + 0.946847918221148000, -0.321681550232956580, 0.946786219150346000, + -0.321863100132638580, + 0.946724485268921170, -0.322044638198334510, 0.946662716579143360, + -0.322226164423369600, + 0.946600913083283530, -0.322407678801069850, 0.946539074783614100, + -0.322589181324761330, + 0.946477201682408680, -0.322770671987770710, 0.946415293781942110, + -0.322952150783425260, + 0.946353351084490590, -0.323133617705052330, 0.946291373592331620, + -0.323315072745979980, + 0.946229361307743820, -0.323496515899536710, 0.946167314233007370, + -0.323677947159051240, + 0.946105232370403450, -0.323859366517852850, 0.946043115722214560, + -0.324040773969271450, + 0.945980964290724760, -0.324222169506636960, 0.945918778078219110, + -0.324403553123280230, + 0.945856557086983910, -0.324584924812532150, 0.945794301319306970, + -0.324766284567724220, + 0.945732010777477150, -0.324947632382188430, 0.945669685463784710, + -0.325128968249257080, + 0.945607325380521280, -0.325310292162262930, 0.945544930529979680, + -0.325491604114539310, + 0.945482500914453740, -0.325672904099419850, 0.945420036536239070, + -0.325854192110238580, + 0.945357537397632290, -0.326035468140330240, 0.945295003500931210, + -0.326216732183029710, + 0.945232434848435000, -0.326397984231672490, 0.945169831442444150, + -0.326579224279594400, + 0.945107193285260610, -0.326760452320131730, 0.945044520379187070, + -0.326941668346621420, + 0.944981812726528150, -0.327122872352400510, 0.944919070329589220, + -0.327304064330806670, + 0.944856293190677210, -0.327485244275178000, 0.944793481312100280, + -0.327666412178853120, + 0.944730634696167800, -0.327847568035170840, 0.944667753345190490, + -0.328028711837470680, + 0.944604837261480260, -0.328209843579092500, 0.944541886447350490, + -0.328390963253376580, + 0.944478900905115550, -0.328572070853663740, 0.944415880637091250, + -0.328753166373294990, + 0.944352825645594750, -0.328934249805612200, 0.944289735932944410, + -0.329115321143957250, + 0.944226611501459810, -0.329296380381672750, 0.944163452353461770, + -0.329477427512101740, + 0.944100258491272660, -0.329658462528587490, 0.944037029917215830, + -0.329839485424473940, + 0.943973766633615980, -0.330020496193105420, 0.943910468642799150, + -0.330201494827826570, + 0.943847135947092690, -0.330382481321982780, 0.943783768548825060, + -0.330563455668919540, + 0.943720366450326200, -0.330744417861982890, 0.943656929653927220, + -0.330925367894519540, + 0.943593458161960390, -0.331106305759876430, 0.943529951976759480, + -0.331287231451400820, + 0.943466411100659320, -0.331468144962440870, 0.943402835535996240, + -0.331649046286344670, + 0.943339225285107720, -0.331829935416461110, 0.943275580350332540, + -0.332010812346139380, + 0.943211900734010620, -0.332191677068729150, 0.943148186438483420, + -0.332372529577580620, + 0.943084437466093490, -0.332553369866044220, 0.943020653819184650, + -0.332734197927471050, + 0.942956835500102120, -0.332915013755212650, 0.942892982511192250, + -0.333095817342620780, + 0.942829094854802710, -0.333276608683047930, 0.942765172533282510, + -0.333457387769846850, + 0.942701215548981900, -0.333638154596370860, 0.942637223904252530, + -0.333818909155973620, + 0.942573197601446870, -0.333999651442009380, 0.942509136642919240, + -0.334180381447832690, + 0.942445041031024890, -0.334361099166798740, 0.942380910768120470, + -0.334541804592262900, + 0.942316745856563780, -0.334722497717581220, 0.942252546298714020, + -0.334903178536110180, + 0.942188312096931770, -0.335083847041206580, 0.942124043253578570, + -0.335264503226227810, + 0.942059739771017310, -0.335445147084531600, 0.941995401651612550, + -0.335625778609476290, + 0.941931028897729620, -0.335806397794420450, 0.941866621511735280, + -0.335987004632723350, + 0.941802179495997650, -0.336167599117744520, 0.941737702852886160, + -0.336348181242844050, + 0.941673191584771360, -0.336528751001382410, 0.941608645694025250, + -0.336709308386720580, + 0.941544065183020810, -0.336889853392220050, 0.941479450054132580, + -0.337070386011242620, + 0.941414800309736340, -0.337250906237150590, 0.941350115952208970, + -0.337431414063306840, + 0.941285396983928660, -0.337611909483074620, 0.941220643407275180, + -0.337792392489817460, + 0.941155855224629190, -0.337972863076899720, 0.941091032438372780, + -0.338153321237685930, + 0.941026175050889260, -0.338333766965541130, 0.940961283064563280, + -0.338514200253830940, + 0.940896356481780830, -0.338694621095921190, 0.940831395304928870, + -0.338875029485178450, + 0.940766399536396070, -0.339055425414969640, 0.940701369178571940, + -0.339235808878661950, + 0.940636304233847590, -0.339416179869623360, 0.940571204704615190, + -0.339596538381222110, + 0.940506070593268300, -0.339776884406826850, 0.940440901902201750, + -0.339957217939806880, + 0.940375698633811540, -0.340137538973531720, 0.940310460790495070, + -0.340317847501371670, + 0.940245188374650880, -0.340498143516697160, 0.940179881388678920, + -0.340678427012879200, + 0.940114539834980280, -0.340858697983289440, 0.940049163715957370, + -0.341038956421299720, + 0.939983753034014050, -0.341219202320282360, 0.939918307791555050, + -0.341399435673610420, + 0.939852827990986680, -0.341579656474657160, 0.939787313634716570, + -0.341759864716796310, + 0.939721764725153340, -0.341940060393402190, 0.939656181264707180, + -0.342120243497849530, + 0.939590563255789270, -0.342300414023513520, 0.939524910700812230, + -0.342480571963769800, + 0.939459223602189920, -0.342660717311994380, 0.939393501962337510, + -0.342840850061563950, + 0.939327745783671400, -0.343020970205855540, 0.939261955068609210, + -0.343201077738246540, + 0.939196129819569900, -0.343381172652115040, 0.939130270038973650, + -0.343561254940839390, + 0.939064375729241950, -0.343741324597798490, 0.938998446892797540, + -0.343921381616371700, + 0.938932483532064600, -0.344101425989938810, 0.938866485649468060, + -0.344281457711880180, + 0.938800453247434770, -0.344461476775576540, 0.938734386328392460, + -0.344641483174408960, + 0.938668284894770170, -0.344821476901759290, 0.938602148948998400, + -0.345001457951009670, + 0.938535978493508560, -0.345181426315542550, 0.938469773530733800, + -0.345361381988741220, + 0.938403534063108060, -0.345541324963989090, 0.938337260093066950, + -0.345721255234670120, + 0.938270951623047190, -0.345901172794168990, 0.938204608655486490, + -0.346081077635870430, + 0.938138231192824360, -0.346260969753160010, 0.938071819237501270, + -0.346440849139423520, + 0.938005372791958840, -0.346620715788047320, 0.937938891858640320, + -0.346800569692418290, + 0.937872376439989890, -0.346980410845923680, 0.937805826538453120, + -0.347160239241951160, + 0.937739242156476970, -0.347340054873889140, 0.937672623296509470, + -0.347519857735126110, + 0.937605969960999990, -0.347699647819051380, 0.937539282152399230, + -0.347879425119054510, + 0.937472559873159250, -0.348059189628525610, 0.937405803125732960, + -0.348238941340855260, + 0.937339011912574960, -0.348418680249434560, 0.937272186236140950, + -0.348598406347654930, + 0.937205326098887960, -0.348778119628908420, 0.937138431503274140, + -0.348957820086587490, + 0.937071502451759190, -0.349137507714084970, 0.937004538946803690, + -0.349317182504794380, + 0.936937540990869900, -0.349496844452109550, 0.936870508586420960, + -0.349676493549424760, + 0.936803441735921560, -0.349856129790134920, 0.936736340441837620, + -0.350035753167635240, + 0.936669204706636170, -0.350215363675321580, 0.936602034532785570, + -0.350394961306590150, + 0.936534829922755500, -0.350574546054837510, 0.936467590879016990, + -0.350754117913461060, + 0.936400317404042060, -0.350933676875858360, 0.936333009500304180, + -0.351113222935427460, + 0.936265667170278260, -0.351292756085567090, 0.936198290416440090, + -0.351472276319676310, + 0.936130879241267030, -0.351651783631154570, 0.936063433647237540, + -0.351831278013402030, + 0.935995953636831410, -0.352010759459819080, 0.935928439212529660, + -0.352190227963806830, + 0.935860890376814640, -0.352369683518766630, 0.935793307132169900, + -0.352549126118100460, + 0.935725689481080370, -0.352728555755210730, 0.935658037426032040, + -0.352907972423500250, + 0.935590350969512370, -0.353087376116372480, 0.935522630114009930, + -0.353266766827231240, + 0.935454874862014620, -0.353446144549480810, 0.935387085216017770, + -0.353625509276525970, + 0.935319261178511610, -0.353804861001772050, 0.935251402751989920, + -0.353984199718624770, + 0.935183509938947610, -0.354163525420490340, 0.935115582741880890, + -0.354342838100775550, + 0.935047621163287430, -0.354522137752887430, 0.934979625205665800, + -0.354701424370233830, + 0.934911594871516090, -0.354880697946222790, 0.934843530163339540, + -0.355059958474262860, + 0.934775431083638700, -0.355239205947763310, 0.934707297634917440, + -0.355418440360133650, + 0.934639129819680780, -0.355597661704783850, 0.934570927640435030, + -0.355776869975124640, + 0.934502691099687870, -0.355956065164566850, 0.934434420199948050, + -0.356135247266522130, + 0.934366114943725790, -0.356314416274402410, 0.934297775333532530, + -0.356493572181620090, + 0.934229401371880820, -0.356672714981588260, 0.934160993061284530, + -0.356851844667720300, + 0.934092550404258980, -0.357030961233429980, 0.934024073403320390, + -0.357210064672131960, + 0.933955562060986730, -0.357389154977240940, 0.933887016379776890, + -0.357568232142172260, + 0.933818436362210960, -0.357747296160341900, 0.933749822010810580, + -0.357926347025166010, + 0.933681173328098410, -0.358105384730061590, 0.933612490316598540, + -0.358284409268445850, + 0.933543772978836170, -0.358463420633736540, 0.933475021317337950, + -0.358642418819351990, + 0.933406235334631520, -0.358821403818710860, 0.933337415033246190, + -0.359000375625232460, + 0.933268560415712050, -0.359179334232336500, 0.933199671484560730, + -0.359358279633443130, + 0.933130748242325230, -0.359537211821973070, 0.933061790691539380, + -0.359716130791347570, + 0.932992798834738960, -0.359895036534988110, 0.932923772674460140, + -0.360073929046317020, + 0.932854712213241120, -0.360252808318756890, 0.932785617453621100, + -0.360431674345730700, + 0.932716488398140250, -0.360610527120662270, 0.932647325049340450, + -0.360789366636975580, + 0.932578127409764420, -0.360968192888095230, 0.932508895481956590, + -0.361147005867446250, + 0.932439629268462360, -0.361325805568454280, 0.932370328771828460, + -0.361504591984545260, + 0.932300993994602760, -0.361683365109145840, 0.932231624939334540, + -0.361862124935682980, + 0.932162221608574430, -0.362040871457584180, 0.932092784004874050, + -0.362219604668277460, + 0.932023312130786490, -0.362398324561191310, 0.931953805988866010, + -0.362577031129754760, + 0.931884265581668150, -0.362755724367397230, 0.931814690911749730, + -0.362934404267548640, + 0.931745081981668720, -0.363113070823639470, 0.931675438793984620, + -0.363291724029100760, + 0.931605761351257830, -0.363470363877363760, 0.931536049656050300, + -0.363648990361860550, + 0.931466303710925090, -0.363827603476023500, 0.931396523518446600, + -0.364006203213285470, + 0.931326709081180430, -0.364184789567079890, 0.931256860401693420, + -0.364363362530840620, + 0.931186977482553750, -0.364541922098002120, 0.931117060326330790, + -0.364720468261999280, + 0.931047108935595280, -0.364899001016267320, 0.930977123312918930, + -0.365077520354242180, + 0.930907103460875130, -0.365256026269360320, 0.930837049382038150, + -0.365434518755058390, + 0.930766961078983710, -0.365612997804773850, 0.930696838554288860, + -0.365791463411944570, + 0.930626681810531760, -0.365969915570008740, 0.930556490850291800, + -0.366148354272405330, + 0.930486265676149780, -0.366326779512573590, 0.930416006290687550, + -0.366505191283953370, + 0.930345712696488470, -0.366683589579984930, 0.930275384896137150, + -0.366861974394109060, + 0.930205022892219070, -0.367040345719767180, 0.930134626687321390, + -0.367218703550400980, + 0.930064196284032360, -0.367397047879452710, 0.929993731684941480, + -0.367575378700365330, + 0.929923232892639670, -0.367753696006581980, 0.929852699909718750, + -0.367931999791546450, + 0.929782132738772190, -0.368110290048703050, 0.929711531382394370, + -0.368288566771496570, + 0.929640895843181330, -0.368466829953372320, 0.929570226123729860, + -0.368645079587776040, + 0.929499522226638560, -0.368823315668153910, 0.929428784154506800, + -0.369001538187952780, + 0.929358011909935500, -0.369179747140620020, 0.929287205495526790, + -0.369357942519603130, + 0.929216364913884040, -0.369536124318350650, 0.929145490167611720, + -0.369714292530311240, + 0.929074581259315860, -0.369892447148934100, 0.929003638191603360, + -0.370070588167669080, + 0.928932660967082820, -0.370248715579966360, 0.928861649588363700, + -0.370426829379276790, + 0.928790604058057020, -0.370604929559051670, 0.928719524378774810, + -0.370783016112742560, + 0.928648410553130520, -0.370961089033801980, 0.928577262583738850, + -0.371139148315682570, + 0.928506080473215590, -0.371317193951837540, 0.928434864224177980, + -0.371495225935720760, + 0.928363613839244370, -0.371673244260786520, 0.928292329321034670, + -0.371851248920489490, + 0.928221010672169440, -0.372029239908285010, 0.928149657895271150, + -0.372207217217628840, + 0.928078270992963140, -0.372385180841977360, 0.928006849967869970, + -0.372563130774787250, + 0.927935394822617890, -0.372741067009515760, 0.927863905559833780, + -0.372918989539620830, + 0.927792382182146320, -0.373096898358560640, 0.927720824692185200, + -0.373274793459793970, + 0.927649233092581180, -0.373452674836780300, 0.927577607385966730, + -0.373630542482979280, + 0.927505947574975180, -0.373808396391851210, 0.927434253662241300, + -0.373986236556857030, + 0.927362525650401110, -0.374164062971457930, 0.927290763542091720, + -0.374341875629115920, + 0.927218967339951790, -0.374519674523293210, 0.927147137046620880, + -0.374697459647452600, + 0.927075272664740100, -0.374875230995057540, 0.927003374196951670, + -0.375052988559571920, + 0.926931441645899130, -0.375230732334459920, 0.926859475014227160, + -0.375408462313186590, + 0.926787474304581750, -0.375586178489217220, 0.926715439519610330, + -0.375763880856017700, + 0.926643370661961230, -0.375941569407054420, 0.926571267734284330, + -0.376119244135794340, + 0.926499130739230510, -0.376296905035704790, 0.926426959679452210, + -0.376474552100253770, + 0.926354754557602860, -0.376652185322909560, 0.926282515376337210, + -0.376829804697141280, + 0.926210242138311380, -0.377007410216418260, 0.926137934846182560, + -0.377185001874210450, + 0.926065593502609310, -0.377362579663988340, 0.925993218110251480, + -0.377540143579222940, + 0.925920808671770070, -0.377717693613385640, 0.925848365189827270, + -0.377895229759948490, + 0.925775887667086740, -0.378072752012383990, 0.925703376106213230, + -0.378250260364165200, + 0.925630830509872720, -0.378427754808765560, 0.925558250880732740, + -0.378605235339659120, + 0.925485637221461490, -0.378782701950320540, 0.925412989534729060, + -0.378960154634224720, + 0.925340307823206310, -0.379137593384847320, 0.925267592089565660, + -0.379315018195664430, + 0.925194842336480530, -0.379492429060152630, 0.925122058566625880, + -0.379669825971788940, + 0.925049240782677580, -0.379847208924051160, 0.924976388987313160, + -0.380024577910417270, + 0.924903503183210910, -0.380201932924366050, 0.924830583373050800, + -0.380379273959376600, + 0.924757629559513910, -0.380556601008928520, 0.924684641745282420, + -0.380733914066502140, + 0.924611619933039970, -0.380911213125578070, 0.924538564125471420, + -0.381088498179637520, + 0.924465474325262600, -0.381265769222162380, 0.924392350535101050, + -0.381443026246634730, + 0.924319192757675160, -0.381620269246537360, 0.924246000995674890, + -0.381797498215353640, + 0.924172775251791200, -0.381974713146567220, 0.924099515528716280, + -0.382151914033662610, + 0.924026221829143850, -0.382329100870124510, 0.923952894155768640, + -0.382506273649438230, + 0.923879532511286740, -0.382683432365089780, 0.923806136898395410, + -0.382860577010565420, + 0.923732707319793290, -0.383037707579352020, 0.923659243778179980, + -0.383214824064937180, + 0.923585746276256670, -0.383391926460808660, 0.923512214816725630, + -0.383569014760454910, + 0.923438649402290370, -0.383746088957365010, 0.923365050035655720, + -0.383923149045028390, + 0.923291416719527640, -0.384100195016935040, 0.923217749456613500, + -0.384277226866575510, + 0.923144048249621930, -0.384454244587440820, 0.923070313101262420, + -0.384631248173022580, + 0.922996544014246250, -0.384808237616812880, 0.922922740991285680, + -0.384985212912304200, + 0.922848904035094120, -0.385162174052989860, 0.922775033148386380, + -0.385339121032363340, + 0.922701128333878630, -0.385516053843918850, 0.922627189594287910, + -0.385692972481151140, + 0.922553216932332830, -0.385869876937555310, 0.922479210350733210, + -0.386046767206627170, + 0.922405169852209880, -0.386223643281862980, 0.922331095439485440, + -0.386400505156759440, + 0.922256987115283030, -0.386577352824813920, 0.922182844882327600, + -0.386754186279524180, + 0.922108668743345180, -0.386931005514388580, 0.922034458701062820, + -0.387107810522905990, + 0.921960214758209220, -0.387284601298575840, 0.921885936917513970, + -0.387461377834897870, + 0.921811625181708120, -0.387638140125372730, 0.921737279553523910, + -0.387814888163501180, + 0.921662900035694730, -0.387991621942784860, 0.921588486630955490, + -0.388168341456725740, + 0.921514039342042010, -0.388345046698826250, 0.921439558171691430, + -0.388521737662589570, + 0.921365043122642340, -0.388698414341519190, 0.921290494197634540, + -0.388875076729119250, + 0.921215911399408730, -0.389051724818894380, 0.921141294730707270, + -0.389228358604349730, + 0.921066644194273640, -0.389404978078990940, 0.920991959792852310, + -0.389581583236324300, + 0.920917241529189520, -0.389758174069856410, 0.920842489406032190, + -0.389934750573094730, + 0.920767703426128790, -0.390111312739546910, 0.920692883592229120, + -0.390287860562721190, + 0.920618029907083970, -0.390464394036126590, 0.920543142373445480, + -0.390640913153272430, + 0.920468220994067110, -0.390817417907668500, 0.920393265771703550, + -0.390993908292825380, + 0.920318276709110590, -0.391170384302253870, 0.920243253809045370, + -0.391346845929465560, + 0.920168197074266340, -0.391523293167972410, 0.920093106507533180, + -0.391699726011286940, + 0.920017982111606570, -0.391876144452922350, 0.919942823889248640, + -0.392052548486392090, + 0.919867631843222950, -0.392228938105210310, 0.919792405976293860, + -0.392405313302891690, + 0.919717146291227360, -0.392581674072951470, 0.919641852790790470, + -0.392758020408905280, + 0.919566525477751530, -0.392934352304269490, 0.919491164354880100, + -0.393110669752560760, + 0.919415769424947070, -0.393286972747296400, 0.919340340690724340, + -0.393463261281994330, + 0.919264878154985370, -0.393639535350172880, 0.919189381820504470, + -0.393815794945351020, + 0.919113851690057770, -0.393992040061048100, 0.919038287766422050, + -0.394168270690784080, + 0.918962690052375630, -0.394344486828079600, 0.918887058550697970, + -0.394520688466455600, + 0.918811393264170050, -0.394696875599433560, 0.918735694195573550, + -0.394873048220535760, + 0.918659961347691900, -0.395049206323284770, 0.918584194723309540, + -0.395225349901203670, + 0.918508394325212250, -0.395401478947816350, 0.918432560156186910, + -0.395577593456646840, + 0.918356692219021720, -0.395753693421220080, 0.918280790516506130, + -0.395929778835061250, + 0.918204855051430900, -0.396105849691696270, 0.918128885826588030, + -0.396281905984651520, + 0.918052882844770380, -0.396457947707453910, 0.917976846108772730, + -0.396633974853630830, + 0.917900775621390500, -0.396809987416710310, 0.917824671385420570, + -0.396985985390220900, + 0.917748533403661250, -0.397161968767691610, 0.917672361678911860, + -0.397337937542652060, + 0.917596156213972950, -0.397513891708632330, 0.917519917011646260, + -0.397689831259163180, + 0.917443644074735220, -0.397865756187775750, 0.917367337406043930, + -0.398041666488001770, + 0.917290997008377910, -0.398217562153373560, 0.917214622884544250, + -0.398393443177423980, + 0.917138215037350710, -0.398569309553686300, 0.917061773469606820, + -0.398745161275694430, + 0.916985298184123000, -0.398920998336982910, 0.916908789183710990, + -0.399096820731086540, + 0.916832246471183890, -0.399272628451540990, 0.916755670049355990, + -0.399448421491882140, + 0.916679059921042700, -0.399624199845646790, 0.916602416089060790, + -0.399799963506371980, + 0.916525738556228210, -0.399975712467595330, 0.916449027325364150, + -0.400151446722855130, + 0.916372282399289140, -0.400327166265690090, 0.916295503780824800, + -0.400502871089639500, + 0.916218691472794220, -0.400678561188243240, 0.916141845478021350, + -0.400854236555041650, + 0.916064965799331720, -0.401029897183575620, 0.915988052439551950, + -0.401205543067386710, + 0.915911105401509880, -0.401381174200016790, 0.915834124688034710, + -0.401556790575008540, + 0.915757110301956720, -0.401732392185905010, 0.915680062246107650, + -0.401907979026249700, + 0.915602980523320230, -0.402083551089586990, 0.915525865136428530, + -0.402259108369461490, + 0.915448716088267830, -0.402434650859418430, 0.915371533381674760, + -0.402610178553003680, + 0.915294317019487050, -0.402785691443763530, 0.915217067004543860, + -0.402961189525244900, + 0.915139783339685260, -0.403136672790995300, 0.915062466027752760, + -0.403312141234562550, + 0.914985115071589310, -0.403487594849495310, 0.914907730474038730, + -0.403663033629342640, + 0.914830312237946200, -0.403838457567654070, 0.914752860366158220, + -0.404013866657979890, + 0.914675374861522390, -0.404189260893870690, 0.914597855726887790, + -0.404364640268877810, + 0.914520302965104450, -0.404540004776553000, 0.914442716579023870, + -0.404715354410448650, + 0.914365096571498560, -0.404890689164117580, 0.914287442945382440, + -0.405066009031113340, + 0.914209755703530690, -0.405241314004989860, 0.914132034848799460, + -0.405416604079301630, + 0.914054280384046570, -0.405591879247603870, 0.913976492312130630, + -0.405767139503452060, + 0.913898670635911680, -0.405942384840402510, 0.913820815358251100, + -0.406117615252011840, + 0.913742926482011390, -0.406292830731837360, 0.913665004010056350, + -0.406468031273437000, + 0.913587047945250810, -0.406643216870369030, 0.913509058290461140, + -0.406818387516192310, + 0.913431035048554720, -0.406993543204466510, 0.913352978222400250, + -0.407168683928751550, + 0.913274887814867760, -0.407343809682607970, 0.913196763828828200, + -0.407518920459596920, + 0.913118606267154240, -0.407694016253280110, 0.913040415132719160, + -0.407869097057219800, + 0.912962190428398210, -0.408044162864978690, 0.912883932157067200, + -0.408219213670120100, + 0.912805640321603500, -0.408394249466208000, 0.912727314924885900, + -0.408569270246806780, + 0.912648955969793900, -0.408744276005481360, 0.912570563459208730, + -0.408919266735797430, + 0.912492137396012650, -0.409094242431320980, 0.912413677783089020, + -0.409269203085618590, + 0.912335184623322750, -0.409444148692257590, 0.912256657919599760, + -0.409619079244805670, + 0.912178097674807180, -0.409793994736831150, 0.912099503891833470, + -0.409968895161902880, + 0.912020876573568340, -0.410143780513590240, 0.911942215722902570, + -0.410318650785463260, + 0.911863521342728520, -0.410493505971092410, 0.911784793435939430, + -0.410668346064048730, + 0.911706032005429880, -0.410843171057903910, 0.911627237054095650, + -0.411017980946230210, + 0.911548408584833990, -0.411192775722600160, 0.911469546600543020, + -0.411367555380587220, + 0.911390651104122430, -0.411542319913765220, 0.911311722098472780, + -0.411717069315708560, + 0.911232759586496190, -0.411891803579992170, 0.911153763571095900, + -0.412066522700191560, + 0.911074734055176360, -0.412241226669882890, 0.910995671041643140, + -0.412415915482642730, + 0.910916574533403360, -0.412590589132048210, 0.910837444533365010, + -0.412765247611677270, + 0.910758281044437570, -0.412939890915108080, 0.910679084069531570, + -0.413114519035919450, + 0.910599853611558930, -0.413289131967690960, 0.910520589673432750, + -0.413463729704002410, + 0.910441292258067250, -0.413638312238434500, 0.910361961368377990, + -0.413812879564568300, + 0.910282597007281760, -0.413987431675985400, 0.910203199177696540, + -0.414161968566268080, + 0.910123767882541680, -0.414336490228999100, 0.910044303124737500, + -0.414510996657761750, + 0.909964804907205660, -0.414685487846140010, 0.909885273232869160, + -0.414859963787718330, + 0.909805708104652220, -0.415034424476081630, 0.909726109525480160, + -0.415208869904815590, + 0.909646477498279540, -0.415383300067506230, 0.909566812025978330, + -0.415557714957740410, + 0.909487113111505430, -0.415732114569105360, 0.909407380757791260, + -0.415906498895188770, + 0.909327614967767260, -0.416080867929579210, 0.909247815744366310, + -0.416255221665865480, + 0.909167983090522380, -0.416429560097637150, 0.909088117009170580, + -0.416603883218484350, + 0.909008217503247450, -0.416778191021997650, 0.908928284575690640, + -0.416952483501768170, + 0.908848318229439120, -0.417126760651387870, 0.908768318467432890, + -0.417301022464448890, + 0.908688285292613360, -0.417475268934544290, 0.908608218707923190, + -0.417649500055267410, + 0.908528118716306120, -0.417823715820212270, 0.908447985320707250, + -0.417997916222973550, + 0.908367818524072890, -0.418172101257146320, 0.908287618329350450, + -0.418346270916326260, + 0.908207384739488700, -0.418520425194109700, 0.908127117757437600, + -0.418694564084093560, + 0.908046817386148340, -0.418868687579875050, 0.907966483628573350, + -0.419042795675052370, + 0.907886116487666260, -0.419216888363223910, 0.907805715966381930, + -0.419390965637988890, + 0.907725282067676440, -0.419565027492946880, 0.907644814794507200, + -0.419739073921698180, + 0.907564314149832630, -0.419913104917843620, 0.907483780136612570, + -0.420087120474984530, + 0.907403212757808110, -0.420261120586722880, 0.907322612016381420, + -0.420435105246661170, + 0.907241977915295820, -0.420609074448402510, 0.907161310457516250, + -0.420783028185550520, + 0.907080609646008450, -0.420956966451709440, 0.906999875483739610, + -0.421130889240483970, + 0.906919107973678140, -0.421304796545479640, 0.906838307118793430, + -0.421478688360302280, + 0.906757472922056550, -0.421652564678558330, 0.906676605386439460, + -0.421826425493854910, + 0.906595704514915330, -0.422000270799799680, 0.906514770310458800, + -0.422174100590000770, + 0.906433802776045460, -0.422347914858067050, 0.906352801914652400, + -0.422521713597607820, + 0.906271767729257660, -0.422695496802232950, 0.906190700222840650, + -0.422869264465553060, + 0.906109599398381980, -0.423043016581179040, 0.906028465258863600, + -0.423216753142722610, + 0.905947297807268460, -0.423390474143796050, 0.905866097046580940, + -0.423564179578011960, + 0.905784862979786550, -0.423737869438983840, 0.905703595609872010, + -0.423911543720325580, + 0.905622294939825270, -0.424085202415651560, 0.905540960972635590, + -0.424258845518576950, + 0.905459593711293250, -0.424432473022717420, 0.905378193158790090, + -0.424606084921689110, + 0.905296759318118820, -0.424779681209108810, 0.905215292192273590, + -0.424953261878593890, + 0.905133791784249690, -0.425126826923762360, 0.905052258097043590, + -0.425300376338232640, + 0.904970691133653250, -0.425473910115623800, 0.904889090897077470, + -0.425647428249555590, + 0.904807457390316540, -0.425820930733648240, 0.904725790616371930, + -0.425994417561522400, + 0.904644090578246240, -0.426167888726799620, 0.904562357278943300, + -0.426341344223101830, + 0.904480590721468250, -0.426514784044051520, 0.904398790908827350, + -0.426688208183271860, + 0.904316957844028320, -0.426861616634386430, 0.904235091530079750, + -0.427035009391019680, + 0.904153191969991780, -0.427208386446796320, 0.904071259166775440, + -0.427381747795341770, + 0.903989293123443340, -0.427555093430282080, 0.903907293843009050, + -0.427728423345243800, + 0.903825261328487510, -0.427901737533854080, 0.903743195582894620, + -0.428075035989740730, + 0.903661096609247980, -0.428248318706531960, 0.903578964410566070, + -0.428421585677856650, + 0.903496798989868450, -0.428594836897344400, 0.903414600350176290, + -0.428768072358625070, + 0.903332368494511820, -0.428941292055329490, 0.903250103425898400, + -0.429114495981088750, + 0.903167805147360720, -0.429287684129534610, 0.903085473661924600, + -0.429460856494299490, + 0.903003108972617150, -0.429634013069016380, 0.902920711082466740, + -0.429807153847318710, + 0.902838279994502830, -0.429980278822840620, 0.902755815711756120, + -0.430153387989216870, + 0.902673318237258830, -0.430326481340082610, 0.902590787574043870, + -0.430499558869073820, + 0.902508223725145940, -0.430672620569826800, 0.902425626693600380, + -0.430845666435978660, + 0.902342996482444200, -0.431018696461167030, 0.902260333094715540, + -0.431191710639029950, + 0.902177636533453620, -0.431364708963206330, 0.902094906801698900, + -0.431537691427335500, + 0.902012143902493180, -0.431710658025057260, 0.901929347838879460, + -0.431883608750012250, + 0.901846518613901750, -0.432056543595841500, 0.901763656230605730, + -0.432229462556186720, + 0.901680760692037730, -0.432402365624690140, 0.901597832001245660, + -0.432575252794994650, + 0.901514870161278740, -0.432748124060743700, 0.901431875175186970, + -0.432920979415581280, + 0.901348847046022030, -0.433093818853151960, 0.901265785776836580, + -0.433266642367100940, + 0.901182691370684520, -0.433439449951074090, 0.901099563830620950, + -0.433612241598717580, + 0.901016403159702330, -0.433785017303678520, 0.900933209360986200, + -0.433957777059604420, + 0.900849982437531450, -0.434130520860143310, 0.900766722392397860, + -0.434303248698943990, + 0.900683429228646970, -0.434475960569655650, 0.900600102949340900, + -0.434648656465928320, + 0.900516743557543520, -0.434821336381412290, 0.900433351056319830, + -0.434994000309758710, + 0.900349925448735600, -0.435166648244619260, 0.900266466737858480, + -0.435339280179646070, + 0.900182974926756810, -0.435511896108492000, 0.900099450018500450, + -0.435684496024810460, + 0.900015892016160280, -0.435857079922255470, 0.899932300922808510, + -0.436029647794481560, + 0.899848676741518580, -0.436202199635143950, 0.899765019475365140, + -0.436374735437898340, + 0.899681329127423930, -0.436547255196401200, 0.899597605700772180, + -0.436719758904309360, + 0.899513849198487980, -0.436892246555280360, 0.899430059623650860, + -0.437064718142972370, + 0.899346236979341570, -0.437237173661044090, 0.899262381268642000, + -0.437409613103154790, + 0.899178492494635330, -0.437582036462964400, 0.899094570660405770, + -0.437754443734133410, + 0.899010615769039070, -0.437926834910322860, 0.898926627823621870, + -0.438099209985194470, + 0.898842606827242370, -0.438271568952410430, 0.898758552782989440, + -0.438443911805633690, + 0.898674465693953820, -0.438616238538527660, 0.898590345563227030, + -0.438788549144756290, + 0.898506192393901950, -0.438960843617984320, 0.898422006189072530, + -0.439133121951876930, + 0.898337786951834310, -0.439305384140099950, 0.898253534685283570, + -0.439477630176319800, + 0.898169249392518080, -0.439649860054203480, 0.898084931076636780, + -0.439822073767418500, + 0.898000579740739880, -0.439994271309633260, 0.897916195387928660, + -0.440166452674516320, + 0.897831778021305650, -0.440338617855737250, 0.897747327643974690, + -0.440510766846965940, + 0.897662844259040860, -0.440682899641872900, 0.897578327869610230, + -0.440855016234129430, + 0.897493778478790310, -0.441027116617407230, 0.897409196089689720, + -0.441199200785378660, + 0.897324580705418320, -0.441371268731716670, 0.897239932329087160, + -0.441543320450094870, + 0.897155250963808550, -0.441715355934187310, 0.897070536612695870, + -0.441887375177668850, + 0.896985789278863970, -0.442059378174214700, 0.896901008965428790, + -0.442231364917500980, + 0.896816195675507300, -0.442403335401204080, 0.896731349412217880, + -0.442575289619001170, + 0.896646470178680150, -0.442747227564570020, 0.896561557978014960, + -0.442919149231588980, + 0.896476612813344120, -0.443091054613736880, 0.896391634687790820, + -0.443262943704693320, + 0.896306623604479550, -0.443434816498138480, 0.896221579566536030, + -0.443606672987752970, + 0.896136502577086770, -0.443778513167218220, 0.896051392639260150, + -0.443950337030216140, + 0.895966249756185220, -0.444122144570429200, 0.895881073930992370, + -0.444293935781540580, + 0.895795865166813530, -0.444465710657234000, 0.895710623466781320, + -0.444637469191193790, + 0.895625348834030110, -0.444809211377104880, 0.895540041271694950, + -0.444980937208652730, + 0.895454700782912450, -0.445152646679523640, 0.895369327370820310, + -0.445324339783404190, + 0.895283921038557580, -0.445496016513981740, 0.895198481789264200, + -0.445667676864944300, + 0.895113009626081760, -0.445839320829980290, 0.895027504552152630, + -0.446010948402778940, + 0.894941966570620750, -0.446182559577030070, 0.894856395684631050, + -0.446354154346423840, + 0.894770791897329550, -0.446525732704651350, 0.894685155211863980, + -0.446697294645404090, + 0.894599485631382700, -0.446868840162374160, 0.894513783159035620, + -0.447040369249254440, + 0.894428047797973800, -0.447211881899738320, 0.894342279551349480, + -0.447383378107519600, + 0.894256478422316040, -0.447554857866293010, 0.894170644414028270, + -0.447726321169753580, + 0.894084777529641990, -0.447897768011597310, 0.893998877772314240, + -0.448069198385520400, + 0.893912945145203250, -0.448240612285219890, 0.893826979651468620, + -0.448412009704393430, + 0.893740981294271040, -0.448583390636739240, 0.893654950076772540, + -0.448754755075955970, + 0.893568886002135910, -0.448926103015743260, 0.893482789073525850, + -0.449097434449801050, + 0.893396659294107720, -0.449268749371829920, 0.893310496667048200, + -0.449440047775531150, + 0.893224301195515320, -0.449611329654606540, 0.893138072882678320, + -0.449782595002758690, + 0.893051811731707450, -0.449953843813690520, 0.892965517745774370, + -0.450125076081105690, + 0.892879190928051680, -0.450296291798708610, 0.892792831281713610, + -0.450467490960204110, + 0.892706438809935390, -0.450638673559297600, 0.892620013515893150, + -0.450809839589695280, + 0.892533555402764580, -0.450980989045103860, 0.892447064473728680, + -0.451152121919230600, + 0.892360540731965360, -0.451323238205783520, 0.892273984180655840, + -0.451494337898471100, + 0.892187394822982480, -0.451665420991002490, 0.892100772662129060, + -0.451836487477087490, + 0.892014117701280470, -0.452007537350436420, 0.891927429943622510, + -0.452178570604760350, + 0.891840709392342720, -0.452349587233770890, 0.891753956050629460, + -0.452520587231180050, + 0.891667169921672280, -0.452691570590700920, 0.891580351008662290, + -0.452862537306046750, + 0.891493499314791380, -0.453033487370931580, 0.891406614843252900, + -0.453204420779070190, + 0.891319697597241390, -0.453375337524177750, 0.891232747579952520, + -0.453546237599970090, + 0.891145764794583180, -0.453717121000163870, 0.891058749244331590, + -0.453887987718476050, + 0.890971700932396860, -0.454058837748624430, 0.890884619861979530, + -0.454229671084327320, + 0.890797506036281490, -0.454400487719303580, 0.890710359458505630, + -0.454571287647272950, + 0.890623180131855930, -0.454742070861955450, 0.890535968059537830, + -0.454912837357071940, + 0.890448723244757880, -0.455083587126343840, 0.890361445690723840, + -0.455254320163493100, + 0.890274135400644600, -0.455425036462242360, 0.890186792377730240, + -0.455595736016314980, + 0.890099416625192320, -0.455766418819434640, 0.890012008146243260, + -0.455937084865326030, + 0.889924566944096720, -0.456107734147714110, 0.889837093021967900, + -0.456278366660324620, + 0.889749586383072780, -0.456448982396883920, 0.889662047030628900, + -0.456619581351118910, + 0.889574474967854580, -0.456790163516757160, 0.889486870197969900, + -0.456960728887526980, + 0.889399232724195520, -0.457131277457156980, 0.889311562549753850, + -0.457301809219376630, + 0.889223859677868210, -0.457472324167916060, 0.889136124111763240, + -0.457642822296505770, + 0.889048355854664570, -0.457813303598877170, 0.888960554909799310, + -0.457983768068762120, + 0.888872721280395630, -0.458154215699893060, 0.888784854969682850, + -0.458324646486003240, + 0.888696955980891600, -0.458495060420826270, 0.888609024317253860, + -0.458665457498096560, + 0.888521059982002260, -0.458835837711549120, 0.888433062978371320, + -0.459006201054919630, + 0.888345033309596350, -0.459176547521944090, 0.888256970978913870, + -0.459346877106359630, + 0.888168875989561730, -0.459517189801903480, 0.888080748344778900, + -0.459687485602313870, + 0.887992588047805560, -0.459857764501329540, 0.887904395101883240, + -0.460028026492689650, + 0.887816169510254440, -0.460198271570134320, 0.887727911276163020, + -0.460368499727404010, + 0.887639620402853930, -0.460538710958240010, 0.887551296893573370, + -0.460708905256384080, + 0.887462940751568840, -0.460879082615578690, 0.887374551980088850, + -0.461049243029566900, + 0.887286130582383150, -0.461219386492092380, 0.887197676561702900, + -0.461389512996899450, + 0.887109189921300170, -0.461559622537733080, 0.887020670664428360, + -0.461729715108338770, + 0.886932118794342190, -0.461899790702462730, 0.886843534314297410, + -0.462069849313851750, + 0.886754917227550840, -0.462239890936253340, 0.886666267537361000, + -0.462409915563415430, + 0.886577585246987040, -0.462579923189086810, 0.886488870359689600, + -0.462749913807016740, + 0.886400122878730600, -0.462919887410955080, 0.886311342807372780, + -0.463089843994652530, + 0.886222530148880640, -0.463259783551860150, 0.886133684906519340, + -0.463429706076329830, + 0.886044807083555600, -0.463599611561814010, 0.885955896683257030, + -0.463769500002065630, + 0.885866953708892790, -0.463939371390838520, 0.885777978163732940, + -0.464109225721886950, + 0.885688970051048960, -0.464279062988965760, 0.885599929374113360, + -0.464448883185830660, + 0.885510856136199950, -0.464618686306237820, 0.885421750340583680, + -0.464788472343943990, + 0.885332611990540590, -0.464958241292706690, 0.885243441089348270, + -0.465127993146283950, + 0.885154237640285110, -0.465297727898434600, 0.885065001646630930, + -0.465467445542917800, + 0.884975733111666660, -0.465637146073493660, 0.884886432038674560, + -0.465806829483922710, + 0.884797098430937790, -0.465976495767966180, 0.884707732291741040, + -0.466146144919385890, + 0.884618333624369920, -0.466315776931944430, 0.884528902432111460, + -0.466485391799404900, + 0.884439438718253810, -0.466654989515530920, 0.884349942486086120, + -0.466824570074086950, + 0.884260413738899190, -0.466994133468838000, 0.884170852479984500, + -0.467163679693549770, + 0.884081258712634990, -0.467333208741988420, 0.883991632440144890, + -0.467502720607920920, + 0.883901973665809470, -0.467672215285114770, 0.883812282392925090, + -0.467841692767338170, + 0.883722558624789660, -0.468011153048359830, 0.883632802364701870, + -0.468180596121949290, + 0.883543013615961880, -0.468350021981876530, 0.883453192381870920, + -0.468519430621912310, + 0.883363338665731580, -0.468688822035827900, 0.883273452470847430, + -0.468858196217395330, + 0.883183533800523390, -0.469027553160387130, 0.883093582658065370, + -0.469196892858576580, + 0.883003599046780830, -0.469366215305737520, 0.882913582969978020, + -0.469535520495644450, + 0.882823534430966620, -0.469704808422072460, 0.882733453433057650, + -0.469874079078797360, + 0.882643339979562790, -0.470043332459595620, 0.882553194073795510, + -0.470212568558244170, + 0.882463015719070150, -0.470381787368520650, 0.882372804918702290, + -0.470550988884203550, + 0.882282561676008710, -0.470720173099071600, 0.882192285994307430, + -0.470889340006904520, + 0.882101977876917580, -0.471058489601482500, 0.882011637327159590, + -0.471227621876586340, + 0.881921264348355050, -0.471396736825997640, 0.881830858943826620, + -0.471565834443498420, + 0.881740421116898320, -0.471734914722871430, 0.881649950870895260, + -0.471903977657900210, + 0.881559448209143780, -0.472073023242368660, 0.881468913134971440, + -0.472242051470061490, + 0.881378345651706920, -0.472411062334764040, 0.881287745762680100, + -0.472580055830262250, + 0.881197113471222090, -0.472749031950342790, 0.881106448780665130, + -0.472917990688792760, + 0.881015751694342870, -0.473086932039400050, 0.880925022215589880, + -0.473255855995953320, + 0.880834260347742040, -0.473424762552241530, 0.880743466094136340, + -0.473593651702054530, + 0.880652639458111010, -0.473762523439182850, 0.880561780443005700, + -0.473931377757417450, + 0.880470889052160750, -0.474100214650549970, 0.880379965288918150, + -0.474269034112372980, + 0.880289009156621010, -0.474437836136679230, 0.880198020658613190, + -0.474606620717262560, + 0.880106999798240360, -0.474775387847917120, 0.880015946578849070, + -0.474944137522437800, + 0.879924861003786860, -0.475112869734620300, 0.879833743076402940, + -0.475281584478260740, + 0.879742592800047410, -0.475450281747155870, 0.879651410178071580, + -0.475618961535103300, + 0.879560195213827890, -0.475787623835901120, 0.879468947910670210, + -0.475956268643348060, + 0.879377668271953290, -0.476124895951243580, 0.879286356301033250, + -0.476293505753387690, + 0.879195012001267480, -0.476462098043581190, 0.879103635376014330, + -0.476630672815625320, + 0.879012226428633530, -0.476799230063322090, 0.878920785162485840, + -0.476967769780474170, + 0.878829311580933360, -0.477136291960884810, 0.878737805687339390, + -0.477304796598357890, + 0.878646267485068130, -0.477473283686698060, 0.878554696977485450, + -0.477641753219710470, + 0.878463094167957870, -0.477810205191200990, 0.878371459059853480, + -0.477978639594976160, + 0.878279791656541580, -0.478147056424843010, 0.878188091961392250, + -0.478315455674609480, + 0.878096359977777130, -0.478483837338083970, 0.878004595709069080, + -0.478652201409075500, + 0.877912799158641840, -0.478820547881393890, 0.877820970329870500, + -0.478988876748849490, + 0.877729109226131570, -0.479157188005253310, 0.877637215850802230, + -0.479325481644417070, + 0.877545290207261350, -0.479493757660153010, 0.877453332298888560, + -0.479662016046274180, + 0.877361342129065140, -0.479830256796594190, 0.877269319701173170, + -0.479998479904927280, + 0.877177265018595940, -0.480166685365088390, 0.877085178084718420, + -0.480334873170893020, + 0.876993058902925890, -0.480503043316157510, 0.876900907476605650, + -0.480671195794698640, + 0.876808723809145650, -0.480839330600333960, 0.876716507903935400, + -0.481007447726881590, + 0.876624259764365310, -0.481175547168160300, 0.876531979393827100, + -0.481343628917989710, + 0.876439666795713610, -0.481511692970189860, 0.876347321973419020, + -0.481679739318581490, + 0.876254944930338510, -0.481847767956986030, 0.876162535669868460, + -0.482015778879225590, + 0.876070094195406600, -0.482183772079122720, 0.875977620510351770, + -0.482351747550500980, + 0.875885114618103810, -0.482519705287184350, 0.875792576522063880, + -0.482687645282997460, + 0.875700006225634600, -0.482855567531765670, 0.875607403732219350, + -0.483023472027314880, + 0.875514769045222850, -0.483191358763471860, 0.875422102168050940, + -0.483359227734063810, + 0.875329403104110890, -0.483527078932918740, 0.875236671856810870, + -0.483694912353865140, + 0.875143908429560360, -0.483862727990732270, 0.875051112825769970, + -0.484030525837350010, + 0.874958285048851650, -0.484198305887549030, 0.874865425102218320, + -0.484366068135160420, + 0.874772532989284150, -0.484533812574016180, 0.874679608713464510, + -0.484701539197948670, + 0.874586652278176110, -0.484869248000791060, 0.874493663686836560, + -0.485036938976377290, + 0.874400642942864790, -0.485204612118541820, 0.874307590049680950, + -0.485372267421119770, + 0.874214505010706300, -0.485539904877946960, 0.874121387829363330, + -0.485707524482859750, + 0.874028238509075740, -0.485875126229695250, 0.873935057053268240, + -0.486042710112291330, + 0.873841843465366860, -0.486210276124486420, 0.873748597748798870, + -0.486377824260119440, + 0.873655319906992630, -0.486545354513030270, 0.873562009943377850, + -0.486712866877059170, + 0.873468667861384880, -0.486880361346047340, 0.873375293664446000, + -0.487047837913836380, + 0.873281887355994210, -0.487215296574268760, 0.873188448939463790, + -0.487382737321187360, + 0.873094978418290090, -0.487550160148436000, 0.873001475795909920, + -0.487717565049858800, + 0.872907941075761080, -0.487884952019301040, 0.872814374261282390, + -0.488052321050608250, + 0.872720775355914300, -0.488219672137626790, 0.872627144363097960, + -0.488387005274203530, + 0.872533481286276170, -0.488554320454186180, 0.872439786128892280, + -0.488721617671423080, + 0.872346058894391540, -0.488888896919763170, 0.872252299586219860, + -0.489056158193056030, + 0.872158508207824480, -0.489223401485151980, 0.872064684762653860, + -0.489390626789901920, + 0.871970829254157810, -0.489557834101157440, 0.871876941685786890, + -0.489725023412770910, + 0.871783022060993120, -0.489892194718595190, 0.871689070383229740, + -0.490059348012483850, + 0.871595086655950980, -0.490226483288291160, 0.871501070882612530, + -0.490393600539871970, + 0.871407023066670950, -0.490560699761082020, 0.871312943211584030, + -0.490727780945777400, + 0.871218831320811020, -0.490894844087815090, 0.871124687397811900, + -0.491061889181052650, + 0.871030511446048260, -0.491228916219348280, 0.870936303468982760, + -0.491395925196560780, + 0.870842063470078980, -0.491562916106549900, 0.870747791452801790, + -0.491729888943175760, + 0.870653487420617430, -0.491896843700299290, 0.870559151376993250, + -0.492063780371782000, + 0.870464783325397670, -0.492230698951486020, 0.870370383269300270, + -0.492397599433274380, + 0.870275951212171940, -0.492564481811010590, 0.870181487157484560, + -0.492731346078558840, + 0.870086991108711460, -0.492898192229784040, 0.869992463069326870, + -0.493065020258551700, + 0.869897903042806340, -0.493231830158727900, 0.869803311032626650, + -0.493398621924179770, + 0.869708687042265670, -0.493565395548774770, 0.869614031075202300, + -0.493732151026381020, + 0.869519343134916860, -0.493898888350867480, 0.869424623224890890, + -0.494065607516103570, + 0.869329871348606840, -0.494232308515959670, 0.869235087509548370, + -0.494398991344306650, + 0.869140271711200560, -0.494565655995015950, 0.869045423957049530, + -0.494732302461959870, + 0.868950544250582380, -0.494898930739011260, 0.868855632595287860, + -0.495065540820043560, + 0.868760688994655310, -0.495232132698931180, 0.868665713452175690, + -0.495398706369549020, + 0.868570705971340900, -0.495565261825772540, 0.868475666555644120, + -0.495731799061477960, + 0.868380595208579800, -0.495898318070542190, 0.868285491933643350, + -0.496064818846842890, + 0.868190356734331310, -0.496231301384258250, 0.868095189614141670, + -0.496397765676667160, + 0.867999990576573510, -0.496564211717949290, 0.867904759625126920, + -0.496730639501984760, + 0.867809496763303320, -0.496897049022654470, 0.867714201994605140, + -0.497063440273840250, + 0.867618875322536230, -0.497229813249424220, 0.867523516750601460, + -0.497396167943289280, + 0.867428126282306920, -0.497562504349319150, 0.867332703921159800, + -0.497728822461397940, + 0.867237249670668400, -0.497895122273410870, 0.867141763534342470, + -0.498061403779243410, + 0.867046245515692650, -0.498227666972781870, 0.866950695618230900, + -0.498393911847913210, + 0.866855113845470430, -0.498560138398525140, 0.866759500200925400, + -0.498726346618505900, + 0.866663854688111130, -0.498892536501744590, 0.866568177310544470, + -0.499058708042130870, + 0.866472468071743050, -0.499224861233555080, 0.866376726975225830, + -0.499390996069908170, + 0.866280954024512990, -0.499557112545081840, 0.866185149223125840, + -0.499723210652968540, + 0.866089312574586770, -0.499889290387461330, 0.865993444082419520, + -0.500055351742453860, + 0.865897543750148820, -0.500221394711840680, 0.865801611581300760, + -0.500387419289516580, + 0.865705647579402380, -0.500553425469377420, 0.865609651747981990, + -0.500719413245319880, + 0.865513624090569090, -0.500885382611240710, 0.865417564610694410, + -0.501051333561038040, + 0.865321473311889800, -0.501217266088609950, 0.865225350197688200, + -0.501383180187855770, + 0.865129195271623800, -0.501549075852675390, 0.865033008537231860, + -0.501714953076969120, + 0.864936789998049020, -0.501880811854638290, 0.864840539657612870, + -0.502046652179584660, + 0.864744257519462380, -0.502212474045710790, 0.864647943587137480, + -0.502378277446919760, + 0.864551597864179340, -0.502544062377115690, 0.864455220354130360, + -0.502709828830202990, + 0.864358811060534030, -0.502875576800086990, 0.864262369986934950, + -0.503041306280673450, + 0.864165897136879300, -0.503207017265868920, 0.864069392513913790, + -0.503372709749581040, + 0.863972856121586810, -0.503538383725717580, 0.863876287963447510, + -0.503704039188187070, + 0.863779688043046720, -0.503869676130898950, 0.863683056363935830, + -0.504035294547763190, + 0.863586392929668100, -0.504200894432690340, 0.863489697743797140, + -0.504366475779592040, + 0.863392970809878420, -0.504532038582380270, 0.863296212131468230, + -0.504697582834967570, + 0.863199421712124160, -0.504863108531267590, 0.863102599555404910, + -0.505028615665194080, + 0.863005745664870320, -0.505194104230662240, 0.862908860044081400, + -0.505359574221587280, + 0.862811942696600330, -0.505525025631885390, 0.862714993625990690, + -0.505690458455473450, + 0.862618012835816740, -0.505855872686268860, 0.862521000329644520, + -0.506021268318189720, + 0.862423956111040610, -0.506186645345155230, 0.862326880183573060, + -0.506352003761084800, + 0.862229772550811240, -0.506517343559898530, 0.862132633216325380, + -0.506682664735517600, + 0.862035462183687210, -0.506847967281863210, 0.861938259456469290, + -0.507013251192858230, + 0.861841025038245330, -0.507178516462425180, 0.861743758932590700, + -0.507343763084487920, + 0.861646461143081300, -0.507508991052970870, 0.861549131673294720, + -0.507674200361798890, + 0.861451770526809320, -0.507839391004897720, 0.861354377707204910, + -0.508004562976194010, + 0.861256953218062170, -0.508169716269614600, 0.861159497062963350, + -0.508334850879087360, + 0.861062009245491480, -0.508499966798540930, 0.860964489769231010, + -0.508665064021904030, + 0.860866938637767310, -0.508830142543106990, 0.860769355854687170, + -0.508995202356080090, + 0.860671741423578380, -0.509160243454754640, 0.860574095348029980, + -0.509325265833062480, + 0.860476417631632070, -0.509490269484936360, 0.860378708277976130, + -0.509655254404309250, + 0.860280967290654510, -0.509820220585115450, 0.860183194673260990, + -0.509985168021289460, + 0.860085390429390140, -0.510150096706766810, 0.859987554562638200, + -0.510315006635483240, + 0.859889687076602290, -0.510479897801375700, 0.859791787974880650, + -0.510644770198381610, + 0.859693857261072610, -0.510809623820439040, 0.859595894938779080, + -0.510974458661486830, + 0.859497901011601730, -0.511139274715464390, 0.859399875483143450, + -0.511304071976312000, + 0.859301818357008470, -0.511468850437970300, 0.859203729636801920, + -0.511633610094381240, + 0.859105609326130450, -0.511798350939486890, 0.859007457428601520, + -0.511963072967230200, + 0.858909273947823900, -0.512127776171554690, 0.858811058887407610, + -0.512292460546404870, + 0.858712812250963520, -0.512457126085725690, 0.858614534042104190, + -0.512621772783462990, + 0.858516224264442740, -0.512786400633562960, 0.858417882921593930, + -0.512951009629972980, + 0.858319510017173440, -0.513115599766640560, 0.858221105554798250, + -0.513280171037514220, + 0.858122669538086140, -0.513444723436543460, 0.858024201970656540, + -0.513609256957677780, + 0.857925702856129790, -0.513773771594868030, 0.857827172198127430, + -0.513938267342065380, + 0.857728610000272120, -0.514102744193221660, 0.857630016266187620, + -0.514267202142289710, + 0.857531390999499150, -0.514431641183222820, 0.857432734203832700, + -0.514596061309975040, + 0.857334045882815590, -0.514760462516501200, 0.857235326040076460, + -0.514924844796756490, + 0.857136574679244980, -0.515089208144697160, 0.857037791803951680, + -0.515253552554280180, + 0.856938977417828760, -0.515417878019462930, 0.856840131524509220, + -0.515582184534203790, + 0.856741254127627470, -0.515746472092461380, 0.856642345230818840, + -0.515910740688195650, + 0.856543404837719960, -0.516074990315366630, 0.856444432951968590, + -0.516239220967935510, + 0.856345429577203610, -0.516403432639863990, 0.856246394717065210, + -0.516567625325114350, + 0.856147328375194470, -0.516731799017649870, 0.856048230555233940, + -0.516895953711434150, + 0.855949101260826910, -0.517060089400431910, 0.855849940495618240, + -0.517224206078608310, + 0.855750748263253920, -0.517388303739929060, 0.855651524567380690, + -0.517552382378360880, + 0.855552269411646860, -0.517716441987871150, 0.855452982799701830, + -0.517880482562427690, + 0.855353664735196030, -0.518044504095999340, 0.855254315221780970, + -0.518208506582555460, + 0.855154934263109620, -0.518372490016066110, 0.855055521862835950, + -0.518536454390502220, + 0.854956078024614930, -0.518700399699834950, 0.854856602752102850, + -0.518864325938036890, + 0.854757096048957220, -0.519028233099080860, 0.854657557918836460, + -0.519192121176940250, + 0.854557988365400530, -0.519355990165589640, 0.854458387392310170, + -0.519519840059003760, + 0.854358755003227440, -0.519683670851158410, 0.854259091201815530, + -0.519847482536030190, + 0.854159395991738850, -0.520011275107596040, 0.854059669376662780, + -0.520175048559833760, + 0.853959911360254180, -0.520338802886721960, 0.853860121946180770, + -0.520502538082239670, + 0.853760301138111410, -0.520666254140367160, 0.853660448939716380, + -0.520829951055084670, + 0.853560565354666840, -0.520993628820373920, 0.853460650386635320, + -0.521157287430216610, + 0.853360704039295430, -0.521320926878595660, 0.853260726316321880, + -0.521484547159494330, + 0.853160717221390420, -0.521648148266897090, 0.853060676758178320, + -0.521811730194788550, + 0.852960604930363630, -0.521975292937154390, 0.852860501741625750, + -0.522138836487980760, + 0.852760367195645300, -0.522302360841254590, 0.852660201296103760, + -0.522465865990963780, + 0.852560004046684080, -0.522629351931096610, 0.852459775451070100, + -0.522792818655642090, + 0.852359515512947090, -0.522956266158590140, 0.852259224236001090, + -0.523119694433931250, + 0.852158901623919830, -0.523283103475656430, 0.852058547680391690, + -0.523446493277757830, + 0.851958162409106380, -0.523609863834227920, 0.851857745813754840, + -0.523773215139060170, + 0.851757297898029120, -0.523936547186248600, 0.851656818665622370, + -0.524099859969787700, + 0.851556308120228980, -0.524263153483673360, 0.851455766265544310, + -0.524426427721901400, + 0.851355193105265200, -0.524589682678468950, 0.851254588643089120, + -0.524752918347373360, + 0.851153952882715340, -0.524916134722613000, 0.851053285827843790, + -0.525079331798186780, + 0.850952587482175730, -0.525242509568094710, 0.850851857849413530, + -0.525405668026336930, + 0.850751096933260790, -0.525568807166914680, 0.850650304737422090, + -0.525731926983829760, + 0.850549481265603480, -0.525895027471084630, 0.850448626521511760, + -0.526058108622682760, + 0.850347740508854980, -0.526221170432628060, 0.850246823231342710, + -0.526384212894925100, + 0.850145874692685210, -0.526547236003579440, 0.850044894896594180, + -0.526710239752597010, + 0.849943883846782210, -0.526873224135984590, 0.849842841546963320, + -0.527036189147750080, + 0.849741768000852550, -0.527199134781901280, 0.849640663212165910, + -0.527362061032447540, + 0.849539527184620890, -0.527524967893398200, 0.849438359921936060, + -0.527687855358763720, + 0.849337161427830780, -0.527850723422555230, 0.849235931706025960, + -0.528013572078784630, + 0.849134670760243630, -0.528176401321464370, 0.849033378594206800, + -0.528339211144607690, + 0.848932055211639610, -0.528502001542228480, 0.848830700616267530, + -0.528664772508341320, + 0.848729314811817130, -0.528827524036961870, 0.848627897802015860, + -0.528990256122106040, + 0.848526449590592650, -0.529152968757790610, 0.848424970181277600, + -0.529315661938033260, + 0.848323459577801640, -0.529478335656851980, 0.848221917783896990, + -0.529640989908265910, + 0.848120344803297230, -0.529803624686294610, 0.848018740639736810, + -0.529966239984958620, + 0.847917105296951410, -0.530128835798278960, 0.847815438778677930, + -0.530291412120277310, + 0.847713741088654380, -0.530453968944976320, 0.847612012230619660, + -0.530616506266399330, + 0.847510252208314330, -0.530779024078570140, 0.847408461025479730, + -0.530941522375513620, + 0.847306638685858320, -0.531104001151255000, 0.847204785193194090, + -0.531266460399820390, + 0.847102900551231500, -0.531428900115236800, 0.847000984763716880, + -0.531591320291531670, + 0.846899037834397240, -0.531753720922733320, 0.846797059767020910, + -0.531916102002870650, + 0.846695050565337450, -0.532078463525973540, 0.846593010233097190, + -0.532240805486072220, + 0.846490938774052130, -0.532403127877197900, 0.846388836191954930, + -0.532565430693382580, + 0.846286702490559710, -0.532727713928658810, 0.846184537673621560, + -0.532889977577059800, + 0.846082341744897050, -0.533052221632619450, 0.845980114708143270, + -0.533214446089372960, + 0.845877856567119000, -0.533376650941355330, 0.845775567325584010, + -0.533538836182603120, + 0.845673246987299070, -0.533701001807152960, 0.845570895556026270, + -0.533863147809042650, + 0.845468513035528830, -0.534025274182310380, 0.845366099429570970, + -0.534187380920995380, + 0.845263654741918220, -0.534349468019137520, 0.845161178976337140, + -0.534511535470777120, + 0.845058672136595470, -0.534673583269955510, 0.844956134226462210, + -0.534835611410714560, + 0.844853565249707120, -0.534997619887097150, 0.844750965210101510, + -0.535159608693146600, + 0.844648334111417820, -0.535321577822907120, 0.844545671957429240, + -0.535483527270423370, + 0.844442978751910660, -0.535645457029741090, 0.844340254498637590, + -0.535807367094906390, + 0.844237499201387020, -0.535969257459966710, 0.844134712863936930, + -0.536131128118969460, + 0.844031895490066410, -0.536292979065963180, 0.843929047083555870, + -0.536454810294997090, + 0.843826167648186740, -0.536616621800121040, 0.843723257187741660, + -0.536778413575385920, + 0.843620315706004150, -0.536940185614842910, 0.843517343206759200, + -0.537101937912544130, + 0.843414339693792760, -0.537263670462542530, 0.843311305170892140, + -0.537425383258891550, + 0.843208239641845440, -0.537587076295645390, 0.843105143110442160, + -0.537748749566859360, + 0.843002015580472940, -0.537910403066588880, 0.842898857055729310, + -0.538072036788890600, + 0.842795667540004120, -0.538233650727821700, 0.842692447037091670, + -0.538395244877439950, + 0.842589195550786710, -0.538556819231804100, 0.842485913084885630, + -0.538718373784973560, + 0.842382599643185850, -0.538879908531008420, 0.842279255229485990, + -0.539041423463969440, + 0.842175879847585570, -0.539202918577918240, 0.842072473501285560, + -0.539364393866917040, + 0.841969036194387680, -0.539525849325028890, 0.841865567930695340, + -0.539687284946317570, + 0.841762068714012490, -0.539848700724847590, 0.841658538548144760, + -0.540010096654684020, + 0.841554977436898440, -0.540171472729892850, 0.841451385384081260, + -0.540332828944540710, + 0.841347762393501950, -0.540494165292695230, 0.841244108468970580, + -0.540655481768424150, + 0.841140423614298080, -0.540816778365796670, 0.841036707833296650, + -0.540978055078882080, + 0.840932961129779780, -0.541139311901750800, 0.840829183507561640, + -0.541300548828474120, + 0.840725374970458070, -0.541461765853123440, 0.840621535522285690, + -0.541622962969771530, + 0.840517665166862550, -0.541784140172491550, 0.840413763908007480, + -0.541945297455357360, + 0.840309831749540770, -0.542106434812443920, 0.840205868695283580, + -0.542267552237826520, + 0.840101874749058400, -0.542428649725581250, 0.839997849914688840, + -0.542589727269785270, + 0.839893794195999520, -0.542750784864515890, 0.839789707596816370, + -0.542911822503851730, + 0.839685590120966110, -0.543072840181871740, 0.839581441772277120, + -0.543233837892655890, + 0.839477262554578550, -0.543394815630284800, 0.839373052471700690, + -0.543555773388839540, + 0.839268811527475230, -0.543716711162402280, 0.839164539725734680, + -0.543877628945055980, + 0.839060237070312740, -0.544038526730883820, 0.838955903565044460, + -0.544199404513970310, + 0.838851539213765760, -0.544360262288400400, 0.838747144020313920, + -0.544521100048259600, + 0.838642717988527300, -0.544681917787634530, 0.838538261122245280, + -0.544842715500612360, + 0.838433773425308340, -0.545003493181281160, 0.838329254901558300, + -0.545164250823729320, + 0.838224705554838080, -0.545324988422046460, 0.838120125388991500, + -0.545485705970322530, + 0.838015514407863820, -0.545646403462648590, 0.837910872615301170, + -0.545807080893116140, + 0.837806200015150940, -0.545967738255817570, 0.837701496611261700, + -0.546128375544845950, + 0.837596762407483040, -0.546288992754295210, 0.837491997407665890, + -0.546449589878259650, + 0.837387201615661940, -0.546610166910834860, 0.837282375035324320, + -0.546770723846116800, + 0.837177517670507300, -0.546931260678202190, 0.837072629525066000, + -0.547091777401188530, + 0.836967710602857020, -0.547252274009174090, 0.836862760907737920, + -0.547412750496257930, + 0.836757780443567190, -0.547573206856539760, 0.836652769214204950, + -0.547733643084120090, + 0.836547727223512010, -0.547894059173100190, 0.836442654475350380, + -0.548054455117581880, + 0.836337550973583530, -0.548214830911667780, 0.836232416722075600, + -0.548375186549461600, + 0.836127251724692270, -0.548535522025067390, 0.836022055985299880, + -0.548695837332590090, + 0.835916829507766360, -0.548856132466135290, 0.835811572295960700, + -0.549016407419809390, + 0.835706284353752600, -0.549176662187719660, 0.835600965685013410, + -0.549336896763974010, + 0.835495616293615350, -0.549497111142680960, 0.835390236183431890, + -0.549657305317949870, + 0.835284825358337370, -0.549817479283890910, 0.835179383822207690, + -0.549977633034614890, + 0.835073911578919410, -0.550137766564233630, 0.834968408632350450, + -0.550297879866859190, + 0.834862874986380010, -0.550457972936604810, 0.834757310644888230, + -0.550618045767584330, + 0.834651715611756440, -0.550778098353912120, 0.834546089890866870, + -0.550938130689703880, + 0.834440433486103190, -0.551098142769075430, 0.834334746401350080, + -0.551258134586143590, + 0.834229028640493420, -0.551418106135026060, 0.834123280207420100, + -0.551578057409841000, + 0.834017501106018130, -0.551737988404707340, 0.833911691340176840, + -0.551897899113745210, + 0.833805850913786340, -0.552057789531074980, 0.833699979830738290, + -0.552217659650817930, + 0.833594078094925140, -0.552377509467096070, 0.833488145710240770, + -0.552537338974032120, + 0.833382182680579730, -0.552697148165749770, 0.833276189009838240, + -0.552856937036373290, + 0.833170164701913190, -0.553016705580027470, 0.833064109760702890, + -0.553176453790838350, + 0.832958024190106670, -0.553336181662932300, 0.832851907994025090, + -0.553495889190436570, + 0.832745761176359460, -0.553655576367479310, 0.832639583741012770, + -0.553815243188189090, + 0.832533375691888680, -0.553974889646695500, 0.832427137032892280, + -0.554134515737128910, + 0.832320867767929680, -0.554294121453620000, 0.832214567900907980, + -0.554453706790300930, + 0.832108237435735590, -0.554613271741304040, 0.832001876376321950, + -0.554772816300762470, + 0.831895484726577590, -0.554932340462810370, 0.831789062490414400, + -0.555091844221582420, + 0.831682609671745120, -0.555251327571213980, 0.831576126274483740, + -0.555410790505841630, + 0.831469612302545240, -0.555570233019602180, 0.831363067759845920, + -0.555729655106633410, + 0.831256492650303210, -0.555889056761073810, 0.831149886977835540, + -0.556048437977062600, + 0.831043250746362320, -0.556207798748739930, 0.830936583959804410, + -0.556367139070246370, + 0.830829886622083570, -0.556526458935723610, 0.830723158737122880, + -0.556685758339313890, + 0.830616400308846310, -0.556845037275160100, 0.830509611341179070, + -0.557004295737405950, + 0.830402791838047550, -0.557163533720196220, 0.830295941803379070, + -0.557322751217676160, + 0.830189061241102370, -0.557481948223991550, 0.830082150155146970, + -0.557641124733289420, + 0.829975208549443950, -0.557800280739716990, 0.829868236427924840, + -0.557959416237422960, + 0.829761233794523050, -0.558118531220556100, 0.829654200653172640, + -0.558277625683266330, + 0.829547137007808910, -0.558436699619704100, 0.829440042862368170, + -0.558595753024020760, + 0.829332918220788250, -0.558754785890368310, 0.829225763087007570, + -0.558913798212899770, + 0.829118577464965980, -0.559072789985768480, 0.829011361358604430, + -0.559231761203128900, + 0.828904114771864870, -0.559390711859136140, 0.828796837708690610, + -0.559549641947945760, + 0.828689530173025820, -0.559708551463714680, 0.828582192168815790, + -0.559867440400600210, + 0.828474823700007130, -0.560026308752760380, 0.828367424770547480, + -0.560185156514354080, + 0.828259995384385660, -0.560343983679540860, 0.828152535545471410, + -0.560502790242481060, + 0.828045045257755800, -0.560661576197336030, 0.827937524525190870, + -0.560820341538267430, + 0.827829973351729920, -0.560979086259438150, 0.827722391741327220, + -0.561137810355011420, + 0.827614779697938400, -0.561296513819151470, 0.827507137225519830, + -0.561455196646023280, + 0.827399464328029470, -0.561613858829792420, 0.827291761009425810, + -0.561772500364625340, + 0.827184027273669130, -0.561931121244689470, 0.827076263124720270, + -0.562089721464152480, + 0.826968468566541600, -0.562248301017183150, 0.826860643603096190, + -0.562406859897951140, + 0.826752788238348520, -0.562565398100626560, 0.826644902476264320, + -0.562723915619380400, + 0.826536986320809960, -0.562882412448384440, 0.826429039775953500, + -0.563040888581811230, + 0.826321062845663530, -0.563199344013834090, 0.826213055533910220, + -0.563357778738627020, + 0.826105017844664610, -0.563516192750364800, 0.825996949781899080, + -0.563674586043223070, + 0.825888851349586780, -0.563832958611378170, 0.825780722551702430, + -0.563991310449006970, + 0.825672563392221390, -0.564149641550287680, 0.825564373875120490, + -0.564307951909398640, + 0.825456154004377550, -0.564466241520519500, 0.825347903783971380, + -0.564624510377830120, + 0.825239623217882250, -0.564782758475511400, 0.825131312310091070, + -0.564940985807745210, + 0.825022971064580220, -0.565099192368713980, 0.824914599485333190, + -0.565257378152600800, + 0.824806197576334330, -0.565415543153589660, 0.824697765341569470, + -0.565573687365865330, + 0.824589302785025290, -0.565731810783613120, 0.824480809910689500, + -0.565889913401019570, + 0.824372286722551250, -0.566047995212271450, 0.824263733224600560, + -0.566206056211556730, + 0.824155149420828570, -0.566364096393063840, 0.824046535315227760, + -0.566522115750982100, + 0.823937890911791370, -0.566680114279501600, 0.823829216214513990, + -0.566838091972813320, + 0.823720511227391430, -0.566996048825108680, 0.823611775954420260, + -0.567153984830580100, + 0.823503010399598500, -0.567311899983420800, 0.823394214566925080, + -0.567469794277824510, + 0.823285388460400110, -0.567627667707986230, 0.823176532084024860, + -0.567785520268101140, + 0.823067645441801670, -0.567943351952365560, 0.822958728537734000, + -0.568101162754976460, + 0.822849781375826430, -0.568258952670131490, 0.822740803960084420, + -0.568416721692029280, + 0.822631796294514990, -0.568574469814869140, 0.822522758383125940, + -0.568732197032851050, + 0.822413690229926390, -0.568889903340175860, 0.822304591838926350, + -0.569047588731045110, + 0.822195463214137170, -0.569205253199661200, 0.822086304359571090, + -0.569362896740227220, + 0.821977115279241550, -0.569520519346947140, 0.821867895977163250, + -0.569678121014025600, + 0.821758646457351750, -0.569835701735668000, 0.821649366723823940, + -0.569993261506080540, + 0.821540056780597610, -0.570150800319470300, 0.821430716631691870, + -0.570308318170044900, + 0.821321346281126740, -0.570465815052012990, 0.821211945732923550, + -0.570623290959583750, + 0.821102514991104650, -0.570780745886967260, 0.820993054059693580, + -0.570938179828374360, + 0.820883562942714580, -0.571095592778016690, 0.820774041644193650, + -0.571252984730106660, + 0.820664490168157460, -0.571410355678857230, 0.820554908518633890, + -0.571567705618482580, + 0.820445296699652050, -0.571725034543197120, 0.820335654715241840, + -0.571882342447216590, + 0.820225982569434690, -0.572039629324757050, 0.820116280266262820, + -0.572196895170035580, + 0.820006547809759680, -0.572354139977269920, 0.819896785203959810, + -0.572511363740678790, + 0.819786992452898990, -0.572668566454481160, 0.819677169560613870, + -0.572825748112897550, + 0.819567316531142230, -0.572982908710148560, 0.819457433368523280, + -0.573140048240455950, + 0.819347520076796900, -0.573297166698042200, 0.819237576660004520, + -0.573454264077130400, + 0.819127603122188240, -0.573611340371944610, 0.819017599467391500, + -0.573768395576709560, + 0.818907565699658950, -0.573925429685650750, 0.818797501823036010, + -0.574082442692994470, + 0.818687407841569680, -0.574239434592967890, 0.818577283759307610, + -0.574396405379798750, + 0.818467129580298660, -0.574553355047715760, 0.818356945308593150, + -0.574710283590948330, + 0.818246730948242070, -0.574867191003726740, 0.818136486503297730, + -0.575024077280281710, + 0.818026211977813440, -0.575180942414845080, 0.817915907375843850, + -0.575337786401649450, + 0.817805572701444270, -0.575494609234928120, 0.817695207958671680, + -0.575651410908915140, + 0.817584813151583710, -0.575808191417845340, 0.817474388284239240, + -0.575964950755954220, + 0.817363933360698460, -0.576121688917478280, 0.817253448385022340, + -0.576278405896654910, + 0.817142933361272970, -0.576435101687721830, 0.817032388293513880, + -0.576591776284917760, + 0.816921813185809480, -0.576748429682482410, 0.816811208042225290, + -0.576905061874655960, + 0.816700572866827850, -0.577061672855679440, 0.816589907663684890, + -0.577218262619794920, + 0.816479212436865390, -0.577374831161244880, 0.816368487190439200, + -0.577531378474272720, + 0.816257731928477390, -0.577687904553122800, 0.816146946655052270, + -0.577844409392039850, + 0.816036131374236810, -0.578000892985269910, 0.815925286090105510, + -0.578157355327059360, + 0.815814410806733780, -0.578313796411655590, 0.815703505528198260, + -0.578470216233306630, + 0.815592570258576790, -0.578626614786261430, 0.815481605001947770, + -0.578782992064769690, + 0.815370609762391290, -0.578939348063081780, 0.815259584543988280, + -0.579095682775449090, + 0.815148529350820830, -0.579251996196123550, 0.815037444186972220, + -0.579408288319357870, + 0.814926329056526620, -0.579564559139405630, 0.814815183963569440, + -0.579720808650521450, + 0.814704008912187080, -0.579877036846960350, 0.814592803906467270, + -0.580033243722978150, + 0.814481568950498610, -0.580189429272831680, 0.814370304048371070, + -0.580345593490778300, + 0.814259009204175270, -0.580501736371076490, 0.814147684422003360, + -0.580657857907985300, + 0.814036329705948410, -0.580813958095764530, 0.813924945060104600, + -0.580970036928674770, + 0.813813530488567190, -0.581126094400977620, 0.813702085995432700, + -0.581282130506935000, + 0.813590611584798510, -0.581438145240810170, 0.813479107260763220, + -0.581594138596866930, + 0.813367573027426570, -0.581750110569369650, 0.813256008888889380, + -0.581906061152583810, + 0.813144414849253590, -0.582061990340775440, 0.813032790912622040, + -0.582217898128211670, + 0.812921137083098770, -0.582373784509160110, 0.812809453364789270, + -0.582529649477889320, + 0.812697739761799490, -0.582685493028668460, 0.812585996278237130, + -0.582841315155767650, + 0.812474222918210480, -0.582997115853457700, 0.812362419685829230, + -0.583152895116010430, + 0.812250586585203880, -0.583308652937698290, 0.812138723620446480, + -0.583464389312794320, + 0.812026830795669730, -0.583620104235572760, 0.811914908114987790, + -0.583775797700308070, + 0.811802955582515470, -0.583931469701276180, 0.811690973202369050, + -0.584087120232753440, + 0.811578960978665890, -0.584242749289016980, 0.811466918915524250, + -0.584398356864344600, + 0.811354847017063730, -0.584553942953015330, 0.811242745287404810, + -0.584709507549308390, + 0.811130613730669190, -0.584865050647504490, 0.811018452350979470, + -0.585020572241884530, + 0.810906261152459670, -0.585176072326730410, 0.810794040139234730, + -0.585331550896324940, + 0.810681789315430780, -0.585487007944951340, 0.810569508685174630, + -0.585642443466894420, + 0.810457198252594770, -0.585797857456438860, 0.810344858021820550, + -0.585953249907870570, + 0.810232487996982330, -0.586108620815476430, 0.810120088182211600, + -0.586263970173543590, + 0.810007658581641140, -0.586419297976360500, 0.809895199199404450, + -0.586574604218216170, + 0.809782710039636530, -0.586729888893400390, 0.809670191106473090, + -0.586885151996203950, + 0.809557642404051260, -0.587040393520917970, 0.809445063936509170, + -0.587195613461834800, + 0.809332455707985950, -0.587350811813247660, 0.809219817722621750, + -0.587505988569450020, + 0.809107149984558240, -0.587661143724736660, 0.808994452497937670, + -0.587816277273402910, + 0.808881725266903610, -0.587971389209745010, 0.808768968295600850, + -0.588126479528059850, + 0.808656181588174980, -0.588281548222645220, 0.808543365148773010, + -0.588436595287799790, + 0.808430518981542720, -0.588591620717822890, 0.808317643090633250, + -0.588746624507014540, + 0.808204737480194720, -0.588901606649675720, 0.808091802154378370, + -0.589056567140108460, + 0.807978837117336310, -0.589211505972614960, 0.807865842373222120, + -0.589366423141498790, + 0.807752817926190360, -0.589521318641063940, 0.807639763780396480, + -0.589676192465615420, + 0.807526679939997160, -0.589831044609458790, 0.807413566409150190, + -0.589985875066900920, + 0.807300423192014450, -0.590140683832248820, 0.807187250292749960, + -0.590295470899810830, + 0.807074047715517610, -0.590450236263895810, 0.806960815464479730, + -0.590604979918813330, + 0.806847553543799330, -0.590759701858874160, 0.806734261957640860, + -0.590914402078389520, + 0.806620940710169650, -0.591069080571671400, 0.806507589805552260, + -0.591223737333032910, + 0.806394209247956240, -0.591378372356787580, 0.806280799041550480, + -0.591532985637249990, + 0.806167359190504420, -0.591687577168735430, 0.806053889698989060, + -0.591842146945560140, + 0.805940390571176280, -0.591996694962040990, 0.805826861811239300, + -0.592151221212495530, + 0.805713303423352230, -0.592305725691242290, 0.805599715411690060, + -0.592460208392600830, + 0.805486097780429230, -0.592614669310891130, 0.805372450533747060, + -0.592769108440434070, + 0.805258773675822210, -0.592923525775551300, 0.805145067210834230, + -0.593077921310565470, + 0.805031331142963660, -0.593232295039799800, 0.804917565476392260, + -0.593386646957578480, + 0.804803770215302920, -0.593540977058226390, 0.804689945363879500, + -0.593695285336069190, + 0.804576090926307110, -0.593849571785433630, 0.804462206906771840, + -0.594003836400646690, + 0.804348293309460780, -0.594158079176036800, 0.804234350138562260, + -0.594312300105932830, + 0.804120377398265810, -0.594466499184664430, 0.804006375092761520, + -0.594620676406562240, + 0.803892343226241260, -0.594774831765957580, 0.803778281802897570, + -0.594928965257182420, + 0.803664190826924090, -0.595083076874569960, 0.803550070302515680, + -0.595237166612453850, + 0.803435920233868120, -0.595391234465168730, 0.803321740625178580, + -0.595545280427049790, + 0.803207531480644940, -0.595699304492433360, 0.803093292804466400, + -0.595853306655656280, + 0.802979024600843250, -0.596007286911056530, 0.802864726873976700, + -0.596161245252972540, + 0.802750399628069160, -0.596315181675743710, 0.802636042867324150, + -0.596469096173710360, + 0.802521656595946430, -0.596622988741213220, 0.802407240818141300, + -0.596776859372594390, + 0.802292795538115720, -0.596930708062196500, 0.802178320760077450, + -0.597084534804362740, + 0.802063816488235440, -0.597238339593437420, 0.801949282726799770, + -0.597392122423765710, + 0.801834719479981310, -0.597545883289693160, 0.801720126751992330, + -0.597699622185566830, + 0.801605504547046150, -0.597853339105733910, 0.801490852869356950, + -0.598007034044542700, + 0.801376171723140240, -0.598160706996342270, 0.801261461112612540, + -0.598314357955482600, + 0.801146721041991360, -0.598467986916314310, 0.801031951515495330, + -0.598621593873188920, + 0.800917152537344300, -0.598775178820458720, 0.800802324111759110, + -0.598928741752476900, + 0.800687466242961610, -0.599082282663597310, 0.800572578935174860, + -0.599235801548174570, + 0.800457662192622820, -0.599389298400564540, 0.800342716019530660, + -0.599542773215123390, + 0.800227740420124790, -0.599696225986208310, 0.800112735398632370, + -0.599849656708177250, + 0.799997700959281910, -0.600003065375388940, 0.799882637106302810, + -0.600156451982203240, + 0.799767543843925680, -0.600309816522980430, 0.799652421176382240, + -0.600463158992081580, + 0.799537269107905010, -0.600616479383868970, 0.799422087642728040, + -0.600769777692705230, + 0.799306876785086160, -0.600923053912954090, 0.799191636539215210, + -0.601076308038980160, + 0.799076366909352350, -0.601229540065148500, 0.798961067899735760, + -0.601382749985825420, + 0.798845739514604580, -0.601535937795377730, 0.798730381758199210, + -0.601689103488172950, + 0.798614994634760820, -0.601842247058580030, 0.798499578148532120, + -0.601995368500968020, + 0.798384132303756380, -0.602148467809707210, 0.798268657104678430, + -0.602301544979168550, + 0.798153152555543750, -0.602454600003723750, 0.798037618660599410, + -0.602607632877745440, + 0.797922055424093000, -0.602760643595607220, 0.797806462850273570, + -0.602913632151683030, + 0.797690840943391160, -0.603066598540348160, 0.797575189707696700, + -0.603219542755978440, + 0.797459509147442460, -0.603372464792950260, 0.797343799266881700, + -0.603525364645641550, + 0.797228060070268700, -0.603678242308430370, 0.797112291561858920, + -0.603831097775695880, + 0.796996493745908750, -0.603983931041818020, 0.796880666626675780, + -0.604136742101177520, + 0.796764810208418830, -0.604289530948155960, 0.796648924495397260, + -0.604442297577135860, + 0.796533009491872000, -0.604595041982500360, 0.796417065202104980, + -0.604747764158633410, + 0.796301091630359110, -0.604900464099919820, 0.796185088780898440, + -0.605053141800745320, + 0.796069056657987990, -0.605205797255496500, 0.795952995265893910, + -0.605358430458560530, + 0.795836904608883570, -0.605511041404325550, 0.795720784691225090, + -0.605663630087180380, + 0.795604635517188070, -0.605816196501514970, 0.795488457091042990, + -0.605968740641719680, + 0.795372249417061310, -0.606121262502186120, 0.795256012499515610, + -0.606273762077306430, + 0.795139746342679590, -0.606426239361473550, 0.795023450950828050, + -0.606578694349081290, + 0.794907126328237010, -0.606731127034524480, 0.794790772479183170, + -0.606883537412198470, + 0.794674389407944550, -0.607035925476499650, 0.794557977118800380, + -0.607188291221825160, + 0.794441535616030590, -0.607340634642572930, 0.794325064903916520, + -0.607492955733141550, + 0.794208564986740640, -0.607645254487930830, 0.794092035868785960, + -0.607797530901341140, + 0.793975477554337170, -0.607949784967773630, 0.793858890047679730, + -0.608102016681630440, + 0.793742273353100210, -0.608254226037314490, 0.793625627474886300, + -0.608406413029229150, + 0.793508952417326660, -0.608558577651779450, 0.793392248184711100, + -0.608710719899370310, + 0.793275514781330630, -0.608862839766408200, 0.793158752211477140, + -0.609014937247299830, + 0.793041960479443640, -0.609167012336453210, 0.792925139589524260, + -0.609319065028276820, + 0.792808289546014120, -0.609471095317180240, 0.792691410353209450, + -0.609623103197573730, + 0.792574502015407690, -0.609775088663868430, 0.792457564536907080, + -0.609927051710476120, + 0.792340597922007170, -0.610078992331809620, 0.792223602175008310, + -0.610230910522282620, + 0.792106577300212390, -0.610382806276309480, 0.791989523301921850, + -0.610534679588305320, + 0.791872440184440470, -0.610686530452686280, 0.791755327952073150, + -0.610838358863869170, + 0.791638186609125880, -0.610990164816271660, 0.791521016159905220, + -0.611141948304312570, + 0.791403816608719500, -0.611293709322410890, 0.791286587959877830, + -0.611445447864987000, + 0.791169330217690200, -0.611597163926461910, 0.791052043386467950, + -0.611748857501257290, + 0.790934727470523290, -0.611900528583796070, 0.790817382474169770, + -0.612052177168501470, + 0.790700008401721610, -0.612203803249797950, 0.790582605257494460, + -0.612355406822110650, + 0.790465173045804880, -0.612506987879865570, 0.790347711770970520, + -0.612658546417489290, + 0.790230221437310030, -0.612810082429409710, 0.790112702049143300, + -0.612961595910055170, + 0.789995153610791090, -0.613113086853854910, 0.789877576126575280, + -0.613264555255239040, + 0.789759969600819070, -0.613416001108638590, 0.789642334037846340, + -0.613567424408485330, + 0.789524669441982190, -0.613718825149211720, 0.789406975817552930, + -0.613870203325251330, + 0.789289253168885650, -0.614021558931038380, 0.789171501500308900, + -0.614172891961007990, + 0.789053720816151880, -0.614324202409595950, 0.788935911120745240, + -0.614475490271239040, + 0.788818072418420280, -0.614626755540375050, 0.788700204713509660, + -0.614777998211442080, + 0.788582308010347120, -0.614929218278879590, 0.788464382313267540, + -0.615080415737127460, + 0.788346427626606340, -0.615231590580626820, 0.788228443954700490, + -0.615382742803819220, + 0.788110431301888070, -0.615533872401147320, 0.787992389672507950, + -0.615684979367054570, + 0.787874319070900220, -0.615836063695985090, 0.787756219501406060, + -0.615987125382383760, + 0.787638090968367450, -0.616138164420696910, 0.787519933476127810, + -0.616289180805370980, + 0.787401747029031430, -0.616440174530853650, 0.787283531631423620, + -0.616591145591593110, + 0.787165287287651010, -0.616742093982038720, 0.787047014002060790, + -0.616893019696640680, + 0.786928711779001810, -0.617043922729849760, 0.786810380622823490, + -0.617194803076117630, + 0.786692020537876790, -0.617345660729896830, 0.786573631528513230, + -0.617496495685640910, + 0.786455213599085770, -0.617647307937803870, 0.786336766753948260, + -0.617798097480841020, + 0.786218290997455660, -0.617948864309208150, 0.786099786333963930, + -0.618099608417362000, + 0.785981252767830150, -0.618250329799760250, 0.785862690303412600, + -0.618401028450860980, + 0.785744098945070360, -0.618551704365123740, 0.785625478697163700, + -0.618702357537008530, + 0.785506829564053930, -0.618852987960976320, 0.785388151550103550, + -0.619003595631488660, + 0.785269444659675850, -0.619154180543008410, 0.785150708897135560, + -0.619304742689998690, + 0.785031944266848080, -0.619455282066924020, 0.784913150773180020, + -0.619605798668249270, + 0.784794328420499230, -0.619756292488440660, 0.784675477213174320, + -0.619906763521964720, + 0.784556597155575240, -0.620057211763289100, 0.784437688252072830, + -0.620207637206882430, + 0.784318750507038920, -0.620358039847213720, 0.784199783924846570, + -0.620508419678753360, + 0.784080788509869950, -0.620658776695972140, 0.783961764266484120, + -0.620809110893341900, + 0.783842711199065230, -0.620959422265335180, 0.783723629311990470, + -0.621109710806425630, + 0.783604518609638200, -0.621259976511087550, 0.783485379096387820, + -0.621410219373796150, + 0.783366210776619720, -0.621560439389027160, 0.783247013654715380, + -0.621710636551257690, + 0.783127787735057310, -0.621860810854965360, 0.783008533022029110, + -0.622010962294628600, + 0.782889249520015480, -0.622161090864726820, 0.782769937233402050, + -0.622311196559740320, + 0.782650596166575730, -0.622461279374149970, 0.782531226323924240, + -0.622611339302437730, + 0.782411827709836530, -0.622761376339086350, 0.782292400328702400, + -0.622911390478579460, + 0.782172944184913010, -0.623061381715401260, 0.782053459282860300, + -0.623211350044037270, + 0.781933945626937630, -0.623361295458973230, 0.781814403221538830, + -0.623511217954696440, + 0.781694832071059390, -0.623661117525694530, 0.781575232179895550, + -0.623810994166456130, + 0.781455603552444590, -0.623960847871470660, 0.781335946193104870, + -0.624110678635228510, + 0.781216260106276090, -0.624260486452220650, 0.781096545296358520, + -0.624410271316939270, + 0.780976801767753750, -0.624560033223877210, 0.780857029524864580, + -0.624709772167528100, + 0.780737228572094490, -0.624859488142386340, 0.780617398913848400, + -0.625009181142947460, + 0.780497540554531910, -0.625158851163707620, 0.780377653498552040, + -0.625308498199164010, + 0.780257737750316590, -0.625458122243814360, 0.780137793314234610, + -0.625607723292157410, + 0.780017820194715990, -0.625757301338692900, 0.779897818396172000, + -0.625906856377921090, + 0.779777787923014550, -0.626056388404343520, 0.779657728779656890, + -0.626205897412462130, + 0.779537640970513260, -0.626355383396779990, 0.779417524499998900, + -0.626504846351800810, + 0.779297379372530300, -0.626654286272029350, 0.779177205592524680, + -0.626803703151971200, + 0.779057003164400630, -0.626953096986132660, 0.778936772092577500, + -0.627102467769020900, + 0.778816512381475980, -0.627251815495144080, 0.778696224035517530, + -0.627401140159011050, + 0.778575907059125050, -0.627550441755131530, 0.778455561456721900, + -0.627699720278016240, + 0.778335187232733210, -0.627848975722176460, 0.778214784391584540, + -0.627998208082124700, + 0.778094352937702790, -0.628147417352374000, 0.777973892875516100, + -0.628296603527438320, + 0.777853404209453150, -0.628445766601832710, 0.777732886943944050, + -0.628594906570072550, + 0.777612341083420030, -0.628744023426674680, 0.777491766632313010, + -0.628893117166156480, + 0.777371163595056310, -0.629042187783036000, 0.777250531976084070, + -0.629191235271832290, + 0.777129871779831620, -0.629340259627065630, 0.777009183010735290, + -0.629489260843256630, + 0.776888465673232440, -0.629638238914926980, 0.776767719771761510, + -0.629787193836599200, + 0.776646945310762060, -0.629936125602796440, 0.776526142294674430, + -0.630085034208043180, + 0.776405310727940390, -0.630233919646864370, 0.776284450615002510, + -0.630382781913785940, + 0.776163561960304340, -0.630531621003334600, 0.776042644768290770, + -0.630680436910037940, + 0.775921699043407690, -0.630829229628424470, 0.775800724790101650, + -0.630977999153023550, + 0.775679722012820650, -0.631126745478365340, 0.775558690716013580, + -0.631275468598980760, + 0.775437630904130540, -0.631424168509401860, 0.775316542581622530, + -0.631572845204161020, + 0.775195425752941420, -0.631721498677792260, 0.775074280422540450, + -0.631870128924829850, + 0.774953106594873930, -0.632018735939809060, 0.774831904274396850, + -0.632167319717265920, + 0.774710673465565550, -0.632315880251737570, 0.774589414172837550, + -0.632464417537761840, + 0.774468126400670860, -0.632612931569877410, 0.774346810153525130, + -0.632761422342624000, + 0.774225465435860680, -0.632909889850541750, 0.774104092252139050, + -0.633058334088172140, + 0.773982690606822900, -0.633206755050057190, 0.773861260504375540, + -0.633355152730739950, + 0.773739801949261840, -0.633503527124764320, 0.773618314945947460, + -0.633651878226674900, + 0.773496799498899050, -0.633800206031017280, 0.773375255612584470, + -0.633948510532337810, + 0.773253683291472590, -0.634096791725183740, 0.773132082540033070, + -0.634245049604103330, + 0.773010453362736990, -0.634393284163645490, 0.772888795764056220, + -0.634541495398360020, + 0.772767109748463850, -0.634689683302797740, 0.772645395320433860, + -0.634837847871509990, + 0.772523652484441330, -0.634985989099049460, 0.772401881244962450, + -0.635134106979969190, + 0.772280081606474320, -0.635282201508823420, 0.772158253573455240, + -0.635430272680167160, + 0.772036397150384520, -0.635578320488556110, 0.771914512341742350, + -0.635726344928547070, + 0.771792599152010150, -0.635874345994697720, 0.771670657585670330, + -0.636022323681566300, + 0.771548687647206300, -0.636170277983712170, 0.771426689341102590, + -0.636318208895695460, + 0.771304662671844830, -0.636466116412077180, 0.771182607643919330, + -0.636614000527419120, + 0.771060524261813820, -0.636761861236284200, 0.770938412530016940, + -0.636909698533235870, + 0.770816272453018540, -0.637057512412838590, 0.770694104035309140, + -0.637205302869657600, + 0.770571907281380810, -0.637353069898259130, 0.770449682195725960, + -0.637500813493210190, + 0.770327428782838890, -0.637648533649078810, 0.770205147047214210, + -0.637796230360433540, + 0.770082836993347900, -0.637943903621844060, 0.769960498625737230, + -0.638091553427880820, + 0.769838131948879840, -0.638239179773115280, 0.769715736967275130, + -0.638386782652119570, + 0.769593313685422940, -0.638534362059466790, 0.769470862107824670, + -0.638681917989730730, + 0.769348382238982280, -0.638829450437486290, 0.769225874083399260, + -0.638976959397309140, + 0.769103337645579700, -0.639124444863775730, 0.768980772930028870, + -0.639271906831463510, + 0.768858179941253270, -0.639419345294950700, 0.768735558683760310, + -0.639566760248816310, + 0.768612909162058380, -0.639714151687640450, 0.768490231380656860, + -0.639861519606003900, + 0.768367525344066270, -0.640008863998488440, 0.768244791056798330, + -0.640156184859676510, + 0.768122028523365420, -0.640303482184151670, 0.767999237748281270, + -0.640450755966498140, + 0.767876418736060610, -0.640598006201301030, 0.767753571491219030, + -0.640745232883146440, + 0.767630696018273380, -0.640892436006621380, 0.767507792321741270, + -0.641039615566313390, + 0.767384860406141730, -0.641186771556811250, 0.767261900275994500, + -0.641333903972704290, + 0.767138911935820400, -0.641481012808583160, 0.767015895390141480, + -0.641628098059038750, + 0.766892850643480670, -0.641775159718663500, 0.766769777700361920, + -0.641922197782050170, + 0.766646676565310380, -0.642069212243792540, 0.766523547242852210, + -0.642216203098485370, + 0.766400389737514230, -0.642363170340724320, 0.766277204053824710, + -0.642510113965105710, + 0.766153990196312920, -0.642657033966226860, 0.766030748169509000, + -0.642803930338685990, + 0.765907477977944340, -0.642950803077082080, 0.765784179626150970, + -0.643097652176015110, + 0.765660853118662500, -0.643244477630085850, 0.765537498460013070, + -0.643391279433895850, + 0.765414115654738270, -0.643538057582047740, 0.765290704707374370, + -0.643684812069144850, + 0.765167265622458960, -0.643831542889791390, 0.765043798404530520, + -0.643978250038592660, + 0.764920303058128410, -0.644124933510154540, 0.764796779587793460, + -0.644271593299083790, + 0.764673227998067140, -0.644418229399988380, 0.764549648293492150, + -0.644564841807476640, + 0.764426040478612070, -0.644711430516158310, 0.764302404557971720, + -0.644857995520643710, + 0.764178740536116670, -0.645004536815543930, 0.764055048417593970, + -0.645151054395471160, + 0.763931328206951090, -0.645297548255038380, 0.763807579908737160, + -0.645444018388859230, + 0.763683803527501870, -0.645590464791548690, 0.763559999067796150, + -0.645736887457722290, + 0.763436166534172010, -0.645883286381996320, 0.763312305931182380, + -0.646029661558988330, + 0.763188417263381270, -0.646176012983316280, 0.763064500535323710, + -0.646322340649599480, + 0.762940555751565720, -0.646468644552457780, 0.762816582916664430, + -0.646614924686512050, + 0.762692582035177980, -0.646761181046383920, 0.762568553111665380, + -0.646907413626696020, + 0.762444496150687210, -0.647053622422071540, 0.762320411156804270, + -0.647199807427135230, + 0.762196298134578900, -0.647345968636512060, 0.762072157088574560, + -0.647492106044828100, + 0.761947988023355390, -0.647638219646710310, 0.761823790943486960, + -0.647784309436786440, + 0.761699565853535380, -0.647930375409685340, 0.761575312758068000, + -0.648076417560036530, + 0.761451031661653620, -0.648222435882470420, 0.761326722568861360, + -0.648368430371618290, + 0.761202385484261780, -0.648514401022112440, 0.761078020412426560, + -0.648660347828585840, + 0.760953627357928150, -0.648806270785672550, 0.760829206325340010, + -0.648952169888007300, + 0.760704757319236920, -0.649098045130225950, 0.760580280344194450, + -0.649243896506964900, + 0.760455775404789260, -0.649389724012861660, 0.760331242505599030, + -0.649535527642554730, + 0.760206681651202420, -0.649681307390683190, 0.760082092846179340, + -0.649827063251887100, + 0.759957476095110330, -0.649972795220807530, 0.759832831402577400, + -0.650118503292086200, + 0.759708158773163440, -0.650264187460365850, 0.759583458211452010, + -0.650409847720290310, + 0.759458729722028210, -0.650555484066503880, 0.759333973309477940, + -0.650701096493652040, + 0.759209188978388070, -0.650846684996380880, 0.759084376733346610, + -0.650992249569337660, + 0.758959536578942440, -0.651137790207170330, 0.758834668519765660, + -0.651283306904527740, + 0.758709772560407390, -0.651428799656059820, 0.758584848705459610, + -0.651574268456416970, + 0.758459896959515430, -0.651719713300250910, 0.758334917327168960, + -0.651865134182213920, + 0.758209909813015280, -0.652010531096959500, 0.758084874421650730, + -0.652155904039141590, + 0.757959811157672300, -0.652301253003415460, 0.757834720025678310, + -0.652446577984436730, + 0.757709601030268080, -0.652591878976862440, 0.757584454176041810, + -0.652737155975350310, + 0.757459279467600720, -0.652882408974558850, 0.757334076909547130, + -0.653027637969147530, + 0.757208846506484570, -0.653172842953776760, 0.757083588263017140, + -0.653318023923107670, + 0.756958302183750490, -0.653463180871802330, 0.756832988273290820, + -0.653608313794523890, + 0.756707646536245670, -0.653753422685936060, 0.756582276977223470, + -0.653898507540703780, + 0.756456879600833740, -0.654043568353492640, 0.756331454411686920, + -0.654188605118969040, + 0.756206001414394540, -0.654333617831800440, 0.756080520613569120, + -0.654478606486655350, + 0.755955012013824420, -0.654623571078202680, 0.755829475619774760, + -0.654768511601112600, + 0.755703911436035880, -0.654913428050056030, 0.755578319467224540, + -0.655058320419704910, + 0.755452699717958250, -0.655203188704731820, 0.755327052192855670, + -0.655348032899810470, + 0.755201376896536550, -0.655492852999615350, 0.755075673833621620, + -0.655637648998821820, + 0.754949943008732640, -0.655782420892106030, 0.754824184426492350, + -0.655927168674145360, + 0.754698398091524500, -0.656071892339617600, 0.754572584008453840, + -0.656216591883201920, + 0.754446742181906440, -0.656361267299578000, 0.754320872616508820, + -0.656505918583426550, + 0.754194975316889170, -0.656650545729428940, 0.754069050287676120, + -0.656795148732268070, + 0.753943097533499640, -0.656939727586627110, 0.753817117058990790, + -0.657084282287190180, + 0.753691108868781210, -0.657228812828642540, 0.753565072967504300, + -0.657373319205670210, + 0.753439009359793580, -0.657517801412960120, 0.753312918050284330, + -0.657662259445200070, + 0.753186799043612520, -0.657806693297078640, 0.753060652344415100, + -0.657951102963285520, + 0.752934477957330150, -0.658095488438511180, 0.752808275886996950, + -0.658239849717446870, + 0.752682046138055340, -0.658384186794785050, 0.752555788715146390, + -0.658528499665218650, + 0.752429503622912390, -0.658672788323441890, 0.752303190865996400, + -0.658817052764149480, + 0.752176850449042810, -0.658961292982037320, 0.752050482376696360, + -0.659105508971802090, + 0.751924086653603550, -0.659249700728141490, 0.751797663284411550, + -0.659393868245753860, + 0.751671212273768430, -0.659538011519338660, 0.751544733626323680, + -0.659682130543596150, + 0.751418227346727470, -0.659826225313227320, 0.751291693439630870, + -0.659970295822934540, + 0.751165131909686480, -0.660114342067420480, 0.751038542761547360, + -0.660258364041389050, + 0.750911925999867890, -0.660402361739545030, 0.750785281629303690, + -0.660546335156593890, + 0.750658609654510700, -0.660690284287242300, 0.750531910080146410, + -0.660834209126197610, + 0.750405182910869330, -0.660978109668168060, 0.750278428151338720, + -0.661121985907862860, + 0.750151645806215070, -0.661265837839992270, 0.750024835880159780, + -0.661409665459266940, + 0.749897998377835330, -0.661553468760398890, 0.749771133303905100, + -0.661697247738101010, + 0.749644240663033480, -0.661841002387086870, 0.749517320459886170, + -0.661984732702070920, + 0.749390372699129560, -0.662128438677768720, 0.749263397385431130, + -0.662272120308896590, + 0.749136394523459370, -0.662415777590171780, 0.749009364117883880, + -0.662559410516312290, + 0.748882306173375150, -0.662703019082037440, 0.748755220694604760, + -0.662846603282066900, + 0.748628107686245440, -0.662990163111121470, 0.748500967152970430, + -0.663133698563923010, + 0.748373799099454560, -0.663277209635194100, 0.748246603530373420, + -0.663420696319658280, + 0.748119380450403600, -0.663564158612039770, 0.747992129864222700, + -0.663707596507064010, + 0.747864851776509410, -0.663851009999457340, 0.747737546191943330, + -0.663994399083946640, + 0.747610213115205150, -0.664137763755260010, 0.747482852550976570, + -0.664281104008126230, + 0.747355464503940190, -0.664424419837275180, 0.747228048978779920, + -0.664567711237437520, + 0.747100605980180130, -0.664710978203344790, 0.746973135512826850, + -0.664854220729729660, + 0.746845637581406540, -0.664997438811325340, 0.746718112190607130, + -0.665140632442866140, + 0.746590559345117310, -0.665283801619087180, 0.746462979049626770, + -0.665426946334724660, + 0.746335371308826320, -0.665570066584515450, 0.746207736127407760, + -0.665713162363197550, + 0.746080073510063780, -0.665856233665509720, 0.745952383461488290, + -0.665999280486191500, + 0.745824665986376090, -0.666142302819983540, 0.745696921089422760, + -0.666285300661627280, + 0.745569148775325430, -0.666428274005865240, 0.745441349048781680, + -0.666571222847440640, + 0.745313521914490520, -0.666714147181097670, 0.745185667377151640, + -0.666857047001581220, + 0.745057785441466060, -0.666999922303637470, 0.744929876112135350, + -0.667142773082013310, + 0.744801939393862630, -0.667285599331456370, 0.744673975291351710, + -0.667428401046715520, + 0.744545983809307370, -0.667571178222540310, 0.744417964952435620, + -0.667713930853681030, + 0.744289918725443260, -0.667856658934889320, 0.744161845133038180, + -0.667999362460917400, + 0.744033744179929290, -0.668142041426518450, 0.743905615870826490, + -0.668284695826446670, + 0.743777460210440890, -0.668427325655456820, 0.743649277203484060, + -0.668569930908304970, + 0.743521066854669120, -0.668712511579747980, 0.743392829168709970, + -0.668855067664543610, + 0.743264564150321600, -0.668997599157450270, 0.743136271804219820, + -0.669140106053227600, + 0.743007952135121720, -0.669282588346636010, 0.742879605147745200, + -0.669425046032436910, + 0.742751230846809050, -0.669567479105392490, 0.742622829237033490, + -0.669709887560265840, + 0.742494400323139180, -0.669852271391821020, 0.742365944109848460, + -0.669994630594823000, + 0.742237460601884000, -0.670136965164037650, 0.742108949803969910, + -0.670279275094231800, + 0.741980411720831070, -0.670421560380173090, 0.741851846357193480, + -0.670563821016630040, + 0.741723253717784140, -0.670706056998372160, 0.741594633807331150, + -0.670848268320169640, + 0.741465986630563290, -0.670990454976794220, 0.741337312192210660, + -0.671132616963017740, + 0.741208610497004260, -0.671274754273613490, 0.741079881549676080, + -0.671416866903355450, + 0.740951125354959110, -0.671558954847018330, 0.740822341917587330, + -0.671701018099378320, + 0.740693531242295760, -0.671843056655211930, 0.740564693333820250, + -0.671985070509296900, + 0.740435828196898020, -0.672127059656411730, 0.740306935836266940, + -0.672269024091335930, + 0.740178016256666240, -0.672410963808849790, 0.740049069462835550, + -0.672552878803734710, + 0.739920095459516200, -0.672694769070772860, 0.739791094251449950, + -0.672836634604747300, + 0.739662065843380010, -0.672978475400442090, 0.739533010240050250, + -0.673120291452642070, + 0.739403927446205760, -0.673262082756132970, 0.739274817466592520, + -0.673403849305701740, + 0.739145680305957510, -0.673545591096136100, 0.739016515969048720, + -0.673687308122224330, + 0.738887324460615110, -0.673829000378756040, 0.738758105785406900, + -0.673970667860521620, + 0.738628859948174840, -0.674112310562312360, 0.738499586953671130, + -0.674253928478920410, + 0.738370286806648620, -0.674395521605139050, 0.738240959511861310, + -0.674537089935762000, + 0.738111605074064260, -0.674678633465584540, 0.737982223498013570, + -0.674820152189402170, + 0.737852814788465980, -0.674961646102011930, 0.737723378950179700, + -0.675103115198211420, + 0.737593915987913570, -0.675244559472799270, 0.737464425906427580, + -0.675385978920574840, + 0.737334908710482910, -0.675527373536338520, 0.737205364404841190, + -0.675668743314891910, + 0.737075792994265730, -0.675810088251036940, 0.736946194483520280, + -0.675951408339577010, + 0.736816568877369900, -0.676092703575315920, 0.736686916180580460, + -0.676233973953058950, + 0.736557236397919150, -0.676375219467611590, 0.736427529534153690, + -0.676516440113781090, + 0.736297795594053170, -0.676657635886374950, 0.736168034582387330, + -0.676798806780201770, + 0.736038246503927350, -0.676939952790071130, 0.735908431363445190, + -0.677081073910793530, + 0.735778589165713590, -0.677222170137180330, 0.735648719915506510, + -0.677363241464043920, + 0.735518823617598900, -0.677504287886197430, 0.735388900276766730, + -0.677645309398454910, + 0.735258949897786840, -0.677786305995631500, 0.735128972485437180, + -0.677927277672543020, + 0.734998968044496710, -0.678068224424006600, 0.734868936579745170, + -0.678209146244839860, + 0.734738878095963500, -0.678350043129861470, 0.734608792597933550, + -0.678490915073891140, + 0.734478680090438370, -0.678631762071749360, 0.734348540578261600, + -0.678772584118257690, + 0.734218374066188280, -0.678913381208238410, 0.734088180559004040, + -0.679054153336514870, + 0.733957960061495940, -0.679194900497911200, 0.733827712578451700, + -0.679335622687252560, + 0.733697438114660370, -0.679476319899364970, 0.733567136674911360, + -0.679616992129075560, + 0.733436808263995710, -0.679757639371212030, 0.733306452886705260, + -0.679898261620603290, + 0.733176070547832740, -0.680038858872078930, 0.733045661252172080, + -0.680179431120469750, + 0.732915225004517780, -0.680319978360607200, 0.732784761809665790, + -0.680460500587323880, + 0.732654271672412820, -0.680600997795453020, 0.732523754597556700, + -0.680741469979829090, + 0.732393210589896040, -0.680881917135287230, 0.732262639654230770, + -0.681022339256663670, + 0.732132041795361290, -0.681162736338795430, 0.732001417018089630, + -0.681303108376520530, + 0.731870765327218290, -0.681443455364677870, 0.731740086727550980, + -0.681583777298107480, + 0.731609381223892630, -0.681724074171649710, 0.731478648821048520, + -0.681864345980146670, + 0.731347889523825570, -0.682004592718440830, 0.731217103337031270, + -0.682144814381375640, + 0.731086290265474340, -0.682285010963795570, 0.730955450313964360, + -0.682425182460546060, + 0.730824583487312160, -0.682565328866473250, 0.730693689790329000, + -0.682705450176424590, + 0.730562769227827590, -0.682845546385248080, 0.730431821804621520, + -0.682985617487792740, + 0.730300847525525490, -0.683125663478908680, 0.730169846395354870, + -0.683265684353446700, + 0.730038818418926260, -0.683405680106258680, 0.729907763601057140, + -0.683545650732197530, + 0.729776681946566090, -0.683685596226116580, 0.729645573460272480, + -0.683825516582870720, + 0.729514438146997010, -0.683965411797315400, 0.729383276011561050, + -0.684105281864307080, + 0.729252087058786970, -0.684245126778703080, 0.729120871293498230, + -0.684384946535361750, + 0.728989628720519420, -0.684524741129142300, 0.728858359344675800, + -0.684664510554904960, + 0.728727063170793830, -0.684804254807510620, 0.728595740203700770, + -0.684943973881821490, + 0.728464390448225200, -0.685083667772700360, 0.728333013909196360, + -0.685223336475011210, + 0.728201610591444610, -0.685362979983618730, 0.728070180499801210, + -0.685502598293388550, + 0.727938723639098620, -0.685642191399187470, 0.727807240014169960, + -0.685781759295883030, + 0.727675729629849610, -0.685921301978343560, 0.727544192490972800, + -0.686060819441438710, + 0.727412628602375770, -0.686200311680038590, 0.727281037968895870, + -0.686339778689014520, + 0.727149420595371020, -0.686479220463238950, 0.727017776486640680, + -0.686618636997584630, + 0.726886105647544970, -0.686758028286925890, 0.726754408082925020, + -0.686897394326137610, + 0.726622683797622850, -0.687036735110095660, 0.726490932796481910, + -0.687176050633676820, + 0.726359155084346010, -0.687315340891759050, 0.726227350666060370, + -0.687454605879221030, + 0.726095519546471000, -0.687593845590942170, 0.725963661730424930, + -0.687733060021803230, + 0.725831777222770370, -0.687872249166685550, 0.725699866028356120, + -0.688011413020471640, + 0.725567928152032300, -0.688150551578044830, 0.725435963598649810, + -0.688289664834289330, + 0.725303972373060770, -0.688428752784090440, 0.725171954480117950, + -0.688567815422334250, + 0.725039909924675370, -0.688706852743907750, 0.724907838711587820, + -0.688845864743699020, + 0.724775740845711280, -0.688984851416597040, 0.724643616331902550, + -0.689123812757491570, + 0.724511465175019630, -0.689262748761273470, 0.724379287379921190, + -0.689401659422834270, + 0.724247082951467000, -0.689540544737066830, 0.724114851894517850, + -0.689679404698864800, + 0.723982594213935520, -0.689818239303122470, 0.723850309914582880, + -0.689957048544735390, + 0.723717999001323500, -0.690095832418599950, 0.723585661479022150, + -0.690234590919613370, + 0.723453297352544380, -0.690373324042674040, 0.723320906626756970, + -0.690512031782681060, + 0.723188489306527460, -0.690650714134534600, 0.723056045396724410, + -0.690789371093135650, + 0.722923574902217700, -0.690928002653386160, 0.722791077827877550, + -0.691066608810189220, + 0.722658554178575610, -0.691205189558448450, 0.722526003959184540, + -0.691343744893068710, + 0.722393427174577550, -0.691482274808955850, 0.722260823829629310, + -0.691620779301016290, + 0.722128193929215350, -0.691759258364157750, 0.721995537478211880, + -0.691897711993288760, + 0.721862854481496340, -0.692036140183318720, 0.721730144943947160, + -0.692174542929158140, + 0.721597408870443770, -0.692312920225718220, 0.721464646265866370, + -0.692451272067911130, + 0.721331857135096290, -0.692589598450650380, 0.721199041483015720, + -0.692727899368849820, + 0.721066199314508110, -0.692866174817424630, 0.720933330634457530, + -0.693004424791290870, + 0.720800435447749190, -0.693142649285365400, 0.720667513759269520, + -0.693280848294566040, + 0.720534565573905270, -0.693419021813811760, 0.720401590896544760, + -0.693557169838022290, + 0.720268589732077190, -0.693695292362118240, 0.720135562085392420, + -0.693833389381021350, + 0.720002507961381650, -0.693971460889654000, 0.719869427364936860, + -0.694109506882939820, + 0.719736320300951030, -0.694247527355803310, 0.719603186774318120, + -0.694385522303169740, + 0.719470026789932990, -0.694523491719965520, 0.719336840352691740, + -0.694661435601117820, + 0.719203627467491220, -0.694799353941554900, 0.719070388139229190, + -0.694937246736205830, + 0.718937122372804490, -0.695075113980000880, 0.718803830173116890, + -0.695212955667870780, + 0.718670511545067230, -0.695350771794747690, 0.718537166493557370, + -0.695488562355564440, + 0.718403795023489830, -0.695626327345254870, 0.718270397139768260, + -0.695764066758753690, + 0.718136972847297490, -0.695901780590996830, 0.718003522150983180, + -0.696039468836920690, + 0.717870045055731710, -0.696177131491462990, 0.717736541566450950, + -0.696314768549562090, + 0.717603011688049080, -0.696452380006157830, 0.717469455425435830, + -0.696589965856190370, + 0.717335872783521730, -0.696727526094601200, 0.717202263767218070, + -0.696865060716332470, + 0.717068628381437480, -0.697002569716327460, 0.716934966631093130, + -0.697140053089530420, + 0.716801278521099540, -0.697277510830886520, 0.716667564056371890, + -0.697414942935341790, + 0.716533823241826680, -0.697552349397843160, 0.716400056082381000, + -0.697689730213338800, + 0.716266262582953120, -0.697827085376777290, 0.716132442748462330, + -0.697964414883108670, + 0.715998596583828690, -0.698101718727283770, 0.715864724093973500, + -0.698238996904254280, + 0.715730825283818590, -0.698376249408972920, 0.715596900158287470, + -0.698513476236393040, + 0.715462948722303760, -0.698650677381469460, 0.715328970980792620, + -0.698787852839157670, + 0.715194966938680120, -0.698925002604414150, 0.715060936600893090, + -0.699062126672196140, + 0.714926879972359490, -0.699199225037462120, 0.714792797058008240, + -0.699336297695171140, + 0.714658687862769090, -0.699473344640283770, 0.714524552391572860, + -0.699610365867761040, + 0.714390390649351390, -0.699747361372564990, 0.714256202641037510, + -0.699884331149658760, + 0.714121988371564820, -0.700021275194006250, 0.713987747845867830, + -0.700158193500572730, + 0.713853481068882470, -0.700295086064323780, 0.713719188045545240, + -0.700431952880226420, + 0.713584868780793640, -0.700568793943248340, 0.713450523279566260, + -0.700705609248358450, + 0.713316151546802610, -0.700842398790526120, 0.713181753587443180, + -0.700979162564722370, + 0.713047329406429340, -0.701115900565918660, 0.712912879008703480, + -0.701252612789087460, + 0.712778402399208980, -0.701389299229202230, 0.712643899582890210, + -0.701525959881237340, + 0.712509370564692320, -0.701662594740168450, 0.712374815349561710, + -0.701799203800971720, + 0.712240233942445510, -0.701935787058624360, 0.712105626348291890, + -0.702072344508104630, + 0.711970992572050100, -0.702208876144391870, 0.711836332618670080, + -0.702345381962465880, + 0.711701646493102970, -0.702481861957308000, 0.711566934200300700, + -0.702618316123900130, + 0.711432195745216430, -0.702754744457225300, 0.711297431132803970, + -0.702891146952267400, + 0.711162640368018350, -0.703027523604011220, 0.711027823455815280, + -0.703163874407442770, + 0.710892980401151680, -0.703300199357548730, 0.710758111208985350, + -0.703436498449316660, + 0.710623215884275020, -0.703572771677735580, 0.710488294431980470, + -0.703709019037794810, + 0.710353346857062420, -0.703845240524484940, 0.710218373164482220, + -0.703981436132797620, + 0.710083373359202800, -0.704117605857725310, 0.709948347446187400, + -0.704253749694261470, + 0.709813295430400840, -0.704389867637400410, 0.709678217316808580, + -0.704525959682137380, + 0.709543113110376770, -0.704662025823468820, 0.709407982816072980, + -0.704798066056391950, + 0.709272826438865690, -0.704934080375904880, 0.709137643983724030, + -0.705070068777006840, + 0.709002435455618250, -0.705206031254697830, 0.708867200859519820, + -0.705341967803978840, + 0.708731940200400650, -0.705477878419852100, 0.708596653483234080, + -0.705613763097320490, + 0.708461340712994160, -0.705749621831387790, 0.708326001894655890, + -0.705885454617058980, + 0.708190637033195400, -0.706021261449339740, 0.708055246133589500, + -0.706157042323237060, + 0.707919829200816310, -0.706292797233758480, 0.707784386239854620, + -0.706428526175912790, + 0.707648917255684350, -0.706564229144709510, 0.707513422253286280, + -0.706699906135159430, + 0.707377901237642100, -0.706835557142273750, 0.707242354213734710, + -0.706971182161065360, + 0.707106781186547570, -0.707106781186547460, 0.706971182161065360, + -0.707242354213734600, + 0.706835557142273860, -0.707377901237642100, 0.706699906135159430, + -0.707513422253286170, + 0.706564229144709620, -0.707648917255684350, 0.706428526175912790, + -0.707784386239854620, + 0.706292797233758480, -0.707919829200816310, 0.706157042323237060, + -0.708055246133589500, + 0.706021261449339740, -0.708190637033195290, 0.705885454617058980, + -0.708326001894655780, + 0.705749621831387790, -0.708461340712994050, 0.705613763097320490, + -0.708596653483234080, + 0.705477878419852210, -0.708731940200400650, 0.705341967803978950, + -0.708867200859519820, + 0.705206031254697830, -0.709002435455618250, 0.705070068777006840, + -0.709137643983723920, + 0.704934080375904990, -0.709272826438865580, 0.704798066056391950, + -0.709407982816072980, + 0.704662025823468930, -0.709543113110376770, 0.704525959682137380, + -0.709678217316808470, + 0.704389867637400410, -0.709813295430400840, 0.704253749694261580, + -0.709948347446187400, + 0.704117605857725430, -0.710083373359202690, 0.703981436132797730, + -0.710218373164482220, + 0.703845240524484940, -0.710353346857062310, 0.703709019037794810, + -0.710488294431980470, + 0.703572771677735580, -0.710623215884275020, 0.703436498449316770, + -0.710758111208985350, + 0.703300199357548730, -0.710892980401151680, 0.703163874407442770, + -0.711027823455815280, + 0.703027523604011220, -0.711162640368018350, 0.702891146952267400, + -0.711297431132803970, + 0.702754744457225300, -0.711432195745216430, 0.702618316123900130, + -0.711566934200300700, + 0.702481861957308000, -0.711701646493102970, 0.702345381962465880, + -0.711836332618670080, + 0.702208876144391870, -0.711970992572049990, 0.702072344508104740, + -0.712105626348291890, + 0.701935787058624360, -0.712240233942445510, 0.701799203800971720, + -0.712374815349561710, + 0.701662594740168570, -0.712509370564692320, 0.701525959881237450, + -0.712643899582890210, + 0.701389299229202230, -0.712778402399208870, 0.701252612789087460, + -0.712912879008703370, + 0.701115900565918660, -0.713047329406429230, 0.700979162564722480, + -0.713181753587443070, + 0.700842398790526230, -0.713316151546802610, 0.700705609248358450, + -0.713450523279566150, + 0.700568793943248450, -0.713584868780793520, 0.700431952880226420, + -0.713719188045545130, + 0.700295086064323780, -0.713853481068882470, 0.700158193500572730, + -0.713987747845867830, + 0.700021275194006360, -0.714121988371564710, 0.699884331149658760, + -0.714256202641037400, + 0.699747361372564990, -0.714390390649351390, 0.699610365867761040, + -0.714524552391572860, + 0.699473344640283770, -0.714658687862768980, 0.699336297695171250, + -0.714792797058008130, + 0.699199225037462120, -0.714926879972359370, 0.699062126672196140, + -0.715060936600892980, + 0.698925002604414150, -0.715194966938680010, 0.698787852839157790, + -0.715328970980792620, + 0.698650677381469580, -0.715462948722303650, 0.698513476236393040, + -0.715596900158287360, + 0.698376249408972920, -0.715730825283818590, 0.698238996904254390, + -0.715864724093973390, + 0.698101718727283880, -0.715998596583828690, 0.697964414883108790, + -0.716132442748462330, + 0.697827085376777290, -0.716266262582953120, 0.697689730213338800, + -0.716400056082380890, + 0.697552349397843270, -0.716533823241826570, 0.697414942935341790, + -0.716667564056371890, + 0.697277510830886630, -0.716801278521099540, 0.697140053089530530, + -0.716934966631093130, + 0.697002569716327460, -0.717068628381437480, 0.696865060716332470, + -0.717202263767218070, + 0.696727526094601200, -0.717335872783521730, 0.696589965856190370, + -0.717469455425435830, + 0.696452380006157830, -0.717603011688049080, 0.696314768549562200, + -0.717736541566450840, + 0.696177131491462990, -0.717870045055731710, 0.696039468836920690, + -0.718003522150983060, + 0.695901780590996830, -0.718136972847297490, 0.695764066758753800, + -0.718270397139768260, + 0.695626327345254870, -0.718403795023489720, 0.695488562355564440, + -0.718537166493557370, + 0.695350771794747800, -0.718670511545067230, 0.695212955667870890, + -0.718803830173116890, + 0.695075113980000880, -0.718937122372804380, 0.694937246736205940, + -0.719070388139229190, + 0.694799353941554900, -0.719203627467491220, 0.694661435601117930, + -0.719336840352691740, + 0.694523491719965520, -0.719470026789932990, 0.694385522303169860, + -0.719603186774318000, + 0.694247527355803310, -0.719736320300951030, 0.694109506882939820, + -0.719869427364936860, + 0.693971460889654000, -0.720002507961381650, 0.693833389381021350, + -0.720135562085392310, + 0.693695292362118350, -0.720268589732077080, 0.693557169838022400, + -0.720401590896544760, + 0.693419021813811880, -0.720534565573905270, 0.693280848294566150, + -0.720667513759269410, + 0.693142649285365510, -0.720800435447749190, 0.693004424791290870, + -0.720933330634457530, + 0.692866174817424740, -0.721066199314508110, 0.692727899368849820, + -0.721199041483015720, + 0.692589598450650380, -0.721331857135096180, 0.692451272067911240, + -0.721464646265866370, + 0.692312920225718220, -0.721597408870443660, 0.692174542929158140, + -0.721730144943947160, + 0.692036140183318830, -0.721862854481496340, 0.691897711993288760, + -0.721995537478211880, + 0.691759258364157750, -0.722128193929215350, 0.691620779301016400, + -0.722260823829629310, + 0.691482274808955850, -0.722393427174577550, 0.691343744893068820, + -0.722526003959184430, + 0.691205189558448450, -0.722658554178575610, 0.691066608810189220, + -0.722791077827877550, + 0.690928002653386280, -0.722923574902217700, 0.690789371093135760, + -0.723056045396724410, + 0.690650714134534720, -0.723188489306527350, 0.690512031782681170, + -0.723320906626756850, + 0.690373324042674040, -0.723453297352544380, 0.690234590919613370, + -0.723585661479022040, + 0.690095832418599950, -0.723717999001323390, 0.689957048544735390, + -0.723850309914582880, + 0.689818239303122470, -0.723982594213935520, 0.689679404698864800, + -0.724114851894517850, + 0.689540544737066940, -0.724247082951466890, 0.689401659422834380, + -0.724379287379921080, + 0.689262748761273470, -0.724511465175019520, 0.689123812757491680, + -0.724643616331902550, + 0.688984851416597150, -0.724775740845711280, 0.688845864743699130, + -0.724907838711587820, + 0.688706852743907750, -0.725039909924675370, 0.688567815422334360, + -0.725171954480117840, + 0.688428752784090550, -0.725303972373060660, 0.688289664834289440, + -0.725435963598649810, + 0.688150551578044830, -0.725567928152032300, 0.688011413020471640, + -0.725699866028356120, + 0.687872249166685550, -0.725831777222770370, 0.687733060021803230, + -0.725963661730424930, + 0.687593845590942170, -0.726095519546470890, 0.687454605879221030, + -0.726227350666060260, + 0.687315340891759160, -0.726359155084346010, 0.687176050633676930, + -0.726490932796481910, + 0.687036735110095660, -0.726622683797622850, 0.686897394326137610, + -0.726754408082924910, + 0.686758028286925890, -0.726886105647544970, 0.686618636997584740, + -0.727017776486640680, + 0.686479220463238950, -0.727149420595371020, 0.686339778689014630, + -0.727281037968895760, + 0.686200311680038700, -0.727412628602375770, 0.686060819441438710, + -0.727544192490972800, + 0.685921301978343670, -0.727675729629849610, 0.685781759295883030, + -0.727807240014169960, + 0.685642191399187470, -0.727938723639098620, 0.685502598293388670, + -0.728070180499801210, + 0.685362979983618730, -0.728201610591444500, 0.685223336475011210, + -0.728333013909196360, + 0.685083667772700360, -0.728464390448225200, 0.684943973881821490, + -0.728595740203700770, + 0.684804254807510620, -0.728727063170793720, 0.684664510554904960, + -0.728858359344675690, + 0.684524741129142300, -0.728989628720519310, 0.684384946535361750, + -0.729120871293498230, + 0.684245126778703080, -0.729252087058786970, 0.684105281864307080, + -0.729383276011561050, + 0.683965411797315510, -0.729514438146996900, 0.683825516582870830, + -0.729645573460272480, + 0.683685596226116690, -0.729776681946565970, 0.683545650732197530, + -0.729907763601057140, + 0.683405680106258790, -0.730038818418926150, 0.683265684353446700, + -0.730169846395354870, + 0.683125663478908800, -0.730300847525525380, 0.682985617487792850, + -0.730431821804621520, + 0.682845546385248080, -0.730562769227827590, 0.682705450176424590, + -0.730693689790328890, + 0.682565328866473250, -0.730824583487312050, 0.682425182460546060, + -0.730955450313964360, + 0.682285010963795570, -0.731086290265474230, 0.682144814381375640, + -0.731217103337031160, + 0.682004592718440830, -0.731347889523825460, 0.681864345980146780, + -0.731478648821048520, + 0.681724074171649820, -0.731609381223892520, 0.681583777298107480, + -0.731740086727550980, + 0.681443455364677990, -0.731870765327218290, 0.681303108376520530, + -0.732001417018089520, + 0.681162736338795430, -0.732132041795361290, 0.681022339256663670, + -0.732262639654230660, + 0.680881917135287340, -0.732393210589896040, 0.680741469979829090, + -0.732523754597556590, + 0.680600997795453130, -0.732654271672412820, 0.680460500587323880, + -0.732784761809665790, + 0.680319978360607200, -0.732915225004517780, 0.680179431120469750, + -0.733045661252171970, + 0.680038858872079040, -0.733176070547832740, 0.679898261620603290, + -0.733306452886705260, + 0.679757639371212030, -0.733436808263995710, 0.679616992129075560, + -0.733567136674911360, + 0.679476319899365080, -0.733697438114660260, 0.679335622687252670, + -0.733827712578451700, + 0.679194900497911200, -0.733957960061495940, 0.679054153336514870, + -0.734088180559004040, + 0.678913381208238410, -0.734218374066188170, 0.678772584118257690, + -0.734348540578261600, + 0.678631762071749470, -0.734478680090438370, 0.678490915073891250, + -0.734608792597933550, + 0.678350043129861580, -0.734738878095963390, 0.678209146244839860, + -0.734868936579745060, + 0.678068224424006600, -0.734998968044496600, 0.677927277672543130, + -0.735128972485437180, + 0.677786305995631500, -0.735258949897786730, 0.677645309398454910, + -0.735388900276766620, + 0.677504287886197430, -0.735518823617598900, 0.677363241464044030, + -0.735648719915506400, + 0.677222170137180450, -0.735778589165713480, 0.677081073910793530, + -0.735908431363445190, + 0.676939952790071240, -0.736038246503927350, 0.676798806780201770, + -0.736168034582387330, + 0.676657635886374950, -0.736297795594053060, 0.676516440113781090, + -0.736427529534153690, + 0.676375219467611700, -0.736557236397919150, 0.676233973953058950, + -0.736686916180580460, + 0.676092703575316030, -0.736816568877369790, 0.675951408339577010, + -0.736946194483520170, + 0.675810088251037060, -0.737075792994265620, 0.675668743314891910, + -0.737205364404841190, + 0.675527373536338630, -0.737334908710482790, 0.675385978920574950, + -0.737464425906427580, + 0.675244559472799270, -0.737593915987913460, 0.675103115198211530, + -0.737723378950179590, + 0.674961646102012040, -0.737852814788465980, 0.674820152189402280, + -0.737982223498013570, + 0.674678633465584540, -0.738111605074064260, 0.674537089935762110, + -0.738240959511861310, + 0.674395521605139050, -0.738370286806648510, 0.674253928478920520, + -0.738499586953671130, + 0.674112310562312360, -0.738628859948174840, 0.673970667860521620, + -0.738758105785406900, + 0.673829000378756150, -0.738887324460615110, 0.673687308122224330, + -0.739016515969048600, + 0.673545591096136100, -0.739145680305957400, 0.673403849305701850, + -0.739274817466592520, + 0.673262082756132970, -0.739403927446205760, 0.673120291452642070, + -0.739533010240050250, + 0.672978475400442090, -0.739662065843379900, 0.672836634604747410, + -0.739791094251449950, + 0.672694769070772970, -0.739920095459516090, 0.672552878803734820, + -0.740049069462835550, + 0.672410963808849900, -0.740178016256666240, 0.672269024091336040, + -0.740306935836266940, + 0.672127059656411840, -0.740435828196898020, 0.671985070509296900, + -0.740564693333820250, + 0.671843056655211930, -0.740693531242295640, 0.671701018099378320, + -0.740822341917587330, + 0.671558954847018330, -0.740951125354959110, 0.671416866903355450, + -0.741079881549676080, + 0.671274754273613490, -0.741208610497004260, 0.671132616963017850, + -0.741337312192210660, + 0.670990454976794220, -0.741465986630563290, 0.670848268320169750, + -0.741594633807331150, + 0.670706056998372160, -0.741723253717784140, 0.670563821016630040, + -0.741851846357193480, + 0.670421560380173090, -0.741980411720830960, 0.670279275094231910, + -0.742108949803969800, + 0.670136965164037760, -0.742237460601884000, 0.669994630594823000, + -0.742365944109848460, + 0.669852271391821130, -0.742494400323139180, 0.669709887560265840, + -0.742622829237033380, + 0.669567479105392490, -0.742751230846809050, 0.669425046032436910, + -0.742879605147745090, + 0.669282588346636010, -0.743007952135121720, 0.669140106053227710, + -0.743136271804219820, + 0.668997599157450270, -0.743264564150321490, 0.668855067664543610, + -0.743392829168709970, + 0.668712511579748090, -0.743521066854669120, 0.668569930908305080, + -0.743649277203484060, + 0.668427325655456820, -0.743777460210440780, 0.668284695826446670, + -0.743905615870826490, + 0.668142041426518560, -0.744033744179929180, 0.667999362460917510, + -0.744161845133038070, + 0.667856658934889440, -0.744289918725443140, 0.667713930853681140, + -0.744417964952435620, + 0.667571178222540310, -0.744545983809307250, 0.667428401046715640, + -0.744673975291351600, + 0.667285599331456480, -0.744801939393862630, 0.667142773082013310, + -0.744929876112135350, + 0.666999922303637470, -0.745057785441465950, 0.666857047001581220, + -0.745185667377151640, + 0.666714147181097670, -0.745313521914490410, 0.666571222847440750, + -0.745441349048781680, + 0.666428274005865350, -0.745569148775325430, 0.666285300661627390, + -0.745696921089422760, + 0.666142302819983540, -0.745824665986375980, 0.665999280486191500, + -0.745952383461488180, + 0.665856233665509720, -0.746080073510063780, 0.665713162363197660, + -0.746207736127407650, + 0.665570066584515560, -0.746335371308826320, 0.665426946334724660, + -0.746462979049626770, + 0.665283801619087180, -0.746590559345117310, 0.665140632442866140, + -0.746718112190607020, + 0.664997438811325340, -0.746845637581406540, 0.664854220729729660, + -0.746973135512826740, + 0.664710978203344900, -0.747100605980180130, 0.664567711237437520, + -0.747228048978779920, + 0.664424419837275180, -0.747355464503940190, 0.664281104008126230, + -0.747482852550976570, + 0.664137763755260010, -0.747610213115205150, 0.663994399083946640, + -0.747737546191943330, + 0.663851009999457340, -0.747864851776509410, 0.663707596507064120, + -0.747992129864222700, + 0.663564158612039880, -0.748119380450403490, 0.663420696319658280, + -0.748246603530373420, + 0.663277209635194100, -0.748373799099454560, 0.663133698563923010, + -0.748500967152970430, + 0.662990163111121470, -0.748628107686245330, 0.662846603282066900, + -0.748755220694604760, + 0.662703019082037440, -0.748882306173375030, 0.662559410516312400, + -0.749009364117883770, + 0.662415777590171780, -0.749136394523459260, 0.662272120308896590, + -0.749263397385431020, + 0.662128438677768720, -0.749390372699129560, 0.661984732702071030, + -0.749517320459886170, + 0.661841002387086870, -0.749644240663033480, 0.661697247738101120, + -0.749771133303904990, + 0.661553468760399000, -0.749897998377835220, 0.661409665459266940, + -0.750024835880159780, + 0.661265837839992270, -0.750151645806214960, 0.661121985907862970, + -0.750278428151338610, + 0.660978109668168060, -0.750405182910869220, 0.660834209126197610, + -0.750531910080146410, + 0.660690284287242300, -0.750658609654510590, 0.660546335156593890, + -0.750785281629303580, + 0.660402361739545030, -0.750911925999867890, 0.660258364041389050, + -0.751038542761547250, + 0.660114342067420480, -0.751165131909686370, 0.659970295822934540, + -0.751291693439630870, + 0.659826225313227430, -0.751418227346727360, 0.659682130543596150, + -0.751544733626323570, + 0.659538011519338770, -0.751671212273768430, 0.659393868245753970, + -0.751797663284411440, + 0.659249700728141490, -0.751924086653603550, 0.659105508971802200, + -0.752050482376696360, + 0.658961292982037320, -0.752176850449042700, 0.658817052764149480, + -0.752303190865996400, + 0.658672788323441890, -0.752429503622912390, 0.658528499665218760, + -0.752555788715146390, + 0.658384186794785050, -0.752682046138055230, 0.658239849717446980, + -0.752808275886996950, + 0.658095488438511290, -0.752934477957330150, 0.657951102963285630, + -0.753060652344415100, + 0.657806693297078640, -0.753186799043612410, 0.657662259445200070, + -0.753312918050284330, + 0.657517801412960120, -0.753439009359793580, 0.657373319205670210, + -0.753565072967504190, + 0.657228812828642650, -0.753691108868781210, 0.657084282287190180, + -0.753817117058990680, + 0.656939727586627110, -0.753943097533499640, 0.656795148732268070, + -0.754069050287676120, + 0.656650545729429050, -0.754194975316889170, 0.656505918583426550, + -0.754320872616508820, + 0.656361267299578000, -0.754446742181906330, 0.656216591883202030, + -0.754572584008453840, + 0.656071892339617710, -0.754698398091524390, 0.655927168674145360, + -0.754824184426492240, + 0.655782420892106030, -0.754949943008732640, 0.655637648998821820, + -0.755075673833621510, + 0.655492852999615460, -0.755201376896536550, 0.655348032899810580, + -0.755327052192855560, + 0.655203188704731930, -0.755452699717958140, 0.655058320419704910, + -0.755578319467224540, + 0.654913428050056150, -0.755703911436035880, 0.654768511601112600, + -0.755829475619774760, + 0.654623571078202680, -0.755955012013824310, 0.654478606486655350, + -0.756080520613569120, + 0.654333617831800550, -0.756206001414394540, 0.654188605118969040, + -0.756331454411686920, + 0.654043568353492640, -0.756456879600833630, 0.653898507540703890, + -0.756582276977223470, + 0.653753422685936170, -0.756707646536245670, 0.653608313794523890, + -0.756832988273290820, + 0.653463180871802330, -0.756958302183750490, 0.653318023923107670, + -0.757083588263017140, + 0.653172842953776760, -0.757208846506484460, 0.653027637969147650, + -0.757334076909547130, + 0.652882408974558960, -0.757459279467600720, 0.652737155975350420, + -0.757584454176041810, + 0.652591878976862550, -0.757709601030268080, 0.652446577984436840, + -0.757834720025678310, + 0.652301253003415460, -0.757959811157672300, 0.652155904039141700, + -0.758084874421650620, + 0.652010531096959500, -0.758209909813015280, 0.651865134182214030, + -0.758334917327168960, + 0.651719713300251020, -0.758459896959515320, 0.651574268456417080, + -0.758584848705459500, + 0.651428799656059820, -0.758709772560407390, 0.651283306904527850, + -0.758834668519765660, + 0.651137790207170330, -0.758959536578942440, 0.650992249569337660, + -0.759084376733346500, + 0.650846684996380990, -0.759209188978387960, 0.650701096493652040, + -0.759333973309477940, + 0.650555484066503990, -0.759458729722028210, 0.650409847720290420, + -0.759583458211452010, + 0.650264187460365960, -0.759708158773163440, 0.650118503292086200, + -0.759832831402577400, + 0.649972795220807530, -0.759957476095110330, 0.649827063251887100, + -0.760082092846179220, + 0.649681307390683190, -0.760206681651202420, 0.649535527642554730, + -0.760331242505599030, + 0.649389724012861770, -0.760455775404789260, 0.649243896506965010, + -0.760580280344194340, + 0.649098045130226060, -0.760704757319236920, 0.648952169888007410, + -0.760829206325340010, + 0.648806270785672550, -0.760953627357928040, 0.648660347828585840, + -0.761078020412426560, + 0.648514401022112550, -0.761202385484261780, 0.648368430371618400, + -0.761326722568861250, + 0.648222435882470420, -0.761451031661653510, 0.648076417560036530, + -0.761575312758068000, + 0.647930375409685460, -0.761699565853535270, 0.647784309436786550, + -0.761823790943486840, + 0.647638219646710420, -0.761947988023355390, 0.647492106044828100, + -0.762072157088574560, + 0.647345968636512060, -0.762196298134578900, 0.647199807427135230, + -0.762320411156804160, + 0.647053622422071650, -0.762444496150687100, 0.646907413626696020, + -0.762568553111665380, + 0.646761181046383920, -0.762692582035177870, 0.646614924686512050, + -0.762816582916664320, + 0.646468644552457890, -0.762940555751565720, 0.646322340649599590, + -0.763064500535323710, + 0.646176012983316390, -0.763188417263381270, 0.646029661558988330, + -0.763312305931182380, + 0.645883286381996440, -0.763436166534172010, 0.645736887457722290, + -0.763559999067796150, + 0.645590464791548800, -0.763683803527501870, 0.645444018388859230, + -0.763807579908737160, + 0.645297548255038380, -0.763931328206951090, 0.645151054395471270, + -0.764055048417593860, + 0.645004536815544040, -0.764178740536116670, 0.644857995520643710, + -0.764302404557971720, + 0.644711430516158420, -0.764426040478612070, 0.644564841807476750, + -0.764549648293492150, + 0.644418229399988380, -0.764673227998067140, 0.644271593299083900, + -0.764796779587793460, + 0.644124933510154540, -0.764920303058128410, 0.643978250038592660, + -0.765043798404530410, + 0.643831542889791500, -0.765167265622458960, 0.643684812069144960, + -0.765290704707374260, + 0.643538057582047850, -0.765414115654738160, 0.643391279433895960, + -0.765537498460013070, + 0.643244477630085850, -0.765660853118662390, 0.643097652176015110, + -0.765784179626150970, + 0.642950803077082080, -0.765907477977944230, 0.642803930338686100, + -0.766030748169509000, + 0.642657033966226860, -0.766153990196312810, 0.642510113965105710, + -0.766277204053824710, + 0.642363170340724320, -0.766400389737514120, 0.642216203098485370, + -0.766523547242852100, + 0.642069212243792540, -0.766646676565310380, 0.641922197782050170, + -0.766769777700361920, + 0.641775159718663500, -0.766892850643480670, 0.641628098059038860, + -0.767015895390141480, + 0.641481012808583160, -0.767138911935820400, 0.641333903972704290, + -0.767261900275994390, + 0.641186771556811250, -0.767384860406141620, 0.641039615566313390, + -0.767507792321741270, + 0.640892436006621380, -0.767630696018273270, 0.640745232883146440, + -0.767753571491219030, + 0.640598006201301030, -0.767876418736060610, 0.640450755966498140, + -0.767999237748281270, + 0.640303482184151670, -0.768122028523365310, 0.640156184859676620, + -0.768244791056798220, + 0.640008863998488440, -0.768367525344066270, 0.639861519606004010, + -0.768490231380656750, + 0.639714151687640450, -0.768612909162058270, 0.639566760248816420, + -0.768735558683760310, + 0.639419345294950700, -0.768858179941253270, 0.639271906831463510, + -0.768980772930028870, + 0.639124444863775730, -0.769103337645579590, 0.638976959397309140, + -0.769225874083399260, + 0.638829450437486400, -0.769348382238982280, 0.638681917989730840, + -0.769470862107824560, + 0.638534362059466790, -0.769593313685422940, 0.638386782652119680, + -0.769715736967275020, + 0.638239179773115390, -0.769838131948879840, 0.638091553427880930, + -0.769960498625737230, + 0.637943903621844170, -0.770082836993347900, 0.637796230360433540, + -0.770205147047214100, + 0.637648533649078810, -0.770327428782838770, 0.637500813493210310, + -0.770449682195725960, + 0.637353069898259130, -0.770571907281380700, 0.637205302869657600, + -0.770694104035309140, + 0.637057512412838590, -0.770816272453018430, 0.636909698533235870, + -0.770938412530016940, + 0.636761861236284200, -0.771060524261813710, 0.636614000527419230, + -0.771182607643919220, + 0.636466116412077180, -0.771304662671844720, 0.636318208895695570, + -0.771426689341102590, + 0.636170277983712170, -0.771548687647206300, 0.636022323681566300, + -0.771670657585670330, + 0.635874345994697720, -0.771792599152010150, 0.635726344928547180, + -0.771914512341742350, + 0.635578320488556230, -0.772036397150384410, 0.635430272680167160, + -0.772158253573455240, + 0.635282201508823530, -0.772280081606474320, 0.635134106979969300, + -0.772401881244962340, + 0.634985989099049460, -0.772523652484441330, 0.634837847871510100, + -0.772645395320433860, + 0.634689683302797850, -0.772767109748463740, 0.634541495398360130, + -0.772888795764056220, + 0.634393284163645490, -0.773010453362736990, 0.634245049604103330, + -0.773132082540033070, + 0.634096791725183740, -0.773253683291472590, 0.633948510532337810, + -0.773375255612584470, + 0.633800206031017280, -0.773496799498899050, 0.633651878226674900, + -0.773618314945947460, + 0.633503527124764320, -0.773739801949261840, 0.633355152730740060, + -0.773861260504375540, + 0.633206755050057190, -0.773982690606822790, 0.633058334088172250, + -0.774104092252138940, + 0.632909889850541860, -0.774225465435860570, 0.632761422342624000, + -0.774346810153525020, + 0.632612931569877520, -0.774468126400670860, 0.632464417537761840, + -0.774589414172837550, + 0.632315880251737680, -0.774710673465565550, 0.632167319717266030, + -0.774831904274396850, + 0.632018735939809060, -0.774953106594873820, 0.631870128924829850, + -0.775074280422540450, + 0.631721498677792370, -0.775195425752941310, 0.631572845204161130, + -0.775316542581622410, + 0.631424168509401860, -0.775437630904130430, 0.631275468598980870, + -0.775558690716013580, + 0.631126745478365340, -0.775679722012820540, 0.630977999153023660, + -0.775800724790101540, + 0.630829229628424470, -0.775921699043407580, 0.630680436910038060, + -0.776042644768290770, + 0.630531621003334600, -0.776163561960304340, 0.630382781913785940, + -0.776284450615002400, + 0.630233919646864480, -0.776405310727940390, 0.630085034208043290, + -0.776526142294674430, + 0.629936125602796550, -0.776646945310762060, 0.629787193836599200, + -0.776767719771761510, + 0.629638238914927100, -0.776888465673232440, 0.629489260843256740, + -0.777009183010735290, + 0.629340259627065750, -0.777129871779831620, 0.629191235271832410, + -0.777250531976084070, + 0.629042187783036000, -0.777371163595056200, 0.628893117166156480, + -0.777491766632312900, + 0.628744023426674790, -0.777612341083419920, 0.628594906570072660, + -0.777732886943944050, + 0.628445766601832710, -0.777853404209453040, 0.628296603527438440, + -0.777973892875515990, + 0.628147417352374120, -0.778094352937702790, 0.627998208082124810, + -0.778214784391584420, + 0.627848975722176570, -0.778335187232733090, 0.627699720278016240, + -0.778455561456721900, + 0.627550441755131530, -0.778575907059124940, 0.627401140159011160, + -0.778696224035517530, + 0.627251815495144190, -0.778816512381475870, 0.627102467769021010, + -0.778936772092577500, + 0.626953096986132770, -0.779057003164400630, 0.626803703151971310, + -0.779177205592524680, + 0.626654286272029460, -0.779297379372530300, 0.626504846351800930, + -0.779417524499998900, + 0.626355383396779990, -0.779537640970513150, 0.626205897412462130, + -0.779657728779656780, + 0.626056388404343520, -0.779777787923014440, 0.625906856377921210, + -0.779897818396171890, + 0.625757301338692900, -0.780017820194715990, 0.625607723292157410, + -0.780137793314234500, + 0.625458122243814360, -0.780257737750316590, 0.625308498199164010, + -0.780377653498552040, + 0.625158851163707730, -0.780497540554531910, 0.625009181142947460, + -0.780617398913848290, + 0.624859488142386450, -0.780737228572094380, 0.624709772167528100, + -0.780857029524864470, + 0.624560033223877320, -0.780976801767753750, 0.624410271316939380, + -0.781096545296358410, + 0.624260486452220650, -0.781216260106276090, 0.624110678635228510, + -0.781335946193104870, + 0.623960847871470770, -0.781455603552444480, 0.623810994166456130, + -0.781575232179895550, + 0.623661117525694640, -0.781694832071059390, 0.623511217954696550, + -0.781814403221538830, + 0.623361295458973340, -0.781933945626937630, 0.623211350044037270, + -0.782053459282860300, + 0.623061381715401370, -0.782172944184912900, 0.622911390478579460, + -0.782292400328702400, + 0.622761376339086460, -0.782411827709836420, 0.622611339302437730, + -0.782531226323924240, + 0.622461279374150080, -0.782650596166575730, 0.622311196559740320, + -0.782769937233402050, + 0.622161090864726930, -0.782889249520015480, 0.622010962294628600, + -0.783008533022029110, + 0.621860810854965360, -0.783127787735057310, 0.621710636551257690, + -0.783247013654715380, + 0.621560439389027270, -0.783366210776619720, 0.621410219373796150, + -0.783485379096387820, + 0.621259976511087660, -0.783604518609638200, 0.621109710806425740, + -0.783723629311990470, + 0.620959422265335180, -0.783842711199065230, 0.620809110893341900, + -0.783961764266484010, + 0.620658776695972140, -0.784080788509869950, 0.620508419678753360, + -0.784199783924846570, + 0.620358039847213830, -0.784318750507038920, 0.620207637206882430, + -0.784437688252072720, + 0.620057211763289210, -0.784556597155575240, 0.619906763521964830, + -0.784675477213174320, + 0.619756292488440660, -0.784794328420499230, 0.619605798668249390, + -0.784913150773180020, + 0.619455282066924020, -0.785031944266848080, 0.619304742689998690, + -0.785150708897135560, + 0.619154180543008410, -0.785269444659675850, 0.619003595631488770, + -0.785388151550103550, + 0.618852987960976320, -0.785506829564053930, 0.618702357537008640, + -0.785625478697163700, + 0.618551704365123860, -0.785744098945070360, 0.618401028450860980, + -0.785862690303412600, + 0.618250329799760250, -0.785981252767830150, 0.618099608417362110, + -0.786099786333963820, + 0.617948864309208260, -0.786218290997455550, 0.617798097480841140, + -0.786336766753948260, + 0.617647307937803980, -0.786455213599085770, 0.617496495685640910, + -0.786573631528513230, + 0.617345660729896940, -0.786692020537876680, 0.617194803076117630, + -0.786810380622823490, + 0.617043922729849760, -0.786928711779001700, 0.616893019696640790, + -0.787047014002060790, + 0.616742093982038830, -0.787165287287650890, 0.616591145591593230, + -0.787283531631423620, + 0.616440174530853650, -0.787401747029031320, 0.616289180805370980, + -0.787519933476127810, + 0.616138164420696910, -0.787638090968367450, 0.615987125382383870, + -0.787756219501405950, + 0.615836063695985090, -0.787874319070900110, 0.615684979367054570, + -0.787992389672507950, + 0.615533872401147430, -0.788110431301888070, 0.615382742803819330, + -0.788228443954700490, + 0.615231590580626820, -0.788346427626606230, 0.615080415737127460, + -0.788464382313267430, + 0.614929218278879590, -0.788582308010347120, 0.614777998211442190, + -0.788700204713509660, + 0.614626755540375050, -0.788818072418420170, 0.614475490271239160, + -0.788935911120745130, + 0.614324202409595950, -0.789053720816151880, 0.614172891961007990, + -0.789171501500308790, + 0.614021558931038490, -0.789289253168885650, 0.613870203325251440, + -0.789406975817552810, + 0.613718825149211830, -0.789524669441982190, 0.613567424408485330, + -0.789642334037846340, + 0.613416001108638590, -0.789759969600819070, 0.613264555255239150, + -0.789877576126575280, + 0.613113086853854910, -0.789995153610791090, 0.612961595910055170, + -0.790112702049143300, + 0.612810082429409710, -0.790230221437310030, 0.612658546417489290, + -0.790347711770970520, + 0.612506987879865570, -0.790465173045804880, 0.612355406822110760, + -0.790582605257494460, + 0.612203803249798060, -0.790700008401721610, 0.612052177168501580, + -0.790817382474169660, + 0.611900528583796070, -0.790934727470523290, 0.611748857501257400, + -0.791052043386467950, + 0.611597163926462020, -0.791169330217690090, 0.611445447864987110, + -0.791286587959877720, + 0.611293709322411010, -0.791403816608719500, 0.611141948304312570, + -0.791521016159905220, + 0.610990164816271770, -0.791638186609125770, 0.610838358863869280, + -0.791755327952073150, + 0.610686530452686280, -0.791872440184440470, 0.610534679588305320, + -0.791989523301921850, + 0.610382806276309480, -0.792106577300212390, 0.610230910522282620, + -0.792223602175008310, + 0.610078992331809620, -0.792340597922007060, 0.609927051710476230, + -0.792457564536906970, + 0.609775088663868430, -0.792574502015407580, 0.609623103197573730, + -0.792691410353209450, + 0.609471095317180240, -0.792808289546014120, 0.609319065028276820, + -0.792925139589524260, + 0.609167012336453210, -0.793041960479443640, 0.609014937247299940, + -0.793158752211477140, + 0.608862839766408200, -0.793275514781330630, 0.608710719899370420, + -0.793392248184711100, + 0.608558577651779450, -0.793508952417326660, 0.608406413029229260, + -0.793625627474886190, + 0.608254226037314490, -0.793742273353100100, 0.608102016681630550, + -0.793858890047679620, + 0.607949784967773740, -0.793975477554337170, 0.607797530901341140, + -0.794092035868785960, + 0.607645254487930830, -0.794208564986740640, 0.607492955733141660, + -0.794325064903916520, + 0.607340634642572930, -0.794441535616030590, 0.607188291221825160, + -0.794557977118800270, + 0.607035925476499760, -0.794674389407944550, 0.606883537412198580, + -0.794790772479183170, + 0.606731127034524480, -0.794907126328237010, 0.606578694349081400, + -0.795023450950828050, + 0.606426239361473550, -0.795139746342679590, 0.606273762077306430, + -0.795256012499515500, + 0.606121262502186230, -0.795372249417061190, 0.605968740641719790, + -0.795488457091042990, + 0.605816196501515080, -0.795604635517188070, 0.605663630087180490, + -0.795720784691225090, + 0.605511041404325550, -0.795836904608883460, 0.605358430458560530, + -0.795952995265893910, + 0.605205797255496500, -0.796069056657987990, 0.605053141800745430, + -0.796185088780898440, + 0.604900464099919930, -0.796301091630359110, 0.604747764158633410, + -0.796417065202104980, + 0.604595041982500360, -0.796533009491872000, 0.604442297577135970, + -0.796648924495397150, + 0.604289530948156070, -0.796764810208418720, 0.604136742101177630, + -0.796880666626675780, + 0.603983931041818020, -0.796996493745908750, 0.603831097775695880, + -0.797112291561858920, + 0.603678242308430370, -0.797228060070268700, 0.603525364645641550, + -0.797343799266881700, + 0.603372464792950370, -0.797459509147442460, 0.603219542755978440, + -0.797575189707696590, + 0.603066598540348280, -0.797690840943391040, 0.602913632151683140, + -0.797806462850273570, + 0.602760643595607220, -0.797922055424093000, 0.602607632877745550, + -0.798037618660599410, + 0.602454600003723860, -0.798153152555543750, 0.602301544979168550, + -0.798268657104678310, + 0.602148467809707320, -0.798384132303756380, 0.601995368500968130, + -0.798499578148532010, + 0.601842247058580030, -0.798614994634760820, 0.601689103488173060, + -0.798730381758199210, + 0.601535937795377730, -0.798845739514604580, 0.601382749985825420, + -0.798961067899735760, + 0.601229540065148620, -0.799076366909352350, 0.601076308038980160, + -0.799191636539215210, + 0.600923053912954090, -0.799306876785086160, 0.600769777692705230, + -0.799422087642728040, + 0.600616479383868970, -0.799537269107905010, 0.600463158992081690, + -0.799652421176382130, + 0.600309816522980430, -0.799767543843925680, 0.600156451982203350, + -0.799882637106302810, + 0.600003065375389060, -0.799997700959281910, 0.599849656708177360, + -0.800112735398632370, + 0.599696225986208310, -0.800227740420124790, 0.599542773215123390, + -0.800342716019530660, + 0.599389298400564540, -0.800457662192622710, 0.599235801548174570, + -0.800572578935174750, + 0.599082282663597310, -0.800687466242961500, 0.598928741752476900, + -0.800802324111759110, + 0.598775178820458720, -0.800917152537344300, 0.598621593873188920, + -0.801031951515495330, + 0.598467986916314310, -0.801146721041991250, 0.598314357955482600, + -0.801261461112612540, + 0.598160706996342380, -0.801376171723140130, 0.598007034044542700, + -0.801490852869356840, + 0.597853339105733910, -0.801605504547046040, 0.597699622185566830, + -0.801720126751992330, + 0.597545883289693270, -0.801834719479981310, 0.597392122423765710, + -0.801949282726799660, + 0.597238339593437530, -0.802063816488235440, 0.597084534804362740, + -0.802178320760077450, + 0.596930708062196500, -0.802292795538115720, 0.596776859372594500, + -0.802407240818141300, + 0.596622988741213330, -0.802521656595946320, 0.596469096173710360, + -0.802636042867324150, + 0.596315181675743820, -0.802750399628069160, 0.596161245252972540, + -0.802864726873976590, + 0.596007286911056530, -0.802979024600843140, 0.595853306655656390, + -0.803093292804466400, + 0.595699304492433470, -0.803207531480644830, 0.595545280427049790, + -0.803321740625178470, + 0.595391234465168730, -0.803435920233868120, 0.595237166612453850, + -0.803550070302515570, + 0.595083076874569960, -0.803664190826924090, 0.594928965257182420, + -0.803778281802897570, + 0.594774831765957580, -0.803892343226241260, 0.594620676406562240, + -0.804006375092761520, + 0.594466499184664540, -0.804120377398265700, 0.594312300105932830, + -0.804234350138562260, + 0.594158079176036800, -0.804348293309460780, 0.594003836400646690, + -0.804462206906771840, + 0.593849571785433630, -0.804576090926307000, 0.593695285336069300, + -0.804689945363879500, + 0.593540977058226390, -0.804803770215302810, 0.593386646957578480, + -0.804917565476392150, + 0.593232295039799800, -0.805031331142963660, 0.593077921310565580, + -0.805145067210834120, + 0.592923525775551410, -0.805258773675822210, 0.592769108440434070, + -0.805372450533747060, + 0.592614669310891130, -0.805486097780429120, 0.592460208392600940, + -0.805599715411689950, + 0.592305725691242400, -0.805713303423352120, 0.592151221212495640, + -0.805826861811239300, + 0.591996694962040990, -0.805940390571176280, 0.591842146945560250, + -0.806053889698988950, + 0.591687577168735550, -0.806167359190504310, 0.591532985637249990, + -0.806280799041550370, + 0.591378372356787580, -0.806394209247956240, 0.591223737333032910, + -0.806507589805552260, + 0.591069080571671510, -0.806620940710169650, 0.590914402078389520, + -0.806734261957640750, + 0.590759701858874280, -0.806847553543799220, 0.590604979918813440, + -0.806960815464479620, + 0.590450236263895920, -0.807074047715517610, 0.590295470899810940, + -0.807187250292749850, + 0.590140683832248940, -0.807300423192014450, 0.589985875066900920, + -0.807413566409150190, + 0.589831044609458900, -0.807526679939997160, 0.589676192465615420, + -0.807639763780396370, + 0.589521318641063940, -0.807752817926190360, 0.589366423141498790, + -0.807865842373222120, + 0.589211505972615070, -0.807978837117336310, 0.589056567140108460, + -0.808091802154378260, + 0.588901606649675840, -0.808204737480194720, 0.588746624507014650, + -0.808317643090633250, + 0.588591620717822890, -0.808430518981542720, 0.588436595287799900, + -0.808543365148773010, + 0.588281548222645330, -0.808656181588174980, 0.588126479528059850, + -0.808768968295600850, + 0.587971389209745120, -0.808881725266903610, 0.587816277273403020, + -0.808994452497937560, + 0.587661143724736770, -0.809107149984558130, 0.587505988569450020, + -0.809219817722621750, + 0.587350811813247660, -0.809332455707985840, 0.587195613461834910, + -0.809445063936509170, + 0.587040393520918080, -0.809557642404051260, 0.586885151996203950, + -0.809670191106473090, + 0.586729888893400500, -0.809782710039636420, 0.586574604218216280, + -0.809895199199404450, + 0.586419297976360500, -0.810007658581641140, 0.586263970173543700, + -0.810120088182211600, + 0.586108620815476430, -0.810232487996982330, 0.585953249907870680, + -0.810344858021820550, + 0.585797857456438860, -0.810457198252594770, 0.585642443466894420, + -0.810569508685174630, + 0.585487007944951450, -0.810681789315430670, 0.585331550896324940, + -0.810794040139234730, + 0.585176072326730410, -0.810906261152459670, 0.585020572241884530, + -0.811018452350979470, + 0.584865050647504490, -0.811130613730669190, 0.584709507549308500, + -0.811242745287404810, + 0.584553942953015330, -0.811354847017063730, 0.584398356864344710, + -0.811466918915524250, + 0.584242749289016980, -0.811578960978665890, 0.584087120232753550, + -0.811690973202369050, + 0.583931469701276300, -0.811802955582515360, 0.583775797700308070, + -0.811914908114987680, + 0.583620104235572760, -0.812026830795669730, 0.583464389312794430, + -0.812138723620446480, + 0.583308652937698290, -0.812250586585203880, 0.583152895116010540, + -0.812362419685829120, + 0.582997115853457700, -0.812474222918210480, 0.582841315155767650, + -0.812585996278237020, + 0.582685493028668460, -0.812697739761799490, 0.582529649477889320, + -0.812809453364789160, + 0.582373784509160220, -0.812921137083098770, 0.582217898128211790, + -0.813032790912621930, + 0.582061990340775550, -0.813144414849253590, 0.581906061152583920, + -0.813256008888889380, + 0.581750110569369760, -0.813367573027426570, 0.581594138596866930, + -0.813479107260763220, + 0.581438145240810280, -0.813590611584798510, 0.581282130506935110, + -0.813702085995432700, + 0.581126094400977620, -0.813813530488567190, 0.580970036928674880, + -0.813924945060104490, + 0.580813958095764530, -0.814036329705948300, 0.580657857907985410, + -0.814147684422003360, + 0.580501736371076600, -0.814259009204175270, 0.580345593490778300, + -0.814370304048371070, + 0.580189429272831680, -0.814481568950498610, 0.580033243722978150, + -0.814592803906467270, + 0.579877036846960350, -0.814704008912187080, 0.579720808650521560, + -0.814815183963569330, + 0.579564559139405740, -0.814926329056526620, 0.579408288319357980, + -0.815037444186972220, + 0.579251996196123550, -0.815148529350820830, 0.579095682775449210, + -0.815259584543988280, + 0.578939348063081890, -0.815370609762391290, 0.578782992064769690, + -0.815481605001947770, + 0.578626614786261430, -0.815592570258576680, 0.578470216233306740, + -0.815703505528198260, + 0.578313796411655590, -0.815814410806733780, 0.578157355327059360, + -0.815925286090105390, + 0.578000892985269910, -0.816036131374236700, 0.577844409392039850, + -0.816146946655052160, + 0.577687904553122800, -0.816257731928477390, 0.577531378474272830, + -0.816368487190439200, + 0.577374831161244880, -0.816479212436865390, 0.577218262619794920, + -0.816589907663684890, + 0.577061672855679550, -0.816700572866827850, 0.576905061874655960, + -0.816811208042225290, + 0.576748429682482520, -0.816921813185809480, 0.576591776284917870, + -0.817032388293513880, + 0.576435101687721830, -0.817142933361272970, 0.576278405896654910, + -0.817253448385022230, + 0.576121688917478390, -0.817363933360698460, 0.575964950755954330, + -0.817474388284239240, + 0.575808191417845340, -0.817584813151583710, 0.575651410908915250, + -0.817695207958671680, + 0.575494609234928230, -0.817805572701444270, 0.575337786401649560, + -0.817915907375843740, + 0.575180942414845190, -0.818026211977813440, 0.575024077280281820, + -0.818136486503297620, + 0.574867191003726740, -0.818246730948241960, 0.574710283590948450, + -0.818356945308593150, + 0.574553355047715760, -0.818467129580298660, 0.574396405379798750, + -0.818577283759307490, + 0.574239434592967890, -0.818687407841569570, 0.574082442692994470, + -0.818797501823036010, + 0.573925429685650750, -0.818907565699658950, 0.573768395576709560, + -0.819017599467391500, + 0.573611340371944610, -0.819127603122188240, 0.573454264077130400, + -0.819237576660004520, + 0.573297166698042320, -0.819347520076796900, 0.573140048240456060, + -0.819457433368523280, + 0.572982908710148680, -0.819567316531142230, 0.572825748112897550, + -0.819677169560613760, + 0.572668566454481160, -0.819786992452898990, 0.572511363740678790, + -0.819896785203959810, + 0.572354139977270030, -0.820006547809759680, 0.572196895170035580, + -0.820116280266262710, + 0.572039629324757050, -0.820225982569434690, 0.571882342447216590, + -0.820335654715241840, + 0.571725034543197120, -0.820445296699652050, 0.571567705618482580, + -0.820554908518633890, + 0.571410355678857340, -0.820664490168157460, 0.571252984730106660, + -0.820774041644193650, + 0.571095592778016690, -0.820883562942714580, 0.570938179828374360, + -0.820993054059693470, + 0.570780745886967370, -0.821102514991104650, 0.570623290959583860, + -0.821211945732923550, + 0.570465815052012990, -0.821321346281126740, 0.570308318170045010, + -0.821430716631691760, + 0.570150800319470300, -0.821540056780597610, 0.569993261506080650, + -0.821649366723823830, + 0.569835701735668110, -0.821758646457351640, 0.569678121014025710, + -0.821867895977163140, + 0.569520519346947250, -0.821977115279241550, 0.569362896740227330, + -0.822086304359571090, + 0.569205253199661200, -0.822195463214137170, 0.569047588731045220, + -0.822304591838926350, + 0.568889903340175970, -0.822413690229926390, 0.568732197032851160, + -0.822522758383125940, + 0.568574469814869250, -0.822631796294514990, 0.568416721692029390, + -0.822740803960084420, + 0.568258952670131490, -0.822849781375826320, 0.568101162754976570, + -0.822958728537734000, + 0.567943351952365670, -0.823067645441801670, 0.567785520268101250, + -0.823176532084024860, + 0.567627667707986230, -0.823285388460400110, 0.567469794277824620, + -0.823394214566925080, + 0.567311899983420800, -0.823503010399598390, 0.567153984830580100, + -0.823611775954420260, + 0.566996048825108680, -0.823720511227391320, 0.566838091972813320, + -0.823829216214513990, + 0.566680114279501710, -0.823937890911791370, 0.566522115750982100, + -0.824046535315227760, + 0.566364096393063950, -0.824155149420828570, 0.566206056211556840, + -0.824263733224600450, + 0.566047995212271560, -0.824372286722551250, 0.565889913401019570, + -0.824480809910689500, + 0.565731810783613230, -0.824589302785025290, 0.565573687365865440, + -0.824697765341569470, + 0.565415543153589770, -0.824806197576334330, 0.565257378152600910, + -0.824914599485333080, + 0.565099192368714090, -0.825022971064580220, 0.564940985807745320, + -0.825131312310090960, + 0.564782758475511400, -0.825239623217882130, 0.564624510377830120, + -0.825347903783971380, + 0.564466241520519500, -0.825456154004377440, 0.564307951909398750, + -0.825564373875120490, + 0.564149641550287680, -0.825672563392221390, 0.563991310449007080, + -0.825780722551702430, + 0.563832958611378170, -0.825888851349586780, 0.563674586043223180, + -0.825996949781898970, + 0.563516192750364910, -0.826105017844664610, 0.563357778738627020, + -0.826213055533910110, + 0.563199344013834090, -0.826321062845663420, 0.563040888581811230, + -0.826429039775953390, + 0.562882412448384550, -0.826536986320809960, 0.562723915619380400, + -0.826644902476264210, + 0.562565398100626560, -0.826752788238348520, 0.562406859897951140, + -0.826860643603096080, + 0.562248301017183150, -0.826968468566541490, 0.562089721464152480, + -0.827076263124720270, + 0.561931121244689470, -0.827184027273669020, 0.561772500364625450, + -0.827291761009425810, + 0.561613858829792420, -0.827399464328029350, 0.561455196646023280, + -0.827507137225519830, + 0.561296513819151470, -0.827614779697938400, 0.561137810355011530, + -0.827722391741327220, + 0.560979086259438260, -0.827829973351729810, 0.560820341538267540, + -0.827937524525190870, + 0.560661576197336030, -0.828045045257755800, 0.560502790242481060, + -0.828152535545471410, + 0.560343983679540860, -0.828259995384385550, 0.560185156514354080, + -0.828367424770547480, + 0.560026308752760380, -0.828474823700007130, 0.559867440400600320, + -0.828582192168815790, + 0.559708551463714790, -0.828689530173025710, 0.559549641947945870, + -0.828796837708690610, + 0.559390711859136140, -0.828904114771864870, 0.559231761203129010, + -0.829011361358604430, + 0.559072789985768480, -0.829118577464965980, 0.558913798212899770, + -0.829225763087007570, + 0.558754785890368310, -0.829332918220788250, 0.558595753024020760, + -0.829440042862368170, + 0.558436699619704100, -0.829547137007808800, 0.558277625683266330, + -0.829654200653172640, + 0.558118531220556100, -0.829761233794523050, 0.557959416237422960, + -0.829868236427924840, + 0.557800280739717100, -0.829975208549443840, 0.557641124733289420, + -0.830082150155146970, + 0.557481948223991660, -0.830189061241102370, 0.557322751217676160, + -0.830295941803379070, + 0.557163533720196340, -0.830402791838047550, 0.557004295737406060, + -0.830509611341179070, + 0.556845037275160100, -0.830616400308846200, 0.556685758339313890, + -0.830723158737122880, + 0.556526458935723720, -0.830829886622083570, 0.556367139070246490, + -0.830936583959804410, + 0.556207798748739930, -0.831043250746362320, 0.556048437977062720, + -0.831149886977835430, + 0.555889056761073920, -0.831256492650303210, 0.555729655106633520, + -0.831363067759845920, + 0.555570233019602290, -0.831469612302545240, 0.555410790505841740, + -0.831576126274483630, + 0.555251327571214090, -0.831682609671745120, 0.555091844221582420, + -0.831789062490414400, + 0.554932340462810370, -0.831895484726577590, 0.554772816300762580, + -0.832001876376321840, + 0.554613271741304040, -0.832108237435735480, 0.554453706790301040, + -0.832214567900907980, + 0.554294121453620110, -0.832320867767929680, 0.554134515737128910, + -0.832427137032892280, + 0.553974889646695610, -0.832533375691888680, 0.553815243188189090, + -0.832639583741012770, + 0.553655576367479310, -0.832745761176359460, 0.553495889190436570, + -0.832851907994024980, + 0.553336181662932410, -0.832958024190106670, 0.553176453790838460, + -0.833064109760702890, + 0.553016705580027580, -0.833170164701913190, 0.552856937036373290, + -0.833276189009838240, + 0.552697148165749770, -0.833382182680579730, 0.552537338974032120, + -0.833488145710240770, + 0.552377509467096070, -0.833594078094925140, 0.552217659650817930, + -0.833699979830738290, + 0.552057789531074980, -0.833805850913786340, 0.551897899113745320, + -0.833911691340176730, + 0.551737988404707450, -0.834017501106018130, 0.551578057409841000, + -0.834123280207419990, + 0.551418106135026060, -0.834229028640493420, 0.551258134586143700, + -0.834334746401350080, + 0.551098142769075430, -0.834440433486103190, 0.550938130689703880, + -0.834546089890866760, + 0.550778098353912230, -0.834651715611756330, 0.550618045767584330, + -0.834757310644888230, + 0.550457972936604810, -0.834862874986380010, 0.550297879866859190, + -0.834968408632350450, + 0.550137766564233630, -0.835073911578919300, 0.549977633034615000, + -0.835179383822207580, + 0.549817479283891020, -0.835284825358337370, 0.549657305317949980, + -0.835390236183431780, + 0.549497111142680960, -0.835495616293615350, 0.549336896763974010, + -0.835600965685013410, + 0.549176662187719770, -0.835706284353752600, 0.549016407419809390, + -0.835811572295960590, + 0.548856132466135290, -0.835916829507766360, 0.548695837332590090, + -0.836022055985299880, + 0.548535522025067390, -0.836127251724692160, 0.548375186549461600, + -0.836232416722075600, + 0.548214830911667780, -0.836337550973583530, 0.548054455117581880, + -0.836442654475350380, + 0.547894059173100190, -0.836547727223511890, 0.547733643084120200, + -0.836652769214204950, + 0.547573206856539870, -0.836757780443567190, 0.547412750496257930, + -0.836862760907737810, + 0.547252274009174090, -0.836967710602857020, 0.547091777401188530, + -0.837072629525066000, + 0.546931260678202190, -0.837177517670507190, 0.546770723846116800, + -0.837282375035324320, + 0.546610166910834860, -0.837387201615661940, 0.546449589878259760, + -0.837491997407665890, + 0.546288992754295210, -0.837596762407483040, 0.546128375544846060, + -0.837701496611261700, + 0.545967738255817680, -0.837806200015150940, 0.545807080893116140, + -0.837910872615301060, + 0.545646403462648590, -0.838015514407863700, 0.545485705970322530, + -0.838120125388991500, + 0.545324988422046460, -0.838224705554837970, 0.545164250823729320, + -0.838329254901558300, + 0.545003493181281160, -0.838433773425308340, 0.544842715500612470, + -0.838538261122245170, + 0.544681917787634530, -0.838642717988527300, 0.544521100048259710, + -0.838747144020313920, + 0.544360262288400400, -0.838851539213765760, 0.544199404513970420, + -0.838955903565044350, + 0.544038526730883930, -0.839060237070312630, 0.543877628945055980, + -0.839164539725734570, + 0.543716711162402390, -0.839268811527475230, 0.543555773388839650, + -0.839373052471700690, + 0.543394815630284800, -0.839477262554578550, 0.543233837892656000, + -0.839581441772277120, + 0.543072840181871850, -0.839685590120966110, 0.542911822503851730, + -0.839789707596816260, + 0.542750784864516000, -0.839893794195999410, 0.542589727269785270, + -0.839997849914688730, + 0.542428649725581360, -0.840101874749058400, 0.542267552237826520, + -0.840205868695283580, + 0.542106434812444030, -0.840309831749540770, 0.541945297455357470, + -0.840413763908007480, + 0.541784140172491660, -0.840517665166862440, 0.541622962969771640, + -0.840621535522285690, + 0.541461765853123560, -0.840725374970458070, 0.541300548828474120, + -0.840829183507561640, + 0.541139311901750910, -0.840932961129779670, 0.540978055078882190, + -0.841036707833296650, + 0.540816778365796670, -0.841140423614298080, 0.540655481768424260, + -0.841244108468970580, + 0.540494165292695230, -0.841347762393501950, 0.540332828944540820, + -0.841451385384081260, + 0.540171472729892970, -0.841554977436898330, 0.540010096654684020, + -0.841658538548144760, + 0.539848700724847700, -0.841762068714012490, 0.539687284946317570, + -0.841865567930695340, + 0.539525849325029010, -0.841969036194387680, 0.539364393866917150, + -0.842072473501285450, + 0.539202918577918240, -0.842175879847585570, 0.539041423463969550, + -0.842279255229485880, + 0.538879908531008420, -0.842382599643185960, 0.538718373784973670, + -0.842485913084885630, + 0.538556819231804210, -0.842589195550786600, 0.538395244877439950, + -0.842692447037091560, + 0.538233650727821700, -0.842795667540004120, 0.538072036788890600, + -0.842898857055729310, + 0.537910403066588990, -0.843002015580472830, 0.537748749566859470, + -0.843105143110442050, + 0.537587076295645510, -0.843208239641845440, 0.537425383258891660, + -0.843311305170892030, + 0.537263670462542530, -0.843414339693792760, 0.537101937912544240, + -0.843517343206759080, + 0.536940185614843020, -0.843620315706004040, 0.536778413575385920, + -0.843723257187741550, + 0.536616621800121150, -0.843826167648186740, 0.536454810294997090, + -0.843929047083555870, + 0.536292979065963180, -0.844031895490066410, 0.536131128118969350, + -0.844134712863936930, + 0.535969257459966710, -0.844237499201387020, 0.535807367094906620, + -0.844340254498637590, + 0.535645457029741090, -0.844442978751910660, 0.535483527270423370, + -0.844545671957429240, + 0.535321577822907010, -0.844648334111417820, 0.535159608693146720, + -0.844750965210101510, + 0.534997619887097260, -0.844853565249707010, 0.534835611410714670, + -0.844956134226462100, + 0.534673583269955510, -0.845058672136595470, 0.534511535470777010, + -0.845161178976337140, + 0.534349468019137520, -0.845263654741918220, 0.534187380920995600, + -0.845366099429570970, + 0.534025274182310380, -0.845468513035528830, 0.533863147809042650, + -0.845570895556026270, + 0.533701001807152960, -0.845673246987299070, 0.533538836182603120, + -0.845775567325583900, + 0.533376650941355560, -0.845877856567118890, 0.533214446089372960, + -0.845980114708143270, + 0.533052221632619670, -0.846082341744896940, 0.532889977577059690, + -0.846184537673621670, + 0.532727713928658810, -0.846286702490559710, 0.532565430693382580, + -0.846388836191954930, + 0.532403127877198010, -0.846490938774052020, 0.532240805486072330, + -0.846593010233097190, + 0.532078463525973540, -0.846695050565337450, 0.531916102002870760, + -0.846797059767020910, + 0.531753720922733320, -0.846899037834397350, 0.531591320291531780, + -0.847000984763716880, + 0.531428900115236910, -0.847102900551231500, 0.531266460399820390, + -0.847204785193193980, + 0.531104001151255000, -0.847306638685858320, 0.530941522375513510, + -0.847408461025479730, + 0.530779024078570250, -0.847510252208314330, 0.530616506266399450, + -0.847612012230619660, + 0.530453968944976320, -0.847713741088654270, 0.530291412120277420, + -0.847815438778677930, + 0.530128835798278850, -0.847917105296951410, 0.529966239984958620, + -0.848018740639736810, + 0.529803624686294830, -0.848120344803297120, 0.529640989908265910, + -0.848221917783896990, + 0.529478335656852090, -0.848323459577801530, 0.529315661938033140, + -0.848424970181277600, + 0.529152968757790720, -0.848526449590592650, 0.528990256122106040, + -0.848627897802015860, + 0.528827524036961980, -0.848729314811817010, 0.528664772508341540, + -0.848830700616267530, + 0.528502001542228480, -0.848932055211639610, 0.528339211144607690, + -0.849033378594206690, + 0.528176401321464370, -0.849134670760243630, 0.528013572078784740, + -0.849235931706025960, + 0.527850723422555460, -0.849337161427830670, 0.527687855358763720, + -0.849438359921935950, + 0.527524967893398200, -0.849539527184620890, 0.527362061032447430, + -0.849640663212165910, + 0.527199134781901390, -0.849741768000852440, 0.527036189147750190, + -0.849842841546963210, + 0.526873224135984700, -0.849943883846782210, 0.526710239752597010, + -0.850044894896594070, + 0.526547236003579330, -0.850145874692685210, 0.526384212894925210, + -0.850246823231342710, + 0.526221170432628170, -0.850347740508854980, 0.526058108622682760, + -0.850448626521511650, + 0.525895027471084740, -0.850549481265603370, 0.525731926983829640, + -0.850650304737422200, + 0.525568807166914680, -0.850751096933260790, 0.525405668026336810, + -0.850851857849413640, + 0.525242509568094710, -0.850952587482175730, 0.525079331798186890, + -0.851053285827843790, + 0.524916134722612890, -0.851153952882715340, 0.524752918347373360, + -0.851254588643089120, + 0.524589682678468840, -0.851355193105265200, 0.524426427721901510, + -0.851455766265544310, + 0.524263153483673470, -0.851556308120228870, 0.524099859969787810, + -0.851656818665622370, + 0.523936547186248600, -0.851757297898029120, 0.523773215139060170, + -0.851857745813754840, + 0.523609863834228030, -0.851958162409106380, 0.523446493277757940, + -0.852058547680391580, + 0.523283103475656430, -0.852158901623919830, 0.523119694433931250, + -0.852259224236001090, + 0.522956266158590140, -0.852359515512947090, 0.522792818655642200, + -0.852459775451070100, + 0.522629351931096720, -0.852560004046683970, 0.522465865990963900, + -0.852660201296103760, + 0.522302360841254700, -0.852760367195645300, 0.522138836487980650, + -0.852860501741625860, + 0.521975292937154390, -0.852960604930363630, 0.521811730194788550, + -0.853060676758178320, + 0.521648148266897090, -0.853160717221390420, 0.521484547159494550, + -0.853260726316321770, + 0.521320926878595550, -0.853360704039295430, 0.521157287430216610, + -0.853460650386635320, + 0.520993628820373810, -0.853560565354666840, 0.520829951055084780, + -0.853660448939716270, + 0.520666254140367270, -0.853760301138111300, 0.520502538082239790, + -0.853860121946180660, + 0.520338802886721960, -0.853959911360254060, 0.520175048559833760, + -0.854059669376662780, + 0.520011275107596040, -0.854159395991738730, 0.519847482536030300, + -0.854259091201815420, + 0.519683670851158520, -0.854358755003227440, 0.519519840059003870, + -0.854458387392310060, + 0.519355990165589530, -0.854557988365400530, 0.519192121176940360, + -0.854657557918836460, + 0.519028233099080970, -0.854757096048957110, 0.518864325938037000, + -0.854856602752102850, + 0.518700399699835170, -0.854956078024614820, 0.518536454390502110, + -0.855055521862835950, + 0.518372490016066220, -0.855154934263109620, 0.518208506582555460, + -0.855254315221781080, + 0.518044504095999340, -0.855353664735196030, 0.517880482562427800, + -0.855452982799701830, + 0.517716441987871150, -0.855552269411646970, 0.517552382378360990, + -0.855651524567380690, + 0.517388303739929060, -0.855750748263253920, 0.517224206078608310, + -0.855849940495618240, + 0.517060089400432130, -0.855949101260826790, 0.516895953711434260, + -0.856048230555233820, + 0.516731799017649980, -0.856147328375194470, 0.516567625325114350, + -0.856246394717065210, + 0.516403432639863990, -0.856345429577203610, 0.516239220967935620, + -0.856444432951968480, + 0.516074990315366630, -0.856543404837719960, 0.515910740688195650, + -0.856642345230818720, + 0.515746472092461380, -0.856741254127627470, 0.515582184534203790, + -0.856840131524509220, + 0.515417878019463150, -0.856938977417828650, 0.515253552554280290, + -0.857037791803951680, + 0.515089208144697270, -0.857136574679244870, 0.514924844796756490, + -0.857235326040076460, + 0.514760462516501200, -0.857334045882815590, 0.514596061309975040, + -0.857432734203832700, + 0.514431641183222930, -0.857531390999499040, 0.514267202142289830, + -0.857630016266187620, + 0.514102744193221660, -0.857728610000272120, 0.513938267342065490, + -0.857827172198127320, + 0.513773771594868030, -0.857925702856129790, 0.513609256957677900, + -0.858024201970656540, + 0.513444723436543570, -0.858122669538086020, 0.513280171037514330, + -0.858221105554798250, + 0.513115599766640560, -0.858319510017173440, 0.512951009629972860, + -0.858417882921594040, + 0.512786400633563070, -0.858516224264442740, 0.512621772783463100, + -0.858614534042104080, + 0.512457126085725800, -0.858712812250963520, 0.512292460546404980, + -0.858811058887407500, + 0.512127776171554690, -0.858909273947823900, 0.511963072967230200, + -0.859007457428601410, + 0.511798350939487000, -0.859105609326130340, 0.511633610094381350, + -0.859203729636801920, + 0.511468850437970520, -0.859301818357008360, 0.511304071976311890, + -0.859399875483143450, + 0.511139274715464390, -0.859497901011601620, 0.510974458661486720, + -0.859595894938779080, + 0.510809623820439040, -0.859693857261072610, 0.510644770198381730, + -0.859791787974880540, + 0.510479897801375700, -0.859889687076602290, 0.510315006635483350, + -0.859987554562638200, + 0.510150096706766700, -0.860085390429390140, 0.509985168021289570, + -0.860183194673260880, + 0.509820220585115560, -0.860280967290654510, 0.509655254404309250, + -0.860378708277976130, + 0.509490269484936360, -0.860476417631632070, 0.509325265833062480, + -0.860574095348029980, + 0.509160243454754750, -0.860671741423578380, 0.508995202356080310, + -0.860769355854687060, + 0.508830142543106990, -0.860866938637767310, 0.508665064021904260, + -0.860964489769230900, + 0.508499966798540810, -0.861062009245491480, 0.508334850879087470, + -0.861159497062963350, + 0.508169716269614710, -0.861256953218062060, 0.508004562976194010, + -0.861354377707204800, + 0.507839391004897940, -0.861451770526809210, 0.507674200361798890, + -0.861549131673294720, + 0.507508991052970870, -0.861646461143081300, 0.507343763084487920, + -0.861743758932590700, + 0.507178516462425290, -0.861841025038245330, 0.507013251192858340, + -0.861938259456469180, + 0.506847967281863320, -0.862035462183687210, 0.506682664735517600, + -0.862132633216325380, + 0.506517343559898530, -0.862229772550811240, 0.506352003761084800, + -0.862326880183573060, + 0.506186645345155450, -0.862423956111040500, 0.506021268318189830, + -0.862521000329644520, + 0.505855872686268860, -0.862618012835816740, 0.505690458455473340, + -0.862714993625990690, + 0.505525025631885510, -0.862811942696600330, 0.505359574221587390, + -0.862908860044081290, + 0.505194104230662240, -0.863005745664870210, 0.505028615665194300, + -0.863102599555404800, + 0.504863108531267480, -0.863199421712124160, 0.504697582834967680, + -0.863296212131468230, + 0.504532038582380380, -0.863392970809878310, 0.504366475779592150, + -0.863489697743797140, + 0.504200894432690560, -0.863586392929667990, 0.504035294547763080, + -0.863683056363935940, + 0.503869676130898950, -0.863779688043046610, 0.503704039188186960, + -0.863876287963447510, + 0.503538383725717580, -0.863972856121586700, 0.503372709749581150, + -0.864069392513913680, + 0.503207017265869030, -0.864165897136879300, 0.503041306280673450, + -0.864262369986934950, + 0.502875576800086880, -0.864358811060534030, 0.502709828830203100, + -0.864455220354130250, + 0.502544062377115800, -0.864551597864179230, 0.502378277446919870, + -0.864647943587137480, + 0.502212474045710900, -0.864744257519462380, 0.502046652179584660, + -0.864840539657612980, + 0.501880811854638400, -0.864936789998049020, 0.501714953076969230, + -0.865033008537231750, + 0.501549075852675390, -0.865129195271623690, 0.501383180187855880, + -0.865225350197688090, + 0.501217266088609950, -0.865321473311889800, 0.501051333561038040, + -0.865417564610694410, + 0.500885382611240940, -0.865513624090568980, 0.500719413245319880, + -0.865609651747981880, + 0.500553425469377640, -0.865705647579402270, 0.500387419289516580, + -0.865801611581300760, + 0.500221394711840680, -0.865897543750148820, 0.500055351742453860, + -0.865993444082419520, + 0.499889290387461380, -0.866089312574586770, 0.499723210652968710, + -0.866185149223125730, + 0.499557112545081890, -0.866280954024512990, 0.499390996069908220, + -0.866376726975225830, + 0.499224861233555030, -0.866472468071743050, 0.499058708042130930, + -0.866568177310544360, + 0.498892536501744750, -0.866663854688111020, 0.498726346618505960, + -0.866759500200925290, + 0.498560138398525200, -0.866855113845470320, 0.498393911847913150, + -0.866950695618231020, + 0.498227666972781870, -0.867046245515692650, 0.498061403779243520, + -0.867141763534342360, + 0.497895122273410930, -0.867237249670668400, 0.497728822461398100, + -0.867332703921159690, + 0.497562504349319090, -0.867428126282306920, 0.497396167943289340, + -0.867523516750601460, + 0.497229813249424340, -0.867618875322536230, 0.497063440273840310, + -0.867714201994605140, + 0.496897049022654640, -0.867809496763303210, 0.496730639501984710, + -0.867904759625126920, + 0.496564211717949340, -0.867999990576573400, 0.496397765676667160, + -0.868095189614141670, + 0.496231301384258310, -0.868190356734331310, 0.496064818846843060, + -0.868285491933643240, + 0.495898318070542240, -0.868380595208579800, 0.495731799061478020, + -0.868475666555644120, + 0.495565261825772490, -0.868570705971340900, 0.495398706369549080, + -0.868665713452175580, + 0.495232132698931350, -0.868760688994655190, 0.495065540820043610, + -0.868855632595287750, + 0.494898930739011310, -0.868950544250582380, 0.494732302461959820, + -0.869045423957049530, + 0.494565655995016010, -0.869140271711200560, 0.494398991344306760, + -0.869235087509548250, + 0.494232308515959730, -0.869329871348606730, 0.494065607516103730, + -0.869424623224890780, + 0.493898888350867430, -0.869519343134916970, 0.493732151026381070, + -0.869614031075202300, + 0.493565395548774880, -0.869708687042265560, 0.493398621924179830, + -0.869803311032626650, + 0.493231830158728070, -0.869897903042806340, 0.493065020258551650, + -0.869992463069326870, + 0.492898192229784090, -0.870086991108711350, 0.492731346078558840, + -0.870181487157484560, + 0.492564481811010650, -0.870275951212171830, 0.492397599433274550, + -0.870370383269300160, + 0.492230698951486080, -0.870464783325397670, 0.492063780371782060, + -0.870559151376993250, + 0.491896843700299240, -0.870653487420617540, 0.491729888943175820, + -0.870747791452801790, + 0.491562916106550060, -0.870842063470078860, 0.491395925196560830, + -0.870936303468982760, + 0.491228916219348330, -0.871030511446048260, 0.491061889181052590, + -0.871124687397811900, + 0.490894844087815140, -0.871218831320810900, 0.490727780945777570, + -0.871312943211583920, + 0.490560699761082080, -0.871407023066670950, 0.490393600539872130, + -0.871501070882612530, + 0.490226483288291100, -0.871595086655951090, 0.490059348012483910, + -0.871689070383229740, + 0.489892194718595300, -0.871783022060993010, 0.489725023412770970, + -0.871876941685786890, + 0.489557834101157550, -0.871970829254157700, 0.489390626789901920, + -0.872064684762653970, + 0.489223401485152030, -0.872158508207824480, 0.489056158193055980, + -0.872252299586219860, + 0.488888896919763230, -0.872346058894391540, 0.488721617671423250, + -0.872439786128892280, + 0.488554320454186230, -0.872533481286276060, 0.488387005274203590, + -0.872627144363097960, + 0.488219672137626740, -0.872720775355914300, 0.488052321050608310, + -0.872814374261282390, + 0.487884952019301210, -0.872907941075760970, 0.487717565049858860, + -0.873001475795909920, + 0.487550160148436050, -0.873094978418290090, 0.487382737321187310, + -0.873188448939463790, + 0.487215296574268820, -0.873281887355994210, 0.487047837913836550, + -0.873375293664446000, + 0.486880361346047400, -0.873468667861384880, 0.486712866877059340, + -0.873562009943377740, + 0.486545354513030270, -0.873655319906992630, 0.486377824260119500, + -0.873748597748798870, + 0.486210276124486530, -0.873841843465366750, 0.486042710112291390, + -0.873935057053268130, + 0.485875126229695420, -0.874028238509075630, 0.485707524482859750, + -0.874121387829363330, + 0.485539904877947020, -0.874214505010706300, 0.485372267421119770, + -0.874307590049680950, + 0.485204612118541880, -0.874400642942864790, 0.485036938976377450, + -0.874493663686836450, + 0.484869248000791120, -0.874586652278176110, 0.484701539197948730, + -0.874679608713464510, + 0.484533812574016120, -0.874772532989284150, 0.484366068135160480, + -0.874865425102218210, + 0.484198305887549140, -0.874958285048851540, 0.484030525837350010, + -0.875051112825769970, + 0.483862727990732320, -0.875143908429560250, 0.483694912353865080, + -0.875236671856810870, + 0.483527078932918740, -0.875329403104110780, 0.483359227734063980, + -0.875422102168050830, + 0.483191358763471910, -0.875514769045222740, 0.483023472027315050, + -0.875607403732219240, + 0.482855567531765670, -0.875700006225634600, 0.482687645282997510, + -0.875792576522063880, + 0.482519705287184520, -0.875885114618103700, 0.482351747550501030, + -0.875977620510351660, + 0.482183772079122830, -0.876070094195406600, 0.482015778879225530, + -0.876162535669868460, + 0.481847767956986080, -0.876254944930338400, 0.481679739318581490, + -0.876347321973419020, + 0.481511692970189920, -0.876439666795713610, 0.481343628917989870, + -0.876531979393827100, + 0.481175547168160360, -0.876624259764365310, 0.481007447726881640, + -0.876716507903935400, + 0.480839330600333900, -0.876808723809145760, 0.480671195794698690, + -0.876900907476605650, + 0.480503043316157670, -0.876993058902925780, 0.480334873170893070, + -0.877085178084718310, + 0.480166685365088440, -0.877177265018595940, 0.479998479904927220, + -0.877269319701173170, + 0.479830256796594250, -0.877361342129065140, 0.479662016046274340, + -0.877453332298888560, + 0.479493757660153060, -0.877545290207261240, 0.479325481644417130, + -0.877637215850802120, + 0.479157188005253310, -0.877729109226131570, 0.478988876748849550, + -0.877820970329870500, + 0.478820547881394050, -0.877912799158641730, 0.478652201409075550, + -0.878004595709069080, + 0.478483837338084080, -0.878096359977777130, 0.478315455674609480, + -0.878188091961392250, + 0.478147056424843120, -0.878279791656541460, 0.477978639594976110, + -0.878371459059853590, + 0.477810205191201040, -0.878463094167957870, 0.477641753219710590, + -0.878554696977485340, + 0.477473283686698060, -0.878646267485068130, 0.477304796598358010, + -0.878737805687339280, + 0.477136291960884750, -0.878829311580933360, 0.476967769780474230, + -0.878920785162485840, + 0.476799230063322250, -0.879012226428633410, 0.476630672815625380, + -0.879103635376014330, + 0.476462098043581310, -0.879195012001267370, 0.476293505753387750, + -0.879286356301033250, + 0.476124895951243630, -0.879377668271953180, 0.475956268643348220, + -0.879468947910670100, + 0.475787623835901120, -0.879560195213827890, 0.475618961535103410, + -0.879651410178071470, + 0.475450281747155870, -0.879742592800047410, 0.475281584478260800, + -0.879833743076402940, + 0.475112869734620470, -0.879924861003786860, 0.474944137522437860, + -0.880015946578848960, + 0.474775387847917230, -0.880106999798240360, 0.474606620717262560, + -0.880198020658613190, + 0.474437836136679340, -0.880289009156620890, 0.474269034112372920, + -0.880379965288918260, + 0.474100214650550020, -0.880470889052160750, 0.473931377757417560, + -0.880561780443005590, + 0.473762523439182850, -0.880652639458111010, 0.473593651702054640, + -0.880743466094136230, + 0.473424762552241530, -0.880834260347742040, 0.473255855995953380, + -0.880925022215589880, + 0.473086932039400220, -0.881015751694342760, 0.472917990688792760, + -0.881106448780665130, + 0.472749031950342900, -0.881197113471221980, 0.472580055830262250, + -0.881287745762680100, + 0.472411062334764100, -0.881378345651706810, 0.472242051470061650, + -0.881468913134971330, + 0.472073023242368660, -0.881559448209143780, 0.471903977657900320, + -0.881649950870895260, + 0.471734914722871430, -0.881740421116898320, 0.471565834443498480, + -0.881830858943826620, + 0.471396736825997810, -0.881921264348354940, 0.471227621876586400, + -0.882011637327159590, + 0.471058489601482610, -0.882101977876917580, 0.470889340006904520, + -0.882192285994307430, + 0.470720173099071710, -0.882282561676008600, 0.470550988884203490, + -0.882372804918702290, + 0.470381787368520710, -0.882463015719070040, 0.470212568558244280, + -0.882553194073795400, + 0.470043332459595620, -0.882643339979562790, 0.469874079078797470, + -0.882733453433057540, + 0.469704808422072460, -0.882823534430966730, 0.469535520495644510, + -0.882913582969978020, + 0.469366215305737630, -0.883003599046780720, 0.469196892858576630, + -0.883093582658065370, + 0.469027553160387240, -0.883183533800523280, 0.468858196217395330, + -0.883273452470847430, + 0.468688822035827960, -0.883363338665731580, 0.468519430621912420, + -0.883453192381870920, + 0.468350021981876530, -0.883543013615961880, 0.468180596121949400, + -0.883632802364701760, + 0.468011153048359830, -0.883722558624789660, 0.467841692767338220, + -0.883812282392925090, + 0.467672215285114710, -0.883901973665809470, 0.467502720607920920, + -0.883991632440144890, + 0.467333208741988530, -0.884081258712634990, 0.467163679693549770, + -0.884170852479984500, + 0.466994133468838110, -0.884260413738899080, 0.466824570074086950, + -0.884349942486086120, + 0.466654989515530970, -0.884439438718253700, 0.466485391799405010, + -0.884528902432111350, + 0.466315776931944480, -0.884618333624369920, 0.466146144919386000, + -0.884707732291740930, + 0.465976495767966130, -0.884797098430937790, 0.465806829483922770, + -0.884886432038674560, + 0.465637146073493770, -0.884975733111666660, 0.465467445542917800, + -0.885065001646630930, + 0.465297727898434650, -0.885154237640285110, 0.465127993146283950, + -0.885243441089348270, + 0.464958241292706740, -0.885332611990540590, 0.464788472343944160, + -0.885421750340583570, + 0.464618686306237820, -0.885510856136199950, 0.464448883185830770, + -0.885599929374113360, + 0.464279062988965760, -0.885688970051048960, 0.464109225721887010, + -0.885777978163732940, + 0.463939371390838460, -0.885866953708892790, 0.463769500002065680, + -0.885955896683257030, + 0.463599611561814120, -0.886044807083555490, 0.463429706076329880, + -0.886133684906519340, + 0.463259783551860260, -0.886222530148880640, 0.463089843994652470, + -0.886311342807372890, + 0.462919887410955130, -0.886400122878730490, 0.462749913807016850, + -0.886488870359689600, + 0.462579923189086810, -0.886577585246987040, 0.462409915563415540, + -0.886666267537360890, + 0.462239890936253280, -0.886754917227550950, 0.462069849313851810, + -0.886843534314297300, + 0.461899790702462840, -0.886932118794342080, 0.461729715108338770, + -0.887020670664428360, + 0.461559622537733190, -0.887109189921300060, 0.461389512996899450, + -0.887197676561702900, + 0.461219386492092430, -0.887286130582383150, 0.461049243029567010, + -0.887374551980088740, + 0.460879082615578690, -0.887462940751568840, 0.460708905256384190, + -0.887551296893573370, + 0.460538710958240010, -0.887639620402853930, 0.460368499727404070, + -0.887727911276163020, + 0.460198271570134270, -0.887816169510254550, 0.460028026492689700, + -0.887904395101883240, + 0.459857764501329650, -0.887992588047805560, 0.459687485602313870, + -0.888080748344778900, + 0.459517189801903590, -0.888168875989561620, 0.459346877106359570, + -0.888256970978913870, + 0.459176547521944150, -0.888345033309596240, 0.459006201054919680, + -0.888433062978371320, + 0.458835837711549120, -0.888521059982002260, 0.458665457498096670, + -0.888609024317253750, + 0.458495060420826220, -0.888696955980891710, 0.458324646486003300, + -0.888784854969682850, + 0.458154215699893230, -0.888872721280395520, 0.457983768068762180, + -0.888960554909799310, + 0.457813303598877290, -0.889048355854664570, 0.457642822296505770, + -0.889136124111763240, + 0.457472324167916110, -0.889223859677868210, 0.457301809219376800, + -0.889311562549753850, + 0.457131277457156980, -0.889399232724195520, 0.456960728887527030, + -0.889486870197969790, + 0.456790163516757220, -0.889574474967854580, 0.456619581351118960, + -0.889662047030628790, + 0.456448982396883860, -0.889749586383072890, 0.456278366660324670, + -0.889837093021967900, + 0.456107734147714220, -0.889924566944096720, 0.455937084865326030, + -0.890012008146243260, + 0.455766418819434750, -0.890099416625192210, 0.455595736016314920, + -0.890186792377730240, + 0.455425036462242420, -0.890274135400644480, 0.455254320163493210, + -0.890361445690723730, + 0.455083587126343840, -0.890448723244757880, 0.454912837357072050, + -0.890535968059537830, + 0.454742070861955450, -0.890623180131855930, 0.454571287647273000, + -0.890710359458505520, + 0.454400487719303750, -0.890797506036281490, 0.454229671084327320, + -0.890884619861979530, + 0.454058837748624540, -0.890971700932396750, 0.453887987718476050, + -0.891058749244331590, + 0.453717121000163930, -0.891145764794583180, 0.453546237599970260, + -0.891232747579952520, + 0.453375337524177750, -0.891319697597241390, 0.453204420779070300, + -0.891406614843252900, + 0.453033487370931580, -0.891493499314791380, 0.452862537306046810, + -0.891580351008662290, + 0.452691570590700860, -0.891667169921672390, 0.452520587231180100, + -0.891753956050629460, + 0.452349587233771000, -0.891840709392342720, 0.452178570604760410, + -0.891927429943622510, + 0.452007537350436530, -0.892014117701280360, 0.451836487477087430, + -0.892100772662129170, + 0.451665420991002540, -0.892187394822982480, 0.451494337898471210, + -0.892273984180655730, + 0.451323238205783520, -0.892360540731965360, 0.451152121919230710, + -0.892447064473728680, + 0.450980989045103810, -0.892533555402764690, 0.450809839589695340, + -0.892620013515893040, + 0.450638673559297760, -0.892706438809935280, 0.450467490960204110, + -0.892792831281713610, + 0.450296291798708730, -0.892879190928051680, 0.450125076081105750, + -0.892965517745774260, + 0.449953843813690580, -0.893051811731707450, 0.449782595002758860, + -0.893138072882678210, + 0.449611329654606600, -0.893224301195515320, 0.449440047775531260, + -0.893310496667048090, + 0.449268749371829920, -0.893396659294107610, 0.449097434449801100, + -0.893482789073525850, + 0.448926103015743260, -0.893568886002136020, 0.448754755075956020, + -0.893654950076772430, + 0.448583390636739300, -0.893740981294271040, 0.448412009704393430, + -0.893826979651468620, + 0.448240612285220000, -0.893912945145203250, 0.448069198385520340, + -0.893998877772314240, + 0.447897768011597310, -0.894084777529641990, 0.447726321169753750, + -0.894170644414028270, + 0.447554857866293010, -0.894256478422316040, 0.447383378107519710, + -0.894342279551349480, + 0.447211881899738260, -0.894428047797973800, 0.447040369249254500, + -0.894513783159035620, + 0.446868840162374330, -0.894599485631382580, 0.446697294645404090, + -0.894685155211863980, + 0.446525732704651400, -0.894770791897329550, 0.446354154346423840, + -0.894856395684630930, + 0.446182559577030120, -0.894941966570620750, 0.446010948402779110, + -0.895027504552152630, + 0.445839320829980350, -0.895113009626081760, 0.445667676864944350, + -0.895198481789264200, + 0.445496016513981740, -0.895283921038557580, 0.445324339783404240, + -0.895369327370820310, + 0.445152646679523590, -0.895454700782912450, 0.444980937208652780, + -0.895540041271694840, + 0.444809211377105000, -0.895625348834030000, 0.444637469191193790, + -0.895710623466781320, + 0.444465710657234110, -0.895795865166813420, 0.444293935781540580, + -0.895881073930992370, + 0.444122144570429260, -0.895966249756185110, 0.443950337030216250, + -0.896051392639260040, + 0.443778513167218220, -0.896136502577086770, 0.443606672987753080, + -0.896221579566535920, + 0.443434816498138430, -0.896306623604479660, 0.443262943704693380, + -0.896391634687790820, + 0.443091054613736990, -0.896476612813344010, 0.442919149231588980, + -0.896561557978014960, + 0.442747227564570130, -0.896646470178680150, 0.442575289619001170, + -0.896731349412217880, + 0.442403335401204130, -0.896816195675507190, 0.442231364917501090, + -0.896901008965428680, + 0.442059378174214760, -0.896985789278863970, 0.441887375177668960, + -0.897070536612695870, + 0.441715355934187310, -0.897155250963808550, 0.441543320450094920, + -0.897239932329087050, + 0.441371268731716620, -0.897324580705418320, 0.441199200785378660, + -0.897409196089689720, + 0.441027116617407340, -0.897493778478790190, 0.440855016234129430, + -0.897578327869610230, + 0.440682899641873020, -0.897662844259040750, 0.440510766846965880, + -0.897747327643974690, + 0.440338617855737300, -0.897831778021305650, 0.440166452674516480, + -0.897916195387928550, + 0.439994271309633260, -0.898000579740739880, 0.439822073767418610, + -0.898084931076636780, + 0.439649860054203420, -0.898169249392518080, 0.439477630176319860, + -0.898253534685283570, + 0.439305384140100060, -0.898337786951834190, 0.439133121951876930, + -0.898422006189072530, + 0.438960843617984430, -0.898506192393901840, 0.438788549144756290, + -0.898590345563227030, + 0.438616238538527710, -0.898674465693953820, 0.438443911805633860, + -0.898758552782989440, + 0.438271568952410480, -0.898842606827242260, 0.438099209985194580, + -0.898926627823621870, + 0.437926834910322860, -0.899010615769039070, 0.437754443734133470, + -0.899094570660405770, + 0.437582036462964340, -0.899178492494635330, 0.437409613103154850, + -0.899262381268642000, + 0.437237173661044200, -0.899346236979341460, 0.437064718142972370, + -0.899430059623650860, + 0.436892246555280470, -0.899513849198487870, 0.436719758904309310, + -0.899597605700772180, + 0.436547255196401250, -0.899681329127423930, 0.436374735437898510, + -0.899765019475365020, + 0.436202199635143950, -0.899848676741518580, 0.436029647794481670, + -0.899932300922808400, + 0.435857079922255470, -0.900015892016160280, 0.435684496024810520, + -0.900099450018500340, + 0.435511896108492170, -0.900182974926756700, 0.435339280179646070, + -0.900266466737858480, + 0.435166648244619370, -0.900349925448735600, 0.434994000309758710, + -0.900433351056319830, + 0.434821336381412350, -0.900516743557543520, 0.434648656465928430, + -0.900600102949340790, + 0.434475960569655710, -0.900683429228646860, 0.434303248698944100, + -0.900766722392397860, + 0.434130520860143310, -0.900849982437531450, 0.433957777059604480, + -0.900933209360986200, + 0.433785017303678520, -0.901016403159702330, 0.433612241598717640, + -0.901099563830620950, + 0.433439449951074200, -0.901182691370684410, 0.433266642367100940, + -0.901265785776836580, + 0.433093818853152010, -0.901348847046022030, 0.432920979415581220, + -0.901431875175186970, + 0.432748124060743760, -0.901514870161278630, 0.432575252794994810, + -0.901597832001245660, + 0.432402365624690140, -0.901680760692037730, 0.432229462556186770, + -0.901763656230605610, + 0.432056543595841450, -0.901846518613901860, 0.431883608750012300, + -0.901929347838879350, + 0.431710658025057370, -0.902012143902493070, 0.431537691427335500, + -0.902094906801698900, + 0.431364708963206440, -0.902177636533453510, 0.431191710639030000, + -0.902260333094715540, + 0.431018696461167080, -0.902342996482444200, 0.430845666435978820, + -0.902425626693600270, + 0.430672620569826860, -0.902508223725145830, 0.430499558869073930, + -0.902590787574043870, + 0.430326481340082610, -0.902673318237258830, 0.430153387989216930, + -0.902755815711756120, + 0.429980278822840570, -0.902838279994502830, 0.429807153847318770, + -0.902920711082466630, + 0.429634013069016500, -0.903003108972617040, 0.429460856494299490, + -0.903085473661924600, + 0.429287684129534720, -0.903167805147360610, 0.429114495981088690, + -0.903250103425898400, + 0.428941292055329550, -0.903332368494511820, 0.428768072358625240, + -0.903414600350176290, + 0.428594836897344400, -0.903496798989868450, 0.428421585677856760, + -0.903578964410565950, + 0.428248318706531910, -0.903661096609247980, 0.428075035989740780, + -0.903743195582894620, + 0.427901737533854240, -0.903825261328487390, 0.427728423345243860, + -0.903907293843009050, + 0.427555093430282200, -0.903989293123443340, 0.427381747795341770, + -0.904071259166775440, + 0.427208386446796370, -0.904153191969991670, 0.427035009391019790, + -0.904235091530079750, + 0.426861616634386490, -0.904316957844028320, 0.426688208183271970, + -0.904398790908827350, + 0.426514784044051520, -0.904480590721468250, 0.426341344223101880, + -0.904562357278943190, + 0.426167888726799620, -0.904644090578246240, 0.425994417561522450, + -0.904725790616371930, + 0.425820930733648300, -0.904807457390316540, 0.425647428249555590, + -0.904889090897077470, + 0.425473910115623910, -0.904970691133653250, 0.425300376338232590, + -0.905052258097043590, + 0.425126826923762410, -0.905133791784249580, 0.424953261878594060, + -0.905215292192273480, + 0.424779681209108810, -0.905296759318118820, 0.424606084921689220, + -0.905378193158789980, + 0.424432473022717420, -0.905459593711293250, 0.424258845518577010, + -0.905540960972635480, + 0.424085202415651670, -0.905622294939825160, 0.423911543720325580, + -0.905703595609872010, + 0.423737869438983950, -0.905784862979786440, 0.423564179578011960, + -0.905866097046580940, + 0.423390474143796100, -0.905947297807268460, 0.423216753142722780, + -0.906028465258863490, + 0.423043016581179100, -0.906109599398381980, 0.422869264465553170, + -0.906190700222840540, + 0.422695496802232950, -0.906271767729257660, 0.422521713597607870, + -0.906352801914652280, + 0.422347914858067000, -0.906433802776045460, 0.422174100590000820, + -0.906514770310458800, + 0.422000270799799790, -0.906595704514915330, 0.421826425493854910, + -0.906676605386439460, + 0.421652564678558380, -0.906757472922056550, 0.421478688360302220, + -0.906838307118793540, + 0.421304796545479700, -0.906919107973678030, 0.421130889240484140, + -0.906999875483739610, + 0.420956966451709440, -0.907080609646008450, 0.420783028185550630, + -0.907161310457516250, + 0.420609074448402510, -0.907241977915295930, 0.420435105246661220, + -0.907322612016381310, + 0.420261120586723050, -0.907403212757808000, 0.420087120474984590, + -0.907483780136612570, + 0.419913104917843730, -0.907564314149832520, 0.419739073921698180, + -0.907644814794507090, + 0.419565027492946940, -0.907725282067676330, 0.419390965637989050, + -0.907805715966381820, + 0.419216888363223960, -0.907886116487666150, 0.419042795675052480, + -0.907966483628573240, + 0.418868687579875110, -0.908046817386148340, 0.418694564084093610, + -0.908127117757437600, + 0.418520425194109700, -0.908207384739488700, 0.418346270916326310, + -0.908287618329350450, + 0.418172101257146430, -0.908367818524072780, 0.417997916222973550, + -0.908447985320707250, + 0.417823715820212380, -0.908528118716306120, 0.417649500055267410, + -0.908608218707923190, + 0.417475268934544340, -0.908688285292613360, 0.417301022464449060, + -0.908768318467432780, + 0.417126760651387870, -0.908848318229439120, 0.416952483501768280, + -0.908928284575690640, + 0.416778191021997590, -0.909008217503247450, 0.416603883218484410, + -0.909088117009170580, + 0.416429560097637320, -0.909167983090522270, 0.416255221665865480, + -0.909247815744366310, + 0.416080867929579320, -0.909327614967767260, 0.415906498895188770, + -0.909407380757791260, + 0.415732114569105420, -0.909487113111505430, 0.415557714957740580, + -0.909566812025978220, + 0.415383300067506290, -0.909646477498279540, 0.415208869904815650, + -0.909726109525480160, + 0.415034424476081630, -0.909805708104652220, 0.414859963787718390, + -0.909885273232869160, + 0.414685487846140010, -0.909964804907205660, 0.414510996657761810, + -0.910044303124737390, + 0.414336490228999210, -0.910123767882541570, 0.414161968566268080, + -0.910203199177696540, + 0.413987431675985510, -0.910282597007281760, 0.413812879564568300, + -0.910361961368377990, + 0.413638312238434560, -0.910441292258067140, 0.413463729704002580, + -0.910520589673432630, + 0.413289131967690960, -0.910599853611558930, 0.413114519035919560, + -0.910679084069531570, + 0.412939890915108020, -0.910758281044437570, 0.412765247611677320, + -0.910837444533365010, + 0.412590589132048380, -0.910916574533403240, 0.412415915482642730, + -0.910995671041643140, + 0.412241226669883000, -0.911074734055176250, 0.412066522700191560, + -0.911153763571095900, + 0.411891803579992220, -0.911232759586496190, 0.411717069315708670, + -0.911311722098472670, + 0.411542319913765280, -0.911390651104122320, 0.411367555380587340, + -0.911469546600543020, + 0.411192775722600160, -0.911548408584833990, 0.411017980946230270, + -0.911627237054095650, + 0.410843171057903910, -0.911706032005429880, 0.410668346064048780, + -0.911784793435939430, + 0.410493505971092520, -0.911863521342728520, 0.410318650785463260, + -0.911942215722902570, + 0.410143780513590350, -0.912020876573568230, 0.409968895161902820, + -0.912099503891833470, + 0.409793994736831200, -0.912178097674807060, 0.409619079244805840, + -0.912256657919599650, + 0.409444148692257590, -0.912335184623322750, 0.409269203085618700, + -0.912413677783089020, + 0.409094242431320920, -0.912492137396012650, 0.408919266735797480, + -0.912570563459208730, + 0.408744276005481520, -0.912648955969793900, 0.408569270246806780, + -0.912727314924885900, + 0.408394249466208110, -0.912805640321603500, 0.408219213670120100, + -0.912883932157067200, + 0.408044162864978740, -0.912962190428398100, 0.407869097057219960, + -0.913040415132719160, + 0.407694016253280170, -0.913118606267154130, 0.407518920459597030, + -0.913196763828828200, + 0.407343809682607970, -0.913274887814867760, 0.407168683928751610, + -0.913352978222400250, + 0.406993543204466460, -0.913431035048554720, 0.406818387516192370, + -0.913509058290461140, + 0.406643216870369140, -0.913587047945250810, 0.406468031273437000, + -0.913665004010056350, + 0.406292830731837470, -0.913742926482011390, 0.406117615252011790, + -0.913820815358251100, + 0.405942384840402570, -0.913898670635911680, 0.405767139503452220, + -0.913976492312130520, + 0.405591879247603870, -0.914054280384046460, 0.405416604079301750, + -0.914132034848799460, + 0.405241314004989860, -0.914209755703530690, 0.405066009031113390, + -0.914287442945382440, + 0.404890689164117750, -0.914365096571498450, 0.404715354410448650, + -0.914442716579023870, + 0.404540004776553110, -0.914520302965104450, 0.404364640268877810, + -0.914597855726887790, + 0.404189260893870750, -0.914675374861522390, 0.404013866657980060, + -0.914752860366158100, + 0.403838457567654130, -0.914830312237946090, 0.403663033629342750, + -0.914907730474038620, + 0.403487594849495310, -0.914985115071589310, 0.403312141234562660, + -0.915062466027752760, + 0.403136672790995240, -0.915139783339685260, 0.402961189525244960, + -0.915217067004543750, + 0.402785691443763640, -0.915294317019487050, 0.402610178553003680, + -0.915371533381674760, + 0.402434650859418540, -0.915448716088267830, 0.402259108369461440, + -0.915525865136428530, + 0.402083551089587040, -0.915602980523320230, 0.401907979026249860, + -0.915680062246107650, + 0.401732392185905010, -0.915757110301956720, 0.401556790575008650, + -0.915834124688034710, + 0.401381174200016790, -0.915911105401509880, 0.401205543067386760, + -0.915988052439551840, + 0.401029897183575790, -0.916064965799331610, 0.400854236555041650, + -0.916141845478021350, + 0.400678561188243350, -0.916218691472794110, 0.400502871089639500, + -0.916295503780824800, + 0.400327166265690150, -0.916372282399289140, 0.400151446722855300, + -0.916449027325364040, + 0.399975712467595390, -0.916525738556228100, 0.399799963506372090, + -0.916602416089060680, + 0.399624199845646790, -0.916679059921042700, 0.399448421491882260, + -0.916755670049355990, + 0.399272628451540930, -0.916832246471183890, 0.399096820731086600, + -0.916908789183710990, + 0.398920998336983020, -0.916985298184122890, 0.398745161275694480, + -0.917061773469606820, + 0.398569309553686360, -0.917138215037350710, 0.398393443177423920, + -0.917214622884544250, + 0.398217562153373620, -0.917290997008377910, 0.398041666488001930, + -0.917367337406043810, + 0.397865756187775750, -0.917443644074735220, 0.397689831259163240, + -0.917519917011646260, + 0.397513891708632330, -0.917596156213972950, 0.397337937542652120, + -0.917672361678911750, + 0.397161968767691720, -0.917748533403661250, 0.396985985390220900, + -0.917824671385420570, + 0.396809987416710420, -0.917900775621390390, 0.396633974853630830, + -0.917976846108772730, + 0.396457947707453960, -0.918052882844770380, 0.396281905984651680, + -0.918128885826587910, + 0.396105849691696320, -0.918204855051430900, 0.395929778835061360, + -0.918280790516506130, + 0.395753693421220080, -0.918356692219021720, 0.395577593456646950, + -0.918432560156186790, + 0.395401478947816300, -0.918508394325212250, 0.395225349901203730, + -0.918584194723309540, + 0.395049206323284880, -0.918659961347691900, 0.394873048220535760, + -0.918735694195573550, + 0.394696875599433670, -0.918811393264169940, 0.394520688466455550, + -0.918887058550697970, + 0.394344486828079650, -0.918962690052375630, 0.394168270690784250, + -0.919038287766421940, + 0.393992040061048100, -0.919113851690057770, 0.393815794945351130, + -0.919189381820504470, + 0.393639535350172880, -0.919264878154985250, 0.393463261281994380, + -0.919340340690724230, + 0.393286972747296570, -0.919415769424946960, 0.393110669752560760, + -0.919491164354880100, + 0.392934352304269600, -0.919566525477751530, 0.392758020408905280, + -0.919641852790790470, + 0.392581674072951530, -0.919717146291227360, 0.392405313302891860, + -0.919792405976293750, + 0.392228938105210370, -0.919867631843222950, 0.392052548486392200, + -0.919942823889248640, + 0.391876144452922350, -0.920017982111606570, 0.391699726011287050, + -0.920093106507533070, + 0.391523293167972350, -0.920168197074266450, 0.391346845929465610, + -0.920243253809045370, + 0.391170384302253980, -0.920318276709110480, 0.390993908292825380, + -0.920393265771703550, + 0.390817417907668610, -0.920468220994067110, 0.390640913153272370, + -0.920543142373445480, + 0.390464394036126650, -0.920618029907083860, 0.390287860562721360, + -0.920692883592229010, + 0.390111312739546910, -0.920767703426128790, 0.389934750573094790, + -0.920842489406032080, + 0.389758174069856410, -0.920917241529189520, 0.389581583236324360, + -0.920991959792852310, + 0.389404978078991100, -0.921066644194273530, 0.389228358604349730, + -0.921141294730707270, + 0.389051724818894500, -0.921215911399408730, 0.388875076729119250, + -0.921290494197634540, + 0.388698414341519250, -0.921365043122642340, 0.388521737662589740, + -0.921439558171691320, + 0.388345046698826300, -0.921514039342041900, 0.388168341456725850, + -0.921588486630955380, + 0.387991621942784910, -0.921662900035694730, 0.387814888163501290, + -0.921737279553523800, + 0.387638140125372680, -0.921811625181708120, 0.387461377834897920, + -0.921885936917513970, + 0.387284601298575890, -0.921960214758209110, 0.387107810522905990, + -0.922034458701062820, + 0.386931005514388690, -0.922108668743345070, 0.386754186279524130, + -0.922182844882327600, + 0.386577352824813980, -0.922256987115283030, 0.386400505156759610, + -0.922331095439485330, + 0.386223643281862980, -0.922405169852209880, 0.386046767206627280, + -0.922479210350733100, + 0.385869876937555310, -0.922553216932332830, 0.385692972481151200, + -0.922627189594287800, + 0.385516053843919020, -0.922701128333878520, 0.385339121032363340, + -0.922775033148386380, + 0.385162174052989970, -0.922848904035094120, 0.384985212912304200, + -0.922922740991285680, + 0.384808237616812930, -0.922996544014246250, 0.384631248173022740, + -0.923070313101262420, + 0.384454244587440870, -0.923144048249621820, 0.384277226866575620, + -0.923217749456613500, + 0.384100195016935040, -0.923291416719527640, 0.383923149045028500, + -0.923365050035655610, + 0.383746088957365010, -0.923438649402290370, 0.383569014760454960, + -0.923512214816725520, + 0.383391926460808770, -0.923585746276256560, 0.383214824064937180, + -0.923659243778179980, + 0.383037707579352130, -0.923732707319793180, 0.382860577010565360, + -0.923806136898395410, + 0.382683432365089840, -0.923879532511286740, 0.382506273649438400, + -0.923952894155768640, + 0.382329100870124510, -0.924026221829143850, 0.382151914033662720, + -0.924099515528716280, + 0.381974713146567220, -0.924172775251791200, 0.381797498215353690, + -0.924246000995674890, + 0.381620269246537520, -0.924319192757675160, 0.381443026246634730, + -0.924392350535101050, + 0.381265769222162490, -0.924465474325262600, 0.381088498179637520, + -0.924538564125471420, + 0.380911213125578130, -0.924611619933039970, 0.380733914066502090, + -0.924684641745282530, + 0.380556601008928570, -0.924757629559513910, 0.380379273959376710, + -0.924830583373050800, + 0.380201932924366050, -0.924903503183210910, 0.380024577910417380, + -0.924976388987313050, + 0.379847208924051110, -0.925049240782677580, 0.379669825971789000, + -0.925122058566625770, + 0.379492429060152740, -0.925194842336480420, 0.379315018195664430, + -0.925267592089565550, + 0.379137593384847430, -0.925340307823206200, 0.378960154634224720, + -0.925412989534729060, + 0.378782701950320600, -0.925485637221461490, 0.378605235339659290, + -0.925558250880732620, + 0.378427754808765620, -0.925630830509872720, 0.378250260364165310, + -0.925703376106213120, + 0.378072752012383990, -0.925775887667086740, 0.377895229759948550, + -0.925848365189827270, + 0.377717693613385810, -0.925920808671769960, 0.377540143579222940, + -0.925993218110251480, + 0.377362579663988450, -0.926065593502609310, 0.377185001874210450, + -0.926137934846182560, + 0.377007410216418310, -0.926210242138311270, 0.376829804697141220, + -0.926282515376337210, + 0.376652185322909620, -0.926354754557602860, 0.376474552100253880, + -0.926426959679452100, + 0.376296905035704790, -0.926499130739230510, 0.376119244135794390, + -0.926571267734284220, + 0.375941569407054420, -0.926643370661961230, 0.375763880856017750, + -0.926715439519610330, + 0.375586178489217330, -0.926787474304581750, 0.375408462313186590, + -0.926859475014227160, + 0.375230732334460030, -0.926931441645899130, 0.375052988559571860, + -0.927003374196951670, + 0.374875230995057600, -0.927075272664740100, 0.374697459647452770, + -0.927147137046620880, + 0.374519674523293210, -0.927218967339951790, 0.374341875629116030, + -0.927290763542091720, + 0.374164062971457990, -0.927362525650401110, 0.373986236556857090, + -0.927434253662241300, + 0.373808396391851370, -0.927505947574975180, 0.373630542482979280, + -0.927577607385966730, + 0.373452674836780410, -0.927649233092581180, 0.373274793459794030, + -0.927720824692185200, + 0.373096898358560690, -0.927792382182146320, 0.372918989539620770, + -0.927863905559833780, + 0.372741067009515810, -0.927935394822617890, 0.372563130774787370, + -0.928006849967869970, + 0.372385180841977360, -0.928078270992963140, 0.372207217217628950, + -0.928149657895271150, + 0.372029239908284960, -0.928221010672169440, 0.371851248920489540, + -0.928292329321034560, + 0.371673244260786630, -0.928363613839244370, 0.371495225935720760, + -0.928434864224177980, + 0.371317193951837600, -0.928506080473215480, 0.371139148315682510, + -0.928577262583738850, + 0.370961089033802040, -0.928648410553130520, 0.370783016112742720, + -0.928719524378774700, + 0.370604929559051670, -0.928790604058057020, 0.370426829379276900, + -0.928861649588363700, + 0.370248715579966360, -0.928932660967082820, 0.370070588167669130, + -0.929003638191603360, + 0.369892447148934270, -0.929074581259315750, 0.369714292530311240, + -0.929145490167611720, + 0.369536124318350760, -0.929216364913883930, 0.369357942519603190, + -0.929287205495526790, + 0.369179747140620070, -0.929358011909935500, 0.369001538187952780, + -0.929428784154506800, + 0.368823315668153960, -0.929499522226638560, 0.368645079587776150, + -0.929570226123729860, + 0.368466829953372320, -0.929640895843181330, 0.368288566771496680, + -0.929711531382394370, + 0.368110290048703050, -0.929782132738772190, 0.367931999791546500, + -0.929852699909718750, + 0.367753696006582090, -0.929923232892639560, 0.367575378700365330, + -0.929993731684941480, + 0.367397047879452820, -0.930064196284032360, 0.367218703550400930, + -0.930134626687321390, + 0.367040345719767240, -0.930205022892219070, 0.366861974394109220, + -0.930275384896137040, + 0.366683589579984930, -0.930345712696488470, 0.366505191283953480, + -0.930416006290687550, + 0.366326779512573590, -0.930486265676149780, 0.366148354272405390, + -0.930556490850291800, + 0.365969915570008910, -0.930626681810531650, 0.365791463411944570, + -0.930696838554288860, + 0.365612997804773960, -0.930766961078983710, 0.365434518755058390, + -0.930837049382038150, + 0.365256026269360380, -0.930907103460875020, 0.365077520354242180, + -0.930977123312918930, + 0.364899001016267380, -0.931047108935595170, 0.364720468261999390, + -0.931117060326330790, + 0.364541922098002180, -0.931186977482553750, 0.364363362530840730, + -0.931256860401693420, + 0.364184789567079840, -0.931326709081180430, 0.364006203213285530, + -0.931396523518446600, + 0.363827603476023610, -0.931466303710925090, 0.363648990361860550, + -0.931536049656050300, + 0.363470363877363870, -0.931605761351257830, 0.363291724029100700, + -0.931675438793984620, + 0.363113070823639530, -0.931745081981668720, 0.362934404267548750, + -0.931814690911749620, + 0.362755724367397230, -0.931884265581668150, 0.362577031129754870, + -0.931953805988865900, + 0.362398324561191310, -0.932023312130786490, 0.362219604668277570, + -0.932092784004874050, + 0.362040871457584350, -0.932162221608574320, 0.361862124935682980, + -0.932231624939334540, + 0.361683365109145950, -0.932300993994602640, 0.361504591984545260, + -0.932370328771828460, + 0.361325805568454340, -0.932439629268462360, 0.361147005867446190, + -0.932508895481956700, + 0.360968192888095290, -0.932578127409764420, 0.360789366636975690, + -0.932647325049340340, + 0.360610527120662270, -0.932716488398140250, 0.360431674345730810, + -0.932785617453620990, + 0.360252808318756830, -0.932854712213241230, 0.360073929046317080, + -0.932923772674460140, + 0.359895036534988280, -0.932992798834738850, 0.359716130791347570, + -0.933061790691539380, + 0.359537211821973180, -0.933130748242325110, 0.359358279633443080, + -0.933199671484560730, + 0.359179334232336560, -0.933268560415712050, 0.359000375625232630, + -0.933337415033246080, + 0.358821403818710920, -0.933406235334631520, 0.358642418819352100, + -0.933475021317337950, + 0.358463420633736540, -0.933543772978836170, 0.358284409268445900, + -0.933612490316598540, + 0.358105384730061760, -0.933681173328098300, 0.357926347025166070, + -0.933749822010810580, + 0.357747296160342010, -0.933818436362210960, 0.357568232142172260, + -0.933887016379776890, + 0.357389154977241000, -0.933955562060986730, 0.357210064672131900, + -0.934024073403320500, + 0.357030961233430030, -0.934092550404258870, 0.356851844667720410, + -0.934160993061284420, + 0.356672714981588260, -0.934229401371880820, 0.356493572181620200, + -0.934297775333532530, + 0.356314416274402360, -0.934366114943725900, 0.356135247266522180, + -0.934434420199948050, + 0.355956065164567010, -0.934502691099687870, 0.355776869975124640, + -0.934570927640435030, + 0.355597661704783960, -0.934639129819680780, 0.355418440360133590, + -0.934707297634917440, + 0.355239205947763370, -0.934775431083638700, 0.355059958474263030, + -0.934843530163339430, + 0.354880697946222790, -0.934911594871516090, 0.354701424370233940, + -0.934979625205665800, + 0.354522137752887430, -0.935047621163287430, 0.354342838100775600, + -0.935115582741880890, + 0.354163525420490510, -0.935183509938947500, 0.353984199718624830, + -0.935251402751989810, + 0.353804861001772160, -0.935319261178511500, 0.353625509276525970, + -0.935387085216017770, + 0.353446144549480870, -0.935454874862014620, 0.353266766827231180, + -0.935522630114009930, + 0.353087376116372530, -0.935590350969512370, 0.352907972423500360, + -0.935658037426032040, + 0.352728555755210730, -0.935725689481080370, 0.352549126118100580, + -0.935793307132169900, + 0.352369683518766630, -0.935860890376814640, 0.352190227963806890, + -0.935928439212529660, + 0.352010759459819240, -0.935995953636831300, 0.351831278013402030, + -0.936063433647237540, + 0.351651783631154680, -0.936130879241266920, 0.351472276319676260, + -0.936198290416440090, + 0.351292756085567150, -0.936265667170278260, 0.351113222935427630, + -0.936333009500304180, + 0.350933676875858360, -0.936400317404042060, 0.350754117913461170, + -0.936467590879016880, + 0.350574546054837570, -0.936534829922755500, 0.350394961306590200, + -0.936602034532785570, + 0.350215363675321740, -0.936669204706636060, 0.350035753167635300, + -0.936736340441837620, + 0.349856129790135030, -0.936803441735921560, 0.349676493549424760, + -0.936870508586420960, + 0.349496844452109600, -0.936937540990869900, 0.349317182504794320, + -0.937004538946803690, + 0.349137507714085030, -0.937071502451759190, 0.348957820086587600, + -0.937138431503274140, + 0.348778119628908420, -0.937205326098887960, 0.348598406347655040, + -0.937272186236140950, + 0.348418680249434510, -0.937339011912574960, 0.348238941340855310, + -0.937405803125732850, + 0.348059189628525780, -0.937472559873159140, 0.347879425119054510, + -0.937539282152399230, + 0.347699647819051490, -0.937605969960999990, 0.347519857735126110, + -0.937672623296509470, + 0.347340054873889190, -0.937739242156476970, 0.347160239241951330, + -0.937805826538453010, + 0.346980410845923680, -0.937872376439989890, 0.346800569692418400, + -0.937938891858640210, + 0.346620715788047320, -0.938005372791958840, 0.346440849139423580, + -0.938071819237501160, + 0.346260969753160170, -0.938138231192824360, 0.346081077635870480, + -0.938204608655486490, + 0.345901172794169100, -0.938270951623047080, 0.345721255234670120, + -0.938337260093066950, + 0.345541324963989150, -0.938403534063108060, 0.345361381988741170, + -0.938469773530733800, + 0.345181426315542610, -0.938535978493508560, 0.345001457951009780, + -0.938602148948998290, + 0.344821476901759290, -0.938668284894770170, 0.344641483174409070, + -0.938734386328392460, + 0.344461476775576480, -0.938800453247434770, 0.344281457711880230, + -0.938866485649468060, + 0.344101425989938980, -0.938932483532064490, 0.343921381616371700, + -0.938998446892797540, + 0.343741324597798600, -0.939064375729241950, 0.343561254940839330, + -0.939130270038973650, + 0.343381172652115100, -0.939196129819569900, 0.343201077738246710, + -0.939261955068609100, + 0.343020970205855540, -0.939327745783671400, 0.342840850061564060, + -0.939393501962337510, + 0.342660717311994380, -0.939459223602189920, 0.342480571963769850, + -0.939524910700812120, + 0.342300414023513690, -0.939590563255789160, 0.342120243497849590, + -0.939656181264707070, + 0.341940060393402300, -0.939721764725153340, 0.341759864716796310, + -0.939787313634716570, + 0.341579656474657210, -0.939852827990986680, 0.341399435673610360, + -0.939918307791555050, + 0.341219202320282410, -0.939983753034013940, 0.341038956421299830, + -0.940049163715957370, + 0.340858697983289440, -0.940114539834980280, 0.340678427012879310, + -0.940179881388678810, + 0.340498143516697100, -0.940245188374650880, 0.340317847501371730, + -0.940310460790495070, + 0.340137538973531880, -0.940375698633811540, 0.339957217939806880, + -0.940440901902201750, + 0.339776884406826960, -0.940506070593268300, 0.339596538381222060, + -0.940571204704615190, + 0.339416179869623410, -0.940636304233847590, 0.339235808878662120, + -0.940701369178571940, + 0.339055425414969640, -0.940766399536396070, 0.338875029485178560, + -0.940831395304928870, + 0.338694621095921190, -0.940896356481780830, 0.338514200253831000, + -0.940961283064563280, + 0.338333766965541290, -0.941026175050889260, 0.338153321237685990, + -0.941091032438372780, + 0.337972863076899830, -0.941155855224629190, 0.337792392489817460, + -0.941220643407275180, + 0.337611909483074680, -0.941285396983928660, 0.337431414063306790, + -0.941350115952208970, + 0.337250906237150650, -0.941414800309736230, 0.337070386011242730, + -0.941479450054132580, + 0.336889853392220050, -0.941544065183020810, 0.336709308386720700, + -0.941608645694025140, + 0.336528751001382350, -0.941673191584771360, 0.336348181242844100, + -0.941737702852886160, + 0.336167599117744690, -0.941802179495997650, 0.335987004632723350, + -0.941866621511735280, + 0.335806397794420560, -0.941931028897729510, 0.335625778609476230, + -0.941995401651612550, + 0.335445147084531660, -0.942059739771017310, 0.335264503226227970, + -0.942124043253578460, + 0.335083847041206580, -0.942188312096931770, 0.334903178536110290, + -0.942252546298714020, + 0.334722497717581220, -0.942316745856563780, 0.334541804592262960, + -0.942380910768120470, + 0.334361099166798900, -0.942445041031024890, 0.334180381447832740, + -0.942509136642919240, + 0.333999651442009490, -0.942573197601446870, 0.333818909155973620, + -0.942637223904252530, + 0.333638154596370920, -0.942701215548981900, 0.333457387769846790, + -0.942765172533282510, + 0.333276608683047980, -0.942829094854802710, 0.333095817342620890, + -0.942892982511192130, + 0.332915013755212650, -0.942956835500102120, 0.332734197927471160, + -0.943020653819184650, + 0.332553369866044220, -0.943084437466093490, 0.332372529577580680, + -0.943148186438483420, + 0.332191677068729320, -0.943211900734010620, 0.332010812346139380, + -0.943275580350332540, + 0.331829935416461220, -0.943339225285107720, 0.331649046286344620, + -0.943402835535996240, + 0.331468144962440920, -0.943466411100659320, 0.331287231451400990, + -0.943529951976759370, + 0.331106305759876430, -0.943593458161960390, 0.330925367894519650, + -0.943656929653927110, + 0.330744417861982890, -0.943720366450326200, 0.330563455668919590, + -0.943783768548825060, + 0.330382481321982950, -0.943847135947092690, 0.330201494827826620, + -0.943910468642799150, + 0.330020496193105530, -0.943973766633615980, 0.329839485424473940, + -0.944037029917215830, + 0.329658462528587550, -0.944100258491272660, 0.329477427512101680, + -0.944163452353461770, + 0.329296380381672800, -0.944226611501459810, 0.329115321143957360, + -0.944289735932944410, + 0.328934249805612200, -0.944352825645594750, 0.328753166373295100, + -0.944415880637091250, + 0.328572070853663690, -0.944478900905115550, 0.328390963253376630, + -0.944541886447350380, + 0.328209843579092660, -0.944604837261480260, 0.328028711837470730, + -0.944667753345190490, + 0.327847568035170960, -0.944730634696167800, 0.327666412178853060, + -0.944793481312100280, + 0.327485244275178060, -0.944856293190677210, 0.327304064330806830, + -0.944919070329589220, + 0.327122872352400510, -0.944981812726528150, 0.326941668346621530, + -0.945044520379187070, + 0.326760452320131790, -0.945107193285260610, 0.326579224279594460, + -0.945169831442444150, + 0.326397984231672660, -0.945232434848434890, 0.326216732183029770, + -0.945295003500931100, + 0.326035468140330350, -0.945357537397632290, 0.325854192110238580, + -0.945420036536239070, + 0.325672904099419900, -0.945482500914453740, 0.325491604114539260, + -0.945544930529979680, + 0.325310292162262980, -0.945607325380521280, 0.325128968249257190, + -0.945669685463784710, + 0.324947632382188430, -0.945732010777477150, 0.324766284567724330, + -0.945794301319306860, + 0.324584924812532150, -0.945856557086983910, 0.324403553123280290, + -0.945918778078219110, + 0.324222169506637130, -0.945980964290724760, 0.324040773969271450, + -0.946043115722214560, + 0.323859366517852960, -0.946105232370403340, 0.323677947159051180, + -0.946167314233007370, + 0.323496515899536760, -0.946229361307743820, 0.323315072745980150, + -0.946291373592331510, + 0.323133617705052330, -0.946353351084490590, 0.322952150783425370, + -0.946415293781942110, + 0.322770671987770710, -0.946477201682408680, 0.322589181324761390, + -0.946539074783614100, + 0.322407678801070020, -0.946600913083283530, 0.322226164423369650, + -0.946662716579143360, + 0.322044638198334620, -0.946724485268921170, 0.321863100132638580, + -0.946786219150346000, + 0.321681550232956640, -0.946847918221148000, 0.321499988505963450, + -0.946909582479058760, + 0.321318414958334910, -0.946971211921810880, 0.321136829596746780, + -0.947032806547138620, + 0.320955232427875210, -0.947094366352777220, 0.320773623458397440, + -0.947155891336463270, + 0.320592002694990330, -0.947217381495934820, 0.320410370144331880, + -0.947278836828930880, + 0.320228725813100020, -0.947340257333191940, 0.320047069707973140, + -0.947401643006459900, + 0.319865401835630610, -0.947462993846477700, 0.319683722202751370, + -0.947524309850989570, + 0.319502030816015750, -0.947585591017741090, 0.319320327682103720, + -0.947646837344479190, + 0.319138612807695900, -0.947708048828952100, 0.318956886199473770, + -0.947769225468909180, + 0.318775147864118480, -0.947830367262101010, 0.318593397808312470, + -0.947891474206279730, + 0.318411636038737960, -0.947952546299198560, 0.318229862562077580, + -0.948013583538612200, + 0.318048077385015060, -0.948074585922276230, 0.317866280514233660, + -0.948135553447947980, + 0.317684471956418020, -0.948196486113385580, 0.317502651718252260, + -0.948257383916349060, + 0.317320819806421790, -0.948318246854599090, 0.317138976227611890, + -0.948379074925898120, + 0.316957120988508150, -0.948439868128009620, 0.316775254095797380, + -0.948500626458698260, + 0.316593375556165850, -0.948561349915730270, 0.316411485376301090, + -0.948622038496872990, + 0.316229583562890490, -0.948682692199895090, 0.316047670122621860, + -0.948743311022566480, + 0.315865745062184070, -0.948803894962658380, 0.315683808388265600, + -0.948864444017943340, + 0.315501860107556040, -0.948924958186195160, 0.315319900226745050, + -0.948985437465188710, + 0.315137928752522440, -0.949045881852700560, 0.314955945691579250, + -0.949106291346508260, + 0.314773951050606070, -0.949166665944390700, 0.314591944836294710, + -0.949227005644128210, + 0.314409927055336820, -0.949287310443502010, 0.314227897714424500, + -0.949347580340295210, + 0.314045856820250820, -0.949407815332291460, 0.313863804379508500, + -0.949468015417276550, + 0.313681740398891570, -0.949528180593036670, 0.313499664885093450, + -0.949588310857359950, + 0.313317577844809070, -0.949648406208035480, 0.313135479284732950, + -0.949708466642853800, + 0.312953369211560200, -0.949768492159606680, 0.312771247631986880, + -0.949828482756087000, + 0.312589114552708660, -0.949888438430089300, 0.312406969980422500, + -0.949948359179409010, + 0.312224813921825050, -0.950008245001843000, 0.312042646383613510, + -0.950068095895189590, + 0.311860467372486130, -0.950127911857248100, 0.311678276895140550, + -0.950187692885819280, + 0.311496074958275970, -0.950247438978705230, 0.311313861568591090, + -0.950307150133709140, + 0.311131636732785270, -0.950366826348635780, 0.310949400457558760, + -0.950426467621290900, + 0.310767152749611470, -0.950486073949481700, 0.310584893615644560, + -0.950545645331016600, + 0.310402623062358880, -0.950605181763705230, 0.310220341096455910, + -0.950664683245358910, + 0.310038047724638000, -0.950724149773789610, 0.309855742953607130, + -0.950783581346811070, + 0.309673426790066490, -0.950842977962238160, 0.309491099240719050, + -0.950902339617887060, + 0.309308760312268780, -0.950961666311575080, 0.309126410011419550, + -0.951020958041121080, + 0.308944048344875710, -0.951080214804345010, 0.308761675319342570, + -0.951139436599068190, + 0.308579290941525030, -0.951198623423113230, 0.308396895218129240, + -0.951257775274304000, + 0.308214488155861220, -0.951316892150465550, 0.308032069761427330, + -0.951375974049424420, + 0.307849640041534980, -0.951435020969008340, 0.307667199002891190, + -0.951494032907046370, + 0.307484746652204160, -0.951553009861368590, 0.307302282996181950, + -0.951611951829806730, + 0.307119808041533100, -0.951670858810193860, 0.306937321794967020, + -0.951729730800363720, + 0.306754824263192780, -0.951788567798152130, 0.306572315452920800, + -0.951847369801395620, + 0.306389795370861080, -0.951906136807932230, 0.306207264023724280, + -0.951964868815601380, + 0.306024721418221900, -0.952023565822243570, 0.305842167561065080, + -0.952082227825700620, + 0.305659602458966230, -0.952140854823815830, 0.305477026118637360, + -0.952199446814433580, + 0.305294438546791720, -0.952258003795399600, 0.305111839750142220, + -0.952316525764560830, + 0.304929229735402430, -0.952375012719765880, 0.304746608509286640, + -0.952433464658864030, + 0.304563976078509050, -0.952491881579706320, 0.304381332449784940, + -0.952550263480144930, + 0.304198677629829270, -0.952608610358033240, 0.304016011625357570, + -0.952666922211226170, + 0.303833334443086470, -0.952725199037579570, 0.303650646089731910, + -0.952783440834950920, + 0.303467946572011370, -0.952841647601198720, 0.303285235896641910, + -0.952899819334182880, + 0.303102514070341060, -0.952957956031764700, 0.302919781099827420, + -0.953016057691806530, + 0.302737036991819140, -0.953074124312172200, 0.302554281753035670, + -0.953132155890726750, + 0.302371515390196130, -0.953190152425336560, 0.302188737910020040, + -0.953248113913869320, + 0.302005949319228200, -0.953306040354193750, 0.301823149624540650, + -0.953363931744180330, + 0.301640338832678880, -0.953421788081700310, 0.301457516950363940, + -0.953479609364626610, + 0.301274683984318000, -0.953537395590833280, 0.301091839941263210, + -0.953595146758195680, + 0.300908984827921890, -0.953652862864590500, 0.300726118651017620, + -0.953710543907895560, + 0.300543241417273400, -0.953768189885990330, 0.300360353133413580, + -0.953825800796755050, + 0.300177453806162120, -0.953883376638071770, 0.299994543442243580, + -0.953940917407823500, + 0.299811622048383460, -0.953998423103894490, 0.299628689631306790, + -0.954055893724170660, + 0.299445746197739950, -0.954113329266538800, 0.299262791754409010, + -0.954170729728887280, + 0.299079826308040480, -0.954228095109105670, 0.298896849865361910, + -0.954285425405084650, + 0.298713862433100390, -0.954342720614716480, 0.298530864017984230, + -0.954399980735894490, + 0.298347854626741570, -0.954457205766513490, 0.298164834266100910, + -0.954514395704469500, + 0.297981802942791920, -0.954571550547659630, 0.297798760663543550, + -0.954628670293982680, + 0.297615707435086310, -0.954685754941338340, 0.297432643264150030, + -0.954742804487627940, + 0.297249568157465890, -0.954799818930753720, 0.297066482121764840, + -0.954856798268619580, + 0.296883385163778270, -0.954913742499130520, 0.296700277290238460, + -0.954970651620192790, + 0.296517158507877410, -0.955027525629714160, 0.296334028823428240, + -0.955084364525603410, + 0.296150888243623960, -0.955141168305770670, 0.295967736775197890, + -0.955197936968127710, + 0.295784574424884370, -0.955254670510586990, 0.295601401199417360, + -0.955311368931062720, + 0.295418217105532070, -0.955368032227470240, 0.295235022149963390, + -0.955424660397726330, + 0.295051816339446720, -0.955481253439748770, 0.294868599680718380, + -0.955537811351456770, + 0.294685372180514330, -0.955594334130771110, 0.294502133845571720, + -0.955650821775613220, + 0.294318884682627570, -0.955707274283906560, 0.294135624698419080, + -0.955763691653575440, + 0.293952353899684770, -0.955820073882545420, 0.293769072293162400, + -0.955876420968743590, + 0.293585779885591310, -0.955932732910098170, 0.293402476683710060, + -0.955989009704538930, + 0.293219162694258680, -0.956045251349996410, 0.293035837923976920, + -0.956101457844403040, + 0.292852502379604810, -0.956157629185692140, 0.292669156067883570, + -0.956213765371798470, + 0.292485798995553830, -0.956269866400658140, 0.292302431169357610, + -0.956325932270208230, + 0.292119052596036540, -0.956381962978387620, 0.291935663282332780, + -0.956437958523136180, + 0.291752263234989370, -0.956493918902394990, 0.291568852460749040, + -0.956549844114106820, + 0.291385430966355720, -0.956605734156215080, 0.291201998758553020, + -0.956661589026664980, + 0.291018555844085090, -0.956717408723403050, 0.290835102229696940, + -0.956773193244376930, + 0.290651637922133220, -0.956828942587535370, 0.290468162928139870, + -0.956884656750828900, + 0.290284677254462330, -0.956940335732208940, 0.290101180907847140, + -0.956995979529628230, + 0.289917673895040860, -0.957051588141040970, 0.289734156222790250, + -0.957107161564402790, + 0.289550627897843140, -0.957162699797670100, 0.289367088926946960, + -0.957218202838801210, + 0.289183539316850310, -0.957273670685755200, 0.288999979074301530, + -0.957329103336492790, + 0.288816408206049480, -0.957384500788975860, 0.288632826718843940, + -0.957439863041167570, + 0.288449234619434170, -0.957495190091032570, 0.288265631914570830, + -0.957550481936536470, + 0.288082018611004300, -0.957605738575646240, 0.287898394715485170, + -0.957660960006330610, + 0.287714760234765280, -0.957716146226558870, 0.287531115175595930, + -0.957771297234302320, + 0.287347459544729570, -0.957826413027532910, 0.287163793348918560, + -0.957881493604224250, + 0.286980116594915570, -0.957936538962351420, 0.286796429289474190, + -0.957991549099890370, + 0.286612731439347790, -0.958046524014818600, 0.286429023051290750, + -0.958101463705114620, + 0.286245304132057120, -0.958156368168758820, 0.286061574688402100, + -0.958211237403732260, + 0.285877834727080730, -0.958266071408017670, 0.285694084254848320, + -0.958320870179598880, + 0.285510323278461380, -0.958375633716461170, 0.285326551804675810, + -0.958430362016591040, + 0.285142769840248720, -0.958485055077976100, 0.284958977391937150, + -0.958539712898605730, + 0.284775174466498300, -0.958594335476470220, 0.284591361070690550, + -0.958648922809561040, + 0.284407537211271820, -0.958703474895871600, 0.284223702895001100, + -0.958757991733395710, + 0.284039858128637360, -0.958812473320129200, 0.283856002918939750, + -0.958866919654069010, + 0.283672137272668550, -0.958921330733213060, 0.283488261196583550, + -0.958975706555561080, + 0.283304374697445790, -0.959030047119113550, 0.283120477782015990, + -0.959084352421872730, + 0.282936570457055390, -0.959138622461841890, 0.282752652729326040, + -0.959192857237025740, + 0.282568724605589740, -0.959247056745430090, 0.282384786092609420, + -0.959301220985062210, + 0.282200837197147500, -0.959355349953930790, 0.282016877925967690, + -0.959409443650045550, + 0.281832908285833460, -0.959463502071417510, 0.281648928283508680, + -0.959517525216059260, + 0.281464937925758050, -0.959571513081984520, 0.281280937219346110, + -0.959625465667208300, + 0.281096926171038320, -0.959679382969746750, 0.280912904787600120, + -0.959733264987617680, + 0.280728873075797190, -0.959787111718839900, 0.280544831042396360, + -0.959840923161433660, + 0.280360778694163810, -0.959894699313420530, 0.280176716037867040, + -0.959948440172823210, + 0.279992643080273380, -0.960002145737665850, 0.279808559828150390, + -0.960055816005973890, + 0.279624466288266700, -0.960109450975773940, 0.279440362467390510, + -0.960163050645094000, + 0.279256248372291240, -0.960216615011963430, 0.279072124009737970, + -0.960270144074412800, + 0.278887989386500280, -0.960323637830473920, 0.278703844509348600, + -0.960377096278180130, + 0.278519689385053060, -0.960430519415565790, 0.278335524020384970, + -0.960483907240666790, + 0.278151348422115090, -0.960537259751520050, 0.277967162597015430, + -0.960590576946164120, + 0.277782966551857800, -0.960643858822638470, 0.277598760293414290, + -0.960697105378984450, + 0.277414543828458200, -0.960750316613243950, 0.277230317163762120, + -0.960803492523460760, + 0.277046080306099950, -0.960856633107679660, 0.276861833262245390, + -0.960909738363946770, + 0.276677576038972420, -0.960962808290309780, 0.276493308643056100, + -0.961015842884817230, + 0.276309031081271030, -0.961068842145519350, 0.276124743360392890, + -0.961121806070467380, + 0.275940445487197320, -0.961174734657714080, 0.275756137468460120, + -0.961227627905313460, + 0.275571819310958250, -0.961280485811320640, 0.275387491021468140, + -0.961333308373792270, + 0.275203152606767370, -0.961386095590786250, 0.275018804073633380, + -0.961438847460361570, + 0.274834445428843940, -0.961491563980579000, 0.274650076679177790, + -0.961544245149499990, + 0.274465697831413220, -0.961596890965187860, 0.274281308892329710, + -0.961649501425706820, + 0.274096909868706330, -0.961702076529122540, 0.273912500767323320, + -0.961754616273502010, + 0.273728081594960650, -0.961807120656913540, 0.273543652358398730, + -0.961859589677426570, + 0.273359213064418790, -0.961912023333112100, 0.273174763719801870, + -0.961964421622042320, + 0.272990304331329980, -0.962016784542290560, 0.272805834905784920, + -0.962069112091931580, + 0.272621355449948980, -0.962121404269041580, 0.272436865970605350, + -0.962173661071697770, + 0.272252366474536660, -0.962225882497979020, 0.272067856968526980, + -0.962278068545965090, + 0.271883337459359890, -0.962330219213737400, 0.271698807953819510, + -0.962382334499378380, + 0.271514268458690810, -0.962434414400971990, 0.271329718980758420, + -0.962486458916603450, + 0.271145159526808070, -0.962538468044359160, 0.270960590103625330, + -0.962590441782326780, + 0.270776010717996010, -0.962642380128595710, 0.270591421376707050, + -0.962694283081255930, + 0.270406822086544820, -0.962746150638399410, 0.270222212854296930, + -0.962797982798119010, + 0.270037593686750510, -0.962849779558509030, 0.269852964590693910, + -0.962901540917665000, + 0.269668325572915200, -0.962953266873683880, 0.269483676640202840, + -0.963004957424663850, + 0.269299017799346230, -0.963056612568704340, 0.269114349057134330, + -0.963108232303906190, + 0.268929670420357310, -0.963159816628371360, 0.268744981895805090, + -0.963211365540203480, + 0.268560283490267890, -0.963262879037507070, 0.268375575210537010, + -0.963314357118388090, + 0.268190857063403180, -0.963365799780954050, 0.268006129055658350, + -0.963417207023313350, + 0.267821391194094320, -0.963468578843575950, 0.267636643485503090, + -0.963519915239853140, + 0.267451885936677740, -0.963571216210257210, 0.267267118554410930, + -0.963622481752902220, + 0.267082341345496350, -0.963673711865903230, 0.266897554316727510, + -0.963724906547376410, + 0.266712757474898420, -0.963776065795439840, 0.266527950826803810, + -0.963827189608212340, + 0.266343134379238180, -0.963878277983814200, 0.266158308138997050, + -0.963929330920367140, + 0.265973472112875530, -0.963980348415994110, 0.265788626307669970, + -0.964031330468819280, + 0.265603770730176440, -0.964082277076968140, 0.265418905387191260, + -0.964133188238567640, + 0.265234030285511900, -0.964184063951745720, 0.265049145431935200, + -0.964234904214632200, + 0.264864250833259320, -0.964285709025357370, 0.264679346496282050, + -0.964336478382053720, + 0.264494432427801630, -0.964387212282854290, 0.264309508634617220, + -0.964437910725893910, + 0.264124575123527490, -0.964488573709308410, 0.263939631901332410, + -0.964539201231235150, + 0.263754678974831510, -0.964589793289812650, 0.263569716350824880, + -0.964640349883180930, + 0.263384744036113390, -0.964690871009480920, 0.263199762037497560, + -0.964741356666855340, + 0.263014770361779060, -0.964791806853447900, 0.262829769015759330, + -0.964842221567403510, + 0.262644758006240100, -0.964892600806868890, 0.262459737340024090, + -0.964942944569991410, + 0.262274707023913590, -0.964993252854920320, 0.262089667064712100, + -0.965043525659805890, + 0.261904617469222560, -0.965093762982799590, 0.261719558244249080, + -0.965143964822054450, + 0.261534489396595630, -0.965194131175724720, 0.261349410933066350, + -0.965244262041965780, + 0.261164322860466590, -0.965294357418934660, 0.260979225185601020, + -0.965344417304789370, + 0.260794117915275570, -0.965394441697689400, 0.260609001056295920, + -0.965444430595795430, + 0.260423874615468010, -0.965494383997269500, 0.260238738599598950, + -0.965544301900275070, + 0.260053593015495130, -0.965594184302976830, 0.259868437869964330, + -0.965644031203540590, + 0.259683273169813930, -0.965693842600133690, 0.259498098921851660, + -0.965743618490924830, + 0.259312915132886350, -0.965793358874083570, 0.259127721809726150, + -0.965843063747781510, + 0.258942518959180580, -0.965892733110190860, 0.258757306588058840, + -0.965942366959485540, + 0.258572084703170390, -0.965991965293840570, 0.258386853311325710, + -0.966041528111432400, + 0.258201612419334870, -0.966091055410438830, 0.258016362034009070, + -0.966140547189038750, + 0.257831102162158930, -0.966190003445412620, 0.257645832810596440, + -0.966239424177741890, + 0.257460553986133210, -0.966288809384209580, 0.257275265695581120, + -0.966338159063000130, + 0.257089967945753230, -0.966387473212298790, 0.256904660743461850, + -0.966436751830292650, + 0.256719344095520720, -0.966485994915169840, 0.256534018008743200, + -0.966535202465119700, + 0.256348682489942910, -0.966584374478333120, 0.256163337545934570, + -0.966633510953002100, + 0.255977983183532380, -0.966682611887320190, 0.255792619409551670, + -0.966731677279481840, + 0.255607246230807550, -0.966780707127683270, 0.255421863654115460, + -0.966829701430121810, + 0.255236471686291820, -0.966878660184995910, 0.255051070334152530, + -0.966927583390505660, + 0.254865659604514630, -0.966976471044852070, 0.254680239504194990, + -0.967025323146237900, + 0.254494810040010790, -0.967074139692867040, 0.254309371218780110, + -0.967122920682944360, + 0.254123923047320620, -0.967171666114676640, 0.253938465532451140, + -0.967220375986271310, + 0.253752998680989940, -0.967269050295937790, 0.253567522499756610, + -0.967317689041886310, + 0.253382036995570270, -0.967366292222328510, 0.253196542175250560, + -0.967414859835477480, + 0.253011038045617980, -0.967463391879547440, 0.252825524613492610, + -0.967511888352754150, + 0.252640001885695580, -0.967560349253314360, 0.252454469869047900, + -0.967608774579446380, + 0.252268928570370810, -0.967657164329369880, 0.252083377996486560, + -0.967705518501305480, + 0.251897818154216910, -0.967753837093475510, 0.251712249050384750, + -0.967802120104103270, + 0.251526670691812780, -0.967850367531413620, 0.251341083085323880, + -0.967898579373632660, + 0.251155486237742030, -0.967946755628987800, 0.250969880155890720, + -0.967994896295707670, + 0.250784264846594550, -0.968043001372022260, 0.250598640316677830, + -0.968091070856162970, + 0.250413006572965280, -0.968139104746362330, 0.250227363622282540, + -0.968187103040854420, + 0.250041711471454650, -0.968235065737874320, 0.249856050127308050, + -0.968282992835658660, + 0.249670379596668520, -0.968330884332445300, 0.249484699886363010, + -0.968378740226473300, + 0.249299011003218300, -0.968426560515983190, 0.249113312954061360, + -0.968474345199216820, + 0.248927605745720260, -0.968522094274417270, 0.248741889385022420, + -0.968569807739828930, + 0.248556163878796620, -0.968617485593697540, 0.248370429233871150, + -0.968665127834269950, + 0.248184685457074780, -0.968712734459794780, 0.247998932555237220, + -0.968760305468521430, + 0.247813170535187620, -0.968807840858700970, 0.247627399403756330, + -0.968855340628585580, + 0.247441619167773440, -0.968902804776428870, 0.247255829834069320, + -0.968950233300485800, + 0.247070031409475370, -0.968997626199012310, 0.246884223900822430, + -0.969044983470266240, + 0.246698407314942500, -0.969092305112506100, 0.246512581658667380, + -0.969139591123992280, + 0.246326746938829060, -0.969186841502985950, 0.246140903162260640, + -0.969234056247750050, + 0.245955050335794590, -0.969281235356548530, 0.245769188466264670, + -0.969328378827646660, + 0.245583317560504000, -0.969375486659311280, 0.245397437625346990, + -0.969422558849810320, + 0.245211548667627680, -0.969469595397412950, 0.245025650694180470, + -0.969516596300390000, + 0.244839743711840750, -0.969563561557013180, 0.244653827727443320, + -0.969610491165555870, + 0.244467902747824210, -0.969657385124292450, 0.244281968779819170, + -0.969704243431498750, + 0.244096025830264210, -0.969751066085452140, 0.243910073905996370, + -0.969797853084430890, + 0.243724113013852130, -0.969844604426714830, 0.243538143160669180, + -0.969891320110585100, + 0.243352164353284880, -0.969938000134323960, 0.243166176598536930, + -0.969984644496215240, + 0.242980179903263980, -0.970031253194543970, 0.242794174274304190, + -0.970077826227596420, + 0.242608159718496890, -0.970124363593660280, 0.242422136242681050, + -0.970170865291024360, + 0.242236103853696040, -0.970217331317979160, 0.242050062558382180, + -0.970263761672816140, + 0.241864012363579210, -0.970310156353828110, 0.241677953276128090, + -0.970356515359309450, + 0.241491885302869300, -0.970402838687555500, 0.241305808450644390, + -0.970449126336863090, + 0.241119722726294730, -0.970495378305530450, 0.240933628136661910, + -0.970541594591857070, + 0.240747524688588540, -0.970587775194143630, 0.240561412388916620, + -0.970633920110692160, + 0.240375291244489500, -0.970680029339806130, 0.240189161262150040, + -0.970726102879790110, + 0.240003022448741500, -0.970772140728950350, 0.239816874811108110, + -0.970818142885593870, + 0.239630718356093560, -0.970864109348029470, 0.239444553090542720, + -0.970910040114567050, + 0.239258379021300120, -0.970955935183517970, 0.239072196155210660, + -0.971001794553194690, + 0.238886004499120170, -0.971047618221911100, 0.238699804059873950, + -0.971093406187982460, + 0.238513594844318500, -0.971139158449725090, 0.238327376859299970, + -0.971184875005457030, + 0.238141150111664870, -0.971230555853497380, 0.237954914608260650, + -0.971276200992166490, + 0.237768670355934210, -0.971321810419786160, 0.237582417361533650, + -0.971367384134679490, + 0.237396155631906550, -0.971412922135170940, 0.237209885173901620, + -0.971458424419585960, + 0.237023605994367340, -0.971503890986251780, 0.236837318100152380, + -0.971549321833496630, + 0.236651021498106460, -0.971594716959650160, 0.236464716195078750, + -0.971640076363043390, + 0.236278402197919620, -0.971685400042008540, 0.236092079513479050, + -0.971730687994879160, + 0.235905748148607370, -0.971775940219990140, 0.235719408110155930, + -0.971821156715677700, + 0.235533059404975460, -0.971866337480279400, 0.235346702039917920, + -0.971911482512134000, + 0.235160336021834860, -0.971956591809581600, 0.234973961357578310, + -0.972001665370963890, + 0.234787578054001080, -0.972046703194623380, 0.234601186117955550, + -0.972091705278904430, + 0.234414785556295250, -0.972136671622152120, 0.234228376375873380, + -0.972181602222713440, + 0.234041958583543460, -0.972226497078936270, 0.233855532186159950, + -0.972271356189170040, + 0.233669097190576820, -0.972316179551765300, 0.233482653603649170, + -0.972360967165074140, + 0.233296201432231560, -0.972405719027449770, 0.233109740683179740, + -0.972450435137246830, + 0.232923271363349120, -0.972495115492821190, 0.232736793479595420, + -0.972539760092530180, + 0.232550307038775330, -0.972584368934732210, 0.232363812047745010, + -0.972628942017787270, + 0.232177308513361770, -0.972673479340056430, 0.231990796442482580, + -0.972717980899902250, + 0.231804275841964780, -0.972762446695688570, 0.231617746718666580, + -0.972806876725780370, + 0.231431209079445730, -0.972851270988544180, 0.231244662931161110, + -0.972895629482347760, + 0.231058108280671280, -0.972939952205560070, 0.230871545134835070, + -0.972984239156551740, + 0.230684973500512310, -0.973028490333694100, 0.230498393384562320, + -0.973072705735360530, + 0.230311804793845530, -0.973116885359925130, 0.230125207735222020, + -0.973161029205763530, + 0.229938602215552260, -0.973205137271252800, 0.229751988241697600, + -0.973249209554771120, + 0.229565365820518870, -0.973293246054698250, 0.229378734958878120, + -0.973337246769414800, + 0.229192095663636740, -0.973381211697303290, 0.229005447941657390, + -0.973425140836747030, + 0.228818791799802360, -0.973469034186130950, 0.228632127244934230, + -0.973512891743841370, + 0.228445454283916550, -0.973556713508265560, 0.228258772923612350, + -0.973600499477792370, + 0.228072083170885790, -0.973644249650811870, 0.227885385032600700, + -0.973687964025715670, + 0.227698678515621170, -0.973731642600896400, 0.227511963626812390, + -0.973775285374748000, + 0.227325240373038830, -0.973818892345666100, 0.227138508761166260, + -0.973862463512047300, + 0.226951768798059980, -0.973905998872289460, 0.226765020490585720, + -0.973949498424792170, + 0.226578263845610110, -0.973992962167955830, 0.226391498869999210, + -0.974036390100182610, + 0.226204725570620270, -0.974079782219875680, 0.226017943954340190, + -0.974123138525439520, + 0.225831154028026200, -0.974166459015280320, 0.225644355798546440, + -0.974209743687805110, + 0.225457549272768540, -0.974252992541422500, 0.225270734457561240, + -0.974296205574542330, + 0.225083911359792780, -0.974339382785575860, 0.224897079986332540, + -0.974382524172935470, + 0.224710240344049570, -0.974425629735034990, 0.224523392439813170, + -0.974468699470289580, + 0.224336536280493690, -0.974511733377115720, 0.224149671872960840, + -0.974554731453931230, + 0.223962799224085520, -0.974597693699155050, 0.223775918340738290, + -0.974640620111207560, + 0.223589029229790020, -0.974683510688510670, 0.223402131898112480, + -0.974726365429487320, + 0.223215226352576960, -0.974769184332561770, 0.223028312600055870, + -0.974811967396159830, + 0.222841390647421280, -0.974854714618708430, 0.222654460501545550, + -0.974897425998635820, + 0.222467522169301990, -0.974940101534371720, 0.222280575657563370, + -0.974982741224347140, + 0.222093620973203590, -0.975025345066994120, 0.221906658123096260, + -0.975067913060746360, + 0.221719687114115240, -0.975110445204038890, 0.221532707953135340, + -0.975152941495307620, + 0.221345720647030810, -0.975195401932990370, 0.221158725202677100, + -0.975237826515525820, + 0.220971721626949060, -0.975280215241354220, 0.220784709926722670, + -0.975322568108916930, + 0.220597690108873650, -0.975364885116656870, 0.220410662180277940, + -0.975407166263018270, + 0.220223626147812460, -0.975449411546446380, 0.220036582018353550, + -0.975491620965388110, + 0.219849529798778750, -0.975533794518291360, 0.219662469495965180, + -0.975575932203605610, + 0.219475401116790340, -0.975618034019781750, 0.219288324668132580, + -0.975660099965271590, + 0.219101240156869770, -0.975702130038528570, 0.218914147589880900, + -0.975744124238007270, + 0.218727046974044600, -0.975786082562163930, 0.218539938316239830, + -0.975828005009455550, + 0.218352821623346430, -0.975869891578341030, 0.218165696902243770, + -0.975911742267280170, + 0.217978564159812290, -0.975953557074734300, 0.217791423402932120, + -0.975995335999165880, + 0.217604274638483670, -0.976037079039039020, 0.217417117873348300, + -0.976078786192818850, + 0.217229953114406790, -0.976120457458971910, 0.217042780368541080, + -0.976162092835966110, + 0.216855599642632570, -0.976203692322270560, 0.216668410943563790, + -0.976245255916355800, + 0.216481214278216900, -0.976286783616693630, 0.216294009653474370, + -0.976328275421757260, + 0.216106797076219600, -0.976369731330021140, 0.215919576553335460, + -0.976411151339961040, + 0.215732348091705940, -0.976452535450054060, 0.215545111698214660, + -0.976493883658778540, + 0.215357867379745550, -0.976535195964614470, 0.215170615143183500, + -0.976576472366042610, + 0.214983354995412820, -0.976617712861545640, 0.214796086943318920, + -0.976658917449606980, + 0.214608810993786920, -0.976700086128711840, 0.214421527153702190, + -0.976741218897346550, + 0.214234235429951100, -0.976782315753998650, 0.214046935829419330, + -0.976823376697157240, + 0.213859628358993830, -0.976864401725312640, 0.213672313025561140, + -0.976905390836956490, + 0.213484989836008080, -0.976946344030581560, 0.213297658797222430, + -0.976987261304682390, + 0.213110319916091360, -0.977028142657754390, 0.212922973199503260, + -0.977068988088294450, + 0.212735618654345870, -0.977109797594800880, 0.212548256287508120, + -0.977150571175773200, + 0.212360886105878580, -0.977191308829712280, 0.212173508116346080, + -0.977232010555120320, + 0.211986122325800410, -0.977272676350500860, 0.211798728741130820, + -0.977313306214358750, + 0.211611327369227610, -0.977353900145199960, 0.211423918216980810, + -0.977394458141532250, + 0.211236501291280710, -0.977434980201864260, 0.211049076599018500, + -0.977475466324706050, + 0.210861644147084830, -0.977515916508569280, 0.210674203942371490, + -0.977556330751966460, + 0.210486755991769890, -0.977596709053411780, 0.210299300302171750, + -0.977637051411420770, + 0.210111836880469720, -0.977677357824509930, 0.209924365733555860, + -0.977717628291197570, + 0.209736886868323370, -0.977757862810002760, 0.209549400291665110, + -0.977798061379446360, + 0.209361906010474190, -0.977838223998050430, 0.209174404031644700, + -0.977878350664338150, + 0.208986894362070070, -0.977918441376834370, 0.208799377008644980, + -0.977958496134064830, + 0.208611851978263460, -0.977998514934557140, 0.208424319277820650, + -0.978038497776839600, + 0.208236778914211470, -0.978078444659442380, 0.208049230894330940, + -0.978118355580896660, + 0.207861675225075150, -0.978158230539735050, 0.207674111913339540, + -0.978198069534491400, + 0.207486540966020700, -0.978237872563701090, 0.207298962390014880, + -0.978277639625900420, + 0.207111376192218560, -0.978317370719627650, 0.206923782379529210, + -0.978357065843421640, + 0.206736180958843660, -0.978396724995823090, 0.206548571937059940, + -0.978436348175373730, + 0.206360955321075680, -0.978475935380616830, 0.206173331117788770, + -0.978515486610096910, + 0.205985699334098050, -0.978555001862359550, 0.205798059976901760, + -0.978594481135952270, + 0.205610413053099320, -0.978633924429423100, 0.205422758569589780, + -0.978673331741322210, + 0.205235096533272380, -0.978712703070200420, 0.205047426951047380, + -0.978752038414610340, + 0.204859749829814420, -0.978791337773105670, 0.204672065176474290, + -0.978830601144241470, + 0.204484372997927180, -0.978869828526574120, 0.204296673301074430, + -0.978909019918661310, + 0.204108966092817010, -0.978948175319062200, 0.203921251380056150, + -0.978987294726337050, + 0.203733529169694010, -0.979026378139047580, 0.203545799468632190, + -0.979065425555756930, + 0.203358062283773370, -0.979104436975029250, 0.203170317622019920, + -0.979143412395430230, + 0.202982565490274460, -0.979182351815526930, 0.202794805895440550, + -0.979221255233887700, + 0.202607038844421110, -0.979260122649082020, 0.202419264344120220, + -0.979298954059681040, + 0.202231482401441620, -0.979337749464256780, 0.202043693023289280, + -0.979376508861383170, + 0.201855896216568160, -0.979415232249634780, 0.201668091988182500, + -0.979453919627588210, + 0.201480280345037820, -0.979492570993820700, 0.201292461294039190, + -0.979531186346911390, + 0.201104634842091960, -0.979569765685440520, 0.200916800996102370, + -0.979608309007989450, + 0.200728959762976140, -0.979646816313141210, 0.200541111149620090, + -0.979685287599479930, + 0.200353255162940420, -0.979723722865591170, 0.200165391809844500, + -0.979762122110061640, + 0.199977521097239290, -0.979800485331479680, 0.199789643032032120, + -0.979838812528434740, + 0.199601757621131050, -0.979877103699517640, 0.199413864871443750, + -0.979915358843320480, + 0.199225964789878890, -0.979953577958436740, 0.199038057383344820, + -0.979991761043461200, + 0.198850142658750120, -0.980029908096989980, 0.198662220623004320, + -0.980068019117620650, + 0.198474291283016360, -0.980106094103951770, 0.198286354645696270, + -0.980144133054583590, + 0.198098410717953730, -0.980182135968117320, 0.197910459506698720, + -0.980220102843155970, + 0.197722501018842030, -0.980258033678303550, 0.197534535261294000, + -0.980295928472165290, + 0.197346562240966000, -0.980333787223347960, 0.197158581964769040, + -0.980371609930459690, + 0.196970594439614370, -0.980409396592109910, 0.196782599672414240, + -0.980447147206909060, + 0.196594597670080220, -0.980484861773469380, 0.196406588439525050, + -0.980522540290404090, + 0.196218571987660850, -0.980560182756327950, 0.196030548321400880, + -0.980597789169856850, + 0.195842517447657990, -0.980635359529608120, 0.195654479373345370, + -0.980672893834200530, + 0.195466434105377090, -0.980710392082253970, 0.195278381650666520, + -0.980747854272389750, + 0.195090322016128330, -0.980785280403230430, 0.194902255208676660, + -0.980822670473399990, + 0.194714181235225990, -0.980860024481523870, 0.194526100102691720, + -0.980897342426228390, + 0.194338011817988600, -0.980934624306141640, 0.194149916388032530, + -0.980971870119892840, + 0.193961813819739010, -0.981009079866112630, 0.193773704120023840, + -0.981046253543432780, + 0.193585587295803750, -0.981083391150486590, 0.193397463353994740, + -0.981120492685908730, + 0.193209332301514080, -0.981157558148334830, 0.193021194145278320, + -0.981194587536402320, + 0.192833048892205290, -0.981231580848749730, 0.192644896549212240, + -0.981268538084016710, + 0.192456737123216840, -0.981305459240844670, 0.192268570621137590, + -0.981342344317875930, + 0.192080397049892380, -0.981379193313754560, 0.191892216416400310, + -0.981416006227125550, + 0.191704028727579940, -0.981452783056635520, 0.191515833990350240, + -0.981489523800932130, + 0.191327632211630990, -0.981526228458664660, 0.191139423398341420, + -0.981562897028483650, + 0.190951207557401860, -0.981599529509040720, 0.190762984695732250, + -0.981636125898989080, + 0.190574754820252800, -0.981672686196983110, 0.190386517937884580, + -0.981709210401678800, + 0.190198274055548120, -0.981745698511732990, 0.190010023180165050, + -0.981782150525804310, + 0.189821765318656580, -0.981818566442552500, 0.189633500477944220, + -0.981854946260638630, + 0.189445228664950340, -0.981891289978724990, 0.189256949886596720, + -0.981927597595475540, + 0.189068664149806280, -0.981963869109555240, 0.188880371461501330, + -0.982000104519630490, + 0.188692071828605260, -0.982036303824369020, 0.188503765258041080, + -0.982072467022439890, + 0.188315451756732120, -0.982108594112513610, 0.188127131331602530, + -0.982144685093261580, + 0.187938803989575850, -0.982180739963357200, 0.187750469737576840, + -0.982216758721474510, + 0.187562128582529740, -0.982252741366289370, 0.187373780531359110, + -0.982288687896478830, + 0.187185425590990440, -0.982324598310721160, 0.186997063768348510, + -0.982360472607696210, + 0.186808695070359330, -0.982396310786084690, 0.186620319503948420, + -0.982432112844569110, + 0.186431937076041640, -0.982467878781833170, 0.186243547793565670, + -0.982503608596561720, + 0.186055151663446630, -0.982539302287441240, 0.185866748692611720, + -0.982574959853159240, + 0.185678338887987790, -0.982610581292404750, 0.185489922256501900, + -0.982646166603868050, + 0.185301498805082040, -0.982681715786240860, 0.185113068540655510, + -0.982717228838215990, + 0.184924631470150870, -0.982752705758487830, 0.184736187600495930, + -0.982788146545751970, + 0.184547736938619640, -0.982823551198705240, 0.184359279491450640, + -0.982858919716046110, + 0.184170815265917720, -0.982894252096474070, 0.183982344268950600, + -0.982929548338690060, + 0.183793866507478390, -0.982964808441396440, 0.183605381988431350, + -0.983000032403296590, + 0.183416890718739230, -0.983035220223095640, 0.183228392705332140, + -0.983070371899499640, + 0.183039887955141060, -0.983105487431216290, 0.182851376475096310, + -0.983140566816954500, + 0.182662858272129360, -0.983175610055424420, 0.182474333353171260, + -0.983210617145337640, + 0.182285801725153320, -0.983245588085407070, 0.182097263395007760, + -0.983280522874346970, + 0.181908718369666160, -0.983315421510872810, 0.181720166656061170, + -0.983350283993701500, + 0.181531608261125130, -0.983385110321551180, 0.181343043191790590, + -0.983419900493141540, + 0.181154471454990920, -0.983454654507193270, 0.180965893057658980, + -0.983489372362428730, + 0.180777308006728670, -0.983524054057571260, 0.180588716309133280, + -0.983558699591345900, + 0.180400117971807270, -0.983593308962478650, 0.180211513001684590, + -0.983627882169697210, + 0.180022901405699510, -0.983662419211730250, 0.179834283190787180, + -0.983696920087308020, + 0.179645658363882100, -0.983731384795162090, 0.179457026931919950, + -0.983765813334025240, + 0.179268388901835880, -0.983800205702631490, 0.179079744280565390, + -0.983834561899716630, + 0.178891093075044830, -0.983868881924017220, 0.178702435292209940, + -0.983903165774271500, + 0.178513770938997590, -0.983937413449218920, 0.178325100022344140, + -0.983971624947600270, + 0.178136422549186320, -0.984005800268157870, 0.177947738526461670, + -0.984039939409634970, + 0.177759047961107140, -0.984074042370776450, 0.177570350860060790, + -0.984108109150328540, + 0.177381647230260200, -0.984142139747038570, 0.177192937078643310, + -0.984176134159655320, + 0.177004220412148860, -0.984210092386929030, 0.176815497237715000, + -0.984244014427611110, + 0.176626767562280960, -0.984277900280454370, 0.176438031392785350, + -0.984311749944212780, + 0.176249288736167940, -0.984345563417641900, 0.176060539599367960, + -0.984379340699498510, + 0.175871783989325040, -0.984413081788540700, 0.175683021912979580, + -0.984446786683527920, + 0.175494253377271400, -0.984480455383220930, 0.175305478389141370, + -0.984514087886381840, + 0.175116696955530060, -0.984547684191773960, 0.174927909083378160, + -0.984581244298162180, + 0.174739114779627310, -0.984614768204312600, 0.174550314051218490, + -0.984648255908992630, + 0.174361506905093830, -0.984681707410970940, 0.174172693348194960, + -0.984715122709017620, + 0.173983873387463850, -0.984748501801904210, 0.173795047029843270, + -0.984781844688403350, + 0.173606214282275410, -0.984815151367289140, 0.173417375151703520, + -0.984848421837337010, + 0.173228529645070490, -0.984881656097323700, 0.173039677769319390, + -0.984914854146027200, + 0.172850819531394200, -0.984948015982227030, 0.172661954938238270, + -0.984981141604703960, + 0.172473083996796030, -0.985014231012239840, 0.172284206714011350, + -0.985047284203618200, + 0.172095323096829040, -0.985080301177623800, 0.171906433152193700, + -0.985113281933042590, + 0.171717536887049970, -0.985146226468662230, 0.171528634308343500, + -0.985179134783271020, + 0.171339725423019260, -0.985212006875659460, 0.171150810238023340, + -0.985244842744618540, + 0.170961888760301360, -0.985277642388941220, 0.170772960996799230, + -0.985310405807421570, + 0.170584026954463700, -0.985343132998854790, 0.170395086640240920, + -0.985375823962037710, + 0.170206140061078120, -0.985408478695768420, 0.170017187223922090, + -0.985441097198846210, + 0.169828228135719880, -0.985473679470071810, 0.169639262803419400, + -0.985506225508247290, + 0.169450291233967930, -0.985538735312176060, 0.169261313434313890, + -0.985571208880662740, + 0.169072329411405180, -0.985603646212513400, 0.168883339172190010, + -0.985636047306535420, + 0.168694342723617440, -0.985668412161537550, 0.168505340072635900, + -0.985700740776329850, + 0.168316331226194910, -0.985733033149723490, 0.168127316191243350, + -0.985765289280531310, + 0.167938294974731230, -0.985797509167567370, 0.167749267583608030, + -0.985829692809647050, + 0.167560234024823590, -0.985861840205586980, 0.167371194305328540, + -0.985893951354205210, + 0.167182148432072880, -0.985926026254321130, 0.166993096412007770, + -0.985958064904755460, + 0.166804038252083870, -0.985990067304330030, 0.166614973959252090, + -0.986022033451868560, + 0.166425903540464220, -0.986053963346195440, 0.166236827002671390, + -0.986085856986136820, + 0.166047744352825850, -0.986117714370520090, 0.165858655597879430, + -0.986149535498173860, + 0.165669560744784140, -0.986181320367928270, 0.165480459800492890, + -0.986213068978614490, + 0.165291352771957970, -0.986244781329065460, 0.165102239666132720, + -0.986276457418114980, + 0.164913120489970090, -0.986308097244598670, 0.164723995250423190, + -0.986339700807353000, + 0.164534863954446110, -0.986371268105216030, 0.164345726608992190, + -0.986402799137027220, + 0.164156583221015890, -0.986434293901627070, 0.163967433797471110, + -0.986465752397857940, + 0.163778278345312690, -0.986497174624562880, 0.163589116871495160, + -0.986528560580586690, + 0.163399949382973230, -0.986559910264775410, 0.163210775886702460, + -0.986591223675976400, + 0.163021596389637810, -0.986622500813038480, 0.162832410898735260, + -0.986653741674811350, + 0.162643219420950450, -0.986684946260146690, 0.162454021963239190, + -0.986716114567897100, + 0.162264818532558110, -0.986747246596916480, 0.162075609135863330, + -0.986778342346060430, + 0.161886393780111910, -0.986809401814185420, 0.161697172472260540, + -0.986840425000149680, + 0.161507945219266150, -0.986871411902812470, 0.161318712028086540, + -0.986902362521034470, + 0.161129472905678780, -0.986933276853677710, 0.160940227859001140, + -0.986964154899605650, + 0.160750976895011390, -0.986994996657682870, 0.160561720020667510, + -0.987025802126775600, + 0.160372457242928400, -0.987056571305750970, 0.160183188568752240, + -0.987087304193477900, + 0.159993914005098350, -0.987118000788826280, 0.159804633558925380, + -0.987148661090667570, + 0.159615347237193090, -0.987179285097874340, 0.159426055046860750, + -0.987209872809320820, + 0.159236756994887850, -0.987240424223882250, 0.159047453088234840, + -0.987270939340435420, + 0.158858143333861390, -0.987301418157858430, 0.158668827738728370, + -0.987331860675030430, + 0.158479506309796100, -0.987362266890832400, 0.158290179054025180, + -0.987392636804146240, + 0.158100845978377090, -0.987422970413855410, 0.157911507089812640, + -0.987453267718844560, + 0.157722162395293690, -0.987483528717999710, 0.157532811901781670, + -0.987513753410208420, + 0.157343455616238280, -0.987543941794359230, 0.157154093545626010, + -0.987574093869342360, + 0.156964725696906750, -0.987604209634049160, 0.156775352077043430, + -0.987634289087372160, + 0.156585972692998590, -0.987664332228205710, 0.156396587551734940, + -0.987694339055445130, + 0.156207196660216040, -0.987724309567986960, 0.156017800025404830, + -0.987754243764729530, + 0.155828397654265320, -0.987784141644572180, 0.155638989553760850, + -0.987814003206415550, + 0.155449575730855880, -0.987843828449161740, 0.155260156192514380, + -0.987873617371714200, + 0.155070730945700510, -0.987903369972977790, 0.154881299997379400, + -0.987933086251858380, + 0.154691863354515400, -0.987962766207263420, 0.154502421024073990, + -0.987992409838101880, + 0.154312973013020240, -0.988022017143283530, 0.154123519328319360, + -0.988051588121720110, + 0.153934059976937460, -0.988081122772324070, 0.153744594965840000, + -0.988110621094009820, + 0.153555124301993500, -0.988140083085692570, 0.153365647992364020, + -0.988169508746289060, + 0.153176166043917870, -0.988198898074717610, 0.152986678463622160, + -0.988228251069897420, + 0.152797185258443410, -0.988257567730749460, 0.152607686435349140, + -0.988286848056195710, + 0.152418182001306500, -0.988316092045159690, 0.152228671963282770, + -0.988345299696566150, + 0.152039156328246160, -0.988374471009341280, 0.151849635103164180, + -0.988403605982412390, + 0.151660108295005400, -0.988432704614708340, 0.151470575910737760, + -0.988461766905159300, + 0.151281037957330250, -0.988490792852696590, 0.151091494441751430, + -0.988519782456253270, + 0.150901945370970040, -0.988548735714763200, 0.150712390751955720, + -0.988577652627162020, + 0.150522830591677370, -0.988606533192386450, 0.150333264897105050, + -0.988635377409374790, + 0.150143693675208330, -0.988664185277066230, 0.149954116932956990, + -0.988692956794401940, + 0.149764534677321620, -0.988721691960323780, 0.149574946915272210, + -0.988750390773775360, + 0.149385353653779810, -0.988779053233701520, 0.149195754899814960, + -0.988807679339048340, + 0.149006150660348470, -0.988836269088763540, 0.148816540942352030, + -0.988864822481795640, + 0.148626925752796540, -0.988893339517095130, 0.148437305098654050, + -0.988921820193613190, + 0.148247678986896200, -0.988950264510302990, 0.148058047424494740, + -0.988978672466118480, + 0.147868410418422360, -0.989007044060015270, 0.147678767975650970, + -0.989035379290950310, + 0.147489120103153680, -0.989063678157881540, 0.147299466807902820, + -0.989091940659768800, + 0.147109808096871850, -0.989120166795572690, 0.146920143977033760, + -0.989148356564255590, + 0.146730474455361750, -0.989176509964781010, 0.146540799538829870, + -0.989204626996113780, + 0.146351119234411440, -0.989232707657220050, 0.146161433549080950, + -0.989260751947067640, + 0.145971742489812370, -0.989288759864625170, 0.145782046063579860, + -0.989316731408863000, + 0.145592344277358450, -0.989344666578752640, 0.145402637138122540, + -0.989372565373267010, + 0.145212924652847520, -0.989400427791380380, 0.145023206828508360, + -0.989428253832068230, + 0.144833483672080240, -0.989456043494307710, 0.144643755190539150, + -0.989483796777076760, + 0.144454021390860440, -0.989511513679355190, 0.144264282280020530, + -0.989539194200123930, + 0.144074537864995330, -0.989566838338365120, 0.143884788152761010, + -0.989594446093062460, + 0.143695033150294580, -0.989622017463200780, 0.143505272864572290, + -0.989649552447766530, + 0.143315507302571590, -0.989677051045747210, 0.143125736471269140, + -0.989704513256131850, + 0.142935960377642700, -0.989731939077910570, 0.142746179028669620, + -0.989759328510075200, + 0.142556392431327340, -0.989786681551618640, 0.142366600592594260, + -0.989813998201535260, + 0.142176803519448000, -0.989841278458820530, 0.141987001218867340, + -0.989868522322471580, + 0.141797193697830530, -0.989895729791486660, 0.141607380963316020, + -0.989922900864865450, + 0.141417563022303130, -0.989950035541608990, 0.141227739881770480, + -0.989977133820719610, + 0.141037911548697770, -0.990004195701200910, 0.140848078030064220, + -0.990031221182058000, + 0.140658239332849240, -0.990058210262297120, 0.140468395464033110, + -0.990085162940925970, + 0.140278546430595420, -0.990112079216953770, 0.140088692239516780, + -0.990138959089390650, + 0.139898832897777380, -0.990165802557248400, 0.139708968412357580, + -0.990192609619540030, + 0.139519098790238600, -0.990219380275280000, 0.139329224038400980, + -0.990246114523483990, + 0.139139344163826280, -0.990272812363169110, 0.138949459173495440, + -0.990299473793353590, + 0.138759569074390380, -0.990326098813057330, 0.138569673873492640, + -0.990352687421301340, + 0.138379773577783890, -0.990379239617108160, 0.138189868194246640, + -0.990405755399501260, + 0.137999957729862760, -0.990432234767505970, 0.137810042191615130, + -0.990458677720148620, + 0.137620121586486180, -0.990485084256456980, 0.137430195921458550, + -0.990511454375460290, + 0.137240265203515700, -0.990537788076188750, 0.137050329439640380, + -0.990564085357674370, + 0.136860388636816430, -0.990590346218950150, 0.136670442802027230, + -0.990616570659050620, + 0.136480491942256310, -0.990642758677011570, 0.136290536064488070, + -0.990668910271869980, + 0.136100575175706200, -0.990695025442664630, 0.135910609282895440, + -0.990721104188435180, + 0.135720638393040080, -0.990747146508222710, 0.135530662513124620, + -0.990773152401069780, + 0.135340681650134330, -0.990799121866020370, 0.135150695811053850, + -0.990825054902119470, + 0.134960705002868830, -0.990850951508413620, 0.134770709232564290, + -0.990876811683950810, + 0.134580708507126220, -0.990902635427780010, 0.134390702833540240, + -0.990928422738951990, + 0.134200692218792020, -0.990954173616518500, 0.134010676669868210, + -0.990979888059532740, + 0.133820656193754690, -0.991005566067049370, 0.133630630797438390, + -0.991031207638124130, + 0.133440600487905820, -0.991056812771814340, 0.133250565272143570, + -0.991082381467178640, + 0.133060525157139180, -0.991107913723276780, 0.132870480149879400, + -0.991133409539170170, + 0.132680430257352130, -0.991158868913921350, 0.132490375486544710, + -0.991184291846594180, + 0.132300315844444680, -0.991209678336254060, 0.132110251338040470, + -0.991235028381967420, + 0.131920181974319760, -0.991260341982802440, 0.131730107760271280, + -0.991285619137828200, + 0.131540028702883280, -0.991310859846115440, 0.131349944809144220, + -0.991336064106736140, + 0.131159856086043410, -0.991361231918763460, 0.130969762540569380, + -0.991386363281272280, + 0.130779664179711790, -0.991411458193338540, 0.130589561010459600, + -0.991436516654039420, + 0.130399453039802740, -0.991461538662453790, 0.130209340274730770, + -0.991486524217661480, + 0.130019222722233350, -0.991511473318743900, 0.129829100389301010, + -0.991536385964783880, + 0.129638973282923540, -0.991561262154865290, 0.129448841410091830, + -0.991586101888073500, + 0.129258704777796270, -0.991610905163495370, 0.129068563393027410, + -0.991635671980218740, + 0.128878417262776660, -0.991660402337333210, 0.128688266394034690, + -0.991685096233929530, + 0.128498110793793220, -0.991709753669099530, 0.128307950469043590, + -0.991734374641936810, + 0.128117785426777150, -0.991758959151536110, 0.127927615673986190, + -0.991783507196993490, + 0.127737441217662280, -0.991808018777406430, 0.127547262064798050, + -0.991832493891873780, + 0.127357078222385570, -0.991856932539495360, 0.127166889697417180, + -0.991881334719373010, + 0.126976696496885980, -0.991905700430609330, 0.126786498627784430, + -0.991930029672308480, + 0.126596296097105960, -0.991954322443575950, 0.126406088911843320, + -0.991978578743518580, + 0.126215877078990400, -0.992002798571244520, 0.126025660605540460, + -0.992026981925863360, + 0.125835439498487020, -0.992051128806485720, 0.125645213764824380, + -0.992075239212224070, + 0.125454983411546210, -0.992099313142191800, 0.125264748445647110, + -0.992123350595503720, + 0.125074508874121300, -0.992147351571276090, 0.124884264703963150, + -0.992171316068626520, + 0.124694015942167770, -0.992195244086673920, 0.124503762595729650, + -0.992219135624538450, + 0.124313504671644300, -0.992242990681341700, 0.124123242176906760, + -0.992266809256206580, + 0.123932975118512200, -0.992290591348257370, 0.123742703503456630, + -0.992314336956619640, + 0.123552427338735370, -0.992338046080420420, 0.123362146631344750, + -0.992361718718787870, + 0.123171861388280650, -0.992385354870851670, 0.122981571616539080, + -0.992408954535742850, + 0.122791277323116900, -0.992432517712593550, 0.122600978515010240, + -0.992456044400537700, + 0.122410675199216280, -0.992479534598709970, 0.122220367382731500, + -0.992502988306246950, + 0.122030055072553410, -0.992526405522286100, 0.121839738275679020, + -0.992549786245966570, + 0.121649416999105540, -0.992573130476428810, 0.121459091249830950, + -0.992596438212814290, + 0.121268761034852550, -0.992619709454266140, 0.121078426361168710, + -0.992642944199928820, + 0.120888087235777220, -0.992666142448948020, 0.120697743665676120, + -0.992689304200470750, + 0.120507395657864240, -0.992712429453645460, 0.120317043219339670, + -0.992735518207621850, + 0.120126686357101580, -0.992758570461551140, 0.119936325078148620, + -0.992781586214585570, + 0.119745959389479630, -0.992804565465879140, 0.119555589298094230, + -0.992827508214586760, + 0.119365214810991350, -0.992850414459865100, 0.119174835935170960, + -0.992873284200871730, + 0.118984452677632520, -0.992896117436765980, 0.118794065045375670, + -0.992918914166708300, + 0.118603673045400840, -0.992941674389860470, 0.118413276684707770, + -0.992964398105385610, + 0.118222875970297250, -0.992987085312448390, 0.118032470909169300, + -0.993009736010214580, + 0.117842061508325020, -0.993032350197851410, 0.117651647774765000, + -0.993054927874527320, + 0.117461229715489990, -0.993077469039412300, 0.117270807337501560, + -0.993099973691677570, + 0.117080380647800550, -0.993122441830495580, 0.116889949653388850, + -0.993144873455040430, + 0.116699514361267840, -0.993167268564487230, 0.116509074778439050, + -0.993189627158012620, + 0.116318630911904880, -0.993211949234794500, 0.116128182768666920, + -0.993234234794012290, + 0.115937730355727850, -0.993256483834846440, 0.115747273680089870, + -0.993278696356479030, + 0.115556812748755290, -0.993300872358093280, 0.115366347568727250, + -0.993323011838873950, + 0.115175878147008180, -0.993345114798006910, 0.114985404490601530, + -0.993367181234679600, + 0.114794926606510250, -0.993389211148080650, 0.114604444501737460, + -0.993411204537400060, + 0.114413958183287050, -0.993433161401829360, 0.114223467658162260, + -0.993455081740560960, + 0.114032972933367300, -0.993476965552789190, 0.113842474015905660, + -0.993498812837709360, + 0.113651970912781920, -0.993520623594518090, 0.113461463631000080, + -0.993542397822413600, + 0.113270952177564360, -0.993564135520595300, 0.113080436559479720, + -0.993585836688263950, + 0.112889916783750470, -0.993607501324621610, 0.112699392857381910, + -0.993629129428871720, + 0.112508864787378830, -0.993650721000219120, 0.112318332580746190, + -0.993672276037870010, + 0.112127796244489750, -0.993693794541031680, 0.111937255785614560, + -0.993715276508913230, + 0.111746711211126660, -0.993736721940724600, 0.111556162528031630, + -0.993758130835677430, + 0.111365609743335190, -0.993779503192984580, 0.111175052864043830, + -0.993800839011860120, + 0.110984491897163380, -0.993822138291519660, 0.110793926849700630, + -0.993843401031180180, + 0.110603357728661910, -0.993864627230059750, 0.110412784541053660, + -0.993885816887378090, + 0.110222207293883180, -0.993906970002356060, 0.110031625994157000, + -0.993928086574215830, + 0.109841040648882680, -0.993949166602181130, 0.109650451265067080, + -0.993970210085476920, + 0.109459857849718030, -0.993991217023329380, 0.109269260409842920, + -0.994012187414966220, + 0.109078658952449240, -0.994033121259616400, 0.108888053484545310, + -0.994054018556510210, + 0.108697444013138670, -0.994074879304879370, 0.108506830545237980, + -0.994095703503956930, + 0.108316213087851300, -0.994116491152977070, 0.108125591647986880, + -0.994137242251175720, + 0.107934966232653760, -0.994157956797789730, 0.107744336848860260, + -0.994178634792057590, + 0.107553703503615710, -0.994199276233218910, 0.107363066203928920, + -0.994219881120514850, + 0.107172424956808870, -0.994240449453187900, 0.106981779769265340, + -0.994260981230481790, + 0.106791130648307380, -0.994281476451641550, 0.106600477600945030, + -0.994301935115913580, + 0.106409820634187840, -0.994322357222545810, 0.106219159755045520, + -0.994342742770787270, + 0.106028494970528530, -0.994363091759888570, 0.105837826287646670, + -0.994383404189101430, + 0.105647153713410700, -0.994403680057679100, 0.105456477254830660, + -0.994423919364875950, + 0.105265796918917650, -0.994444122109948040, 0.105075112712682180, + -0.994464288292152390, + 0.104884424643134970, -0.994484417910747600, 0.104693732717287500, + -0.994504510964993590, + 0.104503036942150550, -0.994524567454151740, 0.104312337324735870, + -0.994544587377484300, + 0.104121633872054730, -0.994564570734255420, 0.103930926591118540, + -0.994584517523730340, + 0.103740215488939480, -0.994604427745175660, 0.103549500572529040, + -0.994624301397859400, + 0.103358781848899700, -0.994644138481050710, 0.103168059325063390, + -0.994663938994020280, + 0.102977333008032250, -0.994683702936040250, 0.102786602904819150, + -0.994703430306383860, + 0.102595869022436280, -0.994723121104325700, 0.102405131367896790, + -0.994742775329142010, + 0.102214389948213370, -0.994762392980109930, 0.102023644770398800, + -0.994781974056508260, + 0.101832895841466670, -0.994801518557617110, 0.101642143168429830, + -0.994821026482717860, + 0.101451386758302160, -0.994840497831093180, 0.101260626618096800, + -0.994859932602027320, + 0.101069862754827880, -0.994879330794805620, 0.100879095175509010, + -0.994898692408714870, + 0.100688323887153970, -0.994918017443043200, 0.100497548896777310, + -0.994937305897080070, + 0.100306770211392820, -0.994956557770116380, 0.100115987838015370, + -0.994975773061444140, + 0.099925201783659226, -0.994994951770357020, 0.099734412055338839, + -0.995014093896149700, + 0.099543618660069444, -0.995033199438118630, 0.099352821604865513, + -0.995052268395561160, + 0.099162020896742573, -0.995071300767776170, 0.098971216542715582, + -0.995090296554063890, + 0.098780408549799664, -0.995109255753726110, 0.098589596925010708, + -0.995128178366065490, + 0.098398781675363881, -0.995147064390386470, 0.098207962807875346, + -0.995165913825994620, + 0.098017140329560770, -0.995184726672196820, 0.097826314247435903, + -0.995203502928301510, + 0.097635484568517339, -0.995222242593618240, 0.097444651299820870, + -0.995240945667458130, + 0.097253814448363354, -0.995259612149133390, 0.097062974021160875, + -0.995278242037957670, + 0.096872130025230527, -0.995296835333246090, 0.096681282467588864, + -0.995315392034315070, + 0.096490431355252607, -0.995333912140482280, 0.096299576695239225, + -0.995352395651066810, + 0.096108718494565468, -0.995370842565388990, 0.095917856760249096, + -0.995389252882770690, + 0.095726991499307315, -0.995407626602534900, 0.095536122718757485, + -0.995425963724006160, + 0.095345250425617742, -0.995444264246510340, 0.095154374626905472, + -0.995462528169374420, + 0.094963495329639061, -0.995480755491926940, 0.094772612540836410, + -0.995498946213497770, + 0.094581726267515473, -0.995517100333418110, 0.094390836516695067, + -0.995535217851020390, + 0.094199943295393190, -0.995553298765638470, 0.094009046610628907, + -0.995571343076607770, + 0.093818146469420494, -0.995589350783264600, 0.093627242878787237, + -0.995607321884947050, + 0.093436335845747912, -0.995625256380994310, 0.093245425377321389, + -0.995643154270746900, + 0.093054511480527333, -0.995661015553546910, 0.092863594162384697, + -0.995678840228737540, + 0.092672673429913366, -0.995696628295663520, 0.092481749290132753, + -0.995714379753670610, + 0.092290821750062355, -0.995732094602106430, 0.092099890816722485, + -0.995749772840319400, + 0.091908956497132696, -0.995767414467659820, 0.091718018798313525, + -0.995785019483478750, + 0.091527077727284981, -0.995802587887129160, 0.091336133291067212, + -0.995820119677964910, + 0.091145185496681130, -0.995837614855341610, 0.090954234351146898, + -0.995855073418615790, + 0.090763279861485704, -0.995872495367145730, 0.090572322034718156, + -0.995889880700290720, + 0.090381360877865011, -0.995907229417411720, 0.090190396397947820, + -0.995924541517870690, + 0.089999428601987341, -0.995941817001031350, 0.089808457497005362, + -0.995959055866258320, + 0.089617483090022917, -0.995976258112917790, 0.089426505388062016, + -0.995993423740377360, + 0.089235524398144139, -0.996010552748005870, 0.089044540127290905, + -0.996027645135173610, + 0.088853552582524684, -0.996044700901251970, 0.088662561770867121, + -0.996061720045614000, + 0.088471567699340822, -0.996078702567633980, 0.088280570374967879, + -0.996095648466687300, + 0.088089569804770507, -0.996112557742151130, 0.087898565995771685, + -0.996129430393403740, + 0.087707558954993645, -0.996146266419824620, 0.087516548689459586, + -0.996163065820794950, + 0.087325535206192226, -0.996179828595696870, 0.087134518512214321, + -0.996196554743914220, + 0.086943498614549489, -0.996213244264832040, 0.086752475520220515, + -0.996229897157836500, + 0.086561449236251239, -0.996246513422315520, 0.086370419769664919, + -0.996263093057658030, + 0.086179387127484922, -0.996279636063254650, 0.085988351316735448, + -0.996296142438496850, + 0.085797312344439880, -0.996312612182778000, 0.085606270217622613, + -0.996329045295492380, + 0.085415224943307277, -0.996345441776035900, 0.085224176528518519, + -0.996361801623805720, + 0.085033124980280414, -0.996378124838200210, 0.084842070305617148, + -0.996394411418619290, + 0.084651012511553700, -0.996410661364464100, 0.084459951605114297, + -0.996426874675137240, + 0.084268887593324127, -0.996443051350042630, 0.084077820483207846, + -0.996459191388585410, + 0.083886750281790226, -0.996475294790172160, 0.083695676996096827, + -0.996491361554210920, + 0.083504600633152404, -0.996507391680110820, 0.083313521199982740, + -0.996523385167282450, + 0.083122438703613077, -0.996539342015137940, 0.082931353151068726, + -0.996555262223090540, + 0.082740264549375803, -0.996571145790554840, 0.082549172905559659, + -0.996586992716946950, + 0.082358078226646619, -0.996602803001684130, 0.082166980519662466, + -0.996618576644185070, + 0.081975879791633108, -0.996634313643869900, 0.081784776049585201, + -0.996650014000160070, + 0.081593669300544638, -0.996665677712478160, 0.081402559551538328, + -0.996681304780248300, + 0.081211446809592386, -0.996696895202896060, 0.081020331081733912, + -0.996712448979848010, + 0.080829212374989468, -0.996727966110532490, 0.080638090696385709, + -0.996743446594378860, + 0.080446966052950097, -0.996758890430818000, 0.080255838451709291, + -0.996774297619282050, + 0.080064707899690932, -0.996789668159204560, 0.079873574403922148, + -0.996805002050020320, + 0.079682437971430126, -0.996820299291165670, 0.079491298609242866, + -0.996835559882078170, + 0.079300156324387569, -0.996850783822196610, 0.079109011123892431, + -0.996865971110961310, + 0.078917863014785095, -0.996881121747813850, 0.078726712004093313, + -0.996896235732197210, + 0.078535558098845590, -0.996911313063555740, 0.078344401306069678, + -0.996926353741335090, + 0.078153241632794315, -0.996941357764982160, 0.077962079086047645, + -0.996956325133945280, + 0.077770913672857989, -0.996971255847674320, 0.077579745400254363, + -0.996986149905620180, + 0.077388574275265049, -0.997001007307235290, 0.077197400304919297, + -0.997015828051973310, + 0.077006223496245585, -0.997030612139289450, 0.076815043856273399, + -0.997045359568640040, + 0.076623861392031617, -0.997060070339482960, 0.076432676110549283, + -0.997074744451277310, + 0.076241488018856149, -0.997089381903483400, 0.076050297123981231, + -0.997103982695563330, + 0.075859103432954503, -0.997118546826979980, 0.075667906952805383, + -0.997133074297198110, + 0.075476707690563416, -0.997147565105683480, 0.075285505653258880, + -0.997162019251903290, + 0.075094300847921291, -0.997176436735326190, 0.074903093281581137, + -0.997190817555421940, + 0.074711882961268378, -0.997205161711661850, 0.074520669894013014, + -0.997219469203518670, + 0.074329454086845867, -0.997233740030466160, 0.074138235546796952, + -0.997247974191979860, + 0.073947014280897269, -0.997262171687536170, 0.073755790296177265, + -0.997276332516613180, + 0.073564563599667454, -0.997290456678690210, 0.073373334198399157, + -0.997304544173247990, + 0.073182102099402888, -0.997318594999768600, 0.072990867309710133, + -0.997332609157735470, + 0.072799629836351618, -0.997346586646633230, 0.072608389686359048, + -0.997360527465947940, + 0.072417146866763538, -0.997374431615167030, 0.072225901384596336, + -0.997388299093779460, + 0.072034653246889416, -0.997402129901275300, 0.071843402460674000, + -0.997415924037145960, + 0.071652149032982254, -0.997429681500884180, 0.071460892970845832, + -0.997443402291984360, + 0.071269634281296415, -0.997457086409941910, 0.071078372971366502, + -0.997470733854253670, + 0.070887109048087787, -0.997484344624417930, 0.070695842518492924, + -0.997497918719934210, + 0.070504573389614009, -0.997511456140303450, 0.070313301668483263, + -0.997524956885027960, + 0.070122027362133646, -0.997538420953611230, 0.069930750477597295, + -0.997551848345558430, + 0.069739471021907376, -0.997565239060375750, 0.069548189002096472, + -0.997578593097570800, + 0.069356904425197236, -0.997591910456652630, 0.069165617298243109, + -0.997605191137131640, + 0.068974327628266732, -0.997618435138519550, 0.068783035422301728, + -0.997631642460329320, + 0.068591740687380900, -0.997644813102075420, 0.068400443430538069, + -0.997657947063273710, + 0.068209143658806454, -0.997671044343441000, 0.068017841379219388, + -0.997684104942096030, + 0.067826536598810966, -0.997697128858758500, 0.067635229324614451, + -0.997710116092949570, + 0.067443919563664106, -0.997723066644191640, 0.067252607322993652, + -0.997735980512008620, + 0.067061292609636836, -0.997748857695925690, 0.066869975430628226, + -0.997761698195469560, + 0.066678655793001543, -0.997774502010167820, 0.066487333703791507, + -0.997787269139549960, + 0.066296009170032283, -0.997799999583146470, 0.066104682198758091, + -0.997812693340489280, + 0.065913352797003930, -0.997825350411111640, 0.065722020971803977, + -0.997837970794548280, + 0.065530686730193397, -0.997850554490335110, 0.065339350079206798, + -0.997863101498009500, + 0.065148011025878860, -0.997875611817110150, 0.064956669577245010, + -0.997888085447177110, + 0.064765325740339871, -0.997900522387751620, 0.064573979522199065, + -0.997912922638376610, + 0.064382630929857410, -0.997925286198596000, 0.064191279970350679, + -0.997937613067955250, + 0.063999926650714078, -0.997949903246001190, 0.063808570977982898, + -0.997962156732281950, + 0.063617212959193190, -0.997974373526346990, 0.063425852601380200, + -0.997986553627747020, + 0.063234489911580136, -0.997998697036034390, 0.063043124896828631, + -0.998010803750762450, + 0.062851757564161420, -0.998022873771486240, 0.062660387920614985, + -0.998034907097761770, + 0.062469015973224969, -0.998046903729146840, 0.062277641729028041, + -0.998058863665200250, + 0.062086265195060247, -0.998070786905482340, 0.061894886378357744, + -0.998082673449554590, + 0.061703505285957416, -0.998094523296980010, 0.061512121924895365, + -0.998106336447323050, + 0.061320736302208648, -0.998118112900149180, 0.061129348424933755, + -0.998129852655025520, + 0.060937958300107238, -0.998141555711520520, 0.060746565934766412, + -0.998153222069203650, + 0.060555171335947781, -0.998164851727646240, 0.060363774510688827, + -0.998176444686420530, + 0.060172375466026218, -0.998188000945100300, 0.059980974208997596, + -0.998199520503260660, + 0.059789570746640007, -0.998211003360478190, 0.059598165085990598, + -0.998222449516330550, + 0.059406757234087247, -0.998233858970396850, 0.059215347197967026, + -0.998245231722257880, + 0.059023934984667986, -0.998256567771495180, 0.058832520601227581, + -0.998267867117692110, + 0.058641104054683348, -0.998279129760433200, 0.058449685352073573, + -0.998290355699304350, + 0.058258264500435732, -0.998301544933892890, 0.058066841506808263, + -0.998312697463787260, + 0.057875416378229017, -0.998323813288577560, 0.057683989121735932, + -0.998334892407855000, + 0.057492559744367684, -0.998345934821212370, 0.057301128253162144, + -0.998356940528243420, + 0.057109694655158132, -0.998367909528543820, 0.056918258957393907, + -0.998378841821709990, + 0.056726821166907783, -0.998389737407340160, 0.056535381290738825, + -0.998400596285033640, + 0.056343939335925283, -0.998411418454391300, 0.056152495309506383, + -0.998422203915015020, + 0.055961049218520520, -0.998432952666508440, 0.055769601070007072, + -0.998443664708476340, + 0.055578150871004817, -0.998454340040524800, 0.055386698628552604, + -0.998464978662261250, + 0.055195244349690031, -0.998475580573294770, 0.055003788041455885, + -0.998486145773235360, + 0.054812329710889909, -0.998496674261694640, 0.054620869365031251, + -0.998507166038285490, + 0.054429407010919147, -0.998517621102622210, 0.054237942655593556, + -0.998528039454320230, + 0.054046476306093640, -0.998538421092996730, 0.053855007969459509, + -0.998548766018269920, + 0.053663537652730679, -0.998559074229759310, 0.053472065362946755, + -0.998569345727086110, + 0.053280591107148056, -0.998579580509872500, 0.053089114892374119, + -0.998589778577742230, + 0.052897636725665401, -0.998599939930320370, 0.052706156614061798, + -0.998610064567233340, + 0.052514674564603257, -0.998620152488108870, 0.052323190584330471, + -0.998630203692576050, + 0.052131704680283317, -0.998640218180265270, 0.051940216859502626, + -0.998650195950808280, + 0.051748727129028414, -0.998660137003838490, 0.051557235495901653, + -0.998670041338990070, + 0.051365741967162731, -0.998679908955899090, 0.051174246549852087, + -0.998689739854202620, + 0.050982749251010900, -0.998699534033539280, 0.050791250077679546, + -0.998709291493549030, + 0.050599749036899337, -0.998719012233872940, 0.050408246135710995, + -0.998728696254153720, + 0.050216741381155325, -0.998738343554035230, 0.050025234780273840, + -0.998747954133162860, + 0.049833726340107257, -0.998757527991183340, 0.049642216067697226, + -0.998767065127744380, + 0.049450703970084824, -0.998776565542495610, 0.049259190054311168, + -0.998786029235087640, + 0.049067674327418126, -0.998795456205172410, 0.048876156796446746, + -0.998804846452403420, + 0.048684637468439020, -0.998814199976435390, 0.048493116350436342, + -0.998823516776924380, + 0.048301593449480172, -0.998832796853527990, 0.048110068772612716, + -0.998842040205904840, + 0.047918542326875327, -0.998851246833715180, 0.047727014119310344, + -0.998860416736620520, + 0.047535484156959261, -0.998869549914283560, 0.047343952446864526, + -0.998878646366368690, + 0.047152418996068000, -0.998887706092541290, 0.046960883811611599, + -0.998896729092468410, + 0.046769346900537960, -0.998905715365818290, 0.046577808269888908, + -0.998914664912260440, + 0.046386267926707213, -0.998923577731465780, 0.046194725878035046, + -0.998932453823106690, + 0.046003182130914644, -0.998941293186856870, 0.045811636692388955, + -0.998950095822391250, + 0.045620089569500123, -0.998958861729386080, 0.045428540769291224, + -0.998967590907519300, + 0.045236990298804750, -0.998976283356469820, 0.045045438165083225, + -0.998984939075918010, + 0.044853884375169933, -0.998993558065545680, 0.044662328936107311, + -0.999002140325035980, + 0.044470771854938744, -0.999010685854073380, 0.044279213138707016, + -0.999019194652343460, + 0.044087652794454979, -0.999027666719533690, 0.043896090829226200, + -0.999036102055332330, + 0.043704527250063421, -0.999044500659429290, 0.043512962064010327, + -0.999052862531515930, + 0.043321395278109784, -0.999061187671284600, 0.043129826899405595, + -0.999069476078429330, + 0.042938256934940959, -0.999077727752645360, 0.042746685391759139, + -0.999085942693629270, + 0.042555112276904117, -0.999094120901079070, 0.042363537597419038, + -0.999102262374694130, + 0.042171961360348002, -0.999110367114174890, 0.041980383572734502, + -0.999118435119223490, + 0.041788804241622082, -0.999126466389543390, 0.041597223374055005, + -0.999134460924839150, + 0.041405640977076712, -0.999142418724816910, 0.041214057057731589, + -0.999150339789184110, + 0.041022471623063397, -0.999158224117649430, 0.040830884680115968, + -0.999166071709923000, + 0.040639296235933854, -0.999173882565716380, 0.040447706297560768, + -0.999181656684742350, + 0.040256114872041358, -0.999189394066714920, 0.040064521966419686, + -0.999197094711349880, + 0.039872927587739845, -0.999204758618363890, 0.039681331743046659, + -0.999212385787475290, + 0.039489734439384118, -0.999219976218403530, 0.039298135683797149, + -0.999227529910869610, + 0.039106535483329839, -0.999235046864595850, 0.038914933845027241, + -0.999242527079305830, + 0.038723330775933762, -0.999249970554724420, 0.038531726283093877, + -0.999257377290578060, + 0.038340120373552791, -0.999264747286594420, 0.038148513054354856, + -0.999272080542502610, + 0.037956904332545366, -0.999279377058032710, 0.037765294215169005, + -0.999286636832916740, + 0.037573682709270514, -0.999293859866887790, 0.037382069821895340, + -0.999301046159680070, + 0.037190455560088091, -0.999308195711029470, 0.036998839930894332, + -0.999315308520673070, + 0.036807222941358991, -0.999322384588349540, 0.036615604598527057, + -0.999329423913798420, + 0.036423984909444228, -0.999336426496761240, 0.036232363881155374, + -0.999343392336980220, + 0.036040741520706299, -0.999350321434199440, 0.035849117835142184, + -0.999357213788164000, + 0.035657492831508264, -0.999364069398620550, 0.035465866516850478, + -0.999370888265317060, + 0.035274238898213947, -0.999377670388002850, 0.035082609982644702, + -0.999384415766428560, + 0.034890979777187955, -0.999391124400346050, 0.034699348288889847, + -0.999397796289508640, + 0.034507715524795889, -0.999404431433671300, 0.034316081491951658, + -0.999411029832589780, + 0.034124446197403423, -0.999417591486021720, 0.033932809648196623, + -0.999424116393725640, + 0.033741171851377642, -0.999430604555461730, 0.033549532813992221, + -0.999437055970991530, + 0.033357892543086159, -0.999443470640077770, 0.033166251045705968, + -0.999449848562484530, + 0.032974608328897315, -0.999456189737977340, 0.032782964399706793, + -0.999462494166323160, + 0.032591319265180385, -0.999468761847290050, 0.032399672932364114, + -0.999474992780647780, + 0.032208025408304704, -0.999481186966166950, 0.032016376700048046, + -0.999487344403620080, + 0.031824726814640963, -0.999493465092780590, 0.031633075759129645, + -0.999499549033423640, + 0.031441423540560343, -0.999505596225325310, 0.031249770165979990, + -0.999511606668263440, + 0.031058115642434700, -0.999517580362016990, 0.030866459976971503, + -0.999523517306366350, + 0.030674803176636581, -0.999529417501093140, 0.030483145248477058, + -0.999535280945980540, + 0.030291486199539423, -0.999541107640812940, 0.030099826036870208, + -0.999546897585375960, + 0.029908164767516655, -0.999552650779456990, 0.029716502398525156, + -0.999558367222844300, + 0.029524838936943035, -0.999564046915327740, 0.029333174389816984, + -0.999569689856698580, + 0.029141508764193740, -0.999575296046749220, 0.028949842067120746, + -0.999580865485273700, + 0.028758174305644590, -0.999586398172067070, 0.028566505486812797, + -0.999591894106925950, + 0.028374835617672258, -0.999597353289648380, 0.028183164705269902, + -0.999602775720033530, + 0.027991492756653365, -0.999608161397882110, 0.027799819778869434, + -0.999613510322995950, + 0.027608145778965820, -0.999618822495178640, 0.027416470763989606, + -0.999624097914234570, + 0.027224794740987910, -0.999629336579970110, 0.027033117717008563, + -0.999634538492192300, + 0.026841439699098527, -0.999639703650710200, 0.026649760694305708, + -0.999644832055333610, + 0.026458080709677145, -0.999649923705874240, 0.026266399752260809, + -0.999654978602144690, + 0.026074717829104040, -0.999659996743959220, 0.025883034947254208, + -0.999664978131133310, + 0.025691351113759395, -0.999669922763483760, 0.025499666335666818, + -0.999674830640828740, + 0.025307980620024630, -0.999679701762987930, 0.025116293973880335, + -0.999684536129782140, + 0.024924606404281485, -0.999689333741033640, 0.024732917918276334, + -0.999694094596566000, + 0.024541228522912264, -0.999698818696204250, 0.024349538225237600, + -0.999703506039774650, + 0.024157847032300020, -0.999708156627104880, 0.023966154951147241, + -0.999712770458023870, + 0.023774461988827676, -0.999717347532362190, 0.023582768152388880, + -0.999721887849951310, + 0.023391073448879338, -0.999726391410624470, 0.023199377885346890, + -0.999730858214216030, + 0.023007681468839410, -0.999735288260561680, 0.022815984206405477, + -0.999739681549498660, + 0.022624286105092803, -0.999744038080865430, 0.022432587171950024, + -0.999748357854501780, + 0.022240887414024919, -0.999752640870248840, 0.022049186838366180, + -0.999756887127949080, + 0.021857485452021874, -0.999761096627446610, 0.021665783262040089, + -0.999765269368586450, + 0.021474080275469605, -0.999769405351215280, 0.021282376499358355, + -0.999773504575180990, + 0.021090671940755180, -0.999777567040332940, 0.020898966606708289, + -0.999781592746521670, + 0.020707260504265912, -0.999785581693599210, 0.020515553640476986, + -0.999789533881418780, + 0.020323846022389572, -0.999793449309835270, 0.020132137657052664, + -0.999797327978704690, + 0.019940428551514598, -0.999801169887884260, 0.019748718712823757, + -0.999804975037232870, + 0.019557008148029204, -0.999808743426610520, 0.019365296864179146, + -0.999812475055878780, + 0.019173584868322699, -0.999816169924900410, 0.018981872167508348, + -0.999819828033539420, + 0.018790158768784596, -0.999823449381661570, 0.018598444679200642, + -0.999827033969133420, + 0.018406729905804820, -0.999830581795823400, 0.018215014455646376, + -0.999834092861600960, + 0.018023298335773701, -0.999837567166337090, 0.017831581553236088, + -0.999841004709904000, + 0.017639864115082195, -0.999844405492175240, 0.017448146028360704, + -0.999847769513025900, + 0.017256427300120978, -0.999851096772332190, 0.017064707937411529, + -0.999854387269971890, + 0.016872987947281773, -0.999857641005823860, 0.016681267336780482, + -0.999860857979768540, + 0.016489546112956454, -0.999864038191687680, 0.016297824282859176, + -0.999867181641464380, + 0.016106101853537263, -0.999870288328982950, 0.015914378832040249, + -0.999873358254129260, + 0.015722655225417017, -0.999876391416790410, 0.015530931040716478, + -0.999879387816854930, + 0.015339206284988220, -0.999882347454212560, 0.015147480965280975, + -0.999885270328754520, + 0.014955755088644378, -0.999888156440373320, 0.014764028662127416, + -0.999891005788962950, + 0.014572301692779104, -0.999893818374418490, 0.014380574187649138, + -0.999896594196636680, + 0.014188846153786343, -0.999899333255515390, 0.013997117598240459, + -0.999902035550953920, + 0.013805388528060349, -0.999904701082852900, 0.013613658950295789, + -0.999907329851114300, + 0.013421928871995907, -0.999909921855641540, 0.013230198300209845, + -0.999912477096339240, + 0.013038467241987433, -0.999914995573113470, 0.012846735704377631, + -0.999917477285871770, + 0.012655003694430301, -0.999919922234522750, 0.012463271219194662, + -0.999922330418976490, + 0.012271538285719944, -0.999924701839144500, 0.012079804901056066, + -0.999927036494939640, + 0.011888071072252072, -0.999929334386276070, 0.011696336806357907, + -0.999931595513069200, + 0.011504602110422875, -0.999933819875236000, 0.011312866991496287, + -0.999936007472694620, + 0.011121131456628141, -0.999938158305364590, 0.010929395512867561, + -0.999940272373166960, + 0.010737659167264572, -0.999942349676023910, 0.010545922426868548, + -0.999944390213859060, + 0.010354185298728884, -0.999946393986597460, 0.010162447789895645, + -0.999948360994165400, + 0.009970709907418029, -0.999950291236490480, 0.009778971658346134, + -0.999952184713501780, + 0.009587233049729183, -0.999954041425129780, 0.009395494088617302, + -0.999955861371306100, + 0.009203754782059960, -0.999957644551963900, 0.009012015137106642, + -0.999959390967037450, + 0.008820275160807512, -0.999961100616462820, 0.008628534860211857, + -0.999962773500176930, + 0.008436794242369860, -0.999964409618118280, 0.008245053314331058, + -0.999966008970226920, + 0.008053312083144991, -0.999967571556443780, 0.007861570555861883, + -0.999969097376711580, + 0.007669828739531077, -0.999970586430974140, 0.007478086641202815, + -0.999972038719176730, + 0.007286344267926684, -0.999973454241265940, 0.007094601626752279, + -0.999974832997189810, + 0.006902858724729877, -0.999976174986897610, 0.006711115568908869, + -0.999977480210339940, + 0.006519372166339549, -0.999978748667468830, 0.006327628524071549, + -0.999979980358237650, + 0.006135884649154515, -0.999981175282601110, 0.005944140548638765, + -0.999982333440515350, + 0.005752396229573737, -0.999983454831937730, 0.005560651699009764, + -0.999984539456826970, + 0.005368906963996303, -0.999985587315143200, 0.005177162031583702, + -0.999986598406848000, + 0.004985416908821652, -0.999987572731904080, 0.004793671602759852, + -0.999988510290275690, + 0.004601926120448672, -0.999989411081928400, 0.004410180468937601, + -0.999990275106828920, + 0.004218434655277024, -0.999991102364945590, 0.004026688686516664, + -0.999991892856248010, + 0.003834942569706248, -0.999992646580707190, 0.003643196311896179, + -0.999993363538295150, + 0.003451449920135975, -0.999994043728985820, 0.003259703401476044, + -0.999994687152754080, + 0.003067956762966138, -0.999995293809576190, 0.002876210011656010, + -0.999995863699429940, + 0.002684463154596083, -0.999996396822294350, 0.002492716198835898, + -0.999996893178149880, + 0.002300969151425887, -0.999997352766978210, 0.002109222019415816, + -0.999997775588762350, + 0.001917474809855460, -0.999998161643486980, 0.001725727529795258, + -0.999998510931137790, + 0.001533980186284766, -0.999998823451701880, 0.001342232786374430, + -0.999999099205167830, + 0.001150485337113809, -0.999999338191525530, 0.000958737845553352, + -0.999999540410766110, + 0.000766990318742846, -0.999999705862882230, 0.000575242763732077, + -0.999999834547867670, + 0.000383495187571497, -0.999999926465717890, 0.000191747597310674, + -0.999999981616429330, + +}; + +/** +* \par +* cosFactor tables are generated using the formula :
cos_factors[n] = 2 * cos((2n+1)*pi/(4*N))
+* \par +* C command to generate the table +* \par +*
 for(i = 0; i< N; i++)    
+* {    
+*    cos_factors[i]= 2 * cos((2*i+1)*c/2);    
+* } 
+* \par +* where N is the number of factors to generate and c is pi/(2*N) +*/ +static const float32_t cos_factors_128[128] = { + 0.999981175282601110f, 0.999830581795823400f, 0.999529417501093140f, + 0.999077727752645360f, + 0.998475580573294770f, 0.997723066644191640f, 0.996820299291165670f, + 0.995767414467659820f, + 0.994564570734255420f, 0.993211949234794500f, 0.991709753669099530f, + 0.990058210262297120f, + 0.988257567730749460f, 0.986308097244598670f, 0.984210092386929030f, + 0.981963869109555240f, + 0.979569765685440520f, 0.977028142657754390f, 0.974339382785575860f, + 0.971503890986251780f, + 0.968522094274417380f, 0.965394441697689400f, 0.962121404269041580f, + 0.958703474895871600f, + 0.955141168305770780f, 0.951435020969008340f, 0.947585591017741090f, + 0.943593458161960390f, + 0.939459223602189920f, 0.935183509938947610f, 0.930766961078983710f, + 0.926210242138311380f, + 0.921514039342042010f, 0.916679059921042700f, 0.911706032005429880f, + 0.906595704514915330f, + 0.901348847046022030f, 0.895966249756185220f, 0.890448723244757880f, + 0.884797098430937790f, + 0.879012226428633530f, 0.873094978418290090f, 0.867046245515692650f, + 0.860866938637767310f, + 0.854557988365400530f, 0.848120344803297230f, 0.841554977436898440f, + 0.834862874986380010f, + 0.828045045257755800f, 0.821102514991104650f, 0.814036329705948410f, + 0.806847553543799330f, + 0.799537269107905010f, 0.792106577300212390f, 0.784556597155575240f, + 0.776888465673232440f, + 0.769103337645579700f, 0.761202385484261780f, 0.753186799043612520f, + 0.745057785441466060f, + 0.736816568877369900f, 0.728464390448225200f, 0.720002507961381650f, + 0.711432195745216430f, + 0.702754744457225300f, 0.693971460889654000f, 0.685083667772700360f, + 0.676092703575316030f, + 0.666999922303637470f, 0.657806693297078640f, 0.648514401022112550f, + 0.639124444863775730f, + 0.629638238914927100f, 0.620057211763289210f, 0.610382806276309480f, + 0.600616479383868970f, + 0.590759701858874280f, 0.580813958095764530f, 0.570780745886967370f, + 0.560661576197336030f, + 0.550457972936604810f, 0.540171472729892970f, 0.529803624686294830f, + 0.519355990165589530f, + 0.508830142543106990f, 0.498227666972781870f, 0.487550160148436050f, + 0.476799230063322250f, + 0.465976495767966130f, 0.455083587126343840f, 0.444122144570429260f, + 0.433093818853152010f, + 0.422000270799799790f, 0.410843171057903910f, 0.399624199845646790f, + 0.388345046698826300f, + 0.377007410216418310f, 0.365612997804773960f, 0.354163525420490510f, + 0.342660717311994380f, + 0.331106305759876430f, 0.319502030816015750f, 0.307849640041534980f, + 0.296150888243623960f, + 0.284407537211271820f, 0.272621355449948980f, 0.260794117915275570f, + 0.248927605745720260f, + 0.237023605994367340f, 0.225083911359792780f, 0.213110319916091360f, + 0.201104634842091960f, + 0.189068664149806280f, 0.177004220412148860f, 0.164913120489970090f, + 0.152797185258443410f, + 0.140658239332849240f, 0.128498110793793220f, 0.116318630911904880f, + 0.104121633872054730f, + 0.091908956497132696f, 0.079682437971430126f, 0.067443919563664106f, + 0.055195244349690031f, + 0.042938256934940959f, 0.030674803176636581f, 0.018406729905804820f, + 0.006135884649154515f +}; + +static const float32_t cos_factors_512[512] = { + 0.999998823451701880f, 0.999989411081928400f, 0.999970586430974140f, + 0.999942349676023910f, + 0.999904701082852900f, 0.999857641005823860f, 0.999801169887884260f, + 0.999735288260561680f, + 0.999659996743959220f, 0.999575296046749220f, 0.999481186966166950f, + 0.999377670388002850f, + 0.999264747286594420f, 0.999142418724816910f, 0.999010685854073380f, + 0.998869549914283560f, + 0.998719012233872940f, 0.998559074229759310f, 0.998389737407340160f, + 0.998211003360478190f, + 0.998022873771486240f, 0.997825350411111640f, 0.997618435138519550f, + 0.997402129901275300f, + 0.997176436735326190f, 0.996941357764982160f, 0.996696895202896060f, + 0.996443051350042630f, + 0.996179828595696980f, 0.995907229417411720f, 0.995625256380994310f, + 0.995333912140482280f, + 0.995033199438118630f, 0.994723121104325700f, 0.994403680057679100f, + 0.994074879304879370f, + 0.993736721940724600f, 0.993389211148080650f, 0.993032350197851410f, + 0.992666142448948020f, + 0.992290591348257370f, 0.991905700430609330f, 0.991511473318743900f, + 0.991107913723276890f, + 0.990695025442664630f, 0.990272812363169110f, 0.989841278458820530f, + 0.989400427791380380f, + 0.988950264510302990f, 0.988490792852696590f, 0.988022017143283530f, + 0.987543941794359230f, + 0.987056571305750970f, 0.986559910264775410f, 0.986053963346195440f, + 0.985538735312176060f, + 0.985014231012239840f, 0.984480455383220930f, 0.983937413449218920f, + 0.983385110321551180f, + 0.982823551198705240f, 0.982252741366289370f, 0.981672686196983110f, + 0.981083391150486710f, + 0.980484861773469380f, 0.979877103699517640f, 0.979260122649082020f, + 0.978633924429423210f, + 0.977998514934557140f, 0.977353900145199960f, 0.976700086128711840f, + 0.976037079039039020f, + 0.975364885116656980f, 0.974683510688510670f, 0.973992962167955830f, + 0.973293246054698250f, + 0.972584368934732210f, 0.971866337480279400f, 0.971139158449725090f, + 0.970402838687555500f, + 0.969657385124292450f, 0.968902804776428870f, 0.968139104746362440f, + 0.967366292222328510f, + 0.966584374478333120f, 0.965793358874083680f, 0.964993252854920320f, + 0.964184063951745830f, + 0.963365799780954050f, 0.962538468044359160f, 0.961702076529122540f, + 0.960856633107679660f, + 0.960002145737665960f, 0.959138622461841890f, 0.958266071408017670f, + 0.957384500788975860f, + 0.956493918902395100f, 0.955594334130771110f, 0.954685754941338340f, + 0.953768189885990330f, + 0.952841647601198720f, 0.951906136807932350f, 0.950961666311575080f, + 0.950008245001843000f, + 0.949045881852700560f, 0.948074585922276230f, 0.947094366352777220f, + 0.946105232370403450f, + 0.945107193285260610f, 0.944100258491272660f, 0.943084437466093490f, + 0.942059739771017310f, + 0.941026175050889260f, 0.939983753034014050f, 0.938932483532064600f, + 0.937872376439989890f, + 0.936803441735921560f, 0.935725689481080370f, 0.934639129819680780f, + 0.933543772978836170f, + 0.932439629268462360f, 0.931326709081180430f, 0.930205022892219070f, + 0.929074581259315860f, + 0.927935394822617890f, 0.926787474304581750f, 0.925630830509872720f, + 0.924465474325262600f, + 0.923291416719527640f, 0.922108668743345180f, 0.920917241529189520f, + 0.919717146291227360f, + 0.918508394325212250f, 0.917290997008377910f, 0.916064965799331720f, + 0.914830312237946200f, + 0.913587047945250810f, 0.912335184623322750f, 0.911074734055176360f, + 0.909805708104652220f, + 0.908528118716306120f, 0.907241977915295820f, 0.905947297807268460f, + 0.904644090578246240f, + 0.903332368494511820f, 0.902012143902493180f, 0.900683429228646970f, + 0.899346236979341570f, + 0.898000579740739880f, 0.896646470178680150f, 0.895283921038557580f, + 0.893912945145203250f, + 0.892533555402764580f, 0.891145764794583180f, 0.889749586383072780f, + 0.888345033309596350f, + 0.886932118794342190f, 0.885510856136199950f, 0.884081258712634990f, + 0.882643339979562790f, + 0.881197113471222090f, 0.879742592800047410f, 0.878279791656541580f, + 0.876808723809145650f, + 0.875329403104110890f, 0.873841843465366860f, 0.872346058894391540f, + 0.870842063470078980f, + 0.869329871348606840f, 0.867809496763303320f, 0.866280954024512990f, + 0.864744257519462380f, + 0.863199421712124160f, 0.861646461143081300f, 0.860085390429390140f, + 0.858516224264442740f, + 0.856938977417828760f, 0.855353664735196030f, 0.853760301138111410f, + 0.852158901623919830f, + 0.850549481265603480f, 0.848932055211639610f, 0.847306638685858320f, + 0.845673246987299070f, + 0.844031895490066410f, 0.842382599643185850f, 0.840725374970458070f, + 0.839060237070312740f, + 0.837387201615661940f, 0.835706284353752600f, 0.834017501106018130f, + 0.832320867767929680f, + 0.830616400308846310f, 0.828904114771864870f, 0.827184027273669130f, + 0.825456154004377550f, + 0.823720511227391430f, 0.821977115279241550f, 0.820225982569434690f, + 0.818467129580298660f, + 0.816700572866827850f, 0.814926329056526620f, 0.813144414849253590f, + 0.811354847017063730f, + 0.809557642404051260f, 0.807752817926190360f, 0.805940390571176280f, + 0.804120377398265810f, + 0.802292795538115720f, 0.800457662192622820f, 0.798614994634760820f, + 0.796764810208418830f, + 0.794907126328237010f, 0.793041960479443640f, 0.791169330217690200f, + 0.789289253168885650f, + 0.787401747029031430f, 0.785506829564053930f, 0.783604518609638200f, + 0.781694832071059390f, + 0.779777787923014550f, 0.777853404209453150f, 0.775921699043407690f, + 0.773982690606822900f, + 0.772036397150384520f, 0.770082836993347900f, 0.768122028523365420f, + 0.766153990196312920f, + 0.764178740536116670f, 0.762196298134578900f, 0.760206681651202420f, + 0.758209909813015280f, + 0.756206001414394540f, 0.754194975316889170f, 0.752176850449042810f, + 0.750151645806215070f, + 0.748119380450403600f, 0.746080073510063780f, 0.744033744179929290f, + 0.741980411720831070f, + 0.739920095459516200f, 0.737852814788465980f, 0.735778589165713590f, + 0.733697438114660370f, + 0.731609381223892630f, 0.729514438146997010f, 0.727412628602375770f, + 0.725303972373060770f, + 0.723188489306527460f, 0.721066199314508110f, 0.718937122372804490f, + 0.716801278521099540f, + 0.714658687862769090f, 0.712509370564692320f, 0.710353346857062420f, + 0.708190637033195400f, + 0.706021261449339740f, 0.703845240524484940f, 0.701662594740168570f, + 0.699473344640283770f, + 0.697277510830886630f, 0.695075113980000880f, 0.692866174817424740f, + 0.690650714134534720f, + 0.688428752784090550f, 0.686200311680038700f, 0.683965411797315510f, + 0.681724074171649820f, + 0.679476319899365080f, 0.677222170137180450f, 0.674961646102012040f, + 0.672694769070772970f, + 0.670421560380173090f, 0.668142041426518560f, 0.665856233665509720f, + 0.663564158612039880f, + 0.661265837839992270f, 0.658961292982037320f, 0.656650545729429050f, + 0.654333617831800550f, + 0.652010531096959500f, 0.649681307390683190f, 0.647345968636512060f, + 0.645004536815544040f, + 0.642657033966226860f, 0.640303482184151670f, 0.637943903621844170f, + 0.635578320488556230f, + 0.633206755050057190f, 0.630829229628424470f, 0.628445766601832710f, + 0.626056388404343520f, + 0.623661117525694640f, 0.621259976511087660f, 0.618852987960976320f, + 0.616440174530853650f, + 0.614021558931038490f, 0.611597163926462020f, 0.609167012336453210f, + 0.606731127034524480f, + 0.604289530948156070f, 0.601842247058580030f, 0.599389298400564540f, + 0.596930708062196500f, + 0.594466499184664540f, 0.591996694962040990f, 0.589521318641063940f, + 0.587040393520918080f, + 0.584553942953015330f, 0.582061990340775550f, 0.579564559139405740f, + 0.577061672855679550f, + 0.574553355047715760f, 0.572039629324757050f, 0.569520519346947250f, + 0.566996048825108680f, + 0.564466241520519500f, 0.561931121244689470f, 0.559390711859136140f, + 0.556845037275160100f, + 0.554294121453620110f, 0.551737988404707450f, 0.549176662187719770f, + 0.546610166910834860f, + 0.544038526730883930f, 0.541461765853123560f, 0.538879908531008420f, + 0.536292979065963180f, + 0.533701001807152960f, 0.531104001151255000f, 0.528502001542228480f, + 0.525895027471084740f, + 0.523283103475656430f, 0.520666254140367270f, 0.518044504095999340f, + 0.515417878019463150f, + 0.512786400633563070f, 0.510150096706766700f, 0.507508991052970870f, + 0.504863108531267480f, + 0.502212474045710900f, 0.499557112545081890f, 0.496897049022654640f, + 0.494232308515959730f, + 0.491562916106550060f, 0.488888896919763230f, 0.486210276124486530f, + 0.483527078932918740f, + 0.480839330600333900f, 0.478147056424843120f, 0.475450281747155870f, + 0.472749031950342900f, + 0.470043332459595620f, 0.467333208741988530f, 0.464618686306237820f, + 0.461899790702462840f, + 0.459176547521944150f, 0.456448982396883860f, 0.453717121000163930f, + 0.450980989045103810f, + 0.448240612285220000f, 0.445496016513981740f, 0.442747227564570130f, + 0.439994271309633260f, + 0.437237173661044200f, 0.434475960569655710f, 0.431710658025057370f, + 0.428941292055329550f, + 0.426167888726799620f, 0.423390474143796100f, 0.420609074448402510f, + 0.417823715820212380f, + 0.415034424476081630f, 0.412241226669883000f, 0.409444148692257590f, + 0.406643216870369140f, + 0.403838457567654130f, 0.401029897183575790f, 0.398217562153373620f, + 0.395401478947816300f, + 0.392581674072951530f, 0.389758174069856410f, 0.386931005514388690f, + 0.384100195016935040f, + 0.381265769222162490f, 0.378427754808765620f, 0.375586178489217330f, + 0.372741067009515810f, + 0.369892447148934270f, 0.367040345719767240f, 0.364184789567079840f, + 0.361325805568454340f, + 0.358463420633736540f, 0.355597661704783960f, 0.352728555755210730f, + 0.349856129790135030f, + 0.346980410845923680f, 0.344101425989938980f, 0.341219202320282410f, + 0.338333766965541290f, + 0.335445147084531660f, 0.332553369866044220f, 0.329658462528587550f, + 0.326760452320131790f, + 0.323859366517852960f, 0.320955232427875210f, 0.318048077385015060f, + 0.315137928752522440f, + 0.312224813921825050f, 0.309308760312268780f, 0.306389795370861080f, + 0.303467946572011370f, + 0.300543241417273400f, 0.297615707435086310f, 0.294685372180514330f, + 0.291752263234989370f, + 0.288816408206049480f, 0.285877834727080730f, 0.282936570457055390f, + 0.279992643080273380f, + 0.277046080306099950f, 0.274096909868706330f, 0.271145159526808070f, + 0.268190857063403180f, + 0.265234030285511900f, 0.262274707023913590f, 0.259312915132886350f, + 0.256348682489942910f, + 0.253382036995570270f, 0.250413006572965280f, 0.247441619167773440f, + 0.244467902747824210f, + 0.241491885302869300f, 0.238513594844318500f, 0.235533059404975460f, + 0.232550307038775330f, + 0.229565365820518870f, 0.226578263845610110f, 0.223589029229790020f, + 0.220597690108873650f, + 0.217604274638483670f, 0.214608810993786920f, 0.211611327369227610f, + 0.208611851978263460f, + 0.205610413053099320f, 0.202607038844421110f, 0.199601757621131050f, + 0.196594597670080220f, + 0.193585587295803750f, 0.190574754820252800f, 0.187562128582529740f, + 0.184547736938619640f, + 0.181531608261125130f, 0.178513770938997590f, 0.175494253377271400f, + 0.172473083996796030f, + 0.169450291233967930f, 0.166425903540464220f, 0.163399949382973230f, + 0.160372457242928400f, + 0.157343455616238280f, 0.154312973013020240f, 0.151281037957330250f, + 0.148247678986896200f, + 0.145212924652847520f, 0.142176803519448000f, 0.139139344163826280f, + 0.136100575175706200f, + 0.133060525157139180f, 0.130019222722233350f, 0.126976696496885980f, + 0.123932975118512200f, + 0.120888087235777220f, 0.117842061508325020f, 0.114794926606510250f, + 0.111746711211126660f, + 0.108697444013138670f, 0.105647153713410700f, 0.102595869022436280f, + 0.099543618660069444f, + 0.096490431355252607f, 0.093436335845747912f, 0.090381360877865011f, + 0.087325535206192226f, + 0.084268887593324127f, 0.081211446809592386f, 0.078153241632794315f, + 0.075094300847921291f, + 0.072034653246889416f, 0.068974327628266732f, 0.065913352797003930f, + 0.062851757564161420f, + 0.059789570746640007f, 0.056726821166907783f, 0.053663537652730679f, + 0.050599749036899337f, + 0.047535484156959261f, 0.044470771854938744f, 0.041405640977076712f, + 0.038340120373552791f, + 0.035274238898213947f, 0.032208025408304704f, 0.029141508764193740f, + 0.026074717829104040f, + 0.023007681468839410f, 0.019940428551514598f, 0.016872987947281773f, + 0.013805388528060349f, + 0.010737659167264572f, 0.007669828739531077f, 0.004601926120448672f, + 0.001533980186284766f +}; + +static const float32_t cos_factors_2048[2048] = { + 0.999999926465717890f, 0.999999338191525530f, 0.999998161643486980f, + 0.999996396822294350f, + 0.999994043728985820f, 0.999991102364945590f, 0.999987572731904080f, + 0.999983454831937730f, + 0.999978748667468830f, 0.999973454241265940f, 0.999967571556443780f, + 0.999961100616462820f, + 0.999954041425129780f, 0.999946393986597460f, 0.999938158305364590f, + 0.999929334386276070f, + 0.999919922234522750f, 0.999909921855641540f, 0.999899333255515390f, + 0.999888156440373320f, + 0.999876391416790410f, 0.999864038191687680f, 0.999851096772332190f, + 0.999837567166337090f, + 0.999823449381661570f, 0.999808743426610520f, 0.999793449309835270f, + 0.999777567040332940f, + 0.999761096627446610f, 0.999744038080865430f, 0.999726391410624470f, + 0.999708156627104880f, + 0.999689333741033640f, 0.999669922763483760f, 0.999649923705874240f, + 0.999629336579970110f, + 0.999608161397882110f, 0.999586398172067070f, 0.999564046915327740f, + 0.999541107640812940f, + 0.999517580362016990f, 0.999493465092780590f, 0.999468761847290050f, + 0.999443470640077770f, + 0.999417591486021720f, 0.999391124400346050f, 0.999364069398620550f, + 0.999336426496761240f, + 0.999308195711029470f, 0.999279377058032710f, 0.999249970554724420f, + 0.999219976218403530f, + 0.999189394066714920f, 0.999158224117649430f, 0.999126466389543390f, + 0.999094120901079070f, + 0.999061187671284600f, 0.999027666719533690f, 0.998993558065545680f, + 0.998958861729386080f, + 0.998923577731465780f, 0.998887706092541290f, 0.998851246833715180f, + 0.998814199976435390f, + 0.998776565542495610f, 0.998738343554035230f, 0.998699534033539280f, + 0.998660137003838490f, + 0.998620152488108870f, 0.998579580509872500f, 0.998538421092996730f, + 0.998496674261694640f, + 0.998454340040524800f, 0.998411418454391300f, 0.998367909528543820f, + 0.998323813288577560f, + 0.998279129760433200f, 0.998233858970396850f, 0.998188000945100300f, + 0.998141555711520520f, + 0.998094523296980010f, 0.998046903729146840f, 0.997998697036034390f, + 0.997949903246001190f, + 0.997900522387751620f, 0.997850554490335110f, 0.997799999583146470f, + 0.997748857695925690f, + 0.997697128858758500f, 0.997644813102075420f, 0.997591910456652630f, + 0.997538420953611340f, + 0.997484344624417930f, 0.997429681500884180f, 0.997374431615167150f, + 0.997318594999768600f, + 0.997262171687536170f, 0.997205161711661850f, 0.997147565105683480f, + 0.997089381903483400f, + 0.997030612139289450f, 0.996971255847674320f, 0.996911313063555740f, + 0.996850783822196610f, + 0.996789668159204560f, 0.996727966110532490f, 0.996665677712478160f, + 0.996602803001684130f, + 0.996539342015137940f, 0.996475294790172160f, 0.996410661364464100f, + 0.996345441776035900f, + 0.996279636063254650f, 0.996213244264832040f, 0.996146266419824620f, + 0.996078702567633980f, + 0.996010552748005870f, 0.995941817001031350f, 0.995872495367145730f, + 0.995802587887129160f, + 0.995732094602106430f, 0.995661015553546910f, 0.995589350783264600f, + 0.995517100333418110f, + 0.995444264246510340f, 0.995370842565388990f, 0.995296835333246090f, + 0.995222242593618360f, + 0.995147064390386470f, 0.995071300767776170f, 0.994994951770357020f, + 0.994918017443043200f, + 0.994840497831093180f, 0.994762392980109930f, 0.994683702936040250f, + 0.994604427745175660f, + 0.994524567454151740f, 0.994444122109948040f, 0.994363091759888570f, + 0.994281476451641550f, + 0.994199276233218910f, 0.994116491152977070f, 0.994033121259616400f, + 0.993949166602181130f, + 0.993864627230059750f, 0.993779503192984580f, 0.993693794541031790f, + 0.993607501324621610f, + 0.993520623594518090f, 0.993433161401829360f, 0.993345114798006910f, + 0.993256483834846440f, + 0.993167268564487230f, 0.993077469039412300f, 0.992987085312448390f, + 0.992896117436765980f, + 0.992804565465879140f, 0.992712429453645460f, 0.992619709454266140f, + 0.992526405522286100f, + 0.992432517712593660f, 0.992338046080420420f, 0.992242990681341700f, + 0.992147351571276090f, + 0.992051128806485720f, 0.991954322443575950f, 0.991856932539495470f, + 0.991758959151536110f, + 0.991660402337333210f, 0.991561262154865290f, 0.991461538662453790f, + 0.991361231918763460f, + 0.991260341982802440f, 0.991158868913921350f, 0.991056812771814340f, + 0.990954173616518500f, + 0.990850951508413620f, 0.990747146508222710f, 0.990642758677011570f, + 0.990537788076188750f, + 0.990432234767505970f, 0.990326098813057330f, 0.990219380275280000f, + 0.990112079216953770f, + 0.990004195701200910f, 0.989895729791486660f, 0.989786681551618640f, + 0.989677051045747210f, + 0.989566838338365120f, 0.989456043494307710f, 0.989344666578752640f, + 0.989232707657220050f, + 0.989120166795572690f, 0.989007044060015270f, 0.988893339517095130f, + 0.988779053233701520f, + 0.988664185277066230f, 0.988548735714763200f, 0.988432704614708340f, + 0.988316092045159690f, + 0.988198898074717610f, 0.988081122772324070f, 0.987962766207263420f, + 0.987843828449161740f, + 0.987724309567986960f, 0.987604209634049160f, 0.987483528717999710f, + 0.987362266890832400f, + 0.987240424223882250f, 0.987118000788826280f, 0.986994996657682980f, + 0.986871411902812470f, + 0.986747246596916590f, 0.986622500813038480f, 0.986497174624562880f, + 0.986371268105216030f, + 0.986244781329065460f, 0.986117714370520090f, 0.985990067304330140f, + 0.985861840205586980f, + 0.985733033149723490f, 0.985603646212513400f, 0.985473679470071810f, + 0.985343132998854790f, + 0.985212006875659350f, 0.985080301177623800f, 0.984948015982227030f, + 0.984815151367289140f, + 0.984681707410970940f, 0.984547684191773960f, 0.984413081788540700f, + 0.984277900280454370f, + 0.984142139747038570f, 0.984005800268157870f, 0.983868881924017220f, + 0.983731384795162090f, + 0.983593308962478650f, 0.983454654507193270f, 0.983315421510872810f, + 0.983175610055424420f, + 0.983035220223095640f, 0.982894252096474070f, 0.982752705758487830f, + 0.982610581292404750f, + 0.982467878781833170f, 0.982324598310721280f, 0.982180739963357090f, + 0.982036303824369020f, + 0.981891289978725100f, 0.981745698511732990f, 0.981599529509040720f, + 0.981452783056635520f, + 0.981305459240844670f, 0.981157558148334830f, 0.981009079866112630f, + 0.980860024481523870f, + 0.980710392082253970f, 0.980560182756327840f, 0.980409396592109910f, + 0.980258033678303550f, + 0.980106094103951770f, 0.979953577958436740f, 0.979800485331479790f, + 0.979646816313141210f, + 0.979492570993820810f, 0.979337749464256780f, 0.979182351815526930f, + 0.979026378139047580f, + 0.978869828526574120f, 0.978712703070200420f, 0.978555001862359550f, + 0.978396724995823090f, + 0.978237872563701090f, 0.978078444659442380f, 0.977918441376834370f, + 0.977757862810002760f, + 0.977596709053411890f, 0.977434980201864260f, 0.977272676350500860f, + 0.977109797594800880f, + 0.976946344030581670f, 0.976782315753998650f, 0.976617712861545640f, + 0.976452535450054060f, + 0.976286783616693630f, 0.976120457458971910f, 0.975953557074734300f, + 0.975786082562163930f, + 0.975618034019781750f, 0.975449411546446380f, 0.975280215241354220f, + 0.975110445204038890f, + 0.974940101534371830f, 0.974769184332561770f, 0.974597693699155050f, + 0.974425629735034990f, + 0.974252992541422500f, 0.974079782219875680f, 0.973905998872289570f, + 0.973731642600896400f, + 0.973556713508265560f, 0.973381211697303290f, 0.973205137271252800f, + 0.973028490333694210f, + 0.972851270988544180f, 0.972673479340056430f, 0.972495115492821190f, + 0.972316179551765300f, + 0.972136671622152230f, 0.971956591809581720f, 0.971775940219990140f, + 0.971594716959650160f, + 0.971412922135170940f, 0.971230555853497380f, 0.971047618221911100f, + 0.970864109348029470f, + 0.970680029339806130f, 0.970495378305530560f, 0.970310156353828110f, + 0.970124363593660280f, + 0.969938000134323960f, 0.969751066085452140f, 0.969563561557013180f, + 0.969375486659311280f, + 0.969186841502985950f, 0.968997626199012420f, 0.968807840858700970f, + 0.968617485593697540f, + 0.968426560515983190f, 0.968235065737874320f, 0.968043001372022260f, + 0.967850367531413620f, + 0.967657164329369880f, 0.967463391879547550f, 0.967269050295937790f, + 0.967074139692867040f, + 0.966878660184995910f, 0.966682611887320080f, 0.966485994915169840f, + 0.966288809384209690f, + 0.966091055410438830f, 0.965892733110190860f, 0.965693842600133690f, + 0.965494383997269500f, + 0.965294357418934660f, 0.965093762982799590f, 0.964892600806868890f, + 0.964690871009481030f, + 0.964488573709308410f, 0.964285709025357480f, 0.964082277076968140f, + 0.963878277983814200f, + 0.963673711865903230f, 0.963468578843575950f, 0.963262879037507070f, + 0.963056612568704340f, + 0.962849779558509030f, 0.962642380128595710f, 0.962434414400972100f, + 0.962225882497979020f, + 0.962016784542290560f, 0.961807120656913540f, 0.961596890965187860f, + 0.961386095590786250f, + 0.961174734657714080f, 0.960962808290309780f, 0.960750316613243950f, + 0.960537259751520050f, + 0.960323637830473920f, 0.960109450975773940f, 0.959894699313420530f, + 0.959679382969746750f, + 0.959463502071417510f, 0.959247056745430090f, 0.959030047119113660f, + 0.958812473320129310f, + 0.958594335476470220f, 0.958375633716461170f, 0.958156368168758820f, + 0.957936538962351420f, + 0.957716146226558870f, 0.957495190091032570f, 0.957273670685755200f, + 0.957051588141040970f, + 0.956828942587535370f, 0.956605734156215080f, 0.956381962978387730f, + 0.956157629185692140f, + 0.955932732910098280f, 0.955707274283906560f, 0.955481253439748770f, + 0.955254670510586990f, + 0.955027525629714160f, 0.954799818930753720f, 0.954571550547659630f, + 0.954342720614716480f, + 0.954113329266538800f, 0.953883376638071770f, 0.953652862864590500f, + 0.953421788081700310f, + 0.953190152425336670f, 0.952957956031764700f, 0.952725199037579570f, + 0.952491881579706320f, + 0.952258003795399600f, 0.952023565822243570f, 0.951788567798152130f, + 0.951553009861368590f, + 0.951316892150465550f, 0.951080214804345010f, 0.950842977962238160f, + 0.950605181763705340f, + 0.950366826348635780f, 0.950127911857248100f, 0.949888438430089300f, + 0.949648406208035480f, + 0.949407815332291570f, 0.949166665944390700f, 0.948924958186195160f, + 0.948682692199895090f, + 0.948439868128009620f, 0.948196486113385580f, 0.947952546299198670f, + 0.947708048828952100f, + 0.947462993846477700f, 0.947217381495934820f, 0.946971211921810880f, + 0.946724485268921170f, + 0.946477201682408680f, 0.946229361307743820f, 0.945980964290724760f, + 0.945732010777477150f, + 0.945482500914453740f, 0.945232434848435000f, 0.944981812726528150f, + 0.944730634696167800f, + 0.944478900905115550f, 0.944226611501459810f, 0.943973766633615980f, + 0.943720366450326200f, + 0.943466411100659320f, 0.943211900734010620f, 0.942956835500102120f, + 0.942701215548981900f, + 0.942445041031024890f, 0.942188312096931770f, 0.941931028897729620f, + 0.941673191584771360f, + 0.941414800309736340f, 0.941155855224629190f, 0.940896356481780830f, + 0.940636304233847590f, + 0.940375698633811540f, 0.940114539834980280f, 0.939852827990986680f, + 0.939590563255789270f, + 0.939327745783671400f, 0.939064375729241950f, 0.938800453247434770f, + 0.938535978493508560f, + 0.938270951623047190f, 0.938005372791958840f, 0.937739242156476970f, + 0.937472559873159250f, + 0.937205326098887960f, 0.936937540990869900f, 0.936669204706636170f, + 0.936400317404042060f, + 0.936130879241267030f, 0.935860890376814640f, 0.935590350969512370f, + 0.935319261178511610f, + 0.935047621163287430f, 0.934775431083638700f, 0.934502691099687870f, + 0.934229401371880820f, + 0.933955562060986730f, 0.933681173328098410f, 0.933406235334631520f, + 0.933130748242325230f, + 0.932854712213241120f, 0.932578127409764420f, 0.932300993994602760f, + 0.932023312130786490f, + 0.931745081981668720f, 0.931466303710925090f, 0.931186977482553750f, + 0.930907103460875130f, + 0.930626681810531760f, 0.930345712696488470f, 0.930064196284032360f, + 0.929782132738772190f, + 0.929499522226638560f, 0.929216364913884040f, 0.928932660967082820f, + 0.928648410553130520f, + 0.928363613839244370f, 0.928078270992963140f, 0.927792382182146320f, + 0.927505947574975180f, + 0.927218967339951790f, 0.926931441645899130f, 0.926643370661961230f, + 0.926354754557602860f, + 0.926065593502609310f, 0.925775887667086740f, 0.925485637221461490f, + 0.925194842336480530f, + 0.924903503183210910f, 0.924611619933039970f, 0.924319192757675160f, + 0.924026221829143850f, + 0.923732707319793290f, 0.923438649402290370f, 0.923144048249621930f, + 0.922848904035094120f, + 0.922553216932332830f, 0.922256987115283030f, 0.921960214758209220f, + 0.921662900035694730f, + 0.921365043122642340f, 0.921066644194273640f, 0.920767703426128790f, + 0.920468220994067110f, + 0.920168197074266340f, 0.919867631843222950f, 0.919566525477751530f, + 0.919264878154985370f, + 0.918962690052375630f, 0.918659961347691900f, 0.918356692219021720f, + 0.918052882844770380f, + 0.917748533403661250f, 0.917443644074735220f, 0.917138215037350710f, + 0.916832246471183890f, + 0.916525738556228210f, 0.916218691472794220f, 0.915911105401509880f, + 0.915602980523320230f, + 0.915294317019487050f, 0.914985115071589310f, 0.914675374861522390f, + 0.914365096571498560f, + 0.914054280384046570f, 0.913742926482011390f, 0.913431035048554720f, + 0.913118606267154240f, + 0.912805640321603500f, 0.912492137396012650f, 0.912178097674807180f, + 0.911863521342728520f, + 0.911548408584833990f, 0.911232759586496190f, 0.910916574533403360f, + 0.910599853611558930f, + 0.910282597007281760f, 0.909964804907205660f, 0.909646477498279540f, + 0.909327614967767260f, + 0.909008217503247450f, 0.908688285292613360f, 0.908367818524072890f, + 0.908046817386148340f, + 0.907725282067676440f, 0.907403212757808110f, 0.907080609646008450f, + 0.906757472922056550f, + 0.906433802776045460f, 0.906109599398381980f, 0.905784862979786550f, + 0.905459593711293250f, + 0.905133791784249690f, 0.904807457390316540f, 0.904480590721468250f, + 0.904153191969991780f, + 0.903825261328487510f, 0.903496798989868450f, 0.903167805147360720f, + 0.902838279994502830f, + 0.902508223725145940f, 0.902177636533453620f, 0.901846518613901750f, + 0.901514870161278740f, + 0.901182691370684520f, 0.900849982437531450f, 0.900516743557543520f, + 0.900182974926756810f, + 0.899848676741518580f, 0.899513849198487980f, 0.899178492494635330f, + 0.898842606827242370f, + 0.898506192393901950f, 0.898169249392518080f, 0.897831778021305650f, + 0.897493778478790310f, + 0.897155250963808550f, 0.896816195675507300f, 0.896476612813344120f, + 0.896136502577086770f, + 0.895795865166813530f, 0.895454700782912450f, 0.895113009626081760f, + 0.894770791897329550f, + 0.894428047797973800f, 0.894084777529641990f, 0.893740981294271040f, + 0.893396659294107720f, + 0.893051811731707450f, 0.892706438809935390f, 0.892360540731965360f, + 0.892014117701280470f, + 0.891667169921672280f, 0.891319697597241390f, 0.890971700932396860f, + 0.890623180131855930f, + 0.890274135400644600f, 0.889924566944096720f, 0.889574474967854580f, + 0.889223859677868210f, + 0.888872721280395630f, 0.888521059982002260f, 0.888168875989561730f, + 0.887816169510254440f, + 0.887462940751568840f, 0.887109189921300170f, 0.886754917227550840f, + 0.886400122878730600f, + 0.886044807083555600f, 0.885688970051048960f, 0.885332611990540590f, + 0.884975733111666660f, + 0.884618333624369920f, 0.884260413738899190f, 0.883901973665809470f, + 0.883543013615961880f, + 0.883183533800523390f, 0.882823534430966620f, 0.882463015719070150f, + 0.882101977876917580f, + 0.881740421116898320f, 0.881378345651706920f, 0.881015751694342870f, + 0.880652639458111010f, + 0.880289009156621010f, 0.879924861003786860f, 0.879560195213827890f, + 0.879195012001267480f, + 0.878829311580933360f, 0.878463094167957870f, 0.878096359977777130f, + 0.877729109226131570f, + 0.877361342129065140f, 0.876993058902925890f, 0.876624259764365310f, + 0.876254944930338510f, + 0.875885114618103810f, 0.875514769045222850f, 0.875143908429560360f, + 0.874772532989284150f, + 0.874400642942864790f, 0.874028238509075740f, 0.873655319906992630f, + 0.873281887355994210f, + 0.872907941075761080f, 0.872533481286276170f, 0.872158508207824480f, + 0.871783022060993120f, + 0.871407023066670950f, 0.871030511446048260f, 0.870653487420617430f, + 0.870275951212171940f, + 0.869897903042806340f, 0.869519343134916860f, 0.869140271711200560f, + 0.868760688994655310f, + 0.868380595208579800f, 0.867999990576573510f, 0.867618875322536230f, + 0.867237249670668400f, + 0.866855113845470430f, 0.866472468071743050f, 0.866089312574586770f, + 0.865705647579402380f, + 0.865321473311889800f, 0.864936789998049020f, 0.864551597864179340f, + 0.864165897136879300f, + 0.863779688043046720f, 0.863392970809878420f, 0.863005745664870320f, + 0.862618012835816740f, + 0.862229772550811240f, 0.861841025038245330f, 0.861451770526809320f, + 0.861062009245491480f, + 0.860671741423578380f, 0.860280967290654510f, 0.859889687076602290f, + 0.859497901011601730f, + 0.859105609326130450f, 0.858712812250963520f, 0.858319510017173440f, + 0.857925702856129790f, + 0.857531390999499150f, 0.857136574679244980f, 0.856741254127627470f, + 0.856345429577203610f, + 0.855949101260826910f, 0.855552269411646860f, 0.855154934263109620f, + 0.854757096048957220f, + 0.854358755003227440f, 0.853959911360254180f, 0.853560565354666840f, + 0.853160717221390420f, + 0.852760367195645300f, 0.852359515512947090f, 0.851958162409106380f, + 0.851556308120228980f, + 0.851153952882715340f, 0.850751096933260790f, 0.850347740508854980f, + 0.849943883846782210f, + 0.849539527184620890f, 0.849134670760243630f, 0.848729314811817130f, + 0.848323459577801640f, + 0.847917105296951410f, 0.847510252208314330f, 0.847102900551231500f, + 0.846695050565337450f, + 0.846286702490559710f, 0.845877856567119000f, 0.845468513035528830f, + 0.845058672136595470f, + 0.844648334111417820f, 0.844237499201387020f, 0.843826167648186740f, + 0.843414339693792760f, + 0.843002015580472940f, 0.842589195550786710f, 0.842175879847585570f, + 0.841762068714012490f, + 0.841347762393501950f, 0.840932961129779780f, 0.840517665166862550f, + 0.840101874749058400f, + 0.839685590120966110f, 0.839268811527475230f, 0.838851539213765760f, + 0.838433773425308340f, + 0.838015514407863820f, 0.837596762407483040f, 0.837177517670507300f, + 0.836757780443567190f, + 0.836337550973583530f, 0.835916829507766360f, 0.835495616293615350f, + 0.835073911578919410f, + 0.834651715611756440f, 0.834229028640493420f, 0.833805850913786340f, + 0.833382182680579730f, + 0.832958024190106670f, 0.832533375691888680f, 0.832108237435735590f, + 0.831682609671745120f, + 0.831256492650303210f, 0.830829886622083570f, 0.830402791838047550f, + 0.829975208549443950f, + 0.829547137007808910f, 0.829118577464965980f, 0.828689530173025820f, + 0.828259995384385660f, + 0.827829973351729920f, 0.827399464328029470f, 0.826968468566541600f, + 0.826536986320809960f, + 0.826105017844664610f, 0.825672563392221390f, 0.825239623217882250f, + 0.824806197576334330f, + 0.824372286722551250f, 0.823937890911791370f, 0.823503010399598500f, + 0.823067645441801670f, + 0.822631796294514990f, 0.822195463214137170f, 0.821758646457351750f, + 0.821321346281126740f, + 0.820883562942714580f, 0.820445296699652050f, 0.820006547809759680f, + 0.819567316531142230f, + 0.819127603122188240f, 0.818687407841569680f, 0.818246730948242070f, + 0.817805572701444270f, + 0.817363933360698460f, 0.816921813185809480f, 0.816479212436865390f, + 0.816036131374236810f, + 0.815592570258576790f, 0.815148529350820830f, 0.814704008912187080f, + 0.814259009204175270f, + 0.813813530488567190f, 0.813367573027426570f, 0.812921137083098770f, + 0.812474222918210480f, + 0.812026830795669730f, 0.811578960978665890f, 0.811130613730669190f, + 0.810681789315430780f, + 0.810232487996982330f, 0.809782710039636530f, 0.809332455707985950f, + 0.808881725266903610f, + 0.808430518981542720f, 0.807978837117336310f, 0.807526679939997160f, + 0.807074047715517610f, + 0.806620940710169650f, 0.806167359190504420f, 0.805713303423352230f, + 0.805258773675822210f, + 0.804803770215302920f, 0.804348293309460780f, 0.803892343226241260f, + 0.803435920233868120f, + 0.802979024600843250f, 0.802521656595946430f, 0.802063816488235440f, + 0.801605504547046150f, + 0.801146721041991360f, 0.800687466242961610f, 0.800227740420124790f, + 0.799767543843925680f, + 0.799306876785086160f, 0.798845739514604580f, 0.798384132303756380f, + 0.797922055424093000f, + 0.797459509147442460f, 0.796996493745908750f, 0.796533009491872000f, + 0.796069056657987990f, + 0.795604635517188070f, 0.795139746342679590f, 0.794674389407944550f, + 0.794208564986740640f, + 0.793742273353100210f, 0.793275514781330630f, 0.792808289546014120f, + 0.792340597922007170f, + 0.791872440184440470f, 0.791403816608719500f, 0.790934727470523290f, + 0.790465173045804880f, + 0.789995153610791090f, 0.789524669441982190f, 0.789053720816151880f, + 0.788582308010347120f, + 0.788110431301888070f, 0.787638090968367450f, 0.787165287287651010f, + 0.786692020537876790f, + 0.786218290997455660f, 0.785744098945070360f, 0.785269444659675850f, + 0.784794328420499230f, + 0.784318750507038920f, 0.783842711199065230f, 0.783366210776619720f, + 0.782889249520015480f, + 0.782411827709836530f, 0.781933945626937630f, 0.781455603552444590f, + 0.780976801767753750f, + 0.780497540554531910f, 0.780017820194715990f, 0.779537640970513260f, + 0.779057003164400630f, + 0.778575907059125050f, 0.778094352937702790f, 0.777612341083420030f, + 0.777129871779831620f, + 0.776646945310762060f, 0.776163561960304340f, 0.775679722012820650f, + 0.775195425752941420f, + 0.774710673465565550f, 0.774225465435860680f, 0.773739801949261840f, + 0.773253683291472590f, + 0.772767109748463850f, 0.772280081606474320f, 0.771792599152010150f, + 0.771304662671844830f, + 0.770816272453018540f, 0.770327428782838890f, 0.769838131948879840f, + 0.769348382238982280f, + 0.768858179941253270f, 0.768367525344066270f, 0.767876418736060610f, + 0.767384860406141730f, + 0.766892850643480670f, 0.766400389737514230f, 0.765907477977944340f, + 0.765414115654738270f, + 0.764920303058128410f, 0.764426040478612070f, 0.763931328206951090f, + 0.763436166534172010f, + 0.762940555751565720f, 0.762444496150687210f, 0.761947988023355390f, + 0.761451031661653620f, + 0.760953627357928150f, 0.760455775404789260f, 0.759957476095110330f, + 0.759458729722028210f, + 0.758959536578942440f, 0.758459896959515430f, 0.757959811157672300f, + 0.757459279467600720f, + 0.756958302183750490f, 0.756456879600833740f, 0.755955012013824420f, + 0.755452699717958250f, + 0.754949943008732640f, 0.754446742181906440f, 0.753943097533499640f, + 0.753439009359793580f, + 0.752934477957330150f, 0.752429503622912390f, 0.751924086653603550f, + 0.751418227346727470f, + 0.750911925999867890f, 0.750405182910869330f, 0.749897998377835330f, + 0.749390372699129560f, + 0.748882306173375150f, 0.748373799099454560f, 0.747864851776509410f, + 0.747355464503940190f, + 0.746845637581406540f, 0.746335371308826320f, 0.745824665986376090f, + 0.745313521914490520f, + 0.744801939393862630f, 0.744289918725443260f, 0.743777460210440890f, + 0.743264564150321600f, + 0.742751230846809050f, 0.742237460601884000f, 0.741723253717784140f, + 0.741208610497004260f, + 0.740693531242295760f, 0.740178016256666240f, 0.739662065843380010f, + 0.739145680305957510f, + 0.738628859948174840f, 0.738111605074064260f, 0.737593915987913570f, + 0.737075792994265730f, + 0.736557236397919150f, 0.736038246503927350f, 0.735518823617598900f, + 0.734998968044496710f, + 0.734478680090438370f, 0.733957960061495940f, 0.733436808263995710f, + 0.732915225004517780f, + 0.732393210589896040f, 0.731870765327218290f, 0.731347889523825570f, + 0.730824583487312160f, + 0.730300847525525490f, 0.729776681946566090f, 0.729252087058786970f, + 0.728727063170793830f, + 0.728201610591444610f, 0.727675729629849610f, 0.727149420595371020f, + 0.726622683797622850f, + 0.726095519546471000f, 0.725567928152032300f, 0.725039909924675370f, + 0.724511465175019630f, + 0.723982594213935520f, 0.723453297352544380f, 0.722923574902217700f, + 0.722393427174577550f, + 0.721862854481496340f, 0.721331857135096290f, 0.720800435447749190f, + 0.720268589732077190f, + 0.719736320300951030f, 0.719203627467491220f, 0.718670511545067230f, + 0.718136972847297490f, + 0.717603011688049080f, 0.717068628381437480f, 0.716533823241826680f, + 0.715998596583828690f, + 0.715462948722303760f, 0.714926879972359490f, 0.714390390649351390f, + 0.713853481068882470f, + 0.713316151546802610f, 0.712778402399208980f, 0.712240233942445510f, + 0.711701646493102970f, + 0.711162640368018350f, 0.710623215884275020f, 0.710083373359202800f, + 0.709543113110376770f, + 0.709002435455618250f, 0.708461340712994160f, 0.707919829200816310f, + 0.707377901237642100f, + 0.706835557142273860f, 0.706292797233758480f, 0.705749621831387790f, + 0.705206031254697830f, + 0.704662025823468930f, 0.704117605857725430f, 0.703572771677735580f, + 0.703027523604011220f, + 0.702481861957308000f, 0.701935787058624360f, 0.701389299229202230f, + 0.700842398790526230f, + 0.700295086064323780f, 0.699747361372564990f, 0.699199225037462120f, + 0.698650677381469580f, + 0.698101718727283880f, 0.697552349397843270f, 0.697002569716327460f, + 0.696452380006157830f, + 0.695901780590996830f, 0.695350771794747800f, 0.694799353941554900f, + 0.694247527355803310f, + 0.693695292362118350f, 0.693142649285365510f, 0.692589598450650380f, + 0.692036140183318830f, + 0.691482274808955850f, 0.690928002653386280f, 0.690373324042674040f, + 0.689818239303122470f, + 0.689262748761273470f, 0.688706852743907750f, 0.688150551578044830f, + 0.687593845590942170f, + 0.687036735110095660f, 0.686479220463238950f, 0.685921301978343670f, + 0.685362979983618730f, + 0.684804254807510620f, 0.684245126778703080f, 0.683685596226116690f, + 0.683125663478908800f, + 0.682565328866473250f, 0.682004592718440830f, 0.681443455364677990f, + 0.680881917135287340f, + 0.680319978360607200f, 0.679757639371212030f, 0.679194900497911200f, + 0.678631762071749470f, + 0.678068224424006600f, 0.677504287886197430f, 0.676939952790071240f, + 0.676375219467611700f, + 0.675810088251037060f, 0.675244559472799270f, 0.674678633465584540f, + 0.674112310562312360f, + 0.673545591096136100f, 0.672978475400442090f, 0.672410963808849900f, + 0.671843056655211930f, + 0.671274754273613490f, 0.670706056998372160f, 0.670136965164037760f, + 0.669567479105392490f, + 0.668997599157450270f, 0.668427325655456820f, 0.667856658934889440f, + 0.667285599331456480f, + 0.666714147181097670f, 0.666142302819983540f, 0.665570066584515560f, + 0.664997438811325340f, + 0.664424419837275180f, 0.663851009999457340f, 0.663277209635194100f, + 0.662703019082037440f, + 0.662128438677768720f, 0.661553468760399000f, 0.660978109668168060f, + 0.660402361739545030f, + 0.659826225313227430f, 0.659249700728141490f, 0.658672788323441890f, + 0.658095488438511290f, + 0.657517801412960120f, 0.656939727586627110f, 0.656361267299578000f, + 0.655782420892106030f, + 0.655203188704731930f, 0.654623571078202680f, 0.654043568353492640f, + 0.653463180871802330f, + 0.652882408974558960f, 0.652301253003415460f, 0.651719713300251020f, + 0.651137790207170330f, + 0.650555484066503990f, 0.649972795220807530f, 0.649389724012861770f, + 0.648806270785672550f, + 0.648222435882470420f, 0.647638219646710420f, 0.647053622422071650f, + 0.646468644552457890f, + 0.645883286381996440f, 0.645297548255038380f, 0.644711430516158420f, + 0.644124933510154540f, + 0.643538057582047850f, 0.642950803077082080f, 0.642363170340724320f, + 0.641775159718663500f, + 0.641186771556811250f, 0.640598006201301030f, 0.640008863998488440f, + 0.639419345294950700f, + 0.638829450437486400f, 0.638239179773115390f, 0.637648533649078810f, + 0.637057512412838590f, + 0.636466116412077180f, 0.635874345994697720f, 0.635282201508823530f, + 0.634689683302797850f, + 0.634096791725183740f, 0.633503527124764320f, 0.632909889850541860f, + 0.632315880251737680f, + 0.631721498677792370f, 0.631126745478365340f, 0.630531621003334600f, + 0.629936125602796550f, + 0.629340259627065750f, 0.628744023426674790f, 0.628147417352374120f, + 0.627550441755131530f, + 0.626953096986132770f, 0.626355383396779990f, 0.625757301338692900f, + 0.625158851163707730f, + 0.624560033223877320f, 0.623960847871470770f, 0.623361295458973340f, + 0.622761376339086460f, + 0.622161090864726930f, 0.621560439389027270f, 0.620959422265335180f, + 0.620358039847213830f, + 0.619756292488440660f, 0.619154180543008410f, 0.618551704365123860f, + 0.617948864309208260f, + 0.617345660729896940f, 0.616742093982038830f, 0.616138164420696910f, + 0.615533872401147430f, + 0.614929218278879590f, 0.614324202409595950f, 0.613718825149211830f, + 0.613113086853854910f, + 0.612506987879865570f, 0.611900528583796070f, 0.611293709322411010f, + 0.610686530452686280f, + 0.610078992331809620f, 0.609471095317180240f, 0.608862839766408200f, + 0.608254226037314490f, + 0.607645254487930830f, 0.607035925476499760f, 0.606426239361473550f, + 0.605816196501515080f, + 0.605205797255496500f, 0.604595041982500360f, 0.603983931041818020f, + 0.603372464792950370f, + 0.602760643595607220f, 0.602148467809707320f, 0.601535937795377730f, + 0.600923053912954090f, + 0.600309816522980430f, 0.599696225986208310f, 0.599082282663597310f, + 0.598467986916314310f, + 0.597853339105733910f, 0.597238339593437530f, 0.596622988741213330f, + 0.596007286911056530f, + 0.595391234465168730f, 0.594774831765957580f, 0.594158079176036800f, + 0.593540977058226390f, + 0.592923525775551410f, 0.592305725691242400f, 0.591687577168735550f, + 0.591069080571671510f, + 0.590450236263895920f, 0.589831044609458900f, 0.589211505972615070f, + 0.588591620717822890f, + 0.587971389209745120f, 0.587350811813247660f, 0.586729888893400500f, + 0.586108620815476430f, + 0.585487007944951450f, 0.584865050647504490f, 0.584242749289016980f, + 0.583620104235572760f, + 0.582997115853457700f, 0.582373784509160220f, 0.581750110569369760f, + 0.581126094400977620f, + 0.580501736371076600f, 0.579877036846960350f, 0.579251996196123550f, + 0.578626614786261430f, + 0.578000892985269910f, 0.577374831161244880f, 0.576748429682482520f, + 0.576121688917478390f, + 0.575494609234928230f, 0.574867191003726740f, 0.574239434592967890f, + 0.573611340371944610f, + 0.572982908710148680f, 0.572354139977270030f, 0.571725034543197120f, + 0.571095592778016690f, + 0.570465815052012990f, 0.569835701735668110f, 0.569205253199661200f, + 0.568574469814869250f, + 0.567943351952365670f, 0.567311899983420800f, 0.566680114279501710f, + 0.566047995212271560f, + 0.565415543153589770f, 0.564782758475511400f, 0.564149641550287680f, + 0.563516192750364910f, + 0.562882412448384550f, 0.562248301017183150f, 0.561613858829792420f, + 0.560979086259438260f, + 0.560343983679540860f, 0.559708551463714790f, 0.559072789985768480f, + 0.558436699619704100f, + 0.557800280739717100f, 0.557163533720196340f, 0.556526458935723720f, + 0.555889056761073920f, + 0.555251327571214090f, 0.554613271741304040f, 0.553974889646695610f, + 0.553336181662932410f, + 0.552697148165749770f, 0.552057789531074980f, 0.551418106135026060f, + 0.550778098353912230f, + 0.550137766564233630f, 0.549497111142680960f, 0.548856132466135290f, + 0.548214830911667780f, + 0.547573206856539870f, 0.546931260678202190f, 0.546288992754295210f, + 0.545646403462648590f, + 0.545003493181281160f, 0.544360262288400400f, 0.543716711162402390f, + 0.543072840181871850f, + 0.542428649725581360f, 0.541784140172491660f, 0.541139311901750910f, + 0.540494165292695230f, + 0.539848700724847700f, 0.539202918577918240f, 0.538556819231804210f, + 0.537910403066588990f, + 0.537263670462542530f, 0.536616621800121150f, 0.535969257459966710f, + 0.535321577822907010f, + 0.534673583269955510f, 0.534025274182310380f, 0.533376650941355560f, + 0.532727713928658810f, + 0.532078463525973540f, 0.531428900115236910f, 0.530779024078570250f, + 0.530128835798278850f, + 0.529478335656852090f, 0.528827524036961980f, 0.528176401321464370f, + 0.527524967893398200f, + 0.526873224135984700f, 0.526221170432628170f, 0.525568807166914680f, + 0.524916134722612890f, + 0.524263153483673470f, 0.523609863834228030f, 0.522956266158590140f, + 0.522302360841254700f, + 0.521648148266897090f, 0.520993628820373810f, 0.520338802886721960f, + 0.519683670851158520f, + 0.519028233099080970f, 0.518372490016066220f, 0.517716441987871150f, + 0.517060089400432130f, + 0.516403432639863990f, 0.515746472092461380f, 0.515089208144697270f, + 0.514431641183222930f, + 0.513773771594868030f, 0.513115599766640560f, 0.512457126085725800f, + 0.511798350939487000f, + 0.511139274715464390f, 0.510479897801375700f, 0.509820220585115560f, + 0.509160243454754750f, + 0.508499966798540810f, 0.507839391004897940f, 0.507178516462425290f, + 0.506517343559898530f, + 0.505855872686268860f, 0.505194104230662240f, 0.504532038582380380f, + 0.503869676130898950f, + 0.503207017265869030f, 0.502544062377115800f, 0.501880811854638400f, + 0.501217266088609950f, + 0.500553425469377640f, 0.499889290387461380f, 0.499224861233555030f, + 0.498560138398525200f, + 0.497895122273410930f, 0.497229813249424340f, 0.496564211717949340f, + 0.495898318070542240f, + 0.495232132698931350f, 0.494565655995016010f, 0.493898888350867430f, + 0.493231830158728070f, + 0.492564481811010650f, 0.491896843700299240f, 0.491228916219348330f, + 0.490560699761082080f, + 0.489892194718595300f, 0.489223401485152030f, 0.488554320454186230f, + 0.487884952019301210f, + 0.487215296574268820f, 0.486545354513030270f, 0.485875126229695420f, + 0.485204612118541880f, + 0.484533812574016120f, 0.483862727990732320f, 0.483191358763471910f, + 0.482519705287184520f, + 0.481847767956986080f, 0.481175547168160360f, 0.480503043316157670f, + 0.479830256796594250f, + 0.479157188005253310f, 0.478483837338084080f, 0.477810205191201040f, + 0.477136291960884750f, + 0.476462098043581310f, 0.475787623835901120f, 0.475112869734620470f, + 0.474437836136679340f, + 0.473762523439182850f, 0.473086932039400220f, 0.472411062334764100f, + 0.471734914722871430f, + 0.471058489601482610f, 0.470381787368520710f, 0.469704808422072460f, + 0.469027553160387240f, + 0.468350021981876530f, 0.467672215285114710f, 0.466994133468838110f, + 0.466315776931944480f, + 0.465637146073493770f, 0.464958241292706740f, 0.464279062988965760f, + 0.463599611561814120f, + 0.462919887410955130f, 0.462239890936253280f, 0.461559622537733190f, + 0.460879082615578690f, + 0.460198271570134270f, 0.459517189801903590f, 0.458835837711549120f, + 0.458154215699893230f, + 0.457472324167916110f, 0.456790163516757220f, 0.456107734147714220f, + 0.455425036462242420f, + 0.454742070861955450f, 0.454058837748624540f, 0.453375337524177750f, + 0.452691570590700860f, + 0.452007537350436530f, 0.451323238205783520f, 0.450638673559297760f, + 0.449953843813690580f, + 0.449268749371829920f, 0.448583390636739300f, 0.447897768011597360f, + 0.447211881899738260f, + 0.446525732704651400f, 0.445839320829980350f, 0.445152646679523590f, + 0.444465710657234110f, + 0.443778513167218280f, 0.443091054613736990f, 0.442403335401204130f, + 0.441715355934187310f, + 0.441027116617407340f, 0.440338617855737300f, 0.439649860054203420f, + 0.438960843617984430f, + 0.438271568952410480f, 0.437582036462964340f, 0.436892246555280470f, + 0.436202199635143950f, + 0.435511896108492170f, 0.434821336381412350f, 0.434130520860143310f, + 0.433439449951074200f, + 0.432748124060743760f, 0.432056543595841450f, 0.431364708963206440f, + 0.430672620569826860f, + 0.429980278822840570f, 0.429287684129534720f, 0.428594836897344400f, + 0.427901737533854240f, + 0.427208386446796370f, 0.426514784044051520f, 0.425820930733648350f, + 0.425126826923762410f, + 0.424432473022717420f, 0.423737869438983950f, 0.423043016581179100f, + 0.422347914858067000f, + 0.421652564678558380f, 0.420956966451709440f, 0.420261120586723050f, + 0.419565027492946940f, + 0.418868687579875110f, 0.418172101257146430f, 0.417475268934544340f, + 0.416778191021997590f, + 0.416080867929579320f, 0.415383300067506290f, 0.414685487846140010f, + 0.413987431675985510f, + 0.413289131967690960f, 0.412590589132048380f, 0.411891803579992220f, + 0.411192775722600160f, + 0.410493505971092520f, 0.409793994736831200f, 0.409094242431320920f, + 0.408394249466208110f, + 0.407694016253280170f, 0.406993543204466460f, 0.406292830731837470f, + 0.405591879247603870f, + 0.404890689164117750f, 0.404189260893870750f, 0.403487594849495310f, + 0.402785691443763640f, + 0.402083551089587040f, 0.401381174200016790f, 0.400678561188243350f, + 0.399975712467595390f, + 0.399272628451540930f, 0.398569309553686360f, 0.397865756187775750f, + 0.397161968767691720f, + 0.396457947707453960f, 0.395753693421220080f, 0.395049206323284880f, + 0.394344486828079650f, + 0.393639535350172880f, 0.392934352304269600f, 0.392228938105210370f, + 0.391523293167972350f, + 0.390817417907668610f, 0.390111312739546910f, 0.389404978078991100f, + 0.388698414341519250f, + 0.387991621942784910f, 0.387284601298575890f, 0.386577352824813980f, + 0.385869876937555310f, + 0.385162174052989970f, 0.384454244587440870f, 0.383746088957365010f, + 0.383037707579352130f, + 0.382329100870124510f, 0.381620269246537520f, 0.380911213125578130f, + 0.380201932924366050f, + 0.379492429060152740f, 0.378782701950320600f, 0.378072752012383990f, + 0.377362579663988450f, + 0.376652185322909620f, 0.375941569407054420f, 0.375230732334460030f, + 0.374519674523293210f, + 0.373808396391851370f, 0.373096898358560690f, 0.372385180841977360f, + 0.371673244260786630f, + 0.370961089033802040f, 0.370248715579966360f, 0.369536124318350760f, + 0.368823315668153960f, + 0.368110290048703050f, 0.367397047879452820f, 0.366683589579984930f, + 0.365969915570008910f, + 0.365256026269360380f, 0.364541922098002180f, 0.363827603476023610f, + 0.363113070823639530f, + 0.362398324561191310f, 0.361683365109145950f, 0.360968192888095290f, + 0.360252808318756830f, + 0.359537211821973180f, 0.358821403818710860f, 0.358105384730061760f, + 0.357389154977241000f, + 0.356672714981588260f, 0.355956065164567010f, 0.355239205947763370f, + 0.354522137752887430f, + 0.353804861001772160f, 0.353087376116372530f, 0.352369683518766630f, + 0.351651783631154680f, + 0.350933676875858360f, 0.350215363675321740f, 0.349496844452109600f, + 0.348778119628908420f, + 0.348059189628525780f, 0.347340054873889190f, 0.346620715788047320f, + 0.345901172794169100f, + 0.345181426315542610f, 0.344461476775576480f, 0.343741324597798600f, + 0.343020970205855540f, + 0.342300414023513690f, 0.341579656474657210f, 0.340858697983289440f, + 0.340137538973531880f, + 0.339416179869623410f, 0.338694621095921190f, 0.337972863076899830f, + 0.337250906237150650f, + 0.336528751001382350f, 0.335806397794420560f, 0.335083847041206580f, + 0.334361099166798900f, + 0.333638154596370920f, 0.332915013755212650f, 0.332191677068729320f, + 0.331468144962440920f, + 0.330744417861982890f, 0.330020496193105530f, 0.329296380381672800f, + 0.328572070853663690f, + 0.327847568035170960f, 0.327122872352400510f, 0.326397984231672660f, + 0.325672904099419900f, + 0.324947632382188430f, 0.324222169506637130f, 0.323496515899536760f, + 0.322770671987770710f, + 0.322044638198334620f, 0.321318414958334910f, 0.320592002694990330f, + 0.319865401835630610f, + 0.319138612807695900f, 0.318411636038737960f, 0.317684471956418020f, + 0.316957120988508150f, + 0.316229583562890490f, 0.315501860107556040f, 0.314773951050606070f, + 0.314045856820250820f, + 0.313317577844809070f, 0.312589114552708660f, 0.311860467372486130f, + 0.311131636732785270f, + 0.310402623062358880f, 0.309673426790066490f, 0.308944048344875710f, + 0.308214488155861220f, + 0.307484746652204160f, 0.306754824263192780f, 0.306024721418221900f, + 0.305294438546791720f, + 0.304563976078509050f, 0.303833334443086470f, 0.303102514070341060f, + 0.302371515390196130f, + 0.301640338832678880f, 0.300908984827921890f, 0.300177453806162120f, + 0.299445746197739950f, + 0.298713862433100390f, 0.297981802942791920f, 0.297249568157465890f, + 0.296517158507877410f, + 0.295784574424884370f, 0.295051816339446720f, 0.294318884682627570f, + 0.293585779885591310f, + 0.292852502379604810f, 0.292119052596036540f, 0.291385430966355720f, + 0.290651637922133220f, + 0.289917673895040860f, 0.289183539316850310f, 0.288449234619434170f, + 0.287714760234765280f, + 0.286980116594915570f, 0.286245304132057120f, 0.285510323278461380f, + 0.284775174466498300f, + 0.284039858128637360f, 0.283304374697445790f, 0.282568724605589740f, + 0.281832908285833460f, + 0.281096926171038320f, 0.280360778694163810f, 0.279624466288266700f, + 0.278887989386500280f, + 0.278151348422115090f, 0.277414543828458200f, 0.276677576038972420f, + 0.275940445487197320f, + 0.275203152606767370f, 0.274465697831413220f, 0.273728081594960650f, + 0.272990304331329980f, + 0.272252366474536660f, 0.271514268458690810f, 0.270776010717996010f, + 0.270037593686750510f, + 0.269299017799346230f, 0.268560283490267890f, 0.267821391194094320f, + 0.267082341345496350f, + 0.266343134379238180f, 0.265603770730176440f, 0.264864250833259320f, + 0.264124575123527490f, + 0.263384744036113390f, 0.262644758006240100f, 0.261904617469222560f, + 0.261164322860466590f, + 0.260423874615468010f, 0.259683273169813930f, 0.258942518959180580f, + 0.258201612419334870f, + 0.257460553986133210f, 0.256719344095520720f, 0.255977983183532380f, + 0.255236471686291820f, + 0.254494810040010790f, 0.253752998680989940f, 0.253011038045617980f, + 0.252268928570370810f, + 0.251526670691812780f, 0.250784264846594550f, 0.250041711471454650f, + 0.249299011003218300f, + 0.248556163878796620f, 0.247813170535187620f, 0.247070031409475370f, + 0.246326746938829060f, + 0.245583317560504000f, 0.244839743711840750f, 0.244096025830264210f, + 0.243352164353284880f, + 0.242608159718496890f, 0.241864012363579210f, 0.241119722726294730f, + 0.240375291244489500f, + 0.239630718356093560f, 0.238886004499120170f, 0.238141150111664870f, + 0.237396155631906550f, + 0.236651021498106460f, 0.235905748148607370f, 0.235160336021834860f, + 0.234414785556295250f, + 0.233669097190576820f, 0.232923271363349120f, 0.232177308513361770f, + 0.231431209079445730f, + 0.230684973500512310f, 0.229938602215552260f, 0.229192095663636740f, + 0.228445454283916550f, + 0.227698678515621170f, 0.226951768798059980f, 0.226204725570620270f, + 0.225457549272768540f, + 0.224710240344049570f, 0.223962799224085520f, 0.223215226352576960f, + 0.222467522169301990f, + 0.221719687114115240f, 0.220971721626949060f, 0.220223626147812460f, + 0.219475401116790340f, + 0.218727046974044600f, 0.217978564159812290f, 0.217229953114406790f, + 0.216481214278216900f, + 0.215732348091705940f, 0.214983354995412820f, 0.214234235429951100f, + 0.213484989836008080f, + 0.212735618654345870f, 0.211986122325800410f, 0.211236501291280710f, + 0.210486755991769890f, + 0.209736886868323370f, 0.208986894362070070f, 0.208236778914211470f, + 0.207486540966020700f, + 0.206736180958843660f, 0.205985699334098050f, 0.205235096533272380f, + 0.204484372997927180f, + 0.203733529169694010f, 0.202982565490274460f, 0.202231482401441620f, + 0.201480280345037820f, + 0.200728959762976140f, 0.199977521097239290f, 0.199225964789878890f, + 0.198474291283016360f, + 0.197722501018842030f, 0.196970594439614370f, 0.196218571987660850f, + 0.195466434105377090f, + 0.194714181235225990f, 0.193961813819739010f, 0.193209332301514080f, + 0.192456737123216840f, + 0.191704028727579940f, 0.190951207557401860f, 0.190198274055548120f, + 0.189445228664950340f, + 0.188692071828605260f, 0.187938803989575850f, 0.187185425590990440f, + 0.186431937076041640f, + 0.185678338887987790f, 0.184924631470150870f, 0.184170815265917720f, + 0.183416890718739230f, + 0.182662858272129360f, 0.181908718369666160f, 0.181154471454990920f, + 0.180400117971807270f, + 0.179645658363882100f, 0.178891093075044830f, 0.178136422549186320f, + 0.177381647230260200f, + 0.176626767562280960f, 0.175871783989325040f, 0.175116696955530060f, + 0.174361506905093830f, + 0.173606214282275410f, 0.172850819531394200f, 0.172095323096829040f, + 0.171339725423019260f, + 0.170584026954463700f, 0.169828228135719880f, 0.169072329411405180f, + 0.168316331226194910f, + 0.167560234024823590f, 0.166804038252083870f, 0.166047744352825850f, + 0.165291352771957970f, + 0.164534863954446110f, 0.163778278345312690f, 0.163021596389637810f, + 0.162264818532558110f, + 0.161507945219266150f, 0.160750976895011390f, 0.159993914005098350f, + 0.159236756994887850f, + 0.158479506309796100f, 0.157722162395293690f, 0.156964725696906750f, + 0.156207196660216040f, + 0.155449575730855880f, 0.154691863354515400f, 0.153934059976937460f, + 0.153176166043917870f, + 0.152418182001306500f, 0.151660108295005400f, 0.150901945370970040f, + 0.150143693675208330f, + 0.149385353653779810f, 0.148626925752796540f, 0.147868410418422360f, + 0.147109808096871850f, + 0.146351119234411440f, 0.145592344277358450f, 0.144833483672080240f, + 0.144074537864995330f, + 0.143315507302571590f, 0.142556392431327340f, 0.141797193697830530f, + 0.141037911548697770f, + 0.140278546430595420f, 0.139519098790238600f, 0.138759569074390380f, + 0.137999957729862760f, + 0.137240265203515700f, 0.136480491942256310f, 0.135720638393040080f, + 0.134960705002868830f, + 0.134200692218792020f, 0.133440600487905820f, 0.132680430257352130f, + 0.131920181974319760f, + 0.131159856086043410f, 0.130399453039802740f, 0.129638973282923540f, + 0.128878417262776660f, + 0.128117785426777150f, 0.127357078222385570f, 0.126596296097105960f, + 0.125835439498487020f, + 0.125074508874121300f, 0.124313504671644300f, 0.123552427338735370f, + 0.122791277323116900f, + 0.122030055072553410f, 0.121268761034852550f, 0.120507395657864240f, + 0.119745959389479630f, + 0.118984452677632520f, 0.118222875970297250f, 0.117461229715489990f, + 0.116699514361267840f, + 0.115937730355727850f, 0.115175878147008180f, 0.114413958183287050f, + 0.113651970912781920f, + 0.112889916783750470f, 0.112127796244489750f, 0.111365609743335190f, + 0.110603357728661910f, + 0.109841040648882680f, 0.109078658952449240f, 0.108316213087851300f, + 0.107553703503615710f, + 0.106791130648307380f, 0.106028494970528530f, 0.105265796918917650f, + 0.104503036942150550f, + 0.103740215488939480f, 0.102977333008032250f, 0.102214389948213370f, + 0.101451386758302160f, + 0.100688323887153970f, 0.099925201783659226f, 0.099162020896742573f, + 0.098398781675363881f, + 0.097635484568517339f, 0.096872130025230527f, 0.096108718494565468f, + 0.095345250425617742f, + 0.094581726267515473f, 0.093818146469420494f, 0.093054511480527333f, + 0.092290821750062355f, + 0.091527077727284981f, 0.090763279861485704f, 0.089999428601987341f, + 0.089235524398144139f, + 0.088471567699340822f, 0.087707558954993645f, 0.086943498614549489f, + 0.086179387127484922f, + 0.085415224943307277f, 0.084651012511553700f, 0.083886750281790226f, + 0.083122438703613077f, + 0.082358078226646619f, 0.081593669300544638f, 0.080829212374989468f, + 0.080064707899690932f, + 0.079300156324387569f, 0.078535558098845590f, 0.077770913672857989f, + 0.077006223496245585f, + 0.076241488018856149f, 0.075476707690563416f, 0.074711882961268378f, + 0.073947014280897269f, + 0.073182102099402888f, 0.072417146866763538f, 0.071652149032982254f, + 0.070887109048087787f, + 0.070122027362133646f, 0.069356904425197236f, 0.068591740687380900f, + 0.067826536598810966f, + 0.067061292609636836f, 0.066296009170032283f, 0.065530686730193397f, + 0.064765325740339871f, + 0.063999926650714078f, 0.063234489911580136f, 0.062469015973224969f, + 0.061703505285957416f, + 0.060937958300107238f, 0.060172375466026218f, 0.059406757234087247f, + 0.058641104054683348f, + 0.057875416378229017f, 0.057109694655158132f, 0.056343939335925283f, + 0.055578150871004817f, + 0.054812329710889909f, 0.054046476306093640f, 0.053280591107148056f, + 0.052514674564603257f, + 0.051748727129028414f, 0.050982749251010900f, 0.050216741381155325f, + 0.049450703970084824f, + 0.048684637468439020f, 0.047918542326875327f, 0.047152418996068000f, + 0.046386267926707213f, + 0.045620089569500123f, 0.044853884375169933f, 0.044087652794454979f, + 0.043321395278109784f, + 0.042555112276904117f, 0.041788804241622082f, 0.041022471623063397f, + 0.040256114872041358f, + 0.039489734439384118f, 0.038723330775933762f, 0.037956904332545366f, + 0.037190455560088091f, + 0.036423984909444228f, 0.035657492831508264f, 0.034890979777187955f, + 0.034124446197403423f, + 0.033357892543086159f, 0.032591319265180385f, 0.031824726814640963f, + 0.031058115642434700f, + 0.030291486199539423f, 0.029524838936943035f, 0.028758174305644590f, + 0.027991492756653365f, + 0.027224794740987910f, 0.026458080709677145f, 0.025691351113759395f, + 0.024924606404281485f, + 0.024157847032300020f, 0.023391073448879338f, 0.022624286105092803f, + 0.021857485452021874f, + 0.021090671940755180f, 0.020323846022389572f, 0.019557008148029204f, + 0.018790158768784596f, + 0.018023298335773701f, 0.017256427300120978f, 0.016489546112956454f, + 0.015722655225417017f, + 0.014955755088644378f, 0.014188846153786343f, 0.013421928871995907f, + 0.012655003694430301f, + 0.011888071072252072f, 0.011121131456628141f, 0.010354185298728884f, + 0.009587233049729183f, + 0.008820275160807512f, 0.008053312083144991f, 0.007286344267926684f, + 0.006519372166339549f, + 0.005752396229573737f, 0.004985416908821652f, 0.004218434655277024f, + 0.003451449920135975f, + 0.002684463154596083f, 0.001917474809855460f, 0.001150485337113809f, + 0.000383495187571497f +}; + +static const float32_t cos_factors_8192[8192] = { + 1.999999990808214700, 1.999999917273932200, 1.999999770205369800, + 1.999999549602533100, + 1.999999255465430200, 1.999998887794072000, 1.999998446588471700, + 1.999997931848645600, + 1.999997343574612800, 1.999996681766395000, 1.999995946424016200, + 1.999995137547503600, + 1.999994255136887000, 1.999993299192198700, 1.999992269713474200, + 1.999991166700750800, + 1.999989990154069600, 1.999988740073473500, 1.999987416459008600, + 1.999986019310723500, + 1.999984548628669600, 1.999983004412901000, 1.999981386663474400, + 1.999979695380449400, + 1.999977930563888100, 1.999976092213855400, 1.999974180330418700, + 1.999972194913648900, + 1.999970135963618400, 1.999968003480403000, 1.999965797464081200, + 1.999963517914734100, + 1.999961164832445800, 1.999958738217302300, 1.999956238069392900, + 1.999953664388809800, + 1.999951017175647600, 1.999948296430003500, 1.999945502151977600, + 1.999942634341672600, + 1.999939692999193900, 1.999936678124649700, 1.999933589718150700, + 1.999930427779810900, + 1.999927192309745900, 1.999923883308075200, 1.999920500774920300, + 1.999917044710405500, + 1.999913515114657900, 1.999909911987807200, 1.999906235329986100, + 1.999902485141329400, + 1.999898661421975400, 1.999894764172064600, 1.999890793391740000, + 1.999886749081147800, + 1.999882631240436700, 1.999878439869758200, 1.999874174969266300, + 1.999869836539117700, + 1.999865424579472000, 1.999860939090491600, 1.999856380072341000, + 1.999851747525188200, + 1.999847041449203300, 1.999842261844559700, 1.999837408711432600, + 1.999832482050000900, + 1.999827481860445300, 1.999822408142949900, 1.999817260897701400, + 1.999812040124888700, + 1.999806745824704000, 1.999801377997341800, 1.999795936642999600, + 1.999790421761877400, + 1.999784833354177900, 1.999779171420106700, 1.999773435959872000, + 1.999767626973684400, + 1.999761744461757700, 1.999755788424308200, 1.999749758861554900, + 1.999743655773719400, + 1.999737479161026100, 1.999731229023702200, 1.999724905361977200, + 1.999718508176084000, + 1.999712037466257600, 1.999705493232735800, 1.999698875475759600, + 1.999692184195571900, + 1.999685419392419000, 1.999678581066549400, 1.999671669218214600, + 1.999664683847668800, + 1.999657624955168700, 1.999650492540973900, 1.999643286605346800, + 1.999636007148552400, + 1.999628654170857900, 1.999621227672533800, 1.999613727653853500, + 1.999606154115092500, + 1.999598507056529000, 1.999590786478444600, 1.999582992381123000, + 1.999575124764850800, + 1.999567183629917100, 1.999559168976613900, 1.999551080805236100, + 1.999542919116081000, + 1.999534683909448600, 1.999526375185641800, 1.999517992944965800, + 1.999509537187729200, + 1.999501007914242600, 1.999492405124819700, 1.999483728819776900, + 1.999474978999432800, + 1.999466155664109600, 1.999457258814131500, 1.999448288449825500, + 1.999439244571521700, + 1.999430127179552500, 1.999420936274252800, 1.999411671855960900, + 1.999402333925017300, + 1.999392922481765500, 1.999383437526551300, 1.999373879059723500, + 1.999364247081633500, + 1.999354541592635500, 1.999344762593086500, 1.999334910083345700, + 1.999324984063775700, + 1.999314984534741100, 1.999304911496609700, 1.999294764949752100, + 1.999284544894541100, + 1.999274251331352400, 1.999263884260564600, 1.999253443682558900, + 1.999242929597719200, + 1.999232342006432000, 1.999221680909086400, 1.999210946306074500, + 1.999200138197791100, + 1.999189256584633600, 1.999178301467001900, 1.999167272845298900, + 1.999156170719930100, + 1.999144995091303600, 1.999133745959830600, 1.999122423325924200, + 1.999111027190001000, + 1.999099557552479900, 1.999088014413782800, 1.999076397774334000, + 1.999064707634560700, + 1.999052943994892300, 1.999041106855761900, 1.999029196217604100, + 1.999017212080857400, + 1.999005154445962200, 1.998993023313361700, 1.998980818683502100, + 1.998968540556831800, + 1.998956188933802800, 1.998943763814868800, 1.998931265200486900, + 1.998918693091116200, + 1.998906047487219600, 1.998893328389261400, 1.998880535797709700, + 1.998867669713034500, + 1.998854730135709400, 1.998841717066209400, 1.998828630505013400, + 1.998815470452602400, + 1.998802236909460500, 1.998788929876074100, 1.998775549352932400, + 1.998762095340527400, + 1.998748567839354000, 1.998734966849909000, 1.998721292372693100, + 1.998707544408208700, + 1.998693722956961500, 1.998679828019459300, 1.998665859596213500, + 1.998651817687737300, + 1.998637702294547000, 1.998623513417161700, 1.998609251056103100, + 1.998594915211895600, + 1.998580505885066100, 1.998566023076144600, 1.998551466785663400, + 1.998536837014157900, + 1.998522133762165900, 1.998507357030227900, 1.998492506818887200, + 1.998477583128690100, + 1.998462585960185000, 1.998447515313923400, 1.998432371190459500, + 1.998417153590349900, + 1.998401862514154200, 1.998386497962434800, 1.998371059935756300, + 1.998355548434686400, + 1.998339963459795400, 1.998324305011656600, 1.998308573090845200, + 1.998292767697940100, + 1.998276888833522300, 1.998260936498175400, 1.998244910692486000, + 1.998228811417043700, + 1.998212638672439900, 1.998196392459269400, 1.998180072778129600, + 1.998163679629620500, + 1.998147213014344900, 1.998130672932908000, 1.998114059385918400, + 1.998097372373986300, + 1.998080611897725700, 1.998063777957752600, 1.998046870554686100, + 1.998029889689147700, + 1.998012835361761900, 1.997995707573155600, 1.997978506323958600, + 1.997961231614803200, + 1.997943883446324800, 1.997926461819161000, 1.997908966733952500, + 1.997891398191342400, + 1.997873756191977000, 1.997856040736504500, 1.997838251825576400, + 1.997820389459846700, + 1.997802453639972300, 1.997784444366612600, 1.997766361640429800, + 1.997748205462088500, + 1.997729975832256600, 1.997711672751604200, 1.997693296220804000, + 1.997674846240532000, + 1.997656322811466500, 1.997637725934288300, 1.997619055609681600, + 1.997600311838332500, + 1.997581494620930300, 1.997562603958166600, 1.997543639850736200, + 1.997524602299336500, + 1.997505491304667000, 1.997486306867430900, 1.997467048988333000, + 1.997447717668082000, + 1.997428312907388200, 1.997408834706965000, 1.997389283067528800, + 1.997369657989798400, + 1.997349959474495200, 1.997330187522343700, 1.997310342134070800, + 1.997290423310406100, + 1.997270431052081900, 1.997250365359833200, 1.997230226234397900, + 1.997210013676516700, + 1.997189727686932400, 1.997169368266390900, 1.997148935415640600, + 1.997128429135433400, + 1.997107849426522600, 1.997087196289665000, 1.997066469725620200, + 1.997045669735150000, + 1.997024796319019300, 1.997003849477995600, 1.996982829212848900, + 1.996961735524351900, + 1.996940568413280600, 1.996919327880412900, 1.996898013926530000, + 1.996876626552415400, + 1.996855165758855600, 1.996833631546639300, 1.996812023916558800, + 1.996790342869408000, + 1.996768588405984300, 1.996746760527087700, 1.996724859233520500, + 1.996702884526087900, + 1.996680836405598100, 1.996658714872861800, 1.996636519928692000, + 1.996614251573904900, + 1.996591909809319400, 1.996569494635756600, 1.996547006054041100, + 1.996524444064999400, + 1.996501808669461000, 1.996479099868258400, 1.996456317662226300, + 1.996433462052202600, + 1.996410533039027400, 1.996387530623543900, 1.996364454806597500, + 1.996341305589037100, + 1.996318082971713500, 1.996294786955480800, 1.996271417541195300, + 1.996247974729716200, + 1.996224458521905600, 1.996200868918628100, 1.996177205920750800, + 1.996153469529144100, + 1.996129659744680300, 1.996105776568235100, 1.996081820000686500, + 1.996057790042915500, + 1.996033686695805300, 1.996009509960242400, 1.995985259837115500, + 1.995960936327316300, + 1.995936539431739000, 1.995912069151280800, 1.995887525486841300, + 1.995862908439323100, + 1.995838218009630800, 1.995813454198672700, 1.995788617007359100, + 1.995763706436603200, + 1.995738722487320600, 1.995713665160430600, 1.995688534456853800, + 1.995663330377514400, + 1.995638052923339300, 1.995612702095257400, 1.995587277894201400, + 1.995561780321105600, + 1.995536209376907600, 1.995510565062547800, 1.995484847378968600, + 1.995459056327116000, + 1.995433191907938000, 1.995407254122385700, 1.995381242971412600, + 1.995355158455975200, + 1.995329000577032800, 1.995302769335546500, 1.995276464732481200, + 1.995250086768804100, + 1.995223635445484900, 1.995197110763496000, 1.995170512723813100, + 1.995143841327413400, + 1.995117096575278200, 1.995090278468390600, 1.995063387007736600, + 1.995036422194304700, + 1.995009384029086800, 1.994982272513076600, 1.994955087647271000, + 1.994927829432669800, + 1.994900497870274900, 1.994873092961091200, 1.994845614706126400, + 1.994818063106391000, + 1.994790438162897600, 1.994762739876662100, 1.994734968248702800, + 1.994707123280041100, + 1.994679204971700100, 1.994651213324707000, 1.994623148340090700, + 1.994595010018883000, + 1.994566798362118300, 1.994538513370834200, 1.994510155046070700, + 1.994481723388870100, + 1.994453218400277900, 1.994424640081342100, 1.994395988433113700, + 1.994367263456646100, + 1.994338465152995000, 1.994309593523219600, 1.994280648568381500, + 1.994251630289544600, + 1.994222538687776100, 1.994193373764145500, 1.994164135519725000, + 1.994134823955589800, + 1.994105439072817700, 1.994075980872488800, 1.994046449355686200, + 1.994016844523496000, + 1.993987166377006600, 1.993957414917308700, 1.993927590145496900, + 1.993897692062667200, + 1.993867720669919400, 1.993837675968354700, 1.993807557959078600, + 1.993777366643197900, + 1.993747102021822900, 1.993716764096066200, 1.993686352867043200, + 1.993655868335872300, + 1.993625310503674100, 1.993594679371572200, 1.993563974940692800, + 1.993533197212164800, + 1.993502346187119700, 1.993471421866692200, 1.993440424252018900, + 1.993409353344239600, + 1.993378209144496700, 1.993346991653935300, 1.993315700873703200, + 1.993284336804950900, + 1.993252899448831400, 1.993221388806500900, 1.993189804879117500, + 1.993158147667842800, + 1.993126417173840500, 1.993094613398277400, 1.993062736342323000, + 1.993030786007148800, + 1.992998762393930000, 1.992966665503844000, 1.992934495338070800, + 1.992902251897793000, + 1.992869935184196300, 1.992837545198469000, 1.992805081941801700, + 1.992772545415388200, + 1.992739935620424700, 1.992707252558110200, 1.992674496229646500, + 1.992641666636237700, + 1.992608763779091000, 1.992575787659416100, 1.992542738278425300, + 1.992509615637334100, + 1.992476419737359900, 1.992443150579723500, 1.992409808165648100, + 1.992376392496359300, + 1.992342903573086000, 1.992309341397059600, 1.992275705969513800, + 1.992241997291685400, + 1.992208215364813700, 1.992174360190140900, 1.992140431768911500, + 1.992106430102373400, + 1.992072355191776300, 1.992038207038373300, 1.992003985643419700, + 1.991969691008174100, + 1.991935323133897000, 1.991900882021852200, 1.991866367673306200, + 1.991831780089527500, + 1.991797119271788300, 1.991762385221362600, 1.991727577939527600, + 1.991692697427563300, + 1.991657743686751700, 1.991622716718378400, 1.991587616523731000, + 1.991552443104099800, + 1.991517196460778500, 1.991481876595062800, 1.991446483508251500, + 1.991411017201645500, + 1.991375477676549100, 1.991339864934268800, 1.991304178976114100, + 1.991268419803397200, + 1.991232587417432600, 1.991196681819537900, 1.991160703011033200, + 1.991124650993241400, + 1.991088525767488200, 1.991052327335101300, 1.991016055697411900, + 1.990979710855753900, + 1.990943292811463000, 1.990906801565878600, 1.990870237120342400, + 1.990833599476198800, + 1.990796888634794400, 1.990760104597479400, 1.990723247365606200, + 1.990686316940529800, + 1.990649313323608100, 1.990612236516201300, 1.990575086519673200, + 1.990537863335389400, + 1.990500566964718400, 1.990463197409031700, 1.990425754669703100, + 1.990388238748109100, + 1.990350649645629600, 1.990312987363646000, 1.990275251903543600, + 1.990237443266709400, + 1.990199561454533600, 1.990161606468409300, 1.990123578309731700, + 1.990085476979899000, + 1.990047302480312300, 1.990009054812374800, 1.989970733977493000, + 1.989932339977075900, + 1.989893872812535000, 1.989855332485284800, 1.989816718996742200, + 1.989778032348326700, + 1.989739272541461100, 1.989700439577570400, 1.989661533458082100, + 1.989622554184426800, + 1.989583501758037700, 1.989544376180350600, 1.989505177452804100, + 1.989465905576839600, + 1.989426560553900500, 1.989387142385433900, 1.989347651072888900, + 1.989308086617717500, + 1.989268449021374300, 1.989228738285316900, 1.989188954411005100, + 1.989149097399901500, + 1.989109167253472000, 1.989069163973184300, 1.989029087560509700, + 1.988988938016921000, + 1.988948715343894900, 1.988908419542910100, 1.988868050615448100, + 1.988827608562993200, + 1.988787093387032600, 1.988746505089055600, 1.988705843670554500, + 1.988665109133024500, + 1.988624301477963200, 1.988583420706871100, 1.988542466821251000, + 1.988501439822608900, + 1.988460339712453200, 1.988419166492295000, 1.988377920163648000, + 1.988336600728029000, + 1.988295208186956700, 1.988253742541953800, 1.988212203794544000, + 1.988170591946255100, + 1.988128906998616800, 1.988087148953161700, 1.988045317811425700, + 1.988003413574946000, + 1.987961436245263800, 1.987919385823922400, 1.987877262312467600, + 1.987835065712448600, + 1.987792796025416500, 1.987750453252925500, 1.987708037396532800, + 1.987665548457797400, + 1.987622986438281700, 1.987580351339550700, 1.987537643163171700, + 1.987494861910715100, + 1.987452007583754100, 1.987409080183863800, 1.987366079712622900, + 1.987323006171612500, + 1.987279859562415900, 1.987236639886619700, 1.987193347145813000, + 1.987149981341587400, + 1.987106542475537400, 1.987063030549260300, 1.987019445564355700, + 1.986975787522426100, + 1.986932056425076800, 1.986888252273915500, 1.986844375070552900, + 1.986800424816602200, + 1.986756401513679400, 1.986712305163403000, 1.986668135767394300, + 1.986623893327277500, + 1.986579577844678900, 1.986535189321228000, 1.986490727758556800, + 1.986446193158300400, + 1.986401585522095600, 1.986356904851583000, 1.986312151148405200, + 1.986267324414207500, + 1.986222424650638400, 1.986177451859348200, 1.986132406041990900, + 1.986087287200222700, + 1.986042095335702300, 1.985996830450091200, 1.985951492545054100, + 1.985906081622257300, + 1.985860597683371000, 1.985815040730067200, 1.985769410764020900, + 1.985723707786909900, + 1.985677931800414500, 1.985632082806217900, 1.985586160806005700, + 1.985540165801466200, + 1.985494097794290800, 1.985447956786173100, 1.985401742778809500, + 1.985355455773899500, + 1.985309095773144500, 1.985262662778249300, 1.985216156790921000, + 1.985169577812869500, + 1.985122925845807400, 1.985076200891450000, 1.985029402951515200, + 1.984982532027723700, + 1.984935588121798700, 1.984888571235466200, 1.984841481370454900, + 1.984794318528496200, + 1.984747082711324100, 1.984699773920675300, 1.984652392158289500, + 1.984604937425908300, + 1.984557409725276700, 1.984509809058142300, 1.984462135426255000, + 1.984414388831367900, + 1.984366569275236400, 1.984318676759618400, 1.984270711286275200, + 1.984222672856969800, + 1.984174561473469200, 1.984126377137541700, 1.984078119850959200, + 1.984029789615495900, + 1.983981386432928800, 1.983932910305037400, 1.983884361233604100, + 1.983835739220414000, + 1.983787044267254700, 1.983738276375916800, 1.983689435548192900, + 1.983640521785879200, + 1.983591535090773800, 1.983542475464678000, 1.983493342909395500, + 1.983444137426732600, + 1.983394859018498900, 1.983345507686505900, 1.983296083432567900, + 1.983246586258502700, + 1.983197016166129400, 1.983147373157271300, 1.983097657233753100, + 1.983047868397403100, + 1.982998006650051400, 1.982948071993531700, 1.982898064429679900, + 1.982847983960334600, + 1.982797830587336800, 1.982747604312531200, 1.982697305137763700, + 1.982646933064884200, + 1.982596488095744300, 1.982545970232199000, 1.982495379476105800, + 1.982444715829324600, + 1.982393979293718200, 1.982343169871152000, 1.982292287563494300, + 1.982241332372615600, + 1.982190304300389400, 1.982139203348692200, 1.982088029519402300, + 1.982036782814401900, + 1.981985463235574700, 1.981934070784807400, 1.981882605463990200, + 1.981831067275015000, + 1.981779456219776600, 1.981727772300172500, 1.981676015518103500, + 1.981624185875472000, + 1.981572283374183800, 1.981520308016147200, 1.981468259803273300, + 1.981416138737475800, + 1.981363944820670800, 1.981311678054777500, 1.981259338441717400, + 1.981206925983415300, + 1.981154440681797800, 1.981101882538794900, 1.981049251556338900, + 1.980996547736364900, + 1.980943771080810700, 1.980890921591616600, 1.980837999270726100, + 1.980785004120084700, + 1.980731936141640900, 1.980678795337345900, 1.980625581709153600, + 1.980572295259020600, + 1.980518935988905700, 1.980465503900771000, 1.980411998996581200, + 1.980358421278303200, + 1.980304770747907300, 1.980251047407365600, 1.980197251258653900, + 1.980143382303749500, + 1.980089440544633600, 1.980035425983289300, 1.979981338621702200, + 1.979927178461861500, + 1.979872945505758000, 1.979818639755386100, 1.979764261212742400, + 1.979709809879825800, + 1.979655285758638900, 1.979600688851186100, 1.979546019159474900, + 1.979491276685515300, + 1.979436461431320000, 1.979381573398904400, 1.979326612590286400, + 1.979271579007487100, + 1.979216472652529900, 1.979161293527440500, 1.979106041634248100, + 1.979050716974983800, + 1.978995319551682100, 1.978939849366379700, 1.978884306421115900, + 1.978828690717932900, + 1.978773002258875600, 1.978717241045991700, 1.978661407081331100, + 1.978605500366946700, + 1.978549520904894000, 1.978493468697231300, 1.978437343746019600, + 1.978381146053322000, + 1.978324875621205300, 1.978268532451738200, 1.978212116546992100, + 1.978155627909041300, + 1.978099066539962900, 1.978042432441836400, 1.977985725616743900, + 1.977928946066770600, + 1.977872093794004200, 1.977815168800534500, 1.977758171088455100, + 1.977701100659861300, + 1.977643957516851400, 1.977586741661526500, 1.977529453095990200, + 1.977472091822348700, + 1.977414657842711200, 1.977357151159189400, 1.977299571773897700, + 1.977241919688953000, + 1.977184194906475000, 1.977126397428586000, 1.977068527257411300, + 1.977010584395078300, + 1.976952568843717700, 1.976894480605462500, 1.976836319682448300, + 1.976778086076813600, + 1.976719779790699500, 1.976661400826249500, 1.976602949185610500, + 1.976544424870931400, + 1.976485827884363800, 1.976427158228062100, 1.976368415904183900, + 1.976309600914888400, + 1.976250713262338600, 1.976191752948699200, 1.976132719976138000, + 1.976073614346825800, + 1.976014436062935700, 1.975955185126643300, 1.975895861540127200, + 1.975836465305568400, + 1.975776996425151000, 1.975717454901061400, 1.975657840735488800, + 1.975598153930624900, + 1.975538394488664200, 1.975478562411804100, 1.975418657702244300, + 1.975358680362187400, + 1.975298630393838500, 1.975238507799405500, 1.975178312581099100, + 1.975118044741132300, + 1.975057704281721000, 1.974997291205083700, 1.974936805513442000, + 1.974876247209019100, + 1.974815616294042200, 1.974754912770740200, 1.974694136641345300, + 1.974633287908091500, + 1.974572366573216400, 1.974511372638960000, 1.974450306107564900, + 1.974389166981275900, + 1.974327955262341400, 1.974266670953011400, 1.974205314055540000, + 1.974143884572182400, + 1.974082382505197400, 1.974020807856846400, 1.973959160629393100, + 1.973897440825104200, + 1.973835648446248900, 1.973773783495099500, 1.973711845973930000, + 1.973649835885018100, + 1.973587753230643400, 1.973525598013088800, 1.973463370234639600, + 1.973401069897583200, + 1.973338697004211100, 1.973276251556815600, 1.973213733557693400, + 1.973151143009142800, + 1.973088479913465100, 1.973025744272964200, 1.972962936089946800, + 1.972900055366722000, + 1.972837102105601900, 1.972774076308901200, 1.972710977978936900, + 1.972647807118029300, + 1.972584563728500700, 1.972521247812676600, 1.972457859372884500, + 1.972394398411455800, + 1.972330864930723200, 1.972267258933022600, 1.972203580420693000, + 1.972139829396075200, + 1.972076005861513700, 1.972012109819354600, 1.971948141271947500, + 1.971884100221644300, + 1.971819986670799500, 1.971755800621770400, 1.971691542076916800, + 1.971627211038601500, + 1.971562807509189800, 1.971498331491049700, 1.971433782986551400, + 1.971369161998068400, + 1.971304468527976800, 1.971239702578655000, 1.971174864152484400, + 1.971109953251848600, + 1.971044969879134600, 1.970979914036731500, 1.970914785727030800, + 1.970849584952427900, + 1.970784311715319400, 1.970718966018105500, 1.970653547863188600, + 1.970588057252973900, + 1.970522494189869800, 1.970456858676286300, 1.970391150714636800, + 1.970325370307337100, + 1.970259517456806100, 1.970193592165464700, 1.970127594435737000, + 1.970061524270049400, + 1.969995381670831100, 1.969929166640514100, 1.969862879181532700, + 1.969796519296324300, + 1.969730086987328900, 1.969663582256988600, 1.969597005107748900, + 1.969530355542057800, + 1.969463633562365400, 1.969396839171125200, 1.969329972370792700, + 1.969263033163826800, + 1.969196021552688500, 1.969128937539841500, 1.969061781127752400, + 1.968994552318890300, + 1.968927251115727200, 1.968859877520737300, 1.968792431536398000, + 1.968724913165188900, + 1.968657322409592500, 1.968589659272094000, 1.968521923755181000, + 1.968454115861344000, + 1.968386235593076300, 1.968318282952873600, 1.968250257943234200, + 1.968182160566659000, + 1.968113990825652200, 1.968045748722719900, 1.967977434260371300, + 1.967909047441118100, + 1.967840588267474500, 1.967772056741957900, 1.967703452867087800, + 1.967634776645386600, + 1.967566028079379200, 1.967497207171593500, 1.967428313924559600, + 1.967359348340810700, + 1.967290310422882700, 1.967221200173313400, 1.967152017594644200, + 1.967082762689418500, + 1.967013435460182700, 1.966944035909485600, 1.966874564039879300, + 1.966805019853917500, + 1.966735403354157500, 1.966665714543159000, 1.966595953423483800, + 1.966526119997697100, + 1.966456214268366600, 1.966386236238062200, 1.966316185909357200, + 1.966246063284826700, + 1.966175868367049400, 1.966105601158605600, 1.966035261662079300, + 1.965964849880056600, + 1.965894365815126000, 1.965823809469879400, 1.965753180846910900, + 1.965682479948817100, + 1.965611706778197700, 1.965540861337654600, 1.965469943629792700, + 1.965398953657219600, + 1.965327891422544900, 1.965256756928382100, 1.965185550177345900, + 1.965114271172054800, + 1.965042919915129400, 1.964971496409193100, 1.964900000656872000, + 1.964828432660794500, + 1.964756792423592200, 1.964685079947899200, 1.964613295236352000, + 1.964541438291590000, + 1.964469509116255000, 1.964397507712991800, 1.964325434084447600, + 1.964253288233272400, + 1.964181070162119000, 1.964108779873642100, 1.964036417370500300, + 1.963963982655353400, + 1.963891475730865400, 1.963818896599701400, 1.963746245264530700, + 1.963673521728023900, + 1.963600725992855200, 1.963527858061700600, 1.963454917937239800, + 1.963381905622154400, + 1.963308821119128700, 1.963235664430850200, 1.963162435560008100, + 1.963089134509295300, + 1.963015761281406800, 1.962942315879040000, 1.962868798304895400, + 1.962795208561676200, + 1.962721546652088200, 1.962647812578839400, 1.962574006344640900, + 1.962500127952206300, + 1.962426177404252200, 1.962352154703497200, 1.962278059852663000, + 1.962203892854473800, + 1.962129653711656800, 1.962055342426941400, 1.961980959003059500, + 1.961906503442746300, + 1.961831975748739200, 1.961757375923778700, 1.961682703970607100, + 1.961607959891970200, + 1.961533143690616000, 1.961458255369295400, 1.961383294930761700, + 1.961308262377770900, + 1.961233157713082200, 1.961157980939456400, 1.961082732059657800, + 1.961007411076453000, + 1.960932017992611500, 1.960856552810905200, 1.960781015534108800, + 1.960705406164999300, + 1.960629724706357100, 1.960553971160964500, 1.960478145531606700, + 1.960402247821071900, + 1.960326278032150200, 1.960250236167635100, 1.960174122230322400, + 1.960097936223010400, + 1.960021678148500500, 1.959945348009596500, 1.959868945809104500, + 1.959792471549834000, + 1.959715925234596600, 1.959639306866206600, 1.959562616447480900, + 1.959485853981239600, + 1.959409019470304700, 1.959332112917501400, 1.959255134325657000, + 1.959178083697602300, + 1.959100961036169800, 1.959023766344195200, 1.958946499624516700, + 1.958869160879975500, + 1.958791750113414700, 1.958714267327680500, 1.958636712525621900, + 1.958559085710090500, + 1.958481386883940100, 1.958403616050027600, 1.958325773211212300, + 1.958247858370356400, + 1.958169871530324600, 1.958091812693984400, 1.958013681864205500, + 1.957935479043860600, + 1.957857204235825100, 1.957778857442976900, 1.957700438668196700, + 1.957621947914367500, + 1.957543385184375300, 1.957464750481108700, 1.957386043807458800, + 1.957307265166319500, + 1.957228414560587200, 1.957149491993160900, 1.957070497466942400, + 1.956991430984836400, + 1.956912292549749500, 1.956833082164591600, 1.956753799832275300, + 1.956674445555715000, + 1.956595019337829000, 1.956515521181537000, 1.956435951089762200, + 1.956356309065430100, + 1.956276595111468900, 1.956196809230809500, 1.956116951426385600, + 1.956037021701132900, + 1.955957020057990500, 1.955876946499899700, 1.955796801029804800, + 1.955716583650652000, + 1.955636294365391300, 1.955555933176974300, 1.955475500088355900, + 1.955394995102493100, + 1.955314418222346100, 1.955233769450877200, 1.955153048791052000, + 1.955072256245838000, + 1.954991391818206000, 1.954910455511129000, 1.954829447327582900, + 1.954748367270545900, + 1.954667215342999600, 1.954585991547927100, 1.954504695888315000, + 1.954423328367152600, + 1.954341888987431100, 1.954260377752145000, 1.954178794664291200, + 1.954097139726869600, + 1.954015412942881900, 1.953933614315333200, 1.953851743847231100, + 1.953769801541585400, + 1.953687787401409400, 1.953605701429718100, 1.953523543629529700, + 1.953441314003864900, + 1.953359012555747200, 1.953276639288202400, 1.953194194204259200, + 1.953111677306948800, + 1.953029088599305100, 1.952946428084364900, 1.952863695765167100, + 1.952780891644753500, + 1.952698015726169100, 1.952615068012460300, 1.952532048506677300, + 1.952448957211872200, + 1.952365794131100300, 1.952282559267419100, 1.952199252623889200, + 1.952115874203572900, + 1.952032424009536600, 1.951948902044847900, 1.951865308312577900, + 1.951781642815800100, + 1.951697905557590700, 1.951614096541028500, 1.951530215769194700, + 1.951446263245173500, + 1.951362238972051500, 1.951278142952918200, 1.951193975190865600, + 1.951109735688987900, + 1.951025424450382900, 1.950941041478150100, 1.950856586775392200, + 1.950772060345214300, + 1.950687462190724200, 1.950602792315032200, 1.950518050721251600, + 1.950433237412498000, + 1.950348352391889600, 1.950263395662547700, 1.950178367227595900, + 1.950093267090159800, + 1.950008095253369200, 1.949922851720355100, 1.949837536494251700, + 1.949752149578196000, + 1.949666690975327100, 1.949581160688787400, 1.949495558721721500, + 1.949409885077276500, + 1.949324139758602700, 1.949238322768852800, 1.949152434111181700, + 1.949066473788747300, + 1.948980441804710300, 1.948894338162233900, 1.948808162864483600, + 1.948721915914628100, + 1.948635597315838200, 1.948549207071288000, 1.948462745184153400, + 1.948376211657613500, + 1.948289606494849800, 1.948202929699046800, 1.948116181273391100, + 1.948029361221072400, + 1.947942469545282500, 1.947855506249216700, 1.947768471336071700, + 1.947681364809048100, + 1.947594186671348000, 1.947506936926177300, 1.947419615576743600, + 1.947332222626257500, + 1.947244758077932200, 1.947157221934983500, 1.947069614200629900, + 1.946981934878092300, + 1.946894183970594900, 1.946806361481363500, 1.946718467413627300, + 1.946630501770618000, + 1.946542464555569800, 1.946454355771719300, 1.946366175422306500, + 1.946277923510573200, + 1.946189600039764300, 1.946101205013127000, 1.946012738433911600, + 1.945924200305370700, + 1.945835590630759400, 1.945746909413335900, 1.945658156656360700, + 1.945569332363096700, + 1.945480436536810100, 1.945391469180769200, 1.945302430298244900, + 1.945213319892511200, + 1.945124137966844200, 1.945034884524523100, 1.944945559568829200, + 1.944856163103046800, + 1.944766695130463000, 1.944677155654366900, 1.944587544678050900, + 1.944497862204809900, + 1.944408108237940700, 1.944318282780743900, 1.944228385836521700, + 1.944138417408579400, + 1.944048377500225100, 1.943958266114769200, 1.943868083255524800, + 1.943777828925807600, + 1.943687503128936200, 1.943597105868231500, 1.943506637147017300, + 1.943416096968619400, + 1.943325485336367300, 1.943234802253592400, 1.943144047723628400, + 1.943053221749812400, + 1.942962324335484100, 1.942871355483985200, 1.942780315198660200, + 1.942689203482856900, + 1.942598020339924700, 1.942506765773216500, 1.942415439786087300, + 1.942324042381895000, + 1.942232573564000000, 1.942141033335765400, 1.942049421700556600, + 1.941957738661741900, + 1.941865984222692900, 1.941774158386782200, 1.941682261157386700, + 1.941590292537884700, + 1.941498252531658200, 1.941406141142090600, 1.941313958372568900, + 1.941221704226482500, + 1.941129378707223000, 1.941036981818185400, 1.940944513562766300, + 1.940851973944365900, + 1.940759362966386600, 1.940666680632233200, 1.940573926945313700, + 1.940481101909038200, + 1.940388205526819600, 1.940295237802073500, 1.940202198738217900, + 1.940109088338673600, + 1.940015906606864300, 1.939922653546215500, 1.939829329160156500, + 1.939735933452118000, + 1.939642466425534300, 1.939548928083841800, 1.939455318430479500, + 1.939361637468889100, + 1.939267885202515400, 1.939174061634805000, 1.939080166769207700, + 1.938986200609175600, + 1.938892163158163700, 1.938798054419629500, 1.938703874397032800, + 1.938609623093837000, + 1.938515300513506700, 1.938420906659510600, 1.938326441535318500, + 1.938231905144404400, + 1.938137297490243500, 1.938042618576314400, 1.937947868406098500, + 1.937853046983079300, + 1.937758154310742900, 1.937663190392578500, 1.937568155232077600, + 1.937473048832734500, + 1.937377871198045600, 1.937282622331510500, 1.937187302236631500, + 1.937091910916912900, + 1.936996448375861900, 1.936900914616988900, 1.936805309643805800, + 1.936709633459828200, + 1.936613886068573500, 1.936518067473562300, 1.936422177678317300, + 1.936326216686364400, + 1.936230184501231500, 1.936134081126449800, 1.936037906565552400, + 1.935941660822075600, + 1.935845343899558000, 1.935748955801540800, 1.935652496531568000, + 1.935555966093186300, + 1.935459364489944500, 1.935362691725394500, 1.935265947803090900, + 1.935169132726590500, + 1.935072246499453000, 1.934975289125240500, 1.934878260607517900, + 1.934781160949852600, + 1.934683990155814800, 1.934586748228977100, 1.934489435172914900, + 1.934392050991206300, + 1.934294595687431300, 1.934197069265173500, 1.934099471728018700, + 1.934001803079554700, + 1.933904063323373300, 1.933806252463067500, 1.933708370502233800, + 1.933610417444471000, + 1.933512393293380600, 1.933414298052566600, 1.933316131725635800, + 1.933217894316197300, + 1.933119585827862900, 1.933021206264247600, 1.932922755628968100, + 1.932824233925644300, + 1.932725641157898600, 1.932626977329356100, 1.932528242443643900, + 1.932429436504392800, + 1.932330559515235100, 1.932231611479806800, 1.932132592401745400, + 1.932033502284691700, + 1.931934341132289100, 1.931835108948183300, 1.931735805736022800, + 1.931636431499459000, + 1.931536986242145200, 1.931437469967737900, 1.931337882679895900, + 1.931238224382281000, + 1.931138495078557300, 1.931038694772391200, 1.930938823467452500, + 1.930838881167413100, + 1.930738867875947400, 1.930638783596732700, 1.930538628333448900, + 1.930438402089778200, + 1.930338104869405900, 1.930237736676019500, 1.930137297513309300, + 1.930036787384968200, + 1.929936206294691400, 1.929835554246177400, 1.929734831243126600, + 1.929634037289242400, + 1.929533172388230700, 1.929432236543799900, 1.929331229759661200, + 1.929230152039528500, + 1.929129003387117800, 1.929027783806148300, 1.928926493300341400, + 1.928825131873421500, + 1.928723699529115000, 1.928622196271151800, 1.928520622103263400, + 1.928418977029184600, + 1.928317261052652700, 1.928215474177407100, 1.928113616407190600, + 1.928011687745748300, + 1.927909688196827400, 1.927807617764178300, 1.927705476451554000, + 1.927603264262709900, + 1.927500981201404100, 1.927398627271397000, 1.927296202476451900, + 1.927193706820335100, + 1.927091140306814500, 1.926988502939661400, 1.926885794722649600, + 1.926783015659555300, + 1.926680165754157500, 1.926577245010237400, 1.926474253431579500, + 1.926371191021970100, + 1.926268057785198700, 1.926164853725057300, 1.926061578845340600, + 1.925958233149845000, + 1.925854816642371000, 1.925751329326720600, 1.925647771206698600, + 1.925544142286112800, + 1.925440442568773000, 1.925336672058492300, 1.925232830759086000, + 1.925128918674371900, + 1.925024935808170600, 1.924920882164305300, 1.924816757746601800, + 1.924712562558888100, + 1.924608296604995800, 1.924503959888757900, 1.924399552414010700, + 1.924295074184593000, + 1.924190525204346300, 1.924085905477114400, 1.923981215006744100, + 1.923876453797084300, + 1.923771621851986700, 1.923666719175306100, 1.923561745770898900, + 1.923456701642625200, + 1.923351586794346900, 1.923246401229928600, 1.923141144953238300, + 1.923035817968145300, + 1.922930420278522500, 1.922824951888245000, 1.922719412801190600, + 1.922613803021239600, + 1.922508122552275100, 1.922402371398182600, 1.922296549562850100, + 1.922190657050168800, + 1.922084693864031700, 1.921978660008334600, 1.921872555486976700, + 1.921766380303858500, + 1.921660134462884100, 1.921553817967959900, 1.921447430822994500, + 1.921340973031900000, + 1.921234444598590100, 1.921127845526981600, 1.921021175820994100, + 1.920914435484549100, + 1.920807624521571700, 1.920700742935988600, 1.920593790731729600, + 1.920486767912727300, + 1.920379674482916500, 1.920272510446234400, 1.920165275806621400, + 1.920057970568020100, + 1.919950594734376000, 1.919843148309637000, 1.919735631297753400, + 1.919628043702678300, + 1.919520385528367300, 1.919412656778779000, 1.919304857457874200, + 1.919196987569616200, + 1.919089047117971100, 1.918981036106907700, 1.918872954540397300, + 1.918764802422413500, + 1.918656579756932800, 1.918548286547934400, 1.918439922799399800, + 1.918331488515313300, + 1.918222983699661600, 1.918114408356434300, 1.918005762489623400, + 1.917897046103223200, + 1.917788259201231200, 1.917679401787647100, 1.917570473866473200, + 1.917461475441714500, + 1.917352406517378600, 1.917243267097475700, 1.917134057186018300, + 1.917024776787022100, + 1.916915425904504700, 1.916806004542486800, 1.916696512704991500, + 1.916586950396044400, + 1.916477317619674100, 1.916367614379911100, 1.916257840680788900, + 1.916147996526343700, + 1.916038081920614400, 1.915928096867641800, 1.915818041371470000, + 1.915707915436145200, + 1.915597719065716700, 1.915487452264236000, 1.915377115035757200, + 1.915266707384337200, + 1.915156229314035200, 1.915045680828913400, 1.914935061933036300, + 1.914824372630470800, + 1.914713612925287100, 1.914602782821557000, 1.914491882323355700, + 1.914380911434760500, + 1.914269870159851700, 1.914158758502712000, 1.914047576467426500, + 1.913936324058083100, + 1.913825001278772100, 1.913713608133586600, 1.913602144626622500, + 1.913490610761977600, + 1.913379006543752800, 1.913267331976051400, 1.913155587062979500, + 1.913043771808645700, + 1.912931886217160900, 1.912819930292639000, 1.912707904039196300, + 1.912595807460951500, + 1.912483640562026200, 1.912371403346544400, 1.912259095818632700, + 1.912146717982420500, + 1.912034269842039600, 1.911921751401624200, 1.911809162665311500, + 1.911696503637241100, + 1.911583774321554700, 1.911470974722397500, 1.911358104843916500, + 1.911245164690262000, + 1.911132154265586100, 1.911019073574044200, 1.910905922619793800, + 1.910792701406995000, + 1.910679409939810600, 1.910566048222406300, 1.910452616258949900, + 1.910339114053611900, + 1.910225541610565800, 1.910111898933986900, 1.909998186028053700, + 1.909884402896947100, + 1.909770549544850500, 1.909656625975950200, 1.909542632194434700, + 1.909428568204495100, + 1.909314434010325400, 1.909200229616121700, 1.909085955026083200, + 1.908971610244411600, + 1.908857195275310800, 1.908742710122987700, 1.908628154791651300, + 1.908513529285513500, + 1.908398833608789100, 1.908284067765694900, 1.908169231760450400, + 1.908054325597278200, + 1.907939349280402400, 1.907824302814050900, 1.907709186202453600, + 1.907593999449842800, + 1.907478742560453600, 1.907363415538523700, 1.907248018388293400, + 1.907132551114005600, + 1.907017013719905600, 1.906901406210241200, 1.906785728589263300, + 1.906669980861224900, + 1.906554163030381500, 1.906438275100991600, 1.906322317077316300, + 1.906206288963618700, + 1.906090190764164700, 1.905974022483223300, 1.905857784125065500, + 1.905741475693964800, + 1.905625097194197900, 1.905508648630043700, 1.905392130005783400, + 1.905275541325701400, + 1.905158882594083900, 1.905042153815220700, 1.904925354993402900, + 1.904808486132925300, + 1.904691547238084800, 1.904574538313180700, 1.904457459362515200, + 1.904340310390393100, + 1.904223091401121600, 1.904105802399010300, 1.903988443388371600, + 1.903871014373520700, + 1.903753515358774800, 1.903635946348454500, 1.903518307346881800, + 1.903400598358382600, + 1.903282819387284200, 1.903164970437917400, 1.903047051514615000, + 1.902929062621712600, + 1.902811003763547900, 1.902692874944462300, 1.902574676168798700, + 1.902456407440902700, + 1.902338068765123200, 1.902219660145810800, 1.902101181587319000, + 1.901982633094004200, + 1.901864014670225000, 1.901745326320342500, 1.901626568048721000, + 1.901507739859726200, + 1.901388841757727600, 1.901269873747096600, 1.901150835832207100, + 1.901031728017436300, + 1.900912550307162700, 1.900793302705768900, 1.900673985217638900, + 1.900554597847159400, + 1.900435140598720500, 1.900315613476714100, 1.900196016485534700, + 1.900076349629579600, + 1.899956612913248800, 1.899836806340944300, 1.899716929917071500, + 1.899596983646037600, + 1.899476967532252900, 1.899356881580129800, 1.899236725794083600, + 1.899116500178532200, + 1.898996204737895900, 1.898875839476597700, 1.898755404399062900, + 1.898634899509719500, + 1.898514324812998300, 1.898393680313332600, 1.898272966015157800, + 1.898152181922912600, + 1.898031328041037700, 1.897910404373976500, 1.897789410926175000, + 1.897668347702081900, + 1.897547214706148300, 1.897426011942827900, 1.897304739416577200, + 1.897183397131854600, + 1.897061985093121800, 1.896940503304842800, 1.896818951771484000, + 1.896697330497514800, + 1.896575639487406300, 1.896453878745633100, 1.896332048276672100, + 1.896210148085002400, + 1.896088178175106200, 1.895966138551467700, 1.895844029218574100, + 1.895721850180915000, + 1.895599601442982600, 1.895477283009271400, 1.895354894884279100, + 1.895232437072505300, + 1.895109909578452500, 1.894987312406625700, 1.894864645561532100, + 1.894741909047682500, + 1.894619102869589100, 1.894496227031767100, 1.894373281538734400, + 1.894250266395011600, + 1.894127181605121100, 1.894004027173588700, 1.893880803104942600, + 1.893757509403713100, + 1.893634146074433500, 1.893510713121639300, 1.893387210549869000, + 1.893263638363663400, + 1.893139996567565900, 1.893016285166122500, 1.892892504163881600, + 1.892768653565394300, + 1.892644733375214300, 1.892520743597897700, 1.892396684238003300, + 1.892272555300092300, + 1.892148356788728700, 1.892024088708479200, 1.891899751063912200, + 1.891775343859599400, + 1.891650867100115300, 1.891526320790036100, 1.891401704933941100, + 1.891277019536412400, + 1.891152264602033800, 1.891027440135392600, 1.890902546141078000, + 1.890777582623682300, + 1.890652549587799700, 1.890527447038027300, 1.890402274978965100, + 1.890277033415215200, + 1.890151722351382200, 1.890026341792073500, 1.889900891741899100, + 1.889775372205471300, + 1.889649783187405100, 1.889524124692318200, 1.889398396724830500, + 1.889272599289564900, + 1.889146732391146400, 1.889020796034202700, 1.888894790223364600, + 1.888768714963264400, + 1.888642570258537700, 1.888516356113822700, 1.888390072533759700, + 1.888263719522991900, + 1.888137297086165000, 1.888010805227927000, 1.887884243952928600, + 1.887757613265823400, + 1.887630913171267000, 1.887504143673917700, 1.887377304778437000, + 1.887250396489487800, + 1.887123418811736500, 1.886996371749851700, 1.886869255308504200, + 1.886742069492368000, + 1.886614814306119400, 1.886487489754437300, 1.886360095842002600, + 1.886232632573499700, + 1.886105099953614900, 1.885977497987037000, 1.885849826678457800, + 1.885722086032571200, + 1.885594276054074300, 1.885466396747665700, 1.885338448118047700, + 1.885210430169924200, + 1.885082342908002400, 1.884954186336991400, 1.884825960461603100, + 1.884697665286552400, + 1.884569300816556000, 1.884440867056333700, 1.884312364010607600, + 1.884183791684102400, + 1.884055150081545200, 1.883926439207665800, 1.883797659067196800, + 1.883668809664872600, + 1.883539891005431100, 1.883410903093611900, 1.883281845934157800, + 1.883152719531813800, + 1.883023523891327300, 1.882894259017448900, 1.882764924914930700, + 1.882635521588528400, + 1.882506049042999700, 1.882376507283104900, 1.882246896313606800, + 1.882117216139270700, + 1.881987466764865100, 1.881857648195159900, 1.881727760434928500, + 1.881597803488946500, + 1.881467777361992100, 1.881337682058845700, 1.881207517584290600, + 1.881077283943112900, + 1.880946981140100500, 1.880816609180044700, 1.880686168067738500, + 1.880555657807977800, + 1.880425078405561600, 1.880294429865290600, 1.880163712191968300, + 1.880032925390400900, + 1.879902069465397200, 1.879771144421768200, 1.879640150264327600, + 1.879509086997891900, + 1.879377954627279700, 1.879246753157312700, 1.879115482592814500, + 1.878984142938611600, + 1.878852734199532900, 1.878721256380410100, 1.878589709486077300, + 1.878458093521370800, + 1.878326408491130200, 1.878194654400196600, 1.878062831253414900, + 1.877930939055631100, + 1.877798977811695200, 1.877666947526458700, 1.877534848204775800, + 1.877402679851504000, + 1.877270442471502100, 1.877138136069632400, 1.877005760650759500, + 1.876873316219750200, + 1.876740802781474500, 1.876608220340804100, 1.876475568902614000, + 1.876342848471781200, + 1.876210059053185600, 1.876077200651709500, 1.875944273272237800, + 1.875811276919657500, + 1.875678211598858800, 1.875545077314734000, 1.875411874072178100, + 1.875278601876088700, + 1.875145260731365700, 1.875011850642911600, 1.874878371615631900, + 1.874744823654434000, + 1.874611206764227800, 1.874477520949926500, 1.874343766216444800, + 1.874209942568701100, + 1.874076050011615400, 1.873942088550110400, 1.873808058189111700, + 1.873673958933546900, + 1.873539790788347100, 1.873405553758444600, 1.873271247848775400, + 1.873136873064277000, + 1.873002429409890600, 1.872867916890558900, 1.872733335511227700, + 1.872598685276845000, + 1.872463966192361900, 1.872329178262731200, 1.872194321492908700, + 1.872059395887852900, + 1.871924401452524700, 1.871789338191887100, 1.871654206110906500, + 1.871519005214550700, + 1.871383735507791100, 1.871248396995601300, 1.871112989682956800, + 1.870977513574836500, + 1.870841968676221400, 1.870706354992095000, 1.870570672527443600, + 1.870434921287255700, + 1.870299101276522400, 1.870163212500237900, 1.870027254963397800, + 1.869891228671001200, + 1.869755133628049600, 1.869618969839546500, 1.869482737310498100, + 1.869346436045913800, + 1.869210066050804600, 1.869073627330184700, 1.868937119889070300, + 1.868800543732480600, + 1.868663898865437200, 1.868527185292963700, 1.868390403020087100, + 1.868253552051836200, + 1.868116632393243000, 1.867979644049341200, 1.867842587025167800, + 1.867705461325761800, + 1.867568266956164800, 1.867431003921421500, 1.867293672226578300, + 1.867156271876684500, + 1.867018802876792200, 1.866881265231955500, 1.866743658947231300, + 1.866605984027679000, + 1.866468240478360600, 1.866330428304340300, 1.866192547510685300, + 1.866054598102465000, + 1.865916580084751500, 1.865778493462619100, 1.865640338241145100, + 1.865502114425408900, + 1.865363822020492700, 1.865225461031480900, 1.865087031463460900, + 1.864948533321522300, + 1.864809966610757400, 1.864671331336260600, 1.864532627503129100, + 1.864393855116463200, + 1.864255014181364500, 1.864116104702938000, 1.863977126686291200, + 1.863838080136534000, + 1.863698965058778300, 1.863559781458139300, 1.863420529339734100, + 1.863281208708683000, + 1.863141819570107900, 1.863002361929134500, 1.862862835790889400, + 1.862723241160503300, + 1.862583578043108100, 1.862443846443839300, 1.862304046367834200, + 1.862164177820232700, + 1.862024240806177800, 1.861884235330814300, 1.861744161399289600, + 1.861604019016754200, + 1.861463808188360500, 1.861323528919263800, 1.861183181214621600, + 1.861042765079594200, + 1.860902280519344500, 1.860761727539037300, 1.860621106143840500, + 1.860480416338924600, + 1.860339658129461800, 1.860198831520627900, 1.860057936517600700, + 1.859916973125560000, + 1.859775941349689000, 1.859634841195173100, 1.859493672667199800, + 1.859352435770959900, + 1.859211130511645900, 1.859069756894453400, 1.858928314924580300, + 1.858786804607227100, + 1.858645225947596300, 1.858503578950893900, 1.858361863622327400, + 1.858220079967107600, + 1.858078227990447300, 1.857936307697561900, 1.857794319093669900, + 1.857652262183991000, + 1.857510136973749000, 1.857367943468169100, 1.857225681672479300, + 1.857083351591910300, + 1.856940953231694900, 1.856798486597069000, 1.856655951693270600, + 1.856513348525540300, + 1.856370677099121100, 1.856227937419258700, 1.856085129491201100, + 1.855942253320199200, + 1.855799308911506100, 1.855656296270377300, 1.855513215402071000, + 1.855370066311848000, + 1.855226849004971500, 1.855083563486706900, 1.854940209762322700, + 1.854796787837089500, + 1.854653297716280400, 1.854509739405171300, 1.854366112909040300, + 1.854222418233168400, + 1.854078655382838300, 1.853934824363336200, 1.853790925179950500, + 1.853646957837971500, + 1.853502922342692600, 1.853358818699409900, 1.853214646913421200, + 1.853070406990027500, + 1.852926098934532200, 1.852781722752241000, 1.852637278448462200, + 1.852492766028506400, + 1.852348185497687300, 1.852203536861320600, 1.852058820124724300, + 1.851914035293219700, + 1.851769182372129600, 1.851624261366780400, 1.851479272282500000, + 1.851334215124619300, + 1.851189089898471800, 1.851043896609393400, 1.850898635262721900, + 1.850753305863798800, + 1.850607908417967200, 1.850462442930572900, 1.850316909406964200, + 1.850171307852492200, + 1.850025638272510000, 1.849879900672373600, 1.849734095057441200, + 1.849588221433073700, + 1.849442279804634600, 1.849296270177489800, 1.849150192557007300, + 1.849004046948558200, + 1.848857833357515900, 1.848711551789256300, 1.848565202249157400, + 1.848418784742600400, + 1.848272299274968500, 1.848125745851647800, 1.847979124478026100, + 1.847832435159495000, + 1.847685677901447200, 1.847538852709279100, 1.847391959588388300, + 1.847244998544176300, + 1.847097969582046200, 1.846950872707404000, 1.846803707925657600, + 1.846656475242218300, + 1.846509174662499300, 1.846361806191916000, 1.846214369835887500, + 1.846066865599834000, + 1.845919293489179000, 1.845771653509348200, 1.845623945665770100, + 1.845476169963875500, + 1.845328326409097400, 1.845180415006871800, 1.845032435762637100, + 1.844884388681833800, + 1.844736273769905300, 1.844588091032297400, 1.844439840474458200, + 1.844291522101838800, + 1.844143135919891900, 1.843994681934073600, 1.843846160149842200, + 1.843697570572658200, + 1.843548913207985000, 1.843400188061288000, 1.843251395138035800, + 1.843102534443698900, + 1.842953605983750400, 1.842804609763666100, 1.842655545788924000, + 1.842506414065004900, + 1.842357214597392100, 1.842207947391570900, 1.842058612453029600, + 1.841909209787258900, + 1.841759739399751800, 1.841610201296003800, 1.841460595481513100, + 1.841310921961780500, + 1.841161180742308500, 1.841011371828603200, 1.840861495226172600, + 1.840711550940526700, + 1.840561538977179200, 1.840411459341645400, 1.840261312039443100, + 1.840111097076092800, + 1.839960814457117600, 1.839810464188043100, 1.839660046274397100, + 1.839509560721709800, + 1.839359007535514400, 1.839208386721346500, 1.839057698284743500, + 1.838906942231246100, + 1.838756118566397200, 1.838605227295741800, 1.838454268424828400, + 1.838303241959206700, + 1.838152147904429800, 1.838000986266052900, 1.837849757049633900, + 1.837698460260732900, + 1.837547095904912700, 1.837395663987738700, 1.837244164514778600, + 1.837092597491602100, + 1.836940962923782700, 1.836789260816895000, 1.836637491176516600, + 1.836485654008228200, + 1.836333749317611700, 1.836181777110252900, 1.836029737391738700, + 1.835877630167659800, + 1.835725455443608200, 1.835573213225179400, 1.835420903517970500, + 1.835268526327581900, + 1.835116081659615700, 1.834963569519677100, 1.834810989913373500, + 1.834658342846314800, + 1.834505628324113200, 1.834352846352383700, 1.834199996936744000, + 1.834047080082813300, + 1.833894095796214400, 1.833741044082571900, 1.833587924947513100, + 1.833434738396668000, + 1.833281484435668400, 1.833128163070149300, 1.832974774305747600, + 1.832821318148103500, + 1.832667794602858400, 1.832514203675657600, 1.832360545372147900, + 1.832206819697979000, + 1.832053026658802700, 1.831899166260273700, 1.831745238508049300, + 1.831591243407788300, + 1.831437180965153100, 1.831283051185808300, 1.831128854075420500, + 1.830974589639659000, + 1.830820257884196100, 1.830665858814705600, 1.830511392436864800, + 1.830356858756352800, + 1.830202257778851300, 1.830047589510044500, 1.829892853955619200, + 1.829738051121264600, + 1.829583181012672400, 1.829428243635536500, 1.829273238995553700, + 1.829118167098423100, + 1.828963027949846100, 1.828807821555527000, 1.828652547921171900, + 1.828497207052490100, + 1.828341798955192900, 1.828186323634994200, 1.828030781097610400, + 1.827875171348760400, + 1.827719494394165500, 1.827563750239549400, 1.827407938890638600, + 1.827252060353161500, + 1.827096114632849700, 1.826940101735436500, 1.826784021666658400, + 1.826627874432253700, + 1.826471660037963800, 1.826315378489531800, 1.826159029792704400, + 1.826002613953229500, + 1.825846130976858100, 1.825689580869344100, 1.825532963636443000, + 1.825376279283913200, + 1.825219527817515800, 1.825062709243013800, 1.824905823566173000, + 1.824748870792761900, + 1.824591850928550800, 1.824434763979313300, 1.824277609950824700, + 1.824120388848863300, + 1.823963100679209600, 1.823805745447646600, 1.823648323159960100, + 1.823490833821937600, + 1.823333277439369600, 1.823175654018049300, 1.823017963563772000, + 1.822860206082335300, + 1.822702381579539800, 1.822544490061187800, 1.822386531533084900, + 1.822228506001038800, + 1.822070413470859600, 1.821912253948359700, 1.821754027439354400, + 1.821595733949661100, + 1.821437373485099900, 1.821278946051493100, 1.821120451654665700, + 1.820961890300445400, + 1.820803261994661500, 1.820644566743146800, 1.820485804551735800, + 1.820326975426265600, + 1.820168079372576300, 1.820009116396509800, 1.819850086503910700, + 1.819690989700625900, + 1.819531825992505500, 1.819372595385401000, 1.819213297885166900, + 1.819053933497660300, + 1.818894502228740600, 1.818735004084269600, 1.818575439070111200, + 1.818415807192132600, + 1.818256108456203000, 1.818096342868193800, 1.817936510433979300, + 1.817776611159436000, + 1.817616645050443000, 1.817456612112881900, 1.817296512352636300, + 1.817136345775592900, + 1.816976112387640700, 1.816815812194670700, 1.816655445202576700, + 1.816495011417255300, + 1.816334510844604700, 1.816173943490526400, 1.816013309360923900, + 1.815852608461703300, + 1.815691840798773000, 1.815531006378043900, 1.815370105205429600, + 1.815209137286846200, + 1.815048102628211500, 1.814887001235446600, 1.814725833114474700, + 1.814564598271221300, + 1.814403296711615000, 1.814241928441585800, 1.814080493467067300, + 1.813918991793994900, + 1.813757423428306000, 1.813595788375941700, 1.813434086642844400, + 1.813272318234959700, + 1.813110483158235400, 1.812948581418621500, 1.812786613022070700, + 1.812624577974538000, + 1.812462476281981200, 1.812300307950360300, 1.812138072985637800, + 1.811975771393778300, + 1.811813403180749300, 1.811650968352521000, 1.811488466915065000, + 1.811325898874356800, + 1.811163264236372900, 1.811000563007093100, 1.810837795192499400, + 1.810674960798576600, + 1.810512059831311400, 1.810349092296693400, 1.810186058200714100, + 1.810022957549368000, + 1.809859790348652200, 1.809696556604565300, 1.809533256323109200, + 1.809369889510288100, + 1.809206456172108200, 1.809042956314578900, 1.808879389943711200, + 1.808715757065519200, + 1.808552057686019200, 1.808388291811230000, 1.808224459447172800, + 1.808060560599871200, + 1.807896595275351200, 1.807732563479641300, 1.807568465218772900, + 1.807404300498778800, + 1.807240069325695400, 1.807075771705560800, 1.806911407644415700, + 1.806746977148303300, + 1.806582480223269500, 1.806417916875362000, 1.806253287110631600, + 1.806088590935131000, + 1.805923828354915900, 1.805758999376044100, 1.805594104004575800, + 1.805429142246573600, + 1.805264114108102900, 1.805099019595231200, 1.804933858714028700, + 1.804768631470567500, + 1.804603337870923000, 1.804437977921172300, 1.804272551627395400, + 1.804107058995674500, + 1.803941500032094200, 1.803775874742741500, 1.803610183133706400, + 1.803444425211080400, + 1.803278600980958300, 1.803112710449436900, 1.802946753622615400, + 1.802780730506595700, + 1.802614641107481900, 1.802448485431380900, 1.802282263484401300, + 1.802115975272655000, + 1.801949620802255600, 1.801783200079319900, 1.801616713109966300, + 1.801450159900316300, + 1.801283540456493700, 1.801116854784624400, 1.800950102890836800, + 1.800783284781262200, + 1.800616400462033800, 1.800449449939287800, 1.800282433219162000, + 1.800115350307797600, + 1.799948201211337500, 1.799780985935927300, 1.799613704487715200, + 1.799446356872851400, + 1.799278943097489100, 1.799111463167783400, 1.798943917089892000, + 1.798776304869975200, + 1.798608626514195800, 1.798440882028718500, 1.798273071419711000, + 1.798105194693343500, + 1.797937251855787700, 1.797769242913218800, 1.797601167871813800, + 1.797433026737752700, + 1.797264819517217200, 1.797096546216391900, 1.796928206841463800, + 1.796759801398622100, + 1.796591329894058800, 1.796422792333968000, 1.796254188724546500, + 1.796085519071992900, + 1.795916783382509200, 1.795747981662299200, 1.795579113917569200, + 1.795410180154527900, + 1.795241180379386800, 1.795072114598359200, 1.794902982817661500, + 1.794733785043511900, + 1.794564521282131300, 1.794395191539743400, 1.794225795822573600, + 1.794056334136850300, + 1.793886806488804100, 1.793717212884667900, 1.793547553330677300, + 1.793377827833070100, + 1.793208036398086900, 1.793038179031970000, 1.792868255740965000, + 1.792698266531319400, + 1.792528211409282900, 1.792358090381108300, 1.792187903453050100, + 1.792017650631366100, + 1.791847331922315600, 1.791676947332161000, 1.791506496867166600, + 1.791335980533599300, + 1.791165398337728900, 1.790994750285827000, 1.790824036384167900, + 1.790653256639028100, + 1.790482411056686800, 1.790311499643425500, 1.790140522405528200, + 1.789969479349281100, + 1.789798370480973000, 1.789627195806895200, 1.789455955333341100, + 1.789284649066606800, + 1.789113277012990900, 1.788941839178794100, 1.788770335570319700, + 1.788598766193873600, + 1.788427131055763600, 1.788255430162300400, 1.788083663519796800, + 1.787911831134568300, + 1.787739933012932900, 1.787567969161210300, 1.787395939585723500, + 1.787223844292797500, + 1.787051683288759500, 1.786879456579939700, 1.786707164172670200, + 1.786534806073285700, + 1.786362382288123400, 1.786189892823522700, 1.786017337685825700, + 1.785844716881376700, + 1.785672030416522300, 1.785499278297612000, 1.785326460530997300, + 1.785153577123032000, + 1.784980628080072900, 1.784807613408478300, 1.784634533114609800, + 1.784461387204831400, + 1.784288175685508700, 1.784114898563010200, 1.783941555843707100, + 1.783768147533972200, + 1.783594673640181800, 1.783421134168713800, 1.783247529125948900, + 1.783073858518269700, + 1.782900122352062000, 1.782726320633713200, 1.782552453369613800, + 1.782378520566156200, + 1.782204522229735600, 1.782030458366749200, 1.781856328983596900, + 1.781682134086680900, + 1.781507873682406200, 1.781333547777179200, 1.781159156377410100, + 1.780984699489510200, + 1.780810177119894100, 1.780635589274978600, 1.780460935961182300, + 1.780286217184927000, + 1.780111432952636600, 1.779936583270737400, 1.779761668145658300, + 1.779586687583830200, + 1.779411641591686500, 1.779236530175663600, 1.779061353342199500, + 1.778886111097735000, + 1.778710803448713400, 1.778535430401580100, 1.778359991962783000, + 1.778184488138772900, + 1.778008918936002000, 1.777833284360925900, 1.777657584420002000, + 1.777481819119690200, + 1.777305988466453000, 1.777130092466755200, 1.776954131127064200, + 1.776778104453849100, + 1.776602012453582400, 1.776425855132738100, 1.776249632497793200, + 1.776073344555227000, + 1.775896991311520800, 1.775720572773158900, 1.775544088946627600, + 1.775367539838415700, + 1.775190925455014400, 1.775014245802917200, 1.774837500888620400, + 1.774660690718622000, + 1.774483815299423100, 1.774306874637527000, 1.774129868739439100, + 1.773952797611667100, + 1.773775661260722100, 1.773598459693116500, 1.773421192915365400, + 1.773243860933986400, + 1.773066463755499800, 1.772889001386427800, 1.772711473833295200, + 1.772533881102629000, + 1.772356223200959100, 1.772178500134817100, 1.772000711910737700, + 1.771822858535257600, + 1.771644940014915700, 1.771466956356254000, 1.771288907565816000, + 1.771110793650148500, + 1.770932614615799800, 1.770754370469321400, 1.770576061217266500, + 1.770397686866191300, + 1.770219247422653700, 1.770040742893215000, 1.769862173284438000, + 1.769683538602888000, + 1.769504838855133100, 1.769326074047743700, 1.769147244187292200, + 1.768968349280353800, + 1.768789389333506000, 1.768610364353328600, 1.768431274346403900, + 1.768252119319316400, + 1.768072899278653200, 1.767893614231003800, 1.767714264182959500, + 1.767534849141115100, + 1.767355369112067100, 1.767175824102414000, 1.766996214118757800, + 1.766816539167701800, + 1.766636799255852300, 1.766456994389817600, 1.766277124576209000, + 1.766097189821639300, + 1.765917190132724600, 1.765737125516083000, 1.765556995978334800, + 1.765376801526102700, + 1.765196542166012100, 1.765016217904690900, 1.764835828748768400, + 1.764655374704877700, + 1.764474855779653200, 1.764294271979732100, 1.764113623311754000, + 1.763932909782361100, + 1.763752131398197200, 1.763571288165909400, 1.763390380092146400, + 1.763209407183560200, + 1.763028369446804500, 1.762847266888535100, 1.762666099515411100, + 1.762484867334093400, + 1.762303570351245300, 1.762122208573532600, 1.761940782007623600, + 1.761759290660188400, + 1.761577734537900500, 1.761396113647435000, 1.761214427995469100, + 1.761032677588683800, + 1.760850862433760700, 1.760668982537384900, 1.760487037906243600, + 1.760305028547026500, + 1.760122954466425600, 1.759940815671135100, 1.759758612167851700, + 1.759576343963274600, + 1.759394011064105100, 1.759211613477047200, 1.759029151208807400, + 1.758846624266093800, + 1.758664032655617500, 1.758481376384092500, 1.758298655458233600, + 1.758115869884759700, + 1.757933019670390800, 1.757750104821850000, 1.757567125345862700, + 1.757384081249156100, + 1.757200972538460700, 1.757017799220508500, 1.756834561302034400, + 1.756651258789775800, + 1.756467891690471700, 1.756284460010864200, 1.756100963757697900, + 1.755917402937718900, + 1.755733777557676500, 1.755550087624322000, 1.755366333144409200, + 1.755182514124693900, + 1.754998630571935200, 1.754814682492893600, 1.754630669894332600, + 1.754446592783017500, + 1.754262451165716300, 1.754078245049199600, 1.753893974440240000, + 1.753709639345612600, + 1.753525239772095100, 1.753340775726466700, 1.753156247215510400, + 1.752971654246010300, + 1.752786996824753600, 1.752602274958529500, 1.752417488654129700, + 1.752232637918348200, + 1.752047722757981600, 1.751862743179828600, 1.751677699190690400, + 1.751492590797370600, + 1.751307418006674800, 1.751122180825411800, 1.750936879260391700, + 1.750751513318427700, + 1.750566083006335600, 1.750380588330932500, 1.750195029299038900, + 1.750009405917477100, + 1.749823718193071800, 1.749637966132650900, 1.749452149743043100, + 1.749266269031080700, + 1.749080324003598100, 1.748894314667431800, 1.748708241029421000, + 1.748522103096407300, + 1.748335900875233900, 1.748149634372747200, 1.747963303595795500, + 1.747776908551230000, + 1.747590449245904000, 1.747403925686672500, 1.747217337880393900, + 1.747030685833928200, + 1.746843969554138200, 1.746657189047889200, 1.746470344322048200, + 1.746283435383485100, + 1.746096462239072000, 1.745909424895683200, 1.745722323360195900, + 1.745535157639489100, + 1.745347927740444200, 1.745160633669945200, 1.744973275434878300, + 1.744785853042132300, + 1.744598366498598200, 1.744410815811169300, 1.744223200986741100, + 1.744035522032211900, + 1.743847778954482000, 1.743659971760454200, 1.743472100457033700, + 1.743284165051127700, + 1.743096165549646400, 1.742908101959502100, 1.742719974287608900, + 1.742531782540884100, + 1.742343526726246800, 1.742155206850618800, 1.741966822920923800, + 1.741778374944088000, + 1.741589862927040800, 1.741401286876712800, 1.741212646800037300, + 1.741023942703950200, + 1.740835174595389600, 1.740646342481295900, 1.740457446368612000, + 1.740268486264283200, + 1.740079462175256900, 1.739890374108482600, 1.739701222070913200, + 1.739512006069502800, + 1.739322726111208500, 1.739133382202989500, 1.738943974351807600, + 1.738754502564626700, + 1.738564966848413100, 1.738375367210135400, 1.738185703656765200, + 1.737995976195275000, + 1.737806184832640900, 1.737616329575841300, 1.737426410431856200, + 1.737236427407668800, + 1.737046380510263800, 1.736856269746629000, 1.736666095123754000, + 1.736475856648631400, + 1.736285554328254900, 1.736095188169622500, 1.735904758179732400, + 1.735714264365586700, + 1.735523706734189100, 1.735333085292545900, 1.735142400047666100, + 1.734951651006560100, + 1.734760838176241400, 1.734569961563725600, 1.734379021176030600, + 1.734188017020177100, + 1.733996949103187500, 1.733805817432086900, 1.733614622013902600, + 1.733423362855664100, + 1.733232039964403900, 1.733040653347156300, 1.732849203010957900, + 1.732657688962847600, + 1.732466111209867200, 1.732274469759060200, 1.732082764617472800, + 1.731890995792153600, + 1.731699163290153100, 1.731507267118524500, 1.731315307284323700, + 1.731123283794607800, + 1.730931196656437600, 1.730739045876875200, 1.730546831462985500, + 1.730354553421835600, + 1.730162211760495300, 1.729969806486036500, 1.729777337605533000, + 1.729584805126061400, + 1.729392209054700900, 1.729199549398532400, 1.729006826164639400, + 1.728814039360108100, + 1.728621188992026400, 1.728428275067485100, 1.728235297593577100, + 1.728042256577397200, + 1.727849152026043500, 1.727655983946615700, 1.727462752346216000, + 1.727269457231948900, + 1.727076098610921500, 1.726882676490243000, 1.726689190877025000, + 1.726495641778381200, + 1.726302029201427900, 1.726108353153283900, 1.725914613641069900, + 1.725720810671909300, + 1.725526944252927700, 1.725333014391252900, 1.725139021094015200, + 1.724944964368347000, + 1.724750844221383500, 1.724556660660261800, 1.724362413692121400, + 1.724168103324104300, + 1.723973729563354600, 1.723779292417019200, 1.723584791892246700, + 1.723390227996188600, + 1.723195600735998100, 1.723000910118831300, 1.722806156151846400, + 1.722611338842204000, + 1.722416458197066900, 1.722221514223600100, 1.722026506928971500, + 1.721831436320350800, + 1.721636302404910200, 1.721441105189824000, 1.721245844682269600, + 1.721050520889425600, + 1.720855133818473900, 1.720659683476597900, 1.720464169870984200, + 1.720268593008821100, + 1.720072952897299100, 1.719877249543611900, 1.719681482954954500, + 1.719485653138524800, + 1.719289760101522900, 1.719093803851151400, 1.718897784394614900, + 1.718701701739120400, + 1.718505555891877400, 1.718309346860097600, 1.718113074650995200, + 1.717916739271786500, + 1.717720340729689700, 1.717523879031926500, 1.717327354185719900, + 1.717130766198295700, + 1.716934115076881800, 1.716737400828708400, 1.716540623461008100, + 1.716343782981016200, + 1.716146879395969500, 1.715949912713108100, 1.715752882939673300, + 1.715555790082909900, + 1.715358634150064000, 1.715161415148384500, 1.714964133085122900, + 1.714766787967532600, + 1.714569379802868900, 1.714371908598390800, 1.714174374361358000, + 1.713976777099033700, + 1.713779116818682900, 1.713581393527573000, 1.713383607232973600, + 1.713185757942156800, + 1.712987845662396800, 1.712789870400970700, 1.712591832165157200, + 1.712393730962237500, + 1.712195566799495500, 1.711997339684216700, 1.711799049623689900, + 1.711600696625205300, + 1.711402280696055800, 1.711203801843536700, 1.711005260074945200, + 1.710806655397581600, + 1.710607987818747700, 1.710409257345748100, 1.710210463985889500, + 1.710011607746480600, + 1.709812688634833300, 1.709613706658261100, 1.709414661824080000, + 1.709215554139608400, + 1.709016383612166600, 1.708817150249077900, 1.708617854057667300, + 1.708418495045262300, + 1.708219073219193300, 1.708019588586791700, 1.707820041155392500, + 1.707620430932332400, + 1.707420757924950300, 1.707221022140587900, 1.707021223586588700, + 1.706821362270298600, + 1.706621438199066300, 1.706421451380242000, 1.706221401821179200, + 1.706021289529232800, + 1.705821114511760300, 1.705620876776121600, 1.705420576329679000, + 1.705220213179796900, + 1.705019787333842200, 1.704819298799183700, 1.704618747583193100, + 1.704418133693243800, + 1.704217457136711900, 1.704016717920976000, 1.703815916053416300, + 1.703615051541415900, + 1.703414124392360000, 1.703213134613636100, 1.703012082212634000, + 1.702810967196746000, + 1.702609789573366300, 1.702408549349891500, 1.702207246533721000, + 1.702005881132255800, + 1.701804453152900000, 1.701602962603059100, 1.701401409490141300, + 1.701199793821557300, + 1.700998115604720000, 1.700796374847044300, 1.700594571555948100, + 1.700392705738850400, + 1.700190777403173700, 1.699988786556342300, 1.699786733205783000, + 1.699584617358924400, + 1.699382439023197700, 1.699180198206036600, 1.698977894914877100, + 1.698775529157156700, + 1.698573100940316400, 1.698370610271798800, 1.698168057159048700, + 1.697965441609513300, + 1.697762763630642700, 1.697560023229888200, 1.697357220414704500, + 1.697154355192547900, + 1.696951427570877000, 1.696748437557152900, 1.696545385158839200, + 1.696342270383401200, + 1.696139093238307400, 1.695935853731027600, 1.695732551869034300, + 1.695529187659802400, + 1.695325761110809200, 1.695122272229534000, 1.694918721023458600, + 1.694715107500066800, + 1.694511431666845000, 1.694307693531282000, 1.694103893100868100, + 1.693900030383096900, + 1.693696105385463800, 1.693492118115466500, 1.693288068580604900, + 1.693083956788381500, + 1.692879782746300700, 1.692675546461869900, 1.692471247942597600, + 1.692266887195995600, + 1.692062464229577600, 1.691857979050859900, 1.691653431667360600, + 1.691448822086600400, + 1.691244150316102000, 1.691039416363390800, 1.690834620235994300, + 1.690629761941442100, + 1.690424841487266700, 1.690219858881001800, 1.690014814130184300, + 1.689809707242353200, + 1.689604538225049700, 1.689399307085817300, 1.689194013832201500, + 1.688988658471750600, + 1.688783241012014700, 1.688577761460546800, 1.688372219824901400, + 1.688166616112636100, + 1.687960950331309800, 1.687755222488484600, 1.687549432591724400, + 1.687343580648595700, + 1.687137666666667100, 1.686931690653509000, 1.686725652616694900, + 1.686519552563800400, + 1.686313390502403000, 1.686107166440082600, 1.685900880384421800, + 1.685694532343004600, + 1.685488122323418400, 1.685281650333251900, 1.685075116380096800, + 1.684868520471546600, + 1.684661862615197000, 1.684455142818646700, 1.684248361089495800, + 1.684041517435347400, + 1.683834611863806100, 1.683627644382479800, 1.683420614998977900, + 1.683213523720911800, + 1.683006370555896400, 1.682799155511547600, 1.682591878595484300, + 1.682384539815327400, + 1.682177139178700400, 1.681969676693228600, 1.681762152366539600, + 1.681554566206263900, + 1.681346918220033800, 1.681139208415483700, 1.680931436800250600, + 1.680723603381973500, + 1.680515708168294200, 1.680307751166856300, 1.680099732385305300, + 1.679891651831290100, + 1.679683509512460900, 1.679475305436470600, 1.679267039610974300, + 1.679058712043629300, + 1.678850322742095200, 1.678641871714033900, 1.678433358967109400, + 1.678224784508988400, + 1.678016148347339300, 1.677807450489833300, 1.677598690944143400, + 1.677389869717945000, + 1.677180986818916300, 1.676972042254736900, 1.676763036033089600, + 1.676553968161658600, + 1.676344838648130600, 1.676135647500194700, 1.675926394725542700, + 1.675717080331867900, + 1.675507704326866200, 1.675298266718235900, 1.675088767513677200, + 1.674879206720892900, + 1.674669584347587800, 1.674459900401469700, 1.674250154890247300, + 1.674040347821632800, + 1.673830479203340000, 1.673620549043085500, 1.673410557348587600, + 1.673200504127567000, + 1.672990389387746700, 1.672780213136852300, 1.672569975382611300, + 1.672359676132753500, + 1.672149315395010900, 1.671938893177118000, 1.671728409486811500, + 1.671517864331830000, + 1.671307257719914800, 1.671096589658809500, 1.670885860156259300, + 1.670675069220012500, + 1.670464216857819200, 1.670253303077431800, 1.670042327886605200, + 1.669831291293095900, + 1.669620193304663500, 1.669409033929069500, 1.669197813174077200, + 1.668986531047453000, + 1.668775187556965000, 1.668563782710383600, 1.668352316515481700, + 1.668140788980034400, + 1.667929200111818400, 1.667717549918614100, 1.667505838408202700, + 1.667294065588368100, + 1.667082231466896900, 1.666870336051577800, 1.666658379350201000, + 1.666446361370560000, + 1.666234282120450100, 1.666022141607668600, 1.665809939840015500, + 1.665597676825292700, + 1.665385352571304500, 1.665172967085857700, 1.664960520376761000, + 1.664748012451825200, + 1.664535443318863900, 1.664322812985692600, 1.664110121460129000, + 1.663897368749993400, + 1.663684554863107800, 1.663471679807296800, 1.663258743590387400, + 1.663045746220208600, + 1.662832687704591800, 1.662619568051370500, 1.662406387268380100, + 1.662193145363459100, + 1.661979842344447600, 1.661766478219188300, 1.661553052995526000, + 1.661339566681307600, + 1.661126019284382200, 1.660912410812601900, 1.660698741273819700, + 1.660485010675892400, + 1.660271219026677700, 1.660057366334036300, 1.659843452605831200, + 1.659629477849926800, + 1.659415442074190900, 1.659201345286492900, 1.658987187494704200, + 1.658772968706699000, + 1.658558688930353400, 1.658344348173546300, 1.658129946444157700, + 1.657915483750071100, + 1.657700960099171200, 1.657486375499345900, 1.657271729958484500, + 1.657057023484479000, + 1.656842256085223800, 1.656627427768615000, 1.656412538542551200, + 1.656197588414933600, + 1.655982577393664700, 1.655767505486650500, 1.655552372701798200, + 1.655337179047017700, + 1.655121924530220900, 1.654906609159322500, 1.654691232942238500, + 1.654475795886888300, + 1.654260298001192200, 1.654044739293073900, 1.653829119770458900, + 1.653613439441274500, + 1.653397698313451300, 1.653181896394921000, 1.652966033693617800, + 1.652750110217479100, + 1.652534125974443000, 1.652318080972451400, 1.652101975219447200, + 1.651885808723375900, + 1.651669581492185300, 1.651453293533826000, 1.651236944856249600, + 1.651020535467411200, + 1.650804065375267400, 1.650587534587776700, 1.650370943112901000, + 1.650154290958603300, + 1.649937578132849400, 1.649720804643607400, 1.649503970498847200, + 1.649287075706541200, + 1.649070120274664000, 1.648853104211192700, 1.648636027524106100, + 1.648418890221385400, + 1.648201692311014300, 1.647984433800978600, 1.647767114699266100, + 1.647549735013867000, + 1.647332294752774200, 1.647114793923981600, 1.646897232535486500, + 1.646679610595287900, + 1.646461928111387300, 1.646244185091788400, 1.646026381544496400, + 1.645808517477519700, + 1.645590592898868600, 1.645372607816555400, 1.645154562238594800, + 1.644936456173004000, + 1.644718289627801600, 1.644500062611009300, 1.644281775130650900, + 1.644063427194751600, + 1.643845018811340300, 1.643626549988446200, 1.643408020734102600, + 1.643189431056343700, + 1.642970780963206800, 1.642752070462730800, 1.642533299562957100, + 1.642314468271929300, + 1.642095576597693200, 1.641876624548297000, 1.641657612131790500, + 1.641438539356226500, + 1.641219406229659700, 1.641000212760146800, 1.640780958955747200, + 1.640561644824521700, + 1.640342270374534500, 1.640122835613851100, 1.639903340550539200, + 1.639683785192669600, + 1.639464169548314100, 1.639244493625547900, 1.639024757432447500, + 1.638804960977092100, + 1.638585104267562800, 1.638365187311943400, 1.638145210118319400, + 1.637925172694778800, + 1.637705075049411800, 1.637484917190310800, 1.637264699125570200, + 1.637044420863286600, + 1.636824082411559600, 1.636603683778490100, 1.636383224972181500, + 1.636162706000739300, + 1.635942126872271800, 1.635721487594888400, 1.635500788176702100, + 1.635280028625826900, + 1.635059208950379700, 1.634838329158479200, 1.634617389258246700, + 1.634396389257805700, + 1.634175329165281400, 1.633954208988801700, 1.633733028736496400, + 1.633511788416498000, + 1.633290488036940500, 1.633069127605960800, 1.632847707131697600, + 1.632626226622291700, + 1.632404686085886300, 1.632183085530627200, 1.631961424964661700, + 1.631739704396139900, + 1.631517923833213400, 1.631296083284036900, 1.631074182756766300, + 1.630852222259560700, + 1.630630201800580900, 1.630408121387990000, 1.630185981029953000, + 1.629963780734637400, + 1.629741520510213000, 1.629519200364851800, 1.629296820306727700, + 1.629074380344017100, + 1.628851880484898200, 1.628629320737551700, 1.628406701110161100, + 1.628184021610910700, + 1.627961282247988300, 1.627738483029583100, 1.627515623963887000, + 1.627292705059093700, + 1.627069726323399500, 1.626846687765002700, 1.626623589392103500, + 1.626400431212904800, + 1.626177213235611400, 1.625953935468430500, 1.625730597919571300, + 1.625507200597245500, + 1.625283743509666300, 1.625060226665050000, 1.624836650071614500, + 1.624613013737580000, + 1.624389317671169500, 1.624165561880607000, 1.623941746374119500, + 1.623717871159936300, + 1.623493936246288300, 1.623269941641409400, 1.623045887353534900, + 1.622821773390902700, + 1.622597599761753000, 1.622373366474327800, 1.622149073536871800, + 1.621924720957631300, + 1.621700308744855200, 1.621475836906794500, 1.621251305451702400, + 1.621026714387834300, + 1.620802063723447700, 1.620577353466802700, 1.620352583626160500, + 1.620127754209786100, + 1.619902865225945300, 1.619677916682906700, 1.619452908588941300, + 1.619227840952321800, + 1.619002713781323200, 1.618777527084222800, 1.618552280869300300, + 1.618326975144837000, + 1.618101609919117200, 1.617876185200426600, 1.617650700997053500, + 1.617425157317288200, + 1.617199554169423500, 1.616973891561754200, 1.616748169502577200, + 1.616522388000191500, + 1.616296547062898500, 1.616070646699001800, 1.615844686916807300, + 1.615618667724622700, + 1.615392589130757900, 1.615166451143525300, 1.614940253771239400, + 1.614713997022216900, + 1.614487680904776600, 1.614261305427239200, 1.614034870597928400, + 1.613808376425168900, + 1.613581822917288900, 1.613355210082617800, 1.613128537929487500, + 1.612901806466232200, + 1.612675015701188000, 1.612448165642693400, 1.612221256299089200, + 1.611994287678718100, + 1.611767259789925100, 1.611540172641057200, 1.611313026240463800, + 1.611085820596496600, + 1.610858555717509200, 1.610631231611857800, 1.610403848287899700, + 1.610176405753995800, + 1.609948904018508200, 1.609721343089801600, 1.609493722976242900, + 1.609266043686200700, + 1.609038305228046400, 1.608810507610153100, 1.608582650840896200, + 1.608354734928653800, + 1.608126759881805400, 1.607898725708732900, 1.607670632417820500, + 1.607442480017454700, + 1.607214268516024000, 1.606985997921919000, 1.606757668243532500, + 1.606529279489259600, + 1.606300831667497600, 1.606072324786645500, 1.605843758855105300, + 1.605615133881280700, + 1.605386449873577300, 1.605157706840403300, 1.604928904790168700, + 1.604700043731286200, + 1.604471123672170500, 1.604242144621237800, 1.604013106586907400, + 1.603784009577600100, + 1.603554853601739700, 1.603325638667751000, 1.603096364784061900, + 1.602867031959102100, + 1.602637640201303400, 1.602408189519099800, 1.602178679920927900, + 1.601949111415226000, + 1.601719484010434300, 1.601489797714996000, 1.601260052537355700, + 1.601030248485960900, + 1.600800385569260300, 1.600570463795705700, 1.600340483173750400, + 1.600110443711850300, + 1.599880345418463100, 1.599650188302049100, 1.599419972371070500, + 1.599189697633991400, + 1.598959364099278700, 1.598728971775401000, 1.598498520670828900, + 1.598268010794035900, + 1.598037442153496900, 1.597806814757689200, 1.597576128615092200, + 1.597345383734188000, + 1.597114580123460100, 1.596883717791394800, 1.596652796746479600, + 1.596421816997205500, + 1.596190778552064800, 1.595959681419551800, 1.595728525608163700, + 1.595497311126399300, + 1.595266037982759500, 1.595034706185747500, 1.594803315743869000, + 1.594571866665631700, + 1.594340358959544800, 1.594108792634120600, 1.593877167697873100, + 1.593645484159318200, + 1.593413742026974500, 1.593181941309362400, 1.592950082015004700, + 1.592718164152426000, + 1.592486187730153300, 1.592254152756715600, 1.592022059240644400, + 1.591789907190473100, + 1.591557696614737100, 1.591325427521974100, 1.591093099920724200, + 1.590860713819529400, + 1.590628269226933600, 1.590395766151483400, 1.590163204601727100, + 1.589930584586215500, + 1.589697906113501000, 1.589465169192139100, 1.589232373830686400, + 1.588999520037702300, + 1.588766607821748200, 1.588533637191387400, 1.588300608155185600, + 1.588067520721711000, + 1.587834374899533400, 1.587601170697224600, 1.587367908123358900, + 1.587134587186513000, + 1.586901207895265300, 1.586667770258196600, 1.586434274283889500, + 1.586200719980929200, + 1.585967107357902700, 1.585733436423399000, 1.585499707186010200, + 1.585265919654329300, + 1.585032073836952100, 1.584798169742476400, 1.584564207379502500, + 1.584330186756632200, + 1.584096107882470000, 1.583861970765622100, 1.583627775414697000, + 1.583393521838305700, + 1.583159210045060900, 1.582924840043577400, 1.582690411842472700, + 1.582455925450365600, + 1.582221380875877800, 1.581986778127632700, 1.581752117214255900, + 1.581517398144375800, + 1.581282620926621300, 1.581047785569625400, 1.580812892082021900, + 1.580577940472447200, + 1.580342930749539800, 1.580107862921940700, 1.579872736998292100, + 1.579637552987239100, + 1.579402310897428900, 1.579167010737510600, 1.578931652516135700, + 1.578696236241957200, + 1.578460761923630800, 1.578225229569814700, 1.577989639189168100, + 1.577753990790353500, + 1.577518284382034800, 1.577282519972878200, 1.577046697571552000, + 1.576810817186727000, + 1.576574878827075700, 1.576338882501273000, 1.576102828217995600, + 1.575866715985922500, + 1.575630545813735200, 1.575394317710116600, 1.575158031683752300, + 1.574921687743330300, + 1.574685285897539800, 1.574448826155072400, 1.574212308524622500, + 1.573975733014886000, + 1.573739099634561500, 1.573502408392348600, 1.573265659296950300, + 1.573028852357070800, + 1.572791987581417100, 1.572555064978698100, 1.572318084557624800, + 1.572081046326909900, + 1.571843950295269000, 1.571606796471419100, 1.571369584864080100, + 1.571132315481973200, + 1.570894988333822400, 1.570657603428353300, 1.570420160774294000, + 1.570182660380374600, + 1.569945102255327200, 1.569707486407886600, 1.569469812846788500, + 1.569232081580771900, + 1.568994292618577400, 1.568756445968948000, 1.568518541640628400, + 1.568280579642366000, + 1.568042559982909500, 1.567804482671010500, 1.567566347715422500, + 1.567328155124900800, + 1.567089904908203200, 1.566851597074089500, 1.566613231631321500, + 1.566374808588663300, + 1.566136327954881000, 1.565897789738742900, 1.565659193949019400, + 1.565420540594482800, + 1.565181829683907700, 1.564943061226071100, 1.564704235229751500, + 1.564465351703730400, + 1.564226410656790000, 1.563987412097716200, 1.563748356035296000, + 1.563509242478319000, + 1.563270071435576500, 1.563030842915862100, 1.562791556927971800, + 1.562552213480703300, + 1.562312812582856500, 1.562073354243233700, 1.561833838470639200, + 1.561594265273878800, + 1.561354634661761300, 1.561114946643096900, 1.560875201226698900, + 1.560635398421381400, + 1.560395538235961800, 1.560155620679258400, 1.559915645760092900, + 1.559675613487288200, + 1.559435523869669500, 1.559195376916064700, 1.558955172635302800, + 1.558714911036215700, + 1.558474592127637100, 1.558234215918402600, 1.557993782417350400, + 1.557753291633320500, + 1.557512743575155000, 1.557272138251698300, 1.557031475671796400, + 1.556790755844298400, + 1.556549978778054300, 1.556309144481917300, 1.556068252964741600, + 1.555827304235384500, + 1.555586298302704900, 1.555345235175563900, 1.555104114862824600, + 1.554862937373352500, + 1.554621702716015000, 1.554380410899681300, 1.554139061933223200, + 1.553897655825514600, + 1.553656192585431100, 1.553414672221850700, 1.553173094743653300, + 1.552931460159721100, + 1.552689768478938500, 1.552448019710191300, 1.552206213862368500, + 1.551964350944360100, + 1.551722430965059000, 1.551480453933359800, 1.551238419858159700, + 1.550996328748356800, + 1.550754180612852900, 1.550511975460550500, 1.550269713300355100, + 1.550027394141174000, + 1.549785017991916400, 1.549542584861493900, 1.549300094758820000, + 1.549057547692810600, + 1.548814943672383300, 1.548572282706457900, 1.548329564803956300, + 1.548086789973802700, + 1.547843958224923000, 1.547601069566245900, 1.547358124006701400, + 1.547115121555221700, + 1.546872062220741700, 1.546628946012197800, 1.546385772938528600, + 1.546142543008675300, + 1.545899256231580300, 1.545655912616188800, 1.545412512171447700, + 1.545169054906306200, + 1.544925540829715600, 1.544681969950629300, 1.544438342278002600, + 1.544194657820792800, + 1.543950916587959700, 1.543707118588464800, 1.543463263831272000, + 1.543219352325347200, + 1.542975384079658300, 1.542731359103175300, 1.542487277404870100, + 1.542243138993717000, + 1.541998943878692300, 1.541754692068774600, 1.541510383572944000, + 1.541266018400183200, + 1.541021596559476700, 1.540777118059811100, 1.540532582910175500, + 1.540287991119560600, + 1.540043342696959100, 1.539798637651366400, 1.539553875991779300, + 1.539309057727197300, + 1.539064182866621400, 1.538819251419055100, 1.538574263393503800, + 1.538329218798974800, + 1.538084117644477900, 1.537838959939025200, 1.537593745691629500, + 1.537348474911307300, + 1.537103147607076200, 1.536857763787956400, 1.536612323462969800, + 1.536366826641140800, + 1.536121273331495300, 1.535875663543061700, 1.535629997284870400, + 1.535384274565953600, + 1.535138495395346400, 1.534892659782085100, 1.534646767735208000, + 1.534400819263756400, + 1.534154814376772700, 1.533908753083302200, 1.533662635392391700, + 1.533416461313090100, + 1.533170230854448400, 1.532923944025520200, 1.532677600835360600, + 1.532431201293027000, + 1.532184745407578500, 1.531938233188077100, 1.531691664643585900, + 1.531445039783170500, + 1.531198358615898800, 1.530951621150840700, 1.530704827397067800, + 1.530457977363654000, + 1.530211071059675200, 1.529964108494209700, 1.529717089676337500, + 1.529470014615140800, + 1.529222883319703700, 1.528975695799112500, 1.528728452062455600, + 1.528481152118823700, + 1.528233795977309400, 1.527986383647006500, 1.527738915137012400, + 1.527491390456425600, + 1.527243809614346600, 1.526996172619878900, 1.526748479482126700, + 1.526500730210197200, + 1.526252924813199500, 1.526005063300244900, 1.525757145680446200, + 1.525509171962918800, + 1.525261142156779900, 1.525013056271149000, 1.524764914315147200, + 1.524516716297898300, + 1.524268462228527900, 1.524020152116163200, 1.523771785969934000, + 1.523523363798972000, + 1.523274885612411200, 1.523026351419387100, 1.522777761229038100, + 1.522529115050503600, + 1.522280412892925900, 1.522031654765448900, 1.521782840677218700, + 1.521533970637383800, + 1.521285044655094300, 1.521036062739502300, 1.520787024899762100, + 1.520537931145030400, + 1.520288781484465700, 1.520039575927228500, 1.519790314482481100, + 1.519540997159388300, + 1.519291623967116600, 1.519042194914835200, 1.518792710011714500, + 1.518543169266927600, + 1.518293572689648900, 1.518043920289055900, 1.517794212074327500, + 1.517544448054644500, + 1.517294628239190400, 1.517044752637150000, 1.516794821257710500, + 1.516544834110061600, + 1.516294791203394200, 1.516044692546901800, 1.515794538149779700, + 1.515544328021225500, + 1.515294062170438700, 1.515043740606620800, 1.514793363338975600, + 1.514542930376708600, + 1.514292441729027300, 1.514041897405141700, 1.513791297414263800, + 1.513540641765606800, + 1.513289930468387300, 1.513039163531823000, 1.512788340965133500, + 1.512537462777541200, + 1.512286528978270300, 1.512035539576546600, 1.511784494581598600, + 1.511533394002656100, + 1.511282237848951400, 1.511031026129719100, 1.510779758854195400, + 1.510528436031618900, + 1.510277057671229400, 1.510025623782270000, 1.509774134373984800, + 1.509522589455620600, + 1.509270989036425800, 1.509019333125651200, 1.508767621732549400, + 1.508515854866375100, + 1.508264032536385000, 1.508012154751837700, 1.507760221521994700, + 1.507508232856118200, + 1.507256188763473200, 1.507004089253327000, 1.506751934334948000, + 1.506499724017607900, + 1.506247458310579400, 1.505995137223137500, 1.505742760764559300, + 1.505490328944124200, + 1.505237841771113200, 1.504985299254809800, 1.504732701404498900, + 1.504480048229468000, + 1.504227339739006500, 1.503974575942405700, 1.503721756848958700, + 1.503468882467961600, + 1.503215952808711500, 1.502962967880507600, 1.502709927692651900, + 1.502456832254447600, + 1.502203681575200700, 1.501950475664218600, 1.501697214530810700, + 1.501443898184289200, + 1.501190526633967600, 1.500937099889161600, 1.500683617959188900, + 1.500430080853369500, + 1.500176488581024900, 1.499922841151479600, 1.499669138574058800, + 1.499415380858090800, + 1.499161568012905300, 1.498907700047834600, 1.498653776972212600, + 1.498399798795375000, + 1.498145765526660300, 1.497891677175408500, 1.497637533750961300, + 1.497383335262663300, + 1.497129081719860400, 1.496874773131900800, 1.496620409508134800, + 1.496365990857914600, + 1.496111517190594300, 1.495856988515530400, 1.495602404842080800, + 1.495347766179606400, + 1.495093072537469100, 1.494838323925033400, 1.494583520351665500, + 1.494328661826734200, + 1.494073748359609600, 1.493818779959664300, 1.493563756636272500, + 1.493308678398810800, + 1.493053545256657800, 1.492798357219194100, 1.492543114295801900, + 1.492287816495866200, + 1.492032463828773200, 1.491777056303911700, 1.491521593930672100, + 1.491266076718446900, + 1.491010504676631500, 1.490754877814621800, 1.490499196141816600, + 1.490243459667616600, + 1.489987668401424800, 1.489731822352645500, 1.489475921530685900, + 1.489219965944954300, + 1.488963955604861500, 1.488707890519820600, 1.488451770699245900, + 1.488195596152554800, + 1.487939366889165600, 1.487683082918499300, 1.487426744249978400, + 1.487170350893028500, + 1.486913902857075700, 1.486657400151549600, 1.486400842785880100, + 1.486144230769501000, + 1.485887564111846500, 1.485630842822354100, 1.485374066910462500, + 1.485117236385612200, + 1.484860351257246500, 1.484603411534810300, 1.484346417227750700, + 1.484089368345516300, + 1.483832264897558400, 1.483575106893329600, 1.483317894342285100, + 1.483060627253882000, + 1.482803305637578900, 1.482545929502837100, 1.482288498859119400, + 1.482031013715890700, + 1.481773474082618300, 1.481515879968770900, 1.481258231383819800, + 1.481000528337237800, + 1.480742770838499900, 1.480484958897083200, 1.480227092522466500, + 1.479969171724131200, + 1.479711196511560100, 1.479453166894238100, 1.479195082881652200, + 1.478936944483291600, + 1.478678751708647000, 1.478420504567211900, 1.478162203068481100, + 1.477903847221951400, + 1.477645437037121900, 1.477386972523493800, 1.477128453690569800, + 1.476869880547855300, + 1.476611253104856700, 1.476352571371083700, 1.476093835356046700, + 1.475835045069259000, + 1.475576200520235500, 1.475317301718493300, 1.475058348673551100, + 1.474799341394929900, + 1.474540279892153000, 1.474281164174744900, 1.474021994252233000, + 1.473762770134145800, + 1.473503491830014300, 1.473244159349371700, 1.472984772701752900, + 1.472725331896694400, + 1.472465836943735600, 1.472206287852416900, 1.471946684632281500, + 1.471687027292874400, + 1.471427315843742100, 1.471167550294433700, 1.470907730654499800, + 1.470647856933493300, + 1.470387929140969200, 1.470127947286484100, 1.469867911379596900, + 1.469607821429868500, + 1.469347677446861500, 1.469087479440140300, 1.468827227419272200, + 1.468566921393825700, + 1.468306561373371900, 1.468046147367482600, 1.467785679385733300, + 1.467525157437700200, + 1.467264581532962100, 1.467003951681099800, 1.466743267891695800, + 1.466482530174334500, + 1.466221738538602500, 1.465960892994088800, 1.465699993550383400, + 1.465439040217079400, + 1.465178033003770700, 1.464916971920054100, 1.464655856975527900, + 1.464394688179792900, + 1.464133465542451200, 1.463872189073107500, 1.463610858781367900, + 1.463349474676840700, + 1.463088036769136600, 1.462826545067867700, 1.462564999582648600, + 1.462303400323095000, + 1.462041747298825900, 1.461780040519460800, 1.461518279994622200, + 1.461256465733934400, + 1.460994597747023600, 1.460732676043517800, 1.460470700633046800, + 1.460208671525243400, + 1.459946588729741100, 1.459684452256176300, 1.459422262114186800, + 1.459160018313412400, + 1.458897720863495500, 1.458635369774079500, 1.458372965054810700, + 1.458110506715337000, + 1.457847994765308200, 1.457585429214375700, 1.457322810072193800, + 1.457060137348418000, + 1.456797411052706200, 1.456534631194717800, 1.456271797784114900, + 1.456008910830560500, + 1.455745970343720800, 1.455482976333263100, 1.455219928808857200, + 1.454956827780174100, + 1.454693673256887600, 1.454430465248673300, 1.454167203765208000, + 1.453903888816171900, + 1.453640520411245900, 1.453377098560113100, 1.453113623272459100, + 1.452850094557971000, + 1.452586512426338000, 1.452322876887251400, 1.452059187950404100, + 1.451795445625491300, + 1.451531649922210200, 1.451267800850259500, 1.451003898419340500, + 1.450739942639155800, + 1.450475933519410400, 1.450211871069811300, 1.449947755300067500, + 1.449683586219889400, + 1.449419363838989800, 1.449155088167083600, 1.448890759213887100, + 1.448626376989119400, + 1.448361941502500900, 1.448097452763754000, 1.447832910782603100, + 1.447568315568775100, + 1.447303667131997900, 1.447038965482002200, 1.446774210628520200, + 1.446509402581286400, + 1.446244541350036700, 1.445979626944509300, 1.445714659374444500, + 1.445449638649584500, + 1.445184564779673500, 1.444919437774456700, 1.444654257643682900, + 1.444389024397101600, + 1.444123738044464900, 1.443858398595526400, 1.443593006060042100, + 1.443327560447769600, + 1.443062061768468400, 1.442796510031900500, 1.442530905247829200, + 1.442265247426020200, + 1.441999536576240800, 1.441733772708260600, 1.441467955831850800, + 1.441202085956784900, + 1.440936163092837900, 1.440670187249787600, 1.440404158437412500, + 1.440138076665494100, + 1.439871941943815300, 1.439605754282161400, 1.439339513690319100, + 1.439073220178077400, + 1.438806873755226900, 1.438540474431560600, 1.438274022216873500, + 1.438007517120961900, + 1.437740959153624500, 1.437474348324662100, 1.437207684643876800, + 1.436940968121073600, + 1.436674198766058500, 1.436407376588640000, 1.436140501598628400, + 1.435873573805835900, + 1.435606593220076600, 1.435339559851166500, 1.435072473708924000, + 1.434805334803169100, + 1.434538143143723200, 1.434270898740410700, 1.434003601603057300, + 1.433736251741490700, + 1.433468849165540500, 1.433201393885038500, 1.432933885909818000, + 1.432666325249714700, + 1.432398711914566200, 1.432131045914211600, 1.431863327258492400, + 1.431595555957251700, + 1.431327732020334800, 1.431059855457588600, 1.430791926278862400, + 1.430523944494007400, + 1.430255910112876000, 1.429987823145323100, 1.429719683601205800, + 1.429451491490382900, + 1.429183246822714800, 1.428914949608064200, 1.428646599856295400, + 1.428378197577275100, + 1.428109742780871800, 1.427841235476955400, 1.427572675675398600, + 1.427304063386075200, + 1.427035398618861500, 1.426766681383635500, 1.426497911690277000, + 1.426229089548668200, + 1.425960214968693000, 1.425691287960236600, 1.425422308533187200, + 1.425153276697434000, + 1.424884192462868800, 1.424615055839385300, 1.424345866836878200, + 1.424076625465245500, + 1.423807331734385800, 1.423537985654200800, 1.423268587234593400, + 1.422999136485468600, + 1.422729633416733200, 1.422460078038296300, 1.422190470360068300, + 1.421920810391962500, + 1.421651098143893000, 1.421381333625776600, 1.421111516847531700, + 1.420841647819078600, + 1.420571726550339700, 1.420301753051239400, 1.420031727331703800, + 1.419761649401660500, + 1.419491519271040000, 1.419221336949774100, 1.418951102447796800, + 1.418680815775043500, + 1.418410476941452100, 1.418140085956961900, 1.417869642831514700, + 1.417599147575054000, + 1.417328600197524900, 1.417058000708874700, 1.416787349119052600, + 1.416516645438009600, + 1.416245889675698900, 1.415975081842075300, 1.415704221947095700, + 1.415433310000718600, + 1.415162346012905000, 1.414891329993617200, 1.414620261952819600, + 1.414349141900479000, + 1.414077969846563500, 1.413806745801043500, 1.413535469773890700, + 1.413264141775079300, + 1.412992761814585400, 1.412721329902386900, 1.412449846048463600, + 1.412178310262796900, + 1.411906722555370500, 1.411635082936170100, 1.411363391415182900, + 1.411091648002398500, + 1.410819852707807700, 1.410548005541404100, 1.410276106513182400, + 1.410004155633139500, + 1.409732152911274500, 1.409460098357588200, 1.409187991982083100, + 1.408915833794763800, + 1.408643623805636800, 1.408371362024710500, 1.408099048461995300, + 1.407826683127503000, + 1.407554266031248100, 1.407281797183246500, 1.407009276593515800, + 1.406736704272076400, + 1.406464080228949600, 1.406191404474159000, 1.405918677017730100, + 1.405645897869690400, + 1.405373067040069300, 1.405100184538898000, 1.404827250376209400, + 1.404554264562038400, + 1.404281227106422400, 1.404008138019399800, 1.403734997311011600, + 1.403461804991300100, + 1.403188561070310100, 1.402915265558087700, 1.402641918464681400, + 1.402368519800141200, + 1.402095069574519800, 1.401821567797870300, 1.401548014480249000, + 1.401274409631713600, + 1.401000753262323900, 1.400727045382141400, 1.400453286001229800, + 1.400179475129653700, + 1.399905612777481200, 1.399631698954780800, 1.399357733671623900, + 1.399083716938083600, + 1.398809648764234100, 1.398535529160152400, 1.398261358135917300, + 1.397987135701609200, + 1.397712861867310300, 1.397438536643105000, 1.397164160039079200, + 1.396889732065321300, + 1.396615252731921100, 1.396340722048970300, 1.396066140026562800, + 1.395791506674794100, + 1.395516822003761700, 1.395242086023564800, 1.394967298744304900, + 1.394692460176085300, + 1.394417570329010700, 1.394142629213188000, 1.393867636838725900, + 1.393592593215735600, + 1.393317498354329300, 1.393042352264621600, 1.392767154956728400, + 1.392491906440768600, + 1.392216606726861800, 1.391941255825130100, 1.391665853745697400, + 1.391390400498689700, + 1.391114896094234100, 1.390839340542460600, 1.390563733853500200, + 1.390288076037486500, + 1.390012367104554600, 1.389736607064841100, 1.389460795928485500, + 1.389184933705628300, + 1.388909020406412100, 1.388633056040981600, 1.388357040619483200, + 1.388080974152065200, + 1.387804856648877600, 1.387528688120072600, 1.387252468575804100, + 1.386976198026228100, + 1.386699876481501900, 1.386423503951785200, 1.386147080447239600, + 1.385870605978028100, + 1.385594080554316100, 1.385317504186270900, 1.385040876884061000, + 1.384764198657857200, + 1.384487469517832200, 1.384210689474160600, 1.383933858537019100, + 1.383656976716585600, + 1.383380044023040400, 1.383103060466565300, 1.382826026057344600, + 1.382548940805563800, + 1.382271804721410600, 1.381994617815074400, 1.381717380096746800, + 1.381440091576620700, + 1.381162752264891500, 1.380885362171756300, 1.380607921307413400, + 1.380330429682064000, + 1.380052887305910400, 1.379775294189157000, 1.379497650342010400, + 1.379219955774678700, + 1.378942210497371600, 1.378664414520301500, 1.378386567853681700, + 1.378108670507728300, + 1.377830722492658500, 1.377552723818691500, 1.377274674496048700, + 1.376996574534953300, + 1.376718423945630000, 1.376440222738305700, 1.376161970923209400, + 1.375883668510570900, + 1.375605315510623200, 1.375326911933600200, 1.375048457789738400, + 1.374769953089275400, + 1.374491397842451100, 1.374212792059507100, 1.373934135750687100, + 1.373655428926236400, + 1.373376671596402400, 1.373097863771434200, 1.372819005461582500, + 1.372540096677100200, + 1.372261137428242300, 1.371982127725264800, 1.371703067578426700, + 1.371423956997988000, + 1.371144795994210500, 1.370865584577358300, 1.370586322757697500, + 1.370307010545495500, + 1.370027647951022100, 1.369748234984548000, 1.369468771656347200, + 1.369189257976694200, + 1.368909693955866000, 1.368630079604142000, 1.368350414931802000, + 1.368070699949128800, + 1.367790934666406600, 1.367511119093921800, 1.367231253241962200, + 1.366951337120818000, + 1.366671370740780500, 1.366391354112143500, 1.366111287245202400, + 1.365831170150254300, + 1.365551002837598600, 1.365270785317536100, 1.364990517600369400, + 1.364710199696403300, + 1.364429831615944200, 1.364149413369300600, 1.363868944966782900, + 1.363588426418702600, + 1.363307857735373900, 1.363027238927112300, 1.362746570004235400, + 1.362465850977062900, + 1.362185081855915600, 1.361904262651116900, 1.361623393372991300, + 1.361342474031866000, + 1.361061504638069400, 1.360780485201932300, 1.360499415733786400, + 1.360218296243966200, + 1.359937126742807300, 1.359655907240648000, 1.359374637747827700, + 1.359093318274687800, + 1.358811948831571500, 1.358530529428824400, 1.358249060076792900, + 1.357967540785826300, + 1.357685971566275200, 1.357404352428492000, 1.357122683382830900, + 1.356840964439648200, + 1.356559195609301700, 1.356277376902151900, 1.355995508328559500, + 1.355713589898888800, + 1.355431621623504700, 1.355149603512774400, 1.354867535577067200, + 1.354585417826753800, + 1.354303250272206500, 1.354021032923800300, 1.353738765791911100, + 1.353456448886917200, + 1.353174082219199100, 1.352891665799137900, 1.352609199637117500, + 1.352326683743523300, + 1.352044118128742600, 1.351761502803164900, 1.351478837777180700, + 1.351196123061183100, + 1.350913358665566400, 1.350630544600727200, 1.350347680877063800, + 1.350064767504976400, + 1.349781804494866600, 1.349498791857138400, 1.349215729602197400, + 1.348932617740450600, + 1.348649456282307700, 1.348366245238179500, 1.348082984618478800, + 1.347799674433620500, + 1.347516314694020800, 1.347232905410098200, 1.346949446592273100, + 1.346665938250967100, + 1.346382380396604000, 1.346098773039609700, 1.345815116190411300, + 1.345531409859438200, + 1.345247654057121700, 1.344963848793894200, 1.344679994080190800, + 1.344396089926448000, + 1.344112136343103900, 1.343828133340598800, 1.343544080929374800, + 1.343259979119875600, + 1.342975827922546600, 1.342691627347835500, 1.342407377406191500, + 1.342123078108065700, + 1.341838729463910900, 1.341554331484181600, 1.341269884179334700, + 1.340985387559828100, + 1.340700841636122400, 1.340416246418678800, 1.340131601917961900, + 1.339846908144436600, + 1.339562165108570700, 1.339277372820833400, 1.338992531291695500, + 1.338707640531629800, + 1.338422700551110900, 1.338137711360615200, 1.337852672970621300, + 1.337567585391608900, + 1.337282448634059800, 1.336997262708457900, 1.336712027625288600, + 1.336426743395039000, + 1.336141410028198500, 1.335856027535258000, 1.335570595926709700, + 1.335285115213048500, + 1.334999585404770700, 1.334714006512374400, 1.334428378546359500, + 1.334142701517227600, + 1.333856975435482300, 1.333571200311629100, 1.333285376156174700, + 1.332999502979628700, + 1.332713580792501500, 1.332427609605305400, 1.332141589428554900, + 1.331855520272766200, + 1.331569402148457400, 1.331283235066148100, 1.330997019036359800, + 1.330710754069615700, + 1.330424440176441300, 1.330138077367363200, 1.329851665652910500, + 1.329565205043613800, + 1.329278695550004700, 1.328992137182618100, 1.328705529951989400, + 1.328418873868656900, + 1.328132168943159800, 1.327845415186039000, 1.327558612607838500, + 1.327271761219102500, + 1.326984861030378000, 1.326697912052213500, 1.326410914295159400, + 1.326123867769767500, + 1.325836772486591800, 1.325549628456188100, 1.325262435689113600, + 1.324975194195928000, + 1.324687903987191900, 1.324400565073468300, 1.324113177465321900, + 1.323825741173318700, + 1.323538256208027800, 1.323250722580018500, 1.322963140299862500, + 1.322675509378133900, + 1.322387829825407700, 1.322100101652261100, 1.321812324869273500, + 1.321524499487024800, + 1.321236625516098100, 1.320948702967077400, 1.320660731850549000, + 1.320372712177100700, + 1.320084643957322400, 1.319796527201805300, 1.319508361921142500, + 1.319220148125929100, + 1.318931885826762000, 1.318643575034239800, 1.318355215758962900, + 1.318066808011533200, + 1.317778351802554800, 1.317489847142633300, 1.317201294042376300, + 1.316912692512393300, + 1.316624042563294900, 1.316335344205694200, 1.316046597450205800, + 1.315757802307445900, + 1.315468958788033000, 1.315180066902586800, 1.314891126661728900, + 1.314602138076083300, + 1.314313101156274800, 1.314024015912930600, 1.313734882356679900, + 1.313445700498152800, + 1.313156470347981900, 1.312867191916801100, 1.312577865215246900, + 1.312288490253956900, + 1.311999067043570200, 1.311709595594728000, 1.311420075918073900, + 1.311130508024252400, + 1.310840891923910100, 1.310551227627695400, 1.310261515146258200, + 1.309971754490250700, + 1.309681945670326400, 1.309392088697140900, 1.309102183581351200, + 1.308812230333616500, + 1.308522228964597500, 1.308232179484956500, 1.307942081905358000, + 1.307651936236467800, + 1.307361742488954300, 1.307071500673486800, 1.306781210800736200, + 1.306490872881376200, + 1.306200486926081700, 1.305910052945529200, 1.305619570950396800, + 1.305329040951365100, + 1.305038462959116100, 1.304747836984333300, 1.304457163037702200, + 1.304166441129910300, + 1.303875671271646400, 1.303584853473601200, 1.303293987746467300, + 1.303003074100939100, + 1.302712112547712800, 1.302421103097485900, 1.302130045760958100, + 1.301838940548830600, + 1.301547787471806900, 1.301256586540591600, 1.300965337765891600, + 1.300674041158414800, + 1.300382696728871400, 1.300091304487973800, 1.299799864446435200, + 1.299508376614971500, + 1.299216841004299200, 1.298925257625137800, 1.298633626488207500, + 1.298341947604231300, + 1.298050220983932900, 1.297758446638038700, 1.297466624577275900, + 1.297174754812374400, + 1.296882837354065100, 1.296590872213081200, 1.296298859400157700, + 1.296006798926030200, + 1.295714690801437600, 1.295422535037119800, 1.295130331643818500, + 1.294838080632277000, + 1.294545782013240900, 1.294253435797456900, 1.293961041995673700, + 1.293668600618642000, + 1.293376111677113900, 1.293083575181843500, 1.292790991143586200, + 1.292498359573099700, + 1.292205680481143500, 1.291912953878477900, 1.291620179775866400, + 1.291327358184073200, + 1.291034489113864100, 1.290741572576007400, 1.290448608581273000, + 1.290155597140431700, + 1.289862538264257700, 1.289569431963524900, 1.289276278249010600, + 1.288983077131493000, + 1.288689828621752300, 1.288396532730570400, 1.288103189468731400, + 1.287809798847019800, + 1.287516360876223500, 1.287222875567130900, 1.286929342930532800, + 1.286635762977221800, + 1.286342135717991600, 1.286048461163638000, 1.285754739324958900, + 1.285460970212753500, + 1.285167153837822900, 1.284873290210969900, 1.284579379342998700, + 1.284285421244715900, + 1.283991415926929400, 1.283697363400448900, 1.283403263676086100, + 1.283109116764654000, + 1.282814922676967400, 1.282520681423843000, 1.282226393016099500, + 1.281932057464557000, + 1.281637674780037100, 1.281343244973363700, 1.281048768055361900, + 1.280754244036858900, + 1.280459672928683500, 1.280165054741666300, 1.279870389486639400, + 1.279575677174437100, + 1.279280917815894600, 1.278986111421849900, 1.278691258003142000, + 1.278396357570611900, + 1.278101410135101800, 1.277806415707456700, 1.277511374298522200, + 1.277216285919146500, + 1.276921150580179200, 1.276625968292471000, 1.276330739066875400, + 1.276035462914247000, + 1.275740139845442400, 1.275444769871319600, 1.275149353002738700, + 1.274853889250561200, + 1.274558378625650200, 1.274262821138871300, 1.273967216801090900, + 1.273671565623178100, + 1.273375867616002300, 1.273080122790436000, 1.272784331157352800, + 1.272488492727628100, + 1.272192607512139300, 1.271896675521764900, 1.271600696767385400, + 1.271304671259883200, + 1.271008599010142500, 1.270712480029048800, 1.270416314327489800, + 1.270120101916354600, + 1.269823842806533800, 1.269527537008920300, 1.269231184534408200, + 1.268934785393893700, + 1.268638339598274500, 1.268341847158450200, 1.268045308085321800, + 1.267748722389792100, + 1.267452090082765900, 1.267155411175149500, 1.266858685677851000, + 1.266561913601780100, + 1.266265094957848000, 1.265968229756968100, 1.265671318010055400, + 1.265374359728026500, + 1.265077354921799300, 1.264780303602294200, 1.264483205780432700, + 1.264186061467138500, + 1.263888870673336400, 1.263591633409954000, 1.263294349687918800, + 1.262997019518161700, + 1.262699642911614600, 1.262402219879211300, 1.262104750431887000, + 1.261807234580578900, + 1.261509672336225600, 1.261212063709767900, 1.260914408712147800, + 1.260616707354309500, + 1.260318959647198400, 1.260021165601761900, 1.259723325228949000, + 1.259425438539710300, + 1.259127505544998600, 1.258829526255768000, 1.258531500682973800, + 1.258233428837574300, + 1.257935310730528000, 1.257637146372796400, 1.257338935775342200, + 1.257040678949129500, + 1.256742375905124400, 1.256444026654294400, 1.256145631207609400, + 1.255847189576040100, + 1.255548701770560000, 1.255250167802143000, 1.254951587681765600, + 1.254652961420405600, + 1.254354289029042900, 1.254055570518658500, 1.253756805900235700, + 1.253457995184759300, + 1.253159138383215200, 1.252860235506592100, 1.252561286565879300, + 1.252262291572068900, + 1.251963250536153500, 1.251664163469128300, 1.251365030381989700, + 1.251065851285736200, + 1.250766626191367500, 1.250467355109885500, 1.250168038052293500, + 1.249868675029596200, + 1.249569266052800800, 1.249269811132915200, 1.248970310280950200, + 1.248670763507917100, + 1.248371170824829300, 1.248071532242702100, 1.247771847772552300, + 1.247472117425398700, + 1.247172341212261500, 1.246872519144162300, 1.246572651232124700, + 1.246272737487174300, + 1.245972777920338000, 1.245672772542644400, 1.245372721365123600, + 1.245072624398807900, + 1.244772481654731000, 1.244472293143928300, 1.244172058877436800, + 1.243871778866295400, + 1.243571453121544000, 1.243271081654225400, 1.242970664475383100, + 1.242670201596062700, + 1.242369693027311200, 1.242069138780177400, 1.241768538865712000, + 1.241467893294967200, + 1.241167202078996800, 1.240866465228856100, 1.240565682755603100, + 1.240264854670295900, + 1.239963980983995300, 1.239663061707763700, 1.239362096852665300, + 1.239061086429765300, + 1.238760030450130900, 1.238458928924831600, 1.238157781864937400, + 1.237856589281521000, + 1.237555351185656500, 1.237254067588419400, 1.236952738500886900, + 1.236651363934138300, + 1.236349943899254000, 1.236048478407316500, 1.235746967469409900, + 1.235445411096619500, + 1.235143809300033300, 1.234842162090739700, 1.234540469479829900, + 1.234238731478396000, + 1.233936948097532400, 1.233635119348334400, 1.233333245241899200, + 1.233031325789326400, + 1.232729361001716500, 1.232427350890172000, 1.232125295465796600, + 1.231823194739696300, + 1.231521048722978200, 1.231218857426751700, 1.230916620862127400, + 1.230614339040217800, + 1.230312011972136500, 1.230009639668999500, 1.229707222141924100, + 1.229404759402029400, + 1.229102251460436400, 1.228799698328266700, 1.228497100016644900, + 1.228194456536696500, + 1.227891767899548700, 1.227589034116330700, 1.227286255198173100, + 1.226983431156208200, + 1.226680562001569900, 1.226377647745394000, 1.226074688398817600, + 1.225771683972980200, + 1.225468634479021500, 1.225165539928084300, 1.224862400331312400, + 1.224559215699851500, + 1.224255986044848500, 1.223952711377453100, 1.223649391708814700, + 1.223346027050086400, + 1.223042617412421600, 1.222739162806975900, 1.222435663244906700, + 1.222132118737372400, + 1.221828529295533800, 1.221524894930552800, 1.221221215653593100, + 1.220917491475820500, + 1.220613722408401900, 1.220309908462505800, 1.220006049649302800, + 1.219702145979964600, + 1.219398197465665400, 1.219094204117580300, 1.218790165946886100, + 1.218486082964761500, + 1.218181955182386500, 1.217877782610943700, 1.217573565261616000, + 1.217269303145589000, + 1.216964996274049400, 1.216660644658185600, 1.216356248309187600, + 1.216051807238247800, + 1.215747321456559300, 1.215442790975316700, 1.215138215805717300, + 1.214833595958959300, + 1.214528931446242600, 1.214224222278769100, 1.213919468467741900, + 1.213614670024366000, + 1.213309826959847700, 1.213004939285395400, 1.212700007012219100, + 1.212395030151530300, + 1.212090008714541600, 1.211784942712468300, 1.211479832156526800, + 1.211174677057934800, + 1.210869477427912300, 1.210564233277680500, 1.210258944618462200, + 1.209953611461482200, + 1.209648233817966600, 1.209342811699143600, 1.209037345116242400, + 1.208731834080493800, + 1.208426278603131200, 1.208120678695388600, 1.207815034368502100, + 1.207509345633709600, + 1.207203612502250300, 1.206897834985365000, 1.206592013094296200, + 1.206286146840288300, + 1.205980236234587100, 1.205674281288440000, 1.205368282013096200, + 1.205062238419806200, + 1.204756150519822300, 1.204450018324398900, 1.204143841844791200, + 1.203837621092256800, + 1.203531356078054100, 1.203225046813444000, 1.202918693309688300, + 1.202612295578050900, + 1.202305853629797500, 1.201999367476194400, 1.201692837128510700, + 1.201386262598016500, + 1.201079643895983700, 1.200772981033685800, 1.200466274022397900, + 1.200159522873396800, + 1.199852727597960700, 1.199545888207369700, 1.199239004712905300, + 1.198932077125851100, + 1.198625105457491700, 1.198318089719113200, 1.198011029922004400, + 1.197703926077454200, + 1.197396778196754700, 1.197089586291198500, 1.196782350372080300, + 1.196475070450696100, + 1.196167746538343600, 1.195860378646322700, 1.195552966785933900, + 1.195245510968480300, + 1.194938011205265900, 1.194630467507596500, 1.194322879886780000, + 1.194015248354125100, + 1.193707572920943000, 1.193399853598545500, 1.193092090398246900, + 1.192784283331362700, + 1.192476432409210100, 1.192168537643107900, 1.191860599044376500, + 1.191552616624337800, + 1.191244590394315400, 1.190936520365635000, 1.190628406549622900, + 1.190320248957608100, + 1.190012047600920200, 1.189703802490891000, 1.189395513638853900, + 1.189087181056143900, + 1.188778804754097300, 1.188470384744052100, 1.188161921037348400, + 1.187853413645327100, + 1.187544862579331500, 1.187236267850706000, 1.186927629470796900, + 1.186618947450951600, + 1.186310221802519900, 1.186001452536852300, 1.185692639665301600, + 1.185383783199222000, + 1.185074883149969100, 1.184765939528900500, 1.184456952347374900, + 1.184147921616753200, + 1.183838847348397400, 1.183529729553671500, 1.183220568243940300, + 1.182911363430571200, + 1.182602115124932900, 1.182292823338395100, 1.181983488082330300, + 1.181674109368111300, + 1.181364687207113100, 1.181055221610712400, 1.180745712590287400, + 1.180436160157217800, + 1.180126564322885100, 1.179816925098671900, 1.179507242495962900, + 1.179197516526144600, + 1.178887747200604300, 1.178577934530731700, 1.178268078527917200, + 1.177958179203553800, + 1.177648236569035300, 1.177338250635757700, 1.177028221415118200, + 1.176718148918515700, + 1.176408033157350300, 1.176097874143024600, 1.175787671886942000, + 1.175477426400507700, + 1.175167137695128900, 1.174856805782213500, 1.174546430673171900, + 1.174236012379415600, + 1.173925550912357800, 1.173615046283413200, 1.173304498503998400, + 1.172993907585530900, + 1.172683273539430800, 1.172372596377118800, 1.172061876110017700, + 1.171751112749551900, + 1.171440306307147200, 1.171129456794231200, 1.170818564222232800, + 1.170507628602582800, + 1.170196649946713100, 1.169885628266057900, 1.169574563572052300, + 1.169263455876133200, + 1.168952305189739200, 1.168641111524310700, 1.168329874891289400, + 1.168018595302118000, + 1.167707272768241800, 1.167395907301107100, 1.167084498912162300, + 1.166773047612856400, + 1.166461553414641000, 1.166150016328968600, 1.165838436367293800, + 1.165526813541072100, + 1.165215147861761400, 1.164903439340820900, 1.164591687989710500, + 1.164279893819892800, + 1.163968056842831700, 1.163656177069992500, 1.163344254512841800, + 1.163032289182848800, + 1.162720281091483000, 1.162408230250216100, 1.162096136670521600, + 1.161784000363874000, + 1.161471821341749900, 1.161159599615627000, 1.160847335196984800, + 1.160535028097304600, + 1.160222678328068700, 1.159910285900761700, 1.159597850826869200, + 1.159285373117878500, + 1.158972852785278500, 1.158660289840559800, 1.158347684295214300, + 1.158035036160735900, + 1.157722345448619400, 1.157409612170361600, 1.157096836337461000, + 1.156784017961417500, + 1.156471157053732300, 1.156158253625908700, 1.155845307689450800, + 1.155532319255865300, + 1.155219288336659400, 1.154906214943342700, 1.154593099087426000, + 1.154279940780421400, + 1.153966740033842900, 1.153653496859206000, 1.153340211268028000, + 1.153026883271827300, + 1.152713512882124400, 1.152400100110440700, 1.152086644968299400, + 1.151773147467225300, + 1.151459607618745300, 1.151146025434387000, 1.150832400925680100, + 1.150518734104155400, + 1.150205024981345800, 1.149891273568785400, 1.149577479878009800, + 1.149263643920556800, + 1.148949765707964600, 1.148635845251773800, 1.148321882563526400, + 1.148007877654766200, + 1.147693830537038100, 1.147379741221888500, 1.147065609720865600, + 1.146751436045519300, + 1.146437220207400700, 1.146122962218062600, 1.145808662089060000, + 1.145494319831947800, + 1.145179935458284100, 1.144865508979627800, 1.144551040407539400, + 1.144236529753581000, + 1.143921977029316500, 1.143607382246310600, 1.143292745416130600, + 1.142978066550344400, + 1.142663345660522000, 1.142348582758234900, 1.142033777855056000, + 1.141718930962559500, + 1.141404042092321500, 1.141089111255919800, 1.140774138464933700, + 1.140459123730943200, + 1.140144067065530700, 1.139828968480280300, 1.139513827986776900, + 1.139198645596607400, + 1.138883421321360600, 1.138568155172625700, 1.138252847161994400, + 1.137937497301059600, + 1.137622105601416000, 1.137306672074659900, 1.136991196732388200, + 1.136675679586200500, + 1.136360120647697200, 1.136044519928480800, 1.135728877440154800, + 1.135413193194324800, + 1.135097467202597100, 1.134781699476580300, 1.134465890027884300, + 1.134150038868120500, + 1.133834146008902100, 1.133518211461843200, 1.133202235238559800, + 1.132886217350669500, + 1.132570157809791500, 1.132254056627546300, 1.131937913815556300, + 1.131621729385444900, + 1.131305503348837300, 1.130989235717360100, 1.130672926502642100, + 1.130356575716312500, + 1.130040183370002900, 1.129723749475346000, 1.129407274043976200, + 1.129090757087529500, + 1.128774198617643200, 1.128457598645956600, 1.128140957184109700, + 1.127824274243744500, + 1.127507549836505000, 1.127190783974035800, 1.126873976667983800, + 1.126557127929996800, + 1.126240237771724700, 1.125923306204818400, 1.125606333240930700, + 1.125289318891715900, + 1.124972263168829500, 1.124655166083928800, 1.124338027648672500, + 1.124020847874721100, + 1.123703626773736100, 1.123386364357381200, 1.123069060637320600, + 1.122751715625221400, + 1.122434329332750800, 1.122116901771578400, 1.121799432953375600, + 1.121481922889814300, + 1.121164371592568300, 1.120846779073313400, 1.120529145343726500, + 1.120211470415486200, + 1.119893754300272300, 1.119575997009766300, 1.119258198555651300, + 1.118940358949611900, + 1.118622478203333800, 1.118304556328505200, 1.117986593336814700, + 1.117668589239953200, + 1.117350544049612300, 1.117032457777486200, 1.116714330435269600, + 1.116396162034659600, + 1.116077952587353600, 1.115759702105052000, 1.115441410599455500, + 1.115123078082267000, + 1.114804704565190500, 1.114486290059931900, 1.114167834578198200, + 1.113849338131698300, + 1.113530800732142100, 1.113212222391241500, 1.112893603120710000, + 1.112574942932261600, + 1.112256241837613000, 1.111937499848481900, 1.111618716976587700, + 1.111299893233650600, + 1.110981028631393700, 1.110662123181539900, 1.110343176895814500, + 1.110024189785944900, + 1.109705161863658600, 1.109386093140686000, 1.109066983628758100, + 1.108747833339607200, + 1.108428642284968100, 1.108109410476576300, 1.107790137926169200, + 1.107470824645485600, + 1.107151470646265300, 1.106832075940250600, 1.106512640539184100, + 1.106193164454811100, + 1.105873647698877300, 1.105554090283131100, 1.105234492219321100, + 1.104914853519198400, + 1.104595174194514800, 1.104275454257024300, 1.103955693718482200, + 1.103635892590644900, + 1.103316050885270600, 1.102996168614119000, 1.102676245788951400, + 1.102356282421530300, + 1.102036278523620000, 1.101716234106985700, 1.101396149183395000, + 1.101076023764616400, + 1.100755857862419700, 1.100435651488577100, 1.100115404654861100, + 1.099795117373046200, + 1.099474789654909100, 1.099154421512226600, 1.098834012956778200, + 1.098513564000344300, + 1.098193074654706800, 1.097872544931649100, 1.097551974842956500, + 1.097231364400415000, + 1.096910713615813200, 1.096590022500939700, 1.096269291067585700, + 1.095948519327543800, + 1.095627707292607700, 1.095306854974572800, 1.094985962385235800, + 1.094665029536395100, + 1.094344056439850600, 1.094023043107403200, 1.093701989550856000, + 1.093380895782013000, + 1.093059761812680100, 1.092738587654664300, 1.092417373319774200, + 1.092096118819820200, + 1.091774824166613600, 1.091453489371968100, 1.091132114447697300, + 1.090810699405617900, + 1.090489244257547300, 1.090167749015304300, 1.089846213690709900, + 1.089524638295585400, + 1.089203022841754400, 1.088881367341041800, 1.088559671805274100, + 1.088237936246279100, + 1.087916160675885800, 1.087594345105925300, 1.087272489548229700, + 1.086950594014632700, + 1.086628658516969500, 1.086306683067076900, 1.085984667676792600, + 1.085662612357956500, + 1.085340517122409800, 1.085018381981994500, 1.084696206948555300, + 1.084373992033937000, + 1.084051737249986900, 1.083729442608553300, 1.083407108121486000, + 1.083084733800636200, + 1.082762319657857100, 1.082439865705002500, 1.082117371953928300, + 1.081794838416491700, + 1.081472265104551200, 1.081149652029967000, 1.080826999204601100, + 1.080504306640315500, + 1.080181574348975500, 1.079858802342446900, 1.079535990632596800, + 1.079213139231294500, + 1.078890248150409700, 1.078567317401815100, 1.078244346997383300, + 1.077921336948988600, + 1.077598287268508400, 1.077275197967819000, 1.076952069058800400, + 1.076628900553332700, + 1.076305692463297900, 1.075982444800579700, 1.075659157577062200, + 1.075335830804633000, + 1.075012464495178800, 1.074689058660589700, 1.074365613312755900, + 1.074042128463569500, + 1.073718604124924500, 1.073395040308715400, 1.073071437026839500, + 1.072747794291194300, + 1.072424112113678600, 1.072100390506194500, 1.071776629480643500, + 1.071452829048929800, + 1.071128989222958500, 1.070805110014635900, 1.070481191435870500, + 1.070157233498571600, + 1.069833236214650800, 1.069509199596019800, 1.069185123654592600, + 1.068861008402285200, + 1.068536853851013600, 1.068212660012696700, 1.067888426899253500, + 1.067564154522606000, + 1.067239842894676100, 1.066915492027387600, 1.066591101932666800, + 1.066266672622439700, + 1.065942204108635300, 1.065617696403183400, 1.065293149518014500, + 1.064968563465062100, + 1.064643938256259400, 1.064319273903543000, 1.063994570418849400, + 1.063669827814116300, + 1.063345046101285000, 1.063020225292295300, 1.062695365399091200, + 1.062370466433616400, + 1.062045528407815900, 1.061720551333637600, 1.061395535223029500, + 1.061070480087941800, + 1.060745385940325500, 1.060420252792134000, 1.060095080655320900, + 1.059769869541841800, + 1.059444619463654400, 1.059119330432716700, 1.058794002460989000, + 1.058468635560432500, + 1.058143229743009600, 1.057817785020685100, 1.057492301405424500, + 1.057166778909195000, + 1.056841217543965200, 1.056515617321704500, 1.056189978254385100, + 1.055864300353978900, + 1.055538583632461100, 1.055212828101807200, 1.054887033773993300, + 1.054561200660999200, + 1.054235328774803900, 1.053909418127389400, 1.053583468730738200, + 1.053257480596834700, + 1.052931453737664600, 1.052605388165214700, 1.052279283891473600, + 1.051953140928431100, + 1.051626959288079100, 1.051300738982409800, 1.050974480023417500, + 1.050648182423098000, + 1.050321846193448000, 1.049995471346466300, 1.049669057894152800, + 1.049342605848508200, + 1.049016115221536000, 1.048689586025239700, 1.048363018271625300, + 1.048036411972699500, + 1.047709767140470500, 1.047383083786948700, 1.047056361924144400, + 1.046729601564071200, + 1.046402802718742400, 1.046075965400174300, 1.045749089620383200, + 1.045422175391386800, + 1.045095222725206200, 1.044768231633861100, 1.044441202129375200, + 1.044114134223771900, + 1.043787027929076000, 1.043459883257315400, 1.043132700220517300, + 1.042805478830712200, + 1.042478219099930400, 1.042150921040204200, 1.041823584663568200, + 1.041496209982056600, + 1.041168797007707000, 1.040841345752557200, 1.040513856228645800, + 1.040186328448014800, + 1.039858762422705600, 1.039531158164762400, 1.039203515686230000, + 1.038875834999155100, + 1.038548116115585800, 1.038220359047570500, 1.037892563807160800, + 1.037564730406408200, + 1.037236858857366600, 1.036908949172090900, 1.036581001362636600, + 1.036253015441062700, + 1.035924991419427100, 1.035596929309791300, 1.035268829124216700, + 1.034940690874766300, + 1.034612514573505700, 1.034284300232500000, 1.033956047863817500, + 1.033627757479526700, + 1.033299429091697700, 1.032971062712402700, 1.032642658353714300, + 1.032314216027707700, + 1.031985735746457900, 1.031657217522042900, 1.031328661366541300, + 1.031000067292032300, + 1.030671435310598600, 1.030342765434322200, 1.030014057675287900, + 1.029685312045581100, + 1.029356528557288300, 1.029027707222499100, 1.028698848053302100, + 1.028369951061789600, + 1.028041016260053500, 1.027712043660187600, 1.027383033274288400, + 1.027053985114451100, + 1.026724899192775300, 1.026395775521359500, 1.026066614112305600, + 1.025737414977715200, + 1.025408178129692000, 1.025078903580341600, 1.024749591341769700, + 1.024420241426085200, + 1.024090853845396800, 1.023761428611814600, 1.023431965737451800, + 1.023102465234420700, + 1.022772927114837100, 1.022443351390816400, 1.022113738074476300, + 1.021784087177936000, + 1.021454398713315600, 1.021124672692737000, 1.020794909128323000, + 1.020465108032198300, + 1.020135269416488700, 1.019805393293321100, 1.019475479674824900, + 1.019145528573129000, + 1.018815540000365800, 1.018485513968667500, 1.018155450490168000, + 1.017825349577003300, + 1.017495211241309800, 1.017165035495226400, 1.016834822350892300, + 1.016504571820448000, + 1.016174283916036800, 1.015843958649801600, 1.015513596033888400, + 1.015183196080442900, + 1.014852758801613200, 1.014522284209548900, 1.014191772316400000, + 1.013861223134318900, + 1.013530636675459100, 1.013200012951974700, 1.012869351976022300, + 1.012538653759758900, + 1.012207918315344300, 1.011877145654937400, 1.011546335790700600, + 1.011215488734796800, + 1.010884604499389800, 1.010553683096645900, 1.010222724538731600, + 1.009891728837815700, + 1.009560696006067900, 1.009229626055658800, 1.008898518998761800, + 1.008567374847549900, + 1.008236193614199000, 1.007904975310885300, 1.007573719949786700, + 1.007242427543082900, + 1.006911098102953900, 1.006579731641582500, 1.006248328171152100, + 1.005916887703846500, + 1.005585410251852700, 1.005253895827357800, 1.004922344442551000, + 1.004590756109621900, + 1.004259130840762700, 1.003927468648166100, 1.003595769544025900, + 1.003264033540538500, + 1.002932260649900000, 1.002600450884309800, 1.002268604255967200, + 1.001936720777072400, + 1.001604800459829000, 1.001272843316440000, 1.000940849359111000, + 1.000608818600048100, + 1.000276751051459200, 0.999944646725553720, 0.999612505634541740, + 0.999280327790635690, + 0.998948113206048590, 0.998615861892994560, 0.998283573863690270, + 0.997951249130352380, + 0.997618887705200020, 0.997286489600452630, 0.996954054828332210, + 0.996621583401061110, + 0.996289075330862860, 0.995956530629963810, 0.995623949310589620, + 0.995291331384969390, + 0.994958676865332010, 0.994625985763907820, 0.994293258092929790, + 0.993960493864630480, + 0.993627693091245660, 0.993294855785010760, 0.992961981958163210, + 0.992629071622942340, + 0.992296124791587690, 0.991963141476341460, 0.991630121689446090, + 0.991297065443145440, + 0.990963972749685840, 0.990630843621313260, 0.990297678070276800, + 0.989964476108825210, + 0.989631237749210020, 0.989297963003683330, 0.988964651884498000, + 0.988631304403909890, + 0.988297920574174430, 0.987964500407549910, 0.987631043916294970, + 0.987297551112669370, + 0.986964022008935520, 0.986630456617355380, 0.986296854950194260, + 0.985963217019717120, + 0.985629542838190490, 0.985295832417883540, 0.984962085771065030, + 0.984628302910006580, + 0.984294483846980150, 0.983960628594258810, 0.983626737164118190, + 0.983292809568833910, + 0.982958845820684270, 0.982624845931947320, 0.982290809914904140, + 0.981956737781835790, + 0.981622629545024770, 0.981288485216756160, 0.980954304809314670, + 0.980620088334987930, + 0.980285835806063770, 0.979951547234831130, 0.979617222633581860, + 0.979282862014607240, + 0.978948465390201530, 0.978614032772659240, 0.978279564174275860, + 0.977945059607349900, + 0.977610519084179290, 0.977275942617064740, 0.976941330218307540, + 0.976606681900209830, + 0.976271997675076550, 0.975937277555212310, 0.975602521552924600, + 0.975267729680520560, + 0.974932901950310350, 0.974598038374604350, 0.974263138965714040, + 0.973928203735953460, + 0.973593232697636530, 0.973258225863079970, 0.972923183244600480, + 0.972588104854516410, + 0.972252990705148370, 0.971917840808816710, 0.971582655177844700, + 0.971247433824555920, + 0.970912176761274950, 0.970576884000329040, 0.970241555554045230, + 0.969906191434753320, + 0.969570791654783330, 0.969235356226466500, 0.968899885162136650, + 0.968564378474127350, + 0.968228836174775060, 0.967893258276415700, 0.967557644791388500, + 0.967221995732032490, + 0.966886311110688230, 0.966550590939698640, 0.966214835231406500, + 0.965879043998157160, + 0.965543217252296420, 0.965207355006171270, 0.964871457272131190, + 0.964535524062525410, + 0.964199555389706030, 0.963863551266025300, 0.963527511703836660, + 0.963191436715496120, + 0.962855326313359350, 0.962519180509785130, 0.962182999317132030, + 0.961846782747760140, + 0.961510530814032040, 0.961174243528309820, 0.960837920902958720, + 0.960501562950343390, + 0.960165169682831830, 0.959828741112791590, 0.959492277252591900, + 0.959155778114604400, + 0.958819243711200310, 0.958482674054753960, 0.958146069157639560, + 0.957809429032232760, + 0.957472753690911670, 0.957136043146054050, 0.956799297410040440, + 0.956462516495251940, + 0.956125700414070300, 0.955788849178880300, 0.955451962802066120, + 0.955115041296014880, + 0.954778084673113870, 0.954441092945751630, 0.954104066126319150, + 0.953767004227207060, + 0.953429907260809120, 0.953092775239518630, 0.952755608175731570, + 0.952418406081844360, + 0.952081168970254520, 0.951743896853362140, 0.951406589743566950, + 0.951069247653271500, + 0.950731870594878510, 0.950394458580791970, 0.950057011623418380, + 0.949719529735163940, + 0.949382012928437600, 0.949044461215648560, 0.948706874609207220, + 0.948369253121526420, + 0.948031596765018910, 0.947693905552099870, 0.947356179495185020, + 0.947018418606691230, + 0.946680622899037650, 0.946342792384643360, 0.946004927075930090, + 0.945667026985319680, + 0.945329092125236190, 0.944991122508104350, 0.944653118146349890, + 0.944315079052401090, + 0.943977005238685770, 0.943638896717634900, 0.943300753501679190, + 0.942962575603250920, + 0.942624363034784580, 0.942286115808714690, 0.941947833937478270, + 0.941609517433512730, + 0.941271166309256450, 0.940932780577150460, 0.940594360249635500, + 0.940255905339155150, + 0.939917415858152920, 0.939578891819073720, 0.939240333234364950, + 0.938901740116473540, + 0.938563112477849630, 0.938224450330942590, 0.937885753688204820, + 0.937547022562088990, + 0.937208256965048840, 0.936869456909540490, 0.936530622408019990, + 0.936191753472946030, + 0.935852850116777430, 0.935513912351974450, 0.935174940190999560, + 0.934835933646314900, + 0.934496892730385720, 0.934157817455677160, 0.933818707834655590, + 0.933479563879790030, + 0.933140385603548840, 0.932801173018403480, 0.932461926136825660, + 0.932122644971287830, + 0.931783329534265240, 0.931443979838232900, 0.931104595895668410, + 0.930765177719049210, + 0.930425725320855430, 0.930086238713567440, 0.929746717909666790, + 0.929407162921637610, + 0.929067573761963250, 0.928727950443130500, 0.928388292977625930, + 0.928048601377937210, + 0.927708875656554800, 0.927369115825968480, 0.927029321898671270, + 0.926689493887155820, + 0.926349631803916270, 0.926009735661449170, 0.925669805472250860, + 0.925329841248820340, + 0.924989843003656610, 0.924649810749260110, 0.924309744498133750, + 0.923969644262779830, + 0.923629510055703820, 0.923289341889410480, 0.922949139776407800, + 0.922608903729203570, + 0.922268633760306990, 0.921928329882229390, 0.921587992107482210, + 0.921247620448579440, + 0.920907214918035070, 0.920566775528364410, 0.920226302292085460, + 0.919885795221715540, + 0.919545254329774850, 0.919204679628783720, 0.918864071131263780, + 0.918523428849739030, + 0.918182752796733110, 0.917842042984772340, 0.917501299426383480, + 0.917160522134094160, + 0.916819711120434700, 0.916478866397934850, 0.916137987979127270, + 0.915797075876544350, + 0.915456130102721200, 0.915115150670193110, 0.914774137591496510, + 0.914433090879170130, + 0.914092010545752620, 0.913750896603785280, 0.913409749065809520, + 0.913068567944367970, + 0.912727353252005710, 0.912386105001267270, 0.912044823204700370, + 0.911703507874852440, + 0.911362159024272310, 0.911020776665511290, 0.910679360811120000, + 0.910337911473652390, + 0.909996428665661990, 0.909654912399703860, 0.909313362688335290, + 0.908971779544113350, + 0.908630162979597760, 0.908288513007348140, 0.907946829639926790, + 0.907605112889895870, + 0.907263362769819000, 0.906921579292262250, 0.906579762469791110, + 0.906237912314974080, + 0.905896028840379560, 0.905554112058577170, 0.905212161982139160, + 0.904870178623637170, + 0.904528161995645670, 0.904186112110739510, 0.903844028981494190, + 0.903501912620488070, + 0.903159763040298880, 0.902817580253507450, 0.902475364272694370, + 0.902133115110441470, + 0.901790832779333250, 0.901448517291953520, 0.901106168660889110, + 0.900763786898726380, + 0.900421372018054500, 0.900078924031462610, 0.899736442951541320, + 0.899393928790883420, + 0.899051381562081310, 0.898708801277730340, 0.898366187950425780, + 0.898023541592764210, + 0.897680862217344440, 0.897338149836764960, 0.896995404463627350, + 0.896652626110532870, + 0.896309814790084090, 0.895966970514885940, 0.895624093297543110, + 0.895281183150662960, + 0.894938240086852970, 0.894595264118721810, 0.894252255258880410, + 0.893909213519939460, + 0.893566138914512420, 0.893223031455212530, 0.892879891154655380, + 0.892536718025457090, + 0.892193512080234670, 0.891850273331607600, 0.891507001792195000, + 0.891163697474618880, + 0.890820360391500920, 0.890476990555464480, 0.890133587979135000, + 0.889790152675137610, + 0.889446684656100330, 0.889103183934650930, 0.888759650523418650, + 0.888416084435035060, + 0.888072485682131150, 0.887728854277341050, 0.887385190233298650, + 0.887041493562639060, + 0.886697764277999840, 0.886354002392018110, 0.886010207917333760, + 0.885666380866586560, + 0.885322521252418610, 0.884978629087472270, 0.884634704384391180, + 0.884290747155821230, + 0.883946757414407980, 0.883602735172799640, 0.883258680443644530, + 0.882914593239592320, + 0.882570473573294660, 0.882226321457403320, 0.881882136904572400, + 0.881537919927456340, + 0.881193670538710450, 0.880849388750992610, 0.880505074576960370, + 0.880160728029273920, + 0.879816349120593590, 0.879471937863580690, 0.879127494270899090, + 0.878783018355212220, + 0.878438510129186170, 0.878093969605486800, 0.877749396796782770, + 0.877404791715742370, + 0.877060154375035710, 0.876715484787334630, 0.876370782965310900, + 0.876026048921639160, + 0.875681282668993700, 0.875336484220050390, 0.874991653587487090, + 0.874646790783981660, + 0.874301895822214290, 0.873956968714865500, 0.873612009474616810, + 0.873267018114152300, + 0.872921994646155390, 0.872576939083312460, 0.872231851438309840, + 0.871886731723835020, + 0.871541579952577750, 0.871196396137227660, 0.870851180290476810, + 0.870505932425017060, + 0.870160652553543020, 0.869815340688749220, 0.869469996843331370, + 0.869124621029987670, + 0.868779213261415610, 0.868433773550315810, 0.868088301909388680, + 0.867742798351335720, + 0.867397262888861100, 0.867051695534668210, 0.866706096301463340, + 0.866360465201952980, + 0.866014802248844420, 0.865669107454847490, 0.865323380832671800, + 0.864977622395029290, + 0.864631832154632240, 0.864286010124194040, 0.863940156316430170, + 0.863594270744056040, + 0.863248353419789670, 0.862902404356348570, 0.862556423566453230, + 0.862210411062823810, + 0.861864366858181910, 0.861518290965251340, 0.861172183396755500, + 0.860826044165420630, + 0.860479873283972910, 0.860133670765139580, 0.859787436621650360, + 0.859441170866234390, + 0.859094873511623840, 0.858748544570550610, 0.858402184055747750, + 0.858055791979950740, + 0.857709368355894840, 0.857362913196317630, 0.857016426513956930, + 0.856669908321551650, + 0.856323358631843170, 0.855976777457572280, 0.855630164811482460, + 0.855283520706317080, + 0.854936845154821930, 0.854590138169742830, 0.854243399763827020, + 0.853896629949823630, + 0.853549828740481690, 0.853202996148552880, 0.852856132186788910, + 0.852509236867942440, + 0.852162310204768740, 0.851815352210022470, 0.851468362896461110, + 0.851121342276842110, + 0.850774290363923820, 0.850427207170467380, 0.850080092709233130, + 0.849732946992984290, + 0.849385770034483680, 0.849038561846496730, 0.848691322441788910, + 0.848344051833126780, + 0.847996750033279350, 0.847649417055015060, 0.847302052911105160, + 0.846954657614320980, + 0.846607231177434640, 0.846259773613221020, 0.845912284934454140, + 0.845564765153910990, + 0.845217214284368690, 0.844869632338605130, 0.844522019329400630, + 0.844174375269535320, + 0.843826700171791620, 0.843478994048952440, 0.843131256913801420, + 0.842783488779124570, + 0.842435689657707650, 0.842087859562339000, 0.841739998505806610, + 0.841392106500900900, + 0.841044183560412770, 0.840696229697133760, 0.840348244923857960, + 0.840000229253379030, + 0.839652182698493290, 0.839304105271996950, 0.838955996986687550, + 0.838607857855364740, + 0.838259687890827830, 0.837911487105878820, 0.837563255513319780, + 0.837214993125953600, + 0.836866699956585690, 0.836518376018021260, 0.836170021323067610, + 0.835821635884532730, + 0.835473219715225040, 0.835124772827955830, 0.834776295235535540, + 0.834427786950777460, + 0.834079247986494690, 0.833730678355502630, 0.833382078070616820, + 0.833033447144653880, + 0.832684785590432690, 0.832336093420771970, 0.831987370648492710, + 0.831638617286416190, + 0.831289833347364620, 0.830941018844162600, 0.830592173789634240, + 0.830243298196606360, + 0.829894392077905720, 0.829545455446360270, 0.829196488314800080, + 0.828847490696055010, + 0.828498462602957340, 0.828149404048339590, 0.827800315045035150, + 0.827451195605879990, + 0.827102045743709160, 0.826752865471360950, 0.826403654801672770, + 0.826054413747485010, + 0.825705142321637720, 0.825355840536972420, 0.825006508406332490, + 0.824657145942561230, + 0.824307753158504460, 0.823958330067008030, 0.823608876680918760, + 0.823259393013085820, + 0.822909879076357930, 0.822560334883586490, 0.822210760447622980, + 0.821861155781319800, + 0.821511520897531660, 0.821161855809112830, 0.820812160528920360, + 0.820462435069811090, + 0.820112679444643060, 0.819762893666276530, 0.819413077747571440, + 0.819063231701390170, + 0.818713355540594880, 0.818363449278050270, 0.818013512926620940, + 0.817663546499172720, + 0.817313550008573640, 0.816963523467691410, 0.816613466889396070, + 0.816263380286557980, + 0.815913263672048310, 0.815563117058740630, 0.815212940459508210, + 0.814862733887226740, + 0.814512497354771830, 0.814162230875020380, 0.813811934460851430, + 0.813461608125143560, + 0.813111251880778150, 0.812760865740636440, 0.812410449717600570, + 0.812060003824555230, + 0.811709528074384460, 0.811359022479975040, 0.811008487054213360, + 0.810657921809988410, + 0.810307326760189020, 0.809956701917705080, 0.809606047295428950, + 0.809255362906252440, + 0.808904648763069890, 0.808553904878775760, 0.808203131266265420, + 0.807852327938436750, + 0.807501494908186900, 0.807150632188415760, 0.806799739792023240, + 0.806448817731910130, + 0.806097866020979660, 0.805746884672134620, 0.805395873698280360, + 0.805044833112322000, + 0.804693762927166100, 0.804342663155721230, 0.803991533810895500, + 0.803640374905599810, + 0.803289186452744390, 0.802937968465242240, 0.802586720956006250, + 0.802235443937950320, + 0.801884137423990890, 0.801532801427043530, 0.801181435960026780, + 0.800830041035858750, + 0.800478616667459010, 0.800127162867749210, 0.799775679649650460, + 0.799424167026086540, + 0.799072625009981330, 0.798721053614259490, 0.798369452851848020, + 0.798017822735673680, + 0.797666163278665570, 0.797314474493752810, 0.796962756393865600, + 0.796611008991936490, + 0.796259232300897350, 0.795907426333682830, 0.795555591103226930, + 0.795203726622466520, + 0.794851832904338360, 0.794499909961779990, 0.794147957807731400, + 0.793795976455132220, + 0.793443965916924570, 0.793091926206050400, 0.792739857335452710, + 0.792387759318077150, + 0.792035632166868230, 0.791683475894773720, 0.791331290514740830, + 0.790979076039718180, + 0.790626832482656310, 0.790274559856505520, 0.789922258174218570, + 0.789569927448748320, + 0.789217567693048520, 0.788865178920075130, 0.788512761142783790, + 0.788160314374132590, + 0.787807838627079260, 0.787455333914584220, 0.787102800249607550, + 0.786750237645110430, + 0.786397646114056490, 0.786045025669408700, 0.785692376324132690, + 0.785339698091194080, + 0.784986990983559170, 0.784634255014197040, 0.784281490196075850, + 0.783928696542166680, + 0.783575874065440270, 0.783223022778868350, 0.782870142695425320, + 0.782517233828084580, + 0.782164296189822530, 0.781811329793615120, 0.781458334652439630, + 0.781105310779275470, + 0.780752258187101480, 0.780399176888899150, 0.780046066897649550, + 0.779692928226336290, + 0.779339760887942880, 0.778986564895453810, 0.778633340261856040, + 0.778280087000135730, + 0.777926805123281830, 0.777573494644283050, 0.777220155576129220, + 0.776866787931812410, + 0.776513391724324210, 0.776159966966658680, 0.775806513671809860, + 0.775453031852772920, + 0.775099521522545020, 0.774745982694123090, 0.774392415380506400, + 0.774038819594694230, + 0.773685195349686940, 0.773331542658487140, 0.772977861534096640, + 0.772624151989520280, + 0.772270414037761980, 0.771916647691828660, 0.771562852964726710, + 0.771209029869463940, + 0.770855178419050050, 0.770501298626494410, 0.770147390504808960, + 0.769793454067005500, + 0.769439489326096850, 0.769085496295098040, 0.768731474987023660, + 0.768377425414890850, + 0.768023347591716640, 0.767669241530518850, 0.767315107244318060, + 0.766960944746133740, + 0.766606754048988260, 0.766252535165903970, 0.765898288109903900, + 0.765544012894013530, + 0.765189709531257760, 0.764835378034664170, 0.764481018417259680, + 0.764126630692073870, + 0.763772214872136200, 0.763417770970477140, 0.763063299000129260, + 0.762708798974124800, + 0.762354270905498450, 0.761999714807284790, 0.761645130692519490, + 0.761290518574240350, + 0.760935878465484720, 0.760581210379292380, 0.760226514328703140, + 0.759871790326757670, + 0.759517038386499090, 0.759162258520969860, 0.758807450743214760, + 0.758452615066278920, + 0.758097751503208020, 0.757742860067050380, 0.757387940770853360, + 0.757032993627667290, + 0.756678018650541630, 0.756323015852528700, 0.755967985246680520, + 0.755612926846050080, + 0.755257840663692730, 0.754902726712663120, 0.754547585006018600, + 0.754192415556816380, + 0.753837218378114460, 0.753481993482973400, 0.753126740884452970, + 0.752771460595615500, + 0.752416152629523330, 0.752060816999239660, 0.751705453717829930, + 0.751350062798359140, + 0.750994644253894730, 0.750639198097504010, 0.750283724342255320, + 0.749928223001219310, + 0.749572694087465850, 0.749217137614067500, 0.748861553594096340, + 0.748505942040627040, + 0.748150302966733790, 0.747794636385492150, 0.747438942309979870, + 0.747083220753273820, + 0.746727471728453770, 0.746371695248599140, 0.746015891326790470, + 0.745660059976110400, + 0.745304201209641030, 0.744948315040467210, 0.744592401481673270, + 0.744236460546344850, + 0.743880492247569580, 0.743524496598434670, 0.743168473612029980, + 0.742812423301444810, + 0.742456345679769810, 0.742100240760097840, 0.741744108555520860, + 0.741387949079133860, + 0.741031762344030790, 0.740675548363308620, 0.740319307150063780, + 0.739963038717393880, + 0.739606743078398690, 0.739250420246177380, 0.738894070233831800, + 0.738537693054463370, + 0.738181288721174830, 0.737824857247070810, 0.737468398645255490, + 0.737111912928835710, + 0.736755400110918000, 0.736398860204609870, 0.736042293223021060, + 0.735685699179260850, + 0.735329078086440880, 0.734972429957672760, 0.734615754806068890, + 0.734259052644744230, + 0.733902323486812610, 0.733545567345390890, 0.733188784233595240, + 0.732831974164544150, + 0.732475137151356370, 0.732118273207151170, 0.731761382345050280, + 0.731404464578174760, + 0.731047519919648340, 0.730690548382594280, 0.730333549980137110, + 0.729976524725403530, + 0.729619472631519270, 0.729262393711613280, 0.728905287978813600, + 0.728548155446249730, + 0.728190996127053180, 0.727833810034354990, 0.727476597181288540, + 0.727119357580987220, + 0.726762091246585200, 0.726404798191218950, 0.726047478428024420, + 0.725690131970139980, + 0.725332758830703360, 0.724975359022855150, 0.724617932559735390, + 0.724260479454485130, + 0.723902999720247850, 0.723545493370166160, 0.723187960417385530, + 0.722830400875050790, + 0.722472814756308090, 0.722115202074305680, 0.721757562842191060, + 0.721399897073114470, + 0.721042204780225960, 0.720684485976676230, 0.720326740675618530, + 0.719968968890205230, + 0.719611170633591480, 0.719253345918932090, 0.718895494759382860, + 0.718537617168101610, + 0.718179713158245800, 0.717821782742975370, 0.717463825935449550, + 0.717105842748830160, + 0.716747833196278770, 0.716389797290958090, 0.716031735046032900, + 0.715673646474667140, + 0.715315531590027700, 0.714957390405280950, 0.714599222933594240, + 0.714241029188137260, + 0.713882809182079030, 0.713524562928591010, 0.713166290440844450, + 0.712807991732011590, + 0.712449666815266890, 0.712091315703784260, 0.711732938410739810, + 0.711374534949309800, + 0.711016105332671340, 0.710657649574003460, 0.710299167686484930, + 0.709940659683296890, + 0.709582125577619790, 0.709223565382636760, 0.708864979111530680, + 0.708506366777485130, + 0.708147728393686340, 0.707789063973319310, 0.707430373529572170, + 0.707071657075632460, + 0.706712914624688770, 0.706354146189931750, 0.705995351784551530, + 0.705636531421740880, + 0.705277685114692020, 0.704918812876598410, 0.704559914720655490, + 0.704200990660058150, + 0.703842040708003820, 0.703483064877689630, 0.703124063182313690, + 0.702765035635076310, + 0.702405982249177160, 0.702046903037818250, 0.701687798014201110, + 0.701328667191529980, + 0.700969510583008600, 0.700610328201841660, 0.700251120061236020, + 0.699891886174398130, + 0.699532626554536630, 0.699173341214860190, 0.698814030168578240, + 0.698454693428902320, + 0.698095331009043640, 0.697735942922215520, 0.697376529181631400, + 0.697017089800505250, + 0.696657624792053730, 0.696298134169492380, 0.695938617946039510, + 0.695579076134912990, + 0.695219508749331800, 0.694859915802517050, 0.694500297307689140, + 0.694140653278070950, + 0.693780983726884790, 0.693421288667355530, 0.693061568112707690, + 0.692701822076166820, + 0.692342050570960430, 0.691982253610315510, 0.691622431207461700, + 0.691262583375628180, + 0.690902710128045050, 0.690542811477944610, 0.690182887438558710, + 0.689822938023121220, + 0.689462963244866330, 0.689102963117028790, 0.688742937652845550, + 0.688382886865552930, + 0.688022810768389670, 0.687662709374594510, 0.687302582697406850, + 0.686942430750068330, + 0.686582253545819920, 0.686222051097905130, 0.685861823419566700, + 0.685501570524050140, + 0.685141292424600310, 0.684780989134463280, 0.684420660666887120, + 0.684060307035119440, + 0.683699928252410110, 0.683339524332008840, 0.682979095287166160, + 0.682618641131135020, + 0.682258161877167370, 0.681897657538517720, 0.681537128128440470, + 0.681176573660190910, + 0.680815994147026320, 0.680455389602203310, 0.680094760038981280, + 0.679734105470619080, + 0.679373425910376310, 0.679012721371515250, 0.678651991867297080, + 0.678291237410985510, + 0.677930458015843620, 0.677569653695137220, 0.677208824462131490, + 0.676847970330092700, + 0.676487091312289350, 0.676126187421989040, 0.675765258672461950, + 0.675404305076978020, + 0.675043326648808170, 0.674682323401225250, 0.674321295347501510, + 0.673960242500911690, + 0.673599164874730370, 0.673238062482232950, 0.672876935336696900, + 0.672515783451398950, + 0.672154606839618470, 0.671793405514634180, 0.671432179489727110, + 0.671070928778178090, + 0.670709653393269050, 0.670348353348283690, 0.669987028656505170, + 0.669625679331219300, + 0.669264305385711360, 0.668902906833267590, 0.668541483687176590, + 0.668180035960725840, + 0.667818563667205600, 0.667457066819905800, 0.667095545432117240, + 0.666733999517132860, + 0.666372429088244790, 0.666010834158747840, 0.665649214741936390, + 0.665287570851105680, + 0.664925902499553190, 0.664564209700575500, 0.664202492467472090, + 0.663840750813541210, + 0.663478984752084110, 0.663117194296401260, 0.662755379459794350, + 0.662393540255567070, + 0.662031676697022450, 0.661669788797465960, 0.661307876570202740, + 0.660945940028538900, + 0.660583979185782600, 0.660221994055241400, 0.659859984650225110, + 0.659497950984043510, + 0.659135893070007080, 0.658773810921428500, 0.658411704551619570, + 0.658049573973894850, + 0.657687419201568260, 0.657325240247955020, 0.656963037126372160, + 0.656600809850135910, + 0.656238558432565400, 0.655876282886978410, 0.655513983226695960, + 0.655151659465038060, + 0.654789311615326050, 0.654426939690883280, 0.654064543705032310, + 0.653702123671098150, + 0.653339679602405470, 0.652977211512280050, 0.652614719414049580, + 0.652252203321041060, + 0.651889663246583930, 0.651527099204007310, 0.651164511206641320, + 0.650801899267818060, + 0.650439263400868990, 0.650076603619127890, 0.649713919935928420, + 0.649351212364604910, + 0.648988480918494040, 0.648625725610931460, 0.648262946455255510, + 0.647900143464803730, + 0.647537316652916140, 0.647174466032932490, 0.646811591618193350, + 0.646448693422041360, + 0.646085771457818310, 0.645722825738868860, 0.645359856278536980, + 0.644996863090167570, + 0.644633846187107620, 0.644270805582703550, 0.643907741290304040, + 0.643544653323257610, + 0.643181541694913480, 0.642818406418622980, 0.642455247507736860, + 0.642092064975608220, + 0.641728858835589830, 0.641365629101035340, 0.641002375785300500, + 0.640639098901740200, + 0.640275798463712080, 0.639912474484572560, 0.639549126977681070, + 0.639185755956396480, + 0.638822361434078330, 0.638458943424088490, 0.638095501939787920, + 0.637732036994540290, + 0.637368548601708660, 0.637005036774657030, 0.636641501526751590, + 0.636277942871357530, + 0.635914360821842830, 0.635550755391574910, 0.635187126593922070, + 0.634823474442254840, + 0.634459798949942640, 0.634096100130357660, 0.633732377996871770, + 0.633368632562857470, + 0.633004863841689520, 0.632641071846741790, 0.632277256591390780, + 0.631913418089012020, + 0.631549556352983710, 0.631185671396683470, 0.630821763233490040, + 0.630457831876783950, + 0.630093877339945260, 0.629729899636356280, 0.629365898779399080, + 0.629001874782456500, + 0.628637827658913300, 0.628273757422153860, 0.627909664085564810, + 0.627545547662532230, + 0.627181408166443410, 0.626817245610687520, 0.626453060008652860, + 0.626088851373730380, + 0.625724619719310480, 0.625360365058784670, 0.624996087405546350, + 0.624631786772988030, + 0.624267463174504880, 0.623903116623491180, 0.623538747133343780, + 0.623174354717459190, + 0.622809939389234460, 0.622445501162069090, 0.622081040049361490, + 0.621716556064512820, + 0.621352049220923570, 0.620987519531995270, 0.620622967011131400, + 0.620258391671734690, + 0.619893793527210410, 0.619529172590963410, 0.619164528876399280, + 0.618799862396925750, + 0.618435173165949760, 0.618070461196880800, 0.617705726503127720, + 0.617340969098100430, + 0.616976188995210780, 0.616611386207870040, 0.616246560749491690, + 0.615881712633488340, + 0.615516841873275490, 0.615151948482267840, 0.614787032473881110, + 0.614422093861533010, + 0.614057132658640590, 0.613692148878623000, 0.613327142534899510, + 0.612962113640889710, + 0.612597062210015750, 0.612231988255698470, 0.611866891791361560, + 0.611501772830428060, + 0.611136631386322020, 0.610771467472469460, 0.610406281102295440, + 0.610041072289227990, + 0.609675841046694030, 0.609310587388121830, 0.608945311326941520, + 0.608580012876582370, + 0.608214692050476290, 0.607849348862054220, 0.607483983324749510, + 0.607118595451995420, + 0.606753185257225550, 0.606387752753876020, 0.606022297955381760, + 0.605656820875180360, + 0.605291321526709060, 0.604925799923405670, 0.604560256078710220, + 0.604194690006061960, + 0.603829101718902580, 0.603463491230673220, 0.603097858554815790, + 0.602732203704774650, + 0.602366526693992930, 0.602000827535916330, 0.601635106243990190, + 0.601269362831660550, + 0.600903597312375640, 0.600537809699582810, 0.600172000006731770, + 0.599806168247271620, + 0.599440314434653620, 0.599074438582328780, 0.598708540703749010, + 0.598342620812368000, + 0.597976678921638860, 0.597610715045016950, 0.597244729195957500, + 0.596878721387916090, + 0.596512691634350830, 0.596146639948718640, 0.595780566344478960, + 0.595414470835091030, + 0.595048353434014630, 0.594682214154711790, 0.594316053010643270, + 0.593949870015273000, + 0.593583665182063740, 0.593217438524479500, 0.592851190055986300, + 0.592484919790049140, + 0.592118627740135460, 0.591752313919712170, 0.591385978342248260, + 0.591019621021212420, + 0.590653241970074180, 0.590286841202305120, 0.589920418731375800, + 0.589553974570759530, + 0.589187508733928890, 0.588821021234357310, 0.588454512085520460, + 0.588087981300892900, + 0.587721428893951850, 0.587354854878173850, 0.586988259267036350, + 0.586621642074019120, + 0.586255003312600500, 0.585888342996261690, 0.585521661138483250, + 0.585154957752746730, + 0.584788232852535560, 0.584421486451332410, 0.584054718562622140, + 0.583687929199888990, + 0.583321118376619710, 0.582954286106300290, 0.582587432402417840, + 0.582220557278461340, + 0.581853660747918780, 0.581486742824280810, 0.581119803521037650, + 0.580752842851679940, + 0.580385860829700780, 0.580018857468592270, 0.579651832781848730, + 0.579284786782964360, + 0.578917719485433800, 0.578550630902754050, 0.578183521048421080, + 0.577816389935933090, + 0.577449237578788300, 0.577082063990485340, 0.576714869184524860, + 0.576347653174406840, + 0.575980415973633590, 0.575613157595706530, 0.575245878054129520, + 0.574878577362406000, + 0.574511255534040030, 0.574143912582537940, 0.573776548521405030, + 0.573409163364148930, + 0.573041757124277180, 0.572674329815297640, 0.572306881450720390, + 0.571939412044054740, + 0.571571921608812320, 0.571204410158504090, 0.570836877706642270, + 0.570469324266740570, + 0.570101749852312100, 0.569734154476872480, 0.569366538153936560, + 0.568998900897020210, + 0.568631242719641270, 0.568263563635316600, 0.567895863657565500, + 0.567528142799906490, + 0.567160401075860410, 0.566792638498947680, 0.566424855082689470, + 0.566057050840608870, + 0.565689225786228160, 0.565321379933072190, 0.564953513294665140, + 0.564585625884531870, + 0.564217717716199550, 0.563849788803194140, 0.563481839159044150, + 0.563113868797277870, + 0.562745877731423820, 0.562377865975012940, 0.562009833541575080, + 0.561641780444642640, + 0.561273706697747450, 0.560905612314422150, 0.560537497308201240, + 0.560169361692618440, + 0.559801205481210040, 0.559433028687510990, 0.559064831325059240, + 0.558696613407391630, + 0.558328374948046320, 0.557960115960563050, 0.557591836458480870, + 0.557223536455341280, + 0.556855215964685120, 0.556486875000054000, 0.556118513574991650, + 0.555750131703040880, + 0.555381729397746880, 0.555013306672654360, 0.554644863541308600, + 0.554276400017257090, + 0.553907916114046440, 0.553539411845225590, 0.553170887224342820, + 0.552802342264947400, + 0.552433776980590490, 0.552065191384822350, 0.551696585491195710, + 0.551327959313262280, + 0.550959312864576220, 0.550590646158691240, 0.550221959209161620, + 0.549853252029543830, + 0.549484524633393480, 0.549115777034268170, 0.548747009245725500, + 0.548378221281323520, + 0.548009413154622370, 0.547640584879181100, 0.547271736468561530, + 0.546902867936324590, + 0.546533979296032200, 0.546165070561248080, 0.545796141745535150, + 0.545427192862458780, + 0.545058223925583670, 0.544689234948475210, 0.544320225944701200, + 0.543951196927828010, + 0.543582147911424560, 0.543213078909059120, 0.542843989934301940, + 0.542474881000723050, + 0.542105752121893050, 0.541736603311384620, 0.541367434582769480, + 0.540998245949621760, + 0.540629037425515050, 0.540259809024023600, 0.539890560758723770, + 0.539521292643190930, + 0.539152004691002770, 0.538782696915736770, 0.538413369330970610, + 0.538044021950284450, + 0.537674654787257180, 0.537305267855470390, 0.536935861168504670, + 0.536566434739941920, + 0.536196988583365510, 0.535827522712358230, 0.535458037140505110, + 0.535088531881390050, + 0.534719006948599860, 0.534349462355720230, 0.533979898116337950, + 0.533610314244041710, + 0.533240710752419080, 0.532871087655060300, 0.532501444965554960, + 0.532131782697493170, + 0.531762100864467290, 0.531392399480068670, 0.531022678557890980, + 0.530652938111527360, + 0.530283178154571710, 0.529913398700619820, 0.529543599763266700, + 0.529173781356109600, + 0.528803943492745180, 0.528434086186771010, 0.528064209451786560, + 0.527694313301390160, + 0.527324397749182720, 0.526954462808764120, 0.526584508493736840, + 0.526214534817702310, + 0.525844541794263210, 0.525474529437023890, 0.525104497759587900, + 0.524734446775560910, + 0.524364376498548390, 0.523994286942156220, 0.523624178119992400, + 0.523254050045663940, + 0.522883902732780290, 0.522513736194950230, 0.522143550445783310, + 0.521773345498891090, + 0.521403121367884030, 0.521032878066375100, 0.520662615607976660, + 0.520292334006301820, + 0.519922033274965560, 0.519551713427582000, 0.519181374477767470, + 0.518811016439137520, + 0.518440639325310040, 0.518070243149902240, 0.517699827926532130, + 0.517329393668819580, + 0.516958940390383700, 0.516588468104845820, 0.516217976825826600, + 0.515847466566947580, + 0.515476937341832310, 0.515106389164103120, 0.514735822047384990, + 0.514365236005302040, + 0.513994631051479240, 0.513624007199543600, 0.513253364463121090, + 0.512882702855839920, + 0.512512022391327980, 0.512141323083213470, 0.511770604945127050, + 0.511399867990697920, + 0.511029112233557960, 0.510658337687338040, 0.510287544365671140, + 0.509916732282189920, + 0.509545901450527690, 0.509175051884319660, 0.508804183597200140, + 0.508433296602805670, + 0.508062390914772230, 0.507691466546736580, 0.507320523512337470, + 0.506949561825212450, + 0.506578581499001590, 0.506207582547344550, 0.505836564983881190, + 0.505465528822253710, + 0.505094474076103310, 0.504723400759073290, 0.504352308884806750, + 0.503981198466947000, + 0.503610069519139780, 0.503238922055029400, 0.502867756088262840, + 0.502496571632486070, + 0.502125368701347050, 0.501754147308493770, 0.501382907467574190, + 0.501011649192238950, + 0.500640372496137020, 0.500269077392920150, 0.499897763896239410, + 0.499526432019746450, + 0.499155081777094940, 0.498783713181937540, 0.498412326247929250, + 0.498040920988724490, + 0.497669497417978280, 0.497298055549347750, 0.496926595396488870, + 0.496555116973059980, + 0.496183620292718900, 0.495812105369124070, 0.495440572215935850, + 0.495069020846813650, + 0.494697451275419140, 0.494325863515413130, 0.493954257580458580, + 0.493582633484217940, + 0.493210991240354450, 0.492839330862533120, 0.492467652364417970, + 0.492095955759675460, + 0.491724241061971320, 0.491352508284972070, 0.490980757442346090, + 0.490608988547760690, + 0.490237201614885710, 0.489865396657390210, 0.489493573688943970, + 0.489121732723218740, + 0.488749873773885120, 0.488377996854616250, 0.488006101979084450, + 0.487634189160962910, + 0.487262258413926560, 0.486890309751649490, 0.486518343187807900, + 0.486146358736077200, + 0.485774356410135000, 0.485402336223658360, 0.485030298190324950, + 0.484658242323814380, + 0.484286168637805270, 0.483914077145978560, 0.483541967862014480, + 0.483169840799594130, + 0.482797695972400300, 0.482425533394114920, 0.482053353078422120, + 0.481681155039005550, + 0.481308939289549380, 0.480936705843739820, 0.480564454715261990, + 0.480192185917803270, + 0.479819899465050160, 0.479447595370691370, 0.479075273648415010, + 0.478702934311909910, + 0.478330577374866780, 0.477958202850975230, 0.477585810753927250, + 0.477213401097414220, + 0.476840973895128200, 0.476468529160763100, 0.476096066908011760, + 0.475723587150569390, + 0.475351089902130650, 0.474978575176390750, 0.474606042987046840, + 0.474233493347795020, + 0.473860926272333670, 0.473488341774360670, 0.473115739867574380, + 0.472743120565675250, + 0.472370483882362520, 0.471997829831337810, 0.471625158426301700, + 0.471252469680957190, + 0.470879763609006460, 0.470507040224152460, 0.470134299540099940, + 0.469761541570552780, + 0.469388766329217000, 0.469015973829798090, 0.468643164086002100, + 0.468270337111537040, + 0.467897492920109850, 0.467524631525429830, 0.467151752941205530, + 0.466778857181146260, + 0.466405944258963200, 0.466033014188366350, 0.465660066983068220, + 0.465287102656780530, + 0.464914121223215740, 0.464541122696088100, 0.464168107089110940, + 0.463795074415999760, + 0.463422024690469060, 0.463048957926235630, 0.462675874137015720, + 0.462302773336526080, + 0.461929655538485470, 0.461556520756611410, 0.461183369004623920, + 0.460810200296242310, + 0.460437014645186440, 0.460063812065178160, 0.459690592569938270, + 0.459317356173189750, + 0.458944102888655060, 0.458570832730057170, 0.458197545711121090, + 0.457824241845570630, + 0.457450921147131930, 0.457077583629530550, 0.456704229306492570, + 0.456330858191746010, + 0.455957470299017840, 0.455584065642037350, 0.455210644234532610, + 0.454837206090234200, + 0.454463751222871910, 0.454090279646176210, 0.453716791373879380, + 0.453343286419712720, + 0.452969764797409750, 0.452596226520703360, 0.452222671603327130, + 0.451849100059016350, + 0.451475511901505420, 0.451101907144530910, 0.450728285801828830, + 0.450354647887135640, + 0.449980993414189900, 0.449607322396728900, 0.449233634848492320, + 0.448859930783219170, + 0.448486210214649020, 0.448112473156523420, 0.447738719622582710, + 0.447364949626569590, + 0.446991163182225700, 0.446617360303294910, 0.446243541003520480, + 0.445869705296646270, + 0.445495853196417930, 0.445121984716580210, 0.444748099870879880, + 0.444374198673063330, + 0.444000281136877280, 0.443626347276070590, 0.443252397104390790, + 0.442878430635587910, + 0.442504447883411090, 0.442130448861610240, 0.441756433583937120, + 0.441382402064142250, + 0.441008354315978680, 0.440634290353198510, 0.440260210189554690, + 0.439886113838801880, + 0.439512001314693700, 0.439137872630986080, 0.438763727801433690, + 0.438389566839793740, + 0.438015389759822630, 0.437641196575277220, 0.437266987299916590, + 0.436892761947498260, + 0.436518520531782470, 0.436144263066528480, 0.435769989565496290, + 0.435395700042447710, + 0.435021394511143410, 0.434647072985346380, 0.434272735478819010, + 0.433898382005324050, + 0.433524012578626440, 0.433149627212489670, 0.432775225920679740, + 0.432400808716961900, + 0.432026375615101930, 0.431651926628867530, 0.431277461772025310, + 0.430902981058344070, + 0.430528484501591540, 0.430153972115537800, 0.429779443913952170, + 0.429404899910604490, + 0.429030340119266550, 0.428655764553708960, 0.428281173227704760, + 0.427906566155026040, + 0.427531943349445720, 0.427157304824738350, 0.426782650594677570, + 0.426407980673039090, + 0.426033295073598160, 0.425658593810130330, 0.425283876896413280, + 0.424909144346223290, + 0.424534396173339160, 0.424159632391538870, 0.423784853014600950, + 0.423410058056305830, + 0.423035247530432810, 0.422660421450763490, 0.422285579831078230, + 0.421910722685159720, + 0.421535850026790060, 0.421160961869751720, 0.420786058227829220, + 0.420411139114805770, + 0.420036204544466940, 0.419661254530597550, 0.419286289086983070, + 0.418911308227410740, + 0.418536311965666650, 0.418161300315539220, 0.417786273290816130, + 0.417411230905285650, + 0.417036173172737830, 0.416661100106961610, 0.416286011721748230, + 0.415910908030888200, + 0.415535789048172620, 0.415160654787394280, 0.414785505262345030, + 0.414410340486818910, + 0.414035160474608700, 0.413659965239509710, 0.413284754795316230, + 0.412909529155823300, + 0.412534288334827750, 0.412159032346125280, 0.411783761203513790, + 0.411408474920790520, + 0.411033173511753220, 0.410657856990201580, 0.410282525369933980, + 0.409907178664751180, + 0.409531816888453190, 0.409156440054840590, 0.408781048177715660, + 0.408405641270879690, + 0.408030219348136270, 0.407654782423288010, 0.407279330510138260, + 0.406903863622492260, + 0.406528381774153900, 0.406152884978929480, 0.405777373250624070, + 0.405401846603045010, + 0.405026305049998980, 0.404650748605293040, 0.404275177282736260, + 0.403899591096136380, + 0.403523990059303620, 0.403148374186047210, 0.402772743490177110, + 0.402397097985504990, + 0.402021437685841480, 0.401645762604999350, 0.401270072756790610, + 0.400894368155027990, + 0.400518648813525830, 0.400142914746097480, 0.399767165966558420, + 0.399391402488723400, + 0.399015624326407800, 0.398639831493428740, 0.398264024003602220, + 0.397888201870746420, + 0.397512365108678430, 0.397136513731217500, 0.396760647752182230, + 0.396384767185391620, + 0.396008872044666730, 0.395632962343827170, 0.395257038096694990, + 0.394881099317091370, + 0.394505146018838130, 0.394129178215758820, 0.393753195921675850, + 0.393377199150413860, + 0.393001187915796750, 0.392625162231649010, 0.392249122111796800, + 0.391873067570065240, + 0.391496998620281590, 0.391120915276272410, 0.390744817551864850, + 0.390368705460887750, + 0.389992579017168830, 0.389616438234538010, 0.389240283126824070, + 0.388864113707858060, + 0.388487929991470140, 0.388111731991491180, 0.387735519721753690, + 0.387359293196089140, + 0.386983052428331030, 0.386606797432312350, 0.386230528221866430, + 0.385854244810828530, + 0.385477947213032580, 0.385101635442314900, 0.384725309512510880, + 0.384348969437456610, + 0.383972615230989860, 0.383596246906947210, 0.383219864479167560, + 0.382843467961488940, + 0.382467057367749940, 0.382090632711791060, 0.381714194007451380, + 0.381337741268572390, + 0.380961274508994250, 0.380584793742559550, 0.380208298983109930, + 0.379831790244487540, + 0.379455267540536490, 0.379078730885099520, 0.378702180292021630, + 0.378325615775147170, + 0.377949037348320800, 0.377572445025389230, 0.377195838820197690, + 0.376819218746593910, + 0.376442584818424570, 0.376065937049537060, 0.375689275453780500, + 0.375312600045002780, + 0.374935910837054080, 0.374559207843783660, 0.374182491079041500, + 0.373805760556679190, + 0.373429016290547200, 0.373052258294498230, 0.372675486582383640, + 0.372298701168057190, + 0.371921902065371730, 0.371545089288180640, 0.371168262850339210, + 0.370791422765701320, + 0.370414569048123140, 0.370037701711460170, 0.369660820769568240, + 0.369283926236305070, + 0.368907018125527120, 0.368530096451093140, 0.368153161226860980, + 0.367776212466689010, + 0.367399250184437480, 0.367022274393965340, 0.366645285109133750, + 0.366268282343803150, + 0.365891266111834370, 0.365514236427090080, 0.365137193303431750, + 0.364760136754723020, + 0.364383066794826350, 0.364005983437606320, 0.363628886696926890, + 0.363251776586652310, + 0.362874653120648700, 0.362497516312780990, 0.362120366176916230, + 0.361743202726920790, + 0.361366025976661450, 0.360988835940006750, 0.360611632630824020, + 0.360234416062982840, + 0.359857186250351960, 0.359479943206800550, 0.359102686946199680, + 0.358725417482419150, + 0.358348134829330870, 0.357970839000806010, 0.357593530010716310, + 0.357216207872935120, + 0.356838872601334680, 0.356461524209789380, 0.356084162712172360, + 0.355706788122359060, + 0.355329400454223950, 0.354951999721642100, 0.354574585938490280, + 0.354197159118644080, + 0.353819719275981330, 0.353442266424378930, 0.353064800577714280, + 0.352687321749866610, + 0.352309829954713830, 0.351932325206136210, 0.351554807518012990, + 0.351177276904224070, + 0.350799733378650890, 0.350422176955173910, 0.350044607647675640, + 0.349667025470037810, + 0.349289430436142520, 0.348911822559873850, 0.348534201855114360, + 0.348156568335749040, + 0.347778922015661520, 0.347401262908737570, 0.347023591028862320, + 0.346645906389921150, + 0.346268209005801410, 0.345890498890388980, 0.345512776057572080, + 0.345135040521238170, + 0.344757292295274910, 0.344379531393571970, 0.344001757830017680, + 0.343623971618502560, + 0.343246172772916250, 0.342868361307148980, 0.342490537235092600, + 0.342112700570637750, + 0.341734851327677280, 0.341356989520103240, 0.340979115161808070, + 0.340601228266685980, + 0.340223328848629880, 0.339845416921535030, 0.339467492499295200, + 0.339089555595806560, + 0.338711606224964210, 0.338333644400663940, 0.337955670136803170, + 0.337577683447278010, + 0.337199684345986910, 0.336821672846827290, 0.336443648963697160, + 0.336065612710496290, + 0.335687564101123050, 0.335309503149478110, 0.334931429869461230, + 0.334553344274972690, + 0.334175246379914470, 0.333797136198187240, 0.333419013743693980, + 0.333040879030336690, + 0.332662732072017800, 0.332284572882641680, 0.331906401476111280, + 0.331528217866331690, + 0.331150022067206780, 0.330771814092642610, 0.330393593956544440, + 0.330015361672817750, + 0.329637117255370090, 0.329258860718107450, 0.328880592074938190, + 0.328502311339769700, + 0.328124018526509800, 0.327745713649068180, 0.327367396721353070, + 0.326989067757275040, + 0.326610726770743760, 0.326232373775669270, 0.325854008785963320, + 0.325475631815536570, + 0.325097242878301660, 0.324718841988170470, 0.324340429159055250, + 0.323962004404870050, + 0.323583567739527570, 0.323205119176942720, 0.322826658731029110, + 0.322448186415702550, + 0.322069702244877910, 0.321691206232470550, 0.321312698392397570, + 0.320934178738574720, + 0.320555647284919980, 0.320177104045350440, 0.319798549033783570, + 0.319419982264138650, + 0.319041403750333630, 0.318662813506288670, 0.318284211545923010, + 0.317905597883156250, + 0.317526972531909870, 0.317148335506103940, 0.316769686819660780, + 0.316391026486501690, + 0.316012354520548600, 0.315633670935725030, 0.315254975745953180, + 0.314876268965157470, + 0.314497550607261090, 0.314118820686189180, 0.313740079215866160, + 0.313361326210216840, + 0.312982561683167790, 0.312603785648644220, 0.312224998120573420, + 0.311846199112882030, + 0.311467388639496860, 0.311088566714346650, 0.310709733351358600, + 0.310330888564462340, + 0.309952032367586390, 0.309573164774659850, 0.309194285799613390, + 0.308815395456376430, + 0.308436493758880660, 0.308057580721056660, 0.307678656356835560, + 0.307299720680150270, + 0.306920773704932260, 0.306541815445115160, 0.306162845914631390, + 0.305783865127415400, + 0.305404873097400780, 0.305025869838521590, 0.304646855364713530, + 0.304267829689911010, + 0.303888792828050650, 0.303509744793068030, 0.303130685598899270, + 0.302751615259482190, + 0.302372533788753170, 0.301993441200650910, 0.301614337509113100, + 0.301235222728077840, + 0.300856096871485010, 0.300476959953273060, 0.300097811987382670, + 0.299718652987753580, + 0.299339482968325970, 0.298960301943041680, 0.298581109925841300, + 0.298201906930667390, + 0.297822692971461410, 0.297443468062166820, 0.297064232216726120, + 0.296684985449082390, + 0.296305727773180260, 0.295926459202963120, 0.295547179752376430, + 0.295167889435364820, + 0.294788588265873170, 0.294409276257848300, 0.294029953425235520, + 0.293650619781982260, + 0.293271275342035120, 0.292891920119341120, 0.292512554127848930, + 0.292133177381505850, + 0.291753789894261320, 0.291374391680063520, 0.290994982752862730, + 0.290615563126608250, + 0.290236132815249790, 0.289856691832738880, 0.289477240193025510, + 0.289097777910061970, + 0.288718304997799550, 0.288338821470189910, 0.287959327341186510, + 0.287579822624741350, + 0.287200307334808670, 0.286820781485341620, 0.286441245090293950, + 0.286061698163620930, + 0.285682140719276560, 0.285302572771216960, 0.284922994333397350, + 0.284543405419773240, + 0.284163806044301910, 0.283784196220939370, 0.283404575963643550, + 0.283024945286371230, + 0.282645304203081090, 0.282265652727731130, 0.281885990874279570, + 0.281506318656686290, + 0.281126636088910030, 0.280746943184911340, 0.280367239958650150, + 0.279987526424086530, + 0.279607802595182420, 0.279228068485898210, 0.278848324110196550, + 0.278468569482039130, + 0.278088804615388040, 0.277709029524206950, 0.277329244222458250, + 0.276949448724106480, + 0.276569643043115150, 0.276189827193448200, 0.275810001189071290, + 0.275430165043948570, + 0.275050318772046500, 0.274670462387330010, 0.274290595903766200, + 0.273910719335321300, + 0.273530832695961790, 0.273150935999655950, 0.272771029260370560, + 0.272391112492074590, + 0.272011185708736060, 0.271631248924323390, 0.271251302152806570, + 0.270871345408154380, + 0.270491378704337540, 0.270111402055325910, 0.269731415475089780, + 0.269351418977600950, + 0.268971412576829990, 0.268591396286749500, 0.268211370121331170, + 0.267831334094547010, + 0.267451288220370730, 0.267071232512774700, 0.266691166985733360, + 0.266311091653219700, + 0.265931006529208920, 0.265550911627675250, 0.265170806962593210, + 0.264790692547939020, + 0.264410568397687560, 0.264030434525815760, 0.263650290946299660, + 0.263270137673115630, + 0.262889974720241610, 0.262509802101654310, 0.262129619831332370, + 0.261749427923253670, + 0.261369226391396310, 0.260989015249740050, 0.260608794512263380, + 0.260228564192946710, + 0.259848324305769600, 0.259468074864711960, 0.259087815883755400, + 0.258707547376880010, + 0.258327269358068100, 0.257946981841300490, 0.257566684840560170, + 0.257186378369829110, + 0.256806062443089680, 0.256425737074325920, 0.256045402277520320, + 0.255665058066657680, + 0.255284704455721660, 0.254904341458696390, 0.254523969089567590, + 0.254143587362319620, + 0.253763196290938850, 0.253382795889410710, 0.253002386171721110, + 0.252621967151857420, + 0.252241538843805680, 0.251861101261554090, 0.251480654419089730, + 0.251100198330400150, + 0.250719733009474530, 0.250339258470300590, 0.249958774726868170, + 0.249578281793165680, + 0.249197779683183660, 0.248817268410911650, 0.248436747990339490, + 0.248056218435458720, + 0.247675679760259450, 0.247295131978733870, 0.246914575104873220, + 0.246534009152669040, + 0.246153434136114490, 0.245772850069201410, 0.245392256965923620, + 0.245011654840274010, + 0.244631043706245800, 0.244250423577833860, 0.243869794469031620, + 0.243489156393834590, + 0.243108509366237320, 0.242727853400234670, 0.242347188509823150, + 0.241966514708997830, + 0.241585832011755900, 0.241205140432093070, 0.240824439984007180, + 0.240443730681495050, + 0.240063012538553830, 0.239682285569182310, 0.239301549787377890, + 0.238920805207139960, + 0.238540051842467020, 0.238159289707357810, 0.237778518815812740, + 0.237397739181830820, + 0.237016950819413100, 0.236636153742559610, 0.236255347965270780, + 0.235874533501548580, + 0.235493710365393630, 0.235112878570808560, 0.234732038131795020, + 0.234351189062355030, + 0.233970331376492150, 0.233589465088208580, 0.233208590211508550, + 0.232827706760394850, + 0.232446814748872410, 0.232065914190945020, 0.231685005100616930, + 0.231304087491893930, + 0.230923161378780380, 0.230542226775282770, 0.230161283695406500, + 0.229780332153157300, + 0.229399372162542610, 0.229018403737568290, 0.228637426892242400, + 0.228256441640571880, + 0.227875447996564060, 0.227494445974227850, 0.227113435587570770, + 0.226732416850602300, + 0.226351389777330990, 0.225970354381765690, 0.225589310677916880, + 0.225208258679793520, + 0.224827198401406690, 0.224446129856766040, 0.224065053059883250, + 0.223683968024768950, + 0.223302874765434120, 0.222921773295891380, 0.222540663630151820, + 0.222159545782228660, + 0.221778419766134050, 0.221397285595880480, 0.221016143285482050, + 0.220634992848951380, + 0.220253834300303180, 0.219872667653551100, 0.219491492922709110, + 0.219110310121792800, + 0.218729119264816280, 0.218347920365795780, 0.217966713438746380, + 0.217585498497683580, + 0.217204275556624420, 0.216823044629584520, 0.216441805730581500, + 0.216060558873631570, + 0.215679304072752960, 0.215298041341962870, 0.214916770695278810, + 0.214535492146719880, + 0.214154205710303750, 0.213772911400050090, 0.213391609229977570, + 0.213010299214105140, + 0.212628981366453330, 0.212247655701041290, 0.211866322231890090, + 0.211484980973019880, + 0.211103631938451000, 0.210722275142205480, 0.210340910598303870, + 0.209959538320768660, + 0.209578158323621420, 0.209196770620883960, 0.208815375226579670, + 0.208433972154730530, + 0.208052561419360520, 0.207671143034492080, 0.207289717014149830, + 0.206908283372357230, + 0.206526842123138070, 0.206145393280517730, 0.205763936858520150, + 0.205382472871171230, + 0.205001001332495910, 0.204619522256519300, 0.204238035657268250, + 0.203856541548768030, + 0.203475039945045950, 0.203093530860128300, 0.202712014308041620, + 0.202330490302814110, + 0.201948958858472420, 0.201567419989045200, 0.201185873708560170, + 0.200804320031045230, + 0.200422758970529910, 0.200041190541042220, 0.199659614756612230, + 0.199278031631268500, + 0.198896441179041650, 0.198514843413961220, 0.198133238350057030, + 0.197751626001360480, + 0.197370006381901520, 0.196988379505712050, 0.196606745386822960, + 0.196225104039265410, + 0.195843455477072190, 0.195461799714274460, 0.195080136764905570, + 0.194698466642997730, + 0.194316789362583340, 0.193935104937696560, 0.193553413382369890, + 0.193171714710637930, + 0.192790008936534220, 0.192408296074092570, 0.192026576137348330, + 0.191644849140335360, + 0.191263115097089540, 0.190881374021645320, 0.190499625928039040, + 0.190117870830306100, + 0.189736108742482030, 0.189354339678604100, 0.188972563652707950, + 0.188590780678831250, + 0.188208990771010640, 0.187827193943283040, 0.187445390209686870, + 0.187063579584259070, + 0.186681762081038650, 0.186299937714063470, 0.185918106497371700, + 0.185536268445003070, + 0.185154423570995760, 0.184772571889390000, 0.184390713414225000, + 0.184008848159540110, + 0.183626976139376310, 0.183245097367773090, 0.182863211858771880, + 0.182481319626412670, + 0.182099420684737420, 0.181717515047787020, 0.181335602729602590, + 0.180953683744226880, + 0.180571758105701030, 0.180189825828068250, 0.179807886925370670, + 0.179425941411650660, + 0.179043989300952110, 0.178662030607317450, 0.178280065344791100, + 0.177898093527416370, + 0.177516115169236820, 0.177134130284297610, 0.176752138886642350, + 0.176370140990316640, + 0.175988136609365020, 0.175606125757832240, 0.175224108449764660, + 0.174842084699207030, + 0.174460054520206240, 0.174078017926807490, 0.173695974933058080, + 0.173313925553004180, + 0.172931869800692250, 0.172549807690170230, 0.172167739235484620, + 0.171785664450683800, + 0.171403583349815180, 0.171021495946926340, 0.170639402256066410, + 0.170257302291283000, + 0.169875196066625710, 0.169493083596143100, 0.169110964893883830, + 0.168728839973898290, + 0.168346708850235140, 0.167964571536945220, 0.167582428048078130, + 0.167200278397683750, + 0.166818122599813570, 0.166435960668517400, 0.166053792617847200, + 0.165671618461853270, + 0.165289438214587970, 0.164907251890102520, 0.164525059502448390, + 0.164142861065678550, + 0.163760656593844480, 0.163378446100999640, 0.162996229601196390, + 0.162614007108487250, + 0.162231778636926370, 0.161849544200566300, 0.161467303813461580, + 0.161085057489665670, + 0.160702805243232240, 0.160320547088216470, 0.159938283038672050, + 0.159556013108654580, + 0.159173737312218650, 0.158791455663418930, 0.158409168176311760, + 0.158026874864951870, + 0.157644575743395960, 0.157262270825699210, 0.156879960125918730, + 0.156497643658110590, + 0.156115321436331000, 0.155732993474637760, 0.155350659787087090, + 0.154968320387737170, + 0.154585975290645110, 0.154203624509868190, 0.153821268059465250, + 0.153438905953493550, + 0.153056538206012340, 0.152674164831079730, 0.152291785842754070, + 0.151909401255095250, + 0.151527011082161540, 0.151144615338013210, 0.150762214036709470, + 0.150379807192309620, + 0.149997394818874590, 0.149614976930463660, 0.149232553541138180, + 0.148850124664957870, + 0.148467690315984390, 0.148085250508278370, 0.147702805255900570, + 0.147320354572913260, + 0.146937898473377210, 0.146555436971355090, 0.146172970080908520, + 0.145790497816099230, + 0.145408020190990560, 0.145025537219644170, 0.144643048916123810, + 0.144260555294492000, + 0.143878056368811510, 0.143495552153146630, 0.143113042661560050, + 0.142730527908116440, + 0.142348007906879320, 0.141965482671912420, 0.141582952217280980, + 0.141200416557048680, + 0.140817875705281120, 0.140435329676042390, 0.140052778483398480, + 0.139670222141414250, + 0.139287660664154770, 0.138905094065686600, 0.138522522360074780, + 0.138139945561386200, + 0.137757363683686740, 0.137374776741042340, 0.136992184747520560, + 0.136609587717187310, + 0.136226985664110460, 0.135844378602356760, 0.135461766545993150, + 0.135079149509088060, + 0.134696527505708320, 0.134313900549922760, 0.133931268655799020, + 0.133548631837404950, + 0.133165990108809860, 0.132783343484081580, 0.132400691977289760, + 0.132018035602502530, + 0.131635374373789940, 0.131252708305220960, 0.130870037410864640, + 0.130487361704791580, + 0.130104681201070800, 0.129721995913773260, 0.129339305856968730, + 0.128956611044727220, + 0.128573911491120210, 0.128191207210217570, 0.127808498216091110, + 0.127425784522811530, + 0.127043066144449680, 0.126660343095077900, 0.126277615388766920, + 0.125894883039589430, + 0.125512146061616980, 0.125129404468921260, 0.124746658275575490, + 0.124363907495651240, + 0.123981152143222060, 0.123598392232359880, 0.123215627777138580, + 0.122832858791630880, + 0.122450085289909640, 0.122067307286049230, 0.121684524794122440, + 0.121301737828203960, + 0.120918946402367330, 0.120536150530686250, 0.120153350227235940, + 0.119770545506089950, + 0.119387736381323830, 0.119004922867011920, 0.118622104977228730, + 0.118239282726050290, + 0.117856456127550970, 0.117473625195807100, 0.117090789944893860, + 0.116707950388886520, + 0.116325106541861910, 0.115942258417895240, 0.115559406031063570, + 0.115176549395442460, + 0.114793688525109290, 0.114410823434140360, 0.114027954136612060, + 0.113645080646602280, + 0.113262202978187320, 0.112879321145445350, 0.112496435162453430, + 0.112113545043288730, + 0.111730650802029900, 0.111347752452754000, 0.110964850009539970, + 0.110581943486465610, + 0.110199032897608850, 0.109816118257049110, 0.109433199578864170, + 0.109050276877133770, + 0.108667350165936400, 0.108284419459350770, 0.107901484771457020, + 0.107518546116333660, + 0.107135603508061170, 0.106752656960718350, 0.106369706488385940, + 0.105986752105143480, + 0.105603793825070680, 0.105220831662248700, 0.104837865630757090, + 0.104454895744677270, + 0.104071922018089540, 0.103688944465074300, 0.103305963099713400, + 0.102922977936087120, + 0.102539988988277600, 0.102156996270365800, 0.101773999796432830, + 0.101390999580561250, + 0.101007995636832020, 0.100624987979327970, 0.100241976622130760, + 0.099858961579322170, + 0.099475942864985456, 0.099092920493202258, 0.098709894478056073, + 0.098326864833628791, + 0.097943831574004214, 0.097560794713264939, 0.097177754265493674, + 0.096794710244774623, + 0.096411662665190329, 0.096028611540825232, 0.095645556885762609, + 0.095262498714085819, + 0.094879437039879722, 0.094496371877227495, 0.094113303240214247, + 0.093730231142923864, + 0.093347155599440373, 0.092964076623849271, 0.092580994230234359, + 0.092197908432681386, + 0.091814819245274432, 0.091431726682099479, 0.091048630757241303, + 0.090665531484784803, + 0.090282428878816323, 0.089899322953420582, 0.089516213722684160, + 0.089133101200692441, + 0.088749985401530951, 0.088366866339286629, 0.087983744028044805, + 0.087600618481892656, + 0.087217489714916191, 0.086834357741201490, 0.086451222574836131, + 0.086068084229906014, + 0.085684942720498897, 0.085301798060701386, 0.084918650264600160, + 0.084535499346283349, + 0.084152345319837438, 0.083769188199350780, 0.083386027998910095, + 0.083002864732603973, + 0.082619698414519799, 0.082236529058745025, 0.081853356679368619, + 0.081470181290477811, + 0.081087002906161790, 0.080703821540508452, 0.080320637207605849, + 0.079937449921543474, + 0.079554259696409127, 0.079171066546292510, 0.078787870485282088, + 0.078404671527466441, + 0.078021469686935602, 0.077638264977777913, 0.077255057414083589, + 0.076871847009941652, + 0.076488633779441206, 0.076105417736672773, 0.075722198895725248, + 0.075338977270689375, + 0.074955752875654230, 0.074572525724710764, 0.074189295831948693, + 0.073806063211457842, + 0.073422827877329483, 0.073039589843653177, 0.072656349124520389, + 0.072273105734021334, + 0.071889859686246352, 0.071506610995287156, 0.071123359675233852, + 0.070740105740178361, + 0.070356849204211397, 0.069973590081423773, 0.069590328385907715, + 0.069207064131753759, + 0.068823797333054326, 0.068440528003900616, 0.068057256158383886, + 0.067673981810596848, + 0.067290704974630494, 0.066907425664577733, 0.066524143894529736, + 0.066140859678579578, + 0.065757573030819083, 0.065374283965340146, 0.064990992496236119, + 0.064607698637598646, + 0.064224402403521202, 0.063841103808096086, 0.063457802865415636, + 0.063074499589573618, + 0.062691193994662109, 0.062307886094775049, 0.061924575904005130, + 0.061541263436445129, + 0.061157948706189229, 0.060774631727329942, 0.060391312513961619, + 0.060007991080177375, + 0.059624667440070382, 0.059241341607735261, 0.058858013597264912, + 0.058474683422754095, + 0.058091351098295878, 0.057708016637985186, 0.057324680055915692, + 0.056941341366181127, + 0.056558000582876661, 0.056174657720095743, 0.055791312791933681, + 0.055407965812484541, + 0.055024616795842439, 0.054641265756102911, 0.054257912707359794, + 0.053874557663708772, + 0.053491200639244271, 0.053107841648060788, 0.052724480704254229, + 0.052341117821918783, + 0.051957753015150501, 0.051574386298044173, 0.051191017684694640, + 0.050807647189198162, + 0.050424274825649297, 0.050040900608144430, 0.049657524550778251, + 0.049274146667647289, + 0.048890766972846805, 0.048507385480472134, 0.048124002204620014, + 0.047740617159385448, + 0.047357230358865306, 0.046973841817155179, 0.046590451548350717, + 0.046207059566548990, + 0.045823665885845313, 0.045440270520336883, 0.045056873484119603, + 0.044673474791289434, + 0.044290074455943754, 0.043906672492178188, 0.043523268914090238, + 0.043139863735776100, + 0.042756456971332048, 0.042373048634855741, 0.041989638740443119, + 0.041606227302191955, + 0.041222814334198304, 0.040839399850560058, 0.040455983865373815, + 0.040072566392736257, + 0.039689147446745419, 0.039305727041497644, 0.038922305191091085, + 0.038538881909622631, + 0.038155457211189216, 0.037772031109889144, 0.037388603619819022, + 0.037005174755077273, + 0.036621744529761024, 0.036238312957967478, 0.035854880053795196, + 0.035471445831341021, + 0.035088010304703626, 0.034704573487980395, 0.034321135395268765, + 0.033937696040667535, + 0.033554255438273790, 0.033170813602186440, 0.032787370546502645, + 0.032403926285321405, + 0.032020480832740429, 0.031637034202857461, 0.031253586409771626, + 0.030870137467580314, + 0.030486687390382738, 0.030103236192276818, 0.029719783887360508, + 0.029336330489733147, + 0.028952876013492331, 0.028569420472737472, 0.028185963881566689, + 0.027802506254078142, + 0.027419047604371360, 0.027035587946544135, 0.026652127294696067, + 0.026268665662925468, + 0.025885203065330677, 0.025501739516011413, 0.025118275029065638, + 0.024734809618593138, + 0.024351343298691951, 0.023967876083461924, 0.023584407987001611, + 0.023200939023409587, + 0.022817469206785804, 0.022433998551228459, 0.022050527070837558, + 0.021667054779711814, + 0.021283581691949955, 0.020900107821652084, 0.020516633182916549, + 0.020133157789843505, + 0.019749681656531803, 0.019366204797080316, 0.018982727225589285, + 0.018599248956157190, + 0.018215770002884327, 0.017832290379869671, 0.017448810101212228, + 0.017065329181012358, + 0.016681847633368677, 0.016298365472381587, 0.015914882712149747, + 0.015531399366773606, + 0.015147915450352307, 0.014764430976985016, 0.014380945960772247, + 0.013997460415812761, + 0.013613974356207112, 0.013230487796054543, 0.012847000749454314, + 0.012463513230507034, + 0.012080025253311559, 0.011696536831968529, 0.011313047980577277, + 0.010929558713237145, + 0.010546069044048827, 0.010162578987111254, 0.009779088556525145, + 0.009395597766389905, + 0.009012106630804949, 0.008628615163871038, 0.008245123379687167, + 0.007861631292354124, + 0.007478138915970929, 0.007094646264638386, 0.006711153352455981, + 0.006327660193523208, + 0.005944166801940901, 0.005560673191808128, 0.005177179377225743, + 0.004793685372293270, + 0.004410191191110246, 0.004026696847777542, 0.003643202356394263, + 0.003259707731061291, + 0.002876212985878184, 0.002492718134944503, 0.002109223192361147, + 0.001725728172227238, + 0.001342233088643682, 0.000958737955710053, 0.000575242787525925, + 0.000191747598192208, + +}; + +/** + * @brief Initialization function for the floating-point DCT4/IDCT4. + * @param[in,out] *S points to an instance of floating-point DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of floating-point RFFT/RIFFT structure. + * @param[in] *S_CFFT points to an instance of floating-point CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported transform length. + * \par Normalizing factor: + * The normalizing factor is sqrt(2/N), which depends on the size of transform N. + * Floating-point normalizing factors are mentioned in the table below for different DCT sizes: + * \image html dct4NormalizingF32Table.gif + */ + +arm_status arm_dct4_init_f32( + arm_dct4_instance_f32 * S, + arm_rfft_instance_f32 * S_RFFT, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint16_t N, + uint16_t Nby2, + float32_t normalize) +{ + /* Initialize the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initializing the pointer array with the weight table base addresses of different lengths */ + float32_t *twiddlePtr[4] = + { (float32_t *) Weights_128, (float32_t *) Weights_512, + (float32_t *) Weights_2048, (float32_t *) Weights_8192 + }; + + /* Initializing the pointer array with the cos factor table base addresses of different lengths */ + float32_t *pCosFactor[4] = + { (float32_t *) cos_factors_128, (float32_t *) cos_factors_512, + (float32_t *) cos_factors_2048, (float32_t *) cos_factors_8192 + }; + + /* Initialize the DCT4 length */ + S->N = N; + + /* Initialize the half of DCT4 length */ + S->Nby2 = Nby2; + + /* Initialize the DCT4 Normalizing factor */ + S->normalize = normalize; + + /* Initialize Real FFT Instance */ + S->pRfft = S_RFFT; + + /* Initialize Complex FFT Instance */ + S->pCfft = S_CFFT; + + switch (N) + { + /* Initialize the table modifier values */ + case 8192u: + S->pTwiddle = twiddlePtr[3]; + S->pCosFactor = pCosFactor[3]; + break; + case 2048u: + S->pTwiddle = twiddlePtr[2]; + S->pCosFactor = pCosFactor[2]; + break; + case 512u: + S->pTwiddle = twiddlePtr[1]; + S->pCosFactor = pCosFactor[1]; + break; + case 128u: + S->pTwiddle = twiddlePtr[0]; + S->pCosFactor = pCosFactor[0]; + break; + default: + status = ARM_MATH_ARGUMENT_ERROR; + } + + /* Initialize the RFFT/RIFFT */ + arm_rfft_init_f32(S->pRfft, S->pCfft, S->N, 0u, 1u); + + /* return the status of DCT4 Init function */ + return (status); +} + +/** + * @} end of DCT4_IDCT4 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,4284 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_dct4_init_q15.c +* +* Description: Initialization function of DCT-4 & IDCT4 Q15 +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup DCT4_IDCT4 + * @{ + */ + +/* +* @brief Weights Table +*/ + +/** +* \par +* Weights tables are generated using the formula :
weights[n] = e^(-j*n*pi/(2*N))
+* \par +* C command to generate the table +*
    
+* for(i = 0; i< N; i++)    
+* {    
+*   weights[2*i]= cos(i*c);    
+*   weights[(2*i)+1]= -sin(i * c);    
+* } 
+* \par +* where N is the Number of weights to be calculated and c is pi/(2*N) +* \par +* Converted the output to q15 format by multiplying with 2^31 and saturated if required. +* \par +* In the tables below the real and imaginary values are placed alternatively, hence the +* array length is 2*N. +*/ + +static const q15_t ALIGN4 WeightsQ15_128[256] = { + 0x7fff, 0x0, 0x7ffd, 0xfe6e, 0x7ff6, 0xfcdc, 0x7fe9, 0xfb4a, + 0x7fd8, 0xf9b9, 0x7fc2, 0xf827, 0x7fa7, 0xf696, 0x7f87, 0xf505, + 0x7f62, 0xf375, 0x7f38, 0xf1e5, 0x7f09, 0xf055, 0x7ed5, 0xeec7, + 0x7e9d, 0xed38, 0x7e5f, 0xebab, 0x7e1d, 0xea1e, 0x7dd6, 0xe893, + 0x7d8a, 0xe708, 0x7d39, 0xe57e, 0x7ce3, 0xe3f5, 0x7c89, 0xe26d, + 0x7c29, 0xe0e7, 0x7bc5, 0xdf61, 0x7b5d, 0xdddd, 0x7aef, 0xdc5a, + 0x7a7d, 0xdad8, 0x7a05, 0xd958, 0x798a, 0xd7da, 0x7909, 0xd65d, + 0x7884, 0xd4e1, 0x77fa, 0xd368, 0x776c, 0xd1ef, 0x76d9, 0xd079, + 0x7641, 0xcf05, 0x75a5, 0xcd92, 0x7504, 0xcc22, 0x745f, 0xcab3, + 0x73b5, 0xc946, 0x7307, 0xc7dc, 0x7255, 0xc674, 0x719e, 0xc50e, + 0x70e2, 0xc3aa, 0x7023, 0xc248, 0x6f5f, 0xc0e9, 0x6e96, 0xbf8d, + 0x6dca, 0xbe32, 0x6cf9, 0xbcdb, 0x6c24, 0xbb86, 0x6b4a, 0xba33, + 0x6a6d, 0xb8e4, 0x698c, 0xb797, 0x68a6, 0xb64c, 0x67bd, 0xb505, + 0x66cf, 0xb3c1, 0x65dd, 0xb27f, 0x64e8, 0xb141, 0x63ef, 0xb005, + 0x62f2, 0xaecd, 0x61f1, 0xad97, 0x60ec, 0xac65, 0x5fe3, 0xab36, + 0x5ed7, 0xaa0b, 0x5dc7, 0xa8e3, 0x5cb4, 0xa7be, 0x5b9d, 0xa69c, + 0x5a82, 0xa57e, 0x5964, 0xa463, 0x5842, 0xa34c, 0x571d, 0xa239, + 0x55f5, 0xa129, 0x54ca, 0xa01d, 0x539b, 0x9f14, 0x5269, 0x9e0f, + 0x5133, 0x9d0e, 0x4ffb, 0x9c11, 0x4ebf, 0x9b18, 0x4d81, 0x9a23, + 0x4c3f, 0x9931, 0x4afb, 0x9843, 0x49b4, 0x975a, 0x4869, 0x9674, + 0x471c, 0x9593, 0x45cd, 0x94b6, 0x447a, 0x93dc, 0x4325, 0x9307, + 0x41ce, 0x9236, 0x4073, 0x916a, 0x3f17, 0x90a1, 0x3db8, 0x8fdd, + 0x3c56, 0x8f1e, 0x3af2, 0x8e62, 0x398c, 0x8dab, 0x3824, 0x8cf9, + 0x36ba, 0x8c4b, 0x354d, 0x8ba1, 0x33de, 0x8afc, 0x326e, 0x8a5b, + 0x30fb, 0x89bf, 0x2f87, 0x8927, 0x2e11, 0x8894, 0x2c98, 0x8806, + 0x2b1f, 0x877c, 0x29a3, 0x86f7, 0x2826, 0x8676, 0x26a8, 0x85fb, + 0x2528, 0x8583, 0x23a6, 0x8511, 0x2223, 0x84a3, 0x209f, 0x843b, + 0x1f19, 0x83d7, 0x1d93, 0x8377, 0x1c0b, 0x831d, 0x1a82, 0x82c7, + 0x18f8, 0x8276, 0x176d, 0x822a, 0x15e2, 0x81e3, 0x1455, 0x81a1, + 0x12c8, 0x8163, 0x1139, 0x812b, 0xfab, 0x80f7, 0xe1b, 0x80c8, + 0xc8b, 0x809e, 0xafb, 0x8079, 0x96a, 0x8059, 0x7d9, 0x803e, + 0x647, 0x8028, 0x4b6, 0x8017, 0x324, 0x800a, 0x192, 0x8003, +}; + +static const q15_t ALIGN4 WeightsQ15_512[1024] = { + 0x7fff, 0x0, 0x7fff, 0xff9c, 0x7fff, 0xff37, 0x7ffe, 0xfed3, + 0x7ffd, 0xfe6e, 0x7ffc, 0xfe0a, 0x7ffa, 0xfda5, 0x7ff8, 0xfd41, + 0x7ff6, 0xfcdc, 0x7ff3, 0xfc78, 0x7ff0, 0xfc13, 0x7fed, 0xfbaf, + 0x7fe9, 0xfb4a, 0x7fe5, 0xfae6, 0x7fe1, 0xfa81, 0x7fdd, 0xfa1d, + 0x7fd8, 0xf9b9, 0x7fd3, 0xf954, 0x7fce, 0xf8f0, 0x7fc8, 0xf88b, + 0x7fc2, 0xf827, 0x7fbc, 0xf7c3, 0x7fb5, 0xf75e, 0x7fae, 0xf6fa, + 0x7fa7, 0xf696, 0x7f9f, 0xf632, 0x7f97, 0xf5cd, 0x7f8f, 0xf569, + 0x7f87, 0xf505, 0x7f7e, 0xf4a1, 0x7f75, 0xf43d, 0x7f6b, 0xf3d9, + 0x7f62, 0xf375, 0x7f58, 0xf311, 0x7f4d, 0xf2ad, 0x7f43, 0xf249, + 0x7f38, 0xf1e5, 0x7f2d, 0xf181, 0x7f21, 0xf11d, 0x7f15, 0xf0b9, + 0x7f09, 0xf055, 0x7efd, 0xeff2, 0x7ef0, 0xef8e, 0x7ee3, 0xef2a, + 0x7ed5, 0xeec7, 0x7ec8, 0xee63, 0x7eba, 0xedff, 0x7eab, 0xed9c, + 0x7e9d, 0xed38, 0x7e8e, 0xecd5, 0x7e7f, 0xec72, 0x7e6f, 0xec0e, + 0x7e5f, 0xebab, 0x7e4f, 0xeb48, 0x7e3f, 0xeae5, 0x7e2e, 0xea81, + 0x7e1d, 0xea1e, 0x7e0c, 0xe9bb, 0x7dfa, 0xe958, 0x7de8, 0xe8f6, + 0x7dd6, 0xe893, 0x7dc3, 0xe830, 0x7db0, 0xe7cd, 0x7d9d, 0xe76a, + 0x7d8a, 0xe708, 0x7d76, 0xe6a5, 0x7d62, 0xe643, 0x7d4e, 0xe5e0, + 0x7d39, 0xe57e, 0x7d24, 0xe51c, 0x7d0f, 0xe4b9, 0x7cf9, 0xe457, + 0x7ce3, 0xe3f5, 0x7ccd, 0xe393, 0x7cb7, 0xe331, 0x7ca0, 0xe2cf, + 0x7c89, 0xe26d, 0x7c71, 0xe20b, 0x7c5a, 0xe1aa, 0x7c42, 0xe148, + 0x7c29, 0xe0e7, 0x7c11, 0xe085, 0x7bf8, 0xe024, 0x7bdf, 0xdfc2, + 0x7bc5, 0xdf61, 0x7bac, 0xdf00, 0x7b92, 0xde9f, 0x7b77, 0xde3e, + 0x7b5d, 0xdddd, 0x7b42, 0xdd7c, 0x7b26, 0xdd1b, 0x7b0b, 0xdcbb, + 0x7aef, 0xdc5a, 0x7ad3, 0xdbf9, 0x7ab6, 0xdb99, 0x7a9a, 0xdb39, + 0x7a7d, 0xdad8, 0x7a5f, 0xda78, 0x7a42, 0xda18, 0x7a24, 0xd9b8, + 0x7a05, 0xd958, 0x79e7, 0xd8f9, 0x79c8, 0xd899, 0x79a9, 0xd839, + 0x798a, 0xd7da, 0x796a, 0xd77a, 0x794a, 0xd71b, 0x792a, 0xd6bc, + 0x7909, 0xd65d, 0x78e8, 0xd5fe, 0x78c7, 0xd59f, 0x78a6, 0xd540, + 0x7884, 0xd4e1, 0x7862, 0xd483, 0x7840, 0xd424, 0x781d, 0xd3c6, + 0x77fa, 0xd368, 0x77d7, 0xd309, 0x77b4, 0xd2ab, 0x7790, 0xd24d, + 0x776c, 0xd1ef, 0x7747, 0xd192, 0x7723, 0xd134, 0x76fe, 0xd0d7, + 0x76d9, 0xd079, 0x76b3, 0xd01c, 0x768e, 0xcfbf, 0x7668, 0xcf62, + 0x7641, 0xcf05, 0x761b, 0xcea8, 0x75f4, 0xce4b, 0x75cc, 0xcdef, + 0x75a5, 0xcd92, 0x757d, 0xcd36, 0x7555, 0xccda, 0x752d, 0xcc7e, + 0x7504, 0xcc22, 0x74db, 0xcbc6, 0x74b2, 0xcb6a, 0x7489, 0xcb0e, + 0x745f, 0xcab3, 0x7435, 0xca58, 0x740b, 0xc9fc, 0x73e0, 0xc9a1, + 0x73b5, 0xc946, 0x738a, 0xc8ec, 0x735f, 0xc891, 0x7333, 0xc836, + 0x7307, 0xc7dc, 0x72db, 0xc782, 0x72af, 0xc728, 0x7282, 0xc6ce, + 0x7255, 0xc674, 0x7227, 0xc61a, 0x71fa, 0xc5c0, 0x71cc, 0xc567, + 0x719e, 0xc50e, 0x716f, 0xc4b4, 0x7141, 0xc45b, 0x7112, 0xc403, + 0x70e2, 0xc3aa, 0x70b3, 0xc351, 0x7083, 0xc2f9, 0x7053, 0xc2a0, + 0x7023, 0xc248, 0x6ff2, 0xc1f0, 0x6fc1, 0xc198, 0x6f90, 0xc141, + 0x6f5f, 0xc0e9, 0x6f2d, 0xc092, 0x6efb, 0xc03b, 0x6ec9, 0xbfe3, + 0x6e96, 0xbf8d, 0x6e63, 0xbf36, 0x6e30, 0xbedf, 0x6dfd, 0xbe89, + 0x6dca, 0xbe32, 0x6d96, 0xbddc, 0x6d62, 0xbd86, 0x6d2d, 0xbd30, + 0x6cf9, 0xbcdb, 0x6cc4, 0xbc85, 0x6c8f, 0xbc30, 0x6c59, 0xbbdb, + 0x6c24, 0xbb86, 0x6bee, 0xbb31, 0x6bb8, 0xbadc, 0x6b81, 0xba88, + 0x6b4a, 0xba33, 0x6b13, 0xb9df, 0x6adc, 0xb98b, 0x6aa5, 0xb937, + 0x6a6d, 0xb8e4, 0x6a35, 0xb890, 0x69fd, 0xb83d, 0x69c4, 0xb7ea, + 0x698c, 0xb797, 0x6953, 0xb744, 0x6919, 0xb6f1, 0x68e0, 0xb69f, + 0x68a6, 0xb64c, 0x686c, 0xb5fa, 0x6832, 0xb5a8, 0x67f7, 0xb557, + 0x67bd, 0xb505, 0x6782, 0xb4b4, 0x6746, 0xb462, 0x670b, 0xb411, + 0x66cf, 0xb3c1, 0x6693, 0xb370, 0x6657, 0xb31f, 0x661a, 0xb2cf, + 0x65dd, 0xb27f, 0x65a0, 0xb22f, 0x6563, 0xb1df, 0x6526, 0xb190, + 0x64e8, 0xb141, 0x64aa, 0xb0f1, 0x646c, 0xb0a2, 0x642d, 0xb054, + 0x63ef, 0xb005, 0x63b0, 0xafb7, 0x6371, 0xaf69, 0x6331, 0xaf1b, + 0x62f2, 0xaecd, 0x62b2, 0xae7f, 0x6271, 0xae32, 0x6231, 0xade4, + 0x61f1, 0xad97, 0x61b0, 0xad4b, 0x616f, 0xacfe, 0x612d, 0xacb2, + 0x60ec, 0xac65, 0x60aa, 0xac19, 0x6068, 0xabcd, 0x6026, 0xab82, + 0x5fe3, 0xab36, 0x5fa0, 0xaaeb, 0x5f5e, 0xaaa0, 0x5f1a, 0xaa55, + 0x5ed7, 0xaa0b, 0x5e93, 0xa9c0, 0x5e50, 0xa976, 0x5e0b, 0xa92c, + 0x5dc7, 0xa8e3, 0x5d83, 0xa899, 0x5d3e, 0xa850, 0x5cf9, 0xa807, + 0x5cb4, 0xa7be, 0x5c6e, 0xa775, 0x5c29, 0xa72c, 0x5be3, 0xa6e4, + 0x5b9d, 0xa69c, 0x5b56, 0xa654, 0x5b10, 0xa60d, 0x5ac9, 0xa5c5, + 0x5a82, 0xa57e, 0x5a3b, 0xa537, 0x59f3, 0xa4f0, 0x59ac, 0xa4aa, + 0x5964, 0xa463, 0x591c, 0xa41d, 0x58d4, 0xa3d7, 0x588b, 0xa392, + 0x5842, 0xa34c, 0x57f9, 0xa307, 0x57b0, 0xa2c2, 0x5767, 0xa27d, + 0x571d, 0xa239, 0x56d4, 0xa1f5, 0x568a, 0xa1b0, 0x5640, 0xa16d, + 0x55f5, 0xa129, 0x55ab, 0xa0e6, 0x5560, 0xa0a2, 0x5515, 0xa060, + 0x54ca, 0xa01d, 0x547e, 0x9fda, 0x5433, 0x9f98, 0x53e7, 0x9f56, + 0x539b, 0x9f14, 0x534e, 0x9ed3, 0x5302, 0x9e91, 0x52b5, 0x9e50, + 0x5269, 0x9e0f, 0x521c, 0x9dcf, 0x51ce, 0x9d8f, 0x5181, 0x9d4e, + 0x5133, 0x9d0e, 0x50e5, 0x9ccf, 0x5097, 0x9c8f, 0x5049, 0x9c50, + 0x4ffb, 0x9c11, 0x4fac, 0x9bd3, 0x4f5e, 0x9b94, 0x4f0f, 0x9b56, + 0x4ebf, 0x9b18, 0x4e70, 0x9ada, 0x4e21, 0x9a9d, 0x4dd1, 0x9a60, + 0x4d81, 0x9a23, 0x4d31, 0x99e6, 0x4ce1, 0x99a9, 0x4c90, 0x996d, + 0x4c3f, 0x9931, 0x4bef, 0x98f5, 0x4b9e, 0x98ba, 0x4b4c, 0x987e, + 0x4afb, 0x9843, 0x4aa9, 0x9809, 0x4a58, 0x97ce, 0x4a06, 0x9794, + 0x49b4, 0x975a, 0x4961, 0x9720, 0x490f, 0x96e7, 0x48bc, 0x96ad, + 0x4869, 0x9674, 0x4816, 0x963c, 0x47c3, 0x9603, 0x4770, 0x95cb, + 0x471c, 0x9593, 0x46c9, 0x955b, 0x4675, 0x9524, 0x4621, 0x94ed, + 0x45cd, 0x94b6, 0x4578, 0x947f, 0x4524, 0x9448, 0x44cf, 0x9412, + 0x447a, 0x93dc, 0x4425, 0x93a7, 0x43d0, 0x9371, 0x437b, 0x933c, + 0x4325, 0x9307, 0x42d0, 0x92d3, 0x427a, 0x929e, 0x4224, 0x926a, + 0x41ce, 0x9236, 0x4177, 0x9203, 0x4121, 0x91d0, 0x40ca, 0x919d, + 0x4073, 0x916a, 0x401d, 0x9137, 0x3fc5, 0x9105, 0x3f6e, 0x90d3, + 0x3f17, 0x90a1, 0x3ebf, 0x9070, 0x3e68, 0x903f, 0x3e10, 0x900e, + 0x3db8, 0x8fdd, 0x3d60, 0x8fad, 0x3d07, 0x8f7d, 0x3caf, 0x8f4d, + 0x3c56, 0x8f1e, 0x3bfd, 0x8eee, 0x3ba5, 0x8ebf, 0x3b4c, 0x8e91, + 0x3af2, 0x8e62, 0x3a99, 0x8e34, 0x3a40, 0x8e06, 0x39e6, 0x8dd9, + 0x398c, 0x8dab, 0x3932, 0x8d7e, 0x38d8, 0x8d51, 0x387e, 0x8d25, + 0x3824, 0x8cf9, 0x37ca, 0x8ccd, 0x376f, 0x8ca1, 0x3714, 0x8c76, + 0x36ba, 0x8c4b, 0x365f, 0x8c20, 0x3604, 0x8bf5, 0x35a8, 0x8bcb, + 0x354d, 0x8ba1, 0x34f2, 0x8b77, 0x3496, 0x8b4e, 0x343a, 0x8b25, + 0x33de, 0x8afc, 0x3382, 0x8ad3, 0x3326, 0x8aab, 0x32ca, 0x8a83, + 0x326e, 0x8a5b, 0x3211, 0x8a34, 0x31b5, 0x8a0c, 0x3158, 0x89e5, + 0x30fb, 0x89bf, 0x309e, 0x8998, 0x3041, 0x8972, 0x2fe4, 0x894d, + 0x2f87, 0x8927, 0x2f29, 0x8902, 0x2ecc, 0x88dd, 0x2e6e, 0x88b9, + 0x2e11, 0x8894, 0x2db3, 0x8870, 0x2d55, 0x884c, 0x2cf7, 0x8829, + 0x2c98, 0x8806, 0x2c3a, 0x87e3, 0x2bdc, 0x87c0, 0x2b7d, 0x879e, + 0x2b1f, 0x877c, 0x2ac0, 0x875a, 0x2a61, 0x8739, 0x2a02, 0x8718, + 0x29a3, 0x86f7, 0x2944, 0x86d6, 0x28e5, 0x86b6, 0x2886, 0x8696, + 0x2826, 0x8676, 0x27c7, 0x8657, 0x2767, 0x8638, 0x2707, 0x8619, + 0x26a8, 0x85fb, 0x2648, 0x85dc, 0x25e8, 0x85be, 0x2588, 0x85a1, + 0x2528, 0x8583, 0x24c7, 0x8566, 0x2467, 0x854a, 0x2407, 0x852d, + 0x23a6, 0x8511, 0x2345, 0x84f5, 0x22e5, 0x84da, 0x2284, 0x84be, + 0x2223, 0x84a3, 0x21c2, 0x8489, 0x2161, 0x846e, 0x2100, 0x8454, + 0x209f, 0x843b, 0x203e, 0x8421, 0x1fdc, 0x8408, 0x1f7b, 0x83ef, + 0x1f19, 0x83d7, 0x1eb8, 0x83be, 0x1e56, 0x83a6, 0x1df5, 0x838f, + 0x1d93, 0x8377, 0x1d31, 0x8360, 0x1ccf, 0x8349, 0x1c6d, 0x8333, + 0x1c0b, 0x831d, 0x1ba9, 0x8307, 0x1b47, 0x82f1, 0x1ae4, 0x82dc, + 0x1a82, 0x82c7, 0x1a20, 0x82b2, 0x19bd, 0x829e, 0x195b, 0x828a, + 0x18f8, 0x8276, 0x1896, 0x8263, 0x1833, 0x8250, 0x17d0, 0x823d, + 0x176d, 0x822a, 0x170a, 0x8218, 0x16a8, 0x8206, 0x1645, 0x81f4, + 0x15e2, 0x81e3, 0x157f, 0x81d2, 0x151b, 0x81c1, 0x14b8, 0x81b1, + 0x1455, 0x81a1, 0x13f2, 0x8191, 0x138e, 0x8181, 0x132b, 0x8172, + 0x12c8, 0x8163, 0x1264, 0x8155, 0x1201, 0x8146, 0x119d, 0x8138, + 0x1139, 0x812b, 0x10d6, 0x811d, 0x1072, 0x8110, 0x100e, 0x8103, + 0xfab, 0x80f7, 0xf47, 0x80eb, 0xee3, 0x80df, 0xe7f, 0x80d3, + 0xe1b, 0x80c8, 0xdb7, 0x80bd, 0xd53, 0x80b3, 0xcef, 0x80a8, + 0xc8b, 0x809e, 0xc27, 0x8095, 0xbc3, 0x808b, 0xb5f, 0x8082, + 0xafb, 0x8079, 0xa97, 0x8071, 0xa33, 0x8069, 0x9ce, 0x8061, + 0x96a, 0x8059, 0x906, 0x8052, 0x8a2, 0x804b, 0x83d, 0x8044, + 0x7d9, 0x803e, 0x775, 0x8038, 0x710, 0x8032, 0x6ac, 0x802d, + 0x647, 0x8028, 0x5e3, 0x8023, 0x57f, 0x801f, 0x51a, 0x801b, + 0x4b6, 0x8017, 0x451, 0x8013, 0x3ed, 0x8010, 0x388, 0x800d, + 0x324, 0x800a, 0x2bf, 0x8008, 0x25b, 0x8006, 0x1f6, 0x8004, + 0x192, 0x8003, 0x12d, 0x8002, 0xc9, 0x8001, 0x64, 0x8001, +}; + +static const q15_t ALIGN4 WeightsQ15_2048[4096] = { + 0x7fff, 0x0, 0x7fff, 0xffe7, 0x7fff, 0xffce, 0x7fff, 0xffb5, + 0x7fff, 0xff9c, 0x7fff, 0xff83, 0x7fff, 0xff6a, 0x7fff, 0xff51, + 0x7fff, 0xff37, 0x7fff, 0xff1e, 0x7fff, 0xff05, 0x7ffe, 0xfeec, + 0x7ffe, 0xfed3, 0x7ffe, 0xfeba, 0x7ffe, 0xfea1, 0x7ffd, 0xfe88, + 0x7ffd, 0xfe6e, 0x7ffd, 0xfe55, 0x7ffc, 0xfe3c, 0x7ffc, 0xfe23, + 0x7ffc, 0xfe0a, 0x7ffb, 0xfdf1, 0x7ffb, 0xfdd8, 0x7ffa, 0xfdbe, + 0x7ffa, 0xfda5, 0x7ff9, 0xfd8c, 0x7ff9, 0xfd73, 0x7ff8, 0xfd5a, + 0x7ff8, 0xfd41, 0x7ff7, 0xfd28, 0x7ff7, 0xfd0f, 0x7ff6, 0xfcf5, + 0x7ff6, 0xfcdc, 0x7ff5, 0xfcc3, 0x7ff4, 0xfcaa, 0x7ff4, 0xfc91, + 0x7ff3, 0xfc78, 0x7ff2, 0xfc5f, 0x7ff2, 0xfc46, 0x7ff1, 0xfc2c, + 0x7ff0, 0xfc13, 0x7fef, 0xfbfa, 0x7fee, 0xfbe1, 0x7fee, 0xfbc8, + 0x7fed, 0xfbaf, 0x7fec, 0xfb96, 0x7feb, 0xfb7d, 0x7fea, 0xfb64, + 0x7fe9, 0xfb4a, 0x7fe8, 0xfb31, 0x7fe7, 0xfb18, 0x7fe6, 0xfaff, + 0x7fe5, 0xfae6, 0x7fe4, 0xfacd, 0x7fe3, 0xfab4, 0x7fe2, 0xfa9b, + 0x7fe1, 0xfa81, 0x7fe0, 0xfa68, 0x7fdf, 0xfa4f, 0x7fde, 0xfa36, + 0x7fdd, 0xfa1d, 0x7fdc, 0xfa04, 0x7fda, 0xf9eb, 0x7fd9, 0xf9d2, + 0x7fd8, 0xf9b9, 0x7fd7, 0xf9a0, 0x7fd6, 0xf986, 0x7fd4, 0xf96d, + 0x7fd3, 0xf954, 0x7fd2, 0xf93b, 0x7fd0, 0xf922, 0x7fcf, 0xf909, + 0x7fce, 0xf8f0, 0x7fcc, 0xf8d7, 0x7fcb, 0xf8be, 0x7fc9, 0xf8a5, + 0x7fc8, 0xf88b, 0x7fc6, 0xf872, 0x7fc5, 0xf859, 0x7fc3, 0xf840, + 0x7fc2, 0xf827, 0x7fc0, 0xf80e, 0x7fbf, 0xf7f5, 0x7fbd, 0xf7dc, + 0x7fbc, 0xf7c3, 0x7fba, 0xf7aa, 0x7fb8, 0xf791, 0x7fb7, 0xf778, + 0x7fb5, 0xf75e, 0x7fb3, 0xf745, 0x7fb1, 0xf72c, 0x7fb0, 0xf713, + 0x7fae, 0xf6fa, 0x7fac, 0xf6e1, 0x7faa, 0xf6c8, 0x7fa9, 0xf6af, + 0x7fa7, 0xf696, 0x7fa5, 0xf67d, 0x7fa3, 0xf664, 0x7fa1, 0xf64b, + 0x7f9f, 0xf632, 0x7f9d, 0xf619, 0x7f9b, 0xf600, 0x7f99, 0xf5e7, + 0x7f97, 0xf5cd, 0x7f95, 0xf5b4, 0x7f93, 0xf59b, 0x7f91, 0xf582, + 0x7f8f, 0xf569, 0x7f8d, 0xf550, 0x7f8b, 0xf537, 0x7f89, 0xf51e, + 0x7f87, 0xf505, 0x7f85, 0xf4ec, 0x7f82, 0xf4d3, 0x7f80, 0xf4ba, + 0x7f7e, 0xf4a1, 0x7f7c, 0xf488, 0x7f79, 0xf46f, 0x7f77, 0xf456, + 0x7f75, 0xf43d, 0x7f72, 0xf424, 0x7f70, 0xf40b, 0x7f6e, 0xf3f2, + 0x7f6b, 0xf3d9, 0x7f69, 0xf3c0, 0x7f67, 0xf3a7, 0x7f64, 0xf38e, + 0x7f62, 0xf375, 0x7f5f, 0xf35c, 0x7f5d, 0xf343, 0x7f5a, 0xf32a, + 0x7f58, 0xf311, 0x7f55, 0xf2f8, 0x7f53, 0xf2df, 0x7f50, 0xf2c6, + 0x7f4d, 0xf2ad, 0x7f4b, 0xf294, 0x7f48, 0xf27b, 0x7f45, 0xf262, + 0x7f43, 0xf249, 0x7f40, 0xf230, 0x7f3d, 0xf217, 0x7f3b, 0xf1fe, + 0x7f38, 0xf1e5, 0x7f35, 0xf1cc, 0x7f32, 0xf1b3, 0x7f2f, 0xf19a, + 0x7f2d, 0xf181, 0x7f2a, 0xf168, 0x7f27, 0xf14f, 0x7f24, 0xf136, + 0x7f21, 0xf11d, 0x7f1e, 0xf104, 0x7f1b, 0xf0eb, 0x7f18, 0xf0d2, + 0x7f15, 0xf0b9, 0x7f12, 0xf0a0, 0x7f0f, 0xf087, 0x7f0c, 0xf06e, + 0x7f09, 0xf055, 0x7f06, 0xf03c, 0x7f03, 0xf023, 0x7f00, 0xf00b, + 0x7efd, 0xeff2, 0x7ef9, 0xefd9, 0x7ef6, 0xefc0, 0x7ef3, 0xefa7, + 0x7ef0, 0xef8e, 0x7eed, 0xef75, 0x7ee9, 0xef5c, 0x7ee6, 0xef43, + 0x7ee3, 0xef2a, 0x7edf, 0xef11, 0x7edc, 0xeef8, 0x7ed9, 0xeedf, + 0x7ed5, 0xeec7, 0x7ed2, 0xeeae, 0x7ecf, 0xee95, 0x7ecb, 0xee7c, + 0x7ec8, 0xee63, 0x7ec4, 0xee4a, 0x7ec1, 0xee31, 0x7ebd, 0xee18, + 0x7eba, 0xedff, 0x7eb6, 0xede7, 0x7eb3, 0xedce, 0x7eaf, 0xedb5, + 0x7eab, 0xed9c, 0x7ea8, 0xed83, 0x7ea4, 0xed6a, 0x7ea1, 0xed51, + 0x7e9d, 0xed38, 0x7e99, 0xed20, 0x7e95, 0xed07, 0x7e92, 0xecee, + 0x7e8e, 0xecd5, 0x7e8a, 0xecbc, 0x7e86, 0xeca3, 0x7e83, 0xec8a, + 0x7e7f, 0xec72, 0x7e7b, 0xec59, 0x7e77, 0xec40, 0x7e73, 0xec27, + 0x7e6f, 0xec0e, 0x7e6b, 0xebf5, 0x7e67, 0xebdd, 0x7e63, 0xebc4, + 0x7e5f, 0xebab, 0x7e5b, 0xeb92, 0x7e57, 0xeb79, 0x7e53, 0xeb61, + 0x7e4f, 0xeb48, 0x7e4b, 0xeb2f, 0x7e47, 0xeb16, 0x7e43, 0xeafd, + 0x7e3f, 0xeae5, 0x7e3b, 0xeacc, 0x7e37, 0xeab3, 0x7e32, 0xea9a, + 0x7e2e, 0xea81, 0x7e2a, 0xea69, 0x7e26, 0xea50, 0x7e21, 0xea37, + 0x7e1d, 0xea1e, 0x7e19, 0xea06, 0x7e14, 0xe9ed, 0x7e10, 0xe9d4, + 0x7e0c, 0xe9bb, 0x7e07, 0xe9a3, 0x7e03, 0xe98a, 0x7dff, 0xe971, + 0x7dfa, 0xe958, 0x7df6, 0xe940, 0x7df1, 0xe927, 0x7ded, 0xe90e, + 0x7de8, 0xe8f6, 0x7de4, 0xe8dd, 0x7ddf, 0xe8c4, 0x7dda, 0xe8ab, + 0x7dd6, 0xe893, 0x7dd1, 0xe87a, 0x7dcd, 0xe861, 0x7dc8, 0xe849, + 0x7dc3, 0xe830, 0x7dbf, 0xe817, 0x7dba, 0xe7fe, 0x7db5, 0xe7e6, + 0x7db0, 0xe7cd, 0x7dac, 0xe7b4, 0x7da7, 0xe79c, 0x7da2, 0xe783, + 0x7d9d, 0xe76a, 0x7d98, 0xe752, 0x7d94, 0xe739, 0x7d8f, 0xe720, + 0x7d8a, 0xe708, 0x7d85, 0xe6ef, 0x7d80, 0xe6d6, 0x7d7b, 0xe6be, + 0x7d76, 0xe6a5, 0x7d71, 0xe68d, 0x7d6c, 0xe674, 0x7d67, 0xe65b, + 0x7d62, 0xe643, 0x7d5d, 0xe62a, 0x7d58, 0xe611, 0x7d53, 0xe5f9, + 0x7d4e, 0xe5e0, 0x7d49, 0xe5c8, 0x7d43, 0xe5af, 0x7d3e, 0xe596, + 0x7d39, 0xe57e, 0x7d34, 0xe565, 0x7d2f, 0xe54d, 0x7d29, 0xe534, + 0x7d24, 0xe51c, 0x7d1f, 0xe503, 0x7d19, 0xe4ea, 0x7d14, 0xe4d2, + 0x7d0f, 0xe4b9, 0x7d09, 0xe4a1, 0x7d04, 0xe488, 0x7cff, 0xe470, + 0x7cf9, 0xe457, 0x7cf4, 0xe43f, 0x7cee, 0xe426, 0x7ce9, 0xe40e, + 0x7ce3, 0xe3f5, 0x7cde, 0xe3dc, 0x7cd8, 0xe3c4, 0x7cd3, 0xe3ab, + 0x7ccd, 0xe393, 0x7cc8, 0xe37a, 0x7cc2, 0xe362, 0x7cbc, 0xe349, + 0x7cb7, 0xe331, 0x7cb1, 0xe318, 0x7cab, 0xe300, 0x7ca6, 0xe2e8, + 0x7ca0, 0xe2cf, 0x7c9a, 0xe2b7, 0x7c94, 0xe29e, 0x7c8f, 0xe286, + 0x7c89, 0xe26d, 0x7c83, 0xe255, 0x7c7d, 0xe23c, 0x7c77, 0xe224, + 0x7c71, 0xe20b, 0x7c6c, 0xe1f3, 0x7c66, 0xe1db, 0x7c60, 0xe1c2, + 0x7c5a, 0xe1aa, 0x7c54, 0xe191, 0x7c4e, 0xe179, 0x7c48, 0xe160, + 0x7c42, 0xe148, 0x7c3c, 0xe130, 0x7c36, 0xe117, 0x7c30, 0xe0ff, + 0x7c29, 0xe0e7, 0x7c23, 0xe0ce, 0x7c1d, 0xe0b6, 0x7c17, 0xe09d, + 0x7c11, 0xe085, 0x7c0b, 0xe06d, 0x7c05, 0xe054, 0x7bfe, 0xe03c, + 0x7bf8, 0xe024, 0x7bf2, 0xe00b, 0x7beb, 0xdff3, 0x7be5, 0xdfdb, + 0x7bdf, 0xdfc2, 0x7bd9, 0xdfaa, 0x7bd2, 0xdf92, 0x7bcc, 0xdf79, + 0x7bc5, 0xdf61, 0x7bbf, 0xdf49, 0x7bb9, 0xdf30, 0x7bb2, 0xdf18, + 0x7bac, 0xdf00, 0x7ba5, 0xdee8, 0x7b9f, 0xdecf, 0x7b98, 0xdeb7, + 0x7b92, 0xde9f, 0x7b8b, 0xde87, 0x7b84, 0xde6e, 0x7b7e, 0xde56, + 0x7b77, 0xde3e, 0x7b71, 0xde26, 0x7b6a, 0xde0d, 0x7b63, 0xddf5, + 0x7b5d, 0xdddd, 0x7b56, 0xddc5, 0x7b4f, 0xddac, 0x7b48, 0xdd94, + 0x7b42, 0xdd7c, 0x7b3b, 0xdd64, 0x7b34, 0xdd4c, 0x7b2d, 0xdd33, + 0x7b26, 0xdd1b, 0x7b1f, 0xdd03, 0x7b19, 0xdceb, 0x7b12, 0xdcd3, + 0x7b0b, 0xdcbb, 0x7b04, 0xdca2, 0x7afd, 0xdc8a, 0x7af6, 0xdc72, + 0x7aef, 0xdc5a, 0x7ae8, 0xdc42, 0x7ae1, 0xdc2a, 0x7ada, 0xdc12, + 0x7ad3, 0xdbf9, 0x7acc, 0xdbe1, 0x7ac5, 0xdbc9, 0x7abd, 0xdbb1, + 0x7ab6, 0xdb99, 0x7aaf, 0xdb81, 0x7aa8, 0xdb69, 0x7aa1, 0xdb51, + 0x7a9a, 0xdb39, 0x7a92, 0xdb21, 0x7a8b, 0xdb09, 0x7a84, 0xdaf1, + 0x7a7d, 0xdad8, 0x7a75, 0xdac0, 0x7a6e, 0xdaa8, 0x7a67, 0xda90, + 0x7a5f, 0xda78, 0x7a58, 0xda60, 0x7a50, 0xda48, 0x7a49, 0xda30, + 0x7a42, 0xda18, 0x7a3a, 0xda00, 0x7a33, 0xd9e8, 0x7a2b, 0xd9d0, + 0x7a24, 0xd9b8, 0x7a1c, 0xd9a0, 0x7a15, 0xd988, 0x7a0d, 0xd970, + 0x7a05, 0xd958, 0x79fe, 0xd940, 0x79f6, 0xd928, 0x79ef, 0xd911, + 0x79e7, 0xd8f9, 0x79df, 0xd8e1, 0x79d8, 0xd8c9, 0x79d0, 0xd8b1, + 0x79c8, 0xd899, 0x79c0, 0xd881, 0x79b9, 0xd869, 0x79b1, 0xd851, + 0x79a9, 0xd839, 0x79a1, 0xd821, 0x7999, 0xd80a, 0x7992, 0xd7f2, + 0x798a, 0xd7da, 0x7982, 0xd7c2, 0x797a, 0xd7aa, 0x7972, 0xd792, + 0x796a, 0xd77a, 0x7962, 0xd763, 0x795a, 0xd74b, 0x7952, 0xd733, + 0x794a, 0xd71b, 0x7942, 0xd703, 0x793a, 0xd6eb, 0x7932, 0xd6d4, + 0x792a, 0xd6bc, 0x7922, 0xd6a4, 0x7919, 0xd68c, 0x7911, 0xd675, + 0x7909, 0xd65d, 0x7901, 0xd645, 0x78f9, 0xd62d, 0x78f1, 0xd615, + 0x78e8, 0xd5fe, 0x78e0, 0xd5e6, 0x78d8, 0xd5ce, 0x78cf, 0xd5b7, + 0x78c7, 0xd59f, 0x78bf, 0xd587, 0x78b6, 0xd56f, 0x78ae, 0xd558, + 0x78a6, 0xd540, 0x789d, 0xd528, 0x7895, 0xd511, 0x788c, 0xd4f9, + 0x7884, 0xd4e1, 0x787c, 0xd4ca, 0x7873, 0xd4b2, 0x786b, 0xd49a, + 0x7862, 0xd483, 0x7859, 0xd46b, 0x7851, 0xd453, 0x7848, 0xd43c, + 0x7840, 0xd424, 0x7837, 0xd40d, 0x782e, 0xd3f5, 0x7826, 0xd3dd, + 0x781d, 0xd3c6, 0x7814, 0xd3ae, 0x780c, 0xd397, 0x7803, 0xd37f, + 0x77fa, 0xd368, 0x77f1, 0xd350, 0x77e9, 0xd338, 0x77e0, 0xd321, + 0x77d7, 0xd309, 0x77ce, 0xd2f2, 0x77c5, 0xd2da, 0x77bc, 0xd2c3, + 0x77b4, 0xd2ab, 0x77ab, 0xd294, 0x77a2, 0xd27c, 0x7799, 0xd265, + 0x7790, 0xd24d, 0x7787, 0xd236, 0x777e, 0xd21e, 0x7775, 0xd207, + 0x776c, 0xd1ef, 0x7763, 0xd1d8, 0x775a, 0xd1c1, 0x7751, 0xd1a9, + 0x7747, 0xd192, 0x773e, 0xd17a, 0x7735, 0xd163, 0x772c, 0xd14b, + 0x7723, 0xd134, 0x771a, 0xd11d, 0x7710, 0xd105, 0x7707, 0xd0ee, + 0x76fe, 0xd0d7, 0x76f5, 0xd0bf, 0x76eb, 0xd0a8, 0x76e2, 0xd091, + 0x76d9, 0xd079, 0x76cf, 0xd062, 0x76c6, 0xd04b, 0x76bd, 0xd033, + 0x76b3, 0xd01c, 0x76aa, 0xd005, 0x76a0, 0xcfed, 0x7697, 0xcfd6, + 0x768e, 0xcfbf, 0x7684, 0xcfa7, 0x767b, 0xcf90, 0x7671, 0xcf79, + 0x7668, 0xcf62, 0x765e, 0xcf4a, 0x7654, 0xcf33, 0x764b, 0xcf1c, + 0x7641, 0xcf05, 0x7638, 0xceee, 0x762e, 0xced6, 0x7624, 0xcebf, + 0x761b, 0xcea8, 0x7611, 0xce91, 0x7607, 0xce7a, 0x75fd, 0xce62, + 0x75f4, 0xce4b, 0x75ea, 0xce34, 0x75e0, 0xce1d, 0x75d6, 0xce06, + 0x75cc, 0xcdef, 0x75c3, 0xcdd8, 0x75b9, 0xcdc0, 0x75af, 0xcda9, + 0x75a5, 0xcd92, 0x759b, 0xcd7b, 0x7591, 0xcd64, 0x7587, 0xcd4d, + 0x757d, 0xcd36, 0x7573, 0xcd1f, 0x7569, 0xcd08, 0x755f, 0xccf1, + 0x7555, 0xccda, 0x754b, 0xccc3, 0x7541, 0xccac, 0x7537, 0xcc95, + 0x752d, 0xcc7e, 0x7523, 0xcc67, 0x7519, 0xcc50, 0x750f, 0xcc39, + 0x7504, 0xcc22, 0x74fa, 0xcc0b, 0x74f0, 0xcbf4, 0x74e6, 0xcbdd, + 0x74db, 0xcbc6, 0x74d1, 0xcbaf, 0x74c7, 0xcb98, 0x74bd, 0xcb81, + 0x74b2, 0xcb6a, 0x74a8, 0xcb53, 0x749e, 0xcb3c, 0x7493, 0xcb25, + 0x7489, 0xcb0e, 0x747e, 0xcaf8, 0x7474, 0xcae1, 0x746a, 0xcaca, + 0x745f, 0xcab3, 0x7455, 0xca9c, 0x744a, 0xca85, 0x7440, 0xca6e, + 0x7435, 0xca58, 0x742b, 0xca41, 0x7420, 0xca2a, 0x7415, 0xca13, + 0x740b, 0xc9fc, 0x7400, 0xc9e6, 0x73f6, 0xc9cf, 0x73eb, 0xc9b8, + 0x73e0, 0xc9a1, 0x73d6, 0xc98b, 0x73cb, 0xc974, 0x73c0, 0xc95d, + 0x73b5, 0xc946, 0x73ab, 0xc930, 0x73a0, 0xc919, 0x7395, 0xc902, + 0x738a, 0xc8ec, 0x737f, 0xc8d5, 0x7375, 0xc8be, 0x736a, 0xc8a8, + 0x735f, 0xc891, 0x7354, 0xc87a, 0x7349, 0xc864, 0x733e, 0xc84d, + 0x7333, 0xc836, 0x7328, 0xc820, 0x731d, 0xc809, 0x7312, 0xc7f3, + 0x7307, 0xc7dc, 0x72fc, 0xc7c5, 0x72f1, 0xc7af, 0x72e6, 0xc798, + 0x72db, 0xc782, 0x72d0, 0xc76b, 0x72c5, 0xc755, 0x72ba, 0xc73e, + 0x72af, 0xc728, 0x72a3, 0xc711, 0x7298, 0xc6fa, 0x728d, 0xc6e4, + 0x7282, 0xc6ce, 0x7276, 0xc6b7, 0x726b, 0xc6a1, 0x7260, 0xc68a, + 0x7255, 0xc674, 0x7249, 0xc65d, 0x723e, 0xc647, 0x7233, 0xc630, + 0x7227, 0xc61a, 0x721c, 0xc603, 0x7211, 0xc5ed, 0x7205, 0xc5d7, + 0x71fa, 0xc5c0, 0x71ee, 0xc5aa, 0x71e3, 0xc594, 0x71d7, 0xc57d, + 0x71cc, 0xc567, 0x71c0, 0xc551, 0x71b5, 0xc53a, 0x71a9, 0xc524, + 0x719e, 0xc50e, 0x7192, 0xc4f7, 0x7186, 0xc4e1, 0x717b, 0xc4cb, + 0x716f, 0xc4b4, 0x7164, 0xc49e, 0x7158, 0xc488, 0x714c, 0xc472, + 0x7141, 0xc45b, 0x7135, 0xc445, 0x7129, 0xc42f, 0x711d, 0xc419, + 0x7112, 0xc403, 0x7106, 0xc3ec, 0x70fa, 0xc3d6, 0x70ee, 0xc3c0, + 0x70e2, 0xc3aa, 0x70d6, 0xc394, 0x70cb, 0xc37d, 0x70bf, 0xc367, + 0x70b3, 0xc351, 0x70a7, 0xc33b, 0x709b, 0xc325, 0x708f, 0xc30f, + 0x7083, 0xc2f9, 0x7077, 0xc2e3, 0x706b, 0xc2cd, 0x705f, 0xc2b7, + 0x7053, 0xc2a0, 0x7047, 0xc28a, 0x703b, 0xc274, 0x702f, 0xc25e, + 0x7023, 0xc248, 0x7016, 0xc232, 0x700a, 0xc21c, 0x6ffe, 0xc206, + 0x6ff2, 0xc1f0, 0x6fe6, 0xc1da, 0x6fda, 0xc1c4, 0x6fcd, 0xc1ae, + 0x6fc1, 0xc198, 0x6fb5, 0xc183, 0x6fa9, 0xc16d, 0x6f9c, 0xc157, + 0x6f90, 0xc141, 0x6f84, 0xc12b, 0x6f77, 0xc115, 0x6f6b, 0xc0ff, + 0x6f5f, 0xc0e9, 0x6f52, 0xc0d3, 0x6f46, 0xc0bd, 0x6f39, 0xc0a8, + 0x6f2d, 0xc092, 0x6f20, 0xc07c, 0x6f14, 0xc066, 0x6f07, 0xc050, + 0x6efb, 0xc03b, 0x6eee, 0xc025, 0x6ee2, 0xc00f, 0x6ed5, 0xbff9, + 0x6ec9, 0xbfe3, 0x6ebc, 0xbfce, 0x6eaf, 0xbfb8, 0x6ea3, 0xbfa2, + 0x6e96, 0xbf8d, 0x6e89, 0xbf77, 0x6e7d, 0xbf61, 0x6e70, 0xbf4b, + 0x6e63, 0xbf36, 0x6e57, 0xbf20, 0x6e4a, 0xbf0a, 0x6e3d, 0xbef5, + 0x6e30, 0xbedf, 0x6e24, 0xbeca, 0x6e17, 0xbeb4, 0x6e0a, 0xbe9e, + 0x6dfd, 0xbe89, 0x6df0, 0xbe73, 0x6de3, 0xbe5e, 0x6dd6, 0xbe48, + 0x6dca, 0xbe32, 0x6dbd, 0xbe1d, 0x6db0, 0xbe07, 0x6da3, 0xbdf2, + 0x6d96, 0xbddc, 0x6d89, 0xbdc7, 0x6d7c, 0xbdb1, 0x6d6f, 0xbd9c, + 0x6d62, 0xbd86, 0x6d55, 0xbd71, 0x6d48, 0xbd5b, 0x6d3a, 0xbd46, + 0x6d2d, 0xbd30, 0x6d20, 0xbd1b, 0x6d13, 0xbd06, 0x6d06, 0xbcf0, + 0x6cf9, 0xbcdb, 0x6cec, 0xbcc5, 0x6cde, 0xbcb0, 0x6cd1, 0xbc9b, + 0x6cc4, 0xbc85, 0x6cb7, 0xbc70, 0x6ca9, 0xbc5b, 0x6c9c, 0xbc45, + 0x6c8f, 0xbc30, 0x6c81, 0xbc1b, 0x6c74, 0xbc05, 0x6c67, 0xbbf0, + 0x6c59, 0xbbdb, 0x6c4c, 0xbbc5, 0x6c3f, 0xbbb0, 0x6c31, 0xbb9b, + 0x6c24, 0xbb86, 0x6c16, 0xbb70, 0x6c09, 0xbb5b, 0x6bfb, 0xbb46, + 0x6bee, 0xbb31, 0x6be0, 0xbb1c, 0x6bd3, 0xbb06, 0x6bc5, 0xbaf1, + 0x6bb8, 0xbadc, 0x6baa, 0xbac7, 0x6b9c, 0xbab2, 0x6b8f, 0xba9d, + 0x6b81, 0xba88, 0x6b73, 0xba73, 0x6b66, 0xba5d, 0x6b58, 0xba48, + 0x6b4a, 0xba33, 0x6b3d, 0xba1e, 0x6b2f, 0xba09, 0x6b21, 0xb9f4, + 0x6b13, 0xb9df, 0x6b06, 0xb9ca, 0x6af8, 0xb9b5, 0x6aea, 0xb9a0, + 0x6adc, 0xb98b, 0x6ace, 0xb976, 0x6ac1, 0xb961, 0x6ab3, 0xb94c, + 0x6aa5, 0xb937, 0x6a97, 0xb922, 0x6a89, 0xb90d, 0x6a7b, 0xb8f8, + 0x6a6d, 0xb8e4, 0x6a5f, 0xb8cf, 0x6a51, 0xb8ba, 0x6a43, 0xb8a5, + 0x6a35, 0xb890, 0x6a27, 0xb87b, 0x6a19, 0xb866, 0x6a0b, 0xb852, + 0x69fd, 0xb83d, 0x69ef, 0xb828, 0x69e1, 0xb813, 0x69d3, 0xb7fe, + 0x69c4, 0xb7ea, 0x69b6, 0xb7d5, 0x69a8, 0xb7c0, 0x699a, 0xb7ab, + 0x698c, 0xb797, 0x697d, 0xb782, 0x696f, 0xb76d, 0x6961, 0xb758, + 0x6953, 0xb744, 0x6944, 0xb72f, 0x6936, 0xb71a, 0x6928, 0xb706, + 0x6919, 0xb6f1, 0x690b, 0xb6dd, 0x68fd, 0xb6c8, 0x68ee, 0xb6b3, + 0x68e0, 0xb69f, 0x68d1, 0xb68a, 0x68c3, 0xb676, 0x68b5, 0xb661, + 0x68a6, 0xb64c, 0x6898, 0xb638, 0x6889, 0xb623, 0x687b, 0xb60f, + 0x686c, 0xb5fa, 0x685e, 0xb5e6, 0x684f, 0xb5d1, 0x6840, 0xb5bd, + 0x6832, 0xb5a8, 0x6823, 0xb594, 0x6815, 0xb57f, 0x6806, 0xb56b, + 0x67f7, 0xb557, 0x67e9, 0xb542, 0x67da, 0xb52e, 0x67cb, 0xb519, + 0x67bd, 0xb505, 0x67ae, 0xb4f1, 0x679f, 0xb4dc, 0x6790, 0xb4c8, + 0x6782, 0xb4b4, 0x6773, 0xb49f, 0x6764, 0xb48b, 0x6755, 0xb477, + 0x6746, 0xb462, 0x6737, 0xb44e, 0x6729, 0xb43a, 0x671a, 0xb426, + 0x670b, 0xb411, 0x66fc, 0xb3fd, 0x66ed, 0xb3e9, 0x66de, 0xb3d5, + 0x66cf, 0xb3c1, 0x66c0, 0xb3ac, 0x66b1, 0xb398, 0x66a2, 0xb384, + 0x6693, 0xb370, 0x6684, 0xb35c, 0x6675, 0xb348, 0x6666, 0xb334, + 0x6657, 0xb31f, 0x6648, 0xb30b, 0x6639, 0xb2f7, 0x6629, 0xb2e3, + 0x661a, 0xb2cf, 0x660b, 0xb2bb, 0x65fc, 0xb2a7, 0x65ed, 0xb293, + 0x65dd, 0xb27f, 0x65ce, 0xb26b, 0x65bf, 0xb257, 0x65b0, 0xb243, + 0x65a0, 0xb22f, 0x6591, 0xb21b, 0x6582, 0xb207, 0x6573, 0xb1f3, + 0x6563, 0xb1df, 0x6554, 0xb1cc, 0x6545, 0xb1b8, 0x6535, 0xb1a4, + 0x6526, 0xb190, 0x6516, 0xb17c, 0x6507, 0xb168, 0x64f7, 0xb154, + 0x64e8, 0xb141, 0x64d9, 0xb12d, 0x64c9, 0xb119, 0x64ba, 0xb105, + 0x64aa, 0xb0f1, 0x649b, 0xb0de, 0x648b, 0xb0ca, 0x647b, 0xb0b6, + 0x646c, 0xb0a2, 0x645c, 0xb08f, 0x644d, 0xb07b, 0x643d, 0xb067, + 0x642d, 0xb054, 0x641e, 0xb040, 0x640e, 0xb02c, 0x63fe, 0xb019, + 0x63ef, 0xb005, 0x63df, 0xaff1, 0x63cf, 0xafde, 0x63c0, 0xafca, + 0x63b0, 0xafb7, 0x63a0, 0xafa3, 0x6390, 0xaf90, 0x6380, 0xaf7c, + 0x6371, 0xaf69, 0x6361, 0xaf55, 0x6351, 0xaf41, 0x6341, 0xaf2e, + 0x6331, 0xaf1b, 0x6321, 0xaf07, 0x6311, 0xaef4, 0x6301, 0xaee0, + 0x62f2, 0xaecd, 0x62e2, 0xaeb9, 0x62d2, 0xaea6, 0x62c2, 0xae92, + 0x62b2, 0xae7f, 0x62a2, 0xae6c, 0x6292, 0xae58, 0x6282, 0xae45, + 0x6271, 0xae32, 0x6261, 0xae1e, 0x6251, 0xae0b, 0x6241, 0xadf8, + 0x6231, 0xade4, 0x6221, 0xadd1, 0x6211, 0xadbe, 0x6201, 0xadab, + 0x61f1, 0xad97, 0x61e0, 0xad84, 0x61d0, 0xad71, 0x61c0, 0xad5e, + 0x61b0, 0xad4b, 0x619f, 0xad37, 0x618f, 0xad24, 0x617f, 0xad11, + 0x616f, 0xacfe, 0x615e, 0xaceb, 0x614e, 0xacd8, 0x613e, 0xacc5, + 0x612d, 0xacb2, 0x611d, 0xac9e, 0x610d, 0xac8b, 0x60fc, 0xac78, + 0x60ec, 0xac65, 0x60db, 0xac52, 0x60cb, 0xac3f, 0x60ba, 0xac2c, + 0x60aa, 0xac19, 0x6099, 0xac06, 0x6089, 0xabf3, 0x6078, 0xabe0, + 0x6068, 0xabcd, 0x6057, 0xabbb, 0x6047, 0xaba8, 0x6036, 0xab95, + 0x6026, 0xab82, 0x6015, 0xab6f, 0x6004, 0xab5c, 0x5ff4, 0xab49, + 0x5fe3, 0xab36, 0x5fd3, 0xab24, 0x5fc2, 0xab11, 0x5fb1, 0xaafe, + 0x5fa0, 0xaaeb, 0x5f90, 0xaad8, 0x5f7f, 0xaac6, 0x5f6e, 0xaab3, + 0x5f5e, 0xaaa0, 0x5f4d, 0xaa8e, 0x5f3c, 0xaa7b, 0x5f2b, 0xaa68, + 0x5f1a, 0xaa55, 0x5f0a, 0xaa43, 0x5ef9, 0xaa30, 0x5ee8, 0xaa1d, + 0x5ed7, 0xaa0b, 0x5ec6, 0xa9f8, 0x5eb5, 0xa9e6, 0x5ea4, 0xa9d3, + 0x5e93, 0xa9c0, 0x5e82, 0xa9ae, 0x5e71, 0xa99b, 0x5e60, 0xa989, + 0x5e50, 0xa976, 0x5e3f, 0xa964, 0x5e2d, 0xa951, 0x5e1c, 0xa93f, + 0x5e0b, 0xa92c, 0x5dfa, 0xa91a, 0x5de9, 0xa907, 0x5dd8, 0xa8f5, + 0x5dc7, 0xa8e3, 0x5db6, 0xa8d0, 0x5da5, 0xa8be, 0x5d94, 0xa8ab, + 0x5d83, 0xa899, 0x5d71, 0xa887, 0x5d60, 0xa874, 0x5d4f, 0xa862, + 0x5d3e, 0xa850, 0x5d2d, 0xa83d, 0x5d1b, 0xa82b, 0x5d0a, 0xa819, + 0x5cf9, 0xa807, 0x5ce8, 0xa7f4, 0x5cd6, 0xa7e2, 0x5cc5, 0xa7d0, + 0x5cb4, 0xa7be, 0x5ca2, 0xa7ab, 0x5c91, 0xa799, 0x5c80, 0xa787, + 0x5c6e, 0xa775, 0x5c5d, 0xa763, 0x5c4b, 0xa751, 0x5c3a, 0xa73f, + 0x5c29, 0xa72c, 0x5c17, 0xa71a, 0x5c06, 0xa708, 0x5bf4, 0xa6f6, + 0x5be3, 0xa6e4, 0x5bd1, 0xa6d2, 0x5bc0, 0xa6c0, 0x5bae, 0xa6ae, + 0x5b9d, 0xa69c, 0x5b8b, 0xa68a, 0x5b79, 0xa678, 0x5b68, 0xa666, + 0x5b56, 0xa654, 0x5b45, 0xa642, 0x5b33, 0xa630, 0x5b21, 0xa61f, + 0x5b10, 0xa60d, 0x5afe, 0xa5fb, 0x5aec, 0xa5e9, 0x5adb, 0xa5d7, + 0x5ac9, 0xa5c5, 0x5ab7, 0xa5b3, 0x5aa5, 0xa5a2, 0x5a94, 0xa590, + 0x5a82, 0xa57e, 0x5a70, 0xa56c, 0x5a5e, 0xa55b, 0x5a4d, 0xa549, + 0x5a3b, 0xa537, 0x5a29, 0xa525, 0x5a17, 0xa514, 0x5a05, 0xa502, + 0x59f3, 0xa4f0, 0x59e1, 0xa4df, 0x59d0, 0xa4cd, 0x59be, 0xa4bb, + 0x59ac, 0xa4aa, 0x599a, 0xa498, 0x5988, 0xa487, 0x5976, 0xa475, + 0x5964, 0xa463, 0x5952, 0xa452, 0x5940, 0xa440, 0x592e, 0xa42f, + 0x591c, 0xa41d, 0x590a, 0xa40c, 0x58f8, 0xa3fa, 0x58e6, 0xa3e9, + 0x58d4, 0xa3d7, 0x58c1, 0xa3c6, 0x58af, 0xa3b5, 0x589d, 0xa3a3, + 0x588b, 0xa392, 0x5879, 0xa380, 0x5867, 0xa36f, 0x5855, 0xa35e, + 0x5842, 0xa34c, 0x5830, 0xa33b, 0x581e, 0xa32a, 0x580c, 0xa318, + 0x57f9, 0xa307, 0x57e7, 0xa2f6, 0x57d5, 0xa2e5, 0x57c3, 0xa2d3, + 0x57b0, 0xa2c2, 0x579e, 0xa2b1, 0x578c, 0xa2a0, 0x5779, 0xa28f, + 0x5767, 0xa27d, 0x5755, 0xa26c, 0x5742, 0xa25b, 0x5730, 0xa24a, + 0x571d, 0xa239, 0x570b, 0xa228, 0x56f9, 0xa217, 0x56e6, 0xa206, + 0x56d4, 0xa1f5, 0x56c1, 0xa1e4, 0x56af, 0xa1d3, 0x569c, 0xa1c1, + 0x568a, 0xa1b0, 0x5677, 0xa1a0, 0x5665, 0xa18f, 0x5652, 0xa17e, + 0x5640, 0xa16d, 0x562d, 0xa15c, 0x561a, 0xa14b, 0x5608, 0xa13a, + 0x55f5, 0xa129, 0x55e3, 0xa118, 0x55d0, 0xa107, 0x55bd, 0xa0f6, + 0x55ab, 0xa0e6, 0x5598, 0xa0d5, 0x5585, 0xa0c4, 0x5572, 0xa0b3, + 0x5560, 0xa0a2, 0x554d, 0xa092, 0x553a, 0xa081, 0x5528, 0xa070, + 0x5515, 0xa060, 0x5502, 0xa04f, 0x54ef, 0xa03e, 0x54dc, 0xa02d, + 0x54ca, 0xa01d, 0x54b7, 0xa00c, 0x54a4, 0x9ffc, 0x5491, 0x9feb, + 0x547e, 0x9fda, 0x546b, 0x9fca, 0x5458, 0x9fb9, 0x5445, 0x9fa9, + 0x5433, 0x9f98, 0x5420, 0x9f88, 0x540d, 0x9f77, 0x53fa, 0x9f67, + 0x53e7, 0x9f56, 0x53d4, 0x9f46, 0x53c1, 0x9f35, 0x53ae, 0x9f25, + 0x539b, 0x9f14, 0x5388, 0x9f04, 0x5375, 0x9ef3, 0x5362, 0x9ee3, + 0x534e, 0x9ed3, 0x533b, 0x9ec2, 0x5328, 0x9eb2, 0x5315, 0x9ea2, + 0x5302, 0x9e91, 0x52ef, 0x9e81, 0x52dc, 0x9e71, 0x52c9, 0x9e61, + 0x52b5, 0x9e50, 0x52a2, 0x9e40, 0x528f, 0x9e30, 0x527c, 0x9e20, + 0x5269, 0x9e0f, 0x5255, 0x9dff, 0x5242, 0x9def, 0x522f, 0x9ddf, + 0x521c, 0x9dcf, 0x5208, 0x9dbf, 0x51f5, 0x9daf, 0x51e2, 0x9d9f, + 0x51ce, 0x9d8f, 0x51bb, 0x9d7e, 0x51a8, 0x9d6e, 0x5194, 0x9d5e, + 0x5181, 0x9d4e, 0x516e, 0x9d3e, 0x515a, 0x9d2e, 0x5147, 0x9d1e, + 0x5133, 0x9d0e, 0x5120, 0x9cff, 0x510c, 0x9cef, 0x50f9, 0x9cdf, + 0x50e5, 0x9ccf, 0x50d2, 0x9cbf, 0x50bf, 0x9caf, 0x50ab, 0x9c9f, + 0x5097, 0x9c8f, 0x5084, 0x9c80, 0x5070, 0x9c70, 0x505d, 0x9c60, + 0x5049, 0x9c50, 0x5036, 0x9c40, 0x5022, 0x9c31, 0x500f, 0x9c21, + 0x4ffb, 0x9c11, 0x4fe7, 0x9c02, 0x4fd4, 0x9bf2, 0x4fc0, 0x9be2, + 0x4fac, 0x9bd3, 0x4f99, 0x9bc3, 0x4f85, 0x9bb3, 0x4f71, 0x9ba4, + 0x4f5e, 0x9b94, 0x4f4a, 0x9b85, 0x4f36, 0x9b75, 0x4f22, 0x9b65, + 0x4f0f, 0x9b56, 0x4efb, 0x9b46, 0x4ee7, 0x9b37, 0x4ed3, 0x9b27, + 0x4ebf, 0x9b18, 0x4eac, 0x9b09, 0x4e98, 0x9af9, 0x4e84, 0x9aea, + 0x4e70, 0x9ada, 0x4e5c, 0x9acb, 0x4e48, 0x9abb, 0x4e34, 0x9aac, + 0x4e21, 0x9a9d, 0x4e0d, 0x9a8d, 0x4df9, 0x9a7e, 0x4de5, 0x9a6f, + 0x4dd1, 0x9a60, 0x4dbd, 0x9a50, 0x4da9, 0x9a41, 0x4d95, 0x9a32, + 0x4d81, 0x9a23, 0x4d6d, 0x9a13, 0x4d59, 0x9a04, 0x4d45, 0x99f5, + 0x4d31, 0x99e6, 0x4d1d, 0x99d7, 0x4d09, 0x99c7, 0x4cf5, 0x99b8, + 0x4ce1, 0x99a9, 0x4ccc, 0x999a, 0x4cb8, 0x998b, 0x4ca4, 0x997c, + 0x4c90, 0x996d, 0x4c7c, 0x995e, 0x4c68, 0x994f, 0x4c54, 0x9940, + 0x4c3f, 0x9931, 0x4c2b, 0x9922, 0x4c17, 0x9913, 0x4c03, 0x9904, + 0x4bef, 0x98f5, 0x4bda, 0x98e6, 0x4bc6, 0x98d7, 0x4bb2, 0x98c9, + 0x4b9e, 0x98ba, 0x4b89, 0x98ab, 0x4b75, 0x989c, 0x4b61, 0x988d, + 0x4b4c, 0x987e, 0x4b38, 0x9870, 0x4b24, 0x9861, 0x4b0f, 0x9852, + 0x4afb, 0x9843, 0x4ae7, 0x9835, 0x4ad2, 0x9826, 0x4abe, 0x9817, + 0x4aa9, 0x9809, 0x4a95, 0x97fa, 0x4a81, 0x97eb, 0x4a6c, 0x97dd, + 0x4a58, 0x97ce, 0x4a43, 0x97c0, 0x4a2f, 0x97b1, 0x4a1a, 0x97a2, + 0x4a06, 0x9794, 0x49f1, 0x9785, 0x49dd, 0x9777, 0x49c8, 0x9768, + 0x49b4, 0x975a, 0x499f, 0x974b, 0x498a, 0x973d, 0x4976, 0x972f, + 0x4961, 0x9720, 0x494d, 0x9712, 0x4938, 0x9703, 0x4923, 0x96f5, + 0x490f, 0x96e7, 0x48fa, 0x96d8, 0x48e6, 0x96ca, 0x48d1, 0x96bc, + 0x48bc, 0x96ad, 0x48a8, 0x969f, 0x4893, 0x9691, 0x487e, 0x9683, + 0x4869, 0x9674, 0x4855, 0x9666, 0x4840, 0x9658, 0x482b, 0x964a, + 0x4816, 0x963c, 0x4802, 0x962d, 0x47ed, 0x961f, 0x47d8, 0x9611, + 0x47c3, 0x9603, 0x47ae, 0x95f5, 0x479a, 0x95e7, 0x4785, 0x95d9, + 0x4770, 0x95cb, 0x475b, 0x95bd, 0x4746, 0x95af, 0x4731, 0x95a1, + 0x471c, 0x9593, 0x4708, 0x9585, 0x46f3, 0x9577, 0x46de, 0x9569, + 0x46c9, 0x955b, 0x46b4, 0x954d, 0x469f, 0x953f, 0x468a, 0x9532, + 0x4675, 0x9524, 0x4660, 0x9516, 0x464b, 0x9508, 0x4636, 0x94fa, + 0x4621, 0x94ed, 0x460c, 0x94df, 0x45f7, 0x94d1, 0x45e2, 0x94c3, + 0x45cd, 0x94b6, 0x45b8, 0x94a8, 0x45a3, 0x949a, 0x458d, 0x948d, + 0x4578, 0x947f, 0x4563, 0x9471, 0x454e, 0x9464, 0x4539, 0x9456, + 0x4524, 0x9448, 0x450f, 0x943b, 0x44fa, 0x942d, 0x44e4, 0x9420, + 0x44cf, 0x9412, 0x44ba, 0x9405, 0x44a5, 0x93f7, 0x4490, 0x93ea, + 0x447a, 0x93dc, 0x4465, 0x93cf, 0x4450, 0x93c1, 0x443b, 0x93b4, + 0x4425, 0x93a7, 0x4410, 0x9399, 0x43fb, 0x938c, 0x43e5, 0x937f, + 0x43d0, 0x9371, 0x43bb, 0x9364, 0x43a5, 0x9357, 0x4390, 0x9349, + 0x437b, 0x933c, 0x4365, 0x932f, 0x4350, 0x9322, 0x433b, 0x9314, + 0x4325, 0x9307, 0x4310, 0x92fa, 0x42fa, 0x92ed, 0x42e5, 0x92e0, + 0x42d0, 0x92d3, 0x42ba, 0x92c6, 0x42a5, 0x92b8, 0x428f, 0x92ab, + 0x427a, 0x929e, 0x4264, 0x9291, 0x424f, 0x9284, 0x4239, 0x9277, + 0x4224, 0x926a, 0x420e, 0x925d, 0x41f9, 0x9250, 0x41e3, 0x9243, + 0x41ce, 0x9236, 0x41b8, 0x922a, 0x41a2, 0x921d, 0x418d, 0x9210, + 0x4177, 0x9203, 0x4162, 0x91f6, 0x414c, 0x91e9, 0x4136, 0x91dc, + 0x4121, 0x91d0, 0x410b, 0x91c3, 0x40f6, 0x91b6, 0x40e0, 0x91a9, + 0x40ca, 0x919d, 0x40b5, 0x9190, 0x409f, 0x9183, 0x4089, 0x9177, + 0x4073, 0x916a, 0x405e, 0x915d, 0x4048, 0x9151, 0x4032, 0x9144, + 0x401d, 0x9137, 0x4007, 0x912b, 0x3ff1, 0x911e, 0x3fdb, 0x9112, + 0x3fc5, 0x9105, 0x3fb0, 0x90f9, 0x3f9a, 0x90ec, 0x3f84, 0x90e0, + 0x3f6e, 0x90d3, 0x3f58, 0x90c7, 0x3f43, 0x90ba, 0x3f2d, 0x90ae, + 0x3f17, 0x90a1, 0x3f01, 0x9095, 0x3eeb, 0x9089, 0x3ed5, 0x907c, + 0x3ebf, 0x9070, 0x3ea9, 0x9064, 0x3e93, 0x9057, 0x3e7d, 0x904b, + 0x3e68, 0x903f, 0x3e52, 0x9033, 0x3e3c, 0x9026, 0x3e26, 0x901a, + 0x3e10, 0x900e, 0x3dfa, 0x9002, 0x3de4, 0x8ff6, 0x3dce, 0x8fea, + 0x3db8, 0x8fdd, 0x3da2, 0x8fd1, 0x3d8c, 0x8fc5, 0x3d76, 0x8fb9, + 0x3d60, 0x8fad, 0x3d49, 0x8fa1, 0x3d33, 0x8f95, 0x3d1d, 0x8f89, + 0x3d07, 0x8f7d, 0x3cf1, 0x8f71, 0x3cdb, 0x8f65, 0x3cc5, 0x8f59, + 0x3caf, 0x8f4d, 0x3c99, 0x8f41, 0x3c83, 0x8f35, 0x3c6c, 0x8f2a, + 0x3c56, 0x8f1e, 0x3c40, 0x8f12, 0x3c2a, 0x8f06, 0x3c14, 0x8efa, + 0x3bfd, 0x8eee, 0x3be7, 0x8ee3, 0x3bd1, 0x8ed7, 0x3bbb, 0x8ecb, + 0x3ba5, 0x8ebf, 0x3b8e, 0x8eb4, 0x3b78, 0x8ea8, 0x3b62, 0x8e9c, + 0x3b4c, 0x8e91, 0x3b35, 0x8e85, 0x3b1f, 0x8e7a, 0x3b09, 0x8e6e, + 0x3af2, 0x8e62, 0x3adc, 0x8e57, 0x3ac6, 0x8e4b, 0x3aaf, 0x8e40, + 0x3a99, 0x8e34, 0x3a83, 0x8e29, 0x3a6c, 0x8e1d, 0x3a56, 0x8e12, + 0x3a40, 0x8e06, 0x3a29, 0x8dfb, 0x3a13, 0x8def, 0x39fd, 0x8de4, + 0x39e6, 0x8dd9, 0x39d0, 0x8dcd, 0x39b9, 0x8dc2, 0x39a3, 0x8db7, + 0x398c, 0x8dab, 0x3976, 0x8da0, 0x395f, 0x8d95, 0x3949, 0x8d8a, + 0x3932, 0x8d7e, 0x391c, 0x8d73, 0x3906, 0x8d68, 0x38ef, 0x8d5d, + 0x38d8, 0x8d51, 0x38c2, 0x8d46, 0x38ab, 0x8d3b, 0x3895, 0x8d30, + 0x387e, 0x8d25, 0x3868, 0x8d1a, 0x3851, 0x8d0f, 0x383b, 0x8d04, + 0x3824, 0x8cf9, 0x380d, 0x8cee, 0x37f7, 0x8ce3, 0x37e0, 0x8cd8, + 0x37ca, 0x8ccd, 0x37b3, 0x8cc2, 0x379c, 0x8cb7, 0x3786, 0x8cac, + 0x376f, 0x8ca1, 0x3758, 0x8c96, 0x3742, 0x8c8b, 0x372b, 0x8c81, + 0x3714, 0x8c76, 0x36fe, 0x8c6b, 0x36e7, 0x8c60, 0x36d0, 0x8c55, + 0x36ba, 0x8c4b, 0x36a3, 0x8c40, 0x368c, 0x8c35, 0x3675, 0x8c2a, + 0x365f, 0x8c20, 0x3648, 0x8c15, 0x3631, 0x8c0a, 0x361a, 0x8c00, + 0x3604, 0x8bf5, 0x35ed, 0x8beb, 0x35d6, 0x8be0, 0x35bf, 0x8bd5, + 0x35a8, 0x8bcb, 0x3592, 0x8bc0, 0x357b, 0x8bb6, 0x3564, 0x8bab, + 0x354d, 0x8ba1, 0x3536, 0x8b96, 0x351f, 0x8b8c, 0x3508, 0x8b82, + 0x34f2, 0x8b77, 0x34db, 0x8b6d, 0x34c4, 0x8b62, 0x34ad, 0x8b58, + 0x3496, 0x8b4e, 0x347f, 0x8b43, 0x3468, 0x8b39, 0x3451, 0x8b2f, + 0x343a, 0x8b25, 0x3423, 0x8b1a, 0x340c, 0x8b10, 0x33f5, 0x8b06, + 0x33de, 0x8afc, 0x33c7, 0x8af1, 0x33b0, 0x8ae7, 0x3399, 0x8add, + 0x3382, 0x8ad3, 0x336b, 0x8ac9, 0x3354, 0x8abf, 0x333d, 0x8ab5, + 0x3326, 0x8aab, 0x330f, 0x8aa1, 0x32f8, 0x8a97, 0x32e1, 0x8a8d, + 0x32ca, 0x8a83, 0x32b3, 0x8a79, 0x329c, 0x8a6f, 0x3285, 0x8a65, + 0x326e, 0x8a5b, 0x3257, 0x8a51, 0x3240, 0x8a47, 0x3228, 0x8a3d, + 0x3211, 0x8a34, 0x31fa, 0x8a2a, 0x31e3, 0x8a20, 0x31cc, 0x8a16, + 0x31b5, 0x8a0c, 0x319e, 0x8a03, 0x3186, 0x89f9, 0x316f, 0x89ef, + 0x3158, 0x89e5, 0x3141, 0x89dc, 0x312a, 0x89d2, 0x3112, 0x89c8, + 0x30fb, 0x89bf, 0x30e4, 0x89b5, 0x30cd, 0x89ac, 0x30b6, 0x89a2, + 0x309e, 0x8998, 0x3087, 0x898f, 0x3070, 0x8985, 0x3059, 0x897c, + 0x3041, 0x8972, 0x302a, 0x8969, 0x3013, 0x8960, 0x2ffb, 0x8956, + 0x2fe4, 0x894d, 0x2fcd, 0x8943, 0x2fb5, 0x893a, 0x2f9e, 0x8931, + 0x2f87, 0x8927, 0x2f6f, 0x891e, 0x2f58, 0x8915, 0x2f41, 0x890b, + 0x2f29, 0x8902, 0x2f12, 0x88f9, 0x2efb, 0x88f0, 0x2ee3, 0x88e6, + 0x2ecc, 0x88dd, 0x2eb5, 0x88d4, 0x2e9d, 0x88cb, 0x2e86, 0x88c2, + 0x2e6e, 0x88b9, 0x2e57, 0x88af, 0x2e3f, 0x88a6, 0x2e28, 0x889d, + 0x2e11, 0x8894, 0x2df9, 0x888b, 0x2de2, 0x8882, 0x2dca, 0x8879, + 0x2db3, 0x8870, 0x2d9b, 0x8867, 0x2d84, 0x885e, 0x2d6c, 0x8855, + 0x2d55, 0x884c, 0x2d3d, 0x8844, 0x2d26, 0x883b, 0x2d0e, 0x8832, + 0x2cf7, 0x8829, 0x2cdf, 0x8820, 0x2cc8, 0x8817, 0x2cb0, 0x880f, + 0x2c98, 0x8806, 0x2c81, 0x87fd, 0x2c69, 0x87f4, 0x2c52, 0x87ec, + 0x2c3a, 0x87e3, 0x2c23, 0x87da, 0x2c0b, 0x87d2, 0x2bf3, 0x87c9, + 0x2bdc, 0x87c0, 0x2bc4, 0x87b8, 0x2bad, 0x87af, 0x2b95, 0x87a7, + 0x2b7d, 0x879e, 0x2b66, 0x8795, 0x2b4e, 0x878d, 0x2b36, 0x8784, + 0x2b1f, 0x877c, 0x2b07, 0x8774, 0x2aef, 0x876b, 0x2ad8, 0x8763, + 0x2ac0, 0x875a, 0x2aa8, 0x8752, 0x2a91, 0x874a, 0x2a79, 0x8741, + 0x2a61, 0x8739, 0x2a49, 0x8731, 0x2a32, 0x8728, 0x2a1a, 0x8720, + 0x2a02, 0x8718, 0x29eb, 0x870f, 0x29d3, 0x8707, 0x29bb, 0x86ff, + 0x29a3, 0x86f7, 0x298b, 0x86ef, 0x2974, 0x86e7, 0x295c, 0x86de, + 0x2944, 0x86d6, 0x292c, 0x86ce, 0x2915, 0x86c6, 0x28fd, 0x86be, + 0x28e5, 0x86b6, 0x28cd, 0x86ae, 0x28b5, 0x86a6, 0x289d, 0x869e, + 0x2886, 0x8696, 0x286e, 0x868e, 0x2856, 0x8686, 0x283e, 0x867e, + 0x2826, 0x8676, 0x280e, 0x866e, 0x27f6, 0x8667, 0x27df, 0x865f, + 0x27c7, 0x8657, 0x27af, 0x864f, 0x2797, 0x8647, 0x277f, 0x8640, + 0x2767, 0x8638, 0x274f, 0x8630, 0x2737, 0x8628, 0x271f, 0x8621, + 0x2707, 0x8619, 0x26ef, 0x8611, 0x26d8, 0x860a, 0x26c0, 0x8602, + 0x26a8, 0x85fb, 0x2690, 0x85f3, 0x2678, 0x85eb, 0x2660, 0x85e4, + 0x2648, 0x85dc, 0x2630, 0x85d5, 0x2618, 0x85cd, 0x2600, 0x85c6, + 0x25e8, 0x85be, 0x25d0, 0x85b7, 0x25b8, 0x85b0, 0x25a0, 0x85a8, + 0x2588, 0x85a1, 0x2570, 0x8599, 0x2558, 0x8592, 0x2540, 0x858b, + 0x2528, 0x8583, 0x250f, 0x857c, 0x24f7, 0x8575, 0x24df, 0x856e, + 0x24c7, 0x8566, 0x24af, 0x855f, 0x2497, 0x8558, 0x247f, 0x8551, + 0x2467, 0x854a, 0x244f, 0x8543, 0x2437, 0x853b, 0x241f, 0x8534, + 0x2407, 0x852d, 0x23ee, 0x8526, 0x23d6, 0x851f, 0x23be, 0x8518, + 0x23a6, 0x8511, 0x238e, 0x850a, 0x2376, 0x8503, 0x235e, 0x84fc, + 0x2345, 0x84f5, 0x232d, 0x84ee, 0x2315, 0x84e7, 0x22fd, 0x84e1, + 0x22e5, 0x84da, 0x22cd, 0x84d3, 0x22b4, 0x84cc, 0x229c, 0x84c5, + 0x2284, 0x84be, 0x226c, 0x84b8, 0x2254, 0x84b1, 0x223b, 0x84aa, + 0x2223, 0x84a3, 0x220b, 0x849d, 0x21f3, 0x8496, 0x21da, 0x848f, + 0x21c2, 0x8489, 0x21aa, 0x8482, 0x2192, 0x847c, 0x2179, 0x8475, + 0x2161, 0x846e, 0x2149, 0x8468, 0x2131, 0x8461, 0x2118, 0x845b, + 0x2100, 0x8454, 0x20e8, 0x844e, 0x20d0, 0x8447, 0x20b7, 0x8441, + 0x209f, 0x843b, 0x2087, 0x8434, 0x206e, 0x842e, 0x2056, 0x8427, + 0x203e, 0x8421, 0x2025, 0x841b, 0x200d, 0x8415, 0x1ff5, 0x840e, + 0x1fdc, 0x8408, 0x1fc4, 0x8402, 0x1fac, 0x83fb, 0x1f93, 0x83f5, + 0x1f7b, 0x83ef, 0x1f63, 0x83e9, 0x1f4a, 0x83e3, 0x1f32, 0x83dd, + 0x1f19, 0x83d7, 0x1f01, 0x83d0, 0x1ee9, 0x83ca, 0x1ed0, 0x83c4, + 0x1eb8, 0x83be, 0x1ea0, 0x83b8, 0x1e87, 0x83b2, 0x1e6f, 0x83ac, + 0x1e56, 0x83a6, 0x1e3e, 0x83a0, 0x1e25, 0x839a, 0x1e0d, 0x8394, + 0x1df5, 0x838f, 0x1ddc, 0x8389, 0x1dc4, 0x8383, 0x1dab, 0x837d, + 0x1d93, 0x8377, 0x1d7a, 0x8371, 0x1d62, 0x836c, 0x1d49, 0x8366, + 0x1d31, 0x8360, 0x1d18, 0x835a, 0x1d00, 0x8355, 0x1ce8, 0x834f, + 0x1ccf, 0x8349, 0x1cb7, 0x8344, 0x1c9e, 0x833e, 0x1c86, 0x8338, + 0x1c6d, 0x8333, 0x1c55, 0x832d, 0x1c3c, 0x8328, 0x1c24, 0x8322, + 0x1c0b, 0x831d, 0x1bf2, 0x8317, 0x1bda, 0x8312, 0x1bc1, 0x830c, + 0x1ba9, 0x8307, 0x1b90, 0x8301, 0x1b78, 0x82fc, 0x1b5f, 0x82f7, + 0x1b47, 0x82f1, 0x1b2e, 0x82ec, 0x1b16, 0x82e7, 0x1afd, 0x82e1, + 0x1ae4, 0x82dc, 0x1acc, 0x82d7, 0x1ab3, 0x82d1, 0x1a9b, 0x82cc, + 0x1a82, 0x82c7, 0x1a6a, 0x82c2, 0x1a51, 0x82bd, 0x1a38, 0x82b7, + 0x1a20, 0x82b2, 0x1a07, 0x82ad, 0x19ef, 0x82a8, 0x19d6, 0x82a3, + 0x19bd, 0x829e, 0x19a5, 0x8299, 0x198c, 0x8294, 0x1973, 0x828f, + 0x195b, 0x828a, 0x1942, 0x8285, 0x192a, 0x8280, 0x1911, 0x827b, + 0x18f8, 0x8276, 0x18e0, 0x8271, 0x18c7, 0x826c, 0x18ae, 0x8268, + 0x1896, 0x8263, 0x187d, 0x825e, 0x1864, 0x8259, 0x184c, 0x8254, + 0x1833, 0x8250, 0x181a, 0x824b, 0x1802, 0x8246, 0x17e9, 0x8241, + 0x17d0, 0x823d, 0x17b7, 0x8238, 0x179f, 0x8233, 0x1786, 0x822f, + 0x176d, 0x822a, 0x1755, 0x8226, 0x173c, 0x8221, 0x1723, 0x821c, + 0x170a, 0x8218, 0x16f2, 0x8213, 0x16d9, 0x820f, 0x16c0, 0x820a, + 0x16a8, 0x8206, 0x168f, 0x8201, 0x1676, 0x81fd, 0x165d, 0x81f9, + 0x1645, 0x81f4, 0x162c, 0x81f0, 0x1613, 0x81ec, 0x15fa, 0x81e7, + 0x15e2, 0x81e3, 0x15c9, 0x81df, 0x15b0, 0x81da, 0x1597, 0x81d6, + 0x157f, 0x81d2, 0x1566, 0x81ce, 0x154d, 0x81c9, 0x1534, 0x81c5, + 0x151b, 0x81c1, 0x1503, 0x81bd, 0x14ea, 0x81b9, 0x14d1, 0x81b5, + 0x14b8, 0x81b1, 0x149f, 0x81ad, 0x1487, 0x81a9, 0x146e, 0x81a5, + 0x1455, 0x81a1, 0x143c, 0x819d, 0x1423, 0x8199, 0x140b, 0x8195, + 0x13f2, 0x8191, 0x13d9, 0x818d, 0x13c0, 0x8189, 0x13a7, 0x8185, + 0x138e, 0x8181, 0x1376, 0x817d, 0x135d, 0x817a, 0x1344, 0x8176, + 0x132b, 0x8172, 0x1312, 0x816e, 0x12f9, 0x816b, 0x12e0, 0x8167, + 0x12c8, 0x8163, 0x12af, 0x815f, 0x1296, 0x815c, 0x127d, 0x8158, + 0x1264, 0x8155, 0x124b, 0x8151, 0x1232, 0x814d, 0x1219, 0x814a, + 0x1201, 0x8146, 0x11e8, 0x8143, 0x11cf, 0x813f, 0x11b6, 0x813c, + 0x119d, 0x8138, 0x1184, 0x8135, 0x116b, 0x8131, 0x1152, 0x812e, + 0x1139, 0x812b, 0x1121, 0x8127, 0x1108, 0x8124, 0x10ef, 0x8121, + 0x10d6, 0x811d, 0x10bd, 0x811a, 0x10a4, 0x8117, 0x108b, 0x8113, + 0x1072, 0x8110, 0x1059, 0x810d, 0x1040, 0x810a, 0x1027, 0x8107, + 0x100e, 0x8103, 0xff5, 0x8100, 0xfdd, 0x80fd, 0xfc4, 0x80fa, + 0xfab, 0x80f7, 0xf92, 0x80f4, 0xf79, 0x80f1, 0xf60, 0x80ee, + 0xf47, 0x80eb, 0xf2e, 0x80e8, 0xf15, 0x80e5, 0xefc, 0x80e2, + 0xee3, 0x80df, 0xeca, 0x80dc, 0xeb1, 0x80d9, 0xe98, 0x80d6, + 0xe7f, 0x80d3, 0xe66, 0x80d1, 0xe4d, 0x80ce, 0xe34, 0x80cb, + 0xe1b, 0x80c8, 0xe02, 0x80c5, 0xde9, 0x80c3, 0xdd0, 0x80c0, + 0xdb7, 0x80bd, 0xd9e, 0x80bb, 0xd85, 0x80b8, 0xd6c, 0x80b5, + 0xd53, 0x80b3, 0xd3a, 0x80b0, 0xd21, 0x80ad, 0xd08, 0x80ab, + 0xcef, 0x80a8, 0xcd6, 0x80a6, 0xcbd, 0x80a3, 0xca4, 0x80a1, + 0xc8b, 0x809e, 0xc72, 0x809c, 0xc59, 0x8099, 0xc40, 0x8097, + 0xc27, 0x8095, 0xc0e, 0x8092, 0xbf5, 0x8090, 0xbdc, 0x808e, + 0xbc3, 0x808b, 0xbaa, 0x8089, 0xb91, 0x8087, 0xb78, 0x8084, + 0xb5f, 0x8082, 0xb46, 0x8080, 0xb2d, 0x807e, 0xb14, 0x807b, + 0xafb, 0x8079, 0xae2, 0x8077, 0xac9, 0x8075, 0xab0, 0x8073, + 0xa97, 0x8071, 0xa7e, 0x806f, 0xa65, 0x806d, 0xa4c, 0x806b, + 0xa33, 0x8069, 0xa19, 0x8067, 0xa00, 0x8065, 0x9e7, 0x8063, + 0x9ce, 0x8061, 0x9b5, 0x805f, 0x99c, 0x805d, 0x983, 0x805b, + 0x96a, 0x8059, 0x951, 0x8057, 0x938, 0x8056, 0x91f, 0x8054, + 0x906, 0x8052, 0x8ed, 0x8050, 0x8d4, 0x804f, 0x8bb, 0x804d, + 0x8a2, 0x804b, 0x888, 0x8049, 0x86f, 0x8048, 0x856, 0x8046, + 0x83d, 0x8044, 0x824, 0x8043, 0x80b, 0x8041, 0x7f2, 0x8040, + 0x7d9, 0x803e, 0x7c0, 0x803d, 0x7a7, 0x803b, 0x78e, 0x803a, + 0x775, 0x8038, 0x75b, 0x8037, 0x742, 0x8035, 0x729, 0x8034, + 0x710, 0x8032, 0x6f7, 0x8031, 0x6de, 0x8030, 0x6c5, 0x802e, + 0x6ac, 0x802d, 0x693, 0x802c, 0x67a, 0x802a, 0x660, 0x8029, + 0x647, 0x8028, 0x62e, 0x8027, 0x615, 0x8026, 0x5fc, 0x8024, + 0x5e3, 0x8023, 0x5ca, 0x8022, 0x5b1, 0x8021, 0x598, 0x8020, + 0x57f, 0x801f, 0x565, 0x801e, 0x54c, 0x801d, 0x533, 0x801c, + 0x51a, 0x801b, 0x501, 0x801a, 0x4e8, 0x8019, 0x4cf, 0x8018, + 0x4b6, 0x8017, 0x49c, 0x8016, 0x483, 0x8015, 0x46a, 0x8014, + 0x451, 0x8013, 0x438, 0x8012, 0x41f, 0x8012, 0x406, 0x8011, + 0x3ed, 0x8010, 0x3d4, 0x800f, 0x3ba, 0x800e, 0x3a1, 0x800e, + 0x388, 0x800d, 0x36f, 0x800c, 0x356, 0x800c, 0x33d, 0x800b, + 0x324, 0x800a, 0x30b, 0x800a, 0x2f1, 0x8009, 0x2d8, 0x8009, + 0x2bf, 0x8008, 0x2a6, 0x8008, 0x28d, 0x8007, 0x274, 0x8007, + 0x25b, 0x8006, 0x242, 0x8006, 0x228, 0x8005, 0x20f, 0x8005, + 0x1f6, 0x8004, 0x1dd, 0x8004, 0x1c4, 0x8004, 0x1ab, 0x8003, + 0x192, 0x8003, 0x178, 0x8003, 0x15f, 0x8002, 0x146, 0x8002, + 0x12d, 0x8002, 0x114, 0x8002, 0xfb, 0x8001, 0xe2, 0x8001, + 0xc9, 0x8001, 0xaf, 0x8001, 0x96, 0x8001, 0x7d, 0x8001, + 0x64, 0x8001, 0x4b, 0x8001, 0x32, 0x8001, 0x19, 0x8001, +}; + +static const q15_t ALIGN4 WeightsQ15_8192[16384] = { + 0x7fff, 0x0, 0x7fff, 0xfffa, 0x7fff, 0xfff4, 0x7fff, 0xffee, + 0x7fff, 0xffe7, 0x7fff, 0xffe1, 0x7fff, 0xffdb, 0x7fff, 0xffd5, + 0x7fff, 0xffce, 0x7fff, 0xffc8, 0x7fff, 0xffc2, 0x7fff, 0xffbb, + 0x7fff, 0xffb5, 0x7fff, 0xffaf, 0x7fff, 0xffa9, 0x7fff, 0xffa2, + 0x7fff, 0xff9c, 0x7fff, 0xff96, 0x7fff, 0xff8f, 0x7fff, 0xff89, + 0x7fff, 0xff83, 0x7fff, 0xff7d, 0x7fff, 0xff76, 0x7fff, 0xff70, + 0x7fff, 0xff6a, 0x7fff, 0xff63, 0x7fff, 0xff5d, 0x7fff, 0xff57, + 0x7fff, 0xff51, 0x7fff, 0xff4a, 0x7fff, 0xff44, 0x7fff, 0xff3e, + 0x7fff, 0xff37, 0x7fff, 0xff31, 0x7fff, 0xff2b, 0x7fff, 0xff25, + 0x7fff, 0xff1e, 0x7fff, 0xff18, 0x7fff, 0xff12, 0x7fff, 0xff0b, + 0x7fff, 0xff05, 0x7ffe, 0xfeff, 0x7ffe, 0xfef9, 0x7ffe, 0xfef2, + 0x7ffe, 0xfeec, 0x7ffe, 0xfee6, 0x7ffe, 0xfedf, 0x7ffe, 0xfed9, + 0x7ffe, 0xfed3, 0x7ffe, 0xfecd, 0x7ffe, 0xfec6, 0x7ffe, 0xfec0, + 0x7ffe, 0xfeba, 0x7ffe, 0xfeb3, 0x7ffe, 0xfead, 0x7ffe, 0xfea7, + 0x7ffe, 0xfea1, 0x7ffe, 0xfe9a, 0x7ffd, 0xfe94, 0x7ffd, 0xfe8e, + 0x7ffd, 0xfe88, 0x7ffd, 0xfe81, 0x7ffd, 0xfe7b, 0x7ffd, 0xfe75, + 0x7ffd, 0xfe6e, 0x7ffd, 0xfe68, 0x7ffd, 0xfe62, 0x7ffd, 0xfe5c, + 0x7ffd, 0xfe55, 0x7ffd, 0xfe4f, 0x7ffd, 0xfe49, 0x7ffc, 0xfe42, + 0x7ffc, 0xfe3c, 0x7ffc, 0xfe36, 0x7ffc, 0xfe30, 0x7ffc, 0xfe29, + 0x7ffc, 0xfe23, 0x7ffc, 0xfe1d, 0x7ffc, 0xfe16, 0x7ffc, 0xfe10, + 0x7ffc, 0xfe0a, 0x7ffc, 0xfe04, 0x7ffb, 0xfdfd, 0x7ffb, 0xfdf7, + 0x7ffb, 0xfdf1, 0x7ffb, 0xfdea, 0x7ffb, 0xfde4, 0x7ffb, 0xfdde, + 0x7ffb, 0xfdd8, 0x7ffb, 0xfdd1, 0x7ffb, 0xfdcb, 0x7ffb, 0xfdc5, + 0x7ffa, 0xfdbe, 0x7ffa, 0xfdb8, 0x7ffa, 0xfdb2, 0x7ffa, 0xfdac, + 0x7ffa, 0xfda5, 0x7ffa, 0xfd9f, 0x7ffa, 0xfd99, 0x7ffa, 0xfd93, + 0x7ff9, 0xfd8c, 0x7ff9, 0xfd86, 0x7ff9, 0xfd80, 0x7ff9, 0xfd79, + 0x7ff9, 0xfd73, 0x7ff9, 0xfd6d, 0x7ff9, 0xfd67, 0x7ff9, 0xfd60, + 0x7ff8, 0xfd5a, 0x7ff8, 0xfd54, 0x7ff8, 0xfd4d, 0x7ff8, 0xfd47, + 0x7ff8, 0xfd41, 0x7ff8, 0xfd3b, 0x7ff8, 0xfd34, 0x7ff8, 0xfd2e, + 0x7ff7, 0xfd28, 0x7ff7, 0xfd21, 0x7ff7, 0xfd1b, 0x7ff7, 0xfd15, + 0x7ff7, 0xfd0f, 0x7ff7, 0xfd08, 0x7ff7, 0xfd02, 0x7ff6, 0xfcfc, + 0x7ff6, 0xfcf5, 0x7ff6, 0xfcef, 0x7ff6, 0xfce9, 0x7ff6, 0xfce3, + 0x7ff6, 0xfcdc, 0x7ff5, 0xfcd6, 0x7ff5, 0xfcd0, 0x7ff5, 0xfcc9, + 0x7ff5, 0xfcc3, 0x7ff5, 0xfcbd, 0x7ff5, 0xfcb7, 0x7ff5, 0xfcb0, + 0x7ff4, 0xfcaa, 0x7ff4, 0xfca4, 0x7ff4, 0xfc9e, 0x7ff4, 0xfc97, + 0x7ff4, 0xfc91, 0x7ff4, 0xfc8b, 0x7ff3, 0xfc84, 0x7ff3, 0xfc7e, + 0x7ff3, 0xfc78, 0x7ff3, 0xfc72, 0x7ff3, 0xfc6b, 0x7ff2, 0xfc65, + 0x7ff2, 0xfc5f, 0x7ff2, 0xfc58, 0x7ff2, 0xfc52, 0x7ff2, 0xfc4c, + 0x7ff2, 0xfc46, 0x7ff1, 0xfc3f, 0x7ff1, 0xfc39, 0x7ff1, 0xfc33, + 0x7ff1, 0xfc2c, 0x7ff1, 0xfc26, 0x7ff0, 0xfc20, 0x7ff0, 0xfc1a, + 0x7ff0, 0xfc13, 0x7ff0, 0xfc0d, 0x7ff0, 0xfc07, 0x7fef, 0xfc01, + 0x7fef, 0xfbfa, 0x7fef, 0xfbf4, 0x7fef, 0xfbee, 0x7fef, 0xfbe7, + 0x7fee, 0xfbe1, 0x7fee, 0xfbdb, 0x7fee, 0xfbd5, 0x7fee, 0xfbce, + 0x7fee, 0xfbc8, 0x7fed, 0xfbc2, 0x7fed, 0xfbbb, 0x7fed, 0xfbb5, + 0x7fed, 0xfbaf, 0x7fed, 0xfba9, 0x7fec, 0xfba2, 0x7fec, 0xfb9c, + 0x7fec, 0xfb96, 0x7fec, 0xfb8f, 0x7fec, 0xfb89, 0x7feb, 0xfb83, + 0x7feb, 0xfb7d, 0x7feb, 0xfb76, 0x7feb, 0xfb70, 0x7fea, 0xfb6a, + 0x7fea, 0xfb64, 0x7fea, 0xfb5d, 0x7fea, 0xfb57, 0x7fea, 0xfb51, + 0x7fe9, 0xfb4a, 0x7fe9, 0xfb44, 0x7fe9, 0xfb3e, 0x7fe9, 0xfb38, + 0x7fe8, 0xfb31, 0x7fe8, 0xfb2b, 0x7fe8, 0xfb25, 0x7fe8, 0xfb1e, + 0x7fe7, 0xfb18, 0x7fe7, 0xfb12, 0x7fe7, 0xfb0c, 0x7fe7, 0xfb05, + 0x7fe6, 0xfaff, 0x7fe6, 0xfaf9, 0x7fe6, 0xfaf3, 0x7fe6, 0xfaec, + 0x7fe5, 0xfae6, 0x7fe5, 0xfae0, 0x7fe5, 0xfad9, 0x7fe5, 0xfad3, + 0x7fe4, 0xfacd, 0x7fe4, 0xfac7, 0x7fe4, 0xfac0, 0x7fe4, 0xfaba, + 0x7fe3, 0xfab4, 0x7fe3, 0xfaad, 0x7fe3, 0xfaa7, 0x7fe3, 0xfaa1, + 0x7fe2, 0xfa9b, 0x7fe2, 0xfa94, 0x7fe2, 0xfa8e, 0x7fe2, 0xfa88, + 0x7fe1, 0xfa81, 0x7fe1, 0xfa7b, 0x7fe1, 0xfa75, 0x7fe0, 0xfa6f, + 0x7fe0, 0xfa68, 0x7fe0, 0xfa62, 0x7fe0, 0xfa5c, 0x7fdf, 0xfa56, + 0x7fdf, 0xfa4f, 0x7fdf, 0xfa49, 0x7fdf, 0xfa43, 0x7fde, 0xfa3c, + 0x7fde, 0xfa36, 0x7fde, 0xfa30, 0x7fdd, 0xfa2a, 0x7fdd, 0xfa23, + 0x7fdd, 0xfa1d, 0x7fdd, 0xfa17, 0x7fdc, 0xfa11, 0x7fdc, 0xfa0a, + 0x7fdc, 0xfa04, 0x7fdb, 0xf9fe, 0x7fdb, 0xf9f7, 0x7fdb, 0xf9f1, + 0x7fda, 0xf9eb, 0x7fda, 0xf9e5, 0x7fda, 0xf9de, 0x7fda, 0xf9d8, + 0x7fd9, 0xf9d2, 0x7fd9, 0xf9cb, 0x7fd9, 0xf9c5, 0x7fd8, 0xf9bf, + 0x7fd8, 0xf9b9, 0x7fd8, 0xf9b2, 0x7fd7, 0xf9ac, 0x7fd7, 0xf9a6, + 0x7fd7, 0xf9a0, 0x7fd6, 0xf999, 0x7fd6, 0xf993, 0x7fd6, 0xf98d, + 0x7fd6, 0xf986, 0x7fd5, 0xf980, 0x7fd5, 0xf97a, 0x7fd5, 0xf974, + 0x7fd4, 0xf96d, 0x7fd4, 0xf967, 0x7fd4, 0xf961, 0x7fd3, 0xf95b, + 0x7fd3, 0xf954, 0x7fd3, 0xf94e, 0x7fd2, 0xf948, 0x7fd2, 0xf941, + 0x7fd2, 0xf93b, 0x7fd1, 0xf935, 0x7fd1, 0xf92f, 0x7fd1, 0xf928, + 0x7fd0, 0xf922, 0x7fd0, 0xf91c, 0x7fd0, 0xf916, 0x7fcf, 0xf90f, + 0x7fcf, 0xf909, 0x7fcf, 0xf903, 0x7fce, 0xf8fc, 0x7fce, 0xf8f6, + 0x7fce, 0xf8f0, 0x7fcd, 0xf8ea, 0x7fcd, 0xf8e3, 0x7fcd, 0xf8dd, + 0x7fcc, 0xf8d7, 0x7fcc, 0xf8d0, 0x7fcb, 0xf8ca, 0x7fcb, 0xf8c4, + 0x7fcb, 0xf8be, 0x7fca, 0xf8b7, 0x7fca, 0xf8b1, 0x7fca, 0xf8ab, + 0x7fc9, 0xf8a5, 0x7fc9, 0xf89e, 0x7fc9, 0xf898, 0x7fc8, 0xf892, + 0x7fc8, 0xf88b, 0x7fc7, 0xf885, 0x7fc7, 0xf87f, 0x7fc7, 0xf879, + 0x7fc6, 0xf872, 0x7fc6, 0xf86c, 0x7fc6, 0xf866, 0x7fc5, 0xf860, + 0x7fc5, 0xf859, 0x7fc5, 0xf853, 0x7fc4, 0xf84d, 0x7fc4, 0xf846, + 0x7fc3, 0xf840, 0x7fc3, 0xf83a, 0x7fc3, 0xf834, 0x7fc2, 0xf82d, + 0x7fc2, 0xf827, 0x7fc1, 0xf821, 0x7fc1, 0xf81b, 0x7fc1, 0xf814, + 0x7fc0, 0xf80e, 0x7fc0, 0xf808, 0x7fc0, 0xf802, 0x7fbf, 0xf7fb, + 0x7fbf, 0xf7f5, 0x7fbe, 0xf7ef, 0x7fbe, 0xf7e8, 0x7fbe, 0xf7e2, + 0x7fbd, 0xf7dc, 0x7fbd, 0xf7d6, 0x7fbc, 0xf7cf, 0x7fbc, 0xf7c9, + 0x7fbc, 0xf7c3, 0x7fbb, 0xf7bd, 0x7fbb, 0xf7b6, 0x7fba, 0xf7b0, + 0x7fba, 0xf7aa, 0x7fb9, 0xf7a3, 0x7fb9, 0xf79d, 0x7fb9, 0xf797, + 0x7fb8, 0xf791, 0x7fb8, 0xf78a, 0x7fb7, 0xf784, 0x7fb7, 0xf77e, + 0x7fb7, 0xf778, 0x7fb6, 0xf771, 0x7fb6, 0xf76b, 0x7fb5, 0xf765, + 0x7fb5, 0xf75e, 0x7fb4, 0xf758, 0x7fb4, 0xf752, 0x7fb4, 0xf74c, + 0x7fb3, 0xf745, 0x7fb3, 0xf73f, 0x7fb2, 0xf739, 0x7fb2, 0xf733, + 0x7fb1, 0xf72c, 0x7fb1, 0xf726, 0x7fb1, 0xf720, 0x7fb0, 0xf71a, + 0x7fb0, 0xf713, 0x7faf, 0xf70d, 0x7faf, 0xf707, 0x7fae, 0xf700, + 0x7fae, 0xf6fa, 0x7fae, 0xf6f4, 0x7fad, 0xf6ee, 0x7fad, 0xf6e7, + 0x7fac, 0xf6e1, 0x7fac, 0xf6db, 0x7fab, 0xf6d5, 0x7fab, 0xf6ce, + 0x7faa, 0xf6c8, 0x7faa, 0xf6c2, 0x7fa9, 0xf6bc, 0x7fa9, 0xf6b5, + 0x7fa9, 0xf6af, 0x7fa8, 0xf6a9, 0x7fa8, 0xf6a2, 0x7fa7, 0xf69c, + 0x7fa7, 0xf696, 0x7fa6, 0xf690, 0x7fa6, 0xf689, 0x7fa5, 0xf683, + 0x7fa5, 0xf67d, 0x7fa4, 0xf677, 0x7fa4, 0xf670, 0x7fa3, 0xf66a, + 0x7fa3, 0xf664, 0x7fa3, 0xf65e, 0x7fa2, 0xf657, 0x7fa2, 0xf651, + 0x7fa1, 0xf64b, 0x7fa1, 0xf644, 0x7fa0, 0xf63e, 0x7fa0, 0xf638, + 0x7f9f, 0xf632, 0x7f9f, 0xf62b, 0x7f9e, 0xf625, 0x7f9e, 0xf61f, + 0x7f9d, 0xf619, 0x7f9d, 0xf612, 0x7f9c, 0xf60c, 0x7f9c, 0xf606, + 0x7f9b, 0xf600, 0x7f9b, 0xf5f9, 0x7f9a, 0xf5f3, 0x7f9a, 0xf5ed, + 0x7f99, 0xf5e7, 0x7f99, 0xf5e0, 0x7f98, 0xf5da, 0x7f98, 0xf5d4, + 0x7f97, 0xf5cd, 0x7f97, 0xf5c7, 0x7f96, 0xf5c1, 0x7f96, 0xf5bb, + 0x7f95, 0xf5b4, 0x7f95, 0xf5ae, 0x7f94, 0xf5a8, 0x7f94, 0xf5a2, + 0x7f93, 0xf59b, 0x7f93, 0xf595, 0x7f92, 0xf58f, 0x7f92, 0xf589, + 0x7f91, 0xf582, 0x7f91, 0xf57c, 0x7f90, 0xf576, 0x7f90, 0xf570, + 0x7f8f, 0xf569, 0x7f8f, 0xf563, 0x7f8e, 0xf55d, 0x7f8e, 0xf556, + 0x7f8d, 0xf550, 0x7f8d, 0xf54a, 0x7f8c, 0xf544, 0x7f8b, 0xf53d, + 0x7f8b, 0xf537, 0x7f8a, 0xf531, 0x7f8a, 0xf52b, 0x7f89, 0xf524, + 0x7f89, 0xf51e, 0x7f88, 0xf518, 0x7f88, 0xf512, 0x7f87, 0xf50b, + 0x7f87, 0xf505, 0x7f86, 0xf4ff, 0x7f86, 0xf4f9, 0x7f85, 0xf4f2, + 0x7f85, 0xf4ec, 0x7f84, 0xf4e6, 0x7f83, 0xf4e0, 0x7f83, 0xf4d9, + 0x7f82, 0xf4d3, 0x7f82, 0xf4cd, 0x7f81, 0xf4c6, 0x7f81, 0xf4c0, + 0x7f80, 0xf4ba, 0x7f80, 0xf4b4, 0x7f7f, 0xf4ad, 0x7f7e, 0xf4a7, + 0x7f7e, 0xf4a1, 0x7f7d, 0xf49b, 0x7f7d, 0xf494, 0x7f7c, 0xf48e, + 0x7f7c, 0xf488, 0x7f7b, 0xf482, 0x7f7b, 0xf47b, 0x7f7a, 0xf475, + 0x7f79, 0xf46f, 0x7f79, 0xf469, 0x7f78, 0xf462, 0x7f78, 0xf45c, + 0x7f77, 0xf456, 0x7f77, 0xf450, 0x7f76, 0xf449, 0x7f75, 0xf443, + 0x7f75, 0xf43d, 0x7f74, 0xf437, 0x7f74, 0xf430, 0x7f73, 0xf42a, + 0x7f72, 0xf424, 0x7f72, 0xf41e, 0x7f71, 0xf417, 0x7f71, 0xf411, + 0x7f70, 0xf40b, 0x7f70, 0xf405, 0x7f6f, 0xf3fe, 0x7f6e, 0xf3f8, + 0x7f6e, 0xf3f2, 0x7f6d, 0xf3ec, 0x7f6d, 0xf3e5, 0x7f6c, 0xf3df, + 0x7f6b, 0xf3d9, 0x7f6b, 0xf3d2, 0x7f6a, 0xf3cc, 0x7f6a, 0xf3c6, + 0x7f69, 0xf3c0, 0x7f68, 0xf3b9, 0x7f68, 0xf3b3, 0x7f67, 0xf3ad, + 0x7f67, 0xf3a7, 0x7f66, 0xf3a0, 0x7f65, 0xf39a, 0x7f65, 0xf394, + 0x7f64, 0xf38e, 0x7f64, 0xf387, 0x7f63, 0xf381, 0x7f62, 0xf37b, + 0x7f62, 0xf375, 0x7f61, 0xf36e, 0x7f60, 0xf368, 0x7f60, 0xf362, + 0x7f5f, 0xf35c, 0x7f5f, 0xf355, 0x7f5e, 0xf34f, 0x7f5d, 0xf349, + 0x7f5d, 0xf343, 0x7f5c, 0xf33c, 0x7f5b, 0xf336, 0x7f5b, 0xf330, + 0x7f5a, 0xf32a, 0x7f5a, 0xf323, 0x7f59, 0xf31d, 0x7f58, 0xf317, + 0x7f58, 0xf311, 0x7f57, 0xf30a, 0x7f56, 0xf304, 0x7f56, 0xf2fe, + 0x7f55, 0xf2f8, 0x7f55, 0xf2f1, 0x7f54, 0xf2eb, 0x7f53, 0xf2e5, + 0x7f53, 0xf2df, 0x7f52, 0xf2d8, 0x7f51, 0xf2d2, 0x7f51, 0xf2cc, + 0x7f50, 0xf2c6, 0x7f4f, 0xf2bf, 0x7f4f, 0xf2b9, 0x7f4e, 0xf2b3, + 0x7f4d, 0xf2ad, 0x7f4d, 0xf2a6, 0x7f4c, 0xf2a0, 0x7f4b, 0xf29a, + 0x7f4b, 0xf294, 0x7f4a, 0xf28d, 0x7f49, 0xf287, 0x7f49, 0xf281, + 0x7f48, 0xf27b, 0x7f47, 0xf274, 0x7f47, 0xf26e, 0x7f46, 0xf268, + 0x7f45, 0xf262, 0x7f45, 0xf25b, 0x7f44, 0xf255, 0x7f43, 0xf24f, + 0x7f43, 0xf249, 0x7f42, 0xf242, 0x7f41, 0xf23c, 0x7f41, 0xf236, + 0x7f40, 0xf230, 0x7f3f, 0xf229, 0x7f3f, 0xf223, 0x7f3e, 0xf21d, + 0x7f3d, 0xf217, 0x7f3d, 0xf210, 0x7f3c, 0xf20a, 0x7f3b, 0xf204, + 0x7f3b, 0xf1fe, 0x7f3a, 0xf1f7, 0x7f39, 0xf1f1, 0x7f39, 0xf1eb, + 0x7f38, 0xf1e5, 0x7f37, 0xf1de, 0x7f36, 0xf1d8, 0x7f36, 0xf1d2, + 0x7f35, 0xf1cc, 0x7f34, 0xf1c6, 0x7f34, 0xf1bf, 0x7f33, 0xf1b9, + 0x7f32, 0xf1b3, 0x7f32, 0xf1ad, 0x7f31, 0xf1a6, 0x7f30, 0xf1a0, + 0x7f2f, 0xf19a, 0x7f2f, 0xf194, 0x7f2e, 0xf18d, 0x7f2d, 0xf187, + 0x7f2d, 0xf181, 0x7f2c, 0xf17b, 0x7f2b, 0xf174, 0x7f2a, 0xf16e, + 0x7f2a, 0xf168, 0x7f29, 0xf162, 0x7f28, 0xf15b, 0x7f28, 0xf155, + 0x7f27, 0xf14f, 0x7f26, 0xf149, 0x7f25, 0xf142, 0x7f25, 0xf13c, + 0x7f24, 0xf136, 0x7f23, 0xf130, 0x7f23, 0xf129, 0x7f22, 0xf123, + 0x7f21, 0xf11d, 0x7f20, 0xf117, 0x7f20, 0xf110, 0x7f1f, 0xf10a, + 0x7f1e, 0xf104, 0x7f1d, 0xf0fe, 0x7f1d, 0xf0f8, 0x7f1c, 0xf0f1, + 0x7f1b, 0xf0eb, 0x7f1a, 0xf0e5, 0x7f1a, 0xf0df, 0x7f19, 0xf0d8, + 0x7f18, 0xf0d2, 0x7f17, 0xf0cc, 0x7f17, 0xf0c6, 0x7f16, 0xf0bf, + 0x7f15, 0xf0b9, 0x7f14, 0xf0b3, 0x7f14, 0xf0ad, 0x7f13, 0xf0a6, + 0x7f12, 0xf0a0, 0x7f11, 0xf09a, 0x7f11, 0xf094, 0x7f10, 0xf08d, + 0x7f0f, 0xf087, 0x7f0e, 0xf081, 0x7f0e, 0xf07b, 0x7f0d, 0xf075, + 0x7f0c, 0xf06e, 0x7f0b, 0xf068, 0x7f0b, 0xf062, 0x7f0a, 0xf05c, + 0x7f09, 0xf055, 0x7f08, 0xf04f, 0x7f08, 0xf049, 0x7f07, 0xf043, + 0x7f06, 0xf03c, 0x7f05, 0xf036, 0x7f04, 0xf030, 0x7f04, 0xf02a, + 0x7f03, 0xf023, 0x7f02, 0xf01d, 0x7f01, 0xf017, 0x7f01, 0xf011, + 0x7f00, 0xf00b, 0x7eff, 0xf004, 0x7efe, 0xeffe, 0x7efd, 0xeff8, + 0x7efd, 0xeff2, 0x7efc, 0xefeb, 0x7efb, 0xefe5, 0x7efa, 0xefdf, + 0x7ef9, 0xefd9, 0x7ef9, 0xefd2, 0x7ef8, 0xefcc, 0x7ef7, 0xefc6, + 0x7ef6, 0xefc0, 0x7ef5, 0xefb9, 0x7ef5, 0xefb3, 0x7ef4, 0xefad, + 0x7ef3, 0xefa7, 0x7ef2, 0xefa1, 0x7ef1, 0xef9a, 0x7ef1, 0xef94, + 0x7ef0, 0xef8e, 0x7eef, 0xef88, 0x7eee, 0xef81, 0x7eed, 0xef7b, + 0x7eed, 0xef75, 0x7eec, 0xef6f, 0x7eeb, 0xef68, 0x7eea, 0xef62, + 0x7ee9, 0xef5c, 0x7ee9, 0xef56, 0x7ee8, 0xef50, 0x7ee7, 0xef49, + 0x7ee6, 0xef43, 0x7ee5, 0xef3d, 0x7ee4, 0xef37, 0x7ee4, 0xef30, + 0x7ee3, 0xef2a, 0x7ee2, 0xef24, 0x7ee1, 0xef1e, 0x7ee0, 0xef18, + 0x7edf, 0xef11, 0x7edf, 0xef0b, 0x7ede, 0xef05, 0x7edd, 0xeeff, + 0x7edc, 0xeef8, 0x7edb, 0xeef2, 0x7eda, 0xeeec, 0x7eda, 0xeee6, + 0x7ed9, 0xeedf, 0x7ed8, 0xeed9, 0x7ed7, 0xeed3, 0x7ed6, 0xeecd, + 0x7ed5, 0xeec7, 0x7ed5, 0xeec0, 0x7ed4, 0xeeba, 0x7ed3, 0xeeb4, + 0x7ed2, 0xeeae, 0x7ed1, 0xeea7, 0x7ed0, 0xeea1, 0x7ecf, 0xee9b, + 0x7ecf, 0xee95, 0x7ece, 0xee8f, 0x7ecd, 0xee88, 0x7ecc, 0xee82, + 0x7ecb, 0xee7c, 0x7eca, 0xee76, 0x7ec9, 0xee6f, 0x7ec9, 0xee69, + 0x7ec8, 0xee63, 0x7ec7, 0xee5d, 0x7ec6, 0xee57, 0x7ec5, 0xee50, + 0x7ec4, 0xee4a, 0x7ec3, 0xee44, 0x7ec3, 0xee3e, 0x7ec2, 0xee37, + 0x7ec1, 0xee31, 0x7ec0, 0xee2b, 0x7ebf, 0xee25, 0x7ebe, 0xee1f, + 0x7ebd, 0xee18, 0x7ebc, 0xee12, 0x7ebb, 0xee0c, 0x7ebb, 0xee06, + 0x7eba, 0xedff, 0x7eb9, 0xedf9, 0x7eb8, 0xedf3, 0x7eb7, 0xeded, + 0x7eb6, 0xede7, 0x7eb5, 0xede0, 0x7eb4, 0xedda, 0x7eb4, 0xedd4, + 0x7eb3, 0xedce, 0x7eb2, 0xedc7, 0x7eb1, 0xedc1, 0x7eb0, 0xedbb, + 0x7eaf, 0xedb5, 0x7eae, 0xedaf, 0x7ead, 0xeda8, 0x7eac, 0xeda2, + 0x7eab, 0xed9c, 0x7eab, 0xed96, 0x7eaa, 0xed8f, 0x7ea9, 0xed89, + 0x7ea8, 0xed83, 0x7ea7, 0xed7d, 0x7ea6, 0xed77, 0x7ea5, 0xed70, + 0x7ea4, 0xed6a, 0x7ea3, 0xed64, 0x7ea2, 0xed5e, 0x7ea1, 0xed58, + 0x7ea1, 0xed51, 0x7ea0, 0xed4b, 0x7e9f, 0xed45, 0x7e9e, 0xed3f, + 0x7e9d, 0xed38, 0x7e9c, 0xed32, 0x7e9b, 0xed2c, 0x7e9a, 0xed26, + 0x7e99, 0xed20, 0x7e98, 0xed19, 0x7e97, 0xed13, 0x7e96, 0xed0d, + 0x7e95, 0xed07, 0x7e94, 0xed01, 0x7e94, 0xecfa, 0x7e93, 0xecf4, + 0x7e92, 0xecee, 0x7e91, 0xece8, 0x7e90, 0xece1, 0x7e8f, 0xecdb, + 0x7e8e, 0xecd5, 0x7e8d, 0xeccf, 0x7e8c, 0xecc9, 0x7e8b, 0xecc2, + 0x7e8a, 0xecbc, 0x7e89, 0xecb6, 0x7e88, 0xecb0, 0x7e87, 0xecaa, + 0x7e86, 0xeca3, 0x7e85, 0xec9d, 0x7e84, 0xec97, 0x7e84, 0xec91, + 0x7e83, 0xec8a, 0x7e82, 0xec84, 0x7e81, 0xec7e, 0x7e80, 0xec78, + 0x7e7f, 0xec72, 0x7e7e, 0xec6b, 0x7e7d, 0xec65, 0x7e7c, 0xec5f, + 0x7e7b, 0xec59, 0x7e7a, 0xec53, 0x7e79, 0xec4c, 0x7e78, 0xec46, + 0x7e77, 0xec40, 0x7e76, 0xec3a, 0x7e75, 0xec34, 0x7e74, 0xec2d, + 0x7e73, 0xec27, 0x7e72, 0xec21, 0x7e71, 0xec1b, 0x7e70, 0xec15, + 0x7e6f, 0xec0e, 0x7e6e, 0xec08, 0x7e6d, 0xec02, 0x7e6c, 0xebfc, + 0x7e6b, 0xebf5, 0x7e6a, 0xebef, 0x7e69, 0xebe9, 0x7e68, 0xebe3, + 0x7e67, 0xebdd, 0x7e66, 0xebd6, 0x7e65, 0xebd0, 0x7e64, 0xebca, + 0x7e63, 0xebc4, 0x7e62, 0xebbe, 0x7e61, 0xebb7, 0x7e60, 0xebb1, + 0x7e5f, 0xebab, 0x7e5e, 0xeba5, 0x7e5d, 0xeb9f, 0x7e5c, 0xeb98, + 0x7e5b, 0xeb92, 0x7e5a, 0xeb8c, 0x7e59, 0xeb86, 0x7e58, 0xeb80, + 0x7e57, 0xeb79, 0x7e56, 0xeb73, 0x7e55, 0xeb6d, 0x7e54, 0xeb67, + 0x7e53, 0xeb61, 0x7e52, 0xeb5a, 0x7e51, 0xeb54, 0x7e50, 0xeb4e, + 0x7e4f, 0xeb48, 0x7e4e, 0xeb42, 0x7e4d, 0xeb3b, 0x7e4c, 0xeb35, + 0x7e4b, 0xeb2f, 0x7e4a, 0xeb29, 0x7e49, 0xeb23, 0x7e48, 0xeb1c, + 0x7e47, 0xeb16, 0x7e46, 0xeb10, 0x7e45, 0xeb0a, 0x7e44, 0xeb04, + 0x7e43, 0xeafd, 0x7e42, 0xeaf7, 0x7e41, 0xeaf1, 0x7e40, 0xeaeb, + 0x7e3f, 0xeae5, 0x7e3e, 0xeade, 0x7e3d, 0xead8, 0x7e3c, 0xead2, + 0x7e3b, 0xeacc, 0x7e3a, 0xeac6, 0x7e39, 0xeabf, 0x7e38, 0xeab9, + 0x7e37, 0xeab3, 0x7e35, 0xeaad, 0x7e34, 0xeaa7, 0x7e33, 0xeaa0, + 0x7e32, 0xea9a, 0x7e31, 0xea94, 0x7e30, 0xea8e, 0x7e2f, 0xea88, + 0x7e2e, 0xea81, 0x7e2d, 0xea7b, 0x7e2c, 0xea75, 0x7e2b, 0xea6f, + 0x7e2a, 0xea69, 0x7e29, 0xea63, 0x7e28, 0xea5c, 0x7e27, 0xea56, + 0x7e26, 0xea50, 0x7e25, 0xea4a, 0x7e24, 0xea44, 0x7e22, 0xea3d, + 0x7e21, 0xea37, 0x7e20, 0xea31, 0x7e1f, 0xea2b, 0x7e1e, 0xea25, + 0x7e1d, 0xea1e, 0x7e1c, 0xea18, 0x7e1b, 0xea12, 0x7e1a, 0xea0c, + 0x7e19, 0xea06, 0x7e18, 0xe9ff, 0x7e17, 0xe9f9, 0x7e16, 0xe9f3, + 0x7e14, 0xe9ed, 0x7e13, 0xe9e7, 0x7e12, 0xe9e1, 0x7e11, 0xe9da, + 0x7e10, 0xe9d4, 0x7e0f, 0xe9ce, 0x7e0e, 0xe9c8, 0x7e0d, 0xe9c2, + 0x7e0c, 0xe9bb, 0x7e0b, 0xe9b5, 0x7e0a, 0xe9af, 0x7e08, 0xe9a9, + 0x7e07, 0xe9a3, 0x7e06, 0xe99c, 0x7e05, 0xe996, 0x7e04, 0xe990, + 0x7e03, 0xe98a, 0x7e02, 0xe984, 0x7e01, 0xe97e, 0x7e00, 0xe977, + 0x7dff, 0xe971, 0x7dfd, 0xe96b, 0x7dfc, 0xe965, 0x7dfb, 0xe95f, + 0x7dfa, 0xe958, 0x7df9, 0xe952, 0x7df8, 0xe94c, 0x7df7, 0xe946, + 0x7df6, 0xe940, 0x7df5, 0xe93a, 0x7df3, 0xe933, 0x7df2, 0xe92d, + 0x7df1, 0xe927, 0x7df0, 0xe921, 0x7def, 0xe91b, 0x7dee, 0xe914, + 0x7ded, 0xe90e, 0x7dec, 0xe908, 0x7dea, 0xe902, 0x7de9, 0xe8fc, + 0x7de8, 0xe8f6, 0x7de7, 0xe8ef, 0x7de6, 0xe8e9, 0x7de5, 0xe8e3, + 0x7de4, 0xe8dd, 0x7de2, 0xe8d7, 0x7de1, 0xe8d0, 0x7de0, 0xe8ca, + 0x7ddf, 0xe8c4, 0x7dde, 0xe8be, 0x7ddd, 0xe8b8, 0x7ddc, 0xe8b2, + 0x7dda, 0xe8ab, 0x7dd9, 0xe8a5, 0x7dd8, 0xe89f, 0x7dd7, 0xe899, + 0x7dd6, 0xe893, 0x7dd5, 0xe88c, 0x7dd4, 0xe886, 0x7dd2, 0xe880, + 0x7dd1, 0xe87a, 0x7dd0, 0xe874, 0x7dcf, 0xe86e, 0x7dce, 0xe867, + 0x7dcd, 0xe861, 0x7dcc, 0xe85b, 0x7dca, 0xe855, 0x7dc9, 0xe84f, + 0x7dc8, 0xe849, 0x7dc7, 0xe842, 0x7dc6, 0xe83c, 0x7dc5, 0xe836, + 0x7dc3, 0xe830, 0x7dc2, 0xe82a, 0x7dc1, 0xe823, 0x7dc0, 0xe81d, + 0x7dbf, 0xe817, 0x7dbd, 0xe811, 0x7dbc, 0xe80b, 0x7dbb, 0xe805, + 0x7dba, 0xe7fe, 0x7db9, 0xe7f8, 0x7db8, 0xe7f2, 0x7db6, 0xe7ec, + 0x7db5, 0xe7e6, 0x7db4, 0xe7e0, 0x7db3, 0xe7d9, 0x7db2, 0xe7d3, + 0x7db0, 0xe7cd, 0x7daf, 0xe7c7, 0x7dae, 0xe7c1, 0x7dad, 0xe7bb, + 0x7dac, 0xe7b4, 0x7dab, 0xe7ae, 0x7da9, 0xe7a8, 0x7da8, 0xe7a2, + 0x7da7, 0xe79c, 0x7da6, 0xe796, 0x7da5, 0xe78f, 0x7da3, 0xe789, + 0x7da2, 0xe783, 0x7da1, 0xe77d, 0x7da0, 0xe777, 0x7d9f, 0xe771, + 0x7d9d, 0xe76a, 0x7d9c, 0xe764, 0x7d9b, 0xe75e, 0x7d9a, 0xe758, + 0x7d98, 0xe752, 0x7d97, 0xe74c, 0x7d96, 0xe745, 0x7d95, 0xe73f, + 0x7d94, 0xe739, 0x7d92, 0xe733, 0x7d91, 0xe72d, 0x7d90, 0xe727, + 0x7d8f, 0xe720, 0x7d8e, 0xe71a, 0x7d8c, 0xe714, 0x7d8b, 0xe70e, + 0x7d8a, 0xe708, 0x7d89, 0xe702, 0x7d87, 0xe6fb, 0x7d86, 0xe6f5, + 0x7d85, 0xe6ef, 0x7d84, 0xe6e9, 0x7d82, 0xe6e3, 0x7d81, 0xe6dd, + 0x7d80, 0xe6d6, 0x7d7f, 0xe6d0, 0x7d7e, 0xe6ca, 0x7d7c, 0xe6c4, + 0x7d7b, 0xe6be, 0x7d7a, 0xe6b8, 0x7d79, 0xe6b2, 0x7d77, 0xe6ab, + 0x7d76, 0xe6a5, 0x7d75, 0xe69f, 0x7d74, 0xe699, 0x7d72, 0xe693, + 0x7d71, 0xe68d, 0x7d70, 0xe686, 0x7d6f, 0xe680, 0x7d6d, 0xe67a, + 0x7d6c, 0xe674, 0x7d6b, 0xe66e, 0x7d6a, 0xe668, 0x7d68, 0xe661, + 0x7d67, 0xe65b, 0x7d66, 0xe655, 0x7d65, 0xe64f, 0x7d63, 0xe649, + 0x7d62, 0xe643, 0x7d61, 0xe63d, 0x7d60, 0xe636, 0x7d5e, 0xe630, + 0x7d5d, 0xe62a, 0x7d5c, 0xe624, 0x7d5a, 0xe61e, 0x7d59, 0xe618, + 0x7d58, 0xe611, 0x7d57, 0xe60b, 0x7d55, 0xe605, 0x7d54, 0xe5ff, + 0x7d53, 0xe5f9, 0x7d52, 0xe5f3, 0x7d50, 0xe5ed, 0x7d4f, 0xe5e6, + 0x7d4e, 0xe5e0, 0x7d4c, 0xe5da, 0x7d4b, 0xe5d4, 0x7d4a, 0xe5ce, + 0x7d49, 0xe5c8, 0x7d47, 0xe5c2, 0x7d46, 0xe5bb, 0x7d45, 0xe5b5, + 0x7d43, 0xe5af, 0x7d42, 0xe5a9, 0x7d41, 0xe5a3, 0x7d3f, 0xe59d, + 0x7d3e, 0xe596, 0x7d3d, 0xe590, 0x7d3c, 0xe58a, 0x7d3a, 0xe584, + 0x7d39, 0xe57e, 0x7d38, 0xe578, 0x7d36, 0xe572, 0x7d35, 0xe56b, + 0x7d34, 0xe565, 0x7d32, 0xe55f, 0x7d31, 0xe559, 0x7d30, 0xe553, + 0x7d2f, 0xe54d, 0x7d2d, 0xe547, 0x7d2c, 0xe540, 0x7d2b, 0xe53a, + 0x7d29, 0xe534, 0x7d28, 0xe52e, 0x7d27, 0xe528, 0x7d25, 0xe522, + 0x7d24, 0xe51c, 0x7d23, 0xe515, 0x7d21, 0xe50f, 0x7d20, 0xe509, + 0x7d1f, 0xe503, 0x7d1d, 0xe4fd, 0x7d1c, 0xe4f7, 0x7d1b, 0xe4f1, + 0x7d19, 0xe4ea, 0x7d18, 0xe4e4, 0x7d17, 0xe4de, 0x7d15, 0xe4d8, + 0x7d14, 0xe4d2, 0x7d13, 0xe4cc, 0x7d11, 0xe4c6, 0x7d10, 0xe4bf, + 0x7d0f, 0xe4b9, 0x7d0d, 0xe4b3, 0x7d0c, 0xe4ad, 0x7d0b, 0xe4a7, + 0x7d09, 0xe4a1, 0x7d08, 0xe49b, 0x7d07, 0xe494, 0x7d05, 0xe48e, + 0x7d04, 0xe488, 0x7d03, 0xe482, 0x7d01, 0xe47c, 0x7d00, 0xe476, + 0x7cff, 0xe470, 0x7cfd, 0xe46a, 0x7cfc, 0xe463, 0x7cfb, 0xe45d, + 0x7cf9, 0xe457, 0x7cf8, 0xe451, 0x7cf6, 0xe44b, 0x7cf5, 0xe445, + 0x7cf4, 0xe43f, 0x7cf2, 0xe438, 0x7cf1, 0xe432, 0x7cf0, 0xe42c, + 0x7cee, 0xe426, 0x7ced, 0xe420, 0x7cec, 0xe41a, 0x7cea, 0xe414, + 0x7ce9, 0xe40e, 0x7ce7, 0xe407, 0x7ce6, 0xe401, 0x7ce5, 0xe3fb, + 0x7ce3, 0xe3f5, 0x7ce2, 0xe3ef, 0x7ce1, 0xe3e9, 0x7cdf, 0xe3e3, + 0x7cde, 0xe3dc, 0x7cdc, 0xe3d6, 0x7cdb, 0xe3d0, 0x7cda, 0xe3ca, + 0x7cd8, 0xe3c4, 0x7cd7, 0xe3be, 0x7cd5, 0xe3b8, 0x7cd4, 0xe3b2, + 0x7cd3, 0xe3ab, 0x7cd1, 0xe3a5, 0x7cd0, 0xe39f, 0x7ccf, 0xe399, + 0x7ccd, 0xe393, 0x7ccc, 0xe38d, 0x7cca, 0xe387, 0x7cc9, 0xe381, + 0x7cc8, 0xe37a, 0x7cc6, 0xe374, 0x7cc5, 0xe36e, 0x7cc3, 0xe368, + 0x7cc2, 0xe362, 0x7cc1, 0xe35c, 0x7cbf, 0xe356, 0x7cbe, 0xe350, + 0x7cbc, 0xe349, 0x7cbb, 0xe343, 0x7cb9, 0xe33d, 0x7cb8, 0xe337, + 0x7cb7, 0xe331, 0x7cb5, 0xe32b, 0x7cb4, 0xe325, 0x7cb2, 0xe31f, + 0x7cb1, 0xe318, 0x7cb0, 0xe312, 0x7cae, 0xe30c, 0x7cad, 0xe306, + 0x7cab, 0xe300, 0x7caa, 0xe2fa, 0x7ca8, 0xe2f4, 0x7ca7, 0xe2ee, + 0x7ca6, 0xe2e8, 0x7ca4, 0xe2e1, 0x7ca3, 0xe2db, 0x7ca1, 0xe2d5, + 0x7ca0, 0xe2cf, 0x7c9e, 0xe2c9, 0x7c9d, 0xe2c3, 0x7c9c, 0xe2bd, + 0x7c9a, 0xe2b7, 0x7c99, 0xe2b0, 0x7c97, 0xe2aa, 0x7c96, 0xe2a4, + 0x7c94, 0xe29e, 0x7c93, 0xe298, 0x7c91, 0xe292, 0x7c90, 0xe28c, + 0x7c8f, 0xe286, 0x7c8d, 0xe280, 0x7c8c, 0xe279, 0x7c8a, 0xe273, + 0x7c89, 0xe26d, 0x7c87, 0xe267, 0x7c86, 0xe261, 0x7c84, 0xe25b, + 0x7c83, 0xe255, 0x7c82, 0xe24f, 0x7c80, 0xe249, 0x7c7f, 0xe242, + 0x7c7d, 0xe23c, 0x7c7c, 0xe236, 0x7c7a, 0xe230, 0x7c79, 0xe22a, + 0x7c77, 0xe224, 0x7c76, 0xe21e, 0x7c74, 0xe218, 0x7c73, 0xe212, + 0x7c71, 0xe20b, 0x7c70, 0xe205, 0x7c6e, 0xe1ff, 0x7c6d, 0xe1f9, + 0x7c6c, 0xe1f3, 0x7c6a, 0xe1ed, 0x7c69, 0xe1e7, 0x7c67, 0xe1e1, + 0x7c66, 0xe1db, 0x7c64, 0xe1d4, 0x7c63, 0xe1ce, 0x7c61, 0xe1c8, + 0x7c60, 0xe1c2, 0x7c5e, 0xe1bc, 0x7c5d, 0xe1b6, 0x7c5b, 0xe1b0, + 0x7c5a, 0xe1aa, 0x7c58, 0xe1a4, 0x7c57, 0xe19e, 0x7c55, 0xe197, + 0x7c54, 0xe191, 0x7c52, 0xe18b, 0x7c51, 0xe185, 0x7c4f, 0xe17f, + 0x7c4e, 0xe179, 0x7c4c, 0xe173, 0x7c4b, 0xe16d, 0x7c49, 0xe167, + 0x7c48, 0xe160, 0x7c46, 0xe15a, 0x7c45, 0xe154, 0x7c43, 0xe14e, + 0x7c42, 0xe148, 0x7c40, 0xe142, 0x7c3f, 0xe13c, 0x7c3d, 0xe136, + 0x7c3c, 0xe130, 0x7c3a, 0xe12a, 0x7c39, 0xe123, 0x7c37, 0xe11d, + 0x7c36, 0xe117, 0x7c34, 0xe111, 0x7c33, 0xe10b, 0x7c31, 0xe105, + 0x7c30, 0xe0ff, 0x7c2e, 0xe0f9, 0x7c2d, 0xe0f3, 0x7c2b, 0xe0ed, + 0x7c29, 0xe0e7, 0x7c28, 0xe0e0, 0x7c26, 0xe0da, 0x7c25, 0xe0d4, + 0x7c23, 0xe0ce, 0x7c22, 0xe0c8, 0x7c20, 0xe0c2, 0x7c1f, 0xe0bc, + 0x7c1d, 0xe0b6, 0x7c1c, 0xe0b0, 0x7c1a, 0xe0aa, 0x7c19, 0xe0a3, + 0x7c17, 0xe09d, 0x7c16, 0xe097, 0x7c14, 0xe091, 0x7c12, 0xe08b, + 0x7c11, 0xe085, 0x7c0f, 0xe07f, 0x7c0e, 0xe079, 0x7c0c, 0xe073, + 0x7c0b, 0xe06d, 0x7c09, 0xe067, 0x7c08, 0xe061, 0x7c06, 0xe05a, + 0x7c05, 0xe054, 0x7c03, 0xe04e, 0x7c01, 0xe048, 0x7c00, 0xe042, + 0x7bfe, 0xe03c, 0x7bfd, 0xe036, 0x7bfb, 0xe030, 0x7bfa, 0xe02a, + 0x7bf8, 0xe024, 0x7bf6, 0xe01e, 0x7bf5, 0xe017, 0x7bf3, 0xe011, + 0x7bf2, 0xe00b, 0x7bf0, 0xe005, 0x7bef, 0xdfff, 0x7bed, 0xdff9, + 0x7beb, 0xdff3, 0x7bea, 0xdfed, 0x7be8, 0xdfe7, 0x7be7, 0xdfe1, + 0x7be5, 0xdfdb, 0x7be4, 0xdfd5, 0x7be2, 0xdfce, 0x7be0, 0xdfc8, + 0x7bdf, 0xdfc2, 0x7bdd, 0xdfbc, 0x7bdc, 0xdfb6, 0x7bda, 0xdfb0, + 0x7bd9, 0xdfaa, 0x7bd7, 0xdfa4, 0x7bd5, 0xdf9e, 0x7bd4, 0xdf98, + 0x7bd2, 0xdf92, 0x7bd1, 0xdf8c, 0x7bcf, 0xdf86, 0x7bcd, 0xdf7f, + 0x7bcc, 0xdf79, 0x7bca, 0xdf73, 0x7bc9, 0xdf6d, 0x7bc7, 0xdf67, + 0x7bc5, 0xdf61, 0x7bc4, 0xdf5b, 0x7bc2, 0xdf55, 0x7bc1, 0xdf4f, + 0x7bbf, 0xdf49, 0x7bbd, 0xdf43, 0x7bbc, 0xdf3d, 0x7bba, 0xdf37, + 0x7bb9, 0xdf30, 0x7bb7, 0xdf2a, 0x7bb5, 0xdf24, 0x7bb4, 0xdf1e, + 0x7bb2, 0xdf18, 0x7bb0, 0xdf12, 0x7baf, 0xdf0c, 0x7bad, 0xdf06, + 0x7bac, 0xdf00, 0x7baa, 0xdefa, 0x7ba8, 0xdef4, 0x7ba7, 0xdeee, + 0x7ba5, 0xdee8, 0x7ba3, 0xdee2, 0x7ba2, 0xdedb, 0x7ba0, 0xded5, + 0x7b9f, 0xdecf, 0x7b9d, 0xdec9, 0x7b9b, 0xdec3, 0x7b9a, 0xdebd, + 0x7b98, 0xdeb7, 0x7b96, 0xdeb1, 0x7b95, 0xdeab, 0x7b93, 0xdea5, + 0x7b92, 0xde9f, 0x7b90, 0xde99, 0x7b8e, 0xde93, 0x7b8d, 0xde8d, + 0x7b8b, 0xde87, 0x7b89, 0xde80, 0x7b88, 0xde7a, 0x7b86, 0xde74, + 0x7b84, 0xde6e, 0x7b83, 0xde68, 0x7b81, 0xde62, 0x7b7f, 0xde5c, + 0x7b7e, 0xde56, 0x7b7c, 0xde50, 0x7b7a, 0xde4a, 0x7b79, 0xde44, + 0x7b77, 0xde3e, 0x7b76, 0xde38, 0x7b74, 0xde32, 0x7b72, 0xde2c, + 0x7b71, 0xde26, 0x7b6f, 0xde1f, 0x7b6d, 0xde19, 0x7b6c, 0xde13, + 0x7b6a, 0xde0d, 0x7b68, 0xde07, 0x7b67, 0xde01, 0x7b65, 0xddfb, + 0x7b63, 0xddf5, 0x7b62, 0xddef, 0x7b60, 0xdde9, 0x7b5e, 0xdde3, + 0x7b5d, 0xdddd, 0x7b5b, 0xddd7, 0x7b59, 0xddd1, 0x7b57, 0xddcb, + 0x7b56, 0xddc5, 0x7b54, 0xddbf, 0x7b52, 0xddb9, 0x7b51, 0xddb2, + 0x7b4f, 0xddac, 0x7b4d, 0xdda6, 0x7b4c, 0xdda0, 0x7b4a, 0xdd9a, + 0x7b48, 0xdd94, 0x7b47, 0xdd8e, 0x7b45, 0xdd88, 0x7b43, 0xdd82, + 0x7b42, 0xdd7c, 0x7b40, 0xdd76, 0x7b3e, 0xdd70, 0x7b3c, 0xdd6a, + 0x7b3b, 0xdd64, 0x7b39, 0xdd5e, 0x7b37, 0xdd58, 0x7b36, 0xdd52, + 0x7b34, 0xdd4c, 0x7b32, 0xdd46, 0x7b31, 0xdd40, 0x7b2f, 0xdd39, + 0x7b2d, 0xdd33, 0x7b2b, 0xdd2d, 0x7b2a, 0xdd27, 0x7b28, 0xdd21, + 0x7b26, 0xdd1b, 0x7b25, 0xdd15, 0x7b23, 0xdd0f, 0x7b21, 0xdd09, + 0x7b1f, 0xdd03, 0x7b1e, 0xdcfd, 0x7b1c, 0xdcf7, 0x7b1a, 0xdcf1, + 0x7b19, 0xdceb, 0x7b17, 0xdce5, 0x7b15, 0xdcdf, 0x7b13, 0xdcd9, + 0x7b12, 0xdcd3, 0x7b10, 0xdccd, 0x7b0e, 0xdcc7, 0x7b0c, 0xdcc1, + 0x7b0b, 0xdcbb, 0x7b09, 0xdcb5, 0x7b07, 0xdcae, 0x7b06, 0xdca8, + 0x7b04, 0xdca2, 0x7b02, 0xdc9c, 0x7b00, 0xdc96, 0x7aff, 0xdc90, + 0x7afd, 0xdc8a, 0x7afb, 0xdc84, 0x7af9, 0xdc7e, 0x7af8, 0xdc78, + 0x7af6, 0xdc72, 0x7af4, 0xdc6c, 0x7af2, 0xdc66, 0x7af1, 0xdc60, + 0x7aef, 0xdc5a, 0x7aed, 0xdc54, 0x7aeb, 0xdc4e, 0x7aea, 0xdc48, + 0x7ae8, 0xdc42, 0x7ae6, 0xdc3c, 0x7ae4, 0xdc36, 0x7ae3, 0xdc30, + 0x7ae1, 0xdc2a, 0x7adf, 0xdc24, 0x7add, 0xdc1e, 0x7adc, 0xdc18, + 0x7ada, 0xdc12, 0x7ad8, 0xdc0c, 0x7ad6, 0xdc06, 0x7ad5, 0xdbff, + 0x7ad3, 0xdbf9, 0x7ad1, 0xdbf3, 0x7acf, 0xdbed, 0x7acd, 0xdbe7, + 0x7acc, 0xdbe1, 0x7aca, 0xdbdb, 0x7ac8, 0xdbd5, 0x7ac6, 0xdbcf, + 0x7ac5, 0xdbc9, 0x7ac3, 0xdbc3, 0x7ac1, 0xdbbd, 0x7abf, 0xdbb7, + 0x7abd, 0xdbb1, 0x7abc, 0xdbab, 0x7aba, 0xdba5, 0x7ab8, 0xdb9f, + 0x7ab6, 0xdb99, 0x7ab5, 0xdb93, 0x7ab3, 0xdb8d, 0x7ab1, 0xdb87, + 0x7aaf, 0xdb81, 0x7aad, 0xdb7b, 0x7aac, 0xdb75, 0x7aaa, 0xdb6f, + 0x7aa8, 0xdb69, 0x7aa6, 0xdb63, 0x7aa4, 0xdb5d, 0x7aa3, 0xdb57, + 0x7aa1, 0xdb51, 0x7a9f, 0xdb4b, 0x7a9d, 0xdb45, 0x7a9b, 0xdb3f, + 0x7a9a, 0xdb39, 0x7a98, 0xdb33, 0x7a96, 0xdb2d, 0x7a94, 0xdb27, + 0x7a92, 0xdb21, 0x7a91, 0xdb1b, 0x7a8f, 0xdb15, 0x7a8d, 0xdb0f, + 0x7a8b, 0xdb09, 0x7a89, 0xdb03, 0x7a87, 0xdafd, 0x7a86, 0xdaf7, + 0x7a84, 0xdaf1, 0x7a82, 0xdaea, 0x7a80, 0xdae4, 0x7a7e, 0xdade, + 0x7a7d, 0xdad8, 0x7a7b, 0xdad2, 0x7a79, 0xdacc, 0x7a77, 0xdac6, + 0x7a75, 0xdac0, 0x7a73, 0xdaba, 0x7a72, 0xdab4, 0x7a70, 0xdaae, + 0x7a6e, 0xdaa8, 0x7a6c, 0xdaa2, 0x7a6a, 0xda9c, 0x7a68, 0xda96, + 0x7a67, 0xda90, 0x7a65, 0xda8a, 0x7a63, 0xda84, 0x7a61, 0xda7e, + 0x7a5f, 0xda78, 0x7a5d, 0xda72, 0x7a5c, 0xda6c, 0x7a5a, 0xda66, + 0x7a58, 0xda60, 0x7a56, 0xda5a, 0x7a54, 0xda54, 0x7a52, 0xda4e, + 0x7a50, 0xda48, 0x7a4f, 0xda42, 0x7a4d, 0xda3c, 0x7a4b, 0xda36, + 0x7a49, 0xda30, 0x7a47, 0xda2a, 0x7a45, 0xda24, 0x7a43, 0xda1e, + 0x7a42, 0xda18, 0x7a40, 0xda12, 0x7a3e, 0xda0c, 0x7a3c, 0xda06, + 0x7a3a, 0xda00, 0x7a38, 0xd9fa, 0x7a36, 0xd9f4, 0x7a35, 0xd9ee, + 0x7a33, 0xd9e8, 0x7a31, 0xd9e2, 0x7a2f, 0xd9dc, 0x7a2d, 0xd9d6, + 0x7a2b, 0xd9d0, 0x7a29, 0xd9ca, 0x7a27, 0xd9c4, 0x7a26, 0xd9be, + 0x7a24, 0xd9b8, 0x7a22, 0xd9b2, 0x7a20, 0xd9ac, 0x7a1e, 0xd9a6, + 0x7a1c, 0xd9a0, 0x7a1a, 0xd99a, 0x7a18, 0xd994, 0x7a16, 0xd98e, + 0x7a15, 0xd988, 0x7a13, 0xd982, 0x7a11, 0xd97c, 0x7a0f, 0xd976, + 0x7a0d, 0xd970, 0x7a0b, 0xd96a, 0x7a09, 0xd964, 0x7a07, 0xd95e, + 0x7a05, 0xd958, 0x7a04, 0xd952, 0x7a02, 0xd94c, 0x7a00, 0xd946, + 0x79fe, 0xd940, 0x79fc, 0xd93a, 0x79fa, 0xd934, 0x79f8, 0xd92e, + 0x79f6, 0xd928, 0x79f4, 0xd922, 0x79f2, 0xd91c, 0x79f0, 0xd917, + 0x79ef, 0xd911, 0x79ed, 0xd90b, 0x79eb, 0xd905, 0x79e9, 0xd8ff, + 0x79e7, 0xd8f9, 0x79e5, 0xd8f3, 0x79e3, 0xd8ed, 0x79e1, 0xd8e7, + 0x79df, 0xd8e1, 0x79dd, 0xd8db, 0x79db, 0xd8d5, 0x79d9, 0xd8cf, + 0x79d8, 0xd8c9, 0x79d6, 0xd8c3, 0x79d4, 0xd8bd, 0x79d2, 0xd8b7, + 0x79d0, 0xd8b1, 0x79ce, 0xd8ab, 0x79cc, 0xd8a5, 0x79ca, 0xd89f, + 0x79c8, 0xd899, 0x79c6, 0xd893, 0x79c4, 0xd88d, 0x79c2, 0xd887, + 0x79c0, 0xd881, 0x79be, 0xd87b, 0x79bc, 0xd875, 0x79bb, 0xd86f, + 0x79b9, 0xd869, 0x79b7, 0xd863, 0x79b5, 0xd85d, 0x79b3, 0xd857, + 0x79b1, 0xd851, 0x79af, 0xd84b, 0x79ad, 0xd845, 0x79ab, 0xd83f, + 0x79a9, 0xd839, 0x79a7, 0xd833, 0x79a5, 0xd82d, 0x79a3, 0xd827, + 0x79a1, 0xd821, 0x799f, 0xd81b, 0x799d, 0xd815, 0x799b, 0xd80f, + 0x7999, 0xd80a, 0x7997, 0xd804, 0x7995, 0xd7fe, 0x7993, 0xd7f8, + 0x7992, 0xd7f2, 0x7990, 0xd7ec, 0x798e, 0xd7e6, 0x798c, 0xd7e0, + 0x798a, 0xd7da, 0x7988, 0xd7d4, 0x7986, 0xd7ce, 0x7984, 0xd7c8, + 0x7982, 0xd7c2, 0x7980, 0xd7bc, 0x797e, 0xd7b6, 0x797c, 0xd7b0, + 0x797a, 0xd7aa, 0x7978, 0xd7a4, 0x7976, 0xd79e, 0x7974, 0xd798, + 0x7972, 0xd792, 0x7970, 0xd78c, 0x796e, 0xd786, 0x796c, 0xd780, + 0x796a, 0xd77a, 0x7968, 0xd774, 0x7966, 0xd76e, 0x7964, 0xd768, + 0x7962, 0xd763, 0x7960, 0xd75d, 0x795e, 0xd757, 0x795c, 0xd751, + 0x795a, 0xd74b, 0x7958, 0xd745, 0x7956, 0xd73f, 0x7954, 0xd739, + 0x7952, 0xd733, 0x7950, 0xd72d, 0x794e, 0xd727, 0x794c, 0xd721, + 0x794a, 0xd71b, 0x7948, 0xd715, 0x7946, 0xd70f, 0x7944, 0xd709, + 0x7942, 0xd703, 0x7940, 0xd6fd, 0x793e, 0xd6f7, 0x793c, 0xd6f1, + 0x793a, 0xd6eb, 0x7938, 0xd6e5, 0x7936, 0xd6e0, 0x7934, 0xd6da, + 0x7932, 0xd6d4, 0x7930, 0xd6ce, 0x792e, 0xd6c8, 0x792c, 0xd6c2, + 0x792a, 0xd6bc, 0x7928, 0xd6b6, 0x7926, 0xd6b0, 0x7924, 0xd6aa, + 0x7922, 0xd6a4, 0x7920, 0xd69e, 0x791e, 0xd698, 0x791c, 0xd692, + 0x7919, 0xd68c, 0x7917, 0xd686, 0x7915, 0xd680, 0x7913, 0xd67a, + 0x7911, 0xd675, 0x790f, 0xd66f, 0x790d, 0xd669, 0x790b, 0xd663, + 0x7909, 0xd65d, 0x7907, 0xd657, 0x7905, 0xd651, 0x7903, 0xd64b, + 0x7901, 0xd645, 0x78ff, 0xd63f, 0x78fd, 0xd639, 0x78fb, 0xd633, + 0x78f9, 0xd62d, 0x78f7, 0xd627, 0x78f5, 0xd621, 0x78f3, 0xd61b, + 0x78f1, 0xd615, 0x78ee, 0xd610, 0x78ec, 0xd60a, 0x78ea, 0xd604, + 0x78e8, 0xd5fe, 0x78e6, 0xd5f8, 0x78e4, 0xd5f2, 0x78e2, 0xd5ec, + 0x78e0, 0xd5e6, 0x78de, 0xd5e0, 0x78dc, 0xd5da, 0x78da, 0xd5d4, + 0x78d8, 0xd5ce, 0x78d6, 0xd5c8, 0x78d4, 0xd5c2, 0x78d2, 0xd5bc, + 0x78cf, 0xd5b7, 0x78cd, 0xd5b1, 0x78cb, 0xd5ab, 0x78c9, 0xd5a5, + 0x78c7, 0xd59f, 0x78c5, 0xd599, 0x78c3, 0xd593, 0x78c1, 0xd58d, + 0x78bf, 0xd587, 0x78bd, 0xd581, 0x78bb, 0xd57b, 0x78b9, 0xd575, + 0x78b6, 0xd56f, 0x78b4, 0xd569, 0x78b2, 0xd564, 0x78b0, 0xd55e, + 0x78ae, 0xd558, 0x78ac, 0xd552, 0x78aa, 0xd54c, 0x78a8, 0xd546, + 0x78a6, 0xd540, 0x78a4, 0xd53a, 0x78a2, 0xd534, 0x789f, 0xd52e, + 0x789d, 0xd528, 0x789b, 0xd522, 0x7899, 0xd51c, 0x7897, 0xd517, + 0x7895, 0xd511, 0x7893, 0xd50b, 0x7891, 0xd505, 0x788f, 0xd4ff, + 0x788c, 0xd4f9, 0x788a, 0xd4f3, 0x7888, 0xd4ed, 0x7886, 0xd4e7, + 0x7884, 0xd4e1, 0x7882, 0xd4db, 0x7880, 0xd4d5, 0x787e, 0xd4d0, + 0x787c, 0xd4ca, 0x7879, 0xd4c4, 0x7877, 0xd4be, 0x7875, 0xd4b8, + 0x7873, 0xd4b2, 0x7871, 0xd4ac, 0x786f, 0xd4a6, 0x786d, 0xd4a0, + 0x786b, 0xd49a, 0x7868, 0xd494, 0x7866, 0xd48f, 0x7864, 0xd489, + 0x7862, 0xd483, 0x7860, 0xd47d, 0x785e, 0xd477, 0x785c, 0xd471, + 0x7859, 0xd46b, 0x7857, 0xd465, 0x7855, 0xd45f, 0x7853, 0xd459, + 0x7851, 0xd453, 0x784f, 0xd44e, 0x784d, 0xd448, 0x784a, 0xd442, + 0x7848, 0xd43c, 0x7846, 0xd436, 0x7844, 0xd430, 0x7842, 0xd42a, + 0x7840, 0xd424, 0x783e, 0xd41e, 0x783b, 0xd418, 0x7839, 0xd412, + 0x7837, 0xd40d, 0x7835, 0xd407, 0x7833, 0xd401, 0x7831, 0xd3fb, + 0x782e, 0xd3f5, 0x782c, 0xd3ef, 0x782a, 0xd3e9, 0x7828, 0xd3e3, + 0x7826, 0xd3dd, 0x7824, 0xd3d7, 0x7821, 0xd3d2, 0x781f, 0xd3cc, + 0x781d, 0xd3c6, 0x781b, 0xd3c0, 0x7819, 0xd3ba, 0x7817, 0xd3b4, + 0x7814, 0xd3ae, 0x7812, 0xd3a8, 0x7810, 0xd3a2, 0x780e, 0xd39d, + 0x780c, 0xd397, 0x780a, 0xd391, 0x7807, 0xd38b, 0x7805, 0xd385, + 0x7803, 0xd37f, 0x7801, 0xd379, 0x77ff, 0xd373, 0x77fc, 0xd36d, + 0x77fa, 0xd368, 0x77f8, 0xd362, 0x77f6, 0xd35c, 0x77f4, 0xd356, + 0x77f1, 0xd350, 0x77ef, 0xd34a, 0x77ed, 0xd344, 0x77eb, 0xd33e, + 0x77e9, 0xd338, 0x77e6, 0xd333, 0x77e4, 0xd32d, 0x77e2, 0xd327, + 0x77e0, 0xd321, 0x77de, 0xd31b, 0x77db, 0xd315, 0x77d9, 0xd30f, + 0x77d7, 0xd309, 0x77d5, 0xd303, 0x77d3, 0xd2fe, 0x77d0, 0xd2f8, + 0x77ce, 0xd2f2, 0x77cc, 0xd2ec, 0x77ca, 0xd2e6, 0x77c8, 0xd2e0, + 0x77c5, 0xd2da, 0x77c3, 0xd2d4, 0x77c1, 0xd2cf, 0x77bf, 0xd2c9, + 0x77bc, 0xd2c3, 0x77ba, 0xd2bd, 0x77b8, 0xd2b7, 0x77b6, 0xd2b1, + 0x77b4, 0xd2ab, 0x77b1, 0xd2a5, 0x77af, 0xd2a0, 0x77ad, 0xd29a, + 0x77ab, 0xd294, 0x77a8, 0xd28e, 0x77a6, 0xd288, 0x77a4, 0xd282, + 0x77a2, 0xd27c, 0x77a0, 0xd276, 0x779d, 0xd271, 0x779b, 0xd26b, + 0x7799, 0xd265, 0x7797, 0xd25f, 0x7794, 0xd259, 0x7792, 0xd253, + 0x7790, 0xd24d, 0x778e, 0xd247, 0x778b, 0xd242, 0x7789, 0xd23c, + 0x7787, 0xd236, 0x7785, 0xd230, 0x7782, 0xd22a, 0x7780, 0xd224, + 0x777e, 0xd21e, 0x777c, 0xd219, 0x7779, 0xd213, 0x7777, 0xd20d, + 0x7775, 0xd207, 0x7773, 0xd201, 0x7770, 0xd1fb, 0x776e, 0xd1f5, + 0x776c, 0xd1ef, 0x776a, 0xd1ea, 0x7767, 0xd1e4, 0x7765, 0xd1de, + 0x7763, 0xd1d8, 0x7760, 0xd1d2, 0x775e, 0xd1cc, 0x775c, 0xd1c6, + 0x775a, 0xd1c1, 0x7757, 0xd1bb, 0x7755, 0xd1b5, 0x7753, 0xd1af, + 0x7751, 0xd1a9, 0x774e, 0xd1a3, 0x774c, 0xd19d, 0x774a, 0xd198, + 0x7747, 0xd192, 0x7745, 0xd18c, 0x7743, 0xd186, 0x7741, 0xd180, + 0x773e, 0xd17a, 0x773c, 0xd174, 0x773a, 0xd16f, 0x7738, 0xd169, + 0x7735, 0xd163, 0x7733, 0xd15d, 0x7731, 0xd157, 0x772e, 0xd151, + 0x772c, 0xd14b, 0x772a, 0xd146, 0x7727, 0xd140, 0x7725, 0xd13a, + 0x7723, 0xd134, 0x7721, 0xd12e, 0x771e, 0xd128, 0x771c, 0xd123, + 0x771a, 0xd11d, 0x7717, 0xd117, 0x7715, 0xd111, 0x7713, 0xd10b, + 0x7710, 0xd105, 0x770e, 0xd0ff, 0x770c, 0xd0fa, 0x770a, 0xd0f4, + 0x7707, 0xd0ee, 0x7705, 0xd0e8, 0x7703, 0xd0e2, 0x7700, 0xd0dc, + 0x76fe, 0xd0d7, 0x76fc, 0xd0d1, 0x76f9, 0xd0cb, 0x76f7, 0xd0c5, + 0x76f5, 0xd0bf, 0x76f2, 0xd0b9, 0x76f0, 0xd0b4, 0x76ee, 0xd0ae, + 0x76eb, 0xd0a8, 0x76e9, 0xd0a2, 0x76e7, 0xd09c, 0x76e4, 0xd096, + 0x76e2, 0xd091, 0x76e0, 0xd08b, 0x76dd, 0xd085, 0x76db, 0xd07f, + 0x76d9, 0xd079, 0x76d6, 0xd073, 0x76d4, 0xd06e, 0x76d2, 0xd068, + 0x76cf, 0xd062, 0x76cd, 0xd05c, 0x76cb, 0xd056, 0x76c8, 0xd050, + 0x76c6, 0xd04b, 0x76c4, 0xd045, 0x76c1, 0xd03f, 0x76bf, 0xd039, + 0x76bd, 0xd033, 0x76ba, 0xd02d, 0x76b8, 0xd028, 0x76b6, 0xd022, + 0x76b3, 0xd01c, 0x76b1, 0xd016, 0x76af, 0xd010, 0x76ac, 0xd00a, + 0x76aa, 0xd005, 0x76a8, 0xcfff, 0x76a5, 0xcff9, 0x76a3, 0xcff3, + 0x76a0, 0xcfed, 0x769e, 0xcfe7, 0x769c, 0xcfe2, 0x7699, 0xcfdc, + 0x7697, 0xcfd6, 0x7695, 0xcfd0, 0x7692, 0xcfca, 0x7690, 0xcfc5, + 0x768e, 0xcfbf, 0x768b, 0xcfb9, 0x7689, 0xcfb3, 0x7686, 0xcfad, + 0x7684, 0xcfa7, 0x7682, 0xcfa2, 0x767f, 0xcf9c, 0x767d, 0xcf96, + 0x767b, 0xcf90, 0x7678, 0xcf8a, 0x7676, 0xcf85, 0x7673, 0xcf7f, + 0x7671, 0xcf79, 0x766f, 0xcf73, 0x766c, 0xcf6d, 0x766a, 0xcf67, + 0x7668, 0xcf62, 0x7665, 0xcf5c, 0x7663, 0xcf56, 0x7660, 0xcf50, + 0x765e, 0xcf4a, 0x765c, 0xcf45, 0x7659, 0xcf3f, 0x7657, 0xcf39, + 0x7654, 0xcf33, 0x7652, 0xcf2d, 0x7650, 0xcf28, 0x764d, 0xcf22, + 0x764b, 0xcf1c, 0x7648, 0xcf16, 0x7646, 0xcf10, 0x7644, 0xcf0b, + 0x7641, 0xcf05, 0x763f, 0xceff, 0x763c, 0xcef9, 0x763a, 0xcef3, + 0x7638, 0xceee, 0x7635, 0xcee8, 0x7633, 0xcee2, 0x7630, 0xcedc, + 0x762e, 0xced6, 0x762b, 0xced1, 0x7629, 0xcecb, 0x7627, 0xcec5, + 0x7624, 0xcebf, 0x7622, 0xceb9, 0x761f, 0xceb4, 0x761d, 0xceae, + 0x761b, 0xcea8, 0x7618, 0xcea2, 0x7616, 0xce9c, 0x7613, 0xce97, + 0x7611, 0xce91, 0x760e, 0xce8b, 0x760c, 0xce85, 0x760a, 0xce7f, + 0x7607, 0xce7a, 0x7605, 0xce74, 0x7602, 0xce6e, 0x7600, 0xce68, + 0x75fd, 0xce62, 0x75fb, 0xce5d, 0x75f9, 0xce57, 0x75f6, 0xce51, + 0x75f4, 0xce4b, 0x75f1, 0xce45, 0x75ef, 0xce40, 0x75ec, 0xce3a, + 0x75ea, 0xce34, 0x75e7, 0xce2e, 0x75e5, 0xce28, 0x75e3, 0xce23, + 0x75e0, 0xce1d, 0x75de, 0xce17, 0x75db, 0xce11, 0x75d9, 0xce0c, + 0x75d6, 0xce06, 0x75d4, 0xce00, 0x75d1, 0xcdfa, 0x75cf, 0xcdf4, + 0x75cc, 0xcdef, 0x75ca, 0xcde9, 0x75c8, 0xcde3, 0x75c5, 0xcddd, + 0x75c3, 0xcdd8, 0x75c0, 0xcdd2, 0x75be, 0xcdcc, 0x75bb, 0xcdc6, + 0x75b9, 0xcdc0, 0x75b6, 0xcdbb, 0x75b4, 0xcdb5, 0x75b1, 0xcdaf, + 0x75af, 0xcda9, 0x75ac, 0xcda3, 0x75aa, 0xcd9e, 0x75a7, 0xcd98, + 0x75a5, 0xcd92, 0x75a3, 0xcd8c, 0x75a0, 0xcd87, 0x759e, 0xcd81, + 0x759b, 0xcd7b, 0x7599, 0xcd75, 0x7596, 0xcd70, 0x7594, 0xcd6a, + 0x7591, 0xcd64, 0x758f, 0xcd5e, 0x758c, 0xcd58, 0x758a, 0xcd53, + 0x7587, 0xcd4d, 0x7585, 0xcd47, 0x7582, 0xcd41, 0x7580, 0xcd3c, + 0x757d, 0xcd36, 0x757b, 0xcd30, 0x7578, 0xcd2a, 0x7576, 0xcd25, + 0x7573, 0xcd1f, 0x7571, 0xcd19, 0x756e, 0xcd13, 0x756c, 0xcd0d, + 0x7569, 0xcd08, 0x7567, 0xcd02, 0x7564, 0xccfc, 0x7562, 0xccf6, + 0x755f, 0xccf1, 0x755d, 0xcceb, 0x755a, 0xcce5, 0x7558, 0xccdf, + 0x7555, 0xccda, 0x7553, 0xccd4, 0x7550, 0xccce, 0x754e, 0xccc8, + 0x754b, 0xccc3, 0x7549, 0xccbd, 0x7546, 0xccb7, 0x7544, 0xccb1, + 0x7541, 0xccac, 0x753f, 0xcca6, 0x753c, 0xcca0, 0x753a, 0xcc9a, + 0x7537, 0xcc95, 0x7535, 0xcc8f, 0x7532, 0xcc89, 0x752f, 0xcc83, + 0x752d, 0xcc7e, 0x752a, 0xcc78, 0x7528, 0xcc72, 0x7525, 0xcc6c, + 0x7523, 0xcc67, 0x7520, 0xcc61, 0x751e, 0xcc5b, 0x751b, 0xcc55, + 0x7519, 0xcc50, 0x7516, 0xcc4a, 0x7514, 0xcc44, 0x7511, 0xcc3e, + 0x750f, 0xcc39, 0x750c, 0xcc33, 0x7509, 0xcc2d, 0x7507, 0xcc27, + 0x7504, 0xcc22, 0x7502, 0xcc1c, 0x74ff, 0xcc16, 0x74fd, 0xcc10, + 0x74fa, 0xcc0b, 0x74f8, 0xcc05, 0x74f5, 0xcbff, 0x74f2, 0xcbf9, + 0x74f0, 0xcbf4, 0x74ed, 0xcbee, 0x74eb, 0xcbe8, 0x74e8, 0xcbe2, + 0x74e6, 0xcbdd, 0x74e3, 0xcbd7, 0x74e1, 0xcbd1, 0x74de, 0xcbcb, + 0x74db, 0xcbc6, 0x74d9, 0xcbc0, 0x74d6, 0xcbba, 0x74d4, 0xcbb5, + 0x74d1, 0xcbaf, 0x74cf, 0xcba9, 0x74cc, 0xcba3, 0x74c9, 0xcb9e, + 0x74c7, 0xcb98, 0x74c4, 0xcb92, 0x74c2, 0xcb8c, 0x74bf, 0xcb87, + 0x74bd, 0xcb81, 0x74ba, 0xcb7b, 0x74b7, 0xcb75, 0x74b5, 0xcb70, + 0x74b2, 0xcb6a, 0x74b0, 0xcb64, 0x74ad, 0xcb5f, 0x74ab, 0xcb59, + 0x74a8, 0xcb53, 0x74a5, 0xcb4d, 0x74a3, 0xcb48, 0x74a0, 0xcb42, + 0x749e, 0xcb3c, 0x749b, 0xcb36, 0x7498, 0xcb31, 0x7496, 0xcb2b, + 0x7493, 0xcb25, 0x7491, 0xcb20, 0x748e, 0xcb1a, 0x748b, 0xcb14, + 0x7489, 0xcb0e, 0x7486, 0xcb09, 0x7484, 0xcb03, 0x7481, 0xcafd, + 0x747e, 0xcaf8, 0x747c, 0xcaf2, 0x7479, 0xcaec, 0x7477, 0xcae6, + 0x7474, 0xcae1, 0x7471, 0xcadb, 0x746f, 0xcad5, 0x746c, 0xcad0, + 0x746a, 0xcaca, 0x7467, 0xcac4, 0x7464, 0xcabe, 0x7462, 0xcab9, + 0x745f, 0xcab3, 0x745c, 0xcaad, 0x745a, 0xcaa8, 0x7457, 0xcaa2, + 0x7455, 0xca9c, 0x7452, 0xca96, 0x744f, 0xca91, 0x744d, 0xca8b, + 0x744a, 0xca85, 0x7448, 0xca80, 0x7445, 0xca7a, 0x7442, 0xca74, + 0x7440, 0xca6e, 0x743d, 0xca69, 0x743a, 0xca63, 0x7438, 0xca5d, + 0x7435, 0xca58, 0x7432, 0xca52, 0x7430, 0xca4c, 0x742d, 0xca46, + 0x742b, 0xca41, 0x7428, 0xca3b, 0x7425, 0xca35, 0x7423, 0xca30, + 0x7420, 0xca2a, 0x741d, 0xca24, 0x741b, 0xca1f, 0x7418, 0xca19, + 0x7415, 0xca13, 0x7413, 0xca0d, 0x7410, 0xca08, 0x740d, 0xca02, + 0x740b, 0xc9fc, 0x7408, 0xc9f7, 0x7406, 0xc9f1, 0x7403, 0xc9eb, + 0x7400, 0xc9e6, 0x73fe, 0xc9e0, 0x73fb, 0xc9da, 0x73f8, 0xc9d5, + 0x73f6, 0xc9cf, 0x73f3, 0xc9c9, 0x73f0, 0xc9c3, 0x73ee, 0xc9be, + 0x73eb, 0xc9b8, 0x73e8, 0xc9b2, 0x73e6, 0xc9ad, 0x73e3, 0xc9a7, + 0x73e0, 0xc9a1, 0x73de, 0xc99c, 0x73db, 0xc996, 0x73d8, 0xc990, + 0x73d6, 0xc98b, 0x73d3, 0xc985, 0x73d0, 0xc97f, 0x73ce, 0xc97a, + 0x73cb, 0xc974, 0x73c8, 0xc96e, 0x73c6, 0xc968, 0x73c3, 0xc963, + 0x73c0, 0xc95d, 0x73bd, 0xc957, 0x73bb, 0xc952, 0x73b8, 0xc94c, + 0x73b5, 0xc946, 0x73b3, 0xc941, 0x73b0, 0xc93b, 0x73ad, 0xc935, + 0x73ab, 0xc930, 0x73a8, 0xc92a, 0x73a5, 0xc924, 0x73a3, 0xc91f, + 0x73a0, 0xc919, 0x739d, 0xc913, 0x739b, 0xc90e, 0x7398, 0xc908, + 0x7395, 0xc902, 0x7392, 0xc8fd, 0x7390, 0xc8f7, 0x738d, 0xc8f1, + 0x738a, 0xc8ec, 0x7388, 0xc8e6, 0x7385, 0xc8e0, 0x7382, 0xc8db, + 0x737f, 0xc8d5, 0x737d, 0xc8cf, 0x737a, 0xc8ca, 0x7377, 0xc8c4, + 0x7375, 0xc8be, 0x7372, 0xc8b9, 0x736f, 0xc8b3, 0x736c, 0xc8ad, + 0x736a, 0xc8a8, 0x7367, 0xc8a2, 0x7364, 0xc89c, 0x7362, 0xc897, + 0x735f, 0xc891, 0x735c, 0xc88b, 0x7359, 0xc886, 0x7357, 0xc880, + 0x7354, 0xc87a, 0x7351, 0xc875, 0x734f, 0xc86f, 0x734c, 0xc869, + 0x7349, 0xc864, 0x7346, 0xc85e, 0x7344, 0xc858, 0x7341, 0xc853, + 0x733e, 0xc84d, 0x733b, 0xc847, 0x7339, 0xc842, 0x7336, 0xc83c, + 0x7333, 0xc836, 0x7330, 0xc831, 0x732e, 0xc82b, 0x732b, 0xc825, + 0x7328, 0xc820, 0x7326, 0xc81a, 0x7323, 0xc814, 0x7320, 0xc80f, + 0x731d, 0xc809, 0x731b, 0xc803, 0x7318, 0xc7fe, 0x7315, 0xc7f8, + 0x7312, 0xc7f3, 0x7310, 0xc7ed, 0x730d, 0xc7e7, 0x730a, 0xc7e2, + 0x7307, 0xc7dc, 0x7305, 0xc7d6, 0x7302, 0xc7d1, 0x72ff, 0xc7cb, + 0x72fc, 0xc7c5, 0x72f9, 0xc7c0, 0x72f7, 0xc7ba, 0x72f4, 0xc7b4, + 0x72f1, 0xc7af, 0x72ee, 0xc7a9, 0x72ec, 0xc7a3, 0x72e9, 0xc79e, + 0x72e6, 0xc798, 0x72e3, 0xc793, 0x72e1, 0xc78d, 0x72de, 0xc787, + 0x72db, 0xc782, 0x72d8, 0xc77c, 0x72d5, 0xc776, 0x72d3, 0xc771, + 0x72d0, 0xc76b, 0x72cd, 0xc765, 0x72ca, 0xc760, 0x72c8, 0xc75a, + 0x72c5, 0xc755, 0x72c2, 0xc74f, 0x72bf, 0xc749, 0x72bc, 0xc744, + 0x72ba, 0xc73e, 0x72b7, 0xc738, 0x72b4, 0xc733, 0x72b1, 0xc72d, + 0x72af, 0xc728, 0x72ac, 0xc722, 0x72a9, 0xc71c, 0x72a6, 0xc717, + 0x72a3, 0xc711, 0x72a1, 0xc70b, 0x729e, 0xc706, 0x729b, 0xc700, + 0x7298, 0xc6fa, 0x7295, 0xc6f5, 0x7293, 0xc6ef, 0x7290, 0xc6ea, + 0x728d, 0xc6e4, 0x728a, 0xc6de, 0x7287, 0xc6d9, 0x7285, 0xc6d3, + 0x7282, 0xc6ce, 0x727f, 0xc6c8, 0x727c, 0xc6c2, 0x7279, 0xc6bd, + 0x7276, 0xc6b7, 0x7274, 0xc6b1, 0x7271, 0xc6ac, 0x726e, 0xc6a6, + 0x726b, 0xc6a1, 0x7268, 0xc69b, 0x7266, 0xc695, 0x7263, 0xc690, + 0x7260, 0xc68a, 0x725d, 0xc684, 0x725a, 0xc67f, 0x7257, 0xc679, + 0x7255, 0xc674, 0x7252, 0xc66e, 0x724f, 0xc668, 0x724c, 0xc663, + 0x7249, 0xc65d, 0x7247, 0xc658, 0x7244, 0xc652, 0x7241, 0xc64c, + 0x723e, 0xc647, 0x723b, 0xc641, 0x7238, 0xc63c, 0x7236, 0xc636, + 0x7233, 0xc630, 0x7230, 0xc62b, 0x722d, 0xc625, 0x722a, 0xc620, + 0x7227, 0xc61a, 0x7224, 0xc614, 0x7222, 0xc60f, 0x721f, 0xc609, + 0x721c, 0xc603, 0x7219, 0xc5fe, 0x7216, 0xc5f8, 0x7213, 0xc5f3, + 0x7211, 0xc5ed, 0x720e, 0xc5e7, 0x720b, 0xc5e2, 0x7208, 0xc5dc, + 0x7205, 0xc5d7, 0x7202, 0xc5d1, 0x71ff, 0xc5cc, 0x71fd, 0xc5c6, + 0x71fa, 0xc5c0, 0x71f7, 0xc5bb, 0x71f4, 0xc5b5, 0x71f1, 0xc5b0, + 0x71ee, 0xc5aa, 0x71eb, 0xc5a4, 0x71e9, 0xc59f, 0x71e6, 0xc599, + 0x71e3, 0xc594, 0x71e0, 0xc58e, 0x71dd, 0xc588, 0x71da, 0xc583, + 0x71d7, 0xc57d, 0x71d4, 0xc578, 0x71d2, 0xc572, 0x71cf, 0xc56c, + 0x71cc, 0xc567, 0x71c9, 0xc561, 0x71c6, 0xc55c, 0x71c3, 0xc556, + 0x71c0, 0xc551, 0x71bd, 0xc54b, 0x71bb, 0xc545, 0x71b8, 0xc540, + 0x71b5, 0xc53a, 0x71b2, 0xc535, 0x71af, 0xc52f, 0x71ac, 0xc529, + 0x71a9, 0xc524, 0x71a6, 0xc51e, 0x71a3, 0xc519, 0x71a1, 0xc513, + 0x719e, 0xc50e, 0x719b, 0xc508, 0x7198, 0xc502, 0x7195, 0xc4fd, + 0x7192, 0xc4f7, 0x718f, 0xc4f2, 0x718c, 0xc4ec, 0x7189, 0xc4e7, + 0x7186, 0xc4e1, 0x7184, 0xc4db, 0x7181, 0xc4d6, 0x717e, 0xc4d0, + 0x717b, 0xc4cb, 0x7178, 0xc4c5, 0x7175, 0xc4c0, 0x7172, 0xc4ba, + 0x716f, 0xc4b4, 0x716c, 0xc4af, 0x7169, 0xc4a9, 0x7167, 0xc4a4, + 0x7164, 0xc49e, 0x7161, 0xc499, 0x715e, 0xc493, 0x715b, 0xc48d, + 0x7158, 0xc488, 0x7155, 0xc482, 0x7152, 0xc47d, 0x714f, 0xc477, + 0x714c, 0xc472, 0x7149, 0xc46c, 0x7146, 0xc467, 0x7143, 0xc461, + 0x7141, 0xc45b, 0x713e, 0xc456, 0x713b, 0xc450, 0x7138, 0xc44b, + 0x7135, 0xc445, 0x7132, 0xc440, 0x712f, 0xc43a, 0x712c, 0xc434, + 0x7129, 0xc42f, 0x7126, 0xc429, 0x7123, 0xc424, 0x7120, 0xc41e, + 0x711d, 0xc419, 0x711a, 0xc413, 0x7117, 0xc40e, 0x7114, 0xc408, + 0x7112, 0xc403, 0x710f, 0xc3fd, 0x710c, 0xc3f7, 0x7109, 0xc3f2, + 0x7106, 0xc3ec, 0x7103, 0xc3e7, 0x7100, 0xc3e1, 0x70fd, 0xc3dc, + 0x70fa, 0xc3d6, 0x70f7, 0xc3d1, 0x70f4, 0xc3cb, 0x70f1, 0xc3c5, + 0x70ee, 0xc3c0, 0x70eb, 0xc3ba, 0x70e8, 0xc3b5, 0x70e5, 0xc3af, + 0x70e2, 0xc3aa, 0x70df, 0xc3a4, 0x70dc, 0xc39f, 0x70d9, 0xc399, + 0x70d6, 0xc394, 0x70d3, 0xc38e, 0x70d1, 0xc389, 0x70ce, 0xc383, + 0x70cb, 0xc37d, 0x70c8, 0xc378, 0x70c5, 0xc372, 0x70c2, 0xc36d, + 0x70bf, 0xc367, 0x70bc, 0xc362, 0x70b9, 0xc35c, 0x70b6, 0xc357, + 0x70b3, 0xc351, 0x70b0, 0xc34c, 0x70ad, 0xc346, 0x70aa, 0xc341, + 0x70a7, 0xc33b, 0x70a4, 0xc336, 0x70a1, 0xc330, 0x709e, 0xc32a, + 0x709b, 0xc325, 0x7098, 0xc31f, 0x7095, 0xc31a, 0x7092, 0xc314, + 0x708f, 0xc30f, 0x708c, 0xc309, 0x7089, 0xc304, 0x7086, 0xc2fe, + 0x7083, 0xc2f9, 0x7080, 0xc2f3, 0x707d, 0xc2ee, 0x707a, 0xc2e8, + 0x7077, 0xc2e3, 0x7074, 0xc2dd, 0x7071, 0xc2d8, 0x706e, 0xc2d2, + 0x706b, 0xc2cd, 0x7068, 0xc2c7, 0x7065, 0xc2c2, 0x7062, 0xc2bc, + 0x705f, 0xc2b7, 0x705c, 0xc2b1, 0x7059, 0xc2ab, 0x7056, 0xc2a6, + 0x7053, 0xc2a0, 0x7050, 0xc29b, 0x704d, 0xc295, 0x704a, 0xc290, + 0x7047, 0xc28a, 0x7044, 0xc285, 0x7041, 0xc27f, 0x703e, 0xc27a, + 0x703b, 0xc274, 0x7038, 0xc26f, 0x7035, 0xc269, 0x7032, 0xc264, + 0x702f, 0xc25e, 0x702c, 0xc259, 0x7029, 0xc253, 0x7026, 0xc24e, + 0x7023, 0xc248, 0x7020, 0xc243, 0x701d, 0xc23d, 0x7019, 0xc238, + 0x7016, 0xc232, 0x7013, 0xc22d, 0x7010, 0xc227, 0x700d, 0xc222, + 0x700a, 0xc21c, 0x7007, 0xc217, 0x7004, 0xc211, 0x7001, 0xc20c, + 0x6ffe, 0xc206, 0x6ffb, 0xc201, 0x6ff8, 0xc1fb, 0x6ff5, 0xc1f6, + 0x6ff2, 0xc1f0, 0x6fef, 0xc1eb, 0x6fec, 0xc1e5, 0x6fe9, 0xc1e0, + 0x6fe6, 0xc1da, 0x6fe3, 0xc1d5, 0x6fe0, 0xc1cf, 0x6fdd, 0xc1ca, + 0x6fda, 0xc1c4, 0x6fd6, 0xc1bf, 0x6fd3, 0xc1b9, 0x6fd0, 0xc1b4, + 0x6fcd, 0xc1ae, 0x6fca, 0xc1a9, 0x6fc7, 0xc1a3, 0x6fc4, 0xc19e, + 0x6fc1, 0xc198, 0x6fbe, 0xc193, 0x6fbb, 0xc18d, 0x6fb8, 0xc188, + 0x6fb5, 0xc183, 0x6fb2, 0xc17d, 0x6faf, 0xc178, 0x6fac, 0xc172, + 0x6fa9, 0xc16d, 0x6fa5, 0xc167, 0x6fa2, 0xc162, 0x6f9f, 0xc15c, + 0x6f9c, 0xc157, 0x6f99, 0xc151, 0x6f96, 0xc14c, 0x6f93, 0xc146, + 0x6f90, 0xc141, 0x6f8d, 0xc13b, 0x6f8a, 0xc136, 0x6f87, 0xc130, + 0x6f84, 0xc12b, 0x6f81, 0xc125, 0x6f7d, 0xc120, 0x6f7a, 0xc11a, + 0x6f77, 0xc115, 0x6f74, 0xc10f, 0x6f71, 0xc10a, 0x6f6e, 0xc105, + 0x6f6b, 0xc0ff, 0x6f68, 0xc0fa, 0x6f65, 0xc0f4, 0x6f62, 0xc0ef, + 0x6f5f, 0xc0e9, 0x6f5b, 0xc0e4, 0x6f58, 0xc0de, 0x6f55, 0xc0d9, + 0x6f52, 0xc0d3, 0x6f4f, 0xc0ce, 0x6f4c, 0xc0c8, 0x6f49, 0xc0c3, + 0x6f46, 0xc0bd, 0x6f43, 0xc0b8, 0x6f3f, 0xc0b3, 0x6f3c, 0xc0ad, + 0x6f39, 0xc0a8, 0x6f36, 0xc0a2, 0x6f33, 0xc09d, 0x6f30, 0xc097, + 0x6f2d, 0xc092, 0x6f2a, 0xc08c, 0x6f27, 0xc087, 0x6f23, 0xc081, + 0x6f20, 0xc07c, 0x6f1d, 0xc077, 0x6f1a, 0xc071, 0x6f17, 0xc06c, + 0x6f14, 0xc066, 0x6f11, 0xc061, 0x6f0e, 0xc05b, 0x6f0b, 0xc056, + 0x6f07, 0xc050, 0x6f04, 0xc04b, 0x6f01, 0xc045, 0x6efe, 0xc040, + 0x6efb, 0xc03b, 0x6ef8, 0xc035, 0x6ef5, 0xc030, 0x6ef1, 0xc02a, + 0x6eee, 0xc025, 0x6eeb, 0xc01f, 0x6ee8, 0xc01a, 0x6ee5, 0xc014, + 0x6ee2, 0xc00f, 0x6edf, 0xc00a, 0x6edc, 0xc004, 0x6ed8, 0xbfff, + 0x6ed5, 0xbff9, 0x6ed2, 0xbff4, 0x6ecf, 0xbfee, 0x6ecc, 0xbfe9, + 0x6ec9, 0xbfe3, 0x6ec6, 0xbfde, 0x6ec2, 0xbfd9, 0x6ebf, 0xbfd3, + 0x6ebc, 0xbfce, 0x6eb9, 0xbfc8, 0x6eb6, 0xbfc3, 0x6eb3, 0xbfbd, + 0x6eaf, 0xbfb8, 0x6eac, 0xbfb3, 0x6ea9, 0xbfad, 0x6ea6, 0xbfa8, + 0x6ea3, 0xbfa2, 0x6ea0, 0xbf9d, 0x6e9c, 0xbf97, 0x6e99, 0xbf92, + 0x6e96, 0xbf8d, 0x6e93, 0xbf87, 0x6e90, 0xbf82, 0x6e8d, 0xbf7c, + 0x6e89, 0xbf77, 0x6e86, 0xbf71, 0x6e83, 0xbf6c, 0x6e80, 0xbf67, + 0x6e7d, 0xbf61, 0x6e7a, 0xbf5c, 0x6e76, 0xbf56, 0x6e73, 0xbf51, + 0x6e70, 0xbf4b, 0x6e6d, 0xbf46, 0x6e6a, 0xbf41, 0x6e67, 0xbf3b, + 0x6e63, 0xbf36, 0x6e60, 0xbf30, 0x6e5d, 0xbf2b, 0x6e5a, 0xbf26, + 0x6e57, 0xbf20, 0x6e53, 0xbf1b, 0x6e50, 0xbf15, 0x6e4d, 0xbf10, + 0x6e4a, 0xbf0a, 0x6e47, 0xbf05, 0x6e44, 0xbf00, 0x6e40, 0xbefa, + 0x6e3d, 0xbef5, 0x6e3a, 0xbeef, 0x6e37, 0xbeea, 0x6e34, 0xbee5, + 0x6e30, 0xbedf, 0x6e2d, 0xbeda, 0x6e2a, 0xbed4, 0x6e27, 0xbecf, + 0x6e24, 0xbeca, 0x6e20, 0xbec4, 0x6e1d, 0xbebf, 0x6e1a, 0xbeb9, + 0x6e17, 0xbeb4, 0x6e14, 0xbeae, 0x6e10, 0xbea9, 0x6e0d, 0xbea4, + 0x6e0a, 0xbe9e, 0x6e07, 0xbe99, 0x6e04, 0xbe93, 0x6e00, 0xbe8e, + 0x6dfd, 0xbe89, 0x6dfa, 0xbe83, 0x6df7, 0xbe7e, 0x6df3, 0xbe78, + 0x6df0, 0xbe73, 0x6ded, 0xbe6e, 0x6dea, 0xbe68, 0x6de7, 0xbe63, + 0x6de3, 0xbe5e, 0x6de0, 0xbe58, 0x6ddd, 0xbe53, 0x6dda, 0xbe4d, + 0x6dd6, 0xbe48, 0x6dd3, 0xbe43, 0x6dd0, 0xbe3d, 0x6dcd, 0xbe38, + 0x6dca, 0xbe32, 0x6dc6, 0xbe2d, 0x6dc3, 0xbe28, 0x6dc0, 0xbe22, + 0x6dbd, 0xbe1d, 0x6db9, 0xbe17, 0x6db6, 0xbe12, 0x6db3, 0xbe0d, + 0x6db0, 0xbe07, 0x6dac, 0xbe02, 0x6da9, 0xbdfd, 0x6da6, 0xbdf7, + 0x6da3, 0xbdf2, 0x6d9f, 0xbdec, 0x6d9c, 0xbde7, 0x6d99, 0xbde2, + 0x6d96, 0xbddc, 0x6d92, 0xbdd7, 0x6d8f, 0xbdd1, 0x6d8c, 0xbdcc, + 0x6d89, 0xbdc7, 0x6d85, 0xbdc1, 0x6d82, 0xbdbc, 0x6d7f, 0xbdb7, + 0x6d7c, 0xbdb1, 0x6d78, 0xbdac, 0x6d75, 0xbda6, 0x6d72, 0xbda1, + 0x6d6f, 0xbd9c, 0x6d6b, 0xbd96, 0x6d68, 0xbd91, 0x6d65, 0xbd8c, + 0x6d62, 0xbd86, 0x6d5e, 0xbd81, 0x6d5b, 0xbd7c, 0x6d58, 0xbd76, + 0x6d55, 0xbd71, 0x6d51, 0xbd6b, 0x6d4e, 0xbd66, 0x6d4b, 0xbd61, + 0x6d48, 0xbd5b, 0x6d44, 0xbd56, 0x6d41, 0xbd51, 0x6d3e, 0xbd4b, + 0x6d3a, 0xbd46, 0x6d37, 0xbd40, 0x6d34, 0xbd3b, 0x6d31, 0xbd36, + 0x6d2d, 0xbd30, 0x6d2a, 0xbd2b, 0x6d27, 0xbd26, 0x6d23, 0xbd20, + 0x6d20, 0xbd1b, 0x6d1d, 0xbd16, 0x6d1a, 0xbd10, 0x6d16, 0xbd0b, + 0x6d13, 0xbd06, 0x6d10, 0xbd00, 0x6d0c, 0xbcfb, 0x6d09, 0xbcf5, + 0x6d06, 0xbcf0, 0x6d03, 0xbceb, 0x6cff, 0xbce5, 0x6cfc, 0xbce0, + 0x6cf9, 0xbcdb, 0x6cf5, 0xbcd5, 0x6cf2, 0xbcd0, 0x6cef, 0xbccb, + 0x6cec, 0xbcc5, 0x6ce8, 0xbcc0, 0x6ce5, 0xbcbb, 0x6ce2, 0xbcb5, + 0x6cde, 0xbcb0, 0x6cdb, 0xbcab, 0x6cd8, 0xbca5, 0x6cd4, 0xbca0, + 0x6cd1, 0xbc9b, 0x6cce, 0xbc95, 0x6cca, 0xbc90, 0x6cc7, 0xbc8b, + 0x6cc4, 0xbc85, 0x6cc1, 0xbc80, 0x6cbd, 0xbc7b, 0x6cba, 0xbc75, + 0x6cb7, 0xbc70, 0x6cb3, 0xbc6b, 0x6cb0, 0xbc65, 0x6cad, 0xbc60, + 0x6ca9, 0xbc5b, 0x6ca6, 0xbc55, 0x6ca3, 0xbc50, 0x6c9f, 0xbc4b, + 0x6c9c, 0xbc45, 0x6c99, 0xbc40, 0x6c95, 0xbc3b, 0x6c92, 0xbc35, + 0x6c8f, 0xbc30, 0x6c8b, 0xbc2b, 0x6c88, 0xbc25, 0x6c85, 0xbc20, + 0x6c81, 0xbc1b, 0x6c7e, 0xbc15, 0x6c7b, 0xbc10, 0x6c77, 0xbc0b, + 0x6c74, 0xbc05, 0x6c71, 0xbc00, 0x6c6d, 0xbbfb, 0x6c6a, 0xbbf5, + 0x6c67, 0xbbf0, 0x6c63, 0xbbeb, 0x6c60, 0xbbe5, 0x6c5d, 0xbbe0, + 0x6c59, 0xbbdb, 0x6c56, 0xbbd5, 0x6c53, 0xbbd0, 0x6c4f, 0xbbcb, + 0x6c4c, 0xbbc5, 0x6c49, 0xbbc0, 0x6c45, 0xbbbb, 0x6c42, 0xbbb5, + 0x6c3f, 0xbbb0, 0x6c3b, 0xbbab, 0x6c38, 0xbba6, 0x6c34, 0xbba0, + 0x6c31, 0xbb9b, 0x6c2e, 0xbb96, 0x6c2a, 0xbb90, 0x6c27, 0xbb8b, + 0x6c24, 0xbb86, 0x6c20, 0xbb80, 0x6c1d, 0xbb7b, 0x6c1a, 0xbb76, + 0x6c16, 0xbb70, 0x6c13, 0xbb6b, 0x6c0f, 0xbb66, 0x6c0c, 0xbb61, + 0x6c09, 0xbb5b, 0x6c05, 0xbb56, 0x6c02, 0xbb51, 0x6bff, 0xbb4b, + 0x6bfb, 0xbb46, 0x6bf8, 0xbb41, 0x6bf5, 0xbb3b, 0x6bf1, 0xbb36, + 0x6bee, 0xbb31, 0x6bea, 0xbb2c, 0x6be7, 0xbb26, 0x6be4, 0xbb21, + 0x6be0, 0xbb1c, 0x6bdd, 0xbb16, 0x6bd9, 0xbb11, 0x6bd6, 0xbb0c, + 0x6bd3, 0xbb06, 0x6bcf, 0xbb01, 0x6bcc, 0xbafc, 0x6bc9, 0xbaf7, + 0x6bc5, 0xbaf1, 0x6bc2, 0xbaec, 0x6bbe, 0xbae7, 0x6bbb, 0xbae1, + 0x6bb8, 0xbadc, 0x6bb4, 0xbad7, 0x6bb1, 0xbad2, 0x6bad, 0xbacc, + 0x6baa, 0xbac7, 0x6ba7, 0xbac2, 0x6ba3, 0xbabc, 0x6ba0, 0xbab7, + 0x6b9c, 0xbab2, 0x6b99, 0xbaad, 0x6b96, 0xbaa7, 0x6b92, 0xbaa2, + 0x6b8f, 0xba9d, 0x6b8b, 0xba97, 0x6b88, 0xba92, 0x6b85, 0xba8d, + 0x6b81, 0xba88, 0x6b7e, 0xba82, 0x6b7a, 0xba7d, 0x6b77, 0xba78, + 0x6b73, 0xba73, 0x6b70, 0xba6d, 0x6b6d, 0xba68, 0x6b69, 0xba63, + 0x6b66, 0xba5d, 0x6b62, 0xba58, 0x6b5f, 0xba53, 0x6b5c, 0xba4e, + 0x6b58, 0xba48, 0x6b55, 0xba43, 0x6b51, 0xba3e, 0x6b4e, 0xba39, + 0x6b4a, 0xba33, 0x6b47, 0xba2e, 0x6b44, 0xba29, 0x6b40, 0xba23, + 0x6b3d, 0xba1e, 0x6b39, 0xba19, 0x6b36, 0xba14, 0x6b32, 0xba0e, + 0x6b2f, 0xba09, 0x6b2c, 0xba04, 0x6b28, 0xb9ff, 0x6b25, 0xb9f9, + 0x6b21, 0xb9f4, 0x6b1e, 0xb9ef, 0x6b1a, 0xb9ea, 0x6b17, 0xb9e4, + 0x6b13, 0xb9df, 0x6b10, 0xb9da, 0x6b0d, 0xb9d5, 0x6b09, 0xb9cf, + 0x6b06, 0xb9ca, 0x6b02, 0xb9c5, 0x6aff, 0xb9c0, 0x6afb, 0xb9ba, + 0x6af8, 0xb9b5, 0x6af4, 0xb9b0, 0x6af1, 0xb9ab, 0x6aee, 0xb9a5, + 0x6aea, 0xb9a0, 0x6ae7, 0xb99b, 0x6ae3, 0xb996, 0x6ae0, 0xb990, + 0x6adc, 0xb98b, 0x6ad9, 0xb986, 0x6ad5, 0xb981, 0x6ad2, 0xb97b, + 0x6ace, 0xb976, 0x6acb, 0xb971, 0x6ac8, 0xb96c, 0x6ac4, 0xb966, + 0x6ac1, 0xb961, 0x6abd, 0xb95c, 0x6aba, 0xb957, 0x6ab6, 0xb951, + 0x6ab3, 0xb94c, 0x6aaf, 0xb947, 0x6aac, 0xb942, 0x6aa8, 0xb93c, + 0x6aa5, 0xb937, 0x6aa1, 0xb932, 0x6a9e, 0xb92d, 0x6a9a, 0xb928, + 0x6a97, 0xb922, 0x6a93, 0xb91d, 0x6a90, 0xb918, 0x6a8c, 0xb913, + 0x6a89, 0xb90d, 0x6a86, 0xb908, 0x6a82, 0xb903, 0x6a7f, 0xb8fe, + 0x6a7b, 0xb8f8, 0x6a78, 0xb8f3, 0x6a74, 0xb8ee, 0x6a71, 0xb8e9, + 0x6a6d, 0xb8e4, 0x6a6a, 0xb8de, 0x6a66, 0xb8d9, 0x6a63, 0xb8d4, + 0x6a5f, 0xb8cf, 0x6a5c, 0xb8c9, 0x6a58, 0xb8c4, 0x6a55, 0xb8bf, + 0x6a51, 0xb8ba, 0x6a4e, 0xb8b5, 0x6a4a, 0xb8af, 0x6a47, 0xb8aa, + 0x6a43, 0xb8a5, 0x6a40, 0xb8a0, 0x6a3c, 0xb89b, 0x6a39, 0xb895, + 0x6a35, 0xb890, 0x6a32, 0xb88b, 0x6a2e, 0xb886, 0x6a2b, 0xb880, + 0x6a27, 0xb87b, 0x6a24, 0xb876, 0x6a20, 0xb871, 0x6a1d, 0xb86c, + 0x6a19, 0xb866, 0x6a16, 0xb861, 0x6a12, 0xb85c, 0x6a0e, 0xb857, + 0x6a0b, 0xb852, 0x6a07, 0xb84c, 0x6a04, 0xb847, 0x6a00, 0xb842, + 0x69fd, 0xb83d, 0x69f9, 0xb838, 0x69f6, 0xb832, 0x69f2, 0xb82d, + 0x69ef, 0xb828, 0x69eb, 0xb823, 0x69e8, 0xb81e, 0x69e4, 0xb818, + 0x69e1, 0xb813, 0x69dd, 0xb80e, 0x69da, 0xb809, 0x69d6, 0xb804, + 0x69d3, 0xb7fe, 0x69cf, 0xb7f9, 0x69cb, 0xb7f4, 0x69c8, 0xb7ef, + 0x69c4, 0xb7ea, 0x69c1, 0xb7e4, 0x69bd, 0xb7df, 0x69ba, 0xb7da, + 0x69b6, 0xb7d5, 0x69b3, 0xb7d0, 0x69af, 0xb7ca, 0x69ac, 0xb7c5, + 0x69a8, 0xb7c0, 0x69a5, 0xb7bb, 0x69a1, 0xb7b6, 0x699d, 0xb7b1, + 0x699a, 0xb7ab, 0x6996, 0xb7a6, 0x6993, 0xb7a1, 0x698f, 0xb79c, + 0x698c, 0xb797, 0x6988, 0xb791, 0x6985, 0xb78c, 0x6981, 0xb787, + 0x697d, 0xb782, 0x697a, 0xb77d, 0x6976, 0xb778, 0x6973, 0xb772, + 0x696f, 0xb76d, 0x696c, 0xb768, 0x6968, 0xb763, 0x6964, 0xb75e, + 0x6961, 0xb758, 0x695d, 0xb753, 0x695a, 0xb74e, 0x6956, 0xb749, + 0x6953, 0xb744, 0x694f, 0xb73f, 0x694b, 0xb739, 0x6948, 0xb734, + 0x6944, 0xb72f, 0x6941, 0xb72a, 0x693d, 0xb725, 0x693a, 0xb720, + 0x6936, 0xb71a, 0x6932, 0xb715, 0x692f, 0xb710, 0x692b, 0xb70b, + 0x6928, 0xb706, 0x6924, 0xb701, 0x6921, 0xb6fb, 0x691d, 0xb6f6, + 0x6919, 0xb6f1, 0x6916, 0xb6ec, 0x6912, 0xb6e7, 0x690f, 0xb6e2, + 0x690b, 0xb6dd, 0x6907, 0xb6d7, 0x6904, 0xb6d2, 0x6900, 0xb6cd, + 0x68fd, 0xb6c8, 0x68f9, 0xb6c3, 0x68f5, 0xb6be, 0x68f2, 0xb6b8, + 0x68ee, 0xb6b3, 0x68eb, 0xb6ae, 0x68e7, 0xb6a9, 0x68e3, 0xb6a4, + 0x68e0, 0xb69f, 0x68dc, 0xb69a, 0x68d9, 0xb694, 0x68d5, 0xb68f, + 0x68d1, 0xb68a, 0x68ce, 0xb685, 0x68ca, 0xb680, 0x68c7, 0xb67b, + 0x68c3, 0xb676, 0x68bf, 0xb670, 0x68bc, 0xb66b, 0x68b8, 0xb666, + 0x68b5, 0xb661, 0x68b1, 0xb65c, 0x68ad, 0xb657, 0x68aa, 0xb652, + 0x68a6, 0xb64c, 0x68a3, 0xb647, 0x689f, 0xb642, 0x689b, 0xb63d, + 0x6898, 0xb638, 0x6894, 0xb633, 0x6890, 0xb62e, 0x688d, 0xb628, + 0x6889, 0xb623, 0x6886, 0xb61e, 0x6882, 0xb619, 0x687e, 0xb614, + 0x687b, 0xb60f, 0x6877, 0xb60a, 0x6873, 0xb605, 0x6870, 0xb5ff, + 0x686c, 0xb5fa, 0x6868, 0xb5f5, 0x6865, 0xb5f0, 0x6861, 0xb5eb, + 0x685e, 0xb5e6, 0x685a, 0xb5e1, 0x6856, 0xb5dc, 0x6853, 0xb5d6, + 0x684f, 0xb5d1, 0x684b, 0xb5cc, 0x6848, 0xb5c7, 0x6844, 0xb5c2, + 0x6840, 0xb5bd, 0x683d, 0xb5b8, 0x6839, 0xb5b3, 0x6835, 0xb5ae, + 0x6832, 0xb5a8, 0x682e, 0xb5a3, 0x682b, 0xb59e, 0x6827, 0xb599, + 0x6823, 0xb594, 0x6820, 0xb58f, 0x681c, 0xb58a, 0x6818, 0xb585, + 0x6815, 0xb57f, 0x6811, 0xb57a, 0x680d, 0xb575, 0x680a, 0xb570, + 0x6806, 0xb56b, 0x6802, 0xb566, 0x67ff, 0xb561, 0x67fb, 0xb55c, + 0x67f7, 0xb557, 0x67f4, 0xb552, 0x67f0, 0xb54c, 0x67ec, 0xb547, + 0x67e9, 0xb542, 0x67e5, 0xb53d, 0x67e1, 0xb538, 0x67de, 0xb533, + 0x67da, 0xb52e, 0x67d6, 0xb529, 0x67d3, 0xb524, 0x67cf, 0xb51f, + 0x67cb, 0xb519, 0x67c8, 0xb514, 0x67c4, 0xb50f, 0x67c0, 0xb50a, + 0x67bd, 0xb505, 0x67b9, 0xb500, 0x67b5, 0xb4fb, 0x67b2, 0xb4f6, + 0x67ae, 0xb4f1, 0x67aa, 0xb4ec, 0x67a6, 0xb4e7, 0x67a3, 0xb4e1, + 0x679f, 0xb4dc, 0x679b, 0xb4d7, 0x6798, 0xb4d2, 0x6794, 0xb4cd, + 0x6790, 0xb4c8, 0x678d, 0xb4c3, 0x6789, 0xb4be, 0x6785, 0xb4b9, + 0x6782, 0xb4b4, 0x677e, 0xb4af, 0x677a, 0xb4aa, 0x6776, 0xb4a4, + 0x6773, 0xb49f, 0x676f, 0xb49a, 0x676b, 0xb495, 0x6768, 0xb490, + 0x6764, 0xb48b, 0x6760, 0xb486, 0x675d, 0xb481, 0x6759, 0xb47c, + 0x6755, 0xb477, 0x6751, 0xb472, 0x674e, 0xb46d, 0x674a, 0xb468, + 0x6746, 0xb462, 0x6743, 0xb45d, 0x673f, 0xb458, 0x673b, 0xb453, + 0x6737, 0xb44e, 0x6734, 0xb449, 0x6730, 0xb444, 0x672c, 0xb43f, + 0x6729, 0xb43a, 0x6725, 0xb435, 0x6721, 0xb430, 0x671d, 0xb42b, + 0x671a, 0xb426, 0x6716, 0xb421, 0x6712, 0xb41c, 0x670e, 0xb417, + 0x670b, 0xb411, 0x6707, 0xb40c, 0x6703, 0xb407, 0x6700, 0xb402, + 0x66fc, 0xb3fd, 0x66f8, 0xb3f8, 0x66f4, 0xb3f3, 0x66f1, 0xb3ee, + 0x66ed, 0xb3e9, 0x66e9, 0xb3e4, 0x66e5, 0xb3df, 0x66e2, 0xb3da, + 0x66de, 0xb3d5, 0x66da, 0xb3d0, 0x66d6, 0xb3cb, 0x66d3, 0xb3c6, + 0x66cf, 0xb3c1, 0x66cb, 0xb3bc, 0x66c8, 0xb3b7, 0x66c4, 0xb3b1, + 0x66c0, 0xb3ac, 0x66bc, 0xb3a7, 0x66b9, 0xb3a2, 0x66b5, 0xb39d, + 0x66b1, 0xb398, 0x66ad, 0xb393, 0x66aa, 0xb38e, 0x66a6, 0xb389, + 0x66a2, 0xb384, 0x669e, 0xb37f, 0x669b, 0xb37a, 0x6697, 0xb375, + 0x6693, 0xb370, 0x668f, 0xb36b, 0x668b, 0xb366, 0x6688, 0xb361, + 0x6684, 0xb35c, 0x6680, 0xb357, 0x667c, 0xb352, 0x6679, 0xb34d, + 0x6675, 0xb348, 0x6671, 0xb343, 0x666d, 0xb33e, 0x666a, 0xb339, + 0x6666, 0xb334, 0x6662, 0xb32f, 0x665e, 0xb32a, 0x665b, 0xb325, + 0x6657, 0xb31f, 0x6653, 0xb31a, 0x664f, 0xb315, 0x664b, 0xb310, + 0x6648, 0xb30b, 0x6644, 0xb306, 0x6640, 0xb301, 0x663c, 0xb2fc, + 0x6639, 0xb2f7, 0x6635, 0xb2f2, 0x6631, 0xb2ed, 0x662d, 0xb2e8, + 0x6629, 0xb2e3, 0x6626, 0xb2de, 0x6622, 0xb2d9, 0x661e, 0xb2d4, + 0x661a, 0xb2cf, 0x6616, 0xb2ca, 0x6613, 0xb2c5, 0x660f, 0xb2c0, + 0x660b, 0xb2bb, 0x6607, 0xb2b6, 0x6603, 0xb2b1, 0x6600, 0xb2ac, + 0x65fc, 0xb2a7, 0x65f8, 0xb2a2, 0x65f4, 0xb29d, 0x65f0, 0xb298, + 0x65ed, 0xb293, 0x65e9, 0xb28e, 0x65e5, 0xb289, 0x65e1, 0xb284, + 0x65dd, 0xb27f, 0x65da, 0xb27a, 0x65d6, 0xb275, 0x65d2, 0xb270, + 0x65ce, 0xb26b, 0x65ca, 0xb266, 0x65c7, 0xb261, 0x65c3, 0xb25c, + 0x65bf, 0xb257, 0x65bb, 0xb252, 0x65b7, 0xb24d, 0x65b4, 0xb248, + 0x65b0, 0xb243, 0x65ac, 0xb23e, 0x65a8, 0xb239, 0x65a4, 0xb234, + 0x65a0, 0xb22f, 0x659d, 0xb22a, 0x6599, 0xb225, 0x6595, 0xb220, + 0x6591, 0xb21b, 0x658d, 0xb216, 0x658a, 0xb211, 0x6586, 0xb20c, + 0x6582, 0xb207, 0x657e, 0xb202, 0x657a, 0xb1fd, 0x6576, 0xb1f8, + 0x6573, 0xb1f3, 0x656f, 0xb1ee, 0x656b, 0xb1e9, 0x6567, 0xb1e4, + 0x6563, 0xb1df, 0x655f, 0xb1da, 0x655c, 0xb1d6, 0x6558, 0xb1d1, + 0x6554, 0xb1cc, 0x6550, 0xb1c7, 0x654c, 0xb1c2, 0x6548, 0xb1bd, + 0x6545, 0xb1b8, 0x6541, 0xb1b3, 0x653d, 0xb1ae, 0x6539, 0xb1a9, + 0x6535, 0xb1a4, 0x6531, 0xb19f, 0x652d, 0xb19a, 0x652a, 0xb195, + 0x6526, 0xb190, 0x6522, 0xb18b, 0x651e, 0xb186, 0x651a, 0xb181, + 0x6516, 0xb17c, 0x6513, 0xb177, 0x650f, 0xb172, 0x650b, 0xb16d, + 0x6507, 0xb168, 0x6503, 0xb163, 0x64ff, 0xb15e, 0x64fb, 0xb159, + 0x64f7, 0xb154, 0x64f4, 0xb14f, 0x64f0, 0xb14a, 0x64ec, 0xb146, + 0x64e8, 0xb141, 0x64e4, 0xb13c, 0x64e0, 0xb137, 0x64dc, 0xb132, + 0x64d9, 0xb12d, 0x64d5, 0xb128, 0x64d1, 0xb123, 0x64cd, 0xb11e, + 0x64c9, 0xb119, 0x64c5, 0xb114, 0x64c1, 0xb10f, 0x64bd, 0xb10a, + 0x64ba, 0xb105, 0x64b6, 0xb100, 0x64b2, 0xb0fb, 0x64ae, 0xb0f6, + 0x64aa, 0xb0f1, 0x64a6, 0xb0ec, 0x64a2, 0xb0e8, 0x649e, 0xb0e3, + 0x649b, 0xb0de, 0x6497, 0xb0d9, 0x6493, 0xb0d4, 0x648f, 0xb0cf, + 0x648b, 0xb0ca, 0x6487, 0xb0c5, 0x6483, 0xb0c0, 0x647f, 0xb0bb, + 0x647b, 0xb0b6, 0x6478, 0xb0b1, 0x6474, 0xb0ac, 0x6470, 0xb0a7, + 0x646c, 0xb0a2, 0x6468, 0xb09e, 0x6464, 0xb099, 0x6460, 0xb094, + 0x645c, 0xb08f, 0x6458, 0xb08a, 0x6454, 0xb085, 0x6451, 0xb080, + 0x644d, 0xb07b, 0x6449, 0xb076, 0x6445, 0xb071, 0x6441, 0xb06c, + 0x643d, 0xb067, 0x6439, 0xb062, 0x6435, 0xb05e, 0x6431, 0xb059, + 0x642d, 0xb054, 0x6429, 0xb04f, 0x6426, 0xb04a, 0x6422, 0xb045, + 0x641e, 0xb040, 0x641a, 0xb03b, 0x6416, 0xb036, 0x6412, 0xb031, + 0x640e, 0xb02c, 0x640a, 0xb027, 0x6406, 0xb023, 0x6402, 0xb01e, + 0x63fe, 0xb019, 0x63fa, 0xb014, 0x63f7, 0xb00f, 0x63f3, 0xb00a, + 0x63ef, 0xb005, 0x63eb, 0xb000, 0x63e7, 0xaffb, 0x63e3, 0xaff6, + 0x63df, 0xaff1, 0x63db, 0xafed, 0x63d7, 0xafe8, 0x63d3, 0xafe3, + 0x63cf, 0xafde, 0x63cb, 0xafd9, 0x63c7, 0xafd4, 0x63c3, 0xafcf, + 0x63c0, 0xafca, 0x63bc, 0xafc5, 0x63b8, 0xafc1, 0x63b4, 0xafbc, + 0x63b0, 0xafb7, 0x63ac, 0xafb2, 0x63a8, 0xafad, 0x63a4, 0xafa8, + 0x63a0, 0xafa3, 0x639c, 0xaf9e, 0x6398, 0xaf99, 0x6394, 0xaf94, + 0x6390, 0xaf90, 0x638c, 0xaf8b, 0x6388, 0xaf86, 0x6384, 0xaf81, + 0x6380, 0xaf7c, 0x637c, 0xaf77, 0x6378, 0xaf72, 0x6375, 0xaf6d, + 0x6371, 0xaf69, 0x636d, 0xaf64, 0x6369, 0xaf5f, 0x6365, 0xaf5a, + 0x6361, 0xaf55, 0x635d, 0xaf50, 0x6359, 0xaf4b, 0x6355, 0xaf46, + 0x6351, 0xaf41, 0x634d, 0xaf3d, 0x6349, 0xaf38, 0x6345, 0xaf33, + 0x6341, 0xaf2e, 0x633d, 0xaf29, 0x6339, 0xaf24, 0x6335, 0xaf1f, + 0x6331, 0xaf1b, 0x632d, 0xaf16, 0x6329, 0xaf11, 0x6325, 0xaf0c, + 0x6321, 0xaf07, 0x631d, 0xaf02, 0x6319, 0xaefd, 0x6315, 0xaef8, + 0x6311, 0xaef4, 0x630d, 0xaeef, 0x6309, 0xaeea, 0x6305, 0xaee5, + 0x6301, 0xaee0, 0x62fd, 0xaedb, 0x62f9, 0xaed6, 0x62f5, 0xaed2, + 0x62f2, 0xaecd, 0x62ee, 0xaec8, 0x62ea, 0xaec3, 0x62e6, 0xaebe, + 0x62e2, 0xaeb9, 0x62de, 0xaeb4, 0x62da, 0xaeb0, 0x62d6, 0xaeab, + 0x62d2, 0xaea6, 0x62ce, 0xaea1, 0x62ca, 0xae9c, 0x62c6, 0xae97, + 0x62c2, 0xae92, 0x62be, 0xae8e, 0x62ba, 0xae89, 0x62b6, 0xae84, + 0x62b2, 0xae7f, 0x62ae, 0xae7a, 0x62aa, 0xae75, 0x62a6, 0xae71, + 0x62a2, 0xae6c, 0x629e, 0xae67, 0x629a, 0xae62, 0x6296, 0xae5d, + 0x6292, 0xae58, 0x628e, 0xae54, 0x628a, 0xae4f, 0x6286, 0xae4a, + 0x6282, 0xae45, 0x627e, 0xae40, 0x627a, 0xae3b, 0x6275, 0xae37, + 0x6271, 0xae32, 0x626d, 0xae2d, 0x6269, 0xae28, 0x6265, 0xae23, + 0x6261, 0xae1e, 0x625d, 0xae1a, 0x6259, 0xae15, 0x6255, 0xae10, + 0x6251, 0xae0b, 0x624d, 0xae06, 0x6249, 0xae01, 0x6245, 0xadfd, + 0x6241, 0xadf8, 0x623d, 0xadf3, 0x6239, 0xadee, 0x6235, 0xade9, + 0x6231, 0xade4, 0x622d, 0xade0, 0x6229, 0xaddb, 0x6225, 0xadd6, + 0x6221, 0xadd1, 0x621d, 0xadcc, 0x6219, 0xadc8, 0x6215, 0xadc3, + 0x6211, 0xadbe, 0x620d, 0xadb9, 0x6209, 0xadb4, 0x6205, 0xadaf, + 0x6201, 0xadab, 0x61fd, 0xada6, 0x61f9, 0xada1, 0x61f5, 0xad9c, + 0x61f1, 0xad97, 0x61ec, 0xad93, 0x61e8, 0xad8e, 0x61e4, 0xad89, + 0x61e0, 0xad84, 0x61dc, 0xad7f, 0x61d8, 0xad7b, 0x61d4, 0xad76, + 0x61d0, 0xad71, 0x61cc, 0xad6c, 0x61c8, 0xad67, 0x61c4, 0xad63, + 0x61c0, 0xad5e, 0x61bc, 0xad59, 0x61b8, 0xad54, 0x61b4, 0xad4f, + 0x61b0, 0xad4b, 0x61ac, 0xad46, 0x61a8, 0xad41, 0x61a3, 0xad3c, + 0x619f, 0xad37, 0x619b, 0xad33, 0x6197, 0xad2e, 0x6193, 0xad29, + 0x618f, 0xad24, 0x618b, 0xad1f, 0x6187, 0xad1b, 0x6183, 0xad16, + 0x617f, 0xad11, 0x617b, 0xad0c, 0x6177, 0xad08, 0x6173, 0xad03, + 0x616f, 0xacfe, 0x616b, 0xacf9, 0x6166, 0xacf4, 0x6162, 0xacf0, + 0x615e, 0xaceb, 0x615a, 0xace6, 0x6156, 0xace1, 0x6152, 0xacdd, + 0x614e, 0xacd8, 0x614a, 0xacd3, 0x6146, 0xacce, 0x6142, 0xacc9, + 0x613e, 0xacc5, 0x613a, 0xacc0, 0x6135, 0xacbb, 0x6131, 0xacb6, + 0x612d, 0xacb2, 0x6129, 0xacad, 0x6125, 0xaca8, 0x6121, 0xaca3, + 0x611d, 0xac9e, 0x6119, 0xac9a, 0x6115, 0xac95, 0x6111, 0xac90, + 0x610d, 0xac8b, 0x6108, 0xac87, 0x6104, 0xac82, 0x6100, 0xac7d, + 0x60fc, 0xac78, 0x60f8, 0xac74, 0x60f4, 0xac6f, 0x60f0, 0xac6a, + 0x60ec, 0xac65, 0x60e8, 0xac61, 0x60e4, 0xac5c, 0x60df, 0xac57, + 0x60db, 0xac52, 0x60d7, 0xac4e, 0x60d3, 0xac49, 0x60cf, 0xac44, + 0x60cb, 0xac3f, 0x60c7, 0xac3b, 0x60c3, 0xac36, 0x60bf, 0xac31, + 0x60ba, 0xac2c, 0x60b6, 0xac28, 0x60b2, 0xac23, 0x60ae, 0xac1e, + 0x60aa, 0xac19, 0x60a6, 0xac15, 0x60a2, 0xac10, 0x609e, 0xac0b, + 0x6099, 0xac06, 0x6095, 0xac02, 0x6091, 0xabfd, 0x608d, 0xabf8, + 0x6089, 0xabf3, 0x6085, 0xabef, 0x6081, 0xabea, 0x607d, 0xabe5, + 0x6078, 0xabe0, 0x6074, 0xabdc, 0x6070, 0xabd7, 0x606c, 0xabd2, + 0x6068, 0xabcd, 0x6064, 0xabc9, 0x6060, 0xabc4, 0x605c, 0xabbf, + 0x6057, 0xabbb, 0x6053, 0xabb6, 0x604f, 0xabb1, 0x604b, 0xabac, + 0x6047, 0xaba8, 0x6043, 0xaba3, 0x603f, 0xab9e, 0x603a, 0xab99, + 0x6036, 0xab95, 0x6032, 0xab90, 0x602e, 0xab8b, 0x602a, 0xab87, + 0x6026, 0xab82, 0x6022, 0xab7d, 0x601d, 0xab78, 0x6019, 0xab74, + 0x6015, 0xab6f, 0x6011, 0xab6a, 0x600d, 0xab66, 0x6009, 0xab61, + 0x6004, 0xab5c, 0x6000, 0xab57, 0x5ffc, 0xab53, 0x5ff8, 0xab4e, + 0x5ff4, 0xab49, 0x5ff0, 0xab45, 0x5fec, 0xab40, 0x5fe7, 0xab3b, + 0x5fe3, 0xab36, 0x5fdf, 0xab32, 0x5fdb, 0xab2d, 0x5fd7, 0xab28, + 0x5fd3, 0xab24, 0x5fce, 0xab1f, 0x5fca, 0xab1a, 0x5fc6, 0xab16, + 0x5fc2, 0xab11, 0x5fbe, 0xab0c, 0x5fba, 0xab07, 0x5fb5, 0xab03, + 0x5fb1, 0xaafe, 0x5fad, 0xaaf9, 0x5fa9, 0xaaf5, 0x5fa5, 0xaaf0, + 0x5fa0, 0xaaeb, 0x5f9c, 0xaae7, 0x5f98, 0xaae2, 0x5f94, 0xaadd, + 0x5f90, 0xaad8, 0x5f8c, 0xaad4, 0x5f87, 0xaacf, 0x5f83, 0xaaca, + 0x5f7f, 0xaac6, 0x5f7b, 0xaac1, 0x5f77, 0xaabc, 0x5f72, 0xaab8, + 0x5f6e, 0xaab3, 0x5f6a, 0xaaae, 0x5f66, 0xaaaa, 0x5f62, 0xaaa5, + 0x5f5e, 0xaaa0, 0x5f59, 0xaa9c, 0x5f55, 0xaa97, 0x5f51, 0xaa92, + 0x5f4d, 0xaa8e, 0x5f49, 0xaa89, 0x5f44, 0xaa84, 0x5f40, 0xaa7f, + 0x5f3c, 0xaa7b, 0x5f38, 0xaa76, 0x5f34, 0xaa71, 0x5f2f, 0xaa6d, + 0x5f2b, 0xaa68, 0x5f27, 0xaa63, 0x5f23, 0xaa5f, 0x5f1f, 0xaa5a, + 0x5f1a, 0xaa55, 0x5f16, 0xaa51, 0x5f12, 0xaa4c, 0x5f0e, 0xaa47, + 0x5f0a, 0xaa43, 0x5f05, 0xaa3e, 0x5f01, 0xaa39, 0x5efd, 0xaa35, + 0x5ef9, 0xaa30, 0x5ef5, 0xaa2b, 0x5ef0, 0xaa27, 0x5eec, 0xaa22, + 0x5ee8, 0xaa1d, 0x5ee4, 0xaa19, 0x5edf, 0xaa14, 0x5edb, 0xaa10, + 0x5ed7, 0xaa0b, 0x5ed3, 0xaa06, 0x5ecf, 0xaa02, 0x5eca, 0xa9fd, + 0x5ec6, 0xa9f8, 0x5ec2, 0xa9f4, 0x5ebe, 0xa9ef, 0x5eb9, 0xa9ea, + 0x5eb5, 0xa9e6, 0x5eb1, 0xa9e1, 0x5ead, 0xa9dc, 0x5ea9, 0xa9d8, + 0x5ea4, 0xa9d3, 0x5ea0, 0xa9ce, 0x5e9c, 0xa9ca, 0x5e98, 0xa9c5, + 0x5e93, 0xa9c0, 0x5e8f, 0xa9bc, 0x5e8b, 0xa9b7, 0x5e87, 0xa9b3, + 0x5e82, 0xa9ae, 0x5e7e, 0xa9a9, 0x5e7a, 0xa9a5, 0x5e76, 0xa9a0, + 0x5e71, 0xa99b, 0x5e6d, 0xa997, 0x5e69, 0xa992, 0x5e65, 0xa98d, + 0x5e60, 0xa989, 0x5e5c, 0xa984, 0x5e58, 0xa980, 0x5e54, 0xa97b, + 0x5e50, 0xa976, 0x5e4b, 0xa972, 0x5e47, 0xa96d, 0x5e43, 0xa968, + 0x5e3f, 0xa964, 0x5e3a, 0xa95f, 0x5e36, 0xa95b, 0x5e32, 0xa956, + 0x5e2d, 0xa951, 0x5e29, 0xa94d, 0x5e25, 0xa948, 0x5e21, 0xa943, + 0x5e1c, 0xa93f, 0x5e18, 0xa93a, 0x5e14, 0xa936, 0x5e10, 0xa931, + 0x5e0b, 0xa92c, 0x5e07, 0xa928, 0x5e03, 0xa923, 0x5dff, 0xa91e, + 0x5dfa, 0xa91a, 0x5df6, 0xa915, 0x5df2, 0xa911, 0x5dee, 0xa90c, + 0x5de9, 0xa907, 0x5de5, 0xa903, 0x5de1, 0xa8fe, 0x5ddc, 0xa8fa, + 0x5dd8, 0xa8f5, 0x5dd4, 0xa8f0, 0x5dd0, 0xa8ec, 0x5dcb, 0xa8e7, + 0x5dc7, 0xa8e3, 0x5dc3, 0xa8de, 0x5dbf, 0xa8d9, 0x5dba, 0xa8d5, + 0x5db6, 0xa8d0, 0x5db2, 0xa8cc, 0x5dad, 0xa8c7, 0x5da9, 0xa8c2, + 0x5da5, 0xa8be, 0x5da1, 0xa8b9, 0x5d9c, 0xa8b5, 0x5d98, 0xa8b0, + 0x5d94, 0xa8ab, 0x5d8f, 0xa8a7, 0x5d8b, 0xa8a2, 0x5d87, 0xa89e, + 0x5d83, 0xa899, 0x5d7e, 0xa894, 0x5d7a, 0xa890, 0x5d76, 0xa88b, + 0x5d71, 0xa887, 0x5d6d, 0xa882, 0x5d69, 0xa87d, 0x5d65, 0xa879, + 0x5d60, 0xa874, 0x5d5c, 0xa870, 0x5d58, 0xa86b, 0x5d53, 0xa867, + 0x5d4f, 0xa862, 0x5d4b, 0xa85d, 0x5d46, 0xa859, 0x5d42, 0xa854, + 0x5d3e, 0xa850, 0x5d3a, 0xa84b, 0x5d35, 0xa847, 0x5d31, 0xa842, + 0x5d2d, 0xa83d, 0x5d28, 0xa839, 0x5d24, 0xa834, 0x5d20, 0xa830, + 0x5d1b, 0xa82b, 0x5d17, 0xa827, 0x5d13, 0xa822, 0x5d0e, 0xa81d, + 0x5d0a, 0xa819, 0x5d06, 0xa814, 0x5d01, 0xa810, 0x5cfd, 0xa80b, + 0x5cf9, 0xa807, 0x5cf5, 0xa802, 0x5cf0, 0xa7fd, 0x5cec, 0xa7f9, + 0x5ce8, 0xa7f4, 0x5ce3, 0xa7f0, 0x5cdf, 0xa7eb, 0x5cdb, 0xa7e7, + 0x5cd6, 0xa7e2, 0x5cd2, 0xa7de, 0x5cce, 0xa7d9, 0x5cc9, 0xa7d4, + 0x5cc5, 0xa7d0, 0x5cc1, 0xa7cb, 0x5cbc, 0xa7c7, 0x5cb8, 0xa7c2, + 0x5cb4, 0xa7be, 0x5caf, 0xa7b9, 0x5cab, 0xa7b5, 0x5ca7, 0xa7b0, + 0x5ca2, 0xa7ab, 0x5c9e, 0xa7a7, 0x5c9a, 0xa7a2, 0x5c95, 0xa79e, + 0x5c91, 0xa799, 0x5c8d, 0xa795, 0x5c88, 0xa790, 0x5c84, 0xa78c, + 0x5c80, 0xa787, 0x5c7b, 0xa783, 0x5c77, 0xa77e, 0x5c73, 0xa779, + 0x5c6e, 0xa775, 0x5c6a, 0xa770, 0x5c66, 0xa76c, 0x5c61, 0xa767, + 0x5c5d, 0xa763, 0x5c58, 0xa75e, 0x5c54, 0xa75a, 0x5c50, 0xa755, + 0x5c4b, 0xa751, 0x5c47, 0xa74c, 0x5c43, 0xa748, 0x5c3e, 0xa743, + 0x5c3a, 0xa73f, 0x5c36, 0xa73a, 0x5c31, 0xa735, 0x5c2d, 0xa731, + 0x5c29, 0xa72c, 0x5c24, 0xa728, 0x5c20, 0xa723, 0x5c1b, 0xa71f, + 0x5c17, 0xa71a, 0x5c13, 0xa716, 0x5c0e, 0xa711, 0x5c0a, 0xa70d, + 0x5c06, 0xa708, 0x5c01, 0xa704, 0x5bfd, 0xa6ff, 0x5bf9, 0xa6fb, + 0x5bf4, 0xa6f6, 0x5bf0, 0xa6f2, 0x5beb, 0xa6ed, 0x5be7, 0xa6e9, + 0x5be3, 0xa6e4, 0x5bde, 0xa6e0, 0x5bda, 0xa6db, 0x5bd6, 0xa6d7, + 0x5bd1, 0xa6d2, 0x5bcd, 0xa6ce, 0x5bc8, 0xa6c9, 0x5bc4, 0xa6c5, + 0x5bc0, 0xa6c0, 0x5bbb, 0xa6bc, 0x5bb7, 0xa6b7, 0x5bb2, 0xa6b3, + 0x5bae, 0xa6ae, 0x5baa, 0xa6aa, 0x5ba5, 0xa6a5, 0x5ba1, 0xa6a1, + 0x5b9d, 0xa69c, 0x5b98, 0xa698, 0x5b94, 0xa693, 0x5b8f, 0xa68f, + 0x5b8b, 0xa68a, 0x5b87, 0xa686, 0x5b82, 0xa681, 0x5b7e, 0xa67d, + 0x5b79, 0xa678, 0x5b75, 0xa674, 0x5b71, 0xa66f, 0x5b6c, 0xa66b, + 0x5b68, 0xa666, 0x5b63, 0xa662, 0x5b5f, 0xa65d, 0x5b5b, 0xa659, + 0x5b56, 0xa654, 0x5b52, 0xa650, 0x5b4d, 0xa64b, 0x5b49, 0xa647, + 0x5b45, 0xa642, 0x5b40, 0xa63e, 0x5b3c, 0xa639, 0x5b37, 0xa635, + 0x5b33, 0xa630, 0x5b2f, 0xa62c, 0x5b2a, 0xa627, 0x5b26, 0xa623, + 0x5b21, 0xa61f, 0x5b1d, 0xa61a, 0x5b19, 0xa616, 0x5b14, 0xa611, + 0x5b10, 0xa60d, 0x5b0b, 0xa608, 0x5b07, 0xa604, 0x5b02, 0xa5ff, + 0x5afe, 0xa5fb, 0x5afa, 0xa5f6, 0x5af5, 0xa5f2, 0x5af1, 0xa5ed, + 0x5aec, 0xa5e9, 0x5ae8, 0xa5e4, 0x5ae4, 0xa5e0, 0x5adf, 0xa5dc, + 0x5adb, 0xa5d7, 0x5ad6, 0xa5d3, 0x5ad2, 0xa5ce, 0x5acd, 0xa5ca, + 0x5ac9, 0xa5c5, 0x5ac5, 0xa5c1, 0x5ac0, 0xa5bc, 0x5abc, 0xa5b8, + 0x5ab7, 0xa5b3, 0x5ab3, 0xa5af, 0x5aae, 0xa5aa, 0x5aaa, 0xa5a6, + 0x5aa5, 0xa5a2, 0x5aa1, 0xa59d, 0x5a9d, 0xa599, 0x5a98, 0xa594, + 0x5a94, 0xa590, 0x5a8f, 0xa58b, 0x5a8b, 0xa587, 0x5a86, 0xa582, + 0x5a82, 0xa57e, 0x5a7e, 0xa57a, 0x5a79, 0xa575, 0x5a75, 0xa571, + 0x5a70, 0xa56c, 0x5a6c, 0xa568, 0x5a67, 0xa563, 0x5a63, 0xa55f, + 0x5a5e, 0xa55b, 0x5a5a, 0xa556, 0x5a56, 0xa552, 0x5a51, 0xa54d, + 0x5a4d, 0xa549, 0x5a48, 0xa544, 0x5a44, 0xa540, 0x5a3f, 0xa53b, + 0x5a3b, 0xa537, 0x5a36, 0xa533, 0x5a32, 0xa52e, 0x5a2d, 0xa52a, + 0x5a29, 0xa525, 0x5a24, 0xa521, 0x5a20, 0xa51c, 0x5a1c, 0xa518, + 0x5a17, 0xa514, 0x5a13, 0xa50f, 0x5a0e, 0xa50b, 0x5a0a, 0xa506, + 0x5a05, 0xa502, 0x5a01, 0xa4fe, 0x59fc, 0xa4f9, 0x59f8, 0xa4f5, + 0x59f3, 0xa4f0, 0x59ef, 0xa4ec, 0x59ea, 0xa4e7, 0x59e6, 0xa4e3, + 0x59e1, 0xa4df, 0x59dd, 0xa4da, 0x59d9, 0xa4d6, 0x59d4, 0xa4d1, + 0x59d0, 0xa4cd, 0x59cb, 0xa4c9, 0x59c7, 0xa4c4, 0x59c2, 0xa4c0, + 0x59be, 0xa4bb, 0x59b9, 0xa4b7, 0x59b5, 0xa4b3, 0x59b0, 0xa4ae, + 0x59ac, 0xa4aa, 0x59a7, 0xa4a5, 0x59a3, 0xa4a1, 0x599e, 0xa49d, + 0x599a, 0xa498, 0x5995, 0xa494, 0x5991, 0xa48f, 0x598c, 0xa48b, + 0x5988, 0xa487, 0x5983, 0xa482, 0x597f, 0xa47e, 0x597a, 0xa479, + 0x5976, 0xa475, 0x5971, 0xa471, 0x596d, 0xa46c, 0x5968, 0xa468, + 0x5964, 0xa463, 0x595f, 0xa45f, 0x595b, 0xa45b, 0x5956, 0xa456, + 0x5952, 0xa452, 0x594d, 0xa44e, 0x5949, 0xa449, 0x5944, 0xa445, + 0x5940, 0xa440, 0x593b, 0xa43c, 0x5937, 0xa438, 0x5932, 0xa433, + 0x592e, 0xa42f, 0x5929, 0xa42a, 0x5925, 0xa426, 0x5920, 0xa422, + 0x591c, 0xa41d, 0x5917, 0xa419, 0x5913, 0xa415, 0x590e, 0xa410, + 0x590a, 0xa40c, 0x5905, 0xa407, 0x5901, 0xa403, 0x58fc, 0xa3ff, + 0x58f8, 0xa3fa, 0x58f3, 0xa3f6, 0x58ef, 0xa3f2, 0x58ea, 0xa3ed, + 0x58e6, 0xa3e9, 0x58e1, 0xa3e5, 0x58dd, 0xa3e0, 0x58d8, 0xa3dc, + 0x58d4, 0xa3d7, 0x58cf, 0xa3d3, 0x58cb, 0xa3cf, 0x58c6, 0xa3ca, + 0x58c1, 0xa3c6, 0x58bd, 0xa3c2, 0x58b8, 0xa3bd, 0x58b4, 0xa3b9, + 0x58af, 0xa3b5, 0x58ab, 0xa3b0, 0x58a6, 0xa3ac, 0x58a2, 0xa3a8, + 0x589d, 0xa3a3, 0x5899, 0xa39f, 0x5894, 0xa39a, 0x5890, 0xa396, + 0x588b, 0xa392, 0x5887, 0xa38d, 0x5882, 0xa389, 0x587d, 0xa385, + 0x5879, 0xa380, 0x5874, 0xa37c, 0x5870, 0xa378, 0x586b, 0xa373, + 0x5867, 0xa36f, 0x5862, 0xa36b, 0x585e, 0xa366, 0x5859, 0xa362, + 0x5855, 0xa35e, 0x5850, 0xa359, 0x584b, 0xa355, 0x5847, 0xa351, + 0x5842, 0xa34c, 0x583e, 0xa348, 0x5839, 0xa344, 0x5835, 0xa33f, + 0x5830, 0xa33b, 0x582c, 0xa337, 0x5827, 0xa332, 0x5822, 0xa32e, + 0x581e, 0xa32a, 0x5819, 0xa325, 0x5815, 0xa321, 0x5810, 0xa31d, + 0x580c, 0xa318, 0x5807, 0xa314, 0x5803, 0xa310, 0x57fe, 0xa30b, + 0x57f9, 0xa307, 0x57f5, 0xa303, 0x57f0, 0xa2ff, 0x57ec, 0xa2fa, + 0x57e7, 0xa2f6, 0x57e3, 0xa2f2, 0x57de, 0xa2ed, 0x57d9, 0xa2e9, + 0x57d5, 0xa2e5, 0x57d0, 0xa2e0, 0x57cc, 0xa2dc, 0x57c7, 0xa2d8, + 0x57c3, 0xa2d3, 0x57be, 0xa2cf, 0x57b9, 0xa2cb, 0x57b5, 0xa2c6, + 0x57b0, 0xa2c2, 0x57ac, 0xa2be, 0x57a7, 0xa2ba, 0x57a3, 0xa2b5, + 0x579e, 0xa2b1, 0x5799, 0xa2ad, 0x5795, 0xa2a8, 0x5790, 0xa2a4, + 0x578c, 0xa2a0, 0x5787, 0xa29b, 0x5783, 0xa297, 0x577e, 0xa293, + 0x5779, 0xa28f, 0x5775, 0xa28a, 0x5770, 0xa286, 0x576c, 0xa282, + 0x5767, 0xa27d, 0x5762, 0xa279, 0x575e, 0xa275, 0x5759, 0xa271, + 0x5755, 0xa26c, 0x5750, 0xa268, 0x574b, 0xa264, 0x5747, 0xa25f, + 0x5742, 0xa25b, 0x573e, 0xa257, 0x5739, 0xa253, 0x5734, 0xa24e, + 0x5730, 0xa24a, 0x572b, 0xa246, 0x5727, 0xa241, 0x5722, 0xa23d, + 0x571d, 0xa239, 0x5719, 0xa235, 0x5714, 0xa230, 0x5710, 0xa22c, + 0x570b, 0xa228, 0x5706, 0xa224, 0x5702, 0xa21f, 0x56fd, 0xa21b, + 0x56f9, 0xa217, 0x56f4, 0xa212, 0x56ef, 0xa20e, 0x56eb, 0xa20a, + 0x56e6, 0xa206, 0x56e2, 0xa201, 0x56dd, 0xa1fd, 0x56d8, 0xa1f9, + 0x56d4, 0xa1f5, 0x56cf, 0xa1f0, 0x56ca, 0xa1ec, 0x56c6, 0xa1e8, + 0x56c1, 0xa1e4, 0x56bd, 0xa1df, 0x56b8, 0xa1db, 0x56b3, 0xa1d7, + 0x56af, 0xa1d3, 0x56aa, 0xa1ce, 0x56a5, 0xa1ca, 0x56a1, 0xa1c6, + 0x569c, 0xa1c1, 0x5698, 0xa1bd, 0x5693, 0xa1b9, 0x568e, 0xa1b5, + 0x568a, 0xa1b0, 0x5685, 0xa1ac, 0x5680, 0xa1a8, 0x567c, 0xa1a4, + 0x5677, 0xa1a0, 0x5673, 0xa19b, 0x566e, 0xa197, 0x5669, 0xa193, + 0x5665, 0xa18f, 0x5660, 0xa18a, 0x565b, 0xa186, 0x5657, 0xa182, + 0x5652, 0xa17e, 0x564d, 0xa179, 0x5649, 0xa175, 0x5644, 0xa171, + 0x5640, 0xa16d, 0x563b, 0xa168, 0x5636, 0xa164, 0x5632, 0xa160, + 0x562d, 0xa15c, 0x5628, 0xa157, 0x5624, 0xa153, 0x561f, 0xa14f, + 0x561a, 0xa14b, 0x5616, 0xa147, 0x5611, 0xa142, 0x560c, 0xa13e, + 0x5608, 0xa13a, 0x5603, 0xa136, 0x55fe, 0xa131, 0x55fa, 0xa12d, + 0x55f5, 0xa129, 0x55f0, 0xa125, 0x55ec, 0xa121, 0x55e7, 0xa11c, + 0x55e3, 0xa118, 0x55de, 0xa114, 0x55d9, 0xa110, 0x55d5, 0xa10b, + 0x55d0, 0xa107, 0x55cb, 0xa103, 0x55c7, 0xa0ff, 0x55c2, 0xa0fb, + 0x55bd, 0xa0f6, 0x55b9, 0xa0f2, 0x55b4, 0xa0ee, 0x55af, 0xa0ea, + 0x55ab, 0xa0e6, 0x55a6, 0xa0e1, 0x55a1, 0xa0dd, 0x559d, 0xa0d9, + 0x5598, 0xa0d5, 0x5593, 0xa0d1, 0x558f, 0xa0cc, 0x558a, 0xa0c8, + 0x5585, 0xa0c4, 0x5581, 0xa0c0, 0x557c, 0xa0bc, 0x5577, 0xa0b7, + 0x5572, 0xa0b3, 0x556e, 0xa0af, 0x5569, 0xa0ab, 0x5564, 0xa0a7, + 0x5560, 0xa0a2, 0x555b, 0xa09e, 0x5556, 0xa09a, 0x5552, 0xa096, + 0x554d, 0xa092, 0x5548, 0xa08e, 0x5544, 0xa089, 0x553f, 0xa085, + 0x553a, 0xa081, 0x5536, 0xa07d, 0x5531, 0xa079, 0x552c, 0xa074, + 0x5528, 0xa070, 0x5523, 0xa06c, 0x551e, 0xa068, 0x5519, 0xa064, + 0x5515, 0xa060, 0x5510, 0xa05b, 0x550b, 0xa057, 0x5507, 0xa053, + 0x5502, 0xa04f, 0x54fd, 0xa04b, 0x54f9, 0xa046, 0x54f4, 0xa042, + 0x54ef, 0xa03e, 0x54ea, 0xa03a, 0x54e6, 0xa036, 0x54e1, 0xa032, + 0x54dc, 0xa02d, 0x54d8, 0xa029, 0x54d3, 0xa025, 0x54ce, 0xa021, + 0x54ca, 0xa01d, 0x54c5, 0xa019, 0x54c0, 0xa014, 0x54bb, 0xa010, + 0x54b7, 0xa00c, 0x54b2, 0xa008, 0x54ad, 0xa004, 0x54a9, 0xa000, + 0x54a4, 0x9ffc, 0x549f, 0x9ff7, 0x549a, 0x9ff3, 0x5496, 0x9fef, + 0x5491, 0x9feb, 0x548c, 0x9fe7, 0x5488, 0x9fe3, 0x5483, 0x9fde, + 0x547e, 0x9fda, 0x5479, 0x9fd6, 0x5475, 0x9fd2, 0x5470, 0x9fce, + 0x546b, 0x9fca, 0x5467, 0x9fc6, 0x5462, 0x9fc1, 0x545d, 0x9fbd, + 0x5458, 0x9fb9, 0x5454, 0x9fb5, 0x544f, 0x9fb1, 0x544a, 0x9fad, + 0x5445, 0x9fa9, 0x5441, 0x9fa4, 0x543c, 0x9fa0, 0x5437, 0x9f9c, + 0x5433, 0x9f98, 0x542e, 0x9f94, 0x5429, 0x9f90, 0x5424, 0x9f8c, + 0x5420, 0x9f88, 0x541b, 0x9f83, 0x5416, 0x9f7f, 0x5411, 0x9f7b, + 0x540d, 0x9f77, 0x5408, 0x9f73, 0x5403, 0x9f6f, 0x53fe, 0x9f6b, + 0x53fa, 0x9f67, 0x53f5, 0x9f62, 0x53f0, 0x9f5e, 0x53eb, 0x9f5a, + 0x53e7, 0x9f56, 0x53e2, 0x9f52, 0x53dd, 0x9f4e, 0x53d8, 0x9f4a, + 0x53d4, 0x9f46, 0x53cf, 0x9f41, 0x53ca, 0x9f3d, 0x53c5, 0x9f39, + 0x53c1, 0x9f35, 0x53bc, 0x9f31, 0x53b7, 0x9f2d, 0x53b2, 0x9f29, + 0x53ae, 0x9f25, 0x53a9, 0x9f21, 0x53a4, 0x9f1c, 0x539f, 0x9f18, + 0x539b, 0x9f14, 0x5396, 0x9f10, 0x5391, 0x9f0c, 0x538c, 0x9f08, + 0x5388, 0x9f04, 0x5383, 0x9f00, 0x537e, 0x9efc, 0x5379, 0x9ef8, + 0x5375, 0x9ef3, 0x5370, 0x9eef, 0x536b, 0x9eeb, 0x5366, 0x9ee7, + 0x5362, 0x9ee3, 0x535d, 0x9edf, 0x5358, 0x9edb, 0x5353, 0x9ed7, + 0x534e, 0x9ed3, 0x534a, 0x9ecf, 0x5345, 0x9ecb, 0x5340, 0x9ec6, + 0x533b, 0x9ec2, 0x5337, 0x9ebe, 0x5332, 0x9eba, 0x532d, 0x9eb6, + 0x5328, 0x9eb2, 0x5323, 0x9eae, 0x531f, 0x9eaa, 0x531a, 0x9ea6, + 0x5315, 0x9ea2, 0x5310, 0x9e9e, 0x530c, 0x9e9a, 0x5307, 0x9e95, + 0x5302, 0x9e91, 0x52fd, 0x9e8d, 0x52f8, 0x9e89, 0x52f4, 0x9e85, + 0x52ef, 0x9e81, 0x52ea, 0x9e7d, 0x52e5, 0x9e79, 0x52e1, 0x9e75, + 0x52dc, 0x9e71, 0x52d7, 0x9e6d, 0x52d2, 0x9e69, 0x52cd, 0x9e65, + 0x52c9, 0x9e61, 0x52c4, 0x9e5d, 0x52bf, 0x9e58, 0x52ba, 0x9e54, + 0x52b5, 0x9e50, 0x52b1, 0x9e4c, 0x52ac, 0x9e48, 0x52a7, 0x9e44, + 0x52a2, 0x9e40, 0x529d, 0x9e3c, 0x5299, 0x9e38, 0x5294, 0x9e34, + 0x528f, 0x9e30, 0x528a, 0x9e2c, 0x5285, 0x9e28, 0x5281, 0x9e24, + 0x527c, 0x9e20, 0x5277, 0x9e1c, 0x5272, 0x9e18, 0x526d, 0x9e14, + 0x5269, 0x9e0f, 0x5264, 0x9e0b, 0x525f, 0x9e07, 0x525a, 0x9e03, + 0x5255, 0x9dff, 0x5251, 0x9dfb, 0x524c, 0x9df7, 0x5247, 0x9df3, + 0x5242, 0x9def, 0x523d, 0x9deb, 0x5238, 0x9de7, 0x5234, 0x9de3, + 0x522f, 0x9ddf, 0x522a, 0x9ddb, 0x5225, 0x9dd7, 0x5220, 0x9dd3, + 0x521c, 0x9dcf, 0x5217, 0x9dcb, 0x5212, 0x9dc7, 0x520d, 0x9dc3, + 0x5208, 0x9dbf, 0x5203, 0x9dbb, 0x51ff, 0x9db7, 0x51fa, 0x9db3, + 0x51f5, 0x9daf, 0x51f0, 0x9dab, 0x51eb, 0x9da7, 0x51e6, 0x9da3, + 0x51e2, 0x9d9f, 0x51dd, 0x9d9b, 0x51d8, 0x9d97, 0x51d3, 0x9d93, + 0x51ce, 0x9d8f, 0x51c9, 0x9d8b, 0x51c5, 0x9d86, 0x51c0, 0x9d82, + 0x51bb, 0x9d7e, 0x51b6, 0x9d7a, 0x51b1, 0x9d76, 0x51ac, 0x9d72, + 0x51a8, 0x9d6e, 0x51a3, 0x9d6a, 0x519e, 0x9d66, 0x5199, 0x9d62, + 0x5194, 0x9d5e, 0x518f, 0x9d5a, 0x518b, 0x9d56, 0x5186, 0x9d52, + 0x5181, 0x9d4e, 0x517c, 0x9d4a, 0x5177, 0x9d46, 0x5172, 0x9d42, + 0x516e, 0x9d3e, 0x5169, 0x9d3a, 0x5164, 0x9d36, 0x515f, 0x9d32, + 0x515a, 0x9d2e, 0x5155, 0x9d2a, 0x5150, 0x9d26, 0x514c, 0x9d22, + 0x5147, 0x9d1e, 0x5142, 0x9d1a, 0x513d, 0x9d16, 0x5138, 0x9d12, + 0x5133, 0x9d0e, 0x512e, 0x9d0b, 0x512a, 0x9d07, 0x5125, 0x9d03, + 0x5120, 0x9cff, 0x511b, 0x9cfb, 0x5116, 0x9cf7, 0x5111, 0x9cf3, + 0x510c, 0x9cef, 0x5108, 0x9ceb, 0x5103, 0x9ce7, 0x50fe, 0x9ce3, + 0x50f9, 0x9cdf, 0x50f4, 0x9cdb, 0x50ef, 0x9cd7, 0x50ea, 0x9cd3, + 0x50e5, 0x9ccf, 0x50e1, 0x9ccb, 0x50dc, 0x9cc7, 0x50d7, 0x9cc3, + 0x50d2, 0x9cbf, 0x50cd, 0x9cbb, 0x50c8, 0x9cb7, 0x50c3, 0x9cb3, + 0x50bf, 0x9caf, 0x50ba, 0x9cab, 0x50b5, 0x9ca7, 0x50b0, 0x9ca3, + 0x50ab, 0x9c9f, 0x50a6, 0x9c9b, 0x50a1, 0x9c97, 0x509c, 0x9c93, + 0x5097, 0x9c8f, 0x5093, 0x9c8b, 0x508e, 0x9c88, 0x5089, 0x9c84, + 0x5084, 0x9c80, 0x507f, 0x9c7c, 0x507a, 0x9c78, 0x5075, 0x9c74, + 0x5070, 0x9c70, 0x506c, 0x9c6c, 0x5067, 0x9c68, 0x5062, 0x9c64, + 0x505d, 0x9c60, 0x5058, 0x9c5c, 0x5053, 0x9c58, 0x504e, 0x9c54, + 0x5049, 0x9c50, 0x5044, 0x9c4c, 0x503f, 0x9c48, 0x503b, 0x9c44, + 0x5036, 0x9c40, 0x5031, 0x9c3d, 0x502c, 0x9c39, 0x5027, 0x9c35, + 0x5022, 0x9c31, 0x501d, 0x9c2d, 0x5018, 0x9c29, 0x5013, 0x9c25, + 0x500f, 0x9c21, 0x500a, 0x9c1d, 0x5005, 0x9c19, 0x5000, 0x9c15, + 0x4ffb, 0x9c11, 0x4ff6, 0x9c0d, 0x4ff1, 0x9c09, 0x4fec, 0x9c06, + 0x4fe7, 0x9c02, 0x4fe2, 0x9bfe, 0x4fdd, 0x9bfa, 0x4fd9, 0x9bf6, + 0x4fd4, 0x9bf2, 0x4fcf, 0x9bee, 0x4fca, 0x9bea, 0x4fc5, 0x9be6, + 0x4fc0, 0x9be2, 0x4fbb, 0x9bde, 0x4fb6, 0x9bda, 0x4fb1, 0x9bd7, + 0x4fac, 0x9bd3, 0x4fa7, 0x9bcf, 0x4fa2, 0x9bcb, 0x4f9e, 0x9bc7, + 0x4f99, 0x9bc3, 0x4f94, 0x9bbf, 0x4f8f, 0x9bbb, 0x4f8a, 0x9bb7, + 0x4f85, 0x9bb3, 0x4f80, 0x9baf, 0x4f7b, 0x9bac, 0x4f76, 0x9ba8, + 0x4f71, 0x9ba4, 0x4f6c, 0x9ba0, 0x4f67, 0x9b9c, 0x4f62, 0x9b98, + 0x4f5e, 0x9b94, 0x4f59, 0x9b90, 0x4f54, 0x9b8c, 0x4f4f, 0x9b88, + 0x4f4a, 0x9b85, 0x4f45, 0x9b81, 0x4f40, 0x9b7d, 0x4f3b, 0x9b79, + 0x4f36, 0x9b75, 0x4f31, 0x9b71, 0x4f2c, 0x9b6d, 0x4f27, 0x9b69, + 0x4f22, 0x9b65, 0x4f1d, 0x9b62, 0x4f18, 0x9b5e, 0x4f14, 0x9b5a, + 0x4f0f, 0x9b56, 0x4f0a, 0x9b52, 0x4f05, 0x9b4e, 0x4f00, 0x9b4a, + 0x4efb, 0x9b46, 0x4ef6, 0x9b43, 0x4ef1, 0x9b3f, 0x4eec, 0x9b3b, + 0x4ee7, 0x9b37, 0x4ee2, 0x9b33, 0x4edd, 0x9b2f, 0x4ed8, 0x9b2b, + 0x4ed3, 0x9b27, 0x4ece, 0x9b24, 0x4ec9, 0x9b20, 0x4ec4, 0x9b1c, + 0x4ebf, 0x9b18, 0x4eba, 0x9b14, 0x4eb6, 0x9b10, 0x4eb1, 0x9b0c, + 0x4eac, 0x9b09, 0x4ea7, 0x9b05, 0x4ea2, 0x9b01, 0x4e9d, 0x9afd, + 0x4e98, 0x9af9, 0x4e93, 0x9af5, 0x4e8e, 0x9af1, 0x4e89, 0x9aed, + 0x4e84, 0x9aea, 0x4e7f, 0x9ae6, 0x4e7a, 0x9ae2, 0x4e75, 0x9ade, + 0x4e70, 0x9ada, 0x4e6b, 0x9ad6, 0x4e66, 0x9ad3, 0x4e61, 0x9acf, + 0x4e5c, 0x9acb, 0x4e57, 0x9ac7, 0x4e52, 0x9ac3, 0x4e4d, 0x9abf, + 0x4e48, 0x9abb, 0x4e43, 0x9ab8, 0x4e3e, 0x9ab4, 0x4e39, 0x9ab0, + 0x4e34, 0x9aac, 0x4e2f, 0x9aa8, 0x4e2a, 0x9aa4, 0x4e26, 0x9aa1, + 0x4e21, 0x9a9d, 0x4e1c, 0x9a99, 0x4e17, 0x9a95, 0x4e12, 0x9a91, + 0x4e0d, 0x9a8d, 0x4e08, 0x9a8a, 0x4e03, 0x9a86, 0x4dfe, 0x9a82, + 0x4df9, 0x9a7e, 0x4df4, 0x9a7a, 0x4def, 0x9a76, 0x4dea, 0x9a73, + 0x4de5, 0x9a6f, 0x4de0, 0x9a6b, 0x4ddb, 0x9a67, 0x4dd6, 0x9a63, + 0x4dd1, 0x9a60, 0x4dcc, 0x9a5c, 0x4dc7, 0x9a58, 0x4dc2, 0x9a54, + 0x4dbd, 0x9a50, 0x4db8, 0x9a4c, 0x4db3, 0x9a49, 0x4dae, 0x9a45, + 0x4da9, 0x9a41, 0x4da4, 0x9a3d, 0x4d9f, 0x9a39, 0x4d9a, 0x9a36, + 0x4d95, 0x9a32, 0x4d90, 0x9a2e, 0x4d8b, 0x9a2a, 0x4d86, 0x9a26, + 0x4d81, 0x9a23, 0x4d7c, 0x9a1f, 0x4d77, 0x9a1b, 0x4d72, 0x9a17, + 0x4d6d, 0x9a13, 0x4d68, 0x9a10, 0x4d63, 0x9a0c, 0x4d5e, 0x9a08, + 0x4d59, 0x9a04, 0x4d54, 0x9a00, 0x4d4f, 0x99fd, 0x4d4a, 0x99f9, + 0x4d45, 0x99f5, 0x4d40, 0x99f1, 0x4d3b, 0x99ed, 0x4d36, 0x99ea, + 0x4d31, 0x99e6, 0x4d2c, 0x99e2, 0x4d27, 0x99de, 0x4d22, 0x99da, + 0x4d1d, 0x99d7, 0x4d18, 0x99d3, 0x4d13, 0x99cf, 0x4d0e, 0x99cb, + 0x4d09, 0x99c7, 0x4d04, 0x99c4, 0x4cff, 0x99c0, 0x4cfa, 0x99bc, + 0x4cf5, 0x99b8, 0x4cf0, 0x99b5, 0x4ceb, 0x99b1, 0x4ce6, 0x99ad, + 0x4ce1, 0x99a9, 0x4cdb, 0x99a5, 0x4cd6, 0x99a2, 0x4cd1, 0x999e, + 0x4ccc, 0x999a, 0x4cc7, 0x9996, 0x4cc2, 0x9993, 0x4cbd, 0x998f, + 0x4cb8, 0x998b, 0x4cb3, 0x9987, 0x4cae, 0x9984, 0x4ca9, 0x9980, + 0x4ca4, 0x997c, 0x4c9f, 0x9978, 0x4c9a, 0x9975, 0x4c95, 0x9971, + 0x4c90, 0x996d, 0x4c8b, 0x9969, 0x4c86, 0x9965, 0x4c81, 0x9962, + 0x4c7c, 0x995e, 0x4c77, 0x995a, 0x4c72, 0x9956, 0x4c6d, 0x9953, + 0x4c68, 0x994f, 0x4c63, 0x994b, 0x4c5e, 0x9947, 0x4c59, 0x9944, + 0x4c54, 0x9940, 0x4c4f, 0x993c, 0x4c49, 0x9938, 0x4c44, 0x9935, + 0x4c3f, 0x9931, 0x4c3a, 0x992d, 0x4c35, 0x992a, 0x4c30, 0x9926, + 0x4c2b, 0x9922, 0x4c26, 0x991e, 0x4c21, 0x991b, 0x4c1c, 0x9917, + 0x4c17, 0x9913, 0x4c12, 0x990f, 0x4c0d, 0x990c, 0x4c08, 0x9908, + 0x4c03, 0x9904, 0x4bfe, 0x9900, 0x4bf9, 0x98fd, 0x4bf4, 0x98f9, + 0x4bef, 0x98f5, 0x4be9, 0x98f2, 0x4be4, 0x98ee, 0x4bdf, 0x98ea, + 0x4bda, 0x98e6, 0x4bd5, 0x98e3, 0x4bd0, 0x98df, 0x4bcb, 0x98db, + 0x4bc6, 0x98d7, 0x4bc1, 0x98d4, 0x4bbc, 0x98d0, 0x4bb7, 0x98cc, + 0x4bb2, 0x98c9, 0x4bad, 0x98c5, 0x4ba8, 0x98c1, 0x4ba3, 0x98bd, + 0x4b9e, 0x98ba, 0x4b98, 0x98b6, 0x4b93, 0x98b2, 0x4b8e, 0x98af, + 0x4b89, 0x98ab, 0x4b84, 0x98a7, 0x4b7f, 0x98a3, 0x4b7a, 0x98a0, + 0x4b75, 0x989c, 0x4b70, 0x9898, 0x4b6b, 0x9895, 0x4b66, 0x9891, + 0x4b61, 0x988d, 0x4b5c, 0x988a, 0x4b56, 0x9886, 0x4b51, 0x9882, + 0x4b4c, 0x987e, 0x4b47, 0x987b, 0x4b42, 0x9877, 0x4b3d, 0x9873, + 0x4b38, 0x9870, 0x4b33, 0x986c, 0x4b2e, 0x9868, 0x4b29, 0x9865, + 0x4b24, 0x9861, 0x4b1f, 0x985d, 0x4b19, 0x985a, 0x4b14, 0x9856, + 0x4b0f, 0x9852, 0x4b0a, 0x984e, 0x4b05, 0x984b, 0x4b00, 0x9847, + 0x4afb, 0x9843, 0x4af6, 0x9840, 0x4af1, 0x983c, 0x4aec, 0x9838, + 0x4ae7, 0x9835, 0x4ae1, 0x9831, 0x4adc, 0x982d, 0x4ad7, 0x982a, + 0x4ad2, 0x9826, 0x4acd, 0x9822, 0x4ac8, 0x981f, 0x4ac3, 0x981b, + 0x4abe, 0x9817, 0x4ab9, 0x9814, 0x4ab4, 0x9810, 0x4aae, 0x980c, + 0x4aa9, 0x9809, 0x4aa4, 0x9805, 0x4a9f, 0x9801, 0x4a9a, 0x97fe, + 0x4a95, 0x97fa, 0x4a90, 0x97f6, 0x4a8b, 0x97f3, 0x4a86, 0x97ef, + 0x4a81, 0x97eb, 0x4a7b, 0x97e8, 0x4a76, 0x97e4, 0x4a71, 0x97e0, + 0x4a6c, 0x97dd, 0x4a67, 0x97d9, 0x4a62, 0x97d5, 0x4a5d, 0x97d2, + 0x4a58, 0x97ce, 0x4a52, 0x97cb, 0x4a4d, 0x97c7, 0x4a48, 0x97c3, + 0x4a43, 0x97c0, 0x4a3e, 0x97bc, 0x4a39, 0x97b8, 0x4a34, 0x97b5, + 0x4a2f, 0x97b1, 0x4a2a, 0x97ad, 0x4a24, 0x97aa, 0x4a1f, 0x97a6, + 0x4a1a, 0x97a2, 0x4a15, 0x979f, 0x4a10, 0x979b, 0x4a0b, 0x9798, + 0x4a06, 0x9794, 0x4a01, 0x9790, 0x49fb, 0x978d, 0x49f6, 0x9789, + 0x49f1, 0x9785, 0x49ec, 0x9782, 0x49e7, 0x977e, 0x49e2, 0x977a, + 0x49dd, 0x9777, 0x49d8, 0x9773, 0x49d2, 0x9770, 0x49cd, 0x976c, + 0x49c8, 0x9768, 0x49c3, 0x9765, 0x49be, 0x9761, 0x49b9, 0x975d, + 0x49b4, 0x975a, 0x49ae, 0x9756, 0x49a9, 0x9753, 0x49a4, 0x974f, + 0x499f, 0x974b, 0x499a, 0x9748, 0x4995, 0x9744, 0x4990, 0x9741, + 0x498a, 0x973d, 0x4985, 0x9739, 0x4980, 0x9736, 0x497b, 0x9732, + 0x4976, 0x972f, 0x4971, 0x972b, 0x496c, 0x9727, 0x4966, 0x9724, + 0x4961, 0x9720, 0x495c, 0x971d, 0x4957, 0x9719, 0x4952, 0x9715, + 0x494d, 0x9712, 0x4948, 0x970e, 0x4942, 0x970b, 0x493d, 0x9707, + 0x4938, 0x9703, 0x4933, 0x9700, 0x492e, 0x96fc, 0x4929, 0x96f9, + 0x4923, 0x96f5, 0x491e, 0x96f1, 0x4919, 0x96ee, 0x4914, 0x96ea, + 0x490f, 0x96e7, 0x490a, 0x96e3, 0x4905, 0x96df, 0x48ff, 0x96dc, + 0x48fa, 0x96d8, 0x48f5, 0x96d5, 0x48f0, 0x96d1, 0x48eb, 0x96ce, + 0x48e6, 0x96ca, 0x48e0, 0x96c6, 0x48db, 0x96c3, 0x48d6, 0x96bf, + 0x48d1, 0x96bc, 0x48cc, 0x96b8, 0x48c7, 0x96b5, 0x48c1, 0x96b1, + 0x48bc, 0x96ad, 0x48b7, 0x96aa, 0x48b2, 0x96a6, 0x48ad, 0x96a3, + 0x48a8, 0x969f, 0x48a2, 0x969c, 0x489d, 0x9698, 0x4898, 0x9694, + 0x4893, 0x9691, 0x488e, 0x968d, 0x4888, 0x968a, 0x4883, 0x9686, + 0x487e, 0x9683, 0x4879, 0x967f, 0x4874, 0x967b, 0x486f, 0x9678, + 0x4869, 0x9674, 0x4864, 0x9671, 0x485f, 0x966d, 0x485a, 0x966a, + 0x4855, 0x9666, 0x484f, 0x9663, 0x484a, 0x965f, 0x4845, 0x965b, + 0x4840, 0x9658, 0x483b, 0x9654, 0x4836, 0x9651, 0x4830, 0x964d, + 0x482b, 0x964a, 0x4826, 0x9646, 0x4821, 0x9643, 0x481c, 0x963f, + 0x4816, 0x963c, 0x4811, 0x9638, 0x480c, 0x9635, 0x4807, 0x9631, + 0x4802, 0x962d, 0x47fc, 0x962a, 0x47f7, 0x9626, 0x47f2, 0x9623, + 0x47ed, 0x961f, 0x47e8, 0x961c, 0x47e2, 0x9618, 0x47dd, 0x9615, + 0x47d8, 0x9611, 0x47d3, 0x960e, 0x47ce, 0x960a, 0x47c8, 0x9607, + 0x47c3, 0x9603, 0x47be, 0x9600, 0x47b9, 0x95fc, 0x47b4, 0x95f9, + 0x47ae, 0x95f5, 0x47a9, 0x95f2, 0x47a4, 0x95ee, 0x479f, 0x95ea, + 0x479a, 0x95e7, 0x4794, 0x95e3, 0x478f, 0x95e0, 0x478a, 0x95dc, + 0x4785, 0x95d9, 0x4780, 0x95d5, 0x477a, 0x95d2, 0x4775, 0x95ce, + 0x4770, 0x95cb, 0x476b, 0x95c7, 0x4765, 0x95c4, 0x4760, 0x95c0, + 0x475b, 0x95bd, 0x4756, 0x95b9, 0x4751, 0x95b6, 0x474b, 0x95b2, + 0x4746, 0x95af, 0x4741, 0x95ab, 0x473c, 0x95a8, 0x4737, 0x95a4, + 0x4731, 0x95a1, 0x472c, 0x959d, 0x4727, 0x959a, 0x4722, 0x9596, + 0x471c, 0x9593, 0x4717, 0x958f, 0x4712, 0x958c, 0x470d, 0x9588, + 0x4708, 0x9585, 0x4702, 0x9581, 0x46fd, 0x957e, 0x46f8, 0x957a, + 0x46f3, 0x9577, 0x46ed, 0x9574, 0x46e8, 0x9570, 0x46e3, 0x956d, + 0x46de, 0x9569, 0x46d8, 0x9566, 0x46d3, 0x9562, 0x46ce, 0x955f, + 0x46c9, 0x955b, 0x46c4, 0x9558, 0x46be, 0x9554, 0x46b9, 0x9551, + 0x46b4, 0x954d, 0x46af, 0x954a, 0x46a9, 0x9546, 0x46a4, 0x9543, + 0x469f, 0x953f, 0x469a, 0x953c, 0x4694, 0x9538, 0x468f, 0x9535, + 0x468a, 0x9532, 0x4685, 0x952e, 0x467f, 0x952b, 0x467a, 0x9527, + 0x4675, 0x9524, 0x4670, 0x9520, 0x466a, 0x951d, 0x4665, 0x9519, + 0x4660, 0x9516, 0x465b, 0x9512, 0x4655, 0x950f, 0x4650, 0x950c, + 0x464b, 0x9508, 0x4646, 0x9505, 0x4640, 0x9501, 0x463b, 0x94fe, + 0x4636, 0x94fa, 0x4631, 0x94f7, 0x462b, 0x94f3, 0x4626, 0x94f0, + 0x4621, 0x94ed, 0x461c, 0x94e9, 0x4616, 0x94e6, 0x4611, 0x94e2, + 0x460c, 0x94df, 0x4607, 0x94db, 0x4601, 0x94d8, 0x45fc, 0x94d4, + 0x45f7, 0x94d1, 0x45f2, 0x94ce, 0x45ec, 0x94ca, 0x45e7, 0x94c7, + 0x45e2, 0x94c3, 0x45dd, 0x94c0, 0x45d7, 0x94bc, 0x45d2, 0x94b9, + 0x45cd, 0x94b6, 0x45c7, 0x94b2, 0x45c2, 0x94af, 0x45bd, 0x94ab, + 0x45b8, 0x94a8, 0x45b2, 0x94a4, 0x45ad, 0x94a1, 0x45a8, 0x949e, + 0x45a3, 0x949a, 0x459d, 0x9497, 0x4598, 0x9493, 0x4593, 0x9490, + 0x458d, 0x948d, 0x4588, 0x9489, 0x4583, 0x9486, 0x457e, 0x9482, + 0x4578, 0x947f, 0x4573, 0x947b, 0x456e, 0x9478, 0x4569, 0x9475, + 0x4563, 0x9471, 0x455e, 0x946e, 0x4559, 0x946a, 0x4553, 0x9467, + 0x454e, 0x9464, 0x4549, 0x9460, 0x4544, 0x945d, 0x453e, 0x9459, + 0x4539, 0x9456, 0x4534, 0x9453, 0x452e, 0x944f, 0x4529, 0x944c, + 0x4524, 0x9448, 0x451f, 0x9445, 0x4519, 0x9442, 0x4514, 0x943e, + 0x450f, 0x943b, 0x4509, 0x9437, 0x4504, 0x9434, 0x44ff, 0x9431, + 0x44fa, 0x942d, 0x44f4, 0x942a, 0x44ef, 0x9427, 0x44ea, 0x9423, + 0x44e4, 0x9420, 0x44df, 0x941c, 0x44da, 0x9419, 0x44d4, 0x9416, + 0x44cf, 0x9412, 0x44ca, 0x940f, 0x44c5, 0x940b, 0x44bf, 0x9408, + 0x44ba, 0x9405, 0x44b5, 0x9401, 0x44af, 0x93fe, 0x44aa, 0x93fb, + 0x44a5, 0x93f7, 0x449f, 0x93f4, 0x449a, 0x93f1, 0x4495, 0x93ed, + 0x4490, 0x93ea, 0x448a, 0x93e6, 0x4485, 0x93e3, 0x4480, 0x93e0, + 0x447a, 0x93dc, 0x4475, 0x93d9, 0x4470, 0x93d6, 0x446a, 0x93d2, + 0x4465, 0x93cf, 0x4460, 0x93cc, 0x445a, 0x93c8, 0x4455, 0x93c5, + 0x4450, 0x93c1, 0x444b, 0x93be, 0x4445, 0x93bb, 0x4440, 0x93b7, + 0x443b, 0x93b4, 0x4435, 0x93b1, 0x4430, 0x93ad, 0x442b, 0x93aa, + 0x4425, 0x93a7, 0x4420, 0x93a3, 0x441b, 0x93a0, 0x4415, 0x939d, + 0x4410, 0x9399, 0x440b, 0x9396, 0x4405, 0x9393, 0x4400, 0x938f, + 0x43fb, 0x938c, 0x43f5, 0x9389, 0x43f0, 0x9385, 0x43eb, 0x9382, + 0x43e5, 0x937f, 0x43e0, 0x937b, 0x43db, 0x9378, 0x43d5, 0x9375, + 0x43d0, 0x9371, 0x43cb, 0x936e, 0x43c5, 0x936b, 0x43c0, 0x9367, + 0x43bb, 0x9364, 0x43b5, 0x9361, 0x43b0, 0x935d, 0x43ab, 0x935a, + 0x43a5, 0x9357, 0x43a0, 0x9353, 0x439b, 0x9350, 0x4395, 0x934d, + 0x4390, 0x9349, 0x438b, 0x9346, 0x4385, 0x9343, 0x4380, 0x933f, + 0x437b, 0x933c, 0x4375, 0x9339, 0x4370, 0x9336, 0x436b, 0x9332, + 0x4365, 0x932f, 0x4360, 0x932c, 0x435b, 0x9328, 0x4355, 0x9325, + 0x4350, 0x9322, 0x434b, 0x931e, 0x4345, 0x931b, 0x4340, 0x9318, + 0x433b, 0x9314, 0x4335, 0x9311, 0x4330, 0x930e, 0x432b, 0x930b, + 0x4325, 0x9307, 0x4320, 0x9304, 0x431b, 0x9301, 0x4315, 0x92fd, + 0x4310, 0x92fa, 0x430b, 0x92f7, 0x4305, 0x92f4, 0x4300, 0x92f0, + 0x42fa, 0x92ed, 0x42f5, 0x92ea, 0x42f0, 0x92e6, 0x42ea, 0x92e3, + 0x42e5, 0x92e0, 0x42e0, 0x92dd, 0x42da, 0x92d9, 0x42d5, 0x92d6, + 0x42d0, 0x92d3, 0x42ca, 0x92cf, 0x42c5, 0x92cc, 0x42c0, 0x92c9, + 0x42ba, 0x92c6, 0x42b5, 0x92c2, 0x42af, 0x92bf, 0x42aa, 0x92bc, + 0x42a5, 0x92b8, 0x429f, 0x92b5, 0x429a, 0x92b2, 0x4295, 0x92af, + 0x428f, 0x92ab, 0x428a, 0x92a8, 0x4284, 0x92a5, 0x427f, 0x92a2, + 0x427a, 0x929e, 0x4274, 0x929b, 0x426f, 0x9298, 0x426a, 0x9295, + 0x4264, 0x9291, 0x425f, 0x928e, 0x425a, 0x928b, 0x4254, 0x9288, + 0x424f, 0x9284, 0x4249, 0x9281, 0x4244, 0x927e, 0x423f, 0x927b, + 0x4239, 0x9277, 0x4234, 0x9274, 0x422f, 0x9271, 0x4229, 0x926e, + 0x4224, 0x926a, 0x421e, 0x9267, 0x4219, 0x9264, 0x4214, 0x9261, + 0x420e, 0x925d, 0x4209, 0x925a, 0x4203, 0x9257, 0x41fe, 0x9254, + 0x41f9, 0x9250, 0x41f3, 0x924d, 0x41ee, 0x924a, 0x41e9, 0x9247, + 0x41e3, 0x9243, 0x41de, 0x9240, 0x41d8, 0x923d, 0x41d3, 0x923a, + 0x41ce, 0x9236, 0x41c8, 0x9233, 0x41c3, 0x9230, 0x41bd, 0x922d, + 0x41b8, 0x922a, 0x41b3, 0x9226, 0x41ad, 0x9223, 0x41a8, 0x9220, + 0x41a2, 0x921d, 0x419d, 0x9219, 0x4198, 0x9216, 0x4192, 0x9213, + 0x418d, 0x9210, 0x4188, 0x920d, 0x4182, 0x9209, 0x417d, 0x9206, + 0x4177, 0x9203, 0x4172, 0x9200, 0x416d, 0x91fc, 0x4167, 0x91f9, + 0x4162, 0x91f6, 0x415c, 0x91f3, 0x4157, 0x91f0, 0x4152, 0x91ec, + 0x414c, 0x91e9, 0x4147, 0x91e6, 0x4141, 0x91e3, 0x413c, 0x91e0, + 0x4136, 0x91dc, 0x4131, 0x91d9, 0x412c, 0x91d6, 0x4126, 0x91d3, + 0x4121, 0x91d0, 0x411b, 0x91cc, 0x4116, 0x91c9, 0x4111, 0x91c6, + 0x410b, 0x91c3, 0x4106, 0x91c0, 0x4100, 0x91bc, 0x40fb, 0x91b9, + 0x40f6, 0x91b6, 0x40f0, 0x91b3, 0x40eb, 0x91b0, 0x40e5, 0x91ad, + 0x40e0, 0x91a9, 0x40da, 0x91a6, 0x40d5, 0x91a3, 0x40d0, 0x91a0, + 0x40ca, 0x919d, 0x40c5, 0x9199, 0x40bf, 0x9196, 0x40ba, 0x9193, + 0x40b5, 0x9190, 0x40af, 0x918d, 0x40aa, 0x918a, 0x40a4, 0x9186, + 0x409f, 0x9183, 0x4099, 0x9180, 0x4094, 0x917d, 0x408f, 0x917a, + 0x4089, 0x9177, 0x4084, 0x9173, 0x407e, 0x9170, 0x4079, 0x916d, + 0x4073, 0x916a, 0x406e, 0x9167, 0x4069, 0x9164, 0x4063, 0x9160, + 0x405e, 0x915d, 0x4058, 0x915a, 0x4053, 0x9157, 0x404d, 0x9154, + 0x4048, 0x9151, 0x4043, 0x914d, 0x403d, 0x914a, 0x4038, 0x9147, + 0x4032, 0x9144, 0x402d, 0x9141, 0x4027, 0x913e, 0x4022, 0x913a, + 0x401d, 0x9137, 0x4017, 0x9134, 0x4012, 0x9131, 0x400c, 0x912e, + 0x4007, 0x912b, 0x4001, 0x9128, 0x3ffc, 0x9124, 0x3ff6, 0x9121, + 0x3ff1, 0x911e, 0x3fec, 0x911b, 0x3fe6, 0x9118, 0x3fe1, 0x9115, + 0x3fdb, 0x9112, 0x3fd6, 0x910f, 0x3fd0, 0x910b, 0x3fcb, 0x9108, + 0x3fc5, 0x9105, 0x3fc0, 0x9102, 0x3fbb, 0x90ff, 0x3fb5, 0x90fc, + 0x3fb0, 0x90f9, 0x3faa, 0x90f5, 0x3fa5, 0x90f2, 0x3f9f, 0x90ef, + 0x3f9a, 0x90ec, 0x3f94, 0x90e9, 0x3f8f, 0x90e6, 0x3f89, 0x90e3, + 0x3f84, 0x90e0, 0x3f7f, 0x90dd, 0x3f79, 0x90d9, 0x3f74, 0x90d6, + 0x3f6e, 0x90d3, 0x3f69, 0x90d0, 0x3f63, 0x90cd, 0x3f5e, 0x90ca, + 0x3f58, 0x90c7, 0x3f53, 0x90c4, 0x3f4d, 0x90c1, 0x3f48, 0x90bd, + 0x3f43, 0x90ba, 0x3f3d, 0x90b7, 0x3f38, 0x90b4, 0x3f32, 0x90b1, + 0x3f2d, 0x90ae, 0x3f27, 0x90ab, 0x3f22, 0x90a8, 0x3f1c, 0x90a5, + 0x3f17, 0x90a1, 0x3f11, 0x909e, 0x3f0c, 0x909b, 0x3f06, 0x9098, + 0x3f01, 0x9095, 0x3efb, 0x9092, 0x3ef6, 0x908f, 0x3ef1, 0x908c, + 0x3eeb, 0x9089, 0x3ee6, 0x9086, 0x3ee0, 0x9083, 0x3edb, 0x907f, + 0x3ed5, 0x907c, 0x3ed0, 0x9079, 0x3eca, 0x9076, 0x3ec5, 0x9073, + 0x3ebf, 0x9070, 0x3eba, 0x906d, 0x3eb4, 0x906a, 0x3eaf, 0x9067, + 0x3ea9, 0x9064, 0x3ea4, 0x9061, 0x3e9e, 0x905e, 0x3e99, 0x905b, + 0x3e93, 0x9057, 0x3e8e, 0x9054, 0x3e88, 0x9051, 0x3e83, 0x904e, + 0x3e7d, 0x904b, 0x3e78, 0x9048, 0x3e73, 0x9045, 0x3e6d, 0x9042, + 0x3e68, 0x903f, 0x3e62, 0x903c, 0x3e5d, 0x9039, 0x3e57, 0x9036, + 0x3e52, 0x9033, 0x3e4c, 0x9030, 0x3e47, 0x902d, 0x3e41, 0x902a, + 0x3e3c, 0x9026, 0x3e36, 0x9023, 0x3e31, 0x9020, 0x3e2b, 0x901d, + 0x3e26, 0x901a, 0x3e20, 0x9017, 0x3e1b, 0x9014, 0x3e15, 0x9011, + 0x3e10, 0x900e, 0x3e0a, 0x900b, 0x3e05, 0x9008, 0x3dff, 0x9005, + 0x3dfa, 0x9002, 0x3df4, 0x8fff, 0x3def, 0x8ffc, 0x3de9, 0x8ff9, + 0x3de4, 0x8ff6, 0x3dde, 0x8ff3, 0x3dd9, 0x8ff0, 0x3dd3, 0x8fed, + 0x3dce, 0x8fea, 0x3dc8, 0x8fe7, 0x3dc3, 0x8fe3, 0x3dbd, 0x8fe0, + 0x3db8, 0x8fdd, 0x3db2, 0x8fda, 0x3dad, 0x8fd7, 0x3da7, 0x8fd4, + 0x3da2, 0x8fd1, 0x3d9c, 0x8fce, 0x3d97, 0x8fcb, 0x3d91, 0x8fc8, + 0x3d8c, 0x8fc5, 0x3d86, 0x8fc2, 0x3d81, 0x8fbf, 0x3d7b, 0x8fbc, + 0x3d76, 0x8fb9, 0x3d70, 0x8fb6, 0x3d6b, 0x8fb3, 0x3d65, 0x8fb0, + 0x3d60, 0x8fad, 0x3d5a, 0x8faa, 0x3d55, 0x8fa7, 0x3d4f, 0x8fa4, + 0x3d49, 0x8fa1, 0x3d44, 0x8f9e, 0x3d3e, 0x8f9b, 0x3d39, 0x8f98, + 0x3d33, 0x8f95, 0x3d2e, 0x8f92, 0x3d28, 0x8f8f, 0x3d23, 0x8f8c, + 0x3d1d, 0x8f89, 0x3d18, 0x8f86, 0x3d12, 0x8f83, 0x3d0d, 0x8f80, + 0x3d07, 0x8f7d, 0x3d02, 0x8f7a, 0x3cfc, 0x8f77, 0x3cf7, 0x8f74, + 0x3cf1, 0x8f71, 0x3cec, 0x8f6e, 0x3ce6, 0x8f6b, 0x3ce1, 0x8f68, + 0x3cdb, 0x8f65, 0x3cd6, 0x8f62, 0x3cd0, 0x8f5f, 0x3cca, 0x8f5c, + 0x3cc5, 0x8f59, 0x3cbf, 0x8f56, 0x3cba, 0x8f53, 0x3cb4, 0x8f50, + 0x3caf, 0x8f4d, 0x3ca9, 0x8f4a, 0x3ca4, 0x8f47, 0x3c9e, 0x8f44, + 0x3c99, 0x8f41, 0x3c93, 0x8f3e, 0x3c8e, 0x8f3b, 0x3c88, 0x8f38, + 0x3c83, 0x8f35, 0x3c7d, 0x8f32, 0x3c77, 0x8f2f, 0x3c72, 0x8f2d, + 0x3c6c, 0x8f2a, 0x3c67, 0x8f27, 0x3c61, 0x8f24, 0x3c5c, 0x8f21, + 0x3c56, 0x8f1e, 0x3c51, 0x8f1b, 0x3c4b, 0x8f18, 0x3c46, 0x8f15, + 0x3c40, 0x8f12, 0x3c3b, 0x8f0f, 0x3c35, 0x8f0c, 0x3c2f, 0x8f09, + 0x3c2a, 0x8f06, 0x3c24, 0x8f03, 0x3c1f, 0x8f00, 0x3c19, 0x8efd, + 0x3c14, 0x8efa, 0x3c0e, 0x8ef7, 0x3c09, 0x8ef4, 0x3c03, 0x8ef1, + 0x3bfd, 0x8eee, 0x3bf8, 0x8eec, 0x3bf2, 0x8ee9, 0x3bed, 0x8ee6, + 0x3be7, 0x8ee3, 0x3be2, 0x8ee0, 0x3bdc, 0x8edd, 0x3bd7, 0x8eda, + 0x3bd1, 0x8ed7, 0x3bcc, 0x8ed4, 0x3bc6, 0x8ed1, 0x3bc0, 0x8ece, + 0x3bbb, 0x8ecb, 0x3bb5, 0x8ec8, 0x3bb0, 0x8ec5, 0x3baa, 0x8ec2, + 0x3ba5, 0x8ebf, 0x3b9f, 0x8ebd, 0x3b99, 0x8eba, 0x3b94, 0x8eb7, + 0x3b8e, 0x8eb4, 0x3b89, 0x8eb1, 0x3b83, 0x8eae, 0x3b7e, 0x8eab, + 0x3b78, 0x8ea8, 0x3b73, 0x8ea5, 0x3b6d, 0x8ea2, 0x3b67, 0x8e9f, + 0x3b62, 0x8e9c, 0x3b5c, 0x8e99, 0x3b57, 0x8e97, 0x3b51, 0x8e94, + 0x3b4c, 0x8e91, 0x3b46, 0x8e8e, 0x3b40, 0x8e8b, 0x3b3b, 0x8e88, + 0x3b35, 0x8e85, 0x3b30, 0x8e82, 0x3b2a, 0x8e7f, 0x3b25, 0x8e7c, + 0x3b1f, 0x8e7a, 0x3b19, 0x8e77, 0x3b14, 0x8e74, 0x3b0e, 0x8e71, + 0x3b09, 0x8e6e, 0x3b03, 0x8e6b, 0x3afe, 0x8e68, 0x3af8, 0x8e65, + 0x3af2, 0x8e62, 0x3aed, 0x8e5f, 0x3ae7, 0x8e5d, 0x3ae2, 0x8e5a, + 0x3adc, 0x8e57, 0x3ad7, 0x8e54, 0x3ad1, 0x8e51, 0x3acb, 0x8e4e, + 0x3ac6, 0x8e4b, 0x3ac0, 0x8e48, 0x3abb, 0x8e45, 0x3ab5, 0x8e43, + 0x3aaf, 0x8e40, 0x3aaa, 0x8e3d, 0x3aa4, 0x8e3a, 0x3a9f, 0x8e37, + 0x3a99, 0x8e34, 0x3a94, 0x8e31, 0x3a8e, 0x8e2e, 0x3a88, 0x8e2c, + 0x3a83, 0x8e29, 0x3a7d, 0x8e26, 0x3a78, 0x8e23, 0x3a72, 0x8e20, + 0x3a6c, 0x8e1d, 0x3a67, 0x8e1a, 0x3a61, 0x8e17, 0x3a5c, 0x8e15, + 0x3a56, 0x8e12, 0x3a50, 0x8e0f, 0x3a4b, 0x8e0c, 0x3a45, 0x8e09, + 0x3a40, 0x8e06, 0x3a3a, 0x8e03, 0x3a34, 0x8e01, 0x3a2f, 0x8dfe, + 0x3a29, 0x8dfb, 0x3a24, 0x8df8, 0x3a1e, 0x8df5, 0x3a19, 0x8df2, + 0x3a13, 0x8def, 0x3a0d, 0x8ded, 0x3a08, 0x8dea, 0x3a02, 0x8de7, + 0x39fd, 0x8de4, 0x39f7, 0x8de1, 0x39f1, 0x8dde, 0x39ec, 0x8ddc, + 0x39e6, 0x8dd9, 0x39e0, 0x8dd6, 0x39db, 0x8dd3, 0x39d5, 0x8dd0, + 0x39d0, 0x8dcd, 0x39ca, 0x8dca, 0x39c4, 0x8dc8, 0x39bf, 0x8dc5, + 0x39b9, 0x8dc2, 0x39b4, 0x8dbf, 0x39ae, 0x8dbc, 0x39a8, 0x8db9, + 0x39a3, 0x8db7, 0x399d, 0x8db4, 0x3998, 0x8db1, 0x3992, 0x8dae, + 0x398c, 0x8dab, 0x3987, 0x8da9, 0x3981, 0x8da6, 0x397c, 0x8da3, + 0x3976, 0x8da0, 0x3970, 0x8d9d, 0x396b, 0x8d9a, 0x3965, 0x8d98, + 0x395f, 0x8d95, 0x395a, 0x8d92, 0x3954, 0x8d8f, 0x394f, 0x8d8c, + 0x3949, 0x8d8a, 0x3943, 0x8d87, 0x393e, 0x8d84, 0x3938, 0x8d81, + 0x3932, 0x8d7e, 0x392d, 0x8d7b, 0x3927, 0x8d79, 0x3922, 0x8d76, + 0x391c, 0x8d73, 0x3916, 0x8d70, 0x3911, 0x8d6d, 0x390b, 0x8d6b, + 0x3906, 0x8d68, 0x3900, 0x8d65, 0x38fa, 0x8d62, 0x38f5, 0x8d5f, + 0x38ef, 0x8d5d, 0x38e9, 0x8d5a, 0x38e4, 0x8d57, 0x38de, 0x8d54, + 0x38d8, 0x8d51, 0x38d3, 0x8d4f, 0x38cd, 0x8d4c, 0x38c8, 0x8d49, + 0x38c2, 0x8d46, 0x38bc, 0x8d44, 0x38b7, 0x8d41, 0x38b1, 0x8d3e, + 0x38ab, 0x8d3b, 0x38a6, 0x8d38, 0x38a0, 0x8d36, 0x389b, 0x8d33, + 0x3895, 0x8d30, 0x388f, 0x8d2d, 0x388a, 0x8d2b, 0x3884, 0x8d28, + 0x387e, 0x8d25, 0x3879, 0x8d22, 0x3873, 0x8d1f, 0x386d, 0x8d1d, + 0x3868, 0x8d1a, 0x3862, 0x8d17, 0x385d, 0x8d14, 0x3857, 0x8d12, + 0x3851, 0x8d0f, 0x384c, 0x8d0c, 0x3846, 0x8d09, 0x3840, 0x8d07, + 0x383b, 0x8d04, 0x3835, 0x8d01, 0x382f, 0x8cfe, 0x382a, 0x8cfb, + 0x3824, 0x8cf9, 0x381e, 0x8cf6, 0x3819, 0x8cf3, 0x3813, 0x8cf0, + 0x380d, 0x8cee, 0x3808, 0x8ceb, 0x3802, 0x8ce8, 0x37fd, 0x8ce5, + 0x37f7, 0x8ce3, 0x37f1, 0x8ce0, 0x37ec, 0x8cdd, 0x37e6, 0x8cda, + 0x37e0, 0x8cd8, 0x37db, 0x8cd5, 0x37d5, 0x8cd2, 0x37cf, 0x8cd0, + 0x37ca, 0x8ccd, 0x37c4, 0x8cca, 0x37be, 0x8cc7, 0x37b9, 0x8cc5, + 0x37b3, 0x8cc2, 0x37ad, 0x8cbf, 0x37a8, 0x8cbc, 0x37a2, 0x8cba, + 0x379c, 0x8cb7, 0x3797, 0x8cb4, 0x3791, 0x8cb1, 0x378b, 0x8caf, + 0x3786, 0x8cac, 0x3780, 0x8ca9, 0x377a, 0x8ca7, 0x3775, 0x8ca4, + 0x376f, 0x8ca1, 0x3769, 0x8c9e, 0x3764, 0x8c9c, 0x375e, 0x8c99, + 0x3758, 0x8c96, 0x3753, 0x8c94, 0x374d, 0x8c91, 0x3747, 0x8c8e, + 0x3742, 0x8c8b, 0x373c, 0x8c89, 0x3736, 0x8c86, 0x3731, 0x8c83, + 0x372b, 0x8c81, 0x3725, 0x8c7e, 0x3720, 0x8c7b, 0x371a, 0x8c78, + 0x3714, 0x8c76, 0x370f, 0x8c73, 0x3709, 0x8c70, 0x3703, 0x8c6e, + 0x36fe, 0x8c6b, 0x36f8, 0x8c68, 0x36f2, 0x8c65, 0x36ed, 0x8c63, + 0x36e7, 0x8c60, 0x36e1, 0x8c5d, 0x36dc, 0x8c5b, 0x36d6, 0x8c58, + 0x36d0, 0x8c55, 0x36cb, 0x8c53, 0x36c5, 0x8c50, 0x36bf, 0x8c4d, + 0x36ba, 0x8c4b, 0x36b4, 0x8c48, 0x36ae, 0x8c45, 0x36a9, 0x8c43, + 0x36a3, 0x8c40, 0x369d, 0x8c3d, 0x3698, 0x8c3a, 0x3692, 0x8c38, + 0x368c, 0x8c35, 0x3686, 0x8c32, 0x3681, 0x8c30, 0x367b, 0x8c2d, + 0x3675, 0x8c2a, 0x3670, 0x8c28, 0x366a, 0x8c25, 0x3664, 0x8c22, + 0x365f, 0x8c20, 0x3659, 0x8c1d, 0x3653, 0x8c1a, 0x364e, 0x8c18, + 0x3648, 0x8c15, 0x3642, 0x8c12, 0x363d, 0x8c10, 0x3637, 0x8c0d, + 0x3631, 0x8c0a, 0x362b, 0x8c08, 0x3626, 0x8c05, 0x3620, 0x8c02, + 0x361a, 0x8c00, 0x3615, 0x8bfd, 0x360f, 0x8bfa, 0x3609, 0x8bf8, + 0x3604, 0x8bf5, 0x35fe, 0x8bf3, 0x35f8, 0x8bf0, 0x35f3, 0x8bed, + 0x35ed, 0x8beb, 0x35e7, 0x8be8, 0x35e1, 0x8be5, 0x35dc, 0x8be3, + 0x35d6, 0x8be0, 0x35d0, 0x8bdd, 0x35cb, 0x8bdb, 0x35c5, 0x8bd8, + 0x35bf, 0x8bd5, 0x35ba, 0x8bd3, 0x35b4, 0x8bd0, 0x35ae, 0x8bce, + 0x35a8, 0x8bcb, 0x35a3, 0x8bc8, 0x359d, 0x8bc6, 0x3597, 0x8bc3, + 0x3592, 0x8bc0, 0x358c, 0x8bbe, 0x3586, 0x8bbb, 0x3580, 0x8bb8, + 0x357b, 0x8bb6, 0x3575, 0x8bb3, 0x356f, 0x8bb1, 0x356a, 0x8bae, + 0x3564, 0x8bab, 0x355e, 0x8ba9, 0x3558, 0x8ba6, 0x3553, 0x8ba4, + 0x354d, 0x8ba1, 0x3547, 0x8b9e, 0x3542, 0x8b9c, 0x353c, 0x8b99, + 0x3536, 0x8b96, 0x3530, 0x8b94, 0x352b, 0x8b91, 0x3525, 0x8b8f, + 0x351f, 0x8b8c, 0x351a, 0x8b89, 0x3514, 0x8b87, 0x350e, 0x8b84, + 0x3508, 0x8b82, 0x3503, 0x8b7f, 0x34fd, 0x8b7c, 0x34f7, 0x8b7a, + 0x34f2, 0x8b77, 0x34ec, 0x8b75, 0x34e6, 0x8b72, 0x34e0, 0x8b6f, + 0x34db, 0x8b6d, 0x34d5, 0x8b6a, 0x34cf, 0x8b68, 0x34ca, 0x8b65, + 0x34c4, 0x8b62, 0x34be, 0x8b60, 0x34b8, 0x8b5d, 0x34b3, 0x8b5b, + 0x34ad, 0x8b58, 0x34a7, 0x8b55, 0x34a1, 0x8b53, 0x349c, 0x8b50, + 0x3496, 0x8b4e, 0x3490, 0x8b4b, 0x348b, 0x8b49, 0x3485, 0x8b46, + 0x347f, 0x8b43, 0x3479, 0x8b41, 0x3474, 0x8b3e, 0x346e, 0x8b3c, + 0x3468, 0x8b39, 0x3462, 0x8b37, 0x345d, 0x8b34, 0x3457, 0x8b31, + 0x3451, 0x8b2f, 0x344b, 0x8b2c, 0x3446, 0x8b2a, 0x3440, 0x8b27, + 0x343a, 0x8b25, 0x3435, 0x8b22, 0x342f, 0x8b1f, 0x3429, 0x8b1d, + 0x3423, 0x8b1a, 0x341e, 0x8b18, 0x3418, 0x8b15, 0x3412, 0x8b13, + 0x340c, 0x8b10, 0x3407, 0x8b0e, 0x3401, 0x8b0b, 0x33fb, 0x8b08, + 0x33f5, 0x8b06, 0x33f0, 0x8b03, 0x33ea, 0x8b01, 0x33e4, 0x8afe, + 0x33de, 0x8afc, 0x33d9, 0x8af9, 0x33d3, 0x8af7, 0x33cd, 0x8af4, + 0x33c7, 0x8af1, 0x33c2, 0x8aef, 0x33bc, 0x8aec, 0x33b6, 0x8aea, + 0x33b0, 0x8ae7, 0x33ab, 0x8ae5, 0x33a5, 0x8ae2, 0x339f, 0x8ae0, + 0x3399, 0x8add, 0x3394, 0x8adb, 0x338e, 0x8ad8, 0x3388, 0x8ad6, + 0x3382, 0x8ad3, 0x337d, 0x8ad1, 0x3377, 0x8ace, 0x3371, 0x8acb, + 0x336b, 0x8ac9, 0x3366, 0x8ac6, 0x3360, 0x8ac4, 0x335a, 0x8ac1, + 0x3354, 0x8abf, 0x334f, 0x8abc, 0x3349, 0x8aba, 0x3343, 0x8ab7, + 0x333d, 0x8ab5, 0x3338, 0x8ab2, 0x3332, 0x8ab0, 0x332c, 0x8aad, + 0x3326, 0x8aab, 0x3321, 0x8aa8, 0x331b, 0x8aa6, 0x3315, 0x8aa3, + 0x330f, 0x8aa1, 0x330a, 0x8a9e, 0x3304, 0x8a9c, 0x32fe, 0x8a99, + 0x32f8, 0x8a97, 0x32f3, 0x8a94, 0x32ed, 0x8a92, 0x32e7, 0x8a8f, + 0x32e1, 0x8a8d, 0x32db, 0x8a8a, 0x32d6, 0x8a88, 0x32d0, 0x8a85, + 0x32ca, 0x8a83, 0x32c4, 0x8a80, 0x32bf, 0x8a7e, 0x32b9, 0x8a7b, + 0x32b3, 0x8a79, 0x32ad, 0x8a76, 0x32a8, 0x8a74, 0x32a2, 0x8a71, + 0x329c, 0x8a6f, 0x3296, 0x8a6c, 0x3290, 0x8a6a, 0x328b, 0x8a67, + 0x3285, 0x8a65, 0x327f, 0x8a62, 0x3279, 0x8a60, 0x3274, 0x8a5d, + 0x326e, 0x8a5b, 0x3268, 0x8a59, 0x3262, 0x8a56, 0x325d, 0x8a54, + 0x3257, 0x8a51, 0x3251, 0x8a4f, 0x324b, 0x8a4c, 0x3245, 0x8a4a, + 0x3240, 0x8a47, 0x323a, 0x8a45, 0x3234, 0x8a42, 0x322e, 0x8a40, + 0x3228, 0x8a3d, 0x3223, 0x8a3b, 0x321d, 0x8a38, 0x3217, 0x8a36, + 0x3211, 0x8a34, 0x320c, 0x8a31, 0x3206, 0x8a2f, 0x3200, 0x8a2c, + 0x31fa, 0x8a2a, 0x31f4, 0x8a27, 0x31ef, 0x8a25, 0x31e9, 0x8a22, + 0x31e3, 0x8a20, 0x31dd, 0x8a1d, 0x31d8, 0x8a1b, 0x31d2, 0x8a19, + 0x31cc, 0x8a16, 0x31c6, 0x8a14, 0x31c0, 0x8a11, 0x31bb, 0x8a0f, + 0x31b5, 0x8a0c, 0x31af, 0x8a0a, 0x31a9, 0x8a07, 0x31a3, 0x8a05, + 0x319e, 0x8a03, 0x3198, 0x8a00, 0x3192, 0x89fe, 0x318c, 0x89fb, + 0x3186, 0x89f9, 0x3181, 0x89f6, 0x317b, 0x89f4, 0x3175, 0x89f2, + 0x316f, 0x89ef, 0x3169, 0x89ed, 0x3164, 0x89ea, 0x315e, 0x89e8, + 0x3158, 0x89e5, 0x3152, 0x89e3, 0x314c, 0x89e1, 0x3147, 0x89de, + 0x3141, 0x89dc, 0x313b, 0x89d9, 0x3135, 0x89d7, 0x312f, 0x89d5, + 0x312a, 0x89d2, 0x3124, 0x89d0, 0x311e, 0x89cd, 0x3118, 0x89cb, + 0x3112, 0x89c8, 0x310d, 0x89c6, 0x3107, 0x89c4, 0x3101, 0x89c1, + 0x30fb, 0x89bf, 0x30f5, 0x89bc, 0x30f0, 0x89ba, 0x30ea, 0x89b8, + 0x30e4, 0x89b5, 0x30de, 0x89b3, 0x30d8, 0x89b0, 0x30d3, 0x89ae, + 0x30cd, 0x89ac, 0x30c7, 0x89a9, 0x30c1, 0x89a7, 0x30bb, 0x89a4, + 0x30b6, 0x89a2, 0x30b0, 0x89a0, 0x30aa, 0x899d, 0x30a4, 0x899b, + 0x309e, 0x8998, 0x3099, 0x8996, 0x3093, 0x8994, 0x308d, 0x8991, + 0x3087, 0x898f, 0x3081, 0x898d, 0x307b, 0x898a, 0x3076, 0x8988, + 0x3070, 0x8985, 0x306a, 0x8983, 0x3064, 0x8981, 0x305e, 0x897e, + 0x3059, 0x897c, 0x3053, 0x897a, 0x304d, 0x8977, 0x3047, 0x8975, + 0x3041, 0x8972, 0x303b, 0x8970, 0x3036, 0x896e, 0x3030, 0x896b, + 0x302a, 0x8969, 0x3024, 0x8967, 0x301e, 0x8964, 0x3019, 0x8962, + 0x3013, 0x8960, 0x300d, 0x895d, 0x3007, 0x895b, 0x3001, 0x8958, + 0x2ffb, 0x8956, 0x2ff6, 0x8954, 0x2ff0, 0x8951, 0x2fea, 0x894f, + 0x2fe4, 0x894d, 0x2fde, 0x894a, 0x2fd8, 0x8948, 0x2fd3, 0x8946, + 0x2fcd, 0x8943, 0x2fc7, 0x8941, 0x2fc1, 0x893f, 0x2fbb, 0x893c, + 0x2fb5, 0x893a, 0x2fb0, 0x8938, 0x2faa, 0x8935, 0x2fa4, 0x8933, + 0x2f9e, 0x8931, 0x2f98, 0x892e, 0x2f92, 0x892c, 0x2f8d, 0x892a, + 0x2f87, 0x8927, 0x2f81, 0x8925, 0x2f7b, 0x8923, 0x2f75, 0x8920, + 0x2f6f, 0x891e, 0x2f6a, 0x891c, 0x2f64, 0x8919, 0x2f5e, 0x8917, + 0x2f58, 0x8915, 0x2f52, 0x8912, 0x2f4c, 0x8910, 0x2f47, 0x890e, + 0x2f41, 0x890b, 0x2f3b, 0x8909, 0x2f35, 0x8907, 0x2f2f, 0x8904, + 0x2f29, 0x8902, 0x2f24, 0x8900, 0x2f1e, 0x88fd, 0x2f18, 0x88fb, + 0x2f12, 0x88f9, 0x2f0c, 0x88f6, 0x2f06, 0x88f4, 0x2f01, 0x88f2, + 0x2efb, 0x88f0, 0x2ef5, 0x88ed, 0x2eef, 0x88eb, 0x2ee9, 0x88e9, + 0x2ee3, 0x88e6, 0x2edd, 0x88e4, 0x2ed8, 0x88e2, 0x2ed2, 0x88df, + 0x2ecc, 0x88dd, 0x2ec6, 0x88db, 0x2ec0, 0x88d9, 0x2eba, 0x88d6, + 0x2eb5, 0x88d4, 0x2eaf, 0x88d2, 0x2ea9, 0x88cf, 0x2ea3, 0x88cd, + 0x2e9d, 0x88cb, 0x2e97, 0x88c8, 0x2e91, 0x88c6, 0x2e8c, 0x88c4, + 0x2e86, 0x88c2, 0x2e80, 0x88bf, 0x2e7a, 0x88bd, 0x2e74, 0x88bb, + 0x2e6e, 0x88b9, 0x2e68, 0x88b6, 0x2e63, 0x88b4, 0x2e5d, 0x88b2, + 0x2e57, 0x88af, 0x2e51, 0x88ad, 0x2e4b, 0x88ab, 0x2e45, 0x88a9, + 0x2e3f, 0x88a6, 0x2e3a, 0x88a4, 0x2e34, 0x88a2, 0x2e2e, 0x88a0, + 0x2e28, 0x889d, 0x2e22, 0x889b, 0x2e1c, 0x8899, 0x2e16, 0x8896, + 0x2e11, 0x8894, 0x2e0b, 0x8892, 0x2e05, 0x8890, 0x2dff, 0x888d, + 0x2df9, 0x888b, 0x2df3, 0x8889, 0x2ded, 0x8887, 0x2de7, 0x8884, + 0x2de2, 0x8882, 0x2ddc, 0x8880, 0x2dd6, 0x887e, 0x2dd0, 0x887b, + 0x2dca, 0x8879, 0x2dc4, 0x8877, 0x2dbe, 0x8875, 0x2db9, 0x8872, + 0x2db3, 0x8870, 0x2dad, 0x886e, 0x2da7, 0x886c, 0x2da1, 0x8869, + 0x2d9b, 0x8867, 0x2d95, 0x8865, 0x2d8f, 0x8863, 0x2d8a, 0x8860, + 0x2d84, 0x885e, 0x2d7e, 0x885c, 0x2d78, 0x885a, 0x2d72, 0x8858, + 0x2d6c, 0x8855, 0x2d66, 0x8853, 0x2d60, 0x8851, 0x2d5b, 0x884f, + 0x2d55, 0x884c, 0x2d4f, 0x884a, 0x2d49, 0x8848, 0x2d43, 0x8846, + 0x2d3d, 0x8844, 0x2d37, 0x8841, 0x2d31, 0x883f, 0x2d2c, 0x883d, + 0x2d26, 0x883b, 0x2d20, 0x8838, 0x2d1a, 0x8836, 0x2d14, 0x8834, + 0x2d0e, 0x8832, 0x2d08, 0x8830, 0x2d02, 0x882d, 0x2cfd, 0x882b, + 0x2cf7, 0x8829, 0x2cf1, 0x8827, 0x2ceb, 0x8825, 0x2ce5, 0x8822, + 0x2cdf, 0x8820, 0x2cd9, 0x881e, 0x2cd3, 0x881c, 0x2ccd, 0x881a, + 0x2cc8, 0x8817, 0x2cc2, 0x8815, 0x2cbc, 0x8813, 0x2cb6, 0x8811, + 0x2cb0, 0x880f, 0x2caa, 0x880c, 0x2ca4, 0x880a, 0x2c9e, 0x8808, + 0x2c98, 0x8806, 0x2c93, 0x8804, 0x2c8d, 0x8801, 0x2c87, 0x87ff, + 0x2c81, 0x87fd, 0x2c7b, 0x87fb, 0x2c75, 0x87f9, 0x2c6f, 0x87f6, + 0x2c69, 0x87f4, 0x2c63, 0x87f2, 0x2c5e, 0x87f0, 0x2c58, 0x87ee, + 0x2c52, 0x87ec, 0x2c4c, 0x87e9, 0x2c46, 0x87e7, 0x2c40, 0x87e5, + 0x2c3a, 0x87e3, 0x2c34, 0x87e1, 0x2c2e, 0x87df, 0x2c29, 0x87dc, + 0x2c23, 0x87da, 0x2c1d, 0x87d8, 0x2c17, 0x87d6, 0x2c11, 0x87d4, + 0x2c0b, 0x87d2, 0x2c05, 0x87cf, 0x2bff, 0x87cd, 0x2bf9, 0x87cb, + 0x2bf3, 0x87c9, 0x2bee, 0x87c7, 0x2be8, 0x87c5, 0x2be2, 0x87c2, + 0x2bdc, 0x87c0, 0x2bd6, 0x87be, 0x2bd0, 0x87bc, 0x2bca, 0x87ba, + 0x2bc4, 0x87b8, 0x2bbe, 0x87b6, 0x2bb8, 0x87b3, 0x2bb2, 0x87b1, + 0x2bad, 0x87af, 0x2ba7, 0x87ad, 0x2ba1, 0x87ab, 0x2b9b, 0x87a9, + 0x2b95, 0x87a7, 0x2b8f, 0x87a4, 0x2b89, 0x87a2, 0x2b83, 0x87a0, + 0x2b7d, 0x879e, 0x2b77, 0x879c, 0x2b71, 0x879a, 0x2b6c, 0x8798, + 0x2b66, 0x8795, 0x2b60, 0x8793, 0x2b5a, 0x8791, 0x2b54, 0x878f, + 0x2b4e, 0x878d, 0x2b48, 0x878b, 0x2b42, 0x8789, 0x2b3c, 0x8787, + 0x2b36, 0x8784, 0x2b30, 0x8782, 0x2b2b, 0x8780, 0x2b25, 0x877e, + 0x2b1f, 0x877c, 0x2b19, 0x877a, 0x2b13, 0x8778, 0x2b0d, 0x8776, + 0x2b07, 0x8774, 0x2b01, 0x8771, 0x2afb, 0x876f, 0x2af5, 0x876d, + 0x2aef, 0x876b, 0x2ae9, 0x8769, 0x2ae4, 0x8767, 0x2ade, 0x8765, + 0x2ad8, 0x8763, 0x2ad2, 0x8761, 0x2acc, 0x875e, 0x2ac6, 0x875c, + 0x2ac0, 0x875a, 0x2aba, 0x8758, 0x2ab4, 0x8756, 0x2aae, 0x8754, + 0x2aa8, 0x8752, 0x2aa2, 0x8750, 0x2a9c, 0x874e, 0x2a97, 0x874c, + 0x2a91, 0x874a, 0x2a8b, 0x8747, 0x2a85, 0x8745, 0x2a7f, 0x8743, + 0x2a79, 0x8741, 0x2a73, 0x873f, 0x2a6d, 0x873d, 0x2a67, 0x873b, + 0x2a61, 0x8739, 0x2a5b, 0x8737, 0x2a55, 0x8735, 0x2a4f, 0x8733, + 0x2a49, 0x8731, 0x2a44, 0x872e, 0x2a3e, 0x872c, 0x2a38, 0x872a, + 0x2a32, 0x8728, 0x2a2c, 0x8726, 0x2a26, 0x8724, 0x2a20, 0x8722, + 0x2a1a, 0x8720, 0x2a14, 0x871e, 0x2a0e, 0x871c, 0x2a08, 0x871a, + 0x2a02, 0x8718, 0x29fc, 0x8716, 0x29f6, 0x8714, 0x29f0, 0x8712, + 0x29eb, 0x870f, 0x29e5, 0x870d, 0x29df, 0x870b, 0x29d9, 0x8709, + 0x29d3, 0x8707, 0x29cd, 0x8705, 0x29c7, 0x8703, 0x29c1, 0x8701, + 0x29bb, 0x86ff, 0x29b5, 0x86fd, 0x29af, 0x86fb, 0x29a9, 0x86f9, + 0x29a3, 0x86f7, 0x299d, 0x86f5, 0x2997, 0x86f3, 0x2991, 0x86f1, + 0x298b, 0x86ef, 0x2986, 0x86ed, 0x2980, 0x86eb, 0x297a, 0x86e9, + 0x2974, 0x86e7, 0x296e, 0x86e4, 0x2968, 0x86e2, 0x2962, 0x86e0, + 0x295c, 0x86de, 0x2956, 0x86dc, 0x2950, 0x86da, 0x294a, 0x86d8, + 0x2944, 0x86d6, 0x293e, 0x86d4, 0x2938, 0x86d2, 0x2932, 0x86d0, + 0x292c, 0x86ce, 0x2926, 0x86cc, 0x2920, 0x86ca, 0x291b, 0x86c8, + 0x2915, 0x86c6, 0x290f, 0x86c4, 0x2909, 0x86c2, 0x2903, 0x86c0, + 0x28fd, 0x86be, 0x28f7, 0x86bc, 0x28f1, 0x86ba, 0x28eb, 0x86b8, + 0x28e5, 0x86b6, 0x28df, 0x86b4, 0x28d9, 0x86b2, 0x28d3, 0x86b0, + 0x28cd, 0x86ae, 0x28c7, 0x86ac, 0x28c1, 0x86aa, 0x28bb, 0x86a8, + 0x28b5, 0x86a6, 0x28af, 0x86a4, 0x28a9, 0x86a2, 0x28a3, 0x86a0, + 0x289d, 0x869e, 0x2898, 0x869c, 0x2892, 0x869a, 0x288c, 0x8698, + 0x2886, 0x8696, 0x2880, 0x8694, 0x287a, 0x8692, 0x2874, 0x8690, + 0x286e, 0x868e, 0x2868, 0x868c, 0x2862, 0x868a, 0x285c, 0x8688, + 0x2856, 0x8686, 0x2850, 0x8684, 0x284a, 0x8682, 0x2844, 0x8680, + 0x283e, 0x867e, 0x2838, 0x867c, 0x2832, 0x867a, 0x282c, 0x8678, + 0x2826, 0x8676, 0x2820, 0x8674, 0x281a, 0x8672, 0x2814, 0x8670, + 0x280e, 0x866e, 0x2808, 0x866d, 0x2802, 0x866b, 0x27fc, 0x8669, + 0x27f6, 0x8667, 0x27f1, 0x8665, 0x27eb, 0x8663, 0x27e5, 0x8661, + 0x27df, 0x865f, 0x27d9, 0x865d, 0x27d3, 0x865b, 0x27cd, 0x8659, + 0x27c7, 0x8657, 0x27c1, 0x8655, 0x27bb, 0x8653, 0x27b5, 0x8651, + 0x27af, 0x864f, 0x27a9, 0x864d, 0x27a3, 0x864b, 0x279d, 0x8649, + 0x2797, 0x8647, 0x2791, 0x8645, 0x278b, 0x8644, 0x2785, 0x8642, + 0x277f, 0x8640, 0x2779, 0x863e, 0x2773, 0x863c, 0x276d, 0x863a, + 0x2767, 0x8638, 0x2761, 0x8636, 0x275b, 0x8634, 0x2755, 0x8632, + 0x274f, 0x8630, 0x2749, 0x862e, 0x2743, 0x862c, 0x273d, 0x862a, + 0x2737, 0x8628, 0x2731, 0x8627, 0x272b, 0x8625, 0x2725, 0x8623, + 0x271f, 0x8621, 0x2719, 0x861f, 0x2713, 0x861d, 0x270d, 0x861b, + 0x2707, 0x8619, 0x2701, 0x8617, 0x26fb, 0x8615, 0x26f5, 0x8613, + 0x26ef, 0x8611, 0x26e9, 0x8610, 0x26e4, 0x860e, 0x26de, 0x860c, + 0x26d8, 0x860a, 0x26d2, 0x8608, 0x26cc, 0x8606, 0x26c6, 0x8604, + 0x26c0, 0x8602, 0x26ba, 0x8600, 0x26b4, 0x85fe, 0x26ae, 0x85fc, + 0x26a8, 0x85fb, 0x26a2, 0x85f9, 0x269c, 0x85f7, 0x2696, 0x85f5, + 0x2690, 0x85f3, 0x268a, 0x85f1, 0x2684, 0x85ef, 0x267e, 0x85ed, + 0x2678, 0x85eb, 0x2672, 0x85ea, 0x266c, 0x85e8, 0x2666, 0x85e6, + 0x2660, 0x85e4, 0x265a, 0x85e2, 0x2654, 0x85e0, 0x264e, 0x85de, + 0x2648, 0x85dc, 0x2642, 0x85da, 0x263c, 0x85d9, 0x2636, 0x85d7, + 0x2630, 0x85d5, 0x262a, 0x85d3, 0x2624, 0x85d1, 0x261e, 0x85cf, + 0x2618, 0x85cd, 0x2612, 0x85cb, 0x260c, 0x85ca, 0x2606, 0x85c8, + 0x2600, 0x85c6, 0x25fa, 0x85c4, 0x25f4, 0x85c2, 0x25ee, 0x85c0, + 0x25e8, 0x85be, 0x25e2, 0x85bd, 0x25dc, 0x85bb, 0x25d6, 0x85b9, + 0x25d0, 0x85b7, 0x25ca, 0x85b5, 0x25c4, 0x85b3, 0x25be, 0x85b1, + 0x25b8, 0x85b0, 0x25b2, 0x85ae, 0x25ac, 0x85ac, 0x25a6, 0x85aa, + 0x25a0, 0x85a8, 0x259a, 0x85a6, 0x2594, 0x85a4, 0x258e, 0x85a3, + 0x2588, 0x85a1, 0x2582, 0x859f, 0x257c, 0x859d, 0x2576, 0x859b, + 0x2570, 0x8599, 0x256a, 0x8598, 0x2564, 0x8596, 0x255e, 0x8594, + 0x2558, 0x8592, 0x2552, 0x8590, 0x254c, 0x858e, 0x2546, 0x858d, + 0x2540, 0x858b, 0x253a, 0x8589, 0x2534, 0x8587, 0x252e, 0x8585, + 0x2528, 0x8583, 0x2522, 0x8582, 0x251c, 0x8580, 0x2516, 0x857e, + 0x250f, 0x857c, 0x2509, 0x857a, 0x2503, 0x8579, 0x24fd, 0x8577, + 0x24f7, 0x8575, 0x24f1, 0x8573, 0x24eb, 0x8571, 0x24e5, 0x856f, + 0x24df, 0x856e, 0x24d9, 0x856c, 0x24d3, 0x856a, 0x24cd, 0x8568, + 0x24c7, 0x8566, 0x24c1, 0x8565, 0x24bb, 0x8563, 0x24b5, 0x8561, + 0x24af, 0x855f, 0x24a9, 0x855d, 0x24a3, 0x855c, 0x249d, 0x855a, + 0x2497, 0x8558, 0x2491, 0x8556, 0x248b, 0x8554, 0x2485, 0x8553, + 0x247f, 0x8551, 0x2479, 0x854f, 0x2473, 0x854d, 0x246d, 0x854b, + 0x2467, 0x854a, 0x2461, 0x8548, 0x245b, 0x8546, 0x2455, 0x8544, + 0x244f, 0x8543, 0x2449, 0x8541, 0x2443, 0x853f, 0x243d, 0x853d, + 0x2437, 0x853b, 0x2431, 0x853a, 0x242b, 0x8538, 0x2425, 0x8536, + 0x241f, 0x8534, 0x2419, 0x8533, 0x2413, 0x8531, 0x240d, 0x852f, + 0x2407, 0x852d, 0x2401, 0x852b, 0x23fa, 0x852a, 0x23f4, 0x8528, + 0x23ee, 0x8526, 0x23e8, 0x8524, 0x23e2, 0x8523, 0x23dc, 0x8521, + 0x23d6, 0x851f, 0x23d0, 0x851d, 0x23ca, 0x851c, 0x23c4, 0x851a, + 0x23be, 0x8518, 0x23b8, 0x8516, 0x23b2, 0x8515, 0x23ac, 0x8513, + 0x23a6, 0x8511, 0x23a0, 0x850f, 0x239a, 0x850e, 0x2394, 0x850c, + 0x238e, 0x850a, 0x2388, 0x8508, 0x2382, 0x8507, 0x237c, 0x8505, + 0x2376, 0x8503, 0x2370, 0x8501, 0x236a, 0x8500, 0x2364, 0x84fe, + 0x235e, 0x84fc, 0x2358, 0x84fa, 0x2352, 0x84f9, 0x234b, 0x84f7, + 0x2345, 0x84f5, 0x233f, 0x84f4, 0x2339, 0x84f2, 0x2333, 0x84f0, + 0x232d, 0x84ee, 0x2327, 0x84ed, 0x2321, 0x84eb, 0x231b, 0x84e9, + 0x2315, 0x84e7, 0x230f, 0x84e6, 0x2309, 0x84e4, 0x2303, 0x84e2, + 0x22fd, 0x84e1, 0x22f7, 0x84df, 0x22f1, 0x84dd, 0x22eb, 0x84db, + 0x22e5, 0x84da, 0x22df, 0x84d8, 0x22d9, 0x84d6, 0x22d3, 0x84d5, + 0x22cd, 0x84d3, 0x22c7, 0x84d1, 0x22c0, 0x84cf, 0x22ba, 0x84ce, + 0x22b4, 0x84cc, 0x22ae, 0x84ca, 0x22a8, 0x84c9, 0x22a2, 0x84c7, + 0x229c, 0x84c5, 0x2296, 0x84c4, 0x2290, 0x84c2, 0x228a, 0x84c0, + 0x2284, 0x84be, 0x227e, 0x84bd, 0x2278, 0x84bb, 0x2272, 0x84b9, + 0x226c, 0x84b8, 0x2266, 0x84b6, 0x2260, 0x84b4, 0x225a, 0x84b3, + 0x2254, 0x84b1, 0x224e, 0x84af, 0x2247, 0x84ae, 0x2241, 0x84ac, + 0x223b, 0x84aa, 0x2235, 0x84a9, 0x222f, 0x84a7, 0x2229, 0x84a5, + 0x2223, 0x84a3, 0x221d, 0x84a2, 0x2217, 0x84a0, 0x2211, 0x849e, + 0x220b, 0x849d, 0x2205, 0x849b, 0x21ff, 0x8499, 0x21f9, 0x8498, + 0x21f3, 0x8496, 0x21ed, 0x8494, 0x21e7, 0x8493, 0x21e1, 0x8491, + 0x21da, 0x848f, 0x21d4, 0x848e, 0x21ce, 0x848c, 0x21c8, 0x848a, + 0x21c2, 0x8489, 0x21bc, 0x8487, 0x21b6, 0x8486, 0x21b0, 0x8484, + 0x21aa, 0x8482, 0x21a4, 0x8481, 0x219e, 0x847f, 0x2198, 0x847d, + 0x2192, 0x847c, 0x218c, 0x847a, 0x2186, 0x8478, 0x2180, 0x8477, + 0x2179, 0x8475, 0x2173, 0x8473, 0x216d, 0x8472, 0x2167, 0x8470, + 0x2161, 0x846e, 0x215b, 0x846d, 0x2155, 0x846b, 0x214f, 0x846a, + 0x2149, 0x8468, 0x2143, 0x8466, 0x213d, 0x8465, 0x2137, 0x8463, + 0x2131, 0x8461, 0x212b, 0x8460, 0x2125, 0x845e, 0x211e, 0x845d, + 0x2118, 0x845b, 0x2112, 0x8459, 0x210c, 0x8458, 0x2106, 0x8456, + 0x2100, 0x8454, 0x20fa, 0x8453, 0x20f4, 0x8451, 0x20ee, 0x8450, + 0x20e8, 0x844e, 0x20e2, 0x844c, 0x20dc, 0x844b, 0x20d6, 0x8449, + 0x20d0, 0x8447, 0x20c9, 0x8446, 0x20c3, 0x8444, 0x20bd, 0x8443, + 0x20b7, 0x8441, 0x20b1, 0x843f, 0x20ab, 0x843e, 0x20a5, 0x843c, + 0x209f, 0x843b, 0x2099, 0x8439, 0x2093, 0x8437, 0x208d, 0x8436, + 0x2087, 0x8434, 0x2081, 0x8433, 0x207a, 0x8431, 0x2074, 0x842f, + 0x206e, 0x842e, 0x2068, 0x842c, 0x2062, 0x842b, 0x205c, 0x8429, + 0x2056, 0x8427, 0x2050, 0x8426, 0x204a, 0x8424, 0x2044, 0x8423, + 0x203e, 0x8421, 0x2038, 0x8420, 0x2032, 0x841e, 0x202b, 0x841c, + 0x2025, 0x841b, 0x201f, 0x8419, 0x2019, 0x8418, 0x2013, 0x8416, + 0x200d, 0x8415, 0x2007, 0x8413, 0x2001, 0x8411, 0x1ffb, 0x8410, + 0x1ff5, 0x840e, 0x1fef, 0x840d, 0x1fe9, 0x840b, 0x1fe2, 0x840a, + 0x1fdc, 0x8408, 0x1fd6, 0x8406, 0x1fd0, 0x8405, 0x1fca, 0x8403, + 0x1fc4, 0x8402, 0x1fbe, 0x8400, 0x1fb8, 0x83ff, 0x1fb2, 0x83fd, + 0x1fac, 0x83fb, 0x1fa6, 0x83fa, 0x1f9f, 0x83f8, 0x1f99, 0x83f7, + 0x1f93, 0x83f5, 0x1f8d, 0x83f4, 0x1f87, 0x83f2, 0x1f81, 0x83f1, + 0x1f7b, 0x83ef, 0x1f75, 0x83ee, 0x1f6f, 0x83ec, 0x1f69, 0x83ea, + 0x1f63, 0x83e9, 0x1f5d, 0x83e7, 0x1f56, 0x83e6, 0x1f50, 0x83e4, + 0x1f4a, 0x83e3, 0x1f44, 0x83e1, 0x1f3e, 0x83e0, 0x1f38, 0x83de, + 0x1f32, 0x83dd, 0x1f2c, 0x83db, 0x1f26, 0x83da, 0x1f20, 0x83d8, + 0x1f19, 0x83d7, 0x1f13, 0x83d5, 0x1f0d, 0x83d3, 0x1f07, 0x83d2, + 0x1f01, 0x83d0, 0x1efb, 0x83cf, 0x1ef5, 0x83cd, 0x1eef, 0x83cc, + 0x1ee9, 0x83ca, 0x1ee3, 0x83c9, 0x1edd, 0x83c7, 0x1ed6, 0x83c6, + 0x1ed0, 0x83c4, 0x1eca, 0x83c3, 0x1ec4, 0x83c1, 0x1ebe, 0x83c0, + 0x1eb8, 0x83be, 0x1eb2, 0x83bd, 0x1eac, 0x83bb, 0x1ea6, 0x83ba, + 0x1ea0, 0x83b8, 0x1e99, 0x83b7, 0x1e93, 0x83b5, 0x1e8d, 0x83b4, + 0x1e87, 0x83b2, 0x1e81, 0x83b1, 0x1e7b, 0x83af, 0x1e75, 0x83ae, + 0x1e6f, 0x83ac, 0x1e69, 0x83ab, 0x1e62, 0x83a9, 0x1e5c, 0x83a8, + 0x1e56, 0x83a6, 0x1e50, 0x83a5, 0x1e4a, 0x83a3, 0x1e44, 0x83a2, + 0x1e3e, 0x83a0, 0x1e38, 0x839f, 0x1e32, 0x839d, 0x1e2c, 0x839c, + 0x1e25, 0x839a, 0x1e1f, 0x8399, 0x1e19, 0x8397, 0x1e13, 0x8396, + 0x1e0d, 0x8394, 0x1e07, 0x8393, 0x1e01, 0x8392, 0x1dfb, 0x8390, + 0x1df5, 0x838f, 0x1dee, 0x838d, 0x1de8, 0x838c, 0x1de2, 0x838a, + 0x1ddc, 0x8389, 0x1dd6, 0x8387, 0x1dd0, 0x8386, 0x1dca, 0x8384, + 0x1dc4, 0x8383, 0x1dbe, 0x8381, 0x1db7, 0x8380, 0x1db1, 0x837e, + 0x1dab, 0x837d, 0x1da5, 0x837c, 0x1d9f, 0x837a, 0x1d99, 0x8379, + 0x1d93, 0x8377, 0x1d8d, 0x8376, 0x1d87, 0x8374, 0x1d80, 0x8373, + 0x1d7a, 0x8371, 0x1d74, 0x8370, 0x1d6e, 0x836f, 0x1d68, 0x836d, + 0x1d62, 0x836c, 0x1d5c, 0x836a, 0x1d56, 0x8369, 0x1d50, 0x8367, + 0x1d49, 0x8366, 0x1d43, 0x8364, 0x1d3d, 0x8363, 0x1d37, 0x8362, + 0x1d31, 0x8360, 0x1d2b, 0x835f, 0x1d25, 0x835d, 0x1d1f, 0x835c, + 0x1d18, 0x835a, 0x1d12, 0x8359, 0x1d0c, 0x8358, 0x1d06, 0x8356, + 0x1d00, 0x8355, 0x1cfa, 0x8353, 0x1cf4, 0x8352, 0x1cee, 0x8350, + 0x1ce8, 0x834f, 0x1ce1, 0x834e, 0x1cdb, 0x834c, 0x1cd5, 0x834b, + 0x1ccf, 0x8349, 0x1cc9, 0x8348, 0x1cc3, 0x8347, 0x1cbd, 0x8345, + 0x1cb7, 0x8344, 0x1cb0, 0x8342, 0x1caa, 0x8341, 0x1ca4, 0x833f, + 0x1c9e, 0x833e, 0x1c98, 0x833d, 0x1c92, 0x833b, 0x1c8c, 0x833a, + 0x1c86, 0x8338, 0x1c7f, 0x8337, 0x1c79, 0x8336, 0x1c73, 0x8334, + 0x1c6d, 0x8333, 0x1c67, 0x8331, 0x1c61, 0x8330, 0x1c5b, 0x832f, + 0x1c55, 0x832d, 0x1c4e, 0x832c, 0x1c48, 0x832b, 0x1c42, 0x8329, + 0x1c3c, 0x8328, 0x1c36, 0x8326, 0x1c30, 0x8325, 0x1c2a, 0x8324, + 0x1c24, 0x8322, 0x1c1d, 0x8321, 0x1c17, 0x831f, 0x1c11, 0x831e, + 0x1c0b, 0x831d, 0x1c05, 0x831b, 0x1bff, 0x831a, 0x1bf9, 0x8319, + 0x1bf2, 0x8317, 0x1bec, 0x8316, 0x1be6, 0x8314, 0x1be0, 0x8313, + 0x1bda, 0x8312, 0x1bd4, 0x8310, 0x1bce, 0x830f, 0x1bc8, 0x830e, + 0x1bc1, 0x830c, 0x1bbb, 0x830b, 0x1bb5, 0x830a, 0x1baf, 0x8308, + 0x1ba9, 0x8307, 0x1ba3, 0x8305, 0x1b9d, 0x8304, 0x1b96, 0x8303, + 0x1b90, 0x8301, 0x1b8a, 0x8300, 0x1b84, 0x82ff, 0x1b7e, 0x82fd, + 0x1b78, 0x82fc, 0x1b72, 0x82fb, 0x1b6c, 0x82f9, 0x1b65, 0x82f8, + 0x1b5f, 0x82f7, 0x1b59, 0x82f5, 0x1b53, 0x82f4, 0x1b4d, 0x82f3, + 0x1b47, 0x82f1, 0x1b41, 0x82f0, 0x1b3a, 0x82ef, 0x1b34, 0x82ed, + 0x1b2e, 0x82ec, 0x1b28, 0x82eb, 0x1b22, 0x82e9, 0x1b1c, 0x82e8, + 0x1b16, 0x82e7, 0x1b0f, 0x82e5, 0x1b09, 0x82e4, 0x1b03, 0x82e3, + 0x1afd, 0x82e1, 0x1af7, 0x82e0, 0x1af1, 0x82df, 0x1aeb, 0x82dd, + 0x1ae4, 0x82dc, 0x1ade, 0x82db, 0x1ad8, 0x82d9, 0x1ad2, 0x82d8, + 0x1acc, 0x82d7, 0x1ac6, 0x82d5, 0x1ac0, 0x82d4, 0x1ab9, 0x82d3, + 0x1ab3, 0x82d1, 0x1aad, 0x82d0, 0x1aa7, 0x82cf, 0x1aa1, 0x82ce, + 0x1a9b, 0x82cc, 0x1a95, 0x82cb, 0x1a8e, 0x82ca, 0x1a88, 0x82c8, + 0x1a82, 0x82c7, 0x1a7c, 0x82c6, 0x1a76, 0x82c4, 0x1a70, 0x82c3, + 0x1a6a, 0x82c2, 0x1a63, 0x82c1, 0x1a5d, 0x82bf, 0x1a57, 0x82be, + 0x1a51, 0x82bd, 0x1a4b, 0x82bb, 0x1a45, 0x82ba, 0x1a3e, 0x82b9, + 0x1a38, 0x82b7, 0x1a32, 0x82b6, 0x1a2c, 0x82b5, 0x1a26, 0x82b4, + 0x1a20, 0x82b2, 0x1a1a, 0x82b1, 0x1a13, 0x82b0, 0x1a0d, 0x82ae, + 0x1a07, 0x82ad, 0x1a01, 0x82ac, 0x19fb, 0x82ab, 0x19f5, 0x82a9, + 0x19ef, 0x82a8, 0x19e8, 0x82a7, 0x19e2, 0x82a6, 0x19dc, 0x82a4, + 0x19d6, 0x82a3, 0x19d0, 0x82a2, 0x19ca, 0x82a0, 0x19c3, 0x829f, + 0x19bd, 0x829e, 0x19b7, 0x829d, 0x19b1, 0x829b, 0x19ab, 0x829a, + 0x19a5, 0x8299, 0x199f, 0x8298, 0x1998, 0x8296, 0x1992, 0x8295, + 0x198c, 0x8294, 0x1986, 0x8293, 0x1980, 0x8291, 0x197a, 0x8290, + 0x1973, 0x828f, 0x196d, 0x828e, 0x1967, 0x828c, 0x1961, 0x828b, + 0x195b, 0x828a, 0x1955, 0x8289, 0x194e, 0x8287, 0x1948, 0x8286, + 0x1942, 0x8285, 0x193c, 0x8284, 0x1936, 0x8282, 0x1930, 0x8281, + 0x192a, 0x8280, 0x1923, 0x827f, 0x191d, 0x827e, 0x1917, 0x827c, + 0x1911, 0x827b, 0x190b, 0x827a, 0x1905, 0x8279, 0x18fe, 0x8277, + 0x18f8, 0x8276, 0x18f2, 0x8275, 0x18ec, 0x8274, 0x18e6, 0x8272, + 0x18e0, 0x8271, 0x18d9, 0x8270, 0x18d3, 0x826f, 0x18cd, 0x826e, + 0x18c7, 0x826c, 0x18c1, 0x826b, 0x18bb, 0x826a, 0x18b4, 0x8269, + 0x18ae, 0x8268, 0x18a8, 0x8266, 0x18a2, 0x8265, 0x189c, 0x8264, + 0x1896, 0x8263, 0x188f, 0x8261, 0x1889, 0x8260, 0x1883, 0x825f, + 0x187d, 0x825e, 0x1877, 0x825d, 0x1871, 0x825b, 0x186a, 0x825a, + 0x1864, 0x8259, 0x185e, 0x8258, 0x1858, 0x8257, 0x1852, 0x8255, + 0x184c, 0x8254, 0x1845, 0x8253, 0x183f, 0x8252, 0x1839, 0x8251, + 0x1833, 0x8250, 0x182d, 0x824e, 0x1827, 0x824d, 0x1820, 0x824c, + 0x181a, 0x824b, 0x1814, 0x824a, 0x180e, 0x8248, 0x1808, 0x8247, + 0x1802, 0x8246, 0x17fb, 0x8245, 0x17f5, 0x8244, 0x17ef, 0x8243, + 0x17e9, 0x8241, 0x17e3, 0x8240, 0x17dd, 0x823f, 0x17d6, 0x823e, + 0x17d0, 0x823d, 0x17ca, 0x823b, 0x17c4, 0x823a, 0x17be, 0x8239, + 0x17b7, 0x8238, 0x17b1, 0x8237, 0x17ab, 0x8236, 0x17a5, 0x8234, + 0x179f, 0x8233, 0x1799, 0x8232, 0x1792, 0x8231, 0x178c, 0x8230, + 0x1786, 0x822f, 0x1780, 0x822e, 0x177a, 0x822c, 0x1774, 0x822b, + 0x176d, 0x822a, 0x1767, 0x8229, 0x1761, 0x8228, 0x175b, 0x8227, + 0x1755, 0x8226, 0x174e, 0x8224, 0x1748, 0x8223, 0x1742, 0x8222, + 0x173c, 0x8221, 0x1736, 0x8220, 0x1730, 0x821f, 0x1729, 0x821e, + 0x1723, 0x821c, 0x171d, 0x821b, 0x1717, 0x821a, 0x1711, 0x8219, + 0x170a, 0x8218, 0x1704, 0x8217, 0x16fe, 0x8216, 0x16f8, 0x8214, + 0x16f2, 0x8213, 0x16ec, 0x8212, 0x16e5, 0x8211, 0x16df, 0x8210, + 0x16d9, 0x820f, 0x16d3, 0x820e, 0x16cd, 0x820d, 0x16c6, 0x820b, + 0x16c0, 0x820a, 0x16ba, 0x8209, 0x16b4, 0x8208, 0x16ae, 0x8207, + 0x16a8, 0x8206, 0x16a1, 0x8205, 0x169b, 0x8204, 0x1695, 0x8203, + 0x168f, 0x8201, 0x1689, 0x8200, 0x1682, 0x81ff, 0x167c, 0x81fe, + 0x1676, 0x81fd, 0x1670, 0x81fc, 0x166a, 0x81fb, 0x1664, 0x81fa, + 0x165d, 0x81f9, 0x1657, 0x81f8, 0x1651, 0x81f6, 0x164b, 0x81f5, + 0x1645, 0x81f4, 0x163e, 0x81f3, 0x1638, 0x81f2, 0x1632, 0x81f1, + 0x162c, 0x81f0, 0x1626, 0x81ef, 0x161f, 0x81ee, 0x1619, 0x81ed, + 0x1613, 0x81ec, 0x160d, 0x81ea, 0x1607, 0x81e9, 0x1601, 0x81e8, + 0x15fa, 0x81e7, 0x15f4, 0x81e6, 0x15ee, 0x81e5, 0x15e8, 0x81e4, + 0x15e2, 0x81e3, 0x15db, 0x81e2, 0x15d5, 0x81e1, 0x15cf, 0x81e0, + 0x15c9, 0x81df, 0x15c3, 0x81de, 0x15bc, 0x81dc, 0x15b6, 0x81db, + 0x15b0, 0x81da, 0x15aa, 0x81d9, 0x15a4, 0x81d8, 0x159d, 0x81d7, + 0x1597, 0x81d6, 0x1591, 0x81d5, 0x158b, 0x81d4, 0x1585, 0x81d3, + 0x157f, 0x81d2, 0x1578, 0x81d1, 0x1572, 0x81d0, 0x156c, 0x81cf, + 0x1566, 0x81ce, 0x1560, 0x81cd, 0x1559, 0x81cc, 0x1553, 0x81cb, + 0x154d, 0x81c9, 0x1547, 0x81c8, 0x1541, 0x81c7, 0x153a, 0x81c6, + 0x1534, 0x81c5, 0x152e, 0x81c4, 0x1528, 0x81c3, 0x1522, 0x81c2, + 0x151b, 0x81c1, 0x1515, 0x81c0, 0x150f, 0x81bf, 0x1509, 0x81be, + 0x1503, 0x81bd, 0x14fc, 0x81bc, 0x14f6, 0x81bb, 0x14f0, 0x81ba, + 0x14ea, 0x81b9, 0x14e4, 0x81b8, 0x14dd, 0x81b7, 0x14d7, 0x81b6, + 0x14d1, 0x81b5, 0x14cb, 0x81b4, 0x14c5, 0x81b3, 0x14be, 0x81b2, + 0x14b8, 0x81b1, 0x14b2, 0x81b0, 0x14ac, 0x81af, 0x14a6, 0x81ae, + 0x149f, 0x81ad, 0x1499, 0x81ac, 0x1493, 0x81ab, 0x148d, 0x81aa, + 0x1487, 0x81a9, 0x1480, 0x81a8, 0x147a, 0x81a7, 0x1474, 0x81a6, + 0x146e, 0x81a5, 0x1468, 0x81a4, 0x1461, 0x81a3, 0x145b, 0x81a2, + 0x1455, 0x81a1, 0x144f, 0x81a0, 0x1449, 0x819f, 0x1442, 0x819e, + 0x143c, 0x819d, 0x1436, 0x819c, 0x1430, 0x819b, 0x142a, 0x819a, + 0x1423, 0x8199, 0x141d, 0x8198, 0x1417, 0x8197, 0x1411, 0x8196, + 0x140b, 0x8195, 0x1404, 0x8194, 0x13fe, 0x8193, 0x13f8, 0x8192, + 0x13f2, 0x8191, 0x13eb, 0x8190, 0x13e5, 0x818f, 0x13df, 0x818e, + 0x13d9, 0x818d, 0x13d3, 0x818c, 0x13cc, 0x818b, 0x13c6, 0x818a, + 0x13c0, 0x8189, 0x13ba, 0x8188, 0x13b4, 0x8187, 0x13ad, 0x8186, + 0x13a7, 0x8185, 0x13a1, 0x8184, 0x139b, 0x8183, 0x1395, 0x8182, + 0x138e, 0x8181, 0x1388, 0x8180, 0x1382, 0x817f, 0x137c, 0x817e, + 0x1376, 0x817d, 0x136f, 0x817c, 0x1369, 0x817c, 0x1363, 0x817b, + 0x135d, 0x817a, 0x1356, 0x8179, 0x1350, 0x8178, 0x134a, 0x8177, + 0x1344, 0x8176, 0x133e, 0x8175, 0x1337, 0x8174, 0x1331, 0x8173, + 0x132b, 0x8172, 0x1325, 0x8171, 0x131f, 0x8170, 0x1318, 0x816f, + 0x1312, 0x816e, 0x130c, 0x816d, 0x1306, 0x816c, 0x12ff, 0x816c, + 0x12f9, 0x816b, 0x12f3, 0x816a, 0x12ed, 0x8169, 0x12e7, 0x8168, + 0x12e0, 0x8167, 0x12da, 0x8166, 0x12d4, 0x8165, 0x12ce, 0x8164, + 0x12c8, 0x8163, 0x12c1, 0x8162, 0x12bb, 0x8161, 0x12b5, 0x8160, + 0x12af, 0x815f, 0x12a8, 0x815f, 0x12a2, 0x815e, 0x129c, 0x815d, + 0x1296, 0x815c, 0x1290, 0x815b, 0x1289, 0x815a, 0x1283, 0x8159, + 0x127d, 0x8158, 0x1277, 0x8157, 0x1271, 0x8156, 0x126a, 0x8155, + 0x1264, 0x8155, 0x125e, 0x8154, 0x1258, 0x8153, 0x1251, 0x8152, + 0x124b, 0x8151, 0x1245, 0x8150, 0x123f, 0x814f, 0x1239, 0x814e, + 0x1232, 0x814d, 0x122c, 0x814c, 0x1226, 0x814c, 0x1220, 0x814b, + 0x1219, 0x814a, 0x1213, 0x8149, 0x120d, 0x8148, 0x1207, 0x8147, + 0x1201, 0x8146, 0x11fa, 0x8145, 0x11f4, 0x8145, 0x11ee, 0x8144, + 0x11e8, 0x8143, 0x11e1, 0x8142, 0x11db, 0x8141, 0x11d5, 0x8140, + 0x11cf, 0x813f, 0x11c9, 0x813e, 0x11c2, 0x813d, 0x11bc, 0x813d, + 0x11b6, 0x813c, 0x11b0, 0x813b, 0x11a9, 0x813a, 0x11a3, 0x8139, + 0x119d, 0x8138, 0x1197, 0x8137, 0x1191, 0x8137, 0x118a, 0x8136, + 0x1184, 0x8135, 0x117e, 0x8134, 0x1178, 0x8133, 0x1171, 0x8132, + 0x116b, 0x8131, 0x1165, 0x8131, 0x115f, 0x8130, 0x1159, 0x812f, + 0x1152, 0x812e, 0x114c, 0x812d, 0x1146, 0x812c, 0x1140, 0x812b, + 0x1139, 0x812b, 0x1133, 0x812a, 0x112d, 0x8129, 0x1127, 0x8128, + 0x1121, 0x8127, 0x111a, 0x8126, 0x1114, 0x8126, 0x110e, 0x8125, + 0x1108, 0x8124, 0x1101, 0x8123, 0x10fb, 0x8122, 0x10f5, 0x8121, + 0x10ef, 0x8121, 0x10e8, 0x8120, 0x10e2, 0x811f, 0x10dc, 0x811e, + 0x10d6, 0x811d, 0x10d0, 0x811c, 0x10c9, 0x811c, 0x10c3, 0x811b, + 0x10bd, 0x811a, 0x10b7, 0x8119, 0x10b0, 0x8118, 0x10aa, 0x8117, + 0x10a4, 0x8117, 0x109e, 0x8116, 0x1098, 0x8115, 0x1091, 0x8114, + 0x108b, 0x8113, 0x1085, 0x8113, 0x107f, 0x8112, 0x1078, 0x8111, + 0x1072, 0x8110, 0x106c, 0x810f, 0x1066, 0x810f, 0x105f, 0x810e, + 0x1059, 0x810d, 0x1053, 0x810c, 0x104d, 0x810b, 0x1047, 0x810b, + 0x1040, 0x810a, 0x103a, 0x8109, 0x1034, 0x8108, 0x102e, 0x8107, + 0x1027, 0x8107, 0x1021, 0x8106, 0x101b, 0x8105, 0x1015, 0x8104, + 0x100e, 0x8103, 0x1008, 0x8103, 0x1002, 0x8102, 0xffc, 0x8101, + 0xff5, 0x8100, 0xfef, 0x80ff, 0xfe9, 0x80ff, 0xfe3, 0x80fe, + 0xfdd, 0x80fd, 0xfd6, 0x80fc, 0xfd0, 0x80fc, 0xfca, 0x80fb, + 0xfc4, 0x80fa, 0xfbd, 0x80f9, 0xfb7, 0x80f8, 0xfb1, 0x80f8, + 0xfab, 0x80f7, 0xfa4, 0x80f6, 0xf9e, 0x80f5, 0xf98, 0x80f5, + 0xf92, 0x80f4, 0xf8b, 0x80f3, 0xf85, 0x80f2, 0xf7f, 0x80f2, + 0xf79, 0x80f1, 0xf73, 0x80f0, 0xf6c, 0x80ef, 0xf66, 0x80ef, + 0xf60, 0x80ee, 0xf5a, 0x80ed, 0xf53, 0x80ec, 0xf4d, 0x80ec, + 0xf47, 0x80eb, 0xf41, 0x80ea, 0xf3a, 0x80e9, 0xf34, 0x80e9, + 0xf2e, 0x80e8, 0xf28, 0x80e7, 0xf21, 0x80e6, 0xf1b, 0x80e6, + 0xf15, 0x80e5, 0xf0f, 0x80e4, 0xf08, 0x80e3, 0xf02, 0x80e3, + 0xefc, 0x80e2, 0xef6, 0x80e1, 0xef0, 0x80e0, 0xee9, 0x80e0, + 0xee3, 0x80df, 0xedd, 0x80de, 0xed7, 0x80dd, 0xed0, 0x80dd, + 0xeca, 0x80dc, 0xec4, 0x80db, 0xebe, 0x80db, 0xeb7, 0x80da, + 0xeb1, 0x80d9, 0xeab, 0x80d8, 0xea5, 0x80d8, 0xe9e, 0x80d7, + 0xe98, 0x80d6, 0xe92, 0x80d6, 0xe8c, 0x80d5, 0xe85, 0x80d4, + 0xe7f, 0x80d3, 0xe79, 0x80d3, 0xe73, 0x80d2, 0xe6c, 0x80d1, + 0xe66, 0x80d1, 0xe60, 0x80d0, 0xe5a, 0x80cf, 0xe53, 0x80ce, + 0xe4d, 0x80ce, 0xe47, 0x80cd, 0xe41, 0x80cc, 0xe3a, 0x80cc, + 0xe34, 0x80cb, 0xe2e, 0x80ca, 0xe28, 0x80ca, 0xe22, 0x80c9, + 0xe1b, 0x80c8, 0xe15, 0x80c7, 0xe0f, 0x80c7, 0xe09, 0x80c6, + 0xe02, 0x80c5, 0xdfc, 0x80c5, 0xdf6, 0x80c4, 0xdf0, 0x80c3, + 0xde9, 0x80c3, 0xde3, 0x80c2, 0xddd, 0x80c1, 0xdd7, 0x80c1, + 0xdd0, 0x80c0, 0xdca, 0x80bf, 0xdc4, 0x80bf, 0xdbe, 0x80be, + 0xdb7, 0x80bd, 0xdb1, 0x80bd, 0xdab, 0x80bc, 0xda5, 0x80bb, + 0xd9e, 0x80bb, 0xd98, 0x80ba, 0xd92, 0x80b9, 0xd8c, 0x80b9, + 0xd85, 0x80b8, 0xd7f, 0x80b7, 0xd79, 0x80b7, 0xd73, 0x80b6, + 0xd6c, 0x80b5, 0xd66, 0x80b5, 0xd60, 0x80b4, 0xd5a, 0x80b3, + 0xd53, 0x80b3, 0xd4d, 0x80b2, 0xd47, 0x80b1, 0xd41, 0x80b1, + 0xd3a, 0x80b0, 0xd34, 0x80af, 0xd2e, 0x80af, 0xd28, 0x80ae, + 0xd21, 0x80ad, 0xd1b, 0x80ad, 0xd15, 0x80ac, 0xd0f, 0x80ab, + 0xd08, 0x80ab, 0xd02, 0x80aa, 0xcfc, 0x80aa, 0xcf6, 0x80a9, + 0xcef, 0x80a8, 0xce9, 0x80a8, 0xce3, 0x80a7, 0xcdd, 0x80a6, + 0xcd6, 0x80a6, 0xcd0, 0x80a5, 0xcca, 0x80a5, 0xcc4, 0x80a4, + 0xcbd, 0x80a3, 0xcb7, 0x80a3, 0xcb1, 0x80a2, 0xcab, 0x80a1, + 0xca4, 0x80a1, 0xc9e, 0x80a0, 0xc98, 0x80a0, 0xc92, 0x809f, + 0xc8b, 0x809e, 0xc85, 0x809e, 0xc7f, 0x809d, 0xc79, 0x809c, + 0xc72, 0x809c, 0xc6c, 0x809b, 0xc66, 0x809b, 0xc60, 0x809a, + 0xc59, 0x8099, 0xc53, 0x8099, 0xc4d, 0x8098, 0xc47, 0x8098, + 0xc40, 0x8097, 0xc3a, 0x8096, 0xc34, 0x8096, 0xc2e, 0x8095, + 0xc27, 0x8095, 0xc21, 0x8094, 0xc1b, 0x8093, 0xc14, 0x8093, + 0xc0e, 0x8092, 0xc08, 0x8092, 0xc02, 0x8091, 0xbfb, 0x8090, + 0xbf5, 0x8090, 0xbef, 0x808f, 0xbe9, 0x808f, 0xbe2, 0x808e, + 0xbdc, 0x808e, 0xbd6, 0x808d, 0xbd0, 0x808c, 0xbc9, 0x808c, + 0xbc3, 0x808b, 0xbbd, 0x808b, 0xbb7, 0x808a, 0xbb0, 0x8089, + 0xbaa, 0x8089, 0xba4, 0x8088, 0xb9e, 0x8088, 0xb97, 0x8087, + 0xb91, 0x8087, 0xb8b, 0x8086, 0xb85, 0x8085, 0xb7e, 0x8085, + 0xb78, 0x8084, 0xb72, 0x8084, 0xb6c, 0x8083, 0xb65, 0x8083, + 0xb5f, 0x8082, 0xb59, 0x8082, 0xb53, 0x8081, 0xb4c, 0x8080, + 0xb46, 0x8080, 0xb40, 0x807f, 0xb3a, 0x807f, 0xb33, 0x807e, + 0xb2d, 0x807e, 0xb27, 0x807d, 0xb20, 0x807d, 0xb1a, 0x807c, + 0xb14, 0x807b, 0xb0e, 0x807b, 0xb07, 0x807a, 0xb01, 0x807a, + 0xafb, 0x8079, 0xaf5, 0x8079, 0xaee, 0x8078, 0xae8, 0x8078, + 0xae2, 0x8077, 0xadc, 0x8077, 0xad5, 0x8076, 0xacf, 0x8076, + 0xac9, 0x8075, 0xac3, 0x8075, 0xabc, 0x8074, 0xab6, 0x8073, + 0xab0, 0x8073, 0xaaa, 0x8072, 0xaa3, 0x8072, 0xa9d, 0x8071, + 0xa97, 0x8071, 0xa90, 0x8070, 0xa8a, 0x8070, 0xa84, 0x806f, + 0xa7e, 0x806f, 0xa77, 0x806e, 0xa71, 0x806e, 0xa6b, 0x806d, + 0xa65, 0x806d, 0xa5e, 0x806c, 0xa58, 0x806c, 0xa52, 0x806b, + 0xa4c, 0x806b, 0xa45, 0x806a, 0xa3f, 0x806a, 0xa39, 0x8069, + 0xa33, 0x8069, 0xa2c, 0x8068, 0xa26, 0x8068, 0xa20, 0x8067, + 0xa19, 0x8067, 0xa13, 0x8066, 0xa0d, 0x8066, 0xa07, 0x8065, + 0xa00, 0x8065, 0x9fa, 0x8064, 0x9f4, 0x8064, 0x9ee, 0x8063, + 0x9e7, 0x8063, 0x9e1, 0x8062, 0x9db, 0x8062, 0x9d5, 0x8061, + 0x9ce, 0x8061, 0x9c8, 0x8060, 0x9c2, 0x8060, 0x9bc, 0x805f, + 0x9b5, 0x805f, 0x9af, 0x805e, 0x9a9, 0x805e, 0x9a2, 0x805d, + 0x99c, 0x805d, 0x996, 0x805d, 0x990, 0x805c, 0x989, 0x805c, + 0x983, 0x805b, 0x97d, 0x805b, 0x977, 0x805a, 0x970, 0x805a, + 0x96a, 0x8059, 0x964, 0x8059, 0x95e, 0x8058, 0x957, 0x8058, + 0x951, 0x8057, 0x94b, 0x8057, 0x944, 0x8057, 0x93e, 0x8056, + 0x938, 0x8056, 0x932, 0x8055, 0x92b, 0x8055, 0x925, 0x8054, + 0x91f, 0x8054, 0x919, 0x8053, 0x912, 0x8053, 0x90c, 0x8052, + 0x906, 0x8052, 0x900, 0x8052, 0x8f9, 0x8051, 0x8f3, 0x8051, + 0x8ed, 0x8050, 0x8e6, 0x8050, 0x8e0, 0x804f, 0x8da, 0x804f, + 0x8d4, 0x804f, 0x8cd, 0x804e, 0x8c7, 0x804e, 0x8c1, 0x804d, + 0x8bb, 0x804d, 0x8b4, 0x804c, 0x8ae, 0x804c, 0x8a8, 0x804c, + 0x8a2, 0x804b, 0x89b, 0x804b, 0x895, 0x804a, 0x88f, 0x804a, + 0x888, 0x8049, 0x882, 0x8049, 0x87c, 0x8049, 0x876, 0x8048, + 0x86f, 0x8048, 0x869, 0x8047, 0x863, 0x8047, 0x85d, 0x8047, + 0x856, 0x8046, 0x850, 0x8046, 0x84a, 0x8045, 0x843, 0x8045, + 0x83d, 0x8044, 0x837, 0x8044, 0x831, 0x8044, 0x82a, 0x8043, + 0x824, 0x8043, 0x81e, 0x8042, 0x818, 0x8042, 0x811, 0x8042, + 0x80b, 0x8041, 0x805, 0x8041, 0x7fe, 0x8040, 0x7f8, 0x8040, + 0x7f2, 0x8040, 0x7ec, 0x803f, 0x7e5, 0x803f, 0x7df, 0x803f, + 0x7d9, 0x803e, 0x7d3, 0x803e, 0x7cc, 0x803d, 0x7c6, 0x803d, + 0x7c0, 0x803d, 0x7ba, 0x803c, 0x7b3, 0x803c, 0x7ad, 0x803b, + 0x7a7, 0x803b, 0x7a0, 0x803b, 0x79a, 0x803a, 0x794, 0x803a, + 0x78e, 0x803a, 0x787, 0x8039, 0x781, 0x8039, 0x77b, 0x8039, + 0x775, 0x8038, 0x76e, 0x8038, 0x768, 0x8037, 0x762, 0x8037, + 0x75b, 0x8037, 0x755, 0x8036, 0x74f, 0x8036, 0x749, 0x8036, + 0x742, 0x8035, 0x73c, 0x8035, 0x736, 0x8035, 0x730, 0x8034, + 0x729, 0x8034, 0x723, 0x8033, 0x71d, 0x8033, 0x716, 0x8033, + 0x710, 0x8032, 0x70a, 0x8032, 0x704, 0x8032, 0x6fd, 0x8031, + 0x6f7, 0x8031, 0x6f1, 0x8031, 0x6ea, 0x8030, 0x6e4, 0x8030, + 0x6de, 0x8030, 0x6d8, 0x802f, 0x6d1, 0x802f, 0x6cb, 0x802f, + 0x6c5, 0x802e, 0x6bf, 0x802e, 0x6b8, 0x802e, 0x6b2, 0x802d, + 0x6ac, 0x802d, 0x6a5, 0x802d, 0x69f, 0x802c, 0x699, 0x802c, + 0x693, 0x802c, 0x68c, 0x802b, 0x686, 0x802b, 0x680, 0x802b, + 0x67a, 0x802a, 0x673, 0x802a, 0x66d, 0x802a, 0x667, 0x802a, + 0x660, 0x8029, 0x65a, 0x8029, 0x654, 0x8029, 0x64e, 0x8028, + 0x647, 0x8028, 0x641, 0x8028, 0x63b, 0x8027, 0x635, 0x8027, + 0x62e, 0x8027, 0x628, 0x8026, 0x622, 0x8026, 0x61b, 0x8026, + 0x615, 0x8026, 0x60f, 0x8025, 0x609, 0x8025, 0x602, 0x8025, + 0x5fc, 0x8024, 0x5f6, 0x8024, 0x5ef, 0x8024, 0x5e9, 0x8023, + 0x5e3, 0x8023, 0x5dd, 0x8023, 0x5d6, 0x8023, 0x5d0, 0x8022, + 0x5ca, 0x8022, 0x5c4, 0x8022, 0x5bd, 0x8021, 0x5b7, 0x8021, + 0x5b1, 0x8021, 0x5aa, 0x8021, 0x5a4, 0x8020, 0x59e, 0x8020, + 0x598, 0x8020, 0x591, 0x8020, 0x58b, 0x801f, 0x585, 0x801f, + 0x57f, 0x801f, 0x578, 0x801e, 0x572, 0x801e, 0x56c, 0x801e, + 0x565, 0x801e, 0x55f, 0x801d, 0x559, 0x801d, 0x553, 0x801d, + 0x54c, 0x801d, 0x546, 0x801c, 0x540, 0x801c, 0x539, 0x801c, + 0x533, 0x801c, 0x52d, 0x801b, 0x527, 0x801b, 0x520, 0x801b, + 0x51a, 0x801b, 0x514, 0x801a, 0x50d, 0x801a, 0x507, 0x801a, + 0x501, 0x801a, 0x4fb, 0x8019, 0x4f4, 0x8019, 0x4ee, 0x8019, + 0x4e8, 0x8019, 0x4e2, 0x8018, 0x4db, 0x8018, 0x4d5, 0x8018, + 0x4cf, 0x8018, 0x4c8, 0x8017, 0x4c2, 0x8017, 0x4bc, 0x8017, + 0x4b6, 0x8017, 0x4af, 0x8016, 0x4a9, 0x8016, 0x4a3, 0x8016, + 0x49c, 0x8016, 0x496, 0x8016, 0x490, 0x8015, 0x48a, 0x8015, + 0x483, 0x8015, 0x47d, 0x8015, 0x477, 0x8014, 0x471, 0x8014, + 0x46a, 0x8014, 0x464, 0x8014, 0x45e, 0x8014, 0x457, 0x8013, + 0x451, 0x8013, 0x44b, 0x8013, 0x445, 0x8013, 0x43e, 0x8013, + 0x438, 0x8012, 0x432, 0x8012, 0x42b, 0x8012, 0x425, 0x8012, + 0x41f, 0x8012, 0x419, 0x8011, 0x412, 0x8011, 0x40c, 0x8011, + 0x406, 0x8011, 0x3ff, 0x8011, 0x3f9, 0x8010, 0x3f3, 0x8010, + 0x3ed, 0x8010, 0x3e6, 0x8010, 0x3e0, 0x8010, 0x3da, 0x800f, + 0x3d4, 0x800f, 0x3cd, 0x800f, 0x3c7, 0x800f, 0x3c1, 0x800f, + 0x3ba, 0x800e, 0x3b4, 0x800e, 0x3ae, 0x800e, 0x3a8, 0x800e, + 0x3a1, 0x800e, 0x39b, 0x800e, 0x395, 0x800d, 0x38e, 0x800d, + 0x388, 0x800d, 0x382, 0x800d, 0x37c, 0x800d, 0x375, 0x800c, + 0x36f, 0x800c, 0x369, 0x800c, 0x362, 0x800c, 0x35c, 0x800c, + 0x356, 0x800c, 0x350, 0x800b, 0x349, 0x800b, 0x343, 0x800b, + 0x33d, 0x800b, 0x337, 0x800b, 0x330, 0x800b, 0x32a, 0x800b, + 0x324, 0x800a, 0x31d, 0x800a, 0x317, 0x800a, 0x311, 0x800a, + 0x30b, 0x800a, 0x304, 0x800a, 0x2fe, 0x8009, 0x2f8, 0x8009, + 0x2f1, 0x8009, 0x2eb, 0x8009, 0x2e5, 0x8009, 0x2df, 0x8009, + 0x2d8, 0x8009, 0x2d2, 0x8008, 0x2cc, 0x8008, 0x2c5, 0x8008, + 0x2bf, 0x8008, 0x2b9, 0x8008, 0x2b3, 0x8008, 0x2ac, 0x8008, + 0x2a6, 0x8008, 0x2a0, 0x8007, 0x299, 0x8007, 0x293, 0x8007, + 0x28d, 0x8007, 0x287, 0x8007, 0x280, 0x8007, 0x27a, 0x8007, + 0x274, 0x8007, 0x26d, 0x8006, 0x267, 0x8006, 0x261, 0x8006, + 0x25b, 0x8006, 0x254, 0x8006, 0x24e, 0x8006, 0x248, 0x8006, + 0x242, 0x8006, 0x23b, 0x8005, 0x235, 0x8005, 0x22f, 0x8005, + 0x228, 0x8005, 0x222, 0x8005, 0x21c, 0x8005, 0x216, 0x8005, + 0x20f, 0x8005, 0x209, 0x8005, 0x203, 0x8005, 0x1fc, 0x8004, + 0x1f6, 0x8004, 0x1f0, 0x8004, 0x1ea, 0x8004, 0x1e3, 0x8004, + 0x1dd, 0x8004, 0x1d7, 0x8004, 0x1d0, 0x8004, 0x1ca, 0x8004, + 0x1c4, 0x8004, 0x1be, 0x8004, 0x1b7, 0x8003, 0x1b1, 0x8003, + 0x1ab, 0x8003, 0x1a4, 0x8003, 0x19e, 0x8003, 0x198, 0x8003, + 0x192, 0x8003, 0x18b, 0x8003, 0x185, 0x8003, 0x17f, 0x8003, + 0x178, 0x8003, 0x172, 0x8003, 0x16c, 0x8003, 0x166, 0x8002, + 0x15f, 0x8002, 0x159, 0x8002, 0x153, 0x8002, 0x14d, 0x8002, + 0x146, 0x8002, 0x140, 0x8002, 0x13a, 0x8002, 0x133, 0x8002, + 0x12d, 0x8002, 0x127, 0x8002, 0x121, 0x8002, 0x11a, 0x8002, + 0x114, 0x8002, 0x10e, 0x8002, 0x107, 0x8002, 0x101, 0x8002, + 0xfb, 0x8001, 0xf5, 0x8001, 0xee, 0x8001, 0xe8, 0x8001, + 0xe2, 0x8001, 0xdb, 0x8001, 0xd5, 0x8001, 0xcf, 0x8001, + 0xc9, 0x8001, 0xc2, 0x8001, 0xbc, 0x8001, 0xb6, 0x8001, + 0xaf, 0x8001, 0xa9, 0x8001, 0xa3, 0x8001, 0x9d, 0x8001, + 0x96, 0x8001, 0x90, 0x8001, 0x8a, 0x8001, 0x83, 0x8001, + 0x7d, 0x8001, 0x77, 0x8001, 0x71, 0x8001, 0x6a, 0x8001, + 0x64, 0x8001, 0x5e, 0x8001, 0x57, 0x8001, 0x51, 0x8001, + 0x4b, 0x8001, 0x45, 0x8001, 0x3e, 0x8001, 0x38, 0x8001, + 0x32, 0x8001, 0x2b, 0x8001, 0x25, 0x8001, 0x1f, 0x8001, + 0x19, 0x8001, 0x12, 0x8001, 0xc, 0x8001, 0x6, 0x8001, +}; + + +/** +* \par +* cosFactor tables are generated using the formula :
 cos_factors[n] = 2 * cos((2n+1)*pi/(4*N)) 
+* \par +* C command to generate the table +*
    
+* for(i = 0; i< N; i++)    
+* {    
+*   cos_factors[i]= 2 * cos((2*i+1)*c/2);    
+* } 
+* \par +* where N is the number of factors to generate and c is pi/(2*N) +* \par +* Then converted to q15 format by multiplying with 2^31 and saturated if required. + +*/ + +static const q15_t ALIGN4 cos_factorsQ15_128[128] = { + 0x7fff, 0x7ffa, 0x7ff0, 0x7fe1, 0x7fce, 0x7fb5, 0x7f97, 0x7f75, + 0x7f4d, 0x7f21, 0x7ef0, 0x7eba, 0x7e7f, 0x7e3f, 0x7dfa, 0x7db0, + 0x7d62, 0x7d0f, 0x7cb7, 0x7c5a, 0x7bf8, 0x7b92, 0x7b26, 0x7ab6, + 0x7a42, 0x79c8, 0x794a, 0x78c7, 0x7840, 0x77b4, 0x7723, 0x768e, + 0x75f4, 0x7555, 0x74b2, 0x740b, 0x735f, 0x72af, 0x71fa, 0x7141, + 0x7083, 0x6fc1, 0x6efb, 0x6e30, 0x6d62, 0x6c8f, 0x6bb8, 0x6adc, + 0x69fd, 0x6919, 0x6832, 0x6746, 0x6657, 0x6563, 0x646c, 0x6371, + 0x6271, 0x616f, 0x6068, 0x5f5e, 0x5e50, 0x5d3e, 0x5c29, 0x5b10, + 0x59f3, 0x58d4, 0x57b0, 0x568a, 0x5560, 0x5433, 0x5302, 0x51ce, + 0x5097, 0x4f5e, 0x4e21, 0x4ce1, 0x4b9e, 0x4a58, 0x490f, 0x47c3, + 0x4675, 0x4524, 0x43d0, 0x427a, 0x4121, 0x3fc5, 0x3e68, 0x3d07, + 0x3ba5, 0x3a40, 0x38d8, 0x376f, 0x3604, 0x3496, 0x3326, 0x31b5, + 0x3041, 0x2ecc, 0x2d55, 0x2bdc, 0x2a61, 0x28e5, 0x2767, 0x25e8, + 0x2467, 0x22e5, 0x2161, 0x1fdc, 0x1e56, 0x1ccf, 0x1b47, 0x19bd, + 0x1833, 0x16a8, 0x151b, 0x138e, 0x1201, 0x1072, 0xee3, 0xd53, + 0xbc3, 0xa33, 0x8a2, 0x710, 0x57f, 0x3ed, 0x25b, 0xc9 +}; + +static const q15_t ALIGN4 cos_factorsQ15_512[512] = { + 0x7fff, 0x7fff, 0x7fff, 0x7ffe, 0x7ffc, 0x7ffb, 0x7ff9, 0x7ff7, + 0x7ff4, 0x7ff2, 0x7fee, 0x7feb, 0x7fe7, 0x7fe3, 0x7fdf, 0x7fda, + 0x7fd6, 0x7fd0, 0x7fcb, 0x7fc5, 0x7fbf, 0x7fb8, 0x7fb1, 0x7faa, + 0x7fa3, 0x7f9b, 0x7f93, 0x7f8b, 0x7f82, 0x7f79, 0x7f70, 0x7f67, + 0x7f5d, 0x7f53, 0x7f48, 0x7f3d, 0x7f32, 0x7f27, 0x7f1b, 0x7f0f, + 0x7f03, 0x7ef6, 0x7ee9, 0x7edc, 0x7ecf, 0x7ec1, 0x7eb3, 0x7ea4, + 0x7e95, 0x7e86, 0x7e77, 0x7e67, 0x7e57, 0x7e47, 0x7e37, 0x7e26, + 0x7e14, 0x7e03, 0x7df1, 0x7ddf, 0x7dcd, 0x7dba, 0x7da7, 0x7d94, + 0x7d80, 0x7d6c, 0x7d58, 0x7d43, 0x7d2f, 0x7d19, 0x7d04, 0x7cee, + 0x7cd8, 0x7cc2, 0x7cab, 0x7c94, 0x7c7d, 0x7c66, 0x7c4e, 0x7c36, + 0x7c1d, 0x7c05, 0x7beb, 0x7bd2, 0x7bb9, 0x7b9f, 0x7b84, 0x7b6a, + 0x7b4f, 0x7b34, 0x7b19, 0x7afd, 0x7ae1, 0x7ac5, 0x7aa8, 0x7a8b, + 0x7a6e, 0x7a50, 0x7a33, 0x7a15, 0x79f6, 0x79d8, 0x79b9, 0x7999, + 0x797a, 0x795a, 0x793a, 0x7919, 0x78f9, 0x78d8, 0x78b6, 0x7895, + 0x7873, 0x7851, 0x782e, 0x780c, 0x77e9, 0x77c5, 0x77a2, 0x777e, + 0x775a, 0x7735, 0x7710, 0x76eb, 0x76c6, 0x76a0, 0x767b, 0x7654, + 0x762e, 0x7607, 0x75e0, 0x75b9, 0x7591, 0x7569, 0x7541, 0x7519, + 0x74f0, 0x74c7, 0x749e, 0x7474, 0x744a, 0x7420, 0x73f6, 0x73cb, + 0x73a0, 0x7375, 0x7349, 0x731d, 0x72f1, 0x72c5, 0x7298, 0x726b, + 0x723e, 0x7211, 0x71e3, 0x71b5, 0x7186, 0x7158, 0x7129, 0x70fa, + 0x70cb, 0x709b, 0x706b, 0x703b, 0x700a, 0x6fda, 0x6fa9, 0x6f77, + 0x6f46, 0x6f14, 0x6ee2, 0x6eaf, 0x6e7d, 0x6e4a, 0x6e17, 0x6de3, + 0x6db0, 0x6d7c, 0x6d48, 0x6d13, 0x6cde, 0x6ca9, 0x6c74, 0x6c3f, + 0x6c09, 0x6bd3, 0x6b9c, 0x6b66, 0x6b2f, 0x6af8, 0x6ac1, 0x6a89, + 0x6a51, 0x6a19, 0x69e1, 0x69a8, 0x696f, 0x6936, 0x68fd, 0x68c3, + 0x6889, 0x684f, 0x6815, 0x67da, 0x679f, 0x6764, 0x6729, 0x66ed, + 0x66b1, 0x6675, 0x6639, 0x65fc, 0x65bf, 0x6582, 0x6545, 0x6507, + 0x64c9, 0x648b, 0x644d, 0x640e, 0x63cf, 0x6390, 0x6351, 0x6311, + 0x62d2, 0x6292, 0x6251, 0x6211, 0x61d0, 0x618f, 0x614e, 0x610d, + 0x60cb, 0x6089, 0x6047, 0x6004, 0x5fc2, 0x5f7f, 0x5f3c, 0x5ef9, + 0x5eb5, 0x5e71, 0x5e2d, 0x5de9, 0x5da5, 0x5d60, 0x5d1b, 0x5cd6, + 0x5c91, 0x5c4b, 0x5c06, 0x5bc0, 0x5b79, 0x5b33, 0x5aec, 0x5aa5, + 0x5a5e, 0x5a17, 0x59d0, 0x5988, 0x5940, 0x58f8, 0x58af, 0x5867, + 0x581e, 0x57d5, 0x578c, 0x5742, 0x56f9, 0x56af, 0x5665, 0x561a, + 0x55d0, 0x5585, 0x553a, 0x54ef, 0x54a4, 0x5458, 0x540d, 0x53c1, + 0x5375, 0x5328, 0x52dc, 0x528f, 0x5242, 0x51f5, 0x51a8, 0x515a, + 0x510c, 0x50bf, 0x5070, 0x5022, 0x4fd4, 0x4f85, 0x4f36, 0x4ee7, + 0x4e98, 0x4e48, 0x4df9, 0x4da9, 0x4d59, 0x4d09, 0x4cb8, 0x4c68, + 0x4c17, 0x4bc6, 0x4b75, 0x4b24, 0x4ad2, 0x4a81, 0x4a2f, 0x49dd, + 0x498a, 0x4938, 0x48e6, 0x4893, 0x4840, 0x47ed, 0x479a, 0x4746, + 0x46f3, 0x469f, 0x464b, 0x45f7, 0x45a3, 0x454e, 0x44fa, 0x44a5, + 0x4450, 0x43fb, 0x43a5, 0x4350, 0x42fa, 0x42a5, 0x424f, 0x41f9, + 0x41a2, 0x414c, 0x40f6, 0x409f, 0x4048, 0x3ff1, 0x3f9a, 0x3f43, + 0x3eeb, 0x3e93, 0x3e3c, 0x3de4, 0x3d8c, 0x3d33, 0x3cdb, 0x3c83, + 0x3c2a, 0x3bd1, 0x3b78, 0x3b1f, 0x3ac6, 0x3a6c, 0x3a13, 0x39b9, + 0x395f, 0x3906, 0x38ab, 0x3851, 0x37f7, 0x379c, 0x3742, 0x36e7, + 0x368c, 0x3631, 0x35d6, 0x357b, 0x351f, 0x34c4, 0x3468, 0x340c, + 0x33b0, 0x3354, 0x32f8, 0x329c, 0x3240, 0x31e3, 0x3186, 0x312a, + 0x30cd, 0x3070, 0x3013, 0x2fb5, 0x2f58, 0x2efb, 0x2e9d, 0x2e3f, + 0x2de2, 0x2d84, 0x2d26, 0x2cc8, 0x2c69, 0x2c0b, 0x2bad, 0x2b4e, + 0x2aef, 0x2a91, 0x2a32, 0x29d3, 0x2974, 0x2915, 0x28b5, 0x2856, + 0x27f6, 0x2797, 0x2737, 0x26d8, 0x2678, 0x2618, 0x25b8, 0x2558, + 0x24f7, 0x2497, 0x2437, 0x23d6, 0x2376, 0x2315, 0x22b4, 0x2254, + 0x21f3, 0x2192, 0x2131, 0x20d0, 0x206e, 0x200d, 0x1fac, 0x1f4a, + 0x1ee9, 0x1e87, 0x1e25, 0x1dc4, 0x1d62, 0x1d00, 0x1c9e, 0x1c3c, + 0x1bda, 0x1b78, 0x1b16, 0x1ab3, 0x1a51, 0x19ef, 0x198c, 0x192a, + 0x18c7, 0x1864, 0x1802, 0x179f, 0x173c, 0x16d9, 0x1676, 0x1613, + 0x15b0, 0x154d, 0x14ea, 0x1487, 0x1423, 0x13c0, 0x135d, 0x12f9, + 0x1296, 0x1232, 0x11cf, 0x116b, 0x1108, 0x10a4, 0x1040, 0xfdd, + 0xf79, 0xf15, 0xeb1, 0xe4d, 0xde9, 0xd85, 0xd21, 0xcbd, + 0xc59, 0xbf5, 0xb91, 0xb2d, 0xac9, 0xa65, 0xa00, 0x99c, + 0x938, 0x8d4, 0x86f, 0x80b, 0x7a7, 0x742, 0x6de, 0x67a, + 0x615, 0x5b1, 0x54c, 0x4e8, 0x483, 0x41f, 0x3ba, 0x356, + 0x2f1, 0x28d, 0x228, 0x1c4, 0x15f, 0xfb, 0x96, 0x32, +}; + +static const q15_t ALIGN4 cos_factorsQ15_2048[2048] = { + 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, + 0x7fff, 0x7fff, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffd, 0x7ffd, + 0x7ffd, 0x7ffd, 0x7ffc, 0x7ffc, 0x7ffb, 0x7ffb, 0x7ffb, 0x7ffa, + 0x7ffa, 0x7ff9, 0x7ff9, 0x7ff8, 0x7ff8, 0x7ff7, 0x7ff7, 0x7ff6, + 0x7ff5, 0x7ff5, 0x7ff4, 0x7ff3, 0x7ff3, 0x7ff2, 0x7ff1, 0x7ff0, + 0x7ff0, 0x7fef, 0x7fee, 0x7fed, 0x7fec, 0x7fec, 0x7feb, 0x7fea, + 0x7fe9, 0x7fe8, 0x7fe7, 0x7fe6, 0x7fe5, 0x7fe4, 0x7fe3, 0x7fe2, + 0x7fe1, 0x7fe0, 0x7fdf, 0x7fdd, 0x7fdc, 0x7fdb, 0x7fda, 0x7fd9, + 0x7fd7, 0x7fd6, 0x7fd5, 0x7fd4, 0x7fd2, 0x7fd1, 0x7fd0, 0x7fce, + 0x7fcd, 0x7fcb, 0x7fca, 0x7fc9, 0x7fc7, 0x7fc6, 0x7fc4, 0x7fc3, + 0x7fc1, 0x7fc0, 0x7fbe, 0x7fbc, 0x7fbb, 0x7fb9, 0x7fb7, 0x7fb6, + 0x7fb4, 0x7fb2, 0x7fb1, 0x7faf, 0x7fad, 0x7fab, 0x7fa9, 0x7fa8, + 0x7fa6, 0x7fa4, 0x7fa2, 0x7fa0, 0x7f9e, 0x7f9c, 0x7f9a, 0x7f98, + 0x7f96, 0x7f94, 0x7f92, 0x7f90, 0x7f8e, 0x7f8c, 0x7f8a, 0x7f88, + 0x7f86, 0x7f83, 0x7f81, 0x7f7f, 0x7f7d, 0x7f7b, 0x7f78, 0x7f76, + 0x7f74, 0x7f71, 0x7f6f, 0x7f6d, 0x7f6a, 0x7f68, 0x7f65, 0x7f63, + 0x7f60, 0x7f5e, 0x7f5b, 0x7f59, 0x7f56, 0x7f54, 0x7f51, 0x7f4f, + 0x7f4c, 0x7f49, 0x7f47, 0x7f44, 0x7f41, 0x7f3f, 0x7f3c, 0x7f39, + 0x7f36, 0x7f34, 0x7f31, 0x7f2e, 0x7f2b, 0x7f28, 0x7f25, 0x7f23, + 0x7f20, 0x7f1d, 0x7f1a, 0x7f17, 0x7f14, 0x7f11, 0x7f0e, 0x7f0b, + 0x7f08, 0x7f04, 0x7f01, 0x7efe, 0x7efb, 0x7ef8, 0x7ef5, 0x7ef1, + 0x7eee, 0x7eeb, 0x7ee8, 0x7ee4, 0x7ee1, 0x7ede, 0x7eda, 0x7ed7, + 0x7ed4, 0x7ed0, 0x7ecd, 0x7ec9, 0x7ec6, 0x7ec3, 0x7ebf, 0x7ebb, + 0x7eb8, 0x7eb4, 0x7eb1, 0x7ead, 0x7eaa, 0x7ea6, 0x7ea2, 0x7e9f, + 0x7e9b, 0x7e97, 0x7e94, 0x7e90, 0x7e8c, 0x7e88, 0x7e84, 0x7e81, + 0x7e7d, 0x7e79, 0x7e75, 0x7e71, 0x7e6d, 0x7e69, 0x7e65, 0x7e61, + 0x7e5d, 0x7e59, 0x7e55, 0x7e51, 0x7e4d, 0x7e49, 0x7e45, 0x7e41, + 0x7e3d, 0x7e39, 0x7e34, 0x7e30, 0x7e2c, 0x7e28, 0x7e24, 0x7e1f, + 0x7e1b, 0x7e17, 0x7e12, 0x7e0e, 0x7e0a, 0x7e05, 0x7e01, 0x7dfc, + 0x7df8, 0x7df3, 0x7def, 0x7dea, 0x7de6, 0x7de1, 0x7ddd, 0x7dd8, + 0x7dd4, 0x7dcf, 0x7dca, 0x7dc6, 0x7dc1, 0x7dbc, 0x7db8, 0x7db3, + 0x7dae, 0x7da9, 0x7da5, 0x7da0, 0x7d9b, 0x7d96, 0x7d91, 0x7d8c, + 0x7d87, 0x7d82, 0x7d7e, 0x7d79, 0x7d74, 0x7d6f, 0x7d6a, 0x7d65, + 0x7d60, 0x7d5a, 0x7d55, 0x7d50, 0x7d4b, 0x7d46, 0x7d41, 0x7d3c, + 0x7d36, 0x7d31, 0x7d2c, 0x7d27, 0x7d21, 0x7d1c, 0x7d17, 0x7d11, + 0x7d0c, 0x7d07, 0x7d01, 0x7cfc, 0x7cf6, 0x7cf1, 0x7cec, 0x7ce6, + 0x7ce1, 0x7cdb, 0x7cd5, 0x7cd0, 0x7cca, 0x7cc5, 0x7cbf, 0x7cb9, + 0x7cb4, 0x7cae, 0x7ca8, 0x7ca3, 0x7c9d, 0x7c97, 0x7c91, 0x7c8c, + 0x7c86, 0x7c80, 0x7c7a, 0x7c74, 0x7c6e, 0x7c69, 0x7c63, 0x7c5d, + 0x7c57, 0x7c51, 0x7c4b, 0x7c45, 0x7c3f, 0x7c39, 0x7c33, 0x7c2d, + 0x7c26, 0x7c20, 0x7c1a, 0x7c14, 0x7c0e, 0x7c08, 0x7c01, 0x7bfb, + 0x7bf5, 0x7bef, 0x7be8, 0x7be2, 0x7bdc, 0x7bd5, 0x7bcf, 0x7bc9, + 0x7bc2, 0x7bbc, 0x7bb5, 0x7baf, 0x7ba8, 0x7ba2, 0x7b9b, 0x7b95, + 0x7b8e, 0x7b88, 0x7b81, 0x7b7a, 0x7b74, 0x7b6d, 0x7b67, 0x7b60, + 0x7b59, 0x7b52, 0x7b4c, 0x7b45, 0x7b3e, 0x7b37, 0x7b31, 0x7b2a, + 0x7b23, 0x7b1c, 0x7b15, 0x7b0e, 0x7b07, 0x7b00, 0x7af9, 0x7af2, + 0x7aeb, 0x7ae4, 0x7add, 0x7ad6, 0x7acf, 0x7ac8, 0x7ac1, 0x7aba, + 0x7ab3, 0x7aac, 0x7aa4, 0x7a9d, 0x7a96, 0x7a8f, 0x7a87, 0x7a80, + 0x7a79, 0x7a72, 0x7a6a, 0x7a63, 0x7a5c, 0x7a54, 0x7a4d, 0x7a45, + 0x7a3e, 0x7a36, 0x7a2f, 0x7a27, 0x7a20, 0x7a18, 0x7a11, 0x7a09, + 0x7a02, 0x79fa, 0x79f2, 0x79eb, 0x79e3, 0x79db, 0x79d4, 0x79cc, + 0x79c4, 0x79bc, 0x79b5, 0x79ad, 0x79a5, 0x799d, 0x7995, 0x798e, + 0x7986, 0x797e, 0x7976, 0x796e, 0x7966, 0x795e, 0x7956, 0x794e, + 0x7946, 0x793e, 0x7936, 0x792e, 0x7926, 0x791e, 0x7915, 0x790d, + 0x7905, 0x78fd, 0x78f5, 0x78ec, 0x78e4, 0x78dc, 0x78d4, 0x78cb, + 0x78c3, 0x78bb, 0x78b2, 0x78aa, 0x78a2, 0x7899, 0x7891, 0x7888, + 0x7880, 0x7877, 0x786f, 0x7866, 0x785e, 0x7855, 0x784d, 0x7844, + 0x783b, 0x7833, 0x782a, 0x7821, 0x7819, 0x7810, 0x7807, 0x77ff, + 0x77f6, 0x77ed, 0x77e4, 0x77db, 0x77d3, 0x77ca, 0x77c1, 0x77b8, + 0x77af, 0x77a6, 0x779d, 0x7794, 0x778b, 0x7782, 0x7779, 0x7770, + 0x7767, 0x775e, 0x7755, 0x774c, 0x7743, 0x773a, 0x7731, 0x7727, + 0x771e, 0x7715, 0x770c, 0x7703, 0x76f9, 0x76f0, 0x76e7, 0x76dd, + 0x76d4, 0x76cb, 0x76c1, 0x76b8, 0x76af, 0x76a5, 0x769c, 0x7692, + 0x7689, 0x767f, 0x7676, 0x766c, 0x7663, 0x7659, 0x7650, 0x7646, + 0x763c, 0x7633, 0x7629, 0x761f, 0x7616, 0x760c, 0x7602, 0x75f9, + 0x75ef, 0x75e5, 0x75db, 0x75d1, 0x75c8, 0x75be, 0x75b4, 0x75aa, + 0x75a0, 0x7596, 0x758c, 0x7582, 0x7578, 0x756e, 0x7564, 0x755a, + 0x7550, 0x7546, 0x753c, 0x7532, 0x7528, 0x751e, 0x7514, 0x7509, + 0x74ff, 0x74f5, 0x74eb, 0x74e1, 0x74d6, 0x74cc, 0x74c2, 0x74b7, + 0x74ad, 0x74a3, 0x7498, 0x748e, 0x7484, 0x7479, 0x746f, 0x7464, + 0x745a, 0x744f, 0x7445, 0x743a, 0x7430, 0x7425, 0x741b, 0x7410, + 0x7406, 0x73fb, 0x73f0, 0x73e6, 0x73db, 0x73d0, 0x73c6, 0x73bb, + 0x73b0, 0x73a5, 0x739b, 0x7390, 0x7385, 0x737a, 0x736f, 0x7364, + 0x7359, 0x734f, 0x7344, 0x7339, 0x732e, 0x7323, 0x7318, 0x730d, + 0x7302, 0x72f7, 0x72ec, 0x72e1, 0x72d5, 0x72ca, 0x72bf, 0x72b4, + 0x72a9, 0x729e, 0x7293, 0x7287, 0x727c, 0x7271, 0x7266, 0x725a, + 0x724f, 0x7244, 0x7238, 0x722d, 0x7222, 0x7216, 0x720b, 0x71ff, + 0x71f4, 0x71e9, 0x71dd, 0x71d2, 0x71c6, 0x71bb, 0x71af, 0x71a3, + 0x7198, 0x718c, 0x7181, 0x7175, 0x7169, 0x715e, 0x7152, 0x7146, + 0x713b, 0x712f, 0x7123, 0x7117, 0x710c, 0x7100, 0x70f4, 0x70e8, + 0x70dc, 0x70d1, 0x70c5, 0x70b9, 0x70ad, 0x70a1, 0x7095, 0x7089, + 0x707d, 0x7071, 0x7065, 0x7059, 0x704d, 0x7041, 0x7035, 0x7029, + 0x701d, 0x7010, 0x7004, 0x6ff8, 0x6fec, 0x6fe0, 0x6fd3, 0x6fc7, + 0x6fbb, 0x6faf, 0x6fa2, 0x6f96, 0x6f8a, 0x6f7d, 0x6f71, 0x6f65, + 0x6f58, 0x6f4c, 0x6f3f, 0x6f33, 0x6f27, 0x6f1a, 0x6f0e, 0x6f01, + 0x6ef5, 0x6ee8, 0x6edc, 0x6ecf, 0x6ec2, 0x6eb6, 0x6ea9, 0x6e9c, + 0x6e90, 0x6e83, 0x6e76, 0x6e6a, 0x6e5d, 0x6e50, 0x6e44, 0x6e37, + 0x6e2a, 0x6e1d, 0x6e10, 0x6e04, 0x6df7, 0x6dea, 0x6ddd, 0x6dd0, + 0x6dc3, 0x6db6, 0x6da9, 0x6d9c, 0x6d8f, 0x6d82, 0x6d75, 0x6d68, + 0x6d5b, 0x6d4e, 0x6d41, 0x6d34, 0x6d27, 0x6d1a, 0x6d0c, 0x6cff, + 0x6cf2, 0x6ce5, 0x6cd8, 0x6cca, 0x6cbd, 0x6cb0, 0x6ca3, 0x6c95, + 0x6c88, 0x6c7b, 0x6c6d, 0x6c60, 0x6c53, 0x6c45, 0x6c38, 0x6c2a, + 0x6c1d, 0x6c0f, 0x6c02, 0x6bf5, 0x6be7, 0x6bd9, 0x6bcc, 0x6bbe, + 0x6bb1, 0x6ba3, 0x6b96, 0x6b88, 0x6b7a, 0x6b6d, 0x6b5f, 0x6b51, + 0x6b44, 0x6b36, 0x6b28, 0x6b1a, 0x6b0d, 0x6aff, 0x6af1, 0x6ae3, + 0x6ad5, 0x6ac8, 0x6aba, 0x6aac, 0x6a9e, 0x6a90, 0x6a82, 0x6a74, + 0x6a66, 0x6a58, 0x6a4a, 0x6a3c, 0x6a2e, 0x6a20, 0x6a12, 0x6a04, + 0x69f6, 0x69e8, 0x69da, 0x69cb, 0x69bd, 0x69af, 0x69a1, 0x6993, + 0x6985, 0x6976, 0x6968, 0x695a, 0x694b, 0x693d, 0x692f, 0x6921, + 0x6912, 0x6904, 0x68f5, 0x68e7, 0x68d9, 0x68ca, 0x68bc, 0x68ad, + 0x689f, 0x6890, 0x6882, 0x6873, 0x6865, 0x6856, 0x6848, 0x6839, + 0x682b, 0x681c, 0x680d, 0x67ff, 0x67f0, 0x67e1, 0x67d3, 0x67c4, + 0x67b5, 0x67a6, 0x6798, 0x6789, 0x677a, 0x676b, 0x675d, 0x674e, + 0x673f, 0x6730, 0x6721, 0x6712, 0x6703, 0x66f4, 0x66e5, 0x66d6, + 0x66c8, 0x66b9, 0x66aa, 0x669b, 0x668b, 0x667c, 0x666d, 0x665e, + 0x664f, 0x6640, 0x6631, 0x6622, 0x6613, 0x6603, 0x65f4, 0x65e5, + 0x65d6, 0x65c7, 0x65b7, 0x65a8, 0x6599, 0x658a, 0x657a, 0x656b, + 0x655c, 0x654c, 0x653d, 0x652d, 0x651e, 0x650f, 0x64ff, 0x64f0, + 0x64e0, 0x64d1, 0x64c1, 0x64b2, 0x64a2, 0x6493, 0x6483, 0x6474, + 0x6464, 0x6454, 0x6445, 0x6435, 0x6426, 0x6416, 0x6406, 0x63f7, + 0x63e7, 0x63d7, 0x63c7, 0x63b8, 0x63a8, 0x6398, 0x6388, 0x6378, + 0x6369, 0x6359, 0x6349, 0x6339, 0x6329, 0x6319, 0x6309, 0x62f9, + 0x62ea, 0x62da, 0x62ca, 0x62ba, 0x62aa, 0x629a, 0x628a, 0x627a, + 0x6269, 0x6259, 0x6249, 0x6239, 0x6229, 0x6219, 0x6209, 0x61f9, + 0x61e8, 0x61d8, 0x61c8, 0x61b8, 0x61a8, 0x6197, 0x6187, 0x6177, + 0x6166, 0x6156, 0x6146, 0x6135, 0x6125, 0x6115, 0x6104, 0x60f4, + 0x60e4, 0x60d3, 0x60c3, 0x60b2, 0x60a2, 0x6091, 0x6081, 0x6070, + 0x6060, 0x604f, 0x603f, 0x602e, 0x601d, 0x600d, 0x5ffc, 0x5fec, + 0x5fdb, 0x5fca, 0x5fba, 0x5fa9, 0x5f98, 0x5f87, 0x5f77, 0x5f66, + 0x5f55, 0x5f44, 0x5f34, 0x5f23, 0x5f12, 0x5f01, 0x5ef0, 0x5edf, + 0x5ecf, 0x5ebe, 0x5ead, 0x5e9c, 0x5e8b, 0x5e7a, 0x5e69, 0x5e58, + 0x5e47, 0x5e36, 0x5e25, 0x5e14, 0x5e03, 0x5df2, 0x5de1, 0x5dd0, + 0x5dbf, 0x5dad, 0x5d9c, 0x5d8b, 0x5d7a, 0x5d69, 0x5d58, 0x5d46, + 0x5d35, 0x5d24, 0x5d13, 0x5d01, 0x5cf0, 0x5cdf, 0x5cce, 0x5cbc, + 0x5cab, 0x5c9a, 0x5c88, 0x5c77, 0x5c66, 0x5c54, 0x5c43, 0x5c31, + 0x5c20, 0x5c0e, 0x5bfd, 0x5beb, 0x5bda, 0x5bc8, 0x5bb7, 0x5ba5, + 0x5b94, 0x5b82, 0x5b71, 0x5b5f, 0x5b4d, 0x5b3c, 0x5b2a, 0x5b19, + 0x5b07, 0x5af5, 0x5ae4, 0x5ad2, 0x5ac0, 0x5aae, 0x5a9d, 0x5a8b, + 0x5a79, 0x5a67, 0x5a56, 0x5a44, 0x5a32, 0x5a20, 0x5a0e, 0x59fc, + 0x59ea, 0x59d9, 0x59c7, 0x59b5, 0x59a3, 0x5991, 0x597f, 0x596d, + 0x595b, 0x5949, 0x5937, 0x5925, 0x5913, 0x5901, 0x58ef, 0x58dd, + 0x58cb, 0x58b8, 0x58a6, 0x5894, 0x5882, 0x5870, 0x585e, 0x584b, + 0x5839, 0x5827, 0x5815, 0x5803, 0x57f0, 0x57de, 0x57cc, 0x57b9, + 0x57a7, 0x5795, 0x5783, 0x5770, 0x575e, 0x574b, 0x5739, 0x5727, + 0x5714, 0x5702, 0x56ef, 0x56dd, 0x56ca, 0x56b8, 0x56a5, 0x5693, + 0x5680, 0x566e, 0x565b, 0x5649, 0x5636, 0x5624, 0x5611, 0x55fe, + 0x55ec, 0x55d9, 0x55c7, 0x55b4, 0x55a1, 0x558f, 0x557c, 0x5569, + 0x5556, 0x5544, 0x5531, 0x551e, 0x550b, 0x54f9, 0x54e6, 0x54d3, + 0x54c0, 0x54ad, 0x549a, 0x5488, 0x5475, 0x5462, 0x544f, 0x543c, + 0x5429, 0x5416, 0x5403, 0x53f0, 0x53dd, 0x53ca, 0x53b7, 0x53a4, + 0x5391, 0x537e, 0x536b, 0x5358, 0x5345, 0x5332, 0x531f, 0x530c, + 0x52f8, 0x52e5, 0x52d2, 0x52bf, 0x52ac, 0x5299, 0x5285, 0x5272, + 0x525f, 0x524c, 0x5238, 0x5225, 0x5212, 0x51ff, 0x51eb, 0x51d8, + 0x51c5, 0x51b1, 0x519e, 0x518b, 0x5177, 0x5164, 0x5150, 0x513d, + 0x512a, 0x5116, 0x5103, 0x50ef, 0x50dc, 0x50c8, 0x50b5, 0x50a1, + 0x508e, 0x507a, 0x5067, 0x5053, 0x503f, 0x502c, 0x5018, 0x5005, + 0x4ff1, 0x4fdd, 0x4fca, 0x4fb6, 0x4fa2, 0x4f8f, 0x4f7b, 0x4f67, + 0x4f54, 0x4f40, 0x4f2c, 0x4f18, 0x4f05, 0x4ef1, 0x4edd, 0x4ec9, + 0x4eb6, 0x4ea2, 0x4e8e, 0x4e7a, 0x4e66, 0x4e52, 0x4e3e, 0x4e2a, + 0x4e17, 0x4e03, 0x4def, 0x4ddb, 0x4dc7, 0x4db3, 0x4d9f, 0x4d8b, + 0x4d77, 0x4d63, 0x4d4f, 0x4d3b, 0x4d27, 0x4d13, 0x4cff, 0x4ceb, + 0x4cd6, 0x4cc2, 0x4cae, 0x4c9a, 0x4c86, 0x4c72, 0x4c5e, 0x4c49, + 0x4c35, 0x4c21, 0x4c0d, 0x4bf9, 0x4be4, 0x4bd0, 0x4bbc, 0x4ba8, + 0x4b93, 0x4b7f, 0x4b6b, 0x4b56, 0x4b42, 0x4b2e, 0x4b19, 0x4b05, + 0x4af1, 0x4adc, 0x4ac8, 0x4ab4, 0x4a9f, 0x4a8b, 0x4a76, 0x4a62, + 0x4a4d, 0x4a39, 0x4a24, 0x4a10, 0x49fb, 0x49e7, 0x49d2, 0x49be, + 0x49a9, 0x4995, 0x4980, 0x496c, 0x4957, 0x4942, 0x492e, 0x4919, + 0x4905, 0x48f0, 0x48db, 0x48c7, 0x48b2, 0x489d, 0x4888, 0x4874, + 0x485f, 0x484a, 0x4836, 0x4821, 0x480c, 0x47f7, 0x47e2, 0x47ce, + 0x47b9, 0x47a4, 0x478f, 0x477a, 0x4765, 0x4751, 0x473c, 0x4727, + 0x4712, 0x46fd, 0x46e8, 0x46d3, 0x46be, 0x46a9, 0x4694, 0x467f, + 0x466a, 0x4655, 0x4640, 0x462b, 0x4616, 0x4601, 0x45ec, 0x45d7, + 0x45c2, 0x45ad, 0x4598, 0x4583, 0x456e, 0x4559, 0x4544, 0x452e, + 0x4519, 0x4504, 0x44ef, 0x44da, 0x44c5, 0x44af, 0x449a, 0x4485, + 0x4470, 0x445a, 0x4445, 0x4430, 0x441b, 0x4405, 0x43f0, 0x43db, + 0x43c5, 0x43b0, 0x439b, 0x4385, 0x4370, 0x435b, 0x4345, 0x4330, + 0x431b, 0x4305, 0x42f0, 0x42da, 0x42c5, 0x42af, 0x429a, 0x4284, + 0x426f, 0x425a, 0x4244, 0x422f, 0x4219, 0x4203, 0x41ee, 0x41d8, + 0x41c3, 0x41ad, 0x4198, 0x4182, 0x416d, 0x4157, 0x4141, 0x412c, + 0x4116, 0x4100, 0x40eb, 0x40d5, 0x40bf, 0x40aa, 0x4094, 0x407e, + 0x4069, 0x4053, 0x403d, 0x4027, 0x4012, 0x3ffc, 0x3fe6, 0x3fd0, + 0x3fbb, 0x3fa5, 0x3f8f, 0x3f79, 0x3f63, 0x3f4d, 0x3f38, 0x3f22, + 0x3f0c, 0x3ef6, 0x3ee0, 0x3eca, 0x3eb4, 0x3e9e, 0x3e88, 0x3e73, + 0x3e5d, 0x3e47, 0x3e31, 0x3e1b, 0x3e05, 0x3def, 0x3dd9, 0x3dc3, + 0x3dad, 0x3d97, 0x3d81, 0x3d6b, 0x3d55, 0x3d3e, 0x3d28, 0x3d12, + 0x3cfc, 0x3ce6, 0x3cd0, 0x3cba, 0x3ca4, 0x3c8e, 0x3c77, 0x3c61, + 0x3c4b, 0x3c35, 0x3c1f, 0x3c09, 0x3bf2, 0x3bdc, 0x3bc6, 0x3bb0, + 0x3b99, 0x3b83, 0x3b6d, 0x3b57, 0x3b40, 0x3b2a, 0x3b14, 0x3afe, + 0x3ae7, 0x3ad1, 0x3abb, 0x3aa4, 0x3a8e, 0x3a78, 0x3a61, 0x3a4b, + 0x3a34, 0x3a1e, 0x3a08, 0x39f1, 0x39db, 0x39c4, 0x39ae, 0x3998, + 0x3981, 0x396b, 0x3954, 0x393e, 0x3927, 0x3911, 0x38fa, 0x38e4, + 0x38cd, 0x38b7, 0x38a0, 0x388a, 0x3873, 0x385d, 0x3846, 0x382f, + 0x3819, 0x3802, 0x37ec, 0x37d5, 0x37be, 0x37a8, 0x3791, 0x377a, + 0x3764, 0x374d, 0x3736, 0x3720, 0x3709, 0x36f2, 0x36dc, 0x36c5, + 0x36ae, 0x3698, 0x3681, 0x366a, 0x3653, 0x363d, 0x3626, 0x360f, + 0x35f8, 0x35e1, 0x35cb, 0x35b4, 0x359d, 0x3586, 0x356f, 0x3558, + 0x3542, 0x352b, 0x3514, 0x34fd, 0x34e6, 0x34cf, 0x34b8, 0x34a1, + 0x348b, 0x3474, 0x345d, 0x3446, 0x342f, 0x3418, 0x3401, 0x33ea, + 0x33d3, 0x33bc, 0x33a5, 0x338e, 0x3377, 0x3360, 0x3349, 0x3332, + 0x331b, 0x3304, 0x32ed, 0x32d6, 0x32bf, 0x32a8, 0x3290, 0x3279, + 0x3262, 0x324b, 0x3234, 0x321d, 0x3206, 0x31ef, 0x31d8, 0x31c0, + 0x31a9, 0x3192, 0x317b, 0x3164, 0x314c, 0x3135, 0x311e, 0x3107, + 0x30f0, 0x30d8, 0x30c1, 0x30aa, 0x3093, 0x307b, 0x3064, 0x304d, + 0x3036, 0x301e, 0x3007, 0x2ff0, 0x2fd8, 0x2fc1, 0x2faa, 0x2f92, + 0x2f7b, 0x2f64, 0x2f4c, 0x2f35, 0x2f1e, 0x2f06, 0x2eef, 0x2ed8, + 0x2ec0, 0x2ea9, 0x2e91, 0x2e7a, 0x2e63, 0x2e4b, 0x2e34, 0x2e1c, + 0x2e05, 0x2ded, 0x2dd6, 0x2dbe, 0x2da7, 0x2d8f, 0x2d78, 0x2d60, + 0x2d49, 0x2d31, 0x2d1a, 0x2d02, 0x2ceb, 0x2cd3, 0x2cbc, 0x2ca4, + 0x2c8d, 0x2c75, 0x2c5e, 0x2c46, 0x2c2e, 0x2c17, 0x2bff, 0x2be8, + 0x2bd0, 0x2bb8, 0x2ba1, 0x2b89, 0x2b71, 0x2b5a, 0x2b42, 0x2b2b, + 0x2b13, 0x2afb, 0x2ae4, 0x2acc, 0x2ab4, 0x2a9c, 0x2a85, 0x2a6d, + 0x2a55, 0x2a3e, 0x2a26, 0x2a0e, 0x29f6, 0x29df, 0x29c7, 0x29af, + 0x2997, 0x2980, 0x2968, 0x2950, 0x2938, 0x2920, 0x2909, 0x28f1, + 0x28d9, 0x28c1, 0x28a9, 0x2892, 0x287a, 0x2862, 0x284a, 0x2832, + 0x281a, 0x2802, 0x27eb, 0x27d3, 0x27bb, 0x27a3, 0x278b, 0x2773, + 0x275b, 0x2743, 0x272b, 0x2713, 0x26fb, 0x26e4, 0x26cc, 0x26b4, + 0x269c, 0x2684, 0x266c, 0x2654, 0x263c, 0x2624, 0x260c, 0x25f4, + 0x25dc, 0x25c4, 0x25ac, 0x2594, 0x257c, 0x2564, 0x254c, 0x2534, + 0x251c, 0x2503, 0x24eb, 0x24d3, 0x24bb, 0x24a3, 0x248b, 0x2473, + 0x245b, 0x2443, 0x242b, 0x2413, 0x23fa, 0x23e2, 0x23ca, 0x23b2, + 0x239a, 0x2382, 0x236a, 0x2352, 0x2339, 0x2321, 0x2309, 0x22f1, + 0x22d9, 0x22c0, 0x22a8, 0x2290, 0x2278, 0x2260, 0x2247, 0x222f, + 0x2217, 0x21ff, 0x21e7, 0x21ce, 0x21b6, 0x219e, 0x2186, 0x216d, + 0x2155, 0x213d, 0x2125, 0x210c, 0x20f4, 0x20dc, 0x20c3, 0x20ab, + 0x2093, 0x207a, 0x2062, 0x204a, 0x2032, 0x2019, 0x2001, 0x1fe9, + 0x1fd0, 0x1fb8, 0x1f9f, 0x1f87, 0x1f6f, 0x1f56, 0x1f3e, 0x1f26, + 0x1f0d, 0x1ef5, 0x1edd, 0x1ec4, 0x1eac, 0x1e93, 0x1e7b, 0x1e62, + 0x1e4a, 0x1e32, 0x1e19, 0x1e01, 0x1de8, 0x1dd0, 0x1db7, 0x1d9f, + 0x1d87, 0x1d6e, 0x1d56, 0x1d3d, 0x1d25, 0x1d0c, 0x1cf4, 0x1cdb, + 0x1cc3, 0x1caa, 0x1c92, 0x1c79, 0x1c61, 0x1c48, 0x1c30, 0x1c17, + 0x1bff, 0x1be6, 0x1bce, 0x1bb5, 0x1b9d, 0x1b84, 0x1b6c, 0x1b53, + 0x1b3a, 0x1b22, 0x1b09, 0x1af1, 0x1ad8, 0x1ac0, 0x1aa7, 0x1a8e, + 0x1a76, 0x1a5d, 0x1a45, 0x1a2c, 0x1a13, 0x19fb, 0x19e2, 0x19ca, + 0x19b1, 0x1998, 0x1980, 0x1967, 0x194e, 0x1936, 0x191d, 0x1905, + 0x18ec, 0x18d3, 0x18bb, 0x18a2, 0x1889, 0x1871, 0x1858, 0x183f, + 0x1827, 0x180e, 0x17f5, 0x17dd, 0x17c4, 0x17ab, 0x1792, 0x177a, + 0x1761, 0x1748, 0x1730, 0x1717, 0x16fe, 0x16e5, 0x16cd, 0x16b4, + 0x169b, 0x1682, 0x166a, 0x1651, 0x1638, 0x161f, 0x1607, 0x15ee, + 0x15d5, 0x15bc, 0x15a4, 0x158b, 0x1572, 0x1559, 0x1541, 0x1528, + 0x150f, 0x14f6, 0x14dd, 0x14c5, 0x14ac, 0x1493, 0x147a, 0x1461, + 0x1449, 0x1430, 0x1417, 0x13fe, 0x13e5, 0x13cc, 0x13b4, 0x139b, + 0x1382, 0x1369, 0x1350, 0x1337, 0x131f, 0x1306, 0x12ed, 0x12d4, + 0x12bb, 0x12a2, 0x1289, 0x1271, 0x1258, 0x123f, 0x1226, 0x120d, + 0x11f4, 0x11db, 0x11c2, 0x11a9, 0x1191, 0x1178, 0x115f, 0x1146, + 0x112d, 0x1114, 0x10fb, 0x10e2, 0x10c9, 0x10b0, 0x1098, 0x107f, + 0x1066, 0x104d, 0x1034, 0x101b, 0x1002, 0xfe9, 0xfd0, 0xfb7, + 0xf9e, 0xf85, 0xf6c, 0xf53, 0xf3a, 0xf21, 0xf08, 0xef0, + 0xed7, 0xebe, 0xea5, 0xe8c, 0xe73, 0xe5a, 0xe41, 0xe28, + 0xe0f, 0xdf6, 0xddd, 0xdc4, 0xdab, 0xd92, 0xd79, 0xd60, + 0xd47, 0xd2e, 0xd15, 0xcfc, 0xce3, 0xcca, 0xcb1, 0xc98, + 0xc7f, 0xc66, 0xc4d, 0xc34, 0xc1b, 0xc02, 0xbe9, 0xbd0, + 0xbb7, 0xb9e, 0xb85, 0xb6c, 0xb53, 0xb3a, 0xb20, 0xb07, + 0xaee, 0xad5, 0xabc, 0xaa3, 0xa8a, 0xa71, 0xa58, 0xa3f, + 0xa26, 0xa0d, 0x9f4, 0x9db, 0x9c2, 0x9a9, 0x990, 0x977, + 0x95e, 0x944, 0x92b, 0x912, 0x8f9, 0x8e0, 0x8c7, 0x8ae, + 0x895, 0x87c, 0x863, 0x84a, 0x831, 0x818, 0x7fe, 0x7e5, + 0x7cc, 0x7b3, 0x79a, 0x781, 0x768, 0x74f, 0x736, 0x71d, + 0x704, 0x6ea, 0x6d1, 0x6b8, 0x69f, 0x686, 0x66d, 0x654, + 0x63b, 0x622, 0x609, 0x5ef, 0x5d6, 0x5bd, 0x5a4, 0x58b, + 0x572, 0x559, 0x540, 0x527, 0x50d, 0x4f4, 0x4db, 0x4c2, + 0x4a9, 0x490, 0x477, 0x45e, 0x445, 0x42b, 0x412, 0x3f9, + 0x3e0, 0x3c7, 0x3ae, 0x395, 0x37c, 0x362, 0x349, 0x330, + 0x317, 0x2fe, 0x2e5, 0x2cc, 0x2b3, 0x299, 0x280, 0x267, + 0x24e, 0x235, 0x21c, 0x203, 0x1ea, 0x1d0, 0x1b7, 0x19e, + 0x185, 0x16c, 0x153, 0x13a, 0x121, 0x107, 0xee, 0xd5, + 0xbc, 0xa3, 0x8a, 0x71, 0x57, 0x3e, 0x25, 0xc, + +}; + +static const q15_t ALIGN4 cos_factorsQ15_8192[8192] = { + 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, + 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, + 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, + 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, + 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, + 0x7fff, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, + 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, + 0x7ffe, 0x7ffe, 0x7ffd, 0x7ffd, 0x7ffd, 0x7ffd, 0x7ffd, 0x7ffd, + 0x7ffd, 0x7ffd, 0x7ffd, 0x7ffd, 0x7ffd, 0x7ffd, 0x7ffd, 0x7ffc, + 0x7ffc, 0x7ffc, 0x7ffc, 0x7ffc, 0x7ffc, 0x7ffc, 0x7ffc, 0x7ffc, + 0x7ffc, 0x7ffb, 0x7ffb, 0x7ffb, 0x7ffb, 0x7ffb, 0x7ffb, 0x7ffb, + 0x7ffb, 0x7ffb, 0x7ffb, 0x7ffa, 0x7ffa, 0x7ffa, 0x7ffa, 0x7ffa, + 0x7ffa, 0x7ffa, 0x7ffa, 0x7ffa, 0x7ff9, 0x7ff9, 0x7ff9, 0x7ff9, + 0x7ff9, 0x7ff9, 0x7ff9, 0x7ff9, 0x7ff8, 0x7ff8, 0x7ff8, 0x7ff8, + 0x7ff8, 0x7ff8, 0x7ff8, 0x7ff7, 0x7ff7, 0x7ff7, 0x7ff7, 0x7ff7, + 0x7ff7, 0x7ff7, 0x7ff6, 0x7ff6, 0x7ff6, 0x7ff6, 0x7ff6, 0x7ff6, + 0x7ff6, 0x7ff5, 0x7ff5, 0x7ff5, 0x7ff5, 0x7ff5, 0x7ff5, 0x7ff4, + 0x7ff4, 0x7ff4, 0x7ff4, 0x7ff4, 0x7ff4, 0x7ff3, 0x7ff3, 0x7ff3, + 0x7ff3, 0x7ff3, 0x7ff3, 0x7ff2, 0x7ff2, 0x7ff2, 0x7ff2, 0x7ff2, + 0x7ff1, 0x7ff1, 0x7ff1, 0x7ff1, 0x7ff1, 0x7ff1, 0x7ff0, 0x7ff0, + 0x7ff0, 0x7ff0, 0x7ff0, 0x7fef, 0x7fef, 0x7fef, 0x7fef, 0x7fef, + 0x7fee, 0x7fee, 0x7fee, 0x7fee, 0x7fee, 0x7fed, 0x7fed, 0x7fed, + 0x7fed, 0x7fed, 0x7fec, 0x7fec, 0x7fec, 0x7fec, 0x7feb, 0x7feb, + 0x7feb, 0x7feb, 0x7feb, 0x7fea, 0x7fea, 0x7fea, 0x7fea, 0x7fe9, + 0x7fe9, 0x7fe9, 0x7fe9, 0x7fe8, 0x7fe8, 0x7fe8, 0x7fe8, 0x7fe8, + 0x7fe7, 0x7fe7, 0x7fe7, 0x7fe7, 0x7fe6, 0x7fe6, 0x7fe6, 0x7fe6, + 0x7fe5, 0x7fe5, 0x7fe5, 0x7fe5, 0x7fe4, 0x7fe4, 0x7fe4, 0x7fe4, + 0x7fe3, 0x7fe3, 0x7fe3, 0x7fe2, 0x7fe2, 0x7fe2, 0x7fe2, 0x7fe1, + 0x7fe1, 0x7fe1, 0x7fe1, 0x7fe0, 0x7fe0, 0x7fe0, 0x7fdf, 0x7fdf, + 0x7fdf, 0x7fdf, 0x7fde, 0x7fde, 0x7fde, 0x7fde, 0x7fdd, 0x7fdd, + 0x7fdd, 0x7fdc, 0x7fdc, 0x7fdc, 0x7fdb, 0x7fdb, 0x7fdb, 0x7fdb, + 0x7fda, 0x7fda, 0x7fda, 0x7fd9, 0x7fd9, 0x7fd9, 0x7fd8, 0x7fd8, + 0x7fd8, 0x7fd8, 0x7fd7, 0x7fd7, 0x7fd7, 0x7fd6, 0x7fd6, 0x7fd6, + 0x7fd5, 0x7fd5, 0x7fd5, 0x7fd4, 0x7fd4, 0x7fd4, 0x7fd3, 0x7fd3, + 0x7fd3, 0x7fd2, 0x7fd2, 0x7fd2, 0x7fd1, 0x7fd1, 0x7fd1, 0x7fd0, + 0x7fd0, 0x7fd0, 0x7fcf, 0x7fcf, 0x7fcf, 0x7fce, 0x7fce, 0x7fce, + 0x7fcd, 0x7fcd, 0x7fcd, 0x7fcc, 0x7fcc, 0x7fcc, 0x7fcb, 0x7fcb, + 0x7fcb, 0x7fca, 0x7fca, 0x7fc9, 0x7fc9, 0x7fc9, 0x7fc8, 0x7fc8, + 0x7fc8, 0x7fc7, 0x7fc7, 0x7fc7, 0x7fc6, 0x7fc6, 0x7fc5, 0x7fc5, + 0x7fc5, 0x7fc4, 0x7fc4, 0x7fc4, 0x7fc3, 0x7fc3, 0x7fc2, 0x7fc2, + 0x7fc2, 0x7fc1, 0x7fc1, 0x7fc0, 0x7fc0, 0x7fc0, 0x7fbf, 0x7fbf, + 0x7fbf, 0x7fbe, 0x7fbe, 0x7fbd, 0x7fbd, 0x7fbd, 0x7fbc, 0x7fbc, + 0x7fbb, 0x7fbb, 0x7fbb, 0x7fba, 0x7fba, 0x7fb9, 0x7fb9, 0x7fb8, + 0x7fb8, 0x7fb8, 0x7fb7, 0x7fb7, 0x7fb6, 0x7fb6, 0x7fb6, 0x7fb5, + 0x7fb5, 0x7fb4, 0x7fb4, 0x7fb3, 0x7fb3, 0x7fb3, 0x7fb2, 0x7fb2, + 0x7fb1, 0x7fb1, 0x7fb0, 0x7fb0, 0x7faf, 0x7faf, 0x7faf, 0x7fae, + 0x7fae, 0x7fad, 0x7fad, 0x7fac, 0x7fac, 0x7fac, 0x7fab, 0x7fab, + 0x7faa, 0x7faa, 0x7fa9, 0x7fa9, 0x7fa8, 0x7fa8, 0x7fa7, 0x7fa7, + 0x7fa6, 0x7fa6, 0x7fa6, 0x7fa5, 0x7fa5, 0x7fa4, 0x7fa4, 0x7fa3, + 0x7fa3, 0x7fa2, 0x7fa2, 0x7fa1, 0x7fa1, 0x7fa0, 0x7fa0, 0x7f9f, + 0x7f9f, 0x7f9e, 0x7f9e, 0x7f9d, 0x7f9d, 0x7f9c, 0x7f9c, 0x7f9c, + 0x7f9b, 0x7f9b, 0x7f9a, 0x7f9a, 0x7f99, 0x7f99, 0x7f98, 0x7f98, + 0x7f97, 0x7f97, 0x7f96, 0x7f96, 0x7f95, 0x7f95, 0x7f94, 0x7f94, + 0x7f93, 0x7f92, 0x7f92, 0x7f91, 0x7f91, 0x7f90, 0x7f90, 0x7f8f, + 0x7f8f, 0x7f8e, 0x7f8e, 0x7f8d, 0x7f8d, 0x7f8c, 0x7f8c, 0x7f8b, + 0x7f8b, 0x7f8a, 0x7f8a, 0x7f89, 0x7f89, 0x7f88, 0x7f87, 0x7f87, + 0x7f86, 0x7f86, 0x7f85, 0x7f85, 0x7f84, 0x7f84, 0x7f83, 0x7f83, + 0x7f82, 0x7f81, 0x7f81, 0x7f80, 0x7f80, 0x7f7f, 0x7f7f, 0x7f7e, + 0x7f7e, 0x7f7d, 0x7f7c, 0x7f7c, 0x7f7b, 0x7f7b, 0x7f7a, 0x7f7a, + 0x7f79, 0x7f79, 0x7f78, 0x7f77, 0x7f77, 0x7f76, 0x7f76, 0x7f75, + 0x7f75, 0x7f74, 0x7f73, 0x7f73, 0x7f72, 0x7f72, 0x7f71, 0x7f70, + 0x7f70, 0x7f6f, 0x7f6f, 0x7f6e, 0x7f6d, 0x7f6d, 0x7f6c, 0x7f6c, + 0x7f6b, 0x7f6b, 0x7f6a, 0x7f69, 0x7f69, 0x7f68, 0x7f68, 0x7f67, + 0x7f66, 0x7f66, 0x7f65, 0x7f64, 0x7f64, 0x7f63, 0x7f63, 0x7f62, + 0x7f61, 0x7f61, 0x7f60, 0x7f60, 0x7f5f, 0x7f5e, 0x7f5e, 0x7f5d, + 0x7f5c, 0x7f5c, 0x7f5b, 0x7f5b, 0x7f5a, 0x7f59, 0x7f59, 0x7f58, + 0x7f57, 0x7f57, 0x7f56, 0x7f55, 0x7f55, 0x7f54, 0x7f54, 0x7f53, + 0x7f52, 0x7f52, 0x7f51, 0x7f50, 0x7f50, 0x7f4f, 0x7f4e, 0x7f4e, + 0x7f4d, 0x7f4c, 0x7f4c, 0x7f4b, 0x7f4a, 0x7f4a, 0x7f49, 0x7f48, + 0x7f48, 0x7f47, 0x7f46, 0x7f46, 0x7f45, 0x7f44, 0x7f44, 0x7f43, + 0x7f42, 0x7f42, 0x7f41, 0x7f40, 0x7f40, 0x7f3f, 0x7f3e, 0x7f3e, + 0x7f3d, 0x7f3c, 0x7f3c, 0x7f3b, 0x7f3a, 0x7f3a, 0x7f39, 0x7f38, + 0x7f37, 0x7f37, 0x7f36, 0x7f35, 0x7f35, 0x7f34, 0x7f33, 0x7f33, + 0x7f32, 0x7f31, 0x7f31, 0x7f30, 0x7f2f, 0x7f2e, 0x7f2e, 0x7f2d, + 0x7f2c, 0x7f2c, 0x7f2b, 0x7f2a, 0x7f29, 0x7f29, 0x7f28, 0x7f27, + 0x7f27, 0x7f26, 0x7f25, 0x7f24, 0x7f24, 0x7f23, 0x7f22, 0x7f21, + 0x7f21, 0x7f20, 0x7f1f, 0x7f1f, 0x7f1e, 0x7f1d, 0x7f1c, 0x7f1c, + 0x7f1b, 0x7f1a, 0x7f19, 0x7f19, 0x7f18, 0x7f17, 0x7f16, 0x7f16, + 0x7f15, 0x7f14, 0x7f13, 0x7f13, 0x7f12, 0x7f11, 0x7f10, 0x7f10, + 0x7f0f, 0x7f0e, 0x7f0d, 0x7f0d, 0x7f0c, 0x7f0b, 0x7f0a, 0x7f09, + 0x7f09, 0x7f08, 0x7f07, 0x7f06, 0x7f06, 0x7f05, 0x7f04, 0x7f03, + 0x7f02, 0x7f02, 0x7f01, 0x7f00, 0x7eff, 0x7eff, 0x7efe, 0x7efd, + 0x7efc, 0x7efb, 0x7efb, 0x7efa, 0x7ef9, 0x7ef8, 0x7ef7, 0x7ef7, + 0x7ef6, 0x7ef5, 0x7ef4, 0x7ef3, 0x7ef3, 0x7ef2, 0x7ef1, 0x7ef0, + 0x7eef, 0x7eef, 0x7eee, 0x7eed, 0x7eec, 0x7eeb, 0x7eeb, 0x7eea, + 0x7ee9, 0x7ee8, 0x7ee7, 0x7ee6, 0x7ee6, 0x7ee5, 0x7ee4, 0x7ee3, + 0x7ee2, 0x7ee2, 0x7ee1, 0x7ee0, 0x7edf, 0x7ede, 0x7edd, 0x7edd, + 0x7edc, 0x7edb, 0x7eda, 0x7ed9, 0x7ed8, 0x7ed8, 0x7ed7, 0x7ed6, + 0x7ed5, 0x7ed4, 0x7ed3, 0x7ed2, 0x7ed2, 0x7ed1, 0x7ed0, 0x7ecf, + 0x7ece, 0x7ecd, 0x7ecc, 0x7ecc, 0x7ecb, 0x7eca, 0x7ec9, 0x7ec8, + 0x7ec7, 0x7ec6, 0x7ec6, 0x7ec5, 0x7ec4, 0x7ec3, 0x7ec2, 0x7ec1, + 0x7ec0, 0x7ebf, 0x7ebf, 0x7ebe, 0x7ebd, 0x7ebc, 0x7ebb, 0x7eba, + 0x7eb9, 0x7eb8, 0x7eb8, 0x7eb7, 0x7eb6, 0x7eb5, 0x7eb4, 0x7eb3, + 0x7eb2, 0x7eb1, 0x7eb0, 0x7eaf, 0x7eaf, 0x7eae, 0x7ead, 0x7eac, + 0x7eab, 0x7eaa, 0x7ea9, 0x7ea8, 0x7ea7, 0x7ea6, 0x7ea6, 0x7ea5, + 0x7ea4, 0x7ea3, 0x7ea2, 0x7ea1, 0x7ea0, 0x7e9f, 0x7e9e, 0x7e9d, + 0x7e9c, 0x7e9b, 0x7e9b, 0x7e9a, 0x7e99, 0x7e98, 0x7e97, 0x7e96, + 0x7e95, 0x7e94, 0x7e93, 0x7e92, 0x7e91, 0x7e90, 0x7e8f, 0x7e8e, + 0x7e8d, 0x7e8d, 0x7e8c, 0x7e8b, 0x7e8a, 0x7e89, 0x7e88, 0x7e87, + 0x7e86, 0x7e85, 0x7e84, 0x7e83, 0x7e82, 0x7e81, 0x7e80, 0x7e7f, + 0x7e7e, 0x7e7d, 0x7e7c, 0x7e7b, 0x7e7a, 0x7e79, 0x7e78, 0x7e77, + 0x7e77, 0x7e76, 0x7e75, 0x7e74, 0x7e73, 0x7e72, 0x7e71, 0x7e70, + 0x7e6f, 0x7e6e, 0x7e6d, 0x7e6c, 0x7e6b, 0x7e6a, 0x7e69, 0x7e68, + 0x7e67, 0x7e66, 0x7e65, 0x7e64, 0x7e63, 0x7e62, 0x7e61, 0x7e60, + 0x7e5f, 0x7e5e, 0x7e5d, 0x7e5c, 0x7e5b, 0x7e5a, 0x7e59, 0x7e58, + 0x7e57, 0x7e56, 0x7e55, 0x7e54, 0x7e53, 0x7e52, 0x7e51, 0x7e50, + 0x7e4f, 0x7e4e, 0x7e4d, 0x7e4c, 0x7e4b, 0x7e4a, 0x7e49, 0x7e48, + 0x7e47, 0x7e46, 0x7e45, 0x7e43, 0x7e42, 0x7e41, 0x7e40, 0x7e3f, + 0x7e3e, 0x7e3d, 0x7e3c, 0x7e3b, 0x7e3a, 0x7e39, 0x7e38, 0x7e37, + 0x7e36, 0x7e35, 0x7e34, 0x7e33, 0x7e32, 0x7e31, 0x7e30, 0x7e2f, + 0x7e2e, 0x7e2d, 0x7e2b, 0x7e2a, 0x7e29, 0x7e28, 0x7e27, 0x7e26, + 0x7e25, 0x7e24, 0x7e23, 0x7e22, 0x7e21, 0x7e20, 0x7e1f, 0x7e1e, + 0x7e1d, 0x7e1b, 0x7e1a, 0x7e19, 0x7e18, 0x7e17, 0x7e16, 0x7e15, + 0x7e14, 0x7e13, 0x7e12, 0x7e11, 0x7e10, 0x7e0e, 0x7e0d, 0x7e0c, + 0x7e0b, 0x7e0a, 0x7e09, 0x7e08, 0x7e07, 0x7e06, 0x7e05, 0x7e04, + 0x7e02, 0x7e01, 0x7e00, 0x7dff, 0x7dfe, 0x7dfd, 0x7dfc, 0x7dfb, + 0x7dfa, 0x7df8, 0x7df7, 0x7df6, 0x7df5, 0x7df4, 0x7df3, 0x7df2, + 0x7df1, 0x7def, 0x7dee, 0x7ded, 0x7dec, 0x7deb, 0x7dea, 0x7de9, + 0x7de8, 0x7de6, 0x7de5, 0x7de4, 0x7de3, 0x7de2, 0x7de1, 0x7de0, + 0x7dde, 0x7ddd, 0x7ddc, 0x7ddb, 0x7dda, 0x7dd9, 0x7dd8, 0x7dd6, + 0x7dd5, 0x7dd4, 0x7dd3, 0x7dd2, 0x7dd1, 0x7dd0, 0x7dce, 0x7dcd, + 0x7dcc, 0x7dcb, 0x7dca, 0x7dc9, 0x7dc7, 0x7dc6, 0x7dc5, 0x7dc4, + 0x7dc3, 0x7dc2, 0x7dc0, 0x7dbf, 0x7dbe, 0x7dbd, 0x7dbc, 0x7dbb, + 0x7db9, 0x7db8, 0x7db7, 0x7db6, 0x7db5, 0x7db3, 0x7db2, 0x7db1, + 0x7db0, 0x7daf, 0x7dae, 0x7dac, 0x7dab, 0x7daa, 0x7da9, 0x7da8, + 0x7da6, 0x7da5, 0x7da4, 0x7da3, 0x7da2, 0x7da0, 0x7d9f, 0x7d9e, + 0x7d9d, 0x7d9c, 0x7d9a, 0x7d99, 0x7d98, 0x7d97, 0x7d95, 0x7d94, + 0x7d93, 0x7d92, 0x7d91, 0x7d8f, 0x7d8e, 0x7d8d, 0x7d8c, 0x7d8a, + 0x7d89, 0x7d88, 0x7d87, 0x7d86, 0x7d84, 0x7d83, 0x7d82, 0x7d81, + 0x7d7f, 0x7d7e, 0x7d7d, 0x7d7c, 0x7d7a, 0x7d79, 0x7d78, 0x7d77, + 0x7d75, 0x7d74, 0x7d73, 0x7d72, 0x7d70, 0x7d6f, 0x7d6e, 0x7d6d, + 0x7d6b, 0x7d6a, 0x7d69, 0x7d68, 0x7d66, 0x7d65, 0x7d64, 0x7d63, + 0x7d61, 0x7d60, 0x7d5f, 0x7d5e, 0x7d5c, 0x7d5b, 0x7d5a, 0x7d59, + 0x7d57, 0x7d56, 0x7d55, 0x7d53, 0x7d52, 0x7d51, 0x7d50, 0x7d4e, + 0x7d4d, 0x7d4c, 0x7d4a, 0x7d49, 0x7d48, 0x7d47, 0x7d45, 0x7d44, + 0x7d43, 0x7d41, 0x7d40, 0x7d3f, 0x7d3e, 0x7d3c, 0x7d3b, 0x7d3a, + 0x7d38, 0x7d37, 0x7d36, 0x7d34, 0x7d33, 0x7d32, 0x7d31, 0x7d2f, + 0x7d2e, 0x7d2d, 0x7d2b, 0x7d2a, 0x7d29, 0x7d27, 0x7d26, 0x7d25, + 0x7d23, 0x7d22, 0x7d21, 0x7d1f, 0x7d1e, 0x7d1d, 0x7d1b, 0x7d1a, + 0x7d19, 0x7d17, 0x7d16, 0x7d15, 0x7d13, 0x7d12, 0x7d11, 0x7d0f, + 0x7d0e, 0x7d0d, 0x7d0b, 0x7d0a, 0x7d09, 0x7d07, 0x7d06, 0x7d05, + 0x7d03, 0x7d02, 0x7d01, 0x7cff, 0x7cfe, 0x7cfd, 0x7cfb, 0x7cfa, + 0x7cf9, 0x7cf7, 0x7cf6, 0x7cf4, 0x7cf3, 0x7cf2, 0x7cf0, 0x7cef, + 0x7cee, 0x7cec, 0x7ceb, 0x7ce9, 0x7ce8, 0x7ce7, 0x7ce5, 0x7ce4, + 0x7ce3, 0x7ce1, 0x7ce0, 0x7cde, 0x7cdd, 0x7cdc, 0x7cda, 0x7cd9, + 0x7cd8, 0x7cd6, 0x7cd5, 0x7cd3, 0x7cd2, 0x7cd1, 0x7ccf, 0x7cce, + 0x7ccc, 0x7ccb, 0x7cca, 0x7cc8, 0x7cc7, 0x7cc5, 0x7cc4, 0x7cc3, + 0x7cc1, 0x7cc0, 0x7cbe, 0x7cbd, 0x7cbc, 0x7cba, 0x7cb9, 0x7cb7, + 0x7cb6, 0x7cb5, 0x7cb3, 0x7cb2, 0x7cb0, 0x7caf, 0x7cad, 0x7cac, + 0x7cab, 0x7ca9, 0x7ca8, 0x7ca6, 0x7ca5, 0x7ca3, 0x7ca2, 0x7ca1, + 0x7c9f, 0x7c9e, 0x7c9c, 0x7c9b, 0x7c99, 0x7c98, 0x7c97, 0x7c95, + 0x7c94, 0x7c92, 0x7c91, 0x7c8f, 0x7c8e, 0x7c8c, 0x7c8b, 0x7c8a, + 0x7c88, 0x7c87, 0x7c85, 0x7c84, 0x7c82, 0x7c81, 0x7c7f, 0x7c7e, + 0x7c7c, 0x7c7b, 0x7c79, 0x7c78, 0x7c77, 0x7c75, 0x7c74, 0x7c72, + 0x7c71, 0x7c6f, 0x7c6e, 0x7c6c, 0x7c6b, 0x7c69, 0x7c68, 0x7c66, + 0x7c65, 0x7c63, 0x7c62, 0x7c60, 0x7c5f, 0x7c5d, 0x7c5c, 0x7c5a, + 0x7c59, 0x7c58, 0x7c56, 0x7c55, 0x7c53, 0x7c52, 0x7c50, 0x7c4f, + 0x7c4d, 0x7c4c, 0x7c4a, 0x7c49, 0x7c47, 0x7c46, 0x7c44, 0x7c43, + 0x7c41, 0x7c3f, 0x7c3e, 0x7c3c, 0x7c3b, 0x7c39, 0x7c38, 0x7c36, + 0x7c35, 0x7c33, 0x7c32, 0x7c30, 0x7c2f, 0x7c2d, 0x7c2c, 0x7c2a, + 0x7c29, 0x7c27, 0x7c26, 0x7c24, 0x7c23, 0x7c21, 0x7c20, 0x7c1e, + 0x7c1c, 0x7c1b, 0x7c19, 0x7c18, 0x7c16, 0x7c15, 0x7c13, 0x7c12, + 0x7c10, 0x7c0f, 0x7c0d, 0x7c0b, 0x7c0a, 0x7c08, 0x7c07, 0x7c05, + 0x7c04, 0x7c02, 0x7c01, 0x7bff, 0x7bfd, 0x7bfc, 0x7bfa, 0x7bf9, + 0x7bf7, 0x7bf6, 0x7bf4, 0x7bf3, 0x7bf1, 0x7bef, 0x7bee, 0x7bec, + 0x7beb, 0x7be9, 0x7be8, 0x7be6, 0x7be4, 0x7be3, 0x7be1, 0x7be0, + 0x7bde, 0x7bdc, 0x7bdb, 0x7bd9, 0x7bd8, 0x7bd6, 0x7bd5, 0x7bd3, + 0x7bd1, 0x7bd0, 0x7bce, 0x7bcd, 0x7bcb, 0x7bc9, 0x7bc8, 0x7bc6, + 0x7bc5, 0x7bc3, 0x7bc1, 0x7bc0, 0x7bbe, 0x7bbd, 0x7bbb, 0x7bb9, + 0x7bb8, 0x7bb6, 0x7bb5, 0x7bb3, 0x7bb1, 0x7bb0, 0x7bae, 0x7bac, + 0x7bab, 0x7ba9, 0x7ba8, 0x7ba6, 0x7ba4, 0x7ba3, 0x7ba1, 0x7b9f, + 0x7b9e, 0x7b9c, 0x7b9b, 0x7b99, 0x7b97, 0x7b96, 0x7b94, 0x7b92, + 0x7b91, 0x7b8f, 0x7b8d, 0x7b8c, 0x7b8a, 0x7b89, 0x7b87, 0x7b85, + 0x7b84, 0x7b82, 0x7b80, 0x7b7f, 0x7b7d, 0x7b7b, 0x7b7a, 0x7b78, + 0x7b76, 0x7b75, 0x7b73, 0x7b71, 0x7b70, 0x7b6e, 0x7b6c, 0x7b6b, + 0x7b69, 0x7b67, 0x7b66, 0x7b64, 0x7b62, 0x7b61, 0x7b5f, 0x7b5d, + 0x7b5c, 0x7b5a, 0x7b58, 0x7b57, 0x7b55, 0x7b53, 0x7b52, 0x7b50, + 0x7b4e, 0x7b4d, 0x7b4b, 0x7b49, 0x7b47, 0x7b46, 0x7b44, 0x7b42, + 0x7b41, 0x7b3f, 0x7b3d, 0x7b3c, 0x7b3a, 0x7b38, 0x7b37, 0x7b35, + 0x7b33, 0x7b31, 0x7b30, 0x7b2e, 0x7b2c, 0x7b2b, 0x7b29, 0x7b27, + 0x7b25, 0x7b24, 0x7b22, 0x7b20, 0x7b1f, 0x7b1d, 0x7b1b, 0x7b19, + 0x7b18, 0x7b16, 0x7b14, 0x7b13, 0x7b11, 0x7b0f, 0x7b0d, 0x7b0c, + 0x7b0a, 0x7b08, 0x7b06, 0x7b05, 0x7b03, 0x7b01, 0x7aff, 0x7afe, + 0x7afc, 0x7afa, 0x7af8, 0x7af7, 0x7af5, 0x7af3, 0x7af2, 0x7af0, + 0x7aee, 0x7aec, 0x7aeb, 0x7ae9, 0x7ae7, 0x7ae5, 0x7ae3, 0x7ae2, + 0x7ae0, 0x7ade, 0x7adc, 0x7adb, 0x7ad9, 0x7ad7, 0x7ad5, 0x7ad4, + 0x7ad2, 0x7ad0, 0x7ace, 0x7acd, 0x7acb, 0x7ac9, 0x7ac7, 0x7ac5, + 0x7ac4, 0x7ac2, 0x7ac0, 0x7abe, 0x7abd, 0x7abb, 0x7ab9, 0x7ab7, + 0x7ab5, 0x7ab4, 0x7ab2, 0x7ab0, 0x7aae, 0x7aac, 0x7aab, 0x7aa9, + 0x7aa7, 0x7aa5, 0x7aa3, 0x7aa2, 0x7aa0, 0x7a9e, 0x7a9c, 0x7a9a, + 0x7a99, 0x7a97, 0x7a95, 0x7a93, 0x7a91, 0x7a90, 0x7a8e, 0x7a8c, + 0x7a8a, 0x7a88, 0x7a87, 0x7a85, 0x7a83, 0x7a81, 0x7a7f, 0x7a7d, + 0x7a7c, 0x7a7a, 0x7a78, 0x7a76, 0x7a74, 0x7a72, 0x7a71, 0x7a6f, + 0x7a6d, 0x7a6b, 0x7a69, 0x7a67, 0x7a66, 0x7a64, 0x7a62, 0x7a60, + 0x7a5e, 0x7a5c, 0x7a5b, 0x7a59, 0x7a57, 0x7a55, 0x7a53, 0x7a51, + 0x7a4f, 0x7a4e, 0x7a4c, 0x7a4a, 0x7a48, 0x7a46, 0x7a44, 0x7a42, + 0x7a41, 0x7a3f, 0x7a3d, 0x7a3b, 0x7a39, 0x7a37, 0x7a35, 0x7a34, + 0x7a32, 0x7a30, 0x7a2e, 0x7a2c, 0x7a2a, 0x7a28, 0x7a26, 0x7a25, + 0x7a23, 0x7a21, 0x7a1f, 0x7a1d, 0x7a1b, 0x7a19, 0x7a17, 0x7a16, + 0x7a14, 0x7a12, 0x7a10, 0x7a0e, 0x7a0c, 0x7a0a, 0x7a08, 0x7a06, + 0x7a04, 0x7a03, 0x7a01, 0x79ff, 0x79fd, 0x79fb, 0x79f9, 0x79f7, + 0x79f5, 0x79f3, 0x79f1, 0x79f0, 0x79ee, 0x79ec, 0x79ea, 0x79e8, + 0x79e6, 0x79e4, 0x79e2, 0x79e0, 0x79de, 0x79dc, 0x79da, 0x79d9, + 0x79d7, 0x79d5, 0x79d3, 0x79d1, 0x79cf, 0x79cd, 0x79cb, 0x79c9, + 0x79c7, 0x79c5, 0x79c3, 0x79c1, 0x79bf, 0x79bd, 0x79bc, 0x79ba, + 0x79b8, 0x79b6, 0x79b4, 0x79b2, 0x79b0, 0x79ae, 0x79ac, 0x79aa, + 0x79a8, 0x79a6, 0x79a4, 0x79a2, 0x79a0, 0x799e, 0x799c, 0x799a, + 0x7998, 0x7996, 0x7994, 0x7992, 0x7991, 0x798f, 0x798d, 0x798b, + 0x7989, 0x7987, 0x7985, 0x7983, 0x7981, 0x797f, 0x797d, 0x797b, + 0x7979, 0x7977, 0x7975, 0x7973, 0x7971, 0x796f, 0x796d, 0x796b, + 0x7969, 0x7967, 0x7965, 0x7963, 0x7961, 0x795f, 0x795d, 0x795b, + 0x7959, 0x7957, 0x7955, 0x7953, 0x7951, 0x794f, 0x794d, 0x794b, + 0x7949, 0x7947, 0x7945, 0x7943, 0x7941, 0x793f, 0x793d, 0x793b, + 0x7939, 0x7937, 0x7935, 0x7933, 0x7931, 0x792f, 0x792d, 0x792b, + 0x7929, 0x7927, 0x7925, 0x7923, 0x7921, 0x791f, 0x791d, 0x791a, + 0x7918, 0x7916, 0x7914, 0x7912, 0x7910, 0x790e, 0x790c, 0x790a, + 0x7908, 0x7906, 0x7904, 0x7902, 0x7900, 0x78fe, 0x78fc, 0x78fa, + 0x78f8, 0x78f6, 0x78f4, 0x78f2, 0x78f0, 0x78ed, 0x78eb, 0x78e9, + 0x78e7, 0x78e5, 0x78e3, 0x78e1, 0x78df, 0x78dd, 0x78db, 0x78d9, + 0x78d7, 0x78d5, 0x78d3, 0x78d1, 0x78ce, 0x78cc, 0x78ca, 0x78c8, + 0x78c6, 0x78c4, 0x78c2, 0x78c0, 0x78be, 0x78bc, 0x78ba, 0x78b8, + 0x78b5, 0x78b3, 0x78b1, 0x78af, 0x78ad, 0x78ab, 0x78a9, 0x78a7, + 0x78a5, 0x78a3, 0x78a0, 0x789e, 0x789c, 0x789a, 0x7898, 0x7896, + 0x7894, 0x7892, 0x7890, 0x788e, 0x788b, 0x7889, 0x7887, 0x7885, + 0x7883, 0x7881, 0x787f, 0x787d, 0x787a, 0x7878, 0x7876, 0x7874, + 0x7872, 0x7870, 0x786e, 0x786c, 0x7869, 0x7867, 0x7865, 0x7863, + 0x7861, 0x785f, 0x785d, 0x785b, 0x7858, 0x7856, 0x7854, 0x7852, + 0x7850, 0x784e, 0x784c, 0x7849, 0x7847, 0x7845, 0x7843, 0x7841, + 0x783f, 0x783c, 0x783a, 0x7838, 0x7836, 0x7834, 0x7832, 0x7830, + 0x782d, 0x782b, 0x7829, 0x7827, 0x7825, 0x7823, 0x7820, 0x781e, + 0x781c, 0x781a, 0x7818, 0x7816, 0x7813, 0x7811, 0x780f, 0x780d, + 0x780b, 0x7808, 0x7806, 0x7804, 0x7802, 0x7800, 0x77fe, 0x77fb, + 0x77f9, 0x77f7, 0x77f5, 0x77f3, 0x77f0, 0x77ee, 0x77ec, 0x77ea, + 0x77e8, 0x77e5, 0x77e3, 0x77e1, 0x77df, 0x77dd, 0x77da, 0x77d8, + 0x77d6, 0x77d4, 0x77d2, 0x77cf, 0x77cd, 0x77cb, 0x77c9, 0x77c6, + 0x77c4, 0x77c2, 0x77c0, 0x77be, 0x77bb, 0x77b9, 0x77b7, 0x77b5, + 0x77b2, 0x77b0, 0x77ae, 0x77ac, 0x77aa, 0x77a7, 0x77a5, 0x77a3, + 0x77a1, 0x779e, 0x779c, 0x779a, 0x7798, 0x7795, 0x7793, 0x7791, + 0x778f, 0x778c, 0x778a, 0x7788, 0x7786, 0x7783, 0x7781, 0x777f, + 0x777d, 0x777a, 0x7778, 0x7776, 0x7774, 0x7771, 0x776f, 0x776d, + 0x776b, 0x7768, 0x7766, 0x7764, 0x7762, 0x775f, 0x775d, 0x775b, + 0x7759, 0x7756, 0x7754, 0x7752, 0x774f, 0x774d, 0x774b, 0x7749, + 0x7746, 0x7744, 0x7742, 0x773f, 0x773d, 0x773b, 0x7739, 0x7736, + 0x7734, 0x7732, 0x772f, 0x772d, 0x772b, 0x7729, 0x7726, 0x7724, + 0x7722, 0x771f, 0x771d, 0x771b, 0x7719, 0x7716, 0x7714, 0x7712, + 0x770f, 0x770d, 0x770b, 0x7708, 0x7706, 0x7704, 0x7701, 0x76ff, + 0x76fd, 0x76fa, 0x76f8, 0x76f6, 0x76f4, 0x76f1, 0x76ef, 0x76ed, + 0x76ea, 0x76e8, 0x76e6, 0x76e3, 0x76e1, 0x76df, 0x76dc, 0x76da, + 0x76d8, 0x76d5, 0x76d3, 0x76d1, 0x76ce, 0x76cc, 0x76ca, 0x76c7, + 0x76c5, 0x76c3, 0x76c0, 0x76be, 0x76bc, 0x76b9, 0x76b7, 0x76b4, + 0x76b2, 0x76b0, 0x76ad, 0x76ab, 0x76a9, 0x76a6, 0x76a4, 0x76a2, + 0x769f, 0x769d, 0x769b, 0x7698, 0x7696, 0x7693, 0x7691, 0x768f, + 0x768c, 0x768a, 0x7688, 0x7685, 0x7683, 0x7681, 0x767e, 0x767c, + 0x7679, 0x7677, 0x7675, 0x7672, 0x7670, 0x766d, 0x766b, 0x7669, + 0x7666, 0x7664, 0x7662, 0x765f, 0x765d, 0x765a, 0x7658, 0x7656, + 0x7653, 0x7651, 0x764e, 0x764c, 0x764a, 0x7647, 0x7645, 0x7642, + 0x7640, 0x763e, 0x763b, 0x7639, 0x7636, 0x7634, 0x7632, 0x762f, + 0x762d, 0x762a, 0x7628, 0x7625, 0x7623, 0x7621, 0x761e, 0x761c, + 0x7619, 0x7617, 0x7615, 0x7612, 0x7610, 0x760d, 0x760b, 0x7608, + 0x7606, 0x7604, 0x7601, 0x75ff, 0x75fc, 0x75fa, 0x75f7, 0x75f5, + 0x75f2, 0x75f0, 0x75ee, 0x75eb, 0x75e9, 0x75e6, 0x75e4, 0x75e1, + 0x75df, 0x75dc, 0x75da, 0x75d8, 0x75d5, 0x75d3, 0x75d0, 0x75ce, + 0x75cb, 0x75c9, 0x75c6, 0x75c4, 0x75c1, 0x75bf, 0x75bc, 0x75ba, + 0x75b8, 0x75b5, 0x75b3, 0x75b0, 0x75ae, 0x75ab, 0x75a9, 0x75a6, + 0x75a4, 0x75a1, 0x759f, 0x759c, 0x759a, 0x7597, 0x7595, 0x7592, + 0x7590, 0x758d, 0x758b, 0x7588, 0x7586, 0x7584, 0x7581, 0x757f, + 0x757c, 0x757a, 0x7577, 0x7575, 0x7572, 0x7570, 0x756d, 0x756b, + 0x7568, 0x7566, 0x7563, 0x7561, 0x755e, 0x755c, 0x7559, 0x7556, + 0x7554, 0x7551, 0x754f, 0x754c, 0x754a, 0x7547, 0x7545, 0x7542, + 0x7540, 0x753d, 0x753b, 0x7538, 0x7536, 0x7533, 0x7531, 0x752e, + 0x752c, 0x7529, 0x7527, 0x7524, 0x7522, 0x751f, 0x751c, 0x751a, + 0x7517, 0x7515, 0x7512, 0x7510, 0x750d, 0x750b, 0x7508, 0x7506, + 0x7503, 0x7501, 0x74fe, 0x74fb, 0x74f9, 0x74f6, 0x74f4, 0x74f1, + 0x74ef, 0x74ec, 0x74ea, 0x74e7, 0x74e4, 0x74e2, 0x74df, 0x74dd, + 0x74da, 0x74d8, 0x74d5, 0x74d2, 0x74d0, 0x74cd, 0x74cb, 0x74c8, + 0x74c6, 0x74c3, 0x74c0, 0x74be, 0x74bb, 0x74b9, 0x74b6, 0x74b4, + 0x74b1, 0x74ae, 0x74ac, 0x74a9, 0x74a7, 0x74a4, 0x74a1, 0x749f, + 0x749c, 0x749a, 0x7497, 0x7495, 0x7492, 0x748f, 0x748d, 0x748a, + 0x7488, 0x7485, 0x7482, 0x7480, 0x747d, 0x747b, 0x7478, 0x7475, + 0x7473, 0x7470, 0x746d, 0x746b, 0x7468, 0x7466, 0x7463, 0x7460, + 0x745e, 0x745b, 0x7459, 0x7456, 0x7453, 0x7451, 0x744e, 0x744b, + 0x7449, 0x7446, 0x7444, 0x7441, 0x743e, 0x743c, 0x7439, 0x7436, + 0x7434, 0x7431, 0x742f, 0x742c, 0x7429, 0x7427, 0x7424, 0x7421, + 0x741f, 0x741c, 0x7419, 0x7417, 0x7414, 0x7411, 0x740f, 0x740c, + 0x740a, 0x7407, 0x7404, 0x7402, 0x73ff, 0x73fc, 0x73fa, 0x73f7, + 0x73f4, 0x73f2, 0x73ef, 0x73ec, 0x73ea, 0x73e7, 0x73e4, 0x73e2, + 0x73df, 0x73dc, 0x73da, 0x73d7, 0x73d4, 0x73d2, 0x73cf, 0x73cc, + 0x73ca, 0x73c7, 0x73c4, 0x73c1, 0x73bf, 0x73bc, 0x73b9, 0x73b7, + 0x73b4, 0x73b1, 0x73af, 0x73ac, 0x73a9, 0x73a7, 0x73a4, 0x73a1, + 0x739f, 0x739c, 0x7399, 0x7396, 0x7394, 0x7391, 0x738e, 0x738c, + 0x7389, 0x7386, 0x7384, 0x7381, 0x737e, 0x737b, 0x7379, 0x7376, + 0x7373, 0x7371, 0x736e, 0x736b, 0x7368, 0x7366, 0x7363, 0x7360, + 0x735e, 0x735b, 0x7358, 0x7355, 0x7353, 0x7350, 0x734d, 0x734a, + 0x7348, 0x7345, 0x7342, 0x7340, 0x733d, 0x733a, 0x7337, 0x7335, + 0x7332, 0x732f, 0x732c, 0x732a, 0x7327, 0x7324, 0x7321, 0x731f, + 0x731c, 0x7319, 0x7316, 0x7314, 0x7311, 0x730e, 0x730b, 0x7309, + 0x7306, 0x7303, 0x7300, 0x72fe, 0x72fb, 0x72f8, 0x72f5, 0x72f3, + 0x72f0, 0x72ed, 0x72ea, 0x72e8, 0x72e5, 0x72e2, 0x72df, 0x72dc, + 0x72da, 0x72d7, 0x72d4, 0x72d1, 0x72cf, 0x72cc, 0x72c9, 0x72c6, + 0x72c3, 0x72c1, 0x72be, 0x72bb, 0x72b8, 0x72b5, 0x72b3, 0x72b0, + 0x72ad, 0x72aa, 0x72a8, 0x72a5, 0x72a2, 0x729f, 0x729c, 0x729a, + 0x7297, 0x7294, 0x7291, 0x728e, 0x728c, 0x7289, 0x7286, 0x7283, + 0x7280, 0x727e, 0x727b, 0x7278, 0x7275, 0x7272, 0x726f, 0x726d, + 0x726a, 0x7267, 0x7264, 0x7261, 0x725f, 0x725c, 0x7259, 0x7256, + 0x7253, 0x7250, 0x724e, 0x724b, 0x7248, 0x7245, 0x7242, 0x723f, + 0x723d, 0x723a, 0x7237, 0x7234, 0x7231, 0x722e, 0x722c, 0x7229, + 0x7226, 0x7223, 0x7220, 0x721d, 0x721b, 0x7218, 0x7215, 0x7212, + 0x720f, 0x720c, 0x7209, 0x7207, 0x7204, 0x7201, 0x71fe, 0x71fb, + 0x71f8, 0x71f5, 0x71f3, 0x71f0, 0x71ed, 0x71ea, 0x71e7, 0x71e4, + 0x71e1, 0x71df, 0x71dc, 0x71d9, 0x71d6, 0x71d3, 0x71d0, 0x71cd, + 0x71ca, 0x71c8, 0x71c5, 0x71c2, 0x71bf, 0x71bc, 0x71b9, 0x71b6, + 0x71b3, 0x71b0, 0x71ae, 0x71ab, 0x71a8, 0x71a5, 0x71a2, 0x719f, + 0x719c, 0x7199, 0x7196, 0x7194, 0x7191, 0x718e, 0x718b, 0x7188, + 0x7185, 0x7182, 0x717f, 0x717c, 0x7179, 0x7177, 0x7174, 0x7171, + 0x716e, 0x716b, 0x7168, 0x7165, 0x7162, 0x715f, 0x715c, 0x7159, + 0x7156, 0x7154, 0x7151, 0x714e, 0x714b, 0x7148, 0x7145, 0x7142, + 0x713f, 0x713c, 0x7139, 0x7136, 0x7133, 0x7130, 0x712d, 0x712b, + 0x7128, 0x7125, 0x7122, 0x711f, 0x711c, 0x7119, 0x7116, 0x7113, + 0x7110, 0x710d, 0x710a, 0x7107, 0x7104, 0x7101, 0x70fe, 0x70fb, + 0x70f8, 0x70f6, 0x70f3, 0x70f0, 0x70ed, 0x70ea, 0x70e7, 0x70e4, + 0x70e1, 0x70de, 0x70db, 0x70d8, 0x70d5, 0x70d2, 0x70cf, 0x70cc, + 0x70c9, 0x70c6, 0x70c3, 0x70c0, 0x70bd, 0x70ba, 0x70b7, 0x70b4, + 0x70b1, 0x70ae, 0x70ab, 0x70a8, 0x70a5, 0x70a2, 0x709f, 0x709c, + 0x7099, 0x7096, 0x7093, 0x7090, 0x708d, 0x708a, 0x7087, 0x7084, + 0x7081, 0x707e, 0x707b, 0x7078, 0x7075, 0x7072, 0x706f, 0x706c, + 0x7069, 0x7066, 0x7063, 0x7060, 0x705d, 0x705a, 0x7057, 0x7054, + 0x7051, 0x704e, 0x704b, 0x7048, 0x7045, 0x7042, 0x703f, 0x703c, + 0x7039, 0x7036, 0x7033, 0x7030, 0x702d, 0x702a, 0x7027, 0x7024, + 0x7021, 0x701e, 0x701b, 0x7018, 0x7015, 0x7012, 0x700f, 0x700c, + 0x7009, 0x7006, 0x7003, 0x7000, 0x6ffd, 0x6ffa, 0x6ff7, 0x6ff3, + 0x6ff0, 0x6fed, 0x6fea, 0x6fe7, 0x6fe4, 0x6fe1, 0x6fde, 0x6fdb, + 0x6fd8, 0x6fd5, 0x6fd2, 0x6fcf, 0x6fcc, 0x6fc9, 0x6fc6, 0x6fc3, + 0x6fc0, 0x6fbc, 0x6fb9, 0x6fb6, 0x6fb3, 0x6fb0, 0x6fad, 0x6faa, + 0x6fa7, 0x6fa4, 0x6fa1, 0x6f9e, 0x6f9b, 0x6f98, 0x6f95, 0x6f91, + 0x6f8e, 0x6f8b, 0x6f88, 0x6f85, 0x6f82, 0x6f7f, 0x6f7c, 0x6f79, + 0x6f76, 0x6f73, 0x6f70, 0x6f6c, 0x6f69, 0x6f66, 0x6f63, 0x6f60, + 0x6f5d, 0x6f5a, 0x6f57, 0x6f54, 0x6f51, 0x6f4d, 0x6f4a, 0x6f47, + 0x6f44, 0x6f41, 0x6f3e, 0x6f3b, 0x6f38, 0x6f35, 0x6f31, 0x6f2e, + 0x6f2b, 0x6f28, 0x6f25, 0x6f22, 0x6f1f, 0x6f1c, 0x6f19, 0x6f15, + 0x6f12, 0x6f0f, 0x6f0c, 0x6f09, 0x6f06, 0x6f03, 0x6f00, 0x6efc, + 0x6ef9, 0x6ef6, 0x6ef3, 0x6ef0, 0x6eed, 0x6eea, 0x6ee7, 0x6ee3, + 0x6ee0, 0x6edd, 0x6eda, 0x6ed7, 0x6ed4, 0x6ed1, 0x6ecd, 0x6eca, + 0x6ec7, 0x6ec4, 0x6ec1, 0x6ebe, 0x6eba, 0x6eb7, 0x6eb4, 0x6eb1, + 0x6eae, 0x6eab, 0x6ea8, 0x6ea4, 0x6ea1, 0x6e9e, 0x6e9b, 0x6e98, + 0x6e95, 0x6e91, 0x6e8e, 0x6e8b, 0x6e88, 0x6e85, 0x6e82, 0x6e7e, + 0x6e7b, 0x6e78, 0x6e75, 0x6e72, 0x6e6f, 0x6e6b, 0x6e68, 0x6e65, + 0x6e62, 0x6e5f, 0x6e5b, 0x6e58, 0x6e55, 0x6e52, 0x6e4f, 0x6e4c, + 0x6e48, 0x6e45, 0x6e42, 0x6e3f, 0x6e3c, 0x6e38, 0x6e35, 0x6e32, + 0x6e2f, 0x6e2c, 0x6e28, 0x6e25, 0x6e22, 0x6e1f, 0x6e1c, 0x6e18, + 0x6e15, 0x6e12, 0x6e0f, 0x6e0c, 0x6e08, 0x6e05, 0x6e02, 0x6dff, + 0x6dfb, 0x6df8, 0x6df5, 0x6df2, 0x6def, 0x6deb, 0x6de8, 0x6de5, + 0x6de2, 0x6ddf, 0x6ddb, 0x6dd8, 0x6dd5, 0x6dd2, 0x6dce, 0x6dcb, + 0x6dc8, 0x6dc5, 0x6dc1, 0x6dbe, 0x6dbb, 0x6db8, 0x6db5, 0x6db1, + 0x6dae, 0x6dab, 0x6da8, 0x6da4, 0x6da1, 0x6d9e, 0x6d9b, 0x6d97, + 0x6d94, 0x6d91, 0x6d8e, 0x6d8a, 0x6d87, 0x6d84, 0x6d81, 0x6d7d, + 0x6d7a, 0x6d77, 0x6d74, 0x6d70, 0x6d6d, 0x6d6a, 0x6d67, 0x6d63, + 0x6d60, 0x6d5d, 0x6d59, 0x6d56, 0x6d53, 0x6d50, 0x6d4c, 0x6d49, + 0x6d46, 0x6d43, 0x6d3f, 0x6d3c, 0x6d39, 0x6d36, 0x6d32, 0x6d2f, + 0x6d2c, 0x6d28, 0x6d25, 0x6d22, 0x6d1f, 0x6d1b, 0x6d18, 0x6d15, + 0x6d11, 0x6d0e, 0x6d0b, 0x6d08, 0x6d04, 0x6d01, 0x6cfe, 0x6cfa, + 0x6cf7, 0x6cf4, 0x6cf0, 0x6ced, 0x6cea, 0x6ce7, 0x6ce3, 0x6ce0, + 0x6cdd, 0x6cd9, 0x6cd6, 0x6cd3, 0x6ccf, 0x6ccc, 0x6cc9, 0x6cc5, + 0x6cc2, 0x6cbf, 0x6cbc, 0x6cb8, 0x6cb5, 0x6cb2, 0x6cae, 0x6cab, + 0x6ca8, 0x6ca4, 0x6ca1, 0x6c9e, 0x6c9a, 0x6c97, 0x6c94, 0x6c90, + 0x6c8d, 0x6c8a, 0x6c86, 0x6c83, 0x6c80, 0x6c7c, 0x6c79, 0x6c76, + 0x6c72, 0x6c6f, 0x6c6c, 0x6c68, 0x6c65, 0x6c62, 0x6c5e, 0x6c5b, + 0x6c58, 0x6c54, 0x6c51, 0x6c4e, 0x6c4a, 0x6c47, 0x6c44, 0x6c40, + 0x6c3d, 0x6c39, 0x6c36, 0x6c33, 0x6c2f, 0x6c2c, 0x6c29, 0x6c25, + 0x6c22, 0x6c1f, 0x6c1b, 0x6c18, 0x6c15, 0x6c11, 0x6c0e, 0x6c0a, + 0x6c07, 0x6c04, 0x6c00, 0x6bfd, 0x6bfa, 0x6bf6, 0x6bf3, 0x6bef, + 0x6bec, 0x6be9, 0x6be5, 0x6be2, 0x6bdf, 0x6bdb, 0x6bd8, 0x6bd4, + 0x6bd1, 0x6bce, 0x6bca, 0x6bc7, 0x6bc3, 0x6bc0, 0x6bbd, 0x6bb9, + 0x6bb6, 0x6bb2, 0x6baf, 0x6bac, 0x6ba8, 0x6ba5, 0x6ba1, 0x6b9e, + 0x6b9b, 0x6b97, 0x6b94, 0x6b90, 0x6b8d, 0x6b8a, 0x6b86, 0x6b83, + 0x6b7f, 0x6b7c, 0x6b79, 0x6b75, 0x6b72, 0x6b6e, 0x6b6b, 0x6b68, + 0x6b64, 0x6b61, 0x6b5d, 0x6b5a, 0x6b56, 0x6b53, 0x6b50, 0x6b4c, + 0x6b49, 0x6b45, 0x6b42, 0x6b3e, 0x6b3b, 0x6b38, 0x6b34, 0x6b31, + 0x6b2d, 0x6b2a, 0x6b26, 0x6b23, 0x6b20, 0x6b1c, 0x6b19, 0x6b15, + 0x6b12, 0x6b0e, 0x6b0b, 0x6b07, 0x6b04, 0x6b01, 0x6afd, 0x6afa, + 0x6af6, 0x6af3, 0x6aef, 0x6aec, 0x6ae8, 0x6ae5, 0x6ae1, 0x6ade, + 0x6adb, 0x6ad7, 0x6ad4, 0x6ad0, 0x6acd, 0x6ac9, 0x6ac6, 0x6ac2, + 0x6abf, 0x6abb, 0x6ab8, 0x6ab4, 0x6ab1, 0x6aae, 0x6aaa, 0x6aa7, + 0x6aa3, 0x6aa0, 0x6a9c, 0x6a99, 0x6a95, 0x6a92, 0x6a8e, 0x6a8b, + 0x6a87, 0x6a84, 0x6a80, 0x6a7d, 0x6a79, 0x6a76, 0x6a72, 0x6a6f, + 0x6a6b, 0x6a68, 0x6a64, 0x6a61, 0x6a5d, 0x6a5a, 0x6a56, 0x6a53, + 0x6a4f, 0x6a4c, 0x6a48, 0x6a45, 0x6a41, 0x6a3e, 0x6a3a, 0x6a37, + 0x6a33, 0x6a30, 0x6a2c, 0x6a29, 0x6a25, 0x6a22, 0x6a1e, 0x6a1b, + 0x6a17, 0x6a14, 0x6a10, 0x6a0d, 0x6a09, 0x6a06, 0x6a02, 0x69ff, + 0x69fb, 0x69f8, 0x69f4, 0x69f1, 0x69ed, 0x69e9, 0x69e6, 0x69e2, + 0x69df, 0x69db, 0x69d8, 0x69d4, 0x69d1, 0x69cd, 0x69ca, 0x69c6, + 0x69c3, 0x69bf, 0x69bc, 0x69b8, 0x69b4, 0x69b1, 0x69ad, 0x69aa, + 0x69a6, 0x69a3, 0x699f, 0x699c, 0x6998, 0x6995, 0x6991, 0x698d, + 0x698a, 0x6986, 0x6983, 0x697f, 0x697c, 0x6978, 0x6975, 0x6971, + 0x696d, 0x696a, 0x6966, 0x6963, 0x695f, 0x695c, 0x6958, 0x6954, + 0x6951, 0x694d, 0x694a, 0x6946, 0x6943, 0x693f, 0x693b, 0x6938, + 0x6934, 0x6931, 0x692d, 0x692a, 0x6926, 0x6922, 0x691f, 0x691b, + 0x6918, 0x6914, 0x6910, 0x690d, 0x6909, 0x6906, 0x6902, 0x68fe, + 0x68fb, 0x68f7, 0x68f4, 0x68f0, 0x68ec, 0x68e9, 0x68e5, 0x68e2, + 0x68de, 0x68da, 0x68d7, 0x68d3, 0x68d0, 0x68cc, 0x68c8, 0x68c5, + 0x68c1, 0x68be, 0x68ba, 0x68b6, 0x68b3, 0x68af, 0x68ac, 0x68a8, + 0x68a4, 0x68a1, 0x689d, 0x6899, 0x6896, 0x6892, 0x688f, 0x688b, + 0x6887, 0x6884, 0x6880, 0x687c, 0x6879, 0x6875, 0x6872, 0x686e, + 0x686a, 0x6867, 0x6863, 0x685f, 0x685c, 0x6858, 0x6854, 0x6851, + 0x684d, 0x684a, 0x6846, 0x6842, 0x683f, 0x683b, 0x6837, 0x6834, + 0x6830, 0x682c, 0x6829, 0x6825, 0x6821, 0x681e, 0x681a, 0x6816, + 0x6813, 0x680f, 0x680b, 0x6808, 0x6804, 0x6800, 0x67fd, 0x67f9, + 0x67f5, 0x67f2, 0x67ee, 0x67ea, 0x67e7, 0x67e3, 0x67df, 0x67dc, + 0x67d8, 0x67d4, 0x67d1, 0x67cd, 0x67c9, 0x67c6, 0x67c2, 0x67be, + 0x67bb, 0x67b7, 0x67b3, 0x67b0, 0x67ac, 0x67a8, 0x67a5, 0x67a1, + 0x679d, 0x679a, 0x6796, 0x6792, 0x678e, 0x678b, 0x6787, 0x6783, + 0x6780, 0x677c, 0x6778, 0x6775, 0x6771, 0x676d, 0x6769, 0x6766, + 0x6762, 0x675e, 0x675b, 0x6757, 0x6753, 0x6750, 0x674c, 0x6748, + 0x6744, 0x6741, 0x673d, 0x6739, 0x6736, 0x6732, 0x672e, 0x672a, + 0x6727, 0x6723, 0x671f, 0x671c, 0x6718, 0x6714, 0x6710, 0x670d, + 0x6709, 0x6705, 0x6701, 0x66fe, 0x66fa, 0x66f6, 0x66f3, 0x66ef, + 0x66eb, 0x66e7, 0x66e4, 0x66e0, 0x66dc, 0x66d8, 0x66d5, 0x66d1, + 0x66cd, 0x66c9, 0x66c6, 0x66c2, 0x66be, 0x66ba, 0x66b7, 0x66b3, + 0x66af, 0x66ab, 0x66a8, 0x66a4, 0x66a0, 0x669c, 0x6699, 0x6695, + 0x6691, 0x668d, 0x668a, 0x6686, 0x6682, 0x667e, 0x667b, 0x6677, + 0x6673, 0x666f, 0x666b, 0x6668, 0x6664, 0x6660, 0x665c, 0x6659, + 0x6655, 0x6651, 0x664d, 0x664a, 0x6646, 0x6642, 0x663e, 0x663a, + 0x6637, 0x6633, 0x662f, 0x662b, 0x6627, 0x6624, 0x6620, 0x661c, + 0x6618, 0x6615, 0x6611, 0x660d, 0x6609, 0x6605, 0x6602, 0x65fe, + 0x65fa, 0x65f6, 0x65f2, 0x65ef, 0x65eb, 0x65e7, 0x65e3, 0x65df, + 0x65dc, 0x65d8, 0x65d4, 0x65d0, 0x65cc, 0x65c9, 0x65c5, 0x65c1, + 0x65bd, 0x65b9, 0x65b5, 0x65b2, 0x65ae, 0x65aa, 0x65a6, 0x65a2, + 0x659f, 0x659b, 0x6597, 0x6593, 0x658f, 0x658b, 0x6588, 0x6584, + 0x6580, 0x657c, 0x6578, 0x6574, 0x6571, 0x656d, 0x6569, 0x6565, + 0x6561, 0x655d, 0x655a, 0x6556, 0x6552, 0x654e, 0x654a, 0x6546, + 0x6543, 0x653f, 0x653b, 0x6537, 0x6533, 0x652f, 0x652c, 0x6528, + 0x6524, 0x6520, 0x651c, 0x6518, 0x6514, 0x6511, 0x650d, 0x6509, + 0x6505, 0x6501, 0x64fd, 0x64f9, 0x64f6, 0x64f2, 0x64ee, 0x64ea, + 0x64e6, 0x64e2, 0x64de, 0x64db, 0x64d7, 0x64d3, 0x64cf, 0x64cb, + 0x64c7, 0x64c3, 0x64bf, 0x64bc, 0x64b8, 0x64b4, 0x64b0, 0x64ac, + 0x64a8, 0x64a4, 0x64a0, 0x649c, 0x6499, 0x6495, 0x6491, 0x648d, + 0x6489, 0x6485, 0x6481, 0x647d, 0x6479, 0x6476, 0x6472, 0x646e, + 0x646a, 0x6466, 0x6462, 0x645e, 0x645a, 0x6456, 0x6453, 0x644f, + 0x644b, 0x6447, 0x6443, 0x643f, 0x643b, 0x6437, 0x6433, 0x642f, + 0x642b, 0x6428, 0x6424, 0x6420, 0x641c, 0x6418, 0x6414, 0x6410, + 0x640c, 0x6408, 0x6404, 0x6400, 0x63fc, 0x63f9, 0x63f5, 0x63f1, + 0x63ed, 0x63e9, 0x63e5, 0x63e1, 0x63dd, 0x63d9, 0x63d5, 0x63d1, + 0x63cd, 0x63c9, 0x63c5, 0x63c1, 0x63be, 0x63ba, 0x63b6, 0x63b2, + 0x63ae, 0x63aa, 0x63a6, 0x63a2, 0x639e, 0x639a, 0x6396, 0x6392, + 0x638e, 0x638a, 0x6386, 0x6382, 0x637e, 0x637a, 0x6377, 0x6373, + 0x636f, 0x636b, 0x6367, 0x6363, 0x635f, 0x635b, 0x6357, 0x6353, + 0x634f, 0x634b, 0x6347, 0x6343, 0x633f, 0x633b, 0x6337, 0x6333, + 0x632f, 0x632b, 0x6327, 0x6323, 0x631f, 0x631b, 0x6317, 0x6313, + 0x630f, 0x630b, 0x6307, 0x6303, 0x62ff, 0x62fb, 0x62f7, 0x62f3, + 0x62f0, 0x62ec, 0x62e8, 0x62e4, 0x62e0, 0x62dc, 0x62d8, 0x62d4, + 0x62d0, 0x62cc, 0x62c8, 0x62c4, 0x62c0, 0x62bc, 0x62b8, 0x62b4, + 0x62b0, 0x62ac, 0x62a8, 0x62a4, 0x62a0, 0x629c, 0x6298, 0x6294, + 0x6290, 0x628c, 0x6288, 0x6284, 0x6280, 0x627c, 0x6278, 0x6273, + 0x626f, 0x626b, 0x6267, 0x6263, 0x625f, 0x625b, 0x6257, 0x6253, + 0x624f, 0x624b, 0x6247, 0x6243, 0x623f, 0x623b, 0x6237, 0x6233, + 0x622f, 0x622b, 0x6227, 0x6223, 0x621f, 0x621b, 0x6217, 0x6213, + 0x620f, 0x620b, 0x6207, 0x6203, 0x61ff, 0x61fb, 0x61f7, 0x61f3, + 0x61ee, 0x61ea, 0x61e6, 0x61e2, 0x61de, 0x61da, 0x61d6, 0x61d2, + 0x61ce, 0x61ca, 0x61c6, 0x61c2, 0x61be, 0x61ba, 0x61b6, 0x61b2, + 0x61ae, 0x61aa, 0x61a6, 0x61a1, 0x619d, 0x6199, 0x6195, 0x6191, + 0x618d, 0x6189, 0x6185, 0x6181, 0x617d, 0x6179, 0x6175, 0x6171, + 0x616d, 0x6168, 0x6164, 0x6160, 0x615c, 0x6158, 0x6154, 0x6150, + 0x614c, 0x6148, 0x6144, 0x6140, 0x613c, 0x6137, 0x6133, 0x612f, + 0x612b, 0x6127, 0x6123, 0x611f, 0x611b, 0x6117, 0x6113, 0x610f, + 0x610a, 0x6106, 0x6102, 0x60fe, 0x60fa, 0x60f6, 0x60f2, 0x60ee, + 0x60ea, 0x60e6, 0x60e1, 0x60dd, 0x60d9, 0x60d5, 0x60d1, 0x60cd, + 0x60c9, 0x60c5, 0x60c1, 0x60bc, 0x60b8, 0x60b4, 0x60b0, 0x60ac, + 0x60a8, 0x60a4, 0x60a0, 0x609c, 0x6097, 0x6093, 0x608f, 0x608b, + 0x6087, 0x6083, 0x607f, 0x607b, 0x6076, 0x6072, 0x606e, 0x606a, + 0x6066, 0x6062, 0x605e, 0x6059, 0x6055, 0x6051, 0x604d, 0x6049, + 0x6045, 0x6041, 0x603c, 0x6038, 0x6034, 0x6030, 0x602c, 0x6028, + 0x6024, 0x601f, 0x601b, 0x6017, 0x6013, 0x600f, 0x600b, 0x6007, + 0x6002, 0x5ffe, 0x5ffa, 0x5ff6, 0x5ff2, 0x5fee, 0x5fe9, 0x5fe5, + 0x5fe1, 0x5fdd, 0x5fd9, 0x5fd5, 0x5fd0, 0x5fcc, 0x5fc8, 0x5fc4, + 0x5fc0, 0x5fbc, 0x5fb7, 0x5fb3, 0x5faf, 0x5fab, 0x5fa7, 0x5fa3, + 0x5f9e, 0x5f9a, 0x5f96, 0x5f92, 0x5f8e, 0x5f8a, 0x5f85, 0x5f81, + 0x5f7d, 0x5f79, 0x5f75, 0x5f70, 0x5f6c, 0x5f68, 0x5f64, 0x5f60, + 0x5f5b, 0x5f57, 0x5f53, 0x5f4f, 0x5f4b, 0x5f46, 0x5f42, 0x5f3e, + 0x5f3a, 0x5f36, 0x5f31, 0x5f2d, 0x5f29, 0x5f25, 0x5f21, 0x5f1c, + 0x5f18, 0x5f14, 0x5f10, 0x5f0c, 0x5f07, 0x5f03, 0x5eff, 0x5efb, + 0x5ef7, 0x5ef2, 0x5eee, 0x5eea, 0x5ee6, 0x5ee2, 0x5edd, 0x5ed9, + 0x5ed5, 0x5ed1, 0x5ecc, 0x5ec8, 0x5ec4, 0x5ec0, 0x5ebc, 0x5eb7, + 0x5eb3, 0x5eaf, 0x5eab, 0x5ea6, 0x5ea2, 0x5e9e, 0x5e9a, 0x5e95, + 0x5e91, 0x5e8d, 0x5e89, 0x5e85, 0x5e80, 0x5e7c, 0x5e78, 0x5e74, + 0x5e6f, 0x5e6b, 0x5e67, 0x5e63, 0x5e5e, 0x5e5a, 0x5e56, 0x5e52, + 0x5e4d, 0x5e49, 0x5e45, 0x5e41, 0x5e3c, 0x5e38, 0x5e34, 0x5e30, + 0x5e2b, 0x5e27, 0x5e23, 0x5e1f, 0x5e1a, 0x5e16, 0x5e12, 0x5e0e, + 0x5e09, 0x5e05, 0x5e01, 0x5dfd, 0x5df8, 0x5df4, 0x5df0, 0x5deb, + 0x5de7, 0x5de3, 0x5ddf, 0x5dda, 0x5dd6, 0x5dd2, 0x5dce, 0x5dc9, + 0x5dc5, 0x5dc1, 0x5dbc, 0x5db8, 0x5db4, 0x5db0, 0x5dab, 0x5da7, + 0x5da3, 0x5d9e, 0x5d9a, 0x5d96, 0x5d92, 0x5d8d, 0x5d89, 0x5d85, + 0x5d80, 0x5d7c, 0x5d78, 0x5d74, 0x5d6f, 0x5d6b, 0x5d67, 0x5d62, + 0x5d5e, 0x5d5a, 0x5d55, 0x5d51, 0x5d4d, 0x5d49, 0x5d44, 0x5d40, + 0x5d3c, 0x5d37, 0x5d33, 0x5d2f, 0x5d2a, 0x5d26, 0x5d22, 0x5d1e, + 0x5d19, 0x5d15, 0x5d11, 0x5d0c, 0x5d08, 0x5d04, 0x5cff, 0x5cfb, + 0x5cf7, 0x5cf2, 0x5cee, 0x5cea, 0x5ce5, 0x5ce1, 0x5cdd, 0x5cd8, + 0x5cd4, 0x5cd0, 0x5ccb, 0x5cc7, 0x5cc3, 0x5cbe, 0x5cba, 0x5cb6, + 0x5cb1, 0x5cad, 0x5ca9, 0x5ca4, 0x5ca0, 0x5c9c, 0x5c97, 0x5c93, + 0x5c8f, 0x5c8a, 0x5c86, 0x5c82, 0x5c7d, 0x5c79, 0x5c75, 0x5c70, + 0x5c6c, 0x5c68, 0x5c63, 0x5c5f, 0x5c5b, 0x5c56, 0x5c52, 0x5c4e, + 0x5c49, 0x5c45, 0x5c41, 0x5c3c, 0x5c38, 0x5c33, 0x5c2f, 0x5c2b, + 0x5c26, 0x5c22, 0x5c1e, 0x5c19, 0x5c15, 0x5c11, 0x5c0c, 0x5c08, + 0x5c03, 0x5bff, 0x5bfb, 0x5bf6, 0x5bf2, 0x5bee, 0x5be9, 0x5be5, + 0x5be0, 0x5bdc, 0x5bd8, 0x5bd3, 0x5bcf, 0x5bcb, 0x5bc6, 0x5bc2, + 0x5bbd, 0x5bb9, 0x5bb5, 0x5bb0, 0x5bac, 0x5ba8, 0x5ba3, 0x5b9f, + 0x5b9a, 0x5b96, 0x5b92, 0x5b8d, 0x5b89, 0x5b84, 0x5b80, 0x5b7c, + 0x5b77, 0x5b73, 0x5b6e, 0x5b6a, 0x5b66, 0x5b61, 0x5b5d, 0x5b58, + 0x5b54, 0x5b50, 0x5b4b, 0x5b47, 0x5b42, 0x5b3e, 0x5b3a, 0x5b35, + 0x5b31, 0x5b2c, 0x5b28, 0x5b24, 0x5b1f, 0x5b1b, 0x5b16, 0x5b12, + 0x5b0e, 0x5b09, 0x5b05, 0x5b00, 0x5afc, 0x5af7, 0x5af3, 0x5aef, + 0x5aea, 0x5ae6, 0x5ae1, 0x5add, 0x5ad8, 0x5ad4, 0x5ad0, 0x5acb, + 0x5ac7, 0x5ac2, 0x5abe, 0x5ab9, 0x5ab5, 0x5ab1, 0x5aac, 0x5aa8, + 0x5aa3, 0x5a9f, 0x5a9a, 0x5a96, 0x5a92, 0x5a8d, 0x5a89, 0x5a84, + 0x5a80, 0x5a7b, 0x5a77, 0x5a72, 0x5a6e, 0x5a6a, 0x5a65, 0x5a61, + 0x5a5c, 0x5a58, 0x5a53, 0x5a4f, 0x5a4a, 0x5a46, 0x5a41, 0x5a3d, + 0x5a39, 0x5a34, 0x5a30, 0x5a2b, 0x5a27, 0x5a22, 0x5a1e, 0x5a19, + 0x5a15, 0x5a10, 0x5a0c, 0x5a07, 0x5a03, 0x59ff, 0x59fa, 0x59f6, + 0x59f1, 0x59ed, 0x59e8, 0x59e4, 0x59df, 0x59db, 0x59d6, 0x59d2, + 0x59cd, 0x59c9, 0x59c4, 0x59c0, 0x59bb, 0x59b7, 0x59b2, 0x59ae, + 0x59a9, 0x59a5, 0x59a1, 0x599c, 0x5998, 0x5993, 0x598f, 0x598a, + 0x5986, 0x5981, 0x597d, 0x5978, 0x5974, 0x596f, 0x596b, 0x5966, + 0x5962, 0x595d, 0x5959, 0x5954, 0x5950, 0x594b, 0x5947, 0x5942, + 0x593e, 0x5939, 0x5935, 0x5930, 0x592c, 0x5927, 0x5923, 0x591e, + 0x591a, 0x5915, 0x5911, 0x590c, 0x5908, 0x5903, 0x58fe, 0x58fa, + 0x58f5, 0x58f1, 0x58ec, 0x58e8, 0x58e3, 0x58df, 0x58da, 0x58d6, + 0x58d1, 0x58cd, 0x58c8, 0x58c4, 0x58bf, 0x58bb, 0x58b6, 0x58b2, + 0x58ad, 0x58a9, 0x58a4, 0x589f, 0x589b, 0x5896, 0x5892, 0x588d, + 0x5889, 0x5884, 0x5880, 0x587b, 0x5877, 0x5872, 0x586e, 0x5869, + 0x5864, 0x5860, 0x585b, 0x5857, 0x5852, 0x584e, 0x5849, 0x5845, + 0x5840, 0x583c, 0x5837, 0x5832, 0x582e, 0x5829, 0x5825, 0x5820, + 0x581c, 0x5817, 0x5813, 0x580e, 0x5809, 0x5805, 0x5800, 0x57fc, + 0x57f7, 0x57f3, 0x57ee, 0x57e9, 0x57e5, 0x57e0, 0x57dc, 0x57d7, + 0x57d3, 0x57ce, 0x57c9, 0x57c5, 0x57c0, 0x57bc, 0x57b7, 0x57b3, + 0x57ae, 0x57a9, 0x57a5, 0x57a0, 0x579c, 0x5797, 0x5793, 0x578e, + 0x5789, 0x5785, 0x5780, 0x577c, 0x5777, 0x5772, 0x576e, 0x5769, + 0x5765, 0x5760, 0x575c, 0x5757, 0x5752, 0x574e, 0x5749, 0x5745, + 0x5740, 0x573b, 0x5737, 0x5732, 0x572e, 0x5729, 0x5724, 0x5720, + 0x571b, 0x5717, 0x5712, 0x570d, 0x5709, 0x5704, 0x56ff, 0x56fb, + 0x56f6, 0x56f2, 0x56ed, 0x56e8, 0x56e4, 0x56df, 0x56db, 0x56d6, + 0x56d1, 0x56cd, 0x56c8, 0x56c4, 0x56bf, 0x56ba, 0x56b6, 0x56b1, + 0x56ac, 0x56a8, 0x56a3, 0x569f, 0x569a, 0x5695, 0x5691, 0x568c, + 0x5687, 0x5683, 0x567e, 0x5679, 0x5675, 0x5670, 0x566c, 0x5667, + 0x5662, 0x565e, 0x5659, 0x5654, 0x5650, 0x564b, 0x5646, 0x5642, + 0x563d, 0x5639, 0x5634, 0x562f, 0x562b, 0x5626, 0x5621, 0x561d, + 0x5618, 0x5613, 0x560f, 0x560a, 0x5605, 0x5601, 0x55fc, 0x55f7, + 0x55f3, 0x55ee, 0x55ea, 0x55e5, 0x55e0, 0x55dc, 0x55d7, 0x55d2, + 0x55ce, 0x55c9, 0x55c4, 0x55c0, 0x55bb, 0x55b6, 0x55b2, 0x55ad, + 0x55a8, 0x55a4, 0x559f, 0x559a, 0x5596, 0x5591, 0x558c, 0x5588, + 0x5583, 0x557e, 0x5579, 0x5575, 0x5570, 0x556b, 0x5567, 0x5562, + 0x555d, 0x5559, 0x5554, 0x554f, 0x554b, 0x5546, 0x5541, 0x553d, + 0x5538, 0x5533, 0x552f, 0x552a, 0x5525, 0x5520, 0x551c, 0x5517, + 0x5512, 0x550e, 0x5509, 0x5504, 0x5500, 0x54fb, 0x54f6, 0x54f2, + 0x54ed, 0x54e8, 0x54e3, 0x54df, 0x54da, 0x54d5, 0x54d1, 0x54cc, + 0x54c7, 0x54c2, 0x54be, 0x54b9, 0x54b4, 0x54b0, 0x54ab, 0x54a6, + 0x54a2, 0x549d, 0x5498, 0x5493, 0x548f, 0x548a, 0x5485, 0x5480, + 0x547c, 0x5477, 0x5472, 0x546e, 0x5469, 0x5464, 0x545f, 0x545b, + 0x5456, 0x5451, 0x544d, 0x5448, 0x5443, 0x543e, 0x543a, 0x5435, + 0x5430, 0x542b, 0x5427, 0x5422, 0x541d, 0x5418, 0x5414, 0x540f, + 0x540a, 0x5406, 0x5401, 0x53fc, 0x53f7, 0x53f3, 0x53ee, 0x53e9, + 0x53e4, 0x53e0, 0x53db, 0x53d6, 0x53d1, 0x53cd, 0x53c8, 0x53c3, + 0x53be, 0x53ba, 0x53b5, 0x53b0, 0x53ab, 0x53a7, 0x53a2, 0x539d, + 0x5398, 0x5394, 0x538f, 0x538a, 0x5385, 0x5380, 0x537c, 0x5377, + 0x5372, 0x536d, 0x5369, 0x5364, 0x535f, 0x535a, 0x5356, 0x5351, + 0x534c, 0x5347, 0x5343, 0x533e, 0x5339, 0x5334, 0x532f, 0x532b, + 0x5326, 0x5321, 0x531c, 0x5318, 0x5313, 0x530e, 0x5309, 0x5304, + 0x5300, 0x52fb, 0x52f6, 0x52f1, 0x52ec, 0x52e8, 0x52e3, 0x52de, + 0x52d9, 0x52d5, 0x52d0, 0x52cb, 0x52c6, 0x52c1, 0x52bd, 0x52b8, + 0x52b3, 0x52ae, 0x52a9, 0x52a5, 0x52a0, 0x529b, 0x5296, 0x5291, + 0x528d, 0x5288, 0x5283, 0x527e, 0x5279, 0x5275, 0x5270, 0x526b, + 0x5266, 0x5261, 0x525d, 0x5258, 0x5253, 0x524e, 0x5249, 0x5244, + 0x5240, 0x523b, 0x5236, 0x5231, 0x522c, 0x5228, 0x5223, 0x521e, + 0x5219, 0x5214, 0x520f, 0x520b, 0x5206, 0x5201, 0x51fc, 0x51f7, + 0x51f3, 0x51ee, 0x51e9, 0x51e4, 0x51df, 0x51da, 0x51d6, 0x51d1, + 0x51cc, 0x51c7, 0x51c2, 0x51bd, 0x51b9, 0x51b4, 0x51af, 0x51aa, + 0x51a5, 0x51a0, 0x519c, 0x5197, 0x5192, 0x518d, 0x5188, 0x5183, + 0x517e, 0x517a, 0x5175, 0x5170, 0x516b, 0x5166, 0x5161, 0x515d, + 0x5158, 0x5153, 0x514e, 0x5149, 0x5144, 0x513f, 0x513b, 0x5136, + 0x5131, 0x512c, 0x5127, 0x5122, 0x511d, 0x5119, 0x5114, 0x510f, + 0x510a, 0x5105, 0x5100, 0x50fb, 0x50f7, 0x50f2, 0x50ed, 0x50e8, + 0x50e3, 0x50de, 0x50d9, 0x50d4, 0x50d0, 0x50cb, 0x50c6, 0x50c1, + 0x50bc, 0x50b7, 0x50b2, 0x50ad, 0x50a9, 0x50a4, 0x509f, 0x509a, + 0x5095, 0x5090, 0x508b, 0x5086, 0x5082, 0x507d, 0x5078, 0x5073, + 0x506e, 0x5069, 0x5064, 0x505f, 0x505a, 0x5056, 0x5051, 0x504c, + 0x5047, 0x5042, 0x503d, 0x5038, 0x5033, 0x502e, 0x5029, 0x5025, + 0x5020, 0x501b, 0x5016, 0x5011, 0x500c, 0x5007, 0x5002, 0x4ffd, + 0x4ff8, 0x4ff4, 0x4fef, 0x4fea, 0x4fe5, 0x4fe0, 0x4fdb, 0x4fd6, + 0x4fd1, 0x4fcc, 0x4fc7, 0x4fc2, 0x4fbe, 0x4fb9, 0x4fb4, 0x4faf, + 0x4faa, 0x4fa5, 0x4fa0, 0x4f9b, 0x4f96, 0x4f91, 0x4f8c, 0x4f87, + 0x4f82, 0x4f7e, 0x4f79, 0x4f74, 0x4f6f, 0x4f6a, 0x4f65, 0x4f60, + 0x4f5b, 0x4f56, 0x4f51, 0x4f4c, 0x4f47, 0x4f42, 0x4f3d, 0x4f39, + 0x4f34, 0x4f2f, 0x4f2a, 0x4f25, 0x4f20, 0x4f1b, 0x4f16, 0x4f11, + 0x4f0c, 0x4f07, 0x4f02, 0x4efd, 0x4ef8, 0x4ef3, 0x4eee, 0x4ee9, + 0x4ee5, 0x4ee0, 0x4edb, 0x4ed6, 0x4ed1, 0x4ecc, 0x4ec7, 0x4ec2, + 0x4ebd, 0x4eb8, 0x4eb3, 0x4eae, 0x4ea9, 0x4ea4, 0x4e9f, 0x4e9a, + 0x4e95, 0x4e90, 0x4e8b, 0x4e86, 0x4e81, 0x4e7c, 0x4e78, 0x4e73, + 0x4e6e, 0x4e69, 0x4e64, 0x4e5f, 0x4e5a, 0x4e55, 0x4e50, 0x4e4b, + 0x4e46, 0x4e41, 0x4e3c, 0x4e37, 0x4e32, 0x4e2d, 0x4e28, 0x4e23, + 0x4e1e, 0x4e19, 0x4e14, 0x4e0f, 0x4e0a, 0x4e05, 0x4e00, 0x4dfb, + 0x4df6, 0x4df1, 0x4dec, 0x4de7, 0x4de2, 0x4ddd, 0x4dd8, 0x4dd3, + 0x4dce, 0x4dc9, 0x4dc4, 0x4dbf, 0x4dba, 0x4db5, 0x4db0, 0x4dab, + 0x4da6, 0x4da1, 0x4d9c, 0x4d97, 0x4d92, 0x4d8d, 0x4d88, 0x4d83, + 0x4d7e, 0x4d79, 0x4d74, 0x4d6f, 0x4d6a, 0x4d65, 0x4d60, 0x4d5b, + 0x4d56, 0x4d51, 0x4d4c, 0x4d47, 0x4d42, 0x4d3d, 0x4d38, 0x4d33, + 0x4d2e, 0x4d29, 0x4d24, 0x4d1f, 0x4d1a, 0x4d15, 0x4d10, 0x4d0b, + 0x4d06, 0x4d01, 0x4cfc, 0x4cf7, 0x4cf2, 0x4ced, 0x4ce8, 0x4ce3, + 0x4cde, 0x4cd9, 0x4cd4, 0x4ccf, 0x4cca, 0x4cc5, 0x4cc0, 0x4cbb, + 0x4cb6, 0x4cb1, 0x4cac, 0x4ca7, 0x4ca2, 0x4c9d, 0x4c98, 0x4c93, + 0x4c8e, 0x4c88, 0x4c83, 0x4c7e, 0x4c79, 0x4c74, 0x4c6f, 0x4c6a, + 0x4c65, 0x4c60, 0x4c5b, 0x4c56, 0x4c51, 0x4c4c, 0x4c47, 0x4c42, + 0x4c3d, 0x4c38, 0x4c33, 0x4c2e, 0x4c29, 0x4c24, 0x4c1f, 0x4c1a, + 0x4c14, 0x4c0f, 0x4c0a, 0x4c05, 0x4c00, 0x4bfb, 0x4bf6, 0x4bf1, + 0x4bec, 0x4be7, 0x4be2, 0x4bdd, 0x4bd8, 0x4bd3, 0x4bce, 0x4bc9, + 0x4bc4, 0x4bbe, 0x4bb9, 0x4bb4, 0x4baf, 0x4baa, 0x4ba5, 0x4ba0, + 0x4b9b, 0x4b96, 0x4b91, 0x4b8c, 0x4b87, 0x4b82, 0x4b7d, 0x4b77, + 0x4b72, 0x4b6d, 0x4b68, 0x4b63, 0x4b5e, 0x4b59, 0x4b54, 0x4b4f, + 0x4b4a, 0x4b45, 0x4b40, 0x4b3b, 0x4b35, 0x4b30, 0x4b2b, 0x4b26, + 0x4b21, 0x4b1c, 0x4b17, 0x4b12, 0x4b0d, 0x4b08, 0x4b03, 0x4afd, + 0x4af8, 0x4af3, 0x4aee, 0x4ae9, 0x4ae4, 0x4adf, 0x4ada, 0x4ad5, + 0x4ad0, 0x4acb, 0x4ac5, 0x4ac0, 0x4abb, 0x4ab6, 0x4ab1, 0x4aac, + 0x4aa7, 0x4aa2, 0x4a9d, 0x4a97, 0x4a92, 0x4a8d, 0x4a88, 0x4a83, + 0x4a7e, 0x4a79, 0x4a74, 0x4a6f, 0x4a6a, 0x4a64, 0x4a5f, 0x4a5a, + 0x4a55, 0x4a50, 0x4a4b, 0x4a46, 0x4a41, 0x4a3b, 0x4a36, 0x4a31, + 0x4a2c, 0x4a27, 0x4a22, 0x4a1d, 0x4a18, 0x4a12, 0x4a0d, 0x4a08, + 0x4a03, 0x49fe, 0x49f9, 0x49f4, 0x49ef, 0x49e9, 0x49e4, 0x49df, + 0x49da, 0x49d5, 0x49d0, 0x49cb, 0x49c6, 0x49c0, 0x49bb, 0x49b6, + 0x49b1, 0x49ac, 0x49a7, 0x49a2, 0x499c, 0x4997, 0x4992, 0x498d, + 0x4988, 0x4983, 0x497e, 0x4978, 0x4973, 0x496e, 0x4969, 0x4964, + 0x495f, 0x495a, 0x4954, 0x494f, 0x494a, 0x4945, 0x4940, 0x493b, + 0x4936, 0x4930, 0x492b, 0x4926, 0x4921, 0x491c, 0x4917, 0x4911, + 0x490c, 0x4907, 0x4902, 0x48fd, 0x48f8, 0x48f2, 0x48ed, 0x48e8, + 0x48e3, 0x48de, 0x48d9, 0x48d3, 0x48ce, 0x48c9, 0x48c4, 0x48bf, + 0x48ba, 0x48b4, 0x48af, 0x48aa, 0x48a5, 0x48a0, 0x489b, 0x4895, + 0x4890, 0x488b, 0x4886, 0x4881, 0x487c, 0x4876, 0x4871, 0x486c, + 0x4867, 0x4862, 0x485c, 0x4857, 0x4852, 0x484d, 0x4848, 0x4843, + 0x483d, 0x4838, 0x4833, 0x482e, 0x4829, 0x4823, 0x481e, 0x4819, + 0x4814, 0x480f, 0x4809, 0x4804, 0x47ff, 0x47fa, 0x47f5, 0x47ef, + 0x47ea, 0x47e5, 0x47e0, 0x47db, 0x47d5, 0x47d0, 0x47cb, 0x47c6, + 0x47c1, 0x47bb, 0x47b6, 0x47b1, 0x47ac, 0x47a7, 0x47a1, 0x479c, + 0x4797, 0x4792, 0x478d, 0x4787, 0x4782, 0x477d, 0x4778, 0x4773, + 0x476d, 0x4768, 0x4763, 0x475e, 0x4758, 0x4753, 0x474e, 0x4749, + 0x4744, 0x473e, 0x4739, 0x4734, 0x472f, 0x4729, 0x4724, 0x471f, + 0x471a, 0x4715, 0x470f, 0x470a, 0x4705, 0x4700, 0x46fa, 0x46f5, + 0x46f0, 0x46eb, 0x46e6, 0x46e0, 0x46db, 0x46d6, 0x46d1, 0x46cb, + 0x46c6, 0x46c1, 0x46bc, 0x46b6, 0x46b1, 0x46ac, 0x46a7, 0x46a1, + 0x469c, 0x4697, 0x4692, 0x468d, 0x4687, 0x4682, 0x467d, 0x4678, + 0x4672, 0x466d, 0x4668, 0x4663, 0x465d, 0x4658, 0x4653, 0x464e, + 0x4648, 0x4643, 0x463e, 0x4639, 0x4633, 0x462e, 0x4629, 0x4624, + 0x461e, 0x4619, 0x4614, 0x460e, 0x4609, 0x4604, 0x45ff, 0x45f9, + 0x45f4, 0x45ef, 0x45ea, 0x45e4, 0x45df, 0x45da, 0x45d5, 0x45cf, + 0x45ca, 0x45c5, 0x45c0, 0x45ba, 0x45b5, 0x45b0, 0x45aa, 0x45a5, + 0x45a0, 0x459b, 0x4595, 0x4590, 0x458b, 0x4586, 0x4580, 0x457b, + 0x4576, 0x4570, 0x456b, 0x4566, 0x4561, 0x455b, 0x4556, 0x4551, + 0x454b, 0x4546, 0x4541, 0x453c, 0x4536, 0x4531, 0x452c, 0x4526, + 0x4521, 0x451c, 0x4517, 0x4511, 0x450c, 0x4507, 0x4501, 0x44fc, + 0x44f7, 0x44f2, 0x44ec, 0x44e7, 0x44e2, 0x44dc, 0x44d7, 0x44d2, + 0x44cd, 0x44c7, 0x44c2, 0x44bd, 0x44b7, 0x44b2, 0x44ad, 0x44a7, + 0x44a2, 0x449d, 0x4497, 0x4492, 0x448d, 0x4488, 0x4482, 0x447d, + 0x4478, 0x4472, 0x446d, 0x4468, 0x4462, 0x445d, 0x4458, 0x4452, + 0x444d, 0x4448, 0x4443, 0x443d, 0x4438, 0x4433, 0x442d, 0x4428, + 0x4423, 0x441d, 0x4418, 0x4413, 0x440d, 0x4408, 0x4403, 0x43fd, + 0x43f8, 0x43f3, 0x43ed, 0x43e8, 0x43e3, 0x43dd, 0x43d8, 0x43d3, + 0x43cd, 0x43c8, 0x43c3, 0x43bd, 0x43b8, 0x43b3, 0x43ad, 0x43a8, + 0x43a3, 0x439d, 0x4398, 0x4393, 0x438d, 0x4388, 0x4383, 0x437d, + 0x4378, 0x4373, 0x436d, 0x4368, 0x4363, 0x435d, 0x4358, 0x4353, + 0x434d, 0x4348, 0x4343, 0x433d, 0x4338, 0x4333, 0x432d, 0x4328, + 0x4323, 0x431d, 0x4318, 0x4313, 0x430d, 0x4308, 0x4302, 0x42fd, + 0x42f8, 0x42f2, 0x42ed, 0x42e8, 0x42e2, 0x42dd, 0x42d8, 0x42d2, + 0x42cd, 0x42c8, 0x42c2, 0x42bd, 0x42b7, 0x42b2, 0x42ad, 0x42a7, + 0x42a2, 0x429d, 0x4297, 0x4292, 0x428d, 0x4287, 0x4282, 0x427c, + 0x4277, 0x4272, 0x426c, 0x4267, 0x4262, 0x425c, 0x4257, 0x4251, + 0x424c, 0x4247, 0x4241, 0x423c, 0x4237, 0x4231, 0x422c, 0x4226, + 0x4221, 0x421c, 0x4216, 0x4211, 0x420c, 0x4206, 0x4201, 0x41fb, + 0x41f6, 0x41f1, 0x41eb, 0x41e6, 0x41e0, 0x41db, 0x41d6, 0x41d0, + 0x41cb, 0x41c6, 0x41c0, 0x41bb, 0x41b5, 0x41b0, 0x41ab, 0x41a5, + 0x41a0, 0x419a, 0x4195, 0x4190, 0x418a, 0x4185, 0x417f, 0x417a, + 0x4175, 0x416f, 0x416a, 0x4164, 0x415f, 0x415a, 0x4154, 0x414f, + 0x4149, 0x4144, 0x413f, 0x4139, 0x4134, 0x412e, 0x4129, 0x4124, + 0x411e, 0x4119, 0x4113, 0x410e, 0x4108, 0x4103, 0x40fe, 0x40f8, + 0x40f3, 0x40ed, 0x40e8, 0x40e3, 0x40dd, 0x40d8, 0x40d2, 0x40cd, + 0x40c8, 0x40c2, 0x40bd, 0x40b7, 0x40b2, 0x40ac, 0x40a7, 0x40a2, + 0x409c, 0x4097, 0x4091, 0x408c, 0x4086, 0x4081, 0x407c, 0x4076, + 0x4071, 0x406b, 0x4066, 0x4060, 0x405b, 0x4056, 0x4050, 0x404b, + 0x4045, 0x4040, 0x403a, 0x4035, 0x4030, 0x402a, 0x4025, 0x401f, + 0x401a, 0x4014, 0x400f, 0x4009, 0x4004, 0x3fff, 0x3ff9, 0x3ff4, + 0x3fee, 0x3fe9, 0x3fe3, 0x3fde, 0x3fd8, 0x3fd3, 0x3fce, 0x3fc8, + 0x3fc3, 0x3fbd, 0x3fb8, 0x3fb2, 0x3fad, 0x3fa7, 0x3fa2, 0x3f9d, + 0x3f97, 0x3f92, 0x3f8c, 0x3f87, 0x3f81, 0x3f7c, 0x3f76, 0x3f71, + 0x3f6b, 0x3f66, 0x3f61, 0x3f5b, 0x3f56, 0x3f50, 0x3f4b, 0x3f45, + 0x3f40, 0x3f3a, 0x3f35, 0x3f2f, 0x3f2a, 0x3f24, 0x3f1f, 0x3f1a, + 0x3f14, 0x3f0f, 0x3f09, 0x3f04, 0x3efe, 0x3ef9, 0x3ef3, 0x3eee, + 0x3ee8, 0x3ee3, 0x3edd, 0x3ed8, 0x3ed2, 0x3ecd, 0x3ec7, 0x3ec2, + 0x3ebd, 0x3eb7, 0x3eb2, 0x3eac, 0x3ea7, 0x3ea1, 0x3e9c, 0x3e96, + 0x3e91, 0x3e8b, 0x3e86, 0x3e80, 0x3e7b, 0x3e75, 0x3e70, 0x3e6a, + 0x3e65, 0x3e5f, 0x3e5a, 0x3e54, 0x3e4f, 0x3e49, 0x3e44, 0x3e3e, + 0x3e39, 0x3e33, 0x3e2e, 0x3e28, 0x3e23, 0x3e1d, 0x3e18, 0x3e12, + 0x3e0d, 0x3e07, 0x3e02, 0x3dfc, 0x3df7, 0x3df1, 0x3dec, 0x3de6, + 0x3de1, 0x3ddb, 0x3dd6, 0x3dd0, 0x3dcb, 0x3dc5, 0x3dc0, 0x3dba, + 0x3db5, 0x3daf, 0x3daa, 0x3da4, 0x3d9f, 0x3d99, 0x3d94, 0x3d8e, + 0x3d89, 0x3d83, 0x3d7e, 0x3d78, 0x3d73, 0x3d6d, 0x3d68, 0x3d62, + 0x3d5d, 0x3d57, 0x3d52, 0x3d4c, 0x3d47, 0x3d41, 0x3d3c, 0x3d36, + 0x3d31, 0x3d2b, 0x3d26, 0x3d20, 0x3d1b, 0x3d15, 0x3d10, 0x3d0a, + 0x3d04, 0x3cff, 0x3cf9, 0x3cf4, 0x3cee, 0x3ce9, 0x3ce3, 0x3cde, + 0x3cd8, 0x3cd3, 0x3ccd, 0x3cc8, 0x3cc2, 0x3cbd, 0x3cb7, 0x3cb2, + 0x3cac, 0x3ca7, 0x3ca1, 0x3c9b, 0x3c96, 0x3c90, 0x3c8b, 0x3c85, + 0x3c80, 0x3c7a, 0x3c75, 0x3c6f, 0x3c6a, 0x3c64, 0x3c5f, 0x3c59, + 0x3c53, 0x3c4e, 0x3c48, 0x3c43, 0x3c3d, 0x3c38, 0x3c32, 0x3c2d, + 0x3c27, 0x3c22, 0x3c1c, 0x3c16, 0x3c11, 0x3c0b, 0x3c06, 0x3c00, + 0x3bfb, 0x3bf5, 0x3bf0, 0x3bea, 0x3be5, 0x3bdf, 0x3bd9, 0x3bd4, + 0x3bce, 0x3bc9, 0x3bc3, 0x3bbe, 0x3bb8, 0x3bb3, 0x3bad, 0x3ba7, + 0x3ba2, 0x3b9c, 0x3b97, 0x3b91, 0x3b8c, 0x3b86, 0x3b80, 0x3b7b, + 0x3b75, 0x3b70, 0x3b6a, 0x3b65, 0x3b5f, 0x3b5a, 0x3b54, 0x3b4e, + 0x3b49, 0x3b43, 0x3b3e, 0x3b38, 0x3b33, 0x3b2d, 0x3b27, 0x3b22, + 0x3b1c, 0x3b17, 0x3b11, 0x3b0c, 0x3b06, 0x3b00, 0x3afb, 0x3af5, + 0x3af0, 0x3aea, 0x3ae4, 0x3adf, 0x3ad9, 0x3ad4, 0x3ace, 0x3ac9, + 0x3ac3, 0x3abd, 0x3ab8, 0x3ab2, 0x3aad, 0x3aa7, 0x3aa2, 0x3a9c, + 0x3a96, 0x3a91, 0x3a8b, 0x3a86, 0x3a80, 0x3a7a, 0x3a75, 0x3a6f, + 0x3a6a, 0x3a64, 0x3a5e, 0x3a59, 0x3a53, 0x3a4e, 0x3a48, 0x3a42, + 0x3a3d, 0x3a37, 0x3a32, 0x3a2c, 0x3a26, 0x3a21, 0x3a1b, 0x3a16, + 0x3a10, 0x3a0b, 0x3a05, 0x39ff, 0x39fa, 0x39f4, 0x39ee, 0x39e9, + 0x39e3, 0x39de, 0x39d8, 0x39d2, 0x39cd, 0x39c7, 0x39c2, 0x39bc, + 0x39b6, 0x39b1, 0x39ab, 0x39a6, 0x39a0, 0x399a, 0x3995, 0x398f, + 0x398a, 0x3984, 0x397e, 0x3979, 0x3973, 0x396d, 0x3968, 0x3962, + 0x395d, 0x3957, 0x3951, 0x394c, 0x3946, 0x3941, 0x393b, 0x3935, + 0x3930, 0x392a, 0x3924, 0x391f, 0x3919, 0x3914, 0x390e, 0x3908, + 0x3903, 0x38fd, 0x38f7, 0x38f2, 0x38ec, 0x38e7, 0x38e1, 0x38db, + 0x38d6, 0x38d0, 0x38ca, 0x38c5, 0x38bf, 0x38ba, 0x38b4, 0x38ae, + 0x38a9, 0x38a3, 0x389d, 0x3898, 0x3892, 0x388c, 0x3887, 0x3881, + 0x387c, 0x3876, 0x3870, 0x386b, 0x3865, 0x385f, 0x385a, 0x3854, + 0x384e, 0x3849, 0x3843, 0x383d, 0x3838, 0x3832, 0x382d, 0x3827, + 0x3821, 0x381c, 0x3816, 0x3810, 0x380b, 0x3805, 0x37ff, 0x37fa, + 0x37f4, 0x37ee, 0x37e9, 0x37e3, 0x37dd, 0x37d8, 0x37d2, 0x37cc, + 0x37c7, 0x37c1, 0x37bc, 0x37b6, 0x37b0, 0x37ab, 0x37a5, 0x379f, + 0x379a, 0x3794, 0x378e, 0x3789, 0x3783, 0x377d, 0x3778, 0x3772, + 0x376c, 0x3767, 0x3761, 0x375b, 0x3756, 0x3750, 0x374a, 0x3745, + 0x373f, 0x3739, 0x3734, 0x372e, 0x3728, 0x3723, 0x371d, 0x3717, + 0x3712, 0x370c, 0x3706, 0x3701, 0x36fb, 0x36f5, 0x36f0, 0x36ea, + 0x36e4, 0x36df, 0x36d9, 0x36d3, 0x36ce, 0x36c8, 0x36c2, 0x36bc, + 0x36b7, 0x36b1, 0x36ab, 0x36a6, 0x36a0, 0x369a, 0x3695, 0x368f, + 0x3689, 0x3684, 0x367e, 0x3678, 0x3673, 0x366d, 0x3667, 0x3662, + 0x365c, 0x3656, 0x3650, 0x364b, 0x3645, 0x363f, 0x363a, 0x3634, + 0x362e, 0x3629, 0x3623, 0x361d, 0x3618, 0x3612, 0x360c, 0x3606, + 0x3601, 0x35fb, 0x35f5, 0x35f0, 0x35ea, 0x35e4, 0x35df, 0x35d9, + 0x35d3, 0x35cd, 0x35c8, 0x35c2, 0x35bc, 0x35b7, 0x35b1, 0x35ab, + 0x35a6, 0x35a0, 0x359a, 0x3594, 0x358f, 0x3589, 0x3583, 0x357e, + 0x3578, 0x3572, 0x356c, 0x3567, 0x3561, 0x355b, 0x3556, 0x3550, + 0x354a, 0x3544, 0x353f, 0x3539, 0x3533, 0x352e, 0x3528, 0x3522, + 0x351c, 0x3517, 0x3511, 0x350b, 0x3506, 0x3500, 0x34fa, 0x34f4, + 0x34ef, 0x34e9, 0x34e3, 0x34de, 0x34d8, 0x34d2, 0x34cc, 0x34c7, + 0x34c1, 0x34bb, 0x34b6, 0x34b0, 0x34aa, 0x34a4, 0x349f, 0x3499, + 0x3493, 0x348d, 0x3488, 0x3482, 0x347c, 0x3476, 0x3471, 0x346b, + 0x3465, 0x3460, 0x345a, 0x3454, 0x344e, 0x3449, 0x3443, 0x343d, + 0x3437, 0x3432, 0x342c, 0x3426, 0x3420, 0x341b, 0x3415, 0x340f, + 0x340a, 0x3404, 0x33fe, 0x33f8, 0x33f3, 0x33ed, 0x33e7, 0x33e1, + 0x33dc, 0x33d6, 0x33d0, 0x33ca, 0x33c5, 0x33bf, 0x33b9, 0x33b3, + 0x33ae, 0x33a8, 0x33a2, 0x339c, 0x3397, 0x3391, 0x338b, 0x3385, + 0x3380, 0x337a, 0x3374, 0x336e, 0x3369, 0x3363, 0x335d, 0x3357, + 0x3352, 0x334c, 0x3346, 0x3340, 0x333b, 0x3335, 0x332f, 0x3329, + 0x3324, 0x331e, 0x3318, 0x3312, 0x330c, 0x3307, 0x3301, 0x32fb, + 0x32f5, 0x32f0, 0x32ea, 0x32e4, 0x32de, 0x32d9, 0x32d3, 0x32cd, + 0x32c7, 0x32c2, 0x32bc, 0x32b6, 0x32b0, 0x32aa, 0x32a5, 0x329f, + 0x3299, 0x3293, 0x328e, 0x3288, 0x3282, 0x327c, 0x3276, 0x3271, + 0x326b, 0x3265, 0x325f, 0x325a, 0x3254, 0x324e, 0x3248, 0x3243, + 0x323d, 0x3237, 0x3231, 0x322b, 0x3226, 0x3220, 0x321a, 0x3214, + 0x320e, 0x3209, 0x3203, 0x31fd, 0x31f7, 0x31f2, 0x31ec, 0x31e6, + 0x31e0, 0x31da, 0x31d5, 0x31cf, 0x31c9, 0x31c3, 0x31bd, 0x31b8, + 0x31b2, 0x31ac, 0x31a6, 0x31a1, 0x319b, 0x3195, 0x318f, 0x3189, + 0x3184, 0x317e, 0x3178, 0x3172, 0x316c, 0x3167, 0x3161, 0x315b, + 0x3155, 0x314f, 0x314a, 0x3144, 0x313e, 0x3138, 0x3132, 0x312d, + 0x3127, 0x3121, 0x311b, 0x3115, 0x3110, 0x310a, 0x3104, 0x30fe, + 0x30f8, 0x30f3, 0x30ed, 0x30e7, 0x30e1, 0x30db, 0x30d6, 0x30d0, + 0x30ca, 0x30c4, 0x30be, 0x30b8, 0x30b3, 0x30ad, 0x30a7, 0x30a1, + 0x309b, 0x3096, 0x3090, 0x308a, 0x3084, 0x307e, 0x3079, 0x3073, + 0x306d, 0x3067, 0x3061, 0x305b, 0x3056, 0x3050, 0x304a, 0x3044, + 0x303e, 0x3039, 0x3033, 0x302d, 0x3027, 0x3021, 0x301b, 0x3016, + 0x3010, 0x300a, 0x3004, 0x2ffe, 0x2ff8, 0x2ff3, 0x2fed, 0x2fe7, + 0x2fe1, 0x2fdb, 0x2fd6, 0x2fd0, 0x2fca, 0x2fc4, 0x2fbe, 0x2fb8, + 0x2fb3, 0x2fad, 0x2fa7, 0x2fa1, 0x2f9b, 0x2f95, 0x2f90, 0x2f8a, + 0x2f84, 0x2f7e, 0x2f78, 0x2f72, 0x2f6d, 0x2f67, 0x2f61, 0x2f5b, + 0x2f55, 0x2f4f, 0x2f4a, 0x2f44, 0x2f3e, 0x2f38, 0x2f32, 0x2f2c, + 0x2f27, 0x2f21, 0x2f1b, 0x2f15, 0x2f0f, 0x2f09, 0x2f03, 0x2efe, + 0x2ef8, 0x2ef2, 0x2eec, 0x2ee6, 0x2ee0, 0x2edb, 0x2ed5, 0x2ecf, + 0x2ec9, 0x2ec3, 0x2ebd, 0x2eb7, 0x2eb2, 0x2eac, 0x2ea6, 0x2ea0, + 0x2e9a, 0x2e94, 0x2e8e, 0x2e89, 0x2e83, 0x2e7d, 0x2e77, 0x2e71, + 0x2e6b, 0x2e65, 0x2e60, 0x2e5a, 0x2e54, 0x2e4e, 0x2e48, 0x2e42, + 0x2e3c, 0x2e37, 0x2e31, 0x2e2b, 0x2e25, 0x2e1f, 0x2e19, 0x2e13, + 0x2e0e, 0x2e08, 0x2e02, 0x2dfc, 0x2df6, 0x2df0, 0x2dea, 0x2de5, + 0x2ddf, 0x2dd9, 0x2dd3, 0x2dcd, 0x2dc7, 0x2dc1, 0x2dbb, 0x2db6, + 0x2db0, 0x2daa, 0x2da4, 0x2d9e, 0x2d98, 0x2d92, 0x2d8d, 0x2d87, + 0x2d81, 0x2d7b, 0x2d75, 0x2d6f, 0x2d69, 0x2d63, 0x2d5e, 0x2d58, + 0x2d52, 0x2d4c, 0x2d46, 0x2d40, 0x2d3a, 0x2d34, 0x2d2f, 0x2d29, + 0x2d23, 0x2d1d, 0x2d17, 0x2d11, 0x2d0b, 0x2d05, 0x2cff, 0x2cfa, + 0x2cf4, 0x2cee, 0x2ce8, 0x2ce2, 0x2cdc, 0x2cd6, 0x2cd0, 0x2ccb, + 0x2cc5, 0x2cbf, 0x2cb9, 0x2cb3, 0x2cad, 0x2ca7, 0x2ca1, 0x2c9b, + 0x2c96, 0x2c90, 0x2c8a, 0x2c84, 0x2c7e, 0x2c78, 0x2c72, 0x2c6c, + 0x2c66, 0x2c61, 0x2c5b, 0x2c55, 0x2c4f, 0x2c49, 0x2c43, 0x2c3d, + 0x2c37, 0x2c31, 0x2c2b, 0x2c26, 0x2c20, 0x2c1a, 0x2c14, 0x2c0e, + 0x2c08, 0x2c02, 0x2bfc, 0x2bf6, 0x2bf0, 0x2beb, 0x2be5, 0x2bdf, + 0x2bd9, 0x2bd3, 0x2bcd, 0x2bc7, 0x2bc1, 0x2bbb, 0x2bb5, 0x2bb0, + 0x2baa, 0x2ba4, 0x2b9e, 0x2b98, 0x2b92, 0x2b8c, 0x2b86, 0x2b80, + 0x2b7a, 0x2b74, 0x2b6f, 0x2b69, 0x2b63, 0x2b5d, 0x2b57, 0x2b51, + 0x2b4b, 0x2b45, 0x2b3f, 0x2b39, 0x2b33, 0x2b2d, 0x2b28, 0x2b22, + 0x2b1c, 0x2b16, 0x2b10, 0x2b0a, 0x2b04, 0x2afe, 0x2af8, 0x2af2, + 0x2aec, 0x2ae6, 0x2ae1, 0x2adb, 0x2ad5, 0x2acf, 0x2ac9, 0x2ac3, + 0x2abd, 0x2ab7, 0x2ab1, 0x2aab, 0x2aa5, 0x2a9f, 0x2a99, 0x2a94, + 0x2a8e, 0x2a88, 0x2a82, 0x2a7c, 0x2a76, 0x2a70, 0x2a6a, 0x2a64, + 0x2a5e, 0x2a58, 0x2a52, 0x2a4c, 0x2a47, 0x2a41, 0x2a3b, 0x2a35, + 0x2a2f, 0x2a29, 0x2a23, 0x2a1d, 0x2a17, 0x2a11, 0x2a0b, 0x2a05, + 0x29ff, 0x29f9, 0x29f3, 0x29ee, 0x29e8, 0x29e2, 0x29dc, 0x29d6, + 0x29d0, 0x29ca, 0x29c4, 0x29be, 0x29b8, 0x29b2, 0x29ac, 0x29a6, + 0x29a0, 0x299a, 0x2994, 0x298e, 0x2989, 0x2983, 0x297d, 0x2977, + 0x2971, 0x296b, 0x2965, 0x295f, 0x2959, 0x2953, 0x294d, 0x2947, + 0x2941, 0x293b, 0x2935, 0x292f, 0x2929, 0x2923, 0x291d, 0x2918, + 0x2912, 0x290c, 0x2906, 0x2900, 0x28fa, 0x28f4, 0x28ee, 0x28e8, + 0x28e2, 0x28dc, 0x28d6, 0x28d0, 0x28ca, 0x28c4, 0x28be, 0x28b8, + 0x28b2, 0x28ac, 0x28a6, 0x28a0, 0x289a, 0x2895, 0x288f, 0x2889, + 0x2883, 0x287d, 0x2877, 0x2871, 0x286b, 0x2865, 0x285f, 0x2859, + 0x2853, 0x284d, 0x2847, 0x2841, 0x283b, 0x2835, 0x282f, 0x2829, + 0x2823, 0x281d, 0x2817, 0x2811, 0x280b, 0x2805, 0x27ff, 0x27f9, + 0x27f3, 0x27ee, 0x27e8, 0x27e2, 0x27dc, 0x27d6, 0x27d0, 0x27ca, + 0x27c4, 0x27be, 0x27b8, 0x27b2, 0x27ac, 0x27a6, 0x27a0, 0x279a, + 0x2794, 0x278e, 0x2788, 0x2782, 0x277c, 0x2776, 0x2770, 0x276a, + 0x2764, 0x275e, 0x2758, 0x2752, 0x274c, 0x2746, 0x2740, 0x273a, + 0x2734, 0x272e, 0x2728, 0x2722, 0x271c, 0x2716, 0x2710, 0x270a, + 0x2704, 0x26fe, 0x26f8, 0x26f2, 0x26ec, 0x26e7, 0x26e1, 0x26db, + 0x26d5, 0x26cf, 0x26c9, 0x26c3, 0x26bd, 0x26b7, 0x26b1, 0x26ab, + 0x26a5, 0x269f, 0x2699, 0x2693, 0x268d, 0x2687, 0x2681, 0x267b, + 0x2675, 0x266f, 0x2669, 0x2663, 0x265d, 0x2657, 0x2651, 0x264b, + 0x2645, 0x263f, 0x2639, 0x2633, 0x262d, 0x2627, 0x2621, 0x261b, + 0x2615, 0x260f, 0x2609, 0x2603, 0x25fd, 0x25f7, 0x25f1, 0x25eb, + 0x25e5, 0x25df, 0x25d9, 0x25d3, 0x25cd, 0x25c7, 0x25c1, 0x25bb, + 0x25b5, 0x25af, 0x25a9, 0x25a3, 0x259d, 0x2597, 0x2591, 0x258b, + 0x2585, 0x257f, 0x2579, 0x2573, 0x256d, 0x2567, 0x2561, 0x255b, + 0x2555, 0x254f, 0x2549, 0x2543, 0x253d, 0x2537, 0x2531, 0x252b, + 0x2525, 0x251f, 0x2519, 0x2513, 0x250c, 0x2506, 0x2500, 0x24fa, + 0x24f4, 0x24ee, 0x24e8, 0x24e2, 0x24dc, 0x24d6, 0x24d0, 0x24ca, + 0x24c4, 0x24be, 0x24b8, 0x24b2, 0x24ac, 0x24a6, 0x24a0, 0x249a, + 0x2494, 0x248e, 0x2488, 0x2482, 0x247c, 0x2476, 0x2470, 0x246a, + 0x2464, 0x245e, 0x2458, 0x2452, 0x244c, 0x2446, 0x2440, 0x243a, + 0x2434, 0x242e, 0x2428, 0x2422, 0x241c, 0x2416, 0x2410, 0x240a, + 0x2404, 0x23fd, 0x23f7, 0x23f1, 0x23eb, 0x23e5, 0x23df, 0x23d9, + 0x23d3, 0x23cd, 0x23c7, 0x23c1, 0x23bb, 0x23b5, 0x23af, 0x23a9, + 0x23a3, 0x239d, 0x2397, 0x2391, 0x238b, 0x2385, 0x237f, 0x2379, + 0x2373, 0x236d, 0x2367, 0x2361, 0x235b, 0x2355, 0x234e, 0x2348, + 0x2342, 0x233c, 0x2336, 0x2330, 0x232a, 0x2324, 0x231e, 0x2318, + 0x2312, 0x230c, 0x2306, 0x2300, 0x22fa, 0x22f4, 0x22ee, 0x22e8, + 0x22e2, 0x22dc, 0x22d6, 0x22d0, 0x22ca, 0x22c4, 0x22bd, 0x22b7, + 0x22b1, 0x22ab, 0x22a5, 0x229f, 0x2299, 0x2293, 0x228d, 0x2287, + 0x2281, 0x227b, 0x2275, 0x226f, 0x2269, 0x2263, 0x225d, 0x2257, + 0x2251, 0x224a, 0x2244, 0x223e, 0x2238, 0x2232, 0x222c, 0x2226, + 0x2220, 0x221a, 0x2214, 0x220e, 0x2208, 0x2202, 0x21fc, 0x21f6, + 0x21f0, 0x21ea, 0x21e4, 0x21dd, 0x21d7, 0x21d1, 0x21cb, 0x21c5, + 0x21bf, 0x21b9, 0x21b3, 0x21ad, 0x21a7, 0x21a1, 0x219b, 0x2195, + 0x218f, 0x2189, 0x2183, 0x217c, 0x2176, 0x2170, 0x216a, 0x2164, + 0x215e, 0x2158, 0x2152, 0x214c, 0x2146, 0x2140, 0x213a, 0x2134, + 0x212e, 0x2128, 0x2121, 0x211b, 0x2115, 0x210f, 0x2109, 0x2103, + 0x20fd, 0x20f7, 0x20f1, 0x20eb, 0x20e5, 0x20df, 0x20d9, 0x20d3, + 0x20cc, 0x20c6, 0x20c0, 0x20ba, 0x20b4, 0x20ae, 0x20a8, 0x20a2, + 0x209c, 0x2096, 0x2090, 0x208a, 0x2084, 0x207e, 0x2077, 0x2071, + 0x206b, 0x2065, 0x205f, 0x2059, 0x2053, 0x204d, 0x2047, 0x2041, + 0x203b, 0x2035, 0x202e, 0x2028, 0x2022, 0x201c, 0x2016, 0x2010, + 0x200a, 0x2004, 0x1ffe, 0x1ff8, 0x1ff2, 0x1fec, 0x1fe5, 0x1fdf, + 0x1fd9, 0x1fd3, 0x1fcd, 0x1fc7, 0x1fc1, 0x1fbb, 0x1fb5, 0x1faf, + 0x1fa9, 0x1fa3, 0x1f9c, 0x1f96, 0x1f90, 0x1f8a, 0x1f84, 0x1f7e, + 0x1f78, 0x1f72, 0x1f6c, 0x1f66, 0x1f60, 0x1f59, 0x1f53, 0x1f4d, + 0x1f47, 0x1f41, 0x1f3b, 0x1f35, 0x1f2f, 0x1f29, 0x1f23, 0x1f1d, + 0x1f16, 0x1f10, 0x1f0a, 0x1f04, 0x1efe, 0x1ef8, 0x1ef2, 0x1eec, + 0x1ee6, 0x1ee0, 0x1ed9, 0x1ed3, 0x1ecd, 0x1ec7, 0x1ec1, 0x1ebb, + 0x1eb5, 0x1eaf, 0x1ea9, 0x1ea3, 0x1e9c, 0x1e96, 0x1e90, 0x1e8a, + 0x1e84, 0x1e7e, 0x1e78, 0x1e72, 0x1e6c, 0x1e66, 0x1e5f, 0x1e59, + 0x1e53, 0x1e4d, 0x1e47, 0x1e41, 0x1e3b, 0x1e35, 0x1e2f, 0x1e29, + 0x1e22, 0x1e1c, 0x1e16, 0x1e10, 0x1e0a, 0x1e04, 0x1dfe, 0x1df8, + 0x1df2, 0x1deb, 0x1de5, 0x1ddf, 0x1dd9, 0x1dd3, 0x1dcd, 0x1dc7, + 0x1dc1, 0x1dbb, 0x1db4, 0x1dae, 0x1da8, 0x1da2, 0x1d9c, 0x1d96, + 0x1d90, 0x1d8a, 0x1d84, 0x1d7d, 0x1d77, 0x1d71, 0x1d6b, 0x1d65, + 0x1d5f, 0x1d59, 0x1d53, 0x1d4c, 0x1d46, 0x1d40, 0x1d3a, 0x1d34, + 0x1d2e, 0x1d28, 0x1d22, 0x1d1c, 0x1d15, 0x1d0f, 0x1d09, 0x1d03, + 0x1cfd, 0x1cf7, 0x1cf1, 0x1ceb, 0x1ce4, 0x1cde, 0x1cd8, 0x1cd2, + 0x1ccc, 0x1cc6, 0x1cc0, 0x1cba, 0x1cb3, 0x1cad, 0x1ca7, 0x1ca1, + 0x1c9b, 0x1c95, 0x1c8f, 0x1c89, 0x1c83, 0x1c7c, 0x1c76, 0x1c70, + 0x1c6a, 0x1c64, 0x1c5e, 0x1c58, 0x1c51, 0x1c4b, 0x1c45, 0x1c3f, + 0x1c39, 0x1c33, 0x1c2d, 0x1c27, 0x1c20, 0x1c1a, 0x1c14, 0x1c0e, + 0x1c08, 0x1c02, 0x1bfc, 0x1bf6, 0x1bef, 0x1be9, 0x1be3, 0x1bdd, + 0x1bd7, 0x1bd1, 0x1bcb, 0x1bc4, 0x1bbe, 0x1bb8, 0x1bb2, 0x1bac, + 0x1ba6, 0x1ba0, 0x1b9a, 0x1b93, 0x1b8d, 0x1b87, 0x1b81, 0x1b7b, + 0x1b75, 0x1b6f, 0x1b68, 0x1b62, 0x1b5c, 0x1b56, 0x1b50, 0x1b4a, + 0x1b44, 0x1b3d, 0x1b37, 0x1b31, 0x1b2b, 0x1b25, 0x1b1f, 0x1b19, + 0x1b13, 0x1b0c, 0x1b06, 0x1b00, 0x1afa, 0x1af4, 0x1aee, 0x1ae8, + 0x1ae1, 0x1adb, 0x1ad5, 0x1acf, 0x1ac9, 0x1ac3, 0x1abd, 0x1ab6, + 0x1ab0, 0x1aaa, 0x1aa4, 0x1a9e, 0x1a98, 0x1a91, 0x1a8b, 0x1a85, + 0x1a7f, 0x1a79, 0x1a73, 0x1a6d, 0x1a66, 0x1a60, 0x1a5a, 0x1a54, + 0x1a4e, 0x1a48, 0x1a42, 0x1a3b, 0x1a35, 0x1a2f, 0x1a29, 0x1a23, + 0x1a1d, 0x1a17, 0x1a10, 0x1a0a, 0x1a04, 0x19fe, 0x19f8, 0x19f2, + 0x19eb, 0x19e5, 0x19df, 0x19d9, 0x19d3, 0x19cd, 0x19c7, 0x19c0, + 0x19ba, 0x19b4, 0x19ae, 0x19a8, 0x19a2, 0x199b, 0x1995, 0x198f, + 0x1989, 0x1983, 0x197d, 0x1977, 0x1970, 0x196a, 0x1964, 0x195e, + 0x1958, 0x1952, 0x194b, 0x1945, 0x193f, 0x1939, 0x1933, 0x192d, + 0x1926, 0x1920, 0x191a, 0x1914, 0x190e, 0x1908, 0x1901, 0x18fb, + 0x18f5, 0x18ef, 0x18e9, 0x18e3, 0x18dc, 0x18d6, 0x18d0, 0x18ca, + 0x18c4, 0x18be, 0x18b8, 0x18b1, 0x18ab, 0x18a5, 0x189f, 0x1899, + 0x1893, 0x188c, 0x1886, 0x1880, 0x187a, 0x1874, 0x186e, 0x1867, + 0x1861, 0x185b, 0x1855, 0x184f, 0x1848, 0x1842, 0x183c, 0x1836, + 0x1830, 0x182a, 0x1823, 0x181d, 0x1817, 0x1811, 0x180b, 0x1805, + 0x17fe, 0x17f8, 0x17f2, 0x17ec, 0x17e6, 0x17e0, 0x17d9, 0x17d3, + 0x17cd, 0x17c7, 0x17c1, 0x17bb, 0x17b4, 0x17ae, 0x17a8, 0x17a2, + 0x179c, 0x1795, 0x178f, 0x1789, 0x1783, 0x177d, 0x1777, 0x1770, + 0x176a, 0x1764, 0x175e, 0x1758, 0x1752, 0x174b, 0x1745, 0x173f, + 0x1739, 0x1733, 0x172c, 0x1726, 0x1720, 0x171a, 0x1714, 0x170e, + 0x1707, 0x1701, 0x16fb, 0x16f5, 0x16ef, 0x16e8, 0x16e2, 0x16dc, + 0x16d6, 0x16d0, 0x16ca, 0x16c3, 0x16bd, 0x16b7, 0x16b1, 0x16ab, + 0x16a4, 0x169e, 0x1698, 0x1692, 0x168c, 0x1686, 0x167f, 0x1679, + 0x1673, 0x166d, 0x1667, 0x1660, 0x165a, 0x1654, 0x164e, 0x1648, + 0x1642, 0x163b, 0x1635, 0x162f, 0x1629, 0x1623, 0x161c, 0x1616, + 0x1610, 0x160a, 0x1604, 0x15fd, 0x15f7, 0x15f1, 0x15eb, 0x15e5, + 0x15de, 0x15d8, 0x15d2, 0x15cc, 0x15c6, 0x15c0, 0x15b9, 0x15b3, + 0x15ad, 0x15a7, 0x15a1, 0x159a, 0x1594, 0x158e, 0x1588, 0x1582, + 0x157b, 0x1575, 0x156f, 0x1569, 0x1563, 0x155c, 0x1556, 0x1550, + 0x154a, 0x1544, 0x153d, 0x1537, 0x1531, 0x152b, 0x1525, 0x151e, + 0x1518, 0x1512, 0x150c, 0x1506, 0x14ff, 0x14f9, 0x14f3, 0x14ed, + 0x14e7, 0x14e0, 0x14da, 0x14d4, 0x14ce, 0x14c8, 0x14c1, 0x14bb, + 0x14b5, 0x14af, 0x14a9, 0x14a2, 0x149c, 0x1496, 0x1490, 0x148a, + 0x1483, 0x147d, 0x1477, 0x1471, 0x146b, 0x1464, 0x145e, 0x1458, + 0x1452, 0x144c, 0x1445, 0x143f, 0x1439, 0x1433, 0x142d, 0x1426, + 0x1420, 0x141a, 0x1414, 0x140e, 0x1407, 0x1401, 0x13fb, 0x13f5, + 0x13ef, 0x13e8, 0x13e2, 0x13dc, 0x13d6, 0x13d0, 0x13c9, 0x13c3, + 0x13bd, 0x13b7, 0x13b1, 0x13aa, 0x13a4, 0x139e, 0x1398, 0x1391, + 0x138b, 0x1385, 0x137f, 0x1379, 0x1372, 0x136c, 0x1366, 0x1360, + 0x135a, 0x1353, 0x134d, 0x1347, 0x1341, 0x133b, 0x1334, 0x132e, + 0x1328, 0x1322, 0x131b, 0x1315, 0x130f, 0x1309, 0x1303, 0x12fc, + 0x12f6, 0x12f0, 0x12ea, 0x12e4, 0x12dd, 0x12d7, 0x12d1, 0x12cb, + 0x12c4, 0x12be, 0x12b8, 0x12b2, 0x12ac, 0x12a5, 0x129f, 0x1299, + 0x1293, 0x128d, 0x1286, 0x1280, 0x127a, 0x1274, 0x126d, 0x1267, + 0x1261, 0x125b, 0x1255, 0x124e, 0x1248, 0x1242, 0x123c, 0x1235, + 0x122f, 0x1229, 0x1223, 0x121d, 0x1216, 0x1210, 0x120a, 0x1204, + 0x11fd, 0x11f7, 0x11f1, 0x11eb, 0x11e5, 0x11de, 0x11d8, 0x11d2, + 0x11cc, 0x11c5, 0x11bf, 0x11b9, 0x11b3, 0x11ad, 0x11a6, 0x11a0, + 0x119a, 0x1194, 0x118d, 0x1187, 0x1181, 0x117b, 0x1175, 0x116e, + 0x1168, 0x1162, 0x115c, 0x1155, 0x114f, 0x1149, 0x1143, 0x113d, + 0x1136, 0x1130, 0x112a, 0x1124, 0x111d, 0x1117, 0x1111, 0x110b, + 0x1105, 0x10fe, 0x10f8, 0x10f2, 0x10ec, 0x10e5, 0x10df, 0x10d9, + 0x10d3, 0x10cc, 0x10c6, 0x10c0, 0x10ba, 0x10b4, 0x10ad, 0x10a7, + 0x10a1, 0x109b, 0x1094, 0x108e, 0x1088, 0x1082, 0x107b, 0x1075, + 0x106f, 0x1069, 0x1063, 0x105c, 0x1056, 0x1050, 0x104a, 0x1043, + 0x103d, 0x1037, 0x1031, 0x102a, 0x1024, 0x101e, 0x1018, 0x1012, + 0x100b, 0x1005, 0xfff, 0xff9, 0xff2, 0xfec, 0xfe6, 0xfe0, + 0xfd9, 0xfd3, 0xfcd, 0xfc7, 0xfc0, 0xfba, 0xfb4, 0xfae, + 0xfa8, 0xfa1, 0xf9b, 0xf95, 0xf8f, 0xf88, 0xf82, 0xf7c, + 0xf76, 0xf6f, 0xf69, 0xf63, 0xf5d, 0xf56, 0xf50, 0xf4a, + 0xf44, 0xf3e, 0xf37, 0xf31, 0xf2b, 0xf25, 0xf1e, 0xf18, + 0xf12, 0xf0c, 0xf05, 0xeff, 0xef9, 0xef3, 0xeec, 0xee6, + 0xee0, 0xeda, 0xed3, 0xecd, 0xec7, 0xec1, 0xeba, 0xeb4, + 0xeae, 0xea8, 0xea1, 0xe9b, 0xe95, 0xe8f, 0xe89, 0xe82, + 0xe7c, 0xe76, 0xe70, 0xe69, 0xe63, 0xe5d, 0xe57, 0xe50, + 0xe4a, 0xe44, 0xe3e, 0xe37, 0xe31, 0xe2b, 0xe25, 0xe1e, + 0xe18, 0xe12, 0xe0c, 0xe05, 0xdff, 0xdf9, 0xdf3, 0xdec, + 0xde6, 0xde0, 0xdda, 0xdd3, 0xdcd, 0xdc7, 0xdc1, 0xdba, + 0xdb4, 0xdae, 0xda8, 0xda1, 0xd9b, 0xd95, 0xd8f, 0xd88, + 0xd82, 0xd7c, 0xd76, 0xd6f, 0xd69, 0xd63, 0xd5d, 0xd56, + 0xd50, 0xd4a, 0xd44, 0xd3d, 0xd37, 0xd31, 0xd2b, 0xd24, + 0xd1e, 0xd18, 0xd12, 0xd0b, 0xd05, 0xcff, 0xcf9, 0xcf2, + 0xcec, 0xce6, 0xce0, 0xcd9, 0xcd3, 0xccd, 0xcc7, 0xcc0, + 0xcba, 0xcb4, 0xcae, 0xca7, 0xca1, 0xc9b, 0xc95, 0xc8e, + 0xc88, 0xc82, 0xc7c, 0xc75, 0xc6f, 0xc69, 0xc63, 0xc5c, + 0xc56, 0xc50, 0xc4a, 0xc43, 0xc3d, 0xc37, 0xc31, 0xc2a, + 0xc24, 0xc1e, 0xc18, 0xc11, 0xc0b, 0xc05, 0xbff, 0xbf8, + 0xbf2, 0xbec, 0xbe6, 0xbdf, 0xbd9, 0xbd3, 0xbcd, 0xbc6, + 0xbc0, 0xbba, 0xbb4, 0xbad, 0xba7, 0xba1, 0xb9b, 0xb94, + 0xb8e, 0xb88, 0xb81, 0xb7b, 0xb75, 0xb6f, 0xb68, 0xb62, + 0xb5c, 0xb56, 0xb4f, 0xb49, 0xb43, 0xb3d, 0xb36, 0xb30, + 0xb2a, 0xb24, 0xb1d, 0xb17, 0xb11, 0xb0b, 0xb04, 0xafe, + 0xaf8, 0xaf2, 0xaeb, 0xae5, 0xadf, 0xad8, 0xad2, 0xacc, + 0xac6, 0xabf, 0xab9, 0xab3, 0xaad, 0xaa6, 0xaa0, 0xa9a, + 0xa94, 0xa8d, 0xa87, 0xa81, 0xa7b, 0xa74, 0xa6e, 0xa68, + 0xa62, 0xa5b, 0xa55, 0xa4f, 0xa48, 0xa42, 0xa3c, 0xa36, + 0xa2f, 0xa29, 0xa23, 0xa1d, 0xa16, 0xa10, 0xa0a, 0xa04, + 0x9fd, 0x9f7, 0x9f1, 0x9eb, 0x9e4, 0x9de, 0x9d8, 0x9d1, + 0x9cb, 0x9c5, 0x9bf, 0x9b8, 0x9b2, 0x9ac, 0x9a6, 0x99f, + 0x999, 0x993, 0x98d, 0x986, 0x980, 0x97a, 0x973, 0x96d, + 0x967, 0x961, 0x95a, 0x954, 0x94e, 0x948, 0x941, 0x93b, + 0x935, 0x92f, 0x928, 0x922, 0x91c, 0x915, 0x90f, 0x909, + 0x903, 0x8fc, 0x8f6, 0x8f0, 0x8ea, 0x8e3, 0x8dd, 0x8d7, + 0x8d1, 0x8ca, 0x8c4, 0x8be, 0x8b7, 0x8b1, 0x8ab, 0x8a5, + 0x89e, 0x898, 0x892, 0x88c, 0x885, 0x87f, 0x879, 0x872, + 0x86c, 0x866, 0x860, 0x859, 0x853, 0x84d, 0x847, 0x840, + 0x83a, 0x834, 0x82e, 0x827, 0x821, 0x81b, 0x814, 0x80e, + 0x808, 0x802, 0x7fb, 0x7f5, 0x7ef, 0x7e9, 0x7e2, 0x7dc, + 0x7d6, 0x7cf, 0x7c9, 0x7c3, 0x7bd, 0x7b6, 0x7b0, 0x7aa, + 0x7a4, 0x79d, 0x797, 0x791, 0x78a, 0x784, 0x77e, 0x778, + 0x771, 0x76b, 0x765, 0x75f, 0x758, 0x752, 0x74c, 0x745, + 0x73f, 0x739, 0x733, 0x72c, 0x726, 0x720, 0x71a, 0x713, + 0x70d, 0x707, 0x700, 0x6fa, 0x6f4, 0x6ee, 0x6e7, 0x6e1, + 0x6db, 0x6d5, 0x6ce, 0x6c8, 0x6c2, 0x6bb, 0x6b5, 0x6af, + 0x6a9, 0x6a2, 0x69c, 0x696, 0x690, 0x689, 0x683, 0x67d, + 0x676, 0x670, 0x66a, 0x664, 0x65d, 0x657, 0x651, 0x64a, + 0x644, 0x63e, 0x638, 0x631, 0x62b, 0x625, 0x61f, 0x618, + 0x612, 0x60c, 0x605, 0x5ff, 0x5f9, 0x5f3, 0x5ec, 0x5e6, + 0x5e0, 0x5da, 0x5d3, 0x5cd, 0x5c7, 0x5c0, 0x5ba, 0x5b4, + 0x5ae, 0x5a7, 0x5a1, 0x59b, 0x594, 0x58e, 0x588, 0x582, + 0x57b, 0x575, 0x56f, 0x569, 0x562, 0x55c, 0x556, 0x54f, + 0x549, 0x543, 0x53d, 0x536, 0x530, 0x52a, 0x523, 0x51d, + 0x517, 0x511, 0x50a, 0x504, 0x4fe, 0x4f8, 0x4f1, 0x4eb, + 0x4e5, 0x4de, 0x4d8, 0x4d2, 0x4cc, 0x4c5, 0x4bf, 0x4b9, + 0x4b2, 0x4ac, 0x4a6, 0x4a0, 0x499, 0x493, 0x48d, 0x487, + 0x480, 0x47a, 0x474, 0x46d, 0x467, 0x461, 0x45b, 0x454, + 0x44e, 0x448, 0x441, 0x43b, 0x435, 0x42f, 0x428, 0x422, + 0x41c, 0x415, 0x40f, 0x409, 0x403, 0x3fc, 0x3f6, 0x3f0, + 0x3ea, 0x3e3, 0x3dd, 0x3d7, 0x3d0, 0x3ca, 0x3c4, 0x3be, + 0x3b7, 0x3b1, 0x3ab, 0x3a4, 0x39e, 0x398, 0x392, 0x38b, + 0x385, 0x37f, 0x378, 0x372, 0x36c, 0x366, 0x35f, 0x359, + 0x353, 0x34c, 0x346, 0x340, 0x33a, 0x333, 0x32d, 0x327, + 0x321, 0x31a, 0x314, 0x30e, 0x307, 0x301, 0x2fb, 0x2f5, + 0x2ee, 0x2e8, 0x2e2, 0x2db, 0x2d5, 0x2cf, 0x2c9, 0x2c2, + 0x2bc, 0x2b6, 0x2af, 0x2a9, 0x2a3, 0x29d, 0x296, 0x290, + 0x28a, 0x283, 0x27d, 0x277, 0x271, 0x26a, 0x264, 0x25e, + 0x258, 0x251, 0x24b, 0x245, 0x23e, 0x238, 0x232, 0x22c, + 0x225, 0x21f, 0x219, 0x212, 0x20c, 0x206, 0x200, 0x1f9, + 0x1f3, 0x1ed, 0x1e6, 0x1e0, 0x1da, 0x1d4, 0x1cd, 0x1c7, + 0x1c1, 0x1ba, 0x1b4, 0x1ae, 0x1a8, 0x1a1, 0x19b, 0x195, + 0x18e, 0x188, 0x182, 0x17c, 0x175, 0x16f, 0x169, 0x162, + 0x15c, 0x156, 0x150, 0x149, 0x143, 0x13d, 0x137, 0x130, + 0x12a, 0x124, 0x11d, 0x117, 0x111, 0x10b, 0x104, 0xfe, + 0xf8, 0xf1, 0xeb, 0xe5, 0xdf, 0xd8, 0xd2, 0xcc, + 0xc5, 0xbf, 0xb9, 0xb3, 0xac, 0xa6, 0xa0, 0x99, + 0x93, 0x8d, 0x87, 0x80, 0x7a, 0x74, 0x6d, 0x67, + 0x61, 0x5b, 0x54, 0x4e, 0x48, 0x41, 0x3b, 0x35, + 0x2f, 0x28, 0x22, 0x1c, 0x15, 0xf, 0x9, 0x3, +}; + +/** + * @brief Initialization function for the Q15 DCT4/IDCT4. + * @param[in,out] *S points to an instance of Q15 DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of Q15 RFFT/RIFFT structure. + * @param[in] *S_CFFT points to an instance of Q15 CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + * \par Normalizing factor: + * The normalizing factor is sqrt(2/N), which depends on the size of transform N. + * Normalizing factors in 1.15 format are mentioned in the table below for different DCT sizes: + * \image html dct4NormalizingQ15Table.gif + */ + +arm_status arm_dct4_init_q15( + arm_dct4_instance_q15 * S, + arm_rfft_instance_q15 * S_RFFT, + arm_cfft_radix4_instance_q15 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q15_t normalize) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initializing the pointer array with the weight table base addresses of different lengths */ + q15_t *twiddlePtr[4] = { (q15_t *) WeightsQ15_128, (q15_t *) WeightsQ15_512, + (q15_t *) WeightsQ15_2048, (q15_t *) WeightsQ15_8192 + }; + + /* Initializing the pointer array with the cos factor table base addresses of different lengths */ + q15_t *pCosFactor[4] = + { (q15_t *) cos_factorsQ15_128, (q15_t *) cos_factorsQ15_512, + (q15_t *) cos_factorsQ15_2048, (q15_t *) cos_factorsQ15_8192 + }; + + /* Initialize the DCT4 length */ + S->N = N; + + /* Initialize the half of DCT4 length */ + S->Nby2 = Nby2; + + /* Initialize the DCT4 Normalizing factor */ + S->normalize = normalize; + + /* Initialize Real FFT Instance */ + S->pRfft = S_RFFT; + + /* Initialize Complex FFT Instance */ + S->pCfft = S_CFFT; + + switch (N) + { + /* Initialize the table modifier values */ + case 8192u: + S->pTwiddle = twiddlePtr[3]; + S->pCosFactor = pCosFactor[3]; + break; + case 2048u: + S->pTwiddle = twiddlePtr[2]; + S->pCosFactor = pCosFactor[2]; + break; + case 512u: + S->pTwiddle = twiddlePtr[1]; + S->pCosFactor = pCosFactor[1]; + break; + case 128u: + S->pTwiddle = twiddlePtr[0]; + S->pCosFactor = pCosFactor[0]; + break; + default: + status = ARM_MATH_ARGUMENT_ERROR; + } + + /* Initialize the RFFT/RIFFT */ + arm_rfft_init_q15(S->pRfft, S->N, 0u, 1u); + + /* return the status of DCT4 Init function */ + return (status); +} + +/** + * @} end of DCT4_IDCT4 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,8364 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_dct4_init_q31.c +* +* Description: Initialization function of DCT-4 & IDCT4 Q31 +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup DCT4_IDCT4 + * @{ + */ + +/* +* @brief Weights Table +*/ + +/** +* \par +* Weights tables are generated using the formula :
weights[n] = e^(-j*n*pi/(2*N))
+* \par +* C command to generate the table +*
    
+* for(i = 0; i< N; i++)    
+* {    
+*   weights[2*i]= cos(i*c);    
+*   weights[(2*i)+1]= -sin(i * c);    
+* } 
+* \par +* where N is the Number of weights to be calculated and c is pi/(2*N) +* \par +* Convert the output to q31 format by multiplying with 2^31 and saturated if required. +* \par +* In the tables below the real and imaginary values are placed alternatively, hence the +* array length is 2*N. +*/ + +static const q31_t WeightsQ31_128[256] = { + 0x7fffffff, 0x0, 0x7ffd885a, 0xfe6de2e0, 0x7ff62182, 0xfcdbd541, 0x7fe9cbc0, + 0xfb49e6a3, + 0x7fd8878e, 0xf9b82684, 0x7fc25596, 0xf826a462, 0x7fa736b4, 0xf6956fb7, + 0x7f872bf3, 0xf50497fb, + 0x7f62368f, 0xf3742ca2, 0x7f3857f6, 0xf1e43d1c, 0x7f0991c4, 0xf054d8d5, + 0x7ed5e5c6, 0xeec60f31, + 0x7e9d55fc, 0xed37ef91, 0x7e5fe493, 0xebaa894f, 0x7e1d93ea, 0xea1debbb, + 0x7dd6668f, 0xe8922622, + 0x7d8a5f40, 0xe70747c4, 0x7d3980ec, 0xe57d5fda, 0x7ce3ceb2, 0xe3f47d96, + 0x7c894bde, 0xe26cb01b, + 0x7c29fbee, 0xe0e60685, 0x7bc5e290, 0xdf608fe4, 0x7b5d039e, 0xdddc5b3b, + 0x7aef6323, 0xdc597781, + 0x7a7d055b, 0xdad7f3a2, 0x7a05eead, 0xd957de7a, 0x798a23b1, 0xd7d946d8, + 0x7909a92d, 0xd65c3b7b, + 0x78848414, 0xd4e0cb15, 0x77fab989, 0xd3670446, 0x776c4edb, 0xd1eef59e, + 0x76d94989, 0xd078ad9e, + 0x7641af3d, 0xcf043ab3, 0x75a585cf, 0xcd91ab39, 0x7504d345, 0xcc210d79, + 0x745f9dd1, 0xcab26fa9, + 0x73b5ebd1, 0xc945dfec, 0x7307c3d0, 0xc7db6c50, 0x72552c85, 0xc67322ce, + 0x719e2cd2, 0xc50d1149, + 0x70e2cbc6, 0xc3a94590, 0x7023109a, 0xc247cd5a, 0x6f5f02b2, 0xc0e8b648, + 0x6e96a99d, 0xbf8c0de3, + 0x6dca0d14, 0xbe31e19b, 0x6cf934fc, 0xbcda3ecb, 0x6c242960, 0xbb8532b0, + 0x6b4af279, 0xba32ca71, + 0x6a6d98a4, 0xb8e31319, 0x698c246c, 0xb796199b, 0x68a69e81, 0xb64beacd, + 0x67bd0fbd, 0xb5049368, + 0x66cf8120, 0xb3c0200c, 0x65ddfbd3, 0xb27e9d3c, 0x64e88926, 0xb140175b, + 0x63ef3290, 0xb0049ab3, + 0x62f201ac, 0xaecc336c, 0x61f1003f, 0xad96ed92, 0x60ec3830, 0xac64d510, + 0x5fe3b38d, 0xab35f5b5, + 0x5ed77c8a, 0xaa0a5b2e, 0x5dc79d7c, 0xa8e21106, 0x5cb420e0, 0xa7bd22ac, + 0x5b9d1154, 0xa69b9b68, + 0x5a82799a, 0xa57d8666, 0x59646498, 0xa462eeac, 0x5842dd54, 0xa34bdf20, + 0x571deefa, 0xa2386284, + 0x55f5a4d2, 0xa1288376, 0x54ca0a4b, 0xa01c4c73, 0x539b2af0, 0x9f13c7d0, + 0x5269126e, 0x9e0effc1, + 0x5133cc94, 0x9d0dfe54, 0x4ffb654d, 0x9c10cd70, 0x4ebfe8a5, 0x9b1776da, + 0x4d8162c4, 0x9a22042d, + 0x4c3fdff4, 0x99307ee0, 0x4afb6c98, 0x9842f043, 0x49b41533, 0x9759617f, + 0x4869e665, 0x9673db94, + 0x471cece7, 0x9592675c, 0x45cd358f, 0x94b50d87, 0x447acd50, 0x93dbd6a0, + 0x4325c135, 0x9306cb04, + 0x41ce1e65, 0x9235f2ec, 0x4073f21d, 0x91695663, 0x3f1749b8, 0x90a0fd4e, + 0x3db832a6, 0x8fdcef66, + 0x3c56ba70, 0x8f1d343a, 0x3af2eeb7, 0x8e61d32e, 0x398cdd32, 0x8daad37b, + 0x382493b0, 0x8cf83c30, + 0x36ba2014, 0x8c4a142f, 0x354d9057, 0x8ba0622f, 0x33def287, 0x8afb2cbb, + 0x326e54c7, 0x8a5a7a31, + 0x30fbc54d, 0x89be50c3, 0x2f875262, 0x8926b677, 0x2e110a62, 0x8893b125, + 0x2c98fbba, 0x88054677, + 0x2b1f34eb, 0x877b7bec, 0x29a3c485, 0x86f656d3, 0x2826b928, 0x8675dc4f, + 0x26a82186, 0x85fa1153, + 0x25280c5e, 0x8582faa5, 0x23a6887f, 0x85109cdd, 0x2223a4c5, 0x84a2fc62, + 0x209f701c, 0x843a1d70, + 0x1f19f97b, 0x83d60412, 0x1d934fe5, 0x8376b422, 0x1c0b826a, 0x831c314e, + 0x1a82a026, 0x82c67f14, + 0x18f8b83c, 0x8275a0c0, 0x176dd9de, 0x82299971, 0x15e21445, 0x81e26c16, + 0x145576b1, 0x81a01b6d, + 0x12c8106f, 0x8162aa04, 0x1139f0cf, 0x812a1a3a, 0xfab272b, 0x80f66e3c, + 0xe1bc2e4, 0x80c7a80a, + 0xc8bd35e, 0x809dc971, 0xafb6805, 0x8078d40d, 0x96a9049, 0x8058c94c, + 0x7d95b9e, 0x803daa6a, + 0x647d97c, 0x80277872, 0x4b6195d, 0x80163440, 0x3242abf, 0x8009de7e, + 0x1921d20, 0x800277a6, +}; + +static const q31_t WeightsQ31_512[1024] = { + 0x7fffffff, 0x0, 0x7fffd886, 0xff9b781d, 0x7fff6216, 0xff36f078, 0x7ffe9cb2, + 0xfed2694f, + 0x7ffd885a, 0xfe6de2e0, 0x7ffc250f, 0xfe095d69, 0x7ffa72d1, 0xfda4d929, + 0x7ff871a2, 0xfd40565c, + 0x7ff62182, 0xfcdbd541, 0x7ff38274, 0xfc775616, 0x7ff09478, 0xfc12d91a, + 0x7fed5791, 0xfbae5e89, + 0x7fe9cbc0, 0xfb49e6a3, 0x7fe5f108, 0xfae571a4, 0x7fe1c76b, 0xfa80ffcb, + 0x7fdd4eec, 0xfa1c9157, + 0x7fd8878e, 0xf9b82684, 0x7fd37153, 0xf953bf91, 0x7fce0c3e, 0xf8ef5cbb, + 0x7fc85854, 0xf88afe42, + 0x7fc25596, 0xf826a462, 0x7fbc040a, 0xf7c24f59, 0x7fb563b3, 0xf75dff66, + 0x7fae7495, 0xf6f9b4c6, + 0x7fa736b4, 0xf6956fb7, 0x7f9faa15, 0xf6313077, 0x7f97cebd, 0xf5ccf743, + 0x7f8fa4b0, 0xf568c45b, + 0x7f872bf3, 0xf50497fb, 0x7f7e648c, 0xf4a07261, 0x7f754e80, 0xf43c53cb, + 0x7f6be9d4, 0xf3d83c77, + 0x7f62368f, 0xf3742ca2, 0x7f5834b7, 0xf310248a, 0x7f4de451, 0xf2ac246e, + 0x7f434563, 0xf2482c8a, + 0x7f3857f6, 0xf1e43d1c, 0x7f2d1c0e, 0xf1805662, 0x7f2191b4, 0xf11c789a, + 0x7f15b8ee, 0xf0b8a401, + 0x7f0991c4, 0xf054d8d5, 0x7efd1c3c, 0xeff11753, 0x7ef05860, 0xef8d5fb8, + 0x7ee34636, 0xef29b243, + 0x7ed5e5c6, 0xeec60f31, 0x7ec8371a, 0xee6276bf, 0x7eba3a39, 0xedfee92b, + 0x7eabef2c, 0xed9b66b2, + 0x7e9d55fc, 0xed37ef91, 0x7e8e6eb2, 0xecd48407, 0x7e7f3957, 0xec71244f, + 0x7e6fb5f4, 0xec0dd0a8, + 0x7e5fe493, 0xebaa894f, 0x7e4fc53e, 0xeb474e81, 0x7e3f57ff, 0xeae4207a, + 0x7e2e9cdf, 0xea80ff7a, + 0x7e1d93ea, 0xea1debbb, 0x7e0c3d29, 0xe9bae57d, 0x7dfa98a8, 0xe957ecfb, + 0x7de8a670, 0xe8f50273, + 0x7dd6668f, 0xe8922622, 0x7dc3d90d, 0xe82f5844, 0x7db0fdf8, 0xe7cc9917, + 0x7d9dd55a, 0xe769e8d8, + 0x7d8a5f40, 0xe70747c4, 0x7d769bb5, 0xe6a4b616, 0x7d628ac6, 0xe642340d, + 0x7d4e2c7f, 0xe5dfc1e5, + 0x7d3980ec, 0xe57d5fda, 0x7d24881b, 0xe51b0e2a, 0x7d0f4218, 0xe4b8cd11, + 0x7cf9aef0, 0xe4569ccb, + 0x7ce3ceb2, 0xe3f47d96, 0x7ccda169, 0xe3926fad, 0x7cb72724, 0xe330734d, + 0x7ca05ff1, 0xe2ce88b3, + 0x7c894bde, 0xe26cb01b, 0x7c71eaf9, 0xe20ae9c1, 0x7c5a3d50, 0xe1a935e2, + 0x7c4242f2, 0xe14794ba, + 0x7c29fbee, 0xe0e60685, 0x7c116853, 0xe0848b7f, 0x7bf88830, 0xe02323e5, + 0x7bdf5b94, 0xdfc1cff3, + 0x7bc5e290, 0xdf608fe4, 0x7bac1d31, 0xdeff63f4, 0x7b920b89, 0xde9e4c60, + 0x7b77ada8, 0xde3d4964, + 0x7b5d039e, 0xdddc5b3b, 0x7b420d7a, 0xdd7b8220, 0x7b26cb4f, 0xdd1abe51, + 0x7b0b3d2c, 0xdcba1008, + 0x7aef6323, 0xdc597781, 0x7ad33d45, 0xdbf8f4f8, 0x7ab6cba4, 0xdb9888a8, + 0x7a9a0e50, 0xdb3832cd, + 0x7a7d055b, 0xdad7f3a2, 0x7a5fb0d8, 0xda77cb63, 0x7a4210d8, 0xda17ba4a, + 0x7a24256f, 0xd9b7c094, + 0x7a05eead, 0xd957de7a, 0x79e76ca7, 0xd8f81439, 0x79c89f6e, 0xd898620c, + 0x79a98715, 0xd838c82d, + 0x798a23b1, 0xd7d946d8, 0x796a7554, 0xd779de47, 0x794a7c12, 0xd71a8eb5, + 0x792a37fe, 0xd6bb585e, + 0x7909a92d, 0xd65c3b7b, 0x78e8cfb2, 0xd5fd3848, 0x78c7aba2, 0xd59e4eff, + 0x78a63d11, 0xd53f7fda, + 0x78848414, 0xd4e0cb15, 0x786280bf, 0xd48230e9, 0x78403329, 0xd423b191, + 0x781d9b65, 0xd3c54d47, + 0x77fab989, 0xd3670446, 0x77d78daa, 0xd308d6c7, 0x77b417df, 0xd2aac504, + 0x7790583e, 0xd24ccf39, + 0x776c4edb, 0xd1eef59e, 0x7747fbce, 0xd191386e, 0x77235f2d, 0xd13397e2, + 0x76fe790e, 0xd0d61434, + 0x76d94989, 0xd078ad9e, 0x76b3d0b4, 0xd01b6459, 0x768e0ea6, 0xcfbe389f, + 0x76680376, 0xcf612aaa, + 0x7641af3d, 0xcf043ab3, 0x761b1211, 0xcea768f2, 0x75f42c0b, 0xce4ab5a2, + 0x75ccfd42, 0xcdee20fc, + 0x75a585cf, 0xcd91ab39, 0x757dc5ca, 0xcd355491, 0x7555bd4c, 0xccd91d3d, + 0x752d6c6c, 0xcc7d0578, + 0x7504d345, 0xcc210d79, 0x74dbf1ef, 0xcbc53579, 0x74b2c884, 0xcb697db0, + 0x7489571c, 0xcb0de658, + 0x745f9dd1, 0xcab26fa9, 0x74359cbd, 0xca5719db, 0x740b53fb, 0xc9fbe527, + 0x73e0c3a3, 0xc9a0d1c5, + 0x73b5ebd1, 0xc945dfec, 0x738acc9e, 0xc8eb0fd6, 0x735f6626, 0xc89061ba, + 0x7333b883, 0xc835d5d0, + 0x7307c3d0, 0xc7db6c50, 0x72db8828, 0xc7812572, 0x72af05a7, 0xc727016d, + 0x72823c67, 0xc6cd0079, + 0x72552c85, 0xc67322ce, 0x7227d61c, 0xc61968a2, 0x71fa3949, 0xc5bfd22e, + 0x71cc5626, 0xc5665fa9, + 0x719e2cd2, 0xc50d1149, 0x716fbd68, 0xc4b3e746, 0x71410805, 0xc45ae1d7, + 0x71120cc5, 0xc4020133, + 0x70e2cbc6, 0xc3a94590, 0x70b34525, 0xc350af26, 0x708378ff, 0xc2f83e2a, + 0x70536771, 0xc29ff2d4, + 0x7023109a, 0xc247cd5a, 0x6ff27497, 0xc1efcdf3, 0x6fc19385, 0xc197f4d4, + 0x6f906d84, 0xc1404233, + 0x6f5f02b2, 0xc0e8b648, 0x6f2d532c, 0xc0915148, 0x6efb5f12, 0xc03a1368, + 0x6ec92683, 0xbfe2fcdf, + 0x6e96a99d, 0xbf8c0de3, 0x6e63e87f, 0xbf3546a8, 0x6e30e34a, 0xbedea765, + 0x6dfd9a1c, 0xbe88304f, + 0x6dca0d14, 0xbe31e19b, 0x6d963c54, 0xbddbbb7f, 0x6d6227fa, 0xbd85be30, + 0x6d2dd027, 0xbd2fe9e2, + 0x6cf934fc, 0xbcda3ecb, 0x6cc45698, 0xbc84bd1f, 0x6c8f351c, 0xbc2f6513, + 0x6c59d0a9, 0xbbda36dd, + 0x6c242960, 0xbb8532b0, 0x6bee3f62, 0xbb3058c0, 0x6bb812d1, 0xbadba943, + 0x6b81a3cd, 0xba87246d, + 0x6b4af279, 0xba32ca71, 0x6b13fef5, 0xb9de9b83, 0x6adcc964, 0xb98a97d8, + 0x6aa551e9, 0xb936bfa4, + 0x6a6d98a4, 0xb8e31319, 0x6a359db9, 0xb88f926d, 0x69fd614a, 0xb83c3dd1, + 0x69c4e37a, 0xb7e9157a, + 0x698c246c, 0xb796199b, 0x69532442, 0xb7434a67, 0x6919e320, 0xb6f0a812, + 0x68e06129, 0xb69e32cd, + 0x68a69e81, 0xb64beacd, 0x686c9b4b, 0xb5f9d043, 0x683257ab, 0xb5a7e362, + 0x67f7d3c5, 0xb556245e, + 0x67bd0fbd, 0xb5049368, 0x67820bb7, 0xb4b330b3, 0x6746c7d8, 0xb461fc70, + 0x670b4444, 0xb410f6d3, + 0x66cf8120, 0xb3c0200c, 0x66937e91, 0xb36f784f, 0x66573cbb, 0xb31effcc, + 0x661abbc5, 0xb2ceb6b5, + 0x65ddfbd3, 0xb27e9d3c, 0x65a0fd0b, 0xb22eb392, 0x6563bf92, 0xb1def9e9, + 0x6526438f, 0xb18f7071, + 0x64e88926, 0xb140175b, 0x64aa907f, 0xb0f0eeda, 0x646c59bf, 0xb0a1f71d, + 0x642de50d, 0xb0533055, + 0x63ef3290, 0xb0049ab3, 0x63b0426d, 0xafb63667, 0x637114cc, 0xaf6803a2, + 0x6331a9d4, 0xaf1a0293, + 0x62f201ac, 0xaecc336c, 0x62b21c7b, 0xae7e965b, 0x6271fa69, 0xae312b92, + 0x62319b9d, 0xade3f33e, + 0x61f1003f, 0xad96ed92, 0x61b02876, 0xad4a1aba, 0x616f146c, 0xacfd7ae8, + 0x612dc447, 0xacb10e4b, + 0x60ec3830, 0xac64d510, 0x60aa7050, 0xac18cf69, 0x60686ccf, 0xabccfd83, + 0x60262dd6, 0xab815f8d, + 0x5fe3b38d, 0xab35f5b5, 0x5fa0fe1f, 0xaaeac02c, 0x5f5e0db3, 0xaa9fbf1e, + 0x5f1ae274, 0xaa54f2ba, + 0x5ed77c8a, 0xaa0a5b2e, 0x5e93dc1f, 0xa9bff8a8, 0x5e50015d, 0xa975cb57, + 0x5e0bec6e, 0xa92bd367, + 0x5dc79d7c, 0xa8e21106, 0x5d8314b1, 0xa8988463, 0x5d3e5237, 0xa84f2daa, + 0x5cf95638, 0xa8060d08, + 0x5cb420e0, 0xa7bd22ac, 0x5c6eb258, 0xa7746ec0, 0x5c290acc, 0xa72bf174, + 0x5be32a67, 0xa6e3aaf2, + 0x5b9d1154, 0xa69b9b68, 0x5b56bfbd, 0xa653c303, 0x5b1035cf, 0xa60c21ee, + 0x5ac973b5, 0xa5c4b855, + 0x5a82799a, 0xa57d8666, 0x5a3b47ab, 0xa5368c4b, 0x59f3de12, 0xa4efca31, + 0x59ac3cfd, 0xa4a94043, + 0x59646498, 0xa462eeac, 0x591c550e, 0xa41cd599, 0x58d40e8c, 0xa3d6f534, + 0x588b9140, 0xa3914da8, + 0x5842dd54, 0xa34bdf20, 0x57f9f2f8, 0xa306a9c8, 0x57b0d256, 0xa2c1adc9, + 0x57677b9d, 0xa27ceb4f, + 0x571deefa, 0xa2386284, 0x56d42c99, 0xa1f41392, 0x568a34a9, 0xa1affea3, + 0x56400758, 0xa16c23e1, + 0x55f5a4d2, 0xa1288376, 0x55ab0d46, 0xa0e51d8c, 0x556040e2, 0xa0a1f24d, + 0x55153fd4, 0xa05f01e1, + 0x54ca0a4b, 0xa01c4c73, 0x547ea073, 0x9fd9d22a, 0x5433027d, 0x9f979331, + 0x53e73097, 0x9f558fb0, + 0x539b2af0, 0x9f13c7d0, 0x534ef1b5, 0x9ed23bb9, 0x53028518, 0x9e90eb94, + 0x52b5e546, 0x9e4fd78a, + 0x5269126e, 0x9e0effc1, 0x521c0cc2, 0x9dce6463, 0x51ced46e, 0x9d8e0597, + 0x518169a5, 0x9d4de385, + 0x5133cc94, 0x9d0dfe54, 0x50e5fd6d, 0x9cce562c, 0x5097fc5e, 0x9c8eeb34, + 0x5049c999, 0x9c4fbd93, + 0x4ffb654d, 0x9c10cd70, 0x4faccfab, 0x9bd21af3, 0x4f5e08e3, 0x9b93a641, + 0x4f0f1126, 0x9b556f81, + 0x4ebfe8a5, 0x9b1776da, 0x4e708f8f, 0x9ad9bc71, 0x4e210617, 0x9a9c406e, + 0x4dd14c6e, 0x9a5f02f5, + 0x4d8162c4, 0x9a22042d, 0x4d31494b, 0x99e5443b, 0x4ce10034, 0x99a8c345, + 0x4c9087b1, 0x996c816f, + 0x4c3fdff4, 0x99307ee0, 0x4bef092d, 0x98f4bbbc, 0x4b9e0390, 0x98b93828, + 0x4b4ccf4d, 0x987df449, + 0x4afb6c98, 0x9842f043, 0x4aa9dba2, 0x98082c3b, 0x4a581c9e, 0x97cda855, + 0x4a062fbd, 0x979364b5, + 0x49b41533, 0x9759617f, 0x4961cd33, 0x971f9ed7, 0x490f57ee, 0x96e61ce0, + 0x48bcb599, 0x96acdbbe, + 0x4869e665, 0x9673db94, 0x4816ea86, 0x963b1c86, 0x47c3c22f, 0x96029eb6, + 0x47706d93, 0x95ca6247, + 0x471cece7, 0x9592675c, 0x46c9405c, 0x955aae17, 0x46756828, 0x9523369c, + 0x4621647d, 0x94ec010b, + 0x45cd358f, 0x94b50d87, 0x4578db93, 0x947e5c33, 0x452456bd, 0x9447ed2f, + 0x44cfa740, 0x9411c09e, + 0x447acd50, 0x93dbd6a0, 0x4425c923, 0x93a62f57, 0x43d09aed, 0x9370cae4, + 0x437b42e1, 0x933ba968, + 0x4325c135, 0x9306cb04, 0x42d0161e, 0x92d22fd9, 0x427a41d0, 0x929dd806, + 0x42244481, 0x9269c3ac, + 0x41ce1e65, 0x9235f2ec, 0x4177cfb1, 0x920265e4, 0x4121589b, 0x91cf1cb6, + 0x40cab958, 0x919c1781, + 0x4073f21d, 0x91695663, 0x401d0321, 0x9136d97d, 0x3fc5ec98, 0x9104a0ee, + 0x3f6eaeb8, 0x90d2acd4, + 0x3f1749b8, 0x90a0fd4e, 0x3ebfbdcd, 0x906f927c, 0x3e680b2c, 0x903e6c7b, + 0x3e10320d, 0x900d8b69, + 0x3db832a6, 0x8fdcef66, 0x3d600d2c, 0x8fac988f, 0x3d07c1d6, 0x8f7c8701, + 0x3caf50da, 0x8f4cbadb, + 0x3c56ba70, 0x8f1d343a, 0x3bfdfecd, 0x8eedf33b, 0x3ba51e29, 0x8ebef7fb, + 0x3b4c18ba, 0x8e904298, + 0x3af2eeb7, 0x8e61d32e, 0x3a99a057, 0x8e33a9da, 0x3a402dd2, 0x8e05c6b7, + 0x39e6975e, 0x8dd829e4, + 0x398cdd32, 0x8daad37b, 0x3932ff87, 0x8d7dc399, 0x38d8fe93, 0x8d50fa59, + 0x387eda8e, 0x8d2477d8, + 0x382493b0, 0x8cf83c30, 0x37ca2a30, 0x8ccc477d, 0x376f9e46, 0x8ca099da, + 0x3714f02a, 0x8c753362, + 0x36ba2014, 0x8c4a142f, 0x365f2e3b, 0x8c1f3c5d, 0x36041ad9, 0x8bf4ac05, + 0x35a8e625, 0x8bca6343, + 0x354d9057, 0x8ba0622f, 0x34f219a8, 0x8b76a8e4, 0x34968250, 0x8b4d377c, + 0x343aca87, 0x8b240e11, + 0x33def287, 0x8afb2cbb, 0x3382fa88, 0x8ad29394, 0x3326e2c3, 0x8aaa42b4, + 0x32caab6f, 0x8a823a36, + 0x326e54c7, 0x8a5a7a31, 0x3211df04, 0x8a3302be, 0x31b54a5e, 0x8a0bd3f5, + 0x3158970e, 0x89e4edef, + 0x30fbc54d, 0x89be50c3, 0x309ed556, 0x8997fc8a, 0x3041c761, 0x8971f15a, + 0x2fe49ba7, 0x894c2f4c, + 0x2f875262, 0x8926b677, 0x2f29ebcc, 0x890186f2, 0x2ecc681e, 0x88dca0d3, + 0x2e6ec792, 0x88b80432, + 0x2e110a62, 0x8893b125, 0x2db330c7, 0x886fa7c2, 0x2d553afc, 0x884be821, + 0x2cf72939, 0x88287256, + 0x2c98fbba, 0x88054677, 0x2c3ab2b9, 0x87e2649b, 0x2bdc4e6f, 0x87bfccd7, + 0x2b7dcf17, 0x879d7f41, + 0x2b1f34eb, 0x877b7bec, 0x2ac08026, 0x8759c2ef, 0x2a61b101, 0x8738545e, + 0x2a02c7b8, 0x8717304e, + 0x29a3c485, 0x86f656d3, 0x2944a7a2, 0x86d5c802, 0x28e5714b, 0x86b583ee, + 0x288621b9, 0x86958aac, + 0x2826b928, 0x8675dc4f, 0x27c737d3, 0x865678eb, 0x27679df4, 0x86376092, + 0x2707ebc7, 0x86189359, + 0x26a82186, 0x85fa1153, 0x26483f6c, 0x85dbda91, 0x25e845b6, 0x85bdef28, + 0x2588349d, 0x85a04f28, + 0x25280c5e, 0x8582faa5, 0x24c7cd33, 0x8565f1b0, 0x24677758, 0x8549345c, + 0x24070b08, 0x852cc2bb, + 0x23a6887f, 0x85109cdd, 0x2345eff8, 0x84f4c2d4, 0x22e541af, 0x84d934b1, + 0x22847de0, 0x84bdf286, + 0x2223a4c5, 0x84a2fc62, 0x21c2b69c, 0x84885258, 0x2161b3a0, 0x846df477, + 0x21009c0c, 0x8453e2cf, + 0x209f701c, 0x843a1d70, 0x203e300d, 0x8420a46c, 0x1fdcdc1b, 0x840777d0, + 0x1f7b7481, 0x83ee97ad, + 0x1f19f97b, 0x83d60412, 0x1eb86b46, 0x83bdbd0e, 0x1e56ca1e, 0x83a5c2b0, + 0x1df5163f, 0x838e1507, + 0x1d934fe5, 0x8376b422, 0x1d31774d, 0x835fa00f, 0x1ccf8cb3, 0x8348d8dc, + 0x1c6d9053, 0x83325e97, + 0x1c0b826a, 0x831c314e, 0x1ba96335, 0x83065110, 0x1b4732ef, 0x82f0bde8, + 0x1ae4f1d6, 0x82db77e5, + 0x1a82a026, 0x82c67f14, 0x1a203e1b, 0x82b1d381, 0x19bdcbf3, 0x829d753a, + 0x195b49ea, 0x8289644b, + 0x18f8b83c, 0x8275a0c0, 0x18961728, 0x82622aa6, 0x183366e9, 0x824f0208, + 0x17d0a7bc, 0x823c26f3, + 0x176dd9de, 0x82299971, 0x170afd8d, 0x82175990, 0x16a81305, 0x82056758, + 0x16451a83, 0x81f3c2d7, + 0x15e21445, 0x81e26c16, 0x157f0086, 0x81d16321, 0x151bdf86, 0x81c0a801, + 0x14b8b17f, 0x81b03ac2, + 0x145576b1, 0x81a01b6d, 0x13f22f58, 0x81904a0c, 0x138edbb1, 0x8180c6a9, + 0x132b7bf9, 0x8171914e, + 0x12c8106f, 0x8162aa04, 0x1264994e, 0x815410d4, 0x120116d5, 0x8145c5c7, + 0x119d8941, 0x8137c8e6, + 0x1139f0cf, 0x812a1a3a, 0x10d64dbd, 0x811cb9ca, 0x1072a048, 0x810fa7a0, + 0x100ee8ad, 0x8102e3c4, + 0xfab272b, 0x80f66e3c, 0xf475bff, 0x80ea4712, 0xee38766, 0x80de6e4c, + 0xe7fa99e, 0x80d2e3f2, + 0xe1bc2e4, 0x80c7a80a, 0xdb7d376, 0x80bcba9d, 0xd53db92, 0x80b21baf, + 0xcefdb76, 0x80a7cb49, + 0xc8bd35e, 0x809dc971, 0xc27c389, 0x8094162c, 0xbc3ac35, 0x808ab180, + 0xb5f8d9f, 0x80819b74, + 0xafb6805, 0x8078d40d, 0xa973ba5, 0x80705b50, 0xa3308bd, 0x80683143, + 0x9cecf89, 0x806055eb, + 0x96a9049, 0x8058c94c, 0x9064b3a, 0x80518b6b, 0x8a2009a, 0x804a9c4d, + 0x83db0a7, 0x8043fbf6, + 0x7d95b9e, 0x803daa6a, 0x77501be, 0x8037a7ac, 0x710a345, 0x8031f3c2, + 0x6ac406f, 0x802c8ead, + 0x647d97c, 0x80277872, 0x5e36ea9, 0x8022b114, 0x57f0035, 0x801e3895, + 0x51a8e5c, 0x801a0ef8, + 0x4b6195d, 0x80163440, 0x451a177, 0x8012a86f, 0x3ed26e6, 0x800f6b88, + 0x388a9ea, 0x800c7d8c, + 0x3242abf, 0x8009de7e, 0x2bfa9a4, 0x80078e5e, 0x25b26d7, 0x80058d2f, + 0x1f6a297, 0x8003daf1, + 0x1921d20, 0x800277a6, 0x12d96b1, 0x8001634e, 0xc90f88, 0x80009dea, + 0x6487e3, 0x8000277a, +}; + +static const q31_t WeightsQ31_2048[4096] = { + 0x7fffffff, 0x0, 0x7ffffd88, 0xffe6de05, 0x7ffff621, 0xffcdbc0b, 0x7fffe9cb, + 0xffb49a12, + 0x7fffd886, 0xff9b781d, 0x7fffc251, 0xff82562c, 0x7fffa72c, 0xff69343f, + 0x7fff8719, 0xff501258, + 0x7fff6216, 0xff36f078, 0x7fff3824, 0xff1dcea0, 0x7fff0943, 0xff04acd0, + 0x7ffed572, 0xfeeb8b0a, + 0x7ffe9cb2, 0xfed2694f, 0x7ffe5f03, 0xfeb947a0, 0x7ffe1c65, 0xfea025fd, + 0x7ffdd4d7, 0xfe870467, + 0x7ffd885a, 0xfe6de2e0, 0x7ffd36ee, 0xfe54c169, 0x7ffce093, 0xfe3ba002, + 0x7ffc8549, 0xfe227eac, + 0x7ffc250f, 0xfe095d69, 0x7ffbbfe6, 0xfdf03c3a, 0x7ffb55ce, 0xfdd71b1e, + 0x7ffae6c7, 0xfdbdfa18, + 0x7ffa72d1, 0xfda4d929, 0x7ff9f9ec, 0xfd8bb850, 0x7ff97c18, 0xfd729790, + 0x7ff8f954, 0xfd5976e9, + 0x7ff871a2, 0xfd40565c, 0x7ff7e500, 0xfd2735ea, 0x7ff75370, 0xfd0e1594, + 0x7ff6bcf0, 0xfcf4f55c, + 0x7ff62182, 0xfcdbd541, 0x7ff58125, 0xfcc2b545, 0x7ff4dbd9, 0xfca9956a, + 0x7ff4319d, 0xfc9075af, + 0x7ff38274, 0xfc775616, 0x7ff2ce5b, 0xfc5e36a0, 0x7ff21553, 0xfc45174e, + 0x7ff1575d, 0xfc2bf821, + 0x7ff09478, 0xfc12d91a, 0x7fefcca4, 0xfbf9ba39, 0x7feeffe1, 0xfbe09b80, + 0x7fee2e30, 0xfbc77cf0, + 0x7fed5791, 0xfbae5e89, 0x7fec7c02, 0xfb95404d, 0x7feb9b85, 0xfb7c223d, + 0x7feab61a, 0xfb630459, + 0x7fe9cbc0, 0xfb49e6a3, 0x7fe8dc78, 0xfb30c91b, 0x7fe7e841, 0xfb17abc2, + 0x7fe6ef1c, 0xfafe8e9b, + 0x7fe5f108, 0xfae571a4, 0x7fe4ee06, 0xfacc54e0, 0x7fe3e616, 0xfab3384f, + 0x7fe2d938, 0xfa9a1bf3, + 0x7fe1c76b, 0xfa80ffcb, 0x7fe0b0b1, 0xfa67e3da, 0x7fdf9508, 0xfa4ec821, + 0x7fde7471, 0xfa35ac9f, + 0x7fdd4eec, 0xfa1c9157, 0x7fdc247a, 0xfa037648, 0x7fdaf519, 0xf9ea5b75, + 0x7fd9c0ca, 0xf9d140de, + 0x7fd8878e, 0xf9b82684, 0x7fd74964, 0xf99f0c68, 0x7fd6064c, 0xf985f28a, + 0x7fd4be46, 0xf96cd8ed, + 0x7fd37153, 0xf953bf91, 0x7fd21f72, 0xf93aa676, 0x7fd0c8a3, 0xf9218d9e, + 0x7fcf6ce8, 0xf908750a, + 0x7fce0c3e, 0xf8ef5cbb, 0x7fcca6a7, 0xf8d644b2, 0x7fcb3c23, 0xf8bd2cef, + 0x7fc9ccb2, 0xf8a41574, + 0x7fc85854, 0xf88afe42, 0x7fc6df08, 0xf871e759, 0x7fc560cf, 0xf858d0bb, + 0x7fc3dda9, 0xf83fba68, + 0x7fc25596, 0xf826a462, 0x7fc0c896, 0xf80d8ea9, 0x7fbf36aa, 0xf7f4793e, + 0x7fbd9fd0, 0xf7db6423, + 0x7fbc040a, 0xf7c24f59, 0x7fba6357, 0xf7a93ae0, 0x7fb8bdb8, 0xf79026b9, + 0x7fb7132b, 0xf77712e5, + 0x7fb563b3, 0xf75dff66, 0x7fb3af4e, 0xf744ec3b, 0x7fb1f5fc, 0xf72bd967, + 0x7fb037bf, 0xf712c6ea, + 0x7fae7495, 0xf6f9b4c6, 0x7facac7f, 0xf6e0a2fa, 0x7faadf7c, 0xf6c79188, + 0x7fa90d8e, 0xf6ae8071, + 0x7fa736b4, 0xf6956fb7, 0x7fa55aee, 0xf67c5f59, 0x7fa37a3c, 0xf6634f59, + 0x7fa1949e, 0xf64a3fb8, + 0x7f9faa15, 0xf6313077, 0x7f9dbaa0, 0xf6182196, 0x7f9bc640, 0xf5ff1318, + 0x7f99ccf4, 0xf5e604fc, + 0x7f97cebd, 0xf5ccf743, 0x7f95cb9a, 0xf5b3e9f0, 0x7f93c38c, 0xf59add02, + 0x7f91b694, 0xf581d07b, + 0x7f8fa4b0, 0xf568c45b, 0x7f8d8de1, 0xf54fb8a4, 0x7f8b7227, 0xf536ad56, + 0x7f895182, 0xf51da273, + 0x7f872bf3, 0xf50497fb, 0x7f850179, 0xf4eb8def, 0x7f82d214, 0xf4d28451, + 0x7f809dc5, 0xf4b97b21, + 0x7f7e648c, 0xf4a07261, 0x7f7c2668, 0xf4876a10, 0x7f79e35a, 0xf46e6231, + 0x7f779b62, 0xf4555ac5, + 0x7f754e80, 0xf43c53cb, 0x7f72fcb4, 0xf4234d45, 0x7f70a5fe, 0xf40a4735, + 0x7f6e4a5e, 0xf3f1419a, + 0x7f6be9d4, 0xf3d83c77, 0x7f698461, 0xf3bf37cb, 0x7f671a05, 0xf3a63398, + 0x7f64aabf, 0xf38d2fe0, + 0x7f62368f, 0xf3742ca2, 0x7f5fbd77, 0xf35b29e0, 0x7f5d3f75, 0xf342279b, + 0x7f5abc8a, 0xf32925d3, + 0x7f5834b7, 0xf310248a, 0x7f55a7fa, 0xf2f723c1, 0x7f531655, 0xf2de2379, + 0x7f507fc7, 0xf2c523b2, + 0x7f4de451, 0xf2ac246e, 0x7f4b43f2, 0xf29325ad, 0x7f489eaa, 0xf27a2771, + 0x7f45f47b, 0xf26129ba, + 0x7f434563, 0xf2482c8a, 0x7f409164, 0xf22f2fe1, 0x7f3dd87c, 0xf21633c0, + 0x7f3b1aad, 0xf1fd3829, + 0x7f3857f6, 0xf1e43d1c, 0x7f359057, 0xf1cb429a, 0x7f32c3d1, 0xf1b248a5, + 0x7f2ff263, 0xf1994f3d, + 0x7f2d1c0e, 0xf1805662, 0x7f2a40d2, 0xf1675e17, 0x7f2760af, 0xf14e665c, + 0x7f247ba5, 0xf1356f32, + 0x7f2191b4, 0xf11c789a, 0x7f1ea2dc, 0xf1038295, 0x7f1baf1e, 0xf0ea8d24, + 0x7f18b679, 0xf0d19848, + 0x7f15b8ee, 0xf0b8a401, 0x7f12b67c, 0xf09fb051, 0x7f0faf25, 0xf086bd39, + 0x7f0ca2e7, 0xf06dcaba, + 0x7f0991c4, 0xf054d8d5, 0x7f067bba, 0xf03be78a, 0x7f0360cb, 0xf022f6da, + 0x7f0040f6, 0xf00a06c8, + 0x7efd1c3c, 0xeff11753, 0x7ef9f29d, 0xefd8287c, 0x7ef6c418, 0xefbf3a45, + 0x7ef390ae, 0xefa64cae, + 0x7ef05860, 0xef8d5fb8, 0x7eed1b2c, 0xef747365, 0x7ee9d914, 0xef5b87b5, + 0x7ee69217, 0xef429caa, + 0x7ee34636, 0xef29b243, 0x7edff570, 0xef10c883, 0x7edc9fc6, 0xeef7df6a, + 0x7ed94538, 0xeedef6f9, + 0x7ed5e5c6, 0xeec60f31, 0x7ed28171, 0xeead2813, 0x7ecf1837, 0xee9441a0, + 0x7ecbaa1a, 0xee7b5bd9, + 0x7ec8371a, 0xee6276bf, 0x7ec4bf36, 0xee499253, 0x7ec14270, 0xee30ae96, + 0x7ebdc0c6, 0xee17cb88, + 0x7eba3a39, 0xedfee92b, 0x7eb6aeca, 0xede60780, 0x7eb31e78, 0xedcd2687, + 0x7eaf8943, 0xedb44642, + 0x7eabef2c, 0xed9b66b2, 0x7ea85033, 0xed8287d7, 0x7ea4ac58, 0xed69a9b3, + 0x7ea1039b, 0xed50cc46, + 0x7e9d55fc, 0xed37ef91, 0x7e99a37c, 0xed1f1396, 0x7e95ec1a, 0xed063856, + 0x7e922fd6, 0xeced5dd0, + 0x7e8e6eb2, 0xecd48407, 0x7e8aa8ac, 0xecbbaafb, 0x7e86ddc6, 0xeca2d2ad, + 0x7e830dff, 0xec89fb1e, + 0x7e7f3957, 0xec71244f, 0x7e7b5fce, 0xec584e41, 0x7e778166, 0xec3f78f6, + 0x7e739e1d, 0xec26a46d, + 0x7e6fb5f4, 0xec0dd0a8, 0x7e6bc8eb, 0xebf4fda8, 0x7e67d703, 0xebdc2b6e, + 0x7e63e03b, 0xebc359fb, + 0x7e5fe493, 0xebaa894f, 0x7e5be40c, 0xeb91b96c, 0x7e57dea7, 0xeb78ea52, + 0x7e53d462, 0xeb601c04, + 0x7e4fc53e, 0xeb474e81, 0x7e4bb13c, 0xeb2e81ca, 0x7e47985b, 0xeb15b5e1, + 0x7e437a9c, 0xeafceac6, + 0x7e3f57ff, 0xeae4207a, 0x7e3b3083, 0xeacb56ff, 0x7e37042a, 0xeab28e56, + 0x7e32d2f4, 0xea99c67e, + 0x7e2e9cdf, 0xea80ff7a, 0x7e2a61ed, 0xea683949, 0x7e26221f, 0xea4f73ee, + 0x7e21dd73, 0xea36af69, + 0x7e1d93ea, 0xea1debbb, 0x7e194584, 0xea0528e5, 0x7e14f242, 0xe9ec66e8, + 0x7e109a24, 0xe9d3a5c5, + 0x7e0c3d29, 0xe9bae57d, 0x7e07db52, 0xe9a22610, 0x7e0374a0, 0xe9896781, + 0x7dff0911, 0xe970a9ce, + 0x7dfa98a8, 0xe957ecfb, 0x7df62362, 0xe93f3107, 0x7df1a942, 0xe92675f4, + 0x7ded2a47, 0xe90dbbc2, + 0x7de8a670, 0xe8f50273, 0x7de41dc0, 0xe8dc4a07, 0x7ddf9034, 0xe8c39280, + 0x7ddafdce, 0xe8aadbde, + 0x7dd6668f, 0xe8922622, 0x7dd1ca75, 0xe879714d, 0x7dcd2981, 0xe860bd61, + 0x7dc883b4, 0xe8480a5d, + 0x7dc3d90d, 0xe82f5844, 0x7dbf298d, 0xe816a716, 0x7dba7534, 0xe7fdf6d4, + 0x7db5bc02, 0xe7e5477f, + 0x7db0fdf8, 0xe7cc9917, 0x7dac3b15, 0xe7b3eb9f, 0x7da77359, 0xe79b3f16, + 0x7da2a6c6, 0xe782937e, + 0x7d9dd55a, 0xe769e8d8, 0x7d98ff17, 0xe7513f25, 0x7d9423fc, 0xe7389665, + 0x7d8f4409, 0xe71fee99, + 0x7d8a5f40, 0xe70747c4, 0x7d85759f, 0xe6eea1e4, 0x7d808728, 0xe6d5fcfc, + 0x7d7b93da, 0xe6bd590d, + 0x7d769bb5, 0xe6a4b616, 0x7d719eba, 0xe68c141a, 0x7d6c9ce9, 0xe6737319, + 0x7d679642, 0xe65ad315, + 0x7d628ac6, 0xe642340d, 0x7d5d7a74, 0xe6299604, 0x7d58654d, 0xe610f8f9, + 0x7d534b50, 0xe5f85cef, + 0x7d4e2c7f, 0xe5dfc1e5, 0x7d4908d9, 0xe5c727dd, 0x7d43e05e, 0xe5ae8ed8, + 0x7d3eb30f, 0xe595f6d7, + 0x7d3980ec, 0xe57d5fda, 0x7d3449f5, 0xe564c9e3, 0x7d2f0e2b, 0xe54c34f3, + 0x7d29cd8c, 0xe533a10a, + 0x7d24881b, 0xe51b0e2a, 0x7d1f3dd6, 0xe5027c53, 0x7d19eebf, 0xe4e9eb87, + 0x7d149ad5, 0xe4d15bc6, + 0x7d0f4218, 0xe4b8cd11, 0x7d09e489, 0xe4a03f69, 0x7d048228, 0xe487b2d0, + 0x7cff1af5, 0xe46f2745, + 0x7cf9aef0, 0xe4569ccb, 0x7cf43e1a, 0xe43e1362, 0x7ceec873, 0xe4258b0a, + 0x7ce94dfb, 0xe40d03c6, + 0x7ce3ceb2, 0xe3f47d96, 0x7cde4a98, 0xe3dbf87a, 0x7cd8c1ae, 0xe3c37474, + 0x7cd333f3, 0xe3aaf184, + 0x7ccda169, 0xe3926fad, 0x7cc80a0f, 0xe379eeed, 0x7cc26de5, 0xe3616f48, + 0x7cbcccec, 0xe348f0bd, + 0x7cb72724, 0xe330734d, 0x7cb17c8d, 0xe317f6fa, 0x7cabcd28, 0xe2ff7bc3, + 0x7ca618f3, 0xe2e701ac, + 0x7ca05ff1, 0xe2ce88b3, 0x7c9aa221, 0xe2b610da, 0x7c94df83, 0xe29d9a23, + 0x7c8f1817, 0xe285248d, + 0x7c894bde, 0xe26cb01b, 0x7c837ad8, 0xe2543ccc, 0x7c7da505, 0xe23bcaa2, + 0x7c77ca65, 0xe223599e, + 0x7c71eaf9, 0xe20ae9c1, 0x7c6c06c0, 0xe1f27b0b, 0x7c661dbc, 0xe1da0d7e, + 0x7c602fec, 0xe1c1a11b, + 0x7c5a3d50, 0xe1a935e2, 0x7c5445e9, 0xe190cbd4, 0x7c4e49b7, 0xe17862f3, + 0x7c4848ba, 0xe15ffb3f, + 0x7c4242f2, 0xe14794ba, 0x7c3c3860, 0xe12f2f63, 0x7c362904, 0xe116cb3d, + 0x7c3014de, 0xe0fe6848, + 0x7c29fbee, 0xe0e60685, 0x7c23de35, 0xe0cda5f5, 0x7c1dbbb3, 0xe0b54698, + 0x7c179467, 0xe09ce871, + 0x7c116853, 0xe0848b7f, 0x7c0b3777, 0xe06c2fc4, 0x7c0501d2, 0xe053d541, + 0x7bfec765, 0xe03b7bf6, + 0x7bf88830, 0xe02323e5, 0x7bf24434, 0xe00acd0e, 0x7bebfb70, 0xdff27773, + 0x7be5ade6, 0xdfda2314, + 0x7bdf5b94, 0xdfc1cff3, 0x7bd9047c, 0xdfa97e0f, 0x7bd2a89e, 0xdf912d6b, + 0x7bcc47fa, 0xdf78de07, + 0x7bc5e290, 0xdf608fe4, 0x7bbf7860, 0xdf484302, 0x7bb9096b, 0xdf2ff764, + 0x7bb295b0, 0xdf17ad0a, + 0x7bac1d31, 0xdeff63f4, 0x7ba59fee, 0xdee71c24, 0x7b9f1de6, 0xdeced59b, + 0x7b989719, 0xdeb69059, + 0x7b920b89, 0xde9e4c60, 0x7b8b7b36, 0xde8609b1, 0x7b84e61f, 0xde6dc84b, + 0x7b7e4c45, 0xde558831, + 0x7b77ada8, 0xde3d4964, 0x7b710a49, 0xde250be3, 0x7b6a6227, 0xde0ccfb1, + 0x7b63b543, 0xddf494ce, + 0x7b5d039e, 0xdddc5b3b, 0x7b564d36, 0xddc422f8, 0x7b4f920e, 0xddabec08, + 0x7b48d225, 0xdd93b66a, + 0x7b420d7a, 0xdd7b8220, 0x7b3b4410, 0xdd634f2b, 0x7b3475e5, 0xdd4b1d8c, + 0x7b2da2fa, 0xdd32ed43, + 0x7b26cb4f, 0xdd1abe51, 0x7b1feee5, 0xdd0290b8, 0x7b190dbc, 0xdcea6478, + 0x7b1227d3, 0xdcd23993, + 0x7b0b3d2c, 0xdcba1008, 0x7b044dc7, 0xdca1e7da, 0x7afd59a4, 0xdc89c109, + 0x7af660c2, 0xdc719b96, + 0x7aef6323, 0xdc597781, 0x7ae860c7, 0xdc4154cd, 0x7ae159ae, 0xdc293379, + 0x7ada4dd8, 0xdc111388, + 0x7ad33d45, 0xdbf8f4f8, 0x7acc27f7, 0xdbe0d7cd, 0x7ac50dec, 0xdbc8bc06, + 0x7abdef25, 0xdbb0a1a4, + 0x7ab6cba4, 0xdb9888a8, 0x7aafa367, 0xdb807114, 0x7aa8766f, 0xdb685ae9, + 0x7aa144bc, 0xdb504626, + 0x7a9a0e50, 0xdb3832cd, 0x7a92d329, 0xdb2020e0, 0x7a8b9348, 0xdb08105e, + 0x7a844eae, 0xdaf00149, + 0x7a7d055b, 0xdad7f3a2, 0x7a75b74f, 0xdabfe76a, 0x7a6e648a, 0xdaa7dca1, + 0x7a670d0d, 0xda8fd349, + 0x7a5fb0d8, 0xda77cb63, 0x7a584feb, 0xda5fc4ef, 0x7a50ea47, 0xda47bfee, + 0x7a497feb, 0xda2fbc61, + 0x7a4210d8, 0xda17ba4a, 0x7a3a9d0f, 0xd9ffb9a9, 0x7a332490, 0xd9e7ba7f, + 0x7a2ba75a, 0xd9cfbccd, + 0x7a24256f, 0xd9b7c094, 0x7a1c9ece, 0xd99fc5d4, 0x7a151378, 0xd987cc90, + 0x7a0d836d, 0xd96fd4c7, + 0x7a05eead, 0xd957de7a, 0x79fe5539, 0xd93fe9ab, 0x79f6b711, 0xd927f65b, + 0x79ef1436, 0xd910048a, + 0x79e76ca7, 0xd8f81439, 0x79dfc064, 0xd8e0256a, 0x79d80f6f, 0xd8c8381d, + 0x79d059c8, 0xd8b04c52, + 0x79c89f6e, 0xd898620c, 0x79c0e062, 0xd880794b, 0x79b91ca4, 0xd868920f, + 0x79b15435, 0xd850ac5a, + 0x79a98715, 0xd838c82d, 0x79a1b545, 0xd820e589, 0x7999dec4, 0xd809046e, + 0x79920392, 0xd7f124dd, + 0x798a23b1, 0xd7d946d8, 0x79823f20, 0xd7c16a5f, 0x797a55e0, 0xd7a98f73, + 0x797267f2, 0xd791b616, + 0x796a7554, 0xd779de47, 0x79627e08, 0xd7620808, 0x795a820e, 0xd74a335b, + 0x79528167, 0xd732603f, + 0x794a7c12, 0xd71a8eb5, 0x79427210, 0xd702bec0, 0x793a6361, 0xd6eaf05f, + 0x79325006, 0xd6d32393, + 0x792a37fe, 0xd6bb585e, 0x79221b4b, 0xd6a38ec0, 0x7919f9ec, 0xd68bc6ba, + 0x7911d3e2, 0xd674004e, + 0x7909a92d, 0xd65c3b7b, 0x790179cd, 0xd6447844, 0x78f945c3, 0xd62cb6a8, + 0x78f10d0f, 0xd614f6a9, + 0x78e8cfb2, 0xd5fd3848, 0x78e08dab, 0xd5e57b85, 0x78d846fb, 0xd5cdc062, + 0x78cffba3, 0xd5b606e0, + 0x78c7aba2, 0xd59e4eff, 0x78bf56f9, 0xd58698c0, 0x78b6fda8, 0xd56ee424, + 0x78ae9fb0, 0xd557312d, + 0x78a63d11, 0xd53f7fda, 0x789dd5cb, 0xd527d02e, 0x789569df, 0xd5102228, + 0x788cf94c, 0xd4f875ca, + 0x78848414, 0xd4e0cb15, 0x787c0a36, 0xd4c92209, 0x78738bb3, 0xd4b17aa8, + 0x786b088c, 0xd499d4f2, + 0x786280bf, 0xd48230e9, 0x7859f44f, 0xd46a8e8d, 0x7851633b, 0xd452eddf, + 0x7848cd83, 0xd43b4ee0, + 0x78403329, 0xd423b191, 0x7837942b, 0xd40c15f3, 0x782ef08b, 0xd3f47c06, + 0x78264849, 0xd3dce3cd, + 0x781d9b65, 0xd3c54d47, 0x7814e9df, 0xd3adb876, 0x780c33b8, 0xd396255a, + 0x780378f1, 0xd37e93f4, + 0x77fab989, 0xd3670446, 0x77f1f581, 0xd34f764f, 0x77e92cd9, 0xd337ea12, + 0x77e05f91, 0xd3205f8f, + 0x77d78daa, 0xd308d6c7, 0x77ceb725, 0xd2f14fba, 0x77c5dc01, 0xd2d9ca6a, + 0x77bcfc3f, 0xd2c246d8, + 0x77b417df, 0xd2aac504, 0x77ab2ee2, 0xd29344f0, 0x77a24148, 0xd27bc69c, + 0x77994f11, 0xd2644a0a, + 0x7790583e, 0xd24ccf39, 0x77875cce, 0xd235562b, 0x777e5cc3, 0xd21ddee2, + 0x7775581d, 0xd206695d, + 0x776c4edb, 0xd1eef59e, 0x776340ff, 0xd1d783a6, 0x775a2e89, 0xd1c01375, + 0x77511778, 0xd1a8a50d, + 0x7747fbce, 0xd191386e, 0x773edb8b, 0xd179cd99, 0x7735b6af, 0xd1626490, + 0x772c8d3a, 0xd14afd52, + 0x77235f2d, 0xd13397e2, 0x771a2c88, 0xd11c343f, 0x7710f54c, 0xd104d26b, + 0x7707b979, 0xd0ed7267, + 0x76fe790e, 0xd0d61434, 0x76f5340e, 0xd0beb7d2, 0x76ebea77, 0xd0a75d42, + 0x76e29c4b, 0xd0900486, + 0x76d94989, 0xd078ad9e, 0x76cff232, 0xd061588b, 0x76c69647, 0xd04a054e, + 0x76bd35c7, 0xd032b3e7, + 0x76b3d0b4, 0xd01b6459, 0x76aa670d, 0xd00416a3, 0x76a0f8d2, 0xcfeccac7, + 0x76978605, 0xcfd580c6, + 0x768e0ea6, 0xcfbe389f, 0x768492b4, 0xcfa6f255, 0x767b1231, 0xcf8fade9, + 0x76718d1c, 0xcf786b5a, + 0x76680376, 0xcf612aaa, 0x765e7540, 0xcf49ebda, 0x7654e279, 0xcf32aeeb, + 0x764b4b23, 0xcf1b73de, + 0x7641af3d, 0xcf043ab3, 0x76380ec8, 0xceed036b, 0x762e69c4, 0xced5ce08, + 0x7624c031, 0xcebe9a8a, + 0x761b1211, 0xcea768f2, 0x76115f63, 0xce903942, 0x7607a828, 0xce790b79, + 0x75fdec60, 0xce61df99, + 0x75f42c0b, 0xce4ab5a2, 0x75ea672a, 0xce338d97, 0x75e09dbd, 0xce1c6777, + 0x75d6cfc5, 0xce054343, + 0x75ccfd42, 0xcdee20fc, 0x75c32634, 0xcdd700a4, 0x75b94a9c, 0xcdbfe23a, + 0x75af6a7b, 0xcda8c5c1, + 0x75a585cf, 0xcd91ab39, 0x759b9c9b, 0xcd7a92a2, 0x7591aedd, 0xcd637bfe, + 0x7587bc98, 0xcd4c674d, + 0x757dc5ca, 0xcd355491, 0x7573ca75, 0xcd1e43ca, 0x7569ca99, 0xcd0734f9, + 0x755fc635, 0xccf0281f, + 0x7555bd4c, 0xccd91d3d, 0x754bafdc, 0xccc21455, 0x75419de7, 0xccab0d65, + 0x7537876c, 0xcc940871, + 0x752d6c6c, 0xcc7d0578, 0x75234ce8, 0xcc66047b, 0x751928e0, 0xcc4f057c, + 0x750f0054, 0xcc38087b, + 0x7504d345, 0xcc210d79, 0x74faa1b3, 0xcc0a1477, 0x74f06b9e, 0xcbf31d75, + 0x74e63108, 0xcbdc2876, + 0x74dbf1ef, 0xcbc53579, 0x74d1ae55, 0xcbae447f, 0x74c7663a, 0xcb97558a, + 0x74bd199f, 0xcb80689a, + 0x74b2c884, 0xcb697db0, 0x74a872e8, 0xcb5294ce, 0x749e18cd, 0xcb3badf3, + 0x7493ba34, 0xcb24c921, + 0x7489571c, 0xcb0de658, 0x747eef85, 0xcaf7059a, 0x74748371, 0xcae026e8, + 0x746a12df, 0xcac94a42, + 0x745f9dd1, 0xcab26fa9, 0x74552446, 0xca9b971e, 0x744aa63f, 0xca84c0a3, + 0x744023bc, 0xca6dec37, + 0x74359cbd, 0xca5719db, 0x742b1144, 0xca404992, 0x74208150, 0xca297b5a, + 0x7415ece2, 0xca12af37, + 0x740b53fb, 0xc9fbe527, 0x7400b69a, 0xc9e51d2d, 0x73f614c0, 0xc9ce5748, + 0x73eb6e6e, 0xc9b7937a, + 0x73e0c3a3, 0xc9a0d1c5, 0x73d61461, 0xc98a1227, 0x73cb60a8, 0xc97354a4, + 0x73c0a878, 0xc95c993a, + 0x73b5ebd1, 0xc945dfec, 0x73ab2ab4, 0xc92f28ba, 0x73a06522, 0xc91873a5, + 0x73959b1b, 0xc901c0ae, + 0x738acc9e, 0xc8eb0fd6, 0x737ff9ae, 0xc8d4611d, 0x73752249, 0xc8bdb485, + 0x736a4671, 0xc8a70a0e, + 0x735f6626, 0xc89061ba, 0x73548168, 0xc879bb89, 0x73499838, 0xc863177b, + 0x733eaa96, 0xc84c7593, + 0x7333b883, 0xc835d5d0, 0x7328c1ff, 0xc81f3834, 0x731dc70a, 0xc8089cbf, + 0x7312c7a5, 0xc7f20373, + 0x7307c3d0, 0xc7db6c50, 0x72fcbb8c, 0xc7c4d757, 0x72f1aed9, 0xc7ae4489, + 0x72e69db7, 0xc797b3e7, + 0x72db8828, 0xc7812572, 0x72d06e2b, 0xc76a992a, 0x72c54fc1, 0xc7540f11, + 0x72ba2cea, 0xc73d8727, + 0x72af05a7, 0xc727016d, 0x72a3d9f7, 0xc7107de4, 0x7298a9dd, 0xc6f9fc8d, + 0x728d7557, 0xc6e37d69, + 0x72823c67, 0xc6cd0079, 0x7276ff0d, 0xc6b685bd, 0x726bbd48, 0xc6a00d37, + 0x7260771b, 0xc68996e7, + 0x72552c85, 0xc67322ce, 0x7249dd86, 0xc65cb0ed, 0x723e8a20, 0xc6464144, + 0x72333251, 0xc62fd3d6, + 0x7227d61c, 0xc61968a2, 0x721c7580, 0xc602ffaa, 0x7211107e, 0xc5ec98ee, + 0x7205a716, 0xc5d6346f, + 0x71fa3949, 0xc5bfd22e, 0x71eec716, 0xc5a9722c, 0x71e35080, 0xc593146a, + 0x71d7d585, 0xc57cb8e9, + 0x71cc5626, 0xc5665fa9, 0x71c0d265, 0xc55008ab, 0x71b54a41, 0xc539b3f1, + 0x71a9bdba, 0xc523617a, + 0x719e2cd2, 0xc50d1149, 0x71929789, 0xc4f6c35d, 0x7186fdde, 0xc4e077b8, + 0x717b5fd3, 0xc4ca2e5b, + 0x716fbd68, 0xc4b3e746, 0x7164169d, 0xc49da27a, 0x71586b74, 0xc4875ff9, + 0x714cbbeb, 0xc4711fc2, + 0x71410805, 0xc45ae1d7, 0x71354fc0, 0xc444a639, 0x7129931f, 0xc42e6ce8, + 0x711dd220, 0xc41835e6, + 0x71120cc5, 0xc4020133, 0x7106430e, 0xc3ebced0, 0x70fa74fc, 0xc3d59ebe, + 0x70eea28e, 0xc3bf70fd, + 0x70e2cbc6, 0xc3a94590, 0x70d6f0a4, 0xc3931c76, 0x70cb1128, 0xc37cf5b0, + 0x70bf2d53, 0xc366d140, + 0x70b34525, 0xc350af26, 0x70a7589f, 0xc33a8f62, 0x709b67c0, 0xc32471f7, + 0x708f728b, 0xc30e56e4, + 0x708378ff, 0xc2f83e2a, 0x70777b1c, 0xc2e227cb, 0x706b78e3, 0xc2cc13c7, + 0x705f7255, 0xc2b6021f, + 0x70536771, 0xc29ff2d4, 0x70475839, 0xc289e5e7, 0x703b44ad, 0xc273db58, + 0x702f2ccd, 0xc25dd329, + 0x7023109a, 0xc247cd5a, 0x7016f014, 0xc231c9ec, 0x700acb3c, 0xc21bc8e1, + 0x6ffea212, 0xc205ca38, + 0x6ff27497, 0xc1efcdf3, 0x6fe642ca, 0xc1d9d412, 0x6fda0cae, 0xc1c3dc97, + 0x6fcdd241, 0xc1ade781, + 0x6fc19385, 0xc197f4d4, 0x6fb5507a, 0xc182048d, 0x6fa90921, 0xc16c16b0, + 0x6f9cbd79, 0xc1562b3d, + 0x6f906d84, 0xc1404233, 0x6f841942, 0xc12a5b95, 0x6f77c0b3, 0xc1147764, + 0x6f6b63d8, 0xc0fe959f, + 0x6f5f02b2, 0xc0e8b648, 0x6f529d40, 0xc0d2d960, 0x6f463383, 0xc0bcfee7, + 0x6f39c57d, 0xc0a726df, + 0x6f2d532c, 0xc0915148, 0x6f20dc92, 0xc07b7e23, 0x6f1461b0, 0xc065ad70, + 0x6f07e285, 0xc04fdf32, + 0x6efb5f12, 0xc03a1368, 0x6eeed758, 0xc0244a14, 0x6ee24b57, 0xc00e8336, + 0x6ed5bb10, 0xbff8bece, + 0x6ec92683, 0xbfe2fcdf, 0x6ebc8db0, 0xbfcd3d69, 0x6eaff099, 0xbfb7806c, + 0x6ea34f3d, 0xbfa1c5ea, + 0x6e96a99d, 0xbf8c0de3, 0x6e89ffb9, 0xbf765858, 0x6e7d5193, 0xbf60a54a, + 0x6e709f2a, 0xbf4af4ba, + 0x6e63e87f, 0xbf3546a8, 0x6e572d93, 0xbf1f9b16, 0x6e4a6e66, 0xbf09f205, + 0x6e3daaf8, 0xbef44b74, + 0x6e30e34a, 0xbedea765, 0x6e24175c, 0xbec905d9, 0x6e174730, 0xbeb366d1, + 0x6e0a72c5, 0xbe9dca4e, + 0x6dfd9a1c, 0xbe88304f, 0x6df0bd35, 0xbe7298d7, 0x6de3dc11, 0xbe5d03e6, + 0x6dd6f6b1, 0xbe47717c, + 0x6dca0d14, 0xbe31e19b, 0x6dbd1f3c, 0xbe1c5444, 0x6db02d29, 0xbe06c977, + 0x6da336dc, 0xbdf14135, + 0x6d963c54, 0xbddbbb7f, 0x6d893d93, 0xbdc63856, 0x6d7c3a98, 0xbdb0b7bb, + 0x6d6f3365, 0xbd9b39ad, + 0x6d6227fa, 0xbd85be30, 0x6d551858, 0xbd704542, 0x6d48047e, 0xbd5acee5, + 0x6d3aec6e, 0xbd455b1a, + 0x6d2dd027, 0xbd2fe9e2, 0x6d20afac, 0xbd1a7b3d, 0x6d138afb, 0xbd050f2c, + 0x6d066215, 0xbcefa5b0, + 0x6cf934fc, 0xbcda3ecb, 0x6cec03af, 0xbcc4da7b, 0x6cdece2f, 0xbcaf78c4, + 0x6cd1947c, 0xbc9a19a5, + 0x6cc45698, 0xbc84bd1f, 0x6cb71482, 0xbc6f6333, 0x6ca9ce3b, 0xbc5a0be2, + 0x6c9c83c3, 0xbc44b72c, + 0x6c8f351c, 0xbc2f6513, 0x6c81e245, 0xbc1a1598, 0x6c748b3f, 0xbc04c8ba, + 0x6c67300b, 0xbbef7e7c, + 0x6c59d0a9, 0xbbda36dd, 0x6c4c6d1a, 0xbbc4f1df, 0x6c3f055d, 0xbbafaf82, + 0x6c319975, 0xbb9a6fc7, + 0x6c242960, 0xbb8532b0, 0x6c16b521, 0xbb6ff83c, 0x6c093cb6, 0xbb5ac06d, + 0x6bfbc021, 0xbb458b43, + 0x6bee3f62, 0xbb3058c0, 0x6be0ba7b, 0xbb1b28e4, 0x6bd3316a, 0xbb05fbb0, + 0x6bc5a431, 0xbaf0d125, + 0x6bb812d1, 0xbadba943, 0x6baa7d49, 0xbac6840c, 0x6b9ce39b, 0xbab16180, + 0x6b8f45c7, 0xba9c41a0, + 0x6b81a3cd, 0xba87246d, 0x6b73fdae, 0xba7209e7, 0x6b66536b, 0xba5cf210, + 0x6b58a503, 0xba47dce8, + 0x6b4af279, 0xba32ca71, 0x6b3d3bcb, 0xba1dbaaa, 0x6b2f80fb, 0xba08ad95, + 0x6b21c208, 0xb9f3a332, + 0x6b13fef5, 0xb9de9b83, 0x6b0637c1, 0xb9c99688, 0x6af86c6c, 0xb9b49442, + 0x6aea9cf8, 0xb99f94b2, + 0x6adcc964, 0xb98a97d8, 0x6acef1b2, 0xb9759db6, 0x6ac115e2, 0xb960a64c, + 0x6ab335f4, 0xb94bb19b, + 0x6aa551e9, 0xb936bfa4, 0x6a9769c1, 0xb921d067, 0x6a897d7d, 0xb90ce3e6, + 0x6a7b8d1e, 0xb8f7fa21, + 0x6a6d98a4, 0xb8e31319, 0x6a5fa010, 0xb8ce2ecf, 0x6a51a361, 0xb8b94d44, + 0x6a43a29a, 0xb8a46e78, + 0x6a359db9, 0xb88f926d, 0x6a2794c1, 0xb87ab922, 0x6a1987b0, 0xb865e299, + 0x6a0b7689, 0xb8510ed4, + 0x69fd614a, 0xb83c3dd1, 0x69ef47f6, 0xb8276f93, 0x69e12a8c, 0xb812a41a, + 0x69d3090e, 0xb7fddb67, + 0x69c4e37a, 0xb7e9157a, 0x69b6b9d3, 0xb7d45255, 0x69a88c19, 0xb7bf91f8, + 0x699a5a4c, 0xb7aad465, + 0x698c246c, 0xb796199b, 0x697dea7b, 0xb781619c, 0x696fac78, 0xb76cac69, + 0x69616a65, 0xb757fa01, + 0x69532442, 0xb7434a67, 0x6944da10, 0xb72e9d9b, 0x69368bce, 0xb719f39e, + 0x6928397e, 0xb7054c6f, + 0x6919e320, 0xb6f0a812, 0x690b88b5, 0xb6dc0685, 0x68fd2a3d, 0xb6c767ca, + 0x68eec7b9, 0xb6b2cbe2, + 0x68e06129, 0xb69e32cd, 0x68d1f68f, 0xb6899c8d, 0x68c387e9, 0xb6750921, + 0x68b5153a, 0xb660788c, + 0x68a69e81, 0xb64beacd, 0x689823bf, 0xb6375fe5, 0x6889a4f6, 0xb622d7d6, + 0x687b2224, 0xb60e529f, + 0x686c9b4b, 0xb5f9d043, 0x685e106c, 0xb5e550c1, 0x684f8186, 0xb5d0d41a, + 0x6840ee9b, 0xb5bc5a50, + 0x683257ab, 0xb5a7e362, 0x6823bcb7, 0xb5936f53, 0x68151dbe, 0xb57efe22, + 0x68067ac3, 0xb56a8fd0, + 0x67f7d3c5, 0xb556245e, 0x67e928c5, 0xb541bbcd, 0x67da79c3, 0xb52d561e, + 0x67cbc6c0, 0xb518f351, + 0x67bd0fbd, 0xb5049368, 0x67ae54ba, 0xb4f03663, 0x679f95b7, 0xb4dbdc42, + 0x6790d2b6, 0xb4c78507, + 0x67820bb7, 0xb4b330b3, 0x677340ba, 0xb49edf45, 0x676471c0, 0xb48a90c0, + 0x67559eca, 0xb4764523, + 0x6746c7d8, 0xb461fc70, 0x6737ecea, 0xb44db6a8, 0x67290e02, 0xb43973ca, + 0x671a2b20, 0xb42533d8, + 0x670b4444, 0xb410f6d3, 0x66fc596f, 0xb3fcbcbb, 0x66ed6aa1, 0xb3e88592, + 0x66de77dc, 0xb3d45157, + 0x66cf8120, 0xb3c0200c, 0x66c0866d, 0xb3abf1b2, 0x66b187c3, 0xb397c649, + 0x66a28524, 0xb3839dd3, + 0x66937e91, 0xb36f784f, 0x66847408, 0xb35b55bf, 0x6675658c, 0xb3473623, + 0x6666531d, 0xb333197c, + 0x66573cbb, 0xb31effcc, 0x66482267, 0xb30ae912, 0x66390422, 0xb2f6d550, + 0x6629e1ec, 0xb2e2c486, + 0x661abbc5, 0xb2ceb6b5, 0x660b91af, 0xb2baabde, 0x65fc63a9, 0xb2a6a402, + 0x65ed31b5, 0xb2929f21, + 0x65ddfbd3, 0xb27e9d3c, 0x65cec204, 0xb26a9e54, 0x65bf8447, 0xb256a26a, + 0x65b0429f, 0xb242a97e, + 0x65a0fd0b, 0xb22eb392, 0x6591b38c, 0xb21ac0a6, 0x65826622, 0xb206d0ba, + 0x657314cf, 0xb1f2e3d0, + 0x6563bf92, 0xb1def9e9, 0x6554666d, 0xb1cb1304, 0x6545095f, 0xb1b72f23, + 0x6535a86b, 0xb1a34e47, + 0x6526438f, 0xb18f7071, 0x6516dacd, 0xb17b95a0, 0x65076e25, 0xb167bdd7, + 0x64f7fd98, 0xb153e915, + 0x64e88926, 0xb140175b, 0x64d910d1, 0xb12c48ab, 0x64c99498, 0xb1187d05, + 0x64ba147d, 0xb104b46a, + 0x64aa907f, 0xb0f0eeda, 0x649b08a0, 0xb0dd2c56, 0x648b7ce0, 0xb0c96ce0, + 0x647bed3f, 0xb0b5b077, + 0x646c59bf, 0xb0a1f71d, 0x645cc260, 0xb08e40d2, 0x644d2722, 0xb07a8d97, + 0x643d8806, 0xb066dd6d, + 0x642de50d, 0xb0533055, 0x641e3e38, 0xb03f864f, 0x640e9386, 0xb02bdf5c, + 0x63fee4f8, 0xb0183b7d, + 0x63ef3290, 0xb0049ab3, 0x63df7c4d, 0xaff0fcfe, 0x63cfc231, 0xafdd625f, + 0x63c0043b, 0xafc9cad7, + 0x63b0426d, 0xafb63667, 0x63a07cc7, 0xafa2a50f, 0x6390b34a, 0xaf8f16d1, + 0x6380e5f6, 0xaf7b8bac, + 0x637114cc, 0xaf6803a2, 0x63613fcd, 0xaf547eb3, 0x635166f9, 0xaf40fce1, + 0x63418a50, 0xaf2d7e2b, + 0x6331a9d4, 0xaf1a0293, 0x6321c585, 0xaf068a1a, 0x6311dd64, 0xaef314c0, + 0x6301f171, 0xaedfa285, + 0x62f201ac, 0xaecc336c, 0x62e20e17, 0xaeb8c774, 0x62d216b3, 0xaea55e9e, + 0x62c21b7e, 0xae91f8eb, + 0x62b21c7b, 0xae7e965b, 0x62a219aa, 0xae6b36f0, 0x6292130c, 0xae57daab, + 0x628208a1, 0xae44818b, + 0x6271fa69, 0xae312b92, 0x6261e866, 0xae1dd8c0, 0x6251d298, 0xae0a8916, + 0x6241b8ff, 0xadf73c96, + 0x62319b9d, 0xade3f33e, 0x62217a72, 0xadd0ad12, 0x6211557e, 0xadbd6a10, + 0x62012cc2, 0xadaa2a3b, + 0x61f1003f, 0xad96ed92, 0x61e0cff5, 0xad83b416, 0x61d09be5, 0xad707dc8, + 0x61c06410, 0xad5d4aaa, + 0x61b02876, 0xad4a1aba, 0x619fe918, 0xad36edfc, 0x618fa5f7, 0xad23c46e, + 0x617f5f12, 0xad109e12, + 0x616f146c, 0xacfd7ae8, 0x615ec603, 0xacea5af2, 0x614e73da, 0xacd73e30, + 0x613e1df0, 0xacc424a3, + 0x612dc447, 0xacb10e4b, 0x611d66de, 0xac9dfb29, 0x610d05b7, 0xac8aeb3e, + 0x60fca0d2, 0xac77de8b, + 0x60ec3830, 0xac64d510, 0x60dbcbd1, 0xac51cecf, 0x60cb5bb7, 0xac3ecbc7, + 0x60bae7e1, 0xac2bcbfa, + 0x60aa7050, 0xac18cf69, 0x6099f505, 0xac05d613, 0x60897601, 0xabf2dffb, + 0x6078f344, 0xabdfed1f, + 0x60686ccf, 0xabccfd83, 0x6057e2a2, 0xabba1125, 0x604754bf, 0xaba72807, + 0x6036c325, 0xab944229, + 0x60262dd6, 0xab815f8d, 0x601594d1, 0xab6e8032, 0x6004f819, 0xab5ba41a, + 0x5ff457ad, 0xab48cb46, + 0x5fe3b38d, 0xab35f5b5, 0x5fd30bbc, 0xab23236a, 0x5fc26038, 0xab105464, + 0x5fb1b104, 0xaafd88a4, + 0x5fa0fe1f, 0xaaeac02c, 0x5f90478a, 0xaad7fafb, 0x5f7f8d46, 0xaac53912, + 0x5f6ecf53, 0xaab27a73, + 0x5f5e0db3, 0xaa9fbf1e, 0x5f4d4865, 0xaa8d0713, 0x5f3c7f6b, 0xaa7a5253, + 0x5f2bb2c5, 0xaa67a0e0, + 0x5f1ae274, 0xaa54f2ba, 0x5f0a0e77, 0xaa4247e1, 0x5ef936d1, 0xaa2fa056, + 0x5ee85b82, 0xaa1cfc1a, + 0x5ed77c8a, 0xaa0a5b2e, 0x5ec699e9, 0xa9f7bd92, 0x5eb5b3a2, 0xa9e52347, + 0x5ea4c9b3, 0xa9d28c4e, + 0x5e93dc1f, 0xa9bff8a8, 0x5e82eae5, 0xa9ad6855, 0x5e71f606, 0xa99adb56, + 0x5e60fd84, 0xa98851ac, + 0x5e50015d, 0xa975cb57, 0x5e3f0194, 0xa9634858, 0x5e2dfe29, 0xa950c8b0, + 0x5e1cf71c, 0xa93e4c5f, + 0x5e0bec6e, 0xa92bd367, 0x5dfade20, 0xa9195dc7, 0x5de9cc33, 0xa906eb82, + 0x5dd8b6a7, 0xa8f47c97, + 0x5dc79d7c, 0xa8e21106, 0x5db680b4, 0xa8cfa8d2, 0x5da5604f, 0xa8bd43fa, + 0x5d943c4e, 0xa8aae280, + 0x5d8314b1, 0xa8988463, 0x5d71e979, 0xa88629a5, 0x5d60baa7, 0xa873d246, + 0x5d4f883b, 0xa8617e48, + 0x5d3e5237, 0xa84f2daa, 0x5d2d189a, 0xa83ce06e, 0x5d1bdb65, 0xa82a9693, + 0x5d0a9a9a, 0xa818501c, + 0x5cf95638, 0xa8060d08, 0x5ce80e41, 0xa7f3cd59, 0x5cd6c2b5, 0xa7e1910f, + 0x5cc57394, 0xa7cf582a, + 0x5cb420e0, 0xa7bd22ac, 0x5ca2ca99, 0xa7aaf094, 0x5c9170bf, 0xa798c1e5, + 0x5c801354, 0xa786969e, + 0x5c6eb258, 0xa7746ec0, 0x5c5d4dcc, 0xa7624a4d, 0x5c4be5b0, 0xa7502943, + 0x5c3a7a05, 0xa73e0ba5, + 0x5c290acc, 0xa72bf174, 0x5c179806, 0xa719daae, 0x5c0621b2, 0xa707c757, + 0x5bf4a7d2, 0xa6f5b76d, + 0x5be32a67, 0xa6e3aaf2, 0x5bd1a971, 0xa6d1a1e7, 0x5bc024f0, 0xa6bf9c4b, + 0x5bae9ce7, 0xa6ad9a21, + 0x5b9d1154, 0xa69b9b68, 0x5b8b8239, 0xa689a022, 0x5b79ef96, 0xa677a84e, + 0x5b68596d, 0xa665b3ee, + 0x5b56bfbd, 0xa653c303, 0x5b452288, 0xa641d58c, 0x5b3381ce, 0xa62feb8b, + 0x5b21dd90, 0xa61e0501, + 0x5b1035cf, 0xa60c21ee, 0x5afe8a8b, 0xa5fa4252, 0x5aecdbc5, 0xa5e8662f, + 0x5adb297d, 0xa5d68d85, + 0x5ac973b5, 0xa5c4b855, 0x5ab7ba6c, 0xa5b2e6a0, 0x5aa5fda5, 0xa5a11866, + 0x5a943d5e, 0xa58f4da8, + 0x5a82799a, 0xa57d8666, 0x5a70b258, 0xa56bc2a2, 0x5a5ee79a, 0xa55a025b, + 0x5a4d1960, 0xa5484594, + 0x5a3b47ab, 0xa5368c4b, 0x5a29727b, 0xa524d683, 0x5a1799d1, 0xa513243b, + 0x5a05bdae, 0xa5017575, + 0x59f3de12, 0xa4efca31, 0x59e1faff, 0xa4de2270, 0x59d01475, 0xa4cc7e32, + 0x59be2a74, 0xa4badd78, + 0x59ac3cfd, 0xa4a94043, 0x599a4c12, 0xa497a693, 0x598857b2, 0xa486106a, + 0x59765fde, 0xa4747dc7, + 0x59646498, 0xa462eeac, 0x595265df, 0xa4516319, 0x594063b5, 0xa43fdb10, + 0x592e5e19, 0xa42e568f, + 0x591c550e, 0xa41cd599, 0x590a4893, 0xa40b582e, 0x58f838a9, 0xa3f9de4e, + 0x58e62552, 0xa3e867fa, + 0x58d40e8c, 0xa3d6f534, 0x58c1f45b, 0xa3c585fb, 0x58afd6bd, 0xa3b41a50, + 0x589db5b3, 0xa3a2b234, + 0x588b9140, 0xa3914da8, 0x58796962, 0xa37fecac, 0x58673e1b, 0xa36e8f41, + 0x58550f6c, 0xa35d3567, + 0x5842dd54, 0xa34bdf20, 0x5830a7d6, 0xa33a8c6c, 0x581e6ef1, 0xa3293d4b, + 0x580c32a7, 0xa317f1bf, + 0x57f9f2f8, 0xa306a9c8, 0x57e7afe4, 0xa2f56566, 0x57d5696d, 0xa2e4249b, + 0x57c31f92, 0xa2d2e766, + 0x57b0d256, 0xa2c1adc9, 0x579e81b8, 0xa2b077c5, 0x578c2dba, 0xa29f4559, + 0x5779d65b, 0xa28e1687, + 0x57677b9d, 0xa27ceb4f, 0x57551d80, 0xa26bc3b2, 0x5742bc06, 0xa25a9fb1, + 0x5730572e, 0xa2497f4c, + 0x571deefa, 0xa2386284, 0x570b8369, 0xa2274959, 0x56f9147e, 0xa21633cd, + 0x56e6a239, 0xa20521e0, + 0x56d42c99, 0xa1f41392, 0x56c1b3a1, 0xa1e308e4, 0x56af3750, 0xa1d201d7, + 0x569cb7a8, 0xa1c0fe6c, + 0x568a34a9, 0xa1affea3, 0x5677ae54, 0xa19f027c, 0x566524aa, 0xa18e09fa, + 0x565297ab, 0xa17d151b, + 0x56400758, 0xa16c23e1, 0x562d73b2, 0xa15b364d, 0x561adcb9, 0xa14a4c5e, + 0x5608426e, 0xa1396617, + 0x55f5a4d2, 0xa1288376, 0x55e303e6, 0xa117a47e, 0x55d05faa, 0xa106c92f, + 0x55bdb81f, 0xa0f5f189, + 0x55ab0d46, 0xa0e51d8c, 0x55985f20, 0xa0d44d3b, 0x5585adad, 0xa0c38095, + 0x5572f8ed, 0xa0b2b79b, + 0x556040e2, 0xa0a1f24d, 0x554d858d, 0xa09130ad, 0x553ac6ee, 0xa08072ba, + 0x55280505, 0xa06fb876, + 0x55153fd4, 0xa05f01e1, 0x5502775c, 0xa04e4efc, 0x54efab9c, 0xa03d9fc8, + 0x54dcdc96, 0xa02cf444, + 0x54ca0a4b, 0xa01c4c73, 0x54b734ba, 0xa00ba853, 0x54a45be6, 0x9ffb07e7, + 0x54917fce, 0x9fea6b2f, + 0x547ea073, 0x9fd9d22a, 0x546bbdd7, 0x9fc93cdb, 0x5458d7f9, 0x9fb8ab41, + 0x5445eedb, 0x9fa81d5e, + 0x5433027d, 0x9f979331, 0x542012e1, 0x9f870cbc, 0x540d2005, 0x9f7689ff, + 0x53fa29ed, 0x9f660afb, + 0x53e73097, 0x9f558fb0, 0x53d43406, 0x9f45181f, 0x53c13439, 0x9f34a449, + 0x53ae3131, 0x9f24342f, + 0x539b2af0, 0x9f13c7d0, 0x53882175, 0x9f035f2e, 0x537514c2, 0x9ef2fa49, + 0x536204d7, 0x9ee29922, + 0x534ef1b5, 0x9ed23bb9, 0x533bdb5d, 0x9ec1e210, 0x5328c1d0, 0x9eb18c26, + 0x5315a50e, 0x9ea139fd, + 0x53028518, 0x9e90eb94, 0x52ef61ee, 0x9e80a0ee, 0x52dc3b92, 0x9e705a09, + 0x52c91204, 0x9e6016e8, + 0x52b5e546, 0x9e4fd78a, 0x52a2b556, 0x9e3f9bf0, 0x528f8238, 0x9e2f641b, + 0x527c4bea, 0x9e1f300b, + 0x5269126e, 0x9e0effc1, 0x5255d5c5, 0x9dfed33e, 0x524295f0, 0x9deeaa82, + 0x522f52ee, 0x9dde858e, + 0x521c0cc2, 0x9dce6463, 0x5208c36a, 0x9dbe4701, 0x51f576ea, 0x9dae2d68, + 0x51e22740, 0x9d9e179a, + 0x51ced46e, 0x9d8e0597, 0x51bb7e75, 0x9d7df75f, 0x51a82555, 0x9d6decf4, + 0x5194c910, 0x9d5de656, + 0x518169a5, 0x9d4de385, 0x516e0715, 0x9d3de482, 0x515aa162, 0x9d2de94d, + 0x5147388c, 0x9d1df1e9, + 0x5133cc94, 0x9d0dfe54, 0x51205d7b, 0x9cfe0e8f, 0x510ceb40, 0x9cee229c, + 0x50f975e6, 0x9cde3a7b, + 0x50e5fd6d, 0x9cce562c, 0x50d281d5, 0x9cbe75b0, 0x50bf031f, 0x9cae9907, + 0x50ab814d, 0x9c9ec033, + 0x5097fc5e, 0x9c8eeb34, 0x50847454, 0x9c7f1a0a, 0x5070e92f, 0x9c6f4cb6, + 0x505d5af1, 0x9c5f8339, + 0x5049c999, 0x9c4fbd93, 0x50363529, 0x9c3ffbc5, 0x50229da1, 0x9c303dcf, + 0x500f0302, 0x9c2083b3, + 0x4ffb654d, 0x9c10cd70, 0x4fe7c483, 0x9c011b08, 0x4fd420a4, 0x9bf16c7a, + 0x4fc079b1, 0x9be1c1c8, + 0x4faccfab, 0x9bd21af3, 0x4f992293, 0x9bc277fa, 0x4f857269, 0x9bb2d8de, + 0x4f71bf2e, 0x9ba33da0, + 0x4f5e08e3, 0x9b93a641, 0x4f4a4f89, 0x9b8412c1, 0x4f369320, 0x9b748320, + 0x4f22d3aa, 0x9b64f760, + 0x4f0f1126, 0x9b556f81, 0x4efb4b96, 0x9b45eb83, 0x4ee782fb, 0x9b366b68, + 0x4ed3b755, 0x9b26ef2f, + 0x4ebfe8a5, 0x9b1776da, 0x4eac16eb, 0x9b080268, 0x4e984229, 0x9af891db, + 0x4e846a60, 0x9ae92533, + 0x4e708f8f, 0x9ad9bc71, 0x4e5cb1b9, 0x9aca5795, 0x4e48d0dd, 0x9abaf6a1, + 0x4e34ecfc, 0x9aab9993, + 0x4e210617, 0x9a9c406e, 0x4e0d1c30, 0x9a8ceb31, 0x4df92f46, 0x9a7d99de, + 0x4de53f5a, 0x9a6e4c74, + 0x4dd14c6e, 0x9a5f02f5, 0x4dbd5682, 0x9a4fbd61, 0x4da95d96, 0x9a407bb9, + 0x4d9561ac, 0x9a313dfc, + 0x4d8162c4, 0x9a22042d, 0x4d6d60df, 0x9a12ce4b, 0x4d595bfe, 0x9a039c57, + 0x4d455422, 0x99f46e51, + 0x4d31494b, 0x99e5443b, 0x4d1d3b7a, 0x99d61e14, 0x4d092ab0, 0x99c6fbde, + 0x4cf516ee, 0x99b7dd99, + 0x4ce10034, 0x99a8c345, 0x4ccce684, 0x9999ace3, 0x4cb8c9dd, 0x998a9a74, + 0x4ca4aa41, 0x997b8bf8, + 0x4c9087b1, 0x996c816f, 0x4c7c622d, 0x995d7adc, 0x4c6839b7, 0x994e783d, + 0x4c540e4e, 0x993f7993, + 0x4c3fdff4, 0x99307ee0, 0x4c2baea9, 0x99218824, 0x4c177a6e, 0x9912955f, + 0x4c034345, 0x9903a691, + 0x4bef092d, 0x98f4bbbc, 0x4bdacc28, 0x98e5d4e0, 0x4bc68c36, 0x98d6f1fe, + 0x4bb24958, 0x98c81316, + 0x4b9e0390, 0x98b93828, 0x4b89badd, 0x98aa6136, 0x4b756f40, 0x989b8e40, + 0x4b6120bb, 0x988cbf46, + 0x4b4ccf4d, 0x987df449, 0x4b387af9, 0x986f2d4a, 0x4b2423be, 0x98606a49, + 0x4b0fc99d, 0x9851ab46, + 0x4afb6c98, 0x9842f043, 0x4ae70caf, 0x98343940, 0x4ad2a9e2, 0x9825863d, + 0x4abe4433, 0x9816d73b, + 0x4aa9dba2, 0x98082c3b, 0x4a957030, 0x97f9853d, 0x4a8101de, 0x97eae242, + 0x4a6c90ad, 0x97dc4349, + 0x4a581c9e, 0x97cda855, 0x4a43a5b0, 0x97bf1165, 0x4a2f2be6, 0x97b07e7a, + 0x4a1aaf3f, 0x97a1ef94, + 0x4a062fbd, 0x979364b5, 0x49f1ad61, 0x9784dddc, 0x49dd282a, 0x97765b0a, + 0x49c8a01b, 0x9767dc41, + 0x49b41533, 0x9759617f, 0x499f8774, 0x974aeac6, 0x498af6df, 0x973c7817, + 0x49766373, 0x972e0971, + 0x4961cd33, 0x971f9ed7, 0x494d341e, 0x97113847, 0x49389836, 0x9702d5c3, + 0x4923f97b, 0x96f4774b, + 0x490f57ee, 0x96e61ce0, 0x48fab391, 0x96d7c682, 0x48e60c62, 0x96c97432, + 0x48d16265, 0x96bb25f0, + 0x48bcb599, 0x96acdbbe, 0x48a805ff, 0x969e959b, 0x48935397, 0x96905388, + 0x487e9e64, 0x96821585, + 0x4869e665, 0x9673db94, 0x48552b9b, 0x9665a5b4, 0x48406e08, 0x965773e7, + 0x482badab, 0x9649462d, + 0x4816ea86, 0x963b1c86, 0x48022499, 0x962cf6f2, 0x47ed5be6, 0x961ed574, + 0x47d8906d, 0x9610b80a, + 0x47c3c22f, 0x96029eb6, 0x47aef12c, 0x95f48977, 0x479a1d67, 0x95e67850, + 0x478546de, 0x95d86b3f, + 0x47706d93, 0x95ca6247, 0x475b9188, 0x95bc5d66, 0x4746b2bc, 0x95ae5c9f, + 0x4731d131, 0x95a05ff0, + 0x471cece7, 0x9592675c, 0x470805df, 0x958472e2, 0x46f31c1a, 0x95768283, + 0x46de2f99, 0x9568963f, + 0x46c9405c, 0x955aae17, 0x46b44e65, 0x954cca0c, 0x469f59b4, 0x953eea1e, + 0x468a624a, 0x95310e4e, + 0x46756828, 0x9523369c, 0x46606b4e, 0x95156308, 0x464b6bbe, 0x95079394, + 0x46366978, 0x94f9c83f, + 0x4621647d, 0x94ec010b, 0x460c5cce, 0x94de3df8, 0x45f7526b, 0x94d07f05, + 0x45e24556, 0x94c2c435, + 0x45cd358f, 0x94b50d87, 0x45b82318, 0x94a75afd, 0x45a30df0, 0x9499ac95, + 0x458df619, 0x948c0252, + 0x4578db93, 0x947e5c33, 0x4563be60, 0x9470ba39, 0x454e9e80, 0x94631c65, + 0x45397bf4, 0x945582b7, + 0x452456bd, 0x9447ed2f, 0x450f2edb, 0x943a5bcf, 0x44fa0450, 0x942cce96, + 0x44e4d71c, 0x941f4585, + 0x44cfa740, 0x9411c09e, 0x44ba74bd, 0x94043fdf, 0x44a53f93, 0x93f6c34a, + 0x449007c4, 0x93e94adf, + 0x447acd50, 0x93dbd6a0, 0x44659039, 0x93ce668b, 0x4450507e, 0x93c0faa3, + 0x443b0e21, 0x93b392e6, + 0x4425c923, 0x93a62f57, 0x44108184, 0x9398cff5, 0x43fb3746, 0x938b74c1, + 0x43e5ea68, 0x937e1dbb, + 0x43d09aed, 0x9370cae4, 0x43bb48d4, 0x93637c3d, 0x43a5f41e, 0x935631c5, + 0x43909ccd, 0x9348eb7e, + 0x437b42e1, 0x933ba968, 0x4365e65b, 0x932e6b84, 0x4350873c, 0x932131d1, + 0x433b2585, 0x9313fc51, + 0x4325c135, 0x9306cb04, 0x43105a50, 0x92f99deb, 0x42faf0d4, 0x92ec7505, + 0x42e584c3, 0x92df5054, + 0x42d0161e, 0x92d22fd9, 0x42baa4e6, 0x92c51392, 0x42a5311b, 0x92b7fb82, + 0x428fbabe, 0x92aae7a8, + 0x427a41d0, 0x929dd806, 0x4264c653, 0x9290cc9b, 0x424f4845, 0x9283c568, + 0x4239c7aa, 0x9276c26d, + 0x42244481, 0x9269c3ac, 0x420ebecb, 0x925cc924, 0x41f93689, 0x924fd2d7, + 0x41e3abbc, 0x9242e0c4, + 0x41ce1e65, 0x9235f2ec, 0x41b88e84, 0x9229094f, 0x41a2fc1a, 0x921c23ef, + 0x418d6729, 0x920f42cb, + 0x4177cfb1, 0x920265e4, 0x416235b2, 0x91f58d3b, 0x414c992f, 0x91e8b8d0, + 0x4136fa27, 0x91dbe8a4, + 0x4121589b, 0x91cf1cb6, 0x410bb48c, 0x91c25508, 0x40f60dfb, 0x91b5919a, + 0x40e064ea, 0x91a8d26d, + 0x40cab958, 0x919c1781, 0x40b50b46, 0x918f60d6, 0x409f5ab6, 0x9182ae6d, + 0x4089a7a8, 0x91760047, + 0x4073f21d, 0x91695663, 0x405e3a16, 0x915cb0c3, 0x40487f94, 0x91500f67, + 0x4032c297, 0x91437250, + 0x401d0321, 0x9136d97d, 0x40074132, 0x912a44f0, 0x3ff17cca, 0x911db4a9, + 0x3fdbb5ec, 0x911128a8, + 0x3fc5ec98, 0x9104a0ee, 0x3fb020ce, 0x90f81d7b, 0x3f9a5290, 0x90eb9e50, + 0x3f8481dd, 0x90df236e, + 0x3f6eaeb8, 0x90d2acd4, 0x3f58d921, 0x90c63a83, 0x3f430119, 0x90b9cc7d, + 0x3f2d26a0, 0x90ad62c0, + 0x3f1749b8, 0x90a0fd4e, 0x3f016a61, 0x90949c28, 0x3eeb889c, 0x90883f4d, + 0x3ed5a46b, 0x907be6be, + 0x3ebfbdcd, 0x906f927c, 0x3ea9d4c3, 0x90634287, 0x3e93e950, 0x9056f6df, + 0x3e7dfb73, 0x904aaf86, + 0x3e680b2c, 0x903e6c7b, 0x3e52187f, 0x90322dbf, 0x3e3c2369, 0x9025f352, + 0x3e262bee, 0x9019bd36, + 0x3e10320d, 0x900d8b69, 0x3dfa35c8, 0x90015dee, 0x3de4371f, 0x8ff534c4, + 0x3dce3614, 0x8fe90fec, + 0x3db832a6, 0x8fdcef66, 0x3da22cd7, 0x8fd0d333, 0x3d8c24a8, 0x8fc4bb53, + 0x3d761a19, 0x8fb8a7c7, + 0x3d600d2c, 0x8fac988f, 0x3d49fde1, 0x8fa08dab, 0x3d33ec39, 0x8f94871d, + 0x3d1dd835, 0x8f8884e4, + 0x3d07c1d6, 0x8f7c8701, 0x3cf1a91c, 0x8f708d75, 0x3cdb8e09, 0x8f649840, + 0x3cc5709e, 0x8f58a761, + 0x3caf50da, 0x8f4cbadb, 0x3c992ec0, 0x8f40d2ad, 0x3c830a50, 0x8f34eed8, + 0x3c6ce38a, 0x8f290f5c, + 0x3c56ba70, 0x8f1d343a, 0x3c408f03, 0x8f115d72, 0x3c2a6142, 0x8f058b04, + 0x3c143130, 0x8ef9bcf2, + 0x3bfdfecd, 0x8eedf33b, 0x3be7ca1a, 0x8ee22de0, 0x3bd19318, 0x8ed66ce1, + 0x3bbb59c7, 0x8ecab040, + 0x3ba51e29, 0x8ebef7fb, 0x3b8ee03e, 0x8eb34415, 0x3b78a007, 0x8ea7948c, + 0x3b625d86, 0x8e9be963, + 0x3b4c18ba, 0x8e904298, 0x3b35d1a5, 0x8e84a02d, 0x3b1f8848, 0x8e790222, + 0x3b093ca3, 0x8e6d6877, + 0x3af2eeb7, 0x8e61d32e, 0x3adc9e86, 0x8e564246, 0x3ac64c0f, 0x8e4ab5bf, + 0x3aaff755, 0x8e3f2d9b, + 0x3a99a057, 0x8e33a9da, 0x3a834717, 0x8e282a7b, 0x3a6ceb96, 0x8e1caf80, + 0x3a568dd4, 0x8e1138ea, + 0x3a402dd2, 0x8e05c6b7, 0x3a29cb91, 0x8dfa58ea, 0x3a136712, 0x8deeef82, + 0x39fd0056, 0x8de38a80, + 0x39e6975e, 0x8dd829e4, 0x39d02c2a, 0x8dcccdaf, 0x39b9bebc, 0x8dc175e0, + 0x39a34f13, 0x8db6227a, + 0x398cdd32, 0x8daad37b, 0x39766919, 0x8d9f88e5, 0x395ff2c9, 0x8d9442b8, + 0x39497a43, 0x8d8900f3, + 0x3932ff87, 0x8d7dc399, 0x391c8297, 0x8d728aa9, 0x39060373, 0x8d675623, + 0x38ef821c, 0x8d5c2609, + 0x38d8fe93, 0x8d50fa59, 0x38c278d9, 0x8d45d316, 0x38abf0ef, 0x8d3ab03f, + 0x389566d6, 0x8d2f91d5, + 0x387eda8e, 0x8d2477d8, 0x38684c19, 0x8d196249, 0x3851bb77, 0x8d0e5127, + 0x383b28a9, 0x8d034474, + 0x382493b0, 0x8cf83c30, 0x380dfc8d, 0x8ced385b, 0x37f76341, 0x8ce238f6, + 0x37e0c7cc, 0x8cd73e01, + 0x37ca2a30, 0x8ccc477d, 0x37b38a6d, 0x8cc1556a, 0x379ce885, 0x8cb667c8, + 0x37864477, 0x8cab7e98, + 0x376f9e46, 0x8ca099da, 0x3758f5f2, 0x8c95b98f, 0x37424b7b, 0x8c8addb7, + 0x372b9ee3, 0x8c800652, + 0x3714f02a, 0x8c753362, 0x36fe3f52, 0x8c6a64e5, 0x36e78c5b, 0x8c5f9ade, + 0x36d0d746, 0x8c54d54c, + 0x36ba2014, 0x8c4a142f, 0x36a366c6, 0x8c3f5788, 0x368cab5c, 0x8c349f58, + 0x3675edd9, 0x8c29eb9f, + 0x365f2e3b, 0x8c1f3c5d, 0x36486c86, 0x8c149192, 0x3631a8b8, 0x8c09eb40, + 0x361ae2d3, 0x8bff4966, + 0x36041ad9, 0x8bf4ac05, 0x35ed50c9, 0x8bea131e, 0x35d684a6, 0x8bdf7eb0, + 0x35bfb66e, 0x8bd4eebc, + 0x35a8e625, 0x8bca6343, 0x359213c9, 0x8bbfdc44, 0x357b3f5d, 0x8bb559c1, + 0x356468e2, 0x8baadbba, + 0x354d9057, 0x8ba0622f, 0x3536b5be, 0x8b95ed21, 0x351fd918, 0x8b8b7c8f, + 0x3508fa66, 0x8b81107b, + 0x34f219a8, 0x8b76a8e4, 0x34db36df, 0x8b6c45cc, 0x34c4520d, 0x8b61e733, + 0x34ad6b32, 0x8b578d18, + 0x34968250, 0x8b4d377c, 0x347f9766, 0x8b42e661, 0x3468aa76, 0x8b3899c6, + 0x3451bb81, 0x8b2e51ab, + 0x343aca87, 0x8b240e11, 0x3423d78a, 0x8b19cef8, 0x340ce28b, 0x8b0f9462, + 0x33f5eb89, 0x8b055e4d, + 0x33def287, 0x8afb2cbb, 0x33c7f785, 0x8af0ffac, 0x33b0fa84, 0x8ae6d720, + 0x3399fb85, 0x8adcb318, + 0x3382fa88, 0x8ad29394, 0x336bf78f, 0x8ac87894, 0x3354f29b, 0x8abe6219, + 0x333debab, 0x8ab45024, + 0x3326e2c3, 0x8aaa42b4, 0x330fd7e1, 0x8aa039cb, 0x32f8cb07, 0x8a963567, + 0x32e1bc36, 0x8a8c358b, + 0x32caab6f, 0x8a823a36, 0x32b398b3, 0x8a784368, 0x329c8402, 0x8a6e5123, + 0x32856d5e, 0x8a646365, + 0x326e54c7, 0x8a5a7a31, 0x32573a3f, 0x8a509585, 0x32401dc6, 0x8a46b564, + 0x3228ff5c, 0x8a3cd9cc, + 0x3211df04, 0x8a3302be, 0x31fabcbd, 0x8a29303b, 0x31e39889, 0x8a1f6243, + 0x31cc7269, 0x8a1598d6, + 0x31b54a5e, 0x8a0bd3f5, 0x319e2067, 0x8a0213a0, 0x3186f487, 0x89f857d8, + 0x316fc6be, 0x89eea09d, + 0x3158970e, 0x89e4edef, 0x31416576, 0x89db3fcf, 0x312a31f8, 0x89d1963c, + 0x3112fc95, 0x89c7f138, + 0x30fbc54d, 0x89be50c3, 0x30e48c22, 0x89b4b4dd, 0x30cd5115, 0x89ab1d87, + 0x30b61426, 0x89a18ac0, + 0x309ed556, 0x8997fc8a, 0x308794a6, 0x898e72e4, 0x30705217, 0x8984edcf, + 0x30590dab, 0x897b6d4c, + 0x3041c761, 0x8971f15a, 0x302a7f3a, 0x896879fb, 0x30133539, 0x895f072e, + 0x2ffbe95d, 0x895598f3, + 0x2fe49ba7, 0x894c2f4c, 0x2fcd4c19, 0x8942ca39, 0x2fb5fab2, 0x893969b9, + 0x2f9ea775, 0x89300dce, + 0x2f875262, 0x8926b677, 0x2f6ffb7a, 0x891d63b5, 0x2f58a2be, 0x89141589, + 0x2f41482e, 0x890acbf2, + 0x2f29ebcc, 0x890186f2, 0x2f128d99, 0x88f84687, 0x2efb2d95, 0x88ef0ab4, + 0x2ee3cbc1, 0x88e5d378, + 0x2ecc681e, 0x88dca0d3, 0x2eb502ae, 0x88d372c6, 0x2e9d9b70, 0x88ca4951, + 0x2e863267, 0x88c12475, + 0x2e6ec792, 0x88b80432, 0x2e575af3, 0x88aee888, 0x2e3fec8b, 0x88a5d177, + 0x2e287c5a, 0x889cbf01, + 0x2e110a62, 0x8893b125, 0x2df996a3, 0x888aa7e3, 0x2de2211e, 0x8881a33d, + 0x2dcaa9d5, 0x8878a332, + 0x2db330c7, 0x886fa7c2, 0x2d9bb5f6, 0x8866b0ef, 0x2d843964, 0x885dbeb8, + 0x2d6cbb10, 0x8854d11e, + 0x2d553afc, 0x884be821, 0x2d3db928, 0x884303c1, 0x2d263596, 0x883a23ff, + 0x2d0eb046, 0x883148db, + 0x2cf72939, 0x88287256, 0x2cdfa071, 0x881fa06f, 0x2cc815ee, 0x8816d327, + 0x2cb089b1, 0x880e0a7f, + 0x2c98fbba, 0x88054677, 0x2c816c0c, 0x87fc870f, 0x2c69daa6, 0x87f3cc48, + 0x2c52478a, 0x87eb1621, + 0x2c3ab2b9, 0x87e2649b, 0x2c231c33, 0x87d9b7b7, 0x2c0b83fa, 0x87d10f75, + 0x2bf3ea0d, 0x87c86bd5, + 0x2bdc4e6f, 0x87bfccd7, 0x2bc4b120, 0x87b7327d, 0x2bad1221, 0x87ae9cc5, + 0x2b957173, 0x87a60bb1, + 0x2b7dcf17, 0x879d7f41, 0x2b662b0e, 0x8794f774, 0x2b4e8558, 0x878c744d, + 0x2b36ddf7, 0x8783f5ca, + 0x2b1f34eb, 0x877b7bec, 0x2b078a36, 0x877306b4, 0x2aefddd8, 0x876a9621, + 0x2ad82fd2, 0x87622a35, + 0x2ac08026, 0x8759c2ef, 0x2aa8ced3, 0x87516050, 0x2a911bdc, 0x87490258, + 0x2a796740, 0x8740a907, + 0x2a61b101, 0x8738545e, 0x2a49f920, 0x8730045d, 0x2a323f9e, 0x8727b905, + 0x2a1a847b, 0x871f7255, + 0x2a02c7b8, 0x8717304e, 0x29eb0957, 0x870ef2f1, 0x29d34958, 0x8706ba3d, + 0x29bb87bc, 0x86fe8633, + 0x29a3c485, 0x86f656d3, 0x298bffb2, 0x86ee2c1e, 0x29743946, 0x86e60614, + 0x295c7140, 0x86dde4b5, + 0x2944a7a2, 0x86d5c802, 0x292cdc6d, 0x86cdaffa, 0x29150fa1, 0x86c59c9f, + 0x28fd4140, 0x86bd8df0, + 0x28e5714b, 0x86b583ee, 0x28cd9fc1, 0x86ad7e99, 0x28b5cca5, 0x86a57df2, + 0x289df7f8, 0x869d81f8, + 0x288621b9, 0x86958aac, 0x286e49ea, 0x868d980e, 0x2856708d, 0x8685aa20, + 0x283e95a1, 0x867dc0e0, + 0x2826b928, 0x8675dc4f, 0x280edb23, 0x866dfc6e, 0x27f6fb92, 0x8666213c, + 0x27df1a77, 0x865e4abb, + 0x27c737d3, 0x865678eb, 0x27af53a6, 0x864eabcb, 0x27976df1, 0x8646e35c, + 0x277f86b5, 0x863f1f9e, + 0x27679df4, 0x86376092, 0x274fb3ae, 0x862fa638, 0x2737c7e3, 0x8627f091, + 0x271fda96, 0x86203f9c, + 0x2707ebc7, 0x86189359, 0x26effb76, 0x8610ebca, 0x26d809a5, 0x860948ef, + 0x26c01655, 0x8601aac7, + 0x26a82186, 0x85fa1153, 0x26902b39, 0x85f27c93, 0x26783370, 0x85eaec88, + 0x26603a2c, 0x85e36132, + 0x26483f6c, 0x85dbda91, 0x26304333, 0x85d458a6, 0x26184581, 0x85ccdb70, + 0x26004657, 0x85c562f1, + 0x25e845b6, 0x85bdef28, 0x25d0439f, 0x85b68015, 0x25b84012, 0x85af15b9, + 0x25a03b11, 0x85a7b015, + 0x2588349d, 0x85a04f28, 0x25702cb7, 0x8598f2f3, 0x2558235f, 0x85919b76, + 0x25401896, 0x858a48b1, + 0x25280c5e, 0x8582faa5, 0x250ffeb7, 0x857bb152, 0x24f7efa2, 0x85746cb8, + 0x24dfdf20, 0x856d2cd7, + 0x24c7cd33, 0x8565f1b0, 0x24afb9da, 0x855ebb44, 0x2497a517, 0x85578991, + 0x247f8eec, 0x85505c99, + 0x24677758, 0x8549345c, 0x244f5e5c, 0x854210db, 0x243743fa, 0x853af214, + 0x241f2833, 0x8533d809, + 0x24070b08, 0x852cc2bb, 0x23eeec78, 0x8525b228, 0x23d6cc87, 0x851ea652, + 0x23beab33, 0x85179f39, + 0x23a6887f, 0x85109cdd, 0x238e646a, 0x85099f3e, 0x23763ef7, 0x8502a65c, + 0x235e1826, 0x84fbb239, + 0x2345eff8, 0x84f4c2d4, 0x232dc66d, 0x84edd82d, 0x23159b88, 0x84e6f244, + 0x22fd6f48, 0x84e0111b, + 0x22e541af, 0x84d934b1, 0x22cd12bd, 0x84d25d06, 0x22b4e274, 0x84cb8a1b, + 0x229cb0d5, 0x84c4bbf0, + 0x22847de0, 0x84bdf286, 0x226c4996, 0x84b72ddb, 0x225413f8, 0x84b06df2, + 0x223bdd08, 0x84a9b2ca, + 0x2223a4c5, 0x84a2fc62, 0x220b6b32, 0x849c4abd, 0x21f3304f, 0x84959dd9, + 0x21daf41d, 0x848ef5b7, + 0x21c2b69c, 0x84885258, 0x21aa77cf, 0x8481b3bb, 0x219237b5, 0x847b19e1, + 0x2179f64f, 0x847484ca, + 0x2161b3a0, 0x846df477, 0x21496fa7, 0x846768e7, 0x21312a65, 0x8460e21a, + 0x2118e3dc, 0x845a6012, + 0x21009c0c, 0x8453e2cf, 0x20e852f6, 0x844d6a50, 0x20d0089c, 0x8446f695, + 0x20b7bcfe, 0x844087a0, + 0x209f701c, 0x843a1d70, 0x208721f9, 0x8433b806, 0x206ed295, 0x842d5762, + 0x205681f1, 0x8426fb84, + 0x203e300d, 0x8420a46c, 0x2025dcec, 0x841a521a, 0x200d888d, 0x84140490, + 0x1ff532f2, 0x840dbbcc, + 0x1fdcdc1b, 0x840777d0, 0x1fc4840a, 0x8401389b, 0x1fac2abf, 0x83fafe2e, + 0x1f93d03c, 0x83f4c889, + 0x1f7b7481, 0x83ee97ad, 0x1f63178f, 0x83e86b99, 0x1f4ab968, 0x83e2444d, + 0x1f325a0b, 0x83dc21cb, + 0x1f19f97b, 0x83d60412, 0x1f0197b8, 0x83cfeb22, 0x1ee934c3, 0x83c9d6fc, + 0x1ed0d09d, 0x83c3c7a0, + 0x1eb86b46, 0x83bdbd0e, 0x1ea004c1, 0x83b7b746, 0x1e879d0d, 0x83b1b649, + 0x1e6f342c, 0x83abba17, + 0x1e56ca1e, 0x83a5c2b0, 0x1e3e5ee5, 0x839fd014, 0x1e25f282, 0x8399e244, + 0x1e0d84f5, 0x8393f940, + 0x1df5163f, 0x838e1507, 0x1ddca662, 0x8388359b, 0x1dc4355e, 0x83825afb, + 0x1dabc334, 0x837c8528, + 0x1d934fe5, 0x8376b422, 0x1d7adb73, 0x8370e7e9, 0x1d6265dd, 0x836b207d, + 0x1d49ef26, 0x83655ddf, + 0x1d31774d, 0x835fa00f, 0x1d18fe54, 0x8359e70d, 0x1d00843d, 0x835432d8, + 0x1ce80906, 0x834e8373, + 0x1ccf8cb3, 0x8348d8dc, 0x1cb70f43, 0x83433314, 0x1c9e90b8, 0x833d921b, + 0x1c861113, 0x8337f5f1, + 0x1c6d9053, 0x83325e97, 0x1c550e7c, 0x832ccc0d, 0x1c3c8b8c, 0x83273e52, + 0x1c240786, 0x8321b568, + 0x1c0b826a, 0x831c314e, 0x1bf2fc3a, 0x8316b205, 0x1bda74f6, 0x8311378d, + 0x1bc1ec9e, 0x830bc1e6, + 0x1ba96335, 0x83065110, 0x1b90d8bb, 0x8300e50b, 0x1b784d30, 0x82fb7dd8, + 0x1b5fc097, 0x82f61b77, + 0x1b4732ef, 0x82f0bde8, 0x1b2ea43a, 0x82eb652b, 0x1b161479, 0x82e61141, + 0x1afd83ad, 0x82e0c22a, + 0x1ae4f1d6, 0x82db77e5, 0x1acc5ef6, 0x82d63274, 0x1ab3cb0d, 0x82d0f1d5, + 0x1a9b361d, 0x82cbb60b, + 0x1a82a026, 0x82c67f14, 0x1a6a0929, 0x82c14cf1, 0x1a517128, 0x82bc1fa2, + 0x1a38d823, 0x82b6f727, + 0x1a203e1b, 0x82b1d381, 0x1a07a311, 0x82acb4b0, 0x19ef0707, 0x82a79ab3, + 0x19d669fc, 0x82a2858c, + 0x19bdcbf3, 0x829d753a, 0x19a52ceb, 0x829869be, 0x198c8ce7, 0x82936317, + 0x1973ebe6, 0x828e6146, + 0x195b49ea, 0x8289644b, 0x1942a6f3, 0x82846c26, 0x192a0304, 0x827f78d8, + 0x19115e1c, 0x827a8a61, + 0x18f8b83c, 0x8275a0c0, 0x18e01167, 0x8270bbf7, 0x18c7699b, 0x826bdc04, + 0x18aec0db, 0x826700e9, + 0x18961728, 0x82622aa6, 0x187d6c82, 0x825d593a, 0x1864c0ea, 0x82588ca7, + 0x184c1461, 0x8253c4eb, + 0x183366e9, 0x824f0208, 0x181ab881, 0x824a43fe, 0x1802092c, 0x82458acc, + 0x17e958ea, 0x8240d673, + 0x17d0a7bc, 0x823c26f3, 0x17b7f5a3, 0x82377c4c, 0x179f429f, 0x8232d67f, + 0x17868eb3, 0x822e358b, + 0x176dd9de, 0x82299971, 0x17552422, 0x82250232, 0x173c6d80, 0x82206fcc, + 0x1723b5f9, 0x821be240, + 0x170afd8d, 0x82175990, 0x16f2443e, 0x8212d5b9, 0x16d98a0c, 0x820e56be, + 0x16c0cef9, 0x8209dc9e, + 0x16a81305, 0x82056758, 0x168f5632, 0x8200f6ef, 0x1676987f, 0x81fc8b60, + 0x165dd9f0, 0x81f824ae, + 0x16451a83, 0x81f3c2d7, 0x162c5a3b, 0x81ef65dc, 0x16139918, 0x81eb0dbe, + 0x15fad71b, 0x81e6ba7c, + 0x15e21445, 0x81e26c16, 0x15c95097, 0x81de228d, 0x15b08c12, 0x81d9dde1, + 0x1597c6b7, 0x81d59e13, + 0x157f0086, 0x81d16321, 0x15663982, 0x81cd2d0c, 0x154d71aa, 0x81c8fbd6, + 0x1534a901, 0x81c4cf7d, + 0x151bdf86, 0x81c0a801, 0x1503153a, 0x81bc8564, 0x14ea4a1f, 0x81b867a5, + 0x14d17e36, 0x81b44ec4, + 0x14b8b17f, 0x81b03ac2, 0x149fe3fc, 0x81ac2b9e, 0x148715ae, 0x81a82159, + 0x146e4694, 0x81a41bf4, + 0x145576b1, 0x81a01b6d, 0x143ca605, 0x819c1fc5, 0x1423d492, 0x819828fd, + 0x140b0258, 0x81943715, + 0x13f22f58, 0x81904a0c, 0x13d95b93, 0x818c61e3, 0x13c0870a, 0x81887e9a, + 0x13a7b1bf, 0x8184a032, + 0x138edbb1, 0x8180c6a9, 0x137604e2, 0x817cf201, 0x135d2d53, 0x8179223a, + 0x13445505, 0x81755754, + 0x132b7bf9, 0x8171914e, 0x1312a230, 0x816dd02a, 0x12f9c7aa, 0x816a13e6, + 0x12e0ec6a, 0x81665c84, + 0x12c8106f, 0x8162aa04, 0x12af33ba, 0x815efc65, 0x1296564d, 0x815b53a8, + 0x127d7829, 0x8157afcd, + 0x1264994e, 0x815410d4, 0x124bb9be, 0x815076bd, 0x1232d979, 0x814ce188, + 0x1219f880, 0x81495136, + 0x120116d5, 0x8145c5c7, 0x11e83478, 0x81423f3a, 0x11cf516a, 0x813ebd90, + 0x11b66dad, 0x813b40ca, + 0x119d8941, 0x8137c8e6, 0x1184a427, 0x813455e6, 0x116bbe60, 0x8130e7c9, + 0x1152d7ed, 0x812d7e8f, + 0x1139f0cf, 0x812a1a3a, 0x11210907, 0x8126bac8, 0x11082096, 0x8123603a, + 0x10ef377d, 0x81200a90, + 0x10d64dbd, 0x811cb9ca, 0x10bd6356, 0x81196de9, 0x10a4784b, 0x811626ec, + 0x108b8c9b, 0x8112e4d4, + 0x1072a048, 0x810fa7a0, 0x1059b352, 0x810c6f52, 0x1040c5bb, 0x81093be8, + 0x1027d784, 0x81060d63, + 0x100ee8ad, 0x8102e3c4, 0xff5f938, 0x80ffbf0a, 0xfdd0926, 0x80fc9f35, + 0xfc41876, 0x80f98446, + 0xfab272b, 0x80f66e3c, 0xf923546, 0x80f35d19, 0xf7942c7, 0x80f050db, + 0xf604faf, 0x80ed4984, + 0xf475bff, 0x80ea4712, 0xf2e67b8, 0x80e74987, 0xf1572dc, 0x80e450e2, + 0xefc7d6b, 0x80e15d24, + 0xee38766, 0x80de6e4c, 0xeca90ce, 0x80db845b, 0xeb199a4, 0x80d89f51, + 0xe98a1e9, 0x80d5bf2e, + 0xe7fa99e, 0x80d2e3f2, 0xe66b0c3, 0x80d00d9d, 0xe4db75b, 0x80cd3c2f, + 0xe34bd66, 0x80ca6fa9, + 0xe1bc2e4, 0x80c7a80a, 0xe02c7d7, 0x80c4e553, 0xde9cc40, 0x80c22784, + 0xdd0d01f, 0x80bf6e9c, + 0xdb7d376, 0x80bcba9d, 0xd9ed646, 0x80ba0b85, 0xd85d88f, 0x80b76156, + 0xd6cda53, 0x80b4bc0e, + 0xd53db92, 0x80b21baf, 0xd3adc4e, 0x80af8039, 0xd21dc87, 0x80ace9ab, + 0xd08dc3f, 0x80aa5806, + 0xcefdb76, 0x80a7cb49, 0xcd6da2d, 0x80a54376, 0xcbdd865, 0x80a2c08b, + 0xca4d620, 0x80a04289, + 0xc8bd35e, 0x809dc971, 0xc72d020, 0x809b5541, 0xc59cc68, 0x8098e5fb, + 0xc40c835, 0x80967b9f, + 0xc27c389, 0x8094162c, 0xc0ebe66, 0x8091b5a2, 0xbf5b8cb, 0x808f5a02, + 0xbdcb2bb, 0x808d034c, + 0xbc3ac35, 0x808ab180, 0xbaaa53b, 0x8088649e, 0xb919dcf, 0x80861ca6, + 0xb7895f0, 0x8083d998, + 0xb5f8d9f, 0x80819b74, 0xb4684df, 0x807f623b, 0xb2d7baf, 0x807d2dec, + 0xb147211, 0x807afe87, + 0xafb6805, 0x8078d40d, 0xae25d8d, 0x8076ae7e, 0xac952aa, 0x80748dd9, + 0xab0475c, 0x8072721f, + 0xa973ba5, 0x80705b50, 0xa7e2f85, 0x806e496c, 0xa6522fe, 0x806c3c74, + 0xa4c1610, 0x806a3466, + 0xa3308bd, 0x80683143, 0xa19fb04, 0x8066330c, 0xa00ece8, 0x806439c0, + 0x9e7de6a, 0x80624560, + 0x9cecf89, 0x806055eb, 0x9b5c048, 0x805e6b62, 0x99cb0a7, 0x805c85c4, + 0x983a0a7, 0x805aa512, + 0x96a9049, 0x8058c94c, 0x9517f8f, 0x8056f272, 0x9386e78, 0x80552084, + 0x91f5d06, 0x80535381, + 0x9064b3a, 0x80518b6b, 0x8ed3916, 0x804fc841, 0x8d42699, 0x804e0a04, + 0x8bb13c5, 0x804c50b2, + 0x8a2009a, 0x804a9c4d, 0x888ed1b, 0x8048ecd5, 0x86fd947, 0x80474248, + 0x856c520, 0x80459ca9, + 0x83db0a7, 0x8043fbf6, 0x8249bdd, 0x80426030, 0x80b86c2, 0x8040c956, + 0x7f27157, 0x803f376a, + 0x7d95b9e, 0x803daa6a, 0x7c04598, 0x803c2257, 0x7a72f45, 0x803a9f31, + 0x78e18a7, 0x803920f8, + 0x77501be, 0x8037a7ac, 0x75bea8c, 0x8036334e, 0x742d311, 0x8034c3dd, + 0x729bb4e, 0x80335959, + 0x710a345, 0x8031f3c2, 0x6f78af6, 0x80309318, 0x6de7262, 0x802f375d, + 0x6c5598a, 0x802de08e, + 0x6ac406f, 0x802c8ead, 0x6932713, 0x802b41ba, 0x67a0d76, 0x8029f9b4, + 0x660f398, 0x8028b69c, + 0x647d97c, 0x80277872, 0x62ebf22, 0x80263f36, 0x615a48b, 0x80250ae7, + 0x5fc89b8, 0x8023db86, + 0x5e36ea9, 0x8022b114, 0x5ca5361, 0x80218b8f, 0x5b137df, 0x80206af8, + 0x5981c26, 0x801f4f4f, + 0x57f0035, 0x801e3895, 0x565e40d, 0x801d26c8, 0x54cc7b1, 0x801c19ea, + 0x533ab20, 0x801b11fa, + 0x51a8e5c, 0x801a0ef8, 0x5017165, 0x801910e4, 0x4e8543e, 0x801817bf, + 0x4cf36e5, 0x80172388, + 0x4b6195d, 0x80163440, 0x49cfba7, 0x801549e6, 0x483ddc3, 0x8014647b, + 0x46abfb3, 0x801383fe, + 0x451a177, 0x8012a86f, 0x4388310, 0x8011d1d0, 0x41f6480, 0x8011001f, + 0x40645c7, 0x8010335c, + 0x3ed26e6, 0x800f6b88, 0x3d407df, 0x800ea8a3, 0x3bae8b2, 0x800deaad, + 0x3a1c960, 0x800d31a5, + 0x388a9ea, 0x800c7d8c, 0x36f8a51, 0x800bce63, 0x3566a96, 0x800b2427, + 0x33d4abb, 0x800a7edb, + 0x3242abf, 0x8009de7e, 0x30b0aa4, 0x80094310, 0x2f1ea6c, 0x8008ac90, + 0x2d8ca16, 0x80081b00, + 0x2bfa9a4, 0x80078e5e, 0x2a68917, 0x800706ac, 0x28d6870, 0x800683e8, + 0x27447b0, 0x80060614, + 0x25b26d7, 0x80058d2f, 0x24205e8, 0x80051939, 0x228e4e2, 0x8004aa32, + 0x20fc3c6, 0x8004401a, + 0x1f6a297, 0x8003daf1, 0x1dd8154, 0x80037ab7, 0x1c45ffe, 0x80031f6d, + 0x1ab3e97, 0x8002c912, + 0x1921d20, 0x800277a6, 0x178fb99, 0x80022b29, 0x15fda03, 0x8001e39b, + 0x146b860, 0x8001a0fd, + 0x12d96b1, 0x8001634e, 0x11474f6, 0x80012a8e, 0xfb5330, 0x8000f6bd, + 0xe23160, 0x8000c7dc, + 0xc90f88, 0x80009dea, 0xafeda8, 0x800078e7, 0x96cbc1, 0x800058d4, 0x7da9d4, + 0x80003daf, + 0x6487e3, 0x8000277a, 0x4b65ee, 0x80001635, 0x3243f5, 0x800009df, 0x1921fb, + 0x80000278, +}; + +static const q31_t WeightsQ31_8192[16384] = { + 0x7fffffff, 0x0, 0x7fffffd9, 0xfff9b781, 0x7fffff62, 0xfff36f02, 0x7ffffe9d, + 0xffed2684, + 0x7ffffd88, 0xffe6de05, 0x7ffffc25, 0xffe09586, 0x7ffffa73, 0xffda4d08, + 0x7ffff872, 0xffd40489, + 0x7ffff621, 0xffcdbc0b, 0x7ffff382, 0xffc7738c, 0x7ffff094, 0xffc12b0e, + 0x7fffed57, 0xffbae290, + 0x7fffe9cb, 0xffb49a12, 0x7fffe5f0, 0xffae5195, 0x7fffe1c6, 0xffa80917, + 0x7fffdd4d, 0xffa1c09a, + 0x7fffd886, 0xff9b781d, 0x7fffd36f, 0xff952fa0, 0x7fffce09, 0xff8ee724, + 0x7fffc854, 0xff889ea7, + 0x7fffc251, 0xff82562c, 0x7fffbbfe, 0xff7c0db0, 0x7fffb55c, 0xff75c535, + 0x7fffae6c, 0xff6f7cba, + 0x7fffa72c, 0xff69343f, 0x7fff9f9e, 0xff62ebc5, 0x7fff97c1, 0xff5ca34b, + 0x7fff8f94, 0xff565ad1, + 0x7fff8719, 0xff501258, 0x7fff7e4f, 0xff49c9df, 0x7fff7536, 0xff438167, + 0x7fff6bcd, 0xff3d38ef, + 0x7fff6216, 0xff36f078, 0x7fff5810, 0xff30a801, 0x7fff4dbb, 0xff2a5f8b, + 0x7fff4317, 0xff241715, + 0x7fff3824, 0xff1dcea0, 0x7fff2ce2, 0xff17862b, 0x7fff2151, 0xff113db7, + 0x7fff1572, 0xff0af543, + 0x7fff0943, 0xff04acd0, 0x7ffefcc5, 0xfefe645e, 0x7ffeeff8, 0xfef81bec, + 0x7ffee2dd, 0xfef1d37b, + 0x7ffed572, 0xfeeb8b0a, 0x7ffec7b9, 0xfee5429a, 0x7ffeb9b0, 0xfedefa2b, + 0x7ffeab59, 0xfed8b1bd, + 0x7ffe9cb2, 0xfed2694f, 0x7ffe8dbd, 0xfecc20e2, 0x7ffe7e79, 0xfec5d876, + 0x7ffe6ee5, 0xfebf900a, + 0x7ffe5f03, 0xfeb947a0, 0x7ffe4ed2, 0xfeb2ff36, 0x7ffe3e52, 0xfeacb6cc, + 0x7ffe2d83, 0xfea66e64, + 0x7ffe1c65, 0xfea025fd, 0x7ffe0af8, 0xfe99dd96, 0x7ffdf93c, 0xfe939530, + 0x7ffde731, 0xfe8d4ccb, + 0x7ffdd4d7, 0xfe870467, 0x7ffdc22e, 0xfe80bc04, 0x7ffdaf37, 0xfe7a73a2, + 0x7ffd9bf0, 0xfe742b41, + 0x7ffd885a, 0xfe6de2e0, 0x7ffd7476, 0xfe679a81, 0x7ffd6042, 0xfe615223, + 0x7ffd4bc0, 0xfe5b09c5, + 0x7ffd36ee, 0xfe54c169, 0x7ffd21ce, 0xfe4e790d, 0x7ffd0c5f, 0xfe4830b3, + 0x7ffcf6a0, 0xfe41e85a, + 0x7ffce093, 0xfe3ba002, 0x7ffcca37, 0xfe3557ab, 0x7ffcb38c, 0xfe2f0f55, + 0x7ffc9c92, 0xfe28c700, + 0x7ffc8549, 0xfe227eac, 0x7ffc6db1, 0xfe1c365a, 0x7ffc55ca, 0xfe15ee09, + 0x7ffc3d94, 0xfe0fa5b8, + 0x7ffc250f, 0xfe095d69, 0x7ffc0c3b, 0xfe03151c, 0x7ffbf319, 0xfdfccccf, + 0x7ffbd9a7, 0xfdf68484, + 0x7ffbbfe6, 0xfdf03c3a, 0x7ffba5d7, 0xfde9f3f1, 0x7ffb8b78, 0xfde3aba9, + 0x7ffb70cb, 0xfddd6363, + 0x7ffb55ce, 0xfdd71b1e, 0x7ffb3a83, 0xfdd0d2db, 0x7ffb1ee9, 0xfdca8a99, + 0x7ffb0300, 0xfdc44258, + 0x7ffae6c7, 0xfdbdfa18, 0x7ffaca40, 0xfdb7b1da, 0x7ffaad6a, 0xfdb1699e, + 0x7ffa9045, 0xfdab2162, + 0x7ffa72d1, 0xfda4d929, 0x7ffa550e, 0xfd9e90f0, 0x7ffa36fc, 0xfd9848b9, + 0x7ffa189c, 0xfd920084, + 0x7ff9f9ec, 0xfd8bb850, 0x7ff9daed, 0xfd85701e, 0x7ff9bba0, 0xfd7f27ed, + 0x7ff99c03, 0xfd78dfbd, + 0x7ff97c18, 0xfd729790, 0x7ff95bdd, 0xfd6c4f64, 0x7ff93b54, 0xfd660739, + 0x7ff91a7b, 0xfd5fbf10, + 0x7ff8f954, 0xfd5976e9, 0x7ff8d7de, 0xfd532ec3, 0x7ff8b619, 0xfd4ce69f, + 0x7ff89405, 0xfd469e7c, + 0x7ff871a2, 0xfd40565c, 0x7ff84ef0, 0xfd3a0e3d, 0x7ff82bef, 0xfd33c61f, + 0x7ff8089f, 0xfd2d7e04, + 0x7ff7e500, 0xfd2735ea, 0x7ff7c113, 0xfd20edd2, 0x7ff79cd6, 0xfd1aa5bc, + 0x7ff7784a, 0xfd145da7, + 0x7ff75370, 0xfd0e1594, 0x7ff72e46, 0xfd07cd83, 0x7ff708ce, 0xfd018574, + 0x7ff6e307, 0xfcfb3d67, + 0x7ff6bcf0, 0xfcf4f55c, 0x7ff6968b, 0xfceead52, 0x7ff66fd7, 0xfce8654b, + 0x7ff648d4, 0xfce21d45, + 0x7ff62182, 0xfcdbd541, 0x7ff5f9e1, 0xfcd58d3f, 0x7ff5d1f1, 0xfccf453f, + 0x7ff5a9b2, 0xfcc8fd41, + 0x7ff58125, 0xfcc2b545, 0x7ff55848, 0xfcbc6d4c, 0x7ff52f1d, 0xfcb62554, + 0x7ff505a2, 0xfcafdd5e, + 0x7ff4dbd9, 0xfca9956a, 0x7ff4b1c0, 0xfca34d78, 0x7ff48759, 0xfc9d0588, + 0x7ff45ca3, 0xfc96bd9b, + 0x7ff4319d, 0xfc9075af, 0x7ff40649, 0xfc8a2dc6, 0x7ff3daa6, 0xfc83e5de, + 0x7ff3aeb4, 0xfc7d9df9, + 0x7ff38274, 0xfc775616, 0x7ff355e4, 0xfc710e36, 0x7ff32905, 0xfc6ac657, + 0x7ff2fbd7, 0xfc647e7b, + 0x7ff2ce5b, 0xfc5e36a0, 0x7ff2a08f, 0xfc57eec9, 0x7ff27275, 0xfc51a6f3, + 0x7ff2440b, 0xfc4b5f20, + 0x7ff21553, 0xfc45174e, 0x7ff1e64c, 0xfc3ecf80, 0x7ff1b6f6, 0xfc3887b3, + 0x7ff18751, 0xfc323fe9, + 0x7ff1575d, 0xfc2bf821, 0x7ff1271a, 0xfc25b05c, 0x7ff0f688, 0xfc1f6899, + 0x7ff0c5a7, 0xfc1920d8, + 0x7ff09478, 0xfc12d91a, 0x7ff062f9, 0xfc0c915e, 0x7ff0312c, 0xfc0649a5, + 0x7fefff0f, 0xfc0001ee, + 0x7fefcca4, 0xfbf9ba39, 0x7fef99ea, 0xfbf37287, 0x7fef66e1, 0xfbed2ad8, + 0x7fef3388, 0xfbe6e32b, + 0x7feeffe1, 0xfbe09b80, 0x7feecbec, 0xfbda53d8, 0x7fee97a7, 0xfbd40c33, + 0x7fee6313, 0xfbcdc490, + 0x7fee2e30, 0xfbc77cf0, 0x7fedf8ff, 0xfbc13552, 0x7fedc37e, 0xfbbaedb7, + 0x7fed8daf, 0xfbb4a61f, + 0x7fed5791, 0xfbae5e89, 0x7fed2123, 0xfba816f6, 0x7fecea67, 0xfba1cf66, + 0x7fecb35c, 0xfb9b87d8, + 0x7fec7c02, 0xfb95404d, 0x7fec4459, 0xfb8ef8c5, 0x7fec0c62, 0xfb88b13f, + 0x7febd41b, 0xfb8269bd, + 0x7feb9b85, 0xfb7c223d, 0x7feb62a1, 0xfb75dac0, 0x7feb296d, 0xfb6f9345, + 0x7feaefeb, 0xfb694bce, + 0x7feab61a, 0xfb630459, 0x7fea7bfa, 0xfb5cbce7, 0x7fea418b, 0xfb567578, + 0x7fea06cd, 0xfb502e0c, + 0x7fe9cbc0, 0xfb49e6a3, 0x7fe99064, 0xfb439f3c, 0x7fe954ba, 0xfb3d57d9, + 0x7fe918c0, 0xfb371078, + 0x7fe8dc78, 0xfb30c91b, 0x7fe89fe0, 0xfb2a81c0, 0x7fe862fa, 0xfb243a69, + 0x7fe825c5, 0xfb1df314, + 0x7fe7e841, 0xfb17abc2, 0x7fe7aa6e, 0xfb116474, 0x7fe76c4c, 0xfb0b1d28, + 0x7fe72ddb, 0xfb04d5e0, + 0x7fe6ef1c, 0xfafe8e9b, 0x7fe6b00d, 0xfaf84758, 0x7fe670b0, 0xfaf20019, + 0x7fe63103, 0xfaebb8dd, + 0x7fe5f108, 0xfae571a4, 0x7fe5b0be, 0xfadf2a6e, 0x7fe57025, 0xfad8e33c, + 0x7fe52f3d, 0xfad29c0c, + 0x7fe4ee06, 0xfacc54e0, 0x7fe4ac81, 0xfac60db7, 0x7fe46aac, 0xfabfc691, + 0x7fe42889, 0xfab97f6e, + 0x7fe3e616, 0xfab3384f, 0x7fe3a355, 0xfaacf133, 0x7fe36045, 0xfaa6aa1a, + 0x7fe31ce6, 0xfaa06305, + 0x7fe2d938, 0xfa9a1bf3, 0x7fe2953b, 0xfa93d4e4, 0x7fe250ef, 0xfa8d8dd8, + 0x7fe20c55, 0xfa8746d0, + 0x7fe1c76b, 0xfa80ffcb, 0x7fe18233, 0xfa7ab8ca, 0x7fe13cac, 0xfa7471cc, + 0x7fe0f6d6, 0xfa6e2ad1, + 0x7fe0b0b1, 0xfa67e3da, 0x7fe06a3d, 0xfa619ce7, 0x7fe0237a, 0xfa5b55f7, + 0x7fdfdc69, 0xfa550f0a, + 0x7fdf9508, 0xfa4ec821, 0x7fdf4d59, 0xfa48813b, 0x7fdf055a, 0xfa423a59, + 0x7fdebd0d, 0xfa3bf37a, + 0x7fde7471, 0xfa35ac9f, 0x7fde2b86, 0xfa2f65c8, 0x7fdde24d, 0xfa291ef4, + 0x7fdd98c4, 0xfa22d823, + 0x7fdd4eec, 0xfa1c9157, 0x7fdd04c6, 0xfa164a8e, 0x7fdcba51, 0xfa1003c8, + 0x7fdc6f8d, 0xfa09bd06, + 0x7fdc247a, 0xfa037648, 0x7fdbd918, 0xf9fd2f8e, 0x7fdb8d67, 0xf9f6e8d7, + 0x7fdb4167, 0xf9f0a224, + 0x7fdaf519, 0xf9ea5b75, 0x7fdaa87c, 0xf9e414ca, 0x7fda5b8f, 0xf9ddce22, + 0x7fda0e54, 0xf9d7877e, + 0x7fd9c0ca, 0xf9d140de, 0x7fd972f2, 0xf9cafa42, 0x7fd924ca, 0xf9c4b3a9, + 0x7fd8d653, 0xf9be6d15, + 0x7fd8878e, 0xf9b82684, 0x7fd8387a, 0xf9b1dff7, 0x7fd7e917, 0xf9ab996e, + 0x7fd79965, 0xf9a552e9, + 0x7fd74964, 0xf99f0c68, 0x7fd6f914, 0xf998c5ea, 0x7fd6a875, 0xf9927f71, + 0x7fd65788, 0xf98c38fc, + 0x7fd6064c, 0xf985f28a, 0x7fd5b4c1, 0xf97fac1d, 0x7fd562e7, 0xf97965b4, + 0x7fd510be, 0xf9731f4e, + 0x7fd4be46, 0xf96cd8ed, 0x7fd46b80, 0xf9669290, 0x7fd4186a, 0xf9604c37, + 0x7fd3c506, 0xf95a05e2, + 0x7fd37153, 0xf953bf91, 0x7fd31d51, 0xf94d7944, 0x7fd2c900, 0xf94732fb, + 0x7fd27460, 0xf940ecb7, + 0x7fd21f72, 0xf93aa676, 0x7fd1ca35, 0xf934603a, 0x7fd174a8, 0xf92e1a02, + 0x7fd11ecd, 0xf927d3ce, + 0x7fd0c8a3, 0xf9218d9e, 0x7fd0722b, 0xf91b4773, 0x7fd01b63, 0xf915014c, + 0x7fcfc44d, 0xf90ebb29, + 0x7fcf6ce8, 0xf908750a, 0x7fcf1533, 0xf9022ef0, 0x7fcebd31, 0xf8fbe8da, + 0x7fce64df, 0xf8f5a2c9, + 0x7fce0c3e, 0xf8ef5cbb, 0x7fcdb34f, 0xf8e916b2, 0x7fcd5a11, 0xf8e2d0ae, + 0x7fcd0083, 0xf8dc8aae, + 0x7fcca6a7, 0xf8d644b2, 0x7fcc4c7d, 0xf8cffebb, 0x7fcbf203, 0xf8c9b8c8, + 0x7fcb973b, 0xf8c372d9, + 0x7fcb3c23, 0xf8bd2cef, 0x7fcae0bd, 0xf8b6e70a, 0x7fca8508, 0xf8b0a129, + 0x7fca2905, 0xf8aa5b4c, + 0x7fc9ccb2, 0xf8a41574, 0x7fc97011, 0xf89dcfa1, 0x7fc91320, 0xf89789d2, + 0x7fc8b5e1, 0xf8914407, + 0x7fc85854, 0xf88afe42, 0x7fc7fa77, 0xf884b880, 0x7fc79c4b, 0xf87e72c4, + 0x7fc73dd1, 0xf8782d0c, + 0x7fc6df08, 0xf871e759, 0x7fc67ff0, 0xf86ba1aa, 0x7fc62089, 0xf8655c00, + 0x7fc5c0d3, 0xf85f165b, + 0x7fc560cf, 0xf858d0bb, 0x7fc5007c, 0xf8528b1f, 0x7fc49fda, 0xf84c4588, + 0x7fc43ee9, 0xf845fff5, + 0x7fc3dda9, 0xf83fba68, 0x7fc37c1b, 0xf83974df, 0x7fc31a3d, 0xf8332f5b, + 0x7fc2b811, 0xf82ce9dc, + 0x7fc25596, 0xf826a462, 0x7fc1f2cc, 0xf8205eec, 0x7fc18fb4, 0xf81a197b, + 0x7fc12c4d, 0xf813d410, + 0x7fc0c896, 0xf80d8ea9, 0x7fc06491, 0xf8074947, 0x7fc0003e, 0xf80103ea, + 0x7fbf9b9b, 0xf7fabe92, + 0x7fbf36aa, 0xf7f4793e, 0x7fbed16a, 0xf7ee33f0, 0x7fbe6bdb, 0xf7e7eea7, + 0x7fbe05fd, 0xf7e1a963, + 0x7fbd9fd0, 0xf7db6423, 0x7fbd3955, 0xf7d51ee9, 0x7fbcd28b, 0xf7ced9b4, + 0x7fbc6b72, 0xf7c89484, + 0x7fbc040a, 0xf7c24f59, 0x7fbb9c53, 0xf7bc0a33, 0x7fbb344e, 0xf7b5c512, + 0x7fbacbfa, 0xf7af7ff6, + 0x7fba6357, 0xf7a93ae0, 0x7fb9fa65, 0xf7a2f5ce, 0x7fb99125, 0xf79cb0c2, + 0x7fb92796, 0xf7966bbb, + 0x7fb8bdb8, 0xf79026b9, 0x7fb8538b, 0xf789e1bc, 0x7fb7e90f, 0xf7839cc4, + 0x7fb77e45, 0xf77d57d2, + 0x7fb7132b, 0xf77712e5, 0x7fb6a7c3, 0xf770cdfd, 0x7fb63c0d, 0xf76a891b, + 0x7fb5d007, 0xf764443d, + 0x7fb563b3, 0xf75dff66, 0x7fb4f710, 0xf757ba93, 0x7fb48a1e, 0xf75175c6, + 0x7fb41cdd, 0xf74b30fe, + 0x7fb3af4e, 0xf744ec3b, 0x7fb34170, 0xf73ea77e, 0x7fb2d343, 0xf73862c6, + 0x7fb264c7, 0xf7321e14, + 0x7fb1f5fc, 0xf72bd967, 0x7fb186e3, 0xf72594c0, 0x7fb1177b, 0xf71f501e, + 0x7fb0a7c4, 0xf7190b81, + 0x7fb037bf, 0xf712c6ea, 0x7fafc76a, 0xf70c8259, 0x7faf56c7, 0xf7063dcd, + 0x7faee5d5, 0xf6fff946, + 0x7fae7495, 0xf6f9b4c6, 0x7fae0305, 0xf6f3704a, 0x7fad9127, 0xf6ed2bd4, + 0x7fad1efa, 0xf6e6e764, + 0x7facac7f, 0xf6e0a2fa, 0x7fac39b4, 0xf6da5e95, 0x7fabc69b, 0xf6d41a36, + 0x7fab5333, 0xf6cdd5dc, + 0x7faadf7c, 0xf6c79188, 0x7faa6b77, 0xf6c14d3a, 0x7fa9f723, 0xf6bb08f1, + 0x7fa98280, 0xf6b4c4ae, + 0x7fa90d8e, 0xf6ae8071, 0x7fa8984e, 0xf6a83c3a, 0x7fa822bf, 0xf6a1f808, + 0x7fa7ace1, 0xf69bb3dd, + 0x7fa736b4, 0xf6956fb7, 0x7fa6c039, 0xf68f2b96, 0x7fa6496e, 0xf688e77c, + 0x7fa5d256, 0xf682a367, + 0x7fa55aee, 0xf67c5f59, 0x7fa4e338, 0xf6761b50, 0x7fa46b32, 0xf66fd74d, + 0x7fa3f2df, 0xf6699350, + 0x7fa37a3c, 0xf6634f59, 0x7fa3014b, 0xf65d0b68, 0x7fa2880b, 0xf656c77c, + 0x7fa20e7c, 0xf6508397, + 0x7fa1949e, 0xf64a3fb8, 0x7fa11a72, 0xf643fbdf, 0x7fa09ff7, 0xf63db80b, + 0x7fa0252e, 0xf637743e, + 0x7f9faa15, 0xf6313077, 0x7f9f2eae, 0xf62aecb5, 0x7f9eb2f8, 0xf624a8fa, + 0x7f9e36f4, 0xf61e6545, + 0x7f9dbaa0, 0xf6182196, 0x7f9d3dfe, 0xf611dded, 0x7f9cc10d, 0xf60b9a4b, + 0x7f9c43ce, 0xf60556ae, + 0x7f9bc640, 0xf5ff1318, 0x7f9b4863, 0xf5f8cf87, 0x7f9aca37, 0xf5f28bfd, + 0x7f9a4bbd, 0xf5ec4879, + 0x7f99ccf4, 0xf5e604fc, 0x7f994ddc, 0xf5dfc184, 0x7f98ce76, 0xf5d97e13, + 0x7f984ec1, 0xf5d33aa8, + 0x7f97cebd, 0xf5ccf743, 0x7f974e6a, 0xf5c6b3e5, 0x7f96cdc9, 0xf5c0708d, + 0x7f964cd9, 0xf5ba2d3b, + 0x7f95cb9a, 0xf5b3e9f0, 0x7f954a0d, 0xf5ada6ab, 0x7f94c831, 0xf5a7636c, + 0x7f944606, 0xf5a12034, + 0x7f93c38c, 0xf59add02, 0x7f9340c4, 0xf59499d6, 0x7f92bdad, 0xf58e56b1, + 0x7f923a48, 0xf5881393, + 0x7f91b694, 0xf581d07b, 0x7f913291, 0xf57b8d69, 0x7f90ae3f, 0xf5754a5e, + 0x7f90299f, 0xf56f0759, + 0x7f8fa4b0, 0xf568c45b, 0x7f8f1f72, 0xf5628163, 0x7f8e99e6, 0xf55c3e72, + 0x7f8e140a, 0xf555fb88, + 0x7f8d8de1, 0xf54fb8a4, 0x7f8d0768, 0xf54975c6, 0x7f8c80a1, 0xf54332ef, + 0x7f8bf98b, 0xf53cf01f, + 0x7f8b7227, 0xf536ad56, 0x7f8aea74, 0xf5306a93, 0x7f8a6272, 0xf52a27d7, + 0x7f89da21, 0xf523e521, + 0x7f895182, 0xf51da273, 0x7f88c894, 0xf5175fca, 0x7f883f58, 0xf5111d29, + 0x7f87b5cd, 0xf50ada8f, + 0x7f872bf3, 0xf50497fb, 0x7f86a1ca, 0xf4fe556e, 0x7f861753, 0xf4f812e7, + 0x7f858c8d, 0xf4f1d068, + 0x7f850179, 0xf4eb8def, 0x7f847616, 0xf4e54b7d, 0x7f83ea64, 0xf4df0912, + 0x7f835e64, 0xf4d8c6ae, + 0x7f82d214, 0xf4d28451, 0x7f824577, 0xf4cc41fb, 0x7f81b88a, 0xf4c5ffab, + 0x7f812b4f, 0xf4bfbd63, + 0x7f809dc5, 0xf4b97b21, 0x7f800fed, 0xf4b338e7, 0x7f7f81c6, 0xf4acf6b3, + 0x7f7ef350, 0xf4a6b486, + 0x7f7e648c, 0xf4a07261, 0x7f7dd579, 0xf49a3042, 0x7f7d4617, 0xf493ee2b, + 0x7f7cb667, 0xf48dac1a, + 0x7f7c2668, 0xf4876a10, 0x7f7b961b, 0xf481280e, 0x7f7b057e, 0xf47ae613, + 0x7f7a7494, 0xf474a41f, + 0x7f79e35a, 0xf46e6231, 0x7f7951d2, 0xf468204b, 0x7f78bffb, 0xf461de6d, + 0x7f782dd6, 0xf45b9c95, + 0x7f779b62, 0xf4555ac5, 0x7f77089f, 0xf44f18fb, 0x7f76758e, 0xf448d739, + 0x7f75e22e, 0xf442957e, + 0x7f754e80, 0xf43c53cb, 0x7f74ba83, 0xf436121e, 0x7f742637, 0xf42fd079, + 0x7f73919d, 0xf4298edc, + 0x7f72fcb4, 0xf4234d45, 0x7f72677c, 0xf41d0bb6, 0x7f71d1f6, 0xf416ca2e, + 0x7f713c21, 0xf41088ae, + 0x7f70a5fe, 0xf40a4735, 0x7f700f8c, 0xf40405c3, 0x7f6f78cb, 0xf3fdc459, + 0x7f6ee1bc, 0xf3f782f6, + 0x7f6e4a5e, 0xf3f1419a, 0x7f6db2b1, 0xf3eb0046, 0x7f6d1ab6, 0xf3e4bef9, + 0x7f6c826d, 0xf3de7db4, + 0x7f6be9d4, 0xf3d83c77, 0x7f6b50ed, 0xf3d1fb40, 0x7f6ab7b8, 0xf3cbba12, + 0x7f6a1e34, 0xf3c578eb, + 0x7f698461, 0xf3bf37cb, 0x7f68ea40, 0xf3b8f6b3, 0x7f684fd0, 0xf3b2b5a3, + 0x7f67b512, 0xf3ac749a, + 0x7f671a05, 0xf3a63398, 0x7f667ea9, 0xf39ff29f, 0x7f65e2ff, 0xf399b1ad, + 0x7f654706, 0xf39370c2, + 0x7f64aabf, 0xf38d2fe0, 0x7f640e29, 0xf386ef05, 0x7f637144, 0xf380ae31, + 0x7f62d411, 0xf37a6d66, + 0x7f62368f, 0xf3742ca2, 0x7f6198bf, 0xf36debe6, 0x7f60faa0, 0xf367ab31, + 0x7f605c33, 0xf3616a85, + 0x7f5fbd77, 0xf35b29e0, 0x7f5f1e6c, 0xf354e943, 0x7f5e7f13, 0xf34ea8ae, + 0x7f5ddf6b, 0xf3486820, + 0x7f5d3f75, 0xf342279b, 0x7f5c9f30, 0xf33be71d, 0x7f5bfe9d, 0xf335a6a7, + 0x7f5b5dbb, 0xf32f6639, + 0x7f5abc8a, 0xf32925d3, 0x7f5a1b0b, 0xf322e575, 0x7f59793e, 0xf31ca51f, + 0x7f58d721, 0xf31664d1, + 0x7f5834b7, 0xf310248a, 0x7f5791fd, 0xf309e44c, 0x7f56eef5, 0xf303a416, + 0x7f564b9f, 0xf2fd63e8, + 0x7f55a7fa, 0xf2f723c1, 0x7f550407, 0xf2f0e3a3, 0x7f545fc5, 0xf2eaa38d, + 0x7f53bb34, 0xf2e4637f, + 0x7f531655, 0xf2de2379, 0x7f527127, 0xf2d7e37b, 0x7f51cbab, 0xf2d1a385, + 0x7f5125e0, 0xf2cb6398, + 0x7f507fc7, 0xf2c523b2, 0x7f4fd95f, 0xf2bee3d5, 0x7f4f32a9, 0xf2b8a400, + 0x7f4e8ba4, 0xf2b26433, + 0x7f4de451, 0xf2ac246e, 0x7f4d3caf, 0xf2a5e4b1, 0x7f4c94be, 0xf29fa4fd, + 0x7f4bec7f, 0xf2996551, + 0x7f4b43f2, 0xf29325ad, 0x7f4a9b16, 0xf28ce612, 0x7f49f1eb, 0xf286a67e, + 0x7f494872, 0xf28066f4, + 0x7f489eaa, 0xf27a2771, 0x7f47f494, 0xf273e7f7, 0x7f474a30, 0xf26da885, + 0x7f469f7d, 0xf267691b, + 0x7f45f47b, 0xf26129ba, 0x7f45492b, 0xf25aea61, 0x7f449d8c, 0xf254ab11, + 0x7f43f19f, 0xf24e6bc9, + 0x7f434563, 0xf2482c8a, 0x7f4298d9, 0xf241ed53, 0x7f41ec01, 0xf23bae24, + 0x7f413ed9, 0xf2356efe, + 0x7f409164, 0xf22f2fe1, 0x7f3fe3a0, 0xf228f0cc, 0x7f3f358d, 0xf222b1c0, + 0x7f3e872c, 0xf21c72bc, + 0x7f3dd87c, 0xf21633c0, 0x7f3d297e, 0xf20ff4ce, 0x7f3c7a31, 0xf209b5e4, + 0x7f3bca96, 0xf2037702, + 0x7f3b1aad, 0xf1fd3829, 0x7f3a6a75, 0xf1f6f959, 0x7f39b9ee, 0xf1f0ba91, + 0x7f390919, 0xf1ea7bd2, + 0x7f3857f6, 0xf1e43d1c, 0x7f37a684, 0xf1ddfe6f, 0x7f36f4c3, 0xf1d7bfca, + 0x7f3642b4, 0xf1d1812e, + 0x7f359057, 0xf1cb429a, 0x7f34ddab, 0xf1c50410, 0x7f342ab1, 0xf1bec58e, + 0x7f337768, 0xf1b88715, + 0x7f32c3d1, 0xf1b248a5, 0x7f320feb, 0xf1ac0a3e, 0x7f315bb7, 0xf1a5cbdf, + 0x7f30a734, 0xf19f8d89, + 0x7f2ff263, 0xf1994f3d, 0x7f2f3d44, 0xf19310f9, 0x7f2e87d6, 0xf18cd2be, + 0x7f2dd219, 0xf186948c, + 0x7f2d1c0e, 0xf1805662, 0x7f2c65b5, 0xf17a1842, 0x7f2baf0d, 0xf173da2b, + 0x7f2af817, 0xf16d9c1d, + 0x7f2a40d2, 0xf1675e17, 0x7f29893f, 0xf161201b, 0x7f28d15d, 0xf15ae228, + 0x7f28192d, 0xf154a43d, + 0x7f2760af, 0xf14e665c, 0x7f26a7e2, 0xf1482884, 0x7f25eec7, 0xf141eab5, + 0x7f25355d, 0xf13bacef, + 0x7f247ba5, 0xf1356f32, 0x7f23c19e, 0xf12f317e, 0x7f230749, 0xf128f3d4, + 0x7f224ca6, 0xf122b632, + 0x7f2191b4, 0xf11c789a, 0x7f20d674, 0xf1163b0b, 0x7f201ae5, 0xf10ffd85, + 0x7f1f5f08, 0xf109c009, + 0x7f1ea2dc, 0xf1038295, 0x7f1de662, 0xf0fd452b, 0x7f1d299a, 0xf0f707ca, + 0x7f1c6c83, 0xf0f0ca72, + 0x7f1baf1e, 0xf0ea8d24, 0x7f1af16a, 0xf0e44fdf, 0x7f1a3368, 0xf0de12a3, + 0x7f197518, 0xf0d7d571, + 0x7f18b679, 0xf0d19848, 0x7f17f78c, 0xf0cb5b28, 0x7f173850, 0xf0c51e12, + 0x7f1678c6, 0xf0bee105, + 0x7f15b8ee, 0xf0b8a401, 0x7f14f8c7, 0xf0b26707, 0x7f143852, 0xf0ac2a16, + 0x7f13778e, 0xf0a5ed2f, + 0x7f12b67c, 0xf09fb051, 0x7f11f51c, 0xf099737d, 0x7f11336d, 0xf09336b2, + 0x7f107170, 0xf08cf9f1, + 0x7f0faf25, 0xf086bd39, 0x7f0eec8b, 0xf080808b, 0x7f0e29a3, 0xf07a43e7, + 0x7f0d666c, 0xf074074c, + 0x7f0ca2e7, 0xf06dcaba, 0x7f0bdf14, 0xf0678e32, 0x7f0b1af2, 0xf06151b4, + 0x7f0a5682, 0xf05b1540, + 0x7f0991c4, 0xf054d8d5, 0x7f08ccb7, 0xf04e9c73, 0x7f08075c, 0xf048601c, + 0x7f0741b2, 0xf04223ce, + 0x7f067bba, 0xf03be78a, 0x7f05b574, 0xf035ab4f, 0x7f04eedf, 0xf02f6f1f, + 0x7f0427fc, 0xf02932f8, + 0x7f0360cb, 0xf022f6da, 0x7f02994b, 0xf01cbac7, 0x7f01d17d, 0xf0167ebd, + 0x7f010961, 0xf01042be, + 0x7f0040f6, 0xf00a06c8, 0x7eff783d, 0xf003cadc, 0x7efeaf36, 0xeffd8ef9, + 0x7efde5e0, 0xeff75321, + 0x7efd1c3c, 0xeff11753, 0x7efc524a, 0xefeadb8e, 0x7efb8809, 0xefe49fd3, + 0x7efabd7a, 0xefde6423, + 0x7ef9f29d, 0xefd8287c, 0x7ef92771, 0xefd1ecdf, 0x7ef85bf7, 0xefcbb14c, + 0x7ef7902f, 0xefc575c3, + 0x7ef6c418, 0xefbf3a45, 0x7ef5f7b3, 0xefb8fed0, 0x7ef52b00, 0xefb2c365, + 0x7ef45dfe, 0xefac8804, + 0x7ef390ae, 0xefa64cae, 0x7ef2c310, 0xefa01161, 0x7ef1f524, 0xef99d61f, + 0x7ef126e9, 0xef939ae6, + 0x7ef05860, 0xef8d5fb8, 0x7eef8988, 0xef872494, 0x7eeeba62, 0xef80e97a, + 0x7eedeaee, 0xef7aae6b, + 0x7eed1b2c, 0xef747365, 0x7eec4b1b, 0xef6e386a, 0x7eeb7abc, 0xef67fd79, + 0x7eeaaa0f, 0xef61c292, + 0x7ee9d914, 0xef5b87b5, 0x7ee907ca, 0xef554ce3, 0x7ee83632, 0xef4f121b, + 0x7ee7644c, 0xef48d75d, + 0x7ee69217, 0xef429caa, 0x7ee5bf94, 0xef3c6201, 0x7ee4ecc3, 0xef362762, + 0x7ee419a3, 0xef2feccd, + 0x7ee34636, 0xef29b243, 0x7ee2727a, 0xef2377c4, 0x7ee19e6f, 0xef1d3d4e, + 0x7ee0ca17, 0xef1702e4, + 0x7edff570, 0xef10c883, 0x7edf207b, 0xef0a8e2d, 0x7ede4b38, 0xef0453e2, + 0x7edd75a6, 0xeefe19a1, + 0x7edc9fc6, 0xeef7df6a, 0x7edbc998, 0xeef1a53e, 0x7edaf31c, 0xeeeb6b1c, + 0x7eda1c51, 0xeee53105, + 0x7ed94538, 0xeedef6f9, 0x7ed86dd1, 0xeed8bcf7, 0x7ed7961c, 0xeed28300, + 0x7ed6be18, 0xeecc4913, + 0x7ed5e5c6, 0xeec60f31, 0x7ed50d26, 0xeebfd55a, 0x7ed43438, 0xeeb99b8d, + 0x7ed35afb, 0xeeb361cb, + 0x7ed28171, 0xeead2813, 0x7ed1a798, 0xeea6ee66, 0x7ed0cd70, 0xeea0b4c4, + 0x7ecff2fb, 0xee9a7b2d, + 0x7ecf1837, 0xee9441a0, 0x7ece3d25, 0xee8e081e, 0x7ecd61c5, 0xee87cea7, + 0x7ecc8617, 0xee81953b, + 0x7ecbaa1a, 0xee7b5bd9, 0x7ecacdd0, 0xee752283, 0x7ec9f137, 0xee6ee937, + 0x7ec9144f, 0xee68aff6, + 0x7ec8371a, 0xee6276bf, 0x7ec75996, 0xee5c3d94, 0x7ec67bc5, 0xee560473, + 0x7ec59da5, 0xee4fcb5e, + 0x7ec4bf36, 0xee499253, 0x7ec3e07a, 0xee435953, 0x7ec3016f, 0xee3d205e, + 0x7ec22217, 0xee36e775, + 0x7ec14270, 0xee30ae96, 0x7ec0627a, 0xee2a75c2, 0x7ebf8237, 0xee243cf9, + 0x7ebea1a6, 0xee1e043b, + 0x7ebdc0c6, 0xee17cb88, 0x7ebcdf98, 0xee1192e0, 0x7ebbfe1c, 0xee0b5a43, + 0x7ebb1c52, 0xee0521b2, + 0x7eba3a39, 0xedfee92b, 0x7eb957d2, 0xedf8b0b0, 0x7eb8751e, 0xedf2783f, + 0x7eb7921b, 0xedec3fda, + 0x7eb6aeca, 0xede60780, 0x7eb5cb2a, 0xeddfcf31, 0x7eb4e73d, 0xedd996ed, + 0x7eb40301, 0xedd35eb5, + 0x7eb31e78, 0xedcd2687, 0x7eb239a0, 0xedc6ee65, 0x7eb1547a, 0xedc0b64e, + 0x7eb06f05, 0xedba7e43, + 0x7eaf8943, 0xedb44642, 0x7eaea333, 0xedae0e4d, 0x7eadbcd4, 0xeda7d664, + 0x7eacd627, 0xeda19e85, + 0x7eabef2c, 0xed9b66b2, 0x7eab07e3, 0xed952eea, 0x7eaa204c, 0xed8ef72e, + 0x7ea93867, 0xed88bf7d, + 0x7ea85033, 0xed8287d7, 0x7ea767b2, 0xed7c503d, 0x7ea67ee2, 0xed7618ae, + 0x7ea595c4, 0xed6fe12b, + 0x7ea4ac58, 0xed69a9b3, 0x7ea3c29e, 0xed637246, 0x7ea2d896, 0xed5d3ae5, + 0x7ea1ee3f, 0xed570390, + 0x7ea1039b, 0xed50cc46, 0x7ea018a8, 0xed4a9507, 0x7e9f2d68, 0xed445dd5, + 0x7e9e41d9, 0xed3e26ad, + 0x7e9d55fc, 0xed37ef91, 0x7e9c69d1, 0xed31b881, 0x7e9b7d58, 0xed2b817d, + 0x7e9a9091, 0xed254a84, + 0x7e99a37c, 0xed1f1396, 0x7e98b618, 0xed18dcb5, 0x7e97c867, 0xed12a5df, + 0x7e96da67, 0xed0c6f14, + 0x7e95ec1a, 0xed063856, 0x7e94fd7e, 0xed0001a3, 0x7e940e94, 0xecf9cafb, + 0x7e931f5c, 0xecf39460, + 0x7e922fd6, 0xeced5dd0, 0x7e914002, 0xece7274c, 0x7e904fe0, 0xece0f0d4, + 0x7e8f5f70, 0xecdaba67, + 0x7e8e6eb2, 0xecd48407, 0x7e8d7da6, 0xecce4db2, 0x7e8c8c4b, 0xecc81769, + 0x7e8b9aa3, 0xecc1e12c, + 0x7e8aa8ac, 0xecbbaafb, 0x7e89b668, 0xecb574d5, 0x7e88c3d5, 0xecaf3ebc, + 0x7e87d0f5, 0xeca908ae, + 0x7e86ddc6, 0xeca2d2ad, 0x7e85ea49, 0xec9c9cb7, 0x7e84f67e, 0xec9666cd, + 0x7e840265, 0xec9030f0, + 0x7e830dff, 0xec89fb1e, 0x7e82194a, 0xec83c558, 0x7e812447, 0xec7d8f9e, + 0x7e802ef6, 0xec7759f1, + 0x7e7f3957, 0xec71244f, 0x7e7e436a, 0xec6aeeba, 0x7e7d4d2f, 0xec64b930, + 0x7e7c56a5, 0xec5e83b3, + 0x7e7b5fce, 0xec584e41, 0x7e7a68a9, 0xec5218dc, 0x7e797136, 0xec4be383, + 0x7e787975, 0xec45ae36, + 0x7e778166, 0xec3f78f6, 0x7e768908, 0xec3943c1, 0x7e75905d, 0xec330e99, + 0x7e749764, 0xec2cd97d, + 0x7e739e1d, 0xec26a46d, 0x7e72a488, 0xec206f69, 0x7e71aaa4, 0xec1a3a72, + 0x7e70b073, 0xec140587, + 0x7e6fb5f4, 0xec0dd0a8, 0x7e6ebb27, 0xec079bd6, 0x7e6dc00c, 0xec01670f, + 0x7e6cc4a2, 0xebfb3256, + 0x7e6bc8eb, 0xebf4fda8, 0x7e6acce6, 0xebeec907, 0x7e69d093, 0xebe89472, + 0x7e68d3f2, 0xebe25fea, + 0x7e67d703, 0xebdc2b6e, 0x7e66d9c6, 0xebd5f6fe, 0x7e65dc3b, 0xebcfc29b, + 0x7e64de62, 0xebc98e45, + 0x7e63e03b, 0xebc359fb, 0x7e62e1c6, 0xebbd25bd, 0x7e61e303, 0xebb6f18c, + 0x7e60e3f2, 0xebb0bd67, + 0x7e5fe493, 0xebaa894f, 0x7e5ee4e6, 0xeba45543, 0x7e5de4ec, 0xeb9e2144, + 0x7e5ce4a3, 0xeb97ed52, + 0x7e5be40c, 0xeb91b96c, 0x7e5ae328, 0xeb8b8593, 0x7e59e1f5, 0xeb8551c6, + 0x7e58e075, 0xeb7f1e06, + 0x7e57dea7, 0xeb78ea52, 0x7e56dc8a, 0xeb72b6ac, 0x7e55da20, 0xeb6c8312, + 0x7e54d768, 0xeb664f84, + 0x7e53d462, 0xeb601c04, 0x7e52d10e, 0xeb59e890, 0x7e51cd6c, 0xeb53b529, + 0x7e50c97c, 0xeb4d81ce, + 0x7e4fc53e, 0xeb474e81, 0x7e4ec0b2, 0xeb411b40, 0x7e4dbbd9, 0xeb3ae80c, + 0x7e4cb6b1, 0xeb34b4e4, + 0x7e4bb13c, 0xeb2e81ca, 0x7e4aab78, 0xeb284ebc, 0x7e49a567, 0xeb221bbb, + 0x7e489f08, 0xeb1be8c8, + 0x7e47985b, 0xeb15b5e1, 0x7e469160, 0xeb0f8307, 0x7e458a17, 0xeb095039, + 0x7e448281, 0xeb031d79, + 0x7e437a9c, 0xeafceac6, 0x7e427269, 0xeaf6b81f, 0x7e4169e9, 0xeaf08586, + 0x7e40611b, 0xeaea52fa, + 0x7e3f57ff, 0xeae4207a, 0x7e3e4e95, 0xeaddee08, 0x7e3d44dd, 0xead7bba3, + 0x7e3c3ad7, 0xead1894b, + 0x7e3b3083, 0xeacb56ff, 0x7e3a25e2, 0xeac524c1, 0x7e391af3, 0xeabef290, + 0x7e380fb5, 0xeab8c06c, + 0x7e37042a, 0xeab28e56, 0x7e35f851, 0xeaac5c4c, 0x7e34ec2b, 0xeaa62a4f, + 0x7e33dfb6, 0xea9ff860, + 0x7e32d2f4, 0xea99c67e, 0x7e31c5e3, 0xea9394a9, 0x7e30b885, 0xea8d62e1, + 0x7e2faad9, 0xea873127, + 0x7e2e9cdf, 0xea80ff7a, 0x7e2d8e97, 0xea7acdda, 0x7e2c8002, 0xea749c47, + 0x7e2b711f, 0xea6e6ac2, + 0x7e2a61ed, 0xea683949, 0x7e29526e, 0xea6207df, 0x7e2842a2, 0xea5bd681, + 0x7e273287, 0xea55a531, + 0x7e26221f, 0xea4f73ee, 0x7e251168, 0xea4942b9, 0x7e240064, 0xea431191, + 0x7e22ef12, 0xea3ce077, + 0x7e21dd73, 0xea36af69, 0x7e20cb85, 0xea307e6a, 0x7e1fb94a, 0xea2a4d78, + 0x7e1ea6c1, 0xea241c93, + 0x7e1d93ea, 0xea1debbb, 0x7e1c80c5, 0xea17baf2, 0x7e1b6d53, 0xea118a35, + 0x7e1a5992, 0xea0b5987, + 0x7e194584, 0xea0528e5, 0x7e183128, 0xe9fef852, 0x7e171c7f, 0xe9f8c7cc, + 0x7e160787, 0xe9f29753, + 0x7e14f242, 0xe9ec66e8, 0x7e13dcaf, 0xe9e6368b, 0x7e12c6ce, 0xe9e0063c, + 0x7e11b0a0, 0xe9d9d5fa, + 0x7e109a24, 0xe9d3a5c5, 0x7e0f835a, 0xe9cd759f, 0x7e0e6c42, 0xe9c74586, + 0x7e0d54dc, 0xe9c1157a, + 0x7e0c3d29, 0xe9bae57d, 0x7e0b2528, 0xe9b4b58d, 0x7e0a0cd9, 0xe9ae85ab, + 0x7e08f43d, 0xe9a855d7, + 0x7e07db52, 0xe9a22610, 0x7e06c21a, 0xe99bf658, 0x7e05a894, 0xe995c6ad, + 0x7e048ec1, 0xe98f9710, + 0x7e0374a0, 0xe9896781, 0x7e025a31, 0xe98337ff, 0x7e013f74, 0xe97d088c, + 0x7e00246a, 0xe976d926, + 0x7dff0911, 0xe970a9ce, 0x7dfded6c, 0xe96a7a85, 0x7dfcd178, 0xe9644b49, + 0x7dfbb537, 0xe95e1c1b, + 0x7dfa98a8, 0xe957ecfb, 0x7df97bcb, 0xe951bde9, 0x7df85ea0, 0xe94b8ee5, + 0x7df74128, 0xe9455fef, + 0x7df62362, 0xe93f3107, 0x7df5054f, 0xe939022d, 0x7df3e6ee, 0xe932d361, + 0x7df2c83f, 0xe92ca4a4, + 0x7df1a942, 0xe92675f4, 0x7df089f8, 0xe9204752, 0x7def6a60, 0xe91a18bf, + 0x7dee4a7a, 0xe913ea39, + 0x7ded2a47, 0xe90dbbc2, 0x7dec09c6, 0xe9078d59, 0x7deae8f7, 0xe9015efe, + 0x7de9c7da, 0xe8fb30b1, + 0x7de8a670, 0xe8f50273, 0x7de784b9, 0xe8eed443, 0x7de662b3, 0xe8e8a621, + 0x7de54060, 0xe8e2780d, + 0x7de41dc0, 0xe8dc4a07, 0x7de2fad1, 0xe8d61c10, 0x7de1d795, 0xe8cfee27, + 0x7de0b40b, 0xe8c9c04c, + 0x7ddf9034, 0xe8c39280, 0x7dde6c0f, 0xe8bd64c2, 0x7ddd479d, 0xe8b73712, + 0x7ddc22dc, 0xe8b10971, + 0x7ddafdce, 0xe8aadbde, 0x7dd9d873, 0xe8a4ae59, 0x7dd8b2ca, 0xe89e80e3, + 0x7dd78cd3, 0xe898537b, + 0x7dd6668f, 0xe8922622, 0x7dd53ffc, 0xe88bf8d7, 0x7dd4191d, 0xe885cb9a, + 0x7dd2f1f0, 0xe87f9e6c, + 0x7dd1ca75, 0xe879714d, 0x7dd0a2ac, 0xe873443c, 0x7dcf7a96, 0xe86d173a, + 0x7dce5232, 0xe866ea46, + 0x7dcd2981, 0xe860bd61, 0x7dcc0082, 0xe85a908a, 0x7dcad736, 0xe85463c2, + 0x7dc9ad9c, 0xe84e3708, + 0x7dc883b4, 0xe8480a5d, 0x7dc7597f, 0xe841ddc1, 0x7dc62efc, 0xe83bb133, + 0x7dc5042b, 0xe83584b4, + 0x7dc3d90d, 0xe82f5844, 0x7dc2ada2, 0xe8292be3, 0x7dc181e8, 0xe822ff90, + 0x7dc055e2, 0xe81cd34b, + 0x7dbf298d, 0xe816a716, 0x7dbdfceb, 0xe8107aef, 0x7dbccffc, 0xe80a4ed7, + 0x7dbba2bf, 0xe80422ce, + 0x7dba7534, 0xe7fdf6d4, 0x7db9475c, 0xe7f7cae8, 0x7db81936, 0xe7f19f0c, + 0x7db6eac3, 0xe7eb733e, + 0x7db5bc02, 0xe7e5477f, 0x7db48cf4, 0xe7df1bcf, 0x7db35d98, 0xe7d8f02d, + 0x7db22def, 0xe7d2c49b, + 0x7db0fdf8, 0xe7cc9917, 0x7dafcdb3, 0xe7c66da3, 0x7dae9d21, 0xe7c0423d, + 0x7dad6c42, 0xe7ba16e7, + 0x7dac3b15, 0xe7b3eb9f, 0x7dab099a, 0xe7adc066, 0x7da9d7d2, 0xe7a7953d, + 0x7da8a5bc, 0xe7a16a22, + 0x7da77359, 0xe79b3f16, 0x7da640a9, 0xe795141a, 0x7da50dab, 0xe78ee92c, + 0x7da3da5f, 0xe788be4e, + 0x7da2a6c6, 0xe782937e, 0x7da172df, 0xe77c68be, 0x7da03eab, 0xe7763e0d, + 0x7d9f0a29, 0xe770136b, + 0x7d9dd55a, 0xe769e8d8, 0x7d9ca03e, 0xe763be55, 0x7d9b6ad3, 0xe75d93e0, + 0x7d9a351c, 0xe757697b, + 0x7d98ff17, 0xe7513f25, 0x7d97c8c4, 0xe74b14de, 0x7d969224, 0xe744eaa6, + 0x7d955b37, 0xe73ec07e, + 0x7d9423fc, 0xe7389665, 0x7d92ec73, 0xe7326c5b, 0x7d91b49e, 0xe72c4260, + 0x7d907c7a, 0xe7261875, + 0x7d8f4409, 0xe71fee99, 0x7d8e0b4b, 0xe719c4cd, 0x7d8cd240, 0xe7139b10, + 0x7d8b98e6, 0xe70d7162, + 0x7d8a5f40, 0xe70747c4, 0x7d89254c, 0xe7011e35, 0x7d87eb0a, 0xe6faf4b5, + 0x7d86b07c, 0xe6f4cb45, + 0x7d85759f, 0xe6eea1e4, 0x7d843a76, 0xe6e87893, 0x7d82fefe, 0xe6e24f51, + 0x7d81c33a, 0xe6dc261f, + 0x7d808728, 0xe6d5fcfc, 0x7d7f4ac8, 0xe6cfd3e9, 0x7d7e0e1c, 0xe6c9aae5, + 0x7d7cd121, 0xe6c381f1, + 0x7d7b93da, 0xe6bd590d, 0x7d7a5645, 0xe6b73038, 0x7d791862, 0xe6b10772, + 0x7d77da32, 0xe6aadebc, + 0x7d769bb5, 0xe6a4b616, 0x7d755cea, 0xe69e8d80, 0x7d741dd2, 0xe69864f9, + 0x7d72de6d, 0xe6923c82, + 0x7d719eba, 0xe68c141a, 0x7d705eba, 0xe685ebc2, 0x7d6f1e6c, 0xe67fc37a, + 0x7d6dddd2, 0xe6799b42, + 0x7d6c9ce9, 0xe6737319, 0x7d6b5bb4, 0xe66d4b01, 0x7d6a1a31, 0xe66722f7, + 0x7d68d860, 0xe660fafe, + 0x7d679642, 0xe65ad315, 0x7d6653d7, 0xe654ab3b, 0x7d65111f, 0xe64e8371, + 0x7d63ce19, 0xe6485bb7, + 0x7d628ac6, 0xe642340d, 0x7d614725, 0xe63c0c73, 0x7d600338, 0xe635e4e9, + 0x7d5ebefc, 0xe62fbd6e, + 0x7d5d7a74, 0xe6299604, 0x7d5c359e, 0xe6236ea9, 0x7d5af07b, 0xe61d475e, + 0x7d59ab0a, 0xe6172024, + 0x7d58654d, 0xe610f8f9, 0x7d571f41, 0xe60ad1de, 0x7d55d8e9, 0xe604aad4, + 0x7d549243, 0xe5fe83d9, + 0x7d534b50, 0xe5f85cef, 0x7d520410, 0xe5f23614, 0x7d50bc82, 0xe5ec0f4a, + 0x7d4f74a7, 0xe5e5e88f, + 0x7d4e2c7f, 0xe5dfc1e5, 0x7d4ce409, 0xe5d99b4b, 0x7d4b9b46, 0xe5d374c1, + 0x7d4a5236, 0xe5cd4e47, + 0x7d4908d9, 0xe5c727dd, 0x7d47bf2e, 0xe5c10184, 0x7d467536, 0xe5badb3a, + 0x7d452af1, 0xe5b4b501, + 0x7d43e05e, 0xe5ae8ed8, 0x7d42957e, 0xe5a868bf, 0x7d414a51, 0xe5a242b7, + 0x7d3ffed7, 0xe59c1cbf, + 0x7d3eb30f, 0xe595f6d7, 0x7d3d66fa, 0xe58fd0ff, 0x7d3c1a98, 0xe589ab38, + 0x7d3acde9, 0xe5838581, + 0x7d3980ec, 0xe57d5fda, 0x7d3833a2, 0xe5773a44, 0x7d36e60b, 0xe57114be, + 0x7d359827, 0xe56aef49, + 0x7d3449f5, 0xe564c9e3, 0x7d32fb76, 0xe55ea48f, 0x7d31acaa, 0xe5587f4a, + 0x7d305d91, 0xe5525a17, + 0x7d2f0e2b, 0xe54c34f3, 0x7d2dbe77, 0xe5460fe0, 0x7d2c6e76, 0xe53feade, + 0x7d2b1e28, 0xe539c5ec, + 0x7d29cd8c, 0xe533a10a, 0x7d287ca4, 0xe52d7c39, 0x7d272b6e, 0xe5275779, + 0x7d25d9eb, 0xe52132c9, + 0x7d24881b, 0xe51b0e2a, 0x7d2335fe, 0xe514e99b, 0x7d21e393, 0xe50ec51d, + 0x7d2090db, 0xe508a0b0, + 0x7d1f3dd6, 0xe5027c53, 0x7d1dea84, 0xe4fc5807, 0x7d1c96e5, 0xe4f633cc, + 0x7d1b42f9, 0xe4f00fa1, + 0x7d19eebf, 0xe4e9eb87, 0x7d189a38, 0xe4e3c77d, 0x7d174564, 0xe4dda385, + 0x7d15f043, 0xe4d77f9d, + 0x7d149ad5, 0xe4d15bc6, 0x7d134519, 0xe4cb37ff, 0x7d11ef11, 0xe4c5144a, + 0x7d1098bb, 0xe4bef0a5, + 0x7d0f4218, 0xe4b8cd11, 0x7d0deb28, 0xe4b2a98e, 0x7d0c93eb, 0xe4ac861b, + 0x7d0b3c60, 0xe4a662ba, + 0x7d09e489, 0xe4a03f69, 0x7d088c64, 0xe49a1c29, 0x7d0733f3, 0xe493f8fb, + 0x7d05db34, 0xe48dd5dd, + 0x7d048228, 0xe487b2d0, 0x7d0328cf, 0xe4818fd4, 0x7d01cf29, 0xe47b6ce9, + 0x7d007535, 0xe4754a0e, + 0x7cff1af5, 0xe46f2745, 0x7cfdc068, 0xe469048d, 0x7cfc658d, 0xe462e1e6, + 0x7cfb0a65, 0xe45cbf50, + 0x7cf9aef0, 0xe4569ccb, 0x7cf8532f, 0xe4507a57, 0x7cf6f720, 0xe44a57f4, + 0x7cf59ac4, 0xe44435a2, + 0x7cf43e1a, 0xe43e1362, 0x7cf2e124, 0xe437f132, 0x7cf183e1, 0xe431cf14, + 0x7cf02651, 0xe42bad07, + 0x7ceec873, 0xe4258b0a, 0x7ced6a49, 0xe41f6920, 0x7cec0bd1, 0xe4194746, + 0x7ceaad0c, 0xe413257d, + 0x7ce94dfb, 0xe40d03c6, 0x7ce7ee9c, 0xe406e220, 0x7ce68ef0, 0xe400c08b, + 0x7ce52ef7, 0xe3fa9f08, + 0x7ce3ceb2, 0xe3f47d96, 0x7ce26e1f, 0xe3ee5c35, 0x7ce10d3f, 0xe3e83ae5, + 0x7cdfac12, 0xe3e219a7, + 0x7cde4a98, 0xe3dbf87a, 0x7cdce8d1, 0xe3d5d75e, 0x7cdb86bd, 0xe3cfb654, + 0x7cda245c, 0xe3c9955b, + 0x7cd8c1ae, 0xe3c37474, 0x7cd75eb3, 0xe3bd539e, 0x7cd5fb6a, 0xe3b732d9, + 0x7cd497d5, 0xe3b11226, + 0x7cd333f3, 0xe3aaf184, 0x7cd1cfc4, 0xe3a4d0f4, 0x7cd06b48, 0xe39eb075, + 0x7ccf067f, 0xe3989008, + 0x7ccda169, 0xe3926fad, 0x7ccc3c06, 0xe38c4f63, 0x7ccad656, 0xe3862f2a, + 0x7cc97059, 0xe3800f03, + 0x7cc80a0f, 0xe379eeed, 0x7cc6a378, 0xe373ceea, 0x7cc53c94, 0xe36daef7, + 0x7cc3d563, 0xe3678f17, + 0x7cc26de5, 0xe3616f48, 0x7cc1061a, 0xe35b4f8b, 0x7cbf9e03, 0xe3552fdf, + 0x7cbe359e, 0xe34f1045, + 0x7cbcccec, 0xe348f0bd, 0x7cbb63ee, 0xe342d146, 0x7cb9faa2, 0xe33cb1e1, + 0x7cb8910a, 0xe336928e, + 0x7cb72724, 0xe330734d, 0x7cb5bcf2, 0xe32a541d, 0x7cb45272, 0xe3243500, + 0x7cb2e7a6, 0xe31e15f4, + 0x7cb17c8d, 0xe317f6fa, 0x7cb01127, 0xe311d811, 0x7caea574, 0xe30bb93b, + 0x7cad3974, 0xe3059a76, + 0x7cabcd28, 0xe2ff7bc3, 0x7caa608e, 0xe2f95d23, 0x7ca8f3a7, 0xe2f33e94, + 0x7ca78674, 0xe2ed2017, + 0x7ca618f3, 0xe2e701ac, 0x7ca4ab26, 0xe2e0e352, 0x7ca33d0c, 0xe2dac50b, + 0x7ca1cea5, 0xe2d4a6d6, + 0x7ca05ff1, 0xe2ce88b3, 0x7c9ef0f0, 0xe2c86aa2, 0x7c9d81a3, 0xe2c24ca2, + 0x7c9c1208, 0xe2bc2eb5, + 0x7c9aa221, 0xe2b610da, 0x7c9931ec, 0xe2aff311, 0x7c97c16b, 0xe2a9d55a, + 0x7c96509d, 0xe2a3b7b5, + 0x7c94df83, 0xe29d9a23, 0x7c936e1b, 0xe2977ca2, 0x7c91fc66, 0xe2915f34, + 0x7c908a65, 0xe28b41d7, + 0x7c8f1817, 0xe285248d, 0x7c8da57c, 0xe27f0755, 0x7c8c3294, 0xe278ea30, + 0x7c8abf5f, 0xe272cd1c, + 0x7c894bde, 0xe26cb01b, 0x7c87d810, 0xe266932c, 0x7c8663f4, 0xe260764f, + 0x7c84ef8c, 0xe25a5984, + 0x7c837ad8, 0xe2543ccc, 0x7c8205d6, 0xe24e2026, 0x7c809088, 0xe2480393, + 0x7c7f1aed, 0xe241e711, + 0x7c7da505, 0xe23bcaa2, 0x7c7c2ed0, 0xe235ae46, 0x7c7ab84e, 0xe22f91fc, + 0x7c794180, 0xe22975c4, + 0x7c77ca65, 0xe223599e, 0x7c7652fd, 0xe21d3d8b, 0x7c74db48, 0xe217218b, + 0x7c736347, 0xe211059d, + 0x7c71eaf9, 0xe20ae9c1, 0x7c70725e, 0xe204cdf8, 0x7c6ef976, 0xe1feb241, + 0x7c6d8041, 0xe1f8969d, + 0x7c6c06c0, 0xe1f27b0b, 0x7c6a8cf2, 0xe1ec5f8c, 0x7c6912d7, 0xe1e64420, + 0x7c679870, 0xe1e028c6, + 0x7c661dbc, 0xe1da0d7e, 0x7c64a2bb, 0xe1d3f24a, 0x7c63276d, 0xe1cdd727, + 0x7c61abd3, 0xe1c7bc18, + 0x7c602fec, 0xe1c1a11b, 0x7c5eb3b8, 0xe1bb8631, 0x7c5d3737, 0xe1b56b59, + 0x7c5bba6a, 0xe1af5094, + 0x7c5a3d50, 0xe1a935e2, 0x7c58bfe9, 0xe1a31b42, 0x7c574236, 0xe19d00b6, + 0x7c55c436, 0xe196e63c, + 0x7c5445e9, 0xe190cbd4, 0x7c52c74f, 0xe18ab180, 0x7c514869, 0xe184973e, + 0x7c4fc936, 0xe17e7d0f, + 0x7c4e49b7, 0xe17862f3, 0x7c4cc9ea, 0xe17248ea, 0x7c4b49d2, 0xe16c2ef4, + 0x7c49c96c, 0xe1661510, + 0x7c4848ba, 0xe15ffb3f, 0x7c46c7bb, 0xe159e182, 0x7c45466f, 0xe153c7d7, + 0x7c43c4d7, 0xe14dae3f, + 0x7c4242f2, 0xe14794ba, 0x7c40c0c1, 0xe1417b48, 0x7c3f3e42, 0xe13b61e9, + 0x7c3dbb78, 0xe135489d, + 0x7c3c3860, 0xe12f2f63, 0x7c3ab4fc, 0xe129163d, 0x7c39314b, 0xe122fd2a, + 0x7c37ad4e, 0xe11ce42a, + 0x7c362904, 0xe116cb3d, 0x7c34a46d, 0xe110b263, 0x7c331f8a, 0xe10a999c, + 0x7c319a5a, 0xe10480e9, + 0x7c3014de, 0xe0fe6848, 0x7c2e8f15, 0xe0f84fbb, 0x7c2d08ff, 0xe0f23740, + 0x7c2b829d, 0xe0ec1ed9, + 0x7c29fbee, 0xe0e60685, 0x7c2874f3, 0xe0dfee44, 0x7c26edab, 0xe0d9d616, + 0x7c256616, 0xe0d3bdfc, + 0x7c23de35, 0xe0cda5f5, 0x7c225607, 0xe0c78e01, 0x7c20cd8d, 0xe0c17620, + 0x7c1f44c6, 0xe0bb5e53, + 0x7c1dbbb3, 0xe0b54698, 0x7c1c3253, 0xe0af2ef2, 0x7c1aa8a6, 0xe0a9175e, + 0x7c191ead, 0xe0a2ffde, + 0x7c179467, 0xe09ce871, 0x7c1609d5, 0xe096d117, 0x7c147ef6, 0xe090b9d1, + 0x7c12f3cb, 0xe08aa29f, + 0x7c116853, 0xe0848b7f, 0x7c0fdc8f, 0xe07e7473, 0x7c0e507e, 0xe0785d7b, + 0x7c0cc421, 0xe0724696, + 0x7c0b3777, 0xe06c2fc4, 0x7c09aa80, 0xe0661906, 0x7c081d3d, 0xe060025c, + 0x7c068fae, 0xe059ebc5, + 0x7c0501d2, 0xe053d541, 0x7c0373a9, 0xe04dbed1, 0x7c01e534, 0xe047a875, + 0x7c005673, 0xe041922c, + 0x7bfec765, 0xe03b7bf6, 0x7bfd380a, 0xe03565d5, 0x7bfba863, 0xe02f4fc6, + 0x7bfa1870, 0xe02939cc, + 0x7bf88830, 0xe02323e5, 0x7bf6f7a4, 0xe01d0e12, 0x7bf566cb, 0xe016f852, + 0x7bf3d5a6, 0xe010e2a7, + 0x7bf24434, 0xe00acd0e, 0x7bf0b276, 0xe004b78a, 0x7bef206b, 0xdffea219, + 0x7bed8e14, 0xdff88cbc, + 0x7bebfb70, 0xdff27773, 0x7bea6880, 0xdfec623e, 0x7be8d544, 0xdfe64d1c, + 0x7be741bb, 0xdfe0380e, + 0x7be5ade6, 0xdfda2314, 0x7be419c4, 0xdfd40e2e, 0x7be28556, 0xdfcdf95c, + 0x7be0f09b, 0xdfc7e49d, + 0x7bdf5b94, 0xdfc1cff3, 0x7bddc641, 0xdfbbbb5c, 0x7bdc30a1, 0xdfb5a6d9, + 0x7bda9ab5, 0xdfaf926a, + 0x7bd9047c, 0xdfa97e0f, 0x7bd76df7, 0xdfa369c8, 0x7bd5d726, 0xdf9d5595, + 0x7bd44008, 0xdf974176, + 0x7bd2a89e, 0xdf912d6b, 0x7bd110e8, 0xdf8b1974, 0x7bcf78e5, 0xdf850591, + 0x7bcde095, 0xdf7ef1c2, + 0x7bcc47fa, 0xdf78de07, 0x7bcaaf12, 0xdf72ca60, 0x7bc915dd, 0xdf6cb6cd, + 0x7bc77c5d, 0xdf66a34e, + 0x7bc5e290, 0xdf608fe4, 0x7bc44876, 0xdf5a7c8d, 0x7bc2ae10, 0xdf54694b, + 0x7bc1135e, 0xdf4e561c, + 0x7bbf7860, 0xdf484302, 0x7bbddd15, 0xdf422ffd, 0x7bbc417e, 0xdf3c1d0b, + 0x7bbaa59a, 0xdf360a2d, + 0x7bb9096b, 0xdf2ff764, 0x7bb76cef, 0xdf29e4af, 0x7bb5d026, 0xdf23d20e, + 0x7bb43311, 0xdf1dbf82, + 0x7bb295b0, 0xdf17ad0a, 0x7bb0f803, 0xdf119aa6, 0x7baf5a09, 0xdf0b8856, + 0x7badbbc3, 0xdf05761b, + 0x7bac1d31, 0xdeff63f4, 0x7baa7e53, 0xdef951e2, 0x7ba8df28, 0xdef33fe3, + 0x7ba73fb1, 0xdeed2dfa, + 0x7ba59fee, 0xdee71c24, 0x7ba3ffde, 0xdee10a63, 0x7ba25f82, 0xdedaf8b7, + 0x7ba0beda, 0xded4e71f, + 0x7b9f1de6, 0xdeced59b, 0x7b9d7ca5, 0xdec8c42c, 0x7b9bdb18, 0xdec2b2d1, + 0x7b9a393f, 0xdebca18b, + 0x7b989719, 0xdeb69059, 0x7b96f4a8, 0xdeb07f3c, 0x7b9551ea, 0xdeaa6e34, + 0x7b93aee0, 0xdea45d40, + 0x7b920b89, 0xde9e4c60, 0x7b9067e7, 0xde983b95, 0x7b8ec3f8, 0xde922adf, + 0x7b8d1fbd, 0xde8c1a3e, + 0x7b8b7b36, 0xde8609b1, 0x7b89d662, 0xde7ff938, 0x7b883143, 0xde79e8d5, + 0x7b868bd7, 0xde73d886, + 0x7b84e61f, 0xde6dc84b, 0x7b83401b, 0xde67b826, 0x7b8199ca, 0xde61a815, + 0x7b7ff32e, 0xde5b9819, + 0x7b7e4c45, 0xde558831, 0x7b7ca510, 0xde4f785f, 0x7b7afd8f, 0xde4968a1, + 0x7b7955c2, 0xde4358f8, + 0x7b77ada8, 0xde3d4964, 0x7b760542, 0xde3739e4, 0x7b745c91, 0xde312a7a, + 0x7b72b393, 0xde2b1b24, + 0x7b710a49, 0xde250be3, 0x7b6f60b2, 0xde1efcb7, 0x7b6db6d0, 0xde18eda0, + 0x7b6c0ca2, 0xde12de9e, + 0x7b6a6227, 0xde0ccfb1, 0x7b68b760, 0xde06c0d9, 0x7b670c4d, 0xde00b216, + 0x7b6560ee, 0xddfaa367, + 0x7b63b543, 0xddf494ce, 0x7b62094c, 0xddee8649, 0x7b605d09, 0xdde877da, + 0x7b5eb079, 0xdde26980, + 0x7b5d039e, 0xdddc5b3b, 0x7b5b5676, 0xddd64d0a, 0x7b59a902, 0xddd03eef, + 0x7b57fb42, 0xddca30e9, + 0x7b564d36, 0xddc422f8, 0x7b549ede, 0xddbe151d, 0x7b52f03a, 0xddb80756, + 0x7b51414a, 0xddb1f9a4, + 0x7b4f920e, 0xddabec08, 0x7b4de286, 0xdda5de81, 0x7b4c32b1, 0xdd9fd10f, + 0x7b4a8291, 0xdd99c3b2, + 0x7b48d225, 0xdd93b66a, 0x7b47216c, 0xdd8da938, 0x7b457068, 0xdd879c1b, + 0x7b43bf17, 0xdd818f13, + 0x7b420d7a, 0xdd7b8220, 0x7b405b92, 0xdd757543, 0x7b3ea95d, 0xdd6f687b, + 0x7b3cf6dc, 0xdd695bc9, + 0x7b3b4410, 0xdd634f2b, 0x7b3990f7, 0xdd5d42a3, 0x7b37dd92, 0xdd573631, + 0x7b3629e1, 0xdd5129d4, + 0x7b3475e5, 0xdd4b1d8c, 0x7b32c19c, 0xdd451159, 0x7b310d07, 0xdd3f053c, + 0x7b2f5826, 0xdd38f935, + 0x7b2da2fa, 0xdd32ed43, 0x7b2bed81, 0xdd2ce166, 0x7b2a37bc, 0xdd26d59f, + 0x7b2881ac, 0xdd20c9ed, + 0x7b26cb4f, 0xdd1abe51, 0x7b2514a6, 0xdd14b2ca, 0x7b235db2, 0xdd0ea759, + 0x7b21a671, 0xdd089bfe, + 0x7b1feee5, 0xdd0290b8, 0x7b1e370d, 0xdcfc8588, 0x7b1c7ee8, 0xdcf67a6d, + 0x7b1ac678, 0xdcf06f68, + 0x7b190dbc, 0xdcea6478, 0x7b1754b3, 0xdce4599e, 0x7b159b5f, 0xdcde4eda, + 0x7b13e1bf, 0xdcd8442b, + 0x7b1227d3, 0xdcd23993, 0x7b106d9b, 0xdccc2f0f, 0x7b0eb318, 0xdcc624a2, + 0x7b0cf848, 0xdcc01a4a, + 0x7b0b3d2c, 0xdcba1008, 0x7b0981c5, 0xdcb405dc, 0x7b07c612, 0xdcadfbc5, + 0x7b060a12, 0xdca7f1c5, + 0x7b044dc7, 0xdca1e7da, 0x7b029130, 0xdc9bde05, 0x7b00d44d, 0xdc95d446, + 0x7aff171e, 0xdc8fca9c, + 0x7afd59a4, 0xdc89c109, 0x7afb9bdd, 0xdc83b78b, 0x7af9ddcb, 0xdc7dae23, + 0x7af81f6c, 0xdc77a4d2, + 0x7af660c2, 0xdc719b96, 0x7af4a1cc, 0xdc6b9270, 0x7af2e28b, 0xdc658960, + 0x7af122fd, 0xdc5f8066, + 0x7aef6323, 0xdc597781, 0x7aeda2fe, 0xdc536eb3, 0x7aebe28d, 0xdc4d65fb, + 0x7aea21d0, 0xdc475d59, + 0x7ae860c7, 0xdc4154cd, 0x7ae69f73, 0xdc3b4c57, 0x7ae4ddd2, 0xdc3543f7, + 0x7ae31be6, 0xdc2f3bad, + 0x7ae159ae, 0xdc293379, 0x7adf972a, 0xdc232b5c, 0x7addd45b, 0xdc1d2354, + 0x7adc113f, 0xdc171b63, + 0x7ada4dd8, 0xdc111388, 0x7ad88a25, 0xdc0b0bc2, 0x7ad6c626, 0xdc050414, + 0x7ad501dc, 0xdbfefc7b, + 0x7ad33d45, 0xdbf8f4f8, 0x7ad17863, 0xdbf2ed8c, 0x7acfb336, 0xdbece636, + 0x7acdedbc, 0xdbe6def6, + 0x7acc27f7, 0xdbe0d7cd, 0x7aca61e6, 0xdbdad0b9, 0x7ac89b89, 0xdbd4c9bc, + 0x7ac6d4e0, 0xdbcec2d6, + 0x7ac50dec, 0xdbc8bc06, 0x7ac346ac, 0xdbc2b54c, 0x7ac17f20, 0xdbbcaea8, + 0x7abfb749, 0xdbb6a81b, + 0x7abdef25, 0xdbb0a1a4, 0x7abc26b7, 0xdbaa9b43, 0x7aba5dfc, 0xdba494f9, + 0x7ab894f6, 0xdb9e8ec6, + 0x7ab6cba4, 0xdb9888a8, 0x7ab50206, 0xdb9282a2, 0x7ab3381d, 0xdb8c7cb1, + 0x7ab16de7, 0xdb8676d8, + 0x7aafa367, 0xdb807114, 0x7aadd89a, 0xdb7a6b68, 0x7aac0d82, 0xdb7465d1, + 0x7aaa421e, 0xdb6e6052, + 0x7aa8766f, 0xdb685ae9, 0x7aa6aa74, 0xdb625596, 0x7aa4de2d, 0xdb5c505a, + 0x7aa3119a, 0xdb564b35, + 0x7aa144bc, 0xdb504626, 0x7a9f7793, 0xdb4a412e, 0x7a9daa1d, 0xdb443c4c, + 0x7a9bdc5c, 0xdb3e3781, + 0x7a9a0e50, 0xdb3832cd, 0x7a983ff7, 0xdb322e30, 0x7a967153, 0xdb2c29a9, + 0x7a94a264, 0xdb262539, + 0x7a92d329, 0xdb2020e0, 0x7a9103a2, 0xdb1a1c9d, 0x7a8f33d0, 0xdb141871, + 0x7a8d63b2, 0xdb0e145c, + 0x7a8b9348, 0xdb08105e, 0x7a89c293, 0xdb020c77, 0x7a87f192, 0xdafc08a6, + 0x7a862046, 0xdaf604ec, + 0x7a844eae, 0xdaf00149, 0x7a827ccb, 0xdae9fdbd, 0x7a80aa9c, 0xdae3fa48, + 0x7a7ed821, 0xdaddf6ea, + 0x7a7d055b, 0xdad7f3a2, 0x7a7b3249, 0xdad1f072, 0x7a795eec, 0xdacbed58, + 0x7a778b43, 0xdac5ea56, + 0x7a75b74f, 0xdabfe76a, 0x7a73e30f, 0xdab9e495, 0x7a720e84, 0xdab3e1d8, + 0x7a7039ad, 0xdaaddf31, + 0x7a6e648a, 0xdaa7dca1, 0x7a6c8f1c, 0xdaa1da29, 0x7a6ab963, 0xda9bd7c7, + 0x7a68e35e, 0xda95d57d, + 0x7a670d0d, 0xda8fd349, 0x7a653671, 0xda89d12d, 0x7a635f8a, 0xda83cf28, + 0x7a618857, 0xda7dcd3a, + 0x7a5fb0d8, 0xda77cb63, 0x7a5dd90e, 0xda71c9a3, 0x7a5c00f9, 0xda6bc7fa, + 0x7a5a2898, 0xda65c669, + 0x7a584feb, 0xda5fc4ef, 0x7a5676f3, 0xda59c38c, 0x7a549db0, 0xda53c240, + 0x7a52c421, 0xda4dc10b, + 0x7a50ea47, 0xda47bfee, 0x7a4f1021, 0xda41bee8, 0x7a4d35b0, 0xda3bbdf9, + 0x7a4b5af3, 0xda35bd22, + 0x7a497feb, 0xda2fbc61, 0x7a47a498, 0xda29bbb9, 0x7a45c8f9, 0xda23bb27, + 0x7a43ed0e, 0xda1dbaad, + 0x7a4210d8, 0xda17ba4a, 0x7a403457, 0xda11b9ff, 0x7a3e578b, 0xda0bb9cb, + 0x7a3c7a73, 0xda05b9ae, + 0x7a3a9d0f, 0xd9ffb9a9, 0x7a38bf60, 0xd9f9b9bb, 0x7a36e166, 0xd9f3b9e5, + 0x7a350321, 0xd9edba26, + 0x7a332490, 0xd9e7ba7f, 0x7a3145b3, 0xd9e1baef, 0x7a2f668c, 0xd9dbbb77, + 0x7a2d8719, 0xd9d5bc16, + 0x7a2ba75a, 0xd9cfbccd, 0x7a29c750, 0xd9c9bd9b, 0x7a27e6fb, 0xd9c3be81, + 0x7a26065b, 0xd9bdbf7e, + 0x7a24256f, 0xd9b7c094, 0x7a224437, 0xd9b1c1c0, 0x7a2062b5, 0xd9abc305, + 0x7a1e80e7, 0xd9a5c461, + 0x7a1c9ece, 0xd99fc5d4, 0x7a1abc69, 0xd999c75f, 0x7a18d9b9, 0xd993c902, + 0x7a16f6be, 0xd98dcabd, + 0x7a151378, 0xd987cc90, 0x7a132fe6, 0xd981ce7a, 0x7a114c09, 0xd97bd07c, + 0x7a0f67e0, 0xd975d295, + 0x7a0d836d, 0xd96fd4c7, 0x7a0b9eae, 0xd969d710, 0x7a09b9a4, 0xd963d971, + 0x7a07d44e, 0xd95ddbea, + 0x7a05eead, 0xd957de7a, 0x7a0408c1, 0xd951e123, 0x7a02228a, 0xd94be3e3, + 0x7a003c07, 0xd945e6bb, + 0x79fe5539, 0xd93fe9ab, 0x79fc6e20, 0xd939ecb3, 0x79fa86bc, 0xd933efd3, + 0x79f89f0c, 0xd92df30b, + 0x79f6b711, 0xd927f65b, 0x79f4cecb, 0xd921f9c3, 0x79f2e63a, 0xd91bfd43, + 0x79f0fd5d, 0xd91600da, + 0x79ef1436, 0xd910048a, 0x79ed2ac3, 0xd90a0852, 0x79eb4105, 0xd9040c32, + 0x79e956fb, 0xd8fe1029, + 0x79e76ca7, 0xd8f81439, 0x79e58207, 0xd8f21861, 0x79e3971c, 0xd8ec1ca1, + 0x79e1abe6, 0xd8e620fa, + 0x79dfc064, 0xd8e0256a, 0x79ddd498, 0xd8da29f2, 0x79dbe880, 0xd8d42e93, + 0x79d9fc1d, 0xd8ce334c, + 0x79d80f6f, 0xd8c8381d, 0x79d62276, 0xd8c23d06, 0x79d43532, 0xd8bc4207, + 0x79d247a2, 0xd8b64720, + 0x79d059c8, 0xd8b04c52, 0x79ce6ba2, 0xd8aa519c, 0x79cc7d31, 0xd8a456ff, + 0x79ca8e75, 0xd89e5c79, + 0x79c89f6e, 0xd898620c, 0x79c6b01b, 0xd89267b7, 0x79c4c07e, 0xd88c6d7b, + 0x79c2d095, 0xd8867356, + 0x79c0e062, 0xd880794b, 0x79beefe3, 0xd87a7f57, 0x79bcff19, 0xd874857c, + 0x79bb0e04, 0xd86e8bb9, + 0x79b91ca4, 0xd868920f, 0x79b72af9, 0xd862987d, 0x79b53903, 0xd85c9f04, + 0x79b346c2, 0xd856a5a3, + 0x79b15435, 0xd850ac5a, 0x79af615e, 0xd84ab32a, 0x79ad6e3c, 0xd844ba13, + 0x79ab7ace, 0xd83ec114, + 0x79a98715, 0xd838c82d, 0x79a79312, 0xd832cf5f, 0x79a59ec3, 0xd82cd6aa, + 0x79a3aa29, 0xd826de0d, + 0x79a1b545, 0xd820e589, 0x799fc015, 0xd81aed1d, 0x799dca9a, 0xd814f4ca, + 0x799bd4d4, 0xd80efc8f, + 0x7999dec4, 0xd809046e, 0x7997e868, 0xd8030c64, 0x7995f1c1, 0xd7fd1474, + 0x7993facf, 0xd7f71c9c, + 0x79920392, 0xd7f124dd, 0x79900c0a, 0xd7eb2d37, 0x798e1438, 0xd7e535a9, + 0x798c1c1a, 0xd7df3e34, + 0x798a23b1, 0xd7d946d8, 0x79882afd, 0xd7d34f94, 0x798631ff, 0xd7cd586a, + 0x798438b5, 0xd7c76158, + 0x79823f20, 0xd7c16a5f, 0x79804541, 0xd7bb737f, 0x797e4b16, 0xd7b57cb7, + 0x797c50a1, 0xd7af8609, + 0x797a55e0, 0xd7a98f73, 0x79785ad5, 0xd7a398f6, 0x79765f7f, 0xd79da293, + 0x797463de, 0xd797ac48, + 0x797267f2, 0xd791b616, 0x79706bbb, 0xd78bbffc, 0x796e6f39, 0xd785c9fc, + 0x796c726c, 0xd77fd415, + 0x796a7554, 0xd779de47, 0x796877f1, 0xd773e892, 0x79667a44, 0xd76df2f6, + 0x79647c4c, 0xd767fd72, + 0x79627e08, 0xd7620808, 0x79607f7a, 0xd75c12b7, 0x795e80a1, 0xd7561d7f, + 0x795c817d, 0xd7502860, + 0x795a820e, 0xd74a335b, 0x79588255, 0xd7443e6e, 0x79568250, 0xd73e499a, + 0x79548201, 0xd73854e0, + 0x79528167, 0xd732603f, 0x79508082, 0xd72c6bb6, 0x794e7f52, 0xd7267748, + 0x794c7dd7, 0xd72082f2, + 0x794a7c12, 0xd71a8eb5, 0x79487a01, 0xd7149a92, 0x794677a6, 0xd70ea688, + 0x79447500, 0xd708b297, + 0x79427210, 0xd702bec0, 0x79406ed4, 0xd6fccb01, 0x793e6b4e, 0xd6f6d75d, + 0x793c677d, 0xd6f0e3d1, + 0x793a6361, 0xd6eaf05f, 0x79385efa, 0xd6e4fd06, 0x79365a49, 0xd6df09c6, + 0x7934554d, 0xd6d916a0, + 0x79325006, 0xd6d32393, 0x79304a74, 0xd6cd30a0, 0x792e4497, 0xd6c73dc6, + 0x792c3e70, 0xd6c14b05, + 0x792a37fe, 0xd6bb585e, 0x79283141, 0xd6b565d0, 0x79262a3a, 0xd6af735c, + 0x792422e8, 0xd6a98101, + 0x79221b4b, 0xd6a38ec0, 0x79201363, 0xd69d9c98, 0x791e0b31, 0xd697aa8a, + 0x791c02b4, 0xd691b895, + 0x7919f9ec, 0xd68bc6ba, 0x7917f0d9, 0xd685d4f9, 0x7915e77c, 0xd67fe351, + 0x7913ddd4, 0xd679f1c2, + 0x7911d3e2, 0xd674004e, 0x790fc9a4, 0xd66e0ef2, 0x790dbf1d, 0xd6681db1, + 0x790bb44a, 0xd6622c89, + 0x7909a92d, 0xd65c3b7b, 0x79079dc5, 0xd6564a87, 0x79059212, 0xd65059ac, + 0x79038615, 0xd64a68eb, + 0x790179cd, 0xd6447844, 0x78ff6d3b, 0xd63e87b6, 0x78fd605d, 0xd6389742, + 0x78fb5336, 0xd632a6e8, + 0x78f945c3, 0xd62cb6a8, 0x78f73806, 0xd626c681, 0x78f529fe, 0xd620d675, + 0x78f31bac, 0xd61ae682, + 0x78f10d0f, 0xd614f6a9, 0x78eefe28, 0xd60f06ea, 0x78eceef6, 0xd6091745, + 0x78eadf79, 0xd60327b9, + 0x78e8cfb2, 0xd5fd3848, 0x78e6bfa0, 0xd5f748f0, 0x78e4af44, 0xd5f159b3, + 0x78e29e9d, 0xd5eb6a8f, + 0x78e08dab, 0xd5e57b85, 0x78de7c6f, 0xd5df8c96, 0x78dc6ae8, 0xd5d99dc0, + 0x78da5917, 0xd5d3af04, + 0x78d846fb, 0xd5cdc062, 0x78d63495, 0xd5c7d1db, 0x78d421e4, 0xd5c1e36d, + 0x78d20ee9, 0xd5bbf519, + 0x78cffba3, 0xd5b606e0, 0x78cde812, 0xd5b018c0, 0x78cbd437, 0xd5aa2abb, + 0x78c9c012, 0xd5a43cd0, + 0x78c7aba2, 0xd59e4eff, 0x78c596e7, 0xd5986148, 0x78c381e2, 0xd59273ab, + 0x78c16c93, 0xd58c8628, + 0x78bf56f9, 0xd58698c0, 0x78bd4114, 0xd580ab72, 0x78bb2ae5, 0xd57abe3d, + 0x78b9146c, 0xd574d124, + 0x78b6fda8, 0xd56ee424, 0x78b4e69a, 0xd568f73f, 0x78b2cf41, 0xd5630a74, + 0x78b0b79e, 0xd55d1dc3, + 0x78ae9fb0, 0xd557312d, 0x78ac8778, 0xd55144b0, 0x78aa6ef5, 0xd54b584f, + 0x78a85628, 0xd5456c07, + 0x78a63d11, 0xd53f7fda, 0x78a423af, 0xd53993c7, 0x78a20a03, 0xd533a7cf, + 0x789ff00c, 0xd52dbbf1, + 0x789dd5cb, 0xd527d02e, 0x789bbb3f, 0xd521e484, 0x7899a06a, 0xd51bf8f6, + 0x78978549, 0xd5160d82, + 0x789569df, 0xd5102228, 0x78934e2a, 0xd50a36e9, 0x7891322a, 0xd5044bc4, + 0x788f15e0, 0xd4fe60ba, + 0x788cf94c, 0xd4f875ca, 0x788adc6e, 0xd4f28af5, 0x7888bf45, 0xd4eca03a, + 0x7886a1d1, 0xd4e6b59a, + 0x78848414, 0xd4e0cb15, 0x7882660c, 0xd4dae0aa, 0x788047ba, 0xd4d4f65a, + 0x787e291d, 0xd4cf0c24, + 0x787c0a36, 0xd4c92209, 0x7879eb05, 0xd4c33809, 0x7877cb89, 0xd4bd4e23, + 0x7875abc3, 0xd4b76458, + 0x78738bb3, 0xd4b17aa8, 0x78716b59, 0xd4ab9112, 0x786f4ab4, 0xd4a5a798, + 0x786d29c5, 0xd49fbe37, + 0x786b088c, 0xd499d4f2, 0x7868e708, 0xd493ebc8, 0x7866c53a, 0xd48e02b8, + 0x7864a322, 0xd48819c3, + 0x786280bf, 0xd48230e9, 0x78605e13, 0xd47c4829, 0x785e3b1c, 0xd4765f85, + 0x785c17db, 0xd47076fb, + 0x7859f44f, 0xd46a8e8d, 0x7857d079, 0xd464a639, 0x7855ac5a, 0xd45ebe00, + 0x785387ef, 0xd458d5e2, + 0x7851633b, 0xd452eddf, 0x784f3e3c, 0xd44d05f6, 0x784d18f4, 0xd4471e29, + 0x784af361, 0xd4413677, + 0x7848cd83, 0xd43b4ee0, 0x7846a75c, 0xd4356763, 0x784480ea, 0xd42f8002, + 0x78425a2f, 0xd42998bc, + 0x78403329, 0xd423b191, 0x783e0bd9, 0xd41dca81, 0x783be43e, 0xd417e38c, + 0x7839bc5a, 0xd411fcb2, + 0x7837942b, 0xd40c15f3, 0x78356bb2, 0xd4062f4f, 0x783342ef, 0xd40048c6, + 0x783119e2, 0xd3fa6259, + 0x782ef08b, 0xd3f47c06, 0x782cc6ea, 0xd3ee95cf, 0x782a9cfe, 0xd3e8afb3, + 0x782872c8, 0xd3e2c9b2, + 0x78264849, 0xd3dce3cd, 0x78241d7f, 0xd3d6fe03, 0x7821f26b, 0xd3d11853, + 0x781fc70d, 0xd3cb32c0, + 0x781d9b65, 0xd3c54d47, 0x781b6f72, 0xd3bf67ea, 0x78194336, 0xd3b982a8, + 0x781716b0, 0xd3b39d81, + 0x7814e9df, 0xd3adb876, 0x7812bcc4, 0xd3a7d385, 0x78108f60, 0xd3a1eeb1, + 0x780e61b1, 0xd39c09f7, + 0x780c33b8, 0xd396255a, 0x780a0575, 0xd39040d7, 0x7807d6e9, 0xd38a5c70, + 0x7805a812, 0xd3847824, + 0x780378f1, 0xd37e93f4, 0x78014986, 0xd378afdf, 0x77ff19d1, 0xd372cbe6, + 0x77fce9d2, 0xd36ce808, + 0x77fab989, 0xd3670446, 0x77f888f6, 0xd361209f, 0x77f65819, 0xd35b3d13, + 0x77f426f2, 0xd35559a4, + 0x77f1f581, 0xd34f764f, 0x77efc3c5, 0xd3499317, 0x77ed91c0, 0xd343affa, + 0x77eb5f71, 0xd33dccf8, + 0x77e92cd9, 0xd337ea12, 0x77e6f9f6, 0xd3320748, 0x77e4c6c9, 0xd32c2499, + 0x77e29352, 0xd3264206, + 0x77e05f91, 0xd3205f8f, 0x77de2b86, 0xd31a7d33, 0x77dbf732, 0xd3149af3, + 0x77d9c293, 0xd30eb8cf, + 0x77d78daa, 0xd308d6c7, 0x77d55878, 0xd302f4da, 0x77d322fc, 0xd2fd1309, + 0x77d0ed35, 0xd2f73154, + 0x77ceb725, 0xd2f14fba, 0x77cc80cb, 0xd2eb6e3c, 0x77ca4a27, 0xd2e58cdb, + 0x77c81339, 0xd2dfab95, + 0x77c5dc01, 0xd2d9ca6a, 0x77c3a47f, 0xd2d3e95c, 0x77c16cb4, 0xd2ce0869, + 0x77bf349f, 0xd2c82793, + 0x77bcfc3f, 0xd2c246d8, 0x77bac396, 0xd2bc6639, 0x77b88aa3, 0xd2b685b6, + 0x77b65166, 0xd2b0a54f, + 0x77b417df, 0xd2aac504, 0x77b1de0f, 0xd2a4e4d5, 0x77afa3f5, 0xd29f04c2, + 0x77ad6990, 0xd29924cb, + 0x77ab2ee2, 0xd29344f0, 0x77a8f3ea, 0xd28d6531, 0x77a6b8a9, 0xd287858e, + 0x77a47d1d, 0xd281a607, + 0x77a24148, 0xd27bc69c, 0x77a00529, 0xd275e74d, 0x779dc8c0, 0xd270081b, + 0x779b8c0e, 0xd26a2904, + 0x77994f11, 0xd2644a0a, 0x779711cb, 0xd25e6b2b, 0x7794d43b, 0xd2588c69, + 0x77929661, 0xd252adc3, + 0x7790583e, 0xd24ccf39, 0x778e19d0, 0xd246f0cb, 0x778bdb19, 0xd241127a, + 0x77899c19, 0xd23b3444, + 0x77875cce, 0xd235562b, 0x77851d3a, 0xd22f782f, 0x7782dd5c, 0xd2299a4e, + 0x77809d35, 0xd223bc8a, + 0x777e5cc3, 0xd21ddee2, 0x777c1c08, 0xd2180156, 0x7779db03, 0xd21223e7, + 0x777799b5, 0xd20c4694, + 0x7775581d, 0xd206695d, 0x7773163b, 0xd2008c43, 0x7770d40f, 0xd1faaf45, + 0x776e919a, 0xd1f4d263, + 0x776c4edb, 0xd1eef59e, 0x776a0bd3, 0xd1e918f5, 0x7767c880, 0xd1e33c69, + 0x776584e5, 0xd1dd5ff9, + 0x776340ff, 0xd1d783a6, 0x7760fcd0, 0xd1d1a76f, 0x775eb857, 0xd1cbcb54, + 0x775c7395, 0xd1c5ef56, + 0x775a2e89, 0xd1c01375, 0x7757e933, 0xd1ba37b0, 0x7755a394, 0xd1b45c08, + 0x77535dab, 0xd1ae807c, + 0x77511778, 0xd1a8a50d, 0x774ed0fc, 0xd1a2c9ba, 0x774c8a36, 0xd19cee84, + 0x774a4327, 0xd197136b, + 0x7747fbce, 0xd191386e, 0x7745b42c, 0xd18b5d8e, 0x77436c40, 0xd18582ca, + 0x7741240a, 0xd17fa823, + 0x773edb8b, 0xd179cd99, 0x773c92c2, 0xd173f32c, 0x773a49b0, 0xd16e18db, + 0x77380054, 0xd1683ea7, + 0x7735b6af, 0xd1626490, 0x77336cc0, 0xd15c8a95, 0x77312287, 0xd156b0b7, + 0x772ed805, 0xd150d6f6, + 0x772c8d3a, 0xd14afd52, 0x772a4225, 0xd14523cb, 0x7727f6c6, 0xd13f4a60, + 0x7725ab1f, 0xd1397113, + 0x77235f2d, 0xd13397e2, 0x772112f2, 0xd12dbece, 0x771ec66e, 0xd127e5d7, + 0x771c79a0, 0xd1220cfc, + 0x771a2c88, 0xd11c343f, 0x7717df27, 0xd1165b9f, 0x7715917d, 0xd110831b, + 0x77134389, 0xd10aaab5, + 0x7710f54c, 0xd104d26b, 0x770ea6c5, 0xd0fefa3f, 0x770c57f5, 0xd0f9222f, + 0x770a08dc, 0xd0f34a3d, + 0x7707b979, 0xd0ed7267, 0x770569cc, 0xd0e79aaf, 0x770319d6, 0xd0e1c313, + 0x7700c997, 0xd0dbeb95, + 0x76fe790e, 0xd0d61434, 0x76fc283c, 0xd0d03cf0, 0x76f9d721, 0xd0ca65c9, + 0x76f785bc, 0xd0c48ebf, + 0x76f5340e, 0xd0beb7d2, 0x76f2e216, 0xd0b8e102, 0x76f08fd5, 0xd0b30a50, + 0x76ee3d4b, 0xd0ad33ba, + 0x76ebea77, 0xd0a75d42, 0x76e9975a, 0xd0a186e7, 0x76e743f4, 0xd09bb0aa, + 0x76e4f044, 0xd095da89, + 0x76e29c4b, 0xd0900486, 0x76e04808, 0xd08a2ea0, 0x76ddf37c, 0xd08458d7, + 0x76db9ea7, 0xd07e832c, + 0x76d94989, 0xd078ad9e, 0x76d6f421, 0xd072d82d, 0x76d49e70, 0xd06d02da, + 0x76d24876, 0xd0672da3, + 0x76cff232, 0xd061588b, 0x76cd9ba5, 0xd05b838f, 0x76cb44cf, 0xd055aeb1, + 0x76c8edb0, 0xd04fd9f1, + 0x76c69647, 0xd04a054e, 0x76c43e95, 0xd04430c8, 0x76c1e699, 0xd03e5c60, + 0x76bf8e55, 0xd0388815, + 0x76bd35c7, 0xd032b3e7, 0x76badcf0, 0xd02cdfd8, 0x76b883d0, 0xd0270be5, + 0x76b62a66, 0xd0213810, + 0x76b3d0b4, 0xd01b6459, 0x76b176b8, 0xd01590bf, 0x76af1c72, 0xd00fbd43, + 0x76acc1e4, 0xd009e9e4, + 0x76aa670d, 0xd00416a3, 0x76a80bec, 0xcffe4380, 0x76a5b082, 0xcff8707a, + 0x76a354cf, 0xcff29d92, + 0x76a0f8d2, 0xcfeccac7, 0x769e9c8d, 0xcfe6f81a, 0x769c3ffe, 0xcfe1258b, + 0x7699e326, 0xcfdb531a, + 0x76978605, 0xcfd580c6, 0x7695289b, 0xcfcfae8f, 0x7692cae8, 0xcfc9dc77, + 0x76906ceb, 0xcfc40a7c, + 0x768e0ea6, 0xcfbe389f, 0x768bb017, 0xcfb866e0, 0x7689513f, 0xcfb2953f, + 0x7686f21e, 0xcfacc3bb, + 0x768492b4, 0xcfa6f255, 0x76823301, 0xcfa1210d, 0x767fd304, 0xcf9b4fe3, + 0x767d72bf, 0xcf957ed7, + 0x767b1231, 0xcf8fade9, 0x7678b159, 0xcf89dd18, 0x76765038, 0xcf840c65, + 0x7673eecf, 0xcf7e3bd1, + 0x76718d1c, 0xcf786b5a, 0x766f2b20, 0xcf729b01, 0x766cc8db, 0xcf6ccac6, + 0x766a664d, 0xcf66faa9, + 0x76680376, 0xcf612aaa, 0x7665a056, 0xcf5b5ac9, 0x76633ced, 0xcf558b06, + 0x7660d93b, 0xcf4fbb61, + 0x765e7540, 0xcf49ebda, 0x765c10fc, 0xcf441c71, 0x7659ac6f, 0xcf3e4d26, + 0x76574798, 0xcf387dfa, + 0x7654e279, 0xcf32aeeb, 0x76527d11, 0xcf2cdffa, 0x76501760, 0xcf271128, + 0x764db166, 0xcf214274, + 0x764b4b23, 0xcf1b73de, 0x7648e497, 0xcf15a566, 0x76467dc2, 0xcf0fd70c, + 0x764416a4, 0xcf0a08d0, + 0x7641af3d, 0xcf043ab3, 0x763f478d, 0xcefe6cb3, 0x763cdf94, 0xcef89ed2, + 0x763a7752, 0xcef2d110, + 0x76380ec8, 0xceed036b, 0x7635a5f4, 0xcee735e5, 0x76333cd8, 0xcee1687d, + 0x7630d372, 0xcedb9b33, + 0x762e69c4, 0xced5ce08, 0x762bffcd, 0xced000fb, 0x7629958c, 0xceca340c, + 0x76272b03, 0xcec4673c, + 0x7624c031, 0xcebe9a8a, 0x76225517, 0xceb8cdf7, 0x761fe9b3, 0xceb30181, + 0x761d7e06, 0xcead352b, + 0x761b1211, 0xcea768f2, 0x7618a5d3, 0xcea19cd8, 0x7616394c, 0xce9bd0dd, + 0x7613cc7c, 0xce960500, + 0x76115f63, 0xce903942, 0x760ef201, 0xce8a6da2, 0x760c8457, 0xce84a220, + 0x760a1664, 0xce7ed6bd, + 0x7607a828, 0xce790b79, 0x760539a3, 0xce734053, 0x7602cad5, 0xce6d754c, + 0x76005bbf, 0xce67aa63, + 0x75fdec60, 0xce61df99, 0x75fb7cb8, 0xce5c14ed, 0x75f90cc7, 0xce564a60, + 0x75f69c8d, 0xce507ff2, + 0x75f42c0b, 0xce4ab5a2, 0x75f1bb40, 0xce44eb71, 0x75ef4a2c, 0xce3f215f, + 0x75ecd8cf, 0xce39576c, + 0x75ea672a, 0xce338d97, 0x75e7f53c, 0xce2dc3e1, 0x75e58305, 0xce27fa49, + 0x75e31086, 0xce2230d0, + 0x75e09dbd, 0xce1c6777, 0x75de2aac, 0xce169e3b, 0x75dbb753, 0xce10d51f, + 0x75d943b0, 0xce0b0c21, + 0x75d6cfc5, 0xce054343, 0x75d45b92, 0xcdff7a83, 0x75d1e715, 0xcdf9b1e2, + 0x75cf7250, 0xcdf3e95f, + 0x75ccfd42, 0xcdee20fc, 0x75ca87ec, 0xcde858b8, 0x75c8124d, 0xcde29092, + 0x75c59c65, 0xcddcc88b, + 0x75c32634, 0xcdd700a4, 0x75c0afbb, 0xcdd138db, 0x75be38fa, 0xcdcb7131, + 0x75bbc1ef, 0xcdc5a9a6, + 0x75b94a9c, 0xcdbfe23a, 0x75b6d301, 0xcdba1aee, 0x75b45b1d, 0xcdb453c0, + 0x75b1e2f0, 0xcdae8cb1, + 0x75af6a7b, 0xcda8c5c1, 0x75acf1bd, 0xcda2fef0, 0x75aa78b6, 0xcd9d383f, + 0x75a7ff67, 0xcd9771ac, + 0x75a585cf, 0xcd91ab39, 0x75a30bef, 0xcd8be4e4, 0x75a091c6, 0xcd861eaf, + 0x759e1755, 0xcd805899, + 0x759b9c9b, 0xcd7a92a2, 0x75992198, 0xcd74ccca, 0x7596a64d, 0xcd6f0711, + 0x75942ab9, 0xcd694178, + 0x7591aedd, 0xcd637bfe, 0x758f32b9, 0xcd5db6a3, 0x758cb64c, 0xcd57f167, + 0x758a3996, 0xcd522c4a, + 0x7587bc98, 0xcd4c674d, 0x75853f51, 0xcd46a26f, 0x7582c1c2, 0xcd40ddb0, + 0x758043ea, 0xcd3b1911, + 0x757dc5ca, 0xcd355491, 0x757b4762, 0xcd2f9030, 0x7578c8b0, 0xcd29cbee, + 0x757649b7, 0xcd2407cc, + 0x7573ca75, 0xcd1e43ca, 0x75714aea, 0xcd187fe6, 0x756ecb18, 0xcd12bc22, + 0x756c4afc, 0xcd0cf87e, + 0x7569ca99, 0xcd0734f9, 0x756749ec, 0xcd017193, 0x7564c8f8, 0xccfbae4d, + 0x756247bb, 0xccf5eb26, + 0x755fc635, 0xccf0281f, 0x755d4467, 0xccea6538, 0x755ac251, 0xcce4a26f, + 0x75583ff3, 0xccdedfc7, + 0x7555bd4c, 0xccd91d3d, 0x75533a5c, 0xccd35ad4, 0x7550b725, 0xcccd988a, + 0x754e33a4, 0xccc7d65f, + 0x754bafdc, 0xccc21455, 0x75492bcb, 0xccbc5269, 0x7546a772, 0xccb6909e, + 0x754422d0, 0xccb0cef2, + 0x75419de7, 0xccab0d65, 0x753f18b4, 0xcca54bf9, 0x753c933a, 0xcc9f8aac, + 0x753a0d77, 0xcc99c97e, + 0x7537876c, 0xcc940871, 0x75350118, 0xcc8e4783, 0x75327a7d, 0xcc8886b5, + 0x752ff399, 0xcc82c607, + 0x752d6c6c, 0xcc7d0578, 0x752ae4f8, 0xcc774509, 0x75285d3b, 0xcc7184ba, + 0x7525d536, 0xcc6bc48b, + 0x75234ce8, 0xcc66047b, 0x7520c453, 0xcc60448c, 0x751e3b75, 0xcc5a84bc, + 0x751bb24f, 0xcc54c50c, + 0x751928e0, 0xcc4f057c, 0x75169f2a, 0xcc49460c, 0x7514152b, 0xcc4386bc, + 0x75118ae4, 0xcc3dc78b, + 0x750f0054, 0xcc38087b, 0x750c757d, 0xcc32498a, 0x7509ea5d, 0xcc2c8aba, + 0x75075ef5, 0xcc26cc09, + 0x7504d345, 0xcc210d79, 0x7502474d, 0xcc1b4f08, 0x74ffbb0d, 0xcc1590b8, + 0x74fd2e84, 0xcc0fd287, + 0x74faa1b3, 0xcc0a1477, 0x74f8149a, 0xcc045686, 0x74f58739, 0xcbfe98b6, + 0x74f2f990, 0xcbf8db05, + 0x74f06b9e, 0xcbf31d75, 0x74eddd65, 0xcbed6005, 0x74eb4ee3, 0xcbe7a2b5, + 0x74e8c01a, 0xcbe1e585, + 0x74e63108, 0xcbdc2876, 0x74e3a1ae, 0xcbd66b86, 0x74e1120c, 0xcbd0aeb7, + 0x74de8221, 0xcbcaf208, + 0x74dbf1ef, 0xcbc53579, 0x74d96175, 0xcbbf790a, 0x74d6d0b2, 0xcbb9bcbb, + 0x74d43fa8, 0xcbb4008d, + 0x74d1ae55, 0xcbae447f, 0x74cf1cbb, 0xcba88891, 0x74cc8ad8, 0xcba2ccc4, + 0x74c9f8ad, 0xcb9d1117, + 0x74c7663a, 0xcb97558a, 0x74c4d380, 0xcb919a1d, 0x74c2407d, 0xcb8bded1, + 0x74bfad32, 0xcb8623a5, + 0x74bd199f, 0xcb80689a, 0x74ba85c4, 0xcb7aadaf, 0x74b7f1a1, 0xcb74f2e4, + 0x74b55d36, 0xcb6f383a, + 0x74b2c884, 0xcb697db0, 0x74b03389, 0xcb63c347, 0x74ad9e46, 0xcb5e08fe, + 0x74ab08bb, 0xcb584ed6, + 0x74a872e8, 0xcb5294ce, 0x74a5dccd, 0xcb4cdae6, 0x74a3466b, 0xcb47211f, + 0x74a0afc0, 0xcb416779, + 0x749e18cd, 0xcb3badf3, 0x749b8193, 0xcb35f48d, 0x7498ea11, 0xcb303b49, + 0x74965246, 0xcb2a8224, + 0x7493ba34, 0xcb24c921, 0x749121da, 0xcb1f103e, 0x748e8938, 0xcb19577b, + 0x748bf04d, 0xcb139ed9, + 0x7489571c, 0xcb0de658, 0x7486bda2, 0xcb082df8, 0x748423e0, 0xcb0275b8, + 0x748189d7, 0xcafcbd99, + 0x747eef85, 0xcaf7059a, 0x747c54ec, 0xcaf14dbd, 0x7479ba0b, 0xcaeb9600, + 0x74771ee2, 0xcae5de64, + 0x74748371, 0xcae026e8, 0x7471e7b8, 0xcada6f8d, 0x746f4bb8, 0xcad4b853, + 0x746caf70, 0xcacf013a, + 0x746a12df, 0xcac94a42, 0x74677608, 0xcac3936b, 0x7464d8e8, 0xcabddcb4, + 0x74623b80, 0xcab8261e, + 0x745f9dd1, 0xcab26fa9, 0x745cffda, 0xcaacb955, 0x745a619b, 0xcaa70322, + 0x7457c314, 0xcaa14d10, + 0x74552446, 0xca9b971e, 0x74528530, 0xca95e14e, 0x744fe5d2, 0xca902b9f, + 0x744d462c, 0xca8a7610, + 0x744aa63f, 0xca84c0a3, 0x7448060a, 0xca7f0b56, 0x7445658d, 0xca79562b, + 0x7442c4c8, 0xca73a120, + 0x744023bc, 0xca6dec37, 0x743d8268, 0xca68376e, 0x743ae0cc, 0xca6282c7, + 0x74383ee9, 0xca5cce40, + 0x74359cbd, 0xca5719db, 0x7432fa4b, 0xca516597, 0x74305790, 0xca4bb174, + 0x742db48e, 0xca45fd72, + 0x742b1144, 0xca404992, 0x74286db3, 0xca3a95d2, 0x7425c9da, 0xca34e234, + 0x742325b9, 0xca2f2eb6, + 0x74208150, 0xca297b5a, 0x741ddca0, 0xca23c820, 0x741b37a9, 0xca1e1506, + 0x74189269, 0xca18620e, + 0x7415ece2, 0xca12af37, 0x74134714, 0xca0cfc81, 0x7410a0fe, 0xca0749ec, + 0x740dfaa0, 0xca019779, + 0x740b53fb, 0xc9fbe527, 0x7408ad0e, 0xc9f632f6, 0x740605d9, 0xc9f080e7, + 0x74035e5d, 0xc9eacef9, + 0x7400b69a, 0xc9e51d2d, 0x73fe0e8f, 0xc9df6b81, 0x73fb663c, 0xc9d9b9f7, + 0x73f8bda2, 0xc9d4088f, + 0x73f614c0, 0xc9ce5748, 0x73f36b97, 0xc9c8a622, 0x73f0c226, 0xc9c2f51e, + 0x73ee186e, 0xc9bd443c, + 0x73eb6e6e, 0xc9b7937a, 0x73e8c426, 0xc9b1e2db, 0x73e61997, 0xc9ac325d, + 0x73e36ec1, 0xc9a68200, + 0x73e0c3a3, 0xc9a0d1c5, 0x73de183e, 0xc99b21ab, 0x73db6c91, 0xc99571b3, + 0x73d8c09d, 0xc98fc1dc, + 0x73d61461, 0xc98a1227, 0x73d367de, 0xc9846294, 0x73d0bb13, 0xc97eb322, + 0x73ce0e01, 0xc97903d2, + 0x73cb60a8, 0xc97354a4, 0x73c8b307, 0xc96da597, 0x73c6051f, 0xc967f6ac, + 0x73c356ef, 0xc96247e2, + 0x73c0a878, 0xc95c993a, 0x73bdf9b9, 0xc956eab4, 0x73bb4ab3, 0xc9513c50, + 0x73b89b66, 0xc94b8e0d, + 0x73b5ebd1, 0xc945dfec, 0x73b33bf5, 0xc94031ed, 0x73b08bd1, 0xc93a8410, + 0x73addb67, 0xc934d654, + 0x73ab2ab4, 0xc92f28ba, 0x73a879bb, 0xc9297b42, 0x73a5c87a, 0xc923cdec, + 0x73a316f2, 0xc91e20b8, + 0x73a06522, 0xc91873a5, 0x739db30b, 0xc912c6b5, 0x739b00ad, 0xc90d19e6, + 0x73984e07, 0xc9076d39, + 0x73959b1b, 0xc901c0ae, 0x7392e7e6, 0xc8fc1445, 0x7390346b, 0xc8f667fe, + 0x738d80a8, 0xc8f0bbd9, + 0x738acc9e, 0xc8eb0fd6, 0x7388184d, 0xc8e563f5, 0x738563b5, 0xc8dfb836, + 0x7382aed5, 0xc8da0c99, + 0x737ff9ae, 0xc8d4611d, 0x737d4440, 0xc8ceb5c4, 0x737a8e8a, 0xc8c90a8d, + 0x7377d88d, 0xc8c35f78, + 0x73752249, 0xc8bdb485, 0x73726bbe, 0xc8b809b4, 0x736fb4ec, 0xc8b25f06, + 0x736cfdd2, 0xc8acb479, + 0x736a4671, 0xc8a70a0e, 0x73678ec9, 0xc8a15fc6, 0x7364d6da, 0xc89bb5a0, + 0x73621ea4, 0xc8960b9c, + 0x735f6626, 0xc89061ba, 0x735cad61, 0xc88ab7fa, 0x7359f456, 0xc8850e5d, + 0x73573b03, 0xc87f64e2, + 0x73548168, 0xc879bb89, 0x7351c787, 0xc8741252, 0x734f0d5f, 0xc86e693d, + 0x734c52ef, 0xc868c04b, + 0x73499838, 0xc863177b, 0x7346dd3a, 0xc85d6ece, 0x734421f6, 0xc857c642, + 0x7341666a, 0xc8521dd9, + 0x733eaa96, 0xc84c7593, 0x733bee7c, 0xc846cd6e, 0x7339321b, 0xc841256d, + 0x73367572, 0xc83b7d8d, + 0x7333b883, 0xc835d5d0, 0x7330fb4d, 0xc8302e35, 0x732e3dcf, 0xc82a86bd, + 0x732b800a, 0xc824df67, + 0x7328c1ff, 0xc81f3834, 0x732603ac, 0xc8199123, 0x73234512, 0xc813ea35, + 0x73208632, 0xc80e4369, + 0x731dc70a, 0xc8089cbf, 0x731b079b, 0xc802f638, 0x731847e5, 0xc7fd4fd4, + 0x731587e8, 0xc7f7a992, + 0x7312c7a5, 0xc7f20373, 0x7310071a, 0xc7ec5d76, 0x730d4648, 0xc7e6b79c, + 0x730a8530, 0xc7e111e5, + 0x7307c3d0, 0xc7db6c50, 0x73050229, 0xc7d5c6de, 0x7302403c, 0xc7d0218e, + 0x72ff7e07, 0xc7ca7c61, + 0x72fcbb8c, 0xc7c4d757, 0x72f9f8c9, 0xc7bf3270, 0x72f735c0, 0xc7b98dab, + 0x72f47270, 0xc7b3e909, + 0x72f1aed9, 0xc7ae4489, 0x72eeeafb, 0xc7a8a02c, 0x72ec26d6, 0xc7a2fbf3, + 0x72e9626a, 0xc79d57db, + 0x72e69db7, 0xc797b3e7, 0x72e3d8be, 0xc7921015, 0x72e1137d, 0xc78c6c67, + 0x72de4df6, 0xc786c8db, + 0x72db8828, 0xc7812572, 0x72d8c213, 0xc77b822b, 0x72d5fbb7, 0xc775df08, + 0x72d33514, 0xc7703c08, + 0x72d06e2b, 0xc76a992a, 0x72cda6fb, 0xc764f66f, 0x72cadf83, 0xc75f53d7, + 0x72c817c6, 0xc759b163, + 0x72c54fc1, 0xc7540f11, 0x72c28775, 0xc74e6ce2, 0x72bfbee3, 0xc748cad6, + 0x72bcf60a, 0xc74328ed, + 0x72ba2cea, 0xc73d8727, 0x72b76383, 0xc737e584, 0x72b499d6, 0xc7324404, + 0x72b1cfe1, 0xc72ca2a7, + 0x72af05a7, 0xc727016d, 0x72ac3b25, 0xc7216056, 0x72a9705c, 0xc71bbf62, + 0x72a6a54d, 0xc7161e92, + 0x72a3d9f7, 0xc7107de4, 0x72a10e5b, 0xc70add5a, 0x729e4277, 0xc7053cf2, + 0x729b764d, 0xc6ff9cae, + 0x7298a9dd, 0xc6f9fc8d, 0x7295dd25, 0xc6f45c8f, 0x72931027, 0xc6eebcb5, + 0x729042e3, 0xc6e91cfd, + 0x728d7557, 0xc6e37d69, 0x728aa785, 0xc6ddddf8, 0x7287d96c, 0xc6d83eab, + 0x72850b0d, 0xc6d29f80, + 0x72823c67, 0xc6cd0079, 0x727f6d7a, 0xc6c76195, 0x727c9e47, 0xc6c1c2d4, + 0x7279cecd, 0xc6bc2437, + 0x7276ff0d, 0xc6b685bd, 0x72742f05, 0xc6b0e767, 0x72715eb8, 0xc6ab4933, + 0x726e8e23, 0xc6a5ab23, + 0x726bbd48, 0xc6a00d37, 0x7268ec27, 0xc69a6f6e, 0x72661abf, 0xc694d1c8, + 0x72634910, 0xc68f3446, + 0x7260771b, 0xc68996e7, 0x725da4df, 0xc683f9ab, 0x725ad25d, 0xc67e5c93, + 0x7257ff94, 0xc678bf9f, + 0x72552c85, 0xc67322ce, 0x7252592f, 0xc66d8620, 0x724f8593, 0xc667e996, + 0x724cb1b0, 0xc6624d30, + 0x7249dd86, 0xc65cb0ed, 0x72470916, 0xc65714cd, 0x72443460, 0xc65178d1, + 0x72415f63, 0xc64bdcf9, + 0x723e8a20, 0xc6464144, 0x723bb496, 0xc640a5b3, 0x7238dec5, 0xc63b0a46, + 0x723608af, 0xc6356efc, + 0x72333251, 0xc62fd3d6, 0x72305bae, 0xc62a38d4, 0x722d84c4, 0xc6249df5, + 0x722aad93, 0xc61f033a, + 0x7227d61c, 0xc61968a2, 0x7224fe5f, 0xc613ce2f, 0x7222265b, 0xc60e33df, + 0x721f4e11, 0xc60899b2, + 0x721c7580, 0xc602ffaa, 0x72199ca9, 0xc5fd65c5, 0x7216c38c, 0xc5f7cc04, + 0x7213ea28, 0xc5f23267, + 0x7211107e, 0xc5ec98ee, 0x720e368d, 0xc5e6ff98, 0x720b5c57, 0xc5e16667, + 0x720881d9, 0xc5dbcd59, + 0x7205a716, 0xc5d6346f, 0x7202cc0c, 0xc5d09ba9, 0x71fff0bc, 0xc5cb0307, + 0x71fd1525, 0xc5c56a89, + 0x71fa3949, 0xc5bfd22e, 0x71f75d25, 0xc5ba39f8, 0x71f480bc, 0xc5b4a1e5, + 0x71f1a40c, 0xc5af09f7, + 0x71eec716, 0xc5a9722c, 0x71ebe9da, 0xc5a3da86, 0x71e90c57, 0xc59e4303, + 0x71e62e8f, 0xc598aba5, + 0x71e35080, 0xc593146a, 0x71e0722a, 0xc58d7d54, 0x71dd938f, 0xc587e661, + 0x71dab4ad, 0xc5824f93, + 0x71d7d585, 0xc57cb8e9, 0x71d4f617, 0xc5772263, 0x71d21662, 0xc5718c00, + 0x71cf3667, 0xc56bf5c2, + 0x71cc5626, 0xc5665fa9, 0x71c9759f, 0xc560c9b3, 0x71c694d2, 0xc55b33e2, + 0x71c3b3bf, 0xc5559e34, + 0x71c0d265, 0xc55008ab, 0x71bdf0c5, 0xc54a7346, 0x71bb0edf, 0xc544de05, + 0x71b82cb3, 0xc53f48e9, + 0x71b54a41, 0xc539b3f1, 0x71b26788, 0xc5341f1d, 0x71af848a, 0xc52e8a6d, + 0x71aca145, 0xc528f5e1, + 0x71a9bdba, 0xc523617a, 0x71a6d9e9, 0xc51dcd37, 0x71a3f5d2, 0xc5183919, + 0x71a11175, 0xc512a51f, + 0x719e2cd2, 0xc50d1149, 0x719b47e9, 0xc5077d97, 0x719862b9, 0xc501ea0a, + 0x71957d44, 0xc4fc56a2, + 0x71929789, 0xc4f6c35d, 0x718fb187, 0xc4f1303d, 0x718ccb3f, 0xc4eb9d42, + 0x7189e4b2, 0xc4e60a6b, + 0x7186fdde, 0xc4e077b8, 0x718416c4, 0xc4dae52a, 0x71812f65, 0xc4d552c1, + 0x717e47bf, 0xc4cfc07c, + 0x717b5fd3, 0xc4ca2e5b, 0x717877a1, 0xc4c49c5f, 0x71758f29, 0xc4bf0a87, + 0x7172a66c, 0xc4b978d4, + 0x716fbd68, 0xc4b3e746, 0x716cd41e, 0xc4ae55dc, 0x7169ea8f, 0xc4a8c497, + 0x716700b9, 0xc4a33376, + 0x7164169d, 0xc49da27a, 0x71612c3c, 0xc49811a3, 0x715e4194, 0xc49280f0, + 0x715b56a7, 0xc48cf062, + 0x71586b74, 0xc4875ff9, 0x71557ffa, 0xc481cfb4, 0x7152943b, 0xc47c3f94, + 0x714fa836, 0xc476af98, + 0x714cbbeb, 0xc4711fc2, 0x7149cf5a, 0xc46b9010, 0x7146e284, 0xc4660083, + 0x7143f567, 0xc460711b, + 0x71410805, 0xc45ae1d7, 0x713e1a5c, 0xc45552b8, 0x713b2c6e, 0xc44fc3be, + 0x71383e3a, 0xc44a34e9, + 0x71354fc0, 0xc444a639, 0x71326101, 0xc43f17ad, 0x712f71fb, 0xc4398947, + 0x712c82b0, 0xc433fb05, + 0x7129931f, 0xc42e6ce8, 0x7126a348, 0xc428def0, 0x7123b32b, 0xc423511d, + 0x7120c2c8, 0xc41dc36f, + 0x711dd220, 0xc41835e6, 0x711ae132, 0xc412a882, 0x7117effe, 0xc40d1b42, + 0x7114fe84, 0xc4078e28, + 0x71120cc5, 0xc4020133, 0x710f1ac0, 0xc3fc7462, 0x710c2875, 0xc3f6e7b7, + 0x710935e4, 0xc3f15b31, + 0x7106430e, 0xc3ebced0, 0x71034ff2, 0xc3e64294, 0x71005c90, 0xc3e0b67d, + 0x70fd68e9, 0xc3db2a8b, + 0x70fa74fc, 0xc3d59ebe, 0x70f780c9, 0xc3d01316, 0x70f48c50, 0xc3ca8793, + 0x70f19792, 0xc3c4fc36, + 0x70eea28e, 0xc3bf70fd, 0x70ebad45, 0xc3b9e5ea, 0x70e8b7b5, 0xc3b45afc, + 0x70e5c1e1, 0xc3aed034, + 0x70e2cbc6, 0xc3a94590, 0x70dfd566, 0xc3a3bb12, 0x70dcdec0, 0xc39e30b8, + 0x70d9e7d5, 0xc398a685, + 0x70d6f0a4, 0xc3931c76, 0x70d3f92d, 0xc38d928d, 0x70d10171, 0xc38808c9, + 0x70ce096f, 0xc3827f2a, + 0x70cb1128, 0xc37cf5b0, 0x70c8189b, 0xc3776c5c, 0x70c51fc8, 0xc371e32d, + 0x70c226b0, 0xc36c5a24, + 0x70bf2d53, 0xc366d140, 0x70bc33b0, 0xc3614881, 0x70b939c7, 0xc35bbfe8, + 0x70b63f99, 0xc3563774, + 0x70b34525, 0xc350af26, 0x70b04a6b, 0xc34b26fc, 0x70ad4f6d, 0xc3459ef9, + 0x70aa5428, 0xc340171b, + 0x70a7589f, 0xc33a8f62, 0x70a45ccf, 0xc33507cf, 0x70a160ba, 0xc32f8061, + 0x709e6460, 0xc329f919, + 0x709b67c0, 0xc32471f7, 0x70986adb, 0xc31eeaf9, 0x70956db1, 0xc3196422, + 0x70927041, 0xc313dd70, + 0x708f728b, 0xc30e56e4, 0x708c7490, 0xc308d07d, 0x70897650, 0xc3034a3c, + 0x708677ca, 0xc2fdc420, + 0x708378ff, 0xc2f83e2a, 0x708079ee, 0xc2f2b85a, 0x707d7a98, 0xc2ed32af, + 0x707a7afd, 0xc2e7ad2a, + 0x70777b1c, 0xc2e227cb, 0x70747af6, 0xc2dca291, 0x70717a8a, 0xc2d71d7e, + 0x706e79d9, 0xc2d1988f, + 0x706b78e3, 0xc2cc13c7, 0x706877a7, 0xc2c68f24, 0x70657626, 0xc2c10aa7, + 0x70627460, 0xc2bb8650, + 0x705f7255, 0xc2b6021f, 0x705c7004, 0xc2b07e14, 0x70596d6d, 0xc2aafa2e, + 0x70566a92, 0xc2a5766e, + 0x70536771, 0xc29ff2d4, 0x7050640b, 0xc29a6f60, 0x704d6060, 0xc294ec12, + 0x704a5c6f, 0xc28f68e9, + 0x70475839, 0xc289e5e7, 0x704453be, 0xc284630a, 0x70414efd, 0xc27ee054, + 0x703e49f8, 0xc2795dc3, + 0x703b44ad, 0xc273db58, 0x70383f1d, 0xc26e5913, 0x70353947, 0xc268d6f5, + 0x7032332d, 0xc26354fc, + 0x702f2ccd, 0xc25dd329, 0x702c2628, 0xc258517c, 0x70291f3e, 0xc252cff5, + 0x7026180e, 0xc24d4e95, + 0x7023109a, 0xc247cd5a, 0x702008e0, 0xc2424c46, 0x701d00e1, 0xc23ccb57, + 0x7019f89d, 0xc2374a8f, + 0x7016f014, 0xc231c9ec, 0x7013e746, 0xc22c4970, 0x7010de32, 0xc226c91a, + 0x700dd4da, 0xc22148ea, + 0x700acb3c, 0xc21bc8e1, 0x7007c159, 0xc21648fd, 0x7004b731, 0xc210c940, + 0x7001acc4, 0xc20b49a9, + 0x6ffea212, 0xc205ca38, 0x6ffb971b, 0xc2004aed, 0x6ff88bde, 0xc1facbc9, + 0x6ff5805d, 0xc1f54cca, + 0x6ff27497, 0xc1efcdf3, 0x6fef688b, 0xc1ea4f41, 0x6fec5c3b, 0xc1e4d0b6, + 0x6fe94fa5, 0xc1df5251, + 0x6fe642ca, 0xc1d9d412, 0x6fe335ab, 0xc1d455f9, 0x6fe02846, 0xc1ced807, + 0x6fdd1a9c, 0xc1c95a3c, + 0x6fda0cae, 0xc1c3dc97, 0x6fd6fe7a, 0xc1be5f18, 0x6fd3f001, 0xc1b8e1bf, + 0x6fd0e144, 0xc1b3648d, + 0x6fcdd241, 0xc1ade781, 0x6fcac2fa, 0xc1a86a9c, 0x6fc7b36d, 0xc1a2edde, + 0x6fc4a39c, 0xc19d7145, + 0x6fc19385, 0xc197f4d4, 0x6fbe832a, 0xc1927888, 0x6fbb728a, 0xc18cfc63, + 0x6fb861a4, 0xc1878065, + 0x6fb5507a, 0xc182048d, 0x6fb23f0b, 0xc17c88dc, 0x6faf2d57, 0xc1770d52, + 0x6fac1b5f, 0xc17191ee, + 0x6fa90921, 0xc16c16b0, 0x6fa5f69e, 0xc1669b99, 0x6fa2e3d7, 0xc16120a9, + 0x6f9fd0cb, 0xc15ba5df, + 0x6f9cbd79, 0xc1562b3d, 0x6f99a9e3, 0xc150b0c0, 0x6f969608, 0xc14b366b, + 0x6f9381e9, 0xc145bc3c, + 0x6f906d84, 0xc1404233, 0x6f8d58db, 0xc13ac852, 0x6f8a43ed, 0xc1354e97, + 0x6f872eba, 0xc12fd503, + 0x6f841942, 0xc12a5b95, 0x6f810386, 0xc124e24f, 0x6f7ded84, 0xc11f692f, + 0x6f7ad73e, 0xc119f036, + 0x6f77c0b3, 0xc1147764, 0x6f74a9e4, 0xc10efeb8, 0x6f7192cf, 0xc1098634, + 0x6f6e7b76, 0xc1040dd6, + 0x6f6b63d8, 0xc0fe959f, 0x6f684bf6, 0xc0f91d8f, 0x6f6533ce, 0xc0f3a5a6, + 0x6f621b62, 0xc0ee2de3, + 0x6f5f02b2, 0xc0e8b648, 0x6f5be9bc, 0xc0e33ed4, 0x6f58d082, 0xc0ddc786, + 0x6f55b703, 0xc0d8505f, + 0x6f529d40, 0xc0d2d960, 0x6f4f8338, 0xc0cd6287, 0x6f4c68eb, 0xc0c7ebd6, + 0x6f494e5a, 0xc0c2754b, + 0x6f463383, 0xc0bcfee7, 0x6f431869, 0xc0b788ab, 0x6f3ffd09, 0xc0b21295, + 0x6f3ce165, 0xc0ac9ca6, + 0x6f39c57d, 0xc0a726df, 0x6f36a94f, 0xc0a1b13e, 0x6f338cde, 0xc09c3bc5, + 0x6f307027, 0xc096c673, + 0x6f2d532c, 0xc0915148, 0x6f2a35ed, 0xc08bdc44, 0x6f271868, 0xc0866767, + 0x6f23faa0, 0xc080f2b1, + 0x6f20dc92, 0xc07b7e23, 0x6f1dbe41, 0xc07609bb, 0x6f1a9faa, 0xc070957b, + 0x6f1780cf, 0xc06b2162, + 0x6f1461b0, 0xc065ad70, 0x6f11424c, 0xc06039a6, 0x6f0e22a3, 0xc05ac603, + 0x6f0b02b6, 0xc0555287, + 0x6f07e285, 0xc04fdf32, 0x6f04c20f, 0xc04a6c05, 0x6f01a155, 0xc044f8fe, + 0x6efe8056, 0xc03f8620, + 0x6efb5f12, 0xc03a1368, 0x6ef83d8a, 0xc034a0d8, 0x6ef51bbe, 0xc02f2e6f, + 0x6ef1f9ad, 0xc029bc2e, + 0x6eeed758, 0xc0244a14, 0x6eebb4bf, 0xc01ed821, 0x6ee891e1, 0xc0196656, + 0x6ee56ebe, 0xc013f4b2, + 0x6ee24b57, 0xc00e8336, 0x6edf27ac, 0xc00911e1, 0x6edc03bc, 0xc003a0b3, + 0x6ed8df88, 0xbffe2fad, + 0x6ed5bb10, 0xbff8bece, 0x6ed29653, 0xbff34e17, 0x6ecf7152, 0xbfeddd88, + 0x6ecc4c0d, 0xbfe86d20, + 0x6ec92683, 0xbfe2fcdf, 0x6ec600b5, 0xbfdd8cc6, 0x6ec2daa2, 0xbfd81cd5, + 0x6ebfb44b, 0xbfd2ad0b, + 0x6ebc8db0, 0xbfcd3d69, 0x6eb966d1, 0xbfc7cdee, 0x6eb63fad, 0xbfc25e9b, + 0x6eb31845, 0xbfbcef70, + 0x6eaff099, 0xbfb7806c, 0x6eacc8a8, 0xbfb21190, 0x6ea9a073, 0xbfaca2dc, + 0x6ea677fa, 0xbfa7344f, + 0x6ea34f3d, 0xbfa1c5ea, 0x6ea0263b, 0xbf9c57ac, 0x6e9cfcf5, 0xbf96e997, + 0x6e99d36b, 0xbf917ba9, + 0x6e96a99d, 0xbf8c0de3, 0x6e937f8a, 0xbf86a044, 0x6e905534, 0xbf8132ce, + 0x6e8d2a99, 0xbf7bc57f, + 0x6e89ffb9, 0xbf765858, 0x6e86d496, 0xbf70eb59, 0x6e83a92f, 0xbf6b7e81, + 0x6e807d83, 0xbf6611d2, + 0x6e7d5193, 0xbf60a54a, 0x6e7a255f, 0xbf5b38ea, 0x6e76f8e7, 0xbf55ccb2, + 0x6e73cc2b, 0xbf5060a2, + 0x6e709f2a, 0xbf4af4ba, 0x6e6d71e6, 0xbf4588fa, 0x6e6a445d, 0xbf401d61, + 0x6e671690, 0xbf3ab1f1, + 0x6e63e87f, 0xbf3546a8, 0x6e60ba2a, 0xbf2fdb88, 0x6e5d8b91, 0xbf2a708f, + 0x6e5a5cb4, 0xbf2505bf, + 0x6e572d93, 0xbf1f9b16, 0x6e53fe2e, 0xbf1a3096, 0x6e50ce84, 0xbf14c63d, + 0x6e4d9e97, 0xbf0f5c0d, + 0x6e4a6e66, 0xbf09f205, 0x6e473df0, 0xbf048824, 0x6e440d37, 0xbeff1e6c, + 0x6e40dc39, 0xbef9b4dc, + 0x6e3daaf8, 0xbef44b74, 0x6e3a7972, 0xbeeee234, 0x6e3747a9, 0xbee9791c, + 0x6e34159b, 0xbee4102d, + 0x6e30e34a, 0xbedea765, 0x6e2db0b4, 0xbed93ec6, 0x6e2a7ddb, 0xbed3d64f, + 0x6e274abe, 0xbece6e00, + 0x6e24175c, 0xbec905d9, 0x6e20e3b7, 0xbec39ddb, 0x6e1dafce, 0xbebe3605, + 0x6e1a7ba1, 0xbeb8ce57, + 0x6e174730, 0xbeb366d1, 0x6e14127b, 0xbeadff74, 0x6e10dd82, 0xbea8983f, + 0x6e0da845, 0xbea33132, + 0x6e0a72c5, 0xbe9dca4e, 0x6e073d00, 0xbe986391, 0x6e0406f8, 0xbe92fcfe, + 0x6e00d0ac, 0xbe8d9692, + 0x6dfd9a1c, 0xbe88304f, 0x6dfa6348, 0xbe82ca35, 0x6df72c30, 0xbe7d6442, + 0x6df3f4d4, 0xbe77fe78, + 0x6df0bd35, 0xbe7298d7, 0x6ded8552, 0xbe6d335e, 0x6dea4d2b, 0xbe67ce0d, + 0x6de714c0, 0xbe6268e5, + 0x6de3dc11, 0xbe5d03e6, 0x6de0a31f, 0xbe579f0f, 0x6ddd69e9, 0xbe523a60, + 0x6dda306f, 0xbe4cd5da, + 0x6dd6f6b1, 0xbe47717c, 0x6dd3bcaf, 0xbe420d47, 0x6dd0826a, 0xbe3ca93b, + 0x6dcd47e1, 0xbe374557, + 0x6dca0d14, 0xbe31e19b, 0x6dc6d204, 0xbe2c7e09, 0x6dc396b0, 0xbe271a9f, + 0x6dc05b18, 0xbe21b75d, + 0x6dbd1f3c, 0xbe1c5444, 0x6db9e31d, 0xbe16f154, 0x6db6a6ba, 0xbe118e8c, + 0x6db36a14, 0xbe0c2bed, + 0x6db02d29, 0xbe06c977, 0x6daceffb, 0xbe01672a, 0x6da9b28a, 0xbdfc0505, + 0x6da674d5, 0xbdf6a309, + 0x6da336dc, 0xbdf14135, 0x6d9ff89f, 0xbdebdf8b, 0x6d9cba1f, 0xbde67e09, + 0x6d997b5b, 0xbde11cb0, + 0x6d963c54, 0xbddbbb7f, 0x6d92fd09, 0xbdd65a78, 0x6d8fbd7a, 0xbdd0f999, + 0x6d8c7da8, 0xbdcb98e3, + 0x6d893d93, 0xbdc63856, 0x6d85fd39, 0xbdc0d7f2, 0x6d82bc9d, 0xbdbb77b7, + 0x6d7f7bbc, 0xbdb617a4, + 0x6d7c3a98, 0xbdb0b7bb, 0x6d78f931, 0xbdab57fa, 0x6d75b786, 0xbda5f862, + 0x6d727597, 0xbda098f3, + 0x6d6f3365, 0xbd9b39ad, 0x6d6bf0f0, 0xbd95da91, 0x6d68ae37, 0xbd907b9d, + 0x6d656b3a, 0xbd8b1cd2, + 0x6d6227fa, 0xbd85be30, 0x6d5ee477, 0xbd805fb7, 0x6d5ba0b0, 0xbd7b0167, + 0x6d585ca6, 0xbd75a340, + 0x6d551858, 0xbd704542, 0x6d51d3c6, 0xbd6ae76d, 0x6d4e8ef2, 0xbd6589c1, + 0x6d4b49da, 0xbd602c3f, + 0x6d48047e, 0xbd5acee5, 0x6d44bedf, 0xbd5571b5, 0x6d4178fd, 0xbd5014ad, + 0x6d3e32d7, 0xbd4ab7cf, + 0x6d3aec6e, 0xbd455b1a, 0x6d37a5c1, 0xbd3ffe8e, 0x6d345ed1, 0xbd3aa22c, + 0x6d31179e, 0xbd3545f2, + 0x6d2dd027, 0xbd2fe9e2, 0x6d2a886e, 0xbd2a8dfb, 0x6d274070, 0xbd25323d, + 0x6d23f830, 0xbd1fd6a8, + 0x6d20afac, 0xbd1a7b3d, 0x6d1d66e4, 0xbd151ffb, 0x6d1a1dda, 0xbd0fc4e2, + 0x6d16d48c, 0xbd0a69f2, + 0x6d138afb, 0xbd050f2c, 0x6d104126, 0xbcffb48f, 0x6d0cf70f, 0xbcfa5a1b, + 0x6d09acb4, 0xbcf4ffd1, + 0x6d066215, 0xbcefa5b0, 0x6d031734, 0xbcea4bb9, 0x6cffcc0f, 0xbce4f1eb, + 0x6cfc80a7, 0xbcdf9846, + 0x6cf934fc, 0xbcda3ecb, 0x6cf5e90d, 0xbcd4e579, 0x6cf29cdc, 0xbccf8c50, + 0x6cef5067, 0xbcca3351, + 0x6cec03af, 0xbcc4da7b, 0x6ce8b6b4, 0xbcbf81cf, 0x6ce56975, 0xbcba294d, + 0x6ce21bf4, 0xbcb4d0f4, + 0x6cdece2f, 0xbcaf78c4, 0x6cdb8027, 0xbcaa20be, 0x6cd831dc, 0xbca4c8e1, + 0x6cd4e34e, 0xbc9f712e, + 0x6cd1947c, 0xbc9a19a5, 0x6cce4568, 0xbc94c245, 0x6ccaf610, 0xbc8f6b0f, + 0x6cc7a676, 0xbc8a1402, + 0x6cc45698, 0xbc84bd1f, 0x6cc10677, 0xbc7f6665, 0x6cbdb613, 0xbc7a0fd6, + 0x6cba656c, 0xbc74b96f, + 0x6cb71482, 0xbc6f6333, 0x6cb3c355, 0xbc6a0d20, 0x6cb071e4, 0xbc64b737, + 0x6cad2031, 0xbc5f6177, + 0x6ca9ce3b, 0xbc5a0be2, 0x6ca67c01, 0xbc54b676, 0x6ca32985, 0xbc4f6134, + 0x6c9fd6c6, 0xbc4a0c1b, + 0x6c9c83c3, 0xbc44b72c, 0x6c99307e, 0xbc3f6267, 0x6c95dcf6, 0xbc3a0dcc, + 0x6c92892a, 0xbc34b95b, + 0x6c8f351c, 0xbc2f6513, 0x6c8be0cb, 0xbc2a10f6, 0x6c888c36, 0xbc24bd02, + 0x6c85375f, 0xbc1f6938, + 0x6c81e245, 0xbc1a1598, 0x6c7e8ce8, 0xbc14c221, 0x6c7b3748, 0xbc0f6ed5, + 0x6c77e165, 0xbc0a1bb3, + 0x6c748b3f, 0xbc04c8ba, 0x6c7134d7, 0xbbff75ec, 0x6c6dde2b, 0xbbfa2347, + 0x6c6a873d, 0xbbf4d0cc, + 0x6c67300b, 0xbbef7e7c, 0x6c63d897, 0xbbea2c55, 0x6c6080e0, 0xbbe4da58, + 0x6c5d28e6, 0xbbdf8885, + 0x6c59d0a9, 0xbbda36dd, 0x6c56782a, 0xbbd4e55e, 0x6c531f67, 0xbbcf940a, + 0x6c4fc662, 0xbbca42df, + 0x6c4c6d1a, 0xbbc4f1df, 0x6c49138f, 0xbbbfa108, 0x6c45b9c1, 0xbbba505c, + 0x6c425fb1, 0xbbb4ffda, + 0x6c3f055d, 0xbbafaf82, 0x6c3baac7, 0xbbaa5f54, 0x6c384fef, 0xbba50f50, + 0x6c34f4d3, 0xbb9fbf77, + 0x6c319975, 0xbb9a6fc7, 0x6c2e3dd4, 0xbb952042, 0x6c2ae1f0, 0xbb8fd0e7, + 0x6c2785ca, 0xbb8a81b6, + 0x6c242960, 0xbb8532b0, 0x6c20ccb4, 0xbb7fe3d3, 0x6c1d6fc6, 0xbb7a9521, + 0x6c1a1295, 0xbb754699, + 0x6c16b521, 0xbb6ff83c, 0x6c13576a, 0xbb6aaa09, 0x6c0ff971, 0xbb655c00, + 0x6c0c9b35, 0xbb600e21, + 0x6c093cb6, 0xbb5ac06d, 0x6c05ddf5, 0xbb5572e3, 0x6c027ef1, 0xbb502583, + 0x6bff1faa, 0xbb4ad84e, + 0x6bfbc021, 0xbb458b43, 0x6bf86055, 0xbb403e63, 0x6bf50047, 0xbb3af1ad, + 0x6bf19ff6, 0xbb35a521, + 0x6bee3f62, 0xbb3058c0, 0x6beade8c, 0xbb2b0c8a, 0x6be77d74, 0xbb25c07d, + 0x6be41c18, 0xbb20749c, + 0x6be0ba7b, 0xbb1b28e4, 0x6bdd589a, 0xbb15dd57, 0x6bd9f677, 0xbb1091f5, + 0x6bd69412, 0xbb0b46bd, + 0x6bd3316a, 0xbb05fbb0, 0x6bcfce80, 0xbb00b0ce, 0x6bcc6b53, 0xbafb6615, + 0x6bc907e3, 0xbaf61b88, + 0x6bc5a431, 0xbaf0d125, 0x6bc2403d, 0xbaeb86ed, 0x6bbedc06, 0xbae63cdf, + 0x6bbb778d, 0xbae0f2fc, + 0x6bb812d1, 0xbadba943, 0x6bb4add3, 0xbad65fb5, 0x6bb14892, 0xbad11652, + 0x6bade30f, 0xbacbcd1a, + 0x6baa7d49, 0xbac6840c, 0x6ba71741, 0xbac13b29, 0x6ba3b0f7, 0xbabbf270, + 0x6ba04a6a, 0xbab6a9e3, + 0x6b9ce39b, 0xbab16180, 0x6b997c8a, 0xbaac1948, 0x6b961536, 0xbaa6d13a, + 0x6b92ada0, 0xbaa18958, + 0x6b8f45c7, 0xba9c41a0, 0x6b8bddac, 0xba96fa13, 0x6b88754f, 0xba91b2b1, + 0x6b850caf, 0xba8c6b79, + 0x6b81a3cd, 0xba87246d, 0x6b7e3aa9, 0xba81dd8b, 0x6b7ad142, 0xba7c96d4, + 0x6b776799, 0xba775048, + 0x6b73fdae, 0xba7209e7, 0x6b709381, 0xba6cc3b1, 0x6b6d2911, 0xba677da6, + 0x6b69be5f, 0xba6237c5, + 0x6b66536b, 0xba5cf210, 0x6b62e834, 0xba57ac86, 0x6b5f7cbc, 0xba526726, + 0x6b5c1101, 0xba4d21f2, + 0x6b58a503, 0xba47dce8, 0x6b5538c4, 0xba42980a, 0x6b51cc42, 0xba3d5356, + 0x6b4e5f7f, 0xba380ece, + 0x6b4af279, 0xba32ca71, 0x6b478530, 0xba2d863e, 0x6b4417a6, 0xba284237, + 0x6b40a9d9, 0xba22fe5b, + 0x6b3d3bcb, 0xba1dbaaa, 0x6b39cd7a, 0xba187724, 0x6b365ee7, 0xba1333c9, + 0x6b32f012, 0xba0df099, + 0x6b2f80fb, 0xba08ad95, 0x6b2c11a1, 0xba036abb, 0x6b28a206, 0xb9fe280d, + 0x6b253228, 0xb9f8e58a, + 0x6b21c208, 0xb9f3a332, 0x6b1e51a7, 0xb9ee6106, 0x6b1ae103, 0xb9e91f04, + 0x6b17701d, 0xb9e3dd2e, + 0x6b13fef5, 0xb9de9b83, 0x6b108d8b, 0xb9d95a03, 0x6b0d1bdf, 0xb9d418af, + 0x6b09a9f1, 0xb9ced786, + 0x6b0637c1, 0xb9c99688, 0x6b02c54f, 0xb9c455b6, 0x6aff529a, 0xb9bf150e, + 0x6afbdfa4, 0xb9b9d493, + 0x6af86c6c, 0xb9b49442, 0x6af4f8f2, 0xb9af541d, 0x6af18536, 0xb9aa1423, + 0x6aee1138, 0xb9a4d455, + 0x6aea9cf8, 0xb99f94b2, 0x6ae72876, 0xb99a553a, 0x6ae3b3b2, 0xb99515ee, + 0x6ae03eac, 0xb98fd6cd, + 0x6adcc964, 0xb98a97d8, 0x6ad953db, 0xb985590e, 0x6ad5de0f, 0xb9801a70, + 0x6ad26802, 0xb97adbfd, + 0x6acef1b2, 0xb9759db6, 0x6acb7b21, 0xb9705f9a, 0x6ac8044e, 0xb96b21aa, + 0x6ac48d39, 0xb965e3e5, + 0x6ac115e2, 0xb960a64c, 0x6abd9e49, 0xb95b68de, 0x6aba266e, 0xb9562b9c, + 0x6ab6ae52, 0xb950ee86, + 0x6ab335f4, 0xb94bb19b, 0x6aafbd54, 0xb94674dc, 0x6aac4472, 0xb9413848, + 0x6aa8cb4e, 0xb93bfbe0, + 0x6aa551e9, 0xb936bfa4, 0x6aa1d841, 0xb9318393, 0x6a9e5e58, 0xb92c47ae, + 0x6a9ae42e, 0xb9270bf5, + 0x6a9769c1, 0xb921d067, 0x6a93ef13, 0xb91c9505, 0x6a907423, 0xb91759cf, + 0x6a8cf8f1, 0xb9121ec5, + 0x6a897d7d, 0xb90ce3e6, 0x6a8601c8, 0xb907a933, 0x6a8285d1, 0xb9026eac, + 0x6a7f0999, 0xb8fd3451, + 0x6a7b8d1e, 0xb8f7fa21, 0x6a781062, 0xb8f2c01d, 0x6a749365, 0xb8ed8646, + 0x6a711625, 0xb8e84c99, + 0x6a6d98a4, 0xb8e31319, 0x6a6a1ae2, 0xb8ddd9c5, 0x6a669cdd, 0xb8d8a09d, + 0x6a631e97, 0xb8d367a0, + 0x6a5fa010, 0xb8ce2ecf, 0x6a5c2147, 0xb8c8f62b, 0x6a58a23c, 0xb8c3bdb2, + 0x6a5522ef, 0xb8be8565, + 0x6a51a361, 0xb8b94d44, 0x6a4e2392, 0xb8b4154f, 0x6a4aa381, 0xb8aedd86, + 0x6a47232e, 0xb8a9a5e9, + 0x6a43a29a, 0xb8a46e78, 0x6a4021c4, 0xb89f3733, 0x6a3ca0ad, 0xb89a001a, + 0x6a391f54, 0xb894c92d, + 0x6a359db9, 0xb88f926d, 0x6a321bdd, 0xb88a5bd8, 0x6a2e99c0, 0xb885256f, + 0x6a2b1761, 0xb87fef33, + 0x6a2794c1, 0xb87ab922, 0x6a2411df, 0xb875833e, 0x6a208ebb, 0xb8704d85, + 0x6a1d0b57, 0xb86b17f9, + 0x6a1987b0, 0xb865e299, 0x6a1603c8, 0xb860ad66, 0x6a127f9f, 0xb85b785e, + 0x6a0efb35, 0xb8564383, + 0x6a0b7689, 0xb8510ed4, 0x6a07f19b, 0xb84bda51, 0x6a046c6c, 0xb846a5fa, + 0x6a00e6fc, 0xb84171cf, + 0x69fd614a, 0xb83c3dd1, 0x69f9db57, 0xb83709ff, 0x69f65523, 0xb831d659, + 0x69f2cead, 0xb82ca2e0, + 0x69ef47f6, 0xb8276f93, 0x69ebc0fe, 0xb8223c72, 0x69e839c4, 0xb81d097e, + 0x69e4b249, 0xb817d6b6, + 0x69e12a8c, 0xb812a41a, 0x69dda28f, 0xb80d71aa, 0x69da1a50, 0xb8083f67, + 0x69d691cf, 0xb8030d51, + 0x69d3090e, 0xb7fddb67, 0x69cf800b, 0xb7f8a9a9, 0x69cbf6c7, 0xb7f37818, + 0x69c86d41, 0xb7ee46b3, + 0x69c4e37a, 0xb7e9157a, 0x69c15973, 0xb7e3e46e, 0x69bdcf29, 0xb7deb38f, + 0x69ba449f, 0xb7d982dc, + 0x69b6b9d3, 0xb7d45255, 0x69b32ec7, 0xb7cf21fb, 0x69afa378, 0xb7c9f1ce, + 0x69ac17e9, 0xb7c4c1cd, + 0x69a88c19, 0xb7bf91f8, 0x69a50007, 0xb7ba6251, 0x69a173b5, 0xb7b532d6, + 0x699de721, 0xb7b00387, + 0x699a5a4c, 0xb7aad465, 0x6996cd35, 0xb7a5a570, 0x69933fde, 0xb7a076a7, + 0x698fb246, 0xb79b480b, + 0x698c246c, 0xb796199b, 0x69889651, 0xb790eb58, 0x698507f6, 0xb78bbd42, + 0x69817959, 0xb7868f59, + 0x697dea7b, 0xb781619c, 0x697a5b5c, 0xb77c340c, 0x6976cbfc, 0xb77706a9, + 0x69733c5b, 0xb771d972, + 0x696fac78, 0xb76cac69, 0x696c1c55, 0xb7677f8c, 0x69688bf1, 0xb76252db, + 0x6964fb4c, 0xb75d2658, + 0x69616a65, 0xb757fa01, 0x695dd93e, 0xb752cdd8, 0x695a47d6, 0xb74da1db, + 0x6956b62d, 0xb748760b, + 0x69532442, 0xb7434a67, 0x694f9217, 0xb73e1ef1, 0x694bffab, 0xb738f3a7, + 0x69486cfe, 0xb733c88b, + 0x6944da10, 0xb72e9d9b, 0x694146e1, 0xb72972d8, 0x693db371, 0xb7244842, + 0x693a1fc0, 0xb71f1dd9, + 0x69368bce, 0xb719f39e, 0x6932f79b, 0xb714c98e, 0x692f6328, 0xb70f9fac, + 0x692bce73, 0xb70a75f7, + 0x6928397e, 0xb7054c6f, 0x6924a448, 0xb7002314, 0x69210ed1, 0xb6faf9e6, + 0x691d7919, 0xb6f5d0e5, + 0x6919e320, 0xb6f0a812, 0x69164ce7, 0xb6eb7f6b, 0x6912b66c, 0xb6e656f1, + 0x690f1fb1, 0xb6e12ea4, + 0x690b88b5, 0xb6dc0685, 0x6907f178, 0xb6d6de92, 0x690459fb, 0xb6d1b6cd, + 0x6900c23c, 0xb6cc8f35, + 0x68fd2a3d, 0xb6c767ca, 0x68f991fd, 0xb6c2408c, 0x68f5f97d, 0xb6bd197c, + 0x68f260bb, 0xb6b7f298, + 0x68eec7b9, 0xb6b2cbe2, 0x68eb2e76, 0xb6ada559, 0x68e794f3, 0xb6a87efd, + 0x68e3fb2e, 0xb6a358ce, + 0x68e06129, 0xb69e32cd, 0x68dcc6e4, 0xb6990cf9, 0x68d92c5d, 0xb693e752, + 0x68d59196, 0xb68ec1d9, + 0x68d1f68f, 0xb6899c8d, 0x68ce5b46, 0xb684776e, 0x68cabfbd, 0xb67f527c, + 0x68c723f3, 0xb67a2db8, + 0x68c387e9, 0xb6750921, 0x68bfeb9e, 0xb66fe4b8, 0x68bc4f13, 0xb66ac07c, + 0x68b8b247, 0xb6659c6d, + 0x68b5153a, 0xb660788c, 0x68b177ed, 0xb65b54d8, 0x68adda5f, 0xb6563151, + 0x68aa3c90, 0xb6510df8, + 0x68a69e81, 0xb64beacd, 0x68a30031, 0xb646c7ce, 0x689f61a1, 0xb641a4fe, + 0x689bc2d1, 0xb63c825b, + 0x689823bf, 0xb6375fe5, 0x6894846e, 0xb6323d9d, 0x6890e4dc, 0xb62d1b82, + 0x688d4509, 0xb627f995, + 0x6889a4f6, 0xb622d7d6, 0x688604a2, 0xb61db644, 0x6882640e, 0xb61894df, + 0x687ec339, 0xb61373a9, + 0x687b2224, 0xb60e529f, 0x687780ce, 0xb60931c4, 0x6873df38, 0xb6041116, + 0x68703d62, 0xb5fef095, + 0x686c9b4b, 0xb5f9d043, 0x6868f8f4, 0xb5f4b01e, 0x6865565c, 0xb5ef9026, + 0x6861b384, 0xb5ea705d, + 0x685e106c, 0xb5e550c1, 0x685a6d13, 0xb5e03153, 0x6856c979, 0xb5db1212, + 0x685325a0, 0xb5d5f2ff, + 0x684f8186, 0xb5d0d41a, 0x684bdd2c, 0xb5cbb563, 0x68483891, 0xb5c696da, + 0x684493b6, 0xb5c1787e, + 0x6840ee9b, 0xb5bc5a50, 0x683d493f, 0xb5b73c50, 0x6839a3a4, 0xb5b21e7e, + 0x6835fdc7, 0xb5ad00d9, + 0x683257ab, 0xb5a7e362, 0x682eb14e, 0xb5a2c61a, 0x682b0ab1, 0xb59da8ff, + 0x682763d4, 0xb5988c12, + 0x6823bcb7, 0xb5936f53, 0x68201559, 0xb58e52c2, 0x681c6dbb, 0xb589365e, + 0x6818c5dd, 0xb5841a29, + 0x68151dbe, 0xb57efe22, 0x68117560, 0xb579e248, 0x680dccc1, 0xb574c69d, + 0x680a23e2, 0xb56fab1f, + 0x68067ac3, 0xb56a8fd0, 0x6802d164, 0xb56574ae, 0x67ff27c4, 0xb56059bb, + 0x67fb7de5, 0xb55b3ef5, + 0x67f7d3c5, 0xb556245e, 0x67f42965, 0xb55109f5, 0x67f07ec5, 0xb54befba, + 0x67ecd3e5, 0xb546d5ac, + 0x67e928c5, 0xb541bbcd, 0x67e57d64, 0xb53ca21c, 0x67e1d1c4, 0xb5378899, + 0x67de25e3, 0xb5326f45, + 0x67da79c3, 0xb52d561e, 0x67d6cd62, 0xb5283d26, 0x67d320c1, 0xb523245b, + 0x67cf73e1, 0xb51e0bbf, + 0x67cbc6c0, 0xb518f351, 0x67c8195f, 0xb513db12, 0x67c46bbe, 0xb50ec300, + 0x67c0bddd, 0xb509ab1d, + 0x67bd0fbd, 0xb5049368, 0x67b9615c, 0xb4ff7be1, 0x67b5b2bb, 0xb4fa6489, + 0x67b203da, 0xb4f54d5f, + 0x67ae54ba, 0xb4f03663, 0x67aaa559, 0xb4eb1f95, 0x67a6f5b8, 0xb4e608f6, + 0x67a345d8, 0xb4e0f285, + 0x679f95b7, 0xb4dbdc42, 0x679be557, 0xb4d6c62e, 0x679834b6, 0xb4d1b048, + 0x679483d6, 0xb4cc9a90, + 0x6790d2b6, 0xb4c78507, 0x678d2156, 0xb4c26fad, 0x67896fb6, 0xb4bd5a80, + 0x6785bdd6, 0xb4b84582, + 0x67820bb7, 0xb4b330b3, 0x677e5957, 0xb4ae1c12, 0x677aa6b8, 0xb4a9079f, + 0x6776f3d9, 0xb4a3f35b, + 0x677340ba, 0xb49edf45, 0x676f8d5b, 0xb499cb5e, 0x676bd9bd, 0xb494b7a6, + 0x676825de, 0xb48fa41c, + 0x676471c0, 0xb48a90c0, 0x6760bd62, 0xb4857d93, 0x675d08c4, 0xb4806a95, + 0x675953e7, 0xb47b57c5, + 0x67559eca, 0xb4764523, 0x6751e96d, 0xb47132b1, 0x674e33d0, 0xb46c206d, + 0x674a7df4, 0xb4670e57, + 0x6746c7d8, 0xb461fc70, 0x6743117c, 0xb45ceab8, 0x673f5ae0, 0xb457d92f, + 0x673ba405, 0xb452c7d4, + 0x6737ecea, 0xb44db6a8, 0x67343590, 0xb448a5aa, 0x67307df5, 0xb44394db, + 0x672cc61c, 0xb43e843b, + 0x67290e02, 0xb43973ca, 0x672555a9, 0xb4346387, 0x67219d10, 0xb42f5373, + 0x671de438, 0xb42a438e, + 0x671a2b20, 0xb42533d8, 0x671671c8, 0xb4202451, 0x6712b831, 0xb41b14f8, + 0x670efe5a, 0xb41605ce, + 0x670b4444, 0xb410f6d3, 0x670789ee, 0xb40be807, 0x6703cf58, 0xb406d969, + 0x67001483, 0xb401cafb, + 0x66fc596f, 0xb3fcbcbb, 0x66f89e1b, 0xb3f7aeaa, 0x66f4e287, 0xb3f2a0c9, + 0x66f126b4, 0xb3ed9316, + 0x66ed6aa1, 0xb3e88592, 0x66e9ae4f, 0xb3e3783d, 0x66e5f1be, 0xb3de6b17, + 0x66e234ed, 0xb3d95e1f, + 0x66de77dc, 0xb3d45157, 0x66daba8c, 0xb3cf44be, 0x66d6fcfd, 0xb3ca3854, + 0x66d33f2e, 0xb3c52c19, + 0x66cf8120, 0xb3c0200c, 0x66cbc2d2, 0xb3bb142f, 0x66c80445, 0xb3b60881, + 0x66c44579, 0xb3b0fd02, + 0x66c0866d, 0xb3abf1b2, 0x66bcc721, 0xb3a6e691, 0x66b90797, 0xb3a1dba0, + 0x66b547cd, 0xb39cd0dd, + 0x66b187c3, 0xb397c649, 0x66adc77b, 0xb392bbe5, 0x66aa06f3, 0xb38db1b0, + 0x66a6462b, 0xb388a7aa, + 0x66a28524, 0xb3839dd3, 0x669ec3de, 0xb37e942b, 0x669b0259, 0xb3798ab2, + 0x66974095, 0xb3748169, + 0x66937e91, 0xb36f784f, 0x668fbc4e, 0xb36a6f64, 0x668bf9cb, 0xb36566a8, + 0x66883709, 0xb3605e1c, + 0x66847408, 0xb35b55bf, 0x6680b0c8, 0xb3564d91, 0x667ced49, 0xb3514592, + 0x6679298a, 0xb34c3dc3, + 0x6675658c, 0xb3473623, 0x6671a14f, 0xb3422eb2, 0x666ddcd3, 0xb33d2771, + 0x666a1818, 0xb338205f, + 0x6666531d, 0xb333197c, 0x66628de4, 0xb32e12c9, 0x665ec86b, 0xb3290c45, + 0x665b02b3, 0xb32405f1, + 0x66573cbb, 0xb31effcc, 0x66537685, 0xb319f9d6, 0x664fb010, 0xb314f410, + 0x664be95b, 0xb30fee79, + 0x66482267, 0xb30ae912, 0x66445b35, 0xb305e3da, 0x664093c3, 0xb300ded2, + 0x663ccc12, 0xb2fbd9f9, + 0x66390422, 0xb2f6d550, 0x66353bf3, 0xb2f1d0d6, 0x66317385, 0xb2eccc8c, + 0x662daad8, 0xb2e7c871, + 0x6629e1ec, 0xb2e2c486, 0x662618c1, 0xb2ddc0ca, 0x66224f56, 0xb2d8bd3e, + 0x661e85ad, 0xb2d3b9e2, + 0x661abbc5, 0xb2ceb6b5, 0x6616f19e, 0xb2c9b3b8, 0x66132738, 0xb2c4b0ea, + 0x660f5c93, 0xb2bfae4c, + 0x660b91af, 0xb2baabde, 0x6607c68c, 0xb2b5a99f, 0x6603fb2a, 0xb2b0a790, + 0x66002f89, 0xb2aba5b1, + 0x65fc63a9, 0xb2a6a402, 0x65f8978b, 0xb2a1a282, 0x65f4cb2d, 0xb29ca132, + 0x65f0fe91, 0xb297a011, + 0x65ed31b5, 0xb2929f21, 0x65e9649b, 0xb28d9e60, 0x65e59742, 0xb2889dcf, + 0x65e1c9aa, 0xb2839d6d, + 0x65ddfbd3, 0xb27e9d3c, 0x65da2dbd, 0xb2799d3a, 0x65d65f69, 0xb2749d68, + 0x65d290d6, 0xb26f9dc6, + 0x65cec204, 0xb26a9e54, 0x65caf2f3, 0xb2659f12, 0x65c723a3, 0xb2609fff, + 0x65c35415, 0xb25ba11d, + 0x65bf8447, 0xb256a26a, 0x65bbb43b, 0xb251a3e7, 0x65b7e3f1, 0xb24ca594, + 0x65b41367, 0xb247a771, + 0x65b0429f, 0xb242a97e, 0x65ac7198, 0xb23dabbb, 0x65a8a052, 0xb238ae28, + 0x65a4cece, 0xb233b0c5, + 0x65a0fd0b, 0xb22eb392, 0x659d2b09, 0xb229b68f, 0x659958c9, 0xb224b9bc, + 0x6595864a, 0xb21fbd19, + 0x6591b38c, 0xb21ac0a6, 0x658de08f, 0xb215c463, 0x658a0d54, 0xb210c850, + 0x658639db, 0xb20bcc6d, + 0x65826622, 0xb206d0ba, 0x657e922b, 0xb201d537, 0x657abdf6, 0xb1fcd9e5, + 0x6576e982, 0xb1f7dec2, + 0x657314cf, 0xb1f2e3d0, 0x656f3fde, 0xb1ede90e, 0x656b6aae, 0xb1e8ee7c, + 0x6567953f, 0xb1e3f41a, + 0x6563bf92, 0xb1def9e9, 0x655fe9a7, 0xb1d9ffe7, 0x655c137d, 0xb1d50616, + 0x65583d14, 0xb1d00c75, + 0x6554666d, 0xb1cb1304, 0x65508f87, 0xb1c619c3, 0x654cb863, 0xb1c120b3, + 0x6548e101, 0xb1bc27d3, + 0x6545095f, 0xb1b72f23, 0x65413180, 0xb1b236a4, 0x653d5962, 0xb1ad3e55, + 0x65398105, 0xb1a84636, + 0x6535a86b, 0xb1a34e47, 0x6531cf91, 0xb19e5689, 0x652df679, 0xb1995efb, + 0x652a1d23, 0xb194679e, + 0x6526438f, 0xb18f7071, 0x652269bc, 0xb18a7974, 0x651e8faa, 0xb18582a8, + 0x651ab55b, 0xb1808c0c, + 0x6516dacd, 0xb17b95a0, 0x65130000, 0xb1769f65, 0x650f24f5, 0xb171a95b, + 0x650b49ac, 0xb16cb380, + 0x65076e25, 0xb167bdd7, 0x6503925f, 0xb162c85d, 0x64ffb65b, 0xb15dd315, + 0x64fbda18, 0xb158ddfd, + 0x64f7fd98, 0xb153e915, 0x64f420d9, 0xb14ef45e, 0x64f043dc, 0xb149ffd7, + 0x64ec66a0, 0xb1450b81, + 0x64e88926, 0xb140175b, 0x64e4ab6e, 0xb13b2367, 0x64e0cd78, 0xb1362fa2, + 0x64dcef44, 0xb1313c0e, + 0x64d910d1, 0xb12c48ab, 0x64d53220, 0xb1275579, 0x64d15331, 0xb1226277, + 0x64cd7404, 0xb11d6fa6, + 0x64c99498, 0xb1187d05, 0x64c5b4ef, 0xb1138a95, 0x64c1d507, 0xb10e9856, + 0x64bdf4e1, 0xb109a648, + 0x64ba147d, 0xb104b46a, 0x64b633da, 0xb0ffc2bd, 0x64b252fa, 0xb0fad140, + 0x64ae71dc, 0xb0f5dff5, + 0x64aa907f, 0xb0f0eeda, 0x64a6aee4, 0xb0ebfdf0, 0x64a2cd0c, 0xb0e70d37, + 0x649eeaf5, 0xb0e21cae, + 0x649b08a0, 0xb0dd2c56, 0x6497260d, 0xb0d83c2f, 0x6493433c, 0xb0d34c39, + 0x648f602d, 0xb0ce5c74, + 0x648b7ce0, 0xb0c96ce0, 0x64879955, 0xb0c47d7c, 0x6483b58c, 0xb0bf8e4a, + 0x647fd185, 0xb0ba9f48, + 0x647bed3f, 0xb0b5b077, 0x647808bc, 0xb0b0c1d7, 0x647423fb, 0xb0abd368, + 0x64703efc, 0xb0a6e52a, + 0x646c59bf, 0xb0a1f71d, 0x64687444, 0xb09d0941, 0x64648e8c, 0xb0981b96, + 0x6460a895, 0xb0932e1b, + 0x645cc260, 0xb08e40d2, 0x6458dbed, 0xb08953ba, 0x6454f53d, 0xb08466d3, + 0x64510e4e, 0xb07f7a1c, + 0x644d2722, 0xb07a8d97, 0x64493fb8, 0xb075a143, 0x64455810, 0xb070b520, + 0x6441702a, 0xb06bc92e, + 0x643d8806, 0xb066dd6d, 0x64399fa5, 0xb061f1de, 0x6435b706, 0xb05d067f, + 0x6431ce28, 0xb0581b51, + 0x642de50d, 0xb0533055, 0x6429fbb5, 0xb04e458a, 0x6426121e, 0xb0495af0, + 0x6422284a, 0xb0447087, + 0x641e3e38, 0xb03f864f, 0x641a53e8, 0xb03a9c49, 0x6416695a, 0xb035b273, + 0x64127e8f, 0xb030c8cf, + 0x640e9386, 0xb02bdf5c, 0x640aa83f, 0xb026f61b, 0x6406bcba, 0xb0220d0a, + 0x6402d0f8, 0xb01d242b, + 0x63fee4f8, 0xb0183b7d, 0x63faf8bb, 0xb0135301, 0x63f70c3f, 0xb00e6ab5, + 0x63f31f86, 0xb009829c, + 0x63ef3290, 0xb0049ab3, 0x63eb455c, 0xafffb2fc, 0x63e757ea, 0xaffacb76, + 0x63e36a3a, 0xaff5e421, + 0x63df7c4d, 0xaff0fcfe, 0x63db8e22, 0xafec160c, 0x63d79fba, 0xafe72f4c, + 0x63d3b114, 0xafe248bd, + 0x63cfc231, 0xafdd625f, 0x63cbd310, 0xafd87c33, 0x63c7e3b1, 0xafd39638, + 0x63c3f415, 0xafceb06f, + 0x63c0043b, 0xafc9cad7, 0x63bc1424, 0xafc4e571, 0x63b823cf, 0xafc0003c, + 0x63b4333d, 0xafbb1b39, + 0x63b0426d, 0xafb63667, 0x63ac5160, 0xafb151c7, 0x63a86015, 0xafac6d58, + 0x63a46e8d, 0xafa7891b, + 0x63a07cc7, 0xafa2a50f, 0x639c8ac4, 0xaf9dc135, 0x63989884, 0xaf98dd8d, + 0x6394a606, 0xaf93fa16, + 0x6390b34a, 0xaf8f16d1, 0x638cc051, 0xaf8a33bd, 0x6388cd1b, 0xaf8550db, + 0x6384d9a7, 0xaf806e2b, + 0x6380e5f6, 0xaf7b8bac, 0x637cf208, 0xaf76a95f, 0x6378fddc, 0xaf71c743, + 0x63750973, 0xaf6ce55a, + 0x637114cc, 0xaf6803a2, 0x636d1fe9, 0xaf63221c, 0x63692ac7, 0xaf5e40c7, + 0x63653569, 0xaf595fa4, + 0x63613fcd, 0xaf547eb3, 0x635d49f4, 0xaf4f9df4, 0x635953dd, 0xaf4abd66, + 0x63555d8a, 0xaf45dd0b, + 0x635166f9, 0xaf40fce1, 0x634d702b, 0xaf3c1ce9, 0x6349791f, 0xaf373d22, + 0x634581d6, 0xaf325d8e, + 0x63418a50, 0xaf2d7e2b, 0x633d928d, 0xaf289efa, 0x63399a8d, 0xaf23bffb, + 0x6335a24f, 0xaf1ee12e, + 0x6331a9d4, 0xaf1a0293, 0x632db11c, 0xaf15242a, 0x6329b827, 0xaf1045f3, + 0x6325bef5, 0xaf0b67ed, + 0x6321c585, 0xaf068a1a, 0x631dcbd9, 0xaf01ac78, 0x6319d1ef, 0xaefccf09, + 0x6315d7c8, 0xaef7f1cb, + 0x6311dd64, 0xaef314c0, 0x630de2c3, 0xaeee37e6, 0x6309e7e4, 0xaee95b3f, + 0x6305ecc9, 0xaee47ec9, + 0x6301f171, 0xaedfa285, 0x62fdf5db, 0xaedac674, 0x62f9fa09, 0xaed5ea95, + 0x62f5fdf9, 0xaed10ee7, + 0x62f201ac, 0xaecc336c, 0x62ee0523, 0xaec75823, 0x62ea085c, 0xaec27d0c, + 0x62e60b58, 0xaebda227, + 0x62e20e17, 0xaeb8c774, 0x62de109a, 0xaeb3ecf3, 0x62da12df, 0xaeaf12a4, + 0x62d614e7, 0xaeaa3888, + 0x62d216b3, 0xaea55e9e, 0x62ce1841, 0xaea084e6, 0x62ca1992, 0xae9bab60, + 0x62c61aa7, 0xae96d20c, + 0x62c21b7e, 0xae91f8eb, 0x62be1c19, 0xae8d1ffb, 0x62ba1c77, 0xae88473e, + 0x62b61c98, 0xae836eb4, + 0x62b21c7b, 0xae7e965b, 0x62ae1c23, 0xae79be35, 0x62aa1b8d, 0xae74e641, + 0x62a61aba, 0xae700e80, + 0x62a219aa, 0xae6b36f0, 0x629e185e, 0xae665f93, 0x629a16d5, 0xae618869, + 0x6296150f, 0xae5cb171, + 0x6292130c, 0xae57daab, 0x628e10cc, 0xae530417, 0x628a0e50, 0xae4e2db6, + 0x62860b97, 0xae495787, + 0x628208a1, 0xae44818b, 0x627e056e, 0xae3fabc1, 0x627a01fe, 0xae3ad629, + 0x6275fe52, 0xae3600c4, + 0x6271fa69, 0xae312b92, 0x626df643, 0xae2c5691, 0x6269f1e1, 0xae2781c4, + 0x6265ed42, 0xae22ad29, + 0x6261e866, 0xae1dd8c0, 0x625de34e, 0xae19048a, 0x6259ddf8, 0xae143086, + 0x6255d866, 0xae0f5cb5, + 0x6251d298, 0xae0a8916, 0x624dcc8d, 0xae05b5aa, 0x6249c645, 0xae00e271, + 0x6245bfc0, 0xadfc0f6a, + 0x6241b8ff, 0xadf73c96, 0x623db202, 0xadf269f4, 0x6239aac7, 0xaded9785, + 0x6235a351, 0xade8c548, + 0x62319b9d, 0xade3f33e, 0x622d93ad, 0xaddf2167, 0x62298b81, 0xadda4fc3, + 0x62258317, 0xadd57e51, + 0x62217a72, 0xadd0ad12, 0x621d7190, 0xadcbdc05, 0x62196871, 0xadc70b2c, + 0x62155f16, 0xadc23a85, + 0x6211557e, 0xadbd6a10, 0x620d4baa, 0xadb899cf, 0x62094199, 0xadb3c9c0, + 0x6205374c, 0xadaef9e4, + 0x62012cc2, 0xadaa2a3b, 0x61fd21fc, 0xada55ac4, 0x61f916f9, 0xada08b80, + 0x61f50bba, 0xad9bbc70, + 0x61f1003f, 0xad96ed92, 0x61ecf487, 0xad921ee6, 0x61e8e893, 0xad8d506e, + 0x61e4dc62, 0xad888229, + 0x61e0cff5, 0xad83b416, 0x61dcc34c, 0xad7ee636, 0x61d8b666, 0xad7a1889, + 0x61d4a944, 0xad754b0f, + 0x61d09be5, 0xad707dc8, 0x61cc8e4b, 0xad6bb0b4, 0x61c88074, 0xad66e3d3, + 0x61c47260, 0xad621725, + 0x61c06410, 0xad5d4aaa, 0x61bc5584, 0xad587e61, 0x61b846bc, 0xad53b24c, + 0x61b437b7, 0xad4ee66a, + 0x61b02876, 0xad4a1aba, 0x61ac18f9, 0xad454f3e, 0x61a80940, 0xad4083f5, + 0x61a3f94a, 0xad3bb8df, + 0x619fe918, 0xad36edfc, 0x619bd8aa, 0xad32234b, 0x6197c800, 0xad2d58ce, + 0x6193b719, 0xad288e85, + 0x618fa5f7, 0xad23c46e, 0x618b9498, 0xad1efa8a, 0x618782fd, 0xad1a30d9, + 0x61837126, 0xad15675c, + 0x617f5f12, 0xad109e12, 0x617b4cc3, 0xad0bd4fb, 0x61773a37, 0xad070c17, + 0x61732770, 0xad024366, + 0x616f146c, 0xacfd7ae8, 0x616b012c, 0xacf8b29e, 0x6166edb0, 0xacf3ea87, + 0x6162d9f8, 0xacef22a3, + 0x615ec603, 0xacea5af2, 0x615ab1d3, 0xace59375, 0x61569d67, 0xace0cc2b, + 0x615288be, 0xacdc0514, + 0x614e73da, 0xacd73e30, 0x614a5eba, 0xacd27780, 0x6146495d, 0xaccdb103, + 0x614233c5, 0xacc8eab9, + 0x613e1df0, 0xacc424a3, 0x613a07e0, 0xacbf5ec0, 0x6135f193, 0xacba9910, + 0x6131db0b, 0xacb5d394, + 0x612dc447, 0xacb10e4b, 0x6129ad46, 0xacac4935, 0x6125960a, 0xaca78453, + 0x61217e92, 0xaca2bfa4, + 0x611d66de, 0xac9dfb29, 0x61194eee, 0xac9936e1, 0x611536c2, 0xac9472cd, + 0x61111e5b, 0xac8faeec, + 0x610d05b7, 0xac8aeb3e, 0x6108ecd8, 0xac8627c4, 0x6104d3bc, 0xac81647e, + 0x6100ba65, 0xac7ca16b, + 0x60fca0d2, 0xac77de8b, 0x60f88703, 0xac731bdf, 0x60f46cf9, 0xac6e5967, + 0x60f052b2, 0xac699722, + 0x60ec3830, 0xac64d510, 0x60e81d72, 0xac601333, 0x60e40278, 0xac5b5189, + 0x60dfe743, 0xac569012, + 0x60dbcbd1, 0xac51cecf, 0x60d7b024, 0xac4d0dc0, 0x60d3943b, 0xac484ce4, + 0x60cf7817, 0xac438c3c, + 0x60cb5bb7, 0xac3ecbc7, 0x60c73f1b, 0xac3a0b87, 0x60c32243, 0xac354b7a, + 0x60bf0530, 0xac308ba0, + 0x60bae7e1, 0xac2bcbfa, 0x60b6ca56, 0xac270c88, 0x60b2ac8f, 0xac224d4a, + 0x60ae8e8d, 0xac1d8e40, + 0x60aa7050, 0xac18cf69, 0x60a651d7, 0xac1410c6, 0x60a23322, 0xac0f5256, + 0x609e1431, 0xac0a941b, + 0x6099f505, 0xac05d613, 0x6095d59d, 0xac01183f, 0x6091b5fa, 0xabfc5a9f, + 0x608d961b, 0xabf79d33, + 0x60897601, 0xabf2dffb, 0x608555ab, 0xabee22f6, 0x60813519, 0xabe96625, + 0x607d144c, 0xabe4a988, + 0x6078f344, 0xabdfed1f, 0x6074d200, 0xabdb30ea, 0x6070b080, 0xabd674e9, + 0x606c8ec5, 0xabd1b91c, + 0x60686ccf, 0xabccfd83, 0x60644a9d, 0xabc8421d, 0x6060282f, 0xabc386ec, + 0x605c0587, 0xabbecbee, + 0x6057e2a2, 0xabba1125, 0x6053bf82, 0xabb5568f, 0x604f9c27, 0xabb09c2e, + 0x604b7891, 0xababe200, + 0x604754bf, 0xaba72807, 0x604330b1, 0xaba26e41, 0x603f0c69, 0xab9db4b0, + 0x603ae7e5, 0xab98fb52, + 0x6036c325, 0xab944229, 0x60329e2a, 0xab8f8934, 0x602e78f4, 0xab8ad073, + 0x602a5383, 0xab8617e6, + 0x60262dd6, 0xab815f8d, 0x602207ee, 0xab7ca768, 0x601de1ca, 0xab77ef77, + 0x6019bb6b, 0xab7337bb, + 0x601594d1, 0xab6e8032, 0x60116dfc, 0xab69c8de, 0x600d46ec, 0xab6511be, + 0x60091fa0, 0xab605ad2, + 0x6004f819, 0xab5ba41a, 0x6000d057, 0xab56ed97, 0x5ffca859, 0xab523748, + 0x5ff88021, 0xab4d812d, + 0x5ff457ad, 0xab48cb46, 0x5ff02efe, 0xab441593, 0x5fec0613, 0xab3f6015, + 0x5fe7dcee, 0xab3aaacb, + 0x5fe3b38d, 0xab35f5b5, 0x5fdf89f2, 0xab3140d4, 0x5fdb601b, 0xab2c8c27, + 0x5fd73609, 0xab27d7ae, + 0x5fd30bbc, 0xab23236a, 0x5fcee133, 0xab1e6f5a, 0x5fcab670, 0xab19bb7e, + 0x5fc68b72, 0xab1507d7, + 0x5fc26038, 0xab105464, 0x5fbe34c4, 0xab0ba125, 0x5fba0914, 0xab06ee1b, + 0x5fb5dd29, 0xab023b46, + 0x5fb1b104, 0xaafd88a4, 0x5fad84a3, 0xaaf8d637, 0x5fa95807, 0xaaf423ff, + 0x5fa52b31, 0xaaef71fb, + 0x5fa0fe1f, 0xaaeac02c, 0x5f9cd0d2, 0xaae60e91, 0x5f98a34a, 0xaae15d2a, + 0x5f947588, 0xaadcabf8, + 0x5f90478a, 0xaad7fafb, 0x5f8c1951, 0xaad34a32, 0x5f87eade, 0xaace999d, + 0x5f83bc2f, 0xaac9e93e, + 0x5f7f8d46, 0xaac53912, 0x5f7b5e22, 0xaac0891c, 0x5f772ec2, 0xaabbd959, + 0x5f72ff28, 0xaab729cc, + 0x5f6ecf53, 0xaab27a73, 0x5f6a9f44, 0xaaadcb4f, 0x5f666ef9, 0xaaa91c5f, + 0x5f623e73, 0xaaa46da4, + 0x5f5e0db3, 0xaa9fbf1e, 0x5f59dcb8, 0xaa9b10cc, 0x5f55ab82, 0xaa9662af, + 0x5f517a11, 0xaa91b4c7, + 0x5f4d4865, 0xaa8d0713, 0x5f49167f, 0xaa885994, 0x5f44e45e, 0xaa83ac4a, + 0x5f40b202, 0xaa7eff34, + 0x5f3c7f6b, 0xaa7a5253, 0x5f384c9a, 0xaa75a5a8, 0x5f34198e, 0xaa70f930, + 0x5f2fe647, 0xaa6c4cee, + 0x5f2bb2c5, 0xaa67a0e0, 0x5f277f09, 0xaa62f507, 0x5f234b12, 0xaa5e4963, + 0x5f1f16e0, 0xaa599df4, + 0x5f1ae274, 0xaa54f2ba, 0x5f16adcc, 0xaa5047b4, 0x5f1278eb, 0xaa4b9ce3, + 0x5f0e43ce, 0xaa46f248, + 0x5f0a0e77, 0xaa4247e1, 0x5f05d8e6, 0xaa3d9daf, 0x5f01a31a, 0xaa38f3b1, + 0x5efd6d13, 0xaa3449e9, + 0x5ef936d1, 0xaa2fa056, 0x5ef50055, 0xaa2af6f7, 0x5ef0c99f, 0xaa264dce, + 0x5eec92ae, 0xaa21a4d9, + 0x5ee85b82, 0xaa1cfc1a, 0x5ee4241c, 0xaa18538f, 0x5edfec7b, 0xaa13ab3a, + 0x5edbb49f, 0xaa0f0319, + 0x5ed77c8a, 0xaa0a5b2e, 0x5ed34439, 0xaa05b377, 0x5ecf0baf, 0xaa010bf6, + 0x5ecad2e9, 0xa9fc64a9, + 0x5ec699e9, 0xa9f7bd92, 0x5ec260af, 0xa9f316b0, 0x5ebe273b, 0xa9ee7002, + 0x5eb9ed8b, 0xa9e9c98a, + 0x5eb5b3a2, 0xa9e52347, 0x5eb1797e, 0xa9e07d39, 0x5ead3f1f, 0xa9dbd761, + 0x5ea90487, 0xa9d731bd, + 0x5ea4c9b3, 0xa9d28c4e, 0x5ea08ea6, 0xa9cde715, 0x5e9c535e, 0xa9c94211, + 0x5e9817dc, 0xa9c49d42, + 0x5e93dc1f, 0xa9bff8a8, 0x5e8fa028, 0xa9bb5444, 0x5e8b63f7, 0xa9b6b014, + 0x5e87278b, 0xa9b20c1a, + 0x5e82eae5, 0xa9ad6855, 0x5e7eae05, 0xa9a8c4c5, 0x5e7a70ea, 0xa9a4216b, + 0x5e763395, 0xa99f7e46, + 0x5e71f606, 0xa99adb56, 0x5e6db83d, 0xa996389b, 0x5e697a39, 0xa9919616, + 0x5e653bfc, 0xa98cf3c6, + 0x5e60fd84, 0xa98851ac, 0x5e5cbed1, 0xa983afc6, 0x5e587fe5, 0xa97f0e16, + 0x5e5440be, 0xa97a6c9c, + 0x5e50015d, 0xa975cb57, 0x5e4bc1c2, 0xa9712a47, 0x5e4781ed, 0xa96c896c, + 0x5e4341de, 0xa967e8c7, + 0x5e3f0194, 0xa9634858, 0x5e3ac110, 0xa95ea81d, 0x5e368053, 0xa95a0819, + 0x5e323f5b, 0xa9556849, + 0x5e2dfe29, 0xa950c8b0, 0x5e29bcbd, 0xa94c294b, 0x5e257b17, 0xa9478a1c, + 0x5e213936, 0xa942eb23, + 0x5e1cf71c, 0xa93e4c5f, 0x5e18b4c8, 0xa939add1, 0x5e147239, 0xa9350f78, + 0x5e102f71, 0xa9307155, + 0x5e0bec6e, 0xa92bd367, 0x5e07a932, 0xa92735af, 0x5e0365bb, 0xa922982c, + 0x5dff220b, 0xa91dfadf, + 0x5dfade20, 0xa9195dc7, 0x5df699fc, 0xa914c0e6, 0x5df2559e, 0xa9102439, + 0x5dee1105, 0xa90b87c3, + 0x5de9cc33, 0xa906eb82, 0x5de58727, 0xa9024f76, 0x5de141e1, 0xa8fdb3a1, + 0x5ddcfc61, 0xa8f91801, + 0x5dd8b6a7, 0xa8f47c97, 0x5dd470b3, 0xa8efe162, 0x5dd02a85, 0xa8eb4663, + 0x5dcbe41d, 0xa8e6ab9a, + 0x5dc79d7c, 0xa8e21106, 0x5dc356a1, 0xa8dd76a9, 0x5dbf0f8c, 0xa8d8dc81, + 0x5dbac83d, 0xa8d4428f, + 0x5db680b4, 0xa8cfa8d2, 0x5db238f1, 0xa8cb0f4b, 0x5dadf0f5, 0xa8c675fb, + 0x5da9a8bf, 0xa8c1dce0, + 0x5da5604f, 0xa8bd43fa, 0x5da117a5, 0xa8b8ab4b, 0x5d9ccec2, 0xa8b412d1, + 0x5d9885a5, 0xa8af7a8e, + 0x5d943c4e, 0xa8aae280, 0x5d8ff2bd, 0xa8a64aa8, 0x5d8ba8f3, 0xa8a1b306, + 0x5d875eef, 0xa89d1b99, + 0x5d8314b1, 0xa8988463, 0x5d7eca39, 0xa893ed63, 0x5d7a7f88, 0xa88f5698, + 0x5d76349d, 0xa88ac004, + 0x5d71e979, 0xa88629a5, 0x5d6d9e1b, 0xa881937c, 0x5d695283, 0xa87cfd8a, + 0x5d6506b2, 0xa87867cd, + 0x5d60baa7, 0xa873d246, 0x5d5c6e62, 0xa86f3cf6, 0x5d5821e4, 0xa86aa7db, + 0x5d53d52d, 0xa86612f6, + 0x5d4f883b, 0xa8617e48, 0x5d4b3b10, 0xa85ce9cf, 0x5d46edac, 0xa858558d, + 0x5d42a00e, 0xa853c180, + 0x5d3e5237, 0xa84f2daa, 0x5d3a0426, 0xa84a9a0a, 0x5d35b5db, 0xa84606a0, + 0x5d316757, 0xa841736c, + 0x5d2d189a, 0xa83ce06e, 0x5d28c9a3, 0xa8384da6, 0x5d247a72, 0xa833bb14, + 0x5d202b09, 0xa82f28b9, + 0x5d1bdb65, 0xa82a9693, 0x5d178b89, 0xa82604a4, 0x5d133b72, 0xa82172eb, + 0x5d0eeb23, 0xa81ce169, + 0x5d0a9a9a, 0xa818501c, 0x5d0649d7, 0xa813bf06, 0x5d01f8dc, 0xa80f2e26, + 0x5cfda7a7, 0xa80a9d7c, + 0x5cf95638, 0xa8060d08, 0x5cf50490, 0xa8017ccb, 0x5cf0b2af, 0xa7fcecc4, + 0x5cec6095, 0xa7f85cf3, + 0x5ce80e41, 0xa7f3cd59, 0x5ce3bbb4, 0xa7ef3df5, 0x5cdf68ed, 0xa7eaaec7, + 0x5cdb15ed, 0xa7e61fd0, + 0x5cd6c2b5, 0xa7e1910f, 0x5cd26f42, 0xa7dd0284, 0x5cce1b97, 0xa7d8742f, + 0x5cc9c7b2, 0xa7d3e611, + 0x5cc57394, 0xa7cf582a, 0x5cc11f3d, 0xa7caca79, 0x5cbccaac, 0xa7c63cfe, + 0x5cb875e3, 0xa7c1afb9, + 0x5cb420e0, 0xa7bd22ac, 0x5cafcba4, 0xa7b895d4, 0x5cab762f, 0xa7b40933, + 0x5ca72080, 0xa7af7cc8, + 0x5ca2ca99, 0xa7aaf094, 0x5c9e7478, 0xa7a66497, 0x5c9a1e1e, 0xa7a1d8d0, + 0x5c95c78b, 0xa79d4d3f, + 0x5c9170bf, 0xa798c1e5, 0x5c8d19ba, 0xa79436c1, 0x5c88c27c, 0xa78fabd4, + 0x5c846b05, 0xa78b211e, + 0x5c801354, 0xa786969e, 0x5c7bbb6b, 0xa7820c55, 0x5c776348, 0xa77d8242, + 0x5c730aed, 0xa778f866, + 0x5c6eb258, 0xa7746ec0, 0x5c6a598b, 0xa76fe551, 0x5c660084, 0xa76b5c19, + 0x5c61a745, 0xa766d317, + 0x5c5d4dcc, 0xa7624a4d, 0x5c58f41a, 0xa75dc1b8, 0x5c549a30, 0xa759395b, + 0x5c50400d, 0xa754b134, + 0x5c4be5b0, 0xa7502943, 0x5c478b1b, 0xa74ba18a, 0x5c43304d, 0xa7471a07, + 0x5c3ed545, 0xa74292bb, + 0x5c3a7a05, 0xa73e0ba5, 0x5c361e8c, 0xa73984c7, 0x5c31c2db, 0xa734fe1f, + 0x5c2d66f0, 0xa73077ae, + 0x5c290acc, 0xa72bf174, 0x5c24ae70, 0xa7276b70, 0x5c2051db, 0xa722e5a3, + 0x5c1bf50d, 0xa71e600d, + 0x5c179806, 0xa719daae, 0x5c133ac6, 0xa7155586, 0x5c0edd4e, 0xa710d095, + 0x5c0a7f9c, 0xa70c4bda, + 0x5c0621b2, 0xa707c757, 0x5c01c38f, 0xa703430a, 0x5bfd6534, 0xa6febef4, + 0x5bf906a0, 0xa6fa3b15, + 0x5bf4a7d2, 0xa6f5b76d, 0x5bf048cd, 0xa6f133fc, 0x5bebe98e, 0xa6ecb0c2, + 0x5be78a17, 0xa6e82dbe, + 0x5be32a67, 0xa6e3aaf2, 0x5bdeca7f, 0xa6df285d, 0x5bda6a5d, 0xa6daa5fe, + 0x5bd60a03, 0xa6d623d7, + 0x5bd1a971, 0xa6d1a1e7, 0x5bcd48a6, 0xa6cd202d, 0x5bc8e7a2, 0xa6c89eab, + 0x5bc48666, 0xa6c41d60, + 0x5bc024f0, 0xa6bf9c4b, 0x5bbbc343, 0xa6bb1b6e, 0x5bb7615d, 0xa6b69ac8, + 0x5bb2ff3e, 0xa6b21a59, + 0x5bae9ce7, 0xa6ad9a21, 0x5baa3a57, 0xa6a91a20, 0x5ba5d78e, 0xa6a49a56, + 0x5ba1748d, 0xa6a01ac4, + 0x5b9d1154, 0xa69b9b68, 0x5b98ade2, 0xa6971c44, 0x5b944a37, 0xa6929d57, + 0x5b8fe654, 0xa68e1ea1, + 0x5b8b8239, 0xa689a022, 0x5b871de5, 0xa68521da, 0x5b82b958, 0xa680a3ca, + 0x5b7e5493, 0xa67c25f0, + 0x5b79ef96, 0xa677a84e, 0x5b758a60, 0xa6732ae3, 0x5b7124f2, 0xa66eadb0, + 0x5b6cbf4c, 0xa66a30b3, + 0x5b68596d, 0xa665b3ee, 0x5b63f355, 0xa6613760, 0x5b5f8d06, 0xa65cbb0a, + 0x5b5b267e, 0xa6583eeb, + 0x5b56bfbd, 0xa653c303, 0x5b5258c4, 0xa64f4752, 0x5b4df193, 0xa64acbd9, + 0x5b498a2a, 0xa6465097, + 0x5b452288, 0xa641d58c, 0x5b40baae, 0xa63d5ab9, 0x5b3c529c, 0xa638e01d, + 0x5b37ea51, 0xa63465b9, + 0x5b3381ce, 0xa62feb8b, 0x5b2f1913, 0xa62b7196, 0x5b2ab020, 0xa626f7d7, + 0x5b2646f4, 0xa6227e50, + 0x5b21dd90, 0xa61e0501, 0x5b1d73f4, 0xa6198be9, 0x5b190a20, 0xa6151308, + 0x5b14a014, 0xa6109a5f, + 0x5b1035cf, 0xa60c21ee, 0x5b0bcb52, 0xa607a9b4, 0x5b07609d, 0xa60331b1, + 0x5b02f5b0, 0xa5feb9e6, + 0x5afe8a8b, 0xa5fa4252, 0x5afa1f2e, 0xa5f5caf6, 0x5af5b398, 0xa5f153d2, + 0x5af147ca, 0xa5ecdce5, + 0x5aecdbc5, 0xa5e8662f, 0x5ae86f87, 0xa5e3efb1, 0x5ae40311, 0xa5df796b, + 0x5adf9663, 0xa5db035c, + 0x5adb297d, 0xa5d68d85, 0x5ad6bc5f, 0xa5d217e6, 0x5ad24f09, 0xa5cda27e, + 0x5acde17b, 0xa5c92d4e, + 0x5ac973b5, 0xa5c4b855, 0x5ac505b7, 0xa5c04395, 0x5ac09781, 0xa5bbcf0b, + 0x5abc2912, 0xa5b75aba, + 0x5ab7ba6c, 0xa5b2e6a0, 0x5ab34b8e, 0xa5ae72be, 0x5aaedc78, 0xa5a9ff14, + 0x5aaa6d2b, 0xa5a58ba1, + 0x5aa5fda5, 0xa5a11866, 0x5aa18de7, 0xa59ca563, 0x5a9d1df1, 0xa5983297, + 0x5a98adc4, 0xa593c004, + 0x5a943d5e, 0xa58f4da8, 0x5a8fccc1, 0xa58adb84, 0x5a8b5bec, 0xa5866997, + 0x5a86eadf, 0xa581f7e3, + 0x5a82799a, 0xa57d8666, 0x5a7e081d, 0xa5791521, 0x5a799669, 0xa574a414, + 0x5a75247c, 0xa570333f, + 0x5a70b258, 0xa56bc2a2, 0x5a6c3ffc, 0xa567523c, 0x5a67cd69, 0xa562e20f, + 0x5a635a9d, 0xa55e7219, + 0x5a5ee79a, 0xa55a025b, 0x5a5a745f, 0xa55592d5, 0x5a5600ec, 0xa5512388, + 0x5a518d42, 0xa54cb472, + 0x5a4d1960, 0xa5484594, 0x5a48a546, 0xa543d6ee, 0x5a4430f5, 0xa53f687f, + 0x5a3fbc6b, 0xa53afa49, + 0x5a3b47ab, 0xa5368c4b, 0x5a36d2b2, 0xa5321e85, 0x5a325d82, 0xa52db0f7, + 0x5a2de81a, 0xa52943a1, + 0x5a29727b, 0xa524d683, 0x5a24fca4, 0xa520699d, 0x5a208695, 0xa51bfcef, + 0x5a1c104f, 0xa5179079, + 0x5a1799d1, 0xa513243b, 0x5a13231b, 0xa50eb836, 0x5a0eac2e, 0xa50a4c68, + 0x5a0a350a, 0xa505e0d2, + 0x5a05bdae, 0xa5017575, 0x5a01461a, 0xa4fd0a50, 0x59fcce4f, 0xa4f89f63, + 0x59f8564c, 0xa4f434ae, + 0x59f3de12, 0xa4efca31, 0x59ef65a1, 0xa4eb5fec, 0x59eaecf8, 0xa4e6f5e0, + 0x59e67417, 0xa4e28c0c, + 0x59e1faff, 0xa4de2270, 0x59dd81b0, 0xa4d9b90c, 0x59d90829, 0xa4d54fe0, + 0x59d48e6a, 0xa4d0e6ed, + 0x59d01475, 0xa4cc7e32, 0x59cb9a47, 0xa4c815af, 0x59c71fe3, 0xa4c3ad64, + 0x59c2a547, 0xa4bf4552, + 0x59be2a74, 0xa4badd78, 0x59b9af69, 0xa4b675d6, 0x59b53427, 0xa4b20e6d, + 0x59b0b8ae, 0xa4ada73c, + 0x59ac3cfd, 0xa4a94043, 0x59a7c115, 0xa4a4d982, 0x59a344f6, 0xa4a072fa, + 0x599ec8a0, 0xa49c0cab, + 0x599a4c12, 0xa497a693, 0x5995cf4d, 0xa49340b4, 0x59915250, 0xa48edb0e, + 0x598cd51d, 0xa48a75a0, + 0x598857b2, 0xa486106a, 0x5983da10, 0xa481ab6d, 0x597f5c36, 0xa47d46a8, + 0x597ade26, 0xa478e21b, + 0x59765fde, 0xa4747dc7, 0x5971e15f, 0xa47019ac, 0x596d62a9, 0xa46bb5c9, + 0x5968e3bc, 0xa467521e, + 0x59646498, 0xa462eeac, 0x595fe53c, 0xa45e8b73, 0x595b65aa, 0xa45a2872, + 0x5956e5e0, 0xa455c5a9, + 0x595265df, 0xa4516319, 0x594de5a7, 0xa44d00c2, 0x59496538, 0xa4489ea3, + 0x5944e492, 0xa4443cbd, + 0x594063b5, 0xa43fdb10, 0x593be2a0, 0xa43b799a, 0x59376155, 0xa437185e, + 0x5932dfd3, 0xa432b75a, + 0x592e5e19, 0xa42e568f, 0x5929dc29, 0xa429f5fd, 0x59255a02, 0xa42595a3, + 0x5920d7a3, 0xa4213581, + 0x591c550e, 0xa41cd599, 0x5917d242, 0xa41875e9, 0x59134f3e, 0xa4141672, + 0x590ecc04, 0xa40fb733, + 0x590a4893, 0xa40b582e, 0x5905c4eb, 0xa406f960, 0x5901410c, 0xa4029acc, + 0x58fcbcf6, 0xa3fe3c71, + 0x58f838a9, 0xa3f9de4e, 0x58f3b426, 0xa3f58064, 0x58ef2f6b, 0xa3f122b2, + 0x58eaaa7a, 0xa3ecc53a, + 0x58e62552, 0xa3e867fa, 0x58e19ff3, 0xa3e40af3, 0x58dd1a5d, 0xa3dfae25, + 0x58d89490, 0xa3db5190, + 0x58d40e8c, 0xa3d6f534, 0x58cf8852, 0xa3d29910, 0x58cb01e1, 0xa3ce3d25, + 0x58c67b39, 0xa3c9e174, + 0x58c1f45b, 0xa3c585fb, 0x58bd6d45, 0xa3c12abb, 0x58b8e5f9, 0xa3bccfb3, + 0x58b45e76, 0xa3b874e5, + 0x58afd6bd, 0xa3b41a50, 0x58ab4ecc, 0xa3afbff3, 0x58a6c6a5, 0xa3ab65d0, + 0x58a23e48, 0xa3a70be6, + 0x589db5b3, 0xa3a2b234, 0x58992ce9, 0xa39e58bb, 0x5894a3e7, 0xa399ff7c, + 0x58901aaf, 0xa395a675, + 0x588b9140, 0xa3914da8, 0x5887079a, 0xa38cf513, 0x58827dbe, 0xa3889cb8, + 0x587df3ab, 0xa3844495, + 0x58796962, 0xa37fecac, 0x5874dee2, 0xa37b94fb, 0x5870542c, 0xa3773d84, + 0x586bc93f, 0xa372e646, + 0x58673e1b, 0xa36e8f41, 0x5862b2c1, 0xa36a3875, 0x585e2730, 0xa365e1e2, + 0x58599b69, 0xa3618b88, + 0x58550f6c, 0xa35d3567, 0x58508338, 0xa358df80, 0x584bf6cd, 0xa35489d1, + 0x58476a2c, 0xa350345c, + 0x5842dd54, 0xa34bdf20, 0x583e5047, 0xa3478a1d, 0x5839c302, 0xa3433554, + 0x58353587, 0xa33ee0c3, + 0x5830a7d6, 0xa33a8c6c, 0x582c19ef, 0xa336384e, 0x58278bd1, 0xa331e469, + 0x5822fd7c, 0xa32d90be, + 0x581e6ef1, 0xa3293d4b, 0x5819e030, 0xa324ea13, 0x58155139, 0xa3209713, + 0x5810c20b, 0xa31c444c, + 0x580c32a7, 0xa317f1bf, 0x5807a30d, 0xa3139f6b, 0x5803133c, 0xa30f4d51, + 0x57fe8335, 0xa30afb70, + 0x57f9f2f8, 0xa306a9c8, 0x57f56284, 0xa3025859, 0x57f0d1da, 0xa2fe0724, + 0x57ec40fa, 0xa2f9b629, + 0x57e7afe4, 0xa2f56566, 0x57e31e97, 0xa2f114dd, 0x57de8d15, 0xa2ecc48e, + 0x57d9fb5c, 0xa2e87477, + 0x57d5696d, 0xa2e4249b, 0x57d0d747, 0xa2dfd4f7, 0x57cc44ec, 0xa2db858e, + 0x57c7b25a, 0xa2d7365d, + 0x57c31f92, 0xa2d2e766, 0x57be8c94, 0xa2ce98a9, 0x57b9f960, 0xa2ca4a25, + 0x57b565f6, 0xa2c5fbda, + 0x57b0d256, 0xa2c1adc9, 0x57ac3e80, 0xa2bd5ff2, 0x57a7aa73, 0xa2b91254, + 0x57a31631, 0xa2b4c4f0, + 0x579e81b8, 0xa2b077c5, 0x5799ed0a, 0xa2ac2ad3, 0x57955825, 0xa2a7de1c, + 0x5790c30a, 0xa2a3919e, + 0x578c2dba, 0xa29f4559, 0x57879833, 0xa29af94e, 0x57830276, 0xa296ad7d, + 0x577e6c84, 0xa29261e5, + 0x5779d65b, 0xa28e1687, 0x57753ffc, 0xa289cb63, 0x5770a968, 0xa2858078, + 0x576c129d, 0xa28135c7, + 0x57677b9d, 0xa27ceb4f, 0x5762e467, 0xa278a111, 0x575e4cfa, 0xa274570d, + 0x5759b558, 0xa2700d43, + 0x57551d80, 0xa26bc3b2, 0x57508572, 0xa2677a5b, 0x574bed2f, 0xa263313e, + 0x574754b5, 0xa25ee85b, + 0x5742bc06, 0xa25a9fb1, 0x573e2320, 0xa2565741, 0x57398a05, 0xa2520f0b, + 0x5734f0b5, 0xa24dc70f, + 0x5730572e, 0xa2497f4c, 0x572bbd71, 0xa24537c3, 0x5727237f, 0xa240f074, + 0x57228957, 0xa23ca95f, + 0x571deefa, 0xa2386284, 0x57195466, 0xa2341be3, 0x5714b99d, 0xa22fd57b, + 0x57101e9e, 0xa22b8f4d, + 0x570b8369, 0xa2274959, 0x5706e7ff, 0xa223039f, 0x57024c5f, 0xa21ebe1f, + 0x56fdb08a, 0xa21a78d9, + 0x56f9147e, 0xa21633cd, 0x56f4783d, 0xa211eefb, 0x56efdbc7, 0xa20daa62, + 0x56eb3f1a, 0xa2096604, + 0x56e6a239, 0xa20521e0, 0x56e20521, 0xa200ddf5, 0x56dd67d4, 0xa1fc9a45, + 0x56d8ca51, 0xa1f856ce, + 0x56d42c99, 0xa1f41392, 0x56cf8eab, 0xa1efd08f, 0x56caf088, 0xa1eb8dc7, + 0x56c6522f, 0xa1e74b38, + 0x56c1b3a1, 0xa1e308e4, 0x56bd14dd, 0xa1dec6ca, 0x56b875e4, 0xa1da84e9, + 0x56b3d6b5, 0xa1d64343, + 0x56af3750, 0xa1d201d7, 0x56aa97b7, 0xa1cdc0a5, 0x56a5f7e7, 0xa1c97fad, + 0x56a157e3, 0xa1c53ef0, + 0x569cb7a8, 0xa1c0fe6c, 0x56981739, 0xa1bcbe22, 0x56937694, 0xa1b87e13, + 0x568ed5b9, 0xa1b43e3e, + 0x568a34a9, 0xa1affea3, 0x56859364, 0xa1abbf42, 0x5680f1ea, 0xa1a7801b, + 0x567c503a, 0xa1a3412f, + 0x5677ae54, 0xa19f027c, 0x56730c3a, 0xa19ac404, 0x566e69ea, 0xa19685c7, + 0x5669c765, 0xa19247c3, + 0x566524aa, 0xa18e09fa, 0x566081ba, 0xa189cc6b, 0x565bde95, 0xa1858f16, + 0x56573b3b, 0xa18151fb, + 0x565297ab, 0xa17d151b, 0x564df3e6, 0xa178d875, 0x56494fec, 0xa1749c09, + 0x5644abbc, 0xa1705fd8, + 0x56400758, 0xa16c23e1, 0x563b62be, 0xa167e824, 0x5636bdef, 0xa163aca2, + 0x563218eb, 0xa15f715a, + 0x562d73b2, 0xa15b364d, 0x5628ce43, 0xa156fb79, 0x5624289f, 0xa152c0e1, + 0x561f82c7, 0xa14e8682, + 0x561adcb9, 0xa14a4c5e, 0x56163676, 0xa1461275, 0x56118ffe, 0xa141d8c5, + 0x560ce950, 0xa13d9f51, + 0x5608426e, 0xa1396617, 0x56039b57, 0xa1352d17, 0x55fef40a, 0xa130f451, + 0x55fa4c89, 0xa12cbbc7, + 0x55f5a4d2, 0xa1288376, 0x55f0fce7, 0xa1244b61, 0x55ec54c6, 0xa1201385, + 0x55e7ac71, 0xa11bdbe4, + 0x55e303e6, 0xa117a47e, 0x55de5b27, 0xa1136d52, 0x55d9b232, 0xa10f3661, + 0x55d50909, 0xa10affab, + 0x55d05faa, 0xa106c92f, 0x55cbb617, 0xa10292ed, 0x55c70c4f, 0xa0fe5ce6, + 0x55c26251, 0xa0fa271a, + 0x55bdb81f, 0xa0f5f189, 0x55b90db8, 0xa0f1bc32, 0x55b4631d, 0xa0ed8715, + 0x55afb84c, 0xa0e95234, + 0x55ab0d46, 0xa0e51d8c, 0x55a6620c, 0xa0e0e920, 0x55a1b69d, 0xa0dcb4ee, + 0x559d0af9, 0xa0d880f7, + 0x55985f20, 0xa0d44d3b, 0x5593b312, 0xa0d019b9, 0x558f06d0, 0xa0cbe672, + 0x558a5a58, 0xa0c7b366, + 0x5585adad, 0xa0c38095, 0x558100cc, 0xa0bf4dfe, 0x557c53b6, 0xa0bb1ba2, + 0x5577a66c, 0xa0b6e981, + 0x5572f8ed, 0xa0b2b79b, 0x556e4b39, 0xa0ae85ef, 0x55699d51, 0xa0aa547e, + 0x5564ef34, 0xa0a62348, + 0x556040e2, 0xa0a1f24d, 0x555b925c, 0xa09dc18d, 0x5556e3a1, 0xa0999107, + 0x555234b1, 0xa09560bc, + 0x554d858d, 0xa09130ad, 0x5548d634, 0xa08d00d8, 0x554426a7, 0xa088d13e, + 0x553f76e4, 0xa084a1de, + 0x553ac6ee, 0xa08072ba, 0x553616c2, 0xa07c43d1, 0x55316663, 0xa0781522, + 0x552cb5ce, 0xa073e6af, + 0x55280505, 0xa06fb876, 0x55235408, 0xa06b8a78, 0x551ea2d6, 0xa0675cb6, + 0x5519f16f, 0xa0632f2e, + 0x55153fd4, 0xa05f01e1, 0x55108e05, 0xa05ad4cf, 0x550bdc01, 0xa056a7f9, + 0x550729c9, 0xa0527b5d, + 0x5502775c, 0xa04e4efc, 0x54fdc4ba, 0xa04a22d7, 0x54f911e5, 0xa045f6ec, + 0x54f45edb, 0xa041cb3c, + 0x54efab9c, 0xa03d9fc8, 0x54eaf829, 0xa039748e, 0x54e64482, 0xa0354990, + 0x54e190a6, 0xa0311ecd, + 0x54dcdc96, 0xa02cf444, 0x54d82852, 0xa028c9f7, 0x54d373d9, 0xa0249fe5, + 0x54cebf2c, 0xa020760e, + 0x54ca0a4b, 0xa01c4c73, 0x54c55535, 0xa0182312, 0x54c09feb, 0xa013f9ed, + 0x54bbea6d, 0xa00fd102, + 0x54b734ba, 0xa00ba853, 0x54b27ed3, 0xa0077fdf, 0x54adc8b8, 0xa00357a7, + 0x54a91269, 0x9fff2fa9, + 0x54a45be6, 0x9ffb07e7, 0x549fa52e, 0x9ff6e060, 0x549aee42, 0x9ff2b914, + 0x54963722, 0x9fee9204, + 0x54917fce, 0x9fea6b2f, 0x548cc845, 0x9fe64495, 0x54881089, 0x9fe21e36, + 0x54835898, 0x9fddf812, + 0x547ea073, 0x9fd9d22a, 0x5479e81a, 0x9fd5ac7d, 0x54752f8d, 0x9fd1870c, + 0x547076cc, 0x9fcd61d6, + 0x546bbdd7, 0x9fc93cdb, 0x546704ae, 0x9fc5181b, 0x54624b50, 0x9fc0f397, + 0x545d91bf, 0x9fbccf4f, + 0x5458d7f9, 0x9fb8ab41, 0x54541e00, 0x9fb4876f, 0x544f63d2, 0x9fb063d9, + 0x544aa971, 0x9fac407e, + 0x5445eedb, 0x9fa81d5e, 0x54413412, 0x9fa3fa79, 0x543c7914, 0x9f9fd7d1, + 0x5437bde3, 0x9f9bb563, + 0x5433027d, 0x9f979331, 0x542e46e4, 0x9f93713b, 0x54298b17, 0x9f8f4f80, + 0x5424cf16, 0x9f8b2e00, + 0x542012e1, 0x9f870cbc, 0x541b5678, 0x9f82ebb4, 0x541699db, 0x9f7ecae7, + 0x5411dd0a, 0x9f7aaa55, + 0x540d2005, 0x9f7689ff, 0x540862cd, 0x9f7269e5, 0x5403a561, 0x9f6e4a06, + 0x53fee7c1, 0x9f6a2a63, + 0x53fa29ed, 0x9f660afb, 0x53f56be5, 0x9f61ebcf, 0x53f0adaa, 0x9f5dccde, + 0x53ebef3a, 0x9f59ae29, + 0x53e73097, 0x9f558fb0, 0x53e271c0, 0x9f517173, 0x53ddb2b6, 0x9f4d5371, + 0x53d8f378, 0x9f4935aa, + 0x53d43406, 0x9f45181f, 0x53cf7460, 0x9f40fad0, 0x53cab486, 0x9f3cddbd, + 0x53c5f479, 0x9f38c0e5, + 0x53c13439, 0x9f34a449, 0x53bc73c4, 0x9f3087e9, 0x53b7b31c, 0x9f2c6bc5, + 0x53b2f240, 0x9f284fdc, + 0x53ae3131, 0x9f24342f, 0x53a96fee, 0x9f2018bd, 0x53a4ae77, 0x9f1bfd88, + 0x539feccd, 0x9f17e28e, + 0x539b2af0, 0x9f13c7d0, 0x539668de, 0x9f0fad4e, 0x5391a699, 0x9f0b9307, + 0x538ce421, 0x9f0778fd, + 0x53882175, 0x9f035f2e, 0x53835e95, 0x9eff459b, 0x537e9b82, 0x9efb2c44, + 0x5379d83c, 0x9ef71328, + 0x537514c2, 0x9ef2fa49, 0x53705114, 0x9eeee1a5, 0x536b8d33, 0x9eeac93e, + 0x5366c91f, 0x9ee6b112, + 0x536204d7, 0x9ee29922, 0x535d405c, 0x9ede816e, 0x53587bad, 0x9eda69f6, + 0x5353b6cb, 0x9ed652ba, + 0x534ef1b5, 0x9ed23bb9, 0x534a2c6c, 0x9ece24f5, 0x534566f0, 0x9eca0e6d, + 0x5340a140, 0x9ec5f820, + 0x533bdb5d, 0x9ec1e210, 0x53371547, 0x9ebdcc3b, 0x53324efd, 0x9eb9b6a3, + 0x532d8880, 0x9eb5a146, + 0x5328c1d0, 0x9eb18c26, 0x5323faec, 0x9ead7742, 0x531f33d5, 0x9ea96299, + 0x531a6c8b, 0x9ea54e2d, + 0x5315a50e, 0x9ea139fd, 0x5310dd5d, 0x9e9d2608, 0x530c1579, 0x9e991250, + 0x53074d62, 0x9e94fed4, + 0x53028518, 0x9e90eb94, 0x52fdbc9a, 0x9e8cd890, 0x52f8f3e9, 0x9e88c5c9, + 0x52f42b05, 0x9e84b33d, + 0x52ef61ee, 0x9e80a0ee, 0x52ea98a4, 0x9e7c8eda, 0x52e5cf27, 0x9e787d03, + 0x52e10576, 0x9e746b68, + 0x52dc3b92, 0x9e705a09, 0x52d7717b, 0x9e6c48e7, 0x52d2a732, 0x9e683800, + 0x52cddcb5, 0x9e642756, + 0x52c91204, 0x9e6016e8, 0x52c44721, 0x9e5c06b6, 0x52bf7c0b, 0x9e57f6c0, + 0x52bab0c2, 0x9e53e707, + 0x52b5e546, 0x9e4fd78a, 0x52b11996, 0x9e4bc849, 0x52ac4db4, 0x9e47b944, + 0x52a7819f, 0x9e43aa7c, + 0x52a2b556, 0x9e3f9bf0, 0x529de8db, 0x9e3b8da0, 0x52991c2d, 0x9e377f8c, + 0x52944f4c, 0x9e3371b5, + 0x528f8238, 0x9e2f641b, 0x528ab4f1, 0x9e2b56bc, 0x5285e777, 0x9e27499a, + 0x528119ca, 0x9e233cb4, + 0x527c4bea, 0x9e1f300b, 0x52777dd7, 0x9e1b239e, 0x5272af92, 0x9e17176d, + 0x526de11a, 0x9e130b79, + 0x5269126e, 0x9e0effc1, 0x52644390, 0x9e0af446, 0x525f7480, 0x9e06e907, + 0x525aa53c, 0x9e02de04, + 0x5255d5c5, 0x9dfed33e, 0x5251061c, 0x9dfac8b4, 0x524c3640, 0x9df6be67, + 0x52476631, 0x9df2b456, + 0x524295f0, 0x9deeaa82, 0x523dc57b, 0x9deaa0ea, 0x5238f4d4, 0x9de6978f, + 0x523423fb, 0x9de28e70, + 0x522f52ee, 0x9dde858e, 0x522a81af, 0x9dda7ce9, 0x5225b03d, 0x9dd6747f, + 0x5220de99, 0x9dd26c53, + 0x521c0cc2, 0x9dce6463, 0x52173ab8, 0x9dca5caf, 0x5212687b, 0x9dc65539, + 0x520d960c, 0x9dc24dfe, + 0x5208c36a, 0x9dbe4701, 0x5203f096, 0x9dba4040, 0x51ff1d8f, 0x9db639bb, + 0x51fa4a56, 0x9db23373, + 0x51f576ea, 0x9dae2d68, 0x51f0a34b, 0x9daa279a, 0x51ebcf7a, 0x9da62208, + 0x51e6fb76, 0x9da21cb2, + 0x51e22740, 0x9d9e179a, 0x51dd52d7, 0x9d9a12be, 0x51d87e3c, 0x9d960e1f, + 0x51d3a96f, 0x9d9209bd, + 0x51ced46e, 0x9d8e0597, 0x51c9ff3c, 0x9d8a01ae, 0x51c529d7, 0x9d85fe02, + 0x51c0543f, 0x9d81fa92, + 0x51bb7e75, 0x9d7df75f, 0x51b6a879, 0x9d79f469, 0x51b1d24a, 0x9d75f1b0, + 0x51acfbe9, 0x9d71ef34, + 0x51a82555, 0x9d6decf4, 0x51a34e8f, 0x9d69eaf1, 0x519e7797, 0x9d65e92b, + 0x5199a06d, 0x9d61e7a2, + 0x5194c910, 0x9d5de656, 0x518ff180, 0x9d59e546, 0x518b19bf, 0x9d55e473, + 0x518641cb, 0x9d51e3dd, + 0x518169a5, 0x9d4de385, 0x517c914c, 0x9d49e368, 0x5177b8c2, 0x9d45e389, + 0x5172e005, 0x9d41e3e7, + 0x516e0715, 0x9d3de482, 0x51692df4, 0x9d39e559, 0x516454a0, 0x9d35e66e, + 0x515f7b1a, 0x9d31e7bf, + 0x515aa162, 0x9d2de94d, 0x5155c778, 0x9d29eb19, 0x5150ed5c, 0x9d25ed21, + 0x514c130d, 0x9d21ef66, + 0x5147388c, 0x9d1df1e9, 0x51425dd9, 0x9d19f4a8, 0x513d82f4, 0x9d15f7a4, + 0x5138a7dd, 0x9d11fadd, + 0x5133cc94, 0x9d0dfe54, 0x512ef119, 0x9d0a0207, 0x512a156b, 0x9d0605f7, + 0x5125398c, 0x9d020a25, + 0x51205d7b, 0x9cfe0e8f, 0x511b8137, 0x9cfa1337, 0x5116a4c1, 0x9cf6181c, + 0x5111c81a, 0x9cf21d3d, + 0x510ceb40, 0x9cee229c, 0x51080e35, 0x9cea2838, 0x510330f7, 0x9ce62e11, + 0x50fe5388, 0x9ce23427, + 0x50f975e6, 0x9cde3a7b, 0x50f49813, 0x9cda410b, 0x50efba0d, 0x9cd647d9, + 0x50eadbd6, 0x9cd24ee4, + 0x50e5fd6d, 0x9cce562c, 0x50e11ed2, 0x9cca5db1, 0x50dc4005, 0x9cc66573, + 0x50d76106, 0x9cc26d73, + 0x50d281d5, 0x9cbe75b0, 0x50cda272, 0x9cba7e2a, 0x50c8c2de, 0x9cb686e1, + 0x50c3e317, 0x9cb28fd5, + 0x50bf031f, 0x9cae9907, 0x50ba22f5, 0x9caaa276, 0x50b5429a, 0x9ca6ac23, + 0x50b0620c, 0x9ca2b60c, + 0x50ab814d, 0x9c9ec033, 0x50a6a05c, 0x9c9aca97, 0x50a1bf39, 0x9c96d539, + 0x509cdde4, 0x9c92e017, + 0x5097fc5e, 0x9c8eeb34, 0x50931aa6, 0x9c8af68d, 0x508e38bd, 0x9c870224, + 0x508956a1, 0x9c830df8, + 0x50847454, 0x9c7f1a0a, 0x507f91d5, 0x9c7b2659, 0x507aaf25, 0x9c7732e5, + 0x5075cc43, 0x9c733faf, + 0x5070e92f, 0x9c6f4cb6, 0x506c05ea, 0x9c6b59fa, 0x50672273, 0x9c67677c, + 0x50623ecb, 0x9c63753c, + 0x505d5af1, 0x9c5f8339, 0x505876e5, 0x9c5b9173, 0x505392a8, 0x9c579feb, + 0x504eae39, 0x9c53aea0, + 0x5049c999, 0x9c4fbd93, 0x5044e4c7, 0x9c4bccc3, 0x503fffc4, 0x9c47dc31, + 0x503b1a8f, 0x9c43ebdc, + 0x50363529, 0x9c3ffbc5, 0x50314f91, 0x9c3c0beb, 0x502c69c8, 0x9c381c4f, + 0x502783cd, 0x9c342cf0, + 0x50229da1, 0x9c303dcf, 0x501db743, 0x9c2c4eec, 0x5018d0b4, 0x9c286046, + 0x5013e9f4, 0x9c2471de, + 0x500f0302, 0x9c2083b3, 0x500a1bdf, 0x9c1c95c6, 0x5005348a, 0x9c18a816, + 0x50004d04, 0x9c14baa4, + 0x4ffb654d, 0x9c10cd70, 0x4ff67d64, 0x9c0ce07a, 0x4ff1954b, 0x9c08f3c1, + 0x4fecacff, 0x9c050745, + 0x4fe7c483, 0x9c011b08, 0x4fe2dbd5, 0x9bfd2f08, 0x4fddf2f6, 0x9bf94346, + 0x4fd909e5, 0x9bf557c1, + 0x4fd420a4, 0x9bf16c7a, 0x4fcf3731, 0x9bed8171, 0x4fca4d8d, 0x9be996a6, + 0x4fc563b7, 0x9be5ac18, + 0x4fc079b1, 0x9be1c1c8, 0x4fbb8f79, 0x9bddd7b6, 0x4fb6a510, 0x9bd9ede2, + 0x4fb1ba76, 0x9bd6044b, + 0x4faccfab, 0x9bd21af3, 0x4fa7e4af, 0x9bce31d8, 0x4fa2f981, 0x9bca48fa, + 0x4f9e0e22, 0x9bc6605b, + 0x4f992293, 0x9bc277fa, 0x4f9436d2, 0x9bbe8fd6, 0x4f8f4ae0, 0x9bbaa7f0, + 0x4f8a5ebd, 0x9bb6c048, + 0x4f857269, 0x9bb2d8de, 0x4f8085e4, 0x9baef1b2, 0x4f7b992d, 0x9bab0ac3, + 0x4f76ac46, 0x9ba72413, + 0x4f71bf2e, 0x9ba33da0, 0x4f6cd1e5, 0x9b9f576b, 0x4f67e46a, 0x9b9b7174, + 0x4f62f6bf, 0x9b978bbc, + 0x4f5e08e3, 0x9b93a641, 0x4f591ad6, 0x9b8fc104, 0x4f542c98, 0x9b8bdc05, + 0x4f4f3e29, 0x9b87f744, + 0x4f4a4f89, 0x9b8412c1, 0x4f4560b8, 0x9b802e7b, 0x4f4071b6, 0x9b7c4a74, + 0x4f3b8284, 0x9b7866ab, + 0x4f369320, 0x9b748320, 0x4f31a38c, 0x9b709fd3, 0x4f2cb3c7, 0x9b6cbcc4, + 0x4f27c3d1, 0x9b68d9f3, + 0x4f22d3aa, 0x9b64f760, 0x4f1de352, 0x9b61150b, 0x4f18f2c9, 0x9b5d32f4, + 0x4f140210, 0x9b59511c, + 0x4f0f1126, 0x9b556f81, 0x4f0a200b, 0x9b518e24, 0x4f052ec0, 0x9b4dad06, + 0x4f003d43, 0x9b49cc26, + 0x4efb4b96, 0x9b45eb83, 0x4ef659b8, 0x9b420b1f, 0x4ef167aa, 0x9b3e2af9, + 0x4eec756b, 0x9b3a4b11, + 0x4ee782fb, 0x9b366b68, 0x4ee2905a, 0x9b328bfc, 0x4edd9d89, 0x9b2eaccf, + 0x4ed8aa87, 0x9b2acde0, + 0x4ed3b755, 0x9b26ef2f, 0x4ecec3f2, 0x9b2310bc, 0x4ec9d05e, 0x9b1f3288, + 0x4ec4dc99, 0x9b1b5492, + 0x4ebfe8a5, 0x9b1776da, 0x4ebaf47f, 0x9b139960, 0x4eb60029, 0x9b0fbc24, + 0x4eb10ba2, 0x9b0bdf27, + 0x4eac16eb, 0x9b080268, 0x4ea72203, 0x9b0425e8, 0x4ea22ceb, 0x9b0049a5, + 0x4e9d37a3, 0x9afc6da1, + 0x4e984229, 0x9af891db, 0x4e934c80, 0x9af4b654, 0x4e8e56a5, 0x9af0db0b, + 0x4e89609b, 0x9aed0000, + 0x4e846a60, 0x9ae92533, 0x4e7f73f4, 0x9ae54aa5, 0x4e7a7d58, 0x9ae17056, + 0x4e75868c, 0x9add9644, + 0x4e708f8f, 0x9ad9bc71, 0x4e6b9862, 0x9ad5e2dd, 0x4e66a105, 0x9ad20987, + 0x4e61a977, 0x9ace306f, + 0x4e5cb1b9, 0x9aca5795, 0x4e57b9ca, 0x9ac67efb, 0x4e52c1ab, 0x9ac2a69e, + 0x4e4dc95c, 0x9abece80, + 0x4e48d0dd, 0x9abaf6a1, 0x4e43d82d, 0x9ab71eff, 0x4e3edf4d, 0x9ab3479d, + 0x4e39e63d, 0x9aaf7079, + 0x4e34ecfc, 0x9aab9993, 0x4e2ff38b, 0x9aa7c2ec, 0x4e2af9ea, 0x9aa3ec83, + 0x4e260019, 0x9aa01659, + 0x4e210617, 0x9a9c406e, 0x4e1c0be6, 0x9a986ac1, 0x4e171184, 0x9a949552, + 0x4e1216f2, 0x9a90c022, + 0x4e0d1c30, 0x9a8ceb31, 0x4e08213e, 0x9a89167e, 0x4e03261b, 0x9a85420a, + 0x4dfe2ac9, 0x9a816dd5, + 0x4df92f46, 0x9a7d99de, 0x4df43393, 0x9a79c625, 0x4def37b0, 0x9a75f2ac, + 0x4dea3b9d, 0x9a721f71, + 0x4de53f5a, 0x9a6e4c74, 0x4de042e7, 0x9a6a79b6, 0x4ddb4644, 0x9a66a737, + 0x4dd64971, 0x9a62d4f7, + 0x4dd14c6e, 0x9a5f02f5, 0x4dcc4f3b, 0x9a5b3132, 0x4dc751d8, 0x9a575fae, + 0x4dc25445, 0x9a538e68, + 0x4dbd5682, 0x9a4fbd61, 0x4db8588f, 0x9a4bec99, 0x4db35a6c, 0x9a481c0f, + 0x4dae5c19, 0x9a444bc5, + 0x4da95d96, 0x9a407bb9, 0x4da45ee3, 0x9a3cabeb, 0x4d9f6001, 0x9a38dc5d, + 0x4d9a60ee, 0x9a350d0d, + 0x4d9561ac, 0x9a313dfc, 0x4d90623a, 0x9a2d6f2a, 0x4d8b6298, 0x9a29a097, + 0x4d8662c6, 0x9a25d243, + 0x4d8162c4, 0x9a22042d, 0x4d7c6293, 0x9a1e3656, 0x4d776231, 0x9a1a68be, + 0x4d7261a0, 0x9a169b65, + 0x4d6d60df, 0x9a12ce4b, 0x4d685fef, 0x9a0f016f, 0x4d635ece, 0x9a0b34d3, + 0x4d5e5d7e, 0x9a076875, + 0x4d595bfe, 0x9a039c57, 0x4d545a4f, 0x99ffd077, 0x4d4f5870, 0x99fc04d6, + 0x4d4a5661, 0x99f83974, + 0x4d455422, 0x99f46e51, 0x4d4051b4, 0x99f0a36d, 0x4d3b4f16, 0x99ecd8c8, + 0x4d364c48, 0x99e90e62, + 0x4d31494b, 0x99e5443b, 0x4d2c461e, 0x99e17a53, 0x4d2742c2, 0x99ddb0aa, + 0x4d223f36, 0x99d9e73f, + 0x4d1d3b7a, 0x99d61e14, 0x4d18378f, 0x99d25528, 0x4d133374, 0x99ce8c7b, + 0x4d0e2f2a, 0x99cac40d, + 0x4d092ab0, 0x99c6fbde, 0x4d042607, 0x99c333ee, 0x4cff212e, 0x99bf6c3d, + 0x4cfa1c26, 0x99bba4cb, + 0x4cf516ee, 0x99b7dd99, 0x4cf01187, 0x99b416a5, 0x4ceb0bf0, 0x99b04ff0, + 0x4ce6062a, 0x99ac897b, + 0x4ce10034, 0x99a8c345, 0x4cdbfa0f, 0x99a4fd4d, 0x4cd6f3bb, 0x99a13795, + 0x4cd1ed37, 0x999d721c, + 0x4ccce684, 0x9999ace3, 0x4cc7dfa1, 0x9995e7e8, 0x4cc2d88f, 0x9992232d, + 0x4cbdd14e, 0x998e5eb1, + 0x4cb8c9dd, 0x998a9a74, 0x4cb3c23d, 0x9986d676, 0x4caeba6e, 0x998312b7, + 0x4ca9b26f, 0x997f4f38, + 0x4ca4aa41, 0x997b8bf8, 0x4c9fa1e4, 0x9977c8f7, 0x4c9a9958, 0x99740635, + 0x4c95909c, 0x997043b2, + 0x4c9087b1, 0x996c816f, 0x4c8b7e97, 0x9968bf6b, 0x4c86754e, 0x9964fda7, + 0x4c816bd5, 0x99613c22, + 0x4c7c622d, 0x995d7adc, 0x4c775856, 0x9959b9d5, 0x4c724e50, 0x9955f90d, + 0x4c6d441b, 0x99523885, + 0x4c6839b7, 0x994e783d, 0x4c632f23, 0x994ab833, 0x4c5e2460, 0x9946f869, + 0x4c59196f, 0x994338df, + 0x4c540e4e, 0x993f7993, 0x4c4f02fe, 0x993bba87, 0x4c49f77f, 0x9937fbbb, + 0x4c44ebd1, 0x99343d2e, + 0x4c3fdff4, 0x99307ee0, 0x4c3ad3e7, 0x992cc0d2, 0x4c35c7ac, 0x99290303, + 0x4c30bb42, 0x99254574, + 0x4c2baea9, 0x99218824, 0x4c26a1e1, 0x991dcb13, 0x4c2194e9, 0x991a0e42, + 0x4c1c87c3, 0x991651b1, + 0x4c177a6e, 0x9912955f, 0x4c126cea, 0x990ed94c, 0x4c0d5f37, 0x990b1d79, + 0x4c085156, 0x990761e5, + 0x4c034345, 0x9903a691, 0x4bfe3505, 0x98ffeb7d, 0x4bf92697, 0x98fc30a8, + 0x4bf417f9, 0x98f87612, + 0x4bef092d, 0x98f4bbbc, 0x4be9fa32, 0x98f101a6, 0x4be4eb08, 0x98ed47cf, + 0x4bdfdbaf, 0x98e98e38, + 0x4bdacc28, 0x98e5d4e0, 0x4bd5bc72, 0x98e21bc8, 0x4bd0ac8d, 0x98de62f0, + 0x4bcb9c79, 0x98daaa57, + 0x4bc68c36, 0x98d6f1fe, 0x4bc17bc5, 0x98d339e4, 0x4bbc6b25, 0x98cf820b, + 0x4bb75a56, 0x98cbca70, + 0x4bb24958, 0x98c81316, 0x4bad382c, 0x98c45bfb, 0x4ba826d1, 0x98c0a520, + 0x4ba31548, 0x98bcee84, + 0x4b9e0390, 0x98b93828, 0x4b98f1a9, 0x98b5820c, 0x4b93df93, 0x98b1cc30, + 0x4b8ecd4f, 0x98ae1693, + 0x4b89badd, 0x98aa6136, 0x4b84a83b, 0x98a6ac19, 0x4b7f956b, 0x98a2f73c, + 0x4b7a826d, 0x989f429e, + 0x4b756f40, 0x989b8e40, 0x4b705be4, 0x9897da22, 0x4b6b485a, 0x98942643, + 0x4b6634a2, 0x989072a5, + 0x4b6120bb, 0x988cbf46, 0x4b5c0ca5, 0x98890c27, 0x4b56f861, 0x98855948, + 0x4b51e3ee, 0x9881a6a9, + 0x4b4ccf4d, 0x987df449, 0x4b47ba7e, 0x987a422a, 0x4b42a580, 0x9876904a, + 0x4b3d9053, 0x9872deaa, + 0x4b387af9, 0x986f2d4a, 0x4b336570, 0x986b7c2a, 0x4b2e4fb8, 0x9867cb4a, + 0x4b2939d2, 0x98641aa9, + 0x4b2423be, 0x98606a49, 0x4b1f0d7b, 0x985cba28, 0x4b19f70a, 0x98590a48, + 0x4b14e06b, 0x98555aa7, + 0x4b0fc99d, 0x9851ab46, 0x4b0ab2a1, 0x984dfc26, 0x4b059b77, 0x984a4d45, + 0x4b00841f, 0x98469ea4, + 0x4afb6c98, 0x9842f043, 0x4af654e3, 0x983f4223, 0x4af13d00, 0x983b9442, + 0x4aec24ee, 0x9837e6a1, + 0x4ae70caf, 0x98343940, 0x4ae1f441, 0x98308c1f, 0x4adcdba5, 0x982cdf3f, + 0x4ad7c2da, 0x9829329e, + 0x4ad2a9e2, 0x9825863d, 0x4acd90bb, 0x9821da1d, 0x4ac87767, 0x981e2e3c, + 0x4ac35de4, 0x981a829c, + 0x4abe4433, 0x9816d73b, 0x4ab92a54, 0x98132c1b, 0x4ab41046, 0x980f813b, + 0x4aaef60b, 0x980bd69b, + 0x4aa9dba2, 0x98082c3b, 0x4aa4c10b, 0x9804821b, 0x4a9fa645, 0x9800d83c, + 0x4a9a8b52, 0x97fd2e9c, + 0x4a957030, 0x97f9853d, 0x4a9054e1, 0x97f5dc1e, 0x4a8b3963, 0x97f2333f, + 0x4a861db8, 0x97ee8aa0, + 0x4a8101de, 0x97eae242, 0x4a7be5d7, 0x97e73a23, 0x4a76c9a2, 0x97e39245, + 0x4a71ad3e, 0x97dfeaa7, + 0x4a6c90ad, 0x97dc4349, 0x4a6773ee, 0x97d89c2c, 0x4a625701, 0x97d4f54f, + 0x4a5d39e6, 0x97d14eb2, + 0x4a581c9e, 0x97cda855, 0x4a52ff27, 0x97ca0239, 0x4a4de182, 0x97c65c5c, + 0x4a48c3b0, 0x97c2b6c1, + 0x4a43a5b0, 0x97bf1165, 0x4a3e8782, 0x97bb6c4a, 0x4a396926, 0x97b7c76f, + 0x4a344a9d, 0x97b422d4, + 0x4a2f2be6, 0x97b07e7a, 0x4a2a0d01, 0x97acda60, 0x4a24edee, 0x97a93687, + 0x4a1fcead, 0x97a592ed, + 0x4a1aaf3f, 0x97a1ef94, 0x4a158fa3, 0x979e4c7c, 0x4a106fda, 0x979aa9a4, + 0x4a0b4fe2, 0x9797070c, + 0x4a062fbd, 0x979364b5, 0x4a010f6b, 0x978fc29e, 0x49fbeeea, 0x978c20c8, + 0x49f6ce3c, 0x97887f32, + 0x49f1ad61, 0x9784dddc, 0x49ec8c57, 0x97813cc7, 0x49e76b21, 0x977d9bf2, + 0x49e249bc, 0x9779fb5e, + 0x49dd282a, 0x97765b0a, 0x49d8066b, 0x9772baf7, 0x49d2e47e, 0x976f1b24, + 0x49cdc263, 0x976b7b92, + 0x49c8a01b, 0x9767dc41, 0x49c37da5, 0x97643d2f, 0x49be5b02, 0x97609e5f, + 0x49b93832, 0x975cffcf, + 0x49b41533, 0x9759617f, 0x49aef208, 0x9755c370, 0x49a9ceaf, 0x975225a1, + 0x49a4ab28, 0x974e8813, + 0x499f8774, 0x974aeac6, 0x499a6393, 0x97474db9, 0x49953f84, 0x9743b0ed, + 0x49901b48, 0x97401462, + 0x498af6df, 0x973c7817, 0x4985d248, 0x9738dc0d, 0x4980ad84, 0x97354043, + 0x497b8892, 0x9731a4ba, + 0x49766373, 0x972e0971, 0x49713e27, 0x972a6e6a, 0x496c18ae, 0x9726d3a3, + 0x4966f307, 0x9723391c, + 0x4961cd33, 0x971f9ed7, 0x495ca732, 0x971c04d2, 0x49578103, 0x97186b0d, + 0x49525aa7, 0x9714d18a, + 0x494d341e, 0x97113847, 0x49480d68, 0x970d9f45, 0x4942e684, 0x970a0683, + 0x493dbf74, 0x97066e03, + 0x49389836, 0x9702d5c3, 0x493370cb, 0x96ff3dc4, 0x492e4933, 0x96fba605, + 0x4929216e, 0x96f80e88, + 0x4923f97b, 0x96f4774b, 0x491ed15c, 0x96f0e04f, 0x4919a90f, 0x96ed4994, + 0x49148095, 0x96e9b319, + 0x490f57ee, 0x96e61ce0, 0x490a2f1b, 0x96e286e7, 0x4905061a, 0x96def12f, + 0x48ffdcec, 0x96db5bb8, + 0x48fab391, 0x96d7c682, 0x48f58a09, 0x96d4318d, 0x48f06054, 0x96d09cd8, + 0x48eb3672, 0x96cd0865, + 0x48e60c62, 0x96c97432, 0x48e0e227, 0x96c5e040, 0x48dbb7be, 0x96c24c8f, + 0x48d68d28, 0x96beb91f, + 0x48d16265, 0x96bb25f0, 0x48cc3775, 0x96b79302, 0x48c70c59, 0x96b40055, + 0x48c1e10f, 0x96b06de9, + 0x48bcb599, 0x96acdbbe, 0x48b789f5, 0x96a949d3, 0x48b25e25, 0x96a5b82a, + 0x48ad3228, 0x96a226c2, + 0x48a805ff, 0x969e959b, 0x48a2d9a8, 0x969b04b4, 0x489dad25, 0x9697740f, + 0x48988074, 0x9693e3ab, + 0x48935397, 0x96905388, 0x488e268e, 0x968cc3a5, 0x4888f957, 0x96893404, + 0x4883cbf4, 0x9685a4a4, + 0x487e9e64, 0x96821585, 0x487970a7, 0x967e86a7, 0x487442be, 0x967af80a, + 0x486f14a8, 0x967769af, + 0x4869e665, 0x9673db94, 0x4864b7f5, 0x96704dba, 0x485f8959, 0x966cc022, + 0x485a5a90, 0x966932cb, + 0x48552b9b, 0x9665a5b4, 0x484ffc79, 0x966218df, 0x484acd2a, 0x965e8c4b, + 0x48459daf, 0x965afff9, + 0x48406e08, 0x965773e7, 0x483b3e33, 0x9653e817, 0x48360e32, 0x96505c88, + 0x4830de05, 0x964cd139, + 0x482badab, 0x9649462d, 0x48267d24, 0x9645bb61, 0x48214c71, 0x964230d7, + 0x481c1b92, 0x963ea68d, + 0x4816ea86, 0x963b1c86, 0x4811b94d, 0x963792bf, 0x480c87e8, 0x96340939, + 0x48075657, 0x96307ff5, + 0x48022499, 0x962cf6f2, 0x47fcf2af, 0x96296e31, 0x47f7c099, 0x9625e5b0, + 0x47f28e56, 0x96225d71, + 0x47ed5be6, 0x961ed574, 0x47e8294a, 0x961b4db7, 0x47e2f682, 0x9617c63c, + 0x47ddc38e, 0x96143f02, + 0x47d8906d, 0x9610b80a, 0x47d35d20, 0x960d3153, 0x47ce29a7, 0x9609aadd, + 0x47c8f601, 0x960624a9, + 0x47c3c22f, 0x96029eb6, 0x47be8e31, 0x95ff1904, 0x47b95a06, 0x95fb9394, + 0x47b425af, 0x95f80e65, + 0x47aef12c, 0x95f48977, 0x47a9bc7d, 0x95f104cb, 0x47a487a2, 0x95ed8061, + 0x479f529a, 0x95e9fc38, + 0x479a1d67, 0x95e67850, 0x4794e807, 0x95e2f4a9, 0x478fb27b, 0x95df7145, + 0x478a7cc2, 0x95dbee21, + 0x478546de, 0x95d86b3f, 0x478010cd, 0x95d4e89f, 0x477ada91, 0x95d16640, + 0x4775a428, 0x95cde423, + 0x47706d93, 0x95ca6247, 0x476b36d3, 0x95c6e0ac, 0x4765ffe6, 0x95c35f53, + 0x4760c8cd, 0x95bfde3c, + 0x475b9188, 0x95bc5d66, 0x47565a17, 0x95b8dcd2, 0x4751227a, 0x95b55c7f, + 0x474beab1, 0x95b1dc6e, + 0x4746b2bc, 0x95ae5c9f, 0x47417a9b, 0x95aadd11, 0x473c424e, 0x95a75dc4, + 0x473709d5, 0x95a3deb9, + 0x4731d131, 0x95a05ff0, 0x472c9860, 0x959ce169, 0x47275f63, 0x95996323, + 0x4722263b, 0x9595e51e, + 0x471cece7, 0x9592675c, 0x4717b367, 0x958ee9db, 0x471279ba, 0x958b6c9b, + 0x470d3fe3, 0x9587ef9e, + 0x470805df, 0x958472e2, 0x4702cbaf, 0x9580f667, 0x46fd9154, 0x957d7a2f, + 0x46f856cd, 0x9579fe38, + 0x46f31c1a, 0x95768283, 0x46ede13b, 0x9573070f, 0x46e8a631, 0x956f8bdd, + 0x46e36afb, 0x956c10ed, + 0x46de2f99, 0x9568963f, 0x46d8f40b, 0x95651bd2, 0x46d3b852, 0x9561a1a8, + 0x46ce7c6d, 0x955e27bf, + 0x46c9405c, 0x955aae17, 0x46c40420, 0x955734b2, 0x46bec7b8, 0x9553bb8e, + 0x46b98b24, 0x955042ac, + 0x46b44e65, 0x954cca0c, 0x46af117a, 0x954951ae, 0x46a9d464, 0x9545d992, + 0x46a49722, 0x954261b7, + 0x469f59b4, 0x953eea1e, 0x469a1c1b, 0x953b72c7, 0x4694de56, 0x9537fbb2, + 0x468fa066, 0x953484df, + 0x468a624a, 0x95310e4e, 0x46852403, 0x952d97fe, 0x467fe590, 0x952a21f1, + 0x467aa6f2, 0x9526ac25, + 0x46756828, 0x9523369c, 0x46702933, 0x951fc154, 0x466aea12, 0x951c4c4e, + 0x4665aac6, 0x9518d78a, + 0x46606b4e, 0x95156308, 0x465b2bab, 0x9511eec8, 0x4655ebdd, 0x950e7aca, + 0x4650abe3, 0x950b070e, + 0x464b6bbe, 0x95079394, 0x46462b6d, 0x9504205c, 0x4640eaf2, 0x9500ad66, + 0x463baa4a, 0x94fd3ab1, + 0x46366978, 0x94f9c83f, 0x4631287a, 0x94f6560f, 0x462be751, 0x94f2e421, + 0x4626a5fd, 0x94ef7275, + 0x4621647d, 0x94ec010b, 0x461c22d2, 0x94e88fe3, 0x4616e0fc, 0x94e51efd, + 0x46119efa, 0x94e1ae59, + 0x460c5cce, 0x94de3df8, 0x46071a76, 0x94dacdd8, 0x4601d7f3, 0x94d75dfa, + 0x45fc9545, 0x94d3ee5f, + 0x45f7526b, 0x94d07f05, 0x45f20f67, 0x94cd0fee, 0x45eccc37, 0x94c9a119, + 0x45e788dc, 0x94c63286, + 0x45e24556, 0x94c2c435, 0x45dd01a5, 0x94bf5627, 0x45d7bdc9, 0x94bbe85a, + 0x45d279c2, 0x94b87ad0, + 0x45cd358f, 0x94b50d87, 0x45c7f132, 0x94b1a081, 0x45c2acaa, 0x94ae33be, + 0x45bd67f6, 0x94aac73c, + 0x45b82318, 0x94a75afd, 0x45b2de0e, 0x94a3eeff, 0x45ad98da, 0x94a08344, + 0x45a8537a, 0x949d17cc, + 0x45a30df0, 0x9499ac95, 0x459dc83b, 0x949641a1, 0x4598825a, 0x9492d6ef, + 0x45933c4f, 0x948f6c7f, + 0x458df619, 0x948c0252, 0x4588afb8, 0x94889867, 0x4583692c, 0x94852ebe, + 0x457e2275, 0x9481c557, + 0x4578db93, 0x947e5c33, 0x45739487, 0x947af351, 0x456e4d4f, 0x94778ab1, + 0x456905ed, 0x94742254, + 0x4563be60, 0x9470ba39, 0x455e76a8, 0x946d5260, 0x45592ec6, 0x9469eaca, + 0x4553e6b8, 0x94668376, + 0x454e9e80, 0x94631c65, 0x4549561d, 0x945fb596, 0x45440d90, 0x945c4f09, + 0x453ec4d7, 0x9458e8bf, + 0x45397bf4, 0x945582b7, 0x453432e6, 0x94521cf1, 0x452ee9ae, 0x944eb76e, + 0x4529a04b, 0x944b522d, + 0x452456bd, 0x9447ed2f, 0x451f0d04, 0x94448873, 0x4519c321, 0x944123fa, + 0x45147913, 0x943dbfc3, + 0x450f2edb, 0x943a5bcf, 0x4509e478, 0x9436f81d, 0x450499eb, 0x943394ad, + 0x44ff4f32, 0x94303180, + 0x44fa0450, 0x942cce96, 0x44f4b943, 0x94296bee, 0x44ef6e0b, 0x94260989, + 0x44ea22a9, 0x9422a766, + 0x44e4d71c, 0x941f4585, 0x44df8b64, 0x941be3e8, 0x44da3f83, 0x9418828c, + 0x44d4f376, 0x94152174, + 0x44cfa740, 0x9411c09e, 0x44ca5adf, 0x940e600a, 0x44c50e53, 0x940affb9, + 0x44bfc19d, 0x94079fab, + 0x44ba74bd, 0x94043fdf, 0x44b527b2, 0x9400e056, 0x44afda7d, 0x93fd810f, + 0x44aa8d1d, 0x93fa220b, + 0x44a53f93, 0x93f6c34a, 0x449ff1df, 0x93f364cb, 0x449aa400, 0x93f0068f, + 0x449555f7, 0x93eca896, + 0x449007c4, 0x93e94adf, 0x448ab967, 0x93e5ed6b, 0x44856adf, 0x93e2903a, + 0x44801c2d, 0x93df334c, + 0x447acd50, 0x93dbd6a0, 0x44757e4a, 0x93d87a36, 0x44702f19, 0x93d51e10, + 0x446adfbe, 0x93d1c22c, + 0x44659039, 0x93ce668b, 0x44604089, 0x93cb0b2d, 0x445af0b0, 0x93c7b011, + 0x4455a0ac, 0x93c45539, + 0x4450507e, 0x93c0faa3, 0x444b0026, 0x93bda04f, 0x4445afa4, 0x93ba463f, + 0x44405ef8, 0x93b6ec71, + 0x443b0e21, 0x93b392e6, 0x4435bd21, 0x93b0399e, 0x44306bf6, 0x93ace099, + 0x442b1aa2, 0x93a987d6, + 0x4425c923, 0x93a62f57, 0x4420777b, 0x93a2d71a, 0x441b25a8, 0x939f7f20, + 0x4415d3ab, 0x939c2769, + 0x44108184, 0x9398cff5, 0x440b2f34, 0x939578c3, 0x4405dcb9, 0x939221d5, + 0x44008a14, 0x938ecb29, + 0x43fb3746, 0x938b74c1, 0x43f5e44d, 0x93881e9b, 0x43f0912b, 0x9384c8b8, + 0x43eb3ddf, 0x93817318, + 0x43e5ea68, 0x937e1dbb, 0x43e096c8, 0x937ac8a1, 0x43db42fe, 0x937773ca, + 0x43d5ef0a, 0x93741f35, + 0x43d09aed, 0x9370cae4, 0x43cb46a5, 0x936d76d6, 0x43c5f234, 0x936a230a, + 0x43c09d99, 0x9366cf82, + 0x43bb48d4, 0x93637c3d, 0x43b5f3e5, 0x9360293a, 0x43b09ecc, 0x935cd67b, + 0x43ab498a, 0x935983ff, + 0x43a5f41e, 0x935631c5, 0x43a09e89, 0x9352dfcf, 0x439b48c9, 0x934f8e1c, + 0x4395f2e0, 0x934c3cab, + 0x43909ccd, 0x9348eb7e, 0x438b4691, 0x93459a94, 0x4385f02a, 0x934249ed, + 0x4380999b, 0x933ef989, + 0x437b42e1, 0x933ba968, 0x4375ebfe, 0x9338598a, 0x437094f1, 0x933509f0, + 0x436b3dbb, 0x9331ba98, + 0x4365e65b, 0x932e6b84, 0x43608ed2, 0x932b1cb2, 0x435b371f, 0x9327ce24, + 0x4355df42, 0x93247fd9, + 0x4350873c, 0x932131d1, 0x434b2f0c, 0x931de40c, 0x4345d6b3, 0x931a968b, + 0x43407e31, 0x9317494c, + 0x433b2585, 0x9313fc51, 0x4335ccaf, 0x9310af99, 0x433073b0, 0x930d6324, + 0x432b1a87, 0x930a16f3, + 0x4325c135, 0x9306cb04, 0x432067ba, 0x93037f59, 0x431b0e15, 0x930033f1, + 0x4315b447, 0x92fce8cc, + 0x43105a50, 0x92f99deb, 0x430b002f, 0x92f6534c, 0x4305a5e5, 0x92f308f1, + 0x43004b71, 0x92efbeda, + 0x42faf0d4, 0x92ec7505, 0x42f5960e, 0x92e92b74, 0x42f03b1e, 0x92e5e226, + 0x42eae005, 0x92e2991c, + 0x42e584c3, 0x92df5054, 0x42e02958, 0x92dc07d0, 0x42dacdc3, 0x92d8bf90, + 0x42d57205, 0x92d57792, + 0x42d0161e, 0x92d22fd9, 0x42caba0e, 0x92cee862, 0x42c55dd4, 0x92cba12f, + 0x42c00172, 0x92c85a3f, + 0x42baa4e6, 0x92c51392, 0x42b54831, 0x92c1cd29, 0x42afeb53, 0x92be8703, + 0x42aa8e4b, 0x92bb4121, + 0x42a5311b, 0x92b7fb82, 0x429fd3c1, 0x92b4b626, 0x429a763f, 0x92b1710e, + 0x42951893, 0x92ae2c3a, + 0x428fbabe, 0x92aae7a8, 0x428a5cc0, 0x92a7a35a, 0x4284fe99, 0x92a45f50, + 0x427fa049, 0x92a11b89, + 0x427a41d0, 0x929dd806, 0x4274e32e, 0x929a94c6, 0x426f8463, 0x929751c9, + 0x426a256f, 0x92940f10, + 0x4264c653, 0x9290cc9b, 0x425f670d, 0x928d8a69, 0x425a079e, 0x928a487a, + 0x4254a806, 0x928706cf, + 0x424f4845, 0x9283c568, 0x4249e85c, 0x92808444, 0x42448849, 0x927d4363, + 0x423f280e, 0x927a02c7, + 0x4239c7aa, 0x9276c26d, 0x4234671d, 0x92738258, 0x422f0667, 0x92704286, + 0x4229a588, 0x926d02f7, + 0x42244481, 0x9269c3ac, 0x421ee350, 0x926684a5, 0x421981f7, 0x926345e1, + 0x42142075, 0x92600761, + 0x420ebecb, 0x925cc924, 0x42095cf7, 0x92598b2b, 0x4203fafb, 0x92564d76, + 0x41fe98d6, 0x92531005, + 0x41f93689, 0x924fd2d7, 0x41f3d413, 0x924c95ec, 0x41ee7174, 0x92495946, + 0x41e90eac, 0x92461ce3, + 0x41e3abbc, 0x9242e0c4, 0x41de48a3, 0x923fa4e8, 0x41d8e561, 0x923c6950, + 0x41d381f7, 0x92392dfc, + 0x41ce1e65, 0x9235f2ec, 0x41c8baa9, 0x9232b81f, 0x41c356c5, 0x922f7d96, + 0x41bdf2b9, 0x922c4351, + 0x41b88e84, 0x9229094f, 0x41b32a26, 0x9225cf91, 0x41adc5a0, 0x92229617, + 0x41a860f1, 0x921f5ce1, + 0x41a2fc1a, 0x921c23ef, 0x419d971b, 0x9218eb40, 0x419831f3, 0x9215b2d5, + 0x4192cca2, 0x92127aae, + 0x418d6729, 0x920f42cb, 0x41880188, 0x920c0b2c, 0x41829bbe, 0x9208d3d0, + 0x417d35cb, 0x92059cb8, + 0x4177cfb1, 0x920265e4, 0x4172696e, 0x91ff2f54, 0x416d0302, 0x91fbf908, + 0x41679c6f, 0x91f8c300, + 0x416235b2, 0x91f58d3b, 0x415ccece, 0x91f257bb, 0x415767c1, 0x91ef227e, + 0x4152008c, 0x91ebed85, + 0x414c992f, 0x91e8b8d0, 0x414731a9, 0x91e5845f, 0x4141c9fb, 0x91e25032, + 0x413c6225, 0x91df1c49, + 0x4136fa27, 0x91dbe8a4, 0x41319200, 0x91d8b542, 0x412c29b1, 0x91d58225, + 0x4126c13a, 0x91d24f4c, + 0x4121589b, 0x91cf1cb6, 0x411befd3, 0x91cbea65, 0x411686e4, 0x91c8b857, + 0x41111dcc, 0x91c5868e, + 0x410bb48c, 0x91c25508, 0x41064b24, 0x91bf23c7, 0x4100e194, 0x91bbf2c9, + 0x40fb77dc, 0x91b8c210, + 0x40f60dfb, 0x91b5919a, 0x40f0a3f3, 0x91b26169, 0x40eb39c3, 0x91af317c, + 0x40e5cf6a, 0x91ac01d2, + 0x40e064ea, 0x91a8d26d, 0x40dafa41, 0x91a5a34c, 0x40d58f71, 0x91a2746f, + 0x40d02478, 0x919f45d6, + 0x40cab958, 0x919c1781, 0x40c54e0f, 0x9198e970, 0x40bfe29f, 0x9195bba3, + 0x40ba7706, 0x91928e1a, + 0x40b50b46, 0x918f60d6, 0x40af9f5e, 0x918c33d5, 0x40aa334e, 0x91890719, + 0x40a4c716, 0x9185daa1, + 0x409f5ab6, 0x9182ae6d, 0x4099ee2e, 0x917f827d, 0x4094817f, 0x917c56d1, + 0x408f14a7, 0x91792b6a, + 0x4089a7a8, 0x91760047, 0x40843a81, 0x9172d567, 0x407ecd32, 0x916faacc, + 0x40795fbc, 0x916c8076, + 0x4073f21d, 0x91695663, 0x406e8457, 0x91662c95, 0x40691669, 0x9163030b, + 0x4063a854, 0x915fd9c5, + 0x405e3a16, 0x915cb0c3, 0x4058cbb1, 0x91598806, 0x40535d24, 0x91565f8d, + 0x404dee70, 0x91533758, + 0x40487f94, 0x91500f67, 0x40431090, 0x914ce7bb, 0x403da165, 0x9149c053, + 0x40383212, 0x9146992f, + 0x4032c297, 0x91437250, 0x402d52f5, 0x91404bb5, 0x4027e32b, 0x913d255e, + 0x4022733a, 0x9139ff4b, + 0x401d0321, 0x9136d97d, 0x401792e0, 0x9133b3f3, 0x40122278, 0x91308eae, + 0x400cb1e9, 0x912d69ad, + 0x40074132, 0x912a44f0, 0x4001d053, 0x91272078, 0x3ffc5f4d, 0x9123fc44, + 0x3ff6ee1f, 0x9120d854, + 0x3ff17cca, 0x911db4a9, 0x3fec0b4e, 0x911a9142, 0x3fe699aa, 0x91176e1f, + 0x3fe127df, 0x91144b41, + 0x3fdbb5ec, 0x911128a8, 0x3fd643d2, 0x910e0653, 0x3fd0d191, 0x910ae442, + 0x3fcb5f28, 0x9107c276, + 0x3fc5ec98, 0x9104a0ee, 0x3fc079e0, 0x91017faa, 0x3fbb0702, 0x90fe5eab, + 0x3fb593fb, 0x90fb3df1, + 0x3fb020ce, 0x90f81d7b, 0x3faaad79, 0x90f4fd4a, 0x3fa539fd, 0x90f1dd5d, + 0x3f9fc65a, 0x90eebdb4, + 0x3f9a5290, 0x90eb9e50, 0x3f94de9e, 0x90e87f31, 0x3f8f6a85, 0x90e56056, + 0x3f89f645, 0x90e241bf, + 0x3f8481dd, 0x90df236e, 0x3f7f0d4f, 0x90dc0560, 0x3f799899, 0x90d8e798, + 0x3f7423bc, 0x90d5ca13, + 0x3f6eaeb8, 0x90d2acd4, 0x3f69398d, 0x90cf8fd9, 0x3f63c43b, 0x90cc7322, + 0x3f5e4ec2, 0x90c956b1, + 0x3f58d921, 0x90c63a83, 0x3f53635a, 0x90c31e9b, 0x3f4ded6b, 0x90c002f7, + 0x3f487755, 0x90bce797, + 0x3f430119, 0x90b9cc7d, 0x3f3d8ab5, 0x90b6b1a6, 0x3f38142a, 0x90b39715, + 0x3f329d79, 0x90b07cc8, + 0x3f2d26a0, 0x90ad62c0, 0x3f27afa1, 0x90aa48fd, 0x3f22387a, 0x90a72f7e, + 0x3f1cc12c, 0x90a41644, + 0x3f1749b8, 0x90a0fd4e, 0x3f11d21d, 0x909de49e, 0x3f0c5a5a, 0x909acc32, + 0x3f06e271, 0x9097b40a, + 0x3f016a61, 0x90949c28, 0x3efbf22a, 0x9091848a, 0x3ef679cc, 0x908e6d31, + 0x3ef10148, 0x908b561c, + 0x3eeb889c, 0x90883f4d, 0x3ee60fca, 0x908528c2, 0x3ee096d1, 0x9082127c, + 0x3edb1db1, 0x907efc7a, + 0x3ed5a46b, 0x907be6be, 0x3ed02afd, 0x9078d146, 0x3ecab169, 0x9075bc13, + 0x3ec537ae, 0x9072a725, + 0x3ebfbdcd, 0x906f927c, 0x3eba43c4, 0x906c7e17, 0x3eb4c995, 0x906969f8, + 0x3eaf4f40, 0x9066561d, + 0x3ea9d4c3, 0x90634287, 0x3ea45a21, 0x90602f35, 0x3e9edf57, 0x905d1c29, + 0x3e996467, 0x905a0962, + 0x3e93e950, 0x9056f6df, 0x3e8e6e12, 0x9053e4a1, 0x3e88f2ae, 0x9050d2a9, + 0x3e837724, 0x904dc0f5, + 0x3e7dfb73, 0x904aaf86, 0x3e787f9b, 0x90479e5c, 0x3e73039d, 0x90448d76, + 0x3e6d8778, 0x90417cd6, + 0x3e680b2c, 0x903e6c7b, 0x3e628ebb, 0x903b5c64, 0x3e5d1222, 0x90384c93, + 0x3e579564, 0x90353d06, + 0x3e52187f, 0x90322dbf, 0x3e4c9b73, 0x902f1ebc, 0x3e471e41, 0x902c0fff, + 0x3e41a0e8, 0x90290186, + 0x3e3c2369, 0x9025f352, 0x3e36a5c4, 0x9022e564, 0x3e3127f9, 0x901fd7ba, + 0x3e2baa07, 0x901cca55, + 0x3e262bee, 0x9019bd36, 0x3e20adaf, 0x9016b05b, 0x3e1b2f4a, 0x9013a3c5, + 0x3e15b0bf, 0x90109775, + 0x3e10320d, 0x900d8b69, 0x3e0ab336, 0x900a7fa3, 0x3e053437, 0x90077422, + 0x3dffb513, 0x900468e5, + 0x3dfa35c8, 0x90015dee, 0x3df4b657, 0x8ffe533c, 0x3def36c0, 0x8ffb48cf, + 0x3de9b703, 0x8ff83ea7, + 0x3de4371f, 0x8ff534c4, 0x3ddeb716, 0x8ff22b26, 0x3dd936e6, 0x8fef21ce, + 0x3dd3b690, 0x8fec18ba, + 0x3dce3614, 0x8fe90fec, 0x3dc8b571, 0x8fe60763, 0x3dc334a9, 0x8fe2ff1f, + 0x3dbdb3ba, 0x8fdff720, + 0x3db832a6, 0x8fdcef66, 0x3db2b16b, 0x8fd9e7f2, 0x3dad300b, 0x8fd6e0c2, + 0x3da7ae84, 0x8fd3d9d8, + 0x3da22cd7, 0x8fd0d333, 0x3d9cab04, 0x8fcdccd3, 0x3d97290b, 0x8fcac6b9, + 0x3d91a6ed, 0x8fc7c0e3, + 0x3d8c24a8, 0x8fc4bb53, 0x3d86a23d, 0x8fc1b608, 0x3d811fac, 0x8fbeb103, + 0x3d7b9cf6, 0x8fbbac42, + 0x3d761a19, 0x8fb8a7c7, 0x3d709717, 0x8fb5a391, 0x3d6b13ee, 0x8fb29fa0, + 0x3d6590a0, 0x8faf9bf5, + 0x3d600d2c, 0x8fac988f, 0x3d5a8992, 0x8fa9956e, 0x3d5505d2, 0x8fa69293, + 0x3d4f81ec, 0x8fa38ffc, + 0x3d49fde1, 0x8fa08dab, 0x3d4479b0, 0x8f9d8ba0, 0x3d3ef559, 0x8f9a89da, + 0x3d3970dc, 0x8f978859, + 0x3d33ec39, 0x8f94871d, 0x3d2e6771, 0x8f918627, 0x3d28e282, 0x8f8e8576, + 0x3d235d6f, 0x8f8b850a, + 0x3d1dd835, 0x8f8884e4, 0x3d1852d6, 0x8f858503, 0x3d12cd51, 0x8f828568, + 0x3d0d47a6, 0x8f7f8612, + 0x3d07c1d6, 0x8f7c8701, 0x3d023be0, 0x8f798836, 0x3cfcb5c4, 0x8f7689b0, + 0x3cf72f83, 0x8f738b70, + 0x3cf1a91c, 0x8f708d75, 0x3cec2290, 0x8f6d8fbf, 0x3ce69bde, 0x8f6a924f, + 0x3ce11507, 0x8f679525, + 0x3cdb8e09, 0x8f649840, 0x3cd606e7, 0x8f619ba0, 0x3cd07f9f, 0x8f5e9f46, + 0x3ccaf831, 0x8f5ba331, + 0x3cc5709e, 0x8f58a761, 0x3cbfe8e5, 0x8f55abd8, 0x3cba6107, 0x8f52b093, + 0x3cb4d904, 0x8f4fb595, + 0x3caf50da, 0x8f4cbadb, 0x3ca9c88c, 0x8f49c067, 0x3ca44018, 0x8f46c639, + 0x3c9eb77f, 0x8f43cc50, + 0x3c992ec0, 0x8f40d2ad, 0x3c93a5dc, 0x8f3dd950, 0x3c8e1cd3, 0x8f3ae038, + 0x3c8893a4, 0x8f37e765, + 0x3c830a50, 0x8f34eed8, 0x3c7d80d6, 0x8f31f691, 0x3c77f737, 0x8f2efe8f, + 0x3c726d73, 0x8f2c06d3, + 0x3c6ce38a, 0x8f290f5c, 0x3c67597b, 0x8f26182b, 0x3c61cf48, 0x8f232140, + 0x3c5c44ee, 0x8f202a9a, + 0x3c56ba70, 0x8f1d343a, 0x3c512fcc, 0x8f1a3e1f, 0x3c4ba504, 0x8f17484b, + 0x3c461a16, 0x8f1452bb, + 0x3c408f03, 0x8f115d72, 0x3c3b03ca, 0x8f0e686e, 0x3c35786d, 0x8f0b73b0, + 0x3c2fecea, 0x8f087f37, + 0x3c2a6142, 0x8f058b04, 0x3c24d575, 0x8f029717, 0x3c1f4983, 0x8effa370, + 0x3c19bd6c, 0x8efcb00e, + 0x3c143130, 0x8ef9bcf2, 0x3c0ea4cf, 0x8ef6ca1c, 0x3c091849, 0x8ef3d78b, + 0x3c038b9e, 0x8ef0e540, + 0x3bfdfecd, 0x8eedf33b, 0x3bf871d8, 0x8eeb017c, 0x3bf2e4be, 0x8ee81002, + 0x3bed577e, 0x8ee51ece, + 0x3be7ca1a, 0x8ee22de0, 0x3be23c91, 0x8edf3d38, 0x3bdcaee3, 0x8edc4cd5, + 0x3bd72110, 0x8ed95cb8, + 0x3bd19318, 0x8ed66ce1, 0x3bcc04fb, 0x8ed37d50, 0x3bc676b9, 0x8ed08e05, + 0x3bc0e853, 0x8ecd9eff, + 0x3bbb59c7, 0x8ecab040, 0x3bb5cb17, 0x8ec7c1c6, 0x3bb03c42, 0x8ec4d392, + 0x3baaad48, 0x8ec1e5a4, + 0x3ba51e29, 0x8ebef7fb, 0x3b9f8ee5, 0x8ebc0a99, 0x3b99ff7d, 0x8eb91d7c, + 0x3b946ff0, 0x8eb630a6, + 0x3b8ee03e, 0x8eb34415, 0x3b895068, 0x8eb057ca, 0x3b83c06c, 0x8ead6bc5, + 0x3b7e304c, 0x8eaa8006, + 0x3b78a007, 0x8ea7948c, 0x3b730f9e, 0x8ea4a959, 0x3b6d7f10, 0x8ea1be6c, + 0x3b67ee5d, 0x8e9ed3c4, + 0x3b625d86, 0x8e9be963, 0x3b5ccc8a, 0x8e98ff47, 0x3b573b69, 0x8e961571, + 0x3b51aa24, 0x8e932be2, + 0x3b4c18ba, 0x8e904298, 0x3b46872c, 0x8e8d5994, 0x3b40f579, 0x8e8a70d7, + 0x3b3b63a1, 0x8e87885f, + 0x3b35d1a5, 0x8e84a02d, 0x3b303f84, 0x8e81b841, 0x3b2aad3f, 0x8e7ed09b, + 0x3b251ad6, 0x8e7be93c, + 0x3b1f8848, 0x8e790222, 0x3b19f595, 0x8e761b4e, 0x3b1462be, 0x8e7334c1, + 0x3b0ecfc3, 0x8e704e79, + 0x3b093ca3, 0x8e6d6877, 0x3b03a95e, 0x8e6a82bc, 0x3afe15f6, 0x8e679d47, + 0x3af88269, 0x8e64b817, + 0x3af2eeb7, 0x8e61d32e, 0x3aed5ae1, 0x8e5eee8b, 0x3ae7c6e7, 0x8e5c0a2e, + 0x3ae232c9, 0x8e592617, + 0x3adc9e86, 0x8e564246, 0x3ad70a1f, 0x8e535ebb, 0x3ad17593, 0x8e507b76, + 0x3acbe0e3, 0x8e4d9878, + 0x3ac64c0f, 0x8e4ab5bf, 0x3ac0b717, 0x8e47d34d, 0x3abb21fb, 0x8e44f121, + 0x3ab58cba, 0x8e420f3b, + 0x3aaff755, 0x8e3f2d9b, 0x3aaa61cc, 0x8e3c4c41, 0x3aa4cc1e, 0x8e396b2e, + 0x3a9f364d, 0x8e368a61, + 0x3a99a057, 0x8e33a9da, 0x3a940a3e, 0x8e30c999, 0x3a8e7400, 0x8e2de99e, + 0x3a88dd9d, 0x8e2b09e9, + 0x3a834717, 0x8e282a7b, 0x3a7db06d, 0x8e254b53, 0x3a78199f, 0x8e226c71, + 0x3a7282ac, 0x8e1f8dd6, + 0x3a6ceb96, 0x8e1caf80, 0x3a67545b, 0x8e19d171, 0x3a61bcfd, 0x8e16f3a9, + 0x3a5c257a, 0x8e141626, + 0x3a568dd4, 0x8e1138ea, 0x3a50f609, 0x8e0e5bf4, 0x3a4b5e1b, 0x8e0b7f44, + 0x3a45c608, 0x8e08a2db, + 0x3a402dd2, 0x8e05c6b7, 0x3a3a9577, 0x8e02eadb, 0x3a34fcf9, 0x8e000f44, + 0x3a2f6457, 0x8dfd33f4, + 0x3a29cb91, 0x8dfa58ea, 0x3a2432a7, 0x8df77e27, 0x3a1e9999, 0x8df4a3a9, + 0x3a190068, 0x8df1c973, + 0x3a136712, 0x8deeef82, 0x3a0dcd99, 0x8dec15d8, 0x3a0833fc, 0x8de93c74, + 0x3a029a3b, 0x8de66357, + 0x39fd0056, 0x8de38a80, 0x39f7664e, 0x8de0b1ef, 0x39f1cc21, 0x8dddd9a5, + 0x39ec31d1, 0x8ddb01a1, + 0x39e6975e, 0x8dd829e4, 0x39e0fcc6, 0x8dd5526d, 0x39db620b, 0x8dd27b3c, + 0x39d5c72c, 0x8dcfa452, + 0x39d02c2a, 0x8dcccdaf, 0x39ca9104, 0x8dc9f751, 0x39c4f5ba, 0x8dc7213b, + 0x39bf5a4d, 0x8dc44b6a, + 0x39b9bebc, 0x8dc175e0, 0x39b42307, 0x8dbea09d, 0x39ae872f, 0x8dbbcba0, + 0x39a8eb33, 0x8db8f6ea, + 0x39a34f13, 0x8db6227a, 0x399db2d0, 0x8db34e50, 0x3998166a, 0x8db07a6d, + 0x399279e0, 0x8dada6d1, + 0x398cdd32, 0x8daad37b, 0x39874061, 0x8da8006c, 0x3981a36d, 0x8da52da3, + 0x397c0655, 0x8da25b21, + 0x39766919, 0x8d9f88e5, 0x3970cbba, 0x8d9cb6f0, 0x396b2e38, 0x8d99e541, + 0x39659092, 0x8d9713d9, + 0x395ff2c9, 0x8d9442b8, 0x395a54dd, 0x8d9171dd, 0x3954b6cd, 0x8d8ea148, + 0x394f1899, 0x8d8bd0fb, + 0x39497a43, 0x8d8900f3, 0x3943dbc9, 0x8d863133, 0x393e3d2c, 0x8d8361b9, + 0x39389e6b, 0x8d809286, + 0x3932ff87, 0x8d7dc399, 0x392d6080, 0x8d7af4f3, 0x3927c155, 0x8d782694, + 0x39222208, 0x8d75587b, + 0x391c8297, 0x8d728aa9, 0x3916e303, 0x8d6fbd1d, 0x3911434b, 0x8d6cefd9, + 0x390ba371, 0x8d6a22db, + 0x39060373, 0x8d675623, 0x39006352, 0x8d6489b3, 0x38fac30e, 0x8d61bd89, + 0x38f522a6, 0x8d5ef1a5, + 0x38ef821c, 0x8d5c2609, 0x38e9e16e, 0x8d595ab3, 0x38e4409e, 0x8d568fa4, + 0x38de9faa, 0x8d53c4db, + 0x38d8fe93, 0x8d50fa59, 0x38d35d59, 0x8d4e301f, 0x38cdbbfc, 0x8d4b662a, + 0x38c81a7c, 0x8d489c7d, + 0x38c278d9, 0x8d45d316, 0x38bcd713, 0x8d4309f6, 0x38b7352a, 0x8d40411d, + 0x38b1931e, 0x8d3d788b, + 0x38abf0ef, 0x8d3ab03f, 0x38a64e9d, 0x8d37e83a, 0x38a0ac29, 0x8d35207d, + 0x389b0991, 0x8d325905, + 0x389566d6, 0x8d2f91d5, 0x388fc3f8, 0x8d2ccaec, 0x388a20f8, 0x8d2a0449, + 0x38847dd5, 0x8d273ded, + 0x387eda8e, 0x8d2477d8, 0x38793725, 0x8d21b20a, 0x38739399, 0x8d1eec83, + 0x386defeb, 0x8d1c2742, + 0x38684c19, 0x8d196249, 0x3862a825, 0x8d169d96, 0x385d040d, 0x8d13d92a, + 0x38575fd4, 0x8d111505, + 0x3851bb77, 0x8d0e5127, 0x384c16f7, 0x8d0b8d90, 0x38467255, 0x8d08ca40, + 0x3840cd90, 0x8d060737, + 0x383b28a9, 0x8d034474, 0x3835839f, 0x8d0081f9, 0x382fde72, 0x8cfdbfc4, + 0x382a3922, 0x8cfafdd7, + 0x382493b0, 0x8cf83c30, 0x381eee1b, 0x8cf57ad0, 0x38194864, 0x8cf2b9b8, + 0x3813a28a, 0x8ceff8e6, + 0x380dfc8d, 0x8ced385b, 0x3808566e, 0x8cea7818, 0x3802b02c, 0x8ce7b81b, + 0x37fd09c8, 0x8ce4f865, + 0x37f76341, 0x8ce238f6, 0x37f1bc97, 0x8cdf79ce, 0x37ec15cb, 0x8cdcbaee, + 0x37e66edd, 0x8cd9fc54, + 0x37e0c7cc, 0x8cd73e01, 0x37db2099, 0x8cd47ff6, 0x37d57943, 0x8cd1c231, + 0x37cfd1cb, 0x8ccf04b3, + 0x37ca2a30, 0x8ccc477d, 0x37c48273, 0x8cc98a8e, 0x37beda93, 0x8cc6cde5, + 0x37b93292, 0x8cc41184, + 0x37b38a6d, 0x8cc1556a, 0x37ade227, 0x8cbe9996, 0x37a839be, 0x8cbbde0a, + 0x37a29132, 0x8cb922c6, + 0x379ce885, 0x8cb667c8, 0x37973fb5, 0x8cb3ad11, 0x379196c3, 0x8cb0f2a1, + 0x378bedae, 0x8cae3879, + 0x37864477, 0x8cab7e98, 0x37809b1e, 0x8ca8c4fd, 0x377af1a3, 0x8ca60baa, + 0x37754806, 0x8ca3529f, + 0x376f9e46, 0x8ca099da, 0x3769f464, 0x8c9de15c, 0x37644a60, 0x8c9b2926, + 0x375ea03a, 0x8c987137, + 0x3758f5f2, 0x8c95b98f, 0x37534b87, 0x8c93022e, 0x374da0fa, 0x8c904b14, + 0x3747f64c, 0x8c8d9442, + 0x37424b7b, 0x8c8addb7, 0x373ca088, 0x8c882773, 0x3736f573, 0x8c857176, + 0x37314a3c, 0x8c82bbc0, + 0x372b9ee3, 0x8c800652, 0x3725f367, 0x8c7d512b, 0x372047ca, 0x8c7a9c4b, + 0x371a9c0b, 0x8c77e7b3, + 0x3714f02a, 0x8c753362, 0x370f4427, 0x8c727f58, 0x37099802, 0x8c6fcb95, + 0x3703ebbb, 0x8c6d181a, + 0x36fe3f52, 0x8c6a64e5, 0x36f892c7, 0x8c67b1f9, 0x36f2e61a, 0x8c64ff53, + 0x36ed394b, 0x8c624cf5, + 0x36e78c5b, 0x8c5f9ade, 0x36e1df48, 0x8c5ce90e, 0x36dc3214, 0x8c5a3786, + 0x36d684be, 0x8c578645, + 0x36d0d746, 0x8c54d54c, 0x36cb29ac, 0x8c522499, 0x36c57bf0, 0x8c4f742f, + 0x36bfce13, 0x8c4cc40b, + 0x36ba2014, 0x8c4a142f, 0x36b471f3, 0x8c47649a, 0x36aec3b0, 0x8c44b54d, + 0x36a9154c, 0x8c420647, + 0x36a366c6, 0x8c3f5788, 0x369db81e, 0x8c3ca911, 0x36980954, 0x8c39fae1, + 0x36925a69, 0x8c374cf9, + 0x368cab5c, 0x8c349f58, 0x3686fc2e, 0x8c31f1ff, 0x36814cde, 0x8c2f44ed, + 0x367b9d6c, 0x8c2c9822, + 0x3675edd9, 0x8c29eb9f, 0x36703e24, 0x8c273f63, 0x366a8e4d, 0x8c24936f, + 0x3664de55, 0x8c21e7c2, + 0x365f2e3b, 0x8c1f3c5d, 0x36597e00, 0x8c1c913f, 0x3653cda3, 0x8c19e669, + 0x364e1d25, 0x8c173bda, + 0x36486c86, 0x8c149192, 0x3642bbc4, 0x8c11e792, 0x363d0ae2, 0x8c0f3dda, + 0x363759de, 0x8c0c9469, + 0x3631a8b8, 0x8c09eb40, 0x362bf771, 0x8c07425e, 0x36264609, 0x8c0499c4, + 0x3620947f, 0x8c01f171, + 0x361ae2d3, 0x8bff4966, 0x36153107, 0x8bfca1a3, 0x360f7f19, 0x8bf9fa27, + 0x3609cd0a, 0x8bf752f2, + 0x36041ad9, 0x8bf4ac05, 0x35fe6887, 0x8bf20560, 0x35f8b614, 0x8bef5f02, + 0x35f3037f, 0x8becb8ec, + 0x35ed50c9, 0x8bea131e, 0x35e79df2, 0x8be76d97, 0x35e1eafa, 0x8be4c857, + 0x35dc37e0, 0x8be22360, + 0x35d684a6, 0x8bdf7eb0, 0x35d0d14a, 0x8bdcda47, 0x35cb1dcc, 0x8bda3626, + 0x35c56a2e, 0x8bd7924d, + 0x35bfb66e, 0x8bd4eebc, 0x35ba028e, 0x8bd24b72, 0x35b44e8c, 0x8bcfa870, + 0x35ae9a69, 0x8bcd05b5, + 0x35a8e625, 0x8bca6343, 0x35a331c0, 0x8bc7c117, 0x359d7d39, 0x8bc51f34, + 0x3597c892, 0x8bc27d98, + 0x359213c9, 0x8bbfdc44, 0x358c5ee0, 0x8bbd3b38, 0x3586a9d5, 0x8bba9a73, + 0x3580f4aa, 0x8bb7f9f6, + 0x357b3f5d, 0x8bb559c1, 0x357589f0, 0x8bb2b9d4, 0x356fd461, 0x8bb01a2e, + 0x356a1eb2, 0x8bad7ad0, + 0x356468e2, 0x8baadbba, 0x355eb2f0, 0x8ba83cec, 0x3558fcde, 0x8ba59e65, + 0x355346ab, 0x8ba30026, + 0x354d9057, 0x8ba0622f, 0x3547d9e2, 0x8b9dc480, 0x3542234c, 0x8b9b2718, + 0x353c6c95, 0x8b9889f8, + 0x3536b5be, 0x8b95ed21, 0x3530fec6, 0x8b935090, 0x352b47ad, 0x8b90b448, + 0x35259073, 0x8b8e1848, + 0x351fd918, 0x8b8b7c8f, 0x351a219c, 0x8b88e11e, 0x35146a00, 0x8b8645f5, + 0x350eb243, 0x8b83ab14, + 0x3508fa66, 0x8b81107b, 0x35034267, 0x8b7e7629, 0x34fd8a48, 0x8b7bdc20, + 0x34f7d208, 0x8b79425e, + 0x34f219a8, 0x8b76a8e4, 0x34ec6127, 0x8b740fb3, 0x34e6a885, 0x8b7176c8, + 0x34e0efc2, 0x8b6ede26, + 0x34db36df, 0x8b6c45cc, 0x34d57ddc, 0x8b69adba, 0x34cfc4b7, 0x8b6715ef, + 0x34ca0b73, 0x8b647e6d, + 0x34c4520d, 0x8b61e733, 0x34be9887, 0x8b5f5040, 0x34b8dee1, 0x8b5cb995, + 0x34b3251a, 0x8b5a2333, + 0x34ad6b32, 0x8b578d18, 0x34a7b12a, 0x8b54f745, 0x34a1f702, 0x8b5261ba, + 0x349c3cb9, 0x8b4fcc77, + 0x34968250, 0x8b4d377c, 0x3490c7c6, 0x8b4aa2ca, 0x348b0d1c, 0x8b480e5f, + 0x34855251, 0x8b457a3c, + 0x347f9766, 0x8b42e661, 0x3479dc5b, 0x8b4052ce, 0x3474212f, 0x8b3dbf83, + 0x346e65e3, 0x8b3b2c80, + 0x3468aa76, 0x8b3899c6, 0x3462eee9, 0x8b360753, 0x345d333c, 0x8b337528, + 0x3457776f, 0x8b30e345, + 0x3451bb81, 0x8b2e51ab, 0x344bff73, 0x8b2bc058, 0x34464345, 0x8b292f4e, + 0x344086f6, 0x8b269e8b, + 0x343aca87, 0x8b240e11, 0x34350df8, 0x8b217ddf, 0x342f5149, 0x8b1eedf4, + 0x3429947a, 0x8b1c5e52, + 0x3423d78a, 0x8b19cef8, 0x341e1a7b, 0x8b173fe6, 0x34185d4b, 0x8b14b11d, + 0x34129ffb, 0x8b12229b, + 0x340ce28b, 0x8b0f9462, 0x340724fb, 0x8b0d0670, 0x3401674a, 0x8b0a78c7, + 0x33fba97a, 0x8b07eb66, + 0x33f5eb89, 0x8b055e4d, 0x33f02d79, 0x8b02d17c, 0x33ea6f48, 0x8b0044f3, + 0x33e4b0f8, 0x8afdb8b3, + 0x33def287, 0x8afb2cbb, 0x33d933f7, 0x8af8a10b, 0x33d37546, 0x8af615a3, + 0x33cdb676, 0x8af38a83, + 0x33c7f785, 0x8af0ffac, 0x33c23875, 0x8aee751c, 0x33bc7944, 0x8aebead5, + 0x33b6b9f4, 0x8ae960d6, + 0x33b0fa84, 0x8ae6d720, 0x33ab3af4, 0x8ae44db1, 0x33a57b44, 0x8ae1c48b, + 0x339fbb74, 0x8adf3bad, + 0x3399fb85, 0x8adcb318, 0x33943b75, 0x8ada2aca, 0x338e7b46, 0x8ad7a2c5, + 0x3388baf7, 0x8ad51b08, + 0x3382fa88, 0x8ad29394, 0x337d39f9, 0x8ad00c67, 0x3377794b, 0x8acd8583, + 0x3371b87d, 0x8acafee8, + 0x336bf78f, 0x8ac87894, 0x33663682, 0x8ac5f289, 0x33607554, 0x8ac36cc6, + 0x335ab407, 0x8ac0e74c, + 0x3354f29b, 0x8abe6219, 0x334f310e, 0x8abbdd30, 0x33496f62, 0x8ab9588e, + 0x3343ad97, 0x8ab6d435, + 0x333debab, 0x8ab45024, 0x333829a1, 0x8ab1cc5c, 0x33326776, 0x8aaf48db, + 0x332ca52c, 0x8aacc5a4, + 0x3326e2c3, 0x8aaa42b4, 0x33212039, 0x8aa7c00d, 0x331b5d91, 0x8aa53daf, + 0x33159ac8, 0x8aa2bb99, + 0x330fd7e1, 0x8aa039cb, 0x330a14da, 0x8a9db845, 0x330451b3, 0x8a9b3708, + 0x32fe8e6d, 0x8a98b614, + 0x32f8cb07, 0x8a963567, 0x32f30782, 0x8a93b504, 0x32ed43de, 0x8a9134e8, + 0x32e7801a, 0x8a8eb516, + 0x32e1bc36, 0x8a8c358b, 0x32dbf834, 0x8a89b649, 0x32d63412, 0x8a873750, + 0x32d06fd0, 0x8a84b89e, + 0x32caab6f, 0x8a823a36, 0x32c4e6ef, 0x8a7fbc16, 0x32bf2250, 0x8a7d3e3e, + 0x32b95d91, 0x8a7ac0af, + 0x32b398b3, 0x8a784368, 0x32add3b6, 0x8a75c66a, 0x32a80e99, 0x8a7349b4, + 0x32a2495d, 0x8a70cd47, + 0x329c8402, 0x8a6e5123, 0x3296be88, 0x8a6bd547, 0x3290f8ef, 0x8a6959b3, + 0x328b3336, 0x8a66de68, + 0x32856d5e, 0x8a646365, 0x327fa767, 0x8a61e8ab, 0x3279e151, 0x8a5f6e3a, + 0x32741b1c, 0x8a5cf411, + 0x326e54c7, 0x8a5a7a31, 0x32688e54, 0x8a580099, 0x3262c7c1, 0x8a55874a, + 0x325d0110, 0x8a530e43, + 0x32573a3f, 0x8a509585, 0x3251734f, 0x8a4e1d10, 0x324bac40, 0x8a4ba4e3, + 0x3245e512, 0x8a492cff, + 0x32401dc6, 0x8a46b564, 0x323a565a, 0x8a443e11, 0x32348ecf, 0x8a41c706, + 0x322ec725, 0x8a3f5045, + 0x3228ff5c, 0x8a3cd9cc, 0x32233775, 0x8a3a639b, 0x321d6f6e, 0x8a37edb3, + 0x3217a748, 0x8a357814, + 0x3211df04, 0x8a3302be, 0x320c16a1, 0x8a308db0, 0x32064e1e, 0x8a2e18eb, + 0x3200857d, 0x8a2ba46e, + 0x31fabcbd, 0x8a29303b, 0x31f4f3df, 0x8a26bc50, 0x31ef2ae1, 0x8a2448ad, + 0x31e961c5, 0x8a21d554, + 0x31e39889, 0x8a1f6243, 0x31ddcf30, 0x8a1cef7a, 0x31d805b7, 0x8a1a7cfb, + 0x31d23c1f, 0x8a180ac4, + 0x31cc7269, 0x8a1598d6, 0x31c6a894, 0x8a132731, 0x31c0dea1, 0x8a10b5d4, + 0x31bb148f, 0x8a0e44c0, + 0x31b54a5e, 0x8a0bd3f5, 0x31af800e, 0x8a096373, 0x31a9b5a0, 0x8a06f339, + 0x31a3eb13, 0x8a048348, + 0x319e2067, 0x8a0213a0, 0x3198559d, 0x89ffa441, 0x31928ab4, 0x89fd352b, + 0x318cbfad, 0x89fac65d, + 0x3186f487, 0x89f857d8, 0x31812943, 0x89f5e99c, 0x317b5de0, 0x89f37ba9, + 0x3175925e, 0x89f10dff, + 0x316fc6be, 0x89eea09d, 0x3169fb00, 0x89ec3384, 0x31642f23, 0x89e9c6b4, + 0x315e6328, 0x89e75a2d, + 0x3158970e, 0x89e4edef, 0x3152cad5, 0x89e281fa, 0x314cfe7f, 0x89e0164d, + 0x31473209, 0x89ddaae9, + 0x31416576, 0x89db3fcf, 0x313b98c4, 0x89d8d4fd, 0x3135cbf4, 0x89d66a74, + 0x312fff05, 0x89d40033, + 0x312a31f8, 0x89d1963c, 0x312464cd, 0x89cf2c8e, 0x311e9783, 0x89ccc328, + 0x3118ca1b, 0x89ca5a0c, + 0x3112fc95, 0x89c7f138, 0x310d2ef0, 0x89c588ae, 0x3107612e, 0x89c3206c, + 0x3101934d, 0x89c0b873, + 0x30fbc54d, 0x89be50c3, 0x30f5f730, 0x89bbe95c, 0x30f028f4, 0x89b9823e, + 0x30ea5a9a, 0x89b71b69, + 0x30e48c22, 0x89b4b4dd, 0x30debd8c, 0x89b24e9a, 0x30d8eed8, 0x89afe8a0, + 0x30d32006, 0x89ad82ef, + 0x30cd5115, 0x89ab1d87, 0x30c78206, 0x89a8b868, 0x30c1b2da, 0x89a65391, + 0x30bbe38f, 0x89a3ef04, + 0x30b61426, 0x89a18ac0, 0x30b0449f, 0x899f26c5, 0x30aa74fa, 0x899cc313, + 0x30a4a537, 0x899a5faa, + 0x309ed556, 0x8997fc8a, 0x30990557, 0x899599b3, 0x3093353a, 0x89933725, + 0x308d64ff, 0x8990d4e0, + 0x308794a6, 0x898e72e4, 0x3081c42f, 0x898c1131, 0x307bf39b, 0x8989afc8, + 0x307622e8, 0x89874ea7, + 0x30705217, 0x8984edcf, 0x306a8129, 0x89828d41, 0x3064b01d, 0x89802cfc, + 0x305edef3, 0x897dccff, + 0x30590dab, 0x897b6d4c, 0x30533c45, 0x89790de2, 0x304d6ac1, 0x8976aec1, + 0x30479920, 0x89744fe9, + 0x3041c761, 0x8971f15a, 0x303bf584, 0x896f9315, 0x30362389, 0x896d3518, + 0x30305171, 0x896ad765, + 0x302a7f3a, 0x896879fb, 0x3024ace6, 0x89661cda, 0x301eda75, 0x8963c002, + 0x301907e6, 0x89616373, + 0x30133539, 0x895f072e, 0x300d626e, 0x895cab31, 0x30078f86, 0x895a4f7e, + 0x3001bc80, 0x8957f414, + 0x2ffbe95d, 0x895598f3, 0x2ff6161c, 0x89533e1c, 0x2ff042bd, 0x8950e38e, + 0x2fea6f41, 0x894e8948, + 0x2fe49ba7, 0x894c2f4c, 0x2fdec7f0, 0x8949d59a, 0x2fd8f41b, 0x89477c30, + 0x2fd32028, 0x89452310, + 0x2fcd4c19, 0x8942ca39, 0x2fc777eb, 0x894071ab, 0x2fc1a3a0, 0x893e1967, + 0x2fbbcf38, 0x893bc16b, + 0x2fb5fab2, 0x893969b9, 0x2fb0260f, 0x89371250, 0x2faa514f, 0x8934bb31, + 0x2fa47c71, 0x8932645b, + 0x2f9ea775, 0x89300dce, 0x2f98d25d, 0x892db78a, 0x2f92fd26, 0x892b6190, + 0x2f8d27d3, 0x89290bdf, + 0x2f875262, 0x8926b677, 0x2f817cd4, 0x89246159, 0x2f7ba729, 0x89220c84, + 0x2f75d160, 0x891fb7f8, + 0x2f6ffb7a, 0x891d63b5, 0x2f6a2577, 0x891b0fbc, 0x2f644f56, 0x8918bc0c, + 0x2f5e7919, 0x891668a6, + 0x2f58a2be, 0x89141589, 0x2f52cc46, 0x8911c2b5, 0x2f4cf5b0, 0x890f702b, + 0x2f471efe, 0x890d1dea, + 0x2f41482e, 0x890acbf2, 0x2f3b7141, 0x89087a44, 0x2f359a37, 0x890628df, + 0x2f2fc310, 0x8903d7c4, + 0x2f29ebcc, 0x890186f2, 0x2f24146b, 0x88ff3669, 0x2f1e3ced, 0x88fce62a, + 0x2f186551, 0x88fa9634, + 0x2f128d99, 0x88f84687, 0x2f0cb5c3, 0x88f5f724, 0x2f06ddd1, 0x88f3a80b, + 0x2f0105c1, 0x88f1593b, + 0x2efb2d95, 0x88ef0ab4, 0x2ef5554b, 0x88ecbc77, 0x2eef7ce5, 0x88ea6e83, + 0x2ee9a461, 0x88e820d9, + 0x2ee3cbc1, 0x88e5d378, 0x2eddf304, 0x88e38660, 0x2ed81a29, 0x88e13992, + 0x2ed24132, 0x88deed0e, + 0x2ecc681e, 0x88dca0d3, 0x2ec68eed, 0x88da54e1, 0x2ec0b5a0, 0x88d8093a, + 0x2ebadc35, 0x88d5bddb, + 0x2eb502ae, 0x88d372c6, 0x2eaf290a, 0x88d127fb, 0x2ea94f49, 0x88cedd79, + 0x2ea3756b, 0x88cc9340, + 0x2e9d9b70, 0x88ca4951, 0x2e97c159, 0x88c7ffac, 0x2e91e725, 0x88c5b650, + 0x2e8c0cd4, 0x88c36d3e, + 0x2e863267, 0x88c12475, 0x2e8057dd, 0x88bedbf6, 0x2e7a7d36, 0x88bc93c0, + 0x2e74a272, 0x88ba4bd4, + 0x2e6ec792, 0x88b80432, 0x2e68ec95, 0x88b5bcd9, 0x2e63117c, 0x88b375ca, + 0x2e5d3646, 0x88b12f04, + 0x2e575af3, 0x88aee888, 0x2e517f84, 0x88aca255, 0x2e4ba3f8, 0x88aa5c6c, + 0x2e45c850, 0x88a816cd, + 0x2e3fec8b, 0x88a5d177, 0x2e3a10aa, 0x88a38c6b, 0x2e3434ac, 0x88a147a9, + 0x2e2e5891, 0x889f0330, + 0x2e287c5a, 0x889cbf01, 0x2e22a007, 0x889a7b1b, 0x2e1cc397, 0x88983780, + 0x2e16e70b, 0x8895f42d, + 0x2e110a62, 0x8893b125, 0x2e0b2d9d, 0x88916e66, 0x2e0550bb, 0x888f2bf1, + 0x2dff73bd, 0x888ce9c5, + 0x2df996a3, 0x888aa7e3, 0x2df3b96c, 0x8888664b, 0x2deddc19, 0x888624fd, + 0x2de7feaa, 0x8883e3f8, + 0x2de2211e, 0x8881a33d, 0x2ddc4376, 0x887f62cb, 0x2dd665b2, 0x887d22a4, + 0x2dd087d1, 0x887ae2c6, + 0x2dcaa9d5, 0x8878a332, 0x2dc4cbbc, 0x887663e7, 0x2dbeed86, 0x887424e7, + 0x2db90f35, 0x8871e630, + 0x2db330c7, 0x886fa7c2, 0x2dad523d, 0x886d699f, 0x2da77397, 0x886b2bc5, + 0x2da194d5, 0x8868ee35, + 0x2d9bb5f6, 0x8866b0ef, 0x2d95d6fc, 0x886473f2, 0x2d8ff7e5, 0x88623740, + 0x2d8a18b3, 0x885ffad7, + 0x2d843964, 0x885dbeb8, 0x2d7e59f9, 0x885b82e3, 0x2d787a72, 0x88594757, + 0x2d729acf, 0x88570c16, + 0x2d6cbb10, 0x8854d11e, 0x2d66db35, 0x88529670, 0x2d60fb3e, 0x88505c0b, + 0x2d5b1b2b, 0x884e21f1, + 0x2d553afc, 0x884be821, 0x2d4f5ab1, 0x8849ae9a, 0x2d497a4a, 0x8847755d, + 0x2d4399c7, 0x88453c6a, + 0x2d3db928, 0x884303c1, 0x2d37d86d, 0x8840cb61, 0x2d31f797, 0x883e934c, + 0x2d2c16a4, 0x883c5b81, + 0x2d263596, 0x883a23ff, 0x2d20546b, 0x8837ecc7, 0x2d1a7325, 0x8835b5d9, + 0x2d1491c4, 0x88337f35, + 0x2d0eb046, 0x883148db, 0x2d08ceac, 0x882f12cb, 0x2d02ecf7, 0x882cdd04, + 0x2cfd0b26, 0x882aa788, + 0x2cf72939, 0x88287256, 0x2cf14731, 0x88263d6d, 0x2ceb650d, 0x882408ce, + 0x2ce582cd, 0x8821d47a, + 0x2cdfa071, 0x881fa06f, 0x2cd9bdfa, 0x881d6cae, 0x2cd3db67, 0x881b3937, + 0x2ccdf8b8, 0x8819060a, + 0x2cc815ee, 0x8816d327, 0x2cc23308, 0x8814a08f, 0x2cbc5006, 0x88126e40, + 0x2cb66ce9, 0x88103c3b, + 0x2cb089b1, 0x880e0a7f, 0x2caaa65c, 0x880bd90e, 0x2ca4c2ed, 0x8809a7e7, + 0x2c9edf61, 0x8807770a, + 0x2c98fbba, 0x88054677, 0x2c9317f8, 0x8803162e, 0x2c8d341a, 0x8800e62f, + 0x2c875021, 0x87feb67a, + 0x2c816c0c, 0x87fc870f, 0x2c7b87dc, 0x87fa57ee, 0x2c75a390, 0x87f82917, + 0x2c6fbf29, 0x87f5fa8b, + 0x2c69daa6, 0x87f3cc48, 0x2c63f609, 0x87f19e4f, 0x2c5e114f, 0x87ef70a0, + 0x2c582c7b, 0x87ed433c, + 0x2c52478a, 0x87eb1621, 0x2c4c627f, 0x87e8e950, 0x2c467d58, 0x87e6bcca, + 0x2c409816, 0x87e4908e, + 0x2c3ab2b9, 0x87e2649b, 0x2c34cd40, 0x87e038f3, 0x2c2ee7ad, 0x87de0d95, + 0x2c2901fd, 0x87dbe281, + 0x2c231c33, 0x87d9b7b7, 0x2c1d364e, 0x87d78d38, 0x2c17504d, 0x87d56302, + 0x2c116a31, 0x87d33916, + 0x2c0b83fa, 0x87d10f75, 0x2c059da7, 0x87cee61e, 0x2bffb73a, 0x87ccbd11, + 0x2bf9d0b1, 0x87ca944e, + 0x2bf3ea0d, 0x87c86bd5, 0x2bee034e, 0x87c643a6, 0x2be81c74, 0x87c41bc2, + 0x2be2357f, 0x87c1f427, + 0x2bdc4e6f, 0x87bfccd7, 0x2bd66744, 0x87bda5d1, 0x2bd07ffe, 0x87bb7f16, + 0x2bca989d, 0x87b958a4, + 0x2bc4b120, 0x87b7327d, 0x2bbec989, 0x87b50c9f, 0x2bb8e1d7, 0x87b2e70c, + 0x2bb2fa0a, 0x87b0c1c4, + 0x2bad1221, 0x87ae9cc5, 0x2ba72a1e, 0x87ac7811, 0x2ba14200, 0x87aa53a6, + 0x2b9b59c7, 0x87a82f87, + 0x2b957173, 0x87a60bb1, 0x2b8f8905, 0x87a3e825, 0x2b89a07b, 0x87a1c4e4, + 0x2b83b7d7, 0x879fa1ed, + 0x2b7dcf17, 0x879d7f41, 0x2b77e63d, 0x879b5cde, 0x2b71fd48, 0x87993ac6, + 0x2b6c1438, 0x879718f8, + 0x2b662b0e, 0x8794f774, 0x2b6041c9, 0x8792d63b, 0x2b5a5868, 0x8790b54c, + 0x2b546eee, 0x878e94a7, + 0x2b4e8558, 0x878c744d, 0x2b489ba8, 0x878a543d, 0x2b42b1dd, 0x87883477, + 0x2b3cc7f7, 0x878614fb, + 0x2b36ddf7, 0x8783f5ca, 0x2b30f3dc, 0x8781d6e3, 0x2b2b09a6, 0x877fb846, + 0x2b251f56, 0x877d99f4, + 0x2b1f34eb, 0x877b7bec, 0x2b194a66, 0x87795e2f, 0x2b135fc6, 0x877740bb, + 0x2b0d750b, 0x87752392, + 0x2b078a36, 0x877306b4, 0x2b019f46, 0x8770ea20, 0x2afbb43c, 0x876ecdd6, + 0x2af5c917, 0x876cb1d6, + 0x2aefddd8, 0x876a9621, 0x2ae9f27e, 0x87687ab7, 0x2ae4070a, 0x87665f96, + 0x2ade1b7c, 0x876444c1, + 0x2ad82fd2, 0x87622a35, 0x2ad2440f, 0x87600ff4, 0x2acc5831, 0x875df5fd, + 0x2ac66c39, 0x875bdc51, + 0x2ac08026, 0x8759c2ef, 0x2aba93f9, 0x8757a9d8, 0x2ab4a7b1, 0x8755910b, + 0x2aaebb50, 0x87537888, + 0x2aa8ced3, 0x87516050, 0x2aa2e23d, 0x874f4862, 0x2a9cf58c, 0x874d30bf, + 0x2a9708c1, 0x874b1966, + 0x2a911bdc, 0x87490258, 0x2a8b2edc, 0x8746eb94, 0x2a8541c3, 0x8744d51b, + 0x2a7f548e, 0x8742beec, + 0x2a796740, 0x8740a907, 0x2a7379d8, 0x873e936d, 0x2a6d8c55, 0x873c7e1e, + 0x2a679eb8, 0x873a6919, + 0x2a61b101, 0x8738545e, 0x2a5bc330, 0x87363fee, 0x2a55d545, 0x87342bc9, + 0x2a4fe740, 0x873217ee, + 0x2a49f920, 0x8730045d, 0x2a440ae7, 0x872df117, 0x2a3e1c93, 0x872bde1c, + 0x2a382e25, 0x8729cb6b, + 0x2a323f9e, 0x8727b905, 0x2a2c50fc, 0x8725a6e9, 0x2a266240, 0x87239518, + 0x2a20736a, 0x87218391, + 0x2a1a847b, 0x871f7255, 0x2a149571, 0x871d6163, 0x2a0ea64d, 0x871b50bc, + 0x2a08b710, 0x87194060, + 0x2a02c7b8, 0x8717304e, 0x29fcd847, 0x87152087, 0x29f6e8bb, 0x8713110a, + 0x29f0f916, 0x871101d8, + 0x29eb0957, 0x870ef2f1, 0x29e5197e, 0x870ce454, 0x29df298b, 0x870ad602, + 0x29d9397f, 0x8708c7fa, + 0x29d34958, 0x8706ba3d, 0x29cd5918, 0x8704acca, 0x29c768be, 0x87029fa3, + 0x29c1784a, 0x870092c5, + 0x29bb87bc, 0x86fe8633, 0x29b59715, 0x86fc79eb, 0x29afa654, 0x86fa6dee, + 0x29a9b579, 0x86f8623b, + 0x29a3c485, 0x86f656d3, 0x299dd377, 0x86f44bb6, 0x2997e24f, 0x86f240e3, + 0x2991f10e, 0x86f0365c, + 0x298bffb2, 0x86ee2c1e, 0x29860e3e, 0x86ec222c, 0x29801caf, 0x86ea1884, + 0x297a2b07, 0x86e80f27, + 0x29743946, 0x86e60614, 0x296e476b, 0x86e3fd4c, 0x29685576, 0x86e1f4cf, + 0x29626368, 0x86dfec9d, + 0x295c7140, 0x86dde4b5, 0x29567eff, 0x86dbdd18, 0x29508ca4, 0x86d9d5c6, + 0x294a9a30, 0x86d7cebf, + 0x2944a7a2, 0x86d5c802, 0x293eb4fb, 0x86d3c190, 0x2938c23a, 0x86d1bb69, + 0x2932cf60, 0x86cfb58c, + 0x292cdc6d, 0x86cdaffa, 0x2926e960, 0x86cbaab3, 0x2920f63a, 0x86c9a5b7, + 0x291b02fa, 0x86c7a106, + 0x29150fa1, 0x86c59c9f, 0x290f1c2f, 0x86c39883, 0x290928a3, 0x86c194b2, + 0x290334ff, 0x86bf912c, + 0x28fd4140, 0x86bd8df0, 0x28f74d69, 0x86bb8b00, 0x28f15978, 0x86b9885a, + 0x28eb656e, 0x86b785ff, + 0x28e5714b, 0x86b583ee, 0x28df7d0e, 0x86b38229, 0x28d988b8, 0x86b180ae, + 0x28d3944a, 0x86af7f7e, + 0x28cd9fc1, 0x86ad7e99, 0x28c7ab20, 0x86ab7dff, 0x28c1b666, 0x86a97db0, + 0x28bbc192, 0x86a77dab, + 0x28b5cca5, 0x86a57df2, 0x28afd7a0, 0x86a37e83, 0x28a9e281, 0x86a17f5f, + 0x28a3ed49, 0x869f8086, + 0x289df7f8, 0x869d81f8, 0x2898028e, 0x869b83b4, 0x28920d0a, 0x869985bc, + 0x288c176e, 0x8697880f, + 0x288621b9, 0x86958aac, 0x28802beb, 0x86938d94, 0x287a3604, 0x869190c7, + 0x28744004, 0x868f9445, + 0x286e49ea, 0x868d980e, 0x286853b8, 0x868b9c22, 0x28625d6d, 0x8689a081, + 0x285c670a, 0x8687a52b, + 0x2856708d, 0x8685aa20, 0x285079f7, 0x8683af5f, 0x284a8349, 0x8681b4ea, + 0x28448c81, 0x867fbabf, + 0x283e95a1, 0x867dc0e0, 0x28389ea8, 0x867bc74b, 0x2832a796, 0x8679ce01, + 0x282cb06c, 0x8677d503, + 0x2826b928, 0x8675dc4f, 0x2820c1cc, 0x8673e3e6, 0x281aca57, 0x8671ebc8, + 0x2814d2c9, 0x866ff3f6, + 0x280edb23, 0x866dfc6e, 0x2808e364, 0x866c0531, 0x2802eb8c, 0x866a0e3f, + 0x27fcf39c, 0x86681798, + 0x27f6fb92, 0x8666213c, 0x27f10371, 0x86642b2c, 0x27eb0b36, 0x86623566, + 0x27e512e3, 0x86603feb, + 0x27df1a77, 0x865e4abb, 0x27d921f3, 0x865c55d7, 0x27d32956, 0x865a613d, + 0x27cd30a1, 0x86586cee, + 0x27c737d3, 0x865678eb, 0x27c13eec, 0x86548532, 0x27bb45ed, 0x865291c4, + 0x27b54cd6, 0x86509ea2, + 0x27af53a6, 0x864eabcb, 0x27a95a5d, 0x864cb93e, 0x27a360fc, 0x864ac6fd, + 0x279d6783, 0x8648d507, + 0x27976df1, 0x8646e35c, 0x27917447, 0x8644f1fc, 0x278b7a84, 0x864300e7, + 0x278580a9, 0x8641101d, + 0x277f86b5, 0x863f1f9e, 0x27798caa, 0x863d2f6b, 0x27739285, 0x863b3f82, + 0x276d9849, 0x86394fe5, + 0x27679df4, 0x86376092, 0x2761a387, 0x8635718b, 0x275ba901, 0x863382cf, + 0x2755ae64, 0x8631945e, + 0x274fb3ae, 0x862fa638, 0x2749b8e0, 0x862db85e, 0x2743bdf9, 0x862bcace, + 0x273dc2fa, 0x8629dd8a, + 0x2737c7e3, 0x8627f091, 0x2731ccb4, 0x862603e3, 0x272bd16d, 0x86241780, + 0x2725d60e, 0x86222b68, + 0x271fda96, 0x86203f9c, 0x2719df06, 0x861e541a, 0x2713e35f, 0x861c68e4, + 0x270de79f, 0x861a7df9, + 0x2707ebc7, 0x86189359, 0x2701efd7, 0x8616a905, 0x26fbf3ce, 0x8614befb, + 0x26f5f7ae, 0x8612d53d, + 0x26effb76, 0x8610ebca, 0x26e9ff26, 0x860f02a3, 0x26e402bd, 0x860d19c6, + 0x26de063d, 0x860b3135, + 0x26d809a5, 0x860948ef, 0x26d20cf5, 0x860760f4, 0x26cc102d, 0x86057944, + 0x26c6134d, 0x860391e0, + 0x26c01655, 0x8601aac7, 0x26ba1945, 0x85ffc3f9, 0x26b41c1d, 0x85fddd76, + 0x26ae1edd, 0x85fbf73f, + 0x26a82186, 0x85fa1153, 0x26a22416, 0x85f82bb2, 0x269c268f, 0x85f6465c, + 0x269628f0, 0x85f46152, + 0x26902b39, 0x85f27c93, 0x268a2d6b, 0x85f09820, 0x26842f84, 0x85eeb3f7, + 0x267e3186, 0x85ecd01a, + 0x26783370, 0x85eaec88, 0x26723543, 0x85e90942, 0x266c36fe, 0x85e72647, + 0x266638a1, 0x85e54397, + 0x26603a2c, 0x85e36132, 0x265a3b9f, 0x85e17f19, 0x26543cfb, 0x85df9d4b, + 0x264e3e40, 0x85ddbbc9, + 0x26483f6c, 0x85dbda91, 0x26424082, 0x85d9f9a5, 0x263c417f, 0x85d81905, + 0x26364265, 0x85d638b0, + 0x26304333, 0x85d458a6, 0x262a43ea, 0x85d278e7, 0x26244489, 0x85d09974, + 0x261e4511, 0x85ceba4d, + 0x26184581, 0x85ccdb70, 0x261245da, 0x85cafcdf, 0x260c461b, 0x85c91e9a, + 0x26064645, 0x85c740a0, + 0x26004657, 0x85c562f1, 0x25fa4652, 0x85c3858d, 0x25f44635, 0x85c1a875, + 0x25ee4601, 0x85bfcba9, + 0x25e845b6, 0x85bdef28, 0x25e24553, 0x85bc12f2, 0x25dc44d9, 0x85ba3707, + 0x25d64447, 0x85b85b68, + 0x25d0439f, 0x85b68015, 0x25ca42de, 0x85b4a50d, 0x25c44207, 0x85b2ca50, + 0x25be4118, 0x85b0efdf, + 0x25b84012, 0x85af15b9, 0x25b23ef5, 0x85ad3bdf, 0x25ac3dc0, 0x85ab6250, + 0x25a63c74, 0x85a9890d, + 0x25a03b11, 0x85a7b015, 0x259a3997, 0x85a5d768, 0x25943806, 0x85a3ff07, + 0x258e365d, 0x85a226f2, + 0x2588349d, 0x85a04f28, 0x258232c6, 0x859e77a9, 0x257c30d8, 0x859ca076, + 0x25762ed3, 0x859ac98f, + 0x25702cb7, 0x8598f2f3, 0x256a2a83, 0x85971ca2, 0x25642839, 0x8595469d, + 0x255e25d7, 0x859370e4, + 0x2558235f, 0x85919b76, 0x255220cf, 0x858fc653, 0x254c1e28, 0x858df17c, + 0x25461b6b, 0x858c1cf1, + 0x25401896, 0x858a48b1, 0x253a15aa, 0x858874bd, 0x253412a8, 0x8586a114, + 0x252e0f8e, 0x8584cdb7, + 0x25280c5e, 0x8582faa5, 0x25220916, 0x858127df, 0x251c05b8, 0x857f5564, + 0x25160243, 0x857d8335, + 0x250ffeb7, 0x857bb152, 0x2509fb14, 0x8579dfba, 0x2503f75a, 0x85780e6e, + 0x24fdf389, 0x85763d6d, + 0x24f7efa2, 0x85746cb8, 0x24f1eba4, 0x85729c4e, 0x24ebe78f, 0x8570cc30, + 0x24e5e363, 0x856efc5e, + 0x24dfdf20, 0x856d2cd7, 0x24d9dac7, 0x856b5d9c, 0x24d3d657, 0x85698ead, + 0x24cdd1d0, 0x8567c009, + 0x24c7cd33, 0x8565f1b0, 0x24c1c87f, 0x856423a4, 0x24bbc3b4, 0x856255e3, + 0x24b5bed2, 0x8560886d, + 0x24afb9da, 0x855ebb44, 0x24a9b4cb, 0x855cee66, 0x24a3afa6, 0x855b21d3, + 0x249daa6a, 0x8559558c, + 0x2497a517, 0x85578991, 0x24919fae, 0x8555bde2, 0x248b9a2f, 0x8553f27e, + 0x24859498, 0x85522766, + 0x247f8eec, 0x85505c99, 0x24798928, 0x854e9219, 0x2473834f, 0x854cc7e3, + 0x246d7d5e, 0x854afdfa, + 0x24677758, 0x8549345c, 0x2461713a, 0x85476b0a, 0x245b6b07, 0x8545a204, + 0x245564bd, 0x8543d949, + 0x244f5e5c, 0x854210db, 0x244957e5, 0x854048b7, 0x24435158, 0x853e80e0, + 0x243d4ab4, 0x853cb954, + 0x243743fa, 0x853af214, 0x24313d2a, 0x85392b20, 0x242b3644, 0x85376477, + 0x24252f47, 0x85359e1a, + 0x241f2833, 0x8533d809, 0x2419210a, 0x85321244, 0x241319ca, 0x85304cca, + 0x240d1274, 0x852e879d, + 0x24070b08, 0x852cc2bb, 0x24010385, 0x852afe24, 0x23fafbec, 0x852939da, + 0x23f4f43e, 0x852775db, + 0x23eeec78, 0x8525b228, 0x23e8e49d, 0x8523eec1, 0x23e2dcac, 0x85222ba5, + 0x23dcd4a4, 0x852068d6, + 0x23d6cc87, 0x851ea652, 0x23d0c453, 0x851ce41a, 0x23cabc09, 0x851b222e, + 0x23c4b3a9, 0x8519608d, + 0x23beab33, 0x85179f39, 0x23b8a2a7, 0x8515de30, 0x23b29a05, 0x85141d73, + 0x23ac914d, 0x85125d02, + 0x23a6887f, 0x85109cdd, 0x23a07f9a, 0x850edd03, 0x239a76a0, 0x850d1d75, + 0x23946d90, 0x850b5e34, + 0x238e646a, 0x85099f3e, 0x23885b2e, 0x8507e094, 0x238251dd, 0x85062235, + 0x237c4875, 0x85046423, + 0x23763ef7, 0x8502a65c, 0x23703564, 0x8500e8e2, 0x236a2bba, 0x84ff2bb3, + 0x236421fb, 0x84fd6ed0, + 0x235e1826, 0x84fbb239, 0x23580e3b, 0x84f9f5ee, 0x2352043b, 0x84f839ee, + 0x234bfa24, 0x84f67e3b, + 0x2345eff8, 0x84f4c2d4, 0x233fe5b6, 0x84f307b8, 0x2339db5e, 0x84f14ce8, + 0x2333d0f1, 0x84ef9265, + 0x232dc66d, 0x84edd82d, 0x2327bbd5, 0x84ec1e41, 0x2321b126, 0x84ea64a1, + 0x231ba662, 0x84e8ab4d, + 0x23159b88, 0x84e6f244, 0x230f9098, 0x84e53988, 0x23098593, 0x84e38118, + 0x23037a78, 0x84e1c8f3, + 0x22fd6f48, 0x84e0111b, 0x22f76402, 0x84de598f, 0x22f158a7, 0x84dca24e, + 0x22eb4d36, 0x84daeb5a, + 0x22e541af, 0x84d934b1, 0x22df3613, 0x84d77e54, 0x22d92a61, 0x84d5c844, + 0x22d31e9a, 0x84d4127f, + 0x22cd12bd, 0x84d25d06, 0x22c706cb, 0x84d0a7da, 0x22c0fac4, 0x84cef2f9, + 0x22baeea7, 0x84cd3e64, + 0x22b4e274, 0x84cb8a1b, 0x22aed62c, 0x84c9d61f, 0x22a8c9cf, 0x84c8226e, + 0x22a2bd5d, 0x84c66f09, + 0x229cb0d5, 0x84c4bbf0, 0x2296a437, 0x84c30924, 0x22909785, 0x84c156a3, + 0x228a8abd, 0x84bfa46e, + 0x22847de0, 0x84bdf286, 0x227e70ed, 0x84bc40e9, 0x227863e5, 0x84ba8f98, + 0x227256c8, 0x84b8de94, + 0x226c4996, 0x84b72ddb, 0x22663c4e, 0x84b57d6f, 0x22602ef1, 0x84b3cd4f, + 0x225a217f, 0x84b21d7a, + 0x225413f8, 0x84b06df2, 0x224e065c, 0x84aebeb6, 0x2247f8aa, 0x84ad0fc6, + 0x2241eae3, 0x84ab6122, + 0x223bdd08, 0x84a9b2ca, 0x2235cf17, 0x84a804be, 0x222fc111, 0x84a656fe, + 0x2229b2f6, 0x84a4a98a, + 0x2223a4c5, 0x84a2fc62, 0x221d9680, 0x84a14f87, 0x22178826, 0x849fa2f7, + 0x221179b7, 0x849df6b4, + 0x220b6b32, 0x849c4abd, 0x22055c99, 0x849a9f12, 0x21ff4dea, 0x8498f3b3, + 0x21f93f27, 0x849748a0, + 0x21f3304f, 0x84959dd9, 0x21ed2162, 0x8493f35e, 0x21e71260, 0x84924930, + 0x21e10349, 0x84909f4e, + 0x21daf41d, 0x848ef5b7, 0x21d4e4dc, 0x848d4c6d, 0x21ced586, 0x848ba36f, + 0x21c8c61c, 0x8489fabe, + 0x21c2b69c, 0x84885258, 0x21bca708, 0x8486aa3e, 0x21b6975f, 0x84850271, + 0x21b087a1, 0x84835af0, + 0x21aa77cf, 0x8481b3bb, 0x21a467e7, 0x84800cd2, 0x219e57eb, 0x847e6636, + 0x219847da, 0x847cbfe5, + 0x219237b5, 0x847b19e1, 0x218c277a, 0x84797429, 0x2186172b, 0x8477cebd, + 0x218006c8, 0x8476299e, + 0x2179f64f, 0x847484ca, 0x2173e5c2, 0x8472e043, 0x216dd521, 0x84713c08, + 0x2167c46b, 0x846f9819, + 0x2161b3a0, 0x846df477, 0x215ba2c0, 0x846c5120, 0x215591cc, 0x846aae16, + 0x214f80c4, 0x84690b58, + 0x21496fa7, 0x846768e7, 0x21435e75, 0x8465c6c1, 0x213d4d2f, 0x846424e8, + 0x21373bd4, 0x8462835b, + 0x21312a65, 0x8460e21a, 0x212b18e1, 0x845f4126, 0x21250749, 0x845da07e, + 0x211ef59d, 0x845c0022, + 0x2118e3dc, 0x845a6012, 0x2112d206, 0x8458c04f, 0x210cc01d, 0x845720d8, + 0x2106ae1e, 0x845581ad, + 0x21009c0c, 0x8453e2cf, 0x20fa89e5, 0x8452443d, 0x20f477aa, 0x8450a5f7, + 0x20ee655a, 0x844f07fd, + 0x20e852f6, 0x844d6a50, 0x20e2407e, 0x844bccef, 0x20dc2df2, 0x844a2fda, + 0x20d61b51, 0x84489311, + 0x20d0089c, 0x8446f695, 0x20c9f5d3, 0x84455a66, 0x20c3e2f5, 0x8443be82, + 0x20bdd003, 0x844222eb, + 0x20b7bcfe, 0x844087a0, 0x20b1a9e4, 0x843eeca2, 0x20ab96b5, 0x843d51f0, + 0x20a58373, 0x843bb78a, + 0x209f701c, 0x843a1d70, 0x20995cb2, 0x843883a3, 0x20934933, 0x8436ea23, + 0x208d35a0, 0x843550ee, + 0x208721f9, 0x8433b806, 0x20810e3e, 0x84321f6b, 0x207afa6f, 0x8430871b, + 0x2074e68c, 0x842eef18, + 0x206ed295, 0x842d5762, 0x2068be8a, 0x842bbff8, 0x2062aa6b, 0x842a28da, + 0x205c9638, 0x84289209, + 0x205681f1, 0x8426fb84, 0x20506d96, 0x8425654b, 0x204a5927, 0x8423cf5f, + 0x204444a4, 0x842239bf, + 0x203e300d, 0x8420a46c, 0x20381b63, 0x841f0f65, 0x203206a4, 0x841d7aaa, + 0x202bf1d2, 0x841be63c, + 0x2025dcec, 0x841a521a, 0x201fc7f2, 0x8418be45, 0x2019b2e4, 0x84172abc, + 0x20139dc2, 0x84159780, + 0x200d888d, 0x84140490, 0x20077344, 0x841271ec, 0x20015de7, 0x8410df95, + 0x1ffb4876, 0x840f4d8a, + 0x1ff532f2, 0x840dbbcc, 0x1fef1d59, 0x840c2a5a, 0x1fe907ae, 0x840a9935, + 0x1fe2f1ee, 0x8409085c, + 0x1fdcdc1b, 0x840777d0, 0x1fd6c634, 0x8405e790, 0x1fd0b03a, 0x8404579d, + 0x1fca9a2b, 0x8402c7f6, + 0x1fc4840a, 0x8401389b, 0x1fbe6dd4, 0x83ffa98d, 0x1fb8578b, 0x83fe1acc, + 0x1fb2412f, 0x83fc8c57, + 0x1fac2abf, 0x83fafe2e, 0x1fa6143b, 0x83f97052, 0x1f9ffda4, 0x83f7e2c3, + 0x1f99e6fa, 0x83f65580, + 0x1f93d03c, 0x83f4c889, 0x1f8db96a, 0x83f33bdf, 0x1f87a285, 0x83f1af82, + 0x1f818b8d, 0x83f02371, + 0x1f7b7481, 0x83ee97ad, 0x1f755d61, 0x83ed0c35, 0x1f6f462f, 0x83eb810a, + 0x1f692ee9, 0x83e9f62b, + 0x1f63178f, 0x83e86b99, 0x1f5d0022, 0x83e6e153, 0x1f56e8a2, 0x83e5575a, + 0x1f50d10e, 0x83e3cdad, + 0x1f4ab968, 0x83e2444d, 0x1f44a1ad, 0x83e0bb3a, 0x1f3e89e0, 0x83df3273, + 0x1f3871ff, 0x83dda9f9, + 0x1f325a0b, 0x83dc21cb, 0x1f2c4204, 0x83da99ea, 0x1f2629ea, 0x83d91255, + 0x1f2011bc, 0x83d78b0d, + 0x1f19f97b, 0x83d60412, 0x1f13e127, 0x83d47d63, 0x1f0dc8c0, 0x83d2f701, + 0x1f07b045, 0x83d170eb, + 0x1f0197b8, 0x83cfeb22, 0x1efb7f17, 0x83ce65a6, 0x1ef56664, 0x83cce076, + 0x1eef4d9d, 0x83cb5b93, + 0x1ee934c3, 0x83c9d6fc, 0x1ee31bd6, 0x83c852b2, 0x1edd02d6, 0x83c6ceb5, + 0x1ed6e9c3, 0x83c54b04, + 0x1ed0d09d, 0x83c3c7a0, 0x1ecab763, 0x83c24488, 0x1ec49e17, 0x83c0c1be, + 0x1ebe84b8, 0x83bf3f3f, + 0x1eb86b46, 0x83bdbd0e, 0x1eb251c1, 0x83bc3b29, 0x1eac3829, 0x83bab991, + 0x1ea61e7e, 0x83b93845, + 0x1ea004c1, 0x83b7b746, 0x1e99eaf0, 0x83b63694, 0x1e93d10c, 0x83b4b62e, + 0x1e8db716, 0x83b33616, + 0x1e879d0d, 0x83b1b649, 0x1e8182f1, 0x83b036ca, 0x1e7b68c2, 0x83aeb797, + 0x1e754e80, 0x83ad38b1, + 0x1e6f342c, 0x83abba17, 0x1e6919c4, 0x83aa3bca, 0x1e62ff4a, 0x83a8bdca, + 0x1e5ce4be, 0x83a74017, + 0x1e56ca1e, 0x83a5c2b0, 0x1e50af6c, 0x83a44596, 0x1e4a94a7, 0x83a2c8c9, + 0x1e4479cf, 0x83a14c48, + 0x1e3e5ee5, 0x839fd014, 0x1e3843e8, 0x839e542d, 0x1e3228d9, 0x839cd893, + 0x1e2c0db6, 0x839b5d45, + 0x1e25f282, 0x8399e244, 0x1e1fd73a, 0x83986790, 0x1e19bbe0, 0x8396ed29, + 0x1e13a074, 0x8395730e, + 0x1e0d84f5, 0x8393f940, 0x1e076963, 0x83927fbf, 0x1e014dbf, 0x8391068a, + 0x1dfb3208, 0x838f8da2, + 0x1df5163f, 0x838e1507, 0x1deefa63, 0x838c9cb9, 0x1de8de75, 0x838b24b8, + 0x1de2c275, 0x8389ad03, + 0x1ddca662, 0x8388359b, 0x1dd68a3c, 0x8386be80, 0x1dd06e04, 0x838547b2, + 0x1dca51ba, 0x8383d130, + 0x1dc4355e, 0x83825afb, 0x1dbe18ef, 0x8380e513, 0x1db7fc6d, 0x837f6f78, + 0x1db1dfda, 0x837dfa2a, + 0x1dabc334, 0x837c8528, 0x1da5a67c, 0x837b1074, 0x1d9f89b1, 0x83799c0c, + 0x1d996cd4, 0x837827f0, + 0x1d934fe5, 0x8376b422, 0x1d8d32e4, 0x837540a1, 0x1d8715d0, 0x8373cd6c, + 0x1d80f8ab, 0x83725a84, + 0x1d7adb73, 0x8370e7e9, 0x1d74be29, 0x836f759b, 0x1d6ea0cc, 0x836e039a, + 0x1d68835e, 0x836c91e5, + 0x1d6265dd, 0x836b207d, 0x1d5c484b, 0x8369af63, 0x1d562aa6, 0x83683e95, + 0x1d500cef, 0x8366ce14, + 0x1d49ef26, 0x83655ddf, 0x1d43d14b, 0x8363edf8, 0x1d3db35e, 0x83627e5d, + 0x1d37955e, 0x83610f10, + 0x1d31774d, 0x835fa00f, 0x1d2b592a, 0x835e315b, 0x1d253af5, 0x835cc2f4, + 0x1d1f1cae, 0x835b54da, + 0x1d18fe54, 0x8359e70d, 0x1d12dfe9, 0x8358798c, 0x1d0cc16c, 0x83570c59, + 0x1d06a2dd, 0x83559f72, + 0x1d00843d, 0x835432d8, 0x1cfa658a, 0x8352c68c, 0x1cf446c5, 0x83515a8c, + 0x1cee27ef, 0x834feed9, + 0x1ce80906, 0x834e8373, 0x1ce1ea0c, 0x834d185a, 0x1cdbcb00, 0x834bad8e, + 0x1cd5abe3, 0x834a430e, + 0x1ccf8cb3, 0x8348d8dc, 0x1cc96d72, 0x83476ef6, 0x1cc34e1f, 0x8346055e, + 0x1cbd2eba, 0x83449c12, + 0x1cb70f43, 0x83433314, 0x1cb0efbb, 0x8341ca62, 0x1caad021, 0x834061fd, + 0x1ca4b075, 0x833ef9e6, + 0x1c9e90b8, 0x833d921b, 0x1c9870e9, 0x833c2a9d, 0x1c925109, 0x833ac36c, + 0x1c8c3116, 0x83395c88, + 0x1c861113, 0x8337f5f1, 0x1c7ff0fd, 0x83368fa7, 0x1c79d0d6, 0x833529aa, + 0x1c73b09d, 0x8333c3fa, + 0x1c6d9053, 0x83325e97, 0x1c676ff8, 0x8330f981, 0x1c614f8b, 0x832f94b8, + 0x1c5b2f0c, 0x832e303c, + 0x1c550e7c, 0x832ccc0d, 0x1c4eedda, 0x832b682b, 0x1c48cd27, 0x832a0496, + 0x1c42ac62, 0x8328a14d, + 0x1c3c8b8c, 0x83273e52, 0x1c366aa5, 0x8325dba4, 0x1c3049ac, 0x83247943, + 0x1c2a28a2, 0x8323172f, + 0x1c240786, 0x8321b568, 0x1c1de659, 0x832053ee, 0x1c17c51b, 0x831ef2c1, + 0x1c11a3cb, 0x831d91e1, + 0x1c0b826a, 0x831c314e, 0x1c0560f8, 0x831ad109, 0x1bff3f75, 0x83197110, + 0x1bf91de0, 0x83181164, + 0x1bf2fc3a, 0x8316b205, 0x1becda83, 0x831552f4, 0x1be6b8ba, 0x8313f42f, + 0x1be096e0, 0x831295b7, + 0x1bda74f6, 0x8311378d, 0x1bd452f9, 0x830fd9af, 0x1bce30ec, 0x830e7c1f, + 0x1bc80ece, 0x830d1edc, + 0x1bc1ec9e, 0x830bc1e6, 0x1bbbca5e, 0x830a653c, 0x1bb5a80c, 0x830908e0, + 0x1baf85a9, 0x8307acd1, + 0x1ba96335, 0x83065110, 0x1ba340b0, 0x8304f59b, 0x1b9d1e1a, 0x83039a73, + 0x1b96fb73, 0x83023f98, + 0x1b90d8bb, 0x8300e50b, 0x1b8ab5f2, 0x82ff8acb, 0x1b849317, 0x82fe30d7, + 0x1b7e702c, 0x82fcd731, + 0x1b784d30, 0x82fb7dd8, 0x1b722a23, 0x82fa24cc, 0x1b6c0705, 0x82f8cc0d, + 0x1b65e3d7, 0x82f7739c, + 0x1b5fc097, 0x82f61b77, 0x1b599d46, 0x82f4c3a0, 0x1b5379e5, 0x82f36c15, + 0x1b4d5672, 0x82f214d8, + 0x1b4732ef, 0x82f0bde8, 0x1b410f5b, 0x82ef6745, 0x1b3aebb6, 0x82ee10ef, + 0x1b34c801, 0x82ecbae7, + 0x1b2ea43a, 0x82eb652b, 0x1b288063, 0x82ea0fbd, 0x1b225c7b, 0x82e8ba9c, + 0x1b1c3883, 0x82e765c8, + 0x1b161479, 0x82e61141, 0x1b0ff05f, 0x82e4bd07, 0x1b09cc34, 0x82e3691b, + 0x1b03a7f9, 0x82e2157c, + 0x1afd83ad, 0x82e0c22a, 0x1af75f50, 0x82df6f25, 0x1af13ae3, 0x82de1c6d, + 0x1aeb1665, 0x82dcca02, + 0x1ae4f1d6, 0x82db77e5, 0x1adecd37, 0x82da2615, 0x1ad8a887, 0x82d8d492, + 0x1ad283c7, 0x82d7835c, + 0x1acc5ef6, 0x82d63274, 0x1ac63a14, 0x82d4e1d8, 0x1ac01522, 0x82d3918a, + 0x1ab9f020, 0x82d24189, + 0x1ab3cb0d, 0x82d0f1d5, 0x1aada5e9, 0x82cfa26f, 0x1aa780b6, 0x82ce5356, + 0x1aa15b71, 0x82cd048a, + 0x1a9b361d, 0x82cbb60b, 0x1a9510b7, 0x82ca67d9, 0x1a8eeb42, 0x82c919f5, + 0x1a88c5bc, 0x82c7cc5e, + 0x1a82a026, 0x82c67f14, 0x1a7c7a7f, 0x82c53217, 0x1a7654c8, 0x82c3e568, + 0x1a702f01, 0x82c29906, + 0x1a6a0929, 0x82c14cf1, 0x1a63e341, 0x82c00129, 0x1a5dbd49, 0x82beb5af, + 0x1a579741, 0x82bd6a82, + 0x1a517128, 0x82bc1fa2, 0x1a4b4aff, 0x82bad50f, 0x1a4524c6, 0x82b98aca, + 0x1a3efe7c, 0x82b840d2, + 0x1a38d823, 0x82b6f727, 0x1a32b1b9, 0x82b5adca, 0x1a2c8b3f, 0x82b464ba, + 0x1a2664b5, 0x82b31bf7, + 0x1a203e1b, 0x82b1d381, 0x1a1a1771, 0x82b08b59, 0x1a13f0b6, 0x82af437e, + 0x1a0dc9ec, 0x82adfbf0, + 0x1a07a311, 0x82acb4b0, 0x1a017c27, 0x82ab6dbd, 0x19fb552c, 0x82aa2717, + 0x19f52e22, 0x82a8e0bf, + 0x19ef0707, 0x82a79ab3, 0x19e8dfdc, 0x82a654f6, 0x19e2b8a2, 0x82a50f85, + 0x19dc9157, 0x82a3ca62, + 0x19d669fc, 0x82a2858c, 0x19d04292, 0x82a14104, 0x19ca1b17, 0x829ffcc8, + 0x19c3f38d, 0x829eb8db, + 0x19bdcbf3, 0x829d753a, 0x19b7a449, 0x829c31e7, 0x19b17c8f, 0x829aeee1, + 0x19ab54c5, 0x8299ac29, + 0x19a52ceb, 0x829869be, 0x199f0502, 0x829727a0, 0x1998dd09, 0x8295e5cf, + 0x1992b4ff, 0x8294a44c, + 0x198c8ce7, 0x82936317, 0x198664be, 0x8292222e, 0x19803c86, 0x8290e194, + 0x197a143e, 0x828fa146, + 0x1973ebe6, 0x828e6146, 0x196dc37e, 0x828d2193, 0x19679b07, 0x828be22e, + 0x19617280, 0x828aa316, + 0x195b49ea, 0x8289644b, 0x19552144, 0x828825ce, 0x194ef88e, 0x8286e79e, + 0x1948cfc8, 0x8285a9bb, + 0x1942a6f3, 0x82846c26, 0x193c7e0f, 0x82832edf, 0x1936551b, 0x8281f1e4, + 0x19302c17, 0x8280b538, + 0x192a0304, 0x827f78d8, 0x1923d9e1, 0x827e3cc6, 0x191db0af, 0x827d0102, + 0x1917876d, 0x827bc58a, + 0x19115e1c, 0x827a8a61, 0x190b34bb, 0x82794f84, 0x19050b4b, 0x827814f6, + 0x18fee1cb, 0x8276dab4, + 0x18f8b83c, 0x8275a0c0, 0x18f28e9e, 0x8274671a, 0x18ec64f0, 0x82732dc0, + 0x18e63b33, 0x8271f4b5, + 0x18e01167, 0x8270bbf7, 0x18d9e78b, 0x826f8386, 0x18d3bda0, 0x826e4b62, + 0x18cd93a5, 0x826d138d, + 0x18c7699b, 0x826bdc04, 0x18c13f82, 0x826aa4c9, 0x18bb155a, 0x82696ddc, + 0x18b4eb22, 0x8268373c, + 0x18aec0db, 0x826700e9, 0x18a89685, 0x8265cae4, 0x18a26c20, 0x8264952d, + 0x189c41ab, 0x82635fc2, + 0x18961728, 0x82622aa6, 0x188fec95, 0x8260f5d7, 0x1889c1f3, 0x825fc155, + 0x18839742, 0x825e8d21, + 0x187d6c82, 0x825d593a, 0x187741b2, 0x825c25a1, 0x187116d4, 0x825af255, + 0x186aebe6, 0x8259bf57, + 0x1864c0ea, 0x82588ca7, 0x185e95de, 0x82575a44, 0x18586ac3, 0x8256282e, + 0x18523f9a, 0x8254f666, + 0x184c1461, 0x8253c4eb, 0x1845e919, 0x825293be, 0x183fbdc3, 0x825162df, + 0x1839925d, 0x8250324d, + 0x183366e9, 0x824f0208, 0x182d3b65, 0x824dd211, 0x18270fd3, 0x824ca268, + 0x1820e431, 0x824b730c, + 0x181ab881, 0x824a43fe, 0x18148cc2, 0x8249153d, 0x180e60f4, 0x8247e6ca, + 0x18083518, 0x8246b8a4, + 0x1802092c, 0x82458acc, 0x17fbdd32, 0x82445d41, 0x17f5b129, 0x82433004, + 0x17ef8511, 0x82420315, + 0x17e958ea, 0x8240d673, 0x17e32cb5, 0x823faa1e, 0x17dd0070, 0x823e7e18, + 0x17d6d41d, 0x823d525e, + 0x17d0a7bc, 0x823c26f3, 0x17ca7b4c, 0x823afbd5, 0x17c44ecd, 0x8239d104, + 0x17be223f, 0x8238a681, + 0x17b7f5a3, 0x82377c4c, 0x17b1c8f8, 0x82365264, 0x17ab9c3e, 0x823528ca, + 0x17a56f76, 0x8233ff7e, + 0x179f429f, 0x8232d67f, 0x179915ba, 0x8231adce, 0x1792e8c6, 0x8230856a, + 0x178cbbc4, 0x822f5d54, + 0x17868eb3, 0x822e358b, 0x17806194, 0x822d0e10, 0x177a3466, 0x822be6e3, + 0x17740729, 0x822ac004, + 0x176dd9de, 0x82299971, 0x1767ac85, 0x8228732d, 0x17617f1d, 0x82274d36, + 0x175b51a7, 0x8226278d, + 0x17552422, 0x82250232, 0x174ef68f, 0x8223dd24, 0x1748c8ee, 0x8222b863, + 0x17429b3e, 0x822193f1, + 0x173c6d80, 0x82206fcc, 0x17363fb4, 0x821f4bf5, 0x173011d9, 0x821e286b, + 0x1729e3f0, 0x821d052f, + 0x1723b5f9, 0x821be240, 0x171d87f3, 0x821abfa0, 0x171759df, 0x82199d4d, + 0x17112bbd, 0x82187b47, + 0x170afd8d, 0x82175990, 0x1704cf4f, 0x82163826, 0x16fea102, 0x82151709, + 0x16f872a7, 0x8213f63a, + 0x16f2443e, 0x8212d5b9, 0x16ec15c7, 0x8211b586, 0x16e5e741, 0x821095a0, + 0x16dfb8ae, 0x820f7608, + 0x16d98a0c, 0x820e56be, 0x16d35b5c, 0x820d37c1, 0x16cd2c9f, 0x820c1912, + 0x16c6fdd3, 0x820afab1, + 0x16c0cef9, 0x8209dc9e, 0x16baa011, 0x8208bed8, 0x16b4711b, 0x8207a160, + 0x16ae4217, 0x82068435, + 0x16a81305, 0x82056758, 0x16a1e3e5, 0x82044ac9, 0x169bb4b7, 0x82032e88, + 0x1695857b, 0x82021294, + 0x168f5632, 0x8200f6ef, 0x168926da, 0x81ffdb96, 0x1682f774, 0x81fec08c, + 0x167cc801, 0x81fda5cf, + 0x1676987f, 0x81fc8b60, 0x167068f0, 0x81fb713f, 0x166a3953, 0x81fa576c, + 0x166409a8, 0x81f93de6, + 0x165dd9f0, 0x81f824ae, 0x1657aa29, 0x81f70bc3, 0x16517a55, 0x81f5f327, + 0x164b4a73, 0x81f4dad8, + 0x16451a83, 0x81f3c2d7, 0x163eea86, 0x81f2ab24, 0x1638ba7a, 0x81f193be, + 0x16328a61, 0x81f07ca6, + 0x162c5a3b, 0x81ef65dc, 0x16262a06, 0x81ee4f60, 0x161ff9c4, 0x81ed3932, + 0x1619c975, 0x81ec2351, + 0x16139918, 0x81eb0dbe, 0x160d68ad, 0x81e9f879, 0x16073834, 0x81e8e381, + 0x160107ae, 0x81e7ced8, + 0x15fad71b, 0x81e6ba7c, 0x15f4a679, 0x81e5a66e, 0x15ee75cb, 0x81e492ad, + 0x15e8450e, 0x81e37f3b, + 0x15e21445, 0x81e26c16, 0x15dbe36d, 0x81e1593f, 0x15d5b288, 0x81e046b6, + 0x15cf8196, 0x81df347b, + 0x15c95097, 0x81de228d, 0x15c31f89, 0x81dd10ee, 0x15bcee6f, 0x81dbff9c, + 0x15b6bd47, 0x81daee98, + 0x15b08c12, 0x81d9dde1, 0x15aa5acf, 0x81d8cd79, 0x15a4297f, 0x81d7bd5e, + 0x159df821, 0x81d6ad92, + 0x1597c6b7, 0x81d59e13, 0x1591953e, 0x81d48ee1, 0x158b63b9, 0x81d37ffe, + 0x15853226, 0x81d27169, + 0x157f0086, 0x81d16321, 0x1578ced9, 0x81d05527, 0x15729d1f, 0x81cf477b, + 0x156c6b57, 0x81ce3a1d, + 0x15663982, 0x81cd2d0c, 0x156007a0, 0x81cc204a, 0x1559d5b1, 0x81cb13d5, + 0x1553a3b4, 0x81ca07af, + 0x154d71aa, 0x81c8fbd6, 0x15473f94, 0x81c7f04b, 0x15410d70, 0x81c6e50d, + 0x153adb3f, 0x81c5da1e, + 0x1534a901, 0x81c4cf7d, 0x152e76b5, 0x81c3c529, 0x1528445d, 0x81c2bb23, + 0x152211f8, 0x81c1b16b, + 0x151bdf86, 0x81c0a801, 0x1515ad06, 0x81bf9ee5, 0x150f7a7a, 0x81be9617, + 0x150947e1, 0x81bd8d97, + 0x1503153a, 0x81bc8564, 0x14fce287, 0x81bb7d7f, 0x14f6afc7, 0x81ba75e9, + 0x14f07cf9, 0x81b96ea0, + 0x14ea4a1f, 0x81b867a5, 0x14e41738, 0x81b760f8, 0x14dde445, 0x81b65a99, + 0x14d7b144, 0x81b55488, + 0x14d17e36, 0x81b44ec4, 0x14cb4b1c, 0x81b3494f, 0x14c517f4, 0x81b24427, + 0x14bee4c0, 0x81b13f4e, + 0x14b8b17f, 0x81b03ac2, 0x14b27e32, 0x81af3684, 0x14ac4ad7, 0x81ae3294, + 0x14a61770, 0x81ad2ef2, + 0x149fe3fc, 0x81ac2b9e, 0x1499b07c, 0x81ab2898, 0x14937cee, 0x81aa25e0, + 0x148d4954, 0x81a92376, + 0x148715ae, 0x81a82159, 0x1480e1fa, 0x81a71f8b, 0x147aae3a, 0x81a61e0b, + 0x14747a6d, 0x81a51cd8, + 0x146e4694, 0x81a41bf4, 0x146812ae, 0x81a31b5d, 0x1461debc, 0x81a21b14, + 0x145baabd, 0x81a11b1a, + 0x145576b1, 0x81a01b6d, 0x144f4299, 0x819f1c0e, 0x14490e74, 0x819e1cfd, + 0x1442da43, 0x819d1e3a, + 0x143ca605, 0x819c1fc5, 0x143671bb, 0x819b219e, 0x14303d65, 0x819a23c5, + 0x142a0902, 0x8199263a, + 0x1423d492, 0x819828fd, 0x141da016, 0x81972c0e, 0x14176b8e, 0x81962f6d, + 0x141136f9, 0x8195331a, + 0x140b0258, 0x81943715, 0x1404cdaa, 0x81933b5e, 0x13fe98f1, 0x81923ff4, + 0x13f8642a, 0x819144d9, + 0x13f22f58, 0x81904a0c, 0x13ebfa79, 0x818f4f8d, 0x13e5c58e, 0x818e555c, + 0x13df9097, 0x818d5b78, + 0x13d95b93, 0x818c61e3, 0x13d32683, 0x818b689c, 0x13ccf167, 0x818a6fa3, + 0x13c6bc3f, 0x818976f8, + 0x13c0870a, 0x81887e9a, 0x13ba51ca, 0x8187868b, 0x13b41c7d, 0x81868eca, + 0x13ade724, 0x81859757, + 0x13a7b1bf, 0x8184a032, 0x13a17c4d, 0x8183a95b, 0x139b46d0, 0x8182b2d1, + 0x13951146, 0x8181bc96, + 0x138edbb1, 0x8180c6a9, 0x1388a60f, 0x817fd10a, 0x13827062, 0x817edbb9, + 0x137c3aa8, 0x817de6b6, + 0x137604e2, 0x817cf201, 0x136fcf10, 0x817bfd9b, 0x13699933, 0x817b0982, + 0x13636349, 0x817a15b7, + 0x135d2d53, 0x8179223a, 0x1356f752, 0x81782f0b, 0x1350c144, 0x81773c2b, + 0x134a8b2b, 0x81764998, + 0x13445505, 0x81755754, 0x133e1ed4, 0x8174655d, 0x1337e897, 0x817373b5, + 0x1331b24e, 0x8172825a, + 0x132b7bf9, 0x8171914e, 0x13254599, 0x8170a090, 0x131f0f2c, 0x816fb020, + 0x1318d8b4, 0x816ebffe, + 0x1312a230, 0x816dd02a, 0x130c6ba0, 0x816ce0a4, 0x13063505, 0x816bf16c, + 0x12fffe5d, 0x816b0282, + 0x12f9c7aa, 0x816a13e6, 0x12f390ec, 0x81692599, 0x12ed5a21, 0x81683799, + 0x12e7234b, 0x816749e8, + 0x12e0ec6a, 0x81665c84, 0x12dab57c, 0x81656f6f, 0x12d47e83, 0x816482a8, + 0x12ce477f, 0x8163962f, + 0x12c8106f, 0x8162aa04, 0x12c1d953, 0x8161be27, 0x12bba22b, 0x8160d298, + 0x12b56af9, 0x815fe758, + 0x12af33ba, 0x815efc65, 0x12a8fc70, 0x815e11c1, 0x12a2c51b, 0x815d276a, + 0x129c8dba, 0x815c3d62, + 0x1296564d, 0x815b53a8, 0x12901ed5, 0x815a6a3c, 0x1289e752, 0x8159811e, + 0x1283afc3, 0x8158984e, + 0x127d7829, 0x8157afcd, 0x12774083, 0x8156c799, 0x127108d2, 0x8155dfb4, + 0x126ad116, 0x8154f81d, + 0x1264994e, 0x815410d4, 0x125e617b, 0x815329d9, 0x1258299c, 0x8152432c, + 0x1251f1b3, 0x81515ccd, + 0x124bb9be, 0x815076bd, 0x124581bd, 0x814f90fb, 0x123f49b2, 0x814eab86, + 0x1239119b, 0x814dc660, + 0x1232d979, 0x814ce188, 0x122ca14b, 0x814bfcff, 0x12266913, 0x814b18c3, + 0x122030cf, 0x814a34d6, + 0x1219f880, 0x81495136, 0x1213c026, 0x81486de5, 0x120d87c1, 0x81478ae2, + 0x12074f50, 0x8146a82e, + 0x120116d5, 0x8145c5c7, 0x11fade4e, 0x8144e3ae, 0x11f4a5bd, 0x814401e4, + 0x11ee6d20, 0x81432068, + 0x11e83478, 0x81423f3a, 0x11e1fbc5, 0x81415e5a, 0x11dbc307, 0x81407dc9, + 0x11d58a3e, 0x813f9d86, + 0x11cf516a, 0x813ebd90, 0x11c9188b, 0x813ddde9, 0x11c2dfa2, 0x813cfe91, + 0x11bca6ad, 0x813c1f86, + 0x11b66dad, 0x813b40ca, 0x11b034a2, 0x813a625b, 0x11a9fb8d, 0x8139843b, + 0x11a3c26c, 0x8138a66a, + 0x119d8941, 0x8137c8e6, 0x1197500a, 0x8136ebb1, 0x119116c9, 0x81360ec9, + 0x118add7d, 0x81353230, + 0x1184a427, 0x813455e6, 0x117e6ac5, 0x813379e9, 0x11783159, 0x81329e3b, + 0x1171f7e2, 0x8131c2db, + 0x116bbe60, 0x8130e7c9, 0x116584d3, 0x81300d05, 0x115f4b3c, 0x812f3290, + 0x1159119a, 0x812e5868, + 0x1152d7ed, 0x812d7e8f, 0x114c9e35, 0x812ca505, 0x11466473, 0x812bcbc8, + 0x11402aa6, 0x812af2da, + 0x1139f0cf, 0x812a1a3a, 0x1133b6ed, 0x812941e8, 0x112d7d00, 0x812869e4, + 0x11274309, 0x8127922f, + 0x11210907, 0x8126bac8, 0x111acefb, 0x8125e3af, 0x111494e4, 0x81250ce4, + 0x110e5ac2, 0x81243668, + 0x11082096, 0x8123603a, 0x1101e65f, 0x81228a5a, 0x10fbac1e, 0x8121b4c8, + 0x10f571d3, 0x8120df85, + 0x10ef377d, 0x81200a90, 0x10e8fd1c, 0x811f35e9, 0x10e2c2b2, 0x811e6191, + 0x10dc883c, 0x811d8d86, + 0x10d64dbd, 0x811cb9ca, 0x10d01333, 0x811be65d, 0x10c9d89e, 0x811b133d, + 0x10c39dff, 0x811a406c, + 0x10bd6356, 0x81196de9, 0x10b728a3, 0x81189bb4, 0x10b0ede5, 0x8117c9ce, + 0x10aab31d, 0x8116f836, + 0x10a4784b, 0x811626ec, 0x109e3d6e, 0x811555f1, 0x10980287, 0x81148544, + 0x1091c796, 0x8113b4e5, + 0x108b8c9b, 0x8112e4d4, 0x10855195, 0x81121512, 0x107f1686, 0x8111459e, + 0x1078db6c, 0x81107678, + 0x1072a048, 0x810fa7a0, 0x106c651a, 0x810ed917, 0x106629e1, 0x810e0adc, + 0x105fee9f, 0x810d3cf0, + 0x1059b352, 0x810c6f52, 0x105377fc, 0x810ba202, 0x104d3c9b, 0x810ad500, + 0x10470130, 0x810a084d, + 0x1040c5bb, 0x81093be8, 0x103a8a3d, 0x81086fd1, 0x10344eb4, 0x8107a409, + 0x102e1321, 0x8106d88f, + 0x1027d784, 0x81060d63, 0x10219bdd, 0x81054286, 0x101b602d, 0x810477f7, + 0x10152472, 0x8103adb6, + 0x100ee8ad, 0x8102e3c4, 0x1008acdf, 0x81021a20, 0x10027107, 0x810150ca, + 0xffc3524, 0x810087c3, + 0xff5f938, 0x80ffbf0a, 0xfefbd42, 0x80fef69f, 0xfe98143, 0x80fe2e83, + 0xfe34539, 0x80fd66b5, + 0xfdd0926, 0x80fc9f35, 0xfd6cd08, 0x80fbd804, 0xfd090e1, 0x80fb1121, + 0xfca54b1, 0x80fa4a8c, + 0xfc41876, 0x80f98446, 0xfbddc32, 0x80f8be4e, 0xfb79fe4, 0x80f7f8a4, + 0xfb1638d, 0x80f73349, + 0xfab272b, 0x80f66e3c, 0xfa4eac0, 0x80f5a97e, 0xf9eae4c, 0x80f4e50e, + 0xf9871ce, 0x80f420ec, + 0xf923546, 0x80f35d19, 0xf8bf8b4, 0x80f29994, 0xf85bc19, 0x80f1d65d, + 0xf7f7f75, 0x80f11375, + 0xf7942c7, 0x80f050db, 0xf73060f, 0x80ef8e90, 0xf6cc94e, 0x80eecc93, + 0xf668c83, 0x80ee0ae4, + 0xf604faf, 0x80ed4984, 0xf5a12d1, 0x80ec8872, 0xf53d5ea, 0x80ebc7ae, + 0xf4d98f9, 0x80eb0739, + 0xf475bff, 0x80ea4712, 0xf411efb, 0x80e9873a, 0xf3ae1ee, 0x80e8c7b0, + 0xf34a4d8, 0x80e80874, + 0xf2e67b8, 0x80e74987, 0xf282a8f, 0x80e68ae8, 0xf21ed5d, 0x80e5cc98, + 0xf1bb021, 0x80e50e96, + 0xf1572dc, 0x80e450e2, 0xf0f358e, 0x80e3937d, 0xf08f836, 0x80e2d666, + 0xf02bad5, 0x80e2199e, + 0xefc7d6b, 0x80e15d24, 0xef63ff7, 0x80e0a0f8, 0xef0027b, 0x80dfe51b, + 0xee9c4f5, 0x80df298c, + 0xee38766, 0x80de6e4c, 0xedd49ce, 0x80ddb35a, 0xed70c2c, 0x80dcf8b7, + 0xed0ce82, 0x80dc3e62, + 0xeca90ce, 0x80db845b, 0xec45311, 0x80dacaa3, 0xebe154b, 0x80da1139, + 0xeb7d77c, 0x80d9581e, + 0xeb199a4, 0x80d89f51, 0xeab5bc3, 0x80d7e6d3, 0xea51dd8, 0x80d72ea3, + 0xe9edfe5, 0x80d676c1, + 0xe98a1e9, 0x80d5bf2e, 0xe9263e3, 0x80d507e9, 0xe8c25d5, 0x80d450f3, + 0xe85e7be, 0x80d39a4b, + 0xe7fa99e, 0x80d2e3f2, 0xe796b74, 0x80d22de7, 0xe732d42, 0x80d1782a, + 0xe6cef07, 0x80d0c2bc, + 0xe66b0c3, 0x80d00d9d, 0xe607277, 0x80cf58cc, 0xe5a3421, 0x80cea449, + 0xe53f5c2, 0x80cdf015, + 0xe4db75b, 0x80cd3c2f, 0xe4778eb, 0x80cc8898, 0xe413a72, 0x80cbd54f, + 0xe3afbf0, 0x80cb2255, + 0xe34bd66, 0x80ca6fa9, 0xe2e7ed2, 0x80c9bd4c, 0xe284036, 0x80c90b3d, + 0xe220191, 0x80c8597c, + 0xe1bc2e4, 0x80c7a80a, 0xe15842e, 0x80c6f6e7, 0xe0f456f, 0x80c64612, + 0xe0906a7, 0x80c5958b, + 0xe02c7d7, 0x80c4e553, 0xdfc88fe, 0x80c4356a, 0xdf64a1c, 0x80c385cf, + 0xdf00b32, 0x80c2d682, + 0xde9cc40, 0x80c22784, 0xde38d44, 0x80c178d4, 0xddd4e40, 0x80c0ca73, + 0xdd70f34, 0x80c01c60, + 0xdd0d01f, 0x80bf6e9c, 0xdca9102, 0x80bec127, 0xdc451dc, 0x80be13ff, + 0xdbe12ad, 0x80bd6727, + 0xdb7d376, 0x80bcba9d, 0xdb19437, 0x80bc0e61, 0xdab54ef, 0x80bb6274, + 0xda5159f, 0x80bab6d5, + 0xd9ed646, 0x80ba0b85, 0xd9896e5, 0x80b96083, 0xd92577b, 0x80b8b5d0, + 0xd8c1809, 0x80b80b6c, + 0xd85d88f, 0x80b76156, 0xd7f990c, 0x80b6b78e, 0xd795982, 0x80b60e15, + 0xd7319ee, 0x80b564ea, + 0xd6cda53, 0x80b4bc0e, 0xd669aaf, 0x80b41381, 0xd605b03, 0x80b36b42, + 0xd5a1b4f, 0x80b2c351, + 0xd53db92, 0x80b21baf, 0xd4d9bcd, 0x80b1745c, 0xd475c00, 0x80b0cd57, + 0xd411c2b, 0x80b026a1, + 0xd3adc4e, 0x80af8039, 0xd349c68, 0x80aeda20, 0xd2e5c7b, 0x80ae3455, + 0xd281c85, 0x80ad8ed9, + 0xd21dc87, 0x80ace9ab, 0xd1b9c81, 0x80ac44cc, 0xd155c73, 0x80aba03b, + 0xd0f1c5d, 0x80aafbf9, + 0xd08dc3f, 0x80aa5806, 0xd029c18, 0x80a9b461, 0xcfc5bea, 0x80a9110b, + 0xcf61bb4, 0x80a86e03, + 0xcefdb76, 0x80a7cb49, 0xce99b2f, 0x80a728df, 0xce35ae1, 0x80a686c2, + 0xcdd1a8b, 0x80a5e4f5, + 0xcd6da2d, 0x80a54376, 0xcd099c7, 0x80a4a245, 0xcca5959, 0x80a40163, + 0xcc418e3, 0x80a360d0, + 0xcbdd865, 0x80a2c08b, 0xcb797e0, 0x80a22095, 0xcb15752, 0x80a180ed, + 0xcab16bd, 0x80a0e194, + 0xca4d620, 0x80a04289, 0xc9e957b, 0x809fa3cd, 0xc9854cf, 0x809f0560, + 0xc92141a, 0x809e6741, + 0xc8bd35e, 0x809dc971, 0xc85929a, 0x809d2bef, 0xc7f51cf, 0x809c8ebc, + 0xc7910fb, 0x809bf1d7, + 0xc72d020, 0x809b5541, 0xc6c8f3e, 0x809ab8fa, 0xc664e53, 0x809a1d01, + 0xc600d61, 0x80998157, + 0xc59cc68, 0x8098e5fb, 0xc538b66, 0x80984aee, 0xc4d4a5d, 0x8097b030, + 0xc47094d, 0x809715c0, + 0xc40c835, 0x80967b9f, 0xc3a8715, 0x8095e1cc, 0xc3445ee, 0x80954848, + 0xc2e04c0, 0x8094af13, + 0xc27c389, 0x8094162c, 0xc21824c, 0x80937d93, 0xc1b4107, 0x8092e54a, + 0xc14ffba, 0x80924d4f, + 0xc0ebe66, 0x8091b5a2, 0xc087d0a, 0x80911e44, 0xc023ba7, 0x80908735, + 0xbfbfa3d, 0x808ff074, + 0xbf5b8cb, 0x808f5a02, 0xbef7752, 0x808ec3df, 0xbe935d2, 0x808e2e0a, + 0xbe2f44a, 0x808d9884, + 0xbdcb2bb, 0x808d034c, 0xbd67124, 0x808c6e63, 0xbd02f87, 0x808bd9c9, + 0xbc9ede2, 0x808b457d, + 0xbc3ac35, 0x808ab180, 0xbbd6a82, 0x808a1dd2, 0xbb728c7, 0x80898a72, + 0xbb0e705, 0x8088f761, + 0xbaaa53b, 0x8088649e, 0xba4636b, 0x8087d22a, 0xb9e2193, 0x80874005, + 0xb97dfb5, 0x8086ae2e, + 0xb919dcf, 0x80861ca6, 0xb8b5be1, 0x80858b6c, 0xb8519ed, 0x8084fa82, + 0xb7ed7f2, 0x808469e5, + 0xb7895f0, 0x8083d998, 0xb7253e6, 0x80834999, 0xb6c11d5, 0x8082b9e9, + 0xb65cfbe, 0x80822a87, + 0xb5f8d9f, 0x80819b74, 0xb594b7a, 0x80810cb0, 0xb53094d, 0x80807e3a, + 0xb4cc719, 0x807ff013, + 0xb4684df, 0x807f623b, 0xb40429d, 0x807ed4b1, 0xb3a0055, 0x807e4776, + 0xb33be05, 0x807dba89, + 0xb2d7baf, 0x807d2dec, 0xb273952, 0x807ca19c, 0xb20f6ee, 0x807c159c, + 0xb1ab483, 0x807b89ea, + 0xb147211, 0x807afe87, 0xb0e2f98, 0x807a7373, 0xb07ed19, 0x8079e8ad, + 0xb01aa92, 0x80795e36, + 0xafb6805, 0x8078d40d, 0xaf52571, 0x80784a33, 0xaeee2d7, 0x8077c0a8, + 0xae8a036, 0x8077376c, + 0xae25d8d, 0x8076ae7e, 0xadc1adf, 0x807625df, 0xad5d829, 0x80759d8e, + 0xacf956d, 0x8075158c, + 0xac952aa, 0x80748dd9, 0xac30fe1, 0x80740675, 0xabccd11, 0x80737f5f, + 0xab68a3a, 0x8072f898, + 0xab0475c, 0x8072721f, 0xaaa0478, 0x8071ebf6, 0xaa3c18e, 0x8071661a, + 0xa9d7e9d, 0x8070e08e, + 0xa973ba5, 0x80705b50, 0xa90f8a7, 0x806fd661, 0xa8ab5a2, 0x806f51c1, + 0xa847297, 0x806ecd6f, + 0xa7e2f85, 0x806e496c, 0xa77ec6d, 0x806dc5b8, 0xa71a94f, 0x806d4253, + 0xa6b662a, 0x806cbf3c, + 0xa6522fe, 0x806c3c74, 0xa5edfcc, 0x806bb9fa, 0xa589c94, 0x806b37cf, + 0xa525955, 0x806ab5f3, + 0xa4c1610, 0x806a3466, 0xa45d2c5, 0x8069b327, 0xa3f8f73, 0x80693237, + 0xa394c1b, 0x8068b196, + 0xa3308bd, 0x80683143, 0xa2cc558, 0x8067b13f, 0xa2681ed, 0x8067318a, + 0xa203e7c, 0x8066b224, + 0xa19fb04, 0x8066330c, 0xa13b787, 0x8065b443, 0xa0d7403, 0x806535c9, + 0xa073079, 0x8064b79d, + 0xa00ece8, 0x806439c0, 0x9faa952, 0x8063bc32, 0x9f465b5, 0x80633ef3, + 0x9ee2213, 0x8062c202, + 0x9e7de6a, 0x80624560, 0x9e19abb, 0x8061c90c, 0x9db5706, 0x80614d08, + 0x9d5134b, 0x8060d152, + 0x9cecf89, 0x806055eb, 0x9c88bc2, 0x805fdad2, 0x9c247f5, 0x805f6009, + 0x9bc0421, 0x805ee58e, + 0x9b5c048, 0x805e6b62, 0x9af7c69, 0x805df184, 0x9a93884, 0x805d77f5, + 0x9a2f498, 0x805cfeb5, + 0x99cb0a7, 0x805c85c4, 0x9966cb0, 0x805c0d21, 0x99028b3, 0x805b94ce, + 0x989e4b0, 0x805b1cc8, + 0x983a0a7, 0x805aa512, 0x97d5c99, 0x805a2daa, 0x9771884, 0x8059b692, + 0x970d46a, 0x80593fc7, + 0x96a9049, 0x8058c94c, 0x9644c23, 0x8058531f, 0x95e07f8, 0x8057dd41, + 0x957c3c6, 0x805767b2, + 0x9517f8f, 0x8056f272, 0x94b3b52, 0x80567d80, 0x944f70f, 0x805608dd, + 0x93eb2c6, 0x80559489, + 0x9386e78, 0x80552084, 0x9322a24, 0x8054accd, 0x92be5ca, 0x80543965, + 0x925a16b, 0x8053c64c, + 0x91f5d06, 0x80535381, 0x919189c, 0x8052e106, 0x912d42c, 0x80526ed9, + 0x90c8fb6, 0x8051fcfb, + 0x9064b3a, 0x80518b6b, 0x90006ba, 0x80511a2b, 0x8f9c233, 0x8050a939, + 0x8f37da7, 0x80503896, + 0x8ed3916, 0x804fc841, 0x8e6f47f, 0x804f583c, 0x8e0afe2, 0x804ee885, + 0x8da6b40, 0x804e791d, + 0x8d42699, 0x804e0a04, 0x8cde1ec, 0x804d9b39, 0x8c79d3a, 0x804d2cbd, + 0x8c15882, 0x804cbe90, + 0x8bb13c5, 0x804c50b2, 0x8b4cf02, 0x804be323, 0x8ae8a3a, 0x804b75e2, + 0x8a8456d, 0x804b08f0, + 0x8a2009a, 0x804a9c4d, 0x89bbbc3, 0x804a2ff9, 0x89576e5, 0x8049c3f3, + 0x88f3203, 0x8049583d, + 0x888ed1b, 0x8048ecd5, 0x882a82e, 0x804881bb, 0x87c633c, 0x804816f1, + 0x8761e44, 0x8047ac75, + 0x86fd947, 0x80474248, 0x8699445, 0x8046d86a, 0x8634f3e, 0x80466edb, + 0x85d0a32, 0x8046059b, + 0x856c520, 0x80459ca9, 0x850800a, 0x80453406, 0x84a3aee, 0x8044cbb2, + 0x843f5cd, 0x804463ad, + 0x83db0a7, 0x8043fbf6, 0x8376b7c, 0x8043948e, 0x831264c, 0x80432d75, + 0x82ae117, 0x8042c6ab, + 0x8249bdd, 0x80426030, 0x81e569d, 0x8041fa03, 0x8181159, 0x80419425, + 0x811cc10, 0x80412e96, + 0x80b86c2, 0x8040c956, 0x805416e, 0x80406465, 0x7fefc16, 0x803fffc2, + 0x7f8b6b9, 0x803f9b6f, + 0x7f27157, 0x803f376a, 0x7ec2bf0, 0x803ed3b3, 0x7e5e685, 0x803e704c, + 0x7dfa114, 0x803e0d34, + 0x7d95b9e, 0x803daa6a, 0x7d31624, 0x803d47ef, 0x7ccd0a5, 0x803ce5c3, + 0x7c68b21, 0x803c83e5, + 0x7c04598, 0x803c2257, 0x7ba000b, 0x803bc117, 0x7b3ba78, 0x803b6026, + 0x7ad74e1, 0x803aff84, + 0x7a72f45, 0x803a9f31, 0x7a0e9a5, 0x803a3f2d, 0x79aa400, 0x8039df77, + 0x7945e56, 0x80398010, + 0x78e18a7, 0x803920f8, 0x787d2f4, 0x8038c22f, 0x7818d3c, 0x803863b5, + 0x77b4780, 0x80380589, + 0x77501be, 0x8037a7ac, 0x76ebbf9, 0x80374a1f, 0x768762e, 0x8036ece0, + 0x762305f, 0x80368fef, + 0x75bea8c, 0x8036334e, 0x755a4b4, 0x8035d6fb, 0x74f5ed7, 0x80357af8, + 0x74918f6, 0x80351f43, + 0x742d311, 0x8034c3dd, 0x73c8d27, 0x803468c5, 0x7364738, 0x80340dfd, + 0x7300145, 0x8033b383, + 0x729bb4e, 0x80335959, 0x7237552, 0x8032ff7d, 0x71d2f52, 0x8032a5ef, + 0x716e94e, 0x80324cb1, + 0x710a345, 0x8031f3c2, 0x70a5d37, 0x80319b21, 0x7041726, 0x803142cf, + 0x6fdd110, 0x8030eacd, + 0x6f78af6, 0x80309318, 0x6f144d7, 0x80303bb3, 0x6eafeb4, 0x802fe49d, + 0x6e4b88d, 0x802f8dd5, + 0x6de7262, 0x802f375d, 0x6d82c32, 0x802ee133, 0x6d1e5fe, 0x802e8b58, + 0x6cb9fc6, 0x802e35cb, + 0x6c5598a, 0x802de08e, 0x6bf1349, 0x802d8ba0, 0x6b8cd05, 0x802d3700, + 0x6b286bc, 0x802ce2af, + 0x6ac406f, 0x802c8ead, 0x6a5fa1e, 0x802c3afa, 0x69fb3c9, 0x802be796, + 0x6996d70, 0x802b9480, + 0x6932713, 0x802b41ba, 0x68ce0b2, 0x802aef42, 0x6869a4c, 0x802a9d19, + 0x68053e3, 0x802a4b3f, + 0x67a0d76, 0x8029f9b4, 0x673c704, 0x8029a878, 0x66d808f, 0x8029578b, + 0x6673a16, 0x802906ec, + 0x660f398, 0x8028b69c, 0x65aad17, 0x8028669b, 0x6546692, 0x802816e9, + 0x64e2009, 0x8027c786, + 0x647d97c, 0x80277872, 0x64192eb, 0x802729ad, 0x63b4c57, 0x8026db36, + 0x63505be, 0x80268d0e, + 0x62ebf22, 0x80263f36, 0x6287882, 0x8025f1ac, 0x62231de, 0x8025a471, + 0x61beb36, 0x80255784, + 0x615a48b, 0x80250ae7, 0x60f5ddc, 0x8024be99, 0x6091729, 0x80247299, + 0x602d072, 0x802426e8, + 0x5fc89b8, 0x8023db86, 0x5f642fa, 0x80239073, 0x5effc38, 0x802345af, + 0x5e9b572, 0x8022fb3a, + 0x5e36ea9, 0x8022b114, 0x5dd27dd, 0x8022673c, 0x5d6e10c, 0x80221db3, + 0x5d09a38, 0x8021d47a, + 0x5ca5361, 0x80218b8f, 0x5c40c86, 0x802142f3, 0x5bdc5a7, 0x8020faa6, + 0x5b77ec5, 0x8020b2a7, + 0x5b137df, 0x80206af8, 0x5aaf0f6, 0x80202397, 0x5a4aa09, 0x801fdc86, + 0x59e6319, 0x801f95c3, + 0x5981c26, 0x801f4f4f, 0x591d52f, 0x801f092a, 0x58b8e34, 0x801ec354, + 0x5854736, 0x801e7dcd, + 0x57f0035, 0x801e3895, 0x578b930, 0x801df3ab, 0x5727228, 0x801daf11, + 0x56c2b1c, 0x801d6ac5, + 0x565e40d, 0x801d26c8, 0x55f9cfb, 0x801ce31a, 0x55955e6, 0x801c9fbb, + 0x5530ecd, 0x801c5cab, + 0x54cc7b1, 0x801c19ea, 0x5468092, 0x801bd777, 0x540396f, 0x801b9554, + 0x539f249, 0x801b537f, + 0x533ab20, 0x801b11fa, 0x52d63f4, 0x801ad0c3, 0x5271cc4, 0x801a8fdb, + 0x520d592, 0x801a4f42, + 0x51a8e5c, 0x801a0ef8, 0x5144723, 0x8019cefd, 0x50dffe7, 0x80198f50, + 0x507b8a8, 0x80194ff3, + 0x5017165, 0x801910e4, 0x4fb2a20, 0x8018d225, 0x4f4e2d8, 0x801893b4, + 0x4ee9b8c, 0x80185592, + 0x4e8543e, 0x801817bf, 0x4e20cec, 0x8017da3b, 0x4dbc597, 0x80179d06, + 0x4d57e40, 0x80176020, + 0x4cf36e5, 0x80172388, 0x4c8ef88, 0x8016e740, 0x4c2a827, 0x8016ab46, + 0x4bc60c4, 0x80166f9c, + 0x4b6195d, 0x80163440, 0x4afd1f4, 0x8015f933, 0x4a98a88, 0x8015be75, + 0x4a34319, 0x80158406, + 0x49cfba7, 0x801549e6, 0x496b432, 0x80151015, 0x4906cbb, 0x8014d693, + 0x48a2540, 0x80149d5f, + 0x483ddc3, 0x8014647b, 0x47d9643, 0x80142be5, 0x4774ec1, 0x8013f39e, + 0x471073b, 0x8013bba7, + 0x46abfb3, 0x801383fe, 0x4647828, 0x80134ca4, 0x45e309a, 0x80131599, + 0x457e90a, 0x8012dedd, + 0x451a177, 0x8012a86f, 0x44b59e1, 0x80127251, 0x4451249, 0x80123c82, + 0x43ecaae, 0x80120701, + 0x4388310, 0x8011d1d0, 0x4323b70, 0x80119ced, 0x42bf3cd, 0x80116859, + 0x425ac28, 0x80113414, + 0x41f6480, 0x8011001f, 0x4191cd5, 0x8010cc78, 0x412d528, 0x8010991f, + 0x40c8d79, 0x80106616, + 0x40645c7, 0x8010335c, 0x3fffe12, 0x801000f1, 0x3f9b65b, 0x800fced4, + 0x3f36ea2, 0x800f9d07, + 0x3ed26e6, 0x800f6b88, 0x3e6df28, 0x800f3a59, 0x3e09767, 0x800f0978, + 0x3da4fa4, 0x800ed8e6, + 0x3d407df, 0x800ea8a3, 0x3cdc017, 0x800e78af, 0x3c7784d, 0x800e490a, + 0x3c13080, 0x800e19b4, + 0x3bae8b2, 0x800deaad, 0x3b4a0e0, 0x800dbbf5, 0x3ae590d, 0x800d8d8b, + 0x3a81137, 0x800d5f71, + 0x3a1c960, 0x800d31a5, 0x39b8185, 0x800d0429, 0x39539a9, 0x800cd6fb, + 0x38ef1ca, 0x800caa1c, + 0x388a9ea, 0x800c7d8c, 0x3826207, 0x800c514c, 0x37c1a22, 0x800c255a, + 0x375d23a, 0x800bf9b7, + 0x36f8a51, 0x800bce63, 0x3694265, 0x800ba35d, 0x362fa78, 0x800b78a7, + 0x35cb288, 0x800b4e40, + 0x3566a96, 0x800b2427, 0x35022a2, 0x800afa5e, 0x349daac, 0x800ad0e3, + 0x34392b4, 0x800aa7b8, + 0x33d4abb, 0x800a7edb, 0x33702bf, 0x800a564e, 0x330bac1, 0x800a2e0f, + 0x32a72c1, 0x800a061f, + 0x3242abf, 0x8009de7e, 0x31de2bb, 0x8009b72c, 0x3179ab5, 0x80099029, + 0x31152ae, 0x80096975, + 0x30b0aa4, 0x80094310, 0x304c299, 0x80091cf9, 0x2fe7a8c, 0x8008f732, + 0x2f8327d, 0x8008d1ba, + 0x2f1ea6c, 0x8008ac90, 0x2eba259, 0x800887b6, 0x2e55a44, 0x8008632a, + 0x2df122e, 0x80083eed, + 0x2d8ca16, 0x80081b00, 0x2d281fc, 0x8007f761, 0x2cc39e1, 0x8007d411, + 0x2c5f1c3, 0x8007b110, + 0x2bfa9a4, 0x80078e5e, 0x2b96184, 0x80076bfb, 0x2b31961, 0x800749e7, + 0x2acd13d, 0x80072822, + 0x2a68917, 0x800706ac, 0x2a040f0, 0x8006e585, 0x299f8c7, 0x8006c4ac, + 0x293b09c, 0x8006a423, + 0x28d6870, 0x800683e8, 0x2872043, 0x800663fd, 0x280d813, 0x80064460, + 0x27a8fe2, 0x80062513, + 0x27447b0, 0x80060614, 0x26dff7c, 0x8005e764, 0x267b747, 0x8005c904, + 0x2616f10, 0x8005aaf2, + 0x25b26d7, 0x80058d2f, 0x254de9e, 0x80056fbb, 0x24e9662, 0x80055296, + 0x2484e26, 0x800535c0, + 0x24205e8, 0x80051939, 0x23bbda8, 0x8004fd00, 0x2357567, 0x8004e117, + 0x22f2d25, 0x8004c57d, + 0x228e4e2, 0x8004aa32, 0x2229c9d, 0x80048f35, 0x21c5457, 0x80047488, + 0x2160c0f, 0x80045a29, + 0x20fc3c6, 0x8004401a, 0x2097b7c, 0x80042659, 0x2033331, 0x80040ce7, + 0x1fceae4, 0x8003f3c5, + 0x1f6a297, 0x8003daf1, 0x1f05a48, 0x8003c26c, 0x1ea11f7, 0x8003aa36, + 0x1e3c9a6, 0x8003924f, + 0x1dd8154, 0x80037ab7, 0x1d73900, 0x8003636e, 0x1d0f0ab, 0x80034c74, + 0x1caa855, 0x800335c9, + 0x1c45ffe, 0x80031f6d, 0x1be17a6, 0x80030960, 0x1b7cf4d, 0x8002f3a1, + 0x1b186f3, 0x8002de32, + 0x1ab3e97, 0x8002c912, 0x1a4f63b, 0x8002b440, 0x19eaddd, 0x80029fbe, + 0x198657f, 0x80028b8a, + 0x1921d20, 0x800277a6, 0x18bd4bf, 0x80026410, 0x1858c5e, 0x800250c9, + 0x17f43fc, 0x80023dd2, + 0x178fb99, 0x80022b29, 0x172b335, 0x800218cf, 0x16c6ad0, 0x800206c4, + 0x166226a, 0x8001f508, + 0x15fda03, 0x8001e39b, 0x159919c, 0x8001d27d, 0x1534934, 0x8001c1ae, + 0x14d00ca, 0x8001b12e, + 0x146b860, 0x8001a0fd, 0x1406ff6, 0x8001911b, 0x13a278a, 0x80018187, + 0x133df1e, 0x80017243, + 0x12d96b1, 0x8001634e, 0x1274e43, 0x800154a7, 0x12105d5, 0x80014650, + 0x11abd66, 0x80013847, + 0x11474f6, 0x80012a8e, 0x10e2c85, 0x80011d23, 0x107e414, 0x80011008, + 0x1019ba2, 0x8001033b, + 0xfb5330, 0x8000f6bd, 0xf50abd, 0x8000ea8e, 0xeec249, 0x8000deaf, 0xe879d5, + 0x8000d31e, + 0xe23160, 0x8000c7dc, 0xdbe8eb, 0x8000bce9, 0xd5a075, 0x8000b245, 0xcf57ff, + 0x8000a7f0, + 0xc90f88, 0x80009dea, 0xc2c711, 0x80009433, 0xbc7e99, 0x80008aca, 0xb63621, + 0x800081b1, + 0xafeda8, 0x800078e7, 0xa9a52f, 0x8000706c, 0xa35cb5, 0x8000683f, 0x9d143b, + 0x80006062, + 0x96cbc1, 0x800058d4, 0x908346, 0x80005194, 0x8a3acb, 0x80004aa4, 0x83f250, + 0x80004402, + 0x7da9d4, 0x80003daf, 0x776159, 0x800037ac, 0x7118dc, 0x800031f7, 0x6ad060, + 0x80002c91, + 0x6487e3, 0x8000277a, 0x5e3f66, 0x800022b3, 0x57f6e9, 0x80001e3a, 0x51ae6b, + 0x80001a10, + 0x4b65ee, 0x80001635, 0x451d70, 0x800012a9, 0x3ed4f2, 0x80000f6c, 0x388c74, + 0x80000c7e, + 0x3243f5, 0x800009df, 0x2bfb77, 0x8000078e, 0x25b2f8, 0x8000058d, 0x1f6a7a, + 0x800003db, + 0x1921fb, 0x80000278, 0x12d97c, 0x80000163, 0xc90fe, 0x8000009e, 0x6487f, + 0x80000027, + +}; + +/** +* \par +* cosFactor tables are generated using the formula :
cos_factors[n] = 2 * cos((2n+1)*pi/(4*N))
+* \par +* C command to generate the table +*
    
+* for(i = 0; i< N; i++)    
+* {    
+*   cos_factors[i]= 2 * cos((2*i+1)*c/2);    
+* } 
+* \par +* where N is the number of factors to generate and c is pi/(2*N) +* \par +* Then converted to q31 format by multiplying with 2^31 and saturated if required. +*/ + + +static const q31_t cos_factorsQ31_128[128] = { + 0x7fff6216, 0x7ffa72d1, 0x7ff09478, 0x7fe1c76b, 0x7fce0c3e, 0x7fb563b3, + 0x7f97cebd, 0x7f754e80, + 0x7f4de451, 0x7f2191b4, 0x7ef05860, 0x7eba3a39, 0x7e7f3957, 0x7e3f57ff, + 0x7dfa98a8, 0x7db0fdf8, + 0x7d628ac6, 0x7d0f4218, 0x7cb72724, 0x7c5a3d50, 0x7bf88830, 0x7b920b89, + 0x7b26cb4f, 0x7ab6cba4, + 0x7a4210d8, 0x79c89f6e, 0x794a7c12, 0x78c7aba2, 0x78403329, 0x77b417df, + 0x77235f2d, 0x768e0ea6, + 0x75f42c0b, 0x7555bd4c, 0x74b2c884, 0x740b53fb, 0x735f6626, 0x72af05a7, + 0x71fa3949, 0x71410805, + 0x708378ff, 0x6fc19385, 0x6efb5f12, 0x6e30e34a, 0x6d6227fa, 0x6c8f351c, + 0x6bb812d1, 0x6adcc964, + 0x69fd614a, 0x6919e320, 0x683257ab, 0x6746c7d8, 0x66573cbb, 0x6563bf92, + 0x646c59bf, 0x637114cc, + 0x6271fa69, 0x616f146c, 0x60686ccf, 0x5f5e0db3, 0x5e50015d, 0x5d3e5237, + 0x5c290acc, 0x5b1035cf, + 0x59f3de12, 0x58d40e8c, 0x57b0d256, 0x568a34a9, 0x556040e2, 0x5433027d, + 0x53028518, 0x51ced46e, + 0x5097fc5e, 0x4f5e08e3, 0x4e210617, 0x4ce10034, 0x4b9e0390, 0x4a581c9e, + 0x490f57ee, 0x47c3c22f, + 0x46756828, 0x452456bd, 0x43d09aed, 0x427a41d0, 0x4121589b, 0x3fc5ec98, + 0x3e680b2c, 0x3d07c1d6, + 0x3ba51e29, 0x3a402dd2, 0x38d8fe93, 0x376f9e46, 0x36041ad9, 0x34968250, + 0x3326e2c3, 0x31b54a5e, + 0x3041c761, 0x2ecc681e, 0x2d553afc, 0x2bdc4e6f, 0x2a61b101, 0x28e5714b, + 0x27679df4, 0x25e845b6, + 0x24677758, 0x22e541af, 0x2161b3a0, 0x1fdcdc1b, 0x1e56ca1e, 0x1ccf8cb3, + 0x1b4732ef, 0x19bdcbf3, + 0x183366e9, 0x16a81305, 0x151bdf86, 0x138edbb1, 0x120116d5, 0x1072a048, + 0xee38766, 0xd53db92, + 0xbc3ac35, 0xa3308bd, 0x8a2009a, 0x710a345, 0x57f0035, 0x3ed26e6, 0x25b26d7, + 0xc90f88, +}; + +static const q31_t cos_factorsQ31_512[512] = { + 0x7ffff621, 0x7fffa72c, 0x7fff0943, 0x7ffe1c65, 0x7ffce093, 0x7ffb55ce, + 0x7ff97c18, 0x7ff75370, + 0x7ff4dbd9, 0x7ff21553, 0x7feeffe1, 0x7feb9b85, 0x7fe7e841, 0x7fe3e616, + 0x7fdf9508, 0x7fdaf519, + 0x7fd6064c, 0x7fd0c8a3, 0x7fcb3c23, 0x7fc560cf, 0x7fbf36aa, 0x7fb8bdb8, + 0x7fb1f5fc, 0x7faadf7c, + 0x7fa37a3c, 0x7f9bc640, 0x7f93c38c, 0x7f8b7227, 0x7f82d214, 0x7f79e35a, + 0x7f70a5fe, 0x7f671a05, + 0x7f5d3f75, 0x7f531655, 0x7f489eaa, 0x7f3dd87c, 0x7f32c3d1, 0x7f2760af, + 0x7f1baf1e, 0x7f0faf25, + 0x7f0360cb, 0x7ef6c418, 0x7ee9d914, 0x7edc9fc6, 0x7ecf1837, 0x7ec14270, + 0x7eb31e78, 0x7ea4ac58, + 0x7e95ec1a, 0x7e86ddc6, 0x7e778166, 0x7e67d703, 0x7e57dea7, 0x7e47985b, + 0x7e37042a, 0x7e26221f, + 0x7e14f242, 0x7e0374a0, 0x7df1a942, 0x7ddf9034, 0x7dcd2981, 0x7dba7534, + 0x7da77359, 0x7d9423fc, + 0x7d808728, 0x7d6c9ce9, 0x7d58654d, 0x7d43e05e, 0x7d2f0e2b, 0x7d19eebf, + 0x7d048228, 0x7ceec873, + 0x7cd8c1ae, 0x7cc26de5, 0x7cabcd28, 0x7c94df83, 0x7c7da505, 0x7c661dbc, + 0x7c4e49b7, 0x7c362904, + 0x7c1dbbb3, 0x7c0501d2, 0x7bebfb70, 0x7bd2a89e, 0x7bb9096b, 0x7b9f1de6, + 0x7b84e61f, 0x7b6a6227, + 0x7b4f920e, 0x7b3475e5, 0x7b190dbc, 0x7afd59a4, 0x7ae159ae, 0x7ac50dec, + 0x7aa8766f, 0x7a8b9348, + 0x7a6e648a, 0x7a50ea47, 0x7a332490, 0x7a151378, 0x79f6b711, 0x79d80f6f, + 0x79b91ca4, 0x7999dec4, + 0x797a55e0, 0x795a820e, 0x793a6361, 0x7919f9ec, 0x78f945c3, 0x78d846fb, + 0x78b6fda8, 0x789569df, + 0x78738bb3, 0x7851633b, 0x782ef08b, 0x780c33b8, 0x77e92cd9, 0x77c5dc01, + 0x77a24148, 0x777e5cc3, + 0x775a2e89, 0x7735b6af, 0x7710f54c, 0x76ebea77, 0x76c69647, 0x76a0f8d2, + 0x767b1231, 0x7654e279, + 0x762e69c4, 0x7607a828, 0x75e09dbd, 0x75b94a9c, 0x7591aedd, 0x7569ca99, + 0x75419de7, 0x751928e0, + 0x74f06b9e, 0x74c7663a, 0x749e18cd, 0x74748371, 0x744aa63f, 0x74208150, + 0x73f614c0, 0x73cb60a8, + 0x73a06522, 0x73752249, 0x73499838, 0x731dc70a, 0x72f1aed9, 0x72c54fc1, + 0x7298a9dd, 0x726bbd48, + 0x723e8a20, 0x7211107e, 0x71e35080, 0x71b54a41, 0x7186fdde, 0x71586b74, + 0x7129931f, 0x70fa74fc, + 0x70cb1128, 0x709b67c0, 0x706b78e3, 0x703b44ad, 0x700acb3c, 0x6fda0cae, + 0x6fa90921, 0x6f77c0b3, + 0x6f463383, 0x6f1461b0, 0x6ee24b57, 0x6eaff099, 0x6e7d5193, 0x6e4a6e66, + 0x6e174730, 0x6de3dc11, + 0x6db02d29, 0x6d7c3a98, 0x6d48047e, 0x6d138afb, 0x6cdece2f, 0x6ca9ce3b, + 0x6c748b3f, 0x6c3f055d, + 0x6c093cb6, 0x6bd3316a, 0x6b9ce39b, 0x6b66536b, 0x6b2f80fb, 0x6af86c6c, + 0x6ac115e2, 0x6a897d7d, + 0x6a51a361, 0x6a1987b0, 0x69e12a8c, 0x69a88c19, 0x696fac78, 0x69368bce, + 0x68fd2a3d, 0x68c387e9, + 0x6889a4f6, 0x684f8186, 0x68151dbe, 0x67da79c3, 0x679f95b7, 0x676471c0, + 0x67290e02, 0x66ed6aa1, + 0x66b187c3, 0x6675658c, 0x66390422, 0x65fc63a9, 0x65bf8447, 0x65826622, + 0x6545095f, 0x65076e25, + 0x64c99498, 0x648b7ce0, 0x644d2722, 0x640e9386, 0x63cfc231, 0x6390b34a, + 0x635166f9, 0x6311dd64, + 0x62d216b3, 0x6292130c, 0x6251d298, 0x6211557e, 0x61d09be5, 0x618fa5f7, + 0x614e73da, 0x610d05b7, + 0x60cb5bb7, 0x60897601, 0x604754bf, 0x6004f819, 0x5fc26038, 0x5f7f8d46, + 0x5f3c7f6b, 0x5ef936d1, + 0x5eb5b3a2, 0x5e71f606, 0x5e2dfe29, 0x5de9cc33, 0x5da5604f, 0x5d60baa7, + 0x5d1bdb65, 0x5cd6c2b5, + 0x5c9170bf, 0x5c4be5b0, 0x5c0621b2, 0x5bc024f0, 0x5b79ef96, 0x5b3381ce, + 0x5aecdbc5, 0x5aa5fda5, + 0x5a5ee79a, 0x5a1799d1, 0x59d01475, 0x598857b2, 0x594063b5, 0x58f838a9, + 0x58afd6bd, 0x58673e1b, + 0x581e6ef1, 0x57d5696d, 0x578c2dba, 0x5742bc06, 0x56f9147e, 0x56af3750, + 0x566524aa, 0x561adcb9, + 0x55d05faa, 0x5585adad, 0x553ac6ee, 0x54efab9c, 0x54a45be6, 0x5458d7f9, + 0x540d2005, 0x53c13439, + 0x537514c2, 0x5328c1d0, 0x52dc3b92, 0x528f8238, 0x524295f0, 0x51f576ea, + 0x51a82555, 0x515aa162, + 0x510ceb40, 0x50bf031f, 0x5070e92f, 0x50229da1, 0x4fd420a4, 0x4f857269, + 0x4f369320, 0x4ee782fb, + 0x4e984229, 0x4e48d0dd, 0x4df92f46, 0x4da95d96, 0x4d595bfe, 0x4d092ab0, + 0x4cb8c9dd, 0x4c6839b7, + 0x4c177a6e, 0x4bc68c36, 0x4b756f40, 0x4b2423be, 0x4ad2a9e2, 0x4a8101de, + 0x4a2f2be6, 0x49dd282a, + 0x498af6df, 0x49389836, 0x48e60c62, 0x48935397, 0x48406e08, 0x47ed5be6, + 0x479a1d67, 0x4746b2bc, + 0x46f31c1a, 0x469f59b4, 0x464b6bbe, 0x45f7526b, 0x45a30df0, 0x454e9e80, + 0x44fa0450, 0x44a53f93, + 0x4450507e, 0x43fb3746, 0x43a5f41e, 0x4350873c, 0x42faf0d4, 0x42a5311b, + 0x424f4845, 0x41f93689, + 0x41a2fc1a, 0x414c992f, 0x40f60dfb, 0x409f5ab6, 0x40487f94, 0x3ff17cca, + 0x3f9a5290, 0x3f430119, + 0x3eeb889c, 0x3e93e950, 0x3e3c2369, 0x3de4371f, 0x3d8c24a8, 0x3d33ec39, + 0x3cdb8e09, 0x3c830a50, + 0x3c2a6142, 0x3bd19318, 0x3b78a007, 0x3b1f8848, 0x3ac64c0f, 0x3a6ceb96, + 0x3a136712, 0x39b9bebc, + 0x395ff2c9, 0x39060373, 0x38abf0ef, 0x3851bb77, 0x37f76341, 0x379ce885, + 0x37424b7b, 0x36e78c5b, + 0x368cab5c, 0x3631a8b8, 0x35d684a6, 0x357b3f5d, 0x351fd918, 0x34c4520d, + 0x3468aa76, 0x340ce28b, + 0x33b0fa84, 0x3354f29b, 0x32f8cb07, 0x329c8402, 0x32401dc6, 0x31e39889, + 0x3186f487, 0x312a31f8, + 0x30cd5115, 0x30705217, 0x30133539, 0x2fb5fab2, 0x2f58a2be, 0x2efb2d95, + 0x2e9d9b70, 0x2e3fec8b, + 0x2de2211e, 0x2d843964, 0x2d263596, 0x2cc815ee, 0x2c69daa6, 0x2c0b83fa, + 0x2bad1221, 0x2b4e8558, + 0x2aefddd8, 0x2a911bdc, 0x2a323f9e, 0x29d34958, 0x29743946, 0x29150fa1, + 0x28b5cca5, 0x2856708d, + 0x27f6fb92, 0x27976df1, 0x2737c7e3, 0x26d809a5, 0x26783370, 0x26184581, + 0x25b84012, 0x2558235f, + 0x24f7efa2, 0x2497a517, 0x243743fa, 0x23d6cc87, 0x23763ef7, 0x23159b88, + 0x22b4e274, 0x225413f8, + 0x21f3304f, 0x219237b5, 0x21312a65, 0x20d0089c, 0x206ed295, 0x200d888d, + 0x1fac2abf, 0x1f4ab968, + 0x1ee934c3, 0x1e879d0d, 0x1e25f282, 0x1dc4355e, 0x1d6265dd, 0x1d00843d, + 0x1c9e90b8, 0x1c3c8b8c, + 0x1bda74f6, 0x1b784d30, 0x1b161479, 0x1ab3cb0d, 0x1a517128, 0x19ef0707, + 0x198c8ce7, 0x192a0304, + 0x18c7699b, 0x1864c0ea, 0x1802092c, 0x179f429f, 0x173c6d80, 0x16d98a0c, + 0x1676987f, 0x16139918, + 0x15b08c12, 0x154d71aa, 0x14ea4a1f, 0x148715ae, 0x1423d492, 0x13c0870a, + 0x135d2d53, 0x12f9c7aa, + 0x1296564d, 0x1232d979, 0x11cf516a, 0x116bbe60, 0x11082096, 0x10a4784b, + 0x1040c5bb, 0xfdd0926, + 0xf7942c7, 0xf1572dc, 0xeb199a4, 0xe4db75b, 0xde9cc40, 0xd85d88f, 0xd21dc87, + 0xcbdd865, + 0xc59cc68, 0xbf5b8cb, 0xb919dcf, 0xb2d7baf, 0xac952aa, 0xa6522fe, 0xa00ece8, + 0x99cb0a7, + 0x9386e78, 0x8d42699, 0x86fd947, 0x80b86c2, 0x7a72f45, 0x742d311, 0x6de7262, + 0x67a0d76, + 0x615a48b, 0x5b137df, 0x54cc7b1, 0x4e8543e, 0x483ddc3, 0x41f6480, 0x3bae8b2, + 0x3566a96, + 0x2f1ea6c, 0x28d6870, 0x228e4e2, 0x1c45ffe, 0x15fda03, 0xfb5330, 0x96cbc1, + 0x3243f5, +}; + +static const q31_t cos_factorsQ31_2048[2048] = { + 0x7fffff62, 0x7ffffa73, 0x7ffff094, 0x7fffe1c6, 0x7fffce09, 0x7fffb55c, + 0x7fff97c1, 0x7fff7536, + 0x7fff4dbb, 0x7fff2151, 0x7ffeeff8, 0x7ffeb9b0, 0x7ffe7e79, 0x7ffe3e52, + 0x7ffdf93c, 0x7ffdaf37, + 0x7ffd6042, 0x7ffd0c5f, 0x7ffcb38c, 0x7ffc55ca, 0x7ffbf319, 0x7ffb8b78, + 0x7ffb1ee9, 0x7ffaad6a, + 0x7ffa36fc, 0x7ff9bba0, 0x7ff93b54, 0x7ff8b619, 0x7ff82bef, 0x7ff79cd6, + 0x7ff708ce, 0x7ff66fd7, + 0x7ff5d1f1, 0x7ff52f1d, 0x7ff48759, 0x7ff3daa6, 0x7ff32905, 0x7ff27275, + 0x7ff1b6f6, 0x7ff0f688, + 0x7ff0312c, 0x7fef66e1, 0x7fee97a7, 0x7fedc37e, 0x7fecea67, 0x7fec0c62, + 0x7feb296d, 0x7fea418b, + 0x7fe954ba, 0x7fe862fa, 0x7fe76c4c, 0x7fe670b0, 0x7fe57025, 0x7fe46aac, + 0x7fe36045, 0x7fe250ef, + 0x7fe13cac, 0x7fe0237a, 0x7fdf055a, 0x7fdde24d, 0x7fdcba51, 0x7fdb8d67, + 0x7fda5b8f, 0x7fd924ca, + 0x7fd7e917, 0x7fd6a875, 0x7fd562e7, 0x7fd4186a, 0x7fd2c900, 0x7fd174a8, + 0x7fd01b63, 0x7fcebd31, + 0x7fcd5a11, 0x7fcbf203, 0x7fca8508, 0x7fc91320, 0x7fc79c4b, 0x7fc62089, + 0x7fc49fda, 0x7fc31a3d, + 0x7fc18fb4, 0x7fc0003e, 0x7fbe6bdb, 0x7fbcd28b, 0x7fbb344e, 0x7fb99125, + 0x7fb7e90f, 0x7fb63c0d, + 0x7fb48a1e, 0x7fb2d343, 0x7fb1177b, 0x7faf56c7, 0x7fad9127, 0x7fabc69b, + 0x7fa9f723, 0x7fa822bf, + 0x7fa6496e, 0x7fa46b32, 0x7fa2880b, 0x7fa09ff7, 0x7f9eb2f8, 0x7f9cc10d, + 0x7f9aca37, 0x7f98ce76, + 0x7f96cdc9, 0x7f94c831, 0x7f92bdad, 0x7f90ae3f, 0x7f8e99e6, 0x7f8c80a1, + 0x7f8a6272, 0x7f883f58, + 0x7f861753, 0x7f83ea64, 0x7f81b88a, 0x7f7f81c6, 0x7f7d4617, 0x7f7b057e, + 0x7f78bffb, 0x7f76758e, + 0x7f742637, 0x7f71d1f6, 0x7f6f78cb, 0x7f6d1ab6, 0x7f6ab7b8, 0x7f684fd0, + 0x7f65e2ff, 0x7f637144, + 0x7f60faa0, 0x7f5e7f13, 0x7f5bfe9d, 0x7f59793e, 0x7f56eef5, 0x7f545fc5, + 0x7f51cbab, 0x7f4f32a9, + 0x7f4c94be, 0x7f49f1eb, 0x7f474a30, 0x7f449d8c, 0x7f41ec01, 0x7f3f358d, + 0x7f3c7a31, 0x7f39b9ee, + 0x7f36f4c3, 0x7f342ab1, 0x7f315bb7, 0x7f2e87d6, 0x7f2baf0d, 0x7f28d15d, + 0x7f25eec7, 0x7f230749, + 0x7f201ae5, 0x7f1d299a, 0x7f1a3368, 0x7f173850, 0x7f143852, 0x7f11336d, + 0x7f0e29a3, 0x7f0b1af2, + 0x7f08075c, 0x7f04eedf, 0x7f01d17d, 0x7efeaf36, 0x7efb8809, 0x7ef85bf7, + 0x7ef52b00, 0x7ef1f524, + 0x7eeeba62, 0x7eeb7abc, 0x7ee83632, 0x7ee4ecc3, 0x7ee19e6f, 0x7ede4b38, + 0x7edaf31c, 0x7ed7961c, + 0x7ed43438, 0x7ed0cd70, 0x7ecd61c5, 0x7ec9f137, 0x7ec67bc5, 0x7ec3016f, + 0x7ebf8237, 0x7ebbfe1c, + 0x7eb8751e, 0x7eb4e73d, 0x7eb1547a, 0x7eadbcd4, 0x7eaa204c, 0x7ea67ee2, + 0x7ea2d896, 0x7e9f2d68, + 0x7e9b7d58, 0x7e97c867, 0x7e940e94, 0x7e904fe0, 0x7e8c8c4b, 0x7e88c3d5, + 0x7e84f67e, 0x7e812447, + 0x7e7d4d2f, 0x7e797136, 0x7e75905d, 0x7e71aaa4, 0x7e6dc00c, 0x7e69d093, + 0x7e65dc3b, 0x7e61e303, + 0x7e5de4ec, 0x7e59e1f5, 0x7e55da20, 0x7e51cd6c, 0x7e4dbbd9, 0x7e49a567, + 0x7e458a17, 0x7e4169e9, + 0x7e3d44dd, 0x7e391af3, 0x7e34ec2b, 0x7e30b885, 0x7e2c8002, 0x7e2842a2, + 0x7e240064, 0x7e1fb94a, + 0x7e1b6d53, 0x7e171c7f, 0x7e12c6ce, 0x7e0e6c42, 0x7e0a0cd9, 0x7e05a894, + 0x7e013f74, 0x7dfcd178, + 0x7df85ea0, 0x7df3e6ee, 0x7def6a60, 0x7deae8f7, 0x7de662b3, 0x7de1d795, + 0x7ddd479d, 0x7dd8b2ca, + 0x7dd4191d, 0x7dcf7a96, 0x7dcad736, 0x7dc62efc, 0x7dc181e8, 0x7dbccffc, + 0x7db81936, 0x7db35d98, + 0x7dae9d21, 0x7da9d7d2, 0x7da50dab, 0x7da03eab, 0x7d9b6ad3, 0x7d969224, + 0x7d91b49e, 0x7d8cd240, + 0x7d87eb0a, 0x7d82fefe, 0x7d7e0e1c, 0x7d791862, 0x7d741dd2, 0x7d6f1e6c, + 0x7d6a1a31, 0x7d65111f, + 0x7d600338, 0x7d5af07b, 0x7d55d8e9, 0x7d50bc82, 0x7d4b9b46, 0x7d467536, + 0x7d414a51, 0x7d3c1a98, + 0x7d36e60b, 0x7d31acaa, 0x7d2c6e76, 0x7d272b6e, 0x7d21e393, 0x7d1c96e5, + 0x7d174564, 0x7d11ef11, + 0x7d0c93eb, 0x7d0733f3, 0x7d01cf29, 0x7cfc658d, 0x7cf6f720, 0x7cf183e1, + 0x7cec0bd1, 0x7ce68ef0, + 0x7ce10d3f, 0x7cdb86bd, 0x7cd5fb6a, 0x7cd06b48, 0x7ccad656, 0x7cc53c94, + 0x7cbf9e03, 0x7cb9faa2, + 0x7cb45272, 0x7caea574, 0x7ca8f3a7, 0x7ca33d0c, 0x7c9d81a3, 0x7c97c16b, + 0x7c91fc66, 0x7c8c3294, + 0x7c8663f4, 0x7c809088, 0x7c7ab84e, 0x7c74db48, 0x7c6ef976, 0x7c6912d7, + 0x7c63276d, 0x7c5d3737, + 0x7c574236, 0x7c514869, 0x7c4b49d2, 0x7c45466f, 0x7c3f3e42, 0x7c39314b, + 0x7c331f8a, 0x7c2d08ff, + 0x7c26edab, 0x7c20cd8d, 0x7c1aa8a6, 0x7c147ef6, 0x7c0e507e, 0x7c081d3d, + 0x7c01e534, 0x7bfba863, + 0x7bf566cb, 0x7bef206b, 0x7be8d544, 0x7be28556, 0x7bdc30a1, 0x7bd5d726, + 0x7bcf78e5, 0x7bc915dd, + 0x7bc2ae10, 0x7bbc417e, 0x7bb5d026, 0x7baf5a09, 0x7ba8df28, 0x7ba25f82, + 0x7b9bdb18, 0x7b9551ea, + 0x7b8ec3f8, 0x7b883143, 0x7b8199ca, 0x7b7afd8f, 0x7b745c91, 0x7b6db6d0, + 0x7b670c4d, 0x7b605d09, + 0x7b59a902, 0x7b52f03a, 0x7b4c32b1, 0x7b457068, 0x7b3ea95d, 0x7b37dd92, + 0x7b310d07, 0x7b2a37bc, + 0x7b235db2, 0x7b1c7ee8, 0x7b159b5f, 0x7b0eb318, 0x7b07c612, 0x7b00d44d, + 0x7af9ddcb, 0x7af2e28b, + 0x7aebe28d, 0x7ae4ddd2, 0x7addd45b, 0x7ad6c626, 0x7acfb336, 0x7ac89b89, + 0x7ac17f20, 0x7aba5dfc, + 0x7ab3381d, 0x7aac0d82, 0x7aa4de2d, 0x7a9daa1d, 0x7a967153, 0x7a8f33d0, + 0x7a87f192, 0x7a80aa9c, + 0x7a795eec, 0x7a720e84, 0x7a6ab963, 0x7a635f8a, 0x7a5c00f9, 0x7a549db0, + 0x7a4d35b0, 0x7a45c8f9, + 0x7a3e578b, 0x7a36e166, 0x7a2f668c, 0x7a27e6fb, 0x7a2062b5, 0x7a18d9b9, + 0x7a114c09, 0x7a09b9a4, + 0x7a02228a, 0x79fa86bc, 0x79f2e63a, 0x79eb4105, 0x79e3971c, 0x79dbe880, + 0x79d43532, 0x79cc7d31, + 0x79c4c07e, 0x79bcff19, 0x79b53903, 0x79ad6e3c, 0x79a59ec3, 0x799dca9a, + 0x7995f1c1, 0x798e1438, + 0x798631ff, 0x797e4b16, 0x79765f7f, 0x796e6f39, 0x79667a44, 0x795e80a1, + 0x79568250, 0x794e7f52, + 0x794677a6, 0x793e6b4e, 0x79365a49, 0x792e4497, 0x79262a3a, 0x791e0b31, + 0x7915e77c, 0x790dbf1d, + 0x79059212, 0x78fd605d, 0x78f529fe, 0x78eceef6, 0x78e4af44, 0x78dc6ae8, + 0x78d421e4, 0x78cbd437, + 0x78c381e2, 0x78bb2ae5, 0x78b2cf41, 0x78aa6ef5, 0x78a20a03, 0x7899a06a, + 0x7891322a, 0x7888bf45, + 0x788047ba, 0x7877cb89, 0x786f4ab4, 0x7866c53a, 0x785e3b1c, 0x7855ac5a, + 0x784d18f4, 0x784480ea, + 0x783be43e, 0x783342ef, 0x782a9cfe, 0x7821f26b, 0x78194336, 0x78108f60, + 0x7807d6e9, 0x77ff19d1, + 0x77f65819, 0x77ed91c0, 0x77e4c6c9, 0x77dbf732, 0x77d322fc, 0x77ca4a27, + 0x77c16cb4, 0x77b88aa3, + 0x77afa3f5, 0x77a6b8a9, 0x779dc8c0, 0x7794d43b, 0x778bdb19, 0x7782dd5c, + 0x7779db03, 0x7770d40f, + 0x7767c880, 0x775eb857, 0x7755a394, 0x774c8a36, 0x77436c40, 0x773a49b0, + 0x77312287, 0x7727f6c6, + 0x771ec66e, 0x7715917d, 0x770c57f5, 0x770319d6, 0x76f9d721, 0x76f08fd5, + 0x76e743f4, 0x76ddf37c, + 0x76d49e70, 0x76cb44cf, 0x76c1e699, 0x76b883d0, 0x76af1c72, 0x76a5b082, + 0x769c3ffe, 0x7692cae8, + 0x7689513f, 0x767fd304, 0x76765038, 0x766cc8db, 0x76633ced, 0x7659ac6f, + 0x76501760, 0x76467dc2, + 0x763cdf94, 0x76333cd8, 0x7629958c, 0x761fe9b3, 0x7616394c, 0x760c8457, + 0x7602cad5, 0x75f90cc7, + 0x75ef4a2c, 0x75e58305, 0x75dbb753, 0x75d1e715, 0x75c8124d, 0x75be38fa, + 0x75b45b1d, 0x75aa78b6, + 0x75a091c6, 0x7596a64d, 0x758cb64c, 0x7582c1c2, 0x7578c8b0, 0x756ecb18, + 0x7564c8f8, 0x755ac251, + 0x7550b725, 0x7546a772, 0x753c933a, 0x75327a7d, 0x75285d3b, 0x751e3b75, + 0x7514152b, 0x7509ea5d, + 0x74ffbb0d, 0x74f58739, 0x74eb4ee3, 0x74e1120c, 0x74d6d0b2, 0x74cc8ad8, + 0x74c2407d, 0x74b7f1a1, + 0x74ad9e46, 0x74a3466b, 0x7498ea11, 0x748e8938, 0x748423e0, 0x7479ba0b, + 0x746f4bb8, 0x7464d8e8, + 0x745a619b, 0x744fe5d2, 0x7445658d, 0x743ae0cc, 0x74305790, 0x7425c9da, + 0x741b37a9, 0x7410a0fe, + 0x740605d9, 0x73fb663c, 0x73f0c226, 0x73e61997, 0x73db6c91, 0x73d0bb13, + 0x73c6051f, 0x73bb4ab3, + 0x73b08bd1, 0x73a5c87a, 0x739b00ad, 0x7390346b, 0x738563b5, 0x737a8e8a, + 0x736fb4ec, 0x7364d6da, + 0x7359f456, 0x734f0d5f, 0x734421f6, 0x7339321b, 0x732e3dcf, 0x73234512, + 0x731847e5, 0x730d4648, + 0x7302403c, 0x72f735c0, 0x72ec26d6, 0x72e1137d, 0x72d5fbb7, 0x72cadf83, + 0x72bfbee3, 0x72b499d6, + 0x72a9705c, 0x729e4277, 0x72931027, 0x7287d96c, 0x727c9e47, 0x72715eb8, + 0x72661abf, 0x725ad25d, + 0x724f8593, 0x72443460, 0x7238dec5, 0x722d84c4, 0x7222265b, 0x7216c38c, + 0x720b5c57, 0x71fff0bc, + 0x71f480bc, 0x71e90c57, 0x71dd938f, 0x71d21662, 0x71c694d2, 0x71bb0edf, + 0x71af848a, 0x71a3f5d2, + 0x719862b9, 0x718ccb3f, 0x71812f65, 0x71758f29, 0x7169ea8f, 0x715e4194, + 0x7152943b, 0x7146e284, + 0x713b2c6e, 0x712f71fb, 0x7123b32b, 0x7117effe, 0x710c2875, 0x71005c90, + 0x70f48c50, 0x70e8b7b5, + 0x70dcdec0, 0x70d10171, 0x70c51fc8, 0x70b939c7, 0x70ad4f6d, 0x70a160ba, + 0x70956db1, 0x70897650, + 0x707d7a98, 0x70717a8a, 0x70657626, 0x70596d6d, 0x704d6060, 0x70414efd, + 0x70353947, 0x70291f3e, + 0x701d00e1, 0x7010de32, 0x7004b731, 0x6ff88bde, 0x6fec5c3b, 0x6fe02846, + 0x6fd3f001, 0x6fc7b36d, + 0x6fbb728a, 0x6faf2d57, 0x6fa2e3d7, 0x6f969608, 0x6f8a43ed, 0x6f7ded84, + 0x6f7192cf, 0x6f6533ce, + 0x6f58d082, 0x6f4c68eb, 0x6f3ffd09, 0x6f338cde, 0x6f271868, 0x6f1a9faa, + 0x6f0e22a3, 0x6f01a155, + 0x6ef51bbe, 0x6ee891e1, 0x6edc03bc, 0x6ecf7152, 0x6ec2daa2, 0x6eb63fad, + 0x6ea9a073, 0x6e9cfcf5, + 0x6e905534, 0x6e83a92f, 0x6e76f8e7, 0x6e6a445d, 0x6e5d8b91, 0x6e50ce84, + 0x6e440d37, 0x6e3747a9, + 0x6e2a7ddb, 0x6e1dafce, 0x6e10dd82, 0x6e0406f8, 0x6df72c30, 0x6dea4d2b, + 0x6ddd69e9, 0x6dd0826a, + 0x6dc396b0, 0x6db6a6ba, 0x6da9b28a, 0x6d9cba1f, 0x6d8fbd7a, 0x6d82bc9d, + 0x6d75b786, 0x6d68ae37, + 0x6d5ba0b0, 0x6d4e8ef2, 0x6d4178fd, 0x6d345ed1, 0x6d274070, 0x6d1a1dda, + 0x6d0cf70f, 0x6cffcc0f, + 0x6cf29cdc, 0x6ce56975, 0x6cd831dc, 0x6ccaf610, 0x6cbdb613, 0x6cb071e4, + 0x6ca32985, 0x6c95dcf6, + 0x6c888c36, 0x6c7b3748, 0x6c6dde2b, 0x6c6080e0, 0x6c531f67, 0x6c45b9c1, + 0x6c384fef, 0x6c2ae1f0, + 0x6c1d6fc6, 0x6c0ff971, 0x6c027ef1, 0x6bf50047, 0x6be77d74, 0x6bd9f677, + 0x6bcc6b53, 0x6bbedc06, + 0x6bb14892, 0x6ba3b0f7, 0x6b961536, 0x6b88754f, 0x6b7ad142, 0x6b6d2911, + 0x6b5f7cbc, 0x6b51cc42, + 0x6b4417a6, 0x6b365ee7, 0x6b28a206, 0x6b1ae103, 0x6b0d1bdf, 0x6aff529a, + 0x6af18536, 0x6ae3b3b2, + 0x6ad5de0f, 0x6ac8044e, 0x6aba266e, 0x6aac4472, 0x6a9e5e58, 0x6a907423, + 0x6a8285d1, 0x6a749365, + 0x6a669cdd, 0x6a58a23c, 0x6a4aa381, 0x6a3ca0ad, 0x6a2e99c0, 0x6a208ebb, + 0x6a127f9f, 0x6a046c6c, + 0x69f65523, 0x69e839c4, 0x69da1a50, 0x69cbf6c7, 0x69bdcf29, 0x69afa378, + 0x69a173b5, 0x69933fde, + 0x698507f6, 0x6976cbfc, 0x69688bf1, 0x695a47d6, 0x694bffab, 0x693db371, + 0x692f6328, 0x69210ed1, + 0x6912b66c, 0x690459fb, 0x68f5f97d, 0x68e794f3, 0x68d92c5d, 0x68cabfbd, + 0x68bc4f13, 0x68adda5f, + 0x689f61a1, 0x6890e4dc, 0x6882640e, 0x6873df38, 0x6865565c, 0x6856c979, + 0x68483891, 0x6839a3a4, + 0x682b0ab1, 0x681c6dbb, 0x680dccc1, 0x67ff27c4, 0x67f07ec5, 0x67e1d1c4, + 0x67d320c1, 0x67c46bbe, + 0x67b5b2bb, 0x67a6f5b8, 0x679834b6, 0x67896fb6, 0x677aa6b8, 0x676bd9bd, + 0x675d08c4, 0x674e33d0, + 0x673f5ae0, 0x67307df5, 0x67219d10, 0x6712b831, 0x6703cf58, 0x66f4e287, + 0x66e5f1be, 0x66d6fcfd, + 0x66c80445, 0x66b90797, 0x66aa06f3, 0x669b0259, 0x668bf9cb, 0x667ced49, + 0x666ddcd3, 0x665ec86b, + 0x664fb010, 0x664093c3, 0x66317385, 0x66224f56, 0x66132738, 0x6603fb2a, + 0x65f4cb2d, 0x65e59742, + 0x65d65f69, 0x65c723a3, 0x65b7e3f1, 0x65a8a052, 0x659958c9, 0x658a0d54, + 0x657abdf6, 0x656b6aae, + 0x655c137d, 0x654cb863, 0x653d5962, 0x652df679, 0x651e8faa, 0x650f24f5, + 0x64ffb65b, 0x64f043dc, + 0x64e0cd78, 0x64d15331, 0x64c1d507, 0x64b252fa, 0x64a2cd0c, 0x6493433c, + 0x6483b58c, 0x647423fb, + 0x64648e8c, 0x6454f53d, 0x64455810, 0x6435b706, 0x6426121e, 0x6416695a, + 0x6406bcba, 0x63f70c3f, + 0x63e757ea, 0x63d79fba, 0x63c7e3b1, 0x63b823cf, 0x63a86015, 0x63989884, + 0x6388cd1b, 0x6378fddc, + 0x63692ac7, 0x635953dd, 0x6349791f, 0x63399a8d, 0x6329b827, 0x6319d1ef, + 0x6309e7e4, 0x62f9fa09, + 0x62ea085c, 0x62da12df, 0x62ca1992, 0x62ba1c77, 0x62aa1b8d, 0x629a16d5, + 0x628a0e50, 0x627a01fe, + 0x6269f1e1, 0x6259ddf8, 0x6249c645, 0x6239aac7, 0x62298b81, 0x62196871, + 0x62094199, 0x61f916f9, + 0x61e8e893, 0x61d8b666, 0x61c88074, 0x61b846bc, 0x61a80940, 0x6197c800, + 0x618782fd, 0x61773a37, + 0x6166edb0, 0x61569d67, 0x6146495d, 0x6135f193, 0x6125960a, 0x611536c2, + 0x6104d3bc, 0x60f46cf9, + 0x60e40278, 0x60d3943b, 0x60c32243, 0x60b2ac8f, 0x60a23322, 0x6091b5fa, + 0x60813519, 0x6070b080, + 0x6060282f, 0x604f9c27, 0x603f0c69, 0x602e78f4, 0x601de1ca, 0x600d46ec, + 0x5ffca859, 0x5fec0613, + 0x5fdb601b, 0x5fcab670, 0x5fba0914, 0x5fa95807, 0x5f98a34a, 0x5f87eade, + 0x5f772ec2, 0x5f666ef9, + 0x5f55ab82, 0x5f44e45e, 0x5f34198e, 0x5f234b12, 0x5f1278eb, 0x5f01a31a, + 0x5ef0c99f, 0x5edfec7b, + 0x5ecf0baf, 0x5ebe273b, 0x5ead3f1f, 0x5e9c535e, 0x5e8b63f7, 0x5e7a70ea, + 0x5e697a39, 0x5e587fe5, + 0x5e4781ed, 0x5e368053, 0x5e257b17, 0x5e147239, 0x5e0365bb, 0x5df2559e, + 0x5de141e1, 0x5dd02a85, + 0x5dbf0f8c, 0x5dadf0f5, 0x5d9ccec2, 0x5d8ba8f3, 0x5d7a7f88, 0x5d695283, + 0x5d5821e4, 0x5d46edac, + 0x5d35b5db, 0x5d247a72, 0x5d133b72, 0x5d01f8dc, 0x5cf0b2af, 0x5cdf68ed, + 0x5cce1b97, 0x5cbccaac, + 0x5cab762f, 0x5c9a1e1e, 0x5c88c27c, 0x5c776348, 0x5c660084, 0x5c549a30, + 0x5c43304d, 0x5c31c2db, + 0x5c2051db, 0x5c0edd4e, 0x5bfd6534, 0x5bebe98e, 0x5bda6a5d, 0x5bc8e7a2, + 0x5bb7615d, 0x5ba5d78e, + 0x5b944a37, 0x5b82b958, 0x5b7124f2, 0x5b5f8d06, 0x5b4df193, 0x5b3c529c, + 0x5b2ab020, 0x5b190a20, + 0x5b07609d, 0x5af5b398, 0x5ae40311, 0x5ad24f09, 0x5ac09781, 0x5aaedc78, + 0x5a9d1df1, 0x5a8b5bec, + 0x5a799669, 0x5a67cd69, 0x5a5600ec, 0x5a4430f5, 0x5a325d82, 0x5a208695, + 0x5a0eac2e, 0x59fcce4f, + 0x59eaecf8, 0x59d90829, 0x59c71fe3, 0x59b53427, 0x59a344f6, 0x59915250, + 0x597f5c36, 0x596d62a9, + 0x595b65aa, 0x59496538, 0x59376155, 0x59255a02, 0x59134f3e, 0x5901410c, + 0x58ef2f6b, 0x58dd1a5d, + 0x58cb01e1, 0x58b8e5f9, 0x58a6c6a5, 0x5894a3e7, 0x58827dbe, 0x5870542c, + 0x585e2730, 0x584bf6cd, + 0x5839c302, 0x58278bd1, 0x58155139, 0x5803133c, 0x57f0d1da, 0x57de8d15, + 0x57cc44ec, 0x57b9f960, + 0x57a7aa73, 0x57955825, 0x57830276, 0x5770a968, 0x575e4cfa, 0x574bed2f, + 0x57398a05, 0x5727237f, + 0x5714b99d, 0x57024c5f, 0x56efdbc7, 0x56dd67d4, 0x56caf088, 0x56b875e4, + 0x56a5f7e7, 0x56937694, + 0x5680f1ea, 0x566e69ea, 0x565bde95, 0x56494fec, 0x5636bdef, 0x5624289f, + 0x56118ffe, 0x55fef40a, + 0x55ec54c6, 0x55d9b232, 0x55c70c4f, 0x55b4631d, 0x55a1b69d, 0x558f06d0, + 0x557c53b6, 0x55699d51, + 0x5556e3a1, 0x554426a7, 0x55316663, 0x551ea2d6, 0x550bdc01, 0x54f911e5, + 0x54e64482, 0x54d373d9, + 0x54c09feb, 0x54adc8b8, 0x549aee42, 0x54881089, 0x54752f8d, 0x54624b50, + 0x544f63d2, 0x543c7914, + 0x54298b17, 0x541699db, 0x5403a561, 0x53f0adaa, 0x53ddb2b6, 0x53cab486, + 0x53b7b31c, 0x53a4ae77, + 0x5391a699, 0x537e9b82, 0x536b8d33, 0x53587bad, 0x534566f0, 0x53324efd, + 0x531f33d5, 0x530c1579, + 0x52f8f3e9, 0x52e5cf27, 0x52d2a732, 0x52bf7c0b, 0x52ac4db4, 0x52991c2d, + 0x5285e777, 0x5272af92, + 0x525f7480, 0x524c3640, 0x5238f4d4, 0x5225b03d, 0x5212687b, 0x51ff1d8f, + 0x51ebcf7a, 0x51d87e3c, + 0x51c529d7, 0x51b1d24a, 0x519e7797, 0x518b19bf, 0x5177b8c2, 0x516454a0, + 0x5150ed5c, 0x513d82f4, + 0x512a156b, 0x5116a4c1, 0x510330f7, 0x50efba0d, 0x50dc4005, 0x50c8c2de, + 0x50b5429a, 0x50a1bf39, + 0x508e38bd, 0x507aaf25, 0x50672273, 0x505392a8, 0x503fffc4, 0x502c69c8, + 0x5018d0b4, 0x5005348a, + 0x4ff1954b, 0x4fddf2f6, 0x4fca4d8d, 0x4fb6a510, 0x4fa2f981, 0x4f8f4ae0, + 0x4f7b992d, 0x4f67e46a, + 0x4f542c98, 0x4f4071b6, 0x4f2cb3c7, 0x4f18f2c9, 0x4f052ec0, 0x4ef167aa, + 0x4edd9d89, 0x4ec9d05e, + 0x4eb60029, 0x4ea22ceb, 0x4e8e56a5, 0x4e7a7d58, 0x4e66a105, 0x4e52c1ab, + 0x4e3edf4d, 0x4e2af9ea, + 0x4e171184, 0x4e03261b, 0x4def37b0, 0x4ddb4644, 0x4dc751d8, 0x4db35a6c, + 0x4d9f6001, 0x4d8b6298, + 0x4d776231, 0x4d635ece, 0x4d4f5870, 0x4d3b4f16, 0x4d2742c2, 0x4d133374, + 0x4cff212e, 0x4ceb0bf0, + 0x4cd6f3bb, 0x4cc2d88f, 0x4caeba6e, 0x4c9a9958, 0x4c86754e, 0x4c724e50, + 0x4c5e2460, 0x4c49f77f, + 0x4c35c7ac, 0x4c2194e9, 0x4c0d5f37, 0x4bf92697, 0x4be4eb08, 0x4bd0ac8d, + 0x4bbc6b25, 0x4ba826d1, + 0x4b93df93, 0x4b7f956b, 0x4b6b485a, 0x4b56f861, 0x4b42a580, 0x4b2e4fb8, + 0x4b19f70a, 0x4b059b77, + 0x4af13d00, 0x4adcdba5, 0x4ac87767, 0x4ab41046, 0x4a9fa645, 0x4a8b3963, + 0x4a76c9a2, 0x4a625701, + 0x4a4de182, 0x4a396926, 0x4a24edee, 0x4a106fda, 0x49fbeeea, 0x49e76b21, + 0x49d2e47e, 0x49be5b02, + 0x49a9ceaf, 0x49953f84, 0x4980ad84, 0x496c18ae, 0x49578103, 0x4942e684, + 0x492e4933, 0x4919a90f, + 0x4905061a, 0x48f06054, 0x48dbb7be, 0x48c70c59, 0x48b25e25, 0x489dad25, + 0x4888f957, 0x487442be, + 0x485f8959, 0x484acd2a, 0x48360e32, 0x48214c71, 0x480c87e8, 0x47f7c099, + 0x47e2f682, 0x47ce29a7, + 0x47b95a06, 0x47a487a2, 0x478fb27b, 0x477ada91, 0x4765ffe6, 0x4751227a, + 0x473c424e, 0x47275f63, + 0x471279ba, 0x46fd9154, 0x46e8a631, 0x46d3b852, 0x46bec7b8, 0x46a9d464, + 0x4694de56, 0x467fe590, + 0x466aea12, 0x4655ebdd, 0x4640eaf2, 0x462be751, 0x4616e0fc, 0x4601d7f3, + 0x45eccc37, 0x45d7bdc9, + 0x45c2acaa, 0x45ad98da, 0x4598825a, 0x4583692c, 0x456e4d4f, 0x45592ec6, + 0x45440d90, 0x452ee9ae, + 0x4519c321, 0x450499eb, 0x44ef6e0b, 0x44da3f83, 0x44c50e53, 0x44afda7d, + 0x449aa400, 0x44856adf, + 0x44702f19, 0x445af0b0, 0x4445afa4, 0x44306bf6, 0x441b25a8, 0x4405dcb9, + 0x43f0912b, 0x43db42fe, + 0x43c5f234, 0x43b09ecc, 0x439b48c9, 0x4385f02a, 0x437094f1, 0x435b371f, + 0x4345d6b3, 0x433073b0, + 0x431b0e15, 0x4305a5e5, 0x42f03b1e, 0x42dacdc3, 0x42c55dd4, 0x42afeb53, + 0x429a763f, 0x4284fe99, + 0x426f8463, 0x425a079e, 0x42448849, 0x422f0667, 0x421981f7, 0x4203fafb, + 0x41ee7174, 0x41d8e561, + 0x41c356c5, 0x41adc5a0, 0x419831f3, 0x41829bbe, 0x416d0302, 0x415767c1, + 0x4141c9fb, 0x412c29b1, + 0x411686e4, 0x4100e194, 0x40eb39c3, 0x40d58f71, 0x40bfe29f, 0x40aa334e, + 0x4094817f, 0x407ecd32, + 0x40691669, 0x40535d24, 0x403da165, 0x4027e32b, 0x40122278, 0x3ffc5f4d, + 0x3fe699aa, 0x3fd0d191, + 0x3fbb0702, 0x3fa539fd, 0x3f8f6a85, 0x3f799899, 0x3f63c43b, 0x3f4ded6b, + 0x3f38142a, 0x3f22387a, + 0x3f0c5a5a, 0x3ef679cc, 0x3ee096d1, 0x3ecab169, 0x3eb4c995, 0x3e9edf57, + 0x3e88f2ae, 0x3e73039d, + 0x3e5d1222, 0x3e471e41, 0x3e3127f9, 0x3e1b2f4a, 0x3e053437, 0x3def36c0, + 0x3dd936e6, 0x3dc334a9, + 0x3dad300b, 0x3d97290b, 0x3d811fac, 0x3d6b13ee, 0x3d5505d2, 0x3d3ef559, + 0x3d28e282, 0x3d12cd51, + 0x3cfcb5c4, 0x3ce69bde, 0x3cd07f9f, 0x3cba6107, 0x3ca44018, 0x3c8e1cd3, + 0x3c77f737, 0x3c61cf48, + 0x3c4ba504, 0x3c35786d, 0x3c1f4983, 0x3c091849, 0x3bf2e4be, 0x3bdcaee3, + 0x3bc676b9, 0x3bb03c42, + 0x3b99ff7d, 0x3b83c06c, 0x3b6d7f10, 0x3b573b69, 0x3b40f579, 0x3b2aad3f, + 0x3b1462be, 0x3afe15f6, + 0x3ae7c6e7, 0x3ad17593, 0x3abb21fb, 0x3aa4cc1e, 0x3a8e7400, 0x3a78199f, + 0x3a61bcfd, 0x3a4b5e1b, + 0x3a34fcf9, 0x3a1e9999, 0x3a0833fc, 0x39f1cc21, 0x39db620b, 0x39c4f5ba, + 0x39ae872f, 0x3998166a, + 0x3981a36d, 0x396b2e38, 0x3954b6cd, 0x393e3d2c, 0x3927c155, 0x3911434b, + 0x38fac30e, 0x38e4409e, + 0x38cdbbfc, 0x38b7352a, 0x38a0ac29, 0x388a20f8, 0x38739399, 0x385d040d, + 0x38467255, 0x382fde72, + 0x38194864, 0x3802b02c, 0x37ec15cb, 0x37d57943, 0x37beda93, 0x37a839be, + 0x379196c3, 0x377af1a3, + 0x37644a60, 0x374da0fa, 0x3736f573, 0x372047ca, 0x37099802, 0x36f2e61a, + 0x36dc3214, 0x36c57bf0, + 0x36aec3b0, 0x36980954, 0x36814cde, 0x366a8e4d, 0x3653cda3, 0x363d0ae2, + 0x36264609, 0x360f7f19, + 0x35f8b614, 0x35e1eafa, 0x35cb1dcc, 0x35b44e8c, 0x359d7d39, 0x3586a9d5, + 0x356fd461, 0x3558fcde, + 0x3542234c, 0x352b47ad, 0x35146a00, 0x34fd8a48, 0x34e6a885, 0x34cfc4b7, + 0x34b8dee1, 0x34a1f702, + 0x348b0d1c, 0x3474212f, 0x345d333c, 0x34464345, 0x342f5149, 0x34185d4b, + 0x3401674a, 0x33ea6f48, + 0x33d37546, 0x33bc7944, 0x33a57b44, 0x338e7b46, 0x3377794b, 0x33607554, + 0x33496f62, 0x33326776, + 0x331b5d91, 0x330451b3, 0x32ed43de, 0x32d63412, 0x32bf2250, 0x32a80e99, + 0x3290f8ef, 0x3279e151, + 0x3262c7c1, 0x324bac40, 0x32348ecf, 0x321d6f6e, 0x32064e1e, 0x31ef2ae1, + 0x31d805b7, 0x31c0dea1, + 0x31a9b5a0, 0x31928ab4, 0x317b5de0, 0x31642f23, 0x314cfe7f, 0x3135cbf4, + 0x311e9783, 0x3107612e, + 0x30f028f4, 0x30d8eed8, 0x30c1b2da, 0x30aa74fa, 0x3093353a, 0x307bf39b, + 0x3064b01d, 0x304d6ac1, + 0x30362389, 0x301eda75, 0x30078f86, 0x2ff042bd, 0x2fd8f41b, 0x2fc1a3a0, + 0x2faa514f, 0x2f92fd26, + 0x2f7ba729, 0x2f644f56, 0x2f4cf5b0, 0x2f359a37, 0x2f1e3ced, 0x2f06ddd1, + 0x2eef7ce5, 0x2ed81a29, + 0x2ec0b5a0, 0x2ea94f49, 0x2e91e725, 0x2e7a7d36, 0x2e63117c, 0x2e4ba3f8, + 0x2e3434ac, 0x2e1cc397, + 0x2e0550bb, 0x2deddc19, 0x2dd665b2, 0x2dbeed86, 0x2da77397, 0x2d8ff7e5, + 0x2d787a72, 0x2d60fb3e, + 0x2d497a4a, 0x2d31f797, 0x2d1a7325, 0x2d02ecf7, 0x2ceb650d, 0x2cd3db67, + 0x2cbc5006, 0x2ca4c2ed, + 0x2c8d341a, 0x2c75a390, 0x2c5e114f, 0x2c467d58, 0x2c2ee7ad, 0x2c17504d, + 0x2bffb73a, 0x2be81c74, + 0x2bd07ffe, 0x2bb8e1d7, 0x2ba14200, 0x2b89a07b, 0x2b71fd48, 0x2b5a5868, + 0x2b42b1dd, 0x2b2b09a6, + 0x2b135fc6, 0x2afbb43c, 0x2ae4070a, 0x2acc5831, 0x2ab4a7b1, 0x2a9cf58c, + 0x2a8541c3, 0x2a6d8c55, + 0x2a55d545, 0x2a3e1c93, 0x2a266240, 0x2a0ea64d, 0x29f6e8bb, 0x29df298b, + 0x29c768be, 0x29afa654, + 0x2997e24f, 0x29801caf, 0x29685576, 0x29508ca4, 0x2938c23a, 0x2920f63a, + 0x290928a3, 0x28f15978, + 0x28d988b8, 0x28c1b666, 0x28a9e281, 0x28920d0a, 0x287a3604, 0x28625d6d, + 0x284a8349, 0x2832a796, + 0x281aca57, 0x2802eb8c, 0x27eb0b36, 0x27d32956, 0x27bb45ed, 0x27a360fc, + 0x278b7a84, 0x27739285, + 0x275ba901, 0x2743bdf9, 0x272bd16d, 0x2713e35f, 0x26fbf3ce, 0x26e402bd, + 0x26cc102d, 0x26b41c1d, + 0x269c268f, 0x26842f84, 0x266c36fe, 0x26543cfb, 0x263c417f, 0x26244489, + 0x260c461b, 0x25f44635, + 0x25dc44d9, 0x25c44207, 0x25ac3dc0, 0x25943806, 0x257c30d8, 0x25642839, + 0x254c1e28, 0x253412a8, + 0x251c05b8, 0x2503f75a, 0x24ebe78f, 0x24d3d657, 0x24bbc3b4, 0x24a3afa6, + 0x248b9a2f, 0x2473834f, + 0x245b6b07, 0x24435158, 0x242b3644, 0x241319ca, 0x23fafbec, 0x23e2dcac, + 0x23cabc09, 0x23b29a05, + 0x239a76a0, 0x238251dd, 0x236a2bba, 0x2352043b, 0x2339db5e, 0x2321b126, + 0x23098593, 0x22f158a7, + 0x22d92a61, 0x22c0fac4, 0x22a8c9cf, 0x22909785, 0x227863e5, 0x22602ef1, + 0x2247f8aa, 0x222fc111, + 0x22178826, 0x21ff4dea, 0x21e71260, 0x21ced586, 0x21b6975f, 0x219e57eb, + 0x2186172b, 0x216dd521, + 0x215591cc, 0x213d4d2f, 0x21250749, 0x210cc01d, 0x20f477aa, 0x20dc2df2, + 0x20c3e2f5, 0x20ab96b5, + 0x20934933, 0x207afa6f, 0x2062aa6b, 0x204a5927, 0x203206a4, 0x2019b2e4, + 0x20015de7, 0x1fe907ae, + 0x1fd0b03a, 0x1fb8578b, 0x1f9ffda4, 0x1f87a285, 0x1f6f462f, 0x1f56e8a2, + 0x1f3e89e0, 0x1f2629ea, + 0x1f0dc8c0, 0x1ef56664, 0x1edd02d6, 0x1ec49e17, 0x1eac3829, 0x1e93d10c, + 0x1e7b68c2, 0x1e62ff4a, + 0x1e4a94a7, 0x1e3228d9, 0x1e19bbe0, 0x1e014dbf, 0x1de8de75, 0x1dd06e04, + 0x1db7fc6d, 0x1d9f89b1, + 0x1d8715d0, 0x1d6ea0cc, 0x1d562aa6, 0x1d3db35e, 0x1d253af5, 0x1d0cc16c, + 0x1cf446c5, 0x1cdbcb00, + 0x1cc34e1f, 0x1caad021, 0x1c925109, 0x1c79d0d6, 0x1c614f8b, 0x1c48cd27, + 0x1c3049ac, 0x1c17c51b, + 0x1bff3f75, 0x1be6b8ba, 0x1bce30ec, 0x1bb5a80c, 0x1b9d1e1a, 0x1b849317, + 0x1b6c0705, 0x1b5379e5, + 0x1b3aebb6, 0x1b225c7b, 0x1b09cc34, 0x1af13ae3, 0x1ad8a887, 0x1ac01522, + 0x1aa780b6, 0x1a8eeb42, + 0x1a7654c8, 0x1a5dbd49, 0x1a4524c6, 0x1a2c8b3f, 0x1a13f0b6, 0x19fb552c, + 0x19e2b8a2, 0x19ca1b17, + 0x19b17c8f, 0x1998dd09, 0x19803c86, 0x19679b07, 0x194ef88e, 0x1936551b, + 0x191db0af, 0x19050b4b, + 0x18ec64f0, 0x18d3bda0, 0x18bb155a, 0x18a26c20, 0x1889c1f3, 0x187116d4, + 0x18586ac3, 0x183fbdc3, + 0x18270fd3, 0x180e60f4, 0x17f5b129, 0x17dd0070, 0x17c44ecd, 0x17ab9c3e, + 0x1792e8c6, 0x177a3466, + 0x17617f1d, 0x1748c8ee, 0x173011d9, 0x171759df, 0x16fea102, 0x16e5e741, + 0x16cd2c9f, 0x16b4711b, + 0x169bb4b7, 0x1682f774, 0x166a3953, 0x16517a55, 0x1638ba7a, 0x161ff9c4, + 0x16073834, 0x15ee75cb, + 0x15d5b288, 0x15bcee6f, 0x15a4297f, 0x158b63b9, 0x15729d1f, 0x1559d5b1, + 0x15410d70, 0x1528445d, + 0x150f7a7a, 0x14f6afc7, 0x14dde445, 0x14c517f4, 0x14ac4ad7, 0x14937cee, + 0x147aae3a, 0x1461debc, + 0x14490e74, 0x14303d65, 0x14176b8e, 0x13fe98f1, 0x13e5c58e, 0x13ccf167, + 0x13b41c7d, 0x139b46d0, + 0x13827062, 0x13699933, 0x1350c144, 0x1337e897, 0x131f0f2c, 0x13063505, + 0x12ed5a21, 0x12d47e83, + 0x12bba22b, 0x12a2c51b, 0x1289e752, 0x127108d2, 0x1258299c, 0x123f49b2, + 0x12266913, 0x120d87c1, + 0x11f4a5bd, 0x11dbc307, 0x11c2dfa2, 0x11a9fb8d, 0x119116c9, 0x11783159, + 0x115f4b3c, 0x11466473, + 0x112d7d00, 0x111494e4, 0x10fbac1e, 0x10e2c2b2, 0x10c9d89e, 0x10b0ede5, + 0x10980287, 0x107f1686, + 0x106629e1, 0x104d3c9b, 0x10344eb4, 0x101b602d, 0x10027107, 0xfe98143, + 0xfd090e1, 0xfb79fe4, + 0xf9eae4c, 0xf85bc19, 0xf6cc94e, 0xf53d5ea, 0xf3ae1ee, 0xf21ed5d, 0xf08f836, + 0xef0027b, + 0xed70c2c, 0xebe154b, 0xea51dd8, 0xe8c25d5, 0xe732d42, 0xe5a3421, 0xe413a72, + 0xe284036, + 0xe0f456f, 0xdf64a1c, 0xddd4e40, 0xdc451dc, 0xdab54ef, 0xd92577b, 0xd795982, + 0xd605b03, + 0xd475c00, 0xd2e5c7b, 0xd155c73, 0xcfc5bea, 0xce35ae1, 0xcca5959, 0xcb15752, + 0xc9854cf, + 0xc7f51cf, 0xc664e53, 0xc4d4a5d, 0xc3445ee, 0xc1b4107, 0xc023ba7, 0xbe935d2, + 0xbd02f87, + 0xbb728c7, 0xb9e2193, 0xb8519ed, 0xb6c11d5, 0xb53094d, 0xb3a0055, 0xb20f6ee, + 0xb07ed19, + 0xaeee2d7, 0xad5d829, 0xabccd11, 0xaa3c18e, 0xa8ab5a2, 0xa71a94f, 0xa589c94, + 0xa3f8f73, + 0xa2681ed, 0xa0d7403, 0x9f465b5, 0x9db5706, 0x9c247f5, 0x9a93884, 0x99028b3, + 0x9771884, + 0x95e07f8, 0x944f70f, 0x92be5ca, 0x912d42c, 0x8f9c233, 0x8e0afe2, 0x8c79d3a, + 0x8ae8a3a, + 0x89576e5, 0x87c633c, 0x8634f3e, 0x84a3aee, 0x831264c, 0x8181159, 0x7fefc16, + 0x7e5e685, + 0x7ccd0a5, 0x7b3ba78, 0x79aa400, 0x7818d3c, 0x768762e, 0x74f5ed7, 0x7364738, + 0x71d2f52, + 0x7041726, 0x6eafeb4, 0x6d1e5fe, 0x6b8cd05, 0x69fb3c9, 0x6869a4c, 0x66d808f, + 0x6546692, + 0x63b4c57, 0x62231de, 0x6091729, 0x5effc38, 0x5d6e10c, 0x5bdc5a7, 0x5a4aa09, + 0x58b8e34, + 0x5727228, 0x55955e6, 0x540396f, 0x5271cc4, 0x50dffe7, 0x4f4e2d8, 0x4dbc597, + 0x4c2a827, + 0x4a98a88, 0x4906cbb, 0x4774ec1, 0x45e309a, 0x4451249, 0x42bf3cd, 0x412d528, + 0x3f9b65b, + 0x3e09767, 0x3c7784d, 0x3ae590d, 0x39539a9, 0x37c1a22, 0x362fa78, 0x349daac, + 0x330bac1, + 0x3179ab5, 0x2fe7a8c, 0x2e55a44, 0x2cc39e1, 0x2b31961, 0x299f8c7, 0x280d813, + 0x267b747, + 0x24e9662, 0x2357567, 0x21c5457, 0x2033331, 0x1ea11f7, 0x1d0f0ab, 0x1b7cf4d, + 0x19eaddd, + 0x1858c5e, 0x16c6ad0, 0x1534934, 0x13a278a, 0x12105d5, 0x107e414, 0xeec249, + 0xd5a075, + 0xbc7e99, 0xa35cb5, 0x8a3acb, 0x7118dc, 0x57f6e9, 0x3ed4f2, 0x25b2f8, + 0xc90fe, + +}; + +static const q31_t cos_factorsQ31_8192[8192] = { + 0x7ffffff6, 0x7fffffa7, 0x7fffff09, 0x7ffffe1c, 0x7ffffce1, 0x7ffffb56, + 0x7ffff97c, 0x7ffff753, + 0x7ffff4dc, 0x7ffff215, 0x7fffef00, 0x7fffeb9b, 0x7fffe7e8, 0x7fffe3e5, + 0x7fffdf94, 0x7fffdaf3, + 0x7fffd604, 0x7fffd0c6, 0x7fffcb39, 0x7fffc55c, 0x7fffbf31, 0x7fffb8b7, + 0x7fffb1ee, 0x7fffaad6, + 0x7fffa36f, 0x7fff9bb9, 0x7fff93b4, 0x7fff8b61, 0x7fff82be, 0x7fff79cc, + 0x7fff708b, 0x7fff66fc, + 0x7fff5d1d, 0x7fff52ef, 0x7fff4873, 0x7fff3da8, 0x7fff328d, 0x7fff2724, + 0x7fff1b6b, 0x7fff0f64, + 0x7fff030e, 0x7ffef669, 0x7ffee975, 0x7ffedc31, 0x7ffece9f, 0x7ffec0be, + 0x7ffeb28e, 0x7ffea40f, + 0x7ffe9542, 0x7ffe8625, 0x7ffe76b9, 0x7ffe66fe, 0x7ffe56f5, 0x7ffe469c, + 0x7ffe35f4, 0x7ffe24fe, + 0x7ffe13b8, 0x7ffe0224, 0x7ffdf040, 0x7ffdde0e, 0x7ffdcb8d, 0x7ffdb8bc, + 0x7ffda59d, 0x7ffd922f, + 0x7ffd7e72, 0x7ffd6a66, 0x7ffd560b, 0x7ffd4161, 0x7ffd2c68, 0x7ffd1720, + 0x7ffd0189, 0x7ffceba4, + 0x7ffcd56f, 0x7ffcbeeb, 0x7ffca819, 0x7ffc90f7, 0x7ffc7987, 0x7ffc61c7, + 0x7ffc49b9, 0x7ffc315b, + 0x7ffc18af, 0x7ffbffb4, 0x7ffbe66a, 0x7ffbccd0, 0x7ffbb2e8, 0x7ffb98b1, + 0x7ffb7e2b, 0x7ffb6356, + 0x7ffb4833, 0x7ffb2cc0, 0x7ffb10fe, 0x7ffaf4ed, 0x7ffad88e, 0x7ffabbdf, + 0x7ffa9ee2, 0x7ffa8195, + 0x7ffa63fa, 0x7ffa460f, 0x7ffa27d6, 0x7ffa094e, 0x7ff9ea76, 0x7ff9cb50, + 0x7ff9abdb, 0x7ff98c17, + 0x7ff96c04, 0x7ff94ba2, 0x7ff92af1, 0x7ff909f2, 0x7ff8e8a3, 0x7ff8c705, + 0x7ff8a519, 0x7ff882dd, + 0x7ff86053, 0x7ff83d79, 0x7ff81a51, 0x7ff7f6da, 0x7ff7d313, 0x7ff7aefe, + 0x7ff78a9a, 0x7ff765e7, + 0x7ff740e5, 0x7ff71b94, 0x7ff6f5f4, 0x7ff6d005, 0x7ff6a9c8, 0x7ff6833b, + 0x7ff65c5f, 0x7ff63535, + 0x7ff60dbb, 0x7ff5e5f3, 0x7ff5bddc, 0x7ff59576, 0x7ff56cc0, 0x7ff543bc, + 0x7ff51a69, 0x7ff4f0c7, + 0x7ff4c6d6, 0x7ff49c96, 0x7ff47208, 0x7ff4472a, 0x7ff41bfd, 0x7ff3f082, + 0x7ff3c4b7, 0x7ff3989e, + 0x7ff36c36, 0x7ff33f7e, 0x7ff31278, 0x7ff2e523, 0x7ff2b77f, 0x7ff2898c, + 0x7ff25b4a, 0x7ff22cb9, + 0x7ff1fdd9, 0x7ff1ceab, 0x7ff19f2d, 0x7ff16f61, 0x7ff13f45, 0x7ff10edb, + 0x7ff0de22, 0x7ff0ad19, + 0x7ff07bc2, 0x7ff04a1c, 0x7ff01827, 0x7fefe5e4, 0x7fefb351, 0x7fef806f, + 0x7fef4d3e, 0x7fef19bf, + 0x7feee5f0, 0x7feeb1d3, 0x7fee7d67, 0x7fee48ac, 0x7fee13a1, 0x7fedde48, + 0x7feda8a0, 0x7fed72aa, + 0x7fed3c64, 0x7fed05cf, 0x7fecceec, 0x7fec97b9, 0x7fec6038, 0x7fec2867, + 0x7febf048, 0x7febb7da, + 0x7feb7f1d, 0x7feb4611, 0x7feb0cb6, 0x7fead30c, 0x7fea9914, 0x7fea5ecc, + 0x7fea2436, 0x7fe9e950, + 0x7fe9ae1c, 0x7fe97299, 0x7fe936c7, 0x7fe8faa6, 0x7fe8be36, 0x7fe88177, + 0x7fe84469, 0x7fe8070d, + 0x7fe7c961, 0x7fe78b67, 0x7fe74d1e, 0x7fe70e85, 0x7fe6cf9e, 0x7fe69068, + 0x7fe650e3, 0x7fe61110, + 0x7fe5d0ed, 0x7fe5907b, 0x7fe54fbb, 0x7fe50eac, 0x7fe4cd4d, 0x7fe48ba0, + 0x7fe449a4, 0x7fe40759, + 0x7fe3c4bf, 0x7fe381d7, 0x7fe33e9f, 0x7fe2fb19, 0x7fe2b743, 0x7fe2731f, + 0x7fe22eac, 0x7fe1e9ea, + 0x7fe1a4d9, 0x7fe15f79, 0x7fe119cb, 0x7fe0d3cd, 0x7fe08d81, 0x7fe046e5, + 0x7fdffffb, 0x7fdfb8c2, + 0x7fdf713a, 0x7fdf2963, 0x7fdee13e, 0x7fde98c9, 0x7fde5006, 0x7fde06f3, + 0x7fddbd92, 0x7fdd73e2, + 0x7fdd29e3, 0x7fdcdf95, 0x7fdc94f9, 0x7fdc4a0d, 0x7fdbfed3, 0x7fdbb349, + 0x7fdb6771, 0x7fdb1b4a, + 0x7fdaced4, 0x7fda820f, 0x7fda34fc, 0x7fd9e799, 0x7fd999e8, 0x7fd94be8, + 0x7fd8fd98, 0x7fd8aefa, + 0x7fd8600e, 0x7fd810d2, 0x7fd7c147, 0x7fd7716e, 0x7fd72146, 0x7fd6d0cf, + 0x7fd68009, 0x7fd62ef4, + 0x7fd5dd90, 0x7fd58bdd, 0x7fd539dc, 0x7fd4e78c, 0x7fd494ed, 0x7fd441ff, + 0x7fd3eec2, 0x7fd39b36, + 0x7fd3475c, 0x7fd2f332, 0x7fd29eba, 0x7fd249f3, 0x7fd1f4dd, 0x7fd19f78, + 0x7fd149c5, 0x7fd0f3c2, + 0x7fd09d71, 0x7fd046d1, 0x7fcfefe2, 0x7fcf98a4, 0x7fcf4117, 0x7fcee93c, + 0x7fce9112, 0x7fce3898, + 0x7fcddfd0, 0x7fcd86b9, 0x7fcd2d54, 0x7fccd39f, 0x7fcc799c, 0x7fcc1f4a, + 0x7fcbc4a9, 0x7fcb69b9, + 0x7fcb0e7a, 0x7fcab2ed, 0x7fca5710, 0x7fc9fae5, 0x7fc99e6b, 0x7fc941a2, + 0x7fc8e48b, 0x7fc88724, + 0x7fc8296f, 0x7fc7cb6b, 0x7fc76d18, 0x7fc70e76, 0x7fc6af86, 0x7fc65046, + 0x7fc5f0b8, 0x7fc590db, + 0x7fc530af, 0x7fc4d035, 0x7fc46f6b, 0x7fc40e53, 0x7fc3acec, 0x7fc34b36, + 0x7fc2e931, 0x7fc286de, + 0x7fc2243b, 0x7fc1c14a, 0x7fc15e0a, 0x7fc0fa7b, 0x7fc0969e, 0x7fc03271, + 0x7fbfcdf6, 0x7fbf692c, + 0x7fbf0414, 0x7fbe9eac, 0x7fbe38f6, 0x7fbdd2f0, 0x7fbd6c9c, 0x7fbd05fa, + 0x7fbc9f08, 0x7fbc37c8, + 0x7fbbd039, 0x7fbb685b, 0x7fbb002e, 0x7fba97b2, 0x7fba2ee8, 0x7fb9c5cf, + 0x7fb95c67, 0x7fb8f2b0, + 0x7fb888ab, 0x7fb81e57, 0x7fb7b3b4, 0x7fb748c2, 0x7fb6dd81, 0x7fb671f2, + 0x7fb60614, 0x7fb599e7, + 0x7fb52d6b, 0x7fb4c0a1, 0x7fb45387, 0x7fb3e61f, 0x7fb37869, 0x7fb30a63, + 0x7fb29c0f, 0x7fb22d6c, + 0x7fb1be7a, 0x7fb14f39, 0x7fb0dfaa, 0x7fb06fcb, 0x7fafff9e, 0x7faf8f23, + 0x7faf1e58, 0x7faead3f, + 0x7fae3bd7, 0x7fadca20, 0x7fad581b, 0x7face5c6, 0x7fac7323, 0x7fac0031, + 0x7fab8cf1, 0x7fab1962, + 0x7faaa584, 0x7faa3157, 0x7fa9bcdb, 0x7fa94811, 0x7fa8d2f8, 0x7fa85d90, + 0x7fa7e7d9, 0x7fa771d4, + 0x7fa6fb80, 0x7fa684dd, 0x7fa60dec, 0x7fa596ac, 0x7fa51f1d, 0x7fa4a73f, + 0x7fa42f12, 0x7fa3b697, + 0x7fa33dcd, 0x7fa2c4b5, 0x7fa24b4d, 0x7fa1d197, 0x7fa15792, 0x7fa0dd3f, + 0x7fa0629c, 0x7f9fe7ab, + 0x7f9f6c6b, 0x7f9ef0dd, 0x7f9e7500, 0x7f9df8d4, 0x7f9d7c59, 0x7f9cff90, + 0x7f9c8278, 0x7f9c0511, + 0x7f9b875b, 0x7f9b0957, 0x7f9a8b04, 0x7f9a0c62, 0x7f998d72, 0x7f990e33, + 0x7f988ea5, 0x7f980ec8, + 0x7f978e9d, 0x7f970e23, 0x7f968d5b, 0x7f960c43, 0x7f958add, 0x7f950929, + 0x7f948725, 0x7f9404d3, + 0x7f938232, 0x7f92ff43, 0x7f927c04, 0x7f91f878, 0x7f91749c, 0x7f90f072, + 0x7f906bf9, 0x7f8fe731, + 0x7f8f621b, 0x7f8edcb6, 0x7f8e5702, 0x7f8dd0ff, 0x7f8d4aae, 0x7f8cc40f, + 0x7f8c3d20, 0x7f8bb5e3, + 0x7f8b2e57, 0x7f8aa67d, 0x7f8a1e54, 0x7f8995dc, 0x7f890d15, 0x7f888400, + 0x7f87fa9c, 0x7f8770ea, + 0x7f86e6e9, 0x7f865c99, 0x7f85d1fa, 0x7f85470d, 0x7f84bbd1, 0x7f843047, + 0x7f83a46e, 0x7f831846, + 0x7f828bcf, 0x7f81ff0a, 0x7f8171f6, 0x7f80e494, 0x7f8056e3, 0x7f7fc8e3, + 0x7f7f3a95, 0x7f7eabf8, + 0x7f7e1d0c, 0x7f7d8dd2, 0x7f7cfe49, 0x7f7c6e71, 0x7f7bde4b, 0x7f7b4dd6, + 0x7f7abd13, 0x7f7a2c01, + 0x7f799aa0, 0x7f7908f0, 0x7f7876f2, 0x7f77e4a6, 0x7f77520a, 0x7f76bf21, + 0x7f762be8, 0x7f759861, + 0x7f75048b, 0x7f747067, 0x7f73dbf4, 0x7f734732, 0x7f72b222, 0x7f721cc3, + 0x7f718715, 0x7f70f119, + 0x7f705ace, 0x7f6fc435, 0x7f6f2d4d, 0x7f6e9617, 0x7f6dfe91, 0x7f6d66be, + 0x7f6cce9b, 0x7f6c362a, + 0x7f6b9d6b, 0x7f6b045d, 0x7f6a6b00, 0x7f69d154, 0x7f69375a, 0x7f689d12, + 0x7f68027b, 0x7f676795, + 0x7f66cc61, 0x7f6630de, 0x7f65950c, 0x7f64f8ec, 0x7f645c7d, 0x7f63bfc0, + 0x7f6322b4, 0x7f62855a, + 0x7f61e7b1, 0x7f6149b9, 0x7f60ab73, 0x7f600cdf, 0x7f5f6dfb, 0x7f5ecec9, + 0x7f5e2f49, 0x7f5d8f7a, + 0x7f5cef5c, 0x7f5c4ef0, 0x7f5bae36, 0x7f5b0d2c, 0x7f5a6bd5, 0x7f59ca2e, + 0x7f592839, 0x7f5885f6, + 0x7f57e364, 0x7f574083, 0x7f569d54, 0x7f55f9d6, 0x7f55560a, 0x7f54b1ef, + 0x7f540d86, 0x7f5368ce, + 0x7f52c3c8, 0x7f521e73, 0x7f5178cf, 0x7f50d2dd, 0x7f502c9d, 0x7f4f860e, + 0x7f4edf30, 0x7f4e3804, + 0x7f4d9089, 0x7f4ce8c0, 0x7f4c40a8, 0x7f4b9842, 0x7f4aef8d, 0x7f4a468a, + 0x7f499d38, 0x7f48f398, + 0x7f4849a9, 0x7f479f6c, 0x7f46f4e0, 0x7f464a06, 0x7f459edd, 0x7f44f365, + 0x7f44479f, 0x7f439b8b, + 0x7f42ef28, 0x7f424277, 0x7f419577, 0x7f40e828, 0x7f403a8b, 0x7f3f8ca0, + 0x7f3ede66, 0x7f3e2fde, + 0x7f3d8107, 0x7f3cd1e2, 0x7f3c226e, 0x7f3b72ab, 0x7f3ac29b, 0x7f3a123b, + 0x7f39618e, 0x7f38b091, + 0x7f37ff47, 0x7f374dad, 0x7f369bc6, 0x7f35e990, 0x7f35370b, 0x7f348438, + 0x7f33d116, 0x7f331da6, + 0x7f3269e8, 0x7f31b5db, 0x7f31017f, 0x7f304cd6, 0x7f2f97dd, 0x7f2ee296, + 0x7f2e2d01, 0x7f2d771e, + 0x7f2cc0eb, 0x7f2c0a6b, 0x7f2b539c, 0x7f2a9c7e, 0x7f29e512, 0x7f292d58, + 0x7f28754f, 0x7f27bcf8, + 0x7f270452, 0x7f264b5e, 0x7f25921c, 0x7f24d88b, 0x7f241eab, 0x7f23647e, + 0x7f22aa01, 0x7f21ef37, + 0x7f21341e, 0x7f2078b6, 0x7f1fbd00, 0x7f1f00fc, 0x7f1e44a9, 0x7f1d8808, + 0x7f1ccb18, 0x7f1c0dda, + 0x7f1b504e, 0x7f1a9273, 0x7f19d44a, 0x7f1915d2, 0x7f18570c, 0x7f1797f8, + 0x7f16d895, 0x7f1618e4, + 0x7f1558e4, 0x7f149896, 0x7f13d7fa, 0x7f13170f, 0x7f1255d6, 0x7f11944f, + 0x7f10d279, 0x7f101054, + 0x7f0f4de2, 0x7f0e8b21, 0x7f0dc811, 0x7f0d04b3, 0x7f0c4107, 0x7f0b7d0d, + 0x7f0ab8c4, 0x7f09f42d, + 0x7f092f47, 0x7f086a13, 0x7f07a491, 0x7f06dec0, 0x7f0618a1, 0x7f055233, + 0x7f048b78, 0x7f03c46d, + 0x7f02fd15, 0x7f02356e, 0x7f016d79, 0x7f00a535, 0x7effdca4, 0x7eff13c3, + 0x7efe4a95, 0x7efd8118, + 0x7efcb74d, 0x7efbed33, 0x7efb22cb, 0x7efa5815, 0x7ef98d11, 0x7ef8c1be, + 0x7ef7f61d, 0x7ef72a2d, + 0x7ef65def, 0x7ef59163, 0x7ef4c489, 0x7ef3f760, 0x7ef329e9, 0x7ef25c24, + 0x7ef18e10, 0x7ef0bfae, + 0x7eeff0fe, 0x7eef21ff, 0x7eee52b2, 0x7eed8317, 0x7eecb32d, 0x7eebe2f6, + 0x7eeb1270, 0x7eea419b, + 0x7ee97079, 0x7ee89f08, 0x7ee7cd49, 0x7ee6fb3b, 0x7ee628df, 0x7ee55635, + 0x7ee4833d, 0x7ee3aff6, + 0x7ee2dc61, 0x7ee2087e, 0x7ee1344d, 0x7ee05fcd, 0x7edf8aff, 0x7edeb5e3, + 0x7edde079, 0x7edd0ac0, + 0x7edc34b9, 0x7edb5e64, 0x7eda87c0, 0x7ed9b0ce, 0x7ed8d98e, 0x7ed80200, + 0x7ed72a24, 0x7ed651f9, + 0x7ed57980, 0x7ed4a0b9, 0x7ed3c7a3, 0x7ed2ee40, 0x7ed2148e, 0x7ed13a8e, + 0x7ed0603f, 0x7ecf85a3, + 0x7eceaab8, 0x7ecdcf7f, 0x7eccf3f8, 0x7ecc1822, 0x7ecb3bff, 0x7eca5f8d, + 0x7ec982cd, 0x7ec8a5bf, + 0x7ec7c862, 0x7ec6eab7, 0x7ec60cbe, 0x7ec52e77, 0x7ec44fe2, 0x7ec370fe, + 0x7ec291cd, 0x7ec1b24d, + 0x7ec0d27f, 0x7ebff263, 0x7ebf11f8, 0x7ebe313f, 0x7ebd5039, 0x7ebc6ee4, + 0x7ebb8d40, 0x7ebaab4f, + 0x7eb9c910, 0x7eb8e682, 0x7eb803a6, 0x7eb7207c, 0x7eb63d04, 0x7eb5593d, + 0x7eb47529, 0x7eb390c6, + 0x7eb2ac15, 0x7eb1c716, 0x7eb0e1c9, 0x7eaffc2e, 0x7eaf1645, 0x7eae300d, + 0x7ead4987, 0x7eac62b3, + 0x7eab7b91, 0x7eaa9421, 0x7ea9ac63, 0x7ea8c457, 0x7ea7dbfc, 0x7ea6f353, + 0x7ea60a5d, 0x7ea52118, + 0x7ea43785, 0x7ea34da4, 0x7ea26374, 0x7ea178f7, 0x7ea08e2b, 0x7e9fa312, + 0x7e9eb7aa, 0x7e9dcbf4, + 0x7e9cdff0, 0x7e9bf39e, 0x7e9b06fe, 0x7e9a1a10, 0x7e992cd4, 0x7e983f49, + 0x7e975171, 0x7e96634a, + 0x7e9574d6, 0x7e948613, 0x7e939702, 0x7e92a7a3, 0x7e91b7f6, 0x7e90c7fb, + 0x7e8fd7b2, 0x7e8ee71b, + 0x7e8df636, 0x7e8d0502, 0x7e8c1381, 0x7e8b21b1, 0x7e8a2f94, 0x7e893d28, + 0x7e884a6f, 0x7e875767, + 0x7e866411, 0x7e85706d, 0x7e847c7c, 0x7e83883c, 0x7e8293ae, 0x7e819ed2, + 0x7e80a9a8, 0x7e7fb430, + 0x7e7ebe6a, 0x7e7dc856, 0x7e7cd1f4, 0x7e7bdb44, 0x7e7ae446, 0x7e79ecf9, + 0x7e78f55f, 0x7e77fd77, + 0x7e770541, 0x7e760cbd, 0x7e7513ea, 0x7e741aca, 0x7e73215c, 0x7e7227a0, + 0x7e712d96, 0x7e70333d, + 0x7e6f3897, 0x7e6e3da3, 0x7e6d4261, 0x7e6c46d1, 0x7e6b4af2, 0x7e6a4ec6, + 0x7e69524c, 0x7e685584, + 0x7e67586e, 0x7e665b0a, 0x7e655d58, 0x7e645f58, 0x7e63610a, 0x7e62626e, + 0x7e616384, 0x7e60644c, + 0x7e5f64c7, 0x7e5e64f3, 0x7e5d64d1, 0x7e5c6461, 0x7e5b63a4, 0x7e5a6298, + 0x7e59613f, 0x7e585f97, + 0x7e575da2, 0x7e565b5f, 0x7e5558ce, 0x7e5455ef, 0x7e5352c1, 0x7e524f46, + 0x7e514b7e, 0x7e504767, + 0x7e4f4302, 0x7e4e3e4f, 0x7e4d394f, 0x7e4c3400, 0x7e4b2e64, 0x7e4a287a, + 0x7e492241, 0x7e481bbb, + 0x7e4714e7, 0x7e460dc5, 0x7e450656, 0x7e43fe98, 0x7e42f68c, 0x7e41ee33, + 0x7e40e58c, 0x7e3fdc97, + 0x7e3ed353, 0x7e3dc9c3, 0x7e3cbfe4, 0x7e3bb5b7, 0x7e3aab3c, 0x7e39a074, + 0x7e38955e, 0x7e3789fa, + 0x7e367e48, 0x7e357248, 0x7e3465fa, 0x7e33595e, 0x7e324c75, 0x7e313f3e, + 0x7e3031b9, 0x7e2f23e6, + 0x7e2e15c5, 0x7e2d0756, 0x7e2bf89a, 0x7e2ae990, 0x7e29da38, 0x7e28ca92, + 0x7e27ba9e, 0x7e26aa5d, + 0x7e2599cd, 0x7e2488f0, 0x7e2377c5, 0x7e22664c, 0x7e215486, 0x7e204271, + 0x7e1f300f, 0x7e1e1d5f, + 0x7e1d0a61, 0x7e1bf716, 0x7e1ae37c, 0x7e19cf95, 0x7e18bb60, 0x7e17a6dd, + 0x7e16920d, 0x7e157cee, + 0x7e146782, 0x7e1351c9, 0x7e123bc1, 0x7e11256c, 0x7e100ec8, 0x7e0ef7d7, + 0x7e0de099, 0x7e0cc90c, + 0x7e0bb132, 0x7e0a990a, 0x7e098095, 0x7e0867d1, 0x7e074ec0, 0x7e063561, + 0x7e051bb4, 0x7e0401ba, + 0x7e02e772, 0x7e01ccdc, 0x7e00b1f9, 0x7dff96c7, 0x7dfe7b48, 0x7dfd5f7b, + 0x7dfc4361, 0x7dfb26f9, + 0x7dfa0a43, 0x7df8ed3f, 0x7df7cfee, 0x7df6b24f, 0x7df59462, 0x7df47628, + 0x7df357a0, 0x7df238ca, + 0x7df119a7, 0x7deffa35, 0x7deeda77, 0x7dedba6a, 0x7dec9a10, 0x7deb7968, + 0x7dea5872, 0x7de9372f, + 0x7de8159e, 0x7de6f3c0, 0x7de5d193, 0x7de4af1a, 0x7de38c52, 0x7de2693d, + 0x7de145da, 0x7de02229, + 0x7ddefe2b, 0x7dddd9e0, 0x7ddcb546, 0x7ddb905f, 0x7dda6b2a, 0x7dd945a8, + 0x7dd81fd8, 0x7dd6f9ba, + 0x7dd5d34f, 0x7dd4ac96, 0x7dd38590, 0x7dd25e3c, 0x7dd1369a, 0x7dd00eab, + 0x7dcee66e, 0x7dcdbde3, + 0x7dcc950b, 0x7dcb6be6, 0x7dca4272, 0x7dc918b1, 0x7dc7eea3, 0x7dc6c447, + 0x7dc5999d, 0x7dc46ea6, + 0x7dc34361, 0x7dc217cf, 0x7dc0ebef, 0x7dbfbfc1, 0x7dbe9346, 0x7dbd667d, + 0x7dbc3967, 0x7dbb0c03, + 0x7db9de52, 0x7db8b053, 0x7db78207, 0x7db6536d, 0x7db52485, 0x7db3f550, + 0x7db2c5cd, 0x7db195fd, + 0x7db065df, 0x7daf3574, 0x7dae04bb, 0x7dacd3b5, 0x7daba261, 0x7daa70c0, + 0x7da93ed1, 0x7da80c95, + 0x7da6da0b, 0x7da5a733, 0x7da4740e, 0x7da3409c, 0x7da20cdc, 0x7da0d8cf, + 0x7d9fa474, 0x7d9e6fcb, + 0x7d9d3ad6, 0x7d9c0592, 0x7d9ad001, 0x7d999a23, 0x7d9863f7, 0x7d972d7e, + 0x7d95f6b7, 0x7d94bfa3, + 0x7d938841, 0x7d925092, 0x7d911896, 0x7d8fe04c, 0x7d8ea7b4, 0x7d8d6ecf, + 0x7d8c359d, 0x7d8afc1d, + 0x7d89c250, 0x7d888835, 0x7d874dcd, 0x7d861317, 0x7d84d814, 0x7d839cc4, + 0x7d826126, 0x7d81253a, + 0x7d7fe902, 0x7d7eac7c, 0x7d7d6fa8, 0x7d7c3287, 0x7d7af519, 0x7d79b75d, + 0x7d787954, 0x7d773afd, + 0x7d75fc59, 0x7d74bd68, 0x7d737e29, 0x7d723e9d, 0x7d70fec4, 0x7d6fbe9d, + 0x7d6e7e29, 0x7d6d3d67, + 0x7d6bfc58, 0x7d6abafc, 0x7d697952, 0x7d68375b, 0x7d66f517, 0x7d65b285, + 0x7d646fa6, 0x7d632c79, + 0x7d61e8ff, 0x7d60a538, 0x7d5f6124, 0x7d5e1cc2, 0x7d5cd813, 0x7d5b9316, + 0x7d5a4dcc, 0x7d590835, + 0x7d57c251, 0x7d567c1f, 0x7d5535a0, 0x7d53eed3, 0x7d52a7ba, 0x7d516053, + 0x7d50189e, 0x7d4ed09d, + 0x7d4d884e, 0x7d4c3fb1, 0x7d4af6c8, 0x7d49ad91, 0x7d48640d, 0x7d471a3c, + 0x7d45d01d, 0x7d4485b1, + 0x7d433af8, 0x7d41eff1, 0x7d40a49e, 0x7d3f58fd, 0x7d3e0d0e, 0x7d3cc0d3, + 0x7d3b744a, 0x7d3a2774, + 0x7d38da51, 0x7d378ce0, 0x7d363f23, 0x7d34f118, 0x7d33a2bf, 0x7d32541a, + 0x7d310527, 0x7d2fb5e7, + 0x7d2e665a, 0x7d2d1680, 0x7d2bc659, 0x7d2a75e4, 0x7d292522, 0x7d27d413, + 0x7d2682b6, 0x7d25310d, + 0x7d23df16, 0x7d228cd2, 0x7d213a41, 0x7d1fe762, 0x7d1e9437, 0x7d1d40be, + 0x7d1becf8, 0x7d1a98e5, + 0x7d194485, 0x7d17efd8, 0x7d169add, 0x7d154595, 0x7d13f001, 0x7d129a1f, + 0x7d1143ef, 0x7d0fed73, + 0x7d0e96aa, 0x7d0d3f93, 0x7d0be82f, 0x7d0a907e, 0x7d093880, 0x7d07e035, + 0x7d06879d, 0x7d052eb8, + 0x7d03d585, 0x7d027c05, 0x7d012239, 0x7cffc81f, 0x7cfe6db8, 0x7cfd1304, + 0x7cfbb803, 0x7cfa5cb4, + 0x7cf90119, 0x7cf7a531, 0x7cf648fb, 0x7cf4ec79, 0x7cf38fa9, 0x7cf2328c, + 0x7cf0d522, 0x7cef776b, + 0x7cee1967, 0x7cecbb16, 0x7ceb5c78, 0x7ce9fd8d, 0x7ce89e55, 0x7ce73ed0, + 0x7ce5defd, 0x7ce47ede, + 0x7ce31e72, 0x7ce1bdb8, 0x7ce05cb2, 0x7cdefb5e, 0x7cdd99be, 0x7cdc37d0, + 0x7cdad596, 0x7cd9730e, + 0x7cd8103a, 0x7cd6ad18, 0x7cd549aa, 0x7cd3e5ee, 0x7cd281e5, 0x7cd11d90, + 0x7ccfb8ed, 0x7cce53fe, + 0x7ccceec1, 0x7ccb8937, 0x7cca2361, 0x7cc8bd3d, 0x7cc756cd, 0x7cc5f010, + 0x7cc48905, 0x7cc321ae, + 0x7cc1ba09, 0x7cc05218, 0x7cbee9da, 0x7cbd814f, 0x7cbc1877, 0x7cbaaf51, + 0x7cb945df, 0x7cb7dc20, + 0x7cb67215, 0x7cb507bc, 0x7cb39d16, 0x7cb23223, 0x7cb0c6e4, 0x7caf5b57, + 0x7cadef7e, 0x7cac8358, + 0x7cab16e4, 0x7ca9aa24, 0x7ca83d17, 0x7ca6cfbd, 0x7ca56216, 0x7ca3f423, + 0x7ca285e2, 0x7ca11755, + 0x7c9fa87a, 0x7c9e3953, 0x7c9cc9df, 0x7c9b5a1e, 0x7c99ea10, 0x7c9879b6, + 0x7c97090e, 0x7c95981a, + 0x7c9426d8, 0x7c92b54a, 0x7c91436f, 0x7c8fd148, 0x7c8e5ed3, 0x7c8cec12, + 0x7c8b7903, 0x7c8a05a8, + 0x7c889200, 0x7c871e0c, 0x7c85a9ca, 0x7c84353c, 0x7c82c060, 0x7c814b39, + 0x7c7fd5c4, 0x7c7e6002, + 0x7c7ce9f4, 0x7c7b7399, 0x7c79fcf1, 0x7c7885fc, 0x7c770eba, 0x7c75972c, + 0x7c741f51, 0x7c72a729, + 0x7c712eb5, 0x7c6fb5f3, 0x7c6e3ce5, 0x7c6cc38a, 0x7c6b49e3, 0x7c69cfee, + 0x7c6855ad, 0x7c66db1f, + 0x7c656045, 0x7c63e51e, 0x7c6269aa, 0x7c60ede9, 0x7c5f71db, 0x7c5df581, + 0x7c5c78da, 0x7c5afbe6, + 0x7c597ea6, 0x7c580119, 0x7c56833f, 0x7c550519, 0x7c5386a6, 0x7c5207e6, + 0x7c5088d9, 0x7c4f0980, + 0x7c4d89da, 0x7c4c09e8, 0x7c4a89a8, 0x7c49091c, 0x7c478844, 0x7c46071f, + 0x7c4485ad, 0x7c4303ee, + 0x7c4181e3, 0x7c3fff8b, 0x7c3e7ce7, 0x7c3cf9f5, 0x7c3b76b8, 0x7c39f32d, + 0x7c386f56, 0x7c36eb33, + 0x7c3566c2, 0x7c33e205, 0x7c325cfc, 0x7c30d7a6, 0x7c2f5203, 0x7c2dcc14, + 0x7c2c45d8, 0x7c2abf4f, + 0x7c29387a, 0x7c27b158, 0x7c2629ea, 0x7c24a22f, 0x7c231a28, 0x7c2191d4, + 0x7c200933, 0x7c1e8046, + 0x7c1cf70c, 0x7c1b6d86, 0x7c19e3b3, 0x7c185994, 0x7c16cf28, 0x7c15446f, + 0x7c13b96a, 0x7c122e19, + 0x7c10a27b, 0x7c0f1690, 0x7c0d8a59, 0x7c0bfdd5, 0x7c0a7105, 0x7c08e3e8, + 0x7c07567f, 0x7c05c8c9, + 0x7c043ac7, 0x7c02ac78, 0x7c011ddd, 0x7bff8ef5, 0x7bfdffc1, 0x7bfc7041, + 0x7bfae073, 0x7bf9505a, + 0x7bf7bff4, 0x7bf62f41, 0x7bf49e42, 0x7bf30cf6, 0x7bf17b5e, 0x7befe97a, + 0x7bee5749, 0x7becc4cc, + 0x7beb3202, 0x7be99eec, 0x7be80b89, 0x7be677da, 0x7be4e3df, 0x7be34f97, + 0x7be1bb02, 0x7be02621, + 0x7bde90f4, 0x7bdcfb7b, 0x7bdb65b5, 0x7bd9cfa2, 0x7bd83944, 0x7bd6a298, + 0x7bd50ba1, 0x7bd3745d, + 0x7bd1dccc, 0x7bd044f0, 0x7bceacc7, 0x7bcd1451, 0x7bcb7b8f, 0x7bc9e281, + 0x7bc84927, 0x7bc6af80, + 0x7bc5158c, 0x7bc37b4d, 0x7bc1e0c1, 0x7bc045e9, 0x7bbeaac4, 0x7bbd0f53, + 0x7bbb7396, 0x7bb9d78c, + 0x7bb83b36, 0x7bb69e94, 0x7bb501a5, 0x7bb3646a, 0x7bb1c6e3, 0x7bb02910, + 0x7bae8af0, 0x7bacec84, + 0x7bab4dcc, 0x7ba9aec7, 0x7ba80f76, 0x7ba66fd9, 0x7ba4cfef, 0x7ba32fba, + 0x7ba18f38, 0x7b9fee69, + 0x7b9e4d4f, 0x7b9cabe8, 0x7b9b0a35, 0x7b996836, 0x7b97c5ea, 0x7b962352, + 0x7b94806e, 0x7b92dd3e, + 0x7b9139c2, 0x7b8f95f9, 0x7b8df1e4, 0x7b8c4d83, 0x7b8aa8d6, 0x7b8903dc, + 0x7b875e96, 0x7b85b904, + 0x7b841326, 0x7b826cfc, 0x7b80c686, 0x7b7f1fc3, 0x7b7d78b4, 0x7b7bd159, + 0x7b7a29b2, 0x7b7881be, + 0x7b76d97f, 0x7b7530f3, 0x7b73881b, 0x7b71def7, 0x7b703587, 0x7b6e8bcb, + 0x7b6ce1c2, 0x7b6b376e, + 0x7b698ccd, 0x7b67e1e0, 0x7b6636a7, 0x7b648b22, 0x7b62df51, 0x7b613334, + 0x7b5f86ca, 0x7b5dda15, + 0x7b5c2d13, 0x7b5a7fc6, 0x7b58d22c, 0x7b572446, 0x7b557614, 0x7b53c796, + 0x7b5218cc, 0x7b5069b6, + 0x7b4eba53, 0x7b4d0aa5, 0x7b4b5aab, 0x7b49aa64, 0x7b47f9d2, 0x7b4648f3, + 0x7b4497c9, 0x7b42e652, + 0x7b413490, 0x7b3f8281, 0x7b3dd026, 0x7b3c1d80, 0x7b3a6a8d, 0x7b38b74e, + 0x7b3703c3, 0x7b354fed, + 0x7b339bca, 0x7b31e75b, 0x7b3032a0, 0x7b2e7d9a, 0x7b2cc847, 0x7b2b12a8, + 0x7b295cbe, 0x7b27a687, + 0x7b25f004, 0x7b243936, 0x7b22821b, 0x7b20cab5, 0x7b1f1302, 0x7b1d5b04, + 0x7b1ba2b9, 0x7b19ea23, + 0x7b183141, 0x7b167813, 0x7b14be99, 0x7b1304d3, 0x7b114ac1, 0x7b0f9063, + 0x7b0dd5b9, 0x7b0c1ac4, + 0x7b0a5f82, 0x7b08a3f5, 0x7b06e81b, 0x7b052bf6, 0x7b036f85, 0x7b01b2c8, + 0x7afff5bf, 0x7afe386a, + 0x7afc7aca, 0x7afabcdd, 0x7af8fea5, 0x7af74021, 0x7af58151, 0x7af3c235, + 0x7af202cd, 0x7af0431a, + 0x7aee831a, 0x7aecc2cf, 0x7aeb0238, 0x7ae94155, 0x7ae78026, 0x7ae5beac, + 0x7ae3fce6, 0x7ae23ad4, + 0x7ae07876, 0x7adeb5cc, 0x7adcf2d6, 0x7adb2f95, 0x7ad96c08, 0x7ad7a82f, + 0x7ad5e40a, 0x7ad41f9a, + 0x7ad25ade, 0x7ad095d6, 0x7aced082, 0x7acd0ae3, 0x7acb44f8, 0x7ac97ec1, + 0x7ac7b83e, 0x7ac5f170, + 0x7ac42a55, 0x7ac262ef, 0x7ac09b3e, 0x7abed341, 0x7abd0af7, 0x7abb4263, + 0x7ab97982, 0x7ab7b056, + 0x7ab5e6de, 0x7ab41d1b, 0x7ab2530b, 0x7ab088b0, 0x7aaebe0a, 0x7aacf318, + 0x7aab27da, 0x7aa95c50, + 0x7aa7907b, 0x7aa5c45a, 0x7aa3f7ed, 0x7aa22b35, 0x7aa05e31, 0x7a9e90e1, + 0x7a9cc346, 0x7a9af55f, + 0x7a99272d, 0x7a9758af, 0x7a9589e5, 0x7a93bad0, 0x7a91eb6f, 0x7a901bc2, + 0x7a8e4bca, 0x7a8c7b87, + 0x7a8aaaf7, 0x7a88da1c, 0x7a8708f6, 0x7a853784, 0x7a8365c6, 0x7a8193bd, + 0x7a7fc168, 0x7a7deec8, + 0x7a7c1bdc, 0x7a7a48a4, 0x7a787521, 0x7a76a153, 0x7a74cd38, 0x7a72f8d3, + 0x7a712422, 0x7a6f4f25, + 0x7a6d79dd, 0x7a6ba449, 0x7a69ce6a, 0x7a67f83f, 0x7a6621c9, 0x7a644b07, + 0x7a6273fa, 0x7a609ca1, + 0x7a5ec4fc, 0x7a5ced0d, 0x7a5b14d1, 0x7a593c4b, 0x7a576379, 0x7a558a5b, + 0x7a53b0f2, 0x7a51d73d, + 0x7a4ffd3d, 0x7a4e22f2, 0x7a4c485b, 0x7a4a6d78, 0x7a48924b, 0x7a46b6d1, + 0x7a44db0d, 0x7a42fefd, + 0x7a4122a1, 0x7a3f45fa, 0x7a3d6908, 0x7a3b8bca, 0x7a39ae41, 0x7a37d06d, + 0x7a35f24d, 0x7a3413e2, + 0x7a32352b, 0x7a305629, 0x7a2e76dc, 0x7a2c9743, 0x7a2ab75f, 0x7a28d72f, + 0x7a26f6b4, 0x7a2515ee, + 0x7a2334dd, 0x7a215380, 0x7a1f71d7, 0x7a1d8fe4, 0x7a1bada5, 0x7a19cb1b, + 0x7a17e845, 0x7a160524, + 0x7a1421b8, 0x7a123e01, 0x7a1059fe, 0x7a0e75b0, 0x7a0c9117, 0x7a0aac32, + 0x7a08c702, 0x7a06e187, + 0x7a04fbc1, 0x7a0315af, 0x7a012f52, 0x79ff48aa, 0x79fd61b6, 0x79fb7a77, + 0x79f992ed, 0x79f7ab18, + 0x79f5c2f8, 0x79f3da8c, 0x79f1f1d5, 0x79f008d3, 0x79ee1f86, 0x79ec35ed, + 0x79ea4c09, 0x79e861da, + 0x79e67760, 0x79e48c9b, 0x79e2a18a, 0x79e0b62e, 0x79deca87, 0x79dcde95, + 0x79daf258, 0x79d905d0, + 0x79d718fc, 0x79d52bdd, 0x79d33e73, 0x79d150be, 0x79cf62be, 0x79cd7473, + 0x79cb85dc, 0x79c996fb, + 0x79c7a7ce, 0x79c5b856, 0x79c3c893, 0x79c1d885, 0x79bfe82c, 0x79bdf788, + 0x79bc0698, 0x79ba155e, + 0x79b823d8, 0x79b63207, 0x79b43fec, 0x79b24d85, 0x79b05ad3, 0x79ae67d6, + 0x79ac748e, 0x79aa80fb, + 0x79a88d1d, 0x79a698f4, 0x79a4a480, 0x79a2afc1, 0x79a0bab6, 0x799ec561, + 0x799ccfc1, 0x799ad9d5, + 0x7998e39f, 0x7996ed1e, 0x7994f651, 0x7992ff3a, 0x799107d8, 0x798f102a, + 0x798d1832, 0x798b1fef, + 0x79892761, 0x79872e87, 0x79853563, 0x79833bf4, 0x7981423a, 0x797f4835, + 0x797d4de5, 0x797b534a, + 0x79795864, 0x79775d33, 0x797561b8, 0x797365f1, 0x797169df, 0x796f6d83, + 0x796d70dc, 0x796b73e9, + 0x796976ac, 0x79677924, 0x79657b51, 0x79637d33, 0x79617eca, 0x795f8017, + 0x795d8118, 0x795b81cf, + 0x7959823b, 0x7957825c, 0x79558232, 0x795381bd, 0x795180fe, 0x794f7ff3, + 0x794d7e9e, 0x794b7cfe, + 0x79497b13, 0x794778dd, 0x7945765d, 0x79437391, 0x7941707b, 0x793f6d1a, + 0x793d696f, 0x793b6578, + 0x79396137, 0x79375cab, 0x793557d4, 0x793352b2, 0x79314d46, 0x792f478f, + 0x792d418d, 0x792b3b40, + 0x792934a9, 0x79272dc7, 0x7925269a, 0x79231f22, 0x79211760, 0x791f0f53, + 0x791d06fb, 0x791afe59, + 0x7918f56c, 0x7916ec34, 0x7914e2b2, 0x7912d8e4, 0x7910cecc, 0x790ec46a, + 0x790cb9bd, 0x790aaec5, + 0x7908a382, 0x790697f5, 0x79048c1d, 0x79027ffa, 0x7900738d, 0x78fe66d5, + 0x78fc59d3, 0x78fa4c86, + 0x78f83eee, 0x78f6310c, 0x78f422df, 0x78f21467, 0x78f005a5, 0x78edf698, + 0x78ebe741, 0x78e9d79f, + 0x78e7c7b2, 0x78e5b77b, 0x78e3a6f9, 0x78e1962d, 0x78df8516, 0x78dd73b5, + 0x78db6209, 0x78d95012, + 0x78d73dd1, 0x78d52b46, 0x78d31870, 0x78d1054f, 0x78cef1e4, 0x78ccde2e, + 0x78caca2e, 0x78c8b5e3, + 0x78c6a14e, 0x78c48c6e, 0x78c27744, 0x78c061cf, 0x78be4c10, 0x78bc3606, + 0x78ba1fb2, 0x78b80913, + 0x78b5f22a, 0x78b3daf7, 0x78b1c379, 0x78afabb0, 0x78ad939d, 0x78ab7b40, + 0x78a96298, 0x78a749a6, + 0x78a53069, 0x78a316e2, 0x78a0fd11, 0x789ee2f5, 0x789cc88f, 0x789aadde, + 0x789892e3, 0x7896779d, + 0x78945c0d, 0x78924033, 0x7890240e, 0x788e07a0, 0x788beae6, 0x7889cde2, + 0x7887b094, 0x788592fc, + 0x78837519, 0x788156ec, 0x787f3875, 0x787d19b3, 0x787afaa7, 0x7878db50, + 0x7876bbb0, 0x78749bc5, + 0x78727b8f, 0x78705b10, 0x786e3a46, 0x786c1932, 0x7869f7d3, 0x7867d62a, + 0x7865b437, 0x786391fa, + 0x78616f72, 0x785f4ca1, 0x785d2984, 0x785b061e, 0x7858e26e, 0x7856be73, + 0x78549a2e, 0x7852759e, + 0x785050c5, 0x784e2ba1, 0x784c0633, 0x7849e07b, 0x7847ba79, 0x7845942c, + 0x78436d96, 0x784146b5, + 0x783f1f8a, 0x783cf815, 0x783ad055, 0x7838a84c, 0x78367ff8, 0x7834575a, + 0x78322e72, 0x78300540, + 0x782ddbc4, 0x782bb1fd, 0x782987ed, 0x78275d92, 0x782532ed, 0x782307fe, + 0x7820dcc5, 0x781eb142, + 0x781c8575, 0x781a595d, 0x78182cfc, 0x78160051, 0x7813d35b, 0x7811a61b, + 0x780f7892, 0x780d4abe, + 0x780b1ca0, 0x7808ee38, 0x7806bf86, 0x7804908a, 0x78026145, 0x780031b5, + 0x77fe01db, 0x77fbd1b6, + 0x77f9a148, 0x77f77090, 0x77f53f8e, 0x77f30e42, 0x77f0dcac, 0x77eeaacc, + 0x77ec78a2, 0x77ea462e, + 0x77e81370, 0x77e5e068, 0x77e3ad17, 0x77e1797b, 0x77df4595, 0x77dd1165, + 0x77dadcec, 0x77d8a828, + 0x77d6731a, 0x77d43dc3, 0x77d20822, 0x77cfd236, 0x77cd9c01, 0x77cb6582, + 0x77c92eb9, 0x77c6f7a6, + 0x77c4c04a, 0x77c288a3, 0x77c050b2, 0x77be1878, 0x77bbdff4, 0x77b9a726, + 0x77b76e0e, 0x77b534ac, + 0x77b2fb00, 0x77b0c10b, 0x77ae86cc, 0x77ac4c43, 0x77aa1170, 0x77a7d653, + 0x77a59aec, 0x77a35f3c, + 0x77a12342, 0x779ee6fe, 0x779caa70, 0x779a6d99, 0x77983077, 0x7795f30c, + 0x7793b557, 0x77917759, + 0x778f3910, 0x778cfa7e, 0x778abba2, 0x77887c7d, 0x77863d0d, 0x7783fd54, + 0x7781bd52, 0x777f7d05, + 0x777d3c6f, 0x777afb8f, 0x7778ba65, 0x777678f2, 0x77743735, 0x7771f52e, + 0x776fb2de, 0x776d7044, + 0x776b2d60, 0x7768ea33, 0x7766a6bc, 0x776462fb, 0x77621ef1, 0x775fda9d, + 0x775d95ff, 0x775b5118, + 0x77590be7, 0x7756c66c, 0x775480a8, 0x77523a9b, 0x774ff443, 0x774dada2, + 0x774b66b8, 0x77491f84, + 0x7746d806, 0x7744903f, 0x7742482e, 0x773fffd4, 0x773db730, 0x773b6e42, + 0x7739250b, 0x7736db8b, + 0x773491c0, 0x773247ad, 0x772ffd50, 0x772db2a9, 0x772b67b9, 0x77291c7f, + 0x7726d0fc, 0x7724852f, + 0x77223919, 0x771fecb9, 0x771da010, 0x771b531d, 0x771905e1, 0x7716b85b, + 0x77146a8c, 0x77121c74, + 0x770fce12, 0x770d7f66, 0x770b3072, 0x7708e133, 0x770691ab, 0x770441da, + 0x7701f1c0, 0x76ffa15c, + 0x76fd50ae, 0x76faffb8, 0x76f8ae78, 0x76f65cee, 0x76f40b1b, 0x76f1b8ff, + 0x76ef6699, 0x76ed13ea, + 0x76eac0f2, 0x76e86db0, 0x76e61a25, 0x76e3c650, 0x76e17233, 0x76df1dcb, + 0x76dcc91b, 0x76da7421, + 0x76d81ede, 0x76d5c952, 0x76d3737c, 0x76d11d5d, 0x76cec6f5, 0x76cc7043, + 0x76ca1948, 0x76c7c204, + 0x76c56a77, 0x76c312a0, 0x76c0ba80, 0x76be6217, 0x76bc0965, 0x76b9b069, + 0x76b75724, 0x76b4fd96, + 0x76b2a3bf, 0x76b0499e, 0x76adef34, 0x76ab9481, 0x76a93985, 0x76a6de40, + 0x76a482b1, 0x76a226da, + 0x769fcab9, 0x769d6e4f, 0x769b119b, 0x7698b49f, 0x76965759, 0x7693f9ca, + 0x76919bf3, 0x768f3dd2, + 0x768cdf67, 0x768a80b4, 0x768821b8, 0x7685c272, 0x768362e4, 0x7681030c, + 0x767ea2eb, 0x767c4281, + 0x7679e1ce, 0x767780d2, 0x76751f8d, 0x7672bdfe, 0x76705c27, 0x766dfa07, + 0x766b979d, 0x766934eb, + 0x7666d1ef, 0x76646eab, 0x76620b1d, 0x765fa747, 0x765d4327, 0x765adebe, + 0x76587a0d, 0x76561512, + 0x7653afce, 0x76514a42, 0x764ee46c, 0x764c7e4d, 0x764a17e6, 0x7647b135, + 0x76454a3c, 0x7642e2f9, + 0x76407b6e, 0x763e139a, 0x763bab7c, 0x76394316, 0x7636da67, 0x7634716f, + 0x7632082e, 0x762f9ea4, + 0x762d34d1, 0x762acab6, 0x76286051, 0x7625f5a3, 0x76238aad, 0x76211f6e, + 0x761eb3e6, 0x761c4815, + 0x7619dbfb, 0x76176f98, 0x761502ed, 0x761295f9, 0x761028bb, 0x760dbb35, + 0x760b4d67, 0x7608df4f, + 0x760670ee, 0x76040245, 0x76019353, 0x75ff2418, 0x75fcb495, 0x75fa44c8, + 0x75f7d4b3, 0x75f56455, + 0x75f2f3ae, 0x75f082bf, 0x75ee1187, 0x75eba006, 0x75e92e3c, 0x75e6bc2a, + 0x75e449ce, 0x75e1d72b, + 0x75df643e, 0x75dcf109, 0x75da7d8b, 0x75d809c4, 0x75d595b4, 0x75d3215c, + 0x75d0acbc, 0x75ce37d2, + 0x75cbc2a0, 0x75c94d25, 0x75c6d762, 0x75c46156, 0x75c1eb01, 0x75bf7464, + 0x75bcfd7e, 0x75ba864f, + 0x75b80ed8, 0x75b59718, 0x75b31f0f, 0x75b0a6be, 0x75ae2e25, 0x75abb542, + 0x75a93c18, 0x75a6c2a4, + 0x75a448e8, 0x75a1cee4, 0x759f5496, 0x759cda01, 0x759a5f22, 0x7597e3fc, + 0x7595688c, 0x7592ecd4, + 0x759070d4, 0x758df48b, 0x758b77fa, 0x7588fb20, 0x75867dfd, 0x75840093, + 0x758182df, 0x757f04e3, + 0x757c869f, 0x757a0812, 0x7577893d, 0x75750a1f, 0x75728ab9, 0x75700b0a, + 0x756d8b13, 0x756b0ad3, + 0x75688a4b, 0x7566097b, 0x75638862, 0x75610701, 0x755e8557, 0x755c0365, + 0x7559812b, 0x7556fea8, + 0x75547bdd, 0x7551f8c9, 0x754f756e, 0x754cf1c9, 0x754a6ddd, 0x7547e9a8, + 0x7545652a, 0x7542e065, + 0x75405b57, 0x753dd600, 0x753b5061, 0x7538ca7b, 0x7536444b, 0x7533bdd4, + 0x75313714, 0x752eb00c, + 0x752c28bb, 0x7529a122, 0x75271941, 0x75249118, 0x752208a7, 0x751f7fed, + 0x751cf6eb, 0x751a6da0, + 0x7517e40e, 0x75155a33, 0x7512d010, 0x751045a5, 0x750dbaf2, 0x750b2ff6, + 0x7508a4b2, 0x75061926, + 0x75038d52, 0x75010136, 0x74fe74d1, 0x74fbe825, 0x74f95b30, 0x74f6cdf3, + 0x74f4406d, 0x74f1b2a0, + 0x74ef248b, 0x74ec962d, 0x74ea0787, 0x74e7789a, 0x74e4e964, 0x74e259e6, + 0x74dfca20, 0x74dd3a11, + 0x74daa9bb, 0x74d8191d, 0x74d58836, 0x74d2f708, 0x74d06591, 0x74cdd3d2, + 0x74cb41cc, 0x74c8af7d, + 0x74c61ce6, 0x74c38a07, 0x74c0f6e0, 0x74be6372, 0x74bbcfbb, 0x74b93bbc, + 0x74b6a775, 0x74b412e6, + 0x74b17e0f, 0x74aee8f0, 0x74ac5389, 0x74a9bddb, 0x74a727e4, 0x74a491a5, + 0x74a1fb1e, 0x749f6450, + 0x749ccd39, 0x749a35db, 0x74979e34, 0x74950646, 0x74926e10, 0x748fd592, + 0x748d3ccb, 0x748aa3be, + 0x74880a68, 0x748570ca, 0x7482d6e4, 0x74803cb7, 0x747da242, 0x747b0784, + 0x74786c7f, 0x7475d132, + 0x7473359e, 0x747099c1, 0x746dfd9d, 0x746b6131, 0x7468c47c, 0x74662781, + 0x74638a3d, 0x7460ecb2, + 0x745e4ede, 0x745bb0c3, 0x74591261, 0x745673b6, 0x7453d4c4, 0x7451358a, + 0x744e9608, 0x744bf63e, + 0x7449562d, 0x7446b5d4, 0x74441533, 0x7441744b, 0x743ed31b, 0x743c31a3, + 0x74398fe3, 0x7436eddc, + 0x74344b8d, 0x7431a8f6, 0x742f0618, 0x742c62f2, 0x7429bf84, 0x74271bcf, + 0x742477d2, 0x7421d38e, + 0x741f2f01, 0x741c8a2d, 0x7419e512, 0x74173faf, 0x74149a04, 0x7411f412, + 0x740f4dd8, 0x740ca756, + 0x740a008d, 0x7407597d, 0x7404b224, 0x74020a85, 0x73ff629d, 0x73fcba6e, + 0x73fa11f8, 0x73f7693a, + 0x73f4c034, 0x73f216e7, 0x73ef6d53, 0x73ecc377, 0x73ea1953, 0x73e76ee8, + 0x73e4c435, 0x73e2193b, + 0x73df6df9, 0x73dcc270, 0x73da16a0, 0x73d76a88, 0x73d4be28, 0x73d21182, + 0x73cf6493, 0x73ccb75d, + 0x73ca09e0, 0x73c75c1c, 0x73c4ae10, 0x73c1ffbc, 0x73bf5121, 0x73bca23f, + 0x73b9f315, 0x73b743a4, + 0x73b493ec, 0x73b1e3ec, 0x73af33a5, 0x73ac8316, 0x73a9d240, 0x73a72123, + 0x73a46fbf, 0x73a1be13, + 0x739f0c20, 0x739c59e5, 0x7399a763, 0x7396f49a, 0x73944189, 0x73918e32, + 0x738eda93, 0x738c26ac, + 0x7389727f, 0x7386be0a, 0x7384094e, 0x7381544a, 0x737e9f00, 0x737be96e, + 0x73793395, 0x73767d74, + 0x7373c70d, 0x7371105e, 0x736e5968, 0x736ba22b, 0x7368eaa6, 0x736632db, + 0x73637ac8, 0x7360c26e, + 0x735e09cd, 0x735b50e4, 0x735897b5, 0x7355de3e, 0x73532481, 0x73506a7c, + 0x734db030, 0x734af59d, + 0x73483ac2, 0x73457fa1, 0x7342c438, 0x73400889, 0x733d4c92, 0x733a9054, + 0x7337d3d0, 0x73351704, + 0x733259f1, 0x732f9c97, 0x732cdef6, 0x732a210d, 0x732762de, 0x7324a468, + 0x7321e5ab, 0x731f26a7, + 0x731c675b, 0x7319a7c9, 0x7316e7f0, 0x731427cf, 0x73116768, 0x730ea6ba, + 0x730be5c5, 0x73092489, + 0x73066306, 0x7303a13b, 0x7300df2a, 0x72fe1cd2, 0x72fb5a34, 0x72f8974e, + 0x72f5d421, 0x72f310ad, + 0x72f04cf3, 0x72ed88f1, 0x72eac4a9, 0x72e8001a, 0x72e53b44, 0x72e27627, + 0x72dfb0c3, 0x72dceb18, + 0x72da2526, 0x72d75eee, 0x72d4986f, 0x72d1d1a9, 0x72cf0a9c, 0x72cc4348, + 0x72c97bad, 0x72c6b3cc, + 0x72c3eba4, 0x72c12335, 0x72be5a7f, 0x72bb9183, 0x72b8c83f, 0x72b5feb5, + 0x72b334e4, 0x72b06acd, + 0x72ada06f, 0x72aad5c9, 0x72a80ade, 0x72a53fab, 0x72a27432, 0x729fa872, + 0x729cdc6b, 0x729a101e, + 0x7297438a, 0x729476af, 0x7291a98e, 0x728edc26, 0x728c0e77, 0x72894082, + 0x72867245, 0x7283a3c3, + 0x7280d4f9, 0x727e05e9, 0x727b3693, 0x727866f6, 0x72759712, 0x7272c6e7, + 0x726ff676, 0x726d25bf, + 0x726a54c1, 0x7267837c, 0x7264b1f0, 0x7261e01e, 0x725f0e06, 0x725c3ba7, + 0x72596901, 0x72569615, + 0x7253c2e3, 0x7250ef6a, 0x724e1baa, 0x724b47a4, 0x72487357, 0x72459ec4, + 0x7242c9ea, 0x723ff4ca, + 0x723d1f63, 0x723a49b6, 0x723773c3, 0x72349d89, 0x7231c708, 0x722ef041, + 0x722c1934, 0x722941e0, + 0x72266a46, 0x72239266, 0x7220ba3f, 0x721de1d1, 0x721b091d, 0x72183023, + 0x721556e3, 0x72127d5c, + 0x720fa38e, 0x720cc97b, 0x7209ef21, 0x72071480, 0x7204399a, 0x72015e6d, + 0x71fe82f9, 0x71fba740, + 0x71f8cb40, 0x71f5eefa, 0x71f3126d, 0x71f0359a, 0x71ed5881, 0x71ea7b22, + 0x71e79d7c, 0x71e4bf90, + 0x71e1e15e, 0x71df02e5, 0x71dc2427, 0x71d94522, 0x71d665d6, 0x71d38645, + 0x71d0a66d, 0x71cdc650, + 0x71cae5ec, 0x71c80542, 0x71c52451, 0x71c2431b, 0x71bf619e, 0x71bc7fdb, + 0x71b99dd2, 0x71b6bb83, + 0x71b3d8ed, 0x71b0f612, 0x71ae12f0, 0x71ab2f89, 0x71a84bdb, 0x71a567e7, + 0x71a283ad, 0x719f9f2c, + 0x719cba66, 0x7199d55a, 0x7196f008, 0x71940a6f, 0x71912490, 0x718e3e6c, + 0x718b5801, 0x71887151, + 0x71858a5a, 0x7182a31d, 0x717fbb9a, 0x717cd3d2, 0x7179ebc3, 0x7177036e, + 0x71741ad3, 0x717131f3, + 0x716e48cc, 0x716b5f5f, 0x716875ad, 0x71658bb4, 0x7162a175, 0x715fb6f1, + 0x715ccc26, 0x7159e116, + 0x7156f5c0, 0x71540a24, 0x71511e42, 0x714e321a, 0x714b45ac, 0x714858f8, + 0x71456bfe, 0x71427ebf, + 0x713f9139, 0x713ca36e, 0x7139b55d, 0x7136c706, 0x7133d869, 0x7130e987, + 0x712dfa5e, 0x712b0af0, + 0x71281b3c, 0x71252b42, 0x71223b02, 0x711f4a7d, 0x711c59b2, 0x711968a1, + 0x7116774a, 0x711385ad, + 0x711093cb, 0x710da1a3, 0x710aaf35, 0x7107bc82, 0x7104c989, 0x7101d64a, + 0x70fee2c5, 0x70fbeefb, + 0x70f8faeb, 0x70f60695, 0x70f311fa, 0x70f01d19, 0x70ed27f2, 0x70ea3286, + 0x70e73cd4, 0x70e446dc, + 0x70e1509f, 0x70de5a1c, 0x70db6353, 0x70d86c45, 0x70d574f1, 0x70d27d58, + 0x70cf8579, 0x70cc8d54, + 0x70c994ea, 0x70c69c3a, 0x70c3a345, 0x70c0aa0a, 0x70bdb08a, 0x70bab6c4, + 0x70b7bcb8, 0x70b4c267, + 0x70b1c7d1, 0x70aeccf5, 0x70abd1d3, 0x70a8d66c, 0x70a5dac0, 0x70a2dece, + 0x709fe296, 0x709ce619, + 0x7099e957, 0x7096ec4f, 0x7093ef01, 0x7090f16e, 0x708df396, 0x708af579, + 0x7087f715, 0x7084f86d, + 0x7081f97f, 0x707efa4c, 0x707bfad3, 0x7078fb15, 0x7075fb11, 0x7072fac9, + 0x706ffa3a, 0x706cf967, + 0x7069f84e, 0x7066f6f0, 0x7063f54c, 0x7060f363, 0x705df135, 0x705aeec1, + 0x7057ec08, 0x7054e90a, + 0x7051e5c7, 0x704ee23e, 0x704bde70, 0x7048da5d, 0x7045d604, 0x7042d166, + 0x703fcc83, 0x703cc75b, + 0x7039c1ed, 0x7036bc3b, 0x7033b643, 0x7030b005, 0x702da983, 0x702aa2bb, + 0x70279baf, 0x7024945d, + 0x70218cc6, 0x701e84e9, 0x701b7cc8, 0x70187461, 0x70156bb5, 0x701262c4, + 0x700f598e, 0x700c5013, + 0x70094653, 0x70063c4e, 0x70033203, 0x70002774, 0x6ffd1c9f, 0x6ffa1185, + 0x6ff70626, 0x6ff3fa82, + 0x6ff0ee99, 0x6fede26b, 0x6fead5f8, 0x6fe7c940, 0x6fe4bc43, 0x6fe1af01, + 0x6fdea17a, 0x6fdb93ae, + 0x6fd8859d, 0x6fd57746, 0x6fd268ab, 0x6fcf59cb, 0x6fcc4aa6, 0x6fc93b3c, + 0x6fc62b8d, 0x6fc31b99, + 0x6fc00b60, 0x6fbcfae2, 0x6fb9ea20, 0x6fb6d918, 0x6fb3c7cb, 0x6fb0b63a, + 0x6fada464, 0x6faa9248, + 0x6fa77fe8, 0x6fa46d43, 0x6fa15a59, 0x6f9e472b, 0x6f9b33b7, 0x6f981fff, + 0x6f950c01, 0x6f91f7bf, + 0x6f8ee338, 0x6f8bce6c, 0x6f88b95c, 0x6f85a407, 0x6f828e6c, 0x6f7f788d, + 0x6f7c626a, 0x6f794c01, + 0x6f763554, 0x6f731e62, 0x6f70072b, 0x6f6cefb0, 0x6f69d7f0, 0x6f66bfeb, + 0x6f63a7a1, 0x6f608f13, + 0x6f5d7640, 0x6f5a5d28, 0x6f5743cb, 0x6f542a2a, 0x6f511044, 0x6f4df61a, + 0x6f4adbab, 0x6f47c0f7, + 0x6f44a5ff, 0x6f418ac2, 0x6f3e6f40, 0x6f3b537a, 0x6f38376f, 0x6f351b1f, + 0x6f31fe8b, 0x6f2ee1b2, + 0x6f2bc495, 0x6f28a733, 0x6f25898d, 0x6f226ba2, 0x6f1f4d72, 0x6f1c2efe, + 0x6f191045, 0x6f15f148, + 0x6f12d206, 0x6f0fb280, 0x6f0c92b6, 0x6f0972a6, 0x6f065253, 0x6f0331ba, + 0x6f0010de, 0x6efcefbd, + 0x6ef9ce57, 0x6ef6acad, 0x6ef38abe, 0x6ef0688b, 0x6eed4614, 0x6eea2358, + 0x6ee70058, 0x6ee3dd13, + 0x6ee0b98a, 0x6edd95bd, 0x6eda71ab, 0x6ed74d55, 0x6ed428ba, 0x6ed103db, + 0x6ecddeb8, 0x6ecab950, + 0x6ec793a4, 0x6ec46db4, 0x6ec1477f, 0x6ebe2106, 0x6ebafa49, 0x6eb7d347, + 0x6eb4ac02, 0x6eb18477, + 0x6eae5ca9, 0x6eab3496, 0x6ea80c3f, 0x6ea4e3a4, 0x6ea1bac4, 0x6e9e91a1, + 0x6e9b6839, 0x6e983e8d, + 0x6e95149c, 0x6e91ea67, 0x6e8ebfef, 0x6e8b9532, 0x6e886a30, 0x6e853eeb, + 0x6e821361, 0x6e7ee794, + 0x6e7bbb82, 0x6e788f2c, 0x6e756291, 0x6e7235b3, 0x6e6f0890, 0x6e6bdb2a, + 0x6e68ad7f, 0x6e657f90, + 0x6e62515d, 0x6e5f22e6, 0x6e5bf42b, 0x6e58c52c, 0x6e5595e9, 0x6e526662, + 0x6e4f3696, 0x6e4c0687, + 0x6e48d633, 0x6e45a59c, 0x6e4274c1, 0x6e3f43a1, 0x6e3c123e, 0x6e38e096, + 0x6e35aeab, 0x6e327c7b, + 0x6e2f4a08, 0x6e2c1750, 0x6e28e455, 0x6e25b115, 0x6e227d92, 0x6e1f49cb, + 0x6e1c15c0, 0x6e18e171, + 0x6e15acde, 0x6e127807, 0x6e0f42ec, 0x6e0c0d8e, 0x6e08d7eb, 0x6e05a205, + 0x6e026bda, 0x6dff356c, + 0x6dfbfeba, 0x6df8c7c4, 0x6df5908b, 0x6df2590d, 0x6def214c, 0x6debe947, + 0x6de8b0fe, 0x6de57871, + 0x6de23fa0, 0x6ddf068c, 0x6ddbcd34, 0x6dd89398, 0x6dd559b9, 0x6dd21f95, + 0x6dcee52e, 0x6dcbaa83, + 0x6dc86f95, 0x6dc53462, 0x6dc1f8ec, 0x6dbebd33, 0x6dbb8135, 0x6db844f4, + 0x6db5086f, 0x6db1cba7, + 0x6dae8e9b, 0x6dab514b, 0x6da813b8, 0x6da4d5e1, 0x6da197c6, 0x6d9e5968, + 0x6d9b1ac6, 0x6d97dbe0, + 0x6d949cb7, 0x6d915d4a, 0x6d8e1d9a, 0x6d8adda6, 0x6d879d6e, 0x6d845cf3, + 0x6d811c35, 0x6d7ddb33, + 0x6d7a99ed, 0x6d775864, 0x6d741697, 0x6d70d487, 0x6d6d9233, 0x6d6a4f9c, + 0x6d670cc1, 0x6d63c9a3, + 0x6d608641, 0x6d5d429c, 0x6d59feb3, 0x6d56ba87, 0x6d537617, 0x6d503164, + 0x6d4cec6e, 0x6d49a734, + 0x6d4661b7, 0x6d431bf6, 0x6d3fd5f2, 0x6d3c8fab, 0x6d394920, 0x6d360252, + 0x6d32bb40, 0x6d2f73eb, + 0x6d2c2c53, 0x6d28e477, 0x6d259c58, 0x6d2253f6, 0x6d1f0b50, 0x6d1bc267, + 0x6d18793b, 0x6d152fcc, + 0x6d11e619, 0x6d0e9c23, 0x6d0b51e9, 0x6d08076d, 0x6d04bcad, 0x6d0171aa, + 0x6cfe2663, 0x6cfadada, + 0x6cf78f0d, 0x6cf442fd, 0x6cf0f6aa, 0x6cedaa13, 0x6cea5d3a, 0x6ce7101d, + 0x6ce3c2bd, 0x6ce0751a, + 0x6cdd2733, 0x6cd9d90a, 0x6cd68a9d, 0x6cd33bed, 0x6ccfecfa, 0x6ccc9dc4, + 0x6cc94e4b, 0x6cc5fe8f, + 0x6cc2ae90, 0x6cbf5e4d, 0x6cbc0dc8, 0x6cb8bcff, 0x6cb56bf4, 0x6cb21aa5, + 0x6caec913, 0x6cab773e, + 0x6ca82527, 0x6ca4d2cc, 0x6ca1802e, 0x6c9e2d4d, 0x6c9ada29, 0x6c9786c2, + 0x6c943318, 0x6c90df2c, + 0x6c8d8afc, 0x6c8a3689, 0x6c86e1d3, 0x6c838cdb, 0x6c80379f, 0x6c7ce220, + 0x6c798c5f, 0x6c76365b, + 0x6c72e013, 0x6c6f8989, 0x6c6c32bc, 0x6c68dbac, 0x6c658459, 0x6c622cc4, + 0x6c5ed4eb, 0x6c5b7cd0, + 0x6c582472, 0x6c54cbd1, 0x6c5172ed, 0x6c4e19c6, 0x6c4ac05d, 0x6c4766b0, + 0x6c440cc1, 0x6c40b28f, + 0x6c3d581b, 0x6c39fd63, 0x6c36a269, 0x6c33472c, 0x6c2febad, 0x6c2c8fea, + 0x6c2933e5, 0x6c25d79d, + 0x6c227b13, 0x6c1f1e45, 0x6c1bc136, 0x6c1863e3, 0x6c15064e, 0x6c11a876, + 0x6c0e4a5b, 0x6c0aebfe, + 0x6c078d5e, 0x6c042e7b, 0x6c00cf56, 0x6bfd6fee, 0x6bfa1044, 0x6bf6b056, + 0x6bf35027, 0x6befefb5, + 0x6bec8f00, 0x6be92e08, 0x6be5ccce, 0x6be26b52, 0x6bdf0993, 0x6bdba791, + 0x6bd8454d, 0x6bd4e2c6, + 0x6bd17ffd, 0x6bce1cf1, 0x6bcab9a3, 0x6bc75613, 0x6bc3f23f, 0x6bc08e2a, + 0x6bbd29d2, 0x6bb9c537, + 0x6bb6605a, 0x6bb2fb3b, 0x6baf95d9, 0x6bac3034, 0x6ba8ca4e, 0x6ba56425, + 0x6ba1fdb9, 0x6b9e970b, + 0x6b9b301b, 0x6b97c8e8, 0x6b946173, 0x6b90f9bc, 0x6b8d91c2, 0x6b8a2986, + 0x6b86c107, 0x6b835846, + 0x6b7fef43, 0x6b7c85fe, 0x6b791c76, 0x6b75b2ac, 0x6b7248a0, 0x6b6ede51, + 0x6b6b73c0, 0x6b6808ed, + 0x6b649dd8, 0x6b613280, 0x6b5dc6e6, 0x6b5a5b0a, 0x6b56eeec, 0x6b53828b, + 0x6b5015e9, 0x6b4ca904, + 0x6b493bdd, 0x6b45ce73, 0x6b4260c8, 0x6b3ef2da, 0x6b3b84ab, 0x6b381639, + 0x6b34a785, 0x6b31388e, + 0x6b2dc956, 0x6b2a59dc, 0x6b26ea1f, 0x6b237a21, 0x6b2009e0, 0x6b1c995d, + 0x6b192898, 0x6b15b791, + 0x6b124648, 0x6b0ed4bd, 0x6b0b62f0, 0x6b07f0e1, 0x6b047e90, 0x6b010bfd, + 0x6afd9928, 0x6afa2610, + 0x6af6b2b7, 0x6af33f1c, 0x6aefcb3f, 0x6aec5720, 0x6ae8e2bf, 0x6ae56e1c, + 0x6ae1f937, 0x6ade8410, + 0x6adb0ea8, 0x6ad798fd, 0x6ad42311, 0x6ad0ace2, 0x6acd3672, 0x6ac9bfc0, + 0x6ac648cb, 0x6ac2d195, + 0x6abf5a1e, 0x6abbe264, 0x6ab86a68, 0x6ab4f22b, 0x6ab179ac, 0x6aae00eb, + 0x6aaa87e8, 0x6aa70ea4, + 0x6aa3951d, 0x6aa01b55, 0x6a9ca14b, 0x6a992700, 0x6a95ac72, 0x6a9231a3, + 0x6a8eb692, 0x6a8b3b3f, + 0x6a87bfab, 0x6a8443d5, 0x6a80c7bd, 0x6a7d4b64, 0x6a79cec8, 0x6a7651ec, + 0x6a72d4cd, 0x6a6f576d, + 0x6a6bd9cb, 0x6a685be8, 0x6a64ddc2, 0x6a615f5c, 0x6a5de0b3, 0x6a5a61c9, + 0x6a56e29e, 0x6a536331, + 0x6a4fe382, 0x6a4c6391, 0x6a48e360, 0x6a4562ec, 0x6a41e237, 0x6a3e6140, + 0x6a3ae008, 0x6a375e8f, + 0x6a33dcd4, 0x6a305ad7, 0x6a2cd899, 0x6a295619, 0x6a25d358, 0x6a225055, + 0x6a1ecd11, 0x6a1b498c, + 0x6a17c5c5, 0x6a1441bc, 0x6a10bd72, 0x6a0d38e7, 0x6a09b41a, 0x6a062f0c, + 0x6a02a9bc, 0x69ff242b, + 0x69fb9e59, 0x69f81845, 0x69f491f0, 0x69f10b5a, 0x69ed8482, 0x69e9fd69, + 0x69e6760f, 0x69e2ee73, + 0x69df6696, 0x69dbde77, 0x69d85618, 0x69d4cd77, 0x69d14494, 0x69cdbb71, + 0x69ca320c, 0x69c6a866, + 0x69c31e7f, 0x69bf9456, 0x69bc09ec, 0x69b87f41, 0x69b4f455, 0x69b16928, + 0x69adddb9, 0x69aa5209, + 0x69a6c618, 0x69a339e6, 0x699fad73, 0x699c20be, 0x699893c9, 0x69950692, + 0x6991791a, 0x698deb61, + 0x698a5d67, 0x6986cf2c, 0x698340af, 0x697fb1f2, 0x697c22f3, 0x697893b4, + 0x69750433, 0x69717472, + 0x696de46f, 0x696a542b, 0x6966c3a6, 0x696332e1, 0x695fa1da, 0x695c1092, + 0x69587f09, 0x6954ed40, + 0x69515b35, 0x694dc8e9, 0x694a365c, 0x6946a38f, 0x69431080, 0x693f7d31, + 0x693be9a0, 0x693855cf, + 0x6934c1bd, 0x69312d6a, 0x692d98d6, 0x692a0401, 0x69266eeb, 0x6922d995, + 0x691f43fd, 0x691bae25, + 0x6918180c, 0x691481b2, 0x6910eb17, 0x690d543b, 0x6909bd1f, 0x690625c2, + 0x69028e24, 0x68fef645, + 0x68fb5e25, 0x68f7c5c5, 0x68f42d24, 0x68f09442, 0x68ecfb20, 0x68e961bd, + 0x68e5c819, 0x68e22e34, + 0x68de940f, 0x68daf9a9, 0x68d75f02, 0x68d3c41b, 0x68d028f2, 0x68cc8d8a, + 0x68c8f1e0, 0x68c555f6, + 0x68c1b9cc, 0x68be1d61, 0x68ba80b5, 0x68b6e3c8, 0x68b3469b, 0x68afa92e, + 0x68ac0b7f, 0x68a86d91, + 0x68a4cf61, 0x68a130f1, 0x689d9241, 0x6899f350, 0x6896541f, 0x6892b4ad, + 0x688f14fa, 0x688b7507, + 0x6887d4d4, 0x68843460, 0x688093ab, 0x687cf2b6, 0x68795181, 0x6875b00b, + 0x68720e55, 0x686e6c5e, + 0x686aca27, 0x686727b0, 0x686384f8, 0x685fe200, 0x685c3ec7, 0x68589b4e, + 0x6854f795, 0x6851539b, + 0x684daf61, 0x684a0ae6, 0x6846662c, 0x6842c131, 0x683f1bf5, 0x683b7679, + 0x6837d0bd, 0x68342ac1, + 0x68308485, 0x682cde08, 0x6829374b, 0x6825904d, 0x6821e910, 0x681e4192, + 0x681a99d4, 0x6816f1d6, + 0x68134997, 0x680fa118, 0x680bf85a, 0x68084f5a, 0x6804a61b, 0x6800fc9c, + 0x67fd52dc, 0x67f9a8dd, + 0x67f5fe9d, 0x67f2541d, 0x67eea95d, 0x67eafe5d, 0x67e7531c, 0x67e3a79c, + 0x67dffbdc, 0x67dc4fdb, + 0x67d8a39a, 0x67d4f71a, 0x67d14a59, 0x67cd9d58, 0x67c9f017, 0x67c64297, + 0x67c294d6, 0x67bee6d5, + 0x67bb3894, 0x67b78a13, 0x67b3db53, 0x67b02c52, 0x67ac7d11, 0x67a8cd91, + 0x67a51dd0, 0x67a16dcf, + 0x679dbd8f, 0x679a0d0f, 0x67965c4e, 0x6792ab4e, 0x678efa0e, 0x678b488e, + 0x678796ce, 0x6783e4cf, + 0x6780328f, 0x677c8010, 0x6778cd50, 0x67751a51, 0x67716713, 0x676db394, + 0x6769ffd5, 0x67664bd7, + 0x67629799, 0x675ee31b, 0x675b2e5e, 0x67577960, 0x6753c423, 0x67500ea7, + 0x674c58ea, 0x6748a2ee, + 0x6744ecb2, 0x67413636, 0x673d7f7b, 0x6739c880, 0x67361145, 0x673259ca, + 0x672ea210, 0x672aea17, + 0x672731dd, 0x67237964, 0x671fc0ac, 0x671c07b4, 0x67184e7c, 0x67149504, + 0x6710db4d, 0x670d2157, + 0x67096721, 0x6705acab, 0x6701f1f6, 0x66fe3701, 0x66fa7bcd, 0x66f6c059, + 0x66f304a6, 0x66ef48b3, + 0x66eb8c80, 0x66e7d00f, 0x66e4135d, 0x66e0566c, 0x66dc993c, 0x66d8dbcd, + 0x66d51e1d, 0x66d1602f, + 0x66cda201, 0x66c9e393, 0x66c624e7, 0x66c265fa, 0x66bea6cf, 0x66bae764, + 0x66b727ba, 0x66b367d0, + 0x66afa7a7, 0x66abe73f, 0x66a82697, 0x66a465b0, 0x66a0a489, 0x669ce324, + 0x6699217f, 0x66955f9b, + 0x66919d77, 0x668ddb14, 0x668a1872, 0x66865591, 0x66829270, 0x667ecf11, + 0x667b0b72, 0x66774793, + 0x66738376, 0x666fbf19, 0x666bfa7d, 0x666835a2, 0x66647088, 0x6660ab2f, + 0x665ce596, 0x66591fbf, + 0x665559a8, 0x66519352, 0x664dccbd, 0x664a05e9, 0x66463ed6, 0x66427784, + 0x663eaff2, 0x663ae822, + 0x66372012, 0x663357c4, 0x662f8f36, 0x662bc66a, 0x6627fd5e, 0x66243413, + 0x66206a8a, 0x661ca0c1, + 0x6618d6b9, 0x66150c73, 0x661141ed, 0x660d7729, 0x6609ac25, 0x6605e0e3, + 0x66021561, 0x65fe49a1, + 0x65fa7da2, 0x65f6b164, 0x65f2e4e7, 0x65ef182b, 0x65eb4b30, 0x65e77df6, + 0x65e3b07e, 0x65dfe2c6, + 0x65dc14d0, 0x65d8469b, 0x65d47827, 0x65d0a975, 0x65ccda83, 0x65c90b53, + 0x65c53be4, 0x65c16c36, + 0x65bd9c49, 0x65b9cc1e, 0x65b5fbb4, 0x65b22b0b, 0x65ae5a23, 0x65aa88fd, + 0x65a6b798, 0x65a2e5f4, + 0x659f1412, 0x659b41f1, 0x65976f91, 0x65939cf3, 0x658fca15, 0x658bf6fa, + 0x6588239f, 0x65845006, + 0x65807c2f, 0x657ca818, 0x6578d3c4, 0x6574ff30, 0x65712a5e, 0x656d554d, + 0x65697ffe, 0x6565aa71, + 0x6561d4a4, 0x655dfe99, 0x655a2850, 0x655651c8, 0x65527b02, 0x654ea3fd, + 0x654accba, 0x6546f538, + 0x65431d77, 0x653f4579, 0x653b6d3b, 0x653794c0, 0x6533bc06, 0x652fe30d, + 0x652c09d6, 0x65283061, + 0x652456ad, 0x65207cbb, 0x651ca28a, 0x6518c81b, 0x6514ed6e, 0x65111283, + 0x650d3759, 0x65095bf0, + 0x6505804a, 0x6501a465, 0x64fdc841, 0x64f9ebe0, 0x64f60f40, 0x64f23262, + 0x64ee5546, 0x64ea77eb, + 0x64e69a52, 0x64e2bc7b, 0x64dede66, 0x64db0012, 0x64d72180, 0x64d342b0, + 0x64cf63a2, 0x64cb8456, + 0x64c7a4cb, 0x64c3c502, 0x64bfe4fc, 0x64bc04b6, 0x64b82433, 0x64b44372, + 0x64b06273, 0x64ac8135, + 0x64a89fba, 0x64a4be00, 0x64a0dc08, 0x649cf9d2, 0x6499175e, 0x649534ac, + 0x649151bc, 0x648d6e8e, + 0x64898b22, 0x6485a778, 0x6481c390, 0x647ddf6a, 0x6479fb06, 0x64761664, + 0x64723184, 0x646e4c66, + 0x646a670a, 0x64668170, 0x64629b98, 0x645eb582, 0x645acf2e, 0x6456e89d, + 0x645301cd, 0x644f1ac0, + 0x644b3375, 0x64474bec, 0x64436425, 0x643f7c20, 0x643b93dd, 0x6437ab5d, + 0x6433c29f, 0x642fd9a3, + 0x642bf069, 0x642806f1, 0x64241d3c, 0x64203348, 0x641c4917, 0x64185ea9, + 0x641473fc, 0x64108912, + 0x640c9dea, 0x6408b284, 0x6404c6e1, 0x6400db00, 0x63fceee1, 0x63f90285, + 0x63f515eb, 0x63f12913, + 0x63ed3bfd, 0x63e94eaa, 0x63e5611a, 0x63e1734b, 0x63dd853f, 0x63d996f6, + 0x63d5a86f, 0x63d1b9aa, + 0x63cdcaa8, 0x63c9db68, 0x63c5ebeb, 0x63c1fc30, 0x63be0c37, 0x63ba1c01, + 0x63b62b8e, 0x63b23add, + 0x63ae49ee, 0x63aa58c2, 0x63a66759, 0x63a275b2, 0x639e83cd, 0x639a91ac, + 0x63969f4c, 0x6392acaf, + 0x638eb9d5, 0x638ac6be, 0x6386d369, 0x6382dfd6, 0x637eec07, 0x637af7fa, + 0x637703af, 0x63730f27, + 0x636f1a62, 0x636b2560, 0x63673020, 0x63633aa3, 0x635f44e8, 0x635b4ef0, + 0x635758bb, 0x63536249, + 0x634f6b99, 0x634b74ad, 0x63477d82, 0x6343861b, 0x633f8e76, 0x633b9695, + 0x63379e76, 0x6333a619, + 0x632fad80, 0x632bb4a9, 0x6327bb96, 0x6323c245, 0x631fc8b7, 0x631bceeb, + 0x6317d4e3, 0x6313da9e, + 0x630fe01b, 0x630be55b, 0x6307ea5e, 0x6303ef25, 0x62fff3ae, 0x62fbf7fa, + 0x62f7fc08, 0x62f3ffda, + 0x62f0036f, 0x62ec06c7, 0x62e809e2, 0x62e40cbf, 0x62e00f60, 0x62dc11c4, + 0x62d813eb, 0x62d415d4, + 0x62d01781, 0x62cc18f1, 0x62c81a24, 0x62c41b1a, 0x62c01bd3, 0x62bc1c4f, + 0x62b81c8f, 0x62b41c91, + 0x62b01c57, 0x62ac1bdf, 0x62a81b2b, 0x62a41a3a, 0x62a0190c, 0x629c17a1, + 0x629815fa, 0x62941415, + 0x629011f4, 0x628c0f96, 0x62880cfb, 0x62840a23, 0x6280070f, 0x627c03be, + 0x62780030, 0x6273fc65, + 0x626ff85e, 0x626bf41a, 0x6267ef99, 0x6263eadc, 0x625fe5e1, 0x625be0ab, + 0x6257db37, 0x6253d587, + 0x624fcf9a, 0x624bc970, 0x6247c30a, 0x6243bc68, 0x623fb588, 0x623bae6c, + 0x6237a714, 0x62339f7e, + 0x622f97ad, 0x622b8f9e, 0x62278754, 0x62237ecc, 0x621f7608, 0x621b6d08, + 0x621763cb, 0x62135a51, + 0x620f509b, 0x620b46a9, 0x62073c7a, 0x6203320e, 0x61ff2766, 0x61fb1c82, + 0x61f71161, 0x61f30604, + 0x61eefa6b, 0x61eaee95, 0x61e6e282, 0x61e2d633, 0x61dec9a8, 0x61dabce0, + 0x61d6afdd, 0x61d2a29c, + 0x61ce9520, 0x61ca8767, 0x61c67971, 0x61c26b40, 0x61be5cd2, 0x61ba4e28, + 0x61b63f41, 0x61b2301e, + 0x61ae20bf, 0x61aa1124, 0x61a6014d, 0x61a1f139, 0x619de0e9, 0x6199d05d, + 0x6195bf94, 0x6191ae90, + 0x618d9d4f, 0x61898bd2, 0x61857a19, 0x61816824, 0x617d55f2, 0x61794385, + 0x617530db, 0x61711df5, + 0x616d0ad3, 0x6168f775, 0x6164e3db, 0x6160d005, 0x615cbbf3, 0x6158a7a4, + 0x6154931a, 0x61507e54, + 0x614c6951, 0x61485413, 0x61443e98, 0x614028e2, 0x613c12f0, 0x6137fcc1, + 0x6133e657, 0x612fcfb0, + 0x612bb8ce, 0x6127a1b0, 0x61238a56, 0x611f72c0, 0x611b5aee, 0x611742e0, + 0x61132a96, 0x610f1210, + 0x610af94f, 0x6106e051, 0x6102c718, 0x60feada3, 0x60fa93f2, 0x60f67a05, + 0x60f25fdd, 0x60ee4579, + 0x60ea2ad8, 0x60e60ffd, 0x60e1f4e5, 0x60ddd991, 0x60d9be02, 0x60d5a237, + 0x60d18631, 0x60cd69ee, + 0x60c94d70, 0x60c530b6, 0x60c113c1, 0x60bcf690, 0x60b8d923, 0x60b4bb7a, + 0x60b09d96, 0x60ac7f76, + 0x60a8611b, 0x60a44284, 0x60a023b1, 0x609c04a3, 0x6097e559, 0x6093c5d3, + 0x608fa612, 0x608b8616, + 0x608765dd, 0x6083456a, 0x607f24ba, 0x607b03d0, 0x6076e2a9, 0x6072c148, + 0x606e9faa, 0x606a7dd2, + 0x60665bbd, 0x6062396e, 0x605e16e2, 0x6059f41c, 0x6055d11a, 0x6051addc, + 0x604d8a63, 0x604966af, + 0x604542bf, 0x60411e94, 0x603cfa2e, 0x6038d58c, 0x6034b0af, 0x60308b97, + 0x602c6643, 0x602840b4, + 0x60241ae9, 0x601ff4e3, 0x601bcea2, 0x6017a826, 0x6013816e, 0x600f5a7b, + 0x600b334d, 0x60070be4, + 0x6002e43f, 0x5ffebc5f, 0x5ffa9444, 0x5ff66bee, 0x5ff2435d, 0x5fee1a90, + 0x5fe9f188, 0x5fe5c845, + 0x5fe19ec7, 0x5fdd750e, 0x5fd94b19, 0x5fd520ea, 0x5fd0f67f, 0x5fcccbd9, + 0x5fc8a0f8, 0x5fc475dc, + 0x5fc04a85, 0x5fbc1ef3, 0x5fb7f326, 0x5fb3c71e, 0x5faf9adb, 0x5fab6e5d, + 0x5fa741a3, 0x5fa314af, + 0x5f9ee780, 0x5f9aba16, 0x5f968c70, 0x5f925e90, 0x5f8e3075, 0x5f8a021f, + 0x5f85d38e, 0x5f81a4c2, + 0x5f7d75bb, 0x5f794679, 0x5f7516fd, 0x5f70e745, 0x5f6cb753, 0x5f688726, + 0x5f6456be, 0x5f60261b, + 0x5f5bf53d, 0x5f57c424, 0x5f5392d1, 0x5f4f6143, 0x5f4b2f7a, 0x5f46fd76, + 0x5f42cb37, 0x5f3e98be, + 0x5f3a660a, 0x5f36331b, 0x5f31fff1, 0x5f2dcc8d, 0x5f2998ee, 0x5f256515, + 0x5f213100, 0x5f1cfcb1, + 0x5f18c827, 0x5f149363, 0x5f105e64, 0x5f0c292a, 0x5f07f3b6, 0x5f03be07, + 0x5eff881d, 0x5efb51f9, + 0x5ef71b9b, 0x5ef2e501, 0x5eeeae2d, 0x5eea771f, 0x5ee63fd6, 0x5ee20853, + 0x5eddd094, 0x5ed9989c, + 0x5ed56069, 0x5ed127fb, 0x5eccef53, 0x5ec8b671, 0x5ec47d54, 0x5ec043fc, + 0x5ebc0a6a, 0x5eb7d09e, + 0x5eb39697, 0x5eaf5c56, 0x5eab21da, 0x5ea6e724, 0x5ea2ac34, 0x5e9e7109, + 0x5e9a35a4, 0x5e95fa05, + 0x5e91be2b, 0x5e8d8217, 0x5e8945c8, 0x5e85093f, 0x5e80cc7c, 0x5e7c8f7f, + 0x5e785247, 0x5e7414d5, + 0x5e6fd729, 0x5e6b9943, 0x5e675b22, 0x5e631cc7, 0x5e5ede32, 0x5e5a9f62, + 0x5e566059, 0x5e522115, + 0x5e4de197, 0x5e49a1df, 0x5e4561ed, 0x5e4121c0, 0x5e3ce15a, 0x5e38a0b9, + 0x5e345fde, 0x5e301ec9, + 0x5e2bdd7a, 0x5e279bf1, 0x5e235a2e, 0x5e1f1830, 0x5e1ad5f9, 0x5e169388, + 0x5e1250dc, 0x5e0e0df7, + 0x5e09cad7, 0x5e05877e, 0x5e0143ea, 0x5dfd001d, 0x5df8bc15, 0x5df477d4, + 0x5df03359, 0x5debeea3, + 0x5de7a9b4, 0x5de3648b, 0x5ddf1f28, 0x5ddad98b, 0x5dd693b4, 0x5dd24da3, + 0x5dce0759, 0x5dc9c0d4, + 0x5dc57a16, 0x5dc1331d, 0x5dbcebeb, 0x5db8a480, 0x5db45cda, 0x5db014fa, + 0x5dabcce1, 0x5da7848e, + 0x5da33c01, 0x5d9ef33b, 0x5d9aaa3a, 0x5d966100, 0x5d92178d, 0x5d8dcddf, + 0x5d8983f8, 0x5d8539d7, + 0x5d80ef7c, 0x5d7ca4e8, 0x5d785a1a, 0x5d740f12, 0x5d6fc3d1, 0x5d6b7856, + 0x5d672ca2, 0x5d62e0b4, + 0x5d5e948c, 0x5d5a482a, 0x5d55fb90, 0x5d51aebb, 0x5d4d61ad, 0x5d491465, + 0x5d44c6e4, 0x5d40792a, + 0x5d3c2b35, 0x5d37dd08, 0x5d338ea0, 0x5d2f4000, 0x5d2af125, 0x5d26a212, + 0x5d2252c5, 0x5d1e033e, + 0x5d19b37e, 0x5d156385, 0x5d111352, 0x5d0cc2e5, 0x5d087240, 0x5d042161, + 0x5cffd048, 0x5cfb7ef7, + 0x5cf72d6b, 0x5cf2dba7, 0x5cee89a9, 0x5cea3772, 0x5ce5e501, 0x5ce19258, + 0x5cdd3f75, 0x5cd8ec58, + 0x5cd49903, 0x5cd04574, 0x5ccbf1ab, 0x5cc79daa, 0x5cc3496f, 0x5cbef4fc, + 0x5cbaa04f, 0x5cb64b68, + 0x5cb1f649, 0x5cada0f0, 0x5ca94b5e, 0x5ca4f594, 0x5ca09f8f, 0x5c9c4952, + 0x5c97f2dc, 0x5c939c2c, + 0x5c8f4544, 0x5c8aee22, 0x5c8696c7, 0x5c823f34, 0x5c7de767, 0x5c798f61, + 0x5c753722, 0x5c70deaa, + 0x5c6c85f9, 0x5c682d0f, 0x5c63d3eb, 0x5c5f7a8f, 0x5c5b20fa, 0x5c56c72c, + 0x5c526d25, 0x5c4e12e5, + 0x5c49b86d, 0x5c455dbb, 0x5c4102d0, 0x5c3ca7ad, 0x5c384c50, 0x5c33f0bb, + 0x5c2f94ec, 0x5c2b38e5, + 0x5c26dca5, 0x5c22802c, 0x5c1e237b, 0x5c19c690, 0x5c15696d, 0x5c110c11, + 0x5c0cae7c, 0x5c0850ae, + 0x5c03f2a8, 0x5bff9469, 0x5bfb35f1, 0x5bf6d740, 0x5bf27857, 0x5bee1935, + 0x5be9b9da, 0x5be55a46, + 0x5be0fa7a, 0x5bdc9a75, 0x5bd83a37, 0x5bd3d9c1, 0x5bcf7912, 0x5bcb182b, + 0x5bc6b70b, 0x5bc255b2, + 0x5bbdf421, 0x5bb99257, 0x5bb53054, 0x5bb0ce19, 0x5bac6ba6, 0x5ba808f9, + 0x5ba3a615, 0x5b9f42f7, + 0x5b9adfa2, 0x5b967c13, 0x5b92184d, 0x5b8db44d, 0x5b895016, 0x5b84eba6, + 0x5b8086fd, 0x5b7c221c, + 0x5b77bd02, 0x5b7357b0, 0x5b6ef226, 0x5b6a8c63, 0x5b662668, 0x5b61c035, + 0x5b5d59c9, 0x5b58f324, + 0x5b548c48, 0x5b502533, 0x5b4bbde6, 0x5b475660, 0x5b42eea2, 0x5b3e86ac, + 0x5b3a1e7e, 0x5b35b617, + 0x5b314d78, 0x5b2ce4a1, 0x5b287b91, 0x5b241249, 0x5b1fa8c9, 0x5b1b3f11, + 0x5b16d521, 0x5b126af8, + 0x5b0e0098, 0x5b0995ff, 0x5b052b2e, 0x5b00c025, 0x5afc54e3, 0x5af7e96a, + 0x5af37db8, 0x5aef11cf, + 0x5aeaa5ad, 0x5ae63953, 0x5ae1ccc1, 0x5add5ff7, 0x5ad8f2f5, 0x5ad485bb, + 0x5ad01849, 0x5acbaa9f, + 0x5ac73cbd, 0x5ac2cea3, 0x5abe6050, 0x5ab9f1c6, 0x5ab58304, 0x5ab1140a, + 0x5aaca4d8, 0x5aa8356f, + 0x5aa3c5cd, 0x5a9f55f3, 0x5a9ae5e2, 0x5a967598, 0x5a920517, 0x5a8d945d, + 0x5a89236c, 0x5a84b243, + 0x5a8040e3, 0x5a7bcf4a, 0x5a775d7a, 0x5a72eb71, 0x5a6e7931, 0x5a6a06ba, + 0x5a65940a, 0x5a612123, + 0x5a5cae04, 0x5a583aad, 0x5a53c71e, 0x5a4f5358, 0x5a4adf5a, 0x5a466b24, + 0x5a41f6b7, 0x5a3d8212, + 0x5a390d35, 0x5a349821, 0x5a3022d5, 0x5a2bad51, 0x5a273796, 0x5a22c1a3, + 0x5a1e4b79, 0x5a19d517, + 0x5a155e7d, 0x5a10e7ac, 0x5a0c70a3, 0x5a07f963, 0x5a0381eb, 0x59ff0a3c, + 0x59fa9255, 0x59f61a36, + 0x59f1a1e0, 0x59ed2953, 0x59e8b08e, 0x59e43792, 0x59dfbe5e, 0x59db44f3, + 0x59d6cb50, 0x59d25176, + 0x59cdd765, 0x59c95d1c, 0x59c4e29c, 0x59c067e4, 0x59bbecf5, 0x59b771cf, + 0x59b2f671, 0x59ae7add, + 0x59a9ff10, 0x59a5830d, 0x59a106d2, 0x599c8a60, 0x59980db6, 0x599390d5, + 0x598f13bd, 0x598a966e, + 0x598618e8, 0x59819b2a, 0x597d1d35, 0x59789f09, 0x597420a6, 0x596fa20b, + 0x596b233a, 0x5966a431, + 0x596224f1, 0x595da57a, 0x595925cc, 0x5954a5e6, 0x595025ca, 0x594ba576, + 0x594724ec, 0x5942a42a, + 0x593e2331, 0x5939a202, 0x5935209b, 0x59309efd, 0x592c1d28, 0x59279b1c, + 0x592318d9, 0x591e9660, + 0x591a13af, 0x591590c7, 0x59110da8, 0x590c8a53, 0x590806c6, 0x59038302, + 0x58feff08, 0x58fa7ad7, + 0x58f5f66e, 0x58f171cf, 0x58ececf9, 0x58e867ed, 0x58e3e2a9, 0x58df5d2e, + 0x58dad77d, 0x58d65195, + 0x58d1cb76, 0x58cd4520, 0x58c8be94, 0x58c437d1, 0x58bfb0d7, 0x58bb29a6, + 0x58b6a23e, 0x58b21aa0, + 0x58ad92cb, 0x58a90ac0, 0x58a4827d, 0x589ffa04, 0x589b7155, 0x5896e86f, + 0x58925f52, 0x588dd5fe, + 0x58894c74, 0x5884c2b3, 0x588038bb, 0x587bae8d, 0x58772429, 0x5872998e, + 0x586e0ebc, 0x586983b4, + 0x5864f875, 0x58606d00, 0x585be154, 0x58575571, 0x5852c958, 0x584e3d09, + 0x5849b083, 0x584523c7, + 0x584096d4, 0x583c09ab, 0x58377c4c, 0x5832eeb6, 0x582e60e9, 0x5829d2e6, + 0x582544ad, 0x5820b63e, + 0x581c2798, 0x581798bb, 0x581309a9, 0x580e7a60, 0x5809eae1, 0x58055b2b, + 0x5800cb3f, 0x57fc3b1d, + 0x57f7aac5, 0x57f31a36, 0x57ee8971, 0x57e9f876, 0x57e56744, 0x57e0d5dd, + 0x57dc443f, 0x57d7b26b, + 0x57d32061, 0x57ce8e20, 0x57c9fbaa, 0x57c568fd, 0x57c0d61a, 0x57bc4301, + 0x57b7afb2, 0x57b31c2d, + 0x57ae8872, 0x57a9f480, 0x57a56059, 0x57a0cbfb, 0x579c3768, 0x5797a29e, + 0x57930d9e, 0x578e7869, + 0x5789e2fd, 0x57854d5b, 0x5780b784, 0x577c2176, 0x57778b32, 0x5772f4b9, + 0x576e5e09, 0x5769c724, + 0x57653009, 0x576098b7, 0x575c0130, 0x57576973, 0x5752d180, 0x574e3957, + 0x5749a0f9, 0x57450864, + 0x57406f9a, 0x573bd69a, 0x57373d64, 0x5732a3f8, 0x572e0a56, 0x5729707f, + 0x5724d672, 0x57203c2f, + 0x571ba1b7, 0x57170708, 0x57126c24, 0x570dd10a, 0x570935bb, 0x57049a36, + 0x56fffe7b, 0x56fb628b, + 0x56f6c664, 0x56f22a09, 0x56ed8d77, 0x56e8f0b0, 0x56e453b4, 0x56dfb681, + 0x56db1919, 0x56d67b7c, + 0x56d1dda9, 0x56cd3fa1, 0x56c8a162, 0x56c402ef, 0x56bf6446, 0x56bac567, + 0x56b62653, 0x56b18709, + 0x56ace78a, 0x56a847d6, 0x56a3a7ec, 0x569f07cc, 0x569a6777, 0x5695c6ed, + 0x5691262d, 0x568c8538, + 0x5687e40e, 0x568342ae, 0x567ea118, 0x5679ff4e, 0x56755d4e, 0x5670bb19, + 0x566c18ae, 0x5667760e, + 0x5662d339, 0x565e302e, 0x56598cee, 0x5654e979, 0x565045cf, 0x564ba1f0, + 0x5646fddb, 0x56425991, + 0x563db512, 0x5639105d, 0x56346b74, 0x562fc655, 0x562b2101, 0x56267b78, + 0x5621d5ba, 0x561d2fc6, + 0x5618899e, 0x5613e340, 0x560f3cae, 0x560a95e6, 0x5605eee9, 0x560147b7, + 0x55fca050, 0x55f7f8b4, + 0x55f350e3, 0x55eea8dd, 0x55ea00a2, 0x55e55832, 0x55e0af8d, 0x55dc06b3, + 0x55d75da4, 0x55d2b460, + 0x55ce0ae7, 0x55c96139, 0x55c4b757, 0x55c00d3f, 0x55bb62f3, 0x55b6b871, + 0x55b20dbb, 0x55ad62d0, + 0x55a8b7b0, 0x55a40c5b, 0x559f60d1, 0x559ab513, 0x55960920, 0x55915cf8, + 0x558cb09b, 0x55880409, + 0x55835743, 0x557eaa48, 0x5579fd18, 0x55754fb3, 0x5570a21a, 0x556bf44c, + 0x55674649, 0x55629812, + 0x555de9a6, 0x55593b05, 0x55548c30, 0x554fdd26, 0x554b2de7, 0x55467e74, + 0x5541cecc, 0x553d1ef0, + 0x55386edf, 0x5533be99, 0x552f0e1f, 0x552a5d70, 0x5525ac8d, 0x5520fb75, + 0x551c4a29, 0x551798a8, + 0x5512e6f3, 0x550e3509, 0x550982eb, 0x5504d099, 0x55001e12, 0x54fb6b56, + 0x54f6b866, 0x54f20542, + 0x54ed51e9, 0x54e89e5c, 0x54e3ea9a, 0x54df36a5, 0x54da827a, 0x54d5ce1c, + 0x54d11989, 0x54cc64c2, + 0x54c7afc6, 0x54c2fa96, 0x54be4532, 0x54b98f9a, 0x54b4d9cd, 0x54b023cc, + 0x54ab6d97, 0x54a6b72e, + 0x54a20090, 0x549d49bf, 0x549892b9, 0x5493db7f, 0x548f2410, 0x548a6c6e, + 0x5485b497, 0x5480fc8c, + 0x547c444d, 0x54778bda, 0x5472d333, 0x546e1a58, 0x54696149, 0x5464a805, + 0x545fee8e, 0x545b34e3, + 0x54567b03, 0x5451c0f0, 0x544d06a8, 0x54484c2d, 0x5443917d, 0x543ed699, + 0x543a1b82, 0x54356037, + 0x5430a4b7, 0x542be904, 0x54272d1d, 0x54227102, 0x541db4b3, 0x5418f830, + 0x54143b79, 0x540f7e8e, + 0x540ac170, 0x5406041d, 0x54014697, 0x53fc88dd, 0x53f7caef, 0x53f30cce, + 0x53ee4e78, 0x53e98fef, + 0x53e4d132, 0x53e01242, 0x53db531d, 0x53d693c5, 0x53d1d439, 0x53cd147a, + 0x53c85486, 0x53c3945f, + 0x53bed405, 0x53ba1377, 0x53b552b5, 0x53b091bf, 0x53abd096, 0x53a70f39, + 0x53a24da9, 0x539d8be5, + 0x5398c9ed, 0x539407c2, 0x538f4564, 0x538a82d1, 0x5385c00c, 0x5380fd12, + 0x537c39e6, 0x53777685, + 0x5372b2f2, 0x536def2a, 0x53692b30, 0x53646701, 0x535fa2a0, 0x535ade0b, + 0x53561942, 0x53515447, + 0x534c8f17, 0x5347c9b5, 0x5343041f, 0x533e3e55, 0x53397859, 0x5334b229, + 0x532febc5, 0x532b252f, + 0x53265e65, 0x53219767, 0x531cd037, 0x531808d3, 0x5313413c, 0x530e7972, + 0x5309b174, 0x5304e943, + 0x530020df, 0x52fb5848, 0x52f68f7e, 0x52f1c680, 0x52ecfd4f, 0x52e833ec, + 0x52e36a55, 0x52dea08a, + 0x52d9d68d, 0x52d50c5d, 0x52d041f9, 0x52cb7763, 0x52c6ac99, 0x52c1e19d, + 0x52bd166d, 0x52b84b0a, + 0x52b37f74, 0x52aeb3ac, 0x52a9e7b0, 0x52a51b81, 0x52a04f1f, 0x529b828a, + 0x5296b5c3, 0x5291e8c8, + 0x528d1b9b, 0x52884e3a, 0x528380a7, 0x527eb2e0, 0x5279e4e7, 0x527516bb, + 0x5270485c, 0x526b79ca, + 0x5266ab06, 0x5261dc0e, 0x525d0ce4, 0x52583d87, 0x52536df7, 0x524e9e34, + 0x5249ce3f, 0x5244fe17, + 0x52402dbc, 0x523b5d2e, 0x52368c6e, 0x5231bb7b, 0x522cea55, 0x522818fc, + 0x52234771, 0x521e75b3, + 0x5219a3c3, 0x5214d1a0, 0x520fff4a, 0x520b2cc2, 0x52065a07, 0x52018719, + 0x51fcb3f9, 0x51f7e0a6, + 0x51f30d21, 0x51ee3969, 0x51e9657e, 0x51e49162, 0x51dfbd12, 0x51dae890, + 0x51d613dc, 0x51d13ef5, + 0x51cc69db, 0x51c79490, 0x51c2bf11, 0x51bde960, 0x51b9137d, 0x51b43d68, + 0x51af6720, 0x51aa90a5, + 0x51a5b9f9, 0x51a0e31a, 0x519c0c08, 0x519734c4, 0x51925d4e, 0x518d85a6, + 0x5188adcb, 0x5183d5be, + 0x517efd7f, 0x517a250d, 0x51754c69, 0x51707393, 0x516b9a8b, 0x5166c150, + 0x5161e7e4, 0x515d0e45, + 0x51583473, 0x51535a70, 0x514e803b, 0x5149a5d3, 0x5144cb39, 0x513ff06d, + 0x513b156f, 0x51363a3f, + 0x51315edd, 0x512c8348, 0x5127a782, 0x5122cb8a, 0x511def5f, 0x51191302, + 0x51143674, 0x510f59b3, + 0x510a7cc1, 0x51059f9c, 0x5100c246, 0x50fbe4bd, 0x50f70703, 0x50f22916, + 0x50ed4af8, 0x50e86ca8, + 0x50e38e25, 0x50deaf71, 0x50d9d08b, 0x50d4f173, 0x50d0122a, 0x50cb32ae, + 0x50c65301, 0x50c17322, + 0x50bc9311, 0x50b7b2ce, 0x50b2d259, 0x50adf1b3, 0x50a910db, 0x50a42fd1, + 0x509f4e95, 0x509a6d28, + 0x50958b88, 0x5090a9b8, 0x508bc7b5, 0x5086e581, 0x5082031b, 0x507d2083, + 0x50783dba, 0x50735abf, + 0x506e7793, 0x50699435, 0x5064b0a5, 0x505fcce4, 0x505ae8f1, 0x505604cd, + 0x50512077, 0x504c3bef, + 0x50475736, 0x5042724c, 0x503d8d30, 0x5038a7e2, 0x5033c263, 0x502edcb2, + 0x5029f6d1, 0x502510bd, + 0x50202a78, 0x501b4402, 0x50165d5a, 0x50117681, 0x500c8f77, 0x5007a83b, + 0x5002c0cd, 0x4ffdd92f, + 0x4ff8f15f, 0x4ff4095e, 0x4fef212b, 0x4fea38c7, 0x4fe55032, 0x4fe0676c, + 0x4fdb7e74, 0x4fd6954b, + 0x4fd1abf0, 0x4fccc265, 0x4fc7d8a8, 0x4fc2eeba, 0x4fbe049b, 0x4fb91a4b, + 0x4fb42fc9, 0x4faf4517, + 0x4faa5a33, 0x4fa56f1e, 0x4fa083d8, 0x4f9b9861, 0x4f96acb8, 0x4f91c0df, + 0x4f8cd4d4, 0x4f87e899, + 0x4f82fc2c, 0x4f7e0f8f, 0x4f7922c0, 0x4f7435c0, 0x4f6f488f, 0x4f6a5b2e, + 0x4f656d9b, 0x4f607fd7, + 0x4f5b91e3, 0x4f56a3bd, 0x4f51b566, 0x4f4cc6df, 0x4f47d827, 0x4f42e93d, + 0x4f3dfa23, 0x4f390ad8, + 0x4f341b5c, 0x4f2f2baf, 0x4f2a3bd2, 0x4f254bc3, 0x4f205b84, 0x4f1b6b14, + 0x4f167a73, 0x4f1189a1, + 0x4f0c989f, 0x4f07a76b, 0x4f02b608, 0x4efdc473, 0x4ef8d2ad, 0x4ef3e0b7, + 0x4eeeee90, 0x4ee9fc39, + 0x4ee509b1, 0x4ee016f8, 0x4edb240e, 0x4ed630f4, 0x4ed13da9, 0x4ecc4a2e, + 0x4ec75682, 0x4ec262a5, + 0x4ebd6e98, 0x4eb87a5a, 0x4eb385ec, 0x4eae914d, 0x4ea99c7d, 0x4ea4a77d, + 0x4e9fb24d, 0x4e9abcec, + 0x4e95c75b, 0x4e90d199, 0x4e8bdba6, 0x4e86e583, 0x4e81ef30, 0x4e7cf8ac, + 0x4e7801f8, 0x4e730b14, + 0x4e6e13ff, 0x4e691cba, 0x4e642544, 0x4e5f2d9e, 0x4e5a35c7, 0x4e553dc1, + 0x4e50458a, 0x4e4b4d22, + 0x4e46548b, 0x4e415bc3, 0x4e3c62cb, 0x4e3769a2, 0x4e32704a, 0x4e2d76c1, + 0x4e287d08, 0x4e23831e, + 0x4e1e8905, 0x4e198ebb, 0x4e149441, 0x4e0f9997, 0x4e0a9ebd, 0x4e05a3b2, + 0x4e00a878, 0x4dfbad0d, + 0x4df6b173, 0x4df1b5a8, 0x4decb9ad, 0x4de7bd82, 0x4de2c127, 0x4dddc49c, + 0x4dd8c7e1, 0x4dd3caf6, + 0x4dcecdda, 0x4dc9d08f, 0x4dc4d314, 0x4dbfd569, 0x4dbad78e, 0x4db5d983, + 0x4db0db48, 0x4dabdcdd, + 0x4da6de43, 0x4da1df78, 0x4d9ce07d, 0x4d97e153, 0x4d92e1f9, 0x4d8de26f, + 0x4d88e2b5, 0x4d83e2cb, + 0x4d7ee2b1, 0x4d79e268, 0x4d74e1ef, 0x4d6fe146, 0x4d6ae06d, 0x4d65df64, + 0x4d60de2c, 0x4d5bdcc4, + 0x4d56db2d, 0x4d51d965, 0x4d4cd76e, 0x4d47d547, 0x4d42d2f1, 0x4d3dd06b, + 0x4d38cdb5, 0x4d33cad0, + 0x4d2ec7bb, 0x4d29c476, 0x4d24c102, 0x4d1fbd5e, 0x4d1ab98b, 0x4d15b588, + 0x4d10b155, 0x4d0bacf3, + 0x4d06a862, 0x4d01a3a0, 0x4cfc9eb0, 0x4cf79990, 0x4cf29440, 0x4ced8ec1, + 0x4ce88913, 0x4ce38335, + 0x4cde7d28, 0x4cd976eb, 0x4cd4707f, 0x4ccf69e3, 0x4cca6318, 0x4cc55c1e, + 0x4cc054f4, 0x4cbb4d9b, + 0x4cb64613, 0x4cb13e5b, 0x4cac3674, 0x4ca72e5e, 0x4ca22619, 0x4c9d1da4, + 0x4c981500, 0x4c930c2d, + 0x4c8e032a, 0x4c88f9f8, 0x4c83f097, 0x4c7ee707, 0x4c79dd48, 0x4c74d359, + 0x4c6fc93b, 0x4c6abeef, + 0x4c65b473, 0x4c60a9c8, 0x4c5b9eed, 0x4c5693e4, 0x4c5188ac, 0x4c4c7d44, + 0x4c4771ae, 0x4c4265e8, + 0x4c3d59f3, 0x4c384dd0, 0x4c33417d, 0x4c2e34fb, 0x4c29284b, 0x4c241b6b, + 0x4c1f0e5c, 0x4c1a011f, + 0x4c14f3b2, 0x4c0fe617, 0x4c0ad84c, 0x4c05ca53, 0x4c00bc2b, 0x4bfbadd4, + 0x4bf69f4e, 0x4bf19099, + 0x4bec81b5, 0x4be772a3, 0x4be26362, 0x4bdd53f2, 0x4bd84453, 0x4bd33485, + 0x4bce2488, 0x4bc9145d, + 0x4bc40403, 0x4bbef37b, 0x4bb9e2c3, 0x4bb4d1dd, 0x4bafc0c8, 0x4baaaf85, + 0x4ba59e12, 0x4ba08c72, + 0x4b9b7aa2, 0x4b9668a4, 0x4b915677, 0x4b8c441c, 0x4b873192, 0x4b821ed9, + 0x4b7d0bf2, 0x4b77f8dc, + 0x4b72e598, 0x4b6dd225, 0x4b68be84, 0x4b63aab4, 0x4b5e96b6, 0x4b598289, + 0x4b546e2d, 0x4b4f59a4, + 0x4b4a44eb, 0x4b453005, 0x4b401aef, 0x4b3b05ac, 0x4b35f03a, 0x4b30da9a, + 0x4b2bc4cb, 0x4b26aece, + 0x4b2198a2, 0x4b1c8248, 0x4b176bc0, 0x4b12550a, 0x4b0d3e25, 0x4b082712, + 0x4b030fd1, 0x4afdf861, + 0x4af8e0c3, 0x4af3c8f7, 0x4aeeb0fd, 0x4ae998d4, 0x4ae4807d, 0x4adf67f8, + 0x4ada4f45, 0x4ad53664, + 0x4ad01d54, 0x4acb0417, 0x4ac5eaab, 0x4ac0d111, 0x4abbb749, 0x4ab69d53, + 0x4ab1832f, 0x4aac68dc, + 0x4aa74e5c, 0x4aa233ae, 0x4a9d18d1, 0x4a97fdc7, 0x4a92e28e, 0x4a8dc728, + 0x4a88ab93, 0x4a838fd1, + 0x4a7e73e0, 0x4a7957c2, 0x4a743b76, 0x4a6f1efc, 0x4a6a0253, 0x4a64e57d, + 0x4a5fc879, 0x4a5aab48, + 0x4a558de8, 0x4a50705a, 0x4a4b529f, 0x4a4634b6, 0x4a41169f, 0x4a3bf85a, + 0x4a36d9e7, 0x4a31bb47, + 0x4a2c9c79, 0x4a277d7d, 0x4a225e53, 0x4a1d3efc, 0x4a181f77, 0x4a12ffc4, + 0x4a0ddfe4, 0x4a08bfd5, + 0x4a039f9a, 0x49fe7f30, 0x49f95e99, 0x49f43dd4, 0x49ef1ce2, 0x49e9fbc2, + 0x49e4da74, 0x49dfb8f9, + 0x49da9750, 0x49d5757a, 0x49d05376, 0x49cb3145, 0x49c60ee6, 0x49c0ec59, + 0x49bbc9a0, 0x49b6a6b8, + 0x49b183a3, 0x49ac6061, 0x49a73cf1, 0x49a21954, 0x499cf589, 0x4997d191, + 0x4992ad6c, 0x498d8919, + 0x49886499, 0x49833fec, 0x497e1b11, 0x4978f609, 0x4973d0d3, 0x496eab70, + 0x496985e0, 0x49646023, + 0x495f3a38, 0x495a1420, 0x4954eddb, 0x494fc768, 0x494aa0c9, 0x494579fc, + 0x49405302, 0x493b2bdb, + 0x49360486, 0x4930dd05, 0x492bb556, 0x49268d7a, 0x49216571, 0x491c3d3b, + 0x491714d8, 0x4911ec47, + 0x490cc38a, 0x49079aa0, 0x49027188, 0x48fd4844, 0x48f81ed2, 0x48f2f534, + 0x48edcb68, 0x48e8a170, + 0x48e3774a, 0x48de4cf8, 0x48d92278, 0x48d3f7cc, 0x48ceccf3, 0x48c9a1ed, + 0x48c476b9, 0x48bf4b59, + 0x48ba1fcd, 0x48b4f413, 0x48afc82c, 0x48aa9c19, 0x48a56fd9, 0x48a0436c, + 0x489b16d2, 0x4895ea0b, + 0x4890bd18, 0x488b8ff8, 0x488662ab, 0x48813531, 0x487c078b, 0x4876d9b8, + 0x4871abb8, 0x486c7d8c, + 0x48674f33, 0x486220ad, 0x485cf1fa, 0x4857c31b, 0x48529410, 0x484d64d7, + 0x48483572, 0x484305e1, + 0x483dd623, 0x4838a638, 0x48337621, 0x482e45dd, 0x4829156d, 0x4823e4d0, + 0x481eb407, 0x48198311, + 0x481451ef, 0x480f20a0, 0x4809ef25, 0x4804bd7e, 0x47ff8baa, 0x47fa59a9, + 0x47f5277d, 0x47eff523, + 0x47eac29e, 0x47e58fec, 0x47e05d0e, 0x47db2a03, 0x47d5f6cc, 0x47d0c369, + 0x47cb8fd9, 0x47c65c1d, + 0x47c12835, 0x47bbf421, 0x47b6bfe0, 0x47b18b74, 0x47ac56da, 0x47a72215, + 0x47a1ed24, 0x479cb806, + 0x479782bc, 0x47924d46, 0x478d17a4, 0x4787e1d6, 0x4782abdb, 0x477d75b5, + 0x47783f62, 0x477308e3, + 0x476dd239, 0x47689b62, 0x4763645f, 0x475e2d30, 0x4758f5d5, 0x4753be4e, + 0x474e869b, 0x47494ebc, + 0x474416b1, 0x473ede7a, 0x4739a617, 0x47346d89, 0x472f34ce, 0x4729fbe7, + 0x4724c2d5, 0x471f8996, + 0x471a502c, 0x47151696, 0x470fdcd4, 0x470aa2e6, 0x470568cd, 0x47002e87, + 0x46faf416, 0x46f5b979, + 0x46f07eb0, 0x46eb43bc, 0x46e6089b, 0x46e0cd4f, 0x46db91d8, 0x46d65634, + 0x46d11a65, 0x46cbde6a, + 0x46c6a244, 0x46c165f1, 0x46bc2974, 0x46b6ecca, 0x46b1aff5, 0x46ac72f4, + 0x46a735c8, 0x46a1f870, + 0x469cbaed, 0x46977d3e, 0x46923f63, 0x468d015d, 0x4687c32c, 0x468284cf, + 0x467d4646, 0x46780792, + 0x4672c8b3, 0x466d89a8, 0x46684a71, 0x46630b0f, 0x465dcb82, 0x46588bc9, + 0x46534be5, 0x464e0bd6, + 0x4648cb9b, 0x46438b35, 0x463e4aa3, 0x463909e7, 0x4633c8fe, 0x462e87eb, + 0x462946ac, 0x46240542, + 0x461ec3ad, 0x461981ec, 0x46144001, 0x460efde9, 0x4609bba7, 0x4604793a, + 0x45ff36a1, 0x45f9f3dd, + 0x45f4b0ee, 0x45ef6dd4, 0x45ea2a8f, 0x45e4e71f, 0x45dfa383, 0x45da5fbc, + 0x45d51bcb, 0x45cfd7ae, + 0x45ca9366, 0x45c54ef3, 0x45c00a55, 0x45bac58c, 0x45b58098, 0x45b03b79, + 0x45aaf630, 0x45a5b0bb, + 0x45a06b1b, 0x459b2550, 0x4595df5a, 0x45909939, 0x458b52ee, 0x45860c77, + 0x4580c5d6, 0x457b7f0a, + 0x45763813, 0x4570f0f1, 0x456ba9a4, 0x4566622c, 0x45611a8a, 0x455bd2bc, + 0x45568ac4, 0x455142a2, + 0x454bfa54, 0x4546b1dc, 0x45416939, 0x453c206b, 0x4536d773, 0x45318e4f, + 0x452c4502, 0x4526fb89, + 0x4521b1e6, 0x451c6818, 0x45171e20, 0x4511d3fd, 0x450c89af, 0x45073f37, + 0x4501f494, 0x44fca9c6, + 0x44f75ecf, 0x44f213ac, 0x44ecc85f, 0x44e77ce7, 0x44e23145, 0x44dce579, + 0x44d79982, 0x44d24d60, + 0x44cd0114, 0x44c7b49e, 0x44c267fd, 0x44bd1b32, 0x44b7ce3c, 0x44b2811c, + 0x44ad33d2, 0x44a7e65d, + 0x44a298be, 0x449d4af5, 0x4497fd01, 0x4492aee3, 0x448d609b, 0x44881228, + 0x4482c38b, 0x447d74c4, + 0x447825d2, 0x4472d6b7, 0x446d8771, 0x44683801, 0x4462e866, 0x445d98a2, + 0x445848b3, 0x4452f89b, + 0x444da858, 0x444857ea, 0x44430753, 0x443db692, 0x443865a7, 0x44331491, + 0x442dc351, 0x442871e8, + 0x44232054, 0x441dce96, 0x44187caf, 0x44132a9d, 0x440dd861, 0x440885fc, + 0x4403336c, 0x43fde0b2, + 0x43f88dcf, 0x43f33ac1, 0x43ede78a, 0x43e89429, 0x43e3409d, 0x43ddece8, + 0x43d8990a, 0x43d34501, + 0x43cdf0ce, 0x43c89c72, 0x43c347eb, 0x43bdf33b, 0x43b89e62, 0x43b3495e, + 0x43adf431, 0x43a89ed9, + 0x43a34959, 0x439df3ae, 0x43989dda, 0x439347dc, 0x438df1b4, 0x43889b63, + 0x438344e8, 0x437dee43, + 0x43789775, 0x4373407d, 0x436de95b, 0x43689210, 0x43633a9c, 0x435de2fd, + 0x43588b36, 0x43533344, + 0x434ddb29, 0x434882e5, 0x43432a77, 0x433dd1e0, 0x4338791f, 0x43332035, + 0x432dc721, 0x43286de4, + 0x4323147d, 0x431dbaed, 0x43186133, 0x43130751, 0x430dad44, 0x4308530f, + 0x4302f8b0, 0x42fd9e28, + 0x42f84376, 0x42f2e89b, 0x42ed8d97, 0x42e83269, 0x42e2d713, 0x42dd7b93, + 0x42d81fe9, 0x42d2c417, + 0x42cd681b, 0x42c80bf6, 0x42c2afa8, 0x42bd5331, 0x42b7f690, 0x42b299c7, + 0x42ad3cd4, 0x42a7dfb8, + 0x42a28273, 0x429d2505, 0x4297c76e, 0x429269ae, 0x428d0bc4, 0x4287adb2, + 0x42824f76, 0x427cf112, + 0x42779285, 0x427233ce, 0x426cd4ef, 0x426775e6, 0x426216b5, 0x425cb75a, + 0x425757d7, 0x4251f82b, + 0x424c9856, 0x42473858, 0x4241d831, 0x423c77e1, 0x42371769, 0x4231b6c7, + 0x422c55fd, 0x4226f50a, + 0x422193ee, 0x421c32a9, 0x4216d13c, 0x42116fa5, 0x420c0de6, 0x4206abfe, + 0x420149ee, 0x41fbe7b5, + 0x41f68553, 0x41f122c8, 0x41ebc015, 0x41e65d39, 0x41e0fa35, 0x41db9707, + 0x41d633b1, 0x41d0d033, + 0x41cb6c8c, 0x41c608bc, 0x41c0a4c4, 0x41bb40a3, 0x41b5dc5a, 0x41b077e8, + 0x41ab134e, 0x41a5ae8b, + 0x41a049a0, 0x419ae48c, 0x41957f4f, 0x419019eb, 0x418ab45d, 0x41854ea8, + 0x417fe8ca, 0x417a82c3, + 0x41751c94, 0x416fb63d, 0x416a4fbd, 0x4164e916, 0x415f8245, 0x415a1b4d, + 0x4154b42c, 0x414f4ce2, + 0x4149e571, 0x41447dd7, 0x413f1615, 0x4139ae2b, 0x41344618, 0x412edddd, + 0x4129757b, 0x41240cef, + 0x411ea43c, 0x41193b61, 0x4113d25d, 0x410e6931, 0x4108ffdd, 0x41039661, + 0x40fe2cbd, 0x40f8c2f1, + 0x40f358fc, 0x40edeee0, 0x40e8849b, 0x40e31a2f, 0x40ddaf9b, 0x40d844de, + 0x40d2d9f9, 0x40cd6eed, + 0x40c803b8, 0x40c2985c, 0x40bd2cd8, 0x40b7c12b, 0x40b25557, 0x40ace95b, + 0x40a77d37, 0x40a210eb, + 0x409ca477, 0x409737dc, 0x4091cb18, 0x408c5e2d, 0x4086f11a, 0x408183df, + 0x407c167c, 0x4076a8f1, + 0x40713b3f, 0x406bcd65, 0x40665f63, 0x4060f13a, 0x405b82e9, 0x40561470, + 0x4050a5cf, 0x404b3707, + 0x4045c817, 0x404058ff, 0x403ae9c0, 0x40357a59, 0x40300acb, 0x402a9b15, + 0x40252b37, 0x401fbb32, + 0x401a4b05, 0x4014dab1, 0x400f6a35, 0x4009f992, 0x400488c7, 0x3fff17d5, + 0x3ff9a6bb, 0x3ff4357a, + 0x3feec411, 0x3fe95281, 0x3fe3e0c9, 0x3fde6eeb, 0x3fd8fce4, 0x3fd38ab6, + 0x3fce1861, 0x3fc8a5e5, + 0x3fc33341, 0x3fbdc076, 0x3fb84d83, 0x3fb2da6a, 0x3fad6729, 0x3fa7f3c0, + 0x3fa28031, 0x3f9d0c7a, + 0x3f97989c, 0x3f922496, 0x3f8cb06a, 0x3f873c16, 0x3f81c79b, 0x3f7c52f9, + 0x3f76de30, 0x3f71693f, + 0x3f6bf428, 0x3f667ee9, 0x3f610983, 0x3f5b93f6, 0x3f561e42, 0x3f50a867, + 0x3f4b3265, 0x3f45bc3c, + 0x3f4045ec, 0x3f3acf75, 0x3f3558d7, 0x3f2fe211, 0x3f2a6b25, 0x3f24f412, + 0x3f1f7cd8, 0x3f1a0577, + 0x3f148def, 0x3f0f1640, 0x3f099e6b, 0x3f04266e, 0x3efeae4a, 0x3ef93600, + 0x3ef3bd8f, 0x3eee44f7, + 0x3ee8cc38, 0x3ee35352, 0x3eddda46, 0x3ed86113, 0x3ed2e7b9, 0x3ecd6e38, + 0x3ec7f491, 0x3ec27ac2, + 0x3ebd00cd, 0x3eb786b2, 0x3eb20c6f, 0x3eac9206, 0x3ea71777, 0x3ea19cc1, + 0x3e9c21e4, 0x3e96a6e0, + 0x3e912bb6, 0x3e8bb065, 0x3e8634ee, 0x3e80b950, 0x3e7b3d8c, 0x3e75c1a1, + 0x3e70458f, 0x3e6ac957, + 0x3e654cf8, 0x3e5fd073, 0x3e5a53c8, 0x3e54d6f6, 0x3e4f59fe, 0x3e49dcdf, + 0x3e445f99, 0x3e3ee22e, + 0x3e39649c, 0x3e33e6e3, 0x3e2e6904, 0x3e28eaff, 0x3e236cd4, 0x3e1dee82, + 0x3e18700a, 0x3e12f16b, + 0x3e0d72a6, 0x3e07f3bb, 0x3e0274aa, 0x3dfcf572, 0x3df77615, 0x3df1f691, + 0x3dec76e6, 0x3de6f716, + 0x3de1771f, 0x3ddbf703, 0x3dd676c0, 0x3dd0f656, 0x3dcb75c7, 0x3dc5f512, + 0x3dc07436, 0x3dbaf335, + 0x3db5720d, 0x3daff0c0, 0x3daa6f4c, 0x3da4edb2, 0x3d9f6bf2, 0x3d99ea0d, + 0x3d946801, 0x3d8ee5cf, + 0x3d896377, 0x3d83e0f9, 0x3d7e5e56, 0x3d78db8c, 0x3d73589d, 0x3d6dd587, + 0x3d68524c, 0x3d62ceeb, + 0x3d5d4b64, 0x3d57c7b7, 0x3d5243e4, 0x3d4cbfeb, 0x3d473bcd, 0x3d41b789, + 0x3d3c331f, 0x3d36ae8f, + 0x3d3129da, 0x3d2ba4fe, 0x3d261ffd, 0x3d209ad7, 0x3d1b158a, 0x3d159018, + 0x3d100a80, 0x3d0a84c3, + 0x3d04fee0, 0x3cff78d7, 0x3cf9f2a9, 0x3cf46c55, 0x3ceee5db, 0x3ce95f3c, + 0x3ce3d877, 0x3cde518d, + 0x3cd8ca7d, 0x3cd34347, 0x3ccdbbed, 0x3cc8346c, 0x3cc2acc6, 0x3cbd24fb, + 0x3cb79d0a, 0x3cb214f4, + 0x3cac8cb8, 0x3ca70457, 0x3ca17bd0, 0x3c9bf324, 0x3c966a53, 0x3c90e15c, + 0x3c8b5840, 0x3c85cefe, + 0x3c804598, 0x3c7abc0c, 0x3c75325a, 0x3c6fa883, 0x3c6a1e87, 0x3c649466, + 0x3c5f0a20, 0x3c597fb4, + 0x3c53f523, 0x3c4e6a6d, 0x3c48df91, 0x3c435491, 0x3c3dc96b, 0x3c383e20, + 0x3c32b2b0, 0x3c2d271b, + 0x3c279b61, 0x3c220f81, 0x3c1c837d, 0x3c16f753, 0x3c116b04, 0x3c0bde91, + 0x3c0651f8, 0x3c00c53a, + 0x3bfb3857, 0x3bf5ab50, 0x3bf01e23, 0x3bea90d1, 0x3be5035a, 0x3bdf75bf, + 0x3bd9e7fe, 0x3bd45a19, + 0x3bcecc0e, 0x3bc93ddf, 0x3bc3af8b, 0x3bbe2112, 0x3bb89274, 0x3bb303b1, + 0x3bad74c9, 0x3ba7e5bd, + 0x3ba2568c, 0x3b9cc736, 0x3b9737bb, 0x3b91a81c, 0x3b8c1857, 0x3b86886e, + 0x3b80f861, 0x3b7b682e, + 0x3b75d7d7, 0x3b70475c, 0x3b6ab6bb, 0x3b6525f6, 0x3b5f950c, 0x3b5a03fe, + 0x3b5472cb, 0x3b4ee173, + 0x3b494ff7, 0x3b43be57, 0x3b3e2c91, 0x3b389aa8, 0x3b330899, 0x3b2d7666, + 0x3b27e40f, 0x3b225193, + 0x3b1cbef3, 0x3b172c2e, 0x3b119945, 0x3b0c0637, 0x3b067305, 0x3b00dfaf, + 0x3afb4c34, 0x3af5b894, + 0x3af024d1, 0x3aea90e9, 0x3ae4fcdc, 0x3adf68ac, 0x3ad9d457, 0x3ad43fdd, + 0x3aceab40, 0x3ac9167e, + 0x3ac38198, 0x3abdec8d, 0x3ab8575f, 0x3ab2c20c, 0x3aad2c95, 0x3aa796fa, + 0x3aa2013a, 0x3a9c6b57, + 0x3a96d54f, 0x3a913f23, 0x3a8ba8d3, 0x3a86125f, 0x3a807bc7, 0x3a7ae50a, + 0x3a754e2a, 0x3a6fb726, + 0x3a6a1ffd, 0x3a6488b1, 0x3a5ef140, 0x3a5959ab, 0x3a53c1f3, 0x3a4e2a16, + 0x3a489216, 0x3a42f9f2, + 0x3a3d61a9, 0x3a37c93d, 0x3a3230ad, 0x3a2c97f9, 0x3a26ff21, 0x3a216625, + 0x3a1bcd05, 0x3a1633c1, + 0x3a109a5a, 0x3a0b00cf, 0x3a056720, 0x39ffcd4d, 0x39fa3356, 0x39f4993c, + 0x39eefefe, 0x39e9649c, + 0x39e3ca17, 0x39de2f6d, 0x39d894a0, 0x39d2f9b0, 0x39cd5e9b, 0x39c7c363, + 0x39c22808, 0x39bc8c89, + 0x39b6f0e6, 0x39b1551f, 0x39abb935, 0x39a61d28, 0x39a080f6, 0x399ae4a2, + 0x39954829, 0x398fab8e, + 0x398a0ece, 0x398471ec, 0x397ed4e5, 0x397937bc, 0x39739a6e, 0x396dfcfe, + 0x39685f6a, 0x3962c1b2, + 0x395d23d7, 0x395785d9, 0x3951e7b8, 0x394c4973, 0x3946ab0a, 0x39410c7f, + 0x393b6dd0, 0x3935cefd, + 0x39303008, 0x392a90ef, 0x3924f1b3, 0x391f5254, 0x3919b2d1, 0x3914132b, + 0x390e7362, 0x3908d376, + 0x39033367, 0x38fd9334, 0x38f7f2de, 0x38f25266, 0x38ecb1ca, 0x38e7110a, + 0x38e17028, 0x38dbcf23, + 0x38d62dfb, 0x38d08caf, 0x38caeb41, 0x38c549af, 0x38bfa7fb, 0x38ba0623, + 0x38b46429, 0x38aec20b, + 0x38a91fcb, 0x38a37d67, 0x389ddae1, 0x38983838, 0x3892956c, 0x388cf27d, + 0x38874f6b, 0x3881ac36, + 0x387c08de, 0x38766564, 0x3870c1c6, 0x386b1e06, 0x38657a23, 0x385fd61d, + 0x385a31f5, 0x38548daa, + 0x384ee93b, 0x384944ab, 0x38439ff7, 0x383dfb21, 0x38385628, 0x3832b10d, + 0x382d0bce, 0x3827666d, + 0x3821c0ea, 0x381c1b44, 0x3816757b, 0x3810cf90, 0x380b2982, 0x38058351, + 0x37ffdcfe, 0x37fa3688, + 0x37f48ff0, 0x37eee936, 0x37e94259, 0x37e39b59, 0x37ddf437, 0x37d84cf2, + 0x37d2a58b, 0x37ccfe02, + 0x37c75656, 0x37c1ae87, 0x37bc0697, 0x37b65e84, 0x37b0b64e, 0x37ab0df6, + 0x37a5657c, 0x379fbce0, + 0x379a1421, 0x37946b40, 0x378ec23d, 0x37891917, 0x37836fcf, 0x377dc665, + 0x37781cd9, 0x3772732a, + 0x376cc959, 0x37671f66, 0x37617551, 0x375bcb1a, 0x375620c1, 0x37507645, + 0x374acba7, 0x374520e7, + 0x373f7606, 0x3739cb02, 0x37341fdc, 0x372e7493, 0x3728c929, 0x37231d9d, + 0x371d71ef, 0x3717c61f, + 0x37121a2d, 0x370c6e19, 0x3706c1e2, 0x3701158a, 0x36fb6910, 0x36f5bc75, + 0x36f00fb7, 0x36ea62d7, + 0x36e4b5d6, 0x36df08b2, 0x36d95b6d, 0x36d3ae06, 0x36ce007d, 0x36c852d2, + 0x36c2a506, 0x36bcf718, + 0x36b74908, 0x36b19ad6, 0x36abec82, 0x36a63e0d, 0x36a08f76, 0x369ae0bd, + 0x369531e3, 0x368f82e7, + 0x3689d3c9, 0x3684248a, 0x367e7529, 0x3678c5a7, 0x36731602, 0x366d663d, + 0x3667b655, 0x3662064c, + 0x365c5622, 0x3656a5d6, 0x3650f569, 0x364b44da, 0x36459429, 0x363fe357, + 0x363a3264, 0x3634814f, + 0x362ed019, 0x36291ec1, 0x36236d48, 0x361dbbad, 0x361809f1, 0x36125814, + 0x360ca615, 0x3606f3f5, + 0x360141b4, 0x35fb8f52, 0x35f5dcce, 0x35f02a28, 0x35ea7762, 0x35e4c47a, + 0x35df1171, 0x35d95e47, + 0x35d3aafc, 0x35cdf78f, 0x35c84401, 0x35c29052, 0x35bcdc82, 0x35b72891, + 0x35b1747e, 0x35abc04b, + 0x35a60bf6, 0x35a05781, 0x359aa2ea, 0x3594ee32, 0x358f3959, 0x3589845f, + 0x3583cf44, 0x357e1a08, + 0x357864ab, 0x3572af2d, 0x356cf98e, 0x356743ce, 0x35618ded, 0x355bd7eb, + 0x355621c9, 0x35506b85, + 0x354ab520, 0x3544fe9b, 0x353f47f5, 0x3539912e, 0x3533da46, 0x352e233d, + 0x35286c14, 0x3522b4c9, + 0x351cfd5e, 0x351745d2, 0x35118e26, 0x350bd658, 0x35061e6a, 0x3500665c, + 0x34faae2c, 0x34f4f5dc, + 0x34ef3d6b, 0x34e984da, 0x34e3cc28, 0x34de1355, 0x34d85a62, 0x34d2a14e, + 0x34cce819, 0x34c72ec4, + 0x34c1754e, 0x34bbbbb8, 0x34b60202, 0x34b0482a, 0x34aa8e33, 0x34a4d41a, + 0x349f19e2, 0x34995f88, + 0x3493a50f, 0x348dea75, 0x34882fba, 0x348274e0, 0x347cb9e4, 0x3476fec9, + 0x3471438d, 0x346b8830, + 0x3465ccb4, 0x34601117, 0x345a5559, 0x3454997c, 0x344edd7e, 0x34492160, + 0x34436521, 0x343da8c3, + 0x3437ec44, 0x34322fa5, 0x342c72e6, 0x3426b606, 0x3420f907, 0x341b3be7, + 0x34157ea7, 0x340fc147, + 0x340a03c7, 0x34044626, 0x33fe8866, 0x33f8ca86, 0x33f30c85, 0x33ed4e65, + 0x33e79024, 0x33e1d1c4, + 0x33dc1343, 0x33d654a2, 0x33d095e2, 0x33cad701, 0x33c51801, 0x33bf58e1, + 0x33b999a0, 0x33b3da40, + 0x33ae1ac0, 0x33a85b20, 0x33a29b60, 0x339cdb81, 0x33971b81, 0x33915b62, + 0x338b9b22, 0x3385dac4, + 0x33801a45, 0x337a59a6, 0x337498e8, 0x336ed80a, 0x3369170c, 0x336355ef, + 0x335d94b2, 0x3357d355, + 0x335211d8, 0x334c503c, 0x33468e80, 0x3340cca5, 0x333b0aaa, 0x3335488f, + 0x332f8655, 0x3329c3fb, + 0x33240182, 0x331e3ee9, 0x33187c31, 0x3312b959, 0x330cf661, 0x3307334a, + 0x33017014, 0x32fbacbe, + 0x32f5e948, 0x32f025b4, 0x32ea61ff, 0x32e49e2c, 0x32deda39, 0x32d91626, + 0x32d351f5, 0x32cd8da4, + 0x32c7c933, 0x32c204a3, 0x32bc3ff4, 0x32b67b26, 0x32b0b638, 0x32aaf12b, + 0x32a52bff, 0x329f66b4, + 0x3299a149, 0x3293dbbf, 0x328e1616, 0x3288504e, 0x32828a67, 0x327cc460, + 0x3276fe3a, 0x327137f6, + 0x326b7192, 0x3265ab0f, 0x325fe46c, 0x325a1dab, 0x325456cb, 0x324e8fcc, + 0x3248c8ad, 0x32430170, + 0x323d3a14, 0x32377298, 0x3231aafe, 0x322be345, 0x32261b6c, 0x32205375, + 0x321a8b5f, 0x3214c32a, + 0x320efad6, 0x32093263, 0x320369d2, 0x31fda121, 0x31f7d852, 0x31f20f64, + 0x31ec4657, 0x31e67d2b, + 0x31e0b3e0, 0x31daea77, 0x31d520ef, 0x31cf5748, 0x31c98d83, 0x31c3c39e, + 0x31bdf99b, 0x31b82f7a, + 0x31b2653a, 0x31ac9adb, 0x31a6d05d, 0x31a105c1, 0x319b3b06, 0x3195702d, + 0x318fa535, 0x3189da1e, + 0x31840ee9, 0x317e4395, 0x31787823, 0x3172ac92, 0x316ce0e3, 0x31671515, + 0x31614929, 0x315b7d1e, + 0x3155b0f5, 0x314fe4ae, 0x314a1848, 0x31444bc3, 0x313e7f21, 0x3138b260, + 0x3132e580, 0x312d1882, + 0x31274b66, 0x31217e2c, 0x311bb0d3, 0x3115e35c, 0x311015c6, 0x310a4813, + 0x31047a41, 0x30feac51, + 0x30f8de42, 0x30f31016, 0x30ed41cb, 0x30e77362, 0x30e1a4db, 0x30dbd636, + 0x30d60772, 0x30d03891, + 0x30ca6991, 0x30c49a74, 0x30becb38, 0x30b8fbde, 0x30b32c66, 0x30ad5cd0, + 0x30a78d1c, 0x30a1bd4a, + 0x309bed5a, 0x30961d4c, 0x30904d20, 0x308a7cd6, 0x3084ac6e, 0x307edbe9, + 0x30790b45, 0x30733a83, + 0x306d69a4, 0x306798a7, 0x3061c78b, 0x305bf652, 0x305624fb, 0x30505387, + 0x304a81f4, 0x3044b044, + 0x303ede76, 0x30390c8a, 0x30333a80, 0x302d6859, 0x30279614, 0x3021c3b1, + 0x301bf131, 0x30161e93, + 0x30104bd7, 0x300a78fe, 0x3004a607, 0x2ffed2f2, 0x2ff8ffc0, 0x2ff32c70, + 0x2fed5902, 0x2fe78577, + 0x2fe1b1cf, 0x2fdbde09, 0x2fd60a25, 0x2fd03624, 0x2fca6206, 0x2fc48dc9, + 0x2fbeb970, 0x2fb8e4f9, + 0x2fb31064, 0x2fad3bb3, 0x2fa766e3, 0x2fa191f7, 0x2f9bbced, 0x2f95e7c5, + 0x2f901280, 0x2f8a3d1e, + 0x2f84679f, 0x2f7e9202, 0x2f78bc48, 0x2f72e671, 0x2f6d107c, 0x2f673a6a, + 0x2f61643b, 0x2f5b8def, + 0x2f55b785, 0x2f4fe0ff, 0x2f4a0a5b, 0x2f44339a, 0x2f3e5cbb, 0x2f3885c0, + 0x2f32aea8, 0x2f2cd772, + 0x2f27001f, 0x2f2128af, 0x2f1b5122, 0x2f157979, 0x2f0fa1b2, 0x2f09c9ce, + 0x2f03f1cd, 0x2efe19ae, + 0x2ef84173, 0x2ef2691b, 0x2eec90a7, 0x2ee6b815, 0x2ee0df66, 0x2edb069a, + 0x2ed52db1, 0x2ecf54ac, + 0x2ec97b89, 0x2ec3a24a, 0x2ebdc8ee, 0x2eb7ef75, 0x2eb215df, 0x2eac3c2d, + 0x2ea6625d, 0x2ea08871, + 0x2e9aae68, 0x2e94d443, 0x2e8efa00, 0x2e891fa1, 0x2e834525, 0x2e7d6a8d, + 0x2e778fd8, 0x2e71b506, + 0x2e6bda17, 0x2e65ff0c, 0x2e6023e5, 0x2e5a48a0, 0x2e546d3f, 0x2e4e91c2, + 0x2e48b628, 0x2e42da71, + 0x2e3cfe9e, 0x2e3722ae, 0x2e3146a2, 0x2e2b6a79, 0x2e258e34, 0x2e1fb1d3, + 0x2e19d554, 0x2e13f8ba, + 0x2e0e1c03, 0x2e083f30, 0x2e026240, 0x2dfc8534, 0x2df6a80b, 0x2df0cac6, + 0x2deaed65, 0x2de50fe8, + 0x2ddf324e, 0x2dd95498, 0x2dd376c5, 0x2dcd98d7, 0x2dc7bacc, 0x2dc1dca4, + 0x2dbbfe61, 0x2db62001, + 0x2db04186, 0x2daa62ee, 0x2da4843a, 0x2d9ea569, 0x2d98c67d, 0x2d92e774, + 0x2d8d084f, 0x2d87290f, + 0x2d8149b2, 0x2d7b6a39, 0x2d758aa4, 0x2d6faaf3, 0x2d69cb26, 0x2d63eb3d, + 0x2d5e0b38, 0x2d582b17, + 0x2d524ada, 0x2d4c6a81, 0x2d468a0c, 0x2d40a97b, 0x2d3ac8ce, 0x2d34e805, + 0x2d2f0721, 0x2d292620, + 0x2d234504, 0x2d1d63cc, 0x2d178278, 0x2d11a108, 0x2d0bbf7d, 0x2d05ddd5, + 0x2cfffc12, 0x2cfa1a33, + 0x2cf43839, 0x2cee5622, 0x2ce873f0, 0x2ce291a2, 0x2cdcaf39, 0x2cd6ccb4, + 0x2cd0ea13, 0x2ccb0756, + 0x2cc5247e, 0x2cbf418b, 0x2cb95e7b, 0x2cb37b51, 0x2cad980a, 0x2ca7b4a8, + 0x2ca1d12a, 0x2c9bed91, + 0x2c9609dd, 0x2c90260d, 0x2c8a4221, 0x2c845e1a, 0x2c7e79f7, 0x2c7895b9, + 0x2c72b160, 0x2c6ccceb, + 0x2c66e85b, 0x2c6103af, 0x2c5b1ee8, 0x2c553a06, 0x2c4f5508, 0x2c496fef, + 0x2c438abb, 0x2c3da56b, + 0x2c37c000, 0x2c31da7a, 0x2c2bf4d8, 0x2c260f1c, 0x2c202944, 0x2c1a4351, + 0x2c145d42, 0x2c0e7719, + 0x2c0890d4, 0x2c02aa74, 0x2bfcc3f9, 0x2bf6dd63, 0x2bf0f6b1, 0x2beb0fe5, + 0x2be528fd, 0x2bdf41fb, + 0x2bd95add, 0x2bd373a4, 0x2bcd8c51, 0x2bc7a4e2, 0x2bc1bd58, 0x2bbbd5b3, + 0x2bb5edf4, 0x2bb00619, + 0x2baa1e23, 0x2ba43613, 0x2b9e4de7, 0x2b9865a1, 0x2b927d3f, 0x2b8c94c3, + 0x2b86ac2c, 0x2b80c37a, + 0x2b7adaae, 0x2b74f1c6, 0x2b6f08c4, 0x2b691fa6, 0x2b63366f, 0x2b5d4d1c, + 0x2b5763ae, 0x2b517a26, + 0x2b4b9083, 0x2b45a6c6, 0x2b3fbced, 0x2b39d2fa, 0x2b33e8ed, 0x2b2dfec5, + 0x2b281482, 0x2b222a24, + 0x2b1c3fac, 0x2b165519, 0x2b106a6c, 0x2b0a7fa4, 0x2b0494c2, 0x2afea9c5, + 0x2af8bead, 0x2af2d37b, + 0x2aece82f, 0x2ae6fcc8, 0x2ae11146, 0x2adb25aa, 0x2ad539f4, 0x2acf4e23, + 0x2ac96238, 0x2ac37633, + 0x2abd8a13, 0x2ab79dd8, 0x2ab1b184, 0x2aabc515, 0x2aa5d88b, 0x2a9febe8, + 0x2a99ff2a, 0x2a941252, + 0x2a8e255f, 0x2a883853, 0x2a824b2c, 0x2a7c5deb, 0x2a76708f, 0x2a70831a, + 0x2a6a958a, 0x2a64a7e0, + 0x2a5eba1c, 0x2a58cc3e, 0x2a52de46, 0x2a4cf033, 0x2a470207, 0x2a4113c0, + 0x2a3b2560, 0x2a3536e5, + 0x2a2f4850, 0x2a2959a1, 0x2a236ad9, 0x2a1d7bf6, 0x2a178cf9, 0x2a119de2, + 0x2a0baeb2, 0x2a05bf67, + 0x29ffd003, 0x29f9e084, 0x29f3f0ec, 0x29ee013a, 0x29e8116e, 0x29e22188, + 0x29dc3188, 0x29d6416f, + 0x29d0513b, 0x29ca60ee, 0x29c47087, 0x29be8007, 0x29b88f6c, 0x29b29eb8, + 0x29acadea, 0x29a6bd02, + 0x29a0cc01, 0x299adae6, 0x2994e9b1, 0x298ef863, 0x298906fb, 0x2983157a, + 0x297d23df, 0x2977322a, + 0x2971405b, 0x296b4e74, 0x29655c72, 0x295f6a57, 0x29597823, 0x295385d5, + 0x294d936d, 0x2947a0ec, + 0x2941ae52, 0x293bbb9e, 0x2935c8d1, 0x292fd5ea, 0x2929e2ea, 0x2923efd0, + 0x291dfc9d, 0x29180951, + 0x291215eb, 0x290c226c, 0x29062ed4, 0x29003b23, 0x28fa4758, 0x28f45374, + 0x28ee5f76, 0x28e86b5f, + 0x28e27730, 0x28dc82e6, 0x28d68e84, 0x28d09a09, 0x28caa574, 0x28c4b0c6, + 0x28bebbff, 0x28b8c71f, + 0x28b2d226, 0x28acdd13, 0x28a6e7e8, 0x28a0f2a3, 0x289afd46, 0x289507cf, + 0x288f123f, 0x28891c97, + 0x288326d5, 0x287d30fa, 0x28773b07, 0x287144fa, 0x286b4ed5, 0x28655896, + 0x285f623f, 0x28596bce, + 0x28537545, 0x284d7ea3, 0x284787e8, 0x28419114, 0x283b9a28, 0x2835a322, + 0x282fac04, 0x2829b4cd, + 0x2823bd7d, 0x281dc615, 0x2817ce93, 0x2811d6f9, 0x280bdf46, 0x2805e77b, + 0x27ffef97, 0x27f9f79a, + 0x27f3ff85, 0x27ee0756, 0x27e80f10, 0x27e216b0, 0x27dc1e38, 0x27d625a8, + 0x27d02cff, 0x27ca343d, + 0x27c43b63, 0x27be4270, 0x27b84965, 0x27b25041, 0x27ac5705, 0x27a65db0, + 0x27a06443, 0x279a6abd, + 0x2794711f, 0x278e7768, 0x27887d99, 0x278283b2, 0x277c89b3, 0x27768f9b, + 0x2770956a, 0x276a9b21, + 0x2764a0c0, 0x275ea647, 0x2758abb6, 0x2752b10c, 0x274cb64a, 0x2746bb6f, + 0x2740c07d, 0x273ac572, + 0x2734ca4f, 0x272ecf14, 0x2728d3c0, 0x2722d855, 0x271cdcd1, 0x2716e136, + 0x2710e582, 0x270ae9b6, + 0x2704edd2, 0x26fef1d5, 0x26f8f5c1, 0x26f2f995, 0x26ecfd51, 0x26e700f5, + 0x26e10480, 0x26db07f4, + 0x26d50b50, 0x26cf0e94, 0x26c911c0, 0x26c314d4, 0x26bd17d0, 0x26b71ab4, + 0x26b11d80, 0x26ab2034, + 0x26a522d1, 0x269f2556, 0x269927c3, 0x26932a18, 0x268d2c55, 0x26872e7b, + 0x26813088, 0x267b327e, + 0x2675345d, 0x266f3623, 0x266937d2, 0x26633969, 0x265d3ae9, 0x26573c50, + 0x26513da1, 0x264b3ed9, + 0x26453ffa, 0x263f4103, 0x263941f5, 0x263342cf, 0x262d4392, 0x2627443d, + 0x262144d0, 0x261b454c, + 0x261545b0, 0x260f45fd, 0x26094633, 0x26034651, 0x25fd4657, 0x25f74646, + 0x25f1461e, 0x25eb45de, + 0x25e54587, 0x25df4519, 0x25d94493, 0x25d343f6, 0x25cd4341, 0x25c74276, + 0x25c14192, 0x25bb4098, + 0x25b53f86, 0x25af3e5d, 0x25a93d1d, 0x25a33bc6, 0x259d3a57, 0x259738d1, + 0x25913734, 0x258b3580, + 0x258533b5, 0x257f31d2, 0x25792fd8, 0x25732dc8, 0x256d2ba0, 0x25672961, + 0x2561270b, 0x255b249e, + 0x2555221a, 0x254f1f7e, 0x25491ccc, 0x25431a03, 0x253d1723, 0x2537142c, + 0x2531111e, 0x252b0df9, + 0x25250abd, 0x251f076a, 0x25190400, 0x25130080, 0x250cfce8, 0x2506f93a, + 0x2500f574, 0x24faf198, + 0x24f4eda6, 0x24eee99c, 0x24e8e57c, 0x24e2e144, 0x24dcdcf6, 0x24d6d892, + 0x24d0d416, 0x24cacf84, + 0x24c4cadb, 0x24bec61c, 0x24b8c146, 0x24b2bc59, 0x24acb756, 0x24a6b23b, + 0x24a0ad0b, 0x249aa7c4, + 0x2494a266, 0x248e9cf1, 0x24889766, 0x248291c5, 0x247c8c0d, 0x2476863e, + 0x24708059, 0x246a7a5e, + 0x2464744c, 0x245e6e23, 0x245867e4, 0x2452618f, 0x244c5b24, 0x244654a1, + 0x24404e09, 0x243a475a, + 0x24344095, 0x242e39ba, 0x242832c8, 0x24222bc0, 0x241c24a1, 0x24161d6d, + 0x24101622, 0x240a0ec1, + 0x24040749, 0x23fdffbc, 0x23f7f818, 0x23f1f05e, 0x23ebe88e, 0x23e5e0a7, + 0x23dfd8ab, 0x23d9d098, + 0x23d3c86f, 0x23cdc031, 0x23c7b7dc, 0x23c1af71, 0x23bba6f0, 0x23b59e59, + 0x23af95ac, 0x23a98ce8, + 0x23a3840f, 0x239d7b20, 0x2397721b, 0x23916900, 0x238b5fcf, 0x23855688, + 0x237f4d2b, 0x237943b9, + 0x23733a30, 0x236d3092, 0x236726dd, 0x23611d13, 0x235b1333, 0x2355093e, + 0x234eff32, 0x2348f511, + 0x2342eada, 0x233ce08d, 0x2336d62a, 0x2330cbb2, 0x232ac124, 0x2324b680, + 0x231eabc7, 0x2318a0f8, + 0x23129613, 0x230c8b19, 0x23068009, 0x230074e3, 0x22fa69a8, 0x22f45e57, + 0x22ee52f1, 0x22e84775, + 0x22e23be4, 0x22dc303d, 0x22d62480, 0x22d018ae, 0x22ca0cc7, 0x22c400ca, + 0x22bdf4b8, 0x22b7e890, + 0x22b1dc53, 0x22abd001, 0x22a5c399, 0x229fb71b, 0x2299aa89, 0x22939de1, + 0x228d9123, 0x22878451, + 0x22817769, 0x227b6a6c, 0x22755d59, 0x226f5032, 0x226942f5, 0x226335a2, + 0x225d283b, 0x22571abe, + 0x22510d2d, 0x224aff86, 0x2244f1c9, 0x223ee3f8, 0x2238d612, 0x2232c816, + 0x222cba06, 0x2226abe0, + 0x22209da5, 0x221a8f56, 0x221480f1, 0x220e7277, 0x220863e8, 0x22025544, + 0x21fc468b, 0x21f637be, + 0x21f028db, 0x21ea19e3, 0x21e40ad7, 0x21ddfbb5, 0x21d7ec7f, 0x21d1dd34, + 0x21cbcdd3, 0x21c5be5e, + 0x21bfaed5, 0x21b99f36, 0x21b38f83, 0x21ad7fba, 0x21a76fdd, 0x21a15fec, + 0x219b4fe5, 0x21953fca, + 0x218f2f9a, 0x21891f55, 0x21830efc, 0x217cfe8e, 0x2176ee0b, 0x2170dd74, + 0x216accc8, 0x2164bc08, + 0x215eab33, 0x21589a49, 0x2152894b, 0x214c7838, 0x21466710, 0x214055d4, + 0x213a4484, 0x2134331f, + 0x212e21a6, 0x21281018, 0x2121fe76, 0x211becbf, 0x2115daf4, 0x210fc914, + 0x2109b720, 0x2103a518, + 0x20fd92fb, 0x20f780ca, 0x20f16e84, 0x20eb5c2b, 0x20e549bd, 0x20df373a, + 0x20d924a4, 0x20d311f9, + 0x20ccff3a, 0x20c6ec66, 0x20c0d97f, 0x20bac683, 0x20b4b373, 0x20aea04f, + 0x20a88d17, 0x20a279ca, + 0x209c666a, 0x209652f5, 0x20903f6c, 0x208a2bcf, 0x2084181e, 0x207e0459, + 0x2077f080, 0x2071dc93, + 0x206bc892, 0x2065b47d, 0x205fa054, 0x20598c17, 0x205377c6, 0x204d6361, + 0x20474ee8, 0x20413a5b, + 0x203b25bb, 0x20351106, 0x202efc3e, 0x2028e761, 0x2022d271, 0x201cbd6d, + 0x2016a856, 0x2010932a, + 0x200a7deb, 0x20046898, 0x1ffe5331, 0x1ff83db6, 0x1ff22828, 0x1fec1286, + 0x1fe5fcd0, 0x1fdfe707, + 0x1fd9d12a, 0x1fd3bb39, 0x1fcda535, 0x1fc78f1d, 0x1fc178f1, 0x1fbb62b2, + 0x1fb54c60, 0x1faf35f9, + 0x1fa91f80, 0x1fa308f2, 0x1f9cf252, 0x1f96db9d, 0x1f90c4d5, 0x1f8aadfa, + 0x1f84970b, 0x1f7e8009, + 0x1f7868f4, 0x1f7251ca, 0x1f6c3a8e, 0x1f66233e, 0x1f600bdb, 0x1f59f465, + 0x1f53dcdb, 0x1f4dc53d, + 0x1f47ad8d, 0x1f4195c9, 0x1f3b7df2, 0x1f356608, 0x1f2f4e0a, 0x1f2935f9, + 0x1f231dd5, 0x1f1d059e, + 0x1f16ed54, 0x1f10d4f6, 0x1f0abc85, 0x1f04a401, 0x1efe8b6a, 0x1ef872c0, + 0x1ef25a03, 0x1eec4132, + 0x1ee6284f, 0x1ee00f58, 0x1ed9f64f, 0x1ed3dd32, 0x1ecdc402, 0x1ec7aac0, + 0x1ec1916a, 0x1ebb7802, + 0x1eb55e86, 0x1eaf44f8, 0x1ea92b56, 0x1ea311a2, 0x1e9cf7db, 0x1e96de01, + 0x1e90c414, 0x1e8aaa14, + 0x1e849001, 0x1e7e75dc, 0x1e785ba3, 0x1e724158, 0x1e6c26fa, 0x1e660c8a, + 0x1e5ff206, 0x1e59d770, + 0x1e53bcc7, 0x1e4da20c, 0x1e47873d, 0x1e416c5d, 0x1e3b5169, 0x1e353663, + 0x1e2f1b4a, 0x1e29001e, + 0x1e22e4e0, 0x1e1cc990, 0x1e16ae2c, 0x1e1092b6, 0x1e0a772e, 0x1e045b93, + 0x1dfe3fe6, 0x1df82426, + 0x1df20853, 0x1debec6f, 0x1de5d077, 0x1ddfb46e, 0x1dd99851, 0x1dd37c23, + 0x1dcd5fe2, 0x1dc7438e, + 0x1dc12729, 0x1dbb0ab0, 0x1db4ee26, 0x1daed189, 0x1da8b4da, 0x1da29819, + 0x1d9c7b45, 0x1d965e5f, + 0x1d904167, 0x1d8a245c, 0x1d840740, 0x1d7dea11, 0x1d77ccd0, 0x1d71af7d, + 0x1d6b9217, 0x1d6574a0, + 0x1d5f5716, 0x1d59397a, 0x1d531bcc, 0x1d4cfe0d, 0x1d46e03a, 0x1d40c256, + 0x1d3aa460, 0x1d348658, + 0x1d2e683e, 0x1d284a12, 0x1d222bd3, 0x1d1c0d83, 0x1d15ef21, 0x1d0fd0ad, + 0x1d09b227, 0x1d03938f, + 0x1cfd74e5, 0x1cf7562a, 0x1cf1375c, 0x1ceb187d, 0x1ce4f98c, 0x1cdeda89, + 0x1cd8bb74, 0x1cd29c4d, + 0x1ccc7d15, 0x1cc65dca, 0x1cc03e6e, 0x1cba1f01, 0x1cb3ff81, 0x1caddff0, + 0x1ca7c04d, 0x1ca1a099, + 0x1c9b80d3, 0x1c9560fb, 0x1c8f4112, 0x1c892117, 0x1c83010a, 0x1c7ce0ec, + 0x1c76c0bc, 0x1c70a07b, + 0x1c6a8028, 0x1c645fc3, 0x1c5e3f4d, 0x1c581ec6, 0x1c51fe2d, 0x1c4bdd83, + 0x1c45bcc7, 0x1c3f9bf9, + 0x1c397b1b, 0x1c335a2b, 0x1c2d3929, 0x1c271816, 0x1c20f6f2, 0x1c1ad5bc, + 0x1c14b475, 0x1c0e931d, + 0x1c0871b4, 0x1c025039, 0x1bfc2ead, 0x1bf60d0f, 0x1befeb60, 0x1be9c9a1, + 0x1be3a7cf, 0x1bdd85ed, + 0x1bd763fa, 0x1bd141f5, 0x1bcb1fdf, 0x1bc4fdb8, 0x1bbedb80, 0x1bb8b937, + 0x1bb296dc, 0x1bac7471, + 0x1ba651f5, 0x1ba02f67, 0x1b9a0cc8, 0x1b93ea19, 0x1b8dc758, 0x1b87a487, + 0x1b8181a4, 0x1b7b5eb0, + 0x1b753bac, 0x1b6f1897, 0x1b68f570, 0x1b62d239, 0x1b5caef1, 0x1b568b98, + 0x1b50682e, 0x1b4a44b3, + 0x1b442127, 0x1b3dfd8b, 0x1b37d9de, 0x1b31b620, 0x1b2b9251, 0x1b256e71, + 0x1b1f4a81, 0x1b192680, + 0x1b13026e, 0x1b0cde4c, 0x1b06ba19, 0x1b0095d5, 0x1afa7180, 0x1af44d1b, + 0x1aee28a6, 0x1ae8041f, + 0x1ae1df88, 0x1adbbae1, 0x1ad59629, 0x1acf7160, 0x1ac94c87, 0x1ac3279d, + 0x1abd02a3, 0x1ab6dd98, + 0x1ab0b87d, 0x1aaa9352, 0x1aa46e16, 0x1a9e48c9, 0x1a98236c, 0x1a91fdff, + 0x1a8bd881, 0x1a85b2f3, + 0x1a7f8d54, 0x1a7967a6, 0x1a7341e6, 0x1a6d1c17, 0x1a66f637, 0x1a60d047, + 0x1a5aaa47, 0x1a548436, + 0x1a4e5e15, 0x1a4837e4, 0x1a4211a3, 0x1a3beb52, 0x1a35c4f0, 0x1a2f9e7e, + 0x1a2977fc, 0x1a23516a, + 0x1a1d2ac8, 0x1a170416, 0x1a10dd53, 0x1a0ab681, 0x1a048f9e, 0x19fe68ac, + 0x19f841a9, 0x19f21a96, + 0x19ebf374, 0x19e5cc41, 0x19dfa4fe, 0x19d97dac, 0x19d35649, 0x19cd2ed7, + 0x19c70754, 0x19c0dfc2, + 0x19bab820, 0x19b4906e, 0x19ae68ac, 0x19a840da, 0x19a218f9, 0x199bf107, + 0x1995c906, 0x198fa0f5, + 0x198978d4, 0x198350a4, 0x197d2864, 0x19770014, 0x1970d7b4, 0x196aaf45, + 0x196486c6, 0x195e5e37, + 0x19583599, 0x19520ceb, 0x194be42d, 0x1945bb60, 0x193f9283, 0x19396997, + 0x1933409b, 0x192d178f, + 0x1926ee74, 0x1920c54a, 0x191a9c10, 0x191472c6, 0x190e496d, 0x19082005, + 0x1901f68d, 0x18fbcd06, + 0x18f5a36f, 0x18ef79c9, 0x18e95014, 0x18e3264f, 0x18dcfc7b, 0x18d6d297, + 0x18d0a8a4, 0x18ca7ea2, + 0x18c45491, 0x18be2a70, 0x18b80040, 0x18b1d601, 0x18ababb2, 0x18a58154, + 0x189f56e8, 0x18992c6b, + 0x189301e0, 0x188cd746, 0x1886ac9c, 0x188081e4, 0x187a571c, 0x18742c45, + 0x186e015f, 0x1867d66a, + 0x1861ab66, 0x185b8053, 0x18555530, 0x184f29ff, 0x1848febf, 0x1842d370, + 0x183ca812, 0x18367ca5, + 0x18305129, 0x182a259e, 0x1823fa04, 0x181dce5b, 0x1817a2a4, 0x181176dd, + 0x180b4b08, 0x18051f24, + 0x17fef331, 0x17f8c72f, 0x17f29b1e, 0x17ec6eff, 0x17e642d1, 0x17e01694, + 0x17d9ea49, 0x17d3bdee, + 0x17cd9186, 0x17c7650e, 0x17c13888, 0x17bb0bf3, 0x17b4df4f, 0x17aeb29d, + 0x17a885dc, 0x17a2590d, + 0x179c2c2f, 0x1795ff42, 0x178fd247, 0x1789a53d, 0x17837825, 0x177d4afe, + 0x17771dc9, 0x1770f086, + 0x176ac333, 0x176495d3, 0x175e6864, 0x17583ae7, 0x17520d5b, 0x174bdfc1, + 0x1745b218, 0x173f8461, + 0x1739569c, 0x173328c8, 0x172cfae6, 0x1726ccf6, 0x17209ef8, 0x171a70eb, + 0x171442d0, 0x170e14a7, + 0x1707e670, 0x1701b82a, 0x16fb89d6, 0x16f55b74, 0x16ef2d04, 0x16e8fe86, + 0x16e2cff9, 0x16dca15f, + 0x16d672b6, 0x16d043ff, 0x16ca153a, 0x16c3e667, 0x16bdb787, 0x16b78898, + 0x16b1599b, 0x16ab2a90, + 0x16a4fb77, 0x169ecc50, 0x16989d1b, 0x16926dd8, 0x168c3e87, 0x16860f29, + 0x167fdfbc, 0x1679b042, + 0x167380ba, 0x166d5123, 0x1667217f, 0x1660f1ce, 0x165ac20e, 0x16549241, + 0x164e6266, 0x1648327d, + 0x16420286, 0x163bd282, 0x1635a270, 0x162f7250, 0x16294222, 0x162311e7, + 0x161ce19e, 0x1616b148, + 0x161080e4, 0x160a5072, 0x16041ff3, 0x15fdef66, 0x15f7becc, 0x15f18e24, + 0x15eb5d6e, 0x15e52cab, + 0x15defbdb, 0x15d8cafd, 0x15d29a11, 0x15cc6918, 0x15c63812, 0x15c006fe, + 0x15b9d5dd, 0x15b3a4ae, + 0x15ad7372, 0x15a74228, 0x15a110d2, 0x159adf6e, 0x1594adfc, 0x158e7c7d, + 0x15884af1, 0x15821958, + 0x157be7b1, 0x1575b5fe, 0x156f843c, 0x1569526e, 0x15632093, 0x155ceeaa, + 0x1556bcb4, 0x15508ab1, + 0x154a58a1, 0x15442683, 0x153df459, 0x1537c221, 0x15318fdd, 0x152b5d8b, + 0x15252b2c, 0x151ef8c0, + 0x1518c648, 0x151293c2, 0x150c612f, 0x15062e8f, 0x14fffbe2, 0x14f9c928, + 0x14f39662, 0x14ed638e, + 0x14e730ae, 0x14e0fdc0, 0x14dacac6, 0x14d497bf, 0x14ce64ab, 0x14c8318a, + 0x14c1fe5c, 0x14bbcb22, + 0x14b597da, 0x14af6486, 0x14a93125, 0x14a2fdb8, 0x149cca3e, 0x149696b7, + 0x14906323, 0x148a2f82, + 0x1483fbd5, 0x147dc81c, 0x14779455, 0x14716082, 0x146b2ca3, 0x1464f8b7, + 0x145ec4be, 0x145890b9, + 0x14525ca7, 0x144c2888, 0x1445f45d, 0x143fc026, 0x14398be2, 0x14335792, + 0x142d2335, 0x1426eecb, + 0x1420ba56, 0x141a85d3, 0x14145145, 0x140e1caa, 0x1407e803, 0x1401b34f, + 0x13fb7e8f, 0x13f549c3, + 0x13ef14ea, 0x13e8e005, 0x13e2ab14, 0x13dc7616, 0x13d6410d, 0x13d00bf7, + 0x13c9d6d4, 0x13c3a1a6, + 0x13bd6c6b, 0x13b73725, 0x13b101d2, 0x13aacc73, 0x13a49707, 0x139e6190, + 0x13982c0d, 0x1391f67d, + 0x138bc0e1, 0x13858b3a, 0x137f5586, 0x13791fc6, 0x1372e9fb, 0x136cb423, + 0x13667e3f, 0x13604850, + 0x135a1254, 0x1353dc4c, 0x134da639, 0x1347701a, 0x134139ee, 0x133b03b7, + 0x1334cd74, 0x132e9725, + 0x132860ca, 0x13222a64, 0x131bf3f2, 0x1315bd73, 0x130f86ea, 0x13095054, + 0x130319b3, 0x12fce305, + 0x12f6ac4d, 0x12f07588, 0x12ea3eb8, 0x12e407dc, 0x12ddd0f4, 0x12d79a01, + 0x12d16303, 0x12cb2bf8, + 0x12c4f4e2, 0x12bebdc1, 0x12b88693, 0x12b24f5b, 0x12ac1817, 0x12a5e0c7, + 0x129fa96c, 0x12997205, + 0x12933a93, 0x128d0315, 0x1286cb8c, 0x128093f7, 0x127a5c57, 0x127424ac, + 0x126decf5, 0x1267b533, + 0x12617d66, 0x125b458d, 0x12550da9, 0x124ed5ba, 0x12489dbf, 0x124265b9, + 0x123c2da8, 0x1235f58b, + 0x122fbd63, 0x12298530, 0x12234cf2, 0x121d14a9, 0x1216dc54, 0x1210a3f5, + 0x120a6b8a, 0x12043314, + 0x11fdfa93, 0x11f7c207, 0x11f18970, 0x11eb50cd, 0x11e51820, 0x11dedf68, + 0x11d8a6a4, 0x11d26dd6, + 0x11cc34fc, 0x11c5fc18, 0x11bfc329, 0x11b98a2e, 0x11b35129, 0x11ad1819, + 0x11a6defe, 0x11a0a5d8, + 0x119a6ca7, 0x1194336b, 0x118dfa25, 0x1187c0d3, 0x11818777, 0x117b4e10, + 0x1175149e, 0x116edb22, + 0x1168a19b, 0x11626809, 0x115c2e6c, 0x1155f4c4, 0x114fbb12, 0x11498156, + 0x1143478e, 0x113d0dbc, + 0x1136d3df, 0x113099f8, 0x112a6006, 0x11242609, 0x111dec02, 0x1117b1f0, + 0x111177d4, 0x110b3dad, + 0x1105037c, 0x10fec940, 0x10f88efa, 0x10f254a9, 0x10ec1a4e, 0x10e5dfe8, + 0x10dfa578, 0x10d96afe, + 0x10d33079, 0x10ccf5ea, 0x10c6bb50, 0x10c080ac, 0x10ba45fe, 0x10b40b45, + 0x10add082, 0x10a795b5, + 0x10a15ade, 0x109b1ffc, 0x1094e510, 0x108eaa1a, 0x10886f19, 0x1082340f, + 0x107bf8fa, 0x1075bddb, + 0x106f82b2, 0x1069477f, 0x10630c41, 0x105cd0fa, 0x105695a8, 0x10505a4d, + 0x104a1ee7, 0x1043e377, + 0x103da7fd, 0x10376c79, 0x103130ec, 0x102af554, 0x1024b9b2, 0x101e7e06, + 0x10184251, 0x10120691, + 0x100bcac7, 0x10058ef4, 0xfff5317, 0xff91730, 0xff2db3e, 0xfec9f44, + 0xfe6633f, 0xfe02730, + 0xfd9eb18, 0xfd3aef6, 0xfcd72ca, 0xfc73695, 0xfc0fa55, 0xfbabe0c, 0xfb481ba, + 0xfae455d, + 0xfa808f7, 0xfa1cc87, 0xf9b900e, 0xf95538b, 0xf8f16fe, 0xf88da68, 0xf829dc8, + 0xf7c611f, + 0xf76246c, 0xf6fe7af, 0xf69aae9, 0xf636e1a, 0xf5d3141, 0xf56f45e, 0xf50b773, + 0xf4a7a7d, + 0xf443d7e, 0xf3e0076, 0xf37c365, 0xf318649, 0xf2b4925, 0xf250bf7, 0xf1ecec0, + 0xf189180, + 0xf125436, 0xf0c16e3, 0xf05d987, 0xeff9c21, 0xef95eb2, 0xef3213a, 0xeece3b9, + 0xee6a62f, + 0xee0689b, 0xeda2afe, 0xed3ed58, 0xecdafa9, 0xec771f1, 0xec1342f, 0xebaf665, + 0xeb4b891, + 0xeae7ab4, 0xea83ccf, 0xea1fee0, 0xe9bc0e8, 0xe9582e7, 0xe8f44dd, 0xe8906cb, + 0xe82c8af, + 0xe7c8a8a, 0xe764c5c, 0xe700e26, 0xe69cfe6, 0xe63919e, 0xe5d534d, 0xe5714f3, + 0xe50d690, + 0xe4a9824, 0xe4459af, 0xe3e1b32, 0xe37dcac, 0xe319e1d, 0xe2b5f85, 0xe2520e5, + 0xe1ee23c, + 0xe18a38a, 0xe1264cf, 0xe0c260c, 0xe05e740, 0xdffa86b, 0xdf9698e, 0xdf32aa8, + 0xdecebba, + 0xde6acc3, 0xde06dc3, 0xdda2ebb, 0xdd3efab, 0xdcdb091, 0xdc77170, 0xdc13245, + 0xdbaf313, + 0xdb4b3d7, 0xdae7494, 0xda83548, 0xda1f5f3, 0xd9bb696, 0xd957731, 0xd8f37c3, + 0xd88f84d, + 0xd82b8cf, 0xd7c7948, 0xd7639b9, 0xd6ffa22, 0xd69ba82, 0xd637ada, 0xd5d3b2a, + 0xd56fb71, + 0xd50bbb1, 0xd4a7be8, 0xd443c17, 0xd3dfc3e, 0xd37bc5c, 0xd317c73, 0xd2b3c81, + 0xd24fc87, + 0xd1ebc85, 0xd187c7b, 0xd123c69, 0xd0bfc4f, 0xd05bc2d, 0xcff7c02, 0xcf93bd0, + 0xcf2fb96, + 0xcecbb53, 0xce67b09, 0xce03ab7, 0xcd9fa5d, 0xcd3b9fb, 0xccd7991, 0xcc7391f, + 0xcc0f8a5, + 0xcbab824, 0xcb4779a, 0xcae3709, 0xca7f670, 0xca1b5cf, 0xc9b7526, 0xc953475, + 0xc8ef3bd, + 0xc88b2fd, 0xc827235, 0xc7c3166, 0xc75f08f, 0xc6fafb0, 0xc696ec9, 0xc632ddb, + 0xc5cece5, + 0xc56abe8, 0xc506ae3, 0xc4a29d6, 0xc43e8c2, 0xc3da7a6, 0xc376683, 0xc312558, + 0xc2ae425, + 0xc24a2eb, 0xc1e61aa, 0xc182061, 0xc11df11, 0xc0b9db9, 0xc055c5a, 0xbff1af3, + 0xbf8d985, + 0xbf29810, 0xbec5693, 0xbe6150f, 0xbdfd383, 0xbd991f0, 0xbd35056, 0xbcd0eb5, + 0xbc6cd0c, + 0xbc08b5c, 0xbba49a5, 0xbb407e7, 0xbadc621, 0xba78454, 0xba14280, 0xb9b00a5, + 0xb94bec2, + 0xb8e7cd9, 0xb883ae8, 0xb81f8f0, 0xb7bb6f2, 0xb7574ec, 0xb6f32df, 0xb68f0cb, + 0xb62aeaf, + 0xb5c6c8d, 0xb562a64, 0xb4fe834, 0xb49a5fd, 0xb4363bf, 0xb3d217a, 0xb36df2e, + 0xb309cdb, + 0xb2a5a81, 0xb241820, 0xb1dd5b9, 0xb17934b, 0xb1150d5, 0xb0b0e59, 0xb04cbd6, + 0xafe894d, + 0xaf846bc, 0xaf20425, 0xaebc187, 0xae57ee2, 0xadf3c37, 0xad8f985, 0xad2b6cc, + 0xacc740c, + 0xac63146, 0xabfee79, 0xab9aba6, 0xab368cc, 0xaad25eb, 0xaa6e304, 0xaa0a016, + 0xa9a5d22, + 0xa941a27, 0xa8dd725, 0xa87941d, 0xa81510f, 0xa7b0dfa, 0xa74cadf, 0xa6e87bd, + 0xa684495, + 0xa620166, 0xa5bbe31, 0xa557af5, 0xa4f37b3, 0xa48f46b, 0xa42b11d, 0xa3c6dc8, + 0xa362a6d, + 0xa2fe70b, 0xa29a3a3, 0xa236035, 0xa1d1cc1, 0xa16d946, 0xa1095c6, 0xa0a523f, + 0xa040eb1, + 0x9fdcb1e, 0x9f78784, 0x9f143e5, 0x9eb003f, 0x9e4bc93, 0x9de78e1, 0x9d83529, + 0x9d1f16b, + 0x9cbada7, 0x9c569dc, 0x9bf260c, 0x9b8e236, 0x9b29e59, 0x9ac5a77, 0x9a6168f, + 0x99fd2a0, + 0x9998eac, 0x9934ab2, 0x98d06b2, 0x986c2ac, 0x9807ea1, 0x97a3a8f, 0x973f678, + 0x96db25a, + 0x9676e37, 0x9612a0e, 0x95ae5e0, 0x954a1ab, 0x94e5d71, 0x9481931, 0x941d4eb, + 0x93b90a0, + 0x9354c4f, 0x92f07f8, 0x928c39b, 0x9227f39, 0x91c3ad2, 0x915f664, 0x90fb1f1, + 0x9096d79, + 0x90328fb, 0x8fce477, 0x8f69fee, 0x8f05b5f, 0x8ea16cb, 0x8e3d231, 0x8dd8d92, + 0x8d748ed, + 0x8d10443, 0x8cabf93, 0x8c47ade, 0x8be3624, 0x8b7f164, 0x8b1ac9f, 0x8ab67d4, + 0x8a52304, + 0x89ede2f, 0x8989955, 0x8925475, 0x88c0f90, 0x885caa5, 0x87f85b5, 0x87940c1, + 0x872fbc6, + 0x86cb6c7, 0x86671c2, 0x8602cb9, 0x859e7aa, 0x853a296, 0x84d5d7d, 0x847185e, + 0x840d33b, + 0x83a8e12, 0x83448e5, 0x82e03b2, 0x827be7a, 0x821793e, 0x81b33fc, 0x814eeb5, + 0x80ea969, + 0x8086419, 0x8021ec3, 0x7fbd968, 0x7f59409, 0x7ef4ea4, 0x7e9093b, 0x7e2c3cd, + 0x7dc7e5a, + 0x7d638e2, 0x7cff365, 0x7c9ade4, 0x7c3685d, 0x7bd22d2, 0x7b6dd42, 0x7b097ad, + 0x7aa5214, + 0x7a40c76, 0x79dc6d3, 0x797812b, 0x7913b7f, 0x78af5ce, 0x784b019, 0x77e6a5e, + 0x77824a0, + 0x771dedc, 0x76b9914, 0x7655347, 0x75f0d76, 0x758c7a1, 0x75281c6, 0x74c3be7, + 0x745f604, + 0x73fb01c, 0x7396a30, 0x733243f, 0x72cde4a, 0x7269851, 0x7205253, 0x71a0c50, + 0x713c64a, + 0x70d803f, 0x7073a2f, 0x700f41b, 0x6faae03, 0x6f467e7, 0x6ee21c6, 0x6e7dba1, + 0x6e19578, + 0x6db4f4a, 0x6d50919, 0x6cec2e3, 0x6c87ca9, 0x6c2366a, 0x6bbf028, 0x6b5a9e1, + 0x6af6396, + 0x6a91d47, 0x6a2d6f4, 0x69c909d, 0x6964a42, 0x69003e3, 0x689bd80, 0x6837718, + 0x67d30ad, + 0x676ea3d, 0x670a3ca, 0x66a5d53, 0x66416d8, 0x65dd058, 0x65789d5, 0x651434e, + 0x64afcc3, + 0x644b634, 0x63e6fa2, 0x638290b, 0x631e271, 0x62b9bd3, 0x6255531, 0x61f0e8b, + 0x618c7e1, + 0x6128134, 0x60c3a83, 0x605f3ce, 0x5ffad15, 0x5f96659, 0x5f31f99, 0x5ecd8d6, + 0x5e6920e, + 0x5e04b43, 0x5da0475, 0x5d3bda3, 0x5cd76cd, 0x5c72ff4, 0x5c0e917, 0x5baa237, + 0x5b45b53, + 0x5ae146b, 0x5a7cd80, 0x5a18692, 0x59b3fa0, 0x594f8aa, 0x58eb1b2, 0x5886ab5, + 0x58223b6, + 0x57bdcb3, 0x57595ac, 0x56f4ea2, 0x5690795, 0x562c085, 0x55c7971, 0x556325a, + 0x54feb3f, + 0x549a422, 0x5435d01, 0x53d15dd, 0x536ceb5, 0x530878a, 0x52a405d, 0x523f92c, + 0x51db1f7, + 0x5176ac0, 0x5112385, 0x50adc48, 0x5049507, 0x4fe4dc3, 0x4f8067c, 0x4f1bf32, + 0x4eb77e5, + 0x4e53095, 0x4dee942, 0x4d8a1ec, 0x4d25a93, 0x4cc1337, 0x4c5cbd8, 0x4bf8476, + 0x4b93d11, + 0x4b2f5a9, 0x4acae3e, 0x4a666d1, 0x4a01f60, 0x499d7ed, 0x4939077, 0x48d48fe, + 0x4870182, + 0x480ba04, 0x47a7282, 0x4742afe, 0x46de377, 0x4679bee, 0x4615461, 0x45b0cd2, + 0x454c541, + 0x44e7dac, 0x4483615, 0x441ee7c, 0x43ba6df, 0x4355f40, 0x42f179f, 0x428cffb, + 0x4228854, + 0x41c40ab, 0x415f8ff, 0x40fb151, 0x40969a0, 0x40321ed, 0x3fcda37, 0x3f6927f, + 0x3f04ac4, + 0x3ea0307, 0x3e3bb48, 0x3dd7386, 0x3d72bc2, 0x3d0e3fb, 0x3ca9c32, 0x3c45467, + 0x3be0c99, + 0x3b7c4c9, 0x3b17cf7, 0x3ab3523, 0x3a4ed4c, 0x39ea573, 0x3985d97, 0x39215ba, + 0x38bcdda, + 0x38585f8, 0x37f3e14, 0x378f62e, 0x372ae46, 0x36c665b, 0x3661e6f, 0x35fd680, + 0x3598e8f, + 0x353469c, 0x34cfea8, 0x346b6b1, 0x3406eb8, 0x33a26bd, 0x333dec0, 0x32d96c1, + 0x3274ec0, + 0x32106bd, 0x31abeb9, 0x31476b2, 0x30e2ea9, 0x307e69f, 0x3019e93, 0x2fb5684, + 0x2f50e74, + 0x2eec663, 0x2e87e4f, 0x2e2363a, 0x2dbee22, 0x2d5a609, 0x2cf5def, 0x2c915d2, + 0x2c2cdb4, + 0x2bc8594, 0x2b63d73, 0x2aff54f, 0x2a9ad2a, 0x2a36504, 0x29d1cdc, 0x296d4b2, + 0x2908c87, + 0x28a445a, 0x283fc2b, 0x27db3fb, 0x2776bc9, 0x2712396, 0x26adb62, 0x264932b, + 0x25e4af4, + 0x25802bb, 0x251ba80, 0x24b7244, 0x2452a07, 0x23ee1c8, 0x2389988, 0x2325147, + 0x22c0904, + 0x225c0bf, 0x21f787a, 0x2193033, 0x212e7eb, 0x20c9fa1, 0x2065757, 0x2000f0b, + 0x1f9c6be, + 0x1f37e6f, 0x1ed3620, 0x1e6edcf, 0x1e0a57d, 0x1da5d2a, 0x1d414d6, 0x1cdcc80, + 0x1c7842a, + 0x1c13bd2, 0x1baf37a, 0x1b4ab20, 0x1ae62c5, 0x1a81a69, 0x1a1d20c, 0x19b89ae, + 0x1954150, + 0x18ef8f0, 0x188b08f, 0x182682d, 0x17c1fcb, 0x175d767, 0x16f8f03, 0x169469d, + 0x162fe37, + 0x15cb5d0, 0x1566d68, 0x15024ff, 0x149dc96, 0x143942b, 0x13d4bc0, 0x1370354, + 0x130bae7, + 0x12a727a, 0x1242a0c, 0x11de19d, 0x117992e, 0x11150be, 0x10b084d, 0x104bfdb, + 0xfe7769, + 0xf82ef6, 0xf1e683, 0xeb9e0f, 0xe5559b, 0xdf0d26, 0xd8c4b0, 0xd27c3a, + 0xcc33c3, + 0xc5eb4c, 0xbfa2d5, 0xb95a5d, 0xb311e4, 0xacc96b, 0xa680f2, 0xa03878, + 0x99effe, + 0x93a784, 0x8d5f09, 0x87168e, 0x80ce12, 0x7a8597, 0x743d1a, 0x6df49e, + 0x67ac21, + 0x6163a5, 0x5b1b27, 0x54d2aa, 0x4e8a2c, 0x4841af, 0x41f931, 0x3bb0b3, + 0x356835, + 0x2f1fb6, 0x28d738, 0x228eb9, 0x1c463b, 0x15fdbc, 0xfb53d, 0x96cbe, 0x3243f, + +}; + +/** + * @brief Initialization function for the Q31 DCT4/IDCT4. + * @param[in,out] *S points to an instance of Q31 DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of Q31 RFFT/RIFFT structure + * @param[in] *S_CFFT points to an instance of Q31 CFFT/CIFFT structure + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + * \par Normalizing factor: + * The normalizing factor is sqrt(2/N), which depends on the size of transform N. + * Normalizing factors in 1.31 format are mentioned in the table below for different DCT sizes: + * \image html dct4NormalizingQ31Table.gif + */ + +arm_status arm_dct4_init_q31( + arm_dct4_instance_q31 * S, + arm_rfft_instance_q31 * S_RFFT, + arm_cfft_radix4_instance_q31 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q31_t normalize) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initializing the pointer array with the weight table base addresses of different lengths */ + q31_t *twiddlePtr[4] = { (q31_t *) WeightsQ31_128, (q31_t *) WeightsQ31_512, + (q31_t *) WeightsQ31_2048, (q31_t *) WeightsQ31_8192 + }; + + /* Initializing the pointer array with the cos factor table base addresses of different lengths */ + q31_t *pCosFactor[4] = + { (q31_t *) cos_factorsQ31_128, (q31_t *) cos_factorsQ31_512, + (q31_t *) cos_factorsQ31_2048, (q31_t *) cos_factorsQ31_8192 + }; + + /* Initialize the DCT4 length */ + S->N = N; + + /* Initialize the half of DCT4 length */ + S->Nby2 = Nby2; + + /* Initialize the DCT4 Normalizing factor */ + S->normalize = normalize; + + /* Initialize Real FFT Instance */ + S->pRfft = S_RFFT; + + /* Initialize Complex FFT Instance */ + S->pCfft = S_CFFT; + + switch (N) + { + /* Initialize the table modifier values */ + case 8192u: + S->pTwiddle = twiddlePtr[3]; + S->pCosFactor = pCosFactor[3]; + break; + case 2048u: + S->pTwiddle = twiddlePtr[2]; + S->pCosFactor = pCosFactor[2]; + break; + case 512u: + S->pTwiddle = twiddlePtr[1]; + S->pCosFactor = pCosFactor[1]; + break; + case 128u: + S->pTwiddle = twiddlePtr[0]; + S->pCosFactor = pCosFactor[0]; + break; + default: + status = ARM_MATH_ARGUMENT_ERROR; + } + + /* Initialize the RFFT/RIFFT Function */ + arm_rfft_init_q31(S->pRfft, S->N, 0, 1); + + /* return the status of DCT4 Init function */ + return (status); +} + +/** + * @} end of DCT4_IDCT4 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,394 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_dct4_q15.c +* +* Description: Processing function of DCT4 & IDCT4 Q15. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @addtogroup DCT4_IDCT4 + * @{ + */ + +/** + * @brief Processing function for the Q15 DCT4/IDCT4. + * @param[in] *S points to an instance of the Q15 DCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + * + * \par Input an output formats: + * Internally inputs are downscaled in the RFFT process function to avoid overflows. + * Number of bits downscaled, depends on the size of the transform. + * The input and output formats for different DCT sizes and number of bits to upscale are mentioned in the table below: + * + * \image html dct4FormatsQ15Table.gif + */ + +void arm_dct4_q15( + const arm_dct4_instance_q15 * S, + q15_t * pState, + q15_t * pInlineBuffer) +{ + uint32_t i; /* Loop counter */ + q15_t *weights = S->pTwiddle; /* Pointer to the Weights table */ + q15_t *cosFact = S->pCosFactor; /* Pointer to the cos factors table */ + q15_t *pS1, *pS2, *pbuff; /* Temporary pointers for input buffer and pState buffer */ + q15_t in; /* Temporary variable */ + + + /* DCT4 computation involves DCT2 (which is calculated using RFFT) + * along with some pre-processing and post-processing. + * Computational procedure is explained as follows: + * (a) Pre-processing involves multiplying input with cos factor, + * r(n) = 2 * u(n) * cos(pi*(2*n+1)/(4*n)) + * where, + * r(n) -- output of preprocessing + * u(n) -- input to preprocessing(actual Source buffer) + * (b) Calculation of DCT2 using FFT is divided into three steps: + * Step1: Re-ordering of even and odd elements of input. + * Step2: Calculating FFT of the re-ordered input. + * Step3: Taking the real part of the product of FFT output and weights. + * (c) Post-processing - DCT4 can be obtained from DCT2 output using the following equation: + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * where, + * Y4 -- DCT4 output, Y2 -- DCT2 output + * (d) Multiplying the output with the normalizing factor sqrt(2/N). + */ + + /*-------- Pre-processing ------------*/ + /* Multiplying input with cos factor i.e. r(n) = 2 * x(n) * cos(pi*(2*n+1)/(4*n)) */ + arm_mult_q15(pInlineBuffer, cosFact, pInlineBuffer, S->N); + arm_shift_q15(pInlineBuffer, 1, pInlineBuffer, S->N); + + /* ---------------------------------------------------------------- + * Step1: Re-ordering of even and odd elements as + * pState[i] = pInlineBuffer[2*i] and + * pState[N-i-1] = pInlineBuffer[2*i+1] where i = 0 to N/2 + ---------------------------------------------------------------------*/ + + /* pS1 initialized to pState */ + pS1 = pState; + + /* pS2 initialized to pState+N-1, so that it points to the end of the state buffer */ + pS2 = pState + (S->N - 1u); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Initializing the loop counter to N/2 >> 2 for loop unrolling by 4 */ + i = (uint32_t) S->Nby2 >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + do + { + /* Re-ordering of even and odd elements */ + /* pState[i] = pInlineBuffer[2*i] */ + *pS1++ = *pbuff++; + /* pState[N-i-1] = pInlineBuffer[2*i+1] */ + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Initializing the loop counter to N/4 instead of N for loop unrolling */ + i = (uint32_t) S->N >> 2u; + + /* Processing with loop unrolling 4 times as N is always multiple of 4. + * Compute 4 outputs at a time */ + do + { + /* Writing the re-ordered output back to inplace input buffer */ + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + + /* --------------------------------------------------------- + * Step2: Calculate RFFT for N-point input + * ---------------------------------------------------------- */ + /* pInlineBuffer is real input of length N , pState is the complex output of length 2N */ + arm_rfft_q15(S->pRfft, pInlineBuffer, pState); + + /*---------------------------------------------------------------------- + * Step3: Multiply the FFT output with the weights. + *----------------------------------------------------------------------*/ + arm_cmplx_mult_cmplx_q15(pState, weights, pState, S->N); + + /* The output of complex multiplication is in 3.13 format. + * Hence changing the format of N (i.e. 2*N elements) complex numbers to 1.15 format by shifting left by 2 bits. */ + arm_shift_q15(pState, 2, pState, S->N * 2); + + /* ----------- Post-processing ---------- */ + /* DCT-IV can be obtained from DCT-II by the equation, + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * Hence, Y4(0) = Y2(0)/2 */ + /* Getting only real part from the output and Converting to DCT-IV */ + + /* Initializing the loop counter to N >> 2 for loop unrolling by 4 */ + i = ((uint32_t) S->N - 1u) >> 2u; + + /* pbuff initialized to input buffer. */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Calculating Y4(0) from Y2(0) using Y4(0) = Y2(0)/2 */ + in = *pS1++ >> 1u; + /* input buffer acts as inplace, so output values are stored in the input itself. */ + *pbuff++ = in; + + /* pState pointer is incremented twice as the real values are located alternatively in the array */ + pS1++; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + do + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + /* points to the next real value */ + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + i = ((uint32_t) S->N - 1u) % 0x4u; + + while(i > 0u) + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + /* points to the next real value */ + pS1++; + + /* Decrement the loop counter */ + i--; + } + + + /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ + + /* Initializing the loop counter to N/4 instead of N for loop unrolling */ + i = (uint32_t) S->N >> 2u; + + /* pbuff initialized to the pInlineBuffer(now contains the output values) */ + pbuff = pInlineBuffer; + + /* Processing with loop unrolling 4 times as N is always multiple of 4. Compute 4 outputs at a time */ + do + { + /* Multiplying pInlineBuffer with the normalizing factor sqrt(2/N) */ + in = *pbuff; + *pbuff++ = ((q15_t) (((q31_t) in * S->normalize) >> 15)); + + in = *pbuff; + *pbuff++ = ((q15_t) (((q31_t) in * S->normalize) >> 15)); + + in = *pbuff; + *pbuff++ = ((q15_t) (((q31_t) in * S->normalize) >> 15)); + + in = *pbuff; + *pbuff++ = ((q15_t) (((q31_t) in * S->normalize) >> 15)); + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initializing the loop counter to N/2 */ + i = (uint32_t) S->Nby2; + + do + { + /* Re-ordering of even and odd elements */ + /* pState[i] = pInlineBuffer[2*i] */ + *pS1++ = *pbuff++; + /* pState[N-i-1] = pInlineBuffer[2*i+1] */ + *pS2-- = *pbuff++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Initializing the loop counter */ + i = (uint32_t) S->N; + + do + { + /* Writing the re-ordered output back to inplace input buffer */ + *pbuff++ = *pS1++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + + /* --------------------------------------------------------- + * Step2: Calculate RFFT for N-point input + * ---------------------------------------------------------- */ + /* pInlineBuffer is real input of length N , pState is the complex output of length 2N */ + arm_rfft_q15(S->pRfft, pInlineBuffer, pState); + + /*---------------------------------------------------------------------- + * Step3: Multiply the FFT output with the weights. + *----------------------------------------------------------------------*/ + arm_cmplx_mult_cmplx_q15(pState, weights, pState, S->N); + + /* The output of complex multiplication is in 3.13 format. + * Hence changing the format of N (i.e. 2*N elements) complex numbers to 1.15 format by shifting left by 2 bits. */ + arm_shift_q15(pState, 2, pState, S->N * 2); + + /* ----------- Post-processing ---------- */ + /* DCT-IV can be obtained from DCT-II by the equation, + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * Hence, Y4(0) = Y2(0)/2 */ + /* Getting only real part from the output and Converting to DCT-IV */ + + /* Initializing the loop counter */ + i = ((uint32_t) S->N - 1u); + + /* pbuff initialized to input buffer. */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Calculating Y4(0) from Y2(0) using Y4(0) = Y2(0)/2 */ + in = *pS1++ >> 1u; + /* input buffer acts as inplace, so output values are stored in the input itself. */ + *pbuff++ = in; + + /* pState pointer is incremented twice as the real values are located alternatively in the array */ + pS1++; + + do + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + /* points to the next real value */ + pS1++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ + + /* Initializing the loop counter */ + i = (uint32_t) S->N; + + /* pbuff initialized to the pInlineBuffer(now contains the output values) */ + pbuff = pInlineBuffer; + + do + { + /* Multiplying pInlineBuffer with the normalizing factor sqrt(2/N) */ + in = *pbuff; + *pbuff++ = ((q15_t) (((q31_t) in * S->normalize) >> 15)); + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of DCT4_IDCT4 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,395 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_dct4_q31.c +* +* Description: Processing function of DCT4 & IDCT4 Q31. +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/** + * @addtogroup DCT4_IDCT4 + * @{ + */ + +/** + * @brief Processing function for the Q31 DCT4/IDCT4. + * @param[in] *S points to an instance of the Q31 DCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + * \par Input an output formats: + * Input samples need to be downscaled by 1 bit to avoid saturations in the Q31 DCT process, + * as the conversion from DCT2 to DCT4 involves one subtraction. + * Internally inputs are downscaled in the RFFT process function to avoid overflows. + * Number of bits downscaled, depends on the size of the transform. + * The input and output formats for different DCT sizes and number of bits to upscale are mentioned in the table below: + * + * \image html dct4FormatsQ31Table.gif + */ + +void arm_dct4_q31( + const arm_dct4_instance_q31 * S, + q31_t * pState, + q31_t * pInlineBuffer) +{ + uint16_t i; /* Loop counter */ + q31_t *weights = S->pTwiddle; /* Pointer to the Weights table */ + q31_t *cosFact = S->pCosFactor; /* Pointer to the cos factors table */ + q31_t *pS1, *pS2, *pbuff; /* Temporary pointers for input buffer and pState buffer */ + q31_t in; /* Temporary variable */ + + + /* DCT4 computation involves DCT2 (which is calculated using RFFT) + * along with some pre-processing and post-processing. + * Computational procedure is explained as follows: + * (a) Pre-processing involves multiplying input with cos factor, + * r(n) = 2 * u(n) * cos(pi*(2*n+1)/(4*n)) + * where, + * r(n) -- output of preprocessing + * u(n) -- input to preprocessing(actual Source buffer) + * (b) Calculation of DCT2 using FFT is divided into three steps: + * Step1: Re-ordering of even and odd elements of input. + * Step2: Calculating FFT of the re-ordered input. + * Step3: Taking the real part of the product of FFT output and weights. + * (c) Post-processing - DCT4 can be obtained from DCT2 output using the following equation: + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * where, + * Y4 -- DCT4 output, Y2 -- DCT2 output + * (d) Multiplying the output with the normalizing factor sqrt(2/N). + */ + + /*-------- Pre-processing ------------*/ + /* Multiplying input with cos factor i.e. r(n) = 2 * x(n) * cos(pi*(2*n+1)/(4*n)) */ + arm_mult_q31(pInlineBuffer, cosFact, pInlineBuffer, S->N); + arm_shift_q31(pInlineBuffer, 1, pInlineBuffer, S->N); + + /* ---------------------------------------------------------------- + * Step1: Re-ordering of even and odd elements as + * pState[i] = pInlineBuffer[2*i] and + * pState[N-i-1] = pInlineBuffer[2*i+1] where i = 0 to N/2 + ---------------------------------------------------------------------*/ + + /* pS1 initialized to pState */ + pS1 = pState; + + /* pS2 initialized to pState+N-1, so that it points to the end of the state buffer */ + pS2 = pState + (S->N - 1u); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + + /* Initializing the loop counter to N/2 >> 2 for loop unrolling by 4 */ + i = S->Nby2 >> 2u; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + do + { + /* Re-ordering of even and odd elements */ + /* pState[i] = pInlineBuffer[2*i] */ + *pS1++ = *pbuff++; + /* pState[N-i-1] = pInlineBuffer[2*i+1] */ + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Initializing the loop counter to N/4 instead of N for loop unrolling */ + i = S->N >> 2u; + + /* Processing with loop unrolling 4 times as N is always multiple of 4. + * Compute 4 outputs at a time */ + do + { + /* Writing the re-ordered output back to inplace input buffer */ + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + + /* --------------------------------------------------------- + * Step2: Calculate RFFT for N-point input + * ---------------------------------------------------------- */ + /* pInlineBuffer is real input of length N , pState is the complex output of length 2N */ + arm_rfft_q31(S->pRfft, pInlineBuffer, pState); + + /*---------------------------------------------------------------------- + * Step3: Multiply the FFT output with the weights. + *----------------------------------------------------------------------*/ + arm_cmplx_mult_cmplx_q31(pState, weights, pState, S->N); + + /* The output of complex multiplication is in 3.29 format. + * Hence changing the format of N (i.e. 2*N elements) complex numbers to 1.31 format by shifting left by 2 bits. */ + arm_shift_q31(pState, 2, pState, S->N * 2); + + /* ----------- Post-processing ---------- */ + /* DCT-IV can be obtained from DCT-II by the equation, + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * Hence, Y4(0) = Y2(0)/2 */ + /* Getting only real part from the output and Converting to DCT-IV */ + + /* Initializing the loop counter to N >> 2 for loop unrolling by 4 */ + i = (S->N - 1u) >> 2u; + + /* pbuff initialized to input buffer. */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Calculating Y4(0) from Y2(0) using Y4(0) = Y2(0)/2 */ + in = *pS1++ >> 1u; + /* input buffer acts as inplace, so output values are stored in the input itself. */ + *pbuff++ = in; + + /* pState pointer is incremented twice as the real values are located alternatively in the array */ + pS1++; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + do + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + /* points to the next real value */ + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + i = (S->N - 1u) % 0x4u; + + while(i > 0u) + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + /* points to the next real value */ + pS1++; + + /* Decrement the loop counter */ + i--; + } + + + /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ + + /* Initializing the loop counter to N/4 instead of N for loop unrolling */ + i = S->N >> 2u; + + /* pbuff initialized to the pInlineBuffer(now contains the output values) */ + pbuff = pInlineBuffer; + + /* Processing with loop unrolling 4 times as N is always multiple of 4. Compute 4 outputs at a time */ + do + { + /* Multiplying pInlineBuffer with the normalizing factor sqrt(2/N) */ + in = *pbuff; + *pbuff++ = ((q31_t) (((q63_t) in * S->normalize) >> 31)); + + in = *pbuff; + *pbuff++ = ((q31_t) (((q63_t) in * S->normalize) >> 31)); + + in = *pbuff; + *pbuff++ = ((q31_t) (((q63_t) in * S->normalize) >> 31)); + + in = *pbuff; + *pbuff++ = ((q31_t) (((q63_t) in * S->normalize) >> 31)); + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + +#else + + /* Run the below code for Cortex-M0 */ + + /* Initializing the loop counter to N/2 */ + i = S->Nby2; + + do + { + /* Re-ordering of even and odd elements */ + /* pState[i] = pInlineBuffer[2*i] */ + *pS1++ = *pbuff++; + /* pState[N-i-1] = pInlineBuffer[2*i+1] */ + *pS2-- = *pbuff++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Initializing the loop counter */ + i = S->N; + + do + { + /* Writing the re-ordered output back to inplace input buffer */ + *pbuff++ = *pS1++; + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + + + /* --------------------------------------------------------- + * Step2: Calculate RFFT for N-point input + * ---------------------------------------------------------- */ + /* pInlineBuffer is real input of length N , pState is the complex output of length 2N */ + arm_rfft_q31(S->pRfft, pInlineBuffer, pState); + + /*---------------------------------------------------------------------- + * Step3: Multiply the FFT output with the weights. + *----------------------------------------------------------------------*/ + arm_cmplx_mult_cmplx_q31(pState, weights, pState, S->N); + + /* The output of complex multiplication is in 3.29 format. + * Hence changing the format of N (i.e. 2*N elements) complex numbers to 1.31 format by shifting left by 2 bits. */ + arm_shift_q31(pState, 2, pState, S->N * 2); + + /* ----------- Post-processing ---------- */ + /* DCT-IV can be obtained from DCT-II by the equation, + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * Hence, Y4(0) = Y2(0)/2 */ + /* Getting only real part from the output and Converting to DCT-IV */ + + /* pbuff initialized to input buffer. */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Calculating Y4(0) from Y2(0) using Y4(0) = Y2(0)/2 */ + in = *pS1++ >> 1u; + /* input buffer acts as inplace, so output values are stored in the input itself. */ + *pbuff++ = in; + + /* pState pointer is incremented twice as the real values are located alternatively in the array */ + pS1++; + + /* Initializing the loop counter */ + i = (S->N - 1u); + + while(i > 0u) + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + /* points to the next real value */ + pS1++; + + /* Decrement the loop counter */ + i--; + } + + + /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ + + /* Initializing the loop counter */ + i = S->N; + + /* pbuff initialized to the pInlineBuffer(now contains the output values) */ + pbuff = pInlineBuffer; + + do + { + /* Multiplying pInlineBuffer with the normalizing factor sqrt(2/N) */ + in = *pbuff; + *pbuff++ = ((q31_t) (((q63_t) in * S->normalize) >> 31)); + + /* Decrement the loop counter */ + i--; + } while(i > 0u); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} + +/** + * @} end of DCT4_IDCT4 group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,329 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_rfft_f32.c +* +* Description: RFFT & RIFFT Floating point process function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +extern void arm_radix4_butterfly_f32( + float32_t * pSrc, + uint16_t fftLen, + float32_t * pCoef, + uint16_t twidCoefModifier); + +extern void arm_radix4_butterfly_inverse_f32( + float32_t * pSrc, + uint16_t fftLen, + float32_t * pCoef, + uint16_t twidCoefModifier, + float32_t onebyfftLen); + +extern void arm_bitreversal_f32( + float32_t * pSrc, + uint16_t fftSize, + uint16_t bitRevFactor, + uint16_t * pBitRevTab); + +/** + * @ingroup groupTransforms + */ + +/*-------------------------------------------------------------------- + * Internal functions prototypes + *--------------------------------------------------------------------*/ + +void arm_split_rfft_f32( + float32_t * pSrc, + uint32_t fftLen, + float32_t * pATable, + float32_t * pBTable, + float32_t * pDst, + uint32_t modifier); +void arm_split_rifft_f32( + float32_t * pSrc, + uint32_t fftLen, + float32_t * pATable, + float32_t * pBTable, + float32_t * pDst, + uint32_t modifier); + +/** + * @addtogroup RealFFT + * @{ + */ + +/** + * @brief Processing function for the floating-point RFFT/RIFFT. + * @deprecated Do not use this function. It has been superceded by \ref arm_rfft_fast_f32 and will be removed + * in the future. + * @param[in] *S points to an instance of the floating-point RFFT/RIFFT structure. + * @param[in] *pSrc points to the input buffer. + * @param[out] *pDst points to the output buffer. + * @return none. + */ + +void arm_rfft_f32( + const arm_rfft_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst) +{ + const arm_cfft_radix4_instance_f32 *S_CFFT = S->pCfft; + + + /* Calculation of Real IFFT of input */ + if(S->ifftFlagR == 1u) + { + /* Real IFFT core process */ + arm_split_rifft_f32(pSrc, S->fftLenBy2, S->pTwiddleAReal, + S->pTwiddleBReal, pDst, S->twidCoefRModifier); + + + /* Complex radix-4 IFFT process */ + arm_radix4_butterfly_inverse_f32(pDst, S_CFFT->fftLen, + S_CFFT->pTwiddle, + S_CFFT->twidCoefModifier, + S_CFFT->onebyfftLen); + + /* Bit reversal process */ + if(S->bitReverseFlagR == 1u) + { + arm_bitreversal_f32(pDst, S_CFFT->fftLen, + S_CFFT->bitRevFactor, S_CFFT->pBitRevTable); + } + } + else + { + + /* Calculation of RFFT of input */ + + /* Complex radix-4 FFT process */ + arm_radix4_butterfly_f32(pSrc, S_CFFT->fftLen, + S_CFFT->pTwiddle, S_CFFT->twidCoefModifier); + + /* Bit reversal process */ + if(S->bitReverseFlagR == 1u) + { + arm_bitreversal_f32(pSrc, S_CFFT->fftLen, + S_CFFT->bitRevFactor, S_CFFT->pBitRevTable); + } + + + /* Real FFT core process */ + arm_split_rfft_f32(pSrc, S->fftLenBy2, S->pTwiddleAReal, + S->pTwiddleBReal, pDst, S->twidCoefRModifier); + } + +} + +/** + * @} end of RealFFT group + */ + +/** + * @brief Core Real FFT process + * @param[in] *pSrc points to the input buffer. + * @param[in] fftLen length of FFT. + * @param[in] *pATable points to the twiddle Coef A buffer. + * @param[in] *pBTable points to the twiddle Coef B buffer. + * @param[out] *pDst points to the output buffer. + * @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + +void arm_split_rfft_f32( + float32_t * pSrc, + uint32_t fftLen, + float32_t * pATable, + float32_t * pBTable, + float32_t * pDst, + uint32_t modifier) +{ + uint32_t i; /* Loop Counter */ + float32_t outR, outI; /* Temporary variables for output */ + float32_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ + float32_t CoefA1, CoefA2, CoefB1; /* Temporary variables for twiddle coefficients */ + float32_t *pDst1 = &pDst[2], *pDst2 = &pDst[(4u * fftLen) - 1u]; /* temp pointers for output buffer */ + float32_t *pSrc1 = &pSrc[2], *pSrc2 = &pSrc[(2u * fftLen) - 1u]; /* temp pointers for input buffer */ + + /* Init coefficient pointers */ + pCoefA = &pATable[modifier * 2u]; + pCoefB = &pBTable[modifier * 2u]; + + i = fftLen - 1u; + + while(i > 0u) + { + /* + outR = (pSrc[2 * i] * pATable[2 * i] - pSrc[2 * i + 1] * pATable[2 * i + 1] + + pSrc[2 * n - 2 * i] * pBTable[2 * i] + + pSrc[2 * n - 2 * i + 1] * pBTable[2 * i + 1]); + */ + + /* outI = (pIn[2 * i + 1] * pATable[2 * i] + pIn[2 * i] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i + 1] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); */ + + /* read pATable[2 * i] */ + CoefA1 = *pCoefA++; + /* pATable[2 * i + 1] */ + CoefA2 = *pCoefA; + + /* pSrc[2 * i] * pATable[2 * i] */ + outR = *pSrc1 * CoefA1; + /* pSrc[2 * i] * CoefA2 */ + outI = *pSrc1++ * CoefA2; + + /* (pSrc[2 * i + 1] + pSrc[2 * fftLen - 2 * i + 1]) * CoefA2 */ + outR -= (*pSrc1 + *pSrc2) * CoefA2; + /* pSrc[2 * i + 1] * CoefA1 */ + outI += *pSrc1++ * CoefA1; + + CoefB1 = *pCoefB; + + /* pSrc[2 * fftLen - 2 * i + 1] * CoefB1 */ + outI -= *pSrc2-- * CoefB1; + /* pSrc[2 * fftLen - 2 * i] * CoefA2 */ + outI -= *pSrc2 * CoefA2; + + /* pSrc[2 * fftLen - 2 * i] * CoefB1 */ + outR += *pSrc2-- * CoefB1; + + /* write output */ + *pDst1++ = outR; + *pDst1++ = outI; + + /* write complex conjugate output */ + *pDst2-- = -outI; + *pDst2-- = outR; + + /* update coefficient pointer */ + pCoefB = pCoefB + (modifier * 2u); + pCoefA = pCoefA + ((modifier * 2u) - 1u); + + i--; + + } + + pDst[2u * fftLen] = pSrc[0] - pSrc[1]; + pDst[(2u * fftLen) + 1u] = 0.0f; + + pDst[0] = pSrc[0] + pSrc[1]; + pDst[1] = 0.0f; + +} + + +/** + * @brief Core Real IFFT process + * @param[in] *pSrc points to the input buffer. + * @param[in] fftLen length of FFT. + * @param[in] *pATable points to the twiddle Coef A buffer. + * @param[in] *pBTable points to the twiddle Coef B buffer. + * @param[out] *pDst points to the output buffer. + * @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + * @return none. + */ + +void arm_split_rifft_f32( + float32_t * pSrc, + uint32_t fftLen, + float32_t * pATable, + float32_t * pBTable, + float32_t * pDst, + uint32_t modifier) +{ + float32_t outR, outI; /* Temporary variables for output */ + float32_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ + float32_t CoefA1, CoefA2, CoefB1; /* Temporary variables for twiddle coefficients */ + float32_t *pSrc1 = &pSrc[0], *pSrc2 = &pSrc[(2u * fftLen) + 1u]; + + pCoefA = &pATable[0]; + pCoefB = &pBTable[0]; + + while(fftLen > 0u) + { + /* + outR = (pIn[2 * i] * pATable[2 * i] + pIn[2 * i + 1] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1]); + + outI = (pIn[2 * i + 1] * pATable[2 * i] - pIn[2 * i] * pATable[2 * i + 1] - + pIn[2 * n - 2 * i] * pBTable[2 * i + 1] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); + + */ + + CoefA1 = *pCoefA++; + CoefA2 = *pCoefA; + + /* outR = (pSrc[2 * i] * CoefA1 */ + outR = *pSrc1 * CoefA1; + + /* - pSrc[2 * i] * CoefA2 */ + outI = -(*pSrc1++) * CoefA2; + + /* (pSrc[2 * i + 1] + pSrc[2 * fftLen - 2 * i + 1]) * CoefA2 */ + outR += (*pSrc1 + *pSrc2) * CoefA2; + + /* pSrc[2 * i + 1] * CoefA1 */ + outI += (*pSrc1++) * CoefA1; + + CoefB1 = *pCoefB; + + /* - pSrc[2 * fftLen - 2 * i + 1] * CoefB1 */ + outI -= *pSrc2-- * CoefB1; + + /* pSrc[2 * fftLen - 2 * i] * CoefB1 */ + outR += *pSrc2 * CoefB1; + + /* pSrc[2 * fftLen - 2 * i] * CoefA2 */ + outI += *pSrc2-- * CoefA2; + + /* write output */ + *pDst++ = outR; + *pDst++ = outI; + + /* update coefficient pointer */ + pCoefB = pCoefB + (modifier * 2u); + pCoefA = pCoefA + ((modifier * 2u) - 1u); + + /* Decrement loop count */ + fftLen--; + } + +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_fast_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_fast_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,353 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_rfft_f32.c +* +* Description: RFFT & RIFFT Floating point process function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +void stage_rfft_f32( + arm_rfft_fast_instance_f32 * S, + float32_t * p, float32_t * pOut) +{ + uint32_t k; /* Loop Counter */ + float32_t twR, twI; /* RFFT Twiddle coefficients */ + float32_t * pCoeff = S->pTwiddleRFFT; /* Points to RFFT Twiddle factors */ + float32_t *pA = p; /* increasing pointer */ + float32_t *pB = p; /* decreasing pointer */ + float32_t xAR, xAI, xBR, xBI; /* temporary variables */ + float32_t t1a, t1b; /* temporary variables */ + float32_t p0, p1, p2, p3; /* temporary variables */ + + + k = (S->Sint).fftLen - 1; + + /* Pack first and last sample of the frequency domain together */ + + xBR = pB[0]; + xBI = pB[1]; + xAR = pA[0]; + xAI = pA[1]; + + twR = *pCoeff++ ; + twI = *pCoeff++ ; + + // U1 = XA(1) + XB(1); % It is real + t1a = xBR + xAR ; + + // U2 = XB(1) - XA(1); % It is imaginary + t1b = xBI + xAI ; + + // real(tw * (xB - xA)) = twR * (xBR - xAR) - twI * (xBI - xAI); + // imag(tw * (xB - xA)) = twI * (xBR - xAR) + twR * (xBI - xAI); + *pOut++ = 0.5f * ( t1a + t1b ); + *pOut++ = 0.5f * ( t1a - t1b ); + + // XA(1) = 1/2*( U1 - imag(U2) + i*( U1 +imag(U2) )); + pB = p + 2*k; + pA += 2; + + do + { + /* + function X = my_split_rfft(X, ifftFlag) + % X is a series of real numbers + L = length(X); + XC = X(1:2:end) +i*X(2:2:end); + XA = fft(XC); + XB = conj(XA([1 end:-1:2])); + TW = i*exp(-2*pi*i*[0:L/2-1]/L).'; + for l = 2:L/2 + XA(l) = 1/2 * (XA(l) + XB(l) + TW(l) * (XB(l) - XA(l))); + end + XA(1) = 1/2* (XA(1) + XB(1) + TW(1) * (XB(1) - XA(1))) + i*( 1/2*( XA(1) + XB(1) + i*( XA(1) - XB(1)))); + X = XA; + */ + + xBI = pB[1]; + xBR = pB[0]; + xAR = pA[0]; + xAI = pA[1]; + + twR = *pCoeff++; + twI = *pCoeff++; + + t1a = xBR - xAR ; + t1b = xBI + xAI ; + + // real(tw * (xB - xA)) = twR * (xBR - xAR) - twI * (xBI - xAI); + // imag(tw * (xB - xA)) = twI * (xBR - xAR) + twR * (xBI - xAI); + p0 = twR * t1a; + p1 = twI * t1a; + p2 = twR * t1b; + p3 = twI * t1b; + + *pOut++ = 0.5f * (xAR + xBR + p0 + p3 ); //xAR + *pOut++ = 0.5f * (xAI - xBI + p1 - p2 ); //xAI + + pA += 2; + pB -= 2; + k--; + } while(k > 0u); +} + +/* Prepares data for inverse cfft */ +void merge_rfft_f32( +arm_rfft_fast_instance_f32 * S, +float32_t * p, float32_t * pOut) +{ + uint32_t k; /* Loop Counter */ + float32_t twR, twI; /* RFFT Twiddle coefficients */ + float32_t *pCoeff = S->pTwiddleRFFT; /* Points to RFFT Twiddle factors */ + float32_t *pA = p; /* increasing pointer */ + float32_t *pB = p; /* decreasing pointer */ + float32_t xAR, xAI, xBR, xBI; /* temporary variables */ + float32_t t1a, t1b, r, s, t, u; /* temporary variables */ + + k = (S->Sint).fftLen - 1; + + xAR = pA[0]; + xAI = pA[1]; + + pCoeff += 2 ; + + *pOut++ = 0.5f * ( xAR + xAI ); + *pOut++ = 0.5f * ( xAR - xAI ); + + pB = p + 2*k ; + pA += 2 ; + + while(k > 0u) + { + /* G is half of the frequency complex spectrum */ + //for k = 2:N + // Xk(k) = 1/2 * (G(k) + conj(G(N-k+2)) + Tw(k)*( G(k) - conj(G(N-k+2)))); + xBI = pB[1] ; + xBR = pB[0] ; + xAR = pA[0]; + xAI = pA[1]; + + twR = *pCoeff++; + twI = *pCoeff++; + + t1a = xAR - xBR ; + t1b = xAI + xBI ; + + r = twR * t1a; + s = twI * t1b; + t = twI * t1a; + u = twR * t1b; + + // real(tw * (xA - xB)) = twR * (xAR - xBR) - twI * (xAI - xBI); + // imag(tw * (xA - xB)) = twI * (xAR - xBR) + twR * (xAI - xBI); + *pOut++ = 0.5f * (xAR + xBR - r - s ); //xAR + *pOut++ = 0.5f * (xAI - xBI + t - u ); //xAI + + pA += 2; + pB -= 2; + k--; + } + +} + +/** +* @ingroup groupTransforms +*/ + +/** + * @defgroup Fast Real FFT Functions + * + * \par + * The CMSIS DSP library includes specialized algorithms for computing the + * FFT of real data sequences. The FFT is defined over complex data but + * in many applications the input is real. Real FFT algorithms take advantage + * of the symmetry properties of the FFT and have a speed advantage over complex + * algorithms of the same length. + * \par + * The Fast RFFT algorith relays on the mixed radix CFFT that save processor usage. + * \par + * The real length N forward FFT of a sequence is computed using the steps shown below. + * \par + * \image html RFFT.gif "Real Fast Fourier Transform" + * \par + * The real sequence is initially treated as if it were complex to perform a CFFT. + * Later, a processing stage reshapes the data to obtain half of the frequency spectrum + * in complex format. Except the first complex number that contains the two real numbers + * X[0] and X[N/2] all the data is complex. In other words, the first complex sample + * contains two real values packed. + * \par + * The input for the inverse RFFT should keep the same format as the output of the + * forward RFFT. A first processing stage pre-process the data to later perform an + * inverse CFFT. + * \par + * \image html RIFFT.gif "Real Inverse Fast Fourier Transform" + * \par + * The algorithms for floating-point, Q15, and Q31 data are slightly different + * and we describe each algorithm in turn. + * \par Floating-point + * The main functions are arm_rfft_fast_f32() + * and arm_rfft_fast_init_f32(). The older functions + * arm_rfft_f32() and arm_rfft_init_f32() have been + * deprecated but are still documented. + * \par + * The FFT of a real N-point sequence has even symmetry in the frequency + * domain. The second half of the data equals the conjugate of the first half + * flipped in frequency: + *
+ *X[0] - real data
+ *X[1] - complex data
+ *X[2] - complex data
+ *... 
+ *X[fftLen/2-1] - complex data
+ *X[fftLen/2] - real data
+ *X[fftLen/2+1] - conjugate of X[fftLen/2-1]
+ *X[fftLen/2+2] - conjugate of X[fftLen/2-2]
+ *... 
+ *X[fftLen-1] - conjugate of X[1]
+ * 
+ * Looking at the data, we see that we can uniquely represent the FFT using only + *
+ *N/2+1 samples:
+ *X[0] - real data
+ *X[1] - complex data
+ *X[2] - complex data
+ *... 
+ *X[fftLen/2-1] - complex data
+ *X[fftLen/2] - real data
+ * 
+ * Looking more closely we see that the first and last samples are real valued. + * They can be packed together and we can thus represent the FFT of an N-point + * real sequence by N/2 complex values: + *
+ *X[0],X[N/2] - packed real data: X[0] + jX[N/2]
+ *X[1] - complex data
+ *X[2] - complex data
+ *... 
+ *X[fftLen/2-1] - complex data
+ * 
+ * The real FFT functions pack the frequency domain data in this fashion. The + * forward transform outputs the data in this form and the inverse transform + * expects input data in this form. The function always performs the needed + * bitreversal so that the input and output data is always in normal order. The + * functions support lengths of [32, 64, 128, ..., 4096] samples. + * \par + * The forward and inverse real FFT functions apply the standard FFT scaling; no + * scaling on the forward transform and 1/fftLen scaling on the inverse + * transform. + * \par Q15 and Q31 + * The real algorithms are defined in a similar manner and utilize N/2 complex + * transforms behind the scenes. + * \par + * The complex transforms used internally include scaling to prevent fixed-point + * overflows. The overall scaling equals 1/(fftLen/2). + * \par + * A separate instance structure must be defined for each transform used but + * twiddle factor and bit reversal tables can be reused. + * \par + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Sets the values of the internal structure fields. + * - Initializes twiddle factor table and bit reversal table pointers. + * - Initializes the internal complex FFT data structure. + * \par + * Use of the initialization function is optional. + * However, if the initialization function is used, then the instance structure + * cannot be placed into a const data section. To place an instance structure + * into a const data section, the instance structure should be manually + * initialized as follows: + *
+ *arm_rfft_instance_q31 S = {fftLenReal, fftLenBy2, ifftFlagR, bitReverseFlagR, twidCoefRModifier, pTwiddleAReal, pTwiddleBReal, pCfft};    
+ *arm_rfft_instance_q15 S = {fftLenReal, fftLenBy2, ifftFlagR, bitReverseFlagR, twidCoefRModifier, pTwiddleAReal, pTwiddleBReal, pCfft};    
+ * 
+ * where fftLenReal is the length of the real transform; + * fftLenBy2 length of the internal complex transform. + * ifftFlagR Selects forward (=0) or inverse (=1) transform. + * bitReverseFlagR Selects bit reversed output (=0) or normal order + * output (=1). + * twidCoefRModifier stride modifier for the twiddle factor table. + * The value is based on the FFT length; + * pTwiddleARealpoints to the A array of twiddle coefficients; + * pTwiddleBRealpoints to the B array of twiddle coefficients; + * pCfft points to the CFFT Instance structure. The CFFT structure + * must also be initialized. Refer to arm_cfft_radix4_f32() for details regarding + * static initialization of the complex FFT instance structure. + */ + +/** +* @addtogroup RealFFT +* @{ +*/ + +/** +* @brief Processing function for the floating-point real FFT. +* @param[in] *S points to an arm_rfft_fast_instance_f32 structure. +* @param[in] *p points to the input buffer. +* @param[in] *pOut points to the output buffer. +* @param[in] ifftFlag RFFT if flag is 0, RIFFT if flag is 1 +* @return none. +*/ + +void arm_rfft_fast_f32( +arm_rfft_fast_instance_f32 * S, +float32_t * p, float32_t * pOut, +uint8_t ifftFlag) +{ + arm_cfft_instance_f32 * Sint = &(S->Sint); + Sint->fftLen = S->fftLenRFFT / 2; + + /* Calculation of Real FFT */ + if(ifftFlag) + { + /* Real FFT compression */ + merge_rfft_f32(S, p, pOut); + + /* Complex radix-4 IFFT process */ + arm_cfft_f32( Sint, pOut, ifftFlag, 1); + } + else + { + /* Calculation of RFFT of input */ + arm_cfft_f32( Sint, p, ifftFlag, 1); + + /* Real FFT extraction */ + stage_rfft_f32(S, p, pOut); + } +} + +/** +* @} end of RealFFT group +*/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_fast_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_fast_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,143 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_cfft_init_f32.c +* +* Description: Split Radix Decimation in Frequency CFFT Floating point processing function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup RealFFT + * @{ + */ + +/** +* @brief Initialization function for the floating-point real FFT. +* @param[in,out] *S points to an arm_rfft_fast_instance_f32 structure. +* @param[in] fftLen length of the Real Sequence. +* @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLen is not a supported value. +* +* \par Description: +* \par +* The parameter fftLen Specifies length of RFFT/CIFFT process. Supported FFT Lengths are 32, 64, 128, 256, 512, 1024, 2048, 4096. +* \par +* This Function also initializes Twiddle factor table pointer and Bit reversal table pointer. +*/ +arm_status arm_rfft_fast_init_f32( + arm_rfft_fast_instance_f32 * S, + uint16_t fftLen) +{ + arm_cfft_instance_f32 * Sint; + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + /* Initialise the FFT length */ + Sint = &(S->Sint); + Sint->fftLen = fftLen/2; + S->fftLenRFFT = fftLen; + + /* Initializations of structure parameters depending on the FFT length */ + switch (Sint->fftLen) + { + case 2048u: + /* Initializations of structure parameters for 2048 point FFT */ + /* Initialise the bit reversal table length */ + Sint->bitRevLength = ARMBITREVINDEXTABLE2048_TABLE_LENGTH; + /* Initialise the bit reversal table pointer */ + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable2048; + /* Initialise the Twiddle coefficient pointers */ + Sint->pTwiddle = (float32_t *) twiddleCoef_2048; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_4096; + break; + case 1024u: + Sint->bitRevLength = ARMBITREVINDEXTABLE1024_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable1024; + Sint->pTwiddle = (float32_t *) twiddleCoef_1024; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_2048; + break; + case 512u: + Sint->bitRevLength = ARMBITREVINDEXTABLE_512_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable512; + Sint->pTwiddle = (float32_t *) twiddleCoef_512; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_1024; + break; + case 256u: + Sint->bitRevLength = ARMBITREVINDEXTABLE_256_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable256; + Sint->pTwiddle = (float32_t *) twiddleCoef_256; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_512; + break; + case 128u: + Sint->bitRevLength = ARMBITREVINDEXTABLE_128_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable128; + Sint->pTwiddle = (float32_t *) twiddleCoef_128; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_256; + break; + case 64u: + Sint->bitRevLength = ARMBITREVINDEXTABLE__64_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable64; + Sint->pTwiddle = (float32_t *) twiddleCoef_64; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_128; + break; + case 32u: + Sint->bitRevLength = ARMBITREVINDEXTABLE__32_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable32; + Sint->pTwiddle = (float32_t *) twiddleCoef_32; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_64; + break; + case 16u: + Sint->bitRevLength = ARMBITREVINDEXTABLE__16_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable16; + Sint->pTwiddle = (float32_t *) twiddleCoef_16; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_32; + break; + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + return (status); +} + +/** + * @} end of RealFFT group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_init_f32.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_init_f32.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,8376 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_rfft_init_f32.c +* +* Description: RFFT & RIFFT Floating point initialisation function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +/** + * @ingroup groupTransforms + */ + +/** + * @addtogroup RealFFT + * @{ + */ + +/** +* \par +* Generation of realCoefA array: +* \par +* n = 4096 +*
for (i = 0; i < n; i++)    
+*  {    
+*    pATable[2 * i] = 0.5 * (1.0 - sin (2 * PI / (double) (2 * n) * (double) i));    
+*    pATable[2 * i + 1] = 0.5 * (-1.0 * cos (2 * PI / (double) (2 * n) * (double) i));    
+*  } 
+*/ + + + +static const float32_t realCoefA[8192] = { + 0.500000000000000f, -0.500000000000000f, 0.499616503715515f, + -0.499999850988388f, + 0.499233007431030f, -0.499999403953552f, 0.498849511146545f, + -0.499998688697815f, + 0.498466014862061f, -0.499997645616531f, 0.498082518577576f, + -0.499996334314346f, + 0.497699022293091f, -0.499994695186615f, 0.497315555810928f, + -0.499992787837982f, + 0.496932059526443f, -0.499990582466125f, 0.496548563241959f, + -0.499988079071045f, + 0.496165096759796f, -0.499985307455063f, 0.495781600475311f, + -0.499982208013535f, + 0.495398133993149f, -0.499978810548782f, 0.495014637708664f, + -0.499975144863129f, + 0.494631171226501f, -0.499971181154251f, 0.494247704744339f, + -0.499966919422150f, + 0.493864238262177f, -0.499962359666824f, 0.493480771780014f, + -0.499957501888275f, + 0.493097305297852f, -0.499952346086502f, 0.492713838815689f, + -0.499946922063828f, + 0.492330402135849f, -0.499941170215607f, 0.491946935653687f, + -0.499935150146484f, + 0.491563498973846f, -0.499928832054138f, 0.491180062294006f, + -0.499922215938568f, + 0.490796625614166f, -0.499915301799774f, 0.490413218736649f, + -0.499908089637756f, + 0.490029782056808f, -0.499900579452515f, 0.489646375179291f, + -0.499892801046371f, + 0.489262968301773f, -0.499884694814682f, 0.488879561424255f, + -0.499876320362091f, + 0.488496154546738f, -0.499867647886276f, 0.488112777471542f, + -0.499858677387238f, + 0.487729400396347f, -0.499849408864975f, 0.487346023321152f, + -0.499839842319489f, + 0.486962646245956f, -0.499830007553101f, 0.486579269170761f, + -0.499819844961166f, + 0.486195921897888f, -0.499809414148331f, 0.485812574625015f, + -0.499798685312271f, + 0.485429257154465f, -0.499787658452988f, 0.485045909881592f, + -0.499776333570480f, + 0.484662592411041f, -0.499764710664749f, 0.484279274940491f, + -0.499752789735794f, + 0.483895987272263f, -0.499740600585938f, 0.483512699604034f, + -0.499728083610535f, + 0.483129411935806f, -0.499715298414230f, 0.482746154069901f, + -0.499702215194702f, + 0.482362866401672f, -0.499688833951950f, 0.481979638338089f, + -0.499675154685974f, + 0.481596380472183f, -0.499661177396774f, 0.481213152408600f, + -0.499646931886673f, + 0.480829954147339f, -0.499632388353348f, 0.480446726083755f, + -0.499617516994476f, + 0.480063527822495f, -0.499602377414703f, 0.479680359363556f, + -0.499586939811707f, + 0.479297190904617f, -0.499571204185486f, 0.478914022445679f, + -0.499555170536041f, + 0.478530883789063f, -0.499538868665695f, 0.478147745132446f, + -0.499522238969803f, + 0.477764606475830f, -0.499505341053009f, 0.477381497621536f, + -0.499488145112991f, + 0.476998418569565f, -0.499470651149750f, 0.476615339517593f, + -0.499452859163284f, + 0.476232260465622f, -0.499434769153595f, 0.475849211215973f, + -0.499416410923004f, + 0.475466161966324f, -0.499397724866867f, 0.475083142518997f, + -0.499378770589828f, + 0.474700123071671f, -0.499359518289566f, 0.474317133426666f, + -0.499339967966080f, + 0.473934143781662f, -0.499320119619370f, 0.473551183938980f, + -0.499299973249435f, + 0.473168224096298f, -0.499279528856277f, 0.472785294055939f, + -0.499258816242218f, + 0.472402364015579f, -0.499237775802612f, 0.472019463777542f, + -0.499216467142105f, + 0.471636593341827f, -0.499194860458374f, 0.471253722906113f, + -0.499172955751419f, + 0.470870882272720f, -0.499150782823563f, 0.470488041639328f, + -0.499128282070160f, + 0.470105201005936f, -0.499105513095856f, 0.469722419977188f, + -0.499082416296005f, + 0.469339638948441f, -0.499059051275253f, 0.468956857919693f, + -0.499035388231277f, + 0.468574106693268f, -0.499011427164078f, 0.468191385269165f, + -0.498987197875977f, + 0.467808693647385f, -0.498962640762329f, 0.467426002025604f, + -0.498937815427780f, + 0.467043310403824f, -0.498912662267685f, 0.466660678386688f, + -0.498887240886688f, + 0.466278046369553f, -0.498861521482468f, 0.465895414352417f, + -0.498835533857346f, + 0.465512841939926f, -0.498809218406677f, 0.465130269527435f, + -0.498782604932785f, + 0.464747726917267f, -0.498755723237991f, 0.464365184307098f, + -0.498728543519974f, + 0.463982671499252f, -0.498701065778732f, 0.463600188493729f, + -0.498673290014267f, + 0.463217705488205f, -0.498645216226578f, 0.462835282087326f, + -0.498616874217987f, + 0.462452858686447f, -0.498588204383850f, 0.462070435285568f, + -0.498559266328812f, + 0.461688071489334f, -0.498530030250549f, 0.461305707693100f, + -0.498500496149063f, + 0.460923373699188f, -0.498470664024353f, 0.460541069507599f, + -0.498440563678741f, + 0.460158795118332f, -0.498410135507584f, 0.459776520729065f, + -0.498379439115524f, + 0.459394276142120f, -0.498348444700241f, 0.459012061357498f, + -0.498317152261734f, + 0.458629876375198f, -0.498285561800003f, 0.458247691392899f, + -0.498253703117371f, + 0.457865566015244f, -0.498221516609192f, 0.457483440637589f, + -0.498189061880112f, + 0.457101345062256f, -0.498156309127808f, 0.456719279289246f, + -0.498123258352280f, + 0.456337243318558f, -0.498089909553528f, 0.455955207347870f, + -0.498056292533875f, + 0.455573230981827f, -0.498022347688675f, 0.455191254615784f, + -0.497988134622574f, + 0.454809308052063f, -0.497953623533249f, 0.454427421092987f, + -0.497918814420700f, + 0.454045534133911f, -0.497883707284927f, 0.453663676977158f, + -0.497848302125931f, + 0.453281819820404f, -0.497812628746033f, 0.452900022268295f, + -0.497776657342911f, + 0.452518254518509f, -0.497740387916565f, 0.452136516571045f, + -0.497703820466995f, + 0.451754778623581f, -0.497666954994202f, 0.451373100280762f, + -0.497629791498184f, + 0.450991421937943f, -0.497592359781265f, 0.450609803199768f, + -0.497554630041122f, + 0.450228184461594f, -0.497516602277756f, 0.449846625328064f, + -0.497478276491165f, + 0.449465066194534f, -0.497439652681351f, 0.449083566665649f, + -0.497400760650635f, + 0.448702067136765f, -0.497361570596695f, 0.448320597410202f, + -0.497322082519531f, + 0.447939187288284f, -0.497282296419144f, 0.447557777166367f, + -0.497242212295532f, + 0.447176426649094f, -0.497201830148697f, 0.446795076131821f, + -0.497161179780960f, + 0.446413785219193f, -0.497120231389999f, 0.446032524108887f, + -0.497078984975815f, + 0.445651292800903f, -0.497037440538406f, 0.445270061492920f, + -0.496995598077774f, + 0.444888889789581f, -0.496953487396240f, 0.444507747888565f, + -0.496911078691483f, + 0.444126635789871f, -0.496868371963501f, 0.443745553493500f, + -0.496825367212296f, + 0.443364530801773f, -0.496782064437866f, 0.442983508110046f, + -0.496738493442535f, + 0.442602545022964f, -0.496694594621658f, 0.442221581935883f, + -0.496650427579880f, + 0.441840678453445f, -0.496605962514877f, 0.441459804773331f, + -0.496561229228973f, + 0.441078960895538f, -0.496516168117523f, 0.440698176622391f, + -0.496470838785172f, + 0.440317392349243f, -0.496425211429596f, 0.439936667680740f, + -0.496379286050797f, + 0.439555943012238f, -0.496333062648773f, 0.439175277948380f, + -0.496286571025848f, + 0.438794672489166f, -0.496239781379700f, 0.438414067029953f, + -0.496192663908005f, + 0.438033521175385f, -0.496145308017731f, 0.437653005123138f, + -0.496097624301910f, + 0.437272518873215f, -0.496049642562866f, 0.436892062425613f, + -0.496001392602921f, + 0.436511665582657f, -0.495952844619751f, 0.436131268739700f, + -0.495903998613358f, + 0.435750931501389f, -0.495854884386063f, 0.435370653867722f, + -0.495805442333221f, + 0.434990376234055f, -0.495755732059479f, 0.434610158205032f, + -0.495705723762512f, + 0.434229999780655f, -0.495655417442322f, 0.433849841356277f, + -0.495604842901230f, + 0.433469742536545f, -0.495553970336914f, 0.433089673519135f, + -0.495502769947052f, + 0.432709634304047f, -0.495451331138611f, 0.432329654693604f, + -0.495399564504623f, + 0.431949704885483f, -0.495347499847412f, 0.431569814682007f, + -0.495295166969299f, + 0.431189924478531f, -0.495242536067963f, 0.430810123682022f, + -0.495189607143402f, + 0.430430322885513f, -0.495136409997940f, 0.430050581693649f, + -0.495082914829254f, + 0.429670870304108f, -0.495029091835022f, 0.429291218519211f, + -0.494975030422211f, + 0.428911596536636f, -0.494920641183853f, 0.428532034158707f, + -0.494865983724594f, + 0.428152471780777f, -0.494810998439789f, 0.427772998809814f, + -0.494755744934082f, + 0.427393525838852f, -0.494700223207474f, 0.427014142274857f, + -0.494644373655319f, + 0.426634758710861f, -0.494588255882263f, 0.426255434751511f, + -0.494531840085983f, + 0.425876170396805f, -0.494475126266479f, 0.425496935844421f, + -0.494418144226074f, + 0.425117731094360f, -0.494360834360123f, 0.424738585948944f, + -0.494303256273270f, + 0.424359470605850f, -0.494245409965515f, 0.423980414867401f, + -0.494187235832214f, + 0.423601418733597f, -0.494128793478012f, 0.423222452402115f, + -0.494070053100586f, + 0.422843515872955f, -0.494011014699936f, 0.422464638948441f, + -0.493951678276062f, + 0.422085791826248f, -0.493892073631287f, 0.421707004308701f, + -0.493832170963287f, + 0.421328276395798f, -0.493771970272064f, 0.420949578285217f, + -0.493711471557617f, + 0.420570939779282f, -0.493650704622269f, 0.420192331075668f, + -0.493589639663696f, + 0.419813781976700f, -0.493528276681900f, 0.419435262680054f, + -0.493466645479202f, + 0.419056802988052f, -0.493404686450958f, 0.418678402900696f, + -0.493342459201813f, + 0.418300032615662f, -0.493279963731766f, 0.417921721935272f, + -0.493217140436172f, + 0.417543441057205f, -0.493154048919678f, 0.417165219783783f, + -0.493090659379959f, + 0.416787058115005f, -0.493026971817017f, 0.416408926248550f, + -0.492963016033173f, + 0.416030853986740f, -0.492898762226105f, 0.415652841329575f, + -0.492834210395813f, + 0.415274858474731f, -0.492769360542297f, 0.414896935224533f, + -0.492704242467880f, + 0.414519041776657f, -0.492638826370239f, 0.414141237735748f, + -0.492573112249374f, + 0.413763463497162f, -0.492507129907608f, 0.413385748863220f, + -0.492440819740295f, + 0.413008064031601f, -0.492374241352081f, 0.412630438804626f, + -0.492307394742966f, + 0.412252873182297f, -0.492240220308304f, 0.411875367164612f, + -0.492172777652740f, + 0.411497890949249f, -0.492105036973953f, 0.411120474338531f, + -0.492037028074265f, + 0.410743117332459f, -0.491968721151352f, 0.410365819931030f, + -0.491900116205215f, + 0.409988552331924f, -0.491831213235855f, 0.409611344337463f, + -0.491762012243271f, + 0.409234195947647f, -0.491692543029785f, 0.408857107162476f, + -0.491622805595398f, + 0.408480048179626f, -0.491552740335464f, 0.408103078603745f, + -0.491482406854630f, + 0.407726138830185f, -0.491411775350571f, 0.407349258661270f, + -0.491340845823288f, + 0.406972438097000f, -0.491269648075104f, 0.406595647335052f, + -0.491198152303696f, + 0.406218945980072f, -0.491126358509064f, 0.405842274427414f, + -0.491054296493530f, + 0.405465662479401f, -0.490981936454773f, 0.405089110136032f, + -0.490909278392792f, + 0.404712617397308f, -0.490836352109909f, 0.404336184263229f, + -0.490763127803802f, + 0.403959810733795f, -0.490689605474472f, 0.403583467006683f, + -0.490615785121918f, + 0.403207212686539f, -0.490541696548462f, 0.402830988168716f, + -0.490467309951782f, + 0.402454853057861f, -0.490392625331879f, 0.402078747749329f, + -0.490317672491074f, + 0.401702702045441f, -0.490242421627045f, 0.401326715946198f, + -0.490166902542114f, + 0.400950789451599f, -0.490091055631638f, 0.400574922561646f, + -0.490014940500259f, + 0.400199115276337f, -0.489938557147980f, 0.399823367595673f, + -0.489861875772476f, + 0.399447679519653f, -0.489784896373749f, 0.399072051048279f, + -0.489707618951797f, + 0.398696482181549f, -0.489630073308945f, 0.398320972919464f, + -0.489552229642868f, + 0.397945523262024f, -0.489474087953568f, 0.397570133209229f, + -0.489395678043365f, + 0.397194802761078f, -0.489316970109940f, 0.396819531917572f, + -0.489237964153290f, + 0.396444320678711f, -0.489158689975739f, 0.396069169044495f, + -0.489079117774963f, + 0.395694077014923f, -0.488999247550964f, 0.395319044589996f, + -0.488919109106064f, + 0.394944071769714f, -0.488838672637939f, 0.394569188356400f, + -0.488757967948914f, + 0.394194334745407f, -0.488676935434341f, 0.393819570541382f, + -0.488595664501190f, + 0.393444836139679f, -0.488514065742493f, 0.393070191144943f, + -0.488432198762894f, + 0.392695605754852f, -0.488350033760071f, 0.392321079969406f, + -0.488267600536346f, + 0.391946613788605f, -0.488184869289398f, 0.391572207212448f, + -0.488101840019226f, + 0.391197860240936f, -0.488018542528152f, 0.390823602676392f, + -0.487934947013855f, + 0.390449374914169f, -0.487851053476334f, 0.390075236558914f, + -0.487766891717911f, + 0.389701157808304f, -0.487682431936264f, 0.389327138662338f, + -0.487597703933716f, + 0.388953179121017f, -0.487512677907944f, 0.388579308986664f, + -0.487427353858948f, + 0.388205498456955f, -0.487341761589050f, 0.387831717729568f, + -0.487255871295929f, + 0.387458056211472f, -0.487169682979584f, 0.387084424495697f, + -0.487083226442337f, + 0.386710882186890f, -0.486996471881866f, 0.386337369680405f, + -0.486909449100494f, + 0.385963946580887f, -0.486822128295898f, 0.385590612888336f, + -0.486734509468079f, + 0.385217308998108f, -0.486646622419357f, 0.384844094514847f, + -0.486558437347412f, + 0.384470939636230f, -0.486469984054565f, 0.384097874164581f, + -0.486381232738495f, + 0.383724838495255f, -0.486292183399200f, 0.383351892232895f, + -0.486202865839005f, + 0.382979035377502f, -0.486113250255585f, 0.382606208324432f, + -0.486023366451263f, + 0.382233470678329f, -0.485933154821396f, 0.381860792636871f, + -0.485842704772949f, + 0.381488204002380f, -0.485751956701279f, 0.381115674972534f, + -0.485660910606384f, + 0.380743205547333f, -0.485569566488266f, 0.380370795726776f, + -0.485477954149246f, + 0.379998475313187f, -0.485386073589325f, 0.379626244306564f, + -0.485293895006180f, + 0.379254043102264f, -0.485201418399811f, 0.378881961107254f, + -0.485108673572540f, + 0.378509908914566f, -0.485015630722046f, 0.378137946128845f, + -0.484922289848328f, + 0.377766042947769f, -0.484828680753708f, 0.377394229173660f, + -0.484734803438187f, + 0.377022475004196f, -0.484640628099442f, 0.376650810241699f, + -0.484546154737473f, + 0.376279205083847f, -0.484451413154602f, 0.375907659530640f, + -0.484356373548508f, + 0.375536203384399f, -0.484261035919189f, 0.375164806842804f, + -0.484165430068970f, + 0.374793499708176f, -0.484069555997849f, 0.374422252178192f, + -0.483973383903503f, + 0.374051094055176f, -0.483876913785934f, 0.373679995536804f, + -0.483780175447464f, + 0.373308986425400f, -0.483683139085770f, 0.372938036918640f, + -0.483585834503174f, + 0.372567176818848f, -0.483488231897354f, 0.372196376323700f, + -0.483390361070633f, + 0.371825665235519f, -0.483292192220688f, 0.371455013751984f, + -0.483193725347519f, + 0.371084451675415f, -0.483094990253448f, 0.370713949203491f, + -0.482995986938477f, + 0.370343536138535f, -0.482896685600281f, 0.369973212480545f, + -0.482797086238861f, + 0.369602948427200f, -0.482697218656540f, 0.369232743978500f, + -0.482597053050995f, + 0.368862658739090f, -0.482496619224548f, 0.368492603302002f, + -0.482395917177200f, + 0.368122667074203f, -0.482294887304306f, 0.367752790451050f, + -0.482193619012833f, + 0.367382973432541f, -0.482092022895813f, 0.367013275623322f, + -0.481990188360214f, + 0.366643607616425f, -0.481888025999069f, 0.366274058818817f, + -0.481785595417023f, + 0.365904569625854f, -0.481682896614075f, 0.365535169839859f, + -0.481579899787903f, + 0.365165829658508f, -0.481476634740829f, 0.364796578884125f, + -0.481373071670532f, + 0.364427417516708f, -0.481269240379334f, 0.364058345556259f, + -0.481165111064911f, + 0.363689333200455f, -0.481060713529587f, 0.363320380449295f, + -0.480956017971039f, + 0.362951546907425f, -0.480851024389267f, 0.362582772970200f, + -0.480745792388916f, + 0.362214088439941f, -0.480640232563019f, 0.361845493316650f, + -0.480534434318542f, + 0.361476957798004f, -0.480428308248520f, 0.361108511686325f, + -0.480321943759918f, + 0.360740154981613f, -0.480215251445770f, 0.360371887683868f, + -0.480108320713043f, + 0.360003679990768f, -0.480001062154770f, 0.359635561704636f, + -0.479893565177917f, + 0.359267532825470f, -0.479785770177841f, 0.358899593353271f, + -0.479677677154541f, + 0.358531713485718f, -0.479569315910339f, 0.358163923025131f, + -0.479460656642914f, + 0.357796221971512f, -0.479351729154587f, 0.357428610324860f, + -0.479242533445358f, + 0.357061088085175f, -0.479133039712906f, 0.356693625450134f, + -0.479023247957230f, + 0.356326282024384f, -0.478913217782974f, 0.355958998203278f, + -0.478802859783173f, + 0.355591803789139f, -0.478692263364792f, 0.355224698781967f, + -0.478581339120865f, + 0.354857653379440f, -0.478470176458359f, 0.354490727186203f, + -0.478358715772629f, + 0.354123860597610f, -0.478246957063675f, 0.353757113218308f, + -0.478134930133820f, + 0.353390425443649f, -0.478022634983063f, 0.353023827075958f, + -0.477910041809082f, + 0.352657318115234f, -0.477797180414200f, 0.352290898561478f, + -0.477684020996094f, + 0.351924568414688f, -0.477570593357086f, 0.351558297872543f, + -0.477456867694855f, + 0.351192146539688f, -0.477342873811722f, 0.350826084613800f, + -0.477228611707687f, + 0.350460082292557f, -0.477114051580429f, 0.350094199180603f, + -0.476999223232269f, + 0.349728375673294f, -0.476884096860886f, 0.349362671375275f, + -0.476768702268600f, + 0.348997026681900f, -0.476653009653091f, 0.348631471395493f, + -0.476537048816681f, + 0.348266035318375f, -0.476420819759369f, 0.347900658845901f, + -0.476304292678833f, + 0.347535371780396f, -0.476187497377396f, 0.347170203924179f, + -0.476070433855057f, + 0.346805095672607f, -0.475953072309494f, 0.346440106630325f, + -0.475835442543030f, + 0.346075177192688f, -0.475717514753342f, 0.345710366964340f, + -0.475599318742752f, + 0.345345616340637f, -0.475480824708939f, 0.344980984926224f, + -0.475362062454224f, + 0.344616413116455f, -0.475243031978607f, 0.344251960515976f, + -0.475123733282089f, + 0.343887597322464f, -0.475004136562347f, 0.343523323535919f, + -0.474884241819382f, + 0.343159139156342f, -0.474764078855515f, 0.342795044183731f, + -0.474643647670746f, + 0.342431038618088f, -0.474522948265076f, 0.342067122459412f, + -0.474401950836182f, + 0.341703325510025f, -0.474280685186386f, 0.341339588165283f, + -0.474159121513367f, + 0.340975970029831f, -0.474037289619446f, 0.340612411499023f, + -0.473915189504623f, + 0.340248972177505f, -0.473792791366577f, 0.339885622262955f, + -0.473670125007629f, + 0.339522391557693f, -0.473547190427780f, 0.339159220457077f, + -0.473423957824707f, + 0.338796168565750f, -0.473300457000732f, 0.338433176279068f, + -0.473176687955856f, + 0.338070303201675f, -0.473052620887756f, 0.337707549333572f, + -0.472928285598755f, + 0.337344855070114f, -0.472803652286530f, 0.336982280015945f, + -0.472678780555725f, + 0.336619764566422f, -0.472553610801697f, 0.336257368326187f, + -0.472428143024445f, + 0.335895091295242f, -0.472302407026291f, 0.335532873868942f, + -0.472176402807236f, + 0.335170775651932f, -0.472050130367279f, 0.334808766841888f, + -0.471923559904099f, + 0.334446847438812f, -0.471796721220016f, 0.334085017442703f, + -0.471669614315033f, + 0.333723306655884f, -0.471542209386826f, 0.333361685276031f, + -0.471414536237717f, + 0.333000183105469f, -0.471286594867706f, 0.332638740539551f, + -0.471158385276794f, + 0.332277417182922f, -0.471029877662659f, 0.331916213035584f, + -0.470901101827621f, + 0.331555068492889f, -0.470772027969360f, 0.331194043159485f, + -0.470642685890198f, + 0.330833107233047f, -0.470513075590134f, 0.330472290515900f, + -0.470383197069168f, + 0.330111563205719f, -0.470253020524979f, 0.329750925302505f, + -0.470122605562210f, + 0.329390406608582f, -0.469991862773895f, 0.329029977321625f, + -0.469860881567001f, + 0.328669637441635f, -0.469729602336884f, 0.328309416770935f, + -0.469598054885864f, + 0.327949285507202f, -0.469466239213943f, 0.327589273452759f, + -0.469334155321121f, + 0.327229350805283f, -0.469201773405075f, 0.326869517564774f, + -0.469069123268127f, + 0.326509803533554f, -0.468936175107956f, 0.326150178909302f, + -0.468802988529205f, + 0.325790673494339f, -0.468669503927231f, 0.325431257486343f, + -0.468535751104355f, + 0.325071930885315f, -0.468401730060577f, 0.324712723493576f, + -0.468267410993576f, + 0.324353635311127f, -0.468132823705673f, 0.323994606733322f, + -0.467997968196869f, + 0.323635727167130f, -0.467862844467163f, 0.323276937007904f, + -0.467727422714233f, + 0.322918236255646f, -0.467591762542725f, 0.322559654712677f, + -0.467455804347992f, + 0.322201162576675f, -0.467319577932358f, 0.321842789649963f, + -0.467183053493500f, + 0.321484506130219f, -0.467046260833740f, 0.321126341819763f, + -0.466909229755402f, + 0.320768296718597f, -0.466771900653839f, 0.320410341024399f, + -0.466634273529053f, + 0.320052474737167f, -0.466496407985687f, 0.319694727659225f, + -0.466358244419098f, + 0.319337099790573f, -0.466219812631607f, 0.318979561328888f, + -0.466081112623215f, + 0.318622142076492f, -0.465942144393921f, 0.318264812231064f, + -0.465802878141403f, + 0.317907601594925f, -0.465663343667984f, 0.317550510168076f, + -0.465523540973663f, + 0.317193508148193f, -0.465383470058441f, 0.316836595535278f, + -0.465243130922318f, + 0.316479831933975f, -0.465102523565292f, 0.316123157739639f, + -0.464961618185043f, + 0.315766572952271f, -0.464820444583893f, 0.315410137176514f, + -0.464679002761841f, + 0.315053790807724f, -0.464537292718887f, 0.314697533845901f, + -0.464395314455032f, + 0.314341396093369f, -0.464253038167953f, 0.313985377550125f, + -0.464110493659973f, + 0.313629478216171f, -0.463967710733414f, 0.313273668289185f, + -0.463824629783630f, + 0.312917977571487f, -0.463681250810623f, 0.312562376260757f, + -0.463537633419037f, + 0.312206923961639f, -0.463393747806549f, 0.311851561069489f, + -0.463249564170837f, + 0.311496287584305f, -0.463105112314224f, 0.311141163110733f, + -0.462960392236710f, + 0.310786128044128f, -0.462815403938293f, 0.310431212186813f, + -0.462670147418976f, + 0.310076385736465f, -0.462524622678757f, 0.309721708297729f, + -0.462378799915314f, + 0.309367120265961f, -0.462232738733292f, 0.309012651443481f, + -0.462086379528046f, + 0.308658272027969f, -0.461939752101898f, 0.308304041624069f, + -0.461792886257172f, + 0.307949900627136f, -0.461645722389221f, 0.307595878839493f, + -0.461498260498047f, + 0.307241976261139f, -0.461350560188293f, 0.306888192892075f, + -0.461202591657639f, + 0.306534498929977f, -0.461054325103760f, 0.306180924177170f, + -0.460905820131302f, + 0.305827468633652f, -0.460757017135620f, 0.305474132299423f, + -0.460607945919037f, + 0.305120915174484f, -0.460458606481552f, 0.304767817258835f, + -0.460309028625488f, + 0.304414808750153f, -0.460159152746201f, 0.304061919450760f, + -0.460008978843689f, + 0.303709149360657f, -0.459858566522598f, 0.303356528282166f, + -0.459707885980606f, + 0.303003966808319f, -0.459556937217712f, 0.302651554346085f, + -0.459405690431595f, + 0.302299261093140f, -0.459254205226898f, 0.301947087049484f, + -0.459102421998978f, + 0.301595002412796f, -0.458950400352478f, 0.301243066787720f, + -0.458798080682755f, + 0.300891220569611f, -0.458645492792130f, 0.300539493560791f, + -0.458492636680603f, + 0.300187885761261f, -0.458339542150497f, 0.299836426973343f, + -0.458186149597168f, + 0.299485057592392f, -0.458032488822937f, 0.299133807420731f, + -0.457878559827805f, + 0.298782676458359f, -0.457724362611771f, 0.298431664705276f, + -0.457569897174835f, + 0.298080772161484f, -0.457415163516998f, 0.297729998826981f, + -0.457260161638260f, + 0.297379344701767f, -0.457104891538620f, 0.297028809785843f, + -0.456949323415756f, + 0.296678394079208f, -0.456793516874313f, 0.296328097581863f, + -0.456637442111969f, + 0.295977920293808f, -0.456481099128723f, 0.295627862215042f, + -0.456324487924576f, + 0.295277923345566f, -0.456167578697205f, 0.294928103685379f, + -0.456010431051254f, + 0.294578403234482f, -0.455853015184402f, 0.294228851795197f, + -0.455695331096649f, + 0.293879389762878f, -0.455537378787994f, 0.293530046939850f, + -0.455379128456116f, + 0.293180853128433f, -0.455220639705658f, 0.292831748723984f, + -0.455061882734299f, + 0.292482793331146f, -0.454902857542038f, 0.292133957147598f, + -0.454743564128876f, + 0.291785210371017f, -0.454584002494812f, 0.291436612606049f, + -0.454424172639847f, + 0.291088134050369f, -0.454264044761658f, 0.290739774703979f, + -0.454103678464890f, + 0.290391564369202f, -0.453943043947220f, 0.290043443441391f, + -0.453782171010971f, + 0.289695471525192f, -0.453621000051498f, 0.289347589015961f, + -0.453459560871124f, + 0.288999855518341f, -0.453297853469849f, 0.288652241230011f, + -0.453135877847672f, + 0.288304775953293f, -0.452973634004593f, 0.287957400083542f, + -0.452811151742935f, + 0.287610173225403f, -0.452648371458054f, 0.287263035774231f, + -0.452485352754593f, + 0.286916047334671f, -0.452322036027908f, 0.286569178104401f, + -0.452158480882645f, + 0.286222457885742f, -0.451994657516479f, 0.285875827074051f, + -0.451830536127090f, + 0.285529345273972f, -0.451666176319122f, 0.285182982683182f, + -0.451501548290253f, + 0.284836769104004f, -0.451336652040482f, 0.284490644931793f, + -0.451171487569809f, + 0.284144669771194f, -0.451006084680557f, 0.283798813819885f, + -0.450840383768082f, + 0.283453077077866f, -0.450674414634705f, 0.283107489347458f, + -0.450508207082748f, + 0.282762020826340f, -0.450341701507568f, 0.282416671514511f, + -0.450174957513809f, + 0.282071471214294f, -0.450007945299149f, 0.281726360321045f, + -0.449840664863586f, + 0.281381398439407f, -0.449673116207123f, 0.281036585569382f, + -0.449505299329758f, + 0.280691891908646f, -0.449337244033813f, 0.280347317457199f, + -0.449168890714645f, + 0.280002862215042f, -0.449000298976898f, 0.279658555984497f, + -0.448831409215927f, + 0.279314368963242f, -0.448662281036377f, 0.278970301151276f, + -0.448492884635925f, + 0.278626382350922f, -0.448323249816895f, 0.278282582759857f, + -0.448153316974640f, + 0.277938932180405f, -0.447983115911484f, 0.277595400810242f, + -0.447812676429749f, + 0.277251988649368f, -0.447641968727112f, 0.276908725500107f, + -0.447470992803574f, + 0.276565581560135f, -0.447299748659134f, 0.276222556829453f, + -0.447128236293793f, + 0.275879681110382f, -0.446956485509872f, 0.275536954402924f, + -0.446784436702728f, + 0.275194346904755f, -0.446612149477005f, 0.274851858615875f, + -0.446439594030380f, + 0.274509519338608f, -0.446266770362854f, 0.274167299270630f, + -0.446093708276749f, + 0.273825198411942f, -0.445920348167419f, 0.273483246564865f, + -0.445746749639511f, + 0.273141443729401f, -0.445572882890701f, 0.272799760103226f, + -0.445398747920990f, + 0.272458195686340f, -0.445224374532700f, 0.272116780281067f, + -0.445049703121185f, + 0.271775513887405f, -0.444874793291092f, 0.271434366703033f, + -0.444699615240097f, + 0.271093338727951f, -0.444524168968201f, 0.270752459764481f, + -0.444348484277725f, + 0.270411729812622f, -0.444172531366348f, 0.270071119070053f, + -0.443996280431747f, + 0.269730657339096f, -0.443819820880890f, 0.269390314817429f, + -0.443643063306808f, + 0.269050091505051f, -0.443466067314148f, 0.268710047006607f, + -0.443288803100586f, + 0.268370121717453f, -0.443111270666122f, 0.268030315637589f, + -0.442933470010757f, + 0.267690658569336f, -0.442755430936813f, 0.267351150512695f, + -0.442577123641968f, + 0.267011761665344f, -0.442398548126221f, 0.266672492027283f, + -0.442219734191895f, + 0.266333401203156f, -0.442040622234344f, 0.265994429588318f, + -0.441861271858215f, + 0.265655577182770f, -0.441681683063507f, 0.265316903591156f, + -0.441501796245575f, + 0.264978319406509f, -0.441321671009064f, 0.264639914035797f, + -0.441141277551651f, + 0.264301627874374f, -0.440960645675659f, 0.263963490724564f, + -0.440779715776443f, + 0.263625472784042f, -0.440598547458649f, 0.263287603855133f, + -0.440417140722275f, + 0.262949883937836f, -0.440235435962677f, 0.262612313032150f, + -0.440053492784500f, + 0.262274861335754f, -0.439871311187744f, 0.261937558650970f, + -0.439688831567764f, + 0.261600375175476f, -0.439506113529205f, 0.261263370513916f, + -0.439323127269745f, + 0.260926485061646f, -0.439139902591705f, 0.260589718818665f, + -0.438956409692764f, + 0.260253131389618f, -0.438772648572922f, 0.259916663169861f, + -0.438588619232178f, + 0.259580343961716f, -0.438404351472855f, 0.259244143962860f, + -0.438219845294952f, + 0.258908122777939f, -0.438035041093826f, 0.258572220802307f, + -0.437849998474121f, + 0.258236467838287f, -0.437664687633514f, 0.257900834083557f, + -0.437479138374329f, + 0.257565379142761f, -0.437293320894241f, 0.257230043411255f, + -0.437107264995575f, + 0.256894856691360f, -0.436920911073685f, 0.256559818983078f, + -0.436734348535538f, + 0.256224930286407f, -0.436547487974167f, 0.255890160799026f, + -0.436360388994217f, + 0.255555540323257f, -0.436173021793365f, 0.255221068859100f, + -0.435985416173935f, + 0.254886746406555f, -0.435797542333603f, 0.254552572965622f, + -0.435609430074692f, + 0.254218548536301f, -0.435421019792557f, 0.253884643316269f, + -0.435232400894165f, + 0.253550916910172f, -0.435043483972549f, 0.253217309713364f, + -0.434854328632355f, + 0.252883851528168f, -0.434664934873581f, 0.252550542354584f, + -0.434475272893906f, + 0.252217382192612f, -0.434285342693329f, 0.251884341239929f, + -0.434095174074173f, + 0.251551479101181f, -0.433904737234116f, 0.251218736171722f, + -0.433714061975479f, + 0.250886172056198f, -0.433523118495941f, 0.250553727149963f, + -0.433331936597824f, + 0.250221431255341f, -0.433140486478806f, 0.249889299273491f, + -0.432948768138886f, + 0.249557301402092f, -0.432756811380386f, 0.249225467443466f, + -0.432564586400986f, + 0.248893767595291f, -0.432372123003006f, 0.248562216758728f, + -0.432179391384125f, + 0.248230814933777f, -0.431986421346664f, 0.247899547219276f, + -0.431793183088303f, + 0.247568443417549f, -0.431599706411362f, 0.247237488627434f, + -0.431405961513519f, + 0.246906682848930f, -0.431211978197098f, 0.246576011180878f, + -0.431017726659775f, + 0.246245503425598f, -0.430823236703873f, 0.245915144681931f, + -0.430628478527069f, + 0.245584934949875f, -0.430433481931686f, 0.245254859328270f, + -0.430238217115402f, + 0.244924947619438f, -0.430042684078217f, 0.244595184922218f, + -0.429846942424774f, + 0.244265571236610f, -0.429650902748108f, 0.243936106562614f, + -0.429454624652863f, + 0.243606805801392f, -0.429258108139038f, 0.243277639150620f, + -0.429061323404312f, + 0.242948621511459f, -0.428864300251007f, 0.242619767785072f, + -0.428667008876801f, + 0.242291063070297f, -0.428469479084015f, 0.241962507367134f, + -0.428271710872650f, + 0.241634100675583f, -0.428073674440384f, 0.241305842995644f, + -0.427875369787216f, + 0.240977749228477f, -0.427676826715469f, 0.240649804472923f, + -0.427478045225143f, + 0.240322008728981f, -0.427278995513916f, 0.239994361996651f, + -0.427079707384110f, + 0.239666879177094f, -0.426880151033401f, 0.239339530467987f, + -0.426680356264114f, + 0.239012360572815f, -0.426480293273926f, 0.238685324788094f, + -0.426279991865158f, + 0.238358452916145f, -0.426079452037811f, 0.238031730055809f, + -0.425878643989563f, + 0.237705156207085f, -0.425677597522736f, 0.237378746271133f, + -0.425476282835007f, + 0.237052485346794f, -0.425274729728699f, 0.236726388335228f, + -0.425072938203812f, + 0.236400425434113f, -0.424870878458023f, 0.236074641346931f, + -0.424668580293655f, + 0.235749006271362f, -0.424466013908386f, 0.235423520207405f, + -0.424263238906860f, + 0.235098183155060f, -0.424060165882111f, 0.234773010015488f, + -0.423856884241104f, + 0.234448000788689f, -0.423653304576874f, 0.234123140573502f, + -0.423449516296387f, + 0.233798429369926f, -0.423245459794998f, 0.233473882079124f, + -0.423041164875031f, + 0.233149498701096f, -0.422836631536484f, 0.232825264334679f, + -0.422631829977036f, + 0.232501193881035f, -0.422426789999008f, 0.232177272439003f, + -0.422221481800079f, + 0.231853514909744f, -0.422015935182571f, 0.231529906392097f, + -0.421810150146484f, + 0.231206461787224f, -0.421604126691818f, 0.230883181095123f, + -0.421397835016251f, + 0.230560049414635f, -0.421191304922104f, 0.230237081646919f, + -0.420984506607056f, + 0.229914262890816f, -0.420777499675751f, 0.229591608047485f, + -0.420570224523544f, + 0.229269117116928f, -0.420362681150436f, 0.228946775197983f, + -0.420154929161072f, + 0.228624612092972f, -0.419946908950806f, 0.228302597999573f, + -0.419738620519638f, + 0.227980732917786f, -0.419530123472214f, 0.227659046649933f, + -0.419321358203888f, + 0.227337509393692f, -0.419112354516983f, 0.227016136050224f, + -0.418903112411499f, + 0.226694911718369f, -0.418693602085114f, 0.226373866200447f, + -0.418483853340149f, + 0.226052969694138f, -0.418273866176605f, 0.225732237100601f, + -0.418063640594482f, + 0.225411668419838f, -0.417853146791458f, 0.225091263651848f, + -0.417642414569855f, + 0.224771007895470f, -0.417431443929672f, 0.224450930953026f, + -0.417220205068588f, + 0.224131003022194f, -0.417008757591248f, 0.223811239004135f, + -0.416797041893005f, + 0.223491653800011f, -0.416585087776184f, 0.223172217607498f, + -0.416372895240784f, + 0.222852945327759f, -0.416160434484482f, 0.222533836960793f, + -0.415947735309601f, + 0.222214877605438f, -0.415734797716141f, 0.221896097064018f, + -0.415521621704102f, + 0.221577480435371f, -0.415308207273483f, 0.221259027719498f, + -0.415094524621964f, + 0.220940738916397f, -0.414880603551865f, 0.220622614026070f, + -0.414666473865509f, + 0.220304638147354f, -0.414452046155930f, 0.219986841082573f, + -0.414237409830093f, + 0.219669207930565f, -0.414022535085678f, 0.219351738691330f, + -0.413807392120361f, + 0.219034433364868f, -0.413592010736465f, 0.218717306852341f, + -0.413376390933990f, + 0.218400329351425f, -0.413160532712936f, 0.218083515763283f, + -0.412944436073303f, + 0.217766880989075f, -0.412728071212769f, 0.217450410127640f, + -0.412511497735977f, + 0.217134088277817f, -0.412294656038284f, 0.216817945241928f, + -0.412077575922012f, + 0.216501981019974f, -0.411860257387161f, 0.216186165809631f, + -0.411642700433731f, + 0.215870529413223f, -0.411424905061722f, 0.215555042028427f, + -0.411206841468811f, + 0.215239733457565f, -0.410988569259644f, 0.214924603700638f, + -0.410770028829575f, + 0.214609622955322f, -0.410551249980927f, 0.214294821023941f, + -0.410332232713699f, + 0.213980183005333f, -0.410112977027893f, 0.213665723800659f, + -0.409893482923508f, + 0.213351413607597f, -0.409673750400543f, 0.213037282228470f, + -0.409453779459000f, + 0.212723329663277f, -0.409233570098877f, 0.212409526109695f, + -0.409013092517853f, + 0.212095901370049f, -0.408792406320572f, 0.211782455444336f, + -0.408571451902390f, + 0.211469158530235f, -0.408350288867950f, 0.211156040430069f, + -0.408128857612610f, + 0.210843101143837f, -0.407907217741013f, 0.210530325770378f, + -0.407685309648514f, + 0.210217714309692f, -0.407463163137436f, 0.209905281662941f, + -0.407240778207779f, + 0.209593027830124f, -0.407018154859543f, 0.209280923008919f, + -0.406795293092728f, + 0.208969011902809f, -0.406572192907333f, 0.208657249808311f, + -0.406348884105682f, + 0.208345666527748f, -0.406125307083130f, 0.208034262061119f, + -0.405901491641998f, + 0.207723021507263f, -0.405677437782288f, 0.207411959767342f, + -0.405453115701675f, + 0.207101076841354f, -0.405228585004807f, 0.206790357828140f, + -0.405003815889359f, + 0.206479802727699f, -0.404778808355331f, 0.206169426441193f, + -0.404553562402725f, + 0.205859228968620f, -0.404328078031540f, 0.205549195408821f, + -0.404102355241776f, + 0.205239340662956f, -0.403876423835754f, 0.204929664731026f, + -0.403650224208832f, + 0.204620152711868f, -0.403423786163330f, 0.204310819506645f, + -0.403197109699249f, + 0.204001650214195f, -0.402970194816589f, 0.203692659735680f, + -0.402743041515350f, + 0.203383848071098f, -0.402515679597855f, 0.203075215220451f, + -0.402288049459457f, + 0.202766746282578f, -0.402060180902481f, 0.202458456158638f, + -0.401832103729248f, + 0.202150344848633f, -0.401603758335114f, 0.201842412352562f, + -0.401375204324722f, + 0.201534643769264f, -0.401146411895752f, 0.201227053999901f, + -0.400917351245880f, + 0.200919643044472f, -0.400688081979752f, 0.200612410902977f, + -0.400458574295044f, + 0.200305357575417f, -0.400228828191757f, 0.199998468160629f, + -0.399998843669891f, + 0.199691757559776f, -0.399768620729446f, 0.199385225772858f, + -0.399538189172745f, + 0.199078872799873f, -0.399307489395142f, 0.198772698640823f, + -0.399076581001282f, + 0.198466703295708f, -0.398845434188843f, 0.198160871863365f, + -0.398614019155502f, + 0.197855234146118f, -0.398382395505905f, 0.197549775242805f, + -0.398150533437729f, + 0.197244480252266f, -0.397918462753296f, 0.196939364075661f, + -0.397686123847961f, + 0.196634441614151f, -0.397453576326370f, 0.196329683065414f, + -0.397220760583878f, + 0.196025103330612f, -0.396987736225128f, 0.195720717310905f, + -0.396754473447800f, + 0.195416495203972f, -0.396520972251892f, 0.195112451910973f, + -0.396287262439728f, + 0.194808602333069f, -0.396053284406662f, 0.194504916667938f, + -0.395819097757339f, + 0.194201424717903f, -0.395584672689438f, 0.193898096680641f, + -0.395350009202957f, + 0.193594962358475f, -0.395115107297897f, 0.193292006850243f, + -0.394879996776581f, + 0.192989215254784f, -0.394644618034363f, 0.192686617374420f, + -0.394409030675888f, + 0.192384198307991f, -0.394173204898834f, 0.192081972956657f, + -0.393937170505524f, + 0.191779911518097f, -0.393700867891312f, 0.191478043794632f, + -0.393464356660843f, + 0.191176339983940f, -0.393227607011795f, 0.190874829888344f, + -0.392990618944168f, + 0.190573498606682f, -0.392753422260284f, 0.190272361040115f, + -0.392515957355499f, + 0.189971387386322f, -0.392278283834457f, 0.189670607447624f, + -0.392040401697159f, + 0.189370006322861f, -0.391802251338959f, 0.189069598913193f, + -0.391563892364502f, + 0.188769355416298f, -0.391325294971466f, 0.188469305634499f, + -0.391086459159851f, + 0.188169434666634f, -0.390847414731979f, 0.187869757413864f, + -0.390608131885529f, + 0.187570258975029f, -0.390368610620499f, 0.187270939350128f, + -0.390128880739212f, + 0.186971798539162f, -0.389888882637024f, 0.186672851443291f, + -0.389648675918579f, + 0.186374098062515f, -0.389408260583878f, 0.186075508594513f, + -0.389167606830597f, + 0.185777112841606f, -0.388926714658737f, 0.185478910803795f, + -0.388685584068298f, + 0.185180887579918f, -0.388444244861603f, 0.184883043169975f, + -0.388202667236328f, + 0.184585392475128f, -0.387960851192474f, 0.184287920594215f, + -0.387718826532364f, + 0.183990627527237f, -0.387476563453674f, 0.183693528175354f, + -0.387234061956406f, + 0.183396622538567f, -0.386991351842880f, 0.183099895715714f, + -0.386748403310776f, + 0.182803362607956f, -0.386505216360092f, 0.182507008314133f, + -0.386261820793152f, + 0.182210832834244f, -0.386018186807632f, 0.181914865970612f, + -0.385774344205856f, + 0.181619063019753f, -0.385530263185501f, 0.181323468685150f, + -0.385285943746567f, + 0.181028053164482f, -0.385041415691376f, 0.180732816457748f, + -0.384796649217606f, + 0.180437773466110f, -0.384551674127579f, 0.180142924189568f, + -0.384306460618973f, + 0.179848253726959f, -0.384061008691788f, 0.179553776979446f, + -0.383815348148346f, + 0.179259493947029f, -0.383569449186325f, 0.178965389728546f, + -0.383323341608047f, + 0.178671479225159f, -0.383076995611191f, 0.178377762436867f, + -0.382830440998077f, + 0.178084224462509f, -0.382583618164063f, 0.177790880203247f, + -0.382336616516113f, + 0.177497729659081f, -0.382089376449585f, 0.177204772830009f, + -0.381841897964478f, + 0.176911994814873f, -0.381594210863113f, 0.176619410514832f, + -0.381346285343170f, + 0.176327019929886f, -0.381098151206970f, 0.176034808158875f, + -0.380849778652191f, + 0.175742805004120f, -0.380601197481155f, 0.175450980663300f, + -0.380352377891541f, + 0.175159350037575f, -0.380103349685669f, 0.174867913126946f, + -0.379854083061218f, + 0.174576655030251f, -0.379604607820511f, 0.174285605549812f, + -0.379354894161224f, + 0.173994734883308f, -0.379104942083359f, 0.173704057931900f, + -0.378854811191559f, + 0.173413574695587f, -0.378604412078857f, 0.173123285174370f, + -0.378353834152222f, + 0.172833189368248f, -0.378102988004684f, 0.172543287277222f, + -0.377851963043213f, + 0.172253578901291f, -0.377600699663162f, 0.171964049339294f, + -0.377349197864532f, + 0.171674728393555f, -0.377097487449646f, 0.171385586261749f, + -0.376845568418503f, + 0.171096652746201f, -0.376593410968781f, 0.170807912945747f, + -0.376341015100479f, + 0.170519351959229f, -0.376088410615921f, 0.170230999588966f, + -0.375835597515106f, + 0.169942826032639f, -0.375582575798035f, 0.169654861092567f, + -0.375329315662384f, + 0.169367074966431f, -0.375075817108154f, 0.169079497456551f, + -0.374822109937668f, + 0.168792113661766f, -0.374568194150925f, 0.168504923582077f, + -0.374314039945602f, + 0.168217927217484f, -0.374059677124023f, 0.167931124567986f, + -0.373805105686188f, + 0.167644515633583f, -0.373550295829773f, 0.167358100414276f, + -0.373295277357101f, + 0.167071878910065f, -0.373040050268173f, 0.166785866022110f, + -0.372784584760666f, + 0.166500031948090f, -0.372528880834579f, 0.166214406490326f, + -0.372272998094559f, + 0.165928974747658f, -0.372016876935959f, 0.165643751621246f, + -0.371760547161102f, + 0.165358707308769f, -0.371503978967667f, 0.165073871612549f, + -0.371247202157974f, + 0.164789214730263f, -0.370990216732025f, 0.164504766464233f, + -0.370732992887497f, + 0.164220526814461f, -0.370475560426712f, 0.163936465978622f, + -0.370217919349670f, + 0.163652613759041f, -0.369960039854050f, 0.163368955254555f, + -0.369701951742172f, + 0.163085505366325f, -0.369443655014038f, 0.162802234292030f, + -0.369185149669647f, + 0.162519171833992f, -0.368926405906677f, 0.162236317992210f, + -0.368667453527451f, + 0.161953642964363f, -0.368408292531967f, 0.161671176552773f, + -0.368148893117905f, + 0.161388918757439f, -0.367889285087585f, 0.161106839776039f, + -0.367629468441010f, + 0.160824984312058f, -0.367369443178177f, 0.160543307662010f, + -0.367109179496765f, + 0.160261839628220f, -0.366848707199097f, 0.159980565309525f, + -0.366588026285172f, + 0.159699499607086f, -0.366327136754990f, 0.159418627619743f, + -0.366066008806229f, + 0.159137964248657f, -0.365804702043533f, 0.158857494592667f, + -0.365543156862259f, + 0.158577233552933f, -0.365281373262405f, 0.158297166228294f, + -0.365019410848618f, + 0.158017292618752f, -0.364757210016251f, 0.157737627625465f, + -0.364494800567627f, + 0.157458171248436f, -0.364232182502747f, 0.157178908586502f, + -0.363969355821610f, + 0.156899839639664f, -0.363706320524216f, 0.156620979309082f, + -0.363443046808243f, + 0.156342327594757f, -0.363179564476013f, 0.156063869595528f, + -0.362915903329849f, + 0.155785620212555f, -0.362651973962784f, 0.155507579445839f, + -0.362387865781784f, + 0.155229732394218f, -0.362123548984528f, 0.154952079057693f, + -0.361858993768692f, + 0.154674649238586f, -0.361594229936600f, 0.154397398233414f, + -0.361329287290573f, + 0.154120370745659f, -0.361064106225967f, 0.153843536973000f, + -0.360798716545105f, + 0.153566911816597f, -0.360533088445663f, 0.153290495276451f, + -0.360267281532288f, + 0.153014272451401f, -0.360001266002655f, 0.152738258242607f, + -0.359735012054443f, + 0.152462437748909f, -0.359468549489975f, 0.152186840772629f, + -0.359201908111572f, + 0.151911437511444f, -0.358935028314590f, 0.151636242866516f, + -0.358667939901352f, + 0.151361241936684f, -0.358400642871857f, 0.151086464524269f, + -0.358133137226105f, + 0.150811880826950f, -0.357865422964096f, 0.150537505745888f, + -0.357597470283508f, + 0.150263324379921f, -0.357329338788986f, 0.149989366531372f, + -0.357060998678207f, + 0.149715602397919f, -0.356792420148849f, 0.149442046880722f, + -0.356523662805557f, + 0.149168699979782f, -0.356254696846008f, 0.148895561695099f, + -0.355985492467880f, + 0.148622632026672f, -0.355716109275818f, 0.148349896073341f, + -0.355446487665176f, + 0.148077383637428f, -0.355176687240601f, 0.147805064916611f, + -0.354906648397446f, + 0.147532954812050f, -0.354636400938034f, 0.147261068224907f, + -0.354365974664688f, + 0.146989375352860f, -0.354095309972763f, 0.146717891097069f, + -0.353824466466904f, + 0.146446615457535f, -0.353553384542465f, 0.146175548434258f, + -0.353282123804092f, + 0.145904675126076f, -0.353010624647141f, 0.145634025335312f, + -0.352738946676254f, + 0.145363584160805f, -0.352467030286789f, 0.145093351602554f, + -0.352194935083389f, + 0.144823327660561f, -0.351922631263733f, 0.144553512334824f, + -0.351650089025497f, + 0.144283905625343f, -0.351377367973328f, 0.144014507532120f, + -0.351104438304901f, + 0.143745318055153f, -0.350831300020218f, 0.143476337194443f, + -0.350557953119278f, + 0.143207564949989f, -0.350284397602081f, 0.142939001321793f, + -0.350010633468628f, + 0.142670661211014f, -0.349736660718918f, 0.142402514815331f, + -0.349462509155273f, + 0.142134591937065f, -0.349188119173050f, 0.141866862773895f, + -0.348913550376892f, + 0.141599357128143f, -0.348638743162155f, 0.141332060098648f, + -0.348363757133484f, + 0.141064971685410f, -0.348088562488556f, 0.140798106789589f, + -0.347813159227371f, + 0.140531435608864f, -0.347537547349930f, 0.140264987945557f, + -0.347261756658554f, + 0.139998748898506f, -0.346985727548599f, 0.139732718467712f, + -0.346709519624710f, + 0.139466896653175f, -0.346433073282242f, 0.139201298356056f, + -0.346156448125839f, + 0.138935908675194f, -0.345879614353180f, 0.138670727610588f, + -0.345602601766586f, + 0.138405755162239f, -0.345325350761414f, 0.138141006231308f, + -0.345047920942307f, + 0.137876465916634f, -0.344770282506943f, 0.137612134218216f, + -0.344492435455322f, + 0.137348011136055f, -0.344214379787445f, 0.137084111571312f, + -0.343936115503311f, + 0.136820420622826f, -0.343657672405243f, 0.136556953191757f, + -0.343379020690918f, + 0.136293679475784f, -0.343100160360336f, 0.136030644178391f, + -0.342821091413498f, + 0.135767802596092f, -0.342541843652725f, 0.135505184531212f, + -0.342262357473373f, + 0.135242775082588f, -0.341982692480087f, 0.134980589151382f, + -0.341702848672867f, + 0.134718611836433f, -0.341422766447067f, 0.134456858038902f, + -0.341142505407333f, + 0.134195312857628f, -0.340862035751343f, 0.133933976292610f, + -0.340581357479095f, + 0.133672863245010f, -0.340300500392914f, 0.133411958813667f, + -0.340019434690475f, + 0.133151277899742f, -0.339738160371780f, 0.132890805602074f, + -0.339456677436829f, + 0.132630556821823f, -0.339175015687943f, 0.132370531558990f, + -0.338893145322800f, + 0.132110700011253f, -0.338611096143723f, 0.131851106882095f, + -0.338328808546066f, + 0.131591722369194f, -0.338046342134476f, 0.131332546472549f, + -0.337763696908951f, + 0.131073594093323f, -0.337480813264847f, 0.130814850330353f, + -0.337197750806808f, + 0.130556344985962f, -0.336914509534836f, 0.130298033356667f, + -0.336631029844284f, + 0.130039945244789f, -0.336347371339798f, 0.129782080650330f, + -0.336063534021378f, + 0.129524439573288f, -0.335779488086700f, 0.129267007112503f, + -0.335495233535767f, + 0.129009798169136f, -0.335210770368576f, 0.128752797842026f, + -0.334926128387451f, + 0.128496021032333f, -0.334641307592392f, 0.128239467740059f, + -0.334356248378754f, + 0.127983123064041f, -0.334071010351181f, 0.127727001905441f, + -0.333785593509674f, + 0.127471104264259f, -0.333499968051910f, 0.127215430140495f, + -0.333214133977890f, + 0.126959964632988f, -0.332928121089935f, 0.126704722642899f, + -0.332641899585724f, + 0.126449704170227f, -0.332355499267578f, 0.126194894313812f, + -0.332068890333176f, + 0.125940307974815f, -0.331782072782516f, 0.125685945153236f, + -0.331495076417923f, + 0.125431805849075f, -0.331207901239395f, 0.125177875161171f, + -0.330920487642288f, + 0.124924175441265f, -0.330632925033569f, 0.124670691788197f, + -0.330345153808594f, + 0.124417431652546f, -0.330057173967361f, 0.124164395034313f, + -0.329769015312195f, + 0.123911574482918f, -0.329480648040771f, 0.123658977448940f, + -0.329192101955414f, + 0.123406603932381f, -0.328903347253799f, 0.123154446482658f, + -0.328614413738251f, + 0.122902512550354f, -0.328325271606445f, 0.122650802135468f, + -0.328035950660706f, + 0.122399315237999f, -0.327746421098709f, 0.122148044407368f, + -0.327456712722778f, + 0.121896997094154f, -0.327166795730591f, 0.121646173298359f, + -0.326876699924469f, + 0.121395580470562f, -0.326586425304413f, 0.121145196259022f, + -0.326295942068100f, + 0.120895043015480f, -0.326005280017853f, 0.120645113289356f, + -0.325714409351349f, + 0.120395407080650f, -0.325423330068588f, 0.120145916938782f, + -0.325132101774216f, + 0.119896657764912f, -0.324840664863586f, 0.119647622108459f, + -0.324549019336700f, + 0.119398809969425f, -0.324257194995880f, 0.119150213897228f, + -0.323965191841125f, + 0.118901848793030f, -0.323672980070114f, 0.118653707206249f, + -0.323380589485168f, + 0.118405789136887f, -0.323088020086288f, 0.118158094584942f, + -0.322795242071152f, + 0.117910631000996f, -0.322502255439758f, 0.117663383483887f, + -0.322209119796753f, + 0.117416366934776f, -0.321915775537491f, 0.117169573903084f, + -0.321622252464294f, + 0.116923004388809f, -0.321328520774841f, 0.116676658391953f, + -0.321034610271454f, + 0.116430543363094f, -0.320740520954132f, 0.116184651851654f, + -0.320446223020554f, + 0.115938983857632f, -0.320151746273041f, 0.115693546831608f, + -0.319857090711594f, + 0.115448333323002f, -0.319562226533890f, 0.115203343331814f, + -0.319267183542252f, + 0.114958584308624f, -0.318971961736679f, 0.114714048802853f, + -0.318676531314850f, + 0.114469736814499f, -0.318380922079086f, 0.114225655794144f, + -0.318085134029388f, + 0.113981798291206f, -0.317789167165756f, 0.113738171756268f, + -0.317492991685867f, + 0.113494776189327f, -0.317196637392044f, 0.113251596689224f, + -0.316900104284287f, + 0.113008655607700f, -0.316603392362595f, 0.112765938043594f, + -0.316306471824646f, + 0.112523443996906f, -0.316009372472763f, 0.112281180918217f, + -0.315712094306946f, + 0.112039148807526f, -0.315414607524872f, 0.111797347664833f, + -0.315116971731186f, + 0.111555770039558f, -0.314819127321243f, 0.111314415931702f, + -0.314521104097366f, + 0.111073300242424f, -0.314222872257233f, 0.110832408070564f, + -0.313924491405487f, + 0.110591746866703f, -0.313625901937485f, 0.110351309180260f, + -0.313327133655548f, + 0.110111102461815f, -0.313028186559677f, 0.109871134161949f, + -0.312729060649872f, + 0.109631389379501f, -0.312429755926132f, 0.109391868114471f, + -0.312130242586136f, + 0.109152585268021f, -0.311830550432205f, 0.108913525938988f, + -0.311530679464340f, + 0.108674705028534f, -0.311230629682541f, 0.108436107635498f, + -0.310930401086807f, + 0.108197741210461f, -0.310629993677139f, 0.107959605753422f, + -0.310329377651215f, + 0.107721701264381f, -0.310028612613678f, 0.107484027743340f, + -0.309727638959885f, + 0.107246585190296f, -0.309426486492157f, 0.107009373605251f, + -0.309125155210495f, + 0.106772392988205f, -0.308823645114899f, 0.106535643339157f, + -0.308521956205368f, + 0.106299124658108f, -0.308220088481903f, 0.106062836945057f, + -0.307918041944504f, + 0.105826787650585f, -0.307615786790848f, 0.105590961873531f, + -0.307313382625580f, + 0.105355374515057f, -0.307010769844055f, 0.105120018124580f, + -0.306708008050919f, + 0.104884892702103f, -0.306405037641525f, 0.104649998247623f, + -0.306101888418198f, + 0.104415334761143f, -0.305798590183258f, 0.104180909693241f, + -0.305495083332062f, + 0.103946708142757f, -0.305191397666931f, 0.103712752461433f, + -0.304887533187866f, + 0.103479020297527f, -0.304583519697189f, 0.103245526552200f, + -0.304279297590256f, + 0.103012263774872f, -0.303974896669388f, 0.102779231965542f, + -0.303670316934586f, + 0.102546438574791f, -0.303365558385849f, 0.102313876152039f, + -0.303060621023178f, + 0.102081544697285f, -0.302755534648895f, 0.101849451661110f, + -0.302450239658356f, + 0.101617597043514f, -0.302144765853882f, 0.101385973393917f, + -0.301839113235474f, + 0.101154580712318f, -0.301533311605453f, 0.100923426449299f, + -0.301227301359177f, + 0.100692503154278f, -0.300921112298965f, 0.100461818277836f, + -0.300614774227142f, + 0.100231364369392f, -0.300308227539063f, 0.100001148879528f, + -0.300001531839371f, + 0.099771171808243f, -0.299694657325745f, 0.099541425704956f, + -0.299387603998184f, + 0.099311910569668f, -0.299080342054367f, 0.099082641303539f, + -0.298772931098938f, + 0.098853603005409f, -0.298465341329575f, 0.098624803125858f, + -0.298157602548599f, + 0.098396234214306f, -0.297849655151367f, 0.098167903721333f, + -0.297541528940201f, + 0.097939811646938f, -0.297233253717422f, 0.097711957991123f, + -0.296924799680710f, + 0.097484335303307f, -0.296616137027740f, 0.097256951034069f, + -0.296307325363159f, + 0.097029805183411f, -0.295998334884644f, 0.096802897751331f, + -0.295689195394516f, + 0.096576221287251f, -0.295379847288132f, 0.096349790692329f, + -0.295070350170136f, + 0.096123591065407f, -0.294760644435883f, 0.095897629857063f, + -0.294450789690018f, + 0.095671907067299f, -0.294140785932541f, 0.095446422696114f, + -0.293830573558807f, + 0.095221176743507f, -0.293520182371140f, 0.094996169209480f, + -0.293209642171860f, + 0.094771400094032f, -0.292898923158646f, 0.094546869397163f, + -0.292588025331497f, + 0.094322577118874f, -0.292276978492737f, 0.094098523259163f, + -0.291965723037720f, + 0.093874707818031f, -0.291654318571091f, 0.093651130795479f, + -0.291342735290527f, + 0.093427792191505f, -0.291031002998352f, 0.093204692006111f, + -0.290719062089920f, + 0.092981837689877f, -0.290406972169876f, 0.092759214341640f, + -0.290094703435898f, + 0.092536836862564f, -0.289782285690308f, 0.092314697802067f, + -0.289469659328461f, + 0.092092797160149f, -0.289156883955002f, 0.091871134936810f, + -0.288843959569931f, + 0.091649711132050f, -0.288530826568604f, 0.091428533196449f, + -0.288217544555664f, + 0.091207593679428f, -0.287904083728790f, 0.090986892580986f, + -0.287590473890305f, + 0.090766437351704f, -0.287276685237885f, 0.090546220541000f, + -0.286962717771530f, + 0.090326242148876f, -0.286648571491241f, 0.090106502175331f, + -0.286334276199341f, + 0.089887008070946f, -0.286019802093506f, 0.089667752385139f, + -0.285705178976059f, + 0.089448742568493f, -0.285390377044678f, 0.089229971170425f, + -0.285075396299362f, + 0.089011445641518f, -0.284760266542435f, 0.088793158531189f, + -0.284444957971573f, + 0.088575109839439f, -0.284129470586777f, 0.088357307016850f, + -0.283813834190369f, + 0.088139742612839f, -0.283498018980026f, 0.087922424077988f, + -0.283182054758072f, + 0.087705351412296f, -0.282865911722183f, 0.087488517165184f, + -0.282549589872360f, + 0.087271921336651f, -0.282233119010925f, 0.087055571377277f, + -0.281916469335556f, + 0.086839467287064f, -0.281599670648575f, 0.086623609066010f, + -0.281282693147659f, + 0.086407989263535f, -0.280965566635132f, 0.086192607879639f, + -0.280648261308670f, + 0.085977479815483f, -0.280330777168274f, 0.085762590169907f, + -0.280013144016266f, + 0.085547938942909f, -0.279695361852646f, 0.085333541035652f, + -0.279377400875092f, + 0.085119381546974f, -0.279059261083603f, 0.084905467927456f, + -0.278740972280502f, + 0.084691800177097f, -0.278422504663467f, 0.084478378295898f, + -0.278103888034821f, + 0.084265194833279f, -0.277785122394562f, 0.084052257239819f, + -0.277466177940369f, + 0.083839565515518f, -0.277147054672241f, 0.083627119660378f, + -0.276827782392502f, + 0.083414919674397f, -0.276508361101151f, 0.083202958106995f, + -0.276188760995865f, + 0.082991249859333f, -0.275868982076645f, 0.082779780030251f, + -0.275549083948135f, + 0.082568563520908f, -0.275228977203369f, 0.082357585430145f, + -0.274908751249313f, + 0.082146860659122f, -0.274588316679001f, 0.081936374306679f, + -0.274267762899399f, + 0.081726133823395f, -0.273947030305862f, 0.081516146659851f, + -0.273626148700714f, + 0.081306397914886f, -0.273305088281631f, 0.081096902489662f, + -0.272983878850937f, + 0.080887645483017f, -0.272662490606308f, 0.080678641796112f, + -0.272340953350067f, + 0.080469883978367f, -0.272019267082214f, 0.080261372029781f, + -0.271697402000427f, + 0.080053105950356f, -0.271375387907028f, 0.079845085740089f, + -0.271053224802017f, + 0.079637311398983f, -0.270730882883072f, 0.079429790377617f, + -0.270408391952515f, + 0.079222507774830f, -0.270085722208023f, 0.079015478491783f, + -0.269762933254242f, + 0.078808702528477f, -0.269439965486526f, 0.078602164983749f, + -0.269116818904877f, + 0.078395880758762f, -0.268793523311615f, 0.078189842402935f, + -0.268470078706741f, + 0.077984049916267f, -0.268146485090256f, 0.077778510749340f, + -0.267822742462158f, + 0.077573217451572f, -0.267498821020126f, 0.077368170022964f, + -0.267174720764160f, + 0.077163375914097f, -0.266850501298904f, 0.076958827674389f, + -0.266526103019714f, + 0.076754532754421f, -0.266201555728912f, 0.076550483703613f, + -0.265876859426498f, + 0.076346680521965f, -0.265552014112473f, 0.076143130660057f, + -0.265226989984512f, + 0.075939826667309f, -0.264901816844940f, 0.075736775994301f, + -0.264576494693756f, + 0.075533971190453f, -0.264250993728638f, 0.075331419706345f, + -0.263925373554230f, + 0.075129114091396f, -0.263599574565887f, 0.074927061796188f, + -0.263273626565933f, + 0.074725262820721f, -0.262947499752045f, 0.074523709714413f, + -0.262621253728867f, + 0.074322402477264f, -0.262294828891754f, 0.074121348559856f, + -0.261968284845352f, + 0.073920547962189f, -0.261641561985016f, 0.073720000684261f, + -0.261314690113068f, + 0.073519699275494f, -0.260987639427185f, 0.073319651186466f, + -0.260660469532013f, + 0.073119848966599f, -0.260333120822906f, 0.072920300066471f, + -0.260005623102188f, + 0.072721004486084f, -0.259678006172180f, 0.072521962225437f, + -0.259350210428238f, + 0.072323165833950f, -0.259022265672684f, 0.072124622762203f, + -0.258694142103195f, + 0.071926333010197f, -0.258365899324417f, 0.071728296577930f, + -0.258037507534027f, + 0.071530513465405f, -0.257708936929703f, 0.071332976222038f, + -0.257380217313766f, + 0.071135692298412f, -0.257051378488541f, 0.070938661694527f, + -0.256722360849380f, + 0.070741884410381f, -0.256393194198608f, 0.070545360445976f, + -0.256063878536224f, + 0.070349089801311f, -0.255734413862228f, 0.070153072476387f, + -0.255404800176620f, + 0.069957308471203f, -0.255075037479401f, 0.069761790335178f, + -0.254745125770569f, + 0.069566532969475f, -0.254415065050125f, 0.069371521472931f, + -0.254084855318069f, + 0.069176770746708f, -0.253754496574402f, 0.068982265889645f, + -0.253423988819122f, + 0.068788021802902f, -0.253093332052231f, 0.068594031035900f, + -0.252762526273727f, + 0.068400286138058f, -0.252431541681290f, 0.068206802010536f, + -0.252100437879562f, + 0.068013571202755f, -0.251769185066223f, 0.067820593714714f, + -0.251437783241272f, + 0.067627869546413f, -0.251106232404709f, 0.067435398697853f, + -0.250774532556534f, + 0.067243188619614f, -0.250442683696747f, 0.067051224410534f, + -0.250110685825348f, + 0.066859520971775f, -0.249778553843498f, 0.066668070852757f, + -0.249446272850037f, + 0.066476874053478f, -0.249113827943802f, 0.066285938024521f, + -0.248781248927116f, + 0.066095255315304f, -0.248448520898819f, 0.065904818475246f, + -0.248115643858910f, + 0.065714649856091f, -0.247782632708550f, 0.065524727106094f, + -0.247449472546577f, + 0.065335065126419f, -0.247116148471832f, 0.065145656466484f, + -0.246782705187798f, + 0.064956501126289f, -0.246449097990990f, 0.064767606556416f, + -0.246115356683731f, + 0.064578965306282f, -0.245781451463699f, 0.064390584826469f, + -0.245447427034378f, + 0.064202457666397f, -0.245113238692284f, 0.064014583826065f, + -0.244778916239738f, + 0.063826970756054f, -0.244444444775581f, 0.063639611005783f, + -0.244109839200974f, + 0.063452512025833f, -0.243775084614754f, 0.063265666365623f, + -0.243440181016922f, + 0.063079081475735f, -0.243105143308640f, 0.062892749905586f, + -0.242769956588745f, + 0.062706671655178f, -0.242434620857239f, 0.062520854175091f, + -0.242099151015282f, + 0.062335297465324f, -0.241763532161713f, 0.062149997800589f, + -0.241427779197693f, + 0.061964951455593f, -0.241091892123222f, 0.061780165880919f, + -0.240755841135979f, + 0.061595637351274f, -0.240419670939446f, 0.061411365866661f, + -0.240083336830139f, + 0.061227355152369f, -0.239746883511543f, 0.061043601483107f, + -0.239410281181335f, + 0.060860104858875f, -0.239073529839516f, 0.060676865279675f, + -0.238736644387245f, + 0.060493886470795f, -0.238399609923363f, 0.060311164706945f, + -0.238062441349030f, + 0.060128703713417f, -0.237725138664246f, 0.059946499764919f, + -0.237387686967850f, + 0.059764556586742f, -0.237050101161003f, 0.059582870453596f, + -0.236712381243706f, + 0.059401445090771f, -0.236374512314796f, 0.059220276772976f, + -0.236036509275436f, + 0.059039369225502f, -0.235698372125626f, 0.058858718723059f, + -0.235360085964203f, + 0.058678328990936f, -0.235021665692329f, 0.058498200029135f, + -0.234683111310005f, + 0.058318331837654f, -0.234344407916069f, 0.058138720691204f, + -0.234005570411682f, + 0.057959370315075f, -0.233666598796844f, 0.057780280709267f, + -0.233327493071556f, + 0.057601451873779f, -0.232988253235817f, 0.057422880083323f, + -0.232648864388466f, + 0.057244572788477f, -0.232309341430664f, 0.057066522538662f, + -0.231969684362412f, + 0.056888736784458f, -0.231629893183708f, 0.056711208075285f, + -0.231289967894554f, + 0.056533940136433f, -0.230949893593788f, 0.056356932967901f, + -0.230609700083733f, + 0.056180190294981f, -0.230269357562065f, 0.056003704667091f, + -0.229928880929947f, + 0.055827483534813f, -0.229588270187378f, 0.055651523172855f, + -0.229247525334358f, + 0.055475823581219f, -0.228906646370888f, 0.055300384759903f, + -0.228565633296967f, + 0.055125206708908f, -0.228224486112595f, 0.054950293153524f, + -0.227883204817772f, + 0.054775636643171f, -0.227541789412498f, 0.054601248353720f, + -0.227200239896774f, + 0.054427117109299f, -0.226858556270599f, 0.054253250360489f, + -0.226516738533974f, + 0.054079644382000f, -0.226174786686897f, 0.053906302899122f, + -0.225832715630531f, + 0.053733222186565f, -0.225490495562553f, 0.053560405969620f, + -0.225148141384125f, + 0.053387850522995f, -0.224805667996407f, 0.053215555846691f, + -0.224463045597076f, + 0.053043525665998f, -0.224120303988457f, 0.052871759980917f, + -0.223777428269386f, + 0.052700258791447f, -0.223434418439865f, 0.052529018372297f, + -0.223091274499893f, + 0.052358038723469f, -0.222748011350632f, 0.052187327295542f, + -0.222404599189758f, + 0.052016876637936f, -0.222061067819595f, 0.051846686750650f, + -0.221717402338982f, + 0.051676765084267f, -0.221373617649078f, 0.051507104188204f, + -0.221029683947563f, + 0.051337707787752f, -0.220685631036758f, 0.051168579608202f, + -0.220341444015503f, + 0.050999708473682f, -0.219997137784958f, 0.050831105560064f, + -0.219652697443962f, + 0.050662767142057f, -0.219308122992516f, 0.050494693219662f, + -0.218963414430618f, + 0.050326880067587f, -0.218618586659431f, 0.050159335136414f, + -0.218273624777794f, + 0.049992054700851f, -0.217928543686867f, 0.049825038760900f, + -0.217583328485489f, + 0.049658283591270f, -0.217237979173660f, 0.049491796642542f, + -0.216892510652542f, + 0.049325577914715f, -0.216546908020973f, 0.049159619957209f, + -0.216201186180115f, + 0.048993926495314f, -0.215855330228806f, 0.048828501254320f, + -0.215509355068207f, + 0.048663340508938f, -0.215163245797157f, 0.048498444259167f, + -0.214817002415657f, + 0.048333816230297f, -0.214470639824867f, 0.048169452697039f, + -0.214124158024788f, + 0.048005353659391f, -0.213777542114258f, 0.047841522842646f, + -0.213430806994438f, + 0.047677956521511f, -0.213083937764168f, 0.047514654695988f, + -0.212736949324608f, + 0.047351621091366f, -0.212389841675758f, 0.047188851982355f, + -0.212042599916458f, + 0.047026351094246f, -0.211695238947868f, 0.046864114701748f, + -0.211347743868828f, + 0.046702146530151f, -0.211000129580498f, 0.046540446579456f, + -0.210652396082878f, + 0.046379011124372f, -0.210304543375969f, 0.046217843890190f, + -0.209956556558609f, + 0.046056941151619f, -0.209608450531960f, 0.045896306633949f, + -0.209260210394859f, + 0.045735940337181f, -0.208911851048470f, 0.045575842261314f, + -0.208563387393951f, + 0.045416008681059f, -0.208214774727821f, 0.045256443321705f, + -0.207866057753563f, + 0.045097146183252f, -0.207517206668854f, 0.044938117265701f, + -0.207168251276016f, + 0.044779352843761f, -0.206819161772728f, 0.044620860368013f, + -0.206469938158989f, + 0.044462632387877f, -0.206120610237122f, 0.044304672628641f, + -0.205771163105965f, + 0.044146984815598f, -0.205421581864357f, 0.043989561498165f, + -0.205071896314621f, + 0.043832406401634f, -0.204722076654434f, 0.043675523251295f, + -0.204372137784958f, + 0.043518904596567f, -0.204022079706192f, 0.043362557888031f, + -0.203671902418137f, + 0.043206475675106f, -0.203321605920792f, 0.043050665408373f, + -0.202971190214157f, + 0.042895123362541f, -0.202620655298233f, 0.042739849537611f, + -0.202270001173019f, + 0.042584843933582f, -0.201919227838516f, 0.042430106550455f, + -0.201568335294724f, + 0.042275641113520f, -0.201217323541641f, 0.042121443897486f, + -0.200866192579269f, + 0.041967518627644f, -0.200514942407608f, 0.041813857853413f, + -0.200163587927818f, + 0.041660469025373f, -0.199812099337578f, 0.041507352143526f, + -0.199460506439209f, + 0.041354499757290f, -0.199108779430389f, 0.041201923042536f, + -0.198756948113441f, + 0.041049610823393f, -0.198404997587204f, 0.040897574275732f, + -0.198052927851677f, + 0.040745802223682f, -0.197700738906860f, 0.040594302117825f, + -0.197348430752754f, + 0.040443073958158f, -0.196996018290520f, 0.040292114019394f, + -0.196643486618996f, + 0.040141426026821f, -0.196290835738182f, 0.039991009980440f, + -0.195938065648079f, + 0.039840862154961f, -0.195585191249847f, 0.039690986275673f, + -0.195232197642326f, + 0.039541378617287f, -0.194879084825516f, 0.039392042905092f, + -0.194525867700577f, + 0.039242979139090f, -0.194172516465187f, 0.039094187319279f, + -0.193819075822830f, + 0.038945667445660f, -0.193465501070023f, 0.038797415792942f, + -0.193111822009087f, + 0.038649436086416f, -0.192758023738861f, 0.038501728326082f, + -0.192404121160507f, + 0.038354292511940f, -0.192050099372864f, 0.038207128643990f, + -0.191695958375931f, + 0.038060232996941f, -0.191341713070869f, 0.037913613021374f, + -0.190987363457680f, + 0.037767261266708f, -0.190632879734039f, 0.037621185183525f, + -0.190278306603432f, + 0.037475381046534f, -0.189923599362373f, 0.037329845130444f, + -0.189568802714348f, + 0.037184584885836f, -0.189213871955872f, 0.037039596587420f, + -0.188858851790428f, + 0.036894880235195f, -0.188503712415695f, 0.036750435829163f, + -0.188148453831673f, + 0.036606263369322f, -0.187793090939522f, 0.036462362855673f, + -0.187437608838081f, + 0.036318738013506f, -0.187082037329674f, 0.036175385117531f, + -0.186726331710815f, + 0.036032304167747f, -0.186370536684990f, 0.035889495164156f, + -0.186014622449875f, + 0.035746958106756f, -0.185658603906631f, 0.035604696720839f, + -0.185302466154099f, + 0.035462711006403f, -0.184946224093437f, 0.035320993512869f, + -0.184589877724648f, + 0.035179551690817f, -0.184233412146568f, 0.035038381814957f, + -0.183876842260361f, + 0.034897487610579f, -0.183520168066025f, 0.034756865352392f, + -0.183163389563560f, + 0.034616518765688f, -0.182806491851807f, 0.034476444125175f, + -0.182449504733086f, + 0.034336645156145f, -0.182092398405075f, 0.034197118133307f, + -0.181735187768936f, + 0.034057866781950f, -0.181377857923508f, 0.033918887376785f, + -0.181020438671112f, + 0.033780183643103f, -0.180662900209427f, 0.033641755580902f, + -0.180305257439613f, + 0.033503599464893f, -0.179947525262833f, 0.033365719020367f, + -0.179589673876762f, + 0.033228114247322f, -0.179231703281403f, 0.033090781420469f, + -0.178873643279076f, + 0.032953724265099f, -0.178515478968620f, 0.032816942781210f, + -0.178157210350037f, + 0.032680433243513f, -0.177798837423325f, 0.032544203102589f, + -0.177440345287323f, + 0.032408244907856f, -0.177081763744354f, 0.032272562384605f, + -0.176723077893257f, + 0.032137155532837f, -0.176364272832870f, 0.032002024352551f, + -0.176005378365517f, + 0.031867165118456f, -0.175646379590034f, 0.031732585281134f, + -0.175287276506424f, + 0.031598277390003f, -0.174928069114685f, 0.031464248895645f, + -0.174568757414818f, + 0.031330492347479f, -0.174209341406822f, 0.031197015196085f, + -0.173849821090698f, + 0.031063811853528f, -0.173490211367607f, 0.030930884182453f, + -0.173130482435226f, + 0.030798232182860f, -0.172770664095879f, 0.030665857717395f, + -0.172410741448402f, + 0.030533758923411f, -0.172050714492798f, 0.030401935800910f, + -0.171690583229065f, + 0.030270388349891f, -0.171330362558365f, 0.030139118432999f, + -0.170970037579536f, + 0.030008124187589f, -0.170609608292580f, 0.029877405613661f, + -0.170249074697495f, + 0.029746964573860f, -0.169888436794281f, 0.029616801068187f, + -0.169527709484100f, + 0.029486913233995f, -0.169166877865791f, 0.029357301071286f, + -0.168805956840515f, + 0.029227968305349f, -0.168444931507111f, 0.029098909348249f, + -0.168083801865578f, + 0.028970129787922f, -0.167722567915916f, 0.028841627761722f, + -0.167361244559288f, + 0.028713401407003f, -0.166999831795692f, 0.028585452586412f, + -0.166638299822807f, + 0.028457781299949f, -0.166276678442955f, 0.028330387547612f, + -0.165914967656136f, + 0.028203271329403f, -0.165553152561188f, 0.028076432645321f, + -0.165191248059273f, + 0.027949871495366f, -0.164829224348068f, 0.027823587879539f, + -0.164467126131058f, + 0.027697581797838f, -0.164104923605919f, 0.027571853250265f, + -0.163742616772652f, + 0.027446404099464f, -0.163380220532417f, 0.027321230620146f, + -0.163017734885216f, + 0.027196336537600f, -0.162655144929886f, 0.027071721851826f, + -0.162292465567589f, + 0.026947384700179f, -0.161929681897163f, 0.026823325082660f, + -0.161566808819771f, + 0.026699542999268f, -0.161203846335411f, 0.026576040312648f, + -0.160840779542923f, + 0.026452817022800f, -0.160477623343468f, 0.026329871267080f, + -0.160114362835884f, + 0.026207204908133f, -0.159751012921333f, 0.026084816083312f, + -0.159387573599815f, + 0.025962706655264f, -0.159024044871330f, 0.025840876623988f, + -0.158660411834717f, + 0.025719324126840f, -0.158296689391136f, 0.025598052889109f, + -0.157932877540588f, + 0.025477059185505f, -0.157568961381912f, 0.025356344878674f, + -0.157204970717430f, + 0.025235909968615f, -0.156840875744820f, 0.025115754455328f, + -0.156476691365242f, + 0.024995878338814f, -0.156112402677536f, 0.024876279756427f, + -0.155748039484024f, + 0.024756962433457f, -0.155383571982384f, 0.024637924507260f, + -0.155019029974937f, + 0.024519165977836f, -0.154654383659363f, 0.024400688707829f, + -0.154289647936821f, + 0.024282488971949f, -0.153924822807312f, 0.024164570495486f, + -0.153559908270836f, + 0.024046931415796f, -0.153194904327393f, 0.023929571732879f, + -0.152829796075821f, + 0.023812493309379f, -0.152464613318443f, 0.023695694282651f, + -0.152099341154099f, + 0.023579176515341f, -0.151733979582787f, 0.023462938144803f, + -0.151368513703346f, + 0.023346979171038f, -0.151002973318100f, 0.023231301456690f, + -0.150637343525887f, + 0.023115905001760f, -0.150271624326706f, 0.023000787943602f, + -0.149905815720558f, + 0.022885952144861f, -0.149539917707443f, 0.022771397605538f, + -0.149173930287361f, + 0.022657122462988f, -0.148807853460312f, 0.022543128579855f, + -0.148441687226295f, + 0.022429415956140f, -0.148075446486473f, 0.022315984591842f, + -0.147709101438522f, + 0.022202832624316f, -0.147342681884766f, 0.022089963778853f, + -0.146976172924042f, + 0.021977374330163f, -0.146609574556351f, 0.021865066140890f, + -0.146242901682854f, + 0.021753041073680f, -0.145876124501228f, 0.021641295403242f, + -0.145509272813797f, + 0.021529832854867f, -0.145142331719399f, 0.021418649703264f, + -0.144775316119194f, + 0.021307749673724f, -0.144408211112022f, 0.021197130903602f, + -0.144041016697884f, + 0.021086793392897f, -0.143673732876778f, 0.020976737141609f, + -0.143306359648705f, + 0.020866964012384f, -0.142938911914825f, 0.020757472142577f, + -0.142571389675140f, + 0.020648263394833f, -0.142203763127327f, 0.020539334043860f, + -0.141836062073708f, + 0.020430689677596f, -0.141468286514282f, 0.020322324708104f, + -0.141100421547890f, + 0.020214242860675f, -0.140732467174530f, 0.020106444135308f, + -0.140364438295364f, + 0.019998926669359f, -0.139996320009232f, 0.019891692325473f, + -0.139628127217293f, + 0.019784741103649f, -0.139259845018387f, 0.019678071141243f, + -0.138891488313675f, + 0.019571684300900f, -0.138523042201996f, 0.019465578719974f, + -0.138154521584511f, + 0.019359756261110f, -0.137785911560059f, 0.019254218786955f, + -0.137417227029800f, + 0.019148962572217f, -0.137048453092575f, 0.019043987616897f, + -0.136679604649544f, + 0.018939297646284f, -0.136310681700706f, 0.018834890797734f, + -0.135941669344902f, + 0.018730765208602f, -0.135572582483292f, 0.018626924604177f, + -0.135203406214714f, + 0.018523367121816f, -0.134834155440331f, 0.018420090898871f, + -0.134464830160141f, + 0.018317099660635f, -0.134095430374146f, 0.018214391544461f, + -0.133725941181183f, + 0.018111966550350f, -0.133356377482414f, 0.018009826540947f, + -0.132986739277840f, + 0.017907967790961f, -0.132617011666298f, 0.017806394025683f, + -0.132247209548950f, + 0.017705103382468f, -0.131877332925797f, 0.017604095861316f, + -0.131507381796837f, + 0.017503373324871f, -0.131137356162071f, 0.017402933910489f, + -0.130767241120338f, + 0.017302779480815f, -0.130397051572800f, 0.017202908173203f, + -0.130026802420616f, + 0.017103319987655f, -0.129656463861465f, 0.017004016786814f, + -0.129286035895348f, + 0.016904998570681f, -0.128915548324585f, 0.016806263476610f, + -0.128544986248016f, + 0.016707813367248f, -0.128174334764481f, 0.016609646379948f, + -0.127803623676300f, + 0.016511764377356f, -0.127432823181152f, 0.016414167359471f, + -0.127061963081360f, + 0.016316853463650f, -0.126691013574600f, 0.016219824552536f, + -0.126320004463196f, + 0.016123080626130f, -0.125948905944824f, 0.016026621684432f, + -0.125577747821808f, + 0.015930447727442f, -0.125206500291824f, 0.015834558755159f, + -0.124835193157196f, + 0.015738952904940f, -0.124463804066181f, 0.015643632039428f, + -0.124092340469360f, + 0.015548598021269f, -0.123720809817314f, 0.015453847125173f, + -0.123349204659462f, + 0.015359382145107f, -0.122977524995804f, 0.015265202149749f, + -0.122605770826340f, + 0.015171307139099f, -0.122233949601650f, 0.015077698044479f, + -0.121862053871155f, + 0.014984373003244f, -0.121490091085434f, 0.014891333878040f, + -0.121118053793907f, + 0.014798580668867f, -0.120745941996574f, 0.014706112444401f, + -0.120373763144016f, + 0.014613929204643f, -0.120001509785652f, 0.014522032812238f, + -0.119629189372063f, + 0.014430420473218f, -0.119256794452667f, 0.014339094981551f, + -0.118884332478046f, + 0.014248054474592f, -0.118511803448200f, 0.014157299883664f, + -0.118139199912548f, + 0.014066831208766f, -0.117766529321671f, 0.013976648449898f, + -0.117393791675568f, + 0.013886751607060f, -0.117020979523659f, 0.013797140680254f, + -0.116648100316525f, + 0.013707815669477f, -0.116275154054165f, 0.013618776574731f, + -0.115902140736580f, + 0.013530024327338f, -0.115529052913189f, 0.013441557064652f, + -0.115155905485153f, + 0.013353376649320f, -0.114782683551311f, 0.013265483081341f, + -0.114409394562244f, + 0.013177875429392f, -0.114036038517952f, 0.013090553693473f, + -0.113662622869015f, + 0.013003518804908f, -0.113289132714272f, 0.012916770763695f, + -0.112915575504303f, + 0.012830308638513f, -0.112541958689690f, 0.012744133360684f, + -0.112168267369270f, + 0.012658244930208f, -0.111794516444206f, 0.012572642415762f, + -0.111420698463917f, + 0.012487327679992f, -0.111046813428402f, 0.012402298860252f, + -0.110672861337662f, + 0.012317557819188f, -0.110298842191696f, 0.012233102694154f, + -0.109924763441086f, + 0.012148935347795f, -0.109550617635250f, 0.012065053917468f, + -0.109176412224770f, + 0.011981460265815f, -0.108802139759064f, 0.011898153461516f, + -0.108427800238132f, + 0.011815134435892f, -0.108053401112556f, 0.011732402257621f, + -0.107678934931755f, + 0.011649956926703f, -0.107304409146309f, 0.011567799374461f, + -0.106929816305637f, + 0.011485928669572f, -0.106555156409740f, 0.011404345743358f, + -0.106180444359779f, + 0.011323049664497f, -0.105805665254593f, 0.011242041364312f, + -0.105430819094181f, + 0.011161320842803f, -0.105055920779705f, 0.011080888099968f, + -0.104680955410004f, + 0.011000742204487f, -0.104305922985077f, 0.010920885019004f, + -0.103930838406086f, + 0.010841314680874f, -0.103555686771870f, 0.010762032121420f, + -0.103180475533009f, + 0.010683037340641f, -0.102805204689503f, 0.010604331269860f, + -0.102429874241352f, + 0.010525912046432f, -0.102054484188557f, 0.010447781533003f, + -0.101679034531116f, + 0.010369938798249f, -0.101303517818451f, 0.010292383842170f, + -0.100927948951721f, + 0.010215117596090f, -0.100552320480347f, 0.010138138197362f, + -0.100176624953747f, + 0.010061448439956f, -0.099800877273083f, 0.009985045529902f, + -0.099425069987774f, + 0.009908932261169f, -0.099049203097820f, 0.009833106771111f, + -0.098673284053802f, + 0.009757569059730f, -0.098297297954559f, 0.009682320058346f, + -0.097921259701252f, + 0.009607359766960f, -0.097545161843300f, 0.009532688185573f, + -0.097169004380703f, + 0.009458304382861f, -0.096792794764042f, 0.009384209290147f, + -0.096416525542736f, + 0.009310402907431f, -0.096040196716785f, 0.009236886166036f, + -0.095663815736771f, + 0.009163657203317f, -0.095287375152111f, 0.009090716950595f, + -0.094910882413387f, + 0.009018065407872f, -0.094534330070019f, 0.008945702575147f, + -0.094157725572586f, + 0.008873629383743f, -0.093781061470509f, 0.008801844902337f, + -0.093404345214367f, + 0.008730349130929f, -0.093027576804161f, 0.008659142069519f, + -0.092650748789310f, + 0.008588224649429f, -0.092273868620396f, 0.008517595939338f, + -0.091896936297417f, + 0.008447255939245f, -0.091519944369793f, 0.008377205580473f, + -0.091142900288105f, + 0.008307444863021f, -0.090765804052353f, 0.008237972855568f, + -0.090388655662537f, + 0.008168790489435f, -0.090011447668076f, 0.008099896833301f, + -0.089634194970131f, + 0.008031292818487f, -0.089256882667542f, 0.007962978444993f, + -0.088879525661469f, + 0.007894953712821f, -0.088502109050751f, 0.007827218621969f, + -0.088124647736549f, + 0.007759772241116f, -0.087747126817703f, 0.007692615967244f, + -0.087369553744793f, + 0.007625748869032f, -0.086991935968399f, 0.007559171877801f, + -0.086614266037941f, + 0.007492884527892f, -0.086236543953419f, 0.007426886819303f, + -0.085858769714832f, + 0.007361178752035f, -0.085480943322182f, 0.007295760791749f, + -0.085103072226048f, + 0.007230632472783f, -0.084725148975849f, 0.007165793795139f, + -0.084347173571587f, + 0.007101245224476f, -0.083969146013260f, 0.007036986760795f, + -0.083591073751450f, + 0.006973018404096f, -0.083212949335575f, 0.006909339688718f, + -0.082834780216217f, + 0.006845951545984f, -0.082456558942795f, 0.006782853044569f, + -0.082078292965889f, + 0.006720044650137f, -0.081699974834919f, 0.006657526828349f, + -0.081321612000465f, + 0.006595299113542f, -0.080943197011948f, 0.006533361505717f, + -0.080564737319946f, + 0.006471714470536f, -0.080186225473881f, 0.006410357542336f, + -0.079807676374912f, + 0.006349290721118f, -0.079429075121880f, 0.006288514938205f, + -0.079050421714783f, + 0.006228029262275f, -0.078671731054783f, 0.006167833693326f, + -0.078292988240719f, + 0.006107929162681f, -0.077914200723171f, 0.006048315204680f, + -0.077535368502140f, + 0.005988991353661f, -0.077156484127045f, 0.005929958540946f, + -0.076777562499046f, + 0.005871216300875f, -0.076398596167564f, 0.005812764633447f, + -0.076019577682018f, + 0.005754603538662f, -0.075640521943569f, 0.005696733482182f, + -0.075261414051056f, + 0.005639153998345f, -0.074882268905640f, 0.005581865552813f, + -0.074503071606159f, + 0.005524867679924f, -0.074123837053776f, 0.005468160845339f, + -0.073744557797909f, + 0.005411745049059f, -0.073365233838558f, 0.005355620291084f, + -0.072985872626305f, + 0.005299786105752f, -0.072606459259987f, 0.005244242958724f, + -0.072227008640766f, + 0.005188991315663f, -0.071847513318062f, 0.005134030245245f, + -0.071467980742455f, + 0.005079360678792f, -0.071088403463364f, 0.005024982150644f, + -0.070708781480789f, + 0.004970894660801f, -0.070329122245312f, 0.004917098674923f, + -0.069949418306351f, + 0.004863593727350f, -0.069569669663906f, 0.004810380283743f, + -0.069189883768559f, + 0.004757457878441f, -0.068810060620308f, 0.004704826977104f, + -0.068430192768574f, + 0.004652487114072f, -0.068050287663937f, 0.004600439220667f, + -0.067670337855816f, + 0.004548682365566f, -0.067290350794792f, 0.004497217014432f, + -0.066910326480865f, + 0.004446043167263f, -0.066530264914036f, 0.004395160824060f, + -0.066150158643723f, + 0.004344569984823f, -0.065770015120506f, 0.004294271115214f, + -0.065389834344387f, + 0.004244263283908f, -0.065009608864784f, 0.004194547422230f, + -0.064629353582859f, + 0.004145123064518f, -0.064249053597450f, 0.004095990676433f, + -0.063868723809719f, + 0.004047149792314f, -0.063488349318504f, 0.003998600877821f, + -0.063107937574387f, + 0.003950343467295f, -0.062727488577366f, 0.003902378026396f, + -0.062347009778023f, + 0.003854704322293f, -0.061966486275196f, 0.003807322587818f, + -0.061585929244757f, + 0.003760232590139f, -0.061205338686705f, 0.003713434794918f, + -0.060824707150459f, + 0.003666928736493f, -0.060444042086601f, 0.003620714880526f, + -0.060063343495131f, + 0.003574792761356f, -0.059682607650757f, 0.003529162844643f, + -0.059301838278770f, + 0.003483824897557f, -0.058921031653881f, 0.003438779152930f, + -0.058540191501379f, + 0.003394025377929f, -0.058159314095974f, 0.003349563805386f, + -0.057778406888247f, + 0.003305394435301f, -0.057397462427616f, 0.003261517267674f, + -0.057016488164663f, + 0.003217932302505f, -0.056635476648808f, 0.003174639539793f, + -0.056254431605339f, + 0.003131638979539f, -0.055873356759548f, 0.003088930854574f, + -0.055492244660854f, + 0.003046514932066f, -0.055111102759838f, 0.003004391444847f, + -0.054729927331209f, + 0.002962560392916f, -0.054348722100258f, 0.002921021543443f, + -0.053967483341694f, + 0.002879775362089f, -0.053586211055517f, 0.002838821383193f, + -0.053204908967018f, + 0.002798160072416f, -0.052823577076197f, 0.002757790964097f, + -0.052442211657763f, + 0.002717714523897f, -0.052060816437006f, 0.002677930751815f, + -0.051679391413927f, + 0.002638439415023f, -0.051297932863235f, 0.002599240746349f, + -0.050916448235512f, + 0.002560334512964f, -0.050534930080175f, 0.002521721180528f, + -0.050153385847807f, + 0.002483400283381f, -0.049771808087826f, 0.002445372054353f, + -0.049390204250813f, + 0.002407636726275f, -0.049008570611477f, 0.002370193833485f, + -0.048626907169819f, + 0.002333043841645f, -0.048245213925838f, 0.002296186750755f, + -0.047863494604826f, + 0.002259622327983f, -0.047481749206781f, 0.002223350573331f, + -0.047099970281124f, + 0.002187371719629f, -0.046718169003725f, 0.002151685766876f, + -0.046336337924004f, + 0.002116292715073f, -0.045954477041960f, 0.002081192564219f, + -0.045572593808174f, + 0.002046385314316f, -0.045190680772066f, 0.002011870965362f, + -0.044808741658926f, + 0.001977649517357f, -0.044426776468754f, 0.001943721086718f, + -0.044044785201550f, + 0.001910085673444f, -0.043662767857313f, 0.001876743277535f, + -0.043280724436045f, + 0.001843693898991f, -0.042898654937744f, 0.001810937537812f, + -0.042516563087702f, + 0.001778474310413f, -0.042134445160627f, 0.001746304216795f, + -0.041752301156521f, + 0.001714427140541f, -0.041370131075382f, 0.001682843198068f, + -0.040987938642502f, + 0.001651552389376f, -0.040605723857880f, 0.001620554830879f, + -0.040223482996225f, + 0.001589850406162f, -0.039841219782829f, 0.001559439115226f, + -0.039458930492401f, + 0.001529321074486f, -0.039076622575521f, 0.001499496400356f, + -0.038694288581610f, + 0.001469964860007f, -0.038311932235956f, 0.001440726569854f, + -0.037929553538561f, + 0.001411781646311f, -0.037547148764133f, 0.001383129972965f, + -0.037164725363255f, + 0.001354771666229f, -0.036782283335924f, 0.001326706726104f, + -0.036399815231562f, + 0.001298935036175f, -0.036017324775457f, 0.001271456829272f, + -0.035634815692902f, + 0.001244271872565f, -0.035252287983894f, 0.001217380515300f, + -0.034869734197855f, + 0.001190782408230f, -0.034487165510654f, 0.001164477784187f, + -0.034104570746422f, + 0.001138466643170f, -0.033721961081028f, 0.001112748985179f, + -0.033339329063892f, + 0.001087324810214f, -0.032956674695015f, 0.001062194118276f, + -0.032574005424976f, + 0.001037356909364f, -0.032191313803196f, 0.001012813183479f, + -0.031808607280254f, + 0.000988563057035f, -0.031425878405571f, 0.000964606530033f, + -0.031043132767081f, + 0.000940943544265f, -0.030660368502140f, 0.000917574157938f, + -0.030277585610747f, + 0.000894498312846f, -0.029894785955548f, 0.000871716125403f, + -0.029511967673898f, + 0.000849227537401f, -0.029129132628441f, 0.000827032607049f, + -0.028746278956532f, + 0.000805131276138f, -0.028363410383463f, 0.000783523661084f, + -0.027980525046587f, + 0.000762209703680f, -0.027597622945905f, 0.000741189462133f, + -0.027214704081416f, + 0.000720462878235f, -0.026831768453121f, 0.000700030010194f, + -0.026448817923665f, + 0.000679890916217f, -0.026065852493048f, 0.000660045538098f, + -0.025682870298624f, + 0.000640493875835f, -0.025299875065684f, 0.000621235987637f, + -0.024916863068938f, + 0.000602271873504f, -0.024533838033676f, 0.000583601591643f, + -0.024150796234608f, + 0.000565225025639f, -0.023767741397023f, 0.000547142291907f, + -0.023384673520923f, + 0.000529353390448f, -0.023001590743661f, 0.000511858321261f, + -0.022618494927883f, + 0.000494657084346f, -0.022235386073589f, 0.000477749679703f, + -0.021852264180779f, + 0.000461136136437f, -0.021469129249454f, 0.000444816454547f, + -0.021085981279612f, + 0.000428790634032f, -0.020702820271254f, 0.000413058703998f, + -0.020319648087025f, + 0.000397620693548f, -0.019936462864280f, 0.000382476573577f, + -0.019553268328309f, + 0.000367626344087f, -0.019170060753822f, 0.000353070063284f, + -0.018786842003465f, + 0.000338807702065f, -0.018403612077236f, 0.000324839289533f, + -0.018020370975137f, + 0.000311164796585f, -0.017637118697166f, 0.000297784281429f, + -0.017253857105970f, + 0.000284697714960f, -0.016870586201549f, 0.000271905126283f, + -0.016487304121256f, + 0.000259406515397f, -0.016104012727737f, 0.000247201882303f, + -0.015720712020993f, + 0.000235291256104f, -0.015337402001023f, 0.000223674607696f, + -0.014954082667828f, + 0.000212351980736f, -0.014570754021406f, 0.000201323360670f, + -0.014187417924404f, + 0.000190588747500f, -0.013804072514176f, 0.000180148170330f, + -0.013420719653368f, + 0.000170001629158f, -0.013037359341979f, 0.000160149123985f, + -0.012653990648687f, + 0.000150590654812f, -0.012270614504814f, 0.000141326236189f, + -0.011887230910361f, + 0.000132355868118f, -0.011503840796649f, 0.000123679565149f, + -0.011120444163680f, + 0.000115297327284f, -0.010737040080130f, 0.000107209154521f, + -0.010353630408645f, + 0.000099415054137f, -0.009970214217901f, 0.000091915040684f, + -0.009586792439222f, + 0.000084709099610f, -0.009203365072608f, 0.000077797252743f, + -0.008819932118058f, + 0.000071179500083f, -0.008436493575573f, 0.000064855834353f, + -0.008053051307797f, + 0.000058826273744f, -0.007669602986425f, 0.000053090810979f, + -0.007286150939763f, + 0.000047649456974f, -0.006902694236487f, 0.000042502211727f, + -0.006519233807921f, + 0.000037649078877f, -0.006135769188404f, 0.000033090062061f, + -0.005752300843596f, + 0.000028825161280f, -0.005368829704821f, 0.000024854381991f, + -0.004985354840755f, + 0.000021177724193f, -0.004601877182722f, 0.000017795191525f, + -0.004218397196382f, + 0.000014706784896f, -0.003834914416075f, 0.000011912506125f, + -0.003451429307461f, + 0.000009412358850f, -0.003067942336202f, 0.000007206342616f, + -0.002684453502297f, + 0.000005294459243f, -0.002300963038579f, 0.000003676709639f, + -0.001917471294291f, + 0.000002353095169f, -0.001533978385851f, 0.000001323616516f, + -0.001150484546088f, + 0.000000588274133f, -0.000766990066040f, 0.000000147068562f, + -0.000383495149435f, + 0.000000000000000f, -0.000000000000023f, 0.000000147068562f, + 0.000383495149435f, + 0.000000588274133f, 0.000766990066040f, 0.000001323616516f, + 0.001150484546088f, + 0.000002353095169f, 0.001533978385851f, 0.000003676709639f, + 0.001917471294291f, + 0.000005294459243f, 0.002300963038579f, 0.000007206342616f, + 0.002684453502297f, + 0.000009412358850f, 0.003067942336202f, 0.000011912506125f, + 0.003451429307461f, + 0.000014706784896f, 0.003834914416075f, 0.000017795191525f, + 0.004218397196382f, + 0.000021177724193f, 0.004601877182722f, 0.000024854381991f, + 0.004985354840755f, + 0.000028825161280f, 0.005368829704821f, 0.000033090062061f, + 0.005752300843596f, + 0.000037649078877f, 0.006135769188404f, 0.000042502211727f, + 0.006519233807921f, + 0.000047649456974f, 0.006902694236487f, 0.000053090810979f, + 0.007286150939763f, + 0.000058826273744f, 0.007669602986425f, 0.000064855834353f, + 0.008053051307797f, + 0.000071179500083f, 0.008436493575573f, 0.000077797252743f, + 0.008819932118058f, + 0.000084709099610f, 0.009203365072608f, 0.000091915040684f, + 0.009586792439222f, + 0.000099415054137f, 0.009970214217901f, 0.000107209154521f, + 0.010353630408645f, + 0.000115297327284f, 0.010737040080130f, 0.000123679565149f, + 0.011120444163680f, + 0.000132355868118f, 0.011503840796649f, 0.000141326236189f, + 0.011887230910361f, + 0.000150590654812f, 0.012270614504814f, 0.000160149123985f, + 0.012653990648687f, + 0.000170001629158f, 0.013037359341979f, 0.000180148170330f, + 0.013420719653368f, + 0.000190588747500f, 0.013804072514176f, 0.000201323360670f, + 0.014187417924404f, + 0.000212351980736f, 0.014570754021406f, 0.000223674607696f, + 0.014954082667828f, + 0.000235291256104f, 0.015337402001023f, 0.000247201882303f, + 0.015720712020993f, + 0.000259406515397f, 0.016104012727737f, 0.000271905126283f, + 0.016487304121256f, + 0.000284697714960f, 0.016870586201549f, 0.000297784281429f, + 0.017253857105970f, + 0.000311164796585f, 0.017637118697166f, 0.000324839289533f, + 0.018020370975137f, + 0.000338807702065f, 0.018403612077236f, 0.000353070063284f, + 0.018786842003465f, + 0.000367626344087f, 0.019170060753822f, 0.000382476573577f, + 0.019553268328309f, + 0.000397620693548f, 0.019936462864280f, 0.000413058703998f, + 0.020319648087025f, + 0.000428790634032f, 0.020702820271254f, 0.000444816454547f, + 0.021085981279612f, + 0.000461136136437f, 0.021469129249454f, 0.000477749679703f, + 0.021852264180779f, + 0.000494657084346f, 0.022235386073589f, 0.000511858321261f, + 0.022618494927883f, + 0.000529353390448f, 0.023001590743661f, 0.000547142291907f, + 0.023384673520923f, + 0.000565225025639f, 0.023767741397023f, 0.000583601591643f, + 0.024150796234608f, + 0.000602271873504f, 0.024533838033676f, 0.000621235987637f, + 0.024916863068938f, + 0.000640493875835f, 0.025299875065684f, 0.000660045538098f, + 0.025682870298624f, + 0.000679890916217f, 0.026065852493048f, 0.000700030010194f, + 0.026448817923665f, + 0.000720462878235f, 0.026831768453121f, 0.000741189462133f, + 0.027214704081416f, + 0.000762209703680f, 0.027597622945905f, 0.000783523661084f, + 0.027980525046587f, + 0.000805131276138f, 0.028363410383463f, 0.000827032607049f, + 0.028746278956532f, + 0.000849227537401f, 0.029129132628441f, 0.000871716125403f, + 0.029511967673898f, + 0.000894498312846f, 0.029894785955548f, 0.000917574157938f, + 0.030277585610747f, + 0.000940943544265f, 0.030660368502140f, 0.000964606530033f, + 0.031043132767081f, + 0.000988563057035f, 0.031425878405571f, 0.001012813183479f, + 0.031808607280254f, + 0.001037356909364f, 0.032191313803196f, 0.001062194118276f, + 0.032574005424976f, + 0.001087324810214f, 0.032956674695015f, 0.001112748985179f, + 0.033339329063892f, + 0.001138466643170f, 0.033721961081028f, 0.001164477784187f, + 0.034104570746422f, + 0.001190782408230f, 0.034487165510654f, 0.001217380515300f, + 0.034869734197855f, + 0.001244271872565f, 0.035252287983894f, 0.001271456829272f, + 0.035634815692902f, + 0.001298935036175f, 0.036017324775457f, 0.001326706726104f, + 0.036399815231562f, + 0.001354771666229f, 0.036782283335924f, 0.001383129972965f, + 0.037164725363255f, + 0.001411781646311f, 0.037547148764133f, 0.001440726569854f, + 0.037929553538561f, + 0.001469964860007f, 0.038311932235956f, 0.001499496400356f, + 0.038694288581610f, + 0.001529321074486f, 0.039076622575521f, 0.001559439115226f, + 0.039458930492401f, + 0.001589850406162f, 0.039841219782829f, 0.001620554830879f, + 0.040223482996225f, + 0.001651552389376f, 0.040605723857880f, 0.001682843198068f, + 0.040987938642502f, + 0.001714427140541f, 0.041370131075382f, 0.001746304216795f, + 0.041752301156521f, + 0.001778474310413f, 0.042134445160627f, 0.001810937537812f, + 0.042516563087702f, + 0.001843693898991f, 0.042898654937744f, 0.001876743277535f, + 0.043280724436045f, + 0.001910085673444f, 0.043662767857313f, 0.001943721086718f, + 0.044044785201550f, + 0.001977649517357f, 0.044426776468754f, 0.002011870965362f, + 0.044808741658926f, + 0.002046385314316f, 0.045190680772066f, 0.002081192564219f, + 0.045572593808174f, + 0.002116292715073f, 0.045954477041960f, 0.002151685766876f, + 0.046336337924004f, + 0.002187371719629f, 0.046718169003725f, 0.002223350573331f, + 0.047099970281124f, + 0.002259622327983f, 0.047481749206781f, 0.002296186750755f, + 0.047863494604826f, + 0.002333043841645f, 0.048245213925838f, 0.002370193833485f, + 0.048626907169819f, + 0.002407636726275f, 0.049008570611477f, 0.002445372054353f, + 0.049390204250813f, + 0.002483400283381f, 0.049771808087826f, 0.002521721180528f, + 0.050153385847807f, + 0.002560334512964f, 0.050534930080175f, 0.002599240746349f, + 0.050916448235512f, + 0.002638439415023f, 0.051297932863235f, 0.002677930751815f, + 0.051679391413927f, + 0.002717714523897f, 0.052060816437006f, 0.002757790964097f, + 0.052442211657763f, + 0.002798160072416f, 0.052823577076197f, 0.002838821383193f, + 0.053204908967018f, + 0.002879775362089f, 0.053586211055517f, 0.002921021543443f, + 0.053967483341694f, + 0.002962560392916f, 0.054348722100258f, 0.003004391444847f, + 0.054729927331209f, + 0.003046514932066f, 0.055111102759838f, 0.003088930854574f, + 0.055492244660854f, + 0.003131638979539f, 0.055873356759548f, 0.003174639539793f, + 0.056254431605339f, + 0.003217932302505f, 0.056635476648808f, 0.003261517267674f, + 0.057016488164663f, + 0.003305394435301f, 0.057397462427616f, 0.003349563805386f, + 0.057778406888247f, + 0.003394025377929f, 0.058159314095974f, 0.003438779152930f, + 0.058540191501379f, + 0.003483824897557f, 0.058921031653881f, 0.003529162844643f, + 0.059301838278770f, + 0.003574792761356f, 0.059682607650757f, 0.003620714880526f, + 0.060063343495131f, + 0.003666928736493f, 0.060444042086601f, 0.003713434794918f, + 0.060824707150459f, + 0.003760232590139f, 0.061205338686705f, 0.003807322587818f, + 0.061585929244757f, + 0.003854704322293f, 0.061966486275196f, 0.003902378026396f, + 0.062347009778023f, + 0.003950343467295f, 0.062727488577366f, 0.003998600877821f, + 0.063107937574387f, + 0.004047149792314f, 0.063488349318504f, 0.004095990676433f, + 0.063868723809719f, + 0.004145123064518f, 0.064249053597450f, 0.004194547422230f, + 0.064629353582859f, + 0.004244263283908f, 0.065009608864784f, 0.004294271115214f, + 0.065389834344387f, + 0.004344569984823f, 0.065770015120506f, 0.004395160824060f, + 0.066150158643723f, + 0.004446043167263f, 0.066530264914036f, 0.004497217014432f, + 0.066910326480865f, + 0.004548682365566f, 0.067290350794792f, 0.004600439220667f, + 0.067670337855816f, + 0.004652487114072f, 0.068050287663937f, 0.004704826977104f, + 0.068430192768574f, + 0.004757457878441f, 0.068810060620308f, 0.004810380283743f, + 0.069189883768559f, + 0.004863593727350f, 0.069569669663906f, 0.004917098674923f, + 0.069949418306351f, + 0.004970894660801f, 0.070329122245312f, 0.005024982150644f, + 0.070708781480789f, + 0.005079360678792f, 0.071088403463364f, 0.005134030245245f, + 0.071467980742455f, + 0.005188991315663f, 0.071847513318062f, 0.005244242958724f, + 0.072227008640766f, + 0.005299786105752f, 0.072606459259987f, 0.005355620291084f, + 0.072985872626305f, + 0.005411745049059f, 0.073365233838558f, 0.005468160845339f, + 0.073744557797909f, + 0.005524867679924f, 0.074123837053776f, 0.005581865552813f, + 0.074503071606159f, + 0.005639153998345f, 0.074882268905640f, 0.005696733482182f, + 0.075261414051056f, + 0.005754603538662f, 0.075640521943569f, 0.005812764633447f, + 0.076019577682018f, + 0.005871216300875f, 0.076398596167564f, 0.005929958540946f, + 0.076777562499046f, + 0.005988991353661f, 0.077156484127045f, 0.006048315204680f, + 0.077535368502140f, + 0.006107929162681f, 0.077914200723171f, 0.006167833693326f, + 0.078292988240719f, + 0.006228029262275f, 0.078671731054783f, 0.006288514938205f, + 0.079050421714783f, + 0.006349290721118f, 0.079429075121880f, 0.006410357542336f, + 0.079807676374912f, + 0.006471714470536f, 0.080186225473881f, 0.006533361505717f, + 0.080564737319946f, + 0.006595299113542f, 0.080943197011948f, 0.006657526828349f, + 0.081321612000465f, + 0.006720044650137f, 0.081699974834919f, 0.006782853044569f, + 0.082078292965889f, + 0.006845951545984f, 0.082456558942795f, 0.006909339688718f, + 0.082834780216217f, + 0.006973018404096f, 0.083212949335575f, 0.007036986760795f, + 0.083591073751450f, + 0.007101245224476f, 0.083969146013260f, 0.007165793795139f, + 0.084347173571587f, + 0.007230632472783f, 0.084725148975849f, 0.007295760791749f, + 0.085103072226048f, + 0.007361178752035f, 0.085480943322182f, 0.007426886819303f, + 0.085858769714832f, + 0.007492884527892f, 0.086236543953419f, 0.007559171877801f, + 0.086614266037941f, + 0.007625748869032f, 0.086991935968399f, 0.007692615967244f, + 0.087369553744793f, + 0.007759772241116f, 0.087747126817703f, 0.007827218621969f, + 0.088124647736549f, + 0.007894953712821f, 0.088502109050751f, 0.007962978444993f, + 0.088879525661469f, + 0.008031292818487f, 0.089256882667542f, 0.008099896833301f, + 0.089634194970131f, + 0.008168790489435f, 0.090011447668076f, 0.008237972855568f, + 0.090388655662537f, + 0.008307444863021f, 0.090765804052353f, 0.008377205580473f, + 0.091142900288105f, + 0.008447255939245f, 0.091519944369793f, 0.008517595939338f, + 0.091896936297417f, + 0.008588224649429f, 0.092273868620396f, 0.008659142069519f, + 0.092650748789310f, + 0.008730349130929f, 0.093027576804161f, 0.008801844902337f, + 0.093404345214367f, + 0.008873629383743f, 0.093781061470509f, 0.008945702575147f, + 0.094157725572586f, + 0.009018065407872f, 0.094534330070019f, 0.009090716950595f, + 0.094910882413387f, + 0.009163657203317f, 0.095287375152111f, 0.009236886166036f, + 0.095663815736771f, + 0.009310402907431f, 0.096040196716785f, 0.009384209290147f, + 0.096416525542736f, + 0.009458304382861f, 0.096792794764042f, 0.009532688185573f, + 0.097169004380703f, + 0.009607359766960f, 0.097545161843300f, 0.009682320058346f, + 0.097921259701252f, + 0.009757569059730f, 0.098297297954559f, 0.009833106771111f, + 0.098673284053802f, + 0.009908932261169f, 0.099049203097820f, 0.009985045529902f, + 0.099425069987774f, + 0.010061448439956f, 0.099800877273083f, 0.010138138197362f, + 0.100176624953747f, + 0.010215117596090f, 0.100552320480347f, 0.010292383842170f, + 0.100927948951721f, + 0.010369938798249f, 0.101303517818451f, 0.010447781533003f, + 0.101679034531116f, + 0.010525912046432f, 0.102054484188557f, 0.010604331269860f, + 0.102429874241352f, + 0.010683037340641f, 0.102805204689503f, 0.010762032121420f, + 0.103180475533009f, + 0.010841314680874f, 0.103555686771870f, 0.010920885019004f, + 0.103930838406086f, + 0.011000742204487f, 0.104305922985077f, 0.011080888099968f, + 0.104680955410004f, + 0.011161320842803f, 0.105055920779705f, 0.011242041364312f, + 0.105430819094181f, + 0.011323049664497f, 0.105805665254593f, 0.011404345743358f, + 0.106180444359779f, + 0.011485928669572f, 0.106555156409740f, 0.011567799374461f, + 0.106929816305637f, + 0.011649956926703f, 0.107304409146309f, 0.011732402257621f, + 0.107678934931755f, + 0.011815134435892f, 0.108053401112556f, 0.011898153461516f, + 0.108427800238132f, + 0.011981460265815f, 0.108802139759064f, 0.012065053917468f, + 0.109176412224770f, + 0.012148935347795f, 0.109550617635250f, 0.012233102694154f, + 0.109924763441086f, + 0.012317557819188f, 0.110298842191696f, 0.012402298860252f, + 0.110672861337662f, + 0.012487327679992f, 0.111046813428402f, 0.012572642415762f, + 0.111420698463917f, + 0.012658244930208f, 0.111794516444206f, 0.012744133360684f, + 0.112168267369270f, + 0.012830308638513f, 0.112541958689690f, 0.012916770763695f, + 0.112915575504303f, + 0.013003518804908f, 0.113289132714272f, 0.013090553693473f, + 0.113662622869015f, + 0.013177875429392f, 0.114036038517952f, 0.013265483081341f, + 0.114409394562244f, + 0.013353376649320f, 0.114782683551311f, 0.013441557064652f, + 0.115155905485153f, + 0.013530024327338f, 0.115529052913189f, 0.013618776574731f, + 0.115902140736580f, + 0.013707815669477f, 0.116275154054165f, 0.013797140680254f, + 0.116648100316525f, + 0.013886751607060f, 0.117020979523659f, 0.013976648449898f, + 0.117393791675568f, + 0.014066831208766f, 0.117766529321671f, 0.014157299883664f, + 0.118139199912548f, + 0.014248054474592f, 0.118511803448200f, 0.014339094981551f, + 0.118884332478046f, + 0.014430420473218f, 0.119256794452667f, 0.014522032812238f, + 0.119629189372063f, + 0.014613929204643f, 0.120001509785652f, 0.014706112444401f, + 0.120373763144016f, + 0.014798580668867f, 0.120745941996574f, 0.014891333878040f, + 0.121118053793907f, + 0.014984373003244f, 0.121490091085434f, 0.015077698044479f, + 0.121862053871155f, + 0.015171307139099f, 0.122233949601650f, 0.015265202149749f, + 0.122605770826340f, + 0.015359382145107f, 0.122977524995804f, 0.015453847125173f, + 0.123349204659462f, + 0.015548598021269f, 0.123720809817314f, 0.015643632039428f, + 0.124092340469360f, + 0.015738952904940f, 0.124463804066181f, 0.015834558755159f, + 0.124835193157196f, + 0.015930447727442f, 0.125206500291824f, 0.016026621684432f, + 0.125577747821808f, + 0.016123080626130f, 0.125948905944824f, 0.016219824552536f, + 0.126320004463196f, + 0.016316853463650f, 0.126691013574600f, 0.016414167359471f, + 0.127061963081360f, + 0.016511764377356f, 0.127432823181152f, 0.016609646379948f, + 0.127803623676300f, + 0.016707813367248f, 0.128174334764481f, 0.016806263476610f, + 0.128544986248016f, + 0.016904998570681f, 0.128915548324585f, 0.017004016786814f, + 0.129286035895348f, + 0.017103319987655f, 0.129656463861465f, 0.017202908173203f, + 0.130026802420616f, + 0.017302779480815f, 0.130397051572800f, 0.017402933910489f, + 0.130767241120338f, + 0.017503373324871f, 0.131137356162071f, 0.017604095861316f, + 0.131507381796837f, + 0.017705103382468f, 0.131877332925797f, 0.017806394025683f, + 0.132247209548950f, + 0.017907967790961f, 0.132617011666298f, 0.018009826540947f, + 0.132986739277840f, + 0.018111966550350f, 0.133356377482414f, 0.018214391544461f, + 0.133725941181183f, + 0.018317099660635f, 0.134095430374146f, 0.018420090898871f, + 0.134464830160141f, + 0.018523367121816f, 0.134834155440331f, 0.018626924604177f, + 0.135203406214714f, + 0.018730765208602f, 0.135572582483292f, 0.018834890797734f, + 0.135941669344902f, + 0.018939297646284f, 0.136310681700706f, 0.019043987616897f, + 0.136679604649544f, + 0.019148962572217f, 0.137048453092575f, 0.019254218786955f, + 0.137417227029800f, + 0.019359756261110f, 0.137785911560059f, 0.019465578719974f, + 0.138154521584511f, + 0.019571684300900f, 0.138523042201996f, 0.019678071141243f, + 0.138891488313675f, + 0.019784741103649f, 0.139259845018387f, 0.019891692325473f, + 0.139628127217293f, + 0.019998926669359f, 0.139996320009232f, 0.020106444135308f, + 0.140364438295364f, + 0.020214242860675f, 0.140732467174530f, 0.020322324708104f, + 0.141100421547890f, + 0.020430689677596f, 0.141468286514282f, 0.020539334043860f, + 0.141836062073708f, + 0.020648263394833f, 0.142203763127327f, 0.020757472142577f, + 0.142571389675140f, + 0.020866964012384f, 0.142938911914825f, 0.020976737141609f, + 0.143306359648705f, + 0.021086793392897f, 0.143673732876778f, 0.021197130903602f, + 0.144041016697884f, + 0.021307749673724f, 0.144408211112022f, 0.021418649703264f, + 0.144775316119194f, + 0.021529832854867f, 0.145142331719399f, 0.021641295403242f, + 0.145509272813797f, + 0.021753041073680f, 0.145876124501228f, 0.021865066140890f, + 0.146242901682854f, + 0.021977374330163f, 0.146609574556351f, 0.022089963778853f, + 0.146976172924042f, + 0.022202832624316f, 0.147342681884766f, 0.022315984591842f, + 0.147709101438522f, + 0.022429415956140f, 0.148075446486473f, 0.022543128579855f, + 0.148441687226295f, + 0.022657122462988f, 0.148807853460312f, 0.022771397605538f, + 0.149173930287361f, + 0.022885952144861f, 0.149539917707443f, 0.023000787943602f, + 0.149905815720558f, + 0.023115905001760f, 0.150271624326706f, 0.023231301456690f, + 0.150637343525887f, + 0.023346979171038f, 0.151002973318100f, 0.023462938144803f, + 0.151368513703346f, + 0.023579176515341f, 0.151733979582787f, 0.023695694282651f, + 0.152099341154099f, + 0.023812493309379f, 0.152464613318443f, 0.023929571732879f, + 0.152829796075821f, + 0.024046931415796f, 0.153194904327393f, 0.024164570495486f, + 0.153559908270836f, + 0.024282488971949f, 0.153924822807312f, 0.024400688707829f, + 0.154289647936821f, + 0.024519165977836f, 0.154654383659363f, 0.024637924507260f, + 0.155019029974937f, + 0.024756962433457f, 0.155383571982384f, 0.024876279756427f, + 0.155748039484024f, + 0.024995878338814f, 0.156112402677536f, 0.025115754455328f, + 0.156476691365242f, + 0.025235909968615f, 0.156840875744820f, 0.025356344878674f, + 0.157204970717430f, + 0.025477059185505f, 0.157568961381912f, 0.025598052889109f, + 0.157932877540588f, + 0.025719324126840f, 0.158296689391136f, 0.025840876623988f, + 0.158660411834717f, + 0.025962706655264f, 0.159024044871330f, 0.026084816083312f, + 0.159387573599815f, + 0.026207204908133f, 0.159751012921333f, 0.026329871267080f, + 0.160114362835884f, + 0.026452817022800f, 0.160477623343468f, 0.026576040312648f, + 0.160840779542923f, + 0.026699542999268f, 0.161203846335411f, 0.026823325082660f, + 0.161566808819771f, + 0.026947384700179f, 0.161929681897163f, 0.027071721851826f, + 0.162292465567589f, + 0.027196336537600f, 0.162655144929886f, 0.027321230620146f, + 0.163017734885216f, + 0.027446404099464f, 0.163380220532417f, 0.027571853250265f, + 0.163742616772652f, + 0.027697581797838f, 0.164104923605919f, 0.027823587879539f, + 0.164467126131058f, + 0.027949871495366f, 0.164829224348068f, 0.028076432645321f, + 0.165191248059273f, + 0.028203271329403f, 0.165553152561188f, 0.028330387547612f, + 0.165914967656136f, + 0.028457781299949f, 0.166276678442955f, 0.028585452586412f, + 0.166638299822807f, + 0.028713401407003f, 0.166999831795692f, 0.028841627761722f, + 0.167361244559288f, + 0.028970129787922f, 0.167722567915916f, 0.029098909348249f, + 0.168083801865578f, + 0.029227968305349f, 0.168444931507111f, 0.029357301071286f, + 0.168805956840515f, + 0.029486913233995f, 0.169166877865791f, 0.029616801068187f, + 0.169527709484100f, + 0.029746964573860f, 0.169888436794281f, 0.029877405613661f, + 0.170249074697495f, + 0.030008124187589f, 0.170609608292580f, 0.030139118432999f, + 0.170970037579536f, + 0.030270388349891f, 0.171330362558365f, 0.030401935800910f, + 0.171690583229065f, + 0.030533758923411f, 0.172050714492798f, 0.030665857717395f, + 0.172410741448402f, + 0.030798232182860f, 0.172770664095879f, 0.030930884182453f, + 0.173130482435226f, + 0.031063811853528f, 0.173490211367607f, 0.031197015196085f, + 0.173849821090698f, + 0.031330492347479f, 0.174209341406822f, 0.031464248895645f, + 0.174568757414818f, + 0.031598277390003f, 0.174928069114685f, 0.031732585281134f, + 0.175287276506424f, + 0.031867165118456f, 0.175646379590034f, 0.032002024352551f, + 0.176005378365517f, + 0.032137155532837f, 0.176364272832870f, 0.032272562384605f, + 0.176723077893257f, + 0.032408244907856f, 0.177081763744354f, 0.032544203102589f, + 0.177440345287323f, + 0.032680433243513f, 0.177798837423325f, 0.032816942781210f, + 0.178157210350037f, + 0.032953724265099f, 0.178515478968620f, 0.033090781420469f, + 0.178873643279076f, + 0.033228114247322f, 0.179231703281403f, 0.033365719020367f, + 0.179589673876762f, + 0.033503599464893f, 0.179947525262833f, 0.033641755580902f, + 0.180305257439613f, + 0.033780183643103f, 0.180662900209427f, 0.033918887376785f, + 0.181020438671112f, + 0.034057866781950f, 0.181377857923508f, 0.034197118133307f, + 0.181735187768936f, + 0.034336645156145f, 0.182092398405075f, 0.034476444125175f, + 0.182449504733086f, + 0.034616518765688f, 0.182806491851807f, 0.034756865352392f, + 0.183163389563560f, + 0.034897487610579f, 0.183520168066025f, 0.035038381814957f, + 0.183876842260361f, + 0.035179551690817f, 0.184233412146568f, 0.035320993512869f, + 0.184589877724648f, + 0.035462711006403f, 0.184946224093437f, 0.035604696720839f, + 0.185302466154099f, + 0.035746958106756f, 0.185658603906631f, 0.035889495164156f, + 0.186014622449875f, + 0.036032304167747f, 0.186370536684990f, 0.036175385117531f, + 0.186726331710815f, + 0.036318738013506f, 0.187082037329674f, 0.036462362855673f, + 0.187437608838081f, + 0.036606263369322f, 0.187793090939522f, 0.036750435829163f, + 0.188148453831673f, + 0.036894880235195f, 0.188503712415695f, 0.037039596587420f, + 0.188858851790428f, + 0.037184584885836f, 0.189213871955872f, 0.037329845130444f, + 0.189568802714348f, + 0.037475381046534f, 0.189923599362373f, 0.037621185183525f, + 0.190278306603432f, + 0.037767261266708f, 0.190632879734039f, 0.037913613021374f, + 0.190987363457680f, + 0.038060232996941f, 0.191341713070869f, 0.038207128643990f, + 0.191695958375931f, + 0.038354292511940f, 0.192050099372864f, 0.038501728326082f, + 0.192404121160507f, + 0.038649436086416f, 0.192758023738861f, 0.038797415792942f, + 0.193111822009087f, + 0.038945667445660f, 0.193465501070023f, 0.039094187319279f, + 0.193819075822830f, + 0.039242979139090f, 0.194172516465187f, 0.039392042905092f, + 0.194525867700577f, + 0.039541378617287f, 0.194879084825516f, 0.039690986275673f, + 0.195232197642326f, + 0.039840862154961f, 0.195585191249847f, 0.039991009980440f, + 0.195938065648079f, + 0.040141426026821f, 0.196290835738182f, 0.040292114019394f, + 0.196643486618996f, + 0.040443073958158f, 0.196996018290520f, 0.040594302117825f, + 0.197348430752754f, + 0.040745802223682f, 0.197700738906860f, 0.040897574275732f, + 0.198052927851677f, + 0.041049610823393f, 0.198404997587204f, 0.041201923042536f, + 0.198756948113441f, + 0.041354499757290f, 0.199108779430389f, 0.041507352143526f, + 0.199460506439209f, + 0.041660469025373f, 0.199812099337578f, 0.041813857853413f, + 0.200163587927818f, + 0.041967518627644f, 0.200514942407608f, 0.042121443897486f, + 0.200866192579269f, + 0.042275641113520f, 0.201217323541641f, 0.042430106550455f, + 0.201568335294724f, + 0.042584843933582f, 0.201919227838516f, 0.042739849537611f, + 0.202270001173019f, + 0.042895123362541f, 0.202620655298233f, 0.043050665408373f, + 0.202971190214157f, + 0.043206475675106f, 0.203321605920792f, 0.043362557888031f, + 0.203671902418137f, + 0.043518904596567f, 0.204022079706192f, 0.043675523251295f, + 0.204372137784958f, + 0.043832406401634f, 0.204722076654434f, 0.043989561498165f, + 0.205071896314621f, + 0.044146984815598f, 0.205421581864357f, 0.044304672628641f, + 0.205771163105965f, + 0.044462632387877f, 0.206120610237122f, 0.044620860368013f, + 0.206469938158989f, + 0.044779352843761f, 0.206819161772728f, 0.044938117265701f, + 0.207168251276016f, + 0.045097146183252f, 0.207517206668854f, 0.045256443321705f, + 0.207866057753563f, + 0.045416008681059f, 0.208214774727821f, 0.045575842261314f, + 0.208563387393951f, + 0.045735940337181f, 0.208911851048470f, 0.045896306633949f, + 0.209260210394859f, + 0.046056941151619f, 0.209608450531960f, 0.046217843890190f, + 0.209956556558609f, + 0.046379011124372f, 0.210304543375969f, 0.046540446579456f, + 0.210652396082878f, + 0.046702146530151f, 0.211000129580498f, 0.046864114701748f, + 0.211347743868828f, + 0.047026351094246f, 0.211695238947868f, 0.047188851982355f, + 0.212042599916458f, + 0.047351621091366f, 0.212389841675758f, 0.047514654695988f, + 0.212736949324608f, + 0.047677956521511f, 0.213083937764168f, 0.047841522842646f, + 0.213430806994438f, + 0.048005353659391f, 0.213777542114258f, 0.048169452697039f, + 0.214124158024788f, + 0.048333816230297f, 0.214470639824867f, 0.048498444259167f, + 0.214817002415657f, + 0.048663340508938f, 0.215163245797157f, 0.048828501254320f, + 0.215509355068207f, + 0.048993926495314f, 0.215855330228806f, 0.049159619957209f, + 0.216201186180115f, + 0.049325577914715f, 0.216546908020973f, 0.049491796642542f, + 0.216892510652542f, + 0.049658283591270f, 0.217237979173660f, 0.049825038760900f, + 0.217583328485489f, + 0.049992054700851f, 0.217928543686867f, 0.050159335136414f, + 0.218273624777794f, + 0.050326880067587f, 0.218618586659431f, 0.050494693219662f, + 0.218963414430618f, + 0.050662767142057f, 0.219308122992516f, 0.050831105560064f, + 0.219652697443962f, + 0.050999708473682f, 0.219997137784958f, 0.051168579608202f, + 0.220341444015503f, + 0.051337707787752f, 0.220685631036758f, 0.051507104188204f, + 0.221029683947563f, + 0.051676765084267f, 0.221373617649078f, 0.051846686750650f, + 0.221717402338982f, + 0.052016876637936f, 0.222061067819595f, 0.052187327295542f, + 0.222404599189758f, + 0.052358038723469f, 0.222748011350632f, 0.052529018372297f, + 0.223091274499893f, + 0.052700258791447f, 0.223434418439865f, 0.052871759980917f, + 0.223777428269386f, + 0.053043525665998f, 0.224120303988457f, 0.053215555846691f, + 0.224463045597076f, + 0.053387850522995f, 0.224805667996407f, 0.053560405969620f, + 0.225148141384125f, + 0.053733222186565f, 0.225490495562553f, 0.053906302899122f, + 0.225832715630531f, + 0.054079644382000f, 0.226174786686897f, 0.054253250360489f, + 0.226516738533974f, + 0.054427117109299f, 0.226858556270599f, 0.054601248353720f, + 0.227200239896774f, + 0.054775636643171f, 0.227541789412498f, 0.054950293153524f, + 0.227883204817772f, + 0.055125206708908f, 0.228224486112595f, 0.055300384759903f, + 0.228565633296967f, + 0.055475823581219f, 0.228906646370888f, 0.055651523172855f, + 0.229247525334358f, + 0.055827483534813f, 0.229588270187378f, 0.056003704667091f, + 0.229928880929947f, + 0.056180190294981f, 0.230269357562065f, 0.056356932967901f, + 0.230609700083733f, + 0.056533940136433f, 0.230949893593788f, 0.056711208075285f, + 0.231289967894554f, + 0.056888736784458f, 0.231629893183708f, 0.057066522538662f, + 0.231969684362412f, + 0.057244572788477f, 0.232309341430664f, 0.057422880083323f, + 0.232648864388466f, + 0.057601451873779f, 0.232988253235817f, 0.057780280709267f, + 0.233327493071556f, + 0.057959370315075f, 0.233666598796844f, 0.058138720691204f, + 0.234005570411682f, + 0.058318331837654f, 0.234344407916069f, 0.058498200029135f, + 0.234683111310005f, + 0.058678328990936f, 0.235021665692329f, 0.058858718723059f, + 0.235360085964203f, + 0.059039369225502f, 0.235698372125626f, 0.059220276772976f, + 0.236036509275436f, + 0.059401445090771f, 0.236374512314796f, 0.059582870453596f, + 0.236712381243706f, + 0.059764556586742f, 0.237050101161003f, 0.059946499764919f, + 0.237387686967850f, + 0.060128703713417f, 0.237725138664246f, 0.060311164706945f, + 0.238062441349030f, + 0.060493886470795f, 0.238399609923363f, 0.060676865279675f, + 0.238736644387245f, + 0.060860104858875f, 0.239073529839516f, 0.061043601483107f, + 0.239410281181335f, + 0.061227355152369f, 0.239746883511543f, 0.061411365866661f, + 0.240083336830139f, + 0.061595637351274f, 0.240419670939446f, 0.061780165880919f, + 0.240755841135979f, + 0.061964951455593f, 0.241091892123222f, 0.062149997800589f, + 0.241427779197693f, + 0.062335297465324f, 0.241763532161713f, 0.062520854175091f, + 0.242099151015282f, + 0.062706671655178f, 0.242434620857239f, 0.062892749905586f, + 0.242769956588745f, + 0.063079081475735f, 0.243105143308640f, 0.063265666365623f, + 0.243440181016922f, + 0.063452512025833f, 0.243775084614754f, 0.063639611005783f, + 0.244109839200974f, + 0.063826970756054f, 0.244444444775581f, 0.064014583826065f, + 0.244778916239738f, + 0.064202457666397f, 0.245113238692284f, 0.064390584826469f, + 0.245447427034378f, + 0.064578965306282f, 0.245781451463699f, 0.064767606556416f, + 0.246115356683731f, + 0.064956501126289f, 0.246449097990990f, 0.065145656466484f, + 0.246782705187798f, + 0.065335065126419f, 0.247116148471832f, 0.065524727106094f, + 0.247449472546577f, + 0.065714649856091f, 0.247782632708550f, 0.065904818475246f, + 0.248115643858910f, + 0.066095255315304f, 0.248448520898819f, 0.066285938024521f, + 0.248781248927116f, + 0.066476874053478f, 0.249113827943802f, 0.066668070852757f, + 0.249446272850037f, + 0.066859520971775f, 0.249778553843498f, 0.067051224410534f, + 0.250110685825348f, + 0.067243188619614f, 0.250442683696747f, 0.067435398697853f, + 0.250774532556534f, + 0.067627869546413f, 0.251106232404709f, 0.067820593714714f, + 0.251437783241272f, + 0.068013571202755f, 0.251769185066223f, 0.068206802010536f, + 0.252100437879562f, + 0.068400286138058f, 0.252431541681290f, 0.068594031035900f, + 0.252762526273727f, + 0.068788021802902f, 0.253093332052231f, 0.068982265889645f, + 0.253423988819122f, + 0.069176770746708f, 0.253754496574402f, 0.069371521472931f, + 0.254084855318069f, + 0.069566532969475f, 0.254415065050125f, 0.069761790335178f, + 0.254745125770569f, + 0.069957308471203f, 0.255075037479401f, 0.070153072476387f, + 0.255404800176620f, + 0.070349089801311f, 0.255734413862228f, 0.070545360445976f, + 0.256063878536224f, + 0.070741884410381f, 0.256393194198608f, 0.070938661694527f, + 0.256722360849380f, + 0.071135692298412f, 0.257051378488541f, 0.071332976222038f, + 0.257380217313766f, + 0.071530513465405f, 0.257708936929703f, 0.071728296577930f, + 0.258037507534027f, + 0.071926333010197f, 0.258365899324417f, 0.072124622762203f, + 0.258694142103195f, + 0.072323165833950f, 0.259022265672684f, 0.072521962225437f, + 0.259350210428238f, + 0.072721004486084f, 0.259678006172180f, 0.072920300066471f, + 0.260005623102188f, + 0.073119848966599f, 0.260333120822906f, 0.073319651186466f, + 0.260660469532013f, + 0.073519699275494f, 0.260987639427185f, 0.073720000684261f, + 0.261314690113068f, + 0.073920547962189f, 0.261641561985016f, 0.074121348559856f, + 0.261968284845352f, + 0.074322402477264f, 0.262294828891754f, 0.074523709714413f, + 0.262621253728867f, + 0.074725262820721f, 0.262947499752045f, 0.074927061796188f, + 0.263273626565933f, + 0.075129114091396f, 0.263599574565887f, 0.075331419706345f, + 0.263925373554230f, + 0.075533971190453f, 0.264250993728638f, 0.075736775994301f, + 0.264576494693756f, + 0.075939826667309f, 0.264901816844940f, 0.076143130660057f, + 0.265226989984512f, + 0.076346680521965f, 0.265552014112473f, 0.076550483703613f, + 0.265876859426498f, + 0.076754532754421f, 0.266201555728912f, 0.076958827674389f, + 0.266526103019714f, + 0.077163375914097f, 0.266850501298904f, 0.077368170022964f, + 0.267174720764160f, + 0.077573217451572f, 0.267498821020126f, 0.077778510749340f, + 0.267822742462158f, + 0.077984049916267f, 0.268146485090256f, 0.078189842402935f, + 0.268470078706741f, + 0.078395880758762f, 0.268793523311615f, 0.078602164983749f, + 0.269116818904877f, + 0.078808702528477f, 0.269439965486526f, 0.079015478491783f, + 0.269762933254242f, + 0.079222507774830f, 0.270085722208023f, 0.079429790377617f, + 0.270408391952515f, + 0.079637311398983f, 0.270730882883072f, 0.079845085740089f, + 0.271053224802017f, + 0.080053105950356f, 0.271375387907028f, 0.080261372029781f, + 0.271697402000427f, + 0.080469883978367f, 0.272019267082214f, 0.080678641796112f, + 0.272340953350067f, + 0.080887645483017f, 0.272662490606308f, 0.081096902489662f, + 0.272983878850937f, + 0.081306397914886f, 0.273305088281631f, 0.081516146659851f, + 0.273626148700714f, + 0.081726133823395f, 0.273947030305862f, 0.081936374306679f, + 0.274267762899399f, + 0.082146860659122f, 0.274588316679001f, 0.082357585430145f, + 0.274908751249313f, + 0.082568563520908f, 0.275228977203369f, 0.082779780030251f, + 0.275549083948135f, + 0.082991249859333f, 0.275868982076645f, 0.083202958106995f, + 0.276188760995865f, + 0.083414919674397f, 0.276508361101151f, 0.083627119660378f, + 0.276827782392502f, + 0.083839565515518f, 0.277147054672241f, 0.084052257239819f, + 0.277466177940369f, + 0.084265194833279f, 0.277785122394562f, 0.084478378295898f, + 0.278103888034821f, + 0.084691800177097f, 0.278422504663467f, 0.084905467927456f, + 0.278740972280502f, + 0.085119381546974f, 0.279059261083603f, 0.085333541035652f, + 0.279377400875092f, + 0.085547938942909f, 0.279695361852646f, 0.085762590169907f, + 0.280013144016266f, + 0.085977479815483f, 0.280330777168274f, 0.086192607879639f, + 0.280648261308670f, + 0.086407989263535f, 0.280965566635132f, 0.086623609066010f, + 0.281282693147659f, + 0.086839467287064f, 0.281599670648575f, 0.087055571377277f, + 0.281916469335556f, + 0.087271921336651f, 0.282233119010925f, 0.087488517165184f, + 0.282549589872360f, + 0.087705351412296f, 0.282865911722183f, 0.087922424077988f, + 0.283182054758072f, + 0.088139742612839f, 0.283498018980026f, 0.088357307016850f, + 0.283813834190369f, + 0.088575109839439f, 0.284129470586777f, 0.088793158531189f, + 0.284444957971573f, + 0.089011445641518f, 0.284760266542435f, 0.089229971170425f, + 0.285075396299362f, + 0.089448742568493f, 0.285390377044678f, 0.089667752385139f, + 0.285705178976059f, + 0.089887008070946f, 0.286019802093506f, 0.090106502175331f, + 0.286334276199341f, + 0.090326242148876f, 0.286648571491241f, 0.090546220541000f, + 0.286962717771530f, + 0.090766437351704f, 0.287276685237885f, 0.090986892580986f, + 0.287590473890305f, + 0.091207593679428f, 0.287904083728790f, 0.091428533196449f, + 0.288217544555664f, + 0.091649711132050f, 0.288530826568604f, 0.091871134936810f, + 0.288843959569931f, + 0.092092797160149f, 0.289156883955002f, 0.092314697802067f, + 0.289469659328461f, + 0.092536836862564f, 0.289782285690308f, 0.092759214341640f, + 0.290094703435898f, + 0.092981837689877f, 0.290406972169876f, 0.093204692006111f, + 0.290719062089920f, + 0.093427792191505f, 0.291031002998352f, 0.093651130795479f, + 0.291342735290527f, + 0.093874707818031f, 0.291654318571091f, 0.094098523259163f, + 0.291965723037720f, + 0.094322577118874f, 0.292276978492737f, 0.094546869397163f, + 0.292588025331497f, + 0.094771400094032f, 0.292898923158646f, 0.094996169209480f, + 0.293209642171860f, + 0.095221176743507f, 0.293520182371140f, 0.095446422696114f, + 0.293830573558807f, + 0.095671907067299f, 0.294140785932541f, 0.095897629857063f, + 0.294450789690018f, + 0.096123591065407f, 0.294760644435883f, 0.096349790692329f, + 0.295070350170136f, + 0.096576221287251f, 0.295379847288132f, 0.096802897751331f, + 0.295689195394516f, + 0.097029805183411f, 0.295998334884644f, 0.097256951034069f, + 0.296307325363159f, + 0.097484335303307f, 0.296616137027740f, 0.097711957991123f, + 0.296924799680710f, + 0.097939811646938f, 0.297233253717422f, 0.098167903721333f, + 0.297541528940201f, + 0.098396234214306f, 0.297849655151367f, 0.098624803125858f, + 0.298157602548599f, + 0.098853603005409f, 0.298465341329575f, 0.099082641303539f, + 0.298772931098938f, + 0.099311910569668f, 0.299080342054367f, 0.099541425704956f, + 0.299387603998184f, + 0.099771171808243f, 0.299694657325745f, 0.100001148879528f, + 0.300001531839371f, + 0.100231364369392f, 0.300308227539063f, 0.100461818277836f, + 0.300614774227142f, + 0.100692503154278f, 0.300921112298965f, 0.100923426449299f, + 0.301227301359177f, + 0.101154580712318f, 0.301533311605453f, 0.101385973393917f, + 0.301839113235474f, + 0.101617597043514f, 0.302144765853882f, 0.101849451661110f, + 0.302450239658356f, + 0.102081544697285f, 0.302755534648895f, 0.102313876152039f, + 0.303060621023178f, + 0.102546438574791f, 0.303365558385849f, 0.102779231965542f, + 0.303670316934586f, + 0.103012263774872f, 0.303974896669388f, 0.103245526552200f, + 0.304279297590256f, + 0.103479020297527f, 0.304583519697189f, 0.103712752461433f, + 0.304887533187866f, + 0.103946708142757f, 0.305191397666931f, 0.104180909693241f, + 0.305495083332062f, + 0.104415334761143f, 0.305798590183258f, 0.104649998247623f, + 0.306101888418198f, + 0.104884892702103f, 0.306405037641525f, 0.105120018124580f, + 0.306708008050919f, + 0.105355374515057f, 0.307010769844055f, 0.105590961873531f, + 0.307313382625580f, + 0.105826787650585f, 0.307615786790848f, 0.106062836945057f, + 0.307918041944504f, + 0.106299124658108f, 0.308220088481903f, 0.106535643339157f, + 0.308521956205368f, + 0.106772392988205f, 0.308823645114899f, 0.107009373605251f, + 0.309125155210495f, + 0.107246585190296f, 0.309426486492157f, 0.107484027743340f, + 0.309727638959885f, + 0.107721701264381f, 0.310028612613678f, 0.107959605753422f, + 0.310329377651215f, + 0.108197741210461f, 0.310629993677139f, 0.108436107635498f, + 0.310930401086807f, + 0.108674705028534f, 0.311230629682541f, 0.108913525938988f, + 0.311530679464340f, + 0.109152585268021f, 0.311830550432205f, 0.109391868114471f, + 0.312130242586136f, + 0.109631389379501f, 0.312429755926132f, 0.109871134161949f, + 0.312729060649872f, + 0.110111102461815f, 0.313028186559677f, 0.110351309180260f, + 0.313327133655548f, + 0.110591746866703f, 0.313625901937485f, 0.110832408070564f, + 0.313924491405487f, + 0.111073300242424f, 0.314222872257233f, 0.111314415931702f, + 0.314521104097366f, + 0.111555770039558f, 0.314819127321243f, 0.111797347664833f, + 0.315116971731186f, + 0.112039148807526f, 0.315414607524872f, 0.112281180918217f, + 0.315712094306946f, + 0.112523443996906f, 0.316009372472763f, 0.112765938043594f, + 0.316306471824646f, + 0.113008655607700f, 0.316603392362595f, 0.113251596689224f, + 0.316900104284287f, + 0.113494776189327f, 0.317196637392044f, 0.113738171756268f, + 0.317492991685867f, + 0.113981798291206f, 0.317789167165756f, 0.114225655794144f, + 0.318085134029388f, + 0.114469736814499f, 0.318380922079086f, 0.114714048802853f, + 0.318676531314850f, + 0.114958584308624f, 0.318971961736679f, 0.115203343331814f, + 0.319267183542252f, + 0.115448333323002f, 0.319562226533890f, 0.115693546831608f, + 0.319857090711594f, + 0.115938983857632f, 0.320151746273041f, 0.116184651851654f, + 0.320446223020554f, + 0.116430543363094f, 0.320740520954132f, 0.116676658391953f, + 0.321034610271454f, + 0.116923004388809f, 0.321328520774841f, 0.117169573903084f, + 0.321622252464294f, + 0.117416366934776f, 0.321915775537491f, 0.117663383483887f, + 0.322209119796753f, + 0.117910631000996f, 0.322502255439758f, 0.118158094584942f, + 0.322795242071152f, + 0.118405789136887f, 0.323088020086288f, 0.118653707206249f, + 0.323380589485168f, + 0.118901848793030f, 0.323672980070114f, 0.119150213897228f, + 0.323965191841125f, + 0.119398809969425f, 0.324257194995880f, 0.119647622108459f, + 0.324549019336700f, + 0.119896657764912f, 0.324840664863586f, 0.120145916938782f, + 0.325132101774216f, + 0.120395407080650f, 0.325423330068588f, 0.120645113289356f, + 0.325714409351349f, + 0.120895043015480f, 0.326005280017853f, 0.121145196259022f, + 0.326295942068100f, + 0.121395580470562f, 0.326586425304413f, 0.121646173298359f, + 0.326876699924469f, + 0.121896997094154f, 0.327166795730591f, 0.122148044407368f, + 0.327456712722778f, + 0.122399315237999f, 0.327746421098709f, 0.122650802135468f, + 0.328035950660706f, + 0.122902512550354f, 0.328325271606445f, 0.123154446482658f, + 0.328614413738251f, + 0.123406603932381f, 0.328903347253799f, 0.123658977448940f, + 0.329192101955414f, + 0.123911574482918f, 0.329480648040771f, 0.124164395034313f, + 0.329769015312195f, + 0.124417431652546f, 0.330057173967361f, 0.124670691788197f, + 0.330345153808594f, + 0.124924175441265f, 0.330632925033569f, 0.125177875161171f, + 0.330920487642288f, + 0.125431805849075f, 0.331207901239395f, 0.125685945153236f, + 0.331495076417923f, + 0.125940307974815f, 0.331782072782516f, 0.126194894313812f, + 0.332068890333176f, + 0.126449704170227f, 0.332355499267578f, 0.126704722642899f, + 0.332641899585724f, + 0.126959964632988f, 0.332928121089935f, 0.127215430140495f, + 0.333214133977890f, + 0.127471104264259f, 0.333499968051910f, 0.127727001905441f, + 0.333785593509674f, + 0.127983123064041f, 0.334071010351181f, 0.128239467740059f, + 0.334356248378754f, + 0.128496021032333f, 0.334641307592392f, 0.128752797842026f, + 0.334926128387451f, + 0.129009798169136f, 0.335210770368576f, 0.129267007112503f, + 0.335495233535767f, + 0.129524439573288f, 0.335779488086700f, 0.129782080650330f, + 0.336063534021378f, + 0.130039945244789f, 0.336347371339798f, 0.130298033356667f, + 0.336631029844284f, + 0.130556344985962f, 0.336914509534836f, 0.130814850330353f, + 0.337197750806808f, + 0.131073594093323f, 0.337480813264847f, 0.131332546472549f, + 0.337763696908951f, + 0.131591722369194f, 0.338046342134476f, 0.131851106882095f, + 0.338328808546066f, + 0.132110700011253f, 0.338611096143723f, 0.132370531558990f, + 0.338893145322800f, + 0.132630556821823f, 0.339175015687943f, 0.132890805602074f, + 0.339456677436829f, + 0.133151277899742f, 0.339738160371780f, 0.133411958813667f, + 0.340019434690475f, + 0.133672863245010f, 0.340300500392914f, 0.133933976292610f, + 0.340581357479095f, + 0.134195312857628f, 0.340862035751343f, 0.134456858038902f, + 0.341142505407333f, + 0.134718611836433f, 0.341422766447067f, 0.134980589151382f, + 0.341702848672867f, + 0.135242775082588f, 0.341982692480087f, 0.135505184531212f, + 0.342262357473373f, + 0.135767802596092f, 0.342541843652725f, 0.136030644178391f, + 0.342821091413498f, + 0.136293679475784f, 0.343100160360336f, 0.136556953191757f, + 0.343379020690918f, + 0.136820420622826f, 0.343657672405243f, 0.137084111571312f, + 0.343936115503311f, + 0.137348011136055f, 0.344214379787445f, 0.137612134218216f, + 0.344492435455322f, + 0.137876465916634f, 0.344770282506943f, 0.138141006231308f, + 0.345047920942307f, + 0.138405755162239f, 0.345325350761414f, 0.138670727610588f, + 0.345602601766586f, + 0.138935908675194f, 0.345879614353180f, 0.139201298356056f, + 0.346156448125839f, + 0.139466896653175f, 0.346433073282242f, 0.139732718467712f, + 0.346709519624710f, + 0.139998748898506f, 0.346985727548599f, 0.140264987945557f, + 0.347261756658554f, + 0.140531435608864f, 0.347537547349930f, 0.140798106789589f, + 0.347813159227371f, + 0.141064971685410f, 0.348088562488556f, 0.141332060098648f, + 0.348363757133484f, + 0.141599357128143f, 0.348638743162155f, 0.141866862773895f, + 0.348913550376892f, + 0.142134591937065f, 0.349188119173050f, 0.142402514815331f, + 0.349462509155273f, + 0.142670661211014f, 0.349736660718918f, 0.142939001321793f, + 0.350010633468628f, + 0.143207564949989f, 0.350284397602081f, 0.143476337194443f, + 0.350557953119278f, + 0.143745318055153f, 0.350831300020218f, 0.144014507532120f, + 0.351104438304901f, + 0.144283905625343f, 0.351377367973328f, 0.144553512334824f, + 0.351650089025497f, + 0.144823327660561f, 0.351922631263733f, 0.145093351602554f, + 0.352194935083389f, + 0.145363584160805f, 0.352467030286789f, 0.145634025335312f, + 0.352738946676254f, + 0.145904675126076f, 0.353010624647141f, 0.146175548434258f, + 0.353282123804092f, + 0.146446615457535f, 0.353553384542465f, 0.146717891097069f, + 0.353824466466904f, + 0.146989375352860f, 0.354095309972763f, 0.147261068224907f, + 0.354365974664688f, + 0.147532954812050f, 0.354636400938034f, 0.147805064916611f, + 0.354906648397446f, + 0.148077383637428f, 0.355176687240601f, 0.148349896073341f, + 0.355446487665176f, + 0.148622632026672f, 0.355716109275818f, 0.148895561695099f, + 0.355985492467880f, + 0.149168699979782f, 0.356254696846008f, 0.149442046880722f, + 0.356523662805557f, + 0.149715602397919f, 0.356792420148849f, 0.149989366531372f, + 0.357060998678207f, + 0.150263324379921f, 0.357329338788986f, 0.150537505745888f, + 0.357597470283508f, + 0.150811880826950f, 0.357865422964096f, 0.151086464524269f, + 0.358133137226105f, + 0.151361241936684f, 0.358400642871857f, 0.151636242866516f, + 0.358667939901352f, + 0.151911437511444f, 0.358935028314590f, 0.152186840772629f, + 0.359201908111572f, + 0.152462437748909f, 0.359468549489975f, 0.152738258242607f, + 0.359735012054443f, + 0.153014272451401f, 0.360001266002655f, 0.153290495276451f, + 0.360267281532288f, + 0.153566911816597f, 0.360533088445663f, 0.153843536973000f, + 0.360798716545105f, + 0.154120370745659f, 0.361064106225967f, 0.154397398233414f, + 0.361329287290573f, + 0.154674649238586f, 0.361594229936600f, 0.154952079057693f, + 0.361858993768692f, + 0.155229732394218f, 0.362123548984528f, 0.155507579445839f, + 0.362387865781784f, + 0.155785620212555f, 0.362651973962784f, 0.156063869595528f, + 0.362915903329849f, + 0.156342327594757f, 0.363179564476013f, 0.156620979309082f, + 0.363443046808243f, + 0.156899839639664f, 0.363706320524216f, 0.157178908586502f, + 0.363969355821610f, + 0.157458171248436f, 0.364232182502747f, 0.157737627625465f, + 0.364494800567627f, + 0.158017292618752f, 0.364757210016251f, 0.158297166228294f, + 0.365019410848618f, + 0.158577233552933f, 0.365281373262405f, 0.158857494592667f, + 0.365543156862259f, + 0.159137964248657f, 0.365804702043533f, 0.159418627619743f, + 0.366066008806229f, + 0.159699499607086f, 0.366327136754990f, 0.159980565309525f, + 0.366588026285172f, + 0.160261839628220f, 0.366848707199097f, 0.160543307662010f, + 0.367109179496765f, + 0.160824984312058f, 0.367369443178177f, 0.161106839776039f, + 0.367629468441010f, + 0.161388918757439f, 0.367889285087585f, 0.161671176552773f, + 0.368148893117905f, + 0.161953642964363f, 0.368408292531967f, 0.162236317992210f, + 0.368667453527451f, + 0.162519171833992f, 0.368926405906677f, 0.162802234292030f, + 0.369185149669647f, + 0.163085505366325f, 0.369443655014038f, 0.163368955254555f, + 0.369701951742172f, + 0.163652613759041f, 0.369960039854050f, 0.163936465978622f, + 0.370217919349670f, + 0.164220526814461f, 0.370475560426712f, 0.164504766464233f, + 0.370732992887497f, + 0.164789214730263f, 0.370990216732025f, 0.165073871612549f, + 0.371247202157974f, + 0.165358707308769f, 0.371503978967667f, 0.165643751621246f, + 0.371760547161102f, + 0.165928974747658f, 0.372016876935959f, 0.166214406490326f, + 0.372272998094559f, + 0.166500031948090f, 0.372528880834579f, 0.166785866022110f, + 0.372784584760666f, + 0.167071878910065f, 0.373040050268173f, 0.167358100414276f, + 0.373295277357101f, + 0.167644515633583f, 0.373550295829773f, 0.167931124567986f, + 0.373805105686188f, + 0.168217927217484f, 0.374059677124023f, 0.168504923582077f, + 0.374314039945602f, + 0.168792113661766f, 0.374568194150925f, 0.169079497456551f, + 0.374822109937668f, + 0.169367074966431f, 0.375075817108154f, 0.169654861092567f, + 0.375329315662384f, + 0.169942826032639f, 0.375582575798035f, 0.170230999588966f, + 0.375835597515106f, + 0.170519351959229f, 0.376088410615921f, 0.170807912945747f, + 0.376341015100479f, + 0.171096652746201f, 0.376593410968781f, 0.171385586261749f, + 0.376845568418503f, + 0.171674728393555f, 0.377097487449646f, 0.171964049339294f, + 0.377349197864532f, + 0.172253578901291f, 0.377600699663162f, 0.172543287277222f, + 0.377851963043213f, + 0.172833189368248f, 0.378102988004684f, 0.173123285174370f, + 0.378353834152222f, + 0.173413574695587f, 0.378604412078857f, 0.173704057931900f, + 0.378854811191559f, + 0.173994734883308f, 0.379104942083359f, 0.174285605549812f, + 0.379354894161224f, + 0.174576655030251f, 0.379604607820511f, 0.174867913126946f, + 0.379854083061218f, + 0.175159350037575f, 0.380103349685669f, 0.175450980663300f, + 0.380352377891541f, + 0.175742805004120f, 0.380601197481155f, 0.176034808158875f, + 0.380849778652191f, + 0.176327019929886f, 0.381098151206970f, 0.176619410514832f, + 0.381346285343170f, + 0.176911994814873f, 0.381594210863113f, 0.177204772830009f, + 0.381841897964478f, + 0.177497729659081f, 0.382089376449585f, 0.177790880203247f, + 0.382336616516113f, + 0.178084224462509f, 0.382583618164063f, 0.178377762436867f, + 0.382830440998077f, + 0.178671479225159f, 0.383076995611191f, 0.178965389728546f, + 0.383323341608047f, + 0.179259493947029f, 0.383569449186325f, 0.179553776979446f, + 0.383815348148346f, + 0.179848253726959f, 0.384061008691788f, 0.180142924189568f, + 0.384306460618973f, + 0.180437773466110f, 0.384551674127579f, 0.180732816457748f, + 0.384796649217606f, + 0.181028053164482f, 0.385041415691376f, 0.181323468685150f, + 0.385285943746567f, + 0.181619063019753f, 0.385530263185501f, 0.181914865970612f, + 0.385774344205856f, + 0.182210832834244f, 0.386018186807632f, 0.182507008314133f, + 0.386261820793152f, + 0.182803362607956f, 0.386505216360092f, 0.183099895715714f, + 0.386748403310776f, + 0.183396622538567f, 0.386991351842880f, 0.183693528175354f, + 0.387234061956406f, + 0.183990627527237f, 0.387476563453674f, 0.184287920594215f, + 0.387718826532364f, + 0.184585392475128f, 0.387960851192474f, 0.184883043169975f, + 0.388202667236328f, + 0.185180887579918f, 0.388444244861603f, 0.185478910803795f, + 0.388685584068298f, + 0.185777112841606f, 0.388926714658737f, 0.186075508594513f, + 0.389167606830597f, + 0.186374098062515f, 0.389408260583878f, 0.186672851443291f, + 0.389648675918579f, + 0.186971798539162f, 0.389888882637024f, 0.187270939350128f, + 0.390128880739212f, + 0.187570258975029f, 0.390368610620499f, 0.187869757413864f, + 0.390608131885529f, + 0.188169434666634f, 0.390847414731979f, 0.188469305634499f, + 0.391086459159851f, + 0.188769355416298f, 0.391325294971466f, 0.189069598913193f, + 0.391563892364502f, + 0.189370006322861f, 0.391802251338959f, 0.189670607447624f, + 0.392040401697159f, + 0.189971387386322f, 0.392278283834457f, 0.190272361040115f, + 0.392515957355499f, + 0.190573498606682f, 0.392753422260284f, 0.190874829888344f, + 0.392990618944168f, + 0.191176339983940f, 0.393227607011795f, 0.191478043794632f, + 0.393464356660843f, + 0.191779911518097f, 0.393700867891312f, 0.192081972956657f, + 0.393937170505524f, + 0.192384198307991f, 0.394173204898834f, 0.192686617374420f, + 0.394409030675888f, + 0.192989215254784f, 0.394644618034363f, 0.193292006850243f, + 0.394879996776581f, + 0.193594962358475f, 0.395115107297897f, 0.193898096680641f, + 0.395350009202957f, + 0.194201424717903f, 0.395584672689438f, 0.194504916667938f, + 0.395819097757339f, + 0.194808602333069f, 0.396053284406662f, 0.195112451910973f, + 0.396287262439728f, + 0.195416495203972f, 0.396520972251892f, 0.195720717310905f, + 0.396754473447800f, + 0.196025103330612f, 0.396987736225128f, 0.196329683065414f, + 0.397220760583878f, + 0.196634441614151f, 0.397453576326370f, 0.196939364075661f, + 0.397686123847961f, + 0.197244480252266f, 0.397918462753296f, 0.197549775242805f, + 0.398150533437729f, + 0.197855234146118f, 0.398382395505905f, 0.198160871863365f, + 0.398614019155502f, + 0.198466703295708f, 0.398845434188843f, 0.198772698640823f, + 0.399076581001282f, + 0.199078872799873f, 0.399307489395142f, 0.199385225772858f, + 0.399538189172745f, + 0.199691757559776f, 0.399768620729446f, 0.199998468160629f, + 0.399998843669891f, + 0.200305357575417f, 0.400228828191757f, 0.200612410902977f, + 0.400458574295044f, + 0.200919643044472f, 0.400688081979752f, 0.201227053999901f, + 0.400917351245880f, + 0.201534643769264f, 0.401146411895752f, 0.201842412352562f, + 0.401375204324722f, + 0.202150344848633f, 0.401603758335114f, 0.202458456158638f, + 0.401832103729248f, + 0.202766746282578f, 0.402060180902481f, 0.203075215220451f, + 0.402288049459457f, + 0.203383848071098f, 0.402515679597855f, 0.203692659735680f, + 0.402743041515350f, + 0.204001650214195f, 0.402970194816589f, 0.204310819506645f, + 0.403197109699249f, + 0.204620152711868f, 0.403423786163330f, 0.204929664731026f, + 0.403650224208832f, + 0.205239340662956f, 0.403876423835754f, 0.205549195408821f, + 0.404102355241776f, + 0.205859228968620f, 0.404328078031540f, 0.206169426441193f, + 0.404553562402725f, + 0.206479802727699f, 0.404778808355331f, 0.206790357828140f, + 0.405003815889359f, + 0.207101076841354f, 0.405228585004807f, 0.207411959767342f, + 0.405453115701675f, + 0.207723021507263f, 0.405677437782288f, 0.208034262061119f, + 0.405901491641998f, + 0.208345666527748f, 0.406125307083130f, 0.208657249808311f, + 0.406348884105682f, + 0.208969011902809f, 0.406572192907333f, 0.209280923008919f, + 0.406795293092728f, + 0.209593027830124f, 0.407018154859543f, 0.209905281662941f, + 0.407240778207779f, + 0.210217714309692f, 0.407463163137436f, 0.210530325770378f, + 0.407685309648514f, + 0.210843101143837f, 0.407907217741013f, 0.211156040430069f, + 0.408128857612610f, + 0.211469158530235f, 0.408350288867950f, 0.211782455444336f, + 0.408571451902390f, + 0.212095901370049f, 0.408792406320572f, 0.212409526109695f, + 0.409013092517853f, + 0.212723329663277f, 0.409233570098877f, 0.213037282228470f, + 0.409453779459000f, + 0.213351413607597f, 0.409673750400543f, 0.213665723800659f, + 0.409893482923508f, + 0.213980183005333f, 0.410112977027893f, 0.214294821023941f, + 0.410332232713699f, + 0.214609622955322f, 0.410551249980927f, 0.214924603700638f, + 0.410770028829575f, + 0.215239733457565f, 0.410988569259644f, 0.215555042028427f, + 0.411206841468811f, + 0.215870529413223f, 0.411424905061722f, 0.216186165809631f, + 0.411642700433731f, + 0.216501981019974f, 0.411860257387161f, 0.216817945241928f, + 0.412077575922012f, + 0.217134088277817f, 0.412294656038284f, 0.217450410127640f, + 0.412511497735977f, + 0.217766880989075f, 0.412728071212769f, 0.218083515763283f, + 0.412944436073303f, + 0.218400329351425f, 0.413160532712936f, 0.218717306852341f, + 0.413376390933990f, + 0.219034433364868f, 0.413592010736465f, 0.219351738691330f, + 0.413807392120361f, + 0.219669207930565f, 0.414022535085678f, 0.219986841082573f, + 0.414237409830093f, + 0.220304638147354f, 0.414452046155930f, 0.220622614026070f, + 0.414666473865509f, + 0.220940738916397f, 0.414880603551865f, 0.221259027719498f, + 0.415094524621964f, + 0.221577480435371f, 0.415308207273483f, 0.221896097064018f, + 0.415521621704102f, + 0.222214877605438f, 0.415734797716141f, 0.222533836960793f, + 0.415947735309601f, + 0.222852945327759f, 0.416160434484482f, 0.223172217607498f, + 0.416372895240784f, + 0.223491653800011f, 0.416585087776184f, 0.223811239004135f, + 0.416797041893005f, + 0.224131003022194f, 0.417008757591248f, 0.224450930953026f, + 0.417220205068588f, + 0.224771007895470f, 0.417431443929672f, 0.225091263651848f, + 0.417642414569855f, + 0.225411668419838f, 0.417853146791458f, 0.225732237100601f, + 0.418063640594482f, + 0.226052969694138f, 0.418273866176605f, 0.226373866200447f, + 0.418483853340149f, + 0.226694911718369f, 0.418693602085114f, 0.227016136050224f, + 0.418903112411499f, + 0.227337509393692f, 0.419112354516983f, 0.227659046649933f, + 0.419321358203888f, + 0.227980732917786f, 0.419530123472214f, 0.228302597999573f, + 0.419738620519638f, + 0.228624612092972f, 0.419946908950806f, 0.228946775197983f, + 0.420154929161072f, + 0.229269117116928f, 0.420362681150436f, 0.229591608047485f, + 0.420570224523544f, + 0.229914262890816f, 0.420777499675751f, 0.230237081646919f, + 0.420984506607056f, + 0.230560049414635f, 0.421191304922104f, 0.230883181095123f, + 0.421397835016251f, + 0.231206461787224f, 0.421604126691818f, 0.231529906392097f, + 0.421810150146484f, + 0.231853514909744f, 0.422015935182571f, 0.232177272439003f, + 0.422221481800079f, + 0.232501193881035f, 0.422426789999008f, 0.232825264334679f, + 0.422631829977036f, + 0.233149498701096f, 0.422836631536484f, 0.233473882079124f, + 0.423041164875031f, + 0.233798429369926f, 0.423245459794998f, 0.234123140573502f, + 0.423449516296387f, + 0.234448000788689f, 0.423653304576874f, 0.234773010015488f, + 0.423856884241104f, + 0.235098183155060f, 0.424060165882111f, 0.235423520207405f, + 0.424263238906860f, + 0.235749006271362f, 0.424466013908386f, 0.236074641346931f, + 0.424668580293655f, + 0.236400425434113f, 0.424870878458023f, 0.236726388335228f, + 0.425072938203812f, + 0.237052485346794f, 0.425274729728699f, 0.237378746271133f, + 0.425476282835007f, + 0.237705156207085f, 0.425677597522736f, 0.238031730055809f, + 0.425878643989563f, + 0.238358452916145f, 0.426079452037811f, 0.238685324788094f, + 0.426279991865158f, + 0.239012360572815f, 0.426480293273926f, 0.239339530467987f, + 0.426680356264114f, + 0.239666879177094f, 0.426880151033401f, 0.239994361996651f, + 0.427079707384110f, + 0.240322008728981f, 0.427278995513916f, 0.240649804472923f, + 0.427478045225143f, + 0.240977749228477f, 0.427676826715469f, 0.241305842995644f, + 0.427875369787216f, + 0.241634100675583f, 0.428073674440384f, 0.241962507367134f, + 0.428271710872650f, + 0.242291063070297f, 0.428469479084015f, 0.242619767785072f, + 0.428667008876801f, + 0.242948621511459f, 0.428864300251007f, 0.243277639150620f, + 0.429061323404312f, + 0.243606805801392f, 0.429258108139038f, 0.243936106562614f, + 0.429454624652863f, + 0.244265571236610f, 0.429650902748108f, 0.244595184922218f, + 0.429846942424774f, + 0.244924947619438f, 0.430042684078217f, 0.245254859328270f, + 0.430238217115402f, + 0.245584934949875f, 0.430433481931686f, 0.245915144681931f, + 0.430628478527069f, + 0.246245503425598f, 0.430823236703873f, 0.246576011180878f, + 0.431017726659775f, + 0.246906682848930f, 0.431211978197098f, 0.247237488627434f, + 0.431405961513519f, + 0.247568443417549f, 0.431599706411362f, 0.247899547219276f, + 0.431793183088303f, + 0.248230814933777f, 0.431986421346664f, 0.248562216758728f, + 0.432179391384125f, + 0.248893767595291f, 0.432372123003006f, 0.249225467443466f, + 0.432564586400986f, + 0.249557301402092f, 0.432756811380386f, 0.249889299273491f, + 0.432948768138886f, + 0.250221431255341f, 0.433140486478806f, 0.250553727149963f, + 0.433331936597824f, + 0.250886172056198f, 0.433523118495941f, 0.251218736171722f, + 0.433714061975479f, + 0.251551479101181f, 0.433904737234116f, 0.251884341239929f, + 0.434095174074173f, + 0.252217382192612f, 0.434285342693329f, 0.252550542354584f, + 0.434475272893906f, + 0.252883851528168f, 0.434664934873581f, 0.253217309713364f, + 0.434854328632355f, + 0.253550916910172f, 0.435043483972549f, 0.253884643316269f, + 0.435232400894165f, + 0.254218548536301f, 0.435421019792557f, 0.254552572965622f, + 0.435609430074692f, + 0.254886746406555f, 0.435797542333603f, 0.255221068859100f, + 0.435985416173935f, + 0.255555540323257f, 0.436173021793365f, 0.255890160799026f, + 0.436360388994217f, + 0.256224930286407f, 0.436547487974167f, 0.256559818983078f, + 0.436734348535538f, + 0.256894856691360f, 0.436920911073685f, 0.257230043411255f, + 0.437107264995575f, + 0.257565379142761f, 0.437293320894241f, 0.257900834083557f, + 0.437479138374329f, + 0.258236467838287f, 0.437664687633514f, 0.258572220802307f, + 0.437849998474121f, + 0.258908122777939f, 0.438035041093826f, 0.259244143962860f, + 0.438219845294952f, + 0.259580343961716f, 0.438404351472855f, 0.259916663169861f, + 0.438588619232178f, + 0.260253131389618f, 0.438772648572922f, 0.260589718818665f, + 0.438956409692764f, + 0.260926485061646f, 0.439139902591705f, 0.261263370513916f, + 0.439323127269745f, + 0.261600375175476f, 0.439506113529205f, 0.261937558650970f, + 0.439688831567764f, + 0.262274861335754f, 0.439871311187744f, 0.262612313032150f, + 0.440053492784500f, + 0.262949883937836f, 0.440235435962677f, 0.263287603855133f, + 0.440417140722275f, + 0.263625472784042f, 0.440598547458649f, 0.263963490724564f, + 0.440779715776443f, + 0.264301627874374f, 0.440960645675659f, 0.264639914035797f, + 0.441141277551651f, + 0.264978319406509f, 0.441321671009064f, 0.265316903591156f, + 0.441501796245575f, + 0.265655577182770f, 0.441681683063507f, 0.265994429588318f, + 0.441861271858215f, + 0.266333401203156f, 0.442040622234344f, 0.266672492027283f, + 0.442219734191895f, + 0.267011761665344f, 0.442398548126221f, 0.267351150512695f, + 0.442577123641968f, + 0.267690658569336f, 0.442755430936813f, 0.268030315637589f, + 0.442933470010757f, + 0.268370121717453f, 0.443111270666122f, 0.268710047006607f, + 0.443288803100586f, + 0.269050091505051f, 0.443466067314148f, 0.269390314817429f, + 0.443643063306808f, + 0.269730657339096f, 0.443819820880890f, 0.270071119070053f, + 0.443996280431747f, + 0.270411729812622f, 0.444172531366348f, 0.270752459764481f, + 0.444348484277725f, + 0.271093338727951f, 0.444524168968201f, 0.271434366703033f, + 0.444699615240097f, + 0.271775513887405f, 0.444874793291092f, 0.272116780281067f, + 0.445049703121185f, + 0.272458195686340f, 0.445224374532700f, 0.272799760103226f, + 0.445398747920990f, + 0.273141443729401f, 0.445572882890701f, 0.273483246564865f, + 0.445746749639511f, + 0.273825198411942f, 0.445920348167419f, 0.274167299270630f, + 0.446093708276749f, + 0.274509519338608f, 0.446266770362854f, 0.274851858615875f, + 0.446439594030380f, + 0.275194346904755f, 0.446612149477005f, 0.275536954402924f, + 0.446784436702728f, + 0.275879681110382f, 0.446956485509872f, 0.276222556829453f, + 0.447128236293793f, + 0.276565581560135f, 0.447299748659134f, 0.276908725500107f, + 0.447470992803574f, + 0.277251988649368f, 0.447641968727112f, 0.277595400810242f, + 0.447812676429749f, + 0.277938932180405f, 0.447983115911484f, 0.278282582759857f, + 0.448153316974640f, + 0.278626382350922f, 0.448323249816895f, 0.278970301151276f, + 0.448492884635925f, + 0.279314368963242f, 0.448662281036377f, 0.279658555984497f, + 0.448831409215927f, + 0.280002862215042f, 0.449000298976898f, 0.280347317457199f, + 0.449168890714645f, + 0.280691891908646f, 0.449337244033813f, 0.281036585569382f, + 0.449505299329758f, + 0.281381398439407f, 0.449673116207123f, 0.281726360321045f, + 0.449840664863586f, + 0.282071471214294f, 0.450007945299149f, 0.282416671514511f, + 0.450174957513809f, + 0.282762020826340f, 0.450341701507568f, 0.283107489347458f, + 0.450508207082748f, + 0.283453077077866f, 0.450674414634705f, 0.283798813819885f, + 0.450840383768082f, + 0.284144669771194f, 0.451006084680557f, 0.284490644931793f, + 0.451171487569809f, + 0.284836769104004f, 0.451336652040482f, 0.285182982683182f, + 0.451501548290253f, + 0.285529345273972f, 0.451666176319122f, 0.285875827074051f, + 0.451830536127090f, + 0.286222457885742f, 0.451994657516479f, 0.286569178104401f, + 0.452158480882645f, + 0.286916047334671f, 0.452322036027908f, 0.287263035774231f, + 0.452485352754593f, + 0.287610173225403f, 0.452648371458054f, 0.287957400083542f, + 0.452811151742935f, + 0.288304775953293f, 0.452973634004593f, 0.288652241230011f, + 0.453135877847672f, + 0.288999855518341f, 0.453297853469849f, 0.289347589015961f, + 0.453459560871124f, + 0.289695471525192f, 0.453621000051498f, 0.290043443441391f, + 0.453782171010971f, + 0.290391564369202f, 0.453943043947220f, 0.290739774703979f, + 0.454103678464890f, + 0.291088134050369f, 0.454264044761658f, 0.291436612606049f, + 0.454424172639847f, + 0.291785210371017f, 0.454584002494812f, 0.292133957147598f, + 0.454743564128876f, + 0.292482793331146f, 0.454902857542038f, 0.292831748723984f, + 0.455061882734299f, + 0.293180853128433f, 0.455220639705658f, 0.293530046939850f, + 0.455379128456116f, + 0.293879389762878f, 0.455537378787994f, 0.294228851795197f, + 0.455695331096649f, + 0.294578403234482f, 0.455853015184402f, 0.294928103685379f, + 0.456010431051254f, + 0.295277923345566f, 0.456167578697205f, 0.295627862215042f, + 0.456324487924576f, + 0.295977920293808f, 0.456481099128723f, 0.296328097581863f, + 0.456637442111969f, + 0.296678394079208f, 0.456793516874313f, 0.297028809785843f, + 0.456949323415756f, + 0.297379344701767f, 0.457104891538620f, 0.297729998826981f, + 0.457260161638260f, + 0.298080772161484f, 0.457415163516998f, 0.298431664705276f, + 0.457569897174835f, + 0.298782676458359f, 0.457724362611771f, 0.299133807420731f, + 0.457878559827805f, + 0.299485057592392f, 0.458032488822937f, 0.299836426973343f, + 0.458186149597168f, + 0.300187885761261f, 0.458339542150497f, 0.300539493560791f, + 0.458492636680603f, + 0.300891220569611f, 0.458645492792130f, 0.301243066787720f, + 0.458798080682755f, + 0.301595002412796f, 0.458950400352478f, 0.301947087049484f, + 0.459102421998978f, + 0.302299261093140f, 0.459254205226898f, 0.302651554346085f, + 0.459405690431595f, + 0.303003966808319f, 0.459556937217712f, 0.303356528282166f, + 0.459707885980606f, + 0.303709149360657f, 0.459858566522598f, 0.304061919450760f, + 0.460008978843689f, + 0.304414808750153f, 0.460159152746201f, 0.304767817258835f, + 0.460309028625488f, + 0.305120915174484f, 0.460458606481552f, 0.305474132299423f, + 0.460607945919037f, + 0.305827468633652f, 0.460757017135620f, 0.306180924177170f, + 0.460905820131302f, + 0.306534498929977f, 0.461054325103760f, 0.306888192892075f, + 0.461202591657639f, + 0.307241976261139f, 0.461350560188293f, 0.307595878839493f, + 0.461498260498047f, + 0.307949900627136f, 0.461645722389221f, 0.308304041624069f, + 0.461792886257172f, + 0.308658272027969f, 0.461939752101898f, 0.309012651443481f, + 0.462086379528046f, + 0.309367120265961f, 0.462232738733292f, 0.309721708297729f, + 0.462378799915314f, + 0.310076385736465f, 0.462524622678757f, 0.310431212186813f, + 0.462670147418976f, + 0.310786128044128f, 0.462815403938293f, 0.311141163110733f, + 0.462960392236710f, + 0.311496287584305f, 0.463105112314224f, 0.311851561069489f, + 0.463249564170837f, + 0.312206923961639f, 0.463393747806549f, 0.312562376260757f, + 0.463537633419037f, + 0.312917977571487f, 0.463681250810623f, 0.313273668289185f, + 0.463824629783630f, + 0.313629478216171f, 0.463967710733414f, 0.313985377550125f, + 0.464110493659973f, + 0.314341396093369f, 0.464253038167953f, 0.314697533845901f, + 0.464395314455032f, + 0.315053790807724f, 0.464537292718887f, 0.315410137176514f, + 0.464679002761841f, + 0.315766572952271f, 0.464820444583893f, 0.316123157739639f, + 0.464961618185043f, + 0.316479831933975f, 0.465102523565292f, 0.316836595535278f, + 0.465243130922318f, + 0.317193508148193f, 0.465383470058441f, 0.317550510168076f, + 0.465523540973663f, + 0.317907601594925f, 0.465663343667984f, 0.318264812231064f, + 0.465802878141403f, + 0.318622142076492f, 0.465942144393921f, 0.318979561328888f, + 0.466081112623215f, + 0.319337099790573f, 0.466219812631607f, 0.319694727659225f, + 0.466358244419098f, + 0.320052474737167f, 0.466496407985687f, 0.320410341024399f, + 0.466634273529053f, + 0.320768296718597f, 0.466771900653839f, 0.321126341819763f, + 0.466909229755402f, + 0.321484506130219f, 0.467046260833740f, 0.321842789649963f, + 0.467183053493500f, + 0.322201162576675f, 0.467319577932358f, 0.322559654712677f, + 0.467455804347992f, + 0.322918236255646f, 0.467591762542725f, 0.323276937007904f, + 0.467727422714233f, + 0.323635727167130f, 0.467862844467163f, 0.323994606733322f, + 0.467997968196869f, + 0.324353635311127f, 0.468132823705673f, 0.324712723493576f, + 0.468267410993576f, + 0.325071930885315f, 0.468401730060577f, 0.325431257486343f, + 0.468535751104355f, + 0.325790673494339f, 0.468669503927231f, 0.326150178909302f, + 0.468802988529205f, + 0.326509803533554f, 0.468936175107956f, 0.326869517564774f, + 0.469069123268127f, + 0.327229350805283f, 0.469201773405075f, 0.327589273452759f, + 0.469334155321121f, + 0.327949285507202f, 0.469466239213943f, 0.328309416770935f, + 0.469598054885864f, + 0.328669637441635f, 0.469729602336884f, 0.329029977321625f, + 0.469860881567001f, + 0.329390406608582f, 0.469991862773895f, 0.329750925302505f, + 0.470122605562210f, + 0.330111563205719f, 0.470253020524979f, 0.330472290515900f, + 0.470383197069168f, + 0.330833107233047f, 0.470513075590134f, 0.331194043159485f, + 0.470642685890198f, + 0.331555068492889f, 0.470772027969360f, 0.331916213035584f, + 0.470901101827621f, + 0.332277417182922f, 0.471029877662659f, 0.332638740539551f, + 0.471158385276794f, + 0.333000183105469f, 0.471286594867706f, 0.333361685276031f, + 0.471414536237717f, + 0.333723306655884f, 0.471542209386826f, 0.334085017442703f, + 0.471669614315033f, + 0.334446847438812f, 0.471796721220016f, 0.334808766841888f, + 0.471923559904099f, + 0.335170775651932f, 0.472050130367279f, 0.335532873868942f, + 0.472176402807236f, + 0.335895091295242f, 0.472302407026291f, 0.336257368326187f, + 0.472428143024445f, + 0.336619764566422f, 0.472553610801697f, 0.336982280015945f, + 0.472678780555725f, + 0.337344855070114f, 0.472803652286530f, 0.337707549333572f, + 0.472928285598755f, + 0.338070303201675f, 0.473052620887756f, 0.338433176279068f, + 0.473176687955856f, + 0.338796168565750f, 0.473300457000732f, 0.339159220457077f, + 0.473423957824707f, + 0.339522391557693f, 0.473547190427780f, 0.339885622262955f, + 0.473670125007629f, + 0.340248972177505f, 0.473792791366577f, 0.340612411499023f, + 0.473915189504623f, + 0.340975970029831f, 0.474037289619446f, 0.341339588165283f, + 0.474159121513367f, + 0.341703325510025f, 0.474280685186386f, 0.342067122459412f, + 0.474401950836182f, + 0.342431038618088f, 0.474522948265076f, 0.342795044183731f, + 0.474643647670746f, + 0.343159139156342f, 0.474764078855515f, 0.343523323535919f, + 0.474884241819382f, + 0.343887597322464f, 0.475004136562347f, 0.344251960515976f, + 0.475123733282089f, + 0.344616413116455f, 0.475243031978607f, 0.344980984926224f, + 0.475362062454224f, + 0.345345616340637f, 0.475480824708939f, 0.345710366964340f, + 0.475599318742752f, + 0.346075177192688f, 0.475717514753342f, 0.346440106630325f, + 0.475835442543030f, + 0.346805095672607f, 0.475953072309494f, 0.347170203924179f, + 0.476070433855057f, + 0.347535371780396f, 0.476187497377396f, 0.347900658845901f, + 0.476304292678833f, + 0.348266035318375f, 0.476420819759369f, 0.348631471395493f, + 0.476537048816681f, + 0.348997026681900f, 0.476653009653091f, 0.349362671375275f, + 0.476768702268600f, + 0.349728375673294f, 0.476884096860886f, 0.350094199180603f, + 0.476999223232269f, + 0.350460082292557f, 0.477114051580429f, 0.350826084613800f, + 0.477228611707687f, + 0.351192146539688f, 0.477342873811722f, 0.351558297872543f, + 0.477456867694855f, + 0.351924568414688f, 0.477570593357086f, 0.352290898561478f, + 0.477684020996094f, + 0.352657318115234f, 0.477797180414200f, 0.353023827075958f, + 0.477910041809082f, + 0.353390425443649f, 0.478022634983063f, 0.353757113218308f, + 0.478134930133820f, + 0.354123860597610f, 0.478246957063675f, 0.354490727186203f, + 0.478358715772629f, + 0.354857653379440f, 0.478470176458359f, 0.355224698781967f, + 0.478581339120865f, + 0.355591803789139f, 0.478692263364792f, 0.355958998203278f, + 0.478802859783173f, + 0.356326282024384f, 0.478913217782974f, 0.356693625450134f, + 0.479023247957230f, + 0.357061088085175f, 0.479133039712906f, 0.357428610324860f, + 0.479242533445358f, + 0.357796221971512f, 0.479351729154587f, 0.358163923025131f, + 0.479460656642914f, + 0.358531713485718f, 0.479569315910339f, 0.358899593353271f, + 0.479677677154541f, + 0.359267532825470f, 0.479785770177841f, 0.359635561704636f, + 0.479893565177917f, + 0.360003679990768f, 0.480001062154770f, 0.360371887683868f, + 0.480108320713043f, + 0.360740154981613f, 0.480215251445770f, 0.361108511686325f, + 0.480321943759918f, + 0.361476957798004f, 0.480428308248520f, 0.361845493316650f, + 0.480534434318542f, + 0.362214088439941f, 0.480640232563019f, 0.362582772970200f, + 0.480745792388916f, + 0.362951546907425f, 0.480851024389267f, 0.363320380449295f, + 0.480956017971039f, + 0.363689333200455f, 0.481060713529587f, 0.364058345556259f, + 0.481165111064911f, + 0.364427417516708f, 0.481269240379334f, 0.364796578884125f, + 0.481373071670532f, + 0.365165829658508f, 0.481476634740829f, 0.365535169839859f, + 0.481579899787903f, + 0.365904569625854f, 0.481682896614075f, 0.366274058818817f, + 0.481785595417023f, + 0.366643607616425f, 0.481888025999069f, 0.367013275623322f, + 0.481990188360214f, + 0.367382973432541f, 0.482092022895813f, 0.367752790451050f, + 0.482193619012833f, + 0.368122667074203f, 0.482294887304306f, 0.368492603302002f, + 0.482395917177200f, + 0.368862658739090f, 0.482496619224548f, 0.369232743978500f, + 0.482597053050995f, + 0.369602948427200f, 0.482697218656540f, 0.369973212480545f, + 0.482797086238861f, + 0.370343536138535f, 0.482896685600281f, 0.370713949203491f, + 0.482995986938477f, + 0.371084451675415f, 0.483094990253448f, 0.371455013751984f, + 0.483193725347519f, + 0.371825665235519f, 0.483292192220688f, 0.372196376323700f, + 0.483390361070633f, + 0.372567176818848f, 0.483488231897354f, 0.372938036918640f, + 0.483585834503174f, + 0.373308986425400f, 0.483683139085770f, 0.373679995536804f, + 0.483780175447464f, + 0.374051094055176f, 0.483876913785934f, 0.374422252178192f, + 0.483973383903503f, + 0.374793499708176f, 0.484069555997849f, 0.375164806842804f, + 0.484165430068970f, + 0.375536203384399f, 0.484261035919189f, 0.375907659530640f, + 0.484356373548508f, + 0.376279205083847f, 0.484451413154602f, 0.376650810241699f, + 0.484546154737473f, + 0.377022475004196f, 0.484640628099442f, 0.377394229173660f, + 0.484734803438187f, + 0.377766042947769f, 0.484828680753708f, 0.378137946128845f, + 0.484922289848328f, + 0.378509908914566f, 0.485015630722046f, 0.378881961107254f, + 0.485108673572540f, + 0.379254043102264f, 0.485201418399811f, 0.379626244306564f, + 0.485293895006180f, + 0.379998475313187f, 0.485386073589325f, 0.380370795726776f, + 0.485477954149246f, + 0.380743205547333f, 0.485569566488266f, 0.381115674972534f, + 0.485660910606384f, + 0.381488204002380f, 0.485751956701279f, 0.381860792636871f, + 0.485842704772949f, + 0.382233470678329f, 0.485933154821396f, 0.382606208324432f, + 0.486023366451263f, + 0.382979035377502f, 0.486113250255585f, 0.383351892232895f, + 0.486202865839005f, + 0.383724838495255f, 0.486292183399200f, 0.384097874164581f, + 0.486381232738495f, + 0.384470939636230f, 0.486469984054565f, 0.384844094514847f, + 0.486558437347412f, + 0.385217308998108f, 0.486646622419357f, 0.385590612888336f, + 0.486734509468079f, + 0.385963946580887f, 0.486822128295898f, 0.386337369680405f, + 0.486909449100494f, + 0.386710882186890f, 0.486996471881866f, 0.387084424495697f, + 0.487083226442337f, + 0.387458056211472f, 0.487169682979584f, 0.387831717729568f, + 0.487255871295929f, + 0.388205498456955f, 0.487341761589050f, 0.388579308986664f, + 0.487427353858948f, + 0.388953179121017f, 0.487512677907944f, 0.389327138662338f, + 0.487597703933716f, + 0.389701157808304f, 0.487682431936264f, 0.390075236558914f, + 0.487766891717911f, + 0.390449374914169f, 0.487851053476334f, 0.390823602676392f, + 0.487934947013855f, + 0.391197860240936f, 0.488018542528152f, 0.391572207212448f, + 0.488101840019226f, + 0.391946613788605f, 0.488184869289398f, 0.392321079969406f, + 0.488267600536346f, + 0.392695605754852f, 0.488350033760071f, 0.393070191144943f, + 0.488432198762894f, + 0.393444836139679f, 0.488514065742493f, 0.393819570541382f, + 0.488595664501190f, + 0.394194334745407f, 0.488676935434341f, 0.394569188356400f, + 0.488757967948914f, + 0.394944071769714f, 0.488838672637939f, 0.395319044589996f, + 0.488919109106064f, + 0.395694077014923f, 0.488999247550964f, 0.396069169044495f, + 0.489079117774963f, + 0.396444320678711f, 0.489158689975739f, 0.396819531917572f, + 0.489237964153290f, + 0.397194802761078f, 0.489316970109940f, 0.397570133209229f, + 0.489395678043365f, + 0.397945523262024f, 0.489474087953568f, 0.398320972919464f, + 0.489552229642868f, + 0.398696482181549f, 0.489630073308945f, 0.399072051048279f, + 0.489707618951797f, + 0.399447679519653f, 0.489784896373749f, 0.399823367595673f, + 0.489861875772476f, + 0.400199115276337f, 0.489938557147980f, 0.400574922561646f, + 0.490014940500259f, + 0.400950789451599f, 0.490091055631638f, 0.401326715946198f, + 0.490166902542114f, + 0.401702702045441f, 0.490242421627045f, 0.402078747749329f, + 0.490317672491074f, + 0.402454853057861f, 0.490392625331879f, 0.402830988168716f, + 0.490467309951782f, + 0.403207212686539f, 0.490541696548462f, 0.403583467006683f, + 0.490615785121918f, + 0.403959810733795f, 0.490689605474472f, 0.404336184263229f, + 0.490763127803802f, + 0.404712617397308f, 0.490836352109909f, 0.405089110136032f, + 0.490909278392792f, + 0.405465662479401f, 0.490981936454773f, 0.405842274427414f, + 0.491054296493530f, + 0.406218945980072f, 0.491126358509064f, 0.406595647335052f, + 0.491198152303696f, + 0.406972438097000f, 0.491269648075104f, 0.407349258661270f, + 0.491340845823288f, + 0.407726138830185f, 0.491411775350571f, 0.408103078603745f, + 0.491482406854630f, + 0.408480048179626f, 0.491552740335464f, 0.408857107162476f, + 0.491622805595398f, + 0.409234195947647f, 0.491692543029785f, 0.409611344337463f, + 0.491762012243271f, + 0.409988552331924f, 0.491831213235855f, 0.410365819931030f, + 0.491900116205215f, + 0.410743117332459f, 0.491968721151352f, 0.411120474338531f, + 0.492037028074265f, + 0.411497890949249f, 0.492105036973953f, 0.411875367164612f, + 0.492172777652740f, + 0.412252873182297f, 0.492240220308304f, 0.412630438804626f, + 0.492307394742966f, + 0.413008064031601f, 0.492374241352081f, 0.413385748863220f, + 0.492440819740295f, + 0.413763463497162f, 0.492507129907608f, 0.414141237735748f, + 0.492573112249374f, + 0.414519041776657f, 0.492638826370239f, 0.414896935224533f, + 0.492704242467880f, + 0.415274858474731f, 0.492769360542297f, 0.415652841329575f, + 0.492834210395813f, + 0.416030853986740f, 0.492898762226105f, 0.416408926248550f, + 0.492963016033173f, + 0.416787058115005f, 0.493026971817017f, 0.417165219783783f, + 0.493090659379959f, + 0.417543441057205f, 0.493154048919678f, 0.417921721935272f, + 0.493217140436172f, + 0.418300032615662f, 0.493279963731766f, 0.418678402900696f, + 0.493342459201813f, + 0.419056802988052f, 0.493404686450958f, 0.419435262680054f, + 0.493466645479202f, + 0.419813781976700f, 0.493528276681900f, 0.420192331075668f, + 0.493589639663696f, + 0.420570939779282f, 0.493650704622269f, 0.420949578285217f, + 0.493711471557617f, + 0.421328276395798f, 0.493771970272064f, 0.421707004308701f, + 0.493832170963287f, + 0.422085791826248f, 0.493892073631287f, 0.422464638948441f, + 0.493951678276062f, + 0.422843515872955f, 0.494011014699936f, 0.423222452402115f, + 0.494070053100586f, + 0.423601418733597f, 0.494128793478012f, 0.423980414867401f, + 0.494187235832214f, + 0.424359470605850f, 0.494245409965515f, 0.424738585948944f, + 0.494303256273270f, + 0.425117731094360f, 0.494360834360123f, 0.425496935844421f, + 0.494418144226074f, + 0.425876170396805f, 0.494475126266479f, 0.426255434751511f, + 0.494531840085983f, + 0.426634758710861f, 0.494588255882263f, 0.427014142274857f, + 0.494644373655319f, + 0.427393525838852f, 0.494700223207474f, 0.427772998809814f, + 0.494755744934082f, + 0.428152471780777f, 0.494810998439789f, 0.428532034158707f, + 0.494865983724594f, + 0.428911596536636f, 0.494920641183853f, 0.429291218519211f, + 0.494975030422211f, + 0.429670870304108f, 0.495029091835022f, 0.430050581693649f, + 0.495082914829254f, + 0.430430322885513f, 0.495136409997940f, 0.430810123682022f, + 0.495189607143402f, + 0.431189924478531f, 0.495242536067963f, 0.431569814682007f, + 0.495295166969299f, + 0.431949704885483f, 0.495347499847412f, 0.432329654693604f, + 0.495399564504623f, + 0.432709634304047f, 0.495451331138611f, 0.433089673519135f, + 0.495502769947052f, + 0.433469742536545f, 0.495553970336914f, 0.433849841356277f, + 0.495604842901230f, + 0.434229999780655f, 0.495655417442322f, 0.434610158205032f, + 0.495705723762512f, + 0.434990376234055f, 0.495755732059479f, 0.435370653867722f, + 0.495805442333221f, + 0.435750931501389f, 0.495854884386063f, 0.436131268739700f, + 0.495903998613358f, + 0.436511665582657f, 0.495952844619751f, 0.436892062425613f, + 0.496001392602921f, + 0.437272518873215f, 0.496049642562866f, 0.437653005123138f, + 0.496097624301910f, + 0.438033521175385f, 0.496145308017731f, 0.438414067029953f, + 0.496192663908005f, + 0.438794672489166f, 0.496239781379700f, 0.439175277948380f, + 0.496286571025848f, + 0.439555943012238f, 0.496333062648773f, 0.439936667680740f, + 0.496379286050797f, + 0.440317392349243f, 0.496425211429596f, 0.440698176622391f, + 0.496470838785172f, + 0.441078960895538f, 0.496516168117523f, 0.441459804773331f, + 0.496561229228973f, + 0.441840678453445f, 0.496605962514877f, 0.442221581935883f, + 0.496650427579880f, + 0.442602545022964f, 0.496694594621658f, 0.442983508110046f, + 0.496738493442535f, + 0.443364530801773f, 0.496782064437866f, 0.443745553493500f, + 0.496825367212296f, + 0.444126635789871f, 0.496868371963501f, 0.444507747888565f, + 0.496911078691483f, + 0.444888889789581f, 0.496953487396240f, 0.445270061492920f, + 0.496995598077774f, + 0.445651292800903f, 0.497037440538406f, 0.446032524108887f, + 0.497078984975815f, + 0.446413785219193f, 0.497120231389999f, 0.446795076131821f, + 0.497161179780960f, + 0.447176426649094f, 0.497201830148697f, 0.447557777166367f, + 0.497242212295532f, + 0.447939187288284f, 0.497282296419144f, 0.448320597410202f, + 0.497322082519531f, + 0.448702067136765f, 0.497361570596695f, 0.449083566665649f, + 0.497400760650635f, + 0.449465066194534f, 0.497439652681351f, 0.449846625328064f, + 0.497478276491165f, + 0.450228184461594f, 0.497516602277756f, 0.450609803199768f, + 0.497554630041122f, + 0.450991421937943f, 0.497592359781265f, 0.451373100280762f, + 0.497629791498184f, + 0.451754778623581f, 0.497666954994202f, 0.452136516571045f, + 0.497703820466995f, + 0.452518254518509f, 0.497740387916565f, 0.452900022268295f, + 0.497776657342911f, + 0.453281819820404f, 0.497812628746033f, 0.453663676977158f, + 0.497848302125931f, + 0.454045534133911f, 0.497883707284927f, 0.454427421092987f, + 0.497918814420700f, + 0.454809308052063f, 0.497953623533249f, 0.455191254615784f, + 0.497988134622574f, + 0.455573230981827f, 0.498022347688675f, 0.455955207347870f, + 0.498056292533875f, + 0.456337243318558f, 0.498089909553528f, 0.456719279289246f, + 0.498123258352280f, + 0.457101345062256f, 0.498156309127808f, 0.457483440637589f, + 0.498189061880112f, + 0.457865566015244f, 0.498221516609192f, 0.458247691392899f, + 0.498253703117371f, + 0.458629876375198f, 0.498285561800003f, 0.459012061357498f, + 0.498317152261734f, + 0.459394276142120f, 0.498348444700241f, 0.459776520729065f, + 0.498379439115524f, + 0.460158795118332f, 0.498410135507584f, 0.460541069507599f, + 0.498440563678741f, + 0.460923373699188f, 0.498470664024353f, 0.461305707693100f, + 0.498500496149063f, + 0.461688071489334f, 0.498530030250549f, 0.462070435285568f, + 0.498559266328812f, + 0.462452858686447f, 0.498588204383850f, 0.462835282087326f, + 0.498616874217987f, + 0.463217705488205f, 0.498645216226578f, 0.463600188493729f, + 0.498673290014267f, + 0.463982671499252f, 0.498701065778732f, 0.464365184307098f, + 0.498728543519974f, + 0.464747726917267f, 0.498755723237991f, 0.465130269527435f, + 0.498782604932785f, + 0.465512841939926f, 0.498809218406677f, 0.465895414352417f, + 0.498835533857346f, + 0.466278046369553f, 0.498861521482468f, 0.466660678386688f, + 0.498887240886688f, + 0.467043310403824f, 0.498912662267685f, 0.467426002025604f, + 0.498937815427780f, + 0.467808693647385f, 0.498962640762329f, 0.468191385269165f, + 0.498987197875977f, + 0.468574106693268f, 0.499011427164078f, 0.468956857919693f, + 0.499035388231277f, + 0.469339638948441f, 0.499059051275253f, 0.469722419977188f, + 0.499082416296005f, + 0.470105201005936f, 0.499105513095856f, 0.470488041639328f, + 0.499128282070160f, + 0.470870882272720f, 0.499150782823563f, 0.471253722906113f, + 0.499172955751419f, + 0.471636593341827f, 0.499194860458374f, 0.472019463777542f, + 0.499216467142105f, + 0.472402364015579f, 0.499237775802612f, 0.472785294055939f, + 0.499258816242218f, + 0.473168224096298f, 0.499279528856277f, 0.473551183938980f, + 0.499299973249435f, + 0.473934143781662f, 0.499320119619370f, 0.474317133426666f, + 0.499339967966080f, + 0.474700123071671f, 0.499359518289566f, 0.475083142518997f, + 0.499378770589828f, + 0.475466161966324f, 0.499397724866867f, 0.475849211215973f, + 0.499416410923004f, + 0.476232260465622f, 0.499434769153595f, 0.476615339517593f, + 0.499452859163284f, + 0.476998418569565f, 0.499470651149750f, 0.477381497621536f, + 0.499488145112991f, + 0.477764606475830f, 0.499505341053009f, 0.478147745132446f, + 0.499522238969803f, + 0.478530883789063f, 0.499538868665695f, 0.478914022445679f, + 0.499555170536041f, + 0.479297190904617f, 0.499571204185486f, 0.479680359363556f, + 0.499586939811707f, + 0.480063527822495f, 0.499602377414703f, 0.480446726083755f, + 0.499617516994476f, + 0.480829954147339f, 0.499632388353348f, 0.481213152408600f, + 0.499646931886673f, + 0.481596380472183f, 0.499661177396774f, 0.481979638338089f, + 0.499675154685974f, + 0.482362866401672f, 0.499688833951950f, 0.482746154069901f, + 0.499702215194702f, + 0.483129411935806f, 0.499715298414230f, 0.483512699604034f, + 0.499728083610535f, + 0.483895987272263f, 0.499740600585938f, 0.484279274940491f, + 0.499752789735794f, + 0.484662592411041f, 0.499764710664749f, 0.485045909881592f, + 0.499776333570480f, + 0.485429257154465f, 0.499787658452988f, 0.485812574625015f, + 0.499798685312271f, + 0.486195921897888f, 0.499809414148331f, 0.486579269170761f, + 0.499819844961166f, + 0.486962646245956f, 0.499830007553101f, 0.487346023321152f, + 0.499839842319489f, + 0.487729400396347f, 0.499849408864975f, 0.488112777471542f, + 0.499858677387238f, + 0.488496154546738f, 0.499867647886276f, 0.488879561424255f, + 0.499876320362091f, + 0.489262968301773f, 0.499884694814682f, 0.489646375179291f, + 0.499892801046371f, + 0.490029782056808f, 0.499900579452515f, 0.490413218736649f, + 0.499908089637756f, + 0.490796625614166f, 0.499915301799774f, 0.491180062294006f, + 0.499922215938568f, + 0.491563498973846f, 0.499928832054138f, 0.491946935653687f, + 0.499935150146484f, + 0.492330402135849f, 0.499941170215607f, 0.492713838815689f, + 0.499946922063828f, + 0.493097305297852f, 0.499952346086502f, 0.493480771780014f, + 0.499957501888275f, + 0.493864238262177f, 0.499962359666824f, 0.494247704744339f, + 0.499966919422150f, + 0.494631171226501f, 0.499971181154251f, 0.495014637708664f, + 0.499975144863129f, + 0.495398133993149f, 0.499978810548782f, 0.495781600475311f, + 0.499982208013535f, + 0.496165096759796f, 0.499985307455063f, 0.496548563241959f, + 0.499988079071045f, + 0.496932059526443f, 0.499990582466125f, 0.497315555810928f, + 0.499992787837982f, + 0.497699022293091f, 0.499994695186615f, 0.498082518577576f, + 0.499996334314346f, + 0.498466014862061f, 0.499997645616531f, 0.498849511146545f, + 0.499998688697815f, + 0.499233007431030f, 0.499999403953552f, 0.499616503715515f, + 0.499999850988388f, +}; + + +/** +* \par +* Generation of realCoefB array: +* \par +* n = 4096 +*
for (i = 0; i < n; i++)    
+* {    
+*    pBTable[2 * i] = 0.5 * (1.0 + sin (2 * PI / (double) (2 * n) * (double) i));    
+*    pBTable[2 * i + 1] = 0.5 * (1.0 * cos (2 * PI / (double) (2 * n) * (double) i));    
+*  } 
+* +*/ +static const float32_t realCoefB[8192] = { + 0.500000000000000f, 0.500000000000000f, 0.500383496284485f, + 0.499999850988388f, + 0.500766992568970f, 0.499999403953552f, 0.501150488853455f, + 0.499998688697815f, + 0.501533985137939f, 0.499997645616531f, 0.501917481422424f, + 0.499996334314346f, + 0.502300977706909f, 0.499994695186615f, 0.502684473991394f, + 0.499992787837982f, + 0.503067970275879f, 0.499990582466125f, 0.503451406955719f, + 0.499988079071045f, + 0.503834903240204f, 0.499985307455063f, 0.504218399524689f, + 0.499982208013535f, + 0.504601895809174f, 0.499978810548782f, 0.504985332489014f, + 0.499975144863129f, + 0.505368828773499f, 0.499971181154251f, 0.505752325057983f, + 0.499966919422150f, + 0.506135761737823f, 0.499962359666824f, 0.506519258022308f, + 0.499957501888275f, + 0.506902694702148f, 0.499952346086502f, 0.507286131381989f, + 0.499946922063828f, + 0.507669627666473f, 0.499941170215607f, 0.508053064346313f, + 0.499935150146484f, + 0.508436501026154f, 0.499928832054138f, 0.508819937705994f, + 0.499922215938568f, + 0.509203374385834f, 0.499915301799774f, 0.509586811065674f, + 0.499908089637756f, + 0.509970188140869f, 0.499900579452515f, 0.510353624820709f, + 0.499892801046371f, + 0.510737061500549f, 0.499884694814682f, 0.511120438575745f, + 0.499876320362091f, + 0.511503815650940f, 0.499867647886276f, 0.511887252330780f, + 0.499858677387238f, + 0.512270629405975f, 0.499849408864975f, 0.512654006481171f, + 0.499839842319489f, + 0.513037383556366f, 0.499830007553101f, 0.513420701026917f, + 0.499819844961166f, + 0.513804078102112f, 0.499809414148331f, 0.514187395572662f, + 0.499798685312271f, + 0.514570772647858f, 0.499787658452988f, 0.514954090118408f, + 0.499776333570480f, + 0.515337407588959f, 0.499764710664749f, 0.515720725059509f, + 0.499752789735794f, + 0.516103982925415f, 0.499740600585938f, 0.516487300395966f, + 0.499728083610535f, + 0.516870558261871f, 0.499715298414230f, 0.517253875732422f, + 0.499702215194702f, + 0.517637133598328f, 0.499688833951950f, 0.518020391464233f, + 0.499675154685974f, + 0.518403589725494f, 0.499661177396774f, 0.518786847591400f, + 0.499646931886673f, + 0.519170045852661f, 0.499632388353348f, 0.519553244113922f, + 0.499617516994476f, + 0.519936442375183f, 0.499602377414703f, 0.520319640636444f, + 0.499586939811707f, + 0.520702838897705f, 0.499571204185486f, 0.521085977554321f, + 0.499555170536041f, + 0.521469116210938f, 0.499538868665695f, 0.521852254867554f, + 0.499522238969803f, + 0.522235393524170f, 0.499505341053009f, 0.522618472576141f, + 0.499488145112991f, + 0.523001611232758f, 0.499470651149750f, 0.523384690284729f, + 0.499452859163284f, + 0.523767769336700f, 0.499434769153595f, 0.524150788784027f, + 0.499416410923004f, + 0.524533808231354f, 0.499397724866867f, 0.524916887283325f, + 0.499378770589828f, + 0.525299847126007f, 0.499359518289566f, 0.525682866573334f, + 0.499339967966080f, + 0.526065826416016f, 0.499320119619370f, 0.526448845863342f, + 0.499299973249435f, + 0.526831746101379f, 0.499279528856277f, 0.527214705944061f, + 0.499258816242218f, + 0.527597606182098f, 0.499237775802612f, 0.527980506420136f, + 0.499216467142105f, + 0.528363406658173f, 0.499194860458374f, 0.528746306896210f, + 0.499172955751419f, + 0.529129147529602f, 0.499150782823563f, 0.529511988162994f, + 0.499128282070160f, + 0.529894769191742f, 0.499105513095856f, 0.530277609825134f, + 0.499082416296005f, + 0.530660390853882f, 0.499059051275253f, 0.531043112277985f, + 0.499035388231277f, + 0.531425893306732f, 0.499011427164078f, 0.531808614730835f, + 0.498987197875977f, + 0.532191336154938f, 0.498962640762329f, 0.532573997974396f, + 0.498937815427780f, + 0.532956659793854f, 0.498912662267685f, 0.533339321613312f, + 0.498887240886688f, + 0.533721983432770f, 0.498861521482468f, 0.534104585647583f, + 0.498835533857346f, + 0.534487187862396f, 0.498809218406677f, 0.534869730472565f, + 0.498782604932785f, + 0.535252273082733f, 0.498755723237991f, 0.535634815692902f, + 0.498728543519974f, + 0.536017298698425f, 0.498701065778732f, 0.536399841308594f, + 0.498673290014267f, + 0.536782264709473f, 0.498645216226578f, 0.537164747714996f, + 0.498616874217987f, + 0.537547171115875f, 0.498588204383850f, 0.537929534912109f, + 0.498559266328812f, + 0.538311958312988f, 0.498530030250549f, 0.538694262504578f, + 0.498500496149063f, + 0.539076626300812f, 0.498470664024353f, 0.539458930492401f, + 0.498440563678741f, + 0.539841234683990f, 0.498410135507584f, 0.540223479270935f, + 0.498379439115524f, + 0.540605723857880f, 0.498348444700241f, 0.540987968444824f, + 0.498317152261734f, + 0.541370153427124f, 0.498285561800003f, 0.541752278804779f, + 0.498253703117371f, + 0.542134463787079f, 0.498221516609192f, 0.542516589164734f, + 0.498189061880112f, + 0.542898654937744f, 0.498156309127808f, 0.543280720710754f, + 0.498123258352280f, + 0.543662786483765f, 0.498089909553528f, 0.544044792652130f, + 0.498056292533875f, + 0.544426798820496f, 0.498022347688675f, 0.544808745384216f, + 0.497988134622574f, + 0.545190691947937f, 0.497953623533249f, 0.545572578907013f, + 0.497918814420700f, + 0.545954465866089f, 0.497883707284927f, 0.546336352825165f, + 0.497848302125931f, + 0.546718180179596f, 0.497812628746033f, 0.547099947929382f, + 0.497776657342911f, + 0.547481775283813f, 0.497740387916565f, 0.547863483428955f, + 0.497703820466995f, + 0.548245191574097f, 0.497666954994202f, 0.548626899719238f, + 0.497629791498184f, + 0.549008548259735f, 0.497592359781265f, 0.549390196800232f, + 0.497554630041122f, + 0.549771785736084f, 0.497516602277756f, 0.550153374671936f, + 0.497478276491165f, + 0.550534904003143f, 0.497439652681351f, 0.550916433334351f, + 0.497400760650635f, + 0.551297962665558f, 0.497361570596695f, 0.551679372787476f, + 0.497322082519531f, + 0.552060842514038f, 0.497282296419144f, 0.552442193031311f, + 0.497242212295532f, + 0.552823603153229f, 0.497201830148697f, 0.553204894065857f, + 0.497161179780960f, + 0.553586184978485f, 0.497120231389999f, 0.553967475891113f, + 0.497078984975815f, + 0.554348707199097f, 0.497037440538406f, 0.554729938507080f, + 0.496995598077774f, + 0.555111110210419f, 0.496953487396240f, 0.555492222309113f, + 0.496911078691483f, + 0.555873334407806f, 0.496868371963501f, 0.556254446506500f, + 0.496825367212296f, + 0.556635499000549f, 0.496782064437866f, 0.557016491889954f, + 0.496738493442535f, + 0.557397484779358f, 0.496694594621658f, 0.557778418064117f, + 0.496650427579880f, + 0.558159291744232f, 0.496605962514877f, 0.558540165424347f, + 0.496561229228973f, + 0.558921039104462f, 0.496516168117523f, 0.559301853179932f, + 0.496470838785172f, + 0.559682607650757f, 0.496425211429596f, 0.560063362121582f, + 0.496379286050797f, + 0.560444056987762f, 0.496333062648773f, 0.560824692249298f, + 0.496286571025848f, + 0.561205327510834f, 0.496239781379700f, 0.561585903167725f, + 0.496192663908005f, + 0.561966478824615f, 0.496145308017731f, 0.562346994876862f, + 0.496097624301910f, + 0.562727510929108f, 0.496049642562866f, 0.563107967376709f, + 0.496001392602921f, + 0.563488364219666f, 0.495952844619751f, 0.563868701457977f, + 0.495903998613358f, + 0.564249038696289f, 0.495854884386063f, 0.564629375934601f, + 0.495805442333221f, + 0.565009593963623f, 0.495755732059479f, 0.565389811992645f, + 0.495705723762512f, + 0.565770030021667f, 0.495655417442322f, 0.566150128841400f, + 0.495604842901230f, + 0.566530287265778f, 0.495553970336914f, 0.566910326480865f, + 0.495502769947052f, + 0.567290365695953f, 0.495451331138611f, 0.567670345306396f, + 0.495399564504623f, + 0.568050265312195f, 0.495347499847412f, 0.568430185317993f, + 0.495295166969299f, + 0.568810045719147f, 0.495242536067963f, 0.569189906120300f, + 0.495189607143402f, + 0.569569647312164f, 0.495136409997940f, 0.569949388504028f, + 0.495082914829254f, + 0.570329129695892f, 0.495029091835022f, 0.570708811283112f, + 0.494975030422211f, + 0.571088373661041f, 0.494920641183853f, 0.571467995643616f, + 0.494865983724594f, + 0.571847498416901f, 0.494810998439789f, 0.572227001190186f, + 0.494755744934082f, + 0.572606444358826f, 0.494700223207474f, 0.572985887527466f, + 0.494644373655319f, + 0.573365211486816f, 0.494588255882263f, 0.573744535446167f, + 0.494531840085983f, + 0.574123859405518f, 0.494475126266479f, 0.574503064155579f, + 0.494418144226074f, + 0.574882268905640f, 0.494360834360123f, 0.575261414051056f, + 0.494303256273270f, + 0.575640499591827f, 0.494245409965515f, 0.576019585132599f, + 0.494187235832214f, + 0.576398611068726f, 0.494128793478012f, 0.576777577400208f, + 0.494070053100586f, + 0.577156484127045f, 0.494011014699936f, 0.577535390853882f, + 0.493951678276062f, + 0.577914178371429f, 0.493892073631287f, 0.578292965888977f, + 0.493832170963287f, + 0.578671753406525f, 0.493771970272064f, 0.579050421714783f, + 0.493711471557617f, + 0.579429090023041f, 0.493650704622269f, 0.579807698726654f, + 0.493589639663696f, + 0.580186247825623f, 0.493528276681900f, 0.580564737319946f, + 0.493466645479202f, + 0.580943167209625f, 0.493404686450958f, 0.581321597099304f, + 0.493342459201813f, + 0.581699967384338f, 0.493279963731766f, 0.582078278064728f, + 0.493217140436172f, + 0.582456588745117f, 0.493154048919678f, 0.582834780216217f, + 0.493090659379959f, + 0.583212971687317f, 0.493026971817017f, 0.583591103553772f, + 0.492963016033173f, + 0.583969175815582f, 0.492898762226105f, 0.584347188472748f, + 0.492834210395813f, + 0.584725141525269f, 0.492769360542297f, 0.585103094577789f, + 0.492704242467880f, + 0.585480928421021f, 0.492638826370239f, 0.585858762264252f, + 0.492573112249374f, + 0.586236536502838f, 0.492507129907608f, 0.586614251136780f, + 0.492440819740295f, + 0.586991965770721f, 0.492374241352081f, 0.587369561195374f, + 0.492307394742966f, + 0.587747097015381f, 0.492240220308304f, 0.588124632835388f, + 0.492172777652740f, + 0.588502109050751f, 0.492105036973953f, 0.588879525661469f, + 0.492037028074265f, + 0.589256882667542f, 0.491968721151352f, 0.589634180068970f, + 0.491900116205215f, + 0.590011477470398f, 0.491831213235855f, 0.590388655662537f, + 0.491762012243271f, + 0.590765833854675f, 0.491692543029785f, 0.591142892837524f, + 0.491622805595398f, + 0.591519951820374f, 0.491552740335464f, 0.591896951198578f, + 0.491482406854630f, + 0.592273890972137f, 0.491411775350571f, 0.592650771141052f, + 0.491340845823288f, + 0.593027591705322f, 0.491269648075104f, 0.593404352664948f, + 0.491198152303696f, + 0.593781054019928f, 0.491126358509064f, 0.594157755374908f, + 0.491054296493530f, + 0.594534337520599f, 0.490981936454773f, 0.594910860061646f, + 0.490909278392792f, + 0.595287382602692f, 0.490836352109909f, 0.595663845539093f, + 0.490763127803802f, + 0.596040189266205f, 0.490689605474472f, 0.596416532993317f, + 0.490615785121918f, + 0.596792817115784f, 0.490541696548462f, 0.597168982028961f, + 0.490467309951782f, + 0.597545146942139f, 0.490392625331879f, 0.597921252250671f, + 0.490317672491074f, + 0.598297297954559f, 0.490242421627045f, 0.598673284053802f, + 0.490166902542114f, + 0.599049210548401f, 0.490091055631638f, 0.599425077438354f, + 0.490014940500259f, + 0.599800884723663f, 0.489938557147980f, 0.600176632404327f, + 0.489861875772476f, + 0.600552320480347f, 0.489784896373749f, 0.600927948951721f, + 0.489707618951797f, + 0.601303517818451f, 0.489630073308945f, 0.601679027080536f, + 0.489552229642868f, + 0.602054476737976f, 0.489474087953568f, 0.602429866790771f, + 0.489395678043365f, + 0.602805197238922f, 0.489316970109940f, 0.603180468082428f, + 0.489237964153290f, + 0.603555679321289f, 0.489158689975739f, 0.603930830955505f, + 0.489079117774963f, + 0.604305922985077f, 0.488999247550964f, 0.604680955410004f, + 0.488919109106064f, + 0.605055928230286f, 0.488838672637939f, 0.605430841445923f, + 0.488757967948914f, + 0.605805635452271f, 0.488676935434341f, 0.606180429458618f, + 0.488595664501190f, + 0.606555163860321f, 0.488514065742493f, 0.606929838657379f, + 0.488432198762894f, + 0.607304394245148f, 0.488350033760071f, 0.607678949832916f, + 0.488267600536346f, + 0.608053386211395f, 0.488184869289398f, 0.608427822589874f, + 0.488101840019226f, + 0.608802139759064f, 0.488018542528152f, 0.609176397323608f, + 0.487934947013855f, + 0.609550595283508f, 0.487851053476334f, 0.609924793243408f, + 0.487766891717911f, + 0.610298871994019f, 0.487682431936264f, 0.610672831535339f, + 0.487597703933716f, + 0.611046791076660f, 0.487512677907944f, 0.611420691013336f, + 0.487427353858948f, + 0.611794531345367f, 0.487341761589050f, 0.612168252468109f, + 0.487255871295929f, + 0.612541973590851f, 0.487169682979584f, 0.612915575504303f, + 0.487083226442337f, + 0.613289117813110f, 0.486996471881866f, 0.613662600517273f, + 0.486909449100494f, + 0.614036023616791f, 0.486822128295898f, 0.614409387111664f, + 0.486734509468079f, + 0.614782691001892f, 0.486646622419357f, 0.615155875682831f, + 0.486558437347412f, + 0.615529060363770f, 0.486469984054565f, 0.615902125835419f, + 0.486381232738495f, + 0.616275131702423f, 0.486292183399200f, 0.616648077964783f, + 0.486202865839005f, + 0.617020964622498f, 0.486113250255585f, 0.617393791675568f, + 0.486023366451263f, + 0.617766559123993f, 0.485933154821396f, 0.618139207363129f, + 0.485842704772949f, + 0.618511795997620f, 0.485751956701279f, 0.618884325027466f, + 0.485660910606384f, + 0.619256794452667f, 0.485569566488266f, 0.619629204273224f, + 0.485477954149246f, + 0.620001494884491f, 0.485386073589325f, 0.620373785495758f, + 0.485293895006180f, + 0.620745956897736f, 0.485201418399811f, 0.621118068695068f, + 0.485108673572540f, + 0.621490061283112f, 0.485015630722046f, 0.621862053871155f, + 0.484922289848328f, + 0.622233927249908f, 0.484828680753708f, 0.622605800628662f, + 0.484734803438187f, + 0.622977554798126f, 0.484640628099442f, 0.623349189758301f, + 0.484546154737473f, + 0.623720824718475f, 0.484451413154602f, 0.624092340469360f, + 0.484356373548508f, + 0.624463796615601f, 0.484261035919189f, 0.624835193157196f, + 0.484165430068970f, + 0.625206530094147f, 0.484069555997849f, 0.625577747821808f, + 0.483973383903503f, + 0.625948905944824f, 0.483876913785934f, 0.626320004463196f, + 0.483780175447464f, + 0.626691043376923f, 0.483683139085770f, 0.627061963081360f, + 0.483585834503174f, + 0.627432823181152f, 0.483488231897354f, 0.627803623676300f, + 0.483390361070633f, + 0.628174364566803f, 0.483292192220688f, 0.628544986248016f, + 0.483193725347519f, + 0.628915548324585f, 0.483094990253448f, 0.629286050796509f, + 0.482995986938477f, + 0.629656434059143f, 0.482896685600281f, 0.630026817321777f, + 0.482797086238861f, + 0.630397081375122f, 0.482697218656540f, 0.630767226219177f, + 0.482597053050995f, + 0.631137371063232f, 0.482496619224548f, 0.631507396697998f, + 0.482395917177200f, + 0.631877362728119f, 0.482294887304306f, 0.632247209548950f, + 0.482193619012833f, + 0.632616996765137f, 0.482092022895813f, 0.632986724376678f, + 0.481990188360214f, + 0.633356392383575f, 0.481888025999069f, 0.633725941181183f, + 0.481785595417023f, + 0.634095430374146f, 0.481682896614075f, 0.634464859962463f, + 0.481579899787903f, + 0.634834170341492f, 0.481476634740829f, 0.635203421115875f, + 0.481373071670532f, + 0.635572552680969f, 0.481269240379334f, 0.635941684246063f, + 0.481165111064911f, + 0.636310696601868f, 0.481060713529587f, 0.636679589748383f, + 0.480956017971039f, + 0.637048482894897f, 0.480851024389267f, 0.637417197227478f, + 0.480745792388916f, + 0.637785911560059f, 0.480640232563019f, 0.638154506683350f, + 0.480534434318542f, + 0.638523042201996f, 0.480428308248520f, 0.638891458511353f, + 0.480321943759918f, + 0.639259815216064f, 0.480215251445770f, 0.639628112316132f, + 0.480108320713043f, + 0.639996349811554f, 0.480001062154770f, 0.640364408493042f, + 0.479893565177917f, + 0.640732467174530f, 0.479785770177841f, 0.641100406646729f, + 0.479677677154541f, + 0.641468286514282f, 0.479569315910339f, 0.641836047172546f, + 0.479460656642914f, + 0.642203748226166f, 0.479351729154587f, 0.642571389675140f, + 0.479242533445358f, + 0.642938911914825f, 0.479133039712906f, 0.643306374549866f, + 0.479023247957230f, + 0.643673717975616f, 0.478913217782974f, 0.644041001796722f, + 0.478802859783173f, + 0.644408226013184f, 0.478692263364792f, 0.644775331020355f, + 0.478581339120865f, + 0.645142316818237f, 0.478470176458359f, 0.645509302616119f, + 0.478358715772629f, + 0.645876109600067f, 0.478246957063675f, 0.646242916584015f, + 0.478134930133820f, + 0.646609604358673f, 0.478022634983063f, 0.646976172924042f, + 0.477910041809082f, + 0.647342681884766f, 0.477797180414200f, 0.647709131240845f, + 0.477684020996094f, + 0.648075461387634f, 0.477570593357086f, 0.648441672325134f, + 0.477456867694855f, + 0.648807883262634f, 0.477342873811722f, 0.649173915386200f, + 0.477228611707687f, + 0.649539887905121f, 0.477114051580429f, 0.649905800819397f, + 0.476999223232269f, + 0.650271594524384f, 0.476884096860886f, 0.650637328624725f, + 0.476768702268600f, + 0.651003003120422f, 0.476653009653091f, 0.651368498802185f, + 0.476537048816681f, + 0.651733994483948f, 0.476420819759369f, 0.652099311351776f, + 0.476304292678833f, + 0.652464628219604f, 0.476187497377396f, 0.652829825878143f, + 0.476070433855057f, + 0.653194904327393f, 0.475953072309494f, 0.653559923171997f, + 0.475835442543030f, + 0.653924822807312f, 0.475717514753342f, 0.654289662837982f, + 0.475599318742752f, + 0.654654383659363f, 0.475480824708939f, 0.655019044876099f, + 0.475362062454224f, + 0.655383586883545f, 0.475243031978607f, 0.655748009681702f, + 0.475123733282089f, + 0.656112432479858f, 0.475004136562347f, 0.656476676464081f, + 0.474884241819382f, + 0.656840860843658f, 0.474764078855515f, 0.657204985618591f, + 0.474643647670746f, + 0.657568991184235f, 0.474522948265076f, 0.657932877540588f, + 0.474401950836182f, + 0.658296704292297f, 0.474280685186386f, 0.658660411834717f, + 0.474159121513367f, + 0.659024059772491f, 0.474037289619446f, 0.659387588500977f, + 0.473915189504623f, + 0.659750998020172f, 0.473792791366577f, 0.660114347934723f, + 0.473670125007629f, + 0.660477638244629f, 0.473547190427780f, 0.660840749740601f, + 0.473423957824707f, + 0.661203861236572f, 0.473300457000732f, 0.661566793918610f, + 0.473176687955856f, + 0.661929666996002f, 0.473052620887756f, 0.662292480468750f, + 0.472928285598755f, + 0.662655174732208f, 0.472803652286530f, 0.663017749786377f, + 0.472678780555725f, + 0.663380205631256f, 0.472553610801697f, 0.663742601871490f, + 0.472428143024445f, + 0.664104938507080f, 0.472302407026291f, 0.664467096328735f, + 0.472176402807236f, + 0.664829254150391f, 0.472050130367279f, 0.665191233158112f, + 0.471923559904099f, + 0.665553152561188f, 0.471796721220016f, 0.665914952754974f, + 0.471669614315033f, + 0.666276693344116f, 0.471542209386826f, 0.666638314723969f, + 0.471414536237717f, + 0.666999816894531f, 0.471286594867706f, 0.667361259460449f, + 0.471158385276794f, + 0.667722582817078f, 0.471029877662659f, 0.668083786964417f, + 0.470901101827621f, + 0.668444931507111f, 0.470772027969360f, 0.668805956840515f, + 0.470642685890198f, + 0.669166862964630f, 0.470513075590134f, 0.669527709484100f, + 0.470383197069168f, + 0.669888436794281f, 0.470253020524979f, 0.670249044895172f, + 0.470122605562210f, + 0.670609593391418f, 0.469991862773895f, 0.670970022678375f, + 0.469860881567001f, + 0.671330332756042f, 0.469729602336884f, 0.671690583229065f, + 0.469598054885864f, + 0.672050714492798f, 0.469466239213943f, 0.672410726547241f, + 0.469334155321121f, + 0.672770678997040f, 0.469201773405075f, 0.673130512237549f, + 0.469069123268127f, + 0.673490226268768f, 0.468936175107956f, 0.673849821090698f, + 0.468802988529205f, + 0.674209356307983f, 0.468669503927231f, 0.674568772315979f, + 0.468535751104355f, + 0.674928069114685f, 0.468401730060577f, 0.675287246704102f, + 0.468267410993576f, + 0.675646364688873f, 0.468132823705673f, 0.676005363464355f, + 0.467997968196869f, + 0.676364302635193f, 0.467862844467163f, 0.676723062992096f, + 0.467727422714233f, + 0.677081763744354f, 0.467591762542725f, 0.677440345287323f, + 0.467455804347992f, + 0.677798807621002f, 0.467319577932358f, 0.678157210350037f, + 0.467183053493500f, + 0.678515493869781f, 0.467046260833740f, 0.678873658180237f, + 0.466909229755402f, + 0.679231703281403f, 0.466771900653839f, 0.679589688777924f, + 0.466634273529053f, + 0.679947495460510f, 0.466496407985687f, 0.680305242538452f, + 0.466358244419098f, + 0.680662930011749f, 0.466219812631607f, 0.681020438671112f, + 0.466081112623215f, + 0.681377887725830f, 0.465942144393921f, 0.681735157966614f, + 0.465802878141403f, + 0.682092368602753f, 0.465663343667984f, 0.682449519634247f, + 0.465523540973663f, + 0.682806491851807f, 0.465383470058441f, 0.683163404464722f, + 0.465243130922318f, + 0.683520197868347f, 0.465102523565292f, 0.683876872062683f, + 0.464961618185043f, + 0.684233427047729f, 0.464820444583893f, 0.684589862823486f, + 0.464679002761841f, + 0.684946238994598f, 0.464537292718887f, 0.685302436351776f, + 0.464395314455032f, + 0.685658574104309f, 0.464253038167953f, 0.686014592647552f, + 0.464110493659973f, + 0.686370551586151f, 0.463967710733414f, 0.686726331710815f, + 0.463824629783630f, + 0.687082052230835f, 0.463681250810623f, 0.687437593936920f, + 0.463537633419037f, + 0.687793076038361f, 0.463393747806549f, 0.688148438930511f, + 0.463249564170837f, + 0.688503682613373f, 0.463105112314224f, 0.688858866691589f, + 0.462960392236710f, + 0.689213871955872f, 0.462815403938293f, 0.689568817615509f, + 0.462670147418976f, + 0.689923584461212f, 0.462524622678757f, 0.690278291702271f, + 0.462378799915314f, + 0.690632879734039f, 0.462232738733292f, 0.690987348556519f, + 0.462086379528046f, + 0.691341698169708f, 0.461939752101898f, 0.691695988178253f, + 0.461792886257172f, + 0.692050099372864f, 0.461645722389221f, 0.692404091358185f, + 0.461498260498047f, + 0.692758023738861f, 0.461350560188293f, 0.693111836910248f, + 0.461202591657639f, + 0.693465530872345f, 0.461054325103760f, 0.693819046020508f, + 0.460905820131302f, + 0.694172501564026f, 0.460757017135620f, 0.694525837898254f, + 0.460607945919037f, + 0.694879114627838f, 0.460458606481552f, 0.695232212543488f, + 0.460309028625488f, + 0.695585191249847f, 0.460159152746201f, 0.695938050746918f, + 0.460008978843689f, + 0.696290850639343f, 0.459858566522598f, 0.696643471717834f, + 0.459707885980606f, + 0.696996033191681f, 0.459556937217712f, 0.697348415851593f, + 0.459405690431595f, + 0.697700738906860f, 0.459254205226898f, 0.698052942752838f, + 0.459102421998978f, + 0.698404967784882f, 0.458950400352478f, 0.698756933212280f, + 0.458798080682755f, + 0.699108779430389f, 0.458645492792130f, 0.699460506439209f, + 0.458492636680603f, + 0.699812114238739f, 0.458339542150497f, 0.700163602828979f, + 0.458186149597168f, + 0.700514972209930f, 0.458032488822937f, 0.700866222381592f, + 0.457878559827805f, + 0.701217353343964f, 0.457724362611771f, 0.701568365097046f, + 0.457569897174835f, + 0.701919257640839f, 0.457415163516998f, 0.702270030975342f, + 0.457260161638260f, + 0.702620685100555f, 0.457104891538620f, 0.702971220016479f, + 0.456949323415756f, + 0.703321635723114f, 0.456793516874313f, 0.703671932220459f, + 0.456637442111969f, + 0.704022109508514f, 0.456481099128723f, 0.704372167587280f, + 0.456324487924576f, + 0.704722046852112f, 0.456167578697205f, 0.705071866512299f, + 0.456010431051254f, + 0.705421566963196f, 0.455853015184402f, 0.705771148204803f, + 0.455695331096649f, + 0.706120610237122f, 0.455537378787994f, 0.706469953060150f, + 0.455379128456116f, + 0.706819176673889f, 0.455220639705658f, 0.707168221473694f, + 0.455061882734299f, + 0.707517206668854f, 0.454902857542038f, 0.707866072654724f, + 0.454743564128876f, + 0.708214759826660f, 0.454584002494812f, 0.708563387393951f, + 0.454424172639847f, + 0.708911836147308f, 0.454264044761658f, 0.709260225296021f, + 0.454103678464890f, + 0.709608435630798f, 0.453943043947220f, 0.709956526756287f, + 0.453782171010971f, + 0.710304558277130f, 0.453621000051498f, 0.710652410984039f, + 0.453459560871124f, + 0.711000144481659f, 0.453297853469849f, 0.711347758769989f, + 0.453135877847672f, + 0.711695253849030f, 0.452973634004593f, 0.712042629718781f, + 0.452811151742935f, + 0.712389826774597f, 0.452648371458054f, 0.712736964225769f, + 0.452485352754593f, + 0.713083922863007f, 0.452322036027908f, 0.713430821895599f, + 0.452158480882645f, + 0.713777542114258f, 0.451994657516479f, 0.714124143123627f, + 0.451830536127090f, + 0.714470624923706f, 0.451666176319122f, 0.714816987514496f, + 0.451501548290253f, + 0.715163230895996f, 0.451336652040482f, 0.715509355068207f, + 0.451171487569809f, + 0.715855300426483f, 0.451006084680557f, 0.716201186180115f, + 0.450840383768082f, + 0.716546893119812f, 0.450674414634705f, 0.716892480850220f, + 0.450508207082748f, + 0.717238008975983f, 0.450341701507568f, 0.717583298683167f, + 0.450174957513809f, + 0.717928528785706f, 0.450007945299149f, 0.718273639678955f, + 0.449840664863586f, + 0.718618571758270f, 0.449673116207123f, 0.718963444232941f, + 0.449505299329758f, + 0.719308137893677f, 0.449337244033813f, 0.719652712345123f, + 0.449168890714645f, + 0.719997107982636f, 0.449000298976898f, 0.720341444015503f, + 0.448831409215927f, + 0.720685660839081f, 0.448662281036377f, 0.721029698848724f, + 0.448492884635925f, + 0.721373617649078f, 0.448323249816895f, 0.721717417240143f, + 0.448153316974640f, + 0.722061097621918f, 0.447983115911484f, 0.722404599189758f, + 0.447812676429749f, + 0.722747981548309f, 0.447641968727112f, 0.723091304302216f, + 0.447470992803574f, + 0.723434448242188f, 0.447299748659134f, 0.723777413368225f, + 0.447128236293793f, + 0.724120318889618f, 0.446956485509872f, 0.724463045597076f, + 0.446784436702728f, + 0.724805653095245f, 0.446612149477005f, 0.725148141384125f, + 0.446439594030380f, + 0.725490510463715f, 0.446266770362854f, 0.725832700729370f, + 0.446093708276749f, + 0.726174771785736f, 0.445920348167419f, 0.726516723632813f, + 0.445746749639511f, + 0.726858556270599f, 0.445572882890701f, 0.727200269699097f, + 0.445398747920990f, + 0.727541804313660f, 0.445224374532700f, 0.727883219718933f, + 0.445049703121185f, + 0.728224515914917f, 0.444874793291092f, 0.728565633296967f, + 0.444699615240097f, + 0.728906631469727f, 0.444524168968201f, 0.729247510433197f, + 0.444348484277725f, + 0.729588270187378f, 0.444172531366348f, 0.729928910732269f, + 0.443996280431747f, + 0.730269372463226f, 0.443819820880890f, 0.730609714984894f, + 0.443643063306808f, + 0.730949878692627f, 0.443466067314148f, 0.731289982795715f, + 0.443288803100586f, + 0.731629908084869f, 0.443111270666122f, 0.731969714164734f, + 0.442933470010757f, + 0.732309341430664f, 0.442755430936813f, 0.732648849487305f, + 0.442577123641968f, + 0.732988238334656f, 0.442398548126221f, 0.733327507972717f, + 0.442219734191895f, + 0.733666598796844f, 0.442040622234344f, 0.734005570411682f, + 0.441861271858215f, + 0.734344422817230f, 0.441681683063507f, 0.734683096408844f, + 0.441501796245575f, + 0.735021650791168f, 0.441321671009064f, 0.735360085964203f, + 0.441141277551651f, + 0.735698342323303f, 0.440960645675659f, 0.736036539077759f, + 0.440779715776443f, + 0.736374497413635f, 0.440598547458649f, 0.736712396144867f, + 0.440417140722275f, + 0.737050116062164f, 0.440235435962677f, 0.737387716770172f, + 0.440053492784500f, + 0.737725138664246f, 0.439871311187744f, 0.738062441349030f, + 0.439688831567764f, + 0.738399624824524f, 0.439506113529205f, 0.738736629486084f, + 0.439323127269745f, + 0.739073514938354f, 0.439139902591705f, 0.739410281181335f, + 0.438956409692764f, + 0.739746868610382f, 0.438772648572922f, 0.740083336830139f, + 0.438588619232178f, + 0.740419685840607f, 0.438404351472855f, 0.740755856037140f, + 0.438219845294952f, + 0.741091907024384f, 0.438035041093826f, 0.741427779197693f, + 0.437849998474121f, + 0.741763532161713f, 0.437664687633514f, 0.742099165916443f, + 0.437479138374329f, + 0.742434620857239f, 0.437293320894241f, 0.742769956588745f, + 0.437107264995575f, + 0.743105113506317f, 0.436920911073685f, 0.743440151214600f, + 0.436734348535538f, + 0.743775069713593f, 0.436547487974167f, 0.744109809398651f, + 0.436360388994217f, + 0.744444429874420f, 0.436173021793365f, 0.744778931140900f, + 0.435985416173935f, + 0.745113253593445f, 0.435797542333603f, 0.745447397232056f, + 0.435609430074692f, + 0.745781481266022f, 0.435421019792557f, 0.746115326881409f, + 0.435232400894165f, + 0.746449112892151f, 0.435043483972549f, 0.746782720088959f, + 0.434854328632355f, + 0.747116148471832f, 0.434664934873581f, 0.747449457645416f, + 0.434475272893906f, + 0.747782647609711f, 0.434285342693329f, 0.748115658760071f, + 0.434095174074173f, + 0.748448550701141f, 0.433904737234116f, 0.748781263828278f, + 0.433714061975479f, + 0.749113857746124f, 0.433523118495941f, 0.749446272850037f, + 0.433331936597824f, + 0.749778568744659f, 0.433140486478806f, 0.750110685825348f, + 0.432948768138886f, + 0.750442683696747f, 0.432756811380386f, 0.750774562358856f, + 0.432564586400986f, + 0.751106262207031f, 0.432372123003006f, 0.751437783241272f, + 0.432179391384125f, + 0.751769185066223f, 0.431986421346664f, 0.752100467681885f, + 0.431793183088303f, + 0.752431571483612f, 0.431599706411362f, 0.752762496471405f, + 0.431405961513519f, + 0.753093302249908f, 0.431211978197098f, 0.753423988819122f, + 0.431017726659775f, + 0.753754496574402f, 0.430823236703873f, 0.754084885120392f, + 0.430628478527069f, + 0.754415094852448f, 0.430433481931686f, 0.754745125770569f, + 0.430238217115402f, + 0.755075037479401f, 0.430042684078217f, 0.755404829978943f, + 0.429846942424774f, + 0.755734443664551f, 0.429650902748108f, 0.756063878536224f, + 0.429454624652863f, + 0.756393194198608f, 0.429258108139038f, 0.756722390651703f, + 0.429061323404312f, + 0.757051348686218f, 0.428864300251007f, 0.757380247116089f, + 0.428667008876801f, + 0.757708966732025f, 0.428469479084015f, 0.758037507534027f, + 0.428271710872650f, + 0.758365929126740f, 0.428073674440384f, 0.758694171905518f, + 0.427875369787216f, + 0.759022235870361f, 0.427676826715469f, 0.759350180625916f, + 0.427478045225143f, + 0.759678006172180f, 0.427278995513916f, 0.760005652904511f, + 0.427079707384110f, + 0.760333120822906f, 0.426880151033401f, 0.760660469532013f, + 0.426680356264114f, + 0.760987639427185f, 0.426480293273926f, 0.761314690113068f, + 0.426279991865158f, + 0.761641561985016f, 0.426079452037811f, 0.761968255043030f, + 0.425878643989563f, + 0.762294828891754f, 0.425677597522736f, 0.762621283531189f, + 0.425476282835007f, + 0.762947499752045f, 0.425274729728699f, 0.763273596763611f, + 0.425072938203812f, + 0.763599574565887f, 0.424870878458023f, 0.763925373554230f, + 0.424668580293655f, + 0.764250993728638f, 0.424466013908386f, 0.764576494693756f, + 0.424263238906860f, + 0.764901816844940f, 0.424060165882111f, 0.765226960182190f, + 0.423856884241104f, + 0.765551984310150f, 0.423653304576874f, 0.765876889228821f, + 0.423449516296387f, + 0.766201555728912f, 0.423245459794998f, 0.766526103019714f, + 0.423041164875031f, + 0.766850471496582f, 0.422836631536484f, 0.767174720764160f, + 0.422631829977036f, + 0.767498791217804f, 0.422426789999008f, 0.767822742462158f, + 0.422221481800079f, + 0.768146514892578f, 0.422015935182571f, 0.768470108509064f, + 0.421810150146484f, + 0.768793523311615f, 0.421604126691818f, 0.769116818904877f, + 0.421397835016251f, + 0.769439935684204f, 0.421191304922104f, 0.769762933254242f, + 0.420984506607056f, + 0.770085752010345f, 0.420777499675751f, 0.770408391952515f, + 0.420570224523544f, + 0.770730912685394f, 0.420362681150436f, 0.771053194999695f, + 0.420154929161072f, + 0.771375417709351f, 0.419946908950806f, 0.771697402000427f, + 0.419738620519638f, + 0.772019267082214f, 0.419530123472214f, 0.772340953350067f, + 0.419321358203888f, + 0.772662520408630f, 0.419112354516983f, 0.772983849048615f, + 0.418903112411499f, + 0.773305058479309f, 0.418693602085114f, 0.773626148700714f, + 0.418483853340149f, + 0.773947000503540f, 0.418273866176605f, 0.774267733097076f, + 0.418063640594482f, + 0.774588346481323f, 0.417853146791458f, 0.774908721446991f, + 0.417642414569855f, + 0.775228977203369f, 0.417431443929672f, 0.775549054145813f, + 0.417220205068588f, + 0.775869011878967f, 0.417008757591248f, 0.776188731193542f, + 0.416797041893005f, + 0.776508331298828f, 0.416585087776184f, 0.776827812194824f, + 0.416372895240784f, + 0.777147054672241f, 0.416160434484482f, 0.777466177940369f, + 0.415947735309601f, + 0.777785122394562f, 0.415734797716141f, 0.778103888034821f, + 0.415521621704102f, + 0.778422534465790f, 0.415308207273483f, 0.778741002082825f, + 0.415094524621964f, + 0.779059290885925f, 0.414880603551865f, 0.779377400875092f, + 0.414666473865509f, + 0.779695332050323f, 0.414452046155930f, 0.780013144016266f, + 0.414237409830093f, + 0.780330777168274f, 0.414022535085678f, 0.780648231506348f, + 0.413807392120361f, + 0.780965566635132f, 0.413592010736465f, 0.781282722949982f, + 0.413376390933990f, + 0.781599700450897f, 0.413160532712936f, 0.781916499137878f, + 0.412944436073303f, + 0.782233119010925f, 0.412728071212769f, 0.782549619674683f, + 0.412511497735977f, + 0.782865881919861f, 0.412294656038284f, 0.783182024955750f, + 0.412077575922012f, + 0.783498048782349f, 0.411860257387161f, 0.783813834190369f, + 0.411642700433731f, + 0.784129500389099f, 0.411424905061722f, 0.784444928169250f, + 0.411206841468811f, + 0.784760236740112f, 0.410988569259644f, 0.785075426101685f, + 0.410770028829575f, + 0.785390377044678f, 0.410551249980927f, 0.785705149173737f, + 0.410332232713699f, + 0.786019802093506f, 0.410112977027893f, 0.786334276199341f, + 0.409893482923508f, + 0.786648571491241f, 0.409673750400543f, 0.786962687969208f, + 0.409453779459000f, + 0.787276685237885f, 0.409233570098877f, 0.787590444087982f, + 0.409013092517853f, + 0.787904083728790f, 0.408792406320572f, 0.788217544555664f, + 0.408571451902390f, + 0.788530826568604f, 0.408350288867950f, 0.788843929767609f, + 0.408128857612610f, + 0.789156913757324f, 0.407907217741013f, 0.789469659328461f, + 0.407685309648514f, + 0.789782285690308f, 0.407463163137436f, 0.790094733238220f, + 0.407240778207779f, + 0.790407001972198f, 0.407018154859543f, 0.790719091892242f, + 0.406795293092728f, + 0.791031002998352f, 0.406572192907333f, 0.791342735290527f, + 0.406348884105682f, + 0.791654348373413f, 0.406125307083130f, 0.791965723037720f, + 0.405901491641998f, + 0.792276978492737f, 0.405677437782288f, 0.792588055133820f, + 0.405453115701675f, + 0.792898952960968f, 0.405228585004807f, 0.793209671974182f, + 0.405003815889359f, + 0.793520212173462f, 0.404778808355331f, 0.793830573558807f, + 0.404553562402725f, + 0.794140756130219f, 0.404328078031540f, 0.794450819492340f, + 0.404102355241776f, + 0.794760644435883f, 0.403876423835754f, 0.795070350170136f, + 0.403650224208832f, + 0.795379877090454f, 0.403423786163330f, 0.795689165592194f, + 0.403197109699249f, + 0.795998334884644f, 0.402970194816589f, 0.796307325363159f, + 0.402743041515350f, + 0.796616137027740f, 0.402515679597855f, 0.796924769878387f, + 0.402288049459457f, + 0.797233223915100f, 0.402060180902481f, 0.797541558742523f, + 0.401832103729248f, + 0.797849655151367f, 0.401603758335114f, 0.798157572746277f, + 0.401375204324722f, + 0.798465371131897f, 0.401146411895752f, 0.798772931098938f, + 0.400917351245880f, + 0.799080371856689f, 0.400688081979752f, 0.799387574195862f, + 0.400458574295044f, + 0.799694657325745f, 0.400228828191757f, 0.800001561641693f, + 0.399998843669891f, + 0.800308227539063f, 0.399768620729446f, 0.800614774227142f, + 0.399538189172745f, + 0.800921142101288f, 0.399307489395142f, 0.801227271556854f, + 0.399076581001282f, + 0.801533281803131f, 0.398845434188843f, 0.801839113235474f, + 0.398614019155502f, + 0.802144765853882f, 0.398382395505905f, 0.802450239658356f, + 0.398150533437729f, + 0.802755534648895f, 0.397918462753296f, 0.803060650825500f, + 0.397686123847961f, + 0.803365588188171f, 0.397453576326370f, 0.803670346736908f, + 0.397220760583878f, + 0.803974866867065f, 0.396987736225128f, 0.804279267787933f, + 0.396754473447800f, + 0.804583489894867f, 0.396520972251892f, 0.804887533187866f, + 0.396287262439728f, + 0.805191397666931f, 0.396053284406662f, 0.805495083332062f, + 0.395819097757339f, + 0.805798590183258f, 0.395584672689438f, 0.806101918220520f, + 0.395350009202957f, + 0.806405067443848f, 0.395115107297897f, 0.806707978248596f, + 0.394879996776581f, + 0.807010769844055f, 0.394644618034363f, 0.807313382625580f, + 0.394409030675888f, + 0.807615816593170f, 0.394173204898834f, 0.807918012142181f, + 0.393937170505524f, + 0.808220088481903f, 0.393700867891312f, 0.808521986007690f, + 0.393464356660843f, + 0.808823645114899f, 0.393227607011795f, 0.809125185012817f, + 0.392990618944168f, + 0.809426486492157f, 0.392753422260284f, 0.809727668762207f, + 0.392515957355499f, + 0.810028612613678f, 0.392278283834457f, 0.810329377651215f, + 0.392040401697159f, + 0.810629963874817f, 0.391802251338959f, 0.810930430889130f, + 0.391563892364502f, + 0.811230659484863f, 0.391325294971466f, 0.811530709266663f, + 0.391086459159851f, + 0.811830580234528f, 0.390847414731979f, 0.812130272388458f, + 0.390608131885529f, + 0.812429726123810f, 0.390368610620499f, 0.812729060649872f, + 0.390128880739212f, + 0.813028216362000f, 0.389888882637024f, 0.813327133655548f, + 0.389648675918579f, + 0.813625931739807f, 0.389408260583878f, 0.813924491405487f, + 0.389167606830597f, + 0.814222872257233f, 0.388926714658737f, 0.814521074295044f, + 0.388685584068298f, + 0.814819097518921f, 0.388444244861603f, 0.815116941928864f, + 0.388202667236328f, + 0.815414607524872f, 0.387960851192474f, 0.815712094306946f, + 0.387718826532364f, + 0.816009342670441f, 0.387476563453674f, 0.816306471824646f, + 0.387234061956406f, + 0.816603362560272f, 0.386991351842880f, 0.816900074481964f, + 0.386748403310776f, + 0.817196667194366f, 0.386505216360092f, 0.817493021488190f, + 0.386261820793152f, + 0.817789137363434f, 0.386018186807632f, 0.818085134029388f, + 0.385774344205856f, + 0.818380951881409f, 0.385530263185501f, 0.818676531314850f, + 0.385285943746567f, + 0.818971931934357f, 0.385041415691376f, 0.819267153739929f, + 0.384796649217606f, + 0.819562196731567f, 0.384551674127579f, 0.819857060909271f, + 0.384306460618973f, + 0.820151746273041f, 0.384061008691788f, 0.820446193218231f, + 0.383815348148346f, + 0.820740520954132f, 0.383569449186325f, 0.821034610271454f, + 0.383323341608047f, + 0.821328520774841f, 0.383076995611191f, 0.821622252464294f, + 0.382830440998077f, + 0.821915745735168f, 0.382583618164063f, 0.822209119796753f, + 0.382336616516113f, + 0.822502255439758f, 0.382089376449585f, 0.822795212268829f, + 0.381841897964478f, + 0.823087990283966f, 0.381594210863113f, 0.823380589485168f, + 0.381346285343170f, + 0.823673009872437f, 0.381098151206970f, 0.823965191841125f, + 0.380849778652191f, + 0.824257194995880f, 0.380601197481155f, 0.824549019336700f, + 0.380352377891541f, + 0.824840664863586f, 0.380103349685669f, 0.825132071971893f, + 0.379854083061218f, + 0.825423359870911f, 0.379604607820511f, 0.825714409351349f, + 0.379354894161224f, + 0.826005280017853f, 0.379104942083359f, 0.826295912265778f, + 0.378854811191559f, + 0.826586425304413f, 0.378604412078857f, 0.826876699924469f, + 0.378353834152222f, + 0.827166795730591f, 0.378102988004684f, 0.827456712722778f, + 0.377851963043213f, + 0.827746450901031f, 0.377600699663162f, 0.828035950660706f, + 0.377349197864532f, + 0.828325271606445f, 0.377097487449646f, 0.828614413738251f, + 0.376845568418503f, + 0.828903317451477f, 0.376593410968781f, 0.829192101955414f, + 0.376341015100479f, + 0.829480648040771f, 0.376088410615921f, 0.829769015312195f, + 0.375835597515106f, + 0.830057144165039f, 0.375582575798035f, 0.830345153808594f, + 0.375329315662384f, + 0.830632925033569f, 0.375075817108154f, 0.830920517444611f, + 0.374822109937668f, + 0.831207871437073f, 0.374568194150925f, 0.831495106220245f, + 0.374314039945602f, + 0.831782102584839f, 0.374059677124023f, 0.832068860530853f, + 0.373805105686188f, + 0.832355499267578f, 0.373550295829773f, 0.832641899585724f, + 0.373295277357101f, + 0.832928121089935f, 0.373040050268173f, 0.833214163780212f, + 0.372784584760666f, + 0.833499968051910f, 0.372528880834579f, 0.833785593509674f, + 0.372272998094559f, + 0.834071040153503f, 0.372016876935959f, 0.834356248378754f, + 0.371760547161102f, + 0.834641277790070f, 0.371503978967667f, 0.834926128387451f, + 0.371247202157974f, + 0.835210800170898f, 0.370990216732025f, 0.835495233535767f, + 0.370732992887497f, + 0.835779488086700f, 0.370475560426712f, 0.836063504219055f, + 0.370217919349670f, + 0.836347401142120f, 0.369960039854050f, 0.836631059646606f, + 0.369701951742172f, + 0.836914479732513f, 0.369443655014038f, 0.837197780609131f, + 0.369185149669647f, + 0.837480843067169f, 0.368926405906677f, 0.837763667106628f, + 0.368667453527451f, + 0.838046371936798f, 0.368408292531967f, 0.838328838348389f, + 0.368148893117905f, + 0.838611066341400f, 0.367889285087585f, 0.838893175125122f, + 0.367629468441010f, + 0.839175045490265f, 0.367369443178177f, 0.839456677436829f, + 0.367109179496765f, + 0.839738130569458f, 0.366848707199097f, 0.840019404888153f, + 0.366588026285172f, + 0.840300500392914f, 0.366327136754990f, 0.840581357479095f, + 0.366066008806229f, + 0.840862035751343f, 0.365804702043533f, 0.841142535209656f, + 0.365543156862259f, + 0.841422796249390f, 0.365281373262405f, 0.841702818870544f, + 0.365019410848618f, + 0.841982722282410f, 0.364757210016251f, 0.842262387275696f, + 0.364494800567627f, + 0.842541813850403f, 0.364232182502747f, 0.842821121215820f, + 0.363969355821610f, + 0.843100130558014f, 0.363706320524216f, 0.843379020690918f, + 0.363443046808243f, + 0.843657672405243f, 0.363179564476013f, 0.843936145305634f, + 0.362915903329849f, + 0.844214379787445f, 0.362651973962784f, 0.844492435455322f, + 0.362387865781784f, + 0.844770252704620f, 0.362123548984528f, 0.845047891139984f, + 0.361858993768692f, + 0.845325350761414f, 0.361594229936600f, 0.845602571964264f, + 0.361329287290573f, + 0.845879614353180f, 0.361064106225967f, 0.846156477928162f, + 0.360798716545105f, + 0.846433103084564f, 0.360533088445663f, 0.846709489822388f, + 0.360267281532288f, + 0.846985757350922f, 0.360001266002655f, 0.847261726856232f, + 0.359735012054443f, + 0.847537577152252f, 0.359468549489975f, 0.847813189029694f, + 0.359201908111572f, + 0.848088562488556f, 0.358935028314590f, 0.848363757133484f, + 0.358667939901352f, + 0.848638772964478f, 0.358400642871857f, 0.848913550376892f, + 0.358133137226105f, + 0.849188148975372f, 0.357865422964096f, 0.849462509155273f, + 0.357597470283508f, + 0.849736690521240f, 0.357329338788986f, 0.850010633468628f, + 0.357060998678207f, + 0.850284397602081f, 0.356792420148849f, 0.850557923316956f, + 0.356523662805557f, + 0.850831270217896f, 0.356254696846008f, 0.851104438304901f, + 0.355985492467880f, + 0.851377367973328f, 0.355716109275818f, 0.851650118827820f, + 0.355446487665176f, + 0.851922631263733f, 0.355176687240601f, 0.852194905281067f, + 0.354906648397446f, + 0.852467060089111f, 0.354636400938034f, 0.852738916873932f, + 0.354365974664688f, + 0.853010654449463f, 0.354095309972763f, 0.853282094001770f, + 0.353824466466904f, + 0.853553414344788f, 0.353553384542465f, 0.853824436664581f, + 0.353282123804092f, + 0.854095339775085f, 0.353010624647141f, 0.854365944862366f, + 0.352738946676254f, + 0.854636430740356f, 0.352467030286789f, 0.854906618595123f, + 0.352194935083389f, + 0.855176687240601f, 0.351922631263733f, 0.855446517467499f, + 0.351650089025497f, + 0.855716109275818f, 0.351377367973328f, 0.855985522270203f, + 0.351104438304901f, + 0.856254696846008f, 0.350831300020218f, 0.856523692607880f, + 0.350557953119278f, + 0.856792449951172f, 0.350284397602081f, 0.857060968875885f, + 0.350010633468628f, + 0.857329368591309f, 0.349736660718918f, 0.857597470283508f, + 0.349462509155273f, + 0.857865393161774f, 0.349188119173050f, 0.858133137226105f, + 0.348913550376892f, + 0.858400642871857f, 0.348638743162155f, 0.858667910099030f, + 0.348363757133484f, + 0.858934998512268f, 0.348088562488556f, 0.859201908111572f, + 0.347813159227371f, + 0.859468579292297f, 0.347537547349930f, 0.859735012054443f, + 0.347261756658554f, + 0.860001266002655f, 0.346985727548599f, 0.860267281532288f, + 0.346709519624710f, + 0.860533118247986f, 0.346433073282242f, 0.860798716545105f, + 0.346156448125839f, + 0.861064076423645f, 0.345879614353180f, 0.861329257488251f, + 0.345602601766586f, + 0.861594259738922f, 0.345325350761414f, 0.861859023571014f, + 0.345047920942307f, + 0.862123548984528f, 0.344770282506943f, 0.862387895584106f, + 0.344492435455322f, + 0.862652003765106f, 0.344214379787445f, 0.862915873527527f, + 0.343936115503311f, + 0.863179564476013f, 0.343657672405243f, 0.863443076610565f, + 0.343379020690918f, + 0.863706290721893f, 0.343100160360336f, 0.863969385623932f, + 0.342821091413498f, + 0.864232182502747f, 0.342541843652725f, 0.864494800567627f, + 0.342262357473373f, + 0.864757239818573f, 0.341982692480087f, 0.865019381046295f, + 0.341702848672867f, + 0.865281403064728f, 0.341422766447067f, 0.865543127059937f, + 0.341142505407333f, + 0.865804672241211f, 0.340862035751343f, 0.866066038608551f, + 0.340581357479095f, + 0.866327106952667f, 0.340300500392914f, 0.866588056087494f, + 0.340019434690475f, + 0.866848707199097f, 0.339738160371780f, 0.867109179496765f, + 0.339456677436829f, + 0.867369413375854f, 0.339175015687943f, 0.867629468441010f, + 0.338893145322800f, + 0.867889285087585f, 0.338611096143723f, 0.868148922920227f, + 0.338328808546066f, + 0.868408262729645f, 0.338046342134476f, 0.868667483329773f, + 0.337763696908951f, + 0.868926405906677f, 0.337480813264847f, 0.869185149669647f, + 0.337197750806808f, + 0.869443655014038f, 0.336914509534836f, 0.869701981544495f, + 0.336631029844284f, + 0.869960069656372f, 0.336347371339798f, 0.870217919349670f, + 0.336063534021378f, + 0.870475590229034f, 0.335779488086700f, 0.870733022689819f, + 0.335495233535767f, + 0.870990216732025f, 0.335210770368576f, 0.871247172355652f, + 0.334926128387451f, + 0.871503949165344f, 0.334641307592392f, 0.871760547161102f, + 0.334356248378754f, + 0.872016847133636f, 0.334071010351181f, 0.872272968292236f, + 0.333785593509674f, + 0.872528910636902f, 0.333499968051910f, 0.872784554958344f, + 0.333214133977890f, + 0.873040020465851f, 0.332928121089935f, 0.873295307159424f, + 0.332641899585724f, + 0.873550295829773f, 0.332355499267578f, 0.873805105686188f, + 0.332068890333176f, + 0.874059677124023f, 0.331782072782516f, 0.874314069747925f, + 0.331495076417923f, + 0.874568223953247f, 0.331207901239395f, 0.874822139739990f, + 0.330920487642288f, + 0.875075817108154f, 0.330632925033569f, 0.875329315662384f, + 0.330345153808594f, + 0.875582575798035f, 0.330057173967361f, 0.875835597515106f, + 0.329769015312195f, + 0.876088440418243f, 0.329480648040771f, 0.876341044902802f, + 0.329192101955414f, + 0.876593410968781f, 0.328903347253799f, 0.876845538616180f, + 0.328614413738251f, + 0.877097487449646f, 0.328325271606445f, 0.877349197864532f, + 0.328035950660706f, + 0.877600669860840f, 0.327746421098709f, 0.877851963043213f, + 0.327456712722778f, + 0.878103017807007f, 0.327166795730591f, 0.878353834152222f, + 0.326876699924469f, + 0.878604412078857f, 0.326586425304413f, 0.878854811191559f, + 0.326295942068100f, + 0.879104971885681f, 0.326005280017853f, 0.879354894161224f, + 0.325714409351349f, + 0.879604578018188f, 0.325423330068588f, 0.879854083061218f, + 0.325132101774216f, + 0.880103349685669f, 0.324840664863586f, 0.880352377891541f, + 0.324549019336700f, + 0.880601167678833f, 0.324257194995880f, 0.880849778652191f, + 0.323965191841125f, + 0.881098151206970f, 0.323672980070114f, 0.881346285343170f, + 0.323380589485168f, + 0.881594181060791f, 0.323088020086288f, 0.881841897964478f, + 0.322795242071152f, + 0.882089376449585f, 0.322502255439758f, 0.882336616516113f, + 0.322209119796753f, + 0.882583618164063f, 0.321915775537491f, 0.882830440998077f, + 0.321622252464294f, + 0.883076965808868f, 0.321328520774841f, 0.883323311805725f, + 0.321034610271454f, + 0.883569478988647f, 0.320740520954132f, 0.883815348148346f, + 0.320446223020554f, + 0.884061038494110f, 0.320151746273041f, 0.884306430816650f, + 0.319857090711594f, + 0.884551644325256f, 0.319562226533890f, 0.884796679019928f, + 0.319267183542252f, + 0.885041415691376f, 0.318971961736679f, 0.885285973548889f, + 0.318676531314850f, + 0.885530233383179f, 0.318380922079086f, 0.885774314403534f, + 0.318085134029388f, + 0.886018216609955f, 0.317789167165756f, 0.886261820793152f, + 0.317492991685867f, + 0.886505246162415f, 0.317196637392044f, 0.886748373508453f, + 0.316900104284287f, + 0.886991322040558f, 0.316603392362595f, 0.887234091758728f, + 0.316306471824646f, + 0.887476563453674f, 0.316009372472763f, 0.887718796730042f, + 0.315712094306946f, + 0.887960851192474f, 0.315414607524872f, 0.888202667236328f, + 0.315116971731186f, + 0.888444244861603f, 0.314819127321243f, 0.888685584068298f, + 0.314521104097366f, + 0.888926684856415f, 0.314222872257233f, 0.889167606830597f, + 0.313924491405487f, + 0.889408230781555f, 0.313625901937485f, 0.889648675918579f, + 0.313327133655548f, + 0.889888882637024f, 0.313028186559677f, 0.890128850936890f, + 0.312729060649872f, + 0.890368640422821f, 0.312429755926132f, 0.890608131885529f, + 0.312130242586136f, + 0.890847444534302f, 0.311830550432205f, 0.891086459159851f, + 0.311530679464340f, + 0.891325294971466f, 0.311230629682541f, 0.891563892364502f, + 0.310930401086807f, + 0.891802251338959f, 0.310629993677139f, 0.892040371894836f, + 0.310329377651215f, + 0.892278313636780f, 0.310028612613678f, 0.892515957355499f, + 0.309727638959885f, + 0.892753422260284f, 0.309426486492157f, 0.892990648746490f, + 0.309125155210495f, + 0.893227577209473f, 0.308823645114899f, 0.893464326858521f, + 0.308521956205368f, + 0.893700897693634f, 0.308220088481903f, 0.893937170505524f, + 0.307918041944504f, + 0.894173204898834f, 0.307615786790848f, 0.894409060478210f, + 0.307313382625580f, + 0.894644618034363f, 0.307010769844055f, 0.894879996776581f, + 0.306708008050919f, + 0.895115137100220f, 0.306405037641525f, 0.895349979400635f, + 0.306101888418198f, + 0.895584642887115f, 0.305798590183258f, 0.895819067955017f, + 0.305495083332062f, + 0.896053314208984f, 0.305191397666931f, 0.896287262439728f, + 0.304887533187866f, + 0.896520972251892f, 0.304583519697189f, 0.896754503250122f, + 0.304279297590256f, + 0.896987736225128f, 0.303974896669388f, 0.897220790386200f, + 0.303670316934586f, + 0.897453546524048f, 0.303365558385849f, 0.897686123847961f, + 0.303060621023178f, + 0.897918462753296f, 0.302755534648895f, 0.898150563240051f, + 0.302450239658356f, + 0.898382425308228f, 0.302144765853882f, 0.898614048957825f, + 0.301839113235474f, + 0.898845434188843f, 0.301533311605453f, 0.899076581001282f, + 0.301227301359177f, + 0.899307489395142f, 0.300921112298965f, 0.899538159370422f, + 0.300614774227142f, + 0.899768650531769f, 0.300308227539063f, 0.899998843669891f, + 0.300001531839371f, + 0.900228857994080f, 0.299694657325745f, 0.900458574295044f, + 0.299387603998184f, + 0.900688111782074f, 0.299080342054367f, 0.900917351245880f, + 0.298772931098938f, + 0.901146411895752f, 0.298465341329575f, 0.901375174522400f, + 0.298157602548599f, + 0.901603758335114f, 0.297849655151367f, 0.901832103729248f, + 0.297541528940201f, + 0.902060210704803f, 0.297233253717422f, 0.902288019657135f, + 0.296924799680710f, + 0.902515649795532f, 0.296616137027740f, 0.902743041515350f, + 0.296307325363159f, + 0.902970194816589f, 0.295998334884644f, 0.903197109699249f, + 0.295689195394516f, + 0.903423786163330f, 0.295379847288132f, 0.903650224208832f, + 0.295070350170136f, + 0.903876423835754f, 0.294760644435883f, 0.904102385044098f, + 0.294450789690018f, + 0.904328107833862f, 0.294140785932541f, 0.904553592205048f, + 0.293830573558807f, + 0.904778838157654f, 0.293520182371140f, 0.905003845691681f, + 0.293209642171860f, + 0.905228614807129f, 0.292898923158646f, 0.905453145503998f, + 0.292588025331497f, + 0.905677437782288f, 0.292276978492737f, 0.905901491641998f, + 0.291965723037720f, + 0.906125307083130f, 0.291654318571091f, 0.906348884105682f, + 0.291342735290527f, + 0.906572222709656f, 0.291031002998352f, 0.906795322895050f, + 0.290719062089920f, + 0.907018184661865f, 0.290406972169876f, 0.907240808010101f, + 0.290094703435898f, + 0.907463192939758f, 0.289782285690308f, 0.907685279846191f, + 0.289469659328461f, + 0.907907187938690f, 0.289156883955002f, 0.908128857612610f, + 0.288843959569931f, + 0.908350288867950f, 0.288530826568604f, 0.908571481704712f, + 0.288217544555664f, + 0.908792436122894f, 0.287904083728790f, 0.909013092517853f, + 0.287590473890305f, + 0.909233570098877f, 0.287276685237885f, 0.909453809261322f, + 0.286962717771530f, + 0.909673750400543f, 0.286648571491241f, 0.909893512725830f, + 0.286334276199341f, + 0.910112977027893f, 0.286019802093506f, 0.910332262516022f, + 0.285705178976059f, + 0.910551249980927f, 0.285390377044678f, 0.910769999027252f, + 0.285075396299362f, + 0.910988569259644f, 0.284760266542435f, 0.911206841468811f, + 0.284444957971573f, + 0.911424875259399f, 0.284129470586777f, 0.911642670631409f, + 0.283813834190369f, + 0.911860227584839f, 0.283498018980026f, 0.912077546119690f, + 0.283182054758072f, + 0.912294626235962f, 0.282865911722183f, 0.912511467933655f, + 0.282549589872360f, + 0.912728071212769f, 0.282233119010925f, 0.912944436073303f, + 0.281916469335556f, + 0.913160502910614f, 0.281599670648575f, 0.913376390933990f, + 0.281282693147659f, + 0.913592040538788f, 0.280965566635132f, 0.913807392120361f, + 0.280648261308670f, + 0.914022505283356f, 0.280330777168274f, 0.914237439632416f, + 0.280013144016266f, + 0.914452075958252f, 0.279695361852646f, 0.914666473865509f, + 0.279377400875092f, + 0.914880633354187f, 0.279059261083603f, 0.915094554424286f, + 0.278740972280502f, + 0.915308177471161f, 0.278422504663467f, 0.915521621704102f, + 0.278103888034821f, + 0.915734827518463f, 0.277785122394562f, 0.915947735309601f, + 0.277466177940369f, + 0.916160404682159f, 0.277147054672241f, 0.916372895240784f, + 0.276827782392502f, + 0.916585087776184f, 0.276508361101151f, 0.916797041893005f, + 0.276188760995865f, + 0.917008757591248f, 0.275868982076645f, 0.917220234870911f, + 0.275549083948135f, + 0.917431414127350f, 0.275228977203369f, 0.917642414569855f, + 0.274908751249313f, + 0.917853116989136f, 0.274588316679001f, 0.918063640594482f, + 0.274267762899399f, + 0.918273866176605f, 0.273947030305862f, 0.918483853340149f, + 0.273626148700714f, + 0.918693602085114f, 0.273305088281631f, 0.918903112411499f, + 0.272983878850937f, + 0.919112324714661f, 0.272662490606308f, 0.919321358203888f, + 0.272340953350067f, + 0.919530093669891f, 0.272019267082214f, 0.919738650321960f, + 0.271697402000427f, + 0.919946908950806f, 0.271375387907028f, 0.920154929161072f, + 0.271053224802017f, + 0.920362710952759f, 0.270730882883072f, 0.920570194721222f, + 0.270408391952515f, + 0.920777499675751f, 0.270085722208023f, 0.920984506607056f, + 0.269762933254242f, + 0.921191275119781f, 0.269439965486526f, 0.921397805213928f, + 0.269116818904877f, + 0.921604096889496f, 0.268793523311615f, 0.921810150146484f, + 0.268470078706741f, + 0.922015964984894f, 0.268146485090256f, 0.922221481800079f, + 0.267822742462158f, + 0.922426760196686f, 0.267498821020126f, 0.922631800174713f, + 0.267174720764160f, + 0.922836601734161f, 0.266850501298904f, 0.923041164875031f, + 0.266526103019714f, + 0.923245489597321f, 0.266201555728912f, 0.923449516296387f, + 0.265876859426498f, + 0.923653304576874f, 0.265552014112473f, 0.923856854438782f, + 0.265226989984512f, + 0.924060165882111f, 0.264901816844940f, 0.924263238906860f, + 0.264576494693756f, + 0.924466013908386f, 0.264250993728638f, 0.924668610095978f, + 0.263925373554230f, + 0.924870908260345f, 0.263599574565887f, 0.925072908401489f, + 0.263273626565933f, + 0.925274729728699f, 0.262947499752045f, 0.925476312637329f, + 0.262621253728867f, + 0.925677597522736f, 0.262294828891754f, 0.925878643989563f, + 0.261968284845352f, + 0.926079452037811f, 0.261641561985016f, 0.926280021667480f, + 0.261314690113068f, + 0.926480293273926f, 0.260987639427185f, 0.926680326461792f, + 0.260660469532013f, + 0.926880121231079f, 0.260333120822906f, 0.927079677581787f, + 0.260005623102188f, + 0.927278995513916f, 0.259678006172180f, 0.927478015422821f, + 0.259350210428238f, + 0.927676856517792f, 0.259022265672684f, 0.927875399589539f, + 0.258694142103195f, + 0.928073644638062f, 0.258365899324417f, 0.928271710872650f, + 0.258037507534027f, + 0.928469479084015f, 0.257708936929703f, 0.928667008876801f, + 0.257380217313766f, + 0.928864300251007f, 0.257051378488541f, 0.929061353206635f, + 0.256722360849380f, + 0.929258108139038f, 0.256393194198608f, 0.929454624652863f, + 0.256063878536224f, + 0.929650902748108f, 0.255734413862228f, 0.929846942424774f, + 0.255404800176620f, + 0.930042684078217f, 0.255075037479401f, 0.930238187313080f, + 0.254745125770569f, + 0.930433452129364f, 0.254415065050125f, 0.930628478527069f, + 0.254084855318069f, + 0.930823206901550f, 0.253754496574402f, 0.931017756462097f, + 0.253423988819122f, + 0.931211948394775f, 0.253093332052231f, 0.931405961513519f, + 0.252762526273727f, + 0.931599736213684f, 0.252431541681290f, 0.931793212890625f, + 0.252100437879562f, + 0.931986451148987f, 0.251769185066223f, 0.932179391384125f, + 0.251437783241272f, + 0.932372152805328f, 0.251106232404709f, 0.932564616203308f, + 0.250774532556534f, + 0.932756841182709f, 0.250442683696747f, 0.932948768138886f, + 0.250110685825348f, + 0.933140456676483f, 0.249778553843498f, 0.933331906795502f, + 0.249446272850037f, + 0.933523118495941f, 0.249113827943802f, 0.933714091777802f, + 0.248781248927116f, + 0.933904767036438f, 0.248448520898819f, 0.934095203876495f, + 0.248115643858910f, + 0.934285342693329f, 0.247782632708550f, 0.934475243091583f, + 0.247449472546577f, + 0.934664964675903f, 0.247116148471832f, 0.934854328632355f, + 0.246782705187798f, + 0.935043513774872f, 0.246449097990990f, 0.935232400894165f, + 0.246115356683731f, + 0.935421049594879f, 0.245781451463699f, 0.935609400272369f, + 0.245447427034378f, + 0.935797572135925f, 0.245113238692284f, 0.935985386371613f, + 0.244778916239738f, + 0.936173021793365f, 0.244444444775581f, 0.936360359191895f, + 0.244109839200974f, + 0.936547517776489f, 0.243775084614754f, 0.936734318733215f, + 0.243440181016922f, + 0.936920940876007f, 0.243105143308640f, 0.937107264995575f, + 0.242769956588745f, + 0.937293350696564f, 0.242434620857239f, 0.937479138374329f, + 0.242099151015282f, + 0.937664687633514f, 0.241763532161713f, 0.937849998474121f, + 0.241427779197693f, + 0.938035070896149f, 0.241091892123222f, 0.938219845294952f, + 0.240755841135979f, + 0.938404381275177f, 0.240419670939446f, 0.938588619232178f, + 0.240083336830139f, + 0.938772618770599f, 0.239746883511543f, 0.938956379890442f, + 0.239410281181335f, + 0.939139902591705f, 0.239073529839516f, 0.939323127269745f, + 0.238736644387245f, + 0.939506113529205f, 0.238399609923363f, 0.939688861370087f, + 0.238062441349030f, + 0.939871311187744f, 0.237725138664246f, 0.940053522586823f, + 0.237387686967850f, + 0.940235435962677f, 0.237050101161003f, 0.940417110919952f, + 0.236712381243706f, + 0.940598547458649f, 0.236374512314796f, 0.940779745578766f, + 0.236036509275436f, + 0.940960645675659f, 0.235698372125626f, 0.941141307353973f, + 0.235360085964203f, + 0.941321671009064f, 0.235021665692329f, 0.941501796245575f, + 0.234683111310005f, + 0.941681683063507f, 0.234344407916069f, 0.941861271858215f, + 0.234005570411682f, + 0.942040622234344f, 0.233666598796844f, 0.942219734191895f, + 0.233327493071556f, + 0.942398548126221f, 0.232988253235817f, 0.942577123641968f, + 0.232648864388466f, + 0.942755401134491f, 0.232309341430664f, 0.942933499813080f, + 0.231969684362412f, + 0.943111240863800f, 0.231629893183708f, 0.943288803100586f, + 0.231289967894554f, + 0.943466067314148f, 0.230949893593788f, 0.943643093109131f, + 0.230609700083733f, + 0.943819820880890f, 0.230269357562065f, 0.943996310234070f, + 0.229928880929947f, + 0.944172501564026f, 0.229588270187378f, 0.944348454475403f, + 0.229247525334358f, + 0.944524168968201f, 0.228906646370888f, 0.944699645042419f, + 0.228565633296967f, + 0.944874763488770f, 0.228224486112595f, 0.945049703121185f, + 0.227883204817772f, + 0.945224344730377f, 0.227541789412498f, 0.945398747920990f, + 0.227200239896774f, + 0.945572853088379f, 0.226858556270599f, 0.945746779441834f, + 0.226516738533974f, + 0.945920348167419f, 0.226174786686897f, 0.946093678474426f, + 0.225832715630531f, + 0.946266770362854f, 0.225490495562553f, 0.946439623832703f, + 0.225148141384125f, + 0.946612179279327f, 0.224805667996407f, 0.946784436702728f, + 0.224463045597076f, + 0.946956455707550f, 0.224120303988457f, 0.947128236293793f, + 0.223777428269386f, + 0.947299718856812f, 0.223434418439865f, 0.947470963001251f, + 0.223091274499893f, + 0.947641968727112f, 0.222748011350632f, 0.947812676429749f, + 0.222404599189758f, + 0.947983145713806f, 0.222061067819595f, 0.948153316974640f, + 0.221717402338982f, + 0.948323249816895f, 0.221373617649078f, 0.948492884635925f, + 0.221029683947563f, + 0.948662281036377f, 0.220685631036758f, 0.948831439018250f, + 0.220341444015503f, + 0.949000298976898f, 0.219997137784958f, 0.949168920516968f, + 0.219652697443962f, + 0.949337244033813f, 0.219308122992516f, 0.949505329132080f, + 0.218963414430618f, + 0.949673116207123f, 0.218618586659431f, 0.949840664863586f, + 0.218273624777794f, + 0.950007975101471f, 0.217928543686867f, 0.950174987316132f, + 0.217583328485489f, + 0.950341701507568f, 0.217237979173660f, 0.950508177280426f, + 0.216892510652542f, + 0.950674414634705f, 0.216546908020973f, 0.950840353965759f, + 0.216201186180115f, + 0.951006054878235f, 0.215855330228806f, 0.951171517372131f, + 0.215509355068207f, + 0.951336681842804f, 0.215163245797157f, 0.951501548290253f, + 0.214817002415657f, + 0.951666176319122f, 0.214470639824867f, 0.951830565929413f, + 0.214124158024788f, + 0.951994657516479f, 0.213777542114258f, 0.952158451080322f, + 0.213430806994438f, + 0.952322065830231f, 0.213083937764168f, 0.952485322952271f, + 0.212736949324608f, + 0.952648401260376f, 0.212389841675758f, 0.952811121940613f, + 0.212042599916458f, + 0.952973663806915f, 0.211695238947868f, 0.953135907649994f, + 0.211347743868828f, + 0.953297853469849f, 0.211000129580498f, 0.953459560871124f, + 0.210652396082878f, + 0.953620970249176f, 0.210304543375969f, 0.953782141208649f, + 0.209956556558609f, + 0.953943073749542f, 0.209608450531960f, 0.954103708267212f, + 0.209260210394859f, + 0.954264044761658f, 0.208911851048470f, 0.954424142837524f, + 0.208563387393951f, + 0.954584002494812f, 0.208214774727821f, 0.954743564128876f, + 0.207866057753563f, + 0.954902827739716f, 0.207517206668854f, 0.955061912536621f, + 0.207168251276016f, + 0.955220639705658f, 0.206819161772728f, 0.955379128456116f, + 0.206469938158989f, + 0.955537378787994f, 0.206120610237122f, 0.955695331096649f, + 0.205771163105965f, + 0.955853044986725f, 0.205421581864357f, 0.956010460853577f, + 0.205071896314621f, + 0.956167578697205f, 0.204722076654434f, 0.956324458122253f, + 0.204372137784958f, + 0.956481099128723f, 0.204022079706192f, 0.956637442111969f, + 0.203671902418137f, + 0.956793546676636f, 0.203321605920792f, 0.956949353218079f, + 0.202971190214157f, + 0.957104861736298f, 0.202620655298233f, 0.957260131835938f, + 0.202270001173019f, + 0.957415163516998f, 0.201919227838516f, 0.957569897174835f, + 0.201568335294724f, + 0.957724332809448f, 0.201217323541641f, 0.957878530025482f, + 0.200866192579269f, + 0.958032488822937f, 0.200514942407608f, 0.958186149597168f, + 0.200163587927818f, + 0.958339512348175f, 0.199812099337578f, 0.958492636680603f, + 0.199460506439209f, + 0.958645522594452f, 0.199108779430389f, 0.958798050880432f, + 0.198756948113441f, + 0.958950400352478f, 0.198404997587204f, 0.959102451801300f, + 0.198052927851677f, + 0.959254205226898f, 0.197700738906860f, 0.959405720233917f, + 0.197348430752754f, + 0.959556937217712f, 0.196996018290520f, 0.959707856178284f, + 0.196643486618996f, + 0.959858596324921f, 0.196290835738182f, 0.960008978843689f, + 0.195938065648079f, + 0.960159122943878f, 0.195585191249847f, 0.960309028625488f, + 0.195232197642326f, + 0.960458636283875f, 0.194879084825516f, 0.960607945919037f, + 0.194525867700577f, + 0.960757017135620f, 0.194172516465187f, 0.960905790328979f, + 0.193819075822830f, + 0.961054325103760f, 0.193465501070023f, 0.961202561855316f, + 0.193111822009087f, + 0.961350560188293f, 0.192758023738861f, 0.961498260498047f, + 0.192404121160507f, + 0.961645722389221f, 0.192050099372864f, 0.961792886257172f, + 0.191695958375931f, + 0.961939752101898f, 0.191341713070869f, 0.962086379528046f, + 0.190987363457680f, + 0.962232708930969f, 0.190632879734039f, 0.962378799915314f, + 0.190278306603432f, + 0.962524592876434f, 0.189923599362373f, 0.962670147418976f, + 0.189568802714348f, + 0.962815403938293f, 0.189213871955872f, 0.962960422039032f, + 0.188858851790428f, + 0.963105142116547f, 0.188503712415695f, 0.963249564170837f, + 0.188148453831673f, + 0.963393747806549f, 0.187793090939522f, 0.963537633419037f, + 0.187437608838081f, + 0.963681280612946f, 0.187082037329674f, 0.963824629783630f, + 0.186726331710815f, + 0.963967680931091f, 0.186370536684990f, 0.964110493659973f, + 0.186014622449875f, + 0.964253067970276f, 0.185658603906631f, 0.964395284652710f, + 0.185302466154099f, + 0.964537262916565f, 0.184946224093437f, 0.964679002761841f, + 0.184589877724648f, + 0.964820444583893f, 0.184233412146568f, 0.964961588382721f, + 0.183876842260361f, + 0.965102493762970f, 0.183520168066025f, 0.965243160724640f, + 0.183163389563560f, + 0.965383470058441f, 0.182806491851807f, 0.965523540973663f, + 0.182449504733086f, + 0.965663373470306f, 0.182092398405075f, 0.965802907943726f, + 0.181735187768936f, + 0.965942144393921f, 0.181377857923508f, 0.966081082820892f, + 0.181020438671112f, + 0.966219842433929f, 0.180662900209427f, 0.966358244419098f, + 0.180305257439613f, + 0.966496407985687f, 0.179947525262833f, 0.966634273529053f, + 0.179589673876762f, + 0.966771900653839f, 0.179231703281403f, 0.966909229755402f, + 0.178873643279076f, + 0.967046260833740f, 0.178515478968620f, 0.967183053493500f, + 0.178157210350037f, + 0.967319548130035f, 0.177798837423325f, 0.967455804347992f, + 0.177440345287323f, + 0.967591762542725f, 0.177081763744354f, 0.967727422714233f, + 0.176723077893257f, + 0.967862844467163f, 0.176364272832870f, 0.967997968196869f, + 0.176005378365517f, + 0.968132853507996f, 0.175646379590034f, 0.968267440795898f, + 0.175287276506424f, + 0.968401730060577f, 0.174928069114685f, 0.968535780906677f, + 0.174568757414818f, + 0.968669533729553f, 0.174209341406822f, 0.968802988529205f, + 0.173849821090698f, + 0.968936204910278f, 0.173490211367607f, 0.969069123268127f, + 0.173130482435226f, + 0.969201743602753f, 0.172770664095879f, 0.969334125518799f, + 0.172410741448402f, + 0.969466269016266f, 0.172050714492798f, 0.969598054885864f, + 0.171690583229065f, + 0.969729602336884f, 0.171330362558365f, 0.969860911369324f, + 0.170970037579536f, + 0.969991862773895f, 0.170609608292580f, 0.970122575759888f, + 0.170249074697495f, + 0.970253050327301f, 0.169888436794281f, 0.970383226871490f, + 0.169527709484100f, + 0.970513105392456f, 0.169166877865791f, 0.970642685890198f, + 0.168805956840515f, + 0.970772027969360f, 0.168444931507111f, 0.970901072025299f, + 0.168083801865578f, + 0.971029877662659f, 0.167722567915916f, 0.971158385276794f, + 0.167361244559288f, + 0.971286594867706f, 0.166999831795692f, 0.971414566040039f, + 0.166638299822807f, + 0.971542239189148f, 0.166276678442955f, 0.971669614315033f, + 0.165914967656136f, + 0.971796751022339f, 0.165553152561188f, 0.971923589706421f, + 0.165191248059273f, + 0.972050130367279f, 0.164829224348068f, 0.972176432609558f, + 0.164467126131058f, + 0.972302436828613f, 0.164104923605919f, 0.972428143024445f, + 0.163742616772652f, + 0.972553610801697f, 0.163380220532417f, 0.972678780555725f, + 0.163017734885216f, + 0.972803652286530f, 0.162655144929886f, 0.972928285598755f, + 0.162292465567589f, + 0.973052620887756f, 0.161929681897163f, 0.973176658153534f, + 0.161566808819771f, + 0.973300457000732f, 0.161203846335411f, 0.973423957824707f, + 0.160840779542923f, + 0.973547160625458f, 0.160477623343468f, 0.973670125007629f, + 0.160114362835884f, + 0.973792791366577f, 0.159751012921333f, 0.973915159702301f, + 0.159387573599815f, + 0.974037289619446f, 0.159024044871330f, 0.974159121513367f, + 0.158660411834717f, + 0.974280655384064f, 0.158296689391136f, 0.974401950836182f, + 0.157932877540588f, + 0.974522948265076f, 0.157568961381912f, 0.974643647670746f, + 0.157204970717430f, + 0.974764108657837f, 0.156840875744820f, 0.974884271621704f, + 0.156476691365242f, + 0.975004136562347f, 0.156112402677536f, 0.975123703479767f, + 0.155748039484024f, + 0.975243031978607f, 0.155383571982384f, 0.975362062454224f, + 0.155019029974937f, + 0.975480854511261f, 0.154654383659363f, 0.975599288940430f, + 0.154289647936821f, + 0.975717484951019f, 0.153924822807312f, 0.975835442543030f, + 0.153559908270836f, + 0.975953042507172f, 0.153194904327393f, 0.976070404052734f, + 0.152829796075821f, + 0.976187527179718f, 0.152464613318443f, 0.976304292678833f, + 0.152099341154099f, + 0.976420819759369f, 0.151733979582787f, 0.976537048816681f, + 0.151368513703346f, + 0.976653039455414f, 0.151002973318100f, 0.976768672466278f, + 0.150637343525887f, + 0.976884067058563f, 0.150271624326706f, 0.976999223232269f, + 0.149905815720558f, + 0.977114021778107f, 0.149539917707443f, 0.977228581905365f, + 0.149173930287361f, + 0.977342903614044f, 0.148807853460312f, 0.977456867694855f, + 0.148441687226295f, + 0.977570593357086f, 0.148075446486473f, 0.977684020996094f, + 0.147709101438522f, + 0.977797150611877f, 0.147342681884766f, 0.977910041809082f, + 0.146976172924042f, + 0.978022634983063f, 0.146609574556351f, 0.978134930133820f, + 0.146242901682854f, + 0.978246986865997f, 0.145876124501228f, 0.978358685970306f, + 0.145509272813797f, + 0.978470146656036f, 0.145142331719399f, 0.978581368923187f, + 0.144775316119194f, + 0.978692233562469f, 0.144408211112022f, 0.978802859783173f, + 0.144041016697884f, + 0.978913187980652f, 0.143673732876778f, 0.979023277759552f, + 0.143306359648705f, + 0.979133009910584f, 0.142938911914825f, 0.979242503643036f, + 0.142571389675140f, + 0.979351758956909f, 0.142203763127327f, 0.979460656642914f, + 0.141836062073708f, + 0.979569315910339f, 0.141468286514282f, 0.979677677154541f, + 0.141100421547890f, + 0.979785740375519f, 0.140732467174530f, 0.979893565177917f, + 0.140364438295364f, + 0.980001091957092f, 0.139996320009232f, 0.980108320713043f, + 0.139628127217293f, + 0.980215251445770f, 0.139259845018387f, 0.980321943759918f, + 0.138891488313675f, + 0.980428338050842f, 0.138523042201996f, 0.980534434318542f, + 0.138154521584511f, + 0.980640232563019f, 0.137785911560059f, 0.980745792388916f, + 0.137417227029800f, + 0.980851054191589f, 0.137048453092575f, 0.980956017971039f, + 0.136679604649544f, + 0.981060683727264f, 0.136310681700706f, 0.981165111064911f, + 0.135941669344902f, + 0.981269240379334f, 0.135572582483292f, 0.981373071670532f, + 0.135203406214714f, + 0.981476604938507f, 0.134834155440331f, 0.981579899787903f, + 0.134464830160141f, + 0.981682896614075f, 0.134095430374146f, 0.981785595417023f, + 0.133725941181183f, + 0.981888055801392f, 0.133356377482414f, 0.981990158557892f, + 0.132986739277840f, + 0.982092022895813f, 0.132617011666298f, 0.982193589210510f, + 0.132247209548950f, + 0.982294917106628f, 0.131877332925797f, 0.982395887374878f, + 0.131507381796837f, + 0.982496619224548f, 0.131137356162071f, 0.982597053050995f, + 0.130767241120338f, + 0.982697248458862f, 0.130397051572800f, 0.982797086238861f, + 0.130026802420616f, + 0.982896685600281f, 0.129656463861465f, 0.982995986938477f, + 0.129286035895348f, + 0.983094990253448f, 0.128915548324585f, 0.983193755149841f, + 0.128544986248016f, + 0.983292162418365f, 0.128174334764481f, 0.983390331268311f, + 0.127803623676300f, + 0.983488261699677f, 0.127432823181152f, 0.983585834503174f, + 0.127061963081360f, + 0.983683168888092f, 0.126691013574600f, 0.983780145645142f, + 0.126320004463196f, + 0.983876943588257f, 0.125948905944824f, 0.983973383903503f, + 0.125577747821808f, + 0.984069526195526f, 0.125206500291824f, 0.984165430068970f, + 0.124835193157196f, + 0.984261035919189f, 0.124463804066181f, 0.984356343746185f, + 0.124092340469360f, + 0.984451413154602f, 0.123720809817314f, 0.984546124935150f, + 0.123349204659462f, + 0.984640598297119f, 0.122977524995804f, 0.984734773635864f, + 0.122605770826340f, + 0.984828710556030f, 0.122233949601650f, 0.984922289848328f, + 0.121862053871155f, + 0.985015630722046f, 0.121490091085434f, 0.985108673572540f, + 0.121118053793907f, + 0.985201418399811f, 0.120745941996574f, 0.985293865203857f, + 0.120373763144016f, + 0.985386073589325f, 0.120001509785652f, 0.985477983951569f, + 0.119629189372063f, + 0.985569596290588f, 0.119256794452667f, 0.985660910606384f, + 0.118884332478046f, + 0.985751926898956f, 0.118511803448200f, 0.985842704772949f, + 0.118139199912548f, + 0.985933184623718f, 0.117766529321671f, 0.986023366451263f, + 0.117393791675568f, + 0.986113250255585f, 0.117020979523659f, 0.986202836036682f, + 0.116648100316525f, + 0.986292183399200f, 0.116275154054165f, 0.986381232738495f, + 0.115902140736580f, + 0.986469984054565f, 0.115529052913189f, 0.986558437347412f, + 0.115155905485153f, + 0.986646652221680f, 0.114782683551311f, 0.986734509468079f, + 0.114409394562244f, + 0.986822128295898f, 0.114036038517952f, 0.986909449100494f, + 0.113662622869015f, + 0.986996471881866f, 0.113289132714272f, 0.987083256244659f, + 0.112915575504303f, + 0.987169682979584f, 0.112541958689690f, 0.987255871295929f, + 0.112168267369270f, + 0.987341761589050f, 0.111794516444206f, 0.987427353858948f, + 0.111420698463917f, + 0.987512648105621f, 0.111046813428402f, 0.987597703933716f, + 0.110672861337662f, + 0.987682461738586f, 0.110298842191696f, 0.987766921520233f, + 0.109924763441086f, + 0.987851083278656f, 0.109550617635250f, 0.987934947013855f, + 0.109176412224770f, + 0.988018512725830f, 0.108802139759064f, 0.988101840019226f, + 0.108427800238132f, + 0.988184869289398f, 0.108053401112556f, 0.988267600536346f, + 0.107678934931755f, + 0.988350033760071f, 0.107304409146309f, 0.988432228565216f, + 0.106929816305637f, + 0.988514065742493f, 0.106555156409740f, 0.988595664501190f, + 0.106180444359779f, + 0.988676965236664f, 0.105805665254593f, 0.988757967948914f, + 0.105430819094181f, + 0.988838672637939f, 0.105055920779705f, 0.988919138908386f, + 0.104680955410004f, + 0.988999247550964f, 0.104305922985077f, 0.989079117774963f, + 0.103930838406086f, + 0.989158689975739f, 0.103555686771870f, 0.989237964153290f, + 0.103180475533009f, + 0.989316940307617f, 0.102805204689503f, 0.989395678043365f, + 0.102429874241352f, + 0.989474058151245f, 0.102054484188557f, 0.989552199840546f, + 0.101679034531116f, + 0.989630043506622f, 0.101303517818451f, 0.989707589149475f, + 0.100927948951721f, + 0.989784896373749f, 0.100552320480347f, 0.989861845970154f, + 0.100176624953747f, + 0.989938557147980f, 0.099800877273083f, 0.990014970302582f, + 0.099425069987774f, + 0.990091085433960f, 0.099049203097820f, 0.990166902542114f, + 0.098673284053802f, + 0.990242421627045f, 0.098297297954559f, 0.990317702293396f, + 0.097921259701252f, + 0.990392625331879f, 0.097545161843300f, 0.990467309951782f, + 0.097169004380703f, + 0.990541696548462f, 0.096792794764042f, 0.990615785121918f, + 0.096416525542736f, + 0.990689575672150f, 0.096040196716785f, 0.990763127803802f, + 0.095663815736771f, + 0.990836322307587f, 0.095287375152111f, 0.990909278392792f, + 0.094910882413387f, + 0.990981936454773f, 0.094534330070019f, 0.991054296493530f, + 0.094157725572586f, + 0.991126358509064f, 0.093781061470509f, 0.991198182106018f, + 0.093404345214367f, + 0.991269648075104f, 0.093027576804161f, 0.991340875625610f, + 0.092650748789310f, + 0.991411805152893f, 0.092273868620396f, 0.991482377052307f, + 0.091896936297417f, + 0.991552770137787f, 0.091519944369793f, 0.991622805595398f, + 0.091142900288105f, + 0.991692543029785f, 0.090765804052353f, 0.991762042045593f, + 0.090388655662537f, + 0.991831183433533f, 0.090011447668076f, 0.991900086402893f, + 0.089634194970131f, + 0.991968691349030f, 0.089256882667542f, 0.992036998271942f, + 0.088879525661469f, + 0.992105066776276f, 0.088502109050751f, 0.992172777652740f, + 0.088124647736549f, + 0.992240250110626f, 0.087747126817703f, 0.992307364940643f, + 0.087369553744793f, + 0.992374241352081f, 0.086991935968399f, 0.992440819740295f, + 0.086614266037941f, + 0.992507100105286f, 0.086236543953419f, 0.992573142051697f, + 0.085858769714832f, + 0.992638826370239f, 0.085480943322182f, 0.992704212665558f, + 0.085103072226048f, + 0.992769360542297f, 0.084725148975849f, 0.992834210395813f, + 0.084347173571587f, + 0.992898762226105f, 0.083969146013260f, 0.992963016033173f, + 0.083591073751450f, + 0.993026971817017f, 0.083212949335575f, 0.993090689182281f, + 0.082834780216217f, + 0.993154048919678f, 0.082456558942795f, 0.993217170238495f, + 0.082078292965889f, + 0.993279933929443f, 0.081699974834919f, 0.993342459201813f, + 0.081321612000465f, + 0.993404686450958f, 0.080943197011948f, 0.993466615676880f, + 0.080564737319946f, + 0.993528306484222f, 0.080186225473881f, 0.993589639663696f, + 0.079807676374912f, + 0.993650734424591f, 0.079429075121880f, 0.993711471557617f, + 0.079050421714783f, + 0.993771970272064f, 0.078671731054783f, 0.993832170963287f, + 0.078292988240719f, + 0.993892073631287f, 0.077914200723171f, 0.993951678276062f, + 0.077535368502140f, + 0.994010984897614f, 0.077156484127045f, 0.994070053100586f, + 0.076777562499046f, + 0.994128763675690f, 0.076398596167564f, 0.994187235832214f, + 0.076019577682018f, + 0.994245409965515f, 0.075640521943569f, 0.994303286075592f, + 0.075261414051056f, + 0.994360864162445f, 0.074882268905640f, 0.994418144226074f, + 0.074503071606159f, + 0.994475126266479f, 0.074123837053776f, 0.994531810283661f, + 0.073744557797909f, + 0.994588255882263f, 0.073365233838558f, 0.994644403457642f, + 0.072985872626305f, + 0.994700193405151f, 0.072606459259987f, 0.994755744934082f, + 0.072227008640766f, + 0.994810998439789f, 0.071847513318062f, 0.994865953922272f, + 0.071467980742455f, + 0.994920611381531f, 0.071088403463364f, 0.994975030422211f, + 0.070708781480789f, + 0.995029091835022f, 0.070329122245312f, 0.995082914829254f, + 0.069949418306351f, + 0.995136380195618f, 0.069569669663906f, 0.995189607143402f, + 0.069189883768559f, + 0.995242536067963f, 0.068810060620308f, 0.995295166969299f, + 0.068430192768574f, + 0.995347499847412f, 0.068050287663937f, 0.995399534702301f, + 0.067670337855816f, + 0.995451331138611f, 0.067290350794792f, 0.995502769947052f, + 0.066910326480865f, + 0.995553970336914f, 0.066530264914036f, 0.995604813098907f, + 0.066150158643723f, + 0.995655417442322f, 0.065770015120506f, 0.995705723762512f, + 0.065389834344387f, + 0.995755732059479f, 0.065009608864784f, 0.995805442333221f, + 0.064629353582859f, + 0.995854854583740f, 0.064249053597450f, 0.995904028415680f, + 0.063868723809719f, + 0.995952844619751f, 0.063488349318504f, 0.996001422405243f, + 0.063107937574387f, + 0.996049642562866f, 0.062727488577366f, 0.996097624301910f, + 0.062347009778023f, + 0.996145308017731f, 0.061966486275196f, 0.996192693710327f, + 0.061585929244757f, + 0.996239781379700f, 0.061205338686705f, 0.996286571025848f, + 0.060824707150459f, + 0.996333062648773f, 0.060444042086601f, 0.996379256248474f, + 0.060063343495131f, + 0.996425211429596f, 0.059682607650757f, 0.996470808982849f, + 0.059301838278770f, + 0.996516168117523f, 0.058921031653881f, 0.996561229228973f, + 0.058540191501379f, + 0.996605992317200f, 0.058159314095974f, 0.996650457382202f, + 0.057778406888247f, + 0.996694624423981f, 0.057397462427616f, 0.996738493442535f, + 0.057016488164663f, + 0.996782064437866f, 0.056635476648808f, 0.996825337409973f, + 0.056254431605339f, + 0.996868371963501f, 0.055873356759548f, 0.996911048889160f, + 0.055492244660854f, + 0.996953487396240f, 0.055111102759838f, 0.996995627880096f, + 0.054729927331209f, + 0.997037410736084f, 0.054348722100258f, 0.997078955173492f, + 0.053967483341694f, + 0.997120201587677f, 0.053586211055517f, 0.997161149978638f, + 0.053204908967018f, + 0.997201859951019f, 0.052823577076197f, 0.997242212295532f, + 0.052442211657763f, + 0.997282266616821f, 0.052060816437006f, 0.997322082519531f, + 0.051679391413927f, + 0.997361540794373f, 0.051297932863235f, 0.997400760650635f, + 0.050916448235512f, + 0.997439682483673f, 0.050534930080175f, 0.997478306293488f, + 0.050153385847807f, + 0.997516572475433f, 0.049771808087826f, 0.997554600238800f, + 0.049390204250813f, + 0.997592389583588f, 0.049008570611477f, 0.997629821300507f, + 0.048626907169819f, + 0.997666954994202f, 0.048245213925838f, 0.997703790664673f, + 0.047863494604826f, + 0.997740387916565f, 0.047481749206781f, 0.997776627540588f, + 0.047099970281124f, + 0.997812628746033f, 0.046718169003725f, 0.997848331928253f, + 0.046336337924004f, + 0.997883677482605f, 0.045954477041960f, 0.997918784618378f, + 0.045572593808174f, + 0.997953593730927f, 0.045190680772066f, 0.997988104820251f, + 0.044808741658926f, + 0.998022377490997f, 0.044426776468754f, 0.998056292533875f, + 0.044044785201550f, + 0.998089909553528f, 0.043662767857313f, 0.998123228549957f, + 0.043280724436045f, + 0.998156309127808f, 0.042898654937744f, 0.998189091682434f, + 0.042516563087702f, + 0.998221516609192f, 0.042134445160627f, 0.998253703117371f, + 0.041752301156521f, + 0.998285591602325f, 0.041370131075382f, 0.998317182064056f, + 0.040987938642502f, + 0.998348474502563f, 0.040605723857880f, 0.998379468917847f, + 0.040223482996225f, + 0.998410165309906f, 0.039841219782829f, 0.998440563678741f, + 0.039458930492401f, + 0.998470664024353f, 0.039076622575521f, 0.998500525951386f, + 0.038694288581610f, + 0.998530030250549f, 0.038311932235956f, 0.998559296131134f, + 0.037929553538561f, + 0.998588204383850f, 0.037547148764133f, 0.998616874217987f, + 0.037164725363255f, + 0.998645246028900f, 0.036782283335924f, 0.998673319816589f, + 0.036399815231562f, + 0.998701035976410f, 0.036017324775457f, 0.998728513717651f, + 0.035634815692902f, + 0.998755753040314f, 0.035252287983894f, 0.998782634735107f, + 0.034869734197855f, + 0.998809218406677f, 0.034487165510654f, 0.998835504055023f, + 0.034104570746422f, + 0.998861551284790f, 0.033721961081028f, 0.998887240886688f, + 0.033339329063892f, + 0.998912692070007f, 0.032956674695015f, 0.998937785625458f, + 0.032574005424976f, + 0.998962640762329f, 0.032191313803196f, 0.998987197875977f, + 0.031808607280254f, + 0.999011456966400f, 0.031425878405571f, 0.999035418033600f, + 0.031043132767081f, + 0.999059081077576f, 0.030660368502140f, 0.999082446098328f, + 0.030277585610747f, + 0.999105513095856f, 0.029894785955548f, 0.999128282070160f, + 0.029511967673898f, + 0.999150753021240f, 0.029129132628441f, 0.999172985553741f, + 0.028746278956532f, + 0.999194860458374f, 0.028363410383463f, 0.999216496944427f, + 0.027980525046587f, + 0.999237775802612f, 0.027597622945905f, 0.999258816242218f, + 0.027214704081416f, + 0.999279558658600f, 0.026831768453121f, 0.999299943447113f, + 0.026448817923665f, + 0.999320089817047f, 0.026065852493048f, 0.999339938163757f, + 0.025682870298624f, + 0.999359488487244f, 0.025299875065684f, 0.999378740787506f, + 0.024916863068938f, + 0.999397754669189f, 0.024533838033676f, 0.999416410923004f, + 0.024150796234608f, + 0.999434769153595f, 0.023767741397023f, 0.999452829360962f, + 0.023384673520923f, + 0.999470651149750f, 0.023001590743661f, 0.999488115310669f, + 0.022618494927883f, + 0.999505341053009f, 0.022235386073589f, 0.999522268772125f, + 0.021852264180779f, + 0.999538838863373f, 0.021469129249454f, 0.999555170536041f, + 0.021085981279612f, + 0.999571204185486f, 0.020702820271254f, 0.999586939811707f, + 0.020319648087025f, + 0.999602377414703f, 0.019936462864280f, 0.999617516994476f, + 0.019553268328309f, + 0.999632358551025f, 0.019170060753822f, 0.999646902084351f, + 0.018786842003465f, + 0.999661207199097f, 0.018403612077236f, 0.999675154685974f, + 0.018020370975137f, + 0.999688863754272f, 0.017637118697166f, 0.999702215194702f, + 0.017253857105970f, + 0.999715328216553f, 0.016870586201549f, 0.999728083610535f, + 0.016487304121256f, + 0.999740600585938f, 0.016104012727737f, 0.999752819538116f, + 0.015720712020993f, + 0.999764680862427f, 0.015337402001023f, 0.999776303768158f, + 0.014954082667828f, + 0.999787628650665f, 0.014570754021406f, 0.999798655509949f, + 0.014187417924404f, + 0.999809384346008f, 0.013804072514176f, 0.999819874763489f, + 0.013420719653368f, + 0.999830007553101f, 0.013037359341979f, 0.999839842319489f, + 0.012653990648687f, + 0.999849438667297f, 0.012270614504814f, 0.999858677387238f, + 0.011887230910361f, + 0.999867618083954f, 0.011503840796649f, 0.999876320362091f, + 0.011120444163680f, + 0.999884724617004f, 0.010737040080130f, 0.999892771244049f, + 0.010353630408645f, + 0.999900579452515f, 0.009970214217901f, 0.999908089637756f, + 0.009586792439222f, + 0.999915301799774f, 0.009203365072608f, 0.999922215938568f, + 0.008819932118058f, + 0.999928832054138f, 0.008436493575573f, 0.999935150146484f, + 0.008053051307797f, + 0.999941170215607f, 0.007669602986425f, 0.999946892261505f, + 0.007286150939763f, + 0.999952375888824f, 0.006902694236487f, 0.999957501888275f, + 0.006519233807921f, + 0.999962329864502f, 0.006135769188404f, 0.999966919422150f, + 0.005752300843596f, + 0.999971151351929f, 0.005368829704821f, 0.999975144863129f, + 0.004985354840755f, + 0.999978840351105f, 0.004601877182722f, 0.999982178211212f, + 0.004218397196382f, + 0.999985277652740f, 0.003834914416075f, 0.999988079071045f, + 0.003451429307461f, + 0.999990582466125f, 0.003067942336202f, 0.999992787837982f, + 0.002684453502297f, + 0.999994695186615f, 0.002300963038579f, 0.999996304512024f, + 0.001917471294291f, + 0.999997675418854f, 0.001533978385851f, 0.999998688697815f, + 0.001150484546088f, + 0.999999403953552f, 0.000766990066040f, 0.999999880790710f, + 0.000383495149435f, + 1.000000000000000f, 0.000000000000023f, 0.999999880790710f, + -0.000383495149435f, + 0.999999403953552f, -0.000766990066040f, 0.999998688697815f, + -0.001150484546088f, + 0.999997675418854f, -0.001533978385851f, 0.999996304512024f, + -0.001917471294291f, + 0.999994695186615f, -0.002300963038579f, 0.999992787837982f, + -0.002684453502297f, + 0.999990582466125f, -0.003067942336202f, 0.999988079071045f, + -0.003451429307461f, + 0.999985277652740f, -0.003834914416075f, 0.999982178211212f, + -0.004218397196382f, + 0.999978840351105f, -0.004601877182722f, 0.999975144863129f, + -0.004985354840755f, + 0.999971151351929f, -0.005368829704821f, 0.999966919422150f, + -0.005752300843596f, + 0.999962329864502f, -0.006135769188404f, 0.999957501888275f, + -0.006519233807921f, + 0.999952375888824f, -0.006902694236487f, 0.999946892261505f, + -0.007286150939763f, + 0.999941170215607f, -0.007669602986425f, 0.999935150146484f, + -0.008053051307797f, + 0.999928832054138f, -0.008436493575573f, 0.999922215938568f, + -0.008819932118058f, + 0.999915301799774f, -0.009203365072608f, 0.999908089637756f, + -0.009586792439222f, + 0.999900579452515f, -0.009970214217901f, 0.999892771244049f, + -0.010353630408645f, + 0.999884724617004f, -0.010737040080130f, 0.999876320362091f, + -0.011120444163680f, + 0.999867618083954f, -0.011503840796649f, 0.999858677387238f, + -0.011887230910361f, + 0.999849438667297f, -0.012270614504814f, 0.999839842319489f, + -0.012653990648687f, + 0.999830007553101f, -0.013037359341979f, 0.999819874763489f, + -0.013420719653368f, + 0.999809384346008f, -0.013804072514176f, 0.999798655509949f, + -0.014187417924404f, + 0.999787628650665f, -0.014570754021406f, 0.999776303768158f, + -0.014954082667828f, + 0.999764680862427f, -0.015337402001023f, 0.999752819538116f, + -0.015720712020993f, + 0.999740600585938f, -0.016104012727737f, 0.999728083610535f, + -0.016487304121256f, + 0.999715328216553f, -0.016870586201549f, 0.999702215194702f, + -0.017253857105970f, + 0.999688863754272f, -0.017637118697166f, 0.999675154685974f, + -0.018020370975137f, + 0.999661207199097f, -0.018403612077236f, 0.999646902084351f, + -0.018786842003465f, + 0.999632358551025f, -0.019170060753822f, 0.999617516994476f, + -0.019553268328309f, + 0.999602377414703f, -0.019936462864280f, 0.999586939811707f, + -0.020319648087025f, + 0.999571204185486f, -0.020702820271254f, 0.999555170536041f, + -0.021085981279612f, + 0.999538838863373f, -0.021469129249454f, 0.999522268772125f, + -0.021852264180779f, + 0.999505341053009f, -0.022235386073589f, 0.999488115310669f, + -0.022618494927883f, + 0.999470651149750f, -0.023001590743661f, 0.999452829360962f, + -0.023384673520923f, + 0.999434769153595f, -0.023767741397023f, 0.999416410923004f, + -0.024150796234608f, + 0.999397754669189f, -0.024533838033676f, 0.999378740787506f, + -0.024916863068938f, + 0.999359488487244f, -0.025299875065684f, 0.999339938163757f, + -0.025682870298624f, + 0.999320089817047f, -0.026065852493048f, 0.999299943447113f, + -0.026448817923665f, + 0.999279558658600f, -0.026831768453121f, 0.999258816242218f, + -0.027214704081416f, + 0.999237775802612f, -0.027597622945905f, 0.999216496944427f, + -0.027980525046587f, + 0.999194860458374f, -0.028363410383463f, 0.999172985553741f, + -0.028746278956532f, + 0.999150753021240f, -0.029129132628441f, 0.999128282070160f, + -0.029511967673898f, + 0.999105513095856f, -0.029894785955548f, 0.999082446098328f, + -0.030277585610747f, + 0.999059081077576f, -0.030660368502140f, 0.999035418033600f, + -0.031043132767081f, + 0.999011456966400f, -0.031425878405571f, 0.998987197875977f, + -0.031808607280254f, + 0.998962640762329f, -0.032191313803196f, 0.998937785625458f, + -0.032574005424976f, + 0.998912692070007f, -0.032956674695015f, 0.998887240886688f, + -0.033339329063892f, + 0.998861551284790f, -0.033721961081028f, 0.998835504055023f, + -0.034104570746422f, + 0.998809218406677f, -0.034487165510654f, 0.998782634735107f, + -0.034869734197855f, + 0.998755753040314f, -0.035252287983894f, 0.998728513717651f, + -0.035634815692902f, + 0.998701035976410f, -0.036017324775457f, 0.998673319816589f, + -0.036399815231562f, + 0.998645246028900f, -0.036782283335924f, 0.998616874217987f, + -0.037164725363255f, + 0.998588204383850f, -0.037547148764133f, 0.998559296131134f, + -0.037929553538561f, + 0.998530030250549f, -0.038311932235956f, 0.998500525951386f, + -0.038694288581610f, + 0.998470664024353f, -0.039076622575521f, 0.998440563678741f, + -0.039458930492401f, + 0.998410165309906f, -0.039841219782829f, 0.998379468917847f, + -0.040223482996225f, + 0.998348474502563f, -0.040605723857880f, 0.998317182064056f, + -0.040987938642502f, + 0.998285591602325f, -0.041370131075382f, 0.998253703117371f, + -0.041752301156521f, + 0.998221516609192f, -0.042134445160627f, 0.998189091682434f, + -0.042516563087702f, + 0.998156309127808f, -0.042898654937744f, 0.998123228549957f, + -0.043280724436045f, + 0.998089909553528f, -0.043662767857313f, 0.998056292533875f, + -0.044044785201550f, + 0.998022377490997f, -0.044426776468754f, 0.997988104820251f, + -0.044808741658926f, + 0.997953593730927f, -0.045190680772066f, 0.997918784618378f, + -0.045572593808174f, + 0.997883677482605f, -0.045954477041960f, 0.997848331928253f, + -0.046336337924004f, + 0.997812628746033f, -0.046718169003725f, 0.997776627540588f, + -0.047099970281124f, + 0.997740387916565f, -0.047481749206781f, 0.997703790664673f, + -0.047863494604826f, + 0.997666954994202f, -0.048245213925838f, 0.997629821300507f, + -0.048626907169819f, + 0.997592389583588f, -0.049008570611477f, 0.997554600238800f, + -0.049390204250813f, + 0.997516572475433f, -0.049771808087826f, 0.997478306293488f, + -0.050153385847807f, + 0.997439682483673f, -0.050534930080175f, 0.997400760650635f, + -0.050916448235512f, + 0.997361540794373f, -0.051297932863235f, 0.997322082519531f, + -0.051679391413927f, + 0.997282266616821f, -0.052060816437006f, 0.997242212295532f, + -0.052442211657763f, + 0.997201859951019f, -0.052823577076197f, 0.997161149978638f, + -0.053204908967018f, + 0.997120201587677f, -0.053586211055517f, 0.997078955173492f, + -0.053967483341694f, + 0.997037410736084f, -0.054348722100258f, 0.996995627880096f, + -0.054729927331209f, + 0.996953487396240f, -0.055111102759838f, 0.996911048889160f, + -0.055492244660854f, + 0.996868371963501f, -0.055873356759548f, 0.996825337409973f, + -0.056254431605339f, + 0.996782064437866f, -0.056635476648808f, 0.996738493442535f, + -0.057016488164663f, + 0.996694624423981f, -0.057397462427616f, 0.996650457382202f, + -0.057778406888247f, + 0.996605992317200f, -0.058159314095974f, 0.996561229228973f, + -0.058540191501379f, + 0.996516168117523f, -0.058921031653881f, 0.996470808982849f, + -0.059301838278770f, + 0.996425211429596f, -0.059682607650757f, 0.996379256248474f, + -0.060063343495131f, + 0.996333062648773f, -0.060444042086601f, 0.996286571025848f, + -0.060824707150459f, + 0.996239781379700f, -0.061205338686705f, 0.996192693710327f, + -0.061585929244757f, + 0.996145308017731f, -0.061966486275196f, 0.996097624301910f, + -0.062347009778023f, + 0.996049642562866f, -0.062727488577366f, 0.996001422405243f, + -0.063107937574387f, + 0.995952844619751f, -0.063488349318504f, 0.995904028415680f, + -0.063868723809719f, + 0.995854854583740f, -0.064249053597450f, 0.995805442333221f, + -0.064629353582859f, + 0.995755732059479f, -0.065009608864784f, 0.995705723762512f, + -0.065389834344387f, + 0.995655417442322f, -0.065770015120506f, 0.995604813098907f, + -0.066150158643723f, + 0.995553970336914f, -0.066530264914036f, 0.995502769947052f, + -0.066910326480865f, + 0.995451331138611f, -0.067290350794792f, 0.995399534702301f, + -0.067670337855816f, + 0.995347499847412f, -0.068050287663937f, 0.995295166969299f, + -0.068430192768574f, + 0.995242536067963f, -0.068810060620308f, 0.995189607143402f, + -0.069189883768559f, + 0.995136380195618f, -0.069569669663906f, 0.995082914829254f, + -0.069949418306351f, + 0.995029091835022f, -0.070329122245312f, 0.994975030422211f, + -0.070708781480789f, + 0.994920611381531f, -0.071088403463364f, 0.994865953922272f, + -0.071467980742455f, + 0.994810998439789f, -0.071847513318062f, 0.994755744934082f, + -0.072227008640766f, + 0.994700193405151f, -0.072606459259987f, 0.994644403457642f, + -0.072985872626305f, + 0.994588255882263f, -0.073365233838558f, 0.994531810283661f, + -0.073744557797909f, + 0.994475126266479f, -0.074123837053776f, 0.994418144226074f, + -0.074503071606159f, + 0.994360864162445f, -0.074882268905640f, 0.994303286075592f, + -0.075261414051056f, + 0.994245409965515f, -0.075640521943569f, 0.994187235832214f, + -0.076019577682018f, + 0.994128763675690f, -0.076398596167564f, 0.994070053100586f, + -0.076777562499046f, + 0.994010984897614f, -0.077156484127045f, 0.993951678276062f, + -0.077535368502140f, + 0.993892073631287f, -0.077914200723171f, 0.993832170963287f, + -0.078292988240719f, + 0.993771970272064f, -0.078671731054783f, 0.993711471557617f, + -0.079050421714783f, + 0.993650734424591f, -0.079429075121880f, 0.993589639663696f, + -0.079807676374912f, + 0.993528306484222f, -0.080186225473881f, 0.993466615676880f, + -0.080564737319946f, + 0.993404686450958f, -0.080943197011948f, 0.993342459201813f, + -0.081321612000465f, + 0.993279933929443f, -0.081699974834919f, 0.993217170238495f, + -0.082078292965889f, + 0.993154048919678f, -0.082456558942795f, 0.993090689182281f, + -0.082834780216217f, + 0.993026971817017f, -0.083212949335575f, 0.992963016033173f, + -0.083591073751450f, + 0.992898762226105f, -0.083969146013260f, 0.992834210395813f, + -0.084347173571587f, + 0.992769360542297f, -0.084725148975849f, 0.992704212665558f, + -0.085103072226048f, + 0.992638826370239f, -0.085480943322182f, 0.992573142051697f, + -0.085858769714832f, + 0.992507100105286f, -0.086236543953419f, 0.992440819740295f, + -0.086614266037941f, + 0.992374241352081f, -0.086991935968399f, 0.992307364940643f, + -0.087369553744793f, + 0.992240250110626f, -0.087747126817703f, 0.992172777652740f, + -0.088124647736549f, + 0.992105066776276f, -0.088502109050751f, 0.992036998271942f, + -0.088879525661469f, + 0.991968691349030f, -0.089256882667542f, 0.991900086402893f, + -0.089634194970131f, + 0.991831183433533f, -0.090011447668076f, 0.991762042045593f, + -0.090388655662537f, + 0.991692543029785f, -0.090765804052353f, 0.991622805595398f, + -0.091142900288105f, + 0.991552770137787f, -0.091519944369793f, 0.991482377052307f, + -0.091896936297417f, + 0.991411805152893f, -0.092273868620396f, 0.991340875625610f, + -0.092650748789310f, + 0.991269648075104f, -0.093027576804161f, 0.991198182106018f, + -0.093404345214367f, + 0.991126358509064f, -0.093781061470509f, 0.991054296493530f, + -0.094157725572586f, + 0.990981936454773f, -0.094534330070019f, 0.990909278392792f, + -0.094910882413387f, + 0.990836322307587f, -0.095287375152111f, 0.990763127803802f, + -0.095663815736771f, + 0.990689575672150f, -0.096040196716785f, 0.990615785121918f, + -0.096416525542736f, + 0.990541696548462f, -0.096792794764042f, 0.990467309951782f, + -0.097169004380703f, + 0.990392625331879f, -0.097545161843300f, 0.990317702293396f, + -0.097921259701252f, + 0.990242421627045f, -0.098297297954559f, 0.990166902542114f, + -0.098673284053802f, + 0.990091085433960f, -0.099049203097820f, 0.990014970302582f, + -0.099425069987774f, + 0.989938557147980f, -0.099800877273083f, 0.989861845970154f, + -0.100176624953747f, + 0.989784896373749f, -0.100552320480347f, 0.989707589149475f, + -0.100927948951721f, + 0.989630043506622f, -0.101303517818451f, 0.989552199840546f, + -0.101679034531116f, + 0.989474058151245f, -0.102054484188557f, 0.989395678043365f, + -0.102429874241352f, + 0.989316940307617f, -0.102805204689503f, 0.989237964153290f, + -0.103180475533009f, + 0.989158689975739f, -0.103555686771870f, 0.989079117774963f, + -0.103930838406086f, + 0.988999247550964f, -0.104305922985077f, 0.988919138908386f, + -0.104680955410004f, + 0.988838672637939f, -0.105055920779705f, 0.988757967948914f, + -0.105430819094181f, + 0.988676965236664f, -0.105805665254593f, 0.988595664501190f, + -0.106180444359779f, + 0.988514065742493f, -0.106555156409740f, 0.988432228565216f, + -0.106929816305637f, + 0.988350033760071f, -0.107304409146309f, 0.988267600536346f, + -0.107678934931755f, + 0.988184869289398f, -0.108053401112556f, 0.988101840019226f, + -0.108427800238132f, + 0.988018512725830f, -0.108802139759064f, 0.987934947013855f, + -0.109176412224770f, + 0.987851083278656f, -0.109550617635250f, 0.987766921520233f, + -0.109924763441086f, + 0.987682461738586f, -0.110298842191696f, 0.987597703933716f, + -0.110672861337662f, + 0.987512648105621f, -0.111046813428402f, 0.987427353858948f, + -0.111420698463917f, + 0.987341761589050f, -0.111794516444206f, 0.987255871295929f, + -0.112168267369270f, + 0.987169682979584f, -0.112541958689690f, 0.987083256244659f, + -0.112915575504303f, + 0.986996471881866f, -0.113289132714272f, 0.986909449100494f, + -0.113662622869015f, + 0.986822128295898f, -0.114036038517952f, 0.986734509468079f, + -0.114409394562244f, + 0.986646652221680f, -0.114782683551311f, 0.986558437347412f, + -0.115155905485153f, + 0.986469984054565f, -0.115529052913189f, 0.986381232738495f, + -0.115902140736580f, + 0.986292183399200f, -0.116275154054165f, 0.986202836036682f, + -0.116648100316525f, + 0.986113250255585f, -0.117020979523659f, 0.986023366451263f, + -0.117393791675568f, + 0.985933184623718f, -0.117766529321671f, 0.985842704772949f, + -0.118139199912548f, + 0.985751926898956f, -0.118511803448200f, 0.985660910606384f, + -0.118884332478046f, + 0.985569596290588f, -0.119256794452667f, 0.985477983951569f, + -0.119629189372063f, + 0.985386073589325f, -0.120001509785652f, 0.985293865203857f, + -0.120373763144016f, + 0.985201418399811f, -0.120745941996574f, 0.985108673572540f, + -0.121118053793907f, + 0.985015630722046f, -0.121490091085434f, 0.984922289848328f, + -0.121862053871155f, + 0.984828710556030f, -0.122233949601650f, 0.984734773635864f, + -0.122605770826340f, + 0.984640598297119f, -0.122977524995804f, 0.984546124935150f, + -0.123349204659462f, + 0.984451413154602f, -0.123720809817314f, 0.984356343746185f, + -0.124092340469360f, + 0.984261035919189f, -0.124463804066181f, 0.984165430068970f, + -0.124835193157196f, + 0.984069526195526f, -0.125206500291824f, 0.983973383903503f, + -0.125577747821808f, + 0.983876943588257f, -0.125948905944824f, 0.983780145645142f, + -0.126320004463196f, + 0.983683168888092f, -0.126691013574600f, 0.983585834503174f, + -0.127061963081360f, + 0.983488261699677f, -0.127432823181152f, 0.983390331268311f, + -0.127803623676300f, + 0.983292162418365f, -0.128174334764481f, 0.983193755149841f, + -0.128544986248016f, + 0.983094990253448f, -0.128915548324585f, 0.982995986938477f, + -0.129286035895348f, + 0.982896685600281f, -0.129656463861465f, 0.982797086238861f, + -0.130026802420616f, + 0.982697248458862f, -0.130397051572800f, 0.982597053050995f, + -0.130767241120338f, + 0.982496619224548f, -0.131137356162071f, 0.982395887374878f, + -0.131507381796837f, + 0.982294917106628f, -0.131877332925797f, 0.982193589210510f, + -0.132247209548950f, + 0.982092022895813f, -0.132617011666298f, 0.981990158557892f, + -0.132986739277840f, + 0.981888055801392f, -0.133356377482414f, 0.981785595417023f, + -0.133725941181183f, + 0.981682896614075f, -0.134095430374146f, 0.981579899787903f, + -0.134464830160141f, + 0.981476604938507f, -0.134834155440331f, 0.981373071670532f, + -0.135203406214714f, + 0.981269240379334f, -0.135572582483292f, 0.981165111064911f, + -0.135941669344902f, + 0.981060683727264f, -0.136310681700706f, 0.980956017971039f, + -0.136679604649544f, + 0.980851054191589f, -0.137048453092575f, 0.980745792388916f, + -0.137417227029800f, + 0.980640232563019f, -0.137785911560059f, 0.980534434318542f, + -0.138154521584511f, + 0.980428338050842f, -0.138523042201996f, 0.980321943759918f, + -0.138891488313675f, + 0.980215251445770f, -0.139259845018387f, 0.980108320713043f, + -0.139628127217293f, + 0.980001091957092f, -0.139996320009232f, 0.979893565177917f, + -0.140364438295364f, + 0.979785740375519f, -0.140732467174530f, 0.979677677154541f, + -0.141100421547890f, + 0.979569315910339f, -0.141468286514282f, 0.979460656642914f, + -0.141836062073708f, + 0.979351758956909f, -0.142203763127327f, 0.979242503643036f, + -0.142571389675140f, + 0.979133009910584f, -0.142938911914825f, 0.979023277759552f, + -0.143306359648705f, + 0.978913187980652f, -0.143673732876778f, 0.978802859783173f, + -0.144041016697884f, + 0.978692233562469f, -0.144408211112022f, 0.978581368923187f, + -0.144775316119194f, + 0.978470146656036f, -0.145142331719399f, 0.978358685970306f, + -0.145509272813797f, + 0.978246986865997f, -0.145876124501228f, 0.978134930133820f, + -0.146242901682854f, + 0.978022634983063f, -0.146609574556351f, 0.977910041809082f, + -0.146976172924042f, + 0.977797150611877f, -0.147342681884766f, 0.977684020996094f, + -0.147709101438522f, + 0.977570593357086f, -0.148075446486473f, 0.977456867694855f, + -0.148441687226295f, + 0.977342903614044f, -0.148807853460312f, 0.977228581905365f, + -0.149173930287361f, + 0.977114021778107f, -0.149539917707443f, 0.976999223232269f, + -0.149905815720558f, + 0.976884067058563f, -0.150271624326706f, 0.976768672466278f, + -0.150637343525887f, + 0.976653039455414f, -0.151002973318100f, 0.976537048816681f, + -0.151368513703346f, + 0.976420819759369f, -0.151733979582787f, 0.976304292678833f, + -0.152099341154099f, + 0.976187527179718f, -0.152464613318443f, 0.976070404052734f, + -0.152829796075821f, + 0.975953042507172f, -0.153194904327393f, 0.975835442543030f, + -0.153559908270836f, + 0.975717484951019f, -0.153924822807312f, 0.975599288940430f, + -0.154289647936821f, + 0.975480854511261f, -0.154654383659363f, 0.975362062454224f, + -0.155019029974937f, + 0.975243031978607f, -0.155383571982384f, 0.975123703479767f, + -0.155748039484024f, + 0.975004136562347f, -0.156112402677536f, 0.974884271621704f, + -0.156476691365242f, + 0.974764108657837f, -0.156840875744820f, 0.974643647670746f, + -0.157204970717430f, + 0.974522948265076f, -0.157568961381912f, 0.974401950836182f, + -0.157932877540588f, + 0.974280655384064f, -0.158296689391136f, 0.974159121513367f, + -0.158660411834717f, + 0.974037289619446f, -0.159024044871330f, 0.973915159702301f, + -0.159387573599815f, + 0.973792791366577f, -0.159751012921333f, 0.973670125007629f, + -0.160114362835884f, + 0.973547160625458f, -0.160477623343468f, 0.973423957824707f, + -0.160840779542923f, + 0.973300457000732f, -0.161203846335411f, 0.973176658153534f, + -0.161566808819771f, + 0.973052620887756f, -0.161929681897163f, 0.972928285598755f, + -0.162292465567589f, + 0.972803652286530f, -0.162655144929886f, 0.972678780555725f, + -0.163017734885216f, + 0.972553610801697f, -0.163380220532417f, 0.972428143024445f, + -0.163742616772652f, + 0.972302436828613f, -0.164104923605919f, 0.972176432609558f, + -0.164467126131058f, + 0.972050130367279f, -0.164829224348068f, 0.971923589706421f, + -0.165191248059273f, + 0.971796751022339f, -0.165553152561188f, 0.971669614315033f, + -0.165914967656136f, + 0.971542239189148f, -0.166276678442955f, 0.971414566040039f, + -0.166638299822807f, + 0.971286594867706f, -0.166999831795692f, 0.971158385276794f, + -0.167361244559288f, + 0.971029877662659f, -0.167722567915916f, 0.970901072025299f, + -0.168083801865578f, + 0.970772027969360f, -0.168444931507111f, 0.970642685890198f, + -0.168805956840515f, + 0.970513105392456f, -0.169166877865791f, 0.970383226871490f, + -0.169527709484100f, + 0.970253050327301f, -0.169888436794281f, 0.970122575759888f, + -0.170249074697495f, + 0.969991862773895f, -0.170609608292580f, 0.969860911369324f, + -0.170970037579536f, + 0.969729602336884f, -0.171330362558365f, 0.969598054885864f, + -0.171690583229065f, + 0.969466269016266f, -0.172050714492798f, 0.969334125518799f, + -0.172410741448402f, + 0.969201743602753f, -0.172770664095879f, 0.969069123268127f, + -0.173130482435226f, + 0.968936204910278f, -0.173490211367607f, 0.968802988529205f, + -0.173849821090698f, + 0.968669533729553f, -0.174209341406822f, 0.968535780906677f, + -0.174568757414818f, + 0.968401730060577f, -0.174928069114685f, 0.968267440795898f, + -0.175287276506424f, + 0.968132853507996f, -0.175646379590034f, 0.967997968196869f, + -0.176005378365517f, + 0.967862844467163f, -0.176364272832870f, 0.967727422714233f, + -0.176723077893257f, + 0.967591762542725f, -0.177081763744354f, 0.967455804347992f, + -0.177440345287323f, + 0.967319548130035f, -0.177798837423325f, 0.967183053493500f, + -0.178157210350037f, + 0.967046260833740f, -0.178515478968620f, 0.966909229755402f, + -0.178873643279076f, + 0.966771900653839f, -0.179231703281403f, 0.966634273529053f, + -0.179589673876762f, + 0.966496407985687f, -0.179947525262833f, 0.966358244419098f, + -0.180305257439613f, + 0.966219842433929f, -0.180662900209427f, 0.966081082820892f, + -0.181020438671112f, + 0.965942144393921f, -0.181377857923508f, 0.965802907943726f, + -0.181735187768936f, + 0.965663373470306f, -0.182092398405075f, 0.965523540973663f, + -0.182449504733086f, + 0.965383470058441f, -0.182806491851807f, 0.965243160724640f, + -0.183163389563560f, + 0.965102493762970f, -0.183520168066025f, 0.964961588382721f, + -0.183876842260361f, + 0.964820444583893f, -0.184233412146568f, 0.964679002761841f, + -0.184589877724648f, + 0.964537262916565f, -0.184946224093437f, 0.964395284652710f, + -0.185302466154099f, + 0.964253067970276f, -0.185658603906631f, 0.964110493659973f, + -0.186014622449875f, + 0.963967680931091f, -0.186370536684990f, 0.963824629783630f, + -0.186726331710815f, + 0.963681280612946f, -0.187082037329674f, 0.963537633419037f, + -0.187437608838081f, + 0.963393747806549f, -0.187793090939522f, 0.963249564170837f, + -0.188148453831673f, + 0.963105142116547f, -0.188503712415695f, 0.962960422039032f, + -0.188858851790428f, + 0.962815403938293f, -0.189213871955872f, 0.962670147418976f, + -0.189568802714348f, + 0.962524592876434f, -0.189923599362373f, 0.962378799915314f, + -0.190278306603432f, + 0.962232708930969f, -0.190632879734039f, 0.962086379528046f, + -0.190987363457680f, + 0.961939752101898f, -0.191341713070869f, 0.961792886257172f, + -0.191695958375931f, + 0.961645722389221f, -0.192050099372864f, 0.961498260498047f, + -0.192404121160507f, + 0.961350560188293f, -0.192758023738861f, 0.961202561855316f, + -0.193111822009087f, + 0.961054325103760f, -0.193465501070023f, 0.960905790328979f, + -0.193819075822830f, + 0.960757017135620f, -0.194172516465187f, 0.960607945919037f, + -0.194525867700577f, + 0.960458636283875f, -0.194879084825516f, 0.960309028625488f, + -0.195232197642326f, + 0.960159122943878f, -0.195585191249847f, 0.960008978843689f, + -0.195938065648079f, + 0.959858596324921f, -0.196290835738182f, 0.959707856178284f, + -0.196643486618996f, + 0.959556937217712f, -0.196996018290520f, 0.959405720233917f, + -0.197348430752754f, + 0.959254205226898f, -0.197700738906860f, 0.959102451801300f, + -0.198052927851677f, + 0.958950400352478f, -0.198404997587204f, 0.958798050880432f, + -0.198756948113441f, + 0.958645522594452f, -0.199108779430389f, 0.958492636680603f, + -0.199460506439209f, + 0.958339512348175f, -0.199812099337578f, 0.958186149597168f, + -0.200163587927818f, + 0.958032488822937f, -0.200514942407608f, 0.957878530025482f, + -0.200866192579269f, + 0.957724332809448f, -0.201217323541641f, 0.957569897174835f, + -0.201568335294724f, + 0.957415163516998f, -0.201919227838516f, 0.957260131835938f, + -0.202270001173019f, + 0.957104861736298f, -0.202620655298233f, 0.956949353218079f, + -0.202971190214157f, + 0.956793546676636f, -0.203321605920792f, 0.956637442111969f, + -0.203671902418137f, + 0.956481099128723f, -0.204022079706192f, 0.956324458122253f, + -0.204372137784958f, + 0.956167578697205f, -0.204722076654434f, 0.956010460853577f, + -0.205071896314621f, + 0.955853044986725f, -0.205421581864357f, 0.955695331096649f, + -0.205771163105965f, + 0.955537378787994f, -0.206120610237122f, 0.955379128456116f, + -0.206469938158989f, + 0.955220639705658f, -0.206819161772728f, 0.955061912536621f, + -0.207168251276016f, + 0.954902827739716f, -0.207517206668854f, 0.954743564128876f, + -0.207866057753563f, + 0.954584002494812f, -0.208214774727821f, 0.954424142837524f, + -0.208563387393951f, + 0.954264044761658f, -0.208911851048470f, 0.954103708267212f, + -0.209260210394859f, + 0.953943073749542f, -0.209608450531960f, 0.953782141208649f, + -0.209956556558609f, + 0.953620970249176f, -0.210304543375969f, 0.953459560871124f, + -0.210652396082878f, + 0.953297853469849f, -0.211000129580498f, 0.953135907649994f, + -0.211347743868828f, + 0.952973663806915f, -0.211695238947868f, 0.952811121940613f, + -0.212042599916458f, + 0.952648401260376f, -0.212389841675758f, 0.952485322952271f, + -0.212736949324608f, + 0.952322065830231f, -0.213083937764168f, 0.952158451080322f, + -0.213430806994438f, + 0.951994657516479f, -0.213777542114258f, 0.951830565929413f, + -0.214124158024788f, + 0.951666176319122f, -0.214470639824867f, 0.951501548290253f, + -0.214817002415657f, + 0.951336681842804f, -0.215163245797157f, 0.951171517372131f, + -0.215509355068207f, + 0.951006054878235f, -0.215855330228806f, 0.950840353965759f, + -0.216201186180115f, + 0.950674414634705f, -0.216546908020973f, 0.950508177280426f, + -0.216892510652542f, + 0.950341701507568f, -0.217237979173660f, 0.950174987316132f, + -0.217583328485489f, + 0.950007975101471f, -0.217928543686867f, 0.949840664863586f, + -0.218273624777794f, + 0.949673116207123f, -0.218618586659431f, 0.949505329132080f, + -0.218963414430618f, + 0.949337244033813f, -0.219308122992516f, 0.949168920516968f, + -0.219652697443962f, + 0.949000298976898f, -0.219997137784958f, 0.948831439018250f, + -0.220341444015503f, + 0.948662281036377f, -0.220685631036758f, 0.948492884635925f, + -0.221029683947563f, + 0.948323249816895f, -0.221373617649078f, 0.948153316974640f, + -0.221717402338982f, + 0.947983145713806f, -0.222061067819595f, 0.947812676429749f, + -0.222404599189758f, + 0.947641968727112f, -0.222748011350632f, 0.947470963001251f, + -0.223091274499893f, + 0.947299718856812f, -0.223434418439865f, 0.947128236293793f, + -0.223777428269386f, + 0.946956455707550f, -0.224120303988457f, 0.946784436702728f, + -0.224463045597076f, + 0.946612179279327f, -0.224805667996407f, 0.946439623832703f, + -0.225148141384125f, + 0.946266770362854f, -0.225490495562553f, 0.946093678474426f, + -0.225832715630531f, + 0.945920348167419f, -0.226174786686897f, 0.945746779441834f, + -0.226516738533974f, + 0.945572853088379f, -0.226858556270599f, 0.945398747920990f, + -0.227200239896774f, + 0.945224344730377f, -0.227541789412498f, 0.945049703121185f, + -0.227883204817772f, + 0.944874763488770f, -0.228224486112595f, 0.944699645042419f, + -0.228565633296967f, + 0.944524168968201f, -0.228906646370888f, 0.944348454475403f, + -0.229247525334358f, + 0.944172501564026f, -0.229588270187378f, 0.943996310234070f, + -0.229928880929947f, + 0.943819820880890f, -0.230269357562065f, 0.943643093109131f, + -0.230609700083733f, + 0.943466067314148f, -0.230949893593788f, 0.943288803100586f, + -0.231289967894554f, + 0.943111240863800f, -0.231629893183708f, 0.942933499813080f, + -0.231969684362412f, + 0.942755401134491f, -0.232309341430664f, 0.942577123641968f, + -0.232648864388466f, + 0.942398548126221f, -0.232988253235817f, 0.942219734191895f, + -0.233327493071556f, + 0.942040622234344f, -0.233666598796844f, 0.941861271858215f, + -0.234005570411682f, + 0.941681683063507f, -0.234344407916069f, 0.941501796245575f, + -0.234683111310005f, + 0.941321671009064f, -0.235021665692329f, 0.941141307353973f, + -0.235360085964203f, + 0.940960645675659f, -0.235698372125626f, 0.940779745578766f, + -0.236036509275436f, + 0.940598547458649f, -0.236374512314796f, 0.940417110919952f, + -0.236712381243706f, + 0.940235435962677f, -0.237050101161003f, 0.940053522586823f, + -0.237387686967850f, + 0.939871311187744f, -0.237725138664246f, 0.939688861370087f, + -0.238062441349030f, + 0.939506113529205f, -0.238399609923363f, 0.939323127269745f, + -0.238736644387245f, + 0.939139902591705f, -0.239073529839516f, 0.938956379890442f, + -0.239410281181335f, + 0.938772618770599f, -0.239746883511543f, 0.938588619232178f, + -0.240083336830139f, + 0.938404381275177f, -0.240419670939446f, 0.938219845294952f, + -0.240755841135979f, + 0.938035070896149f, -0.241091892123222f, 0.937849998474121f, + -0.241427779197693f, + 0.937664687633514f, -0.241763532161713f, 0.937479138374329f, + -0.242099151015282f, + 0.937293350696564f, -0.242434620857239f, 0.937107264995575f, + -0.242769956588745f, + 0.936920940876007f, -0.243105143308640f, 0.936734318733215f, + -0.243440181016922f, + 0.936547517776489f, -0.243775084614754f, 0.936360359191895f, + -0.244109839200974f, + 0.936173021793365f, -0.244444444775581f, 0.935985386371613f, + -0.244778916239738f, + 0.935797572135925f, -0.245113238692284f, 0.935609400272369f, + -0.245447427034378f, + 0.935421049594879f, -0.245781451463699f, 0.935232400894165f, + -0.246115356683731f, + 0.935043513774872f, -0.246449097990990f, 0.934854328632355f, + -0.246782705187798f, + 0.934664964675903f, -0.247116148471832f, 0.934475243091583f, + -0.247449472546577f, + 0.934285342693329f, -0.247782632708550f, 0.934095203876495f, + -0.248115643858910f, + 0.933904767036438f, -0.248448520898819f, 0.933714091777802f, + -0.248781248927116f, + 0.933523118495941f, -0.249113827943802f, 0.933331906795502f, + -0.249446272850037f, + 0.933140456676483f, -0.249778553843498f, 0.932948768138886f, + -0.250110685825348f, + 0.932756841182709f, -0.250442683696747f, 0.932564616203308f, + -0.250774532556534f, + 0.932372152805328f, -0.251106232404709f, 0.932179391384125f, + -0.251437783241272f, + 0.931986451148987f, -0.251769185066223f, 0.931793212890625f, + -0.252100437879562f, + 0.931599736213684f, -0.252431541681290f, 0.931405961513519f, + -0.252762526273727f, + 0.931211948394775f, -0.253093332052231f, 0.931017756462097f, + -0.253423988819122f, + 0.930823206901550f, -0.253754496574402f, 0.930628478527069f, + -0.254084855318069f, + 0.930433452129364f, -0.254415065050125f, 0.930238187313080f, + -0.254745125770569f, + 0.930042684078217f, -0.255075037479401f, 0.929846942424774f, + -0.255404800176620f, + 0.929650902748108f, -0.255734413862228f, 0.929454624652863f, + -0.256063878536224f, + 0.929258108139038f, -0.256393194198608f, 0.929061353206635f, + -0.256722360849380f, + 0.928864300251007f, -0.257051378488541f, 0.928667008876801f, + -0.257380217313766f, + 0.928469479084015f, -0.257708936929703f, 0.928271710872650f, + -0.258037507534027f, + 0.928073644638062f, -0.258365899324417f, 0.927875399589539f, + -0.258694142103195f, + 0.927676856517792f, -0.259022265672684f, 0.927478015422821f, + -0.259350210428238f, + 0.927278995513916f, -0.259678006172180f, 0.927079677581787f, + -0.260005623102188f, + 0.926880121231079f, -0.260333120822906f, 0.926680326461792f, + -0.260660469532013f, + 0.926480293273926f, -0.260987639427185f, 0.926280021667480f, + -0.261314690113068f, + 0.926079452037811f, -0.261641561985016f, 0.925878643989563f, + -0.261968284845352f, + 0.925677597522736f, -0.262294828891754f, 0.925476312637329f, + -0.262621253728867f, + 0.925274729728699f, -0.262947499752045f, 0.925072908401489f, + -0.263273626565933f, + 0.924870908260345f, -0.263599574565887f, 0.924668610095978f, + -0.263925373554230f, + 0.924466013908386f, -0.264250993728638f, 0.924263238906860f, + -0.264576494693756f, + 0.924060165882111f, -0.264901816844940f, 0.923856854438782f, + -0.265226989984512f, + 0.923653304576874f, -0.265552014112473f, 0.923449516296387f, + -0.265876859426498f, + 0.923245489597321f, -0.266201555728912f, 0.923041164875031f, + -0.266526103019714f, + 0.922836601734161f, -0.266850501298904f, 0.922631800174713f, + -0.267174720764160f, + 0.922426760196686f, -0.267498821020126f, 0.922221481800079f, + -0.267822742462158f, + 0.922015964984894f, -0.268146485090256f, 0.921810150146484f, + -0.268470078706741f, + 0.921604096889496f, -0.268793523311615f, 0.921397805213928f, + -0.269116818904877f, + 0.921191275119781f, -0.269439965486526f, 0.920984506607056f, + -0.269762933254242f, + 0.920777499675751f, -0.270085722208023f, 0.920570194721222f, + -0.270408391952515f, + 0.920362710952759f, -0.270730882883072f, 0.920154929161072f, + -0.271053224802017f, + 0.919946908950806f, -0.271375387907028f, 0.919738650321960f, + -0.271697402000427f, + 0.919530093669891f, -0.272019267082214f, 0.919321358203888f, + -0.272340953350067f, + 0.919112324714661f, -0.272662490606308f, 0.918903112411499f, + -0.272983878850937f, + 0.918693602085114f, -0.273305088281631f, 0.918483853340149f, + -0.273626148700714f, + 0.918273866176605f, -0.273947030305862f, 0.918063640594482f, + -0.274267762899399f, + 0.917853116989136f, -0.274588316679001f, 0.917642414569855f, + -0.274908751249313f, + 0.917431414127350f, -0.275228977203369f, 0.917220234870911f, + -0.275549083948135f, + 0.917008757591248f, -0.275868982076645f, 0.916797041893005f, + -0.276188760995865f, + 0.916585087776184f, -0.276508361101151f, 0.916372895240784f, + -0.276827782392502f, + 0.916160404682159f, -0.277147054672241f, 0.915947735309601f, + -0.277466177940369f, + 0.915734827518463f, -0.277785122394562f, 0.915521621704102f, + -0.278103888034821f, + 0.915308177471161f, -0.278422504663467f, 0.915094554424286f, + -0.278740972280502f, + 0.914880633354187f, -0.279059261083603f, 0.914666473865509f, + -0.279377400875092f, + 0.914452075958252f, -0.279695361852646f, 0.914237439632416f, + -0.280013144016266f, + 0.914022505283356f, -0.280330777168274f, 0.913807392120361f, + -0.280648261308670f, + 0.913592040538788f, -0.280965566635132f, 0.913376390933990f, + -0.281282693147659f, + 0.913160502910614f, -0.281599670648575f, 0.912944436073303f, + -0.281916469335556f, + 0.912728071212769f, -0.282233119010925f, 0.912511467933655f, + -0.282549589872360f, + 0.912294626235962f, -0.282865911722183f, 0.912077546119690f, + -0.283182054758072f, + 0.911860227584839f, -0.283498018980026f, 0.911642670631409f, + -0.283813834190369f, + 0.911424875259399f, -0.284129470586777f, 0.911206841468811f, + -0.284444957971573f, + 0.910988569259644f, -0.284760266542435f, 0.910769999027252f, + -0.285075396299362f, + 0.910551249980927f, -0.285390377044678f, 0.910332262516022f, + -0.285705178976059f, + 0.910112977027893f, -0.286019802093506f, 0.909893512725830f, + -0.286334276199341f, + 0.909673750400543f, -0.286648571491241f, 0.909453809261322f, + -0.286962717771530f, + 0.909233570098877f, -0.287276685237885f, 0.909013092517853f, + -0.287590473890305f, + 0.908792436122894f, -0.287904083728790f, 0.908571481704712f, + -0.288217544555664f, + 0.908350288867950f, -0.288530826568604f, 0.908128857612610f, + -0.288843959569931f, + 0.907907187938690f, -0.289156883955002f, 0.907685279846191f, + -0.289469659328461f, + 0.907463192939758f, -0.289782285690308f, 0.907240808010101f, + -0.290094703435898f, + 0.907018184661865f, -0.290406972169876f, 0.906795322895050f, + -0.290719062089920f, + 0.906572222709656f, -0.291031002998352f, 0.906348884105682f, + -0.291342735290527f, + 0.906125307083130f, -0.291654318571091f, 0.905901491641998f, + -0.291965723037720f, + 0.905677437782288f, -0.292276978492737f, 0.905453145503998f, + -0.292588025331497f, + 0.905228614807129f, -0.292898923158646f, 0.905003845691681f, + -0.293209642171860f, + 0.904778838157654f, -0.293520182371140f, 0.904553592205048f, + -0.293830573558807f, + 0.904328107833862f, -0.294140785932541f, 0.904102385044098f, + -0.294450789690018f, + 0.903876423835754f, -0.294760644435883f, 0.903650224208832f, + -0.295070350170136f, + 0.903423786163330f, -0.295379847288132f, 0.903197109699249f, + -0.295689195394516f, + 0.902970194816589f, -0.295998334884644f, 0.902743041515350f, + -0.296307325363159f, + 0.902515649795532f, -0.296616137027740f, 0.902288019657135f, + -0.296924799680710f, + 0.902060210704803f, -0.297233253717422f, 0.901832103729248f, + -0.297541528940201f, + 0.901603758335114f, -0.297849655151367f, 0.901375174522400f, + -0.298157602548599f, + 0.901146411895752f, -0.298465341329575f, 0.900917351245880f, + -0.298772931098938f, + 0.900688111782074f, -0.299080342054367f, 0.900458574295044f, + -0.299387603998184f, + 0.900228857994080f, -0.299694657325745f, 0.899998843669891f, + -0.300001531839371f, + 0.899768650531769f, -0.300308227539063f, 0.899538159370422f, + -0.300614774227142f, + 0.899307489395142f, -0.300921112298965f, 0.899076581001282f, + -0.301227301359177f, + 0.898845434188843f, -0.301533311605453f, 0.898614048957825f, + -0.301839113235474f, + 0.898382425308228f, -0.302144765853882f, 0.898150563240051f, + -0.302450239658356f, + 0.897918462753296f, -0.302755534648895f, 0.897686123847961f, + -0.303060621023178f, + 0.897453546524048f, -0.303365558385849f, 0.897220790386200f, + -0.303670316934586f, + 0.896987736225128f, -0.303974896669388f, 0.896754503250122f, + -0.304279297590256f, + 0.896520972251892f, -0.304583519697189f, 0.896287262439728f, + -0.304887533187866f, + 0.896053314208984f, -0.305191397666931f, 0.895819067955017f, + -0.305495083332062f, + 0.895584642887115f, -0.305798590183258f, 0.895349979400635f, + -0.306101888418198f, + 0.895115137100220f, -0.306405037641525f, 0.894879996776581f, + -0.306708008050919f, + 0.894644618034363f, -0.307010769844055f, 0.894409060478210f, + -0.307313382625580f, + 0.894173204898834f, -0.307615786790848f, 0.893937170505524f, + -0.307918041944504f, + 0.893700897693634f, -0.308220088481903f, 0.893464326858521f, + -0.308521956205368f, + 0.893227577209473f, -0.308823645114899f, 0.892990648746490f, + -0.309125155210495f, + 0.892753422260284f, -0.309426486492157f, 0.892515957355499f, + -0.309727638959885f, + 0.892278313636780f, -0.310028612613678f, 0.892040371894836f, + -0.310329377651215f, + 0.891802251338959f, -0.310629993677139f, 0.891563892364502f, + -0.310930401086807f, + 0.891325294971466f, -0.311230629682541f, 0.891086459159851f, + -0.311530679464340f, + 0.890847444534302f, -0.311830550432205f, 0.890608131885529f, + -0.312130242586136f, + 0.890368640422821f, -0.312429755926132f, 0.890128850936890f, + -0.312729060649872f, + 0.889888882637024f, -0.313028186559677f, 0.889648675918579f, + -0.313327133655548f, + 0.889408230781555f, -0.313625901937485f, 0.889167606830597f, + -0.313924491405487f, + 0.888926684856415f, -0.314222872257233f, 0.888685584068298f, + -0.314521104097366f, + 0.888444244861603f, -0.314819127321243f, 0.888202667236328f, + -0.315116971731186f, + 0.887960851192474f, -0.315414607524872f, 0.887718796730042f, + -0.315712094306946f, + 0.887476563453674f, -0.316009372472763f, 0.887234091758728f, + -0.316306471824646f, + 0.886991322040558f, -0.316603392362595f, 0.886748373508453f, + -0.316900104284287f, + 0.886505246162415f, -0.317196637392044f, 0.886261820793152f, + -0.317492991685867f, + 0.886018216609955f, -0.317789167165756f, 0.885774314403534f, + -0.318085134029388f, + 0.885530233383179f, -0.318380922079086f, 0.885285973548889f, + -0.318676531314850f, + 0.885041415691376f, -0.318971961736679f, 0.884796679019928f, + -0.319267183542252f, + 0.884551644325256f, -0.319562226533890f, 0.884306430816650f, + -0.319857090711594f, + 0.884061038494110f, -0.320151746273041f, 0.883815348148346f, + -0.320446223020554f, + 0.883569478988647f, -0.320740520954132f, 0.883323311805725f, + -0.321034610271454f, + 0.883076965808868f, -0.321328520774841f, 0.882830440998077f, + -0.321622252464294f, + 0.882583618164063f, -0.321915775537491f, 0.882336616516113f, + -0.322209119796753f, + 0.882089376449585f, -0.322502255439758f, 0.881841897964478f, + -0.322795242071152f, + 0.881594181060791f, -0.323088020086288f, 0.881346285343170f, + -0.323380589485168f, + 0.881098151206970f, -0.323672980070114f, 0.880849778652191f, + -0.323965191841125f, + 0.880601167678833f, -0.324257194995880f, 0.880352377891541f, + -0.324549019336700f, + 0.880103349685669f, -0.324840664863586f, 0.879854083061218f, + -0.325132101774216f, + 0.879604578018188f, -0.325423330068588f, 0.879354894161224f, + -0.325714409351349f, + 0.879104971885681f, -0.326005280017853f, 0.878854811191559f, + -0.326295942068100f, + 0.878604412078857f, -0.326586425304413f, 0.878353834152222f, + -0.326876699924469f, + 0.878103017807007f, -0.327166795730591f, 0.877851963043213f, + -0.327456712722778f, + 0.877600669860840f, -0.327746421098709f, 0.877349197864532f, + -0.328035950660706f, + 0.877097487449646f, -0.328325271606445f, 0.876845538616180f, + -0.328614413738251f, + 0.876593410968781f, -0.328903347253799f, 0.876341044902802f, + -0.329192101955414f, + 0.876088440418243f, -0.329480648040771f, 0.875835597515106f, + -0.329769015312195f, + 0.875582575798035f, -0.330057173967361f, 0.875329315662384f, + -0.330345153808594f, + 0.875075817108154f, -0.330632925033569f, 0.874822139739990f, + -0.330920487642288f, + 0.874568223953247f, -0.331207901239395f, 0.874314069747925f, + -0.331495076417923f, + 0.874059677124023f, -0.331782072782516f, 0.873805105686188f, + -0.332068890333176f, + 0.873550295829773f, -0.332355499267578f, 0.873295307159424f, + -0.332641899585724f, + 0.873040020465851f, -0.332928121089935f, 0.872784554958344f, + -0.333214133977890f, + 0.872528910636902f, -0.333499968051910f, 0.872272968292236f, + -0.333785593509674f, + 0.872016847133636f, -0.334071010351181f, 0.871760547161102f, + -0.334356248378754f, + 0.871503949165344f, -0.334641307592392f, 0.871247172355652f, + -0.334926128387451f, + 0.870990216732025f, -0.335210770368576f, 0.870733022689819f, + -0.335495233535767f, + 0.870475590229034f, -0.335779488086700f, 0.870217919349670f, + -0.336063534021378f, + 0.869960069656372f, -0.336347371339798f, 0.869701981544495f, + -0.336631029844284f, + 0.869443655014038f, -0.336914509534836f, 0.869185149669647f, + -0.337197750806808f, + 0.868926405906677f, -0.337480813264847f, 0.868667483329773f, + -0.337763696908951f, + 0.868408262729645f, -0.338046342134476f, 0.868148922920227f, + -0.338328808546066f, + 0.867889285087585f, -0.338611096143723f, 0.867629468441010f, + -0.338893145322800f, + 0.867369413375854f, -0.339175015687943f, 0.867109179496765f, + -0.339456677436829f, + 0.866848707199097f, -0.339738160371780f, 0.866588056087494f, + -0.340019434690475f, + 0.866327106952667f, -0.340300500392914f, 0.866066038608551f, + -0.340581357479095f, + 0.865804672241211f, -0.340862035751343f, 0.865543127059937f, + -0.341142505407333f, + 0.865281403064728f, -0.341422766447067f, 0.865019381046295f, + -0.341702848672867f, + 0.864757239818573f, -0.341982692480087f, 0.864494800567627f, + -0.342262357473373f, + 0.864232182502747f, -0.342541843652725f, 0.863969385623932f, + -0.342821091413498f, + 0.863706290721893f, -0.343100160360336f, 0.863443076610565f, + -0.343379020690918f, + 0.863179564476013f, -0.343657672405243f, 0.862915873527527f, + -0.343936115503311f, + 0.862652003765106f, -0.344214379787445f, 0.862387895584106f, + -0.344492435455322f, + 0.862123548984528f, -0.344770282506943f, 0.861859023571014f, + -0.345047920942307f, + 0.861594259738922f, -0.345325350761414f, 0.861329257488251f, + -0.345602601766586f, + 0.861064076423645f, -0.345879614353180f, 0.860798716545105f, + -0.346156448125839f, + 0.860533118247986f, -0.346433073282242f, 0.860267281532288f, + -0.346709519624710f, + 0.860001266002655f, -0.346985727548599f, 0.859735012054443f, + -0.347261756658554f, + 0.859468579292297f, -0.347537547349930f, 0.859201908111572f, + -0.347813159227371f, + 0.858934998512268f, -0.348088562488556f, 0.858667910099030f, + -0.348363757133484f, + 0.858400642871857f, -0.348638743162155f, 0.858133137226105f, + -0.348913550376892f, + 0.857865393161774f, -0.349188119173050f, 0.857597470283508f, + -0.349462509155273f, + 0.857329368591309f, -0.349736660718918f, 0.857060968875885f, + -0.350010633468628f, + 0.856792449951172f, -0.350284397602081f, 0.856523692607880f, + -0.350557953119278f, + 0.856254696846008f, -0.350831300020218f, 0.855985522270203f, + -0.351104438304901f, + 0.855716109275818f, -0.351377367973328f, 0.855446517467499f, + -0.351650089025497f, + 0.855176687240601f, -0.351922631263733f, 0.854906618595123f, + -0.352194935083389f, + 0.854636430740356f, -0.352467030286789f, 0.854365944862366f, + -0.352738946676254f, + 0.854095339775085f, -0.353010624647141f, 0.853824436664581f, + -0.353282123804092f, + 0.853553414344788f, -0.353553384542465f, 0.853282094001770f, + -0.353824466466904f, + 0.853010654449463f, -0.354095309972763f, 0.852738916873932f, + -0.354365974664688f, + 0.852467060089111f, -0.354636400938034f, 0.852194905281067f, + -0.354906648397446f, + 0.851922631263733f, -0.355176687240601f, 0.851650118827820f, + -0.355446487665176f, + 0.851377367973328f, -0.355716109275818f, 0.851104438304901f, + -0.355985492467880f, + 0.850831270217896f, -0.356254696846008f, 0.850557923316956f, + -0.356523662805557f, + 0.850284397602081f, -0.356792420148849f, 0.850010633468628f, + -0.357060998678207f, + 0.849736690521240f, -0.357329338788986f, 0.849462509155273f, + -0.357597470283508f, + 0.849188148975372f, -0.357865422964096f, 0.848913550376892f, + -0.358133137226105f, + 0.848638772964478f, -0.358400642871857f, 0.848363757133484f, + -0.358667939901352f, + 0.848088562488556f, -0.358935028314590f, 0.847813189029694f, + -0.359201908111572f, + 0.847537577152252f, -0.359468549489975f, 0.847261726856232f, + -0.359735012054443f, + 0.846985757350922f, -0.360001266002655f, 0.846709489822388f, + -0.360267281532288f, + 0.846433103084564f, -0.360533088445663f, 0.846156477928162f, + -0.360798716545105f, + 0.845879614353180f, -0.361064106225967f, 0.845602571964264f, + -0.361329287290573f, + 0.845325350761414f, -0.361594229936600f, 0.845047891139984f, + -0.361858993768692f, + 0.844770252704620f, -0.362123548984528f, 0.844492435455322f, + -0.362387865781784f, + 0.844214379787445f, -0.362651973962784f, 0.843936145305634f, + -0.362915903329849f, + 0.843657672405243f, -0.363179564476013f, 0.843379020690918f, + -0.363443046808243f, + 0.843100130558014f, -0.363706320524216f, 0.842821121215820f, + -0.363969355821610f, + 0.842541813850403f, -0.364232182502747f, 0.842262387275696f, + -0.364494800567627f, + 0.841982722282410f, -0.364757210016251f, 0.841702818870544f, + -0.365019410848618f, + 0.841422796249390f, -0.365281373262405f, 0.841142535209656f, + -0.365543156862259f, + 0.840862035751343f, -0.365804702043533f, 0.840581357479095f, + -0.366066008806229f, + 0.840300500392914f, -0.366327136754990f, 0.840019404888153f, + -0.366588026285172f, + 0.839738130569458f, -0.366848707199097f, 0.839456677436829f, + -0.367109179496765f, + 0.839175045490265f, -0.367369443178177f, 0.838893175125122f, + -0.367629468441010f, + 0.838611066341400f, -0.367889285087585f, 0.838328838348389f, + -0.368148893117905f, + 0.838046371936798f, -0.368408292531967f, 0.837763667106628f, + -0.368667453527451f, + 0.837480843067169f, -0.368926405906677f, 0.837197780609131f, + -0.369185149669647f, + 0.836914479732513f, -0.369443655014038f, 0.836631059646606f, + -0.369701951742172f, + 0.836347401142120f, -0.369960039854050f, 0.836063504219055f, + -0.370217919349670f, + 0.835779488086700f, -0.370475560426712f, 0.835495233535767f, + -0.370732992887497f, + 0.835210800170898f, -0.370990216732025f, 0.834926128387451f, + -0.371247202157974f, + 0.834641277790070f, -0.371503978967667f, 0.834356248378754f, + -0.371760547161102f, + 0.834071040153503f, -0.372016876935959f, 0.833785593509674f, + -0.372272998094559f, + 0.833499968051910f, -0.372528880834579f, 0.833214163780212f, + -0.372784584760666f, + 0.832928121089935f, -0.373040050268173f, 0.832641899585724f, + -0.373295277357101f, + 0.832355499267578f, -0.373550295829773f, 0.832068860530853f, + -0.373805105686188f, + 0.831782102584839f, -0.374059677124023f, 0.831495106220245f, + -0.374314039945602f, + 0.831207871437073f, -0.374568194150925f, 0.830920517444611f, + -0.374822109937668f, + 0.830632925033569f, -0.375075817108154f, 0.830345153808594f, + -0.375329315662384f, + 0.830057144165039f, -0.375582575798035f, 0.829769015312195f, + -0.375835597515106f, + 0.829480648040771f, -0.376088410615921f, 0.829192101955414f, + -0.376341015100479f, + 0.828903317451477f, -0.376593410968781f, 0.828614413738251f, + -0.376845568418503f, + 0.828325271606445f, -0.377097487449646f, 0.828035950660706f, + -0.377349197864532f, + 0.827746450901031f, -0.377600699663162f, 0.827456712722778f, + -0.377851963043213f, + 0.827166795730591f, -0.378102988004684f, 0.826876699924469f, + -0.378353834152222f, + 0.826586425304413f, -0.378604412078857f, 0.826295912265778f, + -0.378854811191559f, + 0.826005280017853f, -0.379104942083359f, 0.825714409351349f, + -0.379354894161224f, + 0.825423359870911f, -0.379604607820511f, 0.825132071971893f, + -0.379854083061218f, + 0.824840664863586f, -0.380103349685669f, 0.824549019336700f, + -0.380352377891541f, + 0.824257194995880f, -0.380601197481155f, 0.823965191841125f, + -0.380849778652191f, + 0.823673009872437f, -0.381098151206970f, 0.823380589485168f, + -0.381346285343170f, + 0.823087990283966f, -0.381594210863113f, 0.822795212268829f, + -0.381841897964478f, + 0.822502255439758f, -0.382089376449585f, 0.822209119796753f, + -0.382336616516113f, + 0.821915745735168f, -0.382583618164063f, 0.821622252464294f, + -0.382830440998077f, + 0.821328520774841f, -0.383076995611191f, 0.821034610271454f, + -0.383323341608047f, + 0.820740520954132f, -0.383569449186325f, 0.820446193218231f, + -0.383815348148346f, + 0.820151746273041f, -0.384061008691788f, 0.819857060909271f, + -0.384306460618973f, + 0.819562196731567f, -0.384551674127579f, 0.819267153739929f, + -0.384796649217606f, + 0.818971931934357f, -0.385041415691376f, 0.818676531314850f, + -0.385285943746567f, + 0.818380951881409f, -0.385530263185501f, 0.818085134029388f, + -0.385774344205856f, + 0.817789137363434f, -0.386018186807632f, 0.817493021488190f, + -0.386261820793152f, + 0.817196667194366f, -0.386505216360092f, 0.816900074481964f, + -0.386748403310776f, + 0.816603362560272f, -0.386991351842880f, 0.816306471824646f, + -0.387234061956406f, + 0.816009342670441f, -0.387476563453674f, 0.815712094306946f, + -0.387718826532364f, + 0.815414607524872f, -0.387960851192474f, 0.815116941928864f, + -0.388202667236328f, + 0.814819097518921f, -0.388444244861603f, 0.814521074295044f, + -0.388685584068298f, + 0.814222872257233f, -0.388926714658737f, 0.813924491405487f, + -0.389167606830597f, + 0.813625931739807f, -0.389408260583878f, 0.813327133655548f, + -0.389648675918579f, + 0.813028216362000f, -0.389888882637024f, 0.812729060649872f, + -0.390128880739212f, + 0.812429726123810f, -0.390368610620499f, 0.812130272388458f, + -0.390608131885529f, + 0.811830580234528f, -0.390847414731979f, 0.811530709266663f, + -0.391086459159851f, + 0.811230659484863f, -0.391325294971466f, 0.810930430889130f, + -0.391563892364502f, + 0.810629963874817f, -0.391802251338959f, 0.810329377651215f, + -0.392040401697159f, + 0.810028612613678f, -0.392278283834457f, 0.809727668762207f, + -0.392515957355499f, + 0.809426486492157f, -0.392753422260284f, 0.809125185012817f, + -0.392990618944168f, + 0.808823645114899f, -0.393227607011795f, 0.808521986007690f, + -0.393464356660843f, + 0.808220088481903f, -0.393700867891312f, 0.807918012142181f, + -0.393937170505524f, + 0.807615816593170f, -0.394173204898834f, 0.807313382625580f, + -0.394409030675888f, + 0.807010769844055f, -0.394644618034363f, 0.806707978248596f, + -0.394879996776581f, + 0.806405067443848f, -0.395115107297897f, 0.806101918220520f, + -0.395350009202957f, + 0.805798590183258f, -0.395584672689438f, 0.805495083332062f, + -0.395819097757339f, + 0.805191397666931f, -0.396053284406662f, 0.804887533187866f, + -0.396287262439728f, + 0.804583489894867f, -0.396520972251892f, 0.804279267787933f, + -0.396754473447800f, + 0.803974866867065f, -0.396987736225128f, 0.803670346736908f, + -0.397220760583878f, + 0.803365588188171f, -0.397453576326370f, 0.803060650825500f, + -0.397686123847961f, + 0.802755534648895f, -0.397918462753296f, 0.802450239658356f, + -0.398150533437729f, + 0.802144765853882f, -0.398382395505905f, 0.801839113235474f, + -0.398614019155502f, + 0.801533281803131f, -0.398845434188843f, 0.801227271556854f, + -0.399076581001282f, + 0.800921142101288f, -0.399307489395142f, 0.800614774227142f, + -0.399538189172745f, + 0.800308227539063f, -0.399768620729446f, 0.800001561641693f, + -0.399998843669891f, + 0.799694657325745f, -0.400228828191757f, 0.799387574195862f, + -0.400458574295044f, + 0.799080371856689f, -0.400688081979752f, 0.798772931098938f, + -0.400917351245880f, + 0.798465371131897f, -0.401146411895752f, 0.798157572746277f, + -0.401375204324722f, + 0.797849655151367f, -0.401603758335114f, 0.797541558742523f, + -0.401832103729248f, + 0.797233223915100f, -0.402060180902481f, 0.796924769878387f, + -0.402288049459457f, + 0.796616137027740f, -0.402515679597855f, 0.796307325363159f, + -0.402743041515350f, + 0.795998334884644f, -0.402970194816589f, 0.795689165592194f, + -0.403197109699249f, + 0.795379877090454f, -0.403423786163330f, 0.795070350170136f, + -0.403650224208832f, + 0.794760644435883f, -0.403876423835754f, 0.794450819492340f, + -0.404102355241776f, + 0.794140756130219f, -0.404328078031540f, 0.793830573558807f, + -0.404553562402725f, + 0.793520212173462f, -0.404778808355331f, 0.793209671974182f, + -0.405003815889359f, + 0.792898952960968f, -0.405228585004807f, 0.792588055133820f, + -0.405453115701675f, + 0.792276978492737f, -0.405677437782288f, 0.791965723037720f, + -0.405901491641998f, + 0.791654348373413f, -0.406125307083130f, 0.791342735290527f, + -0.406348884105682f, + 0.791031002998352f, -0.406572192907333f, 0.790719091892242f, + -0.406795293092728f, + 0.790407001972198f, -0.407018154859543f, 0.790094733238220f, + -0.407240778207779f, + 0.789782285690308f, -0.407463163137436f, 0.789469659328461f, + -0.407685309648514f, + 0.789156913757324f, -0.407907217741013f, 0.788843929767609f, + -0.408128857612610f, + 0.788530826568604f, -0.408350288867950f, 0.788217544555664f, + -0.408571451902390f, + 0.787904083728790f, -0.408792406320572f, 0.787590444087982f, + -0.409013092517853f, + 0.787276685237885f, -0.409233570098877f, 0.786962687969208f, + -0.409453779459000f, + 0.786648571491241f, -0.409673750400543f, 0.786334276199341f, + -0.409893482923508f, + 0.786019802093506f, -0.410112977027893f, 0.785705149173737f, + -0.410332232713699f, + 0.785390377044678f, -0.410551249980927f, 0.785075426101685f, + -0.410770028829575f, + 0.784760236740112f, -0.410988569259644f, 0.784444928169250f, + -0.411206841468811f, + 0.784129500389099f, -0.411424905061722f, 0.783813834190369f, + -0.411642700433731f, + 0.783498048782349f, -0.411860257387161f, 0.783182024955750f, + -0.412077575922012f, + 0.782865881919861f, -0.412294656038284f, 0.782549619674683f, + -0.412511497735977f, + 0.782233119010925f, -0.412728071212769f, 0.781916499137878f, + -0.412944436073303f, + 0.781599700450897f, -0.413160532712936f, 0.781282722949982f, + -0.413376390933990f, + 0.780965566635132f, -0.413592010736465f, 0.780648231506348f, + -0.413807392120361f, + 0.780330777168274f, -0.414022535085678f, 0.780013144016266f, + -0.414237409830093f, + 0.779695332050323f, -0.414452046155930f, 0.779377400875092f, + -0.414666473865509f, + 0.779059290885925f, -0.414880603551865f, 0.778741002082825f, + -0.415094524621964f, + 0.778422534465790f, -0.415308207273483f, 0.778103888034821f, + -0.415521621704102f, + 0.777785122394562f, -0.415734797716141f, 0.777466177940369f, + -0.415947735309601f, + 0.777147054672241f, -0.416160434484482f, 0.776827812194824f, + -0.416372895240784f, + 0.776508331298828f, -0.416585087776184f, 0.776188731193542f, + -0.416797041893005f, + 0.775869011878967f, -0.417008757591248f, 0.775549054145813f, + -0.417220205068588f, + 0.775228977203369f, -0.417431443929672f, 0.774908721446991f, + -0.417642414569855f, + 0.774588346481323f, -0.417853146791458f, 0.774267733097076f, + -0.418063640594482f, + 0.773947000503540f, -0.418273866176605f, 0.773626148700714f, + -0.418483853340149f, + 0.773305058479309f, -0.418693602085114f, 0.772983849048615f, + -0.418903112411499f, + 0.772662520408630f, -0.419112354516983f, 0.772340953350067f, + -0.419321358203888f, + 0.772019267082214f, -0.419530123472214f, 0.771697402000427f, + -0.419738620519638f, + 0.771375417709351f, -0.419946908950806f, 0.771053194999695f, + -0.420154929161072f, + 0.770730912685394f, -0.420362681150436f, 0.770408391952515f, + -0.420570224523544f, + 0.770085752010345f, -0.420777499675751f, 0.769762933254242f, + -0.420984506607056f, + 0.769439935684204f, -0.421191304922104f, 0.769116818904877f, + -0.421397835016251f, + 0.768793523311615f, -0.421604126691818f, 0.768470108509064f, + -0.421810150146484f, + 0.768146514892578f, -0.422015935182571f, 0.767822742462158f, + -0.422221481800079f, + 0.767498791217804f, -0.422426789999008f, 0.767174720764160f, + -0.422631829977036f, + 0.766850471496582f, -0.422836631536484f, 0.766526103019714f, + -0.423041164875031f, + 0.766201555728912f, -0.423245459794998f, 0.765876889228821f, + -0.423449516296387f, + 0.765551984310150f, -0.423653304576874f, 0.765226960182190f, + -0.423856884241104f, + 0.764901816844940f, -0.424060165882111f, 0.764576494693756f, + -0.424263238906860f, + 0.764250993728638f, -0.424466013908386f, 0.763925373554230f, + -0.424668580293655f, + 0.763599574565887f, -0.424870878458023f, 0.763273596763611f, + -0.425072938203812f, + 0.762947499752045f, -0.425274729728699f, 0.762621283531189f, + -0.425476282835007f, + 0.762294828891754f, -0.425677597522736f, 0.761968255043030f, + -0.425878643989563f, + 0.761641561985016f, -0.426079452037811f, 0.761314690113068f, + -0.426279991865158f, + 0.760987639427185f, -0.426480293273926f, 0.760660469532013f, + -0.426680356264114f, + 0.760333120822906f, -0.426880151033401f, 0.760005652904511f, + -0.427079707384110f, + 0.759678006172180f, -0.427278995513916f, 0.759350180625916f, + -0.427478045225143f, + 0.759022235870361f, -0.427676826715469f, 0.758694171905518f, + -0.427875369787216f, + 0.758365929126740f, -0.428073674440384f, 0.758037507534027f, + -0.428271710872650f, + 0.757708966732025f, -0.428469479084015f, 0.757380247116089f, + -0.428667008876801f, + 0.757051348686218f, -0.428864300251007f, 0.756722390651703f, + -0.429061323404312f, + 0.756393194198608f, -0.429258108139038f, 0.756063878536224f, + -0.429454624652863f, + 0.755734443664551f, -0.429650902748108f, 0.755404829978943f, + -0.429846942424774f, + 0.755075037479401f, -0.430042684078217f, 0.754745125770569f, + -0.430238217115402f, + 0.754415094852448f, -0.430433481931686f, 0.754084885120392f, + -0.430628478527069f, + 0.753754496574402f, -0.430823236703873f, 0.753423988819122f, + -0.431017726659775f, + 0.753093302249908f, -0.431211978197098f, 0.752762496471405f, + -0.431405961513519f, + 0.752431571483612f, -0.431599706411362f, 0.752100467681885f, + -0.431793183088303f, + 0.751769185066223f, -0.431986421346664f, 0.751437783241272f, + -0.432179391384125f, + 0.751106262207031f, -0.432372123003006f, 0.750774562358856f, + -0.432564586400986f, + 0.750442683696747f, -0.432756811380386f, 0.750110685825348f, + -0.432948768138886f, + 0.749778568744659f, -0.433140486478806f, 0.749446272850037f, + -0.433331936597824f, + 0.749113857746124f, -0.433523118495941f, 0.748781263828278f, + -0.433714061975479f, + 0.748448550701141f, -0.433904737234116f, 0.748115658760071f, + -0.434095174074173f, + 0.747782647609711f, -0.434285342693329f, 0.747449457645416f, + -0.434475272893906f, + 0.747116148471832f, -0.434664934873581f, 0.746782720088959f, + -0.434854328632355f, + 0.746449112892151f, -0.435043483972549f, 0.746115326881409f, + -0.435232400894165f, + 0.745781481266022f, -0.435421019792557f, 0.745447397232056f, + -0.435609430074692f, + 0.745113253593445f, -0.435797542333603f, 0.744778931140900f, + -0.435985416173935f, + 0.744444429874420f, -0.436173021793365f, 0.744109809398651f, + -0.436360388994217f, + 0.743775069713593f, -0.436547487974167f, 0.743440151214600f, + -0.436734348535538f, + 0.743105113506317f, -0.436920911073685f, 0.742769956588745f, + -0.437107264995575f, + 0.742434620857239f, -0.437293320894241f, 0.742099165916443f, + -0.437479138374329f, + 0.741763532161713f, -0.437664687633514f, 0.741427779197693f, + -0.437849998474121f, + 0.741091907024384f, -0.438035041093826f, 0.740755856037140f, + -0.438219845294952f, + 0.740419685840607f, -0.438404351472855f, 0.740083336830139f, + -0.438588619232178f, + 0.739746868610382f, -0.438772648572922f, 0.739410281181335f, + -0.438956409692764f, + 0.739073514938354f, -0.439139902591705f, 0.738736629486084f, + -0.439323127269745f, + 0.738399624824524f, -0.439506113529205f, 0.738062441349030f, + -0.439688831567764f, + 0.737725138664246f, -0.439871311187744f, 0.737387716770172f, + -0.440053492784500f, + 0.737050116062164f, -0.440235435962677f, 0.736712396144867f, + -0.440417140722275f, + 0.736374497413635f, -0.440598547458649f, 0.736036539077759f, + -0.440779715776443f, + 0.735698342323303f, -0.440960645675659f, 0.735360085964203f, + -0.441141277551651f, + 0.735021650791168f, -0.441321671009064f, 0.734683096408844f, + -0.441501796245575f, + 0.734344422817230f, -0.441681683063507f, 0.734005570411682f, + -0.441861271858215f, + 0.733666598796844f, -0.442040622234344f, 0.733327507972717f, + -0.442219734191895f, + 0.732988238334656f, -0.442398548126221f, 0.732648849487305f, + -0.442577123641968f, + 0.732309341430664f, -0.442755430936813f, 0.731969714164734f, + -0.442933470010757f, + 0.731629908084869f, -0.443111270666122f, 0.731289982795715f, + -0.443288803100586f, + 0.730949878692627f, -0.443466067314148f, 0.730609714984894f, + -0.443643063306808f, + 0.730269372463226f, -0.443819820880890f, 0.729928910732269f, + -0.443996280431747f, + 0.729588270187378f, -0.444172531366348f, 0.729247510433197f, + -0.444348484277725f, + 0.728906631469727f, -0.444524168968201f, 0.728565633296967f, + -0.444699615240097f, + 0.728224515914917f, -0.444874793291092f, 0.727883219718933f, + -0.445049703121185f, + 0.727541804313660f, -0.445224374532700f, 0.727200269699097f, + -0.445398747920990f, + 0.726858556270599f, -0.445572882890701f, 0.726516723632813f, + -0.445746749639511f, + 0.726174771785736f, -0.445920348167419f, 0.725832700729370f, + -0.446093708276749f, + 0.725490510463715f, -0.446266770362854f, 0.725148141384125f, + -0.446439594030380f, + 0.724805653095245f, -0.446612149477005f, 0.724463045597076f, + -0.446784436702728f, + 0.724120318889618f, -0.446956485509872f, 0.723777413368225f, + -0.447128236293793f, + 0.723434448242188f, -0.447299748659134f, 0.723091304302216f, + -0.447470992803574f, + 0.722747981548309f, -0.447641968727112f, 0.722404599189758f, + -0.447812676429749f, + 0.722061097621918f, -0.447983115911484f, 0.721717417240143f, + -0.448153316974640f, + 0.721373617649078f, -0.448323249816895f, 0.721029698848724f, + -0.448492884635925f, + 0.720685660839081f, -0.448662281036377f, 0.720341444015503f, + -0.448831409215927f, + 0.719997107982636f, -0.449000298976898f, 0.719652712345123f, + -0.449168890714645f, + 0.719308137893677f, -0.449337244033813f, 0.718963444232941f, + -0.449505299329758f, + 0.718618571758270f, -0.449673116207123f, 0.718273639678955f, + -0.449840664863586f, + 0.717928528785706f, -0.450007945299149f, 0.717583298683167f, + -0.450174957513809f, + 0.717238008975983f, -0.450341701507568f, 0.716892480850220f, + -0.450508207082748f, + 0.716546893119812f, -0.450674414634705f, 0.716201186180115f, + -0.450840383768082f, + 0.715855300426483f, -0.451006084680557f, 0.715509355068207f, + -0.451171487569809f, + 0.715163230895996f, -0.451336652040482f, 0.714816987514496f, + -0.451501548290253f, + 0.714470624923706f, -0.451666176319122f, 0.714124143123627f, + -0.451830536127090f, + 0.713777542114258f, -0.451994657516479f, 0.713430821895599f, + -0.452158480882645f, + 0.713083922863007f, -0.452322036027908f, 0.712736964225769f, + -0.452485352754593f, + 0.712389826774597f, -0.452648371458054f, 0.712042629718781f, + -0.452811151742935f, + 0.711695253849030f, -0.452973634004593f, 0.711347758769989f, + -0.453135877847672f, + 0.711000144481659f, -0.453297853469849f, 0.710652410984039f, + -0.453459560871124f, + 0.710304558277130f, -0.453621000051498f, 0.709956526756287f, + -0.453782171010971f, + 0.709608435630798f, -0.453943043947220f, 0.709260225296021f, + -0.454103678464890f, + 0.708911836147308f, -0.454264044761658f, 0.708563387393951f, + -0.454424172639847f, + 0.708214759826660f, -0.454584002494812f, 0.707866072654724f, + -0.454743564128876f, + 0.707517206668854f, -0.454902857542038f, 0.707168221473694f, + -0.455061882734299f, + 0.706819176673889f, -0.455220639705658f, 0.706469953060150f, + -0.455379128456116f, + 0.706120610237122f, -0.455537378787994f, 0.705771148204803f, + -0.455695331096649f, + 0.705421566963196f, -0.455853015184402f, 0.705071866512299f, + -0.456010431051254f, + 0.704722046852112f, -0.456167578697205f, 0.704372167587280f, + -0.456324487924576f, + 0.704022109508514f, -0.456481099128723f, 0.703671932220459f, + -0.456637442111969f, + 0.703321635723114f, -0.456793516874313f, 0.702971220016479f, + -0.456949323415756f, + 0.702620685100555f, -0.457104891538620f, 0.702270030975342f, + -0.457260161638260f, + 0.701919257640839f, -0.457415163516998f, 0.701568365097046f, + -0.457569897174835f, + 0.701217353343964f, -0.457724362611771f, 0.700866222381592f, + -0.457878559827805f, + 0.700514972209930f, -0.458032488822937f, 0.700163602828979f, + -0.458186149597168f, + 0.699812114238739f, -0.458339542150497f, 0.699460506439209f, + -0.458492636680603f, + 0.699108779430389f, -0.458645492792130f, 0.698756933212280f, + -0.458798080682755f, + 0.698404967784882f, -0.458950400352478f, 0.698052942752838f, + -0.459102421998978f, + 0.697700738906860f, -0.459254205226898f, 0.697348415851593f, + -0.459405690431595f, + 0.696996033191681f, -0.459556937217712f, 0.696643471717834f, + -0.459707885980606f, + 0.696290850639343f, -0.459858566522598f, 0.695938050746918f, + -0.460008978843689f, + 0.695585191249847f, -0.460159152746201f, 0.695232212543488f, + -0.460309028625488f, + 0.694879114627838f, -0.460458606481552f, 0.694525837898254f, + -0.460607945919037f, + 0.694172501564026f, -0.460757017135620f, 0.693819046020508f, + -0.460905820131302f, + 0.693465530872345f, -0.461054325103760f, 0.693111836910248f, + -0.461202591657639f, + 0.692758023738861f, -0.461350560188293f, 0.692404091358185f, + -0.461498260498047f, + 0.692050099372864f, -0.461645722389221f, 0.691695988178253f, + -0.461792886257172f, + 0.691341698169708f, -0.461939752101898f, 0.690987348556519f, + -0.462086379528046f, + 0.690632879734039f, -0.462232738733292f, 0.690278291702271f, + -0.462378799915314f, + 0.689923584461212f, -0.462524622678757f, 0.689568817615509f, + -0.462670147418976f, + 0.689213871955872f, -0.462815403938293f, 0.688858866691589f, + -0.462960392236710f, + 0.688503682613373f, -0.463105112314224f, 0.688148438930511f, + -0.463249564170837f, + 0.687793076038361f, -0.463393747806549f, 0.687437593936920f, + -0.463537633419037f, + 0.687082052230835f, -0.463681250810623f, 0.686726331710815f, + -0.463824629783630f, + 0.686370551586151f, -0.463967710733414f, 0.686014592647552f, + -0.464110493659973f, + 0.685658574104309f, -0.464253038167953f, 0.685302436351776f, + -0.464395314455032f, + 0.684946238994598f, -0.464537292718887f, 0.684589862823486f, + -0.464679002761841f, + 0.684233427047729f, -0.464820444583893f, 0.683876872062683f, + -0.464961618185043f, + 0.683520197868347f, -0.465102523565292f, 0.683163404464722f, + -0.465243130922318f, + 0.682806491851807f, -0.465383470058441f, 0.682449519634247f, + -0.465523540973663f, + 0.682092368602753f, -0.465663343667984f, 0.681735157966614f, + -0.465802878141403f, + 0.681377887725830f, -0.465942144393921f, 0.681020438671112f, + -0.466081112623215f, + 0.680662930011749f, -0.466219812631607f, 0.680305242538452f, + -0.466358244419098f, + 0.679947495460510f, -0.466496407985687f, 0.679589688777924f, + -0.466634273529053f, + 0.679231703281403f, -0.466771900653839f, 0.678873658180237f, + -0.466909229755402f, + 0.678515493869781f, -0.467046260833740f, 0.678157210350037f, + -0.467183053493500f, + 0.677798807621002f, -0.467319577932358f, 0.677440345287323f, + -0.467455804347992f, + 0.677081763744354f, -0.467591762542725f, 0.676723062992096f, + -0.467727422714233f, + 0.676364302635193f, -0.467862844467163f, 0.676005363464355f, + -0.467997968196869f, + 0.675646364688873f, -0.468132823705673f, 0.675287246704102f, + -0.468267410993576f, + 0.674928069114685f, -0.468401730060577f, 0.674568772315979f, + -0.468535751104355f, + 0.674209356307983f, -0.468669503927231f, 0.673849821090698f, + -0.468802988529205f, + 0.673490226268768f, -0.468936175107956f, 0.673130512237549f, + -0.469069123268127f, + 0.672770678997040f, -0.469201773405075f, 0.672410726547241f, + -0.469334155321121f, + 0.672050714492798f, -0.469466239213943f, 0.671690583229065f, + -0.469598054885864f, + 0.671330332756042f, -0.469729602336884f, 0.670970022678375f, + -0.469860881567001f, + 0.670609593391418f, -0.469991862773895f, 0.670249044895172f, + -0.470122605562210f, + 0.669888436794281f, -0.470253020524979f, 0.669527709484100f, + -0.470383197069168f, + 0.669166862964630f, -0.470513075590134f, 0.668805956840515f, + -0.470642685890198f, + 0.668444931507111f, -0.470772027969360f, 0.668083786964417f, + -0.470901101827621f, + 0.667722582817078f, -0.471029877662659f, 0.667361259460449f, + -0.471158385276794f, + 0.666999816894531f, -0.471286594867706f, 0.666638314723969f, + -0.471414536237717f, + 0.666276693344116f, -0.471542209386826f, 0.665914952754974f, + -0.471669614315033f, + 0.665553152561188f, -0.471796721220016f, 0.665191233158112f, + -0.471923559904099f, + 0.664829254150391f, -0.472050130367279f, 0.664467096328735f, + -0.472176402807236f, + 0.664104938507080f, -0.472302407026291f, 0.663742601871490f, + -0.472428143024445f, + 0.663380205631256f, -0.472553610801697f, 0.663017749786377f, + -0.472678780555725f, + 0.662655174732208f, -0.472803652286530f, 0.662292480468750f, + -0.472928285598755f, + 0.661929666996002f, -0.473052620887756f, 0.661566793918610f, + -0.473176687955856f, + 0.661203861236572f, -0.473300457000732f, 0.660840749740601f, + -0.473423957824707f, + 0.660477638244629f, -0.473547190427780f, 0.660114347934723f, + -0.473670125007629f, + 0.659750998020172f, -0.473792791366577f, 0.659387588500977f, + -0.473915189504623f, + 0.659024059772491f, -0.474037289619446f, 0.658660411834717f, + -0.474159121513367f, + 0.658296704292297f, -0.474280685186386f, 0.657932877540588f, + -0.474401950836182f, + 0.657568991184235f, -0.474522948265076f, 0.657204985618591f, + -0.474643647670746f, + 0.656840860843658f, -0.474764078855515f, 0.656476676464081f, + -0.474884241819382f, + 0.656112432479858f, -0.475004136562347f, 0.655748009681702f, + -0.475123733282089f, + 0.655383586883545f, -0.475243031978607f, 0.655019044876099f, + -0.475362062454224f, + 0.654654383659363f, -0.475480824708939f, 0.654289662837982f, + -0.475599318742752f, + 0.653924822807312f, -0.475717514753342f, 0.653559923171997f, + -0.475835442543030f, + 0.653194904327393f, -0.475953072309494f, 0.652829825878143f, + -0.476070433855057f, + 0.652464628219604f, -0.476187497377396f, 0.652099311351776f, + -0.476304292678833f, + 0.651733994483948f, -0.476420819759369f, 0.651368498802185f, + -0.476537048816681f, + 0.651003003120422f, -0.476653009653091f, 0.650637328624725f, + -0.476768702268600f, + 0.650271594524384f, -0.476884096860886f, 0.649905800819397f, + -0.476999223232269f, + 0.649539887905121f, -0.477114051580429f, 0.649173915386200f, + -0.477228611707687f, + 0.648807883262634f, -0.477342873811722f, 0.648441672325134f, + -0.477456867694855f, + 0.648075461387634f, -0.477570593357086f, 0.647709131240845f, + -0.477684020996094f, + 0.647342681884766f, -0.477797180414200f, 0.646976172924042f, + -0.477910041809082f, + 0.646609604358673f, -0.478022634983063f, 0.646242916584015f, + -0.478134930133820f, + 0.645876109600067f, -0.478246957063675f, 0.645509302616119f, + -0.478358715772629f, + 0.645142316818237f, -0.478470176458359f, 0.644775331020355f, + -0.478581339120865f, + 0.644408226013184f, -0.478692263364792f, 0.644041001796722f, + -0.478802859783173f, + 0.643673717975616f, -0.478913217782974f, 0.643306374549866f, + -0.479023247957230f, + 0.642938911914825f, -0.479133039712906f, 0.642571389675140f, + -0.479242533445358f, + 0.642203748226166f, -0.479351729154587f, 0.641836047172546f, + -0.479460656642914f, + 0.641468286514282f, -0.479569315910339f, 0.641100406646729f, + -0.479677677154541f, + 0.640732467174530f, -0.479785770177841f, 0.640364408493042f, + -0.479893565177917f, + 0.639996349811554f, -0.480001062154770f, 0.639628112316132f, + -0.480108320713043f, + 0.639259815216064f, -0.480215251445770f, 0.638891458511353f, + -0.480321943759918f, + 0.638523042201996f, -0.480428308248520f, 0.638154506683350f, + -0.480534434318542f, + 0.637785911560059f, -0.480640232563019f, 0.637417197227478f, + -0.480745792388916f, + 0.637048482894897f, -0.480851024389267f, 0.636679589748383f, + -0.480956017971039f, + 0.636310696601868f, -0.481060713529587f, 0.635941684246063f, + -0.481165111064911f, + 0.635572552680969f, -0.481269240379334f, 0.635203421115875f, + -0.481373071670532f, + 0.634834170341492f, -0.481476634740829f, 0.634464859962463f, + -0.481579899787903f, + 0.634095430374146f, -0.481682896614075f, 0.633725941181183f, + -0.481785595417023f, + 0.633356392383575f, -0.481888025999069f, 0.632986724376678f, + -0.481990188360214f, + 0.632616996765137f, -0.482092022895813f, 0.632247209548950f, + -0.482193619012833f, + 0.631877362728119f, -0.482294887304306f, 0.631507396697998f, + -0.482395917177200f, + 0.631137371063232f, -0.482496619224548f, 0.630767226219177f, + -0.482597053050995f, + 0.630397081375122f, -0.482697218656540f, 0.630026817321777f, + -0.482797086238861f, + 0.629656434059143f, -0.482896685600281f, 0.629286050796509f, + -0.482995986938477f, + 0.628915548324585f, -0.483094990253448f, 0.628544986248016f, + -0.483193725347519f, + 0.628174364566803f, -0.483292192220688f, 0.627803623676300f, + -0.483390361070633f, + 0.627432823181152f, -0.483488231897354f, 0.627061963081360f, + -0.483585834503174f, + 0.626691043376923f, -0.483683139085770f, 0.626320004463196f, + -0.483780175447464f, + 0.625948905944824f, -0.483876913785934f, 0.625577747821808f, + -0.483973383903503f, + 0.625206530094147f, -0.484069555997849f, 0.624835193157196f, + -0.484165430068970f, + 0.624463796615601f, -0.484261035919189f, 0.624092340469360f, + -0.484356373548508f, + 0.623720824718475f, -0.484451413154602f, 0.623349189758301f, + -0.484546154737473f, + 0.622977554798126f, -0.484640628099442f, 0.622605800628662f, + -0.484734803438187f, + 0.622233927249908f, -0.484828680753708f, 0.621862053871155f, + -0.484922289848328f, + 0.621490061283112f, -0.485015630722046f, 0.621118068695068f, + -0.485108673572540f, + 0.620745956897736f, -0.485201418399811f, 0.620373785495758f, + -0.485293895006180f, + 0.620001494884491f, -0.485386073589325f, 0.619629204273224f, + -0.485477954149246f, + 0.619256794452667f, -0.485569566488266f, 0.618884325027466f, + -0.485660910606384f, + 0.618511795997620f, -0.485751956701279f, 0.618139207363129f, + -0.485842704772949f, + 0.617766559123993f, -0.485933154821396f, 0.617393791675568f, + -0.486023366451263f, + 0.617020964622498f, -0.486113250255585f, 0.616648077964783f, + -0.486202865839005f, + 0.616275131702423f, -0.486292183399200f, 0.615902125835419f, + -0.486381232738495f, + 0.615529060363770f, -0.486469984054565f, 0.615155875682831f, + -0.486558437347412f, + 0.614782691001892f, -0.486646622419357f, 0.614409387111664f, + -0.486734509468079f, + 0.614036023616791f, -0.486822128295898f, 0.613662600517273f, + -0.486909449100494f, + 0.613289117813110f, -0.486996471881866f, 0.612915575504303f, + -0.487083226442337f, + 0.612541973590851f, -0.487169682979584f, 0.612168252468109f, + -0.487255871295929f, + 0.611794531345367f, -0.487341761589050f, 0.611420691013336f, + -0.487427353858948f, + 0.611046791076660f, -0.487512677907944f, 0.610672831535339f, + -0.487597703933716f, + 0.610298871994019f, -0.487682431936264f, 0.609924793243408f, + -0.487766891717911f, + 0.609550595283508f, -0.487851053476334f, 0.609176397323608f, + -0.487934947013855f, + 0.608802139759064f, -0.488018542528152f, 0.608427822589874f, + -0.488101840019226f, + 0.608053386211395f, -0.488184869289398f, 0.607678949832916f, + -0.488267600536346f, + 0.607304394245148f, -0.488350033760071f, 0.606929838657379f, + -0.488432198762894f, + 0.606555163860321f, -0.488514065742493f, 0.606180429458618f, + -0.488595664501190f, + 0.605805635452271f, -0.488676935434341f, 0.605430841445923f, + -0.488757967948914f, + 0.605055928230286f, -0.488838672637939f, 0.604680955410004f, + -0.488919109106064f, + 0.604305922985077f, -0.488999247550964f, 0.603930830955505f, + -0.489079117774963f, + 0.603555679321289f, -0.489158689975739f, 0.603180468082428f, + -0.489237964153290f, + 0.602805197238922f, -0.489316970109940f, 0.602429866790771f, + -0.489395678043365f, + 0.602054476737976f, -0.489474087953568f, 0.601679027080536f, + -0.489552229642868f, + 0.601303517818451f, -0.489630073308945f, 0.600927948951721f, + -0.489707618951797f, + 0.600552320480347f, -0.489784896373749f, 0.600176632404327f, + -0.489861875772476f, + 0.599800884723663f, -0.489938557147980f, 0.599425077438354f, + -0.490014940500259f, + 0.599049210548401f, -0.490091055631638f, 0.598673284053802f, + -0.490166902542114f, + 0.598297297954559f, -0.490242421627045f, 0.597921252250671f, + -0.490317672491074f, + 0.597545146942139f, -0.490392625331879f, 0.597168982028961f, + -0.490467309951782f, + 0.596792817115784f, -0.490541696548462f, 0.596416532993317f, + -0.490615785121918f, + 0.596040189266205f, -0.490689605474472f, 0.595663845539093f, + -0.490763127803802f, + 0.595287382602692f, -0.490836352109909f, 0.594910860061646f, + -0.490909278392792f, + 0.594534337520599f, -0.490981936454773f, 0.594157755374908f, + -0.491054296493530f, + 0.593781054019928f, -0.491126358509064f, 0.593404352664948f, + -0.491198152303696f, + 0.593027591705322f, -0.491269648075104f, 0.592650771141052f, + -0.491340845823288f, + 0.592273890972137f, -0.491411775350571f, 0.591896951198578f, + -0.491482406854630f, + 0.591519951820374f, -0.491552740335464f, 0.591142892837524f, + -0.491622805595398f, + 0.590765833854675f, -0.491692543029785f, 0.590388655662537f, + -0.491762012243271f, + 0.590011477470398f, -0.491831213235855f, 0.589634180068970f, + -0.491900116205215f, + 0.589256882667542f, -0.491968721151352f, 0.588879525661469f, + -0.492037028074265f, + 0.588502109050751f, -0.492105036973953f, 0.588124632835388f, + -0.492172777652740f, + 0.587747097015381f, -0.492240220308304f, 0.587369561195374f, + -0.492307394742966f, + 0.586991965770721f, -0.492374241352081f, 0.586614251136780f, + -0.492440819740295f, + 0.586236536502838f, -0.492507129907608f, 0.585858762264252f, + -0.492573112249374f, + 0.585480928421021f, -0.492638826370239f, 0.585103094577789f, + -0.492704242467880f, + 0.584725141525269f, -0.492769360542297f, 0.584347188472748f, + -0.492834210395813f, + 0.583969175815582f, -0.492898762226105f, 0.583591103553772f, + -0.492963016033173f, + 0.583212971687317f, -0.493026971817017f, 0.582834780216217f, + -0.493090659379959f, + 0.582456588745117f, -0.493154048919678f, 0.582078278064728f, + -0.493217140436172f, + 0.581699967384338f, -0.493279963731766f, 0.581321597099304f, + -0.493342459201813f, + 0.580943167209625f, -0.493404686450958f, 0.580564737319946f, + -0.493466645479202f, + 0.580186247825623f, -0.493528276681900f, 0.579807698726654f, + -0.493589639663696f, + 0.579429090023041f, -0.493650704622269f, 0.579050421714783f, + -0.493711471557617f, + 0.578671753406525f, -0.493771970272064f, 0.578292965888977f, + -0.493832170963287f, + 0.577914178371429f, -0.493892073631287f, 0.577535390853882f, + -0.493951678276062f, + 0.577156484127045f, -0.494011014699936f, 0.576777577400208f, + -0.494070053100586f, + 0.576398611068726f, -0.494128793478012f, 0.576019585132599f, + -0.494187235832214f, + 0.575640499591827f, -0.494245409965515f, 0.575261414051056f, + -0.494303256273270f, + 0.574882268905640f, -0.494360834360123f, 0.574503064155579f, + -0.494418144226074f, + 0.574123859405518f, -0.494475126266479f, 0.573744535446167f, + -0.494531840085983f, + 0.573365211486816f, -0.494588255882263f, 0.572985887527466f, + -0.494644373655319f, + 0.572606444358826f, -0.494700223207474f, 0.572227001190186f, + -0.494755744934082f, + 0.571847498416901f, -0.494810998439789f, 0.571467995643616f, + -0.494865983724594f, + 0.571088373661041f, -0.494920641183853f, 0.570708811283112f, + -0.494975030422211f, + 0.570329129695892f, -0.495029091835022f, 0.569949388504028f, + -0.495082914829254f, + 0.569569647312164f, -0.495136409997940f, 0.569189906120300f, + -0.495189607143402f, + 0.568810045719147f, -0.495242536067963f, 0.568430185317993f, + -0.495295166969299f, + 0.568050265312195f, -0.495347499847412f, 0.567670345306396f, + -0.495399564504623f, + 0.567290365695953f, -0.495451331138611f, 0.566910326480865f, + -0.495502769947052f, + 0.566530287265778f, -0.495553970336914f, 0.566150128841400f, + -0.495604842901230f, + 0.565770030021667f, -0.495655417442322f, 0.565389811992645f, + -0.495705723762512f, + 0.565009593963623f, -0.495755732059479f, 0.564629375934601f, + -0.495805442333221f, + 0.564249038696289f, -0.495854884386063f, 0.563868701457977f, + -0.495903998613358f, + 0.563488364219666f, -0.495952844619751f, 0.563107967376709f, + -0.496001392602921f, + 0.562727510929108f, -0.496049642562866f, 0.562346994876862f, + -0.496097624301910f, + 0.561966478824615f, -0.496145308017731f, 0.561585903167725f, + -0.496192663908005f, + 0.561205327510834f, -0.496239781379700f, 0.560824692249298f, + -0.496286571025848f, + 0.560444056987762f, -0.496333062648773f, 0.560063362121582f, + -0.496379286050797f, + 0.559682607650757f, -0.496425211429596f, 0.559301853179932f, + -0.496470838785172f, + 0.558921039104462f, -0.496516168117523f, 0.558540165424347f, + -0.496561229228973f, + 0.558159291744232f, -0.496605962514877f, 0.557778418064117f, + -0.496650427579880f, + 0.557397484779358f, -0.496694594621658f, 0.557016491889954f, + -0.496738493442535f, + 0.556635499000549f, -0.496782064437866f, 0.556254446506500f, + -0.496825367212296f, + 0.555873334407806f, -0.496868371963501f, 0.555492222309113f, + -0.496911078691483f, + 0.555111110210419f, -0.496953487396240f, 0.554729938507080f, + -0.496995598077774f, + 0.554348707199097f, -0.497037440538406f, 0.553967475891113f, + -0.497078984975815f, + 0.553586184978485f, -0.497120231389999f, 0.553204894065857f, + -0.497161179780960f, + 0.552823603153229f, -0.497201830148697f, 0.552442193031311f, + -0.497242212295532f, + 0.552060842514038f, -0.497282296419144f, 0.551679372787476f, + -0.497322082519531f, + 0.551297962665558f, -0.497361570596695f, 0.550916433334351f, + -0.497400760650635f, + 0.550534904003143f, -0.497439652681351f, 0.550153374671936f, + -0.497478276491165f, + 0.549771785736084f, -0.497516602277756f, 0.549390196800232f, + -0.497554630041122f, + 0.549008548259735f, -0.497592359781265f, 0.548626899719238f, + -0.497629791498184f, + 0.548245191574097f, -0.497666954994202f, 0.547863483428955f, + -0.497703820466995f, + 0.547481775283813f, -0.497740387916565f, 0.547099947929382f, + -0.497776657342911f, + 0.546718180179596f, -0.497812628746033f, 0.546336352825165f, + -0.497848302125931f, + 0.545954465866089f, -0.497883707284927f, 0.545572578907013f, + -0.497918814420700f, + 0.545190691947937f, -0.497953623533249f, 0.544808745384216f, + -0.497988134622574f, + 0.544426798820496f, -0.498022347688675f, 0.544044792652130f, + -0.498056292533875f, + 0.543662786483765f, -0.498089909553528f, 0.543280720710754f, + -0.498123258352280f, + 0.542898654937744f, -0.498156309127808f, 0.542516589164734f, + -0.498189061880112f, + 0.542134463787079f, -0.498221516609192f, 0.541752278804779f, + -0.498253703117371f, + 0.541370153427124f, -0.498285561800003f, 0.540987968444824f, + -0.498317152261734f, + 0.540605723857880f, -0.498348444700241f, 0.540223479270935f, + -0.498379439115524f, + 0.539841234683990f, -0.498410135507584f, 0.539458930492401f, + -0.498440563678741f, + 0.539076626300812f, -0.498470664024353f, 0.538694262504578f, + -0.498500496149063f, + 0.538311958312988f, -0.498530030250549f, 0.537929534912109f, + -0.498559266328812f, + 0.537547171115875f, -0.498588204383850f, 0.537164747714996f, + -0.498616874217987f, + 0.536782264709473f, -0.498645216226578f, 0.536399841308594f, + -0.498673290014267f, + 0.536017298698425f, -0.498701065778732f, 0.535634815692902f, + -0.498728543519974f, + 0.535252273082733f, -0.498755723237991f, 0.534869730472565f, + -0.498782604932785f, + 0.534487187862396f, -0.498809218406677f, 0.534104585647583f, + -0.498835533857346f, + 0.533721983432770f, -0.498861521482468f, 0.533339321613312f, + -0.498887240886688f, + 0.532956659793854f, -0.498912662267685f, 0.532573997974396f, + -0.498937815427780f, + 0.532191336154938f, -0.498962640762329f, 0.531808614730835f, + -0.498987197875977f, + 0.531425893306732f, -0.499011427164078f, 0.531043112277985f, + -0.499035388231277f, + 0.530660390853882f, -0.499059051275253f, 0.530277609825134f, + -0.499082416296005f, + 0.529894769191742f, -0.499105513095856f, 0.529511988162994f, + -0.499128282070160f, + 0.529129147529602f, -0.499150782823563f, 0.528746306896210f, + -0.499172955751419f, + 0.528363406658173f, -0.499194860458374f, 0.527980506420136f, + -0.499216467142105f, + 0.527597606182098f, -0.499237775802612f, 0.527214705944061f, + -0.499258816242218f, + 0.526831746101379f, -0.499279528856277f, 0.526448845863342f, + -0.499299973249435f, + 0.526065826416016f, -0.499320119619370f, 0.525682866573334f, + -0.499339967966080f, + 0.525299847126007f, -0.499359518289566f, 0.524916887283325f, + -0.499378770589828f, + 0.524533808231354f, -0.499397724866867f, 0.524150788784027f, + -0.499416410923004f, + 0.523767769336700f, -0.499434769153595f, 0.523384690284729f, + -0.499452859163284f, + 0.523001611232758f, -0.499470651149750f, 0.522618472576141f, + -0.499488145112991f, + 0.522235393524170f, -0.499505341053009f, 0.521852254867554f, + -0.499522238969803f, + 0.521469116210938f, -0.499538868665695f, 0.521085977554321f, + -0.499555170536041f, + 0.520702838897705f, -0.499571204185486f, 0.520319640636444f, + -0.499586939811707f, + 0.519936442375183f, -0.499602377414703f, 0.519553244113922f, + -0.499617516994476f, + 0.519170045852661f, -0.499632388353348f, 0.518786847591400f, + -0.499646931886673f, + 0.518403589725494f, -0.499661177396774f, 0.518020391464233f, + -0.499675154685974f, + 0.517637133598328f, -0.499688833951950f, 0.517253875732422f, + -0.499702215194702f, + 0.516870558261871f, -0.499715298414230f, 0.516487300395966f, + -0.499728083610535f, + 0.516103982925415f, -0.499740600585938f, 0.515720725059509f, + -0.499752789735794f, + 0.515337407588959f, -0.499764710664749f, 0.514954090118408f, + -0.499776333570480f, + 0.514570772647858f, -0.499787658452988f, 0.514187395572662f, + -0.499798685312271f, + 0.513804078102112f, -0.499809414148331f, 0.513420701026917f, + -0.499819844961166f, + 0.513037383556366f, -0.499830007553101f, 0.512654006481171f, + -0.499839842319489f, + 0.512270629405975f, -0.499849408864975f, 0.511887252330780f, + -0.499858677387238f, + 0.511503815650940f, -0.499867647886276f, 0.511120438575745f, + -0.499876320362091f, + 0.510737061500549f, -0.499884694814682f, 0.510353624820709f, + -0.499892801046371f, + 0.509970188140869f, -0.499900579452515f, 0.509586811065674f, + -0.499908089637756f, + 0.509203374385834f, -0.499915301799774f, 0.508819937705994f, + -0.499922215938568f, + 0.508436501026154f, -0.499928832054138f, 0.508053064346313f, + -0.499935150146484f, + 0.507669627666473f, -0.499941170215607f, 0.507286131381989f, + -0.499946922063828f, + 0.506902694702148f, -0.499952346086502f, 0.506519258022308f, + -0.499957501888275f, + 0.506135761737823f, -0.499962359666824f, 0.505752325057983f, + -0.499966919422150f, + 0.505368828773499f, -0.499971181154251f, 0.504985332489014f, + -0.499975144863129f, + 0.504601895809174f, -0.499978810548782f, 0.504218399524689f, + -0.499982208013535f, + 0.503834903240204f, -0.499985307455063f, 0.503451406955719f, + -0.499988079071045f, + 0.503067970275879f, -0.499990582466125f, 0.502684473991394f, + -0.499992787837982f, + 0.502300977706909f, -0.499994695186615f, 0.501917481422424f, + -0.499996334314346f, + 0.501533985137939f, -0.499997645616531f, 0.501150488853455f, + -0.499998688697815f, + 0.500766992568970f, -0.499999403953552f, 0.500383496284485f, + -0.499999850988388f, +}; + + + +/** +* @brief Initialization function for the floating-point RFFT/RIFFT. +* @deprecated Do not use this function. It has been superceded by \ref arm_rfft_fast_init_f32 and will be removed +* in the future. +* @param[in,out] *S points to an instance of the floating-point RFFT/RIFFT structure. +* @param[in,out] *S_CFFT points to an instance of the floating-point CFFT/CIFFT structure. +* @param[in] fftLenReal length of the FFT. +* @param[in] ifftFlagR flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported value. +* +* \par Description: +* \par +* The parameter fftLenReal Specifies length of RFFT/RIFFT Process. Supported FFT Lengths are 128, 512, 2048. +* \par +* The parameter ifftFlagR controls whether a forward or inverse transform is computed. +* Set(=1) ifftFlagR to calculate RIFFT, otherwise RFFT is calculated. +* \par +* The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. +* Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. +* \par +* This function also initializes Twiddle factor table. +*/ + +arm_status arm_rfft_init_f32( + arm_rfft_instance_f32 * S, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag) +{ + + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialize the Real FFT length */ + S->fftLenReal = (uint16_t) fftLenReal; + + /* Initialize the Complex FFT length */ + S->fftLenBy2 = (uint16_t) fftLenReal / 2u; + + /* Initialize the Twiddle coefficientA pointer */ + S->pTwiddleAReal = (float32_t *) realCoefA; + + /* Initialize the Twiddle coefficientB pointer */ + S->pTwiddleBReal = (float32_t *) realCoefB; + + /* Initialize the Flag for selection of RFFT or RIFFT */ + S->ifftFlagR = (uint8_t) ifftFlagR; + + /* Initialize the Flag for calculation Bit reversal or not */ + S->bitReverseFlagR = (uint8_t) bitReverseFlag; + + /* Initializations of structure parameters depending on the FFT length */ + switch (S->fftLenReal) + { + /* Init table modifier value */ + case 8192u: + S->twidCoefRModifier = 1u; + break; + case 2048u: + S->twidCoefRModifier = 4u; + break; + case 512u: + S->twidCoefRModifier = 16u; + break; + case 128u: + S->twidCoefRModifier = 64u; + break; + default: + /* Reporting argument error if rfftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + /* Init Complex FFT Instance */ + S->pCfft = S_CFFT; + + if(S->ifftFlagR) + { + /* Initializes the CIFFT Module for fftLenreal/2 length */ + arm_cfft_radix4_init_f32(S->pCfft, S->fftLenBy2, 1u, 0u); + } + else + { + /* Initializes the CFFT Module for fftLenreal/2 length */ + arm_cfft_radix4_init_f32(S->pCfft, S->fftLenBy2, 0u, 0u); + } + + /* return the status of RFFT Init function */ + return (status); + +} + + /** + * @} end of RealFFT group + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_init_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_init_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,2235 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_rfft_init_q15.c +* +* Description: RFFT & RIFFT Q15 initialisation function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" +#include "arm_common_tables.h" +#include "arm_const_structs.h" + +/** +* @ingroup groupTransforms +*/ + +/** +* @addtogroup RealFFT +* @{ +*/ + + + +/** +* \par +* Generation fixed-point realCoefAQ15 array in Q15 format: +* \par +* n = 4096 +*
for (i = 0; i < n; i++)    
+*  {    
+*    pATable[2 * i] = 0.5 * (1.0 - sin (2 * PI / (double) (2 * n) * (double) i));    
+*    pATable[2 * i + 1] = 0.5 * (-1.0 * cos (2 * PI / (double) (2 * n) * (double) i));    
+*  } 
+* \par +* Convert to fixed point Q15 format +* round(pATable[i] * pow(2, 15)) +*/ +static const q15_t ALIGN4 realCoefAQ15[8192] = { + 0x4000, 0xc000, 0x3ff3, 0xc000, 0x3fe7, 0xc000, 0x3fda, 0xc000, + 0x3fce, 0xc000, 0x3fc1, 0xc000, 0x3fb5, 0xc000, 0x3fa8, 0xc000, + 0x3f9b, 0xc000, 0x3f8f, 0xc000, 0x3f82, 0xc000, 0x3f76, 0xc001, + 0x3f69, 0xc001, 0x3f5d, 0xc001, 0x3f50, 0xc001, 0x3f44, 0xc001, + 0x3f37, 0xc001, 0x3f2a, 0xc001, 0x3f1e, 0xc002, 0x3f11, 0xc002, + 0x3f05, 0xc002, 0x3ef8, 0xc002, 0x3eec, 0xc002, 0x3edf, 0xc003, + 0x3ed2, 0xc003, 0x3ec6, 0xc003, 0x3eb9, 0xc003, 0x3ead, 0xc004, + 0x3ea0, 0xc004, 0x3e94, 0xc004, 0x3e87, 0xc004, 0x3e7a, 0xc005, + 0x3e6e, 0xc005, 0x3e61, 0xc005, 0x3e55, 0xc006, 0x3e48, 0xc006, + 0x3e3c, 0xc006, 0x3e2f, 0xc007, 0x3e23, 0xc007, 0x3e16, 0xc007, + 0x3e09, 0xc008, 0x3dfd, 0xc008, 0x3df0, 0xc009, 0x3de4, 0xc009, + 0x3dd7, 0xc009, 0x3dcb, 0xc00a, 0x3dbe, 0xc00a, 0x3db2, 0xc00b, + 0x3da5, 0xc00b, 0x3d98, 0xc00c, 0x3d8c, 0xc00c, 0x3d7f, 0xc00d, + 0x3d73, 0xc00d, 0x3d66, 0xc00e, 0x3d5a, 0xc00e, 0x3d4d, 0xc00f, + 0x3d40, 0xc00f, 0x3d34, 0xc010, 0x3d27, 0xc010, 0x3d1b, 0xc011, + 0x3d0e, 0xc011, 0x3d02, 0xc012, 0x3cf5, 0xc013, 0x3ce9, 0xc013, + 0x3cdc, 0xc014, 0x3cd0, 0xc014, 0x3cc3, 0xc015, 0x3cb6, 0xc016, + 0x3caa, 0xc016, 0x3c9d, 0xc017, 0x3c91, 0xc018, 0x3c84, 0xc018, + 0x3c78, 0xc019, 0x3c6b, 0xc01a, 0x3c5f, 0xc01a, 0x3c52, 0xc01b, + 0x3c45, 0xc01c, 0x3c39, 0xc01d, 0x3c2c, 0xc01d, 0x3c20, 0xc01e, + 0x3c13, 0xc01f, 0x3c07, 0xc020, 0x3bfa, 0xc020, 0x3bee, 0xc021, + 0x3be1, 0xc022, 0x3bd5, 0xc023, 0x3bc8, 0xc024, 0x3bbc, 0xc024, + 0x3baf, 0xc025, 0x3ba2, 0xc026, 0x3b96, 0xc027, 0x3b89, 0xc028, + 0x3b7d, 0xc029, 0x3b70, 0xc02a, 0x3b64, 0xc02b, 0x3b57, 0xc02b, + 0x3b4b, 0xc02c, 0x3b3e, 0xc02d, 0x3b32, 0xc02e, 0x3b25, 0xc02f, + 0x3b19, 0xc030, 0x3b0c, 0xc031, 0x3b00, 0xc032, 0x3af3, 0xc033, + 0x3ae6, 0xc034, 0x3ada, 0xc035, 0x3acd, 0xc036, 0x3ac1, 0xc037, + 0x3ab4, 0xc038, 0x3aa8, 0xc039, 0x3a9b, 0xc03a, 0x3a8f, 0xc03b, + 0x3a82, 0xc03c, 0x3a76, 0xc03d, 0x3a69, 0xc03f, 0x3a5d, 0xc040, + 0x3a50, 0xc041, 0x3a44, 0xc042, 0x3a37, 0xc043, 0x3a2b, 0xc044, + 0x3a1e, 0xc045, 0x3a12, 0xc047, 0x3a05, 0xc048, 0x39f9, 0xc049, + 0x39ec, 0xc04a, 0x39e0, 0xc04b, 0x39d3, 0xc04c, 0x39c7, 0xc04e, + 0x39ba, 0xc04f, 0x39ae, 0xc050, 0x39a1, 0xc051, 0x3995, 0xc053, + 0x3988, 0xc054, 0x397c, 0xc055, 0x396f, 0xc056, 0x3963, 0xc058, + 0x3956, 0xc059, 0x394a, 0xc05a, 0x393d, 0xc05c, 0x3931, 0xc05d, + 0x3924, 0xc05e, 0x3918, 0xc060, 0x390b, 0xc061, 0x38ff, 0xc062, + 0x38f2, 0xc064, 0x38e6, 0xc065, 0x38d9, 0xc067, 0x38cd, 0xc068, + 0x38c0, 0xc069, 0x38b4, 0xc06b, 0x38a7, 0xc06c, 0x389b, 0xc06e, + 0x388e, 0xc06f, 0x3882, 0xc071, 0x3875, 0xc072, 0x3869, 0xc074, + 0x385c, 0xc075, 0x3850, 0xc077, 0x3843, 0xc078, 0x3837, 0xc07a, + 0x382a, 0xc07b, 0x381e, 0xc07d, 0x3811, 0xc07e, 0x3805, 0xc080, + 0x37f9, 0xc081, 0x37ec, 0xc083, 0x37e0, 0xc085, 0x37d3, 0xc086, + 0x37c7, 0xc088, 0x37ba, 0xc089, 0x37ae, 0xc08b, 0x37a1, 0xc08d, + 0x3795, 0xc08e, 0x3788, 0xc090, 0x377c, 0xc092, 0x376f, 0xc093, + 0x3763, 0xc095, 0x3757, 0xc097, 0x374a, 0xc098, 0x373e, 0xc09a, + 0x3731, 0xc09c, 0x3725, 0xc09e, 0x3718, 0xc09f, 0x370c, 0xc0a1, + 0x36ff, 0xc0a3, 0x36f3, 0xc0a5, 0x36e7, 0xc0a6, 0x36da, 0xc0a8, + 0x36ce, 0xc0aa, 0x36c1, 0xc0ac, 0x36b5, 0xc0ae, 0x36a8, 0xc0af, + 0x369c, 0xc0b1, 0x3690, 0xc0b3, 0x3683, 0xc0b5, 0x3677, 0xc0b7, + 0x366a, 0xc0b9, 0x365e, 0xc0bb, 0x3651, 0xc0bd, 0x3645, 0xc0be, + 0x3639, 0xc0c0, 0x362c, 0xc0c2, 0x3620, 0xc0c4, 0x3613, 0xc0c6, + 0x3607, 0xc0c8, 0x35fa, 0xc0ca, 0x35ee, 0xc0cc, 0x35e2, 0xc0ce, + 0x35d5, 0xc0d0, 0x35c9, 0xc0d2, 0x35bc, 0xc0d4, 0x35b0, 0xc0d6, + 0x35a4, 0xc0d8, 0x3597, 0xc0da, 0x358b, 0xc0dc, 0x357e, 0xc0de, + 0x3572, 0xc0e0, 0x3566, 0xc0e2, 0x3559, 0xc0e4, 0x354d, 0xc0e7, + 0x3540, 0xc0e9, 0x3534, 0xc0eb, 0x3528, 0xc0ed, 0x351b, 0xc0ef, + 0x350f, 0xc0f1, 0x3503, 0xc0f3, 0x34f6, 0xc0f6, 0x34ea, 0xc0f8, + 0x34dd, 0xc0fa, 0x34d1, 0xc0fc, 0x34c5, 0xc0fe, 0x34b8, 0xc100, + 0x34ac, 0xc103, 0x34a0, 0xc105, 0x3493, 0xc107, 0x3487, 0xc109, + 0x347b, 0xc10c, 0x346e, 0xc10e, 0x3462, 0xc110, 0x3455, 0xc113, + 0x3449, 0xc115, 0x343d, 0xc117, 0x3430, 0xc119, 0x3424, 0xc11c, + 0x3418, 0xc11e, 0x340b, 0xc120, 0x33ff, 0xc123, 0x33f3, 0xc125, + 0x33e6, 0xc128, 0x33da, 0xc12a, 0x33ce, 0xc12c, 0x33c1, 0xc12f, + 0x33b5, 0xc131, 0x33a9, 0xc134, 0x339c, 0xc136, 0x3390, 0xc138, + 0x3384, 0xc13b, 0x3377, 0xc13d, 0x336b, 0xc140, 0x335f, 0xc142, + 0x3352, 0xc145, 0x3346, 0xc147, 0x333a, 0xc14a, 0x332d, 0xc14c, + 0x3321, 0xc14f, 0x3315, 0xc151, 0x3308, 0xc154, 0x32fc, 0xc156, + 0x32f0, 0xc159, 0x32e4, 0xc15b, 0x32d7, 0xc15e, 0x32cb, 0xc161, + 0x32bf, 0xc163, 0x32b2, 0xc166, 0x32a6, 0xc168, 0x329a, 0xc16b, + 0x328e, 0xc16e, 0x3281, 0xc170, 0x3275, 0xc173, 0x3269, 0xc176, + 0x325c, 0xc178, 0x3250, 0xc17b, 0x3244, 0xc17e, 0x3238, 0xc180, + 0x322b, 0xc183, 0x321f, 0xc186, 0x3213, 0xc189, 0x3207, 0xc18b, + 0x31fa, 0xc18e, 0x31ee, 0xc191, 0x31e2, 0xc194, 0x31d5, 0xc196, + 0x31c9, 0xc199, 0x31bd, 0xc19c, 0x31b1, 0xc19f, 0x31a4, 0xc1a2, + 0x3198, 0xc1a4, 0x318c, 0xc1a7, 0x3180, 0xc1aa, 0x3174, 0xc1ad, + 0x3167, 0xc1b0, 0x315b, 0xc1b3, 0x314f, 0xc1b6, 0x3143, 0xc1b8, + 0x3136, 0xc1bb, 0x312a, 0xc1be, 0x311e, 0xc1c1, 0x3112, 0xc1c4, + 0x3105, 0xc1c7, 0x30f9, 0xc1ca, 0x30ed, 0xc1cd, 0x30e1, 0xc1d0, + 0x30d5, 0xc1d3, 0x30c8, 0xc1d6, 0x30bc, 0xc1d9, 0x30b0, 0xc1dc, + 0x30a4, 0xc1df, 0x3098, 0xc1e2, 0x308b, 0xc1e5, 0x307f, 0xc1e8, + 0x3073, 0xc1eb, 0x3067, 0xc1ee, 0x305b, 0xc1f1, 0x304e, 0xc1f4, + 0x3042, 0xc1f7, 0x3036, 0xc1fa, 0x302a, 0xc1fd, 0x301e, 0xc201, + 0x3012, 0xc204, 0x3005, 0xc207, 0x2ff9, 0xc20a, 0x2fed, 0xc20d, + 0x2fe1, 0xc210, 0x2fd5, 0xc213, 0x2fc9, 0xc217, 0x2fbc, 0xc21a, + 0x2fb0, 0xc21d, 0x2fa4, 0xc220, 0x2f98, 0xc223, 0x2f8c, 0xc227, + 0x2f80, 0xc22a, 0x2f74, 0xc22d, 0x2f67, 0xc230, 0x2f5b, 0xc234, + 0x2f4f, 0xc237, 0x2f43, 0xc23a, 0x2f37, 0xc23e, 0x2f2b, 0xc241, + 0x2f1f, 0xc244, 0x2f13, 0xc247, 0x2f06, 0xc24b, 0x2efa, 0xc24e, + 0x2eee, 0xc251, 0x2ee2, 0xc255, 0x2ed6, 0xc258, 0x2eca, 0xc25c, + 0x2ebe, 0xc25f, 0x2eb2, 0xc262, 0x2ea6, 0xc266, 0x2e99, 0xc269, + 0x2e8d, 0xc26d, 0x2e81, 0xc270, 0x2e75, 0xc273, 0x2e69, 0xc277, + 0x2e5d, 0xc27a, 0x2e51, 0xc27e, 0x2e45, 0xc281, 0x2e39, 0xc285, + 0x2e2d, 0xc288, 0x2e21, 0xc28c, 0x2e15, 0xc28f, 0x2e09, 0xc293, + 0x2dfc, 0xc296, 0x2df0, 0xc29a, 0x2de4, 0xc29d, 0x2dd8, 0xc2a1, + 0x2dcc, 0xc2a5, 0x2dc0, 0xc2a8, 0x2db4, 0xc2ac, 0x2da8, 0xc2af, + 0x2d9c, 0xc2b3, 0x2d90, 0xc2b7, 0x2d84, 0xc2ba, 0x2d78, 0xc2be, + 0x2d6c, 0xc2c1, 0x2d60, 0xc2c5, 0x2d54, 0xc2c9, 0x2d48, 0xc2cc, + 0x2d3c, 0xc2d0, 0x2d30, 0xc2d4, 0x2d24, 0xc2d8, 0x2d18, 0xc2db, + 0x2d0c, 0xc2df, 0x2d00, 0xc2e3, 0x2cf4, 0xc2e6, 0x2ce8, 0xc2ea, + 0x2cdc, 0xc2ee, 0x2cd0, 0xc2f2, 0x2cc4, 0xc2f5, 0x2cb8, 0xc2f9, + 0x2cac, 0xc2fd, 0x2ca0, 0xc301, 0x2c94, 0xc305, 0x2c88, 0xc308, + 0x2c7c, 0xc30c, 0x2c70, 0xc310, 0x2c64, 0xc314, 0x2c58, 0xc318, + 0x2c4c, 0xc31c, 0x2c40, 0xc320, 0x2c34, 0xc323, 0x2c28, 0xc327, + 0x2c1c, 0xc32b, 0x2c10, 0xc32f, 0x2c05, 0xc333, 0x2bf9, 0xc337, + 0x2bed, 0xc33b, 0x2be1, 0xc33f, 0x2bd5, 0xc343, 0x2bc9, 0xc347, + 0x2bbd, 0xc34b, 0x2bb1, 0xc34f, 0x2ba5, 0xc353, 0x2b99, 0xc357, + 0x2b8d, 0xc35b, 0x2b81, 0xc35f, 0x2b75, 0xc363, 0x2b6a, 0xc367, + 0x2b5e, 0xc36b, 0x2b52, 0xc36f, 0x2b46, 0xc373, 0x2b3a, 0xc377, + 0x2b2e, 0xc37b, 0x2b22, 0xc37f, 0x2b16, 0xc383, 0x2b0a, 0xc387, + 0x2aff, 0xc38c, 0x2af3, 0xc390, 0x2ae7, 0xc394, 0x2adb, 0xc398, + 0x2acf, 0xc39c, 0x2ac3, 0xc3a0, 0x2ab7, 0xc3a5, 0x2aac, 0xc3a9, + 0x2aa0, 0xc3ad, 0x2a94, 0xc3b1, 0x2a88, 0xc3b5, 0x2a7c, 0xc3ba, + 0x2a70, 0xc3be, 0x2a65, 0xc3c2, 0x2a59, 0xc3c6, 0x2a4d, 0xc3ca, + 0x2a41, 0xc3cf, 0x2a35, 0xc3d3, 0x2a29, 0xc3d7, 0x2a1e, 0xc3dc, + 0x2a12, 0xc3e0, 0x2a06, 0xc3e4, 0x29fa, 0xc3e9, 0x29ee, 0xc3ed, + 0x29e3, 0xc3f1, 0x29d7, 0xc3f6, 0x29cb, 0xc3fa, 0x29bf, 0xc3fe, + 0x29b4, 0xc403, 0x29a8, 0xc407, 0x299c, 0xc40b, 0x2990, 0xc410, + 0x2984, 0xc414, 0x2979, 0xc419, 0x296d, 0xc41d, 0x2961, 0xc422, + 0x2955, 0xc426, 0x294a, 0xc42a, 0x293e, 0xc42f, 0x2932, 0xc433, + 0x2926, 0xc438, 0x291b, 0xc43c, 0x290f, 0xc441, 0x2903, 0xc445, + 0x28f7, 0xc44a, 0x28ec, 0xc44e, 0x28e0, 0xc453, 0x28d4, 0xc457, + 0x28c9, 0xc45c, 0x28bd, 0xc461, 0x28b1, 0xc465, 0x28a5, 0xc46a, + 0x289a, 0xc46e, 0x288e, 0xc473, 0x2882, 0xc478, 0x2877, 0xc47c, + 0x286b, 0xc481, 0x285f, 0xc485, 0x2854, 0xc48a, 0x2848, 0xc48f, + 0x283c, 0xc493, 0x2831, 0xc498, 0x2825, 0xc49d, 0x2819, 0xc4a1, + 0x280e, 0xc4a6, 0x2802, 0xc4ab, 0x27f6, 0xc4b0, 0x27eb, 0xc4b4, + 0x27df, 0xc4b9, 0x27d3, 0xc4be, 0x27c8, 0xc4c2, 0x27bc, 0xc4c7, + 0x27b1, 0xc4cc, 0x27a5, 0xc4d1, 0x2799, 0xc4d6, 0x278e, 0xc4da, + 0x2782, 0xc4df, 0x2777, 0xc4e4, 0x276b, 0xc4e9, 0x275f, 0xc4ee, + 0x2754, 0xc4f2, 0x2748, 0xc4f7, 0x273d, 0xc4fc, 0x2731, 0xc501, + 0x2725, 0xc506, 0x271a, 0xc50b, 0x270e, 0xc510, 0x2703, 0xc515, + 0x26f7, 0xc51a, 0x26ec, 0xc51e, 0x26e0, 0xc523, 0x26d4, 0xc528, + 0x26c9, 0xc52d, 0x26bd, 0xc532, 0x26b2, 0xc537, 0x26a6, 0xc53c, + 0x269b, 0xc541, 0x268f, 0xc546, 0x2684, 0xc54b, 0x2678, 0xc550, + 0x266d, 0xc555, 0x2661, 0xc55a, 0x2656, 0xc55f, 0x264a, 0xc564, + 0x263f, 0xc569, 0x2633, 0xc56e, 0x2628, 0xc573, 0x261c, 0xc578, + 0x2611, 0xc57e, 0x2605, 0xc583, 0x25fa, 0xc588, 0x25ee, 0xc58d, + 0x25e3, 0xc592, 0x25d7, 0xc597, 0x25cc, 0xc59c, 0x25c0, 0xc5a1, + 0x25b5, 0xc5a7, 0x25a9, 0xc5ac, 0x259e, 0xc5b1, 0x2592, 0xc5b6, + 0x2587, 0xc5bb, 0x257c, 0xc5c1, 0x2570, 0xc5c6, 0x2565, 0xc5cb, + 0x2559, 0xc5d0, 0x254e, 0xc5d5, 0x2542, 0xc5db, 0x2537, 0xc5e0, + 0x252c, 0xc5e5, 0x2520, 0xc5ea, 0x2515, 0xc5f0, 0x2509, 0xc5f5, + 0x24fe, 0xc5fa, 0x24f3, 0xc600, 0x24e7, 0xc605, 0x24dc, 0xc60a, + 0x24d0, 0xc610, 0x24c5, 0xc615, 0x24ba, 0xc61a, 0x24ae, 0xc620, + 0x24a3, 0xc625, 0x2498, 0xc62a, 0x248c, 0xc630, 0x2481, 0xc635, + 0x2476, 0xc63b, 0x246a, 0xc640, 0x245f, 0xc645, 0x2454, 0xc64b, + 0x2448, 0xc650, 0x243d, 0xc656, 0x2432, 0xc65b, 0x2426, 0xc661, + 0x241b, 0xc666, 0x2410, 0xc66c, 0x2404, 0xc671, 0x23f9, 0xc677, + 0x23ee, 0xc67c, 0x23e2, 0xc682, 0x23d7, 0xc687, 0x23cc, 0xc68d, + 0x23c1, 0xc692, 0x23b5, 0xc698, 0x23aa, 0xc69d, 0x239f, 0xc6a3, + 0x2394, 0xc6a8, 0x2388, 0xc6ae, 0x237d, 0xc6b4, 0x2372, 0xc6b9, + 0x2367, 0xc6bf, 0x235b, 0xc6c5, 0x2350, 0xc6ca, 0x2345, 0xc6d0, + 0x233a, 0xc6d5, 0x232e, 0xc6db, 0x2323, 0xc6e1, 0x2318, 0xc6e6, + 0x230d, 0xc6ec, 0x2301, 0xc6f2, 0x22f6, 0xc6f7, 0x22eb, 0xc6fd, + 0x22e0, 0xc703, 0x22d5, 0xc709, 0x22ca, 0xc70e, 0x22be, 0xc714, + 0x22b3, 0xc71a, 0x22a8, 0xc720, 0x229d, 0xc725, 0x2292, 0xc72b, + 0x2287, 0xc731, 0x227b, 0xc737, 0x2270, 0xc73d, 0x2265, 0xc742, + 0x225a, 0xc748, 0x224f, 0xc74e, 0x2244, 0xc754, 0x2239, 0xc75a, + 0x222d, 0xc75f, 0x2222, 0xc765, 0x2217, 0xc76b, 0x220c, 0xc771, + 0x2201, 0xc777, 0x21f6, 0xc77d, 0x21eb, 0xc783, 0x21e0, 0xc789, + 0x21d5, 0xc78f, 0x21ca, 0xc795, 0x21be, 0xc79a, 0x21b3, 0xc7a0, + 0x21a8, 0xc7a6, 0x219d, 0xc7ac, 0x2192, 0xc7b2, 0x2187, 0xc7b8, + 0x217c, 0xc7be, 0x2171, 0xc7c4, 0x2166, 0xc7ca, 0x215b, 0xc7d0, + 0x2150, 0xc7d6, 0x2145, 0xc7dc, 0x213a, 0xc7e2, 0x212f, 0xc7e8, + 0x2124, 0xc7ee, 0x2119, 0xc7f5, 0x210e, 0xc7fb, 0x2103, 0xc801, + 0x20f8, 0xc807, 0x20ed, 0xc80d, 0x20e2, 0xc813, 0x20d7, 0xc819, + 0x20cc, 0xc81f, 0x20c1, 0xc825, 0x20b6, 0xc82b, 0x20ab, 0xc832, + 0x20a0, 0xc838, 0x2095, 0xc83e, 0x208a, 0xc844, 0x207f, 0xc84a, + 0x2074, 0xc850, 0x2069, 0xc857, 0x205e, 0xc85d, 0x2054, 0xc863, + 0x2049, 0xc869, 0x203e, 0xc870, 0x2033, 0xc876, 0x2028, 0xc87c, + 0x201d, 0xc882, 0x2012, 0xc889, 0x2007, 0xc88f, 0x1ffc, 0xc895, + 0x1ff1, 0xc89b, 0x1fe7, 0xc8a2, 0x1fdc, 0xc8a8, 0x1fd1, 0xc8ae, + 0x1fc6, 0xc8b5, 0x1fbb, 0xc8bb, 0x1fb0, 0xc8c1, 0x1fa5, 0xc8c8, + 0x1f9b, 0xc8ce, 0x1f90, 0xc8d4, 0x1f85, 0xc8db, 0x1f7a, 0xc8e1, + 0x1f6f, 0xc8e8, 0x1f65, 0xc8ee, 0x1f5a, 0xc8f4, 0x1f4f, 0xc8fb, + 0x1f44, 0xc901, 0x1f39, 0xc908, 0x1f2f, 0xc90e, 0x1f24, 0xc915, + 0x1f19, 0xc91b, 0x1f0e, 0xc921, 0x1f03, 0xc928, 0x1ef9, 0xc92e, + 0x1eee, 0xc935, 0x1ee3, 0xc93b, 0x1ed8, 0xc942, 0x1ece, 0xc948, + 0x1ec3, 0xc94f, 0x1eb8, 0xc955, 0x1ead, 0xc95c, 0x1ea3, 0xc963, + 0x1e98, 0xc969, 0x1e8d, 0xc970, 0x1e83, 0xc976, 0x1e78, 0xc97d, + 0x1e6d, 0xc983, 0x1e62, 0xc98a, 0x1e58, 0xc991, 0x1e4d, 0xc997, + 0x1e42, 0xc99e, 0x1e38, 0xc9a4, 0x1e2d, 0xc9ab, 0x1e22, 0xc9b2, + 0x1e18, 0xc9b8, 0x1e0d, 0xc9bf, 0x1e02, 0xc9c6, 0x1df8, 0xc9cc, + 0x1ded, 0xc9d3, 0x1de2, 0xc9da, 0x1dd8, 0xc9e0, 0x1dcd, 0xc9e7, + 0x1dc3, 0xc9ee, 0x1db8, 0xc9f5, 0x1dad, 0xc9fb, 0x1da3, 0xca02, + 0x1d98, 0xca09, 0x1d8e, 0xca10, 0x1d83, 0xca16, 0x1d78, 0xca1d, + 0x1d6e, 0xca24, 0x1d63, 0xca2b, 0x1d59, 0xca32, 0x1d4e, 0xca38, + 0x1d44, 0xca3f, 0x1d39, 0xca46, 0x1d2e, 0xca4d, 0x1d24, 0xca54, + 0x1d19, 0xca5b, 0x1d0f, 0xca61, 0x1d04, 0xca68, 0x1cfa, 0xca6f, + 0x1cef, 0xca76, 0x1ce5, 0xca7d, 0x1cda, 0xca84, 0x1cd0, 0xca8b, + 0x1cc5, 0xca92, 0x1cbb, 0xca99, 0x1cb0, 0xca9f, 0x1ca6, 0xcaa6, + 0x1c9b, 0xcaad, 0x1c91, 0xcab4, 0x1c86, 0xcabb, 0x1c7c, 0xcac2, + 0x1c72, 0xcac9, 0x1c67, 0xcad0, 0x1c5d, 0xcad7, 0x1c52, 0xcade, + 0x1c48, 0xcae5, 0x1c3d, 0xcaec, 0x1c33, 0xcaf3, 0x1c29, 0xcafa, + 0x1c1e, 0xcb01, 0x1c14, 0xcb08, 0x1c09, 0xcb0f, 0x1bff, 0xcb16, + 0x1bf5, 0xcb1e, 0x1bea, 0xcb25, 0x1be0, 0xcb2c, 0x1bd5, 0xcb33, + 0x1bcb, 0xcb3a, 0x1bc1, 0xcb41, 0x1bb6, 0xcb48, 0x1bac, 0xcb4f, + 0x1ba2, 0xcb56, 0x1b97, 0xcb5e, 0x1b8d, 0xcb65, 0x1b83, 0xcb6c, + 0x1b78, 0xcb73, 0x1b6e, 0xcb7a, 0x1b64, 0xcb81, 0x1b59, 0xcb89, + 0x1b4f, 0xcb90, 0x1b45, 0xcb97, 0x1b3b, 0xcb9e, 0x1b30, 0xcba5, + 0x1b26, 0xcbad, 0x1b1c, 0xcbb4, 0x1b11, 0xcbbb, 0x1b07, 0xcbc2, + 0x1afd, 0xcbca, 0x1af3, 0xcbd1, 0x1ae8, 0xcbd8, 0x1ade, 0xcbe0, + 0x1ad4, 0xcbe7, 0x1aca, 0xcbee, 0x1abf, 0xcbf5, 0x1ab5, 0xcbfd, + 0x1aab, 0xcc04, 0x1aa1, 0xcc0b, 0x1a97, 0xcc13, 0x1a8c, 0xcc1a, + 0x1a82, 0xcc21, 0x1a78, 0xcc29, 0x1a6e, 0xcc30, 0x1a64, 0xcc38, + 0x1a5a, 0xcc3f, 0x1a4f, 0xcc46, 0x1a45, 0xcc4e, 0x1a3b, 0xcc55, + 0x1a31, 0xcc5d, 0x1a27, 0xcc64, 0x1a1d, 0xcc6b, 0x1a13, 0xcc73, + 0x1a08, 0xcc7a, 0x19fe, 0xcc82, 0x19f4, 0xcc89, 0x19ea, 0xcc91, + 0x19e0, 0xcc98, 0x19d6, 0xcca0, 0x19cc, 0xcca7, 0x19c2, 0xccaf, + 0x19b8, 0xccb6, 0x19ae, 0xccbe, 0x19a4, 0xccc5, 0x199a, 0xcccd, + 0x198f, 0xccd4, 0x1985, 0xccdc, 0x197b, 0xcce3, 0x1971, 0xcceb, + 0x1967, 0xccf3, 0x195d, 0xccfa, 0x1953, 0xcd02, 0x1949, 0xcd09, + 0x193f, 0xcd11, 0x1935, 0xcd19, 0x192b, 0xcd20, 0x1921, 0xcd28, + 0x1917, 0xcd30, 0x190d, 0xcd37, 0x1903, 0xcd3f, 0x18f9, 0xcd46, + 0x18ef, 0xcd4e, 0x18e6, 0xcd56, 0x18dc, 0xcd5d, 0x18d2, 0xcd65, + 0x18c8, 0xcd6d, 0x18be, 0xcd75, 0x18b4, 0xcd7c, 0x18aa, 0xcd84, + 0x18a0, 0xcd8c, 0x1896, 0xcd93, 0x188c, 0xcd9b, 0x1882, 0xcda3, + 0x1878, 0xcdab, 0x186f, 0xcdb2, 0x1865, 0xcdba, 0x185b, 0xcdc2, + 0x1851, 0xcdca, 0x1847, 0xcdd2, 0x183d, 0xcdd9, 0x1833, 0xcde1, + 0x182a, 0xcde9, 0x1820, 0xcdf1, 0x1816, 0xcdf9, 0x180c, 0xce01, + 0x1802, 0xce08, 0x17f8, 0xce10, 0x17ef, 0xce18, 0x17e5, 0xce20, + 0x17db, 0xce28, 0x17d1, 0xce30, 0x17c8, 0xce38, 0x17be, 0xce40, + 0x17b4, 0xce47, 0x17aa, 0xce4f, 0x17a0, 0xce57, 0x1797, 0xce5f, + 0x178d, 0xce67, 0x1783, 0xce6f, 0x177a, 0xce77, 0x1770, 0xce7f, + 0x1766, 0xce87, 0x175c, 0xce8f, 0x1753, 0xce97, 0x1749, 0xce9f, + 0x173f, 0xcea7, 0x1736, 0xceaf, 0x172c, 0xceb7, 0x1722, 0xcebf, + 0x1719, 0xcec7, 0x170f, 0xcecf, 0x1705, 0xced7, 0x16fc, 0xcedf, + 0x16f2, 0xcee7, 0x16e8, 0xceef, 0x16df, 0xcef7, 0x16d5, 0xceff, + 0x16cb, 0xcf07, 0x16c2, 0xcf10, 0x16b8, 0xcf18, 0x16af, 0xcf20, + 0x16a5, 0xcf28, 0x169b, 0xcf30, 0x1692, 0xcf38, 0x1688, 0xcf40, + 0x167f, 0xcf48, 0x1675, 0xcf51, 0x166c, 0xcf59, 0x1662, 0xcf61, + 0x1659, 0xcf69, 0x164f, 0xcf71, 0x1645, 0xcf79, 0x163c, 0xcf82, + 0x1632, 0xcf8a, 0x1629, 0xcf92, 0x161f, 0xcf9a, 0x1616, 0xcfa3, + 0x160c, 0xcfab, 0x1603, 0xcfb3, 0x15f9, 0xcfbb, 0x15f0, 0xcfc4, + 0x15e6, 0xcfcc, 0x15dd, 0xcfd4, 0x15d4, 0xcfdc, 0x15ca, 0xcfe5, + 0x15c1, 0xcfed, 0x15b7, 0xcff5, 0x15ae, 0xcffe, 0x15a4, 0xd006, + 0x159b, 0xd00e, 0x1592, 0xd016, 0x1588, 0xd01f, 0x157f, 0xd027, + 0x1575, 0xd030, 0x156c, 0xd038, 0x1563, 0xd040, 0x1559, 0xd049, + 0x1550, 0xd051, 0x1547, 0xd059, 0x153d, 0xd062, 0x1534, 0xd06a, + 0x152a, 0xd073, 0x1521, 0xd07b, 0x1518, 0xd083, 0x150e, 0xd08c, + 0x1505, 0xd094, 0x14fc, 0xd09d, 0x14f3, 0xd0a5, 0x14e9, 0xd0ae, + 0x14e0, 0xd0b6, 0x14d7, 0xd0bf, 0x14cd, 0xd0c7, 0x14c4, 0xd0d0, + 0x14bb, 0xd0d8, 0x14b2, 0xd0e0, 0x14a8, 0xd0e9, 0x149f, 0xd0f2, + 0x1496, 0xd0fa, 0x148d, 0xd103, 0x1483, 0xd10b, 0x147a, 0xd114, + 0x1471, 0xd11c, 0x1468, 0xd125, 0x145f, 0xd12d, 0x1455, 0xd136, + 0x144c, 0xd13e, 0x1443, 0xd147, 0x143a, 0xd150, 0x1431, 0xd158, + 0x1428, 0xd161, 0x141e, 0xd169, 0x1415, 0xd172, 0x140c, 0xd17b, + 0x1403, 0xd183, 0x13fa, 0xd18c, 0x13f1, 0xd195, 0x13e8, 0xd19d, + 0x13df, 0xd1a6, 0x13d5, 0xd1af, 0x13cc, 0xd1b7, 0x13c3, 0xd1c0, + 0x13ba, 0xd1c9, 0x13b1, 0xd1d1, 0x13a8, 0xd1da, 0x139f, 0xd1e3, + 0x1396, 0xd1eb, 0x138d, 0xd1f4, 0x1384, 0xd1fd, 0x137b, 0xd206, + 0x1372, 0xd20e, 0x1369, 0xd217, 0x1360, 0xd220, 0x1357, 0xd229, + 0x134e, 0xd231, 0x1345, 0xd23a, 0x133c, 0xd243, 0x1333, 0xd24c, + 0x132a, 0xd255, 0x1321, 0xd25d, 0x1318, 0xd266, 0x130f, 0xd26f, + 0x1306, 0xd278, 0x12fd, 0xd281, 0x12f4, 0xd28a, 0x12eb, 0xd292, + 0x12e2, 0xd29b, 0x12d9, 0xd2a4, 0x12d1, 0xd2ad, 0x12c8, 0xd2b6, + 0x12bf, 0xd2bf, 0x12b6, 0xd2c8, 0x12ad, 0xd2d1, 0x12a4, 0xd2d9, + 0x129b, 0xd2e2, 0x1292, 0xd2eb, 0x128a, 0xd2f4, 0x1281, 0xd2fd, + 0x1278, 0xd306, 0x126f, 0xd30f, 0x1266, 0xd318, 0x125d, 0xd321, + 0x1255, 0xd32a, 0x124c, 0xd333, 0x1243, 0xd33c, 0x123a, 0xd345, + 0x1231, 0xd34e, 0x1229, 0xd357, 0x1220, 0xd360, 0x1217, 0xd369, + 0x120e, 0xd372, 0x1206, 0xd37b, 0x11fd, 0xd384, 0x11f4, 0xd38d, + 0x11eb, 0xd396, 0x11e3, 0xd39f, 0x11da, 0xd3a8, 0x11d1, 0xd3b1, + 0x11c9, 0xd3ba, 0x11c0, 0xd3c3, 0x11b7, 0xd3cc, 0x11af, 0xd3d5, + 0x11a6, 0xd3df, 0x119d, 0xd3e8, 0x1195, 0xd3f1, 0x118c, 0xd3fa, + 0x1183, 0xd403, 0x117b, 0xd40c, 0x1172, 0xd415, 0x1169, 0xd41e, + 0x1161, 0xd428, 0x1158, 0xd431, 0x1150, 0xd43a, 0x1147, 0xd443, + 0x113e, 0xd44c, 0x1136, 0xd455, 0x112d, 0xd45f, 0x1125, 0xd468, + 0x111c, 0xd471, 0x1114, 0xd47a, 0x110b, 0xd483, 0x1103, 0xd48d, + 0x10fa, 0xd496, 0x10f2, 0xd49f, 0x10e9, 0xd4a8, 0x10e0, 0xd4b2, + 0x10d8, 0xd4bb, 0x10d0, 0xd4c4, 0x10c7, 0xd4cd, 0x10bf, 0xd4d7, + 0x10b6, 0xd4e0, 0x10ae, 0xd4e9, 0x10a5, 0xd4f3, 0x109d, 0xd4fc, + 0x1094, 0xd505, 0x108c, 0xd50e, 0x1083, 0xd518, 0x107b, 0xd521, + 0x1073, 0xd52a, 0x106a, 0xd534, 0x1062, 0xd53d, 0x1059, 0xd547, + 0x1051, 0xd550, 0x1049, 0xd559, 0x1040, 0xd563, 0x1038, 0xd56c, + 0x1030, 0xd575, 0x1027, 0xd57f, 0x101f, 0xd588, 0x1016, 0xd592, + 0x100e, 0xd59b, 0x1006, 0xd5a4, 0xffe, 0xd5ae, 0xff5, 0xd5b7, + 0xfed, 0xd5c1, 0xfe5, 0xd5ca, 0xfdc, 0xd5d4, 0xfd4, 0xd5dd, + 0xfcc, 0xd5e6, 0xfc4, 0xd5f0, 0xfbb, 0xd5f9, 0xfb3, 0xd603, + 0xfab, 0xd60c, 0xfa3, 0xd616, 0xf9a, 0xd61f, 0xf92, 0xd629, + 0xf8a, 0xd632, 0xf82, 0xd63c, 0xf79, 0xd645, 0xf71, 0xd64f, + 0xf69, 0xd659, 0xf61, 0xd662, 0xf59, 0xd66c, 0xf51, 0xd675, + 0xf48, 0xd67f, 0xf40, 0xd688, 0xf38, 0xd692, 0xf30, 0xd69b, + 0xf28, 0xd6a5, 0xf20, 0xd6af, 0xf18, 0xd6b8, 0xf10, 0xd6c2, + 0xf07, 0xd6cb, 0xeff, 0xd6d5, 0xef7, 0xd6df, 0xeef, 0xd6e8, + 0xee7, 0xd6f2, 0xedf, 0xd6fc, 0xed7, 0xd705, 0xecf, 0xd70f, + 0xec7, 0xd719, 0xebf, 0xd722, 0xeb7, 0xd72c, 0xeaf, 0xd736, + 0xea7, 0xd73f, 0xe9f, 0xd749, 0xe97, 0xd753, 0xe8f, 0xd75c, + 0xe87, 0xd766, 0xe7f, 0xd770, 0xe77, 0xd77a, 0xe6f, 0xd783, + 0xe67, 0xd78d, 0xe5f, 0xd797, 0xe57, 0xd7a0, 0xe4f, 0xd7aa, + 0xe47, 0xd7b4, 0xe40, 0xd7be, 0xe38, 0xd7c8, 0xe30, 0xd7d1, + 0xe28, 0xd7db, 0xe20, 0xd7e5, 0xe18, 0xd7ef, 0xe10, 0xd7f8, + 0xe08, 0xd802, 0xe01, 0xd80c, 0xdf9, 0xd816, 0xdf1, 0xd820, + 0xde9, 0xd82a, 0xde1, 0xd833, 0xdd9, 0xd83d, 0xdd2, 0xd847, + 0xdca, 0xd851, 0xdc2, 0xd85b, 0xdba, 0xd865, 0xdb2, 0xd86f, + 0xdab, 0xd878, 0xda3, 0xd882, 0xd9b, 0xd88c, 0xd93, 0xd896, + 0xd8c, 0xd8a0, 0xd84, 0xd8aa, 0xd7c, 0xd8b4, 0xd75, 0xd8be, + 0xd6d, 0xd8c8, 0xd65, 0xd8d2, 0xd5d, 0xd8dc, 0xd56, 0xd8e6, + 0xd4e, 0xd8ef, 0xd46, 0xd8f9, 0xd3f, 0xd903, 0xd37, 0xd90d, + 0xd30, 0xd917, 0xd28, 0xd921, 0xd20, 0xd92b, 0xd19, 0xd935, + 0xd11, 0xd93f, 0xd09, 0xd949, 0xd02, 0xd953, 0xcfa, 0xd95d, + 0xcf3, 0xd967, 0xceb, 0xd971, 0xce3, 0xd97b, 0xcdc, 0xd985, + 0xcd4, 0xd98f, 0xccd, 0xd99a, 0xcc5, 0xd9a4, 0xcbe, 0xd9ae, + 0xcb6, 0xd9b8, 0xcaf, 0xd9c2, 0xca7, 0xd9cc, 0xca0, 0xd9d6, + 0xc98, 0xd9e0, 0xc91, 0xd9ea, 0xc89, 0xd9f4, 0xc82, 0xd9fe, + 0xc7a, 0xda08, 0xc73, 0xda13, 0xc6b, 0xda1d, 0xc64, 0xda27, + 0xc5d, 0xda31, 0xc55, 0xda3b, 0xc4e, 0xda45, 0xc46, 0xda4f, + 0xc3f, 0xda5a, 0xc38, 0xda64, 0xc30, 0xda6e, 0xc29, 0xda78, + 0xc21, 0xda82, 0xc1a, 0xda8c, 0xc13, 0xda97, 0xc0b, 0xdaa1, + 0xc04, 0xdaab, 0xbfd, 0xdab5, 0xbf5, 0xdabf, 0xbee, 0xdaca, + 0xbe7, 0xdad4, 0xbe0, 0xdade, 0xbd8, 0xdae8, 0xbd1, 0xdaf3, + 0xbca, 0xdafd, 0xbc2, 0xdb07, 0xbbb, 0xdb11, 0xbb4, 0xdb1c, + 0xbad, 0xdb26, 0xba5, 0xdb30, 0xb9e, 0xdb3b, 0xb97, 0xdb45, + 0xb90, 0xdb4f, 0xb89, 0xdb59, 0xb81, 0xdb64, 0xb7a, 0xdb6e, + 0xb73, 0xdb78, 0xb6c, 0xdb83, 0xb65, 0xdb8d, 0xb5e, 0xdb97, + 0xb56, 0xdba2, 0xb4f, 0xdbac, 0xb48, 0xdbb6, 0xb41, 0xdbc1, + 0xb3a, 0xdbcb, 0xb33, 0xdbd5, 0xb2c, 0xdbe0, 0xb25, 0xdbea, + 0xb1e, 0xdbf5, 0xb16, 0xdbff, 0xb0f, 0xdc09, 0xb08, 0xdc14, + 0xb01, 0xdc1e, 0xafa, 0xdc29, 0xaf3, 0xdc33, 0xaec, 0xdc3d, + 0xae5, 0xdc48, 0xade, 0xdc52, 0xad7, 0xdc5d, 0xad0, 0xdc67, + 0xac9, 0xdc72, 0xac2, 0xdc7c, 0xabb, 0xdc86, 0xab4, 0xdc91, + 0xaad, 0xdc9b, 0xaa6, 0xdca6, 0xa9f, 0xdcb0, 0xa99, 0xdcbb, + 0xa92, 0xdcc5, 0xa8b, 0xdcd0, 0xa84, 0xdcda, 0xa7d, 0xdce5, + 0xa76, 0xdcef, 0xa6f, 0xdcfa, 0xa68, 0xdd04, 0xa61, 0xdd0f, + 0xa5b, 0xdd19, 0xa54, 0xdd24, 0xa4d, 0xdd2e, 0xa46, 0xdd39, + 0xa3f, 0xdd44, 0xa38, 0xdd4e, 0xa32, 0xdd59, 0xa2b, 0xdd63, + 0xa24, 0xdd6e, 0xa1d, 0xdd78, 0xa16, 0xdd83, 0xa10, 0xdd8e, + 0xa09, 0xdd98, 0xa02, 0xdda3, 0x9fb, 0xddad, 0x9f5, 0xddb8, + 0x9ee, 0xddc3, 0x9e7, 0xddcd, 0x9e0, 0xddd8, 0x9da, 0xdde2, + 0x9d3, 0xdded, 0x9cc, 0xddf8, 0x9c6, 0xde02, 0x9bf, 0xde0d, + 0x9b8, 0xde18, 0x9b2, 0xde22, 0x9ab, 0xde2d, 0x9a4, 0xde38, + 0x99e, 0xde42, 0x997, 0xde4d, 0x991, 0xde58, 0x98a, 0xde62, + 0x983, 0xde6d, 0x97d, 0xde78, 0x976, 0xde83, 0x970, 0xde8d, + 0x969, 0xde98, 0x963, 0xdea3, 0x95c, 0xdead, 0x955, 0xdeb8, + 0x94f, 0xdec3, 0x948, 0xdece, 0x942, 0xded8, 0x93b, 0xdee3, + 0x935, 0xdeee, 0x92e, 0xdef9, 0x928, 0xdf03, 0x921, 0xdf0e, + 0x91b, 0xdf19, 0x915, 0xdf24, 0x90e, 0xdf2f, 0x908, 0xdf39, + 0x901, 0xdf44, 0x8fb, 0xdf4f, 0x8f4, 0xdf5a, 0x8ee, 0xdf65, + 0x8e8, 0xdf6f, 0x8e1, 0xdf7a, 0x8db, 0xdf85, 0x8d4, 0xdf90, + 0x8ce, 0xdf9b, 0x8c8, 0xdfa5, 0x8c1, 0xdfb0, 0x8bb, 0xdfbb, + 0x8b5, 0xdfc6, 0x8ae, 0xdfd1, 0x8a8, 0xdfdc, 0x8a2, 0xdfe7, + 0x89b, 0xdff1, 0x895, 0xdffc, 0x88f, 0xe007, 0x889, 0xe012, + 0x882, 0xe01d, 0x87c, 0xe028, 0x876, 0xe033, 0x870, 0xe03e, + 0x869, 0xe049, 0x863, 0xe054, 0x85d, 0xe05e, 0x857, 0xe069, + 0x850, 0xe074, 0x84a, 0xe07f, 0x844, 0xe08a, 0x83e, 0xe095, + 0x838, 0xe0a0, 0x832, 0xe0ab, 0x82b, 0xe0b6, 0x825, 0xe0c1, + 0x81f, 0xe0cc, 0x819, 0xe0d7, 0x813, 0xe0e2, 0x80d, 0xe0ed, + 0x807, 0xe0f8, 0x801, 0xe103, 0x7fb, 0xe10e, 0x7f5, 0xe119, + 0x7ee, 0xe124, 0x7e8, 0xe12f, 0x7e2, 0xe13a, 0x7dc, 0xe145, + 0x7d6, 0xe150, 0x7d0, 0xe15b, 0x7ca, 0xe166, 0x7c4, 0xe171, + 0x7be, 0xe17c, 0x7b8, 0xe187, 0x7b2, 0xe192, 0x7ac, 0xe19d, + 0x7a6, 0xe1a8, 0x7a0, 0xe1b3, 0x79a, 0xe1be, 0x795, 0xe1ca, + 0x78f, 0xe1d5, 0x789, 0xe1e0, 0x783, 0xe1eb, 0x77d, 0xe1f6, + 0x777, 0xe201, 0x771, 0xe20c, 0x76b, 0xe217, 0x765, 0xe222, + 0x75f, 0xe22d, 0x75a, 0xe239, 0x754, 0xe244, 0x74e, 0xe24f, + 0x748, 0xe25a, 0x742, 0xe265, 0x73d, 0xe270, 0x737, 0xe27b, + 0x731, 0xe287, 0x72b, 0xe292, 0x725, 0xe29d, 0x720, 0xe2a8, + 0x71a, 0xe2b3, 0x714, 0xe2be, 0x70e, 0xe2ca, 0x709, 0xe2d5, + 0x703, 0xe2e0, 0x6fd, 0xe2eb, 0x6f7, 0xe2f6, 0x6f2, 0xe301, + 0x6ec, 0xe30d, 0x6e6, 0xe318, 0x6e1, 0xe323, 0x6db, 0xe32e, + 0x6d5, 0xe33a, 0x6d0, 0xe345, 0x6ca, 0xe350, 0x6c5, 0xe35b, + 0x6bf, 0xe367, 0x6b9, 0xe372, 0x6b4, 0xe37d, 0x6ae, 0xe388, + 0x6a8, 0xe394, 0x6a3, 0xe39f, 0x69d, 0xe3aa, 0x698, 0xe3b5, + 0x692, 0xe3c1, 0x68d, 0xe3cc, 0x687, 0xe3d7, 0x682, 0xe3e2, + 0x67c, 0xe3ee, 0x677, 0xe3f9, 0x671, 0xe404, 0x66c, 0xe410, + 0x666, 0xe41b, 0x661, 0xe426, 0x65b, 0xe432, 0x656, 0xe43d, + 0x650, 0xe448, 0x64b, 0xe454, 0x645, 0xe45f, 0x640, 0xe46a, + 0x63b, 0xe476, 0x635, 0xe481, 0x630, 0xe48c, 0x62a, 0xe498, + 0x625, 0xe4a3, 0x620, 0xe4ae, 0x61a, 0xe4ba, 0x615, 0xe4c5, + 0x610, 0xe4d0, 0x60a, 0xe4dc, 0x605, 0xe4e7, 0x600, 0xe4f3, + 0x5fa, 0xe4fe, 0x5f5, 0xe509, 0x5f0, 0xe515, 0x5ea, 0xe520, + 0x5e5, 0xe52c, 0x5e0, 0xe537, 0x5db, 0xe542, 0x5d5, 0xe54e, + 0x5d0, 0xe559, 0x5cb, 0xe565, 0x5c6, 0xe570, 0x5c1, 0xe57c, + 0x5bb, 0xe587, 0x5b6, 0xe592, 0x5b1, 0xe59e, 0x5ac, 0xe5a9, + 0x5a7, 0xe5b5, 0x5a1, 0xe5c0, 0x59c, 0xe5cc, 0x597, 0xe5d7, + 0x592, 0xe5e3, 0x58d, 0xe5ee, 0x588, 0xe5fa, 0x583, 0xe605, + 0x57e, 0xe611, 0x578, 0xe61c, 0x573, 0xe628, 0x56e, 0xe633, + 0x569, 0xe63f, 0x564, 0xe64a, 0x55f, 0xe656, 0x55a, 0xe661, + 0x555, 0xe66d, 0x550, 0xe678, 0x54b, 0xe684, 0x546, 0xe68f, + 0x541, 0xe69b, 0x53c, 0xe6a6, 0x537, 0xe6b2, 0x532, 0xe6bd, + 0x52d, 0xe6c9, 0x528, 0xe6d4, 0x523, 0xe6e0, 0x51e, 0xe6ec, + 0x51a, 0xe6f7, 0x515, 0xe703, 0x510, 0xe70e, 0x50b, 0xe71a, + 0x506, 0xe725, 0x501, 0xe731, 0x4fc, 0xe73d, 0x4f7, 0xe748, + 0x4f2, 0xe754, 0x4ee, 0xe75f, 0x4e9, 0xe76b, 0x4e4, 0xe777, + 0x4df, 0xe782, 0x4da, 0xe78e, 0x4d6, 0xe799, 0x4d1, 0xe7a5, + 0x4cc, 0xe7b1, 0x4c7, 0xe7bc, 0x4c2, 0xe7c8, 0x4be, 0xe7d3, + 0x4b9, 0xe7df, 0x4b4, 0xe7eb, 0x4b0, 0xe7f6, 0x4ab, 0xe802, + 0x4a6, 0xe80e, 0x4a1, 0xe819, 0x49d, 0xe825, 0x498, 0xe831, + 0x493, 0xe83c, 0x48f, 0xe848, 0x48a, 0xe854, 0x485, 0xe85f, + 0x481, 0xe86b, 0x47c, 0xe877, 0x478, 0xe882, 0x473, 0xe88e, + 0x46e, 0xe89a, 0x46a, 0xe8a5, 0x465, 0xe8b1, 0x461, 0xe8bd, + 0x45c, 0xe8c9, 0x457, 0xe8d4, 0x453, 0xe8e0, 0x44e, 0xe8ec, + 0x44a, 0xe8f7, 0x445, 0xe903, 0x441, 0xe90f, 0x43c, 0xe91b, + 0x438, 0xe926, 0x433, 0xe932, 0x42f, 0xe93e, 0x42a, 0xe94a, + 0x426, 0xe955, 0x422, 0xe961, 0x41d, 0xe96d, 0x419, 0xe979, + 0x414, 0xe984, 0x410, 0xe990, 0x40b, 0xe99c, 0x407, 0xe9a8, + 0x403, 0xe9b4, 0x3fe, 0xe9bf, 0x3fa, 0xe9cb, 0x3f6, 0xe9d7, + 0x3f1, 0xe9e3, 0x3ed, 0xe9ee, 0x3e9, 0xe9fa, 0x3e4, 0xea06, + 0x3e0, 0xea12, 0x3dc, 0xea1e, 0x3d7, 0xea29, 0x3d3, 0xea35, + 0x3cf, 0xea41, 0x3ca, 0xea4d, 0x3c6, 0xea59, 0x3c2, 0xea65, + 0x3be, 0xea70, 0x3ba, 0xea7c, 0x3b5, 0xea88, 0x3b1, 0xea94, + 0x3ad, 0xeaa0, 0x3a9, 0xeaac, 0x3a5, 0xeab7, 0x3a0, 0xeac3, + 0x39c, 0xeacf, 0x398, 0xeadb, 0x394, 0xeae7, 0x390, 0xeaf3, + 0x38c, 0xeaff, 0x387, 0xeb0a, 0x383, 0xeb16, 0x37f, 0xeb22, + 0x37b, 0xeb2e, 0x377, 0xeb3a, 0x373, 0xeb46, 0x36f, 0xeb52, + 0x36b, 0xeb5e, 0x367, 0xeb6a, 0x363, 0xeb75, 0x35f, 0xeb81, + 0x35b, 0xeb8d, 0x357, 0xeb99, 0x353, 0xeba5, 0x34f, 0xebb1, + 0x34b, 0xebbd, 0x347, 0xebc9, 0x343, 0xebd5, 0x33f, 0xebe1, + 0x33b, 0xebed, 0x337, 0xebf9, 0x333, 0xec05, 0x32f, 0xec10, + 0x32b, 0xec1c, 0x327, 0xec28, 0x323, 0xec34, 0x320, 0xec40, + 0x31c, 0xec4c, 0x318, 0xec58, 0x314, 0xec64, 0x310, 0xec70, + 0x30c, 0xec7c, 0x308, 0xec88, 0x305, 0xec94, 0x301, 0xeca0, + 0x2fd, 0xecac, 0x2f9, 0xecb8, 0x2f5, 0xecc4, 0x2f2, 0xecd0, + 0x2ee, 0xecdc, 0x2ea, 0xece8, 0x2e6, 0xecf4, 0x2e3, 0xed00, + 0x2df, 0xed0c, 0x2db, 0xed18, 0x2d8, 0xed24, 0x2d4, 0xed30, + 0x2d0, 0xed3c, 0x2cc, 0xed48, 0x2c9, 0xed54, 0x2c5, 0xed60, + 0x2c1, 0xed6c, 0x2be, 0xed78, 0x2ba, 0xed84, 0x2b7, 0xed90, + 0x2b3, 0xed9c, 0x2af, 0xeda8, 0x2ac, 0xedb4, 0x2a8, 0xedc0, + 0x2a5, 0xedcc, 0x2a1, 0xedd8, 0x29d, 0xede4, 0x29a, 0xedf0, + 0x296, 0xedfc, 0x293, 0xee09, 0x28f, 0xee15, 0x28c, 0xee21, + 0x288, 0xee2d, 0x285, 0xee39, 0x281, 0xee45, 0x27e, 0xee51, + 0x27a, 0xee5d, 0x277, 0xee69, 0x273, 0xee75, 0x270, 0xee81, + 0x26d, 0xee8d, 0x269, 0xee99, 0x266, 0xeea6, 0x262, 0xeeb2, + 0x25f, 0xeebe, 0x25c, 0xeeca, 0x258, 0xeed6, 0x255, 0xeee2, + 0x251, 0xeeee, 0x24e, 0xeefa, 0x24b, 0xef06, 0x247, 0xef13, + 0x244, 0xef1f, 0x241, 0xef2b, 0x23e, 0xef37, 0x23a, 0xef43, + 0x237, 0xef4f, 0x234, 0xef5b, 0x230, 0xef67, 0x22d, 0xef74, + 0x22a, 0xef80, 0x227, 0xef8c, 0x223, 0xef98, 0x220, 0xefa4, + 0x21d, 0xefb0, 0x21a, 0xefbc, 0x217, 0xefc9, 0x213, 0xefd5, + 0x210, 0xefe1, 0x20d, 0xefed, 0x20a, 0xeff9, 0x207, 0xf005, + 0x204, 0xf012, 0x201, 0xf01e, 0x1fd, 0xf02a, 0x1fa, 0xf036, + 0x1f7, 0xf042, 0x1f4, 0xf04e, 0x1f1, 0xf05b, 0x1ee, 0xf067, + 0x1eb, 0xf073, 0x1e8, 0xf07f, 0x1e5, 0xf08b, 0x1e2, 0xf098, + 0x1df, 0xf0a4, 0x1dc, 0xf0b0, 0x1d9, 0xf0bc, 0x1d6, 0xf0c8, + 0x1d3, 0xf0d5, 0x1d0, 0xf0e1, 0x1cd, 0xf0ed, 0x1ca, 0xf0f9, + 0x1c7, 0xf105, 0x1c4, 0xf112, 0x1c1, 0xf11e, 0x1be, 0xf12a, + 0x1bb, 0xf136, 0x1b8, 0xf143, 0x1b6, 0xf14f, 0x1b3, 0xf15b, + 0x1b0, 0xf167, 0x1ad, 0xf174, 0x1aa, 0xf180, 0x1a7, 0xf18c, + 0x1a4, 0xf198, 0x1a2, 0xf1a4, 0x19f, 0xf1b1, 0x19c, 0xf1bd, + 0x199, 0xf1c9, 0x196, 0xf1d5, 0x194, 0xf1e2, 0x191, 0xf1ee, + 0x18e, 0xf1fa, 0x18b, 0xf207, 0x189, 0xf213, 0x186, 0xf21f, + 0x183, 0xf22b, 0x180, 0xf238, 0x17e, 0xf244, 0x17b, 0xf250, + 0x178, 0xf25c, 0x176, 0xf269, 0x173, 0xf275, 0x170, 0xf281, + 0x16e, 0xf28e, 0x16b, 0xf29a, 0x168, 0xf2a6, 0x166, 0xf2b2, + 0x163, 0xf2bf, 0x161, 0xf2cb, 0x15e, 0xf2d7, 0x15b, 0xf2e4, + 0x159, 0xf2f0, 0x156, 0xf2fc, 0x154, 0xf308, 0x151, 0xf315, + 0x14f, 0xf321, 0x14c, 0xf32d, 0x14a, 0xf33a, 0x147, 0xf346, + 0x145, 0xf352, 0x142, 0xf35f, 0x140, 0xf36b, 0x13d, 0xf377, + 0x13b, 0xf384, 0x138, 0xf390, 0x136, 0xf39c, 0x134, 0xf3a9, + 0x131, 0xf3b5, 0x12f, 0xf3c1, 0x12c, 0xf3ce, 0x12a, 0xf3da, + 0x128, 0xf3e6, 0x125, 0xf3f3, 0x123, 0xf3ff, 0x120, 0xf40b, + 0x11e, 0xf418, 0x11c, 0xf424, 0x119, 0xf430, 0x117, 0xf43d, + 0x115, 0xf449, 0x113, 0xf455, 0x110, 0xf462, 0x10e, 0xf46e, + 0x10c, 0xf47b, 0x109, 0xf487, 0x107, 0xf493, 0x105, 0xf4a0, + 0x103, 0xf4ac, 0x100, 0xf4b8, 0xfe, 0xf4c5, 0xfc, 0xf4d1, + 0xfa, 0xf4dd, 0xf8, 0xf4ea, 0xf6, 0xf4f6, 0xf3, 0xf503, + 0xf1, 0xf50f, 0xef, 0xf51b, 0xed, 0xf528, 0xeb, 0xf534, + 0xe9, 0xf540, 0xe7, 0xf54d, 0xe4, 0xf559, 0xe2, 0xf566, + 0xe0, 0xf572, 0xde, 0xf57e, 0xdc, 0xf58b, 0xda, 0xf597, + 0xd8, 0xf5a4, 0xd6, 0xf5b0, 0xd4, 0xf5bc, 0xd2, 0xf5c9, + 0xd0, 0xf5d5, 0xce, 0xf5e2, 0xcc, 0xf5ee, 0xca, 0xf5fa, + 0xc8, 0xf607, 0xc6, 0xf613, 0xc4, 0xf620, 0xc2, 0xf62c, + 0xc0, 0xf639, 0xbe, 0xf645, 0xbd, 0xf651, 0xbb, 0xf65e, + 0xb9, 0xf66a, 0xb7, 0xf677, 0xb5, 0xf683, 0xb3, 0xf690, + 0xb1, 0xf69c, 0xaf, 0xf6a8, 0xae, 0xf6b5, 0xac, 0xf6c1, + 0xaa, 0xf6ce, 0xa8, 0xf6da, 0xa6, 0xf6e7, 0xa5, 0xf6f3, + 0xa3, 0xf6ff, 0xa1, 0xf70c, 0x9f, 0xf718, 0x9e, 0xf725, + 0x9c, 0xf731, 0x9a, 0xf73e, 0x98, 0xf74a, 0x97, 0xf757, + 0x95, 0xf763, 0x93, 0xf76f, 0x92, 0xf77c, 0x90, 0xf788, + 0x8e, 0xf795, 0x8d, 0xf7a1, 0x8b, 0xf7ae, 0x89, 0xf7ba, + 0x88, 0xf7c7, 0x86, 0xf7d3, 0x85, 0xf7e0, 0x83, 0xf7ec, + 0x81, 0xf7f9, 0x80, 0xf805, 0x7e, 0xf811, 0x7d, 0xf81e, + 0x7b, 0xf82a, 0x7a, 0xf837, 0x78, 0xf843, 0x77, 0xf850, + 0x75, 0xf85c, 0x74, 0xf869, 0x72, 0xf875, 0x71, 0xf882, + 0x6f, 0xf88e, 0x6e, 0xf89b, 0x6c, 0xf8a7, 0x6b, 0xf8b4, + 0x69, 0xf8c0, 0x68, 0xf8cd, 0x67, 0xf8d9, 0x65, 0xf8e6, + 0x64, 0xf8f2, 0x62, 0xf8ff, 0x61, 0xf90b, 0x60, 0xf918, + 0x5e, 0xf924, 0x5d, 0xf931, 0x5c, 0xf93d, 0x5a, 0xf94a, + 0x59, 0xf956, 0x58, 0xf963, 0x56, 0xf96f, 0x55, 0xf97c, + 0x54, 0xf988, 0x53, 0xf995, 0x51, 0xf9a1, 0x50, 0xf9ae, + 0x4f, 0xf9ba, 0x4e, 0xf9c7, 0x4c, 0xf9d3, 0x4b, 0xf9e0, + 0x4a, 0xf9ec, 0x49, 0xf9f9, 0x48, 0xfa05, 0x47, 0xfa12, + 0x45, 0xfa1e, 0x44, 0xfa2b, 0x43, 0xfa37, 0x42, 0xfa44, + 0x41, 0xfa50, 0x40, 0xfa5d, 0x3f, 0xfa69, 0x3d, 0xfa76, + 0x3c, 0xfa82, 0x3b, 0xfa8f, 0x3a, 0xfa9b, 0x39, 0xfaa8, + 0x38, 0xfab4, 0x37, 0xfac1, 0x36, 0xfacd, 0x35, 0xfada, + 0x34, 0xfae6, 0x33, 0xfaf3, 0x32, 0xfb00, 0x31, 0xfb0c, + 0x30, 0xfb19, 0x2f, 0xfb25, 0x2e, 0xfb32, 0x2d, 0xfb3e, + 0x2c, 0xfb4b, 0x2b, 0xfb57, 0x2b, 0xfb64, 0x2a, 0xfb70, + 0x29, 0xfb7d, 0x28, 0xfb89, 0x27, 0xfb96, 0x26, 0xfba2, + 0x25, 0xfbaf, 0x24, 0xfbbc, 0x24, 0xfbc8, 0x23, 0xfbd5, + 0x22, 0xfbe1, 0x21, 0xfbee, 0x20, 0xfbfa, 0x20, 0xfc07, + 0x1f, 0xfc13, 0x1e, 0xfc20, 0x1d, 0xfc2c, 0x1d, 0xfc39, + 0x1c, 0xfc45, 0x1b, 0xfc52, 0x1a, 0xfc5f, 0x1a, 0xfc6b, + 0x19, 0xfc78, 0x18, 0xfc84, 0x18, 0xfc91, 0x17, 0xfc9d, + 0x16, 0xfcaa, 0x16, 0xfcb6, 0x15, 0xfcc3, 0x14, 0xfcd0, + 0x14, 0xfcdc, 0x13, 0xfce9, 0x13, 0xfcf5, 0x12, 0xfd02, + 0x11, 0xfd0e, 0x11, 0xfd1b, 0x10, 0xfd27, 0x10, 0xfd34, + 0xf, 0xfd40, 0xf, 0xfd4d, 0xe, 0xfd5a, 0xe, 0xfd66, + 0xd, 0xfd73, 0xd, 0xfd7f, 0xc, 0xfd8c, 0xc, 0xfd98, + 0xb, 0xfda5, 0xb, 0xfdb2, 0xa, 0xfdbe, 0xa, 0xfdcb, + 0x9, 0xfdd7, 0x9, 0xfde4, 0x9, 0xfdf0, 0x8, 0xfdfd, + 0x8, 0xfe09, 0x7, 0xfe16, 0x7, 0xfe23, 0x7, 0xfe2f, + 0x6, 0xfe3c, 0x6, 0xfe48, 0x6, 0xfe55, 0x5, 0xfe61, + 0x5, 0xfe6e, 0x5, 0xfe7a, 0x4, 0xfe87, 0x4, 0xfe94, + 0x4, 0xfea0, 0x4, 0xfead, 0x3, 0xfeb9, 0x3, 0xfec6, + 0x3, 0xfed2, 0x3, 0xfedf, 0x2, 0xfeec, 0x2, 0xfef8, + 0x2, 0xff05, 0x2, 0xff11, 0x2, 0xff1e, 0x1, 0xff2a, + 0x1, 0xff37, 0x1, 0xff44, 0x1, 0xff50, 0x1, 0xff5d, + 0x1, 0xff69, 0x1, 0xff76, 0x0, 0xff82, 0x0, 0xff8f, + 0x0, 0xff9b, 0x0, 0xffa8, 0x0, 0xffb5, 0x0, 0xffc1, + 0x0, 0xffce, 0x0, 0xffda, 0x0, 0xffe7, 0x0, 0xfff3, + 0x0, 0x0, 0x0, 0xd, 0x0, 0x19, 0x0, 0x26, + 0x0, 0x32, 0x0, 0x3f, 0x0, 0x4b, 0x0, 0x58, + 0x0, 0x65, 0x0, 0x71, 0x0, 0x7e, 0x1, 0x8a, + 0x1, 0x97, 0x1, 0xa3, 0x1, 0xb0, 0x1, 0xbc, + 0x1, 0xc9, 0x1, 0xd6, 0x2, 0xe2, 0x2, 0xef, + 0x2, 0xfb, 0x2, 0x108, 0x2, 0x114, 0x3, 0x121, + 0x3, 0x12e, 0x3, 0x13a, 0x3, 0x147, 0x4, 0x153, + 0x4, 0x160, 0x4, 0x16c, 0x4, 0x179, 0x5, 0x186, + 0x5, 0x192, 0x5, 0x19f, 0x6, 0x1ab, 0x6, 0x1b8, + 0x6, 0x1c4, 0x7, 0x1d1, 0x7, 0x1dd, 0x7, 0x1ea, + 0x8, 0x1f7, 0x8, 0x203, 0x9, 0x210, 0x9, 0x21c, + 0x9, 0x229, 0xa, 0x235, 0xa, 0x242, 0xb, 0x24e, + 0xb, 0x25b, 0xc, 0x268, 0xc, 0x274, 0xd, 0x281, + 0xd, 0x28d, 0xe, 0x29a, 0xe, 0x2a6, 0xf, 0x2b3, + 0xf, 0x2c0, 0x10, 0x2cc, 0x10, 0x2d9, 0x11, 0x2e5, + 0x11, 0x2f2, 0x12, 0x2fe, 0x13, 0x30b, 0x13, 0x317, + 0x14, 0x324, 0x14, 0x330, 0x15, 0x33d, 0x16, 0x34a, + 0x16, 0x356, 0x17, 0x363, 0x18, 0x36f, 0x18, 0x37c, + 0x19, 0x388, 0x1a, 0x395, 0x1a, 0x3a1, 0x1b, 0x3ae, + 0x1c, 0x3bb, 0x1d, 0x3c7, 0x1d, 0x3d4, 0x1e, 0x3e0, + 0x1f, 0x3ed, 0x20, 0x3f9, 0x20, 0x406, 0x21, 0x412, + 0x22, 0x41f, 0x23, 0x42b, 0x24, 0x438, 0x24, 0x444, + 0x25, 0x451, 0x26, 0x45e, 0x27, 0x46a, 0x28, 0x477, + 0x29, 0x483, 0x2a, 0x490, 0x2b, 0x49c, 0x2b, 0x4a9, + 0x2c, 0x4b5, 0x2d, 0x4c2, 0x2e, 0x4ce, 0x2f, 0x4db, + 0x30, 0x4e7, 0x31, 0x4f4, 0x32, 0x500, 0x33, 0x50d, + 0x34, 0x51a, 0x35, 0x526, 0x36, 0x533, 0x37, 0x53f, + 0x38, 0x54c, 0x39, 0x558, 0x3a, 0x565, 0x3b, 0x571, + 0x3c, 0x57e, 0x3d, 0x58a, 0x3f, 0x597, 0x40, 0x5a3, + 0x41, 0x5b0, 0x42, 0x5bc, 0x43, 0x5c9, 0x44, 0x5d5, + 0x45, 0x5e2, 0x47, 0x5ee, 0x48, 0x5fb, 0x49, 0x607, + 0x4a, 0x614, 0x4b, 0x620, 0x4c, 0x62d, 0x4e, 0x639, + 0x4f, 0x646, 0x50, 0x652, 0x51, 0x65f, 0x53, 0x66b, + 0x54, 0x678, 0x55, 0x684, 0x56, 0x691, 0x58, 0x69d, + 0x59, 0x6aa, 0x5a, 0x6b6, 0x5c, 0x6c3, 0x5d, 0x6cf, + 0x5e, 0x6dc, 0x60, 0x6e8, 0x61, 0x6f5, 0x62, 0x701, + 0x64, 0x70e, 0x65, 0x71a, 0x67, 0x727, 0x68, 0x733, + 0x69, 0x740, 0x6b, 0x74c, 0x6c, 0x759, 0x6e, 0x765, + 0x6f, 0x772, 0x71, 0x77e, 0x72, 0x78b, 0x74, 0x797, + 0x75, 0x7a4, 0x77, 0x7b0, 0x78, 0x7bd, 0x7a, 0x7c9, + 0x7b, 0x7d6, 0x7d, 0x7e2, 0x7e, 0x7ef, 0x80, 0x7fb, + 0x81, 0x807, 0x83, 0x814, 0x85, 0x820, 0x86, 0x82d, + 0x88, 0x839, 0x89, 0x846, 0x8b, 0x852, 0x8d, 0x85f, + 0x8e, 0x86b, 0x90, 0x878, 0x92, 0x884, 0x93, 0x891, + 0x95, 0x89d, 0x97, 0x8a9, 0x98, 0x8b6, 0x9a, 0x8c2, + 0x9c, 0x8cf, 0x9e, 0x8db, 0x9f, 0x8e8, 0xa1, 0x8f4, + 0xa3, 0x901, 0xa5, 0x90d, 0xa6, 0x919, 0xa8, 0x926, + 0xaa, 0x932, 0xac, 0x93f, 0xae, 0x94b, 0xaf, 0x958, + 0xb1, 0x964, 0xb3, 0x970, 0xb5, 0x97d, 0xb7, 0x989, + 0xb9, 0x996, 0xbb, 0x9a2, 0xbd, 0x9af, 0xbe, 0x9bb, + 0xc0, 0x9c7, 0xc2, 0x9d4, 0xc4, 0x9e0, 0xc6, 0x9ed, + 0xc8, 0x9f9, 0xca, 0xa06, 0xcc, 0xa12, 0xce, 0xa1e, + 0xd0, 0xa2b, 0xd2, 0xa37, 0xd4, 0xa44, 0xd6, 0xa50, + 0xd8, 0xa5c, 0xda, 0xa69, 0xdc, 0xa75, 0xde, 0xa82, + 0xe0, 0xa8e, 0xe2, 0xa9a, 0xe4, 0xaa7, 0xe7, 0xab3, + 0xe9, 0xac0, 0xeb, 0xacc, 0xed, 0xad8, 0xef, 0xae5, + 0xf1, 0xaf1, 0xf3, 0xafd, 0xf6, 0xb0a, 0xf8, 0xb16, + 0xfa, 0xb23, 0xfc, 0xb2f, 0xfe, 0xb3b, 0x100, 0xb48, + 0x103, 0xb54, 0x105, 0xb60, 0x107, 0xb6d, 0x109, 0xb79, + 0x10c, 0xb85, 0x10e, 0xb92, 0x110, 0xb9e, 0x113, 0xbab, + 0x115, 0xbb7, 0x117, 0xbc3, 0x119, 0xbd0, 0x11c, 0xbdc, + 0x11e, 0xbe8, 0x120, 0xbf5, 0x123, 0xc01, 0x125, 0xc0d, + 0x128, 0xc1a, 0x12a, 0xc26, 0x12c, 0xc32, 0x12f, 0xc3f, + 0x131, 0xc4b, 0x134, 0xc57, 0x136, 0xc64, 0x138, 0xc70, + 0x13b, 0xc7c, 0x13d, 0xc89, 0x140, 0xc95, 0x142, 0xca1, + 0x145, 0xcae, 0x147, 0xcba, 0x14a, 0xcc6, 0x14c, 0xcd3, + 0x14f, 0xcdf, 0x151, 0xceb, 0x154, 0xcf8, 0x156, 0xd04, + 0x159, 0xd10, 0x15b, 0xd1c, 0x15e, 0xd29, 0x161, 0xd35, + 0x163, 0xd41, 0x166, 0xd4e, 0x168, 0xd5a, 0x16b, 0xd66, + 0x16e, 0xd72, 0x170, 0xd7f, 0x173, 0xd8b, 0x176, 0xd97, + 0x178, 0xda4, 0x17b, 0xdb0, 0x17e, 0xdbc, 0x180, 0xdc8, + 0x183, 0xdd5, 0x186, 0xde1, 0x189, 0xded, 0x18b, 0xdf9, + 0x18e, 0xe06, 0x191, 0xe12, 0x194, 0xe1e, 0x196, 0xe2b, + 0x199, 0xe37, 0x19c, 0xe43, 0x19f, 0xe4f, 0x1a2, 0xe5c, + 0x1a4, 0xe68, 0x1a7, 0xe74, 0x1aa, 0xe80, 0x1ad, 0xe8c, + 0x1b0, 0xe99, 0x1b3, 0xea5, 0x1b6, 0xeb1, 0x1b8, 0xebd, + 0x1bb, 0xeca, 0x1be, 0xed6, 0x1c1, 0xee2, 0x1c4, 0xeee, + 0x1c7, 0xefb, 0x1ca, 0xf07, 0x1cd, 0xf13, 0x1d0, 0xf1f, + 0x1d3, 0xf2b, 0x1d6, 0xf38, 0x1d9, 0xf44, 0x1dc, 0xf50, + 0x1df, 0xf5c, 0x1e2, 0xf68, 0x1e5, 0xf75, 0x1e8, 0xf81, + 0x1eb, 0xf8d, 0x1ee, 0xf99, 0x1f1, 0xfa5, 0x1f4, 0xfb2, + 0x1f7, 0xfbe, 0x1fa, 0xfca, 0x1fd, 0xfd6, 0x201, 0xfe2, + 0x204, 0xfee, 0x207, 0xffb, 0x20a, 0x1007, 0x20d, 0x1013, + 0x210, 0x101f, 0x213, 0x102b, 0x217, 0x1037, 0x21a, 0x1044, + 0x21d, 0x1050, 0x220, 0x105c, 0x223, 0x1068, 0x227, 0x1074, + 0x22a, 0x1080, 0x22d, 0x108c, 0x230, 0x1099, 0x234, 0x10a5, + 0x237, 0x10b1, 0x23a, 0x10bd, 0x23e, 0x10c9, 0x241, 0x10d5, + 0x244, 0x10e1, 0x247, 0x10ed, 0x24b, 0x10fa, 0x24e, 0x1106, + 0x251, 0x1112, 0x255, 0x111e, 0x258, 0x112a, 0x25c, 0x1136, + 0x25f, 0x1142, 0x262, 0x114e, 0x266, 0x115a, 0x269, 0x1167, + 0x26d, 0x1173, 0x270, 0x117f, 0x273, 0x118b, 0x277, 0x1197, + 0x27a, 0x11a3, 0x27e, 0x11af, 0x281, 0x11bb, 0x285, 0x11c7, + 0x288, 0x11d3, 0x28c, 0x11df, 0x28f, 0x11eb, 0x293, 0x11f7, + 0x296, 0x1204, 0x29a, 0x1210, 0x29d, 0x121c, 0x2a1, 0x1228, + 0x2a5, 0x1234, 0x2a8, 0x1240, 0x2ac, 0x124c, 0x2af, 0x1258, + 0x2b3, 0x1264, 0x2b7, 0x1270, 0x2ba, 0x127c, 0x2be, 0x1288, + 0x2c1, 0x1294, 0x2c5, 0x12a0, 0x2c9, 0x12ac, 0x2cc, 0x12b8, + 0x2d0, 0x12c4, 0x2d4, 0x12d0, 0x2d8, 0x12dc, 0x2db, 0x12e8, + 0x2df, 0x12f4, 0x2e3, 0x1300, 0x2e6, 0x130c, 0x2ea, 0x1318, + 0x2ee, 0x1324, 0x2f2, 0x1330, 0x2f5, 0x133c, 0x2f9, 0x1348, + 0x2fd, 0x1354, 0x301, 0x1360, 0x305, 0x136c, 0x308, 0x1378, + 0x30c, 0x1384, 0x310, 0x1390, 0x314, 0x139c, 0x318, 0x13a8, + 0x31c, 0x13b4, 0x320, 0x13c0, 0x323, 0x13cc, 0x327, 0x13d8, + 0x32b, 0x13e4, 0x32f, 0x13f0, 0x333, 0x13fb, 0x337, 0x1407, + 0x33b, 0x1413, 0x33f, 0x141f, 0x343, 0x142b, 0x347, 0x1437, + 0x34b, 0x1443, 0x34f, 0x144f, 0x353, 0x145b, 0x357, 0x1467, + 0x35b, 0x1473, 0x35f, 0x147f, 0x363, 0x148b, 0x367, 0x1496, + 0x36b, 0x14a2, 0x36f, 0x14ae, 0x373, 0x14ba, 0x377, 0x14c6, + 0x37b, 0x14d2, 0x37f, 0x14de, 0x383, 0x14ea, 0x387, 0x14f6, + 0x38c, 0x1501, 0x390, 0x150d, 0x394, 0x1519, 0x398, 0x1525, + 0x39c, 0x1531, 0x3a0, 0x153d, 0x3a5, 0x1549, 0x3a9, 0x1554, + 0x3ad, 0x1560, 0x3b1, 0x156c, 0x3b5, 0x1578, 0x3ba, 0x1584, + 0x3be, 0x1590, 0x3c2, 0x159b, 0x3c6, 0x15a7, 0x3ca, 0x15b3, + 0x3cf, 0x15bf, 0x3d3, 0x15cb, 0x3d7, 0x15d7, 0x3dc, 0x15e2, + 0x3e0, 0x15ee, 0x3e4, 0x15fa, 0x3e9, 0x1606, 0x3ed, 0x1612, + 0x3f1, 0x161d, 0x3f6, 0x1629, 0x3fa, 0x1635, 0x3fe, 0x1641, + 0x403, 0x164c, 0x407, 0x1658, 0x40b, 0x1664, 0x410, 0x1670, + 0x414, 0x167c, 0x419, 0x1687, 0x41d, 0x1693, 0x422, 0x169f, + 0x426, 0x16ab, 0x42a, 0x16b6, 0x42f, 0x16c2, 0x433, 0x16ce, + 0x438, 0x16da, 0x43c, 0x16e5, 0x441, 0x16f1, 0x445, 0x16fd, + 0x44a, 0x1709, 0x44e, 0x1714, 0x453, 0x1720, 0x457, 0x172c, + 0x45c, 0x1737, 0x461, 0x1743, 0x465, 0x174f, 0x46a, 0x175b, + 0x46e, 0x1766, 0x473, 0x1772, 0x478, 0x177e, 0x47c, 0x1789, + 0x481, 0x1795, 0x485, 0x17a1, 0x48a, 0x17ac, 0x48f, 0x17b8, + 0x493, 0x17c4, 0x498, 0x17cf, 0x49d, 0x17db, 0x4a1, 0x17e7, + 0x4a6, 0x17f2, 0x4ab, 0x17fe, 0x4b0, 0x180a, 0x4b4, 0x1815, + 0x4b9, 0x1821, 0x4be, 0x182d, 0x4c2, 0x1838, 0x4c7, 0x1844, + 0x4cc, 0x184f, 0x4d1, 0x185b, 0x4d6, 0x1867, 0x4da, 0x1872, + 0x4df, 0x187e, 0x4e4, 0x1889, 0x4e9, 0x1895, 0x4ee, 0x18a1, + 0x4f2, 0x18ac, 0x4f7, 0x18b8, 0x4fc, 0x18c3, 0x501, 0x18cf, + 0x506, 0x18db, 0x50b, 0x18e6, 0x510, 0x18f2, 0x515, 0x18fd, + 0x51a, 0x1909, 0x51e, 0x1914, 0x523, 0x1920, 0x528, 0x192c, + 0x52d, 0x1937, 0x532, 0x1943, 0x537, 0x194e, 0x53c, 0x195a, + 0x541, 0x1965, 0x546, 0x1971, 0x54b, 0x197c, 0x550, 0x1988, + 0x555, 0x1993, 0x55a, 0x199f, 0x55f, 0x19aa, 0x564, 0x19b6, + 0x569, 0x19c1, 0x56e, 0x19cd, 0x573, 0x19d8, 0x578, 0x19e4, + 0x57e, 0x19ef, 0x583, 0x19fb, 0x588, 0x1a06, 0x58d, 0x1a12, + 0x592, 0x1a1d, 0x597, 0x1a29, 0x59c, 0x1a34, 0x5a1, 0x1a40, + 0x5a7, 0x1a4b, 0x5ac, 0x1a57, 0x5b1, 0x1a62, 0x5b6, 0x1a6e, + 0x5bb, 0x1a79, 0x5c1, 0x1a84, 0x5c6, 0x1a90, 0x5cb, 0x1a9b, + 0x5d0, 0x1aa7, 0x5d5, 0x1ab2, 0x5db, 0x1abe, 0x5e0, 0x1ac9, + 0x5e5, 0x1ad4, 0x5ea, 0x1ae0, 0x5f0, 0x1aeb, 0x5f5, 0x1af7, + 0x5fa, 0x1b02, 0x600, 0x1b0d, 0x605, 0x1b19, 0x60a, 0x1b24, + 0x610, 0x1b30, 0x615, 0x1b3b, 0x61a, 0x1b46, 0x620, 0x1b52, + 0x625, 0x1b5d, 0x62a, 0x1b68, 0x630, 0x1b74, 0x635, 0x1b7f, + 0x63b, 0x1b8a, 0x640, 0x1b96, 0x645, 0x1ba1, 0x64b, 0x1bac, + 0x650, 0x1bb8, 0x656, 0x1bc3, 0x65b, 0x1bce, 0x661, 0x1bda, + 0x666, 0x1be5, 0x66c, 0x1bf0, 0x671, 0x1bfc, 0x677, 0x1c07, + 0x67c, 0x1c12, 0x682, 0x1c1e, 0x687, 0x1c29, 0x68d, 0x1c34, + 0x692, 0x1c3f, 0x698, 0x1c4b, 0x69d, 0x1c56, 0x6a3, 0x1c61, + 0x6a8, 0x1c6c, 0x6ae, 0x1c78, 0x6b4, 0x1c83, 0x6b9, 0x1c8e, + 0x6bf, 0x1c99, 0x6c5, 0x1ca5, 0x6ca, 0x1cb0, 0x6d0, 0x1cbb, + 0x6d5, 0x1cc6, 0x6db, 0x1cd2, 0x6e1, 0x1cdd, 0x6e6, 0x1ce8, + 0x6ec, 0x1cf3, 0x6f2, 0x1cff, 0x6f7, 0x1d0a, 0x6fd, 0x1d15, + 0x703, 0x1d20, 0x709, 0x1d2b, 0x70e, 0x1d36, 0x714, 0x1d42, + 0x71a, 0x1d4d, 0x720, 0x1d58, 0x725, 0x1d63, 0x72b, 0x1d6e, + 0x731, 0x1d79, 0x737, 0x1d85, 0x73d, 0x1d90, 0x742, 0x1d9b, + 0x748, 0x1da6, 0x74e, 0x1db1, 0x754, 0x1dbc, 0x75a, 0x1dc7, + 0x75f, 0x1dd3, 0x765, 0x1dde, 0x76b, 0x1de9, 0x771, 0x1df4, + 0x777, 0x1dff, 0x77d, 0x1e0a, 0x783, 0x1e15, 0x789, 0x1e20, + 0x78f, 0x1e2b, 0x795, 0x1e36, 0x79a, 0x1e42, 0x7a0, 0x1e4d, + 0x7a6, 0x1e58, 0x7ac, 0x1e63, 0x7b2, 0x1e6e, 0x7b8, 0x1e79, + 0x7be, 0x1e84, 0x7c4, 0x1e8f, 0x7ca, 0x1e9a, 0x7d0, 0x1ea5, + 0x7d6, 0x1eb0, 0x7dc, 0x1ebb, 0x7e2, 0x1ec6, 0x7e8, 0x1ed1, + 0x7ee, 0x1edc, 0x7f5, 0x1ee7, 0x7fb, 0x1ef2, 0x801, 0x1efd, + 0x807, 0x1f08, 0x80d, 0x1f13, 0x813, 0x1f1e, 0x819, 0x1f29, + 0x81f, 0x1f34, 0x825, 0x1f3f, 0x82b, 0x1f4a, 0x832, 0x1f55, + 0x838, 0x1f60, 0x83e, 0x1f6b, 0x844, 0x1f76, 0x84a, 0x1f81, + 0x850, 0x1f8c, 0x857, 0x1f97, 0x85d, 0x1fa2, 0x863, 0x1fac, + 0x869, 0x1fb7, 0x870, 0x1fc2, 0x876, 0x1fcd, 0x87c, 0x1fd8, + 0x882, 0x1fe3, 0x889, 0x1fee, 0x88f, 0x1ff9, 0x895, 0x2004, + 0x89b, 0x200f, 0x8a2, 0x2019, 0x8a8, 0x2024, 0x8ae, 0x202f, + 0x8b5, 0x203a, 0x8bb, 0x2045, 0x8c1, 0x2050, 0x8c8, 0x205b, + 0x8ce, 0x2065, 0x8d4, 0x2070, 0x8db, 0x207b, 0x8e1, 0x2086, + 0x8e8, 0x2091, 0x8ee, 0x209b, 0x8f4, 0x20a6, 0x8fb, 0x20b1, + 0x901, 0x20bc, 0x908, 0x20c7, 0x90e, 0x20d1, 0x915, 0x20dc, + 0x91b, 0x20e7, 0x921, 0x20f2, 0x928, 0x20fd, 0x92e, 0x2107, + 0x935, 0x2112, 0x93b, 0x211d, 0x942, 0x2128, 0x948, 0x2132, + 0x94f, 0x213d, 0x955, 0x2148, 0x95c, 0x2153, 0x963, 0x215d, + 0x969, 0x2168, 0x970, 0x2173, 0x976, 0x217d, 0x97d, 0x2188, + 0x983, 0x2193, 0x98a, 0x219e, 0x991, 0x21a8, 0x997, 0x21b3, + 0x99e, 0x21be, 0x9a4, 0x21c8, 0x9ab, 0x21d3, 0x9b2, 0x21de, + 0x9b8, 0x21e8, 0x9bf, 0x21f3, 0x9c6, 0x21fe, 0x9cc, 0x2208, + 0x9d3, 0x2213, 0x9da, 0x221e, 0x9e0, 0x2228, 0x9e7, 0x2233, + 0x9ee, 0x223d, 0x9f5, 0x2248, 0x9fb, 0x2253, 0xa02, 0x225d, + 0xa09, 0x2268, 0xa10, 0x2272, 0xa16, 0x227d, 0xa1d, 0x2288, + 0xa24, 0x2292, 0xa2b, 0x229d, 0xa32, 0x22a7, 0xa38, 0x22b2, + 0xa3f, 0x22bc, 0xa46, 0x22c7, 0xa4d, 0x22d2, 0xa54, 0x22dc, + 0xa5b, 0x22e7, 0xa61, 0x22f1, 0xa68, 0x22fc, 0xa6f, 0x2306, + 0xa76, 0x2311, 0xa7d, 0x231b, 0xa84, 0x2326, 0xa8b, 0x2330, + 0xa92, 0x233b, 0xa99, 0x2345, 0xa9f, 0x2350, 0xaa6, 0x235a, + 0xaad, 0x2365, 0xab4, 0x236f, 0xabb, 0x237a, 0xac2, 0x2384, + 0xac9, 0x238e, 0xad0, 0x2399, 0xad7, 0x23a3, 0xade, 0x23ae, + 0xae5, 0x23b8, 0xaec, 0x23c3, 0xaf3, 0x23cd, 0xafa, 0x23d7, + 0xb01, 0x23e2, 0xb08, 0x23ec, 0xb0f, 0x23f7, 0xb16, 0x2401, + 0xb1e, 0x240b, 0xb25, 0x2416, 0xb2c, 0x2420, 0xb33, 0x242b, + 0xb3a, 0x2435, 0xb41, 0x243f, 0xb48, 0x244a, 0xb4f, 0x2454, + 0xb56, 0x245e, 0xb5e, 0x2469, 0xb65, 0x2473, 0xb6c, 0x247d, + 0xb73, 0x2488, 0xb7a, 0x2492, 0xb81, 0x249c, 0xb89, 0x24a7, + 0xb90, 0x24b1, 0xb97, 0x24bb, 0xb9e, 0x24c5, 0xba5, 0x24d0, + 0xbad, 0x24da, 0xbb4, 0x24e4, 0xbbb, 0x24ef, 0xbc2, 0x24f9, + 0xbca, 0x2503, 0xbd1, 0x250d, 0xbd8, 0x2518, 0xbe0, 0x2522, + 0xbe7, 0x252c, 0xbee, 0x2536, 0xbf5, 0x2541, 0xbfd, 0x254b, + 0xc04, 0x2555, 0xc0b, 0x255f, 0xc13, 0x2569, 0xc1a, 0x2574, + 0xc21, 0x257e, 0xc29, 0x2588, 0xc30, 0x2592, 0xc38, 0x259c, + 0xc3f, 0x25a6, 0xc46, 0x25b1, 0xc4e, 0x25bb, 0xc55, 0x25c5, + 0xc5d, 0x25cf, 0xc64, 0x25d9, 0xc6b, 0x25e3, 0xc73, 0x25ed, + 0xc7a, 0x25f8, 0xc82, 0x2602, 0xc89, 0x260c, 0xc91, 0x2616, + 0xc98, 0x2620, 0xca0, 0x262a, 0xca7, 0x2634, 0xcaf, 0x263e, + 0xcb6, 0x2648, 0xcbe, 0x2652, 0xcc5, 0x265c, 0xccd, 0x2666, + 0xcd4, 0x2671, 0xcdc, 0x267b, 0xce3, 0x2685, 0xceb, 0x268f, + 0xcf3, 0x2699, 0xcfa, 0x26a3, 0xd02, 0x26ad, 0xd09, 0x26b7, + 0xd11, 0x26c1, 0xd19, 0x26cb, 0xd20, 0x26d5, 0xd28, 0x26df, + 0xd30, 0x26e9, 0xd37, 0x26f3, 0xd3f, 0x26fd, 0xd46, 0x2707, + 0xd4e, 0x2711, 0xd56, 0x271a, 0xd5d, 0x2724, 0xd65, 0x272e, + 0xd6d, 0x2738, 0xd75, 0x2742, 0xd7c, 0x274c, 0xd84, 0x2756, + 0xd8c, 0x2760, 0xd93, 0x276a, 0xd9b, 0x2774, 0xda3, 0x277e, + 0xdab, 0x2788, 0xdb2, 0x2791, 0xdba, 0x279b, 0xdc2, 0x27a5, + 0xdca, 0x27af, 0xdd2, 0x27b9, 0xdd9, 0x27c3, 0xde1, 0x27cd, + 0xde9, 0x27d6, 0xdf1, 0x27e0, 0xdf9, 0x27ea, 0xe01, 0x27f4, + 0xe08, 0x27fe, 0xe10, 0x2808, 0xe18, 0x2811, 0xe20, 0x281b, + 0xe28, 0x2825, 0xe30, 0x282f, 0xe38, 0x2838, 0xe40, 0x2842, + 0xe47, 0x284c, 0xe4f, 0x2856, 0xe57, 0x2860, 0xe5f, 0x2869, + 0xe67, 0x2873, 0xe6f, 0x287d, 0xe77, 0x2886, 0xe7f, 0x2890, + 0xe87, 0x289a, 0xe8f, 0x28a4, 0xe97, 0x28ad, 0xe9f, 0x28b7, + 0xea7, 0x28c1, 0xeaf, 0x28ca, 0xeb7, 0x28d4, 0xebf, 0x28de, + 0xec7, 0x28e7, 0xecf, 0x28f1, 0xed7, 0x28fb, 0xedf, 0x2904, + 0xee7, 0x290e, 0xeef, 0x2918, 0xef7, 0x2921, 0xeff, 0x292b, + 0xf07, 0x2935, 0xf10, 0x293e, 0xf18, 0x2948, 0xf20, 0x2951, + 0xf28, 0x295b, 0xf30, 0x2965, 0xf38, 0x296e, 0xf40, 0x2978, + 0xf48, 0x2981, 0xf51, 0x298b, 0xf59, 0x2994, 0xf61, 0x299e, + 0xf69, 0x29a7, 0xf71, 0x29b1, 0xf79, 0x29bb, 0xf82, 0x29c4, + 0xf8a, 0x29ce, 0xf92, 0x29d7, 0xf9a, 0x29e1, 0xfa3, 0x29ea, + 0xfab, 0x29f4, 0xfb3, 0x29fd, 0xfbb, 0x2a07, 0xfc4, 0x2a10, + 0xfcc, 0x2a1a, 0xfd4, 0x2a23, 0xfdc, 0x2a2c, 0xfe5, 0x2a36, + 0xfed, 0x2a3f, 0xff5, 0x2a49, 0xffe, 0x2a52, 0x1006, 0x2a5c, + 0x100e, 0x2a65, 0x1016, 0x2a6e, 0x101f, 0x2a78, 0x1027, 0x2a81, + 0x1030, 0x2a8b, 0x1038, 0x2a94, 0x1040, 0x2a9d, 0x1049, 0x2aa7, + 0x1051, 0x2ab0, 0x1059, 0x2ab9, 0x1062, 0x2ac3, 0x106a, 0x2acc, + 0x1073, 0x2ad6, 0x107b, 0x2adf, 0x1083, 0x2ae8, 0x108c, 0x2af2, + 0x1094, 0x2afb, 0x109d, 0x2b04, 0x10a5, 0x2b0d, 0x10ae, 0x2b17, + 0x10b6, 0x2b20, 0x10bf, 0x2b29, 0x10c7, 0x2b33, 0x10d0, 0x2b3c, + 0x10d8, 0x2b45, 0x10e0, 0x2b4e, 0x10e9, 0x2b58, 0x10f2, 0x2b61, + 0x10fa, 0x2b6a, 0x1103, 0x2b73, 0x110b, 0x2b7d, 0x1114, 0x2b86, + 0x111c, 0x2b8f, 0x1125, 0x2b98, 0x112d, 0x2ba1, 0x1136, 0x2bab, + 0x113e, 0x2bb4, 0x1147, 0x2bbd, 0x1150, 0x2bc6, 0x1158, 0x2bcf, + 0x1161, 0x2bd8, 0x1169, 0x2be2, 0x1172, 0x2beb, 0x117b, 0x2bf4, + 0x1183, 0x2bfd, 0x118c, 0x2c06, 0x1195, 0x2c0f, 0x119d, 0x2c18, + 0x11a6, 0x2c21, 0x11af, 0x2c2b, 0x11b7, 0x2c34, 0x11c0, 0x2c3d, + 0x11c9, 0x2c46, 0x11d1, 0x2c4f, 0x11da, 0x2c58, 0x11e3, 0x2c61, + 0x11eb, 0x2c6a, 0x11f4, 0x2c73, 0x11fd, 0x2c7c, 0x1206, 0x2c85, + 0x120e, 0x2c8e, 0x1217, 0x2c97, 0x1220, 0x2ca0, 0x1229, 0x2ca9, + 0x1231, 0x2cb2, 0x123a, 0x2cbb, 0x1243, 0x2cc4, 0x124c, 0x2ccd, + 0x1255, 0x2cd6, 0x125d, 0x2cdf, 0x1266, 0x2ce8, 0x126f, 0x2cf1, + 0x1278, 0x2cfa, 0x1281, 0x2d03, 0x128a, 0x2d0c, 0x1292, 0x2d15, + 0x129b, 0x2d1e, 0x12a4, 0x2d27, 0x12ad, 0x2d2f, 0x12b6, 0x2d38, + 0x12bf, 0x2d41, 0x12c8, 0x2d4a, 0x12d1, 0x2d53, 0x12d9, 0x2d5c, + 0x12e2, 0x2d65, 0x12eb, 0x2d6e, 0x12f4, 0x2d76, 0x12fd, 0x2d7f, + 0x1306, 0x2d88, 0x130f, 0x2d91, 0x1318, 0x2d9a, 0x1321, 0x2da3, + 0x132a, 0x2dab, 0x1333, 0x2db4, 0x133c, 0x2dbd, 0x1345, 0x2dc6, + 0x134e, 0x2dcf, 0x1357, 0x2dd7, 0x1360, 0x2de0, 0x1369, 0x2de9, + 0x1372, 0x2df2, 0x137b, 0x2dfa, 0x1384, 0x2e03, 0x138d, 0x2e0c, + 0x1396, 0x2e15, 0x139f, 0x2e1d, 0x13a8, 0x2e26, 0x13b1, 0x2e2f, + 0x13ba, 0x2e37, 0x13c3, 0x2e40, 0x13cc, 0x2e49, 0x13d5, 0x2e51, + 0x13df, 0x2e5a, 0x13e8, 0x2e63, 0x13f1, 0x2e6b, 0x13fa, 0x2e74, + 0x1403, 0x2e7d, 0x140c, 0x2e85, 0x1415, 0x2e8e, 0x141e, 0x2e97, + 0x1428, 0x2e9f, 0x1431, 0x2ea8, 0x143a, 0x2eb0, 0x1443, 0x2eb9, + 0x144c, 0x2ec2, 0x1455, 0x2eca, 0x145f, 0x2ed3, 0x1468, 0x2edb, + 0x1471, 0x2ee4, 0x147a, 0x2eec, 0x1483, 0x2ef5, 0x148d, 0x2efd, + 0x1496, 0x2f06, 0x149f, 0x2f0e, 0x14a8, 0x2f17, 0x14b2, 0x2f20, + 0x14bb, 0x2f28, 0x14c4, 0x2f30, 0x14cd, 0x2f39, 0x14d7, 0x2f41, + 0x14e0, 0x2f4a, 0x14e9, 0x2f52, 0x14f3, 0x2f5b, 0x14fc, 0x2f63, + 0x1505, 0x2f6c, 0x150e, 0x2f74, 0x1518, 0x2f7d, 0x1521, 0x2f85, + 0x152a, 0x2f8d, 0x1534, 0x2f96, 0x153d, 0x2f9e, 0x1547, 0x2fa7, + 0x1550, 0x2faf, 0x1559, 0x2fb7, 0x1563, 0x2fc0, 0x156c, 0x2fc8, + 0x1575, 0x2fd0, 0x157f, 0x2fd9, 0x1588, 0x2fe1, 0x1592, 0x2fea, + 0x159b, 0x2ff2, 0x15a4, 0x2ffa, 0x15ae, 0x3002, 0x15b7, 0x300b, + 0x15c1, 0x3013, 0x15ca, 0x301b, 0x15d4, 0x3024, 0x15dd, 0x302c, + 0x15e6, 0x3034, 0x15f0, 0x303c, 0x15f9, 0x3045, 0x1603, 0x304d, + 0x160c, 0x3055, 0x1616, 0x305d, 0x161f, 0x3066, 0x1629, 0x306e, + 0x1632, 0x3076, 0x163c, 0x307e, 0x1645, 0x3087, 0x164f, 0x308f, + 0x1659, 0x3097, 0x1662, 0x309f, 0x166c, 0x30a7, 0x1675, 0x30af, + 0x167f, 0x30b8, 0x1688, 0x30c0, 0x1692, 0x30c8, 0x169b, 0x30d0, + 0x16a5, 0x30d8, 0x16af, 0x30e0, 0x16b8, 0x30e8, 0x16c2, 0x30f0, + 0x16cb, 0x30f9, 0x16d5, 0x3101, 0x16df, 0x3109, 0x16e8, 0x3111, + 0x16f2, 0x3119, 0x16fc, 0x3121, 0x1705, 0x3129, 0x170f, 0x3131, + 0x1719, 0x3139, 0x1722, 0x3141, 0x172c, 0x3149, 0x1736, 0x3151, + 0x173f, 0x3159, 0x1749, 0x3161, 0x1753, 0x3169, 0x175c, 0x3171, + 0x1766, 0x3179, 0x1770, 0x3181, 0x177a, 0x3189, 0x1783, 0x3191, + 0x178d, 0x3199, 0x1797, 0x31a1, 0x17a0, 0x31a9, 0x17aa, 0x31b1, + 0x17b4, 0x31b9, 0x17be, 0x31c0, 0x17c8, 0x31c8, 0x17d1, 0x31d0, + 0x17db, 0x31d8, 0x17e5, 0x31e0, 0x17ef, 0x31e8, 0x17f8, 0x31f0, + 0x1802, 0x31f8, 0x180c, 0x31ff, 0x1816, 0x3207, 0x1820, 0x320f, + 0x182a, 0x3217, 0x1833, 0x321f, 0x183d, 0x3227, 0x1847, 0x322e, + 0x1851, 0x3236, 0x185b, 0x323e, 0x1865, 0x3246, 0x186f, 0x324e, + 0x1878, 0x3255, 0x1882, 0x325d, 0x188c, 0x3265, 0x1896, 0x326d, + 0x18a0, 0x3274, 0x18aa, 0x327c, 0x18b4, 0x3284, 0x18be, 0x328b, + 0x18c8, 0x3293, 0x18d2, 0x329b, 0x18dc, 0x32a3, 0x18e6, 0x32aa, + 0x18ef, 0x32b2, 0x18f9, 0x32ba, 0x1903, 0x32c1, 0x190d, 0x32c9, + 0x1917, 0x32d0, 0x1921, 0x32d8, 0x192b, 0x32e0, 0x1935, 0x32e7, + 0x193f, 0x32ef, 0x1949, 0x32f7, 0x1953, 0x32fe, 0x195d, 0x3306, + 0x1967, 0x330d, 0x1971, 0x3315, 0x197b, 0x331d, 0x1985, 0x3324, + 0x198f, 0x332c, 0x199a, 0x3333, 0x19a4, 0x333b, 0x19ae, 0x3342, + 0x19b8, 0x334a, 0x19c2, 0x3351, 0x19cc, 0x3359, 0x19d6, 0x3360, + 0x19e0, 0x3368, 0x19ea, 0x336f, 0x19f4, 0x3377, 0x19fe, 0x337e, + 0x1a08, 0x3386, 0x1a13, 0x338d, 0x1a1d, 0x3395, 0x1a27, 0x339c, + 0x1a31, 0x33a3, 0x1a3b, 0x33ab, 0x1a45, 0x33b2, 0x1a4f, 0x33ba, + 0x1a5a, 0x33c1, 0x1a64, 0x33c8, 0x1a6e, 0x33d0, 0x1a78, 0x33d7, + 0x1a82, 0x33df, 0x1a8c, 0x33e6, 0x1a97, 0x33ed, 0x1aa1, 0x33f5, + 0x1aab, 0x33fc, 0x1ab5, 0x3403, 0x1abf, 0x340b, 0x1aca, 0x3412, + 0x1ad4, 0x3419, 0x1ade, 0x3420, 0x1ae8, 0x3428, 0x1af3, 0x342f, + 0x1afd, 0x3436, 0x1b07, 0x343e, 0x1b11, 0x3445, 0x1b1c, 0x344c, + 0x1b26, 0x3453, 0x1b30, 0x345b, 0x1b3b, 0x3462, 0x1b45, 0x3469, + 0x1b4f, 0x3470, 0x1b59, 0x3477, 0x1b64, 0x347f, 0x1b6e, 0x3486, + 0x1b78, 0x348d, 0x1b83, 0x3494, 0x1b8d, 0x349b, 0x1b97, 0x34a2, + 0x1ba2, 0x34aa, 0x1bac, 0x34b1, 0x1bb6, 0x34b8, 0x1bc1, 0x34bf, + 0x1bcb, 0x34c6, 0x1bd5, 0x34cd, 0x1be0, 0x34d4, 0x1bea, 0x34db, + 0x1bf5, 0x34e2, 0x1bff, 0x34ea, 0x1c09, 0x34f1, 0x1c14, 0x34f8, + 0x1c1e, 0x34ff, 0x1c29, 0x3506, 0x1c33, 0x350d, 0x1c3d, 0x3514, + 0x1c48, 0x351b, 0x1c52, 0x3522, 0x1c5d, 0x3529, 0x1c67, 0x3530, + 0x1c72, 0x3537, 0x1c7c, 0x353e, 0x1c86, 0x3545, 0x1c91, 0x354c, + 0x1c9b, 0x3553, 0x1ca6, 0x355a, 0x1cb0, 0x3561, 0x1cbb, 0x3567, + 0x1cc5, 0x356e, 0x1cd0, 0x3575, 0x1cda, 0x357c, 0x1ce5, 0x3583, + 0x1cef, 0x358a, 0x1cfa, 0x3591, 0x1d04, 0x3598, 0x1d0f, 0x359f, + 0x1d19, 0x35a5, 0x1d24, 0x35ac, 0x1d2e, 0x35b3, 0x1d39, 0x35ba, + 0x1d44, 0x35c1, 0x1d4e, 0x35c8, 0x1d59, 0x35ce, 0x1d63, 0x35d5, + 0x1d6e, 0x35dc, 0x1d78, 0x35e3, 0x1d83, 0x35ea, 0x1d8e, 0x35f0, + 0x1d98, 0x35f7, 0x1da3, 0x35fe, 0x1dad, 0x3605, 0x1db8, 0x360b, + 0x1dc3, 0x3612, 0x1dcd, 0x3619, 0x1dd8, 0x3620, 0x1de2, 0x3626, + 0x1ded, 0x362d, 0x1df8, 0x3634, 0x1e02, 0x363a, 0x1e0d, 0x3641, + 0x1e18, 0x3648, 0x1e22, 0x364e, 0x1e2d, 0x3655, 0x1e38, 0x365c, + 0x1e42, 0x3662, 0x1e4d, 0x3669, 0x1e58, 0x366f, 0x1e62, 0x3676, + 0x1e6d, 0x367d, 0x1e78, 0x3683, 0x1e83, 0x368a, 0x1e8d, 0x3690, + 0x1e98, 0x3697, 0x1ea3, 0x369d, 0x1ead, 0x36a4, 0x1eb8, 0x36ab, + 0x1ec3, 0x36b1, 0x1ece, 0x36b8, 0x1ed8, 0x36be, 0x1ee3, 0x36c5, + 0x1eee, 0x36cb, 0x1ef9, 0x36d2, 0x1f03, 0x36d8, 0x1f0e, 0x36df, + 0x1f19, 0x36e5, 0x1f24, 0x36eb, 0x1f2f, 0x36f2, 0x1f39, 0x36f8, + 0x1f44, 0x36ff, 0x1f4f, 0x3705, 0x1f5a, 0x370c, 0x1f65, 0x3712, + 0x1f6f, 0x3718, 0x1f7a, 0x371f, 0x1f85, 0x3725, 0x1f90, 0x372c, + 0x1f9b, 0x3732, 0x1fa5, 0x3738, 0x1fb0, 0x373f, 0x1fbb, 0x3745, + 0x1fc6, 0x374b, 0x1fd1, 0x3752, 0x1fdc, 0x3758, 0x1fe7, 0x375e, + 0x1ff1, 0x3765, 0x1ffc, 0x376b, 0x2007, 0x3771, 0x2012, 0x3777, + 0x201d, 0x377e, 0x2028, 0x3784, 0x2033, 0x378a, 0x203e, 0x3790, + 0x2049, 0x3797, 0x2054, 0x379d, 0x205e, 0x37a3, 0x2069, 0x37a9, + 0x2074, 0x37b0, 0x207f, 0x37b6, 0x208a, 0x37bc, 0x2095, 0x37c2, + 0x20a0, 0x37c8, 0x20ab, 0x37ce, 0x20b6, 0x37d5, 0x20c1, 0x37db, + 0x20cc, 0x37e1, 0x20d7, 0x37e7, 0x20e2, 0x37ed, 0x20ed, 0x37f3, + 0x20f8, 0x37f9, 0x2103, 0x37ff, 0x210e, 0x3805, 0x2119, 0x380b, + 0x2124, 0x3812, 0x212f, 0x3818, 0x213a, 0x381e, 0x2145, 0x3824, + 0x2150, 0x382a, 0x215b, 0x3830, 0x2166, 0x3836, 0x2171, 0x383c, + 0x217c, 0x3842, 0x2187, 0x3848, 0x2192, 0x384e, 0x219d, 0x3854, + 0x21a8, 0x385a, 0x21b3, 0x3860, 0x21be, 0x3866, 0x21ca, 0x386b, + 0x21d5, 0x3871, 0x21e0, 0x3877, 0x21eb, 0x387d, 0x21f6, 0x3883, + 0x2201, 0x3889, 0x220c, 0x388f, 0x2217, 0x3895, 0x2222, 0x389b, + 0x222d, 0x38a1, 0x2239, 0x38a6, 0x2244, 0x38ac, 0x224f, 0x38b2, + 0x225a, 0x38b8, 0x2265, 0x38be, 0x2270, 0x38c3, 0x227b, 0x38c9, + 0x2287, 0x38cf, 0x2292, 0x38d5, 0x229d, 0x38db, 0x22a8, 0x38e0, + 0x22b3, 0x38e6, 0x22be, 0x38ec, 0x22ca, 0x38f2, 0x22d5, 0x38f7, + 0x22e0, 0x38fd, 0x22eb, 0x3903, 0x22f6, 0x3909, 0x2301, 0x390e, + 0x230d, 0x3914, 0x2318, 0x391a, 0x2323, 0x391f, 0x232e, 0x3925, + 0x233a, 0x392b, 0x2345, 0x3930, 0x2350, 0x3936, 0x235b, 0x393b, + 0x2367, 0x3941, 0x2372, 0x3947, 0x237d, 0x394c, 0x2388, 0x3952, + 0x2394, 0x3958, 0x239f, 0x395d, 0x23aa, 0x3963, 0x23b5, 0x3968, + 0x23c1, 0x396e, 0x23cc, 0x3973, 0x23d7, 0x3979, 0x23e2, 0x397e, + 0x23ee, 0x3984, 0x23f9, 0x3989, 0x2404, 0x398f, 0x2410, 0x3994, + 0x241b, 0x399a, 0x2426, 0x399f, 0x2432, 0x39a5, 0x243d, 0x39aa, + 0x2448, 0x39b0, 0x2454, 0x39b5, 0x245f, 0x39bb, 0x246a, 0x39c0, + 0x2476, 0x39c5, 0x2481, 0x39cb, 0x248c, 0x39d0, 0x2498, 0x39d6, + 0x24a3, 0x39db, 0x24ae, 0x39e0, 0x24ba, 0x39e6, 0x24c5, 0x39eb, + 0x24d0, 0x39f0, 0x24dc, 0x39f6, 0x24e7, 0x39fb, 0x24f3, 0x3a00, + 0x24fe, 0x3a06, 0x2509, 0x3a0b, 0x2515, 0x3a10, 0x2520, 0x3a16, + 0x252c, 0x3a1b, 0x2537, 0x3a20, 0x2542, 0x3a25, 0x254e, 0x3a2b, + 0x2559, 0x3a30, 0x2565, 0x3a35, 0x2570, 0x3a3a, 0x257c, 0x3a3f, + 0x2587, 0x3a45, 0x2592, 0x3a4a, 0x259e, 0x3a4f, 0x25a9, 0x3a54, + 0x25b5, 0x3a59, 0x25c0, 0x3a5f, 0x25cc, 0x3a64, 0x25d7, 0x3a69, + 0x25e3, 0x3a6e, 0x25ee, 0x3a73, 0x25fa, 0x3a78, 0x2605, 0x3a7d, + 0x2611, 0x3a82, 0x261c, 0x3a88, 0x2628, 0x3a8d, 0x2633, 0x3a92, + 0x263f, 0x3a97, 0x264a, 0x3a9c, 0x2656, 0x3aa1, 0x2661, 0x3aa6, + 0x266d, 0x3aab, 0x2678, 0x3ab0, 0x2684, 0x3ab5, 0x268f, 0x3aba, + 0x269b, 0x3abf, 0x26a6, 0x3ac4, 0x26b2, 0x3ac9, 0x26bd, 0x3ace, + 0x26c9, 0x3ad3, 0x26d4, 0x3ad8, 0x26e0, 0x3add, 0x26ec, 0x3ae2, + 0x26f7, 0x3ae6, 0x2703, 0x3aeb, 0x270e, 0x3af0, 0x271a, 0x3af5, + 0x2725, 0x3afa, 0x2731, 0x3aff, 0x273d, 0x3b04, 0x2748, 0x3b09, + 0x2754, 0x3b0e, 0x275f, 0x3b12, 0x276b, 0x3b17, 0x2777, 0x3b1c, + 0x2782, 0x3b21, 0x278e, 0x3b26, 0x2799, 0x3b2a, 0x27a5, 0x3b2f, + 0x27b1, 0x3b34, 0x27bc, 0x3b39, 0x27c8, 0x3b3e, 0x27d3, 0x3b42, + 0x27df, 0x3b47, 0x27eb, 0x3b4c, 0x27f6, 0x3b50, 0x2802, 0x3b55, + 0x280e, 0x3b5a, 0x2819, 0x3b5f, 0x2825, 0x3b63, 0x2831, 0x3b68, + 0x283c, 0x3b6d, 0x2848, 0x3b71, 0x2854, 0x3b76, 0x285f, 0x3b7b, + 0x286b, 0x3b7f, 0x2877, 0x3b84, 0x2882, 0x3b88, 0x288e, 0x3b8d, + 0x289a, 0x3b92, 0x28a5, 0x3b96, 0x28b1, 0x3b9b, 0x28bd, 0x3b9f, + 0x28c9, 0x3ba4, 0x28d4, 0x3ba9, 0x28e0, 0x3bad, 0x28ec, 0x3bb2, + 0x28f7, 0x3bb6, 0x2903, 0x3bbb, 0x290f, 0x3bbf, 0x291b, 0x3bc4, + 0x2926, 0x3bc8, 0x2932, 0x3bcd, 0x293e, 0x3bd1, 0x294a, 0x3bd6, + 0x2955, 0x3bda, 0x2961, 0x3bde, 0x296d, 0x3be3, 0x2979, 0x3be7, + 0x2984, 0x3bec, 0x2990, 0x3bf0, 0x299c, 0x3bf5, 0x29a8, 0x3bf9, + 0x29b4, 0x3bfd, 0x29bf, 0x3c02, 0x29cb, 0x3c06, 0x29d7, 0x3c0a, + 0x29e3, 0x3c0f, 0x29ee, 0x3c13, 0x29fa, 0x3c17, 0x2a06, 0x3c1c, + 0x2a12, 0x3c20, 0x2a1e, 0x3c24, 0x2a29, 0x3c29, 0x2a35, 0x3c2d, + 0x2a41, 0x3c31, 0x2a4d, 0x3c36, 0x2a59, 0x3c3a, 0x2a65, 0x3c3e, + 0x2a70, 0x3c42, 0x2a7c, 0x3c46, 0x2a88, 0x3c4b, 0x2a94, 0x3c4f, + 0x2aa0, 0x3c53, 0x2aac, 0x3c57, 0x2ab7, 0x3c5b, 0x2ac3, 0x3c60, + 0x2acf, 0x3c64, 0x2adb, 0x3c68, 0x2ae7, 0x3c6c, 0x2af3, 0x3c70, + 0x2aff, 0x3c74, 0x2b0a, 0x3c79, 0x2b16, 0x3c7d, 0x2b22, 0x3c81, + 0x2b2e, 0x3c85, 0x2b3a, 0x3c89, 0x2b46, 0x3c8d, 0x2b52, 0x3c91, + 0x2b5e, 0x3c95, 0x2b6a, 0x3c99, 0x2b75, 0x3c9d, 0x2b81, 0x3ca1, + 0x2b8d, 0x3ca5, 0x2b99, 0x3ca9, 0x2ba5, 0x3cad, 0x2bb1, 0x3cb1, + 0x2bbd, 0x3cb5, 0x2bc9, 0x3cb9, 0x2bd5, 0x3cbd, 0x2be1, 0x3cc1, + 0x2bed, 0x3cc5, 0x2bf9, 0x3cc9, 0x2c05, 0x3ccd, 0x2c10, 0x3cd1, + 0x2c1c, 0x3cd5, 0x2c28, 0x3cd9, 0x2c34, 0x3cdd, 0x2c40, 0x3ce0, + 0x2c4c, 0x3ce4, 0x2c58, 0x3ce8, 0x2c64, 0x3cec, 0x2c70, 0x3cf0, + 0x2c7c, 0x3cf4, 0x2c88, 0x3cf8, 0x2c94, 0x3cfb, 0x2ca0, 0x3cff, + 0x2cac, 0x3d03, 0x2cb8, 0x3d07, 0x2cc4, 0x3d0b, 0x2cd0, 0x3d0e, + 0x2cdc, 0x3d12, 0x2ce8, 0x3d16, 0x2cf4, 0x3d1a, 0x2d00, 0x3d1d, + 0x2d0c, 0x3d21, 0x2d18, 0x3d25, 0x2d24, 0x3d28, 0x2d30, 0x3d2c, + 0x2d3c, 0x3d30, 0x2d48, 0x3d34, 0x2d54, 0x3d37, 0x2d60, 0x3d3b, + 0x2d6c, 0x3d3f, 0x2d78, 0x3d42, 0x2d84, 0x3d46, 0x2d90, 0x3d49, + 0x2d9c, 0x3d4d, 0x2da8, 0x3d51, 0x2db4, 0x3d54, 0x2dc0, 0x3d58, + 0x2dcc, 0x3d5b, 0x2dd8, 0x3d5f, 0x2de4, 0x3d63, 0x2df0, 0x3d66, + 0x2dfc, 0x3d6a, 0x2e09, 0x3d6d, 0x2e15, 0x3d71, 0x2e21, 0x3d74, + 0x2e2d, 0x3d78, 0x2e39, 0x3d7b, 0x2e45, 0x3d7f, 0x2e51, 0x3d82, + 0x2e5d, 0x3d86, 0x2e69, 0x3d89, 0x2e75, 0x3d8d, 0x2e81, 0x3d90, + 0x2e8d, 0x3d93, 0x2e99, 0x3d97, 0x2ea6, 0x3d9a, 0x2eb2, 0x3d9e, + 0x2ebe, 0x3da1, 0x2eca, 0x3da4, 0x2ed6, 0x3da8, 0x2ee2, 0x3dab, + 0x2eee, 0x3daf, 0x2efa, 0x3db2, 0x2f06, 0x3db5, 0x2f13, 0x3db9, + 0x2f1f, 0x3dbc, 0x2f2b, 0x3dbf, 0x2f37, 0x3dc2, 0x2f43, 0x3dc6, + 0x2f4f, 0x3dc9, 0x2f5b, 0x3dcc, 0x2f67, 0x3dd0, 0x2f74, 0x3dd3, + 0x2f80, 0x3dd6, 0x2f8c, 0x3dd9, 0x2f98, 0x3ddd, 0x2fa4, 0x3de0, + 0x2fb0, 0x3de3, 0x2fbc, 0x3de6, 0x2fc9, 0x3de9, 0x2fd5, 0x3ded, + 0x2fe1, 0x3df0, 0x2fed, 0x3df3, 0x2ff9, 0x3df6, 0x3005, 0x3df9, + 0x3012, 0x3dfc, 0x301e, 0x3dff, 0x302a, 0x3e03, 0x3036, 0x3e06, + 0x3042, 0x3e09, 0x304e, 0x3e0c, 0x305b, 0x3e0f, 0x3067, 0x3e12, + 0x3073, 0x3e15, 0x307f, 0x3e18, 0x308b, 0x3e1b, 0x3098, 0x3e1e, + 0x30a4, 0x3e21, 0x30b0, 0x3e24, 0x30bc, 0x3e27, 0x30c8, 0x3e2a, + 0x30d5, 0x3e2d, 0x30e1, 0x3e30, 0x30ed, 0x3e33, 0x30f9, 0x3e36, + 0x3105, 0x3e39, 0x3112, 0x3e3c, 0x311e, 0x3e3f, 0x312a, 0x3e42, + 0x3136, 0x3e45, 0x3143, 0x3e48, 0x314f, 0x3e4a, 0x315b, 0x3e4d, + 0x3167, 0x3e50, 0x3174, 0x3e53, 0x3180, 0x3e56, 0x318c, 0x3e59, + 0x3198, 0x3e5c, 0x31a4, 0x3e5e, 0x31b1, 0x3e61, 0x31bd, 0x3e64, + 0x31c9, 0x3e67, 0x31d5, 0x3e6a, 0x31e2, 0x3e6c, 0x31ee, 0x3e6f, + 0x31fa, 0x3e72, 0x3207, 0x3e75, 0x3213, 0x3e77, 0x321f, 0x3e7a, + 0x322b, 0x3e7d, 0x3238, 0x3e80, 0x3244, 0x3e82, 0x3250, 0x3e85, + 0x325c, 0x3e88, 0x3269, 0x3e8a, 0x3275, 0x3e8d, 0x3281, 0x3e90, + 0x328e, 0x3e92, 0x329a, 0x3e95, 0x32a6, 0x3e98, 0x32b2, 0x3e9a, + 0x32bf, 0x3e9d, 0x32cb, 0x3e9f, 0x32d7, 0x3ea2, 0x32e4, 0x3ea5, + 0x32f0, 0x3ea7, 0x32fc, 0x3eaa, 0x3308, 0x3eac, 0x3315, 0x3eaf, + 0x3321, 0x3eb1, 0x332d, 0x3eb4, 0x333a, 0x3eb6, 0x3346, 0x3eb9, + 0x3352, 0x3ebb, 0x335f, 0x3ebe, 0x336b, 0x3ec0, 0x3377, 0x3ec3, + 0x3384, 0x3ec5, 0x3390, 0x3ec8, 0x339c, 0x3eca, 0x33a9, 0x3ecc, + 0x33b5, 0x3ecf, 0x33c1, 0x3ed1, 0x33ce, 0x3ed4, 0x33da, 0x3ed6, + 0x33e6, 0x3ed8, 0x33f3, 0x3edb, 0x33ff, 0x3edd, 0x340b, 0x3ee0, + 0x3418, 0x3ee2, 0x3424, 0x3ee4, 0x3430, 0x3ee7, 0x343d, 0x3ee9, + 0x3449, 0x3eeb, 0x3455, 0x3eed, 0x3462, 0x3ef0, 0x346e, 0x3ef2, + 0x347b, 0x3ef4, 0x3487, 0x3ef7, 0x3493, 0x3ef9, 0x34a0, 0x3efb, + 0x34ac, 0x3efd, 0x34b8, 0x3f00, 0x34c5, 0x3f02, 0x34d1, 0x3f04, + 0x34dd, 0x3f06, 0x34ea, 0x3f08, 0x34f6, 0x3f0a, 0x3503, 0x3f0d, + 0x350f, 0x3f0f, 0x351b, 0x3f11, 0x3528, 0x3f13, 0x3534, 0x3f15, + 0x3540, 0x3f17, 0x354d, 0x3f19, 0x3559, 0x3f1c, 0x3566, 0x3f1e, + 0x3572, 0x3f20, 0x357e, 0x3f22, 0x358b, 0x3f24, 0x3597, 0x3f26, + 0x35a4, 0x3f28, 0x35b0, 0x3f2a, 0x35bc, 0x3f2c, 0x35c9, 0x3f2e, + 0x35d5, 0x3f30, 0x35e2, 0x3f32, 0x35ee, 0x3f34, 0x35fa, 0x3f36, + 0x3607, 0x3f38, 0x3613, 0x3f3a, 0x3620, 0x3f3c, 0x362c, 0x3f3e, + 0x3639, 0x3f40, 0x3645, 0x3f42, 0x3651, 0x3f43, 0x365e, 0x3f45, + 0x366a, 0x3f47, 0x3677, 0x3f49, 0x3683, 0x3f4b, 0x3690, 0x3f4d, + 0x369c, 0x3f4f, 0x36a8, 0x3f51, 0x36b5, 0x3f52, 0x36c1, 0x3f54, + 0x36ce, 0x3f56, 0x36da, 0x3f58, 0x36e7, 0x3f5a, 0x36f3, 0x3f5b, + 0x36ff, 0x3f5d, 0x370c, 0x3f5f, 0x3718, 0x3f61, 0x3725, 0x3f62, + 0x3731, 0x3f64, 0x373e, 0x3f66, 0x374a, 0x3f68, 0x3757, 0x3f69, + 0x3763, 0x3f6b, 0x376f, 0x3f6d, 0x377c, 0x3f6e, 0x3788, 0x3f70, + 0x3795, 0x3f72, 0x37a1, 0x3f73, 0x37ae, 0x3f75, 0x37ba, 0x3f77, + 0x37c7, 0x3f78, 0x37d3, 0x3f7a, 0x37e0, 0x3f7b, 0x37ec, 0x3f7d, + 0x37f9, 0x3f7f, 0x3805, 0x3f80, 0x3811, 0x3f82, 0x381e, 0x3f83, + 0x382a, 0x3f85, 0x3837, 0x3f86, 0x3843, 0x3f88, 0x3850, 0x3f89, + 0x385c, 0x3f8b, 0x3869, 0x3f8c, 0x3875, 0x3f8e, 0x3882, 0x3f8f, + 0x388e, 0x3f91, 0x389b, 0x3f92, 0x38a7, 0x3f94, 0x38b4, 0x3f95, + 0x38c0, 0x3f97, 0x38cd, 0x3f98, 0x38d9, 0x3f99, 0x38e6, 0x3f9b, + 0x38f2, 0x3f9c, 0x38ff, 0x3f9e, 0x390b, 0x3f9f, 0x3918, 0x3fa0, + 0x3924, 0x3fa2, 0x3931, 0x3fa3, 0x393d, 0x3fa4, 0x394a, 0x3fa6, + 0x3956, 0x3fa7, 0x3963, 0x3fa8, 0x396f, 0x3faa, 0x397c, 0x3fab, + 0x3988, 0x3fac, 0x3995, 0x3fad, 0x39a1, 0x3faf, 0x39ae, 0x3fb0, + 0x39ba, 0x3fb1, 0x39c7, 0x3fb2, 0x39d3, 0x3fb4, 0x39e0, 0x3fb5, + 0x39ec, 0x3fb6, 0x39f9, 0x3fb7, 0x3a05, 0x3fb8, 0x3a12, 0x3fb9, + 0x3a1e, 0x3fbb, 0x3a2b, 0x3fbc, 0x3a37, 0x3fbd, 0x3a44, 0x3fbe, + 0x3a50, 0x3fbf, 0x3a5d, 0x3fc0, 0x3a69, 0x3fc1, 0x3a76, 0x3fc3, + 0x3a82, 0x3fc4, 0x3a8f, 0x3fc5, 0x3a9b, 0x3fc6, 0x3aa8, 0x3fc7, + 0x3ab4, 0x3fc8, 0x3ac1, 0x3fc9, 0x3acd, 0x3fca, 0x3ada, 0x3fcb, + 0x3ae6, 0x3fcc, 0x3af3, 0x3fcd, 0x3b00, 0x3fce, 0x3b0c, 0x3fcf, + 0x3b19, 0x3fd0, 0x3b25, 0x3fd1, 0x3b32, 0x3fd2, 0x3b3e, 0x3fd3, + 0x3b4b, 0x3fd4, 0x3b57, 0x3fd5, 0x3b64, 0x3fd5, 0x3b70, 0x3fd6, + 0x3b7d, 0x3fd7, 0x3b89, 0x3fd8, 0x3b96, 0x3fd9, 0x3ba2, 0x3fda, + 0x3baf, 0x3fdb, 0x3bbc, 0x3fdc, 0x3bc8, 0x3fdc, 0x3bd5, 0x3fdd, + 0x3be1, 0x3fde, 0x3bee, 0x3fdf, 0x3bfa, 0x3fe0, 0x3c07, 0x3fe0, + 0x3c13, 0x3fe1, 0x3c20, 0x3fe2, 0x3c2c, 0x3fe3, 0x3c39, 0x3fe3, + 0x3c45, 0x3fe4, 0x3c52, 0x3fe5, 0x3c5f, 0x3fe6, 0x3c6b, 0x3fe6, + 0x3c78, 0x3fe7, 0x3c84, 0x3fe8, 0x3c91, 0x3fe8, 0x3c9d, 0x3fe9, + 0x3caa, 0x3fea, 0x3cb6, 0x3fea, 0x3cc3, 0x3feb, 0x3cd0, 0x3fec, + 0x3cdc, 0x3fec, 0x3ce9, 0x3fed, 0x3cf5, 0x3fed, 0x3d02, 0x3fee, + 0x3d0e, 0x3fef, 0x3d1b, 0x3fef, 0x3d27, 0x3ff0, 0x3d34, 0x3ff0, + 0x3d40, 0x3ff1, 0x3d4d, 0x3ff1, 0x3d5a, 0x3ff2, 0x3d66, 0x3ff2, + 0x3d73, 0x3ff3, 0x3d7f, 0x3ff3, 0x3d8c, 0x3ff4, 0x3d98, 0x3ff4, + 0x3da5, 0x3ff5, 0x3db2, 0x3ff5, 0x3dbe, 0x3ff6, 0x3dcb, 0x3ff6, + 0x3dd7, 0x3ff7, 0x3de4, 0x3ff7, 0x3df0, 0x3ff7, 0x3dfd, 0x3ff8, + 0x3e09, 0x3ff8, 0x3e16, 0x3ff9, 0x3e23, 0x3ff9, 0x3e2f, 0x3ff9, + 0x3e3c, 0x3ffa, 0x3e48, 0x3ffa, 0x3e55, 0x3ffa, 0x3e61, 0x3ffb, + 0x3e6e, 0x3ffb, 0x3e7a, 0x3ffb, 0x3e87, 0x3ffc, 0x3e94, 0x3ffc, + 0x3ea0, 0x3ffc, 0x3ead, 0x3ffc, 0x3eb9, 0x3ffd, 0x3ec6, 0x3ffd, + 0x3ed2, 0x3ffd, 0x3edf, 0x3ffd, 0x3eec, 0x3ffe, 0x3ef8, 0x3ffe, + 0x3f05, 0x3ffe, 0x3f11, 0x3ffe, 0x3f1e, 0x3ffe, 0x3f2a, 0x3fff, + 0x3f37, 0x3fff, 0x3f44, 0x3fff, 0x3f50, 0x3fff, 0x3f5d, 0x3fff, + 0x3f69, 0x3fff, 0x3f76, 0x3fff, 0x3f82, 0x4000, 0x3f8f, 0x4000, + 0x3f9b, 0x4000, 0x3fa8, 0x4000, 0x3fb5, 0x4000, 0x3fc1, 0x4000, + 0x3fce, 0x4000, 0x3fda, 0x4000, 0x3fe7, 0x4000, 0x3ff3, 0x4000, +}; + +/** +* \par +* Generation of real_CoefB array: +* \par +* n = 4096 +*
for (i = 0; i < n; i++)    
+*  {    
+*    pBTable[2 * i] = 0.5 * (1.0 + sin (2 * PI / (double) (2 * n) * (double) i));    
+*    pBTable[2 * i + 1] = 0.5 * (1.0 * cos (2 * PI / (double) (2 * n) * (double) i));    
+*  } 
+* \par +* Convert to fixed point Q15 format +* round(pBTable[i] * pow(2, 15)) +* +*/ +static const q15_t ALIGN4 realCoefBQ15[8192] = { + 0x4000, 0x4000, 0x400d, 0x4000, 0x4019, 0x4000, 0x4026, 0x4000, + 0x4032, 0x4000, 0x403f, 0x4000, 0x404b, 0x4000, 0x4058, 0x4000, + 0x4065, 0x4000, 0x4071, 0x4000, 0x407e, 0x4000, 0x408a, 0x3fff, + 0x4097, 0x3fff, 0x40a3, 0x3fff, 0x40b0, 0x3fff, 0x40bc, 0x3fff, + 0x40c9, 0x3fff, 0x40d6, 0x3fff, 0x40e2, 0x3ffe, 0x40ef, 0x3ffe, + 0x40fb, 0x3ffe, 0x4108, 0x3ffe, 0x4114, 0x3ffe, 0x4121, 0x3ffd, + 0x412e, 0x3ffd, 0x413a, 0x3ffd, 0x4147, 0x3ffd, 0x4153, 0x3ffc, + 0x4160, 0x3ffc, 0x416c, 0x3ffc, 0x4179, 0x3ffc, 0x4186, 0x3ffb, + 0x4192, 0x3ffb, 0x419f, 0x3ffb, 0x41ab, 0x3ffa, 0x41b8, 0x3ffa, + 0x41c4, 0x3ffa, 0x41d1, 0x3ff9, 0x41dd, 0x3ff9, 0x41ea, 0x3ff9, + 0x41f7, 0x3ff8, 0x4203, 0x3ff8, 0x4210, 0x3ff7, 0x421c, 0x3ff7, + 0x4229, 0x3ff7, 0x4235, 0x3ff6, 0x4242, 0x3ff6, 0x424e, 0x3ff5, + 0x425b, 0x3ff5, 0x4268, 0x3ff4, 0x4274, 0x3ff4, 0x4281, 0x3ff3, + 0x428d, 0x3ff3, 0x429a, 0x3ff2, 0x42a6, 0x3ff2, 0x42b3, 0x3ff1, + 0x42c0, 0x3ff1, 0x42cc, 0x3ff0, 0x42d9, 0x3ff0, 0x42e5, 0x3fef, + 0x42f2, 0x3fef, 0x42fe, 0x3fee, 0x430b, 0x3fed, 0x4317, 0x3fed, + 0x4324, 0x3fec, 0x4330, 0x3fec, 0x433d, 0x3feb, 0x434a, 0x3fea, + 0x4356, 0x3fea, 0x4363, 0x3fe9, 0x436f, 0x3fe8, 0x437c, 0x3fe8, + 0x4388, 0x3fe7, 0x4395, 0x3fe6, 0x43a1, 0x3fe6, 0x43ae, 0x3fe5, + 0x43bb, 0x3fe4, 0x43c7, 0x3fe3, 0x43d4, 0x3fe3, 0x43e0, 0x3fe2, + 0x43ed, 0x3fe1, 0x43f9, 0x3fe0, 0x4406, 0x3fe0, 0x4412, 0x3fdf, + 0x441f, 0x3fde, 0x442b, 0x3fdd, 0x4438, 0x3fdc, 0x4444, 0x3fdc, + 0x4451, 0x3fdb, 0x445e, 0x3fda, 0x446a, 0x3fd9, 0x4477, 0x3fd8, + 0x4483, 0x3fd7, 0x4490, 0x3fd6, 0x449c, 0x3fd5, 0x44a9, 0x3fd5, + 0x44b5, 0x3fd4, 0x44c2, 0x3fd3, 0x44ce, 0x3fd2, 0x44db, 0x3fd1, + 0x44e7, 0x3fd0, 0x44f4, 0x3fcf, 0x4500, 0x3fce, 0x450d, 0x3fcd, + 0x451a, 0x3fcc, 0x4526, 0x3fcb, 0x4533, 0x3fca, 0x453f, 0x3fc9, + 0x454c, 0x3fc8, 0x4558, 0x3fc7, 0x4565, 0x3fc6, 0x4571, 0x3fc5, + 0x457e, 0x3fc4, 0x458a, 0x3fc3, 0x4597, 0x3fc1, 0x45a3, 0x3fc0, + 0x45b0, 0x3fbf, 0x45bc, 0x3fbe, 0x45c9, 0x3fbd, 0x45d5, 0x3fbc, + 0x45e2, 0x3fbb, 0x45ee, 0x3fb9, 0x45fb, 0x3fb8, 0x4607, 0x3fb7, + 0x4614, 0x3fb6, 0x4620, 0x3fb5, 0x462d, 0x3fb4, 0x4639, 0x3fb2, + 0x4646, 0x3fb1, 0x4652, 0x3fb0, 0x465f, 0x3faf, 0x466b, 0x3fad, + 0x4678, 0x3fac, 0x4684, 0x3fab, 0x4691, 0x3faa, 0x469d, 0x3fa8, + 0x46aa, 0x3fa7, 0x46b6, 0x3fa6, 0x46c3, 0x3fa4, 0x46cf, 0x3fa3, + 0x46dc, 0x3fa2, 0x46e8, 0x3fa0, 0x46f5, 0x3f9f, 0x4701, 0x3f9e, + 0x470e, 0x3f9c, 0x471a, 0x3f9b, 0x4727, 0x3f99, 0x4733, 0x3f98, + 0x4740, 0x3f97, 0x474c, 0x3f95, 0x4759, 0x3f94, 0x4765, 0x3f92, + 0x4772, 0x3f91, 0x477e, 0x3f8f, 0x478b, 0x3f8e, 0x4797, 0x3f8c, + 0x47a4, 0x3f8b, 0x47b0, 0x3f89, 0x47bd, 0x3f88, 0x47c9, 0x3f86, + 0x47d6, 0x3f85, 0x47e2, 0x3f83, 0x47ef, 0x3f82, 0x47fb, 0x3f80, + 0x4807, 0x3f7f, 0x4814, 0x3f7d, 0x4820, 0x3f7b, 0x482d, 0x3f7a, + 0x4839, 0x3f78, 0x4846, 0x3f77, 0x4852, 0x3f75, 0x485f, 0x3f73, + 0x486b, 0x3f72, 0x4878, 0x3f70, 0x4884, 0x3f6e, 0x4891, 0x3f6d, + 0x489d, 0x3f6b, 0x48a9, 0x3f69, 0x48b6, 0x3f68, 0x48c2, 0x3f66, + 0x48cf, 0x3f64, 0x48db, 0x3f62, 0x48e8, 0x3f61, 0x48f4, 0x3f5f, + 0x4901, 0x3f5d, 0x490d, 0x3f5b, 0x4919, 0x3f5a, 0x4926, 0x3f58, + 0x4932, 0x3f56, 0x493f, 0x3f54, 0x494b, 0x3f52, 0x4958, 0x3f51, + 0x4964, 0x3f4f, 0x4970, 0x3f4d, 0x497d, 0x3f4b, 0x4989, 0x3f49, + 0x4996, 0x3f47, 0x49a2, 0x3f45, 0x49af, 0x3f43, 0x49bb, 0x3f42, + 0x49c7, 0x3f40, 0x49d4, 0x3f3e, 0x49e0, 0x3f3c, 0x49ed, 0x3f3a, + 0x49f9, 0x3f38, 0x4a06, 0x3f36, 0x4a12, 0x3f34, 0x4a1e, 0x3f32, + 0x4a2b, 0x3f30, 0x4a37, 0x3f2e, 0x4a44, 0x3f2c, 0x4a50, 0x3f2a, + 0x4a5c, 0x3f28, 0x4a69, 0x3f26, 0x4a75, 0x3f24, 0x4a82, 0x3f22, + 0x4a8e, 0x3f20, 0x4a9a, 0x3f1e, 0x4aa7, 0x3f1c, 0x4ab3, 0x3f19, + 0x4ac0, 0x3f17, 0x4acc, 0x3f15, 0x4ad8, 0x3f13, 0x4ae5, 0x3f11, + 0x4af1, 0x3f0f, 0x4afd, 0x3f0d, 0x4b0a, 0x3f0a, 0x4b16, 0x3f08, + 0x4b23, 0x3f06, 0x4b2f, 0x3f04, 0x4b3b, 0x3f02, 0x4b48, 0x3f00, + 0x4b54, 0x3efd, 0x4b60, 0x3efb, 0x4b6d, 0x3ef9, 0x4b79, 0x3ef7, + 0x4b85, 0x3ef4, 0x4b92, 0x3ef2, 0x4b9e, 0x3ef0, 0x4bab, 0x3eed, + 0x4bb7, 0x3eeb, 0x4bc3, 0x3ee9, 0x4bd0, 0x3ee7, 0x4bdc, 0x3ee4, + 0x4be8, 0x3ee2, 0x4bf5, 0x3ee0, 0x4c01, 0x3edd, 0x4c0d, 0x3edb, + 0x4c1a, 0x3ed8, 0x4c26, 0x3ed6, 0x4c32, 0x3ed4, 0x4c3f, 0x3ed1, + 0x4c4b, 0x3ecf, 0x4c57, 0x3ecc, 0x4c64, 0x3eca, 0x4c70, 0x3ec8, + 0x4c7c, 0x3ec5, 0x4c89, 0x3ec3, 0x4c95, 0x3ec0, 0x4ca1, 0x3ebe, + 0x4cae, 0x3ebb, 0x4cba, 0x3eb9, 0x4cc6, 0x3eb6, 0x4cd3, 0x3eb4, + 0x4cdf, 0x3eb1, 0x4ceb, 0x3eaf, 0x4cf8, 0x3eac, 0x4d04, 0x3eaa, + 0x4d10, 0x3ea7, 0x4d1c, 0x3ea5, 0x4d29, 0x3ea2, 0x4d35, 0x3e9f, + 0x4d41, 0x3e9d, 0x4d4e, 0x3e9a, 0x4d5a, 0x3e98, 0x4d66, 0x3e95, + 0x4d72, 0x3e92, 0x4d7f, 0x3e90, 0x4d8b, 0x3e8d, 0x4d97, 0x3e8a, + 0x4da4, 0x3e88, 0x4db0, 0x3e85, 0x4dbc, 0x3e82, 0x4dc8, 0x3e80, + 0x4dd5, 0x3e7d, 0x4de1, 0x3e7a, 0x4ded, 0x3e77, 0x4df9, 0x3e75, + 0x4e06, 0x3e72, 0x4e12, 0x3e6f, 0x4e1e, 0x3e6c, 0x4e2b, 0x3e6a, + 0x4e37, 0x3e67, 0x4e43, 0x3e64, 0x4e4f, 0x3e61, 0x4e5c, 0x3e5e, + 0x4e68, 0x3e5c, 0x4e74, 0x3e59, 0x4e80, 0x3e56, 0x4e8c, 0x3e53, + 0x4e99, 0x3e50, 0x4ea5, 0x3e4d, 0x4eb1, 0x3e4a, 0x4ebd, 0x3e48, + 0x4eca, 0x3e45, 0x4ed6, 0x3e42, 0x4ee2, 0x3e3f, 0x4eee, 0x3e3c, + 0x4efb, 0x3e39, 0x4f07, 0x3e36, 0x4f13, 0x3e33, 0x4f1f, 0x3e30, + 0x4f2b, 0x3e2d, 0x4f38, 0x3e2a, 0x4f44, 0x3e27, 0x4f50, 0x3e24, + 0x4f5c, 0x3e21, 0x4f68, 0x3e1e, 0x4f75, 0x3e1b, 0x4f81, 0x3e18, + 0x4f8d, 0x3e15, 0x4f99, 0x3e12, 0x4fa5, 0x3e0f, 0x4fb2, 0x3e0c, + 0x4fbe, 0x3e09, 0x4fca, 0x3e06, 0x4fd6, 0x3e03, 0x4fe2, 0x3dff, + 0x4fee, 0x3dfc, 0x4ffb, 0x3df9, 0x5007, 0x3df6, 0x5013, 0x3df3, + 0x501f, 0x3df0, 0x502b, 0x3ded, 0x5037, 0x3de9, 0x5044, 0x3de6, + 0x5050, 0x3de3, 0x505c, 0x3de0, 0x5068, 0x3ddd, 0x5074, 0x3dd9, + 0x5080, 0x3dd6, 0x508c, 0x3dd3, 0x5099, 0x3dd0, 0x50a5, 0x3dcc, + 0x50b1, 0x3dc9, 0x50bd, 0x3dc6, 0x50c9, 0x3dc2, 0x50d5, 0x3dbf, + 0x50e1, 0x3dbc, 0x50ed, 0x3db9, 0x50fa, 0x3db5, 0x5106, 0x3db2, + 0x5112, 0x3daf, 0x511e, 0x3dab, 0x512a, 0x3da8, 0x5136, 0x3da4, + 0x5142, 0x3da1, 0x514e, 0x3d9e, 0x515a, 0x3d9a, 0x5167, 0x3d97, + 0x5173, 0x3d93, 0x517f, 0x3d90, 0x518b, 0x3d8d, 0x5197, 0x3d89, + 0x51a3, 0x3d86, 0x51af, 0x3d82, 0x51bb, 0x3d7f, 0x51c7, 0x3d7b, + 0x51d3, 0x3d78, 0x51df, 0x3d74, 0x51eb, 0x3d71, 0x51f7, 0x3d6d, + 0x5204, 0x3d6a, 0x5210, 0x3d66, 0x521c, 0x3d63, 0x5228, 0x3d5f, + 0x5234, 0x3d5b, 0x5240, 0x3d58, 0x524c, 0x3d54, 0x5258, 0x3d51, + 0x5264, 0x3d4d, 0x5270, 0x3d49, 0x527c, 0x3d46, 0x5288, 0x3d42, + 0x5294, 0x3d3f, 0x52a0, 0x3d3b, 0x52ac, 0x3d37, 0x52b8, 0x3d34, + 0x52c4, 0x3d30, 0x52d0, 0x3d2c, 0x52dc, 0x3d28, 0x52e8, 0x3d25, + 0x52f4, 0x3d21, 0x5300, 0x3d1d, 0x530c, 0x3d1a, 0x5318, 0x3d16, + 0x5324, 0x3d12, 0x5330, 0x3d0e, 0x533c, 0x3d0b, 0x5348, 0x3d07, + 0x5354, 0x3d03, 0x5360, 0x3cff, 0x536c, 0x3cfb, 0x5378, 0x3cf8, + 0x5384, 0x3cf4, 0x5390, 0x3cf0, 0x539c, 0x3cec, 0x53a8, 0x3ce8, + 0x53b4, 0x3ce4, 0x53c0, 0x3ce0, 0x53cc, 0x3cdd, 0x53d8, 0x3cd9, + 0x53e4, 0x3cd5, 0x53f0, 0x3cd1, 0x53fb, 0x3ccd, 0x5407, 0x3cc9, + 0x5413, 0x3cc5, 0x541f, 0x3cc1, 0x542b, 0x3cbd, 0x5437, 0x3cb9, + 0x5443, 0x3cb5, 0x544f, 0x3cb1, 0x545b, 0x3cad, 0x5467, 0x3ca9, + 0x5473, 0x3ca5, 0x547f, 0x3ca1, 0x548b, 0x3c9d, 0x5496, 0x3c99, + 0x54a2, 0x3c95, 0x54ae, 0x3c91, 0x54ba, 0x3c8d, 0x54c6, 0x3c89, + 0x54d2, 0x3c85, 0x54de, 0x3c81, 0x54ea, 0x3c7d, 0x54f6, 0x3c79, + 0x5501, 0x3c74, 0x550d, 0x3c70, 0x5519, 0x3c6c, 0x5525, 0x3c68, + 0x5531, 0x3c64, 0x553d, 0x3c60, 0x5549, 0x3c5b, 0x5554, 0x3c57, + 0x5560, 0x3c53, 0x556c, 0x3c4f, 0x5578, 0x3c4b, 0x5584, 0x3c46, + 0x5590, 0x3c42, 0x559b, 0x3c3e, 0x55a7, 0x3c3a, 0x55b3, 0x3c36, + 0x55bf, 0x3c31, 0x55cb, 0x3c2d, 0x55d7, 0x3c29, 0x55e2, 0x3c24, + 0x55ee, 0x3c20, 0x55fa, 0x3c1c, 0x5606, 0x3c17, 0x5612, 0x3c13, + 0x561d, 0x3c0f, 0x5629, 0x3c0a, 0x5635, 0x3c06, 0x5641, 0x3c02, + 0x564c, 0x3bfd, 0x5658, 0x3bf9, 0x5664, 0x3bf5, 0x5670, 0x3bf0, + 0x567c, 0x3bec, 0x5687, 0x3be7, 0x5693, 0x3be3, 0x569f, 0x3bde, + 0x56ab, 0x3bda, 0x56b6, 0x3bd6, 0x56c2, 0x3bd1, 0x56ce, 0x3bcd, + 0x56da, 0x3bc8, 0x56e5, 0x3bc4, 0x56f1, 0x3bbf, 0x56fd, 0x3bbb, + 0x5709, 0x3bb6, 0x5714, 0x3bb2, 0x5720, 0x3bad, 0x572c, 0x3ba9, + 0x5737, 0x3ba4, 0x5743, 0x3b9f, 0x574f, 0x3b9b, 0x575b, 0x3b96, + 0x5766, 0x3b92, 0x5772, 0x3b8d, 0x577e, 0x3b88, 0x5789, 0x3b84, + 0x5795, 0x3b7f, 0x57a1, 0x3b7b, 0x57ac, 0x3b76, 0x57b8, 0x3b71, + 0x57c4, 0x3b6d, 0x57cf, 0x3b68, 0x57db, 0x3b63, 0x57e7, 0x3b5f, + 0x57f2, 0x3b5a, 0x57fe, 0x3b55, 0x580a, 0x3b50, 0x5815, 0x3b4c, + 0x5821, 0x3b47, 0x582d, 0x3b42, 0x5838, 0x3b3e, 0x5844, 0x3b39, + 0x584f, 0x3b34, 0x585b, 0x3b2f, 0x5867, 0x3b2a, 0x5872, 0x3b26, + 0x587e, 0x3b21, 0x5889, 0x3b1c, 0x5895, 0x3b17, 0x58a1, 0x3b12, + 0x58ac, 0x3b0e, 0x58b8, 0x3b09, 0x58c3, 0x3b04, 0x58cf, 0x3aff, + 0x58db, 0x3afa, 0x58e6, 0x3af5, 0x58f2, 0x3af0, 0x58fd, 0x3aeb, + 0x5909, 0x3ae6, 0x5914, 0x3ae2, 0x5920, 0x3add, 0x592c, 0x3ad8, + 0x5937, 0x3ad3, 0x5943, 0x3ace, 0x594e, 0x3ac9, 0x595a, 0x3ac4, + 0x5965, 0x3abf, 0x5971, 0x3aba, 0x597c, 0x3ab5, 0x5988, 0x3ab0, + 0x5993, 0x3aab, 0x599f, 0x3aa6, 0x59aa, 0x3aa1, 0x59b6, 0x3a9c, + 0x59c1, 0x3a97, 0x59cd, 0x3a92, 0x59d8, 0x3a8d, 0x59e4, 0x3a88, + 0x59ef, 0x3a82, 0x59fb, 0x3a7d, 0x5a06, 0x3a78, 0x5a12, 0x3a73, + 0x5a1d, 0x3a6e, 0x5a29, 0x3a69, 0x5a34, 0x3a64, 0x5a40, 0x3a5f, + 0x5a4b, 0x3a59, 0x5a57, 0x3a54, 0x5a62, 0x3a4f, 0x5a6e, 0x3a4a, + 0x5a79, 0x3a45, 0x5a84, 0x3a3f, 0x5a90, 0x3a3a, 0x5a9b, 0x3a35, + 0x5aa7, 0x3a30, 0x5ab2, 0x3a2b, 0x5abe, 0x3a25, 0x5ac9, 0x3a20, + 0x5ad4, 0x3a1b, 0x5ae0, 0x3a16, 0x5aeb, 0x3a10, 0x5af7, 0x3a0b, + 0x5b02, 0x3a06, 0x5b0d, 0x3a00, 0x5b19, 0x39fb, 0x5b24, 0x39f6, + 0x5b30, 0x39f0, 0x5b3b, 0x39eb, 0x5b46, 0x39e6, 0x5b52, 0x39e0, + 0x5b5d, 0x39db, 0x5b68, 0x39d6, 0x5b74, 0x39d0, 0x5b7f, 0x39cb, + 0x5b8a, 0x39c5, 0x5b96, 0x39c0, 0x5ba1, 0x39bb, 0x5bac, 0x39b5, + 0x5bb8, 0x39b0, 0x5bc3, 0x39aa, 0x5bce, 0x39a5, 0x5bda, 0x399f, + 0x5be5, 0x399a, 0x5bf0, 0x3994, 0x5bfc, 0x398f, 0x5c07, 0x3989, + 0x5c12, 0x3984, 0x5c1e, 0x397e, 0x5c29, 0x3979, 0x5c34, 0x3973, + 0x5c3f, 0x396e, 0x5c4b, 0x3968, 0x5c56, 0x3963, 0x5c61, 0x395d, + 0x5c6c, 0x3958, 0x5c78, 0x3952, 0x5c83, 0x394c, 0x5c8e, 0x3947, + 0x5c99, 0x3941, 0x5ca5, 0x393b, 0x5cb0, 0x3936, 0x5cbb, 0x3930, + 0x5cc6, 0x392b, 0x5cd2, 0x3925, 0x5cdd, 0x391f, 0x5ce8, 0x391a, + 0x5cf3, 0x3914, 0x5cff, 0x390e, 0x5d0a, 0x3909, 0x5d15, 0x3903, + 0x5d20, 0x38fd, 0x5d2b, 0x38f7, 0x5d36, 0x38f2, 0x5d42, 0x38ec, + 0x5d4d, 0x38e6, 0x5d58, 0x38e0, 0x5d63, 0x38db, 0x5d6e, 0x38d5, + 0x5d79, 0x38cf, 0x5d85, 0x38c9, 0x5d90, 0x38c3, 0x5d9b, 0x38be, + 0x5da6, 0x38b8, 0x5db1, 0x38b2, 0x5dbc, 0x38ac, 0x5dc7, 0x38a6, + 0x5dd3, 0x38a1, 0x5dde, 0x389b, 0x5de9, 0x3895, 0x5df4, 0x388f, + 0x5dff, 0x3889, 0x5e0a, 0x3883, 0x5e15, 0x387d, 0x5e20, 0x3877, + 0x5e2b, 0x3871, 0x5e36, 0x386b, 0x5e42, 0x3866, 0x5e4d, 0x3860, + 0x5e58, 0x385a, 0x5e63, 0x3854, 0x5e6e, 0x384e, 0x5e79, 0x3848, + 0x5e84, 0x3842, 0x5e8f, 0x383c, 0x5e9a, 0x3836, 0x5ea5, 0x3830, + 0x5eb0, 0x382a, 0x5ebb, 0x3824, 0x5ec6, 0x381e, 0x5ed1, 0x3818, + 0x5edc, 0x3812, 0x5ee7, 0x380b, 0x5ef2, 0x3805, 0x5efd, 0x37ff, + 0x5f08, 0x37f9, 0x5f13, 0x37f3, 0x5f1e, 0x37ed, 0x5f29, 0x37e7, + 0x5f34, 0x37e1, 0x5f3f, 0x37db, 0x5f4a, 0x37d5, 0x5f55, 0x37ce, + 0x5f60, 0x37c8, 0x5f6b, 0x37c2, 0x5f76, 0x37bc, 0x5f81, 0x37b6, + 0x5f8c, 0x37b0, 0x5f97, 0x37a9, 0x5fa2, 0x37a3, 0x5fac, 0x379d, + 0x5fb7, 0x3797, 0x5fc2, 0x3790, 0x5fcd, 0x378a, 0x5fd8, 0x3784, + 0x5fe3, 0x377e, 0x5fee, 0x3777, 0x5ff9, 0x3771, 0x6004, 0x376b, + 0x600f, 0x3765, 0x6019, 0x375e, 0x6024, 0x3758, 0x602f, 0x3752, + 0x603a, 0x374b, 0x6045, 0x3745, 0x6050, 0x373f, 0x605b, 0x3738, + 0x6065, 0x3732, 0x6070, 0x372c, 0x607b, 0x3725, 0x6086, 0x371f, + 0x6091, 0x3718, 0x609b, 0x3712, 0x60a6, 0x370c, 0x60b1, 0x3705, + 0x60bc, 0x36ff, 0x60c7, 0x36f8, 0x60d1, 0x36f2, 0x60dc, 0x36eb, + 0x60e7, 0x36e5, 0x60f2, 0x36df, 0x60fd, 0x36d8, 0x6107, 0x36d2, + 0x6112, 0x36cb, 0x611d, 0x36c5, 0x6128, 0x36be, 0x6132, 0x36b8, + 0x613d, 0x36b1, 0x6148, 0x36ab, 0x6153, 0x36a4, 0x615d, 0x369d, + 0x6168, 0x3697, 0x6173, 0x3690, 0x617d, 0x368a, 0x6188, 0x3683, + 0x6193, 0x367d, 0x619e, 0x3676, 0x61a8, 0x366f, 0x61b3, 0x3669, + 0x61be, 0x3662, 0x61c8, 0x365c, 0x61d3, 0x3655, 0x61de, 0x364e, + 0x61e8, 0x3648, 0x61f3, 0x3641, 0x61fe, 0x363a, 0x6208, 0x3634, + 0x6213, 0x362d, 0x621e, 0x3626, 0x6228, 0x3620, 0x6233, 0x3619, + 0x623d, 0x3612, 0x6248, 0x360b, 0x6253, 0x3605, 0x625d, 0x35fe, + 0x6268, 0x35f7, 0x6272, 0x35f0, 0x627d, 0x35ea, 0x6288, 0x35e3, + 0x6292, 0x35dc, 0x629d, 0x35d5, 0x62a7, 0x35ce, 0x62b2, 0x35c8, + 0x62bc, 0x35c1, 0x62c7, 0x35ba, 0x62d2, 0x35b3, 0x62dc, 0x35ac, + 0x62e7, 0x35a5, 0x62f1, 0x359f, 0x62fc, 0x3598, 0x6306, 0x3591, + 0x6311, 0x358a, 0x631b, 0x3583, 0x6326, 0x357c, 0x6330, 0x3575, + 0x633b, 0x356e, 0x6345, 0x3567, 0x6350, 0x3561, 0x635a, 0x355a, + 0x6365, 0x3553, 0x636f, 0x354c, 0x637a, 0x3545, 0x6384, 0x353e, + 0x638e, 0x3537, 0x6399, 0x3530, 0x63a3, 0x3529, 0x63ae, 0x3522, + 0x63b8, 0x351b, 0x63c3, 0x3514, 0x63cd, 0x350d, 0x63d7, 0x3506, + 0x63e2, 0x34ff, 0x63ec, 0x34f8, 0x63f7, 0x34f1, 0x6401, 0x34ea, + 0x640b, 0x34e2, 0x6416, 0x34db, 0x6420, 0x34d4, 0x642b, 0x34cd, + 0x6435, 0x34c6, 0x643f, 0x34bf, 0x644a, 0x34b8, 0x6454, 0x34b1, + 0x645e, 0x34aa, 0x6469, 0x34a2, 0x6473, 0x349b, 0x647d, 0x3494, + 0x6488, 0x348d, 0x6492, 0x3486, 0x649c, 0x347f, 0x64a7, 0x3477, + 0x64b1, 0x3470, 0x64bb, 0x3469, 0x64c5, 0x3462, 0x64d0, 0x345b, + 0x64da, 0x3453, 0x64e4, 0x344c, 0x64ef, 0x3445, 0x64f9, 0x343e, + 0x6503, 0x3436, 0x650d, 0x342f, 0x6518, 0x3428, 0x6522, 0x3420, + 0x652c, 0x3419, 0x6536, 0x3412, 0x6541, 0x340b, 0x654b, 0x3403, + 0x6555, 0x33fc, 0x655f, 0x33f5, 0x6569, 0x33ed, 0x6574, 0x33e6, + 0x657e, 0x33df, 0x6588, 0x33d7, 0x6592, 0x33d0, 0x659c, 0x33c8, + 0x65a6, 0x33c1, 0x65b1, 0x33ba, 0x65bb, 0x33b2, 0x65c5, 0x33ab, + 0x65cf, 0x33a3, 0x65d9, 0x339c, 0x65e3, 0x3395, 0x65ed, 0x338d, + 0x65f8, 0x3386, 0x6602, 0x337e, 0x660c, 0x3377, 0x6616, 0x336f, + 0x6620, 0x3368, 0x662a, 0x3360, 0x6634, 0x3359, 0x663e, 0x3351, + 0x6648, 0x334a, 0x6652, 0x3342, 0x665c, 0x333b, 0x6666, 0x3333, + 0x6671, 0x332c, 0x667b, 0x3324, 0x6685, 0x331d, 0x668f, 0x3315, + 0x6699, 0x330d, 0x66a3, 0x3306, 0x66ad, 0x32fe, 0x66b7, 0x32f7, + 0x66c1, 0x32ef, 0x66cb, 0x32e7, 0x66d5, 0x32e0, 0x66df, 0x32d8, + 0x66e9, 0x32d0, 0x66f3, 0x32c9, 0x66fd, 0x32c1, 0x6707, 0x32ba, + 0x6711, 0x32b2, 0x671a, 0x32aa, 0x6724, 0x32a3, 0x672e, 0x329b, + 0x6738, 0x3293, 0x6742, 0x328b, 0x674c, 0x3284, 0x6756, 0x327c, + 0x6760, 0x3274, 0x676a, 0x326d, 0x6774, 0x3265, 0x677e, 0x325d, + 0x6788, 0x3255, 0x6791, 0x324e, 0x679b, 0x3246, 0x67a5, 0x323e, + 0x67af, 0x3236, 0x67b9, 0x322e, 0x67c3, 0x3227, 0x67cd, 0x321f, + 0x67d6, 0x3217, 0x67e0, 0x320f, 0x67ea, 0x3207, 0x67f4, 0x31ff, + 0x67fe, 0x31f8, 0x6808, 0x31f0, 0x6811, 0x31e8, 0x681b, 0x31e0, + 0x6825, 0x31d8, 0x682f, 0x31d0, 0x6838, 0x31c8, 0x6842, 0x31c0, + 0x684c, 0x31b9, 0x6856, 0x31b1, 0x6860, 0x31a9, 0x6869, 0x31a1, + 0x6873, 0x3199, 0x687d, 0x3191, 0x6886, 0x3189, 0x6890, 0x3181, + 0x689a, 0x3179, 0x68a4, 0x3171, 0x68ad, 0x3169, 0x68b7, 0x3161, + 0x68c1, 0x3159, 0x68ca, 0x3151, 0x68d4, 0x3149, 0x68de, 0x3141, + 0x68e7, 0x3139, 0x68f1, 0x3131, 0x68fb, 0x3129, 0x6904, 0x3121, + 0x690e, 0x3119, 0x6918, 0x3111, 0x6921, 0x3109, 0x692b, 0x3101, + 0x6935, 0x30f9, 0x693e, 0x30f0, 0x6948, 0x30e8, 0x6951, 0x30e0, + 0x695b, 0x30d8, 0x6965, 0x30d0, 0x696e, 0x30c8, 0x6978, 0x30c0, + 0x6981, 0x30b8, 0x698b, 0x30af, 0x6994, 0x30a7, 0x699e, 0x309f, + 0x69a7, 0x3097, 0x69b1, 0x308f, 0x69bb, 0x3087, 0x69c4, 0x307e, + 0x69ce, 0x3076, 0x69d7, 0x306e, 0x69e1, 0x3066, 0x69ea, 0x305d, + 0x69f4, 0x3055, 0x69fd, 0x304d, 0x6a07, 0x3045, 0x6a10, 0x303c, + 0x6a1a, 0x3034, 0x6a23, 0x302c, 0x6a2c, 0x3024, 0x6a36, 0x301b, + 0x6a3f, 0x3013, 0x6a49, 0x300b, 0x6a52, 0x3002, 0x6a5c, 0x2ffa, + 0x6a65, 0x2ff2, 0x6a6e, 0x2fea, 0x6a78, 0x2fe1, 0x6a81, 0x2fd9, + 0x6a8b, 0x2fd0, 0x6a94, 0x2fc8, 0x6a9d, 0x2fc0, 0x6aa7, 0x2fb7, + 0x6ab0, 0x2faf, 0x6ab9, 0x2fa7, 0x6ac3, 0x2f9e, 0x6acc, 0x2f96, + 0x6ad6, 0x2f8d, 0x6adf, 0x2f85, 0x6ae8, 0x2f7d, 0x6af2, 0x2f74, + 0x6afb, 0x2f6c, 0x6b04, 0x2f63, 0x6b0d, 0x2f5b, 0x6b17, 0x2f52, + 0x6b20, 0x2f4a, 0x6b29, 0x2f41, 0x6b33, 0x2f39, 0x6b3c, 0x2f30, + 0x6b45, 0x2f28, 0x6b4e, 0x2f20, 0x6b58, 0x2f17, 0x6b61, 0x2f0e, + 0x6b6a, 0x2f06, 0x6b73, 0x2efd, 0x6b7d, 0x2ef5, 0x6b86, 0x2eec, + 0x6b8f, 0x2ee4, 0x6b98, 0x2edb, 0x6ba1, 0x2ed3, 0x6bab, 0x2eca, + 0x6bb4, 0x2ec2, 0x6bbd, 0x2eb9, 0x6bc6, 0x2eb0, 0x6bcf, 0x2ea8, + 0x6bd8, 0x2e9f, 0x6be2, 0x2e97, 0x6beb, 0x2e8e, 0x6bf4, 0x2e85, + 0x6bfd, 0x2e7d, 0x6c06, 0x2e74, 0x6c0f, 0x2e6b, 0x6c18, 0x2e63, + 0x6c21, 0x2e5a, 0x6c2b, 0x2e51, 0x6c34, 0x2e49, 0x6c3d, 0x2e40, + 0x6c46, 0x2e37, 0x6c4f, 0x2e2f, 0x6c58, 0x2e26, 0x6c61, 0x2e1d, + 0x6c6a, 0x2e15, 0x6c73, 0x2e0c, 0x6c7c, 0x2e03, 0x6c85, 0x2dfa, + 0x6c8e, 0x2df2, 0x6c97, 0x2de9, 0x6ca0, 0x2de0, 0x6ca9, 0x2dd7, + 0x6cb2, 0x2dcf, 0x6cbb, 0x2dc6, 0x6cc4, 0x2dbd, 0x6ccd, 0x2db4, + 0x6cd6, 0x2dab, 0x6cdf, 0x2da3, 0x6ce8, 0x2d9a, 0x6cf1, 0x2d91, + 0x6cfa, 0x2d88, 0x6d03, 0x2d7f, 0x6d0c, 0x2d76, 0x6d15, 0x2d6e, + 0x6d1e, 0x2d65, 0x6d27, 0x2d5c, 0x6d2f, 0x2d53, 0x6d38, 0x2d4a, + 0x6d41, 0x2d41, 0x6d4a, 0x2d38, 0x6d53, 0x2d2f, 0x6d5c, 0x2d27, + 0x6d65, 0x2d1e, 0x6d6e, 0x2d15, 0x6d76, 0x2d0c, 0x6d7f, 0x2d03, + 0x6d88, 0x2cfa, 0x6d91, 0x2cf1, 0x6d9a, 0x2ce8, 0x6da3, 0x2cdf, + 0x6dab, 0x2cd6, 0x6db4, 0x2ccd, 0x6dbd, 0x2cc4, 0x6dc6, 0x2cbb, + 0x6dcf, 0x2cb2, 0x6dd7, 0x2ca9, 0x6de0, 0x2ca0, 0x6de9, 0x2c97, + 0x6df2, 0x2c8e, 0x6dfa, 0x2c85, 0x6e03, 0x2c7c, 0x6e0c, 0x2c73, + 0x6e15, 0x2c6a, 0x6e1d, 0x2c61, 0x6e26, 0x2c58, 0x6e2f, 0x2c4f, + 0x6e37, 0x2c46, 0x6e40, 0x2c3d, 0x6e49, 0x2c34, 0x6e51, 0x2c2b, + 0x6e5a, 0x2c21, 0x6e63, 0x2c18, 0x6e6b, 0x2c0f, 0x6e74, 0x2c06, + 0x6e7d, 0x2bfd, 0x6e85, 0x2bf4, 0x6e8e, 0x2beb, 0x6e97, 0x2be2, + 0x6e9f, 0x2bd8, 0x6ea8, 0x2bcf, 0x6eb0, 0x2bc6, 0x6eb9, 0x2bbd, + 0x6ec2, 0x2bb4, 0x6eca, 0x2bab, 0x6ed3, 0x2ba1, 0x6edb, 0x2b98, + 0x6ee4, 0x2b8f, 0x6eec, 0x2b86, 0x6ef5, 0x2b7d, 0x6efd, 0x2b73, + 0x6f06, 0x2b6a, 0x6f0e, 0x2b61, 0x6f17, 0x2b58, 0x6f20, 0x2b4e, + 0x6f28, 0x2b45, 0x6f30, 0x2b3c, 0x6f39, 0x2b33, 0x6f41, 0x2b29, + 0x6f4a, 0x2b20, 0x6f52, 0x2b17, 0x6f5b, 0x2b0d, 0x6f63, 0x2b04, + 0x6f6c, 0x2afb, 0x6f74, 0x2af2, 0x6f7d, 0x2ae8, 0x6f85, 0x2adf, + 0x6f8d, 0x2ad6, 0x6f96, 0x2acc, 0x6f9e, 0x2ac3, 0x6fa7, 0x2ab9, + 0x6faf, 0x2ab0, 0x6fb7, 0x2aa7, 0x6fc0, 0x2a9d, 0x6fc8, 0x2a94, + 0x6fd0, 0x2a8b, 0x6fd9, 0x2a81, 0x6fe1, 0x2a78, 0x6fea, 0x2a6e, + 0x6ff2, 0x2a65, 0x6ffa, 0x2a5c, 0x7002, 0x2a52, 0x700b, 0x2a49, + 0x7013, 0x2a3f, 0x701b, 0x2a36, 0x7024, 0x2a2c, 0x702c, 0x2a23, + 0x7034, 0x2a1a, 0x703c, 0x2a10, 0x7045, 0x2a07, 0x704d, 0x29fd, + 0x7055, 0x29f4, 0x705d, 0x29ea, 0x7066, 0x29e1, 0x706e, 0x29d7, + 0x7076, 0x29ce, 0x707e, 0x29c4, 0x7087, 0x29bb, 0x708f, 0x29b1, + 0x7097, 0x29a7, 0x709f, 0x299e, 0x70a7, 0x2994, 0x70af, 0x298b, + 0x70b8, 0x2981, 0x70c0, 0x2978, 0x70c8, 0x296e, 0x70d0, 0x2965, + 0x70d8, 0x295b, 0x70e0, 0x2951, 0x70e8, 0x2948, 0x70f0, 0x293e, + 0x70f9, 0x2935, 0x7101, 0x292b, 0x7109, 0x2921, 0x7111, 0x2918, + 0x7119, 0x290e, 0x7121, 0x2904, 0x7129, 0x28fb, 0x7131, 0x28f1, + 0x7139, 0x28e7, 0x7141, 0x28de, 0x7149, 0x28d4, 0x7151, 0x28ca, + 0x7159, 0x28c1, 0x7161, 0x28b7, 0x7169, 0x28ad, 0x7171, 0x28a4, + 0x7179, 0x289a, 0x7181, 0x2890, 0x7189, 0x2886, 0x7191, 0x287d, + 0x7199, 0x2873, 0x71a1, 0x2869, 0x71a9, 0x2860, 0x71b1, 0x2856, + 0x71b9, 0x284c, 0x71c0, 0x2842, 0x71c8, 0x2838, 0x71d0, 0x282f, + 0x71d8, 0x2825, 0x71e0, 0x281b, 0x71e8, 0x2811, 0x71f0, 0x2808, + 0x71f8, 0x27fe, 0x71ff, 0x27f4, 0x7207, 0x27ea, 0x720f, 0x27e0, + 0x7217, 0x27d6, 0x721f, 0x27cd, 0x7227, 0x27c3, 0x722e, 0x27b9, + 0x7236, 0x27af, 0x723e, 0x27a5, 0x7246, 0x279b, 0x724e, 0x2791, + 0x7255, 0x2788, 0x725d, 0x277e, 0x7265, 0x2774, 0x726d, 0x276a, + 0x7274, 0x2760, 0x727c, 0x2756, 0x7284, 0x274c, 0x728b, 0x2742, + 0x7293, 0x2738, 0x729b, 0x272e, 0x72a3, 0x2724, 0x72aa, 0x271a, + 0x72b2, 0x2711, 0x72ba, 0x2707, 0x72c1, 0x26fd, 0x72c9, 0x26f3, + 0x72d0, 0x26e9, 0x72d8, 0x26df, 0x72e0, 0x26d5, 0x72e7, 0x26cb, + 0x72ef, 0x26c1, 0x72f7, 0x26b7, 0x72fe, 0x26ad, 0x7306, 0x26a3, + 0x730d, 0x2699, 0x7315, 0x268f, 0x731d, 0x2685, 0x7324, 0x267b, + 0x732c, 0x2671, 0x7333, 0x2666, 0x733b, 0x265c, 0x7342, 0x2652, + 0x734a, 0x2648, 0x7351, 0x263e, 0x7359, 0x2634, 0x7360, 0x262a, + 0x7368, 0x2620, 0x736f, 0x2616, 0x7377, 0x260c, 0x737e, 0x2602, + 0x7386, 0x25f8, 0x738d, 0x25ed, 0x7395, 0x25e3, 0x739c, 0x25d9, + 0x73a3, 0x25cf, 0x73ab, 0x25c5, 0x73b2, 0x25bb, 0x73ba, 0x25b1, + 0x73c1, 0x25a6, 0x73c8, 0x259c, 0x73d0, 0x2592, 0x73d7, 0x2588, + 0x73df, 0x257e, 0x73e6, 0x2574, 0x73ed, 0x2569, 0x73f5, 0x255f, + 0x73fc, 0x2555, 0x7403, 0x254b, 0x740b, 0x2541, 0x7412, 0x2536, + 0x7419, 0x252c, 0x7420, 0x2522, 0x7428, 0x2518, 0x742f, 0x250d, + 0x7436, 0x2503, 0x743e, 0x24f9, 0x7445, 0x24ef, 0x744c, 0x24e4, + 0x7453, 0x24da, 0x745b, 0x24d0, 0x7462, 0x24c5, 0x7469, 0x24bb, + 0x7470, 0x24b1, 0x7477, 0x24a7, 0x747f, 0x249c, 0x7486, 0x2492, + 0x748d, 0x2488, 0x7494, 0x247d, 0x749b, 0x2473, 0x74a2, 0x2469, + 0x74aa, 0x245e, 0x74b1, 0x2454, 0x74b8, 0x244a, 0x74bf, 0x243f, + 0x74c6, 0x2435, 0x74cd, 0x242b, 0x74d4, 0x2420, 0x74db, 0x2416, + 0x74e2, 0x240b, 0x74ea, 0x2401, 0x74f1, 0x23f7, 0x74f8, 0x23ec, + 0x74ff, 0x23e2, 0x7506, 0x23d7, 0x750d, 0x23cd, 0x7514, 0x23c3, + 0x751b, 0x23b8, 0x7522, 0x23ae, 0x7529, 0x23a3, 0x7530, 0x2399, + 0x7537, 0x238e, 0x753e, 0x2384, 0x7545, 0x237a, 0x754c, 0x236f, + 0x7553, 0x2365, 0x755a, 0x235a, 0x7561, 0x2350, 0x7567, 0x2345, + 0x756e, 0x233b, 0x7575, 0x2330, 0x757c, 0x2326, 0x7583, 0x231b, + 0x758a, 0x2311, 0x7591, 0x2306, 0x7598, 0x22fc, 0x759f, 0x22f1, + 0x75a5, 0x22e7, 0x75ac, 0x22dc, 0x75b3, 0x22d2, 0x75ba, 0x22c7, + 0x75c1, 0x22bc, 0x75c8, 0x22b2, 0x75ce, 0x22a7, 0x75d5, 0x229d, + 0x75dc, 0x2292, 0x75e3, 0x2288, 0x75ea, 0x227d, 0x75f0, 0x2272, + 0x75f7, 0x2268, 0x75fe, 0x225d, 0x7605, 0x2253, 0x760b, 0x2248, + 0x7612, 0x223d, 0x7619, 0x2233, 0x7620, 0x2228, 0x7626, 0x221e, + 0x762d, 0x2213, 0x7634, 0x2208, 0x763a, 0x21fe, 0x7641, 0x21f3, + 0x7648, 0x21e8, 0x764e, 0x21de, 0x7655, 0x21d3, 0x765c, 0x21c8, + 0x7662, 0x21be, 0x7669, 0x21b3, 0x766f, 0x21a8, 0x7676, 0x219e, + 0x767d, 0x2193, 0x7683, 0x2188, 0x768a, 0x217d, 0x7690, 0x2173, + 0x7697, 0x2168, 0x769d, 0x215d, 0x76a4, 0x2153, 0x76ab, 0x2148, + 0x76b1, 0x213d, 0x76b8, 0x2132, 0x76be, 0x2128, 0x76c5, 0x211d, + 0x76cb, 0x2112, 0x76d2, 0x2107, 0x76d8, 0x20fd, 0x76df, 0x20f2, + 0x76e5, 0x20e7, 0x76eb, 0x20dc, 0x76f2, 0x20d1, 0x76f8, 0x20c7, + 0x76ff, 0x20bc, 0x7705, 0x20b1, 0x770c, 0x20a6, 0x7712, 0x209b, + 0x7718, 0x2091, 0x771f, 0x2086, 0x7725, 0x207b, 0x772c, 0x2070, + 0x7732, 0x2065, 0x7738, 0x205b, 0x773f, 0x2050, 0x7745, 0x2045, + 0x774b, 0x203a, 0x7752, 0x202f, 0x7758, 0x2024, 0x775e, 0x2019, + 0x7765, 0x200f, 0x776b, 0x2004, 0x7771, 0x1ff9, 0x7777, 0x1fee, + 0x777e, 0x1fe3, 0x7784, 0x1fd8, 0x778a, 0x1fcd, 0x7790, 0x1fc2, + 0x7797, 0x1fb7, 0x779d, 0x1fac, 0x77a3, 0x1fa2, 0x77a9, 0x1f97, + 0x77b0, 0x1f8c, 0x77b6, 0x1f81, 0x77bc, 0x1f76, 0x77c2, 0x1f6b, + 0x77c8, 0x1f60, 0x77ce, 0x1f55, 0x77d5, 0x1f4a, 0x77db, 0x1f3f, + 0x77e1, 0x1f34, 0x77e7, 0x1f29, 0x77ed, 0x1f1e, 0x77f3, 0x1f13, + 0x77f9, 0x1f08, 0x77ff, 0x1efd, 0x7805, 0x1ef2, 0x780b, 0x1ee7, + 0x7812, 0x1edc, 0x7818, 0x1ed1, 0x781e, 0x1ec6, 0x7824, 0x1ebb, + 0x782a, 0x1eb0, 0x7830, 0x1ea5, 0x7836, 0x1e9a, 0x783c, 0x1e8f, + 0x7842, 0x1e84, 0x7848, 0x1e79, 0x784e, 0x1e6e, 0x7854, 0x1e63, + 0x785a, 0x1e58, 0x7860, 0x1e4d, 0x7866, 0x1e42, 0x786b, 0x1e36, + 0x7871, 0x1e2b, 0x7877, 0x1e20, 0x787d, 0x1e15, 0x7883, 0x1e0a, + 0x7889, 0x1dff, 0x788f, 0x1df4, 0x7895, 0x1de9, 0x789b, 0x1dde, + 0x78a1, 0x1dd3, 0x78a6, 0x1dc7, 0x78ac, 0x1dbc, 0x78b2, 0x1db1, + 0x78b8, 0x1da6, 0x78be, 0x1d9b, 0x78c3, 0x1d90, 0x78c9, 0x1d85, + 0x78cf, 0x1d79, 0x78d5, 0x1d6e, 0x78db, 0x1d63, 0x78e0, 0x1d58, + 0x78e6, 0x1d4d, 0x78ec, 0x1d42, 0x78f2, 0x1d36, 0x78f7, 0x1d2b, + 0x78fd, 0x1d20, 0x7903, 0x1d15, 0x7909, 0x1d0a, 0x790e, 0x1cff, + 0x7914, 0x1cf3, 0x791a, 0x1ce8, 0x791f, 0x1cdd, 0x7925, 0x1cd2, + 0x792b, 0x1cc6, 0x7930, 0x1cbb, 0x7936, 0x1cb0, 0x793b, 0x1ca5, + 0x7941, 0x1c99, 0x7947, 0x1c8e, 0x794c, 0x1c83, 0x7952, 0x1c78, + 0x7958, 0x1c6c, 0x795d, 0x1c61, 0x7963, 0x1c56, 0x7968, 0x1c4b, + 0x796e, 0x1c3f, 0x7973, 0x1c34, 0x7979, 0x1c29, 0x797e, 0x1c1e, + 0x7984, 0x1c12, 0x7989, 0x1c07, 0x798f, 0x1bfc, 0x7994, 0x1bf0, + 0x799a, 0x1be5, 0x799f, 0x1bda, 0x79a5, 0x1bce, 0x79aa, 0x1bc3, + 0x79b0, 0x1bb8, 0x79b5, 0x1bac, 0x79bb, 0x1ba1, 0x79c0, 0x1b96, + 0x79c5, 0x1b8a, 0x79cb, 0x1b7f, 0x79d0, 0x1b74, 0x79d6, 0x1b68, + 0x79db, 0x1b5d, 0x79e0, 0x1b52, 0x79e6, 0x1b46, 0x79eb, 0x1b3b, + 0x79f0, 0x1b30, 0x79f6, 0x1b24, 0x79fb, 0x1b19, 0x7a00, 0x1b0d, + 0x7a06, 0x1b02, 0x7a0b, 0x1af7, 0x7a10, 0x1aeb, 0x7a16, 0x1ae0, + 0x7a1b, 0x1ad4, 0x7a20, 0x1ac9, 0x7a25, 0x1abe, 0x7a2b, 0x1ab2, + 0x7a30, 0x1aa7, 0x7a35, 0x1a9b, 0x7a3a, 0x1a90, 0x7a3f, 0x1a84, + 0x7a45, 0x1a79, 0x7a4a, 0x1a6e, 0x7a4f, 0x1a62, 0x7a54, 0x1a57, + 0x7a59, 0x1a4b, 0x7a5f, 0x1a40, 0x7a64, 0x1a34, 0x7a69, 0x1a29, + 0x7a6e, 0x1a1d, 0x7a73, 0x1a12, 0x7a78, 0x1a06, 0x7a7d, 0x19fb, + 0x7a82, 0x19ef, 0x7a88, 0x19e4, 0x7a8d, 0x19d8, 0x7a92, 0x19cd, + 0x7a97, 0x19c1, 0x7a9c, 0x19b6, 0x7aa1, 0x19aa, 0x7aa6, 0x199f, + 0x7aab, 0x1993, 0x7ab0, 0x1988, 0x7ab5, 0x197c, 0x7aba, 0x1971, + 0x7abf, 0x1965, 0x7ac4, 0x195a, 0x7ac9, 0x194e, 0x7ace, 0x1943, + 0x7ad3, 0x1937, 0x7ad8, 0x192c, 0x7add, 0x1920, 0x7ae2, 0x1914, + 0x7ae6, 0x1909, 0x7aeb, 0x18fd, 0x7af0, 0x18f2, 0x7af5, 0x18e6, + 0x7afa, 0x18db, 0x7aff, 0x18cf, 0x7b04, 0x18c3, 0x7b09, 0x18b8, + 0x7b0e, 0x18ac, 0x7b12, 0x18a1, 0x7b17, 0x1895, 0x7b1c, 0x1889, + 0x7b21, 0x187e, 0x7b26, 0x1872, 0x7b2a, 0x1867, 0x7b2f, 0x185b, + 0x7b34, 0x184f, 0x7b39, 0x1844, 0x7b3e, 0x1838, 0x7b42, 0x182d, + 0x7b47, 0x1821, 0x7b4c, 0x1815, 0x7b50, 0x180a, 0x7b55, 0x17fe, + 0x7b5a, 0x17f2, 0x7b5f, 0x17e7, 0x7b63, 0x17db, 0x7b68, 0x17cf, + 0x7b6d, 0x17c4, 0x7b71, 0x17b8, 0x7b76, 0x17ac, 0x7b7b, 0x17a1, + 0x7b7f, 0x1795, 0x7b84, 0x1789, 0x7b88, 0x177e, 0x7b8d, 0x1772, + 0x7b92, 0x1766, 0x7b96, 0x175b, 0x7b9b, 0x174f, 0x7b9f, 0x1743, + 0x7ba4, 0x1737, 0x7ba9, 0x172c, 0x7bad, 0x1720, 0x7bb2, 0x1714, + 0x7bb6, 0x1709, 0x7bbb, 0x16fd, 0x7bbf, 0x16f1, 0x7bc4, 0x16e5, + 0x7bc8, 0x16da, 0x7bcd, 0x16ce, 0x7bd1, 0x16c2, 0x7bd6, 0x16b6, + 0x7bda, 0x16ab, 0x7bde, 0x169f, 0x7be3, 0x1693, 0x7be7, 0x1687, + 0x7bec, 0x167c, 0x7bf0, 0x1670, 0x7bf5, 0x1664, 0x7bf9, 0x1658, + 0x7bfd, 0x164c, 0x7c02, 0x1641, 0x7c06, 0x1635, 0x7c0a, 0x1629, + 0x7c0f, 0x161d, 0x7c13, 0x1612, 0x7c17, 0x1606, 0x7c1c, 0x15fa, + 0x7c20, 0x15ee, 0x7c24, 0x15e2, 0x7c29, 0x15d7, 0x7c2d, 0x15cb, + 0x7c31, 0x15bf, 0x7c36, 0x15b3, 0x7c3a, 0x15a7, 0x7c3e, 0x159b, + 0x7c42, 0x1590, 0x7c46, 0x1584, 0x7c4b, 0x1578, 0x7c4f, 0x156c, + 0x7c53, 0x1560, 0x7c57, 0x1554, 0x7c5b, 0x1549, 0x7c60, 0x153d, + 0x7c64, 0x1531, 0x7c68, 0x1525, 0x7c6c, 0x1519, 0x7c70, 0x150d, + 0x7c74, 0x1501, 0x7c79, 0x14f6, 0x7c7d, 0x14ea, 0x7c81, 0x14de, + 0x7c85, 0x14d2, 0x7c89, 0x14c6, 0x7c8d, 0x14ba, 0x7c91, 0x14ae, + 0x7c95, 0x14a2, 0x7c99, 0x1496, 0x7c9d, 0x148b, 0x7ca1, 0x147f, + 0x7ca5, 0x1473, 0x7ca9, 0x1467, 0x7cad, 0x145b, 0x7cb1, 0x144f, + 0x7cb5, 0x1443, 0x7cb9, 0x1437, 0x7cbd, 0x142b, 0x7cc1, 0x141f, + 0x7cc5, 0x1413, 0x7cc9, 0x1407, 0x7ccd, 0x13fb, 0x7cd1, 0x13f0, + 0x7cd5, 0x13e4, 0x7cd9, 0x13d8, 0x7cdd, 0x13cc, 0x7ce0, 0x13c0, + 0x7ce4, 0x13b4, 0x7ce8, 0x13a8, 0x7cec, 0x139c, 0x7cf0, 0x1390, + 0x7cf4, 0x1384, 0x7cf8, 0x1378, 0x7cfb, 0x136c, 0x7cff, 0x1360, + 0x7d03, 0x1354, 0x7d07, 0x1348, 0x7d0b, 0x133c, 0x7d0e, 0x1330, + 0x7d12, 0x1324, 0x7d16, 0x1318, 0x7d1a, 0x130c, 0x7d1d, 0x1300, + 0x7d21, 0x12f4, 0x7d25, 0x12e8, 0x7d28, 0x12dc, 0x7d2c, 0x12d0, + 0x7d30, 0x12c4, 0x7d34, 0x12b8, 0x7d37, 0x12ac, 0x7d3b, 0x12a0, + 0x7d3f, 0x1294, 0x7d42, 0x1288, 0x7d46, 0x127c, 0x7d49, 0x1270, + 0x7d4d, 0x1264, 0x7d51, 0x1258, 0x7d54, 0x124c, 0x7d58, 0x1240, + 0x7d5b, 0x1234, 0x7d5f, 0x1228, 0x7d63, 0x121c, 0x7d66, 0x1210, + 0x7d6a, 0x1204, 0x7d6d, 0x11f7, 0x7d71, 0x11eb, 0x7d74, 0x11df, + 0x7d78, 0x11d3, 0x7d7b, 0x11c7, 0x7d7f, 0x11bb, 0x7d82, 0x11af, + 0x7d86, 0x11a3, 0x7d89, 0x1197, 0x7d8d, 0x118b, 0x7d90, 0x117f, + 0x7d93, 0x1173, 0x7d97, 0x1167, 0x7d9a, 0x115a, 0x7d9e, 0x114e, + 0x7da1, 0x1142, 0x7da4, 0x1136, 0x7da8, 0x112a, 0x7dab, 0x111e, + 0x7daf, 0x1112, 0x7db2, 0x1106, 0x7db5, 0x10fa, 0x7db9, 0x10ed, + 0x7dbc, 0x10e1, 0x7dbf, 0x10d5, 0x7dc2, 0x10c9, 0x7dc6, 0x10bd, + 0x7dc9, 0x10b1, 0x7dcc, 0x10a5, 0x7dd0, 0x1099, 0x7dd3, 0x108c, + 0x7dd6, 0x1080, 0x7dd9, 0x1074, 0x7ddd, 0x1068, 0x7de0, 0x105c, + 0x7de3, 0x1050, 0x7de6, 0x1044, 0x7de9, 0x1037, 0x7ded, 0x102b, + 0x7df0, 0x101f, 0x7df3, 0x1013, 0x7df6, 0x1007, 0x7df9, 0xffb, + 0x7dfc, 0xfee, 0x7dff, 0xfe2, 0x7e03, 0xfd6, 0x7e06, 0xfca, + 0x7e09, 0xfbe, 0x7e0c, 0xfb2, 0x7e0f, 0xfa5, 0x7e12, 0xf99, + 0x7e15, 0xf8d, 0x7e18, 0xf81, 0x7e1b, 0xf75, 0x7e1e, 0xf68, + 0x7e21, 0xf5c, 0x7e24, 0xf50, 0x7e27, 0xf44, 0x7e2a, 0xf38, + 0x7e2d, 0xf2b, 0x7e30, 0xf1f, 0x7e33, 0xf13, 0x7e36, 0xf07, + 0x7e39, 0xefb, 0x7e3c, 0xeee, 0x7e3f, 0xee2, 0x7e42, 0xed6, + 0x7e45, 0xeca, 0x7e48, 0xebd, 0x7e4a, 0xeb1, 0x7e4d, 0xea5, + 0x7e50, 0xe99, 0x7e53, 0xe8c, 0x7e56, 0xe80, 0x7e59, 0xe74, + 0x7e5c, 0xe68, 0x7e5e, 0xe5c, 0x7e61, 0xe4f, 0x7e64, 0xe43, + 0x7e67, 0xe37, 0x7e6a, 0xe2b, 0x7e6c, 0xe1e, 0x7e6f, 0xe12, + 0x7e72, 0xe06, 0x7e75, 0xdf9, 0x7e77, 0xded, 0x7e7a, 0xde1, + 0x7e7d, 0xdd5, 0x7e80, 0xdc8, 0x7e82, 0xdbc, 0x7e85, 0xdb0, + 0x7e88, 0xda4, 0x7e8a, 0xd97, 0x7e8d, 0xd8b, 0x7e90, 0xd7f, + 0x7e92, 0xd72, 0x7e95, 0xd66, 0x7e98, 0xd5a, 0x7e9a, 0xd4e, + 0x7e9d, 0xd41, 0x7e9f, 0xd35, 0x7ea2, 0xd29, 0x7ea5, 0xd1c, + 0x7ea7, 0xd10, 0x7eaa, 0xd04, 0x7eac, 0xcf8, 0x7eaf, 0xceb, + 0x7eb1, 0xcdf, 0x7eb4, 0xcd3, 0x7eb6, 0xcc6, 0x7eb9, 0xcba, + 0x7ebb, 0xcae, 0x7ebe, 0xca1, 0x7ec0, 0xc95, 0x7ec3, 0xc89, + 0x7ec5, 0xc7c, 0x7ec8, 0xc70, 0x7eca, 0xc64, 0x7ecc, 0xc57, + 0x7ecf, 0xc4b, 0x7ed1, 0xc3f, 0x7ed4, 0xc32, 0x7ed6, 0xc26, + 0x7ed8, 0xc1a, 0x7edb, 0xc0d, 0x7edd, 0xc01, 0x7ee0, 0xbf5, + 0x7ee2, 0xbe8, 0x7ee4, 0xbdc, 0x7ee7, 0xbd0, 0x7ee9, 0xbc3, + 0x7eeb, 0xbb7, 0x7eed, 0xbab, 0x7ef0, 0xb9e, 0x7ef2, 0xb92, + 0x7ef4, 0xb85, 0x7ef7, 0xb79, 0x7ef9, 0xb6d, 0x7efb, 0xb60, + 0x7efd, 0xb54, 0x7f00, 0xb48, 0x7f02, 0xb3b, 0x7f04, 0xb2f, + 0x7f06, 0xb23, 0x7f08, 0xb16, 0x7f0a, 0xb0a, 0x7f0d, 0xafd, + 0x7f0f, 0xaf1, 0x7f11, 0xae5, 0x7f13, 0xad8, 0x7f15, 0xacc, + 0x7f17, 0xac0, 0x7f19, 0xab3, 0x7f1c, 0xaa7, 0x7f1e, 0xa9a, + 0x7f20, 0xa8e, 0x7f22, 0xa82, 0x7f24, 0xa75, 0x7f26, 0xa69, + 0x7f28, 0xa5c, 0x7f2a, 0xa50, 0x7f2c, 0xa44, 0x7f2e, 0xa37, + 0x7f30, 0xa2b, 0x7f32, 0xa1e, 0x7f34, 0xa12, 0x7f36, 0xa06, + 0x7f38, 0x9f9, 0x7f3a, 0x9ed, 0x7f3c, 0x9e0, 0x7f3e, 0x9d4, + 0x7f40, 0x9c7, 0x7f42, 0x9bb, 0x7f43, 0x9af, 0x7f45, 0x9a2, + 0x7f47, 0x996, 0x7f49, 0x989, 0x7f4b, 0x97d, 0x7f4d, 0x970, + 0x7f4f, 0x964, 0x7f51, 0x958, 0x7f52, 0x94b, 0x7f54, 0x93f, + 0x7f56, 0x932, 0x7f58, 0x926, 0x7f5a, 0x919, 0x7f5b, 0x90d, + 0x7f5d, 0x901, 0x7f5f, 0x8f4, 0x7f61, 0x8e8, 0x7f62, 0x8db, + 0x7f64, 0x8cf, 0x7f66, 0x8c2, 0x7f68, 0x8b6, 0x7f69, 0x8a9, + 0x7f6b, 0x89d, 0x7f6d, 0x891, 0x7f6e, 0x884, 0x7f70, 0x878, + 0x7f72, 0x86b, 0x7f73, 0x85f, 0x7f75, 0x852, 0x7f77, 0x846, + 0x7f78, 0x839, 0x7f7a, 0x82d, 0x7f7b, 0x820, 0x7f7d, 0x814, + 0x7f7f, 0x807, 0x7f80, 0x7fb, 0x7f82, 0x7ef, 0x7f83, 0x7e2, + 0x7f85, 0x7d6, 0x7f86, 0x7c9, 0x7f88, 0x7bd, 0x7f89, 0x7b0, + 0x7f8b, 0x7a4, 0x7f8c, 0x797, 0x7f8e, 0x78b, 0x7f8f, 0x77e, + 0x7f91, 0x772, 0x7f92, 0x765, 0x7f94, 0x759, 0x7f95, 0x74c, + 0x7f97, 0x740, 0x7f98, 0x733, 0x7f99, 0x727, 0x7f9b, 0x71a, + 0x7f9c, 0x70e, 0x7f9e, 0x701, 0x7f9f, 0x6f5, 0x7fa0, 0x6e8, + 0x7fa2, 0x6dc, 0x7fa3, 0x6cf, 0x7fa4, 0x6c3, 0x7fa6, 0x6b6, + 0x7fa7, 0x6aa, 0x7fa8, 0x69d, 0x7faa, 0x691, 0x7fab, 0x684, + 0x7fac, 0x678, 0x7fad, 0x66b, 0x7faf, 0x65f, 0x7fb0, 0x652, + 0x7fb1, 0x646, 0x7fb2, 0x639, 0x7fb4, 0x62d, 0x7fb5, 0x620, + 0x7fb6, 0x614, 0x7fb7, 0x607, 0x7fb8, 0x5fb, 0x7fb9, 0x5ee, + 0x7fbb, 0x5e2, 0x7fbc, 0x5d5, 0x7fbd, 0x5c9, 0x7fbe, 0x5bc, + 0x7fbf, 0x5b0, 0x7fc0, 0x5a3, 0x7fc1, 0x597, 0x7fc3, 0x58a, + 0x7fc4, 0x57e, 0x7fc5, 0x571, 0x7fc6, 0x565, 0x7fc7, 0x558, + 0x7fc8, 0x54c, 0x7fc9, 0x53f, 0x7fca, 0x533, 0x7fcb, 0x526, + 0x7fcc, 0x51a, 0x7fcd, 0x50d, 0x7fce, 0x500, 0x7fcf, 0x4f4, + 0x7fd0, 0x4e7, 0x7fd1, 0x4db, 0x7fd2, 0x4ce, 0x7fd3, 0x4c2, + 0x7fd4, 0x4b5, 0x7fd5, 0x4a9, 0x7fd5, 0x49c, 0x7fd6, 0x490, + 0x7fd7, 0x483, 0x7fd8, 0x477, 0x7fd9, 0x46a, 0x7fda, 0x45e, + 0x7fdb, 0x451, 0x7fdc, 0x444, 0x7fdc, 0x438, 0x7fdd, 0x42b, + 0x7fde, 0x41f, 0x7fdf, 0x412, 0x7fe0, 0x406, 0x7fe0, 0x3f9, + 0x7fe1, 0x3ed, 0x7fe2, 0x3e0, 0x7fe3, 0x3d4, 0x7fe3, 0x3c7, + 0x7fe4, 0x3bb, 0x7fe5, 0x3ae, 0x7fe6, 0x3a1, 0x7fe6, 0x395, + 0x7fe7, 0x388, 0x7fe8, 0x37c, 0x7fe8, 0x36f, 0x7fe9, 0x363, + 0x7fea, 0x356, 0x7fea, 0x34a, 0x7feb, 0x33d, 0x7fec, 0x330, + 0x7fec, 0x324, 0x7fed, 0x317, 0x7fed, 0x30b, 0x7fee, 0x2fe, + 0x7fef, 0x2f2, 0x7fef, 0x2e5, 0x7ff0, 0x2d9, 0x7ff0, 0x2cc, + 0x7ff1, 0x2c0, 0x7ff1, 0x2b3, 0x7ff2, 0x2a6, 0x7ff2, 0x29a, + 0x7ff3, 0x28d, 0x7ff3, 0x281, 0x7ff4, 0x274, 0x7ff4, 0x268, + 0x7ff5, 0x25b, 0x7ff5, 0x24e, 0x7ff6, 0x242, 0x7ff6, 0x235, + 0x7ff7, 0x229, 0x7ff7, 0x21c, 0x7ff7, 0x210, 0x7ff8, 0x203, + 0x7ff8, 0x1f7, 0x7ff9, 0x1ea, 0x7ff9, 0x1dd, 0x7ff9, 0x1d1, + 0x7ffa, 0x1c4, 0x7ffa, 0x1b8, 0x7ffa, 0x1ab, 0x7ffb, 0x19f, + 0x7ffb, 0x192, 0x7ffb, 0x186, 0x7ffc, 0x179, 0x7ffc, 0x16c, + 0x7ffc, 0x160, 0x7ffc, 0x153, 0x7ffd, 0x147, 0x7ffd, 0x13a, + 0x7ffd, 0x12e, 0x7ffd, 0x121, 0x7ffe, 0x114, 0x7ffe, 0x108, + 0x7ffe, 0xfb, 0x7ffe, 0xef, 0x7ffe, 0xe2, 0x7fff, 0xd6, + 0x7fff, 0xc9, 0x7fff, 0xbc, 0x7fff, 0xb0, 0x7fff, 0xa3, + 0x7fff, 0x97, 0x7fff, 0x8a, 0x7fff, 0x7e, 0x7fff, 0x71, + 0x7fff, 0x65, 0x7fff, 0x58, 0x7fff, 0x4b, 0x7fff, 0x3f, + 0x7fff, 0x32, 0x7fff, 0x26, 0x7fff, 0x19, 0x7fff, 0xd, + 0x7fff, 0x0, 0x7fff, 0xfff3, 0x7fff, 0xffe7, 0x7fff, 0xffda, + 0x7fff, 0xffce, 0x7fff, 0xffc1, 0x7fff, 0xffb5, 0x7fff, 0xffa8, + 0x7fff, 0xff9b, 0x7fff, 0xff8f, 0x7fff, 0xff82, 0x7fff, 0xff76, + 0x7fff, 0xff69, 0x7fff, 0xff5d, 0x7fff, 0xff50, 0x7fff, 0xff44, + 0x7fff, 0xff37, 0x7fff, 0xff2a, 0x7ffe, 0xff1e, 0x7ffe, 0xff11, + 0x7ffe, 0xff05, 0x7ffe, 0xfef8, 0x7ffe, 0xfeec, 0x7ffd, 0xfedf, + 0x7ffd, 0xfed2, 0x7ffd, 0xfec6, 0x7ffd, 0xfeb9, 0x7ffc, 0xfead, + 0x7ffc, 0xfea0, 0x7ffc, 0xfe94, 0x7ffc, 0xfe87, 0x7ffb, 0xfe7a, + 0x7ffb, 0xfe6e, 0x7ffb, 0xfe61, 0x7ffa, 0xfe55, 0x7ffa, 0xfe48, + 0x7ffa, 0xfe3c, 0x7ff9, 0xfe2f, 0x7ff9, 0xfe23, 0x7ff9, 0xfe16, + 0x7ff8, 0xfe09, 0x7ff8, 0xfdfd, 0x7ff7, 0xfdf0, 0x7ff7, 0xfde4, + 0x7ff7, 0xfdd7, 0x7ff6, 0xfdcb, 0x7ff6, 0xfdbe, 0x7ff5, 0xfdb2, + 0x7ff5, 0xfda5, 0x7ff4, 0xfd98, 0x7ff4, 0xfd8c, 0x7ff3, 0xfd7f, + 0x7ff3, 0xfd73, 0x7ff2, 0xfd66, 0x7ff2, 0xfd5a, 0x7ff1, 0xfd4d, + 0x7ff1, 0xfd40, 0x7ff0, 0xfd34, 0x7ff0, 0xfd27, 0x7fef, 0xfd1b, + 0x7fef, 0xfd0e, 0x7fee, 0xfd02, 0x7fed, 0xfcf5, 0x7fed, 0xfce9, + 0x7fec, 0xfcdc, 0x7fec, 0xfcd0, 0x7feb, 0xfcc3, 0x7fea, 0xfcb6, + 0x7fea, 0xfcaa, 0x7fe9, 0xfc9d, 0x7fe8, 0xfc91, 0x7fe8, 0xfc84, + 0x7fe7, 0xfc78, 0x7fe6, 0xfc6b, 0x7fe6, 0xfc5f, 0x7fe5, 0xfc52, + 0x7fe4, 0xfc45, 0x7fe3, 0xfc39, 0x7fe3, 0xfc2c, 0x7fe2, 0xfc20, + 0x7fe1, 0xfc13, 0x7fe0, 0xfc07, 0x7fe0, 0xfbfa, 0x7fdf, 0xfbee, + 0x7fde, 0xfbe1, 0x7fdd, 0xfbd5, 0x7fdc, 0xfbc8, 0x7fdc, 0xfbbc, + 0x7fdb, 0xfbaf, 0x7fda, 0xfba2, 0x7fd9, 0xfb96, 0x7fd8, 0xfb89, + 0x7fd7, 0xfb7d, 0x7fd6, 0xfb70, 0x7fd5, 0xfb64, 0x7fd5, 0xfb57, + 0x7fd4, 0xfb4b, 0x7fd3, 0xfb3e, 0x7fd2, 0xfb32, 0x7fd1, 0xfb25, + 0x7fd0, 0xfb19, 0x7fcf, 0xfb0c, 0x7fce, 0xfb00, 0x7fcd, 0xfaf3, + 0x7fcc, 0xfae6, 0x7fcb, 0xfada, 0x7fca, 0xfacd, 0x7fc9, 0xfac1, + 0x7fc8, 0xfab4, 0x7fc7, 0xfaa8, 0x7fc6, 0xfa9b, 0x7fc5, 0xfa8f, + 0x7fc4, 0xfa82, 0x7fc3, 0xfa76, 0x7fc1, 0xfa69, 0x7fc0, 0xfa5d, + 0x7fbf, 0xfa50, 0x7fbe, 0xfa44, 0x7fbd, 0xfa37, 0x7fbc, 0xfa2b, + 0x7fbb, 0xfa1e, 0x7fb9, 0xfa12, 0x7fb8, 0xfa05, 0x7fb7, 0xf9f9, + 0x7fb6, 0xf9ec, 0x7fb5, 0xf9e0, 0x7fb4, 0xf9d3, 0x7fb2, 0xf9c7, + 0x7fb1, 0xf9ba, 0x7fb0, 0xf9ae, 0x7faf, 0xf9a1, 0x7fad, 0xf995, + 0x7fac, 0xf988, 0x7fab, 0xf97c, 0x7faa, 0xf96f, 0x7fa8, 0xf963, + 0x7fa7, 0xf956, 0x7fa6, 0xf94a, 0x7fa4, 0xf93d, 0x7fa3, 0xf931, + 0x7fa2, 0xf924, 0x7fa0, 0xf918, 0x7f9f, 0xf90b, 0x7f9e, 0xf8ff, + 0x7f9c, 0xf8f2, 0x7f9b, 0xf8e6, 0x7f99, 0xf8d9, 0x7f98, 0xf8cd, + 0x7f97, 0xf8c0, 0x7f95, 0xf8b4, 0x7f94, 0xf8a7, 0x7f92, 0xf89b, + 0x7f91, 0xf88e, 0x7f8f, 0xf882, 0x7f8e, 0xf875, 0x7f8c, 0xf869, + 0x7f8b, 0xf85c, 0x7f89, 0xf850, 0x7f88, 0xf843, 0x7f86, 0xf837, + 0x7f85, 0xf82a, 0x7f83, 0xf81e, 0x7f82, 0xf811, 0x7f80, 0xf805, + 0x7f7f, 0xf7f9, 0x7f7d, 0xf7ec, 0x7f7b, 0xf7e0, 0x7f7a, 0xf7d3, + 0x7f78, 0xf7c7, 0x7f77, 0xf7ba, 0x7f75, 0xf7ae, 0x7f73, 0xf7a1, + 0x7f72, 0xf795, 0x7f70, 0xf788, 0x7f6e, 0xf77c, 0x7f6d, 0xf76f, + 0x7f6b, 0xf763, 0x7f69, 0xf757, 0x7f68, 0xf74a, 0x7f66, 0xf73e, + 0x7f64, 0xf731, 0x7f62, 0xf725, 0x7f61, 0xf718, 0x7f5f, 0xf70c, + 0x7f5d, 0xf6ff, 0x7f5b, 0xf6f3, 0x7f5a, 0xf6e7, 0x7f58, 0xf6da, + 0x7f56, 0xf6ce, 0x7f54, 0xf6c1, 0x7f52, 0xf6b5, 0x7f51, 0xf6a8, + 0x7f4f, 0xf69c, 0x7f4d, 0xf690, 0x7f4b, 0xf683, 0x7f49, 0xf677, + 0x7f47, 0xf66a, 0x7f45, 0xf65e, 0x7f43, 0xf651, 0x7f42, 0xf645, + 0x7f40, 0xf639, 0x7f3e, 0xf62c, 0x7f3c, 0xf620, 0x7f3a, 0xf613, + 0x7f38, 0xf607, 0x7f36, 0xf5fa, 0x7f34, 0xf5ee, 0x7f32, 0xf5e2, + 0x7f30, 0xf5d5, 0x7f2e, 0xf5c9, 0x7f2c, 0xf5bc, 0x7f2a, 0xf5b0, + 0x7f28, 0xf5a4, 0x7f26, 0xf597, 0x7f24, 0xf58b, 0x7f22, 0xf57e, + 0x7f20, 0xf572, 0x7f1e, 0xf566, 0x7f1c, 0xf559, 0x7f19, 0xf54d, + 0x7f17, 0xf540, 0x7f15, 0xf534, 0x7f13, 0xf528, 0x7f11, 0xf51b, + 0x7f0f, 0xf50f, 0x7f0d, 0xf503, 0x7f0a, 0xf4f6, 0x7f08, 0xf4ea, + 0x7f06, 0xf4dd, 0x7f04, 0xf4d1, 0x7f02, 0xf4c5, 0x7f00, 0xf4b8, + 0x7efd, 0xf4ac, 0x7efb, 0xf4a0, 0x7ef9, 0xf493, 0x7ef7, 0xf487, + 0x7ef4, 0xf47b, 0x7ef2, 0xf46e, 0x7ef0, 0xf462, 0x7eed, 0xf455, + 0x7eeb, 0xf449, 0x7ee9, 0xf43d, 0x7ee7, 0xf430, 0x7ee4, 0xf424, + 0x7ee2, 0xf418, 0x7ee0, 0xf40b, 0x7edd, 0xf3ff, 0x7edb, 0xf3f3, + 0x7ed8, 0xf3e6, 0x7ed6, 0xf3da, 0x7ed4, 0xf3ce, 0x7ed1, 0xf3c1, + 0x7ecf, 0xf3b5, 0x7ecc, 0xf3a9, 0x7eca, 0xf39c, 0x7ec8, 0xf390, + 0x7ec5, 0xf384, 0x7ec3, 0xf377, 0x7ec0, 0xf36b, 0x7ebe, 0xf35f, + 0x7ebb, 0xf352, 0x7eb9, 0xf346, 0x7eb6, 0xf33a, 0x7eb4, 0xf32d, + 0x7eb1, 0xf321, 0x7eaf, 0xf315, 0x7eac, 0xf308, 0x7eaa, 0xf2fc, + 0x7ea7, 0xf2f0, 0x7ea5, 0xf2e4, 0x7ea2, 0xf2d7, 0x7e9f, 0xf2cb, + 0x7e9d, 0xf2bf, 0x7e9a, 0xf2b2, 0x7e98, 0xf2a6, 0x7e95, 0xf29a, + 0x7e92, 0xf28e, 0x7e90, 0xf281, 0x7e8d, 0xf275, 0x7e8a, 0xf269, + 0x7e88, 0xf25c, 0x7e85, 0xf250, 0x7e82, 0xf244, 0x7e80, 0xf238, + 0x7e7d, 0xf22b, 0x7e7a, 0xf21f, 0x7e77, 0xf213, 0x7e75, 0xf207, + 0x7e72, 0xf1fa, 0x7e6f, 0xf1ee, 0x7e6c, 0xf1e2, 0x7e6a, 0xf1d5, + 0x7e67, 0xf1c9, 0x7e64, 0xf1bd, 0x7e61, 0xf1b1, 0x7e5e, 0xf1a4, + 0x7e5c, 0xf198, 0x7e59, 0xf18c, 0x7e56, 0xf180, 0x7e53, 0xf174, + 0x7e50, 0xf167, 0x7e4d, 0xf15b, 0x7e4a, 0xf14f, 0x7e48, 0xf143, + 0x7e45, 0xf136, 0x7e42, 0xf12a, 0x7e3f, 0xf11e, 0x7e3c, 0xf112, + 0x7e39, 0xf105, 0x7e36, 0xf0f9, 0x7e33, 0xf0ed, 0x7e30, 0xf0e1, + 0x7e2d, 0xf0d5, 0x7e2a, 0xf0c8, 0x7e27, 0xf0bc, 0x7e24, 0xf0b0, + 0x7e21, 0xf0a4, 0x7e1e, 0xf098, 0x7e1b, 0xf08b, 0x7e18, 0xf07f, + 0x7e15, 0xf073, 0x7e12, 0xf067, 0x7e0f, 0xf05b, 0x7e0c, 0xf04e, + 0x7e09, 0xf042, 0x7e06, 0xf036, 0x7e03, 0xf02a, 0x7dff, 0xf01e, + 0x7dfc, 0xf012, 0x7df9, 0xf005, 0x7df6, 0xeff9, 0x7df3, 0xefed, + 0x7df0, 0xefe1, 0x7ded, 0xefd5, 0x7de9, 0xefc9, 0x7de6, 0xefbc, + 0x7de3, 0xefb0, 0x7de0, 0xefa4, 0x7ddd, 0xef98, 0x7dd9, 0xef8c, + 0x7dd6, 0xef80, 0x7dd3, 0xef74, 0x7dd0, 0xef67, 0x7dcc, 0xef5b, + 0x7dc9, 0xef4f, 0x7dc6, 0xef43, 0x7dc2, 0xef37, 0x7dbf, 0xef2b, + 0x7dbc, 0xef1f, 0x7db9, 0xef13, 0x7db5, 0xef06, 0x7db2, 0xeefa, + 0x7daf, 0xeeee, 0x7dab, 0xeee2, 0x7da8, 0xeed6, 0x7da4, 0xeeca, + 0x7da1, 0xeebe, 0x7d9e, 0xeeb2, 0x7d9a, 0xeea6, 0x7d97, 0xee99, + 0x7d93, 0xee8d, 0x7d90, 0xee81, 0x7d8d, 0xee75, 0x7d89, 0xee69, + 0x7d86, 0xee5d, 0x7d82, 0xee51, 0x7d7f, 0xee45, 0x7d7b, 0xee39, + 0x7d78, 0xee2d, 0x7d74, 0xee21, 0x7d71, 0xee15, 0x7d6d, 0xee09, + 0x7d6a, 0xedfc, 0x7d66, 0xedf0, 0x7d63, 0xede4, 0x7d5f, 0xedd8, + 0x7d5b, 0xedcc, 0x7d58, 0xedc0, 0x7d54, 0xedb4, 0x7d51, 0xeda8, + 0x7d4d, 0xed9c, 0x7d49, 0xed90, 0x7d46, 0xed84, 0x7d42, 0xed78, + 0x7d3f, 0xed6c, 0x7d3b, 0xed60, 0x7d37, 0xed54, 0x7d34, 0xed48, + 0x7d30, 0xed3c, 0x7d2c, 0xed30, 0x7d28, 0xed24, 0x7d25, 0xed18, + 0x7d21, 0xed0c, 0x7d1d, 0xed00, 0x7d1a, 0xecf4, 0x7d16, 0xece8, + 0x7d12, 0xecdc, 0x7d0e, 0xecd0, 0x7d0b, 0xecc4, 0x7d07, 0xecb8, + 0x7d03, 0xecac, 0x7cff, 0xeca0, 0x7cfb, 0xec94, 0x7cf8, 0xec88, + 0x7cf4, 0xec7c, 0x7cf0, 0xec70, 0x7cec, 0xec64, 0x7ce8, 0xec58, + 0x7ce4, 0xec4c, 0x7ce0, 0xec40, 0x7cdd, 0xec34, 0x7cd9, 0xec28, + 0x7cd5, 0xec1c, 0x7cd1, 0xec10, 0x7ccd, 0xec05, 0x7cc9, 0xebf9, + 0x7cc5, 0xebed, 0x7cc1, 0xebe1, 0x7cbd, 0xebd5, 0x7cb9, 0xebc9, + 0x7cb5, 0xebbd, 0x7cb1, 0xebb1, 0x7cad, 0xeba5, 0x7ca9, 0xeb99, + 0x7ca5, 0xeb8d, 0x7ca1, 0xeb81, 0x7c9d, 0xeb75, 0x7c99, 0xeb6a, + 0x7c95, 0xeb5e, 0x7c91, 0xeb52, 0x7c8d, 0xeb46, 0x7c89, 0xeb3a, + 0x7c85, 0xeb2e, 0x7c81, 0xeb22, 0x7c7d, 0xeb16, 0x7c79, 0xeb0a, + 0x7c74, 0xeaff, 0x7c70, 0xeaf3, 0x7c6c, 0xeae7, 0x7c68, 0xeadb, + 0x7c64, 0xeacf, 0x7c60, 0xeac3, 0x7c5b, 0xeab7, 0x7c57, 0xeaac, + 0x7c53, 0xeaa0, 0x7c4f, 0xea94, 0x7c4b, 0xea88, 0x7c46, 0xea7c, + 0x7c42, 0xea70, 0x7c3e, 0xea65, 0x7c3a, 0xea59, 0x7c36, 0xea4d, + 0x7c31, 0xea41, 0x7c2d, 0xea35, 0x7c29, 0xea29, 0x7c24, 0xea1e, + 0x7c20, 0xea12, 0x7c1c, 0xea06, 0x7c17, 0xe9fa, 0x7c13, 0xe9ee, + 0x7c0f, 0xe9e3, 0x7c0a, 0xe9d7, 0x7c06, 0xe9cb, 0x7c02, 0xe9bf, + 0x7bfd, 0xe9b4, 0x7bf9, 0xe9a8, 0x7bf5, 0xe99c, 0x7bf0, 0xe990, + 0x7bec, 0xe984, 0x7be7, 0xe979, 0x7be3, 0xe96d, 0x7bde, 0xe961, + 0x7bda, 0xe955, 0x7bd6, 0xe94a, 0x7bd1, 0xe93e, 0x7bcd, 0xe932, + 0x7bc8, 0xe926, 0x7bc4, 0xe91b, 0x7bbf, 0xe90f, 0x7bbb, 0xe903, + 0x7bb6, 0xe8f7, 0x7bb2, 0xe8ec, 0x7bad, 0xe8e0, 0x7ba9, 0xe8d4, + 0x7ba4, 0xe8c9, 0x7b9f, 0xe8bd, 0x7b9b, 0xe8b1, 0x7b96, 0xe8a5, + 0x7b92, 0xe89a, 0x7b8d, 0xe88e, 0x7b88, 0xe882, 0x7b84, 0xe877, + 0x7b7f, 0xe86b, 0x7b7b, 0xe85f, 0x7b76, 0xe854, 0x7b71, 0xe848, + 0x7b6d, 0xe83c, 0x7b68, 0xe831, 0x7b63, 0xe825, 0x7b5f, 0xe819, + 0x7b5a, 0xe80e, 0x7b55, 0xe802, 0x7b50, 0xe7f6, 0x7b4c, 0xe7eb, + 0x7b47, 0xe7df, 0x7b42, 0xe7d3, 0x7b3e, 0xe7c8, 0x7b39, 0xe7bc, + 0x7b34, 0xe7b1, 0x7b2f, 0xe7a5, 0x7b2a, 0xe799, 0x7b26, 0xe78e, + 0x7b21, 0xe782, 0x7b1c, 0xe777, 0x7b17, 0xe76b, 0x7b12, 0xe75f, + 0x7b0e, 0xe754, 0x7b09, 0xe748, 0x7b04, 0xe73d, 0x7aff, 0xe731, + 0x7afa, 0xe725, 0x7af5, 0xe71a, 0x7af0, 0xe70e, 0x7aeb, 0xe703, + 0x7ae6, 0xe6f7, 0x7ae2, 0xe6ec, 0x7add, 0xe6e0, 0x7ad8, 0xe6d4, + 0x7ad3, 0xe6c9, 0x7ace, 0xe6bd, 0x7ac9, 0xe6b2, 0x7ac4, 0xe6a6, + 0x7abf, 0xe69b, 0x7aba, 0xe68f, 0x7ab5, 0xe684, 0x7ab0, 0xe678, + 0x7aab, 0xe66d, 0x7aa6, 0xe661, 0x7aa1, 0xe656, 0x7a9c, 0xe64a, + 0x7a97, 0xe63f, 0x7a92, 0xe633, 0x7a8d, 0xe628, 0x7a88, 0xe61c, + 0x7a82, 0xe611, 0x7a7d, 0xe605, 0x7a78, 0xe5fa, 0x7a73, 0xe5ee, + 0x7a6e, 0xe5e3, 0x7a69, 0xe5d7, 0x7a64, 0xe5cc, 0x7a5f, 0xe5c0, + 0x7a59, 0xe5b5, 0x7a54, 0xe5a9, 0x7a4f, 0xe59e, 0x7a4a, 0xe592, + 0x7a45, 0xe587, 0x7a3f, 0xe57c, 0x7a3a, 0xe570, 0x7a35, 0xe565, + 0x7a30, 0xe559, 0x7a2b, 0xe54e, 0x7a25, 0xe542, 0x7a20, 0xe537, + 0x7a1b, 0xe52c, 0x7a16, 0xe520, 0x7a10, 0xe515, 0x7a0b, 0xe509, + 0x7a06, 0xe4fe, 0x7a00, 0xe4f3, 0x79fb, 0xe4e7, 0x79f6, 0xe4dc, + 0x79f0, 0xe4d0, 0x79eb, 0xe4c5, 0x79e6, 0xe4ba, 0x79e0, 0xe4ae, + 0x79db, 0xe4a3, 0x79d6, 0xe498, 0x79d0, 0xe48c, 0x79cb, 0xe481, + 0x79c5, 0xe476, 0x79c0, 0xe46a, 0x79bb, 0xe45f, 0x79b5, 0xe454, + 0x79b0, 0xe448, 0x79aa, 0xe43d, 0x79a5, 0xe432, 0x799f, 0xe426, + 0x799a, 0xe41b, 0x7994, 0xe410, 0x798f, 0xe404, 0x7989, 0xe3f9, + 0x7984, 0xe3ee, 0x797e, 0xe3e2, 0x7979, 0xe3d7, 0x7973, 0xe3cc, + 0x796e, 0xe3c1, 0x7968, 0xe3b5, 0x7963, 0xe3aa, 0x795d, 0xe39f, + 0x7958, 0xe394, 0x7952, 0xe388, 0x794c, 0xe37d, 0x7947, 0xe372, + 0x7941, 0xe367, 0x793b, 0xe35b, 0x7936, 0xe350, 0x7930, 0xe345, + 0x792b, 0xe33a, 0x7925, 0xe32e, 0x791f, 0xe323, 0x791a, 0xe318, + 0x7914, 0xe30d, 0x790e, 0xe301, 0x7909, 0xe2f6, 0x7903, 0xe2eb, + 0x78fd, 0xe2e0, 0x78f7, 0xe2d5, 0x78f2, 0xe2ca, 0x78ec, 0xe2be, + 0x78e6, 0xe2b3, 0x78e0, 0xe2a8, 0x78db, 0xe29d, 0x78d5, 0xe292, + 0x78cf, 0xe287, 0x78c9, 0xe27b, 0x78c3, 0xe270, 0x78be, 0xe265, + 0x78b8, 0xe25a, 0x78b2, 0xe24f, 0x78ac, 0xe244, 0x78a6, 0xe239, + 0x78a1, 0xe22d, 0x789b, 0xe222, 0x7895, 0xe217, 0x788f, 0xe20c, + 0x7889, 0xe201, 0x7883, 0xe1f6, 0x787d, 0xe1eb, 0x7877, 0xe1e0, + 0x7871, 0xe1d5, 0x786b, 0xe1ca, 0x7866, 0xe1be, 0x7860, 0xe1b3, + 0x785a, 0xe1a8, 0x7854, 0xe19d, 0x784e, 0xe192, 0x7848, 0xe187, + 0x7842, 0xe17c, 0x783c, 0xe171, 0x7836, 0xe166, 0x7830, 0xe15b, + 0x782a, 0xe150, 0x7824, 0xe145, 0x781e, 0xe13a, 0x7818, 0xe12f, + 0x7812, 0xe124, 0x780b, 0xe119, 0x7805, 0xe10e, 0x77ff, 0xe103, + 0x77f9, 0xe0f8, 0x77f3, 0xe0ed, 0x77ed, 0xe0e2, 0x77e7, 0xe0d7, + 0x77e1, 0xe0cc, 0x77db, 0xe0c1, 0x77d5, 0xe0b6, 0x77ce, 0xe0ab, + 0x77c8, 0xe0a0, 0x77c2, 0xe095, 0x77bc, 0xe08a, 0x77b6, 0xe07f, + 0x77b0, 0xe074, 0x77a9, 0xe069, 0x77a3, 0xe05e, 0x779d, 0xe054, + 0x7797, 0xe049, 0x7790, 0xe03e, 0x778a, 0xe033, 0x7784, 0xe028, + 0x777e, 0xe01d, 0x7777, 0xe012, 0x7771, 0xe007, 0x776b, 0xdffc, + 0x7765, 0xdff1, 0x775e, 0xdfe7, 0x7758, 0xdfdc, 0x7752, 0xdfd1, + 0x774b, 0xdfc6, 0x7745, 0xdfbb, 0x773f, 0xdfb0, 0x7738, 0xdfa5, + 0x7732, 0xdf9b, 0x772c, 0xdf90, 0x7725, 0xdf85, 0x771f, 0xdf7a, + 0x7718, 0xdf6f, 0x7712, 0xdf65, 0x770c, 0xdf5a, 0x7705, 0xdf4f, + 0x76ff, 0xdf44, 0x76f8, 0xdf39, 0x76f2, 0xdf2f, 0x76eb, 0xdf24, + 0x76e5, 0xdf19, 0x76df, 0xdf0e, 0x76d8, 0xdf03, 0x76d2, 0xdef9, + 0x76cb, 0xdeee, 0x76c5, 0xdee3, 0x76be, 0xded8, 0x76b8, 0xdece, + 0x76b1, 0xdec3, 0x76ab, 0xdeb8, 0x76a4, 0xdead, 0x769d, 0xdea3, + 0x7697, 0xde98, 0x7690, 0xde8d, 0x768a, 0xde83, 0x7683, 0xde78, + 0x767d, 0xde6d, 0x7676, 0xde62, 0x766f, 0xde58, 0x7669, 0xde4d, + 0x7662, 0xde42, 0x765c, 0xde38, 0x7655, 0xde2d, 0x764e, 0xde22, + 0x7648, 0xde18, 0x7641, 0xde0d, 0x763a, 0xde02, 0x7634, 0xddf8, + 0x762d, 0xdded, 0x7626, 0xdde2, 0x7620, 0xddd8, 0x7619, 0xddcd, + 0x7612, 0xddc3, 0x760b, 0xddb8, 0x7605, 0xddad, 0x75fe, 0xdda3, + 0x75f7, 0xdd98, 0x75f0, 0xdd8e, 0x75ea, 0xdd83, 0x75e3, 0xdd78, + 0x75dc, 0xdd6e, 0x75d5, 0xdd63, 0x75ce, 0xdd59, 0x75c8, 0xdd4e, + 0x75c1, 0xdd44, 0x75ba, 0xdd39, 0x75b3, 0xdd2e, 0x75ac, 0xdd24, + 0x75a5, 0xdd19, 0x759f, 0xdd0f, 0x7598, 0xdd04, 0x7591, 0xdcfa, + 0x758a, 0xdcef, 0x7583, 0xdce5, 0x757c, 0xdcda, 0x7575, 0xdcd0, + 0x756e, 0xdcc5, 0x7567, 0xdcbb, 0x7561, 0xdcb0, 0x755a, 0xdca6, + 0x7553, 0xdc9b, 0x754c, 0xdc91, 0x7545, 0xdc86, 0x753e, 0xdc7c, + 0x7537, 0xdc72, 0x7530, 0xdc67, 0x7529, 0xdc5d, 0x7522, 0xdc52, + 0x751b, 0xdc48, 0x7514, 0xdc3d, 0x750d, 0xdc33, 0x7506, 0xdc29, + 0x74ff, 0xdc1e, 0x74f8, 0xdc14, 0x74f1, 0xdc09, 0x74ea, 0xdbff, + 0x74e2, 0xdbf5, 0x74db, 0xdbea, 0x74d4, 0xdbe0, 0x74cd, 0xdbd5, + 0x74c6, 0xdbcb, 0x74bf, 0xdbc1, 0x74b8, 0xdbb6, 0x74b1, 0xdbac, + 0x74aa, 0xdba2, 0x74a2, 0xdb97, 0x749b, 0xdb8d, 0x7494, 0xdb83, + 0x748d, 0xdb78, 0x7486, 0xdb6e, 0x747f, 0xdb64, 0x7477, 0xdb59, + 0x7470, 0xdb4f, 0x7469, 0xdb45, 0x7462, 0xdb3b, 0x745b, 0xdb30, + 0x7453, 0xdb26, 0x744c, 0xdb1c, 0x7445, 0xdb11, 0x743e, 0xdb07, + 0x7436, 0xdafd, 0x742f, 0xdaf3, 0x7428, 0xdae8, 0x7420, 0xdade, + 0x7419, 0xdad4, 0x7412, 0xdaca, 0x740b, 0xdabf, 0x7403, 0xdab5, + 0x73fc, 0xdaab, 0x73f5, 0xdaa1, 0x73ed, 0xda97, 0x73e6, 0xda8c, + 0x73df, 0xda82, 0x73d7, 0xda78, 0x73d0, 0xda6e, 0x73c8, 0xda64, + 0x73c1, 0xda5a, 0x73ba, 0xda4f, 0x73b2, 0xda45, 0x73ab, 0xda3b, + 0x73a3, 0xda31, 0x739c, 0xda27, 0x7395, 0xda1d, 0x738d, 0xda13, + 0x7386, 0xda08, 0x737e, 0xd9fe, 0x7377, 0xd9f4, 0x736f, 0xd9ea, + 0x7368, 0xd9e0, 0x7360, 0xd9d6, 0x7359, 0xd9cc, 0x7351, 0xd9c2, + 0x734a, 0xd9b8, 0x7342, 0xd9ae, 0x733b, 0xd9a4, 0x7333, 0xd99a, + 0x732c, 0xd98f, 0x7324, 0xd985, 0x731d, 0xd97b, 0x7315, 0xd971, + 0x730d, 0xd967, 0x7306, 0xd95d, 0x72fe, 0xd953, 0x72f7, 0xd949, + 0x72ef, 0xd93f, 0x72e7, 0xd935, 0x72e0, 0xd92b, 0x72d8, 0xd921, + 0x72d0, 0xd917, 0x72c9, 0xd90d, 0x72c1, 0xd903, 0x72ba, 0xd8f9, + 0x72b2, 0xd8ef, 0x72aa, 0xd8e6, 0x72a3, 0xd8dc, 0x729b, 0xd8d2, + 0x7293, 0xd8c8, 0x728b, 0xd8be, 0x7284, 0xd8b4, 0x727c, 0xd8aa, + 0x7274, 0xd8a0, 0x726d, 0xd896, 0x7265, 0xd88c, 0x725d, 0xd882, + 0x7255, 0xd878, 0x724e, 0xd86f, 0x7246, 0xd865, 0x723e, 0xd85b, + 0x7236, 0xd851, 0x722e, 0xd847, 0x7227, 0xd83d, 0x721f, 0xd833, + 0x7217, 0xd82a, 0x720f, 0xd820, 0x7207, 0xd816, 0x71ff, 0xd80c, + 0x71f8, 0xd802, 0x71f0, 0xd7f8, 0x71e8, 0xd7ef, 0x71e0, 0xd7e5, + 0x71d8, 0xd7db, 0x71d0, 0xd7d1, 0x71c8, 0xd7c8, 0x71c0, 0xd7be, + 0x71b9, 0xd7b4, 0x71b1, 0xd7aa, 0x71a9, 0xd7a0, 0x71a1, 0xd797, + 0x7199, 0xd78d, 0x7191, 0xd783, 0x7189, 0xd77a, 0x7181, 0xd770, + 0x7179, 0xd766, 0x7171, 0xd75c, 0x7169, 0xd753, 0x7161, 0xd749, + 0x7159, 0xd73f, 0x7151, 0xd736, 0x7149, 0xd72c, 0x7141, 0xd722, + 0x7139, 0xd719, 0x7131, 0xd70f, 0x7129, 0xd705, 0x7121, 0xd6fc, + 0x7119, 0xd6f2, 0x7111, 0xd6e8, 0x7109, 0xd6df, 0x7101, 0xd6d5, + 0x70f9, 0xd6cb, 0x70f0, 0xd6c2, 0x70e8, 0xd6b8, 0x70e0, 0xd6af, + 0x70d8, 0xd6a5, 0x70d0, 0xd69b, 0x70c8, 0xd692, 0x70c0, 0xd688, + 0x70b8, 0xd67f, 0x70af, 0xd675, 0x70a7, 0xd66c, 0x709f, 0xd662, + 0x7097, 0xd659, 0x708f, 0xd64f, 0x7087, 0xd645, 0x707e, 0xd63c, + 0x7076, 0xd632, 0x706e, 0xd629, 0x7066, 0xd61f, 0x705d, 0xd616, + 0x7055, 0xd60c, 0x704d, 0xd603, 0x7045, 0xd5f9, 0x703c, 0xd5f0, + 0x7034, 0xd5e6, 0x702c, 0xd5dd, 0x7024, 0xd5d4, 0x701b, 0xd5ca, + 0x7013, 0xd5c1, 0x700b, 0xd5b7, 0x7002, 0xd5ae, 0x6ffa, 0xd5a4, + 0x6ff2, 0xd59b, 0x6fea, 0xd592, 0x6fe1, 0xd588, 0x6fd9, 0xd57f, + 0x6fd0, 0xd575, 0x6fc8, 0xd56c, 0x6fc0, 0xd563, 0x6fb7, 0xd559, + 0x6faf, 0xd550, 0x6fa7, 0xd547, 0x6f9e, 0xd53d, 0x6f96, 0xd534, + 0x6f8d, 0xd52a, 0x6f85, 0xd521, 0x6f7d, 0xd518, 0x6f74, 0xd50e, + 0x6f6c, 0xd505, 0x6f63, 0xd4fc, 0x6f5b, 0xd4f3, 0x6f52, 0xd4e9, + 0x6f4a, 0xd4e0, 0x6f41, 0xd4d7, 0x6f39, 0xd4cd, 0x6f30, 0xd4c4, + 0x6f28, 0xd4bb, 0x6f20, 0xd4b2, 0x6f17, 0xd4a8, 0x6f0e, 0xd49f, + 0x6f06, 0xd496, 0x6efd, 0xd48d, 0x6ef5, 0xd483, 0x6eec, 0xd47a, + 0x6ee4, 0xd471, 0x6edb, 0xd468, 0x6ed3, 0xd45f, 0x6eca, 0xd455, + 0x6ec2, 0xd44c, 0x6eb9, 0xd443, 0x6eb0, 0xd43a, 0x6ea8, 0xd431, + 0x6e9f, 0xd428, 0x6e97, 0xd41e, 0x6e8e, 0xd415, 0x6e85, 0xd40c, + 0x6e7d, 0xd403, 0x6e74, 0xd3fa, 0x6e6b, 0xd3f1, 0x6e63, 0xd3e8, + 0x6e5a, 0xd3df, 0x6e51, 0xd3d5, 0x6e49, 0xd3cc, 0x6e40, 0xd3c3, + 0x6e37, 0xd3ba, 0x6e2f, 0xd3b1, 0x6e26, 0xd3a8, 0x6e1d, 0xd39f, + 0x6e15, 0xd396, 0x6e0c, 0xd38d, 0x6e03, 0xd384, 0x6dfa, 0xd37b, + 0x6df2, 0xd372, 0x6de9, 0xd369, 0x6de0, 0xd360, 0x6dd7, 0xd357, + 0x6dcf, 0xd34e, 0x6dc6, 0xd345, 0x6dbd, 0xd33c, 0x6db4, 0xd333, + 0x6dab, 0xd32a, 0x6da3, 0xd321, 0x6d9a, 0xd318, 0x6d91, 0xd30f, + 0x6d88, 0xd306, 0x6d7f, 0xd2fd, 0x6d76, 0xd2f4, 0x6d6e, 0xd2eb, + 0x6d65, 0xd2e2, 0x6d5c, 0xd2d9, 0x6d53, 0xd2d1, 0x6d4a, 0xd2c8, + 0x6d41, 0xd2bf, 0x6d38, 0xd2b6, 0x6d2f, 0xd2ad, 0x6d27, 0xd2a4, + 0x6d1e, 0xd29b, 0x6d15, 0xd292, 0x6d0c, 0xd28a, 0x6d03, 0xd281, + 0x6cfa, 0xd278, 0x6cf1, 0xd26f, 0x6ce8, 0xd266, 0x6cdf, 0xd25d, + 0x6cd6, 0xd255, 0x6ccd, 0xd24c, 0x6cc4, 0xd243, 0x6cbb, 0xd23a, + 0x6cb2, 0xd231, 0x6ca9, 0xd229, 0x6ca0, 0xd220, 0x6c97, 0xd217, + 0x6c8e, 0xd20e, 0x6c85, 0xd206, 0x6c7c, 0xd1fd, 0x6c73, 0xd1f4, + 0x6c6a, 0xd1eb, 0x6c61, 0xd1e3, 0x6c58, 0xd1da, 0x6c4f, 0xd1d1, + 0x6c46, 0xd1c9, 0x6c3d, 0xd1c0, 0x6c34, 0xd1b7, 0x6c2b, 0xd1af, + 0x6c21, 0xd1a6, 0x6c18, 0xd19d, 0x6c0f, 0xd195, 0x6c06, 0xd18c, + 0x6bfd, 0xd183, 0x6bf4, 0xd17b, 0x6beb, 0xd172, 0x6be2, 0xd169, + 0x6bd8, 0xd161, 0x6bcf, 0xd158, 0x6bc6, 0xd150, 0x6bbd, 0xd147, + 0x6bb4, 0xd13e, 0x6bab, 0xd136, 0x6ba1, 0xd12d, 0x6b98, 0xd125, + 0x6b8f, 0xd11c, 0x6b86, 0xd114, 0x6b7d, 0xd10b, 0x6b73, 0xd103, + 0x6b6a, 0xd0fa, 0x6b61, 0xd0f2, 0x6b58, 0xd0e9, 0x6b4e, 0xd0e0, + 0x6b45, 0xd0d8, 0x6b3c, 0xd0d0, 0x6b33, 0xd0c7, 0x6b29, 0xd0bf, + 0x6b20, 0xd0b6, 0x6b17, 0xd0ae, 0x6b0d, 0xd0a5, 0x6b04, 0xd09d, + 0x6afb, 0xd094, 0x6af2, 0xd08c, 0x6ae8, 0xd083, 0x6adf, 0xd07b, + 0x6ad6, 0xd073, 0x6acc, 0xd06a, 0x6ac3, 0xd062, 0x6ab9, 0xd059, + 0x6ab0, 0xd051, 0x6aa7, 0xd049, 0x6a9d, 0xd040, 0x6a94, 0xd038, + 0x6a8b, 0xd030, 0x6a81, 0xd027, 0x6a78, 0xd01f, 0x6a6e, 0xd016, + 0x6a65, 0xd00e, 0x6a5c, 0xd006, 0x6a52, 0xcffe, 0x6a49, 0xcff5, + 0x6a3f, 0xcfed, 0x6a36, 0xcfe5, 0x6a2c, 0xcfdc, 0x6a23, 0xcfd4, + 0x6a1a, 0xcfcc, 0x6a10, 0xcfc4, 0x6a07, 0xcfbb, 0x69fd, 0xcfb3, + 0x69f4, 0xcfab, 0x69ea, 0xcfa3, 0x69e1, 0xcf9a, 0x69d7, 0xcf92, + 0x69ce, 0xcf8a, 0x69c4, 0xcf82, 0x69bb, 0xcf79, 0x69b1, 0xcf71, + 0x69a7, 0xcf69, 0x699e, 0xcf61, 0x6994, 0xcf59, 0x698b, 0xcf51, + 0x6981, 0xcf48, 0x6978, 0xcf40, 0x696e, 0xcf38, 0x6965, 0xcf30, + 0x695b, 0xcf28, 0x6951, 0xcf20, 0x6948, 0xcf18, 0x693e, 0xcf10, + 0x6935, 0xcf07, 0x692b, 0xceff, 0x6921, 0xcef7, 0x6918, 0xceef, + 0x690e, 0xcee7, 0x6904, 0xcedf, 0x68fb, 0xced7, 0x68f1, 0xcecf, + 0x68e7, 0xcec7, 0x68de, 0xcebf, 0x68d4, 0xceb7, 0x68ca, 0xceaf, + 0x68c1, 0xcea7, 0x68b7, 0xce9f, 0x68ad, 0xce97, 0x68a4, 0xce8f, + 0x689a, 0xce87, 0x6890, 0xce7f, 0x6886, 0xce77, 0x687d, 0xce6f, + 0x6873, 0xce67, 0x6869, 0xce5f, 0x6860, 0xce57, 0x6856, 0xce4f, + 0x684c, 0xce47, 0x6842, 0xce40, 0x6838, 0xce38, 0x682f, 0xce30, + 0x6825, 0xce28, 0x681b, 0xce20, 0x6811, 0xce18, 0x6808, 0xce10, + 0x67fe, 0xce08, 0x67f4, 0xce01, 0x67ea, 0xcdf9, 0x67e0, 0xcdf1, + 0x67d6, 0xcde9, 0x67cd, 0xcde1, 0x67c3, 0xcdd9, 0x67b9, 0xcdd2, + 0x67af, 0xcdca, 0x67a5, 0xcdc2, 0x679b, 0xcdba, 0x6791, 0xcdb2, + 0x6788, 0xcdab, 0x677e, 0xcda3, 0x6774, 0xcd9b, 0x676a, 0xcd93, + 0x6760, 0xcd8c, 0x6756, 0xcd84, 0x674c, 0xcd7c, 0x6742, 0xcd75, + 0x6738, 0xcd6d, 0x672e, 0xcd65, 0x6724, 0xcd5d, 0x671a, 0xcd56, + 0x6711, 0xcd4e, 0x6707, 0xcd46, 0x66fd, 0xcd3f, 0x66f3, 0xcd37, + 0x66e9, 0xcd30, 0x66df, 0xcd28, 0x66d5, 0xcd20, 0x66cb, 0xcd19, + 0x66c1, 0xcd11, 0x66b7, 0xcd09, 0x66ad, 0xcd02, 0x66a3, 0xccfa, + 0x6699, 0xccf3, 0x668f, 0xcceb, 0x6685, 0xcce3, 0x667b, 0xccdc, + 0x6671, 0xccd4, 0x6666, 0xcccd, 0x665c, 0xccc5, 0x6652, 0xccbe, + 0x6648, 0xccb6, 0x663e, 0xccaf, 0x6634, 0xcca7, 0x662a, 0xcca0, + 0x6620, 0xcc98, 0x6616, 0xcc91, 0x660c, 0xcc89, 0x6602, 0xcc82, + 0x65f8, 0xcc7a, 0x65ed, 0xcc73, 0x65e3, 0xcc6b, 0x65d9, 0xcc64, + 0x65cf, 0xcc5d, 0x65c5, 0xcc55, 0x65bb, 0xcc4e, 0x65b1, 0xcc46, + 0x65a6, 0xcc3f, 0x659c, 0xcc38, 0x6592, 0xcc30, 0x6588, 0xcc29, + 0x657e, 0xcc21, 0x6574, 0xcc1a, 0x6569, 0xcc13, 0x655f, 0xcc0b, + 0x6555, 0xcc04, 0x654b, 0xcbfd, 0x6541, 0xcbf5, 0x6536, 0xcbee, + 0x652c, 0xcbe7, 0x6522, 0xcbe0, 0x6518, 0xcbd8, 0x650d, 0xcbd1, + 0x6503, 0xcbca, 0x64f9, 0xcbc2, 0x64ef, 0xcbbb, 0x64e4, 0xcbb4, + 0x64da, 0xcbad, 0x64d0, 0xcba5, 0x64c5, 0xcb9e, 0x64bb, 0xcb97, + 0x64b1, 0xcb90, 0x64a7, 0xcb89, 0x649c, 0xcb81, 0x6492, 0xcb7a, + 0x6488, 0xcb73, 0x647d, 0xcb6c, 0x6473, 0xcb65, 0x6469, 0xcb5e, + 0x645e, 0xcb56, 0x6454, 0xcb4f, 0x644a, 0xcb48, 0x643f, 0xcb41, + 0x6435, 0xcb3a, 0x642b, 0xcb33, 0x6420, 0xcb2c, 0x6416, 0xcb25, + 0x640b, 0xcb1e, 0x6401, 0xcb16, 0x63f7, 0xcb0f, 0x63ec, 0xcb08, + 0x63e2, 0xcb01, 0x63d7, 0xcafa, 0x63cd, 0xcaf3, 0x63c3, 0xcaec, + 0x63b8, 0xcae5, 0x63ae, 0xcade, 0x63a3, 0xcad7, 0x6399, 0xcad0, + 0x638e, 0xcac9, 0x6384, 0xcac2, 0x637a, 0xcabb, 0x636f, 0xcab4, + 0x6365, 0xcaad, 0x635a, 0xcaa6, 0x6350, 0xca9f, 0x6345, 0xca99, + 0x633b, 0xca92, 0x6330, 0xca8b, 0x6326, 0xca84, 0x631b, 0xca7d, + 0x6311, 0xca76, 0x6306, 0xca6f, 0x62fc, 0xca68, 0x62f1, 0xca61, + 0x62e7, 0xca5b, 0x62dc, 0xca54, 0x62d2, 0xca4d, 0x62c7, 0xca46, + 0x62bc, 0xca3f, 0x62b2, 0xca38, 0x62a7, 0xca32, 0x629d, 0xca2b, + 0x6292, 0xca24, 0x6288, 0xca1d, 0x627d, 0xca16, 0x6272, 0xca10, + 0x6268, 0xca09, 0x625d, 0xca02, 0x6253, 0xc9fb, 0x6248, 0xc9f5, + 0x623d, 0xc9ee, 0x6233, 0xc9e7, 0x6228, 0xc9e0, 0x621e, 0xc9da, + 0x6213, 0xc9d3, 0x6208, 0xc9cc, 0x61fe, 0xc9c6, 0x61f3, 0xc9bf, + 0x61e8, 0xc9b8, 0x61de, 0xc9b2, 0x61d3, 0xc9ab, 0x61c8, 0xc9a4, + 0x61be, 0xc99e, 0x61b3, 0xc997, 0x61a8, 0xc991, 0x619e, 0xc98a, + 0x6193, 0xc983, 0x6188, 0xc97d, 0x617d, 0xc976, 0x6173, 0xc970, + 0x6168, 0xc969, 0x615d, 0xc963, 0x6153, 0xc95c, 0x6148, 0xc955, + 0x613d, 0xc94f, 0x6132, 0xc948, 0x6128, 0xc942, 0x611d, 0xc93b, + 0x6112, 0xc935, 0x6107, 0xc92e, 0x60fd, 0xc928, 0x60f2, 0xc921, + 0x60e7, 0xc91b, 0x60dc, 0xc915, 0x60d1, 0xc90e, 0x60c7, 0xc908, + 0x60bc, 0xc901, 0x60b1, 0xc8fb, 0x60a6, 0xc8f4, 0x609b, 0xc8ee, + 0x6091, 0xc8e8, 0x6086, 0xc8e1, 0x607b, 0xc8db, 0x6070, 0xc8d4, + 0x6065, 0xc8ce, 0x605b, 0xc8c8, 0x6050, 0xc8c1, 0x6045, 0xc8bb, + 0x603a, 0xc8b5, 0x602f, 0xc8ae, 0x6024, 0xc8a8, 0x6019, 0xc8a2, + 0x600f, 0xc89b, 0x6004, 0xc895, 0x5ff9, 0xc88f, 0x5fee, 0xc889, + 0x5fe3, 0xc882, 0x5fd8, 0xc87c, 0x5fcd, 0xc876, 0x5fc2, 0xc870, + 0x5fb7, 0xc869, 0x5fac, 0xc863, 0x5fa2, 0xc85d, 0x5f97, 0xc857, + 0x5f8c, 0xc850, 0x5f81, 0xc84a, 0x5f76, 0xc844, 0x5f6b, 0xc83e, + 0x5f60, 0xc838, 0x5f55, 0xc832, 0x5f4a, 0xc82b, 0x5f3f, 0xc825, + 0x5f34, 0xc81f, 0x5f29, 0xc819, 0x5f1e, 0xc813, 0x5f13, 0xc80d, + 0x5f08, 0xc807, 0x5efd, 0xc801, 0x5ef2, 0xc7fb, 0x5ee7, 0xc7f5, + 0x5edc, 0xc7ee, 0x5ed1, 0xc7e8, 0x5ec6, 0xc7e2, 0x5ebb, 0xc7dc, + 0x5eb0, 0xc7d6, 0x5ea5, 0xc7d0, 0x5e9a, 0xc7ca, 0x5e8f, 0xc7c4, + 0x5e84, 0xc7be, 0x5e79, 0xc7b8, 0x5e6e, 0xc7b2, 0x5e63, 0xc7ac, + 0x5e58, 0xc7a6, 0x5e4d, 0xc7a0, 0x5e42, 0xc79a, 0x5e36, 0xc795, + 0x5e2b, 0xc78f, 0x5e20, 0xc789, 0x5e15, 0xc783, 0x5e0a, 0xc77d, + 0x5dff, 0xc777, 0x5df4, 0xc771, 0x5de9, 0xc76b, 0x5dde, 0xc765, + 0x5dd3, 0xc75f, 0x5dc7, 0xc75a, 0x5dbc, 0xc754, 0x5db1, 0xc74e, + 0x5da6, 0xc748, 0x5d9b, 0xc742, 0x5d90, 0xc73d, 0x5d85, 0xc737, + 0x5d79, 0xc731, 0x5d6e, 0xc72b, 0x5d63, 0xc725, 0x5d58, 0xc720, + 0x5d4d, 0xc71a, 0x5d42, 0xc714, 0x5d36, 0xc70e, 0x5d2b, 0xc709, + 0x5d20, 0xc703, 0x5d15, 0xc6fd, 0x5d0a, 0xc6f7, 0x5cff, 0xc6f2, + 0x5cf3, 0xc6ec, 0x5ce8, 0xc6e6, 0x5cdd, 0xc6e1, 0x5cd2, 0xc6db, + 0x5cc6, 0xc6d5, 0x5cbb, 0xc6d0, 0x5cb0, 0xc6ca, 0x5ca5, 0xc6c5, + 0x5c99, 0xc6bf, 0x5c8e, 0xc6b9, 0x5c83, 0xc6b4, 0x5c78, 0xc6ae, + 0x5c6c, 0xc6a8, 0x5c61, 0xc6a3, 0x5c56, 0xc69d, 0x5c4b, 0xc698, + 0x5c3f, 0xc692, 0x5c34, 0xc68d, 0x5c29, 0xc687, 0x5c1e, 0xc682, + 0x5c12, 0xc67c, 0x5c07, 0xc677, 0x5bfc, 0xc671, 0x5bf0, 0xc66c, + 0x5be5, 0xc666, 0x5bda, 0xc661, 0x5bce, 0xc65b, 0x5bc3, 0xc656, + 0x5bb8, 0xc650, 0x5bac, 0xc64b, 0x5ba1, 0xc645, 0x5b96, 0xc640, + 0x5b8a, 0xc63b, 0x5b7f, 0xc635, 0x5b74, 0xc630, 0x5b68, 0xc62a, + 0x5b5d, 0xc625, 0x5b52, 0xc620, 0x5b46, 0xc61a, 0x5b3b, 0xc615, + 0x5b30, 0xc610, 0x5b24, 0xc60a, 0x5b19, 0xc605, 0x5b0d, 0xc600, + 0x5b02, 0xc5fa, 0x5af7, 0xc5f5, 0x5aeb, 0xc5f0, 0x5ae0, 0xc5ea, + 0x5ad4, 0xc5e5, 0x5ac9, 0xc5e0, 0x5abe, 0xc5db, 0x5ab2, 0xc5d5, + 0x5aa7, 0xc5d0, 0x5a9b, 0xc5cb, 0x5a90, 0xc5c6, 0x5a84, 0xc5c1, + 0x5a79, 0xc5bb, 0x5a6e, 0xc5b6, 0x5a62, 0xc5b1, 0x5a57, 0xc5ac, + 0x5a4b, 0xc5a7, 0x5a40, 0xc5a1, 0x5a34, 0xc59c, 0x5a29, 0xc597, + 0x5a1d, 0xc592, 0x5a12, 0xc58d, 0x5a06, 0xc588, 0x59fb, 0xc583, + 0x59ef, 0xc57e, 0x59e4, 0xc578, 0x59d8, 0xc573, 0x59cd, 0xc56e, + 0x59c1, 0xc569, 0x59b6, 0xc564, 0x59aa, 0xc55f, 0x599f, 0xc55a, + 0x5993, 0xc555, 0x5988, 0xc550, 0x597c, 0xc54b, 0x5971, 0xc546, + 0x5965, 0xc541, 0x595a, 0xc53c, 0x594e, 0xc537, 0x5943, 0xc532, + 0x5937, 0xc52d, 0x592c, 0xc528, 0x5920, 0xc523, 0x5914, 0xc51e, + 0x5909, 0xc51a, 0x58fd, 0xc515, 0x58f2, 0xc510, 0x58e6, 0xc50b, + 0x58db, 0xc506, 0x58cf, 0xc501, 0x58c3, 0xc4fc, 0x58b8, 0xc4f7, + 0x58ac, 0xc4f2, 0x58a1, 0xc4ee, 0x5895, 0xc4e9, 0x5889, 0xc4e4, + 0x587e, 0xc4df, 0x5872, 0xc4da, 0x5867, 0xc4d6, 0x585b, 0xc4d1, + 0x584f, 0xc4cc, 0x5844, 0xc4c7, 0x5838, 0xc4c2, 0x582d, 0xc4be, + 0x5821, 0xc4b9, 0x5815, 0xc4b4, 0x580a, 0xc4b0, 0x57fe, 0xc4ab, + 0x57f2, 0xc4a6, 0x57e7, 0xc4a1, 0x57db, 0xc49d, 0x57cf, 0xc498, + 0x57c4, 0xc493, 0x57b8, 0xc48f, 0x57ac, 0xc48a, 0x57a1, 0xc485, + 0x5795, 0xc481, 0x5789, 0xc47c, 0x577e, 0xc478, 0x5772, 0xc473, + 0x5766, 0xc46e, 0x575b, 0xc46a, 0x574f, 0xc465, 0x5743, 0xc461, + 0x5737, 0xc45c, 0x572c, 0xc457, 0x5720, 0xc453, 0x5714, 0xc44e, + 0x5709, 0xc44a, 0x56fd, 0xc445, 0x56f1, 0xc441, 0x56e5, 0xc43c, + 0x56da, 0xc438, 0x56ce, 0xc433, 0x56c2, 0xc42f, 0x56b6, 0xc42a, + 0x56ab, 0xc426, 0x569f, 0xc422, 0x5693, 0xc41d, 0x5687, 0xc419, + 0x567c, 0xc414, 0x5670, 0xc410, 0x5664, 0xc40b, 0x5658, 0xc407, + 0x564c, 0xc403, 0x5641, 0xc3fe, 0x5635, 0xc3fa, 0x5629, 0xc3f6, + 0x561d, 0xc3f1, 0x5612, 0xc3ed, 0x5606, 0xc3e9, 0x55fa, 0xc3e4, + 0x55ee, 0xc3e0, 0x55e2, 0xc3dc, 0x55d7, 0xc3d7, 0x55cb, 0xc3d3, + 0x55bf, 0xc3cf, 0x55b3, 0xc3ca, 0x55a7, 0xc3c6, 0x559b, 0xc3c2, + 0x5590, 0xc3be, 0x5584, 0xc3ba, 0x5578, 0xc3b5, 0x556c, 0xc3b1, + 0x5560, 0xc3ad, 0x5554, 0xc3a9, 0x5549, 0xc3a5, 0x553d, 0xc3a0, + 0x5531, 0xc39c, 0x5525, 0xc398, 0x5519, 0xc394, 0x550d, 0xc390, + 0x5501, 0xc38c, 0x54f6, 0xc387, 0x54ea, 0xc383, 0x54de, 0xc37f, + 0x54d2, 0xc37b, 0x54c6, 0xc377, 0x54ba, 0xc373, 0x54ae, 0xc36f, + 0x54a2, 0xc36b, 0x5496, 0xc367, 0x548b, 0xc363, 0x547f, 0xc35f, + 0x5473, 0xc35b, 0x5467, 0xc357, 0x545b, 0xc353, 0x544f, 0xc34f, + 0x5443, 0xc34b, 0x5437, 0xc347, 0x542b, 0xc343, 0x541f, 0xc33f, + 0x5413, 0xc33b, 0x5407, 0xc337, 0x53fb, 0xc333, 0x53f0, 0xc32f, + 0x53e4, 0xc32b, 0x53d8, 0xc327, 0x53cc, 0xc323, 0x53c0, 0xc320, + 0x53b4, 0xc31c, 0x53a8, 0xc318, 0x539c, 0xc314, 0x5390, 0xc310, + 0x5384, 0xc30c, 0x5378, 0xc308, 0x536c, 0xc305, 0x5360, 0xc301, + 0x5354, 0xc2fd, 0x5348, 0xc2f9, 0x533c, 0xc2f5, 0x5330, 0xc2f2, + 0x5324, 0xc2ee, 0x5318, 0xc2ea, 0x530c, 0xc2e6, 0x5300, 0xc2e3, + 0x52f4, 0xc2df, 0x52e8, 0xc2db, 0x52dc, 0xc2d8, 0x52d0, 0xc2d4, + 0x52c4, 0xc2d0, 0x52b8, 0xc2cc, 0x52ac, 0xc2c9, 0x52a0, 0xc2c5, + 0x5294, 0xc2c1, 0x5288, 0xc2be, 0x527c, 0xc2ba, 0x5270, 0xc2b7, + 0x5264, 0xc2b3, 0x5258, 0xc2af, 0x524c, 0xc2ac, 0x5240, 0xc2a8, + 0x5234, 0xc2a5, 0x5228, 0xc2a1, 0x521c, 0xc29d, 0x5210, 0xc29a, + 0x5204, 0xc296, 0x51f7, 0xc293, 0x51eb, 0xc28f, 0x51df, 0xc28c, + 0x51d3, 0xc288, 0x51c7, 0xc285, 0x51bb, 0xc281, 0x51af, 0xc27e, + 0x51a3, 0xc27a, 0x5197, 0xc277, 0x518b, 0xc273, 0x517f, 0xc270, + 0x5173, 0xc26d, 0x5167, 0xc269, 0x515a, 0xc266, 0x514e, 0xc262, + 0x5142, 0xc25f, 0x5136, 0xc25c, 0x512a, 0xc258, 0x511e, 0xc255, + 0x5112, 0xc251, 0x5106, 0xc24e, 0x50fa, 0xc24b, 0x50ed, 0xc247, + 0x50e1, 0xc244, 0x50d5, 0xc241, 0x50c9, 0xc23e, 0x50bd, 0xc23a, + 0x50b1, 0xc237, 0x50a5, 0xc234, 0x5099, 0xc230, 0x508c, 0xc22d, + 0x5080, 0xc22a, 0x5074, 0xc227, 0x5068, 0xc223, 0x505c, 0xc220, + 0x5050, 0xc21d, 0x5044, 0xc21a, 0x5037, 0xc217, 0x502b, 0xc213, + 0x501f, 0xc210, 0x5013, 0xc20d, 0x5007, 0xc20a, 0x4ffb, 0xc207, + 0x4fee, 0xc204, 0x4fe2, 0xc201, 0x4fd6, 0xc1fd, 0x4fca, 0xc1fa, + 0x4fbe, 0xc1f7, 0x4fb2, 0xc1f4, 0x4fa5, 0xc1f1, 0x4f99, 0xc1ee, + 0x4f8d, 0xc1eb, 0x4f81, 0xc1e8, 0x4f75, 0xc1e5, 0x4f68, 0xc1e2, + 0x4f5c, 0xc1df, 0x4f50, 0xc1dc, 0x4f44, 0xc1d9, 0x4f38, 0xc1d6, + 0x4f2b, 0xc1d3, 0x4f1f, 0xc1d0, 0x4f13, 0xc1cd, 0x4f07, 0xc1ca, + 0x4efb, 0xc1c7, 0x4eee, 0xc1c4, 0x4ee2, 0xc1c1, 0x4ed6, 0xc1be, + 0x4eca, 0xc1bb, 0x4ebd, 0xc1b8, 0x4eb1, 0xc1b6, 0x4ea5, 0xc1b3, + 0x4e99, 0xc1b0, 0x4e8c, 0xc1ad, 0x4e80, 0xc1aa, 0x4e74, 0xc1a7, + 0x4e68, 0xc1a4, 0x4e5c, 0xc1a2, 0x4e4f, 0xc19f, 0x4e43, 0xc19c, + 0x4e37, 0xc199, 0x4e2b, 0xc196, 0x4e1e, 0xc194, 0x4e12, 0xc191, + 0x4e06, 0xc18e, 0x4df9, 0xc18b, 0x4ded, 0xc189, 0x4de1, 0xc186, + 0x4dd5, 0xc183, 0x4dc8, 0xc180, 0x4dbc, 0xc17e, 0x4db0, 0xc17b, + 0x4da4, 0xc178, 0x4d97, 0xc176, 0x4d8b, 0xc173, 0x4d7f, 0xc170, + 0x4d72, 0xc16e, 0x4d66, 0xc16b, 0x4d5a, 0xc168, 0x4d4e, 0xc166, + 0x4d41, 0xc163, 0x4d35, 0xc161, 0x4d29, 0xc15e, 0x4d1c, 0xc15b, + 0x4d10, 0xc159, 0x4d04, 0xc156, 0x4cf8, 0xc154, 0x4ceb, 0xc151, + 0x4cdf, 0xc14f, 0x4cd3, 0xc14c, 0x4cc6, 0xc14a, 0x4cba, 0xc147, + 0x4cae, 0xc145, 0x4ca1, 0xc142, 0x4c95, 0xc140, 0x4c89, 0xc13d, + 0x4c7c, 0xc13b, 0x4c70, 0xc138, 0x4c64, 0xc136, 0x4c57, 0xc134, + 0x4c4b, 0xc131, 0x4c3f, 0xc12f, 0x4c32, 0xc12c, 0x4c26, 0xc12a, + 0x4c1a, 0xc128, 0x4c0d, 0xc125, 0x4c01, 0xc123, 0x4bf5, 0xc120, + 0x4be8, 0xc11e, 0x4bdc, 0xc11c, 0x4bd0, 0xc119, 0x4bc3, 0xc117, + 0x4bb7, 0xc115, 0x4bab, 0xc113, 0x4b9e, 0xc110, 0x4b92, 0xc10e, + 0x4b85, 0xc10c, 0x4b79, 0xc109, 0x4b6d, 0xc107, 0x4b60, 0xc105, + 0x4b54, 0xc103, 0x4b48, 0xc100, 0x4b3b, 0xc0fe, 0x4b2f, 0xc0fc, + 0x4b23, 0xc0fa, 0x4b16, 0xc0f8, 0x4b0a, 0xc0f6, 0x4afd, 0xc0f3, + 0x4af1, 0xc0f1, 0x4ae5, 0xc0ef, 0x4ad8, 0xc0ed, 0x4acc, 0xc0eb, + 0x4ac0, 0xc0e9, 0x4ab3, 0xc0e7, 0x4aa7, 0xc0e4, 0x4a9a, 0xc0e2, + 0x4a8e, 0xc0e0, 0x4a82, 0xc0de, 0x4a75, 0xc0dc, 0x4a69, 0xc0da, + 0x4a5c, 0xc0d8, 0x4a50, 0xc0d6, 0x4a44, 0xc0d4, 0x4a37, 0xc0d2, + 0x4a2b, 0xc0d0, 0x4a1e, 0xc0ce, 0x4a12, 0xc0cc, 0x4a06, 0xc0ca, + 0x49f9, 0xc0c8, 0x49ed, 0xc0c6, 0x49e0, 0xc0c4, 0x49d4, 0xc0c2, + 0x49c7, 0xc0c0, 0x49bb, 0xc0be, 0x49af, 0xc0bd, 0x49a2, 0xc0bb, + 0x4996, 0xc0b9, 0x4989, 0xc0b7, 0x497d, 0xc0b5, 0x4970, 0xc0b3, + 0x4964, 0xc0b1, 0x4958, 0xc0af, 0x494b, 0xc0ae, 0x493f, 0xc0ac, + 0x4932, 0xc0aa, 0x4926, 0xc0a8, 0x4919, 0xc0a6, 0x490d, 0xc0a5, + 0x4901, 0xc0a3, 0x48f4, 0xc0a1, 0x48e8, 0xc09f, 0x48db, 0xc09e, + 0x48cf, 0xc09c, 0x48c2, 0xc09a, 0x48b6, 0xc098, 0x48a9, 0xc097, + 0x489d, 0xc095, 0x4891, 0xc093, 0x4884, 0xc092, 0x4878, 0xc090, + 0x486b, 0xc08e, 0x485f, 0xc08d, 0x4852, 0xc08b, 0x4846, 0xc089, + 0x4839, 0xc088, 0x482d, 0xc086, 0x4820, 0xc085, 0x4814, 0xc083, + 0x4807, 0xc081, 0x47fb, 0xc080, 0x47ef, 0xc07e, 0x47e2, 0xc07d, + 0x47d6, 0xc07b, 0x47c9, 0xc07a, 0x47bd, 0xc078, 0x47b0, 0xc077, + 0x47a4, 0xc075, 0x4797, 0xc074, 0x478b, 0xc072, 0x477e, 0xc071, + 0x4772, 0xc06f, 0x4765, 0xc06e, 0x4759, 0xc06c, 0x474c, 0xc06b, + 0x4740, 0xc069, 0x4733, 0xc068, 0x4727, 0xc067, 0x471a, 0xc065, + 0x470e, 0xc064, 0x4701, 0xc062, 0x46f5, 0xc061, 0x46e8, 0xc060, + 0x46dc, 0xc05e, 0x46cf, 0xc05d, 0x46c3, 0xc05c, 0x46b6, 0xc05a, + 0x46aa, 0xc059, 0x469d, 0xc058, 0x4691, 0xc056, 0x4684, 0xc055, + 0x4678, 0xc054, 0x466b, 0xc053, 0x465f, 0xc051, 0x4652, 0xc050, + 0x4646, 0xc04f, 0x4639, 0xc04e, 0x462d, 0xc04c, 0x4620, 0xc04b, + 0x4614, 0xc04a, 0x4607, 0xc049, 0x45fb, 0xc048, 0x45ee, 0xc047, + 0x45e2, 0xc045, 0x45d5, 0xc044, 0x45c9, 0xc043, 0x45bc, 0xc042, + 0x45b0, 0xc041, 0x45a3, 0xc040, 0x4597, 0xc03f, 0x458a, 0xc03d, + 0x457e, 0xc03c, 0x4571, 0xc03b, 0x4565, 0xc03a, 0x4558, 0xc039, + 0x454c, 0xc038, 0x453f, 0xc037, 0x4533, 0xc036, 0x4526, 0xc035, + 0x451a, 0xc034, 0x450d, 0xc033, 0x4500, 0xc032, 0x44f4, 0xc031, + 0x44e7, 0xc030, 0x44db, 0xc02f, 0x44ce, 0xc02e, 0x44c2, 0xc02d, + 0x44b5, 0xc02c, 0x44a9, 0xc02b, 0x449c, 0xc02b, 0x4490, 0xc02a, + 0x4483, 0xc029, 0x4477, 0xc028, 0x446a, 0xc027, 0x445e, 0xc026, + 0x4451, 0xc025, 0x4444, 0xc024, 0x4438, 0xc024, 0x442b, 0xc023, + 0x441f, 0xc022, 0x4412, 0xc021, 0x4406, 0xc020, 0x43f9, 0xc020, + 0x43ed, 0xc01f, 0x43e0, 0xc01e, 0x43d4, 0xc01d, 0x43c7, 0xc01d, + 0x43bb, 0xc01c, 0x43ae, 0xc01b, 0x43a1, 0xc01a, 0x4395, 0xc01a, + 0x4388, 0xc019, 0x437c, 0xc018, 0x436f, 0xc018, 0x4363, 0xc017, + 0x4356, 0xc016, 0x434a, 0xc016, 0x433d, 0xc015, 0x4330, 0xc014, + 0x4324, 0xc014, 0x4317, 0xc013, 0x430b, 0xc013, 0x42fe, 0xc012, + 0x42f2, 0xc011, 0x42e5, 0xc011, 0x42d9, 0xc010, 0x42cc, 0xc010, + 0x42c0, 0xc00f, 0x42b3, 0xc00f, 0x42a6, 0xc00e, 0x429a, 0xc00e, + 0x428d, 0xc00d, 0x4281, 0xc00d, 0x4274, 0xc00c, 0x4268, 0xc00c, + 0x425b, 0xc00b, 0x424e, 0xc00b, 0x4242, 0xc00a, 0x4235, 0xc00a, + 0x4229, 0xc009, 0x421c, 0xc009, 0x4210, 0xc009, 0x4203, 0xc008, + 0x41f7, 0xc008, 0x41ea, 0xc007, 0x41dd, 0xc007, 0x41d1, 0xc007, + 0x41c4, 0xc006, 0x41b8, 0xc006, 0x41ab, 0xc006, 0x419f, 0xc005, + 0x4192, 0xc005, 0x4186, 0xc005, 0x4179, 0xc004, 0x416c, 0xc004, + 0x4160, 0xc004, 0x4153, 0xc004, 0x4147, 0xc003, 0x413a, 0xc003, + 0x412e, 0xc003, 0x4121, 0xc003, 0x4114, 0xc002, 0x4108, 0xc002, + 0x40fb, 0xc002, 0x40ef, 0xc002, 0x40e2, 0xc002, 0x40d6, 0xc001, + 0x40c9, 0xc001, 0x40bc, 0xc001, 0x40b0, 0xc001, 0x40a3, 0xc001, + 0x4097, 0xc001, 0x408a, 0xc001, 0x407e, 0xc000, 0x4071, 0xc000, + 0x4065, 0xc000, 0x4058, 0xc000, 0x404b, 0xc000, 0x403f, 0xc000, + 0x4032, 0xc000, 0x4026, 0xc000, 0x4019, 0xc000, 0x400d, 0xc000, +}; + +/** +* @brief Initialization function for the Q15 RFFT/RIFFT. +* @param[in, out] *S points to an instance of the Q15 RFFT/RIFFT structure. +* @param[in] fftLenReal length of the FFT. +* @param[in] ifftFlagR flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported value. +* +* \par Description: +* \par +* The parameter fftLenReal Specifies length of RFFT/RIFFT Process. Supported FFT Lengths are 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192. +* \par +* The parameter ifftFlagR controls whether a forward or inverse transform is computed. +* Set(=1) ifftFlagR to calculate RIFFT, otherwise RFFT is calculated. +* \par +* The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. +* Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. +* \par +* This function also initializes Twiddle factor table. +*/ +arm_status arm_rfft_init_q15( + arm_rfft_instance_q15 * S, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialize the Real FFT length */ + S->fftLenReal = (uint16_t) fftLenReal; + + /* Initialize the Twiddle coefficientA pointer */ + S->pTwiddleAReal = (q15_t *) realCoefAQ15; + + /* Initialize the Twiddle coefficientB pointer */ + S->pTwiddleBReal = (q15_t *) realCoefBQ15; + + /* Initialize the Flag for selection of RFFT or RIFFT */ + S->ifftFlagR = (uint8_t) ifftFlagR; + + /* Initialize the Flag for calculation Bit reversal or not */ + S->bitReverseFlagR = (uint8_t) bitReverseFlag; + + /* Initialization of coef modifier depending on the FFT length */ + switch (S->fftLenReal) + { + case 8192u: + S->twidCoefRModifier = 1u; + S->pCfft = &arm_cfft_sR_q15_len4096; + break; + case 4096u: + S->twidCoefRModifier = 2u; + S->pCfft = &arm_cfft_sR_q15_len2048; + break; + case 2048u: + S->twidCoefRModifier = 4u; + S->pCfft = &arm_cfft_sR_q15_len1024; + break; + case 1024u: + S->twidCoefRModifier = 8u; + S->pCfft = &arm_cfft_sR_q15_len512; + break; + case 512u: + S->twidCoefRModifier = 16u; + S->pCfft = &arm_cfft_sR_q15_len256; + break; + case 256u: + S->twidCoefRModifier = 32u; + S->pCfft = &arm_cfft_sR_q15_len128; + break; + case 128u: + S->twidCoefRModifier = 64u; + S->pCfft = &arm_cfft_sR_q15_len64; + break; + case 64u: + S->twidCoefRModifier = 128u; + S->pCfft = &arm_cfft_sR_q15_len32; + break; + case 32u: + S->twidCoefRModifier = 256u; + S->pCfft = &arm_cfft_sR_q15_len16; + break; + default: + /* Reporting argument error if rfftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + /* return the status of RFFT Init function */ + return (status); +} + +/** +* @} end of RealFFT group +*/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_init_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_init_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,4285 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_rfft_init_q31.c +* +* Description: RFFT & RIFFT Q31 initialisation function +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "arm_common_tables.h" +#include "arm_const_structs.h" + +/** +* @ingroup groupTransforms +*/ + +/** +* @addtogroup RealFFT +* @{ +*/ + +/** +* \par +* Generation fixed-point realCoefAQ31 array in Q31 format: +* \par +* n = 4096 +*
for (i = 0; i < n; i++)    
+* {    
+*    pATable[2 * i] = 0.5 * (1.0 - sin (2 * PI / (double) (2 * n) * (double) i));    
+*    pATable[2 * i + 1] = 0.5 * (-1.0 * cos (2 * PI / (double) (2 * n) * (double) i));    
+* }
+* \par +* Convert to fixed point Q31 format +* round(pATable[i] * pow(2, 31)) +*/ + + +static const q31_t realCoefAQ31[8192] = { + 0x40000000, 0xc0000000, 0x3ff36f02, 0xc000013c, + 0x3fe6de05, 0xc00004ef, 0x3fda4d09, 0xc0000b1a, + 0x3fcdbc0f, 0xc00013bd, 0x3fc12b16, 0xc0001ed8, + 0x3fb49a1f, 0xc0002c6a, 0x3fa8092c, 0xc0003c74, + 0x3f9b783c, 0xc0004ef5, 0x3f8ee750, 0xc00063ee, + 0x3f825668, 0xc0007b5f, 0x3f75c585, 0xc0009547, + 0x3f6934a8, 0xc000b1a7, 0x3f5ca3d0, 0xc000d07e, + 0x3f5012fe, 0xc000f1ce, 0x3f438234, 0xc0011594, + 0x3f36f170, 0xc0013bd3, 0x3f2a60b4, 0xc0016489, + 0x3f1dd001, 0xc0018fb6, 0x3f113f56, 0xc001bd5c, + 0x3f04aeb5, 0xc001ed78, 0x3ef81e1d, 0xc002200d, + 0x3eeb8d8f, 0xc0025519, 0x3edefd0c, 0xc0028c9c, + 0x3ed26c94, 0xc002c697, 0x3ec5dc28, 0xc003030a, + 0x3eb94bc8, 0xc00341f4, 0x3eacbb74, 0xc0038356, + 0x3ea02b2e, 0xc003c72f, 0x3e939af5, 0xc0040d80, + 0x3e870aca, 0xc0045648, 0x3e7a7aae, 0xc004a188, + 0x3e6deaa1, 0xc004ef3f, 0x3e615aa3, 0xc0053f6e, + 0x3e54cab5, 0xc0059214, 0x3e483ad8, 0xc005e731, + 0x3e3bab0b, 0xc0063ec6, 0x3e2f1b50, 0xc00698d3, + 0x3e228ba7, 0xc006f556, 0x3e15fc11, 0xc0075452, + 0x3e096c8d, 0xc007b5c4, 0x3dfcdd1d, 0xc00819ae, + 0x3df04dc0, 0xc008800f, 0x3de3be78, 0xc008e8e8, + 0x3dd72f45, 0xc0095438, 0x3dcaa027, 0xc009c1ff, + 0x3dbe111e, 0xc00a323d, 0x3db1822c, 0xc00aa4f3, + 0x3da4f351, 0xc00b1a20, 0x3d98648d, 0xc00b91c4, + 0x3d8bd5e1, 0xc00c0be0, 0x3d7f474d, 0xc00c8872, + 0x3d72b8d2, 0xc00d077c, 0x3d662a70, 0xc00d88fd, + 0x3d599c28, 0xc00e0cf5, 0x3d4d0df9, 0xc00e9364, + 0x3d407fe6, 0xc00f1c4a, 0x3d33f1ed, 0xc00fa7a8, + 0x3d276410, 0xc010357c, 0x3d1ad650, 0xc010c5c7, + 0x3d0e48ab, 0xc011588a, 0x3d01bb24, 0xc011edc3, + 0x3cf52dbb, 0xc0128574, 0x3ce8a06f, 0xc0131f9b, + 0x3cdc1342, 0xc013bc39, 0x3ccf8634, 0xc0145b4e, + 0x3cc2f945, 0xc014fcda, 0x3cb66c77, 0xc015a0dd, + 0x3ca9dfc8, 0xc0164757, 0x3c9d533b, 0xc016f047, + 0x3c90c6cf, 0xc0179bae, 0x3c843a85, 0xc018498c, + 0x3c77ae5e, 0xc018f9e1, 0x3c6b2259, 0xc019acac, + 0x3c5e9678, 0xc01a61ee, 0x3c520aba, 0xc01b19a7, + 0x3c457f21, 0xc01bd3d6, 0x3c38f3ac, 0xc01c907c, + 0x3c2c685d, 0xc01d4f99, 0x3c1fdd34, 0xc01e112b, + 0x3c135231, 0xc01ed535, 0x3c06c754, 0xc01f9bb5, + 0x3bfa3c9f, 0xc02064ab, 0x3bedb212, 0xc0213018, + 0x3be127ac, 0xc021fdfb, 0x3bd49d70, 0xc022ce54, + 0x3bc8135c, 0xc023a124, 0x3bbb8973, 0xc024766a, + 0x3baeffb3, 0xc0254e27, 0x3ba2761e, 0xc0262859, + 0x3b95ecb4, 0xc0270502, 0x3b896375, 0xc027e421, + 0x3b7cda63, 0xc028c5b6, 0x3b70517d, 0xc029a9c1, + 0x3b63c8c4, 0xc02a9042, 0x3b574039, 0xc02b7939, + 0x3b4ab7db, 0xc02c64a6, 0x3b3e2fac, 0xc02d5289, + 0x3b31a7ac, 0xc02e42e2, 0x3b251fdc, 0xc02f35b1, + 0x3b18983b, 0xc0302af5, 0x3b0c10cb, 0xc03122b0, + 0x3aff898c, 0xc0321ce0, 0x3af3027e, 0xc0331986, + 0x3ae67ba2, 0xc03418a2, 0x3ad9f4f8, 0xc0351a33, + 0x3acd6e81, 0xc0361e3a, 0x3ac0e83d, 0xc03724b6, + 0x3ab4622d, 0xc0382da8, 0x3aa7dc52, 0xc0393910, + 0x3a9b56ab, 0xc03a46ed, 0x3a8ed139, 0xc03b573f, + 0x3a824bfd, 0xc03c6a07, 0x3a75c6f8, 0xc03d7f44, + 0x3a694229, 0xc03e96f6, 0x3a5cbd91, 0xc03fb11d, + 0x3a503930, 0xc040cdba, 0x3a43b508, 0xc041eccc, + 0x3a373119, 0xc0430e53, 0x3a2aad62, 0xc044324f, + 0x3a1e29e5, 0xc04558c0, 0x3a11a6a3, 0xc04681a6, + 0x3a05239a, 0xc047ad01, 0x39f8a0cd, 0xc048dad1, + 0x39ec1e3b, 0xc04a0b16, 0x39df9be6, 0xc04b3dcf, + 0x39d319cc, 0xc04c72fe, 0x39c697f0, 0xc04daaa1, + 0x39ba1651, 0xc04ee4b8, 0x39ad94f0, 0xc0502145, + 0x39a113cd, 0xc0516045, 0x399492ea, 0xc052a1bb, + 0x39881245, 0xc053e5a5, 0x397b91e1, 0xc0552c03, + 0x396f11bc, 0xc05674d6, 0x396291d9, 0xc057c01d, + 0x39561237, 0xc0590dd8, 0x394992d7, 0xc05a5e07, + 0x393d13b8, 0xc05bb0ab, 0x393094dd, 0xc05d05c3, + 0x39241645, 0xc05e5d4e, 0x391797f0, 0xc05fb74e, + 0x390b19e0, 0xc06113c2, 0x38fe9c15, 0xc06272aa, + 0x38f21e8e, 0xc063d405, 0x38e5a14d, 0xc06537d4, + 0x38d92452, 0xc0669e18, 0x38cca79e, 0xc06806ce, + 0x38c02b31, 0xc06971f9, 0x38b3af0c, 0xc06adf97, + 0x38a7332e, 0xc06c4fa8, 0x389ab799, 0xc06dc22e, + 0x388e3c4d, 0xc06f3726, 0x3881c14b, 0xc070ae92, + 0x38754692, 0xc0722871, 0x3868cc24, 0xc073a4c3, + 0x385c5201, 0xc0752389, 0x384fd829, 0xc076a4c2, + 0x38435e9d, 0xc078286e, 0x3836e55d, 0xc079ae8c, + 0x382a6c6a, 0xc07b371e, 0x381df3c5, 0xc07cc223, + 0x38117b6d, 0xc07e4f9b, 0x38050364, 0xc07fdf85, + 0x37f88ba9, 0xc08171e2, 0x37ec143e, 0xc08306b2, + 0x37df9d22, 0xc0849df4, 0x37d32657, 0xc08637a9, + 0x37c6afdc, 0xc087d3d0, 0x37ba39b3, 0xc089726a, + 0x37adc3db, 0xc08b1376, 0x37a14e55, 0xc08cb6f5, + 0x3794d922, 0xc08e5ce5, 0x37886442, 0xc0900548, + 0x377befb5, 0xc091b01d, 0x376f7b7d, 0xc0935d64, + 0x37630799, 0xc0950d1d, 0x3756940a, 0xc096bf48, + 0x374a20d0, 0xc09873e4, 0x373daded, 0xc09a2af3, + 0x37313b60, 0xc09be473, 0x3724c92a, 0xc09da065, + 0x3718574b, 0xc09f5ec8, 0x370be5c4, 0xc0a11f9d, + 0x36ff7496, 0xc0a2e2e3, 0x36f303c0, 0xc0a4a89b, + 0x36e69344, 0xc0a670c4, 0x36da2321, 0xc0a83b5e, + 0x36cdb359, 0xc0aa086a, 0x36c143ec, 0xc0abd7e6, + 0x36b4d4d9, 0xc0ada9d4, 0x36a86623, 0xc0af7e33, + 0x369bf7c9, 0xc0b15502, 0x368f89cb, 0xc0b32e42, + 0x36831c2b, 0xc0b509f3, 0x3676aee8, 0xc0b6e815, + 0x366a4203, 0xc0b8c8a7, 0x365dd57d, 0xc0baabaa, + 0x36516956, 0xc0bc911d, 0x3644fd8f, 0xc0be7901, + 0x36389228, 0xc0c06355, 0x362c2721, 0xc0c25019, + 0x361fbc7b, 0xc0c43f4d, 0x36135237, 0xc0c630f2, + 0x3606e854, 0xc0c82506, 0x35fa7ed4, 0xc0ca1b8a, + 0x35ee15b7, 0xc0cc147f, 0x35e1acfd, 0xc0ce0fe3, + 0x35d544a7, 0xc0d00db6, 0x35c8dcb6, 0xc0d20dfa, + 0x35bc7529, 0xc0d410ad, 0x35b00e02, 0xc0d615cf, + 0x35a3a740, 0xc0d81d61, 0x359740e5, 0xc0da2762, + 0x358adaf0, 0xc0dc33d2, 0x357e7563, 0xc0de42b2, + 0x3572103d, 0xc0e05401, 0x3565ab80, 0xc0e267be, + 0x3559472b, 0xc0e47deb, 0x354ce33f, 0xc0e69686, + 0x35407fbd, 0xc0e8b190, 0x35341ca5, 0xc0eacf09, + 0x3527b9f7, 0xc0eceef1, 0x351b57b5, 0xc0ef1147, + 0x350ef5de, 0xc0f1360b, 0x35029473, 0xc0f35d3e, + 0x34f63374, 0xc0f586df, 0x34e9d2e3, 0xc0f7b2ee, + 0x34dd72be, 0xc0f9e16b, 0x34d11308, 0xc0fc1257, + 0x34c4b3c0, 0xc0fe45b0, 0x34b854e7, 0xc1007b77, + 0x34abf67e, 0xc102b3ac, 0x349f9884, 0xc104ee4f, + 0x34933afa, 0xc1072b5f, 0x3486dde1, 0xc1096add, + 0x347a8139, 0xc10bacc8, 0x346e2504, 0xc10df120, + 0x3461c940, 0xc11037e6, 0x34556def, 0xc1128119, + 0x34491311, 0xc114ccb9, 0x343cb8a7, 0xc1171ac6, + 0x34305eb0, 0xc1196b3f, 0x3424052f, 0xc11bbe26, + 0x3417ac22, 0xc11e1379, 0x340b538b, 0xc1206b39, + 0x33fefb6a, 0xc122c566, 0x33f2a3bf, 0xc12521ff, + 0x33e64c8c, 0xc1278104, 0x33d9f5cf, 0xc129e276, + 0x33cd9f8b, 0xc12c4653, 0x33c149bf, 0xc12eac9d, + 0x33b4f46c, 0xc1311553, 0x33a89f92, 0xc1338075, + 0x339c4b32, 0xc135ee02, 0x338ff74d, 0xc1385dfb, + 0x3383a3e2, 0xc13ad060, 0x337750f2, 0xc13d4530, + 0x336afe7e, 0xc13fbc6c, 0x335eac86, 0xc1423613, + 0x33525b0b, 0xc144b225, 0x33460a0d, 0xc14730a3, + 0x3339b98d, 0xc149b18b, 0x332d698a, 0xc14c34df, + 0x33211a07, 0xc14eba9d, 0x3314cb02, 0xc15142c6, + 0x33087c7d, 0xc153cd5a, 0x32fc2e77, 0xc1565a58, + 0x32efe0f2, 0xc158e9c1, 0x32e393ef, 0xc15b7b94, + 0x32d7476c, 0xc15e0fd1, 0x32cafb6b, 0xc160a678, + 0x32beafed, 0xc1633f8a, 0x32b264f2, 0xc165db05, + 0x32a61a7a, 0xc16878eb, 0x3299d085, 0xc16b193a, + 0x328d8715, 0xc16dbbf3, 0x32813e2a, 0xc1706115, + 0x3274f5c3, 0xc17308a1, 0x3268ade3, 0xc175b296, + 0x325c6688, 0xc1785ef4, 0x32501fb5, 0xc17b0dbb, + 0x3243d968, 0xc17dbeec, 0x323793a3, 0xc1807285, + 0x322b4e66, 0xc1832888, 0x321f09b1, 0xc185e0f3, + 0x3212c585, 0xc1889bc6, 0x320681e3, 0xc18b5903, + 0x31fa3ecb, 0xc18e18a7, 0x31edfc3d, 0xc190dab4, + 0x31e1ba3a, 0xc1939f29, 0x31d578c2, 0xc1966606, + 0x31c937d6, 0xc1992f4c, 0x31bcf777, 0xc19bfaf9, + 0x31b0b7a4, 0xc19ec90d, 0x31a4785e, 0xc1a1998a, + 0x319839a6, 0xc1a46c6e, 0x318bfb7d, 0xc1a741b9, + 0x317fbde2, 0xc1aa196c, 0x317380d6, 0xc1acf386, + 0x31674459, 0xc1afd007, 0x315b086d, 0xc1b2aef0, + 0x314ecd11, 0xc1b5903f, 0x31429247, 0xc1b873f5, + 0x3136580d, 0xc1bb5a11, 0x312a1e66, 0xc1be4294, + 0x311de551, 0xc1c12d7e, 0x3111accf, 0xc1c41ace, + 0x310574e0, 0xc1c70a84, 0x30f93d86, 0xc1c9fca0, + 0x30ed06bf, 0xc1ccf122, 0x30e0d08d, 0xc1cfe80a, + 0x30d49af1, 0xc1d2e158, 0x30c865ea, 0xc1d5dd0c, + 0x30bc317a, 0xc1d8db25, 0x30affda0, 0xc1dbdba3, + 0x30a3ca5d, 0xc1dede87, 0x309797b2, 0xc1e1e3d0, + 0x308b659f, 0xc1e4eb7e, 0x307f3424, 0xc1e7f591, + 0x30730342, 0xc1eb0209, 0x3066d2fa, 0xc1ee10e5, + 0x305aa34c, 0xc1f12227, 0x304e7438, 0xc1f435cc, + 0x304245c0, 0xc1f74bd6, 0x303617e2, 0xc1fa6445, + 0x3029eaa1, 0xc1fd7f17, 0x301dbdfb, 0xc2009c4e, + 0x301191f3, 0xc203bbe8, 0x30056687, 0xc206dde6, + 0x2ff93bba, 0xc20a0248, 0x2fed118a, 0xc20d290d, + 0x2fe0e7f9, 0xc2105236, 0x2fd4bf08, 0xc2137dc2, + 0x2fc896b5, 0xc216abb1, 0x2fbc6f03, 0xc219dc03, + 0x2fb047f2, 0xc21d0eb8, 0x2fa42181, 0xc22043d0, + 0x2f97fbb2, 0xc2237b4b, 0x2f8bd685, 0xc226b528, + 0x2f7fb1fa, 0xc229f167, 0x2f738e12, 0xc22d3009, + 0x2f676ace, 0xc230710d, 0x2f5b482d, 0xc233b473, + 0x2f4f2630, 0xc236fa3b, 0x2f4304d8, 0xc23a4265, + 0x2f36e426, 0xc23d8cf1, 0x2f2ac419, 0xc240d9de, + 0x2f1ea4b2, 0xc244292c, 0x2f1285f2, 0xc2477adc, + 0x2f0667d9, 0xc24aceed, 0x2efa4a67, 0xc24e255e, + 0x2eee2d9d, 0xc2517e31, 0x2ee2117c, 0xc254d965, + 0x2ed5f604, 0xc25836f9, 0x2ec9db35, 0xc25b96ee, + 0x2ebdc110, 0xc25ef943, 0x2eb1a796, 0xc2625df8, + 0x2ea58ec6, 0xc265c50e, 0x2e9976a1, 0xc2692e83, + 0x2e8d5f29, 0xc26c9a58, 0x2e81485c, 0xc270088e, + 0x2e75323c, 0xc2737922, 0x2e691cc9, 0xc276ec16, + 0x2e5d0804, 0xc27a616a, 0x2e50f3ed, 0xc27dd91c, + 0x2e44e084, 0xc281532e, 0x2e38cdcb, 0xc284cf9f, + 0x2e2cbbc1, 0xc2884e6e, 0x2e20aa67, 0xc28bcf9c, + 0x2e1499bd, 0xc28f5329, 0x2e0889c4, 0xc292d914, + 0x2dfc7a7c, 0xc296615d, 0x2df06be6, 0xc299ec05, + 0x2de45e03, 0xc29d790a, 0x2dd850d2, 0xc2a1086d, + 0x2dcc4454, 0xc2a49a2e, 0x2dc0388a, 0xc2a82e4d, + 0x2db42d74, 0xc2abc4c9, 0x2da82313, 0xc2af5da2, + 0x2d9c1967, 0xc2b2f8d8, 0x2d901070, 0xc2b6966c, + 0x2d84082f, 0xc2ba365c, 0x2d7800a5, 0xc2bdd8a9, + 0x2d6bf9d1, 0xc2c17d52, 0x2d5ff3b5, 0xc2c52459, + 0x2d53ee51, 0xc2c8cdbb, 0x2d47e9a5, 0xc2cc7979, + 0x2d3be5b1, 0xc2d02794, 0x2d2fe277, 0xc2d3d80a, + 0x2d23dff7, 0xc2d78add, 0x2d17de31, 0xc2db400a, + 0x2d0bdd25, 0xc2def794, 0x2cffdcd4, 0xc2e2b178, + 0x2cf3dd3f, 0xc2e66db8, 0x2ce7de66, 0xc2ea2c53, + 0x2cdbe04a, 0xc2eded49, 0x2ccfe2ea, 0xc2f1b099, + 0x2cc3e648, 0xc2f57644, 0x2cb7ea63, 0xc2f93e4a, + 0x2cabef3d, 0xc2fd08a9, 0x2c9ff4d6, 0xc300d563, + 0x2c93fb2e, 0xc304a477, 0x2c880245, 0xc30875e5, + 0x2c7c0a1d, 0xc30c49ad, 0x2c7012b5, 0xc3101fce, + 0x2c641c0e, 0xc313f848, 0x2c582629, 0xc317d31c, + 0x2c4c3106, 0xc31bb049, 0x2c403ca5, 0xc31f8fcf, + 0x2c344908, 0xc32371ae, 0x2c28562d, 0xc32755e5, + 0x2c1c6417, 0xc32b3c75, 0x2c1072c4, 0xc32f255e, + 0x2c048237, 0xc333109e, 0x2bf8926f, 0xc336fe37, + 0x2beca36c, 0xc33aee27, 0x2be0b52f, 0xc33ee070, + 0x2bd4c7ba, 0xc342d510, 0x2bc8db0b, 0xc346cc07, + 0x2bbcef23, 0xc34ac556, 0x2bb10404, 0xc34ec0fc, + 0x2ba519ad, 0xc352bef9, 0x2b99301f, 0xc356bf4d, + 0x2b8d475b, 0xc35ac1f7, 0x2b815f60, 0xc35ec6f8, + 0x2b75782f, 0xc362ce50, 0x2b6991ca, 0xc366d7fd, + 0x2b5dac2f, 0xc36ae401, 0x2b51c760, 0xc36ef25b, + 0x2b45e35d, 0xc373030a, 0x2b3a0027, 0xc377160f, + 0x2b2e1dbe, 0xc37b2b6a, 0x2b223c22, 0xc37f4319, + 0x2b165b54, 0xc3835d1e, 0x2b0a7b54, 0xc3877978, + 0x2afe9c24, 0xc38b9827, 0x2af2bdc3, 0xc38fb92a, + 0x2ae6e031, 0xc393dc82, 0x2adb0370, 0xc398022f, + 0x2acf277f, 0xc39c2a2f, 0x2ac34c60, 0xc3a05484, + 0x2ab77212, 0xc3a4812c, 0x2aab9896, 0xc3a8b028, + 0x2a9fbfed, 0xc3ace178, 0x2a93e817, 0xc3b1151b, + 0x2a881114, 0xc3b54b11, 0x2a7c3ae5, 0xc3b9835a, + 0x2a70658a, 0xc3bdbdf6, 0x2a649105, 0xc3c1fae5, + 0x2a58bd54, 0xc3c63a26, 0x2a4cea79, 0xc3ca7bba, + 0x2a411874, 0xc3cebfa0, 0x2a354746, 0xc3d305d8, + 0x2a2976ef, 0xc3d74e62, 0x2a1da770, 0xc3db993e, + 0x2a11d8c8, 0xc3dfe66c, 0x2a060af9, 0xc3e435ea, + 0x29fa3e03, 0xc3e887bb, 0x29ee71e6, 0xc3ecdbdc, + 0x29e2a6a3, 0xc3f1324e, 0x29d6dc3b, 0xc3f58b10, + 0x29cb12ad, 0xc3f9e624, 0x29bf49fa, 0xc3fe4388, + 0x29b38223, 0xc402a33c, 0x29a7bb28, 0xc4070540, + 0x299bf509, 0xc40b6994, 0x29902fc7, 0xc40fd037, + 0x29846b63, 0xc414392b, 0x2978a7dd, 0xc418a46d, + 0x296ce535, 0xc41d11ff, 0x2961236c, 0xc42181e0, + 0x29556282, 0xc425f410, 0x2949a278, 0xc42a688f, + 0x293de34e, 0xc42edf5c, 0x29322505, 0xc4335877, + 0x2926679c, 0xc437d3e1, 0x291aab16, 0xc43c5199, + 0x290eef71, 0xc440d19e, 0x290334af, 0xc44553f2, + 0x28f77acf, 0xc449d892, 0x28ebc1d3, 0xc44e5f80, + 0x28e009ba, 0xc452e8bc, 0x28d45286, 0xc4577444, + 0x28c89c37, 0xc45c0219, 0x28bce6cd, 0xc460923b, + 0x28b13248, 0xc46524a9, 0x28a57ea9, 0xc469b963, + 0x2899cbf1, 0xc46e5069, 0x288e1a20, 0xc472e9bc, + 0x28826936, 0xc477855a, 0x2876b934, 0xc47c2344, + 0x286b0a1a, 0xc480c379, 0x285f5be9, 0xc48565f9, + 0x2853aea1, 0xc48a0ac4, 0x28480243, 0xc48eb1db, + 0x283c56cf, 0xc4935b3c, 0x2830ac45, 0xc49806e7, + 0x282502a7, 0xc49cb4dd, 0x281959f4, 0xc4a1651c, + 0x280db22d, 0xc4a617a6, 0x28020b52, 0xc4aacc7a, + 0x27f66564, 0xc4af8397, 0x27eac063, 0xc4b43cfd, + 0x27df1c50, 0xc4b8f8ad, 0x27d3792b, 0xc4bdb6a6, + 0x27c7d6f4, 0xc4c276e8, 0x27bc35ad, 0xc4c73972, + 0x27b09555, 0xc4cbfe45, 0x27a4f5ed, 0xc4d0c560, + 0x27995776, 0xc4d58ec3, 0x278db9ef, 0xc4da5a6f, + 0x27821d59, 0xc4df2862, 0x277681b6, 0xc4e3f89c, + 0x276ae704, 0xc4e8cb1e, 0x275f4d45, 0xc4ed9fe7, + 0x2753b479, 0xc4f276f7, 0x27481ca1, 0xc4f7504e, + 0x273c85bc, 0xc4fc2bec, 0x2730efcc, 0xc50109d0, + 0x27255ad1, 0xc505e9fb, 0x2719c6cb, 0xc50acc6b, + 0x270e33bb, 0xc50fb121, 0x2702a1a1, 0xc514981d, + 0x26f7107e, 0xc519815f, 0x26eb8052, 0xc51e6ce6, + 0x26dff11d, 0xc5235ab2, 0x26d462e1, 0xc5284ac3, + 0x26c8d59c, 0xc52d3d18, 0x26bd4951, 0xc53231b3, + 0x26b1bdff, 0xc5372891, 0x26a633a6, 0xc53c21b4, + 0x269aaa48, 0xc5411d1b, 0x268f21e5, 0xc5461ac6, + 0x26839a7c, 0xc54b1ab4, 0x26781410, 0xc5501ce5, + 0x266c8e9f, 0xc555215a, 0x26610a2a, 0xc55a2812, + 0x265586b3, 0xc55f310d, 0x264a0438, 0xc5643c4a, + 0x263e82bc, 0xc56949ca, 0x2633023e, 0xc56e598c, + 0x262782be, 0xc5736b90, 0x261c043d, 0xc5787fd6, + 0x261086bc, 0xc57d965d, 0x26050a3b, 0xc582af26, + 0x25f98ebb, 0xc587ca31, 0x25ee143b, 0xc58ce77c, + 0x25e29abc, 0xc5920708, 0x25d72240, 0xc59728d5, + 0x25cbaac5, 0xc59c4ce3, 0x25c0344d, 0xc5a17330, + 0x25b4bed8, 0xc5a69bbe, 0x25a94a67, 0xc5abc68c, + 0x259dd6f9, 0xc5b0f399, 0x25926490, 0xc5b622e6, + 0x2586f32c, 0xc5bb5472, 0x257b82cd, 0xc5c0883d, + 0x25701374, 0xc5c5be47, 0x2564a521, 0xc5caf690, + 0x255937d5, 0xc5d03118, 0x254dcb8f, 0xc5d56ddd, + 0x25426051, 0xc5daace1, 0x2536f61b, 0xc5dfee22, + 0x252b8cee, 0xc5e531a1, 0x252024c9, 0xc5ea775e, + 0x2514bdad, 0xc5efbf58, 0x2509579b, 0xc5f5098f, + 0x24fdf294, 0xc5fa5603, 0x24f28e96, 0xc5ffa4b3, + 0x24e72ba4, 0xc604f5a0, 0x24dbc9bd, 0xc60a48c9, + 0x24d068e2, 0xc60f9e2e, 0x24c50914, 0xc614f5cf, + 0x24b9aa52, 0xc61a4fac, 0x24ae4c9d, 0xc61fabc4, + 0x24a2eff6, 0xc6250a18, 0x2497945d, 0xc62a6aa6, + 0x248c39d3, 0xc62fcd6f, 0x2480e057, 0xc6353273, + 0x247587eb, 0xc63a99b1, 0x246a308f, 0xc6400329, + 0x245eda43, 0xc6456edb, 0x24538507, 0xc64adcc7, + 0x244830dd, 0xc6504ced, 0x243cddc4, 0xc655bf4c, + 0x24318bbe, 0xc65b33e4, 0x24263ac9, 0xc660aab5, + 0x241aeae8, 0xc66623be, 0x240f9c1a, 0xc66b9f01, + 0x24044e60, 0xc6711c7b, 0x23f901ba, 0xc6769c2e, + 0x23edb628, 0xc67c1e18, 0x23e26bac, 0xc681a23a, + 0x23d72245, 0xc6872894, 0x23cbd9f4, 0xc68cb124, + 0x23c092b9, 0xc6923bec, 0x23b54c95, 0xc697c8eb, + 0x23aa0788, 0xc69d5820, 0x239ec393, 0xc6a2e98b, + 0x239380b6, 0xc6a87d2d, 0x23883ef2, 0xc6ae1304, + 0x237cfe47, 0xc6b3ab12, 0x2371beb5, 0xc6b94554, + 0x2366803c, 0xc6bee1cd, 0x235b42df, 0xc6c4807a, + 0x2350069b, 0xc6ca215c, 0x2344cb73, 0xc6cfc472, + 0x23399167, 0xc6d569be, 0x232e5876, 0xc6db113d, + 0x232320a2, 0xc6e0baf0, 0x2317e9eb, 0xc6e666d7, + 0x230cb451, 0xc6ec14f2, 0x23017fd5, 0xc6f1c540, + 0x22f64c77, 0xc6f777c1, 0x22eb1a37, 0xc6fd2c75, + 0x22dfe917, 0xc702e35c, 0x22d4b916, 0xc7089c75, + 0x22c98a35, 0xc70e57c0, 0x22be5c74, 0xc714153e, + 0x22b32fd4, 0xc719d4ed, 0x22a80456, 0xc71f96ce, + 0x229cd9f8, 0xc7255ae0, 0x2291b0bd, 0xc72b2123, + 0x228688a4, 0xc730e997, 0x227b61af, 0xc736b43c, + 0x22703bdc, 0xc73c8111, 0x2265172e, 0xc7425016, + 0x2259f3a3, 0xc748214c, 0x224ed13d, 0xc74df4b1, + 0x2243affc, 0xc753ca46, 0x22388fe1, 0xc759a20a, + 0x222d70eb, 0xc75f7bfe, 0x2222531c, 0xc7655820, + 0x22173674, 0xc76b3671, 0x220c1af3, 0xc77116f0, + 0x22010099, 0xc776f99d, 0x21f5e768, 0xc77cde79, + 0x21eacf5f, 0xc782c582, 0x21dfb87f, 0xc788aeb9, + 0x21d4a2c8, 0xc78e9a1d, 0x21c98e3b, 0xc79487ae, + 0x21be7ad8, 0xc79a776c, 0x21b368a0, 0xc7a06957, + 0x21a85793, 0xc7a65d6e, 0x219d47b1, 0xc7ac53b1, + 0x219238fb, 0xc7b24c20, 0x21872b72, 0xc7b846ba, + 0x217c1f15, 0xc7be4381, 0x217113e5, 0xc7c44272, + 0x216609e3, 0xc7ca438f, 0x215b0110, 0xc7d046d6, + 0x214ff96a, 0xc7d64c47, 0x2144f2f3, 0xc7dc53e3, + 0x2139edac, 0xc7e25daa, 0x212ee995, 0xc7e8699a, + 0x2123e6ad, 0xc7ee77b3, 0x2118e4f6, 0xc7f487f6, + 0x210de470, 0xc7fa9a62, 0x2102e51c, 0xc800aef7, + 0x20f7e6f9, 0xc806c5b5, 0x20ecea09, 0xc80cde9b, + 0x20e1ee4b, 0xc812f9a9, 0x20d6f3c1, 0xc81916df, + 0x20cbfa6a, 0xc81f363d, 0x20c10247, 0xc82557c3, + 0x20b60b58, 0xc82b7b70, 0x20ab159e, 0xc831a143, + 0x20a0211a, 0xc837c93e, 0x20952dcb, 0xc83df35f, + 0x208a3bb2, 0xc8441fa6, 0x207f4acf, 0xc84a4e14, + 0x20745b24, 0xc8507ea7, 0x20696cb0, 0xc856b160, + 0x205e7f74, 0xc85ce63e, 0x2053936f, 0xc8631d42, + 0x2048a8a4, 0xc869566a, 0x203dbf11, 0xc86f91b7, + 0x2032d6b8, 0xc875cf28, 0x2027ef99, 0xc87c0ebd, + 0x201d09b4, 0xc8825077, 0x2012250a, 0xc8889454, + 0x2007419b, 0xc88eda54, 0x1ffc5f67, 0xc8952278, + 0x1ff17e70, 0xc89b6cbf, 0x1fe69eb4, 0xc8a1b928, + 0x1fdbc036, 0xc8a807b4, 0x1fd0e2f5, 0xc8ae5862, + 0x1fc606f1, 0xc8b4ab32, 0x1fbb2c2c, 0xc8bb0023, + 0x1fb052a5, 0xc8c15736, 0x1fa57a5d, 0xc8c7b06b, + 0x1f9aa354, 0xc8ce0bc0, 0x1f8fcd8b, 0xc8d46936, + 0x1f84f902, 0xc8dac8cd, 0x1f7a25ba, 0xc8e12a84, + 0x1f6f53b3, 0xc8e78e5b, 0x1f6482ed, 0xc8edf452, + 0x1f59b369, 0xc8f45c68, 0x1f4ee527, 0xc8fac69e, + 0x1f441828, 0xc90132f2, 0x1f394c6b, 0xc907a166, + 0x1f2e81f3, 0xc90e11f7, 0x1f23b8be, 0xc91484a8, + 0x1f18f0ce, 0xc91af976, 0x1f0e2a22, 0xc9217062, + 0x1f0364bc, 0xc927e96b, 0x1ef8a09b, 0xc92e6492, + 0x1eedddc0, 0xc934e1d6, 0x1ee31c2b, 0xc93b6137, + 0x1ed85bdd, 0xc941e2b4, 0x1ecd9cd7, 0xc948664d, + 0x1ec2df18, 0xc94eec03, 0x1eb822a1, 0xc95573d4, + 0x1ead6773, 0xc95bfdc1, 0x1ea2ad8d, 0xc96289c9, + 0x1e97f4f1, 0xc96917ec, 0x1e8d3d9e, 0xc96fa82a, + 0x1e828796, 0xc9763a83, 0x1e77d2d8, 0xc97ccef5, + 0x1e6d1f65, 0xc9836582, 0x1e626d3e, 0xc989fe29, + 0x1e57bc62, 0xc99098e9, 0x1e4d0cd2, 0xc99735c2, + 0x1e425e8f, 0xc99dd4b4, 0x1e37b199, 0xc9a475bf, + 0x1e2d05f1, 0xc9ab18e3, 0x1e225b96, 0xc9b1be1e, + 0x1e17b28a, 0xc9b86572, 0x1e0d0acc, 0xc9bf0edd, + 0x1e02645d, 0xc9c5ba60, 0x1df7bf3e, 0xc9cc67fa, + 0x1ded1b6e, 0xc9d317ab, 0x1de278ef, 0xc9d9c973, + 0x1dd7d7c1, 0xc9e07d51, 0x1dcd37e4, 0xc9e73346, + 0x1dc29958, 0xc9edeb50, 0x1db7fc1e, 0xc9f4a570, + 0x1dad6036, 0xc9fb61a5, 0x1da2c5a2, 0xca021fef, + 0x1d982c60, 0xca08e04f, 0x1d8d9472, 0xca0fa2c3, + 0x1d82fdd8, 0xca16674b, 0x1d786892, 0xca1d2de7, + 0x1d6dd4a2, 0xca23f698, 0x1d634206, 0xca2ac15b, + 0x1d58b0c0, 0xca318e32, 0x1d4e20d0, 0xca385d1d, + 0x1d439236, 0xca3f2e19, 0x1d3904f4, 0xca460129, + 0x1d2e7908, 0xca4cd64b, 0x1d23ee74, 0xca53ad7e, + 0x1d196538, 0xca5a86c4, 0x1d0edd55, 0xca61621b, + 0x1d0456ca, 0xca683f83, 0x1cf9d199, 0xca6f1efc, + 0x1cef4dc2, 0xca760086, 0x1ce4cb44, 0xca7ce420, + 0x1cda4a21, 0xca83c9ca, 0x1ccfca59, 0xca8ab184, + 0x1cc54bec, 0xca919b4e, 0x1cbacedb, 0xca988727, + 0x1cb05326, 0xca9f750f, 0x1ca5d8cd, 0xcaa66506, + 0x1c9b5fd2, 0xcaad570c, 0x1c90e834, 0xcab44b1f, + 0x1c8671f3, 0xcabb4141, 0x1c7bfd11, 0xcac23971, + 0x1c71898d, 0xcac933ae, 0x1c671768, 0xcad02ff8, + 0x1c5ca6a2, 0xcad72e4f, 0x1c52373c, 0xcade2eb3, + 0x1c47c936, 0xcae53123, 0x1c3d5c91, 0xcaec35a0, + 0x1c32f14d, 0xcaf33c28, 0x1c28876a, 0xcafa44bc, + 0x1c1e1ee9, 0xcb014f5b, 0x1c13b7c9, 0xcb085c05, + 0x1c09520d, 0xcb0f6aba, 0x1bfeedb3, 0xcb167b79, + 0x1bf48abd, 0xcb1d8e43, 0x1bea292b, 0xcb24a316, + 0x1bdfc8fc, 0xcb2bb9f4, 0x1bd56a32, 0xcb32d2da, + 0x1bcb0cce, 0xcb39edca, 0x1bc0b0ce, 0xcb410ac3, + 0x1bb65634, 0xcb4829c4, 0x1babfd01, 0xcb4f4acd, + 0x1ba1a534, 0xcb566ddf, 0x1b974ece, 0xcb5d92f8, + 0x1b8cf9cf, 0xcb64ba19, 0x1b82a638, 0xcb6be341, + 0x1b785409, 0xcb730e70, 0x1b6e0342, 0xcb7a3ba5, + 0x1b63b3e5, 0xcb816ae1, 0x1b5965f1, 0xcb889c23, + 0x1b4f1967, 0xcb8fcf6b, 0x1b44ce46, 0xcb9704b9, + 0x1b3a8491, 0xcb9e3c0b, 0x1b303c46, 0xcba57563, + 0x1b25f566, 0xcbacb0bf, 0x1b1baff2, 0xcbb3ee20, + 0x1b116beb, 0xcbbb2d85, 0x1b072950, 0xcbc26eee, + 0x1afce821, 0xcbc9b25a, 0x1af2a860, 0xcbd0f7ca, + 0x1ae86a0d, 0xcbd83f3d, 0x1ade2d28, 0xcbdf88b3, + 0x1ad3f1b1, 0xcbe6d42b, 0x1ac9b7a9, 0xcbee21a5, + 0x1abf7f11, 0xcbf57121, 0x1ab547e8, 0xcbfcc29f, + 0x1aab122f, 0xcc04161e, 0x1aa0dde7, 0xcc0b6b9e, + 0x1a96ab0f, 0xcc12c31f, 0x1a8c79a9, 0xcc1a1ca0, + 0x1a8249b4, 0xcc217822, 0x1a781b31, 0xcc28d5a3, + 0x1a6dee21, 0xcc303524, 0x1a63c284, 0xcc3796a5, + 0x1a599859, 0xcc3efa25, 0x1a4f6fa3, 0xcc465fa3, + 0x1a454860, 0xcc4dc720, 0x1a3b2292, 0xcc55309b, + 0x1a30fe38, 0xcc5c9c14, 0x1a26db54, 0xcc64098b, + 0x1a1cb9e5, 0xcc6b78ff, 0x1a1299ec, 0xcc72ea70, + 0x1a087b69, 0xcc7a5dde, 0x19fe5e5e, 0xcc81d349, + 0x19f442c9, 0xcc894aaf, 0x19ea28ac, 0xcc90c412, + 0x19e01006, 0xcc983f70, 0x19d5f8d9, 0xcc9fbcca, + 0x19cbe325, 0xcca73c1e, 0x19c1cee9, 0xccaebd6e, + 0x19b7bc27, 0xccb640b8, 0x19adaadf, 0xccbdc5fc, + 0x19a39b11, 0xccc54d3a, 0x19998cbe, 0xccccd671, + 0x198f7fe6, 0xccd461a2, 0x19857489, 0xccdbeecc, + 0x197b6aa8, 0xcce37def, 0x19716243, 0xcceb0f0a, + 0x19675b5a, 0xccf2a21d, 0x195d55ef, 0xccfa3729, + 0x19535201, 0xcd01ce2b, 0x19494f90, 0xcd096725, + 0x193f4e9e, 0xcd110216, 0x19354f2a, 0xcd189efe, + 0x192b5135, 0xcd203ddc, 0x192154bf, 0xcd27deb0, + 0x191759c9, 0xcd2f817b, 0x190d6053, 0xcd37263a, + 0x1903685d, 0xcd3eccef, 0x18f971e8, 0xcd467599, + 0x18ef7cf4, 0xcd4e2037, 0x18e58982, 0xcd55ccca, + 0x18db9792, 0xcd5d7b50, 0x18d1a724, 0xcd652bcb, + 0x18c7b838, 0xcd6cde39, 0x18bdcad0, 0xcd74929a, + 0x18b3deeb, 0xcd7c48ee, 0x18a9f48a, 0xcd840134, + 0x18a00bae, 0xcd8bbb6d, 0x18962456, 0xcd937798, + 0x188c3e83, 0xcd9b35b4, 0x18825a35, 0xcda2f5c2, + 0x1878776d, 0xcdaab7c0, 0x186e962b, 0xcdb27bb0, + 0x1864b670, 0xcdba4190, 0x185ad83c, 0xcdc20960, + 0x1850fb8e, 0xcdc9d320, 0x18472069, 0xcdd19ed0, + 0x183d46cc, 0xcdd96c6f, 0x18336eb7, 0xcde13bfd, + 0x1829982b, 0xcde90d79, 0x181fc328, 0xcdf0e0e4, + 0x1815efae, 0xcdf8b63d, 0x180c1dbf, 0xce008d84, + 0x18024d59, 0xce0866b8, 0x17f87e7f, 0xce1041d9, + 0x17eeb130, 0xce181ee8, 0x17e4e56c, 0xce1ffde2, + 0x17db1b34, 0xce27dec9, 0x17d15288, 0xce2fc19c, + 0x17c78b68, 0xce37a65b, 0x17bdc5d6, 0xce3f8d05, + 0x17b401d1, 0xce47759a, 0x17aa3f5a, 0xce4f6019, + 0x17a07e70, 0xce574c84, 0x1796bf16, 0xce5f3ad8, + 0x178d014a, 0xce672b16, 0x1783450d, 0xce6f1d3d, + 0x17798a60, 0xce77114e, 0x176fd143, 0xce7f0748, + 0x176619b6, 0xce86ff2a, 0x175c63ba, 0xce8ef8f4, + 0x1752af4f, 0xce96f4a7, 0x1748fc75, 0xce9ef241, + 0x173f4b2e, 0xcea6f1c2, 0x17359b78, 0xceaef32b, + 0x172bed55, 0xceb6f67a, 0x172240c5, 0xcebefbb0, + 0x171895c9, 0xcec702cb, 0x170eec60, 0xcecf0bcd, + 0x1705448b, 0xced716b4, 0x16fb9e4b, 0xcedf2380, + 0x16f1f99f, 0xcee73231, 0x16e85689, 0xceef42c7, + 0x16deb508, 0xcef75541, 0x16d5151d, 0xceff699f, + 0x16cb76c9, 0xcf077fe1, 0x16c1da0b, 0xcf0f9805, + 0x16b83ee4, 0xcf17b20d, 0x16aea555, 0xcf1fcdf8, + 0x16a50d5d, 0xcf27ebc5, 0x169b76fe, 0xcf300b74, + 0x1691e237, 0xcf382d05, 0x16884f09, 0xcf405077, + 0x167ebd74, 0xcf4875ca, 0x16752d79, 0xcf509cfe, + 0x166b9f18, 0xcf58c613, 0x16621251, 0xcf60f108, + 0x16588725, 0xcf691ddd, 0x164efd94, 0xcf714c91, + 0x1645759f, 0xcf797d24, 0x163bef46, 0xcf81af97, + 0x16326a88, 0xcf89e3e8, 0x1628e767, 0xcf921a17, + 0x161f65e4, 0xcf9a5225, 0x1615e5fd, 0xcfa28c10, + 0x160c67b4, 0xcfaac7d8, 0x1602eb0a, 0xcfb3057d, + 0x15f96ffd, 0xcfbb4500, 0x15eff690, 0xcfc3865e, + 0x15e67ec1, 0xcfcbc999, 0x15dd0892, 0xcfd40eaf, + 0x15d39403, 0xcfdc55a1, 0x15ca2115, 0xcfe49e6d, + 0x15c0afc6, 0xcfece915, 0x15b74019, 0xcff53597, + 0x15add20d, 0xcffd83f4, 0x15a465a3, 0xd005d42a, + 0x159afadb, 0xd00e2639, 0x159191b5, 0xd0167a22, + 0x15882a32, 0xd01ecfe4, 0x157ec452, 0xd027277e, + 0x15756016, 0xd02f80f1, 0x156bfd7d, 0xd037dc3b, + 0x15629c89, 0xd040395d, 0x15593d3a, 0xd0489856, + 0x154fdf8f, 0xd050f926, 0x15468389, 0xd0595bcd, + 0x153d292a, 0xd061c04a, 0x1533d070, 0xd06a269d, + 0x152a795d, 0xd0728ec6, 0x152123f0, 0xd07af8c4, + 0x1517d02b, 0xd0836497, 0x150e7e0d, 0xd08bd23f, + 0x15052d97, 0xd09441bb, 0x14fbdec9, 0xd09cb30b, + 0x14f291a4, 0xd0a5262f, 0x14e94627, 0xd0ad9b26, + 0x14dffc54, 0xd0b611f1, 0x14d6b42b, 0xd0be8a8d, + 0x14cd6dab, 0xd0c704fd, 0x14c428d6, 0xd0cf813e, + 0x14bae5ab, 0xd0d7ff51, 0x14b1a42c, 0xd0e07f36, + 0x14a86458, 0xd0e900ec, 0x149f2630, 0xd0f18472, + 0x1495e9b3, 0xd0fa09c9, 0x148caee4, 0xd10290f0, + 0x148375c1, 0xd10b19e7, 0x147a3e4b, 0xd113a4ad, + 0x14710883, 0xd11c3142, 0x1467d469, 0xd124bfa6, + 0x145ea1fd, 0xd12d4fd9, 0x14557140, 0xd135e1d9, + 0x144c4232, 0xd13e75a8, 0x144314d3, 0xd1470b44, + 0x1439e923, 0xd14fa2ad, 0x1430bf24, 0xd1583be2, + 0x142796d5, 0xd160d6e5, 0x141e7037, 0xd16973b3, + 0x14154b4a, 0xd172124d, 0x140c280e, 0xd17ab2b3, + 0x14030684, 0xd18354e4, 0x13f9e6ad, 0xd18bf8e0, + 0x13f0c887, 0xd1949ea6, 0x13e7ac15, 0xd19d4636, + 0x13de9156, 0xd1a5ef90, 0x13d5784a, 0xd1ae9ab4, + 0x13cc60f2, 0xd1b747a0, 0x13c34b4f, 0xd1bff656, + 0x13ba3760, 0xd1c8a6d4, 0x13b12526, 0xd1d1591a, + 0x13a814a2, 0xd1da0d28, 0x139f05d3, 0xd1e2c2fd, + 0x1395f8ba, 0xd1eb7a9a, 0x138ced57, 0xd1f433fd, + 0x1383e3ab, 0xd1fcef27, 0x137adbb6, 0xd205ac17, + 0x1371d579, 0xd20e6acc, 0x1368d0f3, 0xd2172b48, + 0x135fce26, 0xd21fed88, 0x1356cd11, 0xd228b18d, + 0x134dcdb4, 0xd2317756, 0x1344d011, 0xd23a3ee4, + 0x133bd427, 0xd2430835, 0x1332d9f7, 0xd24bd34a, + 0x1329e181, 0xd254a021, 0x1320eac6, 0xd25d6ebc, + 0x1317f5c6, 0xd2663f19, 0x130f0280, 0xd26f1138, + 0x130610f7, 0xd277e518, 0x12fd2129, 0xd280babb, + 0x12f43318, 0xd289921e, 0x12eb46c3, 0xd2926b41, + 0x12e25c2b, 0xd29b4626, 0x12d97350, 0xd2a422ca, + 0x12d08c33, 0xd2ad012e, 0x12c7a6d4, 0xd2b5e151, + 0x12bec333, 0xd2bec333, 0x12b5e151, 0xd2c7a6d4, + 0x12ad012e, 0xd2d08c33, 0x12a422ca, 0xd2d97350, + 0x129b4626, 0xd2e25c2b, 0x12926b41, 0xd2eb46c3, + 0x1289921e, 0xd2f43318, 0x1280babb, 0xd2fd2129, + 0x1277e518, 0xd30610f7, 0x126f1138, 0xd30f0280, + 0x12663f19, 0xd317f5c6, 0x125d6ebc, 0xd320eac6, + 0x1254a021, 0xd329e181, 0x124bd34a, 0xd332d9f7, + 0x12430835, 0xd33bd427, 0x123a3ee4, 0xd344d011, + 0x12317756, 0xd34dcdb4, 0x1228b18d, 0xd356cd11, + 0x121fed88, 0xd35fce26, 0x12172b48, 0xd368d0f3, + 0x120e6acc, 0xd371d579, 0x1205ac17, 0xd37adbb6, + 0x11fcef27, 0xd383e3ab, 0x11f433fd, 0xd38ced57, + 0x11eb7a9a, 0xd395f8ba, 0x11e2c2fd, 0xd39f05d3, + 0x11da0d28, 0xd3a814a2, 0x11d1591a, 0xd3b12526, + 0x11c8a6d4, 0xd3ba3760, 0x11bff656, 0xd3c34b4f, + 0x11b747a0, 0xd3cc60f2, 0x11ae9ab4, 0xd3d5784a, + 0x11a5ef90, 0xd3de9156, 0x119d4636, 0xd3e7ac15, + 0x11949ea6, 0xd3f0c887, 0x118bf8e0, 0xd3f9e6ad, + 0x118354e4, 0xd4030684, 0x117ab2b3, 0xd40c280e, + 0x1172124d, 0xd4154b4a, 0x116973b3, 0xd41e7037, + 0x1160d6e5, 0xd42796d5, 0x11583be2, 0xd430bf24, + 0x114fa2ad, 0xd439e923, 0x11470b44, 0xd44314d3, + 0x113e75a8, 0xd44c4232, 0x1135e1d9, 0xd4557140, + 0x112d4fd9, 0xd45ea1fd, 0x1124bfa6, 0xd467d469, + 0x111c3142, 0xd4710883, 0x1113a4ad, 0xd47a3e4b, + 0x110b19e7, 0xd48375c1, 0x110290f0, 0xd48caee4, + 0x10fa09c9, 0xd495e9b3, 0x10f18472, 0xd49f2630, + 0x10e900ec, 0xd4a86458, 0x10e07f36, 0xd4b1a42c, + 0x10d7ff51, 0xd4bae5ab, 0x10cf813e, 0xd4c428d6, + 0x10c704fd, 0xd4cd6dab, 0x10be8a8d, 0xd4d6b42b, + 0x10b611f1, 0xd4dffc54, 0x10ad9b26, 0xd4e94627, + 0x10a5262f, 0xd4f291a4, 0x109cb30b, 0xd4fbdec9, + 0x109441bb, 0xd5052d97, 0x108bd23f, 0xd50e7e0d, + 0x10836497, 0xd517d02b, 0x107af8c4, 0xd52123f0, + 0x10728ec6, 0xd52a795d, 0x106a269d, 0xd533d070, + 0x1061c04a, 0xd53d292a, 0x10595bcd, 0xd5468389, + 0x1050f926, 0xd54fdf8f, 0x10489856, 0xd5593d3a, + 0x1040395d, 0xd5629c89, 0x1037dc3b, 0xd56bfd7d, + 0x102f80f1, 0xd5756016, 0x1027277e, 0xd57ec452, + 0x101ecfe4, 0xd5882a32, 0x10167a22, 0xd59191b5, + 0x100e2639, 0xd59afadb, 0x1005d42a, 0xd5a465a3, + 0xffd83f4, 0xd5add20d, 0xff53597, 0xd5b74019, + 0xfece915, 0xd5c0afc6, 0xfe49e6d, 0xd5ca2115, + 0xfdc55a1, 0xd5d39403, 0xfd40eaf, 0xd5dd0892, + 0xfcbc999, 0xd5e67ec1, 0xfc3865e, 0xd5eff690, + 0xfbb4500, 0xd5f96ffd, 0xfb3057d, 0xd602eb0a, + 0xfaac7d8, 0xd60c67b4, 0xfa28c10, 0xd615e5fd, + 0xf9a5225, 0xd61f65e4, 0xf921a17, 0xd628e767, + 0xf89e3e8, 0xd6326a88, 0xf81af97, 0xd63bef46, + 0xf797d24, 0xd645759f, 0xf714c91, 0xd64efd94, + 0xf691ddd, 0xd6588725, 0xf60f108, 0xd6621251, + 0xf58c613, 0xd66b9f18, 0xf509cfe, 0xd6752d79, + 0xf4875ca, 0xd67ebd74, 0xf405077, 0xd6884f09, + 0xf382d05, 0xd691e237, 0xf300b74, 0xd69b76fe, + 0xf27ebc5, 0xd6a50d5d, 0xf1fcdf8, 0xd6aea555, + 0xf17b20d, 0xd6b83ee4, 0xf0f9805, 0xd6c1da0b, + 0xf077fe1, 0xd6cb76c9, 0xeff699f, 0xd6d5151d, + 0xef75541, 0xd6deb508, 0xeef42c7, 0xd6e85689, + 0xee73231, 0xd6f1f99f, 0xedf2380, 0xd6fb9e4b, + 0xed716b4, 0xd705448b, 0xecf0bcd, 0xd70eec60, + 0xec702cb, 0xd71895c9, 0xebefbb0, 0xd72240c5, + 0xeb6f67a, 0xd72bed55, 0xeaef32b, 0xd7359b78, + 0xea6f1c2, 0xd73f4b2e, 0xe9ef241, 0xd748fc75, + 0xe96f4a7, 0xd752af4f, 0xe8ef8f4, 0xd75c63ba, + 0xe86ff2a, 0xd76619b6, 0xe7f0748, 0xd76fd143, + 0xe77114e, 0xd7798a60, 0xe6f1d3d, 0xd783450d, + 0xe672b16, 0xd78d014a, 0xe5f3ad8, 0xd796bf16, + 0xe574c84, 0xd7a07e70, 0xe4f6019, 0xd7aa3f5a, + 0xe47759a, 0xd7b401d1, 0xe3f8d05, 0xd7bdc5d6, + 0xe37a65b, 0xd7c78b68, 0xe2fc19c, 0xd7d15288, + 0xe27dec9, 0xd7db1b34, 0xe1ffde2, 0xd7e4e56c, + 0xe181ee8, 0xd7eeb130, 0xe1041d9, 0xd7f87e7f, + 0xe0866b8, 0xd8024d59, 0xe008d84, 0xd80c1dbf, + 0xdf8b63d, 0xd815efae, 0xdf0e0e4, 0xd81fc328, + 0xde90d79, 0xd829982b, 0xde13bfd, 0xd8336eb7, + 0xdd96c6f, 0xd83d46cc, 0xdd19ed0, 0xd8472069, + 0xdc9d320, 0xd850fb8e, 0xdc20960, 0xd85ad83c, + 0xdba4190, 0xd864b670, 0xdb27bb0, 0xd86e962b, + 0xdaab7c0, 0xd878776d, 0xda2f5c2, 0xd8825a35, + 0xd9b35b4, 0xd88c3e83, 0xd937798, 0xd8962456, + 0xd8bbb6d, 0xd8a00bae, 0xd840134, 0xd8a9f48a, + 0xd7c48ee, 0xd8b3deeb, 0xd74929a, 0xd8bdcad0, + 0xd6cde39, 0xd8c7b838, 0xd652bcb, 0xd8d1a724, + 0xd5d7b50, 0xd8db9792, 0xd55ccca, 0xd8e58982, + 0xd4e2037, 0xd8ef7cf4, 0xd467599, 0xd8f971e8, + 0xd3eccef, 0xd903685d, 0xd37263a, 0xd90d6053, + 0xd2f817b, 0xd91759c9, 0xd27deb0, 0xd92154bf, + 0xd203ddc, 0xd92b5135, 0xd189efe, 0xd9354f2a, + 0xd110216, 0xd93f4e9e, 0xd096725, 0xd9494f90, + 0xd01ce2b, 0xd9535201, 0xcfa3729, 0xd95d55ef, + 0xcf2a21d, 0xd9675b5a, 0xceb0f0a, 0xd9716243, + 0xce37def, 0xd97b6aa8, 0xcdbeecc, 0xd9857489, + 0xcd461a2, 0xd98f7fe6, 0xcccd671, 0xd9998cbe, + 0xcc54d3a, 0xd9a39b11, 0xcbdc5fc, 0xd9adaadf, + 0xcb640b8, 0xd9b7bc27, 0xcaebd6e, 0xd9c1cee9, + 0xca73c1e, 0xd9cbe325, 0xc9fbcca, 0xd9d5f8d9, + 0xc983f70, 0xd9e01006, 0xc90c412, 0xd9ea28ac, + 0xc894aaf, 0xd9f442c9, 0xc81d349, 0xd9fe5e5e, + 0xc7a5dde, 0xda087b69, 0xc72ea70, 0xda1299ec, + 0xc6b78ff, 0xda1cb9e5, 0xc64098b, 0xda26db54, + 0xc5c9c14, 0xda30fe38, 0xc55309b, 0xda3b2292, + 0xc4dc720, 0xda454860, 0xc465fa3, 0xda4f6fa3, + 0xc3efa25, 0xda599859, 0xc3796a5, 0xda63c284, + 0xc303524, 0xda6dee21, 0xc28d5a3, 0xda781b31, + 0xc217822, 0xda8249b4, 0xc1a1ca0, 0xda8c79a9, + 0xc12c31f, 0xda96ab0f, 0xc0b6b9e, 0xdaa0dde7, + 0xc04161e, 0xdaab122f, 0xbfcc29f, 0xdab547e8, + 0xbf57121, 0xdabf7f11, 0xbee21a5, 0xdac9b7a9, + 0xbe6d42b, 0xdad3f1b1, 0xbdf88b3, 0xdade2d28, + 0xbd83f3d, 0xdae86a0d, 0xbd0f7ca, 0xdaf2a860, + 0xbc9b25a, 0xdafce821, 0xbc26eee, 0xdb072950, + 0xbbb2d85, 0xdb116beb, 0xbb3ee20, 0xdb1baff2, + 0xbacb0bf, 0xdb25f566, 0xba57563, 0xdb303c46, + 0xb9e3c0b, 0xdb3a8491, 0xb9704b9, 0xdb44ce46, + 0xb8fcf6b, 0xdb4f1967, 0xb889c23, 0xdb5965f1, + 0xb816ae1, 0xdb63b3e5, 0xb7a3ba5, 0xdb6e0342, + 0xb730e70, 0xdb785409, 0xb6be341, 0xdb82a638, + 0xb64ba19, 0xdb8cf9cf, 0xb5d92f8, 0xdb974ece, + 0xb566ddf, 0xdba1a534, 0xb4f4acd, 0xdbabfd01, + 0xb4829c4, 0xdbb65634, 0xb410ac3, 0xdbc0b0ce, + 0xb39edca, 0xdbcb0cce, 0xb32d2da, 0xdbd56a32, + 0xb2bb9f4, 0xdbdfc8fc, 0xb24a316, 0xdbea292b, + 0xb1d8e43, 0xdbf48abd, 0xb167b79, 0xdbfeedb3, + 0xb0f6aba, 0xdc09520d, 0xb085c05, 0xdc13b7c9, + 0xb014f5b, 0xdc1e1ee9, 0xafa44bc, 0xdc28876a, + 0xaf33c28, 0xdc32f14d, 0xaec35a0, 0xdc3d5c91, + 0xae53123, 0xdc47c936, 0xade2eb3, 0xdc52373c, + 0xad72e4f, 0xdc5ca6a2, 0xad02ff8, 0xdc671768, + 0xac933ae, 0xdc71898d, 0xac23971, 0xdc7bfd11, + 0xabb4141, 0xdc8671f3, 0xab44b1f, 0xdc90e834, + 0xaad570c, 0xdc9b5fd2, 0xaa66506, 0xdca5d8cd, + 0xa9f750f, 0xdcb05326, 0xa988727, 0xdcbacedb, + 0xa919b4e, 0xdcc54bec, 0xa8ab184, 0xdccfca59, + 0xa83c9ca, 0xdcda4a21, 0xa7ce420, 0xdce4cb44, + 0xa760086, 0xdcef4dc2, 0xa6f1efc, 0xdcf9d199, + 0xa683f83, 0xdd0456ca, 0xa61621b, 0xdd0edd55, + 0xa5a86c4, 0xdd196538, 0xa53ad7e, 0xdd23ee74, + 0xa4cd64b, 0xdd2e7908, 0xa460129, 0xdd3904f4, + 0xa3f2e19, 0xdd439236, 0xa385d1d, 0xdd4e20d0, + 0xa318e32, 0xdd58b0c0, 0xa2ac15b, 0xdd634206, + 0xa23f698, 0xdd6dd4a2, 0xa1d2de7, 0xdd786892, + 0xa16674b, 0xdd82fdd8, 0xa0fa2c3, 0xdd8d9472, + 0xa08e04f, 0xdd982c60, 0xa021fef, 0xdda2c5a2, + 0x9fb61a5, 0xddad6036, 0x9f4a570, 0xddb7fc1e, + 0x9edeb50, 0xddc29958, 0x9e73346, 0xddcd37e4, + 0x9e07d51, 0xddd7d7c1, 0x9d9c973, 0xdde278ef, + 0x9d317ab, 0xdded1b6e, 0x9cc67fa, 0xddf7bf3e, + 0x9c5ba60, 0xde02645d, 0x9bf0edd, 0xde0d0acc, + 0x9b86572, 0xde17b28a, 0x9b1be1e, 0xde225b96, + 0x9ab18e3, 0xde2d05f1, 0x9a475bf, 0xde37b199, + 0x99dd4b4, 0xde425e8f, 0x99735c2, 0xde4d0cd2, + 0x99098e9, 0xde57bc62, 0x989fe29, 0xde626d3e, + 0x9836582, 0xde6d1f65, 0x97ccef5, 0xde77d2d8, + 0x9763a83, 0xde828796, 0x96fa82a, 0xde8d3d9e, + 0x96917ec, 0xde97f4f1, 0x96289c9, 0xdea2ad8d, + 0x95bfdc1, 0xdead6773, 0x95573d4, 0xdeb822a1, + 0x94eec03, 0xdec2df18, 0x948664d, 0xdecd9cd7, + 0x941e2b4, 0xded85bdd, 0x93b6137, 0xdee31c2b, + 0x934e1d6, 0xdeedddc0, 0x92e6492, 0xdef8a09b, + 0x927e96b, 0xdf0364bc, 0x9217062, 0xdf0e2a22, + 0x91af976, 0xdf18f0ce, 0x91484a8, 0xdf23b8be, + 0x90e11f7, 0xdf2e81f3, 0x907a166, 0xdf394c6b, + 0x90132f2, 0xdf441828, 0x8fac69e, 0xdf4ee527, + 0x8f45c68, 0xdf59b369, 0x8edf452, 0xdf6482ed, + 0x8e78e5b, 0xdf6f53b3, 0x8e12a84, 0xdf7a25ba, + 0x8dac8cd, 0xdf84f902, 0x8d46936, 0xdf8fcd8b, + 0x8ce0bc0, 0xdf9aa354, 0x8c7b06b, 0xdfa57a5d, + 0x8c15736, 0xdfb052a5, 0x8bb0023, 0xdfbb2c2c, + 0x8b4ab32, 0xdfc606f1, 0x8ae5862, 0xdfd0e2f5, + 0x8a807b4, 0xdfdbc036, 0x8a1b928, 0xdfe69eb4, + 0x89b6cbf, 0xdff17e70, 0x8952278, 0xdffc5f67, + 0x88eda54, 0xe007419b, 0x8889454, 0xe012250a, + 0x8825077, 0xe01d09b4, 0x87c0ebd, 0xe027ef99, + 0x875cf28, 0xe032d6b8, 0x86f91b7, 0xe03dbf11, + 0x869566a, 0xe048a8a4, 0x8631d42, 0xe053936f, + 0x85ce63e, 0xe05e7f74, 0x856b160, 0xe0696cb0, + 0x8507ea7, 0xe0745b24, 0x84a4e14, 0xe07f4acf, + 0x8441fa6, 0xe08a3bb2, 0x83df35f, 0xe0952dcb, + 0x837c93e, 0xe0a0211a, 0x831a143, 0xe0ab159e, + 0x82b7b70, 0xe0b60b58, 0x82557c3, 0xe0c10247, + 0x81f363d, 0xe0cbfa6a, 0x81916df, 0xe0d6f3c1, + 0x812f9a9, 0xe0e1ee4b, 0x80cde9b, 0xe0ecea09, + 0x806c5b5, 0xe0f7e6f9, 0x800aef7, 0xe102e51c, + 0x7fa9a62, 0xe10de470, 0x7f487f6, 0xe118e4f6, + 0x7ee77b3, 0xe123e6ad, 0x7e8699a, 0xe12ee995, + 0x7e25daa, 0xe139edac, 0x7dc53e3, 0xe144f2f3, + 0x7d64c47, 0xe14ff96a, 0x7d046d6, 0xe15b0110, + 0x7ca438f, 0xe16609e3, 0x7c44272, 0xe17113e5, + 0x7be4381, 0xe17c1f15, 0x7b846ba, 0xe1872b72, + 0x7b24c20, 0xe19238fb, 0x7ac53b1, 0xe19d47b1, + 0x7a65d6e, 0xe1a85793, 0x7a06957, 0xe1b368a0, + 0x79a776c, 0xe1be7ad8, 0x79487ae, 0xe1c98e3b, + 0x78e9a1d, 0xe1d4a2c8, 0x788aeb9, 0xe1dfb87f, + 0x782c582, 0xe1eacf5f, 0x77cde79, 0xe1f5e768, + 0x776f99d, 0xe2010099, 0x77116f0, 0xe20c1af3, + 0x76b3671, 0xe2173674, 0x7655820, 0xe222531c, + 0x75f7bfe, 0xe22d70eb, 0x759a20a, 0xe2388fe1, + 0x753ca46, 0xe243affc, 0x74df4b1, 0xe24ed13d, + 0x748214c, 0xe259f3a3, 0x7425016, 0xe265172e, + 0x73c8111, 0xe2703bdc, 0x736b43c, 0xe27b61af, + 0x730e997, 0xe28688a4, 0x72b2123, 0xe291b0bd, + 0x7255ae0, 0xe29cd9f8, 0x71f96ce, 0xe2a80456, + 0x719d4ed, 0xe2b32fd4, 0x714153e, 0xe2be5c74, + 0x70e57c0, 0xe2c98a35, 0x7089c75, 0xe2d4b916, + 0x702e35c, 0xe2dfe917, 0x6fd2c75, 0xe2eb1a37, + 0x6f777c1, 0xe2f64c77, 0x6f1c540, 0xe3017fd5, + 0x6ec14f2, 0xe30cb451, 0x6e666d7, 0xe317e9eb, + 0x6e0baf0, 0xe32320a2, 0x6db113d, 0xe32e5876, + 0x6d569be, 0xe3399167, 0x6cfc472, 0xe344cb73, + 0x6ca215c, 0xe350069b, 0x6c4807a, 0xe35b42df, + 0x6bee1cd, 0xe366803c, 0x6b94554, 0xe371beb5, + 0x6b3ab12, 0xe37cfe47, 0x6ae1304, 0xe3883ef2, + 0x6a87d2d, 0xe39380b6, 0x6a2e98b, 0xe39ec393, + 0x69d5820, 0xe3aa0788, 0x697c8eb, 0xe3b54c95, + 0x6923bec, 0xe3c092b9, 0x68cb124, 0xe3cbd9f4, + 0x6872894, 0xe3d72245, 0x681a23a, 0xe3e26bac, + 0x67c1e18, 0xe3edb628, 0x6769c2e, 0xe3f901ba, + 0x6711c7b, 0xe4044e60, 0x66b9f01, 0xe40f9c1a, + 0x66623be, 0xe41aeae8, 0x660aab5, 0xe4263ac9, + 0x65b33e4, 0xe4318bbe, 0x655bf4c, 0xe43cddc4, + 0x6504ced, 0xe44830dd, 0x64adcc7, 0xe4538507, + 0x6456edb, 0xe45eda43, 0x6400329, 0xe46a308f, + 0x63a99b1, 0xe47587eb, 0x6353273, 0xe480e057, + 0x62fcd6f, 0xe48c39d3, 0x62a6aa6, 0xe497945d, + 0x6250a18, 0xe4a2eff6, 0x61fabc4, 0xe4ae4c9d, + 0x61a4fac, 0xe4b9aa52, 0x614f5cf, 0xe4c50914, + 0x60f9e2e, 0xe4d068e2, 0x60a48c9, 0xe4dbc9bd, + 0x604f5a0, 0xe4e72ba4, 0x5ffa4b3, 0xe4f28e96, + 0x5fa5603, 0xe4fdf294, 0x5f5098f, 0xe509579b, + 0x5efbf58, 0xe514bdad, 0x5ea775e, 0xe52024c9, + 0x5e531a1, 0xe52b8cee, 0x5dfee22, 0xe536f61b, + 0x5daace1, 0xe5426051, 0x5d56ddd, 0xe54dcb8f, + 0x5d03118, 0xe55937d5, 0x5caf690, 0xe564a521, + 0x5c5be47, 0xe5701374, 0x5c0883d, 0xe57b82cd, + 0x5bb5472, 0xe586f32c, 0x5b622e6, 0xe5926490, + 0x5b0f399, 0xe59dd6f9, 0x5abc68c, 0xe5a94a67, + 0x5a69bbe, 0xe5b4bed8, 0x5a17330, 0xe5c0344d, + 0x59c4ce3, 0xe5cbaac5, 0x59728d5, 0xe5d72240, + 0x5920708, 0xe5e29abc, 0x58ce77c, 0xe5ee143b, + 0x587ca31, 0xe5f98ebb, 0x582af26, 0xe6050a3b, + 0x57d965d, 0xe61086bc, 0x5787fd6, 0xe61c043d, + 0x5736b90, 0xe62782be, 0x56e598c, 0xe633023e, + 0x56949ca, 0xe63e82bc, 0x5643c4a, 0xe64a0438, + 0x55f310d, 0xe65586b3, 0x55a2812, 0xe6610a2a, + 0x555215a, 0xe66c8e9f, 0x5501ce5, 0xe6781410, + 0x54b1ab4, 0xe6839a7c, 0x5461ac6, 0xe68f21e5, + 0x5411d1b, 0xe69aaa48, 0x53c21b4, 0xe6a633a6, + 0x5372891, 0xe6b1bdff, 0x53231b3, 0xe6bd4951, + 0x52d3d18, 0xe6c8d59c, 0x5284ac3, 0xe6d462e1, + 0x5235ab2, 0xe6dff11d, 0x51e6ce6, 0xe6eb8052, + 0x519815f, 0xe6f7107e, 0x514981d, 0xe702a1a1, + 0x50fb121, 0xe70e33bb, 0x50acc6b, 0xe719c6cb, + 0x505e9fb, 0xe7255ad1, 0x50109d0, 0xe730efcc, + 0x4fc2bec, 0xe73c85bc, 0x4f7504e, 0xe7481ca1, + 0x4f276f7, 0xe753b479, 0x4ed9fe7, 0xe75f4d45, + 0x4e8cb1e, 0xe76ae704, 0x4e3f89c, 0xe77681b6, + 0x4df2862, 0xe7821d59, 0x4da5a6f, 0xe78db9ef, + 0x4d58ec3, 0xe7995776, 0x4d0c560, 0xe7a4f5ed, + 0x4cbfe45, 0xe7b09555, 0x4c73972, 0xe7bc35ad, + 0x4c276e8, 0xe7c7d6f4, 0x4bdb6a6, 0xe7d3792b, + 0x4b8f8ad, 0xe7df1c50, 0x4b43cfd, 0xe7eac063, + 0x4af8397, 0xe7f66564, 0x4aacc7a, 0xe8020b52, + 0x4a617a6, 0xe80db22d, 0x4a1651c, 0xe81959f4, + 0x49cb4dd, 0xe82502a7, 0x49806e7, 0xe830ac45, + 0x4935b3c, 0xe83c56cf, 0x48eb1db, 0xe8480243, + 0x48a0ac4, 0xe853aea1, 0x48565f9, 0xe85f5be9, + 0x480c379, 0xe86b0a1a, 0x47c2344, 0xe876b934, + 0x477855a, 0xe8826936, 0x472e9bc, 0xe88e1a20, + 0x46e5069, 0xe899cbf1, 0x469b963, 0xe8a57ea9, + 0x46524a9, 0xe8b13248, 0x460923b, 0xe8bce6cd, + 0x45c0219, 0xe8c89c37, 0x4577444, 0xe8d45286, + 0x452e8bc, 0xe8e009ba, 0x44e5f80, 0xe8ebc1d3, + 0x449d892, 0xe8f77acf, 0x44553f2, 0xe90334af, + 0x440d19e, 0xe90eef71, 0x43c5199, 0xe91aab16, + 0x437d3e1, 0xe926679c, 0x4335877, 0xe9322505, + 0x42edf5c, 0xe93de34e, 0x42a688f, 0xe949a278, + 0x425f410, 0xe9556282, 0x42181e0, 0xe961236c, + 0x41d11ff, 0xe96ce535, 0x418a46d, 0xe978a7dd, + 0x414392b, 0xe9846b63, 0x40fd037, 0xe9902fc7, + 0x40b6994, 0xe99bf509, 0x4070540, 0xe9a7bb28, + 0x402a33c, 0xe9b38223, 0x3fe4388, 0xe9bf49fa, + 0x3f9e624, 0xe9cb12ad, 0x3f58b10, 0xe9d6dc3b, + 0x3f1324e, 0xe9e2a6a3, 0x3ecdbdc, 0xe9ee71e6, + 0x3e887bb, 0xe9fa3e03, 0x3e435ea, 0xea060af9, + 0x3dfe66c, 0xea11d8c8, 0x3db993e, 0xea1da770, + 0x3d74e62, 0xea2976ef, 0x3d305d8, 0xea354746, + 0x3cebfa0, 0xea411874, 0x3ca7bba, 0xea4cea79, + 0x3c63a26, 0xea58bd54, 0x3c1fae5, 0xea649105, + 0x3bdbdf6, 0xea70658a, 0x3b9835a, 0xea7c3ae5, + 0x3b54b11, 0xea881114, 0x3b1151b, 0xea93e817, + 0x3ace178, 0xea9fbfed, 0x3a8b028, 0xeaab9896, + 0x3a4812c, 0xeab77212, 0x3a05484, 0xeac34c60, + 0x39c2a2f, 0xeacf277f, 0x398022f, 0xeadb0370, + 0x393dc82, 0xeae6e031, 0x38fb92a, 0xeaf2bdc3, + 0x38b9827, 0xeafe9c24, 0x3877978, 0xeb0a7b54, + 0x3835d1e, 0xeb165b54, 0x37f4319, 0xeb223c22, + 0x37b2b6a, 0xeb2e1dbe, 0x377160f, 0xeb3a0027, + 0x373030a, 0xeb45e35d, 0x36ef25b, 0xeb51c760, + 0x36ae401, 0xeb5dac2f, 0x366d7fd, 0xeb6991ca, + 0x362ce50, 0xeb75782f, 0x35ec6f8, 0xeb815f60, + 0x35ac1f7, 0xeb8d475b, 0x356bf4d, 0xeb99301f, + 0x352bef9, 0xeba519ad, 0x34ec0fc, 0xebb10404, + 0x34ac556, 0xebbcef23, 0x346cc07, 0xebc8db0b, + 0x342d510, 0xebd4c7ba, 0x33ee070, 0xebe0b52f, + 0x33aee27, 0xebeca36c, 0x336fe37, 0xebf8926f, + 0x333109e, 0xec048237, 0x32f255e, 0xec1072c4, + 0x32b3c75, 0xec1c6417, 0x32755e5, 0xec28562d, + 0x32371ae, 0xec344908, 0x31f8fcf, 0xec403ca5, + 0x31bb049, 0xec4c3106, 0x317d31c, 0xec582629, + 0x313f848, 0xec641c0e, 0x3101fce, 0xec7012b5, + 0x30c49ad, 0xec7c0a1d, 0x30875e5, 0xec880245, + 0x304a477, 0xec93fb2e, 0x300d563, 0xec9ff4d6, + 0x2fd08a9, 0xecabef3d, 0x2f93e4a, 0xecb7ea63, + 0x2f57644, 0xecc3e648, 0x2f1b099, 0xeccfe2ea, + 0x2eded49, 0xecdbe04a, 0x2ea2c53, 0xece7de66, + 0x2e66db8, 0xecf3dd3f, 0x2e2b178, 0xecffdcd4, + 0x2def794, 0xed0bdd25, 0x2db400a, 0xed17de31, + 0x2d78add, 0xed23dff7, 0x2d3d80a, 0xed2fe277, + 0x2d02794, 0xed3be5b1, 0x2cc7979, 0xed47e9a5, + 0x2c8cdbb, 0xed53ee51, 0x2c52459, 0xed5ff3b5, + 0x2c17d52, 0xed6bf9d1, 0x2bdd8a9, 0xed7800a5, + 0x2ba365c, 0xed84082f, 0x2b6966c, 0xed901070, + 0x2b2f8d8, 0xed9c1967, 0x2af5da2, 0xeda82313, + 0x2abc4c9, 0xedb42d74, 0x2a82e4d, 0xedc0388a, + 0x2a49a2e, 0xedcc4454, 0x2a1086d, 0xedd850d2, + 0x29d790a, 0xede45e03, 0x299ec05, 0xedf06be6, + 0x296615d, 0xedfc7a7c, 0x292d914, 0xee0889c4, + 0x28f5329, 0xee1499bd, 0x28bcf9c, 0xee20aa67, + 0x2884e6e, 0xee2cbbc1, 0x284cf9f, 0xee38cdcb, + 0x281532e, 0xee44e084, 0x27dd91c, 0xee50f3ed, + 0x27a616a, 0xee5d0804, 0x276ec16, 0xee691cc9, + 0x2737922, 0xee75323c, 0x270088e, 0xee81485c, + 0x26c9a58, 0xee8d5f29, 0x2692e83, 0xee9976a1, + 0x265c50e, 0xeea58ec6, 0x2625df8, 0xeeb1a796, + 0x25ef943, 0xeebdc110, 0x25b96ee, 0xeec9db35, + 0x25836f9, 0xeed5f604, 0x254d965, 0xeee2117c, + 0x2517e31, 0xeeee2d9d, 0x24e255e, 0xeefa4a67, + 0x24aceed, 0xef0667d9, 0x2477adc, 0xef1285f2, + 0x244292c, 0xef1ea4b2, 0x240d9de, 0xef2ac419, + 0x23d8cf1, 0xef36e426, 0x23a4265, 0xef4304d8, + 0x236fa3b, 0xef4f2630, 0x233b473, 0xef5b482d, + 0x230710d, 0xef676ace, 0x22d3009, 0xef738e12, + 0x229f167, 0xef7fb1fa, 0x226b528, 0xef8bd685, + 0x2237b4b, 0xef97fbb2, 0x22043d0, 0xefa42181, + 0x21d0eb8, 0xefb047f2, 0x219dc03, 0xefbc6f03, + 0x216abb1, 0xefc896b5, 0x2137dc2, 0xefd4bf08, + 0x2105236, 0xefe0e7f9, 0x20d290d, 0xefed118a, + 0x20a0248, 0xeff93bba, 0x206dde6, 0xf0056687, + 0x203bbe8, 0xf01191f3, 0x2009c4e, 0xf01dbdfb, + 0x1fd7f17, 0xf029eaa1, 0x1fa6445, 0xf03617e2, + 0x1f74bd6, 0xf04245c0, 0x1f435cc, 0xf04e7438, + 0x1f12227, 0xf05aa34c, 0x1ee10e5, 0xf066d2fa, + 0x1eb0209, 0xf0730342, 0x1e7f591, 0xf07f3424, + 0x1e4eb7e, 0xf08b659f, 0x1e1e3d0, 0xf09797b2, + 0x1dede87, 0xf0a3ca5d, 0x1dbdba3, 0xf0affda0, + 0x1d8db25, 0xf0bc317a, 0x1d5dd0c, 0xf0c865ea, + 0x1d2e158, 0xf0d49af1, 0x1cfe80a, 0xf0e0d08d, + 0x1ccf122, 0xf0ed06bf, 0x1c9fca0, 0xf0f93d86, + 0x1c70a84, 0xf10574e0, 0x1c41ace, 0xf111accf, + 0x1c12d7e, 0xf11de551, 0x1be4294, 0xf12a1e66, + 0x1bb5a11, 0xf136580d, 0x1b873f5, 0xf1429247, + 0x1b5903f, 0xf14ecd11, 0x1b2aef0, 0xf15b086d, + 0x1afd007, 0xf1674459, 0x1acf386, 0xf17380d6, + 0x1aa196c, 0xf17fbde2, 0x1a741b9, 0xf18bfb7d, + 0x1a46c6e, 0xf19839a6, 0x1a1998a, 0xf1a4785e, + 0x19ec90d, 0xf1b0b7a4, 0x19bfaf9, 0xf1bcf777, + 0x1992f4c, 0xf1c937d6, 0x1966606, 0xf1d578c2, + 0x1939f29, 0xf1e1ba3a, 0x190dab4, 0xf1edfc3d, + 0x18e18a7, 0xf1fa3ecb, 0x18b5903, 0xf20681e3, + 0x1889bc6, 0xf212c585, 0x185e0f3, 0xf21f09b1, + 0x1832888, 0xf22b4e66, 0x1807285, 0xf23793a3, + 0x17dbeec, 0xf243d968, 0x17b0dbb, 0xf2501fb5, + 0x1785ef4, 0xf25c6688, 0x175b296, 0xf268ade3, + 0x17308a1, 0xf274f5c3, 0x1706115, 0xf2813e2a, + 0x16dbbf3, 0xf28d8715, 0x16b193a, 0xf299d085, + 0x16878eb, 0xf2a61a7a, 0x165db05, 0xf2b264f2, + 0x1633f8a, 0xf2beafed, 0x160a678, 0xf2cafb6b, + 0x15e0fd1, 0xf2d7476c, 0x15b7b94, 0xf2e393ef, + 0x158e9c1, 0xf2efe0f2, 0x1565a58, 0xf2fc2e77, + 0x153cd5a, 0xf3087c7d, 0x15142c6, 0xf314cb02, + 0x14eba9d, 0xf3211a07, 0x14c34df, 0xf32d698a, + 0x149b18b, 0xf339b98d, 0x14730a3, 0xf3460a0d, + 0x144b225, 0xf3525b0b, 0x1423613, 0xf35eac86, + 0x13fbc6c, 0xf36afe7e, 0x13d4530, 0xf37750f2, + 0x13ad060, 0xf383a3e2, 0x1385dfb, 0xf38ff74d, + 0x135ee02, 0xf39c4b32, 0x1338075, 0xf3a89f92, + 0x1311553, 0xf3b4f46c, 0x12eac9d, 0xf3c149bf, + 0x12c4653, 0xf3cd9f8b, 0x129e276, 0xf3d9f5cf, + 0x1278104, 0xf3e64c8c, 0x12521ff, 0xf3f2a3bf, + 0x122c566, 0xf3fefb6a, 0x1206b39, 0xf40b538b, + 0x11e1379, 0xf417ac22, 0x11bbe26, 0xf424052f, + 0x1196b3f, 0xf4305eb0, 0x1171ac6, 0xf43cb8a7, + 0x114ccb9, 0xf4491311, 0x1128119, 0xf4556def, + 0x11037e6, 0xf461c940, 0x10df120, 0xf46e2504, + 0x10bacc8, 0xf47a8139, 0x1096add, 0xf486dde1, + 0x1072b5f, 0xf4933afa, 0x104ee4f, 0xf49f9884, + 0x102b3ac, 0xf4abf67e, 0x1007b77, 0xf4b854e7, + 0xfe45b0, 0xf4c4b3c0, 0xfc1257, 0xf4d11308, + 0xf9e16b, 0xf4dd72be, 0xf7b2ee, 0xf4e9d2e3, + 0xf586df, 0xf4f63374, 0xf35d3e, 0xf5029473, + 0xf1360b, 0xf50ef5de, 0xef1147, 0xf51b57b5, + 0xeceef1, 0xf527b9f7, 0xeacf09, 0xf5341ca5, + 0xe8b190, 0xf5407fbd, 0xe69686, 0xf54ce33f, + 0xe47deb, 0xf559472b, 0xe267be, 0xf565ab80, + 0xe05401, 0xf572103d, 0xde42b2, 0xf57e7563, + 0xdc33d2, 0xf58adaf0, 0xda2762, 0xf59740e5, + 0xd81d61, 0xf5a3a740, 0xd615cf, 0xf5b00e02, + 0xd410ad, 0xf5bc7529, 0xd20dfa, 0xf5c8dcb6, + 0xd00db6, 0xf5d544a7, 0xce0fe3, 0xf5e1acfd, + 0xcc147f, 0xf5ee15b7, 0xca1b8a, 0xf5fa7ed4, + 0xc82506, 0xf606e854, 0xc630f2, 0xf6135237, + 0xc43f4d, 0xf61fbc7b, 0xc25019, 0xf62c2721, + 0xc06355, 0xf6389228, 0xbe7901, 0xf644fd8f, + 0xbc911d, 0xf6516956, 0xbaabaa, 0xf65dd57d, + 0xb8c8a7, 0xf66a4203, 0xb6e815, 0xf676aee8, + 0xb509f3, 0xf6831c2b, 0xb32e42, 0xf68f89cb, + 0xb15502, 0xf69bf7c9, 0xaf7e33, 0xf6a86623, + 0xada9d4, 0xf6b4d4d9, 0xabd7e6, 0xf6c143ec, + 0xaa086a, 0xf6cdb359, 0xa83b5e, 0xf6da2321, + 0xa670c4, 0xf6e69344, 0xa4a89b, 0xf6f303c0, + 0xa2e2e3, 0xf6ff7496, 0xa11f9d, 0xf70be5c4, + 0x9f5ec8, 0xf718574b, 0x9da065, 0xf724c92a, + 0x9be473, 0xf7313b60, 0x9a2af3, 0xf73daded, + 0x9873e4, 0xf74a20d0, 0x96bf48, 0xf756940a, + 0x950d1d, 0xf7630799, 0x935d64, 0xf76f7b7d, + 0x91b01d, 0xf77befb5, 0x900548, 0xf7886442, + 0x8e5ce5, 0xf794d922, 0x8cb6f5, 0xf7a14e55, + 0x8b1376, 0xf7adc3db, 0x89726a, 0xf7ba39b3, + 0x87d3d0, 0xf7c6afdc, 0x8637a9, 0xf7d32657, + 0x849df4, 0xf7df9d22, 0x8306b2, 0xf7ec143e, + 0x8171e2, 0xf7f88ba9, 0x7fdf85, 0xf8050364, + 0x7e4f9b, 0xf8117b6d, 0x7cc223, 0xf81df3c5, + 0x7b371e, 0xf82a6c6a, 0x79ae8c, 0xf836e55d, + 0x78286e, 0xf8435e9d, 0x76a4c2, 0xf84fd829, + 0x752389, 0xf85c5201, 0x73a4c3, 0xf868cc24, + 0x722871, 0xf8754692, 0x70ae92, 0xf881c14b, + 0x6f3726, 0xf88e3c4d, 0x6dc22e, 0xf89ab799, + 0x6c4fa8, 0xf8a7332e, 0x6adf97, 0xf8b3af0c, + 0x6971f9, 0xf8c02b31, 0x6806ce, 0xf8cca79e, + 0x669e18, 0xf8d92452, 0x6537d4, 0xf8e5a14d, + 0x63d405, 0xf8f21e8e, 0x6272aa, 0xf8fe9c15, + 0x6113c2, 0xf90b19e0, 0x5fb74e, 0xf91797f0, + 0x5e5d4e, 0xf9241645, 0x5d05c3, 0xf93094dd, + 0x5bb0ab, 0xf93d13b8, 0x5a5e07, 0xf94992d7, + 0x590dd8, 0xf9561237, 0x57c01d, 0xf96291d9, + 0x5674d6, 0xf96f11bc, 0x552c03, 0xf97b91e1, + 0x53e5a5, 0xf9881245, 0x52a1bb, 0xf99492ea, + 0x516045, 0xf9a113cd, 0x502145, 0xf9ad94f0, + 0x4ee4b8, 0xf9ba1651, 0x4daaa1, 0xf9c697f0, + 0x4c72fe, 0xf9d319cc, 0x4b3dcf, 0xf9df9be6, + 0x4a0b16, 0xf9ec1e3b, 0x48dad1, 0xf9f8a0cd, + 0x47ad01, 0xfa05239a, 0x4681a6, 0xfa11a6a3, + 0x4558c0, 0xfa1e29e5, 0x44324f, 0xfa2aad62, + 0x430e53, 0xfa373119, 0x41eccc, 0xfa43b508, + 0x40cdba, 0xfa503930, 0x3fb11d, 0xfa5cbd91, + 0x3e96f6, 0xfa694229, 0x3d7f44, 0xfa75c6f8, + 0x3c6a07, 0xfa824bfd, 0x3b573f, 0xfa8ed139, + 0x3a46ed, 0xfa9b56ab, 0x393910, 0xfaa7dc52, + 0x382da8, 0xfab4622d, 0x3724b6, 0xfac0e83d, + 0x361e3a, 0xfacd6e81, 0x351a33, 0xfad9f4f8, + 0x3418a2, 0xfae67ba2, 0x331986, 0xfaf3027e, + 0x321ce0, 0xfaff898c, 0x3122b0, 0xfb0c10cb, + 0x302af5, 0xfb18983b, 0x2f35b1, 0xfb251fdc, + 0x2e42e2, 0xfb31a7ac, 0x2d5289, 0xfb3e2fac, + 0x2c64a6, 0xfb4ab7db, 0x2b7939, 0xfb574039, + 0x2a9042, 0xfb63c8c4, 0x29a9c1, 0xfb70517d, + 0x28c5b6, 0xfb7cda63, 0x27e421, 0xfb896375, + 0x270502, 0xfb95ecb4, 0x262859, 0xfba2761e, + 0x254e27, 0xfbaeffb3, 0x24766a, 0xfbbb8973, + 0x23a124, 0xfbc8135c, 0x22ce54, 0xfbd49d70, + 0x21fdfb, 0xfbe127ac, 0x213018, 0xfbedb212, + 0x2064ab, 0xfbfa3c9f, 0x1f9bb5, 0xfc06c754, + 0x1ed535, 0xfc135231, 0x1e112b, 0xfc1fdd34, + 0x1d4f99, 0xfc2c685d, 0x1c907c, 0xfc38f3ac, + 0x1bd3d6, 0xfc457f21, 0x1b19a7, 0xfc520aba, + 0x1a61ee, 0xfc5e9678, 0x19acac, 0xfc6b2259, + 0x18f9e1, 0xfc77ae5e, 0x18498c, 0xfc843a85, + 0x179bae, 0xfc90c6cf, 0x16f047, 0xfc9d533b, + 0x164757, 0xfca9dfc8, 0x15a0dd, 0xfcb66c77, + 0x14fcda, 0xfcc2f945, 0x145b4e, 0xfccf8634, + 0x13bc39, 0xfcdc1342, 0x131f9b, 0xfce8a06f, + 0x128574, 0xfcf52dbb, 0x11edc3, 0xfd01bb24, + 0x11588a, 0xfd0e48ab, 0x10c5c7, 0xfd1ad650, + 0x10357c, 0xfd276410, 0xfa7a8, 0xfd33f1ed, + 0xf1c4a, 0xfd407fe6, 0xe9364, 0xfd4d0df9, + 0xe0cf5, 0xfd599c28, 0xd88fd, 0xfd662a70, + 0xd077c, 0xfd72b8d2, 0xc8872, 0xfd7f474d, + 0xc0be0, 0xfd8bd5e1, 0xb91c4, 0xfd98648d, + 0xb1a20, 0xfda4f351, 0xaa4f3, 0xfdb1822c, + 0xa323d, 0xfdbe111e, 0x9c1ff, 0xfdcaa027, + 0x95438, 0xfdd72f45, 0x8e8e8, 0xfde3be78, + 0x8800f, 0xfdf04dc0, 0x819ae, 0xfdfcdd1d, + 0x7b5c4, 0xfe096c8d, 0x75452, 0xfe15fc11, + 0x6f556, 0xfe228ba7, 0x698d3, 0xfe2f1b50, + 0x63ec6, 0xfe3bab0b, 0x5e731, 0xfe483ad8, + 0x59214, 0xfe54cab5, 0x53f6e, 0xfe615aa3, + 0x4ef3f, 0xfe6deaa1, 0x4a188, 0xfe7a7aae, + 0x45648, 0xfe870aca, 0x40d80, 0xfe939af5, + 0x3c72f, 0xfea02b2e, 0x38356, 0xfeacbb74, + 0x341f4, 0xfeb94bc8, 0x3030a, 0xfec5dc28, + 0x2c697, 0xfed26c94, 0x28c9c, 0xfedefd0c, + 0x25519, 0xfeeb8d8f, 0x2200d, 0xfef81e1d, + 0x1ed78, 0xff04aeb5, 0x1bd5c, 0xff113f56, + 0x18fb6, 0xff1dd001, 0x16489, 0xff2a60b4, + 0x13bd3, 0xff36f170, 0x11594, 0xff438234, + 0xf1ce, 0xff5012fe, 0xd07e, 0xff5ca3d0, + 0xb1a7, 0xff6934a8, 0x9547, 0xff75c585, + 0x7b5f, 0xff825668, 0x63ee, 0xff8ee750, + 0x4ef5, 0xff9b783c, 0x3c74, 0xffa8092c, + 0x2c6a, 0xffb49a1f, 0x1ed8, 0xffc12b16, + 0x13bd, 0xffcdbc0f, 0xb1a, 0xffda4d09, + 0x4ef, 0xffe6de05, 0x13c, 0xfff36f02, + 0x0, 0x0, 0x13c, 0xc90fe, + 0x4ef, 0x1921fb, 0xb1a, 0x25b2f7, + 0x13bd, 0x3243f1, 0x1ed8, 0x3ed4ea, + 0x2c6a, 0x4b65e1, 0x3c74, 0x57f6d4, + 0x4ef5, 0x6487c4, 0x63ee, 0x7118b0, + 0x7b5f, 0x7da998, 0x9547, 0x8a3a7b, + 0xb1a7, 0x96cb58, 0xd07e, 0xa35c30, + 0xf1ce, 0xafed02, 0x11594, 0xbc7dcc, + 0x13bd3, 0xc90e90, 0x16489, 0xd59f4c, + 0x18fb6, 0xe22fff, 0x1bd5c, 0xeec0aa, + 0x1ed78, 0xfb514b, 0x2200d, 0x107e1e3, + 0x25519, 0x1147271, 0x28c9c, 0x12102f4, + 0x2c697, 0x12d936c, 0x3030a, 0x13a23d8, + 0x341f4, 0x146b438, 0x38356, 0x153448c, + 0x3c72f, 0x15fd4d2, 0x40d80, 0x16c650b, + 0x45648, 0x178f536, 0x4a188, 0x1858552, + 0x4ef3f, 0x192155f, 0x53f6e, 0x19ea55d, + 0x59214, 0x1ab354b, 0x5e731, 0x1b7c528, + 0x63ec6, 0x1c454f5, 0x698d3, 0x1d0e4b0, + 0x6f556, 0x1dd7459, 0x75452, 0x1ea03ef, + 0x7b5c4, 0x1f69373, 0x819ae, 0x20322e3, + 0x8800f, 0x20fb240, 0x8e8e8, 0x21c4188, + 0x95438, 0x228d0bb, 0x9c1ff, 0x2355fd9, + 0xa323d, 0x241eee2, 0xaa4f3, 0x24e7dd4, + 0xb1a20, 0x25b0caf, 0xb91c4, 0x2679b73, + 0xc0be0, 0x2742a1f, 0xc8872, 0x280b8b3, + 0xd077c, 0x28d472e, 0xd88fd, 0x299d590, + 0xe0cf5, 0x2a663d8, 0xe9364, 0x2b2f207, + 0xf1c4a, 0x2bf801a, 0xfa7a8, 0x2cc0e13, + 0x10357c, 0x2d89bf0, 0x10c5c7, 0x2e529b0, + 0x11588a, 0x2f1b755, 0x11edc3, 0x2fe44dc, + 0x128574, 0x30ad245, 0x131f9b, 0x3175f91, + 0x13bc39, 0x323ecbe, 0x145b4e, 0x33079cc, + 0x14fcda, 0x33d06bb, 0x15a0dd, 0x3499389, + 0x164757, 0x3562038, 0x16f047, 0x362acc5, + 0x179bae, 0x36f3931, 0x18498c, 0x37bc57b, + 0x18f9e1, 0x38851a2, 0x19acac, 0x394dda7, + 0x1a61ee, 0x3a16988, 0x1b19a7, 0x3adf546, + 0x1bd3d6, 0x3ba80df, 0x1c907c, 0x3c70c54, + 0x1d4f99, 0x3d397a3, 0x1e112b, 0x3e022cc, + 0x1ed535, 0x3ecadcf, 0x1f9bb5, 0x3f938ac, + 0x2064ab, 0x405c361, 0x213018, 0x4124dee, + 0x21fdfb, 0x41ed854, 0x22ce54, 0x42b6290, + 0x23a124, 0x437eca4, 0x24766a, 0x444768d, + 0x254e27, 0x451004d, 0x262859, 0x45d89e2, + 0x270502, 0x46a134c, 0x27e421, 0x4769c8b, + 0x28c5b6, 0x483259d, 0x29a9c1, 0x48fae83, + 0x2a9042, 0x49c373c, 0x2b7939, 0x4a8bfc7, + 0x2c64a6, 0x4b54825, 0x2d5289, 0x4c1d054, + 0x2e42e2, 0x4ce5854, 0x2f35b1, 0x4dae024, + 0x302af5, 0x4e767c5, 0x3122b0, 0x4f3ef35, + 0x321ce0, 0x5007674, 0x331986, 0x50cfd82, + 0x3418a2, 0x519845e, 0x351a33, 0x5260b08, + 0x361e3a, 0x532917f, 0x3724b6, 0x53f17c3, + 0x382da8, 0x54b9dd3, 0x393910, 0x55823ae, + 0x3a46ed, 0x564a955, 0x3b573f, 0x5712ec7, + 0x3c6a07, 0x57db403, 0x3d7f44, 0x58a3908, + 0x3e96f6, 0x596bdd7, 0x3fb11d, 0x5a3426f, + 0x40cdba, 0x5afc6d0, 0x41eccc, 0x5bc4af8, + 0x430e53, 0x5c8cee7, 0x44324f, 0x5d5529e, + 0x4558c0, 0x5e1d61b, 0x4681a6, 0x5ee595d, + 0x47ad01, 0x5fadc66, 0x48dad1, 0x6075f33, + 0x4a0b16, 0x613e1c5, 0x4b3dcf, 0x620641a, + 0x4c72fe, 0x62ce634, 0x4daaa1, 0x6396810, + 0x4ee4b8, 0x645e9af, 0x502145, 0x6526b10, + 0x516045, 0x65eec33, 0x52a1bb, 0x66b6d16, + 0x53e5a5, 0x677edbb, 0x552c03, 0x6846e1f, + 0x5674d6, 0x690ee44, 0x57c01d, 0x69d6e27, + 0x590dd8, 0x6a9edc9, 0x5a5e07, 0x6b66d29, + 0x5bb0ab, 0x6c2ec48, 0x5d05c3, 0x6cf6b23, + 0x5e5d4e, 0x6dbe9bb, 0x5fb74e, 0x6e86810, + 0x6113c2, 0x6f4e620, 0x6272aa, 0x70163eb, + 0x63d405, 0x70de172, 0x6537d4, 0x71a5eb3, + 0x669e18, 0x726dbae, 0x6806ce, 0x7335862, + 0x6971f9, 0x73fd4cf, 0x6adf97, 0x74c50f4, + 0x6c4fa8, 0x758ccd2, 0x6dc22e, 0x7654867, + 0x6f3726, 0x771c3b3, 0x70ae92, 0x77e3eb5, + 0x722871, 0x78ab96e, 0x73a4c3, 0x79733dc, + 0x752389, 0x7a3adff, 0x76a4c2, 0x7b027d7, + 0x78286e, 0x7bca163, 0x79ae8c, 0x7c91aa3, + 0x7b371e, 0x7d59396, 0x7cc223, 0x7e20c3b, + 0x7e4f9b, 0x7ee8493, 0x7fdf85, 0x7fafc9c, + 0x8171e2, 0x8077457, 0x8306b2, 0x813ebc2, + 0x849df4, 0x82062de, 0x8637a9, 0x82cd9a9, + 0x87d3d0, 0x8395024, 0x89726a, 0x845c64d, + 0x8b1376, 0x8523c25, 0x8cb6f5, 0x85eb1ab, + 0x8e5ce5, 0x86b26de, 0x900548, 0x8779bbe, + 0x91b01d, 0x884104b, 0x935d64, 0x8908483, + 0x950d1d, 0x89cf867, 0x96bf48, 0x8a96bf6, + 0x9873e4, 0x8b5df30, 0x9a2af3, 0x8c25213, + 0x9be473, 0x8cec4a0, 0x9da065, 0x8db36d6, + 0x9f5ec8, 0x8e7a8b5, 0xa11f9d, 0x8f41a3c, + 0xa2e2e3, 0x9008b6a, 0xa4a89b, 0x90cfc40, + 0xa670c4, 0x9196cbc, 0xa83b5e, 0x925dcdf, + 0xaa086a, 0x9324ca7, 0xabd7e6, 0x93ebc14, + 0xada9d4, 0x94b2b27, 0xaf7e33, 0x95799dd, + 0xb15502, 0x9640837, 0xb32e42, 0x9707635, + 0xb509f3, 0x97ce3d5, 0xb6e815, 0x9895118, + 0xb8c8a7, 0x995bdfd, 0xbaabaa, 0x9a22a83, + 0xbc911d, 0x9ae96aa, 0xbe7901, 0x9bb0271, + 0xc06355, 0x9c76dd8, 0xc25019, 0x9d3d8df, + 0xc43f4d, 0x9e04385, 0xc630f2, 0x9ecadc9, + 0xc82506, 0x9f917ac, 0xca1b8a, 0xa05812c, + 0xcc147f, 0xa11ea49, 0xce0fe3, 0xa1e5303, + 0xd00db6, 0xa2abb59, 0xd20dfa, 0xa37234a, + 0xd410ad, 0xa438ad7, 0xd615cf, 0xa4ff1fe, + 0xd81d61, 0xa5c58c0, 0xda2762, 0xa68bf1b, + 0xdc33d2, 0xa752510, 0xde42b2, 0xa818a9d, + 0xe05401, 0xa8defc3, 0xe267be, 0xa9a5480, + 0xe47deb, 0xaa6b8d5, 0xe69686, 0xab31cc1, + 0xe8b190, 0xabf8043, 0xeacf09, 0xacbe35b, + 0xeceef1, 0xad84609, 0xef1147, 0xae4a84b, + 0xf1360b, 0xaf10a22, 0xf35d3e, 0xafd6b8d, + 0xf586df, 0xb09cc8c, 0xf7b2ee, 0xb162d1d, + 0xf9e16b, 0xb228d42, 0xfc1257, 0xb2eecf8, + 0xfe45b0, 0xb3b4c40, 0x1007b77, 0xb47ab19, + 0x102b3ac, 0xb540982, 0x104ee4f, 0xb60677c, + 0x1072b5f, 0xb6cc506, 0x1096add, 0xb79221f, + 0x10bacc8, 0xb857ec7, 0x10df120, 0xb91dafc, + 0x11037e6, 0xb9e36c0, 0x1128119, 0xbaa9211, + 0x114ccb9, 0xbb6ecef, 0x1171ac6, 0xbc34759, + 0x1196b3f, 0xbcfa150, 0x11bbe26, 0xbdbfad1, + 0x11e1379, 0xbe853de, 0x1206b39, 0xbf4ac75, + 0x122c566, 0xc010496, 0x12521ff, 0xc0d5c41, + 0x1278104, 0xc19b374, 0x129e276, 0xc260a31, + 0x12c4653, 0xc326075, 0x12eac9d, 0xc3eb641, + 0x1311553, 0xc4b0b94, 0x1338075, 0xc57606e, + 0x135ee02, 0xc63b4ce, 0x1385dfb, 0xc7008b3, + 0x13ad060, 0xc7c5c1e, 0x13d4530, 0xc88af0e, + 0x13fbc6c, 0xc950182, 0x1423613, 0xca1537a, + 0x144b225, 0xcada4f5, 0x14730a3, 0xcb9f5f3, + 0x149b18b, 0xcc64673, 0x14c34df, 0xcd29676, + 0x14eba9d, 0xcdee5f9, 0x15142c6, 0xceb34fe, + 0x153cd5a, 0xcf78383, 0x1565a58, 0xd03d189, + 0x158e9c1, 0xd101f0e, 0x15b7b94, 0xd1c6c11, + 0x15e0fd1, 0xd28b894, 0x160a678, 0xd350495, + 0x1633f8a, 0xd415013, 0x165db05, 0xd4d9b0e, + 0x16878eb, 0xd59e586, 0x16b193a, 0xd662f7b, + 0x16dbbf3, 0xd7278eb, 0x1706115, 0xd7ec1d6, + 0x17308a1, 0xd8b0a3d, 0x175b296, 0xd97521d, + 0x1785ef4, 0xda39978, 0x17b0dbb, 0xdafe04b, + 0x17dbeec, 0xdbc2698, 0x1807285, 0xdc86c5d, + 0x1832888, 0xdd4b19a, 0x185e0f3, 0xde0f64f, + 0x1889bc6, 0xded3a7b, 0x18b5903, 0xdf97e1d, + 0x18e18a7, 0xe05c135, 0x190dab4, 0xe1203c3, + 0x1939f29, 0xe1e45c6, 0x1966606, 0xe2a873e, + 0x1992f4c, 0xe36c82a, 0x19bfaf9, 0xe430889, + 0x19ec90d, 0xe4f485c, 0x1a1998a, 0xe5b87a2, + 0x1a46c6e, 0xe67c65a, 0x1a741b9, 0xe740483, + 0x1aa196c, 0xe80421e, 0x1acf386, 0xe8c7f2a, + 0x1afd007, 0xe98bba7, 0x1b2aef0, 0xea4f793, + 0x1b5903f, 0xeb132ef, 0x1b873f5, 0xebd6db9, + 0x1bb5a11, 0xec9a7f3, 0x1be4294, 0xed5e19a, + 0x1c12d7e, 0xee21aaf, 0x1c41ace, 0xeee5331, + 0x1c70a84, 0xefa8b20, 0x1c9fca0, 0xf06c27a, + 0x1ccf122, 0xf12f941, 0x1cfe80a, 0xf1f2f73, + 0x1d2e158, 0xf2b650f, 0x1d5dd0c, 0xf379a16, + 0x1d8db25, 0xf43ce86, 0x1dbdba3, 0xf500260, + 0x1dede87, 0xf5c35a3, 0x1e1e3d0, 0xf68684e, + 0x1e4eb7e, 0xf749a61, 0x1e7f591, 0xf80cbdc, + 0x1eb0209, 0xf8cfcbe, 0x1ee10e5, 0xf992d06, + 0x1f12227, 0xfa55cb4, 0x1f435cc, 0xfb18bc8, + 0x1f74bd6, 0xfbdba40, 0x1fa6445, 0xfc9e81e, + 0x1fd7f17, 0xfd6155f, 0x2009c4e, 0xfe24205, + 0x203bbe8, 0xfee6e0d, 0x206dde6, 0xffa9979, + 0x20a0248, 0x1006c446, 0x20d290d, 0x1012ee76, + 0x2105236, 0x101f1807, 0x2137dc2, 0x102b40f8, + 0x216abb1, 0x1037694b, 0x219dc03, 0x104390fd, + 0x21d0eb8, 0x104fb80e, 0x22043d0, 0x105bde7f, + 0x2237b4b, 0x1068044e, 0x226b528, 0x1074297b, + 0x229f167, 0x10804e06, 0x22d3009, 0x108c71ee, + 0x230710d, 0x10989532, 0x233b473, 0x10a4b7d3, + 0x236fa3b, 0x10b0d9d0, 0x23a4265, 0x10bcfb28, + 0x23d8cf1, 0x10c91bda, 0x240d9de, 0x10d53be7, + 0x244292c, 0x10e15b4e, 0x2477adc, 0x10ed7a0e, + 0x24aceed, 0x10f99827, 0x24e255e, 0x1105b599, + 0x2517e31, 0x1111d263, 0x254d965, 0x111dee84, + 0x25836f9, 0x112a09fc, 0x25b96ee, 0x113624cb, + 0x25ef943, 0x11423ef0, 0x2625df8, 0x114e586a, + 0x265c50e, 0x115a713a, 0x2692e83, 0x1166895f, + 0x26c9a58, 0x1172a0d7, 0x270088e, 0x117eb7a4, + 0x2737922, 0x118acdc4, 0x276ec16, 0x1196e337, + 0x27a616a, 0x11a2f7fc, 0x27dd91c, 0x11af0c13, + 0x281532e, 0x11bb1f7c, 0x284cf9f, 0x11c73235, + 0x2884e6e, 0x11d3443f, 0x28bcf9c, 0x11df5599, + 0x28f5329, 0x11eb6643, 0x292d914, 0x11f7763c, + 0x296615d, 0x12038584, 0x299ec05, 0x120f941a, + 0x29d790a, 0x121ba1fd, 0x2a1086d, 0x1227af2e, + 0x2a49a2e, 0x1233bbac, 0x2a82e4d, 0x123fc776, + 0x2abc4c9, 0x124bd28c, 0x2af5da2, 0x1257dced, + 0x2b2f8d8, 0x1263e699, 0x2b6966c, 0x126fef90, + 0x2ba365c, 0x127bf7d1, 0x2bdd8a9, 0x1287ff5b, + 0x2c17d52, 0x1294062f, 0x2c52459, 0x12a00c4b, + 0x2c8cdbb, 0x12ac11af, 0x2cc7979, 0x12b8165b, + 0x2d02794, 0x12c41a4f, 0x2d3d80a, 0x12d01d89, + 0x2d78add, 0x12dc2009, 0x2db400a, 0x12e821cf, + 0x2def794, 0x12f422db, 0x2e2b178, 0x1300232c, + 0x2e66db8, 0x130c22c1, 0x2ea2c53, 0x1318219a, + 0x2eded49, 0x13241fb6, 0x2f1b099, 0x13301d16, + 0x2f57644, 0x133c19b8, 0x2f93e4a, 0x1348159d, + 0x2fd08a9, 0x135410c3, 0x300d563, 0x13600b2a, + 0x304a477, 0x136c04d2, 0x30875e5, 0x1377fdbb, + 0x30c49ad, 0x1383f5e3, 0x3101fce, 0x138fed4b, + 0x313f848, 0x139be3f2, 0x317d31c, 0x13a7d9d7, + 0x31bb049, 0x13b3cefa, 0x31f8fcf, 0x13bfc35b, + 0x32371ae, 0x13cbb6f8, 0x32755e5, 0x13d7a9d3, + 0x32b3c75, 0x13e39be9, 0x32f255e, 0x13ef8d3c, + 0x333109e, 0x13fb7dc9, 0x336fe37, 0x14076d91, + 0x33aee27, 0x14135c94, 0x33ee070, 0x141f4ad1, + 0x342d510, 0x142b3846, 0x346cc07, 0x143724f5, + 0x34ac556, 0x144310dd, 0x34ec0fc, 0x144efbfc, + 0x352bef9, 0x145ae653, 0x356bf4d, 0x1466cfe1, + 0x35ac1f7, 0x1472b8a5, 0x35ec6f8, 0x147ea0a0, + 0x362ce50, 0x148a87d1, 0x366d7fd, 0x14966e36, + 0x36ae401, 0x14a253d1, 0x36ef25b, 0x14ae38a0, + 0x373030a, 0x14ba1ca3, 0x377160f, 0x14c5ffd9, + 0x37b2b6a, 0x14d1e242, 0x37f4319, 0x14ddc3de, + 0x3835d1e, 0x14e9a4ac, 0x3877978, 0x14f584ac, + 0x38b9827, 0x150163dc, 0x38fb92a, 0x150d423d, + 0x393dc82, 0x15191fcf, 0x398022f, 0x1524fc90, + 0x39c2a2f, 0x1530d881, 0x3a05484, 0x153cb3a0, + 0x3a4812c, 0x15488dee, 0x3a8b028, 0x1554676a, + 0x3ace178, 0x15604013, 0x3b1151b, 0x156c17e9, + 0x3b54b11, 0x1577eeec, 0x3b9835a, 0x1583c51b, + 0x3bdbdf6, 0x158f9a76, 0x3c1fae5, 0x159b6efb, + 0x3c63a26, 0x15a742ac, 0x3ca7bba, 0x15b31587, + 0x3cebfa0, 0x15bee78c, 0x3d305d8, 0x15cab8ba, + 0x3d74e62, 0x15d68911, 0x3db993e, 0x15e25890, + 0x3dfe66c, 0x15ee2738, 0x3e435ea, 0x15f9f507, + 0x3e887bb, 0x1605c1fd, 0x3ecdbdc, 0x16118e1a, + 0x3f1324e, 0x161d595d, 0x3f58b10, 0x162923c5, + 0x3f9e624, 0x1634ed53, 0x3fe4388, 0x1640b606, + 0x402a33c, 0x164c7ddd, 0x4070540, 0x165844d8, + 0x40b6994, 0x16640af7, 0x40fd037, 0x166fd039, + 0x414392b, 0x167b949d, 0x418a46d, 0x16875823, + 0x41d11ff, 0x16931acb, 0x42181e0, 0x169edc94, + 0x425f410, 0x16aa9d7e, 0x42a688f, 0x16b65d88, + 0x42edf5c, 0x16c21cb2, 0x4335877, 0x16cddafb, + 0x437d3e1, 0x16d99864, 0x43c5199, 0x16e554ea, + 0x440d19e, 0x16f1108f, 0x44553f2, 0x16fccb51, + 0x449d892, 0x17088531, 0x44e5f80, 0x17143e2d, + 0x452e8bc, 0x171ff646, 0x4577444, 0x172bad7a, + 0x45c0219, 0x173763c9, 0x460923b, 0x17431933, + 0x46524a9, 0x174ecdb8, 0x469b963, 0x175a8157, + 0x46e5069, 0x1766340f, 0x472e9bc, 0x1771e5e0, + 0x477855a, 0x177d96ca, 0x47c2344, 0x178946cc, + 0x480c379, 0x1794f5e6, 0x48565f9, 0x17a0a417, + 0x48a0ac4, 0x17ac515f, 0x48eb1db, 0x17b7fdbd, + 0x4935b3c, 0x17c3a931, 0x49806e7, 0x17cf53bb, + 0x49cb4dd, 0x17dafd59, 0x4a1651c, 0x17e6a60c, + 0x4a617a6, 0x17f24dd3, 0x4aacc7a, 0x17fdf4ae, + 0x4af8397, 0x18099a9c, 0x4b43cfd, 0x18153f9d, + 0x4b8f8ad, 0x1820e3b0, 0x4bdb6a6, 0x182c86d5, + 0x4c276e8, 0x1838290c, 0x4c73972, 0x1843ca53, + 0x4cbfe45, 0x184f6aab, 0x4d0c560, 0x185b0a13, + 0x4d58ec3, 0x1866a88a, 0x4da5a6f, 0x18724611, + 0x4df2862, 0x187de2a7, 0x4e3f89c, 0x18897e4a, + 0x4e8cb1e, 0x189518fc, 0x4ed9fe7, 0x18a0b2bb, + 0x4f276f7, 0x18ac4b87, 0x4f7504e, 0x18b7e35f, + 0x4fc2bec, 0x18c37a44, 0x50109d0, 0x18cf1034, + 0x505e9fb, 0x18daa52f, 0x50acc6b, 0x18e63935, + 0x50fb121, 0x18f1cc45, 0x514981d, 0x18fd5e5f, + 0x519815f, 0x1908ef82, 0x51e6ce6, 0x19147fae, + 0x5235ab2, 0x19200ee3, 0x5284ac3, 0x192b9d1f, + 0x52d3d18, 0x19372a64, 0x53231b3, 0x1942b6af, + 0x5372891, 0x194e4201, 0x53c21b4, 0x1959cc5a, + 0x5411d1b, 0x196555b8, 0x5461ac6, 0x1970de1b, + 0x54b1ab4, 0x197c6584, 0x5501ce5, 0x1987ebf0, + 0x555215a, 0x19937161, 0x55a2812, 0x199ef5d6, + 0x55f310d, 0x19aa794d, 0x5643c4a, 0x19b5fbc8, + 0x56949ca, 0x19c17d44, 0x56e598c, 0x19ccfdc2, + 0x5736b90, 0x19d87d42, 0x5787fd6, 0x19e3fbc3, + 0x57d965d, 0x19ef7944, 0x582af26, 0x19faf5c5, + 0x587ca31, 0x1a067145, 0x58ce77c, 0x1a11ebc5, + 0x5920708, 0x1a1d6544, 0x59728d5, 0x1a28ddc0, + 0x59c4ce3, 0x1a34553b, 0x5a17330, 0x1a3fcbb3, + 0x5a69bbe, 0x1a4b4128, 0x5abc68c, 0x1a56b599, + 0x5b0f399, 0x1a622907, 0x5b622e6, 0x1a6d9b70, + 0x5bb5472, 0x1a790cd4, 0x5c0883d, 0x1a847d33, + 0x5c5be47, 0x1a8fec8c, 0x5caf690, 0x1a9b5adf, + 0x5d03118, 0x1aa6c82b, 0x5d56ddd, 0x1ab23471, + 0x5daace1, 0x1abd9faf, 0x5dfee22, 0x1ac909e5, + 0x5e531a1, 0x1ad47312, 0x5ea775e, 0x1adfdb37, + 0x5efbf58, 0x1aeb4253, 0x5f5098f, 0x1af6a865, + 0x5fa5603, 0x1b020d6c, 0x5ffa4b3, 0x1b0d716a, + 0x604f5a0, 0x1b18d45c, 0x60a48c9, 0x1b243643, + 0x60f9e2e, 0x1b2f971e, 0x614f5cf, 0x1b3af6ec, + 0x61a4fac, 0x1b4655ae, 0x61fabc4, 0x1b51b363, + 0x6250a18, 0x1b5d100a, 0x62a6aa6, 0x1b686ba3, + 0x62fcd6f, 0x1b73c62d, 0x6353273, 0x1b7f1fa9, + 0x63a99b1, 0x1b8a7815, 0x6400329, 0x1b95cf71, + 0x6456edb, 0x1ba125bd, 0x64adcc7, 0x1bac7af9, + 0x6504ced, 0x1bb7cf23, 0x655bf4c, 0x1bc3223c, + 0x65b33e4, 0x1bce7442, 0x660aab5, 0x1bd9c537, + 0x66623be, 0x1be51518, 0x66b9f01, 0x1bf063e6, + 0x6711c7b, 0x1bfbb1a0, 0x6769c2e, 0x1c06fe46, + 0x67c1e18, 0x1c1249d8, 0x681a23a, 0x1c1d9454, + 0x6872894, 0x1c28ddbb, 0x68cb124, 0x1c34260c, + 0x6923bec, 0x1c3f6d47, 0x697c8eb, 0x1c4ab36b, + 0x69d5820, 0x1c55f878, 0x6a2e98b, 0x1c613c6d, + 0x6a87d2d, 0x1c6c7f4a, 0x6ae1304, 0x1c77c10e, + 0x6b3ab12, 0x1c8301b9, 0x6b94554, 0x1c8e414b, + 0x6bee1cd, 0x1c997fc4, 0x6c4807a, 0x1ca4bd21, + 0x6ca215c, 0x1caff965, 0x6cfc472, 0x1cbb348d, + 0x6d569be, 0x1cc66e99, 0x6db113d, 0x1cd1a78a, + 0x6e0baf0, 0x1cdcdf5e, 0x6e666d7, 0x1ce81615, + 0x6ec14f2, 0x1cf34baf, 0x6f1c540, 0x1cfe802b, + 0x6f777c1, 0x1d09b389, 0x6fd2c75, 0x1d14e5c9, + 0x702e35c, 0x1d2016e9, 0x7089c75, 0x1d2b46ea, + 0x70e57c0, 0x1d3675cb, 0x714153e, 0x1d41a38c, + 0x719d4ed, 0x1d4cd02c, 0x71f96ce, 0x1d57fbaa, + 0x7255ae0, 0x1d632608, 0x72b2123, 0x1d6e4f43, + 0x730e997, 0x1d79775c, 0x736b43c, 0x1d849e51, + 0x73c8111, 0x1d8fc424, 0x7425016, 0x1d9ae8d2, + 0x748214c, 0x1da60c5d, 0x74df4b1, 0x1db12ec3, + 0x753ca46, 0x1dbc5004, 0x759a20a, 0x1dc7701f, + 0x75f7bfe, 0x1dd28f15, 0x7655820, 0x1dddace4, + 0x76b3671, 0x1de8c98c, 0x77116f0, 0x1df3e50d, + 0x776f99d, 0x1dfeff67, 0x77cde79, 0x1e0a1898, + 0x782c582, 0x1e1530a1, 0x788aeb9, 0x1e204781, + 0x78e9a1d, 0x1e2b5d38, 0x79487ae, 0x1e3671c5, + 0x79a776c, 0x1e418528, 0x7a06957, 0x1e4c9760, + 0x7a65d6e, 0x1e57a86d, 0x7ac53b1, 0x1e62b84f, + 0x7b24c20, 0x1e6dc705, 0x7b846ba, 0x1e78d48e, + 0x7be4381, 0x1e83e0eb, 0x7c44272, 0x1e8eec1b, + 0x7ca438f, 0x1e99f61d, 0x7d046d6, 0x1ea4fef0, + 0x7d64c47, 0x1eb00696, 0x7dc53e3, 0x1ebb0d0d, + 0x7e25daa, 0x1ec61254, 0x7e8699a, 0x1ed1166b, + 0x7ee77b3, 0x1edc1953, 0x7f487f6, 0x1ee71b0a, + 0x7fa9a62, 0x1ef21b90, 0x800aef7, 0x1efd1ae4, + 0x806c5b5, 0x1f081907, 0x80cde9b, 0x1f1315f7, + 0x812f9a9, 0x1f1e11b5, 0x81916df, 0x1f290c3f, + 0x81f363d, 0x1f340596, 0x82557c3, 0x1f3efdb9, + 0x82b7b70, 0x1f49f4a8, 0x831a143, 0x1f54ea62, + 0x837c93e, 0x1f5fdee6, 0x83df35f, 0x1f6ad235, + 0x8441fa6, 0x1f75c44e, 0x84a4e14, 0x1f80b531, + 0x8507ea7, 0x1f8ba4dc, 0x856b160, 0x1f969350, + 0x85ce63e, 0x1fa1808c, 0x8631d42, 0x1fac6c91, + 0x869566a, 0x1fb7575c, 0x86f91b7, 0x1fc240ef, + 0x875cf28, 0x1fcd2948, 0x87c0ebd, 0x1fd81067, + 0x8825077, 0x1fe2f64c, 0x8889454, 0x1feddaf6, + 0x88eda54, 0x1ff8be65, 0x8952278, 0x2003a099, + 0x89b6cbf, 0x200e8190, 0x8a1b928, 0x2019614c, + 0x8a807b4, 0x20243fca, 0x8ae5862, 0x202f1d0b, + 0x8b4ab32, 0x2039f90f, 0x8bb0023, 0x2044d3d4, + 0x8c15736, 0x204fad5b, 0x8c7b06b, 0x205a85a3, + 0x8ce0bc0, 0x20655cac, 0x8d46936, 0x20703275, + 0x8dac8cd, 0x207b06fe, 0x8e12a84, 0x2085da46, + 0x8e78e5b, 0x2090ac4d, 0x8edf452, 0x209b7d13, + 0x8f45c68, 0x20a64c97, 0x8fac69e, 0x20b11ad9, + 0x90132f2, 0x20bbe7d8, 0x907a166, 0x20c6b395, + 0x90e11f7, 0x20d17e0d, 0x91484a8, 0x20dc4742, + 0x91af976, 0x20e70f32, 0x9217062, 0x20f1d5de, + 0x927e96b, 0x20fc9b44, 0x92e6492, 0x21075f65, + 0x934e1d6, 0x21122240, 0x93b6137, 0x211ce3d5, + 0x941e2b4, 0x2127a423, 0x948664d, 0x21326329, + 0x94eec03, 0x213d20e8, 0x95573d4, 0x2147dd5f, + 0x95bfdc1, 0x2152988d, 0x96289c9, 0x215d5273, + 0x96917ec, 0x21680b0f, 0x96fa82a, 0x2172c262, + 0x9763a83, 0x217d786a, 0x97ccef5, 0x21882d28, + 0x9836582, 0x2192e09b, 0x989fe29, 0x219d92c2, + 0x99098e9, 0x21a8439e, 0x99735c2, 0x21b2f32e, + 0x99dd4b4, 0x21bda171, 0x9a475bf, 0x21c84e67, + 0x9ab18e3, 0x21d2fa0f, 0x9b1be1e, 0x21dda46a, + 0x9b86572, 0x21e84d76, 0x9bf0edd, 0x21f2f534, + 0x9c5ba60, 0x21fd9ba3, 0x9cc67fa, 0x220840c2, + 0x9d317ab, 0x2212e492, 0x9d9c973, 0x221d8711, + 0x9e07d51, 0x2228283f, 0x9e73346, 0x2232c81c, + 0x9edeb50, 0x223d66a8, 0x9f4a570, 0x224803e2, + 0x9fb61a5, 0x22529fca, 0xa021fef, 0x225d3a5e, + 0xa08e04f, 0x2267d3a0, 0xa0fa2c3, 0x22726b8e, + 0xa16674b, 0x227d0228, 0xa1d2de7, 0x2287976e, + 0xa23f698, 0x22922b5e, 0xa2ac15b, 0x229cbdfa, + 0xa318e32, 0x22a74f40, 0xa385d1d, 0x22b1df30, + 0xa3f2e19, 0x22bc6dca, 0xa460129, 0x22c6fb0c, + 0xa4cd64b, 0x22d186f8, 0xa53ad7e, 0x22dc118c, + 0xa5a86c4, 0x22e69ac8, 0xa61621b, 0x22f122ab, + 0xa683f83, 0x22fba936, 0xa6f1efc, 0x23062e67, + 0xa760086, 0x2310b23e, 0xa7ce420, 0x231b34bc, + 0xa83c9ca, 0x2325b5df, 0xa8ab184, 0x233035a7, + 0xa919b4e, 0x233ab414, 0xa988727, 0x23453125, + 0xa9f750f, 0x234facda, 0xaa66506, 0x235a2733, + 0xaad570c, 0x2364a02e, 0xab44b1f, 0x236f17cc, + 0xabb4141, 0x23798e0d, 0xac23971, 0x238402ef, + 0xac933ae, 0x238e7673, 0xad02ff8, 0x2398e898, + 0xad72e4f, 0x23a3595e, 0xade2eb3, 0x23adc8c4, + 0xae53123, 0x23b836ca, 0xaec35a0, 0x23c2a36f, + 0xaf33c28, 0x23cd0eb3, 0xafa44bc, 0x23d77896, + 0xb014f5b, 0x23e1e117, 0xb085c05, 0x23ec4837, + 0xb0f6aba, 0x23f6adf3, 0xb167b79, 0x2401124d, + 0xb1d8e43, 0x240b7543, 0xb24a316, 0x2415d6d5, + 0xb2bb9f4, 0x24203704, 0xb32d2da, 0x242a95ce, + 0xb39edca, 0x2434f332, 0xb410ac3, 0x243f4f32, + 0xb4829c4, 0x2449a9cc, 0xb4f4acd, 0x245402ff, + 0xb566ddf, 0x245e5acc, 0xb5d92f8, 0x2468b132, + 0xb64ba19, 0x24730631, 0xb6be341, 0x247d59c8, + 0xb730e70, 0x2487abf7, 0xb7a3ba5, 0x2491fcbe, + 0xb816ae1, 0x249c4c1b, 0xb889c23, 0x24a69a0f, + 0xb8fcf6b, 0x24b0e699, 0xb9704b9, 0x24bb31ba, + 0xb9e3c0b, 0x24c57b6f, 0xba57563, 0x24cfc3ba, + 0xbacb0bf, 0x24da0a9a, 0xbb3ee20, 0x24e4500e, + 0xbbb2d85, 0x24ee9415, 0xbc26eee, 0x24f8d6b0, + 0xbc9b25a, 0x250317df, 0xbd0f7ca, 0x250d57a0, + 0xbd83f3d, 0x251795f3, 0xbdf88b3, 0x2521d2d8, + 0xbe6d42b, 0x252c0e4f, 0xbee21a5, 0x25364857, + 0xbf57121, 0x254080ef, 0xbfcc29f, 0x254ab818, + 0xc04161e, 0x2554edd1, 0xc0b6b9e, 0x255f2219, + 0xc12c31f, 0x256954f1, 0xc1a1ca0, 0x25738657, + 0xc217822, 0x257db64c, 0xc28d5a3, 0x2587e4cf, + 0xc303524, 0x259211df, 0xc3796a5, 0x259c3d7c, + 0xc3efa25, 0x25a667a7, 0xc465fa3, 0x25b0905d, + 0xc4dc720, 0x25bab7a0, 0xc55309b, 0x25c4dd6e, + 0xc5c9c14, 0x25cf01c8, 0xc64098b, 0x25d924ac, + 0xc6b78ff, 0x25e3461b, 0xc72ea70, 0x25ed6614, + 0xc7a5dde, 0x25f78497, 0xc81d349, 0x2601a1a2, + 0xc894aaf, 0x260bbd37, 0xc90c412, 0x2615d754, + 0xc983f70, 0x261feffa, 0xc9fbcca, 0x262a0727, + 0xca73c1e, 0x26341cdb, 0xcaebd6e, 0x263e3117, + 0xcb640b8, 0x264843d9, 0xcbdc5fc, 0x26525521, + 0xcc54d3a, 0x265c64ef, 0xcccd671, 0x26667342, + 0xcd461a2, 0x2670801a, 0xcdbeecc, 0x267a8b77, + 0xce37def, 0x26849558, 0xceb0f0a, 0x268e9dbd, + 0xcf2a21d, 0x2698a4a6, 0xcfa3729, 0x26a2aa11, + 0xd01ce2b, 0x26acadff, 0xd096725, 0x26b6b070, + 0xd110216, 0x26c0b162, 0xd189efe, 0x26cab0d6, + 0xd203ddc, 0x26d4aecb, 0xd27deb0, 0x26deab41, + 0xd2f817b, 0x26e8a637, 0xd37263a, 0x26f29fad, + 0xd3eccef, 0x26fc97a3, 0xd467599, 0x27068e18, + 0xd4e2037, 0x2710830c, 0xd55ccca, 0x271a767e, + 0xd5d7b50, 0x2724686e, 0xd652bcb, 0x272e58dc, + 0xd6cde39, 0x273847c8, 0xd74929a, 0x27423530, + 0xd7c48ee, 0x274c2115, 0xd840134, 0x27560b76, + 0xd8bbb6d, 0x275ff452, 0xd937798, 0x2769dbaa, + 0xd9b35b4, 0x2773c17d, 0xda2f5c2, 0x277da5cb, + 0xdaab7c0, 0x27878893, 0xdb27bb0, 0x279169d5, + 0xdba4190, 0x279b4990, 0xdc20960, 0x27a527c4, + 0xdc9d320, 0x27af0472, 0xdd19ed0, 0x27b8df97, + 0xdd96c6f, 0x27c2b934, 0xde13bfd, 0x27cc9149, + 0xde90d79, 0x27d667d5, 0xdf0e0e4, 0x27e03cd8, + 0xdf8b63d, 0x27ea1052, 0xe008d84, 0x27f3e241, + 0xe0866b8, 0x27fdb2a7, 0xe1041d9, 0x28078181, + 0xe181ee8, 0x28114ed0, 0xe1ffde2, 0x281b1a94, + 0xe27dec9, 0x2824e4cc, 0xe2fc19c, 0x282ead78, + 0xe37a65b, 0x28387498, 0xe3f8d05, 0x28423a2a, + 0xe47759a, 0x284bfe2f, 0xe4f6019, 0x2855c0a6, + 0xe574c84, 0x285f8190, 0xe5f3ad8, 0x286940ea, + 0xe672b16, 0x2872feb6, 0xe6f1d3d, 0x287cbaf3, + 0xe77114e, 0x288675a0, 0xe7f0748, 0x28902ebd, + 0xe86ff2a, 0x2899e64a, 0xe8ef8f4, 0x28a39c46, + 0xe96f4a7, 0x28ad50b1, 0xe9ef241, 0x28b7038b, + 0xea6f1c2, 0x28c0b4d2, 0xeaef32b, 0x28ca6488, + 0xeb6f67a, 0x28d412ab, 0xebefbb0, 0x28ddbf3b, + 0xec702cb, 0x28e76a37, 0xecf0bcd, 0x28f113a0, + 0xed716b4, 0x28fabb75, 0xedf2380, 0x290461b5, + 0xee73231, 0x290e0661, 0xeef42c7, 0x2917a977, + 0xef75541, 0x29214af8, 0xeff699f, 0x292aeae3, + 0xf077fe1, 0x29348937, 0xf0f9805, 0x293e25f5, + 0xf17b20d, 0x2947c11c, 0xf1fcdf8, 0x29515aab, + 0xf27ebc5, 0x295af2a3, 0xf300b74, 0x29648902, + 0xf382d05, 0x296e1dc9, 0xf405077, 0x2977b0f7, + 0xf4875ca, 0x2981428c, 0xf509cfe, 0x298ad287, + 0xf58c613, 0x299460e8, 0xf60f108, 0x299dedaf, + 0xf691ddd, 0x29a778db, 0xf714c91, 0x29b1026c, + 0xf797d24, 0x29ba8a61, 0xf81af97, 0x29c410ba, + 0xf89e3e8, 0x29cd9578, 0xf921a17, 0x29d71899, + 0xf9a5225, 0x29e09a1c, 0xfa28c10, 0x29ea1a03, + 0xfaac7d8, 0x29f3984c, 0xfb3057d, 0x29fd14f6, + 0xfbb4500, 0x2a069003, 0xfc3865e, 0x2a100970, + 0xfcbc999, 0x2a19813f, 0xfd40eaf, 0x2a22f76e, + 0xfdc55a1, 0x2a2c6bfd, 0xfe49e6d, 0x2a35deeb, + 0xfece915, 0x2a3f503a, 0xff53597, 0x2a48bfe7, + 0xffd83f4, 0x2a522df3, 0x1005d42a, 0x2a5b9a5d, + 0x100e2639, 0x2a650525, 0x10167a22, 0x2a6e6e4b, + 0x101ecfe4, 0x2a77d5ce, 0x1027277e, 0x2a813bae, + 0x102f80f1, 0x2a8a9fea, 0x1037dc3b, 0x2a940283, + 0x1040395d, 0x2a9d6377, 0x10489856, 0x2aa6c2c6, + 0x1050f926, 0x2ab02071, 0x10595bcd, 0x2ab97c77, + 0x1061c04a, 0x2ac2d6d6, 0x106a269d, 0x2acc2f90, + 0x10728ec6, 0x2ad586a3, 0x107af8c4, 0x2adedc10, + 0x10836497, 0x2ae82fd5, 0x108bd23f, 0x2af181f3, + 0x109441bb, 0x2afad269, 0x109cb30b, 0x2b042137, + 0x10a5262f, 0x2b0d6e5c, 0x10ad9b26, 0x2b16b9d9, + 0x10b611f1, 0x2b2003ac, 0x10be8a8d, 0x2b294bd5, + 0x10c704fd, 0x2b329255, 0x10cf813e, 0x2b3bd72a, + 0x10d7ff51, 0x2b451a55, 0x10e07f36, 0x2b4e5bd4, + 0x10e900ec, 0x2b579ba8, 0x10f18472, 0x2b60d9d0, + 0x10fa09c9, 0x2b6a164d, 0x110290f0, 0x2b73511c, + 0x110b19e7, 0x2b7c8a3f, 0x1113a4ad, 0x2b85c1b5, + 0x111c3142, 0x2b8ef77d, 0x1124bfa6, 0x2b982b97, + 0x112d4fd9, 0x2ba15e03, 0x1135e1d9, 0x2baa8ec0, + 0x113e75a8, 0x2bb3bdce, 0x11470b44, 0x2bbceb2d, + 0x114fa2ad, 0x2bc616dd, 0x11583be2, 0x2bcf40dc, + 0x1160d6e5, 0x2bd8692b, 0x116973b3, 0x2be18fc9, + 0x1172124d, 0x2beab4b6, 0x117ab2b3, 0x2bf3d7f2, + 0x118354e4, 0x2bfcf97c, 0x118bf8e0, 0x2c061953, + 0x11949ea6, 0x2c0f3779, 0x119d4636, 0x2c1853eb, + 0x11a5ef90, 0x2c216eaa, 0x11ae9ab4, 0x2c2a87b6, + 0x11b747a0, 0x2c339f0e, 0x11bff656, 0x2c3cb4b1, + 0x11c8a6d4, 0x2c45c8a0, 0x11d1591a, 0x2c4edada, + 0x11da0d28, 0x2c57eb5e, 0x11e2c2fd, 0x2c60fa2d, + 0x11eb7a9a, 0x2c6a0746, 0x11f433fd, 0x2c7312a9, + 0x11fcef27, 0x2c7c1c55, 0x1205ac17, 0x2c85244a, + 0x120e6acc, 0x2c8e2a87, 0x12172b48, 0x2c972f0d, + 0x121fed88, 0x2ca031da, 0x1228b18d, 0x2ca932ef, + 0x12317756, 0x2cb2324c, 0x123a3ee4, 0x2cbb2fef, + 0x12430835, 0x2cc42bd9, 0x124bd34a, 0x2ccd2609, + 0x1254a021, 0x2cd61e7f, 0x125d6ebc, 0x2cdf153a, + 0x12663f19, 0x2ce80a3a, 0x126f1138, 0x2cf0fd80, + 0x1277e518, 0x2cf9ef09, 0x1280babb, 0x2d02ded7, + 0x1289921e, 0x2d0bcce8, 0x12926b41, 0x2d14b93d, + 0x129b4626, 0x2d1da3d5, 0x12a422ca, 0x2d268cb0, + 0x12ad012e, 0x2d2f73cd, 0x12b5e151, 0x2d38592c, + 0x12bec333, 0x2d413ccd, 0x12c7a6d4, 0x2d4a1eaf, + 0x12d08c33, 0x2d52fed2, 0x12d97350, 0x2d5bdd36, + 0x12e25c2b, 0x2d64b9da, 0x12eb46c3, 0x2d6d94bf, + 0x12f43318, 0x2d766de2, 0x12fd2129, 0x2d7f4545, + 0x130610f7, 0x2d881ae8, 0x130f0280, 0x2d90eec8, + 0x1317f5c6, 0x2d99c0e7, 0x1320eac6, 0x2da29144, + 0x1329e181, 0x2dab5fdf, 0x1332d9f7, 0x2db42cb6, + 0x133bd427, 0x2dbcf7cb, 0x1344d011, 0x2dc5c11c, + 0x134dcdb4, 0x2dce88aa, 0x1356cd11, 0x2dd74e73, + 0x135fce26, 0x2de01278, 0x1368d0f3, 0x2de8d4b8, + 0x1371d579, 0x2df19534, 0x137adbb6, 0x2dfa53e9, + 0x1383e3ab, 0x2e0310d9, 0x138ced57, 0x2e0bcc03, + 0x1395f8ba, 0x2e148566, 0x139f05d3, 0x2e1d3d03, + 0x13a814a2, 0x2e25f2d8, 0x13b12526, 0x2e2ea6e6, + 0x13ba3760, 0x2e37592c, 0x13c34b4f, 0x2e4009aa, + 0x13cc60f2, 0x2e48b860, 0x13d5784a, 0x2e51654c, + 0x13de9156, 0x2e5a1070, 0x13e7ac15, 0x2e62b9ca, + 0x13f0c887, 0x2e6b615a, 0x13f9e6ad, 0x2e740720, + 0x14030684, 0x2e7cab1c, 0x140c280e, 0x2e854d4d, + 0x14154b4a, 0x2e8dedb3, 0x141e7037, 0x2e968c4d, + 0x142796d5, 0x2e9f291b, 0x1430bf24, 0x2ea7c41e, + 0x1439e923, 0x2eb05d53, 0x144314d3, 0x2eb8f4bc, + 0x144c4232, 0x2ec18a58, 0x14557140, 0x2eca1e27, + 0x145ea1fd, 0x2ed2b027, 0x1467d469, 0x2edb405a, + 0x14710883, 0x2ee3cebe, 0x147a3e4b, 0x2eec5b53, + 0x148375c1, 0x2ef4e619, 0x148caee4, 0x2efd6f10, + 0x1495e9b3, 0x2f05f637, 0x149f2630, 0x2f0e7b8e, + 0x14a86458, 0x2f16ff14, 0x14b1a42c, 0x2f1f80ca, + 0x14bae5ab, 0x2f2800af, 0x14c428d6, 0x2f307ec2, + 0x14cd6dab, 0x2f38fb03, 0x14d6b42b, 0x2f417573, + 0x14dffc54, 0x2f49ee0f, 0x14e94627, 0x2f5264da, + 0x14f291a4, 0x2f5ad9d1, 0x14fbdec9, 0x2f634cf5, + 0x15052d97, 0x2f6bbe45, 0x150e7e0d, 0x2f742dc1, + 0x1517d02b, 0x2f7c9b69, 0x152123f0, 0x2f85073c, + 0x152a795d, 0x2f8d713a, 0x1533d070, 0x2f95d963, + 0x153d292a, 0x2f9e3fb6, 0x15468389, 0x2fa6a433, + 0x154fdf8f, 0x2faf06da, 0x15593d3a, 0x2fb767aa, + 0x15629c89, 0x2fbfc6a3, 0x156bfd7d, 0x2fc823c5, + 0x15756016, 0x2fd07f0f, 0x157ec452, 0x2fd8d882, + 0x15882a32, 0x2fe1301c, 0x159191b5, 0x2fe985de, + 0x159afadb, 0x2ff1d9c7, 0x15a465a3, 0x2ffa2bd6, + 0x15add20d, 0x30027c0c, 0x15b74019, 0x300aca69, + 0x15c0afc6, 0x301316eb, 0x15ca2115, 0x301b6193, + 0x15d39403, 0x3023aa5f, 0x15dd0892, 0x302bf151, + 0x15e67ec1, 0x30343667, 0x15eff690, 0x303c79a2, + 0x15f96ffd, 0x3044bb00, 0x1602eb0a, 0x304cfa83, + 0x160c67b4, 0x30553828, 0x1615e5fd, 0x305d73f0, + 0x161f65e4, 0x3065addb, 0x1628e767, 0x306de5e9, + 0x16326a88, 0x30761c18, 0x163bef46, 0x307e5069, + 0x1645759f, 0x308682dc, 0x164efd94, 0x308eb36f, + 0x16588725, 0x3096e223, 0x16621251, 0x309f0ef8, + 0x166b9f18, 0x30a739ed, 0x16752d79, 0x30af6302, + 0x167ebd74, 0x30b78a36, 0x16884f09, 0x30bfaf89, + 0x1691e237, 0x30c7d2fb, 0x169b76fe, 0x30cff48c, + 0x16a50d5d, 0x30d8143b, 0x16aea555, 0x30e03208, + 0x16b83ee4, 0x30e84df3, 0x16c1da0b, 0x30f067fb, + 0x16cb76c9, 0x30f8801f, 0x16d5151d, 0x31009661, + 0x16deb508, 0x3108aabf, 0x16e85689, 0x3110bd39, + 0x16f1f99f, 0x3118cdcf, 0x16fb9e4b, 0x3120dc80, + 0x1705448b, 0x3128e94c, 0x170eec60, 0x3130f433, + 0x171895c9, 0x3138fd35, 0x172240c5, 0x31410450, + 0x172bed55, 0x31490986, 0x17359b78, 0x31510cd5, + 0x173f4b2e, 0x31590e3e, 0x1748fc75, 0x31610dbf, + 0x1752af4f, 0x31690b59, 0x175c63ba, 0x3171070c, + 0x176619b6, 0x317900d6, 0x176fd143, 0x3180f8b8, + 0x17798a60, 0x3188eeb2, 0x1783450d, 0x3190e2c3, + 0x178d014a, 0x3198d4ea, 0x1796bf16, 0x31a0c528, + 0x17a07e70, 0x31a8b37c, 0x17aa3f5a, 0x31b09fe7, + 0x17b401d1, 0x31b88a66, 0x17bdc5d6, 0x31c072fb, + 0x17c78b68, 0x31c859a5, 0x17d15288, 0x31d03e64, + 0x17db1b34, 0x31d82137, 0x17e4e56c, 0x31e0021e, + 0x17eeb130, 0x31e7e118, 0x17f87e7f, 0x31efbe27, + 0x18024d59, 0x31f79948, 0x180c1dbf, 0x31ff727c, + 0x1815efae, 0x320749c3, 0x181fc328, 0x320f1f1c, + 0x1829982b, 0x3216f287, 0x18336eb7, 0x321ec403, + 0x183d46cc, 0x32269391, 0x18472069, 0x322e6130, + 0x1850fb8e, 0x32362ce0, 0x185ad83c, 0x323df6a0, + 0x1864b670, 0x3245be70, 0x186e962b, 0x324d8450, + 0x1878776d, 0x32554840, 0x18825a35, 0x325d0a3e, + 0x188c3e83, 0x3264ca4c, 0x18962456, 0x326c8868, + 0x18a00bae, 0x32744493, 0x18a9f48a, 0x327bfecc, + 0x18b3deeb, 0x3283b712, 0x18bdcad0, 0x328b6d66, + 0x18c7b838, 0x329321c7, 0x18d1a724, 0x329ad435, + 0x18db9792, 0x32a284b0, 0x18e58982, 0x32aa3336, + 0x18ef7cf4, 0x32b1dfc9, 0x18f971e8, 0x32b98a67, + 0x1903685d, 0x32c13311, 0x190d6053, 0x32c8d9c6, + 0x191759c9, 0x32d07e85, 0x192154bf, 0x32d82150, + 0x192b5135, 0x32dfc224, 0x19354f2a, 0x32e76102, + 0x193f4e9e, 0x32eefdea, 0x19494f90, 0x32f698db, + 0x19535201, 0x32fe31d5, 0x195d55ef, 0x3305c8d7, + 0x19675b5a, 0x330d5de3, 0x19716243, 0x3314f0f6, + 0x197b6aa8, 0x331c8211, 0x19857489, 0x33241134, + 0x198f7fe6, 0x332b9e5e, 0x19998cbe, 0x3333298f, + 0x19a39b11, 0x333ab2c6, 0x19adaadf, 0x33423a04, + 0x19b7bc27, 0x3349bf48, 0x19c1cee9, 0x33514292, + 0x19cbe325, 0x3358c3e2, 0x19d5f8d9, 0x33604336, + 0x19e01006, 0x3367c090, 0x19ea28ac, 0x336f3bee, + 0x19f442c9, 0x3376b551, 0x19fe5e5e, 0x337e2cb7, + 0x1a087b69, 0x3385a222, 0x1a1299ec, 0x338d1590, + 0x1a1cb9e5, 0x33948701, 0x1a26db54, 0x339bf675, + 0x1a30fe38, 0x33a363ec, 0x1a3b2292, 0x33aacf65, + 0x1a454860, 0x33b238e0, 0x1a4f6fa3, 0x33b9a05d, + 0x1a599859, 0x33c105db, 0x1a63c284, 0x33c8695b, + 0x1a6dee21, 0x33cfcadc, 0x1a781b31, 0x33d72a5d, + 0x1a8249b4, 0x33de87de, 0x1a8c79a9, 0x33e5e360, + 0x1a96ab0f, 0x33ed3ce1, 0x1aa0dde7, 0x33f49462, + 0x1aab122f, 0x33fbe9e2, 0x1ab547e8, 0x34033d61, + 0x1abf7f11, 0x340a8edf, 0x1ac9b7a9, 0x3411de5b, + 0x1ad3f1b1, 0x34192bd5, 0x1ade2d28, 0x3420774d, + 0x1ae86a0d, 0x3427c0c3, 0x1af2a860, 0x342f0836, + 0x1afce821, 0x34364da6, 0x1b072950, 0x343d9112, + 0x1b116beb, 0x3444d27b, 0x1b1baff2, 0x344c11e0, + 0x1b25f566, 0x34534f41, 0x1b303c46, 0x345a8a9d, + 0x1b3a8491, 0x3461c3f5, 0x1b44ce46, 0x3468fb47, + 0x1b4f1967, 0x34703095, 0x1b5965f1, 0x347763dd, + 0x1b63b3e5, 0x347e951f, 0x1b6e0342, 0x3485c45b, + 0x1b785409, 0x348cf190, 0x1b82a638, 0x34941cbf, + 0x1b8cf9cf, 0x349b45e7, 0x1b974ece, 0x34a26d08, + 0x1ba1a534, 0x34a99221, 0x1babfd01, 0x34b0b533, + 0x1bb65634, 0x34b7d63c, 0x1bc0b0ce, 0x34bef53d, + 0x1bcb0cce, 0x34c61236, 0x1bd56a32, 0x34cd2d26, + 0x1bdfc8fc, 0x34d4460c, 0x1bea292b, 0x34db5cea, + 0x1bf48abd, 0x34e271bd, 0x1bfeedb3, 0x34e98487, + 0x1c09520d, 0x34f09546, 0x1c13b7c9, 0x34f7a3fb, + 0x1c1e1ee9, 0x34feb0a5, 0x1c28876a, 0x3505bb44, + 0x1c32f14d, 0x350cc3d8, 0x1c3d5c91, 0x3513ca60, + 0x1c47c936, 0x351acedd, 0x1c52373c, 0x3521d14d, + 0x1c5ca6a2, 0x3528d1b1, 0x1c671768, 0x352fd008, + 0x1c71898d, 0x3536cc52, 0x1c7bfd11, 0x353dc68f, + 0x1c8671f3, 0x3544bebf, 0x1c90e834, 0x354bb4e1, + 0x1c9b5fd2, 0x3552a8f4, 0x1ca5d8cd, 0x35599afa, + 0x1cb05326, 0x35608af1, 0x1cbacedb, 0x356778d9, + 0x1cc54bec, 0x356e64b2, 0x1ccfca59, 0x35754e7c, + 0x1cda4a21, 0x357c3636, 0x1ce4cb44, 0x35831be0, + 0x1cef4dc2, 0x3589ff7a, 0x1cf9d199, 0x3590e104, + 0x1d0456ca, 0x3597c07d, 0x1d0edd55, 0x359e9de5, + 0x1d196538, 0x35a5793c, 0x1d23ee74, 0x35ac5282, + 0x1d2e7908, 0x35b329b5, 0x1d3904f4, 0x35b9fed7, + 0x1d439236, 0x35c0d1e7, 0x1d4e20d0, 0x35c7a2e3, + 0x1d58b0c0, 0x35ce71ce, 0x1d634206, 0x35d53ea5, + 0x1d6dd4a2, 0x35dc0968, 0x1d786892, 0x35e2d219, + 0x1d82fdd8, 0x35e998b5, 0x1d8d9472, 0x35f05d3d, + 0x1d982c60, 0x35f71fb1, 0x1da2c5a2, 0x35fde011, + 0x1dad6036, 0x36049e5b, 0x1db7fc1e, 0x360b5a90, + 0x1dc29958, 0x361214b0, 0x1dcd37e4, 0x3618ccba, + 0x1dd7d7c1, 0x361f82af, 0x1de278ef, 0x3626368d, + 0x1ded1b6e, 0x362ce855, 0x1df7bf3e, 0x36339806, + 0x1e02645d, 0x363a45a0, 0x1e0d0acc, 0x3640f123, + 0x1e17b28a, 0x36479a8e, 0x1e225b96, 0x364e41e2, + 0x1e2d05f1, 0x3654e71d, 0x1e37b199, 0x365b8a41, + 0x1e425e8f, 0x36622b4c, 0x1e4d0cd2, 0x3668ca3e, + 0x1e57bc62, 0x366f6717, 0x1e626d3e, 0x367601d7, + 0x1e6d1f65, 0x367c9a7e, 0x1e77d2d8, 0x3683310b, + 0x1e828796, 0x3689c57d, 0x1e8d3d9e, 0x369057d6, + 0x1e97f4f1, 0x3696e814, 0x1ea2ad8d, 0x369d7637, + 0x1ead6773, 0x36a4023f, 0x1eb822a1, 0x36aa8c2c, + 0x1ec2df18, 0x36b113fd, 0x1ecd9cd7, 0x36b799b3, + 0x1ed85bdd, 0x36be1d4c, 0x1ee31c2b, 0x36c49ec9, + 0x1eedddc0, 0x36cb1e2a, 0x1ef8a09b, 0x36d19b6e, + 0x1f0364bc, 0x36d81695, 0x1f0e2a22, 0x36de8f9e, + 0x1f18f0ce, 0x36e5068a, 0x1f23b8be, 0x36eb7b58, + 0x1f2e81f3, 0x36f1ee09, 0x1f394c6b, 0x36f85e9a, + 0x1f441828, 0x36fecd0e, 0x1f4ee527, 0x37053962, + 0x1f59b369, 0x370ba398, 0x1f6482ed, 0x37120bae, + 0x1f6f53b3, 0x371871a5, 0x1f7a25ba, 0x371ed57c, + 0x1f84f902, 0x37253733, 0x1f8fcd8b, 0x372b96ca, + 0x1f9aa354, 0x3731f440, 0x1fa57a5d, 0x37384f95, + 0x1fb052a5, 0x373ea8ca, 0x1fbb2c2c, 0x3744ffdd, + 0x1fc606f1, 0x374b54ce, 0x1fd0e2f5, 0x3751a79e, + 0x1fdbc036, 0x3757f84c, 0x1fe69eb4, 0x375e46d8, + 0x1ff17e70, 0x37649341, 0x1ffc5f67, 0x376add88, + 0x2007419b, 0x377125ac, 0x2012250a, 0x37776bac, + 0x201d09b4, 0x377daf89, 0x2027ef99, 0x3783f143, + 0x2032d6b8, 0x378a30d8, 0x203dbf11, 0x37906e49, + 0x2048a8a4, 0x3796a996, 0x2053936f, 0x379ce2be, + 0x205e7f74, 0x37a319c2, 0x20696cb0, 0x37a94ea0, + 0x20745b24, 0x37af8159, 0x207f4acf, 0x37b5b1ec, + 0x208a3bb2, 0x37bbe05a, 0x20952dcb, 0x37c20ca1, + 0x20a0211a, 0x37c836c2, 0x20ab159e, 0x37ce5ebd, + 0x20b60b58, 0x37d48490, 0x20c10247, 0x37daa83d, + 0x20cbfa6a, 0x37e0c9c3, 0x20d6f3c1, 0x37e6e921, + 0x20e1ee4b, 0x37ed0657, 0x20ecea09, 0x37f32165, + 0x20f7e6f9, 0x37f93a4b, 0x2102e51c, 0x37ff5109, + 0x210de470, 0x3805659e, 0x2118e4f6, 0x380b780a, + 0x2123e6ad, 0x3811884d, 0x212ee995, 0x38179666, + 0x2139edac, 0x381da256, 0x2144f2f3, 0x3823ac1d, + 0x214ff96a, 0x3829b3b9, 0x215b0110, 0x382fb92a, + 0x216609e3, 0x3835bc71, 0x217113e5, 0x383bbd8e, + 0x217c1f15, 0x3841bc7f, 0x21872b72, 0x3847b946, + 0x219238fb, 0x384db3e0, 0x219d47b1, 0x3853ac4f, + 0x21a85793, 0x3859a292, 0x21b368a0, 0x385f96a9, + 0x21be7ad8, 0x38658894, 0x21c98e3b, 0x386b7852, + 0x21d4a2c8, 0x387165e3, 0x21dfb87f, 0x38775147, + 0x21eacf5f, 0x387d3a7e, 0x21f5e768, 0x38832187, + 0x22010099, 0x38890663, 0x220c1af3, 0x388ee910, + 0x22173674, 0x3894c98f, 0x2222531c, 0x389aa7e0, + 0x222d70eb, 0x38a08402, 0x22388fe1, 0x38a65df6, + 0x2243affc, 0x38ac35ba, 0x224ed13d, 0x38b20b4f, + 0x2259f3a3, 0x38b7deb4, 0x2265172e, 0x38bdafea, + 0x22703bdc, 0x38c37eef, 0x227b61af, 0x38c94bc4, + 0x228688a4, 0x38cf1669, 0x2291b0bd, 0x38d4dedd, + 0x229cd9f8, 0x38daa520, 0x22a80456, 0x38e06932, + 0x22b32fd4, 0x38e62b13, 0x22be5c74, 0x38ebeac2, + 0x22c98a35, 0x38f1a840, 0x22d4b916, 0x38f7638b, + 0x22dfe917, 0x38fd1ca4, 0x22eb1a37, 0x3902d38b, + 0x22f64c77, 0x3908883f, 0x23017fd5, 0x390e3ac0, + 0x230cb451, 0x3913eb0e, 0x2317e9eb, 0x39199929, + 0x232320a2, 0x391f4510, 0x232e5876, 0x3924eec3, + 0x23399167, 0x392a9642, 0x2344cb73, 0x39303b8e, + 0x2350069b, 0x3935dea4, 0x235b42df, 0x393b7f86, + 0x2366803c, 0x39411e33, 0x2371beb5, 0x3946baac, + 0x237cfe47, 0x394c54ee, 0x23883ef2, 0x3951ecfc, + 0x239380b6, 0x395782d3, 0x239ec393, 0x395d1675, + 0x23aa0788, 0x3962a7e0, 0x23b54c95, 0x39683715, + 0x23c092b9, 0x396dc414, 0x23cbd9f4, 0x39734edc, + 0x23d72245, 0x3978d76c, 0x23e26bac, 0x397e5dc6, + 0x23edb628, 0x3983e1e8, 0x23f901ba, 0x398963d2, + 0x24044e60, 0x398ee385, 0x240f9c1a, 0x399460ff, + 0x241aeae8, 0x3999dc42, 0x24263ac9, 0x399f554b, + 0x24318bbe, 0x39a4cc1c, 0x243cddc4, 0x39aa40b4, + 0x244830dd, 0x39afb313, 0x24538507, 0x39b52339, + 0x245eda43, 0x39ba9125, 0x246a308f, 0x39bffcd7, + 0x247587eb, 0x39c5664f, 0x2480e057, 0x39cacd8d, + 0x248c39d3, 0x39d03291, 0x2497945d, 0x39d5955a, + 0x24a2eff6, 0x39daf5e8, 0x24ae4c9d, 0x39e0543c, + 0x24b9aa52, 0x39e5b054, 0x24c50914, 0x39eb0a31, + 0x24d068e2, 0x39f061d2, 0x24dbc9bd, 0x39f5b737, + 0x24e72ba4, 0x39fb0a60, 0x24f28e96, 0x3a005b4d, + 0x24fdf294, 0x3a05a9fd, 0x2509579b, 0x3a0af671, + 0x2514bdad, 0x3a1040a8, 0x252024c9, 0x3a1588a2, + 0x252b8cee, 0x3a1ace5f, 0x2536f61b, 0x3a2011de, + 0x25426051, 0x3a25531f, 0x254dcb8f, 0x3a2a9223, + 0x255937d5, 0x3a2fcee8, 0x2564a521, 0x3a350970, + 0x25701374, 0x3a3a41b9, 0x257b82cd, 0x3a3f77c3, + 0x2586f32c, 0x3a44ab8e, 0x25926490, 0x3a49dd1a, + 0x259dd6f9, 0x3a4f0c67, 0x25a94a67, 0x3a543974, + 0x25b4bed8, 0x3a596442, 0x25c0344d, 0x3a5e8cd0, + 0x25cbaac5, 0x3a63b31d, 0x25d72240, 0x3a68d72b, + 0x25e29abc, 0x3a6df8f8, 0x25ee143b, 0x3a731884, + 0x25f98ebb, 0x3a7835cf, 0x26050a3b, 0x3a7d50da, + 0x261086bc, 0x3a8269a3, 0x261c043d, 0x3a87802a, + 0x262782be, 0x3a8c9470, 0x2633023e, 0x3a91a674, + 0x263e82bc, 0x3a96b636, 0x264a0438, 0x3a9bc3b6, + 0x265586b3, 0x3aa0cef3, 0x26610a2a, 0x3aa5d7ee, + 0x266c8e9f, 0x3aaadea6, 0x26781410, 0x3aafe31b, + 0x26839a7c, 0x3ab4e54c, 0x268f21e5, 0x3ab9e53a, + 0x269aaa48, 0x3abee2e5, 0x26a633a6, 0x3ac3de4c, + 0x26b1bdff, 0x3ac8d76f, 0x26bd4951, 0x3acdce4d, + 0x26c8d59c, 0x3ad2c2e8, 0x26d462e1, 0x3ad7b53d, + 0x26dff11d, 0x3adca54e, 0x26eb8052, 0x3ae1931a, + 0x26f7107e, 0x3ae67ea1, 0x2702a1a1, 0x3aeb67e3, + 0x270e33bb, 0x3af04edf, 0x2719c6cb, 0x3af53395, + 0x27255ad1, 0x3afa1605, 0x2730efcc, 0x3afef630, + 0x273c85bc, 0x3b03d414, 0x27481ca1, 0x3b08afb2, + 0x2753b479, 0x3b0d8909, 0x275f4d45, 0x3b126019, + 0x276ae704, 0x3b1734e2, 0x277681b6, 0x3b1c0764, + 0x27821d59, 0x3b20d79e, 0x278db9ef, 0x3b25a591, + 0x27995776, 0x3b2a713d, 0x27a4f5ed, 0x3b2f3aa0, + 0x27b09555, 0x3b3401bb, 0x27bc35ad, 0x3b38c68e, + 0x27c7d6f4, 0x3b3d8918, 0x27d3792b, 0x3b42495a, + 0x27df1c50, 0x3b470753, 0x27eac063, 0x3b4bc303, + 0x27f66564, 0x3b507c69, 0x28020b52, 0x3b553386, + 0x280db22d, 0x3b59e85a, 0x281959f4, 0x3b5e9ae4, + 0x282502a7, 0x3b634b23, 0x2830ac45, 0x3b67f919, + 0x283c56cf, 0x3b6ca4c4, 0x28480243, 0x3b714e25, + 0x2853aea1, 0x3b75f53c, 0x285f5be9, 0x3b7a9a07, + 0x286b0a1a, 0x3b7f3c87, 0x2876b934, 0x3b83dcbc, + 0x28826936, 0x3b887aa6, 0x288e1a20, 0x3b8d1644, + 0x2899cbf1, 0x3b91af97, 0x28a57ea9, 0x3b96469d, + 0x28b13248, 0x3b9adb57, 0x28bce6cd, 0x3b9f6dc5, + 0x28c89c37, 0x3ba3fde7, 0x28d45286, 0x3ba88bbc, + 0x28e009ba, 0x3bad1744, 0x28ebc1d3, 0x3bb1a080, + 0x28f77acf, 0x3bb6276e, 0x290334af, 0x3bbaac0e, + 0x290eef71, 0x3bbf2e62, 0x291aab16, 0x3bc3ae67, + 0x2926679c, 0x3bc82c1f, 0x29322505, 0x3bcca789, + 0x293de34e, 0x3bd120a4, 0x2949a278, 0x3bd59771, + 0x29556282, 0x3bda0bf0, 0x2961236c, 0x3bde7e20, + 0x296ce535, 0x3be2ee01, 0x2978a7dd, 0x3be75b93, + 0x29846b63, 0x3bebc6d5, 0x29902fc7, 0x3bf02fc9, + 0x299bf509, 0x3bf4966c, 0x29a7bb28, 0x3bf8fac0, + 0x29b38223, 0x3bfd5cc4, 0x29bf49fa, 0x3c01bc78, + 0x29cb12ad, 0x3c0619dc, 0x29d6dc3b, 0x3c0a74f0, + 0x29e2a6a3, 0x3c0ecdb2, 0x29ee71e6, 0x3c132424, + 0x29fa3e03, 0x3c177845, 0x2a060af9, 0x3c1bca16, + 0x2a11d8c8, 0x3c201994, 0x2a1da770, 0x3c2466c2, + 0x2a2976ef, 0x3c28b19e, 0x2a354746, 0x3c2cfa28, + 0x2a411874, 0x3c314060, 0x2a4cea79, 0x3c358446, + 0x2a58bd54, 0x3c39c5da, 0x2a649105, 0x3c3e051b, + 0x2a70658a, 0x3c42420a, 0x2a7c3ae5, 0x3c467ca6, + 0x2a881114, 0x3c4ab4ef, 0x2a93e817, 0x3c4eeae5, + 0x2a9fbfed, 0x3c531e88, 0x2aab9896, 0x3c574fd8, + 0x2ab77212, 0x3c5b7ed4, 0x2ac34c60, 0x3c5fab7c, + 0x2acf277f, 0x3c63d5d1, 0x2adb0370, 0x3c67fdd1, + 0x2ae6e031, 0x3c6c237e, 0x2af2bdc3, 0x3c7046d6, + 0x2afe9c24, 0x3c7467d9, 0x2b0a7b54, 0x3c788688, + 0x2b165b54, 0x3c7ca2e2, 0x2b223c22, 0x3c80bce7, + 0x2b2e1dbe, 0x3c84d496, 0x2b3a0027, 0x3c88e9f1, + 0x2b45e35d, 0x3c8cfcf6, 0x2b51c760, 0x3c910da5, + 0x2b5dac2f, 0x3c951bff, 0x2b6991ca, 0x3c992803, + 0x2b75782f, 0x3c9d31b0, 0x2b815f60, 0x3ca13908, + 0x2b8d475b, 0x3ca53e09, 0x2b99301f, 0x3ca940b3, + 0x2ba519ad, 0x3cad4107, 0x2bb10404, 0x3cb13f04, + 0x2bbcef23, 0x3cb53aaa, 0x2bc8db0b, 0x3cb933f9, + 0x2bd4c7ba, 0x3cbd2af0, 0x2be0b52f, 0x3cc11f90, + 0x2beca36c, 0x3cc511d9, 0x2bf8926f, 0x3cc901c9, + 0x2c048237, 0x3cccef62, 0x2c1072c4, 0x3cd0daa2, + 0x2c1c6417, 0x3cd4c38b, 0x2c28562d, 0x3cd8aa1b, + 0x2c344908, 0x3cdc8e52, 0x2c403ca5, 0x3ce07031, + 0x2c4c3106, 0x3ce44fb7, 0x2c582629, 0x3ce82ce4, + 0x2c641c0e, 0x3cec07b8, 0x2c7012b5, 0x3cefe032, + 0x2c7c0a1d, 0x3cf3b653, 0x2c880245, 0x3cf78a1b, + 0x2c93fb2e, 0x3cfb5b89, 0x2c9ff4d6, 0x3cff2a9d, + 0x2cabef3d, 0x3d02f757, 0x2cb7ea63, 0x3d06c1b6, + 0x2cc3e648, 0x3d0a89bc, 0x2ccfe2ea, 0x3d0e4f67, + 0x2cdbe04a, 0x3d1212b7, 0x2ce7de66, 0x3d15d3ad, + 0x2cf3dd3f, 0x3d199248, 0x2cffdcd4, 0x3d1d4e88, + 0x2d0bdd25, 0x3d21086c, 0x2d17de31, 0x3d24bff6, + 0x2d23dff7, 0x3d287523, 0x2d2fe277, 0x3d2c27f6, + 0x2d3be5b1, 0x3d2fd86c, 0x2d47e9a5, 0x3d338687, + 0x2d53ee51, 0x3d373245, 0x2d5ff3b5, 0x3d3adba7, + 0x2d6bf9d1, 0x3d3e82ae, 0x2d7800a5, 0x3d422757, + 0x2d84082f, 0x3d45c9a4, 0x2d901070, 0x3d496994, + 0x2d9c1967, 0x3d4d0728, 0x2da82313, 0x3d50a25e, + 0x2db42d74, 0x3d543b37, 0x2dc0388a, 0x3d57d1b3, + 0x2dcc4454, 0x3d5b65d2, 0x2dd850d2, 0x3d5ef793, + 0x2de45e03, 0x3d6286f6, 0x2df06be6, 0x3d6613fb, + 0x2dfc7a7c, 0x3d699ea3, 0x2e0889c4, 0x3d6d26ec, + 0x2e1499bd, 0x3d70acd7, 0x2e20aa67, 0x3d743064, + 0x2e2cbbc1, 0x3d77b192, 0x2e38cdcb, 0x3d7b3061, + 0x2e44e084, 0x3d7eacd2, 0x2e50f3ed, 0x3d8226e4, + 0x2e5d0804, 0x3d859e96, 0x2e691cc9, 0x3d8913ea, + 0x2e75323c, 0x3d8c86de, 0x2e81485c, 0x3d8ff772, + 0x2e8d5f29, 0x3d9365a8, 0x2e9976a1, 0x3d96d17d, + 0x2ea58ec6, 0x3d9a3af2, 0x2eb1a796, 0x3d9da208, + 0x2ebdc110, 0x3da106bd, 0x2ec9db35, 0x3da46912, + 0x2ed5f604, 0x3da7c907, 0x2ee2117c, 0x3dab269b, + 0x2eee2d9d, 0x3dae81cf, 0x2efa4a67, 0x3db1daa2, + 0x2f0667d9, 0x3db53113, 0x2f1285f2, 0x3db88524, + 0x2f1ea4b2, 0x3dbbd6d4, 0x2f2ac419, 0x3dbf2622, + 0x2f36e426, 0x3dc2730f, 0x2f4304d8, 0x3dc5bd9b, + 0x2f4f2630, 0x3dc905c5, 0x2f5b482d, 0x3dcc4b8d, + 0x2f676ace, 0x3dcf8ef3, 0x2f738e12, 0x3dd2cff7, + 0x2f7fb1fa, 0x3dd60e99, 0x2f8bd685, 0x3dd94ad8, + 0x2f97fbb2, 0x3ddc84b5, 0x2fa42181, 0x3ddfbc30, + 0x2fb047f2, 0x3de2f148, 0x2fbc6f03, 0x3de623fd, + 0x2fc896b5, 0x3de9544f, 0x2fd4bf08, 0x3dec823e, + 0x2fe0e7f9, 0x3defadca, 0x2fed118a, 0x3df2d6f3, + 0x2ff93bba, 0x3df5fdb8, 0x30056687, 0x3df9221a, + 0x301191f3, 0x3dfc4418, 0x301dbdfb, 0x3dff63b2, + 0x3029eaa1, 0x3e0280e9, 0x303617e2, 0x3e059bbb, + 0x304245c0, 0x3e08b42a, 0x304e7438, 0x3e0bca34, + 0x305aa34c, 0x3e0eddd9, 0x3066d2fa, 0x3e11ef1b, + 0x30730342, 0x3e14fdf7, 0x307f3424, 0x3e180a6f, + 0x308b659f, 0x3e1b1482, 0x309797b2, 0x3e1e1c30, + 0x30a3ca5d, 0x3e212179, 0x30affda0, 0x3e24245d, + 0x30bc317a, 0x3e2724db, 0x30c865ea, 0x3e2a22f4, + 0x30d49af1, 0x3e2d1ea8, 0x30e0d08d, 0x3e3017f6, + 0x30ed06bf, 0x3e330ede, 0x30f93d86, 0x3e360360, + 0x310574e0, 0x3e38f57c, 0x3111accf, 0x3e3be532, + 0x311de551, 0x3e3ed282, 0x312a1e66, 0x3e41bd6c, + 0x3136580d, 0x3e44a5ef, 0x31429247, 0x3e478c0b, + 0x314ecd11, 0x3e4a6fc1, 0x315b086d, 0x3e4d5110, + 0x31674459, 0x3e502ff9, 0x317380d6, 0x3e530c7a, + 0x317fbde2, 0x3e55e694, 0x318bfb7d, 0x3e58be47, + 0x319839a6, 0x3e5b9392, 0x31a4785e, 0x3e5e6676, + 0x31b0b7a4, 0x3e6136f3, 0x31bcf777, 0x3e640507, + 0x31c937d6, 0x3e66d0b4, 0x31d578c2, 0x3e6999fa, + 0x31e1ba3a, 0x3e6c60d7, 0x31edfc3d, 0x3e6f254c, + 0x31fa3ecb, 0x3e71e759, 0x320681e3, 0x3e74a6fd, + 0x3212c585, 0x3e77643a, 0x321f09b1, 0x3e7a1f0d, + 0x322b4e66, 0x3e7cd778, 0x323793a3, 0x3e7f8d7b, + 0x3243d968, 0x3e824114, 0x32501fb5, 0x3e84f245, + 0x325c6688, 0x3e87a10c, 0x3268ade3, 0x3e8a4d6a, + 0x3274f5c3, 0x3e8cf75f, 0x32813e2a, 0x3e8f9eeb, + 0x328d8715, 0x3e92440d, 0x3299d085, 0x3e94e6c6, + 0x32a61a7a, 0x3e978715, 0x32b264f2, 0x3e9a24fb, + 0x32beafed, 0x3e9cc076, 0x32cafb6b, 0x3e9f5988, + 0x32d7476c, 0x3ea1f02f, 0x32e393ef, 0x3ea4846c, + 0x32efe0f2, 0x3ea7163f, 0x32fc2e77, 0x3ea9a5a8, + 0x33087c7d, 0x3eac32a6, 0x3314cb02, 0x3eaebd3a, + 0x33211a07, 0x3eb14563, 0x332d698a, 0x3eb3cb21, + 0x3339b98d, 0x3eb64e75, 0x33460a0d, 0x3eb8cf5d, + 0x33525b0b, 0x3ebb4ddb, 0x335eac86, 0x3ebdc9ed, + 0x336afe7e, 0x3ec04394, 0x337750f2, 0x3ec2bad0, + 0x3383a3e2, 0x3ec52fa0, 0x338ff74d, 0x3ec7a205, + 0x339c4b32, 0x3eca11fe, 0x33a89f92, 0x3ecc7f8b, + 0x33b4f46c, 0x3eceeaad, 0x33c149bf, 0x3ed15363, + 0x33cd9f8b, 0x3ed3b9ad, 0x33d9f5cf, 0x3ed61d8a, + 0x33e64c8c, 0x3ed87efc, 0x33f2a3bf, 0x3edade01, + 0x33fefb6a, 0x3edd3a9a, 0x340b538b, 0x3edf94c7, + 0x3417ac22, 0x3ee1ec87, 0x3424052f, 0x3ee441da, + 0x34305eb0, 0x3ee694c1, 0x343cb8a7, 0x3ee8e53a, + 0x34491311, 0x3eeb3347, 0x34556def, 0x3eed7ee7, + 0x3461c940, 0x3eefc81a, 0x346e2504, 0x3ef20ee0, + 0x347a8139, 0x3ef45338, 0x3486dde1, 0x3ef69523, + 0x34933afa, 0x3ef8d4a1, 0x349f9884, 0x3efb11b1, + 0x34abf67e, 0x3efd4c54, 0x34b854e7, 0x3eff8489, + 0x34c4b3c0, 0x3f01ba50, 0x34d11308, 0x3f03eda9, + 0x34dd72be, 0x3f061e95, 0x34e9d2e3, 0x3f084d12, + 0x34f63374, 0x3f0a7921, 0x35029473, 0x3f0ca2c2, + 0x350ef5de, 0x3f0ec9f5, 0x351b57b5, 0x3f10eeb9, + 0x3527b9f7, 0x3f13110f, 0x35341ca5, 0x3f1530f7, + 0x35407fbd, 0x3f174e70, 0x354ce33f, 0x3f19697a, + 0x3559472b, 0x3f1b8215, 0x3565ab80, 0x3f1d9842, + 0x3572103d, 0x3f1fabff, 0x357e7563, 0x3f21bd4e, + 0x358adaf0, 0x3f23cc2e, 0x359740e5, 0x3f25d89e, + 0x35a3a740, 0x3f27e29f, 0x35b00e02, 0x3f29ea31, + 0x35bc7529, 0x3f2bef53, 0x35c8dcb6, 0x3f2df206, + 0x35d544a7, 0x3f2ff24a, 0x35e1acfd, 0x3f31f01d, + 0x35ee15b7, 0x3f33eb81, 0x35fa7ed4, 0x3f35e476, + 0x3606e854, 0x3f37dafa, 0x36135237, 0x3f39cf0e, + 0x361fbc7b, 0x3f3bc0b3, 0x362c2721, 0x3f3dafe7, + 0x36389228, 0x3f3f9cab, 0x3644fd8f, 0x3f4186ff, + 0x36516956, 0x3f436ee3, 0x365dd57d, 0x3f455456, + 0x366a4203, 0x3f473759, 0x3676aee8, 0x3f4917eb, + 0x36831c2b, 0x3f4af60d, 0x368f89cb, 0x3f4cd1be, + 0x369bf7c9, 0x3f4eaafe, 0x36a86623, 0x3f5081cd, + 0x36b4d4d9, 0x3f52562c, 0x36c143ec, 0x3f54281a, + 0x36cdb359, 0x3f55f796, 0x36da2321, 0x3f57c4a2, + 0x36e69344, 0x3f598f3c, 0x36f303c0, 0x3f5b5765, + 0x36ff7496, 0x3f5d1d1d, 0x370be5c4, 0x3f5ee063, + 0x3718574b, 0x3f60a138, 0x3724c92a, 0x3f625f9b, + 0x37313b60, 0x3f641b8d, 0x373daded, 0x3f65d50d, + 0x374a20d0, 0x3f678c1c, 0x3756940a, 0x3f6940b8, + 0x37630799, 0x3f6af2e3, 0x376f7b7d, 0x3f6ca29c, + 0x377befb5, 0x3f6e4fe3, 0x37886442, 0x3f6ffab8, + 0x3794d922, 0x3f71a31b, 0x37a14e55, 0x3f73490b, + 0x37adc3db, 0x3f74ec8a, 0x37ba39b3, 0x3f768d96, + 0x37c6afdc, 0x3f782c30, 0x37d32657, 0x3f79c857, + 0x37df9d22, 0x3f7b620c, 0x37ec143e, 0x3f7cf94e, + 0x37f88ba9, 0x3f7e8e1e, 0x38050364, 0x3f80207b, + 0x38117b6d, 0x3f81b065, 0x381df3c5, 0x3f833ddd, + 0x382a6c6a, 0x3f84c8e2, 0x3836e55d, 0x3f865174, + 0x38435e9d, 0x3f87d792, 0x384fd829, 0x3f895b3e, + 0x385c5201, 0x3f8adc77, 0x3868cc24, 0x3f8c5b3d, + 0x38754692, 0x3f8dd78f, 0x3881c14b, 0x3f8f516e, + 0x388e3c4d, 0x3f90c8da, 0x389ab799, 0x3f923dd2, + 0x38a7332e, 0x3f93b058, 0x38b3af0c, 0x3f952069, + 0x38c02b31, 0x3f968e07, 0x38cca79e, 0x3f97f932, + 0x38d92452, 0x3f9961e8, 0x38e5a14d, 0x3f9ac82c, + 0x38f21e8e, 0x3f9c2bfb, 0x38fe9c15, 0x3f9d8d56, + 0x390b19e0, 0x3f9eec3e, 0x391797f0, 0x3fa048b2, + 0x39241645, 0x3fa1a2b2, 0x393094dd, 0x3fa2fa3d, + 0x393d13b8, 0x3fa44f55, 0x394992d7, 0x3fa5a1f9, + 0x39561237, 0x3fa6f228, 0x396291d9, 0x3fa83fe3, + 0x396f11bc, 0x3fa98b2a, 0x397b91e1, 0x3faad3fd, + 0x39881245, 0x3fac1a5b, 0x399492ea, 0x3fad5e45, + 0x39a113cd, 0x3fae9fbb, 0x39ad94f0, 0x3fafdebb, + 0x39ba1651, 0x3fb11b48, 0x39c697f0, 0x3fb2555f, + 0x39d319cc, 0x3fb38d02, 0x39df9be6, 0x3fb4c231, + 0x39ec1e3b, 0x3fb5f4ea, 0x39f8a0cd, 0x3fb7252f, + 0x3a05239a, 0x3fb852ff, 0x3a11a6a3, 0x3fb97e5a, + 0x3a1e29e5, 0x3fbaa740, 0x3a2aad62, 0x3fbbcdb1, + 0x3a373119, 0x3fbcf1ad, 0x3a43b508, 0x3fbe1334, + 0x3a503930, 0x3fbf3246, 0x3a5cbd91, 0x3fc04ee3, + 0x3a694229, 0x3fc1690a, 0x3a75c6f8, 0x3fc280bc, + 0x3a824bfd, 0x3fc395f9, 0x3a8ed139, 0x3fc4a8c1, + 0x3a9b56ab, 0x3fc5b913, 0x3aa7dc52, 0x3fc6c6f0, + 0x3ab4622d, 0x3fc7d258, 0x3ac0e83d, 0x3fc8db4a, + 0x3acd6e81, 0x3fc9e1c6, 0x3ad9f4f8, 0x3fcae5cd, + 0x3ae67ba2, 0x3fcbe75e, 0x3af3027e, 0x3fcce67a, + 0x3aff898c, 0x3fcde320, 0x3b0c10cb, 0x3fcedd50, + 0x3b18983b, 0x3fcfd50b, 0x3b251fdc, 0x3fd0ca4f, + 0x3b31a7ac, 0x3fd1bd1e, 0x3b3e2fac, 0x3fd2ad77, + 0x3b4ab7db, 0x3fd39b5a, 0x3b574039, 0x3fd486c7, + 0x3b63c8c4, 0x3fd56fbe, 0x3b70517d, 0x3fd6563f, + 0x3b7cda63, 0x3fd73a4a, 0x3b896375, 0x3fd81bdf, + 0x3b95ecb4, 0x3fd8fafe, 0x3ba2761e, 0x3fd9d7a7, + 0x3baeffb3, 0x3fdab1d9, 0x3bbb8973, 0x3fdb8996, + 0x3bc8135c, 0x3fdc5edc, 0x3bd49d70, 0x3fdd31ac, + 0x3be127ac, 0x3fde0205, 0x3bedb212, 0x3fdecfe8, + 0x3bfa3c9f, 0x3fdf9b55, 0x3c06c754, 0x3fe0644b, + 0x3c135231, 0x3fe12acb, 0x3c1fdd34, 0x3fe1eed5, + 0x3c2c685d, 0x3fe2b067, 0x3c38f3ac, 0x3fe36f84, + 0x3c457f21, 0x3fe42c2a, 0x3c520aba, 0x3fe4e659, + 0x3c5e9678, 0x3fe59e12, 0x3c6b2259, 0x3fe65354, + 0x3c77ae5e, 0x3fe7061f, 0x3c843a85, 0x3fe7b674, + 0x3c90c6cf, 0x3fe86452, 0x3c9d533b, 0x3fe90fb9, + 0x3ca9dfc8, 0x3fe9b8a9, 0x3cb66c77, 0x3fea5f23, + 0x3cc2f945, 0x3feb0326, 0x3ccf8634, 0x3feba4b2, + 0x3cdc1342, 0x3fec43c7, 0x3ce8a06f, 0x3fece065, + 0x3cf52dbb, 0x3fed7a8c, 0x3d01bb24, 0x3fee123d, + 0x3d0e48ab, 0x3feea776, 0x3d1ad650, 0x3fef3a39, + 0x3d276410, 0x3fefca84, 0x3d33f1ed, 0x3ff05858, + 0x3d407fe6, 0x3ff0e3b6, 0x3d4d0df9, 0x3ff16c9c, + 0x3d599c28, 0x3ff1f30b, 0x3d662a70, 0x3ff27703, + 0x3d72b8d2, 0x3ff2f884, 0x3d7f474d, 0x3ff3778e, + 0x3d8bd5e1, 0x3ff3f420, 0x3d98648d, 0x3ff46e3c, + 0x3da4f351, 0x3ff4e5e0, 0x3db1822c, 0x3ff55b0d, + 0x3dbe111e, 0x3ff5cdc3, 0x3dcaa027, 0x3ff63e01, + 0x3dd72f45, 0x3ff6abc8, 0x3de3be78, 0x3ff71718, + 0x3df04dc0, 0x3ff77ff1, 0x3dfcdd1d, 0x3ff7e652, + 0x3e096c8d, 0x3ff84a3c, 0x3e15fc11, 0x3ff8abae, + 0x3e228ba7, 0x3ff90aaa, 0x3e2f1b50, 0x3ff9672d, + 0x3e3bab0b, 0x3ff9c13a, 0x3e483ad8, 0x3ffa18cf, + 0x3e54cab5, 0x3ffa6dec, 0x3e615aa3, 0x3ffac092, + 0x3e6deaa1, 0x3ffb10c1, 0x3e7a7aae, 0x3ffb5e78, + 0x3e870aca, 0x3ffba9b8, 0x3e939af5, 0x3ffbf280, + 0x3ea02b2e, 0x3ffc38d1, 0x3eacbb74, 0x3ffc7caa, + 0x3eb94bc8, 0x3ffcbe0c, 0x3ec5dc28, 0x3ffcfcf6, + 0x3ed26c94, 0x3ffd3969, 0x3edefd0c, 0x3ffd7364, + 0x3eeb8d8f, 0x3ffdaae7, 0x3ef81e1d, 0x3ffddff3, + 0x3f04aeb5, 0x3ffe1288, 0x3f113f56, 0x3ffe42a4, + 0x3f1dd001, 0x3ffe704a, 0x3f2a60b4, 0x3ffe9b77, + 0x3f36f170, 0x3ffec42d, 0x3f438234, 0x3ffeea6c, + 0x3f5012fe, 0x3fff0e32, 0x3f5ca3d0, 0x3fff2f82, + 0x3f6934a8, 0x3fff4e59, 0x3f75c585, 0x3fff6ab9, + 0x3f825668, 0x3fff84a1, 0x3f8ee750, 0x3fff9c12, + 0x3f9b783c, 0x3fffb10b, 0x3fa8092c, 0x3fffc38c, + 0x3fb49a1f, 0x3fffd396, 0x3fc12b16, 0x3fffe128, + 0x3fcdbc0f, 0x3fffec43, 0x3fda4d09, 0x3ffff4e6, + 0x3fe6de05, 0x3ffffb11, 0x3ff36f02, 0x3ffffec4, +}; + + +/** +* \par +* Generation of realCoefBQ31 array: +* \par +* n = 4096 +*
for (i = 0; i < n; i++)    
+* {    
+*    pBTable[2 * i] = 0.5 * (1.0 + sin (2 * PI / (double) (2 * n) * (double) i));    
+*    pBTable[2 * i + 1] = 0.5 * (1.0 * cos (2 * PI / (double) (2 * n) * (double) i));    
+* } 
+* \par +* Convert to fixed point Q31 format +* round(pBTable[i] * pow(2, 31)) +* +*/ + +static const q31_t realCoefBQ31[8192] = { + 0x40000000, 0x40000000, 0x400c90fe, 0x3ffffec4, + 0x401921fb, 0x3ffffb11, 0x4025b2f7, 0x3ffff4e6, + 0x403243f1, 0x3fffec43, 0x403ed4ea, 0x3fffe128, + 0x404b65e1, 0x3fffd396, 0x4057f6d4, 0x3fffc38c, + 0x406487c4, 0x3fffb10b, 0x407118b0, 0x3fff9c12, + 0x407da998, 0x3fff84a1, 0x408a3a7b, 0x3fff6ab9, + 0x4096cb58, 0x3fff4e59, 0x40a35c30, 0x3fff2f82, + 0x40afed02, 0x3fff0e32, 0x40bc7dcc, 0x3ffeea6c, + 0x40c90e90, 0x3ffec42d, 0x40d59f4c, 0x3ffe9b77, + 0x40e22fff, 0x3ffe704a, 0x40eec0aa, 0x3ffe42a4, + 0x40fb514b, 0x3ffe1288, 0x4107e1e3, 0x3ffddff3, + 0x41147271, 0x3ffdaae7, 0x412102f4, 0x3ffd7364, + 0x412d936c, 0x3ffd3969, 0x413a23d8, 0x3ffcfcf6, + 0x4146b438, 0x3ffcbe0c, 0x4153448c, 0x3ffc7caa, + 0x415fd4d2, 0x3ffc38d1, 0x416c650b, 0x3ffbf280, + 0x4178f536, 0x3ffba9b8, 0x41858552, 0x3ffb5e78, + 0x4192155f, 0x3ffb10c1, 0x419ea55d, 0x3ffac092, + 0x41ab354b, 0x3ffa6dec, 0x41b7c528, 0x3ffa18cf, + 0x41c454f5, 0x3ff9c13a, 0x41d0e4b0, 0x3ff9672d, + 0x41dd7459, 0x3ff90aaa, 0x41ea03ef, 0x3ff8abae, + 0x41f69373, 0x3ff84a3c, 0x420322e3, 0x3ff7e652, + 0x420fb240, 0x3ff77ff1, 0x421c4188, 0x3ff71718, + 0x4228d0bb, 0x3ff6abc8, 0x42355fd9, 0x3ff63e01, + 0x4241eee2, 0x3ff5cdc3, 0x424e7dd4, 0x3ff55b0d, + 0x425b0caf, 0x3ff4e5e0, 0x42679b73, 0x3ff46e3c, + 0x42742a1f, 0x3ff3f420, 0x4280b8b3, 0x3ff3778e, + 0x428d472e, 0x3ff2f884, 0x4299d590, 0x3ff27703, + 0x42a663d8, 0x3ff1f30b, 0x42b2f207, 0x3ff16c9c, + 0x42bf801a, 0x3ff0e3b6, 0x42cc0e13, 0x3ff05858, + 0x42d89bf0, 0x3fefca84, 0x42e529b0, 0x3fef3a39, + 0x42f1b755, 0x3feea776, 0x42fe44dc, 0x3fee123d, + 0x430ad245, 0x3fed7a8c, 0x43175f91, 0x3fece065, + 0x4323ecbe, 0x3fec43c7, 0x433079cc, 0x3feba4b2, + 0x433d06bb, 0x3feb0326, 0x43499389, 0x3fea5f23, + 0x43562038, 0x3fe9b8a9, 0x4362acc5, 0x3fe90fb9, + 0x436f3931, 0x3fe86452, 0x437bc57b, 0x3fe7b674, + 0x438851a2, 0x3fe7061f, 0x4394dda7, 0x3fe65354, + 0x43a16988, 0x3fe59e12, 0x43adf546, 0x3fe4e659, + 0x43ba80df, 0x3fe42c2a, 0x43c70c54, 0x3fe36f84, + 0x43d397a3, 0x3fe2b067, 0x43e022cc, 0x3fe1eed5, + 0x43ecadcf, 0x3fe12acb, 0x43f938ac, 0x3fe0644b, + 0x4405c361, 0x3fdf9b55, 0x44124dee, 0x3fdecfe8, + 0x441ed854, 0x3fde0205, 0x442b6290, 0x3fdd31ac, + 0x4437eca4, 0x3fdc5edc, 0x4444768d, 0x3fdb8996, + 0x4451004d, 0x3fdab1d9, 0x445d89e2, 0x3fd9d7a7, + 0x446a134c, 0x3fd8fafe, 0x44769c8b, 0x3fd81bdf, + 0x4483259d, 0x3fd73a4a, 0x448fae83, 0x3fd6563f, + 0x449c373c, 0x3fd56fbe, 0x44a8bfc7, 0x3fd486c7, + 0x44b54825, 0x3fd39b5a, 0x44c1d054, 0x3fd2ad77, + 0x44ce5854, 0x3fd1bd1e, 0x44dae024, 0x3fd0ca4f, + 0x44e767c5, 0x3fcfd50b, 0x44f3ef35, 0x3fcedd50, + 0x45007674, 0x3fcde320, 0x450cfd82, 0x3fcce67a, + 0x4519845e, 0x3fcbe75e, 0x45260b08, 0x3fcae5cd, + 0x4532917f, 0x3fc9e1c6, 0x453f17c3, 0x3fc8db4a, + 0x454b9dd3, 0x3fc7d258, 0x455823ae, 0x3fc6c6f0, + 0x4564a955, 0x3fc5b913, 0x45712ec7, 0x3fc4a8c1, + 0x457db403, 0x3fc395f9, 0x458a3908, 0x3fc280bc, + 0x4596bdd7, 0x3fc1690a, 0x45a3426f, 0x3fc04ee3, + 0x45afc6d0, 0x3fbf3246, 0x45bc4af8, 0x3fbe1334, + 0x45c8cee7, 0x3fbcf1ad, 0x45d5529e, 0x3fbbcdb1, + 0x45e1d61b, 0x3fbaa740, 0x45ee595d, 0x3fb97e5a, + 0x45fadc66, 0x3fb852ff, 0x46075f33, 0x3fb7252f, + 0x4613e1c5, 0x3fb5f4ea, 0x4620641a, 0x3fb4c231, + 0x462ce634, 0x3fb38d02, 0x46396810, 0x3fb2555f, + 0x4645e9af, 0x3fb11b48, 0x46526b10, 0x3fafdebb, + 0x465eec33, 0x3fae9fbb, 0x466b6d16, 0x3fad5e45, + 0x4677edbb, 0x3fac1a5b, 0x46846e1f, 0x3faad3fd, + 0x4690ee44, 0x3fa98b2a, 0x469d6e27, 0x3fa83fe3, + 0x46a9edc9, 0x3fa6f228, 0x46b66d29, 0x3fa5a1f9, + 0x46c2ec48, 0x3fa44f55, 0x46cf6b23, 0x3fa2fa3d, + 0x46dbe9bb, 0x3fa1a2b2, 0x46e86810, 0x3fa048b2, + 0x46f4e620, 0x3f9eec3e, 0x470163eb, 0x3f9d8d56, + 0x470de172, 0x3f9c2bfb, 0x471a5eb3, 0x3f9ac82c, + 0x4726dbae, 0x3f9961e8, 0x47335862, 0x3f97f932, + 0x473fd4cf, 0x3f968e07, 0x474c50f4, 0x3f952069, + 0x4758ccd2, 0x3f93b058, 0x47654867, 0x3f923dd2, + 0x4771c3b3, 0x3f90c8da, 0x477e3eb5, 0x3f8f516e, + 0x478ab96e, 0x3f8dd78f, 0x479733dc, 0x3f8c5b3d, + 0x47a3adff, 0x3f8adc77, 0x47b027d7, 0x3f895b3e, + 0x47bca163, 0x3f87d792, 0x47c91aa3, 0x3f865174, + 0x47d59396, 0x3f84c8e2, 0x47e20c3b, 0x3f833ddd, + 0x47ee8493, 0x3f81b065, 0x47fafc9c, 0x3f80207b, + 0x48077457, 0x3f7e8e1e, 0x4813ebc2, 0x3f7cf94e, + 0x482062de, 0x3f7b620c, 0x482cd9a9, 0x3f79c857, + 0x48395024, 0x3f782c30, 0x4845c64d, 0x3f768d96, + 0x48523c25, 0x3f74ec8a, 0x485eb1ab, 0x3f73490b, + 0x486b26de, 0x3f71a31b, 0x48779bbe, 0x3f6ffab8, + 0x4884104b, 0x3f6e4fe3, 0x48908483, 0x3f6ca29c, + 0x489cf867, 0x3f6af2e3, 0x48a96bf6, 0x3f6940b8, + 0x48b5df30, 0x3f678c1c, 0x48c25213, 0x3f65d50d, + 0x48cec4a0, 0x3f641b8d, 0x48db36d6, 0x3f625f9b, + 0x48e7a8b5, 0x3f60a138, 0x48f41a3c, 0x3f5ee063, + 0x49008b6a, 0x3f5d1d1d, 0x490cfc40, 0x3f5b5765, + 0x49196cbc, 0x3f598f3c, 0x4925dcdf, 0x3f57c4a2, + 0x49324ca7, 0x3f55f796, 0x493ebc14, 0x3f54281a, + 0x494b2b27, 0x3f52562c, 0x495799dd, 0x3f5081cd, + 0x49640837, 0x3f4eaafe, 0x49707635, 0x3f4cd1be, + 0x497ce3d5, 0x3f4af60d, 0x49895118, 0x3f4917eb, + 0x4995bdfd, 0x3f473759, 0x49a22a83, 0x3f455456, + 0x49ae96aa, 0x3f436ee3, 0x49bb0271, 0x3f4186ff, + 0x49c76dd8, 0x3f3f9cab, 0x49d3d8df, 0x3f3dafe7, + 0x49e04385, 0x3f3bc0b3, 0x49ecadc9, 0x3f39cf0e, + 0x49f917ac, 0x3f37dafa, 0x4a05812c, 0x3f35e476, + 0x4a11ea49, 0x3f33eb81, 0x4a1e5303, 0x3f31f01d, + 0x4a2abb59, 0x3f2ff24a, 0x4a37234a, 0x3f2df206, + 0x4a438ad7, 0x3f2bef53, 0x4a4ff1fe, 0x3f29ea31, + 0x4a5c58c0, 0x3f27e29f, 0x4a68bf1b, 0x3f25d89e, + 0x4a752510, 0x3f23cc2e, 0x4a818a9d, 0x3f21bd4e, + 0x4a8defc3, 0x3f1fabff, 0x4a9a5480, 0x3f1d9842, + 0x4aa6b8d5, 0x3f1b8215, 0x4ab31cc1, 0x3f19697a, + 0x4abf8043, 0x3f174e70, 0x4acbe35b, 0x3f1530f7, + 0x4ad84609, 0x3f13110f, 0x4ae4a84b, 0x3f10eeb9, + 0x4af10a22, 0x3f0ec9f5, 0x4afd6b8d, 0x3f0ca2c2, + 0x4b09cc8c, 0x3f0a7921, 0x4b162d1d, 0x3f084d12, + 0x4b228d42, 0x3f061e95, 0x4b2eecf8, 0x3f03eda9, + 0x4b3b4c40, 0x3f01ba50, 0x4b47ab19, 0x3eff8489, + 0x4b540982, 0x3efd4c54, 0x4b60677c, 0x3efb11b1, + 0x4b6cc506, 0x3ef8d4a1, 0x4b79221f, 0x3ef69523, + 0x4b857ec7, 0x3ef45338, 0x4b91dafc, 0x3ef20ee0, + 0x4b9e36c0, 0x3eefc81a, 0x4baa9211, 0x3eed7ee7, + 0x4bb6ecef, 0x3eeb3347, 0x4bc34759, 0x3ee8e53a, + 0x4bcfa150, 0x3ee694c1, 0x4bdbfad1, 0x3ee441da, + 0x4be853de, 0x3ee1ec87, 0x4bf4ac75, 0x3edf94c7, + 0x4c010496, 0x3edd3a9a, 0x4c0d5c41, 0x3edade01, + 0x4c19b374, 0x3ed87efc, 0x4c260a31, 0x3ed61d8a, + 0x4c326075, 0x3ed3b9ad, 0x4c3eb641, 0x3ed15363, + 0x4c4b0b94, 0x3eceeaad, 0x4c57606e, 0x3ecc7f8b, + 0x4c63b4ce, 0x3eca11fe, 0x4c7008b3, 0x3ec7a205, + 0x4c7c5c1e, 0x3ec52fa0, 0x4c88af0e, 0x3ec2bad0, + 0x4c950182, 0x3ec04394, 0x4ca1537a, 0x3ebdc9ed, + 0x4cada4f5, 0x3ebb4ddb, 0x4cb9f5f3, 0x3eb8cf5d, + 0x4cc64673, 0x3eb64e75, 0x4cd29676, 0x3eb3cb21, + 0x4cdee5f9, 0x3eb14563, 0x4ceb34fe, 0x3eaebd3a, + 0x4cf78383, 0x3eac32a6, 0x4d03d189, 0x3ea9a5a8, + 0x4d101f0e, 0x3ea7163f, 0x4d1c6c11, 0x3ea4846c, + 0x4d28b894, 0x3ea1f02f, 0x4d350495, 0x3e9f5988, + 0x4d415013, 0x3e9cc076, 0x4d4d9b0e, 0x3e9a24fb, + 0x4d59e586, 0x3e978715, 0x4d662f7b, 0x3e94e6c6, + 0x4d7278eb, 0x3e92440d, 0x4d7ec1d6, 0x3e8f9eeb, + 0x4d8b0a3d, 0x3e8cf75f, 0x4d97521d, 0x3e8a4d6a, + 0x4da39978, 0x3e87a10c, 0x4dafe04b, 0x3e84f245, + 0x4dbc2698, 0x3e824114, 0x4dc86c5d, 0x3e7f8d7b, + 0x4dd4b19a, 0x3e7cd778, 0x4de0f64f, 0x3e7a1f0d, + 0x4ded3a7b, 0x3e77643a, 0x4df97e1d, 0x3e74a6fd, + 0x4e05c135, 0x3e71e759, 0x4e1203c3, 0x3e6f254c, + 0x4e1e45c6, 0x3e6c60d7, 0x4e2a873e, 0x3e6999fa, + 0x4e36c82a, 0x3e66d0b4, 0x4e430889, 0x3e640507, + 0x4e4f485c, 0x3e6136f3, 0x4e5b87a2, 0x3e5e6676, + 0x4e67c65a, 0x3e5b9392, 0x4e740483, 0x3e58be47, + 0x4e80421e, 0x3e55e694, 0x4e8c7f2a, 0x3e530c7a, + 0x4e98bba7, 0x3e502ff9, 0x4ea4f793, 0x3e4d5110, + 0x4eb132ef, 0x3e4a6fc1, 0x4ebd6db9, 0x3e478c0b, + 0x4ec9a7f3, 0x3e44a5ef, 0x4ed5e19a, 0x3e41bd6c, + 0x4ee21aaf, 0x3e3ed282, 0x4eee5331, 0x3e3be532, + 0x4efa8b20, 0x3e38f57c, 0x4f06c27a, 0x3e360360, + 0x4f12f941, 0x3e330ede, 0x4f1f2f73, 0x3e3017f6, + 0x4f2b650f, 0x3e2d1ea8, 0x4f379a16, 0x3e2a22f4, + 0x4f43ce86, 0x3e2724db, 0x4f500260, 0x3e24245d, + 0x4f5c35a3, 0x3e212179, 0x4f68684e, 0x3e1e1c30, + 0x4f749a61, 0x3e1b1482, 0x4f80cbdc, 0x3e180a6f, + 0x4f8cfcbe, 0x3e14fdf7, 0x4f992d06, 0x3e11ef1b, + 0x4fa55cb4, 0x3e0eddd9, 0x4fb18bc8, 0x3e0bca34, + 0x4fbdba40, 0x3e08b42a, 0x4fc9e81e, 0x3e059bbb, + 0x4fd6155f, 0x3e0280e9, 0x4fe24205, 0x3dff63b2, + 0x4fee6e0d, 0x3dfc4418, 0x4ffa9979, 0x3df9221a, + 0x5006c446, 0x3df5fdb8, 0x5012ee76, 0x3df2d6f3, + 0x501f1807, 0x3defadca, 0x502b40f8, 0x3dec823e, + 0x5037694b, 0x3de9544f, 0x504390fd, 0x3de623fd, + 0x504fb80e, 0x3de2f148, 0x505bde7f, 0x3ddfbc30, + 0x5068044e, 0x3ddc84b5, 0x5074297b, 0x3dd94ad8, + 0x50804e06, 0x3dd60e99, 0x508c71ee, 0x3dd2cff7, + 0x50989532, 0x3dcf8ef3, 0x50a4b7d3, 0x3dcc4b8d, + 0x50b0d9d0, 0x3dc905c5, 0x50bcfb28, 0x3dc5bd9b, + 0x50c91bda, 0x3dc2730f, 0x50d53be7, 0x3dbf2622, + 0x50e15b4e, 0x3dbbd6d4, 0x50ed7a0e, 0x3db88524, + 0x50f99827, 0x3db53113, 0x5105b599, 0x3db1daa2, + 0x5111d263, 0x3dae81cf, 0x511dee84, 0x3dab269b, + 0x512a09fc, 0x3da7c907, 0x513624cb, 0x3da46912, + 0x51423ef0, 0x3da106bd, 0x514e586a, 0x3d9da208, + 0x515a713a, 0x3d9a3af2, 0x5166895f, 0x3d96d17d, + 0x5172a0d7, 0x3d9365a8, 0x517eb7a4, 0x3d8ff772, + 0x518acdc4, 0x3d8c86de, 0x5196e337, 0x3d8913ea, + 0x51a2f7fc, 0x3d859e96, 0x51af0c13, 0x3d8226e4, + 0x51bb1f7c, 0x3d7eacd2, 0x51c73235, 0x3d7b3061, + 0x51d3443f, 0x3d77b192, 0x51df5599, 0x3d743064, + 0x51eb6643, 0x3d70acd7, 0x51f7763c, 0x3d6d26ec, + 0x52038584, 0x3d699ea3, 0x520f941a, 0x3d6613fb, + 0x521ba1fd, 0x3d6286f6, 0x5227af2e, 0x3d5ef793, + 0x5233bbac, 0x3d5b65d2, 0x523fc776, 0x3d57d1b3, + 0x524bd28c, 0x3d543b37, 0x5257dced, 0x3d50a25e, + 0x5263e699, 0x3d4d0728, 0x526fef90, 0x3d496994, + 0x527bf7d1, 0x3d45c9a4, 0x5287ff5b, 0x3d422757, + 0x5294062f, 0x3d3e82ae, 0x52a00c4b, 0x3d3adba7, + 0x52ac11af, 0x3d373245, 0x52b8165b, 0x3d338687, + 0x52c41a4f, 0x3d2fd86c, 0x52d01d89, 0x3d2c27f6, + 0x52dc2009, 0x3d287523, 0x52e821cf, 0x3d24bff6, + 0x52f422db, 0x3d21086c, 0x5300232c, 0x3d1d4e88, + 0x530c22c1, 0x3d199248, 0x5318219a, 0x3d15d3ad, + 0x53241fb6, 0x3d1212b7, 0x53301d16, 0x3d0e4f67, + 0x533c19b8, 0x3d0a89bc, 0x5348159d, 0x3d06c1b6, + 0x535410c3, 0x3d02f757, 0x53600b2a, 0x3cff2a9d, + 0x536c04d2, 0x3cfb5b89, 0x5377fdbb, 0x3cf78a1b, + 0x5383f5e3, 0x3cf3b653, 0x538fed4b, 0x3cefe032, + 0x539be3f2, 0x3cec07b8, 0x53a7d9d7, 0x3ce82ce4, + 0x53b3cefa, 0x3ce44fb7, 0x53bfc35b, 0x3ce07031, + 0x53cbb6f8, 0x3cdc8e52, 0x53d7a9d3, 0x3cd8aa1b, + 0x53e39be9, 0x3cd4c38b, 0x53ef8d3c, 0x3cd0daa2, + 0x53fb7dc9, 0x3cccef62, 0x54076d91, 0x3cc901c9, + 0x54135c94, 0x3cc511d9, 0x541f4ad1, 0x3cc11f90, + 0x542b3846, 0x3cbd2af0, 0x543724f5, 0x3cb933f9, + 0x544310dd, 0x3cb53aaa, 0x544efbfc, 0x3cb13f04, + 0x545ae653, 0x3cad4107, 0x5466cfe1, 0x3ca940b3, + 0x5472b8a5, 0x3ca53e09, 0x547ea0a0, 0x3ca13908, + 0x548a87d1, 0x3c9d31b0, 0x54966e36, 0x3c992803, + 0x54a253d1, 0x3c951bff, 0x54ae38a0, 0x3c910da5, + 0x54ba1ca3, 0x3c8cfcf6, 0x54c5ffd9, 0x3c88e9f1, + 0x54d1e242, 0x3c84d496, 0x54ddc3de, 0x3c80bce7, + 0x54e9a4ac, 0x3c7ca2e2, 0x54f584ac, 0x3c788688, + 0x550163dc, 0x3c7467d9, 0x550d423d, 0x3c7046d6, + 0x55191fcf, 0x3c6c237e, 0x5524fc90, 0x3c67fdd1, + 0x5530d881, 0x3c63d5d1, 0x553cb3a0, 0x3c5fab7c, + 0x55488dee, 0x3c5b7ed4, 0x5554676a, 0x3c574fd8, + 0x55604013, 0x3c531e88, 0x556c17e9, 0x3c4eeae5, + 0x5577eeec, 0x3c4ab4ef, 0x5583c51b, 0x3c467ca6, + 0x558f9a76, 0x3c42420a, 0x559b6efb, 0x3c3e051b, + 0x55a742ac, 0x3c39c5da, 0x55b31587, 0x3c358446, + 0x55bee78c, 0x3c314060, 0x55cab8ba, 0x3c2cfa28, + 0x55d68911, 0x3c28b19e, 0x55e25890, 0x3c2466c2, + 0x55ee2738, 0x3c201994, 0x55f9f507, 0x3c1bca16, + 0x5605c1fd, 0x3c177845, 0x56118e1a, 0x3c132424, + 0x561d595d, 0x3c0ecdb2, 0x562923c5, 0x3c0a74f0, + 0x5634ed53, 0x3c0619dc, 0x5640b606, 0x3c01bc78, + 0x564c7ddd, 0x3bfd5cc4, 0x565844d8, 0x3bf8fac0, + 0x56640af7, 0x3bf4966c, 0x566fd039, 0x3bf02fc9, + 0x567b949d, 0x3bebc6d5, 0x56875823, 0x3be75b93, + 0x56931acb, 0x3be2ee01, 0x569edc94, 0x3bde7e20, + 0x56aa9d7e, 0x3bda0bf0, 0x56b65d88, 0x3bd59771, + 0x56c21cb2, 0x3bd120a4, 0x56cddafb, 0x3bcca789, + 0x56d99864, 0x3bc82c1f, 0x56e554ea, 0x3bc3ae67, + 0x56f1108f, 0x3bbf2e62, 0x56fccb51, 0x3bbaac0e, + 0x57088531, 0x3bb6276e, 0x57143e2d, 0x3bb1a080, + 0x571ff646, 0x3bad1744, 0x572bad7a, 0x3ba88bbc, + 0x573763c9, 0x3ba3fde7, 0x57431933, 0x3b9f6dc5, + 0x574ecdb8, 0x3b9adb57, 0x575a8157, 0x3b96469d, + 0x5766340f, 0x3b91af97, 0x5771e5e0, 0x3b8d1644, + 0x577d96ca, 0x3b887aa6, 0x578946cc, 0x3b83dcbc, + 0x5794f5e6, 0x3b7f3c87, 0x57a0a417, 0x3b7a9a07, + 0x57ac515f, 0x3b75f53c, 0x57b7fdbd, 0x3b714e25, + 0x57c3a931, 0x3b6ca4c4, 0x57cf53bb, 0x3b67f919, + 0x57dafd59, 0x3b634b23, 0x57e6a60c, 0x3b5e9ae4, + 0x57f24dd3, 0x3b59e85a, 0x57fdf4ae, 0x3b553386, + 0x58099a9c, 0x3b507c69, 0x58153f9d, 0x3b4bc303, + 0x5820e3b0, 0x3b470753, 0x582c86d5, 0x3b42495a, + 0x5838290c, 0x3b3d8918, 0x5843ca53, 0x3b38c68e, + 0x584f6aab, 0x3b3401bb, 0x585b0a13, 0x3b2f3aa0, + 0x5866a88a, 0x3b2a713d, 0x58724611, 0x3b25a591, + 0x587de2a7, 0x3b20d79e, 0x58897e4a, 0x3b1c0764, + 0x589518fc, 0x3b1734e2, 0x58a0b2bb, 0x3b126019, + 0x58ac4b87, 0x3b0d8909, 0x58b7e35f, 0x3b08afb2, + 0x58c37a44, 0x3b03d414, 0x58cf1034, 0x3afef630, + 0x58daa52f, 0x3afa1605, 0x58e63935, 0x3af53395, + 0x58f1cc45, 0x3af04edf, 0x58fd5e5f, 0x3aeb67e3, + 0x5908ef82, 0x3ae67ea1, 0x59147fae, 0x3ae1931a, + 0x59200ee3, 0x3adca54e, 0x592b9d1f, 0x3ad7b53d, + 0x59372a64, 0x3ad2c2e8, 0x5942b6af, 0x3acdce4d, + 0x594e4201, 0x3ac8d76f, 0x5959cc5a, 0x3ac3de4c, + 0x596555b8, 0x3abee2e5, 0x5970de1b, 0x3ab9e53a, + 0x597c6584, 0x3ab4e54c, 0x5987ebf0, 0x3aafe31b, + 0x59937161, 0x3aaadea6, 0x599ef5d6, 0x3aa5d7ee, + 0x59aa794d, 0x3aa0cef3, 0x59b5fbc8, 0x3a9bc3b6, + 0x59c17d44, 0x3a96b636, 0x59ccfdc2, 0x3a91a674, + 0x59d87d42, 0x3a8c9470, 0x59e3fbc3, 0x3a87802a, + 0x59ef7944, 0x3a8269a3, 0x59faf5c5, 0x3a7d50da, + 0x5a067145, 0x3a7835cf, 0x5a11ebc5, 0x3a731884, + 0x5a1d6544, 0x3a6df8f8, 0x5a28ddc0, 0x3a68d72b, + 0x5a34553b, 0x3a63b31d, 0x5a3fcbb3, 0x3a5e8cd0, + 0x5a4b4128, 0x3a596442, 0x5a56b599, 0x3a543974, + 0x5a622907, 0x3a4f0c67, 0x5a6d9b70, 0x3a49dd1a, + 0x5a790cd4, 0x3a44ab8e, 0x5a847d33, 0x3a3f77c3, + 0x5a8fec8c, 0x3a3a41b9, 0x5a9b5adf, 0x3a350970, + 0x5aa6c82b, 0x3a2fcee8, 0x5ab23471, 0x3a2a9223, + 0x5abd9faf, 0x3a25531f, 0x5ac909e5, 0x3a2011de, + 0x5ad47312, 0x3a1ace5f, 0x5adfdb37, 0x3a1588a2, + 0x5aeb4253, 0x3a1040a8, 0x5af6a865, 0x3a0af671, + 0x5b020d6c, 0x3a05a9fd, 0x5b0d716a, 0x3a005b4d, + 0x5b18d45c, 0x39fb0a60, 0x5b243643, 0x39f5b737, + 0x5b2f971e, 0x39f061d2, 0x5b3af6ec, 0x39eb0a31, + 0x5b4655ae, 0x39e5b054, 0x5b51b363, 0x39e0543c, + 0x5b5d100a, 0x39daf5e8, 0x5b686ba3, 0x39d5955a, + 0x5b73c62d, 0x39d03291, 0x5b7f1fa9, 0x39cacd8d, + 0x5b8a7815, 0x39c5664f, 0x5b95cf71, 0x39bffcd7, + 0x5ba125bd, 0x39ba9125, 0x5bac7af9, 0x39b52339, + 0x5bb7cf23, 0x39afb313, 0x5bc3223c, 0x39aa40b4, + 0x5bce7442, 0x39a4cc1c, 0x5bd9c537, 0x399f554b, + 0x5be51518, 0x3999dc42, 0x5bf063e6, 0x399460ff, + 0x5bfbb1a0, 0x398ee385, 0x5c06fe46, 0x398963d2, + 0x5c1249d8, 0x3983e1e8, 0x5c1d9454, 0x397e5dc6, + 0x5c28ddbb, 0x3978d76c, 0x5c34260c, 0x39734edc, + 0x5c3f6d47, 0x396dc414, 0x5c4ab36b, 0x39683715, + 0x5c55f878, 0x3962a7e0, 0x5c613c6d, 0x395d1675, + 0x5c6c7f4a, 0x395782d3, 0x5c77c10e, 0x3951ecfc, + 0x5c8301b9, 0x394c54ee, 0x5c8e414b, 0x3946baac, + 0x5c997fc4, 0x39411e33, 0x5ca4bd21, 0x393b7f86, + 0x5caff965, 0x3935dea4, 0x5cbb348d, 0x39303b8e, + 0x5cc66e99, 0x392a9642, 0x5cd1a78a, 0x3924eec3, + 0x5cdcdf5e, 0x391f4510, 0x5ce81615, 0x39199929, + 0x5cf34baf, 0x3913eb0e, 0x5cfe802b, 0x390e3ac0, + 0x5d09b389, 0x3908883f, 0x5d14e5c9, 0x3902d38b, + 0x5d2016e9, 0x38fd1ca4, 0x5d2b46ea, 0x38f7638b, + 0x5d3675cb, 0x38f1a840, 0x5d41a38c, 0x38ebeac2, + 0x5d4cd02c, 0x38e62b13, 0x5d57fbaa, 0x38e06932, + 0x5d632608, 0x38daa520, 0x5d6e4f43, 0x38d4dedd, + 0x5d79775c, 0x38cf1669, 0x5d849e51, 0x38c94bc4, + 0x5d8fc424, 0x38c37eef, 0x5d9ae8d2, 0x38bdafea, + 0x5da60c5d, 0x38b7deb4, 0x5db12ec3, 0x38b20b4f, + 0x5dbc5004, 0x38ac35ba, 0x5dc7701f, 0x38a65df6, + 0x5dd28f15, 0x38a08402, 0x5dddace4, 0x389aa7e0, + 0x5de8c98c, 0x3894c98f, 0x5df3e50d, 0x388ee910, + 0x5dfeff67, 0x38890663, 0x5e0a1898, 0x38832187, + 0x5e1530a1, 0x387d3a7e, 0x5e204781, 0x38775147, + 0x5e2b5d38, 0x387165e3, 0x5e3671c5, 0x386b7852, + 0x5e418528, 0x38658894, 0x5e4c9760, 0x385f96a9, + 0x5e57a86d, 0x3859a292, 0x5e62b84f, 0x3853ac4f, + 0x5e6dc705, 0x384db3e0, 0x5e78d48e, 0x3847b946, + 0x5e83e0eb, 0x3841bc7f, 0x5e8eec1b, 0x383bbd8e, + 0x5e99f61d, 0x3835bc71, 0x5ea4fef0, 0x382fb92a, + 0x5eb00696, 0x3829b3b9, 0x5ebb0d0d, 0x3823ac1d, + 0x5ec61254, 0x381da256, 0x5ed1166b, 0x38179666, + 0x5edc1953, 0x3811884d, 0x5ee71b0a, 0x380b780a, + 0x5ef21b90, 0x3805659e, 0x5efd1ae4, 0x37ff5109, + 0x5f081907, 0x37f93a4b, 0x5f1315f7, 0x37f32165, + 0x5f1e11b5, 0x37ed0657, 0x5f290c3f, 0x37e6e921, + 0x5f340596, 0x37e0c9c3, 0x5f3efdb9, 0x37daa83d, + 0x5f49f4a8, 0x37d48490, 0x5f54ea62, 0x37ce5ebd, + 0x5f5fdee6, 0x37c836c2, 0x5f6ad235, 0x37c20ca1, + 0x5f75c44e, 0x37bbe05a, 0x5f80b531, 0x37b5b1ec, + 0x5f8ba4dc, 0x37af8159, 0x5f969350, 0x37a94ea0, + 0x5fa1808c, 0x37a319c2, 0x5fac6c91, 0x379ce2be, + 0x5fb7575c, 0x3796a996, 0x5fc240ef, 0x37906e49, + 0x5fcd2948, 0x378a30d8, 0x5fd81067, 0x3783f143, + 0x5fe2f64c, 0x377daf89, 0x5feddaf6, 0x37776bac, + 0x5ff8be65, 0x377125ac, 0x6003a099, 0x376add88, + 0x600e8190, 0x37649341, 0x6019614c, 0x375e46d8, + 0x60243fca, 0x3757f84c, 0x602f1d0b, 0x3751a79e, + 0x6039f90f, 0x374b54ce, 0x6044d3d4, 0x3744ffdd, + 0x604fad5b, 0x373ea8ca, 0x605a85a3, 0x37384f95, + 0x60655cac, 0x3731f440, 0x60703275, 0x372b96ca, + 0x607b06fe, 0x37253733, 0x6085da46, 0x371ed57c, + 0x6090ac4d, 0x371871a5, 0x609b7d13, 0x37120bae, + 0x60a64c97, 0x370ba398, 0x60b11ad9, 0x37053962, + 0x60bbe7d8, 0x36fecd0e, 0x60c6b395, 0x36f85e9a, + 0x60d17e0d, 0x36f1ee09, 0x60dc4742, 0x36eb7b58, + 0x60e70f32, 0x36e5068a, 0x60f1d5de, 0x36de8f9e, + 0x60fc9b44, 0x36d81695, 0x61075f65, 0x36d19b6e, + 0x61122240, 0x36cb1e2a, 0x611ce3d5, 0x36c49ec9, + 0x6127a423, 0x36be1d4c, 0x61326329, 0x36b799b3, + 0x613d20e8, 0x36b113fd, 0x6147dd5f, 0x36aa8c2c, + 0x6152988d, 0x36a4023f, 0x615d5273, 0x369d7637, + 0x61680b0f, 0x3696e814, 0x6172c262, 0x369057d6, + 0x617d786a, 0x3689c57d, 0x61882d28, 0x3683310b, + 0x6192e09b, 0x367c9a7e, 0x619d92c2, 0x367601d7, + 0x61a8439e, 0x366f6717, 0x61b2f32e, 0x3668ca3e, + 0x61bda171, 0x36622b4c, 0x61c84e67, 0x365b8a41, + 0x61d2fa0f, 0x3654e71d, 0x61dda46a, 0x364e41e2, + 0x61e84d76, 0x36479a8e, 0x61f2f534, 0x3640f123, + 0x61fd9ba3, 0x363a45a0, 0x620840c2, 0x36339806, + 0x6212e492, 0x362ce855, 0x621d8711, 0x3626368d, + 0x6228283f, 0x361f82af, 0x6232c81c, 0x3618ccba, + 0x623d66a8, 0x361214b0, 0x624803e2, 0x360b5a90, + 0x62529fca, 0x36049e5b, 0x625d3a5e, 0x35fde011, + 0x6267d3a0, 0x35f71fb1, 0x62726b8e, 0x35f05d3d, + 0x627d0228, 0x35e998b5, 0x6287976e, 0x35e2d219, + 0x62922b5e, 0x35dc0968, 0x629cbdfa, 0x35d53ea5, + 0x62a74f40, 0x35ce71ce, 0x62b1df30, 0x35c7a2e3, + 0x62bc6dca, 0x35c0d1e7, 0x62c6fb0c, 0x35b9fed7, + 0x62d186f8, 0x35b329b5, 0x62dc118c, 0x35ac5282, + 0x62e69ac8, 0x35a5793c, 0x62f122ab, 0x359e9de5, + 0x62fba936, 0x3597c07d, 0x63062e67, 0x3590e104, + 0x6310b23e, 0x3589ff7a, 0x631b34bc, 0x35831be0, + 0x6325b5df, 0x357c3636, 0x633035a7, 0x35754e7c, + 0x633ab414, 0x356e64b2, 0x63453125, 0x356778d9, + 0x634facda, 0x35608af1, 0x635a2733, 0x35599afa, + 0x6364a02e, 0x3552a8f4, 0x636f17cc, 0x354bb4e1, + 0x63798e0d, 0x3544bebf, 0x638402ef, 0x353dc68f, + 0x638e7673, 0x3536cc52, 0x6398e898, 0x352fd008, + 0x63a3595e, 0x3528d1b1, 0x63adc8c4, 0x3521d14d, + 0x63b836ca, 0x351acedd, 0x63c2a36f, 0x3513ca60, + 0x63cd0eb3, 0x350cc3d8, 0x63d77896, 0x3505bb44, + 0x63e1e117, 0x34feb0a5, 0x63ec4837, 0x34f7a3fb, + 0x63f6adf3, 0x34f09546, 0x6401124d, 0x34e98487, + 0x640b7543, 0x34e271bd, 0x6415d6d5, 0x34db5cea, + 0x64203704, 0x34d4460c, 0x642a95ce, 0x34cd2d26, + 0x6434f332, 0x34c61236, 0x643f4f32, 0x34bef53d, + 0x6449a9cc, 0x34b7d63c, 0x645402ff, 0x34b0b533, + 0x645e5acc, 0x34a99221, 0x6468b132, 0x34a26d08, + 0x64730631, 0x349b45e7, 0x647d59c8, 0x34941cbf, + 0x6487abf7, 0x348cf190, 0x6491fcbe, 0x3485c45b, + 0x649c4c1b, 0x347e951f, 0x64a69a0f, 0x347763dd, + 0x64b0e699, 0x34703095, 0x64bb31ba, 0x3468fb47, + 0x64c57b6f, 0x3461c3f5, 0x64cfc3ba, 0x345a8a9d, + 0x64da0a9a, 0x34534f41, 0x64e4500e, 0x344c11e0, + 0x64ee9415, 0x3444d27b, 0x64f8d6b0, 0x343d9112, + 0x650317df, 0x34364da6, 0x650d57a0, 0x342f0836, + 0x651795f3, 0x3427c0c3, 0x6521d2d8, 0x3420774d, + 0x652c0e4f, 0x34192bd5, 0x65364857, 0x3411de5b, + 0x654080ef, 0x340a8edf, 0x654ab818, 0x34033d61, + 0x6554edd1, 0x33fbe9e2, 0x655f2219, 0x33f49462, + 0x656954f1, 0x33ed3ce1, 0x65738657, 0x33e5e360, + 0x657db64c, 0x33de87de, 0x6587e4cf, 0x33d72a5d, + 0x659211df, 0x33cfcadc, 0x659c3d7c, 0x33c8695b, + 0x65a667a7, 0x33c105db, 0x65b0905d, 0x33b9a05d, + 0x65bab7a0, 0x33b238e0, 0x65c4dd6e, 0x33aacf65, + 0x65cf01c8, 0x33a363ec, 0x65d924ac, 0x339bf675, + 0x65e3461b, 0x33948701, 0x65ed6614, 0x338d1590, + 0x65f78497, 0x3385a222, 0x6601a1a2, 0x337e2cb7, + 0x660bbd37, 0x3376b551, 0x6615d754, 0x336f3bee, + 0x661feffa, 0x3367c090, 0x662a0727, 0x33604336, + 0x66341cdb, 0x3358c3e2, 0x663e3117, 0x33514292, + 0x664843d9, 0x3349bf48, 0x66525521, 0x33423a04, + 0x665c64ef, 0x333ab2c6, 0x66667342, 0x3333298f, + 0x6670801a, 0x332b9e5e, 0x667a8b77, 0x33241134, + 0x66849558, 0x331c8211, 0x668e9dbd, 0x3314f0f6, + 0x6698a4a6, 0x330d5de3, 0x66a2aa11, 0x3305c8d7, + 0x66acadff, 0x32fe31d5, 0x66b6b070, 0x32f698db, + 0x66c0b162, 0x32eefdea, 0x66cab0d6, 0x32e76102, + 0x66d4aecb, 0x32dfc224, 0x66deab41, 0x32d82150, + 0x66e8a637, 0x32d07e85, 0x66f29fad, 0x32c8d9c6, + 0x66fc97a3, 0x32c13311, 0x67068e18, 0x32b98a67, + 0x6710830c, 0x32b1dfc9, 0x671a767e, 0x32aa3336, + 0x6724686e, 0x32a284b0, 0x672e58dc, 0x329ad435, + 0x673847c8, 0x329321c7, 0x67423530, 0x328b6d66, + 0x674c2115, 0x3283b712, 0x67560b76, 0x327bfecc, + 0x675ff452, 0x32744493, 0x6769dbaa, 0x326c8868, + 0x6773c17d, 0x3264ca4c, 0x677da5cb, 0x325d0a3e, + 0x67878893, 0x32554840, 0x679169d5, 0x324d8450, + 0x679b4990, 0x3245be70, 0x67a527c4, 0x323df6a0, + 0x67af0472, 0x32362ce0, 0x67b8df97, 0x322e6130, + 0x67c2b934, 0x32269391, 0x67cc9149, 0x321ec403, + 0x67d667d5, 0x3216f287, 0x67e03cd8, 0x320f1f1c, + 0x67ea1052, 0x320749c3, 0x67f3e241, 0x31ff727c, + 0x67fdb2a7, 0x31f79948, 0x68078181, 0x31efbe27, + 0x68114ed0, 0x31e7e118, 0x681b1a94, 0x31e0021e, + 0x6824e4cc, 0x31d82137, 0x682ead78, 0x31d03e64, + 0x68387498, 0x31c859a5, 0x68423a2a, 0x31c072fb, + 0x684bfe2f, 0x31b88a66, 0x6855c0a6, 0x31b09fe7, + 0x685f8190, 0x31a8b37c, 0x686940ea, 0x31a0c528, + 0x6872feb6, 0x3198d4ea, 0x687cbaf3, 0x3190e2c3, + 0x688675a0, 0x3188eeb2, 0x68902ebd, 0x3180f8b8, + 0x6899e64a, 0x317900d6, 0x68a39c46, 0x3171070c, + 0x68ad50b1, 0x31690b59, 0x68b7038b, 0x31610dbf, + 0x68c0b4d2, 0x31590e3e, 0x68ca6488, 0x31510cd5, + 0x68d412ab, 0x31490986, 0x68ddbf3b, 0x31410450, + 0x68e76a37, 0x3138fd35, 0x68f113a0, 0x3130f433, + 0x68fabb75, 0x3128e94c, 0x690461b5, 0x3120dc80, + 0x690e0661, 0x3118cdcf, 0x6917a977, 0x3110bd39, + 0x69214af8, 0x3108aabf, 0x692aeae3, 0x31009661, + 0x69348937, 0x30f8801f, 0x693e25f5, 0x30f067fb, + 0x6947c11c, 0x30e84df3, 0x69515aab, 0x30e03208, + 0x695af2a3, 0x30d8143b, 0x69648902, 0x30cff48c, + 0x696e1dc9, 0x30c7d2fb, 0x6977b0f7, 0x30bfaf89, + 0x6981428c, 0x30b78a36, 0x698ad287, 0x30af6302, + 0x699460e8, 0x30a739ed, 0x699dedaf, 0x309f0ef8, + 0x69a778db, 0x3096e223, 0x69b1026c, 0x308eb36f, + 0x69ba8a61, 0x308682dc, 0x69c410ba, 0x307e5069, + 0x69cd9578, 0x30761c18, 0x69d71899, 0x306de5e9, + 0x69e09a1c, 0x3065addb, 0x69ea1a03, 0x305d73f0, + 0x69f3984c, 0x30553828, 0x69fd14f6, 0x304cfa83, + 0x6a069003, 0x3044bb00, 0x6a100970, 0x303c79a2, + 0x6a19813f, 0x30343667, 0x6a22f76e, 0x302bf151, + 0x6a2c6bfd, 0x3023aa5f, 0x6a35deeb, 0x301b6193, + 0x6a3f503a, 0x301316eb, 0x6a48bfe7, 0x300aca69, + 0x6a522df3, 0x30027c0c, 0x6a5b9a5d, 0x2ffa2bd6, + 0x6a650525, 0x2ff1d9c7, 0x6a6e6e4b, 0x2fe985de, + 0x6a77d5ce, 0x2fe1301c, 0x6a813bae, 0x2fd8d882, + 0x6a8a9fea, 0x2fd07f0f, 0x6a940283, 0x2fc823c5, + 0x6a9d6377, 0x2fbfc6a3, 0x6aa6c2c6, 0x2fb767aa, + 0x6ab02071, 0x2faf06da, 0x6ab97c77, 0x2fa6a433, + 0x6ac2d6d6, 0x2f9e3fb6, 0x6acc2f90, 0x2f95d963, + 0x6ad586a3, 0x2f8d713a, 0x6adedc10, 0x2f85073c, + 0x6ae82fd5, 0x2f7c9b69, 0x6af181f3, 0x2f742dc1, + 0x6afad269, 0x2f6bbe45, 0x6b042137, 0x2f634cf5, + 0x6b0d6e5c, 0x2f5ad9d1, 0x6b16b9d9, 0x2f5264da, + 0x6b2003ac, 0x2f49ee0f, 0x6b294bd5, 0x2f417573, + 0x6b329255, 0x2f38fb03, 0x6b3bd72a, 0x2f307ec2, + 0x6b451a55, 0x2f2800af, 0x6b4e5bd4, 0x2f1f80ca, + 0x6b579ba8, 0x2f16ff14, 0x6b60d9d0, 0x2f0e7b8e, + 0x6b6a164d, 0x2f05f637, 0x6b73511c, 0x2efd6f10, + 0x6b7c8a3f, 0x2ef4e619, 0x6b85c1b5, 0x2eec5b53, + 0x6b8ef77d, 0x2ee3cebe, 0x6b982b97, 0x2edb405a, + 0x6ba15e03, 0x2ed2b027, 0x6baa8ec0, 0x2eca1e27, + 0x6bb3bdce, 0x2ec18a58, 0x6bbceb2d, 0x2eb8f4bc, + 0x6bc616dd, 0x2eb05d53, 0x6bcf40dc, 0x2ea7c41e, + 0x6bd8692b, 0x2e9f291b, 0x6be18fc9, 0x2e968c4d, + 0x6beab4b6, 0x2e8dedb3, 0x6bf3d7f2, 0x2e854d4d, + 0x6bfcf97c, 0x2e7cab1c, 0x6c061953, 0x2e740720, + 0x6c0f3779, 0x2e6b615a, 0x6c1853eb, 0x2e62b9ca, + 0x6c216eaa, 0x2e5a1070, 0x6c2a87b6, 0x2e51654c, + 0x6c339f0e, 0x2e48b860, 0x6c3cb4b1, 0x2e4009aa, + 0x6c45c8a0, 0x2e37592c, 0x6c4edada, 0x2e2ea6e6, + 0x6c57eb5e, 0x2e25f2d8, 0x6c60fa2d, 0x2e1d3d03, + 0x6c6a0746, 0x2e148566, 0x6c7312a9, 0x2e0bcc03, + 0x6c7c1c55, 0x2e0310d9, 0x6c85244a, 0x2dfa53e9, + 0x6c8e2a87, 0x2df19534, 0x6c972f0d, 0x2de8d4b8, + 0x6ca031da, 0x2de01278, 0x6ca932ef, 0x2dd74e73, + 0x6cb2324c, 0x2dce88aa, 0x6cbb2fef, 0x2dc5c11c, + 0x6cc42bd9, 0x2dbcf7cb, 0x6ccd2609, 0x2db42cb6, + 0x6cd61e7f, 0x2dab5fdf, 0x6cdf153a, 0x2da29144, + 0x6ce80a3a, 0x2d99c0e7, 0x6cf0fd80, 0x2d90eec8, + 0x6cf9ef09, 0x2d881ae8, 0x6d02ded7, 0x2d7f4545, + 0x6d0bcce8, 0x2d766de2, 0x6d14b93d, 0x2d6d94bf, + 0x6d1da3d5, 0x2d64b9da, 0x6d268cb0, 0x2d5bdd36, + 0x6d2f73cd, 0x2d52fed2, 0x6d38592c, 0x2d4a1eaf, + 0x6d413ccd, 0x2d413ccd, 0x6d4a1eaf, 0x2d38592c, + 0x6d52fed2, 0x2d2f73cd, 0x6d5bdd36, 0x2d268cb0, + 0x6d64b9da, 0x2d1da3d5, 0x6d6d94bf, 0x2d14b93d, + 0x6d766de2, 0x2d0bcce8, 0x6d7f4545, 0x2d02ded7, + 0x6d881ae8, 0x2cf9ef09, 0x6d90eec8, 0x2cf0fd80, + 0x6d99c0e7, 0x2ce80a3a, 0x6da29144, 0x2cdf153a, + 0x6dab5fdf, 0x2cd61e7f, 0x6db42cb6, 0x2ccd2609, + 0x6dbcf7cb, 0x2cc42bd9, 0x6dc5c11c, 0x2cbb2fef, + 0x6dce88aa, 0x2cb2324c, 0x6dd74e73, 0x2ca932ef, + 0x6de01278, 0x2ca031da, 0x6de8d4b8, 0x2c972f0d, + 0x6df19534, 0x2c8e2a87, 0x6dfa53e9, 0x2c85244a, + 0x6e0310d9, 0x2c7c1c55, 0x6e0bcc03, 0x2c7312a9, + 0x6e148566, 0x2c6a0746, 0x6e1d3d03, 0x2c60fa2d, + 0x6e25f2d8, 0x2c57eb5e, 0x6e2ea6e6, 0x2c4edada, + 0x6e37592c, 0x2c45c8a0, 0x6e4009aa, 0x2c3cb4b1, + 0x6e48b860, 0x2c339f0e, 0x6e51654c, 0x2c2a87b6, + 0x6e5a1070, 0x2c216eaa, 0x6e62b9ca, 0x2c1853eb, + 0x6e6b615a, 0x2c0f3779, 0x6e740720, 0x2c061953, + 0x6e7cab1c, 0x2bfcf97c, 0x6e854d4d, 0x2bf3d7f2, + 0x6e8dedb3, 0x2beab4b6, 0x6e968c4d, 0x2be18fc9, + 0x6e9f291b, 0x2bd8692b, 0x6ea7c41e, 0x2bcf40dc, + 0x6eb05d53, 0x2bc616dd, 0x6eb8f4bc, 0x2bbceb2d, + 0x6ec18a58, 0x2bb3bdce, 0x6eca1e27, 0x2baa8ec0, + 0x6ed2b027, 0x2ba15e03, 0x6edb405a, 0x2b982b97, + 0x6ee3cebe, 0x2b8ef77d, 0x6eec5b53, 0x2b85c1b5, + 0x6ef4e619, 0x2b7c8a3f, 0x6efd6f10, 0x2b73511c, + 0x6f05f637, 0x2b6a164d, 0x6f0e7b8e, 0x2b60d9d0, + 0x6f16ff14, 0x2b579ba8, 0x6f1f80ca, 0x2b4e5bd4, + 0x6f2800af, 0x2b451a55, 0x6f307ec2, 0x2b3bd72a, + 0x6f38fb03, 0x2b329255, 0x6f417573, 0x2b294bd5, + 0x6f49ee0f, 0x2b2003ac, 0x6f5264da, 0x2b16b9d9, + 0x6f5ad9d1, 0x2b0d6e5c, 0x6f634cf5, 0x2b042137, + 0x6f6bbe45, 0x2afad269, 0x6f742dc1, 0x2af181f3, + 0x6f7c9b69, 0x2ae82fd5, 0x6f85073c, 0x2adedc10, + 0x6f8d713a, 0x2ad586a3, 0x6f95d963, 0x2acc2f90, + 0x6f9e3fb6, 0x2ac2d6d6, 0x6fa6a433, 0x2ab97c77, + 0x6faf06da, 0x2ab02071, 0x6fb767aa, 0x2aa6c2c6, + 0x6fbfc6a3, 0x2a9d6377, 0x6fc823c5, 0x2a940283, + 0x6fd07f0f, 0x2a8a9fea, 0x6fd8d882, 0x2a813bae, + 0x6fe1301c, 0x2a77d5ce, 0x6fe985de, 0x2a6e6e4b, + 0x6ff1d9c7, 0x2a650525, 0x6ffa2bd6, 0x2a5b9a5d, + 0x70027c0c, 0x2a522df3, 0x700aca69, 0x2a48bfe7, + 0x701316eb, 0x2a3f503a, 0x701b6193, 0x2a35deeb, + 0x7023aa5f, 0x2a2c6bfd, 0x702bf151, 0x2a22f76e, + 0x70343667, 0x2a19813f, 0x703c79a2, 0x2a100970, + 0x7044bb00, 0x2a069003, 0x704cfa83, 0x29fd14f6, + 0x70553828, 0x29f3984c, 0x705d73f0, 0x29ea1a03, + 0x7065addb, 0x29e09a1c, 0x706de5e9, 0x29d71899, + 0x70761c18, 0x29cd9578, 0x707e5069, 0x29c410ba, + 0x708682dc, 0x29ba8a61, 0x708eb36f, 0x29b1026c, + 0x7096e223, 0x29a778db, 0x709f0ef8, 0x299dedaf, + 0x70a739ed, 0x299460e8, 0x70af6302, 0x298ad287, + 0x70b78a36, 0x2981428c, 0x70bfaf89, 0x2977b0f7, + 0x70c7d2fb, 0x296e1dc9, 0x70cff48c, 0x29648902, + 0x70d8143b, 0x295af2a3, 0x70e03208, 0x29515aab, + 0x70e84df3, 0x2947c11c, 0x70f067fb, 0x293e25f5, + 0x70f8801f, 0x29348937, 0x71009661, 0x292aeae3, + 0x7108aabf, 0x29214af8, 0x7110bd39, 0x2917a977, + 0x7118cdcf, 0x290e0661, 0x7120dc80, 0x290461b5, + 0x7128e94c, 0x28fabb75, 0x7130f433, 0x28f113a0, + 0x7138fd35, 0x28e76a37, 0x71410450, 0x28ddbf3b, + 0x71490986, 0x28d412ab, 0x71510cd5, 0x28ca6488, + 0x71590e3e, 0x28c0b4d2, 0x71610dbf, 0x28b7038b, + 0x71690b59, 0x28ad50b1, 0x7171070c, 0x28a39c46, + 0x717900d6, 0x2899e64a, 0x7180f8b8, 0x28902ebd, + 0x7188eeb2, 0x288675a0, 0x7190e2c3, 0x287cbaf3, + 0x7198d4ea, 0x2872feb6, 0x71a0c528, 0x286940ea, + 0x71a8b37c, 0x285f8190, 0x71b09fe7, 0x2855c0a6, + 0x71b88a66, 0x284bfe2f, 0x71c072fb, 0x28423a2a, + 0x71c859a5, 0x28387498, 0x71d03e64, 0x282ead78, + 0x71d82137, 0x2824e4cc, 0x71e0021e, 0x281b1a94, + 0x71e7e118, 0x28114ed0, 0x71efbe27, 0x28078181, + 0x71f79948, 0x27fdb2a7, 0x71ff727c, 0x27f3e241, + 0x720749c3, 0x27ea1052, 0x720f1f1c, 0x27e03cd8, + 0x7216f287, 0x27d667d5, 0x721ec403, 0x27cc9149, + 0x72269391, 0x27c2b934, 0x722e6130, 0x27b8df97, + 0x72362ce0, 0x27af0472, 0x723df6a0, 0x27a527c4, + 0x7245be70, 0x279b4990, 0x724d8450, 0x279169d5, + 0x72554840, 0x27878893, 0x725d0a3e, 0x277da5cb, + 0x7264ca4c, 0x2773c17d, 0x726c8868, 0x2769dbaa, + 0x72744493, 0x275ff452, 0x727bfecc, 0x27560b76, + 0x7283b712, 0x274c2115, 0x728b6d66, 0x27423530, + 0x729321c7, 0x273847c8, 0x729ad435, 0x272e58dc, + 0x72a284b0, 0x2724686e, 0x72aa3336, 0x271a767e, + 0x72b1dfc9, 0x2710830c, 0x72b98a67, 0x27068e18, + 0x72c13311, 0x26fc97a3, 0x72c8d9c6, 0x26f29fad, + 0x72d07e85, 0x26e8a637, 0x72d82150, 0x26deab41, + 0x72dfc224, 0x26d4aecb, 0x72e76102, 0x26cab0d6, + 0x72eefdea, 0x26c0b162, 0x72f698db, 0x26b6b070, + 0x72fe31d5, 0x26acadff, 0x7305c8d7, 0x26a2aa11, + 0x730d5de3, 0x2698a4a6, 0x7314f0f6, 0x268e9dbd, + 0x731c8211, 0x26849558, 0x73241134, 0x267a8b77, + 0x732b9e5e, 0x2670801a, 0x7333298f, 0x26667342, + 0x733ab2c6, 0x265c64ef, 0x73423a04, 0x26525521, + 0x7349bf48, 0x264843d9, 0x73514292, 0x263e3117, + 0x7358c3e2, 0x26341cdb, 0x73604336, 0x262a0727, + 0x7367c090, 0x261feffa, 0x736f3bee, 0x2615d754, + 0x7376b551, 0x260bbd37, 0x737e2cb7, 0x2601a1a2, + 0x7385a222, 0x25f78497, 0x738d1590, 0x25ed6614, + 0x73948701, 0x25e3461b, 0x739bf675, 0x25d924ac, + 0x73a363ec, 0x25cf01c8, 0x73aacf65, 0x25c4dd6e, + 0x73b238e0, 0x25bab7a0, 0x73b9a05d, 0x25b0905d, + 0x73c105db, 0x25a667a7, 0x73c8695b, 0x259c3d7c, + 0x73cfcadc, 0x259211df, 0x73d72a5d, 0x2587e4cf, + 0x73de87de, 0x257db64c, 0x73e5e360, 0x25738657, + 0x73ed3ce1, 0x256954f1, 0x73f49462, 0x255f2219, + 0x73fbe9e2, 0x2554edd1, 0x74033d61, 0x254ab818, + 0x740a8edf, 0x254080ef, 0x7411de5b, 0x25364857, + 0x74192bd5, 0x252c0e4f, 0x7420774d, 0x2521d2d8, + 0x7427c0c3, 0x251795f3, 0x742f0836, 0x250d57a0, + 0x74364da6, 0x250317df, 0x743d9112, 0x24f8d6b0, + 0x7444d27b, 0x24ee9415, 0x744c11e0, 0x24e4500e, + 0x74534f41, 0x24da0a9a, 0x745a8a9d, 0x24cfc3ba, + 0x7461c3f5, 0x24c57b6f, 0x7468fb47, 0x24bb31ba, + 0x74703095, 0x24b0e699, 0x747763dd, 0x24a69a0f, + 0x747e951f, 0x249c4c1b, 0x7485c45b, 0x2491fcbe, + 0x748cf190, 0x2487abf7, 0x74941cbf, 0x247d59c8, + 0x749b45e7, 0x24730631, 0x74a26d08, 0x2468b132, + 0x74a99221, 0x245e5acc, 0x74b0b533, 0x245402ff, + 0x74b7d63c, 0x2449a9cc, 0x74bef53d, 0x243f4f32, + 0x74c61236, 0x2434f332, 0x74cd2d26, 0x242a95ce, + 0x74d4460c, 0x24203704, 0x74db5cea, 0x2415d6d5, + 0x74e271bd, 0x240b7543, 0x74e98487, 0x2401124d, + 0x74f09546, 0x23f6adf3, 0x74f7a3fb, 0x23ec4837, + 0x74feb0a5, 0x23e1e117, 0x7505bb44, 0x23d77896, + 0x750cc3d8, 0x23cd0eb3, 0x7513ca60, 0x23c2a36f, + 0x751acedd, 0x23b836ca, 0x7521d14d, 0x23adc8c4, + 0x7528d1b1, 0x23a3595e, 0x752fd008, 0x2398e898, + 0x7536cc52, 0x238e7673, 0x753dc68f, 0x238402ef, + 0x7544bebf, 0x23798e0d, 0x754bb4e1, 0x236f17cc, + 0x7552a8f4, 0x2364a02e, 0x75599afa, 0x235a2733, + 0x75608af1, 0x234facda, 0x756778d9, 0x23453125, + 0x756e64b2, 0x233ab414, 0x75754e7c, 0x233035a7, + 0x757c3636, 0x2325b5df, 0x75831be0, 0x231b34bc, + 0x7589ff7a, 0x2310b23e, 0x7590e104, 0x23062e67, + 0x7597c07d, 0x22fba936, 0x759e9de5, 0x22f122ab, + 0x75a5793c, 0x22e69ac8, 0x75ac5282, 0x22dc118c, + 0x75b329b5, 0x22d186f8, 0x75b9fed7, 0x22c6fb0c, + 0x75c0d1e7, 0x22bc6dca, 0x75c7a2e3, 0x22b1df30, + 0x75ce71ce, 0x22a74f40, 0x75d53ea5, 0x229cbdfa, + 0x75dc0968, 0x22922b5e, 0x75e2d219, 0x2287976e, + 0x75e998b5, 0x227d0228, 0x75f05d3d, 0x22726b8e, + 0x75f71fb1, 0x2267d3a0, 0x75fde011, 0x225d3a5e, + 0x76049e5b, 0x22529fca, 0x760b5a90, 0x224803e2, + 0x761214b0, 0x223d66a8, 0x7618ccba, 0x2232c81c, + 0x761f82af, 0x2228283f, 0x7626368d, 0x221d8711, + 0x762ce855, 0x2212e492, 0x76339806, 0x220840c2, + 0x763a45a0, 0x21fd9ba3, 0x7640f123, 0x21f2f534, + 0x76479a8e, 0x21e84d76, 0x764e41e2, 0x21dda46a, + 0x7654e71d, 0x21d2fa0f, 0x765b8a41, 0x21c84e67, + 0x76622b4c, 0x21bda171, 0x7668ca3e, 0x21b2f32e, + 0x766f6717, 0x21a8439e, 0x767601d7, 0x219d92c2, + 0x767c9a7e, 0x2192e09b, 0x7683310b, 0x21882d28, + 0x7689c57d, 0x217d786a, 0x769057d6, 0x2172c262, + 0x7696e814, 0x21680b0f, 0x769d7637, 0x215d5273, + 0x76a4023f, 0x2152988d, 0x76aa8c2c, 0x2147dd5f, + 0x76b113fd, 0x213d20e8, 0x76b799b3, 0x21326329, + 0x76be1d4c, 0x2127a423, 0x76c49ec9, 0x211ce3d5, + 0x76cb1e2a, 0x21122240, 0x76d19b6e, 0x21075f65, + 0x76d81695, 0x20fc9b44, 0x76de8f9e, 0x20f1d5de, + 0x76e5068a, 0x20e70f32, 0x76eb7b58, 0x20dc4742, + 0x76f1ee09, 0x20d17e0d, 0x76f85e9a, 0x20c6b395, + 0x76fecd0e, 0x20bbe7d8, 0x77053962, 0x20b11ad9, + 0x770ba398, 0x20a64c97, 0x77120bae, 0x209b7d13, + 0x771871a5, 0x2090ac4d, 0x771ed57c, 0x2085da46, + 0x77253733, 0x207b06fe, 0x772b96ca, 0x20703275, + 0x7731f440, 0x20655cac, 0x77384f95, 0x205a85a3, + 0x773ea8ca, 0x204fad5b, 0x7744ffdd, 0x2044d3d4, + 0x774b54ce, 0x2039f90f, 0x7751a79e, 0x202f1d0b, + 0x7757f84c, 0x20243fca, 0x775e46d8, 0x2019614c, + 0x77649341, 0x200e8190, 0x776add88, 0x2003a099, + 0x777125ac, 0x1ff8be65, 0x77776bac, 0x1feddaf6, + 0x777daf89, 0x1fe2f64c, 0x7783f143, 0x1fd81067, + 0x778a30d8, 0x1fcd2948, 0x77906e49, 0x1fc240ef, + 0x7796a996, 0x1fb7575c, 0x779ce2be, 0x1fac6c91, + 0x77a319c2, 0x1fa1808c, 0x77a94ea0, 0x1f969350, + 0x77af8159, 0x1f8ba4dc, 0x77b5b1ec, 0x1f80b531, + 0x77bbe05a, 0x1f75c44e, 0x77c20ca1, 0x1f6ad235, + 0x77c836c2, 0x1f5fdee6, 0x77ce5ebd, 0x1f54ea62, + 0x77d48490, 0x1f49f4a8, 0x77daa83d, 0x1f3efdb9, + 0x77e0c9c3, 0x1f340596, 0x77e6e921, 0x1f290c3f, + 0x77ed0657, 0x1f1e11b5, 0x77f32165, 0x1f1315f7, + 0x77f93a4b, 0x1f081907, 0x77ff5109, 0x1efd1ae4, + 0x7805659e, 0x1ef21b90, 0x780b780a, 0x1ee71b0a, + 0x7811884d, 0x1edc1953, 0x78179666, 0x1ed1166b, + 0x781da256, 0x1ec61254, 0x7823ac1d, 0x1ebb0d0d, + 0x7829b3b9, 0x1eb00696, 0x782fb92a, 0x1ea4fef0, + 0x7835bc71, 0x1e99f61d, 0x783bbd8e, 0x1e8eec1b, + 0x7841bc7f, 0x1e83e0eb, 0x7847b946, 0x1e78d48e, + 0x784db3e0, 0x1e6dc705, 0x7853ac4f, 0x1e62b84f, + 0x7859a292, 0x1e57a86d, 0x785f96a9, 0x1e4c9760, + 0x78658894, 0x1e418528, 0x786b7852, 0x1e3671c5, + 0x787165e3, 0x1e2b5d38, 0x78775147, 0x1e204781, + 0x787d3a7e, 0x1e1530a1, 0x78832187, 0x1e0a1898, + 0x78890663, 0x1dfeff67, 0x788ee910, 0x1df3e50d, + 0x7894c98f, 0x1de8c98c, 0x789aa7e0, 0x1dddace4, + 0x78a08402, 0x1dd28f15, 0x78a65df6, 0x1dc7701f, + 0x78ac35ba, 0x1dbc5004, 0x78b20b4f, 0x1db12ec3, + 0x78b7deb4, 0x1da60c5d, 0x78bdafea, 0x1d9ae8d2, + 0x78c37eef, 0x1d8fc424, 0x78c94bc4, 0x1d849e51, + 0x78cf1669, 0x1d79775c, 0x78d4dedd, 0x1d6e4f43, + 0x78daa520, 0x1d632608, 0x78e06932, 0x1d57fbaa, + 0x78e62b13, 0x1d4cd02c, 0x78ebeac2, 0x1d41a38c, + 0x78f1a840, 0x1d3675cb, 0x78f7638b, 0x1d2b46ea, + 0x78fd1ca4, 0x1d2016e9, 0x7902d38b, 0x1d14e5c9, + 0x7908883f, 0x1d09b389, 0x790e3ac0, 0x1cfe802b, + 0x7913eb0e, 0x1cf34baf, 0x79199929, 0x1ce81615, + 0x791f4510, 0x1cdcdf5e, 0x7924eec3, 0x1cd1a78a, + 0x792a9642, 0x1cc66e99, 0x79303b8e, 0x1cbb348d, + 0x7935dea4, 0x1caff965, 0x793b7f86, 0x1ca4bd21, + 0x79411e33, 0x1c997fc4, 0x7946baac, 0x1c8e414b, + 0x794c54ee, 0x1c8301b9, 0x7951ecfc, 0x1c77c10e, + 0x795782d3, 0x1c6c7f4a, 0x795d1675, 0x1c613c6d, + 0x7962a7e0, 0x1c55f878, 0x79683715, 0x1c4ab36b, + 0x796dc414, 0x1c3f6d47, 0x79734edc, 0x1c34260c, + 0x7978d76c, 0x1c28ddbb, 0x797e5dc6, 0x1c1d9454, + 0x7983e1e8, 0x1c1249d8, 0x798963d2, 0x1c06fe46, + 0x798ee385, 0x1bfbb1a0, 0x799460ff, 0x1bf063e6, + 0x7999dc42, 0x1be51518, 0x799f554b, 0x1bd9c537, + 0x79a4cc1c, 0x1bce7442, 0x79aa40b4, 0x1bc3223c, + 0x79afb313, 0x1bb7cf23, 0x79b52339, 0x1bac7af9, + 0x79ba9125, 0x1ba125bd, 0x79bffcd7, 0x1b95cf71, + 0x79c5664f, 0x1b8a7815, 0x79cacd8d, 0x1b7f1fa9, + 0x79d03291, 0x1b73c62d, 0x79d5955a, 0x1b686ba3, + 0x79daf5e8, 0x1b5d100a, 0x79e0543c, 0x1b51b363, + 0x79e5b054, 0x1b4655ae, 0x79eb0a31, 0x1b3af6ec, + 0x79f061d2, 0x1b2f971e, 0x79f5b737, 0x1b243643, + 0x79fb0a60, 0x1b18d45c, 0x7a005b4d, 0x1b0d716a, + 0x7a05a9fd, 0x1b020d6c, 0x7a0af671, 0x1af6a865, + 0x7a1040a8, 0x1aeb4253, 0x7a1588a2, 0x1adfdb37, + 0x7a1ace5f, 0x1ad47312, 0x7a2011de, 0x1ac909e5, + 0x7a25531f, 0x1abd9faf, 0x7a2a9223, 0x1ab23471, + 0x7a2fcee8, 0x1aa6c82b, 0x7a350970, 0x1a9b5adf, + 0x7a3a41b9, 0x1a8fec8c, 0x7a3f77c3, 0x1a847d33, + 0x7a44ab8e, 0x1a790cd4, 0x7a49dd1a, 0x1a6d9b70, + 0x7a4f0c67, 0x1a622907, 0x7a543974, 0x1a56b599, + 0x7a596442, 0x1a4b4128, 0x7a5e8cd0, 0x1a3fcbb3, + 0x7a63b31d, 0x1a34553b, 0x7a68d72b, 0x1a28ddc0, + 0x7a6df8f8, 0x1a1d6544, 0x7a731884, 0x1a11ebc5, + 0x7a7835cf, 0x1a067145, 0x7a7d50da, 0x19faf5c5, + 0x7a8269a3, 0x19ef7944, 0x7a87802a, 0x19e3fbc3, + 0x7a8c9470, 0x19d87d42, 0x7a91a674, 0x19ccfdc2, + 0x7a96b636, 0x19c17d44, 0x7a9bc3b6, 0x19b5fbc8, + 0x7aa0cef3, 0x19aa794d, 0x7aa5d7ee, 0x199ef5d6, + 0x7aaadea6, 0x19937161, 0x7aafe31b, 0x1987ebf0, + 0x7ab4e54c, 0x197c6584, 0x7ab9e53a, 0x1970de1b, + 0x7abee2e5, 0x196555b8, 0x7ac3de4c, 0x1959cc5a, + 0x7ac8d76f, 0x194e4201, 0x7acdce4d, 0x1942b6af, + 0x7ad2c2e8, 0x19372a64, 0x7ad7b53d, 0x192b9d1f, + 0x7adca54e, 0x19200ee3, 0x7ae1931a, 0x19147fae, + 0x7ae67ea1, 0x1908ef82, 0x7aeb67e3, 0x18fd5e5f, + 0x7af04edf, 0x18f1cc45, 0x7af53395, 0x18e63935, + 0x7afa1605, 0x18daa52f, 0x7afef630, 0x18cf1034, + 0x7b03d414, 0x18c37a44, 0x7b08afb2, 0x18b7e35f, + 0x7b0d8909, 0x18ac4b87, 0x7b126019, 0x18a0b2bb, + 0x7b1734e2, 0x189518fc, 0x7b1c0764, 0x18897e4a, + 0x7b20d79e, 0x187de2a7, 0x7b25a591, 0x18724611, + 0x7b2a713d, 0x1866a88a, 0x7b2f3aa0, 0x185b0a13, + 0x7b3401bb, 0x184f6aab, 0x7b38c68e, 0x1843ca53, + 0x7b3d8918, 0x1838290c, 0x7b42495a, 0x182c86d5, + 0x7b470753, 0x1820e3b0, 0x7b4bc303, 0x18153f9d, + 0x7b507c69, 0x18099a9c, 0x7b553386, 0x17fdf4ae, + 0x7b59e85a, 0x17f24dd3, 0x7b5e9ae4, 0x17e6a60c, + 0x7b634b23, 0x17dafd59, 0x7b67f919, 0x17cf53bb, + 0x7b6ca4c4, 0x17c3a931, 0x7b714e25, 0x17b7fdbd, + 0x7b75f53c, 0x17ac515f, 0x7b7a9a07, 0x17a0a417, + 0x7b7f3c87, 0x1794f5e6, 0x7b83dcbc, 0x178946cc, + 0x7b887aa6, 0x177d96ca, 0x7b8d1644, 0x1771e5e0, + 0x7b91af97, 0x1766340f, 0x7b96469d, 0x175a8157, + 0x7b9adb57, 0x174ecdb8, 0x7b9f6dc5, 0x17431933, + 0x7ba3fde7, 0x173763c9, 0x7ba88bbc, 0x172bad7a, + 0x7bad1744, 0x171ff646, 0x7bb1a080, 0x17143e2d, + 0x7bb6276e, 0x17088531, 0x7bbaac0e, 0x16fccb51, + 0x7bbf2e62, 0x16f1108f, 0x7bc3ae67, 0x16e554ea, + 0x7bc82c1f, 0x16d99864, 0x7bcca789, 0x16cddafb, + 0x7bd120a4, 0x16c21cb2, 0x7bd59771, 0x16b65d88, + 0x7bda0bf0, 0x16aa9d7e, 0x7bde7e20, 0x169edc94, + 0x7be2ee01, 0x16931acb, 0x7be75b93, 0x16875823, + 0x7bebc6d5, 0x167b949d, 0x7bf02fc9, 0x166fd039, + 0x7bf4966c, 0x16640af7, 0x7bf8fac0, 0x165844d8, + 0x7bfd5cc4, 0x164c7ddd, 0x7c01bc78, 0x1640b606, + 0x7c0619dc, 0x1634ed53, 0x7c0a74f0, 0x162923c5, + 0x7c0ecdb2, 0x161d595d, 0x7c132424, 0x16118e1a, + 0x7c177845, 0x1605c1fd, 0x7c1bca16, 0x15f9f507, + 0x7c201994, 0x15ee2738, 0x7c2466c2, 0x15e25890, + 0x7c28b19e, 0x15d68911, 0x7c2cfa28, 0x15cab8ba, + 0x7c314060, 0x15bee78c, 0x7c358446, 0x15b31587, + 0x7c39c5da, 0x15a742ac, 0x7c3e051b, 0x159b6efb, + 0x7c42420a, 0x158f9a76, 0x7c467ca6, 0x1583c51b, + 0x7c4ab4ef, 0x1577eeec, 0x7c4eeae5, 0x156c17e9, + 0x7c531e88, 0x15604013, 0x7c574fd8, 0x1554676a, + 0x7c5b7ed4, 0x15488dee, 0x7c5fab7c, 0x153cb3a0, + 0x7c63d5d1, 0x1530d881, 0x7c67fdd1, 0x1524fc90, + 0x7c6c237e, 0x15191fcf, 0x7c7046d6, 0x150d423d, + 0x7c7467d9, 0x150163dc, 0x7c788688, 0x14f584ac, + 0x7c7ca2e2, 0x14e9a4ac, 0x7c80bce7, 0x14ddc3de, + 0x7c84d496, 0x14d1e242, 0x7c88e9f1, 0x14c5ffd9, + 0x7c8cfcf6, 0x14ba1ca3, 0x7c910da5, 0x14ae38a0, + 0x7c951bff, 0x14a253d1, 0x7c992803, 0x14966e36, + 0x7c9d31b0, 0x148a87d1, 0x7ca13908, 0x147ea0a0, + 0x7ca53e09, 0x1472b8a5, 0x7ca940b3, 0x1466cfe1, + 0x7cad4107, 0x145ae653, 0x7cb13f04, 0x144efbfc, + 0x7cb53aaa, 0x144310dd, 0x7cb933f9, 0x143724f5, + 0x7cbd2af0, 0x142b3846, 0x7cc11f90, 0x141f4ad1, + 0x7cc511d9, 0x14135c94, 0x7cc901c9, 0x14076d91, + 0x7cccef62, 0x13fb7dc9, 0x7cd0daa2, 0x13ef8d3c, + 0x7cd4c38b, 0x13e39be9, 0x7cd8aa1b, 0x13d7a9d3, + 0x7cdc8e52, 0x13cbb6f8, 0x7ce07031, 0x13bfc35b, + 0x7ce44fb7, 0x13b3cefa, 0x7ce82ce4, 0x13a7d9d7, + 0x7cec07b8, 0x139be3f2, 0x7cefe032, 0x138fed4b, + 0x7cf3b653, 0x1383f5e3, 0x7cf78a1b, 0x1377fdbb, + 0x7cfb5b89, 0x136c04d2, 0x7cff2a9d, 0x13600b2a, + 0x7d02f757, 0x135410c3, 0x7d06c1b6, 0x1348159d, + 0x7d0a89bc, 0x133c19b8, 0x7d0e4f67, 0x13301d16, + 0x7d1212b7, 0x13241fb6, 0x7d15d3ad, 0x1318219a, + 0x7d199248, 0x130c22c1, 0x7d1d4e88, 0x1300232c, + 0x7d21086c, 0x12f422db, 0x7d24bff6, 0x12e821cf, + 0x7d287523, 0x12dc2009, 0x7d2c27f6, 0x12d01d89, + 0x7d2fd86c, 0x12c41a4f, 0x7d338687, 0x12b8165b, + 0x7d373245, 0x12ac11af, 0x7d3adba7, 0x12a00c4b, + 0x7d3e82ae, 0x1294062f, 0x7d422757, 0x1287ff5b, + 0x7d45c9a4, 0x127bf7d1, 0x7d496994, 0x126fef90, + 0x7d4d0728, 0x1263e699, 0x7d50a25e, 0x1257dced, + 0x7d543b37, 0x124bd28c, 0x7d57d1b3, 0x123fc776, + 0x7d5b65d2, 0x1233bbac, 0x7d5ef793, 0x1227af2e, + 0x7d6286f6, 0x121ba1fd, 0x7d6613fb, 0x120f941a, + 0x7d699ea3, 0x12038584, 0x7d6d26ec, 0x11f7763c, + 0x7d70acd7, 0x11eb6643, 0x7d743064, 0x11df5599, + 0x7d77b192, 0x11d3443f, 0x7d7b3061, 0x11c73235, + 0x7d7eacd2, 0x11bb1f7c, 0x7d8226e4, 0x11af0c13, + 0x7d859e96, 0x11a2f7fc, 0x7d8913ea, 0x1196e337, + 0x7d8c86de, 0x118acdc4, 0x7d8ff772, 0x117eb7a4, + 0x7d9365a8, 0x1172a0d7, 0x7d96d17d, 0x1166895f, + 0x7d9a3af2, 0x115a713a, 0x7d9da208, 0x114e586a, + 0x7da106bd, 0x11423ef0, 0x7da46912, 0x113624cb, + 0x7da7c907, 0x112a09fc, 0x7dab269b, 0x111dee84, + 0x7dae81cf, 0x1111d263, 0x7db1daa2, 0x1105b599, + 0x7db53113, 0x10f99827, 0x7db88524, 0x10ed7a0e, + 0x7dbbd6d4, 0x10e15b4e, 0x7dbf2622, 0x10d53be7, + 0x7dc2730f, 0x10c91bda, 0x7dc5bd9b, 0x10bcfb28, + 0x7dc905c5, 0x10b0d9d0, 0x7dcc4b8d, 0x10a4b7d3, + 0x7dcf8ef3, 0x10989532, 0x7dd2cff7, 0x108c71ee, + 0x7dd60e99, 0x10804e06, 0x7dd94ad8, 0x1074297b, + 0x7ddc84b5, 0x1068044e, 0x7ddfbc30, 0x105bde7f, + 0x7de2f148, 0x104fb80e, 0x7de623fd, 0x104390fd, + 0x7de9544f, 0x1037694b, 0x7dec823e, 0x102b40f8, + 0x7defadca, 0x101f1807, 0x7df2d6f3, 0x1012ee76, + 0x7df5fdb8, 0x1006c446, 0x7df9221a, 0xffa9979, + 0x7dfc4418, 0xfee6e0d, 0x7dff63b2, 0xfe24205, + 0x7e0280e9, 0xfd6155f, 0x7e059bbb, 0xfc9e81e, + 0x7e08b42a, 0xfbdba40, 0x7e0bca34, 0xfb18bc8, + 0x7e0eddd9, 0xfa55cb4, 0x7e11ef1b, 0xf992d06, + 0x7e14fdf7, 0xf8cfcbe, 0x7e180a6f, 0xf80cbdc, + 0x7e1b1482, 0xf749a61, 0x7e1e1c30, 0xf68684e, + 0x7e212179, 0xf5c35a3, 0x7e24245d, 0xf500260, + 0x7e2724db, 0xf43ce86, 0x7e2a22f4, 0xf379a16, + 0x7e2d1ea8, 0xf2b650f, 0x7e3017f6, 0xf1f2f73, + 0x7e330ede, 0xf12f941, 0x7e360360, 0xf06c27a, + 0x7e38f57c, 0xefa8b20, 0x7e3be532, 0xeee5331, + 0x7e3ed282, 0xee21aaf, 0x7e41bd6c, 0xed5e19a, + 0x7e44a5ef, 0xec9a7f3, 0x7e478c0b, 0xebd6db9, + 0x7e4a6fc1, 0xeb132ef, 0x7e4d5110, 0xea4f793, + 0x7e502ff9, 0xe98bba7, 0x7e530c7a, 0xe8c7f2a, + 0x7e55e694, 0xe80421e, 0x7e58be47, 0xe740483, + 0x7e5b9392, 0xe67c65a, 0x7e5e6676, 0xe5b87a2, + 0x7e6136f3, 0xe4f485c, 0x7e640507, 0xe430889, + 0x7e66d0b4, 0xe36c82a, 0x7e6999fa, 0xe2a873e, + 0x7e6c60d7, 0xe1e45c6, 0x7e6f254c, 0xe1203c3, + 0x7e71e759, 0xe05c135, 0x7e74a6fd, 0xdf97e1d, + 0x7e77643a, 0xded3a7b, 0x7e7a1f0d, 0xde0f64f, + 0x7e7cd778, 0xdd4b19a, 0x7e7f8d7b, 0xdc86c5d, + 0x7e824114, 0xdbc2698, 0x7e84f245, 0xdafe04b, + 0x7e87a10c, 0xda39978, 0x7e8a4d6a, 0xd97521d, + 0x7e8cf75f, 0xd8b0a3d, 0x7e8f9eeb, 0xd7ec1d6, + 0x7e92440d, 0xd7278eb, 0x7e94e6c6, 0xd662f7b, + 0x7e978715, 0xd59e586, 0x7e9a24fb, 0xd4d9b0e, + 0x7e9cc076, 0xd415013, 0x7e9f5988, 0xd350495, + 0x7ea1f02f, 0xd28b894, 0x7ea4846c, 0xd1c6c11, + 0x7ea7163f, 0xd101f0e, 0x7ea9a5a8, 0xd03d189, + 0x7eac32a6, 0xcf78383, 0x7eaebd3a, 0xceb34fe, + 0x7eb14563, 0xcdee5f9, 0x7eb3cb21, 0xcd29676, + 0x7eb64e75, 0xcc64673, 0x7eb8cf5d, 0xcb9f5f3, + 0x7ebb4ddb, 0xcada4f5, 0x7ebdc9ed, 0xca1537a, + 0x7ec04394, 0xc950182, 0x7ec2bad0, 0xc88af0e, + 0x7ec52fa0, 0xc7c5c1e, 0x7ec7a205, 0xc7008b3, + 0x7eca11fe, 0xc63b4ce, 0x7ecc7f8b, 0xc57606e, + 0x7eceeaad, 0xc4b0b94, 0x7ed15363, 0xc3eb641, + 0x7ed3b9ad, 0xc326075, 0x7ed61d8a, 0xc260a31, + 0x7ed87efc, 0xc19b374, 0x7edade01, 0xc0d5c41, + 0x7edd3a9a, 0xc010496, 0x7edf94c7, 0xbf4ac75, + 0x7ee1ec87, 0xbe853de, 0x7ee441da, 0xbdbfad1, + 0x7ee694c1, 0xbcfa150, 0x7ee8e53a, 0xbc34759, + 0x7eeb3347, 0xbb6ecef, 0x7eed7ee7, 0xbaa9211, + 0x7eefc81a, 0xb9e36c0, 0x7ef20ee0, 0xb91dafc, + 0x7ef45338, 0xb857ec7, 0x7ef69523, 0xb79221f, + 0x7ef8d4a1, 0xb6cc506, 0x7efb11b1, 0xb60677c, + 0x7efd4c54, 0xb540982, 0x7eff8489, 0xb47ab19, + 0x7f01ba50, 0xb3b4c40, 0x7f03eda9, 0xb2eecf8, + 0x7f061e95, 0xb228d42, 0x7f084d12, 0xb162d1d, + 0x7f0a7921, 0xb09cc8c, 0x7f0ca2c2, 0xafd6b8d, + 0x7f0ec9f5, 0xaf10a22, 0x7f10eeb9, 0xae4a84b, + 0x7f13110f, 0xad84609, 0x7f1530f7, 0xacbe35b, + 0x7f174e70, 0xabf8043, 0x7f19697a, 0xab31cc1, + 0x7f1b8215, 0xaa6b8d5, 0x7f1d9842, 0xa9a5480, + 0x7f1fabff, 0xa8defc3, 0x7f21bd4e, 0xa818a9d, + 0x7f23cc2e, 0xa752510, 0x7f25d89e, 0xa68bf1b, + 0x7f27e29f, 0xa5c58c0, 0x7f29ea31, 0xa4ff1fe, + 0x7f2bef53, 0xa438ad7, 0x7f2df206, 0xa37234a, + 0x7f2ff24a, 0xa2abb59, 0x7f31f01d, 0xa1e5303, + 0x7f33eb81, 0xa11ea49, 0x7f35e476, 0xa05812c, + 0x7f37dafa, 0x9f917ac, 0x7f39cf0e, 0x9ecadc9, + 0x7f3bc0b3, 0x9e04385, 0x7f3dafe7, 0x9d3d8df, + 0x7f3f9cab, 0x9c76dd8, 0x7f4186ff, 0x9bb0271, + 0x7f436ee3, 0x9ae96aa, 0x7f455456, 0x9a22a83, + 0x7f473759, 0x995bdfd, 0x7f4917eb, 0x9895118, + 0x7f4af60d, 0x97ce3d5, 0x7f4cd1be, 0x9707635, + 0x7f4eaafe, 0x9640837, 0x7f5081cd, 0x95799dd, + 0x7f52562c, 0x94b2b27, 0x7f54281a, 0x93ebc14, + 0x7f55f796, 0x9324ca7, 0x7f57c4a2, 0x925dcdf, + 0x7f598f3c, 0x9196cbc, 0x7f5b5765, 0x90cfc40, + 0x7f5d1d1d, 0x9008b6a, 0x7f5ee063, 0x8f41a3c, + 0x7f60a138, 0x8e7a8b5, 0x7f625f9b, 0x8db36d6, + 0x7f641b8d, 0x8cec4a0, 0x7f65d50d, 0x8c25213, + 0x7f678c1c, 0x8b5df30, 0x7f6940b8, 0x8a96bf6, + 0x7f6af2e3, 0x89cf867, 0x7f6ca29c, 0x8908483, + 0x7f6e4fe3, 0x884104b, 0x7f6ffab8, 0x8779bbe, + 0x7f71a31b, 0x86b26de, 0x7f73490b, 0x85eb1ab, + 0x7f74ec8a, 0x8523c25, 0x7f768d96, 0x845c64d, + 0x7f782c30, 0x8395024, 0x7f79c857, 0x82cd9a9, + 0x7f7b620c, 0x82062de, 0x7f7cf94e, 0x813ebc2, + 0x7f7e8e1e, 0x8077457, 0x7f80207b, 0x7fafc9c, + 0x7f81b065, 0x7ee8493, 0x7f833ddd, 0x7e20c3b, + 0x7f84c8e2, 0x7d59396, 0x7f865174, 0x7c91aa3, + 0x7f87d792, 0x7bca163, 0x7f895b3e, 0x7b027d7, + 0x7f8adc77, 0x7a3adff, 0x7f8c5b3d, 0x79733dc, + 0x7f8dd78f, 0x78ab96e, 0x7f8f516e, 0x77e3eb5, + 0x7f90c8da, 0x771c3b3, 0x7f923dd2, 0x7654867, + 0x7f93b058, 0x758ccd2, 0x7f952069, 0x74c50f4, + 0x7f968e07, 0x73fd4cf, 0x7f97f932, 0x7335862, + 0x7f9961e8, 0x726dbae, 0x7f9ac82c, 0x71a5eb3, + 0x7f9c2bfb, 0x70de172, 0x7f9d8d56, 0x70163eb, + 0x7f9eec3e, 0x6f4e620, 0x7fa048b2, 0x6e86810, + 0x7fa1a2b2, 0x6dbe9bb, 0x7fa2fa3d, 0x6cf6b23, + 0x7fa44f55, 0x6c2ec48, 0x7fa5a1f9, 0x6b66d29, + 0x7fa6f228, 0x6a9edc9, 0x7fa83fe3, 0x69d6e27, + 0x7fa98b2a, 0x690ee44, 0x7faad3fd, 0x6846e1f, + 0x7fac1a5b, 0x677edbb, 0x7fad5e45, 0x66b6d16, + 0x7fae9fbb, 0x65eec33, 0x7fafdebb, 0x6526b10, + 0x7fb11b48, 0x645e9af, 0x7fb2555f, 0x6396810, + 0x7fb38d02, 0x62ce634, 0x7fb4c231, 0x620641a, + 0x7fb5f4ea, 0x613e1c5, 0x7fb7252f, 0x6075f33, + 0x7fb852ff, 0x5fadc66, 0x7fb97e5a, 0x5ee595d, + 0x7fbaa740, 0x5e1d61b, 0x7fbbcdb1, 0x5d5529e, + 0x7fbcf1ad, 0x5c8cee7, 0x7fbe1334, 0x5bc4af8, + 0x7fbf3246, 0x5afc6d0, 0x7fc04ee3, 0x5a3426f, + 0x7fc1690a, 0x596bdd7, 0x7fc280bc, 0x58a3908, + 0x7fc395f9, 0x57db403, 0x7fc4a8c1, 0x5712ec7, + 0x7fc5b913, 0x564a955, 0x7fc6c6f0, 0x55823ae, + 0x7fc7d258, 0x54b9dd3, 0x7fc8db4a, 0x53f17c3, + 0x7fc9e1c6, 0x532917f, 0x7fcae5cd, 0x5260b08, + 0x7fcbe75e, 0x519845e, 0x7fcce67a, 0x50cfd82, + 0x7fcde320, 0x5007674, 0x7fcedd50, 0x4f3ef35, + 0x7fcfd50b, 0x4e767c5, 0x7fd0ca4f, 0x4dae024, + 0x7fd1bd1e, 0x4ce5854, 0x7fd2ad77, 0x4c1d054, + 0x7fd39b5a, 0x4b54825, 0x7fd486c7, 0x4a8bfc7, + 0x7fd56fbe, 0x49c373c, 0x7fd6563f, 0x48fae83, + 0x7fd73a4a, 0x483259d, 0x7fd81bdf, 0x4769c8b, + 0x7fd8fafe, 0x46a134c, 0x7fd9d7a7, 0x45d89e2, + 0x7fdab1d9, 0x451004d, 0x7fdb8996, 0x444768d, + 0x7fdc5edc, 0x437eca4, 0x7fdd31ac, 0x42b6290, + 0x7fde0205, 0x41ed854, 0x7fdecfe8, 0x4124dee, + 0x7fdf9b55, 0x405c361, 0x7fe0644b, 0x3f938ac, + 0x7fe12acb, 0x3ecadcf, 0x7fe1eed5, 0x3e022cc, + 0x7fe2b067, 0x3d397a3, 0x7fe36f84, 0x3c70c54, + 0x7fe42c2a, 0x3ba80df, 0x7fe4e659, 0x3adf546, + 0x7fe59e12, 0x3a16988, 0x7fe65354, 0x394dda7, + 0x7fe7061f, 0x38851a2, 0x7fe7b674, 0x37bc57b, + 0x7fe86452, 0x36f3931, 0x7fe90fb9, 0x362acc5, + 0x7fe9b8a9, 0x3562038, 0x7fea5f23, 0x3499389, + 0x7feb0326, 0x33d06bb, 0x7feba4b2, 0x33079cc, + 0x7fec43c7, 0x323ecbe, 0x7fece065, 0x3175f91, + 0x7fed7a8c, 0x30ad245, 0x7fee123d, 0x2fe44dc, + 0x7feea776, 0x2f1b755, 0x7fef3a39, 0x2e529b0, + 0x7fefca84, 0x2d89bf0, 0x7ff05858, 0x2cc0e13, + 0x7ff0e3b6, 0x2bf801a, 0x7ff16c9c, 0x2b2f207, + 0x7ff1f30b, 0x2a663d8, 0x7ff27703, 0x299d590, + 0x7ff2f884, 0x28d472e, 0x7ff3778e, 0x280b8b3, + 0x7ff3f420, 0x2742a1f, 0x7ff46e3c, 0x2679b73, + 0x7ff4e5e0, 0x25b0caf, 0x7ff55b0d, 0x24e7dd4, + 0x7ff5cdc3, 0x241eee2, 0x7ff63e01, 0x2355fd9, + 0x7ff6abc8, 0x228d0bb, 0x7ff71718, 0x21c4188, + 0x7ff77ff1, 0x20fb240, 0x7ff7e652, 0x20322e3, + 0x7ff84a3c, 0x1f69373, 0x7ff8abae, 0x1ea03ef, + 0x7ff90aaa, 0x1dd7459, 0x7ff9672d, 0x1d0e4b0, + 0x7ff9c13a, 0x1c454f5, 0x7ffa18cf, 0x1b7c528, + 0x7ffa6dec, 0x1ab354b, 0x7ffac092, 0x19ea55d, + 0x7ffb10c1, 0x192155f, 0x7ffb5e78, 0x1858552, + 0x7ffba9b8, 0x178f536, 0x7ffbf280, 0x16c650b, + 0x7ffc38d1, 0x15fd4d2, 0x7ffc7caa, 0x153448c, + 0x7ffcbe0c, 0x146b438, 0x7ffcfcf6, 0x13a23d8, + 0x7ffd3969, 0x12d936c, 0x7ffd7364, 0x12102f4, + 0x7ffdaae7, 0x1147271, 0x7ffddff3, 0x107e1e3, + 0x7ffe1288, 0xfb514b, 0x7ffe42a4, 0xeec0aa, + 0x7ffe704a, 0xe22fff, 0x7ffe9b77, 0xd59f4c, + 0x7ffec42d, 0xc90e90, 0x7ffeea6c, 0xbc7dcc, + 0x7fff0e32, 0xafed02, 0x7fff2f82, 0xa35c30, + 0x7fff4e59, 0x96cb58, 0x7fff6ab9, 0x8a3a7b, + 0x7fff84a1, 0x7da998, 0x7fff9c12, 0x7118b0, + 0x7fffb10b, 0x6487c4, 0x7fffc38c, 0x57f6d4, + 0x7fffd396, 0x4b65e1, 0x7fffe128, 0x3ed4ea, + 0x7fffec43, 0x3243f1, 0x7ffff4e6, 0x25b2f7, + 0x7ffffb11, 0x1921fb, 0x7ffffec4, 0xc90fe, + 0x7fffffff, 0x0, 0x7ffffec4, 0xfff36f02, + 0x7ffffb11, 0xffe6de05, 0x7ffff4e6, 0xffda4d09, + 0x7fffec43, 0xffcdbc0f, 0x7fffe128, 0xffc12b16, + 0x7fffd396, 0xffb49a1f, 0x7fffc38c, 0xffa8092c, + 0x7fffb10b, 0xff9b783c, 0x7fff9c12, 0xff8ee750, + 0x7fff84a1, 0xff825668, 0x7fff6ab9, 0xff75c585, + 0x7fff4e59, 0xff6934a8, 0x7fff2f82, 0xff5ca3d0, + 0x7fff0e32, 0xff5012fe, 0x7ffeea6c, 0xff438234, + 0x7ffec42d, 0xff36f170, 0x7ffe9b77, 0xff2a60b4, + 0x7ffe704a, 0xff1dd001, 0x7ffe42a4, 0xff113f56, + 0x7ffe1288, 0xff04aeb5, 0x7ffddff3, 0xfef81e1d, + 0x7ffdaae7, 0xfeeb8d8f, 0x7ffd7364, 0xfedefd0c, + 0x7ffd3969, 0xfed26c94, 0x7ffcfcf6, 0xfec5dc28, + 0x7ffcbe0c, 0xfeb94bc8, 0x7ffc7caa, 0xfeacbb74, + 0x7ffc38d1, 0xfea02b2e, 0x7ffbf280, 0xfe939af5, + 0x7ffba9b8, 0xfe870aca, 0x7ffb5e78, 0xfe7a7aae, + 0x7ffb10c1, 0xfe6deaa1, 0x7ffac092, 0xfe615aa3, + 0x7ffa6dec, 0xfe54cab5, 0x7ffa18cf, 0xfe483ad8, + 0x7ff9c13a, 0xfe3bab0b, 0x7ff9672d, 0xfe2f1b50, + 0x7ff90aaa, 0xfe228ba7, 0x7ff8abae, 0xfe15fc11, + 0x7ff84a3c, 0xfe096c8d, 0x7ff7e652, 0xfdfcdd1d, + 0x7ff77ff1, 0xfdf04dc0, 0x7ff71718, 0xfde3be78, + 0x7ff6abc8, 0xfdd72f45, 0x7ff63e01, 0xfdcaa027, + 0x7ff5cdc3, 0xfdbe111e, 0x7ff55b0d, 0xfdb1822c, + 0x7ff4e5e0, 0xfda4f351, 0x7ff46e3c, 0xfd98648d, + 0x7ff3f420, 0xfd8bd5e1, 0x7ff3778e, 0xfd7f474d, + 0x7ff2f884, 0xfd72b8d2, 0x7ff27703, 0xfd662a70, + 0x7ff1f30b, 0xfd599c28, 0x7ff16c9c, 0xfd4d0df9, + 0x7ff0e3b6, 0xfd407fe6, 0x7ff05858, 0xfd33f1ed, + 0x7fefca84, 0xfd276410, 0x7fef3a39, 0xfd1ad650, + 0x7feea776, 0xfd0e48ab, 0x7fee123d, 0xfd01bb24, + 0x7fed7a8c, 0xfcf52dbb, 0x7fece065, 0xfce8a06f, + 0x7fec43c7, 0xfcdc1342, 0x7feba4b2, 0xfccf8634, + 0x7feb0326, 0xfcc2f945, 0x7fea5f23, 0xfcb66c77, + 0x7fe9b8a9, 0xfca9dfc8, 0x7fe90fb9, 0xfc9d533b, + 0x7fe86452, 0xfc90c6cf, 0x7fe7b674, 0xfc843a85, + 0x7fe7061f, 0xfc77ae5e, 0x7fe65354, 0xfc6b2259, + 0x7fe59e12, 0xfc5e9678, 0x7fe4e659, 0xfc520aba, + 0x7fe42c2a, 0xfc457f21, 0x7fe36f84, 0xfc38f3ac, + 0x7fe2b067, 0xfc2c685d, 0x7fe1eed5, 0xfc1fdd34, + 0x7fe12acb, 0xfc135231, 0x7fe0644b, 0xfc06c754, + 0x7fdf9b55, 0xfbfa3c9f, 0x7fdecfe8, 0xfbedb212, + 0x7fde0205, 0xfbe127ac, 0x7fdd31ac, 0xfbd49d70, + 0x7fdc5edc, 0xfbc8135c, 0x7fdb8996, 0xfbbb8973, + 0x7fdab1d9, 0xfbaeffb3, 0x7fd9d7a7, 0xfba2761e, + 0x7fd8fafe, 0xfb95ecb4, 0x7fd81bdf, 0xfb896375, + 0x7fd73a4a, 0xfb7cda63, 0x7fd6563f, 0xfb70517d, + 0x7fd56fbe, 0xfb63c8c4, 0x7fd486c7, 0xfb574039, + 0x7fd39b5a, 0xfb4ab7db, 0x7fd2ad77, 0xfb3e2fac, + 0x7fd1bd1e, 0xfb31a7ac, 0x7fd0ca4f, 0xfb251fdc, + 0x7fcfd50b, 0xfb18983b, 0x7fcedd50, 0xfb0c10cb, + 0x7fcde320, 0xfaff898c, 0x7fcce67a, 0xfaf3027e, + 0x7fcbe75e, 0xfae67ba2, 0x7fcae5cd, 0xfad9f4f8, + 0x7fc9e1c6, 0xfacd6e81, 0x7fc8db4a, 0xfac0e83d, + 0x7fc7d258, 0xfab4622d, 0x7fc6c6f0, 0xfaa7dc52, + 0x7fc5b913, 0xfa9b56ab, 0x7fc4a8c1, 0xfa8ed139, + 0x7fc395f9, 0xfa824bfd, 0x7fc280bc, 0xfa75c6f8, + 0x7fc1690a, 0xfa694229, 0x7fc04ee3, 0xfa5cbd91, + 0x7fbf3246, 0xfa503930, 0x7fbe1334, 0xfa43b508, + 0x7fbcf1ad, 0xfa373119, 0x7fbbcdb1, 0xfa2aad62, + 0x7fbaa740, 0xfa1e29e5, 0x7fb97e5a, 0xfa11a6a3, + 0x7fb852ff, 0xfa05239a, 0x7fb7252f, 0xf9f8a0cd, + 0x7fb5f4ea, 0xf9ec1e3b, 0x7fb4c231, 0xf9df9be6, + 0x7fb38d02, 0xf9d319cc, 0x7fb2555f, 0xf9c697f0, + 0x7fb11b48, 0xf9ba1651, 0x7fafdebb, 0xf9ad94f0, + 0x7fae9fbb, 0xf9a113cd, 0x7fad5e45, 0xf99492ea, + 0x7fac1a5b, 0xf9881245, 0x7faad3fd, 0xf97b91e1, + 0x7fa98b2a, 0xf96f11bc, 0x7fa83fe3, 0xf96291d9, + 0x7fa6f228, 0xf9561237, 0x7fa5a1f9, 0xf94992d7, + 0x7fa44f55, 0xf93d13b8, 0x7fa2fa3d, 0xf93094dd, + 0x7fa1a2b2, 0xf9241645, 0x7fa048b2, 0xf91797f0, + 0x7f9eec3e, 0xf90b19e0, 0x7f9d8d56, 0xf8fe9c15, + 0x7f9c2bfb, 0xf8f21e8e, 0x7f9ac82c, 0xf8e5a14d, + 0x7f9961e8, 0xf8d92452, 0x7f97f932, 0xf8cca79e, + 0x7f968e07, 0xf8c02b31, 0x7f952069, 0xf8b3af0c, + 0x7f93b058, 0xf8a7332e, 0x7f923dd2, 0xf89ab799, + 0x7f90c8da, 0xf88e3c4d, 0x7f8f516e, 0xf881c14b, + 0x7f8dd78f, 0xf8754692, 0x7f8c5b3d, 0xf868cc24, + 0x7f8adc77, 0xf85c5201, 0x7f895b3e, 0xf84fd829, + 0x7f87d792, 0xf8435e9d, 0x7f865174, 0xf836e55d, + 0x7f84c8e2, 0xf82a6c6a, 0x7f833ddd, 0xf81df3c5, + 0x7f81b065, 0xf8117b6d, 0x7f80207b, 0xf8050364, + 0x7f7e8e1e, 0xf7f88ba9, 0x7f7cf94e, 0xf7ec143e, + 0x7f7b620c, 0xf7df9d22, 0x7f79c857, 0xf7d32657, + 0x7f782c30, 0xf7c6afdc, 0x7f768d96, 0xf7ba39b3, + 0x7f74ec8a, 0xf7adc3db, 0x7f73490b, 0xf7a14e55, + 0x7f71a31b, 0xf794d922, 0x7f6ffab8, 0xf7886442, + 0x7f6e4fe3, 0xf77befb5, 0x7f6ca29c, 0xf76f7b7d, + 0x7f6af2e3, 0xf7630799, 0x7f6940b8, 0xf756940a, + 0x7f678c1c, 0xf74a20d0, 0x7f65d50d, 0xf73daded, + 0x7f641b8d, 0xf7313b60, 0x7f625f9b, 0xf724c92a, + 0x7f60a138, 0xf718574b, 0x7f5ee063, 0xf70be5c4, + 0x7f5d1d1d, 0xf6ff7496, 0x7f5b5765, 0xf6f303c0, + 0x7f598f3c, 0xf6e69344, 0x7f57c4a2, 0xf6da2321, + 0x7f55f796, 0xf6cdb359, 0x7f54281a, 0xf6c143ec, + 0x7f52562c, 0xf6b4d4d9, 0x7f5081cd, 0xf6a86623, + 0x7f4eaafe, 0xf69bf7c9, 0x7f4cd1be, 0xf68f89cb, + 0x7f4af60d, 0xf6831c2b, 0x7f4917eb, 0xf676aee8, + 0x7f473759, 0xf66a4203, 0x7f455456, 0xf65dd57d, + 0x7f436ee3, 0xf6516956, 0x7f4186ff, 0xf644fd8f, + 0x7f3f9cab, 0xf6389228, 0x7f3dafe7, 0xf62c2721, + 0x7f3bc0b3, 0xf61fbc7b, 0x7f39cf0e, 0xf6135237, + 0x7f37dafa, 0xf606e854, 0x7f35e476, 0xf5fa7ed4, + 0x7f33eb81, 0xf5ee15b7, 0x7f31f01d, 0xf5e1acfd, + 0x7f2ff24a, 0xf5d544a7, 0x7f2df206, 0xf5c8dcb6, + 0x7f2bef53, 0xf5bc7529, 0x7f29ea31, 0xf5b00e02, + 0x7f27e29f, 0xf5a3a740, 0x7f25d89e, 0xf59740e5, + 0x7f23cc2e, 0xf58adaf0, 0x7f21bd4e, 0xf57e7563, + 0x7f1fabff, 0xf572103d, 0x7f1d9842, 0xf565ab80, + 0x7f1b8215, 0xf559472b, 0x7f19697a, 0xf54ce33f, + 0x7f174e70, 0xf5407fbd, 0x7f1530f7, 0xf5341ca5, + 0x7f13110f, 0xf527b9f7, 0x7f10eeb9, 0xf51b57b5, + 0x7f0ec9f5, 0xf50ef5de, 0x7f0ca2c2, 0xf5029473, + 0x7f0a7921, 0xf4f63374, 0x7f084d12, 0xf4e9d2e3, + 0x7f061e95, 0xf4dd72be, 0x7f03eda9, 0xf4d11308, + 0x7f01ba50, 0xf4c4b3c0, 0x7eff8489, 0xf4b854e7, + 0x7efd4c54, 0xf4abf67e, 0x7efb11b1, 0xf49f9884, + 0x7ef8d4a1, 0xf4933afa, 0x7ef69523, 0xf486dde1, + 0x7ef45338, 0xf47a8139, 0x7ef20ee0, 0xf46e2504, + 0x7eefc81a, 0xf461c940, 0x7eed7ee7, 0xf4556def, + 0x7eeb3347, 0xf4491311, 0x7ee8e53a, 0xf43cb8a7, + 0x7ee694c1, 0xf4305eb0, 0x7ee441da, 0xf424052f, + 0x7ee1ec87, 0xf417ac22, 0x7edf94c7, 0xf40b538b, + 0x7edd3a9a, 0xf3fefb6a, 0x7edade01, 0xf3f2a3bf, + 0x7ed87efc, 0xf3e64c8c, 0x7ed61d8a, 0xf3d9f5cf, + 0x7ed3b9ad, 0xf3cd9f8b, 0x7ed15363, 0xf3c149bf, + 0x7eceeaad, 0xf3b4f46c, 0x7ecc7f8b, 0xf3a89f92, + 0x7eca11fe, 0xf39c4b32, 0x7ec7a205, 0xf38ff74d, + 0x7ec52fa0, 0xf383a3e2, 0x7ec2bad0, 0xf37750f2, + 0x7ec04394, 0xf36afe7e, 0x7ebdc9ed, 0xf35eac86, + 0x7ebb4ddb, 0xf3525b0b, 0x7eb8cf5d, 0xf3460a0d, + 0x7eb64e75, 0xf339b98d, 0x7eb3cb21, 0xf32d698a, + 0x7eb14563, 0xf3211a07, 0x7eaebd3a, 0xf314cb02, + 0x7eac32a6, 0xf3087c7d, 0x7ea9a5a8, 0xf2fc2e77, + 0x7ea7163f, 0xf2efe0f2, 0x7ea4846c, 0xf2e393ef, + 0x7ea1f02f, 0xf2d7476c, 0x7e9f5988, 0xf2cafb6b, + 0x7e9cc076, 0xf2beafed, 0x7e9a24fb, 0xf2b264f2, + 0x7e978715, 0xf2a61a7a, 0x7e94e6c6, 0xf299d085, + 0x7e92440d, 0xf28d8715, 0x7e8f9eeb, 0xf2813e2a, + 0x7e8cf75f, 0xf274f5c3, 0x7e8a4d6a, 0xf268ade3, + 0x7e87a10c, 0xf25c6688, 0x7e84f245, 0xf2501fb5, + 0x7e824114, 0xf243d968, 0x7e7f8d7b, 0xf23793a3, + 0x7e7cd778, 0xf22b4e66, 0x7e7a1f0d, 0xf21f09b1, + 0x7e77643a, 0xf212c585, 0x7e74a6fd, 0xf20681e3, + 0x7e71e759, 0xf1fa3ecb, 0x7e6f254c, 0xf1edfc3d, + 0x7e6c60d7, 0xf1e1ba3a, 0x7e6999fa, 0xf1d578c2, + 0x7e66d0b4, 0xf1c937d6, 0x7e640507, 0xf1bcf777, + 0x7e6136f3, 0xf1b0b7a4, 0x7e5e6676, 0xf1a4785e, + 0x7e5b9392, 0xf19839a6, 0x7e58be47, 0xf18bfb7d, + 0x7e55e694, 0xf17fbde2, 0x7e530c7a, 0xf17380d6, + 0x7e502ff9, 0xf1674459, 0x7e4d5110, 0xf15b086d, + 0x7e4a6fc1, 0xf14ecd11, 0x7e478c0b, 0xf1429247, + 0x7e44a5ef, 0xf136580d, 0x7e41bd6c, 0xf12a1e66, + 0x7e3ed282, 0xf11de551, 0x7e3be532, 0xf111accf, + 0x7e38f57c, 0xf10574e0, 0x7e360360, 0xf0f93d86, + 0x7e330ede, 0xf0ed06bf, 0x7e3017f6, 0xf0e0d08d, + 0x7e2d1ea8, 0xf0d49af1, 0x7e2a22f4, 0xf0c865ea, + 0x7e2724db, 0xf0bc317a, 0x7e24245d, 0xf0affda0, + 0x7e212179, 0xf0a3ca5d, 0x7e1e1c30, 0xf09797b2, + 0x7e1b1482, 0xf08b659f, 0x7e180a6f, 0xf07f3424, + 0x7e14fdf7, 0xf0730342, 0x7e11ef1b, 0xf066d2fa, + 0x7e0eddd9, 0xf05aa34c, 0x7e0bca34, 0xf04e7438, + 0x7e08b42a, 0xf04245c0, 0x7e059bbb, 0xf03617e2, + 0x7e0280e9, 0xf029eaa1, 0x7dff63b2, 0xf01dbdfb, + 0x7dfc4418, 0xf01191f3, 0x7df9221a, 0xf0056687, + 0x7df5fdb8, 0xeff93bba, 0x7df2d6f3, 0xefed118a, + 0x7defadca, 0xefe0e7f9, 0x7dec823e, 0xefd4bf08, + 0x7de9544f, 0xefc896b5, 0x7de623fd, 0xefbc6f03, + 0x7de2f148, 0xefb047f2, 0x7ddfbc30, 0xefa42181, + 0x7ddc84b5, 0xef97fbb2, 0x7dd94ad8, 0xef8bd685, + 0x7dd60e99, 0xef7fb1fa, 0x7dd2cff7, 0xef738e12, + 0x7dcf8ef3, 0xef676ace, 0x7dcc4b8d, 0xef5b482d, + 0x7dc905c5, 0xef4f2630, 0x7dc5bd9b, 0xef4304d8, + 0x7dc2730f, 0xef36e426, 0x7dbf2622, 0xef2ac419, + 0x7dbbd6d4, 0xef1ea4b2, 0x7db88524, 0xef1285f2, + 0x7db53113, 0xef0667d9, 0x7db1daa2, 0xeefa4a67, + 0x7dae81cf, 0xeeee2d9d, 0x7dab269b, 0xeee2117c, + 0x7da7c907, 0xeed5f604, 0x7da46912, 0xeec9db35, + 0x7da106bd, 0xeebdc110, 0x7d9da208, 0xeeb1a796, + 0x7d9a3af2, 0xeea58ec6, 0x7d96d17d, 0xee9976a1, + 0x7d9365a8, 0xee8d5f29, 0x7d8ff772, 0xee81485c, + 0x7d8c86de, 0xee75323c, 0x7d8913ea, 0xee691cc9, + 0x7d859e96, 0xee5d0804, 0x7d8226e4, 0xee50f3ed, + 0x7d7eacd2, 0xee44e084, 0x7d7b3061, 0xee38cdcb, + 0x7d77b192, 0xee2cbbc1, 0x7d743064, 0xee20aa67, + 0x7d70acd7, 0xee1499bd, 0x7d6d26ec, 0xee0889c4, + 0x7d699ea3, 0xedfc7a7c, 0x7d6613fb, 0xedf06be6, + 0x7d6286f6, 0xede45e03, 0x7d5ef793, 0xedd850d2, + 0x7d5b65d2, 0xedcc4454, 0x7d57d1b3, 0xedc0388a, + 0x7d543b37, 0xedb42d74, 0x7d50a25e, 0xeda82313, + 0x7d4d0728, 0xed9c1967, 0x7d496994, 0xed901070, + 0x7d45c9a4, 0xed84082f, 0x7d422757, 0xed7800a5, + 0x7d3e82ae, 0xed6bf9d1, 0x7d3adba7, 0xed5ff3b5, + 0x7d373245, 0xed53ee51, 0x7d338687, 0xed47e9a5, + 0x7d2fd86c, 0xed3be5b1, 0x7d2c27f6, 0xed2fe277, + 0x7d287523, 0xed23dff7, 0x7d24bff6, 0xed17de31, + 0x7d21086c, 0xed0bdd25, 0x7d1d4e88, 0xecffdcd4, + 0x7d199248, 0xecf3dd3f, 0x7d15d3ad, 0xece7de66, + 0x7d1212b7, 0xecdbe04a, 0x7d0e4f67, 0xeccfe2ea, + 0x7d0a89bc, 0xecc3e648, 0x7d06c1b6, 0xecb7ea63, + 0x7d02f757, 0xecabef3d, 0x7cff2a9d, 0xec9ff4d6, + 0x7cfb5b89, 0xec93fb2e, 0x7cf78a1b, 0xec880245, + 0x7cf3b653, 0xec7c0a1d, 0x7cefe032, 0xec7012b5, + 0x7cec07b8, 0xec641c0e, 0x7ce82ce4, 0xec582629, + 0x7ce44fb7, 0xec4c3106, 0x7ce07031, 0xec403ca5, + 0x7cdc8e52, 0xec344908, 0x7cd8aa1b, 0xec28562d, + 0x7cd4c38b, 0xec1c6417, 0x7cd0daa2, 0xec1072c4, + 0x7cccef62, 0xec048237, 0x7cc901c9, 0xebf8926f, + 0x7cc511d9, 0xebeca36c, 0x7cc11f90, 0xebe0b52f, + 0x7cbd2af0, 0xebd4c7ba, 0x7cb933f9, 0xebc8db0b, + 0x7cb53aaa, 0xebbcef23, 0x7cb13f04, 0xebb10404, + 0x7cad4107, 0xeba519ad, 0x7ca940b3, 0xeb99301f, + 0x7ca53e09, 0xeb8d475b, 0x7ca13908, 0xeb815f60, + 0x7c9d31b0, 0xeb75782f, 0x7c992803, 0xeb6991ca, + 0x7c951bff, 0xeb5dac2f, 0x7c910da5, 0xeb51c760, + 0x7c8cfcf6, 0xeb45e35d, 0x7c88e9f1, 0xeb3a0027, + 0x7c84d496, 0xeb2e1dbe, 0x7c80bce7, 0xeb223c22, + 0x7c7ca2e2, 0xeb165b54, 0x7c788688, 0xeb0a7b54, + 0x7c7467d9, 0xeafe9c24, 0x7c7046d6, 0xeaf2bdc3, + 0x7c6c237e, 0xeae6e031, 0x7c67fdd1, 0xeadb0370, + 0x7c63d5d1, 0xeacf277f, 0x7c5fab7c, 0xeac34c60, + 0x7c5b7ed4, 0xeab77212, 0x7c574fd8, 0xeaab9896, + 0x7c531e88, 0xea9fbfed, 0x7c4eeae5, 0xea93e817, + 0x7c4ab4ef, 0xea881114, 0x7c467ca6, 0xea7c3ae5, + 0x7c42420a, 0xea70658a, 0x7c3e051b, 0xea649105, + 0x7c39c5da, 0xea58bd54, 0x7c358446, 0xea4cea79, + 0x7c314060, 0xea411874, 0x7c2cfa28, 0xea354746, + 0x7c28b19e, 0xea2976ef, 0x7c2466c2, 0xea1da770, + 0x7c201994, 0xea11d8c8, 0x7c1bca16, 0xea060af9, + 0x7c177845, 0xe9fa3e03, 0x7c132424, 0xe9ee71e6, + 0x7c0ecdb2, 0xe9e2a6a3, 0x7c0a74f0, 0xe9d6dc3b, + 0x7c0619dc, 0xe9cb12ad, 0x7c01bc78, 0xe9bf49fa, + 0x7bfd5cc4, 0xe9b38223, 0x7bf8fac0, 0xe9a7bb28, + 0x7bf4966c, 0xe99bf509, 0x7bf02fc9, 0xe9902fc7, + 0x7bebc6d5, 0xe9846b63, 0x7be75b93, 0xe978a7dd, + 0x7be2ee01, 0xe96ce535, 0x7bde7e20, 0xe961236c, + 0x7bda0bf0, 0xe9556282, 0x7bd59771, 0xe949a278, + 0x7bd120a4, 0xe93de34e, 0x7bcca789, 0xe9322505, + 0x7bc82c1f, 0xe926679c, 0x7bc3ae67, 0xe91aab16, + 0x7bbf2e62, 0xe90eef71, 0x7bbaac0e, 0xe90334af, + 0x7bb6276e, 0xe8f77acf, 0x7bb1a080, 0xe8ebc1d3, + 0x7bad1744, 0xe8e009ba, 0x7ba88bbc, 0xe8d45286, + 0x7ba3fde7, 0xe8c89c37, 0x7b9f6dc5, 0xe8bce6cd, + 0x7b9adb57, 0xe8b13248, 0x7b96469d, 0xe8a57ea9, + 0x7b91af97, 0xe899cbf1, 0x7b8d1644, 0xe88e1a20, + 0x7b887aa6, 0xe8826936, 0x7b83dcbc, 0xe876b934, + 0x7b7f3c87, 0xe86b0a1a, 0x7b7a9a07, 0xe85f5be9, + 0x7b75f53c, 0xe853aea1, 0x7b714e25, 0xe8480243, + 0x7b6ca4c4, 0xe83c56cf, 0x7b67f919, 0xe830ac45, + 0x7b634b23, 0xe82502a7, 0x7b5e9ae4, 0xe81959f4, + 0x7b59e85a, 0xe80db22d, 0x7b553386, 0xe8020b52, + 0x7b507c69, 0xe7f66564, 0x7b4bc303, 0xe7eac063, + 0x7b470753, 0xe7df1c50, 0x7b42495a, 0xe7d3792b, + 0x7b3d8918, 0xe7c7d6f4, 0x7b38c68e, 0xe7bc35ad, + 0x7b3401bb, 0xe7b09555, 0x7b2f3aa0, 0xe7a4f5ed, + 0x7b2a713d, 0xe7995776, 0x7b25a591, 0xe78db9ef, + 0x7b20d79e, 0xe7821d59, 0x7b1c0764, 0xe77681b6, + 0x7b1734e2, 0xe76ae704, 0x7b126019, 0xe75f4d45, + 0x7b0d8909, 0xe753b479, 0x7b08afb2, 0xe7481ca1, + 0x7b03d414, 0xe73c85bc, 0x7afef630, 0xe730efcc, + 0x7afa1605, 0xe7255ad1, 0x7af53395, 0xe719c6cb, + 0x7af04edf, 0xe70e33bb, 0x7aeb67e3, 0xe702a1a1, + 0x7ae67ea1, 0xe6f7107e, 0x7ae1931a, 0xe6eb8052, + 0x7adca54e, 0xe6dff11d, 0x7ad7b53d, 0xe6d462e1, + 0x7ad2c2e8, 0xe6c8d59c, 0x7acdce4d, 0xe6bd4951, + 0x7ac8d76f, 0xe6b1bdff, 0x7ac3de4c, 0xe6a633a6, + 0x7abee2e5, 0xe69aaa48, 0x7ab9e53a, 0xe68f21e5, + 0x7ab4e54c, 0xe6839a7c, 0x7aafe31b, 0xe6781410, + 0x7aaadea6, 0xe66c8e9f, 0x7aa5d7ee, 0xe6610a2a, + 0x7aa0cef3, 0xe65586b3, 0x7a9bc3b6, 0xe64a0438, + 0x7a96b636, 0xe63e82bc, 0x7a91a674, 0xe633023e, + 0x7a8c9470, 0xe62782be, 0x7a87802a, 0xe61c043d, + 0x7a8269a3, 0xe61086bc, 0x7a7d50da, 0xe6050a3b, + 0x7a7835cf, 0xe5f98ebb, 0x7a731884, 0xe5ee143b, + 0x7a6df8f8, 0xe5e29abc, 0x7a68d72b, 0xe5d72240, + 0x7a63b31d, 0xe5cbaac5, 0x7a5e8cd0, 0xe5c0344d, + 0x7a596442, 0xe5b4bed8, 0x7a543974, 0xe5a94a67, + 0x7a4f0c67, 0xe59dd6f9, 0x7a49dd1a, 0xe5926490, + 0x7a44ab8e, 0xe586f32c, 0x7a3f77c3, 0xe57b82cd, + 0x7a3a41b9, 0xe5701374, 0x7a350970, 0xe564a521, + 0x7a2fcee8, 0xe55937d5, 0x7a2a9223, 0xe54dcb8f, + 0x7a25531f, 0xe5426051, 0x7a2011de, 0xe536f61b, + 0x7a1ace5f, 0xe52b8cee, 0x7a1588a2, 0xe52024c9, + 0x7a1040a8, 0xe514bdad, 0x7a0af671, 0xe509579b, + 0x7a05a9fd, 0xe4fdf294, 0x7a005b4d, 0xe4f28e96, + 0x79fb0a60, 0xe4e72ba4, 0x79f5b737, 0xe4dbc9bd, + 0x79f061d2, 0xe4d068e2, 0x79eb0a31, 0xe4c50914, + 0x79e5b054, 0xe4b9aa52, 0x79e0543c, 0xe4ae4c9d, + 0x79daf5e8, 0xe4a2eff6, 0x79d5955a, 0xe497945d, + 0x79d03291, 0xe48c39d3, 0x79cacd8d, 0xe480e057, + 0x79c5664f, 0xe47587eb, 0x79bffcd7, 0xe46a308f, + 0x79ba9125, 0xe45eda43, 0x79b52339, 0xe4538507, + 0x79afb313, 0xe44830dd, 0x79aa40b4, 0xe43cddc4, + 0x79a4cc1c, 0xe4318bbe, 0x799f554b, 0xe4263ac9, + 0x7999dc42, 0xe41aeae8, 0x799460ff, 0xe40f9c1a, + 0x798ee385, 0xe4044e60, 0x798963d2, 0xe3f901ba, + 0x7983e1e8, 0xe3edb628, 0x797e5dc6, 0xe3e26bac, + 0x7978d76c, 0xe3d72245, 0x79734edc, 0xe3cbd9f4, + 0x796dc414, 0xe3c092b9, 0x79683715, 0xe3b54c95, + 0x7962a7e0, 0xe3aa0788, 0x795d1675, 0xe39ec393, + 0x795782d3, 0xe39380b6, 0x7951ecfc, 0xe3883ef2, + 0x794c54ee, 0xe37cfe47, 0x7946baac, 0xe371beb5, + 0x79411e33, 0xe366803c, 0x793b7f86, 0xe35b42df, + 0x7935dea4, 0xe350069b, 0x79303b8e, 0xe344cb73, + 0x792a9642, 0xe3399167, 0x7924eec3, 0xe32e5876, + 0x791f4510, 0xe32320a2, 0x79199929, 0xe317e9eb, + 0x7913eb0e, 0xe30cb451, 0x790e3ac0, 0xe3017fd5, + 0x7908883f, 0xe2f64c77, 0x7902d38b, 0xe2eb1a37, + 0x78fd1ca4, 0xe2dfe917, 0x78f7638b, 0xe2d4b916, + 0x78f1a840, 0xe2c98a35, 0x78ebeac2, 0xe2be5c74, + 0x78e62b13, 0xe2b32fd4, 0x78e06932, 0xe2a80456, + 0x78daa520, 0xe29cd9f8, 0x78d4dedd, 0xe291b0bd, + 0x78cf1669, 0xe28688a4, 0x78c94bc4, 0xe27b61af, + 0x78c37eef, 0xe2703bdc, 0x78bdafea, 0xe265172e, + 0x78b7deb4, 0xe259f3a3, 0x78b20b4f, 0xe24ed13d, + 0x78ac35ba, 0xe243affc, 0x78a65df6, 0xe2388fe1, + 0x78a08402, 0xe22d70eb, 0x789aa7e0, 0xe222531c, + 0x7894c98f, 0xe2173674, 0x788ee910, 0xe20c1af3, + 0x78890663, 0xe2010099, 0x78832187, 0xe1f5e768, + 0x787d3a7e, 0xe1eacf5f, 0x78775147, 0xe1dfb87f, + 0x787165e3, 0xe1d4a2c8, 0x786b7852, 0xe1c98e3b, + 0x78658894, 0xe1be7ad8, 0x785f96a9, 0xe1b368a0, + 0x7859a292, 0xe1a85793, 0x7853ac4f, 0xe19d47b1, + 0x784db3e0, 0xe19238fb, 0x7847b946, 0xe1872b72, + 0x7841bc7f, 0xe17c1f15, 0x783bbd8e, 0xe17113e5, + 0x7835bc71, 0xe16609e3, 0x782fb92a, 0xe15b0110, + 0x7829b3b9, 0xe14ff96a, 0x7823ac1d, 0xe144f2f3, + 0x781da256, 0xe139edac, 0x78179666, 0xe12ee995, + 0x7811884d, 0xe123e6ad, 0x780b780a, 0xe118e4f6, + 0x7805659e, 0xe10de470, 0x77ff5109, 0xe102e51c, + 0x77f93a4b, 0xe0f7e6f9, 0x77f32165, 0xe0ecea09, + 0x77ed0657, 0xe0e1ee4b, 0x77e6e921, 0xe0d6f3c1, + 0x77e0c9c3, 0xe0cbfa6a, 0x77daa83d, 0xe0c10247, + 0x77d48490, 0xe0b60b58, 0x77ce5ebd, 0xe0ab159e, + 0x77c836c2, 0xe0a0211a, 0x77c20ca1, 0xe0952dcb, + 0x77bbe05a, 0xe08a3bb2, 0x77b5b1ec, 0xe07f4acf, + 0x77af8159, 0xe0745b24, 0x77a94ea0, 0xe0696cb0, + 0x77a319c2, 0xe05e7f74, 0x779ce2be, 0xe053936f, + 0x7796a996, 0xe048a8a4, 0x77906e49, 0xe03dbf11, + 0x778a30d8, 0xe032d6b8, 0x7783f143, 0xe027ef99, + 0x777daf89, 0xe01d09b4, 0x77776bac, 0xe012250a, + 0x777125ac, 0xe007419b, 0x776add88, 0xdffc5f67, + 0x77649341, 0xdff17e70, 0x775e46d8, 0xdfe69eb4, + 0x7757f84c, 0xdfdbc036, 0x7751a79e, 0xdfd0e2f5, + 0x774b54ce, 0xdfc606f1, 0x7744ffdd, 0xdfbb2c2c, + 0x773ea8ca, 0xdfb052a5, 0x77384f95, 0xdfa57a5d, + 0x7731f440, 0xdf9aa354, 0x772b96ca, 0xdf8fcd8b, + 0x77253733, 0xdf84f902, 0x771ed57c, 0xdf7a25ba, + 0x771871a5, 0xdf6f53b3, 0x77120bae, 0xdf6482ed, + 0x770ba398, 0xdf59b369, 0x77053962, 0xdf4ee527, + 0x76fecd0e, 0xdf441828, 0x76f85e9a, 0xdf394c6b, + 0x76f1ee09, 0xdf2e81f3, 0x76eb7b58, 0xdf23b8be, + 0x76e5068a, 0xdf18f0ce, 0x76de8f9e, 0xdf0e2a22, + 0x76d81695, 0xdf0364bc, 0x76d19b6e, 0xdef8a09b, + 0x76cb1e2a, 0xdeedddc0, 0x76c49ec9, 0xdee31c2b, + 0x76be1d4c, 0xded85bdd, 0x76b799b3, 0xdecd9cd7, + 0x76b113fd, 0xdec2df18, 0x76aa8c2c, 0xdeb822a1, + 0x76a4023f, 0xdead6773, 0x769d7637, 0xdea2ad8d, + 0x7696e814, 0xde97f4f1, 0x769057d6, 0xde8d3d9e, + 0x7689c57d, 0xde828796, 0x7683310b, 0xde77d2d8, + 0x767c9a7e, 0xde6d1f65, 0x767601d7, 0xde626d3e, + 0x766f6717, 0xde57bc62, 0x7668ca3e, 0xde4d0cd2, + 0x76622b4c, 0xde425e8f, 0x765b8a41, 0xde37b199, + 0x7654e71d, 0xde2d05f1, 0x764e41e2, 0xde225b96, + 0x76479a8e, 0xde17b28a, 0x7640f123, 0xde0d0acc, + 0x763a45a0, 0xde02645d, 0x76339806, 0xddf7bf3e, + 0x762ce855, 0xdded1b6e, 0x7626368d, 0xdde278ef, + 0x761f82af, 0xddd7d7c1, 0x7618ccba, 0xddcd37e4, + 0x761214b0, 0xddc29958, 0x760b5a90, 0xddb7fc1e, + 0x76049e5b, 0xddad6036, 0x75fde011, 0xdda2c5a2, + 0x75f71fb1, 0xdd982c60, 0x75f05d3d, 0xdd8d9472, + 0x75e998b5, 0xdd82fdd8, 0x75e2d219, 0xdd786892, + 0x75dc0968, 0xdd6dd4a2, 0x75d53ea5, 0xdd634206, + 0x75ce71ce, 0xdd58b0c0, 0x75c7a2e3, 0xdd4e20d0, + 0x75c0d1e7, 0xdd439236, 0x75b9fed7, 0xdd3904f4, + 0x75b329b5, 0xdd2e7908, 0x75ac5282, 0xdd23ee74, + 0x75a5793c, 0xdd196538, 0x759e9de5, 0xdd0edd55, + 0x7597c07d, 0xdd0456ca, 0x7590e104, 0xdcf9d199, + 0x7589ff7a, 0xdcef4dc2, 0x75831be0, 0xdce4cb44, + 0x757c3636, 0xdcda4a21, 0x75754e7c, 0xdccfca59, + 0x756e64b2, 0xdcc54bec, 0x756778d9, 0xdcbacedb, + 0x75608af1, 0xdcb05326, 0x75599afa, 0xdca5d8cd, + 0x7552a8f4, 0xdc9b5fd2, 0x754bb4e1, 0xdc90e834, + 0x7544bebf, 0xdc8671f3, 0x753dc68f, 0xdc7bfd11, + 0x7536cc52, 0xdc71898d, 0x752fd008, 0xdc671768, + 0x7528d1b1, 0xdc5ca6a2, 0x7521d14d, 0xdc52373c, + 0x751acedd, 0xdc47c936, 0x7513ca60, 0xdc3d5c91, + 0x750cc3d8, 0xdc32f14d, 0x7505bb44, 0xdc28876a, + 0x74feb0a5, 0xdc1e1ee9, 0x74f7a3fb, 0xdc13b7c9, + 0x74f09546, 0xdc09520d, 0x74e98487, 0xdbfeedb3, + 0x74e271bd, 0xdbf48abd, 0x74db5cea, 0xdbea292b, + 0x74d4460c, 0xdbdfc8fc, 0x74cd2d26, 0xdbd56a32, + 0x74c61236, 0xdbcb0cce, 0x74bef53d, 0xdbc0b0ce, + 0x74b7d63c, 0xdbb65634, 0x74b0b533, 0xdbabfd01, + 0x74a99221, 0xdba1a534, 0x74a26d08, 0xdb974ece, + 0x749b45e7, 0xdb8cf9cf, 0x74941cbf, 0xdb82a638, + 0x748cf190, 0xdb785409, 0x7485c45b, 0xdb6e0342, + 0x747e951f, 0xdb63b3e5, 0x747763dd, 0xdb5965f1, + 0x74703095, 0xdb4f1967, 0x7468fb47, 0xdb44ce46, + 0x7461c3f5, 0xdb3a8491, 0x745a8a9d, 0xdb303c46, + 0x74534f41, 0xdb25f566, 0x744c11e0, 0xdb1baff2, + 0x7444d27b, 0xdb116beb, 0x743d9112, 0xdb072950, + 0x74364da6, 0xdafce821, 0x742f0836, 0xdaf2a860, + 0x7427c0c3, 0xdae86a0d, 0x7420774d, 0xdade2d28, + 0x74192bd5, 0xdad3f1b1, 0x7411de5b, 0xdac9b7a9, + 0x740a8edf, 0xdabf7f11, 0x74033d61, 0xdab547e8, + 0x73fbe9e2, 0xdaab122f, 0x73f49462, 0xdaa0dde7, + 0x73ed3ce1, 0xda96ab0f, 0x73e5e360, 0xda8c79a9, + 0x73de87de, 0xda8249b4, 0x73d72a5d, 0xda781b31, + 0x73cfcadc, 0xda6dee21, 0x73c8695b, 0xda63c284, + 0x73c105db, 0xda599859, 0x73b9a05d, 0xda4f6fa3, + 0x73b238e0, 0xda454860, 0x73aacf65, 0xda3b2292, + 0x73a363ec, 0xda30fe38, 0x739bf675, 0xda26db54, + 0x73948701, 0xda1cb9e5, 0x738d1590, 0xda1299ec, + 0x7385a222, 0xda087b69, 0x737e2cb7, 0xd9fe5e5e, + 0x7376b551, 0xd9f442c9, 0x736f3bee, 0xd9ea28ac, + 0x7367c090, 0xd9e01006, 0x73604336, 0xd9d5f8d9, + 0x7358c3e2, 0xd9cbe325, 0x73514292, 0xd9c1cee9, + 0x7349bf48, 0xd9b7bc27, 0x73423a04, 0xd9adaadf, + 0x733ab2c6, 0xd9a39b11, 0x7333298f, 0xd9998cbe, + 0x732b9e5e, 0xd98f7fe6, 0x73241134, 0xd9857489, + 0x731c8211, 0xd97b6aa8, 0x7314f0f6, 0xd9716243, + 0x730d5de3, 0xd9675b5a, 0x7305c8d7, 0xd95d55ef, + 0x72fe31d5, 0xd9535201, 0x72f698db, 0xd9494f90, + 0x72eefdea, 0xd93f4e9e, 0x72e76102, 0xd9354f2a, + 0x72dfc224, 0xd92b5135, 0x72d82150, 0xd92154bf, + 0x72d07e85, 0xd91759c9, 0x72c8d9c6, 0xd90d6053, + 0x72c13311, 0xd903685d, 0x72b98a67, 0xd8f971e8, + 0x72b1dfc9, 0xd8ef7cf4, 0x72aa3336, 0xd8e58982, + 0x72a284b0, 0xd8db9792, 0x729ad435, 0xd8d1a724, + 0x729321c7, 0xd8c7b838, 0x728b6d66, 0xd8bdcad0, + 0x7283b712, 0xd8b3deeb, 0x727bfecc, 0xd8a9f48a, + 0x72744493, 0xd8a00bae, 0x726c8868, 0xd8962456, + 0x7264ca4c, 0xd88c3e83, 0x725d0a3e, 0xd8825a35, + 0x72554840, 0xd878776d, 0x724d8450, 0xd86e962b, + 0x7245be70, 0xd864b670, 0x723df6a0, 0xd85ad83c, + 0x72362ce0, 0xd850fb8e, 0x722e6130, 0xd8472069, + 0x72269391, 0xd83d46cc, 0x721ec403, 0xd8336eb7, + 0x7216f287, 0xd829982b, 0x720f1f1c, 0xd81fc328, + 0x720749c3, 0xd815efae, 0x71ff727c, 0xd80c1dbf, + 0x71f79948, 0xd8024d59, 0x71efbe27, 0xd7f87e7f, + 0x71e7e118, 0xd7eeb130, 0x71e0021e, 0xd7e4e56c, + 0x71d82137, 0xd7db1b34, 0x71d03e64, 0xd7d15288, + 0x71c859a5, 0xd7c78b68, 0x71c072fb, 0xd7bdc5d6, + 0x71b88a66, 0xd7b401d1, 0x71b09fe7, 0xd7aa3f5a, + 0x71a8b37c, 0xd7a07e70, 0x71a0c528, 0xd796bf16, + 0x7198d4ea, 0xd78d014a, 0x7190e2c3, 0xd783450d, + 0x7188eeb2, 0xd7798a60, 0x7180f8b8, 0xd76fd143, + 0x717900d6, 0xd76619b6, 0x7171070c, 0xd75c63ba, + 0x71690b59, 0xd752af4f, 0x71610dbf, 0xd748fc75, + 0x71590e3e, 0xd73f4b2e, 0x71510cd5, 0xd7359b78, + 0x71490986, 0xd72bed55, 0x71410450, 0xd72240c5, + 0x7138fd35, 0xd71895c9, 0x7130f433, 0xd70eec60, + 0x7128e94c, 0xd705448b, 0x7120dc80, 0xd6fb9e4b, + 0x7118cdcf, 0xd6f1f99f, 0x7110bd39, 0xd6e85689, + 0x7108aabf, 0xd6deb508, 0x71009661, 0xd6d5151d, + 0x70f8801f, 0xd6cb76c9, 0x70f067fb, 0xd6c1da0b, + 0x70e84df3, 0xd6b83ee4, 0x70e03208, 0xd6aea555, + 0x70d8143b, 0xd6a50d5d, 0x70cff48c, 0xd69b76fe, + 0x70c7d2fb, 0xd691e237, 0x70bfaf89, 0xd6884f09, + 0x70b78a36, 0xd67ebd74, 0x70af6302, 0xd6752d79, + 0x70a739ed, 0xd66b9f18, 0x709f0ef8, 0xd6621251, + 0x7096e223, 0xd6588725, 0x708eb36f, 0xd64efd94, + 0x708682dc, 0xd645759f, 0x707e5069, 0xd63bef46, + 0x70761c18, 0xd6326a88, 0x706de5e9, 0xd628e767, + 0x7065addb, 0xd61f65e4, 0x705d73f0, 0xd615e5fd, + 0x70553828, 0xd60c67b4, 0x704cfa83, 0xd602eb0a, + 0x7044bb00, 0xd5f96ffd, 0x703c79a2, 0xd5eff690, + 0x70343667, 0xd5e67ec1, 0x702bf151, 0xd5dd0892, + 0x7023aa5f, 0xd5d39403, 0x701b6193, 0xd5ca2115, + 0x701316eb, 0xd5c0afc6, 0x700aca69, 0xd5b74019, + 0x70027c0c, 0xd5add20d, 0x6ffa2bd6, 0xd5a465a3, + 0x6ff1d9c7, 0xd59afadb, 0x6fe985de, 0xd59191b5, + 0x6fe1301c, 0xd5882a32, 0x6fd8d882, 0xd57ec452, + 0x6fd07f0f, 0xd5756016, 0x6fc823c5, 0xd56bfd7d, + 0x6fbfc6a3, 0xd5629c89, 0x6fb767aa, 0xd5593d3a, + 0x6faf06da, 0xd54fdf8f, 0x6fa6a433, 0xd5468389, + 0x6f9e3fb6, 0xd53d292a, 0x6f95d963, 0xd533d070, + 0x6f8d713a, 0xd52a795d, 0x6f85073c, 0xd52123f0, + 0x6f7c9b69, 0xd517d02b, 0x6f742dc1, 0xd50e7e0d, + 0x6f6bbe45, 0xd5052d97, 0x6f634cf5, 0xd4fbdec9, + 0x6f5ad9d1, 0xd4f291a4, 0x6f5264da, 0xd4e94627, + 0x6f49ee0f, 0xd4dffc54, 0x6f417573, 0xd4d6b42b, + 0x6f38fb03, 0xd4cd6dab, 0x6f307ec2, 0xd4c428d6, + 0x6f2800af, 0xd4bae5ab, 0x6f1f80ca, 0xd4b1a42c, + 0x6f16ff14, 0xd4a86458, 0x6f0e7b8e, 0xd49f2630, + 0x6f05f637, 0xd495e9b3, 0x6efd6f10, 0xd48caee4, + 0x6ef4e619, 0xd48375c1, 0x6eec5b53, 0xd47a3e4b, + 0x6ee3cebe, 0xd4710883, 0x6edb405a, 0xd467d469, + 0x6ed2b027, 0xd45ea1fd, 0x6eca1e27, 0xd4557140, + 0x6ec18a58, 0xd44c4232, 0x6eb8f4bc, 0xd44314d3, + 0x6eb05d53, 0xd439e923, 0x6ea7c41e, 0xd430bf24, + 0x6e9f291b, 0xd42796d5, 0x6e968c4d, 0xd41e7037, + 0x6e8dedb3, 0xd4154b4a, 0x6e854d4d, 0xd40c280e, + 0x6e7cab1c, 0xd4030684, 0x6e740720, 0xd3f9e6ad, + 0x6e6b615a, 0xd3f0c887, 0x6e62b9ca, 0xd3e7ac15, + 0x6e5a1070, 0xd3de9156, 0x6e51654c, 0xd3d5784a, + 0x6e48b860, 0xd3cc60f2, 0x6e4009aa, 0xd3c34b4f, + 0x6e37592c, 0xd3ba3760, 0x6e2ea6e6, 0xd3b12526, + 0x6e25f2d8, 0xd3a814a2, 0x6e1d3d03, 0xd39f05d3, + 0x6e148566, 0xd395f8ba, 0x6e0bcc03, 0xd38ced57, + 0x6e0310d9, 0xd383e3ab, 0x6dfa53e9, 0xd37adbb6, + 0x6df19534, 0xd371d579, 0x6de8d4b8, 0xd368d0f3, + 0x6de01278, 0xd35fce26, 0x6dd74e73, 0xd356cd11, + 0x6dce88aa, 0xd34dcdb4, 0x6dc5c11c, 0xd344d011, + 0x6dbcf7cb, 0xd33bd427, 0x6db42cb6, 0xd332d9f7, + 0x6dab5fdf, 0xd329e181, 0x6da29144, 0xd320eac6, + 0x6d99c0e7, 0xd317f5c6, 0x6d90eec8, 0xd30f0280, + 0x6d881ae8, 0xd30610f7, 0x6d7f4545, 0xd2fd2129, + 0x6d766de2, 0xd2f43318, 0x6d6d94bf, 0xd2eb46c3, + 0x6d64b9da, 0xd2e25c2b, 0x6d5bdd36, 0xd2d97350, + 0x6d52fed2, 0xd2d08c33, 0x6d4a1eaf, 0xd2c7a6d4, + 0x6d413ccd, 0xd2bec333, 0x6d38592c, 0xd2b5e151, + 0x6d2f73cd, 0xd2ad012e, 0x6d268cb0, 0xd2a422ca, + 0x6d1da3d5, 0xd29b4626, 0x6d14b93d, 0xd2926b41, + 0x6d0bcce8, 0xd289921e, 0x6d02ded7, 0xd280babb, + 0x6cf9ef09, 0xd277e518, 0x6cf0fd80, 0xd26f1138, + 0x6ce80a3a, 0xd2663f19, 0x6cdf153a, 0xd25d6ebc, + 0x6cd61e7f, 0xd254a021, 0x6ccd2609, 0xd24bd34a, + 0x6cc42bd9, 0xd2430835, 0x6cbb2fef, 0xd23a3ee4, + 0x6cb2324c, 0xd2317756, 0x6ca932ef, 0xd228b18d, + 0x6ca031da, 0xd21fed88, 0x6c972f0d, 0xd2172b48, + 0x6c8e2a87, 0xd20e6acc, 0x6c85244a, 0xd205ac17, + 0x6c7c1c55, 0xd1fcef27, 0x6c7312a9, 0xd1f433fd, + 0x6c6a0746, 0xd1eb7a9a, 0x6c60fa2d, 0xd1e2c2fd, + 0x6c57eb5e, 0xd1da0d28, 0x6c4edada, 0xd1d1591a, + 0x6c45c8a0, 0xd1c8a6d4, 0x6c3cb4b1, 0xd1bff656, + 0x6c339f0e, 0xd1b747a0, 0x6c2a87b6, 0xd1ae9ab4, + 0x6c216eaa, 0xd1a5ef90, 0x6c1853eb, 0xd19d4636, + 0x6c0f3779, 0xd1949ea6, 0x6c061953, 0xd18bf8e0, + 0x6bfcf97c, 0xd18354e4, 0x6bf3d7f2, 0xd17ab2b3, + 0x6beab4b6, 0xd172124d, 0x6be18fc9, 0xd16973b3, + 0x6bd8692b, 0xd160d6e5, 0x6bcf40dc, 0xd1583be2, + 0x6bc616dd, 0xd14fa2ad, 0x6bbceb2d, 0xd1470b44, + 0x6bb3bdce, 0xd13e75a8, 0x6baa8ec0, 0xd135e1d9, + 0x6ba15e03, 0xd12d4fd9, 0x6b982b97, 0xd124bfa6, + 0x6b8ef77d, 0xd11c3142, 0x6b85c1b5, 0xd113a4ad, + 0x6b7c8a3f, 0xd10b19e7, 0x6b73511c, 0xd10290f0, + 0x6b6a164d, 0xd0fa09c9, 0x6b60d9d0, 0xd0f18472, + 0x6b579ba8, 0xd0e900ec, 0x6b4e5bd4, 0xd0e07f36, + 0x6b451a55, 0xd0d7ff51, 0x6b3bd72a, 0xd0cf813e, + 0x6b329255, 0xd0c704fd, 0x6b294bd5, 0xd0be8a8d, + 0x6b2003ac, 0xd0b611f1, 0x6b16b9d9, 0xd0ad9b26, + 0x6b0d6e5c, 0xd0a5262f, 0x6b042137, 0xd09cb30b, + 0x6afad269, 0xd09441bb, 0x6af181f3, 0xd08bd23f, + 0x6ae82fd5, 0xd0836497, 0x6adedc10, 0xd07af8c4, + 0x6ad586a3, 0xd0728ec6, 0x6acc2f90, 0xd06a269d, + 0x6ac2d6d6, 0xd061c04a, 0x6ab97c77, 0xd0595bcd, + 0x6ab02071, 0xd050f926, 0x6aa6c2c6, 0xd0489856, + 0x6a9d6377, 0xd040395d, 0x6a940283, 0xd037dc3b, + 0x6a8a9fea, 0xd02f80f1, 0x6a813bae, 0xd027277e, + 0x6a77d5ce, 0xd01ecfe4, 0x6a6e6e4b, 0xd0167a22, + 0x6a650525, 0xd00e2639, 0x6a5b9a5d, 0xd005d42a, + 0x6a522df3, 0xcffd83f4, 0x6a48bfe7, 0xcff53597, + 0x6a3f503a, 0xcfece915, 0x6a35deeb, 0xcfe49e6d, + 0x6a2c6bfd, 0xcfdc55a1, 0x6a22f76e, 0xcfd40eaf, + 0x6a19813f, 0xcfcbc999, 0x6a100970, 0xcfc3865e, + 0x6a069003, 0xcfbb4500, 0x69fd14f6, 0xcfb3057d, + 0x69f3984c, 0xcfaac7d8, 0x69ea1a03, 0xcfa28c10, + 0x69e09a1c, 0xcf9a5225, 0x69d71899, 0xcf921a17, + 0x69cd9578, 0xcf89e3e8, 0x69c410ba, 0xcf81af97, + 0x69ba8a61, 0xcf797d24, 0x69b1026c, 0xcf714c91, + 0x69a778db, 0xcf691ddd, 0x699dedaf, 0xcf60f108, + 0x699460e8, 0xcf58c613, 0x698ad287, 0xcf509cfe, + 0x6981428c, 0xcf4875ca, 0x6977b0f7, 0xcf405077, + 0x696e1dc9, 0xcf382d05, 0x69648902, 0xcf300b74, + 0x695af2a3, 0xcf27ebc5, 0x69515aab, 0xcf1fcdf8, + 0x6947c11c, 0xcf17b20d, 0x693e25f5, 0xcf0f9805, + 0x69348937, 0xcf077fe1, 0x692aeae3, 0xceff699f, + 0x69214af8, 0xcef75541, 0x6917a977, 0xceef42c7, + 0x690e0661, 0xcee73231, 0x690461b5, 0xcedf2380, + 0x68fabb75, 0xced716b4, 0x68f113a0, 0xcecf0bcd, + 0x68e76a37, 0xcec702cb, 0x68ddbf3b, 0xcebefbb0, + 0x68d412ab, 0xceb6f67a, 0x68ca6488, 0xceaef32b, + 0x68c0b4d2, 0xcea6f1c2, 0x68b7038b, 0xce9ef241, + 0x68ad50b1, 0xce96f4a7, 0x68a39c46, 0xce8ef8f4, + 0x6899e64a, 0xce86ff2a, 0x68902ebd, 0xce7f0748, + 0x688675a0, 0xce77114e, 0x687cbaf3, 0xce6f1d3d, + 0x6872feb6, 0xce672b16, 0x686940ea, 0xce5f3ad8, + 0x685f8190, 0xce574c84, 0x6855c0a6, 0xce4f6019, + 0x684bfe2f, 0xce47759a, 0x68423a2a, 0xce3f8d05, + 0x68387498, 0xce37a65b, 0x682ead78, 0xce2fc19c, + 0x6824e4cc, 0xce27dec9, 0x681b1a94, 0xce1ffde2, + 0x68114ed0, 0xce181ee8, 0x68078181, 0xce1041d9, + 0x67fdb2a7, 0xce0866b8, 0x67f3e241, 0xce008d84, + 0x67ea1052, 0xcdf8b63d, 0x67e03cd8, 0xcdf0e0e4, + 0x67d667d5, 0xcde90d79, 0x67cc9149, 0xcde13bfd, + 0x67c2b934, 0xcdd96c6f, 0x67b8df97, 0xcdd19ed0, + 0x67af0472, 0xcdc9d320, 0x67a527c4, 0xcdc20960, + 0x679b4990, 0xcdba4190, 0x679169d5, 0xcdb27bb0, + 0x67878893, 0xcdaab7c0, 0x677da5cb, 0xcda2f5c2, + 0x6773c17d, 0xcd9b35b4, 0x6769dbaa, 0xcd937798, + 0x675ff452, 0xcd8bbb6d, 0x67560b76, 0xcd840134, + 0x674c2115, 0xcd7c48ee, 0x67423530, 0xcd74929a, + 0x673847c8, 0xcd6cde39, 0x672e58dc, 0xcd652bcb, + 0x6724686e, 0xcd5d7b50, 0x671a767e, 0xcd55ccca, + 0x6710830c, 0xcd4e2037, 0x67068e18, 0xcd467599, + 0x66fc97a3, 0xcd3eccef, 0x66f29fad, 0xcd37263a, + 0x66e8a637, 0xcd2f817b, 0x66deab41, 0xcd27deb0, + 0x66d4aecb, 0xcd203ddc, 0x66cab0d6, 0xcd189efe, + 0x66c0b162, 0xcd110216, 0x66b6b070, 0xcd096725, + 0x66acadff, 0xcd01ce2b, 0x66a2aa11, 0xccfa3729, + 0x6698a4a6, 0xccf2a21d, 0x668e9dbd, 0xcceb0f0a, + 0x66849558, 0xcce37def, 0x667a8b77, 0xccdbeecc, + 0x6670801a, 0xccd461a2, 0x66667342, 0xccccd671, + 0x665c64ef, 0xccc54d3a, 0x66525521, 0xccbdc5fc, + 0x664843d9, 0xccb640b8, 0x663e3117, 0xccaebd6e, + 0x66341cdb, 0xcca73c1e, 0x662a0727, 0xcc9fbcca, + 0x661feffa, 0xcc983f70, 0x6615d754, 0xcc90c412, + 0x660bbd37, 0xcc894aaf, 0x6601a1a2, 0xcc81d349, + 0x65f78497, 0xcc7a5dde, 0x65ed6614, 0xcc72ea70, + 0x65e3461b, 0xcc6b78ff, 0x65d924ac, 0xcc64098b, + 0x65cf01c8, 0xcc5c9c14, 0x65c4dd6e, 0xcc55309b, + 0x65bab7a0, 0xcc4dc720, 0x65b0905d, 0xcc465fa3, + 0x65a667a7, 0xcc3efa25, 0x659c3d7c, 0xcc3796a5, + 0x659211df, 0xcc303524, 0x6587e4cf, 0xcc28d5a3, + 0x657db64c, 0xcc217822, 0x65738657, 0xcc1a1ca0, + 0x656954f1, 0xcc12c31f, 0x655f2219, 0xcc0b6b9e, + 0x6554edd1, 0xcc04161e, 0x654ab818, 0xcbfcc29f, + 0x654080ef, 0xcbf57121, 0x65364857, 0xcbee21a5, + 0x652c0e4f, 0xcbe6d42b, 0x6521d2d8, 0xcbdf88b3, + 0x651795f3, 0xcbd83f3d, 0x650d57a0, 0xcbd0f7ca, + 0x650317df, 0xcbc9b25a, 0x64f8d6b0, 0xcbc26eee, + 0x64ee9415, 0xcbbb2d85, 0x64e4500e, 0xcbb3ee20, + 0x64da0a9a, 0xcbacb0bf, 0x64cfc3ba, 0xcba57563, + 0x64c57b6f, 0xcb9e3c0b, 0x64bb31ba, 0xcb9704b9, + 0x64b0e699, 0xcb8fcf6b, 0x64a69a0f, 0xcb889c23, + 0x649c4c1b, 0xcb816ae1, 0x6491fcbe, 0xcb7a3ba5, + 0x6487abf7, 0xcb730e70, 0x647d59c8, 0xcb6be341, + 0x64730631, 0xcb64ba19, 0x6468b132, 0xcb5d92f8, + 0x645e5acc, 0xcb566ddf, 0x645402ff, 0xcb4f4acd, + 0x6449a9cc, 0xcb4829c4, 0x643f4f32, 0xcb410ac3, + 0x6434f332, 0xcb39edca, 0x642a95ce, 0xcb32d2da, + 0x64203704, 0xcb2bb9f4, 0x6415d6d5, 0xcb24a316, + 0x640b7543, 0xcb1d8e43, 0x6401124d, 0xcb167b79, + 0x63f6adf3, 0xcb0f6aba, 0x63ec4837, 0xcb085c05, + 0x63e1e117, 0xcb014f5b, 0x63d77896, 0xcafa44bc, + 0x63cd0eb3, 0xcaf33c28, 0x63c2a36f, 0xcaec35a0, + 0x63b836ca, 0xcae53123, 0x63adc8c4, 0xcade2eb3, + 0x63a3595e, 0xcad72e4f, 0x6398e898, 0xcad02ff8, + 0x638e7673, 0xcac933ae, 0x638402ef, 0xcac23971, + 0x63798e0d, 0xcabb4141, 0x636f17cc, 0xcab44b1f, + 0x6364a02e, 0xcaad570c, 0x635a2733, 0xcaa66506, + 0x634facda, 0xca9f750f, 0x63453125, 0xca988727, + 0x633ab414, 0xca919b4e, 0x633035a7, 0xca8ab184, + 0x6325b5df, 0xca83c9ca, 0x631b34bc, 0xca7ce420, + 0x6310b23e, 0xca760086, 0x63062e67, 0xca6f1efc, + 0x62fba936, 0xca683f83, 0x62f122ab, 0xca61621b, + 0x62e69ac8, 0xca5a86c4, 0x62dc118c, 0xca53ad7e, + 0x62d186f8, 0xca4cd64b, 0x62c6fb0c, 0xca460129, + 0x62bc6dca, 0xca3f2e19, 0x62b1df30, 0xca385d1d, + 0x62a74f40, 0xca318e32, 0x629cbdfa, 0xca2ac15b, + 0x62922b5e, 0xca23f698, 0x6287976e, 0xca1d2de7, + 0x627d0228, 0xca16674b, 0x62726b8e, 0xca0fa2c3, + 0x6267d3a0, 0xca08e04f, 0x625d3a5e, 0xca021fef, + 0x62529fca, 0xc9fb61a5, 0x624803e2, 0xc9f4a570, + 0x623d66a8, 0xc9edeb50, 0x6232c81c, 0xc9e73346, + 0x6228283f, 0xc9e07d51, 0x621d8711, 0xc9d9c973, + 0x6212e492, 0xc9d317ab, 0x620840c2, 0xc9cc67fa, + 0x61fd9ba3, 0xc9c5ba60, 0x61f2f534, 0xc9bf0edd, + 0x61e84d76, 0xc9b86572, 0x61dda46a, 0xc9b1be1e, + 0x61d2fa0f, 0xc9ab18e3, 0x61c84e67, 0xc9a475bf, + 0x61bda171, 0xc99dd4b4, 0x61b2f32e, 0xc99735c2, + 0x61a8439e, 0xc99098e9, 0x619d92c2, 0xc989fe29, + 0x6192e09b, 0xc9836582, 0x61882d28, 0xc97ccef5, + 0x617d786a, 0xc9763a83, 0x6172c262, 0xc96fa82a, + 0x61680b0f, 0xc96917ec, 0x615d5273, 0xc96289c9, + 0x6152988d, 0xc95bfdc1, 0x6147dd5f, 0xc95573d4, + 0x613d20e8, 0xc94eec03, 0x61326329, 0xc948664d, + 0x6127a423, 0xc941e2b4, 0x611ce3d5, 0xc93b6137, + 0x61122240, 0xc934e1d6, 0x61075f65, 0xc92e6492, + 0x60fc9b44, 0xc927e96b, 0x60f1d5de, 0xc9217062, + 0x60e70f32, 0xc91af976, 0x60dc4742, 0xc91484a8, + 0x60d17e0d, 0xc90e11f7, 0x60c6b395, 0xc907a166, + 0x60bbe7d8, 0xc90132f2, 0x60b11ad9, 0xc8fac69e, + 0x60a64c97, 0xc8f45c68, 0x609b7d13, 0xc8edf452, + 0x6090ac4d, 0xc8e78e5b, 0x6085da46, 0xc8e12a84, + 0x607b06fe, 0xc8dac8cd, 0x60703275, 0xc8d46936, + 0x60655cac, 0xc8ce0bc0, 0x605a85a3, 0xc8c7b06b, + 0x604fad5b, 0xc8c15736, 0x6044d3d4, 0xc8bb0023, + 0x6039f90f, 0xc8b4ab32, 0x602f1d0b, 0xc8ae5862, + 0x60243fca, 0xc8a807b4, 0x6019614c, 0xc8a1b928, + 0x600e8190, 0xc89b6cbf, 0x6003a099, 0xc8952278, + 0x5ff8be65, 0xc88eda54, 0x5feddaf6, 0xc8889454, + 0x5fe2f64c, 0xc8825077, 0x5fd81067, 0xc87c0ebd, + 0x5fcd2948, 0xc875cf28, 0x5fc240ef, 0xc86f91b7, + 0x5fb7575c, 0xc869566a, 0x5fac6c91, 0xc8631d42, + 0x5fa1808c, 0xc85ce63e, 0x5f969350, 0xc856b160, + 0x5f8ba4dc, 0xc8507ea7, 0x5f80b531, 0xc84a4e14, + 0x5f75c44e, 0xc8441fa6, 0x5f6ad235, 0xc83df35f, + 0x5f5fdee6, 0xc837c93e, 0x5f54ea62, 0xc831a143, + 0x5f49f4a8, 0xc82b7b70, 0x5f3efdb9, 0xc82557c3, + 0x5f340596, 0xc81f363d, 0x5f290c3f, 0xc81916df, + 0x5f1e11b5, 0xc812f9a9, 0x5f1315f7, 0xc80cde9b, + 0x5f081907, 0xc806c5b5, 0x5efd1ae4, 0xc800aef7, + 0x5ef21b90, 0xc7fa9a62, 0x5ee71b0a, 0xc7f487f6, + 0x5edc1953, 0xc7ee77b3, 0x5ed1166b, 0xc7e8699a, + 0x5ec61254, 0xc7e25daa, 0x5ebb0d0d, 0xc7dc53e3, + 0x5eb00696, 0xc7d64c47, 0x5ea4fef0, 0xc7d046d6, + 0x5e99f61d, 0xc7ca438f, 0x5e8eec1b, 0xc7c44272, + 0x5e83e0eb, 0xc7be4381, 0x5e78d48e, 0xc7b846ba, + 0x5e6dc705, 0xc7b24c20, 0x5e62b84f, 0xc7ac53b1, + 0x5e57a86d, 0xc7a65d6e, 0x5e4c9760, 0xc7a06957, + 0x5e418528, 0xc79a776c, 0x5e3671c5, 0xc79487ae, + 0x5e2b5d38, 0xc78e9a1d, 0x5e204781, 0xc788aeb9, + 0x5e1530a1, 0xc782c582, 0x5e0a1898, 0xc77cde79, + 0x5dfeff67, 0xc776f99d, 0x5df3e50d, 0xc77116f0, + 0x5de8c98c, 0xc76b3671, 0x5dddace4, 0xc7655820, + 0x5dd28f15, 0xc75f7bfe, 0x5dc7701f, 0xc759a20a, + 0x5dbc5004, 0xc753ca46, 0x5db12ec3, 0xc74df4b1, + 0x5da60c5d, 0xc748214c, 0x5d9ae8d2, 0xc7425016, + 0x5d8fc424, 0xc73c8111, 0x5d849e51, 0xc736b43c, + 0x5d79775c, 0xc730e997, 0x5d6e4f43, 0xc72b2123, + 0x5d632608, 0xc7255ae0, 0x5d57fbaa, 0xc71f96ce, + 0x5d4cd02c, 0xc719d4ed, 0x5d41a38c, 0xc714153e, + 0x5d3675cb, 0xc70e57c0, 0x5d2b46ea, 0xc7089c75, + 0x5d2016e9, 0xc702e35c, 0x5d14e5c9, 0xc6fd2c75, + 0x5d09b389, 0xc6f777c1, 0x5cfe802b, 0xc6f1c540, + 0x5cf34baf, 0xc6ec14f2, 0x5ce81615, 0xc6e666d7, + 0x5cdcdf5e, 0xc6e0baf0, 0x5cd1a78a, 0xc6db113d, + 0x5cc66e99, 0xc6d569be, 0x5cbb348d, 0xc6cfc472, + 0x5caff965, 0xc6ca215c, 0x5ca4bd21, 0xc6c4807a, + 0x5c997fc4, 0xc6bee1cd, 0x5c8e414b, 0xc6b94554, + 0x5c8301b9, 0xc6b3ab12, 0x5c77c10e, 0xc6ae1304, + 0x5c6c7f4a, 0xc6a87d2d, 0x5c613c6d, 0xc6a2e98b, + 0x5c55f878, 0xc69d5820, 0x5c4ab36b, 0xc697c8eb, + 0x5c3f6d47, 0xc6923bec, 0x5c34260c, 0xc68cb124, + 0x5c28ddbb, 0xc6872894, 0x5c1d9454, 0xc681a23a, + 0x5c1249d8, 0xc67c1e18, 0x5c06fe46, 0xc6769c2e, + 0x5bfbb1a0, 0xc6711c7b, 0x5bf063e6, 0xc66b9f01, + 0x5be51518, 0xc66623be, 0x5bd9c537, 0xc660aab5, + 0x5bce7442, 0xc65b33e4, 0x5bc3223c, 0xc655bf4c, + 0x5bb7cf23, 0xc6504ced, 0x5bac7af9, 0xc64adcc7, + 0x5ba125bd, 0xc6456edb, 0x5b95cf71, 0xc6400329, + 0x5b8a7815, 0xc63a99b1, 0x5b7f1fa9, 0xc6353273, + 0x5b73c62d, 0xc62fcd6f, 0x5b686ba3, 0xc62a6aa6, + 0x5b5d100a, 0xc6250a18, 0x5b51b363, 0xc61fabc4, + 0x5b4655ae, 0xc61a4fac, 0x5b3af6ec, 0xc614f5cf, + 0x5b2f971e, 0xc60f9e2e, 0x5b243643, 0xc60a48c9, + 0x5b18d45c, 0xc604f5a0, 0x5b0d716a, 0xc5ffa4b3, + 0x5b020d6c, 0xc5fa5603, 0x5af6a865, 0xc5f5098f, + 0x5aeb4253, 0xc5efbf58, 0x5adfdb37, 0xc5ea775e, + 0x5ad47312, 0xc5e531a1, 0x5ac909e5, 0xc5dfee22, + 0x5abd9faf, 0xc5daace1, 0x5ab23471, 0xc5d56ddd, + 0x5aa6c82b, 0xc5d03118, 0x5a9b5adf, 0xc5caf690, + 0x5a8fec8c, 0xc5c5be47, 0x5a847d33, 0xc5c0883d, + 0x5a790cd4, 0xc5bb5472, 0x5a6d9b70, 0xc5b622e6, + 0x5a622907, 0xc5b0f399, 0x5a56b599, 0xc5abc68c, + 0x5a4b4128, 0xc5a69bbe, 0x5a3fcbb3, 0xc5a17330, + 0x5a34553b, 0xc59c4ce3, 0x5a28ddc0, 0xc59728d5, + 0x5a1d6544, 0xc5920708, 0x5a11ebc5, 0xc58ce77c, + 0x5a067145, 0xc587ca31, 0x59faf5c5, 0xc582af26, + 0x59ef7944, 0xc57d965d, 0x59e3fbc3, 0xc5787fd6, + 0x59d87d42, 0xc5736b90, 0x59ccfdc2, 0xc56e598c, + 0x59c17d44, 0xc56949ca, 0x59b5fbc8, 0xc5643c4a, + 0x59aa794d, 0xc55f310d, 0x599ef5d6, 0xc55a2812, + 0x59937161, 0xc555215a, 0x5987ebf0, 0xc5501ce5, + 0x597c6584, 0xc54b1ab4, 0x5970de1b, 0xc5461ac6, + 0x596555b8, 0xc5411d1b, 0x5959cc5a, 0xc53c21b4, + 0x594e4201, 0xc5372891, 0x5942b6af, 0xc53231b3, + 0x59372a64, 0xc52d3d18, 0x592b9d1f, 0xc5284ac3, + 0x59200ee3, 0xc5235ab2, 0x59147fae, 0xc51e6ce6, + 0x5908ef82, 0xc519815f, 0x58fd5e5f, 0xc514981d, + 0x58f1cc45, 0xc50fb121, 0x58e63935, 0xc50acc6b, + 0x58daa52f, 0xc505e9fb, 0x58cf1034, 0xc50109d0, + 0x58c37a44, 0xc4fc2bec, 0x58b7e35f, 0xc4f7504e, + 0x58ac4b87, 0xc4f276f7, 0x58a0b2bb, 0xc4ed9fe7, + 0x589518fc, 0xc4e8cb1e, 0x58897e4a, 0xc4e3f89c, + 0x587de2a7, 0xc4df2862, 0x58724611, 0xc4da5a6f, + 0x5866a88a, 0xc4d58ec3, 0x585b0a13, 0xc4d0c560, + 0x584f6aab, 0xc4cbfe45, 0x5843ca53, 0xc4c73972, + 0x5838290c, 0xc4c276e8, 0x582c86d5, 0xc4bdb6a6, + 0x5820e3b0, 0xc4b8f8ad, 0x58153f9d, 0xc4b43cfd, + 0x58099a9c, 0xc4af8397, 0x57fdf4ae, 0xc4aacc7a, + 0x57f24dd3, 0xc4a617a6, 0x57e6a60c, 0xc4a1651c, + 0x57dafd59, 0xc49cb4dd, 0x57cf53bb, 0xc49806e7, + 0x57c3a931, 0xc4935b3c, 0x57b7fdbd, 0xc48eb1db, + 0x57ac515f, 0xc48a0ac4, 0x57a0a417, 0xc48565f9, + 0x5794f5e6, 0xc480c379, 0x578946cc, 0xc47c2344, + 0x577d96ca, 0xc477855a, 0x5771e5e0, 0xc472e9bc, + 0x5766340f, 0xc46e5069, 0x575a8157, 0xc469b963, + 0x574ecdb8, 0xc46524a9, 0x57431933, 0xc460923b, + 0x573763c9, 0xc45c0219, 0x572bad7a, 0xc4577444, + 0x571ff646, 0xc452e8bc, 0x57143e2d, 0xc44e5f80, + 0x57088531, 0xc449d892, 0x56fccb51, 0xc44553f2, + 0x56f1108f, 0xc440d19e, 0x56e554ea, 0xc43c5199, + 0x56d99864, 0xc437d3e1, 0x56cddafb, 0xc4335877, + 0x56c21cb2, 0xc42edf5c, 0x56b65d88, 0xc42a688f, + 0x56aa9d7e, 0xc425f410, 0x569edc94, 0xc42181e0, + 0x56931acb, 0xc41d11ff, 0x56875823, 0xc418a46d, + 0x567b949d, 0xc414392b, 0x566fd039, 0xc40fd037, + 0x56640af7, 0xc40b6994, 0x565844d8, 0xc4070540, + 0x564c7ddd, 0xc402a33c, 0x5640b606, 0xc3fe4388, + 0x5634ed53, 0xc3f9e624, 0x562923c5, 0xc3f58b10, + 0x561d595d, 0xc3f1324e, 0x56118e1a, 0xc3ecdbdc, + 0x5605c1fd, 0xc3e887bb, 0x55f9f507, 0xc3e435ea, + 0x55ee2738, 0xc3dfe66c, 0x55e25890, 0xc3db993e, + 0x55d68911, 0xc3d74e62, 0x55cab8ba, 0xc3d305d8, + 0x55bee78c, 0xc3cebfa0, 0x55b31587, 0xc3ca7bba, + 0x55a742ac, 0xc3c63a26, 0x559b6efb, 0xc3c1fae5, + 0x558f9a76, 0xc3bdbdf6, 0x5583c51b, 0xc3b9835a, + 0x5577eeec, 0xc3b54b11, 0x556c17e9, 0xc3b1151b, + 0x55604013, 0xc3ace178, 0x5554676a, 0xc3a8b028, + 0x55488dee, 0xc3a4812c, 0x553cb3a0, 0xc3a05484, + 0x5530d881, 0xc39c2a2f, 0x5524fc90, 0xc398022f, + 0x55191fcf, 0xc393dc82, 0x550d423d, 0xc38fb92a, + 0x550163dc, 0xc38b9827, 0x54f584ac, 0xc3877978, + 0x54e9a4ac, 0xc3835d1e, 0x54ddc3de, 0xc37f4319, + 0x54d1e242, 0xc37b2b6a, 0x54c5ffd9, 0xc377160f, + 0x54ba1ca3, 0xc373030a, 0x54ae38a0, 0xc36ef25b, + 0x54a253d1, 0xc36ae401, 0x54966e36, 0xc366d7fd, + 0x548a87d1, 0xc362ce50, 0x547ea0a0, 0xc35ec6f8, + 0x5472b8a5, 0xc35ac1f7, 0x5466cfe1, 0xc356bf4d, + 0x545ae653, 0xc352bef9, 0x544efbfc, 0xc34ec0fc, + 0x544310dd, 0xc34ac556, 0x543724f5, 0xc346cc07, + 0x542b3846, 0xc342d510, 0x541f4ad1, 0xc33ee070, + 0x54135c94, 0xc33aee27, 0x54076d91, 0xc336fe37, + 0x53fb7dc9, 0xc333109e, 0x53ef8d3c, 0xc32f255e, + 0x53e39be9, 0xc32b3c75, 0x53d7a9d3, 0xc32755e5, + 0x53cbb6f8, 0xc32371ae, 0x53bfc35b, 0xc31f8fcf, + 0x53b3cefa, 0xc31bb049, 0x53a7d9d7, 0xc317d31c, + 0x539be3f2, 0xc313f848, 0x538fed4b, 0xc3101fce, + 0x5383f5e3, 0xc30c49ad, 0x5377fdbb, 0xc30875e5, + 0x536c04d2, 0xc304a477, 0x53600b2a, 0xc300d563, + 0x535410c3, 0xc2fd08a9, 0x5348159d, 0xc2f93e4a, + 0x533c19b8, 0xc2f57644, 0x53301d16, 0xc2f1b099, + 0x53241fb6, 0xc2eded49, 0x5318219a, 0xc2ea2c53, + 0x530c22c1, 0xc2e66db8, 0x5300232c, 0xc2e2b178, + 0x52f422db, 0xc2def794, 0x52e821cf, 0xc2db400a, + 0x52dc2009, 0xc2d78add, 0x52d01d89, 0xc2d3d80a, + 0x52c41a4f, 0xc2d02794, 0x52b8165b, 0xc2cc7979, + 0x52ac11af, 0xc2c8cdbb, 0x52a00c4b, 0xc2c52459, + 0x5294062f, 0xc2c17d52, 0x5287ff5b, 0xc2bdd8a9, + 0x527bf7d1, 0xc2ba365c, 0x526fef90, 0xc2b6966c, + 0x5263e699, 0xc2b2f8d8, 0x5257dced, 0xc2af5da2, + 0x524bd28c, 0xc2abc4c9, 0x523fc776, 0xc2a82e4d, + 0x5233bbac, 0xc2a49a2e, 0x5227af2e, 0xc2a1086d, + 0x521ba1fd, 0xc29d790a, 0x520f941a, 0xc299ec05, + 0x52038584, 0xc296615d, 0x51f7763c, 0xc292d914, + 0x51eb6643, 0xc28f5329, 0x51df5599, 0xc28bcf9c, + 0x51d3443f, 0xc2884e6e, 0x51c73235, 0xc284cf9f, + 0x51bb1f7c, 0xc281532e, 0x51af0c13, 0xc27dd91c, + 0x51a2f7fc, 0xc27a616a, 0x5196e337, 0xc276ec16, + 0x518acdc4, 0xc2737922, 0x517eb7a4, 0xc270088e, + 0x5172a0d7, 0xc26c9a58, 0x5166895f, 0xc2692e83, + 0x515a713a, 0xc265c50e, 0x514e586a, 0xc2625df8, + 0x51423ef0, 0xc25ef943, 0x513624cb, 0xc25b96ee, + 0x512a09fc, 0xc25836f9, 0x511dee84, 0xc254d965, + 0x5111d263, 0xc2517e31, 0x5105b599, 0xc24e255e, + 0x50f99827, 0xc24aceed, 0x50ed7a0e, 0xc2477adc, + 0x50e15b4e, 0xc244292c, 0x50d53be7, 0xc240d9de, + 0x50c91bda, 0xc23d8cf1, 0x50bcfb28, 0xc23a4265, + 0x50b0d9d0, 0xc236fa3b, 0x50a4b7d3, 0xc233b473, + 0x50989532, 0xc230710d, 0x508c71ee, 0xc22d3009, + 0x50804e06, 0xc229f167, 0x5074297b, 0xc226b528, + 0x5068044e, 0xc2237b4b, 0x505bde7f, 0xc22043d0, + 0x504fb80e, 0xc21d0eb8, 0x504390fd, 0xc219dc03, + 0x5037694b, 0xc216abb1, 0x502b40f8, 0xc2137dc2, + 0x501f1807, 0xc2105236, 0x5012ee76, 0xc20d290d, + 0x5006c446, 0xc20a0248, 0x4ffa9979, 0xc206dde6, + 0x4fee6e0d, 0xc203bbe8, 0x4fe24205, 0xc2009c4e, + 0x4fd6155f, 0xc1fd7f17, 0x4fc9e81e, 0xc1fa6445, + 0x4fbdba40, 0xc1f74bd6, 0x4fb18bc8, 0xc1f435cc, + 0x4fa55cb4, 0xc1f12227, 0x4f992d06, 0xc1ee10e5, + 0x4f8cfcbe, 0xc1eb0209, 0x4f80cbdc, 0xc1e7f591, + 0x4f749a61, 0xc1e4eb7e, 0x4f68684e, 0xc1e1e3d0, + 0x4f5c35a3, 0xc1dede87, 0x4f500260, 0xc1dbdba3, + 0x4f43ce86, 0xc1d8db25, 0x4f379a16, 0xc1d5dd0c, + 0x4f2b650f, 0xc1d2e158, 0x4f1f2f73, 0xc1cfe80a, + 0x4f12f941, 0xc1ccf122, 0x4f06c27a, 0xc1c9fca0, + 0x4efa8b20, 0xc1c70a84, 0x4eee5331, 0xc1c41ace, + 0x4ee21aaf, 0xc1c12d7e, 0x4ed5e19a, 0xc1be4294, + 0x4ec9a7f3, 0xc1bb5a11, 0x4ebd6db9, 0xc1b873f5, + 0x4eb132ef, 0xc1b5903f, 0x4ea4f793, 0xc1b2aef0, + 0x4e98bba7, 0xc1afd007, 0x4e8c7f2a, 0xc1acf386, + 0x4e80421e, 0xc1aa196c, 0x4e740483, 0xc1a741b9, + 0x4e67c65a, 0xc1a46c6e, 0x4e5b87a2, 0xc1a1998a, + 0x4e4f485c, 0xc19ec90d, 0x4e430889, 0xc19bfaf9, + 0x4e36c82a, 0xc1992f4c, 0x4e2a873e, 0xc1966606, + 0x4e1e45c6, 0xc1939f29, 0x4e1203c3, 0xc190dab4, + 0x4e05c135, 0xc18e18a7, 0x4df97e1d, 0xc18b5903, + 0x4ded3a7b, 0xc1889bc6, 0x4de0f64f, 0xc185e0f3, + 0x4dd4b19a, 0xc1832888, 0x4dc86c5d, 0xc1807285, + 0x4dbc2698, 0xc17dbeec, 0x4dafe04b, 0xc17b0dbb, + 0x4da39978, 0xc1785ef4, 0x4d97521d, 0xc175b296, + 0x4d8b0a3d, 0xc17308a1, 0x4d7ec1d6, 0xc1706115, + 0x4d7278eb, 0xc16dbbf3, 0x4d662f7b, 0xc16b193a, + 0x4d59e586, 0xc16878eb, 0x4d4d9b0e, 0xc165db05, + 0x4d415013, 0xc1633f8a, 0x4d350495, 0xc160a678, + 0x4d28b894, 0xc15e0fd1, 0x4d1c6c11, 0xc15b7b94, + 0x4d101f0e, 0xc158e9c1, 0x4d03d189, 0xc1565a58, + 0x4cf78383, 0xc153cd5a, 0x4ceb34fe, 0xc15142c6, + 0x4cdee5f9, 0xc14eba9d, 0x4cd29676, 0xc14c34df, + 0x4cc64673, 0xc149b18b, 0x4cb9f5f3, 0xc14730a3, + 0x4cada4f5, 0xc144b225, 0x4ca1537a, 0xc1423613, + 0x4c950182, 0xc13fbc6c, 0x4c88af0e, 0xc13d4530, + 0x4c7c5c1e, 0xc13ad060, 0x4c7008b3, 0xc1385dfb, + 0x4c63b4ce, 0xc135ee02, 0x4c57606e, 0xc1338075, + 0x4c4b0b94, 0xc1311553, 0x4c3eb641, 0xc12eac9d, + 0x4c326075, 0xc12c4653, 0x4c260a31, 0xc129e276, + 0x4c19b374, 0xc1278104, 0x4c0d5c41, 0xc12521ff, + 0x4c010496, 0xc122c566, 0x4bf4ac75, 0xc1206b39, + 0x4be853de, 0xc11e1379, 0x4bdbfad1, 0xc11bbe26, + 0x4bcfa150, 0xc1196b3f, 0x4bc34759, 0xc1171ac6, + 0x4bb6ecef, 0xc114ccb9, 0x4baa9211, 0xc1128119, + 0x4b9e36c0, 0xc11037e6, 0x4b91dafc, 0xc10df120, + 0x4b857ec7, 0xc10bacc8, 0x4b79221f, 0xc1096add, + 0x4b6cc506, 0xc1072b5f, 0x4b60677c, 0xc104ee4f, + 0x4b540982, 0xc102b3ac, 0x4b47ab19, 0xc1007b77, + 0x4b3b4c40, 0xc0fe45b0, 0x4b2eecf8, 0xc0fc1257, + 0x4b228d42, 0xc0f9e16b, 0x4b162d1d, 0xc0f7b2ee, + 0x4b09cc8c, 0xc0f586df, 0x4afd6b8d, 0xc0f35d3e, + 0x4af10a22, 0xc0f1360b, 0x4ae4a84b, 0xc0ef1147, + 0x4ad84609, 0xc0eceef1, 0x4acbe35b, 0xc0eacf09, + 0x4abf8043, 0xc0e8b190, 0x4ab31cc1, 0xc0e69686, + 0x4aa6b8d5, 0xc0e47deb, 0x4a9a5480, 0xc0e267be, + 0x4a8defc3, 0xc0e05401, 0x4a818a9d, 0xc0de42b2, + 0x4a752510, 0xc0dc33d2, 0x4a68bf1b, 0xc0da2762, + 0x4a5c58c0, 0xc0d81d61, 0x4a4ff1fe, 0xc0d615cf, + 0x4a438ad7, 0xc0d410ad, 0x4a37234a, 0xc0d20dfa, + 0x4a2abb59, 0xc0d00db6, 0x4a1e5303, 0xc0ce0fe3, + 0x4a11ea49, 0xc0cc147f, 0x4a05812c, 0xc0ca1b8a, + 0x49f917ac, 0xc0c82506, 0x49ecadc9, 0xc0c630f2, + 0x49e04385, 0xc0c43f4d, 0x49d3d8df, 0xc0c25019, + 0x49c76dd8, 0xc0c06355, 0x49bb0271, 0xc0be7901, + 0x49ae96aa, 0xc0bc911d, 0x49a22a83, 0xc0baabaa, + 0x4995bdfd, 0xc0b8c8a7, 0x49895118, 0xc0b6e815, + 0x497ce3d5, 0xc0b509f3, 0x49707635, 0xc0b32e42, + 0x49640837, 0xc0b15502, 0x495799dd, 0xc0af7e33, + 0x494b2b27, 0xc0ada9d4, 0x493ebc14, 0xc0abd7e6, + 0x49324ca7, 0xc0aa086a, 0x4925dcdf, 0xc0a83b5e, + 0x49196cbc, 0xc0a670c4, 0x490cfc40, 0xc0a4a89b, + 0x49008b6a, 0xc0a2e2e3, 0x48f41a3c, 0xc0a11f9d, + 0x48e7a8b5, 0xc09f5ec8, 0x48db36d6, 0xc09da065, + 0x48cec4a0, 0xc09be473, 0x48c25213, 0xc09a2af3, + 0x48b5df30, 0xc09873e4, 0x48a96bf6, 0xc096bf48, + 0x489cf867, 0xc0950d1d, 0x48908483, 0xc0935d64, + 0x4884104b, 0xc091b01d, 0x48779bbe, 0xc0900548, + 0x486b26de, 0xc08e5ce5, 0x485eb1ab, 0xc08cb6f5, + 0x48523c25, 0xc08b1376, 0x4845c64d, 0xc089726a, + 0x48395024, 0xc087d3d0, 0x482cd9a9, 0xc08637a9, + 0x482062de, 0xc0849df4, 0x4813ebc2, 0xc08306b2, + 0x48077457, 0xc08171e2, 0x47fafc9c, 0xc07fdf85, + 0x47ee8493, 0xc07e4f9b, 0x47e20c3b, 0xc07cc223, + 0x47d59396, 0xc07b371e, 0x47c91aa3, 0xc079ae8c, + 0x47bca163, 0xc078286e, 0x47b027d7, 0xc076a4c2, + 0x47a3adff, 0xc0752389, 0x479733dc, 0xc073a4c3, + 0x478ab96e, 0xc0722871, 0x477e3eb5, 0xc070ae92, + 0x4771c3b3, 0xc06f3726, 0x47654867, 0xc06dc22e, + 0x4758ccd2, 0xc06c4fa8, 0x474c50f4, 0xc06adf97, + 0x473fd4cf, 0xc06971f9, 0x47335862, 0xc06806ce, + 0x4726dbae, 0xc0669e18, 0x471a5eb3, 0xc06537d4, + 0x470de172, 0xc063d405, 0x470163eb, 0xc06272aa, + 0x46f4e620, 0xc06113c2, 0x46e86810, 0xc05fb74e, + 0x46dbe9bb, 0xc05e5d4e, 0x46cf6b23, 0xc05d05c3, + 0x46c2ec48, 0xc05bb0ab, 0x46b66d29, 0xc05a5e07, + 0x46a9edc9, 0xc0590dd8, 0x469d6e27, 0xc057c01d, + 0x4690ee44, 0xc05674d6, 0x46846e1f, 0xc0552c03, + 0x4677edbb, 0xc053e5a5, 0x466b6d16, 0xc052a1bb, + 0x465eec33, 0xc0516045, 0x46526b10, 0xc0502145, + 0x4645e9af, 0xc04ee4b8, 0x46396810, 0xc04daaa1, + 0x462ce634, 0xc04c72fe, 0x4620641a, 0xc04b3dcf, + 0x4613e1c5, 0xc04a0b16, 0x46075f33, 0xc048dad1, + 0x45fadc66, 0xc047ad01, 0x45ee595d, 0xc04681a6, + 0x45e1d61b, 0xc04558c0, 0x45d5529e, 0xc044324f, + 0x45c8cee7, 0xc0430e53, 0x45bc4af8, 0xc041eccc, + 0x45afc6d0, 0xc040cdba, 0x45a3426f, 0xc03fb11d, + 0x4596bdd7, 0xc03e96f6, 0x458a3908, 0xc03d7f44, + 0x457db403, 0xc03c6a07, 0x45712ec7, 0xc03b573f, + 0x4564a955, 0xc03a46ed, 0x455823ae, 0xc0393910, + 0x454b9dd3, 0xc0382da8, 0x453f17c3, 0xc03724b6, + 0x4532917f, 0xc0361e3a, 0x45260b08, 0xc0351a33, + 0x4519845e, 0xc03418a2, 0x450cfd82, 0xc0331986, + 0x45007674, 0xc0321ce0, 0x44f3ef35, 0xc03122b0, + 0x44e767c5, 0xc0302af5, 0x44dae024, 0xc02f35b1, + 0x44ce5854, 0xc02e42e2, 0x44c1d054, 0xc02d5289, + 0x44b54825, 0xc02c64a6, 0x44a8bfc7, 0xc02b7939, + 0x449c373c, 0xc02a9042, 0x448fae83, 0xc029a9c1, + 0x4483259d, 0xc028c5b6, 0x44769c8b, 0xc027e421, + 0x446a134c, 0xc0270502, 0x445d89e2, 0xc0262859, + 0x4451004d, 0xc0254e27, 0x4444768d, 0xc024766a, + 0x4437eca4, 0xc023a124, 0x442b6290, 0xc022ce54, + 0x441ed854, 0xc021fdfb, 0x44124dee, 0xc0213018, + 0x4405c361, 0xc02064ab, 0x43f938ac, 0xc01f9bb5, + 0x43ecadcf, 0xc01ed535, 0x43e022cc, 0xc01e112b, + 0x43d397a3, 0xc01d4f99, 0x43c70c54, 0xc01c907c, + 0x43ba80df, 0xc01bd3d6, 0x43adf546, 0xc01b19a7, + 0x43a16988, 0xc01a61ee, 0x4394dda7, 0xc019acac, + 0x438851a2, 0xc018f9e1, 0x437bc57b, 0xc018498c, + 0x436f3931, 0xc0179bae, 0x4362acc5, 0xc016f047, + 0x43562038, 0xc0164757, 0x43499389, 0xc015a0dd, + 0x433d06bb, 0xc014fcda, 0x433079cc, 0xc0145b4e, + 0x4323ecbe, 0xc013bc39, 0x43175f91, 0xc0131f9b, + 0x430ad245, 0xc0128574, 0x42fe44dc, 0xc011edc3, + 0x42f1b755, 0xc011588a, 0x42e529b0, 0xc010c5c7, + 0x42d89bf0, 0xc010357c, 0x42cc0e13, 0xc00fa7a8, + 0x42bf801a, 0xc00f1c4a, 0x42b2f207, 0xc00e9364, + 0x42a663d8, 0xc00e0cf5, 0x4299d590, 0xc00d88fd, + 0x428d472e, 0xc00d077c, 0x4280b8b3, 0xc00c8872, + 0x42742a1f, 0xc00c0be0, 0x42679b73, 0xc00b91c4, + 0x425b0caf, 0xc00b1a20, 0x424e7dd4, 0xc00aa4f3, + 0x4241eee2, 0xc00a323d, 0x42355fd9, 0xc009c1ff, + 0x4228d0bb, 0xc0095438, 0x421c4188, 0xc008e8e8, + 0x420fb240, 0xc008800f, 0x420322e3, 0xc00819ae, + 0x41f69373, 0xc007b5c4, 0x41ea03ef, 0xc0075452, + 0x41dd7459, 0xc006f556, 0x41d0e4b0, 0xc00698d3, + 0x41c454f5, 0xc0063ec6, 0x41b7c528, 0xc005e731, + 0x41ab354b, 0xc0059214, 0x419ea55d, 0xc0053f6e, + 0x4192155f, 0xc004ef3f, 0x41858552, 0xc004a188, + 0x4178f536, 0xc0045648, 0x416c650b, 0xc0040d80, + 0x415fd4d2, 0xc003c72f, 0x4153448c, 0xc0038356, + 0x4146b438, 0xc00341f4, 0x413a23d8, 0xc003030a, + 0x412d936c, 0xc002c697, 0x412102f4, 0xc0028c9c, + 0x41147271, 0xc0025519, 0x4107e1e3, 0xc002200d, + 0x40fb514b, 0xc001ed78, 0x40eec0aa, 0xc001bd5c, + 0x40e22fff, 0xc0018fb6, 0x40d59f4c, 0xc0016489, + 0x40c90e90, 0xc0013bd3, 0x40bc7dcc, 0xc0011594, + 0x40afed02, 0xc000f1ce, 0x40a35c30, 0xc000d07e, + 0x4096cb58, 0xc000b1a7, 0x408a3a7b, 0xc0009547, + 0x407da998, 0xc0007b5f, 0x407118b0, 0xc00063ee, + 0x406487c4, 0xc0004ef5, 0x4057f6d4, 0xc0003c74, + 0x404b65e1, 0xc0002c6a, 0x403ed4ea, 0xc0001ed8, + 0x403243f1, 0xc00013bd, 0x4025b2f7, 0xc0000b1a, + 0x401921fb, 0xc00004ef, 0x400c90fe, 0xc000013c, +}; + +/** +* @brief Initialization function for the Q31 RFFT/RIFFT. +* @param[in, out] *S points to an instance of the Q31 RFFT/RIFFT structure. +* @param[in] fftLenReal length of the FFT. +* @param[in] ifftFlagR flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. +* @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. +* @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported value. +* +* \par Description: +* \par +* The parameter fftLenReal Specifies length of RFFT/RIFFT Process. Supported FFT Lengths are 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192. +* \par +* The parameter ifftFlagR controls whether a forward or inverse transform is computed. +* Set(=1) ifftFlagR to calculate RIFFT, otherwise RFFT is calculated. +* \par +* The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. +* Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. +* \par 7 +* This function also initializes Twiddle factor table. +*/ + +arm_status arm_rfft_init_q31( + arm_rfft_instance_q31 * S, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialize the Real FFT length */ + S->fftLenReal = (uint16_t) fftLenReal; + + /* Initialize the Twiddle coefficientA pointer */ + S->pTwiddleAReal = (q31_t *) realCoefAQ31; + + /* Initialize the Twiddle coefficientB pointer */ + S->pTwiddleBReal = (q31_t *) realCoefBQ31; + + /* Initialize the Flag for selection of RFFT or RIFFT */ + S->ifftFlagR = (uint8_t) ifftFlagR; + + /* Initialize the Flag for calculation Bit reversal or not */ + S->bitReverseFlagR = (uint8_t) bitReverseFlag; + + /* Initialization of coef modifier depending on the FFT length */ + switch (S->fftLenReal) + { + case 8192u: + S->twidCoefRModifier = 1u; + S->pCfft = &arm_cfft_sR_q31_len4096; + break; + case 4096u: + S->twidCoefRModifier = 2u; + S->pCfft = &arm_cfft_sR_q31_len2048; + break; + case 2048u: + S->twidCoefRModifier = 4u; + S->pCfft = &arm_cfft_sR_q31_len1024; + break; + case 1024u: + S->twidCoefRModifier = 8u; + S->pCfft = &arm_cfft_sR_q31_len512; + break; + case 512u: + S->twidCoefRModifier = 16u; + S->pCfft = &arm_cfft_sR_q31_len256; + break; + case 256u: + S->twidCoefRModifier = 32u; + S->pCfft = &arm_cfft_sR_q31_len128; + break; + case 128u: + S->twidCoefRModifier = 64u; + S->pCfft = &arm_cfft_sR_q31_len64; + break; + case 64u: + S->twidCoefRModifier = 128u; + S->pCfft = &arm_cfft_sR_q31_len32; + break; + case 32u: + S->twidCoefRModifier = 256u; + S->pCfft = &arm_cfft_sR_q31_len16; + break; + default: + /* Reporting argument error if rfftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + /* return the status of RFFT Init function */ + return (status); +} + +/** +* @} end of RealFFT group +*/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q15.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q15.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,439 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_rfft_q15.c +* +* Description: RFFT & RIFFT Q15 process function +* +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/*-------------------------------------------------------------------- +* Internal functions prototypes +--------------------------------------------------------------------*/ + +void arm_split_rfft_q15( + q15_t * pSrc, + uint32_t fftLen, + q15_t * pATable, + q15_t * pBTable, + q15_t * pDst, + uint32_t modifier); + +void arm_split_rifft_q15( + q15_t * pSrc, + uint32_t fftLen, + q15_t * pATable, + q15_t * pBTable, + q15_t * pDst, + uint32_t modifier); + +/** +* @addtogroup RealFFT +* @{ +*/ + +/** +* @brief Processing function for the Q15 RFFT/RIFFT. +* @param[in] *S points to an instance of the Q15 RFFT/RIFFT structure. +* @param[in] *pSrc points to the input buffer. +* @param[out] *pDst points to the output buffer. +* @return none. +* +* \par Input an output formats: +* \par +* Internally input is downscaled by 2 for every stage to avoid saturations inside CFFT/CIFFT process. +* Hence the output format is different for different RFFT sizes. +* The input and output formats for different RFFT sizes and number of bits to upscale are mentioned in the tables below for RFFT and RIFFT: +* \par +* \image html RFFTQ15.gif "Input and Output Formats for Q15 RFFT" +* \par +* \image html RIFFTQ15.gif "Input and Output Formats for Q15 RIFFT" +*/ + +void arm_rfft_q15( + const arm_rfft_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst) +{ + const arm_cfft_instance_q15 *S_CFFT = S->pCfft; + uint32_t i; + uint32_t L2 = S->fftLenReal >> 1; + + /* Calculation of RIFFT of input */ + if(S->ifftFlagR == 1u) + { + /* Real IFFT core process */ + arm_split_rifft_q15(pSrc, L2, S->pTwiddleAReal, + S->pTwiddleBReal, pDst, S->twidCoefRModifier); + + /* Complex IFFT process */ + arm_cfft_q15(S_CFFT, pDst, S->ifftFlagR, S->bitReverseFlagR); + + for(i=0;ifftLenReal;i++) + { + pDst[i] = pDst[i] << 1; + } + } + else + { + /* Calculation of RFFT of input */ + + /* Complex FFT process */ + arm_cfft_q15(S_CFFT, pSrc, S->ifftFlagR, S->bitReverseFlagR); + + /* Real FFT core process */ + arm_split_rfft_q15(pSrc, L2, S->pTwiddleAReal, + S->pTwiddleBReal, pDst, S->twidCoefRModifier); + } +} + +/** +* @} end of RealFFT group +*/ + +/** +* @brief Core Real FFT process +* @param *pSrc points to the input buffer. +* @param fftLen length of FFT. +* @param *pATable points to the A twiddle Coef buffer. +* @param *pBTable points to the B twiddle Coef buffer. +* @param *pDst points to the output buffer. +* @param modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. +* @return none. +* The function implements a Real FFT +*/ + +void arm_split_rfft_q15( + q15_t * pSrc, + uint32_t fftLen, + q15_t * pATable, + q15_t * pBTable, + q15_t * pDst, + uint32_t modifier) +{ + uint32_t i; /* Loop Counter */ + q31_t outR, outI; /* Temporary variables for output */ + q15_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ + q15_t *pSrc1, *pSrc2; +#ifndef ARM_MATH_CM0_FAMILY + q15_t *pD1, *pD2; +#endif + + // pSrc[2u * fftLen] = pSrc[0]; + // pSrc[(2u * fftLen) + 1u] = pSrc[1]; + + pCoefA = &pATable[modifier * 2u]; + pCoefB = &pBTable[modifier * 2u]; + + pSrc1 = &pSrc[2]; + pSrc2 = &pSrc[(2u * fftLen) - 2u]; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + i = 1u; + pD1 = pDst + 2; + pD2 = pDst + (4u * fftLen) - 2; + + for(i = fftLen - 1; i > 0; i--) + { + /* + outR = (pSrc[2 * i] * pATable[2 * i] - pSrc[2 * i + 1] * pATable[2 * i + 1] + + pSrc[2 * n - 2 * i] * pBTable[2 * i] + + pSrc[2 * n - 2 * i + 1] * pBTable[2 * i + 1]); + */ + + /* outI = (pIn[2 * i + 1] * pATable[2 * i] + pIn[2 * i] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i + 1] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); */ + + +#ifndef ARM_MATH_BIG_ENDIAN + + /* pSrc[2 * i] * pATable[2 * i] - pSrc[2 * i + 1] * pATable[2 * i + 1] */ + outR = __SMUSD(*__SIMD32(pSrc1), *__SIMD32(pCoefA)); + +#else + + /* -(pSrc[2 * i + 1] * pATable[2 * i + 1] - pSrc[2 * i] * pATable[2 * i]) */ + outR = -(__SMUSD(*__SIMD32(pSrc1), *__SIMD32(pCoefA))); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* pSrc[2 * n - 2 * i] * pBTable[2 * i] + + pSrc[2 * n - 2 * i + 1] * pBTable[2 * i + 1]) */ + outR = __SMLAD(*__SIMD32(pSrc2), *__SIMD32(pCoefB), outR) >> 16u; + + /* pIn[2 * n - 2 * i] * pBTable[2 * i + 1] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i] */ + +#ifndef ARM_MATH_BIG_ENDIAN + + outI = __SMUSDX(*__SIMD32(pSrc2)--, *__SIMD32(pCoefB)); + +#else + + outI = __SMUSDX(*__SIMD32(pCoefB), *__SIMD32(pSrc2)--); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* (pIn[2 * i + 1] * pATable[2 * i] + pIn[2 * i] * pATable[2 * i + 1] */ + outI = __SMLADX(*__SIMD32(pSrc1)++, *__SIMD32(pCoefA), outI); + + /* write output */ + *pD1++ = (q15_t) outR; + *pD1++ = outI >> 16u; + + /* write complex conjugate output */ + pD2[0] = (q15_t) outR; + pD2[1] = -(outI >> 16u); + pD2 -= 2; + + /* update coefficient pointer */ + pCoefB = pCoefB + (2u * modifier); + pCoefA = pCoefA + (2u * modifier); + } + + pDst[2u * fftLen] = (pSrc[0] - pSrc[1]) >> 1; + pDst[(2u * fftLen) + 1u] = 0; + + pDst[0] = (pSrc[0] + pSrc[1]) >> 1; + pDst[1] = 0; + +#else + + /* Run the below code for Cortex-M0 */ + i = 1u; + + while(i < fftLen) + { + /* + outR = (pSrc[2 * i] * pATable[2 * i] - pSrc[2 * i + 1] * pATable[2 * i + 1] + + pSrc[2 * n - 2 * i] * pBTable[2 * i] + + pSrc[2 * n - 2 * i + 1] * pBTable[2 * i + 1]); + */ + + outR = *pSrc1 * *pCoefA; + outR = outR - (*(pSrc1 + 1) * *(pCoefA + 1)); + outR = outR + (*pSrc2 * *pCoefB); + outR = (outR + (*(pSrc2 + 1) * *(pCoefB + 1))) >> 16; + + + /* outI = (pIn[2 * i + 1] * pATable[2 * i] + pIn[2 * i] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i + 1] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); + */ + + outI = *pSrc2 * *(pCoefB + 1); + outI = outI - (*(pSrc2 + 1) * *pCoefB); + outI = outI + (*(pSrc1 + 1) * *pCoefA); + outI = outI + (*pSrc1 * *(pCoefA + 1)); + + /* update input pointers */ + pSrc1 += 2u; + pSrc2 -= 2u; + + /* write output */ + pDst[2u * i] = (q15_t) outR; + pDst[(2u * i) + 1u] = outI >> 16u; + + /* write complex conjugate output */ + pDst[(4u * fftLen) - (2u * i)] = (q15_t) outR; + pDst[((4u * fftLen) - (2u * i)) + 1u] = -(outI >> 16u); + + /* update coefficient pointer */ + pCoefB = pCoefB + (2u * modifier); + pCoefA = pCoefA + (2u * modifier); + + i++; + } + + pDst[2u * fftLen] = (pSrc[0] - pSrc[1]) >> 1; + pDst[(2u * fftLen) + 1u] = 0; + + pDst[0] = (pSrc[0] + pSrc[1]) >> 1; + pDst[1] = 0; + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ +} + + +/** +* @brief Core Real IFFT process +* @param[in] *pSrc points to the input buffer. +* @param[in] fftLen length of FFT. +* @param[in] *pATable points to the twiddle Coef A buffer. +* @param[in] *pBTable points to the twiddle Coef B buffer. +* @param[out] *pDst points to the output buffer. +* @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. +* @return none. +* The function implements a Real IFFT +*/ +void arm_split_rifft_q15( + q15_t * pSrc, + uint32_t fftLen, + q15_t * pATable, + q15_t * pBTable, + q15_t * pDst, + uint32_t modifier) +{ + uint32_t i; /* Loop Counter */ + q31_t outR, outI; /* Temporary variables for output */ + q15_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ + q15_t *pSrc1, *pSrc2; + q15_t *pDst1 = &pDst[0]; + + pCoefA = &pATable[0]; + pCoefB = &pBTable[0]; + + pSrc1 = &pSrc[0]; + pSrc2 = &pSrc[2u * fftLen]; + +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + i = fftLen; + + while(i > 0u) + { + /* + outR = (pIn[2 * i] * pATable[2 * i] + pIn[2 * i + 1] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1]); + + outI = (pIn[2 * i + 1] * pATable[2 * i] - pIn[2 * i] * pATable[2 * i + 1] - + pIn[2 * n - 2 * i] * pBTable[2 * i + 1] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); + */ + + +#ifndef ARM_MATH_BIG_ENDIAN + + /* pIn[2 * n - 2 * i] * pBTable[2 * i] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1]) */ + outR = __SMUSD(*__SIMD32(pSrc2), *__SIMD32(pCoefB)); + +#else + + /* -(-pIn[2 * n - 2 * i] * pBTable[2 * i] + + pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1])) */ + outR = -(__SMUSD(*__SIMD32(pSrc2), *__SIMD32(pCoefB))); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* pIn[2 * i] * pATable[2 * i] + pIn[2 * i + 1] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i] */ + outR = __SMLAD(*__SIMD32(pSrc1), *__SIMD32(pCoefA), outR) >> 16u; + + /* + -pIn[2 * n - 2 * i] * pBTable[2 * i + 1] + + pIn[2 * n - 2 * i + 1] * pBTable[2 * i] */ + outI = __SMUADX(*__SIMD32(pSrc2)--, *__SIMD32(pCoefB)); + + /* pIn[2 * i + 1] * pATable[2 * i] - pIn[2 * i] * pATable[2 * i + 1] */ + +#ifndef ARM_MATH_BIG_ENDIAN + + outI = __SMLSDX(*__SIMD32(pCoefA), *__SIMD32(pSrc1)++, -outI); + +#else + + outI = __SMLSDX(*__SIMD32(pSrc1)++, *__SIMD32(pCoefA), -outI); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + /* write output */ + +#ifndef ARM_MATH_BIG_ENDIAN + + *__SIMD32(pDst1)++ = __PKHBT(outR, (outI >> 16u), 16); + +#else + + *__SIMD32(pDst1)++ = __PKHBT((outI >> 16u), outR, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* update coefficient pointer */ + pCoefB = pCoefB + (2u * modifier); + pCoefA = pCoefA + (2u * modifier); + + i--; + } +#else + /* Run the below code for Cortex-M0 */ + i = fftLen; + + while(i > 0u) + { + /* + outR = (pIn[2 * i] * pATable[2 * i] + pIn[2 * i + 1] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1]); + */ + + outR = *pSrc2 * *pCoefB; + outR = outR - (*(pSrc2 + 1) * *(pCoefB + 1)); + outR = outR + (*pSrc1 * *pCoefA); + outR = (outR + (*(pSrc1 + 1) * *(pCoefA + 1))) >> 16; + + /* + outI = (pIn[2 * i + 1] * pATable[2 * i] - pIn[2 * i] * pATable[2 * i + 1] - + pIn[2 * n - 2 * i] * pBTable[2 * i + 1] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); + */ + + outI = *(pSrc1 + 1) * *pCoefA; + outI = outI - (*pSrc1 * *(pCoefA + 1)); + outI = outI - (*pSrc2 * *(pCoefB + 1)); + outI = outI - (*(pSrc2 + 1) * *(pCoefB)); + + /* update input pointers */ + pSrc1 += 2u; + pSrc2 -= 2u; + + /* write output */ + *pDst1++ = (q15_t) outR; + *pDst1++ = (q15_t) (outI >> 16); + + /* update coefficient pointer */ + pCoefB = pCoefB + (2u * modifier); + pCoefA = pCoefA + (2u * modifier); + + i--; + } +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q31.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q31.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,296 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_rfft_q31.c +* +* Description: RFFT & RIFFT Q31 process function +* +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/*-------------------------------------------------------------------- +* Internal functions prototypes +--------------------------------------------------------------------*/ + +void arm_split_rfft_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pATable, + q31_t * pBTable, + q31_t * pDst, + uint32_t modifier); + +void arm_split_rifft_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pATable, + q31_t * pBTable, + q31_t * pDst, + uint32_t modifier); + +/** +* @addtogroup RealFFT +* @{ +*/ + +/** +* @brief Processing function for the Q31 RFFT/RIFFT. +* @param[in] *S points to an instance of the Q31 RFFT/RIFFT structure. +* @param[in] *pSrc points to the input buffer. +* @param[out] *pDst points to the output buffer. +* @return none. +* +* \par Input an output formats: +* \par +* Internally input is downscaled by 2 for every stage to avoid saturations inside CFFT/CIFFT process. +* Hence the output format is different for different RFFT sizes. +* The input and output formats for different RFFT sizes and number of bits to upscale are mentioned in the tables below for RFFT and RIFFT: +* \par +* \image html RFFTQ31.gif "Input and Output Formats for Q31 RFFT" +* +* \par +* \image html RIFFTQ31.gif "Input and Output Formats for Q31 RIFFT" +*/ +void arm_rfft_q31( + const arm_rfft_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst) +{ + const arm_cfft_instance_q31 *S_CFFT = S->pCfft; + uint32_t i; + uint32_t L2 = S->fftLenReal >> 1; + + /* Calculation of RIFFT of input */ + if(S->ifftFlagR == 1u) + { + /* Real IFFT core process */ + arm_split_rifft_q31(pSrc, L2, S->pTwiddleAReal, + S->pTwiddleBReal, pDst, S->twidCoefRModifier); + + /* Complex IFFT process */ + arm_cfft_q31(S_CFFT, pDst, S->ifftFlagR, S->bitReverseFlagR); + + for(i=0;ifftLenReal;i++) + { + pDst[i] = pDst[i] << 1; + } + } + else + { + /* Calculation of RFFT of input */ + + /* Complex FFT process */ + arm_cfft_q31(S_CFFT, pSrc, S->ifftFlagR, S->bitReverseFlagR); + + /* Real FFT core process */ + arm_split_rfft_q31(pSrc, L2, S->pTwiddleAReal, + S->pTwiddleBReal, pDst, S->twidCoefRModifier); + } +} + +/** +* @} end of RealFFT group +*/ + +/** +* @brief Core Real FFT process +* @param[in] *pSrc points to the input buffer. +* @param[in] fftLen length of FFT. +* @param[in] *pATable points to the twiddle Coef A buffer. +* @param[in] *pBTable points to the twiddle Coef B buffer. +* @param[out] *pDst points to the output buffer. +* @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. +* @return none. +*/ +void arm_split_rfft_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pATable, + q31_t * pBTable, + q31_t * pDst, + uint32_t modifier) +{ + uint32_t i; /* Loop Counter */ + q31_t outR, outI; /* Temporary variables for output */ + q31_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ + q31_t CoefA1, CoefA2, CoefB1; /* Temporary variables for twiddle coefficients */ + q31_t *pOut1 = &pDst[2], *pOut2 = &pDst[(4u * fftLen) - 1u]; + q31_t *pIn1 = &pSrc[2], *pIn2 = &pSrc[(2u * fftLen) - 1u]; + + /* Init coefficient pointers */ + pCoefA = &pATable[modifier * 2u]; + pCoefB = &pBTable[modifier * 2u]; + + i = fftLen - 1u; + + while(i > 0u) + { + /* + outR = (pSrc[2 * i] * pATable[2 * i] - pSrc[2 * i + 1] * pATable[2 * i + 1] + + pSrc[2 * n - 2 * i] * pBTable[2 * i] + + pSrc[2 * n - 2 * i + 1] * pBTable[2 * i + 1]); + */ + + /* outI = (pIn[2 * i + 1] * pATable[2 * i] + pIn[2 * i] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i + 1] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); */ + + CoefA1 = *pCoefA++; + CoefA2 = *pCoefA; + + /* outR = (pSrc[2 * i] * pATable[2 * i] */ + mult_32x32_keep32_R(outR, *pIn1, CoefA1); + + /* outI = pIn[2 * i] * pATable[2 * i + 1] */ + mult_32x32_keep32_R(outI, *pIn1++, CoefA2); + + /* - pSrc[2 * i + 1] * pATable[2 * i + 1] */ + multSub_32x32_keep32_R(outR, *pIn1, CoefA2); + + /* (pIn[2 * i + 1] * pATable[2 * i] */ + multAcc_32x32_keep32_R(outI, *pIn1++, CoefA1); + + /* pSrc[2 * n - 2 * i] * pBTable[2 * i] */ + multSub_32x32_keep32_R(outR, *pIn2, CoefA2); + CoefB1 = *pCoefB; + + /* pIn[2 * n - 2 * i] * pBTable[2 * i + 1] */ + multSub_32x32_keep32_R(outI, *pIn2--, CoefB1); + + /* pSrc[2 * n - 2 * i + 1] * pBTable[2 * i + 1] */ + multAcc_32x32_keep32_R(outR, *pIn2, CoefB1); + + /* pIn[2 * n - 2 * i + 1] * pBTable[2 * i] */ + multSub_32x32_keep32_R(outI, *pIn2--, CoefA2); + + /* write output */ + *pOut1++ = outR; + *pOut1++ = outI; + + /* write complex conjugate output */ + *pOut2-- = -outI; + *pOut2-- = outR; + + /* update coefficient pointer */ + pCoefB = pCoefB + (modifier * 2u); + pCoefA = pCoefA + ((modifier * 2u) - 1u); + + i--; + } + pDst[2u * fftLen] = (pSrc[0] - pSrc[1]) >> 1; + pDst[(2u * fftLen) + 1u] = 0; + + pDst[0] = (pSrc[0] + pSrc[1]) >> 1; + pDst[1] = 0; +} + +/** +* @brief Core Real IFFT process +* @param[in] *pSrc points to the input buffer. +* @param[in] fftLen length of FFT. +* @param[in] *pATable points to the twiddle Coef A buffer. +* @param[in] *pBTable points to the twiddle Coef B buffer. +* @param[out] *pDst points to the output buffer. +* @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. +* @return none. +*/ +void arm_split_rifft_q31( + q31_t * pSrc, + uint32_t fftLen, + q31_t * pATable, + q31_t * pBTable, + q31_t * pDst, + uint32_t modifier) +{ + q31_t outR, outI; /* Temporary variables for output */ + q31_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ + q31_t CoefA1, CoefA2, CoefB1; /* Temporary variables for twiddle coefficients */ + q31_t *pIn1 = &pSrc[0], *pIn2 = &pSrc[(2u * fftLen) + 1u]; + + pCoefA = &pATable[0]; + pCoefB = &pBTable[0]; + + while(fftLen > 0u) + { + /* + outR = (pIn[2 * i] * pATable[2 * i] + pIn[2 * i + 1] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1]); + + outI = (pIn[2 * i + 1] * pATable[2 * i] - pIn[2 * i] * pATable[2 * i + 1] - + pIn[2 * n - 2 * i] * pBTable[2 * i + 1] - + pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); + */ + CoefA1 = *pCoefA++; + CoefA2 = *pCoefA; + + /* outR = (pIn[2 * i] * pATable[2 * i] */ + mult_32x32_keep32_R(outR, *pIn1, CoefA1); + + /* - pIn[2 * i] * pATable[2 * i + 1] */ + mult_32x32_keep32_R(outI, *pIn1++, -CoefA2); + + /* pIn[2 * i + 1] * pATable[2 * i + 1] */ + multAcc_32x32_keep32_R(outR, *pIn1, CoefA2); + + /* pIn[2 * i + 1] * pATable[2 * i] */ + multAcc_32x32_keep32_R(outI, *pIn1++, CoefA1); + + /* pIn[2 * n - 2 * i] * pBTable[2 * i] */ + multAcc_32x32_keep32_R(outR, *pIn2, CoefA2); + CoefB1 = *pCoefB; + + /* pIn[2 * n - 2 * i] * pBTable[2 * i + 1] */ + multSub_32x32_keep32_R(outI, *pIn2--, CoefB1); + + /* pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1] */ + multAcc_32x32_keep32_R(outR, *pIn2, CoefB1); + + /* pIn[2 * n - 2 * i + 1] * pBTable[2 * i] */ + multAcc_32x32_keep32_R(outI, *pIn2--, CoefA2); + + /* write output */ + *pDst++ = outR; + *pDst++ = outI; + + /* update coefficient pointer */ + pCoefB = pCoefB + (modifier * 2u); + pCoefA = pCoefA + ((modifier * 2u) - 1u); + + /* Decrement loop count */ + fftLen--; + } +} diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,11073 @@ +/** + ****************************************************************************** + * @file stm32f103xb.h + * @author MCD Application Team + * @version V4.1.0 + * @date 29-April-2016 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer Header File. + * This file contains all the peripheral register's definitions, bits + * definitions and memory mapping for STM32F1xx devices. + * + * This file contains: + * - Data structures and the address mapping for all peripherals + * - Peripheral's registers declarations and bits definition + * - Macros to access peripheral’s registers hardware + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f103xb + * @{ + */ + +#ifndef __STM32F103xB_H +#define __STM32F103xB_H + +#ifdef __cplusplus + extern "C" { +#endif + +/** @addtogroup Configuration_section_for_CMSIS + * @{ + */ +/** + * @brief Configuration of the Cortex-M3 Processor and Core Peripherals + */ + #define __MPU_PRESENT 0 /*!< Other STM32 devices does not provide an MPU */ +#define __CM3_REV 0x0200 /*!< Core Revision r2p0 */ +#define __NVIC_PRIO_BITS 4 /*!< STM32 uses 4 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ + +/** + * @} + */ + +/** @addtogroup Peripheral_interrupt_number_definition + * @{ + */ + +/** + * @brief STM32F10x Interrupt Number Definition, according to the selected device + * in @ref Library_configuration_section + */ + + /*!< Interrupt Number Definition */ +typedef enum +{ +/****** Cortex-M3 Processor Exceptions Numbers ***************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + HardFault_IRQn = -13, /*!< 3 Cortex-M3 Hard Fault Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */ + +/****** STM32 specific Interrupt Numbers *********************************************************/ + WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ + PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ + TAMPER_IRQn = 2, /*!< Tamper Interrupt */ + RTC_IRQn = 3, /*!< RTC global Interrupt */ + FLASH_IRQn = 4, /*!< FLASH global Interrupt */ + RCC_IRQn = 5, /*!< RCC global Interrupt */ + EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ + EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ + EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ + EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ + EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ + DMA1_Channel1_IRQn = 11, /*!< DMA1 Channel 1 global Interrupt */ + DMA1_Channel2_IRQn = 12, /*!< DMA1 Channel 2 global Interrupt */ + DMA1_Channel3_IRQn = 13, /*!< DMA1 Channel 3 global Interrupt */ + DMA1_Channel4_IRQn = 14, /*!< DMA1 Channel 4 global Interrupt */ + DMA1_Channel5_IRQn = 15, /*!< DMA1 Channel 5 global Interrupt */ + DMA1_Channel6_IRQn = 16, /*!< DMA1 Channel 6 global Interrupt */ + DMA1_Channel7_IRQn = 17, /*!< DMA1 Channel 7 global Interrupt */ + ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ + USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ + USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ + CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ + CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_IRQn = 24, /*!< TIM1 Break Interrupt */ + TIM1_UP_IRQn = 25, /*!< TIM1 Update Interrupt */ + TIM1_TRG_COM_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTC_Alarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ + USBWakeUp_IRQn = 42, /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ +} IRQn_Type; + + +/** + * @} + */ + +#include "core_cm3.h" +#include "system_stm32f1xx.h" +#include + +/** @addtogroup Peripheral_registers_structures + * @{ + */ + +/** + * @brief Analog to Digital Converter + */ + +typedef struct +{ + __IO uint32_t SR; + __IO uint32_t CR1; + __IO uint32_t CR2; + __IO uint32_t SMPR1; + __IO uint32_t SMPR2; + __IO uint32_t JOFR1; + __IO uint32_t JOFR2; + __IO uint32_t JOFR3; + __IO uint32_t JOFR4; + __IO uint32_t HTR; + __IO uint32_t LTR; + __IO uint32_t SQR1; + __IO uint32_t SQR2; + __IO uint32_t SQR3; + __IO uint32_t JSQR; + __IO uint32_t JDR1; + __IO uint32_t JDR2; + __IO uint32_t JDR3; + __IO uint32_t JDR4; + __IO uint32_t DR; +} ADC_TypeDef; + +typedef struct +{ + __IO uint32_t SR; /*!< ADC status register, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address */ + __IO uint32_t CR1; /*!< ADC control register 1, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x04 */ + __IO uint32_t CR2; /*!< ADC control register 2, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x08 */ + uint32_t RESERVED[16]; + __IO uint32_t DR; /*!< ADC data register, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x4C */ +} ADC_Common_TypeDef; + +/** + * @brief Backup Registers + */ + +typedef struct +{ + uint32_t RESERVED0; + __IO uint32_t DR1; + __IO uint32_t DR2; + __IO uint32_t DR3; + __IO uint32_t DR4; + __IO uint32_t DR5; + __IO uint32_t DR6; + __IO uint32_t DR7; + __IO uint32_t DR8; + __IO uint32_t DR9; + __IO uint32_t DR10; + __IO uint32_t RTCCR; + __IO uint32_t CR; + __IO uint32_t CSR; +} BKP_TypeDef; + +/** + * @brief Controller Area Network TxMailBox + */ + +typedef struct +{ + __IO uint32_t TIR; + __IO uint32_t TDTR; + __IO uint32_t TDLR; + __IO uint32_t TDHR; +} CAN_TxMailBox_TypeDef; + +/** + * @brief Controller Area Network FIFOMailBox + */ + +typedef struct +{ + __IO uint32_t RIR; + __IO uint32_t RDTR; + __IO uint32_t RDLR; + __IO uint32_t RDHR; +} CAN_FIFOMailBox_TypeDef; + +/** + * @brief Controller Area Network FilterRegister + */ + +typedef struct +{ + __IO uint32_t FR1; + __IO uint32_t FR2; +} CAN_FilterRegister_TypeDef; + +/** + * @brief Controller Area Network + */ + +typedef struct +{ + __IO uint32_t MCR; + __IO uint32_t MSR; + __IO uint32_t TSR; + __IO uint32_t RF0R; + __IO uint32_t RF1R; + __IO uint32_t IER; + __IO uint32_t ESR; + __IO uint32_t BTR; + uint32_t RESERVED0[88]; + CAN_TxMailBox_TypeDef sTxMailBox[3]; + CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; + uint32_t RESERVED1[12]; + __IO uint32_t FMR; + __IO uint32_t FM1R; + uint32_t RESERVED2; + __IO uint32_t FS1R; + uint32_t RESERVED3; + __IO uint32_t FFA1R; + uint32_t RESERVED4; + __IO uint32_t FA1R; + uint32_t RESERVED5[8]; + CAN_FilterRegister_TypeDef sFilterRegister[14]; +} CAN_TypeDef; + +/** + * @brief CRC calculation unit + */ + +typedef struct +{ + __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ + __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ + uint8_t RESERVED0; /*!< Reserved, Address offset: 0x05 */ + uint16_t RESERVED1; /*!< Reserved, Address offset: 0x06 */ + __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ +} CRC_TypeDef; + + +/** + * @brief Debug MCU + */ + +typedef struct +{ + __IO uint32_t IDCODE; + __IO uint32_t CR; +}DBGMCU_TypeDef; + +/** + * @brief DMA Controller + */ + +typedef struct +{ + __IO uint32_t CCR; + __IO uint32_t CNDTR; + __IO uint32_t CPAR; + __IO uint32_t CMAR; +} DMA_Channel_TypeDef; + +typedef struct +{ + __IO uint32_t ISR; + __IO uint32_t IFCR; +} DMA_TypeDef; + + + +/** + * @brief External Interrupt/Event Controller + */ + +typedef struct +{ + __IO uint32_t IMR; + __IO uint32_t EMR; + __IO uint32_t RTSR; + __IO uint32_t FTSR; + __IO uint32_t SWIER; + __IO uint32_t PR; +} EXTI_TypeDef; + +/** + * @brief FLASH Registers + */ + +typedef struct +{ + __IO uint32_t ACR; + __IO uint32_t KEYR; + __IO uint32_t OPTKEYR; + __IO uint32_t SR; + __IO uint32_t CR; + __IO uint32_t AR; + __IO uint32_t RESERVED; + __IO uint32_t OBR; + __IO uint32_t WRPR; +} FLASH_TypeDef; + +/** + * @brief Option Bytes Registers + */ + +typedef struct +{ + __IO uint16_t RDP; + __IO uint16_t USER; + __IO uint16_t Data0; + __IO uint16_t Data1; + __IO uint16_t WRP0; + __IO uint16_t WRP1; + __IO uint16_t WRP2; + __IO uint16_t WRP3; +} OB_TypeDef; + +/** + * @brief General Purpose I/O + */ + +typedef struct +{ + __IO uint32_t CRL; + __IO uint32_t CRH; + __IO uint32_t IDR; + __IO uint32_t ODR; + __IO uint32_t BSRR; + __IO uint32_t BRR; + __IO uint32_t LCKR; +} GPIO_TypeDef; + +/** + * @brief Alternate Function I/O + */ + +typedef struct +{ + __IO uint32_t EVCR; + __IO uint32_t MAPR; + __IO uint32_t EXTICR[4]; + uint32_t RESERVED0; + __IO uint32_t MAPR2; +} AFIO_TypeDef; +/** + * @brief Inter Integrated Circuit Interface + */ + +typedef struct +{ + __IO uint32_t CR1; + __IO uint32_t CR2; + __IO uint32_t OAR1; + __IO uint32_t OAR2; + __IO uint32_t DR; + __IO uint32_t SR1; + __IO uint32_t SR2; + __IO uint32_t CCR; + __IO uint32_t TRISE; +} I2C_TypeDef; + +/** + * @brief Independent WATCHDOG + */ + +typedef struct +{ + __IO uint32_t KR; /*!< Key register, Address offset: 0x00 */ + __IO uint32_t PR; /*!< Prescaler register, Address offset: 0x04 */ + __IO uint32_t RLR; /*!< Reload register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< Status register, Address offset: 0x0C */ +} IWDG_TypeDef; + +/** + * @brief Power Control + */ + +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t CSR; +} PWR_TypeDef; + +/** + * @brief Reset and Clock Control + */ + +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t CFGR; + __IO uint32_t CIR; + __IO uint32_t APB2RSTR; + __IO uint32_t APB1RSTR; + __IO uint32_t AHBENR; + __IO uint32_t APB2ENR; + __IO uint32_t APB1ENR; + __IO uint32_t BDCR; + __IO uint32_t CSR; + + +} RCC_TypeDef; + +/** + * @brief Real-Time Clock + */ + +typedef struct +{ + __IO uint32_t CRH; + __IO uint32_t CRL; + __IO uint32_t PRLH; + __IO uint32_t PRLL; + __IO uint32_t DIVH; + __IO uint32_t DIVL; + __IO uint32_t CNTH; + __IO uint32_t CNTL; + __IO uint32_t ALRH; + __IO uint32_t ALRL; +} RTC_TypeDef; + +/** + * @brief SD host Interface + */ + +typedef struct +{ + __IO uint32_t POWER; + __IO uint32_t CLKCR; + __IO uint32_t ARG; + __IO uint32_t CMD; + __I uint32_t RESPCMD; + __I uint32_t RESP1; + __I uint32_t RESP2; + __I uint32_t RESP3; + __I uint32_t RESP4; + __IO uint32_t DTIMER; + __IO uint32_t DLEN; + __IO uint32_t DCTRL; + __I uint32_t DCOUNT; + __I uint32_t STA; + __IO uint32_t ICR; + __IO uint32_t MASK; + uint32_t RESERVED0[2]; + __I uint32_t FIFOCNT; + uint32_t RESERVED1[13]; + __IO uint32_t FIFO; +} SDIO_TypeDef; + +/** + * @brief Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint32_t CR1; + __IO uint32_t CR2; + __IO uint32_t SR; + __IO uint32_t DR; + __IO uint32_t CRCPR; + __IO uint32_t RXCRCR; + __IO uint32_t TXCRCR; + __IO uint32_t I2SCFGR; +} SPI_TypeDef; + +/** + * @brief TIM Timers + */ +typedef struct +{ + __IO uint32_t CR1; /*!< TIM control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< TIM control register 2, Address offset: 0x04 */ + __IO uint32_t SMCR; /*!< TIM slave Mode Control register, Address offset: 0x08 */ + __IO uint32_t DIER; /*!< TIM DMA/interrupt enable register, Address offset: 0x0C */ + __IO uint32_t SR; /*!< TIM status register, Address offset: 0x10 */ + __IO uint32_t EGR; /*!< TIM event generation register, Address offset: 0x14 */ + __IO uint32_t CCMR1; /*!< TIM capture/compare mode register 1, Address offset: 0x18 */ + __IO uint32_t CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */ + __IO uint32_t CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */ + __IO uint32_t CNT; /*!< TIM counter register, Address offset: 0x24 */ + __IO uint32_t PSC; /*!< TIM prescaler register, Address offset: 0x28 */ + __IO uint32_t ARR; /*!< TIM auto-reload register, Address offset: 0x2C */ + __IO uint32_t RCR; /*!< TIM repetition counter register, Address offset: 0x30 */ + __IO uint32_t CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */ + __IO uint32_t CCR2; /*!< TIM capture/compare register 2, Address offset: 0x38 */ + __IO uint32_t CCR3; /*!< TIM capture/compare register 3, Address offset: 0x3C */ + __IO uint32_t CCR4; /*!< TIM capture/compare register 4, Address offset: 0x40 */ + __IO uint32_t BDTR; /*!< TIM break and dead-time register, Address offset: 0x44 */ + __IO uint32_t DCR; /*!< TIM DMA control register, Address offset: 0x48 */ + __IO uint32_t DMAR; /*!< TIM DMA address for full transfer register, Address offset: 0x4C */ + __IO uint32_t OR; /*!< TIM option register, Address offset: 0x50 */ +}TIM_TypeDef; + + +/** + * @brief Universal Synchronous Asynchronous Receiver Transmitter + */ + +typedef struct +{ + __IO uint32_t SR; /*!< USART Status register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< USART Data register, Address offset: 0x04 */ + __IO uint32_t BRR; /*!< USART Baud rate register, Address offset: 0x08 */ + __IO uint32_t CR1; /*!< USART Control register 1, Address offset: 0x0C */ + __IO uint32_t CR2; /*!< USART Control register 2, Address offset: 0x10 */ + __IO uint32_t CR3; /*!< USART Control register 3, Address offset: 0x14 */ + __IO uint32_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */ +} USART_TypeDef; + +/** + * @brief Universal Serial Bus Full Speed Device + */ + +typedef struct +{ + __IO uint16_t EP0R; /*!< USB Endpoint 0 register, Address offset: 0x00 */ + __IO uint16_t RESERVED0; /*!< Reserved */ + __IO uint16_t EP1R; /*!< USB Endpoint 1 register, Address offset: 0x04 */ + __IO uint16_t RESERVED1; /*!< Reserved */ + __IO uint16_t EP2R; /*!< USB Endpoint 2 register, Address offset: 0x08 */ + __IO uint16_t RESERVED2; /*!< Reserved */ + __IO uint16_t EP3R; /*!< USB Endpoint 3 register, Address offset: 0x0C */ + __IO uint16_t RESERVED3; /*!< Reserved */ + __IO uint16_t EP4R; /*!< USB Endpoint 4 register, Address offset: 0x10 */ + __IO uint16_t RESERVED4; /*!< Reserved */ + __IO uint16_t EP5R; /*!< USB Endpoint 5 register, Address offset: 0x14 */ + __IO uint16_t RESERVED5; /*!< Reserved */ + __IO uint16_t EP6R; /*!< USB Endpoint 6 register, Address offset: 0x18 */ + __IO uint16_t RESERVED6; /*!< Reserved */ + __IO uint16_t EP7R; /*!< USB Endpoint 7 register, Address offset: 0x1C */ + __IO uint16_t RESERVED7[17]; /*!< Reserved */ + __IO uint16_t CNTR; /*!< Control register, Address offset: 0x40 */ + __IO uint16_t RESERVED8; /*!< Reserved */ + __IO uint16_t ISTR; /*!< Interrupt status register, Address offset: 0x44 */ + __IO uint16_t RESERVED9; /*!< Reserved */ + __IO uint16_t FNR; /*!< Frame number register, Address offset: 0x48 */ + __IO uint16_t RESERVEDA; /*!< Reserved */ + __IO uint16_t DADDR; /*!< Device address register, Address offset: 0x4C */ + __IO uint16_t RESERVEDB; /*!< Reserved */ + __IO uint16_t BTABLE; /*!< Buffer Table address register, Address offset: 0x50 */ + __IO uint16_t RESERVEDC; /*!< Reserved */ +} USB_TypeDef; + + +/** + * @brief Window WATCHDOG + */ + +typedef struct +{ + __IO uint32_t CR; /*!< WWDG Control register, Address offset: 0x00 */ + __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< WWDG Status register, Address offset: 0x08 */ +} WWDG_TypeDef; + +/** + * @} + */ + +/** @addtogroup Peripheral_memory_map + * @{ + */ + + +#define FLASH_BASE ((uint32_t)0x08000000) /*!< FLASH base address in the alias region */ +#define FLASH_BANK1_END ((uint32_t)0x0801FFFF) /*!< FLASH END address of bank1 */ +#define SRAM_BASE ((uint32_t)0x20000000) /*!< SRAM base address in the alias region */ +#define PERIPH_BASE ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */ + +#define SRAM_BB_BASE ((uint32_t)0x22000000) /*!< SRAM base address in the bit-band region */ +#define PERIPH_BB_BASE ((uint32_t)0x42000000) /*!< Peripheral base address in the bit-band region */ + + +/*!< Peripheral memory map */ +#define APB1PERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) +#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) + +#define TIM2_BASE (APB1PERIPH_BASE + 0x0000) +#define TIM3_BASE (APB1PERIPH_BASE + 0x0400) +#define TIM4_BASE (APB1PERIPH_BASE + 0x0800) +#define RTC_BASE (APB1PERIPH_BASE + 0x2800) +#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00) +#define IWDG_BASE (APB1PERIPH_BASE + 0x3000) +#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) +#define USART2_BASE (APB1PERIPH_BASE + 0x4400) +#define USART3_BASE (APB1PERIPH_BASE + 0x4800) +#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) +#define I2C2_BASE (APB1PERIPH_BASE + 0x5800) +#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) +#define BKP_BASE (APB1PERIPH_BASE + 0x6C00) +#define PWR_BASE (APB1PERIPH_BASE + 0x7000) +#define AFIO_BASE (APB2PERIPH_BASE + 0x0000) +#define EXTI_BASE (APB2PERIPH_BASE + 0x0400) +#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) +#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) +#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) +#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) +#define GPIOE_BASE (APB2PERIPH_BASE + 0x1800) +#define ADC1_BASE (APB2PERIPH_BASE + 0x2400) +#define ADC2_BASE (APB2PERIPH_BASE + 0x2800) +#define TIM1_BASE (APB2PERIPH_BASE + 0x2C00) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) +#define USART1_BASE (APB2PERIPH_BASE + 0x3800) + +#define SDIO_BASE (PERIPH_BASE + 0x18000) + +#define DMA1_BASE (AHBPERIPH_BASE + 0x0000) +#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x0008) +#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x001C) +#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x0030) +#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x0044) +#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x0058) +#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x006C) +#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x0080) +#define RCC_BASE (AHBPERIPH_BASE + 0x1000) +#define CRC_BASE (AHBPERIPH_BASE + 0x3000) + +#define FLASH_R_BASE (AHBPERIPH_BASE + 0x2000) /*!< Flash registers base address */ +#define FLASHSIZE_BASE ((uint32_t)0x1FFFF7E0) /*!< FLASH Size register base address */ +#define UID_BASE ((uint32_t)0x1FFFF7E8) /*!< Unique device ID register base address */ +#define OB_BASE ((uint32_t)0x1FFFF800) /*!< Flash Option Bytes base address */ + + + +#define DBGMCU_BASE ((uint32_t)0xE0042000) /*!< Debug MCU registers base address */ + +/* USB device FS */ +#define USB_BASE (APB1PERIPH_BASE + 0x00005C00) /*!< USB_IP Peripheral Registers base address */ +#define USB_PMAADDR (APB1PERIPH_BASE + 0x00006000) /*!< USB_IP Packet Memory Area base address */ + + +/** + * @} + */ + +/** @addtogroup Peripheral_declaration + * @{ + */ + +#define TIM2 ((TIM_TypeDef *) TIM2_BASE) +#define TIM3 ((TIM_TypeDef *) TIM3_BASE) +#define TIM4 ((TIM_TypeDef *) TIM4_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) +#define WWDG ((WWDG_TypeDef *) WWDG_BASE) +#define IWDG ((IWDG_TypeDef *) IWDG_BASE) +#define SPI2 ((SPI_TypeDef *) SPI2_BASE) +#define USART2 ((USART_TypeDef *) USART2_BASE) +#define USART3 ((USART_TypeDef *) USART3_BASE) +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) +#define I2C2 ((I2C_TypeDef *) I2C2_BASE) +#define USB ((USB_TypeDef *) USB_BASE) +#define CAN1 ((CAN_TypeDef *) CAN1_BASE) +#define BKP ((BKP_TypeDef *) BKP_BASE) +#define PWR ((PWR_TypeDef *) PWR_BASE) +#define AFIO ((AFIO_TypeDef *) AFIO_BASE) +#define EXTI ((EXTI_TypeDef *) EXTI_BASE) +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) +#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define ADC2 ((ADC_TypeDef *) ADC2_BASE) +#define ADC12_COMMON ((ADC_Common_TypeDef *) ADC1_BASE) +#define TIM1 ((TIM_TypeDef *) TIM1_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define USART1 ((USART_TypeDef *) USART1_BASE) +#define SDIO ((SDIO_TypeDef *) SDIO_BASE) +#define DMA1 ((DMA_TypeDef *) DMA1_BASE) +#define DMA1_Channel1 ((DMA_Channel_TypeDef *) DMA1_Channel1_BASE) +#define DMA1_Channel2 ((DMA_Channel_TypeDef *) DMA1_Channel2_BASE) +#define DMA1_Channel3 ((DMA_Channel_TypeDef *) DMA1_Channel3_BASE) +#define DMA1_Channel4 ((DMA_Channel_TypeDef *) DMA1_Channel4_BASE) +#define DMA1_Channel5 ((DMA_Channel_TypeDef *) DMA1_Channel5_BASE) +#define DMA1_Channel6 ((DMA_Channel_TypeDef *) DMA1_Channel6_BASE) +#define DMA1_Channel7 ((DMA_Channel_TypeDef *) DMA1_Channel7_BASE) +#define RCC ((RCC_TypeDef *) RCC_BASE) +#define CRC ((CRC_TypeDef *) CRC_BASE) +#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) +#define OB ((OB_TypeDef *) OB_BASE) +#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) + + +/** + * @} + */ + +/** @addtogroup Exported_constants + * @{ + */ + + /** @addtogroup Peripheral_Registers_Bits_Definition + * @{ + */ + +/******************************************************************************/ +/* Peripheral Registers_Bits_Definition */ +/******************************************************************************/ + +/******************************************************************************/ +/* */ +/* CRC calculation unit (CRC) */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for CRC_DR register *********************/ +#define CRC_DR_DR_Pos (0U) +#define CRC_DR_DR_Msk (0xFFFFFFFFU << CRC_DR_DR_Pos) /*!< 0xFFFFFFFF */ +#define CRC_DR_DR CRC_DR_DR_Msk /*!< Data register bits */ + +/******************* Bit definition for CRC_IDR register ********************/ +#define CRC_IDR_IDR_Pos (0U) +#define CRC_IDR_IDR_Msk (0xFFU << CRC_IDR_IDR_Pos) /*!< 0x000000FF */ +#define CRC_IDR_IDR CRC_IDR_IDR_Msk /*!< General-purpose 8-bit data register bits */ + +/******************** Bit definition for CRC_CR register ********************/ +#define CRC_CR_RESET_Pos (0U) +#define CRC_CR_RESET_Msk (0x1U << CRC_CR_RESET_Pos) /*!< 0x00000001 */ +#define CRC_CR_RESET CRC_CR_RESET_Msk /*!< RESET bit */ + +/******************************************************************************/ +/* */ +/* Power Control */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for PWR_CR register ********************/ +#define PWR_CR_LPDS_Pos (0U) +#define PWR_CR_LPDS_Msk (0x1U << PWR_CR_LPDS_Pos) /*!< 0x00000001 */ +#define PWR_CR_LPDS PWR_CR_LPDS_Msk /*!< Low-Power Deepsleep */ +#define PWR_CR_PDDS_Pos (1U) +#define PWR_CR_PDDS_Msk (0x1U << PWR_CR_PDDS_Pos) /*!< 0x00000002 */ +#define PWR_CR_PDDS PWR_CR_PDDS_Msk /*!< Power Down Deepsleep */ +#define PWR_CR_CWUF_Pos (2U) +#define PWR_CR_CWUF_Msk (0x1U << PWR_CR_CWUF_Pos) /*!< 0x00000004 */ +#define PWR_CR_CWUF PWR_CR_CWUF_Msk /*!< Clear Wakeup Flag */ +#define PWR_CR_CSBF_Pos (3U) +#define PWR_CR_CSBF_Msk (0x1U << PWR_CR_CSBF_Pos) /*!< 0x00000008 */ +#define PWR_CR_CSBF PWR_CR_CSBF_Msk /*!< Clear Standby Flag */ +#define PWR_CR_PVDE_Pos (4U) +#define PWR_CR_PVDE_Msk (0x1U << PWR_CR_PVDE_Pos) /*!< 0x00000010 */ +#define PWR_CR_PVDE PWR_CR_PVDE_Msk /*!< Power Voltage Detector Enable */ + +#define PWR_CR_PLS_Pos (5U) +#define PWR_CR_PLS_Msk (0x7U << PWR_CR_PLS_Pos) /*!< 0x000000E0 */ +#define PWR_CR_PLS PWR_CR_PLS_Msk /*!< PLS[2:0] bits (PVD Level Selection) */ +#define PWR_CR_PLS_0 (0x1U << PWR_CR_PLS_Pos) /*!< 0x00000020 */ +#define PWR_CR_PLS_1 (0x2U << PWR_CR_PLS_Pos) /*!< 0x00000040 */ +#define PWR_CR_PLS_2 (0x4U << PWR_CR_PLS_Pos) /*!< 0x00000080 */ + +/*!< PVD level configuration */ +#define PWR_CR_PLS_2V2 ((uint32_t)0x00000000) /*!< PVD level 2.2V */ +#define PWR_CR_PLS_2V3 ((uint32_t)0x00000020) /*!< PVD level 2.3V */ +#define PWR_CR_PLS_2V4 ((uint32_t)0x00000040) /*!< PVD level 2.4V */ +#define PWR_CR_PLS_2V5 ((uint32_t)0x00000060) /*!< PVD level 2.5V */ +#define PWR_CR_PLS_2V6 ((uint32_t)0x00000080) /*!< PVD level 2.6V */ +#define PWR_CR_PLS_2V7 ((uint32_t)0x000000A0) /*!< PVD level 2.7V */ +#define PWR_CR_PLS_2V8 ((uint32_t)0x000000C0) /*!< PVD level 2.8V */ +#define PWR_CR_PLS_2V9 ((uint32_t)0x000000E0) /*!< PVD level 2.9V */ + +#define PWR_CR_DBP_Pos (8U) +#define PWR_CR_DBP_Msk (0x1U << PWR_CR_DBP_Pos) /*!< 0x00000100 */ +#define PWR_CR_DBP PWR_CR_DBP_Msk /*!< Disable Backup Domain write protection */ + + +/******************* Bit definition for PWR_CSR register ********************/ +#define PWR_CSR_WUF_Pos (0U) +#define PWR_CSR_WUF_Msk (0x1U << PWR_CSR_WUF_Pos) /*!< 0x00000001 */ +#define PWR_CSR_WUF PWR_CSR_WUF_Msk /*!< Wakeup Flag */ +#define PWR_CSR_SBF_Pos (1U) +#define PWR_CSR_SBF_Msk (0x1U << PWR_CSR_SBF_Pos) /*!< 0x00000002 */ +#define PWR_CSR_SBF PWR_CSR_SBF_Msk /*!< Standby Flag */ +#define PWR_CSR_PVDO_Pos (2U) +#define PWR_CSR_PVDO_Msk (0x1U << PWR_CSR_PVDO_Pos) /*!< 0x00000004 */ +#define PWR_CSR_PVDO PWR_CSR_PVDO_Msk /*!< PVD Output */ +#define PWR_CSR_EWUP_Pos (8U) +#define PWR_CSR_EWUP_Msk (0x1U << PWR_CSR_EWUP_Pos) /*!< 0x00000100 */ +#define PWR_CSR_EWUP PWR_CSR_EWUP_Msk /*!< Enable WKUP pin */ + +/******************************************************************************/ +/* */ +/* Backup registers */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for BKP_DR1 register ********************/ +#define BKP_DR1_D_Pos (0U) +#define BKP_DR1_D_Msk (0xFFFFU << BKP_DR1_D_Pos) /*!< 0x0000FFFF */ +#define BKP_DR1_D BKP_DR1_D_Msk /*!< Backup data */ + +/******************* Bit definition for BKP_DR2 register ********************/ +#define BKP_DR2_D_Pos (0U) +#define BKP_DR2_D_Msk (0xFFFFU << BKP_DR2_D_Pos) /*!< 0x0000FFFF */ +#define BKP_DR2_D BKP_DR2_D_Msk /*!< Backup data */ + +/******************* Bit definition for BKP_DR3 register ********************/ +#define BKP_DR3_D_Pos (0U) +#define BKP_DR3_D_Msk (0xFFFFU << BKP_DR3_D_Pos) /*!< 0x0000FFFF */ +#define BKP_DR3_D BKP_DR3_D_Msk /*!< Backup data */ + +/******************* Bit definition for BKP_DR4 register ********************/ +#define BKP_DR4_D_Pos (0U) +#define BKP_DR4_D_Msk (0xFFFFU << BKP_DR4_D_Pos) /*!< 0x0000FFFF */ +#define BKP_DR4_D BKP_DR4_D_Msk /*!< Backup data */ + +/******************* Bit definition for BKP_DR5 register ********************/ +#define BKP_DR5_D_Pos (0U) +#define BKP_DR5_D_Msk (0xFFFFU << BKP_DR5_D_Pos) /*!< 0x0000FFFF */ +#define BKP_DR5_D BKP_DR5_D_Msk /*!< Backup data */ + +/******************* Bit definition for BKP_DR6 register ********************/ +#define BKP_DR6_D_Pos (0U) +#define BKP_DR6_D_Msk (0xFFFFU << BKP_DR6_D_Pos) /*!< 0x0000FFFF */ +#define BKP_DR6_D BKP_DR6_D_Msk /*!< Backup data */ + +/******************* Bit definition for BKP_DR7 register ********************/ +#define BKP_DR7_D_Pos (0U) +#define BKP_DR7_D_Msk (0xFFFFU << BKP_DR7_D_Pos) /*!< 0x0000FFFF */ +#define BKP_DR7_D BKP_DR7_D_Msk /*!< Backup data */ + +/******************* Bit definition for BKP_DR8 register ********************/ +#define BKP_DR8_D_Pos (0U) +#define BKP_DR8_D_Msk (0xFFFFU << BKP_DR8_D_Pos) /*!< 0x0000FFFF */ +#define BKP_DR8_D BKP_DR8_D_Msk /*!< Backup data */ + +/******************* Bit definition for BKP_DR9 register ********************/ +#define BKP_DR9_D_Pos (0U) +#define BKP_DR9_D_Msk (0xFFFFU << BKP_DR9_D_Pos) /*!< 0x0000FFFF */ +#define BKP_DR9_D BKP_DR9_D_Msk /*!< Backup data */ + +/******************* Bit definition for BKP_DR10 register *******************/ +#define BKP_DR10_D_Pos (0U) +#define BKP_DR10_D_Msk (0xFFFFU << BKP_DR10_D_Pos) /*!< 0x0000FFFF */ +#define BKP_DR10_D BKP_DR10_D_Msk /*!< Backup data */ + +#define RTC_BKP_NUMBER 10 + +/****************** Bit definition for BKP_RTCCR register *******************/ +#define BKP_RTCCR_CAL_Pos (0U) +#define BKP_RTCCR_CAL_Msk (0x7FU << BKP_RTCCR_CAL_Pos) /*!< 0x0000007F */ +#define BKP_RTCCR_CAL BKP_RTCCR_CAL_Msk /*!< Calibration value */ +#define BKP_RTCCR_CCO_Pos (7U) +#define BKP_RTCCR_CCO_Msk (0x1U << BKP_RTCCR_CCO_Pos) /*!< 0x00000080 */ +#define BKP_RTCCR_CCO BKP_RTCCR_CCO_Msk /*!< Calibration Clock Output */ +#define BKP_RTCCR_ASOE_Pos (8U) +#define BKP_RTCCR_ASOE_Msk (0x1U << BKP_RTCCR_ASOE_Pos) /*!< 0x00000100 */ +#define BKP_RTCCR_ASOE BKP_RTCCR_ASOE_Msk /*!< Alarm or Second Output Enable */ +#define BKP_RTCCR_ASOS_Pos (9U) +#define BKP_RTCCR_ASOS_Msk (0x1U << BKP_RTCCR_ASOS_Pos) /*!< 0x00000200 */ +#define BKP_RTCCR_ASOS BKP_RTCCR_ASOS_Msk /*!< Alarm or Second Output Selection */ + +/******************** Bit definition for BKP_CR register ********************/ +#define BKP_CR_TPE_Pos (0U) +#define BKP_CR_TPE_Msk (0x1U << BKP_CR_TPE_Pos) /*!< 0x00000001 */ +#define BKP_CR_TPE BKP_CR_TPE_Msk /*!< TAMPER pin enable */ +#define BKP_CR_TPAL_Pos (1U) +#define BKP_CR_TPAL_Msk (0x1U << BKP_CR_TPAL_Pos) /*!< 0x00000002 */ +#define BKP_CR_TPAL BKP_CR_TPAL_Msk /*!< TAMPER pin active level */ + +/******************* Bit definition for BKP_CSR register ********************/ +#define BKP_CSR_CTE_Pos (0U) +#define BKP_CSR_CTE_Msk (0x1U << BKP_CSR_CTE_Pos) /*!< 0x00000001 */ +#define BKP_CSR_CTE BKP_CSR_CTE_Msk /*!< Clear Tamper event */ +#define BKP_CSR_CTI_Pos (1U) +#define BKP_CSR_CTI_Msk (0x1U << BKP_CSR_CTI_Pos) /*!< 0x00000002 */ +#define BKP_CSR_CTI BKP_CSR_CTI_Msk /*!< Clear Tamper Interrupt */ +#define BKP_CSR_TPIE_Pos (2U) +#define BKP_CSR_TPIE_Msk (0x1U << BKP_CSR_TPIE_Pos) /*!< 0x00000004 */ +#define BKP_CSR_TPIE BKP_CSR_TPIE_Msk /*!< TAMPER Pin interrupt enable */ +#define BKP_CSR_TEF_Pos (8U) +#define BKP_CSR_TEF_Msk (0x1U << BKP_CSR_TEF_Pos) /*!< 0x00000100 */ +#define BKP_CSR_TEF BKP_CSR_TEF_Msk /*!< Tamper Event Flag */ +#define BKP_CSR_TIF_Pos (9U) +#define BKP_CSR_TIF_Msk (0x1U << BKP_CSR_TIF_Pos) /*!< 0x00000200 */ +#define BKP_CSR_TIF BKP_CSR_TIF_Msk /*!< Tamper Interrupt Flag */ + +/******************************************************************************/ +/* */ +/* Reset and Clock Control */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for RCC_CR register ********************/ +#define RCC_CR_HSION_Pos (0U) +#define RCC_CR_HSION_Msk (0x1U << RCC_CR_HSION_Pos) /*!< 0x00000001 */ +#define RCC_CR_HSION RCC_CR_HSION_Msk /*!< Internal High Speed clock enable */ +#define RCC_CR_HSIRDY_Pos (1U) +#define RCC_CR_HSIRDY_Msk (0x1U << RCC_CR_HSIRDY_Pos) /*!< 0x00000002 */ +#define RCC_CR_HSIRDY RCC_CR_HSIRDY_Msk /*!< Internal High Speed clock ready flag */ +#define RCC_CR_HSITRIM_Pos (3U) +#define RCC_CR_HSITRIM_Msk (0x1FU << RCC_CR_HSITRIM_Pos) /*!< 0x000000F8 */ +#define RCC_CR_HSITRIM RCC_CR_HSITRIM_Msk /*!< Internal High Speed clock trimming */ +#define RCC_CR_HSICAL_Pos (8U) +#define RCC_CR_HSICAL_Msk (0xFFU << RCC_CR_HSICAL_Pos) /*!< 0x0000FF00 */ +#define RCC_CR_HSICAL RCC_CR_HSICAL_Msk /*!< Internal High Speed clock Calibration */ +#define RCC_CR_HSEON_Pos (16U) +#define RCC_CR_HSEON_Msk (0x1U << RCC_CR_HSEON_Pos) /*!< 0x00010000 */ +#define RCC_CR_HSEON RCC_CR_HSEON_Msk /*!< External High Speed clock enable */ +#define RCC_CR_HSERDY_Pos (17U) +#define RCC_CR_HSERDY_Msk (0x1U << RCC_CR_HSERDY_Pos) /*!< 0x00020000 */ +#define RCC_CR_HSERDY RCC_CR_HSERDY_Msk /*!< External High Speed clock ready flag */ +#define RCC_CR_HSEBYP_Pos (18U) +#define RCC_CR_HSEBYP_Msk (0x1U << RCC_CR_HSEBYP_Pos) /*!< 0x00040000 */ +#define RCC_CR_HSEBYP RCC_CR_HSEBYP_Msk /*!< External High Speed clock Bypass */ +#define RCC_CR_CSSON_Pos (19U) +#define RCC_CR_CSSON_Msk (0x1U << RCC_CR_CSSON_Pos) /*!< 0x00080000 */ +#define RCC_CR_CSSON RCC_CR_CSSON_Msk /*!< Clock Security System enable */ +#define RCC_CR_PLLON_Pos (24U) +#define RCC_CR_PLLON_Msk (0x1U << RCC_CR_PLLON_Pos) /*!< 0x01000000 */ +#define RCC_CR_PLLON RCC_CR_PLLON_Msk /*!< PLL enable */ +#define RCC_CR_PLLRDY_Pos (25U) +#define RCC_CR_PLLRDY_Msk (0x1U << RCC_CR_PLLRDY_Pos) /*!< 0x02000000 */ +#define RCC_CR_PLLRDY RCC_CR_PLLRDY_Msk /*!< PLL clock ready flag */ + + +/******************* Bit definition for RCC_CFGR register *******************/ +/*!< SW configuration */ +#define RCC_CFGR_SW_Pos (0U) +#define RCC_CFGR_SW_Msk (0x3U << RCC_CFGR_SW_Pos) /*!< 0x00000003 */ +#define RCC_CFGR_SW RCC_CFGR_SW_Msk /*!< SW[1:0] bits (System clock Switch) */ +#define RCC_CFGR_SW_0 (0x1U << RCC_CFGR_SW_Pos) /*!< 0x00000001 */ +#define RCC_CFGR_SW_1 (0x2U << RCC_CFGR_SW_Pos) /*!< 0x00000002 */ + +#define RCC_CFGR_SW_HSI ((uint32_t)0x00000000) /*!< HSI selected as system clock */ +#define RCC_CFGR_SW_HSE ((uint32_t)0x00000001) /*!< HSE selected as system clock */ +#define RCC_CFGR_SW_PLL ((uint32_t)0x00000002) /*!< PLL selected as system clock */ + +/*!< SWS configuration */ +#define RCC_CFGR_SWS_Pos (2U) +#define RCC_CFGR_SWS_Msk (0x3U << RCC_CFGR_SWS_Pos) /*!< 0x0000000C */ +#define RCC_CFGR_SWS RCC_CFGR_SWS_Msk /*!< SWS[1:0] bits (System Clock Switch Status) */ +#define RCC_CFGR_SWS_0 (0x1U << RCC_CFGR_SWS_Pos) /*!< 0x00000004 */ +#define RCC_CFGR_SWS_1 (0x2U << RCC_CFGR_SWS_Pos) /*!< 0x00000008 */ + +#define RCC_CFGR_SWS_HSI ((uint32_t)0x00000000) /*!< HSI oscillator used as system clock */ +#define RCC_CFGR_SWS_HSE ((uint32_t)0x00000004) /*!< HSE oscillator used as system clock */ +#define RCC_CFGR_SWS_PLL ((uint32_t)0x00000008) /*!< PLL used as system clock */ + +/*!< HPRE configuration */ +#define RCC_CFGR_HPRE_Pos (4U) +#define RCC_CFGR_HPRE_Msk (0xFU << RCC_CFGR_HPRE_Pos) /*!< 0x000000F0 */ +#define RCC_CFGR_HPRE RCC_CFGR_HPRE_Msk /*!< HPRE[3:0] bits (AHB prescaler) */ +#define RCC_CFGR_HPRE_0 (0x1U << RCC_CFGR_HPRE_Pos) /*!< 0x00000010 */ +#define RCC_CFGR_HPRE_1 (0x2U << RCC_CFGR_HPRE_Pos) /*!< 0x00000020 */ +#define RCC_CFGR_HPRE_2 (0x4U << RCC_CFGR_HPRE_Pos) /*!< 0x00000040 */ +#define RCC_CFGR_HPRE_3 (0x8U << RCC_CFGR_HPRE_Pos) /*!< 0x00000080 */ + +#define RCC_CFGR_HPRE_DIV1 ((uint32_t)0x00000000) /*!< SYSCLK not divided */ +#define RCC_CFGR_HPRE_DIV2 ((uint32_t)0x00000080) /*!< SYSCLK divided by 2 */ +#define RCC_CFGR_HPRE_DIV4 ((uint32_t)0x00000090) /*!< SYSCLK divided by 4 */ +#define RCC_CFGR_HPRE_DIV8 ((uint32_t)0x000000A0) /*!< SYSCLK divided by 8 */ +#define RCC_CFGR_HPRE_DIV16 ((uint32_t)0x000000B0) /*!< SYSCLK divided by 16 */ +#define RCC_CFGR_HPRE_DIV64 ((uint32_t)0x000000C0) /*!< SYSCLK divided by 64 */ +#define RCC_CFGR_HPRE_DIV128 ((uint32_t)0x000000D0) /*!< SYSCLK divided by 128 */ +#define RCC_CFGR_HPRE_DIV256 ((uint32_t)0x000000E0) /*!< SYSCLK divided by 256 */ +#define RCC_CFGR_HPRE_DIV512 ((uint32_t)0x000000F0) /*!< SYSCLK divided by 512 */ + +/*!< PPRE1 configuration */ +#define RCC_CFGR_PPRE1_Pos (8U) +#define RCC_CFGR_PPRE1_Msk (0x7U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000700 */ +#define RCC_CFGR_PPRE1 RCC_CFGR_PPRE1_Msk /*!< PRE1[2:0] bits (APB1 prescaler) */ +#define RCC_CFGR_PPRE1_0 (0x1U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000100 */ +#define RCC_CFGR_PPRE1_1 (0x2U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000200 */ +#define RCC_CFGR_PPRE1_2 (0x4U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000400 */ + +#define RCC_CFGR_PPRE1_DIV1 ((uint32_t)0x00000000) /*!< HCLK not divided */ +#define RCC_CFGR_PPRE1_DIV2 ((uint32_t)0x00000400) /*!< HCLK divided by 2 */ +#define RCC_CFGR_PPRE1_DIV4 ((uint32_t)0x00000500) /*!< HCLK divided by 4 */ +#define RCC_CFGR_PPRE1_DIV8 ((uint32_t)0x00000600) /*!< HCLK divided by 8 */ +#define RCC_CFGR_PPRE1_DIV16 ((uint32_t)0x00000700) /*!< HCLK divided by 16 */ + +/*!< PPRE2 configuration */ +#define RCC_CFGR_PPRE2_Pos (11U) +#define RCC_CFGR_PPRE2_Msk (0x7U << RCC_CFGR_PPRE2_Pos) /*!< 0x00003800 */ +#define RCC_CFGR_PPRE2 RCC_CFGR_PPRE2_Msk /*!< PRE2[2:0] bits (APB2 prescaler) */ +#define RCC_CFGR_PPRE2_0 (0x1U << RCC_CFGR_PPRE2_Pos) /*!< 0x00000800 */ +#define RCC_CFGR_PPRE2_1 (0x2U << RCC_CFGR_PPRE2_Pos) /*!< 0x00001000 */ +#define RCC_CFGR_PPRE2_2 (0x4U << RCC_CFGR_PPRE2_Pos) /*!< 0x00002000 */ + +#define RCC_CFGR_PPRE2_DIV1 ((uint32_t)0x00000000) /*!< HCLK not divided */ +#define RCC_CFGR_PPRE2_DIV2 ((uint32_t)0x00002000) /*!< HCLK divided by 2 */ +#define RCC_CFGR_PPRE2_DIV4 ((uint32_t)0x00002800) /*!< HCLK divided by 4 */ +#define RCC_CFGR_PPRE2_DIV8 ((uint32_t)0x00003000) /*!< HCLK divided by 8 */ +#define RCC_CFGR_PPRE2_DIV16 ((uint32_t)0x00003800) /*!< HCLK divided by 16 */ + +/*!< ADCPPRE configuration */ +#define RCC_CFGR_ADCPRE_Pos (14U) +#define RCC_CFGR_ADCPRE_Msk (0x3U << RCC_CFGR_ADCPRE_Pos) /*!< 0x0000C000 */ +#define RCC_CFGR_ADCPRE RCC_CFGR_ADCPRE_Msk /*!< ADCPRE[1:0] bits (ADC prescaler) */ +#define RCC_CFGR_ADCPRE_0 (0x1U << RCC_CFGR_ADCPRE_Pos) /*!< 0x00004000 */ +#define RCC_CFGR_ADCPRE_1 (0x2U << RCC_CFGR_ADCPRE_Pos) /*!< 0x00008000 */ + +#define RCC_CFGR_ADCPRE_DIV2 ((uint32_t)0x00000000) /*!< PCLK2 divided by 2 */ +#define RCC_CFGR_ADCPRE_DIV4 ((uint32_t)0x00004000) /*!< PCLK2 divided by 4 */ +#define RCC_CFGR_ADCPRE_DIV6 ((uint32_t)0x00008000) /*!< PCLK2 divided by 6 */ +#define RCC_CFGR_ADCPRE_DIV8 ((uint32_t)0x0000C000) /*!< PCLK2 divided by 8 */ + +#define RCC_CFGR_PLLSRC_Pos (16U) +#define RCC_CFGR_PLLSRC_Msk (0x1U << RCC_CFGR_PLLSRC_Pos) /*!< 0x00010000 */ +#define RCC_CFGR_PLLSRC RCC_CFGR_PLLSRC_Msk /*!< PLL entry clock source */ + +#define RCC_CFGR_PLLXTPRE_Pos (17U) +#define RCC_CFGR_PLLXTPRE_Msk (0x1U << RCC_CFGR_PLLXTPRE_Pos) /*!< 0x00020000 */ +#define RCC_CFGR_PLLXTPRE RCC_CFGR_PLLXTPRE_Msk /*!< HSE divider for PLL entry */ + +/*!< PLLMUL configuration */ +#define RCC_CFGR_PLLMULL_Pos (18U) +#define RCC_CFGR_PLLMULL_Msk (0xFU << RCC_CFGR_PLLMULL_Pos) /*!< 0x003C0000 */ +#define RCC_CFGR_PLLMULL RCC_CFGR_PLLMULL_Msk /*!< PLLMUL[3:0] bits (PLL multiplication factor) */ +#define RCC_CFGR_PLLMULL_0 (0x1U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00040000 */ +#define RCC_CFGR_PLLMULL_1 (0x2U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00080000 */ +#define RCC_CFGR_PLLMULL_2 (0x4U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00100000 */ +#define RCC_CFGR_PLLMULL_3 (0x8U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00200000 */ + +#define RCC_CFGR_PLLXTPRE_HSE ((uint32_t)0x00000000) /*!< HSE clock not divided for PLL entry */ +#define RCC_CFGR_PLLXTPRE_HSE_DIV2 ((uint32_t)0x00020000) /*!< HSE clock divided by 2 for PLL entry */ + +#define RCC_CFGR_PLLMULL2 ((uint32_t)0x00000000) /*!< PLL input clock*2 */ +#define RCC_CFGR_PLLMULL3_Pos (18U) +#define RCC_CFGR_PLLMULL3_Msk (0x1U << RCC_CFGR_PLLMULL3_Pos) /*!< 0x00040000 */ +#define RCC_CFGR_PLLMULL3 RCC_CFGR_PLLMULL3_Msk /*!< PLL input clock*3 */ +#define RCC_CFGR_PLLMULL4_Pos (19U) +#define RCC_CFGR_PLLMULL4_Msk (0x1U << RCC_CFGR_PLLMULL4_Pos) /*!< 0x00080000 */ +#define RCC_CFGR_PLLMULL4 RCC_CFGR_PLLMULL4_Msk /*!< PLL input clock*4 */ +#define RCC_CFGR_PLLMULL5_Pos (18U) +#define RCC_CFGR_PLLMULL5_Msk (0x3U << RCC_CFGR_PLLMULL5_Pos) /*!< 0x000C0000 */ +#define RCC_CFGR_PLLMULL5 RCC_CFGR_PLLMULL5_Msk /*!< PLL input clock*5 */ +#define RCC_CFGR_PLLMULL6_Pos (20U) +#define RCC_CFGR_PLLMULL6_Msk (0x1U << RCC_CFGR_PLLMULL6_Pos) /*!< 0x00100000 */ +#define RCC_CFGR_PLLMULL6 RCC_CFGR_PLLMULL6_Msk /*!< PLL input clock*6 */ +#define RCC_CFGR_PLLMULL7_Pos (18U) +#define RCC_CFGR_PLLMULL7_Msk (0x5U << RCC_CFGR_PLLMULL7_Pos) /*!< 0x00140000 */ +#define RCC_CFGR_PLLMULL7 RCC_CFGR_PLLMULL7_Msk /*!< PLL input clock*7 */ +#define RCC_CFGR_PLLMULL8_Pos (19U) +#define RCC_CFGR_PLLMULL8_Msk (0x3U << RCC_CFGR_PLLMULL8_Pos) /*!< 0x00180000 */ +#define RCC_CFGR_PLLMULL8 RCC_CFGR_PLLMULL8_Msk /*!< PLL input clock*8 */ +#define RCC_CFGR_PLLMULL9_Pos (18U) +#define RCC_CFGR_PLLMULL9_Msk (0x7U << RCC_CFGR_PLLMULL9_Pos) /*!< 0x001C0000 */ +#define RCC_CFGR_PLLMULL9 RCC_CFGR_PLLMULL9_Msk /*!< PLL input clock*9 */ +#define RCC_CFGR_PLLMULL10_Pos (21U) +#define RCC_CFGR_PLLMULL10_Msk (0x1U << RCC_CFGR_PLLMULL10_Pos) /*!< 0x00200000 */ +#define RCC_CFGR_PLLMULL10 RCC_CFGR_PLLMULL10_Msk /*!< PLL input clock10 */ +#define RCC_CFGR_PLLMULL11_Pos (18U) +#define RCC_CFGR_PLLMULL11_Msk (0x9U << RCC_CFGR_PLLMULL11_Pos) /*!< 0x00240000 */ +#define RCC_CFGR_PLLMULL11 RCC_CFGR_PLLMULL11_Msk /*!< PLL input clock*11 */ +#define RCC_CFGR_PLLMULL12_Pos (19U) +#define RCC_CFGR_PLLMULL12_Msk (0x5U << RCC_CFGR_PLLMULL12_Pos) /*!< 0x00280000 */ +#define RCC_CFGR_PLLMULL12 RCC_CFGR_PLLMULL12_Msk /*!< PLL input clock*12 */ +#define RCC_CFGR_PLLMULL13_Pos (18U) +#define RCC_CFGR_PLLMULL13_Msk (0xBU << RCC_CFGR_PLLMULL13_Pos) /*!< 0x002C0000 */ +#define RCC_CFGR_PLLMULL13 RCC_CFGR_PLLMULL13_Msk /*!< PLL input clock*13 */ +#define RCC_CFGR_PLLMULL14_Pos (20U) +#define RCC_CFGR_PLLMULL14_Msk (0x3U << RCC_CFGR_PLLMULL14_Pos) /*!< 0x00300000 */ +#define RCC_CFGR_PLLMULL14 RCC_CFGR_PLLMULL14_Msk /*!< PLL input clock*14 */ +#define RCC_CFGR_PLLMULL15_Pos (18U) +#define RCC_CFGR_PLLMULL15_Msk (0xDU << RCC_CFGR_PLLMULL15_Pos) /*!< 0x00340000 */ +#define RCC_CFGR_PLLMULL15 RCC_CFGR_PLLMULL15_Msk /*!< PLL input clock*15 */ +#define RCC_CFGR_PLLMULL16_Pos (19U) +#define RCC_CFGR_PLLMULL16_Msk (0x7U << RCC_CFGR_PLLMULL16_Pos) /*!< 0x00380000 */ +#define RCC_CFGR_PLLMULL16 RCC_CFGR_PLLMULL16_Msk /*!< PLL input clock*16 */ +#define RCC_CFGR_USBPRE_Pos (22U) +#define RCC_CFGR_USBPRE_Msk (0x1U << RCC_CFGR_USBPRE_Pos) /*!< 0x00400000 */ +#define RCC_CFGR_USBPRE RCC_CFGR_USBPRE_Msk /*!< USB Device prescaler */ + +/*!< MCO configuration */ +#define RCC_CFGR_MCO_Pos (24U) +#define RCC_CFGR_MCO_Msk (0x7U << RCC_CFGR_MCO_Pos) /*!< 0x07000000 */ +#define RCC_CFGR_MCO RCC_CFGR_MCO_Msk /*!< MCO[2:0] bits (Microcontroller Clock Output) */ +#define RCC_CFGR_MCO_0 (0x1U << RCC_CFGR_MCO_Pos) /*!< 0x01000000 */ +#define RCC_CFGR_MCO_1 (0x2U << RCC_CFGR_MCO_Pos) /*!< 0x02000000 */ +#define RCC_CFGR_MCO_2 (0x4U << RCC_CFGR_MCO_Pos) /*!< 0x04000000 */ + +#define RCC_CFGR_MCO_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ +#define RCC_CFGR_MCO_SYSCLK ((uint32_t)0x04000000) /*!< System clock selected as MCO source */ +#define RCC_CFGR_MCO_HSI ((uint32_t)0x05000000) /*!< HSI clock selected as MCO source */ +#define RCC_CFGR_MCO_HSE ((uint32_t)0x06000000) /*!< HSE clock selected as MCO source */ +#define RCC_CFGR_MCO_PLLCLK_DIV2 ((uint32_t)0x07000000) /*!< PLL clock divided by 2 selected as MCO source */ + + /* Reference defines */ + #define RCC_CFGR_MCOSEL RCC_CFGR_MCO + #define RCC_CFGR_MCOSEL_0 RCC_CFGR_MCO_0 + #define RCC_CFGR_MCOSEL_1 RCC_CFGR_MCO_1 + #define RCC_CFGR_MCOSEL_2 RCC_CFGR_MCO_2 + #define RCC_CFGR_MCOSEL_NOCLOCK RCC_CFGR_MCO_NOCLOCK + #define RCC_CFGR_MCOSEL_SYSCLK RCC_CFGR_MCO_SYSCLK + #define RCC_CFGR_MCOSEL_HSI RCC_CFGR_MCO_HSI + #define RCC_CFGR_MCOSEL_HSE RCC_CFGR_MCO_HSE + #define RCC_CFGR_MCOSEL_PLL_DIV2 RCC_CFGR_MCO_PLLCLK_DIV2 + +/*!<****************** Bit definition for RCC_CIR register ********************/ +#define RCC_CIR_LSIRDYF_Pos (0U) +#define RCC_CIR_LSIRDYF_Msk (0x1U << RCC_CIR_LSIRDYF_Pos) /*!< 0x00000001 */ +#define RCC_CIR_LSIRDYF RCC_CIR_LSIRDYF_Msk /*!< LSI Ready Interrupt flag */ +#define RCC_CIR_LSERDYF_Pos (1U) +#define RCC_CIR_LSERDYF_Msk (0x1U << RCC_CIR_LSERDYF_Pos) /*!< 0x00000002 */ +#define RCC_CIR_LSERDYF RCC_CIR_LSERDYF_Msk /*!< LSE Ready Interrupt flag */ +#define RCC_CIR_HSIRDYF_Pos (2U) +#define RCC_CIR_HSIRDYF_Msk (0x1U << RCC_CIR_HSIRDYF_Pos) /*!< 0x00000004 */ +#define RCC_CIR_HSIRDYF RCC_CIR_HSIRDYF_Msk /*!< HSI Ready Interrupt flag */ +#define RCC_CIR_HSERDYF_Pos (3U) +#define RCC_CIR_HSERDYF_Msk (0x1U << RCC_CIR_HSERDYF_Pos) /*!< 0x00000008 */ +#define RCC_CIR_HSERDYF RCC_CIR_HSERDYF_Msk /*!< HSE Ready Interrupt flag */ +#define RCC_CIR_PLLRDYF_Pos (4U) +#define RCC_CIR_PLLRDYF_Msk (0x1U << RCC_CIR_PLLRDYF_Pos) /*!< 0x00000010 */ +#define RCC_CIR_PLLRDYF RCC_CIR_PLLRDYF_Msk /*!< PLL Ready Interrupt flag */ +#define RCC_CIR_CSSF_Pos (7U) +#define RCC_CIR_CSSF_Msk (0x1U << RCC_CIR_CSSF_Pos) /*!< 0x00000080 */ +#define RCC_CIR_CSSF RCC_CIR_CSSF_Msk /*!< Clock Security System Interrupt flag */ +#define RCC_CIR_LSIRDYIE_Pos (8U) +#define RCC_CIR_LSIRDYIE_Msk (0x1U << RCC_CIR_LSIRDYIE_Pos) /*!< 0x00000100 */ +#define RCC_CIR_LSIRDYIE RCC_CIR_LSIRDYIE_Msk /*!< LSI Ready Interrupt Enable */ +#define RCC_CIR_LSERDYIE_Pos (9U) +#define RCC_CIR_LSERDYIE_Msk (0x1U << RCC_CIR_LSERDYIE_Pos) /*!< 0x00000200 */ +#define RCC_CIR_LSERDYIE RCC_CIR_LSERDYIE_Msk /*!< LSE Ready Interrupt Enable */ +#define RCC_CIR_HSIRDYIE_Pos (10U) +#define RCC_CIR_HSIRDYIE_Msk (0x1U << RCC_CIR_HSIRDYIE_Pos) /*!< 0x00000400 */ +#define RCC_CIR_HSIRDYIE RCC_CIR_HSIRDYIE_Msk /*!< HSI Ready Interrupt Enable */ +#define RCC_CIR_HSERDYIE_Pos (11U) +#define RCC_CIR_HSERDYIE_Msk (0x1U << RCC_CIR_HSERDYIE_Pos) /*!< 0x00000800 */ +#define RCC_CIR_HSERDYIE RCC_CIR_HSERDYIE_Msk /*!< HSE Ready Interrupt Enable */ +#define RCC_CIR_PLLRDYIE_Pos (12U) +#define RCC_CIR_PLLRDYIE_Msk (0x1U << RCC_CIR_PLLRDYIE_Pos) /*!< 0x00001000 */ +#define RCC_CIR_PLLRDYIE RCC_CIR_PLLRDYIE_Msk /*!< PLL Ready Interrupt Enable */ +#define RCC_CIR_LSIRDYC_Pos (16U) +#define RCC_CIR_LSIRDYC_Msk (0x1U << RCC_CIR_LSIRDYC_Pos) /*!< 0x00010000 */ +#define RCC_CIR_LSIRDYC RCC_CIR_LSIRDYC_Msk /*!< LSI Ready Interrupt Clear */ +#define RCC_CIR_LSERDYC_Pos (17U) +#define RCC_CIR_LSERDYC_Msk (0x1U << RCC_CIR_LSERDYC_Pos) /*!< 0x00020000 */ +#define RCC_CIR_LSERDYC RCC_CIR_LSERDYC_Msk /*!< LSE Ready Interrupt Clear */ +#define RCC_CIR_HSIRDYC_Pos (18U) +#define RCC_CIR_HSIRDYC_Msk (0x1U << RCC_CIR_HSIRDYC_Pos) /*!< 0x00040000 */ +#define RCC_CIR_HSIRDYC RCC_CIR_HSIRDYC_Msk /*!< HSI Ready Interrupt Clear */ +#define RCC_CIR_HSERDYC_Pos (19U) +#define RCC_CIR_HSERDYC_Msk (0x1U << RCC_CIR_HSERDYC_Pos) /*!< 0x00080000 */ +#define RCC_CIR_HSERDYC RCC_CIR_HSERDYC_Msk /*!< HSE Ready Interrupt Clear */ +#define RCC_CIR_PLLRDYC_Pos (20U) +#define RCC_CIR_PLLRDYC_Msk (0x1U << RCC_CIR_PLLRDYC_Pos) /*!< 0x00100000 */ +#define RCC_CIR_PLLRDYC RCC_CIR_PLLRDYC_Msk /*!< PLL Ready Interrupt Clear */ +#define RCC_CIR_CSSC_Pos (23U) +#define RCC_CIR_CSSC_Msk (0x1U << RCC_CIR_CSSC_Pos) /*!< 0x00800000 */ +#define RCC_CIR_CSSC RCC_CIR_CSSC_Msk /*!< Clock Security System Interrupt Clear */ + + +/***************** Bit definition for RCC_APB2RSTR register *****************/ +#define RCC_APB2RSTR_AFIORST_Pos (0U) +#define RCC_APB2RSTR_AFIORST_Msk (0x1U << RCC_APB2RSTR_AFIORST_Pos) /*!< 0x00000001 */ +#define RCC_APB2RSTR_AFIORST RCC_APB2RSTR_AFIORST_Msk /*!< Alternate Function I/O reset */ +#define RCC_APB2RSTR_IOPARST_Pos (2U) +#define RCC_APB2RSTR_IOPARST_Msk (0x1U << RCC_APB2RSTR_IOPARST_Pos) /*!< 0x00000004 */ +#define RCC_APB2RSTR_IOPARST RCC_APB2RSTR_IOPARST_Msk /*!< I/O port A reset */ +#define RCC_APB2RSTR_IOPBRST_Pos (3U) +#define RCC_APB2RSTR_IOPBRST_Msk (0x1U << RCC_APB2RSTR_IOPBRST_Pos) /*!< 0x00000008 */ +#define RCC_APB2RSTR_IOPBRST RCC_APB2RSTR_IOPBRST_Msk /*!< I/O port B reset */ +#define RCC_APB2RSTR_IOPCRST_Pos (4U) +#define RCC_APB2RSTR_IOPCRST_Msk (0x1U << RCC_APB2RSTR_IOPCRST_Pos) /*!< 0x00000010 */ +#define RCC_APB2RSTR_IOPCRST RCC_APB2RSTR_IOPCRST_Msk /*!< I/O port C reset */ +#define RCC_APB2RSTR_IOPDRST_Pos (5U) +#define RCC_APB2RSTR_IOPDRST_Msk (0x1U << RCC_APB2RSTR_IOPDRST_Pos) /*!< 0x00000020 */ +#define RCC_APB2RSTR_IOPDRST RCC_APB2RSTR_IOPDRST_Msk /*!< I/O port D reset */ +#define RCC_APB2RSTR_ADC1RST_Pos (9U) +#define RCC_APB2RSTR_ADC1RST_Msk (0x1U << RCC_APB2RSTR_ADC1RST_Pos) /*!< 0x00000200 */ +#define RCC_APB2RSTR_ADC1RST RCC_APB2RSTR_ADC1RST_Msk /*!< ADC 1 interface reset */ + +#define RCC_APB2RSTR_ADC2RST_Pos (10U) +#define RCC_APB2RSTR_ADC2RST_Msk (0x1U << RCC_APB2RSTR_ADC2RST_Pos) /*!< 0x00000400 */ +#define RCC_APB2RSTR_ADC2RST RCC_APB2RSTR_ADC2RST_Msk /*!< ADC 2 interface reset */ + +#define RCC_APB2RSTR_TIM1RST_Pos (11U) +#define RCC_APB2RSTR_TIM1RST_Msk (0x1U << RCC_APB2RSTR_TIM1RST_Pos) /*!< 0x00000800 */ +#define RCC_APB2RSTR_TIM1RST RCC_APB2RSTR_TIM1RST_Msk /*!< TIM1 Timer reset */ +#define RCC_APB2RSTR_SPI1RST_Pos (12U) +#define RCC_APB2RSTR_SPI1RST_Msk (0x1U << RCC_APB2RSTR_SPI1RST_Pos) /*!< 0x00001000 */ +#define RCC_APB2RSTR_SPI1RST RCC_APB2RSTR_SPI1RST_Msk /*!< SPI 1 reset */ +#define RCC_APB2RSTR_USART1RST_Pos (14U) +#define RCC_APB2RSTR_USART1RST_Msk (0x1U << RCC_APB2RSTR_USART1RST_Pos) /*!< 0x00004000 */ +#define RCC_APB2RSTR_USART1RST RCC_APB2RSTR_USART1RST_Msk /*!< USART1 reset */ + + +#define RCC_APB2RSTR_IOPERST_Pos (6U) +#define RCC_APB2RSTR_IOPERST_Msk (0x1U << RCC_APB2RSTR_IOPERST_Pos) /*!< 0x00000040 */ +#define RCC_APB2RSTR_IOPERST RCC_APB2RSTR_IOPERST_Msk /*!< I/O port E reset */ + + + + +/***************** Bit definition for RCC_APB1RSTR register *****************/ +#define RCC_APB1RSTR_TIM2RST_Pos (0U) +#define RCC_APB1RSTR_TIM2RST_Msk (0x1U << RCC_APB1RSTR_TIM2RST_Pos) /*!< 0x00000001 */ +#define RCC_APB1RSTR_TIM2RST RCC_APB1RSTR_TIM2RST_Msk /*!< Timer 2 reset */ +#define RCC_APB1RSTR_TIM3RST_Pos (1U) +#define RCC_APB1RSTR_TIM3RST_Msk (0x1U << RCC_APB1RSTR_TIM3RST_Pos) /*!< 0x00000002 */ +#define RCC_APB1RSTR_TIM3RST RCC_APB1RSTR_TIM3RST_Msk /*!< Timer 3 reset */ +#define RCC_APB1RSTR_WWDGRST_Pos (11U) +#define RCC_APB1RSTR_WWDGRST_Msk (0x1U << RCC_APB1RSTR_WWDGRST_Pos) /*!< 0x00000800 */ +#define RCC_APB1RSTR_WWDGRST RCC_APB1RSTR_WWDGRST_Msk /*!< Window Watchdog reset */ +#define RCC_APB1RSTR_USART2RST_Pos (17U) +#define RCC_APB1RSTR_USART2RST_Msk (0x1U << RCC_APB1RSTR_USART2RST_Pos) /*!< 0x00020000 */ +#define RCC_APB1RSTR_USART2RST RCC_APB1RSTR_USART2RST_Msk /*!< USART 2 reset */ +#define RCC_APB1RSTR_I2C1RST_Pos (21U) +#define RCC_APB1RSTR_I2C1RST_Msk (0x1U << RCC_APB1RSTR_I2C1RST_Pos) /*!< 0x00200000 */ +#define RCC_APB1RSTR_I2C1RST RCC_APB1RSTR_I2C1RST_Msk /*!< I2C 1 reset */ + +#define RCC_APB1RSTR_CAN1RST_Pos (25U) +#define RCC_APB1RSTR_CAN1RST_Msk (0x1U << RCC_APB1RSTR_CAN1RST_Pos) /*!< 0x02000000 */ +#define RCC_APB1RSTR_CAN1RST RCC_APB1RSTR_CAN1RST_Msk /*!< CAN1 reset */ + +#define RCC_APB1RSTR_BKPRST_Pos (27U) +#define RCC_APB1RSTR_BKPRST_Msk (0x1U << RCC_APB1RSTR_BKPRST_Pos) /*!< 0x08000000 */ +#define RCC_APB1RSTR_BKPRST RCC_APB1RSTR_BKPRST_Msk /*!< Backup interface reset */ +#define RCC_APB1RSTR_PWRRST_Pos (28U) +#define RCC_APB1RSTR_PWRRST_Msk (0x1U << RCC_APB1RSTR_PWRRST_Pos) /*!< 0x10000000 */ +#define RCC_APB1RSTR_PWRRST RCC_APB1RSTR_PWRRST_Msk /*!< Power interface reset */ + +#define RCC_APB1RSTR_TIM4RST_Pos (2U) +#define RCC_APB1RSTR_TIM4RST_Msk (0x1U << RCC_APB1RSTR_TIM4RST_Pos) /*!< 0x00000004 */ +#define RCC_APB1RSTR_TIM4RST RCC_APB1RSTR_TIM4RST_Msk /*!< Timer 4 reset */ +#define RCC_APB1RSTR_SPI2RST_Pos (14U) +#define RCC_APB1RSTR_SPI2RST_Msk (0x1U << RCC_APB1RSTR_SPI2RST_Pos) /*!< 0x00004000 */ +#define RCC_APB1RSTR_SPI2RST RCC_APB1RSTR_SPI2RST_Msk /*!< SPI 2 reset */ +#define RCC_APB1RSTR_USART3RST_Pos (18U) +#define RCC_APB1RSTR_USART3RST_Msk (0x1U << RCC_APB1RSTR_USART3RST_Pos) /*!< 0x00040000 */ +#define RCC_APB1RSTR_USART3RST RCC_APB1RSTR_USART3RST_Msk /*!< USART 3 reset */ +#define RCC_APB1RSTR_I2C2RST_Pos (22U) +#define RCC_APB1RSTR_I2C2RST_Msk (0x1U << RCC_APB1RSTR_I2C2RST_Pos) /*!< 0x00400000 */ +#define RCC_APB1RSTR_I2C2RST RCC_APB1RSTR_I2C2RST_Msk /*!< I2C 2 reset */ + +#define RCC_APB1RSTR_USBRST_Pos (23U) +#define RCC_APB1RSTR_USBRST_Msk (0x1U << RCC_APB1RSTR_USBRST_Pos) /*!< 0x00800000 */ +#define RCC_APB1RSTR_USBRST RCC_APB1RSTR_USBRST_Msk /*!< USB Device reset */ + + + + + + +/****************** Bit definition for RCC_AHBENR register ******************/ +#define RCC_AHBENR_DMA1EN_Pos (0U) +#define RCC_AHBENR_DMA1EN_Msk (0x1U << RCC_AHBENR_DMA1EN_Pos) /*!< 0x00000001 */ +#define RCC_AHBENR_DMA1EN RCC_AHBENR_DMA1EN_Msk /*!< DMA1 clock enable */ +#define RCC_AHBENR_SRAMEN_Pos (2U) +#define RCC_AHBENR_SRAMEN_Msk (0x1U << RCC_AHBENR_SRAMEN_Pos) /*!< 0x00000004 */ +#define RCC_AHBENR_SRAMEN RCC_AHBENR_SRAMEN_Msk /*!< SRAM interface clock enable */ +#define RCC_AHBENR_FLITFEN_Pos (4U) +#define RCC_AHBENR_FLITFEN_Msk (0x1U << RCC_AHBENR_FLITFEN_Pos) /*!< 0x00000010 */ +#define RCC_AHBENR_FLITFEN RCC_AHBENR_FLITFEN_Msk /*!< FLITF clock enable */ +#define RCC_AHBENR_CRCEN_Pos (6U) +#define RCC_AHBENR_CRCEN_Msk (0x1U << RCC_AHBENR_CRCEN_Pos) /*!< 0x00000040 */ +#define RCC_AHBENR_CRCEN RCC_AHBENR_CRCEN_Msk /*!< CRC clock enable */ + + + + +/****************** Bit definition for RCC_APB2ENR register *****************/ +#define RCC_APB2ENR_AFIOEN_Pos (0U) +#define RCC_APB2ENR_AFIOEN_Msk (0x1U << RCC_APB2ENR_AFIOEN_Pos) /*!< 0x00000001 */ +#define RCC_APB2ENR_AFIOEN RCC_APB2ENR_AFIOEN_Msk /*!< Alternate Function I/O clock enable */ +#define RCC_APB2ENR_IOPAEN_Pos (2U) +#define RCC_APB2ENR_IOPAEN_Msk (0x1U << RCC_APB2ENR_IOPAEN_Pos) /*!< 0x00000004 */ +#define RCC_APB2ENR_IOPAEN RCC_APB2ENR_IOPAEN_Msk /*!< I/O port A clock enable */ +#define RCC_APB2ENR_IOPBEN_Pos (3U) +#define RCC_APB2ENR_IOPBEN_Msk (0x1U << RCC_APB2ENR_IOPBEN_Pos) /*!< 0x00000008 */ +#define RCC_APB2ENR_IOPBEN RCC_APB2ENR_IOPBEN_Msk /*!< I/O port B clock enable */ +#define RCC_APB2ENR_IOPCEN_Pos (4U) +#define RCC_APB2ENR_IOPCEN_Msk (0x1U << RCC_APB2ENR_IOPCEN_Pos) /*!< 0x00000010 */ +#define RCC_APB2ENR_IOPCEN RCC_APB2ENR_IOPCEN_Msk /*!< I/O port C clock enable */ +#define RCC_APB2ENR_IOPDEN_Pos (5U) +#define RCC_APB2ENR_IOPDEN_Msk (0x1U << RCC_APB2ENR_IOPDEN_Pos) /*!< 0x00000020 */ +#define RCC_APB2ENR_IOPDEN RCC_APB2ENR_IOPDEN_Msk /*!< I/O port D clock enable */ +#define RCC_APB2ENR_ADC1EN_Pos (9U) +#define RCC_APB2ENR_ADC1EN_Msk (0x1U << RCC_APB2ENR_ADC1EN_Pos) /*!< 0x00000200 */ +#define RCC_APB2ENR_ADC1EN RCC_APB2ENR_ADC1EN_Msk /*!< ADC 1 interface clock enable */ + +#define RCC_APB2ENR_ADC2EN_Pos (10U) +#define RCC_APB2ENR_ADC2EN_Msk (0x1U << RCC_APB2ENR_ADC2EN_Pos) /*!< 0x00000400 */ +#define RCC_APB2ENR_ADC2EN RCC_APB2ENR_ADC2EN_Msk /*!< ADC 2 interface clock enable */ + +#define RCC_APB2ENR_TIM1EN_Pos (11U) +#define RCC_APB2ENR_TIM1EN_Msk (0x1U << RCC_APB2ENR_TIM1EN_Pos) /*!< 0x00000800 */ +#define RCC_APB2ENR_TIM1EN RCC_APB2ENR_TIM1EN_Msk /*!< TIM1 Timer clock enable */ +#define RCC_APB2ENR_SPI1EN_Pos (12U) +#define RCC_APB2ENR_SPI1EN_Msk (0x1U << RCC_APB2ENR_SPI1EN_Pos) /*!< 0x00001000 */ +#define RCC_APB2ENR_SPI1EN RCC_APB2ENR_SPI1EN_Msk /*!< SPI 1 clock enable */ +#define RCC_APB2ENR_USART1EN_Pos (14U) +#define RCC_APB2ENR_USART1EN_Msk (0x1U << RCC_APB2ENR_USART1EN_Pos) /*!< 0x00004000 */ +#define RCC_APB2ENR_USART1EN RCC_APB2ENR_USART1EN_Msk /*!< USART1 clock enable */ + + +#define RCC_APB2ENR_IOPEEN_Pos (6U) +#define RCC_APB2ENR_IOPEEN_Msk (0x1U << RCC_APB2ENR_IOPEEN_Pos) /*!< 0x00000040 */ +#define RCC_APB2ENR_IOPEEN RCC_APB2ENR_IOPEEN_Msk /*!< I/O port E clock enable */ + + + + +/***************** Bit definition for RCC_APB1ENR register ******************/ +#define RCC_APB1ENR_TIM2EN_Pos (0U) +#define RCC_APB1ENR_TIM2EN_Msk (0x1U << RCC_APB1ENR_TIM2EN_Pos) /*!< 0x00000001 */ +#define RCC_APB1ENR_TIM2EN RCC_APB1ENR_TIM2EN_Msk /*!< Timer 2 clock enabled*/ +#define RCC_APB1ENR_TIM3EN_Pos (1U) +#define RCC_APB1ENR_TIM3EN_Msk (0x1U << RCC_APB1ENR_TIM3EN_Pos) /*!< 0x00000002 */ +#define RCC_APB1ENR_TIM3EN RCC_APB1ENR_TIM3EN_Msk /*!< Timer 3 clock enable */ +#define RCC_APB1ENR_WWDGEN_Pos (11U) +#define RCC_APB1ENR_WWDGEN_Msk (0x1U << RCC_APB1ENR_WWDGEN_Pos) /*!< 0x00000800 */ +#define RCC_APB1ENR_WWDGEN RCC_APB1ENR_WWDGEN_Msk /*!< Window Watchdog clock enable */ +#define RCC_APB1ENR_USART2EN_Pos (17U) +#define RCC_APB1ENR_USART2EN_Msk (0x1U << RCC_APB1ENR_USART2EN_Pos) /*!< 0x00020000 */ +#define RCC_APB1ENR_USART2EN RCC_APB1ENR_USART2EN_Msk /*!< USART 2 clock enable */ +#define RCC_APB1ENR_I2C1EN_Pos (21U) +#define RCC_APB1ENR_I2C1EN_Msk (0x1U << RCC_APB1ENR_I2C1EN_Pos) /*!< 0x00200000 */ +#define RCC_APB1ENR_I2C1EN RCC_APB1ENR_I2C1EN_Msk /*!< I2C 1 clock enable */ + +#define RCC_APB1ENR_CAN1EN_Pos (25U) +#define RCC_APB1ENR_CAN1EN_Msk (0x1U << RCC_APB1ENR_CAN1EN_Pos) /*!< 0x02000000 */ +#define RCC_APB1ENR_CAN1EN RCC_APB1ENR_CAN1EN_Msk /*!< CAN1 clock enable */ + +#define RCC_APB1ENR_BKPEN_Pos (27U) +#define RCC_APB1ENR_BKPEN_Msk (0x1U << RCC_APB1ENR_BKPEN_Pos) /*!< 0x08000000 */ +#define RCC_APB1ENR_BKPEN RCC_APB1ENR_BKPEN_Msk /*!< Backup interface clock enable */ +#define RCC_APB1ENR_PWREN_Pos (28U) +#define RCC_APB1ENR_PWREN_Msk (0x1U << RCC_APB1ENR_PWREN_Pos) /*!< 0x10000000 */ +#define RCC_APB1ENR_PWREN RCC_APB1ENR_PWREN_Msk /*!< Power interface clock enable */ + +#define RCC_APB1ENR_TIM4EN_Pos (2U) +#define RCC_APB1ENR_TIM4EN_Msk (0x1U << RCC_APB1ENR_TIM4EN_Pos) /*!< 0x00000004 */ +#define RCC_APB1ENR_TIM4EN RCC_APB1ENR_TIM4EN_Msk /*!< Timer 4 clock enable */ +#define RCC_APB1ENR_SPI2EN_Pos (14U) +#define RCC_APB1ENR_SPI2EN_Msk (0x1U << RCC_APB1ENR_SPI2EN_Pos) /*!< 0x00004000 */ +#define RCC_APB1ENR_SPI2EN RCC_APB1ENR_SPI2EN_Msk /*!< SPI 2 clock enable */ +#define RCC_APB1ENR_USART3EN_Pos (18U) +#define RCC_APB1ENR_USART3EN_Msk (0x1U << RCC_APB1ENR_USART3EN_Pos) /*!< 0x00040000 */ +#define RCC_APB1ENR_USART3EN RCC_APB1ENR_USART3EN_Msk /*!< USART 3 clock enable */ +#define RCC_APB1ENR_I2C2EN_Pos (22U) +#define RCC_APB1ENR_I2C2EN_Msk (0x1U << RCC_APB1ENR_I2C2EN_Pos) /*!< 0x00400000 */ +#define RCC_APB1ENR_I2C2EN RCC_APB1ENR_I2C2EN_Msk /*!< I2C 2 clock enable */ + +#define RCC_APB1ENR_USBEN_Pos (23U) +#define RCC_APB1ENR_USBEN_Msk (0x1U << RCC_APB1ENR_USBEN_Pos) /*!< 0x00800000 */ +#define RCC_APB1ENR_USBEN RCC_APB1ENR_USBEN_Msk /*!< USB Device clock enable */ + + + + + + +/******************* Bit definition for RCC_BDCR register *******************/ +#define RCC_BDCR_LSEON_Pos (0U) +#define RCC_BDCR_LSEON_Msk (0x1U << RCC_BDCR_LSEON_Pos) /*!< 0x00000001 */ +#define RCC_BDCR_LSEON RCC_BDCR_LSEON_Msk /*!< External Low Speed oscillator enable */ +#define RCC_BDCR_LSERDY_Pos (1U) +#define RCC_BDCR_LSERDY_Msk (0x1U << RCC_BDCR_LSERDY_Pos) /*!< 0x00000002 */ +#define RCC_BDCR_LSERDY RCC_BDCR_LSERDY_Msk /*!< External Low Speed oscillator Ready */ +#define RCC_BDCR_LSEBYP_Pos (2U) +#define RCC_BDCR_LSEBYP_Msk (0x1U << RCC_BDCR_LSEBYP_Pos) /*!< 0x00000004 */ +#define RCC_BDCR_LSEBYP RCC_BDCR_LSEBYP_Msk /*!< External Low Speed oscillator Bypass */ + +#define RCC_BDCR_RTCSEL_Pos (8U) +#define RCC_BDCR_RTCSEL_Msk (0x3U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000300 */ +#define RCC_BDCR_RTCSEL RCC_BDCR_RTCSEL_Msk /*!< RTCSEL[1:0] bits (RTC clock source selection) */ +#define RCC_BDCR_RTCSEL_0 (0x1U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000100 */ +#define RCC_BDCR_RTCSEL_1 (0x2U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000200 */ + +/*!< RTC congiguration */ +#define RCC_BDCR_RTCSEL_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ +#define RCC_BDCR_RTCSEL_LSE ((uint32_t)0x00000100) /*!< LSE oscillator clock used as RTC clock */ +#define RCC_BDCR_RTCSEL_LSI ((uint32_t)0x00000200) /*!< LSI oscillator clock used as RTC clock */ +#define RCC_BDCR_RTCSEL_HSE ((uint32_t)0x00000300) /*!< HSE oscillator clock divided by 128 used as RTC clock */ + +#define RCC_BDCR_RTCEN_Pos (15U) +#define RCC_BDCR_RTCEN_Msk (0x1U << RCC_BDCR_RTCEN_Pos) /*!< 0x00008000 */ +#define RCC_BDCR_RTCEN RCC_BDCR_RTCEN_Msk /*!< RTC clock enable */ +#define RCC_BDCR_BDRST_Pos (16U) +#define RCC_BDCR_BDRST_Msk (0x1U << RCC_BDCR_BDRST_Pos) /*!< 0x00010000 */ +#define RCC_BDCR_BDRST RCC_BDCR_BDRST_Msk /*!< Backup domain software reset */ + +/******************* Bit definition for RCC_CSR register ********************/ +#define RCC_CSR_LSION_Pos (0U) +#define RCC_CSR_LSION_Msk (0x1U << RCC_CSR_LSION_Pos) /*!< 0x00000001 */ +#define RCC_CSR_LSION RCC_CSR_LSION_Msk /*!< Internal Low Speed oscillator enable */ +#define RCC_CSR_LSIRDY_Pos (1U) +#define RCC_CSR_LSIRDY_Msk (0x1U << RCC_CSR_LSIRDY_Pos) /*!< 0x00000002 */ +#define RCC_CSR_LSIRDY RCC_CSR_LSIRDY_Msk /*!< Internal Low Speed oscillator Ready */ +#define RCC_CSR_RMVF_Pos (24U) +#define RCC_CSR_RMVF_Msk (0x1U << RCC_CSR_RMVF_Pos) /*!< 0x01000000 */ +#define RCC_CSR_RMVF RCC_CSR_RMVF_Msk /*!< Remove reset flag */ +#define RCC_CSR_PINRSTF_Pos (26U) +#define RCC_CSR_PINRSTF_Msk (0x1U << RCC_CSR_PINRSTF_Pos) /*!< 0x04000000 */ +#define RCC_CSR_PINRSTF RCC_CSR_PINRSTF_Msk /*!< PIN reset flag */ +#define RCC_CSR_PORRSTF_Pos (27U) +#define RCC_CSR_PORRSTF_Msk (0x1U << RCC_CSR_PORRSTF_Pos) /*!< 0x08000000 */ +#define RCC_CSR_PORRSTF RCC_CSR_PORRSTF_Msk /*!< POR/PDR reset flag */ +#define RCC_CSR_SFTRSTF_Pos (28U) +#define RCC_CSR_SFTRSTF_Msk (0x1U << RCC_CSR_SFTRSTF_Pos) /*!< 0x10000000 */ +#define RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF_Msk /*!< Software Reset flag */ +#define RCC_CSR_IWDGRSTF_Pos (29U) +#define RCC_CSR_IWDGRSTF_Msk (0x1U << RCC_CSR_IWDGRSTF_Pos) /*!< 0x20000000 */ +#define RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF_Msk /*!< Independent Watchdog reset flag */ +#define RCC_CSR_WWDGRSTF_Pos (30U) +#define RCC_CSR_WWDGRSTF_Msk (0x1U << RCC_CSR_WWDGRSTF_Pos) /*!< 0x40000000 */ +#define RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF_Msk /*!< Window watchdog reset flag */ +#define RCC_CSR_LPWRRSTF_Pos (31U) +#define RCC_CSR_LPWRRSTF_Msk (0x1U << RCC_CSR_LPWRRSTF_Pos) /*!< 0x80000000 */ +#define RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF_Msk /*!< Low-Power reset flag */ + + + +/******************************************************************************/ +/* */ +/* General Purpose and Alternate Function I/O */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for GPIO_CRL register *******************/ +#define GPIO_CRL_MODE_Pos (0U) +#define GPIO_CRL_MODE_Msk (0x33333333U << GPIO_CRL_MODE_Pos) /*!< 0x33333333 */ +#define GPIO_CRL_MODE GPIO_CRL_MODE_Msk /*!< Port x mode bits */ + +#define GPIO_CRL_MODE0_Pos (0U) +#define GPIO_CRL_MODE0_Msk (0x3U << GPIO_CRL_MODE0_Pos) /*!< 0x00000003 */ +#define GPIO_CRL_MODE0 GPIO_CRL_MODE0_Msk /*!< MODE0[1:0] bits (Port x mode bits, pin 0) */ +#define GPIO_CRL_MODE0_0 (0x1U << GPIO_CRL_MODE0_Pos) /*!< 0x00000001 */ +#define GPIO_CRL_MODE0_1 (0x2U << GPIO_CRL_MODE0_Pos) /*!< 0x00000002 */ + +#define GPIO_CRL_MODE1_Pos (4U) +#define GPIO_CRL_MODE1_Msk (0x3U << GPIO_CRL_MODE1_Pos) /*!< 0x00000030 */ +#define GPIO_CRL_MODE1 GPIO_CRL_MODE1_Msk /*!< MODE1[1:0] bits (Port x mode bits, pin 1) */ +#define GPIO_CRL_MODE1_0 (0x1U << GPIO_CRL_MODE1_Pos) /*!< 0x00000010 */ +#define GPIO_CRL_MODE1_1 (0x2U << GPIO_CRL_MODE1_Pos) /*!< 0x00000020 */ + +#define GPIO_CRL_MODE2_Pos (8U) +#define GPIO_CRL_MODE2_Msk (0x3U << GPIO_CRL_MODE2_Pos) /*!< 0x00000300 */ +#define GPIO_CRL_MODE2 GPIO_CRL_MODE2_Msk /*!< MODE2[1:0] bits (Port x mode bits, pin 2) */ +#define GPIO_CRL_MODE2_0 (0x1U << GPIO_CRL_MODE2_Pos) /*!< 0x00000100 */ +#define GPIO_CRL_MODE2_1 (0x2U << GPIO_CRL_MODE2_Pos) /*!< 0x00000200 */ + +#define GPIO_CRL_MODE3_Pos (12U) +#define GPIO_CRL_MODE3_Msk (0x3U << GPIO_CRL_MODE3_Pos) /*!< 0x00003000 */ +#define GPIO_CRL_MODE3 GPIO_CRL_MODE3_Msk /*!< MODE3[1:0] bits (Port x mode bits, pin 3) */ +#define GPIO_CRL_MODE3_0 (0x1U << GPIO_CRL_MODE3_Pos) /*!< 0x00001000 */ +#define GPIO_CRL_MODE3_1 (0x2U << GPIO_CRL_MODE3_Pos) /*!< 0x00002000 */ + +#define GPIO_CRL_MODE4_Pos (16U) +#define GPIO_CRL_MODE4_Msk (0x3U << GPIO_CRL_MODE4_Pos) /*!< 0x00030000 */ +#define GPIO_CRL_MODE4 GPIO_CRL_MODE4_Msk /*!< MODE4[1:0] bits (Port x mode bits, pin 4) */ +#define GPIO_CRL_MODE4_0 (0x1U << GPIO_CRL_MODE4_Pos) /*!< 0x00010000 */ +#define GPIO_CRL_MODE4_1 (0x2U << GPIO_CRL_MODE4_Pos) /*!< 0x00020000 */ + +#define GPIO_CRL_MODE5_Pos (20U) +#define GPIO_CRL_MODE5_Msk (0x3U << GPIO_CRL_MODE5_Pos) /*!< 0x00300000 */ +#define GPIO_CRL_MODE5 GPIO_CRL_MODE5_Msk /*!< MODE5[1:0] bits (Port x mode bits, pin 5) */ +#define GPIO_CRL_MODE5_0 (0x1U << GPIO_CRL_MODE5_Pos) /*!< 0x00100000 */ +#define GPIO_CRL_MODE5_1 (0x2U << GPIO_CRL_MODE5_Pos) /*!< 0x00200000 */ + +#define GPIO_CRL_MODE6_Pos (24U) +#define GPIO_CRL_MODE6_Msk (0x3U << GPIO_CRL_MODE6_Pos) /*!< 0x03000000 */ +#define GPIO_CRL_MODE6 GPIO_CRL_MODE6_Msk /*!< MODE6[1:0] bits (Port x mode bits, pin 6) */ +#define GPIO_CRL_MODE6_0 (0x1U << GPIO_CRL_MODE6_Pos) /*!< 0x01000000 */ +#define GPIO_CRL_MODE6_1 (0x2U << GPIO_CRL_MODE6_Pos) /*!< 0x02000000 */ + +#define GPIO_CRL_MODE7_Pos (28U) +#define GPIO_CRL_MODE7_Msk (0x3U << GPIO_CRL_MODE7_Pos) /*!< 0x30000000 */ +#define GPIO_CRL_MODE7 GPIO_CRL_MODE7_Msk /*!< MODE7[1:0] bits (Port x mode bits, pin 7) */ +#define GPIO_CRL_MODE7_0 (0x1U << GPIO_CRL_MODE7_Pos) /*!< 0x10000000 */ +#define GPIO_CRL_MODE7_1 (0x2U << GPIO_CRL_MODE7_Pos) /*!< 0x20000000 */ + +#define GPIO_CRL_CNF_Pos (2U) +#define GPIO_CRL_CNF_Msk (0x33333333U << GPIO_CRL_CNF_Pos) /*!< 0xCCCCCCCC */ +#define GPIO_CRL_CNF GPIO_CRL_CNF_Msk /*!< Port x configuration bits */ + +#define GPIO_CRL_CNF0_Pos (2U) +#define GPIO_CRL_CNF0_Msk (0x3U << GPIO_CRL_CNF0_Pos) /*!< 0x0000000C */ +#define GPIO_CRL_CNF0 GPIO_CRL_CNF0_Msk /*!< CNF0[1:0] bits (Port x configuration bits, pin 0) */ +#define GPIO_CRL_CNF0_0 (0x1U << GPIO_CRL_CNF0_Pos) /*!< 0x00000004 */ +#define GPIO_CRL_CNF0_1 (0x2U << GPIO_CRL_CNF0_Pos) /*!< 0x00000008 */ + +#define GPIO_CRL_CNF1_Pos (6U) +#define GPIO_CRL_CNF1_Msk (0x3U << GPIO_CRL_CNF1_Pos) /*!< 0x000000C0 */ +#define GPIO_CRL_CNF1 GPIO_CRL_CNF1_Msk /*!< CNF1[1:0] bits (Port x configuration bits, pin 1) */ +#define GPIO_CRL_CNF1_0 (0x1U << GPIO_CRL_CNF1_Pos) /*!< 0x00000040 */ +#define GPIO_CRL_CNF1_1 (0x2U << GPIO_CRL_CNF1_Pos) /*!< 0x00000080 */ + +#define GPIO_CRL_CNF2_Pos (10U) +#define GPIO_CRL_CNF2_Msk (0x3U << GPIO_CRL_CNF2_Pos) /*!< 0x00000C00 */ +#define GPIO_CRL_CNF2 GPIO_CRL_CNF2_Msk /*!< CNF2[1:0] bits (Port x configuration bits, pin 2) */ +#define GPIO_CRL_CNF2_0 (0x1U << GPIO_CRL_CNF2_Pos) /*!< 0x00000400 */ +#define GPIO_CRL_CNF2_1 (0x2U << GPIO_CRL_CNF2_Pos) /*!< 0x00000800 */ + +#define GPIO_CRL_CNF3_Pos (14U) +#define GPIO_CRL_CNF3_Msk (0x3U << GPIO_CRL_CNF3_Pos) /*!< 0x0000C000 */ +#define GPIO_CRL_CNF3 GPIO_CRL_CNF3_Msk /*!< CNF3[1:0] bits (Port x configuration bits, pin 3) */ +#define GPIO_CRL_CNF3_0 (0x1U << GPIO_CRL_CNF3_Pos) /*!< 0x00004000 */ +#define GPIO_CRL_CNF3_1 (0x2U << GPIO_CRL_CNF3_Pos) /*!< 0x00008000 */ + +#define GPIO_CRL_CNF4_Pos (18U) +#define GPIO_CRL_CNF4_Msk (0x3U << GPIO_CRL_CNF4_Pos) /*!< 0x000C0000 */ +#define GPIO_CRL_CNF4 GPIO_CRL_CNF4_Msk /*!< CNF4[1:0] bits (Port x configuration bits, pin 4) */ +#define GPIO_CRL_CNF4_0 (0x1U << GPIO_CRL_CNF4_Pos) /*!< 0x00040000 */ +#define GPIO_CRL_CNF4_1 (0x2U << GPIO_CRL_CNF4_Pos) /*!< 0x00080000 */ + +#define GPIO_CRL_CNF5_Pos (22U) +#define GPIO_CRL_CNF5_Msk (0x3U << GPIO_CRL_CNF5_Pos) /*!< 0x00C00000 */ +#define GPIO_CRL_CNF5 GPIO_CRL_CNF5_Msk /*!< CNF5[1:0] bits (Port x configuration bits, pin 5) */ +#define GPIO_CRL_CNF5_0 (0x1U << GPIO_CRL_CNF5_Pos) /*!< 0x00400000 */ +#define GPIO_CRL_CNF5_1 (0x2U << GPIO_CRL_CNF5_Pos) /*!< 0x00800000 */ + +#define GPIO_CRL_CNF6_Pos (26U) +#define GPIO_CRL_CNF6_Msk (0x3U << GPIO_CRL_CNF6_Pos) /*!< 0x0C000000 */ +#define GPIO_CRL_CNF6 GPIO_CRL_CNF6_Msk /*!< CNF6[1:0] bits (Port x configuration bits, pin 6) */ +#define GPIO_CRL_CNF6_0 (0x1U << GPIO_CRL_CNF6_Pos) /*!< 0x04000000 */ +#define GPIO_CRL_CNF6_1 (0x2U << GPIO_CRL_CNF6_Pos) /*!< 0x08000000 */ + +#define GPIO_CRL_CNF7_Pos (30U) +#define GPIO_CRL_CNF7_Msk (0x3U << GPIO_CRL_CNF7_Pos) /*!< 0xC0000000 */ +#define GPIO_CRL_CNF7 GPIO_CRL_CNF7_Msk /*!< CNF7[1:0] bits (Port x configuration bits, pin 7) */ +#define GPIO_CRL_CNF7_0 (0x1U << GPIO_CRL_CNF7_Pos) /*!< 0x40000000 */ +#define GPIO_CRL_CNF7_1 (0x2U << GPIO_CRL_CNF7_Pos) /*!< 0x80000000 */ + +/******************* Bit definition for GPIO_CRH register *******************/ +#define GPIO_CRH_MODE_Pos (0U) +#define GPIO_CRH_MODE_Msk (0x33333333U << GPIO_CRH_MODE_Pos) /*!< 0x33333333 */ +#define GPIO_CRH_MODE GPIO_CRH_MODE_Msk /*!< Port x mode bits */ + +#define GPIO_CRH_MODE8_Pos (0U) +#define GPIO_CRH_MODE8_Msk (0x3U << GPIO_CRH_MODE8_Pos) /*!< 0x00000003 */ +#define GPIO_CRH_MODE8 GPIO_CRH_MODE8_Msk /*!< MODE8[1:0] bits (Port x mode bits, pin 8) */ +#define GPIO_CRH_MODE8_0 (0x1U << GPIO_CRH_MODE8_Pos) /*!< 0x00000001 */ +#define GPIO_CRH_MODE8_1 (0x2U << GPIO_CRH_MODE8_Pos) /*!< 0x00000002 */ + +#define GPIO_CRH_MODE9_Pos (4U) +#define GPIO_CRH_MODE9_Msk (0x3U << GPIO_CRH_MODE9_Pos) /*!< 0x00000030 */ +#define GPIO_CRH_MODE9 GPIO_CRH_MODE9_Msk /*!< MODE9[1:0] bits (Port x mode bits, pin 9) */ +#define GPIO_CRH_MODE9_0 (0x1U << GPIO_CRH_MODE9_Pos) /*!< 0x00000010 */ +#define GPIO_CRH_MODE9_1 (0x2U << GPIO_CRH_MODE9_Pos) /*!< 0x00000020 */ + +#define GPIO_CRH_MODE10_Pos (8U) +#define GPIO_CRH_MODE10_Msk (0x3U << GPIO_CRH_MODE10_Pos) /*!< 0x00000300 */ +#define GPIO_CRH_MODE10 GPIO_CRH_MODE10_Msk /*!< MODE10[1:0] bits (Port x mode bits, pin 10) */ +#define GPIO_CRH_MODE10_0 (0x1U << GPIO_CRH_MODE10_Pos) /*!< 0x00000100 */ +#define GPIO_CRH_MODE10_1 (0x2U << GPIO_CRH_MODE10_Pos) /*!< 0x00000200 */ + +#define GPIO_CRH_MODE11_Pos (12U) +#define GPIO_CRH_MODE11_Msk (0x3U << GPIO_CRH_MODE11_Pos) /*!< 0x00003000 */ +#define GPIO_CRH_MODE11 GPIO_CRH_MODE11_Msk /*!< MODE11[1:0] bits (Port x mode bits, pin 11) */ +#define GPIO_CRH_MODE11_0 (0x1U << GPIO_CRH_MODE11_Pos) /*!< 0x00001000 */ +#define GPIO_CRH_MODE11_1 (0x2U << GPIO_CRH_MODE11_Pos) /*!< 0x00002000 */ + +#define GPIO_CRH_MODE12_Pos (16U) +#define GPIO_CRH_MODE12_Msk (0x3U << GPIO_CRH_MODE12_Pos) /*!< 0x00030000 */ +#define GPIO_CRH_MODE12 GPIO_CRH_MODE12_Msk /*!< MODE12[1:0] bits (Port x mode bits, pin 12) */ +#define GPIO_CRH_MODE12_0 (0x1U << GPIO_CRH_MODE12_Pos) /*!< 0x00010000 */ +#define GPIO_CRH_MODE12_1 (0x2U << GPIO_CRH_MODE12_Pos) /*!< 0x00020000 */ + +#define GPIO_CRH_MODE13_Pos (20U) +#define GPIO_CRH_MODE13_Msk (0x3U << GPIO_CRH_MODE13_Pos) /*!< 0x00300000 */ +#define GPIO_CRH_MODE13 GPIO_CRH_MODE13_Msk /*!< MODE13[1:0] bits (Port x mode bits, pin 13) */ +#define GPIO_CRH_MODE13_0 (0x1U << GPIO_CRH_MODE13_Pos) /*!< 0x00100000 */ +#define GPIO_CRH_MODE13_1 (0x2U << GPIO_CRH_MODE13_Pos) /*!< 0x00200000 */ + +#define GPIO_CRH_MODE14_Pos (24U) +#define GPIO_CRH_MODE14_Msk (0x3U << GPIO_CRH_MODE14_Pos) /*!< 0x03000000 */ +#define GPIO_CRH_MODE14 GPIO_CRH_MODE14_Msk /*!< MODE14[1:0] bits (Port x mode bits, pin 14) */ +#define GPIO_CRH_MODE14_0 (0x1U << GPIO_CRH_MODE14_Pos) /*!< 0x01000000 */ +#define GPIO_CRH_MODE14_1 (0x2U << GPIO_CRH_MODE14_Pos) /*!< 0x02000000 */ + +#define GPIO_CRH_MODE15_Pos (28U) +#define GPIO_CRH_MODE15_Msk (0x3U << GPIO_CRH_MODE15_Pos) /*!< 0x30000000 */ +#define GPIO_CRH_MODE15 GPIO_CRH_MODE15_Msk /*!< MODE15[1:0] bits (Port x mode bits, pin 15) */ +#define GPIO_CRH_MODE15_0 (0x1U << GPIO_CRH_MODE15_Pos) /*!< 0x10000000 */ +#define GPIO_CRH_MODE15_1 (0x2U << GPIO_CRH_MODE15_Pos) /*!< 0x20000000 */ + +#define GPIO_CRH_CNF_Pos (2U) +#define GPIO_CRH_CNF_Msk (0x33333333U << GPIO_CRH_CNF_Pos) /*!< 0xCCCCCCCC */ +#define GPIO_CRH_CNF GPIO_CRH_CNF_Msk /*!< Port x configuration bits */ + +#define GPIO_CRH_CNF8_Pos (2U) +#define GPIO_CRH_CNF8_Msk (0x3U << GPIO_CRH_CNF8_Pos) /*!< 0x0000000C */ +#define GPIO_CRH_CNF8 GPIO_CRH_CNF8_Msk /*!< CNF8[1:0] bits (Port x configuration bits, pin 8) */ +#define GPIO_CRH_CNF8_0 (0x1U << GPIO_CRH_CNF8_Pos) /*!< 0x00000004 */ +#define GPIO_CRH_CNF8_1 (0x2U << GPIO_CRH_CNF8_Pos) /*!< 0x00000008 */ + +#define GPIO_CRH_CNF9_Pos (6U) +#define GPIO_CRH_CNF9_Msk (0x3U << GPIO_CRH_CNF9_Pos) /*!< 0x000000C0 */ +#define GPIO_CRH_CNF9 GPIO_CRH_CNF9_Msk /*!< CNF9[1:0] bits (Port x configuration bits, pin 9) */ +#define GPIO_CRH_CNF9_0 (0x1U << GPIO_CRH_CNF9_Pos) /*!< 0x00000040 */ +#define GPIO_CRH_CNF9_1 (0x2U << GPIO_CRH_CNF9_Pos) /*!< 0x00000080 */ + +#define GPIO_CRH_CNF10_Pos (10U) +#define GPIO_CRH_CNF10_Msk (0x3U << GPIO_CRH_CNF10_Pos) /*!< 0x00000C00 */ +#define GPIO_CRH_CNF10 GPIO_CRH_CNF10_Msk /*!< CNF10[1:0] bits (Port x configuration bits, pin 10) */ +#define GPIO_CRH_CNF10_0 (0x1U << GPIO_CRH_CNF10_Pos) /*!< 0x00000400 */ +#define GPIO_CRH_CNF10_1 (0x2U << GPIO_CRH_CNF10_Pos) /*!< 0x00000800 */ + +#define GPIO_CRH_CNF11_Pos (14U) +#define GPIO_CRH_CNF11_Msk (0x3U << GPIO_CRH_CNF11_Pos) /*!< 0x0000C000 */ +#define GPIO_CRH_CNF11 GPIO_CRH_CNF11_Msk /*!< CNF11[1:0] bits (Port x configuration bits, pin 11) */ +#define GPIO_CRH_CNF11_0 (0x1U << GPIO_CRH_CNF11_Pos) /*!< 0x00004000 */ +#define GPIO_CRH_CNF11_1 (0x2U << GPIO_CRH_CNF11_Pos) /*!< 0x00008000 */ + +#define GPIO_CRH_CNF12_Pos (18U) +#define GPIO_CRH_CNF12_Msk (0x3U << GPIO_CRH_CNF12_Pos) /*!< 0x000C0000 */ +#define GPIO_CRH_CNF12 GPIO_CRH_CNF12_Msk /*!< CNF12[1:0] bits (Port x configuration bits, pin 12) */ +#define GPIO_CRH_CNF12_0 (0x1U << GPIO_CRH_CNF12_Pos) /*!< 0x00040000 */ +#define GPIO_CRH_CNF12_1 (0x2U << GPIO_CRH_CNF12_Pos) /*!< 0x00080000 */ + +#define GPIO_CRH_CNF13_Pos (22U) +#define GPIO_CRH_CNF13_Msk (0x3U << GPIO_CRH_CNF13_Pos) /*!< 0x00C00000 */ +#define GPIO_CRH_CNF13 GPIO_CRH_CNF13_Msk /*!< CNF13[1:0] bits (Port x configuration bits, pin 13) */ +#define GPIO_CRH_CNF13_0 (0x1U << GPIO_CRH_CNF13_Pos) /*!< 0x00400000 */ +#define GPIO_CRH_CNF13_1 (0x2U << GPIO_CRH_CNF13_Pos) /*!< 0x00800000 */ + +#define GPIO_CRH_CNF14_Pos (26U) +#define GPIO_CRH_CNF14_Msk (0x3U << GPIO_CRH_CNF14_Pos) /*!< 0x0C000000 */ +#define GPIO_CRH_CNF14 GPIO_CRH_CNF14_Msk /*!< CNF14[1:0] bits (Port x configuration bits, pin 14) */ +#define GPIO_CRH_CNF14_0 (0x1U << GPIO_CRH_CNF14_Pos) /*!< 0x04000000 */ +#define GPIO_CRH_CNF14_1 (0x2U << GPIO_CRH_CNF14_Pos) /*!< 0x08000000 */ + +#define GPIO_CRH_CNF15_Pos (30U) +#define GPIO_CRH_CNF15_Msk (0x3U << GPIO_CRH_CNF15_Pos) /*!< 0xC0000000 */ +#define GPIO_CRH_CNF15 GPIO_CRH_CNF15_Msk /*!< CNF15[1:0] bits (Port x configuration bits, pin 15) */ +#define GPIO_CRH_CNF15_0 (0x1U << GPIO_CRH_CNF15_Pos) /*!< 0x40000000 */ +#define GPIO_CRH_CNF15_1 (0x2U << GPIO_CRH_CNF15_Pos) /*!< 0x80000000 */ + +/*!<****************** Bit definition for GPIO_IDR register *******************/ +#define GPIO_IDR_IDR0_Pos (0U) +#define GPIO_IDR_IDR0_Msk (0x1U << GPIO_IDR_IDR0_Pos) /*!< 0x00000001 */ +#define GPIO_IDR_IDR0 GPIO_IDR_IDR0_Msk /*!< Port input data, bit 0 */ +#define GPIO_IDR_IDR1_Pos (1U) +#define GPIO_IDR_IDR1_Msk (0x1U << GPIO_IDR_IDR1_Pos) /*!< 0x00000002 */ +#define GPIO_IDR_IDR1 GPIO_IDR_IDR1_Msk /*!< Port input data, bit 1 */ +#define GPIO_IDR_IDR2_Pos (2U) +#define GPIO_IDR_IDR2_Msk (0x1U << GPIO_IDR_IDR2_Pos) /*!< 0x00000004 */ +#define GPIO_IDR_IDR2 GPIO_IDR_IDR2_Msk /*!< Port input data, bit 2 */ +#define GPIO_IDR_IDR3_Pos (3U) +#define GPIO_IDR_IDR3_Msk (0x1U << GPIO_IDR_IDR3_Pos) /*!< 0x00000008 */ +#define GPIO_IDR_IDR3 GPIO_IDR_IDR3_Msk /*!< Port input data, bit 3 */ +#define GPIO_IDR_IDR4_Pos (4U) +#define GPIO_IDR_IDR4_Msk (0x1U << GPIO_IDR_IDR4_Pos) /*!< 0x00000010 */ +#define GPIO_IDR_IDR4 GPIO_IDR_IDR4_Msk /*!< Port input data, bit 4 */ +#define GPIO_IDR_IDR5_Pos (5U) +#define GPIO_IDR_IDR5_Msk (0x1U << GPIO_IDR_IDR5_Pos) /*!< 0x00000020 */ +#define GPIO_IDR_IDR5 GPIO_IDR_IDR5_Msk /*!< Port input data, bit 5 */ +#define GPIO_IDR_IDR6_Pos (6U) +#define GPIO_IDR_IDR6_Msk (0x1U << GPIO_IDR_IDR6_Pos) /*!< 0x00000040 */ +#define GPIO_IDR_IDR6 GPIO_IDR_IDR6_Msk /*!< Port input data, bit 6 */ +#define GPIO_IDR_IDR7_Pos (7U) +#define GPIO_IDR_IDR7_Msk (0x1U << GPIO_IDR_IDR7_Pos) /*!< 0x00000080 */ +#define GPIO_IDR_IDR7 GPIO_IDR_IDR7_Msk /*!< Port input data, bit 7 */ +#define GPIO_IDR_IDR8_Pos (8U) +#define GPIO_IDR_IDR8_Msk (0x1U << GPIO_IDR_IDR8_Pos) /*!< 0x00000100 */ +#define GPIO_IDR_IDR8 GPIO_IDR_IDR8_Msk /*!< Port input data, bit 8 */ +#define GPIO_IDR_IDR9_Pos (9U) +#define GPIO_IDR_IDR9_Msk (0x1U << GPIO_IDR_IDR9_Pos) /*!< 0x00000200 */ +#define GPIO_IDR_IDR9 GPIO_IDR_IDR9_Msk /*!< Port input data, bit 9 */ +#define GPIO_IDR_IDR10_Pos (10U) +#define GPIO_IDR_IDR10_Msk (0x1U << GPIO_IDR_IDR10_Pos) /*!< 0x00000400 */ +#define GPIO_IDR_IDR10 GPIO_IDR_IDR10_Msk /*!< Port input data, bit 10 */ +#define GPIO_IDR_IDR11_Pos (11U) +#define GPIO_IDR_IDR11_Msk (0x1U << GPIO_IDR_IDR11_Pos) /*!< 0x00000800 */ +#define GPIO_IDR_IDR11 GPIO_IDR_IDR11_Msk /*!< Port input data, bit 11 */ +#define GPIO_IDR_IDR12_Pos (12U) +#define GPIO_IDR_IDR12_Msk (0x1U << GPIO_IDR_IDR12_Pos) /*!< 0x00001000 */ +#define GPIO_IDR_IDR12 GPIO_IDR_IDR12_Msk /*!< Port input data, bit 12 */ +#define GPIO_IDR_IDR13_Pos (13U) +#define GPIO_IDR_IDR13_Msk (0x1U << GPIO_IDR_IDR13_Pos) /*!< 0x00002000 */ +#define GPIO_IDR_IDR13 GPIO_IDR_IDR13_Msk /*!< Port input data, bit 13 */ +#define GPIO_IDR_IDR14_Pos (14U) +#define GPIO_IDR_IDR14_Msk (0x1U << GPIO_IDR_IDR14_Pos) /*!< 0x00004000 */ +#define GPIO_IDR_IDR14 GPIO_IDR_IDR14_Msk /*!< Port input data, bit 14 */ +#define GPIO_IDR_IDR15_Pos (15U) +#define GPIO_IDR_IDR15_Msk (0x1U << GPIO_IDR_IDR15_Pos) /*!< 0x00008000 */ +#define GPIO_IDR_IDR15 GPIO_IDR_IDR15_Msk /*!< Port input data, bit 15 */ + +/******************* Bit definition for GPIO_ODR register *******************/ +#define GPIO_ODR_ODR0_Pos (0U) +#define GPIO_ODR_ODR0_Msk (0x1U << GPIO_ODR_ODR0_Pos) /*!< 0x00000001 */ +#define GPIO_ODR_ODR0 GPIO_ODR_ODR0_Msk /*!< Port output data, bit 0 */ +#define GPIO_ODR_ODR1_Pos (1U) +#define GPIO_ODR_ODR1_Msk (0x1U << GPIO_ODR_ODR1_Pos) /*!< 0x00000002 */ +#define GPIO_ODR_ODR1 GPIO_ODR_ODR1_Msk /*!< Port output data, bit 1 */ +#define GPIO_ODR_ODR2_Pos (2U) +#define GPIO_ODR_ODR2_Msk (0x1U << GPIO_ODR_ODR2_Pos) /*!< 0x00000004 */ +#define GPIO_ODR_ODR2 GPIO_ODR_ODR2_Msk /*!< Port output data, bit 2 */ +#define GPIO_ODR_ODR3_Pos (3U) +#define GPIO_ODR_ODR3_Msk (0x1U << GPIO_ODR_ODR3_Pos) /*!< 0x00000008 */ +#define GPIO_ODR_ODR3 GPIO_ODR_ODR3_Msk /*!< Port output data, bit 3 */ +#define GPIO_ODR_ODR4_Pos (4U) +#define GPIO_ODR_ODR4_Msk (0x1U << GPIO_ODR_ODR4_Pos) /*!< 0x00000010 */ +#define GPIO_ODR_ODR4 GPIO_ODR_ODR4_Msk /*!< Port output data, bit 4 */ +#define GPIO_ODR_ODR5_Pos (5U) +#define GPIO_ODR_ODR5_Msk (0x1U << GPIO_ODR_ODR5_Pos) /*!< 0x00000020 */ +#define GPIO_ODR_ODR5 GPIO_ODR_ODR5_Msk /*!< Port output data, bit 5 */ +#define GPIO_ODR_ODR6_Pos (6U) +#define GPIO_ODR_ODR6_Msk (0x1U << GPIO_ODR_ODR6_Pos) /*!< 0x00000040 */ +#define GPIO_ODR_ODR6 GPIO_ODR_ODR6_Msk /*!< Port output data, bit 6 */ +#define GPIO_ODR_ODR7_Pos (7U) +#define GPIO_ODR_ODR7_Msk (0x1U << GPIO_ODR_ODR7_Pos) /*!< 0x00000080 */ +#define GPIO_ODR_ODR7 GPIO_ODR_ODR7_Msk /*!< Port output data, bit 7 */ +#define GPIO_ODR_ODR8_Pos (8U) +#define GPIO_ODR_ODR8_Msk (0x1U << GPIO_ODR_ODR8_Pos) /*!< 0x00000100 */ +#define GPIO_ODR_ODR8 GPIO_ODR_ODR8_Msk /*!< Port output data, bit 8 */ +#define GPIO_ODR_ODR9_Pos (9U) +#define GPIO_ODR_ODR9_Msk (0x1U << GPIO_ODR_ODR9_Pos) /*!< 0x00000200 */ +#define GPIO_ODR_ODR9 GPIO_ODR_ODR9_Msk /*!< Port output data, bit 9 */ +#define GPIO_ODR_ODR10_Pos (10U) +#define GPIO_ODR_ODR10_Msk (0x1U << GPIO_ODR_ODR10_Pos) /*!< 0x00000400 */ +#define GPIO_ODR_ODR10 GPIO_ODR_ODR10_Msk /*!< Port output data, bit 10 */ +#define GPIO_ODR_ODR11_Pos (11U) +#define GPIO_ODR_ODR11_Msk (0x1U << GPIO_ODR_ODR11_Pos) /*!< 0x00000800 */ +#define GPIO_ODR_ODR11 GPIO_ODR_ODR11_Msk /*!< Port output data, bit 11 */ +#define GPIO_ODR_ODR12_Pos (12U) +#define GPIO_ODR_ODR12_Msk (0x1U << GPIO_ODR_ODR12_Pos) /*!< 0x00001000 */ +#define GPIO_ODR_ODR12 GPIO_ODR_ODR12_Msk /*!< Port output data, bit 12 */ +#define GPIO_ODR_ODR13_Pos (13U) +#define GPIO_ODR_ODR13_Msk (0x1U << GPIO_ODR_ODR13_Pos) /*!< 0x00002000 */ +#define GPIO_ODR_ODR13 GPIO_ODR_ODR13_Msk /*!< Port output data, bit 13 */ +#define GPIO_ODR_ODR14_Pos (14U) +#define GPIO_ODR_ODR14_Msk (0x1U << GPIO_ODR_ODR14_Pos) /*!< 0x00004000 */ +#define GPIO_ODR_ODR14 GPIO_ODR_ODR14_Msk /*!< Port output data, bit 14 */ +#define GPIO_ODR_ODR15_Pos (15U) +#define GPIO_ODR_ODR15_Msk (0x1U << GPIO_ODR_ODR15_Pos) /*!< 0x00008000 */ +#define GPIO_ODR_ODR15 GPIO_ODR_ODR15_Msk /*!< Port output data, bit 15 */ + +/****************** Bit definition for GPIO_BSRR register *******************/ +#define GPIO_BSRR_BS0_Pos (0U) +#define GPIO_BSRR_BS0_Msk (0x1U << GPIO_BSRR_BS0_Pos) /*!< 0x00000001 */ +#define GPIO_BSRR_BS0 GPIO_BSRR_BS0_Msk /*!< Port x Set bit 0 */ +#define GPIO_BSRR_BS1_Pos (1U) +#define GPIO_BSRR_BS1_Msk (0x1U << GPIO_BSRR_BS1_Pos) /*!< 0x00000002 */ +#define GPIO_BSRR_BS1 GPIO_BSRR_BS1_Msk /*!< Port x Set bit 1 */ +#define GPIO_BSRR_BS2_Pos (2U) +#define GPIO_BSRR_BS2_Msk (0x1U << GPIO_BSRR_BS2_Pos) /*!< 0x00000004 */ +#define GPIO_BSRR_BS2 GPIO_BSRR_BS2_Msk /*!< Port x Set bit 2 */ +#define GPIO_BSRR_BS3_Pos (3U) +#define GPIO_BSRR_BS3_Msk (0x1U << GPIO_BSRR_BS3_Pos) /*!< 0x00000008 */ +#define GPIO_BSRR_BS3 GPIO_BSRR_BS3_Msk /*!< Port x Set bit 3 */ +#define GPIO_BSRR_BS4_Pos (4U) +#define GPIO_BSRR_BS4_Msk (0x1U << GPIO_BSRR_BS4_Pos) /*!< 0x00000010 */ +#define GPIO_BSRR_BS4 GPIO_BSRR_BS4_Msk /*!< Port x Set bit 4 */ +#define GPIO_BSRR_BS5_Pos (5U) +#define GPIO_BSRR_BS5_Msk (0x1U << GPIO_BSRR_BS5_Pos) /*!< 0x00000020 */ +#define GPIO_BSRR_BS5 GPIO_BSRR_BS5_Msk /*!< Port x Set bit 5 */ +#define GPIO_BSRR_BS6_Pos (6U) +#define GPIO_BSRR_BS6_Msk (0x1U << GPIO_BSRR_BS6_Pos) /*!< 0x00000040 */ +#define GPIO_BSRR_BS6 GPIO_BSRR_BS6_Msk /*!< Port x Set bit 6 */ +#define GPIO_BSRR_BS7_Pos (7U) +#define GPIO_BSRR_BS7_Msk (0x1U << GPIO_BSRR_BS7_Pos) /*!< 0x00000080 */ +#define GPIO_BSRR_BS7 GPIO_BSRR_BS7_Msk /*!< Port x Set bit 7 */ +#define GPIO_BSRR_BS8_Pos (8U) +#define GPIO_BSRR_BS8_Msk (0x1U << GPIO_BSRR_BS8_Pos) /*!< 0x00000100 */ +#define GPIO_BSRR_BS8 GPIO_BSRR_BS8_Msk /*!< Port x Set bit 8 */ +#define GPIO_BSRR_BS9_Pos (9U) +#define GPIO_BSRR_BS9_Msk (0x1U << GPIO_BSRR_BS9_Pos) /*!< 0x00000200 */ +#define GPIO_BSRR_BS9 GPIO_BSRR_BS9_Msk /*!< Port x Set bit 9 */ +#define GPIO_BSRR_BS10_Pos (10U) +#define GPIO_BSRR_BS10_Msk (0x1U << GPIO_BSRR_BS10_Pos) /*!< 0x00000400 */ +#define GPIO_BSRR_BS10 GPIO_BSRR_BS10_Msk /*!< Port x Set bit 10 */ +#define GPIO_BSRR_BS11_Pos (11U) +#define GPIO_BSRR_BS11_Msk (0x1U << GPIO_BSRR_BS11_Pos) /*!< 0x00000800 */ +#define GPIO_BSRR_BS11 GPIO_BSRR_BS11_Msk /*!< Port x Set bit 11 */ +#define GPIO_BSRR_BS12_Pos (12U) +#define GPIO_BSRR_BS12_Msk (0x1U << GPIO_BSRR_BS12_Pos) /*!< 0x00001000 */ +#define GPIO_BSRR_BS12 GPIO_BSRR_BS12_Msk /*!< Port x Set bit 12 */ +#define GPIO_BSRR_BS13_Pos (13U) +#define GPIO_BSRR_BS13_Msk (0x1U << GPIO_BSRR_BS13_Pos) /*!< 0x00002000 */ +#define GPIO_BSRR_BS13 GPIO_BSRR_BS13_Msk /*!< Port x Set bit 13 */ +#define GPIO_BSRR_BS14_Pos (14U) +#define GPIO_BSRR_BS14_Msk (0x1U << GPIO_BSRR_BS14_Pos) /*!< 0x00004000 */ +#define GPIO_BSRR_BS14 GPIO_BSRR_BS14_Msk /*!< Port x Set bit 14 */ +#define GPIO_BSRR_BS15_Pos (15U) +#define GPIO_BSRR_BS15_Msk (0x1U << GPIO_BSRR_BS15_Pos) /*!< 0x00008000 */ +#define GPIO_BSRR_BS15 GPIO_BSRR_BS15_Msk /*!< Port x Set bit 15 */ + +#define GPIO_BSRR_BR0_Pos (16U) +#define GPIO_BSRR_BR0_Msk (0x1U << GPIO_BSRR_BR0_Pos) /*!< 0x00010000 */ +#define GPIO_BSRR_BR0 GPIO_BSRR_BR0_Msk /*!< Port x Reset bit 0 */ +#define GPIO_BSRR_BR1_Pos (17U) +#define GPIO_BSRR_BR1_Msk (0x1U << GPIO_BSRR_BR1_Pos) /*!< 0x00020000 */ +#define GPIO_BSRR_BR1 GPIO_BSRR_BR1_Msk /*!< Port x Reset bit 1 */ +#define GPIO_BSRR_BR2_Pos (18U) +#define GPIO_BSRR_BR2_Msk (0x1U << GPIO_BSRR_BR2_Pos) /*!< 0x00040000 */ +#define GPIO_BSRR_BR2 GPIO_BSRR_BR2_Msk /*!< Port x Reset bit 2 */ +#define GPIO_BSRR_BR3_Pos (19U) +#define GPIO_BSRR_BR3_Msk (0x1U << GPIO_BSRR_BR3_Pos) /*!< 0x00080000 */ +#define GPIO_BSRR_BR3 GPIO_BSRR_BR3_Msk /*!< Port x Reset bit 3 */ +#define GPIO_BSRR_BR4_Pos (20U) +#define GPIO_BSRR_BR4_Msk (0x1U << GPIO_BSRR_BR4_Pos) /*!< 0x00100000 */ +#define GPIO_BSRR_BR4 GPIO_BSRR_BR4_Msk /*!< Port x Reset bit 4 */ +#define GPIO_BSRR_BR5_Pos (21U) +#define GPIO_BSRR_BR5_Msk (0x1U << GPIO_BSRR_BR5_Pos) /*!< 0x00200000 */ +#define GPIO_BSRR_BR5 GPIO_BSRR_BR5_Msk /*!< Port x Reset bit 5 */ +#define GPIO_BSRR_BR6_Pos (22U) +#define GPIO_BSRR_BR6_Msk (0x1U << GPIO_BSRR_BR6_Pos) /*!< 0x00400000 */ +#define GPIO_BSRR_BR6 GPIO_BSRR_BR6_Msk /*!< Port x Reset bit 6 */ +#define GPIO_BSRR_BR7_Pos (23U) +#define GPIO_BSRR_BR7_Msk (0x1U << GPIO_BSRR_BR7_Pos) /*!< 0x00800000 */ +#define GPIO_BSRR_BR7 GPIO_BSRR_BR7_Msk /*!< Port x Reset bit 7 */ +#define GPIO_BSRR_BR8_Pos (24U) +#define GPIO_BSRR_BR8_Msk (0x1U << GPIO_BSRR_BR8_Pos) /*!< 0x01000000 */ +#define GPIO_BSRR_BR8 GPIO_BSRR_BR8_Msk /*!< Port x Reset bit 8 */ +#define GPIO_BSRR_BR9_Pos (25U) +#define GPIO_BSRR_BR9_Msk (0x1U << GPIO_BSRR_BR9_Pos) /*!< 0x02000000 */ +#define GPIO_BSRR_BR9 GPIO_BSRR_BR9_Msk /*!< Port x Reset bit 9 */ +#define GPIO_BSRR_BR10_Pos (26U) +#define GPIO_BSRR_BR10_Msk (0x1U << GPIO_BSRR_BR10_Pos) /*!< 0x04000000 */ +#define GPIO_BSRR_BR10 GPIO_BSRR_BR10_Msk /*!< Port x Reset bit 10 */ +#define GPIO_BSRR_BR11_Pos (27U) +#define GPIO_BSRR_BR11_Msk (0x1U << GPIO_BSRR_BR11_Pos) /*!< 0x08000000 */ +#define GPIO_BSRR_BR11 GPIO_BSRR_BR11_Msk /*!< Port x Reset bit 11 */ +#define GPIO_BSRR_BR12_Pos (28U) +#define GPIO_BSRR_BR12_Msk (0x1U << GPIO_BSRR_BR12_Pos) /*!< 0x10000000 */ +#define GPIO_BSRR_BR12 GPIO_BSRR_BR12_Msk /*!< Port x Reset bit 12 */ +#define GPIO_BSRR_BR13_Pos (29U) +#define GPIO_BSRR_BR13_Msk (0x1U << GPIO_BSRR_BR13_Pos) /*!< 0x20000000 */ +#define GPIO_BSRR_BR13 GPIO_BSRR_BR13_Msk /*!< Port x Reset bit 13 */ +#define GPIO_BSRR_BR14_Pos (30U) +#define GPIO_BSRR_BR14_Msk (0x1U << GPIO_BSRR_BR14_Pos) /*!< 0x40000000 */ +#define GPIO_BSRR_BR14 GPIO_BSRR_BR14_Msk /*!< Port x Reset bit 14 */ +#define GPIO_BSRR_BR15_Pos (31U) +#define GPIO_BSRR_BR15_Msk (0x1U << GPIO_BSRR_BR15_Pos) /*!< 0x80000000 */ +#define GPIO_BSRR_BR15 GPIO_BSRR_BR15_Msk /*!< Port x Reset bit 15 */ + +/******************* Bit definition for GPIO_BRR register *******************/ +#define GPIO_BRR_BR0_Pos (0U) +#define GPIO_BRR_BR0_Msk (0x1U << GPIO_BRR_BR0_Pos) /*!< 0x00000001 */ +#define GPIO_BRR_BR0 GPIO_BRR_BR0_Msk /*!< Port x Reset bit 0 */ +#define GPIO_BRR_BR1_Pos (1U) +#define GPIO_BRR_BR1_Msk (0x1U << GPIO_BRR_BR1_Pos) /*!< 0x00000002 */ +#define GPIO_BRR_BR1 GPIO_BRR_BR1_Msk /*!< Port x Reset bit 1 */ +#define GPIO_BRR_BR2_Pos (2U) +#define GPIO_BRR_BR2_Msk (0x1U << GPIO_BRR_BR2_Pos) /*!< 0x00000004 */ +#define GPIO_BRR_BR2 GPIO_BRR_BR2_Msk /*!< Port x Reset bit 2 */ +#define GPIO_BRR_BR3_Pos (3U) +#define GPIO_BRR_BR3_Msk (0x1U << GPIO_BRR_BR3_Pos) /*!< 0x00000008 */ +#define GPIO_BRR_BR3 GPIO_BRR_BR3_Msk /*!< Port x Reset bit 3 */ +#define GPIO_BRR_BR4_Pos (4U) +#define GPIO_BRR_BR4_Msk (0x1U << GPIO_BRR_BR4_Pos) /*!< 0x00000010 */ +#define GPIO_BRR_BR4 GPIO_BRR_BR4_Msk /*!< Port x Reset bit 4 */ +#define GPIO_BRR_BR5_Pos (5U) +#define GPIO_BRR_BR5_Msk (0x1U << GPIO_BRR_BR5_Pos) /*!< 0x00000020 */ +#define GPIO_BRR_BR5 GPIO_BRR_BR5_Msk /*!< Port x Reset bit 5 */ +#define GPIO_BRR_BR6_Pos (6U) +#define GPIO_BRR_BR6_Msk (0x1U << GPIO_BRR_BR6_Pos) /*!< 0x00000040 */ +#define GPIO_BRR_BR6 GPIO_BRR_BR6_Msk /*!< Port x Reset bit 6 */ +#define GPIO_BRR_BR7_Pos (7U) +#define GPIO_BRR_BR7_Msk (0x1U << GPIO_BRR_BR7_Pos) /*!< 0x00000080 */ +#define GPIO_BRR_BR7 GPIO_BRR_BR7_Msk /*!< Port x Reset bit 7 */ +#define GPIO_BRR_BR8_Pos (8U) +#define GPIO_BRR_BR8_Msk (0x1U << GPIO_BRR_BR8_Pos) /*!< 0x00000100 */ +#define GPIO_BRR_BR8 GPIO_BRR_BR8_Msk /*!< Port x Reset bit 8 */ +#define GPIO_BRR_BR9_Pos (9U) +#define GPIO_BRR_BR9_Msk (0x1U << GPIO_BRR_BR9_Pos) /*!< 0x00000200 */ +#define GPIO_BRR_BR9 GPIO_BRR_BR9_Msk /*!< Port x Reset bit 9 */ +#define GPIO_BRR_BR10_Pos (10U) +#define GPIO_BRR_BR10_Msk (0x1U << GPIO_BRR_BR10_Pos) /*!< 0x00000400 */ +#define GPIO_BRR_BR10 GPIO_BRR_BR10_Msk /*!< Port x Reset bit 10 */ +#define GPIO_BRR_BR11_Pos (11U) +#define GPIO_BRR_BR11_Msk (0x1U << GPIO_BRR_BR11_Pos) /*!< 0x00000800 */ +#define GPIO_BRR_BR11 GPIO_BRR_BR11_Msk /*!< Port x Reset bit 11 */ +#define GPIO_BRR_BR12_Pos (12U) +#define GPIO_BRR_BR12_Msk (0x1U << GPIO_BRR_BR12_Pos) /*!< 0x00001000 */ +#define GPIO_BRR_BR12 GPIO_BRR_BR12_Msk /*!< Port x Reset bit 12 */ +#define GPIO_BRR_BR13_Pos (13U) +#define GPIO_BRR_BR13_Msk (0x1U << GPIO_BRR_BR13_Pos) /*!< 0x00002000 */ +#define GPIO_BRR_BR13 GPIO_BRR_BR13_Msk /*!< Port x Reset bit 13 */ +#define GPIO_BRR_BR14_Pos (14U) +#define GPIO_BRR_BR14_Msk (0x1U << GPIO_BRR_BR14_Pos) /*!< 0x00004000 */ +#define GPIO_BRR_BR14 GPIO_BRR_BR14_Msk /*!< Port x Reset bit 14 */ +#define GPIO_BRR_BR15_Pos (15U) +#define GPIO_BRR_BR15_Msk (0x1U << GPIO_BRR_BR15_Pos) /*!< 0x00008000 */ +#define GPIO_BRR_BR15 GPIO_BRR_BR15_Msk /*!< Port x Reset bit 15 */ + +/****************** Bit definition for GPIO_LCKR register *******************/ +#define GPIO_LCKR_LCK0_Pos (0U) +#define GPIO_LCKR_LCK0_Msk (0x1U << GPIO_LCKR_LCK0_Pos) /*!< 0x00000001 */ +#define GPIO_LCKR_LCK0 GPIO_LCKR_LCK0_Msk /*!< Port x Lock bit 0 */ +#define GPIO_LCKR_LCK1_Pos (1U) +#define GPIO_LCKR_LCK1_Msk (0x1U << GPIO_LCKR_LCK1_Pos) /*!< 0x00000002 */ +#define GPIO_LCKR_LCK1 GPIO_LCKR_LCK1_Msk /*!< Port x Lock bit 1 */ +#define GPIO_LCKR_LCK2_Pos (2U) +#define GPIO_LCKR_LCK2_Msk (0x1U << GPIO_LCKR_LCK2_Pos) /*!< 0x00000004 */ +#define GPIO_LCKR_LCK2 GPIO_LCKR_LCK2_Msk /*!< Port x Lock bit 2 */ +#define GPIO_LCKR_LCK3_Pos (3U) +#define GPIO_LCKR_LCK3_Msk (0x1U << GPIO_LCKR_LCK3_Pos) /*!< 0x00000008 */ +#define GPIO_LCKR_LCK3 GPIO_LCKR_LCK3_Msk /*!< Port x Lock bit 3 */ +#define GPIO_LCKR_LCK4_Pos (4U) +#define GPIO_LCKR_LCK4_Msk (0x1U << GPIO_LCKR_LCK4_Pos) /*!< 0x00000010 */ +#define GPIO_LCKR_LCK4 GPIO_LCKR_LCK4_Msk /*!< Port x Lock bit 4 */ +#define GPIO_LCKR_LCK5_Pos (5U) +#define GPIO_LCKR_LCK5_Msk (0x1U << GPIO_LCKR_LCK5_Pos) /*!< 0x00000020 */ +#define GPIO_LCKR_LCK5 GPIO_LCKR_LCK5_Msk /*!< Port x Lock bit 5 */ +#define GPIO_LCKR_LCK6_Pos (6U) +#define GPIO_LCKR_LCK6_Msk (0x1U << GPIO_LCKR_LCK6_Pos) /*!< 0x00000040 */ +#define GPIO_LCKR_LCK6 GPIO_LCKR_LCK6_Msk /*!< Port x Lock bit 6 */ +#define GPIO_LCKR_LCK7_Pos (7U) +#define GPIO_LCKR_LCK7_Msk (0x1U << GPIO_LCKR_LCK7_Pos) /*!< 0x00000080 */ +#define GPIO_LCKR_LCK7 GPIO_LCKR_LCK7_Msk /*!< Port x Lock bit 7 */ +#define GPIO_LCKR_LCK8_Pos (8U) +#define GPIO_LCKR_LCK8_Msk (0x1U << GPIO_LCKR_LCK8_Pos) /*!< 0x00000100 */ +#define GPIO_LCKR_LCK8 GPIO_LCKR_LCK8_Msk /*!< Port x Lock bit 8 */ +#define GPIO_LCKR_LCK9_Pos (9U) +#define GPIO_LCKR_LCK9_Msk (0x1U << GPIO_LCKR_LCK9_Pos) /*!< 0x00000200 */ +#define GPIO_LCKR_LCK9 GPIO_LCKR_LCK9_Msk /*!< Port x Lock bit 9 */ +#define GPIO_LCKR_LCK10_Pos (10U) +#define GPIO_LCKR_LCK10_Msk (0x1U << GPIO_LCKR_LCK10_Pos) /*!< 0x00000400 */ +#define GPIO_LCKR_LCK10 GPIO_LCKR_LCK10_Msk /*!< Port x Lock bit 10 */ +#define GPIO_LCKR_LCK11_Pos (11U) +#define GPIO_LCKR_LCK11_Msk (0x1U << GPIO_LCKR_LCK11_Pos) /*!< 0x00000800 */ +#define GPIO_LCKR_LCK11 GPIO_LCKR_LCK11_Msk /*!< Port x Lock bit 11 */ +#define GPIO_LCKR_LCK12_Pos (12U) +#define GPIO_LCKR_LCK12_Msk (0x1U << GPIO_LCKR_LCK12_Pos) /*!< 0x00001000 */ +#define GPIO_LCKR_LCK12 GPIO_LCKR_LCK12_Msk /*!< Port x Lock bit 12 */ +#define GPIO_LCKR_LCK13_Pos (13U) +#define GPIO_LCKR_LCK13_Msk (0x1U << GPIO_LCKR_LCK13_Pos) /*!< 0x00002000 */ +#define GPIO_LCKR_LCK13 GPIO_LCKR_LCK13_Msk /*!< Port x Lock bit 13 */ +#define GPIO_LCKR_LCK14_Pos (14U) +#define GPIO_LCKR_LCK14_Msk (0x1U << GPIO_LCKR_LCK14_Pos) /*!< 0x00004000 */ +#define GPIO_LCKR_LCK14 GPIO_LCKR_LCK14_Msk /*!< Port x Lock bit 14 */ +#define GPIO_LCKR_LCK15_Pos (15U) +#define GPIO_LCKR_LCK15_Msk (0x1U << GPIO_LCKR_LCK15_Pos) /*!< 0x00008000 */ +#define GPIO_LCKR_LCK15 GPIO_LCKR_LCK15_Msk /*!< Port x Lock bit 15 */ +#define GPIO_LCKR_LCKK_Pos (16U) +#define GPIO_LCKR_LCKK_Msk (0x1U << GPIO_LCKR_LCKK_Pos) /*!< 0x00010000 */ +#define GPIO_LCKR_LCKK GPIO_LCKR_LCKK_Msk /*!< Lock key */ + +/*----------------------------------------------------------------------------*/ + +/****************** Bit definition for AFIO_EVCR register *******************/ +#define AFIO_EVCR_PIN_Pos (0U) +#define AFIO_EVCR_PIN_Msk (0xFU << AFIO_EVCR_PIN_Pos) /*!< 0x0000000F */ +#define AFIO_EVCR_PIN AFIO_EVCR_PIN_Msk /*!< PIN[3:0] bits (Pin selection) */ +#define AFIO_EVCR_PIN_0 (0x1U << AFIO_EVCR_PIN_Pos) /*!< 0x00000001 */ +#define AFIO_EVCR_PIN_1 (0x2U << AFIO_EVCR_PIN_Pos) /*!< 0x00000002 */ +#define AFIO_EVCR_PIN_2 (0x4U << AFIO_EVCR_PIN_Pos) /*!< 0x00000004 */ +#define AFIO_EVCR_PIN_3 (0x8U << AFIO_EVCR_PIN_Pos) /*!< 0x00000008 */ + +/*!< PIN configuration */ +#define AFIO_EVCR_PIN_PX0 ((uint32_t)0x00000000) /*!< Pin 0 selected */ +#define AFIO_EVCR_PIN_PX1_Pos (0U) +#define AFIO_EVCR_PIN_PX1_Msk (0x1U << AFIO_EVCR_PIN_PX1_Pos) /*!< 0x00000001 */ +#define AFIO_EVCR_PIN_PX1 AFIO_EVCR_PIN_PX1_Msk /*!< Pin 1 selected */ +#define AFIO_EVCR_PIN_PX2_Pos (1U) +#define AFIO_EVCR_PIN_PX2_Msk (0x1U << AFIO_EVCR_PIN_PX2_Pos) /*!< 0x00000002 */ +#define AFIO_EVCR_PIN_PX2 AFIO_EVCR_PIN_PX2_Msk /*!< Pin 2 selected */ +#define AFIO_EVCR_PIN_PX3_Pos (0U) +#define AFIO_EVCR_PIN_PX3_Msk (0x3U << AFIO_EVCR_PIN_PX3_Pos) /*!< 0x00000003 */ +#define AFIO_EVCR_PIN_PX3 AFIO_EVCR_PIN_PX3_Msk /*!< Pin 3 selected */ +#define AFIO_EVCR_PIN_PX4_Pos (2U) +#define AFIO_EVCR_PIN_PX4_Msk (0x1U << AFIO_EVCR_PIN_PX4_Pos) /*!< 0x00000004 */ +#define AFIO_EVCR_PIN_PX4 AFIO_EVCR_PIN_PX4_Msk /*!< Pin 4 selected */ +#define AFIO_EVCR_PIN_PX5_Pos (0U) +#define AFIO_EVCR_PIN_PX5_Msk (0x5U << AFIO_EVCR_PIN_PX5_Pos) /*!< 0x00000005 */ +#define AFIO_EVCR_PIN_PX5 AFIO_EVCR_PIN_PX5_Msk /*!< Pin 5 selected */ +#define AFIO_EVCR_PIN_PX6_Pos (1U) +#define AFIO_EVCR_PIN_PX6_Msk (0x3U << AFIO_EVCR_PIN_PX6_Pos) /*!< 0x00000006 */ +#define AFIO_EVCR_PIN_PX6 AFIO_EVCR_PIN_PX6_Msk /*!< Pin 6 selected */ +#define AFIO_EVCR_PIN_PX7_Pos (0U) +#define AFIO_EVCR_PIN_PX7_Msk (0x7U << AFIO_EVCR_PIN_PX7_Pos) /*!< 0x00000007 */ +#define AFIO_EVCR_PIN_PX7 AFIO_EVCR_PIN_PX7_Msk /*!< Pin 7 selected */ +#define AFIO_EVCR_PIN_PX8_Pos (3U) +#define AFIO_EVCR_PIN_PX8_Msk (0x1U << AFIO_EVCR_PIN_PX8_Pos) /*!< 0x00000008 */ +#define AFIO_EVCR_PIN_PX8 AFIO_EVCR_PIN_PX8_Msk /*!< Pin 8 selected */ +#define AFIO_EVCR_PIN_PX9_Pos (0U) +#define AFIO_EVCR_PIN_PX9_Msk (0x9U << AFIO_EVCR_PIN_PX9_Pos) /*!< 0x00000009 */ +#define AFIO_EVCR_PIN_PX9 AFIO_EVCR_PIN_PX9_Msk /*!< Pin 9 selected */ +#define AFIO_EVCR_PIN_PX10_Pos (1U) +#define AFIO_EVCR_PIN_PX10_Msk (0x5U << AFIO_EVCR_PIN_PX10_Pos) /*!< 0x0000000A */ +#define AFIO_EVCR_PIN_PX10 AFIO_EVCR_PIN_PX10_Msk /*!< Pin 10 selected */ +#define AFIO_EVCR_PIN_PX11_Pos (0U) +#define AFIO_EVCR_PIN_PX11_Msk (0xBU << AFIO_EVCR_PIN_PX11_Pos) /*!< 0x0000000B */ +#define AFIO_EVCR_PIN_PX11 AFIO_EVCR_PIN_PX11_Msk /*!< Pin 11 selected */ +#define AFIO_EVCR_PIN_PX12_Pos (2U) +#define AFIO_EVCR_PIN_PX12_Msk (0x3U << AFIO_EVCR_PIN_PX12_Pos) /*!< 0x0000000C */ +#define AFIO_EVCR_PIN_PX12 AFIO_EVCR_PIN_PX12_Msk /*!< Pin 12 selected */ +#define AFIO_EVCR_PIN_PX13_Pos (0U) +#define AFIO_EVCR_PIN_PX13_Msk (0xDU << AFIO_EVCR_PIN_PX13_Pos) /*!< 0x0000000D */ +#define AFIO_EVCR_PIN_PX13 AFIO_EVCR_PIN_PX13_Msk /*!< Pin 13 selected */ +#define AFIO_EVCR_PIN_PX14_Pos (1U) +#define AFIO_EVCR_PIN_PX14_Msk (0x7U << AFIO_EVCR_PIN_PX14_Pos) /*!< 0x0000000E */ +#define AFIO_EVCR_PIN_PX14 AFIO_EVCR_PIN_PX14_Msk /*!< Pin 14 selected */ +#define AFIO_EVCR_PIN_PX15_Pos (0U) +#define AFIO_EVCR_PIN_PX15_Msk (0xFU << AFIO_EVCR_PIN_PX15_Pos) /*!< 0x0000000F */ +#define AFIO_EVCR_PIN_PX15 AFIO_EVCR_PIN_PX15_Msk /*!< Pin 15 selected */ + +#define AFIO_EVCR_PORT_Pos (4U) +#define AFIO_EVCR_PORT_Msk (0x7U << AFIO_EVCR_PORT_Pos) /*!< 0x00000070 */ +#define AFIO_EVCR_PORT AFIO_EVCR_PORT_Msk /*!< PORT[2:0] bits (Port selection) */ +#define AFIO_EVCR_PORT_0 (0x1U << AFIO_EVCR_PORT_Pos) /*!< 0x00000010 */ +#define AFIO_EVCR_PORT_1 (0x2U << AFIO_EVCR_PORT_Pos) /*!< 0x00000020 */ +#define AFIO_EVCR_PORT_2 (0x4U << AFIO_EVCR_PORT_Pos) /*!< 0x00000040 */ + +/*!< PORT configuration */ +#define AFIO_EVCR_PORT_PA ((uint32_t)0x00000000) /*!< Port A selected */ +#define AFIO_EVCR_PORT_PB_Pos (4U) +#define AFIO_EVCR_PORT_PB_Msk (0x1U << AFIO_EVCR_PORT_PB_Pos) /*!< 0x00000010 */ +#define AFIO_EVCR_PORT_PB AFIO_EVCR_PORT_PB_Msk /*!< Port B selected */ +#define AFIO_EVCR_PORT_PC_Pos (5U) +#define AFIO_EVCR_PORT_PC_Msk (0x1U << AFIO_EVCR_PORT_PC_Pos) /*!< 0x00000020 */ +#define AFIO_EVCR_PORT_PC AFIO_EVCR_PORT_PC_Msk /*!< Port C selected */ +#define AFIO_EVCR_PORT_PD_Pos (4U) +#define AFIO_EVCR_PORT_PD_Msk (0x3U << AFIO_EVCR_PORT_PD_Pos) /*!< 0x00000030 */ +#define AFIO_EVCR_PORT_PD AFIO_EVCR_PORT_PD_Msk /*!< Port D selected */ +#define AFIO_EVCR_PORT_PE_Pos (6U) +#define AFIO_EVCR_PORT_PE_Msk (0x1U << AFIO_EVCR_PORT_PE_Pos) /*!< 0x00000040 */ +#define AFIO_EVCR_PORT_PE AFIO_EVCR_PORT_PE_Msk /*!< Port E selected */ + +#define AFIO_EVCR_EVOE_Pos (7U) +#define AFIO_EVCR_EVOE_Msk (0x1U << AFIO_EVCR_EVOE_Pos) /*!< 0x00000080 */ +#define AFIO_EVCR_EVOE AFIO_EVCR_EVOE_Msk /*!< Event Output Enable */ + +/****************** Bit definition for AFIO_MAPR register *******************/ +#define AFIO_MAPR_SPI1_REMAP_Pos (0U) +#define AFIO_MAPR_SPI1_REMAP_Msk (0x1U << AFIO_MAPR_SPI1_REMAP_Pos) /*!< 0x00000001 */ +#define AFIO_MAPR_SPI1_REMAP AFIO_MAPR_SPI1_REMAP_Msk /*!< SPI1 remapping */ +#define AFIO_MAPR_I2C1_REMAP_Pos (1U) +#define AFIO_MAPR_I2C1_REMAP_Msk (0x1U << AFIO_MAPR_I2C1_REMAP_Pos) /*!< 0x00000002 */ +#define AFIO_MAPR_I2C1_REMAP AFIO_MAPR_I2C1_REMAP_Msk /*!< I2C1 remapping */ +#define AFIO_MAPR_USART1_REMAP_Pos (2U) +#define AFIO_MAPR_USART1_REMAP_Msk (0x1U << AFIO_MAPR_USART1_REMAP_Pos) /*!< 0x00000004 */ +#define AFIO_MAPR_USART1_REMAP AFIO_MAPR_USART1_REMAP_Msk /*!< USART1 remapping */ +#define AFIO_MAPR_USART2_REMAP_Pos (3U) +#define AFIO_MAPR_USART2_REMAP_Msk (0x1U << AFIO_MAPR_USART2_REMAP_Pos) /*!< 0x00000008 */ +#define AFIO_MAPR_USART2_REMAP AFIO_MAPR_USART2_REMAP_Msk /*!< USART2 remapping */ + +#define AFIO_MAPR_USART3_REMAP_Pos (4U) +#define AFIO_MAPR_USART3_REMAP_Msk (0x3U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000030 */ +#define AFIO_MAPR_USART3_REMAP AFIO_MAPR_USART3_REMAP_Msk /*!< USART3_REMAP[1:0] bits (USART3 remapping) */ +#define AFIO_MAPR_USART3_REMAP_0 (0x1U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000010 */ +#define AFIO_MAPR_USART3_REMAP_1 (0x2U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000020 */ + +/* USART3_REMAP configuration */ +#define AFIO_MAPR_USART3_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) */ +#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Pos (4U) +#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Pos) /*!< 0x00000010 */ +#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk /*!< Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */ +#define AFIO_MAPR_USART3_REMAP_FULLREMAP_Pos (4U) +#define AFIO_MAPR_USART3_REMAP_FULLREMAP_Msk (0x3U << AFIO_MAPR_USART3_REMAP_FULLREMAP_Pos) /*!< 0x00000030 */ +#define AFIO_MAPR_USART3_REMAP_FULLREMAP AFIO_MAPR_USART3_REMAP_FULLREMAP_Msk /*!< Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) */ + +#define AFIO_MAPR_TIM1_REMAP_Pos (6U) +#define AFIO_MAPR_TIM1_REMAP_Msk (0x3U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x000000C0 */ +#define AFIO_MAPR_TIM1_REMAP AFIO_MAPR_TIM1_REMAP_Msk /*!< TIM1_REMAP[1:0] bits (TIM1 remapping) */ +#define AFIO_MAPR_TIM1_REMAP_0 (0x1U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x00000040 */ +#define AFIO_MAPR_TIM1_REMAP_1 (0x2U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x00000080 */ + +/*!< TIM1_REMAP configuration */ +#define AFIO_MAPR_TIM1_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15) */ +#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Pos (6U) +#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Pos) /*!< 0x00000040 */ +#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Msk /*!< Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) */ +#define AFIO_MAPR_TIM1_REMAP_FULLREMAP_Pos (6U) +#define AFIO_MAPR_TIM1_REMAP_FULLREMAP_Msk (0x3U << AFIO_MAPR_TIM1_REMAP_FULLREMAP_Pos) /*!< 0x000000C0 */ +#define AFIO_MAPR_TIM1_REMAP_FULLREMAP AFIO_MAPR_TIM1_REMAP_FULLREMAP_Msk /*!< Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) */ + +#define AFIO_MAPR_TIM2_REMAP_Pos (8U) +#define AFIO_MAPR_TIM2_REMAP_Msk (0x3U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000300 */ +#define AFIO_MAPR_TIM2_REMAP AFIO_MAPR_TIM2_REMAP_Msk /*!< TIM2_REMAP[1:0] bits (TIM2 remapping) */ +#define AFIO_MAPR_TIM2_REMAP_0 (0x1U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000100 */ +#define AFIO_MAPR_TIM2_REMAP_1 (0x2U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000200 */ + +/*!< TIM2_REMAP configuration */ +#define AFIO_MAPR_TIM2_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) */ +#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Pos (8U) +#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Msk (0x1U << AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Pos) /*!< 0x00000100 */ +#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1 AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Msk /*!< Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) */ +#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Pos (9U) +#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Msk (0x1U << AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Pos) /*!< 0x00000200 */ +#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2 AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Msk /*!< Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) */ +#define AFIO_MAPR_TIM2_REMAP_FULLREMAP_Pos (8U) +#define AFIO_MAPR_TIM2_REMAP_FULLREMAP_Msk (0x3U << AFIO_MAPR_TIM2_REMAP_FULLREMAP_Pos) /*!< 0x00000300 */ +#define AFIO_MAPR_TIM2_REMAP_FULLREMAP AFIO_MAPR_TIM2_REMAP_FULLREMAP_Msk /*!< Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) */ + +#define AFIO_MAPR_TIM3_REMAP_Pos (10U) +#define AFIO_MAPR_TIM3_REMAP_Msk (0x3U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000C00 */ +#define AFIO_MAPR_TIM3_REMAP AFIO_MAPR_TIM3_REMAP_Msk /*!< TIM3_REMAP[1:0] bits (TIM3 remapping) */ +#define AFIO_MAPR_TIM3_REMAP_0 (0x1U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000400 */ +#define AFIO_MAPR_TIM3_REMAP_1 (0x2U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000800 */ + +/*!< TIM3_REMAP configuration */ +#define AFIO_MAPR_TIM3_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) */ +#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Pos (11U) +#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Pos) /*!< 0x00000800 */ +#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Msk /*!< Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) */ +#define AFIO_MAPR_TIM3_REMAP_FULLREMAP_Pos (10U) +#define AFIO_MAPR_TIM3_REMAP_FULLREMAP_Msk (0x3U << AFIO_MAPR_TIM3_REMAP_FULLREMAP_Pos) /*!< 0x00000C00 */ +#define AFIO_MAPR_TIM3_REMAP_FULLREMAP AFIO_MAPR_TIM3_REMAP_FULLREMAP_Msk /*!< Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) */ + +#define AFIO_MAPR_TIM4_REMAP_Pos (12U) +#define AFIO_MAPR_TIM4_REMAP_Msk (0x1U << AFIO_MAPR_TIM4_REMAP_Pos) /*!< 0x00001000 */ +#define AFIO_MAPR_TIM4_REMAP AFIO_MAPR_TIM4_REMAP_Msk /*!< TIM4_REMAP bit (TIM4 remapping) */ + +#define AFIO_MAPR_CAN_REMAP_Pos (13U) +#define AFIO_MAPR_CAN_REMAP_Msk (0x3U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00006000 */ +#define AFIO_MAPR_CAN_REMAP AFIO_MAPR_CAN_REMAP_Msk /*!< CAN_REMAP[1:0] bits (CAN Alternate function remapping) */ +#define AFIO_MAPR_CAN_REMAP_0 (0x1U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00002000 */ +#define AFIO_MAPR_CAN_REMAP_1 (0x2U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00004000 */ + +/*!< CAN_REMAP configuration */ +#define AFIO_MAPR_CAN_REMAP_REMAP1 ((uint32_t)0x00000000) /*!< CANRX mapped to PA11, CANTX mapped to PA12 */ +#define AFIO_MAPR_CAN_REMAP_REMAP2_Pos (14U) +#define AFIO_MAPR_CAN_REMAP_REMAP2_Msk (0x1U << AFIO_MAPR_CAN_REMAP_REMAP2_Pos) /*!< 0x00004000 */ +#define AFIO_MAPR_CAN_REMAP_REMAP2 AFIO_MAPR_CAN_REMAP_REMAP2_Msk /*!< CANRX mapped to PB8, CANTX mapped to PB9 */ +#define AFIO_MAPR_CAN_REMAP_REMAP3_Pos (13U) +#define AFIO_MAPR_CAN_REMAP_REMAP3_Msk (0x3U << AFIO_MAPR_CAN_REMAP_REMAP3_Pos) /*!< 0x00006000 */ +#define AFIO_MAPR_CAN_REMAP_REMAP3 AFIO_MAPR_CAN_REMAP_REMAP3_Msk /*!< CANRX mapped to PD0, CANTX mapped to PD1 */ + +#define AFIO_MAPR_PD01_REMAP_Pos (15U) +#define AFIO_MAPR_PD01_REMAP_Msk (0x1U << AFIO_MAPR_PD01_REMAP_Pos) /*!< 0x00008000 */ +#define AFIO_MAPR_PD01_REMAP AFIO_MAPR_PD01_REMAP_Msk /*!< Port D0/Port D1 mapping on OSC_IN/OSC_OUT */ + +/*!< SWJ_CFG configuration */ +#define AFIO_MAPR_SWJ_CFG_Pos (24U) +#define AFIO_MAPR_SWJ_CFG_Msk (0x7U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x07000000 */ +#define AFIO_MAPR_SWJ_CFG AFIO_MAPR_SWJ_CFG_Msk /*!< SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */ +#define AFIO_MAPR_SWJ_CFG_0 (0x1U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x01000000 */ +#define AFIO_MAPR_SWJ_CFG_1 (0x2U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x02000000 */ +#define AFIO_MAPR_SWJ_CFG_2 (0x4U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x04000000 */ + +#define AFIO_MAPR_SWJ_CFG_RESET ((uint32_t)0x00000000) /*!< Full SWJ (JTAG-DP + SW-DP) : Reset State */ +#define AFIO_MAPR_SWJ_CFG_NOJNTRST_Pos (24U) +#define AFIO_MAPR_SWJ_CFG_NOJNTRST_Msk (0x1U << AFIO_MAPR_SWJ_CFG_NOJNTRST_Pos) /*!< 0x01000000 */ +#define AFIO_MAPR_SWJ_CFG_NOJNTRST AFIO_MAPR_SWJ_CFG_NOJNTRST_Msk /*!< Full SWJ (JTAG-DP + SW-DP) but without JNTRST */ +#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos (25U) +#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk (0x1U << AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos) /*!< 0x02000000 */ +#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk /*!< JTAG-DP Disabled and SW-DP Enabled */ +#define AFIO_MAPR_SWJ_CFG_DISABLE_Pos (26U) +#define AFIO_MAPR_SWJ_CFG_DISABLE_Msk (0x1U << AFIO_MAPR_SWJ_CFG_DISABLE_Pos) /*!< 0x04000000 */ +#define AFIO_MAPR_SWJ_CFG_DISABLE AFIO_MAPR_SWJ_CFG_DISABLE_Msk /*!< JTAG-DP Disabled and SW-DP Disabled */ + + +/***************** Bit definition for AFIO_EXTICR1 register *****************/ +#define AFIO_EXTICR1_EXTI0_Pos (0U) +#define AFIO_EXTICR1_EXTI0_Msk (0xFU << AFIO_EXTICR1_EXTI0_Pos) /*!< 0x0000000F */ +#define AFIO_EXTICR1_EXTI0 AFIO_EXTICR1_EXTI0_Msk /*!< EXTI 0 configuration */ +#define AFIO_EXTICR1_EXTI1_Pos (4U) +#define AFIO_EXTICR1_EXTI1_Msk (0xFU << AFIO_EXTICR1_EXTI1_Pos) /*!< 0x000000F0 */ +#define AFIO_EXTICR1_EXTI1 AFIO_EXTICR1_EXTI1_Msk /*!< EXTI 1 configuration */ +#define AFIO_EXTICR1_EXTI2_Pos (8U) +#define AFIO_EXTICR1_EXTI2_Msk (0xFU << AFIO_EXTICR1_EXTI2_Pos) /*!< 0x00000F00 */ +#define AFIO_EXTICR1_EXTI2 AFIO_EXTICR1_EXTI2_Msk /*!< EXTI 2 configuration */ +#define AFIO_EXTICR1_EXTI3_Pos (12U) +#define AFIO_EXTICR1_EXTI3_Msk (0xFU << AFIO_EXTICR1_EXTI3_Pos) /*!< 0x0000F000 */ +#define AFIO_EXTICR1_EXTI3 AFIO_EXTICR1_EXTI3_Msk /*!< EXTI 3 configuration */ + +/*!< EXTI0 configuration */ +#define AFIO_EXTICR1_EXTI0_PA ((uint32_t)0x00000000) /*!< PA[0] pin */ +#define AFIO_EXTICR1_EXTI0_PB_Pos (0U) +#define AFIO_EXTICR1_EXTI0_PB_Msk (0x1U << AFIO_EXTICR1_EXTI0_PB_Pos) /*!< 0x00000001 */ +#define AFIO_EXTICR1_EXTI0_PB AFIO_EXTICR1_EXTI0_PB_Msk /*!< PB[0] pin */ +#define AFIO_EXTICR1_EXTI0_PC_Pos (1U) +#define AFIO_EXTICR1_EXTI0_PC_Msk (0x1U << AFIO_EXTICR1_EXTI0_PC_Pos) /*!< 0x00000002 */ +#define AFIO_EXTICR1_EXTI0_PC AFIO_EXTICR1_EXTI0_PC_Msk /*!< PC[0] pin */ +#define AFIO_EXTICR1_EXTI0_PD_Pos (0U) +#define AFIO_EXTICR1_EXTI0_PD_Msk (0x3U << AFIO_EXTICR1_EXTI0_PD_Pos) /*!< 0x00000003 */ +#define AFIO_EXTICR1_EXTI0_PD AFIO_EXTICR1_EXTI0_PD_Msk /*!< PD[0] pin */ +#define AFIO_EXTICR1_EXTI0_PE_Pos (2U) +#define AFIO_EXTICR1_EXTI0_PE_Msk (0x1U << AFIO_EXTICR1_EXTI0_PE_Pos) /*!< 0x00000004 */ +#define AFIO_EXTICR1_EXTI0_PE AFIO_EXTICR1_EXTI0_PE_Msk /*!< PE[0] pin */ +#define AFIO_EXTICR1_EXTI0_PF_Pos (0U) +#define AFIO_EXTICR1_EXTI0_PF_Msk (0x5U << AFIO_EXTICR1_EXTI0_PF_Pos) /*!< 0x00000005 */ +#define AFIO_EXTICR1_EXTI0_PF AFIO_EXTICR1_EXTI0_PF_Msk /*!< PF[0] pin */ +#define AFIO_EXTICR1_EXTI0_PG_Pos (1U) +#define AFIO_EXTICR1_EXTI0_PG_Msk (0x3U << AFIO_EXTICR1_EXTI0_PG_Pos) /*!< 0x00000006 */ +#define AFIO_EXTICR1_EXTI0_PG AFIO_EXTICR1_EXTI0_PG_Msk /*!< PG[0] pin */ + +/*!< EXTI1 configuration */ +#define AFIO_EXTICR1_EXTI1_PA ((uint32_t)0x00000000) /*!< PA[1] pin */ +#define AFIO_EXTICR1_EXTI1_PB_Pos (4U) +#define AFIO_EXTICR1_EXTI1_PB_Msk (0x1U << AFIO_EXTICR1_EXTI1_PB_Pos) /*!< 0x00000010 */ +#define AFIO_EXTICR1_EXTI1_PB AFIO_EXTICR1_EXTI1_PB_Msk /*!< PB[1] pin */ +#define AFIO_EXTICR1_EXTI1_PC_Pos (5U) +#define AFIO_EXTICR1_EXTI1_PC_Msk (0x1U << AFIO_EXTICR1_EXTI1_PC_Pos) /*!< 0x00000020 */ +#define AFIO_EXTICR1_EXTI1_PC AFIO_EXTICR1_EXTI1_PC_Msk /*!< PC[1] pin */ +#define AFIO_EXTICR1_EXTI1_PD_Pos (4U) +#define AFIO_EXTICR1_EXTI1_PD_Msk (0x3U << AFIO_EXTICR1_EXTI1_PD_Pos) /*!< 0x00000030 */ +#define AFIO_EXTICR1_EXTI1_PD AFIO_EXTICR1_EXTI1_PD_Msk /*!< PD[1] pin */ +#define AFIO_EXTICR1_EXTI1_PE_Pos (6U) +#define AFIO_EXTICR1_EXTI1_PE_Msk (0x1U << AFIO_EXTICR1_EXTI1_PE_Pos) /*!< 0x00000040 */ +#define AFIO_EXTICR1_EXTI1_PE AFIO_EXTICR1_EXTI1_PE_Msk /*!< PE[1] pin */ +#define AFIO_EXTICR1_EXTI1_PF_Pos (4U) +#define AFIO_EXTICR1_EXTI1_PF_Msk (0x5U << AFIO_EXTICR1_EXTI1_PF_Pos) /*!< 0x00000050 */ +#define AFIO_EXTICR1_EXTI1_PF AFIO_EXTICR1_EXTI1_PF_Msk /*!< PF[1] pin */ +#define AFIO_EXTICR1_EXTI1_PG_Pos (5U) +#define AFIO_EXTICR1_EXTI1_PG_Msk (0x3U << AFIO_EXTICR1_EXTI1_PG_Pos) /*!< 0x00000060 */ +#define AFIO_EXTICR1_EXTI1_PG AFIO_EXTICR1_EXTI1_PG_Msk /*!< PG[1] pin */ + +/*!< EXTI2 configuration */ +#define AFIO_EXTICR1_EXTI2_PA ((uint32_t)0x00000000) /*!< PA[2] pin */ +#define AFIO_EXTICR1_EXTI2_PB_Pos (8U) +#define AFIO_EXTICR1_EXTI2_PB_Msk (0x1U << AFIO_EXTICR1_EXTI2_PB_Pos) /*!< 0x00000100 */ +#define AFIO_EXTICR1_EXTI2_PB AFIO_EXTICR1_EXTI2_PB_Msk /*!< PB[2] pin */ +#define AFIO_EXTICR1_EXTI2_PC_Pos (9U) +#define AFIO_EXTICR1_EXTI2_PC_Msk (0x1U << AFIO_EXTICR1_EXTI2_PC_Pos) /*!< 0x00000200 */ +#define AFIO_EXTICR1_EXTI2_PC AFIO_EXTICR1_EXTI2_PC_Msk /*!< PC[2] pin */ +#define AFIO_EXTICR1_EXTI2_PD_Pos (8U) +#define AFIO_EXTICR1_EXTI2_PD_Msk (0x3U << AFIO_EXTICR1_EXTI2_PD_Pos) /*!< 0x00000300 */ +#define AFIO_EXTICR1_EXTI2_PD AFIO_EXTICR1_EXTI2_PD_Msk /*!< PD[2] pin */ +#define AFIO_EXTICR1_EXTI2_PE_Pos (10U) +#define AFIO_EXTICR1_EXTI2_PE_Msk (0x1U << AFIO_EXTICR1_EXTI2_PE_Pos) /*!< 0x00000400 */ +#define AFIO_EXTICR1_EXTI2_PE AFIO_EXTICR1_EXTI2_PE_Msk /*!< PE[2] pin */ +#define AFIO_EXTICR1_EXTI2_PF_Pos (8U) +#define AFIO_EXTICR1_EXTI2_PF_Msk (0x5U << AFIO_EXTICR1_EXTI2_PF_Pos) /*!< 0x00000500 */ +#define AFIO_EXTICR1_EXTI2_PF AFIO_EXTICR1_EXTI2_PF_Msk /*!< PF[2] pin */ +#define AFIO_EXTICR1_EXTI2_PG_Pos (9U) +#define AFIO_EXTICR1_EXTI2_PG_Msk (0x3U << AFIO_EXTICR1_EXTI2_PG_Pos) /*!< 0x00000600 */ +#define AFIO_EXTICR1_EXTI2_PG AFIO_EXTICR1_EXTI2_PG_Msk /*!< PG[2] pin */ + +/*!< EXTI3 configuration */ +#define AFIO_EXTICR1_EXTI3_PA ((uint32_t)0x00000000) /*!< PA[3] pin */ +#define AFIO_EXTICR1_EXTI3_PB_Pos (12U) +#define AFIO_EXTICR1_EXTI3_PB_Msk (0x1U << AFIO_EXTICR1_EXTI3_PB_Pos) /*!< 0x00001000 */ +#define AFIO_EXTICR1_EXTI3_PB AFIO_EXTICR1_EXTI3_PB_Msk /*!< PB[3] pin */ +#define AFIO_EXTICR1_EXTI3_PC_Pos (13U) +#define AFIO_EXTICR1_EXTI3_PC_Msk (0x1U << AFIO_EXTICR1_EXTI3_PC_Pos) /*!< 0x00002000 */ +#define AFIO_EXTICR1_EXTI3_PC AFIO_EXTICR1_EXTI3_PC_Msk /*!< PC[3] pin */ +#define AFIO_EXTICR1_EXTI3_PD_Pos (12U) +#define AFIO_EXTICR1_EXTI3_PD_Msk (0x3U << AFIO_EXTICR1_EXTI3_PD_Pos) /*!< 0x00003000 */ +#define AFIO_EXTICR1_EXTI3_PD AFIO_EXTICR1_EXTI3_PD_Msk /*!< PD[3] pin */ +#define AFIO_EXTICR1_EXTI3_PE_Pos (14U) +#define AFIO_EXTICR1_EXTI3_PE_Msk (0x1U << AFIO_EXTICR1_EXTI3_PE_Pos) /*!< 0x00004000 */ +#define AFIO_EXTICR1_EXTI3_PE AFIO_EXTICR1_EXTI3_PE_Msk /*!< PE[3] pin */ +#define AFIO_EXTICR1_EXTI3_PF_Pos (12U) +#define AFIO_EXTICR1_EXTI3_PF_Msk (0x5U << AFIO_EXTICR1_EXTI3_PF_Pos) /*!< 0x00005000 */ +#define AFIO_EXTICR1_EXTI3_PF AFIO_EXTICR1_EXTI3_PF_Msk /*!< PF[3] pin */ +#define AFIO_EXTICR1_EXTI3_PG_Pos (13U) +#define AFIO_EXTICR1_EXTI3_PG_Msk (0x3U << AFIO_EXTICR1_EXTI3_PG_Pos) /*!< 0x00006000 */ +#define AFIO_EXTICR1_EXTI3_PG AFIO_EXTICR1_EXTI3_PG_Msk /*!< PG[3] pin */ + +/***************** Bit definition for AFIO_EXTICR2 register *****************/ +#define AFIO_EXTICR2_EXTI4_Pos (0U) +#define AFIO_EXTICR2_EXTI4_Msk (0xFU << AFIO_EXTICR2_EXTI4_Pos) /*!< 0x0000000F */ +#define AFIO_EXTICR2_EXTI4 AFIO_EXTICR2_EXTI4_Msk /*!< EXTI 4 configuration */ +#define AFIO_EXTICR2_EXTI5_Pos (4U) +#define AFIO_EXTICR2_EXTI5_Msk (0xFU << AFIO_EXTICR2_EXTI5_Pos) /*!< 0x000000F0 */ +#define AFIO_EXTICR2_EXTI5 AFIO_EXTICR2_EXTI5_Msk /*!< EXTI 5 configuration */ +#define AFIO_EXTICR2_EXTI6_Pos (8U) +#define AFIO_EXTICR2_EXTI6_Msk (0xFU << AFIO_EXTICR2_EXTI6_Pos) /*!< 0x00000F00 */ +#define AFIO_EXTICR2_EXTI6 AFIO_EXTICR2_EXTI6_Msk /*!< EXTI 6 configuration */ +#define AFIO_EXTICR2_EXTI7_Pos (12U) +#define AFIO_EXTICR2_EXTI7_Msk (0xFU << AFIO_EXTICR2_EXTI7_Pos) /*!< 0x0000F000 */ +#define AFIO_EXTICR2_EXTI7 AFIO_EXTICR2_EXTI7_Msk /*!< EXTI 7 configuration */ + +/*!< EXTI4 configuration */ +#define AFIO_EXTICR2_EXTI4_PA ((uint32_t)0x00000000) /*!< PA[4] pin */ +#define AFIO_EXTICR2_EXTI4_PB_Pos (0U) +#define AFIO_EXTICR2_EXTI4_PB_Msk (0x1U << AFIO_EXTICR2_EXTI4_PB_Pos) /*!< 0x00000001 */ +#define AFIO_EXTICR2_EXTI4_PB AFIO_EXTICR2_EXTI4_PB_Msk /*!< PB[4] pin */ +#define AFIO_EXTICR2_EXTI4_PC_Pos (1U) +#define AFIO_EXTICR2_EXTI4_PC_Msk (0x1U << AFIO_EXTICR2_EXTI4_PC_Pos) /*!< 0x00000002 */ +#define AFIO_EXTICR2_EXTI4_PC AFIO_EXTICR2_EXTI4_PC_Msk /*!< PC[4] pin */ +#define AFIO_EXTICR2_EXTI4_PD_Pos (0U) +#define AFIO_EXTICR2_EXTI4_PD_Msk (0x3U << AFIO_EXTICR2_EXTI4_PD_Pos) /*!< 0x00000003 */ +#define AFIO_EXTICR2_EXTI4_PD AFIO_EXTICR2_EXTI4_PD_Msk /*!< PD[4] pin */ +#define AFIO_EXTICR2_EXTI4_PE_Pos (2U) +#define AFIO_EXTICR2_EXTI4_PE_Msk (0x1U << AFIO_EXTICR2_EXTI4_PE_Pos) /*!< 0x00000004 */ +#define AFIO_EXTICR2_EXTI4_PE AFIO_EXTICR2_EXTI4_PE_Msk /*!< PE[4] pin */ +#define AFIO_EXTICR2_EXTI4_PF_Pos (0U) +#define AFIO_EXTICR2_EXTI4_PF_Msk (0x5U << AFIO_EXTICR2_EXTI4_PF_Pos) /*!< 0x00000005 */ +#define AFIO_EXTICR2_EXTI4_PF AFIO_EXTICR2_EXTI4_PF_Msk /*!< PF[4] pin */ +#define AFIO_EXTICR2_EXTI4_PG_Pos (1U) +#define AFIO_EXTICR2_EXTI4_PG_Msk (0x3U << AFIO_EXTICR2_EXTI4_PG_Pos) /*!< 0x00000006 */ +#define AFIO_EXTICR2_EXTI4_PG AFIO_EXTICR2_EXTI4_PG_Msk /*!< PG[4] pin */ + +/* EXTI5 configuration */ +#define AFIO_EXTICR2_EXTI5_PA ((uint32_t)0x00000000) /*!< PA[5] pin */ +#define AFIO_EXTICR2_EXTI5_PB_Pos (4U) +#define AFIO_EXTICR2_EXTI5_PB_Msk (0x1U << AFIO_EXTICR2_EXTI5_PB_Pos) /*!< 0x00000010 */ +#define AFIO_EXTICR2_EXTI5_PB AFIO_EXTICR2_EXTI5_PB_Msk /*!< PB[5] pin */ +#define AFIO_EXTICR2_EXTI5_PC_Pos (5U) +#define AFIO_EXTICR2_EXTI5_PC_Msk (0x1U << AFIO_EXTICR2_EXTI5_PC_Pos) /*!< 0x00000020 */ +#define AFIO_EXTICR2_EXTI5_PC AFIO_EXTICR2_EXTI5_PC_Msk /*!< PC[5] pin */ +#define AFIO_EXTICR2_EXTI5_PD_Pos (4U) +#define AFIO_EXTICR2_EXTI5_PD_Msk (0x3U << AFIO_EXTICR2_EXTI5_PD_Pos) /*!< 0x00000030 */ +#define AFIO_EXTICR2_EXTI5_PD AFIO_EXTICR2_EXTI5_PD_Msk /*!< PD[5] pin */ +#define AFIO_EXTICR2_EXTI5_PE_Pos (6U) +#define AFIO_EXTICR2_EXTI5_PE_Msk (0x1U << AFIO_EXTICR2_EXTI5_PE_Pos) /*!< 0x00000040 */ +#define AFIO_EXTICR2_EXTI5_PE AFIO_EXTICR2_EXTI5_PE_Msk /*!< PE[5] pin */ +#define AFIO_EXTICR2_EXTI5_PF_Pos (4U) +#define AFIO_EXTICR2_EXTI5_PF_Msk (0x5U << AFIO_EXTICR2_EXTI5_PF_Pos) /*!< 0x00000050 */ +#define AFIO_EXTICR2_EXTI5_PF AFIO_EXTICR2_EXTI5_PF_Msk /*!< PF[5] pin */ +#define AFIO_EXTICR2_EXTI5_PG_Pos (5U) +#define AFIO_EXTICR2_EXTI5_PG_Msk (0x3U << AFIO_EXTICR2_EXTI5_PG_Pos) /*!< 0x00000060 */ +#define AFIO_EXTICR2_EXTI5_PG AFIO_EXTICR2_EXTI5_PG_Msk /*!< PG[5] pin */ + +/*!< EXTI6 configuration */ +#define AFIO_EXTICR2_EXTI6_PA ((uint32_t)0x00000000) /*!< PA[6] pin */ +#define AFIO_EXTICR2_EXTI6_PB_Pos (8U) +#define AFIO_EXTICR2_EXTI6_PB_Msk (0x1U << AFIO_EXTICR2_EXTI6_PB_Pos) /*!< 0x00000100 */ +#define AFIO_EXTICR2_EXTI6_PB AFIO_EXTICR2_EXTI6_PB_Msk /*!< PB[6] pin */ +#define AFIO_EXTICR2_EXTI6_PC_Pos (9U) +#define AFIO_EXTICR2_EXTI6_PC_Msk (0x1U << AFIO_EXTICR2_EXTI6_PC_Pos) /*!< 0x00000200 */ +#define AFIO_EXTICR2_EXTI6_PC AFIO_EXTICR2_EXTI6_PC_Msk /*!< PC[6] pin */ +#define AFIO_EXTICR2_EXTI6_PD_Pos (8U) +#define AFIO_EXTICR2_EXTI6_PD_Msk (0x3U << AFIO_EXTICR2_EXTI6_PD_Pos) /*!< 0x00000300 */ +#define AFIO_EXTICR2_EXTI6_PD AFIO_EXTICR2_EXTI6_PD_Msk /*!< PD[6] pin */ +#define AFIO_EXTICR2_EXTI6_PE_Pos (10U) +#define AFIO_EXTICR2_EXTI6_PE_Msk (0x1U << AFIO_EXTICR2_EXTI6_PE_Pos) /*!< 0x00000400 */ +#define AFIO_EXTICR2_EXTI6_PE AFIO_EXTICR2_EXTI6_PE_Msk /*!< PE[6] pin */ +#define AFIO_EXTICR2_EXTI6_PF_Pos (8U) +#define AFIO_EXTICR2_EXTI6_PF_Msk (0x5U << AFIO_EXTICR2_EXTI6_PF_Pos) /*!< 0x00000500 */ +#define AFIO_EXTICR2_EXTI6_PF AFIO_EXTICR2_EXTI6_PF_Msk /*!< PF[6] pin */ +#define AFIO_EXTICR2_EXTI6_PG_Pos (9U) +#define AFIO_EXTICR2_EXTI6_PG_Msk (0x3U << AFIO_EXTICR2_EXTI6_PG_Pos) /*!< 0x00000600 */ +#define AFIO_EXTICR2_EXTI6_PG AFIO_EXTICR2_EXTI6_PG_Msk /*!< PG[6] pin */ + +/*!< EXTI7 configuration */ +#define AFIO_EXTICR2_EXTI7_PA ((uint32_t)0x00000000) /*!< PA[7] pin */ +#define AFIO_EXTICR2_EXTI7_PB_Pos (12U) +#define AFIO_EXTICR2_EXTI7_PB_Msk (0x1U << AFIO_EXTICR2_EXTI7_PB_Pos) /*!< 0x00001000 */ +#define AFIO_EXTICR2_EXTI7_PB AFIO_EXTICR2_EXTI7_PB_Msk /*!< PB[7] pin */ +#define AFIO_EXTICR2_EXTI7_PC_Pos (13U) +#define AFIO_EXTICR2_EXTI7_PC_Msk (0x1U << AFIO_EXTICR2_EXTI7_PC_Pos) /*!< 0x00002000 */ +#define AFIO_EXTICR2_EXTI7_PC AFIO_EXTICR2_EXTI7_PC_Msk /*!< PC[7] pin */ +#define AFIO_EXTICR2_EXTI7_PD_Pos (12U) +#define AFIO_EXTICR2_EXTI7_PD_Msk (0x3U << AFIO_EXTICR2_EXTI7_PD_Pos) /*!< 0x00003000 */ +#define AFIO_EXTICR2_EXTI7_PD AFIO_EXTICR2_EXTI7_PD_Msk /*!< PD[7] pin */ +#define AFIO_EXTICR2_EXTI7_PE_Pos (14U) +#define AFIO_EXTICR2_EXTI7_PE_Msk (0x1U << AFIO_EXTICR2_EXTI7_PE_Pos) /*!< 0x00004000 */ +#define AFIO_EXTICR2_EXTI7_PE AFIO_EXTICR2_EXTI7_PE_Msk /*!< PE[7] pin */ +#define AFIO_EXTICR2_EXTI7_PF_Pos (12U) +#define AFIO_EXTICR2_EXTI7_PF_Msk (0x5U << AFIO_EXTICR2_EXTI7_PF_Pos) /*!< 0x00005000 */ +#define AFIO_EXTICR2_EXTI7_PF AFIO_EXTICR2_EXTI7_PF_Msk /*!< PF[7] pin */ +#define AFIO_EXTICR2_EXTI7_PG_Pos (13U) +#define AFIO_EXTICR2_EXTI7_PG_Msk (0x3U << AFIO_EXTICR2_EXTI7_PG_Pos) /*!< 0x00006000 */ +#define AFIO_EXTICR2_EXTI7_PG AFIO_EXTICR2_EXTI7_PG_Msk /*!< PG[7] pin */ + +/***************** Bit definition for AFIO_EXTICR3 register *****************/ +#define AFIO_EXTICR3_EXTI8_Pos (0U) +#define AFIO_EXTICR3_EXTI8_Msk (0xFU << AFIO_EXTICR3_EXTI8_Pos) /*!< 0x0000000F */ +#define AFIO_EXTICR3_EXTI8 AFIO_EXTICR3_EXTI8_Msk /*!< EXTI 8 configuration */ +#define AFIO_EXTICR3_EXTI9_Pos (4U) +#define AFIO_EXTICR3_EXTI9_Msk (0xFU << AFIO_EXTICR3_EXTI9_Pos) /*!< 0x000000F0 */ +#define AFIO_EXTICR3_EXTI9 AFIO_EXTICR3_EXTI9_Msk /*!< EXTI 9 configuration */ +#define AFIO_EXTICR3_EXTI10_Pos (8U) +#define AFIO_EXTICR3_EXTI10_Msk (0xFU << AFIO_EXTICR3_EXTI10_Pos) /*!< 0x00000F00 */ +#define AFIO_EXTICR3_EXTI10 AFIO_EXTICR3_EXTI10_Msk /*!< EXTI 10 configuration */ +#define AFIO_EXTICR3_EXTI11_Pos (12U) +#define AFIO_EXTICR3_EXTI11_Msk (0xFU << AFIO_EXTICR3_EXTI11_Pos) /*!< 0x0000F000 */ +#define AFIO_EXTICR3_EXTI11 AFIO_EXTICR3_EXTI11_Msk /*!< EXTI 11 configuration */ + +/*!< EXTI8 configuration */ +#define AFIO_EXTICR3_EXTI8_PA ((uint32_t)0x00000000) /*!< PA[8] pin */ +#define AFIO_EXTICR3_EXTI8_PB_Pos (0U) +#define AFIO_EXTICR3_EXTI8_PB_Msk (0x1U << AFIO_EXTICR3_EXTI8_PB_Pos) /*!< 0x00000001 */ +#define AFIO_EXTICR3_EXTI8_PB AFIO_EXTICR3_EXTI8_PB_Msk /*!< PB[8] pin */ +#define AFIO_EXTICR3_EXTI8_PC_Pos (1U) +#define AFIO_EXTICR3_EXTI8_PC_Msk (0x1U << AFIO_EXTICR3_EXTI8_PC_Pos) /*!< 0x00000002 */ +#define AFIO_EXTICR3_EXTI8_PC AFIO_EXTICR3_EXTI8_PC_Msk /*!< PC[8] pin */ +#define AFIO_EXTICR3_EXTI8_PD_Pos (0U) +#define AFIO_EXTICR3_EXTI8_PD_Msk (0x3U << AFIO_EXTICR3_EXTI8_PD_Pos) /*!< 0x00000003 */ +#define AFIO_EXTICR3_EXTI8_PD AFIO_EXTICR3_EXTI8_PD_Msk /*!< PD[8] pin */ +#define AFIO_EXTICR3_EXTI8_PE_Pos (2U) +#define AFIO_EXTICR3_EXTI8_PE_Msk (0x1U << AFIO_EXTICR3_EXTI8_PE_Pos) /*!< 0x00000004 */ +#define AFIO_EXTICR3_EXTI8_PE AFIO_EXTICR3_EXTI8_PE_Msk /*!< PE[8] pin */ +#define AFIO_EXTICR3_EXTI8_PF_Pos (0U) +#define AFIO_EXTICR3_EXTI8_PF_Msk (0x5U << AFIO_EXTICR3_EXTI8_PF_Pos) /*!< 0x00000005 */ +#define AFIO_EXTICR3_EXTI8_PF AFIO_EXTICR3_EXTI8_PF_Msk /*!< PF[8] pin */ +#define AFIO_EXTICR3_EXTI8_PG_Pos (1U) +#define AFIO_EXTICR3_EXTI8_PG_Msk (0x3U << AFIO_EXTICR3_EXTI8_PG_Pos) /*!< 0x00000006 */ +#define AFIO_EXTICR3_EXTI8_PG AFIO_EXTICR3_EXTI8_PG_Msk /*!< PG[8] pin */ + +/*!< EXTI9 configuration */ +#define AFIO_EXTICR3_EXTI9_PA ((uint32_t)0x00000000) /*!< PA[9] pin */ +#define AFIO_EXTICR3_EXTI9_PB_Pos (4U) +#define AFIO_EXTICR3_EXTI9_PB_Msk (0x1U << AFIO_EXTICR3_EXTI9_PB_Pos) /*!< 0x00000010 */ +#define AFIO_EXTICR3_EXTI9_PB AFIO_EXTICR3_EXTI9_PB_Msk /*!< PB[9] pin */ +#define AFIO_EXTICR3_EXTI9_PC_Pos (5U) +#define AFIO_EXTICR3_EXTI9_PC_Msk (0x1U << AFIO_EXTICR3_EXTI9_PC_Pos) /*!< 0x00000020 */ +#define AFIO_EXTICR3_EXTI9_PC AFIO_EXTICR3_EXTI9_PC_Msk /*!< PC[9] pin */ +#define AFIO_EXTICR3_EXTI9_PD_Pos (4U) +#define AFIO_EXTICR3_EXTI9_PD_Msk (0x3U << AFIO_EXTICR3_EXTI9_PD_Pos) /*!< 0x00000030 */ +#define AFIO_EXTICR3_EXTI9_PD AFIO_EXTICR3_EXTI9_PD_Msk /*!< PD[9] pin */ +#define AFIO_EXTICR3_EXTI9_PE_Pos (6U) +#define AFIO_EXTICR3_EXTI9_PE_Msk (0x1U << AFIO_EXTICR3_EXTI9_PE_Pos) /*!< 0x00000040 */ +#define AFIO_EXTICR3_EXTI9_PE AFIO_EXTICR3_EXTI9_PE_Msk /*!< PE[9] pin */ +#define AFIO_EXTICR3_EXTI9_PF_Pos (4U) +#define AFIO_EXTICR3_EXTI9_PF_Msk (0x5U << AFIO_EXTICR3_EXTI9_PF_Pos) /*!< 0x00000050 */ +#define AFIO_EXTICR3_EXTI9_PF AFIO_EXTICR3_EXTI9_PF_Msk /*!< PF[9] pin */ +#define AFIO_EXTICR3_EXTI9_PG_Pos (5U) +#define AFIO_EXTICR3_EXTI9_PG_Msk (0x3U << AFIO_EXTICR3_EXTI9_PG_Pos) /*!< 0x00000060 */ +#define AFIO_EXTICR3_EXTI9_PG AFIO_EXTICR3_EXTI9_PG_Msk /*!< PG[9] pin */ + +/*!< EXTI10 configuration */ +#define AFIO_EXTICR3_EXTI10_PA ((uint32_t)0x00000000) /*!< PA[10] pin */ +#define AFIO_EXTICR3_EXTI10_PB_Pos (8U) +#define AFIO_EXTICR3_EXTI10_PB_Msk (0x1U << AFIO_EXTICR3_EXTI10_PB_Pos) /*!< 0x00000100 */ +#define AFIO_EXTICR3_EXTI10_PB AFIO_EXTICR3_EXTI10_PB_Msk /*!< PB[10] pin */ +#define AFIO_EXTICR3_EXTI10_PC_Pos (9U) +#define AFIO_EXTICR3_EXTI10_PC_Msk (0x1U << AFIO_EXTICR3_EXTI10_PC_Pos) /*!< 0x00000200 */ +#define AFIO_EXTICR3_EXTI10_PC AFIO_EXTICR3_EXTI10_PC_Msk /*!< PC[10] pin */ +#define AFIO_EXTICR3_EXTI10_PD_Pos (8U) +#define AFIO_EXTICR3_EXTI10_PD_Msk (0x3U << AFIO_EXTICR3_EXTI10_PD_Pos) /*!< 0x00000300 */ +#define AFIO_EXTICR3_EXTI10_PD AFIO_EXTICR3_EXTI10_PD_Msk /*!< PD[10] pin */ +#define AFIO_EXTICR3_EXTI10_PE_Pos (10U) +#define AFIO_EXTICR3_EXTI10_PE_Msk (0x1U << AFIO_EXTICR3_EXTI10_PE_Pos) /*!< 0x00000400 */ +#define AFIO_EXTICR3_EXTI10_PE AFIO_EXTICR3_EXTI10_PE_Msk /*!< PE[10] pin */ +#define AFIO_EXTICR3_EXTI10_PF_Pos (8U) +#define AFIO_EXTICR3_EXTI10_PF_Msk (0x5U << AFIO_EXTICR3_EXTI10_PF_Pos) /*!< 0x00000500 */ +#define AFIO_EXTICR3_EXTI10_PF AFIO_EXTICR3_EXTI10_PF_Msk /*!< PF[10] pin */ +#define AFIO_EXTICR3_EXTI10_PG_Pos (9U) +#define AFIO_EXTICR3_EXTI10_PG_Msk (0x3U << AFIO_EXTICR3_EXTI10_PG_Pos) /*!< 0x00000600 */ +#define AFIO_EXTICR3_EXTI10_PG AFIO_EXTICR3_EXTI10_PG_Msk /*!< PG[10] pin */ + +/*!< EXTI11 configuration */ +#define AFIO_EXTICR3_EXTI11_PA ((uint32_t)0x00000000) /*!< PA[11] pin */ +#define AFIO_EXTICR3_EXTI11_PB_Pos (12U) +#define AFIO_EXTICR3_EXTI11_PB_Msk (0x1U << AFIO_EXTICR3_EXTI11_PB_Pos) /*!< 0x00001000 */ +#define AFIO_EXTICR3_EXTI11_PB AFIO_EXTICR3_EXTI11_PB_Msk /*!< PB[11] pin */ +#define AFIO_EXTICR3_EXTI11_PC_Pos (13U) +#define AFIO_EXTICR3_EXTI11_PC_Msk (0x1U << AFIO_EXTICR3_EXTI11_PC_Pos) /*!< 0x00002000 */ +#define AFIO_EXTICR3_EXTI11_PC AFIO_EXTICR3_EXTI11_PC_Msk /*!< PC[11] pin */ +#define AFIO_EXTICR3_EXTI11_PD_Pos (12U) +#define AFIO_EXTICR3_EXTI11_PD_Msk (0x3U << AFIO_EXTICR3_EXTI11_PD_Pos) /*!< 0x00003000 */ +#define AFIO_EXTICR3_EXTI11_PD AFIO_EXTICR3_EXTI11_PD_Msk /*!< PD[11] pin */ +#define AFIO_EXTICR3_EXTI11_PE_Pos (14U) +#define AFIO_EXTICR3_EXTI11_PE_Msk (0x1U << AFIO_EXTICR3_EXTI11_PE_Pos) /*!< 0x00004000 */ +#define AFIO_EXTICR3_EXTI11_PE AFIO_EXTICR3_EXTI11_PE_Msk /*!< PE[11] pin */ +#define AFIO_EXTICR3_EXTI11_PF_Pos (12U) +#define AFIO_EXTICR3_EXTI11_PF_Msk (0x5U << AFIO_EXTICR3_EXTI11_PF_Pos) /*!< 0x00005000 */ +#define AFIO_EXTICR3_EXTI11_PF AFIO_EXTICR3_EXTI11_PF_Msk /*!< PF[11] pin */ +#define AFIO_EXTICR3_EXTI11_PG_Pos (13U) +#define AFIO_EXTICR3_EXTI11_PG_Msk (0x3U << AFIO_EXTICR3_EXTI11_PG_Pos) /*!< 0x00006000 */ +#define AFIO_EXTICR3_EXTI11_PG AFIO_EXTICR3_EXTI11_PG_Msk /*!< PG[11] pin */ + +/***************** Bit definition for AFIO_EXTICR4 register *****************/ +#define AFIO_EXTICR4_EXTI12_Pos (0U) +#define AFIO_EXTICR4_EXTI12_Msk (0xFU << AFIO_EXTICR4_EXTI12_Pos) /*!< 0x0000000F */ +#define AFIO_EXTICR4_EXTI12 AFIO_EXTICR4_EXTI12_Msk /*!< EXTI 12 configuration */ +#define AFIO_EXTICR4_EXTI13_Pos (4U) +#define AFIO_EXTICR4_EXTI13_Msk (0xFU << AFIO_EXTICR4_EXTI13_Pos) /*!< 0x000000F0 */ +#define AFIO_EXTICR4_EXTI13 AFIO_EXTICR4_EXTI13_Msk /*!< EXTI 13 configuration */ +#define AFIO_EXTICR4_EXTI14_Pos (8U) +#define AFIO_EXTICR4_EXTI14_Msk (0xFU << AFIO_EXTICR4_EXTI14_Pos) /*!< 0x00000F00 */ +#define AFIO_EXTICR4_EXTI14 AFIO_EXTICR4_EXTI14_Msk /*!< EXTI 14 configuration */ +#define AFIO_EXTICR4_EXTI15_Pos (12U) +#define AFIO_EXTICR4_EXTI15_Msk (0xFU << AFIO_EXTICR4_EXTI15_Pos) /*!< 0x0000F000 */ +#define AFIO_EXTICR4_EXTI15 AFIO_EXTICR4_EXTI15_Msk /*!< EXTI 15 configuration */ + +/* EXTI12 configuration */ +#define AFIO_EXTICR4_EXTI12_PA ((uint32_t)0x00000000) /*!< PA[12] pin */ +#define AFIO_EXTICR4_EXTI12_PB_Pos (0U) +#define AFIO_EXTICR4_EXTI12_PB_Msk (0x1U << AFIO_EXTICR4_EXTI12_PB_Pos) /*!< 0x00000001 */ +#define AFIO_EXTICR4_EXTI12_PB AFIO_EXTICR4_EXTI12_PB_Msk /*!< PB[12] pin */ +#define AFIO_EXTICR4_EXTI12_PC_Pos (1U) +#define AFIO_EXTICR4_EXTI12_PC_Msk (0x1U << AFIO_EXTICR4_EXTI12_PC_Pos) /*!< 0x00000002 */ +#define AFIO_EXTICR4_EXTI12_PC AFIO_EXTICR4_EXTI12_PC_Msk /*!< PC[12] pin */ +#define AFIO_EXTICR4_EXTI12_PD_Pos (0U) +#define AFIO_EXTICR4_EXTI12_PD_Msk (0x3U << AFIO_EXTICR4_EXTI12_PD_Pos) /*!< 0x00000003 */ +#define AFIO_EXTICR4_EXTI12_PD AFIO_EXTICR4_EXTI12_PD_Msk /*!< PD[12] pin */ +#define AFIO_EXTICR4_EXTI12_PE_Pos (2U) +#define AFIO_EXTICR4_EXTI12_PE_Msk (0x1U << AFIO_EXTICR4_EXTI12_PE_Pos) /*!< 0x00000004 */ +#define AFIO_EXTICR4_EXTI12_PE AFIO_EXTICR4_EXTI12_PE_Msk /*!< PE[12] pin */ +#define AFIO_EXTICR4_EXTI12_PF_Pos (0U) +#define AFIO_EXTICR4_EXTI12_PF_Msk (0x5U << AFIO_EXTICR4_EXTI12_PF_Pos) /*!< 0x00000005 */ +#define AFIO_EXTICR4_EXTI12_PF AFIO_EXTICR4_EXTI12_PF_Msk /*!< PF[12] pin */ +#define AFIO_EXTICR4_EXTI12_PG_Pos (1U) +#define AFIO_EXTICR4_EXTI12_PG_Msk (0x3U << AFIO_EXTICR4_EXTI12_PG_Pos) /*!< 0x00000006 */ +#define AFIO_EXTICR4_EXTI12_PG AFIO_EXTICR4_EXTI12_PG_Msk /*!< PG[12] pin */ + +/* EXTI13 configuration */ +#define AFIO_EXTICR4_EXTI13_PA ((uint32_t)0x00000000) /*!< PA[13] pin */ +#define AFIO_EXTICR4_EXTI13_PB_Pos (4U) +#define AFIO_EXTICR4_EXTI13_PB_Msk (0x1U << AFIO_EXTICR4_EXTI13_PB_Pos) /*!< 0x00000010 */ +#define AFIO_EXTICR4_EXTI13_PB AFIO_EXTICR4_EXTI13_PB_Msk /*!< PB[13] pin */ +#define AFIO_EXTICR4_EXTI13_PC_Pos (5U) +#define AFIO_EXTICR4_EXTI13_PC_Msk (0x1U << AFIO_EXTICR4_EXTI13_PC_Pos) /*!< 0x00000020 */ +#define AFIO_EXTICR4_EXTI13_PC AFIO_EXTICR4_EXTI13_PC_Msk /*!< PC[13] pin */ +#define AFIO_EXTICR4_EXTI13_PD_Pos (4U) +#define AFIO_EXTICR4_EXTI13_PD_Msk (0x3U << AFIO_EXTICR4_EXTI13_PD_Pos) /*!< 0x00000030 */ +#define AFIO_EXTICR4_EXTI13_PD AFIO_EXTICR4_EXTI13_PD_Msk /*!< PD[13] pin */ +#define AFIO_EXTICR4_EXTI13_PE_Pos (6U) +#define AFIO_EXTICR4_EXTI13_PE_Msk (0x1U << AFIO_EXTICR4_EXTI13_PE_Pos) /*!< 0x00000040 */ +#define AFIO_EXTICR4_EXTI13_PE AFIO_EXTICR4_EXTI13_PE_Msk /*!< PE[13] pin */ +#define AFIO_EXTICR4_EXTI13_PF_Pos (4U) +#define AFIO_EXTICR4_EXTI13_PF_Msk (0x5U << AFIO_EXTICR4_EXTI13_PF_Pos) /*!< 0x00000050 */ +#define AFIO_EXTICR4_EXTI13_PF AFIO_EXTICR4_EXTI13_PF_Msk /*!< PF[13] pin */ +#define AFIO_EXTICR4_EXTI13_PG_Pos (5U) +#define AFIO_EXTICR4_EXTI13_PG_Msk (0x3U << AFIO_EXTICR4_EXTI13_PG_Pos) /*!< 0x00000060 */ +#define AFIO_EXTICR4_EXTI13_PG AFIO_EXTICR4_EXTI13_PG_Msk /*!< PG[13] pin */ + +/*!< EXTI14 configuration */ +#define AFIO_EXTICR4_EXTI14_PA ((uint32_t)0x00000000) /*!< PA[14] pin */ +#define AFIO_EXTICR4_EXTI14_PB_Pos (8U) +#define AFIO_EXTICR4_EXTI14_PB_Msk (0x1U << AFIO_EXTICR4_EXTI14_PB_Pos) /*!< 0x00000100 */ +#define AFIO_EXTICR4_EXTI14_PB AFIO_EXTICR4_EXTI14_PB_Msk /*!< PB[14] pin */ +#define AFIO_EXTICR4_EXTI14_PC_Pos (9U) +#define AFIO_EXTICR4_EXTI14_PC_Msk (0x1U << AFIO_EXTICR4_EXTI14_PC_Pos) /*!< 0x00000200 */ +#define AFIO_EXTICR4_EXTI14_PC AFIO_EXTICR4_EXTI14_PC_Msk /*!< PC[14] pin */ +#define AFIO_EXTICR4_EXTI14_PD_Pos (8U) +#define AFIO_EXTICR4_EXTI14_PD_Msk (0x3U << AFIO_EXTICR4_EXTI14_PD_Pos) /*!< 0x00000300 */ +#define AFIO_EXTICR4_EXTI14_PD AFIO_EXTICR4_EXTI14_PD_Msk /*!< PD[14] pin */ +#define AFIO_EXTICR4_EXTI14_PE_Pos (10U) +#define AFIO_EXTICR4_EXTI14_PE_Msk (0x1U << AFIO_EXTICR4_EXTI14_PE_Pos) /*!< 0x00000400 */ +#define AFIO_EXTICR4_EXTI14_PE AFIO_EXTICR4_EXTI14_PE_Msk /*!< PE[14] pin */ +#define AFIO_EXTICR4_EXTI14_PF_Pos (8U) +#define AFIO_EXTICR4_EXTI14_PF_Msk (0x5U << AFIO_EXTICR4_EXTI14_PF_Pos) /*!< 0x00000500 */ +#define AFIO_EXTICR4_EXTI14_PF AFIO_EXTICR4_EXTI14_PF_Msk /*!< PF[14] pin */ +#define AFIO_EXTICR4_EXTI14_PG_Pos (9U) +#define AFIO_EXTICR4_EXTI14_PG_Msk (0x3U << AFIO_EXTICR4_EXTI14_PG_Pos) /*!< 0x00000600 */ +#define AFIO_EXTICR4_EXTI14_PG AFIO_EXTICR4_EXTI14_PG_Msk /*!< PG[14] pin */ + +/*!< EXTI15 configuration */ +#define AFIO_EXTICR4_EXTI15_PA ((uint32_t)0x00000000) /*!< PA[15] pin */ +#define AFIO_EXTICR4_EXTI15_PB_Pos (12U) +#define AFIO_EXTICR4_EXTI15_PB_Msk (0x1U << AFIO_EXTICR4_EXTI15_PB_Pos) /*!< 0x00001000 */ +#define AFIO_EXTICR4_EXTI15_PB AFIO_EXTICR4_EXTI15_PB_Msk /*!< PB[15] pin */ +#define AFIO_EXTICR4_EXTI15_PC_Pos (13U) +#define AFIO_EXTICR4_EXTI15_PC_Msk (0x1U << AFIO_EXTICR4_EXTI15_PC_Pos) /*!< 0x00002000 */ +#define AFIO_EXTICR4_EXTI15_PC AFIO_EXTICR4_EXTI15_PC_Msk /*!< PC[15] pin */ +#define AFIO_EXTICR4_EXTI15_PD_Pos (12U) +#define AFIO_EXTICR4_EXTI15_PD_Msk (0x3U << AFIO_EXTICR4_EXTI15_PD_Pos) /*!< 0x00003000 */ +#define AFIO_EXTICR4_EXTI15_PD AFIO_EXTICR4_EXTI15_PD_Msk /*!< PD[15] pin */ +#define AFIO_EXTICR4_EXTI15_PE_Pos (14U) +#define AFIO_EXTICR4_EXTI15_PE_Msk (0x1U << AFIO_EXTICR4_EXTI15_PE_Pos) /*!< 0x00004000 */ +#define AFIO_EXTICR4_EXTI15_PE AFIO_EXTICR4_EXTI15_PE_Msk /*!< PE[15] pin */ +#define AFIO_EXTICR4_EXTI15_PF_Pos (12U) +#define AFIO_EXTICR4_EXTI15_PF_Msk (0x5U << AFIO_EXTICR4_EXTI15_PF_Pos) /*!< 0x00005000 */ +#define AFIO_EXTICR4_EXTI15_PF AFIO_EXTICR4_EXTI15_PF_Msk /*!< PF[15] pin */ +#define AFIO_EXTICR4_EXTI15_PG_Pos (13U) +#define AFIO_EXTICR4_EXTI15_PG_Msk (0x3U << AFIO_EXTICR4_EXTI15_PG_Pos) /*!< 0x00006000 */ +#define AFIO_EXTICR4_EXTI15_PG AFIO_EXTICR4_EXTI15_PG_Msk /*!< PG[15] pin */ + +/****************** Bit definition for AFIO_MAPR2 register ******************/ + + + +/******************************************************************************/ +/* */ +/* SystemTick */ +/* */ +/******************************************************************************/ + +/***************** Bit definition for SysTick_CTRL register *****************/ +#define SysTick_CTRL_ENABLE ((uint32_t)0x00000001) /*!< Counter enable */ +#define SysTick_CTRL_TICKINT ((uint32_t)0x00000002) /*!< Counting down to 0 pends the SysTick handler */ +#define SysTick_CTRL_CLKSOURCE ((uint32_t)0x00000004) /*!< Clock source */ +#define SysTick_CTRL_COUNTFLAG ((uint32_t)0x00010000) /*!< Count Flag */ + +/***************** Bit definition for SysTick_LOAD register *****************/ +#define SysTick_LOAD_RELOAD ((uint32_t)0x00FFFFFF) /*!< Value to load into the SysTick Current Value Register when the counter reaches 0 */ + +/***************** Bit definition for SysTick_VAL register ******************/ +#define SysTick_VAL_CURRENT ((uint32_t)0x00FFFFFF) /*!< Current value at the time the register is accessed */ + +/***************** Bit definition for SysTick_CALIB register ****************/ +#define SysTick_CALIB_TENMS ((uint32_t)0x00FFFFFF) /*!< Reload value to use for 10ms timing */ +#define SysTick_CALIB_SKEW ((uint32_t)0x40000000) /*!< Calibration value is not exactly 10 ms */ +#define SysTick_CALIB_NOREF ((uint32_t)0x80000000) /*!< The reference clock is not provided */ + +/******************************************************************************/ +/* */ +/* Nested Vectored Interrupt Controller */ +/* */ +/******************************************************************************/ + +/****************** Bit definition for NVIC_ISER register *******************/ +#define NVIC_ISER_SETENA_Pos (0U) +#define NVIC_ISER_SETENA_Msk (0xFFFFFFFFU << NVIC_ISER_SETENA_Pos) /*!< 0xFFFFFFFF */ +#define NVIC_ISER_SETENA NVIC_ISER_SETENA_Msk /*!< Interrupt set enable bits */ +#define NVIC_ISER_SETENA_0 (0x00000001U << NVIC_ISER_SETENA_Pos) /*!< 0x00000001 */ +#define NVIC_ISER_SETENA_1 (0x00000002U << NVIC_ISER_SETENA_Pos) /*!< 0x00000002 */ +#define NVIC_ISER_SETENA_2 (0x00000004U << NVIC_ISER_SETENA_Pos) /*!< 0x00000004 */ +#define NVIC_ISER_SETENA_3 (0x00000008U << NVIC_ISER_SETENA_Pos) /*!< 0x00000008 */ +#define NVIC_ISER_SETENA_4 (0x00000010U << NVIC_ISER_SETENA_Pos) /*!< 0x00000010 */ +#define NVIC_ISER_SETENA_5 (0x00000020U << NVIC_ISER_SETENA_Pos) /*!< 0x00000020 */ +#define NVIC_ISER_SETENA_6 (0x00000040U << NVIC_ISER_SETENA_Pos) /*!< 0x00000040 */ +#define NVIC_ISER_SETENA_7 (0x00000080U << NVIC_ISER_SETENA_Pos) /*!< 0x00000080 */ +#define NVIC_ISER_SETENA_8 (0x00000100U << NVIC_ISER_SETENA_Pos) /*!< 0x00000100 */ +#define NVIC_ISER_SETENA_9 (0x00000200U << NVIC_ISER_SETENA_Pos) /*!< 0x00000200 */ +#define NVIC_ISER_SETENA_10 (0x00000400U << NVIC_ISER_SETENA_Pos) /*!< 0x00000400 */ +#define NVIC_ISER_SETENA_11 (0x00000800U << NVIC_ISER_SETENA_Pos) /*!< 0x00000800 */ +#define NVIC_ISER_SETENA_12 (0x00001000U << NVIC_ISER_SETENA_Pos) /*!< 0x00001000 */ +#define NVIC_ISER_SETENA_13 (0x00002000U << NVIC_ISER_SETENA_Pos) /*!< 0x00002000 */ +#define NVIC_ISER_SETENA_14 (0x00004000U << NVIC_ISER_SETENA_Pos) /*!< 0x00004000 */ +#define NVIC_ISER_SETENA_15 (0x00008000U << NVIC_ISER_SETENA_Pos) /*!< 0x00008000 */ +#define NVIC_ISER_SETENA_16 (0x00010000U << NVIC_ISER_SETENA_Pos) /*!< 0x00010000 */ +#define NVIC_ISER_SETENA_17 (0x00020000U << NVIC_ISER_SETENA_Pos) /*!< 0x00020000 */ +#define NVIC_ISER_SETENA_18 (0x00040000U << NVIC_ISER_SETENA_Pos) /*!< 0x00040000 */ +#define NVIC_ISER_SETENA_19 (0x00080000U << NVIC_ISER_SETENA_Pos) /*!< 0x00080000 */ +#define NVIC_ISER_SETENA_20 (0x00100000U << NVIC_ISER_SETENA_Pos) /*!< 0x00100000 */ +#define NVIC_ISER_SETENA_21 (0x00200000U << NVIC_ISER_SETENA_Pos) /*!< 0x00200000 */ +#define NVIC_ISER_SETENA_22 (0x00400000U << NVIC_ISER_SETENA_Pos) /*!< 0x00400000 */ +#define NVIC_ISER_SETENA_23 (0x00800000U << NVIC_ISER_SETENA_Pos) /*!< 0x00800000 */ +#define NVIC_ISER_SETENA_24 (0x01000000U << NVIC_ISER_SETENA_Pos) /*!< 0x01000000 */ +#define NVIC_ISER_SETENA_25 (0x02000000U << NVIC_ISER_SETENA_Pos) /*!< 0x02000000 */ +#define NVIC_ISER_SETENA_26 (0x04000000U << NVIC_ISER_SETENA_Pos) /*!< 0x04000000 */ +#define NVIC_ISER_SETENA_27 (0x08000000U << NVIC_ISER_SETENA_Pos) /*!< 0x08000000 */ +#define NVIC_ISER_SETENA_28 (0x10000000U << NVIC_ISER_SETENA_Pos) /*!< 0x10000000 */ +#define NVIC_ISER_SETENA_29 (0x20000000U << NVIC_ISER_SETENA_Pos) /*!< 0x20000000 */ +#define NVIC_ISER_SETENA_30 (0x40000000U << NVIC_ISER_SETENA_Pos) /*!< 0x40000000 */ +#define NVIC_ISER_SETENA_31 (0x80000000U << NVIC_ISER_SETENA_Pos) /*!< 0x80000000 */ + +/****************** Bit definition for NVIC_ICER register *******************/ +#define NVIC_ICER_CLRENA_Pos (0U) +#define NVIC_ICER_CLRENA_Msk (0xFFFFFFFFU << NVIC_ICER_CLRENA_Pos) /*!< 0xFFFFFFFF */ +#define NVIC_ICER_CLRENA NVIC_ICER_CLRENA_Msk /*!< Interrupt clear-enable bits */ +#define NVIC_ICER_CLRENA_0 (0x00000001U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000001 */ +#define NVIC_ICER_CLRENA_1 (0x00000002U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000002 */ +#define NVIC_ICER_CLRENA_2 (0x00000004U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000004 */ +#define NVIC_ICER_CLRENA_3 (0x00000008U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000008 */ +#define NVIC_ICER_CLRENA_4 (0x00000010U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000010 */ +#define NVIC_ICER_CLRENA_5 (0x00000020U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000020 */ +#define NVIC_ICER_CLRENA_6 (0x00000040U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000040 */ +#define NVIC_ICER_CLRENA_7 (0x00000080U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000080 */ +#define NVIC_ICER_CLRENA_8 (0x00000100U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000100 */ +#define NVIC_ICER_CLRENA_9 (0x00000200U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000200 */ +#define NVIC_ICER_CLRENA_10 (0x00000400U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000400 */ +#define NVIC_ICER_CLRENA_11 (0x00000800U << NVIC_ICER_CLRENA_Pos) /*!< 0x00000800 */ +#define NVIC_ICER_CLRENA_12 (0x00001000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00001000 */ +#define NVIC_ICER_CLRENA_13 (0x00002000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00002000 */ +#define NVIC_ICER_CLRENA_14 (0x00004000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00004000 */ +#define NVIC_ICER_CLRENA_15 (0x00008000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00008000 */ +#define NVIC_ICER_CLRENA_16 (0x00010000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00010000 */ +#define NVIC_ICER_CLRENA_17 (0x00020000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00020000 */ +#define NVIC_ICER_CLRENA_18 (0x00040000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00040000 */ +#define NVIC_ICER_CLRENA_19 (0x00080000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00080000 */ +#define NVIC_ICER_CLRENA_20 (0x00100000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00100000 */ +#define NVIC_ICER_CLRENA_21 (0x00200000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00200000 */ +#define NVIC_ICER_CLRENA_22 (0x00400000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00400000 */ +#define NVIC_ICER_CLRENA_23 (0x00800000U << NVIC_ICER_CLRENA_Pos) /*!< 0x00800000 */ +#define NVIC_ICER_CLRENA_24 (0x01000000U << NVIC_ICER_CLRENA_Pos) /*!< 0x01000000 */ +#define NVIC_ICER_CLRENA_25 (0x02000000U << NVIC_ICER_CLRENA_Pos) /*!< 0x02000000 */ +#define NVIC_ICER_CLRENA_26 (0x04000000U << NVIC_ICER_CLRENA_Pos) /*!< 0x04000000 */ +#define NVIC_ICER_CLRENA_27 (0x08000000U << NVIC_ICER_CLRENA_Pos) /*!< 0x08000000 */ +#define NVIC_ICER_CLRENA_28 (0x10000000U << NVIC_ICER_CLRENA_Pos) /*!< 0x10000000 */ +#define NVIC_ICER_CLRENA_29 (0x20000000U << NVIC_ICER_CLRENA_Pos) /*!< 0x20000000 */ +#define NVIC_ICER_CLRENA_30 (0x40000000U << NVIC_ICER_CLRENA_Pos) /*!< 0x40000000 */ +#define NVIC_ICER_CLRENA_31 (0x80000000U << NVIC_ICER_CLRENA_Pos) /*!< 0x80000000 */ + +/****************** Bit definition for NVIC_ISPR register *******************/ +#define NVIC_ISPR_SETPEND_Pos (0U) +#define NVIC_ISPR_SETPEND_Msk (0xFFFFFFFFU << NVIC_ISPR_SETPEND_Pos) /*!< 0xFFFFFFFF */ +#define NVIC_ISPR_SETPEND NVIC_ISPR_SETPEND_Msk /*!< Interrupt set-pending bits */ +#define NVIC_ISPR_SETPEND_0 (0x00000001U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000001 */ +#define NVIC_ISPR_SETPEND_1 (0x00000002U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000002 */ +#define NVIC_ISPR_SETPEND_2 (0x00000004U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000004 */ +#define NVIC_ISPR_SETPEND_3 (0x00000008U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000008 */ +#define NVIC_ISPR_SETPEND_4 (0x00000010U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000010 */ +#define NVIC_ISPR_SETPEND_5 (0x00000020U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000020 */ +#define NVIC_ISPR_SETPEND_6 (0x00000040U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000040 */ +#define NVIC_ISPR_SETPEND_7 (0x00000080U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000080 */ +#define NVIC_ISPR_SETPEND_8 (0x00000100U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000100 */ +#define NVIC_ISPR_SETPEND_9 (0x00000200U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000200 */ +#define NVIC_ISPR_SETPEND_10 (0x00000400U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000400 */ +#define NVIC_ISPR_SETPEND_11 (0x00000800U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000800 */ +#define NVIC_ISPR_SETPEND_12 (0x00001000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00001000 */ +#define NVIC_ISPR_SETPEND_13 (0x00002000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00002000 */ +#define NVIC_ISPR_SETPEND_14 (0x00004000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00004000 */ +#define NVIC_ISPR_SETPEND_15 (0x00008000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00008000 */ +#define NVIC_ISPR_SETPEND_16 (0x00010000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00010000 */ +#define NVIC_ISPR_SETPEND_17 (0x00020000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00020000 */ +#define NVIC_ISPR_SETPEND_18 (0x00040000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00040000 */ +#define NVIC_ISPR_SETPEND_19 (0x00080000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00080000 */ +#define NVIC_ISPR_SETPEND_20 (0x00100000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00100000 */ +#define NVIC_ISPR_SETPEND_21 (0x00200000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00200000 */ +#define NVIC_ISPR_SETPEND_22 (0x00400000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00400000 */ +#define NVIC_ISPR_SETPEND_23 (0x00800000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x00800000 */ +#define NVIC_ISPR_SETPEND_24 (0x01000000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x01000000 */ +#define NVIC_ISPR_SETPEND_25 (0x02000000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x02000000 */ +#define NVIC_ISPR_SETPEND_26 (0x04000000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x04000000 */ +#define NVIC_ISPR_SETPEND_27 (0x08000000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x08000000 */ +#define NVIC_ISPR_SETPEND_28 (0x10000000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x10000000 */ +#define NVIC_ISPR_SETPEND_29 (0x20000000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x20000000 */ +#define NVIC_ISPR_SETPEND_30 (0x40000000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x40000000 */ +#define NVIC_ISPR_SETPEND_31 (0x80000000U << NVIC_ISPR_SETPEND_Pos) /*!< 0x80000000 */ + +/****************** Bit definition for NVIC_ICPR register *******************/ +#define NVIC_ICPR_CLRPEND_Pos (0U) +#define NVIC_ICPR_CLRPEND_Msk (0xFFFFFFFFU << NVIC_ICPR_CLRPEND_Pos) /*!< 0xFFFFFFFF */ +#define NVIC_ICPR_CLRPEND NVIC_ICPR_CLRPEND_Msk /*!< Interrupt clear-pending bits */ +#define NVIC_ICPR_CLRPEND_0 (0x00000001U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000001 */ +#define NVIC_ICPR_CLRPEND_1 (0x00000002U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000002 */ +#define NVIC_ICPR_CLRPEND_2 (0x00000004U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000004 */ +#define NVIC_ICPR_CLRPEND_3 (0x00000008U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000008 */ +#define NVIC_ICPR_CLRPEND_4 (0x00000010U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000010 */ +#define NVIC_ICPR_CLRPEND_5 (0x00000020U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000020 */ +#define NVIC_ICPR_CLRPEND_6 (0x00000040U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000040 */ +#define NVIC_ICPR_CLRPEND_7 (0x00000080U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000080 */ +#define NVIC_ICPR_CLRPEND_8 (0x00000100U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000100 */ +#define NVIC_ICPR_CLRPEND_9 (0x00000200U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000200 */ +#define NVIC_ICPR_CLRPEND_10 (0x00000400U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000400 */ +#define NVIC_ICPR_CLRPEND_11 (0x00000800U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000800 */ +#define NVIC_ICPR_CLRPEND_12 (0x00001000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00001000 */ +#define NVIC_ICPR_CLRPEND_13 (0x00002000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00002000 */ +#define NVIC_ICPR_CLRPEND_14 (0x00004000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00004000 */ +#define NVIC_ICPR_CLRPEND_15 (0x00008000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00008000 */ +#define NVIC_ICPR_CLRPEND_16 (0x00010000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00010000 */ +#define NVIC_ICPR_CLRPEND_17 (0x00020000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00020000 */ +#define NVIC_ICPR_CLRPEND_18 (0x00040000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00040000 */ +#define NVIC_ICPR_CLRPEND_19 (0x00080000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00080000 */ +#define NVIC_ICPR_CLRPEND_20 (0x00100000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00100000 */ +#define NVIC_ICPR_CLRPEND_21 (0x00200000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00200000 */ +#define NVIC_ICPR_CLRPEND_22 (0x00400000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00400000 */ +#define NVIC_ICPR_CLRPEND_23 (0x00800000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00800000 */ +#define NVIC_ICPR_CLRPEND_24 (0x01000000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x01000000 */ +#define NVIC_ICPR_CLRPEND_25 (0x02000000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x02000000 */ +#define NVIC_ICPR_CLRPEND_26 (0x04000000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x04000000 */ +#define NVIC_ICPR_CLRPEND_27 (0x08000000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x08000000 */ +#define NVIC_ICPR_CLRPEND_28 (0x10000000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x10000000 */ +#define NVIC_ICPR_CLRPEND_29 (0x20000000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x20000000 */ +#define NVIC_ICPR_CLRPEND_30 (0x40000000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x40000000 */ +#define NVIC_ICPR_CLRPEND_31 (0x80000000U << NVIC_ICPR_CLRPEND_Pos) /*!< 0x80000000 */ + +/****************** Bit definition for NVIC_IABR register *******************/ +#define NVIC_IABR_ACTIVE_Pos (0U) +#define NVIC_IABR_ACTIVE_Msk (0xFFFFFFFFU << NVIC_IABR_ACTIVE_Pos) /*!< 0xFFFFFFFF */ +#define NVIC_IABR_ACTIVE NVIC_IABR_ACTIVE_Msk /*!< Interrupt active flags */ +#define NVIC_IABR_ACTIVE_0 (0x00000001U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000001 */ +#define NVIC_IABR_ACTIVE_1 (0x00000002U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000002 */ +#define NVIC_IABR_ACTIVE_2 (0x00000004U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000004 */ +#define NVIC_IABR_ACTIVE_3 (0x00000008U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000008 */ +#define NVIC_IABR_ACTIVE_4 (0x00000010U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000010 */ +#define NVIC_IABR_ACTIVE_5 (0x00000020U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000020 */ +#define NVIC_IABR_ACTIVE_6 (0x00000040U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000040 */ +#define NVIC_IABR_ACTIVE_7 (0x00000080U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000080 */ +#define NVIC_IABR_ACTIVE_8 (0x00000100U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000100 */ +#define NVIC_IABR_ACTIVE_9 (0x00000200U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000200 */ +#define NVIC_IABR_ACTIVE_10 (0x00000400U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000400 */ +#define NVIC_IABR_ACTIVE_11 (0x00000800U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000800 */ +#define NVIC_IABR_ACTIVE_12 (0x00001000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00001000 */ +#define NVIC_IABR_ACTIVE_13 (0x00002000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00002000 */ +#define NVIC_IABR_ACTIVE_14 (0x00004000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00004000 */ +#define NVIC_IABR_ACTIVE_15 (0x00008000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00008000 */ +#define NVIC_IABR_ACTIVE_16 (0x00010000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00010000 */ +#define NVIC_IABR_ACTIVE_17 (0x00020000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00020000 */ +#define NVIC_IABR_ACTIVE_18 (0x00040000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00040000 */ +#define NVIC_IABR_ACTIVE_19 (0x00080000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00080000 */ +#define NVIC_IABR_ACTIVE_20 (0x00100000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00100000 */ +#define NVIC_IABR_ACTIVE_21 (0x00200000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00200000 */ +#define NVIC_IABR_ACTIVE_22 (0x00400000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00400000 */ +#define NVIC_IABR_ACTIVE_23 (0x00800000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x00800000 */ +#define NVIC_IABR_ACTIVE_24 (0x01000000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x01000000 */ +#define NVIC_IABR_ACTIVE_25 (0x02000000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x02000000 */ +#define NVIC_IABR_ACTIVE_26 (0x04000000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x04000000 */ +#define NVIC_IABR_ACTIVE_27 (0x08000000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x08000000 */ +#define NVIC_IABR_ACTIVE_28 (0x10000000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x10000000 */ +#define NVIC_IABR_ACTIVE_29 (0x20000000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x20000000 */ +#define NVIC_IABR_ACTIVE_30 (0x40000000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x40000000 */ +#define NVIC_IABR_ACTIVE_31 (0x80000000U << NVIC_IABR_ACTIVE_Pos) /*!< 0x80000000 */ + +/****************** Bit definition for NVIC_PRI0 register *******************/ +#define NVIC_IPR0_PRI_0 ((uint32_t)0x000000FF) /*!< Priority of interrupt 0 */ +#define NVIC_IPR0_PRI_1 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 1 */ +#define NVIC_IPR0_PRI_2 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 2 */ +#define NVIC_IPR0_PRI_3 ((uint32_t)0xFF000000) /*!< Priority of interrupt 3 */ + +/****************** Bit definition for NVIC_PRI1 register *******************/ +#define NVIC_IPR1_PRI_4 ((uint32_t)0x000000FF) /*!< Priority of interrupt 4 */ +#define NVIC_IPR1_PRI_5 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 5 */ +#define NVIC_IPR1_PRI_6 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 6 */ +#define NVIC_IPR1_PRI_7 ((uint32_t)0xFF000000) /*!< Priority of interrupt 7 */ + +/****************** Bit definition for NVIC_PRI2 register *******************/ +#define NVIC_IPR2_PRI_8 ((uint32_t)0x000000FF) /*!< Priority of interrupt 8 */ +#define NVIC_IPR2_PRI_9 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 9 */ +#define NVIC_IPR2_PRI_10 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 10 */ +#define NVIC_IPR2_PRI_11 ((uint32_t)0xFF000000) /*!< Priority of interrupt 11 */ + +/****************** Bit definition for NVIC_PRI3 register *******************/ +#define NVIC_IPR3_PRI_12 ((uint32_t)0x000000FF) /*!< Priority of interrupt 12 */ +#define NVIC_IPR3_PRI_13 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 13 */ +#define NVIC_IPR3_PRI_14 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 14 */ +#define NVIC_IPR3_PRI_15 ((uint32_t)0xFF000000) /*!< Priority of interrupt 15 */ + +/****************** Bit definition for NVIC_PRI4 register *******************/ +#define NVIC_IPR4_PRI_16 ((uint32_t)0x000000FF) /*!< Priority of interrupt 16 */ +#define NVIC_IPR4_PRI_17 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 17 */ +#define NVIC_IPR4_PRI_18 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 18 */ +#define NVIC_IPR4_PRI_19 ((uint32_t)0xFF000000) /*!< Priority of interrupt 19 */ + +/****************** Bit definition for NVIC_PRI5 register *******************/ +#define NVIC_IPR5_PRI_20 ((uint32_t)0x000000FF) /*!< Priority of interrupt 20 */ +#define NVIC_IPR5_PRI_21 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 21 */ +#define NVIC_IPR5_PRI_22 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 22 */ +#define NVIC_IPR5_PRI_23 ((uint32_t)0xFF000000) /*!< Priority of interrupt 23 */ + +/****************** Bit definition for NVIC_PRI6 register *******************/ +#define NVIC_IPR6_PRI_24 ((uint32_t)0x000000FF) /*!< Priority of interrupt 24 */ +#define NVIC_IPR6_PRI_25 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 25 */ +#define NVIC_IPR6_PRI_26 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 26 */ +#define NVIC_IPR6_PRI_27 ((uint32_t)0xFF000000) /*!< Priority of interrupt 27 */ + +/****************** Bit definition for NVIC_PRI7 register *******************/ +#define NVIC_IPR7_PRI_28 ((uint32_t)0x000000FF) /*!< Priority of interrupt 28 */ +#define NVIC_IPR7_PRI_29 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 29 */ +#define NVIC_IPR7_PRI_30 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 30 */ +#define NVIC_IPR7_PRI_31 ((uint32_t)0xFF000000) /*!< Priority of interrupt 31 */ + +/****************** Bit definition for SCB_CPUID register *******************/ +#define SCB_CPUID_REVISION ((uint32_t)0x0000000F) /*!< Implementation defined revision number */ +#define SCB_CPUID_PARTNO ((uint32_t)0x0000FFF0) /*!< Number of processor within family */ +#define SCB_CPUID_Constant ((uint32_t)0x000F0000) /*!< Reads as 0x0F */ +#define SCB_CPUID_VARIANT ((uint32_t)0x00F00000) /*!< Implementation defined variant number */ +#define SCB_CPUID_IMPLEMENTER ((uint32_t)0xFF000000) /*!< Implementer code. ARM is 0x41 */ + +/******************* Bit definition for SCB_ICSR register *******************/ +#define SCB_ICSR_VECTACTIVE ((uint32_t)0x000001FF) /*!< Active ISR number field */ +#define SCB_ICSR_RETTOBASE ((uint32_t)0x00000800) /*!< All active exceptions minus the IPSR_current_exception yields the empty set */ +#define SCB_ICSR_VECTPENDING ((uint32_t)0x003FF000) /*!< Pending ISR number field */ +#define SCB_ICSR_ISRPENDING ((uint32_t)0x00400000) /*!< Interrupt pending flag */ +#define SCB_ICSR_ISRPREEMPT ((uint32_t)0x00800000) /*!< It indicates that a pending interrupt becomes active in the next running cycle */ +#define SCB_ICSR_PENDSTCLR ((uint32_t)0x02000000) /*!< Clear pending SysTick bit */ +#define SCB_ICSR_PENDSTSET ((uint32_t)0x04000000) /*!< Set pending SysTick bit */ +#define SCB_ICSR_PENDSVCLR ((uint32_t)0x08000000) /*!< Clear pending pendSV bit */ +#define SCB_ICSR_PENDSVSET ((uint32_t)0x10000000) /*!< Set pending pendSV bit */ +#define SCB_ICSR_NMIPENDSET ((uint32_t)0x80000000) /*!< Set pending NMI bit */ + +/******************* Bit definition for SCB_VTOR register *******************/ +#define SCB_VTOR_TBLOFF ((uint32_t)0x1FFFFF80) /*!< Vector table base offset field */ +#define SCB_VTOR_TBLBASE ((uint32_t)0x20000000) /*!< Table base in code(0) or RAM(1) */ + +/*!<***************** Bit definition for SCB_AIRCR register *******************/ +#define SCB_AIRCR_VECTRESET ((uint32_t)0x00000001) /*!< System Reset bit */ +#define SCB_AIRCR_VECTCLRACTIVE ((uint32_t)0x00000002) /*!< Clear active vector bit */ +#define SCB_AIRCR_SYSRESETREQ ((uint32_t)0x00000004) /*!< Requests chip control logic to generate a reset */ + +#define SCB_AIRCR_PRIGROUP ((uint32_t)0x00000700) /*!< PRIGROUP[2:0] bits (Priority group) */ +#define SCB_AIRCR_PRIGROUP_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define SCB_AIRCR_PRIGROUP_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define SCB_AIRCR_PRIGROUP_2 ((uint32_t)0x00000400) /*!< Bit 2 */ + +/* prority group configuration */ +#define SCB_AIRCR_PRIGROUP0 ((uint32_t)0x00000000) /*!< Priority group=0 (7 bits of pre-emption priority, 1 bit of subpriority) */ +#define SCB_AIRCR_PRIGROUP1 ((uint32_t)0x00000100) /*!< Priority group=1 (6 bits of pre-emption priority, 2 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP2 ((uint32_t)0x00000200) /*!< Priority group=2 (5 bits of pre-emption priority, 3 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP3 ((uint32_t)0x00000300) /*!< Priority group=3 (4 bits of pre-emption priority, 4 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP4 ((uint32_t)0x00000400) /*!< Priority group=4 (3 bits of pre-emption priority, 5 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP5 ((uint32_t)0x00000500) /*!< Priority group=5 (2 bits of pre-emption priority, 6 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP6 ((uint32_t)0x00000600) /*!< Priority group=6 (1 bit of pre-emption priority, 7 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP7 ((uint32_t)0x00000700) /*!< Priority group=7 (no pre-emption priority, 8 bits of subpriority) */ + +#define SCB_AIRCR_ENDIANESS ((uint32_t)0x00008000) /*!< Data endianness bit */ +#define SCB_AIRCR_VECTKEY ((uint32_t)0xFFFF0000) /*!< Register key (VECTKEY) - Reads as 0xFA05 (VECTKEYSTAT) */ + +/******************* Bit definition for SCB_SCR register ********************/ +#define SCB_SCR_SLEEPONEXIT ((uint32_t)0x00000002) /*!< Sleep on exit bit */ +#define SCB_SCR_SLEEPDEEP ((uint32_t)0x00000004) /*!< Sleep deep bit */ +#define SCB_SCR_SEVONPEND ((uint32_t)0x00000010) /*!< Wake up from WFE */ + +/******************** Bit definition for SCB_CCR register *******************/ +#define SCB_CCR_NONBASETHRDENA ((uint32_t)0x00000001) /*!< Thread mode can be entered from any level in Handler mode by controlled return value */ +#define SCB_CCR_USERSETMPEND ((uint32_t)0x00000002) /*!< Enables user code to write the Software Trigger Interrupt register to trigger (pend) a Main exception */ +#define SCB_CCR_UNALIGN_TRP ((uint32_t)0x00000008) /*!< Trap for unaligned access */ +#define SCB_CCR_DIV_0_TRP ((uint32_t)0x00000010) /*!< Trap on Divide by 0 */ +#define SCB_CCR_BFHFNMIGN ((uint32_t)0x00000100) /*!< Handlers running at priority -1 and -2 */ +#define SCB_CCR_STKALIGN ((uint32_t)0x00000200) /*!< On exception entry, the SP used prior to the exception is adjusted to be 8-byte aligned */ + +/******************* Bit definition for SCB_SHPR register ********************/ +#define SCB_SHPR_PRI_N_Pos (0U) +#define SCB_SHPR_PRI_N_Msk (0xFFU << SCB_SHPR_PRI_N_Pos) /*!< 0x000000FF */ +#define SCB_SHPR_PRI_N SCB_SHPR_PRI_N_Msk /*!< Priority of system handler 4,8, and 12. Mem Manage, reserved and Debug Monitor */ +#define SCB_SHPR_PRI_N1_Pos (8U) +#define SCB_SHPR_PRI_N1_Msk (0xFFU << SCB_SHPR_PRI_N1_Pos) /*!< 0x0000FF00 */ +#define SCB_SHPR_PRI_N1 SCB_SHPR_PRI_N1_Msk /*!< Priority of system handler 5,9, and 13. Bus Fault, reserved and reserved */ +#define SCB_SHPR_PRI_N2_Pos (16U) +#define SCB_SHPR_PRI_N2_Msk (0xFFU << SCB_SHPR_PRI_N2_Pos) /*!< 0x00FF0000 */ +#define SCB_SHPR_PRI_N2 SCB_SHPR_PRI_N2_Msk /*!< Priority of system handler 6,10, and 14. Usage Fault, reserved and PendSV */ +#define SCB_SHPR_PRI_N3_Pos (24U) +#define SCB_SHPR_PRI_N3_Msk (0xFFU << SCB_SHPR_PRI_N3_Pos) /*!< 0xFF000000 */ +#define SCB_SHPR_PRI_N3 SCB_SHPR_PRI_N3_Msk /*!< Priority of system handler 7,11, and 15. Reserved, SVCall and SysTick */ + +/****************** Bit definition for SCB_SHCSR register *******************/ +#define SCB_SHCSR_MEMFAULTACT ((uint32_t)0x00000001) /*!< MemManage is active */ +#define SCB_SHCSR_BUSFAULTACT ((uint32_t)0x00000002) /*!< BusFault is active */ +#define SCB_SHCSR_USGFAULTACT ((uint32_t)0x00000008) /*!< UsageFault is active */ +#define SCB_SHCSR_SVCALLACT ((uint32_t)0x00000080) /*!< SVCall is active */ +#define SCB_SHCSR_MONITORACT ((uint32_t)0x00000100) /*!< Monitor is active */ +#define SCB_SHCSR_PENDSVACT ((uint32_t)0x00000400) /*!< PendSV is active */ +#define SCB_SHCSR_SYSTICKACT ((uint32_t)0x00000800) /*!< SysTick is active */ +#define SCB_SHCSR_USGFAULTPENDED ((uint32_t)0x00001000) /*!< Usage Fault is pended */ +#define SCB_SHCSR_MEMFAULTPENDED ((uint32_t)0x00002000) /*!< MemManage is pended */ +#define SCB_SHCSR_BUSFAULTPENDED ((uint32_t)0x00004000) /*!< Bus Fault is pended */ +#define SCB_SHCSR_SVCALLPENDED ((uint32_t)0x00008000) /*!< SVCall is pended */ +#define SCB_SHCSR_MEMFAULTENA ((uint32_t)0x00010000) /*!< MemManage enable */ +#define SCB_SHCSR_BUSFAULTENA ((uint32_t)0x00020000) /*!< Bus Fault enable */ +#define SCB_SHCSR_USGFAULTENA ((uint32_t)0x00040000) /*!< UsageFault enable */ + +/******************* Bit definition for SCB_CFSR register *******************/ +/*!< MFSR */ +#define SCB_CFSR_IACCVIOL_Pos (0U) +#define SCB_CFSR_IACCVIOL_Msk (0x1U << SCB_CFSR_IACCVIOL_Pos) /*!< 0x00000001 */ +#define SCB_CFSR_IACCVIOL SCB_CFSR_IACCVIOL_Msk /*!< Instruction access violation */ +#define SCB_CFSR_DACCVIOL_Pos (1U) +#define SCB_CFSR_DACCVIOL_Msk (0x1U << SCB_CFSR_DACCVIOL_Pos) /*!< 0x00000002 */ +#define SCB_CFSR_DACCVIOL SCB_CFSR_DACCVIOL_Msk /*!< Data access violation */ +#define SCB_CFSR_MUNSTKERR_Pos (3U) +#define SCB_CFSR_MUNSTKERR_Msk (0x1U << SCB_CFSR_MUNSTKERR_Pos) /*!< 0x00000008 */ +#define SCB_CFSR_MUNSTKERR SCB_CFSR_MUNSTKERR_Msk /*!< Unstacking error */ +#define SCB_CFSR_MSTKERR_Pos (4U) +#define SCB_CFSR_MSTKERR_Msk (0x1U << SCB_CFSR_MSTKERR_Pos) /*!< 0x00000010 */ +#define SCB_CFSR_MSTKERR SCB_CFSR_MSTKERR_Msk /*!< Stacking error */ +#define SCB_CFSR_MMARVALID_Pos (7U) +#define SCB_CFSR_MMARVALID_Msk (0x1U << SCB_CFSR_MMARVALID_Pos) /*!< 0x00000080 */ +#define SCB_CFSR_MMARVALID SCB_CFSR_MMARVALID_Msk /*!< Memory Manage Address Register address valid flag */ +/*!< BFSR */ +#define SCB_CFSR_IBUSERR_Pos (8U) +#define SCB_CFSR_IBUSERR_Msk (0x1U << SCB_CFSR_IBUSERR_Pos) /*!< 0x00000100 */ +#define SCB_CFSR_IBUSERR SCB_CFSR_IBUSERR_Msk /*!< Instruction bus error flag */ +#define SCB_CFSR_PRECISERR_Pos (9U) +#define SCB_CFSR_PRECISERR_Msk (0x1U << SCB_CFSR_PRECISERR_Pos) /*!< 0x00000200 */ +#define SCB_CFSR_PRECISERR SCB_CFSR_PRECISERR_Msk /*!< Precise data bus error */ +#define SCB_CFSR_IMPRECISERR_Pos (10U) +#define SCB_CFSR_IMPRECISERR_Msk (0x1U << SCB_CFSR_IMPRECISERR_Pos) /*!< 0x00000400 */ +#define SCB_CFSR_IMPRECISERR SCB_CFSR_IMPRECISERR_Msk /*!< Imprecise data bus error */ +#define SCB_CFSR_UNSTKERR_Pos (11U) +#define SCB_CFSR_UNSTKERR_Msk (0x1U << SCB_CFSR_UNSTKERR_Pos) /*!< 0x00000800 */ +#define SCB_CFSR_UNSTKERR SCB_CFSR_UNSTKERR_Msk /*!< Unstacking error */ +#define SCB_CFSR_STKERR_Pos (12U) +#define SCB_CFSR_STKERR_Msk (0x1U << SCB_CFSR_STKERR_Pos) /*!< 0x00001000 */ +#define SCB_CFSR_STKERR SCB_CFSR_STKERR_Msk /*!< Stacking error */ +#define SCB_CFSR_BFARVALID_Pos (15U) +#define SCB_CFSR_BFARVALID_Msk (0x1U << SCB_CFSR_BFARVALID_Pos) /*!< 0x00008000 */ +#define SCB_CFSR_BFARVALID SCB_CFSR_BFARVALID_Msk /*!< Bus Fault Address Register address valid flag */ +/*!< UFSR */ +#define SCB_CFSR_UNDEFINSTR_Pos (16U) +#define SCB_CFSR_UNDEFINSTR_Msk (0x1U << SCB_CFSR_UNDEFINSTR_Pos) /*!< 0x00010000 */ +#define SCB_CFSR_UNDEFINSTR SCB_CFSR_UNDEFINSTR_Msk /*!< The processor attempt to execute an undefined instruction */ +#define SCB_CFSR_INVSTATE_Pos (17U) +#define SCB_CFSR_INVSTATE_Msk (0x1U << SCB_CFSR_INVSTATE_Pos) /*!< 0x00020000 */ +#define SCB_CFSR_INVSTATE SCB_CFSR_INVSTATE_Msk /*!< Invalid combination of EPSR and instruction */ +#define SCB_CFSR_INVPC_Pos (18U) +#define SCB_CFSR_INVPC_Msk (0x1U << SCB_CFSR_INVPC_Pos) /*!< 0x00040000 */ +#define SCB_CFSR_INVPC SCB_CFSR_INVPC_Msk /*!< Attempt to load EXC_RETURN into pc illegally */ +#define SCB_CFSR_NOCP_Pos (19U) +#define SCB_CFSR_NOCP_Msk (0x1U << SCB_CFSR_NOCP_Pos) /*!< 0x00080000 */ +#define SCB_CFSR_NOCP SCB_CFSR_NOCP_Msk /*!< Attempt to use a coprocessor instruction */ +#define SCB_CFSR_UNALIGNED_Pos (24U) +#define SCB_CFSR_UNALIGNED_Msk (0x1U << SCB_CFSR_UNALIGNED_Pos) /*!< 0x01000000 */ +#define SCB_CFSR_UNALIGNED SCB_CFSR_UNALIGNED_Msk /*!< Fault occurs when there is an attempt to make an unaligned memory access */ +#define SCB_CFSR_DIVBYZERO_Pos (25U) +#define SCB_CFSR_DIVBYZERO_Msk (0x1U << SCB_CFSR_DIVBYZERO_Pos) /*!< 0x02000000 */ +#define SCB_CFSR_DIVBYZERO SCB_CFSR_DIVBYZERO_Msk /*!< Fault occurs when SDIV or DIV instruction is used with a divisor of 0 */ + +/******************* Bit definition for SCB_HFSR register *******************/ +#define SCB_HFSR_VECTTBL ((uint32_t)0x00000002) /*!< Fault occurs because of vector table read on exception processing */ +#define SCB_HFSR_FORCED ((uint32_t)0x40000000) /*!< Hard Fault activated when a configurable Fault was received and cannot activate */ +#define SCB_HFSR_DEBUGEVT ((uint32_t)0x80000000) /*!< Fault related to debug */ + +/******************* Bit definition for SCB_DFSR register *******************/ +#define SCB_DFSR_HALTED ((uint32_t)0x00000001) /*!< Halt request flag */ +#define SCB_DFSR_BKPT ((uint32_t)0x00000002) /*!< BKPT flag */ +#define SCB_DFSR_DWTTRAP ((uint32_t)0x00000004) /*!< Data Watchpoint and Trace (DWT) flag */ +#define SCB_DFSR_VCATCH ((uint32_t)0x00000008) /*!< Vector catch flag */ +#define SCB_DFSR_EXTERNAL ((uint32_t)0x00000010) /*!< External debug request flag */ + +/******************* Bit definition for SCB_MMFAR register ******************/ +#define SCB_MMFAR_ADDRESS_Pos (0U) +#define SCB_MMFAR_ADDRESS_Msk (0xFFFFFFFFU << SCB_MMFAR_ADDRESS_Pos) /*!< 0xFFFFFFFF */ +#define SCB_MMFAR_ADDRESS SCB_MMFAR_ADDRESS_Msk /*!< Mem Manage fault address field */ + +/******************* Bit definition for SCB_BFAR register *******************/ +#define SCB_BFAR_ADDRESS_Pos (0U) +#define SCB_BFAR_ADDRESS_Msk (0xFFFFFFFFU << SCB_BFAR_ADDRESS_Pos) /*!< 0xFFFFFFFF */ +#define SCB_BFAR_ADDRESS SCB_BFAR_ADDRESS_Msk /*!< Bus fault address field */ + +/******************* Bit definition for SCB_afsr register *******************/ +#define SCB_AFSR_IMPDEF_Pos (0U) +#define SCB_AFSR_IMPDEF_Msk (0xFFFFFFFFU << SCB_AFSR_IMPDEF_Pos) /*!< 0xFFFFFFFF */ +#define SCB_AFSR_IMPDEF SCB_AFSR_IMPDEF_Msk /*!< Implementation defined */ + +/******************************************************************************/ +/* */ +/* External Interrupt/Event Controller */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for EXTI_IMR register *******************/ +#define EXTI_IMR_MR0_Pos (0U) +#define EXTI_IMR_MR0_Msk (0x1U << EXTI_IMR_MR0_Pos) /*!< 0x00000001 */ +#define EXTI_IMR_MR0 EXTI_IMR_MR0_Msk /*!< Interrupt Mask on line 0 */ +#define EXTI_IMR_MR1_Pos (1U) +#define EXTI_IMR_MR1_Msk (0x1U << EXTI_IMR_MR1_Pos) /*!< 0x00000002 */ +#define EXTI_IMR_MR1 EXTI_IMR_MR1_Msk /*!< Interrupt Mask on line 1 */ +#define EXTI_IMR_MR2_Pos (2U) +#define EXTI_IMR_MR2_Msk (0x1U << EXTI_IMR_MR2_Pos) /*!< 0x00000004 */ +#define EXTI_IMR_MR2 EXTI_IMR_MR2_Msk /*!< Interrupt Mask on line 2 */ +#define EXTI_IMR_MR3_Pos (3U) +#define EXTI_IMR_MR3_Msk (0x1U << EXTI_IMR_MR3_Pos) /*!< 0x00000008 */ +#define EXTI_IMR_MR3 EXTI_IMR_MR3_Msk /*!< Interrupt Mask on line 3 */ +#define EXTI_IMR_MR4_Pos (4U) +#define EXTI_IMR_MR4_Msk (0x1U << EXTI_IMR_MR4_Pos) /*!< 0x00000010 */ +#define EXTI_IMR_MR4 EXTI_IMR_MR4_Msk /*!< Interrupt Mask on line 4 */ +#define EXTI_IMR_MR5_Pos (5U) +#define EXTI_IMR_MR5_Msk (0x1U << EXTI_IMR_MR5_Pos) /*!< 0x00000020 */ +#define EXTI_IMR_MR5 EXTI_IMR_MR5_Msk /*!< Interrupt Mask on line 5 */ +#define EXTI_IMR_MR6_Pos (6U) +#define EXTI_IMR_MR6_Msk (0x1U << EXTI_IMR_MR6_Pos) /*!< 0x00000040 */ +#define EXTI_IMR_MR6 EXTI_IMR_MR6_Msk /*!< Interrupt Mask on line 6 */ +#define EXTI_IMR_MR7_Pos (7U) +#define EXTI_IMR_MR7_Msk (0x1U << EXTI_IMR_MR7_Pos) /*!< 0x00000080 */ +#define EXTI_IMR_MR7 EXTI_IMR_MR7_Msk /*!< Interrupt Mask on line 7 */ +#define EXTI_IMR_MR8_Pos (8U) +#define EXTI_IMR_MR8_Msk (0x1U << EXTI_IMR_MR8_Pos) /*!< 0x00000100 */ +#define EXTI_IMR_MR8 EXTI_IMR_MR8_Msk /*!< Interrupt Mask on line 8 */ +#define EXTI_IMR_MR9_Pos (9U) +#define EXTI_IMR_MR9_Msk (0x1U << EXTI_IMR_MR9_Pos) /*!< 0x00000200 */ +#define EXTI_IMR_MR9 EXTI_IMR_MR9_Msk /*!< Interrupt Mask on line 9 */ +#define EXTI_IMR_MR10_Pos (10U) +#define EXTI_IMR_MR10_Msk (0x1U << EXTI_IMR_MR10_Pos) /*!< 0x00000400 */ +#define EXTI_IMR_MR10 EXTI_IMR_MR10_Msk /*!< Interrupt Mask on line 10 */ +#define EXTI_IMR_MR11_Pos (11U) +#define EXTI_IMR_MR11_Msk (0x1U << EXTI_IMR_MR11_Pos) /*!< 0x00000800 */ +#define EXTI_IMR_MR11 EXTI_IMR_MR11_Msk /*!< Interrupt Mask on line 11 */ +#define EXTI_IMR_MR12_Pos (12U) +#define EXTI_IMR_MR12_Msk (0x1U << EXTI_IMR_MR12_Pos) /*!< 0x00001000 */ +#define EXTI_IMR_MR12 EXTI_IMR_MR12_Msk /*!< Interrupt Mask on line 12 */ +#define EXTI_IMR_MR13_Pos (13U) +#define EXTI_IMR_MR13_Msk (0x1U << EXTI_IMR_MR13_Pos) /*!< 0x00002000 */ +#define EXTI_IMR_MR13 EXTI_IMR_MR13_Msk /*!< Interrupt Mask on line 13 */ +#define EXTI_IMR_MR14_Pos (14U) +#define EXTI_IMR_MR14_Msk (0x1U << EXTI_IMR_MR14_Pos) /*!< 0x00004000 */ +#define EXTI_IMR_MR14 EXTI_IMR_MR14_Msk /*!< Interrupt Mask on line 14 */ +#define EXTI_IMR_MR15_Pos (15U) +#define EXTI_IMR_MR15_Msk (0x1U << EXTI_IMR_MR15_Pos) /*!< 0x00008000 */ +#define EXTI_IMR_MR15 EXTI_IMR_MR15_Msk /*!< Interrupt Mask on line 15 */ +#define EXTI_IMR_MR16_Pos (16U) +#define EXTI_IMR_MR16_Msk (0x1U << EXTI_IMR_MR16_Pos) /*!< 0x00010000 */ +#define EXTI_IMR_MR16 EXTI_IMR_MR16_Msk /*!< Interrupt Mask on line 16 */ +#define EXTI_IMR_MR17_Pos (17U) +#define EXTI_IMR_MR17_Msk (0x1U << EXTI_IMR_MR17_Pos) /*!< 0x00020000 */ +#define EXTI_IMR_MR17 EXTI_IMR_MR17_Msk /*!< Interrupt Mask on line 17 */ +#define EXTI_IMR_MR18_Pos (18U) +#define EXTI_IMR_MR18_Msk (0x1U << EXTI_IMR_MR18_Pos) /*!< 0x00040000 */ +#define EXTI_IMR_MR18 EXTI_IMR_MR18_Msk /*!< Interrupt Mask on line 18 */ +#define EXTI_IMR_MR19_Pos (19U) +#define EXTI_IMR_MR19_Msk (0x1U << EXTI_IMR_MR19_Pos) /*!< 0x00080000 */ +#define EXTI_IMR_MR19 EXTI_IMR_MR19_Msk /*!< Interrupt Mask on line 19 */ + +/* References Defines */ +#define EXTI_IMR_IM0 EXTI_IMR_MR0 +#define EXTI_IMR_IM1 EXTI_IMR_MR1 +#define EXTI_IMR_IM2 EXTI_IMR_MR2 +#define EXTI_IMR_IM3 EXTI_IMR_MR3 +#define EXTI_IMR_IM4 EXTI_IMR_MR4 +#define EXTI_IMR_IM5 EXTI_IMR_MR5 +#define EXTI_IMR_IM6 EXTI_IMR_MR6 +#define EXTI_IMR_IM7 EXTI_IMR_MR7 +#define EXTI_IMR_IM8 EXTI_IMR_MR8 +#define EXTI_IMR_IM9 EXTI_IMR_MR9 +#define EXTI_IMR_IM10 EXTI_IMR_MR10 +#define EXTI_IMR_IM11 EXTI_IMR_MR11 +#define EXTI_IMR_IM12 EXTI_IMR_MR12 +#define EXTI_IMR_IM13 EXTI_IMR_MR13 +#define EXTI_IMR_IM14 EXTI_IMR_MR14 +#define EXTI_IMR_IM15 EXTI_IMR_MR15 +#define EXTI_IMR_IM16 EXTI_IMR_MR16 +#define EXTI_IMR_IM17 EXTI_IMR_MR17 +#define EXTI_IMR_IM18 EXTI_IMR_MR18 +#define EXTI_IMR_IM19 EXTI_IMR_MR19 + +/******************* Bit definition for EXTI_EMR register *******************/ +#define EXTI_EMR_MR0_Pos (0U) +#define EXTI_EMR_MR0_Msk (0x1U << EXTI_EMR_MR0_Pos) /*!< 0x00000001 */ +#define EXTI_EMR_MR0 EXTI_EMR_MR0_Msk /*!< Event Mask on line 0 */ +#define EXTI_EMR_MR1_Pos (1U) +#define EXTI_EMR_MR1_Msk (0x1U << EXTI_EMR_MR1_Pos) /*!< 0x00000002 */ +#define EXTI_EMR_MR1 EXTI_EMR_MR1_Msk /*!< Event Mask on line 1 */ +#define EXTI_EMR_MR2_Pos (2U) +#define EXTI_EMR_MR2_Msk (0x1U << EXTI_EMR_MR2_Pos) /*!< 0x00000004 */ +#define EXTI_EMR_MR2 EXTI_EMR_MR2_Msk /*!< Event Mask on line 2 */ +#define EXTI_EMR_MR3_Pos (3U) +#define EXTI_EMR_MR3_Msk (0x1U << EXTI_EMR_MR3_Pos) /*!< 0x00000008 */ +#define EXTI_EMR_MR3 EXTI_EMR_MR3_Msk /*!< Event Mask on line 3 */ +#define EXTI_EMR_MR4_Pos (4U) +#define EXTI_EMR_MR4_Msk (0x1U << EXTI_EMR_MR4_Pos) /*!< 0x00000010 */ +#define EXTI_EMR_MR4 EXTI_EMR_MR4_Msk /*!< Event Mask on line 4 */ +#define EXTI_EMR_MR5_Pos (5U) +#define EXTI_EMR_MR5_Msk (0x1U << EXTI_EMR_MR5_Pos) /*!< 0x00000020 */ +#define EXTI_EMR_MR5 EXTI_EMR_MR5_Msk /*!< Event Mask on line 5 */ +#define EXTI_EMR_MR6_Pos (6U) +#define EXTI_EMR_MR6_Msk (0x1U << EXTI_EMR_MR6_Pos) /*!< 0x00000040 */ +#define EXTI_EMR_MR6 EXTI_EMR_MR6_Msk /*!< Event Mask on line 6 */ +#define EXTI_EMR_MR7_Pos (7U) +#define EXTI_EMR_MR7_Msk (0x1U << EXTI_EMR_MR7_Pos) /*!< 0x00000080 */ +#define EXTI_EMR_MR7 EXTI_EMR_MR7_Msk /*!< Event Mask on line 7 */ +#define EXTI_EMR_MR8_Pos (8U) +#define EXTI_EMR_MR8_Msk (0x1U << EXTI_EMR_MR8_Pos) /*!< 0x00000100 */ +#define EXTI_EMR_MR8 EXTI_EMR_MR8_Msk /*!< Event Mask on line 8 */ +#define EXTI_EMR_MR9_Pos (9U) +#define EXTI_EMR_MR9_Msk (0x1U << EXTI_EMR_MR9_Pos) /*!< 0x00000200 */ +#define EXTI_EMR_MR9 EXTI_EMR_MR9_Msk /*!< Event Mask on line 9 */ +#define EXTI_EMR_MR10_Pos (10U) +#define EXTI_EMR_MR10_Msk (0x1U << EXTI_EMR_MR10_Pos) /*!< 0x00000400 */ +#define EXTI_EMR_MR10 EXTI_EMR_MR10_Msk /*!< Event Mask on line 10 */ +#define EXTI_EMR_MR11_Pos (11U) +#define EXTI_EMR_MR11_Msk (0x1U << EXTI_EMR_MR11_Pos) /*!< 0x00000800 */ +#define EXTI_EMR_MR11 EXTI_EMR_MR11_Msk /*!< Event Mask on line 11 */ +#define EXTI_EMR_MR12_Pos (12U) +#define EXTI_EMR_MR12_Msk (0x1U << EXTI_EMR_MR12_Pos) /*!< 0x00001000 */ +#define EXTI_EMR_MR12 EXTI_EMR_MR12_Msk /*!< Event Mask on line 12 */ +#define EXTI_EMR_MR13_Pos (13U) +#define EXTI_EMR_MR13_Msk (0x1U << EXTI_EMR_MR13_Pos) /*!< 0x00002000 */ +#define EXTI_EMR_MR13 EXTI_EMR_MR13_Msk /*!< Event Mask on line 13 */ +#define EXTI_EMR_MR14_Pos (14U) +#define EXTI_EMR_MR14_Msk (0x1U << EXTI_EMR_MR14_Pos) /*!< 0x00004000 */ +#define EXTI_EMR_MR14 EXTI_EMR_MR14_Msk /*!< Event Mask on line 14 */ +#define EXTI_EMR_MR15_Pos (15U) +#define EXTI_EMR_MR15_Msk (0x1U << EXTI_EMR_MR15_Pos) /*!< 0x00008000 */ +#define EXTI_EMR_MR15 EXTI_EMR_MR15_Msk /*!< Event Mask on line 15 */ +#define EXTI_EMR_MR16_Pos (16U) +#define EXTI_EMR_MR16_Msk (0x1U << EXTI_EMR_MR16_Pos) /*!< 0x00010000 */ +#define EXTI_EMR_MR16 EXTI_EMR_MR16_Msk /*!< Event Mask on line 16 */ +#define EXTI_EMR_MR17_Pos (17U) +#define EXTI_EMR_MR17_Msk (0x1U << EXTI_EMR_MR17_Pos) /*!< 0x00020000 */ +#define EXTI_EMR_MR17 EXTI_EMR_MR17_Msk /*!< Event Mask on line 17 */ +#define EXTI_EMR_MR18_Pos (18U) +#define EXTI_EMR_MR18_Msk (0x1U << EXTI_EMR_MR18_Pos) /*!< 0x00040000 */ +#define EXTI_EMR_MR18 EXTI_EMR_MR18_Msk /*!< Event Mask on line 18 */ +#define EXTI_EMR_MR19_Pos (19U) +#define EXTI_EMR_MR19_Msk (0x1U << EXTI_EMR_MR19_Pos) /*!< 0x00080000 */ +#define EXTI_EMR_MR19 EXTI_EMR_MR19_Msk /*!< Event Mask on line 19 */ + +/* References Defines */ +#define EXTI_EMR_EM0 EXTI_EMR_MR0 +#define EXTI_EMR_EM1 EXTI_EMR_MR1 +#define EXTI_EMR_EM2 EXTI_EMR_MR2 +#define EXTI_EMR_EM3 EXTI_EMR_MR3 +#define EXTI_EMR_EM4 EXTI_EMR_MR4 +#define EXTI_EMR_EM5 EXTI_EMR_MR5 +#define EXTI_EMR_EM6 EXTI_EMR_MR6 +#define EXTI_EMR_EM7 EXTI_EMR_MR7 +#define EXTI_EMR_EM8 EXTI_EMR_MR8 +#define EXTI_EMR_EM9 EXTI_EMR_MR9 +#define EXTI_EMR_EM10 EXTI_EMR_MR10 +#define EXTI_EMR_EM11 EXTI_EMR_MR11 +#define EXTI_EMR_EM12 EXTI_EMR_MR12 +#define EXTI_EMR_EM13 EXTI_EMR_MR13 +#define EXTI_EMR_EM14 EXTI_EMR_MR14 +#define EXTI_EMR_EM15 EXTI_EMR_MR15 +#define EXTI_EMR_EM16 EXTI_EMR_MR16 +#define EXTI_EMR_EM17 EXTI_EMR_MR17 +#define EXTI_EMR_EM18 EXTI_EMR_MR18 +#define EXTI_EMR_EM19 EXTI_EMR_MR19 + +/****************** Bit definition for EXTI_RTSR register *******************/ +#define EXTI_RTSR_TR0_Pos (0U) +#define EXTI_RTSR_TR0_Msk (0x1U << EXTI_RTSR_TR0_Pos) /*!< 0x00000001 */ +#define EXTI_RTSR_TR0 EXTI_RTSR_TR0_Msk /*!< Rising trigger event configuration bit of line 0 */ +#define EXTI_RTSR_TR1_Pos (1U) +#define EXTI_RTSR_TR1_Msk (0x1U << EXTI_RTSR_TR1_Pos) /*!< 0x00000002 */ +#define EXTI_RTSR_TR1 EXTI_RTSR_TR1_Msk /*!< Rising trigger event configuration bit of line 1 */ +#define EXTI_RTSR_TR2_Pos (2U) +#define EXTI_RTSR_TR2_Msk (0x1U << EXTI_RTSR_TR2_Pos) /*!< 0x00000004 */ +#define EXTI_RTSR_TR2 EXTI_RTSR_TR2_Msk /*!< Rising trigger event configuration bit of line 2 */ +#define EXTI_RTSR_TR3_Pos (3U) +#define EXTI_RTSR_TR3_Msk (0x1U << EXTI_RTSR_TR3_Pos) /*!< 0x00000008 */ +#define EXTI_RTSR_TR3 EXTI_RTSR_TR3_Msk /*!< Rising trigger event configuration bit of line 3 */ +#define EXTI_RTSR_TR4_Pos (4U) +#define EXTI_RTSR_TR4_Msk (0x1U << EXTI_RTSR_TR4_Pos) /*!< 0x00000010 */ +#define EXTI_RTSR_TR4 EXTI_RTSR_TR4_Msk /*!< Rising trigger event configuration bit of line 4 */ +#define EXTI_RTSR_TR5_Pos (5U) +#define EXTI_RTSR_TR5_Msk (0x1U << EXTI_RTSR_TR5_Pos) /*!< 0x00000020 */ +#define EXTI_RTSR_TR5 EXTI_RTSR_TR5_Msk /*!< Rising trigger event configuration bit of line 5 */ +#define EXTI_RTSR_TR6_Pos (6U) +#define EXTI_RTSR_TR6_Msk (0x1U << EXTI_RTSR_TR6_Pos) /*!< 0x00000040 */ +#define EXTI_RTSR_TR6 EXTI_RTSR_TR6_Msk /*!< Rising trigger event configuration bit of line 6 */ +#define EXTI_RTSR_TR7_Pos (7U) +#define EXTI_RTSR_TR7_Msk (0x1U << EXTI_RTSR_TR7_Pos) /*!< 0x00000080 */ +#define EXTI_RTSR_TR7 EXTI_RTSR_TR7_Msk /*!< Rising trigger event configuration bit of line 7 */ +#define EXTI_RTSR_TR8_Pos (8U) +#define EXTI_RTSR_TR8_Msk (0x1U << EXTI_RTSR_TR8_Pos) /*!< 0x00000100 */ +#define EXTI_RTSR_TR8 EXTI_RTSR_TR8_Msk /*!< Rising trigger event configuration bit of line 8 */ +#define EXTI_RTSR_TR9_Pos (9U) +#define EXTI_RTSR_TR9_Msk (0x1U << EXTI_RTSR_TR9_Pos) /*!< 0x00000200 */ +#define EXTI_RTSR_TR9 EXTI_RTSR_TR9_Msk /*!< Rising trigger event configuration bit of line 9 */ +#define EXTI_RTSR_TR10_Pos (10U) +#define EXTI_RTSR_TR10_Msk (0x1U << EXTI_RTSR_TR10_Pos) /*!< 0x00000400 */ +#define EXTI_RTSR_TR10 EXTI_RTSR_TR10_Msk /*!< Rising trigger event configuration bit of line 10 */ +#define EXTI_RTSR_TR11_Pos (11U) +#define EXTI_RTSR_TR11_Msk (0x1U << EXTI_RTSR_TR11_Pos) /*!< 0x00000800 */ +#define EXTI_RTSR_TR11 EXTI_RTSR_TR11_Msk /*!< Rising trigger event configuration bit of line 11 */ +#define EXTI_RTSR_TR12_Pos (12U) +#define EXTI_RTSR_TR12_Msk (0x1U << EXTI_RTSR_TR12_Pos) /*!< 0x00001000 */ +#define EXTI_RTSR_TR12 EXTI_RTSR_TR12_Msk /*!< Rising trigger event configuration bit of line 12 */ +#define EXTI_RTSR_TR13_Pos (13U) +#define EXTI_RTSR_TR13_Msk (0x1U << EXTI_RTSR_TR13_Pos) /*!< 0x00002000 */ +#define EXTI_RTSR_TR13 EXTI_RTSR_TR13_Msk /*!< Rising trigger event configuration bit of line 13 */ +#define EXTI_RTSR_TR14_Pos (14U) +#define EXTI_RTSR_TR14_Msk (0x1U << EXTI_RTSR_TR14_Pos) /*!< 0x00004000 */ +#define EXTI_RTSR_TR14 EXTI_RTSR_TR14_Msk /*!< Rising trigger event configuration bit of line 14 */ +#define EXTI_RTSR_TR15_Pos (15U) +#define EXTI_RTSR_TR15_Msk (0x1U << EXTI_RTSR_TR15_Pos) /*!< 0x00008000 */ +#define EXTI_RTSR_TR15 EXTI_RTSR_TR15_Msk /*!< Rising trigger event configuration bit of line 15 */ +#define EXTI_RTSR_TR16_Pos (16U) +#define EXTI_RTSR_TR16_Msk (0x1U << EXTI_RTSR_TR16_Pos) /*!< 0x00010000 */ +#define EXTI_RTSR_TR16 EXTI_RTSR_TR16_Msk /*!< Rising trigger event configuration bit of line 16 */ +#define EXTI_RTSR_TR17_Pos (17U) +#define EXTI_RTSR_TR17_Msk (0x1U << EXTI_RTSR_TR17_Pos) /*!< 0x00020000 */ +#define EXTI_RTSR_TR17 EXTI_RTSR_TR17_Msk /*!< Rising trigger event configuration bit of line 17 */ +#define EXTI_RTSR_TR18_Pos (18U) +#define EXTI_RTSR_TR18_Msk (0x1U << EXTI_RTSR_TR18_Pos) /*!< 0x00040000 */ +#define EXTI_RTSR_TR18 EXTI_RTSR_TR18_Msk /*!< Rising trigger event configuration bit of line 18 */ +#define EXTI_RTSR_TR19_Pos (19U) +#define EXTI_RTSR_TR19_Msk (0x1U << EXTI_RTSR_TR19_Pos) /*!< 0x00080000 */ +#define EXTI_RTSR_TR19 EXTI_RTSR_TR19_Msk /*!< Rising trigger event configuration bit of line 19 */ + +/* References Defines */ +#define EXTI_RTSR_RT0 EXTI_RTSR_TR0 +#define EXTI_RTSR_RT1 EXTI_RTSR_TR1 +#define EXTI_RTSR_RT2 EXTI_RTSR_TR2 +#define EXTI_RTSR_RT3 EXTI_RTSR_TR3 +#define EXTI_RTSR_RT4 EXTI_RTSR_TR4 +#define EXTI_RTSR_RT5 EXTI_RTSR_TR5 +#define EXTI_RTSR_RT6 EXTI_RTSR_TR6 +#define EXTI_RTSR_RT7 EXTI_RTSR_TR7 +#define EXTI_RTSR_RT8 EXTI_RTSR_TR8 +#define EXTI_RTSR_RT9 EXTI_RTSR_TR9 +#define EXTI_RTSR_RT10 EXTI_RTSR_TR10 +#define EXTI_RTSR_RT11 EXTI_RTSR_TR11 +#define EXTI_RTSR_RT12 EXTI_RTSR_TR12 +#define EXTI_RTSR_RT13 EXTI_RTSR_TR13 +#define EXTI_RTSR_RT14 EXTI_RTSR_TR14 +#define EXTI_RTSR_RT15 EXTI_RTSR_TR15 +#define EXTI_RTSR_RT16 EXTI_RTSR_TR16 +#define EXTI_RTSR_RT17 EXTI_RTSR_TR17 +#define EXTI_RTSR_RT18 EXTI_RTSR_TR18 +#define EXTI_RTSR_RT19 EXTI_RTSR_TR19 + +/****************** Bit definition for EXTI_FTSR register *******************/ +#define EXTI_FTSR_TR0_Pos (0U) +#define EXTI_FTSR_TR0_Msk (0x1U << EXTI_FTSR_TR0_Pos) /*!< 0x00000001 */ +#define EXTI_FTSR_TR0 EXTI_FTSR_TR0_Msk /*!< Falling trigger event configuration bit of line 0 */ +#define EXTI_FTSR_TR1_Pos (1U) +#define EXTI_FTSR_TR1_Msk (0x1U << EXTI_FTSR_TR1_Pos) /*!< 0x00000002 */ +#define EXTI_FTSR_TR1 EXTI_FTSR_TR1_Msk /*!< Falling trigger event configuration bit of line 1 */ +#define EXTI_FTSR_TR2_Pos (2U) +#define EXTI_FTSR_TR2_Msk (0x1U << EXTI_FTSR_TR2_Pos) /*!< 0x00000004 */ +#define EXTI_FTSR_TR2 EXTI_FTSR_TR2_Msk /*!< Falling trigger event configuration bit of line 2 */ +#define EXTI_FTSR_TR3_Pos (3U) +#define EXTI_FTSR_TR3_Msk (0x1U << EXTI_FTSR_TR3_Pos) /*!< 0x00000008 */ +#define EXTI_FTSR_TR3 EXTI_FTSR_TR3_Msk /*!< Falling trigger event configuration bit of line 3 */ +#define EXTI_FTSR_TR4_Pos (4U) +#define EXTI_FTSR_TR4_Msk (0x1U << EXTI_FTSR_TR4_Pos) /*!< 0x00000010 */ +#define EXTI_FTSR_TR4 EXTI_FTSR_TR4_Msk /*!< Falling trigger event configuration bit of line 4 */ +#define EXTI_FTSR_TR5_Pos (5U) +#define EXTI_FTSR_TR5_Msk (0x1U << EXTI_FTSR_TR5_Pos) /*!< 0x00000020 */ +#define EXTI_FTSR_TR5 EXTI_FTSR_TR5_Msk /*!< Falling trigger event configuration bit of line 5 */ +#define EXTI_FTSR_TR6_Pos (6U) +#define EXTI_FTSR_TR6_Msk (0x1U << EXTI_FTSR_TR6_Pos) /*!< 0x00000040 */ +#define EXTI_FTSR_TR6 EXTI_FTSR_TR6_Msk /*!< Falling trigger event configuration bit of line 6 */ +#define EXTI_FTSR_TR7_Pos (7U) +#define EXTI_FTSR_TR7_Msk (0x1U << EXTI_FTSR_TR7_Pos) /*!< 0x00000080 */ +#define EXTI_FTSR_TR7 EXTI_FTSR_TR7_Msk /*!< Falling trigger event configuration bit of line 7 */ +#define EXTI_FTSR_TR8_Pos (8U) +#define EXTI_FTSR_TR8_Msk (0x1U << EXTI_FTSR_TR8_Pos) /*!< 0x00000100 */ +#define EXTI_FTSR_TR8 EXTI_FTSR_TR8_Msk /*!< Falling trigger event configuration bit of line 8 */ +#define EXTI_FTSR_TR9_Pos (9U) +#define EXTI_FTSR_TR9_Msk (0x1U << EXTI_FTSR_TR9_Pos) /*!< 0x00000200 */ +#define EXTI_FTSR_TR9 EXTI_FTSR_TR9_Msk /*!< Falling trigger event configuration bit of line 9 */ +#define EXTI_FTSR_TR10_Pos (10U) +#define EXTI_FTSR_TR10_Msk (0x1U << EXTI_FTSR_TR10_Pos) /*!< 0x00000400 */ +#define EXTI_FTSR_TR10 EXTI_FTSR_TR10_Msk /*!< Falling trigger event configuration bit of line 10 */ +#define EXTI_FTSR_TR11_Pos (11U) +#define EXTI_FTSR_TR11_Msk (0x1U << EXTI_FTSR_TR11_Pos) /*!< 0x00000800 */ +#define EXTI_FTSR_TR11 EXTI_FTSR_TR11_Msk /*!< Falling trigger event configuration bit of line 11 */ +#define EXTI_FTSR_TR12_Pos (12U) +#define EXTI_FTSR_TR12_Msk (0x1U << EXTI_FTSR_TR12_Pos) /*!< 0x00001000 */ +#define EXTI_FTSR_TR12 EXTI_FTSR_TR12_Msk /*!< Falling trigger event configuration bit of line 12 */ +#define EXTI_FTSR_TR13_Pos (13U) +#define EXTI_FTSR_TR13_Msk (0x1U << EXTI_FTSR_TR13_Pos) /*!< 0x00002000 */ +#define EXTI_FTSR_TR13 EXTI_FTSR_TR13_Msk /*!< Falling trigger event configuration bit of line 13 */ +#define EXTI_FTSR_TR14_Pos (14U) +#define EXTI_FTSR_TR14_Msk (0x1U << EXTI_FTSR_TR14_Pos) /*!< 0x00004000 */ +#define EXTI_FTSR_TR14 EXTI_FTSR_TR14_Msk /*!< Falling trigger event configuration bit of line 14 */ +#define EXTI_FTSR_TR15_Pos (15U) +#define EXTI_FTSR_TR15_Msk (0x1U << EXTI_FTSR_TR15_Pos) /*!< 0x00008000 */ +#define EXTI_FTSR_TR15 EXTI_FTSR_TR15_Msk /*!< Falling trigger event configuration bit of line 15 */ +#define EXTI_FTSR_TR16_Pos (16U) +#define EXTI_FTSR_TR16_Msk (0x1U << EXTI_FTSR_TR16_Pos) /*!< 0x00010000 */ +#define EXTI_FTSR_TR16 EXTI_FTSR_TR16_Msk /*!< Falling trigger event configuration bit of line 16 */ +#define EXTI_FTSR_TR17_Pos (17U) +#define EXTI_FTSR_TR17_Msk (0x1U << EXTI_FTSR_TR17_Pos) /*!< 0x00020000 */ +#define EXTI_FTSR_TR17 EXTI_FTSR_TR17_Msk /*!< Falling trigger event configuration bit of line 17 */ +#define EXTI_FTSR_TR18_Pos (18U) +#define EXTI_FTSR_TR18_Msk (0x1U << EXTI_FTSR_TR18_Pos) /*!< 0x00040000 */ +#define EXTI_FTSR_TR18 EXTI_FTSR_TR18_Msk /*!< Falling trigger event configuration bit of line 18 */ +#define EXTI_FTSR_TR19_Pos (19U) +#define EXTI_FTSR_TR19_Msk (0x1U << EXTI_FTSR_TR19_Pos) /*!< 0x00080000 */ +#define EXTI_FTSR_TR19 EXTI_FTSR_TR19_Msk /*!< Falling trigger event configuration bit of line 19 */ + +/* References Defines */ +#define EXTI_FTSR_FT0 EXTI_FTSR_TR0 +#define EXTI_FTSR_FT1 EXTI_FTSR_TR1 +#define EXTI_FTSR_FT2 EXTI_FTSR_TR2 +#define EXTI_FTSR_FT3 EXTI_FTSR_TR3 +#define EXTI_FTSR_FT4 EXTI_FTSR_TR4 +#define EXTI_FTSR_FT5 EXTI_FTSR_TR5 +#define EXTI_FTSR_FT6 EXTI_FTSR_TR6 +#define EXTI_FTSR_FT7 EXTI_FTSR_TR7 +#define EXTI_FTSR_FT8 EXTI_FTSR_TR8 +#define EXTI_FTSR_FT9 EXTI_FTSR_TR9 +#define EXTI_FTSR_FT10 EXTI_FTSR_TR10 +#define EXTI_FTSR_FT11 EXTI_FTSR_TR11 +#define EXTI_FTSR_FT12 EXTI_FTSR_TR12 +#define EXTI_FTSR_FT13 EXTI_FTSR_TR13 +#define EXTI_FTSR_FT14 EXTI_FTSR_TR14 +#define EXTI_FTSR_FT15 EXTI_FTSR_TR15 +#define EXTI_FTSR_FT16 EXTI_FTSR_TR16 +#define EXTI_FTSR_FT17 EXTI_FTSR_TR17 +#define EXTI_FTSR_FT18 EXTI_FTSR_TR18 +#define EXTI_FTSR_FT19 EXTI_FTSR_TR19 + +/****************** Bit definition for EXTI_SWIER register ******************/ +#define EXTI_SWIER_SWIER0_Pos (0U) +#define EXTI_SWIER_SWIER0_Msk (0x1U << EXTI_SWIER_SWIER0_Pos) /*!< 0x00000001 */ +#define EXTI_SWIER_SWIER0 EXTI_SWIER_SWIER0_Msk /*!< Software Interrupt on line 0 */ +#define EXTI_SWIER_SWIER1_Pos (1U) +#define EXTI_SWIER_SWIER1_Msk (0x1U << EXTI_SWIER_SWIER1_Pos) /*!< 0x00000002 */ +#define EXTI_SWIER_SWIER1 EXTI_SWIER_SWIER1_Msk /*!< Software Interrupt on line 1 */ +#define EXTI_SWIER_SWIER2_Pos (2U) +#define EXTI_SWIER_SWIER2_Msk (0x1U << EXTI_SWIER_SWIER2_Pos) /*!< 0x00000004 */ +#define EXTI_SWIER_SWIER2 EXTI_SWIER_SWIER2_Msk /*!< Software Interrupt on line 2 */ +#define EXTI_SWIER_SWIER3_Pos (3U) +#define EXTI_SWIER_SWIER3_Msk (0x1U << EXTI_SWIER_SWIER3_Pos) /*!< 0x00000008 */ +#define EXTI_SWIER_SWIER3 EXTI_SWIER_SWIER3_Msk /*!< Software Interrupt on line 3 */ +#define EXTI_SWIER_SWIER4_Pos (4U) +#define EXTI_SWIER_SWIER4_Msk (0x1U << EXTI_SWIER_SWIER4_Pos) /*!< 0x00000010 */ +#define EXTI_SWIER_SWIER4 EXTI_SWIER_SWIER4_Msk /*!< Software Interrupt on line 4 */ +#define EXTI_SWIER_SWIER5_Pos (5U) +#define EXTI_SWIER_SWIER5_Msk (0x1U << EXTI_SWIER_SWIER5_Pos) /*!< 0x00000020 */ +#define EXTI_SWIER_SWIER5 EXTI_SWIER_SWIER5_Msk /*!< Software Interrupt on line 5 */ +#define EXTI_SWIER_SWIER6_Pos (6U) +#define EXTI_SWIER_SWIER6_Msk (0x1U << EXTI_SWIER_SWIER6_Pos) /*!< 0x00000040 */ +#define EXTI_SWIER_SWIER6 EXTI_SWIER_SWIER6_Msk /*!< Software Interrupt on line 6 */ +#define EXTI_SWIER_SWIER7_Pos (7U) +#define EXTI_SWIER_SWIER7_Msk (0x1U << EXTI_SWIER_SWIER7_Pos) /*!< 0x00000080 */ +#define EXTI_SWIER_SWIER7 EXTI_SWIER_SWIER7_Msk /*!< Software Interrupt on line 7 */ +#define EXTI_SWIER_SWIER8_Pos (8U) +#define EXTI_SWIER_SWIER8_Msk (0x1U << EXTI_SWIER_SWIER8_Pos) /*!< 0x00000100 */ +#define EXTI_SWIER_SWIER8 EXTI_SWIER_SWIER8_Msk /*!< Software Interrupt on line 8 */ +#define EXTI_SWIER_SWIER9_Pos (9U) +#define EXTI_SWIER_SWIER9_Msk (0x1U << EXTI_SWIER_SWIER9_Pos) /*!< 0x00000200 */ +#define EXTI_SWIER_SWIER9 EXTI_SWIER_SWIER9_Msk /*!< Software Interrupt on line 9 */ +#define EXTI_SWIER_SWIER10_Pos (10U) +#define EXTI_SWIER_SWIER10_Msk (0x1U << EXTI_SWIER_SWIER10_Pos) /*!< 0x00000400 */ +#define EXTI_SWIER_SWIER10 EXTI_SWIER_SWIER10_Msk /*!< Software Interrupt on line 10 */ +#define EXTI_SWIER_SWIER11_Pos (11U) +#define EXTI_SWIER_SWIER11_Msk (0x1U << EXTI_SWIER_SWIER11_Pos) /*!< 0x00000800 */ +#define EXTI_SWIER_SWIER11 EXTI_SWIER_SWIER11_Msk /*!< Software Interrupt on line 11 */ +#define EXTI_SWIER_SWIER12_Pos (12U) +#define EXTI_SWIER_SWIER12_Msk (0x1U << EXTI_SWIER_SWIER12_Pos) /*!< 0x00001000 */ +#define EXTI_SWIER_SWIER12 EXTI_SWIER_SWIER12_Msk /*!< Software Interrupt on line 12 */ +#define EXTI_SWIER_SWIER13_Pos (13U) +#define EXTI_SWIER_SWIER13_Msk (0x1U << EXTI_SWIER_SWIER13_Pos) /*!< 0x00002000 */ +#define EXTI_SWIER_SWIER13 EXTI_SWIER_SWIER13_Msk /*!< Software Interrupt on line 13 */ +#define EXTI_SWIER_SWIER14_Pos (14U) +#define EXTI_SWIER_SWIER14_Msk (0x1U << EXTI_SWIER_SWIER14_Pos) /*!< 0x00004000 */ +#define EXTI_SWIER_SWIER14 EXTI_SWIER_SWIER14_Msk /*!< Software Interrupt on line 14 */ +#define EXTI_SWIER_SWIER15_Pos (15U) +#define EXTI_SWIER_SWIER15_Msk (0x1U << EXTI_SWIER_SWIER15_Pos) /*!< 0x00008000 */ +#define EXTI_SWIER_SWIER15 EXTI_SWIER_SWIER15_Msk /*!< Software Interrupt on line 15 */ +#define EXTI_SWIER_SWIER16_Pos (16U) +#define EXTI_SWIER_SWIER16_Msk (0x1U << EXTI_SWIER_SWIER16_Pos) /*!< 0x00010000 */ +#define EXTI_SWIER_SWIER16 EXTI_SWIER_SWIER16_Msk /*!< Software Interrupt on line 16 */ +#define EXTI_SWIER_SWIER17_Pos (17U) +#define EXTI_SWIER_SWIER17_Msk (0x1U << EXTI_SWIER_SWIER17_Pos) /*!< 0x00020000 */ +#define EXTI_SWIER_SWIER17 EXTI_SWIER_SWIER17_Msk /*!< Software Interrupt on line 17 */ +#define EXTI_SWIER_SWIER18_Pos (18U) +#define EXTI_SWIER_SWIER18_Msk (0x1U << EXTI_SWIER_SWIER18_Pos) /*!< 0x00040000 */ +#define EXTI_SWIER_SWIER18 EXTI_SWIER_SWIER18_Msk /*!< Software Interrupt on line 18 */ +#define EXTI_SWIER_SWIER19_Pos (19U) +#define EXTI_SWIER_SWIER19_Msk (0x1U << EXTI_SWIER_SWIER19_Pos) /*!< 0x00080000 */ +#define EXTI_SWIER_SWIER19 EXTI_SWIER_SWIER19_Msk /*!< Software Interrupt on line 19 */ + +/* References Defines */ +#define EXTI_SWIER_SWI0 EXTI_SWIER_SWIER0 +#define EXTI_SWIER_SWI1 EXTI_SWIER_SWIER1 +#define EXTI_SWIER_SWI2 EXTI_SWIER_SWIER2 +#define EXTI_SWIER_SWI3 EXTI_SWIER_SWIER3 +#define EXTI_SWIER_SWI4 EXTI_SWIER_SWIER4 +#define EXTI_SWIER_SWI5 EXTI_SWIER_SWIER5 +#define EXTI_SWIER_SWI6 EXTI_SWIER_SWIER6 +#define EXTI_SWIER_SWI7 EXTI_SWIER_SWIER7 +#define EXTI_SWIER_SWI8 EXTI_SWIER_SWIER8 +#define EXTI_SWIER_SWI9 EXTI_SWIER_SWIER9 +#define EXTI_SWIER_SWI10 EXTI_SWIER_SWIER10 +#define EXTI_SWIER_SWI11 EXTI_SWIER_SWIER11 +#define EXTI_SWIER_SWI12 EXTI_SWIER_SWIER12 +#define EXTI_SWIER_SWI13 EXTI_SWIER_SWIER13 +#define EXTI_SWIER_SWI14 EXTI_SWIER_SWIER14 +#define EXTI_SWIER_SWI15 EXTI_SWIER_SWIER15 +#define EXTI_SWIER_SWI16 EXTI_SWIER_SWIER16 +#define EXTI_SWIER_SWI17 EXTI_SWIER_SWIER17 +#define EXTI_SWIER_SWI18 EXTI_SWIER_SWIER18 +#define EXTI_SWIER_SWI19 EXTI_SWIER_SWIER19 + +/******************* Bit definition for EXTI_PR register ********************/ +#define EXTI_PR_PR0_Pos (0U) +#define EXTI_PR_PR0_Msk (0x1U << EXTI_PR_PR0_Pos) /*!< 0x00000001 */ +#define EXTI_PR_PR0 EXTI_PR_PR0_Msk /*!< Pending bit for line 0 */ +#define EXTI_PR_PR1_Pos (1U) +#define EXTI_PR_PR1_Msk (0x1U << EXTI_PR_PR1_Pos) /*!< 0x00000002 */ +#define EXTI_PR_PR1 EXTI_PR_PR1_Msk /*!< Pending bit for line 1 */ +#define EXTI_PR_PR2_Pos (2U) +#define EXTI_PR_PR2_Msk (0x1U << EXTI_PR_PR2_Pos) /*!< 0x00000004 */ +#define EXTI_PR_PR2 EXTI_PR_PR2_Msk /*!< Pending bit for line 2 */ +#define EXTI_PR_PR3_Pos (3U) +#define EXTI_PR_PR3_Msk (0x1U << EXTI_PR_PR3_Pos) /*!< 0x00000008 */ +#define EXTI_PR_PR3 EXTI_PR_PR3_Msk /*!< Pending bit for line 3 */ +#define EXTI_PR_PR4_Pos (4U) +#define EXTI_PR_PR4_Msk (0x1U << EXTI_PR_PR4_Pos) /*!< 0x00000010 */ +#define EXTI_PR_PR4 EXTI_PR_PR4_Msk /*!< Pending bit for line 4 */ +#define EXTI_PR_PR5_Pos (5U) +#define EXTI_PR_PR5_Msk (0x1U << EXTI_PR_PR5_Pos) /*!< 0x00000020 */ +#define EXTI_PR_PR5 EXTI_PR_PR5_Msk /*!< Pending bit for line 5 */ +#define EXTI_PR_PR6_Pos (6U) +#define EXTI_PR_PR6_Msk (0x1U << EXTI_PR_PR6_Pos) /*!< 0x00000040 */ +#define EXTI_PR_PR6 EXTI_PR_PR6_Msk /*!< Pending bit for line 6 */ +#define EXTI_PR_PR7_Pos (7U) +#define EXTI_PR_PR7_Msk (0x1U << EXTI_PR_PR7_Pos) /*!< 0x00000080 */ +#define EXTI_PR_PR7 EXTI_PR_PR7_Msk /*!< Pending bit for line 7 */ +#define EXTI_PR_PR8_Pos (8U) +#define EXTI_PR_PR8_Msk (0x1U << EXTI_PR_PR8_Pos) /*!< 0x00000100 */ +#define EXTI_PR_PR8 EXTI_PR_PR8_Msk /*!< Pending bit for line 8 */ +#define EXTI_PR_PR9_Pos (9U) +#define EXTI_PR_PR9_Msk (0x1U << EXTI_PR_PR9_Pos) /*!< 0x00000200 */ +#define EXTI_PR_PR9 EXTI_PR_PR9_Msk /*!< Pending bit for line 9 */ +#define EXTI_PR_PR10_Pos (10U) +#define EXTI_PR_PR10_Msk (0x1U << EXTI_PR_PR10_Pos) /*!< 0x00000400 */ +#define EXTI_PR_PR10 EXTI_PR_PR10_Msk /*!< Pending bit for line 10 */ +#define EXTI_PR_PR11_Pos (11U) +#define EXTI_PR_PR11_Msk (0x1U << EXTI_PR_PR11_Pos) /*!< 0x00000800 */ +#define EXTI_PR_PR11 EXTI_PR_PR11_Msk /*!< Pending bit for line 11 */ +#define EXTI_PR_PR12_Pos (12U) +#define EXTI_PR_PR12_Msk (0x1U << EXTI_PR_PR12_Pos) /*!< 0x00001000 */ +#define EXTI_PR_PR12 EXTI_PR_PR12_Msk /*!< Pending bit for line 12 */ +#define EXTI_PR_PR13_Pos (13U) +#define EXTI_PR_PR13_Msk (0x1U << EXTI_PR_PR13_Pos) /*!< 0x00002000 */ +#define EXTI_PR_PR13 EXTI_PR_PR13_Msk /*!< Pending bit for line 13 */ +#define EXTI_PR_PR14_Pos (14U) +#define EXTI_PR_PR14_Msk (0x1U << EXTI_PR_PR14_Pos) /*!< 0x00004000 */ +#define EXTI_PR_PR14 EXTI_PR_PR14_Msk /*!< Pending bit for line 14 */ +#define EXTI_PR_PR15_Pos (15U) +#define EXTI_PR_PR15_Msk (0x1U << EXTI_PR_PR15_Pos) /*!< 0x00008000 */ +#define EXTI_PR_PR15 EXTI_PR_PR15_Msk /*!< Pending bit for line 15 */ +#define EXTI_PR_PR16_Pos (16U) +#define EXTI_PR_PR16_Msk (0x1U << EXTI_PR_PR16_Pos) /*!< 0x00010000 */ +#define EXTI_PR_PR16 EXTI_PR_PR16_Msk /*!< Pending bit for line 16 */ +#define EXTI_PR_PR17_Pos (17U) +#define EXTI_PR_PR17_Msk (0x1U << EXTI_PR_PR17_Pos) /*!< 0x00020000 */ +#define EXTI_PR_PR17 EXTI_PR_PR17_Msk /*!< Pending bit for line 17 */ +#define EXTI_PR_PR18_Pos (18U) +#define EXTI_PR_PR18_Msk (0x1U << EXTI_PR_PR18_Pos) /*!< 0x00040000 */ +#define EXTI_PR_PR18 EXTI_PR_PR18_Msk /*!< Pending bit for line 18 */ +#define EXTI_PR_PR19_Pos (19U) +#define EXTI_PR_PR19_Msk (0x1U << EXTI_PR_PR19_Pos) /*!< 0x00080000 */ +#define EXTI_PR_PR19 EXTI_PR_PR19_Msk /*!< Pending bit for line 19 */ + +/* References Defines */ +#define EXTI_PR_PIF0 EXTI_PR_PR0 +#define EXTI_PR_PIF1 EXTI_PR_PR1 +#define EXTI_PR_PIF2 EXTI_PR_PR2 +#define EXTI_PR_PIF3 EXTI_PR_PR3 +#define EXTI_PR_PIF4 EXTI_PR_PR4 +#define EXTI_PR_PIF5 EXTI_PR_PR5 +#define EXTI_PR_PIF6 EXTI_PR_PR6 +#define EXTI_PR_PIF7 EXTI_PR_PR7 +#define EXTI_PR_PIF8 EXTI_PR_PR8 +#define EXTI_PR_PIF9 EXTI_PR_PR9 +#define EXTI_PR_PIF10 EXTI_PR_PR10 +#define EXTI_PR_PIF11 EXTI_PR_PR11 +#define EXTI_PR_PIF12 EXTI_PR_PR12 +#define EXTI_PR_PIF13 EXTI_PR_PR13 +#define EXTI_PR_PIF14 EXTI_PR_PR14 +#define EXTI_PR_PIF15 EXTI_PR_PR15 +#define EXTI_PR_PIF16 EXTI_PR_PR16 +#define EXTI_PR_PIF17 EXTI_PR_PR17 +#define EXTI_PR_PIF18 EXTI_PR_PR18 +#define EXTI_PR_PIF19 EXTI_PR_PR19 + +/******************************************************************************/ +/* */ +/* DMA Controller */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for DMA_ISR register ********************/ +#define DMA_ISR_GIF1_Pos (0U) +#define DMA_ISR_GIF1_Msk (0x1U << DMA_ISR_GIF1_Pos) /*!< 0x00000001 */ +#define DMA_ISR_GIF1 DMA_ISR_GIF1_Msk /*!< Channel 1 Global interrupt flag */ +#define DMA_ISR_TCIF1_Pos (1U) +#define DMA_ISR_TCIF1_Msk (0x1U << DMA_ISR_TCIF1_Pos) /*!< 0x00000002 */ +#define DMA_ISR_TCIF1 DMA_ISR_TCIF1_Msk /*!< Channel 1 Transfer Complete flag */ +#define DMA_ISR_HTIF1_Pos (2U) +#define DMA_ISR_HTIF1_Msk (0x1U << DMA_ISR_HTIF1_Pos) /*!< 0x00000004 */ +#define DMA_ISR_HTIF1 DMA_ISR_HTIF1_Msk /*!< Channel 1 Half Transfer flag */ +#define DMA_ISR_TEIF1_Pos (3U) +#define DMA_ISR_TEIF1_Msk (0x1U << DMA_ISR_TEIF1_Pos) /*!< 0x00000008 */ +#define DMA_ISR_TEIF1 DMA_ISR_TEIF1_Msk /*!< Channel 1 Transfer Error flag */ +#define DMA_ISR_GIF2_Pos (4U) +#define DMA_ISR_GIF2_Msk (0x1U << DMA_ISR_GIF2_Pos) /*!< 0x00000010 */ +#define DMA_ISR_GIF2 DMA_ISR_GIF2_Msk /*!< Channel 2 Global interrupt flag */ +#define DMA_ISR_TCIF2_Pos (5U) +#define DMA_ISR_TCIF2_Msk (0x1U << DMA_ISR_TCIF2_Pos) /*!< 0x00000020 */ +#define DMA_ISR_TCIF2 DMA_ISR_TCIF2_Msk /*!< Channel 2 Transfer Complete flag */ +#define DMA_ISR_HTIF2_Pos (6U) +#define DMA_ISR_HTIF2_Msk (0x1U << DMA_ISR_HTIF2_Pos) /*!< 0x00000040 */ +#define DMA_ISR_HTIF2 DMA_ISR_HTIF2_Msk /*!< Channel 2 Half Transfer flag */ +#define DMA_ISR_TEIF2_Pos (7U) +#define DMA_ISR_TEIF2_Msk (0x1U << DMA_ISR_TEIF2_Pos) /*!< 0x00000080 */ +#define DMA_ISR_TEIF2 DMA_ISR_TEIF2_Msk /*!< Channel 2 Transfer Error flag */ +#define DMA_ISR_GIF3_Pos (8U) +#define DMA_ISR_GIF3_Msk (0x1U << DMA_ISR_GIF3_Pos) /*!< 0x00000100 */ +#define DMA_ISR_GIF3 DMA_ISR_GIF3_Msk /*!< Channel 3 Global interrupt flag */ +#define DMA_ISR_TCIF3_Pos (9U) +#define DMA_ISR_TCIF3_Msk (0x1U << DMA_ISR_TCIF3_Pos) /*!< 0x00000200 */ +#define DMA_ISR_TCIF3 DMA_ISR_TCIF3_Msk /*!< Channel 3 Transfer Complete flag */ +#define DMA_ISR_HTIF3_Pos (10U) +#define DMA_ISR_HTIF3_Msk (0x1U << DMA_ISR_HTIF3_Pos) /*!< 0x00000400 */ +#define DMA_ISR_HTIF3 DMA_ISR_HTIF3_Msk /*!< Channel 3 Half Transfer flag */ +#define DMA_ISR_TEIF3_Pos (11U) +#define DMA_ISR_TEIF3_Msk (0x1U << DMA_ISR_TEIF3_Pos) /*!< 0x00000800 */ +#define DMA_ISR_TEIF3 DMA_ISR_TEIF3_Msk /*!< Channel 3 Transfer Error flag */ +#define DMA_ISR_GIF4_Pos (12U) +#define DMA_ISR_GIF4_Msk (0x1U << DMA_ISR_GIF4_Pos) /*!< 0x00001000 */ +#define DMA_ISR_GIF4 DMA_ISR_GIF4_Msk /*!< Channel 4 Global interrupt flag */ +#define DMA_ISR_TCIF4_Pos (13U) +#define DMA_ISR_TCIF4_Msk (0x1U << DMA_ISR_TCIF4_Pos) /*!< 0x00002000 */ +#define DMA_ISR_TCIF4 DMA_ISR_TCIF4_Msk /*!< Channel 4 Transfer Complete flag */ +#define DMA_ISR_HTIF4_Pos (14U) +#define DMA_ISR_HTIF4_Msk (0x1U << DMA_ISR_HTIF4_Pos) /*!< 0x00004000 */ +#define DMA_ISR_HTIF4 DMA_ISR_HTIF4_Msk /*!< Channel 4 Half Transfer flag */ +#define DMA_ISR_TEIF4_Pos (15U) +#define DMA_ISR_TEIF4_Msk (0x1U << DMA_ISR_TEIF4_Pos) /*!< 0x00008000 */ +#define DMA_ISR_TEIF4 DMA_ISR_TEIF4_Msk /*!< Channel 4 Transfer Error flag */ +#define DMA_ISR_GIF5_Pos (16U) +#define DMA_ISR_GIF5_Msk (0x1U << DMA_ISR_GIF5_Pos) /*!< 0x00010000 */ +#define DMA_ISR_GIF5 DMA_ISR_GIF5_Msk /*!< Channel 5 Global interrupt flag */ +#define DMA_ISR_TCIF5_Pos (17U) +#define DMA_ISR_TCIF5_Msk (0x1U << DMA_ISR_TCIF5_Pos) /*!< 0x00020000 */ +#define DMA_ISR_TCIF5 DMA_ISR_TCIF5_Msk /*!< Channel 5 Transfer Complete flag */ +#define DMA_ISR_HTIF5_Pos (18U) +#define DMA_ISR_HTIF5_Msk (0x1U << DMA_ISR_HTIF5_Pos) /*!< 0x00040000 */ +#define DMA_ISR_HTIF5 DMA_ISR_HTIF5_Msk /*!< Channel 5 Half Transfer flag */ +#define DMA_ISR_TEIF5_Pos (19U) +#define DMA_ISR_TEIF5_Msk (0x1U << DMA_ISR_TEIF5_Pos) /*!< 0x00080000 */ +#define DMA_ISR_TEIF5 DMA_ISR_TEIF5_Msk /*!< Channel 5 Transfer Error flag */ +#define DMA_ISR_GIF6_Pos (20U) +#define DMA_ISR_GIF6_Msk (0x1U << DMA_ISR_GIF6_Pos) /*!< 0x00100000 */ +#define DMA_ISR_GIF6 DMA_ISR_GIF6_Msk /*!< Channel 6 Global interrupt flag */ +#define DMA_ISR_TCIF6_Pos (21U) +#define DMA_ISR_TCIF6_Msk (0x1U << DMA_ISR_TCIF6_Pos) /*!< 0x00200000 */ +#define DMA_ISR_TCIF6 DMA_ISR_TCIF6_Msk /*!< Channel 6 Transfer Complete flag */ +#define DMA_ISR_HTIF6_Pos (22U) +#define DMA_ISR_HTIF6_Msk (0x1U << DMA_ISR_HTIF6_Pos) /*!< 0x00400000 */ +#define DMA_ISR_HTIF6 DMA_ISR_HTIF6_Msk /*!< Channel 6 Half Transfer flag */ +#define DMA_ISR_TEIF6_Pos (23U) +#define DMA_ISR_TEIF6_Msk (0x1U << DMA_ISR_TEIF6_Pos) /*!< 0x00800000 */ +#define DMA_ISR_TEIF6 DMA_ISR_TEIF6_Msk /*!< Channel 6 Transfer Error flag */ +#define DMA_ISR_GIF7_Pos (24U) +#define DMA_ISR_GIF7_Msk (0x1U << DMA_ISR_GIF7_Pos) /*!< 0x01000000 */ +#define DMA_ISR_GIF7 DMA_ISR_GIF7_Msk /*!< Channel 7 Global interrupt flag */ +#define DMA_ISR_TCIF7_Pos (25U) +#define DMA_ISR_TCIF7_Msk (0x1U << DMA_ISR_TCIF7_Pos) /*!< 0x02000000 */ +#define DMA_ISR_TCIF7 DMA_ISR_TCIF7_Msk /*!< Channel 7 Transfer Complete flag */ +#define DMA_ISR_HTIF7_Pos (26U) +#define DMA_ISR_HTIF7_Msk (0x1U << DMA_ISR_HTIF7_Pos) /*!< 0x04000000 */ +#define DMA_ISR_HTIF7 DMA_ISR_HTIF7_Msk /*!< Channel 7 Half Transfer flag */ +#define DMA_ISR_TEIF7_Pos (27U) +#define DMA_ISR_TEIF7_Msk (0x1U << DMA_ISR_TEIF7_Pos) /*!< 0x08000000 */ +#define DMA_ISR_TEIF7 DMA_ISR_TEIF7_Msk /*!< Channel 7 Transfer Error flag */ + +/******************* Bit definition for DMA_IFCR register *******************/ +#define DMA_IFCR_CGIF1_Pos (0U) +#define DMA_IFCR_CGIF1_Msk (0x1U << DMA_IFCR_CGIF1_Pos) /*!< 0x00000001 */ +#define DMA_IFCR_CGIF1 DMA_IFCR_CGIF1_Msk /*!< Channel 1 Global interrupt clear */ +#define DMA_IFCR_CTCIF1_Pos (1U) +#define DMA_IFCR_CTCIF1_Msk (0x1U << DMA_IFCR_CTCIF1_Pos) /*!< 0x00000002 */ +#define DMA_IFCR_CTCIF1 DMA_IFCR_CTCIF1_Msk /*!< Channel 1 Transfer Complete clear */ +#define DMA_IFCR_CHTIF1_Pos (2U) +#define DMA_IFCR_CHTIF1_Msk (0x1U << DMA_IFCR_CHTIF1_Pos) /*!< 0x00000004 */ +#define DMA_IFCR_CHTIF1 DMA_IFCR_CHTIF1_Msk /*!< Channel 1 Half Transfer clear */ +#define DMA_IFCR_CTEIF1_Pos (3U) +#define DMA_IFCR_CTEIF1_Msk (0x1U << DMA_IFCR_CTEIF1_Pos) /*!< 0x00000008 */ +#define DMA_IFCR_CTEIF1 DMA_IFCR_CTEIF1_Msk /*!< Channel 1 Transfer Error clear */ +#define DMA_IFCR_CGIF2_Pos (4U) +#define DMA_IFCR_CGIF2_Msk (0x1U << DMA_IFCR_CGIF2_Pos) /*!< 0x00000010 */ +#define DMA_IFCR_CGIF2 DMA_IFCR_CGIF2_Msk /*!< Channel 2 Global interrupt clear */ +#define DMA_IFCR_CTCIF2_Pos (5U) +#define DMA_IFCR_CTCIF2_Msk (0x1U << DMA_IFCR_CTCIF2_Pos) /*!< 0x00000020 */ +#define DMA_IFCR_CTCIF2 DMA_IFCR_CTCIF2_Msk /*!< Channel 2 Transfer Complete clear */ +#define DMA_IFCR_CHTIF2_Pos (6U) +#define DMA_IFCR_CHTIF2_Msk (0x1U << DMA_IFCR_CHTIF2_Pos) /*!< 0x00000040 */ +#define DMA_IFCR_CHTIF2 DMA_IFCR_CHTIF2_Msk /*!< Channel 2 Half Transfer clear */ +#define DMA_IFCR_CTEIF2_Pos (7U) +#define DMA_IFCR_CTEIF2_Msk (0x1U << DMA_IFCR_CTEIF2_Pos) /*!< 0x00000080 */ +#define DMA_IFCR_CTEIF2 DMA_IFCR_CTEIF2_Msk /*!< Channel 2 Transfer Error clear */ +#define DMA_IFCR_CGIF3_Pos (8U) +#define DMA_IFCR_CGIF3_Msk (0x1U << DMA_IFCR_CGIF3_Pos) /*!< 0x00000100 */ +#define DMA_IFCR_CGIF3 DMA_IFCR_CGIF3_Msk /*!< Channel 3 Global interrupt clear */ +#define DMA_IFCR_CTCIF3_Pos (9U) +#define DMA_IFCR_CTCIF3_Msk (0x1U << DMA_IFCR_CTCIF3_Pos) /*!< 0x00000200 */ +#define DMA_IFCR_CTCIF3 DMA_IFCR_CTCIF3_Msk /*!< Channel 3 Transfer Complete clear */ +#define DMA_IFCR_CHTIF3_Pos (10U) +#define DMA_IFCR_CHTIF3_Msk (0x1U << DMA_IFCR_CHTIF3_Pos) /*!< 0x00000400 */ +#define DMA_IFCR_CHTIF3 DMA_IFCR_CHTIF3_Msk /*!< Channel 3 Half Transfer clear */ +#define DMA_IFCR_CTEIF3_Pos (11U) +#define DMA_IFCR_CTEIF3_Msk (0x1U << DMA_IFCR_CTEIF3_Pos) /*!< 0x00000800 */ +#define DMA_IFCR_CTEIF3 DMA_IFCR_CTEIF3_Msk /*!< Channel 3 Transfer Error clear */ +#define DMA_IFCR_CGIF4_Pos (12U) +#define DMA_IFCR_CGIF4_Msk (0x1U << DMA_IFCR_CGIF4_Pos) /*!< 0x00001000 */ +#define DMA_IFCR_CGIF4 DMA_IFCR_CGIF4_Msk /*!< Channel 4 Global interrupt clear */ +#define DMA_IFCR_CTCIF4_Pos (13U) +#define DMA_IFCR_CTCIF4_Msk (0x1U << DMA_IFCR_CTCIF4_Pos) /*!< 0x00002000 */ +#define DMA_IFCR_CTCIF4 DMA_IFCR_CTCIF4_Msk /*!< Channel 4 Transfer Complete clear */ +#define DMA_IFCR_CHTIF4_Pos (14U) +#define DMA_IFCR_CHTIF4_Msk (0x1U << DMA_IFCR_CHTIF4_Pos) /*!< 0x00004000 */ +#define DMA_IFCR_CHTIF4 DMA_IFCR_CHTIF4_Msk /*!< Channel 4 Half Transfer clear */ +#define DMA_IFCR_CTEIF4_Pos (15U) +#define DMA_IFCR_CTEIF4_Msk (0x1U << DMA_IFCR_CTEIF4_Pos) /*!< 0x00008000 */ +#define DMA_IFCR_CTEIF4 DMA_IFCR_CTEIF4_Msk /*!< Channel 4 Transfer Error clear */ +#define DMA_IFCR_CGIF5_Pos (16U) +#define DMA_IFCR_CGIF5_Msk (0x1U << DMA_IFCR_CGIF5_Pos) /*!< 0x00010000 */ +#define DMA_IFCR_CGIF5 DMA_IFCR_CGIF5_Msk /*!< Channel 5 Global interrupt clear */ +#define DMA_IFCR_CTCIF5_Pos (17U) +#define DMA_IFCR_CTCIF5_Msk (0x1U << DMA_IFCR_CTCIF5_Pos) /*!< 0x00020000 */ +#define DMA_IFCR_CTCIF5 DMA_IFCR_CTCIF5_Msk /*!< Channel 5 Transfer Complete clear */ +#define DMA_IFCR_CHTIF5_Pos (18U) +#define DMA_IFCR_CHTIF5_Msk (0x1U << DMA_IFCR_CHTIF5_Pos) /*!< 0x00040000 */ +#define DMA_IFCR_CHTIF5 DMA_IFCR_CHTIF5_Msk /*!< Channel 5 Half Transfer clear */ +#define DMA_IFCR_CTEIF5_Pos (19U) +#define DMA_IFCR_CTEIF5_Msk (0x1U << DMA_IFCR_CTEIF5_Pos) /*!< 0x00080000 */ +#define DMA_IFCR_CTEIF5 DMA_IFCR_CTEIF5_Msk /*!< Channel 5 Transfer Error clear */ +#define DMA_IFCR_CGIF6_Pos (20U) +#define DMA_IFCR_CGIF6_Msk (0x1U << DMA_IFCR_CGIF6_Pos) /*!< 0x00100000 */ +#define DMA_IFCR_CGIF6 DMA_IFCR_CGIF6_Msk /*!< Channel 6 Global interrupt clear */ +#define DMA_IFCR_CTCIF6_Pos (21U) +#define DMA_IFCR_CTCIF6_Msk (0x1U << DMA_IFCR_CTCIF6_Pos) /*!< 0x00200000 */ +#define DMA_IFCR_CTCIF6 DMA_IFCR_CTCIF6_Msk /*!< Channel 6 Transfer Complete clear */ +#define DMA_IFCR_CHTIF6_Pos (22U) +#define DMA_IFCR_CHTIF6_Msk (0x1U << DMA_IFCR_CHTIF6_Pos) /*!< 0x00400000 */ +#define DMA_IFCR_CHTIF6 DMA_IFCR_CHTIF6_Msk /*!< Channel 6 Half Transfer clear */ +#define DMA_IFCR_CTEIF6_Pos (23U) +#define DMA_IFCR_CTEIF6_Msk (0x1U << DMA_IFCR_CTEIF6_Pos) /*!< 0x00800000 */ +#define DMA_IFCR_CTEIF6 DMA_IFCR_CTEIF6_Msk /*!< Channel 6 Transfer Error clear */ +#define DMA_IFCR_CGIF7_Pos (24U) +#define DMA_IFCR_CGIF7_Msk (0x1U << DMA_IFCR_CGIF7_Pos) /*!< 0x01000000 */ +#define DMA_IFCR_CGIF7 DMA_IFCR_CGIF7_Msk /*!< Channel 7 Global interrupt clear */ +#define DMA_IFCR_CTCIF7_Pos (25U) +#define DMA_IFCR_CTCIF7_Msk (0x1U << DMA_IFCR_CTCIF7_Pos) /*!< 0x02000000 */ +#define DMA_IFCR_CTCIF7 DMA_IFCR_CTCIF7_Msk /*!< Channel 7 Transfer Complete clear */ +#define DMA_IFCR_CHTIF7_Pos (26U) +#define DMA_IFCR_CHTIF7_Msk (0x1U << DMA_IFCR_CHTIF7_Pos) /*!< 0x04000000 */ +#define DMA_IFCR_CHTIF7 DMA_IFCR_CHTIF7_Msk /*!< Channel 7 Half Transfer clear */ +#define DMA_IFCR_CTEIF7_Pos (27U) +#define DMA_IFCR_CTEIF7_Msk (0x1U << DMA_IFCR_CTEIF7_Pos) /*!< 0x08000000 */ +#define DMA_IFCR_CTEIF7 DMA_IFCR_CTEIF7_Msk /*!< Channel 7 Transfer Error clear */ + +/******************* Bit definition for DMA_CCR register *******************/ +#define DMA_CCR_EN_Pos (0U) +#define DMA_CCR_EN_Msk (0x1U << DMA_CCR_EN_Pos) /*!< 0x00000001 */ +#define DMA_CCR_EN DMA_CCR_EN_Msk /*!< Channel enable */ +#define DMA_CCR_TCIE_Pos (1U) +#define DMA_CCR_TCIE_Msk (0x1U << DMA_CCR_TCIE_Pos) /*!< 0x00000002 */ +#define DMA_CCR_TCIE DMA_CCR_TCIE_Msk /*!< Transfer complete interrupt enable */ +#define DMA_CCR_HTIE_Pos (2U) +#define DMA_CCR_HTIE_Msk (0x1U << DMA_CCR_HTIE_Pos) /*!< 0x00000004 */ +#define DMA_CCR_HTIE DMA_CCR_HTIE_Msk /*!< Half Transfer interrupt enable */ +#define DMA_CCR_TEIE_Pos (3U) +#define DMA_CCR_TEIE_Msk (0x1U << DMA_CCR_TEIE_Pos) /*!< 0x00000008 */ +#define DMA_CCR_TEIE DMA_CCR_TEIE_Msk /*!< Transfer error interrupt enable */ +#define DMA_CCR_DIR_Pos (4U) +#define DMA_CCR_DIR_Msk (0x1U << DMA_CCR_DIR_Pos) /*!< 0x00000010 */ +#define DMA_CCR_DIR DMA_CCR_DIR_Msk /*!< Data transfer direction */ +#define DMA_CCR_CIRC_Pos (5U) +#define DMA_CCR_CIRC_Msk (0x1U << DMA_CCR_CIRC_Pos) /*!< 0x00000020 */ +#define DMA_CCR_CIRC DMA_CCR_CIRC_Msk /*!< Circular mode */ +#define DMA_CCR_PINC_Pos (6U) +#define DMA_CCR_PINC_Msk (0x1U << DMA_CCR_PINC_Pos) /*!< 0x00000040 */ +#define DMA_CCR_PINC DMA_CCR_PINC_Msk /*!< Peripheral increment mode */ +#define DMA_CCR_MINC_Pos (7U) +#define DMA_CCR_MINC_Msk (0x1U << DMA_CCR_MINC_Pos) /*!< 0x00000080 */ +#define DMA_CCR_MINC DMA_CCR_MINC_Msk /*!< Memory increment mode */ + +#define DMA_CCR_PSIZE_Pos (8U) +#define DMA_CCR_PSIZE_Msk (0x3U << DMA_CCR_PSIZE_Pos) /*!< 0x00000300 */ +#define DMA_CCR_PSIZE DMA_CCR_PSIZE_Msk /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR_PSIZE_0 (0x1U << DMA_CCR_PSIZE_Pos) /*!< 0x00000100 */ +#define DMA_CCR_PSIZE_1 (0x2U << DMA_CCR_PSIZE_Pos) /*!< 0x00000200 */ + +#define DMA_CCR_MSIZE_Pos (10U) +#define DMA_CCR_MSIZE_Msk (0x3U << DMA_CCR_MSIZE_Pos) /*!< 0x00000C00 */ +#define DMA_CCR_MSIZE DMA_CCR_MSIZE_Msk /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR_MSIZE_0 (0x1U << DMA_CCR_MSIZE_Pos) /*!< 0x00000400 */ +#define DMA_CCR_MSIZE_1 (0x2U << DMA_CCR_MSIZE_Pos) /*!< 0x00000800 */ + +#define DMA_CCR_PL_Pos (12U) +#define DMA_CCR_PL_Msk (0x3U << DMA_CCR_PL_Pos) /*!< 0x00003000 */ +#define DMA_CCR_PL DMA_CCR_PL_Msk /*!< PL[1:0] bits(Channel Priority level) */ +#define DMA_CCR_PL_0 (0x1U << DMA_CCR_PL_Pos) /*!< 0x00001000 */ +#define DMA_CCR_PL_1 (0x2U << DMA_CCR_PL_Pos) /*!< 0x00002000 */ + +#define DMA_CCR_MEM2MEM_Pos (14U) +#define DMA_CCR_MEM2MEM_Msk (0x1U << DMA_CCR_MEM2MEM_Pos) /*!< 0x00004000 */ +#define DMA_CCR_MEM2MEM DMA_CCR_MEM2MEM_Msk /*!< Memory to memory mode */ + +/****************** Bit definition for DMA_CNDTR register ******************/ +#define DMA_CNDTR_NDT_Pos (0U) +#define DMA_CNDTR_NDT_Msk (0xFFFFU << DMA_CNDTR_NDT_Pos) /*!< 0x0000FFFF */ +#define DMA_CNDTR_NDT DMA_CNDTR_NDT_Msk /*!< Number of data to Transfer */ + +/****************** Bit definition for DMA_CPAR register *******************/ +#define DMA_CPAR_PA_Pos (0U) +#define DMA_CPAR_PA_Msk (0xFFFFFFFFU << DMA_CPAR_PA_Pos) /*!< 0xFFFFFFFF */ +#define DMA_CPAR_PA DMA_CPAR_PA_Msk /*!< Peripheral Address */ + +/****************** Bit definition for DMA_CMAR register *******************/ +#define DMA_CMAR_MA_Pos (0U) +#define DMA_CMAR_MA_Msk (0xFFFFFFFFU << DMA_CMAR_MA_Pos) /*!< 0xFFFFFFFF */ +#define DMA_CMAR_MA DMA_CMAR_MA_Msk /*!< Memory Address */ + +/******************************************************************************/ +/* */ +/* Analog to Digital Converter (ADC) */ +/* */ +/******************************************************************************/ + +/* + * @brief Specific device feature definitions (not present on all devices in the STM32F1 family) + */ +#define ADC_MULTIMODE_SUPPORT /*!< ADC feature available only on specific devices: multimode available on devices with several ADC instances */ + +/******************** Bit definition for ADC_SR register ********************/ +#define ADC_SR_AWD_Pos (0U) +#define ADC_SR_AWD_Msk (0x1U << ADC_SR_AWD_Pos) /*!< 0x00000001 */ +#define ADC_SR_AWD ADC_SR_AWD_Msk /*!< ADC analog watchdog 1 flag */ +#define ADC_SR_EOS_Pos (1U) +#define ADC_SR_EOS_Msk (0x1U << ADC_SR_EOS_Pos) /*!< 0x00000002 */ +#define ADC_SR_EOS ADC_SR_EOS_Msk /*!< ADC group regular end of sequence conversions flag */ +#define ADC_SR_JEOS_Pos (2U) +#define ADC_SR_JEOS_Msk (0x1U << ADC_SR_JEOS_Pos) /*!< 0x00000004 */ +#define ADC_SR_JEOS ADC_SR_JEOS_Msk /*!< ADC group injected end of sequence conversions flag */ +#define ADC_SR_JSTRT_Pos (3U) +#define ADC_SR_JSTRT_Msk (0x1U << ADC_SR_JSTRT_Pos) /*!< 0x00000008 */ +#define ADC_SR_JSTRT ADC_SR_JSTRT_Msk /*!< ADC group injected conversion start flag */ +#define ADC_SR_STRT_Pos (4U) +#define ADC_SR_STRT_Msk (0x1U << ADC_SR_STRT_Pos) /*!< 0x00000010 */ +#define ADC_SR_STRT ADC_SR_STRT_Msk /*!< ADC group regular conversion start flag */ + +/* Legacy defines */ +#define ADC_SR_EOC (ADC_SR_EOS) +#define ADC_SR_JEOC (ADC_SR_JEOS) + +/******************* Bit definition for ADC_CR1 register ********************/ +#define ADC_CR1_AWDCH_Pos (0U) +#define ADC_CR1_AWDCH_Msk (0x1FU << ADC_CR1_AWDCH_Pos) /*!< 0x0000001F */ +#define ADC_CR1_AWDCH ADC_CR1_AWDCH_Msk /*!< ADC analog watchdog 1 monitored channel selection */ +#define ADC_CR1_AWDCH_0 (0x01U << ADC_CR1_AWDCH_Pos) /*!< 0x00000001 */ +#define ADC_CR1_AWDCH_1 (0x02U << ADC_CR1_AWDCH_Pos) /*!< 0x00000002 */ +#define ADC_CR1_AWDCH_2 (0x04U << ADC_CR1_AWDCH_Pos) /*!< 0x00000004 */ +#define ADC_CR1_AWDCH_3 (0x08U << ADC_CR1_AWDCH_Pos) /*!< 0x00000008 */ +#define ADC_CR1_AWDCH_4 (0x10U << ADC_CR1_AWDCH_Pos) /*!< 0x00000010 */ + +#define ADC_CR1_EOSIE_Pos (5U) +#define ADC_CR1_EOSIE_Msk (0x1U << ADC_CR1_EOSIE_Pos) /*!< 0x00000020 */ +#define ADC_CR1_EOSIE ADC_CR1_EOSIE_Msk /*!< ADC group regular end of sequence conversions interrupt */ +#define ADC_CR1_AWDIE_Pos (6U) +#define ADC_CR1_AWDIE_Msk (0x1U << ADC_CR1_AWDIE_Pos) /*!< 0x00000040 */ +#define ADC_CR1_AWDIE ADC_CR1_AWDIE_Msk /*!< ADC analog watchdog 1 interrupt */ +#define ADC_CR1_JEOSIE_Pos (7U) +#define ADC_CR1_JEOSIE_Msk (0x1U << ADC_CR1_JEOSIE_Pos) /*!< 0x00000080 */ +#define ADC_CR1_JEOSIE ADC_CR1_JEOSIE_Msk /*!< ADC group injected end of sequence conversions interrupt */ +#define ADC_CR1_SCAN_Pos (8U) +#define ADC_CR1_SCAN_Msk (0x1U << ADC_CR1_SCAN_Pos) /*!< 0x00000100 */ +#define ADC_CR1_SCAN ADC_CR1_SCAN_Msk /*!< ADC scan mode */ +#define ADC_CR1_AWDSGL_Pos (9U) +#define ADC_CR1_AWDSGL_Msk (0x1U << ADC_CR1_AWDSGL_Pos) /*!< 0x00000200 */ +#define ADC_CR1_AWDSGL ADC_CR1_AWDSGL_Msk /*!< ADC analog watchdog 1 monitoring a single channel or all channels */ +#define ADC_CR1_JAUTO_Pos (10U) +#define ADC_CR1_JAUTO_Msk (0x1U << ADC_CR1_JAUTO_Pos) /*!< 0x00000400 */ +#define ADC_CR1_JAUTO ADC_CR1_JAUTO_Msk /*!< ADC group injected automatic trigger mode */ +#define ADC_CR1_DISCEN_Pos (11U) +#define ADC_CR1_DISCEN_Msk (0x1U << ADC_CR1_DISCEN_Pos) /*!< 0x00000800 */ +#define ADC_CR1_DISCEN ADC_CR1_DISCEN_Msk /*!< ADC group regular sequencer discontinuous mode */ +#define ADC_CR1_JDISCEN_Pos (12U) +#define ADC_CR1_JDISCEN_Msk (0x1U << ADC_CR1_JDISCEN_Pos) /*!< 0x00001000 */ +#define ADC_CR1_JDISCEN ADC_CR1_JDISCEN_Msk /*!< ADC group injected sequencer discontinuous mode */ + +#define ADC_CR1_DISCNUM_Pos (13U) +#define ADC_CR1_DISCNUM_Msk (0x7U << ADC_CR1_DISCNUM_Pos) /*!< 0x0000E000 */ +#define ADC_CR1_DISCNUM ADC_CR1_DISCNUM_Msk /*!< ADC group regular sequencer discontinuous number of ranks */ +#define ADC_CR1_DISCNUM_0 (0x1U << ADC_CR1_DISCNUM_Pos) /*!< 0x00002000 */ +#define ADC_CR1_DISCNUM_1 (0x2U << ADC_CR1_DISCNUM_Pos) /*!< 0x00004000 */ +#define ADC_CR1_DISCNUM_2 (0x4U << ADC_CR1_DISCNUM_Pos) /*!< 0x00008000 */ + +#define ADC_CR1_DUALMOD_Pos (16U) +#define ADC_CR1_DUALMOD_Msk (0xFU << ADC_CR1_DUALMOD_Pos) /*!< 0x000F0000 */ +#define ADC_CR1_DUALMOD ADC_CR1_DUALMOD_Msk /*!< ADC multimode mode selection */ +#define ADC_CR1_DUALMOD_0 (0x1U << ADC_CR1_DUALMOD_Pos) /*!< 0x00010000 */ +#define ADC_CR1_DUALMOD_1 (0x2U << ADC_CR1_DUALMOD_Pos) /*!< 0x00020000 */ +#define ADC_CR1_DUALMOD_2 (0x4U << ADC_CR1_DUALMOD_Pos) /*!< 0x00040000 */ +#define ADC_CR1_DUALMOD_3 (0x8U << ADC_CR1_DUALMOD_Pos) /*!< 0x00080000 */ + +#define ADC_CR1_JAWDEN_Pos (22U) +#define ADC_CR1_JAWDEN_Msk (0x1U << ADC_CR1_JAWDEN_Pos) /*!< 0x00400000 */ +#define ADC_CR1_JAWDEN ADC_CR1_JAWDEN_Msk /*!< ADC analog watchdog 1 enable on scope ADC group injected */ +#define ADC_CR1_AWDEN_Pos (23U) +#define ADC_CR1_AWDEN_Msk (0x1U << ADC_CR1_AWDEN_Pos) /*!< 0x00800000 */ +#define ADC_CR1_AWDEN ADC_CR1_AWDEN_Msk /*!< ADC analog watchdog 1 enable on scope ADC group regular */ + +/* Legacy defines */ +#define ADC_CR1_EOCIE (ADC_CR1_EOSIE) +#define ADC_CR1_JEOCIE (ADC_CR1_JEOSIE) + +/******************* Bit definition for ADC_CR2 register ********************/ +#define ADC_CR2_ADON_Pos (0U) +#define ADC_CR2_ADON_Msk (0x1U << ADC_CR2_ADON_Pos) /*!< 0x00000001 */ +#define ADC_CR2_ADON ADC_CR2_ADON_Msk /*!< ADC enable */ +#define ADC_CR2_CONT_Pos (1U) +#define ADC_CR2_CONT_Msk (0x1U << ADC_CR2_CONT_Pos) /*!< 0x00000002 */ +#define ADC_CR2_CONT ADC_CR2_CONT_Msk /*!< ADC group regular continuous conversion mode */ +#define ADC_CR2_CAL_Pos (2U) +#define ADC_CR2_CAL_Msk (0x1U << ADC_CR2_CAL_Pos) /*!< 0x00000004 */ +#define ADC_CR2_CAL ADC_CR2_CAL_Msk /*!< ADC calibration start */ +#define ADC_CR2_RSTCAL_Pos (3U) +#define ADC_CR2_RSTCAL_Msk (0x1U << ADC_CR2_RSTCAL_Pos) /*!< 0x00000008 */ +#define ADC_CR2_RSTCAL ADC_CR2_RSTCAL_Msk /*!< ADC calibration reset */ +#define ADC_CR2_DMA_Pos (8U) +#define ADC_CR2_DMA_Msk (0x1U << ADC_CR2_DMA_Pos) /*!< 0x00000100 */ +#define ADC_CR2_DMA ADC_CR2_DMA_Msk /*!< ADC DMA transfer enable */ +#define ADC_CR2_ALIGN_Pos (11U) +#define ADC_CR2_ALIGN_Msk (0x1U << ADC_CR2_ALIGN_Pos) /*!< 0x00000800 */ +#define ADC_CR2_ALIGN ADC_CR2_ALIGN_Msk /*!< ADC data alignement */ + +#define ADC_CR2_JEXTSEL_Pos (12U) +#define ADC_CR2_JEXTSEL_Msk (0x7U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00007000 */ +#define ADC_CR2_JEXTSEL ADC_CR2_JEXTSEL_Msk /*!< ADC group injected external trigger source */ +#define ADC_CR2_JEXTSEL_0 (0x1U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00001000 */ +#define ADC_CR2_JEXTSEL_1 (0x2U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00002000 */ +#define ADC_CR2_JEXTSEL_2 (0x4U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00004000 */ + +#define ADC_CR2_JEXTTRIG_Pos (15U) +#define ADC_CR2_JEXTTRIG_Msk (0x1U << ADC_CR2_JEXTTRIG_Pos) /*!< 0x00008000 */ +#define ADC_CR2_JEXTTRIG ADC_CR2_JEXTTRIG_Msk /*!< ADC group injected external trigger enable */ + +#define ADC_CR2_EXTSEL_Pos (17U) +#define ADC_CR2_EXTSEL_Msk (0x7U << ADC_CR2_EXTSEL_Pos) /*!< 0x000E0000 */ +#define ADC_CR2_EXTSEL ADC_CR2_EXTSEL_Msk /*!< ADC group regular external trigger source */ +#define ADC_CR2_EXTSEL_0 (0x1U << ADC_CR2_EXTSEL_Pos) /*!< 0x00020000 */ +#define ADC_CR2_EXTSEL_1 (0x2U << ADC_CR2_EXTSEL_Pos) /*!< 0x00040000 */ +#define ADC_CR2_EXTSEL_2 (0x4U << ADC_CR2_EXTSEL_Pos) /*!< 0x00080000 */ + +#define ADC_CR2_EXTTRIG_Pos (20U) +#define ADC_CR2_EXTTRIG_Msk (0x1U << ADC_CR2_EXTTRIG_Pos) /*!< 0x00100000 */ +#define ADC_CR2_EXTTRIG ADC_CR2_EXTTRIG_Msk /*!< ADC group regular external trigger enable */ +#define ADC_CR2_JSWSTART_Pos (21U) +#define ADC_CR2_JSWSTART_Msk (0x1U << ADC_CR2_JSWSTART_Pos) /*!< 0x00200000 */ +#define ADC_CR2_JSWSTART ADC_CR2_JSWSTART_Msk /*!< ADC group injected conversion start */ +#define ADC_CR2_SWSTART_Pos (22U) +#define ADC_CR2_SWSTART_Msk (0x1U << ADC_CR2_SWSTART_Pos) /*!< 0x00400000 */ +#define ADC_CR2_SWSTART ADC_CR2_SWSTART_Msk /*!< ADC group regular conversion start */ +#define ADC_CR2_TSVREFE_Pos (23U) +#define ADC_CR2_TSVREFE_Msk (0x1U << ADC_CR2_TSVREFE_Pos) /*!< 0x00800000 */ +#define ADC_CR2_TSVREFE ADC_CR2_TSVREFE_Msk /*!< ADC internal path to VrefInt and temperature sensor enable */ + +/****************** Bit definition for ADC_SMPR1 register *******************/ +#define ADC_SMPR1_SMP10_Pos (0U) +#define ADC_SMPR1_SMP10_Msk (0x7U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000007 */ +#define ADC_SMPR1_SMP10 ADC_SMPR1_SMP10_Msk /*!< ADC channel 10 sampling time selection */ +#define ADC_SMPR1_SMP10_0 (0x1U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000001 */ +#define ADC_SMPR1_SMP10_1 (0x2U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000002 */ +#define ADC_SMPR1_SMP10_2 (0x4U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000004 */ + +#define ADC_SMPR1_SMP11_Pos (3U) +#define ADC_SMPR1_SMP11_Msk (0x7U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000038 */ +#define ADC_SMPR1_SMP11 ADC_SMPR1_SMP11_Msk /*!< ADC channel 11 sampling time selection */ +#define ADC_SMPR1_SMP11_0 (0x1U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000008 */ +#define ADC_SMPR1_SMP11_1 (0x2U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000010 */ +#define ADC_SMPR1_SMP11_2 (0x4U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000020 */ + +#define ADC_SMPR1_SMP12_Pos (6U) +#define ADC_SMPR1_SMP12_Msk (0x7U << ADC_SMPR1_SMP12_Pos) /*!< 0x000001C0 */ +#define ADC_SMPR1_SMP12 ADC_SMPR1_SMP12_Msk /*!< ADC channel 12 sampling time selection */ +#define ADC_SMPR1_SMP12_0 (0x1U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000040 */ +#define ADC_SMPR1_SMP12_1 (0x2U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000080 */ +#define ADC_SMPR1_SMP12_2 (0x4U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000100 */ + +#define ADC_SMPR1_SMP13_Pos (9U) +#define ADC_SMPR1_SMP13_Msk (0x7U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000E00 */ +#define ADC_SMPR1_SMP13 ADC_SMPR1_SMP13_Msk /*!< ADC channel 13 sampling time selection */ +#define ADC_SMPR1_SMP13_0 (0x1U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000200 */ +#define ADC_SMPR1_SMP13_1 (0x2U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000400 */ +#define ADC_SMPR1_SMP13_2 (0x4U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000800 */ + +#define ADC_SMPR1_SMP14_Pos (12U) +#define ADC_SMPR1_SMP14_Msk (0x7U << ADC_SMPR1_SMP14_Pos) /*!< 0x00007000 */ +#define ADC_SMPR1_SMP14 ADC_SMPR1_SMP14_Msk /*!< ADC channel 14 sampling time selection */ +#define ADC_SMPR1_SMP14_0 (0x1U << ADC_SMPR1_SMP14_Pos) /*!< 0x00001000 */ +#define ADC_SMPR1_SMP14_1 (0x2U << ADC_SMPR1_SMP14_Pos) /*!< 0x00002000 */ +#define ADC_SMPR1_SMP14_2 (0x4U << ADC_SMPR1_SMP14_Pos) /*!< 0x00004000 */ + +#define ADC_SMPR1_SMP15_Pos (15U) +#define ADC_SMPR1_SMP15_Msk (0x7U << ADC_SMPR1_SMP15_Pos) /*!< 0x00038000 */ +#define ADC_SMPR1_SMP15 ADC_SMPR1_SMP15_Msk /*!< ADC channel 15 sampling time selection */ +#define ADC_SMPR1_SMP15_0 (0x1U << ADC_SMPR1_SMP15_Pos) /*!< 0x00008000 */ +#define ADC_SMPR1_SMP15_1 (0x2U << ADC_SMPR1_SMP15_Pos) /*!< 0x00010000 */ +#define ADC_SMPR1_SMP15_2 (0x4U << ADC_SMPR1_SMP15_Pos) /*!< 0x00020000 */ + +#define ADC_SMPR1_SMP16_Pos (18U) +#define ADC_SMPR1_SMP16_Msk (0x7U << ADC_SMPR1_SMP16_Pos) /*!< 0x001C0000 */ +#define ADC_SMPR1_SMP16 ADC_SMPR1_SMP16_Msk /*!< ADC channel 16 sampling time selection */ +#define ADC_SMPR1_SMP16_0 (0x1U << ADC_SMPR1_SMP16_Pos) /*!< 0x00040000 */ +#define ADC_SMPR1_SMP16_1 (0x2U << ADC_SMPR1_SMP16_Pos) /*!< 0x00080000 */ +#define ADC_SMPR1_SMP16_2 (0x4U << ADC_SMPR1_SMP16_Pos) /*!< 0x00100000 */ + +#define ADC_SMPR1_SMP17_Pos (21U) +#define ADC_SMPR1_SMP17_Msk (0x7U << ADC_SMPR1_SMP17_Pos) /*!< 0x00E00000 */ +#define ADC_SMPR1_SMP17 ADC_SMPR1_SMP17_Msk /*!< ADC channel 17 sampling time selection */ +#define ADC_SMPR1_SMP17_0 (0x1U << ADC_SMPR1_SMP17_Pos) /*!< 0x00200000 */ +#define ADC_SMPR1_SMP17_1 (0x2U << ADC_SMPR1_SMP17_Pos) /*!< 0x00400000 */ +#define ADC_SMPR1_SMP17_2 (0x4U << ADC_SMPR1_SMP17_Pos) /*!< 0x00800000 */ + +/****************** Bit definition for ADC_SMPR2 register *******************/ +#define ADC_SMPR2_SMP0_Pos (0U) +#define ADC_SMPR2_SMP0_Msk (0x7U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000007 */ +#define ADC_SMPR2_SMP0 ADC_SMPR2_SMP0_Msk /*!< ADC channel 0 sampling time selection */ +#define ADC_SMPR2_SMP0_0 (0x1U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000001 */ +#define ADC_SMPR2_SMP0_1 (0x2U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000002 */ +#define ADC_SMPR2_SMP0_2 (0x4U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000004 */ + +#define ADC_SMPR2_SMP1_Pos (3U) +#define ADC_SMPR2_SMP1_Msk (0x7U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000038 */ +#define ADC_SMPR2_SMP1 ADC_SMPR2_SMP1_Msk /*!< ADC channel 1 sampling time selection */ +#define ADC_SMPR2_SMP1_0 (0x1U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000008 */ +#define ADC_SMPR2_SMP1_1 (0x2U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000010 */ +#define ADC_SMPR2_SMP1_2 (0x4U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000020 */ + +#define ADC_SMPR2_SMP2_Pos (6U) +#define ADC_SMPR2_SMP2_Msk (0x7U << ADC_SMPR2_SMP2_Pos) /*!< 0x000001C0 */ +#define ADC_SMPR2_SMP2 ADC_SMPR2_SMP2_Msk /*!< ADC channel 2 sampling time selection */ +#define ADC_SMPR2_SMP2_0 (0x1U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000040 */ +#define ADC_SMPR2_SMP2_1 (0x2U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000080 */ +#define ADC_SMPR2_SMP2_2 (0x4U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000100 */ + +#define ADC_SMPR2_SMP3_Pos (9U) +#define ADC_SMPR2_SMP3_Msk (0x7U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000E00 */ +#define ADC_SMPR2_SMP3 ADC_SMPR2_SMP3_Msk /*!< ADC channel 3 sampling time selection */ +#define ADC_SMPR2_SMP3_0 (0x1U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000200 */ +#define ADC_SMPR2_SMP3_1 (0x2U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000400 */ +#define ADC_SMPR2_SMP3_2 (0x4U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000800 */ + +#define ADC_SMPR2_SMP4_Pos (12U) +#define ADC_SMPR2_SMP4_Msk (0x7U << ADC_SMPR2_SMP4_Pos) /*!< 0x00007000 */ +#define ADC_SMPR2_SMP4 ADC_SMPR2_SMP4_Msk /*!< ADC channel 4 sampling time selection */ +#define ADC_SMPR2_SMP4_0 (0x1U << ADC_SMPR2_SMP4_Pos) /*!< 0x00001000 */ +#define ADC_SMPR2_SMP4_1 (0x2U << ADC_SMPR2_SMP4_Pos) /*!< 0x00002000 */ +#define ADC_SMPR2_SMP4_2 (0x4U << ADC_SMPR2_SMP4_Pos) /*!< 0x00004000 */ + +#define ADC_SMPR2_SMP5_Pos (15U) +#define ADC_SMPR2_SMP5_Msk (0x7U << ADC_SMPR2_SMP5_Pos) /*!< 0x00038000 */ +#define ADC_SMPR2_SMP5 ADC_SMPR2_SMP5_Msk /*!< ADC channel 5 sampling time selection */ +#define ADC_SMPR2_SMP5_0 (0x1U << ADC_SMPR2_SMP5_Pos) /*!< 0x00008000 */ +#define ADC_SMPR2_SMP5_1 (0x2U << ADC_SMPR2_SMP5_Pos) /*!< 0x00010000 */ +#define ADC_SMPR2_SMP5_2 (0x4U << ADC_SMPR2_SMP5_Pos) /*!< 0x00020000 */ + +#define ADC_SMPR2_SMP6_Pos (18U) +#define ADC_SMPR2_SMP6_Msk (0x7U << ADC_SMPR2_SMP6_Pos) /*!< 0x001C0000 */ +#define ADC_SMPR2_SMP6 ADC_SMPR2_SMP6_Msk /*!< ADC channel 6 sampling time selection */ +#define ADC_SMPR2_SMP6_0 (0x1U << ADC_SMPR2_SMP6_Pos) /*!< 0x00040000 */ +#define ADC_SMPR2_SMP6_1 (0x2U << ADC_SMPR2_SMP6_Pos) /*!< 0x00080000 */ +#define ADC_SMPR2_SMP6_2 (0x4U << ADC_SMPR2_SMP6_Pos) /*!< 0x00100000 */ + +#define ADC_SMPR2_SMP7_Pos (21U) +#define ADC_SMPR2_SMP7_Msk (0x7U << ADC_SMPR2_SMP7_Pos) /*!< 0x00E00000 */ +#define ADC_SMPR2_SMP7 ADC_SMPR2_SMP7_Msk /*!< ADC channel 7 sampling time selection */ +#define ADC_SMPR2_SMP7_0 (0x1U << ADC_SMPR2_SMP7_Pos) /*!< 0x00200000 */ +#define ADC_SMPR2_SMP7_1 (0x2U << ADC_SMPR2_SMP7_Pos) /*!< 0x00400000 */ +#define ADC_SMPR2_SMP7_2 (0x4U << ADC_SMPR2_SMP7_Pos) /*!< 0x00800000 */ + +#define ADC_SMPR2_SMP8_Pos (24U) +#define ADC_SMPR2_SMP8_Msk (0x7U << ADC_SMPR2_SMP8_Pos) /*!< 0x07000000 */ +#define ADC_SMPR2_SMP8 ADC_SMPR2_SMP8_Msk /*!< ADC channel 8 sampling time selection */ +#define ADC_SMPR2_SMP8_0 (0x1U << ADC_SMPR2_SMP8_Pos) /*!< 0x01000000 */ +#define ADC_SMPR2_SMP8_1 (0x2U << ADC_SMPR2_SMP8_Pos) /*!< 0x02000000 */ +#define ADC_SMPR2_SMP8_2 (0x4U << ADC_SMPR2_SMP8_Pos) /*!< 0x04000000 */ + +#define ADC_SMPR2_SMP9_Pos (27U) +#define ADC_SMPR2_SMP9_Msk (0x7U << ADC_SMPR2_SMP9_Pos) /*!< 0x38000000 */ +#define ADC_SMPR2_SMP9 ADC_SMPR2_SMP9_Msk /*!< ADC channel 9 sampling time selection */ +#define ADC_SMPR2_SMP9_0 (0x1U << ADC_SMPR2_SMP9_Pos) /*!< 0x08000000 */ +#define ADC_SMPR2_SMP9_1 (0x2U << ADC_SMPR2_SMP9_Pos) /*!< 0x10000000 */ +#define ADC_SMPR2_SMP9_2 (0x4U << ADC_SMPR2_SMP9_Pos) /*!< 0x20000000 */ + +/****************** Bit definition for ADC_JOFR1 register *******************/ +#define ADC_JOFR1_JOFFSET1_Pos (0U) +#define ADC_JOFR1_JOFFSET1_Msk (0xFFFU << ADC_JOFR1_JOFFSET1_Pos) /*!< 0x00000FFF */ +#define ADC_JOFR1_JOFFSET1 ADC_JOFR1_JOFFSET1_Msk /*!< ADC group injected sequencer rank 1 offset value */ + +/****************** Bit definition for ADC_JOFR2 register *******************/ +#define ADC_JOFR2_JOFFSET2_Pos (0U) +#define ADC_JOFR2_JOFFSET2_Msk (0xFFFU << ADC_JOFR2_JOFFSET2_Pos) /*!< 0x00000FFF */ +#define ADC_JOFR2_JOFFSET2 ADC_JOFR2_JOFFSET2_Msk /*!< ADC group injected sequencer rank 2 offset value */ + +/****************** Bit definition for ADC_JOFR3 register *******************/ +#define ADC_JOFR3_JOFFSET3_Pos (0U) +#define ADC_JOFR3_JOFFSET3_Msk (0xFFFU << ADC_JOFR3_JOFFSET3_Pos) /*!< 0x00000FFF */ +#define ADC_JOFR3_JOFFSET3 ADC_JOFR3_JOFFSET3_Msk /*!< ADC group injected sequencer rank 3 offset value */ + +/****************** Bit definition for ADC_JOFR4 register *******************/ +#define ADC_JOFR4_JOFFSET4_Pos (0U) +#define ADC_JOFR4_JOFFSET4_Msk (0xFFFU << ADC_JOFR4_JOFFSET4_Pos) /*!< 0x00000FFF */ +#define ADC_JOFR4_JOFFSET4 ADC_JOFR4_JOFFSET4_Msk /*!< ADC group injected sequencer rank 4 offset value */ + +/******************* Bit definition for ADC_HTR register ********************/ +#define ADC_HTR_HT_Pos (0U) +#define ADC_HTR_HT_Msk (0xFFFU << ADC_HTR_HT_Pos) /*!< 0x00000FFF */ +#define ADC_HTR_HT ADC_HTR_HT_Msk /*!< ADC analog watchdog 1 threshold high */ + +/******************* Bit definition for ADC_LTR register ********************/ +#define ADC_LTR_LT_Pos (0U) +#define ADC_LTR_LT_Msk (0xFFFU << ADC_LTR_LT_Pos) /*!< 0x00000FFF */ +#define ADC_LTR_LT ADC_LTR_LT_Msk /*!< ADC analog watchdog 1 threshold low */ + +/******************* Bit definition for ADC_SQR1 register *******************/ +#define ADC_SQR1_SQ13_Pos (0U) +#define ADC_SQR1_SQ13_Msk (0x1FU << ADC_SQR1_SQ13_Pos) /*!< 0x0000001F */ +#define ADC_SQR1_SQ13 ADC_SQR1_SQ13_Msk /*!< ADC group regular sequencer rank 13 */ +#define ADC_SQR1_SQ13_0 (0x01U << ADC_SQR1_SQ13_Pos) /*!< 0x00000001 */ +#define ADC_SQR1_SQ13_1 (0x02U << ADC_SQR1_SQ13_Pos) /*!< 0x00000002 */ +#define ADC_SQR1_SQ13_2 (0x04U << ADC_SQR1_SQ13_Pos) /*!< 0x00000004 */ +#define ADC_SQR1_SQ13_3 (0x08U << ADC_SQR1_SQ13_Pos) /*!< 0x00000008 */ +#define ADC_SQR1_SQ13_4 (0x10U << ADC_SQR1_SQ13_Pos) /*!< 0x00000010 */ + +#define ADC_SQR1_SQ14_Pos (5U) +#define ADC_SQR1_SQ14_Msk (0x1FU << ADC_SQR1_SQ14_Pos) /*!< 0x000003E0 */ +#define ADC_SQR1_SQ14 ADC_SQR1_SQ14_Msk /*!< ADC group regular sequencer rank 14 */ +#define ADC_SQR1_SQ14_0 (0x01U << ADC_SQR1_SQ14_Pos) /*!< 0x00000020 */ +#define ADC_SQR1_SQ14_1 (0x02U << ADC_SQR1_SQ14_Pos) /*!< 0x00000040 */ +#define ADC_SQR1_SQ14_2 (0x04U << ADC_SQR1_SQ14_Pos) /*!< 0x00000080 */ +#define ADC_SQR1_SQ14_3 (0x08U << ADC_SQR1_SQ14_Pos) /*!< 0x00000100 */ +#define ADC_SQR1_SQ14_4 (0x10U << ADC_SQR1_SQ14_Pos) /*!< 0x00000200 */ + +#define ADC_SQR1_SQ15_Pos (10U) +#define ADC_SQR1_SQ15_Msk (0x1FU << ADC_SQR1_SQ15_Pos) /*!< 0x00007C00 */ +#define ADC_SQR1_SQ15 ADC_SQR1_SQ15_Msk /*!< ADC group regular sequencer rank 15 */ +#define ADC_SQR1_SQ15_0 (0x01U << ADC_SQR1_SQ15_Pos) /*!< 0x00000400 */ +#define ADC_SQR1_SQ15_1 (0x02U << ADC_SQR1_SQ15_Pos) /*!< 0x00000800 */ +#define ADC_SQR1_SQ15_2 (0x04U << ADC_SQR1_SQ15_Pos) /*!< 0x00001000 */ +#define ADC_SQR1_SQ15_3 (0x08U << ADC_SQR1_SQ15_Pos) /*!< 0x00002000 */ +#define ADC_SQR1_SQ15_4 (0x10U << ADC_SQR1_SQ15_Pos) /*!< 0x00004000 */ + +#define ADC_SQR1_SQ16_Pos (15U) +#define ADC_SQR1_SQ16_Msk (0x1FU << ADC_SQR1_SQ16_Pos) /*!< 0x000F8000 */ +#define ADC_SQR1_SQ16 ADC_SQR1_SQ16_Msk /*!< ADC group regular sequencer rank 16 */ +#define ADC_SQR1_SQ16_0 (0x01U << ADC_SQR1_SQ16_Pos) /*!< 0x00008000 */ +#define ADC_SQR1_SQ16_1 (0x02U << ADC_SQR1_SQ16_Pos) /*!< 0x00010000 */ +#define ADC_SQR1_SQ16_2 (0x04U << ADC_SQR1_SQ16_Pos) /*!< 0x00020000 */ +#define ADC_SQR1_SQ16_3 (0x08U << ADC_SQR1_SQ16_Pos) /*!< 0x00040000 */ +#define ADC_SQR1_SQ16_4 (0x10U << ADC_SQR1_SQ16_Pos) /*!< 0x00080000 */ + +#define ADC_SQR1_L_Pos (20U) +#define ADC_SQR1_L_Msk (0xFU << ADC_SQR1_L_Pos) /*!< 0x00F00000 */ +#define ADC_SQR1_L ADC_SQR1_L_Msk /*!< ADC group regular sequencer scan length */ +#define ADC_SQR1_L_0 (0x1U << ADC_SQR1_L_Pos) /*!< 0x00100000 */ +#define ADC_SQR1_L_1 (0x2U << ADC_SQR1_L_Pos) /*!< 0x00200000 */ +#define ADC_SQR1_L_2 (0x4U << ADC_SQR1_L_Pos) /*!< 0x00400000 */ +#define ADC_SQR1_L_3 (0x8U << ADC_SQR1_L_Pos) /*!< 0x00800000 */ + +/******************* Bit definition for ADC_SQR2 register *******************/ +#define ADC_SQR2_SQ7_Pos (0U) +#define ADC_SQR2_SQ7_Msk (0x1FU << ADC_SQR2_SQ7_Pos) /*!< 0x0000001F */ +#define ADC_SQR2_SQ7 ADC_SQR2_SQ7_Msk /*!< ADC group regular sequencer rank 7 */ +#define ADC_SQR2_SQ7_0 (0x01U << ADC_SQR2_SQ7_Pos) /*!< 0x00000001 */ +#define ADC_SQR2_SQ7_1 (0x02U << ADC_SQR2_SQ7_Pos) /*!< 0x00000002 */ +#define ADC_SQR2_SQ7_2 (0x04U << ADC_SQR2_SQ7_Pos) /*!< 0x00000004 */ +#define ADC_SQR2_SQ7_3 (0x08U << ADC_SQR2_SQ7_Pos) /*!< 0x00000008 */ +#define ADC_SQR2_SQ7_4 (0x10U << ADC_SQR2_SQ7_Pos) /*!< 0x00000010 */ + +#define ADC_SQR2_SQ8_Pos (5U) +#define ADC_SQR2_SQ8_Msk (0x1FU << ADC_SQR2_SQ8_Pos) /*!< 0x000003E0 */ +#define ADC_SQR2_SQ8 ADC_SQR2_SQ8_Msk /*!< ADC group regular sequencer rank 8 */ +#define ADC_SQR2_SQ8_0 (0x01U << ADC_SQR2_SQ8_Pos) /*!< 0x00000020 */ +#define ADC_SQR2_SQ8_1 (0x02U << ADC_SQR2_SQ8_Pos) /*!< 0x00000040 */ +#define ADC_SQR2_SQ8_2 (0x04U << ADC_SQR2_SQ8_Pos) /*!< 0x00000080 */ +#define ADC_SQR2_SQ8_3 (0x08U << ADC_SQR2_SQ8_Pos) /*!< 0x00000100 */ +#define ADC_SQR2_SQ8_4 (0x10U << ADC_SQR2_SQ8_Pos) /*!< 0x00000200 */ + +#define ADC_SQR2_SQ9_Pos (10U) +#define ADC_SQR2_SQ9_Msk (0x1FU << ADC_SQR2_SQ9_Pos) /*!< 0x00007C00 */ +#define ADC_SQR2_SQ9 ADC_SQR2_SQ9_Msk /*!< ADC group regular sequencer rank 9 */ +#define ADC_SQR2_SQ9_0 (0x01U << ADC_SQR2_SQ9_Pos) /*!< 0x00000400 */ +#define ADC_SQR2_SQ9_1 (0x02U << ADC_SQR2_SQ9_Pos) /*!< 0x00000800 */ +#define ADC_SQR2_SQ9_2 (0x04U << ADC_SQR2_SQ9_Pos) /*!< 0x00001000 */ +#define ADC_SQR2_SQ9_3 (0x08U << ADC_SQR2_SQ9_Pos) /*!< 0x00002000 */ +#define ADC_SQR2_SQ9_4 (0x10U << ADC_SQR2_SQ9_Pos) /*!< 0x00004000 */ + +#define ADC_SQR2_SQ10_Pos (15U) +#define ADC_SQR2_SQ10_Msk (0x1FU << ADC_SQR2_SQ10_Pos) /*!< 0x000F8000 */ +#define ADC_SQR2_SQ10 ADC_SQR2_SQ10_Msk /*!< ADC group regular sequencer rank 10 */ +#define ADC_SQR2_SQ10_0 (0x01U << ADC_SQR2_SQ10_Pos) /*!< 0x00008000 */ +#define ADC_SQR2_SQ10_1 (0x02U << ADC_SQR2_SQ10_Pos) /*!< 0x00010000 */ +#define ADC_SQR2_SQ10_2 (0x04U << ADC_SQR2_SQ10_Pos) /*!< 0x00020000 */ +#define ADC_SQR2_SQ10_3 (0x08U << ADC_SQR2_SQ10_Pos) /*!< 0x00040000 */ +#define ADC_SQR2_SQ10_4 (0x10U << ADC_SQR2_SQ10_Pos) /*!< 0x00080000 */ + +#define ADC_SQR2_SQ11_Pos (20U) +#define ADC_SQR2_SQ11_Msk (0x1FU << ADC_SQR2_SQ11_Pos) /*!< 0x01F00000 */ +#define ADC_SQR2_SQ11 ADC_SQR2_SQ11_Msk /*!< ADC group regular sequencer rank 1 */ +#define ADC_SQR2_SQ11_0 (0x01U << ADC_SQR2_SQ11_Pos) /*!< 0x00100000 */ +#define ADC_SQR2_SQ11_1 (0x02U << ADC_SQR2_SQ11_Pos) /*!< 0x00200000 */ +#define ADC_SQR2_SQ11_2 (0x04U << ADC_SQR2_SQ11_Pos) /*!< 0x00400000 */ +#define ADC_SQR2_SQ11_3 (0x08U << ADC_SQR2_SQ11_Pos) /*!< 0x00800000 */ +#define ADC_SQR2_SQ11_4 (0x10U << ADC_SQR2_SQ11_Pos) /*!< 0x01000000 */ + +#define ADC_SQR2_SQ12_Pos (25U) +#define ADC_SQR2_SQ12_Msk (0x1FU << ADC_SQR2_SQ12_Pos) /*!< 0x3E000000 */ +#define ADC_SQR2_SQ12 ADC_SQR2_SQ12_Msk /*!< ADC group regular sequencer rank 12 */ +#define ADC_SQR2_SQ12_0 (0x01U << ADC_SQR2_SQ12_Pos) /*!< 0x02000000 */ +#define ADC_SQR2_SQ12_1 (0x02U << ADC_SQR2_SQ12_Pos) /*!< 0x04000000 */ +#define ADC_SQR2_SQ12_2 (0x04U << ADC_SQR2_SQ12_Pos) /*!< 0x08000000 */ +#define ADC_SQR2_SQ12_3 (0x08U << ADC_SQR2_SQ12_Pos) /*!< 0x10000000 */ +#define ADC_SQR2_SQ12_4 (0x10U << ADC_SQR2_SQ12_Pos) /*!< 0x20000000 */ + +/******************* Bit definition for ADC_SQR3 register *******************/ +#define ADC_SQR3_SQ1_Pos (0U) +#define ADC_SQR3_SQ1_Msk (0x1FU << ADC_SQR3_SQ1_Pos) /*!< 0x0000001F */ +#define ADC_SQR3_SQ1 ADC_SQR3_SQ1_Msk /*!< ADC group regular sequencer rank 1 */ +#define ADC_SQR3_SQ1_0 (0x01U << ADC_SQR3_SQ1_Pos) /*!< 0x00000001 */ +#define ADC_SQR3_SQ1_1 (0x02U << ADC_SQR3_SQ1_Pos) /*!< 0x00000002 */ +#define ADC_SQR3_SQ1_2 (0x04U << ADC_SQR3_SQ1_Pos) /*!< 0x00000004 */ +#define ADC_SQR3_SQ1_3 (0x08U << ADC_SQR3_SQ1_Pos) /*!< 0x00000008 */ +#define ADC_SQR3_SQ1_4 (0x10U << ADC_SQR3_SQ1_Pos) /*!< 0x00000010 */ + +#define ADC_SQR3_SQ2_Pos (5U) +#define ADC_SQR3_SQ2_Msk (0x1FU << ADC_SQR3_SQ2_Pos) /*!< 0x000003E0 */ +#define ADC_SQR3_SQ2 ADC_SQR3_SQ2_Msk /*!< ADC group regular sequencer rank 2 */ +#define ADC_SQR3_SQ2_0 (0x01U << ADC_SQR3_SQ2_Pos) /*!< 0x00000020 */ +#define ADC_SQR3_SQ2_1 (0x02U << ADC_SQR3_SQ2_Pos) /*!< 0x00000040 */ +#define ADC_SQR3_SQ2_2 (0x04U << ADC_SQR3_SQ2_Pos) /*!< 0x00000080 */ +#define ADC_SQR3_SQ2_3 (0x08U << ADC_SQR3_SQ2_Pos) /*!< 0x00000100 */ +#define ADC_SQR3_SQ2_4 (0x10U << ADC_SQR3_SQ2_Pos) /*!< 0x00000200 */ + +#define ADC_SQR3_SQ3_Pos (10U) +#define ADC_SQR3_SQ3_Msk (0x1FU << ADC_SQR3_SQ3_Pos) /*!< 0x00007C00 */ +#define ADC_SQR3_SQ3 ADC_SQR3_SQ3_Msk /*!< ADC group regular sequencer rank 3 */ +#define ADC_SQR3_SQ3_0 (0x01U << ADC_SQR3_SQ3_Pos) /*!< 0x00000400 */ +#define ADC_SQR3_SQ3_1 (0x02U << ADC_SQR3_SQ3_Pos) /*!< 0x00000800 */ +#define ADC_SQR3_SQ3_2 (0x04U << ADC_SQR3_SQ3_Pos) /*!< 0x00001000 */ +#define ADC_SQR3_SQ3_3 (0x08U << ADC_SQR3_SQ3_Pos) /*!< 0x00002000 */ +#define ADC_SQR3_SQ3_4 (0x10U << ADC_SQR3_SQ3_Pos) /*!< 0x00004000 */ + +#define ADC_SQR3_SQ4_Pos (15U) +#define ADC_SQR3_SQ4_Msk (0x1FU << ADC_SQR3_SQ4_Pos) /*!< 0x000F8000 */ +#define ADC_SQR3_SQ4 ADC_SQR3_SQ4_Msk /*!< ADC group regular sequencer rank 4 */ +#define ADC_SQR3_SQ4_0 (0x01U << ADC_SQR3_SQ4_Pos) /*!< 0x00008000 */ +#define ADC_SQR3_SQ4_1 (0x02U << ADC_SQR3_SQ4_Pos) /*!< 0x00010000 */ +#define ADC_SQR3_SQ4_2 (0x04U << ADC_SQR3_SQ4_Pos) /*!< 0x00020000 */ +#define ADC_SQR3_SQ4_3 (0x08U << ADC_SQR3_SQ4_Pos) /*!< 0x00040000 */ +#define ADC_SQR3_SQ4_4 (0x10U << ADC_SQR3_SQ4_Pos) /*!< 0x00080000 */ + +#define ADC_SQR3_SQ5_Pos (20U) +#define ADC_SQR3_SQ5_Msk (0x1FU << ADC_SQR3_SQ5_Pos) /*!< 0x01F00000 */ +#define ADC_SQR3_SQ5 ADC_SQR3_SQ5_Msk /*!< ADC group regular sequencer rank 5 */ +#define ADC_SQR3_SQ5_0 (0x01U << ADC_SQR3_SQ5_Pos) /*!< 0x00100000 */ +#define ADC_SQR3_SQ5_1 (0x02U << ADC_SQR3_SQ5_Pos) /*!< 0x00200000 */ +#define ADC_SQR3_SQ5_2 (0x04U << ADC_SQR3_SQ5_Pos) /*!< 0x00400000 */ +#define ADC_SQR3_SQ5_3 (0x08U << ADC_SQR3_SQ5_Pos) /*!< 0x00800000 */ +#define ADC_SQR3_SQ5_4 (0x10U << ADC_SQR3_SQ5_Pos) /*!< 0x01000000 */ + +#define ADC_SQR3_SQ6_Pos (25U) +#define ADC_SQR3_SQ6_Msk (0x1FU << ADC_SQR3_SQ6_Pos) /*!< 0x3E000000 */ +#define ADC_SQR3_SQ6 ADC_SQR3_SQ6_Msk /*!< ADC group regular sequencer rank 6 */ +#define ADC_SQR3_SQ6_0 (0x01U << ADC_SQR3_SQ6_Pos) /*!< 0x02000000 */ +#define ADC_SQR3_SQ6_1 (0x02U << ADC_SQR3_SQ6_Pos) /*!< 0x04000000 */ +#define ADC_SQR3_SQ6_2 (0x04U << ADC_SQR3_SQ6_Pos) /*!< 0x08000000 */ +#define ADC_SQR3_SQ6_3 (0x08U << ADC_SQR3_SQ6_Pos) /*!< 0x10000000 */ +#define ADC_SQR3_SQ6_4 (0x10U << ADC_SQR3_SQ6_Pos) /*!< 0x20000000 */ + +/******************* Bit definition for ADC_JSQR register *******************/ +#define ADC_JSQR_JSQ1_Pos (0U) +#define ADC_JSQR_JSQ1_Msk (0x1FU << ADC_JSQR_JSQ1_Pos) /*!< 0x0000001F */ +#define ADC_JSQR_JSQ1 ADC_JSQR_JSQ1_Msk /*!< ADC group injected sequencer rank 1 */ +#define ADC_JSQR_JSQ1_0 (0x01U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000001 */ +#define ADC_JSQR_JSQ1_1 (0x02U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000002 */ +#define ADC_JSQR_JSQ1_2 (0x04U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000004 */ +#define ADC_JSQR_JSQ1_3 (0x08U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000008 */ +#define ADC_JSQR_JSQ1_4 (0x10U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000010 */ + +#define ADC_JSQR_JSQ2_Pos (5U) +#define ADC_JSQR_JSQ2_Msk (0x1FU << ADC_JSQR_JSQ2_Pos) /*!< 0x000003E0 */ +#define ADC_JSQR_JSQ2 ADC_JSQR_JSQ2_Msk /*!< ADC group injected sequencer rank 2 */ +#define ADC_JSQR_JSQ2_0 (0x01U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000020 */ +#define ADC_JSQR_JSQ2_1 (0x02U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000040 */ +#define ADC_JSQR_JSQ2_2 (0x04U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000080 */ +#define ADC_JSQR_JSQ2_3 (0x08U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000100 */ +#define ADC_JSQR_JSQ2_4 (0x10U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000200 */ + +#define ADC_JSQR_JSQ3_Pos (10U) +#define ADC_JSQR_JSQ3_Msk (0x1FU << ADC_JSQR_JSQ3_Pos) /*!< 0x00007C00 */ +#define ADC_JSQR_JSQ3 ADC_JSQR_JSQ3_Msk /*!< ADC group injected sequencer rank 3 */ +#define ADC_JSQR_JSQ3_0 (0x01U << ADC_JSQR_JSQ3_Pos) /*!< 0x00000400 */ +#define ADC_JSQR_JSQ3_1 (0x02U << ADC_JSQR_JSQ3_Pos) /*!< 0x00000800 */ +#define ADC_JSQR_JSQ3_2 (0x04U << ADC_JSQR_JSQ3_Pos) /*!< 0x00001000 */ +#define ADC_JSQR_JSQ3_3 (0x08U << ADC_JSQR_JSQ3_Pos) /*!< 0x00002000 */ +#define ADC_JSQR_JSQ3_4 (0x10U << ADC_JSQR_JSQ3_Pos) /*!< 0x00004000 */ + +#define ADC_JSQR_JSQ4_Pos (15U) +#define ADC_JSQR_JSQ4_Msk (0x1FU << ADC_JSQR_JSQ4_Pos) /*!< 0x000F8000 */ +#define ADC_JSQR_JSQ4 ADC_JSQR_JSQ4_Msk /*!< ADC group injected sequencer rank 4 */ +#define ADC_JSQR_JSQ4_0 (0x01U << ADC_JSQR_JSQ4_Pos) /*!< 0x00008000 */ +#define ADC_JSQR_JSQ4_1 (0x02U << ADC_JSQR_JSQ4_Pos) /*!< 0x00010000 */ +#define ADC_JSQR_JSQ4_2 (0x04U << ADC_JSQR_JSQ4_Pos) /*!< 0x00020000 */ +#define ADC_JSQR_JSQ4_3 (0x08U << ADC_JSQR_JSQ4_Pos) /*!< 0x00040000 */ +#define ADC_JSQR_JSQ4_4 (0x10U << ADC_JSQR_JSQ4_Pos) /*!< 0x00080000 */ + +#define ADC_JSQR_JL_Pos (20U) +#define ADC_JSQR_JL_Msk (0x3U << ADC_JSQR_JL_Pos) /*!< 0x00300000 */ +#define ADC_JSQR_JL ADC_JSQR_JL_Msk /*!< ADC group injected sequencer scan length */ +#define ADC_JSQR_JL_0 (0x1U << ADC_JSQR_JL_Pos) /*!< 0x00100000 */ +#define ADC_JSQR_JL_1 (0x2U << ADC_JSQR_JL_Pos) /*!< 0x00200000 */ + +/******************* Bit definition for ADC_JDR1 register *******************/ +#define ADC_JDR1_JDATA_Pos (0U) +#define ADC_JDR1_JDATA_Msk (0xFFFFU << ADC_JDR1_JDATA_Pos) /*!< 0x0000FFFF */ +#define ADC_JDR1_JDATA ADC_JDR1_JDATA_Msk /*!< ADC group injected sequencer rank 1 conversion data */ + +/******************* Bit definition for ADC_JDR2 register *******************/ +#define ADC_JDR2_JDATA_Pos (0U) +#define ADC_JDR2_JDATA_Msk (0xFFFFU << ADC_JDR2_JDATA_Pos) /*!< 0x0000FFFF */ +#define ADC_JDR2_JDATA ADC_JDR2_JDATA_Msk /*!< ADC group injected sequencer rank 2 conversion data */ + +/******************* Bit definition for ADC_JDR3 register *******************/ +#define ADC_JDR3_JDATA_Pos (0U) +#define ADC_JDR3_JDATA_Msk (0xFFFFU << ADC_JDR3_JDATA_Pos) /*!< 0x0000FFFF */ +#define ADC_JDR3_JDATA ADC_JDR3_JDATA_Msk /*!< ADC group injected sequencer rank 3 conversion data */ + +/******************* Bit definition for ADC_JDR4 register *******************/ +#define ADC_JDR4_JDATA_Pos (0U) +#define ADC_JDR4_JDATA_Msk (0xFFFFU << ADC_JDR4_JDATA_Pos) /*!< 0x0000FFFF */ +#define ADC_JDR4_JDATA ADC_JDR4_JDATA_Msk /*!< ADC group injected sequencer rank 4 conversion data */ + +/******************** Bit definition for ADC_DR register ********************/ +#define ADC_DR_DATA_Pos (0U) +#define ADC_DR_DATA_Msk (0xFFFFU << ADC_DR_DATA_Pos) /*!< 0x0000FFFF */ +#define ADC_DR_DATA ADC_DR_DATA_Msk /*!< ADC group regular conversion data */ +#define ADC_DR_ADC2DATA_Pos (16U) +#define ADC_DR_ADC2DATA_Msk (0xFFFFU << ADC_DR_ADC2DATA_Pos) /*!< 0xFFFF0000 */ +#define ADC_DR_ADC2DATA ADC_DR_ADC2DATA_Msk /*!< ADC group regular conversion data for ADC slave, in multimode */ + + +/*****************************************************************************/ +/* */ +/* Timers (TIM) */ +/* */ +/*****************************************************************************/ +/******************* Bit definition for TIM_CR1 register *******************/ +#define TIM_CR1_CEN_Pos (0U) +#define TIM_CR1_CEN_Msk (0x1U << TIM_CR1_CEN_Pos) /*!< 0x00000001 */ +#define TIM_CR1_CEN TIM_CR1_CEN_Msk /*!
© COPYRIGHT(c) 2016 STMicroelectronics
+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f1xx + * @{ + */ + +#ifndef __STM32F1XX_H +#define __STM32F1XX_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Library_configuration_section + * @{ + */ + +/** + * @brief STM32 Family + */ +#if !defined (STM32F1) +#define STM32F1 +#endif /* STM32F1 */ + +/* Uncomment the line below according to the target STM32L device used in your + application + */ + +#if !defined (STM32F100xB) && !defined (STM32F100xE) && !defined (STM32F101x6) && \ + !defined (STM32F101xB) && !defined (STM32F101xE) && !defined (STM32F101xG) && !defined (STM32F102x6) && !defined (STM32F102xB) && !defined (STM32F103x6) && \ + !defined (STM32F103xB) && !defined (STM32F103xE) && !defined (STM32F103xG) && !defined (STM32F105xC) && !defined (STM32F107xC) + /* #define STM32F100xB */ /*!< STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB and STM32F100VB */ + /* #define STM32F100xE */ /*!< STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE and STM32F100ZE */ + /* #define STM32F101x6 */ /*!< STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6 and STM32F101T6 Devices */ + /* #define STM32F101xB */ /*!< STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB and STM32F101VB */ + /* #define STM32F101xE */ /*!< STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE and STM32F101ZE */ + /* #define STM32F101xG */ /*!< STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG and STM32F101ZG */ + /* #define STM32F102x6 */ /*!< STM32F102C4, STM32F102R4, STM32F102C6 and STM32F102R6 */ + /* #define STM32F102xB */ /*!< STM32F102C8, STM32F102R8, STM32F102CB and STM32F102RB */ + /* #define STM32F103x6 */ /*!< STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6 and STM32F103T6 */ + /* #define STM32F103xB */ /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */ + /* #define STM32F103xE */ /*!< STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE and STM32F103ZE */ + /* #define STM32F103xG */ /*!< STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG and STM32F103ZG */ + /* #define STM32F105xC */ /*!< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */ + /* #define STM32F107xC */ /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */ +#endif + +/* Tip: To avoid modifying this file each time you need to switch between these + devices, you can define the device in your toolchain compiler preprocessor. + */ + +#if !defined (USE_HAL_DRIVER) +/** + * @brief Comment the line below if you will not use the peripherals drivers. + In this case, these drivers will not be included and the application code will + be based on direct access to peripherals registers + */ + /*#define USE_HAL_DRIVER */ +#endif /* USE_HAL_DRIVER */ + +/** + * @brief CMSIS Device version number + */ +#define __STM32F1_CMSIS_VERSION_MAIN (0x04) /*!< [31:24] main version */ +#define __STM32F1_CMSIS_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ +#define __STM32F1_CMSIS_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F1_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */ +#define __STM32F1_CMSIS_VERSION ((__STM32F1_CMSIS_VERSION_MAIN << 24)\ + |(__STM32F1_CMSIS_VERSION_SUB1 << 16)\ + |(__STM32F1_CMSIS_VERSION_SUB2 << 8 )\ + |(__STM32F1_CMSIS_VERSION_RC)) + +/** + * @} + */ + +/** @addtogroup Device_Included + * @{ + */ + +#if defined(STM32F100xB) + #include "stm32f100xb.h" +#elif defined(STM32F100xE) + #include "stm32f100xe.h" +#elif defined(STM32F101x6) + #include "stm32f101x6.h" +#elif defined(STM32F101xB) + #include "stm32f101xb.h" +#elif defined(STM32F101xE) + #include "stm32f101xe.h" +#elif defined(STM32F101xG) + #include "stm32f101xg.h" +#elif defined(STM32F102x6) + #include "stm32f102x6.h" +#elif defined(STM32F102xB) + #include "stm32f102xb.h" +#elif defined(STM32F103x6) + #include "stm32f103x6.h" +#elif defined(STM32F103xB) + #include "stm32f103xb.h" +#elif defined(STM32F103xE) + #include "stm32f103xe.h" +#elif defined(STM32F103xG) + #include "stm32f103xg.h" +#elif defined(STM32F105xC) + #include "stm32f105xc.h" +#elif defined(STM32F107xC) + #include "stm32f107xc.h" +#else + #error "Please select first the target STM32F1xx device used in your application (in stm32f1xx.h file)" +#endif + +/** + * @} + */ + +/** @addtogroup Exported_types + * @{ + */ +typedef enum +{ + RESET = 0, + SET = !RESET +} FlagStatus, ITStatus; + +typedef enum +{ + DISABLE = 0, + ENABLE = !DISABLE +} FunctionalState; +#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) + +typedef enum +{ + ERROR = 0, + SUCCESS = !ERROR +} ErrorStatus; + +/** + * @} + */ + + +/** @addtogroup Exported_macros + * @{ + */ +#define SET_BIT(REG, BIT) ((REG) |= (BIT)) + +#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT)) + +#define READ_BIT(REG, BIT) ((REG) & (BIT)) + +#define CLEAR_REG(REG) ((REG) = (0x0)) + +#define WRITE_REG(REG, VAL) ((REG) = (VAL)) + +#define READ_REG(REG) ((REG)) + +#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) + +#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL))) + + +/** + * @} + */ + +#if defined (USE_HAL_DRIVER) + #include "stm32f1xx_hal.h" +#endif /* USE_HAL_DRIVER */ + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __STM32F1xx_H */ +/** + * @} + */ + +/** + * @} + */ + + + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,116 @@ +/** + ****************************************************************************** + * @file system_stm32f10x.h + * @author MCD Application Team + * @version V4.1.0 + * @date 29-April-2016 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Header File. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f10x_system + * @{ + */ + +/** + * @brief Define to prevent recursive inclusion + */ +#ifndef __SYSTEM_STM32F10X_H +#define __SYSTEM_STM32F10X_H + +#ifdef __cplusplus + extern "C" { +#endif + +/** @addtogroup STM32F10x_System_Includes + * @{ + */ + +/** + * @} + */ + + +/** @addtogroup STM32F10x_System_Exported_types + * @{ + */ + +extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ +extern const uint8_t AHBPrescTable[16]; /*!< AHB prescalers table values */ +extern const uint8_t APBPrescTable[8]; /*!< APB prescalers table values */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Exported_Constants + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Exported_Functions + * @{ + */ + +extern void SystemInit(void); +extern void SystemCoreClockUpdate(void); +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /*__SYSTEM_STM32F10X_H */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103xb.s --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103xb.s Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,379 @@ +/** + *************** (C) COPYRIGHT 2016 STMicroelectronics ************************ + * @file startup_stm32f103xb.s + * @author MCD Application Team + * @version V4.1.0 + * @date 29-April-2016 + * @brief STM32F103xB Devices vector table for Atollic toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m3 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word USB_HP_CAN1_TX_IRQHandler + .word USB_LP_CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_IRQHandler + .word TIM1_UP_IRQHandler + .word TIM1_TRG_COM_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTC_Alarm_IRQHandler + .word USBWakeUp_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x108. This is for boot in RAM mode for + STM32F10x Medium Density devices. */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak USB_HP_CAN1_TX_IRQHandler + .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler + + .weak USB_LP_CAN1_RX0_IRQHandler + .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_IRQHandler + .thumb_set TIM1_BRK_IRQHandler,Default_Handler + + .weak TIM1_UP_IRQHandler + .thumb_set TIM1_UP_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_IRQHandler + .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak USBWakeUp_IRQHandler + .thumb_set USBWakeUp_IRQHandler,Default_Handler + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/arm_common_tables.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/arm_common_tables.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,136 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. October 2015 +* $Revision: V.1.4.5 a +* +* Project: CMSIS DSP Library +* Title: arm_common_tables.h +* +* Description: This file has extern declaration for common tables like Bitreverse, reciprocal etc which are used across different functions +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#ifndef _ARM_COMMON_TABLES_H +#define _ARM_COMMON_TABLES_H + +#include "arm_math.h" + +extern const uint16_t armBitRevTable[1024]; +extern const q15_t armRecipTableQ15[64]; +extern const q31_t armRecipTableQ31[64]; +/* extern const q31_t realCoefAQ31[1024]; */ +/* extern const q31_t realCoefBQ31[1024]; */ +extern const float32_t twiddleCoef_16[32]; +extern const float32_t twiddleCoef_32[64]; +extern const float32_t twiddleCoef_64[128]; +extern const float32_t twiddleCoef_128[256]; +extern const float32_t twiddleCoef_256[512]; +extern const float32_t twiddleCoef_512[1024]; +extern const float32_t twiddleCoef_1024[2048]; +extern const float32_t twiddleCoef_2048[4096]; +extern const float32_t twiddleCoef_4096[8192]; +#define twiddleCoef twiddleCoef_4096 +extern const q31_t twiddleCoef_16_q31[24]; +extern const q31_t twiddleCoef_32_q31[48]; +extern const q31_t twiddleCoef_64_q31[96]; +extern const q31_t twiddleCoef_128_q31[192]; +extern const q31_t twiddleCoef_256_q31[384]; +extern const q31_t twiddleCoef_512_q31[768]; +extern const q31_t twiddleCoef_1024_q31[1536]; +extern const q31_t twiddleCoef_2048_q31[3072]; +extern const q31_t twiddleCoef_4096_q31[6144]; +extern const q15_t twiddleCoef_16_q15[24]; +extern const q15_t twiddleCoef_32_q15[48]; +extern const q15_t twiddleCoef_64_q15[96]; +extern const q15_t twiddleCoef_128_q15[192]; +extern const q15_t twiddleCoef_256_q15[384]; +extern const q15_t twiddleCoef_512_q15[768]; +extern const q15_t twiddleCoef_1024_q15[1536]; +extern const q15_t twiddleCoef_2048_q15[3072]; +extern const q15_t twiddleCoef_4096_q15[6144]; +extern const float32_t twiddleCoef_rfft_32[32]; +extern const float32_t twiddleCoef_rfft_64[64]; +extern const float32_t twiddleCoef_rfft_128[128]; +extern const float32_t twiddleCoef_rfft_256[256]; +extern const float32_t twiddleCoef_rfft_512[512]; +extern const float32_t twiddleCoef_rfft_1024[1024]; +extern const float32_t twiddleCoef_rfft_2048[2048]; +extern const float32_t twiddleCoef_rfft_4096[4096]; + + +/* floating-point bit reversal tables */ +#define ARMBITREVINDEXTABLE__16_TABLE_LENGTH ((uint16_t)20 ) +#define ARMBITREVINDEXTABLE__32_TABLE_LENGTH ((uint16_t)48 ) +#define ARMBITREVINDEXTABLE__64_TABLE_LENGTH ((uint16_t)56 ) +#define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208 ) +#define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440 ) +#define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448 ) +#define ARMBITREVINDEXTABLE1024_TABLE_LENGTH ((uint16_t)1800) +#define ARMBITREVINDEXTABLE2048_TABLE_LENGTH ((uint16_t)3808) +#define ARMBITREVINDEXTABLE4096_TABLE_LENGTH ((uint16_t)4032) + +extern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE__16_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE__32_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE__64_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE1024_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE2048_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE4096_TABLE_LENGTH]; + +/* fixed-point bit reversal tables */ +#define ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH ((uint16_t)12 ) +#define ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH ((uint16_t)24 ) +#define ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH ((uint16_t)56 ) +#define ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH ((uint16_t)112 ) +#define ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH ((uint16_t)240 ) +#define ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH ((uint16_t)480 ) +#define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992 ) +#define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984) +#define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032) + +extern const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH]; + +/* Tables for Fast Math Sine and Cosine */ +extern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1]; +extern const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1]; +extern const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1]; + +#endif /* ARM_COMMON_TABLES_H */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/arm_const_structs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/arm_const_structs.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,79 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 19. March 2015 +* $Revision: V.1.4.5 +* +* Project: CMSIS DSP Library +* Title: arm_const_structs.h +* +* Description: This file has constant structs that are initialized for +* user convenience. For example, some can be given as +* arguments to the arm_cfft_f32() function. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#ifndef _ARM_CONST_STRUCTS_H +#define _ARM_CONST_STRUCTS_H + +#include "arm_math.h" +#include "arm_common_tables.h" + + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len16; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len32; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len64; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len128; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len256; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len512; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096; + + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len16; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len32; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len64; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len128; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len256; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len512; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096; + + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len16; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len32; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len64; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len128; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len256; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len512; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096; + +#endif diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/arm_math.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/arm_math.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,7154 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2015 ARM Limited. All rights reserved. +* +* $Date: 20. October 2015 +* $Revision: V1.4.5 b +* +* Project: CMSIS DSP Library +* Title: arm_math.h +* +* Description: Public header file for CMSIS DSP Library +* +* Target Processor: Cortex-M7/Cortex-M4/Cortex-M3/Cortex-M0 +* +* 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. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "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 +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + \mainpage CMSIS DSP Software Library + * + * Introduction + * ------------ + * + * This user manual describes the CMSIS DSP software library, + * a suite of common signal processing functions for use on Cortex-M processor based devices. + * + * The library is divided into a number of functions each covering a specific category: + * - Basic math functions + * - Fast math functions + * - Complex math functions + * - Filters + * - Matrix functions + * - Transforms + * - Motor control functions + * - Statistical functions + * - Support functions + * - Interpolation functions + * + * The library has separate functions for operating on 8-bit integers, 16-bit integers, + * 32-bit integer and 32-bit floating-point values. + * + * Using the Library + * ------------ + * + * The library installer contains prebuilt versions of the libraries in the Lib folder. + * - arm_cortexM7lfdp_math.lib (Little endian and Double Precision Floating Point Unit on Cortex-M7) + * - arm_cortexM7bfdp_math.lib (Big endian and Double Precision Floating Point Unit on Cortex-M7) + * - arm_cortexM7lfsp_math.lib (Little endian and Single Precision Floating Point Unit on Cortex-M7) + * - arm_cortexM7bfsp_math.lib (Big endian and Single Precision Floating Point Unit on Cortex-M7) + * - arm_cortexM7l_math.lib (Little endian on Cortex-M7) + * - arm_cortexM7b_math.lib (Big endian on Cortex-M7) + * - arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4) + * - arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4) + * - arm_cortexM4l_math.lib (Little endian on Cortex-M4) + * - arm_cortexM4b_math.lib (Big endian on Cortex-M4) + * - arm_cortexM3l_math.lib (Little endian on Cortex-M3) + * - arm_cortexM3b_math.lib (Big endian on Cortex-M3) + * - arm_cortexM0l_math.lib (Little endian on Cortex-M0 / CortexM0+) + * - arm_cortexM0b_math.lib (Big endian on Cortex-M0 / CortexM0+) + * + * The library functions are declared in the public file arm_math.h which is placed in the Include folder. + * Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single + * public header file arm_math.h for Cortex-M7/M4/M3/M0/M0+ with little endian and big endian. Same header file will be used for floating point unit(FPU) variants. + * Define the appropriate pre processor MACRO ARM_MATH_CM7 or ARM_MATH_CM4 or ARM_MATH_CM3 or + * ARM_MATH_CM0 or ARM_MATH_CM0PLUS depending on the target processor in the application. + * + * Examples + * -------- + * + * The library ships with a number of examples which demonstrate how to use the library functions. + * + * Toolchain Support + * ------------ + * + * The library has been developed and tested with MDK-ARM version 5.14.0.0 + * The library is being tested in GCC and IAR toolchains and updates on this activity will be made available shortly. + * + * Building the Library + * ------------ + * + * The library installer contains a project file to re build libraries on MDK-ARM Tool chain in the CMSIS\\DSP_Lib\\Source\\ARM folder. + * - arm_cortexM_math.uvprojx + * + * + * The libraries can be built by opening the arm_cortexM_math.uvprojx project in MDK-ARM, selecting a specific target, and defining the optional pre processor MACROs detailed above. + * + * Pre-processor Macros + * ------------ + * + * Each library project have differant pre-processor macros. + * + * - UNALIGNED_SUPPORT_DISABLE: + * + * Define macro UNALIGNED_SUPPORT_DISABLE, If the silicon does not support unaligned memory access + * + * - ARM_MATH_BIG_ENDIAN: + * + * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets. + * + * - ARM_MATH_MATRIX_CHECK: + * + * Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices + * + * - ARM_MATH_ROUNDING: + * + * Define macro ARM_MATH_ROUNDING for rounding on support functions + * + * - ARM_MATH_CMx: + * + * Define macro ARM_MATH_CM4 for building the library on Cortex-M4 target, ARM_MATH_CM3 for building library on Cortex-M3 target + * and ARM_MATH_CM0 for building library on Cortex-M0 target, ARM_MATH_CM0PLUS for building library on Cortex-M0+ target, and + * ARM_MATH_CM7 for building the library on cortex-M7. + * + * - __FPU_PRESENT: + * + * Initialize macro __FPU_PRESENT = 1 when building on FPU supported Targets. Enable this macro for M4bf and M4lf libraries + * + *
+ * CMSIS-DSP in ARM::CMSIS Pack + * ----------------------------- + * + * The following files relevant to CMSIS-DSP are present in the ARM::CMSIS Pack directories: + * |File/Folder |Content | + * |------------------------------|------------------------------------------------------------------------| + * |\b CMSIS\\Documentation\\DSP | This documentation | + * |\b CMSIS\\DSP_Lib | Software license agreement (license.txt) | + * |\b CMSIS\\DSP_Lib\\Examples | Example projects demonstrating the usage of the library functions | + * |\b CMSIS\\DSP_Lib\\Source | Source files for rebuilding the library | + * + *
+ * Revision History of CMSIS-DSP + * ------------ + * Please refer to \ref ChangeLog_pg. + * + * Copyright Notice + * ------------ + * + * Copyright (C) 2010-2015 ARM Limited. All rights reserved. + */ + + +/** + * @defgroup groupMath Basic Math Functions + */ + +/** + * @defgroup groupFastMath Fast Math Functions + * This set of functions provides a fast approximation to sine, cosine, and square root. + * As compared to most of the other functions in the CMSIS math library, the fast math functions + * operate on individual values and not arrays. + * There are separate functions for Q15, Q31, and floating-point data. + * + */ + +/** + * @defgroup groupCmplxMath Complex Math Functions + * This set of functions operates on complex data vectors. + * The data in the complex arrays is stored in an interleaved fashion + * (real, imag, real, imag, ...). + * In the API functions, the number of samples in a complex array refers + * to the number of complex values; the array contains twice this number of + * real values. + */ + +/** + * @defgroup groupFilters Filtering Functions + */ + +/** + * @defgroup groupMatrix Matrix Functions + * + * This set of functions provides basic matrix math operations. + * The functions operate on matrix data structures. For example, + * the type + * definition for the floating-point matrix structure is shown + * below: + *
+ *     typedef struct
+ *     {
+ *       uint16_t numRows;     // number of rows of the matrix.
+ *       uint16_t numCols;     // number of columns of the matrix.
+ *       float32_t *pData;     // points to the data of the matrix.
+ *     } arm_matrix_instance_f32;
+ * 
+ * There are similar definitions for Q15 and Q31 data types. + * + * The structure specifies the size of the matrix and then points to + * an array of data. The array is of size numRows X numCols + * and the values are arranged in row order. That is, the + * matrix element (i, j) is stored at: + *
+ *     pData[i*numCols + j]
+ * 
+ * + * \par Init Functions + * There is an associated initialization function for each type of matrix + * data structure. + * The initialization function sets the values of the internal structure fields. + * Refer to the function arm_mat_init_f32(), arm_mat_init_q31() + * and arm_mat_init_q15() for floating-point, Q31 and Q15 types, respectively. + * + * \par + * Use of the initialization function is optional. However, if initialization function is used + * then the instance structure cannot be placed into a const data section. + * To place the instance structure in a const data + * section, manually initialize the data structure. For example: + *
+ * arm_matrix_instance_f32 S = {nRows, nColumns, pData};
+ * arm_matrix_instance_q31 S = {nRows, nColumns, pData};
+ * arm_matrix_instance_q15 S = {nRows, nColumns, pData};
+ * 
+ * where nRows specifies the number of rows, nColumns + * specifies the number of columns, and pData points to the + * data array. + * + * \par Size Checking + * By default all of the matrix functions perform size checking on the input and + * output matrices. For example, the matrix addition function verifies that the + * two input matrices and the output matrix all have the same number of rows and + * columns. If the size check fails the functions return: + *
+ *     ARM_MATH_SIZE_MISMATCH
+ * 
+ * Otherwise the functions return + *
+ *     ARM_MATH_SUCCESS
+ * 
+ * There is some overhead associated with this matrix size checking. + * The matrix size checking is enabled via the \#define + *
+ *     ARM_MATH_MATRIX_CHECK
+ * 
+ * within the library project settings. By default this macro is defined + * and size checking is enabled. By changing the project settings and + * undefining this macro size checking is eliminated and the functions + * run a bit faster. With size checking disabled the functions always + * return ARM_MATH_SUCCESS. + */ + +/** + * @defgroup groupTransforms Transform Functions + */ + +/** + * @defgroup groupController Controller Functions + */ + +/** + * @defgroup groupStats Statistics Functions + */ +/** + * @defgroup groupSupport Support Functions + */ + +/** + * @defgroup groupInterpolation Interpolation Functions + * These functions perform 1- and 2-dimensional interpolation of data. + * Linear interpolation is used for 1-dimensional data and + * bilinear interpolation is used for 2-dimensional data. + */ + +/** + * @defgroup groupExamples Examples + */ +#ifndef _ARM_MATH_H +#define _ARM_MATH_H + +/* ignore some GCC warnings */ +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" +#endif + +#define __CMSIS_GENERIC /* disable NVIC and Systick functions */ + +#if defined(ARM_MATH_CM7) + #include "core_cm7.h" +#elif defined (ARM_MATH_CM4) + #include "core_cm4.h" +#elif defined (ARM_MATH_CM3) + #include "core_cm3.h" +#elif defined (ARM_MATH_CM0) + #include "core_cm0.h" + #define ARM_MATH_CM0_FAMILY +#elif defined (ARM_MATH_CM0PLUS) + #include "core_cm0plus.h" + #define ARM_MATH_CM0_FAMILY +#else + #error "Define according the used Cortex core ARM_MATH_CM7, ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS or ARM_MATH_CM0" +#endif + +#undef __CMSIS_GENERIC /* enable NVIC and Systick functions */ +#include "string.h" +#include "math.h" +#ifdef __cplusplus +extern "C" +{ +#endif + + + /** + * @brief Macros required for reciprocal calculation in Normalized LMS + */ + +#define DELTA_Q31 (0x100) +#define DELTA_Q15 0x5 +#define INDEX_MASK 0x0000003F +#ifndef PI +#define PI 3.14159265358979f +#endif + + /** + * @brief Macros required for SINE and COSINE Fast math approximations + */ + +#define FAST_MATH_TABLE_SIZE 512 +#define FAST_MATH_Q31_SHIFT (32 - 10) +#define FAST_MATH_Q15_SHIFT (16 - 10) +#define CONTROLLER_Q31_SHIFT (32 - 9) +#define TABLE_SIZE 256 +#define TABLE_SPACING_Q31 0x400000 +#define TABLE_SPACING_Q15 0x80 + + /** + * @brief Macros required for SINE and COSINE Controller functions + */ + /* 1.31(q31) Fixed value of 2/360 */ + /* -1 to +1 is divided into 360 values so total spacing is (2/360) */ +#define INPUT_SPACING 0xB60B61 + + /** + * @brief Macro for Unaligned Support + */ +#ifndef UNALIGNED_SUPPORT_DISABLE + #define ALIGN4 +#else + #if defined (__GNUC__) + #define ALIGN4 __attribute__((aligned(4))) + #else + #define ALIGN4 __align(4) + #endif +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /** + * @brief Error status returned by some functions in the library. + */ + + typedef enum + { + ARM_MATH_SUCCESS = 0, /**< No error */ + ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */ + ARM_MATH_LENGTH_ERROR = -2, /**< Length of data buffer is incorrect */ + ARM_MATH_SIZE_MISMATCH = -3, /**< Size of matrices is not compatible with the operation. */ + ARM_MATH_NANINF = -4, /**< Not-a-number (NaN) or infinity is generated */ + ARM_MATH_SINGULAR = -5, /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */ + ARM_MATH_TEST_FAILURE = -6 /**< Test Failed */ + } arm_status; + + /** + * @brief 8-bit fractional data type in 1.7 format. + */ + typedef int8_t q7_t; + + /** + * @brief 16-bit fractional data type in 1.15 format. + */ + typedef int16_t q15_t; + + /** + * @brief 32-bit fractional data type in 1.31 format. + */ + typedef int32_t q31_t; + + /** + * @brief 64-bit fractional data type in 1.63 format. + */ + typedef int64_t q63_t; + + /** + * @brief 32-bit floating-point type definition. + */ + typedef float float32_t; + + /** + * @brief 64-bit floating-point type definition. + */ + typedef double float64_t; + + /** + * @brief definition to read/write two 16 bit values. + */ +#if defined __CC_ARM + #define __SIMD32_TYPE int32_t __packed + #define CMSIS_UNUSED __attribute__((unused)) + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #define __SIMD32_TYPE int32_t + #define CMSIS_UNUSED __attribute__((unused)) + +#elif defined __GNUC__ + #define __SIMD32_TYPE int32_t + #define CMSIS_UNUSED __attribute__((unused)) + +#elif defined __ICCARM__ + #define __SIMD32_TYPE int32_t __packed + #define CMSIS_UNUSED + +#elif defined __CSMC__ + #define __SIMD32_TYPE int32_t + #define CMSIS_UNUSED + +#elif defined __TASKING__ + #define __SIMD32_TYPE __unaligned int32_t + #define CMSIS_UNUSED + +#else + #error Unknown compiler +#endif + +#define __SIMD32(addr) (*(__SIMD32_TYPE **) & (addr)) +#define __SIMD32_CONST(addr) ((__SIMD32_TYPE *)(addr)) +#define _SIMD32_OFFSET(addr) (*(__SIMD32_TYPE *) (addr)) +#define __SIMD64(addr) (*(int64_t **) & (addr)) + +#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) + /** + * @brief definition to pack two 16 bit values. + */ +#define __PKHBT(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | \ + (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000) ) +#define __PKHTB(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0xFFFF0000) | \ + (((int32_t)(ARG2) >> ARG3) & (int32_t)0x0000FFFF) ) + +#endif + + + /** + * @brief definition to pack four 8 bit values. + */ +#ifndef ARM_MATH_BIG_ENDIAN + +#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v0) << 0) & (int32_t)0x000000FF) | \ + (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | \ + (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | \ + (((int32_t)(v3) << 24) & (int32_t)0xFF000000) ) +#else + +#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) << 0) & (int32_t)0x000000FF) | \ + (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | \ + (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | \ + (((int32_t)(v0) << 24) & (int32_t)0xFF000000) ) + +#endif + + + /** + * @brief Clips Q63 to Q31 values. + */ + static __INLINE q31_t clip_q63_to_q31( + q63_t x) + { + return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? + ((0x7FFFFFFF ^ ((q31_t) (x >> 63)))) : (q31_t) x; + } + + /** + * @brief Clips Q63 to Q15 values. + */ + static __INLINE q15_t clip_q63_to_q15( + q63_t x) + { + return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? + ((0x7FFF ^ ((q15_t) (x >> 63)))) : (q15_t) (x >> 15); + } + + /** + * @brief Clips Q31 to Q7 values. + */ + static __INLINE q7_t clip_q31_to_q7( + q31_t x) + { + return ((q31_t) (x >> 24) != ((q31_t) x >> 23)) ? + ((0x7F ^ ((q7_t) (x >> 31)))) : (q7_t) x; + } + + /** + * @brief Clips Q31 to Q15 values. + */ + static __INLINE q15_t clip_q31_to_q15( + q31_t x) + { + return ((q31_t) (x >> 16) != ((q31_t) x >> 15)) ? + ((0x7FFF ^ ((q15_t) (x >> 31)))) : (q15_t) x; + } + + /** + * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format. + */ + + static __INLINE q63_t mult32x64( + q63_t x, + q31_t y) + { + return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) + + (((q63_t) (x >> 32) * y))); + } + +/* + #if defined (ARM_MATH_CM0_FAMILY) && defined ( __CC_ARM ) + #define __CLZ __clz + #endif + */ +/* note: function can be removed when all toolchain support __CLZ for Cortex-M0 */ +#if defined (ARM_MATH_CM0_FAMILY) && ((defined (__ICCARM__)) ) + static __INLINE uint32_t __CLZ( + q31_t data); + + static __INLINE uint32_t __CLZ( + q31_t data) + { + uint32_t count = 0; + uint32_t mask = 0x80000000; + + while((data & mask) == 0) + { + count += 1u; + mask = mask >> 1u; + } + + return (count); + } +#endif + + /** + * @brief Function to Calculates 1/in (reciprocal) value of Q31 Data type. + */ + + static __INLINE uint32_t arm_recip_q31( + q31_t in, + q31_t * dst, + q31_t * pRecipTable) + { + q31_t out; + uint32_t tempVal; + uint32_t index, i; + uint32_t signBits; + + if(in > 0) + { + signBits = ((uint32_t) (__CLZ( in) - 1)); + } + else + { + signBits = ((uint32_t) (__CLZ(-in) - 1)); + } + + /* Convert input sample to 1.31 format */ + in = (in << signBits); + + /* calculation of index for initial approximated Val */ + index = (uint32_t)(in >> 24); + index = (index & INDEX_MASK); + + /* 1.31 with exp 1 */ + out = pRecipTable[index]; + + /* calculation of reciprocal value */ + /* running approximation for two iterations */ + for (i = 0u; i < 2u; i++) + { + tempVal = (uint32_t) (((q63_t) in * out) >> 31); + tempVal = 0x7FFFFFFFu - tempVal; + /* 1.31 with exp 1 */ + /* out = (q31_t) (((q63_t) out * tempVal) >> 30); */ + out = clip_q63_to_q31(((q63_t) out * tempVal) >> 30); + } + + /* write output */ + *dst = out; + + /* return num of signbits of out = 1/in value */ + return (signBits + 1u); + } + + + /** + * @brief Function to Calculates 1/in (reciprocal) value of Q15 Data type. + */ + static __INLINE uint32_t arm_recip_q15( + q15_t in, + q15_t * dst, + q15_t * pRecipTable) + { + q15_t out = 0; + uint32_t tempVal = 0; + uint32_t index = 0, i = 0; + uint32_t signBits = 0; + + if(in > 0) + { + signBits = ((uint32_t)(__CLZ( in) - 17)); + } + else + { + signBits = ((uint32_t)(__CLZ(-in) - 17)); + } + + /* Convert input sample to 1.15 format */ + in = (in << signBits); + + /* calculation of index for initial approximated Val */ + index = (uint32_t)(in >> 8); + index = (index & INDEX_MASK); + + /* 1.15 with exp 1 */ + out = pRecipTable[index]; + + /* calculation of reciprocal value */ + /* running approximation for two iterations */ + for (i = 0u; i < 2u; i++) + { + tempVal = (uint32_t) (((q31_t) in * out) >> 15); + tempVal = 0x7FFFu - tempVal; + /* 1.15 with exp 1 */ + out = (q15_t) (((q31_t) out * tempVal) >> 14); + /* out = clip_q31_to_q15(((q31_t) out * tempVal) >> 14); */ + } + + /* write output */ + *dst = out; + + /* return num of signbits of out = 1/in value */ + return (signBits + 1); + } + + + /* + * @brief C custom defined intrinisic function for only M0 processors + */ +#if defined(ARM_MATH_CM0_FAMILY) + static __INLINE q31_t __SSAT( + q31_t x, + uint32_t y) + { + int32_t posMax, negMin; + uint32_t i; + + posMax = 1; + for (i = 0; i < (y - 1); i++) + { + posMax = posMax * 2; + } + + if(x > 0) + { + posMax = (posMax - 1); + + if(x > posMax) + { + x = posMax; + } + } + else + { + negMin = -posMax; + + if(x < negMin) + { + x = negMin; + } + } + return (x); + } +#endif /* end of ARM_MATH_CM0_FAMILY */ + + + /* + * @brief C custom defined intrinsic function for M3 and M0 processors + */ +#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) + + /* + * @brief C custom defined QADD8 for M3 and M0 processors + */ + static __INLINE uint32_t __QADD8( + uint32_t x, + uint32_t y) + { + q31_t r, s, t, u; + + r = __SSAT(((((q31_t)x << 24) >> 24) + (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; + s = __SSAT(((((q31_t)x << 16) >> 24) + (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; + t = __SSAT(((((q31_t)x << 8) >> 24) + (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; + u = __SSAT(((((q31_t)x ) >> 24) + (((q31_t)y ) >> 24)), 8) & (int32_t)0x000000FF; + + return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r ))); + } + + + /* + * @brief C custom defined QSUB8 for M3 and M0 processors + */ + static __INLINE uint32_t __QSUB8( + uint32_t x, + uint32_t y) + { + q31_t r, s, t, u; + + r = __SSAT(((((q31_t)x << 24) >> 24) - (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; + s = __SSAT(((((q31_t)x << 16) >> 24) - (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; + t = __SSAT(((((q31_t)x << 8) >> 24) - (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; + u = __SSAT(((((q31_t)x ) >> 24) - (((q31_t)y ) >> 24)), 8) & (int32_t)0x000000FF; + + return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r ))); + } + + + /* + * @brief C custom defined QADD16 for M3 and M0 processors + */ + static __INLINE uint32_t __QADD16( + uint32_t x, + uint32_t y) + { +/* q31_t r, s; without initialisation 'arm_offset_q15 test' fails but 'intrinsic' tests pass! for armCC */ + q31_t r = 0, s = 0; + + r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((q31_t)x ) >> 16) + (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined SHADD16 for M3 and M0 processors + */ + static __INLINE uint32_t __SHADD16( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = (((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((q31_t)x ) >> 16) + (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined QSUB16 for M3 and M0 processors + */ + static __INLINE uint32_t __QSUB16( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((q31_t)x ) >> 16) - (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined SHSUB16 for M3 and M0 processors + */ + static __INLINE uint32_t __SHSUB16( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = (((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((q31_t)x ) >> 16) - (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined QASX for M3 and M0 processors + */ + static __INLINE uint32_t __QASX( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((q31_t)x ) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined SHASX for M3 and M0 processors + */ + static __INLINE uint32_t __SHASX( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = (((((q31_t)x << 16) >> 16) - (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((q31_t)x ) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined QSAX for M3 and M0 processors + */ + static __INLINE uint32_t __QSAX( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((q31_t)x ) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined SHSAX for M3 and M0 processors + */ + static __INLINE uint32_t __SHSAX( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = (((((q31_t)x << 16) >> 16) + (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((q31_t)x ) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined SMUSDX for M3 and M0 processors + */ + static __INLINE uint32_t __SMUSDX( + uint32_t x, + uint32_t y) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) - + ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) )); + } + + /* + * @brief C custom defined SMUADX for M3 and M0 processors + */ + static __INLINE uint32_t __SMUADX( + uint32_t x, + uint32_t y) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) )); + } + + + /* + * @brief C custom defined QADD for M3 and M0 processors + */ + static __INLINE int32_t __QADD( + int32_t x, + int32_t y) + { + return ((int32_t)(clip_q63_to_q31((q63_t)x + (q31_t)y))); + } + + + /* + * @brief C custom defined QSUB for M3 and M0 processors + */ + static __INLINE int32_t __QSUB( + int32_t x, + int32_t y) + { + return ((int32_t)(clip_q63_to_q31((q63_t)x - (q31_t)y))); + } + + + /* + * @brief C custom defined SMLAD for M3 and M0 processors + */ + static __INLINE uint32_t __SMLAD( + uint32_t x, + uint32_t y, + uint32_t sum) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) + + ( ((q31_t)sum ) ) )); + } + + + /* + * @brief C custom defined SMLADX for M3 and M0 processors + */ + static __INLINE uint32_t __SMLADX( + uint32_t x, + uint32_t y, + uint32_t sum) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + + ( ((q31_t)sum ) ) )); + } + + + /* + * @brief C custom defined SMLSDX for M3 and M0 processors + */ + static __INLINE uint32_t __SMLSDX( + uint32_t x, + uint32_t y, + uint32_t sum) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) - + ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + + ( ((q31_t)sum ) ) )); + } + + + /* + * @brief C custom defined SMLALD for M3 and M0 processors + */ + static __INLINE uint64_t __SMLALD( + uint32_t x, + uint32_t y, + uint64_t sum) + { +/* return (sum + ((q15_t) (x >> 16) * (q15_t) (y >> 16)) + ((q15_t) x * (q15_t) y)); */ + return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) + + ( ((q63_t)sum ) ) )); + } + + + /* + * @brief C custom defined SMLALDX for M3 and M0 processors + */ + static __INLINE uint64_t __SMLALDX( + uint32_t x, + uint32_t y, + uint64_t sum) + { +/* return (sum + ((q15_t) (x >> 16) * (q15_t) y)) + ((q15_t) x * (q15_t) (y >> 16)); */ + return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + + ( ((q63_t)sum ) ) )); + } + + + /* + * @brief C custom defined SMUAD for M3 and M0 processors + */ + static __INLINE uint32_t __SMUAD( + uint32_t x, + uint32_t y) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) )); + } + + + /* + * @brief C custom defined SMUSD for M3 and M0 processors + */ + static __INLINE uint32_t __SMUSD( + uint32_t x, + uint32_t y) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) - + ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) )); + } + + + /* + * @brief C custom defined SXTB16 for M3 and M0 processors + */ + static __INLINE uint32_t __SXTB16( + uint32_t x) + { + return ((uint32_t)(((((q31_t)x << 24) >> 24) & (q31_t)0x0000FFFF) | + ((((q31_t)x << 8) >> 8) & (q31_t)0xFFFF0000) )); + } + +#endif /* defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ + + + /** + * @brief Instance structure for the Q7 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q7_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + } arm_fir_instance_q7; + + /** + * @brief Instance structure for the Q15 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + } arm_fir_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_f32; + + + /** + * @brief Processing function for the Q7 FIR filter. + * @param[in] S points to an instance of the Q7 FIR filter structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_fir_q7( + const arm_fir_instance_q7 * S, + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q7 FIR filter. + * @param[in,out] S points to an instance of the Q7 FIR structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] blockSize number of samples that are processed. + */ + void arm_fir_init_q7( + arm_fir_instance_q7 * S, + uint16_t numTaps, + q7_t * pCoeffs, + q7_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 FIR filter. + * @param[in] S points to an instance of the Q15 FIR structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_fir_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4. + * @param[in] S points to an instance of the Q15 FIR filter structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_fir_fast_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 FIR filter. + * @param[in,out] S points to an instance of the Q15 FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. Must be even and greater than or equal to 4. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_ARGUMENT_ERROR if + * numTaps is not a supported value. + */ + arm_status arm_fir_init_q15( + arm_fir_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 FIR filter. + * @param[in] S points to an instance of the Q31 FIR filter structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_fir_q31( + const arm_fir_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Processing function for the fast Q31 FIR filter for Cortex-M3 and Cortex-M4. + * @param[in] S points to an instance of the Q31 FIR structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_fir_fast_q31( + const arm_fir_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 FIR filter. + * @param[in,out] S points to an instance of the Q31 FIR structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + */ + void arm_fir_init_q31( + arm_fir_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the floating-point FIR filter. + * @param[in] S points to an instance of the floating-point FIR structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_fir_f32( + const arm_fir_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point FIR filter. + * @param[in,out] S points to an instance of the floating-point FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + */ + void arm_fir_init_f32( + arm_fir_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q15 Biquad cascade filter. + */ + typedef struct + { + int8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q15_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + q15_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ + } arm_biquad_casd_df1_inst_q15; + + /** + * @brief Instance structure for the Q31 Biquad cascade filter. + */ + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q31_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + q31_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + uint8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ + } arm_biquad_casd_df1_inst_q31; + + /** + * @brief Instance structure for the floating-point Biquad cascade filter. + */ + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_casd_df1_inst_f32; + + + /** + * @brief Processing function for the Q15 Biquad cascade filter. + * @param[in] S points to an instance of the Q15 Biquad cascade structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_biquad_cascade_df1_q15( + const arm_biquad_casd_df1_inst_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 Biquad cascade filter. + * @param[in,out] S points to an instance of the Q15 Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format + */ + void arm_biquad_cascade_df1_init_q15( + arm_biquad_casd_df1_inst_q15 * S, + uint8_t numStages, + q15_t * pCoeffs, + q15_t * pState, + int8_t postShift); + + + /** + * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4. + * @param[in] S points to an instance of the Q15 Biquad cascade structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_biquad_cascade_df1_fast_q15( + const arm_biquad_casd_df1_inst_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 Biquad cascade filter + * @param[in] S points to an instance of the Q31 Biquad cascade structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_biquad_cascade_df1_q31( + const arm_biquad_casd_df1_inst_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4. + * @param[in] S points to an instance of the Q31 Biquad cascade structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_biquad_cascade_df1_fast_q31( + const arm_biquad_casd_df1_inst_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 Biquad cascade filter. + * @param[in,out] S points to an instance of the Q31 Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format + */ + void arm_biquad_cascade_df1_init_q31( + arm_biquad_casd_df1_inst_q31 * S, + uint8_t numStages, + q31_t * pCoeffs, + q31_t * pState, + int8_t postShift); + + + /** + * @brief Processing function for the floating-point Biquad cascade filter. + * @param[in] S points to an instance of the floating-point Biquad cascade structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_biquad_cascade_df1_f32( + const arm_biquad_casd_df1_inst_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point Biquad cascade filter. + * @param[in,out] S points to an instance of the floating-point Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + */ + void arm_biquad_cascade_df1_init_f32( + arm_biquad_casd_df1_inst_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + /** + * @brief Instance structure for the floating-point matrix structure. + */ + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + float32_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_f32; + + + /** + * @brief Instance structure for the floating-point matrix structure. + */ + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + float64_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_f64; + + /** + * @brief Instance structure for the Q15 matrix structure. + */ + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q15_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_q15; + + /** + * @brief Instance structure for the Q31 matrix structure. + */ + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q31_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_q31; + + + /** + * @brief Floating-point matrix addition. + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_add_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + + /** + * @brief Q15 matrix addition. + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_add_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst); + + + /** + * @brief Q31 matrix addition. + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_add_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point, complex, matrix multiplication. + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_cmplx_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + + /** + * @brief Q15, complex, matrix multiplication. + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_cmplx_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pScratch); + + + /** + * @brief Q31, complex, matrix multiplication. + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_cmplx_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix transpose. + * @param[in] pSrc points to the input matrix + * @param[out] pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_trans_f32( + const arm_matrix_instance_f32 * pSrc, + arm_matrix_instance_f32 * pDst); + + + /** + * @brief Q15 matrix transpose. + * @param[in] pSrc points to the input matrix + * @param[out] pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_trans_q15( + const arm_matrix_instance_q15 * pSrc, + arm_matrix_instance_q15 * pDst); + + + /** + * @brief Q31 matrix transpose. + * @param[in] pSrc points to the input matrix + * @param[out] pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_trans_q31( + const arm_matrix_instance_q31 * pSrc, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix multiplication + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + + /** + * @brief Q15 matrix multiplication + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @param[in] pState points to the array for storing intermediate results + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState); + + + /** + * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @param[in] pState points to the array for storing intermediate results + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_mult_fast_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState); + + + /** + * @brief Q31 matrix multiplication + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_mult_fast_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix subtraction + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_sub_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + + /** + * @brief Q15 matrix subtraction + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_sub_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst); + + + /** + * @brief Q31 matrix subtraction + * @param[in] pSrcA points to the first input matrix structure + * @param[in] pSrcB points to the second input matrix structure + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_sub_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix scaling. + * @param[in] pSrc points to the input matrix + * @param[in] scale scale factor + * @param[out] pDst points to the output matrix + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_scale_f32( + const arm_matrix_instance_f32 * pSrc, + float32_t scale, + arm_matrix_instance_f32 * pDst); + + + /** + * @brief Q15 matrix scaling. + * @param[in] pSrc points to input matrix + * @param[in] scaleFract fractional portion of the scale factor + * @param[in] shift number of bits to shift the result by + * @param[out] pDst points to output matrix + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_scale_q15( + const arm_matrix_instance_q15 * pSrc, + q15_t scaleFract, + int32_t shift, + arm_matrix_instance_q15 * pDst); + + + /** + * @brief Q31 matrix scaling. + * @param[in] pSrc points to input matrix + * @param[in] scaleFract fractional portion of the scale factor + * @param[in] shift number of bits to shift the result by + * @param[out] pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + arm_status arm_mat_scale_q31( + const arm_matrix_instance_q31 * pSrc, + q31_t scaleFract, + int32_t shift, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Q31 matrix initialization. + * @param[in,out] S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] pData points to the matrix data array. + */ + void arm_mat_init_q31( + arm_matrix_instance_q31 * S, + uint16_t nRows, + uint16_t nColumns, + q31_t * pData); + + + /** + * @brief Q15 matrix initialization. + * @param[in,out] S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] pData points to the matrix data array. + */ + void arm_mat_init_q15( + arm_matrix_instance_q15 * S, + uint16_t nRows, + uint16_t nColumns, + q15_t * pData); + + + /** + * @brief Floating-point matrix initialization. + * @param[in,out] S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] pData points to the matrix data array. + */ + void arm_mat_init_f32( + arm_matrix_instance_f32 * S, + uint16_t nRows, + uint16_t nColumns, + float32_t * pData); + + + + /** + * @brief Instance structure for the Q15 PID Control. + */ + typedef struct + { + q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ +#ifdef ARM_MATH_CM0_FAMILY + q15_t A1; + q15_t A2; +#else + q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/ +#endif + q15_t state[3]; /**< The state array of length 3. */ + q15_t Kp; /**< The proportional gain. */ + q15_t Ki; /**< The integral gain. */ + q15_t Kd; /**< The derivative gain. */ + } arm_pid_instance_q15; + + /** + * @brief Instance structure for the Q31 PID Control. + */ + typedef struct + { + q31_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + q31_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ + q31_t A2; /**< The derived gain, A2 = Kd . */ + q31_t state[3]; /**< The state array of length 3. */ + q31_t Kp; /**< The proportional gain. */ + q31_t Ki; /**< The integral gain. */ + q31_t Kd; /**< The derivative gain. */ + } arm_pid_instance_q31; + + /** + * @brief Instance structure for the floating-point PID Control. + */ + typedef struct + { + float32_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + float32_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ + float32_t A2; /**< The derived gain, A2 = Kd . */ + float32_t state[3]; /**< The state array of length 3. */ + float32_t Kp; /**< The proportional gain. */ + float32_t Ki; /**< The integral gain. */ + float32_t Kd; /**< The derivative gain. */ + } arm_pid_instance_f32; + + + + /** + * @brief Initialization function for the floating-point PID Control. + * @param[in,out] S points to an instance of the PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + */ + void arm_pid_init_f32( + arm_pid_instance_f32 * S, + int32_t resetStateFlag); + + + /** + * @brief Reset function for the floating-point PID Control. + * @param[in,out] S is an instance of the floating-point PID Control structure + */ + void arm_pid_reset_f32( + arm_pid_instance_f32 * S); + + + /** + * @brief Initialization function for the Q31 PID Control. + * @param[in,out] S points to an instance of the Q15 PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + */ + void arm_pid_init_q31( + arm_pid_instance_q31 * S, + int32_t resetStateFlag); + + + /** + * @brief Reset function for the Q31 PID Control. + * @param[in,out] S points to an instance of the Q31 PID Control structure + */ + + void arm_pid_reset_q31( + arm_pid_instance_q31 * S); + + + /** + * @brief Initialization function for the Q15 PID Control. + * @param[in,out] S points to an instance of the Q15 PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + */ + void arm_pid_init_q15( + arm_pid_instance_q15 * S, + int32_t resetStateFlag); + + + /** + * @brief Reset function for the Q15 PID Control. + * @param[in,out] S points to an instance of the q15 PID Control structure + */ + void arm_pid_reset_q15( + arm_pid_instance_q15 * S); + + + /** + * @brief Instance structure for the floating-point Linear Interpolate function. + */ + typedef struct + { + uint32_t nValues; /**< nValues */ + float32_t x1; /**< x1 */ + float32_t xSpacing; /**< xSpacing */ + float32_t *pYData; /**< pointer to the table of Y values */ + } arm_linear_interp_instance_f32; + + /** + * @brief Instance structure for the floating-point bilinear interpolation function. + */ + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + float32_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_f32; + + /** + * @brief Instance structure for the Q31 bilinear interpolation function. + */ + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q31_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q31; + + /** + * @brief Instance structure for the Q15 bilinear interpolation function. + */ + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q15_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q15; + + /** + * @brief Instance structure for the Q15 bilinear interpolation function. + */ + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q7_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q7; + + + /** + * @brief Q7 vector multiplication. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_mult_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q15 vector multiplication. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_mult_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q31 vector multiplication. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_mult_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Floating-point vector multiplication. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_mult_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q15 CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix2_instance_q15; + +/* Deprecated */ + arm_status arm_cfft_radix2_init_q15( + arm_cfft_radix2_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_q15( + const arm_cfft_radix2_instance_q15 * S, + q15_t * pSrc); + + + /** + * @brief Instance structure for the Q15 CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q15_t *pTwiddle; /**< points to the twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix4_instance_q15; + +/* Deprecated */ + arm_status arm_cfft_radix4_init_q15( + arm_cfft_radix4_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix4_q15( + const arm_cfft_radix4_instance_q15 * S, + q15_t * pSrc); + + /** + * @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q31_t *pTwiddle; /**< points to the Twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix2_instance_q31; + +/* Deprecated */ + arm_status arm_cfft_radix2_init_q31( + arm_cfft_radix2_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_q31( + const arm_cfft_radix2_instance_q31 * S, + q31_t * pSrc); + + /** + * @brief Instance structure for the Q31 CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q31_t *pTwiddle; /**< points to the twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix4_instance_q31; + +/* Deprecated */ + void arm_cfft_radix4_q31( + const arm_cfft_radix4_instance_q31 * S, + q31_t * pSrc); + +/* Deprecated */ + arm_status arm_cfft_radix4_init_q31( + arm_cfft_radix4_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float32_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix2_instance_f32; + +/* Deprecated */ + arm_status arm_cfft_radix2_init_f32( + arm_cfft_radix2_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_f32( + const arm_cfft_radix2_instance_f32 * S, + float32_t * pSrc); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float32_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix4_instance_f32; + +/* Deprecated */ + arm_status arm_cfft_radix4_init_f32( + arm_cfft_radix4_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix4_f32( + const arm_cfft_radix4_instance_f32 * S, + float32_t * pSrc); + + /** + * @brief Instance structure for the fixed-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const q15_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ + } arm_cfft_instance_q15; + +void arm_cfft_q15( + const arm_cfft_instance_q15 * S, + q15_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the fixed-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ + } arm_cfft_instance_q31; + +void arm_cfft_q31( + const arm_cfft_instance_q31 * S, + q31_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ + } arm_cfft_instance_f32; + + void arm_cfft_f32( + const arm_cfft_instance_f32 * S, + float32_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the Q15 RFFT/RIFFT function. + */ + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + const arm_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_q15; + + arm_status arm_rfft_init_q15( + arm_rfft_instance_q15 * S, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_q15( + const arm_rfft_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst); + + /** + * @brief Instance structure for the Q31 RFFT/RIFFT function. + */ + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + const arm_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_q31; + + arm_status arm_rfft_init_q31( + arm_rfft_instance_q31 * S, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_q31( + const arm_rfft_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst); + + /** + * @brief Instance structure for the floating-point RFFT/RIFFT function. + */ + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint16_t fftLenBy2; /**< length of the complex FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_f32; + + arm_status arm_rfft_init_f32( + arm_rfft_instance_f32 * S, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_f32( + const arm_rfft_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst); + + /** + * @brief Instance structure for the floating-point RFFT/RIFFT function. + */ +typedef struct + { + arm_cfft_instance_f32 Sint; /**< Internal CFFT structure. */ + uint16_t fftLenRFFT; /**< length of the real sequence */ + float32_t * pTwiddleRFFT; /**< Twiddle factors real stage */ + } arm_rfft_fast_instance_f32 ; + +arm_status arm_rfft_fast_init_f32 ( + arm_rfft_fast_instance_f32 * S, + uint16_t fftLen); + +void arm_rfft_fast_f32( + arm_rfft_fast_instance_f32 * S, + float32_t * p, float32_t * pOut, + uint8_t ifftFlag); + + /** + * @brief Instance structure for the floating-point DCT4/IDCT4 function. + */ + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + float32_t normalize; /**< normalizing factor. */ + float32_t *pTwiddle; /**< points to the twiddle factor table. */ + float32_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_f32 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_f32; + + + /** + * @brief Initialization function for the floating-point DCT4/IDCT4. + * @param[in,out] S points to an instance of floating-point DCT4/IDCT4 structure. + * @param[in] S_RFFT points to an instance of floating-point RFFT/RIFFT structure. + * @param[in] S_CFFT points to an instance of floating-point CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported transform length. + */ + arm_status arm_dct4_init_f32( + arm_dct4_instance_f32 * S, + arm_rfft_instance_f32 * S_RFFT, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint16_t N, + uint16_t Nby2, + float32_t normalize); + + + /** + * @brief Processing function for the floating-point DCT4/IDCT4. + * @param[in] S points to an instance of the floating-point DCT4/IDCT4 structure. + * @param[in] pState points to state buffer. + * @param[in,out] pInlineBuffer points to the in-place input and output buffer. + */ + void arm_dct4_f32( + const arm_dct4_instance_f32 * S, + float32_t * pState, + float32_t * pInlineBuffer); + + + /** + * @brief Instance structure for the Q31 DCT4/IDCT4 function. + */ + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + q31_t normalize; /**< normalizing factor. */ + q31_t *pTwiddle; /**< points to the twiddle factor table. */ + q31_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_q31; + + + /** + * @brief Initialization function for the Q31 DCT4/IDCT4. + * @param[in,out] S points to an instance of Q31 DCT4/IDCT4 structure. + * @param[in] S_RFFT points to an instance of Q31 RFFT/RIFFT structure + * @param[in] S_CFFT points to an instance of Q31 CFFT/CIFFT structure + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + */ + arm_status arm_dct4_init_q31( + arm_dct4_instance_q31 * S, + arm_rfft_instance_q31 * S_RFFT, + arm_cfft_radix4_instance_q31 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q31_t normalize); + + + /** + * @brief Processing function for the Q31 DCT4/IDCT4. + * @param[in] S points to an instance of the Q31 DCT4 structure. + * @param[in] pState points to state buffer. + * @param[in,out] pInlineBuffer points to the in-place input and output buffer. + */ + void arm_dct4_q31( + const arm_dct4_instance_q31 * S, + q31_t * pState, + q31_t * pInlineBuffer); + + + /** + * @brief Instance structure for the Q15 DCT4/IDCT4 function. + */ + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + q15_t normalize; /**< normalizing factor. */ + q15_t *pTwiddle; /**< points to the twiddle factor table. */ + q15_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_q15; + + + /** + * @brief Initialization function for the Q15 DCT4/IDCT4. + * @param[in,out] S points to an instance of Q15 DCT4/IDCT4 structure. + * @param[in] S_RFFT points to an instance of Q15 RFFT/RIFFT structure. + * @param[in] S_CFFT points to an instance of Q15 CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + */ + arm_status arm_dct4_init_q15( + arm_dct4_instance_q15 * S, + arm_rfft_instance_q15 * S_RFFT, + arm_cfft_radix4_instance_q15 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q15_t normalize); + + + /** + * @brief Processing function for the Q15 DCT4/IDCT4. + * @param[in] S points to an instance of the Q15 DCT4 structure. + * @param[in] pState points to state buffer. + * @param[in,out] pInlineBuffer points to the in-place input and output buffer. + */ + void arm_dct4_q15( + const arm_dct4_instance_q15 * S, + q15_t * pState, + q15_t * pInlineBuffer); + + + /** + * @brief Floating-point vector addition. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_add_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q7 vector addition. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_add_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q15 vector addition. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_add_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q31 vector addition. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_add_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Floating-point vector subtraction. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_sub_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q7 vector subtraction. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_sub_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q15 vector subtraction. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_sub_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q31 vector subtraction. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in each vector + */ + void arm_sub_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Multiplies a floating-point vector by a scalar. + * @param[in] pSrc points to the input vector + * @param[in] scale scale factor to be applied + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_scale_f32( + float32_t * pSrc, + float32_t scale, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Multiplies a Q7 vector by a scalar. + * @param[in] pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_scale_q7( + q7_t * pSrc, + q7_t scaleFract, + int8_t shift, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Multiplies a Q15 vector by a scalar. + * @param[in] pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_scale_q15( + q15_t * pSrc, + q15_t scaleFract, + int8_t shift, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Multiplies a Q31 vector by a scalar. + * @param[in] pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_scale_q31( + q31_t * pSrc, + q31_t scaleFract, + int8_t shift, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q7 vector absolute value. + * @param[in] pSrc points to the input buffer + * @param[out] pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + */ + void arm_abs_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Floating-point vector absolute value. + * @param[in] pSrc points to the input buffer + * @param[out] pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + */ + void arm_abs_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q15 vector absolute value. + * @param[in] pSrc points to the input buffer + * @param[out] pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + */ + void arm_abs_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Q31 vector absolute value. + * @param[in] pSrc points to the input buffer + * @param[out] pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + */ + void arm_abs_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Dot product of floating-point vectors. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] result output result returned here + */ + void arm_dot_prod_f32( + float32_t * pSrcA, + float32_t * pSrcB, + uint32_t blockSize, + float32_t * result); + + + /** + * @brief Dot product of Q7 vectors. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] result output result returned here + */ + void arm_dot_prod_q7( + q7_t * pSrcA, + q7_t * pSrcB, + uint32_t blockSize, + q31_t * result); + + + /** + * @brief Dot product of Q15 vectors. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] result output result returned here + */ + void arm_dot_prod_q15( + q15_t * pSrcA, + q15_t * pSrcB, + uint32_t blockSize, + q63_t * result); + + + /** + * @brief Dot product of Q31 vectors. + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] result output result returned here + */ + void arm_dot_prod_q31( + q31_t * pSrcA, + q31_t * pSrcB, + uint32_t blockSize, + q63_t * result); + + + /** + * @brief Shifts the elements of a Q7 vector a specified number of bits. + * @param[in] pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_shift_q7( + q7_t * pSrc, + int8_t shiftBits, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Shifts the elements of a Q15 vector a specified number of bits. + * @param[in] pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_shift_q15( + q15_t * pSrc, + int8_t shiftBits, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Shifts the elements of a Q31 vector a specified number of bits. + * @param[in] pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_shift_q31( + q31_t * pSrc, + int8_t shiftBits, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Adds a constant offset to a floating-point vector. + * @param[in] pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_offset_f32( + float32_t * pSrc, + float32_t offset, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Adds a constant offset to a Q7 vector. + * @param[in] pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_offset_q7( + q7_t * pSrc, + q7_t offset, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Adds a constant offset to a Q15 vector. + * @param[in] pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_offset_q15( + q15_t * pSrc, + q15_t offset, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Adds a constant offset to a Q31 vector. + * @param[in] pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_offset_q31( + q31_t * pSrc, + q31_t offset, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Negates the elements of a floating-point vector. + * @param[in] pSrc points to the input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_negate_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Negates the elements of a Q7 vector. + * @param[in] pSrc points to the input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_negate_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Negates the elements of a Q15 vector. + * @param[in] pSrc points to the input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_negate_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Negates the elements of a Q31 vector. + * @param[in] pSrc points to the input vector + * @param[out] pDst points to the output vector + * @param[in] blockSize number of samples in the vector + */ + void arm_negate_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Copies the elements of a floating-point vector. + * @param[in] pSrc input pointer + * @param[out] pDst output pointer + * @param[in] blockSize number of samples to process + */ + void arm_copy_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Copies the elements of a Q7 vector. + * @param[in] pSrc input pointer + * @param[out] pDst output pointer + * @param[in] blockSize number of samples to process + */ + void arm_copy_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Copies the elements of a Q15 vector. + * @param[in] pSrc input pointer + * @param[out] pDst output pointer + * @param[in] blockSize number of samples to process + */ + void arm_copy_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Copies the elements of a Q31 vector. + * @param[in] pSrc input pointer + * @param[out] pDst output pointer + * @param[in] blockSize number of samples to process + */ + void arm_copy_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Fills a constant value into a floating-point vector. + * @param[in] value input value to be filled + * @param[out] pDst output pointer + * @param[in] blockSize number of samples to process + */ + void arm_fill_f32( + float32_t value, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Fills a constant value into a Q7 vector. + * @param[in] value input value to be filled + * @param[out] pDst output pointer + * @param[in] blockSize number of samples to process + */ + void arm_fill_q7( + q7_t value, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Fills a constant value into a Q15 vector. + * @param[in] value input value to be filled + * @param[out] pDst output pointer + * @param[in] blockSize number of samples to process + */ + void arm_fill_q15( + q15_t value, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Fills a constant value into a Q31 vector. + * @param[in] value input value to be filled + * @param[out] pDst output pointer + * @param[in] blockSize number of samples to process + */ + void arm_fill_q31( + q31_t value, + q31_t * pDst, + uint32_t blockSize); + + +/** + * @brief Convolution of floating-point sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + */ + void arm_conv_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst); + + + /** + * @brief Convolution of Q15 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. + * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + */ + void arm_conv_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + +/** + * @brief Convolution of Q15 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + */ + void arm_conv_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + + /** + * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. + */ + void arm_conv_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + + /** + * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. + * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + */ + void arm_conv_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + + /** + * @brief Convolution of Q31 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. + */ + void arm_conv_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + + /** + * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. + */ + void arm_conv_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + + /** + * @brief Convolution of Q7 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. + * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + */ + void arm_conv_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + + /** + * @brief Convolution of Q7 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. + */ + void arm_conv_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst); + + + /** + * @brief Partial convolution of floating-point sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + arm_status arm_conv_partial_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q15 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + arm_status arm_conv_partial_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); + + + /** + * @brief Partial convolution of Q15 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + arm_status arm_conv_partial_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + arm_status arm_conv_partial_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + arm_status arm_conv_partial_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); + + + /** + * @brief Partial convolution of Q31 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + arm_status arm_conv_partial_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + arm_status arm_conv_partial_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q7 sequences + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + arm_status arm_conv_partial_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); + + +/** + * @brief Partial convolution of Q7 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + arm_status arm_conv_partial_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Instance structure for the Q15 FIR decimator. + */ + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + } arm_fir_decimate_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR decimator. + */ + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + } arm_fir_decimate_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR decimator. + */ + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + } arm_fir_decimate_instance_f32; + + + /** + * @brief Processing function for the floating-point FIR decimator. + * @param[in] S points to an instance of the floating-point FIR decimator structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_decimate_f32( + const arm_fir_decimate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point FIR decimator. + * @param[in,out] S points to an instance of the floating-point FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + arm_status arm_fir_decimate_init_f32( + arm_fir_decimate_instance_f32 * S, + uint16_t numTaps, + uint8_t M, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 FIR decimator. + * @param[in] S points to an instance of the Q15 FIR decimator structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_decimate_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. + * @param[in] S points to an instance of the Q15 FIR decimator structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_decimate_fast_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 FIR decimator. + * @param[in,out] S points to an instance of the Q15 FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + arm_status arm_fir_decimate_init_q15( + arm_fir_decimate_instance_q15 * S, + uint16_t numTaps, + uint8_t M, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 FIR decimator. + * @param[in] S points to an instance of the Q31 FIR decimator structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_decimate_q31( + const arm_fir_decimate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. + * @param[in] S points to an instance of the Q31 FIR decimator structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_decimate_fast_q31( + arm_fir_decimate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 FIR decimator. + * @param[in,out] S points to an instance of the Q31 FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + arm_status arm_fir_decimate_init_q31( + arm_fir_decimate_instance_q31 * S, + uint16_t numTaps, + uint8_t M, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q15 FIR interpolator. + */ + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + q15_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ + } arm_fir_interpolate_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR interpolator. + */ + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + q31_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ + } arm_fir_interpolate_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR interpolator. + */ + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + float32_t *pState; /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */ + } arm_fir_interpolate_instance_f32; + + + /** + * @brief Processing function for the Q15 FIR interpolator. + * @param[in] S points to an instance of the Q15 FIR interpolator structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_interpolate_q15( + const arm_fir_interpolate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 FIR interpolator. + * @param[in,out] S points to an instance of the Q15 FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] pCoeffs points to the filter coefficient buffer. + * @param[in] pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + arm_status arm_fir_interpolate_init_q15( + arm_fir_interpolate_instance_q15 * S, + uint8_t L, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 FIR interpolator. + * @param[in] S points to an instance of the Q15 FIR interpolator structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_interpolate_q31( + const arm_fir_interpolate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 FIR interpolator. + * @param[in,out] S points to an instance of the Q31 FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] pCoeffs points to the filter coefficient buffer. + * @param[in] pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + arm_status arm_fir_interpolate_init_q31( + arm_fir_interpolate_instance_q31 * S, + uint8_t L, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the floating-point FIR interpolator. + * @param[in] S points to an instance of the floating-point FIR interpolator structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_interpolate_f32( + const arm_fir_interpolate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point FIR interpolator. + * @param[in,out] S points to an instance of the floating-point FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] pCoeffs points to the filter coefficient buffer. + * @param[in] pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + arm_status arm_fir_interpolate_init_f32( + arm_fir_interpolate_instance_f32 * S, + uint8_t L, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + + /** + * @brief Instance structure for the high precision Q31 Biquad cascade filter. + */ + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q63_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ + q31_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */ + } arm_biquad_cas_df1_32x64_ins_q31; + + + /** + * @param[in] S points to an instance of the high precision Q31 Biquad cascade filter structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of samples to process. + */ + void arm_biquad_cas_df1_32x64_q31( + const arm_biquad_cas_df1_32x64_ins_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @param[in,out] S points to an instance of the high precision Q31 Biquad cascade filter structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] postShift shift to be applied to the output. Varies according to the coefficients format + */ + void arm_biquad_cas_df1_32x64_init_q31( + arm_biquad_cas_df1_32x64_ins_q31 * S, + uint8_t numStages, + q31_t * pCoeffs, + q63_t * pState, + uint8_t postShift); + + + /** + * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. + */ + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ + float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_df2T_instance_f32; + + /** + * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. + */ + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ + float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_stereo_df2T_instance_f32; + + /** + * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. + */ + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float64_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ + float64_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_df2T_instance_f64; + + + /** + * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in] S points to an instance of the filter data structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of samples to process. + */ + void arm_biquad_cascade_df2T_f32( + const arm_biquad_cascade_df2T_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. 2 channels + * @param[in] S points to an instance of the filter data structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of samples to process. + */ + void arm_biquad_cascade_stereo_df2T_f32( + const arm_biquad_cascade_stereo_df2T_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in] S points to an instance of the filter data structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of samples to process. + */ + void arm_biquad_cascade_df2T_f64( + const arm_biquad_cascade_df2T_instance_f64 * S, + float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + */ + void arm_biquad_cascade_df2T_init_f32( + arm_biquad_cascade_df2T_instance_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + /** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + */ + void arm_biquad_cascade_stereo_df2T_init_f32( + arm_biquad_cascade_stereo_df2T_instance_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + /** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] pCoeffs points to the filter coefficients. + * @param[in] pState points to the state buffer. + */ + void arm_biquad_cascade_df2T_init_f64( + arm_biquad_cascade_df2T_instance_f64 * S, + uint8_t numStages, + float64_t * pCoeffs, + float64_t * pState); + + + /** + * @brief Instance structure for the Q15 FIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + q15_t *pState; /**< points to the state variable array. The array is of length numStages. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + q31_t *pState; /**< points to the state variable array. The array is of length numStages. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + float32_t *pState; /**< points to the state variable array. The array is of length numStages. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_f32; + + + /** + * @brief Initialization function for the Q15 FIR lattice filter. + * @param[in] S points to an instance of the Q15 FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] pState points to the state buffer. The array is of length numStages. + */ + void arm_fir_lattice_init_q15( + arm_fir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pCoeffs, + q15_t * pState); + + + /** + * @brief Processing function for the Q15 FIR lattice filter. + * @param[in] S points to an instance of the Q15 FIR lattice structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_fir_lattice_q15( + const arm_fir_lattice_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 FIR lattice filter. + * @param[in] S points to an instance of the Q31 FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] pState points to the state buffer. The array is of length numStages. + */ + void arm_fir_lattice_init_q31( + arm_fir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pCoeffs, + q31_t * pState); + + + /** + * @brief Processing function for the Q31 FIR lattice filter. + * @param[in] S points to an instance of the Q31 FIR lattice structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of samples to process. + */ + void arm_fir_lattice_q31( + const arm_fir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + +/** + * @brief Initialization function for the floating-point FIR lattice filter. + * @param[in] S points to an instance of the floating-point FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] pState points to the state buffer. The array is of length numStages. + */ + void arm_fir_lattice_init_f32( + arm_fir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + /** + * @brief Processing function for the floating-point FIR lattice filter. + * @param[in] S points to an instance of the floating-point FIR lattice structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] blockSize number of samples to process. + */ + void arm_fir_lattice_f32( + const arm_fir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q15 IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + q15_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + q15_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_q15; + + /** + * @brief Instance structure for the Q31 IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + q31_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + q31_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_q31; + + /** + * @brief Instance structure for the floating-point IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + float32_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + float32_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_f32; + + + /** + * @brief Processing function for the floating-point IIR lattice filter. + * @param[in] S points to an instance of the floating-point IIR lattice structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_iir_lattice_f32( + const arm_iir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point IIR lattice filter. + * @param[in] S points to an instance of the floating-point IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. + * @param[in] pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. + * @param[in] pState points to the state buffer. The array is of length numStages+blockSize-1. + * @param[in] blockSize number of samples to process. + */ + void arm_iir_lattice_init_f32( + arm_iir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pkCoeffs, + float32_t * pvCoeffs, + float32_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 IIR lattice filter. + * @param[in] S points to an instance of the Q31 IIR lattice structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_iir_lattice_q31( + const arm_iir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 IIR lattice filter. + * @param[in] S points to an instance of the Q31 IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. + * @param[in] pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. + * @param[in] pState points to the state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process. + */ + void arm_iir_lattice_init_q31( + arm_iir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pkCoeffs, + q31_t * pvCoeffs, + q31_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 IIR lattice filter. + * @param[in] S points to an instance of the Q15 IIR lattice structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + */ + void arm_iir_lattice_q15( + const arm_iir_lattice_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + +/** + * @brief Initialization function for the Q15 IIR lattice filter. + * @param[in] S points to an instance of the fixed-point Q15 IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] pkCoeffs points to reflection coefficient buffer. The array is of length numStages. + * @param[in] pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1. + * @param[in] pState points to state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process per call. + */ + void arm_iir_lattice_init_q15( + arm_iir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pkCoeffs, + q15_t * pvCoeffs, + q15_t * pState, + uint32_t blockSize); + + + /** + * @brief Instance structure for the floating-point LMS filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + float32_t mu; /**< step size that controls filter coefficient updates. */ + } arm_lms_instance_f32; + + + /** + * @brief Processing function for floating-point LMS filter. + * @param[in] S points to an instance of the floating-point LMS filter structure. + * @param[in] pSrc points to the block of input data. + * @param[in] pRef points to the block of reference data. + * @param[out] pOut points to the block of output data. + * @param[out] pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + */ + void arm_lms_f32( + const arm_lms_instance_f32 * S, + float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize); + + + /** + * @brief Initialization function for floating-point LMS filter. + * @param[in] S points to an instance of the floating-point LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] pCoeffs points to the coefficient buffer. + * @param[in] pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + */ + void arm_lms_init_f32( + arm_lms_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q15 LMS filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q15_t mu; /**< step size that controls filter coefficient updates. */ + uint32_t postShift; /**< bit shift applied to coefficients. */ + } arm_lms_instance_q15; + + + /** + * @brief Initialization function for the Q15 LMS filter. + * @param[in] S points to an instance of the Q15 LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] pCoeffs points to the coefficient buffer. + * @param[in] pState points to the state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + */ + void arm_lms_init_q15( + arm_lms_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint32_t postShift); + + + /** + * @brief Processing function for Q15 LMS filter. + * @param[in] S points to an instance of the Q15 LMS filter structure. + * @param[in] pSrc points to the block of input data. + * @param[in] pRef points to the block of reference data. + * @param[out] pOut points to the block of output data. + * @param[out] pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + */ + void arm_lms_q15( + const arm_lms_instance_q15 * S, + q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q31 LMS filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q31_t mu; /**< step size that controls filter coefficient updates. */ + uint32_t postShift; /**< bit shift applied to coefficients. */ + } arm_lms_instance_q31; + + + /** + * @brief Processing function for Q31 LMS filter. + * @param[in] S points to an instance of the Q15 LMS filter structure. + * @param[in] pSrc points to the block of input data. + * @param[in] pRef points to the block of reference data. + * @param[out] pOut points to the block of output data. + * @param[out] pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + */ + void arm_lms_q31( + const arm_lms_instance_q31 * S, + q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize); + + + /** + * @brief Initialization function for Q31 LMS filter. + * @param[in] S points to an instance of the Q31 LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] pCoeffs points to coefficient buffer. + * @param[in] pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + */ + void arm_lms_init_q31( + arm_lms_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint32_t postShift); + + + /** + * @brief Instance structure for the floating-point normalized LMS filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + float32_t mu; /**< step size that control filter coefficient updates. */ + float32_t energy; /**< saves previous frame energy. */ + float32_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_f32; + + + /** + * @brief Processing function for floating-point normalized LMS filter. + * @param[in] S points to an instance of the floating-point normalized LMS filter structure. + * @param[in] pSrc points to the block of input data. + * @param[in] pRef points to the block of reference data. + * @param[out] pOut points to the block of output data. + * @param[out] pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + */ + void arm_lms_norm_f32( + arm_lms_norm_instance_f32 * S, + float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize); + + + /** + * @brief Initialization function for floating-point normalized LMS filter. + * @param[in] S points to an instance of the floating-point LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] pCoeffs points to coefficient buffer. + * @param[in] pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + */ + void arm_lms_norm_init_f32( + arm_lms_norm_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q31 normalized LMS filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q31_t mu; /**< step size that controls filter coefficient updates. */ + uint8_t postShift; /**< bit shift applied to coefficients. */ + q31_t *recipTable; /**< points to the reciprocal initial value table. */ + q31_t energy; /**< saves previous frame energy. */ + q31_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_q31; + + + /** + * @brief Processing function for Q31 normalized LMS filter. + * @param[in] S points to an instance of the Q31 normalized LMS filter structure. + * @param[in] pSrc points to the block of input data. + * @param[in] pRef points to the block of reference data. + * @param[out] pOut points to the block of output data. + * @param[out] pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + */ + void arm_lms_norm_q31( + arm_lms_norm_instance_q31 * S, + q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize); + + + /** + * @brief Initialization function for Q31 normalized LMS filter. + * @param[in] S points to an instance of the Q31 normalized LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] pCoeffs points to coefficient buffer. + * @param[in] pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + */ + void arm_lms_norm_init_q31( + arm_lms_norm_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint8_t postShift); + + + /** + * @brief Instance structure for the Q15 normalized LMS filter. + */ + typedef struct + { + uint16_t numTaps; /**< Number of coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q15_t mu; /**< step size that controls filter coefficient updates. */ + uint8_t postShift; /**< bit shift applied to coefficients. */ + q15_t *recipTable; /**< Points to the reciprocal initial value table. */ + q15_t energy; /**< saves previous frame energy. */ + q15_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_q15; + + + /** + * @brief Processing function for Q15 normalized LMS filter. + * @param[in] S points to an instance of the Q15 normalized LMS filter structure. + * @param[in] pSrc points to the block of input data. + * @param[in] pRef points to the block of reference data. + * @param[out] pOut points to the block of output data. + * @param[out] pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + */ + void arm_lms_norm_q15( + arm_lms_norm_instance_q15 * S, + q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize); + + + /** + * @brief Initialization function for Q15 normalized LMS filter. + * @param[in] S points to an instance of the Q15 normalized LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] pCoeffs points to coefficient buffer. + * @param[in] pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + */ + void arm_lms_norm_init_q15( + arm_lms_norm_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint8_t postShift); + + + /** + * @brief Correlation of floating-point sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + */ + void arm_correlate_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst); + + + /** + * @brief Correlation of Q15 sequences + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + */ + void arm_correlate_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch); + + + /** + * @brief Correlation of Q15 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + */ + + void arm_correlate_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + + /** + * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + */ + + void arm_correlate_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + + /** + * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + */ + void arm_correlate_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch); + + + /** + * @brief Correlation of Q31 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + */ + void arm_correlate_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + + /** + * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + */ + void arm_correlate_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + + /** + * @brief Correlation of Q7 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + */ + void arm_correlate_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + + /** + * @brief Correlation of Q7 sequences. + * @param[in] pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + */ + void arm_correlate_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst); + + + /** + * @brief Instance structure for the floating-point sparse FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + float32_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_f32; + + /** + * @brief Instance structure for the Q31 sparse FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q31_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q31; + + /** + * @brief Instance structure for the Q15 sparse FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q15_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q15; + + /** + * @brief Instance structure for the Q7 sparse FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q7_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q7; + + + /** + * @brief Processing function for the floating-point sparse FIR filter. + * @param[in] S points to an instance of the floating-point sparse FIR structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] pScratchIn points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_sparse_f32( + arm_fir_sparse_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + float32_t * pScratchIn, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point sparse FIR filter. + * @param[in,out] S points to an instance of the floating-point sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] pCoeffs points to the array of filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + */ + void arm_fir_sparse_init_f32( + arm_fir_sparse_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 sparse FIR filter. + * @param[in] S points to an instance of the Q31 sparse FIR structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] pScratchIn points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_sparse_q31( + arm_fir_sparse_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + q31_t * pScratchIn, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 sparse FIR filter. + * @param[in,out] S points to an instance of the Q31 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] pCoeffs points to the array of filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + */ + void arm_fir_sparse_init_q31( + arm_fir_sparse_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 sparse FIR filter. + * @param[in] S points to an instance of the Q15 sparse FIR structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] pScratchIn points to a temporary buffer of size blockSize. + * @param[in] pScratchOut points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_sparse_q15( + arm_fir_sparse_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + q15_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 sparse FIR filter. + * @param[in,out] S points to an instance of the Q15 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] pCoeffs points to the array of filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + */ + void arm_fir_sparse_init_q15( + arm_fir_sparse_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q7 sparse FIR filter. + * @param[in] S points to an instance of the Q7 sparse FIR structure. + * @param[in] pSrc points to the block of input data. + * @param[out] pDst points to the block of output data + * @param[in] pScratchIn points to a temporary buffer of size blockSize. + * @param[in] pScratchOut points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + */ + void arm_fir_sparse_q7( + arm_fir_sparse_instance_q7 * S, + q7_t * pSrc, + q7_t * pDst, + q7_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q7 sparse FIR filter. + * @param[in,out] S points to an instance of the Q7 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] pCoeffs points to the array of filter coefficients. + * @param[in] pState points to the state buffer. + * @param[in] pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + */ + void arm_fir_sparse_init_q7( + arm_fir_sparse_instance_q7 * S, + uint16_t numTaps, + q7_t * pCoeffs, + q7_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + + /** + * @brief Floating-point sin_cos function. + * @param[in] theta input value in degrees + * @param[out] pSinVal points to the processed sine output. + * @param[out] pCosVal points to the processed cos output. + */ + void arm_sin_cos_f32( + float32_t theta, + float32_t * pSinVal, + float32_t * pCosVal); + + + /** + * @brief Q31 sin_cos function. + * @param[in] theta scaled input value in degrees + * @param[out] pSinVal points to the processed sine output. + * @param[out] pCosVal points to the processed cosine output. + */ + void arm_sin_cos_q31( + q31_t theta, + q31_t * pSinVal, + q31_t * pCosVal); + + + /** + * @brief Floating-point complex conjugate. + * @param[in] pSrc points to the input vector + * @param[out] pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + */ + void arm_cmplx_conj_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex conjugate. + * @param[in] pSrc points to the input vector + * @param[out] pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + */ + void arm_cmplx_conj_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + + /** + * @brief Q15 complex conjugate. + * @param[in] pSrc points to the input vector + * @param[out] pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + */ + void arm_cmplx_conj_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + + /** + * @brief Floating-point complex magnitude squared + * @param[in] pSrc points to the complex input vector + * @param[out] pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + */ + void arm_cmplx_mag_squared_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + + /** + * @brief Q31 complex magnitude squared + * @param[in] pSrc points to the complex input vector + * @param[out] pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + */ + void arm_cmplx_mag_squared_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + + /** + * @brief Q15 complex magnitude squared + * @param[in] pSrc points to the complex input vector + * @param[out] pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + */ + void arm_cmplx_mag_squared_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + + /** + * @ingroup groupController + */ + + /** + * @defgroup PID PID Motor Control + * + * A Proportional Integral Derivative (PID) controller is a generic feedback control + * loop mechanism widely used in industrial control systems. + * A PID controller is the most commonly used type of feedback controller. + * + * This set of functions implements (PID) controllers + * for Q15, Q31, and floating-point data types. The functions operate on a single sample + * of data and each call to the function returns a single processed value. + * S points to an instance of the PID control data structure. in + * is the input sample value. The functions return the output value. + * + * \par Algorithm: + *
+   *    y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
+   *    A0 = Kp + Ki + Kd
+   *    A1 = (-Kp ) - (2 * Kd )
+   *    A2 = Kd  
+ * + * \par + * where \c Kp is proportional constant, \c Ki is Integral constant and \c Kd is Derivative constant + * + * \par + * \image html PID.gif "Proportional Integral Derivative Controller" + * + * \par + * The PID controller calculates an "error" value as the difference between + * the measured output and the reference input. + * The controller attempts to minimize the error by adjusting the process control inputs. + * The proportional value determines the reaction to the current error, + * the integral value determines the reaction based on the sum of recent errors, + * and the derivative value determines the reaction based on the rate at which the error has been changing. + * + * \par Instance Structure + * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure. + * A separate instance structure must be defined for each PID Controller. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Reset Functions + * There is also an associated reset function for each data type which clears the state array. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains. + * - Zeros out the values in the state buffer. + * + * \par + * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function. + * + * \par Fixed-Point Behavior + * Care must be taken when using the fixed-point versions of the PID Controller functions. + * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup PID + * @{ + */ + + /** + * @brief Process function for the floating-point PID Control. + * @param[in,out] S is an instance of the floating-point PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + */ + static __INLINE float32_t arm_pid_f32( + arm_pid_instance_f32 * S, + float32_t in) + { + float32_t out; + + /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2] */ + out = (S->A0 * in) + + (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]); + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + + } + + /** + * @brief Process function for the Q31 PID Control. + * @param[in,out] S points to an instance of the Q31 PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clip. + * In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions. + * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. + */ + static __INLINE q31_t arm_pid_q31( + arm_pid_instance_q31 * S, + q31_t in) + { + q63_t acc; + q31_t out; + + /* acc = A0 * x[n] */ + acc = (q63_t) S->A0 * in; + + /* acc += A1 * x[n-1] */ + acc += (q63_t) S->A1 * S->state[0]; + + /* acc += A2 * x[n-2] */ + acc += (q63_t) S->A2 * S->state[1]; + + /* convert output to 1.31 format to add y[n-1] */ + out = (q31_t) (acc >> 31u); + + /* out += y[n-1] */ + out += S->state[2]; + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + } + + + /** + * @brief Process function for the Q15 PID Control. + * @param[in,out] S points to an instance of the Q15 PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both Gains and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + * Lastly, the accumulator is saturated to yield a result in 1.15 format. + */ + static __INLINE q15_t arm_pid_q15( + arm_pid_instance_q15 * S, + q15_t in) + { + q63_t acc; + q15_t out; + +#ifndef ARM_MATH_CM0_FAMILY + __SIMD32_TYPE *vstate; + + /* Implementation of PID controller */ + + /* acc = A0 * x[n] */ + acc = (q31_t) __SMUAD((uint32_t)S->A0, (uint32_t)in); + + /* acc += A1 * x[n-1] + A2 * x[n-2] */ + vstate = __SIMD32_CONST(S->state); + acc = (q63_t)__SMLALD((uint32_t)S->A1, (uint32_t)*vstate, (uint64_t)acc); +#else + /* acc = A0 * x[n] */ + acc = ((q31_t) S->A0) * in; + + /* acc += A1 * x[n-1] + A2 * x[n-2] */ + acc += (q31_t) S->A1 * S->state[0]; + acc += (q31_t) S->A2 * S->state[1]; +#endif + + /* acc += y[n-1] */ + acc += (q31_t) S->state[2] << 15; + + /* saturate the output */ + out = (q15_t) (__SSAT((acc >> 15), 16)); + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + } + + /** + * @} end of PID group + */ + + + /** + * @brief Floating-point matrix inverse. + * @param[in] src points to the instance of the input floating-point matrix structure. + * @param[out] dst points to the instance of the output floating-point matrix structure. + * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. + * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. + */ + arm_status arm_mat_inverse_f32( + const arm_matrix_instance_f32 * src, + arm_matrix_instance_f32 * dst); + + + /** + * @brief Floating-point matrix inverse. + * @param[in] src points to the instance of the input floating-point matrix structure. + * @param[out] dst points to the instance of the output floating-point matrix structure. + * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. + * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. + */ + arm_status arm_mat_inverse_f64( + const arm_matrix_instance_f64 * src, + arm_matrix_instance_f64 * dst); + + + + /** + * @ingroup groupController + */ + + /** + * @defgroup clarke Vector Clarke Transform + * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector. + * Generally the Clarke transform uses three-phase currents Ia, Ib and Ic to calculate currents + * in the two-phase orthogonal stator axis Ialpha and Ibeta. + * When Ialpha is superposed with Ia as shown in the figure below + * \image html clarke.gif Stator current space vector and its components in (a,b). + * and Ia + Ib + Ic = 0, in this condition Ialpha and Ibeta + * can be calculated using only Ia and Ib. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html clarkeFormula.gif + * where Ia and Ib are the instantaneous stator phases and + * pIalpha and pIbeta are the two coordinates of time invariant vector. + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Clarke transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup clarke + * @{ + */ + + /** + * + * @brief Floating-point Clarke transform + * @param[in] Ia input three-phase coordinate a + * @param[in] Ib input three-phase coordinate b + * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] pIbeta points to output two-phase orthogonal vector axis beta + */ + static __INLINE void arm_clarke_f32( + float32_t Ia, + float32_t Ib, + float32_t * pIalpha, + float32_t * pIbeta) + { + /* Calculate pIalpha using the equation, pIalpha = Ia */ + *pIalpha = Ia; + + /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */ + *pIbeta = ((float32_t) 0.57735026919 * Ia + (float32_t) 1.15470053838 * Ib); + } + + + /** + * @brief Clarke transform for Q31 version + * @param[in] Ia input three-phase coordinate a + * @param[in] Ib input three-phase coordinate b + * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] pIbeta points to output two-phase orthogonal vector axis beta + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition, hence there is no risk of overflow. + */ + static __INLINE void arm_clarke_q31( + q31_t Ia, + q31_t Ib, + q31_t * pIalpha, + q31_t * pIbeta) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + + /* Calculating pIalpha from Ia by equation pIalpha = Ia */ + *pIalpha = Ia; + + /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */ + product1 = (q31_t) (((q63_t) Ia * 0x24F34E8B) >> 30); + + /* Intermediate product is calculated by (2/sqrt(3) * Ib) */ + product2 = (q31_t) (((q63_t) Ib * 0x49E69D16) >> 30); + + /* pIbeta is calculated by adding the intermediate products */ + *pIbeta = __QADD(product1, product2); + } + + /** + * @} end of clarke group + */ + + /** + * @brief Converts the elements of the Q7 vector to Q31 vector. + * @param[in] pSrc input pointer + * @param[out] pDst output pointer + * @param[in] blockSize number of samples to process + */ + void arm_q7_to_q31( + q7_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + + /** + * @ingroup groupController + */ + + /** + * @defgroup inv_clarke Vector Inverse Clarke Transform + * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html clarkeInvFormula.gif + * where pIa and pIb are the instantaneous stator phases and + * Ialpha and Ibeta are the two coordinates of time invariant vector. + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Clarke transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup inv_clarke + * @{ + */ + + /** + * @brief Floating-point Inverse Clarke transform + * @param[in] Ialpha input two-phase orthogonal vector axis alpha + * @param[in] Ibeta input two-phase orthogonal vector axis beta + * @param[out] pIa points to output three-phase coordinate a + * @param[out] pIb points to output three-phase coordinate b + */ + static __INLINE void arm_inv_clarke_f32( + float32_t Ialpha, + float32_t Ibeta, + float32_t * pIa, + float32_t * pIb) + { + /* Calculating pIa from Ialpha by equation pIa = Ialpha */ + *pIa = Ialpha; + + /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */ + *pIb = -0.5f * Ialpha + 0.8660254039f * Ibeta; + } + + + /** + * @brief Inverse Clarke transform for Q31 version + * @param[in] Ialpha input two-phase orthogonal vector axis alpha + * @param[in] Ibeta input two-phase orthogonal vector axis beta + * @param[out] pIa points to output three-phase coordinate a + * @param[out] pIb points to output three-phase coordinate b + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the subtraction, hence there is no risk of overflow. + */ + static __INLINE void arm_inv_clarke_q31( + q31_t Ialpha, + q31_t Ibeta, + q31_t * pIa, + q31_t * pIb) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + + /* Calculating pIa from Ialpha by equation pIa = Ialpha */ + *pIa = Ialpha; + + /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */ + product1 = (q31_t) (((q63_t) (Ialpha) * (0x40000000)) >> 31); + + /* Intermediate product is calculated by (1/sqrt(3) * pIb) */ + product2 = (q31_t) (((q63_t) (Ibeta) * (0x6ED9EBA1)) >> 31); + + /* pIb is calculated by subtracting the products */ + *pIb = __QSUB(product2, product1); + } + + /** + * @} end of inv_clarke group + */ + + /** + * @brief Converts the elements of the Q7 vector to Q15 vector. + * @param[in] pSrc input pointer + * @param[out] pDst output pointer + * @param[in] blockSize number of samples to process + */ + void arm_q7_to_q15( + q7_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + + /** + * @ingroup groupController + */ + + /** + * @defgroup park Vector Park Transform + * + * Forward Park transform converts the input two-coordinate vector to flux and torque components. + * The Park transform can be used to realize the transformation of the Ialpha and the Ibeta currents + * from the stationary to the moving reference frame and control the spatial relationship between + * the stator vector current and rotor flux vector. + * If we consider the d axis aligned with the rotor flux, the diagram below shows the + * current vector and the relationship from the two reference frames: + * \image html park.gif "Stator current space vector and its component in (a,b) and in the d,q rotating reference frame" + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html parkFormula.gif + * where Ialpha and Ibeta are the stator vector components, + * pId and pIq are rotor vector components and cosVal and sinVal are the + * cosine and sine values of theta (rotor flux position). + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Park transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup park + * @{ + */ + + /** + * @brief Floating-point Park transform + * @param[in] Ialpha input two-phase vector coordinate alpha + * @param[in] Ibeta input two-phase vector coordinate beta + * @param[out] pId points to output rotor reference frame d + * @param[out] pIq points to output rotor reference frame q + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * + * The function implements the forward Park transform. + * + */ + static __INLINE void arm_park_f32( + float32_t Ialpha, + float32_t Ibeta, + float32_t * pId, + float32_t * pIq, + float32_t sinVal, + float32_t cosVal) + { + /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */ + *pId = Ialpha * cosVal + Ibeta * sinVal; + + /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */ + *pIq = -Ialpha * sinVal + Ibeta * cosVal; + } + + + /** + * @brief Park transform for Q31 version + * @param[in] Ialpha input two-phase vector coordinate alpha + * @param[in] Ibeta input two-phase vector coordinate beta + * @param[out] pId points to output rotor reference frame d + * @param[out] pIq points to output rotor reference frame q + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition and subtraction, hence there is no risk of overflow. + */ + static __INLINE void arm_park_q31( + q31_t Ialpha, + q31_t Ibeta, + q31_t * pId, + q31_t * pIq, + q31_t sinVal, + q31_t cosVal) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + q31_t product3, product4; /* Temporary variables used to store intermediate results */ + + /* Intermediate product is calculated by (Ialpha * cosVal) */ + product1 = (q31_t) (((q63_t) (Ialpha) * (cosVal)) >> 31); + + /* Intermediate product is calculated by (Ibeta * sinVal) */ + product2 = (q31_t) (((q63_t) (Ibeta) * (sinVal)) >> 31); + + + /* Intermediate product is calculated by (Ialpha * sinVal) */ + product3 = (q31_t) (((q63_t) (Ialpha) * (sinVal)) >> 31); + + /* Intermediate product is calculated by (Ibeta * cosVal) */ + product4 = (q31_t) (((q63_t) (Ibeta) * (cosVal)) >> 31); + + /* Calculate pId by adding the two intermediate products 1 and 2 */ + *pId = __QADD(product1, product2); + + /* Calculate pIq by subtracting the two intermediate products 3 from 4 */ + *pIq = __QSUB(product4, product3); + } + + /** + * @} end of park group + */ + + /** + * @brief Converts the elements of the Q7 vector to floating-point vector. + * @param[in] pSrc is input pointer + * @param[out] pDst is output pointer + * @param[in] blockSize is the number of samples to process + */ + void arm_q7_to_float( + q7_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @ingroup groupController + */ + + /** + * @defgroup inv_park Vector Inverse Park transform + * Inverse Park transform converts the input flux and torque components to two-coordinate vector. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html parkInvFormula.gif + * where pIalpha and pIbeta are the stator vector components, + * Id and Iq are rotor vector components and cosVal and sinVal are the + * cosine and sine values of theta (rotor flux position). + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Park transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup inv_park + * @{ + */ + + /** + * @brief Floating-point Inverse Park transform + * @param[in] Id input coordinate of rotor reference frame d + * @param[in] Iq input coordinate of rotor reference frame q + * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] pIbeta points to output two-phase orthogonal vector axis beta + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + */ + static __INLINE void arm_inv_park_f32( + float32_t Id, + float32_t Iq, + float32_t * pIalpha, + float32_t * pIbeta, + float32_t sinVal, + float32_t cosVal) + { + /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */ + *pIalpha = Id * cosVal - Iq * sinVal; + + /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */ + *pIbeta = Id * sinVal + Iq * cosVal; + } + + + /** + * @brief Inverse Park transform for Q31 version + * @param[in] Id input coordinate of rotor reference frame d + * @param[in] Iq input coordinate of rotor reference frame q + * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] pIbeta points to output two-phase orthogonal vector axis beta + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition, hence there is no risk of overflow. + */ + static __INLINE void arm_inv_park_q31( + q31_t Id, + q31_t Iq, + q31_t * pIalpha, + q31_t * pIbeta, + q31_t sinVal, + q31_t cosVal) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + q31_t product3, product4; /* Temporary variables used to store intermediate results */ + + /* Intermediate product is calculated by (Id * cosVal) */ + product1 = (q31_t) (((q63_t) (Id) * (cosVal)) >> 31); + + /* Intermediate product is calculated by (Iq * sinVal) */ + product2 = (q31_t) (((q63_t) (Iq) * (sinVal)) >> 31); + + + /* Intermediate product is calculated by (Id * sinVal) */ + product3 = (q31_t) (((q63_t) (Id) * (sinVal)) >> 31); + + /* Intermediate product is calculated by (Iq * cosVal) */ + product4 = (q31_t) (((q63_t) (Iq) * (cosVal)) >> 31); + + /* Calculate pIalpha by using the two intermediate products 1 and 2 */ + *pIalpha = __QSUB(product1, product2); + + /* Calculate pIbeta by using the two intermediate products 3 and 4 */ + *pIbeta = __QADD(product4, product3); + } + + /** + * @} end of Inverse park group + */ + + + /** + * @brief Converts the elements of the Q31 vector to floating-point vector. + * @param[in] pSrc is input pointer + * @param[out] pDst is output pointer + * @param[in] blockSize is the number of samples to process + */ + void arm_q31_to_float( + q31_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @ingroup groupInterpolation + */ + + /** + * @defgroup LinearInterpolate Linear Interpolation + * + * Linear interpolation is a method of curve fitting using linear polynomials. + * Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line + * + * \par + * \image html LinearInterp.gif "Linear interpolation" + * + * \par + * A Linear Interpolate function calculates an output value(y), for the input(x) + * using linear interpolation of the input values x0, x1( nearest input values) and the output values y0 and y1(nearest output values) + * + * \par Algorithm: + *
+   *       y = y0 + (x - x0) * ((y1 - y0)/(x1-x0))
+   *       where x0, x1 are nearest values of input x
+   *             y0, y1 are nearest values to output y
+   * 
+ * + * \par + * This set of functions implements Linear interpolation process + * for Q7, Q15, Q31, and floating-point data types. The functions operate on a single + * sample of data and each call to the function returns a single processed value. + * S points to an instance of the Linear Interpolate function data structure. + * x is the input sample value. The functions returns the output value. + * + * \par + * if x is outside of the table boundary, Linear interpolation returns first value of the table + * if x is below input range and returns last value of table if x is above range. + */ + + /** + * @addtogroup LinearInterpolate + * @{ + */ + + /** + * @brief Process function for the floating-point Linear Interpolation Function. + * @param[in,out] S is an instance of the floating-point Linear Interpolation structure + * @param[in] x input sample to process + * @return y processed output sample. + * + */ + static __INLINE float32_t arm_linear_interp_f32( + arm_linear_interp_instance_f32 * S, + float32_t x) + { + float32_t y; + float32_t x0, x1; /* Nearest input values */ + float32_t y0, y1; /* Nearest output values */ + float32_t xSpacing = S->xSpacing; /* spacing between input values */ + int32_t i; /* Index variable */ + float32_t *pYData = S->pYData; /* pointer to output table */ + + /* Calculation of index */ + i = (int32_t) ((x - S->x1) / xSpacing); + + if(i < 0) + { + /* Iniatilize output for below specified range as least output value of table */ + y = pYData[0]; + } + else if((uint32_t)i >= S->nValues) + { + /* Iniatilize output for above specified range as last output value of table */ + y = pYData[S->nValues - 1]; + } + else + { + /* Calculation of nearest input values */ + x0 = S->x1 + i * xSpacing; + x1 = S->x1 + (i + 1) * xSpacing; + + /* Read of nearest output values */ + y0 = pYData[i]; + y1 = pYData[i + 1]; + + /* Calculation of output */ + y = y0 + (x - x0) * ((y1 - y0) / (x1 - x0)); + + } + + /* returns output value */ + return (y); + } + + + /** + * + * @brief Process function for the Q31 Linear Interpolation Function. + * @param[in] pYData pointer to Q31 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + * + */ + static __INLINE q31_t arm_linear_interp_q31( + q31_t * pYData, + q31_t x, + uint32_t nValues) + { + q31_t y; /* output */ + q31_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + int32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + index = ((x & (q31_t)0xFFF00000) >> 20); + + if(index >= (int32_t)(nValues - 1)) + { + return (pYData[nValues - 1]); + } + else if(index < 0) + { + return (pYData[0]); + } + else + { + /* 20 bits for the fractional part */ + /* shift left by 11 to keep fract in 1.31 format */ + fract = (x & 0x000FFFFF) << 11; + + /* Read two nearest output values from the index in 1.31(q31) format */ + y0 = pYData[index]; + y1 = pYData[index + 1]; + + /* Calculation of y0 * (1-fract) and y is in 2.30 format */ + y = ((q31_t) ((q63_t) y0 * (0x7FFFFFFF - fract) >> 32)); + + /* Calculation of y0 * (1-fract) + y1 *fract and y is in 2.30 format */ + y += ((q31_t) (((q63_t) y1 * fract) >> 32)); + + /* Convert y to 1.31 format */ + return (y << 1u); + } + } + + + /** + * + * @brief Process function for the Q15 Linear Interpolation Function. + * @param[in] pYData pointer to Q15 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + * + */ + static __INLINE q15_t arm_linear_interp_q15( + q15_t * pYData, + q31_t x, + uint32_t nValues) + { + q63_t y; /* output */ + q15_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + int32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + index = ((x & (int32_t)0xFFF00000) >> 20); + + if(index >= (int32_t)(nValues - 1)) + { + return (pYData[nValues - 1]); + } + else if(index < 0) + { + return (pYData[0]); + } + else + { + /* 20 bits for the fractional part */ + /* fract is in 12.20 format */ + fract = (x & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y0 = pYData[index]; + y1 = pYData[index + 1]; + + /* Calculation of y0 * (1-fract) and y is in 13.35 format */ + y = ((q63_t) y0 * (0xFFFFF - fract)); + + /* Calculation of (y0 * (1-fract) + y1 * fract) and y is in 13.35 format */ + y += ((q63_t) y1 * (fract)); + + /* convert y to 1.15 format */ + return (q15_t) (y >> 20); + } + } + + + /** + * + * @brief Process function for the Q7 Linear Interpolation Function. + * @param[in] pYData pointer to Q7 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + */ + static __INLINE q7_t arm_linear_interp_q7( + q7_t * pYData, + q31_t x, + uint32_t nValues) + { + q31_t y; /* output */ + q7_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + uint32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + if (x < 0) + { + return (pYData[0]); + } + index = (x >> 20) & 0xfff; + + if(index >= (nValues - 1)) + { + return (pYData[nValues - 1]); + } + else + { + /* 20 bits for the fractional part */ + /* fract is in 12.20 format */ + fract = (x & 0x000FFFFF); + + /* Read two nearest output values from the index and are in 1.7(q7) format */ + y0 = pYData[index]; + y1 = pYData[index + 1]; + + /* Calculation of y0 * (1-fract ) and y is in 13.27(q27) format */ + y = ((y0 * (0xFFFFF - fract))); + + /* Calculation of y1 * fract + y0 * (1-fract) and y is in 13.27(q27) format */ + y += (y1 * fract); + + /* convert y to 1.7(q7) format */ + return (q7_t) (y >> 20); + } + } + + /** + * @} end of LinearInterpolate group + */ + + /** + * @brief Fast approximation to the trigonometric sine function for floating-point data. + * @param[in] x input value in radians. + * @return sin(x). + */ + float32_t arm_sin_f32( + float32_t x); + + + /** + * @brief Fast approximation to the trigonometric sine function for Q31 data. + * @param[in] x Scaled input value in radians. + * @return sin(x). + */ + q31_t arm_sin_q31( + q31_t x); + + + /** + * @brief Fast approximation to the trigonometric sine function for Q15 data. + * @param[in] x Scaled input value in radians. + * @return sin(x). + */ + q15_t arm_sin_q15( + q15_t x); + + + /** + * @brief Fast approximation to the trigonometric cosine function for floating-point data. + * @param[in] x input value in radians. + * @return cos(x). + */ + float32_t arm_cos_f32( + float32_t x); + + + /** + * @brief Fast approximation to the trigonometric cosine function for Q31 data. + * @param[in] x Scaled input value in radians. + * @return cos(x). + */ + q31_t arm_cos_q31( + q31_t x); + + + /** + * @brief Fast approximation to the trigonometric cosine function for Q15 data. + * @param[in] x Scaled input value in radians. + * @return cos(x). + */ + q15_t arm_cos_q15( + q15_t x); + + + /** + * @ingroup groupFastMath + */ + + + /** + * @defgroup SQRT Square Root + * + * Computes the square root of a number. + * There are separate functions for Q15, Q31, and floating-point data types. + * The square root function is computed using the Newton-Raphson algorithm. + * This is an iterative algorithm of the form: + *
+   *      x1 = x0 - f(x0)/f'(x0)
+   * 
+ * where x1 is the current estimate, + * x0 is the previous estimate, and + * f'(x0) is the derivative of f() evaluated at x0. + * For the square root function, the algorithm reduces to: + *
+   *     x0 = in/2                         [initial guess]
+   *     x1 = 1/2 * ( x0 + in / x0)        [each iteration]
+   * 
+ */ + + + /** + * @addtogroup SQRT + * @{ + */ + + /** + * @brief Floating-point square root function. + * @param[in] in input value. + * @param[out] pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + static __INLINE arm_status arm_sqrt_f32( + float32_t in, + float32_t * pOut) + { + if(in >= 0.0f) + { + +#if (__FPU_USED == 1) && defined ( __CC_ARM ) + *pOut = __sqrtf(in); +#elif (__FPU_USED == 1) && (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) + *pOut = __builtin_sqrtf(in); +#elif (__FPU_USED == 1) && defined(__GNUC__) + *pOut = __builtin_sqrtf(in); +#elif (__FPU_USED == 1) && defined ( __ICCARM__ ) && (__VER__ >= 6040000) + __ASM("VSQRT.F32 %0,%1" : "=t"(*pOut) : "t"(in)); +#else + *pOut = sqrtf(in); +#endif + + return (ARM_MATH_SUCCESS); + } + else + { + *pOut = 0.0f; + return (ARM_MATH_ARGUMENT_ERROR); + } + } + + + /** + * @brief Q31 square root function. + * @param[in] in input value. The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF. + * @param[out] pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + arm_status arm_sqrt_q31( + q31_t in, + q31_t * pOut); + + + /** + * @brief Q15 square root function. + * @param[in] in input value. The range of the input value is [0 +1) or 0x0000 to 0x7FFF. + * @param[out] pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + arm_status arm_sqrt_q15( + q15_t in, + q15_t * pOut); + + /** + * @} end of SQRT group + */ + + + /** + * @brief floating-point Circular write function. + */ + static __INLINE void arm_circularWrite_f32( + int32_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const int32_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = (uint16_t)wOffset; + } + + + + /** + * @brief floating-point Circular Read function. + */ + static __INLINE void arm_circularRead_f32( + int32_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + int32_t * dst, + int32_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (int32_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update rOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + + /** + * @brief Q15 Circular write function. + */ + static __INLINE void arm_circularWrite_q15( + q15_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const q15_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = (uint16_t)wOffset; + } + + + /** + * @brief Q15 Circular Read function. + */ + static __INLINE void arm_circularRead_q15( + q15_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + q15_t * dst, + q15_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (q15_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update wOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + + /** + * @brief Q7 Circular write function. + */ + static __INLINE void arm_circularWrite_q7( + q7_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const q7_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = (uint16_t)wOffset; + } + + + /** + * @brief Q7 Circular Read function. + */ + static __INLINE void arm_circularRead_q7( + q7_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + q7_t * dst, + q7_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (q7_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update rOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + + /** + * @brief Sum of the squares of the elements of a Q31 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_power_q31( + q31_t * pSrc, + uint32_t blockSize, + q63_t * pResult); + + + /** + * @brief Sum of the squares of the elements of a floating-point vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_power_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + + /** + * @brief Sum of the squares of the elements of a Q15 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_power_q15( + q15_t * pSrc, + uint32_t blockSize, + q63_t * pResult); + + + /** + * @brief Sum of the squares of the elements of a Q7 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_power_q7( + q7_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + + /** + * @brief Mean value of a Q7 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_mean_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult); + + + /** + * @brief Mean value of a Q15 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_mean_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + + /** + * @brief Mean value of a Q31 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_mean_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + + /** + * @brief Mean value of a floating-point vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_mean_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + + /** + * @brief Variance of the elements of a floating-point vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_var_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + + /** + * @brief Variance of the elements of a Q31 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_var_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + + /** + * @brief Variance of the elements of a Q15 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_var_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + + /** + * @brief Root Mean Square of the elements of a floating-point vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_rms_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + + /** + * @brief Root Mean Square of the elements of a Q31 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_rms_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + + /** + * @brief Root Mean Square of the elements of a Q15 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_rms_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + + /** + * @brief Standard deviation of the elements of a floating-point vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_std_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + + /** + * @brief Standard deviation of the elements of a Q31 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_std_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + + /** + * @brief Standard deviation of the elements of a Q15 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_std_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + + /** + * @brief Floating-point complex magnitude + * @param[in] pSrc points to the complex input vector + * @param[out] pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + */ + void arm_cmplx_mag_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + + /** + * @brief Q31 complex magnitude + * @param[in] pSrc points to the complex input vector + * @param[out] pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + */ + void arm_cmplx_mag_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + + /** + * @brief Q15 complex magnitude + * @param[in] pSrc points to the complex input vector + * @param[out] pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + */ + void arm_cmplx_mag_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + + /** + * @brief Q15 complex dot product + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] realResult real part of the result returned here + * @param[out] imagResult imaginary part of the result returned here + */ + void arm_cmplx_dot_prod_q15( + q15_t * pSrcA, + q15_t * pSrcB, + uint32_t numSamples, + q31_t * realResult, + q31_t * imagResult); + + + /** + * @brief Q31 complex dot product + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] realResult real part of the result returned here + * @param[out] imagResult imaginary part of the result returned here + */ + void arm_cmplx_dot_prod_q31( + q31_t * pSrcA, + q31_t * pSrcB, + uint32_t numSamples, + q63_t * realResult, + q63_t * imagResult); + + + /** + * @brief Floating-point complex dot product + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] realResult real part of the result returned here + * @param[out] imagResult imaginary part of the result returned here + */ + void arm_cmplx_dot_prod_f32( + float32_t * pSrcA, + float32_t * pSrcB, + uint32_t numSamples, + float32_t * realResult, + float32_t * imagResult); + + + /** + * @brief Q15 complex-by-real multiplication + * @param[in] pSrcCmplx points to the complex input vector + * @param[in] pSrcReal points to the real input vector + * @param[out] pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + */ + void arm_cmplx_mult_real_q15( + q15_t * pSrcCmplx, + q15_t * pSrcReal, + q15_t * pCmplxDst, + uint32_t numSamples); + + + /** + * @brief Q31 complex-by-real multiplication + * @param[in] pSrcCmplx points to the complex input vector + * @param[in] pSrcReal points to the real input vector + * @param[out] pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + */ + void arm_cmplx_mult_real_q31( + q31_t * pSrcCmplx, + q31_t * pSrcReal, + q31_t * pCmplxDst, + uint32_t numSamples); + + + /** + * @brief Floating-point complex-by-real multiplication + * @param[in] pSrcCmplx points to the complex input vector + * @param[in] pSrcReal points to the real input vector + * @param[out] pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + */ + void arm_cmplx_mult_real_f32( + float32_t * pSrcCmplx, + float32_t * pSrcReal, + float32_t * pCmplxDst, + uint32_t numSamples); + + + /** + * @brief Minimum value of a Q7 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] result is output pointer + * @param[in] index is the array index of the minimum value in the input buffer. + */ + void arm_min_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * result, + uint32_t * index); + + + /** + * @brief Minimum value of a Q15 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output pointer + * @param[in] pIndex is the array index of the minimum value in the input buffer. + */ + void arm_min_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); + + + /** + * @brief Minimum value of a Q31 vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output pointer + * @param[out] pIndex is the array index of the minimum value in the input buffer. + */ + void arm_min_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); + + + /** + * @brief Minimum value of a floating-point vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output pointer + * @param[out] pIndex is the array index of the minimum value in the input buffer. + */ + void arm_min_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); + + +/** + * @brief Maximum value of a Q7 vector. + * @param[in] pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] pResult maximum value returned here + * @param[out] pIndex index of maximum value returned here + */ + void arm_max_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex); + + +/** + * @brief Maximum value of a Q15 vector. + * @param[in] pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] pResult maximum value returned here + * @param[out] pIndex index of maximum value returned here + */ + void arm_max_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); + + +/** + * @brief Maximum value of a Q31 vector. + * @param[in] pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] pResult maximum value returned here + * @param[out] pIndex index of maximum value returned here + */ + void arm_max_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); + + +/** + * @brief Maximum value of a floating-point vector. + * @param[in] pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] pResult maximum value returned here + * @param[out] pIndex index of maximum value returned here + */ + void arm_max_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); + + + /** + * @brief Q15 complex-by-complex multiplication + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + */ + void arm_cmplx_mult_cmplx_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t numSamples); + + + /** + * @brief Q31 complex-by-complex multiplication + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + */ + void arm_cmplx_mult_cmplx_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t numSamples); + + + /** + * @brief Floating-point complex-by-complex multiplication + * @param[in] pSrcA points to the first input vector + * @param[in] pSrcB points to the second input vector + * @param[out] pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + */ + void arm_cmplx_mult_cmplx_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t numSamples); + + + /** + * @brief Converts the elements of the floating-point vector to Q31 vector. + * @param[in] pSrc points to the floating-point input vector + * @param[out] pDst points to the Q31 output vector + * @param[in] blockSize length of the input vector + */ + void arm_float_to_q31( + float32_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the floating-point vector to Q15 vector. + * @param[in] pSrc points to the floating-point input vector + * @param[out] pDst points to the Q15 output vector + * @param[in] blockSize length of the input vector + */ + void arm_float_to_q15( + float32_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the floating-point vector to Q7 vector. + * @param[in] pSrc points to the floating-point input vector + * @param[out] pDst points to the Q7 output vector + * @param[in] blockSize length of the input vector + */ + void arm_float_to_q7( + float32_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q31 vector to Q15 vector. + * @param[in] pSrc is input pointer + * @param[out] pDst is output pointer + * @param[in] blockSize is the number of samples to process + */ + void arm_q31_to_q15( + q31_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q31 vector to Q7 vector. + * @param[in] pSrc is input pointer + * @param[out] pDst is output pointer + * @param[in] blockSize is the number of samples to process + */ + void arm_q31_to_q7( + q31_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q15 vector to floating-point vector. + * @param[in] pSrc is input pointer + * @param[out] pDst is output pointer + * @param[in] blockSize is the number of samples to process + */ + void arm_q15_to_float( + q15_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q15 vector to Q31 vector. + * @param[in] pSrc is input pointer + * @param[out] pDst is output pointer + * @param[in] blockSize is the number of samples to process + */ + void arm_q15_to_q31( + q15_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q15 vector to Q7 vector. + * @param[in] pSrc is input pointer + * @param[out] pDst is output pointer + * @param[in] blockSize is the number of samples to process + */ + void arm_q15_to_q7( + q15_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @ingroup groupInterpolation + */ + + /** + * @defgroup BilinearInterpolate Bilinear Interpolation + * + * Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid. + * The underlying function f(x, y) is sampled on a regular grid and the interpolation process + * determines values between the grid points. + * Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension. + * Bilinear interpolation is often used in image processing to rescale images. + * The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types. + * + * Algorithm + * \par + * The instance structure used by the bilinear interpolation functions describes a two dimensional data table. + * For floating-point, the instance structure is defined as: + *
+   *   typedef struct
+   *   {
+   *     uint16_t numRows;
+   *     uint16_t numCols;
+   *     float32_t *pData;
+   * } arm_bilinear_interp_instance_f32;
+   * 
+ * + * \par + * where numRows specifies the number of rows in the table; + * numCols specifies the number of columns in the table; + * and pData points to an array of size numRows*numCols values. + * The data table pTable is organized in row order and the supplied data values fall on integer indexes. + * That is, table element (x,y) is located at pTable[x + y*numCols] where x and y are integers. + * + * \par + * Let (x, y) specify the desired interpolation point. Then define: + *
+   *     XF = floor(x)
+   *     YF = floor(y)
+   * 
+ * \par + * The interpolated output point is computed as: + *
+   *  f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))
+   *           + f(XF+1, YF) * (x-XF)*(1-(y-YF))
+   *           + f(XF, YF+1) * (1-(x-XF))*(y-YF)
+   *           + f(XF+1, YF+1) * (x-XF)*(y-YF)
+   * 
+ * Note that the coordinates (x, y) contain integer and fractional components. + * The integer components specify which portion of the table to use while the + * fractional components control the interpolation processor. + * + * \par + * if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output. + */ + + /** + * @addtogroup BilinearInterpolate + * @{ + */ + + + /** + * + * @brief Floating-point bilinear interpolation. + * @param[in,out] S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate. + * @param[in] Y interpolation coordinate. + * @return out interpolated value. + */ + static __INLINE float32_t arm_bilinear_interp_f32( + const arm_bilinear_interp_instance_f32 * S, + float32_t X, + float32_t Y) + { + float32_t out; + float32_t f00, f01, f10, f11; + float32_t *pData = S->pData; + int32_t xIndex, yIndex, index; + float32_t xdiff, ydiff; + float32_t b1, b2, b3, b4; + + xIndex = (int32_t) X; + yIndex = (int32_t) Y; + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(xIndex < 0 || xIndex > (S->numRows - 1) || yIndex < 0 || yIndex > (S->numCols - 1)) + { + return (0); + } + + /* Calculation of index for two nearest points in X-direction */ + index = (xIndex - 1) + (yIndex - 1) * S->numCols; + + + /* Read two nearest points in X-direction */ + f00 = pData[index]; + f01 = pData[index + 1]; + + /* Calculation of index for two nearest points in Y-direction */ + index = (xIndex - 1) + (yIndex) * S->numCols; + + + /* Read two nearest points in Y-direction */ + f10 = pData[index]; + f11 = pData[index + 1]; + + /* Calculation of intermediate values */ + b1 = f00; + b2 = f01 - f00; + b3 = f10 - f00; + b4 = f00 - f01 - f10 + f11; + + /* Calculation of fractional part in X */ + xdiff = X - xIndex; + + /* Calculation of fractional part in Y */ + ydiff = Y - yIndex; + + /* Calculation of bi-linear interpolated output */ + out = b1 + b2 * xdiff + b3 * ydiff + b4 * xdiff * ydiff; + + /* return to application */ + return (out); + } + + + /** + * + * @brief Q31 bilinear interpolation. + * @param[in,out] S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + static __INLINE q31_t arm_bilinear_interp_q31( + arm_bilinear_interp_instance_q31 * S, + q31_t X, + q31_t Y) + { + q31_t out; /* Temporary output */ + q31_t acc = 0; /* output */ + q31_t xfract, yfract; /* X, Y fractional parts */ + q31_t x1, x2, y1, y2; /* Nearest output values */ + int32_t rI, cI; /* Row and column indices */ + q31_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & (q31_t)0xFFF00000) >> 20); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & (q31_t)0xFFF00000) >> 20); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) + { + return (0); + } + + /* 20 bits for the fractional part */ + /* shift left xfract by 11 to keep 1.31 format */ + xfract = (X & 0x000FFFFF) << 11u; + + /* Read two nearest output values from the index */ + x1 = pYData[(rI) + (int32_t)nCols * (cI) ]; + x2 = pYData[(rI) + (int32_t)nCols * (cI) + 1]; + + /* 20 bits for the fractional part */ + /* shift left yfract by 11 to keep 1.31 format */ + yfract = (Y & 0x000FFFFF) << 11u; + + /* Read two nearest output values from the index */ + y1 = pYData[(rI) + (int32_t)nCols * (cI + 1) ]; + y2 = pYData[(rI) + (int32_t)nCols * (cI + 1) + 1]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 3.29(q29) format */ + out = ((q31_t) (((q63_t) x1 * (0x7FFFFFFF - xfract)) >> 32)); + acc = ((q31_t) (((q63_t) out * (0x7FFFFFFF - yfract)) >> 32)); + + /* x2 * (xfract) * (1-yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) x2 * (0x7FFFFFFF - yfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (xfract) >> 32)); + + /* y1 * (1 - xfract) * (yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) y1 * (0x7FFFFFFF - xfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); + + /* y2 * (xfract) * (yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) y2 * (xfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); + + /* Convert acc to 1.31(q31) format */ + return ((q31_t)(acc << 2)); + } + + + /** + * @brief Q15 bilinear interpolation. + * @param[in,out] S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + static __INLINE q15_t arm_bilinear_interp_q15( + arm_bilinear_interp_instance_q15 * S, + q31_t X, + q31_t Y) + { + q63_t acc = 0; /* output */ + q31_t out; /* Temporary output */ + q15_t x1, x2, y1, y2; /* Nearest output values */ + q31_t xfract, yfract; /* X, Y fractional parts */ + int32_t rI, cI; /* Row and column indices */ + q15_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & (q31_t)0xFFF00000) >> 20); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & (q31_t)0xFFF00000) >> 20); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) + { + return (0); + } + + /* 20 bits for the fractional part */ + /* xfract should be in 12.20 format */ + xfract = (X & 0x000FFFFF); + + /* Read two nearest output values from the index */ + x1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) ]; + x2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) + 1]; + + /* 20 bits for the fractional part */ + /* yfract should be in 12.20 format */ + yfract = (Y & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) ]; + y2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) + 1]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 13.51 format */ + + /* x1 is in 1.15(q15), xfract in 12.20 format and out is in 13.35 format */ + /* convert 13.35 to 13.31 by right shifting and out is in 1.31 */ + out = (q31_t) (((q63_t) x1 * (0xFFFFF - xfract)) >> 4u); + acc = ((q63_t) out * (0xFFFFF - yfract)); + + /* x2 * (xfract) * (1-yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) x2 * (0xFFFFF - yfract)) >> 4u); + acc += ((q63_t) out * (xfract)); + + /* y1 * (1 - xfract) * (yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) y1 * (0xFFFFF - xfract)) >> 4u); + acc += ((q63_t) out * (yfract)); + + /* y2 * (xfract) * (yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) y2 * (xfract)) >> 4u); + acc += ((q63_t) out * (yfract)); + + /* acc is in 13.51 format and down shift acc by 36 times */ + /* Convert out to 1.15 format */ + return ((q15_t)(acc >> 36)); + } + + + /** + * @brief Q7 bilinear interpolation. + * @param[in,out] S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + static __INLINE q7_t arm_bilinear_interp_q7( + arm_bilinear_interp_instance_q7 * S, + q31_t X, + q31_t Y) + { + q63_t acc = 0; /* output */ + q31_t out; /* Temporary output */ + q31_t xfract, yfract; /* X, Y fractional parts */ + q7_t x1, x2, y1, y2; /* Nearest output values */ + int32_t rI, cI; /* Row and column indices */ + q7_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & (q31_t)0xFFF00000) >> 20); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & (q31_t)0xFFF00000) >> 20); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) + { + return (0); + } + + /* 20 bits for the fractional part */ + /* xfract should be in 12.20 format */ + xfract = (X & (q31_t)0x000FFFFF); + + /* Read two nearest output values from the index */ + x1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) ]; + x2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) + 1]; + + /* 20 bits for the fractional part */ + /* yfract should be in 12.20 format */ + yfract = (Y & (q31_t)0x000FFFFF); + + /* Read two nearest output values from the index */ + y1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) ]; + y2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) + 1]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 16.47 format */ + out = ((x1 * (0xFFFFF - xfract))); + acc = (((q63_t) out * (0xFFFFF - yfract))); + + /* x2 * (xfract) * (1-yfract) in 2.22 and adding to acc */ + out = ((x2 * (0xFFFFF - yfract))); + acc += (((q63_t) out * (xfract))); + + /* y1 * (1 - xfract) * (yfract) in 2.22 and adding to acc */ + out = ((y1 * (0xFFFFF - xfract))); + acc += (((q63_t) out * (yfract))); + + /* y2 * (xfract) * (yfract) in 2.22 and adding to acc */ + out = ((y2 * (yfract))); + acc += (((q63_t) out * (xfract))); + + /* acc in 16.47 format and down shift by 40 to convert to 1.7 format */ + return ((q7_t)(acc >> 40)); + } + + /** + * @} end of BilinearInterpolate group + */ + + +/* SMMLAR */ +#define multAcc_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((((q63_t) a) << 32) + ((q63_t) x * y) + 0x80000000LL ) >> 32) + +/* SMMLSR */ +#define multSub_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((((q63_t) a) << 32) - ((q63_t) x * y) + 0x80000000LL ) >> 32) + +/* SMMULR */ +#define mult_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((q63_t) x * y + 0x80000000LL ) >> 32) + +/* SMMLA */ +#define multAcc_32x32_keep32(a, x, y) \ + a += (q31_t) (((q63_t) x * y) >> 32) + +/* SMMLS */ +#define multSub_32x32_keep32(a, x, y) \ + a -= (q31_t) (((q63_t) x * y) >> 32) + +/* SMMUL */ +#define mult_32x32_keep32(a, x, y) \ + a = (q31_t) (((q63_t) x * y ) >> 32) + + +#if defined ( __CC_ARM ) + /* Enter low optimization region - place directly above function definition */ + #if defined( ARM_MATH_CM4 ) || defined( ARM_MATH_CM7) + #define LOW_OPTIMIZATION_ENTER \ + _Pragma ("push") \ + _Pragma ("O1") + #else + #define LOW_OPTIMIZATION_ENTER + #endif + + /* Exit low optimization region - place directly after end of function definition */ + #if defined( ARM_MATH_CM4 ) || defined( ARM_MATH_CM7) + #define LOW_OPTIMIZATION_EXIT \ + _Pragma ("pop") + #else + #define LOW_OPTIMIZATION_EXIT + #endif + + /* Enter low optimization region - place directly above function definition */ + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + + /* Exit low optimization region - place directly after end of function definition */ + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #define LOW_OPTIMIZATION_ENTER + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined(__GNUC__) + #define LOW_OPTIMIZATION_ENTER __attribute__(( optimize("-O1") )) + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined(__ICCARM__) + /* Enter low optimization region - place directly above function definition */ + #if defined( ARM_MATH_CM4 ) || defined( ARM_MATH_CM7) + #define LOW_OPTIMIZATION_ENTER \ + _Pragma ("optimize=low") + #else + #define LOW_OPTIMIZATION_ENTER + #endif + + /* Exit low optimization region - place directly after end of function definition */ + #define LOW_OPTIMIZATION_EXIT + + /* Enter low optimization region - place directly above function definition */ + #if defined( ARM_MATH_CM4 ) || defined( ARM_MATH_CM7) + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER \ + _Pragma ("optimize=low") + #else + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #endif + + /* Exit low optimization region - place directly after end of function definition */ + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined(__CSMC__) + #define LOW_OPTIMIZATION_ENTER + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined(__TASKING__) + #define LOW_OPTIMIZATION_ENTER + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#endif + + +#ifdef __cplusplus +} +#endif + + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +#endif /* _ARM_MATH_H */ + +/** + * + * End of file. + */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/cmsis_armcc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/cmsis_armcc.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,734 @@ +/**************************************************************************//** + * @file cmsis_armcc.h + * @brief CMSIS Cortex-M Core Function/Instruction Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#ifndef __CMSIS_ARMCC_H +#define __CMSIS_ARMCC_H + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/* intrinsic void __enable_irq(); */ +/* intrinsic void __disable_irq(); */ + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; +} + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + + +#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) + +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xFFU); +} + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + register uint32_t __regBasePriMax __ASM("basepri_max"); + __regBasePriMax = (basePri & 0xFFU); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1); +} + +#endif /* (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) */ + + +#if (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#endif +} + +#endif /* (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) */ + + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __nop + + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI __wfi + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __wfe + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __sev + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() do {\ + __schedule_barrier();\ + __isb(0xF);\ + __schedule_barrier();\ + } while (0U) + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() do {\ + __schedule_barrier();\ + __dsb(0xF);\ + __schedule_barrier();\ + } while (0U) + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() do {\ + __schedule_barrier();\ + __dmb(0xF);\ + __schedule_barrier();\ + } while (0U) + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in integer value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __rev + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in two unsigned short values. + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) +{ + rev16 r0, r0 + bx lr +} +#endif + +/** + \brief Reverse byte order in signed short value + \details Reverses the byte order in a signed short value with sign extension to integer. + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value) +{ + revsh r0, r0 + bx lr +} +#endif + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +#define __ROR __ror + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __breakpoint(value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) + #define __RBIT __rbit +#else +__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ + return(result); +} +#endif + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __clz + + +#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) +#else + #define __LDREXB(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) +#else + #define __LDREXH(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) +#else + #define __LDREXW(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXB(value, ptr) __strex(value, ptr) +#else + #define __STREXB(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXH(value, ptr) __strex(value, ptr) +#else + #define __STREXH(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXW(value, ptr) __strex(value, ptr) +#else + #define __STREXW(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __clrex + + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) +{ + rrx r0, r0 + bx lr +} +#endif + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr)) + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDRHT(ptr) ((uint16_t) __ldrt(ptr)) + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDRT(ptr) ((uint32_t ) __ldrt(ptr)) + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRBT(value, ptr) __strt(value, ptr) + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRHT(value, ptr) __strt(value, ptr) + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRT(value, ptr) __strt(value, ptr) + +#endif /* (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (__CORTEX_M >= 0x04U) /* only for Cortex-M4 and above */ + +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +#define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \ + ((int64_t)(ARG3) << 32U) ) >> 32U)) + +#endif /* (__CORTEX_M >= 0x04) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCC_H */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/cmsis_armcc_V6.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/cmsis_armcc_V6.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1800 @@ +/**************************************************************************//** + * @file cmsis_armcc_V6.h + * @brief CMSIS Cortex-M Core Function/Instruction Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#ifndef __CMSIS_ARMCC_V6_H +#define __CMSIS_ARMCC_V6_H + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__((always_inline)) __STATIC_INLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__((always_inline)) __STATIC_INLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get IPSR Register (non-secure) + \details Returns the content of the non-secure IPSR Register when in secure state. + \return IPSR Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_IPSR_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get APSR Register (non-secure) + \details Returns the content of the non-secure APSR Register when in secure state. + \return APSR Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_APSR_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get xPSR Register (non-secure) + \details Returns the content of the non-secure xPSR Register when in secure state. + \return xPSR Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_xPSR_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_PSP_NS(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : "sp"); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : "sp"); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_MSP_NS(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : "sp"); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : "sp"); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__attribute__((always_inline)) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo: ARMCC_V6: check if this is ok for cortex >=3 */ + +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__((always_inline)) __STATIC_INLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__((always_inline)) __STATIC_INLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __set_BASEPRI(uint32_t value) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (value) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_BASEPRI_NS(uint32_t value) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (value) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t value) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (value) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Base Priority with condition (non_secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_BASEPRI_MAX_NS(uint32_t value) +{ + __ASM volatile ("MSR basepri_max_ns, %0" : : "r" (value) : "memory"); +} +#endif + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + + +#endif /* ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_8M__ == 1U)) */ + + +#if (__ARM_ARCH_8M__ == 1U) + +/** + \brief Get Process Stack Pointer Limit + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PSPLIM(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo: ARMCC_V6: check predefined macro for mainline */ +/** + \brief Get Process Stack Pointer Limit (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +} + + +#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo: ARMCC_V6: check predefined macro for mainline */ +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_MSPLIM(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + + return(result); +} + + +#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo: ARMCC_V6: check predefined macro for mainline */ +/** + \brief Get Main Stack Pointer Limit (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +} + + +#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo: ARMCC_V6: check predefined macro for mainline */ +/** + \brief Set Main Stack Pointer Limit (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +} +#endif + +#endif /* (__ARM_ARCH_8M__ == 1U) */ + + +#if ((__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo: ARMCC_V6: check if this is ok for cortex >=4 */ + +/** + \brief Get FPSCR + \details eturns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +#define __get_FPSCR __builtin_arm_get_fpscr +#if 0 +__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U) + uint32_t result; + + __ASM volatile (""); /* Empty asm statement works as a scheduling barrier */ + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + __ASM volatile (""); + return(result); +#else + return(0); +#endif +} +#endif + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get FPSCR (non-secure) + \details Returns the current value of the non-secure Floating Point Status/Control register when in secure state. + \return Floating Point Status/Control register value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_FPSCR_NS(void) +{ +#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U) + uint32_t result; + + __ASM volatile (""); /* Empty asm statement works as a scheduling barrier */ + __ASM volatile ("VMRS %0, fpscr_ns" : "=r" (result) ); + __ASM volatile (""); + return(result); +#else + return(0); +#endif +} +#endif + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +#define __set_FPSCR __builtin_arm_set_fpscr +#if 0 +__attribute__((always_inline)) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U) + __ASM volatile (""); /* Empty asm statement works as a scheduling barrier */ + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc"); + __ASM volatile (""); +#endif +} +#endif + +#if (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set FPSCR (non-secure) + \details Assigns the given value to the non-secure Floating Point Status/Control register when in secure state. + \param [in] fpscr Floating Point Status/Control value to set + */ +__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_FPSCR_NS(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U) + __ASM volatile (""); /* Empty asm statement works as a scheduling barrier */ + __ASM volatile ("VMSR fpscr_ns, %0" : : "r" (fpscr) : "vfpcc"); + __ASM volatile (""); +#endif +} +#endif + +#endif /* ((__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) */ + + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __builtin_arm_nop + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI __builtin_arm_wfi + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __builtin_arm_wfe + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __builtin_arm_sev + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() __builtin_arm_isb(0xF); + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __builtin_arm_dsb(0xF); + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __builtin_arm_dmb(0xF); + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in integer value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __builtin_bswap32 + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in two unsigned short values. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV16 __builtin_bswap16 /* ToDo: ARMCC_V6: check if __builtin_bswap16 could be used */ +#if 0 +__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} +#endif + + +/** + \brief Reverse byte order in signed short value + \details Reverses the byte order in a signed short value with sign extension to integer. + \param [in] value Value to reverse + \return Reversed value + */ + /* ToDo: ARMCC_V6: check if __builtin_bswap16 could be used */ +__attribute__((always_inline)) __STATIC_INLINE int32_t __REVSH(int32_t value) +{ + int32_t result; + + __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ + /* ToDo: ARMCC_V6: check if __builtin_arm_rbit is supported */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + +#if ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo: ARMCC_V6: check if this is ok for cortex >=3 */ + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); +#else + int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ +#endif + return(result); +} + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __builtin_clz + + +#if ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo: ARMCC_V6: check if this is ok for cortex >=3 */ + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW (uint32_t)__builtin_arm_strex + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +/*#define __SSAT __builtin_arm_ssat*/ +#define __SSAT(ARG1,ARG2) \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __builtin_arm_usat +#if 0 +#define __USAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) +#endif + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__((always_inline)) __STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__((always_inline)) __STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__((always_inline)) __STATIC_INLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#endif /* ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) */ + + +#if (__ARM_ARCH_8M__ == 1U) + +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__((always_inline)) __STATIC_INLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__((always_inline)) __STATIC_INLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__((always_inline)) __STATIC_INLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDAEXB (uint8_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXH (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* (__ARM_ARCH_8M__ == 1U) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (__ARM_FEATURE_DSP == 1U) /* ToDo: ARMCC_V6: This should be ARCH >= ARMv7-M + SIMD */ + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__((always_inline)) __STATIC_INLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#endif /* (__ARM_FEATURE_DSP == 1U) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCC_V6_H */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/cmsis_gcc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/cmsis_gcc.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1373 @@ +/**************************************************************************//** + * @file cmsis_gcc.h + * @brief CMSIS Cortex-M Core Function/Instruction Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#ifndef __CMSIS_GCC_H +#define __CMSIS_GCC_H + +/* ignore some GCC warnings */ +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + + \return xPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psp\n" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp"); +} + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msp\n" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) : "sp"); +} + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__CORTEX_M >= 0x03U) + +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (value) : "memory"); +} + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t value) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (value) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + +#endif /* (__CORTEX_M >= 0x03U) */ + + +#if (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U) + uint32_t result; + + /* Empty asm statement works as a scheduling barrier */ + __ASM volatile (""); + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + __ASM volatile (""); + return(result); +#else + return(0); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U) + /* Empty asm statement works as a scheduling barrier */ + __ASM volatile (""); + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc"); + __ASM volatile (""); +#endif +} + +#endif /* (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) */ + + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +__attribute__((always_inline)) __STATIC_INLINE void __NOP(void) +{ + __ASM volatile ("nop"); +} + + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +__attribute__((always_inline)) __STATIC_INLINE void __WFI(void) +{ + __ASM volatile ("wfi"); +} + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +__attribute__((always_inline)) __STATIC_INLINE void __WFE(void) +{ + __ASM volatile ("wfe"); +} + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +__attribute__((always_inline)) __STATIC_INLINE void __SEV(void) +{ + __ASM volatile ("sev"); +} + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +__attribute__((always_inline)) __STATIC_INLINE void __ISB(void) +{ + __ASM volatile ("isb 0xF":::"memory"); +} + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__attribute__((always_inline)) __STATIC_INLINE void __DSB(void) +{ + __ASM volatile ("dsb 0xF":::"memory"); +} + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__attribute__((always_inline)) __STATIC_INLINE void __DMB(void) +{ + __ASM volatile ("dmb 0xF":::"memory"); +} + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in integer value. + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV(uint32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) + return __builtin_bswap32(value); +#else + uint32_t result; + + __ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +#endif +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in two unsigned short values. + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief Reverse byte order in signed short value + \details Reverses the byte order in a signed short value with sign extension to integer. + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__((always_inline)) __STATIC_INLINE int32_t __REVSH(int32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + return (short)__builtin_bswap16(value); +#else + int32_t result; + + __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +#endif +} + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + +#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); +#else + int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ +#endif + return(result); +} + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __builtin_clz + + +#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); +} + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +__attribute__((always_inline)) __STATIC_INLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDRT(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__((always_inline)) __STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *addr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*addr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__((always_inline)) __STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *addr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*addr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__((always_inline)) __STATIC_INLINE void __STRT(uint32_t value, volatile uint32_t *addr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*addr) : "r" (value) ); +} + +#endif /* (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (__CORTEX_M >= 0x04U) /* only for Cortex-M4 and above */ + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#endif /* (__CORTEX_M >= 0x04) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +#endif /* __CMSIS_GCC_H */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/core_cm0.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/core_cm0.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,798 @@ +/**************************************************************************//** + * @file core_cm0.h + * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM0_H_GENERIC +#define __CORE_CM0_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M0 + @{ + */ + +/* CMSIS CM0 definitions */ +#define __CM0_CMSIS_VERSION_MAIN (0x04U) /*!< [31:16] CMSIS HAL main version */ +#define __CM0_CMSIS_VERSION_SUB (0x1EU) /*!< [15:0] CMSIS HAL sub version */ +#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16U) | \ + __CM0_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x00U) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */ + #define __STATIC_INLINE static inline + +#else + #error Unknown compiler +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "core_cmInstr.h" /* Core Instruction Access */ +#include "core_cmFunc.h" /* Core Function Access */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0_H_DEPENDANT +#define __CORE_CM0_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0_REV + #define __CM0_REV 0x0000U + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M0 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M0 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + + +/** + \brief Enable External Interrupt + \details Enables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Disable External Interrupt + \details Disables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Pending Interrupt + \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of an interrupt. + \note The priority cannot be set for every core interrupt. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) < 0) + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of an interrupt. + The interrupt number can be positive to specify an external (device specific) interrupt, + or negative to specify an internal (core) interrupt. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) < 0) + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/core_cm0plus.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/core_cm0plus.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,914 @@ +/**************************************************************************//** + * @file core_cm0plus.h + * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM0PLUS_H_GENERIC +#define __CORE_CM0PLUS_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex-M0+ + @{ + */ + +/* CMSIS CM0+ definitions */ +#define __CM0PLUS_CMSIS_VERSION_MAIN (0x04U) /*!< [31:16] CMSIS HAL main version */ +#define __CM0PLUS_CMSIS_VERSION_SUB (0x1EU) /*!< [15:0] CMSIS HAL sub version */ +#define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16U) | \ + __CM0PLUS_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x00U) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */ + #define __STATIC_INLINE static inline + +#else + #error Unknown compiler +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "core_cmInstr.h" /* Core Instruction Access */ +#include "core_cmFunc.h" /* Core Function Access */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0PLUS_H_DEPENDANT +#define __CORE_CM0PLUS_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0PLUS_REV + #define __CM0PLUS_REV 0x0000U + #warning "__CM0PLUS_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex-M0+ */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if (__VTOR_PRESENT == 1U) +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 8U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0+ header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M0+ Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + + +/** + \brief Enable External Interrupt + \details Enables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Disable External Interrupt + \details Disables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Pending Interrupt + \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of an interrupt. + \note The priority cannot be set for every core interrupt. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) < 0) + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of an interrupt. + The interrupt number can be positive to specify an external (device specific) interrupt, + or negative to specify an internal (core) interrupt. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) < 0) + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/core_cm3.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/core_cm3.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1763 @@ +/**************************************************************************//** + * @file core_cm3.h + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M3 + @{ + */ + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (0x04U) /*!< [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (0x1EU) /*!< [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16U) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x03U) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */ + #define __STATIC_INLINE static inline + +#else + #error Unknown compiler +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "core_cmInstr.h" /* Core Instruction Access */ +#include "core_cmFunc.h" /* Core Function Access */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200U + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M3 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#if (__CM3_REV < 0x0201U) /* core r2p1 */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200U)) + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1U]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0U /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0U /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_MajorType_Pos 4U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +#define TPI_DEVTYPE_SubType_Pos 0U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M3 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable External Interrupt + \details Enables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Disable External Interrupt + \details Disables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Pending Interrupt + \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in NVIC and returns the active bit. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of an interrupt. + \note The priority cannot be set for every core interrupt. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) < 0) + { + SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of an interrupt. + The interrupt number can be positive to specify an external (device specific) interrupt, + or negative to specify an internal (core) interrupt. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) < 0) + { + return(((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/core_cm4.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/core_cm4.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1937 @@ +/**************************************************************************//** + * @file core_cm4.h + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM4_H_GENERIC +#define __CORE_CM4_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M4 + @{ + */ + +/* CMSIS CM4 definitions */ +#define __CM4_CMSIS_VERSION_MAIN (0x04U) /*!< [31:16] CMSIS HAL main version */ +#define __CM4_CMSIS_VERSION_SUB (0x1EU) /*!< [15:0] CMSIS HAL sub version */ +#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16U) | \ + __CM4_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x04U) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */ + #define __STATIC_INLINE static inline + +#else + #error Unknown compiler +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "core_cmInstr.h" /* Core Instruction Access */ +#include "core_cmFunc.h" /* Core Function Access */ +#include "core_cmSimd.h" /* Compiler specific SIMD Intrinsics */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM4_H_DEPENDANT +#define __CORE_CM4_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM4_REV + #define __CM4_REV 0x0000U + #warning "__CM4_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M4 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0U /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0U /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_MajorType_Pos 4U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +#define TPI_DEVTYPE_SubType_Pos 0U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if (__FPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M4 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#if (__FPU_PRESENT == 1U) + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable External Interrupt + \details Enables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Disable External Interrupt + \details Disables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Pending Interrupt + \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in NVIC and returns the active bit. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of an interrupt. + \note The priority cannot be set for every core interrupt. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) < 0) + { + SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of an interrupt. + The interrupt number can be positive to specify an external (device specific) interrupt, + or negative to specify an internal (core) interrupt. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) < 0) + { + return(((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/core_cm7.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/core_cm7.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,2512 @@ +/**************************************************************************//** + * @file core_cm7.h + * @brief CMSIS Cortex-M7 Core Peripheral Access Layer Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM7_H_GENERIC +#define __CORE_CM7_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M7 + @{ + */ + +/* CMSIS CM7 definitions */ +#define __CM7_CMSIS_VERSION_MAIN (0x04U) /*!< [31:16] CMSIS HAL main version */ +#define __CM7_CMSIS_VERSION_SUB (0x1EU) /*!< [15:0] CMSIS HAL sub version */ +#define __CM7_CMSIS_VERSION ((__CM7_CMSIS_VERSION_MAIN << 16U) | \ + __CM7_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x07U) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */ + #define __STATIC_INLINE static inline + +#else + #error Unknown compiler +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "core_cmInstr.h" /* Core Instruction Access */ +#include "core_cmFunc.h" /* Core Function Access */ +#include "core_cmSimd.h" /* Compiler specific SIMD Intrinsics */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM7_H_DEPENDANT +#define __CORE_CM7_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM7_REV + #define __CM7_REV 0x0000U + #warning "__CM7_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DTCM_PRESENT + #define __DTCM_PRESENT 0U + #warning "__DTCM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M7 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[1U]; + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 1 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: Branch prediction enable bit Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: Branch prediction enable bit Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: Instruction cache enable bit Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: Instruction cache enable bit Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: Cache enable bit Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: Cache enable bit Mask */ + +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define SCnSCB_ACTLR_DISRAMODE_Pos 11U /*!< ACTLR: DISRAMODE Position */ +#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */ + +#define SCnSCB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED3[981U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0U /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0U /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_MajorType_Pos 4U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +#define TPI_DEVTYPE_SubType_Pos 0U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if (__FPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and FP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and FP Feature Register 2 Definitions */ + +/*@} end of group CMSIS_FPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M4 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#if (__FPU_PRESENT == 1U) + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable External Interrupt + \details Enables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Disable External Interrupt + \details Disables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Pending Interrupt + \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in NVIC and returns the active bit. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of an interrupt. + \note The priority cannot be set for every core interrupt. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) < 0) + { + SCB->SHPR[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of an interrupt. + The interrupt number can be positive to specify an external (device specific) interrupt, + or negative to specify an internal (core) interrupt. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) < 0) + { + return(((uint32_t)SCB->SHPR[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = SCB->MVFR0; + if ((mvfr0 & 0x00000FF0UL) == 0x220UL) + { + return 2UL; /* Double + Single precision FPU */ + } + else if ((mvfr0 & 0x00000FF0UL) == 0x020UL) + { + return 1UL; /* Single precision FPU */ + } + else + { + return 0UL; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## Cache functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_CacheFunctions Cache Functions + \brief Functions that configure Instruction and Data cache. + @{ + */ + +/* Cache Size ID Register Macros */ +#define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos) +#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) + + +/** + \brief Enable I-Cache + \details Turns on I-Cache + */ +__STATIC_INLINE void SCB_EnableICache (void) +{ + #if (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable I-Cache + \details Turns off I-Cache + */ +__STATIC_INLINE void SCB_DisableICache (void) +{ + #if (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate I-Cache + \details Invalidates I-Cache + */ +__STATIC_INLINE void SCB_InvalidateICache (void) +{ + #if (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Enable D-Cache + \details Turns on D-Cache + */ +__STATIC_INLINE void SCB_EnableDCache (void) +{ + #if (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways--); + } while(sets--); + __DSB(); + + SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable D-Cache + \details Turns off D-Cache + */ +__STATIC_INLINE void SCB_DisableDCache (void) +{ + #if (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways--); + } while(sets--); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate D-Cache + \details Invalidates D-Cache + */ +__STATIC_INLINE void SCB_InvalidateDCache (void) +{ + #if (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways--); + } while(sets--); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean D-Cache + \details Cleans D-Cache + */ +__STATIC_INLINE void SCB_CleanDCache (void) +{ + #if (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | + ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways--); + } while(sets--); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean & Invalidate D-Cache + \details Cleans and Invalidates D-Cache + */ +__STATIC_INLINE void SCB_CleanInvalidateDCache (void) +{ + #if (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways--); + } while(sets--); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Invalidate by address + \details Invalidates D-Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_InvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t)addr; + int32_t linesize = 32U; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCIMVAC = op_addr; + op_addr += linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Clean by address + \details Cleans D-Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if (__DCACHE_PRESENT == 1) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t) addr; + int32_t linesize = 32U; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCCMVAC = op_addr; + op_addr += linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Clean and Invalidate by address + \details Cleans and invalidates D_Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t) addr; + int32_t linesize = 32U; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCCIMVAC = op_addr; + op_addr += linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/*@} end of CMSIS_Core_CacheFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/core_cmFunc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/core_cmFunc.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,87 @@ +/**************************************************************************//** + * @file core_cmFunc.h + * @brief CMSIS Cortex-M Core Function Access Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CMFUNC_H +#define __CORE_CMFUNC_H + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ +*/ + +/*------------------ RealView Compiler -----------------*/ +#if defined ( __CC_ARM ) + #include "cmsis_armcc.h" + +/*------------------ ARM Compiler V6 -------------------*/ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #include "cmsis_armcc_V6.h" + +/*------------------ GNU Compiler ----------------------*/ +#elif defined ( __GNUC__ ) + #include "cmsis_gcc.h" + +/*------------------ ICC Compiler ----------------------*/ +#elif defined ( __ICCARM__ ) + #include + +/*------------------ TI CCS Compiler -------------------*/ +#elif defined ( __TMS470__ ) + #include + +/*------------------ TASKING Compiler ------------------*/ +#elif defined ( __TASKING__ ) + /* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + +/*------------------ COSMIC Compiler -------------------*/ +#elif defined ( __CSMC__ ) + #include + +#endif + +/*@} end of CMSIS_Core_RegAccFunctions */ + +#endif /* __CORE_CMFUNC_H */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/core_cmInstr.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/core_cmInstr.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,87 @@ +/**************************************************************************//** + * @file core_cmInstr.h + * @brief CMSIS Cortex-M Core Instruction Access Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CMINSTR_H +#define __CORE_CMINSTR_H + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/*------------------ RealView Compiler -----------------*/ +#if defined ( __CC_ARM ) + #include "cmsis_armcc.h" + +/*------------------ ARM Compiler V6 -------------------*/ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #include "cmsis_armcc_V6.h" + +/*------------------ GNU Compiler ----------------------*/ +#elif defined ( __GNUC__ ) + #include "cmsis_gcc.h" + +/*------------------ ICC Compiler ----------------------*/ +#elif defined ( __ICCARM__ ) + #include + +/*------------------ TI CCS Compiler -------------------*/ +#elif defined ( __TMS470__ ) + #include + +/*------------------ TASKING Compiler ------------------*/ +#elif defined ( __TASKING__ ) + /* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + +/*------------------ COSMIC Compiler -------------------*/ +#elif defined ( __CSMC__ ) + #include + +#endif + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + +#endif /* __CORE_CMINSTR_H */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/core_cmSimd.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/core_cmSimd.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,96 @@ +/**************************************************************************//** + * @file core_cmSimd.h + * @brief CMSIS Cortex-M SIMD Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CMSIMD_H +#define __CORE_CMSIMD_H + +#ifdef __cplusplus + extern "C" { +#endif + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +/*------------------ RealView Compiler -----------------*/ +#if defined ( __CC_ARM ) + #include "cmsis_armcc.h" + +/*------------------ ARM Compiler V6 -------------------*/ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #include "cmsis_armcc_V6.h" + +/*------------------ GNU Compiler ----------------------*/ +#elif defined ( __GNUC__ ) + #include "cmsis_gcc.h" + +/*------------------ ICC Compiler ----------------------*/ +#elif defined ( __ICCARM__ ) + #include + +/*------------------ TI CCS Compiler -------------------*/ +#elif defined ( __TMS470__ ) + #include + +/*------------------ TASKING Compiler ------------------*/ +#elif defined ( __TASKING__ ) + /* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + +/*------------------ COSMIC Compiler -------------------*/ +#elif defined ( __CSMC__ ) + #include + +#endif + +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CMSIMD_H */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/core_sc000.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/core_sc000.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,926 @@ +/**************************************************************************//** + * @file core_sc000.h + * @brief CMSIS SC000 Core Peripheral Access Layer Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_SC000_H_GENERIC +#define __CORE_SC000_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup SC000 + @{ + */ + +/* CMSIS SC000 definitions */ +#define __SC000_CMSIS_VERSION_MAIN (0x04U) /*!< [31:16] CMSIS HAL main version */ +#define __SC000_CMSIS_VERSION_SUB (0x1EU) /*!< [15:0] CMSIS HAL sub version */ +#define __SC000_CMSIS_VERSION ((__SC000_CMSIS_VERSION_MAIN << 16U) | \ + __SC000_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_SC (000U) /*!< Cortex secure core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */ + #define __STATIC_INLINE static inline + +#else + #error Unknown compiler +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "core_cmInstr.h" /* Core Instruction Access */ +#include "core_cmFunc.h" /* Core Function Access */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC000_H_DEPENDANT +#define __CORE_SC000_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC000_REV + #define __SC000_REV 0x0000U + #warning "__SC000_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group SC000 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + uint32_t RESERVED1[154U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the SC000 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of SC000 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + + +/** + \brief Enable External Interrupt + \details Enables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Disable External Interrupt + \details Disables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Pending Interrupt + \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of an interrupt. + \note The priority cannot be set for every core interrupt. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) < 0) + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of an interrupt. + The interrupt number can be positive to specify an external (device specific) interrupt, + or negative to specify an internal (core) interrupt. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) < 0) + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/Include/core_sc300.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/Include/core_sc300.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1745 @@ +/**************************************************************************//** + * @file core_sc300.h + * @brief CMSIS SC300 Core Peripheral Access Layer Header File + * @version V4.30 + * @date 20. October 2015 + ******************************************************************************/ +/* Copyright (c) 2009 - 2015 ARM LIMITED + + All rights reserved. + 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. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_SC300_H_GENERIC +#define __CORE_SC300_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup SC3000 + @{ + */ + +/* CMSIS SC300 definitions */ +#define __SC300_CMSIS_VERSION_MAIN (0x04U) /*!< [31:16] CMSIS HAL main version */ +#define __SC300_CMSIS_VERSION_SUB (0x1EU) /*!< [15:0] CMSIS HAL sub version */ +#define __SC300_CMSIS_VERSION ((__SC300_CMSIS_VERSION_MAIN << 16U) | \ + __SC300_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_SC (300U) /*!< Cortex secure core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */ + #define __STATIC_INLINE static inline + +#else + #error Unknown compiler +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "core_cmInstr.h" /* Core Instruction Access */ +#include "core_cmFunc.h" /* Core Function Access */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC300_H_DEPENDANT +#define __CORE_SC300_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC300_REV + #define __SC300_REV 0x0000U + #warning "__SC300_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group SC300 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED1[129U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + uint32_t RESERVED1[1U]; +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0U /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0U /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_MajorType_Pos 4U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +#define TPI_DEVTYPE_SubType_Pos 0U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M3 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable External Interrupt + \details Enables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Disable External Interrupt + \details Disables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Pending Interrupt + \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in NVIC and returns the active bit. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of an interrupt. + \note The priority cannot be set for every core interrupt. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) < 0) + { + SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of an interrupt. + The interrupt number can be positive to specify an external (device specific) interrupt, + or negative to specify an internal (core) interrupt. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) < 0) + { + return(((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/CMSIS/RTOS/Template/cmsis_os.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/CMSIS/RTOS/Template/cmsis_os.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,707 @@ +/* ---------------------------------------------------------------------- + * $Date: 5. February 2013 + * $Revision: V1.02 + * + * Project: CMSIS-RTOS API + * Title: cmsis_os.h template header file + * + * Version 0.02 + * Initial Proposal Phase + * Version 0.03 + * osKernelStart added, optional feature: main started as thread + * osSemaphores have standard behavior + * osTimerCreate does not start the timer, added osTimerStart + * osThreadPass is renamed to osThreadYield + * Version 1.01 + * Support for C++ interface + * - const attribute removed from the osXxxxDef_t typedef's + * - const attribute added to the osXxxxDef macros + * Added: osTimerDelete, osMutexDelete, osSemaphoreDelete + * Added: osKernelInitialize + * Version 1.02 + * Control functions for short timeouts in microsecond resolution: + * Added: osKernelSysTick, osKernelSysTickFrequency, osKernelSysTickMicroSec + * Removed: osSignalGet + *---------------------------------------------------------------------------- + * + * Copyright (c) 2013 ARM LIMITED + * All rights reserved. + * 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. + * - Neither the name of ARM nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + *---------------------------------------------------------------------------*/ + + +#ifndef _CMSIS_OS_H +#define _CMSIS_OS_H + +/// \note MUST REMAIN UNCHANGED: \b osCMSIS identifies the CMSIS-RTOS API version. +#define osCMSIS 0x10002 ///< API version (main [31:16] .sub [15:0]) + +/// \note CAN BE CHANGED: \b osCMSIS_KERNEL identifies the underlying RTOS kernel and version number. +#define osCMSIS_KERNEL 0x10000 ///< RTOS identification and version (main [31:16] .sub [15:0]) + +/// \note MUST REMAIN UNCHANGED: \b osKernelSystemId shall be consistent in every CMSIS-RTOS. +#define osKernelSystemId "KERNEL V1.00" ///< RTOS identification string + +/// \note MUST REMAIN UNCHANGED: \b osFeature_xxx shall be consistent in every CMSIS-RTOS. +#define osFeature_MainThread 1 ///< main thread 1=main can be thread, 0=not available +#define osFeature_Pool 1 ///< Memory Pools: 1=available, 0=not available +#define osFeature_MailQ 1 ///< Mail Queues: 1=available, 0=not available +#define osFeature_MessageQ 1 ///< Message Queues: 1=available, 0=not available +#define osFeature_Signals 8 ///< maximum number of Signal Flags available per thread +#define osFeature_Semaphore 30 ///< maximum count for \ref osSemaphoreCreate function +#define osFeature_Wait 1 ///< osWait function: 1=available, 0=not available +#define osFeature_SysTick 1 ///< osKernelSysTick functions: 1=available, 0=not available + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + +// ==== Enumeration, structures, defines ==== + +/// Priority used for thread control. +/// \note MUST REMAIN UNCHANGED: \b osPriority shall be consistent in every CMSIS-RTOS. +typedef enum { + osPriorityIdle = -3, ///< priority: idle (lowest) + osPriorityLow = -2, ///< priority: low + osPriorityBelowNormal = -1, ///< priority: below normal + osPriorityNormal = 0, ///< priority: normal (default) + osPriorityAboveNormal = +1, ///< priority: above normal + osPriorityHigh = +2, ///< priority: high + osPriorityRealtime = +3, ///< priority: realtime (highest) + osPriorityError = 0x84 ///< system cannot determine priority or thread has illegal priority +} osPriority; + +/// Timeout value. +/// \note MUST REMAIN UNCHANGED: \b osWaitForever shall be consistent in every CMSIS-RTOS. +#define osWaitForever 0xFFFFFFFF ///< wait forever timeout value + +/// Status code values returned by CMSIS-RTOS functions. +/// \note MUST REMAIN UNCHANGED: \b osStatus shall be consistent in every CMSIS-RTOS. +typedef enum { + osOK = 0, ///< function completed; no error or event occurred. + osEventSignal = 0x08, ///< function completed; signal event occurred. + osEventMessage = 0x10, ///< function completed; message event occurred. + osEventMail = 0x20, ///< function completed; mail event occurred. + osEventTimeout = 0x40, ///< function completed; timeout occurred. + osErrorParameter = 0x80, ///< parameter error: a mandatory parameter was missing or specified an incorrect object. + osErrorResource = 0x81, ///< resource not available: a specified resource was not available. + osErrorTimeoutResource = 0xC1, ///< resource not available within given time: a specified resource was not available within the timeout period. + osErrorISR = 0x82, ///< not allowed in ISR context: the function cannot be called from interrupt service routines. + osErrorISRRecursive = 0x83, ///< function called multiple times from ISR with same object. + osErrorPriority = 0x84, ///< system cannot determine priority or thread has illegal priority. + osErrorNoMemory = 0x85, ///< system is out of memory: it was impossible to allocate or reserve memory for the operation. + osErrorValue = 0x86, ///< value of a parameter is out of range. + osErrorOS = 0xFF, ///< unspecified RTOS error: run-time error but no other error message fits. + os_status_reserved = 0x7FFFFFFF ///< prevent from enum down-size compiler optimization. +} osStatus; + + +/// Timer type value for the timer definition. +/// \note MUST REMAIN UNCHANGED: \b os_timer_type shall be consistent in every CMSIS-RTOS. +typedef enum { + osTimerOnce = 0, ///< one-shot timer + osTimerPeriodic = 1 ///< repeating timer +} os_timer_type; + +/// Entry point of a thread. +/// \note MUST REMAIN UNCHANGED: \b os_pthread shall be consistent in every CMSIS-RTOS. +typedef void (*os_pthread) (void const *argument); + +/// Entry point of a timer call back function. +/// \note MUST REMAIN UNCHANGED: \b os_ptimer shall be consistent in every CMSIS-RTOS. +typedef void (*os_ptimer) (void const *argument); + +// >>> the following data type definitions may shall adapted towards a specific RTOS + +/// Thread ID identifies the thread (pointer to a thread control block). +/// \note CAN BE CHANGED: \b os_thread_cb is implementation specific in every CMSIS-RTOS. +typedef struct os_thread_cb *osThreadId; + +/// Timer ID identifies the timer (pointer to a timer control block). +/// \note CAN BE CHANGED: \b os_timer_cb is implementation specific in every CMSIS-RTOS. +typedef struct os_timer_cb *osTimerId; + +/// Mutex ID identifies the mutex (pointer to a mutex control block). +/// \note CAN BE CHANGED: \b os_mutex_cb is implementation specific in every CMSIS-RTOS. +typedef struct os_mutex_cb *osMutexId; + +/// Semaphore ID identifies the semaphore (pointer to a semaphore control block). +/// \note CAN BE CHANGED: \b os_semaphore_cb is implementation specific in every CMSIS-RTOS. +typedef struct os_semaphore_cb *osSemaphoreId; + +/// Pool ID identifies the memory pool (pointer to a memory pool control block). +/// \note CAN BE CHANGED: \b os_pool_cb is implementation specific in every CMSIS-RTOS. +typedef struct os_pool_cb *osPoolId; + +/// Message ID identifies the message queue (pointer to a message queue control block). +/// \note CAN BE CHANGED: \b os_messageQ_cb is implementation specific in every CMSIS-RTOS. +typedef struct os_messageQ_cb *osMessageQId; + +/// Mail ID identifies the mail queue (pointer to a mail queue control block). +/// \note CAN BE CHANGED: \b os_mailQ_cb is implementation specific in every CMSIS-RTOS. +typedef struct os_mailQ_cb *osMailQId; + + +/// Thread Definition structure contains startup information of a thread. +/// \note CAN BE CHANGED: \b os_thread_def is implementation specific in every CMSIS-RTOS. +typedef struct os_thread_def { + os_pthread pthread; ///< start address of thread function + osPriority tpriority; ///< initial thread priority + uint32_t instances; ///< maximum number of instances of that thread function + uint32_t stacksize; ///< stack size requirements in bytes; 0 is default stack size +} osThreadDef_t; + +/// Timer Definition structure contains timer parameters. +/// \note CAN BE CHANGED: \b os_timer_def is implementation specific in every CMSIS-RTOS. +typedef struct os_timer_def { + os_ptimer ptimer; ///< start address of a timer function +} osTimerDef_t; + +/// Mutex Definition structure contains setup information for a mutex. +/// \note CAN BE CHANGED: \b os_mutex_def is implementation specific in every CMSIS-RTOS. +typedef struct os_mutex_def { + uint32_t dummy; ///< dummy value. +} osMutexDef_t; + +/// Semaphore Definition structure contains setup information for a semaphore. +/// \note CAN BE CHANGED: \b os_semaphore_def is implementation specific in every CMSIS-RTOS. +typedef struct os_semaphore_def { + uint32_t dummy; ///< dummy value. +} osSemaphoreDef_t; + +/// Definition structure for memory block allocation. +/// \note CAN BE CHANGED: \b os_pool_def is implementation specific in every CMSIS-RTOS. +typedef struct os_pool_def { + uint32_t pool_sz; ///< number of items (elements) in the pool + uint32_t item_sz; ///< size of an item + void *pool; ///< pointer to memory for pool +} osPoolDef_t; + +/// Definition structure for message queue. +/// \note CAN BE CHANGED: \b os_messageQ_def is implementation specific in every CMSIS-RTOS. +typedef struct os_messageQ_def { + uint32_t queue_sz; ///< number of elements in the queue + uint32_t item_sz; ///< size of an item + void *pool; ///< memory array for messages +} osMessageQDef_t; + +/// Definition structure for mail queue. +/// \note CAN BE CHANGED: \b os_mailQ_def is implementation specific in every CMSIS-RTOS. +typedef struct os_mailQ_def { + uint32_t queue_sz; ///< number of elements in the queue + uint32_t item_sz; ///< size of an item + void *pool; ///< memory array for mail +} osMailQDef_t; + +/// Event structure contains detailed information about an event. +/// \note MUST REMAIN UNCHANGED: \b os_event shall be consistent in every CMSIS-RTOS. +/// However the struct may be extended at the end. +typedef struct { + osStatus status; ///< status code: event or error information + union { + uint32_t v; ///< message as 32-bit value + void *p; ///< message or mail as void pointer + int32_t signals; ///< signal flags + } value; ///< event value + union { + osMailQId mail_id; ///< mail id obtained by \ref osMailCreate + osMessageQId message_id; ///< message id obtained by \ref osMessageCreate + } def; ///< event definition +} osEvent; + + +// ==== Kernel Control Functions ==== + +/// Initialize the RTOS Kernel for creating objects. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osKernelInitialize shall be consistent in every CMSIS-RTOS. +osStatus osKernelInitialize (void); + +/// Start the RTOS Kernel. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osKernelStart shall be consistent in every CMSIS-RTOS. +osStatus osKernelStart (void); + +/// Check if the RTOS kernel is already started. +/// \note MUST REMAIN UNCHANGED: \b osKernelRunning shall be consistent in every CMSIS-RTOS. +/// \return 0 RTOS is not started, 1 RTOS is started. +int32_t osKernelRunning(void); + +#if (defined (osFeature_SysTick) && (osFeature_SysTick != 0)) // System Timer available + +/// Get the RTOS kernel system timer counter +/// \note MUST REMAIN UNCHANGED: \b osKernelSysTick shall be consistent in every CMSIS-RTOS. +/// \return RTOS kernel system timer as 32-bit value +uint32_t osKernelSysTick (void); + +/// The RTOS kernel system timer frequency in Hz +/// \note Reflects the system timer setting and is typically defined in a configuration file. +#define osKernelSysTickFrequency 100000000 + +/// Convert a microseconds value to a RTOS kernel system timer value. +/// \param microsec time value in microseconds. +/// \return time value normalized to the \ref osKernelSysTickFrequency +#define osKernelSysTickMicroSec(microsec) (((uint64_t)microsec * (osKernelSysTickFrequency)) / 1000000) + +#endif // System Timer available + +// ==== Thread Management ==== + +/// Create a Thread Definition with function, priority, and stack requirements. +/// \param name name of the thread function. +/// \param priority initial priority of the thread function. +/// \param instances number of possible thread instances. +/// \param stacksz stack size (in bytes) requirements for the thread function. +/// \note CAN BE CHANGED: The parameters to \b osThreadDef shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#if defined (osObjectsExternal) // object is external +#define osThreadDef(name, priority, instances, stacksz) \ +extern const osThreadDef_t os_thread_def_##name +#else // define the object +#define osThreadDef(name, priority, instances, stacksz) \ +const osThreadDef_t os_thread_def_##name = \ +{ (name), (priority), (instances), (stacksz) } +#endif + +/// Access a Thread definition. +/// \param name name of the thread definition object. +/// \note CAN BE CHANGED: The parameter to \b osThread shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#define osThread(name) \ +&os_thread_def_##name + +/// Create a thread and add it to Active Threads and set it to state READY. +/// \param[in] thread_def thread definition referenced with \ref osThread. +/// \param[in] argument pointer that is passed to the thread function as start argument. +/// \return thread ID for reference by other functions or NULL in case of error. +/// \note MUST REMAIN UNCHANGED: \b osThreadCreate shall be consistent in every CMSIS-RTOS. +osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument); + +/// Return the thread ID of the current running thread. +/// \return thread ID for reference by other functions or NULL in case of error. +/// \note MUST REMAIN UNCHANGED: \b osThreadGetId shall be consistent in every CMSIS-RTOS. +osThreadId osThreadGetId (void); + +/// Terminate execution of a thread and remove it from Active Threads. +/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osThreadTerminate shall be consistent in every CMSIS-RTOS. +osStatus osThreadTerminate (osThreadId thread_id); + +/// Pass control to next thread that is in state \b READY. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osThreadYield shall be consistent in every CMSIS-RTOS. +osStatus osThreadYield (void); + +/// Change priority of an active thread. +/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. +/// \param[in] priority new priority value for the thread function. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osThreadSetPriority shall be consistent in every CMSIS-RTOS. +osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority); + +/// Get current priority of an active thread. +/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. +/// \return current priority value of the thread function. +/// \note MUST REMAIN UNCHANGED: \b osThreadGetPriority shall be consistent in every CMSIS-RTOS. +osPriority osThreadGetPriority (osThreadId thread_id); + + +// ==== Generic Wait Functions ==== + +/// Wait for Timeout (Time Delay). +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue "time delay" value +/// \return status code that indicates the execution status of the function. +osStatus osDelay (uint32_t millisec); + +#if (defined (osFeature_Wait) && (osFeature_Wait != 0)) // Generic Wait available + +/// Wait for Signal, Message, Mail, or Timeout. +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out +/// \return event that contains signal, message, or mail information or error code. +/// \note MUST REMAIN UNCHANGED: \b osWait shall be consistent in every CMSIS-RTOS. +osEvent osWait (uint32_t millisec); + +#endif // Generic Wait available + + +// ==== Timer Management Functions ==== +/// Define a Timer object. +/// \param name name of the timer object. +/// \param function name of the timer call back function. +/// \note CAN BE CHANGED: The parameter to \b osTimerDef shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#if defined (osObjectsExternal) // object is external +#define osTimerDef(name, function) \ +extern const osTimerDef_t os_timer_def_##name +#else // define the object +#define osTimerDef(name, function) \ +const osTimerDef_t os_timer_def_##name = \ +{ (function) } +#endif + +/// Access a Timer definition. +/// \param name name of the timer object. +/// \note CAN BE CHANGED: The parameter to \b osTimer shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#define osTimer(name) \ +&os_timer_def_##name + +/// Create a timer. +/// \param[in] timer_def timer object referenced with \ref osTimer. +/// \param[in] type osTimerOnce for one-shot or osTimerPeriodic for periodic behavior. +/// \param[in] argument argument to the timer call back function. +/// \return timer ID for reference by other functions or NULL in case of error. +/// \note MUST REMAIN UNCHANGED: \b osTimerCreate shall be consistent in every CMSIS-RTOS. +osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument); + +/// Start or restart a timer. +/// \param[in] timer_id timer ID obtained by \ref osTimerCreate. +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue "time delay" value of the timer. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osTimerStart shall be consistent in every CMSIS-RTOS. +osStatus osTimerStart (osTimerId timer_id, uint32_t millisec); + +/// Stop the timer. +/// \param[in] timer_id timer ID obtained by \ref osTimerCreate. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osTimerStop shall be consistent in every CMSIS-RTOS. +osStatus osTimerStop (osTimerId timer_id); + +/// Delete a timer that was created by \ref osTimerCreate. +/// \param[in] timer_id timer ID obtained by \ref osTimerCreate. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osTimerDelete shall be consistent in every CMSIS-RTOS. +osStatus osTimerDelete (osTimerId timer_id); + + +// ==== Signal Management ==== + +/// Set the specified Signal Flags of an active thread. +/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. +/// \param[in] signals specifies the signal flags of the thread that should be set. +/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters. +/// \note MUST REMAIN UNCHANGED: \b osSignalSet shall be consistent in every CMSIS-RTOS. +int32_t osSignalSet (osThreadId thread_id, int32_t signals); + +/// Clear the specified Signal Flags of an active thread. +/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. +/// \param[in] signals specifies the signal flags of the thread that shall be cleared. +/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters or call from ISR. +/// \note MUST REMAIN UNCHANGED: \b osSignalClear shall be consistent in every CMSIS-RTOS. +int32_t osSignalClear (osThreadId thread_id, int32_t signals); + +/// Wait for one or more Signal Flags to become signaled for the current \b RUNNING thread. +/// \param[in] signals wait until all specified signal flags set or 0 for any single signal flag. +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. +/// \return event flag information or error code. +/// \note MUST REMAIN UNCHANGED: \b osSignalWait shall be consistent in every CMSIS-RTOS. +osEvent osSignalWait (int32_t signals, uint32_t millisec); + + +// ==== Mutex Management ==== + +/// Define a Mutex. +/// \param name name of the mutex object. +/// \note CAN BE CHANGED: The parameter to \b osMutexDef shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#if defined (osObjectsExternal) // object is external +#define osMutexDef(name) \ +extern const osMutexDef_t os_mutex_def_##name +#else // define the object +#define osMutexDef(name) \ +const osMutexDef_t os_mutex_def_##name = { 0 } +#endif + +/// Access a Mutex definition. +/// \param name name of the mutex object. +/// \note CAN BE CHANGED: The parameter to \b osMutex shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#define osMutex(name) \ +&os_mutex_def_##name + +/// Create and Initialize a Mutex object. +/// \param[in] mutex_def mutex definition referenced with \ref osMutex. +/// \return mutex ID for reference by other functions or NULL in case of error. +/// \note MUST REMAIN UNCHANGED: \b osMutexCreate shall be consistent in every CMSIS-RTOS. +osMutexId osMutexCreate (const osMutexDef_t *mutex_def); + +/// Wait until a Mutex becomes available. +/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osMutexWait shall be consistent in every CMSIS-RTOS. +osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec); + +/// Release a Mutex that was obtained by \ref osMutexWait. +/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osMutexRelease shall be consistent in every CMSIS-RTOS. +osStatus osMutexRelease (osMutexId mutex_id); + +/// Delete a Mutex that was created by \ref osMutexCreate. +/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osMutexDelete shall be consistent in every CMSIS-RTOS. +osStatus osMutexDelete (osMutexId mutex_id); + + +// ==== Semaphore Management Functions ==== + +#if (defined (osFeature_Semaphore) && (osFeature_Semaphore != 0)) // Semaphore available + +/// Define a Semaphore object. +/// \param name name of the semaphore object. +/// \note CAN BE CHANGED: The parameter to \b osSemaphoreDef shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#if defined (osObjectsExternal) // object is external +#define osSemaphoreDef(name) \ +extern const osSemaphoreDef_t os_semaphore_def_##name +#else // define the object +#define osSemaphoreDef(name) \ +const osSemaphoreDef_t os_semaphore_def_##name = { 0 } +#endif + +/// Access a Semaphore definition. +/// \param name name of the semaphore object. +/// \note CAN BE CHANGED: The parameter to \b osSemaphore shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#define osSemaphore(name) \ +&os_semaphore_def_##name + +/// Create and Initialize a Semaphore object used for managing resources. +/// \param[in] semaphore_def semaphore definition referenced with \ref osSemaphore. +/// \param[in] count number of available resources. +/// \return semaphore ID for reference by other functions or NULL in case of error. +/// \note MUST REMAIN UNCHANGED: \b osSemaphoreCreate shall be consistent in every CMSIS-RTOS. +osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count); + +/// Wait until a Semaphore token becomes available. +/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate. +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. +/// \return number of available tokens, or -1 in case of incorrect parameters. +/// \note MUST REMAIN UNCHANGED: \b osSemaphoreWait shall be consistent in every CMSIS-RTOS. +int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec); + +/// Release a Semaphore token. +/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osSemaphoreRelease shall be consistent in every CMSIS-RTOS. +osStatus osSemaphoreRelease (osSemaphoreId semaphore_id); + +/// Delete a Semaphore that was created by \ref osSemaphoreCreate. +/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osSemaphoreDelete shall be consistent in every CMSIS-RTOS. +osStatus osSemaphoreDelete (osSemaphoreId semaphore_id); + +#endif // Semaphore available + + +// ==== Memory Pool Management Functions ==== + +#if (defined (osFeature_Pool) && (osFeature_Pool != 0)) // Memory Pool Management available + +/// \brief Define a Memory Pool. +/// \param name name of the memory pool. +/// \param no maximum number of blocks (objects) in the memory pool. +/// \param type data type of a single block (object). +/// \note CAN BE CHANGED: The parameter to \b osPoolDef shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#if defined (osObjectsExternal) // object is external +#define osPoolDef(name, no, type) \ +extern const osPoolDef_t os_pool_def_##name +#else // define the object +#define osPoolDef(name, no, type) \ +const osPoolDef_t os_pool_def_##name = \ +{ (no), sizeof(type), NULL } +#endif + +/// \brief Access a Memory Pool definition. +/// \param name name of the memory pool +/// \note CAN BE CHANGED: The parameter to \b osPool shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#define osPool(name) \ +&os_pool_def_##name + +/// Create and Initialize a memory pool. +/// \param[in] pool_def memory pool definition referenced with \ref osPool. +/// \return memory pool ID for reference by other functions or NULL in case of error. +/// \note MUST REMAIN UNCHANGED: \b osPoolCreate shall be consistent in every CMSIS-RTOS. +osPoolId osPoolCreate (const osPoolDef_t *pool_def); + +/// Allocate a memory block from a memory pool. +/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. +/// \return address of the allocated memory block or NULL in case of no memory available. +/// \note MUST REMAIN UNCHANGED: \b osPoolAlloc shall be consistent in every CMSIS-RTOS. +void *osPoolAlloc (osPoolId pool_id); + +/// Allocate a memory block from a memory pool and set memory block to zero. +/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. +/// \return address of the allocated memory block or NULL in case of no memory available. +/// \note MUST REMAIN UNCHANGED: \b osPoolCAlloc shall be consistent in every CMSIS-RTOS. +void *osPoolCAlloc (osPoolId pool_id); + +/// Return an allocated memory block back to a specific memory pool. +/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. +/// \param[in] block address of the allocated memory block that is returned to the memory pool. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osPoolFree shall be consistent in every CMSIS-RTOS. +osStatus osPoolFree (osPoolId pool_id, void *block); + +#endif // Memory Pool Management available + + +// ==== Message Queue Management Functions ==== + +#if (defined (osFeature_MessageQ) && (osFeature_MessageQ != 0)) // Message Queues available + +/// \brief Create a Message Queue Definition. +/// \param name name of the queue. +/// \param queue_sz maximum number of messages in the queue. +/// \param type data type of a single message element (for debugger). +/// \note CAN BE CHANGED: The parameter to \b osMessageQDef shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#if defined (osObjectsExternal) // object is external +#define osMessageQDef(name, queue_sz, type) \ +extern const osMessageQDef_t os_messageQ_def_##name +#else // define the object +#define osMessageQDef(name, queue_sz, type) \ +const osMessageQDef_t os_messageQ_def_##name = \ +{ (queue_sz), sizeof (type) } +#endif + +/// \brief Access a Message Queue Definition. +/// \param name name of the queue +/// \note CAN BE CHANGED: The parameter to \b osMessageQ shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#define osMessageQ(name) \ +&os_messageQ_def_##name + +/// Create and Initialize a Message Queue. +/// \param[in] queue_def queue definition referenced with \ref osMessageQ. +/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL. +/// \return message queue ID for reference by other functions or NULL in case of error. +/// \note MUST REMAIN UNCHANGED: \b osMessageCreate shall be consistent in every CMSIS-RTOS. +osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id); + +/// Put a Message to a Queue. +/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate. +/// \param[in] info message information. +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osMessagePut shall be consistent in every CMSIS-RTOS. +osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec); + +/// Get a Message or Wait for a Message from a Queue. +/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate. +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. +/// \return event information that includes status code. +/// \note MUST REMAIN UNCHANGED: \b osMessageGet shall be consistent in every CMSIS-RTOS. +osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec); + +#endif // Message Queues available + + +// ==== Mail Queue Management Functions ==== + +#if (defined (osFeature_MailQ) && (osFeature_MailQ != 0)) // Mail Queues available + +/// \brief Create a Mail Queue Definition. +/// \param name name of the queue +/// \param queue_sz maximum number of messages in queue +/// \param type data type of a single message element +/// \note CAN BE CHANGED: The parameter to \b osMailQDef shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#if defined (osObjectsExternal) // object is external +#define osMailQDef(name, queue_sz, type) \ +extern const osMailQDef_t os_mailQ_def_##name +#else // define the object +#define osMailQDef(name, queue_sz, type) \ +const osMailQDef_t os_mailQ_def_##name = \ +{ (queue_sz), sizeof (type) } +#endif + +/// \brief Access a Mail Queue Definition. +/// \param name name of the queue +/// \note CAN BE CHANGED: The parameter to \b osMailQ shall be consistent but the +/// macro body is implementation specific in every CMSIS-RTOS. +#define osMailQ(name) \ +&os_mailQ_def_##name + +/// Create and Initialize mail queue. +/// \param[in] queue_def reference to the mail queue definition obtain with \ref osMailQ +/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL. +/// \return mail queue ID for reference by other functions or NULL in case of error. +/// \note MUST REMAIN UNCHANGED: \b osMailCreate shall be consistent in every CMSIS-RTOS. +osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id); + +/// Allocate a memory block from a mail. +/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out +/// \return pointer to memory block that can be filled with mail or NULL in case of error. +/// \note MUST REMAIN UNCHANGED: \b osMailAlloc shall be consistent in every CMSIS-RTOS. +void *osMailAlloc (osMailQId queue_id, uint32_t millisec); + +/// Allocate a memory block from a mail and set memory block to zero. +/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out +/// \return pointer to memory block that can be filled with mail or NULL in case of error. +/// \note MUST REMAIN UNCHANGED: \b osMailCAlloc shall be consistent in every CMSIS-RTOS. +void *osMailCAlloc (osMailQId queue_id, uint32_t millisec); + +/// Put a mail to a queue. +/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. +/// \param[in] mail memory block previously allocated with \ref osMailAlloc or \ref osMailCAlloc. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osMailPut shall be consistent in every CMSIS-RTOS. +osStatus osMailPut (osMailQId queue_id, void *mail); + +/// Get a mail from a queue. +/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. +/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out +/// \return event that contains mail information or error code. +/// \note MUST REMAIN UNCHANGED: \b osMailGet shall be consistent in every CMSIS-RTOS. +osEvent osMailGet (osMailQId queue_id, uint32_t millisec); + +/// Free a memory block from a mail. +/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. +/// \param[in] mail pointer to the memory block that was obtained with \ref osMailGet. +/// \return status code that indicates the execution status of the function. +/// \note MUST REMAIN UNCHANGED: \b osMailFree shall be consistent in every CMSIS-RTOS. +osStatus osMailFree (osMailQId queue_id, void *mail); + +#endif // Mail Queues available + + +#ifdef __cplusplus +} +#endif + +#endif // _CMSIS_OS_H diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,3123 @@ +/** + ****************************************************************************** + * @file stm32_hal_legacy.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief This file contains aliases definition for the STM32Cube HAL constants + * macros and functions maintained for legacy purpose. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32_HAL_LEGACY +#define __STM32_HAL_LEGACY + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup HAL_AES_Aliased_Defines HAL CRYP Aliased Defines maintained for legacy purpose + * @{ + */ +#define AES_FLAG_RDERR CRYP_FLAG_RDERR +#define AES_FLAG_WRERR CRYP_FLAG_WRERR +#define AES_CLEARFLAG_CCF CRYP_CLEARFLAG_CCF +#define AES_CLEARFLAG_RDERR CRYP_CLEARFLAG_RDERR +#define AES_CLEARFLAG_WRERR CRYP_CLEARFLAG_WRERR + +/** + * @} + */ + +/** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose + * @{ + */ +#define ADC_RESOLUTION12b ADC_RESOLUTION_12B +#define ADC_RESOLUTION10b ADC_RESOLUTION_10B +#define ADC_RESOLUTION8b ADC_RESOLUTION_8B +#define ADC_RESOLUTION6b ADC_RESOLUTION_6B +#define OVR_DATA_OVERWRITTEN ADC_OVR_DATA_OVERWRITTEN +#define OVR_DATA_PRESERVED ADC_OVR_DATA_PRESERVED +#define EOC_SINGLE_CONV ADC_EOC_SINGLE_CONV +#define EOC_SEQ_CONV ADC_EOC_SEQ_CONV +#define EOC_SINGLE_SEQ_CONV ADC_EOC_SINGLE_SEQ_CONV +#define REGULAR_GROUP ADC_REGULAR_GROUP +#define INJECTED_GROUP ADC_INJECTED_GROUP +#define REGULAR_INJECTED_GROUP ADC_REGULAR_INJECTED_GROUP +#define AWD_EVENT ADC_AWD_EVENT +#define AWD1_EVENT ADC_AWD1_EVENT +#define AWD2_EVENT ADC_AWD2_EVENT +#define AWD3_EVENT ADC_AWD3_EVENT +#define OVR_EVENT ADC_OVR_EVENT +#define JQOVF_EVENT ADC_JQOVF_EVENT +#define ALL_CHANNELS ADC_ALL_CHANNELS +#define REGULAR_CHANNELS ADC_REGULAR_CHANNELS +#define INJECTED_CHANNELS ADC_INJECTED_CHANNELS +#define SYSCFG_FLAG_SENSOR_ADC ADC_FLAG_SENSOR +#define SYSCFG_FLAG_VREF_ADC ADC_FLAG_VREFINT +#define ADC_CLOCKPRESCALER_PCLK_DIV1 ADC_CLOCK_SYNC_PCLK_DIV1 +#define ADC_CLOCKPRESCALER_PCLK_DIV2 ADC_CLOCK_SYNC_PCLK_DIV2 +#define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 +#define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 +#define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO +#define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 +#define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 +#define ADC_EXTERNALTRIG_EDGE_NONE ADC_EXTERNALTRIGCONVEDGE_NONE +#define ADC_EXTERNALTRIG_EDGE_RISING ADC_EXTERNALTRIGCONVEDGE_RISING +#define ADC_EXTERNALTRIG_EDGE_FALLING ADC_EXTERNALTRIGCONVEDGE_FALLING +#define ADC_EXTERNALTRIG_EDGE_RISINGFALLING ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING +#define ADC_SAMPLETIME_2CYCLE_5 ADC_SAMPLETIME_2CYCLES_5 + +#define HAL_ADC_STATE_BUSY_REG HAL_ADC_STATE_REG_BUSY +#define HAL_ADC_STATE_BUSY_INJ HAL_ADC_STATE_INJ_BUSY +#define HAL_ADC_STATE_EOC_REG HAL_ADC_STATE_REG_EOC +#define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC +#define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL +#define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +/** + * @} + */ + +/** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + +/** + * @} + */ + +/** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose + * @{ + */ +#define COMP_WINDOWMODE_DISABLED COMP_WINDOWMODE_DISABLE +#define COMP_WINDOWMODE_ENABLED COMP_WINDOWMODE_ENABLE +#define COMP_EXTI_LINE_COMP1_EVENT COMP_EXTI_LINE_COMP1 +#define COMP_EXTI_LINE_COMP2_EVENT COMP_EXTI_LINE_COMP2 +#define COMP_EXTI_LINE_COMP3_EVENT COMP_EXTI_LINE_COMP3 +#define COMP_EXTI_LINE_COMP4_EVENT COMP_EXTI_LINE_COMP4 +#define COMP_EXTI_LINE_COMP5_EVENT COMP_EXTI_LINE_COMP5 +#define COMP_EXTI_LINE_COMP6_EVENT COMP_EXTI_LINE_COMP6 +#define COMP_EXTI_LINE_COMP7_EVENT COMP_EXTI_LINE_COMP7 +#define COMP_OUTPUT_COMP6TIM2OCREFCLR COMP_OUTPUT_COMP6_TIM2OCREFCLR +#if defined(STM32F373xC) || defined(STM32F378xx) +#define COMP_OUTPUT_TIM3IC1 COMP_OUTPUT_COMP1_TIM3IC1 +#define COMP_OUTPUT_TIM3OCREFCLR COMP_OUTPUT_COMP1_TIM3OCREFCLR +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32L0) || defined(STM32L4) +#define COMP_WINDOWMODE_ENABLE COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON + +#define COMP_NONINVERTINGINPUT_IO1 COMP_INPUT_PLUS_IO1 +#define COMP_NONINVERTINGINPUT_IO2 COMP_INPUT_PLUS_IO2 +#define COMP_NONINVERTINGINPUT_IO3 COMP_INPUT_PLUS_IO3 + +#define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT +#define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT +#define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT +#define COMP_INVERTINGINPUT_VREFINT COMP_INPUT_MINUS_VREFINT +#define COMP_INVERTINGINPUT_DAC1_CH1 COMP_INPUT_MINUS_DAC1_CH1 +#define COMP_INVERTINGINPUT_DAC1_CH2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_DAC1 COMP_INPUT_MINUS_DAC1_CH1 +#define COMP_INVERTINGINPUT_DAC2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_IO1 COMP_INPUT_MINUS_IO1 +#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_IO2 +#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO3 +#define COMP_INVERTINGINPUT_IO4 COMP_INPUT_MINUS_IO4 +#define COMP_INVERTINGINPUT_IO5 COMP_INPUT_MINUS_IO5 + +#define COMP_OUTPUTLEVEL_LOW COMP_OUTPUT_LEVEL_LOW +#define COMP_OUTPUTLEVEL_HIGH COMP_OUTPUT_LEVEL_HIGH + +/* Note: Literal "COMP_FLAG_LOCK" kept for legacy purpose. */ +/* To check COMP lock state, use macro "__HAL_COMP_IS_LOCKED()". */ +#if defined(COMP_CSR_LOCK) +#define COMP_FLAG_LOCK COMP_CSR_LOCK +#elif defined(COMP_CSR_COMP1LOCK) +#define COMP_FLAG_LOCK COMP_CSR_COMP1LOCK +#elif defined(COMP_CSR_COMPxLOCK) +#define COMP_FLAG_LOCK COMP_CSR_COMPxLOCK +#endif + +#if defined(STM32L4) +#define COMP_BLANKINGSRCE_TIM1OC5 COMP_BLANKINGSRC_TIM1_OC5_COMP1 +#define COMP_BLANKINGSRCE_TIM2OC3 COMP_BLANKINGSRC_TIM2_OC3_COMP1 +#define COMP_BLANKINGSRCE_TIM3OC3 COMP_BLANKINGSRC_TIM3_OC3_COMP1 +#define COMP_BLANKINGSRCE_TIM3OC4 COMP_BLANKINGSRC_TIM3_OC4_COMP2 +#define COMP_BLANKINGSRCE_TIM8OC5 COMP_BLANKINGSRC_TIM8_OC5_COMP2 +#define COMP_BLANKINGSRCE_TIM15OC1 COMP_BLANKINGSRC_TIM15_OC1_COMP2 +#define COMP_BLANKINGSRCE_NONE COMP_BLANKINGSRC_NONE +#endif + +#if defined(STM32L0) +#define COMP_MODE_HIGHSPEED COMP_POWERMODE_MEDIUMSPEED +#define COMP_MODE_LOWSPEED COMP_POWERMODE_ULTRALOWPOWER +#else +#define COMP_MODE_HIGHSPEED COMP_POWERMODE_HIGHSPEED +#define COMP_MODE_MEDIUMSPEED COMP_POWERMODE_MEDIUMSPEED +#define COMP_MODE_LOWPOWER COMP_POWERMODE_LOWPOWER +#define COMP_MODE_ULTRALOWPOWER COMP_POWERMODE_ULTRALOWPOWER +#endif + +#endif +/** + * @} + */ + +/** @defgroup HAL_CORTEX_Aliased_Defines HAL CORTEX Aliased Defines maintained for legacy purpose + * @{ + */ +#define __HAL_CORTEX_SYSTICKCLK_CONFIG HAL_SYSTICK_CLKSourceConfig +/** + * @} + */ + +/** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE +#define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE + +/** + * @} + */ + +/** @defgroup HAL_DAC_Aliased_Defines HAL DAC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define DAC1_CHANNEL_1 DAC_CHANNEL_1 +#define DAC1_CHANNEL_2 DAC_CHANNEL_2 +#define DAC2_CHANNEL_1 DAC_CHANNEL_1 +#define DAC_WAVE_NONE ((uint32_t)0x00000000U) +#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) +#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE +#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE +#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE + +/** + * @} + */ + +/** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 +#define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE +#define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE + + + +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose + * @{ + */ + +#define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE +#define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD +#define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD +#define TYPEPROGRAM_DOUBLEWORD FLASH_TYPEPROGRAM_DOUBLEWORD +#define TYPEERASE_SECTORS FLASH_TYPEERASE_SECTORS +#define TYPEERASE_PAGES FLASH_TYPEERASE_PAGES +#define TYPEERASE_PAGEERASE FLASH_TYPEERASE_PAGES +#define TYPEERASE_MASSERASE FLASH_TYPEERASE_MASSERASE +#define WRPSTATE_DISABLE OB_WRPSTATE_DISABLE +#define WRPSTATE_ENABLE OB_WRPSTATE_ENABLE +#define HAL_FLASH_TIMEOUT_VALUE FLASH_TIMEOUT_VALUE +#define OBEX_PCROP OPTIONBYTE_PCROP +#define OBEX_BOOTCONFIG OPTIONBYTE_BOOTCONFIG +#define PCROPSTATE_DISABLE OB_PCROP_STATE_DISABLE +#define PCROPSTATE_ENABLE OB_PCROP_STATE_ENABLE +#define TYPEERASEDATA_BYTE FLASH_TYPEERASEDATA_BYTE +#define TYPEERASEDATA_HALFWORD FLASH_TYPEERASEDATA_HALFWORD +#define TYPEERASEDATA_WORD FLASH_TYPEERASEDATA_WORD +#define TYPEPROGRAMDATA_BYTE FLASH_TYPEPROGRAMDATA_BYTE +#define TYPEPROGRAMDATA_HALFWORD FLASH_TYPEPROGRAMDATA_HALFWORD +#define TYPEPROGRAMDATA_WORD FLASH_TYPEPROGRAMDATA_WORD +#define TYPEPROGRAMDATA_FASTBYTE FLASH_TYPEPROGRAMDATA_FASTBYTE +#define TYPEPROGRAMDATA_FASTHALFWORD FLASH_TYPEPROGRAMDATA_FASTHALFWORD +#define TYPEPROGRAMDATA_FASTWORD FLASH_TYPEPROGRAMDATA_FASTWORD +#define PAGESIZE FLASH_PAGE_SIZE +#define TYPEPROGRAM_FASTBYTE FLASH_TYPEPROGRAM_BYTE +#define TYPEPROGRAM_FASTHALFWORD FLASH_TYPEPROGRAM_HALFWORD +#define TYPEPROGRAM_FASTWORD FLASH_TYPEPROGRAM_WORD +#define VOLTAGE_RANGE_1 FLASH_VOLTAGE_RANGE_1 +#define VOLTAGE_RANGE_2 FLASH_VOLTAGE_RANGE_2 +#define VOLTAGE_RANGE_3 FLASH_VOLTAGE_RANGE_3 +#define VOLTAGE_RANGE_4 FLASH_VOLTAGE_RANGE_4 +#define TYPEPROGRAM_FAST FLASH_TYPEPROGRAM_FAST +#define TYPEPROGRAM_FAST_AND_LAST FLASH_TYPEPROGRAM_FAST_AND_LAST +#define WRPAREA_BANK1_AREAA OB_WRPAREA_BANK1_AREAA +#define WRPAREA_BANK1_AREAB OB_WRPAREA_BANK1_AREAB +#define WRPAREA_BANK2_AREAA OB_WRPAREA_BANK2_AREAA +#define WRPAREA_BANK2_AREAB OB_WRPAREA_BANK2_AREAB +#define IWDG_STDBY_FREEZE OB_IWDG_STDBY_FREEZE +#define IWDG_STDBY_ACTIVE OB_IWDG_STDBY_RUN +#define IWDG_STOP_FREEZE OB_IWDG_STOP_FREEZE +#define IWDG_STOP_ACTIVE OB_IWDG_STOP_RUN +#define FLASH_ERROR_NONE HAL_FLASH_ERROR_NONE +#define FLASH_ERROR_RD HAL_FLASH_ERROR_RD +#define FLASH_ERROR_PG HAL_FLASH_ERROR_PROG +#define FLASH_ERROR_PGP HAL_FLASH_ERROR_PGS +#define FLASH_ERROR_WRP HAL_FLASH_ERROR_WRP +#define FLASH_ERROR_OPTV HAL_FLASH_ERROR_OPTV +#define FLASH_ERROR_OPTVUSR HAL_FLASH_ERROR_OPTVUSR +#define FLASH_ERROR_PROG HAL_FLASH_ERROR_PROG +#define FLASH_ERROR_OP HAL_FLASH_ERROR_OPERATION +#define FLASH_ERROR_PGA HAL_FLASH_ERROR_PGA +#define FLASH_ERROR_SIZE HAL_FLASH_ERROR_SIZE +#define FLASH_ERROR_SIZ HAL_FLASH_ERROR_SIZE +#define FLASH_ERROR_PGS HAL_FLASH_ERROR_PGS +#define FLASH_ERROR_MIS HAL_FLASH_ERROR_MIS +#define FLASH_ERROR_FAST HAL_FLASH_ERROR_FAST +#define FLASH_ERROR_FWWERR HAL_FLASH_ERROR_FWWERR +#define FLASH_ERROR_NOTZERO HAL_FLASH_ERROR_NOTZERO +#define FLASH_ERROR_OPERATION HAL_FLASH_ERROR_OPERATION +#define FLASH_ERROR_ERS HAL_FLASH_ERROR_ERS +#define OB_WDG_SW OB_IWDG_SW +#define OB_WDG_HW OB_IWDG_HW +#define OB_SDADC12_VDD_MONITOR_SET OB_SDACD_VDD_MONITOR_SET +#define OB_SDADC12_VDD_MONITOR_RESET OB_SDACD_VDD_MONITOR_RESET +#define OB_RAM_PARITY_CHECK_SET OB_SRAM_PARITY_SET +#define OB_RAM_PARITY_CHECK_RESET OB_SRAM_PARITY_RESET +#define IS_OB_SDADC12_VDD_MONITOR IS_OB_SDACD_VDD_MONITOR +#define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 +#define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 +#define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +/** + * @} + */ + +/** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose + * @{ + */ + +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB7 I2C_FASTMODEPLUS_PB7 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB8 I2C_FASTMODEPLUS_PB8 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB9 I2C_FASTMODEPLUS_PB9 +#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1 +#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2 +#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3 +/** + * @} + */ + + +/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose + * @{ + */ +#if defined(STM32L4) || defined(STM32F7) +#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE +#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE +#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8 +#define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 +#else +#define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE +#define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE +#define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 +#define FMC_NAND_MEM_BUS_WIDTH_16 FMC_NAND_PCC_MEM_BUS_WIDTH_16 +#endif +/** + * @} + */ + +/** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef +#define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef +/** + * @} + */ + +/** @defgroup HAL_GPIO_Aliased_Macros HAL GPIO Aliased Macros maintained for legacy purpose + * @{ + */ +#define GET_GPIO_SOURCE GPIO_GET_INDEX +#define GET_GPIO_INDEX GPIO_GET_INDEX + +#if defined(STM32F4) +#define GPIO_AF12_SDMMC GPIO_AF12_SDIO +#define GPIO_AF12_SDMMC1 GPIO_AF12_SDIO +#endif + +#if defined(STM32F7) +#define GPIO_AF12_SDIO GPIO_AF12_SDMMC1 +#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 +#endif + +#if defined(STM32L4) +#define GPIO_AF12_SDIO GPIO_AF12_SDMMC1 +#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 +#endif + +#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1 +#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1 +#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1 + +#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 */ + +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#endif /* STM32L1 */ + +#if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_HIGH +#endif /* STM32F0 || STM32F3 || STM32F1 */ + +#define GPIO_AF6_DFSDM GPIO_AF6_DFSDM1 +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose + * @{ + */ +#define HRTIM_TIMDELAYEDPROTECTION_DISABLED HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_DEEV7 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 +#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 + +#define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER +#define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER +#define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD +#define __HAL_HRTIM_GetPeriod __HAL_HRTIM_GETPERIOD +#define __HAL_HRTIM_SetClockPrescaler __HAL_HRTIM_SETCLOCKPRESCALER +#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER +#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE +#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Defines HAL I2C Aliased Defines maintained for legacy purpose + * @{ + */ +#define I2C_DUALADDRESS_DISABLED I2C_DUALADDRESS_DISABLE +#define I2C_DUALADDRESS_ENABLED I2C_DUALADDRESS_ENABLE +#define I2C_GENERALCALL_DISABLED I2C_GENERALCALL_DISABLE +#define I2C_GENERALCALL_ENABLED I2C_GENERALCALL_ENABLE +#define I2C_NOSTRETCH_DISABLED I2C_NOSTRETCH_DISABLE +#define I2C_NOSTRETCH_ENABLED I2C_NOSTRETCH_ENABLE +#define I2C_ANALOGFILTER_ENABLED I2C_ANALOGFILTER_ENABLE +#define I2C_ANALOGFILTER_DISABLED I2C_ANALOGFILTER_DISABLE +#if defined(STM32F0) || defined(STM32F1) || defined(STM32F3) || defined(STM32G0) || defined(STM32L4) || defined(STM32L1) || defined(STM32F7) +#define HAL_I2C_STATE_MEM_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_MEM_BUSY_RX HAL_I2C_STATE_BUSY_RX +#define HAL_I2C_STATE_MASTER_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_MASTER_BUSY_RX HAL_I2C_STATE_BUSY_RX +#define HAL_I2C_STATE_SLAVE_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_SLAVE_BUSY_RX HAL_I2C_STATE_BUSY_RX +#endif +/** + * @} + */ + +/** @defgroup HAL_IRDA_Aliased_Defines HAL IRDA Aliased Defines maintained for legacy purpose + * @{ + */ +#define IRDA_ONE_BIT_SAMPLE_DISABLED IRDA_ONE_BIT_SAMPLE_DISABLE +#define IRDA_ONE_BIT_SAMPLE_ENABLED IRDA_ONE_BIT_SAMPLE_ENABLE + +/** + * @} + */ + +/** @defgroup HAL_IWDG_Aliased_Defines HAL IWDG Aliased Defines maintained for legacy purpose + * @{ + */ +#define KR_KEY_RELOAD IWDG_KEY_RELOAD +#define KR_KEY_ENABLE IWDG_KEY_ENABLE +#define KR_KEY_EWA IWDG_KEY_WRITE_ACCESS_ENABLE +#define KR_KEY_DWA IWDG_KEY_WRITE_ACCESS_DISABLE +/** + * @} + */ + +/** @defgroup HAL_LPTIM_Aliased_Defines HAL LPTIM Aliased Defines maintained for legacy purpose + * @{ + */ + +#define LPTIM_CLOCKSAMPLETIME_DIRECTTRANSISTION LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION +#define LPTIM_CLOCKSAMPLETIME_2TRANSISTIONS LPTIM_CLOCKSAMPLETIME_2TRANSITIONS +#define LPTIM_CLOCKSAMPLETIME_4TRANSISTIONS LPTIM_CLOCKSAMPLETIME_4TRANSITIONS +#define LPTIM_CLOCKSAMPLETIME_8TRANSISTIONS LPTIM_CLOCKSAMPLETIME_8TRANSITIONS + +#define LPTIM_CLOCKPOLARITY_RISINGEDGE LPTIM_CLOCKPOLARITY_RISING +#define LPTIM_CLOCKPOLARITY_FALLINGEDGE LPTIM_CLOCKPOLARITY_FALLING +#define LPTIM_CLOCKPOLARITY_BOTHEDGES LPTIM_CLOCKPOLARITY_RISING_FALLING + +#define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION +#define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS + +/* The following 3 definition have also been present in a temporary version of lptim.h */ +/* They need to be renamed also to the right name, just in case */ +#define LPTIM_TRIGSAMPLETIME_2TRANSITION LPTIM_TRIGSAMPLETIME_2TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_4TRANSITION LPTIM_TRIGSAMPLETIME_4TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSITION LPTIM_TRIGSAMPLETIME_8TRANSITIONS + +/** + * @} + */ + +/** @defgroup HAL_NAND_Aliased_Defines HAL NAND Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_NAND_Read_Page HAL_NAND_Read_Page_8b +#define HAL_NAND_Write_Page HAL_NAND_Write_Page_8b +#define HAL_NAND_Read_SpareArea HAL_NAND_Read_SpareArea_8b +#define HAL_NAND_Write_SpareArea HAL_NAND_Write_SpareArea_8b + +#define NAND_AddressTypedef NAND_AddressTypeDef + +#define __ARRAY_ADDRESS ARRAY_ADDRESS +#define __ADDR_1st_CYCLE ADDR_1ST_CYCLE +#define __ADDR_2nd_CYCLE ADDR_2ND_CYCLE +#define __ADDR_3rd_CYCLE ADDR_3RD_CYCLE +#define __ADDR_4th_CYCLE ADDR_4TH_CYCLE +/** + * @} + */ + +/** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose + * @{ + */ +#define NOR_StatusTypedef HAL_NOR_StatusTypeDef +#define NOR_SUCCESS HAL_NOR_STATUS_SUCCESS +#define NOR_ONGOING HAL_NOR_STATUS_ONGOING +#define NOR_ERROR HAL_NOR_STATUS_ERROR +#define NOR_TIMEOUT HAL_NOR_STATUS_TIMEOUT + +#define __NOR_WRITE NOR_WRITE +#define __NOR_ADDR_SHIFT NOR_ADDR_SHIFT +/** + * @} + */ + +/** @defgroup HAL_OPAMP_Aliased_Defines HAL OPAMP Aliased Defines maintained for legacy purpose + * @{ + */ + +#define OPAMP_NONINVERTINGINPUT_VP0 OPAMP_NONINVERTINGINPUT_IO0 +#define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 +#define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 +#define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 + +#define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 +#define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 +#define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 + +#define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 +#define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 + +#define IOPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 +#define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 + +#define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 + +#define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +/** + * @} + */ + +/** @defgroup HAL_I2S_Aliased_Defines HAL I2S Aliased Defines maintained for legacy purpose + * @{ + */ +#define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS +#if defined(STM32F7) + #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL +#endif +/** + * @} + */ + +/** @defgroup HAL_PCCARD_Aliased_Defines HAL PCCARD Aliased Defines maintained for legacy purpose + * @{ + */ + +/* Compact Flash-ATA registers description */ +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA + +/* Compact Flash-ATA commands */ +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD +#define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD +#define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD + +#define PCCARD_StatusTypedef HAL_PCCARD_StatusTypeDef +#define PCCARD_SUCCESS HAL_PCCARD_STATUS_SUCCESS +#define PCCARD_ONGOING HAL_PCCARD_STATUS_ONGOING +#define PCCARD_ERROR HAL_PCCARD_STATUS_ERROR +#define PCCARD_TIMEOUT HAL_PCCARD_STATUS_TIMEOUT +/** + * @} + */ + +/** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define FORMAT_BIN RTC_FORMAT_BIN +#define FORMAT_BCD RTC_FORMAT_BCD + +#define RTC_ALARMSUBSECONDMASK_None RTC_ALARMSUBSECONDMASK_NONE +#define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE +#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE +#define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE + +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE +#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT + +#define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 + +#define RTC_OUTPUT_REMAP_PC13 RTC_OUTPUT_REMAP_NONE +#define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 +#define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 + +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 + +/** + * @} + */ + + +/** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose + * @{ + */ +#define SMARTCARD_NACK_ENABLED SMARTCARD_NACK_ENABLE +#define SMARTCARD_NACK_DISABLED SMARTCARD_NACK_DISABLE + +#define SMARTCARD_ONEBIT_SAMPLING_DISABLED SMARTCARD_ONE_BIT_SAMPLE_DISABLE +#define SMARTCARD_ONEBIT_SAMPLING_ENABLED SMARTCARD_ONE_BIT_SAMPLE_ENABLE +#define SMARTCARD_ONEBIT_SAMPLING_DISABLE SMARTCARD_ONE_BIT_SAMPLE_DISABLE +#define SMARTCARD_ONEBIT_SAMPLING_ENABLE SMARTCARD_ONE_BIT_SAMPLE_ENABLE + +#define SMARTCARD_TIMEOUT_DISABLED SMARTCARD_TIMEOUT_DISABLE +#define SMARTCARD_TIMEOUT_ENABLED SMARTCARD_TIMEOUT_ENABLE + +#define SMARTCARD_LASTBIT_DISABLED SMARTCARD_LASTBIT_DISABLE +#define SMARTCARD_LASTBIT_ENABLED SMARTCARD_LASTBIT_ENABLE +/** + * @} + */ + + +/** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose + * @{ + */ +#define SMBUS_DUALADDRESS_DISABLED SMBUS_DUALADDRESS_DISABLE +#define SMBUS_DUALADDRESS_ENABLED SMBUS_DUALADDRESS_ENABLE +#define SMBUS_GENERALCALL_DISABLED SMBUS_GENERALCALL_DISABLE +#define SMBUS_GENERALCALL_ENABLED SMBUS_GENERALCALL_ENABLE +#define SMBUS_NOSTRETCH_DISABLED SMBUS_NOSTRETCH_DISABLE +#define SMBUS_NOSTRETCH_ENABLED SMBUS_NOSTRETCH_ENABLE +#define SMBUS_ANALOGFILTER_ENABLED SMBUS_ANALOGFILTER_ENABLE +#define SMBUS_ANALOGFILTER_DISABLED SMBUS_ANALOGFILTER_DISABLE +#define SMBUS_PEC_DISABLED SMBUS_PEC_DISABLE +#define SMBUS_PEC_ENABLED SMBUS_PEC_ENABLE +#define HAL_SMBUS_STATE_SLAVE_LISTEN HAL_SMBUS_STATE_LISTEN +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose + * @{ + */ +#define SPI_TIMODE_DISABLED SPI_TIMODE_DISABLE +#define SPI_TIMODE_ENABLED SPI_TIMODE_ENABLE + +#define SPI_CRCCALCULATION_DISABLED SPI_CRCCALCULATION_DISABLE +#define SPI_CRCCALCULATION_ENABLED SPI_CRCCALCULATION_ENABLE + +#define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE +#define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE + +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose + * @{ + */ +#define CCER_CCxE_MASK TIM_CCER_CCxE_MASK +#define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK + +#define TIM_DMABase_CR1 TIM_DMABASE_CR1 +#define TIM_DMABase_CR2 TIM_DMABASE_CR2 +#define TIM_DMABase_SMCR TIM_DMABASE_SMCR +#define TIM_DMABase_DIER TIM_DMABASE_DIER +#define TIM_DMABase_SR TIM_DMABASE_SR +#define TIM_DMABase_EGR TIM_DMABASE_EGR +#define TIM_DMABase_CCMR1 TIM_DMABASE_CCMR1 +#define TIM_DMABase_CCMR2 TIM_DMABASE_CCMR2 +#define TIM_DMABase_CCER TIM_DMABASE_CCER +#define TIM_DMABase_CNT TIM_DMABASE_CNT +#define TIM_DMABase_PSC TIM_DMABASE_PSC +#define TIM_DMABase_ARR TIM_DMABASE_ARR +#define TIM_DMABase_RCR TIM_DMABASE_RCR +#define TIM_DMABase_CCR1 TIM_DMABASE_CCR1 +#define TIM_DMABase_CCR2 TIM_DMABASE_CCR2 +#define TIM_DMABase_CCR3 TIM_DMABASE_CCR3 +#define TIM_DMABase_CCR4 TIM_DMABASE_CCR4 +#define TIM_DMABase_BDTR TIM_DMABASE_BDTR +#define TIM_DMABase_DCR TIM_DMABASE_DCR +#define TIM_DMABase_DMAR TIM_DMABASE_DMAR +#define TIM_DMABase_OR1 TIM_DMABASE_OR1 +#define TIM_DMABase_CCMR3 TIM_DMABASE_CCMR3 +#define TIM_DMABase_CCR5 TIM_DMABASE_CCR5 +#define TIM_DMABase_CCR6 TIM_DMABASE_CCR6 +#define TIM_DMABase_OR2 TIM_DMABASE_OR2 +#define TIM_DMABase_OR3 TIM_DMABASE_OR3 +#define TIM_DMABase_OR TIM_DMABASE_OR + +#define TIM_EventSource_Update TIM_EVENTSOURCE_UPDATE +#define TIM_EventSource_CC1 TIM_EVENTSOURCE_CC1 +#define TIM_EventSource_CC2 TIM_EVENTSOURCE_CC2 +#define TIM_EventSource_CC3 TIM_EVENTSOURCE_CC3 +#define TIM_EventSource_CC4 TIM_EVENTSOURCE_CC4 +#define TIM_EventSource_COM TIM_EVENTSOURCE_COM +#define TIM_EventSource_Trigger TIM_EVENTSOURCE_TRIGGER +#define TIM_EventSource_Break TIM_EVENTSOURCE_BREAK +#define TIM_EventSource_Break2 TIM_EVENTSOURCE_BREAK2 + +#define TIM_DMABurstLength_1Transfer TIM_DMABURSTLENGTH_1TRANSFER +#define TIM_DMABurstLength_2Transfers TIM_DMABURSTLENGTH_2TRANSFERS +#define TIM_DMABurstLength_3Transfers TIM_DMABURSTLENGTH_3TRANSFERS +#define TIM_DMABurstLength_4Transfers TIM_DMABURSTLENGTH_4TRANSFERS +#define TIM_DMABurstLength_5Transfers TIM_DMABURSTLENGTH_5TRANSFERS +#define TIM_DMABurstLength_6Transfers TIM_DMABURSTLENGTH_6TRANSFERS +#define TIM_DMABurstLength_7Transfers TIM_DMABURSTLENGTH_7TRANSFERS +#define TIM_DMABurstLength_8Transfers TIM_DMABURSTLENGTH_8TRANSFERS +#define TIM_DMABurstLength_9Transfers TIM_DMABURSTLENGTH_9TRANSFERS +#define TIM_DMABurstLength_10Transfers TIM_DMABURSTLENGTH_10TRANSFERS +#define TIM_DMABurstLength_11Transfers TIM_DMABURSTLENGTH_11TRANSFERS +#define TIM_DMABurstLength_12Transfers TIM_DMABURSTLENGTH_12TRANSFERS +#define TIM_DMABurstLength_13Transfers TIM_DMABURSTLENGTH_13TRANSFERS +#define TIM_DMABurstLength_14Transfers TIM_DMABURSTLENGTH_14TRANSFERS +#define TIM_DMABurstLength_15Transfers TIM_DMABURSTLENGTH_15TRANSFERS +#define TIM_DMABurstLength_16Transfers TIM_DMABURSTLENGTH_16TRANSFERS +#define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS +#define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS + +/** + * @} + */ + +/** @defgroup HAL_TSC_Aliased_Defines HAL TSC Aliased Defines maintained for legacy purpose + * @{ + */ +#define TSC_SYNC_POL_FALL TSC_SYNC_POLARITY_FALLING +#define TSC_SYNC_POL_RISE_HIGH TSC_SYNC_POLARITY_RISING +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Defines HAL UART Aliased Defines maintained for legacy purpose + * @{ + */ +#define UART_ONEBIT_SAMPLING_DISABLED UART_ONE_BIT_SAMPLE_DISABLE +#define UART_ONEBIT_SAMPLING_ENABLED UART_ONE_BIT_SAMPLE_ENABLE +#define UART_ONE_BIT_SAMPLE_DISABLED UART_ONE_BIT_SAMPLE_DISABLE +#define UART_ONE_BIT_SAMPLE_ENABLED UART_ONE_BIT_SAMPLE_ENABLE + +#define __HAL_UART_ONEBIT_ENABLE __HAL_UART_ONE_BIT_SAMPLE_ENABLE +#define __HAL_UART_ONEBIT_DISABLE __HAL_UART_ONE_BIT_SAMPLE_DISABLE + +#define __DIV_SAMPLING16 UART_DIV_SAMPLING16 +#define __DIVMANT_SAMPLING16 UART_DIVMANT_SAMPLING16 +#define __DIVFRAQ_SAMPLING16 UART_DIVFRAQ_SAMPLING16 +#define __UART_BRR_SAMPLING16 UART_BRR_SAMPLING16 + +#define __DIV_SAMPLING8 UART_DIV_SAMPLING8 +#define __DIVMANT_SAMPLING8 UART_DIVMANT_SAMPLING8 +#define __DIVFRAQ_SAMPLING8 UART_DIVFRAQ_SAMPLING8 +#define __UART_BRR_SAMPLING8 UART_BRR_SAMPLING8 + +#define UART_WAKEUPMETHODE_IDLELINE UART_WAKEUPMETHOD_IDLELINE +#define UART_WAKEUPMETHODE_ADDRESSMARK UART_WAKEUPMETHOD_ADDRESSMARK + +/** + * @} + */ + + +/** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose + * @{ + */ + +#define USART_CLOCK_DISABLED USART_CLOCK_DISABLE +#define USART_CLOCK_ENABLED USART_CLOCK_ENABLE + +#define USARTNACK_ENABLED USART_NACK_ENABLE +#define USARTNACK_DISABLED USART_NACK_DISABLE +/** + * @} + */ + +/** @defgroup HAL_WWDG_Aliased_Defines HAL WWDG Aliased Defines maintained for legacy purpose + * @{ + */ +#define CFR_BASE WWDG_CFR_BASE + +/** + * @} + */ + +/** @defgroup HAL_CAN_Aliased_Defines HAL CAN Aliased Defines maintained for legacy purpose + * @{ + */ +#define CAN_FilterFIFO0 CAN_FILTER_FIFO0 +#define CAN_FilterFIFO1 CAN_FILTER_FIFO1 +#define CAN_IT_RQCP0 CAN_IT_TME +#define CAN_IT_RQCP1 CAN_IT_TME +#define CAN_IT_RQCP2 CAN_IT_TME +#define INAK_TIMEOUT CAN_TIMEOUT_VALUE +#define SLAK_TIMEOUT CAN_TIMEOUT_VALUE +#define CAN_TXSTATUS_FAILED ((uint8_t)0x00U) +#define CAN_TXSTATUS_OK ((uint8_t)0x01U) +#define CAN_TXSTATUS_PENDING ((uint8_t)0x02U) + +/** + * @} + */ + +/** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose + * @{ + */ + +#define VLAN_TAG ETH_VLAN_TAG +#define MIN_ETH_PAYLOAD ETH_MIN_ETH_PAYLOAD +#define MAX_ETH_PAYLOAD ETH_MAX_ETH_PAYLOAD +#define JUMBO_FRAME_PAYLOAD ETH_JUMBO_FRAME_PAYLOAD +#define MACMIIAR_CR_MASK ETH_MACMIIAR_CR_MASK +#define MACCR_CLEAR_MASK ETH_MACCR_CLEAR_MASK +#define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK +#define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK + +#define ETH_MMCCR ((uint32_t)0x00000100U) +#define ETH_MMCRIR ((uint32_t)0x00000104U) +#define ETH_MMCTIR ((uint32_t)0x00000108U) +#define ETH_MMCRIMR ((uint32_t)0x0000010CU) +#define ETH_MMCTIMR ((uint32_t)0x00000110U) +#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) +#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) +#define ETH_MMCTGFCR ((uint32_t)0x00000168U) +#define ETH_MMCRFCECR ((uint32_t)0x00000194U) +#define ETH_MMCRFAECR ((uint32_t)0x00000198U) +#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) + +#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#if defined(STM32F1) +#else +#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#endif +#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ + +/** + * @} + */ + +/** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_DCMI_ERROR_OVF HAL_DCMI_ERROR_OVR +#define DCMI_IT_OVF DCMI_IT_OVR +#define DCMI_FLAG_OVFRI DCMI_FLAG_OVRRI +#define DCMI_FLAG_OVFMI DCMI_FLAG_OVRMI + +#define HAL_DCMI_ConfigCROP HAL_DCMI_ConfigCrop +#define HAL_DCMI_EnableCROP HAL_DCMI_EnableCrop +#define HAL_DCMI_DisableCROP HAL_DCMI_DisableCrop + +/** + * @} + */ + +#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ + defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose + * @{ + */ +#define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 +#define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 + +#define CM_ARGB8888 DMA2D_INPUT_ARGB8888 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_ARGB1555 DMA2D_INPUT_ARGB1555 +#define CM_ARGB4444 DMA2D_INPUT_ARGB4444 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 +/** + * @} + */ +#endif /* STM32L4xx || STM32F7*/ + +/** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup HAL_CRYP_Aliased_Functions HAL CRYP Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback +/** + * @} + */ + +/** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef +#define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef +#define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish +#define HAL_HMAC_SHA1_Finish HAL_HASH_SHA1_Finish +#define HAL_HMAC_SHA224_Finish HAL_HASH_SHA224_Finish +#define HAL_HMAC_SHA256_Finish HAL_HASH_SHA256_Finish + +/*HASH Algorithm Selection*/ + +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 +#define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 +#define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 + +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC + +#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY +#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY +/** + * @} + */ + +/** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_EnableDBGSleepMode HAL_DBGMCU_EnableDBGSleepMode +#define HAL_DisableDBGSleepMode HAL_DBGMCU_DisableDBGSleepMode +#define HAL_EnableDBGStopMode HAL_DBGMCU_EnableDBGStopMode +#define HAL_DisableDBGStopMode HAL_DBGMCU_DisableDBGStopMode +#define HAL_EnableDBGStandbyMode HAL_DBGMCU_EnableDBGStandbyMode +#define HAL_DisableDBGStandbyMode HAL_DBGMCU_DisableDBGStandbyMode +#define HAL_DBG_LowPowerConfig(Periph, cmd) (((cmd)==ENABLE)? HAL_DBGMCU_DBG_EnableLowPowerConfig(Periph) : HAL_DBGMCU_DBG_DisableLowPowerConfig(Periph)) +#define HAL_VREFINT_OutputSelect HAL_SYSCFG_VREFINT_OutputSelect +#define HAL_Lock_Cmd(cmd) (((cmd)==ENABLE) ? HAL_SYSCFG_Enable_Lock_VREFINT() : HAL_SYSCFG_Disable_Lock_VREFINT()) +#if defined(STM32L0) +#else +#define HAL_VREFINT_Cmd(cmd) (((cmd)==ENABLE)? HAL_SYSCFG_EnableVREFINT() : HAL_SYSCFG_DisableVREFINT()) +#endif +#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT()) +#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor()) +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Functions HAL FLASH Aliased Functions maintained for legacy purpose + * @{ + */ +#define FLASH_HalfPageProgram HAL_FLASHEx_HalfPageProgram +#define FLASH_EnableRunPowerDown HAL_FLASHEx_EnableRunPowerDown +#define FLASH_DisableRunPowerDown HAL_FLASHEx_DisableRunPowerDown +#define HAL_DATA_EEPROMEx_Unlock HAL_FLASHEx_DATAEEPROM_Unlock +#define HAL_DATA_EEPROMEx_Lock HAL_FLASHEx_DATAEEPROM_Lock +#define HAL_DATA_EEPROMEx_Erase HAL_FLASHEx_DATAEEPROM_Erase +#define HAL_DATA_EEPROMEx_Program HAL_FLASHEx_DATAEEPROM_Program + + /** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Functions HAL I2C Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_I2CEx_AnalogFilter_Config HAL_I2CEx_ConfigAnalogFilter +#define HAL_I2CEx_DigitalFilter_Config HAL_I2CEx_ConfigDigitalFilter +#define HAL_FMPI2CEx_AnalogFilter_Config HAL_FMPI2CEx_ConfigAnalogFilter +#define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter + +#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd)==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus)) + /** + * @} + */ + +/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose + * @{ + */ +#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD +#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg +#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown +#define HAL_PWR_DisableVddio2Monitor HAL_PWREx_DisableVddio2Monitor +#define HAL_PWR_EnableBkUpReg HAL_PWREx_EnableBkUpReg +#define HAL_PWR_EnableFlashPowerDown HAL_PWREx_EnableFlashPowerDown +#define HAL_PWR_EnableVddio2Monitor HAL_PWREx_EnableVddio2Monitor +#define HAL_PWR_PVD_PVM_IRQHandler HAL_PWREx_PVD_PVM_IRQHandler +#define HAL_PWR_PVDLevelConfig HAL_PWR_ConfigPVD +#define HAL_PWR_Vddio2Monitor_IRQHandler HAL_PWREx_Vddio2Monitor_IRQHandler +#define HAL_PWR_Vddio2MonitorCallback HAL_PWREx_Vddio2MonitorCallback +#define HAL_PWREx_ActivateOverDrive HAL_PWREx_EnableOverDrive +#define HAL_PWREx_DeactivateOverDrive HAL_PWREx_DisableOverDrive +#define HAL_PWREx_DisableSDADCAnalog HAL_PWREx_DisableSDADC +#define HAL_PWREx_EnableSDADCAnalog HAL_PWREx_EnableSDADC +#define HAL_PWREx_PVMConfig HAL_PWREx_ConfigPVM + +#define PWR_MODE_NORMAL PWR_PVD_MODE_NORMAL +#define PWR_MODE_IT_RISING PWR_PVD_MODE_IT_RISING +#define PWR_MODE_IT_FALLING PWR_PVD_MODE_IT_FALLING +#define PWR_MODE_IT_RISING_FALLING PWR_PVD_MODE_IT_RISING_FALLING +#define PWR_MODE_EVENT_RISING PWR_PVD_MODE_EVENT_RISING +#define PWR_MODE_EVENT_FALLING PWR_PVD_MODE_EVENT_FALLING +#define PWR_MODE_EVENT_RISING_FALLING PWR_PVD_MODE_EVENT_RISING_FALLING + +#define CR_OFFSET_BB PWR_CR_OFFSET_BB +#define CSR_OFFSET_BB PWR_CSR_OFFSET_BB + +#define DBP_BitNumber DBP_BIT_NUMBER +#define PVDE_BitNumber PVDE_BIT_NUMBER +#define PMODE_BitNumber PMODE_BIT_NUMBER +#define EWUP_BitNumber EWUP_BIT_NUMBER +#define FPDS_BitNumber FPDS_BIT_NUMBER +#define ODEN_BitNumber ODEN_BIT_NUMBER +#define ODSWEN_BitNumber ODSWEN_BIT_NUMBER +#define MRLVDS_BitNumber MRLVDS_BIT_NUMBER +#define LPLVDS_BitNumber LPLVDS_BIT_NUMBER +#define BRE_BitNumber BRE_BIT_NUMBER + +#define PWR_MODE_EVT PWR_PVD_MODE_NORMAL + + /** + * @} + */ + +/** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Functions HAL SPI Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_TIM_DMADelayPulseCplt TIM_DMADelayPulseCplt +#define HAL_TIM_DMAError TIM_DMAError +#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt +#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback +/** + * @} + */ + +/** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +/** + * @} + */ + + +/** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +/* Exported macros ------------------------------------------------------------*/ + +/** @defgroup HAL_AES_Aliased_Macros HAL CRYP Aliased Macros maintained for legacy purpose + * @{ + */ +#define AES_IT_CC CRYP_IT_CC +#define AES_IT_ERR CRYP_IT_ERR +#define AES_FLAG_CCF CRYP_FLAG_CCF +/** + * @} + */ + +/** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_GET_BOOT_MODE __HAL_SYSCFG_GET_BOOT_MODE +#define __HAL_REMAPMEMORY_FLASH __HAL_SYSCFG_REMAPMEMORY_FLASH +#define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH +#define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM +#define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC +#define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI +#define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK +#define __HAL_GET_FLAG __HAL_SYSCFG_GET_FLAG +#define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG +#define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE +#define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE + +#define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY +#define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 +#define IS_SYSCFG_FASTMODEPLUS_CONFIG IS_I2C_FASTMODEPLUS +#define UFB_MODE_BitNumber UFB_MODE_BIT_NUMBER +#define CMP_PD_BitNumber CMP_PD_BIT_NUMBER + +/** + * @} + */ + + +/** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __ADC_ENABLE __HAL_ADC_ENABLE +#define __ADC_DISABLE __HAL_ADC_DISABLE +#define __HAL_ADC_ENABLING_CONDITIONS ADC_ENABLING_CONDITIONS +#define __HAL_ADC_DISABLING_CONDITIONS ADC_DISABLING_CONDITIONS +#define __HAL_ADC_IS_ENABLED ADC_IS_ENABLE +#define __ADC_IS_ENABLED ADC_IS_ENABLE +#define __HAL_ADC_IS_SOFTWARE_START_REGULAR ADC_IS_SOFTWARE_START_REGULAR +#define __HAL_ADC_IS_SOFTWARE_START_INJECTED ADC_IS_SOFTWARE_START_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR ADC_IS_CONVERSION_ONGOING_REGULAR +#define __HAL_ADC_IS_CONVERSION_ONGOING_INJECTED ADC_IS_CONVERSION_ONGOING_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING ADC_IS_CONVERSION_ONGOING +#define __HAL_ADC_CLEAR_ERRORCODE ADC_CLEAR_ERRORCODE + +#define __HAL_ADC_GET_RESOLUTION ADC_GET_RESOLUTION +#define __HAL_ADC_JSQR_RK ADC_JSQR_RK +#define __HAL_ADC_CFGR_AWD1CH ADC_CFGR_AWD1CH_SHIFT +#define __HAL_ADC_CFGR_AWD23CR ADC_CFGR_AWD23CR +#define __HAL_ADC_CFGR_INJECT_AUTO_CONVERSION ADC_CFGR_INJECT_AUTO_CONVERSION +#define __HAL_ADC_CFGR_INJECT_CONTEXT_QUEUE ADC_CFGR_INJECT_CONTEXT_QUEUE +#define __HAL_ADC_CFGR_INJECT_DISCCONTINUOUS ADC_CFGR_INJECT_DISCCONTINUOUS +#define __HAL_ADC_CFGR_REG_DISCCONTINUOUS ADC_CFGR_REG_DISCCONTINUOUS +#define __HAL_ADC_CFGR_DISCONTINUOUS_NUM ADC_CFGR_DISCONTINUOUS_NUM +#define __HAL_ADC_CFGR_AUTOWAIT ADC_CFGR_AUTOWAIT +#define __HAL_ADC_CFGR_CONTINUOUS ADC_CFGR_CONTINUOUS +#define __HAL_ADC_CFGR_OVERRUN ADC_CFGR_OVERRUN +#define __HAL_ADC_CFGR_DMACONTREQ ADC_CFGR_DMACONTREQ +#define __HAL_ADC_CFGR_EXTSEL ADC_CFGR_EXTSEL_SET +#define __HAL_ADC_JSQR_JEXTSEL ADC_JSQR_JEXTSEL_SET +#define __HAL_ADC_OFR_CHANNEL ADC_OFR_CHANNEL +#define __HAL_ADC_DIFSEL_CHANNEL ADC_DIFSEL_CHANNEL +#define __HAL_ADC_CALFACT_DIFF_SET ADC_CALFACT_DIFF_SET +#define __HAL_ADC_CALFACT_DIFF_GET ADC_CALFACT_DIFF_GET +#define __HAL_ADC_TRX_HIGHTHRESHOLD ADC_TRX_HIGHTHRESHOLD + +#define __HAL_ADC_OFFSET_SHIFT_RESOLUTION ADC_OFFSET_SHIFT_RESOLUTION +#define __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION ADC_AWD1THRESHOLD_SHIFT_RESOLUTION +#define __HAL_ADC_AWD23THRESHOLD_SHIFT_RESOLUTION ADC_AWD23THRESHOLD_SHIFT_RESOLUTION +#define __HAL_ADC_COMMON_REGISTER ADC_COMMON_REGISTER +#define __HAL_ADC_COMMON_CCR_MULTI ADC_COMMON_CCR_MULTI +#define __HAL_ADC_MULTIMODE_IS_ENABLED ADC_MULTIMODE_IS_ENABLE +#define __ADC_MULTIMODE_IS_ENABLED ADC_MULTIMODE_IS_ENABLE +#define __HAL_ADC_NONMULTIMODE_OR_MULTIMODEMASTER ADC_NONMULTIMODE_OR_MULTIMODEMASTER +#define __HAL_ADC_COMMON_ADC_OTHER ADC_COMMON_ADC_OTHER +#define __HAL_ADC_MULTI_SLAVE ADC_MULTI_SLAVE + +#define __HAL_ADC_SQR1_L ADC_SQR1_L_SHIFT +#define __HAL_ADC_JSQR_JL ADC_JSQR_JL_SHIFT +#define __HAL_ADC_JSQR_RK_JL ADC_JSQR_RK_JL +#define __HAL_ADC_CR1_DISCONTINUOUS_NUM ADC_CR1_DISCONTINUOUS_NUM +#define __HAL_ADC_CR1_SCAN ADC_CR1_SCAN_SET +#define __HAL_ADC_CONVCYCLES_MAX_RANGE ADC_CONVCYCLES_MAX_RANGE +#define __HAL_ADC_CLOCK_PRESCALER_RANGE ADC_CLOCK_PRESCALER_RANGE +#define __HAL_ADC_GET_CLOCK_PRESCALER ADC_GET_CLOCK_PRESCALER + +#define __HAL_ADC_SQR1 ADC_SQR1 +#define __HAL_ADC_SMPR1 ADC_SMPR1 +#define __HAL_ADC_SMPR2 ADC_SMPR2 +#define __HAL_ADC_SQR3_RK ADC_SQR3_RK +#define __HAL_ADC_SQR2_RK ADC_SQR2_RK +#define __HAL_ADC_SQR1_RK ADC_SQR1_RK +#define __HAL_ADC_CR2_CONTINUOUS ADC_CR2_CONTINUOUS +#define __HAL_ADC_CR1_DISCONTINUOUS ADC_CR1_DISCONTINUOUS +#define __HAL_ADC_CR1_SCANCONV ADC_CR1_SCANCONV +#define __HAL_ADC_CR2_EOCSelection ADC_CR2_EOCSelection +#define __HAL_ADC_CR2_DMAContReq ADC_CR2_DMAContReq +#define __HAL_ADC_GET_RESOLUTION ADC_GET_RESOLUTION +#define __HAL_ADC_JSQR ADC_JSQR + +#define __HAL_ADC_CHSELR_CHANNEL ADC_CHSELR_CHANNEL +#define __HAL_ADC_CFGR1_REG_DISCCONTINUOUS ADC_CFGR1_REG_DISCCONTINUOUS +#define __HAL_ADC_CFGR1_AUTOOFF ADC_CFGR1_AUTOOFF +#define __HAL_ADC_CFGR1_AUTOWAIT ADC_CFGR1_AUTOWAIT +#define __HAL_ADC_CFGR1_CONTINUOUS ADC_CFGR1_CONTINUOUS +#define __HAL_ADC_CFGR1_OVERRUN ADC_CFGR1_OVERRUN +#define __HAL_ADC_CFGR1_SCANDIR ADC_CFGR1_SCANDIR +#define __HAL_ADC_CFGR1_DMACONTREQ ADC_CFGR1_DMACONTREQ + +/** + * @} + */ + +/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_DHR12R1_ALIGNEMENT DAC_DHR12R1_ALIGNMENT +#define __HAL_DHR12R2_ALIGNEMENT DAC_DHR12R2_ALIGNMENT +#define __HAL_DHR12RD_ALIGNEMENT DAC_DHR12RD_ALIGNMENT +#define IS_DAC_GENERATE_WAVE IS_DAC_WAVE + +/** + * @} + */ + +/** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_FREEZE_TIM1_DBGMCU __HAL_DBGMCU_FREEZE_TIM1 +#define __HAL_UNFREEZE_TIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM1 +#define __HAL_FREEZE_TIM2_DBGMCU __HAL_DBGMCU_FREEZE_TIM2 +#define __HAL_UNFREEZE_TIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM2 +#define __HAL_FREEZE_TIM3_DBGMCU __HAL_DBGMCU_FREEZE_TIM3 +#define __HAL_UNFREEZE_TIM3_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM3 +#define __HAL_FREEZE_TIM4_DBGMCU __HAL_DBGMCU_FREEZE_TIM4 +#define __HAL_UNFREEZE_TIM4_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM4 +#define __HAL_FREEZE_TIM5_DBGMCU __HAL_DBGMCU_FREEZE_TIM5 +#define __HAL_UNFREEZE_TIM5_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM5 +#define __HAL_FREEZE_TIM6_DBGMCU __HAL_DBGMCU_FREEZE_TIM6 +#define __HAL_UNFREEZE_TIM6_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM6 +#define __HAL_FREEZE_TIM7_DBGMCU __HAL_DBGMCU_FREEZE_TIM7 +#define __HAL_UNFREEZE_TIM7_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM7 +#define __HAL_FREEZE_TIM8_DBGMCU __HAL_DBGMCU_FREEZE_TIM8 +#define __HAL_UNFREEZE_TIM8_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM8 + +#define __HAL_FREEZE_TIM9_DBGMCU __HAL_DBGMCU_FREEZE_TIM9 +#define __HAL_UNFREEZE_TIM9_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM9 +#define __HAL_FREEZE_TIM10_DBGMCU __HAL_DBGMCU_FREEZE_TIM10 +#define __HAL_UNFREEZE_TIM10_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM10 +#define __HAL_FREEZE_TIM11_DBGMCU __HAL_DBGMCU_FREEZE_TIM11 +#define __HAL_UNFREEZE_TIM11_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM11 +#define __HAL_FREEZE_TIM12_DBGMCU __HAL_DBGMCU_FREEZE_TIM12 +#define __HAL_UNFREEZE_TIM12_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM12 +#define __HAL_FREEZE_TIM13_DBGMCU __HAL_DBGMCU_FREEZE_TIM13 +#define __HAL_UNFREEZE_TIM13_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM13 +#define __HAL_FREEZE_TIM14_DBGMCU __HAL_DBGMCU_FREEZE_TIM14 +#define __HAL_UNFREEZE_TIM14_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM14 +#define __HAL_FREEZE_CAN2_DBGMCU __HAL_DBGMCU_FREEZE_CAN2 +#define __HAL_UNFREEZE_CAN2_DBGMCU __HAL_DBGMCU_UNFREEZE_CAN2 + + +#define __HAL_FREEZE_TIM15_DBGMCU __HAL_DBGMCU_FREEZE_TIM15 +#define __HAL_UNFREEZE_TIM15_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM15 +#define __HAL_FREEZE_TIM16_DBGMCU __HAL_DBGMCU_FREEZE_TIM16 +#define __HAL_UNFREEZE_TIM16_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM16 +#define __HAL_FREEZE_TIM17_DBGMCU __HAL_DBGMCU_FREEZE_TIM17 +#define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 +#define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC +#define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC +#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG +#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG +#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG +#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT +#define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT +#define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT +#define __HAL_UNFREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT +#define __HAL_FREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT +#define __HAL_UNFREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT +#define __HAL_FREEZE_CAN1_DBGMCU __HAL_DBGMCU_FREEZE_CAN1 +#define __HAL_UNFREEZE_CAN1_DBGMCU __HAL_DBGMCU_UNFREEZE_CAN1 +#define __HAL_FREEZE_LPTIM1_DBGMCU __HAL_DBGMCU_FREEZE_LPTIM1 +#define __HAL_UNFREEZE_LPTIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_LPTIM1 +#define __HAL_FREEZE_LPTIM2_DBGMCU __HAL_DBGMCU_FREEZE_LPTIM2 +#define __HAL_UNFREEZE_LPTIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_LPTIM2 + +/** + * @} + */ + +/** @defgroup HAL_COMP_Aliased_Macros HAL COMP Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32F3) +#define COMP_START __HAL_COMP_ENABLE +#define COMP_STOP __HAL_COMP_DISABLE +#define COMP_LOCK __HAL_COMP_LOCK + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP6_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP6_EXTI_CLEAR_FLAG()) +# endif +# if defined(STM32F302xE) || defined(STM32F302xC) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP6_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP6_EXTI_CLEAR_FLAG()) +# endif +# if defined(STM32F303xE) || defined(STM32F398xx) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP7_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP7_EXTI_CLEAR_FLAG()) +# endif +# if defined(STM32F373xC) ||defined(STM32F378xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP2_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP2_EXTI_CLEAR_FLAG()) +# endif +#else +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP2_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP2_EXTI_CLEAR_FLAG()) +#endif + +#define __HAL_COMP_GET_EXTI_LINE COMP_GET_EXTI_LINE + +#if defined(STM32L0) || defined(STM32L4) +/* Note: On these STM32 families, the only argument of this macro */ +/* is COMP_FLAG_LOCK. */ +/* This macro is replaced by __HAL_COMP_IS_LOCKED with only HAL handle */ +/* argument. */ +#define __HAL_COMP_GET_FLAG(__HANDLE__, __FLAG__) (__HAL_COMP_IS_LOCKED(__HANDLE__)) +#endif +/** + * @} + */ + +#if defined(STM32L0) || defined(STM32L4) +/** @defgroup HAL_COMP_Aliased_Functions HAL COMP Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_COMP_Start_IT HAL_COMP_Start /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */ +#define HAL_COMP_Stop_IT HAL_COMP_Stop /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */ +/** + * @} + */ +#endif + +/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ + ((WAVE) == DAC_WAVE_NOISE)|| \ + ((WAVE) == DAC_WAVE_TRIANGLE)) + +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Macros HAL FLASH Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_WRPAREA IS_OB_WRPAREA +#define IS_TYPEPROGRAM IS_FLASH_TYPEPROGRAM +#define IS_TYPEPROGRAMFLASH IS_FLASH_TYPEPROGRAM +#define IS_TYPEERASE IS_FLASH_TYPEERASE +#define IS_NBSECTORS IS_FLASH_NBSECTORS +#define IS_OB_WDG_SOURCE IS_OB_IWDG_SOURCE + +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 +#define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#define __HAL_I2C_RISE_TIME I2C_RISE_TIME +#define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD +#define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST +#define __HAL_I2C_SPEED I2C_SPEED +#define __HAL_I2C_7BIT_ADD_WRITE I2C_7BIT_ADD_WRITE +#define __HAL_I2C_7BIT_ADD_READ I2C_7BIT_ADD_READ +#define __HAL_I2C_10BIT_ADDRESS I2C_10BIT_ADDRESS +#define __HAL_I2C_10BIT_HEADER_WRITE I2C_10BIT_HEADER_WRITE +#define __HAL_I2C_10BIT_HEADER_READ I2C_10BIT_HEADER_READ +#define __HAL_I2C_MEM_ADD_MSB I2C_MEM_ADD_MSB +#define __HAL_I2C_MEM_ADD_LSB I2C_MEM_ADD_LSB +#define __HAL_I2C_FREQRANGE I2C_FREQRANGE +/** + * @} + */ + +/** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE +#define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT + +/** + * @} + */ + +/** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __IRDA_DISABLE __HAL_IRDA_DISABLE +#define __IRDA_ENABLE __HAL_IRDA_ENABLE + +#define __HAL_IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE +#define __HAL_IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION +#define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE +#define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION + +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE + + +/** + * @} + */ + + +/** @defgroup HAL_IWDG_Aliased_Macros HAL IWDG Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_IWDG_ENABLE_WRITE_ACCESS IWDG_ENABLE_WRITE_ACCESS +#define __HAL_IWDG_DISABLE_WRITE_ACCESS IWDG_DISABLE_WRITE_ACCESS +/** + * @} + */ + + +/** @defgroup HAL_LPTIM_Aliased_Macros HAL LPTIM Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_LPTIM_ENABLE_INTERRUPT __HAL_LPTIM_ENABLE_IT +#define __HAL_LPTIM_DISABLE_INTERRUPT __HAL_LPTIM_DISABLE_IT +#define __HAL_LPTIM_GET_ITSTATUS __HAL_LPTIM_GET_IT_SOURCE + +/** + * @} + */ + + +/** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose + * @{ + */ +#define __OPAMP_CSR_OPAXPD OPAMP_CSR_OPAXPD +#define __OPAMP_CSR_S3SELX OPAMP_CSR_S3SELX +#define __OPAMP_CSR_S4SELX OPAMP_CSR_S4SELX +#define __OPAMP_CSR_S5SELX OPAMP_CSR_S5SELX +#define __OPAMP_CSR_S6SELX OPAMP_CSR_S6SELX +#define __OPAMP_CSR_OPAXCAL_L OPAMP_CSR_OPAXCAL_L +#define __OPAMP_CSR_OPAXCAL_H OPAMP_CSR_OPAXCAL_H +#define __OPAMP_CSR_OPAXLPM OPAMP_CSR_OPAXLPM +#define __OPAMP_CSR_ALL_SWITCHES OPAMP_CSR_ALL_SWITCHES +#define __OPAMP_CSR_ANAWSELX OPAMP_CSR_ANAWSELX +#define __OPAMP_CSR_OPAXCALOUT OPAMP_CSR_OPAXCALOUT +#define __OPAMP_OFFSET_TRIM_BITSPOSITION OPAMP_OFFSET_TRIM_BITSPOSITION +#define __OPAMP_OFFSET_TRIM_SET OPAMP_OFFSET_TRIM_SET + +/** + * @} + */ + + +/** @defgroup HAL_PWR_Aliased_Macros HAL PWR Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_PVD_EVENT_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_EVENT +#define __HAL_PVD_EVENT_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_EVENT +#define __HAL_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PVD_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PVD_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE +#define __HAL_PVD_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PVM_EVENT_DISABLE __HAL_PWR_PVM_EVENT_DISABLE +#define __HAL_PVM_EVENT_ENABLE __HAL_PWR_PVM_EVENT_ENABLE +#define __HAL_PVM_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_DISABLE +#define __HAL_PVM_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_ENABLE +#define __HAL_PVM_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_RISINGTRIGGER_DISABLE +#define __HAL_PVM_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVM_EXTI_RISINGTRIGGER_ENABLE +#define __HAL_PWR_INTERNALWAKEUP_DISABLE HAL_PWREx_DisableInternalWakeUpLine +#define __HAL_PWR_INTERNALWAKEUP_ENABLE HAL_PWREx_EnableInternalWakeUpLine +#define __HAL_PWR_PULL_UP_DOWN_CONFIG_DISABLE HAL_PWREx_DisablePullUpPullDownConfig +#define __HAL_PWR_PULL_UP_DOWN_CONFIG_ENABLE HAL_PWREx_EnablePullUpPullDownConfig +#define __HAL_PWR_PVD_EXTI_CLEAR_EGDE_TRIGGER() do { __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); } while(0) +#define __HAL_PWR_PVD_EXTI_EVENT_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_EVENT +#define __HAL_PWR_PVD_EXTI_EVENT_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_EVENT +#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE +#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PWR_PVD_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_SET_RISING_EDGE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PWR_PVM_DISABLE() do { HAL_PWREx_DisablePVM1();HAL_PWREx_DisablePVM2();HAL_PWREx_DisablePVM3();HAL_PWREx_DisablePVM4(); } while(0) +#define __HAL_PWR_PVM_ENABLE() do { HAL_PWREx_EnablePVM1();HAL_PWREx_EnablePVM2();HAL_PWREx_EnablePVM3();HAL_PWREx_EnablePVM4(); } while(0) +#define __HAL_PWR_SRAM2CONTENT_PRESERVE_DISABLE HAL_PWREx_DisableSRAM2ContentRetention +#define __HAL_PWR_SRAM2CONTENT_PRESERVE_ENABLE HAL_PWREx_EnableSRAM2ContentRetention +#define __HAL_PWR_VDDIO2_DISABLE HAL_PWREx_DisableVddIO2 +#define __HAL_PWR_VDDIO2_ENABLE HAL_PWREx_EnableVddIO2 +#define __HAL_PWR_VDDIO2_EXTI_CLEAR_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PWR_VDDIO2_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_VDDUSB_DISABLE HAL_PWREx_DisableVddUSB +#define __HAL_PWR_VDDUSB_ENABLE HAL_PWREx_EnableVddUSB + +#if defined (STM32F4) +#define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() +#define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() +#define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() +#else +#define __HAL_PVD_EXTI_CLEAR_FLAG __HAL_PWR_PVD_EXTI_CLEAR_FLAG +#define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT +#define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT +#define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#endif /* STM32F4 */ +/** + * @} + */ + + +/** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose + * @{ + */ + +#define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI +#define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI + +#define HAL_RCC_CCSCallback HAL_RCC_CSSCallback +#define HAL_RC48_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_RCCEx_EnableHSI48_VREFINT() : HAL_RCCEx_DisableHSI48_VREFINT()) + +#define __ADC_CLK_DISABLE __HAL_RCC_ADC_CLK_DISABLE +#define __ADC_CLK_ENABLE __HAL_RCC_ADC_CLK_ENABLE +#define __ADC_CLK_SLEEP_DISABLE __HAL_RCC_ADC_CLK_SLEEP_DISABLE +#define __ADC_CLK_SLEEP_ENABLE __HAL_RCC_ADC_CLK_SLEEP_ENABLE +#define __ADC_FORCE_RESET __HAL_RCC_ADC_FORCE_RESET +#define __ADC_RELEASE_RESET __HAL_RCC_ADC_RELEASE_RESET +#define __ADC1_CLK_DISABLE __HAL_RCC_ADC1_CLK_DISABLE +#define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE +#define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET +#define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE +#define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE +#define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET +#define __ADC2_RELEASE_RESET __HAL_RCC_ADC2_RELEASE_RESET +#define __ADC3_CLK_DISABLE __HAL_RCC_ADC3_CLK_DISABLE +#define __ADC3_CLK_ENABLE __HAL_RCC_ADC3_CLK_ENABLE +#define __ADC3_FORCE_RESET __HAL_RCC_ADC3_FORCE_RESET +#define __ADC3_RELEASE_RESET __HAL_RCC_ADC3_RELEASE_RESET +#define __AES_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE +#define __AES_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE +#define __AES_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE +#define __AES_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE +#define __AES_FORCE_RESET __HAL_RCC_AES_FORCE_RESET +#define __AES_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET +#define __CRYP_CLK_SLEEP_ENABLE __HAL_RCC_CRYP_CLK_SLEEP_ENABLE +#define __CRYP_CLK_SLEEP_DISABLE __HAL_RCC_CRYP_CLK_SLEEP_DISABLE +#define __CRYP_CLK_ENABLE __HAL_RCC_CRYP_CLK_ENABLE +#define __CRYP_CLK_DISABLE __HAL_RCC_CRYP_CLK_DISABLE +#define __CRYP_FORCE_RESET __HAL_RCC_CRYP_FORCE_RESET +#define __CRYP_RELEASE_RESET __HAL_RCC_CRYP_RELEASE_RESET +#define __AFIO_CLK_DISABLE __HAL_RCC_AFIO_CLK_DISABLE +#define __AFIO_CLK_ENABLE __HAL_RCC_AFIO_CLK_ENABLE +#define __AFIO_FORCE_RESET __HAL_RCC_AFIO_FORCE_RESET +#define __AFIO_RELEASE_RESET __HAL_RCC_AFIO_RELEASE_RESET +#define __AHB_FORCE_RESET __HAL_RCC_AHB_FORCE_RESET +#define __AHB_RELEASE_RESET __HAL_RCC_AHB_RELEASE_RESET +#define __AHB1_FORCE_RESET __HAL_RCC_AHB1_FORCE_RESET +#define __AHB1_RELEASE_RESET __HAL_RCC_AHB1_RELEASE_RESET +#define __AHB2_FORCE_RESET __HAL_RCC_AHB2_FORCE_RESET +#define __AHB2_RELEASE_RESET __HAL_RCC_AHB2_RELEASE_RESET +#define __AHB3_FORCE_RESET __HAL_RCC_AHB3_FORCE_RESET +#define __AHB3_RELEASE_RESET __HAL_RCC_AHB3_RELEASE_RESET +#define __APB1_FORCE_RESET __HAL_RCC_APB1_FORCE_RESET +#define __APB1_RELEASE_RESET __HAL_RCC_APB1_RELEASE_RESET +#define __APB2_FORCE_RESET __HAL_RCC_APB2_FORCE_RESET +#define __APB2_RELEASE_RESET __HAL_RCC_APB2_RELEASE_RESET +#define __BKP_CLK_DISABLE __HAL_RCC_BKP_CLK_DISABLE +#define __BKP_CLK_ENABLE __HAL_RCC_BKP_CLK_ENABLE +#define __BKP_FORCE_RESET __HAL_RCC_BKP_FORCE_RESET +#define __BKP_RELEASE_RESET __HAL_RCC_BKP_RELEASE_RESET +#define __CAN1_CLK_DISABLE __HAL_RCC_CAN1_CLK_DISABLE +#define __CAN1_CLK_ENABLE __HAL_RCC_CAN1_CLK_ENABLE +#define __CAN1_CLK_SLEEP_DISABLE __HAL_RCC_CAN1_CLK_SLEEP_DISABLE +#define __CAN1_CLK_SLEEP_ENABLE __HAL_RCC_CAN1_CLK_SLEEP_ENABLE +#define __CAN1_FORCE_RESET __HAL_RCC_CAN1_FORCE_RESET +#define __CAN1_RELEASE_RESET __HAL_RCC_CAN1_RELEASE_RESET +#define __CAN_CLK_DISABLE __HAL_RCC_CAN1_CLK_DISABLE +#define __CAN_CLK_ENABLE __HAL_RCC_CAN1_CLK_ENABLE +#define __CAN_FORCE_RESET __HAL_RCC_CAN1_FORCE_RESET +#define __CAN_RELEASE_RESET __HAL_RCC_CAN1_RELEASE_RESET +#define __CAN2_CLK_DISABLE __HAL_RCC_CAN2_CLK_DISABLE +#define __CAN2_CLK_ENABLE __HAL_RCC_CAN2_CLK_ENABLE +#define __CAN2_FORCE_RESET __HAL_RCC_CAN2_FORCE_RESET +#define __CAN2_RELEASE_RESET __HAL_RCC_CAN2_RELEASE_RESET +#define __CEC_CLK_DISABLE __HAL_RCC_CEC_CLK_DISABLE +#define __CEC_CLK_ENABLE __HAL_RCC_CEC_CLK_ENABLE +#define __COMP_CLK_DISABLE __HAL_RCC_COMP_CLK_DISABLE +#define __COMP_CLK_ENABLE __HAL_RCC_COMP_CLK_ENABLE +#define __COMP_FORCE_RESET __HAL_RCC_COMP_FORCE_RESET +#define __COMP_RELEASE_RESET __HAL_RCC_COMP_RELEASE_RESET +#define __COMP_CLK_SLEEP_ENABLE __HAL_RCC_COMP_CLK_SLEEP_ENABLE +#define __COMP_CLK_SLEEP_DISABLE __HAL_RCC_COMP_CLK_SLEEP_DISABLE +#define __CEC_FORCE_RESET __HAL_RCC_CEC_FORCE_RESET +#define __CEC_RELEASE_RESET __HAL_RCC_CEC_RELEASE_RESET +#define __CRC_CLK_DISABLE __HAL_RCC_CRC_CLK_DISABLE +#define __CRC_CLK_ENABLE __HAL_RCC_CRC_CLK_ENABLE +#define __CRC_CLK_SLEEP_DISABLE __HAL_RCC_CRC_CLK_SLEEP_DISABLE +#define __CRC_CLK_SLEEP_ENABLE __HAL_RCC_CRC_CLK_SLEEP_ENABLE +#define __CRC_FORCE_RESET __HAL_RCC_CRC_FORCE_RESET +#define __CRC_RELEASE_RESET __HAL_RCC_CRC_RELEASE_RESET +#define __DAC_CLK_DISABLE __HAL_RCC_DAC_CLK_DISABLE +#define __DAC_CLK_ENABLE __HAL_RCC_DAC_CLK_ENABLE +#define __DAC_FORCE_RESET __HAL_RCC_DAC_FORCE_RESET +#define __DAC_RELEASE_RESET __HAL_RCC_DAC_RELEASE_RESET +#define __DAC1_CLK_DISABLE __HAL_RCC_DAC1_CLK_DISABLE +#define __DAC1_CLK_ENABLE __HAL_RCC_DAC1_CLK_ENABLE +#define __DAC1_CLK_SLEEP_DISABLE __HAL_RCC_DAC1_CLK_SLEEP_DISABLE +#define __DAC1_CLK_SLEEP_ENABLE __HAL_RCC_DAC1_CLK_SLEEP_ENABLE +#define __DAC1_FORCE_RESET __HAL_RCC_DAC1_FORCE_RESET +#define __DAC1_RELEASE_RESET __HAL_RCC_DAC1_RELEASE_RESET +#define __DBGMCU_CLK_ENABLE __HAL_RCC_DBGMCU_CLK_ENABLE +#define __DBGMCU_CLK_DISABLE __HAL_RCC_DBGMCU_CLK_DISABLE +#define __DBGMCU_FORCE_RESET __HAL_RCC_DBGMCU_FORCE_RESET +#define __DBGMCU_RELEASE_RESET __HAL_RCC_DBGMCU_RELEASE_RESET +#define __DFSDM_CLK_DISABLE __HAL_RCC_DFSDM_CLK_DISABLE +#define __DFSDM_CLK_ENABLE __HAL_RCC_DFSDM_CLK_ENABLE +#define __DFSDM_CLK_SLEEP_DISABLE __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE +#define __DFSDM_CLK_SLEEP_ENABLE __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE +#define __DFSDM_FORCE_RESET __HAL_RCC_DFSDM_FORCE_RESET +#define __DFSDM_RELEASE_RESET __HAL_RCC_DFSDM_RELEASE_RESET +#define __DMA1_CLK_DISABLE __HAL_RCC_DMA1_CLK_DISABLE +#define __DMA1_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE +#define __DMA1_CLK_SLEEP_DISABLE __HAL_RCC_DMA1_CLK_SLEEP_DISABLE +#define __DMA1_CLK_SLEEP_ENABLE __HAL_RCC_DMA1_CLK_SLEEP_ENABLE +#define __DMA1_FORCE_RESET __HAL_RCC_DMA1_FORCE_RESET +#define __DMA1_RELEASE_RESET __HAL_RCC_DMA1_RELEASE_RESET +#define __DMA2_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE +#define __DMA2_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE +#define __DMA2_CLK_SLEEP_DISABLE __HAL_RCC_DMA2_CLK_SLEEP_DISABLE +#define __DMA2_CLK_SLEEP_ENABLE __HAL_RCC_DMA2_CLK_SLEEP_ENABLE +#define __DMA2_FORCE_RESET __HAL_RCC_DMA2_FORCE_RESET +#define __DMA2_RELEASE_RESET __HAL_RCC_DMA2_RELEASE_RESET +#define __ETHMAC_CLK_DISABLE __HAL_RCC_ETHMAC_CLK_DISABLE +#define __ETHMAC_CLK_ENABLE __HAL_RCC_ETHMAC_CLK_ENABLE +#define __ETHMAC_FORCE_RESET __HAL_RCC_ETHMAC_FORCE_RESET +#define __ETHMAC_RELEASE_RESET __HAL_RCC_ETHMAC_RELEASE_RESET +#define __ETHMACRX_CLK_DISABLE __HAL_RCC_ETHMACRX_CLK_DISABLE +#define __ETHMACRX_CLK_ENABLE __HAL_RCC_ETHMACRX_CLK_ENABLE +#define __ETHMACTX_CLK_DISABLE __HAL_RCC_ETHMACTX_CLK_DISABLE +#define __ETHMACTX_CLK_ENABLE __HAL_RCC_ETHMACTX_CLK_ENABLE +#define __FIREWALL_CLK_DISABLE __HAL_RCC_FIREWALL_CLK_DISABLE +#define __FIREWALL_CLK_ENABLE __HAL_RCC_FIREWALL_CLK_ENABLE +#define __FLASH_CLK_DISABLE __HAL_RCC_FLASH_CLK_DISABLE +#define __FLASH_CLK_ENABLE __HAL_RCC_FLASH_CLK_ENABLE +#define __FLASH_CLK_SLEEP_DISABLE __HAL_RCC_FLASH_CLK_SLEEP_DISABLE +#define __FLASH_CLK_SLEEP_ENABLE __HAL_RCC_FLASH_CLK_SLEEP_ENABLE +#define __FLASH_FORCE_RESET __HAL_RCC_FLASH_FORCE_RESET +#define __FLASH_RELEASE_RESET __HAL_RCC_FLASH_RELEASE_RESET +#define __FLITF_CLK_DISABLE __HAL_RCC_FLITF_CLK_DISABLE +#define __FLITF_CLK_ENABLE __HAL_RCC_FLITF_CLK_ENABLE +#define __FLITF_FORCE_RESET __HAL_RCC_FLITF_FORCE_RESET +#define __FLITF_RELEASE_RESET __HAL_RCC_FLITF_RELEASE_RESET +#define __FLITF_CLK_SLEEP_ENABLE __HAL_RCC_FLITF_CLK_SLEEP_ENABLE +#define __FLITF_CLK_SLEEP_DISABLE __HAL_RCC_FLITF_CLK_SLEEP_DISABLE +#define __FMC_CLK_DISABLE __HAL_RCC_FMC_CLK_DISABLE +#define __FMC_CLK_ENABLE __HAL_RCC_FMC_CLK_ENABLE +#define __FMC_CLK_SLEEP_DISABLE __HAL_RCC_FMC_CLK_SLEEP_DISABLE +#define __FMC_CLK_SLEEP_ENABLE __HAL_RCC_FMC_CLK_SLEEP_ENABLE +#define __FMC_FORCE_RESET __HAL_RCC_FMC_FORCE_RESET +#define __FMC_RELEASE_RESET __HAL_RCC_FMC_RELEASE_RESET +#define __FSMC_CLK_DISABLE __HAL_RCC_FSMC_CLK_DISABLE +#define __FSMC_CLK_ENABLE __HAL_RCC_FSMC_CLK_ENABLE +#define __GPIOA_CLK_DISABLE __HAL_RCC_GPIOA_CLK_DISABLE +#define __GPIOA_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE +#define __GPIOA_CLK_SLEEP_DISABLE __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE +#define __GPIOA_CLK_SLEEP_ENABLE __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE +#define __GPIOA_FORCE_RESET __HAL_RCC_GPIOA_FORCE_RESET +#define __GPIOA_RELEASE_RESET __HAL_RCC_GPIOA_RELEASE_RESET +#define __GPIOB_CLK_DISABLE __HAL_RCC_GPIOB_CLK_DISABLE +#define __GPIOB_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE +#define __GPIOB_CLK_SLEEP_DISABLE __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE +#define __GPIOB_CLK_SLEEP_ENABLE __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE +#define __GPIOB_FORCE_RESET __HAL_RCC_GPIOB_FORCE_RESET +#define __GPIOB_RELEASE_RESET __HAL_RCC_GPIOB_RELEASE_RESET +#define __GPIOC_CLK_DISABLE __HAL_RCC_GPIOC_CLK_DISABLE +#define __GPIOC_CLK_ENABLE __HAL_RCC_GPIOC_CLK_ENABLE +#define __GPIOC_CLK_SLEEP_DISABLE __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE +#define __GPIOC_CLK_SLEEP_ENABLE __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE +#define __GPIOC_FORCE_RESET __HAL_RCC_GPIOC_FORCE_RESET +#define __GPIOC_RELEASE_RESET __HAL_RCC_GPIOC_RELEASE_RESET +#define __GPIOD_CLK_DISABLE __HAL_RCC_GPIOD_CLK_DISABLE +#define __GPIOD_CLK_ENABLE __HAL_RCC_GPIOD_CLK_ENABLE +#define __GPIOD_CLK_SLEEP_DISABLE __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE +#define __GPIOD_CLK_SLEEP_ENABLE __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE +#define __GPIOD_FORCE_RESET __HAL_RCC_GPIOD_FORCE_RESET +#define __GPIOD_RELEASE_RESET __HAL_RCC_GPIOD_RELEASE_RESET +#define __GPIOE_CLK_DISABLE __HAL_RCC_GPIOE_CLK_DISABLE +#define __GPIOE_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE +#define __GPIOE_CLK_SLEEP_DISABLE __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE +#define __GPIOE_CLK_SLEEP_ENABLE __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE +#define __GPIOE_FORCE_RESET __HAL_RCC_GPIOE_FORCE_RESET +#define __GPIOE_RELEASE_RESET __HAL_RCC_GPIOE_RELEASE_RESET +#define __GPIOF_CLK_DISABLE __HAL_RCC_GPIOF_CLK_DISABLE +#define __GPIOF_CLK_ENABLE __HAL_RCC_GPIOF_CLK_ENABLE +#define __GPIOF_CLK_SLEEP_DISABLE __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE +#define __GPIOF_CLK_SLEEP_ENABLE __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE +#define __GPIOF_FORCE_RESET __HAL_RCC_GPIOF_FORCE_RESET +#define __GPIOF_RELEASE_RESET __HAL_RCC_GPIOF_RELEASE_RESET +#define __GPIOG_CLK_DISABLE __HAL_RCC_GPIOG_CLK_DISABLE +#define __GPIOG_CLK_ENABLE __HAL_RCC_GPIOG_CLK_ENABLE +#define __GPIOG_CLK_SLEEP_DISABLE __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE +#define __GPIOG_CLK_SLEEP_ENABLE __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE +#define __GPIOG_FORCE_RESET __HAL_RCC_GPIOG_FORCE_RESET +#define __GPIOG_RELEASE_RESET __HAL_RCC_GPIOG_RELEASE_RESET +#define __GPIOH_CLK_DISABLE __HAL_RCC_GPIOH_CLK_DISABLE +#define __GPIOH_CLK_ENABLE __HAL_RCC_GPIOH_CLK_ENABLE +#define __GPIOH_CLK_SLEEP_DISABLE __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE +#define __GPIOH_CLK_SLEEP_ENABLE __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE +#define __GPIOH_FORCE_RESET __HAL_RCC_GPIOH_FORCE_RESET +#define __GPIOH_RELEASE_RESET __HAL_RCC_GPIOH_RELEASE_RESET +#define __I2C1_CLK_DISABLE __HAL_RCC_I2C1_CLK_DISABLE +#define __I2C1_CLK_ENABLE __HAL_RCC_I2C1_CLK_ENABLE +#define __I2C1_CLK_SLEEP_DISABLE __HAL_RCC_I2C1_CLK_SLEEP_DISABLE +#define __I2C1_CLK_SLEEP_ENABLE __HAL_RCC_I2C1_CLK_SLEEP_ENABLE +#define __I2C1_FORCE_RESET __HAL_RCC_I2C1_FORCE_RESET +#define __I2C1_RELEASE_RESET __HAL_RCC_I2C1_RELEASE_RESET +#define __I2C2_CLK_DISABLE __HAL_RCC_I2C2_CLK_DISABLE +#define __I2C2_CLK_ENABLE __HAL_RCC_I2C2_CLK_ENABLE +#define __I2C2_CLK_SLEEP_DISABLE __HAL_RCC_I2C2_CLK_SLEEP_DISABLE +#define __I2C2_CLK_SLEEP_ENABLE __HAL_RCC_I2C2_CLK_SLEEP_ENABLE +#define __I2C2_FORCE_RESET __HAL_RCC_I2C2_FORCE_RESET +#define __I2C2_RELEASE_RESET __HAL_RCC_I2C2_RELEASE_RESET +#define __I2C3_CLK_DISABLE __HAL_RCC_I2C3_CLK_DISABLE +#define __I2C3_CLK_ENABLE __HAL_RCC_I2C3_CLK_ENABLE +#define __I2C3_CLK_SLEEP_DISABLE __HAL_RCC_I2C3_CLK_SLEEP_DISABLE +#define __I2C3_CLK_SLEEP_ENABLE __HAL_RCC_I2C3_CLK_SLEEP_ENABLE +#define __I2C3_FORCE_RESET __HAL_RCC_I2C3_FORCE_RESET +#define __I2C3_RELEASE_RESET __HAL_RCC_I2C3_RELEASE_RESET +#define __LCD_CLK_DISABLE __HAL_RCC_LCD_CLK_DISABLE +#define __LCD_CLK_ENABLE __HAL_RCC_LCD_CLK_ENABLE +#define __LCD_CLK_SLEEP_DISABLE __HAL_RCC_LCD_CLK_SLEEP_DISABLE +#define __LCD_CLK_SLEEP_ENABLE __HAL_RCC_LCD_CLK_SLEEP_ENABLE +#define __LCD_FORCE_RESET __HAL_RCC_LCD_FORCE_RESET +#define __LCD_RELEASE_RESET __HAL_RCC_LCD_RELEASE_RESET +#define __LPTIM1_CLK_DISABLE __HAL_RCC_LPTIM1_CLK_DISABLE +#define __LPTIM1_CLK_ENABLE __HAL_RCC_LPTIM1_CLK_ENABLE +#define __LPTIM1_CLK_SLEEP_DISABLE __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE +#define __LPTIM1_CLK_SLEEP_ENABLE __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE +#define __LPTIM1_FORCE_RESET __HAL_RCC_LPTIM1_FORCE_RESET +#define __LPTIM1_RELEASE_RESET __HAL_RCC_LPTIM1_RELEASE_RESET +#define __LPTIM2_CLK_DISABLE __HAL_RCC_LPTIM2_CLK_DISABLE +#define __LPTIM2_CLK_ENABLE __HAL_RCC_LPTIM2_CLK_ENABLE +#define __LPTIM2_CLK_SLEEP_DISABLE __HAL_RCC_LPTIM2_CLK_SLEEP_DISABLE +#define __LPTIM2_CLK_SLEEP_ENABLE __HAL_RCC_LPTIM2_CLK_SLEEP_ENABLE +#define __LPTIM2_FORCE_RESET __HAL_RCC_LPTIM2_FORCE_RESET +#define __LPTIM2_RELEASE_RESET __HAL_RCC_LPTIM2_RELEASE_RESET +#define __LPUART1_CLK_DISABLE __HAL_RCC_LPUART1_CLK_DISABLE +#define __LPUART1_CLK_ENABLE __HAL_RCC_LPUART1_CLK_ENABLE +#define __LPUART1_CLK_SLEEP_DISABLE __HAL_RCC_LPUART1_CLK_SLEEP_DISABLE +#define __LPUART1_CLK_SLEEP_ENABLE __HAL_RCC_LPUART1_CLK_SLEEP_ENABLE +#define __LPUART1_FORCE_RESET __HAL_RCC_LPUART1_FORCE_RESET +#define __LPUART1_RELEASE_RESET __HAL_RCC_LPUART1_RELEASE_RESET +#define __OPAMP_CLK_DISABLE __HAL_RCC_OPAMP_CLK_DISABLE +#define __OPAMP_CLK_ENABLE __HAL_RCC_OPAMP_CLK_ENABLE +#define __OPAMP_CLK_SLEEP_DISABLE __HAL_RCC_OPAMP_CLK_SLEEP_DISABLE +#define __OPAMP_CLK_SLEEP_ENABLE __HAL_RCC_OPAMP_CLK_SLEEP_ENABLE +#define __OPAMP_FORCE_RESET __HAL_RCC_OPAMP_FORCE_RESET +#define __OPAMP_RELEASE_RESET __HAL_RCC_OPAMP_RELEASE_RESET +#define __OTGFS_CLK_DISABLE __HAL_RCC_OTGFS_CLK_DISABLE +#define __OTGFS_CLK_ENABLE __HAL_RCC_OTGFS_CLK_ENABLE +#define __OTGFS_CLK_SLEEP_DISABLE __HAL_RCC_OTGFS_CLK_SLEEP_DISABLE +#define __OTGFS_CLK_SLEEP_ENABLE __HAL_RCC_OTGFS_CLK_SLEEP_ENABLE +#define __OTGFS_FORCE_RESET __HAL_RCC_OTGFS_FORCE_RESET +#define __OTGFS_RELEASE_RESET __HAL_RCC_OTGFS_RELEASE_RESET +#define __PWR_CLK_DISABLE __HAL_RCC_PWR_CLK_DISABLE +#define __PWR_CLK_ENABLE __HAL_RCC_PWR_CLK_ENABLE +#define __PWR_CLK_SLEEP_DISABLE __HAL_RCC_PWR_CLK_SLEEP_DISABLE +#define __PWR_CLK_SLEEP_ENABLE __HAL_RCC_PWR_CLK_SLEEP_ENABLE +#define __PWR_FORCE_RESET __HAL_RCC_PWR_FORCE_RESET +#define __PWR_RELEASE_RESET __HAL_RCC_PWR_RELEASE_RESET +#define __QSPI_CLK_DISABLE __HAL_RCC_QSPI_CLK_DISABLE +#define __QSPI_CLK_ENABLE __HAL_RCC_QSPI_CLK_ENABLE +#define __QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QSPI_CLK_SLEEP_DISABLE +#define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE +#define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET +#define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET +#define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE +#define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE +#define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE +#define __RNG_CLK_SLEEP_ENABLE __HAL_RCC_RNG_CLK_SLEEP_ENABLE +#define __RNG_FORCE_RESET __HAL_RCC_RNG_FORCE_RESET +#define __RNG_RELEASE_RESET __HAL_RCC_RNG_RELEASE_RESET +#define __SAI1_CLK_DISABLE __HAL_RCC_SAI1_CLK_DISABLE +#define __SAI1_CLK_ENABLE __HAL_RCC_SAI1_CLK_ENABLE +#define __SAI1_CLK_SLEEP_DISABLE __HAL_RCC_SAI1_CLK_SLEEP_DISABLE +#define __SAI1_CLK_SLEEP_ENABLE __HAL_RCC_SAI1_CLK_SLEEP_ENABLE +#define __SAI1_FORCE_RESET __HAL_RCC_SAI1_FORCE_RESET +#define __SAI1_RELEASE_RESET __HAL_RCC_SAI1_RELEASE_RESET +#define __SAI2_CLK_DISABLE __HAL_RCC_SAI2_CLK_DISABLE +#define __SAI2_CLK_ENABLE __HAL_RCC_SAI2_CLK_ENABLE +#define __SAI2_CLK_SLEEP_DISABLE __HAL_RCC_SAI2_CLK_SLEEP_DISABLE +#define __SAI2_CLK_SLEEP_ENABLE __HAL_RCC_SAI2_CLK_SLEEP_ENABLE +#define __SAI2_FORCE_RESET __HAL_RCC_SAI2_FORCE_RESET +#define __SAI2_RELEASE_RESET __HAL_RCC_SAI2_RELEASE_RESET +#define __SDIO_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE +#define __SDIO_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE +#define __SDMMC_CLK_DISABLE __HAL_RCC_SDMMC_CLK_DISABLE +#define __SDMMC_CLK_ENABLE __HAL_RCC_SDMMC_CLK_ENABLE +#define __SDMMC_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC_CLK_SLEEP_DISABLE +#define __SDMMC_CLK_SLEEP_ENABLE __HAL_RCC_SDMMC_CLK_SLEEP_ENABLE +#define __SDMMC_FORCE_RESET __HAL_RCC_SDMMC_FORCE_RESET +#define __SDMMC_RELEASE_RESET __HAL_RCC_SDMMC_RELEASE_RESET +#define __SPI1_CLK_DISABLE __HAL_RCC_SPI1_CLK_DISABLE +#define __SPI1_CLK_ENABLE __HAL_RCC_SPI1_CLK_ENABLE +#define __SPI1_CLK_SLEEP_DISABLE __HAL_RCC_SPI1_CLK_SLEEP_DISABLE +#define __SPI1_CLK_SLEEP_ENABLE __HAL_RCC_SPI1_CLK_SLEEP_ENABLE +#define __SPI1_FORCE_RESET __HAL_RCC_SPI1_FORCE_RESET +#define __SPI1_RELEASE_RESET __HAL_RCC_SPI1_RELEASE_RESET +#define __SPI2_CLK_DISABLE __HAL_RCC_SPI2_CLK_DISABLE +#define __SPI2_CLK_ENABLE __HAL_RCC_SPI2_CLK_ENABLE +#define __SPI2_CLK_SLEEP_DISABLE __HAL_RCC_SPI2_CLK_SLEEP_DISABLE +#define __SPI2_CLK_SLEEP_ENABLE __HAL_RCC_SPI2_CLK_SLEEP_ENABLE +#define __SPI2_FORCE_RESET __HAL_RCC_SPI2_FORCE_RESET +#define __SPI2_RELEASE_RESET __HAL_RCC_SPI2_RELEASE_RESET +#define __SPI3_CLK_DISABLE __HAL_RCC_SPI3_CLK_DISABLE +#define __SPI3_CLK_ENABLE __HAL_RCC_SPI3_CLK_ENABLE +#define __SPI3_CLK_SLEEP_DISABLE __HAL_RCC_SPI3_CLK_SLEEP_DISABLE +#define __SPI3_CLK_SLEEP_ENABLE __HAL_RCC_SPI3_CLK_SLEEP_ENABLE +#define __SPI3_FORCE_RESET __HAL_RCC_SPI3_FORCE_RESET +#define __SPI3_RELEASE_RESET __HAL_RCC_SPI3_RELEASE_RESET +#define __SRAM_CLK_DISABLE __HAL_RCC_SRAM_CLK_DISABLE +#define __SRAM_CLK_ENABLE __HAL_RCC_SRAM_CLK_ENABLE +#define __SRAM1_CLK_SLEEP_DISABLE __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE +#define __SRAM1_CLK_SLEEP_ENABLE __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE +#define __SRAM2_CLK_SLEEP_DISABLE __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE +#define __SRAM2_CLK_SLEEP_ENABLE __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE +#define __SWPMI1_CLK_DISABLE __HAL_RCC_SWPMI1_CLK_DISABLE +#define __SWPMI1_CLK_ENABLE __HAL_RCC_SWPMI1_CLK_ENABLE +#define __SWPMI1_CLK_SLEEP_DISABLE __HAL_RCC_SWPMI1_CLK_SLEEP_DISABLE +#define __SWPMI1_CLK_SLEEP_ENABLE __HAL_RCC_SWPMI1_CLK_SLEEP_ENABLE +#define __SWPMI1_FORCE_RESET __HAL_RCC_SWPMI1_FORCE_RESET +#define __SWPMI1_RELEASE_RESET __HAL_RCC_SWPMI1_RELEASE_RESET +#define __SYSCFG_CLK_DISABLE __HAL_RCC_SYSCFG_CLK_DISABLE +#define __SYSCFG_CLK_ENABLE __HAL_RCC_SYSCFG_CLK_ENABLE +#define __SYSCFG_CLK_SLEEP_DISABLE __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE +#define __SYSCFG_CLK_SLEEP_ENABLE __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE +#define __SYSCFG_FORCE_RESET __HAL_RCC_SYSCFG_FORCE_RESET +#define __SYSCFG_RELEASE_RESET __HAL_RCC_SYSCFG_RELEASE_RESET +#define __TIM1_CLK_DISABLE __HAL_RCC_TIM1_CLK_DISABLE +#define __TIM1_CLK_ENABLE __HAL_RCC_TIM1_CLK_ENABLE +#define __TIM1_CLK_SLEEP_DISABLE __HAL_RCC_TIM1_CLK_SLEEP_DISABLE +#define __TIM1_CLK_SLEEP_ENABLE __HAL_RCC_TIM1_CLK_SLEEP_ENABLE +#define __TIM1_FORCE_RESET __HAL_RCC_TIM1_FORCE_RESET +#define __TIM1_RELEASE_RESET __HAL_RCC_TIM1_RELEASE_RESET +#define __TIM10_CLK_DISABLE __HAL_RCC_TIM10_CLK_DISABLE +#define __TIM10_CLK_ENABLE __HAL_RCC_TIM10_CLK_ENABLE +#define __TIM10_FORCE_RESET __HAL_RCC_TIM10_FORCE_RESET +#define __TIM10_RELEASE_RESET __HAL_RCC_TIM10_RELEASE_RESET +#define __TIM11_CLK_DISABLE __HAL_RCC_TIM11_CLK_DISABLE +#define __TIM11_CLK_ENABLE __HAL_RCC_TIM11_CLK_ENABLE +#define __TIM11_FORCE_RESET __HAL_RCC_TIM11_FORCE_RESET +#define __TIM11_RELEASE_RESET __HAL_RCC_TIM11_RELEASE_RESET +#define __TIM12_CLK_DISABLE __HAL_RCC_TIM12_CLK_DISABLE +#define __TIM12_CLK_ENABLE __HAL_RCC_TIM12_CLK_ENABLE +#define __TIM12_FORCE_RESET __HAL_RCC_TIM12_FORCE_RESET +#define __TIM12_RELEASE_RESET __HAL_RCC_TIM12_RELEASE_RESET +#define __TIM13_CLK_DISABLE __HAL_RCC_TIM13_CLK_DISABLE +#define __TIM13_CLK_ENABLE __HAL_RCC_TIM13_CLK_ENABLE +#define __TIM13_FORCE_RESET __HAL_RCC_TIM13_FORCE_RESET +#define __TIM13_RELEASE_RESET __HAL_RCC_TIM13_RELEASE_RESET +#define __TIM14_CLK_DISABLE __HAL_RCC_TIM14_CLK_DISABLE +#define __TIM14_CLK_ENABLE __HAL_RCC_TIM14_CLK_ENABLE +#define __TIM14_FORCE_RESET __HAL_RCC_TIM14_FORCE_RESET +#define __TIM14_RELEASE_RESET __HAL_RCC_TIM14_RELEASE_RESET +#define __TIM15_CLK_DISABLE __HAL_RCC_TIM15_CLK_DISABLE +#define __TIM15_CLK_ENABLE __HAL_RCC_TIM15_CLK_ENABLE +#define __TIM15_CLK_SLEEP_DISABLE __HAL_RCC_TIM15_CLK_SLEEP_DISABLE +#define __TIM15_CLK_SLEEP_ENABLE __HAL_RCC_TIM15_CLK_SLEEP_ENABLE +#define __TIM15_FORCE_RESET __HAL_RCC_TIM15_FORCE_RESET +#define __TIM15_RELEASE_RESET __HAL_RCC_TIM15_RELEASE_RESET +#define __TIM16_CLK_DISABLE __HAL_RCC_TIM16_CLK_DISABLE +#define __TIM16_CLK_ENABLE __HAL_RCC_TIM16_CLK_ENABLE +#define __TIM16_CLK_SLEEP_DISABLE __HAL_RCC_TIM16_CLK_SLEEP_DISABLE +#define __TIM16_CLK_SLEEP_ENABLE __HAL_RCC_TIM16_CLK_SLEEP_ENABLE +#define __TIM16_FORCE_RESET __HAL_RCC_TIM16_FORCE_RESET +#define __TIM16_RELEASE_RESET __HAL_RCC_TIM16_RELEASE_RESET +#define __TIM17_CLK_DISABLE __HAL_RCC_TIM17_CLK_DISABLE +#define __TIM17_CLK_ENABLE __HAL_RCC_TIM17_CLK_ENABLE +#define __TIM17_CLK_SLEEP_DISABLE __HAL_RCC_TIM17_CLK_SLEEP_DISABLE +#define __TIM17_CLK_SLEEP_ENABLE __HAL_RCC_TIM17_CLK_SLEEP_ENABLE +#define __TIM17_FORCE_RESET __HAL_RCC_TIM17_FORCE_RESET +#define __TIM17_RELEASE_RESET __HAL_RCC_TIM17_RELEASE_RESET +#define __TIM2_CLK_DISABLE __HAL_RCC_TIM2_CLK_DISABLE +#define __TIM2_CLK_ENABLE __HAL_RCC_TIM2_CLK_ENABLE +#define __TIM2_CLK_SLEEP_DISABLE __HAL_RCC_TIM2_CLK_SLEEP_DISABLE +#define __TIM2_CLK_SLEEP_ENABLE __HAL_RCC_TIM2_CLK_SLEEP_ENABLE +#define __TIM2_FORCE_RESET __HAL_RCC_TIM2_FORCE_RESET +#define __TIM2_RELEASE_RESET __HAL_RCC_TIM2_RELEASE_RESET +#define __TIM3_CLK_DISABLE __HAL_RCC_TIM3_CLK_DISABLE +#define __TIM3_CLK_ENABLE __HAL_RCC_TIM3_CLK_ENABLE +#define __TIM3_CLK_SLEEP_DISABLE __HAL_RCC_TIM3_CLK_SLEEP_DISABLE +#define __TIM3_CLK_SLEEP_ENABLE __HAL_RCC_TIM3_CLK_SLEEP_ENABLE +#define __TIM3_FORCE_RESET __HAL_RCC_TIM3_FORCE_RESET +#define __TIM3_RELEASE_RESET __HAL_RCC_TIM3_RELEASE_RESET +#define __TIM4_CLK_DISABLE __HAL_RCC_TIM4_CLK_DISABLE +#define __TIM4_CLK_ENABLE __HAL_RCC_TIM4_CLK_ENABLE +#define __TIM4_CLK_SLEEP_DISABLE __HAL_RCC_TIM4_CLK_SLEEP_DISABLE +#define __TIM4_CLK_SLEEP_ENABLE __HAL_RCC_TIM4_CLK_SLEEP_ENABLE +#define __TIM4_FORCE_RESET __HAL_RCC_TIM4_FORCE_RESET +#define __TIM4_RELEASE_RESET __HAL_RCC_TIM4_RELEASE_RESET +#define __TIM5_CLK_DISABLE __HAL_RCC_TIM5_CLK_DISABLE +#define __TIM5_CLK_ENABLE __HAL_RCC_TIM5_CLK_ENABLE +#define __TIM5_CLK_SLEEP_DISABLE __HAL_RCC_TIM5_CLK_SLEEP_DISABLE +#define __TIM5_CLK_SLEEP_ENABLE __HAL_RCC_TIM5_CLK_SLEEP_ENABLE +#define __TIM5_FORCE_RESET __HAL_RCC_TIM5_FORCE_RESET +#define __TIM5_RELEASE_RESET __HAL_RCC_TIM5_RELEASE_RESET +#define __TIM6_CLK_DISABLE __HAL_RCC_TIM6_CLK_DISABLE +#define __TIM6_CLK_ENABLE __HAL_RCC_TIM6_CLK_ENABLE +#define __TIM6_CLK_SLEEP_DISABLE __HAL_RCC_TIM6_CLK_SLEEP_DISABLE +#define __TIM6_CLK_SLEEP_ENABLE __HAL_RCC_TIM6_CLK_SLEEP_ENABLE +#define __TIM6_FORCE_RESET __HAL_RCC_TIM6_FORCE_RESET +#define __TIM6_RELEASE_RESET __HAL_RCC_TIM6_RELEASE_RESET +#define __TIM7_CLK_DISABLE __HAL_RCC_TIM7_CLK_DISABLE +#define __TIM7_CLK_ENABLE __HAL_RCC_TIM7_CLK_ENABLE +#define __TIM7_CLK_SLEEP_DISABLE __HAL_RCC_TIM7_CLK_SLEEP_DISABLE +#define __TIM7_CLK_SLEEP_ENABLE __HAL_RCC_TIM7_CLK_SLEEP_ENABLE +#define __TIM7_FORCE_RESET __HAL_RCC_TIM7_FORCE_RESET +#define __TIM7_RELEASE_RESET __HAL_RCC_TIM7_RELEASE_RESET +#define __TIM8_CLK_DISABLE __HAL_RCC_TIM8_CLK_DISABLE +#define __TIM8_CLK_ENABLE __HAL_RCC_TIM8_CLK_ENABLE +#define __TIM8_CLK_SLEEP_DISABLE __HAL_RCC_TIM8_CLK_SLEEP_DISABLE +#define __TIM8_CLK_SLEEP_ENABLE __HAL_RCC_TIM8_CLK_SLEEP_ENABLE +#define __TIM8_FORCE_RESET __HAL_RCC_TIM8_FORCE_RESET +#define __TIM8_RELEASE_RESET __HAL_RCC_TIM8_RELEASE_RESET +#define __TIM9_CLK_DISABLE __HAL_RCC_TIM9_CLK_DISABLE +#define __TIM9_CLK_ENABLE __HAL_RCC_TIM9_CLK_ENABLE +#define __TIM9_FORCE_RESET __HAL_RCC_TIM9_FORCE_RESET +#define __TIM9_RELEASE_RESET __HAL_RCC_TIM9_RELEASE_RESET +#define __TSC_CLK_DISABLE __HAL_RCC_TSC_CLK_DISABLE +#define __TSC_CLK_ENABLE __HAL_RCC_TSC_CLK_ENABLE +#define __TSC_CLK_SLEEP_DISABLE __HAL_RCC_TSC_CLK_SLEEP_DISABLE +#define __TSC_CLK_SLEEP_ENABLE __HAL_RCC_TSC_CLK_SLEEP_ENABLE +#define __TSC_FORCE_RESET __HAL_RCC_TSC_FORCE_RESET +#define __TSC_RELEASE_RESET __HAL_RCC_TSC_RELEASE_RESET +#define __UART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE +#define __UART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE +#define __UART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __UART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE +#define __UART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET +#define __UART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET +#define __UART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE +#define __UART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE +#define __UART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __UART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE +#define __UART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET +#define __UART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET +#define __USART1_CLK_DISABLE __HAL_RCC_USART1_CLK_DISABLE +#define __USART1_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE +#define __USART1_CLK_SLEEP_DISABLE __HAL_RCC_USART1_CLK_SLEEP_DISABLE +#define __USART1_CLK_SLEEP_ENABLE __HAL_RCC_USART1_CLK_SLEEP_ENABLE +#define __USART1_FORCE_RESET __HAL_RCC_USART1_FORCE_RESET +#define __USART1_RELEASE_RESET __HAL_RCC_USART1_RELEASE_RESET +#define __USART2_CLK_DISABLE __HAL_RCC_USART2_CLK_DISABLE +#define __USART2_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE +#define __USART2_CLK_SLEEP_DISABLE __HAL_RCC_USART2_CLK_SLEEP_DISABLE +#define __USART2_CLK_SLEEP_ENABLE __HAL_RCC_USART2_CLK_SLEEP_ENABLE +#define __USART2_FORCE_RESET __HAL_RCC_USART2_FORCE_RESET +#define __USART2_RELEASE_RESET __HAL_RCC_USART2_RELEASE_RESET +#define __USART3_CLK_DISABLE __HAL_RCC_USART3_CLK_DISABLE +#define __USART3_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE +#define __USART3_CLK_SLEEP_DISABLE __HAL_RCC_USART3_CLK_SLEEP_DISABLE +#define __USART3_CLK_SLEEP_ENABLE __HAL_RCC_USART3_CLK_SLEEP_ENABLE +#define __USART3_FORCE_RESET __HAL_RCC_USART3_FORCE_RESET +#define __USART3_RELEASE_RESET __HAL_RCC_USART3_RELEASE_RESET +#define __USART4_CLK_DISABLE __HAL_RCC_USART4_CLK_DISABLE +#define __USART4_CLK_ENABLE __HAL_RCC_USART4_CLK_ENABLE +#define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_USART4_CLK_SLEEP_ENABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_USART4_CLK_SLEEP_DISABLE +#define __USART4_FORCE_RESET __HAL_RCC_USART4_FORCE_RESET +#define __USART4_RELEASE_RESET __HAL_RCC_USART4_RELEASE_RESET +#define __USART5_CLK_DISABLE __HAL_RCC_USART5_CLK_DISABLE +#define __USART5_CLK_ENABLE __HAL_RCC_USART5_CLK_ENABLE +#define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_USART5_CLK_SLEEP_ENABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_USART5_CLK_SLEEP_DISABLE +#define __USART5_FORCE_RESET __HAL_RCC_USART5_FORCE_RESET +#define __USART5_RELEASE_RESET __HAL_RCC_USART5_RELEASE_RESET +#define __USART7_CLK_DISABLE __HAL_RCC_USART7_CLK_DISABLE +#define __USART7_CLK_ENABLE __HAL_RCC_USART7_CLK_ENABLE +#define __USART7_FORCE_RESET __HAL_RCC_USART7_FORCE_RESET +#define __USART7_RELEASE_RESET __HAL_RCC_USART7_RELEASE_RESET +#define __USART8_CLK_DISABLE __HAL_RCC_USART8_CLK_DISABLE +#define __USART8_CLK_ENABLE __HAL_RCC_USART8_CLK_ENABLE +#define __USART8_FORCE_RESET __HAL_RCC_USART8_FORCE_RESET +#define __USART8_RELEASE_RESET __HAL_RCC_USART8_RELEASE_RESET +#define __USB_CLK_DISABLE __HAL_RCC_USB_CLK_DISABLE +#define __USB_CLK_ENABLE __HAL_RCC_USB_CLK_ENABLE +#define __USB_FORCE_RESET __HAL_RCC_USB_FORCE_RESET +#define __USB_CLK_SLEEP_ENABLE __HAL_RCC_USB_CLK_SLEEP_ENABLE +#define __USB_CLK_SLEEP_DISABLE __HAL_RCC_USB_CLK_SLEEP_DISABLE +#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE +#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE +#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET +#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE +#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE +#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE +#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE +#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET +#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET +#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE +#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE +#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET +#define __TIM21_RELEASE_RESET __HAL_RCC_TIM21_RELEASE_RESET +#define __TIM21_CLK_SLEEP_ENABLE __HAL_RCC_TIM21_CLK_SLEEP_ENABLE +#define __TIM21_CLK_SLEEP_DISABLE __HAL_RCC_TIM21_CLK_SLEEP_DISABLE +#define __TIM22_CLK_ENABLE __HAL_RCC_TIM22_CLK_ENABLE +#define __TIM22_CLK_DISABLE __HAL_RCC_TIM22_CLK_DISABLE +#define __TIM22_FORCE_RESET __HAL_RCC_TIM22_FORCE_RESET +#define __TIM22_RELEASE_RESET __HAL_RCC_TIM22_RELEASE_RESET +#define __TIM22_CLK_SLEEP_ENABLE __HAL_RCC_TIM22_CLK_SLEEP_ENABLE +#define __TIM22_CLK_SLEEP_DISABLE __HAL_RCC_TIM22_CLK_SLEEP_DISABLE +#define __CRS_CLK_DISABLE __HAL_RCC_CRS_CLK_DISABLE +#define __CRS_CLK_ENABLE __HAL_RCC_CRS_CLK_ENABLE +#define __CRS_CLK_SLEEP_DISABLE __HAL_RCC_CRS_CLK_SLEEP_DISABLE +#define __CRS_CLK_SLEEP_ENABLE __HAL_RCC_CRS_CLK_SLEEP_ENABLE +#define __CRS_FORCE_RESET __HAL_RCC_CRS_FORCE_RESET +#define __CRS_RELEASE_RESET __HAL_RCC_CRS_RELEASE_RESET +#define __RCC_BACKUPRESET_FORCE __HAL_RCC_BACKUPRESET_FORCE +#define __RCC_BACKUPRESET_RELEASE __HAL_RCC_BACKUPRESET_RELEASE + +#define __USB_OTG_FS_FORCE_RESET __HAL_RCC_USB_OTG_FS_FORCE_RESET +#define __USB_OTG_FS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET +#define __USB_OTG_FS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE +#define __USB_OTG_FS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE +#define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE +#define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE +#define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE +#define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE +#define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE +#define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET +#define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET +#define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE +#define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE +#define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE +#define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET +#define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET +#define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE +#define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE +#define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET +#define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET +#define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE +#define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE +#define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET +#define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE +#define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE +#define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE +#define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE +#define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET +#define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET +#define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE +#define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE +#define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET +#define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET +#define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE +#define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE +#define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET +#define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET +#define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE +#define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE +#define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET +#define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET +#define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE +#define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE +#define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET +#define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE +#define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE +#define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET +#define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET +#define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE +#define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE +#define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET +#define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET +#define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE +#define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE +#define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET +#define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET +#define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE +#define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE +#define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE +#define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED +#define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __CRYP_FORCE_RESET __HAL_RCC_CRYP_FORCE_RESET +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET +#define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET +#define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET +#define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET +#define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE +#define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE +#define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET +#define __DMA2D_RELEASE_RESET __HAL_RCC_DMA2D_RELEASE_RESET +#define __DMA2D_CLK_SLEEP_ENABLE __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE +#define __DMA2D_CLK_SLEEP_DISABLE __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE + +/* alias define maintained for legacy */ +#define __HAL_RCC_OTGFS_FORCE_RESET __HAL_RCC_USB_OTG_FS_FORCE_RESET +#define __HAL_RCC_OTGFS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET + +#define __ADC12_CLK_ENABLE __HAL_RCC_ADC12_CLK_ENABLE +#define __ADC12_CLK_DISABLE __HAL_RCC_ADC12_CLK_DISABLE +#define __ADC34_CLK_ENABLE __HAL_RCC_ADC34_CLK_ENABLE +#define __ADC34_CLK_DISABLE __HAL_RCC_ADC34_CLK_DISABLE +#define __ADC12_CLK_ENABLE __HAL_RCC_ADC12_CLK_ENABLE +#define __ADC12_CLK_DISABLE __HAL_RCC_ADC12_CLK_DISABLE +#define __DAC2_CLK_ENABLE __HAL_RCC_DAC2_CLK_ENABLE +#define __DAC2_CLK_DISABLE __HAL_RCC_DAC2_CLK_DISABLE +#define __TIM18_CLK_ENABLE __HAL_RCC_TIM18_CLK_ENABLE +#define __TIM18_CLK_DISABLE __HAL_RCC_TIM18_CLK_DISABLE +#define __TIM19_CLK_ENABLE __HAL_RCC_TIM19_CLK_ENABLE +#define __TIM19_CLK_DISABLE __HAL_RCC_TIM19_CLK_DISABLE +#define __TIM20_CLK_ENABLE __HAL_RCC_TIM20_CLK_ENABLE +#define __TIM20_CLK_DISABLE __HAL_RCC_TIM20_CLK_DISABLE +#define __HRTIM1_CLK_ENABLE __HAL_RCC_HRTIM1_CLK_ENABLE +#define __HRTIM1_CLK_DISABLE __HAL_RCC_HRTIM1_CLK_DISABLE +#define __SDADC1_CLK_ENABLE __HAL_RCC_SDADC1_CLK_ENABLE +#define __SDADC2_CLK_ENABLE __HAL_RCC_SDADC2_CLK_ENABLE +#define __SDADC3_CLK_ENABLE __HAL_RCC_SDADC3_CLK_ENABLE +#define __SDADC1_CLK_DISABLE __HAL_RCC_SDADC1_CLK_DISABLE +#define __SDADC2_CLK_DISABLE __HAL_RCC_SDADC2_CLK_DISABLE +#define __SDADC3_CLK_DISABLE __HAL_RCC_SDADC3_CLK_DISABLE + +#define __ADC12_FORCE_RESET __HAL_RCC_ADC12_FORCE_RESET +#define __ADC12_RELEASE_RESET __HAL_RCC_ADC12_RELEASE_RESET +#define __ADC34_FORCE_RESET __HAL_RCC_ADC34_FORCE_RESET +#define __ADC34_RELEASE_RESET __HAL_RCC_ADC34_RELEASE_RESET +#define __ADC12_FORCE_RESET __HAL_RCC_ADC12_FORCE_RESET +#define __ADC12_RELEASE_RESET __HAL_RCC_ADC12_RELEASE_RESET +#define __DAC2_FORCE_RESET __HAL_RCC_DAC2_FORCE_RESET +#define __DAC2_RELEASE_RESET __HAL_RCC_DAC2_RELEASE_RESET +#define __TIM18_FORCE_RESET __HAL_RCC_TIM18_FORCE_RESET +#define __TIM18_RELEASE_RESET __HAL_RCC_TIM18_RELEASE_RESET +#define __TIM19_FORCE_RESET __HAL_RCC_TIM19_FORCE_RESET +#define __TIM19_RELEASE_RESET __HAL_RCC_TIM19_RELEASE_RESET +#define __TIM20_FORCE_RESET __HAL_RCC_TIM20_FORCE_RESET +#define __TIM20_RELEASE_RESET __HAL_RCC_TIM20_RELEASE_RESET +#define __HRTIM1_FORCE_RESET __HAL_RCC_HRTIM1_FORCE_RESET +#define __HRTIM1_RELEASE_RESET __HAL_RCC_HRTIM1_RELEASE_RESET +#define __SDADC1_FORCE_RESET __HAL_RCC_SDADC1_FORCE_RESET +#define __SDADC2_FORCE_RESET __HAL_RCC_SDADC2_FORCE_RESET +#define __SDADC3_FORCE_RESET __HAL_RCC_SDADC3_FORCE_RESET +#define __SDADC1_RELEASE_RESET __HAL_RCC_SDADC1_RELEASE_RESET +#define __SDADC2_RELEASE_RESET __HAL_RCC_SDADC2_RELEASE_RESET +#define __SDADC3_RELEASE_RESET __HAL_RCC_SDADC3_RELEASE_RESET + +#define __ADC1_IS_CLK_ENABLED __HAL_RCC_ADC1_IS_CLK_ENABLED +#define __ADC1_IS_CLK_DISABLED __HAL_RCC_ADC1_IS_CLK_DISABLED +#define __ADC12_IS_CLK_ENABLED __HAL_RCC_ADC12_IS_CLK_ENABLED +#define __ADC12_IS_CLK_DISABLED __HAL_RCC_ADC12_IS_CLK_DISABLED +#define __ADC34_IS_CLK_ENABLED __HAL_RCC_ADC34_IS_CLK_ENABLED +#define __ADC34_IS_CLK_DISABLED __HAL_RCC_ADC34_IS_CLK_DISABLED +#define __CEC_IS_CLK_ENABLED __HAL_RCC_CEC_IS_CLK_ENABLED +#define __CEC_IS_CLK_DISABLED __HAL_RCC_CEC_IS_CLK_DISABLED +#define __CRC_IS_CLK_ENABLED __HAL_RCC_CRC_IS_CLK_ENABLED +#define __CRC_IS_CLK_DISABLED __HAL_RCC_CRC_IS_CLK_DISABLED +#define __DAC1_IS_CLK_ENABLED __HAL_RCC_DAC1_IS_CLK_ENABLED +#define __DAC1_IS_CLK_DISABLED __HAL_RCC_DAC1_IS_CLK_DISABLED +#define __DAC2_IS_CLK_ENABLED __HAL_RCC_DAC2_IS_CLK_ENABLED +#define __DAC2_IS_CLK_DISABLED __HAL_RCC_DAC2_IS_CLK_DISABLED +#define __DMA1_IS_CLK_ENABLED __HAL_RCC_DMA1_IS_CLK_ENABLED +#define __DMA1_IS_CLK_DISABLED __HAL_RCC_DMA1_IS_CLK_DISABLED +#define __DMA2_IS_CLK_ENABLED __HAL_RCC_DMA2_IS_CLK_ENABLED +#define __DMA2_IS_CLK_DISABLED __HAL_RCC_DMA2_IS_CLK_DISABLED +#define __FLITF_IS_CLK_ENABLED __HAL_RCC_FLITF_IS_CLK_ENABLED +#define __FLITF_IS_CLK_DISABLED __HAL_RCC_FLITF_IS_CLK_DISABLED +#define __FMC_IS_CLK_ENABLED __HAL_RCC_FMC_IS_CLK_ENABLED +#define __FMC_IS_CLK_DISABLED __HAL_RCC_FMC_IS_CLK_DISABLED +#define __GPIOA_IS_CLK_ENABLED __HAL_RCC_GPIOA_IS_CLK_ENABLED +#define __GPIOA_IS_CLK_DISABLED __HAL_RCC_GPIOA_IS_CLK_DISABLED +#define __GPIOB_IS_CLK_ENABLED __HAL_RCC_GPIOB_IS_CLK_ENABLED +#define __GPIOB_IS_CLK_DISABLED __HAL_RCC_GPIOB_IS_CLK_DISABLED +#define __GPIOC_IS_CLK_ENABLED __HAL_RCC_GPIOC_IS_CLK_ENABLED +#define __GPIOC_IS_CLK_DISABLED __HAL_RCC_GPIOC_IS_CLK_DISABLED +#define __GPIOD_IS_CLK_ENABLED __HAL_RCC_GPIOD_IS_CLK_ENABLED +#define __GPIOD_IS_CLK_DISABLED __HAL_RCC_GPIOD_IS_CLK_DISABLED +#define __GPIOE_IS_CLK_ENABLED __HAL_RCC_GPIOE_IS_CLK_ENABLED +#define __GPIOE_IS_CLK_DISABLED __HAL_RCC_GPIOE_IS_CLK_DISABLED +#define __GPIOF_IS_CLK_ENABLED __HAL_RCC_GPIOF_IS_CLK_ENABLED +#define __GPIOF_IS_CLK_DISABLED __HAL_RCC_GPIOF_IS_CLK_DISABLED +#define __GPIOG_IS_CLK_ENABLED __HAL_RCC_GPIOG_IS_CLK_ENABLED +#define __GPIOG_IS_CLK_DISABLED __HAL_RCC_GPIOG_IS_CLK_DISABLED +#define __GPIOH_IS_CLK_ENABLED __HAL_RCC_GPIOH_IS_CLK_ENABLED +#define __GPIOH_IS_CLK_DISABLED __HAL_RCC_GPIOH_IS_CLK_DISABLED +#define __HRTIM1_IS_CLK_ENABLED __HAL_RCC_HRTIM1_IS_CLK_ENABLED +#define __HRTIM1_IS_CLK_DISABLED __HAL_RCC_HRTIM1_IS_CLK_DISABLED +#define __I2C1_IS_CLK_ENABLED __HAL_RCC_I2C1_IS_CLK_ENABLED +#define __I2C1_IS_CLK_DISABLED __HAL_RCC_I2C1_IS_CLK_DISABLED +#define __I2C2_IS_CLK_ENABLED __HAL_RCC_I2C2_IS_CLK_ENABLED +#define __I2C2_IS_CLK_DISABLED __HAL_RCC_I2C2_IS_CLK_DISABLED +#define __I2C3_IS_CLK_ENABLED __HAL_RCC_I2C3_IS_CLK_ENABLED +#define __I2C3_IS_CLK_DISABLED __HAL_RCC_I2C3_IS_CLK_DISABLED +#define __PWR_IS_CLK_ENABLED __HAL_RCC_PWR_IS_CLK_ENABLED +#define __PWR_IS_CLK_DISABLED __HAL_RCC_PWR_IS_CLK_DISABLED +#define __SYSCFG_IS_CLK_ENABLED __HAL_RCC_SYSCFG_IS_CLK_ENABLED +#define __SYSCFG_IS_CLK_DISABLED __HAL_RCC_SYSCFG_IS_CLK_DISABLED +#define __SPI1_IS_CLK_ENABLED __HAL_RCC_SPI1_IS_CLK_ENABLED +#define __SPI1_IS_CLK_DISABLED __HAL_RCC_SPI1_IS_CLK_DISABLED +#define __SPI2_IS_CLK_ENABLED __HAL_RCC_SPI2_IS_CLK_ENABLED +#define __SPI2_IS_CLK_DISABLED __HAL_RCC_SPI2_IS_CLK_DISABLED +#define __SPI3_IS_CLK_ENABLED __HAL_RCC_SPI3_IS_CLK_ENABLED +#define __SPI3_IS_CLK_DISABLED __HAL_RCC_SPI3_IS_CLK_DISABLED +#define __SPI4_IS_CLK_ENABLED __HAL_RCC_SPI4_IS_CLK_ENABLED +#define __SPI4_IS_CLK_DISABLED __HAL_RCC_SPI4_IS_CLK_DISABLED +#define __SDADC1_IS_CLK_ENABLED __HAL_RCC_SDADC1_IS_CLK_ENABLED +#define __SDADC1_IS_CLK_DISABLED __HAL_RCC_SDADC1_IS_CLK_DISABLED +#define __SDADC2_IS_CLK_ENABLED __HAL_RCC_SDADC2_IS_CLK_ENABLED +#define __SDADC2_IS_CLK_DISABLED __HAL_RCC_SDADC2_IS_CLK_DISABLED +#define __SDADC3_IS_CLK_ENABLED __HAL_RCC_SDADC3_IS_CLK_ENABLED +#define __SDADC3_IS_CLK_DISABLED __HAL_RCC_SDADC3_IS_CLK_DISABLED +#define __SRAM_IS_CLK_ENABLED __HAL_RCC_SRAM_IS_CLK_ENABLED +#define __SRAM_IS_CLK_DISABLED __HAL_RCC_SRAM_IS_CLK_DISABLED +#define __TIM1_IS_CLK_ENABLED __HAL_RCC_TIM1_IS_CLK_ENABLED +#define __TIM1_IS_CLK_DISABLED __HAL_RCC_TIM1_IS_CLK_DISABLED +#define __TIM2_IS_CLK_ENABLED __HAL_RCC_TIM2_IS_CLK_ENABLED +#define __TIM2_IS_CLK_DISABLED __HAL_RCC_TIM2_IS_CLK_DISABLED +#define __TIM3_IS_CLK_ENABLED __HAL_RCC_TIM3_IS_CLK_ENABLED +#define __TIM3_IS_CLK_DISABLED __HAL_RCC_TIM3_IS_CLK_DISABLED +#define __TIM4_IS_CLK_ENABLED __HAL_RCC_TIM4_IS_CLK_ENABLED +#define __TIM4_IS_CLK_DISABLED __HAL_RCC_TIM4_IS_CLK_DISABLED +#define __TIM5_IS_CLK_ENABLED __HAL_RCC_TIM5_IS_CLK_ENABLED +#define __TIM5_IS_CLK_DISABLED __HAL_RCC_TIM5_IS_CLK_DISABLED +#define __TIM6_IS_CLK_ENABLED __HAL_RCC_TIM6_IS_CLK_ENABLED +#define __TIM6_IS_CLK_DISABLED __HAL_RCC_TIM6_IS_CLK_DISABLED +#define __TIM7_IS_CLK_ENABLED __HAL_RCC_TIM7_IS_CLK_ENABLED +#define __TIM7_IS_CLK_DISABLED __HAL_RCC_TIM7_IS_CLK_DISABLED +#define __TIM8_IS_CLK_ENABLED __HAL_RCC_TIM8_IS_CLK_ENABLED +#define __TIM8_IS_CLK_DISABLED __HAL_RCC_TIM8_IS_CLK_DISABLED +#define __TIM12_IS_CLK_ENABLED __HAL_RCC_TIM12_IS_CLK_ENABLED +#define __TIM12_IS_CLK_DISABLED __HAL_RCC_TIM12_IS_CLK_DISABLED +#define __TIM13_IS_CLK_ENABLED __HAL_RCC_TIM13_IS_CLK_ENABLED +#define __TIM13_IS_CLK_DISABLED __HAL_RCC_TIM13_IS_CLK_DISABLED +#define __TIM14_IS_CLK_ENABLED __HAL_RCC_TIM14_IS_CLK_ENABLED +#define __TIM14_IS_CLK_DISABLED __HAL_RCC_TIM14_IS_CLK_DISABLED +#define __TIM15_IS_CLK_ENABLED __HAL_RCC_TIM15_IS_CLK_ENABLED +#define __TIM15_IS_CLK_DISABLED __HAL_RCC_TIM15_IS_CLK_DISABLED +#define __TIM16_IS_CLK_ENABLED __HAL_RCC_TIM16_IS_CLK_ENABLED +#define __TIM16_IS_CLK_DISABLED __HAL_RCC_TIM16_IS_CLK_DISABLED +#define __TIM17_IS_CLK_ENABLED __HAL_RCC_TIM17_IS_CLK_ENABLED +#define __TIM17_IS_CLK_DISABLED __HAL_RCC_TIM17_IS_CLK_DISABLED +#define __TIM18_IS_CLK_ENABLED __HAL_RCC_TIM18_IS_CLK_ENABLED +#define __TIM18_IS_CLK_DISABLED __HAL_RCC_TIM18_IS_CLK_DISABLED +#define __TIM19_IS_CLK_ENABLED __HAL_RCC_TIM19_IS_CLK_ENABLED +#define __TIM19_IS_CLK_DISABLED __HAL_RCC_TIM19_IS_CLK_DISABLED +#define __TIM20_IS_CLK_ENABLED __HAL_RCC_TIM20_IS_CLK_ENABLED +#define __TIM20_IS_CLK_DISABLED __HAL_RCC_TIM20_IS_CLK_DISABLED +#define __TSC_IS_CLK_ENABLED __HAL_RCC_TSC_IS_CLK_ENABLED +#define __TSC_IS_CLK_DISABLED __HAL_RCC_TSC_IS_CLK_DISABLED +#define __UART4_IS_CLK_ENABLED __HAL_RCC_UART4_IS_CLK_ENABLED +#define __UART4_IS_CLK_DISABLED __HAL_RCC_UART4_IS_CLK_DISABLED +#define __UART5_IS_CLK_ENABLED __HAL_RCC_UART5_IS_CLK_ENABLED +#define __UART5_IS_CLK_DISABLED __HAL_RCC_UART5_IS_CLK_DISABLED +#define __USART1_IS_CLK_ENABLED __HAL_RCC_USART1_IS_CLK_ENABLED +#define __USART1_IS_CLK_DISABLED __HAL_RCC_USART1_IS_CLK_DISABLED +#define __USART2_IS_CLK_ENABLED __HAL_RCC_USART2_IS_CLK_ENABLED +#define __USART2_IS_CLK_DISABLED __HAL_RCC_USART2_IS_CLK_DISABLED +#define __USART3_IS_CLK_ENABLED __HAL_RCC_USART3_IS_CLK_ENABLED +#define __USART3_IS_CLK_DISABLED __HAL_RCC_USART3_IS_CLK_DISABLED +#define __USB_IS_CLK_ENABLED __HAL_RCC_USB_IS_CLK_ENABLED +#define __USB_IS_CLK_DISABLED __HAL_RCC_USB_IS_CLK_DISABLED +#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED +#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED + +#if defined(STM32F4) +#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET +#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET +#define __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE +#define __HAL_RCC_SDMMC1_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE +#define __HAL_RCC_SDMMC1_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE +#define __HAL_RCC_SDMMC1_IS_CLK_ENABLED __HAL_RCC_SDIO_IS_CLK_ENABLED +#define __HAL_RCC_SDMMC1_IS_CLK_DISABLED __HAL_RCC_SDIO_IS_CLK_DISABLED +#define Sdmmc1ClockSelection SdioClockSelection +#define RCC_PERIPHCLK_SDMMC1 RCC_PERIPHCLK_SDIO +#define RCC_SDMMC1CLKSOURCE_CLK48 RCC_SDIOCLKSOURCE_CK48 +#define RCC_SDMMC1CLKSOURCE_SYSCLK RCC_SDIOCLKSOURCE_SYSCLK +#define __HAL_RCC_SDMMC1_CONFIG __HAL_RCC_SDIO_CONFIG +#define __HAL_RCC_GET_SDMMC1_SOURCE __HAL_RCC_GET_SDIO_SOURCE +#endif + +#if defined(STM32F7) || defined(STM32L4) +#define __HAL_RCC_SDIO_FORCE_RESET __HAL_RCC_SDMMC1_FORCE_RESET +#define __HAL_RCC_SDIO_RELEASE_RESET __HAL_RCC_SDMMC1_RELEASE_RESET +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE +#define __HAL_RCC_SDIO_CLK_ENABLE __HAL_RCC_SDMMC1_CLK_ENABLE +#define __HAL_RCC_SDIO_CLK_DISABLE __HAL_RCC_SDMMC1_CLK_DISABLE +#define __HAL_RCC_SDIO_IS_CLK_ENABLED __HAL_RCC_SDMMC1_IS_CLK_ENABLED +#define __HAL_RCC_SDIO_IS_CLK_DISABLED __HAL_RCC_SDMMC1_IS_CLK_DISABLED +#define SdioClockSelection Sdmmc1ClockSelection +#define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 +#define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#endif + +#if defined(STM32F7) +#define RCC_SDIOCLKSOURCE_CLK48 RCC_SDMMC1CLKSOURCE_CLK48 +#define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK +#endif + +#define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG +#define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG + +#define __RCC_PLLSRC RCC_GET_PLL_OSCSOURCE + +#define IS_RCC_MSIRANGE IS_RCC_MSI_CLOCK_RANGE +#define IS_RCC_RTCCLK_SOURCE IS_RCC_RTCCLKSOURCE +#define IS_RCC_SYSCLK_DIV IS_RCC_HCLK +#define IS_RCC_HCLK_DIV IS_RCC_PCLK +#define IS_RCC_PERIPHCLK IS_RCC_PERIPHCLOCK + +#define RCC_IT_HSI14 RCC_IT_HSI14RDY + +#if defined(STM32L0) +#define RCC_IT_LSECSS RCC_IT_CSSLSE +#define RCC_IT_CSS RCC_IT_CSSHSE +#endif + +#define IS_RCC_MCOSOURCE IS_RCC_MCO1SOURCE +#define __HAL_RCC_MCO_CONFIG __HAL_RCC_MCO1_CONFIG +#define RCC_MCO_NODIV RCC_MCODIV_1 +#define RCC_MCO_DIV1 RCC_MCODIV_1 +#define RCC_MCO_DIV2 RCC_MCODIV_2 +#define RCC_MCO_DIV4 RCC_MCODIV_4 +#define RCC_MCO_DIV8 RCC_MCODIV_8 +#define RCC_MCO_DIV16 RCC_MCODIV_16 +#define RCC_MCO_DIV32 RCC_MCODIV_32 +#define RCC_MCO_DIV64 RCC_MCODIV_64 +#define RCC_MCO_DIV128 RCC_MCODIV_128 +#define RCC_MCOSOURCE_NONE RCC_MCO1SOURCE_NOCLOCK +#define RCC_MCOSOURCE_LSI RCC_MCO1SOURCE_LSI +#define RCC_MCOSOURCE_LSE RCC_MCO1SOURCE_LSE +#define RCC_MCOSOURCE_SYSCLK RCC_MCO1SOURCE_SYSCLK +#define RCC_MCOSOURCE_HSI RCC_MCO1SOURCE_HSI +#define RCC_MCOSOURCE_HSI14 RCC_MCO1SOURCE_HSI14 +#define RCC_MCOSOURCE_HSI48 RCC_MCO1SOURCE_HSI48 +#define RCC_MCOSOURCE_HSE RCC_MCO1SOURCE_HSE +#define RCC_MCOSOURCE_PLLCLK_DIV1 RCC_MCO1SOURCE_PLLCLK +#define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK +#define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 + +#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK + +#define RCC_USBCLK_PLLSAI1 RCC_USBCLKSOURCE_PLLSAI1 +#define RCC_USBCLK_PLL RCC_USBCLKSOURCE_PLL +#define RCC_USBCLK_MSI RCC_USBCLKSOURCE_MSI +#define RCC_USBCLKSOURCE_PLLCLK RCC_USBCLKSOURCE_PLL +#define RCC_USBPLLCLK_DIV1 RCC_USBCLKSOURCE_PLL +#define RCC_USBPLLCLK_DIV1_5 RCC_USBCLKSOURCE_PLL_DIV1_5 +#define RCC_USBPLLCLK_DIV2 RCC_USBCLKSOURCE_PLL_DIV2 +#define RCC_USBPLLCLK_DIV3 RCC_USBCLKSOURCE_PLL_DIV3 + +#define HSION_BitNumber RCC_HSION_BIT_NUMBER +#define HSION_BITNUMBER RCC_HSION_BIT_NUMBER +#define HSEON_BitNumber RCC_HSEON_BIT_NUMBER +#define HSEON_BITNUMBER RCC_HSEON_BIT_NUMBER +#define MSION_BITNUMBER RCC_MSION_BIT_NUMBER +#define CSSON_BitNumber RCC_CSSON_BIT_NUMBER +#define CSSON_BITNUMBER RCC_CSSON_BIT_NUMBER +#define PLLON_BitNumber RCC_PLLON_BIT_NUMBER +#define PLLON_BITNUMBER RCC_PLLON_BIT_NUMBER +#define PLLI2SON_BitNumber RCC_PLLI2SON_BIT_NUMBER +#define I2SSRC_BitNumber RCC_I2SSRC_BIT_NUMBER +#define RTCEN_BitNumber RCC_RTCEN_BIT_NUMBER +#define RTCEN_BITNUMBER RCC_RTCEN_BIT_NUMBER +#define BDRST_BitNumber RCC_BDRST_BIT_NUMBER +#define BDRST_BITNUMBER RCC_BDRST_BIT_NUMBER +#define RTCRST_BITNUMBER RCC_RTCRST_BIT_NUMBER +#define LSION_BitNumber RCC_LSION_BIT_NUMBER +#define LSION_BITNUMBER RCC_LSION_BIT_NUMBER +#define LSEON_BitNumber RCC_LSEON_BIT_NUMBER +#define LSEON_BITNUMBER RCC_LSEON_BIT_NUMBER +#define LSEBYP_BITNUMBER RCC_LSEBYP_BIT_NUMBER +#define PLLSAION_BitNumber RCC_PLLSAION_BIT_NUMBER +#define TIMPRE_BitNumber RCC_TIMPRE_BIT_NUMBER +#define RMVF_BitNumber RCC_RMVF_BIT_NUMBER +#define RMVF_BITNUMBER RCC_RMVF_BIT_NUMBER +#define RCC_CR2_HSI14TRIM_BitNumber RCC_HSI14TRIM_BIT_NUMBER +#define CR_BYTE2_ADDRESS RCC_CR_BYTE2_ADDRESS +#define CIR_BYTE1_ADDRESS RCC_CIR_BYTE1_ADDRESS +#define CIR_BYTE2_ADDRESS RCC_CIR_BYTE2_ADDRESS +#define BDCR_BYTE0_ADDRESS RCC_BDCR_BYTE0_ADDRESS +#define DBP_TIMEOUT_VALUE RCC_DBP_TIMEOUT_VALUE +#define LSE_TIMEOUT_VALUE RCC_LSE_TIMEOUT_VALUE + +#define CR_HSION_BB RCC_CR_HSION_BB +#define CR_CSSON_BB RCC_CR_CSSON_BB +#define CR_PLLON_BB RCC_CR_PLLON_BB +#define CR_PLLI2SON_BB RCC_CR_PLLI2SON_BB +#define CR_MSION_BB RCC_CR_MSION_BB +#define CSR_LSION_BB RCC_CSR_LSION_BB +#define CSR_LSEON_BB RCC_CSR_LSEON_BB +#define CSR_LSEBYP_BB RCC_CSR_LSEBYP_BB +#define CSR_RTCEN_BB RCC_CSR_RTCEN_BB +#define CSR_RTCRST_BB RCC_CSR_RTCRST_BB +#define CFGR_I2SSRC_BB RCC_CFGR_I2SSRC_BB +#define BDCR_RTCEN_BB RCC_BDCR_RTCEN_BB +#define BDCR_BDRST_BB RCC_BDCR_BDRST_BB +#define CR_HSEON_BB RCC_CR_HSEON_BB +#define CSR_RMVF_BB RCC_CSR_RMVF_BB +#define CR_PLLSAION_BB RCC_CR_PLLSAION_BB +#define DCKCFGR_TIMPRE_BB RCC_DCKCFGR_TIMPRE_BB + +#define __HAL_RCC_CRS_ENABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE +#define __HAL_RCC_CRS_DISABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE +#define __HAL_RCC_CRS_ENABLE_AUTOMATIC_CALIB __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE +#define __HAL_RCC_CRS_DISABLE_AUTOMATIC_CALIB __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE +#define __HAL_RCC_CRS_CALCULATE_RELOADVALUE __HAL_RCC_CRS_RELOADVALUE_CALCULATE + +#define __HAL_RCC_GET_IT_SOURCE __HAL_RCC_GET_IT + +#define RCC_CRS_SYNCWARM RCC_CRS_SYNCWARN +#define RCC_CRS_TRIMOV RCC_CRS_TRIMOVF + +#define RCC_PERIPHCLK_CK48 RCC_PERIPHCLK_CLK48 +#define RCC_CK48CLKSOURCE_PLLQ RCC_CLK48CLKSOURCE_PLLQ +#define RCC_CK48CLKSOURCE_PLLSAIP RCC_CLK48CLKSOURCE_PLLSAIP +#define RCC_CK48CLKSOURCE_PLLI2SQ RCC_CLK48CLKSOURCE_PLLI2SQ +#define IS_RCC_CK48CLKSOURCE IS_RCC_CLK48CLKSOURCE +#define RCC_SDIOCLKSOURCE_CK48 RCC_SDIOCLKSOURCE_CLK48 + +#define __HAL_RCC_DFSDM_CLK_ENABLE __HAL_RCC_DFSDM1_CLK_ENABLE +#define __HAL_RCC_DFSDM_CLK_DISABLE __HAL_RCC_DFSDM1_CLK_DISABLE +#define __HAL_RCC_DFSDM_IS_CLK_ENABLED __HAL_RCC_DFSDM1_IS_CLK_ENABLED +#define __HAL_RCC_DFSDM_IS_CLK_DISABLED __HAL_RCC_DFSDM1_IS_CLK_DISABLED +#define __HAL_RCC_DFSDM_FORCE_RESET __HAL_RCC_DFSDM1_FORCE_RESET +#define __HAL_RCC_DFSDM_RELEASE_RESET __HAL_RCC_DFSDM1_RELEASE_RESET +#define __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE +#define __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE +#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_ENABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED +#define DfsdmClockSelection Dfsdm1ClockSelection +#define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK +#define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG +#define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE + +/** + * @} + */ + +/** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose + * @{ + */ +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) + +/** + * @} + */ + +/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT +#define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT + +#if defined (STM32F1) +#define __HAL_RTC_EXTI_CLEAR_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() + +#define __HAL_RTC_EXTI_ENABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_ENABLE_IT() + +#define __HAL_RTC_EXTI_DISABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_DISABLE_IT() + +#define __HAL_RTC_EXTI_GET_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GET_FLAG() + +#define __HAL_RTC_EXTI_GENERATE_SWIT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() +#else +#define __HAL_RTC_EXTI_CLEAR_FLAG(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG())) +#define __HAL_RTC_EXTI_ENABLE_IT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_ENABLE_IT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT())) +#define __HAL_RTC_EXTI_DISABLE_IT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_DISABLE_IT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT())) +#define __HAL_RTC_EXTI_GET_FLAG(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GET_FLAG() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG())) +#define __HAL_RTC_EXTI_GENERATE_SWIT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GENERATE_SWIT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GENERATE_SWIT())) +#endif /* STM32F1 */ + +#define IS_ALARM IS_RTC_ALARM +#define IS_ALARM_MASK IS_RTC_ALARM_MASK +#define IS_TAMPER IS_RTC_TAMPER +#define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT +#define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE +#define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION +#define IS_TAMPER_PULLUP_STATE IS_RTC_TAMPER_PULLUP_STATE +#define IS_TAMPER_SAMPLING_FREQ IS_RTC_TAMPER_SAMPLING_FREQ +#define IS_TAMPER_TIMESTAMPONTAMPER_DETECTION IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION +#define IS_TAMPER_TRIGGER IS_RTC_TAMPER_TRIGGER +#define IS_WAKEUP_CLOCK IS_RTC_WAKEUP_CLOCK +#define IS_WAKEUP_COUNTER IS_RTC_WAKEUP_COUNTER + +#define __RTC_WRITEPROTECTION_ENABLE __HAL_RTC_WRITEPROTECTION_ENABLE +#define __RTC_WRITEPROTECTION_DISABLE __HAL_RTC_WRITEPROTECTION_DISABLE + +/** + * @} + */ + +/** @defgroup HAL_SD_Aliased_Macros HAL SD Aliased Macros maintained for legacy purpose + * @{ + */ + +#define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE +#define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS + +#if defined(STM32F4) +#define SD_SDMMC_DISABLED SD_SDIO_DISABLED +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND +/* alias CMSIS */ +#define SDMMC1_IRQn SDIO_IRQn +#define SDMMC1_IRQHandler SDIO_IRQHandler +#endif + +#if defined(STM32F7) || defined(STM32L4) +#define SD_SDIO_DISABLED SD_SDMMC_DISABLED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION +#define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND +#define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT +#define SD_CMD_SDIO_RW_EXTENDED SD_CMD_SDMMC_RW_EXTENDED +#define __HAL_SD_SDIO_ENABLE __HAL_SD_SDMMC_ENABLE +#define __HAL_SD_SDIO_DISABLE __HAL_SD_SDMMC_DISABLE +#define __HAL_SD_SDIO_DMA_ENABLE __HAL_SD_SDMMC_DMA_ENABLE +#define __HAL_SD_SDIO_DMA_DISABL __HAL_SD_SDMMC_DMA_DISABLE +#define __HAL_SD_SDIO_ENABLE_IT __HAL_SD_SDMMC_ENABLE_IT +#define __HAL_SD_SDIO_DISABLE_IT __HAL_SD_SDMMC_DISABLE_IT +#define __HAL_SD_SDIO_GET_FLAG __HAL_SD_SDMMC_GET_FLAG +#define __HAL_SD_SDIO_CLEAR_FLAG __HAL_SD_SDMMC_CLEAR_FLAG +#define __HAL_SD_SDIO_GET_IT __HAL_SD_SDMMC_GET_IT +#define __HAL_SD_SDIO_CLEAR_IT __HAL_SD_SDMMC_CLEAR_IT +#define SDIO_STATIC_FLAGS SDMMC_STATIC_FLAGS +#define SDIO_CMD0TIMEOUT SDMMC_CMD0TIMEOUT +#define SD_SDIO_SEND_IF_COND SD_SDMMC_SEND_IF_COND +/* alias CMSIS for compatibilities */ +#define SDIO_IRQn SDMMC1_IRQn +#define SDIO_IRQHandler SDMMC1_IRQHandler +#endif +/** + * @} + */ + +/** @defgroup HAL_SMARTCARD_Aliased_Macros HAL SMARTCARD Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __SMARTCARD_ENABLE_IT __HAL_SMARTCARD_ENABLE_IT +#define __SMARTCARD_DISABLE_IT __HAL_SMARTCARD_DISABLE_IT +#define __SMARTCARD_ENABLE __HAL_SMARTCARD_ENABLE +#define __SMARTCARD_DISABLE __HAL_SMARTCARD_DISABLE +#define __SMARTCARD_DMA_REQUEST_ENABLE __HAL_SMARTCARD_DMA_REQUEST_ENABLE +#define __SMARTCARD_DMA_REQUEST_DISABLE __HAL_SMARTCARD_DMA_REQUEST_DISABLE + +#define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE +#define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE + +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE + +/** + * @} + */ + +/** @defgroup HAL_SMBUS_Aliased_Macros HAL SMBUS Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_SMBUS_RESET_CR1 SMBUS_RESET_CR1 +#define __HAL_SMBUS_RESET_CR2 SMBUS_RESET_CR2 +#define __HAL_SMBUS_GENERATE_START SMBUS_GENERATE_START +#define __HAL_SMBUS_GET_ADDR_MATCH SMBUS_GET_ADDR_MATCH +#define __HAL_SMBUS_GET_DIR SMBUS_GET_DIR +#define __HAL_SMBUS_GET_STOP_MODE SMBUS_GET_STOP_MODE +#define __HAL_SMBUS_GET_PEC_MODE SMBUS_GET_PEC_MODE +#define __HAL_SMBUS_GET_ALERT_ENABLED SMBUS_GET_ALERT_ENABLED +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Macros HAL SPI Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_SPI_1LINE_TX SPI_1LINE_TX +#define __HAL_SPI_1LINE_RX SPI_1LINE_RX +#define __HAL_SPI_RESET_CRC SPI_RESET_CRC + +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_UART_GETCLOCKSOURCE UART_GETCLOCKSOURCE +#define __HAL_UART_MASK_COMPUTATION UART_MASK_COMPUTATION +#define __UART_GETCLOCKSOURCE UART_GETCLOCKSOURCE +#define __UART_MASK_COMPUTATION UART_MASK_COMPUTATION + +#define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD + +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE + +/** + * @} + */ + + +/** @defgroup HAL_USART_Aliased_Macros HAL USART Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __USART_ENABLE_IT __HAL_USART_ENABLE_IT +#define __USART_DISABLE_IT __HAL_USART_DISABLE_IT +#define __USART_ENABLE __HAL_USART_ENABLE +#define __USART_DISABLE __HAL_USART_DISABLE + +#define __HAL_USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE +#define __USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE + +/** + * @} + */ + +/** @defgroup HAL_USB_Aliased_Macros HAL USB Aliased Macros maintained for legacy purpose + * @{ + */ +#define USB_EXTI_LINE_WAKEUP USB_WAKEUP_EXTI_LINE + +#define USB_FS_EXTI_TRIGGER_RISING_EDGE USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE +#define USB_FS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE +#define USB_FS_EXTI_TRIGGER_BOTH_EDGE USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE +#define USB_FS_EXTI_LINE_WAKEUP USB_OTG_FS_WAKEUP_EXTI_LINE + +#define USB_HS_EXTI_TRIGGER_RISING_EDGE USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE +#define USB_HS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE +#define USB_HS_EXTI_TRIGGER_BOTH_EDGE USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE +#define USB_HS_EXTI_LINE_WAKEUP USB_OTG_HS_WAKEUP_EXTI_LINE + +#define __HAL_USB_EXTI_ENABLE_IT __HAL_USB_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_EXTI_DISABLE_IT __HAL_USB_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_EXTI_GET_FLAG __HAL_USB_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_EXTI_CLEAR_FLAG __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_EXTI_SET_RISING_EDGE_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_EXTI_SET_FALLING_EDGE_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE + +#define __HAL_USB_FS_EXTI_ENABLE_IT __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_FS_EXTI_DISABLE_IT __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_FS_EXTI_GET_FLAG __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_FS_EXTI_CLEAR_FLAG __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_FS_EXTI_SET_RISING_EGDE_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_FS_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_FS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE +#define __HAL_USB_FS_EXTI_GENERATE_SWIT __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT + +#define __HAL_USB_HS_EXTI_ENABLE_IT __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_HS_EXTI_DISABLE_IT __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_HS_EXTI_GET_FLAG __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_HS_EXTI_CLEAR_FLAG __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_HS_EXTI_SET_RISING_EGDE_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_HS_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_HS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE +#define __HAL_USB_HS_EXTI_GENERATE_SWIT __HAL_USB_OTG_HS_WAKEUP_EXTI_GENERATE_SWIT + +#define HAL_PCD_ActiveRemoteWakeup HAL_PCD_ActivateRemoteWakeup +#define HAL_PCD_DeActiveRemoteWakeup HAL_PCD_DeActivateRemoteWakeup + +#define HAL_PCD_SetTxFiFo HAL_PCDEx_SetTxFiFo +#define HAL_PCD_SetRxFiFo HAL_PCDEx_SetRxFiFo +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Macros HAL TIM Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_TIM_SetICPrescalerValue TIM_SET_ICPRESCALERVALUE +#define __HAL_TIM_ResetICPrescalerValue TIM_RESET_ICPRESCALERVALUE + +#define TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE +#define TIM_GET_CLEAR_IT __HAL_TIM_CLEAR_IT + +#define __HAL_TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE + +#define __HAL_TIM_DIRECTION_STATUS __HAL_TIM_IS_TIM_COUNTING_DOWN +#define __HAL_TIM_PRESCALER __HAL_TIM_SET_PRESCALER +#define __HAL_TIM_SetCounter __HAL_TIM_SET_COUNTER +#define __HAL_TIM_GetCounter __HAL_TIM_GET_COUNTER +#define __HAL_TIM_SetAutoreload __HAL_TIM_SET_AUTORELOAD +#define __HAL_TIM_GetAutoreload __HAL_TIM_GET_AUTORELOAD +#define __HAL_TIM_SetClockDivision __HAL_TIM_SET_CLOCKDIVISION +#define __HAL_TIM_GetClockDivision __HAL_TIM_GET_CLOCKDIVISION +#define __HAL_TIM_SetICPrescaler __HAL_TIM_SET_ICPRESCALER +#define __HAL_TIM_GetICPrescaler __HAL_TIM_GET_ICPRESCALER +#define __HAL_TIM_SetCompare __HAL_TIM_SET_COMPARE +#define __HAL_TIM_GetCompare __HAL_TIM_GET_COMPARE + +#define TIM_BREAKINPUTSOURCE_DFSDM TIM_BREAKINPUTSOURCE_DFSDM1 +/** + * @} + */ + +/** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT +#define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT +#define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG +#define __HAL_ETH_EXTI_CLEAR_FLAG __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_ETH_EXTI_SET_RISING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE_TRIGGER +#define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER +#define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER + +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE +#define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE +/** + * @} + */ + +/** @defgroup HAL_LTDC_Aliased_Macros HAL LTDC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_LTDC_LAYER LTDC_LAYER +/** + * @} + */ + +/** @defgroup HAL_SAI_Aliased_Macros HAL SAI Aliased Macros maintained for legacy purpose + * @{ + */ +#define SAI_OUTPUTDRIVE_DISABLED SAI_OUTPUTDRIVE_DISABLE +#define SAI_OUTPUTDRIVE_ENABLED SAI_OUTPUTDRIVE_ENABLE +#define SAI_MASTERDIVIDER_ENABLED SAI_MASTERDIVIDER_ENABLE +#define SAI_MASTERDIVIDER_DISABLED SAI_MASTERDIVIDER_DISABLE +#define SAI_STREOMODE SAI_STEREOMODE +#define SAI_FIFOStatus_Empty SAI_FIFOSTATUS_EMPTY +#define SAI_FIFOStatus_Less1QuarterFull SAI_FIFOSTATUS_LESS1QUARTERFULL +#define SAI_FIFOStatus_1QuarterFull SAI_FIFOSTATUS_1QUARTERFULL +#define SAI_FIFOStatus_HalfFull SAI_FIFOSTATUS_HALFFULL +#define SAI_FIFOStatus_3QuartersFull SAI_FIFOSTATUS_3QUARTERFULL +#define SAI_FIFOStatus_Full SAI_FIFOSTATUS_FULL +#define IS_SAI_BLOCK_MONO_STREO_MODE IS_SAI_BLOCK_MONO_STEREO_MODE +#define SAI_SYNCHRONOUS_EXT SAI_SYNCHRONOUS_EXT_SAI1 +#define SAI_SYNCEXT_IN_ENABLE SAI_SYNCEXT_OUTBLOCKA_ENABLE +/** + * @} + */ + + +/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* ___STM32_HAL_LEGACY */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,328 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief This file contains all the functions prototypes for the HAL + * module driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_H +#define __STM32F1xx_HAL_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_conf.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup HAL + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* Exported macro ------------------------------------------------------------*/ + +/** @defgroup HAL_Exported_Macros HAL Exported Macros + * @{ + */ + +/** @defgroup DBGMCU_Freeze_Unfreeze Freeze Unfreeze Peripherals in Debug mode + * @brief Freeze/Unfreeze Peripherals in Debug mode + * Note: On devices STM32F10xx8 and STM32F10xxB, + * STM32F101xC/D/E and STM32F103xC/D/E, + * STM32F101xF/G and STM32F103xF/G + * STM32F10xx4 and STM32F10xx6 + * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in + * debug mode (not accessible by the user software in normal mode). + * Refer to errata sheet of these devices for more details. + * @{ + */ + +/* Peripherals on APB1 */ +/** + * @brief TIM2 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM2() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM2_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM2() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM2_STOP) + +/** + * @brief TIM3 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM3() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM3_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM3() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM3_STOP) + +#if defined (DBGMCU_CR_DBG_TIM4_STOP) +/** + * @brief TIM4 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM4() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM4_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM4() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM4_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM5_STOP) +/** + * @brief TIM5 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM5() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM5_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM5() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM5_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM6_STOP) +/** + * @brief TIM6 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM6() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM6_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM6() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM6_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM7_STOP) +/** + * @brief TIM7 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM7() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM7_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM7() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM7_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM12_STOP) +/** + * @brief TIM12 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM12() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM12_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM12() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM12_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM13_STOP) +/** + * @brief TIM13 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM13() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM13_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM13() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM13_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM14_STOP) +/** + * @brief TIM14 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM14() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM14_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM14() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM14_STOP) +#endif + +/** + * @brief WWDG Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_WWDG() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_WWDG_STOP) +#define __HAL_DBGMCU_UNFREEZE_WWDG() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_WWDG_STOP) + +/** + * @brief IWDG Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_IWDG() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_IWDG_STOP) +#define __HAL_DBGMCU_UNFREEZE_IWDG() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_IWDG_STOP) + +/** + * @brief I2C1 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT) +#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT) + +#if defined (DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT) +/** + * @brief I2C2 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT) +#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT) +#endif + +#if defined (DBGMCU_CR_DBG_CAN1_STOP) +/** + * @brief CAN1 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_CAN1() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN1_STOP) +#define __HAL_DBGMCU_UNFREEZE_CAN1() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN1_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_CAN2_STOP) +/** + * @brief CAN2 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_CAN2() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN2_STOP) +#define __HAL_DBGMCU_UNFREEZE_CAN2() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN2_STOP) +#endif + +/* Peripherals on APB2 */ +#if defined (DBGMCU_CR_DBG_TIM1_STOP) +/** + * @brief TIM1 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM1() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM1_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM1() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM1_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM8_STOP) +/** + * @brief TIM8 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM8() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM8_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM8() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM8_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM9_STOP) +/** + * @brief TIM9 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM9() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM9_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM9() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM9_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM10_STOP) +/** + * @brief TIM10 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM10() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM10_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM10() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM10_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM11_STOP) +/** + * @brief TIM11 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM11() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM11_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM11() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM11_STOP) +#endif + + +#if defined (DBGMCU_CR_DBG_TIM15_STOP) +/** + * @brief TIM15 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM15() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM15_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM15() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM15_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM16_STOP) +/** + * @brief TIM16 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM16() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM16_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM16() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM16_STOP) +#endif + +#if defined (DBGMCU_CR_DBG_TIM17_STOP) +/** + * @brief TIM17 Peripherals Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM17() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM17_STOP) +#define __HAL_DBGMCU_UNFREEZE_TIM17() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM17_STOP) +#endif + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup HAL_Exported_Functions + * @{ + */ + +/** @addtogroup HAL_Exported_Functions_Group1 + * @{ + */ + +/* Initialization and de-initialization functions ******************************/ +HAL_StatusTypeDef HAL_Init(void); +HAL_StatusTypeDef HAL_DeInit(void); +void HAL_MspInit(void); +void HAL_MspDeInit(void); +HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority); + +/** + * @} + */ + +/** @addtogroup HAL_Exported_Functions_Group2 + * @{ + */ + +/* Peripheral Control functions ************************************************/ +void HAL_IncTick(void); +void HAL_Delay(__IO uint32_t Delay); +uint32_t HAL_GetTick(void); +void HAL_SuspendTick(void); +void HAL_ResumeTick(void); +uint32_t HAL_GetHalVersion(void); +uint32_t HAL_GetREVID(void); +uint32_t HAL_GetDEVID(void); +void HAL_DBGMCU_EnableDBGSleepMode(void); +void HAL_DBGMCU_DisableDBGSleepMode(void); +void HAL_DBGMCU_EnableDBGStopMode(void); +void HAL_DBGMCU_DisableDBGStopMode(void); +void HAL_DBGMCU_EnableDBGStandbyMode(void); +void HAL_DBGMCU_DisableDBGStandbyMode(void); + +/** + * @} + */ + +/** + * @} + */ + + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,476 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_cortex.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of CORTEX HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_CORTEX_H +#define __STM32F1xx_HAL_CORTEX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup CORTEX + * @{ + */ +/* Exported types ------------------------------------------------------------*/ +/** @defgroup CORTEX_Exported_Types Cortex Exported Types + * @{ + */ + +#if (__MPU_PRESENT == 1) +/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition + * @brief MPU Region initialization structure + * @{ + */ +typedef struct +{ + uint8_t Enable; /*!< Specifies the status of the region. + This parameter can be a value of @ref CORTEX_MPU_Region_Enable */ + uint8_t Number; /*!< Specifies the number of the region to protect. + This parameter can be a value of @ref CORTEX_MPU_Region_Number */ + uint32_t BaseAddress; /*!< Specifies the base address of the region to protect. */ + uint8_t Size; /*!< Specifies the size of the region to protect. + This parameter can be a value of @ref CORTEX_MPU_Region_Size */ + uint8_t SubRegionDisable; /*!< Specifies the number of the subregion protection to disable. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */ + uint8_t TypeExtField; /*!< Specifies the TEX field level. + This parameter can be a value of @ref CORTEX_MPU_TEX_Levels */ + uint8_t AccessPermission; /*!< Specifies the region access permission type. + This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes */ + uint8_t DisableExec; /*!< Specifies the instruction access status. + This parameter can be a value of @ref CORTEX_MPU_Instruction_Access */ + uint8_t IsShareable; /*!< Specifies the shareability status of the protected region. + This parameter can be a value of @ref CORTEX_MPU_Access_Shareable */ + uint8_t IsCacheable; /*!< Specifies the cacheable status of the region protected. + This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable */ + uint8_t IsBufferable; /*!< Specifies the bufferable status of the protected region. + This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable */ +}MPU_Region_InitTypeDef; +/** + * @} + */ +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants + * @{ + */ + + +/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group + * @{ + */ + +#define NVIC_PRIORITYGROUP_0 ((uint32_t)0x00000007) /*!< 0 bits for pre-emption priority + 4 bits for subpriority */ +#define NVIC_PRIORITYGROUP_1 ((uint32_t)0x00000006) /*!< 1 bits for pre-emption priority + 3 bits for subpriority */ +#define NVIC_PRIORITYGROUP_2 ((uint32_t)0x00000005) /*!< 2 bits for pre-emption priority + 2 bits for subpriority */ +#define NVIC_PRIORITYGROUP_3 ((uint32_t)0x00000004) /*!< 3 bits for pre-emption priority + 1 bits for subpriority */ +#define NVIC_PRIORITYGROUP_4 ((uint32_t)0x00000003) /*!< 4 bits for pre-emption priority + 0 bits for subpriority */ +/** + * @} + */ + +/** @defgroup CORTEX_SysTick_clock_source CORTEX SysTick clock source + * @{ + */ +#define SYSTICK_CLKSOURCE_HCLK_DIV8 ((uint32_t)0x00000000) +#define SYSTICK_CLKSOURCE_HCLK ((uint32_t)0x00000004) + +/** + * @} + */ + +#if (__MPU_PRESENT == 1) +/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control + * @{ + */ +#define MPU_HFNMI_PRIVDEF_NONE ((uint32_t)0x00000000) +#define MPU_HARDFAULT_NMI ((uint32_t)0x00000002) +#define MPU_PRIVILEGED_DEFAULT ((uint32_t)0x00000004) +#define MPU_HFNMI_PRIVDEF ((uint32_t)0x00000006) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable + * @{ + */ +#define MPU_REGION_ENABLE ((uint8_t)0x01) +#define MPU_REGION_DISABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access + * @{ + */ +#define MPU_INSTRUCTION_ACCESS_ENABLE ((uint8_t)0x00) +#define MPU_INSTRUCTION_ACCESS_DISABLE ((uint8_t)0x01) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable + * @{ + */ +#define MPU_ACCESS_SHAREABLE ((uint8_t)0x01) +#define MPU_ACCESS_NOT_SHAREABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable + * @{ + */ +#define MPU_ACCESS_CACHEABLE ((uint8_t)0x01) +#define MPU_ACCESS_NOT_CACHEABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable + * @{ + */ +#define MPU_ACCESS_BUFFERABLE ((uint8_t)0x01) +#define MPU_ACCESS_NOT_BUFFERABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels + * @{ + */ +#define MPU_TEX_LEVEL0 ((uint8_t)0x00) +#define MPU_TEX_LEVEL1 ((uint8_t)0x01) +#define MPU_TEX_LEVEL2 ((uint8_t)0x02) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size + * @{ + */ +#define MPU_REGION_SIZE_32B ((uint8_t)0x04) +#define MPU_REGION_SIZE_64B ((uint8_t)0x05) +#define MPU_REGION_SIZE_128B ((uint8_t)0x06) +#define MPU_REGION_SIZE_256B ((uint8_t)0x07) +#define MPU_REGION_SIZE_512B ((uint8_t)0x08) +#define MPU_REGION_SIZE_1KB ((uint8_t)0x09) +#define MPU_REGION_SIZE_2KB ((uint8_t)0x0A) +#define MPU_REGION_SIZE_4KB ((uint8_t)0x0B) +#define MPU_REGION_SIZE_8KB ((uint8_t)0x0C) +#define MPU_REGION_SIZE_16KB ((uint8_t)0x0D) +#define MPU_REGION_SIZE_32KB ((uint8_t)0x0E) +#define MPU_REGION_SIZE_64KB ((uint8_t)0x0F) +#define MPU_REGION_SIZE_128KB ((uint8_t)0x10) +#define MPU_REGION_SIZE_256KB ((uint8_t)0x11) +#define MPU_REGION_SIZE_512KB ((uint8_t)0x12) +#define MPU_REGION_SIZE_1MB ((uint8_t)0x13) +#define MPU_REGION_SIZE_2MB ((uint8_t)0x14) +#define MPU_REGION_SIZE_4MB ((uint8_t)0x15) +#define MPU_REGION_SIZE_8MB ((uint8_t)0x16) +#define MPU_REGION_SIZE_16MB ((uint8_t)0x17) +#define MPU_REGION_SIZE_32MB ((uint8_t)0x18) +#define MPU_REGION_SIZE_64MB ((uint8_t)0x19) +#define MPU_REGION_SIZE_128MB ((uint8_t)0x1A) +#define MPU_REGION_SIZE_256MB ((uint8_t)0x1B) +#define MPU_REGION_SIZE_512MB ((uint8_t)0x1C) +#define MPU_REGION_SIZE_1GB ((uint8_t)0x1D) +#define MPU_REGION_SIZE_2GB ((uint8_t)0x1E) +#define MPU_REGION_SIZE_4GB ((uint8_t)0x1F) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes + * @{ + */ +#define MPU_REGION_NO_ACCESS ((uint8_t)0x00) +#define MPU_REGION_PRIV_RW ((uint8_t)0x01) +#define MPU_REGION_PRIV_RW_URO ((uint8_t)0x02) +#define MPU_REGION_FULL_ACCESS ((uint8_t)0x03) +#define MPU_REGION_PRIV_RO ((uint8_t)0x05) +#define MPU_REGION_PRIV_RO_URO ((uint8_t)0x06) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number + * @{ + */ +#define MPU_REGION_NUMBER0 ((uint8_t)0x00) +#define MPU_REGION_NUMBER1 ((uint8_t)0x01) +#define MPU_REGION_NUMBER2 ((uint8_t)0x02) +#define MPU_REGION_NUMBER3 ((uint8_t)0x03) +#define MPU_REGION_NUMBER4 ((uint8_t)0x04) +#define MPU_REGION_NUMBER5 ((uint8_t)0x05) +#define MPU_REGION_NUMBER6 ((uint8_t)0x06) +#define MPU_REGION_NUMBER7 ((uint8_t)0x07) +/** + * @} + */ +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup CORTEX_Private_Macros CORTEX Private Macros + * @{ + */ + +/** @defgroup CORTEX_Preemption_Priority_Group_Macro CORTEX Preemption Priority Group + * @{ + */ +#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PRIORITYGROUP_0) || \ + ((GROUP) == NVIC_PRIORITYGROUP_1) || \ + ((GROUP) == NVIC_PRIORITYGROUP_2) || \ + ((GROUP) == NVIC_PRIORITYGROUP_3) || \ + ((GROUP) == NVIC_PRIORITYGROUP_4)) + +#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10) + +#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10) + +#define IS_NVIC_DEVICE_IRQ(IRQ) ((IRQ) >= 0x00) + +/** + * @} + */ + +/** @defgroup CORTEX_SysTick_clock_source_Macro_Private CORTEX SysTick clock source + * @{ + */ +#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \ + ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8)) +/** + * @} + */ +#if (__MPU_PRESENT == 1) +#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || \ + ((STATE) == MPU_REGION_DISABLE)) + +#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || \ + ((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE)) + +#define IS_MPU_ACCESS_SHAREABLE(STATE) (((STATE) == MPU_ACCESS_SHAREABLE) || \ + ((STATE) == MPU_ACCESS_NOT_SHAREABLE)) + +#define IS_MPU_ACCESS_CACHEABLE(STATE) (((STATE) == MPU_ACCESS_CACHEABLE) || \ + ((STATE) == MPU_ACCESS_NOT_CACHEABLE)) + +#define IS_MPU_ACCESS_BUFFERABLE(STATE) (((STATE) == MPU_ACCESS_BUFFERABLE) || \ + ((STATE) == MPU_ACCESS_NOT_BUFFERABLE)) + +#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0) || \ + ((TYPE) == MPU_TEX_LEVEL1) || \ + ((TYPE) == MPU_TEX_LEVEL2)) + +#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE) (((TYPE) == MPU_REGION_NO_ACCESS) || \ + ((TYPE) == MPU_REGION_PRIV_RW) || \ + ((TYPE) == MPU_REGION_PRIV_RW_URO) || \ + ((TYPE) == MPU_REGION_FULL_ACCESS) || \ + ((TYPE) == MPU_REGION_PRIV_RO) || \ + ((TYPE) == MPU_REGION_PRIV_RO_URO)) + +#define IS_MPU_REGION_NUMBER(NUMBER) (((NUMBER) == MPU_REGION_NUMBER0) || \ + ((NUMBER) == MPU_REGION_NUMBER1) || \ + ((NUMBER) == MPU_REGION_NUMBER2) || \ + ((NUMBER) == MPU_REGION_NUMBER3) || \ + ((NUMBER) == MPU_REGION_NUMBER4) || \ + ((NUMBER) == MPU_REGION_NUMBER5) || \ + ((NUMBER) == MPU_REGION_NUMBER6) || \ + ((NUMBER) == MPU_REGION_NUMBER7)) + +#define IS_MPU_REGION_SIZE(SIZE) (((SIZE) == MPU_REGION_SIZE_32B) || \ + ((SIZE) == MPU_REGION_SIZE_64B) || \ + ((SIZE) == MPU_REGION_SIZE_128B) || \ + ((SIZE) == MPU_REGION_SIZE_256B) || \ + ((SIZE) == MPU_REGION_SIZE_512B) || \ + ((SIZE) == MPU_REGION_SIZE_1KB) || \ + ((SIZE) == MPU_REGION_SIZE_2KB) || \ + ((SIZE) == MPU_REGION_SIZE_4KB) || \ + ((SIZE) == MPU_REGION_SIZE_8KB) || \ + ((SIZE) == MPU_REGION_SIZE_16KB) || \ + ((SIZE) == MPU_REGION_SIZE_32KB) || \ + ((SIZE) == MPU_REGION_SIZE_64KB) || \ + ((SIZE) == MPU_REGION_SIZE_128KB) || \ + ((SIZE) == MPU_REGION_SIZE_256KB) || \ + ((SIZE) == MPU_REGION_SIZE_512KB) || \ + ((SIZE) == MPU_REGION_SIZE_1MB) || \ + ((SIZE) == MPU_REGION_SIZE_2MB) || \ + ((SIZE) == MPU_REGION_SIZE_4MB) || \ + ((SIZE) == MPU_REGION_SIZE_8MB) || \ + ((SIZE) == MPU_REGION_SIZE_16MB) || \ + ((SIZE) == MPU_REGION_SIZE_32MB) || \ + ((SIZE) == MPU_REGION_SIZE_64MB) || \ + ((SIZE) == MPU_REGION_SIZE_128MB) || \ + ((SIZE) == MPU_REGION_SIZE_256MB) || \ + ((SIZE) == MPU_REGION_SIZE_512MB) || \ + ((SIZE) == MPU_REGION_SIZE_1GB) || \ + ((SIZE) == MPU_REGION_SIZE_2GB) || \ + ((SIZE) == MPU_REGION_SIZE_4GB)) + +#define IS_MPU_SUB_REGION_DISABLE(SUBREGION) ((SUBREGION) < (uint16_t)0x00FF) +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup CORTEX_Exported_Functions + * @{ + */ + +/** @addtogroup CORTEX_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup); +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority); +void HAL_NVIC_EnableIRQ(IRQn_Type IRQn); +void HAL_NVIC_DisableIRQ(IRQn_Type IRQn); +void HAL_NVIC_SystemReset(void); +uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb); +/** + * @} + */ + +/** @addtogroup CORTEX_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ***********************************************/ +#if (__MPU_PRESENT == 1) +void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init); +#endif /* __MPU_PRESENT */ +uint32_t HAL_NVIC_GetPriorityGrouping(void); +void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority); +uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn); +void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn); +void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn); +uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn); +void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource); +void HAL_SYSTICK_IRQHandler(void); +void HAL_SYSTICK_Callback(void); +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup CORTEX_Private_Functions CORTEX Private Functions + * @brief CORTEX private functions + * @{ + */ + +#if (__MPU_PRESENT == 1) +/** + * @brief Disables the MPU + * @retval None + */ +__STATIC_INLINE void HAL_MPU_Disable(void) +{ + /* Disable fault exceptions */ + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; + + /* Disable the MPU */ + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; +} + +/** + * @brief Enables the MPU + * @param MPU_Control: Specifies the control mode of the MPU during hard fault, + * NMI, FAULTMASK and privileged accessto the default memory + * This parameter can be one of the following values: + * @arg MPU_HFNMI_PRIVDEF_NONE + * @arg MPU_HARDFAULT_NMI + * @arg MPU_PRIVILEGED_DEFAULT + * @arg MPU_HFNMI_PRIVDEF + * @retval None + */ +__STATIC_INLINE void HAL_MPU_Enable(uint32_t MPU_Control) +{ + /* Enable the MPU */ + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; + + /* Enable fault exceptions */ + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +} +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_CORTEX_H */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,214 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_def.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief This file contains HAL common defines, enumeration, macros and + * structures definitions. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_DEF +#define __STM32F1xx_HAL_DEF + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx.h" +#include "Legacy/stm32_hal_legacy.h" +#include + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief HAL Status structures definition + */ +typedef enum +{ + HAL_OK = 0x00, + HAL_ERROR = 0x01, + HAL_BUSY = 0x02, + HAL_TIMEOUT = 0x03 +} HAL_StatusTypeDef; + +/** + * @brief HAL Lock structures definition + */ +typedef enum +{ + HAL_UNLOCKED = 0x00, + HAL_LOCKED = 0x01 +} HAL_LockTypeDef; + +/* Exported macro ------------------------------------------------------------*/ + +#define HAL_MAX_DELAY 0xFFFFFFFF + +#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) != RESET) +#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == RESET) + +#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD_, __DMA_HANDLE_) \ + do{ \ + (__HANDLE__)->__PPP_DMA_FIELD_ = &(__DMA_HANDLE_); \ + (__DMA_HANDLE_).Parent = (__HANDLE__); \ + } while(0) + +#define UNUSED(x) ((void)(x)) + +/** @brief Reset the Handle's State field. + * @param __HANDLE__: specifies the Peripheral Handle. + * @note This macro can be used for the following purpose: + * - When the Handle is declared as local variable; before passing it as parameter + * to HAL_PPP_Init() for the first time, it is mandatory to use this macro + * to set to 0 the Handle's "State" field. + * Otherwise, "State" field may have any random value and the first time the function + * HAL_PPP_Init() is called, the low level hardware initialization will be missed + * (i.e. HAL_PPP_MspInit() will not be executed). + * - When there is a need to reconfigure the low level hardware: instead of calling + * HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init(). + * In this later function, when the Handle's "State" field is set to 0, it will execute the function + * HAL_PPP_MspInit() which will reconfigure the low level hardware. + * @retval None + */ +#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0) + +#if (USE_RTOS == 1) + #error " USE_RTOS should be 0 in the current HAL release " +#else + #define __HAL_LOCK(__HANDLE__) \ + do{ \ + if((__HANDLE__)->Lock == HAL_LOCKED) \ + { \ + return HAL_BUSY; \ + } \ + else \ + { \ + (__HANDLE__)->Lock = HAL_LOCKED; \ + } \ + }while (0) + + #define __HAL_UNLOCK(__HANDLE__) \ + do{ \ + (__HANDLE__)->Lock = HAL_UNLOCKED; \ + }while (0) +#endif /* USE_RTOS */ + +#if defined ( __GNUC__ ) + #ifndef __weak + #define __weak __attribute__((weak)) + #endif /* __weak */ + #ifndef __packed + #define __packed __attribute__((__packed__)) + #endif /* __packed */ +#endif /* __GNUC__ */ + + +/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead */ +#if defined (__GNUC__) /* GNU Compiler */ + #ifndef __ALIGN_END + #define __ALIGN_END __attribute__ ((aligned (4))) + #endif /* __ALIGN_END */ + #ifndef __ALIGN_BEGIN + #define __ALIGN_BEGIN + #endif /* __ALIGN_BEGIN */ +#else + #ifndef __ALIGN_END + #define __ALIGN_END + #endif /* __ALIGN_END */ + #ifndef __ALIGN_BEGIN + #if defined (__CC_ARM) /* ARM Compiler */ + #define __ALIGN_BEGIN __align(4) + #elif defined (__ICCARM__) /* IAR Compiler */ + #define __ALIGN_BEGIN + #endif /* __CC_ARM */ + #endif /* __ALIGN_BEGIN */ +#endif /* __GNUC__ */ + +/** + * @brief __RAM_FUNC definition + */ +#if defined ( __CC_ARM ) +/* ARM Compiler + ------------ + RAM functions are defined using the toolchain options. + Functions that are executed in RAM should reside in a separate source module. + Using the 'Options for File' dialog you can simply change the 'Code / Const' + area of a module to a memory space in physical RAM. + Available memory areas are declared in the 'Target' tab of the 'Options for Target' + dialog. +*/ +#define __RAM_FUNC HAL_StatusTypeDef + +#elif defined ( __ICCARM__ ) +/* ICCARM Compiler + --------------- + RAM functions are defined using a specific toolchain keyword "__ramfunc". +*/ +#define __RAM_FUNC __ramfunc HAL_StatusTypeDef + +#elif defined ( __GNUC__ ) +/* GNU Compiler + ------------ + RAM functions are defined using a specific toolchain attribute + "__attribute__((section(".RamFunc")))". +*/ +#define __RAM_FUNC HAL_StatusTypeDef __attribute__((section(".RamFunc"))) + +#endif + +/** + * @brief __NOINLINE definition + */ +#if defined ( __CC_ARM ) || defined ( __GNUC__ ) +/* ARM & GNUCompiler + ---------------- +*/ +#define __NOINLINE __attribute__ ( (noinline) ) + +#elif defined ( __ICCARM__ ) +/* ICCARM Compiler + --------------- +*/ +#define __NOINLINE _Pragma("optimize = no_inline") + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* ___STM32F1xx_HAL_DEF */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,480 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_dma.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of DMA HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_DMA_H +#define __STM32F1xx_HAL_DMA_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup DMA + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Types DMA Exported Types + * @{ + */ + +/** + * @brief DMA Configuration Structure definition + */ +typedef struct +{ + uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral, + from memory to memory or from peripheral to memory. + This parameter can be a value of @ref DMA_Data_transfer_direction */ + + uint32_t PeriphInc; /*!< Specifies whether the Peripheral address register should be incremented or not. + This parameter can be a value of @ref DMA_Peripheral_incremented_mode */ + + uint32_t MemInc; /*!< Specifies whether the memory address register should be incremented or not. + This parameter can be a value of @ref DMA_Memory_incremented_mode */ + + uint32_t PeriphDataAlignment; /*!< Specifies the Peripheral data width. + This parameter can be a value of @ref DMA_Peripheral_data_size */ + + uint32_t MemDataAlignment; /*!< Specifies the Memory data width. + This parameter can be a value of @ref DMA_Memory_data_size */ + + uint32_t Mode; /*!< Specifies the operation mode of the DMAy Channelx. + This parameter can be a value of @ref DMA_mode + @note The circular buffer mode cannot be used if the memory-to-memory + data transfer is configured on the selected Channel */ + + uint32_t Priority; /*!< Specifies the software priority for the DMAy Channelx. + This parameter can be a value of @ref DMA_Priority_level */ +} DMA_InitTypeDef; + +/** + * @brief DMA Configuration enumeration values definition + */ +typedef enum +{ + DMA_MODE = 0, /*!< Control related DMA mode Parameter in DMA_InitTypeDef */ + DMA_PRIORITY = 1, /*!< Control related priority level Parameter in DMA_InitTypeDef */ + +} DMA_ControlTypeDef; + +/** + * @brief HAL DMA State structures definition + */ +typedef enum +{ + HAL_DMA_STATE_RESET = 0x00, /*!< DMA not yet initialized or disabled */ + HAL_DMA_STATE_READY = 0x01, /*!< DMA initialized and ready for use */ + HAL_DMA_STATE_READY_HALF = 0x11, /*!< DMA Half process success */ + HAL_DMA_STATE_BUSY = 0x02, /*!< DMA process is ongoing */ + HAL_DMA_STATE_TIMEOUT = 0x03, /*!< DMA timeout state */ + HAL_DMA_STATE_ERROR = 0x04, /*!< DMA error state */ +}HAL_DMA_StateTypeDef; + +/** + * @brief HAL DMA Error Code structure definition + */ +typedef enum +{ + HAL_DMA_FULL_TRANSFER = 0x00, /*!< Full transfer */ + HAL_DMA_HALF_TRANSFER = 0x01, /*!< Half Transfer */ +}HAL_DMA_LevelCompleteTypeDef; + +/** + * @brief DMA handle Structure definition + */ +typedef struct __DMA_HandleTypeDef +{ + DMA_Channel_TypeDef *Instance; /*!< Register base address */ + + DMA_InitTypeDef Init; /*!< DMA communication parameters */ + + HAL_LockTypeDef Lock; /*!< DMA locking object */ + + HAL_DMA_StateTypeDef State; /*!< DMA transfer state */ + + void *Parent; /*!< Parent object state */ + + void (* XferCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer complete callback */ + + void (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA Half transfer complete callback */ + + void (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer error callback */ + + __IO uint32_t ErrorCode; /*!< DMA Error code */ +} DMA_HandleTypeDef; +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Constants DMA Exported Constants + * @{ + */ + +/** @defgroup DMA_Error_Code DMA Error Code + * @{ + */ + #define HAL_DMA_ERROR_NONE ((uint32_t)0x00) /*!< No error */ + #define HAL_DMA_ERROR_TE ((uint32_t)0x01) /*!< Transfer error */ + #define HAL_DMA_ERROR_TIMEOUT ((uint32_t)0x20) /*!< Timeout error */ + +/** + * @} + */ + +/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction + * @{ + */ +#define DMA_PERIPH_TO_MEMORY ((uint32_t)0x00000000) /*!< Peripheral to memory direction */ +#define DMA_MEMORY_TO_PERIPH ((uint32_t)DMA_CCR_DIR) /*!< Memory to peripheral direction */ +#define DMA_MEMORY_TO_MEMORY ((uint32_t)DMA_CCR_MEM2MEM) /*!< Memory to memory direction */ + +/** + * @} + */ + +/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode + * @{ + */ +#define DMA_PINC_ENABLE ((uint32_t)DMA_CCR_PINC) /*!< Peripheral increment mode Enable */ +#define DMA_PINC_DISABLE ((uint32_t)0x00000000) /*!< Peripheral increment mode Disable */ +/** + * @} + */ + +/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode + * @{ + */ +#define DMA_MINC_ENABLE ((uint32_t)DMA_CCR_MINC) /*!< Memory increment mode Enable */ +#define DMA_MINC_DISABLE ((uint32_t)0x00000000) /*!< Memory increment mode Disable */ +/** + * @} + */ + +/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size + * @{ + */ +#define DMA_PDATAALIGN_BYTE ((uint32_t)0x00000000) /*!< Peripheral data alignment: Byte */ +#define DMA_PDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_PSIZE_0) /*!< Peripheral data alignment: HalfWord */ +#define DMA_PDATAALIGN_WORD ((uint32_t)DMA_CCR_PSIZE_1) /*!< Peripheral data alignment: Word */ +/** + * @} + */ + +/** @defgroup DMA_Memory_data_size DMA Memory data size + * @{ + */ +#define DMA_MDATAALIGN_BYTE ((uint32_t)0x00000000) /*!< Memory data alignment: Byte */ +#define DMA_MDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_MSIZE_0) /*!< Memory data alignment: HalfWord */ +#define DMA_MDATAALIGN_WORD ((uint32_t)DMA_CCR_MSIZE_1) /*!< Memory data alignment: Word */ +/** + * @} + */ + +/** @defgroup DMA_mode DMA mode + * @{ + */ +#define DMA_NORMAL ((uint32_t)0x00000000) /*!< Normal mode */ +#define DMA_CIRCULAR ((uint32_t)DMA_CCR_CIRC) /*!< Circular mode */ +/** + * @} + */ + +/** @defgroup DMA_Priority_level DMA Priority level + * @{ + */ +#define DMA_PRIORITY_LOW ((uint32_t)0x00000000) /*!< Priority level : Low */ +#define DMA_PRIORITY_MEDIUM ((uint32_t)DMA_CCR_PL_0) /*!< Priority level : Medium */ +#define DMA_PRIORITY_HIGH ((uint32_t)DMA_CCR_PL_1) /*!< Priority level : High */ +#define DMA_PRIORITY_VERY_HIGH ((uint32_t)DMA_CCR_PL) /*!< Priority level : Very_High */ +/** + * @} + */ + + +/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions + * @{ + */ +#define DMA_IT_TC ((uint32_t)DMA_CCR_TCIE) +#define DMA_IT_HT ((uint32_t)DMA_CCR_HTIE) +#define DMA_IT_TE ((uint32_t)DMA_CCR_TEIE) +/** + * @} + */ + +/** @defgroup DMA_flag_definitions DMA flag definitions + * @{ + */ +#define DMA_FLAG_GL1 ((uint32_t)0x00000001) +#define DMA_FLAG_TC1 ((uint32_t)0x00000002) +#define DMA_FLAG_HT1 ((uint32_t)0x00000004) +#define DMA_FLAG_TE1 ((uint32_t)0x00000008) +#define DMA_FLAG_GL2 ((uint32_t)0x00000010) +#define DMA_FLAG_TC2 ((uint32_t)0x00000020) +#define DMA_FLAG_HT2 ((uint32_t)0x00000040) +#define DMA_FLAG_TE2 ((uint32_t)0x00000080) +#define DMA_FLAG_GL3 ((uint32_t)0x00000100) +#define DMA_FLAG_TC3 ((uint32_t)0x00000200) +#define DMA_FLAG_HT3 ((uint32_t)0x00000400) +#define DMA_FLAG_TE3 ((uint32_t)0x00000800) +#define DMA_FLAG_GL4 ((uint32_t)0x00001000) +#define DMA_FLAG_TC4 ((uint32_t)0x00002000) +#define DMA_FLAG_HT4 ((uint32_t)0x00004000) +#define DMA_FLAG_TE4 ((uint32_t)0x00008000) +#define DMA_FLAG_GL5 ((uint32_t)0x00010000) +#define DMA_FLAG_TC5 ((uint32_t)0x00020000) +#define DMA_FLAG_HT5 ((uint32_t)0x00040000) +#define DMA_FLAG_TE5 ((uint32_t)0x00080000) +#define DMA_FLAG_GL6 ((uint32_t)0x00100000) +#define DMA_FLAG_TC6 ((uint32_t)0x00200000) +#define DMA_FLAG_HT6 ((uint32_t)0x00400000) +#define DMA_FLAG_TE6 ((uint32_t)0x00800000) +#define DMA_FLAG_GL7 ((uint32_t)0x01000000) +#define DMA_FLAG_TC7 ((uint32_t)0x02000000) +#define DMA_FLAG_HT7 ((uint32_t)0x04000000) +#define DMA_FLAG_TE7 ((uint32_t)0x08000000) +/** + * @} + */ + +/** + * @} + */ + + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup DMA_Exported_Macros DMA Exported Macros + * @{ + */ + +/** @brief Reset DMA handle state + * @param __HANDLE__: DMA handle. + * @retval None + */ +#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET) + +/** + * @brief Enable the specified DMA Channel. + * @param __HANDLE__: DMA handle + * @retval None. + */ +#define __HAL_DMA_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CCR, DMA_CCR_EN)) + +/** + * @brief Disable the specified DMA Channel. + * @param __HANDLE__: DMA handle + * @retval None. + */ +#define __HAL_DMA_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CCR, DMA_CCR_EN)) + + +/* Interrupt & Flag management */ + +/** + * @brief Enables the specified DMA Channel interrupts. + * @param __HANDLE__: DMA handle + * @param __INTERRUPT__: specifies the DMA interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask + * @arg DMA_IT_HT: Half transfer complete interrupt mask + * @arg DMA_IT_TE: Transfer error interrupt mask + * @retval None + */ +#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) (SET_BIT((__HANDLE__)->Instance->CCR, (__INTERRUPT__))) + +/** + * @brief Disables the specified DMA Channel interrupts. + * @param __HANDLE__: DMA handle + * @param __INTERRUPT__: specifies the DMA interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask + * @arg DMA_IT_HT: Half transfer complete interrupt mask + * @arg DMA_IT_TE: Transfer error interrupt mask + * @retval None + */ +#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) (CLEAR_BIT((__HANDLE__)->Instance->CCR , (__INTERRUPT__))) + +/** + * @brief Checks whether the specified DMA Channel interrupt is enabled or disabled. + * @param __HANDLE__: DMA handle + * @param __INTERRUPT__: specifies the DMA interrupt source to check. + * This parameter can be one of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask + * @arg DMA_IT_HT: Half transfer complete interrupt mask + * @arg DMA_IT_TE: Transfer error interrupt mask + * @retval The state of DMA_IT (SET or RESET). + */ +#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CCR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) + +/** + * @brief Returns the number of remaining data units in the current DMAy Channelx transfer. + * @param __HANDLE__: DMA handle + * + * @retval The number of remaining data units in the current DMA Channel transfer. + */ +#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNDTR) + +/** + * @} + */ + +/* Include DMA HAL Extension module */ +#include "stm32f1xx_hal_dma_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup DMA_Exported_Functions DMA Exported Functions + * @{ + */ + +/** @addtogroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_DeInit (DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/** @addtogroup DMA_Exported_Functions_Group2 Input and Output operation functions + * @{ + */ +/* IO operation functions *****************************************************/ +HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout); +void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/** @addtogroup DMA_Exported_Functions_Group3 Peripheral State functions + * @{ + */ +/* Peripheral State and Error functions ***************************************/ +HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma); +uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/** + * @} + */ + +/* Private Constants -------------------------------------------------------------*/ +/** @defgroup DMA_Private_Constants DMA Private Constants + * @brief DMA private defines and constants + * @{ + */ +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup DMA_Private_Macros DMA Private Macros + * @brief DMA private macros + * @{ + */ + +#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1) && ((SIZE) < 0x10000)) + +#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \ + ((DIRECTION) == DMA_MEMORY_TO_PERIPH) || \ + ((DIRECTION) == DMA_MEMORY_TO_MEMORY)) + +#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || \ + ((STATE) == DMA_PINC_DISABLE)) + +#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || \ + ((STATE) == DMA_MINC_DISABLE)) + +#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || \ + ((SIZE) == DMA_PDATAALIGN_HALFWORD) || \ + ((SIZE) == DMA_PDATAALIGN_WORD)) + +#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE) || \ + ((SIZE) == DMA_MDATAALIGN_HALFWORD) || \ + ((SIZE) == DMA_MDATAALIGN_WORD )) + +#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL ) || \ + ((MODE) == DMA_CIRCULAR)) + +#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW ) || \ + ((PRIORITY) == DMA_PRIORITY_MEDIUM) || \ + ((PRIORITY) == DMA_PRIORITY_HIGH) || \ + ((PRIORITY) == DMA_PRIORITY_VERY_HIGH)) + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup DMA_Private_Functions DMA Private Functions + * @brief DMA private functions + * @{ + */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_DMA_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,260 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_dma_ex.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of DMA HAL extension module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_DMA_EX_H +#define __STM32F1xx_HAL_DMA_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup DMAEx DMAEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup DMAEx_Exported_Macros DMA Extended Exported Macros + * @{ + */ +/* Interrupt & Flag management */ +#if defined (STM32F100xE) || defined (STM32F101xE) || defined (STM32F101xG) || defined (STM32F103xE) || \ + defined (STM32F103xG) || defined (STM32F105xC) || defined (STM32F107xC) +/** @defgroup DMAEx_High_density_XL_density_Product_devices DMAEx High density and XL density product devices + * @{ + */ + +/** + * @brief Returns the current DMA Channel transfer complete flag. + * @param __HANDLE__: DMA handle + * @retval The specified transfer complete flag index. + */ +#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TC7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TC1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TC2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TC3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TC4 :\ + DMA_FLAG_TC5) + +/** + * @brief Returns the current DMA Channel half transfer complete flag. + * @param __HANDLE__: DMA handle + * @retval The specified half transfer complete flag index. + */ +#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_HT7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_HT1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_HT2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_HT3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_HT4 :\ + DMA_FLAG_HT5) + +/** + * @brief Returns the current DMA Channel transfer error flag. + * @param __HANDLE__: DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TE7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TE1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TE2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TE3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TE4 :\ + DMA_FLAG_TE5) + +/** + * @brief Get the DMA Channel pending flags. + * @param __HANDLE__: DMA handle + * @param __FLAG__: Get the specified flag. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag. + * @retval The state of FLAG (SET or RESET). + */ +#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)\ +(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7)? (DMA2->ISR & (__FLAG__)) :\ + (DMA1->ISR & (__FLAG__))) + +/** + * @brief Clears the DMA Channel pending flags. + * @param __HANDLE__: DMA handle + * @param __FLAG__: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag. + * @retval None + */ +#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) \ +(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7)? (DMA2->IFCR = (__FLAG__)) :\ + (DMA1->IFCR = (__FLAG__))) + +/** + * @} + */ + +#else +/** @defgroup DMA_Low_density_Medium_density_Product_devices DMA Low density and Medium density product devices + * @{ + */ + +/** + * @brief Returns the current DMA Channel transfer complete flag. + * @param __HANDLE__: DMA handle + * @retval The specified transfer complete flag index. + */ +#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\ + DMA_FLAG_TC7) + +/** + * @brief Returns the current DMA Channel half transfer complete flag. + * @param __HANDLE__: DMA handle + * @retval The specified half transfer complete flag index. + */ +#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\ + DMA_FLAG_HT7) + +/** + * @brief Returns the current DMA Channel transfer error flag. + * @param __HANDLE__: DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\ + DMA_FLAG_TE7) + +/** + * @brief Get the DMA Channel pending flags. + * @param __HANDLE__: DMA handle + * @param __FLAG__: Get the specified flag. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_7 to select the DMA Channel flag. + * @retval The state of FLAG (SET or RESET). + */ + +#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (DMA1->ISR & (__FLAG__)) + +/** + * @brief Clears the DMA Channel pending flags. + * @param __HANDLE__: DMA handle + * @param __FLAG__: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_7 to select the DMA Channel flag. + * @retval None + */ +#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (DMA1->IFCR = (__FLAG__)) + +/** + * @} + */ + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || */ + /* STM32F103xG || STM32F105xC || STM32F107xC */ + +#endif /* __STM32F1xx_HAL_DMA_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,348 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_flash.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of Flash HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_FLASH_H +#define __STM32F1xx_HAL_FLASH_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASH + * @{ + */ + +/** @addtogroup FLASH_Private_Constants + * @{ + */ +#define FLASH_TIMEOUT_VALUE ((uint32_t)50000)/* 50 s */ +/** + * @} + */ + +/** @addtogroup FLASH_Private_Macros + * @{ + */ + +#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \ + ((VALUE) == FLASH_TYPEPROGRAM_WORD) || \ + ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD)) + +#if defined(FLASH_ACR_LATENCY) +#define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || \ + ((__LATENCY__) == FLASH_LATENCY_1) || \ + ((__LATENCY__) == FLASH_LATENCY_2)) + +#else +#define IS_FLASH_LATENCY(__LATENCY__) ((__LATENCY__) == FLASH_LATENCY_0) +#endif /* FLASH_ACR_LATENCY */ +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Types FLASH Exported Types + * @{ + */ + + +/** + * @brief FLASH Procedure structure definition + */ +typedef enum +{ + FLASH_PROC_NONE = 0, + FLASH_PROC_PAGEERASE = 1, + FLASH_PROC_MASSERASE = 2, + FLASH_PROC_PROGRAMHALFWORD = 3, + FLASH_PROC_PROGRAMWORD = 4, + FLASH_PROC_PROGRAMDOUBLEWORD = 5 +} FLASH_ProcedureTypeDef; + +/** + * @brief FLASH handle Structure definition + */ +typedef struct +{ + __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */ + + __IO uint32_t DataRemaining; /*!< Internal variable to save the remaining pages to erase or half-word to program in IT context */ + + __IO uint32_t Address; /*!< Internal variable to save address selected for program or erase */ + + __IO uint64_t Data; /*!< Internal variable to save data to be programmed */ + + HAL_LockTypeDef Lock; /*!< FLASH locking object */ + + __IO uint32_t ErrorCode; /*!< FLASH error code + This parameter can be a value of @ref FLASH_Error_Codes */ +} FLASH_ProcessTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Constants FLASH Exported Constants + * @{ + */ + +/** @defgroup FLASH_Error_Codes FLASH Error Codes + * @{ + */ + +#define HAL_FLASH_ERROR_NONE ((uint32_t)0x00) /*!< No error */ +#define HAL_FLASH_ERROR_PROG ((uint32_t)0x01) /*!< Programming error */ +#define HAL_FLASH_ERROR_WRP ((uint32_t)0x02) /*!< Write protection error */ +#define HAL_FLASH_ERROR_OPTV ((uint32_t)0x04) /*!< Option validity error */ + +/** + * @} + */ + +/** @defgroup FLASH_Type_Program FLASH Type Program + * @{ + */ +#define FLASH_TYPEPROGRAM_HALFWORD ((uint32_t)0x01) /*!ACR |= FLASH_ACR_HLFCYA) + +/** + * @brief Disable the FLASH half cycle access. + * @note half cycle access can only be used with a low-frequency clock of less than + 8 MHz that can be obtained with the use of HSI or HSE but not of PLL. + * @retval None + */ +#define __HAL_FLASH_HALF_CYCLE_ACCESS_DISABLE() (FLASH->ACR &= (~FLASH_ACR_HLFCYA)) + +/** + * @} + */ + +#if defined(FLASH_ACR_LATENCY) +/** @defgroup FLASH_EM_Latency FLASH Latency + * @brief macros to handle FLASH Latency + * @{ + */ + +/** + * @brief Set the FLASH Latency. + * @param __LATENCY__ FLASH Latency + * The value of this parameter depend on device used within the same series + * @retval None + */ +#define __HAL_FLASH_SET_LATENCY(__LATENCY__) (FLASH->ACR = (FLASH->ACR&(~FLASH_ACR_LATENCY)) | (__LATENCY__)) + + +/** + * @brief Get the FLASH Latency. + * @retval FLASH Latency + * The value of this parameter depend on device used within the same series + */ +#define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)) + +/** + * @} + */ + +#endif /* FLASH_ACR_LATENCY */ +/** @defgroup FLASH_Prefetch FLASH Prefetch + * @brief macros to handle FLASH Prefetch buffer + * @{ + */ +/** + * @brief Enable the FLASH prefetch buffer. + * @retval None + */ +#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTBE) + +/** + * @brief Disable the FLASH prefetch buffer. + * @retval None + */ +#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTBE)) + +/** + * @} + */ + +/** + * @} + */ + +/* Include FLASH HAL Extended module */ +#include "stm32f1xx_hal_flash_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup FLASH_Exported_Functions + * @{ + */ + +/** @addtogroup FLASH_Exported_Functions_Group1 + * @{ + */ +/* IO operation functions *****************************************************/ +HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data); +HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data); + +/* FLASH IRQ handler function */ +void HAL_FLASH_IRQHandler(void); +/* Callbacks in non blocking modes */ +void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue); +void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue); + +/** + * @} + */ + +/** @addtogroup FLASH_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ***********************************************/ +HAL_StatusTypeDef HAL_FLASH_Unlock(void); +HAL_StatusTypeDef HAL_FLASH_Lock(void); +HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void); +HAL_StatusTypeDef HAL_FLASH_OB_Lock(void); +HAL_StatusTypeDef HAL_FLASH_OB_Launch(void); + +/** + * @} + */ + +/** @addtogroup FLASH_Exported_Functions_Group3 + * @{ + */ +/* Peripheral State and Error functions ***************************************/ +uint32_t HAL_FLASH_GetError(void); + +/** + * @} + */ + +/** + * @} + */ + +/* Private function -------------------------------------------------*/ +/** @addtogroup FLASH_Private_Functions + * @{ + */ +void FLASH_PageErase(uint32_t PageAddress); +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); +#if defined(FLASH_BANK2_END) +HAL_StatusTypeDef FLASH_WaitForLastOperationBank2(uint32_t Timeout); +#endif /* FLASH_BANK2_END */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_FLASH_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,804 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_flash_ex.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of Flash HAL Extended module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_FLASH_EX_H +#define __STM32F1xx_HAL_FLASH_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASHEx + * @{ + */ + +/** @addtogroup FLASHEx_Private_Constants + * @{ + */ + +#define FLASH_SIZE_DATA_REGISTER ((uint32_t)0x1FFFF7E0) +#define OBR_REG_INDEX ((uint32_t)1) +#define SR_FLAG_MASK ((uint32_t)(FLASH_SR_BSY | FLASH_SR_PGERR | FLASH_SR_WRPRTERR | FLASH_SR_EOP)) + +/** + * @} + */ + +/** @addtogroup FLASHEx_Private_Macros + * @{ + */ + +#define IS_FLASH_TYPEERASE(VALUE) (((VALUE) == FLASH_TYPEERASE_PAGES) || ((VALUE) == FLASH_TYPEERASE_MASSERASE)) + +#define IS_OPTIONBYTE(VALUE) (((VALUE) <= (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_DATA))) + +#define IS_WRPSTATE(VALUE) (((VALUE) == OB_WRPSTATE_DISABLE) || ((VALUE) == OB_WRPSTATE_ENABLE)) + +#define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) || ((LEVEL) == OB_RDP_LEVEL_1)) + +#define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == OB_DATA_ADDRESS_DATA0) || ((ADDRESS) == OB_DATA_ADDRESS_DATA1)) + +#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW)) + +#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST)) + +#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST)) + +#if defined(FLASH_BANK2_END) +#define IS_OB_BOOT1(BOOT1) (((BOOT1) == OB_BOOT1_RESET) || ((BOOT1) == OB_BOOT1_SET)) +#endif /* FLASH_BANK2_END */ + +/* Low Density */ +#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6)) +#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x08007FFF) : \ + ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x08003FFF)) +#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */ + +/* Medium Density */ +#if (defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)) +#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0801FFFF) : \ + (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0800FFFF) : \ + (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x08007FFF) : \ + ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x08003FFF)))) +#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/ + +/* High Density */ +#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE)) +#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x200) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0807FFFF) : \ + (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x180) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0805FFFF) : \ + ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0803FFFF))) +#endif /* STM32F100xE || STM32F101xE || STM32F103xE */ + +/* XL Density */ +#if defined(FLASH_BANK2_END) +#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x400) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x080FFFFF) : \ + ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x080BFFFF)) +#endif /* FLASH_BANK2_END */ + +/* Connectivity Line */ +#if (defined(STM32F105xC) || defined(STM32F107xC)) +#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0803FFFF) : \ + (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0801FFFF) : \ + ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0800FFFF))) +#endif /* STM32F105xC || STM32F107xC */ + +#define IS_OB_WRP(PAGE) (((PAGE) != 0x0000000)) + +#if defined(FLASH_BANK2_END) +#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1) || \ + ((BANK) == FLASH_BANK_2) || \ + ((BANK) == FLASH_BANK_BOTH)) +#else +#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1)) +#endif /* FLASH_BANK2_END */ + +/* Low Density */ +#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6)) +#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20) ? \ + ((ADDRESS) <= FLASH_BANK1_END) : ((ADDRESS) <= 0x08003FFF))) + +#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */ + +/* Medium Density */ +#if (defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)) +#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80) ? \ + ((ADDRESS) <= FLASH_BANK1_END) : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40) ? \ + ((ADDRESS) <= 0x0800FFFF) : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20) ? \ + ((ADDRESS) <= 0x08007FFF) : ((ADDRESS) <= 0x08003FFF))))) + +#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/ + +/* High Density */ +#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE)) +#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x200) ? \ + ((ADDRESS) <= FLASH_BANK1_END) : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x180) ? \ + ((ADDRESS) <= 0x0805FFFF) : ((ADDRESS) <= 0x0803FFFF)))) + +#endif /* STM32F100xE || STM32F101xE || STM32F103xE */ + +/* XL Density */ +#if defined(FLASH_BANK2_END) +#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x400) ? \ + ((ADDRESS) <= FLASH_BANK2_END) : ((ADDRESS) <= 0x080BFFFF))) + +#endif /* FLASH_BANK2_END */ + +/* Connectivity Line */ +#if (defined(STM32F105xC) || defined(STM32F107xC)) +#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100) ? \ + ((ADDRESS) <= FLASH_BANK1_END) : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80) ? \ + ((ADDRESS) <= 0x0801FFFF) : ((ADDRESS) <= 0x0800FFFF)))) + +#endif /* STM32F105xC || STM32F107xC */ + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Types FLASHEx Exported Types + * @{ + */ + +/** + * @brief FLASH Erase structure definition + */ +typedef struct +{ + uint32_t TypeErase; /*!< TypeErase: Mass erase or page erase. + This parameter can be a value of @ref FLASHEx_Type_Erase */ + + uint32_t Banks; /*!< Select banks to erase when Mass erase is enabled. + This parameter must be a value of @ref FLASHEx_Banks */ + + uint32_t PageAddress; /*!< PageAdress: Initial FLASH page address to erase when mass erase is disabled + This parameter must be a number between Min_Data = 0x08000000 and Max_Data = FLASH_BANKx_END + (x = 1 or 2 depending on devices)*/ + + uint32_t NbPages; /*!< NbPages: Number of pagess to be erased. + This parameter must be a value between Min_Data = 1 and Max_Data = (max number of pages - value of initial page)*/ + +} FLASH_EraseInitTypeDef; + +/** + * @brief FLASH Options bytes program structure definition + */ +typedef struct +{ + uint32_t OptionType; /*!< OptionType: Option byte to be configured. + This parameter can be a value of @ref FLASHEx_OB_Type */ + + uint32_t WRPState; /*!< WRPState: Write protection activation or deactivation. + This parameter can be a value of @ref FLASHEx_OB_WRP_State */ + + uint32_t WRPPage; /*!< WRPPage: specifies the page(s) to be write protected + This parameter can be a value of @ref FLASHEx_OB_Write_Protection */ + + uint32_t Banks; /*!< Select banks for WRP activation/deactivation of all sectors. + This parameter must be a value of @ref FLASHEx_Banks */ + + uint8_t RDPLevel; /*!< RDPLevel: Set the read protection level.. + This parameter can be a value of @ref FLASHEx_OB_Read_Protection */ + +#if defined(FLASH_BANK2_END) + uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte: + IWDG / STOP / STDBY / BOOT1 + This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP, + @ref FLASHEx_OB_nRST_STDBY, @ref FLASHEx_OB_BOOT1 */ +#else + uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte: + IWDG / STOP / STDBY + This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP, + @ref FLASHEx_OB_nRST_STDBY */ +#endif /* FLASH_BANK2_END */ + + uint32_t DATAAddress; /*!< DATAAddress: Address of the option byte DATA to be programmed + This parameter can be a value of @ref FLASHEx_OB_Data_Address */ + + uint8_t DATAData; /*!< DATAData: Data to be stored in the option byte DATA + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */ +} FLASH_OBProgramInitTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Constants FLASHEx Exported Constants + * @{ + */ + +/** @defgroup FLASHEx_Constants FLASH Constants + * @{ + */ + +/** @defgroup FLASHEx_Page_Size Page Size + * @{ + */ +#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6) || defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)) +#define FLASH_PAGE_SIZE ((uint32_t)0x400) +#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */ + /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */ + +#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)) +#define FLASH_PAGE_SIZE ((uint32_t)0x800) +#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */ + /* STM32F101xG || STM32F103xG */ + /* STM32F105xC || STM32F107xC */ + +/** + * @} + */ + +/** @defgroup FLASHEx_Type_Erase Type Erase + * @{ + */ +#define FLASH_TYPEERASE_PAGES ((uint32_t)0x00) /*!CR, ((__INTERRUPT__) & 0x0000FFFF)); \ + /* Enable Bank2 IT */ \ + SET_BIT(FLASH->CR2, ((__INTERRUPT__) >> 16)); \ + } while(0) + +/** + * @brief Disable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg @ref FLASH_IT_EOP_BANK1 End of FLASH Operation Interrupt on bank1 + * @arg @ref FLASH_IT_ERR_BANK1 Error Interrupt on bank1 + * @arg @ref FLASH_IT_EOP_BANK2 End of FLASH Operation Interrupt on bank2 + * @arg @ref FLASH_IT_ERR_BANK2 Error Interrupt on bank2 + * @retval none + */ +#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) do { \ + /* Disable Bank1 IT */ \ + CLEAR_BIT(FLASH->CR, ((__INTERRUPT__) & 0x0000FFFF)); \ + /* Disable Bank2 IT */ \ + CLEAR_BIT(FLASH->CR2, ((__INTERRUPT__) >> 16)); \ + } while(0) + +/** + * @brief Get the specified FLASH flag status. + * @param __FLAG__ specifies the FLASH flag to check. + * This parameter can be one of the following values: + * @arg @ref FLASH_FLAG_EOP_BANK1 FLASH End of Operation flag on bank1 + * @arg @ref FLASH_FLAG_WRPERR_BANK1 FLASH Write protected error flag on bank1 + * @arg @ref FLASH_FLAG_PGERR_BANK1 FLASH Programming error flag on bank1 + * @arg @ref FLASH_FLAG_BSY_BANK1 FLASH Busy flag on bank1 + * @arg @ref FLASH_FLAG_EOP_BANK2 FLASH End of Operation flag on bank2 + * @arg @ref FLASH_FLAG_WRPERR_BANK2 FLASH Write protected error flag on bank2 + * @arg @ref FLASH_FLAG_PGERR_BANK2 FLASH Programming error flag on bank2 + * @arg @ref FLASH_FLAG_BSY_BANK2 FLASH Busy flag on bank2 + * @arg @ref FLASH_FLAG_OPTVERR Loaded OB and its complement do not match + * @retval The new state of __FLAG__ (SET or RESET). + */ +#define __HAL_FLASH_GET_FLAG(__FLAG__) (((__FLAG__) == FLASH_FLAG_OPTVERR) ? \ + (FLASH->OBR & FLASH_OBR_OPTERR) : \ + ((((__FLAG__) & SR_FLAG_MASK) != RESET)? \ + (FLASH->SR & ((__FLAG__) & SR_FLAG_MASK)) : \ + (FLASH->SR2 & ((__FLAG__) >> 16)))) + +/** + * @brief Clear the specified FLASH flag. + * @param __FLAG__ specifies the FLASH flags to clear. + * This parameter can be any combination of the following values: + * @arg @ref FLASH_FLAG_EOP_BANK1 FLASH End of Operation flag on bank1 + * @arg @ref FLASH_FLAG_WRPERR_BANK1 FLASH Write protected error flag on bank1 + * @arg @ref FLASH_FLAG_PGERR_BANK1 FLASH Programming error flag on bank1 + * @arg @ref FLASH_FLAG_BSY_BANK1 FLASH Busy flag on bank1 + * @arg @ref FLASH_FLAG_EOP_BANK2 FLASH End of Operation flag on bank2 + * @arg @ref FLASH_FLAG_WRPERR_BANK2 FLASH Write protected error flag on bank2 + * @arg @ref FLASH_FLAG_PGERR_BANK2 FLASH Programming error flag on bank2 + * @arg @ref FLASH_FLAG_BSY_BANK2 FLASH Busy flag on bank2 + * @arg @ref FLASH_FLAG_OPTVERR Loaded OB and its complement do not match + * @retval none + */ +#define __HAL_FLASH_CLEAR_FLAG(__FLAG__) do { \ + /* Clear FLASH_FLAG_OPTVERR flag */ \ + if ((__FLAG__) == FLASH_FLAG_OPTVERR) \ + { \ + CLEAR_BIT(FLASH->OBR, FLASH_OBR_OPTERR); \ + } \ + else { \ + /* Clear Flag in Bank1 */ \ + if (((__FLAG__) & SR_FLAG_MASK) != RESET) \ + { \ + FLASH->SR = ((__FLAG__) & SR_FLAG_MASK); \ + } \ + /* Clear Flag in Bank2 */ \ + if (((__FLAG__) >> 16) != RESET) \ + { \ + FLASH->SR2 = ((__FLAG__) >> 16); \ + } \ + } \ + } while(0) +#else +/** + * @brief Enable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt + * @arg @ref FLASH_IT_ERR Error Interrupt + * @retval none + */ +#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) (FLASH->CR |= (__INTERRUPT__)) + +/** + * @brief Disable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt + * @arg @ref FLASH_IT_ERR Error Interrupt + * @retval none + */ +#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) (FLASH->CR &= ~(__INTERRUPT__)) + +/** + * @brief Get the specified FLASH flag status. + * @param __FLAG__ specifies the FLASH flag to check. + * This parameter can be one of the following values: + * @arg @ref FLASH_FLAG_EOP FLASH End of Operation flag + * @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag + * @arg @ref FLASH_FLAG_PGERR FLASH Programming error flag + * @arg @ref FLASH_FLAG_BSY FLASH Busy flag + * @arg @ref FLASH_FLAG_OPTVERR Loaded OB and its complement do not match + * @retval The new state of __FLAG__ (SET or RESET). + */ +#define __HAL_FLASH_GET_FLAG(__FLAG__) (((__FLAG__) == FLASH_FLAG_OPTVERR) ? \ + (FLASH->OBR & FLASH_OBR_OPTERR) : \ + (FLASH->SR & (__FLAG__))) +/** + * @brief Clear the specified FLASH flag. + * @param __FLAG__ specifies the FLASH flags to clear. + * This parameter can be any combination of the following values: + * @arg @ref FLASH_FLAG_EOP FLASH End of Operation flag + * @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag + * @arg @ref FLASH_FLAG_PGERR FLASH Programming error flag + * @arg @ref FLASH_FLAG_OPTVERR Loaded OB and its complement do not match + * @retval none + */ +#define __HAL_FLASH_CLEAR_FLAG(__FLAG__) do { \ + /* Clear FLASH_FLAG_OPTVERR flag */ \ + if ((__FLAG__) == FLASH_FLAG_OPTVERR) \ + { \ + CLEAR_BIT(FLASH->OBR, FLASH_OBR_OPTERR); \ + } \ + else { \ + /* Clear Flag in Bank1 */ \ + FLASH->SR = (__FLAG__); \ + } \ + } while(0) + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup FLASHEx_Exported_Functions + * @{ + */ + +/** @addtogroup FLASHEx_Exported_Functions_Group1 + * @{ + */ +/* IO operation functions *****************************************************/ +HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError); +HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit); + +/** + * @} + */ + +/** @addtogroup FLASHEx_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ***********************************************/ +HAL_StatusTypeDef HAL_FLASHEx_OBErase(void); +HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit); +void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit); +uint32_t HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_FLASH_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,324 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_gpio.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of GPIO HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_GPIO_H +#define __STM32F1xx_HAL_GPIO_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup GPIO + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup GPIO_Exported_Types GPIO Exported Types + * @{ + */ + +/** + * @brief GPIO Init structure definition + */ +typedef struct +{ + uint32_t Pin; /*!< Specifies the GPIO pins to be configured. + This parameter can be any value of @ref GPIO_pins_define */ + + uint32_t Mode; /*!< Specifies the operating mode for the selected pins. + This parameter can be a value of @ref GPIO_mode_define */ + + uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins. + This parameter can be a value of @ref GPIO_pull_define */ + + uint32_t Speed; /*!< Specifies the speed for the selected pins. + This parameter can be a value of @ref GPIO_speed_define */ +}GPIO_InitTypeDef; + +/** + * @brief GPIO Bit SET and Bit RESET enumeration + */ +typedef enum +{ + GPIO_PIN_RESET = 0, + GPIO_PIN_SET +}GPIO_PinState; + +/** + * @} + */ + + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup GPIO_Exported_Constants GPIO Exported Constants + * @{ + */ + +/** @defgroup GPIO_pins_define GPIO pins define + * @{ + */ +#define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */ +#define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */ +#define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */ +#define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */ +#define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */ +#define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */ +#define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */ +#define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */ +#define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */ +#define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */ +#define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */ +#define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */ +#define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */ +#define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */ +#define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */ +#define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */ +#define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */ + +#define GPIO_PIN_MASK ((uint32_t)0x0000FFFF) /* PIN mask for assert test */ +/** + * @} + */ + + +/** @defgroup GPIO_mode_define GPIO mode define + * @brief GPIO Configuration Mode + * Elements values convention: 0xX0yz00YZ + * - X : GPIO mode or EXTI Mode + * - y : External IT or Event trigger detection + * - z : IO configuration on External IT or Event + * - Y : Output type (Push Pull or Open Drain) + * - Z : IO Direction mode (Input, Output, Alternate or Analog) + * @{ + */ +#define GPIO_MODE_INPUT ((uint32_t)0x00000000) /*!< Input Floating Mode */ +#define GPIO_MODE_OUTPUT_PP ((uint32_t)0x00000001) /*!< Output Push Pull Mode */ +#define GPIO_MODE_OUTPUT_OD ((uint32_t)0x00000011) /*!< Output Open Drain Mode */ +#define GPIO_MODE_AF_PP ((uint32_t)0x00000002) /*!< Alternate Function Push Pull Mode */ +#define GPIO_MODE_AF_OD ((uint32_t)0x00000012) /*!< Alternate Function Open Drain Mode */ +#define GPIO_MODE_AF_INPUT GPIO_MODE_INPUT /*!< Alternate Function Input Mode */ + +#define GPIO_MODE_ANALOG ((uint32_t)0x00000003) /*!< Analog Mode */ + +#define GPIO_MODE_IT_RISING ((uint32_t)0x10110000) /*!< External Interrupt Mode with Rising edge trigger detection */ +#define GPIO_MODE_IT_FALLING ((uint32_t)0x10210000) /*!< External Interrupt Mode with Falling edge trigger detection */ +#define GPIO_MODE_IT_RISING_FALLING ((uint32_t)0x10310000) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ + +#define GPIO_MODE_EVT_RISING ((uint32_t)0x10120000) /*!< External Event Mode with Rising edge trigger detection */ +#define GPIO_MODE_EVT_FALLING ((uint32_t)0x10220000) /*!< External Event Mode with Falling edge trigger detection */ +#define GPIO_MODE_EVT_RISING_FALLING ((uint32_t)0x10320000) /*!< External Event Mode with Rising/Falling edge trigger detection */ + +/** + * @} + */ + + +/** @defgroup GPIO_speed_define GPIO speed define + * @brief GPIO Output Maximum frequency + * @{ + */ +#define GPIO_SPEED_FREQ_LOW (GPIO_CRL_MODE0_1) /*!< Low speed */ +#define GPIO_SPEED_FREQ_MEDIUM (GPIO_CRL_MODE0_0) /*!< Medium speed */ +#define GPIO_SPEED_FREQ_HIGH (GPIO_CRL_MODE0) /*!< High speed */ + +/** + * @} + */ + + + /** @defgroup GPIO_pull_define GPIO pull define + * @brief GPIO Pull-Up or Pull-Down Activation + * @{ + */ +#define GPIO_NOPULL ((uint32_t)0x00000000) /*!< No Pull-up or Pull-down activation */ +#define GPIO_PULLUP ((uint32_t)0x00000001) /*!< Pull-up activation */ +#define GPIO_PULLDOWN ((uint32_t)0x00000002) /*!< Pull-down activation */ + +/** + * @} + */ + +/** + * @} + */ + + +/* Private macros --------------------------------------------------------*/ +/** @addtogroup GPIO_Private_Macros + * @{ + */ + +#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET)) + +#define IS_GPIO_PIN(PIN) (((PIN) & GPIO_PIN_MASK ) != (uint32_t)0x00) + +#define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \ + ((PULL) == GPIO_PULLDOWN)) + +#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW) || \ + ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || ((SPEED) == GPIO_SPEED_FREQ_HIGH)) + +#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\ + ((MODE) == GPIO_MODE_OUTPUT_PP) ||\ + ((MODE) == GPIO_MODE_OUTPUT_OD) ||\ + ((MODE) == GPIO_MODE_AF_PP) ||\ + ((MODE) == GPIO_MODE_AF_OD) ||\ + ((MODE) == GPIO_MODE_IT_RISING) ||\ + ((MODE) == GPIO_MODE_IT_FALLING) ||\ + ((MODE) == GPIO_MODE_IT_RISING_FALLING) ||\ + ((MODE) == GPIO_MODE_EVT_RISING) ||\ + ((MODE) == GPIO_MODE_EVT_FALLING) ||\ + ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\ + ((MODE) == GPIO_MODE_ANALOG)) + +/** + * @} + */ + + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup GPIO_Exported_Macros GPIO Exported Macros + * @{ + */ + +/** + * @brief Checks whether the specified EXTI line flag is set or not. + * @param __EXTI_LINE__: specifies the EXTI line flag to check. + * This parameter can be GPIO_PIN_x where x can be(0..15) + * @retval The new state of __EXTI_LINE__ (SET or RESET). + */ +#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) + +/** + * @brief Clears the EXTI's line pending flags. + * @param __EXTI_LINE__: specifies the EXTI lines flags to clear. + * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__)) + +/** + * @brief Checks whether the specified EXTI line is asserted or not. + * @param __EXTI_LINE__: specifies the EXTI line to check. + * This parameter can be GPIO_PIN_x where x can be(0..15) + * @retval The new state of __EXTI_LINE__ (SET or RESET). + */ +#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) + +/** + * @brief Clears the EXTI's line pending bits. + * @param __EXTI_LINE__: specifies the EXTI lines to clear. + * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__)) + +/** + * @brief Generates a Software interrupt on selected EXTI line. + * @param __EXTI_LINE__: specifies the EXTI line to check. + * This parameter can be GPIO_PIN_x where x can be(0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__)) + +/* Include GPIO HAL Extension module */ +#include "stm32f1xx_hal_gpio_ex.h" + +/** + * @} + */ + + + +/* Exported functions --------------------------------------------------------*/ +/* Initialization and de-initialization functions *******************************/ +/** @addtogroup GPIO_Exported_Functions + * @{ + */ + +/** @addtogroup GPIO_Exported_Functions_Group1 + * @{ + */ +void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); +void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); +/** + * @} + */ + +/* IO operation functions *******************************************************/ +/** @addtogroup GPIO_Exported_Functions_Group2 + * @{ + */ +GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); +void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_GPIO_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,887 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_gpio_ex.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of GPIO HAL Extension module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_GPIO_EX_H +#define __STM32F1xx_HAL_GPIO_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIOEx GPIOEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup GPIOEx_Exported_Constants GPIOEx Exported Constants + * @{ + */ + +/** @defgroup GPIOEx_EVENTOUT EVENTOUT Cortex Configuration + * @brief This section propose definition to use the Cortex EVENTOUT signal. + * @{ + */ + +/** @defgroup GPIOEx_EVENTOUT_PIN EVENTOUT Pin + * @{ + */ + +#define AFIO_EVENTOUT_PIN_0 AFIO_EVCR_PIN_PX0 /*!< EVENTOUT on pin 0 */ +#define AFIO_EVENTOUT_PIN_1 AFIO_EVCR_PIN_PX1 /*!< EVENTOUT on pin 1 */ +#define AFIO_EVENTOUT_PIN_2 AFIO_EVCR_PIN_PX2 /*!< EVENTOUT on pin 2 */ +#define AFIO_EVENTOUT_PIN_3 AFIO_EVCR_PIN_PX3 /*!< EVENTOUT on pin 3 */ +#define AFIO_EVENTOUT_PIN_4 AFIO_EVCR_PIN_PX4 /*!< EVENTOUT on pin 4 */ +#define AFIO_EVENTOUT_PIN_5 AFIO_EVCR_PIN_PX5 /*!< EVENTOUT on pin 5 */ +#define AFIO_EVENTOUT_PIN_6 AFIO_EVCR_PIN_PX6 /*!< EVENTOUT on pin 6 */ +#define AFIO_EVENTOUT_PIN_7 AFIO_EVCR_PIN_PX7 /*!< EVENTOUT on pin 7 */ +#define AFIO_EVENTOUT_PIN_8 AFIO_EVCR_PIN_PX8 /*!< EVENTOUT on pin 8 */ +#define AFIO_EVENTOUT_PIN_9 AFIO_EVCR_PIN_PX9 /*!< EVENTOUT on pin 9 */ +#define AFIO_EVENTOUT_PIN_10 AFIO_EVCR_PIN_PX10 /*!< EVENTOUT on pin 10 */ +#define AFIO_EVENTOUT_PIN_11 AFIO_EVCR_PIN_PX11 /*!< EVENTOUT on pin 11 */ +#define AFIO_EVENTOUT_PIN_12 AFIO_EVCR_PIN_PX12 /*!< EVENTOUT on pin 12 */ +#define AFIO_EVENTOUT_PIN_13 AFIO_EVCR_PIN_PX13 /*!< EVENTOUT on pin 13 */ +#define AFIO_EVENTOUT_PIN_14 AFIO_EVCR_PIN_PX14 /*!< EVENTOUT on pin 14 */ +#define AFIO_EVENTOUT_PIN_15 AFIO_EVCR_PIN_PX15 /*!< EVENTOUT on pin 15 */ + +#define IS_AFIO_EVENTOUT_PIN(__PIN__) (((__PIN__) == AFIO_EVENTOUT_PIN_0) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_1) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_2) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_3) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_4) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_5) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_6) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_7) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_8) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_9) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_10) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_11) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_12) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_13) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_14) || \ + ((__PIN__) == AFIO_EVENTOUT_PIN_15)) +/** + * @} + */ + +/** @defgroup GPIOEx_EVENTOUT_PORT EVENTOUT Port + * @{ + */ + +#define AFIO_EVENTOUT_PORT_A AFIO_EVCR_PORT_PA /*!< EVENTOUT on port A */ +#define AFIO_EVENTOUT_PORT_B AFIO_EVCR_PORT_PB /*!< EVENTOUT on port B */ +#define AFIO_EVENTOUT_PORT_C AFIO_EVCR_PORT_PC /*!< EVENTOUT on port C */ +#define AFIO_EVENTOUT_PORT_D AFIO_EVCR_PORT_PD /*!< EVENTOUT on port D */ +#define AFIO_EVENTOUT_PORT_E AFIO_EVCR_PORT_PE /*!< EVENTOUT on port E */ + +#define IS_AFIO_EVENTOUT_PORT(__PORT__) (((__PORT__) == AFIO_EVENTOUT_PORT_A) || \ + ((__PORT__) == AFIO_EVENTOUT_PORT_B) || \ + ((__PORT__) == AFIO_EVENTOUT_PORT_C) || \ + ((__PORT__) == AFIO_EVENTOUT_PORT_D) || \ + ((__PORT__) == AFIO_EVENTOUT_PORT_E)) +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup GPIOEx_AFIO_AF_REMAPPING Alternate Function Remapping + * @brief This section propose definition to remap the alternate function to some other port/pins. + * @{ + */ + +/** + * @brief Enable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI. + * @note ENABLE: Remap (NSS/PA15, SCK/PB3, MISO/PB4, MOSI/PB5) + * @retval None + */ +#define __HAL_AFIO_REMAP_SPI1_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_SPI1_REMAP) + +/** + * @brief Disable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI. + * @note DISABLE: No remap (NSS/PA4, SCK/PA5, MISO/PA6, MOSI/PA7) + * @retval None + */ +#define __HAL_AFIO_REMAP_SPI1_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_SPI1_REMAP) + +/** + * @brief Enable the remapping of I2C1 alternate function SCL and SDA. + * @note ENABLE: Remap (SCL/PB8, SDA/PB9) + * @retval None + */ +#define __HAL_AFIO_REMAP_I2C1_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_I2C1_REMAP) + +/** + * @brief Disable the remapping of I2C1 alternate function SCL and SDA. + * @note DISABLE: No remap (SCL/PB6, SDA/PB7) + * @retval None + */ +#define __HAL_AFIO_REMAP_I2C1_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_I2C1_REMAP) + +/** + * @brief Enable the remapping of USART1 alternate function TX and RX. + * @note ENABLE: Remap (TX/PB6, RX/PB7) + * @retval None + */ +#define __HAL_AFIO_REMAP_USART1_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_USART1_REMAP) + +/** + * @brief Disable the remapping of USART1 alternate function TX and RX. + * @note DISABLE: No remap (TX/PA9, RX/PA10) + * @retval None + */ +#define __HAL_AFIO_REMAP_USART1_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_USART1_REMAP) + +/** + * @brief Enable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX. + * @note ENABLE: Remap (CTS/PD3, RTS/PD4, TX/PD5, RX/PD6, CK/PD7) + * @retval None + */ +#define __HAL_AFIO_REMAP_USART2_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_USART2_REMAP) + +/** + * @brief Disable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX. + * @note DISABLE: No remap (CTS/PA0, RTS/PA1, TX/PA2, RX/PA3, CK/PA4) + * @retval None + */ +#define __HAL_AFIO_REMAP_USART2_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_USART2_REMAP) + +/** + * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX. + * @note ENABLE: Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) + * @retval None + */ +#define __HAL_AFIO_REMAP_USART3_ENABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_USART3_REMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP) + +/** + * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX. + * @note PARTIAL: Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) + * @retval None + */ +#define __HAL_AFIO_REMAP_USART3_PARTIAL() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_USART3_REMAP, AFIO_MAPR_USART3_REMAP_PARTIALREMAP) + +/** + * @brief Disable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX. + * @note DISABLE: No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) + * @retval None + */ +#define __HAL_AFIO_REMAP_USART3_DISABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_USART3_REMAP, AFIO_MAPR_USART3_REMAP_NOREMAP) + +/** + * @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN) + * @note ENABLE: Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM1_ENABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM1_REMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP) + +/** + * @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN) + * @note PARTIAL: Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM1_PARTIAL() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM1_REMAP, AFIO_MAPR_TIM1_REMAP_PARTIALREMAP) + +/** + * @brief Disable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN) + * @note DISABLE: No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15) + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM1_DISABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM1_REMAP, AFIO_MAPR_TIM1_REMAP_NOREMAP) + +/** + * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR) + * @note ENABLE: Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM2_ENABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM2_REMAP, AFIO_MAPR_TIM2_REMAP_FULLREMAP) + +/** + * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR) + * @note PARTIAL_2: Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM2_PARTIAL_2() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM2_REMAP, AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2) + +/** + * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR) + * @note PARTIAL_1: Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM2_PARTIAL_1() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM2_REMAP, AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1) + +/** + * @brief Disable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR) + * @note DISABLE: No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM2_DISABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM2_REMAP, AFIO_MAPR_TIM2_REMAP_NOREMAP) + +/** + * @brief Enable the remapping of TIM3 alternate function channels 1 to 4 + * @note ENABLE: Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) + * @note TIM3_ETR on PE0 is not re-mapped. + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM3_ENABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM3_REMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP) + +/** + * @brief Enable the remapping of TIM3 alternate function channels 1 to 4 + * @note PARTIAL: Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) + * @note TIM3_ETR on PE0 is not re-mapped. + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM3_PARTIAL() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM3_REMAP, AFIO_MAPR_TIM3_REMAP_PARTIALREMAP) + +/** + * @brief Disable the remapping of TIM3 alternate function channels 1 to 4 + * @note DISABLE: No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) + * @note TIM3_ETR on PE0 is not re-mapped. + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM3_DISABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM3_REMAP, AFIO_MAPR_TIM3_REMAP_NOREMAP) + +/** + * @brief Enable the remapping of TIM4 alternate function channels 1 to 4. + * @note ENABLE: Full remap (TIM4_CH1/PD12, TIM4_CH2/PD13, TIM4_CH3/PD14, TIM4_CH4/PD15) + * @note TIM4_ETR on PE0 is not re-mapped. + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM4_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_TIM4_REMAP) + +/** + * @brief Disable the remapping of TIM4 alternate function channels 1 to 4. + * @note DISABLE: No remap (TIM4_CH1/PB6, TIM4_CH2/PB7, TIM4_CH3/PB8, TIM4_CH4/PB9) + * @note TIM4_ETR on PE0 is not re-mapped. + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM4_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_TIM4_REMAP) + +#if defined(AFIO_MAPR_CAN_REMAP_REMAP1) + +/** + * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface. + * @note CASE 1: CAN_RX mapped to PA11, CAN_TX mapped to PA12 + * @retval None + */ +#define __HAL_AFIO_REMAP_CAN1_1() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_CAN_REMAP, AFIO_MAPR_CAN_REMAP_REMAP1) + +/** + * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface. + * @note CASE 2: CAN_RX mapped to PB8, CAN_TX mapped to PB9 (not available on 36-pin package) + * @retval None + */ +#define __HAL_AFIO_REMAP_CAN1_2() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_CAN_REMAP, AFIO_MAPR_CAN_REMAP_REMAP2) + +/** + * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface. + * @note CASE 3: CAN_RX mapped to PD0, CAN_TX mapped to PD1 + * @retval None + */ +#define __HAL_AFIO_REMAP_CAN1_3() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_CAN_REMAP, AFIO_MAPR_CAN_REMAP_REMAP3) +#endif + +/** + * @brief Enable the remapping of PD0 and PD1. When the HSE oscillator is not used + * (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and + * OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available + * on 100-pin and 144-pin packages, no need for remapping). + * @note ENABLE: PD0 remapped on OSC_IN, PD1 remapped on OSC_OUT. + * @retval None + */ +#define __HAL_AFIO_REMAP_PD01_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_PD01_REMAP) + +/** + * @brief Disable the remapping of PD0 and PD1. When the HSE oscillator is not used + * (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and + * OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available + * on 100-pin and 144-pin packages, no need for remapping). + * @note DISABLE: No remapping of PD0 and PD1 + * @retval None + */ +#define __HAL_AFIO_REMAP_PD01_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_PD01_REMAP) + +#if defined(AFIO_MAPR_TIM5CH4_IREMAP) +/** + * @brief Enable the remapping of TIM5CH4. + * @note ENABLE: LSI internal clock is connected to TIM5_CH4 input for calibration purpose. + * @note This function is available only in high density value line devices. + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM5CH4_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_TIM5CH4_IREMAP) + +/** + * @brief Disable the remapping of TIM5CH4. + * @note DISABLE: TIM5_CH4 is connected to PA3 + * @note This function is available only in high density value line devices. + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM5CH4_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_TIM5CH4_IREMAP) +#endif + +#if defined(AFIO_MAPR_ETH_REMAP) +/** + * @brief Enable the remapping of Ethernet MAC connections with the PHY. + * @note ENABLE: Remap (RX_DV-CRS_DV/PD8, RXD0/PD9, RXD1/PD10, RXD2/PD11, RXD3/PD12) + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_REMAP_ETH_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_ETH_REMAP) + +/** + * @brief Disable the remapping of Ethernet MAC connections with the PHY. + * @note DISABLE: No remap (RX_DV-CRS_DV/PA7, RXD0/PC4, RXD1/PC5, RXD2/PB0, RXD3/PB1) + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_REMAP_ETH_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_ETH_REMAP) +#endif + +#if defined(AFIO_MAPR_CAN2_REMAP) + +/** + * @brief Enable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX. + * @note ENABLE: Remap (CAN2_RX/PB5, CAN2_TX/PB6) + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_REMAP_CAN2_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_CAN2_REMAP) + +/** + * @brief Disable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX. + * @note DISABLE: No remap (CAN2_RX/PB12, CAN2_TX/PB13) + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_REMAP_CAN2_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_CAN2_REMAP) +#endif + +#if defined(AFIO_MAPR_MII_RMII_SEL) +/** + * @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY. + * @note ETH_RMII: Configure Ethernet MAC for connection with an RMII PHY + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_ETH_RMII() SET_BIT(AFIO->MAPR, AFIO_MAPR_MII_RMII_SEL) + +/** + * @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY. + * @note ETH_MII: Configure Ethernet MAC for connection with an MII PHY + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_ETH_MII() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_MII_RMII_SEL) +#endif + +/** + * @brief Enable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion). + * @note ENABLE: ADC1 External Event injected conversion is connected to TIM8 Channel4. + * @retval None + */ +#define __HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_ADC1_ETRGINJ_REMAP) + +/** + * @brief Disable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion). + * @note DISABLE: ADC1 External trigger injected conversion is connected to EXTI15 + * @retval None + */ +#define __HAL_AFIO_REMAP_ADC1_ETRGINJ_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_ADC1_ETRGINJ_REMAP) + +/** + * @brief Enable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion). + * @note ENABLE: ADC1 External Event regular conversion is connected to TIM8 TRG0. + * @retval None + */ +#define __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_ADC1_ETRGREG_REMAP) + +/** + * @brief Disable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion). + * @note DISABLE: ADC1 External trigger regular conversion is connected to EXTI11 + * @retval None + */ +#define __HAL_AFIO_REMAP_ADC1_ETRGREG_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_ADC1_ETRGREG_REMAP) + +#if defined(AFIO_MAPR_ADC2_ETRGINJ_REMAP) + +/** + * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion). + * @note ENABLE: ADC2 External Event injected conversion is connected to TIM8 Channel4. + * @retval None + */ +#define __HAL_AFIO_REMAP_ADC2_ETRGINJ_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_ADC2_ETRGINJ_REMAP) + +/** + * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion). + * @note DISABLE: ADC2 External trigger injected conversion is connected to EXTI15 + * @retval None + */ +#define __HAL_AFIO_REMAP_ADC2_ETRGINJ_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_ADC2_ETRGINJ_REMAP) +#endif + +#if defined (AFIO_MAPR_ADC2_ETRGREG_REMAP) + +/** + * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion). + * @note ENABLE: ADC2 External Event regular conversion is connected to TIM8 TRG0. + * @retval None + */ +#define __HAL_AFIO_REMAP_ADC2_ETRGREG_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_ADC2_ETRGREG_REMAP) + +/** + * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion). + * @note DISABLE: ADC2 External trigger regular conversion is connected to EXTI11 + * @retval None + */ +#define __HAL_AFIO_REMAP_ADC2_ETRGREG_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_ADC2_ETRGREG_REMAP) +#endif + +/** + * @brief Enable the Serial wire JTAG configuration + * @note ENABLE: Full SWJ (JTAG-DP + SW-DP): Reset State + * @retval None + */ +#define __HAL_AFIO_REMAP_SWJ_ENABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_RESET) + +/** + * @brief Enable the Serial wire JTAG configuration + * @note NONJTRST: Full SWJ (JTAG-DP + SW-DP) but without NJTRST + * @retval None + */ +#define __HAL_AFIO_REMAP_SWJ_NONJTRST() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_NOJNTRST) + +/** + * @brief Enable the Serial wire JTAG configuration + * @note NOJTAG: JTAG-DP Disabled and SW-DP Enabled + * @retval None + */ +#define __HAL_AFIO_REMAP_SWJ_NOJTAG() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_JTAGDISABLE) + +/** + * @brief Disable the Serial wire JTAG configuration + * @note DISABLE: JTAG-DP Disabled and SW-DP Disabled + * @retval None + */ +#define __HAL_AFIO_REMAP_SWJ_DISABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_DISABLE) + +#if defined(AFIO_MAPR_SPI3_REMAP) + +/** + * @brief Enable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD. + * @note ENABLE: Remap (SPI3_NSS-I2S3_WS/PA4, SPI3_SCK-I2S3_CK/PC10, SPI3_MISO/PC11, SPI3_MOSI-I2S3_SD/PC12) + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_REMAP_SPI3_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_SPI3_REMAP) + +/** + * @brief Disable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD. + * @note DISABLE: No remap (SPI3_NSS-I2S3_WS/PA15, SPI3_SCK-I2S3_CK/PB3, SPI3_MISO/PB4, SPI3_MOSI-I2S3_SD/PB5). + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_REMAP_SPI3_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_SPI3_REMAP) +#endif + +#if defined(AFIO_MAPR_TIM2ITR1_IREMAP) + +/** + * @brief Control of TIM2_ITR1 internal mapping. + * @note TO_USB: Connect USB OTG SOF (Start of Frame) output to TIM2_ITR1 for calibration purposes. + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_TIM2ITR1_TO_USB() SET_BIT(AFIO->MAPR, AFIO_MAPR_TIM2ITR1_IREMAP) + +/** + * @brief Control of TIM2_ITR1 internal mapping. + * @note TO_ETH: Connect TIM2_ITR1 internally to the Ethernet PTP output for calibration purposes. + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_TIM2ITR1_TO_ETH() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_TIM2ITR1_IREMAP) +#endif + +#if defined(AFIO_MAPR_PTP_PPS_REMAP) + +/** + * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion). + * @note ENABLE: PTP_PPS is output on PB5 pin. + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_ETH_PTP_PPS_ENABLE() SET_BIT(AFIO->MAPR, AFIO_MAPR_PTP_PPS_REMAP) + +/** + * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion). + * @note DISABLE: PTP_PPS not output on PB5 pin. + * @note This bit is available only in connectivity line devices and is reserved otherwise. + * @retval None + */ +#define __HAL_AFIO_ETH_PTP_PPS_DISABLE() CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_PTP_PPS_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM9_REMAP) + +/** + * @brief Enable the remapping of TIM9_CH1 and TIM9_CH2. + * @note ENABLE: Remap (TIM9_CH1 on PE5 and TIM9_CH2 on PE6). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM9_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP) + +/** + * @brief Disable the remapping of TIM9_CH1 and TIM9_CH2. + * @note DISABLE: No remap (TIM9_CH1 on PA2 and TIM9_CH2 on PA3). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM9_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM10_REMAP) + +/** + * @brief Enable the remapping of TIM10_CH1. + * @note ENABLE: Remap (TIM10_CH1 on PF6). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM10_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP) + +/** + * @brief Disable the remapping of TIM10_CH1. + * @note DISABLE: No remap (TIM10_CH1 on PB8). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM10_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM11_REMAP) +/** + * @brief Enable the remapping of TIM11_CH1. + * @note ENABLE: Remap (TIM11_CH1 on PF7). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM11_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP) + +/** + * @brief Disable the remapping of TIM11_CH1. + * @note DISABLE: No remap (TIM11_CH1 on PB9). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM11_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM13_REMAP) + +/** + * @brief Enable the remapping of TIM13_CH1. + * @note ENABLE: Remap STM32F100:(TIM13_CH1 on PF8). Others:(TIM13_CH1 on PB0). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM13_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP) + +/** + * @brief Disable the remapping of TIM13_CH1. + * @note DISABLE: No remap STM32F100:(TIM13_CH1 on PA6). Others:(TIM13_CH1 on PC8). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM13_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM14_REMAP) + +/** + * @brief Enable the remapping of TIM14_CH1. + * @note ENABLE: Remap STM32F100:(TIM14_CH1 on PB1). Others:(TIM14_CH1 on PF9). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM14_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP) + +/** + * @brief Disable the remapping of TIM14_CH1. + * @note DISABLE: No remap STM32F100:(TIM14_CH1 on PC9). Others:(TIM14_CH1 on PA7). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM14_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP) +#endif + +#if defined(AFIO_MAPR2_FSMC_NADV_REMAP) + +/** + * @brief Controls the use of the optional FSMC_NADV signal. + * @note DISCONNECTED: The NADV signal is not connected. The I/O pin can be used by another peripheral. + * @retval None + */ +#define __HAL_AFIO_FSMCNADV_DISCONNECTED() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP) + +/** + * @brief Controls the use of the optional FSMC_NADV signal. + * @note CONNECTED: The NADV signal is connected to the output (default). + * @retval None + */ +#define __HAL_AFIO_FSMCNADV_CONNECTED() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM15_REMAP) + +/** + * @brief Enable the remapping of TIM15_CH1 and TIM15_CH2. + * @note ENABLE: Remap (TIM15_CH1 on PB14 and TIM15_CH2 on PB15). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM15_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP) + +/** + * @brief Disable the remapping of TIM15_CH1 and TIM15_CH2. + * @note DISABLE: No remap (TIM15_CH1 on PA2 and TIM15_CH2 on PA3). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM15_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM16_REMAP) + +/** + * @brief Enable the remapping of TIM16_CH1. + * @note ENABLE: Remap (TIM16_CH1 on PA6). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM16_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP) + +/** + * @brief Disable the remapping of TIM16_CH1. + * @note DISABLE: No remap (TIM16_CH1 on PB8). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM16_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM17_REMAP) + +/** + * @brief Enable the remapping of TIM17_CH1. + * @note ENABLE: Remap (TIM17_CH1 on PA7). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM17_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP) + +/** + * @brief Disable the remapping of TIM17_CH1. + * @note DISABLE: No remap (TIM17_CH1 on PB9). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM17_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP) +#endif + +#if defined(AFIO_MAPR2_CEC_REMAP) + +/** + * @brief Enable the remapping of CEC. + * @note ENABLE: Remap (CEC on PB10). + * @retval None + */ +#define __HAL_AFIO_REMAP_CEC_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP) + +/** + * @brief Disable the remapping of CEC. + * @note DISABLE: No remap (CEC on PB8). + * @retval None + */ +#define __HAL_AFIO_REMAP_CEC_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM1_DMA_REMAP) + +/** + * @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels. + * @note ENABLE: Remap (TIM1_CH1 DMA request/DMA1 Channel6, TIM1_CH2 DMA request/DMA1 Channel6) + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM1DMA_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP) + +/** + * @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels. + * @note DISABLE: No remap (TIM1_CH1 DMA request/DMA1 Channel2, TIM1_CH2 DMA request/DMA1 Channel3). + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM1DMA_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM67_DAC_DMA_REMAP) + +/** + * @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels. + * @note ENABLE: Remap (TIM6_DAC1 DMA request/DMA1 Channel3, TIM7_DAC2 DMA request/DMA1 Channel4) + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM67DACDMA_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP) + +/** + * @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels. + * @note DISABLE: No remap (TIM6_DAC1 DMA request/DMA2 Channel3, TIM7_DAC2 DMA request/DMA2 Channel4) + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM67DACDMA_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP) +#endif + +#if defined(AFIO_MAPR2_TIM12_REMAP) + +/** + * @brief Enable the remapping of TIM12_CH1 and TIM12_CH2. + * @note ENABLE: Remap (TIM12_CH1 on PB12 and TIM12_CH2 on PB13). + * @note This bit is available only in high density value line devices. + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM12_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP) + +/** + * @brief Disable the remapping of TIM12_CH1 and TIM12_CH2. + * @note DISABLE: No remap (TIM12_CH1 on PC4 and TIM12_CH2 on PC5). + * @note This bit is available only in high density value line devices. + * @retval None + */ +#define __HAL_AFIO_REMAP_TIM12_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP) +#endif + +#if defined(AFIO_MAPR2_MISC_REMAP) + +/** + * @brief Miscellaneous features remapping. + * This bit is set and cleared by software. It controls miscellaneous features. + * The DMA2 channel 5 interrupt position in the vector table. + * The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register). + * @note ENABLE: DMA2 channel 5 interrupt is mapped separately at position 60 and TIM15 TRGO event is + * selected as DAC Trigger 3, TIM15 triggers TIM1/3. + * @note This bit is available only in high density value line devices. + * @retval None + */ +#define __HAL_AFIO_REMAP_MISC_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP) + +/** + * @brief Miscellaneous features remapping. + * This bit is set and cleared by software. It controls miscellaneous features. + * The DMA2 channel 5 interrupt position in the vector table. + * The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register). + * @note DISABLE: DMA2 channel 5 interrupt is mapped with DMA2 channel 4 at position 59, TIM5 TRGO + * event is selected as DAC Trigger 3, TIM5 triggers TIM1/3. + * @note This bit is available only in high density value line devices. + * @retval None + */ +#define __HAL_AFIO_REMAP_MISC_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP) +#endif + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup GPIOEx_Private_Macros GPIOEx Private Macros + * @{ + */ +#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :3U) +#elif defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :4U) +#elif defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U :\ + ((__GPIOx__) == (GPIOF))? 5U :6U) +#endif + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup GPIOEx_Exported_Functions + * @{ + */ + +/** @addtogroup GPIOEx_Exported_Functions_Group1 + * @{ + */ +void HAL_GPIOEx_ConfigEventout(uint32_t GPIO_PortSource, uint32_t GPIO_PinSource); +void HAL_GPIOEx_EnableEventout(void); +void HAL_GPIOEx_DisableEventout(void); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_GPIO_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,406 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_pwr.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of PWR HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_PWR_H +#define __STM32F1xx_HAL_PWR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup PWR + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup PWR_Exported_Types PWR Exported Types + * @{ + */ + +/** + * @brief PWR PVD configuration structure definition + */ +typedef struct +{ + uint32_t PVDLevel; /*!< PVDLevel: Specifies the PVD detection level. + This parameter can be a value of @ref PWR_PVD_detection_level */ + + uint32_t Mode; /*!< Mode: Specifies the operating mode for the selected pins. + This parameter can be a value of @ref PWR_PVD_Mode */ +}PWR_PVDTypeDef; + + +/** + * @} + */ + + +/* Internal constants --------------------------------------------------------*/ + +/** @addtogroup PWR_Private_Constants + * @{ + */ + +#define PWR_EXTI_LINE_PVD ((uint32_t)0x00010000) /*!< External interrupt line 16 Connected to the PVD EXTI Line */ + +/** + * @} + */ + + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup PWR_Exported_Constants PWR Exported Constants + * @{ + */ + +/** @defgroup PWR_PVD_detection_level PWR PVD detection level + * @{ + */ +#define PWR_PVDLEVEL_0 PWR_CR_PLS_2V2 +#define PWR_PVDLEVEL_1 PWR_CR_PLS_2V3 +#define PWR_PVDLEVEL_2 PWR_CR_PLS_2V4 +#define PWR_PVDLEVEL_3 PWR_CR_PLS_2V5 +#define PWR_PVDLEVEL_4 PWR_CR_PLS_2V6 +#define PWR_PVDLEVEL_5 PWR_CR_PLS_2V7 +#define PWR_PVDLEVEL_6 PWR_CR_PLS_2V8 +#define PWR_PVDLEVEL_7 PWR_CR_PLS_2V9 + +/** + * @} + */ + +/** @defgroup PWR_PVD_Mode PWR PVD Mode + * @{ + */ +#define PWR_PVD_MODE_NORMAL ((uint32_t)0x00000000) /*!< basic mode is used */ +#define PWR_PVD_MODE_IT_RISING ((uint32_t)0x00010001) /*!< External Interrupt Mode with Rising edge trigger detection */ +#define PWR_PVD_MODE_IT_FALLING ((uint32_t)0x00010002) /*!< External Interrupt Mode with Falling edge trigger detection */ +#define PWR_PVD_MODE_IT_RISING_FALLING ((uint32_t)0x00010003) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ +#define PWR_PVD_MODE_EVENT_RISING ((uint32_t)0x00020001) /*!< Event Mode with Rising edge trigger detection */ +#define PWR_PVD_MODE_EVENT_FALLING ((uint32_t)0x00020002) /*!< Event Mode with Falling edge trigger detection */ +#define PWR_PVD_MODE_EVENT_RISING_FALLING ((uint32_t)0x00020003) /*!< Event Mode with Rising/Falling edge trigger detection */ + +/** + * @} + */ + + +/** @defgroup PWR_WakeUp_Pins PWR WakeUp Pins + * @{ + */ + +#define PWR_WAKEUP_PIN1 PWR_CSR_EWUP + +/** + * @} + */ + +/** @defgroup PWR_Regulator_state_in_SLEEP_STOP_mode PWR Regulator state in SLEEP/STOP mode + * @{ + */ +#define PWR_MAINREGULATOR_ON ((uint32_t)0x00000000) +#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS + +/** + * @} + */ + +/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry + * @{ + */ +#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01) +#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02) + +/** + * @} + */ + +/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry + * @{ + */ +#define PWR_STOPENTRY_WFI ((uint8_t)0x01) +#define PWR_STOPENTRY_WFE ((uint8_t)0x02) + +/** + * @} + */ + +/** @defgroup PWR_Flag PWR Flag + * @{ + */ +#define PWR_FLAG_WU PWR_CSR_WUF +#define PWR_FLAG_SB PWR_CSR_SBF +#define PWR_FLAG_PVDO PWR_CSR_PVDO + + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup PWR_Exported_Macros PWR Exported Macros + * @{ + */ + +/** @brief Check PWR flag is set or not. + * @param __FLAG__: specifies the flag to check. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event + * was received from the WKUP pin or from the RTC alarm + * An additional wakeup event is detected if the WKUP pin is enabled + * (by setting the EWUP bit) when the WKUP pin level is already high. + * @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was + * resumed from StandBy mode. + * @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled + * by the HAL_PWR_EnablePVD() function. The PVD is stopped by Standby mode + * For this reason, this bit is equal to 0 after Standby or reset + * until the PVDE bit is set. + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_PWR_GET_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__)) + +/** @brief Clear the PWR's pending flags. + * @param __FLAG__: specifies the flag to clear. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag + * @arg PWR_FLAG_SB: StandBy flag + */ +#define __HAL_PWR_CLEAR_FLAG(__FLAG__) SET_BIT(PWR->CR, ((__FLAG__) << 2)) + +/** + * @brief Enable interrupt on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD) + +/** + * @brief Disable interrupt on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD) + +/** + * @brief Enable event on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD) + +/** + * @brief Disable event on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD) + + +/** + * @brief PVD EXTI line configuration: set falling edge trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD) + + +/** + * @brief Disable the PVD Extended Interrupt Falling Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD) + + +/** + * @brief PVD EXTI line configuration: set rising edge trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD) + +/** + * @brief Disable the PVD Extended Interrupt Rising Trigger. + * This parameter can be: + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD) + +/** + * @brief PVD EXTI line configuration: set rising & falling edge trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE(); + +/** + * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger. + * This parameter can be: + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); + + + +/** + * @brief Check whether the specified PVD EXTI interrupt flag is set or not. + * @retval EXTI PVD Line Status. + */ +#define __HAL_PWR_PVD_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_PVD)) + +/** + * @brief Clear the PVD EXTI flag. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_PVD)) + +/** + * @brief Generate a Software interrupt on selected EXTI line. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER, PWR_EXTI_LINE_PVD) +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup PWR_Private_Macros PWR Private Macros + * @{ + */ +#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1)|| \ + ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3)|| \ + ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5)|| \ + ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7)) + + +#define IS_PWR_PVD_MODE(MODE) (((MODE) == PWR_PVD_MODE_IT_RISING)|| ((MODE) == PWR_PVD_MODE_IT_FALLING) || \ + ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) || \ + ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || \ + ((MODE) == PWR_PVD_MODE_NORMAL)) + +#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1)) + +#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || \ + ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON)) + +#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE)) + +#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE)) + +/** + * @} + */ + + + +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup PWR_Exported_Functions PWR Exported Functions + * @{ + */ + +/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ + +/* Initialization and de-initialization functions *******************************/ +void HAL_PWR_DeInit(void); +void HAL_PWR_EnableBkUpAccess(void); +void HAL_PWR_DisableBkUpAccess(void); + +/** + * @} + */ + +/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions + * @{ + */ + +/* Peripheral Control functions ************************************************/ +void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD); +/* #define HAL_PWR_ConfigPVD 12*/ +void HAL_PWR_EnablePVD(void); +void HAL_PWR_DisablePVD(void); + +/* WakeUp pins configuration functions ****************************************/ +void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx); +void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx); + +/* Low Power modes configuration functions ************************************/ +void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry); +void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry); +void HAL_PWR_EnterSTANDBYMode(void); + +void HAL_PWR_EnableSleepOnExit(void); +void HAL_PWR_DisableSleepOnExit(void); +void HAL_PWR_EnableSEVOnPend(void); +void HAL_PWR_DisableSEVOnPend(void); + + + +void HAL_PWR_PVD_IRQHandler(void); +void HAL_PWR_PVDCallback(void); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F1xx_HAL_PWR_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1395 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_rcc.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of RCC HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_RCC_H +#define __STM32F1xx_HAL_RCC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup RCC + * @{ + */ + +/** @addtogroup RCC_Private_Constants + * @{ + */ + +/** @defgroup RCC_Timeout RCC Timeout + * @{ + */ + +/* Disable Backup domain write protection state change timeout */ +#define RCC_DBP_TIMEOUT_VALUE ((uint32_t)100) /* 100 ms */ +/* LSE state change timeout */ +#define RCC_LSE_TIMEOUT_VALUE LSE_STARTUP_TIMEOUT +#define CLOCKSWITCH_TIMEOUT_VALUE ((uint32_t)5000) /* 5 s */ +#define HSE_TIMEOUT_VALUE HSE_STARTUP_TIMEOUT +#define HSI_TIMEOUT_VALUE ((uint32_t)2) /* 2 ms (minimum Tick + 1) */ +#define LSI_TIMEOUT_VALUE ((uint32_t)2) /* 2 ms (minimum Tick + 1) */ +#define PLL_TIMEOUT_VALUE ((uint32_t)2) /* 2 ms (minimum Tick + 1) */ +#define LSI_VALUE ((uint32_t)40000) /* 40kHz */ +/** + * @} + */ + +/** @defgroup RCC_Register_Offset Register offsets + * @{ + */ +#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) +#define RCC_CR_OFFSET 0x00 +#define RCC_CFGR_OFFSET 0x04 +#define RCC_CIR_OFFSET 0x08 +#define RCC_BDCR_OFFSET 0x20 +#define RCC_CSR_OFFSET 0x24 + +/** + * @} + */ + +/** @defgroup RCC_BitAddress_AliasRegion BitAddress AliasRegion + * @brief RCC registers bit address in the alias region + * @{ + */ +#define RCC_CR_OFFSET_BB (RCC_OFFSET + RCC_CR_OFFSET) +#define RCC_CFGR_OFFSET_BB (RCC_OFFSET + RCC_CFGR_OFFSET) +#define RCC_CIR_OFFSET_BB (RCC_OFFSET + RCC_CIR_OFFSET) +#define RCC_BDCR_OFFSET_BB (RCC_OFFSET + RCC_BDCR_OFFSET) +#define RCC_CSR_OFFSET_BB (RCC_OFFSET + RCC_CSR_OFFSET) + +/* --- CR Register ---*/ +/* Alias word address of HSION bit */ +#define RCC_HSION_BIT_NUMBER POSITION_VAL(RCC_CR_HSION) +#define RCC_CR_HSION_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32) + (RCC_HSION_BIT_NUMBER * 4))) +/* Alias word address of HSEON bit */ +#define RCC_HSEON_BIT_NUMBER POSITION_VAL(RCC_CR_HSEON) +#define RCC_CR_HSEON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32) + (RCC_HSEON_BIT_NUMBER * 4))) +/* Alias word address of CSSON bit */ +#define RCC_CSSON_BIT_NUMBER POSITION_VAL(RCC_CR_CSSON) +#define RCC_CR_CSSON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32) + (RCC_CSSON_BIT_NUMBER * 4))) +/* Alias word address of PLLON bit */ +#define RCC_PLLON_BIT_NUMBER POSITION_VAL(RCC_CR_PLLON) +#define RCC_CR_PLLON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32) + (RCC_PLLON_BIT_NUMBER * 4))) + +/* --- CSR Register ---*/ +/* Alias word address of LSION bit */ +#define RCC_LSION_BIT_NUMBER POSITION_VAL(RCC_CSR_LSION) +#define RCC_CSR_LSION_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32) + (RCC_LSION_BIT_NUMBER * 4))) + +/* Alias word address of RMVF bit */ +#define RCC_RMVF_BIT_NUMBER POSITION_VAL(RCC_CSR_RMVF) +#define RCC_CSR_RMVF_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32) + (RCC_RMVF_BIT_NUMBER * 4))) + +/* --- BDCR Registers ---*/ +/* Alias word address of LSEON bit */ +#define RCC_LSEON_BIT_NUMBER POSITION_VAL(RCC_BDCR_LSEON) +#define RCC_BDCR_LSEON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32) + (RCC_LSEON_BIT_NUMBER * 4))) + +/* Alias word address of LSEON bit */ +#define RCC_LSEBYP_BIT_NUMBER POSITION_VAL(RCC_BDCR_LSEBYP) +#define RCC_BDCR_LSEBYP_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32) + (RCC_LSEBYP_BIT_NUMBER * 4))) + +/* Alias word address of RTCEN bit */ +#define RCC_RTCEN_BIT_NUMBER POSITION_VAL(RCC_BDCR_RTCEN) +#define RCC_BDCR_RTCEN_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32) + (RCC_RTCEN_BIT_NUMBER * 4))) + +/* Alias word address of BDRST bit */ +#define RCC_BDRST_BIT_NUMBER POSITION_VAL(RCC_BDCR_BDRST) +#define RCC_BDCR_BDRST_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32) + (RCC_BDRST_BIT_NUMBER * 4))) + +/** + * @} + */ + +/* CR register byte 2 (Bits[23:16]) base address */ +#define RCC_CR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CR_OFFSET + 0x02)) + +/* CIR register byte 1 (Bits[15:8]) base address */ +#define RCC_CIR_BYTE1_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x01)) + +/* CIR register byte 2 (Bits[23:16]) base address */ +#define RCC_CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x02)) + +/* Defines used for Flags */ +#define CR_REG_INDEX ((uint8_t)1) +#define BDCR_REG_INDEX ((uint8_t)2) +#define CSR_REG_INDEX ((uint8_t)3) + +#define RCC_FLAG_MASK ((uint8_t)0x1F) + +/** + * @} + */ + +/** @addtogroup RCC_Private_Macros + * @{ + */ +/** @defgroup RCC_Alias_For_Legacy Alias define maintained for legacy + * @{ + */ +#define __HAL_RCC_SYSCFG_CLK_DISABLE __HAL_RCC_AFIO_CLK_DISABLE +#define __HAL_RCC_SYSCFG_CLK_ENABLE __HAL_RCC_AFIO_CLK_ENABLE +#define __HAL_RCC_SYSCFG_FORCE_RESET __HAL_RCC_AFIO_FORCE_RESET +#define __HAL_RCC_SYSCFG_RELEASE_RESET __HAL_RCC_AFIO_RELEASE_RESET +/** + * @} + */ + +#define IS_RCC_PLLSOURCE(__SOURCE__) (((__SOURCE__) == RCC_PLLSOURCE_HSI_DIV2) || \ + ((__SOURCE__) == RCC_PLLSOURCE_HSE)) +#define IS_RCC_OSCILLATORTYPE(__OSCILLATOR__) (((__OSCILLATOR__) == RCC_OSCILLATORTYPE_NONE) || \ + (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) || \ + (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) || \ + (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) || \ + (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)) +#define IS_RCC_HSE(__HSE__) (((__HSE__) == RCC_HSE_OFF) || ((__HSE__) == RCC_HSE_ON) || \ + ((__HSE__) == RCC_HSE_BYPASS)) +#define IS_RCC_LSE(__LSE__) (((__LSE__) == RCC_LSE_OFF) || ((__LSE__) == RCC_LSE_ON) || \ + ((__LSE__) == RCC_LSE_BYPASS)) +#define IS_RCC_HSI(__HSI__) (((__HSI__) == RCC_HSI_OFF) || ((__HSI__) == RCC_HSI_ON)) +#define IS_RCC_CALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= 0x1F) +#define IS_RCC_LSI(__LSI__) (((__LSI__) == RCC_LSI_OFF) || ((__LSI__) == RCC_LSI_ON)) +#define IS_RCC_PLL(__PLL__) (((__PLL__) == RCC_PLL_NONE) || ((__PLL__) == RCC_PLL_OFF) || \ + ((__PLL__) == RCC_PLL_ON)) + +#define IS_RCC_CLOCKTYPE(CLK) ((((CLK) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) || \ + (((CLK) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) || \ + (((CLK) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) || \ + (((CLK) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)) +#define IS_RCC_SYSCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_HSI) || \ + ((__SOURCE__) == RCC_SYSCLKSOURCE_HSE) || \ + ((__SOURCE__) == RCC_SYSCLKSOURCE_PLLCLK)) +#define IS_RCC_SYSCLKSOURCE_STATUS(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSI) || \ + ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSE) || \ + ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_PLLCLK)) +#define IS_RCC_HCLK(__HCLK__) (((__HCLK__) == RCC_SYSCLK_DIV1) || ((__HCLK__) == RCC_SYSCLK_DIV2) || \ + ((__HCLK__) == RCC_SYSCLK_DIV4) || ((__HCLK__) == RCC_SYSCLK_DIV8) || \ + ((__HCLK__) == RCC_SYSCLK_DIV16) || ((__HCLK__) == RCC_SYSCLK_DIV64) || \ + ((__HCLK__) == RCC_SYSCLK_DIV128) || ((__HCLK__) == RCC_SYSCLK_DIV256) || \ + ((__HCLK__) == RCC_SYSCLK_DIV512)) +#define IS_RCC_PCLK(__PCLK__) (((__PCLK__) == RCC_HCLK_DIV1) || ((__PCLK__) == RCC_HCLK_DIV2) || \ + ((__PCLK__) == RCC_HCLK_DIV4) || ((__PCLK__) == RCC_HCLK_DIV8) || \ + ((__PCLK__) == RCC_HCLK_DIV16)) +#define IS_RCC_MCO(__MCO__) ((__MCO__) == RCC_MCO) +#define IS_RCC_MCODIV(__DIV__) (((__DIV__) == RCC_MCODIV_1)) +#define IS_RCC_RTCCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_RTCCLKSOURCE_NO_CLK) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_LSE) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV128)) + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Types RCC Exported Types + * @{ + */ + +/** + * @brief RCC PLL configuration structure definition + */ +typedef struct +{ + uint32_t PLLState; /*!< PLLState: The new state of the PLL. + This parameter can be a value of @ref RCC_PLL_Config */ + + uint32_t PLLSource; /*!< PLLSource: PLL entry clock source. + This parameter must be a value of @ref RCC_PLL_Clock_Source */ + + uint32_t PLLMUL; /*!< PLLMUL: Multiplication factor for PLL VCO input clock + This parameter must be a value of @ref RCCEx_PLL_Multiplication_Factor */ +} RCC_PLLInitTypeDef; + +/** + * @brief RCC System, AHB and APB busses clock configuration structure definition + */ +typedef struct +{ + uint32_t ClockType; /*!< The clock to be configured. + This parameter can be a value of @ref RCC_System_Clock_Type */ + + uint32_t SYSCLKSource; /*!< The clock source (SYSCLKS) used as system clock. + This parameter can be a value of @ref RCC_System_Clock_Source */ + + uint32_t AHBCLKDivider; /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK). + This parameter can be a value of @ref RCC_AHB_Clock_Source */ + + uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */ + + uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */ +} RCC_ClkInitTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup RCC_Exported_Constants RCC Exported Constants + * @{ + */ + +/** @defgroup RCC_PLL_Clock_Source PLL Clock Source + * @{ + */ + +#define RCC_PLLSOURCE_HSI_DIV2 ((uint32_t)0x00000000) /*!< HSI clock divided by 2 selected as PLL entry clock source */ +#define RCC_PLLSOURCE_HSE RCC_CFGR_PLLSRC /*!< HSE clock selected as PLL entry clock source */ + +/** + * @} + */ + +/** @defgroup RCC_Oscillator_Type Oscillator Type + * @{ + */ +#define RCC_OSCILLATORTYPE_NONE ((uint32_t)0x00000000) +#define RCC_OSCILLATORTYPE_HSE ((uint32_t)0x00000001) +#define RCC_OSCILLATORTYPE_HSI ((uint32_t)0x00000002) +#define RCC_OSCILLATORTYPE_LSE ((uint32_t)0x00000004) +#define RCC_OSCILLATORTYPE_LSI ((uint32_t)0x00000008) +/** + * @} + */ + +/** @defgroup RCC_HSE_Config HSE Config + * @{ + */ +#define RCC_HSE_OFF ((uint32_t)0x00000000) /*!< HSE clock deactivation */ +#define RCC_HSE_ON RCC_CR_HSEON /*!< HSE clock activation */ +#define RCC_HSE_BYPASS ((uint32_t)(RCC_CR_HSEBYP | RCC_CR_HSEON)) /*!< External clock source for HSE clock */ +/** + * @} + */ + +/** @defgroup RCC_LSE_Config LSE Config + * @{ + */ +#define RCC_LSE_OFF ((uint32_t)0x00000000) /*!< LSE clock deactivation */ +#define RCC_LSE_ON RCC_BDCR_LSEON /*!< LSE clock activation */ +#define RCC_LSE_BYPASS ((uint32_t)(RCC_BDCR_LSEBYP | RCC_BDCR_LSEON)) /*!< External clock source for LSE clock */ + +/** + * @} + */ + +/** @defgroup RCC_HSI_Config HSI Config + * @{ + */ +#define RCC_HSI_OFF ((uint32_t)0x00000000) /*!< HSI clock deactivation */ +#define RCC_HSI_ON RCC_CR_HSION /*!< HSI clock activation */ + +#define RCC_HSICALIBRATION_DEFAULT ((uint32_t)0x10) /* Default HSI calibration trimming value */ + +/** + * @} + */ + +/** @defgroup RCC_LSI_Config LSI Config + * @{ + */ +#define RCC_LSI_OFF ((uint32_t)0x00000000) /*!< LSI clock deactivation */ +#define RCC_LSI_ON RCC_CSR_LSION /*!< LSI clock activation */ + +/** + * @} + */ + +/** @defgroup RCC_PLL_Config PLL Config + * @{ + */ +#define RCC_PLL_NONE ((uint32_t)0x00000000) /*!< PLL is not configured */ +#define RCC_PLL_OFF ((uint32_t)0x00000001) /*!< PLL deactivation */ +#define RCC_PLL_ON ((uint32_t)0x00000002) /*!< PLL activation */ + +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Type System Clock Type + * @{ + */ +#define RCC_CLOCKTYPE_SYSCLK ((uint32_t)0x00000001) /*!< SYSCLK to configure */ +#define RCC_CLOCKTYPE_HCLK ((uint32_t)0x00000002) /*!< HCLK to configure */ +#define RCC_CLOCKTYPE_PCLK1 ((uint32_t)0x00000004) /*!< PCLK1 to configure */ +#define RCC_CLOCKTYPE_PCLK2 ((uint32_t)0x00000008) /*!< PCLK2 to configure */ + +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source System Clock Source + * @{ + */ +#define RCC_SYSCLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selected as system clock */ +#define RCC_SYSCLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selected as system clock */ +#define RCC_SYSCLKSOURCE_PLLCLK RCC_CFGR_SW_PLL /*!< PLL selected as system clock */ + +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source_Status System Clock Source Status + * @{ + */ +#define RCC_SYSCLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */ +#define RCC_SYSCLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */ +#define RCC_SYSCLKSOURCE_STATUS_PLLCLK RCC_CFGR_SWS_PLL /*!< PLL used as system clock */ + +/** + * @} + */ + +/** @defgroup RCC_AHB_Clock_Source AHB Clock Source + * @{ + */ +#define RCC_SYSCLK_DIV1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */ +#define RCC_SYSCLK_DIV2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */ +#define RCC_SYSCLK_DIV4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */ +#define RCC_SYSCLK_DIV8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */ +#define RCC_SYSCLK_DIV16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */ +#define RCC_SYSCLK_DIV64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */ +#define RCC_SYSCLK_DIV128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */ +#define RCC_SYSCLK_DIV256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */ +#define RCC_SYSCLK_DIV512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */ + +/** + * @} + */ + +/** @defgroup RCC_APB1_APB2_Clock_Source APB1 APB2 Clock Source + * @{ + */ +#define RCC_HCLK_DIV1 RCC_CFGR_PPRE1_DIV1 /*!< HCLK not divided */ +#define RCC_HCLK_DIV2 RCC_CFGR_PPRE1_DIV2 /*!< HCLK divided by 2 */ +#define RCC_HCLK_DIV4 RCC_CFGR_PPRE1_DIV4 /*!< HCLK divided by 4 */ +#define RCC_HCLK_DIV8 RCC_CFGR_PPRE1_DIV8 /*!< HCLK divided by 8 */ +#define RCC_HCLK_DIV16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */ + +/** + * @} + */ + +/** @defgroup RCC_RTC_Clock_Source RTC Clock Source + * @{ + */ +#define RCC_RTCCLKSOURCE_NO_CLK ((uint32_t)0x00000000) /*!< No clock */ +#define RCC_RTCCLKSOURCE_LSE RCC_BDCR_RTCSEL_LSE /*!< LSE oscillator clock used as RTC clock */ +#define RCC_RTCCLKSOURCE_LSI RCC_BDCR_RTCSEL_LSI /*!< LSI oscillator clock used as RTC clock */ +#define RCC_RTCCLKSOURCE_HSE_DIV128 RCC_BDCR_RTCSEL_HSE /*!< HSE oscillator clock divided by 128 used as RTC clock */ +/** + * @} + */ + + +/** @defgroup RCC_MCO_Index MCO Index + * @{ + */ +#define RCC_MCO1 ((uint32_t)0x00000000) +#define RCC_MCO RCC_MCO1 /*!< MCO1 to be compliant with other families with 2 MCOs*/ + +/** + * @} + */ + +/** @defgroup RCC_MCOx_Clock_Prescaler MCO Clock Prescaler + * @{ + */ +#define RCC_MCODIV_1 ((uint32_t)0x00000000) + +/** + * @} + */ + +/** @defgroup RCC_Interrupt Interrupts + * @{ + */ +#define RCC_IT_LSIRDY ((uint8_t)RCC_CIR_LSIRDYF) /*!< LSI Ready Interrupt flag */ +#define RCC_IT_LSERDY ((uint8_t)RCC_CIR_LSERDYF) /*!< LSE Ready Interrupt flag */ +#define RCC_IT_HSIRDY ((uint8_t)RCC_CIR_HSIRDYF) /*!< HSI Ready Interrupt flag */ +#define RCC_IT_HSERDY ((uint8_t)RCC_CIR_HSERDYF) /*!< HSE Ready Interrupt flag */ +#define RCC_IT_PLLRDY ((uint8_t)RCC_CIR_PLLRDYF) /*!< PLL Ready Interrupt flag */ +#define RCC_IT_CSS ((uint8_t)RCC_CIR_CSSF) /*!< Clock Security System Interrupt flag */ +/** + * @} + */ + +/** @defgroup RCC_Flag Flags + * Elements values convention: XXXYYYYYb + * - YYYYY : Flag position in the register + * - XXX : Register index + * - 001: CR register + * - 010: BDCR register + * - 011: CSR register + * @{ + */ +/* Flags in the CR register */ +#define RCC_FLAG_HSIRDY ((uint8_t)((CR_REG_INDEX << 5) | POSITION_VAL(RCC_CR_HSIRDY))) /*!< Internal High Speed clock ready flag */ +#define RCC_FLAG_HSERDY ((uint8_t)((CR_REG_INDEX << 5) | POSITION_VAL(RCC_CR_HSERDY))) /*!< External High Speed clock ready flag */ +#define RCC_FLAG_PLLRDY ((uint8_t)((CR_REG_INDEX << 5) | POSITION_VAL(RCC_CR_PLLRDY))) /*!< PLL clock ready flag */ + +/* Flags in the CSR register */ +#define RCC_FLAG_LSIRDY ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_LSIRDY))) /*!< Internal Low Speed oscillator Ready */ +#define RCC_FLAG_PINRST ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_PINRSTF))) /*!< PIN reset flag */ +#define RCC_FLAG_PORRST ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_PORRSTF))) /*!< POR/PDR reset flag */ +#define RCC_FLAG_SFTRST ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_SFTRSTF))) /*!< Software Reset flag */ +#define RCC_FLAG_IWDGRST ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_IWDGRSTF))) /*!< Independent Watchdog reset flag */ +#define RCC_FLAG_WWDGRST ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_WWDGRSTF))) /*!< Window watchdog reset flag */ +#define RCC_FLAG_LPWRRST ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_LPWRRSTF))) /*!< Low-Power reset flag */ + +/* Flags in the BDCR register */ +#define RCC_FLAG_LSERDY ((uint8_t)((BDCR_REG_INDEX << 5) | POSITION_VAL(RCC_BDCR_LSERDY))) /*!< External Low Speed oscillator Ready */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Macros RCC Exported Macros + * @{ + */ + +/** @defgroup RCC_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable + * @brief Enable or disable the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_DMA1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_SRAM_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_FLITF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_DMA1_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA1EN)) +#define __HAL_RCC_SRAM_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_SRAMEN)) +#define __HAL_RCC_FLITF_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FLITFEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_CRCEN)) + +/** + * @} + */ + +/** @defgroup RCC_AHB_Peripheral_Clock_Enable_Disable_Status AHB Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ + +#define __HAL_RCC_DMA1_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) != RESET) +#define __HAL_RCC_DMA1_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) == RESET) +#define __HAL_RCC_SRAM_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) != RESET) +#define __HAL_RCC_SRAM_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) == RESET) +#define __HAL_RCC_FLITF_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) != RESET) +#define __HAL_RCC_FLITF_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) == RESET) + +/** + * @} + */ + +/** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_WWDG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_USART2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_I2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_BKP_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_BKPEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_BKPEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_PWR_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_WWDG_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN)) +#define __HAL_RCC_USART2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART2EN)) +#define __HAL_RCC_I2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C1EN)) + +#define __HAL_RCC_BKP_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_BKPEN)) +#define __HAL_RCC_PWR_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_PWREN)) + +/** + * @} + */ + +/** @defgroup RCC_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ + +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_WWDG_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) != RESET) +#define __HAL_RCC_WWDG_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) == RESET) +#define __HAL_RCC_USART2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) != RESET) +#define __HAL_RCC_USART2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) == RESET) +#define __HAL_RCC_I2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) != RESET) +#define __HAL_RCC_I2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) == RESET) +#define __HAL_RCC_BKP_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_BKPEN)) != RESET) +#define __HAL_RCC_BKP_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_BKPEN)) == RESET) +#define __HAL_RCC_PWR_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) != RESET) +#define __HAL_RCC_PWR_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) == RESET) + +/** + * @} + */ + +/** @defgroup RCC_APB2_Clock_Enable_Disable APB2 Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_AFIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_GPIOA_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_GPIOB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_GPIOC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_ADC1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_SPI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_USART1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_AFIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_AFIOEN)) +#define __HAL_RCC_GPIOA_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPAEN)) +#define __HAL_RCC_GPIOB_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPBEN)) +#define __HAL_RCC_GPIOC_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPCEN)) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPDEN)) +#define __HAL_RCC_ADC1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN)) + +#define __HAL_RCC_TIM1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM1EN)) +#define __HAL_RCC_SPI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN)) +#define __HAL_RCC_USART1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART1EN)) + +/** + * @} + */ + +/** @defgroup RCC_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ + +#define __HAL_RCC_AFIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_AFIOEN)) != RESET) +#define __HAL_RCC_AFIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_AFIOEN)) == RESET) +#define __HAL_RCC_GPIOA_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPAEN)) != RESET) +#define __HAL_RCC_GPIOA_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPAEN)) == RESET) +#define __HAL_RCC_GPIOB_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPBEN)) != RESET) +#define __HAL_RCC_GPIOB_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPBEN)) == RESET) +#define __HAL_RCC_GPIOC_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPCEN)) != RESET) +#define __HAL_RCC_GPIOC_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPCEN)) == RESET) +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPDEN)) != RESET) +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPDEN)) == RESET) +#define __HAL_RCC_ADC1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) != RESET) +#define __HAL_RCC_ADC1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) == RESET) +#define __HAL_RCC_TIM1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) != RESET) +#define __HAL_RCC_TIM1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) == RESET) +#define __HAL_RCC_SPI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET) +#define __HAL_RCC_SPI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET) +#define __HAL_RCC_USART1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) != RESET) +#define __HAL_RCC_USART1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) == RESET) + +/** + * @} + */ + +/** @defgroup RCC_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_WWDG_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST)) +#define __HAL_RCC_USART2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART2RST)) +#define __HAL_RCC_I2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C1RST)) + +#define __HAL_RCC_BKP_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_BKPRST)) +#define __HAL_RCC_PWR_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST)) + +#define __HAL_RCC_APB1_RELEASE_RESET() (RCC->APB1RSTR = 0x00) +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_WWDG_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST)) +#define __HAL_RCC_USART2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART2RST)) +#define __HAL_RCC_I2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C1RST)) + +#define __HAL_RCC_BKP_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_BKPRST)) +#define __HAL_RCC_PWR_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST)) + +/** + * @} + */ + +/** @defgroup RCC_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AFIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_AFIORST)) +#define __HAL_RCC_GPIOA_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPARST)) +#define __HAL_RCC_GPIOB_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPBRST)) +#define __HAL_RCC_GPIOC_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPCRST)) +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPDRST)) +#define __HAL_RCC_ADC1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC1RST)) + +#define __HAL_RCC_TIM1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM1RST)) +#define __HAL_RCC_SPI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST)) +#define __HAL_RCC_USART1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART1RST)) + +#define __HAL_RCC_APB2_RELEASE_RESET() (RCC->APB2RSTR = 0x00) +#define __HAL_RCC_AFIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_AFIORST)) +#define __HAL_RCC_GPIOA_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPARST)) +#define __HAL_RCC_GPIOB_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPBRST)) +#define __HAL_RCC_GPIOC_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPCRST)) +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPDRST)) +#define __HAL_RCC_ADC1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST)) + +#define __HAL_RCC_TIM1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM1RST)) +#define __HAL_RCC_SPI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST)) +#define __HAL_RCC_USART1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART1RST)) + +/** + * @} + */ + +/** @defgroup RCC_HSI_Configuration HSI Configuration + * @{ + */ + +/** @brief Macros to enable or disable the Internal High Speed oscillator (HSI). + * @note The HSI is stopped by hardware when entering STOP and STANDBY modes. + * @note HSI can not be stopped if it is used as system clock source. In this case, + * you have to select another source of the system clock then stop the HSI. + * @note After enabling the HSI, the application software should wait on HSIRDY + * flag to be set indicating that HSI clock is stable and can be used as + * system clock source. + * @note When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator + * clock cycles. + */ +#define __HAL_RCC_HSI_ENABLE() (*(__IO uint32_t *) RCC_CR_HSION_BB = ENABLE) +#define __HAL_RCC_HSI_DISABLE() (*(__IO uint32_t *) RCC_CR_HSION_BB = DISABLE) + +/** @brief Macro to adjust the Internal High Speed oscillator (HSI) calibration value. + * @note The calibration is used to compensate for the variations in voltage + * and temperature that influence the frequency of the internal HSI RC. + * @param _HSICALIBRATIONVALUE_ specifies the calibration trimming value. + * (default is RCC_HSICALIBRATION_DEFAULT). + * This parameter must be a number between 0 and 0x1F. + */ +#define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(_HSICALIBRATIONVALUE_) \ + (MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (uint32_t)(_HSICALIBRATIONVALUE_) << POSITION_VAL(RCC_CR_HSITRIM))) + +/** + * @} + */ + +/** @defgroup RCC_LSI_Configuration LSI Configuration + * @{ + */ + +/** @brief Macro to enable the Internal Low Speed oscillator (LSI). + * @note After enabling the LSI, the application software should wait on + * LSIRDY flag to be set indicating that LSI clock is stable and can + * be used to clock the IWDG and/or the RTC. + */ +#define __HAL_RCC_LSI_ENABLE() (*(__IO uint32_t *) RCC_CSR_LSION_BB = ENABLE) + +/** @brief Macro to disable the Internal Low Speed oscillator (LSI). + * @note LSI can not be disabled if the IWDG is running. + * @note When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator + * clock cycles. + */ +#define __HAL_RCC_LSI_DISABLE() (*(__IO uint32_t *) RCC_CSR_LSION_BB = DISABLE) + +/** + * @} + */ + +/** @defgroup RCC_HSE_Configuration HSE Configuration + * @{ + */ + +/** + * @brief Macro to configure the External High Speed oscillator (HSE). + * @note Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not + * supported by this macro. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @note After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application + * software should wait on HSERDY flag to be set indicating that HSE clock + * is stable and can be used to clock the PLL and/or system clock. + * @note HSE state can not be changed if it is used directly or through the + * PLL as system clock. In this case, you have to select another source + * of the system clock then change the HSE state (ex. disable it). + * @note The HSE is stopped by hardware when entering STOP and STANDBY modes. + * @note This function reset the CSSON bit, so if the clock security system(CSS) + * was previously enabled you have to enable it again after calling this + * function. + * @param __STATE__ specifies the new state of the HSE. + * This parameter can be one of the following values: + * @arg @ref RCC_HSE_OFF turn OFF the HSE oscillator, HSERDY flag goes low after + * 6 HSE oscillator clock cycles. + * @arg @ref RCC_HSE_ON turn ON the HSE oscillator + * @arg @ref RCC_HSE_BYPASS HSE oscillator bypassed with external clock + */ +#define __HAL_RCC_HSE_CONFIG(__STATE__) \ + do{ \ + if ((__STATE__) == RCC_HSE_ON) \ + { \ + SET_BIT(RCC->CR, RCC_CR_HSEON); \ + } \ + else if ((__STATE__) == RCC_HSE_OFF) \ + { \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON); \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); \ + } \ + else if ((__STATE__) == RCC_HSE_BYPASS) \ + { \ + SET_BIT(RCC->CR, RCC_CR_HSEBYP); \ + SET_BIT(RCC->CR, RCC_CR_HSEON); \ + } \ + else \ + { \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON); \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); \ + } \ + }while(0) + +/** + * @} + */ + +/** @defgroup RCC_LSE_Configuration LSE Configuration + * @{ + */ + +/** + * @brief Macro to configure the External Low Speed oscillator (LSE). + * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro. + * @note As the LSE is in the Backup domain and write access is denied to + * this domain after reset, you have to enable write access using + * @ref HAL_PWR_EnableBkUpAccess() function before to configure the LSE + * (to be done once after reset). + * @note After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application + * software should wait on LSERDY flag to be set indicating that LSE clock + * is stable and can be used to clock the RTC. + * @param __STATE__ specifies the new state of the LSE. + * This parameter can be one of the following values: + * @arg @ref RCC_LSE_OFF turn OFF the LSE oscillator, LSERDY flag goes low after + * 6 LSE oscillator clock cycles. + * @arg @ref RCC_LSE_ON turn ON the LSE oscillator. + * @arg @ref RCC_LSE_BYPASS LSE oscillator bypassed with external clock. + */ +#define __HAL_RCC_LSE_CONFIG(__STATE__) \ + do{ \ + if ((__STATE__) == RCC_LSE_ON) \ + { \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + } \ + else if ((__STATE__) == RCC_LSE_OFF) \ + { \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + } \ + else if ((__STATE__) == RCC_LSE_BYPASS) \ + { \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + } \ + else \ + { \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + } \ + }while(0) + +/** + * @} + */ + +/** @defgroup RCC_PLL_Configuration PLL Configuration + * @{ + */ + +/** @brief Macro to enable the main PLL. + * @note After enabling the main PLL, the application software should wait on + * PLLRDY flag to be set indicating that PLL clock is stable and can + * be used as system clock source. + * @note The main PLL is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLL_ENABLE() (*(__IO uint32_t *) RCC_CR_PLLON_BB = ENABLE) + +/** @brief Macro to disable the main PLL. + * @note The main PLL can not be disabled if it is used as system clock source + */ +#define __HAL_RCC_PLL_DISABLE() (*(__IO uint32_t *) RCC_CR_PLLON_BB = DISABLE) + +/** @brief Macro to configure the main PLL clock source and multiplication factors. + * @note This function must be used only when the main PLL is disabled. + * + * @param __RCC_PLLSOURCE__ specifies the PLL entry clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_PLLSOURCE_HSI_DIV2 HSI oscillator clock selected as PLL clock entry + * @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry + * @param __PLLMUL__ specifies the multiplication factor for PLL VCO output clock + * This parameter can be one of the following values: + * @arg @ref RCC_PLL_MUL4 PLLVCO = PLL clock entry x 4 + * @arg @ref RCC_PLL_MUL6 PLLVCO = PLL clock entry x 6 + @if STM32F105xC + * @arg @ref RCC_PLL_MUL6_5 PLLVCO = PLL clock entry x 6.5 + @elseif STM32F107xC + * @arg @ref RCC_PLL_MUL6_5 PLLVCO = PLL clock entry x 6.5 + @else + * @arg @ref RCC_PLL_MUL2 PLLVCO = PLL clock entry x 2 + * @arg @ref RCC_PLL_MUL3 PLLVCO = PLL clock entry x 3 + * @arg @ref RCC_PLL_MUL10 PLLVCO = PLL clock entry x 10 + * @arg @ref RCC_PLL_MUL11 PLLVCO = PLL clock entry x 11 + * @arg @ref RCC_PLL_MUL12 PLLVCO = PLL clock entry x 12 + * @arg @ref RCC_PLL_MUL13 PLLVCO = PLL clock entry x 13 + * @arg @ref RCC_PLL_MUL14 PLLVCO = PLL clock entry x 14 + * @arg @ref RCC_PLL_MUL15 PLLVCO = PLL clock entry x 15 + * @arg @ref RCC_PLL_MUL16 PLLVCO = PLL clock entry x 16 + @endif + * @arg @ref RCC_PLL_MUL8 PLLVCO = PLL clock entry x 8 + * @arg @ref RCC_PLL_MUL9 PLLVCO = PLL clock entry x 9 + * + */ +#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSOURCE__, __PLLMUL__)\ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL),((__RCC_PLLSOURCE__) | (__PLLMUL__) )) + +/** @brief Get oscillator clock selected as PLL input clock + * @retval The clock source used for PLL entry. The returned value can be one + * of the following: + * @arg @ref RCC_PLLSOURCE_HSI_DIV2 HSI oscillator clock selected as PLL input clock + * @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL input clock + */ +#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC))) + +/** + * @} + */ + +/** @defgroup RCC_Get_Clock_source Get Clock source + * @{ + */ + +/** + * @brief Macro to configure the system clock source. + * @param __SYSCLKSOURCE__ specifies the system clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_SYSCLKSOURCE_HSI HSI oscillator is used as system clock source. + * @arg @ref RCC_SYSCLKSOURCE_HSE HSE oscillator is used as system clock source. + * @arg @ref RCC_SYSCLKSOURCE_PLLCLK PLL output is used as system clock source. + */ +#define __HAL_RCC_SYSCLK_CONFIG(__SYSCLKSOURCE__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__SYSCLKSOURCE__)) + +/** @brief Macro to get the clock source used as system clock. + * @retval The clock source used as system clock. The returned value can be one + * of the following: + * @arg @ref RCC_SYSCLKSOURCE_STATUS_HSI HSI used as system clock + * @arg @ref RCC_SYSCLKSOURCE_STATUS_HSE HSE used as system clock + * @arg @ref RCC_SYSCLKSOURCE_STATUS_PLLCLK PLL used as system clock + */ +#define __HAL_RCC_GET_SYSCLK_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR,RCC_CFGR_SWS))) + +/** + * @} + */ + +/** @defgroup RCCEx_MCOx_Clock_Config RCC Extended MCOx Clock Config + * @{ + */ + +#if defined(RCC_CFGR_MCO_3) +/** @brief Macro to configure the MCO clock. + * @param __MCOCLKSOURCE__ specifies the MCO clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_SYSCLK System clock (SYSCLK) selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLL clock divided by 2 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLL2CLK PLL2 clock selected by 2 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_EXT_HSE XT1 external 3-25 MHz oscillator clock selected (for Ethernet) as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLL3CLK PLL3 clock selected (for Ethernet) as MCO clock + * @param __MCODIV__ specifies the MCO clock prescaler. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 No division applied on MCO clock source + */ +#else +/** @brief Macro to configure the MCO clock. + * @param __MCOCLKSOURCE__ specifies the MCO clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_SYSCLK System clock (SYSCLK) selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLL clock divided by 2 selected as MCO clock + * @param __MCODIV__ specifies the MCO clock prescaler. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 No division applied on MCO clock source + */ +#endif + +#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_MCO, (__MCOCLKSOURCE__)) + + +/** + * @} + */ + + /** @defgroup RCC_RTC_Clock_Configuration RCC RTC Clock Configuration + * @{ + */ + +/** @brief Macro to configure the RTC clock (RTCCLK). + * @note As the RTC clock configuration bits are in the Backup domain and write + * access is denied to this domain after reset, you have to enable write + * access using the Power Backup Access macro before to configure + * the RTC clock source (to be done once after reset). + * @note Once the RTC clock is configured it can't be changed unless the + * Backup domain is reset using @ref __HAL_RCC_BACKUPRESET_FORCE() macro, or by + * a Power On Reset (POR). + * + * @param __RTC_CLKSOURCE__ specifies the RTC clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_HSE_DIV128 HSE divided by 128 selected as RTC clock + * @note If the LSE or LSI is used as RTC clock source, the RTC continues to + * work in STOP and STANDBY modes, and can be used as wakeup source. + * However, when the HSE clock is used as RTC clock source, the RTC + * cannot be used in STOP and STANDBY modes. + * @note The maximum input clock frequency for RTC is 1MHz (when using HSE as + * RTC clock source). + */ +#define __HAL_RCC_RTC_CONFIG(__RTC_CLKSOURCE__) MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, (__RTC_CLKSOURCE__)) + +/** @brief Macro to get the RTC clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_HSE_DIV128 HSE divided by 128 selected as RTC clock + */ +#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL)) + +/** @brief Macro to enable the the RTC clock. + * @note These macros must be used only after the RTC clock source was selected. + */ +#define __HAL_RCC_RTC_ENABLE() (*(__IO uint32_t *) RCC_BDCR_RTCEN_BB = ENABLE) + +/** @brief Macro to disable the the RTC clock. + * @note These macros must be used only after the RTC clock source was selected. + */ +#define __HAL_RCC_RTC_DISABLE() (*(__IO uint32_t *) RCC_BDCR_RTCEN_BB = DISABLE) + +/** @brief Macro to force the Backup domain reset. + * @note This function resets the RTC peripheral (including the backup registers) + * and the RTC clock source selection in RCC_BDCR register. + */ +#define __HAL_RCC_BACKUPRESET_FORCE() (*(__IO uint32_t *) RCC_BDCR_BDRST_BB = ENABLE) + +/** @brief Macros to release the Backup domain reset. + */ +#define __HAL_RCC_BACKUPRESET_RELEASE() (*(__IO uint32_t *) RCC_BDCR_BDRST_BB = DISABLE) + +/** + * @} + */ + +/** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management + * @brief macros to manage the specified RCC Flags and interrupts. + * @{ + */ + +/** @brief Enable RCC interrupt. + * @param __INTERRUPT__ specifies the RCC interrupt sources to be enabled. + * This parameter can be any combination of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt + * @arg @ref RCC_IT_LSERDY LSE ready interrupt + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt + * @arg @ref RCC_IT_HSERDY HSE ready interrupt + * @arg @ref RCC_IT_PLLRDY main PLL ready interrupt + @if STM32F105xx + * @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt. + * @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt. + @elsif STM32F107xx + * @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt. + * @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt. + @endif + */ +#define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__)) + +/** @brief Disable RCC interrupt. + * @param __INTERRUPT__ specifies the RCC interrupt sources to be disabled. + * This parameter can be any combination of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt + * @arg @ref RCC_IT_LSERDY LSE ready interrupt + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt + * @arg @ref RCC_IT_HSERDY HSE ready interrupt + * @arg @ref RCC_IT_PLLRDY main PLL ready interrupt + @if STM32F105xx + * @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt. + * @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt. + @elsif STM32F107xx + * @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt. + * @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt. + @endif + */ +#define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS &= (uint8_t)(~(__INTERRUPT__))) + +/** @brief Clear the RCC's interrupt pending bits. + * @param __INTERRUPT__ specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt. + * @arg @ref RCC_IT_LSERDY LSE ready interrupt. + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt. + * @arg @ref RCC_IT_HSERDY HSE ready interrupt. + * @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt. + @if STM32F105xx + * @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt. + * @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt. + @elsif STM32F107xx + * @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt. + * @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt. + @endif + * @arg @ref RCC_IT_CSS Clock Security System interrupt + */ +#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE2_ADDRESS = (__INTERRUPT__)) + +/** @brief Check the RCC's interrupt has occurred or not. + * @param __INTERRUPT__ specifies the RCC interrupt source to check. + * This parameter can be one of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt. + * @arg @ref RCC_IT_LSERDY LSE ready interrupt. + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt. + * @arg @ref RCC_IT_HSERDY HSE ready interrupt. + * @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt. + @if STM32F105xx + * @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt. + * @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt. + @elsif STM32F107xx + * @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt. + * @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt. + @endif + * @arg @ref RCC_IT_CSS Clock Security System interrupt + * @retval The new state of __INTERRUPT__ (TRUE or FALSE). + */ +#define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIR & (__INTERRUPT__)) == (__INTERRUPT__)) + +/** @brief Set RMVF bit to clear the reset flags. + * The reset flags are RCC_FLAG_PINRST, RCC_FLAG_PORRST, RCC_FLAG_SFTRST, + * RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST + */ +#define __HAL_RCC_CLEAR_RESET_FLAGS() (*(__IO uint32_t *)RCC_CSR_RMVF_BB = ENABLE) + +/** @brief Check RCC flag is set or not. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg @ref RCC_FLAG_HSIRDY HSI oscillator clock ready. + * @arg @ref RCC_FLAG_HSERDY HSE oscillator clock ready. + * @arg @ref RCC_FLAG_PLLRDY Main PLL clock ready. + @if STM32F105xx + * @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready. + * @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready. + @elsif STM32F107xx + * @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready. + * @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready. + @endif + * @arg @ref RCC_FLAG_LSERDY LSE oscillator clock ready. + * @arg @ref RCC_FLAG_LSIRDY LSI oscillator clock ready. + * @arg @ref RCC_FLAG_PINRST Pin reset. + * @arg @ref RCC_FLAG_PORRST POR/PDR reset. + * @arg @ref RCC_FLAG_SFTRST Software reset. + * @arg @ref RCC_FLAG_IWDGRST Independent Watchdog reset. + * @arg @ref RCC_FLAG_WWDGRST Window Watchdog reset. + * @arg @ref RCC_FLAG_LPWRRST Low Power reset. + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_RCC_GET_FLAG(__FLAG__) (((((__FLAG__) >> 5) == CR_REG_INDEX)? RCC->CR : \ + ((((__FLAG__) >> 5) == BDCR_REG_INDEX)? RCC->BDCR : \ + RCC->CSR)) & ((uint32_t)1 << ((__FLAG__) & RCC_FLAG_MASK))) + +/** + * @} + */ + +/** + * @} + */ + +/* Include RCC HAL Extension module */ +#include "stm32f1xx_hal_rcc_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup RCC_Exported_Functions + * @{ + */ + +/** @addtogroup RCC_Exported_Functions_Group1 + * @{ + */ + +/* Initialization and de-initialization functions ******************************/ +void HAL_RCC_DeInit(void); +HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct); +HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency); + +/** + * @} + */ + +/** @addtogroup RCC_Exported_Functions_Group2 + * @{ + */ + +/* Peripheral Control functions ************************************************/ +void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv); +void HAL_RCC_EnableCSS(void); +void HAL_RCC_DisableCSS(void); +uint32_t HAL_RCC_GetSysClockFreq(void); +uint32_t HAL_RCC_GetHCLKFreq(void); +uint32_t HAL_RCC_GetPCLK1Freq(void); +uint32_t HAL_RCC_GetPCLK2Freq(void); +void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct); +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency); + +/* CSS NMI IRQ handler */ +void HAL_RCC_NMI_IRQHandler(void); + +/* User Callbacks in non blocking mode (IT mode) */ +void HAL_RCC_CSSCallback(void); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_RCC_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1926 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_rcc_ex.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of RCC HAL Extension module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_RCC_EX_H +#define __STM32F1xx_HAL_RCC_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup RCCEx + * @{ + */ + +/** @addtogroup RCCEx_Private_Constants + * @{ + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) + +/* Alias word address of PLLI2SON bit */ +#define PLLI2SON_BITNUMBER POSITION_VAL(RCC_CR_PLL3ON) +#define RCC_CR_PLLI2SON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32) + (PLLI2SON_BITNUMBER * 4))) +/* Alias word address of PLL2ON bit */ +#define PLL2ON_BITNUMBER POSITION_VAL(RCC_CR_PLL2ON) +#define RCC_CR_PLL2ON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32) + (PLL2ON_BITNUMBER * 4))) + +#define PLLI2S_TIMEOUT_VALUE ((uint32_t)100) /* 100 ms */ +#define PLL2_TIMEOUT_VALUE ((uint32_t)100) /* 100 ms */ + +#endif /* STM32F105xC || STM32F107xC */ + + +#define CR_REG_INDEX ((uint8_t)1) + +/** + * @} + */ + +/** @addtogroup RCCEx_Private_Macros + * @{ + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +#define IS_RCC_PREDIV1_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_PREDIV1_SOURCE_HSE) || \ + ((__SOURCE__) == RCC_PREDIV1_SOURCE_PLL2)) +#endif /* STM32F105xC || STM32F107xC */ + +#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\ + || defined(STM32F100xE) +#define IS_RCC_HSE_PREDIV(__DIV__) (((__DIV__) == RCC_HSE_PREDIV_DIV1) || ((__DIV__) == RCC_HSE_PREDIV_DIV2) || \ + ((__DIV__) == RCC_HSE_PREDIV_DIV3) || ((__DIV__) == RCC_HSE_PREDIV_DIV4) || \ + ((__DIV__) == RCC_HSE_PREDIV_DIV5) || ((__DIV__) == RCC_HSE_PREDIV_DIV6) || \ + ((__DIV__) == RCC_HSE_PREDIV_DIV7) || ((__DIV__) == RCC_HSE_PREDIV_DIV8) || \ + ((__DIV__) == RCC_HSE_PREDIV_DIV9) || ((__DIV__) == RCC_HSE_PREDIV_DIV10) || \ + ((__DIV__) == RCC_HSE_PREDIV_DIV11) || ((__DIV__) == RCC_HSE_PREDIV_DIV12) || \ + ((__DIV__) == RCC_HSE_PREDIV_DIV13) || ((__DIV__) == RCC_HSE_PREDIV_DIV14) || \ + ((__DIV__) == RCC_HSE_PREDIV_DIV15) || ((__DIV__) == RCC_HSE_PREDIV_DIV16)) + +#else +#define IS_RCC_HSE_PREDIV(__DIV__) (((__DIV__) == RCC_HSE_PREDIV_DIV1) || ((__DIV__) == RCC_HSE_PREDIV_DIV2)) +#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +#define IS_RCC_PLL_MUL(__MUL__) (((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || \ + ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7) || \ + ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) || \ + ((__MUL__) == RCC_PLL_MUL6_5)) + +#define IS_RCC_MCO1SOURCE(__SOURCE__) (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) \ + || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK) \ + || ((__SOURCE__) == RCC_MCO1SOURCE_PLL2CLK) || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK) \ + || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK_DIV2) || ((__SOURCE__) == RCC_MCO1SOURCE_EXT_HSE) \ + || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK)) + +#else +#define IS_RCC_PLL_MUL(__MUL__) (((__MUL__) == RCC_PLL_MUL2) || ((__MUL__) == RCC_PLL_MUL3) || \ + ((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || \ + ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7) || \ + ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) || \ + ((__MUL__) == RCC_PLL_MUL10) || ((__MUL__) == RCC_PLL_MUL11) || \ + ((__MUL__) == RCC_PLL_MUL12) || ((__MUL__) == RCC_PLL_MUL13) || \ + ((__MUL__) == RCC_PLL_MUL14) || ((__MUL__) == RCC_PLL_MUL15) || \ + ((__MUL__) == RCC_PLL_MUL16)) + +#define IS_RCC_MCO1SOURCE(__SOURCE__) (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) \ + || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK) \ + || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK)) + +#endif /* STM32F105xC || STM32F107xC*/ + +#define IS_RCC_ADCPLLCLK_DIV(__ADCCLK__) (((__ADCCLK__) == RCC_ADCPCLK2_DIV2) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV4) || \ + ((__ADCCLK__) == RCC_ADCPCLK2_DIV6) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV8)) + +#if defined(STM32F105xC) || defined(STM32F107xC) +#define IS_RCC_I2S2CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK) || ((__SOURCE__) == RCC_I2S2CLKSOURCE_PLLI2S_VCO)) + +#define IS_RCC_I2S3CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK) || ((__SOURCE__) == RCC_I2S3CLKSOURCE_PLLI2S_VCO)) + +#define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV2) || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV3)) + +#define IS_RCC_PLLI2S_MUL(__MUL__) (((__MUL__) == RCC_PLLI2S_MUL8) || ((__MUL__) == RCC_PLLI2S_MUL9) || \ + ((__MUL__) == RCC_PLLI2S_MUL10) || ((__MUL__) == RCC_PLLI2S_MUL11) || \ + ((__MUL__) == RCC_PLLI2S_MUL12) || ((__MUL__) == RCC_PLLI2S_MUL13) || \ + ((__MUL__) == RCC_PLLI2S_MUL14) || ((__MUL__) == RCC_PLLI2S_MUL16) || \ + ((__MUL__) == RCC_PLLI2S_MUL20)) + +#define IS_RCC_HSE_PREDIV2(__DIV__) (((__DIV__) == RCC_HSE_PREDIV2_DIV1) || ((__DIV__) == RCC_HSE_PREDIV2_DIV2) || \ + ((__DIV__) == RCC_HSE_PREDIV2_DIV3) || ((__DIV__) == RCC_HSE_PREDIV2_DIV4) || \ + ((__DIV__) == RCC_HSE_PREDIV2_DIV5) || ((__DIV__) == RCC_HSE_PREDIV2_DIV6) || \ + ((__DIV__) == RCC_HSE_PREDIV2_DIV7) || ((__DIV__) == RCC_HSE_PREDIV2_DIV8) || \ + ((__DIV__) == RCC_HSE_PREDIV2_DIV9) || ((__DIV__) == RCC_HSE_PREDIV2_DIV10) || \ + ((__DIV__) == RCC_HSE_PREDIV2_DIV11) || ((__DIV__) == RCC_HSE_PREDIV2_DIV12) || \ + ((__DIV__) == RCC_HSE_PREDIV2_DIV13) || ((__DIV__) == RCC_HSE_PREDIV2_DIV14) || \ + ((__DIV__) == RCC_HSE_PREDIV2_DIV15) || ((__DIV__) == RCC_HSE_PREDIV2_DIV16)) + +#define IS_RCC_PLL2(__PLL__) (((__PLL__) == RCC_PLL2_NONE) || ((__PLL__) == RCC_PLL2_OFF) || \ + ((__PLL__) == RCC_PLL2_ON)) + +#define IS_RCC_PLL2_MUL(__MUL__) (((__MUL__) == RCC_PLL2_MUL8) || ((__MUL__) == RCC_PLL2_MUL9) || \ + ((__MUL__) == RCC_PLL2_MUL10) || ((__MUL__) == RCC_PLL2_MUL11) || \ + ((__MUL__) == RCC_PLL2_MUL12) || ((__MUL__) == RCC_PLL2_MUL13) || \ + ((__MUL__) == RCC_PLL2_MUL14) || ((__MUL__) == RCC_PLL2_MUL16) || \ + ((__MUL__) == RCC_PLL2_MUL20)) + +#define IS_RCC_PERIPHCLOCK(__SELECTION__) \ + ((((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)) + +#elif defined(STM32F103xE) || defined(STM32F103xG) + +#define IS_RCC_I2S2CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK) + +#define IS_RCC_I2S3CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK) + +#define IS_RCC_PERIPHCLOCK(__SELECTION__) \ + ((((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)) + + +#elif defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) + +#define IS_RCC_PERIPHCLOCK(__SELECTION__) \ + ((((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)) + +#else + +#define IS_RCC_PERIPHCLOCK(__SELECTION__) \ + ((((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC)) + +#endif /* STM32F105xC || STM32F107xC */ + +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) + +#define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL) || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV1_5)) + +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */ + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup RCCEx_Exported_Types RCCEx Exported Types + * @{ + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +/** + * @brief RCC PLL2 configuration structure definition + */ +typedef struct +{ + uint32_t PLL2State; /*!< The new state of the PLL2. + This parameter can be a value of @ref RCCEx_PLL2_Config */ + + uint32_t PLL2MUL; /*!< PLL2MUL: Multiplication factor for PLL2 VCO input clock + This parameter must be a value of @ref RCCEx_PLL2_Multiplication_Factor*/ + +#if defined(STM32F105xC) || defined(STM32F107xC) + uint32_t HSEPrediv2Value; /*!< The Prediv2 factor value. + This parameter can be a value of @ref RCCEx_Prediv2_Factor */ + +#endif /* STM32F105xC || STM32F107xC */ +} RCC_PLL2InitTypeDef; + +#endif /* STM32F105xC || STM32F107xC */ + +/** + * @brief RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition + */ +typedef struct +{ + uint32_t OscillatorType; /*!< The oscillators to be configured. + This parameter can be a value of @ref RCC_Oscillator_Type */ + +#if defined(STM32F105xC) || defined(STM32F107xC) + uint32_t Prediv1Source; /*!< The Prediv1 source value. + This parameter can be a value of @ref RCCEx_Prediv1_Source */ +#endif /* STM32F105xC || STM32F107xC */ + + uint32_t HSEState; /*!< The new state of the HSE. + This parameter can be a value of @ref RCC_HSE_Config */ + + uint32_t HSEPredivValue; /*!< The Prediv1 factor value (named PREDIV1 or PLLXTPRE in RM) + This parameter can be a value of @ref RCCEx_Prediv1_Factor */ + + uint32_t LSEState; /*!< The new state of the LSE. + This parameter can be a value of @ref RCC_LSE_Config */ + + uint32_t HSIState; /*!< The new state of the HSI. + This parameter can be a value of @ref RCC_HSI_Config */ + + uint32_t HSICalibrationValue; /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT). + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1F */ + + uint32_t LSIState; /*!< The new state of the LSI. + This parameter can be a value of @ref RCC_LSI_Config */ + + RCC_PLLInitTypeDef PLL; /*!< PLL structure parameters */ + +#if defined(STM32F105xC) || defined(STM32F107xC) + RCC_PLL2InitTypeDef PLL2; /*!< PLL2 structure parameters */ +#endif /* STM32F105xC || STM32F107xC */ +} RCC_OscInitTypeDef; + +#if defined(STM32F105xC) || defined(STM32F107xC) +/** + * @brief RCC PLLI2S configuration structure definition + */ +typedef struct +{ + uint32_t PLLI2SMUL; /*!< PLLI2SMUL: Multiplication factor for PLLI2S VCO input clock + This parameter must be a value of @ref RCCEx_PLLI2S_Multiplication_Factor*/ + +#if defined(STM32F105xC) || defined(STM32F107xC) + uint32_t HSEPrediv2Value; /*!< The Prediv2 factor value. + This parameter can be a value of @ref RCCEx_Prediv2_Factor */ + +#endif /* STM32F105xC || STM32F107xC */ +} RCC_PLLI2SInitTypeDef; +#endif /* STM32F105xC || STM32F107xC */ + +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< specifies the RTC clock source. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t AdcClockSelection; /*!< ADC clock source + This parameter can be a value of @ref RCCEx_ADC_Prescaler */ + +#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\ + || defined(STM32F107xC) + uint32_t I2s2ClockSelection; /*!< I2S2 clock source + This parameter can be a value of @ref RCCEx_I2S2_Clock_Source */ + + uint32_t I2s3ClockSelection; /*!< I2S3 clock source + This parameter can be a value of @ref RCCEx_I2S3_Clock_Source */ + +#if defined(STM32F105xC) || defined(STM32F107xC) + RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters + This parameter will be used only when PLLI2S is selected as Clock Source I2S2 or I2S3 */ + +#endif /* STM32F105xC || STM32F107xC */ +#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ + +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) + uint32_t UsbClockSelection; /*!< USB clock source + This parameter can be a value of @ref RCCEx_USB_Prescaler */ + +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ +} RCC_PeriphCLKInitTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants + * @{ + */ + +/** @defgroup RCCEx_Periph_Clock_Selection Periph Clock Selection + * @{ + */ +#define RCC_PERIPHCLK_RTC ((uint32_t)0x00000001) +#define RCC_PERIPHCLK_ADC ((uint32_t)0x00000002) +#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\ + || defined(STM32F107xC) +#define RCC_PERIPHCLK_I2S2 ((uint32_t)0x00000004) +#define RCC_PERIPHCLK_I2S3 ((uint32_t)0x00000008) +#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) +#define RCC_PERIPHCLK_USB ((uint32_t)0x00000010) +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ + +/** + * @} + */ + +/** @defgroup RCCEx_ADC_Prescaler ADC Prescaler + * @{ + */ +#define RCC_ADCPCLK2_DIV2 RCC_CFGR_ADCPRE_DIV2 +#define RCC_ADCPCLK2_DIV4 RCC_CFGR_ADCPRE_DIV4 +#define RCC_ADCPCLK2_DIV6 RCC_CFGR_ADCPRE_DIV6 +#define RCC_ADCPCLK2_DIV8 RCC_CFGR_ADCPRE_DIV8 + +/** + * @} + */ + +#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\ + || defined(STM32F107xC) +/** @defgroup RCCEx_I2S2_Clock_Source I2S2 Clock Source + * @{ + */ +#define RCC_I2S2CLKSOURCE_SYSCLK ((uint32_t)0x00000000) +#if defined(STM32F105xC) || defined(STM32F107xC) +#define RCC_I2S2CLKSOURCE_PLLI2S_VCO RCC_CFGR2_I2S2SRC +#endif /* STM32F105xC || STM32F107xC */ + +/** + * @} + */ + +/** @defgroup RCCEx_I2S3_Clock_Source I2S3 Clock Source + * @{ + */ +#define RCC_I2S3CLKSOURCE_SYSCLK ((uint32_t)0x00000000) +#if defined(STM32F105xC) || defined(STM32F107xC) +#define RCC_I2S3CLKSOURCE_PLLI2S_VCO RCC_CFGR2_I2S3SRC +#endif /* STM32F105xC || STM32F107xC */ + +/** + * @} + */ + +#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ + +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) + +/** @defgroup RCCEx_USB_Prescaler USB Prescaler + * @{ + */ +#define RCC_USBCLKSOURCE_PLL RCC_CFGR_USBPRE +#define RCC_USBCLKSOURCE_PLL_DIV1_5 ((uint32_t)0x00000000) + +/** + * @} + */ + +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */ + + +#if defined(STM32F105xC) || defined(STM32F107xC) +/** @defgroup RCCEx_USB_Prescaler USB Prescaler + * @{ + */ +#define RCC_USBCLKSOURCE_PLL_DIV2 RCC_CFGR_OTGFSPRE +#define RCC_USBCLKSOURCE_PLL_DIV3 ((uint32_t)0x00000000) + +/** + * @} + */ + +/** @defgroup RCCEx_PLLI2S_Multiplication_Factor PLLI2S Multiplication Factor + * @{ + */ + +#define RCC_PLLI2S_MUL8 RCC_CFGR2_PLL3MUL8 /*!< PLLI2S input clock * 8 */ +#define RCC_PLLI2S_MUL9 RCC_CFGR2_PLL3MUL9 /*!< PLLI2S input clock * 9 */ +#define RCC_PLLI2S_MUL10 RCC_CFGR2_PLL3MUL10 /*!< PLLI2S input clock * 10 */ +#define RCC_PLLI2S_MUL11 RCC_CFGR2_PLL3MUL11 /*!< PLLI2S input clock * 11 */ +#define RCC_PLLI2S_MUL12 RCC_CFGR2_PLL3MUL12 /*!< PLLI2S input clock * 12 */ +#define RCC_PLLI2S_MUL13 RCC_CFGR2_PLL3MUL13 /*!< PLLI2S input clock * 13 */ +#define RCC_PLLI2S_MUL14 RCC_CFGR2_PLL3MUL14 /*!< PLLI2S input clock * 14 */ +#define RCC_PLLI2S_MUL16 RCC_CFGR2_PLL3MUL16 /*!< PLLI2S input clock * 16 */ +#define RCC_PLLI2S_MUL20 RCC_CFGR2_PLL3MUL20 /*!< PLLI2S input clock * 20 */ + +/** + * @} + */ +#endif /* STM32F105xC || STM32F107xC */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +/** @defgroup RCCEx_Prediv1_Source Prediv1 Source + * @{ + */ + +#define RCC_PREDIV1_SOURCE_HSE RCC_CFGR2_PREDIV1SRC_HSE +#define RCC_PREDIV1_SOURCE_PLL2 RCC_CFGR2_PREDIV1SRC_PLL2 + +/** + * @} + */ +#endif /* STM32F105xC || STM32F107xC */ + +/** @defgroup RCCEx_Prediv1_Factor HSE Prediv1 Factor + * @{ + */ + +#define RCC_HSE_PREDIV_DIV1 ((uint32_t)0x00000000) + +#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\ + || defined(STM32F100xE) +#define RCC_HSE_PREDIV_DIV2 RCC_CFGR2_PREDIV1_DIV2 +#define RCC_HSE_PREDIV_DIV3 RCC_CFGR2_PREDIV1_DIV3 +#define RCC_HSE_PREDIV_DIV4 RCC_CFGR2_PREDIV1_DIV4 +#define RCC_HSE_PREDIV_DIV5 RCC_CFGR2_PREDIV1_DIV5 +#define RCC_HSE_PREDIV_DIV6 RCC_CFGR2_PREDIV1_DIV6 +#define RCC_HSE_PREDIV_DIV7 RCC_CFGR2_PREDIV1_DIV7 +#define RCC_HSE_PREDIV_DIV8 RCC_CFGR2_PREDIV1_DIV8 +#define RCC_HSE_PREDIV_DIV9 RCC_CFGR2_PREDIV1_DIV9 +#define RCC_HSE_PREDIV_DIV10 RCC_CFGR2_PREDIV1_DIV10 +#define RCC_HSE_PREDIV_DIV11 RCC_CFGR2_PREDIV1_DIV11 +#define RCC_HSE_PREDIV_DIV12 RCC_CFGR2_PREDIV1_DIV12 +#define RCC_HSE_PREDIV_DIV13 RCC_CFGR2_PREDIV1_DIV13 +#define RCC_HSE_PREDIV_DIV14 RCC_CFGR2_PREDIV1_DIV14 +#define RCC_HSE_PREDIV_DIV15 RCC_CFGR2_PREDIV1_DIV15 +#define RCC_HSE_PREDIV_DIV16 RCC_CFGR2_PREDIV1_DIV16 +#else +#define RCC_HSE_PREDIV_DIV2 RCC_CFGR_PLLXTPRE +#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */ + +/** + * @} + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +/** @defgroup RCCEx_Prediv2_Factor HSE Prediv2 Factor + * @{ + */ + +#define RCC_HSE_PREDIV2_DIV1 RCC_CFGR2_PREDIV2_DIV1 /*!< PREDIV2 input clock not divided */ +#define RCC_HSE_PREDIV2_DIV2 RCC_CFGR2_PREDIV2_DIV2 /*!< PREDIV2 input clock divided by 2 */ +#define RCC_HSE_PREDIV2_DIV3 RCC_CFGR2_PREDIV2_DIV3 /*!< PREDIV2 input clock divided by 3 */ +#define RCC_HSE_PREDIV2_DIV4 RCC_CFGR2_PREDIV2_DIV4 /*!< PREDIV2 input clock divided by 4 */ +#define RCC_HSE_PREDIV2_DIV5 RCC_CFGR2_PREDIV2_DIV5 /*!< PREDIV2 input clock divided by 5 */ +#define RCC_HSE_PREDIV2_DIV6 RCC_CFGR2_PREDIV2_DIV6 /*!< PREDIV2 input clock divided by 6 */ +#define RCC_HSE_PREDIV2_DIV7 RCC_CFGR2_PREDIV2_DIV7 /*!< PREDIV2 input clock divided by 7 */ +#define RCC_HSE_PREDIV2_DIV8 RCC_CFGR2_PREDIV2_DIV8 /*!< PREDIV2 input clock divided by 8 */ +#define RCC_HSE_PREDIV2_DIV9 RCC_CFGR2_PREDIV2_DIV9 /*!< PREDIV2 input clock divided by 9 */ +#define RCC_HSE_PREDIV2_DIV10 RCC_CFGR2_PREDIV2_DIV10 /*!< PREDIV2 input clock divided by 10 */ +#define RCC_HSE_PREDIV2_DIV11 RCC_CFGR2_PREDIV2_DIV11 /*!< PREDIV2 input clock divided by 11 */ +#define RCC_HSE_PREDIV2_DIV12 RCC_CFGR2_PREDIV2_DIV12 /*!< PREDIV2 input clock divided by 12 */ +#define RCC_HSE_PREDIV2_DIV13 RCC_CFGR2_PREDIV2_DIV13 /*!< PREDIV2 input clock divided by 13 */ +#define RCC_HSE_PREDIV2_DIV14 RCC_CFGR2_PREDIV2_DIV14 /*!< PREDIV2 input clock divided by 14 */ +#define RCC_HSE_PREDIV2_DIV15 RCC_CFGR2_PREDIV2_DIV15 /*!< PREDIV2 input clock divided by 15 */ +#define RCC_HSE_PREDIV2_DIV16 RCC_CFGR2_PREDIV2_DIV16 /*!< PREDIV2 input clock divided by 16 */ + +/** + * @} + */ + +/** @defgroup RCCEx_PLL2_Config PLL Config + * @{ + */ +#define RCC_PLL2_NONE ((uint32_t)0x00000000) +#define RCC_PLL2_OFF ((uint32_t)0x00000001) +#define RCC_PLL2_ON ((uint32_t)0x00000002) + +/** + * @} + */ + +/** @defgroup RCCEx_PLL2_Multiplication_Factor PLL2 Multiplication Factor + * @{ + */ + +#define RCC_PLL2_MUL8 RCC_CFGR2_PLL2MUL8 /*!< PLL2 input clock * 8 */ +#define RCC_PLL2_MUL9 RCC_CFGR2_PLL2MUL9 /*!< PLL2 input clock * 9 */ +#define RCC_PLL2_MUL10 RCC_CFGR2_PLL2MUL10 /*!< PLL2 input clock * 10 */ +#define RCC_PLL2_MUL11 RCC_CFGR2_PLL2MUL11 /*!< PLL2 input clock * 11 */ +#define RCC_PLL2_MUL12 RCC_CFGR2_PLL2MUL12 /*!< PLL2 input clock * 12 */ +#define RCC_PLL2_MUL13 RCC_CFGR2_PLL2MUL13 /*!< PLL2 input clock * 13 */ +#define RCC_PLL2_MUL14 RCC_CFGR2_PLL2MUL14 /*!< PLL2 input clock * 14 */ +#define RCC_PLL2_MUL16 RCC_CFGR2_PLL2MUL16 /*!< PLL2 input clock * 16 */ +#define RCC_PLL2_MUL20 RCC_CFGR2_PLL2MUL20 /*!< PLL2 input clock * 20 */ + +/** + * @} + */ + +#endif /* STM32F105xC || STM32F107xC */ + +/** @defgroup RCCEx_PLL_Multiplication_Factor PLL Multiplication Factor + * @{ + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +#else +#define RCC_PLL_MUL2 RCC_CFGR_PLLMULL2 +#define RCC_PLL_MUL3 RCC_CFGR_PLLMULL3 +#endif /* STM32F105xC || STM32F107xC */ +#define RCC_PLL_MUL4 RCC_CFGR_PLLMULL4 +#define RCC_PLL_MUL5 RCC_CFGR_PLLMULL5 +#define RCC_PLL_MUL6 RCC_CFGR_PLLMULL6 +#define RCC_PLL_MUL7 RCC_CFGR_PLLMULL7 +#define RCC_PLL_MUL8 RCC_CFGR_PLLMULL8 +#define RCC_PLL_MUL9 RCC_CFGR_PLLMULL9 +#if defined(STM32F105xC) || defined(STM32F107xC) +#define RCC_PLL_MUL6_5 RCC_CFGR_PLLMULL6_5 +#else +#define RCC_PLL_MUL10 RCC_CFGR_PLLMULL10 +#define RCC_PLL_MUL11 RCC_CFGR_PLLMULL11 +#define RCC_PLL_MUL12 RCC_CFGR_PLLMULL12 +#define RCC_PLL_MUL13 RCC_CFGR_PLLMULL13 +#define RCC_PLL_MUL14 RCC_CFGR_PLLMULL14 +#define RCC_PLL_MUL15 RCC_CFGR_PLLMULL15 +#define RCC_PLL_MUL16 RCC_CFGR_PLLMULL16 +#endif /* STM32F105xC || STM32F107xC */ + +/** + * @} + */ + +/** @defgroup RCCEx_MCO1_Clock_Source MCO1 Clock Source + * @{ + */ +#define RCC_MCO1SOURCE_NOCLOCK ((uint32_t)RCC_CFGR_MCO_NOCLOCK) +#define RCC_MCO1SOURCE_SYSCLK ((uint32_t)RCC_CFGR_MCO_SYSCLK) +#define RCC_MCO1SOURCE_HSI ((uint32_t)RCC_CFGR_MCO_HSI) +#define RCC_MCO1SOURCE_HSE ((uint32_t)RCC_CFGR_MCO_HSE) +#define RCC_MCO1SOURCE_PLLCLK ((uint32_t)RCC_CFGR_MCO_PLLCLK_DIV2) +#if defined(STM32F105xC) || defined(STM32F107xC) +#define RCC_MCO1SOURCE_PLL2CLK ((uint32_t)RCC_CFGR_MCO_PLL2CLK) +#define RCC_MCO1SOURCE_PLL3CLK_DIV2 ((uint32_t)RCC_CFGR_MCO_PLL3CLK_DIV2) +#define RCC_MCO1SOURCE_EXT_HSE ((uint32_t)RCC_CFGR_MCO_EXT_HSE) +#define RCC_MCO1SOURCE_PLL3CLK ((uint32_t)RCC_CFGR_MCO_PLL3CLK) +#endif /* STM32F105xC || STM32F107xC*/ +/** + * @} + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +/** @defgroup RCCEx_Interrupt RCCEx Interrupt + * @{ + */ +#define RCC_IT_PLL2RDY ((uint8_t)RCC_CIR_PLL2RDYF) +#define RCC_IT_PLLI2SRDY ((uint8_t)RCC_CIR_PLL3RDYF) +/** + * @} + */ + +/** @defgroup RCCEx_Flag RCCEx Flag + * Elements values convention: 0XXYYYYYb + * - YYYYY : Flag position in the register + * - XX : Register index + * - 01: CR register + * @{ + */ +/* Flags in the CR register */ +#define RCC_FLAG_PLL2RDY ((uint8_t)((CR_REG_INDEX << 5) | POSITION_VAL(RCC_CR_PLL2RDY))) +#define RCC_FLAG_PLLI2SRDY ((uint8_t)((CR_REG_INDEX << 5) | POSITION_VAL(RCC_CR_PLL3RDY))) +/** + * @} + */ +#endif /* STM32F105xC || STM32F107xC*/ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros + * @{ + */ + +/** @defgroup RCCEx_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable + * @brief Enable or disable the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ + +#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\ + || defined(STM32F103xG) || defined(STM32F105xC) || defined (STM32F107xC)\ + || defined (STM32F100xE) +#define __HAL_RCC_DMA2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_DMA2_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN)) +#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */ + +#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\ + || defined(STM32F103xG) || defined (STM32F100xE) +#define __HAL_RCC_FSMC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_FSMC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FSMCEN)) +#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */ + +#if defined(STM32F103xE) || defined(STM32F103xG) +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0) + + +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_SDIOEN)) +#endif /* STM32F103xE || STM32F103xG */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN);\ + UNUSED(tmpreg); \ + } while(0) + + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_OTGFSEN)) +#endif /* STM32F105xC || STM32F107xC*/ + +#if defined(STM32F107xC) +#define __HAL_RCC_ETHMAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_ETHMACTX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_ETHMACRX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_ETHMAC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACEN)) +#define __HAL_RCC_ETHMACTX_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACTXEN)) +#define __HAL_RCC_ETHMACRX_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACRXEN)) + +/** + * @brief Enable ETHERNET clock. + */ +#define __HAL_RCC_ETH_CLK_ENABLE() do { \ + __HAL_RCC_ETHMAC_CLK_ENABLE(); \ + __HAL_RCC_ETHMACTX_CLK_ENABLE(); \ + __HAL_RCC_ETHMACRX_CLK_ENABLE(); \ + } while(0) +/** + * @brief Disable ETHERNET clock. + */ +#define __HAL_RCC_ETH_CLK_DISABLE() do { \ + __HAL_RCC_ETHMACTX_CLK_DISABLE(); \ + __HAL_RCC_ETHMACRX_CLK_DISABLE(); \ + __HAL_RCC_ETHMAC_CLK_DISABLE(); \ + } while(0) + +#endif /* STM32F107xC*/ + +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ + +#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\ + || defined(STM32F103xG) || defined(STM32F105xC) || defined (STM32F107xC)\ + || defined (STM32F100xE) +#define __HAL_RCC_DMA2_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) != RESET) +#define __HAL_RCC_DMA2_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) == RESET) +#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */ +#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\ + || defined(STM32F103xG) || defined (STM32F100xE) +#define __HAL_RCC_FSMC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) != RESET) +#define __HAL_RCC_FSMC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) == RESET) +#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */ +#if defined(STM32F103xE) || defined(STM32F103xG) +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) != RESET) +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) == RESET) +#endif /* STM32F103xE || STM32F103xG */ +#if defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) == RESET) +#endif /* STM32F105xC || STM32F107xC*/ +#if defined(STM32F107xC) +#define __HAL_RCC_ETHMAC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) != RESET) +#define __HAL_RCC_ETHMAC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) == RESET) +#define __HAL_RCC_ETHMACTX_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) != RESET) +#define __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) == RESET) +#define __HAL_RCC_ETHMACRX_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) != RESET) +#define __HAL_RCC_ETHMACRX_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) == RESET) +#endif /* STM32F107xC*/ + +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ + +#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE)\ + || defined(STM32F103xG) || defined(STM32F105xC) ||defined(STM32F107xC) +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN)) +#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ + +#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB)\ + || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_SPI2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_I2C2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#define __HAL_RCC_I2C2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN)) +#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */ + +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) +#define __HAL_RCC_USB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_USB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USBEN)) +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */ + +#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\ + || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_TIM5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN)) +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */ + +#if defined(STM32F100xB) || defined (STM32F100xE) +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_CEC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +#define __HAL_RCC_CEC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CECEN)) +#endif /* STM32F100xB || STM32F100xE */ + +#ifdef STM32F100xE +#define __HAL_RCC_TIM5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN)) +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#endif /* STM32F100xE */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_CAN2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN)) +#endif /* STM32F105xC || STM32F107xC */ + +#if defined(STM32F101xG) || defined(STM32F103xG) +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#endif /* STM32F101xG || STM32F103xG*/ + +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ + +#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE)\ + || defined(STM32F103xG) || defined(STM32F105xC) ||defined(STM32F107xC) +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET) +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET) +#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ +#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB)\ + || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET) +#define __HAL_RCC_SPI2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#define __HAL_RCC_I2C2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET) +#define __HAL_RCC_I2C2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET) +#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */ +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) +#define __HAL_RCC_USB_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) != RESET) +#define __HAL_RCC_USB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) == RESET) +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */ +#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\ + || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_TIM5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET) +#define __HAL_RCC_TIM5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */ +#if defined(STM32F100xB) || defined (STM32F100xE) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +#define __HAL_RCC_CEC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) != RESET) +#define __HAL_RCC_CEC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) == RESET) +#endif /* STM32F100xB || STM32F100xE */ +#ifdef STM32F100xE +#define __HAL_RCC_TIM5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET) +#define __HAL_RCC_TIM5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#define __HAL_RCC_CAN2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET) +#define __HAL_RCC_CAN2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET) +#endif /* STM32F100xE */ +#if defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#endif /* STM32F105xC || STM32F107xC */ +#if defined(STM32F101xG) || defined(STM32F103xG) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#endif /* STM32F101xG || STM32F103xG*/ + +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ + +#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB)\ + || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE)\ + || defined(STM32F103xG) +#define __HAL_RCC_ADC2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN)) +#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */ + +#if defined(STM32F100xB) || defined(STM32F100xE) +#define __HAL_RCC_TIM15_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM16_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM17_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM15_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM15EN)) +#define __HAL_RCC_TIM16_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM16EN)) +#define __HAL_RCC_TIM17_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM17EN)) +#endif /* STM32F100xB || STM32F100xE */ + +#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE)\ + || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB)\ + || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\ + || defined(STM32F107xC) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPEEN)) +#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */ + +#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\ + || defined(STM32F103xG) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN)) +#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/ + +#if defined(STM32F103xE) || defined(STM32F103xG) +#define __HAL_RCC_TIM8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_ADC3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN)) +#define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN)) +#endif /* STM32F103xE || STM32F103xG */ + +#if defined(STM32F100xE) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN)) +#endif /* STM32F100xE */ + +#if defined(STM32F101xG) || defined(STM32F103xG) +#define __HAL_RCC_TIM9_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM11_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\ + UNUSED(tmpreg); \ + } while(0) + +#define __HAL_RCC_TIM9_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM9EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_TIM11_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM11EN)) +#endif /* STM32F101xG || STM32F103xG */ + +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ + +#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB)\ + || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE)\ + || defined(STM32F103xG) +#define __HAL_RCC_ADC2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET) +#define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET) +#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */ +#if defined(STM32F100xB) || defined(STM32F100xE) +#define __HAL_RCC_TIM15_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) != RESET) +#define __HAL_RCC_TIM15_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) == RESET) +#define __HAL_RCC_TIM16_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) != RESET) +#define __HAL_RCC_TIM16_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) == RESET) +#define __HAL_RCC_TIM17_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) != RESET) +#define __HAL_RCC_TIM17_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) == RESET) +#endif /* STM32F100xB || STM32F100xE */ +#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE)\ + || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB)\ + || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\ + || defined(STM32F107xC) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) == RESET) +#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */ +#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\ + || defined(STM32F103xG) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET) +#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/ +#if defined(STM32F103xE) || defined(STM32F103xG) +#define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET) +#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET) +#define __HAL_RCC_ADC3_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET) +#define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET) +#endif /* STM32F103xE || STM32F103xG */ +#if defined(STM32F100xE) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET) +#endif /* STM32F100xE */ +#if defined(STM32F101xG) || defined(STM32F103xG) +#define __HAL_RCC_TIM9_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) != RESET) +#define __HAL_RCC_TIM9_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +#define __HAL_RCC_TIM11_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) != RESET) +#define __HAL_RCC_TIM11_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) == RESET) +#endif /* STM32F101xG || STM32F103xG */ + +/** + * @} + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +/** @defgroup RCCEx_Peripheral_Clock_Force_Release Peripheral Clock Force Release + * @brief Force or release AHB peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB_FORCE_RESET() (RCC->AHBRSTR = 0xFFFFFFFFU) +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_OTGFSRST)) +#if defined(STM32F107xC) +#define __HAL_RCC_ETHMAC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_ETHMACRST)) +#endif /* STM32F107xC */ + +#define __HAL_RCC_AHB_RELEASE_RESET() (RCC->AHBRSTR = 0x00) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_OTGFSRST)) +#if defined(STM32F107xC) +#define __HAL_RCC_ETHMAC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_ETHMACRST)) +#endif /* STM32F107xC */ + +/** + * @} + */ +#endif /* STM32F105xC || STM32F107xC */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ + +#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE)\ + || defined(STM32F103xG) || defined(STM32F105xC) ||defined(STM32F107xC) +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST)) + +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST)) +#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ + +#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB)\ + || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_I2C2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST)) + +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_I2C2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST)) +#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */ + +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) +#define __HAL_RCC_USB_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USBRST)) +#define __HAL_RCC_USB_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USBRST)) +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */ + +#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\ + || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_TIM5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST)) +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) + +#define __HAL_RCC_TIM5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST)) +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */ + +#if defined(STM32F100xB) || defined (STM32F100xE) +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_CEC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CECRST)) + +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_CEC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CECRST)) +#endif /* STM32F100xB || STM32F100xE */ + +#if defined (STM32F100xE) +#define __HAL_RCC_TIM5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST)) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) + +#define __HAL_RCC_TIM5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST)) +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#endif /* STM32F100xE */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST)) + +#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST)) +#endif /* STM32F105xC || STM32F107xC */ + +#if defined(STM32F101xG) || defined(STM32F103xG) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) + +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#endif /* STM32F101xG || STM32F103xG */ + +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ + +#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB)\ + || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE)\ + || defined(STM32F103xG) +#define __HAL_RCC_ADC2_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC2RST)) + +#define __HAL_RCC_ADC2_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC2RST)) +#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */ + +#if defined(STM32F100xB) || defined(STM32F100xE) +#define __HAL_RCC_TIM15_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM15RST)) +#define __HAL_RCC_TIM16_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM16RST)) +#define __HAL_RCC_TIM17_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM17RST)) + +#define __HAL_RCC_TIM15_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM15RST)) +#define __HAL_RCC_TIM16_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM16RST)) +#define __HAL_RCC_TIM17_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM17RST)) +#endif /* STM32F100xB || STM32F100xE */ + +#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE)\ + || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB)\ + || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\ + || defined(STM32F107xC) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPERST)) + +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPERST)) +#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */ + +#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\ + || defined(STM32F103xG) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST)) + +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST)) +#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/ + +#if defined(STM32F103xE) || defined(STM32F103xG) +#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_ADC3_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC3RST)) + +#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_ADC3_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC3RST)) +#endif /* STM32F103xE || STM32F103xG */ + +#if defined(STM32F100xE) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST)) + +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST)) +#endif /* STM32F100xE */ + +#if defined(STM32F101xG) || defined(STM32F103xG) +#define __HAL_RCC_TIM9_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM9RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_TIM11_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM11RST)) + +#define __HAL_RCC_TIM9_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM9RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_TIM11_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM11RST)) +#endif /* STM32F101xG || STM32F103xG*/ + +/** + * @} + */ + +/** @defgroup RCCEx_HSE_Configuration HSE Configuration + * @{ + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\ + || defined(STM32F100xE) +/** + * @brief Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL. + * @note Predivision factor can not be changed if PLL is used as system clock + * In this case, you have to select another source of the system clock, disable the PLL and + * then change the HSE predivision factor. + * @param __HSE_PREDIV_VALUE__ specifies the division value applied to HSE. + * This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV16. + */ +#define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1, (uint32_t)(__HSE_PREDIV_VALUE__)) +#else +/** + * @brief Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL. + * @note Predivision factor can not be changed if PLL is used as system clock + * In this case, you have to select another source of the system clock, disable the PLL and + * then change the HSE predivision factor. + * @param __HSE_PREDIV_VALUE__ specifies the division value applied to HSE. + * This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV2. + */ +#define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) \ + MODIFY_REG(RCC->CFGR,RCC_CFGR_PLLXTPRE, (uint32_t)(__HSE_PREDIV_VALUE__)) + +#endif /* STM32F105xC || STM32F107xC */ + +#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\ + || defined(STM32F100xE) +/** + * @brief Macro to get prediv1 factor for PLL. + */ +#define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1) + +#else +/** + * @brief Macro to get prediv1 factor for PLL. + */ +#define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR, RCC_CFGR_PLLXTPRE) + +#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */ + +/** + * @} + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +/** @defgroup RCCEx_PLLI2S_Configuration PLLI2S Configuration + * @{ + */ + +/** @brief Macros to enable the main PLLI2S. + * @note After enabling the main PLLI2S, the application software should wait on + * PLLI2SRDY flag to be set indicating that PLLI2S clock is stable and can + * be used as system clock source. + * @note The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLLI2S_ENABLE() (*(__IO uint32_t *) RCC_CR_PLLI2SON_BB = ENABLE) + +/** @brief Macros to disable the main PLLI2S. + * @note The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLLI2S_DISABLE() (*(__IO uint32_t *) RCC_CR_PLLI2SON_BB = DISABLE) + +/** @brief macros to configure the main PLLI2S multiplication factor. + * @note This function must be used only when the main PLLI2S is disabled. + * + * @param __PLLI2SMUL__ specifies the multiplication factor for PLLI2S VCO output clock + * This parameter can be one of the following values: + * @arg @ref RCC_PLLI2S_MUL8 PLLI2SVCO = PLLI2S clock entry x 8 + * @arg @ref RCC_PLLI2S_MUL9 PLLI2SVCO = PLLI2S clock entry x 9 + * @arg @ref RCC_PLLI2S_MUL10 PLLI2SVCO = PLLI2S clock entry x 10 + * @arg @ref RCC_PLLI2S_MUL11 PLLI2SVCO = PLLI2S clock entry x 11 + * @arg @ref RCC_PLLI2S_MUL12 PLLI2SVCO = PLLI2S clock entry x 12 + * @arg @ref RCC_PLLI2S_MUL13 PLLI2SVCO = PLLI2S clock entry x 13 + * @arg @ref RCC_PLLI2S_MUL14 PLLI2SVCO = PLLI2S clock entry x 14 + * @arg @ref RCC_PLLI2S_MUL16 PLLI2SVCO = PLLI2S clock entry x 16 + * @arg @ref RCC_PLLI2S_MUL20 PLLI2SVCO = PLLI2S clock entry x 20 + * + */ +#define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SMUL__)\ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL3MUL,(__PLLI2SMUL__)) + +/** + * @} + */ + +#endif /* STM32F105xC || STM32F107xC */ + +/** @defgroup RCCEx_Peripheral_Configuration Peripheral Configuration + * @brief Macros to configure clock source of different peripherals. + * @{ + */ + +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) +/** @brief Macro to configure the USB clock. + * @param __USBCLKSOURCE__ specifies the USB clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock + * @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock + */ +#define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_USBPRE, (uint32_t)(__USBCLKSOURCE__)) + +/** @brief Macro to get the USB clock (USBCLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock + * @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock + */ +#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_USBPRE))) + +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */ + +#if defined(STM32F105xC) || defined(STM32F107xC) + +/** @brief Macro to configure the USB OTSclock. + * @param __USBCLKSOURCE__ specifies the USB clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock + * @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock + */ +#define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_OTGFSPRE, (uint32_t)(__USBCLKSOURCE__)) + +/** @brief Macro to get the USB clock (USBCLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock + * @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock + */ +#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_OTGFSPRE))) + +#endif /* STM32F105xC || STM32F107xC */ + +/** @brief Macro to configure the ADCx clock (x=1 to 3 depending on devices). + * @param __ADCCLKSOURCE__ specifies the ADC clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock + * @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock + * @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock + * @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock + */ +#define __HAL_RCC_ADC_CONFIG(__ADCCLKSOURCE__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_ADCPRE, (uint32_t)(__ADCCLKSOURCE__)) + +/** @brief Macro to get the ADC clock (ADCxCLK, x=1 to 3 depending on devices). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock + * @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock + * @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock + * @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock + */ +#define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_ADCPRE))) + +/** + * @} + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) + +/** @addtogroup RCCEx_HSE_Configuration + * @{ + */ + +/** + * @brief Macro to configure the PLL2 & PLLI2S Predivision factor. + * @note Predivision factor can not be changed if PLL2 is used indirectly as system clock + * In this case, you have to select another source of the system clock, disable the PLL2 and PLLI2S and + * then change the PREDIV2 factor. + * @param __HSE_PREDIV2_VALUE__ specifies the PREDIV2 value applied to PLL2 & PLLI2S. + * This parameter must be a number between RCC_HSE_PREDIV2_DIV1 and RCC_HSE_PREDIV2_DIV16. + */ +#define __HAL_RCC_HSE_PREDIV2_CONFIG(__HSE_PREDIV2_VALUE__) \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV2, (uint32_t)(__HSE_PREDIV2_VALUE__)) + +/** + * @brief Macro to get prediv2 factor for PLL2 & PLL3. + */ +#define __HAL_RCC_HSE_GET_PREDIV2() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV2) + +/** + * @} + */ + +/** @addtogroup RCCEx_PLLI2S_Configuration + * @{ + */ + +/** @brief Macros to enable the main PLL2. + * @note After enabling the main PLL2, the application software should wait on + * PLL2RDY flag to be set indicating that PLL2 clock is stable and can + * be used as system clock source. + * @note The main PLL2 is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLL2_ENABLE() (*(__IO uint32_t *) RCC_CR_PLL2ON_BB = ENABLE) + +/** @brief Macros to disable the main PLL2. + * @note The main PLL2 can not be disabled if it is used indirectly as system clock source + * @note The main PLL2 is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLL2_DISABLE() (*(__IO uint32_t *) RCC_CR_PLL2ON_BB = DISABLE) + +/** @brief macros to configure the main PLL2 multiplication factor. + * @note This function must be used only when the main PLL2 is disabled. + * + * @param __PLL2MUL__ specifies the multiplication factor for PLL2 VCO output clock + * This parameter can be one of the following values: + * @arg @ref RCC_PLL2_MUL8 PLL2VCO = PLL2 clock entry x 8 + * @arg @ref RCC_PLL2_MUL9 PLL2VCO = PLL2 clock entry x 9 + * @arg @ref RCC_PLL2_MUL10 PLL2VCO = PLL2 clock entry x 10 + * @arg @ref RCC_PLL2_MUL11 PLL2VCO = PLL2 clock entry x 11 + * @arg @ref RCC_PLL2_MUL12 PLL2VCO = PLL2 clock entry x 12 + * @arg @ref RCC_PLL2_MUL13 PLL2VCO = PLL2 clock entry x 13 + * @arg @ref RCC_PLL2_MUL14 PLL2VCO = PLL2 clock entry x 14 + * @arg @ref RCC_PLL2_MUL16 PLL2VCO = PLL2 clock entry x 16 + * @arg @ref RCC_PLL2_MUL20 PLL2VCO = PLL2 clock entry x 20 + * + */ +#define __HAL_RCC_PLL2_CONFIG(__PLL2MUL__)\ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL2MUL,(__PLL2MUL__)) + +/** + * @} + */ + +/** @defgroup RCCEx_I2S_Configuration I2S Configuration + * @brief Macros to configure clock source of I2S peripherals. + * @{ + */ + +/** @brief Macro to configure the I2S2 clock. + * @param __I2S2CLKSOURCE__ specifies the I2S2 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry + * @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry + */ +#define __HAL_RCC_I2S2_CONFIG(__I2S2CLKSOURCE__) \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S2SRC, (uint32_t)(__I2S2CLKSOURCE__)) + +/** @brief Macro to get the I2S2 clock (I2S2CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry + * @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry + */ +#define __HAL_RCC_GET_I2S2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S2SRC))) + +/** @brief Macro to configure the I2S3 clock. + * @param __I2S2CLKSOURCE__ specifies the I2S3 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry + * @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry + */ +#define __HAL_RCC_I2S3_CONFIG(__I2S2CLKSOURCE__) \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S3SRC, (uint32_t)(__I2S2CLKSOURCE__)) + +/** @brief Macro to get the I2S3 clock (I2S3CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry + * @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry + */ +#define __HAL_RCC_GET_I2S3_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S3SRC))) + +/** + * @} + */ + +#endif /* STM32F105xC || STM32F107xC */ +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup RCCEx_Exported_Functions + * @{ + */ + +/** @addtogroup RCCEx_Exported_Functions_Group1 + * @{ + */ + +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit); +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit); +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk); + +/** + * @} + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +/** @addtogroup RCCEx_Exported_Functions_Group2 + * @{ + */ +HAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit); +HAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void); + +/** + * @} + */ + +/** @addtogroup RCCEx_Exported_Functions_Group3 + * @{ + */ +HAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef *PLL2Init); +HAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void); + +/** + * @} + */ +#endif /* STM32F105xC || STM32F107xC */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_RCC_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1767 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_tim.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of TIM HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_TIM_H +#define __STM32F1xx_HAL_TIM_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup TIM + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup TIM_Exported_Types TIM Exported Types + * @{ + */ +/** + * @brief TIM Time base Configuration Structure definition + */ +typedef struct +{ + uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t CounterMode; /*!< Specifies the counter mode. + This parameter can be a value of @ref TIM_Counter_Mode */ + + uint32_t Period; /*!< Specifies the period value to be loaded into the active + Auto-Reload Register at the next update event. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + + uint32_t ClockDivision; /*!< Specifies the clock division. + This parameter can be a value of @ref TIM_ClockDivision */ + + uint32_t RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter + reaches zero, an update event is generated and counting restarts + from the RCR value (N). + This means in PWM mode that (N+1) corresponds to: + - the number of PWM periods in edge-aligned mode + - the number of half PWM period in center-aligned mode + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. + @note This parameter is valid only for TIM1 and TIM8. */ +} TIM_Base_InitTypeDef; + +/** + * @brief TIM Output Compare Configuration Structure definition + */ +typedef struct +{ + uint32_t OCMode; /*!< Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t OCPolarity; /*!< Specifies the output polarity. + This parameter can be a value of @ref TIM_Output_Compare_Polarity */ + + uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_Output_Compare_N_Polarity + @note This parameter is valid only for TIM1 and TIM8. */ + + uint32_t OCFastMode; /*!< Specifies the Fast mode state. + This parameter can be a value of @ref TIM_Output_Fast_State + @note This parameter is valid only in PWM1 and PWM2 mode. */ + + + uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_Idle_State + @note This parameter is valid only for TIM1 and TIM8. */ + + uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State + @note This parameter is valid only for TIM1 and TIM8. */ +} TIM_OC_InitTypeDef; + +/** + * @brief TIM One Pulse Mode Configuration Structure definition + */ +typedef struct +{ + uint32_t OCMode; /*!< Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t OCPolarity; /*!< Specifies the output polarity. + This parameter can be a value of @ref TIM_Output_Compare_Polarity */ + + uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_Output_Compare_N_Polarity + @note This parameter is valid only for TIM1 and TIM8. */ + + uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_Idle_State + @note This parameter is valid only for TIM1 and TIM8. */ + + uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State + @note This parameter is valid only for TIM1 and TIM8. */ + + uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t ICSelection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t ICFilter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_OnePulse_InitTypeDef; + + +/** + * @brief TIM Input Capture Configuration Structure definition + */ +typedef struct +{ + uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t ICSelection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t ICFilter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_IC_InitTypeDef; + +/** + * @brief TIM Encoder Configuration Structure definition + */ +typedef struct +{ + uint32_t EncoderMode; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Encoder_Mode */ + + uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t IC1Selection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC1Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + + uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t IC2Selection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t IC2Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC2Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_Encoder_InitTypeDef; + + +/** + * @brief TIM Clock Configuration Handle Structure definition + */ +typedef struct +{ + uint32_t ClockSource; /*!< TIM clock sources + This parameter can be a value of @ref TIM_Clock_Source */ + uint32_t ClockPolarity; /*!< TIM clock polarity + This parameter can be a value of @ref TIM_Clock_Polarity */ + uint32_t ClockPrescaler; /*!< TIM clock prescaler + This parameter can be a value of @ref TIM_Clock_Prescaler */ + uint32_t ClockFilter; /*!< TIM clock filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +}TIM_ClockConfigTypeDef; + +/** + * @brief TIM Clear Input Configuration Handle Structure definition + */ +typedef struct +{ + uint32_t ClearInputState; /*!< TIM clear Input state + This parameter can be ENABLE or DISABLE */ + uint32_t ClearInputSource; /*!< TIM clear Input sources + This parameter can be a value of @ref TIM_ClearInput_Source */ + uint32_t ClearInputPolarity; /*!< TIM Clear Input polarity + This parameter can be a value of @ref TIM_ClearInput_Polarity */ + uint32_t ClearInputPrescaler; /*!< TIM Clear Input prescaler + This parameter can be a value of @ref TIM_ClearInput_Prescaler */ + uint32_t ClearInputFilter; /*!< TIM Clear Input filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +}TIM_ClearInputConfigTypeDef; + +/** + * @brief TIM Slave configuration Structure definition + */ +typedef struct { + uint32_t SlaveMode; /*!< Slave mode selection + This parameter can be a value of @ref TIM_Slave_Mode */ + uint32_t InputTrigger; /*!< Input Trigger source + This parameter can be a value of @ref TIM_Trigger_Selection */ + uint32_t TriggerPolarity; /*!< Input Trigger polarity + This parameter can be a value of @ref TIM_Trigger_Polarity */ + uint32_t TriggerPrescaler; /*!< Input trigger prescaler + This parameter can be a value of @ref TIM_Trigger_Prescaler */ + uint32_t TriggerFilter; /*!< Input trigger filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + +}TIM_SlaveConfigTypeDef; + +/** + * @brief HAL State structures definition + */ +typedef enum +{ + HAL_TIM_STATE_RESET = 0x00, /*!< Peripheral not yet initialized or disabled */ + HAL_TIM_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */ + HAL_TIM_STATE_BUSY = 0x02, /*!< An internal process is ongoing */ + HAL_TIM_STATE_TIMEOUT = 0x03, /*!< Timeout state */ + HAL_TIM_STATE_ERROR = 0x04 /*!< Reception process is ongoing */ +}HAL_TIM_StateTypeDef; + +/** + * @brief HAL Active channel structures definition + */ +typedef enum +{ + HAL_TIM_ACTIVE_CHANNEL_1 = 0x01, /*!< The active channel is 1 */ + HAL_TIM_ACTIVE_CHANNEL_2 = 0x02, /*!< The active channel is 2 */ + HAL_TIM_ACTIVE_CHANNEL_3 = 0x04, /*!< The active channel is 3 */ + HAL_TIM_ACTIVE_CHANNEL_4 = 0x08, /*!< The active channel is 4 */ + HAL_TIM_ACTIVE_CHANNEL_CLEARED = 0x00 /*!< All active channels cleared */ +}HAL_TIM_ActiveChannel; + +/** + * @brief TIM Time Base Handle Structure definition + */ +typedef struct +{ + TIM_TypeDef *Instance; /*!< Register base address */ + TIM_Base_InitTypeDef Init; /*!< TIM Time Base required parameters */ + HAL_TIM_ActiveChannel Channel; /*!< Active channel */ + DMA_HandleTypeDef *hdma[7]; /*!< DMA Handlers array + This array is accessed by a @ref TIM_DMA_Handle_index */ + HAL_LockTypeDef Lock; /*!< Locking object */ + __IO HAL_TIM_StateTypeDef State; /*!< TIM operation state */ +}TIM_HandleTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup TIM_Exported_Constants TIM Exported Constants + * @{ + */ + +/** @defgroup TIM_Input_Channel_Polarity TIM Input Channel Polarity + * @{ + */ +#define TIM_INPUTCHANNELPOLARITY_RISING ((uint32_t)0x00000000) /*!< Polarity for TIx source */ +#define TIM_INPUTCHANNELPOLARITY_FALLING (TIM_CCER_CC1P) /*!< Polarity for TIx source */ +#define TIM_INPUTCHANNELPOLARITY_BOTHEDGE (TIM_CCER_CC1P | TIM_CCER_CC1NP) /*!< Polarity for TIx source */ +/** + * @} + */ + +/** @defgroup TIM_ETR_Polarity TIM ETR Polarity + * @{ + */ +#define TIM_ETRPOLARITY_INVERTED (TIM_SMCR_ETP) /*!< Polarity for ETR source */ +#define TIM_ETRPOLARITY_NONINVERTED ((uint32_t)0x0000) /*!< Polarity for ETR source */ +/** + * @} + */ + +/** @defgroup TIM_ETR_Prescaler TIM ETR Prescaler + * @{ + */ +#define TIM_ETRPRESCALER_DIV1 ((uint32_t)0x0000) /*!< No prescaler is used */ +#define TIM_ETRPRESCALER_DIV2 (TIM_SMCR_ETPS_0) /*!< ETR input source is divided by 2 */ +#define TIM_ETRPRESCALER_DIV4 (TIM_SMCR_ETPS_1) /*!< ETR input source is divided by 4 */ +#define TIM_ETRPRESCALER_DIV8 (TIM_SMCR_ETPS) /*!< ETR input source is divided by 8 */ +/** + * @} + */ + +/** @defgroup TIM_Counter_Mode TIM Counter Mode + * @{ + */ +#define TIM_COUNTERMODE_UP ((uint32_t)0x0000) +#define TIM_COUNTERMODE_DOWN TIM_CR1_DIR +#define TIM_COUNTERMODE_CENTERALIGNED1 TIM_CR1_CMS_0 +#define TIM_COUNTERMODE_CENTERALIGNED2 TIM_CR1_CMS_1 +#define TIM_COUNTERMODE_CENTERALIGNED3 TIM_CR1_CMS +/** + * @} + */ + +/** @defgroup TIM_ClockDivision TIM ClockDivision + * @{ + */ +#define TIM_CLOCKDIVISION_DIV1 ((uint32_t)0x0000) +#define TIM_CLOCKDIVISION_DIV2 (TIM_CR1_CKD_0) +#define TIM_CLOCKDIVISION_DIV4 (TIM_CR1_CKD_1) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_and_PWM_modes TIM Output Compare and PWM modes + * @{ + */ +#define TIM_OCMODE_TIMING ((uint32_t)0x0000) +#define TIM_OCMODE_ACTIVE (TIM_CCMR1_OC1M_0) +#define TIM_OCMODE_INACTIVE (TIM_CCMR1_OC1M_1) +#define TIM_OCMODE_TOGGLE (TIM_CCMR1_OC1M_0 | TIM_CCMR1_OC1M_1) +#define TIM_OCMODE_PWM1 (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2) +#define TIM_OCMODE_PWM2 (TIM_CCMR1_OC1M) +#define TIM_OCMODE_FORCED_ACTIVE (TIM_CCMR1_OC1M_0 | TIM_CCMR1_OC1M_2) +#define TIM_OCMODE_FORCED_INACTIVE (TIM_CCMR1_OC1M_2) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_State TIM Output Compare State + * @{ + */ +#define TIM_OUTPUTSTATE_DISABLE ((uint32_t)0x0000) +#define TIM_OUTPUTSTATE_ENABLE (TIM_CCER_CC1E) +/** + * @} + */ + +/** @defgroup TIM_Output_Fast_State TIM Output Fast State + * @{ + */ +#define TIM_OCFAST_DISABLE ((uint32_t)0x0000) +#define TIM_OCFAST_ENABLE (TIM_CCMR1_OC1FE) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State + * @{ + */ +#define TIM_OUTPUTNSTATE_DISABLE ((uint32_t)0x0000) +#define TIM_OUTPUTNSTATE_ENABLE (TIM_CCER_CC1NE) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity + * @{ + */ +#define TIM_OCPOLARITY_HIGH ((uint32_t)0x0000) +#define TIM_OCPOLARITY_LOW (TIM_CCER_CC1P) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_Polarity TIM Complementary Output Compare Polarity + * @{ + */ +#define TIM_OCNPOLARITY_HIGH ((uint32_t)0x0000) +#define TIM_OCNPOLARITY_LOW (TIM_CCER_CC1NP) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Idle_State TIM Output Compare Idle State + * @{ + */ +#define TIM_OCIDLESTATE_SET (TIM_CR2_OIS1) +#define TIM_OCIDLESTATE_RESET ((uint32_t)0x0000) +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_Idle_State TIM Complementary Output Compare Idle State + * @{ + */ +#define TIM_OCNIDLESTATE_SET (TIM_CR2_OIS1N) +#define TIM_OCNIDLESTATE_RESET ((uint32_t)0x0000) +/** + * @} + */ + +/** @defgroup TIM_Channel TIM Channel + * @{ + */ +#define TIM_CHANNEL_1 ((uint32_t)0x0000) +#define TIM_CHANNEL_2 ((uint32_t)0x0004) +#define TIM_CHANNEL_3 ((uint32_t)0x0008) +#define TIM_CHANNEL_4 ((uint32_t)0x000C) +#define TIM_CHANNEL_ALL ((uint32_t)0x0018) +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Polarity TIM Input Capture Polarity + * @{ + */ +#define TIM_ICPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING +#define TIM_ICPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING +#define TIM_ICPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection + * @{ + */ +#define TIM_ICSELECTION_DIRECTTI (TIM_CCMR1_CC1S_0) /*!< TIM Input 1, 2, 3 or 4 is selected to be + connected to IC1, IC2, IC3 or IC4, respectively */ +#define TIM_ICSELECTION_INDIRECTTI (TIM_CCMR1_CC1S_1) /*!< TIM Input 1, 2, 3 or 4 is selected to be + connected to IC2, IC1, IC4 or IC3, respectively */ +#define TIM_ICSELECTION_TRC (TIM_CCMR1_CC1S) /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */ +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Prescaler TIM Input Capture Prescaler + * @{ + */ +#define TIM_ICPSC_DIV1 ((uint32_t)0x0000) /*!< Capture performed each time an edge is detected on the capture input */ +#define TIM_ICPSC_DIV2 (TIM_CCMR1_IC1PSC_0) /*!< Capture performed once every 2 events */ +#define TIM_ICPSC_DIV4 (TIM_CCMR1_IC1PSC_1) /*!< Capture performed once every 4 events */ +#define TIM_ICPSC_DIV8 (TIM_CCMR1_IC1PSC) /*!< Capture performed once every 8 events */ +/** + * @} + */ + +/** @defgroup TIM_One_Pulse_Mode TIM One Pulse Mode + * @{ + */ +#define TIM_OPMODE_SINGLE (TIM_CR1_OPM) +#define TIM_OPMODE_REPETITIVE ((uint32_t)0x0000) +/** + * @} + */ + +/** @defgroup TIM_Encoder_Mode TIM Encoder Mode + * @{ + */ +#define TIM_ENCODERMODE_TI1 (TIM_SMCR_SMS_0) +#define TIM_ENCODERMODE_TI2 (TIM_SMCR_SMS_1) +#define TIM_ENCODERMODE_TI12 (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) +/** + * @} + */ + +/** @defgroup TIM_Interrupt_definition TIM Interrupt Definition + * @{ + */ +#define TIM_IT_UPDATE (TIM_DIER_UIE) +#define TIM_IT_CC1 (TIM_DIER_CC1IE) +#define TIM_IT_CC2 (TIM_DIER_CC2IE) +#define TIM_IT_CC3 (TIM_DIER_CC3IE) +#define TIM_IT_CC4 (TIM_DIER_CC4IE) +#define TIM_IT_COM (TIM_DIER_COMIE) +#define TIM_IT_TRIGGER (TIM_DIER_TIE) +#define TIM_IT_BREAK (TIM_DIER_BIE) +/** + * @} + */ + +/** @defgroup TIM_Commutation_Source TIM Commutation Source + * @{ + */ +#define TIM_COMMUTATION_TRGI (TIM_CR2_CCUS) +#define TIM_COMMUTATION_SOFTWARE ((uint32_t)0x0000) + +/** + * @} + */ + +/** @defgroup TIM_DMA_sources TIM DMA Sources + * @{ + */ +#define TIM_DMA_UPDATE (TIM_DIER_UDE) +#define TIM_DMA_CC1 (TIM_DIER_CC1DE) +#define TIM_DMA_CC2 (TIM_DIER_CC2DE) +#define TIM_DMA_CC3 (TIM_DIER_CC3DE) +#define TIM_DMA_CC4 (TIM_DIER_CC4DE) +#define TIM_DMA_COM (TIM_DIER_COMDE) +#define TIM_DMA_TRIGGER (TIM_DIER_TDE) +/** + * @} + */ + +/** @defgroup TIM_Event_Source TIM Event Source + * @{ + */ +#define TIM_EVENTSOURCE_UPDATE TIM_EGR_UG +#define TIM_EVENTSOURCE_CC1 TIM_EGR_CC1G +#define TIM_EVENTSOURCE_CC2 TIM_EGR_CC2G +#define TIM_EVENTSOURCE_CC3 TIM_EGR_CC3G +#define TIM_EVENTSOURCE_CC4 TIM_EGR_CC4G +#define TIM_EVENTSOURCE_COM TIM_EGR_COMG +#define TIM_EVENTSOURCE_TRIGGER TIM_EGR_TG +#define TIM_EVENTSOURCE_BREAK TIM_EGR_BG +/** + * @} + */ + +/** @defgroup TIM_Flag_definition TIM Flag Definition + * @{ + */ +#define TIM_FLAG_UPDATE (TIM_SR_UIF) +#define TIM_FLAG_CC1 (TIM_SR_CC1IF) +#define TIM_FLAG_CC2 (TIM_SR_CC2IF) +#define TIM_FLAG_CC3 (TIM_SR_CC3IF) +#define TIM_FLAG_CC4 (TIM_SR_CC4IF) +#define TIM_FLAG_COM (TIM_SR_COMIF) +#define TIM_FLAG_TRIGGER (TIM_SR_TIF) +#define TIM_FLAG_BREAK (TIM_SR_BIF) +#define TIM_FLAG_CC1OF (TIM_SR_CC1OF) +#define TIM_FLAG_CC2OF (TIM_SR_CC2OF) +#define TIM_FLAG_CC3OF (TIM_SR_CC3OF) +#define TIM_FLAG_CC4OF (TIM_SR_CC4OF) +/** + * @} + */ + +/** @defgroup TIM_Clock_Source TIM Clock Source + * @{ + */ +#define TIM_CLOCKSOURCE_ETRMODE2 (TIM_SMCR_ETPS_1) +#define TIM_CLOCKSOURCE_INTERNAL (TIM_SMCR_ETPS_0) +#define TIM_CLOCKSOURCE_ITR0 ((uint32_t)0x0000) +#define TIM_CLOCKSOURCE_ITR1 (TIM_SMCR_TS_0) +#define TIM_CLOCKSOURCE_ITR2 (TIM_SMCR_TS_1) +#define TIM_CLOCKSOURCE_ITR3 (TIM_SMCR_TS_0 | TIM_SMCR_TS_1) +#define TIM_CLOCKSOURCE_TI1ED (TIM_SMCR_TS_2) +#define TIM_CLOCKSOURCE_TI1 (TIM_SMCR_TS_0 | TIM_SMCR_TS_2) +#define TIM_CLOCKSOURCE_TI2 (TIM_SMCR_TS_1 | TIM_SMCR_TS_2) +#define TIM_CLOCKSOURCE_ETRMODE1 (TIM_SMCR_TS) +/** + * @} + */ + +/** @defgroup TIM_Clock_Polarity TIM Clock Polarity + * @{ + */ +#define TIM_CLOCKPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx clock sources */ +#define TIM_CLOCKPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx clock sources */ +#define TIM_CLOCKPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Polarity for TIx clock sources */ +#define TIM_CLOCKPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Polarity for TIx clock sources */ +#define TIM_CLOCKPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIx clock sources */ +/** + * @} + */ + +/** @defgroup TIM_Clock_Prescaler TIM Clock Prescaler + * @{ + */ +#define TIM_CLOCKPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_CLOCKPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Clock: Capture performed once every 2 events. */ +#define TIM_CLOCKPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Clock: Capture performed once every 4 events. */ +#define TIM_CLOCKPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Clock: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_ClearInput_Source TIM ClearInput Source + * @{ + */ +#define TIM_CLEARINPUTSOURCE_ETR ((uint32_t)0x0001) +#define TIM_CLEARINPUTSOURCE_OCREFCLR ((uint32_t)0x0002) +#define TIM_CLEARINPUTSOURCE_NONE ((uint32_t)0x0000) +/** + * @} + */ + +/** @defgroup TIM_ClearInput_Polarity TIM Clear Input Polarity + * @{ + */ +#define TIM_CLEARINPUTPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx pin */ +#define TIM_CLEARINPUTPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx pin */ +/** + * @} + */ + +/** @defgroup TIM_ClearInput_Prescaler TIM Clear Input Prescaler + * @{ + */ +#define TIM_CLEARINPUTPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_CLEARINPUTPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR pin: Capture performed once every 2 events. */ +#define TIM_CLEARINPUTPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR pin: Capture performed once every 4 events. */ +#define TIM_CLEARINPUTPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR pin: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state TIM OSSR Off State Selection for Run mode state + * @{ + */ +#define TIM_OSSR_ENABLE (TIM_BDTR_OSSR) +#define TIM_OSSR_DISABLE ((uint32_t)0x0000) +/** + * @} + */ + +/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state TIM OSSI Off State Selection for Idle mode state + * @{ + */ +#define TIM_OSSI_ENABLE (TIM_BDTR_OSSI) +#define TIM_OSSI_DISABLE ((uint32_t)0x0000) +/** + * @} + */ + +/** @defgroup TIM_Lock_level TIM Lock level + * @{ + */ +#define TIM_LOCKLEVEL_OFF ((uint32_t)0x0000) +#define TIM_LOCKLEVEL_1 (TIM_BDTR_LOCK_0) +#define TIM_LOCKLEVEL_2 (TIM_BDTR_LOCK_1) +#define TIM_LOCKLEVEL_3 (TIM_BDTR_LOCK) +/** + * @} + */ + +/** @defgroup TIM_Break_Input_enable_disable TIM Break Input Enable Disable + * @{ + */ +#define TIM_BREAK_ENABLE (TIM_BDTR_BKE) +#define TIM_BREAK_DISABLE ((uint32_t)0x0000) +/** + * @} + */ + +/** @defgroup TIM_Break_Polarity TIM Break Input Polarity + * @{ + */ +#define TIM_BREAKPOLARITY_LOW ((uint32_t)0x0000) +#define TIM_BREAKPOLARITY_HIGH (TIM_BDTR_BKP) +/** + * @} + */ +/** @defgroup TIM_AOE_Bit_Set_Reset TIM Automatic Output Enable + * @{ + */ +#define TIM_AUTOMATICOUTPUT_ENABLE (TIM_BDTR_AOE) +#define TIM_AUTOMATICOUTPUT_DISABLE ((uint32_t)0x0000) +/** + * @} + */ + +/** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection + * @{ + */ +#define TIM_TRGO_RESET ((uint32_t)0x0000) +#define TIM_TRGO_ENABLE (TIM_CR2_MMS_0) +#define TIM_TRGO_UPDATE (TIM_CR2_MMS_1) +#define TIM_TRGO_OC1 ((TIM_CR2_MMS_1 | TIM_CR2_MMS_0)) +#define TIM_TRGO_OC1REF (TIM_CR2_MMS_2) +#define TIM_TRGO_OC2REF ((TIM_CR2_MMS_2 | TIM_CR2_MMS_0)) +#define TIM_TRGO_OC3REF ((TIM_CR2_MMS_2 | TIM_CR2_MMS_1)) +#define TIM_TRGO_OC4REF ((TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0)) +/** + * @} + */ + +/** @defgroup TIM_Slave_Mode TIM Slave Mode + * @{ + */ +#define TIM_SLAVEMODE_DISABLE ((uint32_t)0x0000) +#define TIM_SLAVEMODE_RESET ((uint32_t)0x0004) +#define TIM_SLAVEMODE_GATED ((uint32_t)0x0005) +#define TIM_SLAVEMODE_TRIGGER ((uint32_t)0x0006) +#define TIM_SLAVEMODE_EXTERNAL1 ((uint32_t)0x0007) +/** + * @} + */ + +/** @defgroup TIM_Master_Slave_Mode TIM Master Slave Mode + * @{ + */ +#define TIM_MASTERSLAVEMODE_ENABLE ((uint32_t)0x0080) +#define TIM_MASTERSLAVEMODE_DISABLE ((uint32_t)0x0000) +/** + * @} + */ + +/** @defgroup TIM_Trigger_Selection TIM Trigger Selection + * @{ + */ +#define TIM_TS_ITR0 ((uint32_t)0x0000) +#define TIM_TS_ITR1 ((uint32_t)0x0010) +#define TIM_TS_ITR2 ((uint32_t)0x0020) +#define TIM_TS_ITR3 ((uint32_t)0x0030) +#define TIM_TS_TI1F_ED ((uint32_t)0x0040) +#define TIM_TS_TI1FP1 ((uint32_t)0x0050) +#define TIM_TS_TI2FP2 ((uint32_t)0x0060) +#define TIM_TS_ETRF ((uint32_t)0x0070) +#define TIM_TS_NONE ((uint32_t)0xFFFF) +/** + * @} + */ + +/** @defgroup TIM_Trigger_Polarity TIM Trigger Polarity + * @{ + */ +#define TIM_TRIGGERPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx trigger sources */ +#define TIM_TRIGGERPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx trigger sources */ +#define TIM_TRIGGERPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +#define TIM_TRIGGERPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +#define TIM_TRIGGERPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +/** + * @} + */ + +/** @defgroup TIM_Trigger_Prescaler TIM Trigger Prescaler + * @{ + */ +#define TIM_TRIGGERPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_TRIGGERPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Trigger: Capture performed once every 2 events. */ +#define TIM_TRIGGERPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Trigger: Capture performed once every 4 events. */ +#define TIM_TRIGGERPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Trigger: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_TI1_Selection TIM TI1 Input Selection + * @{ + */ +#define TIM_TI1SELECTION_CH1 ((uint32_t)0x0000) +#define TIM_TI1SELECTION_XORCOMBINATION (TIM_CR2_TI1S) +/** + * @} + */ + +/** @defgroup TIM_DMA_Base_address TIM DMA Base Address + * @{ + */ +#define TIM_DMABASE_CR1 (0x00000000) +#define TIM_DMABASE_CR2 (0x00000001) +#define TIM_DMABASE_SMCR (0x00000002) +#define TIM_DMABASE_DIER (0x00000003) +#define TIM_DMABASE_SR (0x00000004) +#define TIM_DMABASE_EGR (0x00000005) +#define TIM_DMABASE_CCMR1 (0x00000006) +#define TIM_DMABASE_CCMR2 (0x00000007) +#define TIM_DMABASE_CCER (0x00000008) +#define TIM_DMABASE_CNT (0x00000009) +#define TIM_DMABASE_PSC (0x0000000A) +#define TIM_DMABASE_ARR (0x0000000B) +#define TIM_DMABASE_RCR (0x0000000C) +#define TIM_DMABASE_CCR1 (0x0000000D) +#define TIM_DMABASE_CCR2 (0x0000000E) +#define TIM_DMABASE_CCR3 (0x0000000F) +#define TIM_DMABASE_CCR4 (0x00000010) +#define TIM_DMABASE_BDTR (0x00000011) +#define TIM_DMABASE_DCR (0x00000012) +/** + * @} + */ + +/** @defgroup TIM_DMA_Burst_Length TIM DMA Burst Length + * @{ + */ +#define TIM_DMABURSTLENGTH_1TRANSFER (0x00000000) +#define TIM_DMABURSTLENGTH_2TRANSFERS (0x00000100) +#define TIM_DMABURSTLENGTH_3TRANSFERS (0x00000200) +#define TIM_DMABURSTLENGTH_4TRANSFERS (0x00000300) +#define TIM_DMABURSTLENGTH_5TRANSFERS (0x00000400) +#define TIM_DMABURSTLENGTH_6TRANSFERS (0x00000500) +#define TIM_DMABURSTLENGTH_7TRANSFERS (0x00000600) +#define TIM_DMABURSTLENGTH_8TRANSFERS (0x00000700) +#define TIM_DMABURSTLENGTH_9TRANSFERS (0x00000800) +#define TIM_DMABURSTLENGTH_10TRANSFERS (0x00000900) +#define TIM_DMABURSTLENGTH_11TRANSFERS (0x00000A00) +#define TIM_DMABURSTLENGTH_12TRANSFERS (0x00000B00) +#define TIM_DMABURSTLENGTH_13TRANSFERS (0x00000C00) +#define TIM_DMABURSTLENGTH_14TRANSFERS (0x00000D00) +#define TIM_DMABURSTLENGTH_15TRANSFERS (0x00000E00) +#define TIM_DMABURSTLENGTH_16TRANSFERS (0x00000F00) +#define TIM_DMABURSTLENGTH_17TRANSFERS (0x00001000) +#define TIM_DMABURSTLENGTH_18TRANSFERS (0x00001100) +/** + * @} + */ + +/** @defgroup TIM_DMA_Handle_index TIM DMA Handle Index + * @{ + */ +#define TIM_DMA_ID_UPDATE ((uint16_t) 0x0) /*!< Index of the DMA handle used for Update DMA requests */ +#define TIM_DMA_ID_CC1 ((uint16_t) 0x1) /*!< Index of the DMA handle used for Capture/Compare 1 DMA requests */ +#define TIM_DMA_ID_CC2 ((uint16_t) 0x2) /*!< Index of the DMA handle used for Capture/Compare 2 DMA requests */ +#define TIM_DMA_ID_CC3 ((uint16_t) 0x3) /*!< Index of the DMA handle used for Capture/Compare 3 DMA requests */ +#define TIM_DMA_ID_CC4 ((uint16_t) 0x4) /*!< Index of the DMA handle used for Capture/Compare 4 DMA requests */ +#define TIM_DMA_ID_COMMUTATION ((uint16_t) 0x5) /*!< Index of the DMA handle used for Commutation DMA requests */ +#define TIM_DMA_ID_TRIGGER ((uint16_t) 0x6) /*!< Index of the DMA handle used for Trigger DMA requests */ +/** + * @} + */ + +/** @defgroup TIM_Channel_CC_State TIM Capture/Compare Channel State + * @{ + */ +#define TIM_CCx_ENABLE ((uint32_t)0x0001) +#define TIM_CCx_DISABLE ((uint32_t)0x0000) +#define TIM_CCxN_ENABLE ((uint32_t)0x0004) +#define TIM_CCxN_DISABLE ((uint32_t)0x0000) +/** + * @} + */ + +/** + * @} + */ + +/* Private Constants -----------------------------------------------------------*/ +/** @defgroup TIM_Private_Constants TIM Private Constants + * @{ + */ + +/* The counter of a timer instance is disabled only if all the CCx and CCxN + channels have been disabled */ +#define TIM_CCER_CCxE_MASK ((uint32_t)(TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E)) +#define TIM_CCER_CCxNE_MASK ((uint32_t)(TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) + +/** + * @} + */ + +/* Private Macros -----------------------------------------------------------*/ +/** @defgroup TIM_Private_Macros TIM Private Macros + * @{ + */ + +#define IS_TIM_COUNTER_MODE(MODE) (((MODE) == TIM_COUNTERMODE_UP) || \ + ((MODE) == TIM_COUNTERMODE_DOWN) || \ + ((MODE) == TIM_COUNTERMODE_CENTERALIGNED1) || \ + ((MODE) == TIM_COUNTERMODE_CENTERALIGNED2) || \ + ((MODE) == TIM_COUNTERMODE_CENTERALIGNED3)) + +#define IS_TIM_CLOCKDIVISION_DIV(DIV) (((DIV) == TIM_CLOCKDIVISION_DIV1) || \ + ((DIV) == TIM_CLOCKDIVISION_DIV2) || \ + ((DIV) == TIM_CLOCKDIVISION_DIV4)) + +#define IS_TIM_PWM_MODE(MODE) (((MODE) == TIM_OCMODE_PWM1) || \ + ((MODE) == TIM_OCMODE_PWM2)) + +#define IS_TIM_OC_MODE(MODE) (((MODE) == TIM_OCMODE_TIMING) || \ + ((MODE) == TIM_OCMODE_ACTIVE) || \ + ((MODE) == TIM_OCMODE_INACTIVE) || \ + ((MODE) == TIM_OCMODE_TOGGLE) || \ + ((MODE) == TIM_OCMODE_FORCED_ACTIVE) || \ + ((MODE) == TIM_OCMODE_FORCED_INACTIVE)) + +#define IS_TIM_FAST_STATE(STATE) (((STATE) == TIM_OCFAST_DISABLE) || \ + ((STATE) == TIM_OCFAST_ENABLE)) + +#define IS_TIM_OC_POLARITY(POLARITY) (((POLARITY) == TIM_OCPOLARITY_HIGH) || \ + ((POLARITY) == TIM_OCPOLARITY_LOW)) + +#define IS_TIM_OCN_POLARITY(POLARITY) (((POLARITY) == TIM_OCNPOLARITY_HIGH) || \ + ((POLARITY) == TIM_OCNPOLARITY_LOW)) + +#define IS_TIM_OCIDLE_STATE(STATE) (((STATE) == TIM_OCIDLESTATE_SET) || \ + ((STATE) == TIM_OCIDLESTATE_RESET)) + +#define IS_TIM_OCNIDLE_STATE(STATE) (((STATE) == TIM_OCNIDLESTATE_SET) || \ + ((STATE) == TIM_OCNIDLESTATE_RESET)) + +#define IS_TIM_CHANNELS(CHANNEL) (((CHANNEL) == TIM_CHANNEL_1) || \ + ((CHANNEL) == TIM_CHANNEL_2) || \ + ((CHANNEL) == TIM_CHANNEL_3) || \ + ((CHANNEL) == TIM_CHANNEL_4) || \ + ((CHANNEL) == TIM_CHANNEL_ALL)) + +#define IS_TIM_OPM_CHANNELS(CHANNEL) (((CHANNEL) == TIM_CHANNEL_1) || \ + ((CHANNEL) == TIM_CHANNEL_2)) + +#define IS_TIM_COMPLEMENTARY_CHANNELS(CHANNEL) (((CHANNEL) == TIM_CHANNEL_1) || \ + ((CHANNEL) == TIM_CHANNEL_2) || \ + ((CHANNEL) == TIM_CHANNEL_3)) + +#define IS_TIM_IC_POLARITY(POLARITY) (((POLARITY) == TIM_ICPOLARITY_RISING) || \ + ((POLARITY) == TIM_ICPOLARITY_FALLING) || \ + ((POLARITY) == TIM_ICPOLARITY_BOTHEDGE)) + +#define IS_TIM_IC_SELECTION(SELECTION) (((SELECTION) == TIM_ICSELECTION_DIRECTTI) || \ + ((SELECTION) == TIM_ICSELECTION_INDIRECTTI) || \ + ((SELECTION) == TIM_ICSELECTION_TRC)) + +#define IS_TIM_IC_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ICPSC_DIV1) || \ + ((PRESCALER) == TIM_ICPSC_DIV2) || \ + ((PRESCALER) == TIM_ICPSC_DIV4) || \ + ((PRESCALER) == TIM_ICPSC_DIV8)) + +#define IS_TIM_OPM_MODE(MODE) (((MODE) == TIM_OPMODE_SINGLE) || \ + ((MODE) == TIM_OPMODE_REPETITIVE)) + +#define IS_TIM_ENCODER_MODE(MODE) (((MODE) == TIM_ENCODERMODE_TI1) || \ + ((MODE) == TIM_ENCODERMODE_TI2) || \ + ((MODE) == TIM_ENCODERMODE_TI12)) + +#define IS_TIM_DMA_SOURCE(SOURCE) ((((SOURCE) & 0xFFFF80FF) == 0x00000000) && ((SOURCE) != 0x00000000)) + +#define IS_TIM_EVENT_SOURCE(SOURCE) ((((SOURCE) & 0xFFFFFF00) == 0x00000000) && ((SOURCE) != 0x00000000)) + +#define IS_TIM_CLOCKSOURCE(CLOCK) (((CLOCK) == TIM_CLOCKSOURCE_INTERNAL) || \ + ((CLOCK) == TIM_CLOCKSOURCE_ETRMODE2) || \ + ((CLOCK) == TIM_CLOCKSOURCE_ITR0) || \ + ((CLOCK) == TIM_CLOCKSOURCE_ITR1) || \ + ((CLOCK) == TIM_CLOCKSOURCE_ITR2) || \ + ((CLOCK) == TIM_CLOCKSOURCE_ITR3) || \ + ((CLOCK) == TIM_CLOCKSOURCE_TI1ED) || \ + ((CLOCK) == TIM_CLOCKSOURCE_TI1) || \ + ((CLOCK) == TIM_CLOCKSOURCE_TI2) || \ + ((CLOCK) == TIM_CLOCKSOURCE_ETRMODE1)) + +#define IS_TIM_CLOCKPOLARITY(POLARITY) (((POLARITY) == TIM_CLOCKPOLARITY_INVERTED) || \ + ((POLARITY) == TIM_CLOCKPOLARITY_NONINVERTED) || \ + ((POLARITY) == TIM_CLOCKPOLARITY_RISING) || \ + ((POLARITY) == TIM_CLOCKPOLARITY_FALLING) || \ + ((POLARITY) == TIM_CLOCKPOLARITY_BOTHEDGE)) + +#define IS_TIM_CLOCKPRESCALER(PRESCALER) (((PRESCALER) == TIM_CLOCKPRESCALER_DIV1) || \ + ((PRESCALER) == TIM_CLOCKPRESCALER_DIV2) || \ + ((PRESCALER) == TIM_CLOCKPRESCALER_DIV4) || \ + ((PRESCALER) == TIM_CLOCKPRESCALER_DIV8)) + +#define IS_TIM_CLOCKFILTER(ICFILTER) ((ICFILTER) <= 0xF) + +#define IS_TIM_CLEARINPUT_SOURCE(SOURCE) (((SOURCE) == TIM_CLEARINPUTSOURCE_ETR) || \ + ((SOURCE) == TIM_CLEARINPUTSOURCE_OCREFCLR) || \ + ((SOURCE) == TIM_CLEARINPUTSOURCE_NONE)) + +#define IS_TIM_CLEARINPUT_POLARITY(POLARITY) (((POLARITY) == TIM_CLEARINPUTPOLARITY_INVERTED) || \ + ((POLARITY) == TIM_CLEARINPUTPOLARITY_NONINVERTED)) + +#define IS_TIM_CLEARINPUT_PRESCALER(PRESCALER) (((PRESCALER) == TIM_CLEARINPUTPRESCALER_DIV1) || \ + ((PRESCALER) == TIM_CLEARINPUTPRESCALER_DIV2) || \ + ((PRESCALER) == TIM_CLEARINPUTPRESCALER_DIV4) || \ + ((PRESCALER) == TIM_CLEARINPUTPRESCALER_DIV8)) + +#define IS_TIM_CLEARINPUT_FILTER(ICFILTER) ((ICFILTER) <= 0xF) + +#define IS_TIM_OSSR_STATE(STATE) (((STATE) == TIM_OSSR_ENABLE) || \ + ((STATE) == TIM_OSSR_DISABLE)) + +#define IS_TIM_OSSI_STATE(STATE) (((STATE) == TIM_OSSI_ENABLE) || \ + ((STATE) == TIM_OSSI_DISABLE)) + +#define IS_TIM_LOCK_LEVEL(LEVEL) (((LEVEL) == TIM_LOCKLEVEL_OFF) || \ + ((LEVEL) == TIM_LOCKLEVEL_1) || \ + ((LEVEL) == TIM_LOCKLEVEL_2) || \ + ((LEVEL) == TIM_LOCKLEVEL_3)) + +#define IS_TIM_BREAK_STATE(STATE) (((STATE) == TIM_BREAK_ENABLE) || \ + ((STATE) == TIM_BREAK_DISABLE)) + +#define IS_TIM_BREAK_POLARITY(POLARITY) (((POLARITY) == TIM_BREAKPOLARITY_LOW) || \ + ((POLARITY) == TIM_BREAKPOLARITY_HIGH)) + +#define IS_TIM_AUTOMATIC_OUTPUT_STATE(STATE) (((STATE) == TIM_AUTOMATICOUTPUT_ENABLE) || \ + ((STATE) == TIM_AUTOMATICOUTPUT_DISABLE)) + +#define IS_TIM_TRGO_SOURCE(SOURCE) (((SOURCE) == TIM_TRGO_RESET) || \ + ((SOURCE) == TIM_TRGO_ENABLE) || \ + ((SOURCE) == TIM_TRGO_UPDATE) || \ + ((SOURCE) == TIM_TRGO_OC1) || \ + ((SOURCE) == TIM_TRGO_OC1REF) || \ + ((SOURCE) == TIM_TRGO_OC2REF) || \ + ((SOURCE) == TIM_TRGO_OC3REF) || \ + ((SOURCE) == TIM_TRGO_OC4REF)) + +#define IS_TIM_SLAVE_MODE(MODE) (((MODE) == TIM_SLAVEMODE_DISABLE) || \ + ((MODE) == TIM_SLAVEMODE_GATED) || \ + ((MODE) == TIM_SLAVEMODE_RESET) || \ + ((MODE) == TIM_SLAVEMODE_TRIGGER) || \ + ((MODE) == TIM_SLAVEMODE_EXTERNAL1)) + +#define IS_TIM_MSM_STATE(STATE) (((STATE) == TIM_MASTERSLAVEMODE_ENABLE) || \ + ((STATE) == TIM_MASTERSLAVEMODE_DISABLE)) + +#define IS_TIM_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \ + ((SELECTION) == TIM_TS_ITR1) || \ + ((SELECTION) == TIM_TS_ITR2) || \ + ((SELECTION) == TIM_TS_ITR3) || \ + ((SELECTION) == TIM_TS_TI1F_ED) || \ + ((SELECTION) == TIM_TS_TI1FP1) || \ + ((SELECTION) == TIM_TS_TI2FP2) || \ + ((SELECTION) == TIM_TS_ETRF)) + +#define IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \ + ((SELECTION) == TIM_TS_ITR1) || \ + ((SELECTION) == TIM_TS_ITR2) || \ + ((SELECTION) == TIM_TS_ITR3) || \ + ((SELECTION) == TIM_TS_NONE)) + +#define IS_TIM_TRIGGERPOLARITY(POLARITY) (((POLARITY) == TIM_TRIGGERPOLARITY_INVERTED ) || \ + ((POLARITY) == TIM_TRIGGERPOLARITY_NONINVERTED) || \ + ((POLARITY) == TIM_TRIGGERPOLARITY_RISING ) || \ + ((POLARITY) == TIM_TRIGGERPOLARITY_FALLING ) || \ + ((POLARITY) == TIM_TRIGGERPOLARITY_BOTHEDGE )) + +#define IS_TIM_TRIGGERPRESCALER(PRESCALER) (((PRESCALER) == TIM_TRIGGERPRESCALER_DIV1) || \ + ((PRESCALER) == TIM_TRIGGERPRESCALER_DIV2) || \ + ((PRESCALER) == TIM_TRIGGERPRESCALER_DIV4) || \ + ((PRESCALER) == TIM_TRIGGERPRESCALER_DIV8)) + +#define IS_TIM_TRIGGERFILTER(ICFILTER) ((ICFILTER) <= 0xF) + +#define IS_TIM_TI1SELECTION(TI1SELECTION) (((TI1SELECTION) == TIM_TI1SELECTION_CH1) || \ + ((TI1SELECTION) == TIM_TI1SELECTION_XORCOMBINATION)) + +#define IS_TIM_DMA_BASE(BASE) (((BASE) == TIM_DMABASE_CR1) || \ + ((BASE) == TIM_DMABASE_CR2) || \ + ((BASE) == TIM_DMABASE_SMCR) || \ + ((BASE) == TIM_DMABASE_DIER) || \ + ((BASE) == TIM_DMABASE_SR) || \ + ((BASE) == TIM_DMABASE_EGR) || \ + ((BASE) == TIM_DMABASE_CCMR1) || \ + ((BASE) == TIM_DMABASE_CCMR2) || \ + ((BASE) == TIM_DMABASE_CCER) || \ + ((BASE) == TIM_DMABASE_CNT) || \ + ((BASE) == TIM_DMABASE_PSC) || \ + ((BASE) == TIM_DMABASE_ARR) || \ + ((BASE) == TIM_DMABASE_RCR) || \ + ((BASE) == TIM_DMABASE_CCR1) || \ + ((BASE) == TIM_DMABASE_CCR2) || \ + ((BASE) == TIM_DMABASE_CCR3) || \ + ((BASE) == TIM_DMABASE_CCR4) || \ + ((BASE) == TIM_DMABASE_BDTR) || \ + ((BASE) == TIM_DMABASE_DCR)) + +#define IS_TIM_DMA_LENGTH(LENGTH) (((LENGTH) == TIM_DMABURSTLENGTH_1TRANSFER) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_2TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_3TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_4TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_5TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_6TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_7TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_8TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_9TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_10TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_11TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_12TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_13TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_14TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_15TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_16TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_17TRANSFERS) || \ + ((LENGTH) == TIM_DMABURSTLENGTH_18TRANSFERS)) + +#define IS_TIM_IC_FILTER(ICFILTER) ((ICFILTER) <= 0xF) + +/** @brief Set TIM IC prescaler + * @param __HANDLE__: TIM handle + * @param __CHANNEL__: specifies TIM Channel + * @param __ICPSC__: specifies the prescaler value. + * @retval None + */ +#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \ +(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\ + ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8))) + +/** @brief Reset TIM IC prescaler + * @param __HANDLE__: TIM handle + * @param __CHANNEL__: specifies TIM Channel + * @retval None + */ +#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \ +(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\ + ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC)) + + +/** @brief Set TIM IC polarity + * @param __HANDLE__: TIM handle + * @param __CHANNEL__: specifies TIM Channel + * @param __POLARITY__: specifies TIM Channel Polarity + * @retval None + */ +#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ +(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8)) :\ + ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12) & TIM_CCER_CC4P))) + +/** @brief Reset TIM IC polarity + * @param __HANDLE__: TIM handle + * @param __CHANNEL__: specifies TIM Channel + * @retval None + */ +#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \ +(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\ + ((__HANDLE__)->Instance->CCER &= (uint16_t)~TIM_CCER_CC4P)) + +/** + * @} + */ + +/* Private Functions --------------------------------------------------------*/ +/** @addtogroup TIM_Private_Functions + * @{ + */ +void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure); +void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter); +void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma); +void TIM_DMAError(DMA_HandleTypeDef *hdma); +void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma); +void TIM_CCxChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelState); +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup TIM_Exported_Macros TIM Exported Macros + * @{ + */ + +/** @brief Reset TIM handle state + * @param __HANDLE__: TIM handle. + * @retval None + */ +#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_TIM_STATE_RESET) + +/** + * @brief Enable the TIM peripheral. + * @param __HANDLE__: TIM handle + * @retval None + */ +#define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN)) + +/** + * @brief Enable the TIM main Output. + * @param __HANDLE__: TIM handle + * @retval None + */ +#define __HAL_TIM_MOE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->BDTR|=(TIM_BDTR_MOE)) + +/** + * @brief Disable the TIM peripheral. + * @param __HANDLE__: TIM handle + * @retval None + */ +#define __HAL_TIM_DISABLE(__HANDLE__) \ + do { \ + if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0) \ + { \ + if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0) \ + { \ + (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \ + } \ + } \ + } while(0) +/* The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN + channels have been disabled */ +/** + * @brief Disable the TIM main Output. + * @param __HANDLE__: TIM handle + * @retval None + * @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled + */ +#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \ + do { \ + if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0) \ + { \ + if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0) \ + { \ + (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \ + } \ + } \ + } while(0) + +/** + * @brief Enables the specified TIM interrupt. + * @param __HANDLE__: specifies the TIM Handle. + * @param __INTERRUPT__: specifies the TIM interrupt source to enable. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__)) + +/** + * @brief Disables the specified TIM interrupt. + * @param __HANDLE__: specifies the TIM Handle. + * @param __INTERRUPT__: specifies the TIM interrupt source to disable. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__)) + +/** + * @brief Enables the specified DMA request. + * @param __HANDLE__: specifies the TIM Handle. + * @param __DMA__: specifies the TIM DMA request to enable. + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: Update DMA request + * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request + * @arg TIM_DMA_CC2: Capture/Compare 2 DMA request + * @arg TIM_DMA_CC3: Capture/Compare 3 DMA request + * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request + * @arg TIM_DMA_COM: Commutation DMA request + * @arg TIM_DMA_TRIGGER: Trigger DMA request + * @retval None + */ +#define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER |= (__DMA__)) + +/** + * @brief Disables the specified DMA request. + * @param __HANDLE__: specifies the TIM Handle. + * @param __DMA__: specifies the TIM DMA request to disable. + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: Update DMA request + * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request + * @arg TIM_DMA_CC2: Capture/Compare 2 DMA request + * @arg TIM_DMA_CC3: Capture/Compare 3 DMA request + * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request + * @arg TIM_DMA_COM: Commutation DMA request + * @arg TIM_DMA_TRIGGER: Trigger DMA request + * @retval None + */ +#define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER &= ~(__DMA__)) + +/** + * @brief Checks whether the specified TIM interrupt flag is set or not. + * @param __HANDLE__: specifies the TIM Handle. + * @param __FLAG__: specifies the TIM interrupt flag to check. + * This parameter can be one of the following values: + * @arg TIM_FLAG_UPDATE: Update interrupt flag + * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag + * @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag + * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag + * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag + * @arg TIM_FLAG_COM: Commutation interrupt flag + * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag + * @arg TIM_FLAG_BREAK: Break interrupt flag + * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag + * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag + * @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag + * @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR &(__FLAG__)) == (__FLAG__)) + +/** + * @brief Clears the specified TIM interrupt flag. + * @param __HANDLE__: specifies the TIM Handle. + * @param __FLAG__: specifies the TIM interrupt flag to clear. + * This parameter can be one of the following values: + * @arg TIM_FLAG_UPDATE: Update interrupt flag + * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag + * @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag + * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag + * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag + * @arg TIM_FLAG_COM: Commutation interrupt flag + * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag + * @arg TIM_FLAG_BREAK: Break interrupt flag + * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag + * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag + * @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag + * @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) + +/** + * @brief Checks whether the specified TIM interrupt has occurred or not. + * @param __HANDLE__: TIM handle + * @param __INTERRUPT__: specifies the TIM interrupt source to check. + * @retval The state of TIM_IT (SET or RESET). + */ +#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) + +/** + * @brief Clear the TIM interrupt pending bits + * @param __HANDLE__: TIM handle + * @param __INTERRUPT__: specifies the interrupt pending bit to clear. + * @retval None + */ +#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__)) + +/** + * @brief Indicates whether or not the TIM Counter is used as downcounter + * @param __HANDLE__: TIM handle. + * @retval False (Counter used as upcounter) or True (Counter used as downcounter) + * @note This macro is particularly usefull to get the counting mode when the timer operates in Center-aligned mode or Encoder +mode. + */ +#define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__) (((__HANDLE__)->Instance->CR1 & (TIM_CR1_DIR)) == (TIM_CR1_DIR)) + +/** + * @brief Sets the TIM active prescaler register value on update event. + * @param __HANDLE__: TIM handle. + * @param __PRESC__: specifies the active prescaler register new value. + * @retval None + */ +#define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__) ((__HANDLE__)->Instance->PSC = (__PRESC__)) + +/** + * @brief Sets the TIM Capture Compare Register value on runtime without + * calling another time ConfigChannel function. + * @param __HANDLE__: TIM handle. + * @param __CHANNEL__ : TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __COMPARE__: specifies the Capture Compare register new value. + * @retval None + */ +#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \ +(*(__IO uint32_t *)(&((__HANDLE__)->Instance->CCR1) + ((__CHANNEL__) >> 2)) = (__COMPARE__)) + +/** + * @brief Gets the TIM Capture Compare Register value on runtime + * @param __HANDLE__: TIM handle. + * @param __CHANNEL__ : TIM Channel associated with the capture compare register + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: get capture/compare 1 register value + * @arg TIM_CHANNEL_2: get capture/compare 2 register value + * @arg TIM_CHANNEL_3: get capture/compare 3 register value + * @arg TIM_CHANNEL_4: get capture/compare 4 register value + * @retval None + */ +#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \ + (*(__IO uint32_t *)(&((__HANDLE__)->Instance->CCR1) + ((__CHANNEL__) >> 2))) + +/** + * @brief Sets the TIM Counter Register value on runtime. + * @param __HANDLE__: TIM handle. + * @param __COUNTER__: specifies the Counter register new value. + * @retval None + */ +#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->CNT = (__COUNTER__)) + +/** + * @brief Gets the TIM Counter Register value on runtime. + * @param __HANDLE__: TIM handle. + * @retval None + */ +#define __HAL_TIM_GET_COUNTER(__HANDLE__) \ + ((__HANDLE__)->Instance->CNT) + +/** + * @brief Sets the TIM Autoreload Register value on runtime without calling + * another time any Init function. + * @param __HANDLE__: TIM handle. + * @param __AUTORELOAD__: specifies the Counter register new value. + * @retval None + */ +#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \ + do{ \ + (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \ + (__HANDLE__)->Init.Period = (__AUTORELOAD__); \ + } while(0) + +/** + * @brief Gets the TIM Autoreload Register value on runtime + * @param __HANDLE__: TIM handle. + * @retval None + */ +#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \ + ((__HANDLE__)->Instance->ARR) + +/** + * @brief Sets the TIM Clock Division value on runtime without calling + * another time any Init function. + * @param __HANDLE__: TIM handle. + * @param __CKD__: specifies the clock division value. + * This parameter can be one of the following value: + * @arg TIM_CLOCKDIVISION_DIV1 + * @arg TIM_CLOCKDIVISION_DIV2 + * @arg TIM_CLOCKDIVISION_DIV4 + * @retval None + */ +#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \ + do{ \ + (__HANDLE__)->Instance->CR1 &= (uint16_t)(~TIM_CR1_CKD); \ + (__HANDLE__)->Instance->CR1 |= (__CKD__); \ + (__HANDLE__)->Init.ClockDivision = (__CKD__); \ + } while(0) + +/** + * @brief Gets the TIM Clock Division value on runtime + * @param __HANDLE__: TIM handle. + * @retval None + */ +#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) \ + ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD) + +/** + * @brief Sets the TIM Input Capture prescaler on runtime without calling + * another time HAL_TIM_IC_ConfigChannel() function. + * @param __HANDLE__: TIM handle. + * @param __CHANNEL__ : TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __ICPSC__: specifies the Input Capture4 prescaler new value. + * This parameter can be one of the following values: + * @arg TIM_ICPSC_DIV1: no prescaler + * @arg TIM_ICPSC_DIV2: capture is done once every 2 events + * @arg TIM_ICPSC_DIV4: capture is done once every 4 events + * @arg TIM_ICPSC_DIV8: capture is done once every 8 events + * @retval None + */ +#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \ + do{ \ + TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \ + TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \ + } while(0) + +/** + * @brief Gets the TIM Input Capture prescaler on runtime + * @param __HANDLE__: TIM handle. + * @param __CHANNEL__: TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: get input capture 1 prescaler value + * @arg TIM_CHANNEL_2: get input capture 2 prescaler value + * @arg TIM_CHANNEL_3: get input capture 3 prescaler value + * @arg TIM_CHANNEL_4: get input capture 4 prescaler value + * @retval None + */ +#define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC2PSC) >> 8) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC3PSC) :\ + (((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC4PSC)) >> 8) + +/** + * @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register + * @param __HANDLE__: TIM handle. + * @note When the USR bit of the TIMx_CR1 register is set, only counter + * overflow/underflow generates an update interrupt or DMA request (if + * enabled) + * @retval None + */ +#define __HAL_TIM_URS_ENABLE(__HANDLE__) \ + ((__HANDLE__)->Instance->CR1|= (TIM_CR1_URS)) + +/** + * @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register + * @param __HANDLE__: TIM handle. + * @note When the USR bit of the TIMx_CR1 register is reset, any of the + * following events generate an update interrupt or DMA request (if + * enabled): + * (+) Counter overflow/underflow + * (+) Setting the UG bit + * (+) Update generation through the slave mode controller + * @retval None + */ +#define __HAL_TIM_URS_DISABLE(__HANDLE__) \ + ((__HANDLE__)->Instance->CR1&=~(TIM_CR1_URS)) + +/** + * @brief Sets the TIM Capture x input polarity on runtime. + * @param __HANDLE__: TIM handle. + * @param __CHANNEL__: TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __POLARITY__: Polarity for TIx source + * @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge + * @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge + * @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge + * @note The polarity TIM_INPUTCHANNELPOLARITY_BOTHEDGE is not authorized for TIM Channel 4. + * @retval None + */ +#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ + do{ \ + TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \ + TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \ + }while(0) + +/** + * @} + */ + +/* Include TIM HAL Extension module */ +#include "stm32f1xx_hal_tim_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup TIM_Exported_Functions + * @{ + */ + +/** @addtogroup TIM_Exported_Functions_Group1 + * @{ + */ +/* Time Base functions ********************************************************/ +HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group2 + * @{ + */ +/* Timer Output Compare functions **********************************************/ +HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); + +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group3 + * @{ + */ +/* Timer PWM functions *********************************************************/ +HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group4 + * @{ + */ +/* Timer Input Capture functions ***********************************************/ +HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group5 + * @{ + */ +/* Timer One Pulse functions ***************************************************/ +HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode); +HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group6 + * @{ + */ +/* Timer Encoder functions *****************************************************/ +HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef* sConfig); +HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim); + /* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); + +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group7 + * @{ + */ +/* Interrupt Handler functions **********************************************/ +void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group8 + * @{ + */ +/* Control functions *********************************************************/ +HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef* sConfig, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef* sConfig, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef* sConfig, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef* sConfig, uint32_t OutputChannel, uint32_t InputChannel); +HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef * sClearInputConfig, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef * sClockSourceConfig); +HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection); +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef * sSlaveConfig); +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef * sSlaveConfig); +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \ + uint32_t *BurstBuffer, uint32_t BurstLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc); +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \ + uint32_t *BurstBuffer, uint32_t BurstLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc); +HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource); +uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel); + +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group9 + * @{ + */ +/* Callback in non blocking modes (Interrupt and DMA) *************************/ +void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group10 + * @{ + */ +/* Peripheral State functions **************************************************/ +HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_TIM_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,312 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_tim_ex.h + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Header file of TIM HAL Extension module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_TIM_EX_H +#define __STM32F1xx_HAL_TIM_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal_def.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @addtogroup TIMEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Types TIMEx Exported Types + * @{ + */ + + +/** + * @brief TIM Hall sensor Configuration Structure definition + */ + +typedef struct +{ + + uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC1Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ +} TIM_HallSensor_InitTypeDef; + + +#if defined (STM32F100xB) || defined (STM32F100xE) || \ + defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ + defined (STM32F105xC) || defined (STM32F107xC) + +/** + * @brief TIM Break and Dead time configuration Structure definition + */ +typedef struct +{ + uint32_t OffStateRunMode; /*!< TIM off state in run mode + This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */ + uint32_t OffStateIDLEMode; /*!< TIM off state in IDLE mode + This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */ + uint32_t LockLevel; /*!< TIM Lock level + This parameter can be a value of @ref TIM_Lock_level */ + uint32_t DeadTime; /*!< TIM dead Time + This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF */ + uint32_t BreakState; /*!< TIM Break State + This parameter can be a value of @ref TIM_Break_Input_enable_disable */ + uint32_t BreakPolarity; /*!< TIM Break input polarity + This parameter can be a value of @ref TIM_Break_Polarity */ + uint32_t AutomaticOutput; /*!< TIM Automatic Output Enable state + This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */ +} TIM_BreakDeadTimeConfigTypeDef; + +#endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ + /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ + /* defined(STM32F105xC) || defined(STM32F107xC) */ + +/** + * @brief TIM Master configuration Structure definition + */ +typedef struct { + uint32_t MasterOutputTrigger; /*!< Trigger output (TRGO) selection + This parameter can be a value of @ref TIM_Master_Mode_Selection */ + uint32_t MasterSlaveMode; /*!< Master/slave mode selection + This parameter can be a value of @ref TIM_Master_Slave_Mode */ +}TIM_MasterConfigTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +#if defined (STM32F100xB) || defined (STM32F100xE) || \ + defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ + defined (STM32F105xC) || defined (STM32F107xC) +/** @defgroup TIMEx_Exported_Constants TIMEx Exported Constants + * @{ + */ + +/** @defgroup TIMEx_Clock_Filter TIMEx Clock Filter + * @{ + */ +#define IS_TIM_DEADTIME(DEADTIME) ((DEADTIME) <= 0xFF) /*!< BreakDead Time */ +/** + * @} + */ + +/** + * @} + */ +#endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ + /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ + /* defined(STM32F105xC) || defined(STM32F107xC) */ + +/* Exported macro ------------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup TIMEx_Exported_Functions + * @{ + */ + +/** @addtogroup TIMEx_Exported_Functions_Group1 + * @{ + */ +/* Timer Hall Sensor functions **********************************************/ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef* sConfig); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim); + +void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim); + + /* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim); +/** + * @} + */ + +#if defined (STM32F100xB) || defined (STM32F100xE) || \ + defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ + defined (STM32F105xC) || defined (STM32F107xC) + +/** @addtogroup TIMEx_Exported_Functions_Group2 + * @{ + */ +/* Timer Complementary Output Compare functions *****************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group3 + * @{ + */ +/* Timer Complementary PWM functions ****************************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group4 + * @{ + */ +/* Timer Complementary One Pulse functions **********************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/** + * @} + */ +#endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ + /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ + /* defined(STM32F105xC) || defined(STM32F107xC) */ + +/** @addtogroup TIMEx_Exported_Functions_Group5 + * @{ + */ +/* Extended Control functions ************************************************/ +#if defined (STM32F100xB) || defined (STM32F100xE) || \ + defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ + defined (STM32F105xC) || defined (STM32F107xC) +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig); +#endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ + /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ + /* defined(STM32F105xC) || defined(STM32F107xC) */ +HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef * sMasterConfig); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group6 + * @{ + */ +/* Extension Callback *********************************************************/ +void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef *htim); +void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim); +/** + * @} + */ + +#if defined (STM32F100xB) || defined (STM32F100xE) || \ + defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ + defined (STM32F105xC) || defined (STM32F107xC) +/** @addtogroup TIMEx_Exported_Functions_Group7 + * @{ + */ +/* Extension Peripheral State functions **************************************/ +HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim); +/** + * @} + */ +#endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ + /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ + /* defined(STM32F105xC) || defined(STM32F107xC) */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private functions----------------------------------------------------------*/ +/** @defgroup TIMEx_Private_Functions TIMEx Private Functions +* @{ +*/ +void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma); +/** +* @} +*/ +/* End of private functions --------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F1xx_HAL_TIM_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,526 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief HAL module driver. + * This is the common part of the HAL initialization + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The common HAL driver contains a set of generic and common APIs that can be + used by the PPP peripheral drivers and the user to start using the HAL. + [..] + The HAL contains two APIs' categories: + (+) Common HAL APIs + (+) Services HAL APIs + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup HAL HAL + * @brief HAL module driver. + * @{ + */ + +#ifdef HAL_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/** @defgroup HAL_Private_Constants HAL Private Constants + * @{ + */ + +/** + * @brief STM32F1xx HAL Driver version number + */ +#define __STM32F1xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ +#define __STM32F1xx_HAL_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ +#define __STM32F1xx_HAL_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */ +#define __STM32F1xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ +#define __STM32F1xx_HAL_VERSION ((__STM32F1xx_HAL_VERSION_MAIN << 24)\ + |(__STM32F1xx_HAL_VERSION_SUB1 << 16)\ + |(__STM32F1xx_HAL_VERSION_SUB2 << 8 )\ + |(__STM32F1xx_HAL_VERSION_RC)) + +#define IDCODE_DEVID_MASK ((uint32_t)0x00000FFF) + +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/** @defgroup HAL_Private_Variables HAL Private Variables + * @{ + */ + +static __IO uint32_t uwTick; + +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup HAL_Exported_Functions HAL Exported Functions + * @{ + */ + +/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Initializes the Flash interface, the NVIC allocation and initial clock + configuration. It initializes the source of time base also when timeout + is needed and the backup domain when enabled. + (+) de-Initializes common part of the HAL. + (+) Configure The time base source to have 1ms time base with a dedicated + Tick interrupt priority. + (++) Systick timer is used by default as source of time base, but user + can eventually implement his proper time base source (a general purpose + timer for example or other time source), keeping in mind that Time base + duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and + handled in milliseconds basis. + (++) Time base configuration function (HAL_InitTick ()) is called automatically + at the beginning of the program after reset by HAL_Init() or at any time + when clock is configured, by HAL_RCC_ClockConfig(). + (++) Source of time base is configured to generate interrupts at regular + time intervals. Care must be taken if HAL_Delay() is called from a + peripheral ISR process, the Tick interrupt line must have higher priority + (numerically lower) than the peripheral interrupt. Otherwise the caller + ISR process will be blocked. + (++) functions affecting time base configurations are declared as __Weak + to make override possible in case of other implementations in user file. + +@endverbatim + * @{ + */ + +/** + * @brief This function configures the Flash prefetch, + * Configures time base source, NVIC and Low level hardware + * @note This function is called at the beginning of program after reset and before + * the clock configuration + * @note The time base configuration is based on MSI clock when exiting from Reset. + * Once done, time base tick start incrementing. + * In the default implementation,Systick is used as source of time base. + * The tick variable is incremented each 1ms in its ISR. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_Init(void) +{ + /* Configure Flash prefetch */ +#if (PREFETCH_ENABLE != 0) +#if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || \ + defined(STM32F102x6) || defined(STM32F102xB) || \ + defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || \ + defined(STM32F105xC) || defined(STM32F107xC) + + /* Prefetch buffer is not available on value line devices */ + __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); +#endif +#endif /* PREFETCH_ENABLE */ + + /* Set Interrupt Group Priority */ + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); + + /* Use systick as time base source and configure 1ms tick (default clock after Reset is MSI) */ + HAL_InitTick(TICK_INT_PRIORITY); + + /* Init the low level hardware */ + HAL_MspInit(); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief This function de-Initializes common part of the HAL and stops the source + * of time base. + * @note This function is optional. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DeInit(void) +{ + /* Reset of all peripherals */ + __HAL_RCC_APB1_FORCE_RESET(); + __HAL_RCC_APB1_RELEASE_RESET(); + + __HAL_RCC_APB2_FORCE_RESET(); + __HAL_RCC_APB2_RELEASE_RESET(); + +#if defined(STM32F105xC) || defined(STM32F107xC) + __HAL_RCC_AHB_FORCE_RESET(); + __HAL_RCC_AHB_RELEASE_RESET(); +#endif + + /* De-Init the low level hardware */ + HAL_MspDeInit(); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Initializes the MSP. + * @retval None + */ +__weak void HAL_MspInit(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes the MSP. + * @retval None + */ +__weak void HAL_MspDeInit(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief This function configures the source of the time base. + * The time source is configured to have 1ms time base with a dedicated + * Tick interrupt priority. + * @note This function is called automatically at the beginning of program after + * reset by HAL_Init() or at any time when clock is reconfigured by HAL_RCC_ClockConfig(). + * @note In the default implementation, SysTick timer is the source of time base. + * It is used to generate interrupts at regular time intervals. + * Care must be taken if HAL_Delay() is called from a peripheral ISR process, + * The the SysTick interrupt must have higher priority (numerically lower) + * than the peripheral interrupt. Otherwise the caller ISR process will be blocked. + * The function is declared as __Weak to be overwritten in case of other + * implementation in user file. + * @param TickPriority: Tick interrupt priority. + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) +{ + /*Configure the SysTick to have interrupt in 1ms time basis*/ + HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); + + /*Configure the SysTick IRQ priority */ + HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority ,0); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions + * @brief HAL Control functions + * +@verbatim + =============================================================================== + ##### HAL Control functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Provide a tick value in millisecond + (+) Provide a blocking delay in millisecond + (+) Suspend the time base source interrupt + (+) Resume the time base source interrupt + (+) Get the HAL API driver version + (+) Get the device identifier + (+) Get the device revision identifier + (+) Enable/Disable Debug module during Sleep mode + (+) Enable/Disable Debug module during STOP mode + (+) Enable/Disable Debug module during STANDBY mode + +@endverbatim + * @{ + */ + +/** + * @brief This function is called to increment a global variable "uwTick" + * used as application time base. + * @note In the default implementation, this variable is incremented each 1ms + * in Systick ISR. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_IncTick(void) +{ + uwTick++; +} + +/** + * @brief Provides a tick value in millisecond. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval tick value + */ +__weak uint32_t HAL_GetTick(void) +{ + return uwTick; +} + +/** + * @brief This function provides accurate delay (in milliseconds) based + * on variable incremented. + * @note In the default implementation , SysTick timer is the source of time base. + * It is used to generate interrupts at regular time intervals where uwTick + * is incremented. + * @note ThiS function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @param Delay: specifies the delay time length, in milliseconds. + * @retval None + */ +__weak void HAL_Delay(__IO uint32_t Delay) +{ + uint32_t tickstart = 0; + tickstart = HAL_GetTick(); + while((HAL_GetTick() - tickstart) < Delay) + { + } +} + +/** + * @brief Suspend Tick increment. + * @note In the default implementation , SysTick timer is the source of time base. It is + * used to generate interrupts at regular time intervals. Once HAL_SuspendTick() + * is called, the the SysTick interrupt will be disabled and so Tick increment + * is suspended. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_SuspendTick(void) +{ + /* Disable SysTick Interrupt */ + CLEAR_BIT(SysTick->CTRL,SysTick_CTRL_TICKINT_Msk); +} + +/** + * @brief Resume Tick increment. + * @note In the default implementation , SysTick timer is the source of time base. It is + * used to generate interrupts at regular time intervals. Once HAL_ResumeTick() + * is called, the the SysTick interrupt will be enabled and so Tick increment + * is resumed. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_ResumeTick(void) +{ + /* Enable SysTick Interrupt */ + SET_BIT(SysTick->CTRL,SysTick_CTRL_TICKINT_Msk); +} + +/** + * @brief This method returns the HAL revision + * @retval version: 0xXYZR (8bits for each decimal, R for RC) + */ +uint32_t HAL_GetHalVersion(void) +{ + return __STM32F1xx_HAL_VERSION; +} + +/** + * @brief Returns the device revision identifier. + * Note: On devices STM32F10xx8 and STM32F10xxB, + * STM32F101xC/D/E and STM32F103xC/D/E, + * STM32F101xF/G and STM32F103xF/G + * STM32F10xx4 and STM32F10xx6 + * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in + * debug mode (not accessible by the user software in normal mode). + * Refer to errata sheet of these devices for more details. + * @retval Device revision identifier + */ +uint32_t HAL_GetREVID(void) +{ + return((DBGMCU->IDCODE) >> POSITION_VAL(DBGMCU_IDCODE_REV_ID)); +} + +/** + * @brief Returns the device identifier. + * Note: On devices STM32F10xx8 and STM32F10xxB, + * STM32F101xC/D/E and STM32F103xC/D/E, + * STM32F101xF/G and STM32F103xF/G + * STM32F10xx4 and STM32F10xx6 + * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in + * debug mode (not accessible by the user software in normal mode). + * Refer to errata sheet of these devices for more details. + * @retval Device identifier + */ +uint32_t HAL_GetDEVID(void) +{ + return((DBGMCU->IDCODE) & IDCODE_DEVID_MASK); +} + +/** + * @brief Enable the Debug Module during SLEEP mode + * @retval None + */ +void HAL_DBGMCU_EnableDBGSleepMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Disable the Debug Module during SLEEP mode + * Note: On devices STM32F10xx8 and STM32F10xxB, + * STM32F101xC/D/E and STM32F103xC/D/E, + * STM32F101xF/G and STM32F103xF/G + * STM32F10xx4 and STM32F10xx6 + * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in + * debug mode (not accessible by the user software in normal mode). + * Refer to errata sheet of these devices for more details. + * @retval None + */ +void HAL_DBGMCU_DisableDBGSleepMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Enable the Debug Module during STOP mode + * Note: On devices STM32F10xx8 and STM32F10xxB, + * STM32F101xC/D/E and STM32F103xC/D/E, + * STM32F101xF/G and STM32F103xF/G + * STM32F10xx4 and STM32F10xx6 + * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in + * debug mode (not accessible by the user software in normal mode). + * Refer to errata sheet of these devices for more details. + * Note: On all STM32F1 devices: + * If the system tick timer interrupt is enabled during the Stop mode + * debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup + * the system from Stop mode. + * Workaround: To debug the Stop mode, disable the system tick timer + * interrupt. + * Refer to errata sheet of these devices for more details. + * Note: On all STM32F1 devices: + * If the system tick timer interrupt is enabled during the Stop mode + * debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup + * the system from Stop mode. + * Workaround: To debug the Stop mode, disable the system tick timer + * interrupt. + * Refer to errata sheet of these devices for more details. + * @retval None + */ +void HAL_DBGMCU_EnableDBGStopMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Disable the Debug Module during STOP mode + * Note: On devices STM32F10xx8 and STM32F10xxB, + * STM32F101xC/D/E and STM32F103xC/D/E, + * STM32F101xF/G and STM32F103xF/G + * STM32F10xx4 and STM32F10xx6 + * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in + * debug mode (not accessible by the user software in normal mode). + * Refer to errata sheet of these devices for more details. + * @retval None + */ +void HAL_DBGMCU_DisableDBGStopMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Enable the Debug Module during STANDBY mode + * Note: On devices STM32F10xx8 and STM32F10xxB, + * STM32F101xC/D/E and STM32F103xC/D/E, + * STM32F101xF/G and STM32F103xF/G + * STM32F10xx4 and STM32F10xx6 + * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in + * debug mode (not accessible by the user software in normal mode). + * Refer to errata sheet of these devices for more details. + * @retval None + */ +void HAL_DBGMCU_EnableDBGStandbyMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @brief Disable the Debug Module during STANDBY mode + * Note: On devices STM32F10xx8 and STM32F10xxB, + * STM32F101xC/D/E and STM32F103xC/D/E, + * STM32F101xF/G and STM32F103xF/G + * STM32F10xx4 and STM32F10xx6 + * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in + * debug mode (not accessible by the user software in normal mode). + * Refer to errata sheet of these devices for more details. + * @retval None + */ +void HAL_DBGMCU_DisableDBGStandbyMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,494 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_cortex.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief CORTEX HAL module driver. + * + * This file provides firmware functions to manage the following + * functionalities of the CORTEX: + * + Initialization and de-initialization functions + * + Peripheral Control functions + * + * @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + + [..] + *** How to configure Interrupts using Cortex HAL driver *** + =========================================================== + [..] + This section provide functions allowing to configure the NVIC interrupts (IRQ). + The Cortex-M3 exceptions are managed by CMSIS functions. + + (#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping() + function according to the following table. + + The table below gives the allowed values of the pre-emption priority and subpriority according + to the Priority Grouping configuration performed by HAL_NVIC_SetPriorityGrouping() function. + ========================================================================================================================== + NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority | Description + ========================================================================================================================== + NVIC_PRIORITYGROUP_0 | 0 | 0-15 | 0 bits for pre-emption priority + | | | 4 bits for subpriority + -------------------------------------------------------------------------------------------------------------------------- + NVIC_PRIORITYGROUP_1 | 0-1 | 0-7 | 1 bits for pre-emption priority + | | | 3 bits for subpriority + -------------------------------------------------------------------------------------------------------------------------- + NVIC_PRIORITYGROUP_2 | 0-3 | 0-3 | 2 bits for pre-emption priority + | | | 2 bits for subpriority + -------------------------------------------------------------------------------------------------------------------------- + NVIC_PRIORITYGROUP_3 | 0-7 | 0-1 | 3 bits for pre-emption priority + | | | 1 bits for subpriority + -------------------------------------------------------------------------------------------------------------------------- + NVIC_PRIORITYGROUP_4 | 0-15 | 0 | 4 bits for pre-emption priority + | | | 0 bits for subpriority + ========================================================================================================================== + (#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority() + + (#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ() + + + -@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ pre-emption is no more possible. + The pending IRQ priority will be managed only by the sub priority. + + -@- IRQ priority order (sorted by highest to lowest priority): + (+@) Lowest pre-emption priority + (+@) Lowest sub priority + (+@) Lowest hardware priority (IRQ number) + + [..] + *** How to configure Systick using Cortex HAL driver *** + ======================================================== + [..] + Setup SysTick Timer for 1 msec interrupts. + + (+) The HAL_SYSTICK_Config()function calls the SysTick_Config() function which + is a CMSIS function that: + (++) Configures the SysTick Reload register with value passed as function parameter. + (++) Configures the SysTick IRQ priority to the lowest value (0x0F). + (++) Resets the SysTick Counter register. + (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK). + (++) Enables the SysTick Interrupt. + (++) Starts the SysTick Counter. + + (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the function + HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the + HAL_SYSTICK_Config() function call. + + (+) You can change the SysTick IRQ priority by calling the + HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function + call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function. + + (+) To adjust the SysTick time base, use the following formula: + + Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s) + (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function + (++) Reload Value should not exceed 0xFFFFFF + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup CORTEX CORTEX + * @brief CORTEX HAL module driver + * @{ + */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions + * @{ + */ + + +/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + ============================================================================== + ##### Initialization and de-initialization functions ##### + ============================================================================== + [..] + This section provide the Cortex HAL driver functions allowing to configure Interrupts + Systick functionalities + +@endverbatim + * @{ + */ + + +/** + * @brief Sets the priority grouping field (pre-emption priority and subpriority) + * using the required unlock sequence. + * @param PriorityGroup: The priority grouping bits length. + * This parameter can be one of the following values: + * @arg NVIC_PRIORITYGROUP_0: 0 bits for pre-emption priority + * 4 bits for subpriority + * @arg NVIC_PRIORITYGROUP_1: 1 bits for pre-emption priority + * 3 bits for subpriority + * @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority + * 2 bits for subpriority + * @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority + * 1 bits for subpriority + * @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority + * 0 bits for subpriority + * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. + * The pending IRQ priority will be managed only by the subpriority. + * @retval None + */ +void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); + + /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */ + NVIC_SetPriorityGrouping(PriorityGroup); +} + +/** + * @brief Sets the priority of an interrupt. + * @param IRQn: External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) + * @param PreemptPriority: The pre-emption priority for the IRQn channel. + * This parameter can be a value between 0 and 15 + * A lower priority value indicates a higher priority + * @param SubPriority: the subpriority level for the IRQ channel. + * This parameter can be a value between 0 and 15 + * A lower priority value indicates a higher priority. + * @retval None + */ +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t prioritygroup = 0x00; + + /* Check the parameters */ + assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); + assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); + + prioritygroup = NVIC_GetPriorityGrouping(); + + NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); +} + +/** + * @brief Enables a device specific interrupt in the NVIC interrupt controller. + * @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig() + * function should be called before. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) + * @retval None + */ +void HAL_NVIC_EnableIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Enable interrupt */ + NVIC_EnableIRQ(IRQn); +} + +/** + * @brief Disables a device specific interrupt in the NVIC interrupt controller. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) + * @retval None + */ +void HAL_NVIC_DisableIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + + /* Disable interrupt */ + NVIC_DisableIRQ(IRQn); +} + +/** + * @brief Initiates a system reset request to reset the MCU. + * @retval None + */ +void HAL_NVIC_SystemReset(void) +{ + /* System Reset */ + NVIC_SystemReset(); +} + +/** + * @brief Initializes the System Timer and its interrupt, and starts the System Tick Timer. + * Counter is in free running mode to generate periodic interrupts. + * @param TicksNumb: Specifies the ticks Number of ticks between two interrupts. + * @retval status: - 0 Function succeeded. + * - 1 Function failed. + */ +uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) +{ + return SysTick_Config(TicksNumb); +} +/** + * @} + */ + +/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions + * @brief Cortex control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to control the CORTEX + (NVIC, SYSTICK, MPU) functionalities. + + +@endverbatim + * @{ + */ + +#if (__MPU_PRESENT == 1) +/** + * @brief Initializes and configures the Region and the memory to be protected. + * @param MPU_Init: Pointer to a MPU_Region_InitTypeDef structure that contains + * the initialization and configuration information. + * @retval None + */ +void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init) +{ + /* Check the parameters */ + assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number)); + assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable)); + + /* Set the Region number */ + MPU->RNR = MPU_Init->Number; + + if ((MPU_Init->Enable) != RESET) + { + /* Check the parameters */ + assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec)); + assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission)); + assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField)); + assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable)); + assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable)); + assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable)); + assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable)); + assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size)); + + MPU->RBAR = MPU_Init->BaseAddress; + MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | + ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) | + ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) | + ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) | + ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) | + ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) | + ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) | + ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | + ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos); + } + else + { + MPU->RBAR = 0x00; + MPU->RASR = 0x00; + } +} +#endif /* __MPU_PRESENT */ + +/** + * @brief Gets the priority grouping field from the NVIC Interrupt Controller. + * @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field) + */ +uint32_t HAL_NVIC_GetPriorityGrouping(void) +{ + /* Get the PRIGROUP[10:8] field value */ + return NVIC_GetPriorityGrouping(); +} + +/** + * @brief Gets the priority of an interrupt. + * @param IRQn: External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) + * @param PriorityGroup: the priority grouping bits length. + * This parameter can be one of the following values: + * @arg NVIC_PRIORITYGROUP_0: 0 bits for pre-emption priority + * 4 bits for subpriority + * @arg NVIC_PRIORITYGROUP_1: 1 bits for pre-emption priority + * 3 bits for subpriority + * @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority + * 2 bits for subpriority + * @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority + * 1 bits for subpriority + * @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority + * 0 bits for subpriority + * @param pPreemptPriority: Pointer on the Preemptive priority value (starting from 0). + * @param pSubPriority: Pointer on the Subpriority value (starting from 0). + * @retval None + */ +void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); + /* Get priority for Cortex-M system or device specific interrupts */ + NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority); +} + +/** + * @brief Sets Pending bit of an external interrupt. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) + * @retval None + */ +void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + /* Set interrupt pending */ + NVIC_SetPendingIRQ(IRQn); +} + +/** + * @brief Gets Pending Interrupt (reads the pending register in the NVIC + * and returns the pending bit for the specified interrupt). + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) + * @retval status: - 0 Interrupt status is not pending. + * - 1 Interrupt status is pending. + */ +uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + /* Return 1 if pending else 0 */ + return NVIC_GetPendingIRQ(IRQn); +} + +/** + * @brief Clears the pending bit of an external interrupt. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) + * @retval None + */ +void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + /* Clear pending interrupt */ + NVIC_ClearPendingIRQ(IRQn); +} + +/** + * @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit). + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) + * @retval status: - 0 Interrupt status is not pending. + * - 1 Interrupt status is pending. + */ +uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn) +{ + /* Return 1 if active else 0 */ + return NVIC_GetActive(IRQn); +} + +/** + * @brief Configures the SysTick clock source. + * @param CLKSource: specifies the SysTick clock source. + * This parameter can be one of the following values: + * @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source. + * @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source. + * @retval None + */ +void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource) +{ + /* Check the parameters */ + assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource)); + if (CLKSource == SYSTICK_CLKSOURCE_HCLK) + { + SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; + } + else + { + SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK; + } +} + +/** + * @brief This function handles SYSTICK interrupt request. + * @retval None + */ +void HAL_SYSTICK_IRQHandler(void) +{ + HAL_SYSTICK_Callback(); +} + +/** + * @brief SYSTICK callback. + * @retval None + */ +__weak void HAL_SYSTICK_Callback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_SYSTICK_Callback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_CORTEX_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,709 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_dma.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief DMA HAL module driver. + * + * This file provides firmware functions to manage the following + * functionalities of the Direct Memory Access (DMA) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral State and errors functions + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Enable and configure the peripheral to be connected to the DMA Channel + (except for internal SRAM / FLASH memories: no initialization is + necessary) please refer to Reference manual for connection between peripherals + and DMA requests. + + (#) For a given Channel, program the required configuration through the following parameters: + Transfer Direction, Source and Destination data formats, + Circular or Normal mode, Channel Priority level, Source and Destination Increment mode, + using HAL_DMA_Init() function. + + (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error + detection. + + (#) Use HAL_DMA_Abort() function to abort the current transfer + + -@- In Memory-to-Memory transfer mode, Circular mode is not allowed. + *** Polling mode IO operation *** + ================================= + [..] + (+) Use HAL_DMA_Start() to start DMA transfer after the configuration of Source + address and destination address and the Length of data to be transferred + (+) Use HAL_DMA_PollForTransfer() to poll for the end of current transfer, in this + case a fixed Timeout can be configured by User depending from his application. + + *** Interrupt mode IO operation *** + =================================== + [..] + (+) Configure the DMA interrupt priority using HAL_NVIC_SetPriority() + (+) Enable the DMA IRQ handler using HAL_NVIC_EnableIRQ() + (+) Use HAL_DMA_Start_IT() to start DMA transfer after the configuration of + Source address and destination address and the Length of data to be transferred. + In this case the DMA interrupt is configured + (+) Use HAL_DMAy_Channelx_IRQHandler() called under DMA_IRQHandler() Interrupt subroutine + (+) At the end of data transfer HAL_DMA_IRQHandler() function is executed and user can + add his own function by customization of function pointer XferCpltCallback and + XferErrorCallback (i.e a member of DMA handle structure). + + *** DMA HAL driver macros list *** + ============================================= + [..] + Below the list of most used macros in DMA HAL driver. + + (+) __HAL_DMA_ENABLE: Enable the specified DMA Channel. + (+) __HAL_DMA_DISABLE: Disable the specified DMA Channel. + (+) __HAL_DMA_GET_FLAG: Get the DMA Channel pending flags. + (+) __HAL_DMA_CLEAR_FLAG: Clear the DMA Channel pending flags. + (+) __HAL_DMA_ENABLE_IT: Enable the specified DMA Channel interrupts. + (+) __HAL_DMA_DISABLE_IT: Disable the specified DMA Channel interrupts. + (+) __HAL_DMA_GET_IT_SOURCE: Check whether the specified DMA Channel interrupt has occurred or not. + + [..] + (@) You can refer to the DMA HAL driver header file for more useful macros + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup DMA DMA + * @brief DMA HAL module driver + * @{ + */ + +#ifdef HAL_DMA_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup DMA_Private_Constants DMA Private Constants + * @{ + */ +#define HAL_TIMEOUT_DMA_ABORT ((uint32_t)1000) /* 1s */ +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup DMA_Private_Functions DMA Private Functions + * @{ + */ +static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Functions DMA Exported Functions + * @{ + */ + +/** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to initialize the DMA Channel source + and destination addresses, incrementation and data sizes, transfer direction, + circular/normal mode selection, memory-to-memory mode selection and Channel priority value. + [..] + The HAL_DMA_Init() function follows the DMA configuration procedures as described in + reference manual. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the DMA according to the specified + * parameters in the DMA_InitTypeDef and create the associated handle. + * @param hdma: Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) +{ + uint32_t tmp = 0; + + /* Check the DMA handle allocation */ + if(hdma == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); + assert_param(IS_DMA_DIRECTION(hdma->Init.Direction)); + assert_param(IS_DMA_PERIPHERAL_INC_STATE(hdma->Init.PeriphInc)); + assert_param(IS_DMA_MEMORY_INC_STATE(hdma->Init.MemInc)); + assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment)); + assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment)); + assert_param(IS_DMA_MODE(hdma->Init.Mode)); + assert_param(IS_DMA_PRIORITY(hdma->Init.Priority)); + + if(hdma->State == HAL_DMA_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + hdma->Lock = HAL_UNLOCKED; + } + + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Get the CR register value */ + tmp = hdma->Instance->CCR; + + /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR bits */ + tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | \ + DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | \ + DMA_CCR_DIR)); + + /* Prepare the DMA Channel configuration */ + tmp |= hdma->Init.Direction | + hdma->Init.PeriphInc | hdma->Init.MemInc | + hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | + hdma->Init.Mode | hdma->Init.Priority; + + /* Write to DMA Channel CR register */ + hdma->Instance->CCR = tmp; + + /* Initialise the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Initialize the DMA state*/ + hdma->State = HAL_DMA_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the DMA peripheral + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma) +{ + /* Check the DMA handle allocation */ + if(hdma == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); + + /* Check the DMA peripheral state */ + if(hdma->State == HAL_DMA_STATE_BUSY) + { + return HAL_ERROR; + } + + /* Disable the selected DMA Channelx */ + __HAL_DMA_DISABLE(hdma); + + /* Reset DMA Channel control register */ + hdma->Instance->CCR = 0; + + /* Reset DMA Channel Number of Data to Transfer register */ + hdma->Instance->CNDTR = 0; + + /* Reset DMA Channel peripheral address register */ + hdma->Instance->CPAR = 0; + + /* Reset DMA Channel memory address register */ + hdma->Instance->CMAR = 0; + + /* Clear all flags */ + __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma)); + __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)); + __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma)); + + /* Initialize the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Initialize the DMA state */ + hdma->State = HAL_DMA_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions_Group2 Input and Output operation functions + * @brief I/O operation functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure the source, destination address and data length and Start DMA transfer + (+) Configure the source, destination address and data length and + Start DMA transfer with interrupt + (+) Abort DMA transfer + (+) Poll for transfer complete + (+) Handle DMA interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Starts the DMA Transfer. + * @param hdma : pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @param SrcAddress: The source memory Buffer address + * @param DstAddress: The destination memory Buffer address + * @param DataLength: The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + /* Process locked */ + __HAL_LOCK(hdma); + + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Disable the peripheral */ + __HAL_DMA_DISABLE(hdma); + + /* Configure the source, destination address and the data length */ + DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Enable the Peripheral */ + __HAL_DMA_ENABLE(hdma); + + return HAL_OK; +} + +/** + * @brief Start the DMA Transfer with interrupt enabled. + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @param SrcAddress: The source memory Buffer address + * @param DstAddress: The destination memory Buffer address + * @param DataLength: The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + /* Process locked */ + __HAL_LOCK(hdma); + + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Disable the peripheral */ + __HAL_DMA_DISABLE(hdma); + + /* Configure the source, destination address and the data length */ + DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Enable the transfer complete interrupt */ + __HAL_DMA_ENABLE_IT(hdma, DMA_IT_TC); + + /* Enable the Half transfer complete interrupt */ + __HAL_DMA_ENABLE_IT(hdma, DMA_IT_HT); + + /* Enable the transfer Error interrupt */ + __HAL_DMA_ENABLE_IT(hdma, DMA_IT_TE); + + /* Enable the Peripheral */ + __HAL_DMA_ENABLE(hdma); + + return HAL_OK; +} + +/** + * @brief Aborts the DMA Transfer. + * @param hdma : pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * + * @note After disabling a DMA Channel, a check for wait until the DMA Channel is + * effectively disabled is added. If a Channel is disabled + * while a data transfer is ongoing, the current data will be transferred + * and the Channel will be effectively disabled only after the transfer of + * this single data is finished. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) +{ + uint32_t tickstart = 0x00; + + /* Disable the channel */ + __HAL_DMA_DISABLE(hdma); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check if the DMA Channel is effectively disabled */ + while((hdma->Instance->CCR & DMA_CCR_EN) != 0) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart) > HAL_TIMEOUT_DMA_ABORT) + { + /* Update error code */ + SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TIMEOUT); + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_TIMEOUT; + } + } + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_OK; +} + +/** + * @brief Polling for transfer complete. + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @param CompleteLevel: Specifies the DMA level complete. + * @param Timeout: Timeout duration. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout) +{ + uint32_t temp; + uint32_t tickstart = 0x00; + + /* Get the level transfer complete flag */ + if(CompleteLevel == HAL_DMA_FULL_TRANSFER) + { + /* Transfer Complete flag */ + temp = __HAL_DMA_GET_TC_FLAG_INDEX(hdma); + } + else + { + /* Half Transfer Complete flag */ + temp = __HAL_DMA_GET_HT_FLAG_INDEX(hdma); + } + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(__HAL_DMA_GET_FLAG(hdma, temp) == RESET) + { + if((__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)) != RESET)) + { + /* Clear the transfer error flags */ + __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)); + + /* Update error code */ + SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TE); + + /* Change the DMA state */ + hdma->State= HAL_DMA_STATE_ERROR; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + } + /* Check for the Timeout */ + if(Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout)) + { + /* Update error code */ + SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TIMEOUT); + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_TIMEOUT; + } + } + } + + if(CompleteLevel == HAL_DMA_FULL_TRANSFER) + { + /* Clear the transfer complete flag */ + __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma)); + + /* The selected Channelx EN bit is cleared (DMA is disabled and + all transfers are complete) */ + hdma->State = HAL_DMA_STATE_READY; + + } + else + { + /* Clear the half transfer complete flag */ + __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma)); + + /* The selected Channelx EN bit is cleared (DMA is disabled and + all transfers of half buffer are complete) */ + hdma->State = HAL_DMA_STATE_READY_HALF; + } + + /* Process unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_OK; +} + +/** + * @brief Handles DMA interrupt request. + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval None + */ +void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) +{ + /* Transfer Error Interrupt management ***************************************/ + if(__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TE) != RESET) + { + /* Disable the transfer error interrupt */ + __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE); + + /* Clear the transfer error flag */ + __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)); + + /* Update error code */ + SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TE); + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_ERROR; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + if (hdma->XferErrorCallback != NULL) + { + /* Transfer error callback */ + hdma->XferErrorCallback(hdma); + } + } + } + + /* Half Transfer Complete Interrupt management ******************************/ + if(__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_HT) != RESET) + { + /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */ + if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0) + { + /* Disable the half transfer interrupt */ + __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT); + } + /* Clear the half transfer complete flag */ + __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma)); + + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_READY_HALF; + + if(hdma->XferHalfCpltCallback != NULL) + { + /* Half transfer callback */ + hdma->XferHalfCpltCallback(hdma); + } + } + } + + /* Transfer Complete Interrupt management ***********************************/ + if(__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TC) != RESET) + { + if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0) + { + /* Disable the transfer complete interrupt */ + __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TC); + } + /* Clear the transfer complete flag */ + __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma)); + + /* Update error code */ + SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_NONE); + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + if(hdma->XferCpltCallback != NULL) + { + /* Transfer complete callback */ + hdma->XferCpltCallback(hdma); + } + } + } +} + +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions_Group3 Peripheral State functions + * @brief Peripheral State functions + * +@verbatim + =============================================================================== + ##### State and Errors functions ##### + =============================================================================== + [..] + This subsection provides functions allowing to + (+) Check the DMA state + (+) Get error code + +@endverbatim + * @{ + */ + +/** + * @brief Returns the DMA state. + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL state + */ +HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma) +{ + return hdma->State; +} + +/** + * @brief Return the DMA error code + * @param hdma : pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval DMA Error Code + */ +uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma) +{ + return hdma->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup DMA_Private_Functions DMA Private Functions + * @{ + */ + +/** + * @brief Sets the DMA Transfer parameter. + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @param SrcAddress: The source memory Buffer address + * @param DstAddress: The destination memory Buffer address + * @param DataLength: The length of data to be transferred from source to destination + * @retval HAL status + */ +static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + /* Configure DMA Channel data length */ + hdma->Instance->CNDTR = DataLength; + + /* Peripheral to Memory */ + if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH) + { + /* Configure DMA Channel destination address */ + hdma->Instance->CPAR = DstAddress; + + /* Configure DMA Channel source address */ + hdma->Instance->CMAR = SrcAddress; + } + /* Memory to Peripheral */ + else + { + /* Configure DMA Channel source address */ + hdma->Instance->CPAR = SrcAddress; + + /* Configure DMA Channel destination address */ + hdma->Instance->CMAR = DstAddress; + } +} + +/** + * @} + */ + +#endif /* HAL_DMA_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,974 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_flash.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief FLASH HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the internal FLASH memory: + * + Program operations functions + * + Memory Control functions + * + Peripheral State functions + * + @verbatim + ============================================================================== + ##### FLASH peripheral features ##### + ============================================================================== + [..] The Flash memory interface manages CPU AHB I-Code and D-Code accesses + to the Flash memory. It implements the erase and program Flash memory operations + and the read and write protection mechanisms. + + [..] The Flash memory interface accelerates code execution with a system of instruction + prefetch. + + [..] The FLASH main features are: + (+) Flash memory read operations + (+) Flash memory program/erase operations + (+) Read / write protections + (+) Prefetch on I-Code + (+) Option Bytes programming + + + ##### How to use this driver ##### + ============================================================================== + [..] + This driver provides functions and macros to configure and program the FLASH + memory of all STM32F1xx devices. + + (#) FLASH Memory I/O Programming functions: this group includes all needed + functions to erase and program the main memory: + (++) Lock and Unlock the FLASH interface + (++) Erase function: Erase page, erase all pages + (++) Program functions: half word, word and doubleword + + (#) FLASH Option Bytes Programming functions: this group includes all needed + functions to manage the Option Bytes: + (++) Lock and Unlock the Option Bytes + (++) Set/Reset the write protection + (++) Set the Read protection Level + (++) Program the user Option Bytes + (++) Launch the Option Bytes loader + (++) Erase Option Bytes + (++) Program the data Option Bytes + (++) Get the Write protection. + (++) Get the user option bytes. + + (#) Interrupts and flags management functions : this group + includes all needed functions to: + (++) Handle FLASH interrupts + (++) Wait for last FLASH operation according to its status + (++) Get error flag status + + [..] In addition to these function, this driver includes a set of macros allowing + to handle the following operations: + + (+) Set/Get the latency + (+) Enable/Disable the prefetch buffer + (+) Enable/Disable the half cycle access + (+) Enable/Disable the FLASH interrupts + (+) Monitor the FLASH flags status + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +#ifdef HAL_FLASH_MODULE_ENABLED + +/** @defgroup FLASH FLASH + * @brief FLASH HAL module driver + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup FLASH_Private_Constants FLASH Private Constants + * @{ + */ +/** + * @} + */ + +/* Private macro ---------------------------- ---------------------------------*/ +/** @defgroup FLASH_Private_Macros FLASH Private Macros + * @{ + */ + +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/** @defgroup FLASH_Private_Variables FLASH Private Variables + * @{ + */ +/* Variables used for Erase pages under interruption*/ +FLASH_ProcessTypeDef pFlash; +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup FLASH_Private_Functions FLASH Private Functions + * @{ + */ +static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data); +static void FLASH_SetErrorCode(void); +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Functions FLASH Exported Functions + * @{ + */ + +/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions + * @brief Programming operation functions + * +@verbatim +@endverbatim + * @{ + */ + +/** + * @brief Program halfword, word or double word at a specified address + * @note The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function HAL_FLASH_Lock() should be called after to lock the FLASH interface + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @note FLASH should be previously erased before new programmation (only exception to this + * is when 0x0000 is programmed) + * + * @param TypeProgram: Indicate the way to program at a specified address. + * This parameter can be a value of @ref FLASH_Type_Program + * @param Address: Specifies the address to be programmed. + * @param Data: Specifies the data to be programmed + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data) +{ + HAL_StatusTypeDef status = HAL_ERROR; + uint8_t index = 0; + uint8_t nbiterations = 0; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); + assert_param(IS_FLASH_PROGRAM_ADDRESS(Address)); + +#if defined(FLASH_BANK2_END) + if(Address <= FLASH_BANK1_END) + { +#endif /* FLASH_BANK2_END */ + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); +#if defined(FLASH_BANK2_END) + } + else + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* FLASH_BANK2_END */ + + if(status == HAL_OK) + { + if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) + { + /* Program halfword (16-bit) at a specified address. */ + nbiterations = 1; + } + else if(TypeProgram == FLASH_TYPEPROGRAM_WORD) + { + /* Program word (32-bit = 2*16-bit) at a specified address. */ + nbiterations = 2; + } + else + { + /* Program double word (64-bit = 4*16-bit) at a specified address. */ + nbiterations = 4; + } + + for (index = 0; index < nbiterations; index++) + { + FLASH_Program_HalfWord((Address + (2*index)), (uint16_t)(Data >> (16*index))); + +#if defined(FLASH_BANK2_END) + if(Address <= FLASH_BANK1_END) + { +#endif /* FLASH_BANK2_END */ + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the program operation is completed, disable the PG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PG); +#if defined(FLASH_BANK2_END) + } + else + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the program operation is completed, disable the PG Bit */ + CLEAR_BIT(FLASH->CR2, FLASH_CR2_PG); + } +#endif /* FLASH_BANK2_END */ + /* In case of error, stop programation procedure */ + if (status != HAL_OK) + { + break; + } + } + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Program halfword, word or double word at a specified address with interrupt enabled. + * @note The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function HAL_FLASH_Lock() should be called after to lock the FLASH interface + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param TypeProgram: Indicate the way to program at a specified address. + * This parameter can be a value of @ref FLASH_Type_Program + * @param Address: Specifies the address to be programmed. + * @param Data: Specifies the data to be programmed + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); + assert_param(IS_FLASH_PROGRAM_ADDRESS(Address)); + +#if defined(FLASH_BANK2_END) + /* If procedure already ongoing, reject the next one */ + if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) + { + return HAL_ERROR; + } + + if(Address <= FLASH_BANK1_END) + { + /* Enable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK1 | FLASH_IT_ERR_BANK1); + + }else + { + /* Enable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2); + } +#else + /* Enable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR); +#endif /* FLASH_BANK2_END */ + + pFlash.Address = Address; + pFlash.Data = Data; + + if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) + { + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMHALFWORD; + /*Program halfword (16-bit) at a specified address.*/ + pFlash.DataRemaining = 1; + } + else if(TypeProgram == FLASH_TYPEPROGRAM_WORD) + { + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMWORD; + /*Program word (32-bit : 2*16-bit) at a specified address.*/ + pFlash.DataRemaining = 2; + } + else + { + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMDOUBLEWORD; + /*Program double word (64-bit : 4*16-bit) at a specified address.*/ + pFlash.DataRemaining = 4; + } + + /*Program halfword (16-bit) at a specified address.*/ + FLASH_Program_HalfWord(Address, (uint16_t)Data); + + return status; +} + +/** + * @brief This function handles FLASH interrupt request. + * @retval None + */ +void HAL_FLASH_IRQHandler(void) +{ + uint32_t addresstmp = 0; + + /* Check FLASH operation error flags */ +#if defined(FLASH_BANK2_END) + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK1) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK1) || \ + (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2))) +#else + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) ||__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) +#endif /* FLASH_BANK2_END */ + { + /*return the faulty address*/ + addresstmp = pFlash.Address; + /* Reset address */ + pFlash.Address = 0xFFFFFFFF; + + /*Save the Error code*/ + FLASH_SetErrorCode(); + + /* FLASH error interrupt user callback */ + HAL_FLASH_OperationErrorCallback(addresstmp); + + /* Stop the procedure ongoing*/ + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + + /* Check FLASH End of Operation flag */ +#if defined(FLASH_BANK2_END) + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK1)) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK1); +#else + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); +#endif /* FLASH_BANK2_END */ + + /* Process can continue only if no error detected */ + if(pFlash.ProcedureOnGoing != FLASH_PROC_NONE) + { + if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) + { + /* Nb of pages to erased can be decreased */ + pFlash.DataRemaining--; + + /* Check if there are still pages to erase*/ + if(pFlash.DataRemaining != 0) + { + addresstmp = pFlash.Address; + /*Indicate user which sector has been erased*/ + HAL_FLASH_EndOfOperationCallback(addresstmp); + + /*Increment sector number*/ + addresstmp = pFlash.Address + FLASH_PAGE_SIZE; + pFlash.Address = addresstmp; + + /* If the erase operation is completed, disable the PER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PER); + + FLASH_PageErase(addresstmp); + } + else + { + /*No more pages to Erase, user callback can be called.*/ + /*Reset Sector and stop Erase pages procedure*/ + pFlash.Address = addresstmp = 0xFFFFFFFF; + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(addresstmp); + } + } + else if(pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) + { + /* Operation is completed, disable the MER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_MER); + +#if defined(FLASH_BANK2_END) + /* Stop Mass Erase procedure if no pending mass erase on other bank */ + if (HAL_IS_BIT_CLR(FLASH->CR2, FLASH_CR2_MER)) + { +#endif /* FLASH_BANK2_END */ + /* MassErase ended. Return the selected bank*/ + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(0); + + /* Stop Mass Erase procedure*/ + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } +#if defined(FLASH_BANK2_END) + } +#endif /* FLASH_BANK2_END */ + else + { + /* Nb of 16-bit data to program can be decreased */ + pFlash.DataRemaining--; + + /* Check if there are still 16-bit data to program */ + if(pFlash.DataRemaining != 0) + { + /* Increment address to 16-bit */ + pFlash.Address += 2; + addresstmp = pFlash.Address; + + /* Shift to have next 16-bit data */ + pFlash.Data = (pFlash.Data >> 16); + + /* Operation is completed, disable the PG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PG); + + /*Program halfword (16-bit) at a specified address.*/ + FLASH_Program_HalfWord(addresstmp, (uint16_t)pFlash.Data); + } + else + { + /*Program ended. Return the selected address*/ + /* FLASH EOP interrupt user callback */ + if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMHALFWORD) + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address); + } + else if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMWORD) + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address - 2); + } + else + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address - 6); + } + + /* Reset Address and stop Program procedure*/ + pFlash.Address = 0xFFFFFFFF; + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + } + } + } + +#if defined(FLASH_BANK2_END) + /* Check FLASH End of Operation flag */ + if(__HAL_FLASH_GET_FLAG( FLASH_FLAG_EOP_BANK2)) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK2); + + /* Process can continue only if no error detected */ + if(pFlash.ProcedureOnGoing != FLASH_PROC_NONE) + { + if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) + { + /* Nb of pages to erased can be decreased */ + pFlash.DataRemaining--; + + /* Check if there are still pages to erase*/ + if(pFlash.DataRemaining != 0) + { + /* Indicate user which page address has been erased*/ + HAL_FLASH_EndOfOperationCallback(pFlash.Address); + + /* Increment page address to next page */ + pFlash.Address += FLASH_PAGE_SIZE; + addresstmp = pFlash.Address; + + /* Operation is completed, disable the PER Bit */ + CLEAR_BIT(FLASH->CR2, FLASH_CR2_PER); + + FLASH_PageErase(addresstmp); + } + else + { + /*No more pages to Erase*/ + + /*Reset Address and stop Erase pages procedure*/ + pFlash.Address = 0xFFFFFFFF; + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(pFlash.Address); + } + } + else if(pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) + { + /* Operation is completed, disable the MER Bit */ + CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER); + + if (HAL_IS_BIT_CLR(FLASH->CR, FLASH_CR_MER)) + { + /* MassErase ended. Return the selected bank*/ + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(0); + + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + } + else + { + /* Nb of 16-bit data to program can be decreased */ + pFlash.DataRemaining--; + + /* Check if there are still 16-bit data to program */ + if(pFlash.DataRemaining != 0) + { + /* Increment address to 16-bit */ + pFlash.Address += 2; + addresstmp = pFlash.Address; + + /* Shift to have next 16-bit data */ + pFlash.Data = (pFlash.Data >> 16); + + /* Operation is completed, disable the PG Bit */ + CLEAR_BIT(FLASH->CR2, FLASH_CR2_PG); + + /*Program halfword (16-bit) at a specified address.*/ + FLASH_Program_HalfWord(addresstmp, (uint16_t)pFlash.Data); + } + else + { + /*Program ended. Return the selected address*/ + /* FLASH EOP interrupt user callback */ + if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMHALFWORD) + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address); + } + else if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMWORD) + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address-2); + } + else + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address-6); + } + + /* Reset Address and stop Program procedure*/ + pFlash.Address = 0xFFFFFFFF; + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + } + } + } +#endif + + if(pFlash.ProcedureOnGoing == FLASH_PROC_NONE) + { +#if defined(FLASH_BANK2_END) + /* Operation is completed, disable the PG, PER and MER Bits for both bank */ + CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_PER | FLASH_CR_MER)); + CLEAR_BIT(FLASH->CR2, (FLASH_CR2_PG | FLASH_CR2_PER | FLASH_CR2_MER)); + + /* Disable End of FLASH Operation and Error source interrupts for both banks */ + __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP_BANK1 | FLASH_IT_ERR_BANK1 | FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2); +#else + /* Operation is completed, disable the PG, PER and MER Bits */ + CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_PER | FLASH_CR_MER)); + + /* Disable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR); +#endif /* FLASH_BANK2_END */ + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + } +} + + +/** + * @brief FLASH end of operation interrupt callback + * @param ReturnValue: The value saved in this parameter depends on the ongoing procedure + * - Mass Erase: No return value expected + * - Pages Erase: Address of the page which has been erased + * (if 0xFFFFFFFF, it means that all the selected pages have been erased) + * - Program: Address which was selected for data program + * @retval none + */ +__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(ReturnValue); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_FLASH_EndOfOperationCallback could be implemented in the user file + */ +} + +/** + * @brief FLASH operation error interrupt callback + * @param ReturnValue: The value saved in this parameter depends on the ongoing procedure + * - Mass Erase: No return value expected + * - Pages Erase: Address of the page which returned an error + * - Program: Address which was selected for data program + * @retval none + */ +__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(ReturnValue); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_FLASH_OperationErrorCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions + * @brief management functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the FLASH + memory operations. + +@endverbatim + * @{ + */ + +/** + * @brief Unlock the FLASH control register access + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Unlock(void) +{ + if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + { + /* Authorize the FLASH Registers access */ + WRITE_REG(FLASH->KEYR, FLASH_KEY1); + WRITE_REG(FLASH->KEYR, FLASH_KEY2); + } + else + { + return HAL_ERROR; + } + +#if defined(FLASH_BANK2_END) + if (HAL_IS_BIT_SET(FLASH->CR2, FLASH_CR2_LOCK)) + { + /* Authorize the FLASH BANK2 Registers access */ + WRITE_REG(FLASH->KEYR2, FLASH_KEY1); + WRITE_REG(FLASH->KEYR2, FLASH_KEY2); + } + else + { + return HAL_ERROR; + } + +#endif /* FLASH_BANK2_END */ + return HAL_OK; +} + +/** + * @brief Locks the FLASH control register access + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Lock(void) +{ + /* Set the LOCK Bit to lock the FLASH Registers access */ + SET_BIT(FLASH->CR, FLASH_CR_LOCK); + +#if defined(FLASH_BANK2_END) + /* Set the LOCK Bit to lock the FLASH BANK2 Registers access */ + SET_BIT(FLASH->CR2, FLASH_CR2_LOCK); +#endif /* FLASH_BANK2_END */ + + return HAL_OK; +} + + +/** + * @brief Unlock the FLASH Option Control Registers access. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void) +{ + if (HAL_IS_BIT_CLR(FLASH->CR, FLASH_CR_OPTWRE)) + { + /* Authorizes the Option Byte register programming */ + WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY1); + WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY2); + } + else + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief Lock the FLASH Option Control Registers access. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Lock(void) +{ + /* Clear the OPTWRE Bit to lock the FLASH Option Byte Registers access */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTWRE); + + return HAL_OK; +} + +/** + * @brief Launch the option byte loading. + * @note This function will reset automatically the MCU. + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Launch(void) +{ + /* Initiates a system reset request to launch the option byte loading */ + HAL_NVIC_SystemReset(); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Functions_Group3 Peripheral State functions + * @brief Peripheral State functions + * +@verbatim + =============================================================================== + ##### Peripheral State functions ##### + =============================================================================== + [..] + This subsection permit to get in run-time the status of the FLASH peripheral. + +@endverbatim + * @{ + */ + +/** + * @brief Get the specific FLASH error flag. + * @retval FLASH_ErrorCode: The returned value can be: + * @ref FLASH_Error_Codes + */ +uint32_t HAL_FLASH_GetError(void) +{ + return pFlash.ErrorCode; +} +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup FLASH_Private_Functions + * @{ + */ + +/** + * @brief Program a half-word (16-bit) at a specified address. + * @param Address: specifies the address to be programmed. + * @param Data: specifies the data to be programmed. + * @retval None + */ +static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data) +{ + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + +#if defined(FLASH_BANK2_END) + if(Address <= FLASH_BANK1_END) + { +#endif /* FLASH_BANK2_END */ + /* Proceed to program the new data */ + SET_BIT(FLASH->CR, FLASH_CR_PG); +#if defined(FLASH_BANK2_END) + } + else + { + /* Proceed to program the new data */ + SET_BIT(FLASH->CR2, FLASH_CR2_PG); + } +#endif /* FLASH_BANK2_END */ + + /* Write data in the address */ + *(__IO uint16_t*)Address = Data; +} + +/** + * @brief Wait for a FLASH operation to complete. + * @param Timeout: maximum flash operation timeout + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) +{ + /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset. + Even if the FLASH operation fails, the BUSY flag will be reset and an error + flag will be set */ + + uint32_t tickstart = HAL_GetTick(); + + while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) + { + if (Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout)) + { + return HAL_TIMEOUT; + } + } + } + + /* Check FLASH End of Operation flag */ + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); + } + + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || + __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR) || + __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) + { + /*Save the error code*/ + FLASH_SetErrorCode(); + return HAL_ERROR; + } + + /* If there is no error flag set */ + return HAL_OK; +} + +#if defined(FLASH_BANK2_END) +/** + * @brief Wait for a FLASH BANK2 operation to complete. + * @param Timeout: maximum flash operation timeout + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef FLASH_WaitForLastOperationBank2(uint32_t Timeout) +{ + /* Wait for the FLASH BANK2 operation to complete by polling on BUSY flag to be reset. + Even if the FLASH BANK2 operation fails, the BUSY flag will be reset and an error + flag will be set */ + + uint32_t tickstart = HAL_GetTick(); + + while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY_BANK2)) + { + if (Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout)) + { + return HAL_TIMEOUT; + } + } + } + + /* Check FLASH End of Operation flag */ + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK2)) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK2); + } + + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2)) + { + /*Save the error code*/ + FLASH_SetErrorCode(); + return HAL_ERROR; + } + + /* If there is an error flag set */ + return HAL_OK; + +} +#endif /* FLASH_BANK2_END */ + +/** + * @brief Set the specific FLASH error flag. + * @retval None + */ +static void FLASH_SetErrorCode(void) +{ +#if defined(FLASH_BANK2_END) + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2)) +#else + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR)) +#endif /* FLASH_BANK2_END */ + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP; + } +#if defined(FLASH_BANK2_END) + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2)) +#else + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) +#endif /* FLASH_BANK2_END */ + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_PROG; + } + + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR)) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_OPTV; + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR); + } + + /* Clear FLASH error pending bits */ +#if defined(FLASH_BANK2_END) + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_WRPERR | FLASH_FLAG_WRPERR_BANK2 | FLASH_FLAG_PGERR | FLASH_FLAG_PGERR_BANK2); +#else + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR); +#endif /* FLASH_BANK2_END */ +} +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_FLASH_MODULE_ENABLED */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1140 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_flash_ex.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Extended FLASH HAL module driver. + * + * This file provides firmware functions to manage the following + * functionalities of the FLASH peripheral: + * + Extended Initialization/de-initialization functions + * + Extended I/O operation functions + * + Extended Peripheral Control functions + * + @verbatim + ============================================================================== + ##### Flash peripheral extended features ##### + ============================================================================== + + ##### How to use this driver ##### + ============================================================================== + [..] This driver provides functions to configure and program the FLASH memory + of all STM32F1xxx devices. It includes + + (++) Set/Reset the write protection + (++) Program the user Option Bytes + (++) Get the Read protection Level + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ +#ifdef HAL_FLASH_MODULE_ENABLED + +/** @addtogroup FLASH + * @{ + */ +/** @addtogroup FLASH_Private_Variables + * @{ + */ +/* Variables used for Erase pages under interruption*/ +extern FLASH_ProcessTypeDef pFlash; +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup FLASHEx FLASHEx + * @brief FLASH HAL Extension module driver + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup FLASHEx_Private_Constants FLASHEx Private Constants + * @{ + */ +#define FLASH_POSITION_IWDGSW_BIT (uint32_t)POSITION_VAL(FLASH_OBR_IWDG_SW) +#define FLASH_POSITION_OB_USERDATA0_BIT (uint32_t)POSITION_VAL(FLASH_OBR_DATA0) +#define FLASH_POSITION_OB_USERDATA1_BIT (uint32_t)POSITION_VAL(FLASH_OBR_DATA1) +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup FLASHEx_Private_Macros FLASHEx Private Macros + * @{ + */ +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup FLASHEx_Private_Functions FLASHEx Private Functions + * @{ + */ +/* Erase operations */ +static void FLASH_MassErase(uint32_t Banks); + +/* Option bytes control */ +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage); +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage); +static HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel); +static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig); +static HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data); +static uint32_t FLASH_OB_GetWRP(void); +static uint32_t FLASH_OB_GetRDP(void); +static uint8_t FLASH_OB_GetUser(void); + +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Functions FLASHEx Exported Functions + * @{ + */ + +/** @defgroup FLASHEx_Exported_Functions_Group1 FLASHEx Memory Erasing functions + * @brief FLASH Memory Erasing functions + * +@verbatim + ============================================================================== + ##### FLASH Erasing Programming functions ##### + ============================================================================== + + [..] The FLASH Memory Erasing functions, includes the following functions: + (+) @ref HAL_FLASHEx_Erase: return only when erase has been done + (+) @ref HAL_FLASHEx_Erase_IT: end of erase is done when @ref HAL_FLASH_EndOfOperationCallback + is called with parameter 0xFFFFFFFF + + [..] Any operation of erase should follow these steps: + (#) Call the @ref HAL_FLASH_Unlock() function to enable the flash control register and + program memory access. + (#) Call the desired function to erase page. + (#) Call the @ref HAL_FLASH_Lock() to disable the flash program memory access + (recommended to protect the FLASH memory against possible unwanted operation). + +@endverbatim + * @{ + */ + + +/** + * @brief Perform a mass erase or erase the specified FLASH memory pages + * @note To correctly run this function, the @ref HAL_FLASH_Unlock() function + * must be called before. + * Call the @ref HAL_FLASH_Lock() to disable the flash memory access + * (recommended to protect the FLASH memory against possible unwanted operation) + * @param[in] pEraseInit pointer to an FLASH_EraseInitTypeDef structure that + * contains the configuration information for the erasing. + * + * @param[out] PageError pointer to variable that + * contains the configuration information on faulty page in case of error + * (0xFFFFFFFF means that all the pages have been correctly erased) + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError) +{ + HAL_StatusTypeDef status = HAL_ERROR; + uint32_t address = 0; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase)); + + if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) + { +#if defined(FLASH_BANK2_END) + if (pEraseInit->Banks == FLASH_BANK_BOTH) + { + /* Mass Erase requested for Bank1 and Bank2 */ + /* Wait for last operation to be completed */ + if ((FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) && \ + (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK)) + { + /*Mass erase to be done*/ + FLASH_MassErase(FLASH_BANK_BOTH); + + /* Wait for last operation to be completed */ + if ((FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) && \ + (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK)) + { + status = HAL_OK; + } + + /* If the erase operation is completed, disable the MER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_MER); + CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER); + } + } + else if (pEraseInit->Banks == FLASH_BANK_2) + { + /* Mass Erase requested for Bank2 */ + /* Wait for last operation to be completed */ + if (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) + { + /*Mass erase to be done*/ + FLASH_MassErase(FLASH_BANK_2); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the MER Bit */ + CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER); + } + } + else +#endif /* FLASH_BANK2_END */ + { + /* Mass Erase requested for Bank1 */ + /* Wait for last operation to be completed */ + if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) + { + /*Mass erase to be done*/ + FLASH_MassErase(FLASH_BANK_1); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the MER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_MER); + } + } + } + else + { + /* Page Erase is requested */ + /* Check the parameters */ + assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress)); + assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages)); + +#if defined(FLASH_BANK2_END) + /* Page Erase requested on address located on bank2 */ + if(pEraseInit->PageAddress > FLASH_BANK1_END) + { + /* Wait for last operation to be completed */ + if (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) + { + /*Initialization of PageError variable*/ + *PageError = 0xFFFFFFFF; + + /* Erase by page by page to be done*/ + for(address = pEraseInit->PageAddress; + address < (pEraseInit->PageAddress + (pEraseInit->NbPages)*FLASH_PAGE_SIZE); + address += FLASH_PAGE_SIZE) + { + FLASH_PageErase(address); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the PER Bit */ + CLEAR_BIT(FLASH->CR2, FLASH_CR2_PER); + + if (status != HAL_OK) + { + /* In case of error, stop erase procedure and return the faulty address */ + *PageError = address; + break; + } + } + } + } + else +#endif /* FLASH_BANK2_END */ + { + /* Page Erase requested on address located on bank1 */ + /* Wait for last operation to be completed */ + if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) + { + /*Initialization of PageError variable*/ + *PageError = 0xFFFFFFFF; + + /* Erase page by page to be done*/ + for(address = pEraseInit->PageAddress; + address < ((pEraseInit->NbPages * FLASH_PAGE_SIZE) + pEraseInit->PageAddress); + address += FLASH_PAGE_SIZE) + { + FLASH_PageErase(address); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the PER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PER); + + if (status != HAL_OK) + { + /* In case of error, stop erase procedure and return the faulty address */ + *PageError = address; + break; + } + } + } + } + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Perform a mass erase or erase the specified FLASH memory pages with interrupt enabled + * @note To correctly run this function, the @ref HAL_FLASH_Unlock() function + * must be called before. + * Call the @ref HAL_FLASH_Lock() to disable the flash memory access + * (recommended to protect the FLASH memory against possible unwanted operation) + * @param pEraseInit pointer to an FLASH_EraseInitTypeDef structure that + * contains the configuration information for the erasing. + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* If procedure already ongoing, reject the next one */ + if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase)); + + /* Enable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR); + +#if defined(FLASH_BANK2_END) + /* Enable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2); + +#endif + if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) + { + /*Mass erase to be done*/ + pFlash.ProcedureOnGoing = FLASH_PROC_MASSERASE; + FLASH_MassErase(pEraseInit->Banks); + } + else + { + /* Erase by page to be done*/ + + /* Check the parameters */ + assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress)); + assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages)); + + pFlash.ProcedureOnGoing = FLASH_PROC_PAGEERASE; + pFlash.DataRemaining = pEraseInit->NbPages; + pFlash.Address = pEraseInit->PageAddress; + + /*Erase 1st page and wait for IT*/ + FLASH_PageErase(pEraseInit->PageAddress); + } + + return status; +} + +/** + * @} + */ + +/** @defgroup FLASHEx_Exported_Functions_Group2 Option Bytes Programming functions + * @brief Option Bytes Programming functions + * +@verbatim + ============================================================================== + ##### Option Bytes Programming functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to control the FLASH + option bytes operations. + +@endverbatim + * @{ + */ + +/** + * @brief Erases the FLASH option bytes. + * @note This functions erases all option bytes except the Read protection (RDP). + * The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes + * The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes + * (system reset will occur) + * @retval HAL status + */ + +HAL_StatusTypeDef HAL_FLASHEx_OBErase(void) +{ + uint8_t rdptmp = OB_RDP_LEVEL_0; + HAL_StatusTypeDef status = HAL_ERROR; + + /* Get the actual read protection Option Byte value */ + rdptmp = FLASH_OB_GetRDP(); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* If the previous operation is completed, proceed to erase the option bytes */ + SET_BIT(FLASH->CR, FLASH_CR_OPTER); + SET_BIT(FLASH->CR, FLASH_CR_STRT); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the OPTER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER); + + if(status == HAL_OK) + { + /* Restore the last read protection Option Byte value */ + status = FLASH_OB_RDP_LevelConfig(rdptmp); + } + } + + /* Return the erase status */ + return status; +} + +/** + * @brief Program option bytes + * @note The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes + * The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes + * (system reset will occur) + * + * @param pOBInit pointer to an FLASH_OBInitStruct structure that + * contains the configuration information for the programming. + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit) +{ + HAL_StatusTypeDef status = HAL_ERROR; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_OPTIONBYTE(pOBInit->OptionType)); + + /* Write protection configuration */ + if((pOBInit->OptionType & OPTIONBYTE_WRP) == OPTIONBYTE_WRP) + { + assert_param(IS_WRPSTATE(pOBInit->WRPState)); + if (pOBInit->WRPState == OB_WRPSTATE_ENABLE) + { + /* Enable of Write protection on the selected page */ + status = FLASH_OB_EnableWRP(pOBInit->WRPPage); + } + else + { + /* Disable of Write protection on the selected page */ + status = FLASH_OB_DisableWRP(pOBInit->WRPPage); + } + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* Read protection configuration */ + if((pOBInit->OptionType & OPTIONBYTE_RDP) == OPTIONBYTE_RDP) + { + status = FLASH_OB_RDP_LevelConfig(pOBInit->RDPLevel); + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* USER configuration */ + if((pOBInit->OptionType & OPTIONBYTE_USER) == OPTIONBYTE_USER) + { + status = FLASH_OB_UserConfig(pOBInit->USERConfig); + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* DATA configuration*/ + if((pOBInit->OptionType & OPTIONBYTE_DATA) == OPTIONBYTE_DATA) + { + status = FLASH_OB_ProgramData(pOBInit->DATAAddress, pOBInit->DATAData); + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Get the Option byte configuration + * @param pOBInit pointer to an FLASH_OBInitStruct structure that + * contains the configuration information for the programming. + * + * @retval None + */ +void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) +{ + pOBInit->OptionType = OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER; + + /*Get WRP*/ + pOBInit->WRPPage = FLASH_OB_GetWRP(); + + /*Get RDP Level*/ + pOBInit->RDPLevel = FLASH_OB_GetRDP(); + + /*Get USER*/ + pOBInit->USERConfig = FLASH_OB_GetUser(); +} + +/** + * @brief Get the Option byte user data + * @param DATAAdress Address of the option byte DATA + * This parameter can be one of the following values: + * @arg @ref OB_DATA_ADDRESS_DATA0 + * @arg @ref OB_DATA_ADDRESS_DATA1 + * @retval Value programmed in USER data + */ +uint32_t HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress) +{ + uint32_t value = 0; + + if (DATAAdress == OB_DATA_ADDRESS_DATA0) + { + /* Get value programmed in OB USER Data0 */ + value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA0) >> FLASH_POSITION_OB_USERDATA0_BIT; + } + else + { + /* Get value programmed in OB USER Data1 */ + value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA1) >> FLASH_POSITION_OB_USERDATA1_BIT; + } + + return value; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup FLASHEx_Private_Functions + * @{ + */ + +/** + * @brief Full erase of FLASH memory Bank + * @param Banks Banks to be erased + * This parameter can be one of the following values: + * @arg @ref FLASH_BANK_1 Bank1 to be erased + @if STM32F101xG + * @arg @ref FLASH_BANK_2 Bank2 to be erased + * @arg @ref FLASH_BANK_BOTH Bank1 and Bank2 to be erased + @endif + @if STM32F103xG + * @arg @ref FLASH_BANK_2 Bank2 to be erased + * @arg @ref FLASH_BANK_BOTH Bank1 and Bank2 to be erased + @endif + * + * @retval None + */ +static void FLASH_MassErase(uint32_t Banks) +{ + /* Check the parameters */ + assert_param(IS_FLASH_BANK(Banks)); + + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + +#if defined(FLASH_BANK2_END) + if(Banks == FLASH_BANK_BOTH) + { + /* bank1 & bank2 will be erased*/ + SET_BIT(FLASH->CR, FLASH_CR_MER); + SET_BIT(FLASH->CR2, FLASH_CR2_MER); + SET_BIT(FLASH->CR, FLASH_CR_STRT); + SET_BIT(FLASH->CR2, FLASH_CR2_STRT); + } + else if(Banks == FLASH_BANK_2) + { + /*Only bank2 will be erased*/ + SET_BIT(FLASH->CR2, FLASH_CR2_MER); + SET_BIT(FLASH->CR2, FLASH_CR2_STRT); + } + else + { +#endif /* FLASH_BANK2_END */ + /* Only bank1 will be erased*/ + SET_BIT(FLASH->CR, FLASH_CR_MER); + SET_BIT(FLASH->CR, FLASH_CR_STRT); +#if defined(FLASH_BANK2_END) + } +#endif /* FLASH_BANK2_END */ +} + +/** + * @brief Enable the write protection of the desired pages + * @note An option byte erase is done automatically in this function. + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash page i if + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * + * @param WriteProtectPage specifies the page(s) to be write protected. + * The value of this parameter depend on device used within the same series + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage) +{ + HAL_StatusTypeDef status = HAL_OK; + uint16_t WRP0_Data = 0xFFFF; +#if defined(FLASH_WRP1_WRP1) + uint16_t WRP1_Data = 0xFFFF; +#endif /* FLASH_WRP1_WRP1 */ +#if defined(FLASH_WRP2_WRP2) + uint16_t WRP2_Data = 0xFFFF; +#endif /* FLASH_WRP2_WRP2 */ +#if defined(FLASH_WRP3_WRP3) + uint16_t WRP3_Data = 0xFFFF; +#endif /* FLASH_WRP3_WRP3 */ + + /* Check the parameters */ + assert_param(IS_OB_WRP(WriteProtectPage)); + + /* Get current write protected pages and the new pages to be protected ******/ + WriteProtectPage = (uint32_t)(~((~FLASH_OB_GetWRP()) | WriteProtectPage)); + +#if defined(OB_WRP_PAGES0TO15MASK) + WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK); +#elif defined(OB_WRP_PAGES0TO31MASK) + WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO31MASK); +#endif /* OB_WRP_PAGES0TO31MASK */ + +#if defined(OB_WRP_PAGES16TO31MASK) + WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8); +#elif defined(OB_WRP_PAGES32TO63MASK) + WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO63MASK) >> 8); +#endif /* OB_WRP_PAGES32TO63MASK */ + +#if defined(OB_WRP_PAGES64TO95MASK) + WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES64TO95MASK) >> 16); +#endif /* OB_WRP_PAGES64TO95MASK */ +#if defined(OB_WRP_PAGES32TO47MASK) + WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16); +#endif /* OB_WRP_PAGES32TO47MASK */ + +#if defined(OB_WRP_PAGES96TO127MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES96TO127MASK) >> 24); +#elif defined(OB_WRP_PAGES48TO255MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO255MASK) >> 24); +#elif defined(OB_WRP_PAGES48TO511MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO511MASK) >> 24); +#elif defined(OB_WRP_PAGES48TO127MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24); +#endif /* OB_WRP_PAGES96TO127MASK */ + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* To be able to write again option byte, need to perform a option byte erase */ + status = HAL_FLASHEx_OBErase(); + if (status == HAL_OK) + { + /* Enable write protection */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + +#if defined(FLASH_WRP0_WRP0) + if(WRP0_Data != 0xFF) + { + OB->WRP0 &= WRP0_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* FLASH_WRP0_WRP0 */ + +#if defined(FLASH_WRP1_WRP1) + if((status == HAL_OK) && (WRP1_Data != 0xFF)) + { + OB->WRP1 &= WRP1_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* FLASH_WRP1_WRP1 */ + +#if defined(FLASH_WRP2_WRP2) + if((status == HAL_OK) && (WRP2_Data != 0xFF)) + { + OB->WRP2 &= WRP2_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* FLASH_WRP2_WRP2 */ + +#if defined(FLASH_WRP3_WRP3) + if((status == HAL_OK) && (WRP3_Data != 0xFF)) + { + OB->WRP3 &= WRP3_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* FLASH_WRP3_WRP3 */ + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + } + + return status; +} + +/** + * @brief Disable the write protection of the desired pages + * @note An option byte erase is done automatically in this function. + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash page i if + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * + * @param WriteProtectPage specifies the page(s) to be write unprotected. + * The value of this parameter depend on device used within the same series + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage) +{ + HAL_StatusTypeDef status = HAL_OK; + uint16_t WRP0_Data = 0xFFFF; +#if defined(FLASH_WRP1_WRP1) + uint16_t WRP1_Data = 0xFFFF; +#endif /* FLASH_WRP1_WRP1 */ +#if defined(FLASH_WRP2_WRP2) + uint16_t WRP2_Data = 0xFFFF; +#endif /* FLASH_WRP2_WRP2 */ +#if defined(FLASH_WRP3_WRP3) + uint16_t WRP3_Data = 0xFFFF; +#endif /* FLASH_WRP3_WRP3 */ + + /* Check the parameters */ + assert_param(IS_OB_WRP(WriteProtectPage)); + + /* Get current write protected pages and the new pages to be unprotected ******/ + WriteProtectPage = (FLASH_OB_GetWRP() | WriteProtectPage); + +#if defined(OB_WRP_PAGES0TO15MASK) + WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK); +#elif defined(OB_WRP_PAGES0TO31MASK) + WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO31MASK); +#endif /* OB_WRP_PAGES0TO31MASK */ + +#if defined(OB_WRP_PAGES16TO31MASK) + WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8); +#elif defined(OB_WRP_PAGES32TO63MASK) + WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO63MASK) >> 8); +#endif /* OB_WRP_PAGES32TO63MASK */ + +#if defined(OB_WRP_PAGES64TO95MASK) + WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES64TO95MASK) >> 16); +#endif /* OB_WRP_PAGES64TO95MASK */ +#if defined(OB_WRP_PAGES32TO47MASK) + WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16); +#endif /* OB_WRP_PAGES32TO47MASK */ + +#if defined(OB_WRP_PAGES96TO127MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES96TO127MASK) >> 24); +#elif defined(OB_WRP_PAGES48TO255MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO255MASK) >> 24); +#elif defined(OB_WRP_PAGES48TO511MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO511MASK) >> 24); +#elif defined(OB_WRP_PAGES48TO127MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24); +#endif /* OB_WRP_PAGES96TO127MASK */ + + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* To be able to write again option byte, need to perform a option byte erase */ + status = HAL_FLASHEx_OBErase(); + if (status == HAL_OK) + { + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + +#if defined(FLASH_WRP0_WRP0) + if(WRP0_Data != 0xFF) + { + OB->WRP0 |= WRP0_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* FLASH_WRP0_WRP0 */ + +#if defined(FLASH_WRP1_WRP1) + if((status == HAL_OK) && (WRP1_Data != 0xFF)) + { + OB->WRP1 |= WRP1_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* FLASH_WRP1_WRP1 */ + +#if defined(FLASH_WRP2_WRP2) + if((status == HAL_OK) && (WRP2_Data != 0xFF)) + { + OB->WRP2 |= WRP2_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* FLASH_WRP2_WRP2 */ + +#if defined(FLASH_WRP3_WRP3) + if((status == HAL_OK) && (WRP3_Data != 0xFF)) + { + OB->WRP3 |= WRP3_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* FLASH_WRP3_WRP3 */ + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + } + return status; +} + +/** + * @brief Set the read protection level. + * @param ReadProtectLevel specifies the read protection level. + * This parameter can be one of the following values: + * @arg @ref OB_RDP_LEVEL_0 No protection + * @arg @ref OB_RDP_LEVEL_1 Read protection of the memory + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_RDP_LEVEL(ReadProtectLevel)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* If the previous operation is completed, proceed to erase the option bytes */ + SET_BIT(FLASH->CR, FLASH_CR_OPTER); + SET_BIT(FLASH->CR, FLASH_CR_STRT); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the OPTER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER); + + if(status == HAL_OK) + { + /* Enable the Option Bytes Programming operation */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + + WRITE_REG(OB->RDP, ReadProtectLevel); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + } + + return status; +} + +/** + * @brief Program the FLASH User Option Byte. + * @note Programming of the OB should be performed only after an erase (otherwise PGERR occurs) + * @param UserConfig The FLASH User Option Bytes values FLASH_OBR_IWDG_SW(Bit2), + * FLASH_OBR_nRST_STOP(Bit3),FLASH_OBR_nRST_STDBY(Bit4). + * And BFBF2(Bit5) for STM32F101xG and STM32F103xG . + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_IWDG_SOURCE((UserConfig&OB_IWDG_SW))); + assert_param(IS_OB_STOP_SOURCE((UserConfig&OB_STOP_NO_RST))); + assert_param(IS_OB_STDBY_SOURCE((UserConfig&OB_STDBY_NO_RST))); +#if defined(FLASH_BANK2_END) + assert_param(IS_OB_BOOT1((UserConfig&OB_BOOT1_SET))); +#endif /* FLASH_BANK2_END */ + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Enable the Option Bytes Programming operation */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + +#if defined(FLASH_BANK2_END) + OB->USER = (UserConfig | 0xF0); +#else + OB->USER = (UserConfig | 0x88); +#endif /* FLASH_BANK2_END */ + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + + return status; +} + +/** + * @brief Programs a half word at a specified Option Byte Data address. + * @note The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes + * The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes + * (system reset will occur) + * Programming of the OB should be performed only after an erase (otherwise PGERR occurs) + * @param Address specifies the address to be programmed. + * This parameter can be 0x1FFFF804 or 0x1FFFF806. + * @param Data specifies the data to be programmed. + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data) +{ + HAL_StatusTypeDef status = HAL_ERROR; + + /* Check the parameters */ + assert_param(IS_OB_DATA_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Enables the Option Bytes Programming operation */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + *(__IO uint16_t*)Address = Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + /* Return the Option Byte Data Program Status */ + return status; +} + +/** + * @brief Return the FLASH Write Protection Option Bytes value. + * @retval The FLASH Write Protection Option Bytes value + */ +static uint32_t FLASH_OB_GetWRP(void) +{ + /* Return the FLASH write protection Register value */ + return (uint32_t)(READ_REG(FLASH->WRPR)); +} + +/** + * @brief Returns the FLASH Read Protection level. + * @retval FLASH ReadOut Protection Status: + * This parameter can be one of the following values: + * @arg @ref OB_RDP_LEVEL_0 No protection + * @arg @ref OB_RDP_LEVEL_1 Read protection of the memory + */ +static uint32_t FLASH_OB_GetRDP(void) +{ + uint32_t readstatus = OB_RDP_LEVEL_0; + uint32_t tmp_reg = 0; + + /* Read RDP level bits */ + tmp_reg = READ_BIT(FLASH->OBR, FLASH_OBR_RDPRT); + + if (tmp_reg == FLASH_OBR_RDPRT) + { + readstatus = OB_RDP_LEVEL_1; + } + else + { + readstatus = OB_RDP_LEVEL_0; + } + + return readstatus; +} + +/** + * @brief Return the FLASH User Option Byte value. + * @retval The FLASH User Option Bytes values: FLASH_OBR_IWDG_SW(Bit2), + * FLASH_OBR_nRST_STOP(Bit3),FLASH_OBR_nRST_STDBY(Bit4). + * And FLASH_OBR_BFB2(Bit5) for STM32F101xG and STM32F103xG . + */ +static uint8_t FLASH_OB_GetUser(void) +{ + /* Return the User Option Byte */ + return (uint8_t)((READ_REG(FLASH->OBR) & FLASH_OBR_USER) >> FLASH_POSITION_IWDGSW_BIT); +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup FLASH + * @{ + */ + +/** @addtogroup FLASH_Private_Functions + * @{ + */ + +/** + * @brief Erase the specified FLASH memory page + * @param PageAddress FLASH page to erase + * The value of this parameter depend on device used within the same series + * + * @retval None + */ +void FLASH_PageErase(uint32_t PageAddress) +{ + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + +#if defined(FLASH_BANK2_END) + if(PageAddress > FLASH_BANK1_END) + { + /* Proceed to erase the page */ + SET_BIT(FLASH->CR2, FLASH_CR2_PER); + WRITE_REG(FLASH->AR2, PageAddress); + SET_BIT(FLASH->CR2, FLASH_CR2_STRT); + } + else + { +#endif /* FLASH_BANK2_END */ + /* Proceed to erase the page */ + SET_BIT(FLASH->CR, FLASH_CR_PER); + WRITE_REG(FLASH->AR, PageAddress); + SET_BIT(FLASH->CR, FLASH_CR_STRT); +#if defined(FLASH_BANK2_END) + } +#endif /* FLASH_BANK2_END */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_FLASH_MODULE_ENABLED */ +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,597 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_gpio.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief GPIO HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the General Purpose Input/Output (GPIO) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + @verbatim + ============================================================================== + ##### GPIO Peripheral features ##### + ============================================================================== + [..] + Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each + port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software + in several modes: + (+) Input mode + (+) Analog mode + (+) Output mode + (+) Alternate function mode + (+) External interrupt/event lines + + [..] + During and just after reset, the alternate functions and external interrupt + lines are not active and the I/O ports are configured in input floating mode. + + [..] + All GPIO pins have weak internal pull-up and pull-down resistors, which can be + activated or not. + + [..] + In Output or Alternate mode, each IO can be configured on open-drain or push-pull + type and the IO speed can be selected depending on the VDD value. + + [..] + All ports have external interrupt/event capability. To use external interrupt + lines, the port must be configured in input mode. All available GPIO pins are + connected to the 16 external interrupt/event lines from EXTI0 to EXTI15. + + [..] + The external interrupt/event controller consists of up to 20 edge detectors in connectivity + line devices, or 19 edge detectors in other devices for generating event/interrupt requests. + Each input line can be independently configured to select the type (event or interrupt) and + the corresponding trigger event (rising or falling or both). Each line can also masked + independently. A pending register maintains the status line of the interrupt requests + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Enable the GPIO APB2 clock using the following function : __HAL_RCC_GPIOx_CLK_ENABLE(). + + (#) Configure the GPIO pin(s) using HAL_GPIO_Init(). + (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure + (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef + structure. + (++) In case of Output or alternate function mode selection: the speed is + configured through "Speed" member from GPIO_InitTypeDef structure + (++) Analog mode is required when a pin is to be used as ADC channel + or DAC output. + (++) In case of external interrupt/event selection the "Mode" member from + GPIO_InitTypeDef structure select the type (interrupt or event) and + the corresponding trigger event (rising or falling or both). + + (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority + mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using + HAL_NVIC_EnableIRQ(). + + (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin(). + + (#) To set/reset the level of a pin configured in output mode use + HAL_GPIO_WritePin()/HAL_GPIO_TogglePin(). + + (#) To lock pin configuration until next reset use HAL_GPIO_LockPin(). + + (#) During and just after reset, the alternate functions are not + active and the GPIO pins are configured in input floating mode (except JTAG + pins). + + (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose + (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has + priority over the GPIO function. + + (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as + general purpose PD0 and PD1, respectively, when the HSE oscillator is off. + The HSE has priority over the GPIO function. + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIO GPIO + * @brief GPIO HAL module driver + * @{ + */ + +#ifdef HAL_GPIO_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup GPIO_Private_Constants GPIO Private Constants + * @{ + */ + +#define GPIO_MODE ((uint32_t)0x00000003) +#define EXTI_MODE ((uint32_t)0x10000000) +#define GPIO_MODE_IT ((uint32_t)0x00010000) +#define GPIO_MODE_EVT ((uint32_t)0x00020000) +#define RISING_EDGE ((uint32_t)0x00100000) +#define FALLING_EDGE ((uint32_t)0x00200000) +#define GPIO_OUTPUT_TYPE ((uint32_t)0x00000010) +#define GPIO_NUMBER ((uint32_t)16) + +/* Definitions for bit manipulation of CRL and CRH register */ +#define GPIO_CR_MODE_INPUT ((uint32_t)0x00000000) /*!< 00: Input mode (reset state) */ +#define GPIO_CR_CNF_ANALOG ((uint32_t)0x00000000) /*!< 00: Analog mode */ +#define GPIO_CR_CNF_INPUT_FLOATING ((uint32_t)0x00000004) /*!< 01: Floating input (reset state) */ +#define GPIO_CR_CNF_INPUT_PU_PD ((uint32_t)0x00000008) /*!< 10: Input with pull-up / pull-down */ +#define GPIO_CR_CNF_GP_OUTPUT_PP ((uint32_t)0x00000000) /*!< 00: General purpose output push-pull */ +#define GPIO_CR_CNF_GP_OUTPUT_OD ((uint32_t)0x00000004) /*!< 01: General purpose output Open-drain */ +#define GPIO_CR_CNF_AF_OUTPUT_PP ((uint32_t)0x00000008) /*!< 10: Alternate function output Push-pull */ +#define GPIO_CR_CNF_AF_OUTPUT_OD ((uint32_t)0x0000000C) /*!< 11: Alternate function output Open-drain */ + +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup GPIO_Exported_Functions GPIO Exported Functions + * @{ + */ + +/** @defgroup GPIO_Exported_Functions_Group1 Initialization and deinitialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and deinitialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to initialize and de-initialize the GPIOs + to be ready for use. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the GPIOx peripheral according to the specified parameters in the GPIO_Init. + * @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral + * @param GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains + * the configuration information for the specified GPIO peripheral. + * @retval None + */ +void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) +{ + uint32_t position; + uint32_t ioposition = 0x00; + uint32_t iocurrent = 0x00; + uint32_t temp = 0x00; + uint32_t config = 0x00; + __IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */ + uint32_t registeroffset = 0; /* offset used during computation of CNF and MODE bits placement inside CRL or CRH register */ + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); + assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); + + /* Configure the port pins */ + for (position = 0; position < GPIO_NUMBER; position++) + { + /* Get the IO position */ + ioposition = ((uint32_t)0x01) << position; + + /* Get the current IO position */ + iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; + + if (iocurrent == ioposition) + { + /* Check the Alternate function parameters */ + assert_param(IS_GPIO_AF_INSTANCE(GPIOx)); + + /* Based on the required mode, filling config variable with MODEy[1:0] and CNFy[3:2] corresponding bits */ + switch (GPIO_Init->Mode) + { + /* If we are configuring the pin in OUTPUT push-pull mode */ + case GPIO_MODE_OUTPUT_PP: + /* Check the GPIO speed parameter */ + assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); + config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_PP; + break; + + /* If we are configuring the pin in OUTPUT open-drain mode */ + case GPIO_MODE_OUTPUT_OD: + /* Check the GPIO speed parameter */ + assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); + config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_OD; + break; + + /* If we are configuring the pin in ALTERNATE FUNCTION push-pull mode */ + case GPIO_MODE_AF_PP: + /* Check the GPIO speed parameter */ + assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); + config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_PP; + break; + + /* If we are configuring the pin in ALTERNATE FUNCTION open-drain mode */ + case GPIO_MODE_AF_OD: + /* Check the GPIO speed parameter */ + assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); + config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_OD; + break; + + /* If we are configuring the pin in INPUT (also applicable to EVENT and IT mode) */ + case GPIO_MODE_INPUT: + case GPIO_MODE_IT_RISING: + case GPIO_MODE_IT_FALLING: + case GPIO_MODE_IT_RISING_FALLING: + case GPIO_MODE_EVT_RISING: + case GPIO_MODE_EVT_FALLING: + case GPIO_MODE_EVT_RISING_FALLING: + /* Check the GPIO pull parameter */ + assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); + if(GPIO_Init->Pull == GPIO_NOPULL) + { + config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING; + } + else if(GPIO_Init->Pull == GPIO_PULLUP) + { + config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; + + /* Set the corresponding ODR bit */ + GPIOx->BSRR = ioposition; + } + else /* GPIO_PULLDOWN */ + { + config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; + + /* Reset the corresponding ODR bit */ + GPIOx->BRR = ioposition; + } + break; + + /* If we are configuring the pin in INPUT analog mode */ + case GPIO_MODE_ANALOG: + config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; + break; + + /* Parameters are checked with assert_param */ + default: + break; + } + + /* Check if the current bit belongs to first half or last half of the pin count number + in order to address CRH or CRL register*/ + configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH; + registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2) : ((position - 8) << 2); + + /* Apply the new configuration of the pin to the register */ + MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset ), (config << registeroffset)); + + /*--------------------- EXTI Mode Configuration ------------------------*/ + /* Configure the External Interrupt or event for the current IO */ + if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) + { + /* Enable AFIO Clock */ + __HAL_RCC_AFIO_CLK_ENABLE(); + temp = AFIO->EXTICR[position >> 2]; + CLEAR_BIT(temp, ((uint32_t)0x0F) << (4 * (position & 0x03))); + SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))); + AFIO->EXTICR[position >> 2] = temp; + + + /* Configure the interrupt mask */ + if((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) + { + SET_BIT(EXTI->IMR, iocurrent); + } + else + { + CLEAR_BIT(EXTI->IMR, iocurrent); + } + + /* Configure the event mask */ + if((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) + { + SET_BIT(EXTI->EMR, iocurrent); + } + else + { + CLEAR_BIT(EXTI->EMR, iocurrent); + } + + /* Enable or disable the rising trigger */ + if((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) + { + SET_BIT(EXTI->RTSR, iocurrent); + } + else + { + CLEAR_BIT(EXTI->RTSR, iocurrent); + } + + /* Enable or disable the falling trigger */ + if((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) + { + SET_BIT(EXTI->FTSR, iocurrent); + } + else + { + CLEAR_BIT(EXTI->FTSR, iocurrent); + } + } + } + } +} + +/** + * @brief De-initializes the GPIOx peripheral registers to their default reset values. + * @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral + * @param GPIO_Pin: specifies the port bit to be written. + * This parameter can be one of GPIO_PIN_x where x can be (0..15). + * @retval None + */ +void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) +{ + uint32_t position = 0x00; + uint32_t iocurrent = 0x00; + uint32_t tmp = 0x00; + __IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */ + uint32_t registeroffset = 0; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* Configure the port pins */ + while ((GPIO_Pin >> position) != 0) + { + /* Get current io position */ + iocurrent = (GPIO_Pin) & ((uint32_t)1 << position); + + if (iocurrent) + { + /*------------------------- GPIO Mode Configuration --------------------*/ + /* Check if the current bit belongs to first half or last half of the pin count number + in order to address CRH or CRL register */ + configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH; + registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2) : ((position - 8) << 2); + + /* CRL/CRH default value is floating input(0x04) shifted to correct position */ + MODIFY_REG(*configregister, ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset ), GPIO_CRL_CNF0_0 << registeroffset); + + /* ODR default value is 0 */ + CLEAR_BIT(GPIOx->ODR, iocurrent); + + /*------------------------- EXTI Mode Configuration --------------------*/ + /* Clear the External Interrupt or Event for the current IO */ + + tmp = AFIO->EXTICR[position >> 2]; + tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03))); + if(tmp == (GPIO_GET_INDEX(GPIOx) << (4 * (position & 0x03)))) + { + tmp = ((uint32_t)0x0F) << (4 * (position & 0x03)); + CLEAR_BIT(AFIO->EXTICR[position >> 2], tmp); + + /* Clear EXTI line configuration */ + CLEAR_BIT(EXTI->IMR, (uint32_t)iocurrent); + CLEAR_BIT(EXTI->EMR, (uint32_t)iocurrent); + + /* Clear Rising Falling edge configuration */ + CLEAR_BIT(EXTI->RTSR, (uint32_t)iocurrent); + CLEAR_BIT(EXTI->FTSR, (uint32_t)iocurrent); + } + } + + position++; + } +} + +/** + * @} + */ + +/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions + * @brief GPIO Read and Write + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the GPIOs. + +@endverbatim + * @{ + */ +/** + * @brief Reads the specified input port pin. + * @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral + * @param GPIO_Pin: specifies the port bit to read. + * This parameter can be GPIO_PIN_x where x can be (0..15). + * @retval The input port pin value. + */ +GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + GPIO_PinState bitstatus; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) + { + bitstatus = GPIO_PIN_SET; + } + else + { + bitstatus = GPIO_PIN_RESET; + } + return bitstatus; +} + +/** + * @brief Sets or clears the selected data port bit. + * + * @note This function uses GPIOx_BSRR register to allow atomic read/modify + * accesses. In this way, there is no risk of an IRQ occurring between + * the read and the modify access. + * + * @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral + * @param GPIO_Pin: specifies the port bit to be written. + * This parameter can be one of GPIO_PIN_x where x can be (0..15). + * @param PinState: specifies the value to be written to the selected bit. + * This parameter can be one of the GPIO_PinState enum values: + * @arg GPIO_BIT_RESET: to clear the port pin + * @arg GPIO_BIT_SET: to set the port pin + * @retval None + */ +void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) +{ + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + assert_param(IS_GPIO_PIN_ACTION(PinState)); + + if(PinState != GPIO_PIN_RESET) + { + GPIOx->BSRR = GPIO_Pin; + } + else + { + GPIOx->BSRR = (uint32_t)GPIO_Pin << 16; + } +} + +/** + * @brief Toggles the specified GPIO pin + * @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral + * @param GPIO_Pin: Specifies the pins to be toggled. + * @retval None + */ +void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + GPIOx->ODR ^= GPIO_Pin; +} + +/** +* @brief Locks GPIO Pins configuration registers. +* @note The locking mechanism allows the IO configuration to be frozen. When the LOCK sequence +* has been applied on a port bit, it is no longer possible to modify the value of the port bit until +* the next reset. +* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral +* @param GPIO_Pin: specifies the port bit to be locked. +* This parameter can be any combination of GPIO_Pin_x where x can be (0..15). +* @retval None +*/ +HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + __IO uint32_t tmp = GPIO_LCKR_LCKK; + + /* Check the parameters */ + assert_param(IS_GPIO_LOCK_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* Apply lock key write sequence */ + SET_BIT(tmp, GPIO_Pin); + /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */ + GPIOx->LCKR = tmp; + /* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */ + GPIOx->LCKR = GPIO_Pin; + /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */ + GPIOx->LCKR = tmp; + /* Read LCKK bit*/ + tmp = GPIOx->LCKR; + + if((uint32_t)(GPIOx->LCKR & GPIO_LCKR_LCKK)) + { + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief This function handles EXTI interrupt request. + * @param GPIO_Pin: Specifies the pins connected EXTI line + * @retval None + */ +void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) +{ + /* EXTI line interrupt detected */ + if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) + { + __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + HAL_GPIO_EXTI_Callback(GPIO_Pin); + } +} + +/** + * @brief EXTI line detection callback + * @param GPIO_Pin: Specifies the pins connected EXTI line + * @retval None + */ +__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(GPIO_Pin); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_GPIO_EXTI_Callback could be implemented in the user file + */ +} + +/** + * @} + */ + + +/** + * @} + */ + +#endif /* HAL_GPIO_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,145 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_gpio_ex.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief GPIO Extension HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the General Purpose Input/Output (GPIO) extension peripheral. + * + Extended features functions + * + @verbatim + ============================================================================== + ##### GPIO Peripheral extension features ##### + ============================================================================== + [..] GPIO module on STM32F1 family, manage also the AFIO register: + (+) Possibility to use the EVENTOUT Cortex feature + + ##### How to use this driver ##### + ============================================================================== + [..] This driver provides functions to use EVENTOUT Cortex feature + (#) Configure EVENTOUT Cortex feature using the function HAL_GPIOEx_ConfigEventout() + (#) Activate EVENTOUT Cortex feature using the HAL_GPIOEx_EnableEventout() + (#) Deactivate EVENTOUT Cortex feature using the HAL_GPIOEx_DisableEventout() + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIOEx GPIOEx + * @brief GPIO HAL module driver + * @{ + */ + +#ifdef HAL_GPIO_MODULE_ENABLED + +/** @defgroup GPIOEx_Exported_Functions GPIOEx Exported Functions + * @{ + */ + +/** @defgroup GPIOEx_Exported_Functions_Group1 Extended features functions + * @brief Extended features functions + * +@verbatim + ============================================================================== + ##### Extended features functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) Configure EVENTOUT Cortex feature using the function HAL_GPIOEx_ConfigEventout() + (+) Activate EVENTOUT Cortex feature using the HAL_GPIOEx_EnableEventout() + (+) Deactivate EVENTOUT Cortex feature using the HAL_GPIOEx_DisableEventout() + +@endverbatim + * @{ + */ + +/** + * @brief Configures the port and pin on which the EVENTOUT Cortex signal will be connected. + * @param GPIO_PortSource Select the port used to output the Cortex EVENTOUT signal. + * This parameter can be a value of @ref GPIOEx_EVENTOUT_PORT. + * @param GPIO_PinSource Select the pin used to output the Cortex EVENTOUT signal. + * This parameter can be a value of @ref GPIOEx_EVENTOUT_PIN. + * @retval None + */ +void HAL_GPIOEx_ConfigEventout(uint32_t GPIO_PortSource, uint32_t GPIO_PinSource) +{ + /* Verify the parameters */ + assert_param(IS_AFIO_EVENTOUT_PORT(GPIO_PortSource)); + assert_param(IS_AFIO_EVENTOUT_PIN(GPIO_PinSource)); + + /* Apply the new configuration */ + MODIFY_REG(AFIO->EVCR, (AFIO_EVCR_PORT)|(AFIO_EVCR_PIN), (GPIO_PortSource)|(GPIO_PinSource)); +} + +/** + * @brief Enables the Event Output. + * @retval None + */ +void HAL_GPIOEx_EnableEventout(void) +{ + SET_BIT(AFIO->EVCR, AFIO_EVCR_EVOE); +} + +/** + * @brief Disables the Event Output. + * @retval None + */ +void HAL_GPIOEx_DisableEventout(void) +{ + CLEAR_BIT(AFIO->EVCR, AFIO_EVCR_EVOE); +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_GPIO_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,636 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_pwr.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief PWR HAL module driver. + * + * This file provides firmware functions to manage the following + * functionalities of the Power Controller (PWR) peripheral: + * + Initialization/de-initialization functions + * + Peripheral Control functions + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup PWR PWR + * @brief PWR HAL module driver + * @{ + */ + +#ifdef HAL_PWR_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/** @defgroup PWR_Private_Constants PWR Private Constants + * @{ + */ + +/** @defgroup PWR_PVD_Mode_Mask PWR PVD Mode Mask + * @{ + */ +#define PVD_MODE_IT ((uint32_t)0x00010000) +#define PVD_MODE_EVT ((uint32_t)0x00020000) +#define PVD_RISING_EDGE ((uint32_t)0x00000001) +#define PVD_FALLING_EDGE ((uint32_t)0x00000002) +/** + * @} + */ + + +/** @defgroup PWR_register_alias_address PWR Register alias address + * @{ + */ +/* ------------- PWR registers bit address in the alias region ---------------*/ +#define PWR_OFFSET (PWR_BASE - PERIPH_BASE) +#define PWR_CR_OFFSET 0x00 +#define PWR_CSR_OFFSET 0x04 +#define PWR_CR_OFFSET_BB (PWR_OFFSET + PWR_CR_OFFSET) +#define PWR_CSR_OFFSET_BB (PWR_OFFSET + PWR_CSR_OFFSET) +/** + * @} + */ + +/** @defgroup PWR_CR_register_alias PWR CR Register alias address + * @{ + */ +/* --- CR Register ---*/ +/* Alias word address of LPSDSR bit */ +#define LPSDSR_BIT_NUMBER POSITION_VAL(PWR_CR_LPDS) +#define CR_LPSDSR_BB ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32) + (LPSDSR_BIT_NUMBER * 4))) + +/* Alias word address of DBP bit */ +#define DBP_BIT_NUMBER POSITION_VAL(PWR_CR_DBP) +#define CR_DBP_BB ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32) + (DBP_BIT_NUMBER * 4))) + +/* Alias word address of PVDE bit */ +#define PVDE_BIT_NUMBER POSITION_VAL(PWR_CR_PVDE) +#define CR_PVDE_BB ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32) + (PVDE_BIT_NUMBER * 4))) + +/** + * @} + */ + +/** @defgroup PWR_CSR_register_alias PWR CSR Register alias address + * @{ + */ + +/* --- CSR Register ---*/ +/* Alias word address of EWUP1 bit */ +#define CSR_EWUP_BB(VAL) ((uint32_t)(PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32) + (POSITION_VAL(VAL) * 4))) +/** + * @} + */ + +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup PWR_Private_Functions PWR Private Functions + * brief WFE cortex command overloaded for HAL_PWR_EnterSTOPMode usage only (see Workaround section) + * @{ + */ +static void PWR_OverloadWfe(void); + +/* Private functions ---------------------------------------------------------*/ +__NOINLINE +static void PWR_OverloadWfe(void) +{ + __asm volatile( "wfe" ); + __asm volatile( "nop" ); +} + +/** + * @} + */ + + +/** @defgroup PWR_Exported_Functions PWR Exported Functions + * @{ + */ + +/** @defgroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + After reset, the backup domain (RTC registers, RTC backup data + registers) is protected against possible unwanted + write accesses. + To enable access to the RTC Domain and RTC registers, proceed as follows: + (+) Enable the Power Controller (PWR) APB1 interface clock using the + __HAL_RCC_PWR_CLK_ENABLE() macro. + (+) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function. + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the PWR peripheral registers to their default reset values. + * @retval None + */ +void HAL_PWR_DeInit(void) +{ + __HAL_RCC_PWR_FORCE_RESET(); + __HAL_RCC_PWR_RELEASE_RESET(); +} + +/** + * @brief Enables access to the backup domain (RTC registers, RTC + * backup data registers ). + * @note If the HSE divided by 128 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @retval None + */ +void HAL_PWR_EnableBkUpAccess(void) +{ + /* Enable access to RTC and backup registers */ + *(__IO uint32_t *) CR_DBP_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables access to the backup domain (RTC registers, RTC + * backup data registers). + * @note If the HSE divided by 128 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @retval None + */ +void HAL_PWR_DisableBkUpAccess(void) +{ + /* Disable access to RTC and backup registers */ + *(__IO uint32_t *) CR_DBP_BB = (uint32_t)DISABLE; +} + +/** + * @} + */ + +/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions + * @brief Low Power modes configuration functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + + *** PVD configuration *** + ========================= + [..] + (+) The PVD is used to monitor the VDD power supply by comparing it to a + threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR). + + (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower + than the PVD threshold. This event is internally connected to the EXTI + line16 and can generate an interrupt if enabled. This is done through + __HAL_PVD_EXTI_ENABLE_IT() macro. + (+) The PVD is stopped in Standby mode. + + *** WakeUp pin configuration *** + ================================ + [..] + (+) WakeUp pin is used to wake up the system from Standby mode. This pin is + forced in input pull-down configuration and is active on rising edges. + (+) There is one WakeUp pin: + WakeUp Pin 1 on PA.00. + + [..] + + *** Low Power modes configuration *** + ===================================== + [..] + The device features 3 low-power modes: + (+) Sleep mode: CPU clock off, all peripherals including Cortex-M3 core peripherals like + NVIC, SysTick, etc. are kept running + (+) Stop mode: All clocks are stopped + (+) Standby mode: 1.8V domain powered off + + + *** Sleep mode *** + ================== + [..] + (+) Entry: + The Sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFx) + functions with + (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction + (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction + + (+) Exit: + (++) WFI entry mode, Any peripheral interrupt acknowledged by the nested vectored interrupt + controller (NVIC) can wake up the device from Sleep mode. + (++) WFE entry mode, Any wakeup event can wake up the device from Sleep mode. + (+++) Any peripheral interrupt w/o NVIC configuration & SEVONPEND bit set in the Cortex (HAL_PWR_EnableSEVOnPend) + (+++) Any EXTI Line (Internal or External) configured in Event mode + + *** Stop mode *** + ================= + [..] + The Stop mode is based on the Cortex-M3 deepsleep mode combined with peripheral + clock gating. The voltage regulator can be configured either in normal or low-power mode. + In Stop mode, all clocks in the 1.8 V domain are stopped, the PLL, the HSI and the HSE RC + oscillators are disabled. SRAM and register contents are preserved. + In Stop mode, all I/O pins keep the same state as in Run mode. + + (+) Entry: + The Stop mode is entered using the HAL_PWR_EnterSTOPMode(PWR_REGULATOR_VALUE, PWR_SLEEPENTRY_WFx ) + function with: + (++) PWR_REGULATOR_VALUE= PWR_MAINREGULATOR_ON: Main regulator ON. + (++) PWR_REGULATOR_VALUE= PWR_LOWPOWERREGULATOR_ON: Low Power regulator ON. + (++) PWR_SLEEPENTRY_WFx= PWR_SLEEPENTRY_WFI: enter STOP mode with WFI instruction + (++) PWR_SLEEPENTRY_WFx= PWR_SLEEPENTRY_WFE: enter STOP mode with WFE instruction + (+) Exit: + (++) WFI entry mode, Any EXTI Line (Internal or External) configured in Interrupt mode with NVIC configured + (++) WFE entry mode, Any EXTI Line (Internal or External) configured in Event mode. + + *** Standby mode *** + ==================== + [..] + The Standby mode allows to achieve the lowest power consumption. It is based on the + Cortex-M3 deepsleep mode, with the voltage regulator disabled. The 1.8 V domain is + consequently powered off. The PLL, the HSI oscillator and the HSE oscillator are also + switched off. SRAM and register contents are lost except for registers in the Backup domain + and Standby circuitry + + (+) Entry: + (++) The Standby mode is entered using the HAL_PWR_EnterSTANDBYMode() function. + (+) Exit: + (++) WKUP pin rising edge, RTC alarm event rising edge, external Reset in + NRSTpin, IWDG Reset + + *** Auto-wakeup (AWU) from low-power mode *** + ============================================= + [..] + + (+) The MCU can be woken up from low-power mode by an RTC Alarm event, + without depending on an external interrupt (Auto-wakeup mode). + + (+) RTC auto-wakeup (AWU) from the Stop and Standby modes + + (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to + configure the RTC to generate the RTC alarm using the HAL_RTC_SetAlarm_IT() function. + + *** PWR Workarounds linked to Silicon Limitation *** + ==================================================== + [..] + Below the list of all silicon limitations known on STM32F1xx prouct. + + (#)Workarounds Implemented inside PWR HAL Driver + (##)Debugging Stop mode with WFE entry - overloaded the WFE by an internal function + +@endverbatim + * @{ + */ + +/** + * @brief Configures the voltage threshold detected by the Power Voltage Detector(PVD). + * @param sConfigPVD: pointer to an PWR_PVDTypeDef structure that contains the configuration + * information for the PVD. + * @note Refer to the electrical characteristics of your device datasheet for + * more details about the voltage threshold corresponding to each + * detection level. + * @retval None + */ +void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD) +{ + /* Check the parameters */ + assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel)); + assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode)); + + /* Set PLS[7:5] bits according to PVDLevel value */ + MODIFY_REG(PWR->CR, PWR_CR_PLS, sConfigPVD->PVDLevel); + + /* Clear any previous config. Keep it clear if no event or IT mode is selected */ + __HAL_PWR_PVD_EXTI_DISABLE_EVENT(); + __HAL_PWR_PVD_EXTI_DISABLE_IT(); + __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); + __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE(); + + /* Configure interrupt mode */ + if((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT) + { + __HAL_PWR_PVD_EXTI_ENABLE_IT(); + } + + /* Configure event mode */ + if((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT) + { + __HAL_PWR_PVD_EXTI_ENABLE_EVENT(); + } + + /* Configure the edge */ + if((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE) + { + __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE(); + } + + if((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE) + { + __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE(); + } +} + +/** + * @brief Enables the Power Voltage Detector(PVD). + * @retval None + */ +void HAL_PWR_EnablePVD(void) +{ + /* Enable the power voltage detector */ + *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Power Voltage Detector(PVD). + * @retval None + */ +void HAL_PWR_DisablePVD(void) +{ + /* Disable the power voltage detector */ + *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)DISABLE; +} + +/** + * @brief Enables the WakeUp PINx functionality. + * @param WakeUpPinx: Specifies the Power Wake-Up pin to enable. + * This parameter can be one of the following values: + * @arg PWR_WAKEUP_PIN1 + * @retval None + */ +void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx) +{ + /* Check the parameter */ + assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx)); + /* Enable the EWUPx pin */ + *(__IO uint32_t *) CSR_EWUP_BB(WakeUpPinx) = (uint32_t)ENABLE; +} + +/** + * @brief Disables the WakeUp PINx functionality. + * @param WakeUpPinx: Specifies the Power Wake-Up pin to disable. + * This parameter can be one of the following values: + * @arg PWR_WAKEUP_PIN1 + * @retval None + */ +void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx) +{ + /* Check the parameter */ + assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx)); + /* Disable the EWUPx pin */ + *(__IO uint32_t *) CSR_EWUP_BB(WakeUpPinx) = (uint32_t)DISABLE; +} + +/** + * @brief Enters Sleep mode. + * @note In Sleep mode, all I/O pins keep the same state as in Run mode. + * @param Regulator: Regulator state as no effect in SLEEP mode - allows to support portability from legacy software + * @param SLEEPEntry: Specifies if SLEEP mode is entered with WFI or WFE instruction. + * When WFI entry is used, tick interrupt have to be disabled if not desired as + * the interrupt wake up source. + * This parameter can be one of the following values: + * @arg PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction + * @arg PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction + * @retval None + */ +void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry) +{ + /* Check the parameters */ + /* No check on Regulator because parameter not used in SLEEP mode */ + assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry)); + + /* Clear SLEEPDEEP bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); + + /* Select SLEEP mode entry -------------------------------------------------*/ + if(SLEEPEntry == PWR_SLEEPENTRY_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __SEV(); + __WFE(); + __WFE(); + } +} + +/** + * @brief Enters Stop mode. + * @note In Stop mode, all I/O pins keep the same state as in Run mode. + * @note When exiting Stop mode by using an interrupt or a wakeup event, + * HSI RC oscillator is selected as system clock. + * @note When the voltage regulator operates in low power mode, an additional + * startup delay is incurred when waking up from Stop mode. + * By keeping the internal regulator ON during Stop mode, the consumption + * is higher although the startup time is reduced. + * @param Regulator: Specifies the regulator state in Stop mode. + * This parameter can be one of the following values: + * @arg PWR_MAINREGULATOR_ON: Stop mode with regulator ON + * @arg PWR_LOWPOWERREGULATOR_ON: Stop mode with low power regulator ON + * @param STOPEntry: Specifies if Stop mode in entered with WFI or WFE instruction. + * This parameter can be one of the following values: + * @arg PWR_STOPENTRY_WFI: Enter Stop mode with WFI instruction + * @arg PWR_STOPENTRY_WFE: Enter Stop mode with WFE instruction + * @retval None + */ +void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry) +{ + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR(Regulator)); + assert_param(IS_PWR_STOP_ENTRY(STOPEntry)); + + /* Clear PDDS bit in PWR register to specify entering in STOP mode when CPU enter in Deepsleep */ + CLEAR_BIT(PWR->CR, PWR_CR_PDDS); + + /* Select the voltage regulator mode by setting LPDS bit in PWR register according to Regulator parameter value */ + MODIFY_REG(PWR->CR, PWR_CR_LPDS, Regulator); + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); + + /* Select Stop mode entry --------------------------------------------------*/ + if(STOPEntry == PWR_STOPENTRY_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __SEV(); + PWR_OverloadWfe(); /* WFE redefine locally */ + PWR_OverloadWfe(); /* WFE redefine locally */ + } + /* Reset SLEEPDEEP bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); +} + +/** + * @brief Enters Standby mode. + * @note In Standby mode, all I/O pins are high impedance except for: + * - Reset pad (still available) + * - TAMPER pin if configured for tamper or calibration out. + * - WKUP pin (PA0) if enabled. + * @retval None + */ +void HAL_PWR_EnterSTANDBYMode(void) +{ + /* Select Standby mode */ + SET_BIT(PWR->CR, PWR_CR_PDDS); + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); + + /* This option is used to ensure that store operations are completed */ +#if defined ( __CC_ARM) + __force_stores(); +#endif + /* Request Wait For Interrupt */ + __WFI(); +} + + +/** + * @brief Indicates Sleep-On-Exit when returning from Handler mode to Thread mode. + * @note Set SLEEPONEXIT bit of SCR register. When this bit is set, the processor + * re-enters SLEEP mode when an interruption handling is over. + * Setting this bit is useful when the processor is expected to run only on + * interruptions handling. + * @retval None + */ +void HAL_PWR_EnableSleepOnExit(void) +{ + /* Set SLEEPONEXIT bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + + +/** + * @brief Disables Sleep-On-Exit feature when returning from Handler mode to Thread mode. + * @note Clears SLEEPONEXIT bit of SCR register. When this bit is set, the processor + * re-enters SLEEP mode when an interruption handling is over. + * @retval None + */ +void HAL_PWR_DisableSleepOnExit(void) +{ + /* Clear SLEEPONEXIT bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + + +/** + * @brief Enables CORTEX M3 SEVONPEND bit. + * @note Sets SEVONPEND bit of SCR register. When this bit is set, this causes + * WFE to wake up when an interrupt moves from inactive to pended. + * @retval None + */ +void HAL_PWR_EnableSEVOnPend(void) +{ + /* Set SEVONPEND bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + + +/** + * @brief Disables CORTEX M3 SEVONPEND bit. + * @note Clears SEVONPEND bit of SCR register. When this bit is set, this causes + * WFE to wake up when an interrupt moves from inactive to pended. + * @retval None + */ +void HAL_PWR_DisableSEVOnPend(void) +{ + /* Clear SEVONPEND bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + + + +/** + * @brief This function handles the PWR PVD interrupt request. + * @note This API should be called under the PVD_IRQHandler(). + * @retval None + */ +void HAL_PWR_PVD_IRQHandler(void) +{ + /* Check PWR exti flag */ + if(__HAL_PWR_PVD_EXTI_GET_FLAG() != RESET) + { + /* PWR PVD interrupt user callback */ + HAL_PWR_PVDCallback(); + + /* Clear PWR Exti pending bit */ + __HAL_PWR_PVD_EXTI_CLEAR_FLAG(); + } +} + +/** + * @brief PWR PVD interrupt callback + * @retval None + */ +__weak void HAL_PWR_PVDCallback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_PWR_PVDCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_PWR_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1270 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_rcc.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief RCC HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Reset and Clock Control (RCC) peripheral: + * + Initialization and de-initialization functions + * + Peripheral Control functions + * + @verbatim + ============================================================================== + ##### RCC specific features ##### + ============================================================================== + [..] + After reset the device is running from Internal High Speed oscillator + (HSI 8MHz) with Flash 0 wait state, Flash prefetch buffer is enabled, + and all peripherals are off except internal SRAM, Flash and JTAG. + (+) There is no prescaler on High speed (AHB) and Low speed (APB) buses; + all peripherals mapped on these buses are running at HSI speed. + (+) The clock for all peripherals is switched off, except the SRAM and FLASH. + (+) All GPIOs are in input floating state, except the JTAG pins which + are assigned to be used for debug purpose. + [..] Once the device started from reset, the user application has to: + (+) Configure the clock source to be used to drive the System clock + (if the application needs higher frequency/performance) + (+) Configure the System clock frequency and Flash settings + (+) Configure the AHB and APB buses prescalers + (+) Enable the clock for the peripheral(s) to be used + (+) Configure the clock source(s) for peripherals whose clocks are not + derived from the System clock (I2S, RTC, ADC, USB OTG FS) + + ##### RCC Limitations ##### + ============================================================================== + [..] + A delay between an RCC peripheral clock enable and the effective peripheral + enabling should be taken into account in order to manage the peripheral read/write + from/to registers. + (+) This delay depends on the peripheral mapping. + (++) AHB & APB peripherals, 1 dummy read is necessary + + [..] + Workarounds: + (#) For AHB & APB peripherals, a dummy read to the peripheral register has been + inserted in each __HAL_RCC_PPP_CLK_ENABLE() macro. + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** +*/ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup RCC RCC +* @brief RCC HAL module driver + * @{ + */ + +#ifdef HAL_RCC_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup RCC_Private_Constants RCC Private Constants + * @{ + */ +/* Bits position in in the CFGR register */ +#define RCC_CFGR_HPRE_BITNUMBER POSITION_VAL(RCC_CFGR_HPRE) +#define RCC_CFGR_PPRE1_BITNUMBER POSITION_VAL(RCC_CFGR_PPRE1) +#define RCC_CFGR_PPRE2_BITNUMBER POSITION_VAL(RCC_CFGR_PPRE2) +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/** @defgroup RCC_Private_Macros RCC Private Macros + * @{ + */ + +#define MCO1_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define MCO1_GPIO_PORT GPIOA +#define MCO1_PIN GPIO_PIN_8 + +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/** @defgroup RCC_Private_Variables RCC Private Variables + * @{ + */ +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Functions RCC Exported Functions + * @{ + */ + +/** @defgroup RCC_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * + @verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to configure the internal/external oscillators + (HSE, HSI, LSE, LSI, PLL, CSS and MCO) and the System buses clocks (SYSCLK, AHB, APB1 + and APB2). + + [..] Internal/external clock and PLL configuration + (#) HSI (high-speed internal), 8 MHz factory-trimmed RC used directly or through + the PLL as System clock source. + (#) LSI (low-speed internal), ~40 KHz low consumption RC used as IWDG and/or RTC + clock source. + + (#) HSE (high-speed external), 4 to 24 MHz (STM32F100xx) or 4 to 16 MHz (STM32F101x/STM32F102x/STM32F103x) or 3 to 25 MHz (STM32F105x/STM32F107x) crystal oscillator used directly or + through the PLL as System clock source. Can be used also as RTC clock source. + + (#) LSE (low-speed external), 32 KHz oscillator used as RTC clock source. + + (#) PLL (clocked by HSI or HSE), featuring different output clocks: + (++) The first output is used to generate the high speed system clock (up to 72 MHz for STM32F10xxx or up to 24 MHz for STM32F100xx) + (++) The second output is used to generate the clock for the USB OTG FS (48 MHz) + + (#) CSS (Clock security system), once enable using the macro __HAL_RCC_CSS_ENABLE() + and if a HSE clock failure occurs(HSE used directly or through PLL as System + clock source), the System clocks automatically switched to HSI and an interrupt + is generated if enabled. The interrupt is linked to the Cortex-M3 NMI + (Non-Maskable Interrupt) exception vector. + + (#) MCO1 (microcontroller clock output), used to output SYSCLK, HSI, + HSE or PLL clock (divided by 2) on PA8 pin + PLL2CLK, PLL3CLK/2, PLL3CLK and XTI for STM32F105x/STM32F107x + + [..] System, AHB and APB buses clocks configuration + (#) Several clock sources can be used to drive the System clock (SYSCLK): HSI, + HSE and PLL. + The AHB clock (HCLK) is derived from System clock through configurable + prescaler and used to clock the CPU, memory and peripherals mapped + on AHB bus (DMA, GPIO...). APB1 (PCLK1) and APB2 (PCLK2) clocks are derived + from AHB clock through configurable prescalers and used to clock + the peripherals mapped on these buses. You can use + "@ref HAL_RCC_GetSysClockFreq()" function to retrieve the frequencies of these clocks. + + -@- All the peripheral clocks are derived from the System clock (SYSCLK) except: + (+@) RTC: RTC clock can be derived either from the LSI, LSE or HSE clock + divided by 128. + (+@) USB OTG FS and RTC: USB OTG FS require a frequency equal to 48 MHz + to work correctly. This clock is derived of the main PLL through PLL Multiplier. + (+@) I2S interface on STM32F105x/STM32F107x can be derived from PLL3CLK + (+@) IWDG clock which is always the LSI clock. + + (#) For STM32F10xxx, the maximum frequency of the SYSCLK and HCLK/PCLK2 is 72 MHz, PCLK1 36 MHz. + For STM32F100xx, the maximum frequency of the SYSCLK and HCLK/PCLK1/PCLK2 is 24 MHz. + Depending on the SYSCLK frequency, the flash latency should be adapted accordingly. + @endverbatim + * @{ + */ + +/* + Additional consideration on the SYSCLK based on Latency settings: + +-----------------------------------------------+ + | Latency | SYSCLK clock frequency (MHz) | + |---------------|-------------------------------| + |0WS(1CPU cycle)| 0 < SYSCLK <= 24 | + |---------------|-------------------------------| + |1WS(2CPU cycle)| 24 < SYSCLK <= 48 | + |---------------|-------------------------------| + |2WS(3CPU cycle)| 48 < SYSCLK <= 72 | + +-----------------------------------------------+ + */ + +/** + * @brief Resets the RCC clock configuration to the default reset state. + * @note The default reset state of the clock configuration is given below: + * - HSI ON and used as system clock source + * - HSE and PLL OFF + * - AHB, APB1 and APB2 prescaler set to 1. + * - CSS and MCO1 OFF + * - All interrupts disabled + * @note This function does not modify the configuration of the + * - Peripheral clocks + * - LSI, LSE and RTC clocks + * @retval None + */ +void HAL_RCC_DeInit(void) +{ + /* Switch SYSCLK to HSI */ + CLEAR_BIT(RCC->CFGR, RCC_CFGR_SW); + + /* Reset HSEON, CSSON, & PLLON bits */ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_CSSON | RCC_CR_PLLON); + + /* Reset HSEBYP bit */ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); + + /* Reset CFGR register */ + CLEAR_REG(RCC->CFGR); + + /* Set HSITRIM bits to the reset value */ + MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, ((uint32_t)0x10 << POSITION_VAL(RCC_CR_HSITRIM))); + +#if (defined(STM32F105xC) || defined(STM32F107xC) || defined (STM32F100xB) || defined (STM32F100xE)) + /* Reset CFGR2 register */ + CLEAR_REG(RCC->CFGR2); + +#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */ + /* Disable all interrupts */ + CLEAR_REG(RCC->CIR); + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HSI_VALUE; +} + +/** + * @brief Initializes the RCC Oscillators according to the specified parameters in the + * RCC_OscInitTypeDef. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that + * contains the configuration information for the RCC Oscillators. + * @note The PLL is not disabled when used as system clock. + * @note The PLL is not disabled when USB OTG FS clock is enabled (specific to devices with USB FS) + * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not + * supported by this macro. User should request a transition to LSE Off + * first and then LSE On or LSE Bypass. + * @note Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not + * supported by this macro. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + uint32_t tickstart = 0; + + /* Check the parameters */ + assert_param(RCC_OscInitStruct != NULL); + assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); + + /*------------------------------- HSE Configuration ------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) + { + /* Check the parameters */ + assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState)); + + /* When the HSE is used as system clock or clock source for PLL in these cases it is not allowed to be disabled */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE) + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE))) + { + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + { + return HAL_ERROR; + } + } + else + { + /* Set the new HSE configuration ---------------------------------------*/ + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + + + /* Check the HSE State */ + if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF) + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSE is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*----------------------------- HSI Configuration --------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) + { + /* Check the parameters */ + assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); + assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); + + /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI) + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI_DIV2))) + { + /* When HSI is used as system clock it will not disabled */ + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + { + return HAL_ERROR; + } + /* Otherwise, just the calibration is allowed */ + else + { + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + } + else + { + /* Check the HSI State */ + if(RCC_OscInitStruct->HSIState != RCC_HSI_OFF) + { + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + else + { + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSI is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*------------------------------ LSI Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) + { + /* Check the parameters */ + assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); + + /* Check the LSI State */ + if(RCC_OscInitStruct->LSIState != RCC_LSI_OFF) + { + /* Enable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* To have a fully stabilized clock in the specified range, a software delay of 1ms + should be added.*/ + HAL_Delay(1); + } + else + { + /* Disable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSI is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + /*------------------------------ LSE Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) + { + /* Check the parameters */ + assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + + while((PWR->CR & PWR_CR_DBP) == RESET) + { + if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Set the new LSE configuration -----------------------------------------*/ + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + /* Check the LSE State */ + if(RCC_OscInitStruct->LSEState != RCC_LSE_OFF) + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + +#if defined(RCC_CR_PLL2ON) + /*-------------------------------- PLL2 Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL2(RCC_OscInitStruct->PLL2.PLL2State)); + if ((RCC_OscInitStruct->PLL2.PLL2State) != RCC_PLL2_NONE) + { + /* This bit can not be cleared if the PLL2 clock is used indirectly as system + clock (i.e. it is used as PLL clock entry that is used as system clock). */ + if((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && \ + (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && \ + ((READ_BIT(RCC->CFGR2,RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) + { + return HAL_ERROR; + } + else + { + if((RCC_OscInitStruct->PLL2.PLL2State) == RCC_PLL2_ON) + { + /* Check the parameters */ + assert_param(IS_RCC_PLL2_MUL(RCC_OscInitStruct->PLL2.PLL2MUL)); + assert_param(IS_RCC_HSE_PREDIV2(RCC_OscInitStruct->PLL2.HSEPrediv2Value)); + + /* Prediv2 can be written only when the PLLI2S is disabled. */ + /* Return an error only if new value is different from the programmed value */ + if (HAL_IS_BIT_SET(RCC->CR,RCC_CR_PLL3ON) && \ + (__HAL_RCC_HSE_GET_PREDIV2() != RCC_OscInitStruct->PLL2.HSEPrediv2Value)) + { + return HAL_ERROR; + } + + /* Disable the main PLL2. */ + __HAL_RCC_PLL2_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL2 is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL2_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Configure the HSE prediv2 factor --------------------------------*/ + __HAL_RCC_HSE_PREDIV2_CONFIG(RCC_OscInitStruct->PLL2.HSEPrediv2Value); + + /* Configure the main PLL2 multiplication factors. */ + __HAL_RCC_PLL2_CONFIG(RCC_OscInitStruct->PLL2.PLL2MUL); + + /* Enable the main PLL2. */ + __HAL_RCC_PLL2_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL2 is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLL2_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Set PREDIV1 source to HSE */ + CLEAR_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC); + + /* Disable the main PLL2. */ + __HAL_RCC_PLL2_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL2 is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL2_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + +#endif /* RCC_CR_PLL2ON */ + /*-------------------------------- PLL Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); + if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) + { + /* Check if the PLL is used as system clock or not */ + if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) + { + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + { + /* Check the parameters */ + assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource)); + assert_param(IS_RCC_PLL_MUL(RCC_OscInitStruct->PLL.PLLMUL)); + + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Configure the HSE prediv factor --------------------------------*/ + /* It can be written only when the PLL is disabled. Not used in PLL source is different than HSE */ + if(RCC_OscInitStruct->PLL.PLLSource == RCC_PLLSOURCE_HSE) + { + /* Check the parameter */ + assert_param(IS_RCC_HSE_PREDIV(RCC_OscInitStruct->HSEPredivValue)); +#if defined(RCC_CFGR2_PREDIV1SRC) + assert_param(IS_RCC_PREDIV1_SOURCE(RCC_OscInitStruct->Prediv1Source)); + + /* Set PREDIV1 source */ + SET_BIT(RCC->CFGR2, RCC_OscInitStruct->Prediv1Source); +#endif /* RCC_CFGR2_PREDIV1SRC */ + + /* Set PREDIV1 Value */ + __HAL_RCC_HSE_PREDIV_CONFIG(RCC_OscInitStruct->HSEPredivValue); + } + + /* Configure the main PLL clock source and multiplication factors. */ + __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, + RCC_OscInitStruct->PLL.PLLMUL); + /* Enable the main PLL. */ + __HAL_RCC_PLL_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + else + { + return HAL_ERROR; + } + } + + return HAL_OK; +} + +/** + * @brief Initializes the CPU, AHB and APB buses clocks according to the specified + * parameters in the RCC_ClkInitStruct. + * @param RCC_ClkInitStruct pointer to an RCC_OscInitTypeDef structure that + * contains the configuration information for the RCC peripheral. + * @param FLatency FLASH Latency + * The value of this parameter depend on device used within the same series + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated by @ref HAL_RCC_GetHCLKFreq() function called within this function + * + * @note The HSI is used (enabled by hardware) as system clock source after + * start-up from Reset, wake-up from STOP and STANDBY mode, or in case + * of failure of the HSE used directly or indirectly as system clock + * (if the Clock Security System CSS is enabled). + * + * @note A switch from one clock source to another occurs only if the target + * clock source is ready (clock stable after start-up delay or PLL locked). + * If a clock source which is not yet ready is selected, the switch will + * occur when the clock source will be ready. + * You can use @ref HAL_RCC_GetClockConfig() function to know which clock is + * currently used as system clock source. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) +{ + uint32_t tickstart = 0; + + /* Check the parameters */ + assert_param(RCC_ClkInitStruct != NULL); + assert_param(IS_RCC_CLOCKTYPE(RCC_ClkInitStruct->ClockType)); + assert_param(IS_FLASH_LATENCY(FLatency)); + + /* To correctly read data from FLASH memory, the number of wait states (LATENCY) + must be correctly programmed according to the frequency of the CPU clock + (HCLK) of the device. */ + +#if defined(FLASH_ACR_LATENCY) + /* Increasing the number of wait states because of higher CPU frequency */ + if(FLatency > (FLASH->ACR & FLASH_ACR_LATENCY)) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + + /* Check that the new number of wait states is taken into account to access the Flash + memory by reading the FLASH_ACR register */ + if((FLASH->ACR & FLASH_ACR_LATENCY) != FLatency) + { + return HAL_ERROR; + } + } + +#endif /* FLASH_ACR_LATENCY */ + /*-------------------------- HCLK Configuration --------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) + { + assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); + } + + /*------------------------- SYSCLK Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) + { + assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); + + /* HSE is selected as System Clock Source */ + if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) + { + /* Check the HSE ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + { + return HAL_ERROR; + } + } + /* PLL is selected as System Clock Source */ + else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) + { + /* Check the PLL ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + return HAL_ERROR; + } + } + /* HSI is selected as System Clock Source */ + else + { + /* Check the HSI ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + { + return HAL_ERROR; + } + } + __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) + { + while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_HSE) + { + if((HAL_GetTick() - tickstart ) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) + { + while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) + { + if((HAL_GetTick() - tickstart ) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_HSI) + { + if((HAL_GetTick() - tickstart ) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } +#if defined(FLASH_ACR_LATENCY) + /* Decreasing the number of wait states because of lower CPU frequency */ + if(FLatency < (FLASH->ACR & FLASH_ACR_LATENCY)) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + + /* Check that the new number of wait states is taken into account to access the Flash + memory by reading the FLASH_ACR register */ + if((FLASH->ACR & FLASH_ACR_LATENCY) != FLatency) + { + return HAL_ERROR; + } + } +#endif /* FLASH_ACR_LATENCY */ + + /*-------------------------- PCLK1 Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); + } + + /*-------------------------- PCLK2 Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3)); + } + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_BITNUMBER]; + + /* Configure the source of time base considering new system clocks settings*/ + HAL_InitTick (TICK_INT_PRIORITY); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup RCC_Exported_Functions_Group2 Peripheral Control functions + * @brief RCC clocks control functions + * + @verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the RCC Clocks + frequencies. + + @endverbatim + * @{ + */ + +/** + * @brief Selects the clock source to output on MCO pin. + * @note MCO pin should be configured in alternate function mode. + * @param RCC_MCOx specifies the output direction for the clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1 Clock source to output on MCO1 pin(PA8). + * @param RCC_MCOSource specifies the clock source to output. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_SYSCLK System clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + @if STM32F105xC + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLL clock divided by 2 selected as MCO source + * @arg @ref RCC_MCO1SOURCE_PLL2CLK PLL2 clock selected as MCO source + * @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO source + * @arg @ref RCC_MCO1SOURCE_EXT_HSE XT1 external 3-25 MHz oscillator clock selected as MCO source + * @arg @ref RCC_MCO1SOURCE_PLL3CLK PLL3 clock selected as MCO source + @endif + @if STM32F107xC + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLL clock divided by 2 selected as MCO source + * @arg @ref RCC_MCO1SOURCE_PLL2CLK PLL2 clock selected as MCO source + * @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO source + * @arg @ref RCC_MCO1SOURCE_EXT_HSE XT1 external 3-25 MHz oscillator clock selected as MCO source + * @arg @ref RCC_MCO1SOURCE_PLL3CLK PLL3 clock selected as MCO source + @endif + * @param RCC_MCODiv specifies the MCO DIV. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 no division applied to MCO clock + * @retval None + */ +void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv) +{ + GPIO_InitTypeDef gpio = {0}; + + /* Check the parameters */ + assert_param(IS_RCC_MCO(RCC_MCOx)); + assert_param(IS_RCC_MCODIV(RCC_MCODiv)); + assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource)); + + /* Configure the MCO1 pin in alternate function mode */ + gpio.Mode = GPIO_MODE_AF_PP; + gpio.Speed = GPIO_SPEED_FREQ_HIGH; + gpio.Pull = GPIO_NOPULL; + gpio.Pin = MCO1_PIN; + + /* MCO1 Clock Enable */ + MCO1_CLK_ENABLE(); + + HAL_GPIO_Init(MCO1_GPIO_PORT, &gpio); + + /* Configure the MCO clock source */ + __HAL_RCC_MCO1_CONFIG(RCC_MCOSource, RCC_MCODiv); +} + +/** + * @brief Enables the Clock Security System. + * @note If a failure is detected on the HSE oscillator clock, this oscillator + * is automatically disabled and an interrupt is generated to inform the + * software about the failure (Clock Security System Interrupt, CSSI), + * allowing the MCU to perform rescue operations. The CSSI is linked to + * the Cortex-M3 NMI (Non-Maskable Interrupt) exception vector. + * @retval None + */ +void HAL_RCC_EnableCSS(void) +{ + *(__IO uint32_t *) RCC_CR_CSSON_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Clock Security System. + * @retval None + */ +void HAL_RCC_DisableCSS(void) +{ + *(__IO uint32_t *) RCC_CR_CSSON_BB = (uint32_t)DISABLE; +} + +/** + * @brief Returns the SYSCLK frequency + * @note The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * @note If SYSCLK source is HSI, function returns values based on HSI_VALUE(*) + * @note If SYSCLK source is HSE, function returns a value based on HSE_VALUE + * divided by PREDIV factor(**) + * @note If SYSCLK source is PLL, function returns a value based on HSE_VALUE + * divided by PREDIV factor(**) or HSI_VALUE(*) multiplied by the PLL factor. + * @note (*) HSI_VALUE is a constant defined in stm32f1xx_hal_conf.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * @note (**) HSE_VALUE is a constant defined in stm32f1xx_hal_conf.h file (default value + * 8 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * @note The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @note This function can be used by the user application to compute the + * baud-rate for the communication peripherals or configure other parameters. + * + * @note Each time SYSCLK changes, this function must be called to update the + * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * @retval SYSCLK frequency + */ +uint32_t HAL_RCC_GetSysClockFreq(void) +{ +#if defined(RCC_CFGR2_PREDIV1SRC) + const uint8_t aPLLMULFactorTable[12] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 13}; + const uint8_t aPredivFactorTable[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16}; +#else + const uint8_t aPLLMULFactorTable[16] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16}; +#if defined(RCC_CFGR2_PREDIV1) + const uint8_t aPredivFactorTable[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16}; +#else + const uint8_t aPredivFactorTable[2] = { 1, 2}; +#endif /*RCC_CFGR2_PREDIV1*/ + +#endif + uint32_t tmpreg = 0, prediv = 0, pllclk = 0, pllmul = 0; + uint32_t sysclockfreq = 0; +#if defined(RCC_CFGR2_PREDIV1SRC) + uint32_t prediv2 = 0, pll2mul = 0; +#endif /*RCC_CFGR2_PREDIV1SRC*/ + + tmpreg = RCC->CFGR; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (tmpreg & RCC_CFGR_SWS) + { + case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */ + { + sysclockfreq = HSE_VALUE; + break; + } + case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */ + { + pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMULL) >> POSITION_VAL(RCC_CFGR_PLLMULL)]; + if ((tmpreg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) + { +#if defined(RCC_CFGR2_PREDIV1) + prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> POSITION_VAL(RCC_CFGR2_PREDIV1)]; +#else + prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> POSITION_VAL(RCC_CFGR_PLLXTPRE)]; +#endif /*RCC_CFGR2_PREDIV1*/ +#if defined(RCC_CFGR2_PREDIV1SRC) + + if(HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) + { + /* PLL2 selected as Prediv1 source */ + /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */ + prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> POSITION_VAL(RCC_CFGR2_PREDIV2)) + 1; + pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> POSITION_VAL(RCC_CFGR2_PLL2MUL)) + 2; + pllclk = (uint32_t)((((HSE_VALUE / prediv2) * pll2mul) / prediv) * pllmul); + } + else + { + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */ + pllclk = (uint32_t)((HSE_VALUE / prediv) * pllmul); + } + + /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */ + /* In this case need to divide pllclk by 2 */ + if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> POSITION_VAL(RCC_CFGR_PLLMULL)]) + { + pllclk = pllclk / 2; + } +#else + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */ + pllclk = (uint32_t)((HSE_VALUE / prediv) * pllmul); +#endif /*RCC_CFGR2_PREDIV1SRC*/ + } + else + { + /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ + pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul); + } + sysclockfreq = pllclk; + break; + } + case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */ + default: /* HSI used as system clock */ + { + sysclockfreq = HSI_VALUE; + break; + } + } + return sysclockfreq; +} + +/** + * @brief Returns the HCLK frequency + * @note Each time HCLK changes, this function must be called to update the + * right HCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated within this function + * @retval HCLK frequency + */ +uint32_t HAL_RCC_GetHCLKFreq(void) +{ + return SystemCoreClock; +} + +/** + * @brief Returns the PCLK1 frequency + * @note Each time PCLK1 changes, this function must be called to update the + * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK1 frequency + */ +uint32_t HAL_RCC_GetPCLK1Freq(void) +{ + /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_BITNUMBER]); +} + +/** + * @brief Returns the PCLK2 frequency + * @note Each time PCLK2 changes, this function must be called to update the + * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK2 frequency + */ +uint32_t HAL_RCC_GetPCLK2Freq(void) +{ + /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_BITNUMBER]); +} + +/** + * @brief Configures the RCC_OscInitStruct according to the internal + * RCC configuration registers. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + /* Check the parameters */ + assert_param(RCC_OscInitStruct != NULL); + + /* Set all possible values for the Oscillator type parameter ---------------*/ + RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI \ + | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI; + +#if defined(RCC_CFGR2_PREDIV1SRC) + /* Get the Prediv1 source --------------------------------------------------*/ + RCC_OscInitStruct->Prediv1Source = READ_BIT(RCC->CFGR2,RCC_CFGR2_PREDIV1SRC); +#endif /* RCC_CFGR2_PREDIV1SRC */ + + /* Get the HSE configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP) + { + RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS; + } + else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON) + { + RCC_OscInitStruct->HSEState = RCC_HSE_ON; + } + else + { + RCC_OscInitStruct->HSEState = RCC_HSE_OFF; + } + RCC_OscInitStruct->HSEPredivValue = __HAL_RCC_HSE_GET_PREDIV(); + + /* Get the HSI configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION) + { + RCC_OscInitStruct->HSIState = RCC_HSI_ON; + } + else + { + RCC_OscInitStruct->HSIState = RCC_HSI_OFF; + } + + RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> POSITION_VAL(RCC_CR_HSITRIM)); + + /* Get the LSE configuration -----------------------------------------------*/ + if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) + { + RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS; + } + else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON) + { + RCC_OscInitStruct->LSEState = RCC_LSE_ON; + } + else + { + RCC_OscInitStruct->LSEState = RCC_LSE_OFF; + } + + /* Get the LSI configuration -----------------------------------------------*/ + if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION) + { + RCC_OscInitStruct->LSIState = RCC_LSI_ON; + } + else + { + RCC_OscInitStruct->LSIState = RCC_LSI_OFF; + } + + + /* Get the PLL configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON) + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON; + } + else + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF; + } + RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLSRC); + RCC_OscInitStruct->PLL.PLLMUL = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLMULL); +#if defined(RCC_CR_PLL2ON) + /* Get the PLL2 configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_PLL2ON) == RCC_CR_PLL2ON) + { + RCC_OscInitStruct->PLL2.PLL2State = RCC_PLL2_ON; + } + else + { + RCC_OscInitStruct->PLL2.PLL2State = RCC_PLL2_OFF; + } + RCC_OscInitStruct->PLL2.HSEPrediv2Value = __HAL_RCC_HSE_GET_PREDIV2(); + RCC_OscInitStruct->PLL2.PLL2MUL = (uint32_t)(RCC->CFGR2 & RCC_CFGR2_PLL2MUL); +#endif /* RCC_CR_PLL2ON */ +} + +/** + * @brief Get the RCC_ClkInitStruct according to the internal + * RCC configuration registers. + * @param RCC_ClkInitStruct pointer to an RCC_ClkInitTypeDef structure that + * contains the current clock configuration. + * @param pFLatency Pointer on the Flash Latency. + * @retval None + */ +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency) +{ + /* Check the parameters */ + assert_param(RCC_ClkInitStruct != NULL); + assert_param(pFLatency != NULL); + + /* Set all possible values for the Clock type parameter --------------------*/ + RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; + + /* Get the SYSCLK configuration --------------------------------------------*/ + RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW); + + /* Get the HCLK configuration ----------------------------------------------*/ + RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_HPRE); + + /* Get the APB1 configuration ----------------------------------------------*/ + RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_PPRE1); + + /* Get the APB2 configuration ----------------------------------------------*/ + RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)((RCC->CFGR & RCC_CFGR_PPRE2) >> 3); + +#if defined(FLASH_ACR_LATENCY) + /* Get the Flash Wait State (Latency) configuration ------------------------*/ + *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY); +#else + /* For VALUE lines devices, only LATENCY_0 can be set*/ + *pFLatency = (uint32_t)FLASH_LATENCY_0; +#endif +} + +/** + * @brief This function handles the RCC CSS interrupt request. + * @note This API should be called under the NMI_Handler(). + * @retval None + */ +void HAL_RCC_NMI_IRQHandler(void) +{ + /* Check RCC CSSF flag */ + if(__HAL_RCC_GET_IT(RCC_IT_CSS)) + { + /* RCC Clock Security System interrupt user callback */ + HAL_RCC_CSSCallback(); + + /* Clear RCC CSS pending bit */ + __HAL_RCC_CLEAR_IT(RCC_IT_CSS); + } +} + +/** + * @brief RCC Clock Security System interrupt callback + * @retval none + */ +__weak void HAL_RCC_CSSCallback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_RCC_CSSCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_RCC_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,870 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_rcc_ex.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief Extended RCC HAL module driver. + * This file provides firmware functions to manage the following + * functionalities RCC extension peripheral: + * + Extended Peripheral Control functions + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +#ifdef HAL_RCC_MODULE_ENABLED + +/** @defgroup RCCEx RCCEx + * @brief RCC Extension HAL module driver. + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup RCCEx_Private_Constants RCCEx Private Constants + * @{ + */ +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup RCCEx_Private_Macros RCCEx Private Macros + * @{ + */ +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup RCCEx_Exported_Functions RCCEx Exported Functions + * @{ + */ + +/** @defgroup RCCEx_Exported_Functions_Group1 Peripheral Control functions + * @brief Extended Peripheral Control functions + * +@verbatim + =============================================================================== + ##### Extended Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the RCC Clocks + frequencies. + [..] + (@) Important note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to + select the RTC clock source; in this case the Backup domain will be reset in + order to modify the RTC Clock source, as consequence RTC registers (including + the backup registers) are set to their reset values. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified parameters in the + * RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals clocks(RTC clock). + * + * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select + * the RTC clock source; in this case the Backup domain will be reset in + * order to modify the RTC Clock source, as consequence RTC registers (including + * the backup registers) are set to their reset values. + * + * @note In case of STM32F105xC or STM32F107xC devices, PLLI2S will be enabled if requested on + * one of 2 I2S interfaces. When PLLI2S is enabled, you need to call HAL_RCCEx_DisablePLLI2S to + * manually disable it. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0, temp_reg = 0; +#if defined(STM32F105xC) || defined(STM32F107xC) + uint32_t pllactive = 0; +#endif /* STM32F105xC || STM32F107xC */ + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*------------------------------- RTC/LCD Configuration ------------------------*/ + if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)) + { + /* check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + + while((PWR->CR & PWR_CR_DBP) == RESET) + { + if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + temp_reg = (RCC->BDCR & RCC_BDCR_RTCSEL); + if((temp_reg != 0x00000000U) && (temp_reg != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + temp_reg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = temp_reg; + + /* Wait for LSERDY if LSE was enabled */ + if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSEON)) + { + /* Get timeout */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + + /*------------------------------ ADC clock Configuration ------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) + { + /* Check the parameters */ + assert_param(IS_RCC_ADCPLLCLK_DIV(PeriphClkInit->AdcClockSelection)); + + /* Configure the ADC clock source */ + __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection); + } + +#if defined(STM32F105xC) || defined(STM32F107xC) + /*------------------------------ I2S2 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) + { + /* Check the parameters */ + assert_param(IS_RCC_I2S2CLKSOURCE(PeriphClkInit->I2s2ClockSelection)); + + /* Configure the I2S2 clock source */ + __HAL_RCC_I2S2_CONFIG(PeriphClkInit->I2s2ClockSelection); + } + + /*------------------------------ I2S3 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) + { + /* Check the parameters */ + assert_param(IS_RCC_I2S3CLKSOURCE(PeriphClkInit->I2s3ClockSelection)); + + /* Configure the I2S3 clock source */ + __HAL_RCC_I2S3_CONFIG(PeriphClkInit->I2s3ClockSelection); + } + + /*------------------------------ PLL I2S Configuration ----------------------*/ + /* Check that PLLI2S need to be enabled */ + if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S2SRC) || HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) + { + /* Update flag to indicate that PLL I2S should be active */ + pllactive = 1; + } + + /* Check if PLL I2S need to be enabled */ + if (pllactive == 1) + { + /* Enable PLL I2S only if not active */ + if (HAL_IS_BIT_CLR(RCC->CR, RCC_CR_PLL3ON)) + { + /* Check the parameters */ + assert_param(IS_RCC_PLLI2S_MUL(PeriphClkInit->PLLI2S.PLLI2SMUL)); + assert_param(IS_RCC_HSE_PREDIV2(PeriphClkInit->PLLI2S.HSEPrediv2Value)); + + /* Prediv2 can be written only when the PLL2 is disabled. */ + /* Return an error only if new value is different from the programmed value */ + if (HAL_IS_BIT_SET(RCC->CR,RCC_CR_PLL2ON) && \ + (__HAL_RCC_HSE_GET_PREDIV2() != PeriphClkInit->PLLI2S.HSEPrediv2Value)) + { + return HAL_ERROR; + } + + /* Configure the HSE prediv2 factor --------------------------------*/ + __HAL_RCC_HSE_PREDIV2_CONFIG(PeriphClkInit->PLLI2S.HSEPrediv2Value); + + /* Configure the main PLLI2S multiplication factors. */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SMUL); + + /* Enable the main PLLI2S. */ + __HAL_RCC_PLLI2S_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLLI2S is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Return an error only if user wants to change the PLLI2SMUL whereas PLLI2S is active */ + if (READ_BIT(RCC->CFGR2, RCC_CFGR2_PLL3MUL) != PeriphClkInit->PLLI2S.PLLI2SMUL) + { + return HAL_ERROR; + } + } + } +#endif /* STM32F105xC || STM32F107xC */ + +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) + /*------------------------------ USB clock Configuration ------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) + { + /* Check the parameters */ + assert_param(IS_RCC_USBPLLCLK_DIV(PeriphClkInit->UsbClockSelection)); + + /* Configure the USB clock source */ + __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection); + } +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ + + return HAL_OK; +} + +/** + * @brief Get the PeriphClkInit according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * returns the configuration information for the Extended Peripherals clocks(RTC, I2S, ADC clocks). + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t srcclk = 0; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_RTC; + + /* Get the RTC configuration -----------------------------------------------*/ + srcclk = __HAL_RCC_GET_RTC_SOURCE(); + /* Source clock is LSE or LSI*/ + PeriphClkInit->RTCClockSelection = srcclk; + + /* Get the ADC clock configuration -----------------------------------------*/ + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_ADC; + PeriphClkInit->AdcClockSelection = __HAL_RCC_GET_ADC_SOURCE(); + +#if defined(STM32F105xC) || defined(STM32F107xC) + /* Get the I2S2 clock configuration -----------------------------------------*/ + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S2; + PeriphClkInit->I2s2ClockSelection = __HAL_RCC_GET_I2S2_SOURCE(); + + /* Get the I2S3 clock configuration -----------------------------------------*/ + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S3; + PeriphClkInit->I2s3ClockSelection = __HAL_RCC_GET_I2S3_SOURCE(); + +#endif /* STM32F105xC || STM32F107xC */ + +#if defined(STM32F103xE) || defined(STM32F103xG) + /* Get the I2S2 clock configuration -----------------------------------------*/ + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S2; + PeriphClkInit->I2s2ClockSelection = RCC_I2S2CLKSOURCE_SYSCLK; + + /* Get the I2S3 clock configuration -----------------------------------------*/ + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S3; + PeriphClkInit->I2s3ClockSelection = RCC_I2S3CLKSOURCE_SYSCLK; + +#endif /* STM32F103xE || STM32F103xG */ + +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) + /* Get the USB clock configuration -----------------------------------------*/ + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USB; + PeriphClkInit->UsbClockSelection = __HAL_RCC_GET_USB_SOURCE(); +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ +} + +/** + * @brief Returns the peripheral clock frequency + * @note Returns 0 if peripheral clock is unknown + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg @ref RCC_PERIPHCLK_RTC RTC peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC ADC peripheral clock + @if STM32F103xE + * @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + @endif + @if STM32F103xG + * @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock + @endif + @if STM32F105xC + * @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + @endif + @if STM32F107xC + * @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + @endif + @if STM32F102xx + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + @endif + @if STM32F103xx + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + @endif + * @retval Frequency in Hz (0: means that no available frequency for the peripheral) + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) +#if defined(STM32F105xC) || defined(STM32F107xC) + const uint8_t aPLLMULFactorTable[12] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 13}; + const uint8_t aPredivFactorTable[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16}; +#else + const uint8_t aPLLMULFactorTable[16] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16}; + const uint8_t aPredivFactorTable[2] = { 1, 2}; +#endif +#endif + uint32_t temp_reg = 0, frequency = 0; +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) + uint32_t prediv1 = 0, pllclk = 0, pllmul = 0; +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ +#if defined(STM32F105xC) || defined(STM32F107xC) + uint32_t pll2mul = 0, pll3mul = 0, prediv2 = 0; +#endif /* STM32F105xC || STM32F107xC */ + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClk)); + + switch (PeriphClk) + { +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) + case RCC_PERIPHCLK_USB: + { + /* Get RCC configuration ------------------------------------------------------*/ + temp_reg = RCC->CFGR; + + /* Check if PLL is enabled */ + if (HAL_IS_BIT_SET(RCC->CR,RCC_CR_PLLON)) + { + pllmul = aPLLMULFactorTable[(uint32_t)(temp_reg & RCC_CFGR_PLLMULL) >> POSITION_VAL(RCC_CFGR_PLLMULL)]; + if ((temp_reg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) + { +#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\ + || defined(STM32F100xE) + prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> POSITION_VAL(RCC_CFGR2_PREDIV1)]; +#else + prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> POSITION_VAL(RCC_CFGR_PLLXTPRE)]; +#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */ + +#if defined(STM32F105xC) || defined(STM32F107xC) + if(HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) + { + /* PLL2 selected as Prediv1 source */ + /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */ + prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> POSITION_VAL(RCC_CFGR2_PREDIV2)) + 1; + pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> POSITION_VAL(RCC_CFGR2_PLL2MUL)) + 2; + pllclk = (uint32_t)((((HSE_VALUE / prediv2) * pll2mul) / prediv1) * pllmul); + } + else + { + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */ + pllclk = (uint32_t)((HSE_VALUE / prediv1) * pllmul); + } + + /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */ + /* In this case need to divide pllclk by 2 */ + if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> POSITION_VAL(RCC_CFGR_PLLMULL)]) + { + pllclk = pllclk / 2; + } +#else + if ((temp_reg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) + { + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */ + pllclk = (uint32_t)((HSE_VALUE / prediv1) * pllmul); + } +#endif /* STM32F105xC || STM32F107xC */ + } + else + { + /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ + pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul); + } + + /* Calcul of the USB frequency*/ +#if defined(STM32F105xC) || defined(STM32F107xC) + /* USBCLK = PLLVCO = (2 x PLLCLK) / USB prescaler */ + if (__HAL_RCC_GET_USB_SOURCE() == RCC_USBCLKSOURCE_PLL_DIV2) + { + /* Prescaler of 2 selected for USB */ + frequency = pllclk; + } + else + { + /* Prescaler of 3 selected for USB */ + frequency = (2 * pllclk) / 3; + } +#else + /* USBCLK = PLLCLK / USB prescaler */ + if (__HAL_RCC_GET_USB_SOURCE() == RCC_USBCLKSOURCE_PLL) + { + /* No prescaler selected for USB */ + frequency = pllclk; + } + else + { + /* Prescaler of 1.5 selected for USB */ + frequency = (pllclk * 2) / 3; + } +#endif + } + break; + } +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ +#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\ + || defined(STM32F107xC) + case RCC_PERIPHCLK_I2S2: + { +#if defined(STM32F103xE) || defined(STM32F103xG) + /* SYSCLK used as source clock for I2S2 */ + frequency = HAL_RCC_GetSysClockFreq(); +#else + if (__HAL_RCC_GET_I2S2_SOURCE() == RCC_I2S2CLKSOURCE_SYSCLK) + { + /* SYSCLK used as source clock for I2S2 */ + frequency = HAL_RCC_GetSysClockFreq(); + } + else + { + /* Check if PLLI2S is enabled */ + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) + { + /* PLLI2SVCO = 2 * PLLI2SCLK = 2 * (HSE/PREDIV2 * PLL3MUL) */ + prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> POSITION_VAL(RCC_CFGR2_PREDIV2)) + 1; + pll3mul = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> POSITION_VAL(RCC_CFGR2_PLL3MUL)) + 2; + frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul)); + } + } +#endif /* STM32F103xE || STM32F103xG */ + break; + } + case RCC_PERIPHCLK_I2S3: + { +#if defined(STM32F103xE) || defined(STM32F103xG) + /* SYSCLK used as source clock for I2S3 */ + frequency = HAL_RCC_GetSysClockFreq(); +#else + if (__HAL_RCC_GET_I2S3_SOURCE() == RCC_I2S3CLKSOURCE_SYSCLK) + { + /* SYSCLK used as source clock for I2S3 */ + frequency = HAL_RCC_GetSysClockFreq(); + } + else + { + /* Check if PLLI2S is enabled */ + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) + { + /* PLLI2SVCO = 2 * PLLI2SCLK = 2 * (HSE/PREDIV2 * PLL3MUL) */ + prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> POSITION_VAL(RCC_CFGR2_PREDIV2)) + 1; + pll3mul = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> POSITION_VAL(RCC_CFGR2_PLL3MUL)) + 2; + frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul)); + } + } +#endif /* STM32F103xE || STM32F103xG */ + break; + } +#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ + case RCC_PERIPHCLK_RTC: + { + /* Get RCC BDCR configuration ------------------------------------------------------*/ + temp_reg = RCC->BDCR; + + /* Check if LSE is ready if RTC clock selection is LSE */ + if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSE) && (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + /* Check if LSI is ready if RTC clock selection is LSI */ + else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSI) && (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY))) + { + frequency = LSI_VALUE; + } + else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_HSE_DIV128) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))) + { + frequency = HSE_VALUE / 128; + } + /* Clock not enabled for RTC*/ + else + { + frequency = 0; + } + break; + } + case RCC_PERIPHCLK_ADC: + { + frequency = HAL_RCC_GetPCLK2Freq() / (((__HAL_RCC_GET_ADC_SOURCE() >> POSITION_VAL(RCC_CFGR_ADCPRE_DIV4)) + 1) * 2); + break; + } + default: + { + break; + } + } + return(frequency); +} + +/** + * @} + */ + +#if defined(STM32F105xC) || defined(STM32F107xC) +/** @defgroup RCCEx_Exported_Functions_Group2 PLLI2S Management function + * @brief PLLI2S Management functions + * +@verbatim + =============================================================================== + ##### Extended PLLI2S Management functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the PLLI2S + activation or deactivation +@endverbatim + * @{ + */ + +/** + * @brief Enable PLLI2S + * @param PLLI2SInit pointer to an RCC_PLLI2SInitTypeDef structure that + * contains the configuration information for the PLLI2S + * @note The PLLI2S configuration not modified if used by I2S2 or I2S3 Interface. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit) +{ + uint32_t tickstart = 0; + + /* Check that PLL I2S has not been already enabled by I2S2 or I2S3*/ + if (HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S2SRC) && HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) + { + /* Check the parameters */ + assert_param(IS_RCC_PLLI2S_MUL(PLLI2SInit->PLLI2SMUL)); + assert_param(IS_RCC_HSE_PREDIV2(PLLI2SInit->HSEPrediv2Value)); + + /* Prediv2 can be written only when the PLL2 is disabled. */ + /* Return an error only if new value is different from the programmed value */ + if (HAL_IS_BIT_SET(RCC->CR,RCC_CR_PLL2ON) && \ + (__HAL_RCC_HSE_GET_PREDIV2() != PLLI2SInit->HSEPrediv2Value)) + { + return HAL_ERROR; + } + + /* Disable the main PLLI2S. */ + __HAL_RCC_PLLI2S_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLLI2S is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Configure the HSE prediv2 factor --------------------------------*/ + __HAL_RCC_HSE_PREDIV2_CONFIG(PLLI2SInit->HSEPrediv2Value); + + + /* Configure the main PLLI2S multiplication factors. */ + __HAL_RCC_PLLI2S_CONFIG(PLLI2SInit->PLLI2SMUL); + + /* Enable the main PLLI2S. */ + __HAL_RCC_PLLI2S_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLLI2S is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* PLLI2S cannot be modified as already used by I2S2 or I2S3 */ + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief Disable PLLI2S + * @note PLLI2S is not disabled if used by I2S2 or I2S3 Interface. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void) +{ + uint32_t tickstart = 0; + + /* Disable PLL I2S as not requested by I2S2 or I2S3*/ + if (HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S2SRC) && HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) + { + /* Disable the main PLLI2S. */ + __HAL_RCC_PLLI2S_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLLI2S is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* PLLI2S is currently used by I2S2 or I2S3. Cannot be disabled.*/ + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup RCCEx_Exported_Functions_Group3 PLL2 Management function + * @brief PLL2 Management functions + * +@verbatim + =============================================================================== + ##### Extended PLL2 Management functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the PLL2 + activation or deactivation +@endverbatim + * @{ + */ + +/** + * @brief Enable PLL2 + * @param PLL2Init pointer to an RCC_PLL2InitTypeDef structure that + * contains the configuration information for the PLL2 + * @note The PLL2 configuration not modified if used indirectly as system clock. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef *PLL2Init) +{ + uint32_t tickstart = 0; + + /* This bit can not be cleared if the PLL2 clock is used indirectly as system + clock (i.e. it is used as PLL clock entry that is used as system clock). */ + if((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && \ + (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && \ + ((READ_BIT(RCC->CFGR2,RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) + { + return HAL_ERROR; + } + else + { + /* Check the parameters */ + assert_param(IS_RCC_PLL2_MUL(PLL2Init->PLL2MUL)); + assert_param(IS_RCC_HSE_PREDIV2(PLL2Init->HSEPrediv2Value)); + + /* Prediv2 can be written only when the PLLI2S is disabled. */ + /* Return an error only if new value is different from the programmed value */ + if (HAL_IS_BIT_SET(RCC->CR,RCC_CR_PLL3ON) && \ + (__HAL_RCC_HSE_GET_PREDIV2() != PLL2Init->HSEPrediv2Value)) + { + return HAL_ERROR; + } + + /* Disable the main PLL2. */ + __HAL_RCC_PLL2_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLL2 is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL2_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Configure the HSE prediv2 factor --------------------------------*/ + __HAL_RCC_HSE_PREDIV2_CONFIG(PLL2Init->HSEPrediv2Value); + + /* Configure the main PLL2 multiplication factors. */ + __HAL_RCC_PLL2_CONFIG(PLL2Init->PLL2MUL); + + /* Enable the main PLL2. */ + __HAL_RCC_PLL2_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLL2 is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLL2_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + return HAL_OK; +} + +/** + * @brief Disable PLL2 + * @note PLL2 is not disabled if used indirectly as system clock. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void) +{ + uint32_t tickstart = 0; + + /* This bit can not be cleared if the PLL2 clock is used indirectly as system + clock (i.e. it is used as PLL clock entry that is used as system clock). */ + if((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && \ + (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && \ + ((READ_BIT(RCC->CFGR2,RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) + { + return HAL_ERROR; + } + else + { + /* Disable the main PLL2. */ + __HAL_RCC_PLL2_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLL2 is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL2_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + return HAL_OK; +} + +/** + * @} + */ +#endif /* STM32F105xC || STM32F107xC */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_RCC_MODULE_ENABLED */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,5379 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_tim.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief TIM HAL module driver + * This file provides firmware functions to manage the following + * functionalities of the Timer (TIM) peripheral: + * + Time Base Initialization + * + Time Base Start + * + Time Base Start Interruption + * + Time Base Start DMA + * + Time Output Compare/PWM Initialization + * + Time Output Compare/PWM Channel Configuration + * + Time Output Compare/PWM Start + * + Time Output Compare/PWM Start Interruption + * + Time Output Compare/PWM Start DMA + * + Time Input Capture Initialization + * + Time Input Capture Channel Configuration + * + Time Input Capture Start + * + Time Input Capture Start Interruption + * + Time Input Capture Start DMA + * + Time One Pulse Initialization + * + Time One Pulse Channel Configuration + * + Time One Pulse Start + * + Time Encoder Interface Initialization + * + Time Encoder Interface Start + * + Time Encoder Interface Start Interruption + * + Time Encoder Interface Start DMA + * + Commutation Event configuration with Interruption and DMA + * + Time OCRef clear configuration + * + Time External Clock configuration + @verbatim + ============================================================================== + ##### TIMER Generic features ##### + ============================================================================== + [..] The Timer features include: + (#) 16-bit up, down, up/down auto-reload counter. + (#) 16-bit programmable prescaler allowing dividing (also on the fly) the + counter clock frequency either by any factor between 1 and 65536. + (#) Up to 4 independent channels for: + (++) Input Capture + (++) Output Compare + (++) PWM generation (Edge and Center-aligned Mode) + (++) One-pulse mode output + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Initialize the TIM low level resources by implementing the following functions + depending from feature used : + (++) Time Base : HAL_TIM_Base_MspInit() + (++) Input Capture : HAL_TIM_IC_MspInit() + (++) Output Compare : HAL_TIM_OC_MspInit() + (++) PWM generation : HAL_TIM_PWM_MspInit() + (++) One-pulse mode output : HAL_TIM_OnePulse_MspInit() + (++) Encoder mode output : HAL_TIM_Encoder_MspInit() + + (#) Initialize the TIM low level resources : + (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); + (##) TIM pins configuration + (+++) Enable the clock for the TIM GPIOs using the following function: + __HAL_RCC_GPIOx_CLK_ENABLE(); + (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); + + (#) The external Clock can be configured, if needed (the default clock is the + internal clock from the APBx), using the following function: + HAL_TIM_ConfigClockSource, the clock configuration should be done before + any start function. + + (#) Configure the TIM in the desired functioning mode using one of the + Initialization function of this driver: + (++) HAL_TIM_Base_Init: to use the Timer to generate a simple time base + (++) HAL_TIM_OC_Init and HAL_TIM_OC_ConfigChannel: to use the Timer to generate an + Output Compare signal. + (++) HAL_TIM_PWM_Init and HAL_TIM_PWM_ConfigChannel: to use the Timer to generate a + PWM signal. + (++) HAL_TIM_IC_Init and HAL_TIM_IC_ConfigChannel: to use the Timer to measure an + external signal. + (++) HAL_TIM_OnePulse_Init and HAL_TIM_OnePulse_ConfigChannel: to use the Timer + in One Pulse Mode. + (++) HAL_TIM_Encoder_Init: to use the Timer Encoder Interface. + + (#) Activate the TIM peripheral using one of the start functions depending from the feature used: + (++) Time Base : HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT() + (++) Input Capture : HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(), HAL_TIM_IC_Start_IT() + (++) Output Compare : HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(), HAL_TIM_OC_Start_IT() + (++) PWM generation : HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(), HAL_TIM_PWM_Start_IT() + (++) One-pulse mode output : HAL_TIM_OnePulse_Start(), HAL_TIM_OnePulse_Start_IT() + (++) Encoder mode output : HAL_TIM_Encoder_Start(), HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT(). + + (#) The DMA Burst is managed with the two following functions: + HAL_TIM_DMABurst_WriteStart() + HAL_TIM_DMABurst_ReadStart() + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup TIM TIM + * @brief TIM HAL module driver + * @{ + */ + +#ifdef HAL_TIM_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup TIM_Private_Functions TIM Private Functions + * @{ + */ +static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter); +static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter); +static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_ETR_SetConfig(TIM_TypeDef* TIMx, uint32_t TIM_ExtTRGPrescaler, + uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter); +static void TIM_ITRx_SetConfig(TIM_TypeDef* TIMx, uint16_t InputTriggerSource); +static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma); +static void TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, + TIM_SlaveConfigTypeDef * sSlaveConfig); + +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup TIM_Exported_Functions TIM Exported Functions + * @{ + */ + +/** @defgroup TIM_Exported_Functions_Group1 Time Base functions + * @brief Time Base functions + * +@verbatim + ============================================================================== + ##### Time Base functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM base. + (+) De-initialize the TIM base. + (+) Start the Time Base. + (+) Stop the Time Base. + (+) Start the Time Base and enable interrupt. + (+) Stop the Time Base and disable interrupt. + (+) Start the Time Base and enable DMA transfer. + (+) Stop the Time Base and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Time base Unit according to the specified + * parameters in the TIM_HandleTypeDef and create the associated handle. + * @param htim : TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if(htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + + if(htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + HAL_TIM_Base_MspInit(htim); + } + + /* Set the TIM state */ + htim->State= HAL_TIM_STATE_BUSY; + + /* Set the Time Base configuration */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the TIM state*/ + htim->State= HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM Base peripheral + * @param htim : TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_Base_MspDeInit(htim); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Base MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_Base_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Base MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_Base_MspDeInit could be implemented in the user file + */ +} + + +/** + * @brief Starts the TIM Base generation. + * @param htim : TIM handle + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Set the TIM state */ + htim->State= HAL_TIM_STATE_BUSY; + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Change the TIM state*/ + htim->State= HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation. + * @param htim : TIM handle + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Set the TIM state */ + htim->State= HAL_TIM_STATE_BUSY; + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Change the TIM state*/ + htim->State= HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Base generation in interrupt mode. + * @param htim : TIM handle + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Enable the TIM Update interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation in interrupt mode. + * @param htim : TIM handle + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + /* Disable the TIM Update interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_UPDATE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Base generation in DMA mode. + * @param htim : TIM handle + * @param pData : The source Buffer address. + * @param Length : The length of data to be transferred from memory to peripheral. + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMA_INSTANCE(htim->Instance)); + + if((htim->State == HAL_TIM_STATE_BUSY)) + { + return HAL_BUSY; + } + else if((htim->State == HAL_TIM_STATE_READY)) + { + if((pData == 0 ) && (Length > 0)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)pData, (uint32_t)&htim->Instance->ARR, Length); + + /* Enable the TIM Update DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_UPDATE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation in DMA mode. + * @param htim : TIM handle + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMA_INSTANCE(htim->Instance)); + + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_UPDATE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group2 Time Output Compare functions + * @brief Time Output Compare functions + * +@verbatim + ============================================================================== + ##### Time Output Compare functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Output Compare. + (+) De-initialize the TIM Output Compare. + (+) Start the Time Output Compare. + (+) Stop the Time Output Compare. + (+) Start the Time Output Compare and enable interrupt. + (+) Stop the Time Output Compare and disable interrupt. + (+) Start the Time Output Compare and enable DMA transfer. + (+) Stop the Time Output Compare and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Output Compare according to the specified + * parameters in the TIM_HandleTypeDef and create the associated handle. + * @param htim : TIM Output Compare handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef* htim) +{ + /* Check the TIM handle allocation */ + if(htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + + if(htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OC_MspInit(htim); + } + + /* Set the TIM state */ + htim->State= HAL_TIM_STATE_BUSY; + + /* Init the base time for the Output Compare */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the TIM state*/ + htim->State= HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim : TIM Output Compare handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OC_MspDeInit(htim); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Output Compare MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_OC_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Output Compare MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_OC_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Output Compare signal generation. + * @param htim : TIM Output Compare handle + * @param Channel : TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation. + * @param htim : TIM handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Output Compare signal generation in interrupt mode. + * @param htim : TIM OC handle + * @param Channel : TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + } + break; + + default: + break; + } + + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation in interrupt mode. + * @param htim : TIM Output Compare handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + } + break; + + default: + break; + } + + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Output Compare signal generation in DMA mode. + * @param htim : TIM Output Compare handle + * @param Channel : TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData : The source Buffer address. + * @param Length : The length of data to be transferred from memory to TIM peripheral + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + if((htim->State == HAL_TIM_STATE_BUSY)) + { + return HAL_BUSY; + } + else if((htim->State == HAL_TIM_STATE_READY)) + { + if(((uint32_t)pData == 0 ) && (Length > 0)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length); + + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length); + + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,Length); + + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length); + + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + } + break; + + default: + break; + } + + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation in DMA mode. + * @param htim : TIM Output Compare handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + } + break; + + default: + break; + } + + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group3 Time PWM functions + * @brief Time PWM functions + * +@verbatim + ============================================================================== + ##### Time PWM functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM PWM. + (+) De-initialize the TIM PWM. + (+) Start the Time PWM. + (+) Stop the Time PWM. + (+) Start the Time PWM and enable interrupt. + (+) Stop the Time PWM and disable interrupt. + (+) Start the Time PWM and enable DMA transfer. + (+) Stop the Time PWM and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM PWM Time Base according to the specified + * parameters in the TIM_HandleTypeDef and create the associated handle. + * @param htim : TIM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if(htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + + if(htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_PWM_MspInit(htim); + } + + /* Set the TIM state */ + htim->State= HAL_TIM_STATE_BUSY; + + /* Init the base time for the PWM */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the TIM state*/ + htim->State= HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim : TIM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_PWM_MspDeInit(htim); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM PWM MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_PWM_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM PWM MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_PWM_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the PWM signal generation. + * @param htim : TIM handle + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the PWM signal generation. + * @param htim : TIM handle + * @param Channel : TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the PWM signal generation in interrupt mode. + * @param htim : TIM handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + } + break; + + default: + break; + } + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the PWM signal generation in interrupt mode. + * @param htim : TIM handle + * @param Channel : TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + } + break; + + default: + break; + } + + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM PWM signal generation in DMA mode. + * @param htim : TIM handle + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData : The source Buffer address. + * @param Length : The length of data to be transferred from memory to TIM peripheral + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + if((htim->State == HAL_TIM_STATE_BUSY)) + { + return HAL_BUSY; + } + else if((htim->State == HAL_TIM_STATE_READY)) + { + if(((uint32_t)pData == 0 ) && (Length > 0)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length); + + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length); + + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,Length); + + /* Enable the TIM Output Capture/Compare 3 request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length); + + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + } + break; + + default: + break; + } + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM PWM signal generation in DMA mode. + * @param htim : TIM handle + * @param Channel : TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + } + break; + + default: + break; + } + + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group4 Time Input Capture functions + * @brief Time Input Capture functions + * +@verbatim + ============================================================================== + ##### Time Input Capture functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Input Capture. + (+) De-initialize the TIM Input Capture. + (+) Start the Time Input Capture. + (+) Stop the Time Input Capture. + (+) Start the Time Input Capture and enable interrupt. + (+) Stop the Time Input Capture and disable interrupt. + (+) Start the Time Input Capture and enable DMA transfer. + (+) Stop the Time Input Capture and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Input Capture Time base according to the specified + * parameters in the TIM_HandleTypeDef and create the associated handle. + * @param htim : TIM Input Capture handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if(htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + + if(htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_IC_MspInit(htim); + } + + /* Set the TIM state */ + htim->State= HAL_TIM_STATE_BUSY; + + /* Init the base time for the input capture */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the TIM state*/ + htim->State= HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim : TIM Input Capture handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_IC_MspDeInit(htim); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Input Capture MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_IC_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Input Capture MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_IC_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Input Capture measurement. + * @param htim : TIM Input Capture handle + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_IC_Start (TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Input Capture measurement. + * @param htim : TIM handle + * @param Channel : TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Input Capture measurement in interrupt mode. + * @param htim : TIM Input Capture handle + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_IC_Start_IT (TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + } + break; + + default: + break; + } + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Input Capture measurement in interrupt mode. + * @param htim : TIM handle + * @param Channel : TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + } + break; + + default: + break; + } + + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Input Capture measurement in DMA mode. + * @param htim : TIM Input Capture handle + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData : The destination Buffer address. + * @param Length : The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); + + if((htim->State == HAL_TIM_STATE_BUSY)) + { + return HAL_BUSY; + } + else if((htim->State == HAL_TIM_STATE_READY)) + { + if((pData == 0 ) && (Length > 0)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length); + + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData, Length); + + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->CCR3, (uint32_t)pData, Length); + + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->CCR4, (uint32_t)pData, Length); + + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + } + break; + + default: + break; + } + + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Input Capture measurement in DMA mode. + * @param htim : TIM Input Capture handle + * @param Channel : TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + } + break; + + default: + break; + } + + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group5 Time One Pulse functions + * @brief Time One Pulse functions + * +@verbatim + ============================================================================== + ##### Time One Pulse functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM One Pulse. + (+) De-initialize the TIM One Pulse. + (+) Start the Time One Pulse. + (+) Stop the Time One Pulse. + (+) Start the Time One Pulse and enable interrupt. + (+) Stop the Time One Pulse and disable interrupt. + (+) Start the Time One Pulse and enable DMA transfer. + (+) Stop the Time One Pulse and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM One Pulse Time Base according to the specified + * parameters in the TIM_HandleTypeDef and create the associated handle. + * @param htim : TIM OnePulse handle + * @param OnePulseMode : Select the One pulse mode. + * This parameter can be one of the following values: + * @arg TIM_OPMODE_SINGLE: Only one pulse will be generated. + * @arg TIM_OPMODE_REPETITIVE: Repetitive pulses wil be generated. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode) +{ + /* Check the TIM handle allocation */ + if(htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_OPM_MODE(OnePulseMode)); + + if(htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OnePulse_MspInit(htim); + } + + /* Set the TIM state */ + htim->State= HAL_TIM_STATE_BUSY; + + /* Configure the Time base in the One Pulse Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Reset the OPM Bit */ + htim->Instance->CR1 &= ~TIM_CR1_OPM; + + /* Configure the OPM Mode */ + htim->Instance->CR1 |= OnePulseMode; + + /* Initialize the TIM state*/ + htim->State= HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM One Pulse + * @param htim : TIM One Pulse handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_OnePulse_MspDeInit(htim); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM One Pulse MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_OnePulse_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM One Pulse MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_OnePulse_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM One Pulse signal generation. + * @param htim : TIM One Pulse handle + * @param OutputChannel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Enable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together + + No need to enable the counter, it's enabled automatically by hardware + (the counter starts in response to a stimulus and generate a pulse */ + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation. + * @param htim : TIM One Pulse handle + * @param OutputChannel : TIM Channels to be disable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Disable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */ + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM One Pulse signal generation in interrupt mode. + * @param htim : TIM One Pulse handle + * @param OutputChannel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Enable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together + + No need to enable the counter, it's enabled automatically by hardware + (the counter starts in response to a stimulus and generate a pulse */ + + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation in interrupt mode. + * @param htim : TIM One Pulse handle + * @param OutputChannel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + + /* Disable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group6 Time Encoder functions + * @brief Time Encoder functions + * +@verbatim + ============================================================================== + ##### Time Encoder functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Encoder. + (+) De-initialize the TIM Encoder. + (+) Start the Time Encoder. + (+) Stop the Time Encoder. + (+) Start the Time Encoder and enable interrupt. + (+) Stop the Time Encoder and disable interrupt. + (+) Start the Time Encoder and enable DMA transfer. + (+) Stop the Time Encoder and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Encoder Interface and create the associated handle. + * @param htim : TIM Encoder Interface handle + * @param sConfig : TIM Encoder Interface configuration structure + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef* sConfig) +{ + uint32_t tmpsmcr = 0; + uint32_t tmpccmr1 = 0; + uint32_t tmpccer = 0; + + /* Check the TIM handle allocation */ + if(htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode)); + assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection)); + assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection)); + assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity)); + assert_param(IS_TIM_IC_POLARITY(sConfig->IC2Polarity)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC2Filter)); + + if(htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_Encoder_MspInit(htim); + } + + /* Set the TIM state */ + htim->State= HAL_TIM_STATE_BUSY; + + /* Reset the SMS bits */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + + /* Configure the Time base in the Encoder Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* Get the TIMx CCMR1 register value */ + tmpccmr1 = htim->Instance->CCMR1; + + /* Get the TIMx CCER register value */ + tmpccer = htim->Instance->CCER; + + /* Set the encoder Mode */ + tmpsmcr |= sConfig->EncoderMode; + + /* Select the Capture Compare 1 and the Capture Compare 2 as input */ + tmpccmr1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S); + tmpccmr1 |= (sConfig->IC1Selection | (sConfig->IC2Selection << 8)); + + /* Set the the Capture Compare 1 and the Capture Compare 2 prescalers and filters */ + tmpccmr1 &= ~(TIM_CCMR1_IC1PSC | TIM_CCMR1_IC2PSC); + tmpccmr1 &= ~(TIM_CCMR1_IC1F | TIM_CCMR1_IC2F); + tmpccmr1 |= sConfig->IC1Prescaler | (sConfig->IC2Prescaler << 8); + tmpccmr1 |= (sConfig->IC1Filter << 4) | (sConfig->IC2Filter << 12); + + /* Set the TI1 and the TI2 Polarities */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P); + tmpccer &= ~(TIM_CCER_CC1NP | TIM_CCER_CC2NP); + tmpccer |= sConfig->IC1Polarity | (sConfig->IC2Polarity << 4); + + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + + /* Write to TIMx CCMR1 */ + htim->Instance->CCMR1 = tmpccmr1; + + /* Write to TIMx CCER */ + htim->Instance->CCER = tmpccer; + + /* Initialize the TIM state*/ + htim->State= HAL_TIM_STATE_READY; + + return HAL_OK; +} + + +/** + * @brief DeInitializes the TIM Encoder interface + * @param htim : TIM Encoder handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_Encoder_MspDeInit(htim); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Encoder Interface MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_Encoder_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Encoder Interface MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_Encoder_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Encoder Interface. + * @param htim : TIM Encoder Interface handle + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Enable the encoder interface channels */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + break; + } + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + break; + } + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + break; + } + } + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface. + * @param htim : TIM Encoder Interface handle + * @param Channel : TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + break; + } + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + break; + } + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + break; + } + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Encoder Interface in interrupt mode. + * @param htim : TIM Encoder Interface handle + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Enable the encoder interface channels */ + /* Enable the capture compare Interrupts 1 and/or 2 */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + } + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface in interrupt mode. + * @param htim : TIM Encoder Interface handle + * @param Channel : TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + if(Channel == TIM_CHANNEL_1) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 1 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + } + else if(Channel == TIM_CHANNEL_2) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 2 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + else + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 1 and 2 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Encoder Interface in DMA mode. + * @param htim : TIM Encoder Interface handle + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @param pData1 : The destination Buffer address for IC1. + * @param pData2 : The destination Buffer address for IC2. + * @param Length : The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); + + if((htim->State == HAL_TIM_STATE_BUSY)) + { + return HAL_BUSY; + } + else if((htim->State == HAL_TIM_STATE_READY)) + { + if((((pData1 == 0) || (pData2 == 0) )) && (Length > 0)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t )pData1, Length); + + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + } + break; + + case TIM_CHANNEL_2: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError; + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, Length); + + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + } + break; + + case TIM_CHANNEL_ALL: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, Length); + + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, Length); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + default: + break; + } + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface in DMA mode. + * @param htim : TIM Encoder Interface handle + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + if(Channel == TIM_CHANNEL_1) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 1 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + } + else if(Channel == TIM_CHANNEL_2) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 2 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + } + else + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 1 and 2 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ +/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management + * @brief IRQ handler management + * +@verbatim + ============================================================================== + ##### IRQ handler management ##### + ============================================================================== + [..] + This section provides Timer IRQ handler function. + +@endverbatim + * @{ + */ +/** + * @brief This function handles TIM interrupts requests. + * @param htim : TIM handle + * @retval None + */ +void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) +{ + /* Capture compare 1 event */ + if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) + { + if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) !=RESET) + { + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + /* Input capture event */ + if((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00) + { + HAL_TIM_IC_CaptureCallback(htim); + } + /* Output compare event */ + else + { + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + } + /* Capture compare 2 event */ + if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) + { + if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) !=RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + /* Input capture event */ + if((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00) + { + HAL_TIM_IC_CaptureCallback(htim); + } + /* Output compare event */ + else + { + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* Capture compare 3 event */ + if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET) + { + if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) !=RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + /* Input capture event */ + if((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00) + { + HAL_TIM_IC_CaptureCallback(htim); + } + /* Output compare event */ + else + { + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* Capture compare 4 event */ + if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET) + { + if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) !=RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + /* Input capture event */ + if((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00) + { + HAL_TIM_IC_CaptureCallback(htim); + } + /* Output compare event */ + else + { + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* TIM Update event */ + if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET) + { + if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) !=RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE); + HAL_TIM_PeriodElapsedCallback(htim); + } + } + /* TIM Break input event */ + if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK) != RESET) + { + if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) !=RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_BREAK); + HAL_TIMEx_BreakCallback(htim); + } + } + /* TIM Trigger detection event */ + if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_TRIGGER) != RESET) + { + if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_TRIGGER) !=RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_TRIGGER); + HAL_TIM_TriggerCallback(htim); + } + } + /* TIM commutation event */ + if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_COM) != RESET) + { + if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_COM) !=RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_FLAG_COM); + HAL_TIMEx_CommutationCallback(htim); + } + } +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group8 Peripheral Control functions + * @brief Peripheral Control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Configure The Input Output channels for OC, PWM, IC or One Pulse mode. + (+) Configure External Clock source. + (+) Configure Complementary channels, break features and dead time. + (+) Configure Master and the Slave synchronization. + (+) Configure the DMA Burst Mode. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the TIM Output Compare Channels according to the specified + * parameters in the TIM_OC_InitTypeDef. + * @param htim : TIM Output Compare handle + * @param sConfig : TIM Output Compare configuration structure + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef* sConfig, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CHANNELS(Channel)); + assert_param(IS_TIM_OC_MODE(sConfig->OCMode)); + assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); + + /* Check input state */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + switch (Channel) + { + case TIM_CHANNEL_1: + { + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + /* Configure the TIM Channel 1 in Output Compare */ + TIM_OC1_SetConfig(htim->Instance, sConfig); + } + break; + + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + /* Configure the TIM Channel 2 in Output Compare */ + TIM_OC2_SetConfig(htim->Instance, sConfig); + } + break; + + case TIM_CHANNEL_3: + { + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + /* Configure the TIM Channel 3 in Output Compare */ + TIM_OC3_SetConfig(htim->Instance, sConfig); + } + break; + + case TIM_CHANNEL_4: + { + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + /* Configure the TIM Channel 4 in Output Compare */ + TIM_OC4_SetConfig(htim->Instance, sConfig); + } + break; + + default: + break; + } + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Input Capture Channels according to the specified + * parameters in the TIM_IC_InitTypeDef. + * @param htim : TIM IC handle + * @param sConfig : TIM Input Capture configuration structure + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef* sConfig, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_IC_POLARITY(sConfig->ICPolarity)); + assert_param(IS_TIM_IC_SELECTION(sConfig->ICSelection)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->ICPrescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->ICFilter)); + + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + if (Channel == TIM_CHANNEL_1) + { + /* TI1 Configuration */ + TIM_TI1_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + + /* Set the IC1PSC value */ + htim->Instance->CCMR1 |= sConfig->ICPrescaler; + } + else if (Channel == TIM_CHANNEL_2) + { + /* TI2 Configuration */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_TI2_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC2PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; + + /* Set the IC2PSC value */ + htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8); + } + else if (Channel == TIM_CHANNEL_3) + { + /* TI3 Configuration */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + TIM_TI3_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC3PSC Bits */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC; + + /* Set the IC3PSC value */ + htim->Instance->CCMR2 |= sConfig->ICPrescaler; + } + else + { + /* TI4 Configuration */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + TIM_TI4_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC4PSC Bits */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC; + + /* Set the IC4PSC value */ + htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8); + } + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM PWM channels according to the specified + * parameters in the TIM_OC_InitTypeDef. + * @param htim : TIM handle + * @param sConfig : TIM PWM configuration structure + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef* sConfig, uint32_t Channel) +{ + __HAL_LOCK(htim); + + /* Check the parameters */ + assert_param(IS_TIM_CHANNELS(Channel)); + assert_param(IS_TIM_PWM_MODE(sConfig->OCMode)); + assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); + assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode)); + + htim->State = HAL_TIM_STATE_BUSY; + + switch (Channel) + { + case TIM_CHANNEL_1: + { + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + /* Configure the Channel 1 in PWM mode */ + TIM_OC1_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel1 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE; + htim->Instance->CCMR1 |= sConfig->OCFastMode; + } + break; + + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + /* Configure the Channel 2 in PWM mode */ + TIM_OC2_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel2 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE; + htim->Instance->CCMR1 |= sConfig->OCFastMode << 8; + } + break; + + case TIM_CHANNEL_3: + { + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + /* Configure the Channel 3 in PWM mode */ + TIM_OC3_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel3 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE; + htim->Instance->CCMR2 |= sConfig->OCFastMode; + } + break; + + case TIM_CHANNEL_4: + { + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + /* Configure the Channel 4 in PWM mode */ + TIM_OC4_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel4 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE; + htim->Instance->CCMR2 |= sConfig->OCFastMode << 8; + } + break; + + default: + break; + } + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM One Pulse Channels according to the specified + * parameters in the TIM_OnePulse_InitTypeDef. + * @param htim : TIM One Pulse handle + * @param sConfig : TIM One Pulse configuration structure + * @param OutputChannel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @param InputChannel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef* sConfig, uint32_t OutputChannel, uint32_t InputChannel) +{ + TIM_OC_InitTypeDef temp1; + + /* Check the parameters */ + assert_param(IS_TIM_OPM_CHANNELS(OutputChannel)); + assert_param(IS_TIM_OPM_CHANNELS(InputChannel)); + + if(OutputChannel != InputChannel) + { + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Extract the Ouput compare configuration from sConfig structure */ + temp1.OCMode = sConfig->OCMode; + temp1.Pulse = sConfig->Pulse; + temp1.OCPolarity = sConfig->OCPolarity; + temp1.OCNPolarity = sConfig->OCNPolarity; + temp1.OCIdleState = sConfig->OCIdleState; + temp1.OCNIdleState = sConfig->OCNIdleState; + + switch (OutputChannel) + { + case TIM_CHANNEL_1: + { + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + TIM_OC1_SetConfig(htim->Instance, &temp1); + } + break; + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_OC2_SetConfig(htim->Instance, &temp1); + } + break; + default: + break; + } + switch (InputChannel) + { + case TIM_CHANNEL_1: + { + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, + sConfig->ICSelection, sConfig->ICFilter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + + /* Select the Trigger source */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI1FP1; + + /* Select the Slave Mode */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + } + break; + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, + sConfig->ICSelection, sConfig->ICFilter); + + /* Reset the IC2PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; + + /* Select the Trigger source */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI2FP2; + + /* Select the Slave Mode */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + } + break; + + default: + break; + } + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + else + { + return HAL_ERROR; + } +} + +/** + * @brief Configure the DMA Burst to transfer Data from the memory to the TIM peripheral + * @param htim : TIM handle + * @param BurstBaseAddress : TIM Base address from where the DMA will start the Data write + * This parameter can be one of the following values: + * @arg TIM_DMABASE_CR1 + * @arg TIM_DMABASE_CR2 + * @arg TIM_DMABASE_SMCR + * @arg TIM_DMABASE_DIER + * @arg TIM_DMABASE_SR + * @arg TIM_DMABASE_EGR + * @arg TIM_DMABASE_CCMR1 + * @arg TIM_DMABASE_CCMR2 + * @arg TIM_DMABASE_CCER + * @arg TIM_DMABASE_CNT + * @arg TIM_DMABASE_PSC + * @arg TIM_DMABASE_ARR + * @arg TIM_DMABASE_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @arg TIM_DMABASE_DCR + * @param BurstRequestSrc : TIM DMA Request sources + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source + * @param BurstBuffer : The Buffer address. + * @param BurstLength : DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, + uint32_t* BurstBuffer, uint32_t BurstLength) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + assert_param(IS_TIM_DMA_BASE(BurstBaseAddress)); + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + assert_param(IS_TIM_DMA_LENGTH(BurstLength)); + + if((htim->State == HAL_TIM_STATE_BUSY)) + { + return HAL_BUSY; + } + else if((htim->State == HAL_TIM_STATE_READY)) + { + if((BurstBuffer == 0 ) && (BurstLength > 0)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + switch(BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_CC1: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_CC2: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_CC3: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_CC4: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_COM: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_TRIGGER: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8) + 1); + } + break; + default: + break; + } + /* configure the DMA Burst Mode */ + htim->Instance->DCR = BurstBaseAddress | BurstLength; + + /* Enable the TIM DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc); + + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM DMA Burst mode + * @param htim : TIM handle + * @param BurstRequestSrc : TIM DMA Request sources to disable + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + + /* Abort the DMA transfer (at least disable the DMA channel) */ + switch(BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_UPDATE]); + } + break; + case TIM_DMA_CC1: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_CC1]); + } + break; + case TIM_DMA_CC2: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_CC2]); + } + break; + case TIM_DMA_CC3: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_CC3]); + } + break; + case TIM_DMA_CC4: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_CC4]); + } + break; + case TIM_DMA_COM: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_COMMUTATION]); + } + break; + case TIM_DMA_TRIGGER: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_TRIGGER]); + } + break; + default: + break; + } + + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Configure the DMA Burst to transfer Data from the TIM peripheral to the memory + * @param htim : TIM handle + * @param BurstBaseAddress : TIM Base address from where the DMA will starts the Data read + * This parameter can be one of the following values: + * @arg TIM_DMABASE_CR1 + * @arg TIM_DMABASE_CR2 + * @arg TIM_DMABASE_SMCR + * @arg TIM_DMABASE_DIER + * @arg TIM_DMABASE_SR + * @arg TIM_DMABASE_EGR + * @arg TIM_DMABASE_CCMR1 + * @arg TIM_DMABASE_CCMR2 + * @arg TIM_DMABASE_CCER + * @arg TIM_DMABASE_CNT + * @arg TIM_DMABASE_PSC + * @arg TIM_DMABASE_ARR + * @arg TIM_DMABASE_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @arg TIM_DMABASE_DCR + * @param BurstRequestSrc : TIM DMA Request sources + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source + * @param BurstBuffer : The Buffer address. + * @param BurstLength : DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, + uint32_t *BurstBuffer, uint32_t BurstLength) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + assert_param(IS_TIM_DMA_BASE(BurstBaseAddress)); + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + assert_param(IS_TIM_DMA_LENGTH(BurstLength)); + + if((htim->State == HAL_TIM_STATE_BUSY)) + { + return HAL_BUSY; + } + else if((htim->State == HAL_TIM_STATE_READY)) + { + if((BurstBuffer == 0 ) && (BurstLength > 0)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + switch(BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_CC1: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_CC2: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_CC3: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_CC4: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_COM: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8) + 1); + } + break; + case TIM_DMA_TRIGGER: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8) + 1); + } + break; + default: + break; + } + + /* configure the DMA Burst Mode */ + htim->Instance->DCR = BurstBaseAddress | BurstLength; + + /* Enable the TIM DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc); + + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stop the DMA burst reading + * @param htim : TIM handle + * @param BurstRequestSrc : TIM DMA Request sources to disable. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + + /* Abort the DMA transfer (at least disable the DMA channel) */ + switch(BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_UPDATE]); + } + break; + case TIM_DMA_CC1: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_CC1]); + } + break; + case TIM_DMA_CC2: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_CC2]); + } + break; + case TIM_DMA_CC3: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_CC3]); + } + break; + case TIM_DMA_CC4: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_CC4]); + } + break; + case TIM_DMA_COM: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_COMMUTATION]); + } + break; + case TIM_DMA_TRIGGER: + { + HAL_DMA_Abort(htim->hdma[TIM_DMA_ID_TRIGGER]); + } + break; + default: + break; + } + + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Generate a software event + * @param htim : TIM handle + * @param EventSource : specifies the event source. + * This parameter can be one of the following values: + * @arg TIM_EVENTSOURCE_UPDATE: Timer update Event source + * @arg TIM_EVENTSOURCE_CC1: Timer Capture Compare 1 Event source + * @arg TIM_EVENTSOURCE_CC2: Timer Capture Compare 2 Event source + * @arg TIM_EVENTSOURCE_CC3: Timer Capture Compare 3 Event source + * @arg TIM_EVENTSOURCE_CC4: Timer Capture Compare 4 Event source + * @arg TIM_EVENTSOURCE_COM: Timer COM event source + * @arg TIM_EVENTSOURCE_TRIGGER: Timer Trigger Event source + * @arg TIM_EVENTSOURCE_BREAK: Timer Break event source + * @note TIM6 and TIM7 can only generate an update event. + * @note TIM_EVENTSOURCE_COM and TIM_EVENTSOURCE_BREAK are used only with TIM1, TIM15, TIM16 and TIM17. + * @retval HAL status + */ + +HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_EVENT_SOURCE(EventSource)); + + /* Process Locked */ + __HAL_LOCK(htim); + + /* Change the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Set the event sources */ + htim->Instance->EGR = EventSource; + + /* Change the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Configures the OCRef clear feature + * @param htim : TIM handle + * @param sClearInputConfig : pointer to a TIM_ClearInputConfigTypeDef structure that + * contains the OCREF clear feature and parameters for the TIM peripheral. + * @param Channel : specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @arg TIM_CHANNEL_4: TIM Channel 4 + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef * sClearInputConfig, uint32_t Channel) +{ + uint32_t tmpsmcr = 0; + + /* Check the parameters */ + assert_param(IS_TIM_OCXREF_CLEAR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_CLEARINPUT_SOURCE(sClearInputConfig->ClearInputSource)); + assert_param(IS_TIM_CLEARINPUT_POLARITY(sClearInputConfig->ClearInputPolarity)); + assert_param(IS_TIM_CLEARINPUT_PRESCALER(sClearInputConfig->ClearInputPrescaler)); + assert_param(IS_TIM_CLEARINPUT_FILTER(sClearInputConfig->ClearInputFilter)); + + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + switch (sClearInputConfig->ClearInputSource) + { + case TIM_CLEARINPUTSOURCE_NONE: + { + /* Clear the OCREF clear selection bit */ + tmpsmcr &= ~TIM_SMCR_OCCS; + + /* Clear the ETR Bits */ + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + + /* Set TIMx_SMCR */ + htim->Instance->SMCR = tmpsmcr; + } + break; + + case TIM_CLEARINPUTSOURCE_ETR: + { + TIM_ETR_SetConfig(htim->Instance, + sClearInputConfig->ClearInputPrescaler, + sClearInputConfig->ClearInputPolarity, + sClearInputConfig->ClearInputFilter); + + /* Set the OCREF clear selection bit */ + htim->Instance->SMCR |= TIM_SMCR_OCCS; + } + break; + default: + break; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + if(sClearInputConfig->ClearInputState != RESET) + { + /* Enable the Ocref clear feature for Channel 1 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC1CE; + } + else + { + /* Disable the Ocref clear feature for Channel 1 */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1CE; + } + } + break; + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + if(sClearInputConfig->ClearInputState != RESET) + { + /* Enable the Ocref clear feature for Channel 2 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC2CE; + } + else + { + /* Disable the Ocref clear feature for Channel 2 */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2CE; + } + } + break; + case TIM_CHANNEL_3: + { + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + if(sClearInputConfig->ClearInputState != RESET) + { + /* Enable the Ocref clear feature for Channel 3 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC3CE; + } + else + { + /* Disable the Ocref clear feature for Channel 3 */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3CE; + } + } + break; + case TIM_CHANNEL_4: + { + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + if(sClearInputConfig->ClearInputState != RESET) + { + /* Enable the Ocref clear feature for Channel 4 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC4CE; + } + else + { + /* Disable the Ocref clear feature for Channel 4 */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4CE; + } + } + break; + default: + break; + } + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the clock source to be used + * @param htim : TIM handle + * @param sClockSourceConfig : pointer to a TIM_ClockConfigTypeDef structure that + * contains the clock source information for the TIM peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef * sClockSourceConfig) +{ + uint32_t tmpsmcr = 0; + + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Check the parameters */ + assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource)); + + /* Reset the SMS, TS, ECE, ETPS and ETRF bits */ + tmpsmcr = htim->Instance->SMCR; + tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS); + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + htim->Instance->SMCR = tmpsmcr; + + switch (sClockSourceConfig->ClockSource) + { + case TIM_CLOCKSOURCE_INTERNAL: + { + assert_param(IS_TIM_INSTANCE(htim->Instance)); + /* Disable slave mode to clock the prescaler directly with the internal clock */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + } + break; + + case TIM_CLOCKSOURCE_ETRMODE1: + { + /* Check whether or not the timer instance supports external trigger input mode 1 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance)); + + /* Check ETR input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + /* Configure the ETR Clock source */ + TIM_ETR_SetConfig(htim->Instance, + sClockSourceConfig->ClockPrescaler, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + /* Reset the SMS and TS Bits */ + tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS); + /* Select the External clock mode1 and the ETRF trigger */ + tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1); + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + } + break; + + case TIM_CLOCKSOURCE_ETRMODE2: + { + /* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance)); + + /* Check ETR input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + /* Configure the ETR Clock source */ + TIM_ETR_SetConfig(htim->Instance, + sClockSourceConfig->ClockPrescaler, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + /* Enable the External clock mode2 */ + htim->Instance->SMCR |= TIM_SMCR_ECE; + } + break; + + case TIM_CLOCKSOURCE_TI1: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI1 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI1_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1); + } + break; + case TIM_CLOCKSOURCE_TI2: + { + /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI2 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI2_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2); + } + break; + case TIM_CLOCKSOURCE_TI1ED: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI1 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI1_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED); + } + break; + case TIM_CLOCKSOURCE_ITR0: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); + + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_ITR0); + } + break; + case TIM_CLOCKSOURCE_ITR1: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); + + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_ITR1); + } + break; + case TIM_CLOCKSOURCE_ITR2: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); + + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_ITR2); + } + break; + case TIM_CLOCKSOURCE_ITR3: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); + + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_ITR3); + } + break; + + default: + break; + } + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Selects the signal connected to the TI1 input: direct from CH1_input + * or a XOR combination between CH1_input, CH2_input & CH3_input + * @param htim : TIM handle. + * @param TI1_Selection : Indicate whether or not channel 1 is connected to the + * output of a XOR gate. + * This parameter can be one of the following values: + * @arg TIM_TI1SELECTION_CH1: The TIMx_CH1 pin is connected to TI1 input + * @arg TIM_TI1SELECTION_XORCOMBINATION: The TIMx_CH1, CH2 and CH3 + * pins are connected to the TI1 input (XOR combination) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection) +{ + uint32_t tmpcr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TI1SELECTION(TI1_Selection)); + + /* Get the TIMx CR2 register value */ + tmpcr2 = htim->Instance->CR2; + + /* Reset the TI1 selection */ + tmpcr2 &= ~TIM_CR2_TI1S; + + /* Set the the TI1 selection */ + tmpcr2 |= TI1_Selection; + + /* Write to TIMxCR2 */ + htim->Instance->CR2 = tmpcr2; + + return HAL_OK; +} + +/** + * @brief Configures the TIM in Slave mode + * @param htim : TIM handle. + * @param sSlaveConfig : pointer to a TIM_SlaveConfigTypeDef structure that + * contains the selected trigger (internal trigger input, filtered + * timer input or external trigger input) and the ) and the Slave + * mode (Disable, Reset, Gated, Trigger, External clock mode 1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef * sSlaveConfig) +{ + /* Check the parameters */ + assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); + assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); + + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + TIM_SlaveTimer_SetConfig(htim, sSlaveConfig); + + /* Disable Trigger Interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_TRIGGER); + + /* Disable Trigger DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER); + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; + } + +/** + * @brief Configures the TIM in Slave mode in interrupt mode + * @param htim: TIM handle. + * @param sSlaveConfig: pointer to a TIM_SlaveConfigTypeDef structure that + * contains the selected trigger (internal trigger input, filtered + * timer input or external trigger input) and the ) and the Slave + * mode (Disable, Reset, Gated, Trigger, External clock mode 1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization_IT(TIM_HandleTypeDef *htim, + TIM_SlaveConfigTypeDef * sSlaveConfig) + { + /* Check the parameters */ + assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); + assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); + + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + TIM_SlaveTimer_SetConfig(htim, sSlaveConfig); + + /* Enable Trigger Interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_TRIGGER); + + /* Disable Trigger DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER); + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Read the captured value from Capture Compare unit + * @param htim : TIM handle. + * @param Channel : TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1 : TIM Channel 1 selected + * @arg TIM_CHANNEL_2 : TIM Channel 2 selected + * @arg TIM_CHANNEL_3 : TIM Channel 3 selected + * @arg TIM_CHANNEL_4 : TIM Channel 4 selected + * @retval Captured value + */ +uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpreg = 0; + + __HAL_LOCK(htim); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Return the capture 1 value */ + tmpreg = htim->Instance->CCR1; + + break; + } + case TIM_CHANNEL_2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Return the capture 2 value */ + tmpreg = htim->Instance->CCR2; + + break; + } + + case TIM_CHANNEL_3: + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Return the capture 3 value */ + tmpreg = htim->Instance->CCR3; + + break; + } + + case TIM_CHANNEL_4: + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Return the capture 4 value */ + tmpreg = htim->Instance->CCR4; + + break; + } + + default: + break; + } + + __HAL_UNLOCK(htim); + return tmpreg; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions + * @brief TIM Callbacks functions + * +@verbatim + ============================================================================== + ##### TIM Callbacks functions ##### + ============================================================================== + [..] + This section provides TIM callback functions: + (+) Timer Period elapsed callback + (+) Timer Output Compare callback + (+) Timer Input capture callback + (+) Timer Trigger callback + (+) Timer Error callback + +@endverbatim + * @{ + */ + +/** + * @brief Period elapsed callback in non blocking mode + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the __HAL_TIM_PeriodElapsedCallback could be implemented in the user file + */ + +} +/** + * @brief Output Compare callback in non blocking mode + * @param htim : TIM OC handle + * @retval None + */ +__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the __HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file + */ +} +/** + * @brief Input Capture callback in non blocking mode + * @param htim : TIM IC handle + * @retval None + */ +__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the __HAL_TIM_IC_CaptureCallback could be implemented in the user file + */ +} + +/** + * @brief PWM Pulse finished callback in non blocking mode + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the __HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file + */ +} + +/** + * @brief Hall Trigger detection callback in non blocking mode + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_TriggerCallback could be implemented in the user file + */ +} + +/** + * @brief Timer error callback in non blocking mode + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIM_ErrorCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group10 Peripheral State functions + * @brief Peripheral State functions + * +@verbatim + ============================================================================== + ##### Peripheral State functions ##### + ============================================================================== + [..] + This subsection permit to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the TIM Base state + * @param htim : TIM Base handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM OC state + * @param htim : TIM Ouput Compare handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM PWM state + * @param htim : TIM handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Input Capture state + * @param htim : TIM IC handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM One Pulse Mode state + * @param htim : TIM OPM handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Encoder Mode state + * @param htim : TIM Encoder handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup TIM_Private_Functions + * @{ + */ + +/** + * @brief TIM DMA error callback + * @param hdma : pointer to DMA handle. + * @retval None + */ +void TIM_DMAError(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef* htim = ( TIM_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + + htim->State= HAL_TIM_STATE_READY; + + HAL_TIM_ErrorCallback(htim); +} + +/** + * @brief TIM DMA Delay Pulse complete callback. + * @param hdma : pointer to DMA handle. + * @retval None + */ +void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef* htim = ( TIM_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + + htim->State= HAL_TIM_STATE_READY; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + } + + HAL_TIM_PWM_PulseFinishedCallback(htim); + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} +/** + * @brief TIM DMA Capture complete callback. + * @param hdma : pointer to DMA handle. + * @retval None + */ +void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef* htim = ( TIM_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + + htim->State= HAL_TIM_STATE_READY; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + } + + HAL_TIM_IC_CaptureCallback(htim); + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Period Elapse complete callback. + * @param hdma : pointer to DMA handle. + * @retval None + */ +static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef* htim = ( TIM_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + + htim->State= HAL_TIM_STATE_READY; + + HAL_TIM_PeriodElapsedCallback(htim); +} + +/** + * @brief TIM DMA Trigger callback. + * @param hdma : pointer to DMA handle. + * @retval None + */ +static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef* htim = ( TIM_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + + htim->State= HAL_TIM_STATE_READY; + + HAL_TIM_TriggerCallback(htim); +} + +/** + * @brief Time Base configuration + * @param TIMx : TIM periheral + * @param Structure : TIM Base configuration structure + * @retval None + */ +void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) +{ + uint32_t tmpcr1 = 0; + tmpcr1 = TIMx->CR1; + + /* Set TIM Time Base Unit parameters ---------------------------------------*/ + if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) + { + /* Select the Counter Mode */ + tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); + tmpcr1 |= Structure->CounterMode; + } + + if(IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) + { + /* Set the clock division */ + tmpcr1 &= ~TIM_CR1_CKD; + tmpcr1 |= (uint32_t)Structure->ClockDivision; + } + + TIMx->CR1 = tmpcr1; + + /* Set the Autoreload value */ + TIMx->ARR = (uint32_t)Structure->Period ; + + /* Set the Prescaler value */ + TIMx->PSC = (uint32_t)Structure->Prescaler; + + if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) + { + /* Set the Repetition Counter value */ + TIMx->RCR = Structure->RepetitionCounter; + } + + /* Generate an update event to reload the Prescaler + and the repetition counter(only for TIM1 and TIM8) value immediatly */ + TIMx->EGR = TIM_EGR_UG; +} + +/** + * @brief Time Ouput Compare 1 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config : The ouput configuration structure + * @retval None + */ +static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx = 0; + uint32_t tmpccer = 0; + uint32_t tmpcr2 = 0; + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= ~TIM_CCER_CC1E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + + /* Reset the Output Compare Mode Bits */ + tmpccmrx &= ~TIM_CCMR1_OC1M; + tmpccmrx &= ~TIM_CCMR1_CC1S; + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC1P; + /* Set the Output Compare Polarity */ + tmpccer |= OC_Config->OCPolarity; + + if(IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) + { + /* Check parameters */ + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC1NP; + /* Set the Output N Polarity */ + tmpccer |= OC_Config->OCNPolarity; + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC1NE; + } + + if(IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS1; + tmpcr2 &= ~TIM_CR2_OIS1N; + /* Set the Output Idle state */ + tmpcr2 |= OC_Config->OCIdleState; + /* Set the Output N Idle state */ + tmpcr2 |= OC_Config->OCNIdleState; + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR1 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Time Ouput Compare 2 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config : The ouput configuration structure + * @retval None + */ +void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx = 0; + uint32_t tmpccer = 0; + uint32_t tmpcr2 = 0; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC2E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR1_OC2M; + tmpccmrx &= ~TIM_CCMR1_CC2S; + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8); + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC2P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 4); + + if(IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) + { + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC2NP; + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 4); + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC2NE; + + } + + if(IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS2; + tmpcr2 &= ~TIM_CR2_OIS2N; + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 2); + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 2); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR2 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Time Ouput Compare 3 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config : The ouput configuration structure + * @retval None + */ +static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx = 0; + uint32_t tmpccer = 0; + uint32_t tmpcr2 = 0; + + /* Disable the Channel 3: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC3E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR2_OC3M; + tmpccmrx &= ~TIM_CCMR2_CC3S; + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC3P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 8); + + if(IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) + { + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC3NP; + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 8); + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC3NE; + } + + if(IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS3; + tmpcr2 &= ~TIM_CR2_OIS3N; + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 4); + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 4); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR3 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Time Ouput Compare 4 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config : The ouput configuration structure + * @retval None + */ +static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx = 0; + uint32_t tmpccer = 0; + uint32_t tmpcr2 = 0; + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= ~TIM_CCER_CC4E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR2_OC4M; + tmpccmrx &= ~TIM_CCMR2_CC4S; + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8); + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC4P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 12); + + if(IS_TIM_BREAK_INSTANCE(TIMx)) + { + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS4; + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 6); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR4 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + + +/** + * @brief Time Slave configuration + * @param htim: pointer to a TIM_HandleTypeDef structure that contains + * the configuration information for TIM module. + * @param sSlaveConfig: The slave configuration structure + * @retval None + */ +static void TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, + TIM_SlaveConfigTypeDef * sSlaveConfig) +{ + uint32_t tmpsmcr = 0; + uint32_t tmpccmr1 = 0; + uint32_t tmpccer = 0; + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* Reset the Trigger Selection Bits */ + tmpsmcr &= ~TIM_SMCR_TS; + /* Set the Input Trigger source */ + tmpsmcr |= sSlaveConfig->InputTrigger; + + /* Reset the slave mode Bits */ + tmpsmcr &= ~TIM_SMCR_SMS; + /* Set the slave mode */ + tmpsmcr |= sSlaveConfig->SlaveMode; + + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + + /* Configure the trigger prescaler, filter, and polarity */ + switch (sSlaveConfig->InputTrigger) + { + case TIM_TS_ETRF: + { + /* Check the parameters */ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPRESCALER(sSlaveConfig->TriggerPrescaler)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + /* Configure the ETR Trigger source */ + TIM_ETR_SetConfig(htim->Instance, + sSlaveConfig->TriggerPrescaler, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + } + break; + + case TIM_TS_TI1F_ED: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + /* Disable the Channel 1: Reset the CC1E Bit */ + tmpccer = htim->Instance->CCER; + htim->Instance->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = htim->Instance->CCMR1; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4); + + /* Write to TIMx CCMR1 and CCER registers */ + htim->Instance->CCMR1 = tmpccmr1; + htim->Instance->CCER = tmpccer; + + } + break; + + case TIM_TS_TI1FP1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + /* Configure TI1 Filter and Polarity */ + TIM_TI1_ConfigInputStage(htim->Instance, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + } + break; + + case TIM_TS_TI2FP2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + /* Configure TI2 Filter and Polarity */ + TIM_TI2_ConfigInputStage(htim->Instance, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + } + break; + + case TIM_TS_ITR0: + { + /* Check the parameter */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + } + break; + + case TIM_TS_ITR1: + { + /* Check the parameter */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + } + break; + + case TIM_TS_ITR2: + { + /* Check the parameter */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + } + break; + + case TIM_TS_ITR3: + { + /* Check the parameter */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + } + break; + + default: + break; + } +} + +/** + * @brief Configure the TI1 as Input. + * @param TIMx to select the TIM peripheral. + * @param TIM_ICPolarity : The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection : specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 1 is selected to be connected to IC1. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 1 is selected to be connected to IC2. + * @arg TIM_ICSELECTION_TRC: TIM Input 1 is selected to be connected to TRC. + * @param TIM_ICFilter : Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI2FP1 + * (on channel2 path) is used as the input signal. Therefore CCMR1 must be + * protected against un-initialized filter and polarity values. + */ +void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1 = 0; + uint32_t tmpccer = 0; + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + + /* Select the Input */ + if(IS_TIM_CC2_INSTANCE(TIMx) != RESET) + { + tmpccmr1 &= ~TIM_CCMR1_CC1S; + tmpccmr1 |= TIM_ICSelection; + } + else + { + tmpccmr1 |= TIM_CCMR1_CC1S_0; + } + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= ((TIM_ICFilter << 4) & TIM_CCMR1_IC1F); + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP)); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the Polarity and Filter for TI1. + * @param TIMx to select the TIM peripheral. + * @param TIM_ICPolarity : The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICFilter : Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1 = 0; + uint32_t tmpccer = 0; + + /* Disable the Channel 1: Reset the CC1E Bit */ + tmpccer = TIMx->CCER; + TIMx->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = TIMx->CCMR1; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= (TIM_ICFilter << 4); + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + tmpccer |= TIM_ICPolarity; + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI2 as Input. + * @param TIMx to select the TIM peripheral + * @param TIM_ICPolarity : The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection : specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 2 is selected to be connected to IC2. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 2 is selected to be connected to IC1. + * @arg TIM_ICSELECTION_TRC: TIM Input 2 is selected to be connected to TRC. + * @param TIM_ICFilter : Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI1FP2 + * (on channel1 path) is used as the input signal. Therefore CCMR1 must be + * protected against un-initialized filter and polarity values. + */ +static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1 = 0; + uint32_t tmpccer = 0; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC2E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + + /* Select the Input */ + tmpccmr1 &= ~TIM_CCMR1_CC2S; + tmpccmr1 |= (TIM_ICSelection << 8); + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC2F; + tmpccmr1 |= ((TIM_ICFilter << 12) & TIM_CCMR1_IC2F); + + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + tmpccer |= ((TIM_ICPolarity << 4) & (TIM_CCER_CC2P | TIM_CCER_CC2NP)); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the Polarity and Filter for TI2. + * @param TIMx to select the TIM peripheral. + * @param TIM_ICPolarity : The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICFilter : Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1 = 0; + uint32_t tmpccer = 0; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC2E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC2F; + tmpccmr1 |= (TIM_ICFilter << 12); + + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + tmpccer |= (TIM_ICPolarity << 4); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI3 as Input. + * @param TIMx to select the TIM peripheral + * @param TIM_ICPolarity : The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection : specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 3 is selected to be connected to IC3. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 3 is selected to be connected to IC4. + * @arg TIM_ICSELECTION_TRC: TIM Input 3 is selected to be connected to TRC. + * @param TIM_ICFilter : Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI3FP4 + * (on channel1 path) is used as the input signal. Therefore CCMR2 must be + * protected against un-initialized filter and polarity values. + */ +static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr2 = 0; + uint32_t tmpccer = 0; + + /* Disable the Channel 3: Reset the CC3E Bit */ + TIMx->CCER &= ~TIM_CCER_CC3E; + tmpccmr2 = TIMx->CCMR2; + tmpccer = TIMx->CCER; + + /* Select the Input */ + tmpccmr2 &= ~TIM_CCMR2_CC3S; + tmpccmr2 |= TIM_ICSelection; + + /* Set the filter */ + tmpccmr2 &= ~TIM_CCMR2_IC3F; + tmpccmr2 |= ((TIM_ICFilter << 4) & TIM_CCMR2_IC3F); + + /* Select the Polarity and set the CC3E Bit */ + tmpccer &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP); + tmpccer |= ((TIM_ICPolarity << 8) & (TIM_CCER_CC3P | TIM_CCER_CC3NP)); + + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI4 as Input. + * @param TIMx to select the TIM peripheral + * @param TIM_ICPolarity : The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection : specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 4 is selected to be connected to IC4. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 4 is selected to be connected to IC3. + * @arg TIM_ICSELECTION_TRC: TIM Input 4 is selected to be connected to TRC. + * @param TIM_ICFilter : Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI4FP3 + * (on channel1 path) is used as the input signal. Therefore CCMR2 must be + * protected against un-initialized filter and polarity values. + * @retval None + */ +static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr2 = 0; + uint32_t tmpccer = 0; + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= ~TIM_CCER_CC4E; + tmpccmr2 = TIMx->CCMR2; + tmpccer = TIMx->CCER; + + /* Select the Input */ + tmpccmr2 &= ~TIM_CCMR2_CC4S; + tmpccmr2 |= (TIM_ICSelection << 8); + + /* Set the filter */ + tmpccmr2 &= ~TIM_CCMR2_IC4F; + tmpccmr2 |= ((TIM_ICFilter << 12) & TIM_CCMR2_IC4F); + + /* Select the Polarity and set the CC4E Bit */ + tmpccer &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP); + tmpccer |= ((TIM_ICPolarity << 12) & (TIM_CCER_CC4P | TIM_CCER_CC4NP)); + + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer ; +} + +/** + * @brief Selects the Input Trigger source + * @param TIMx to select the TIM peripheral + * @param InputTriggerSource : The Input Trigger source. + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0 : Internal Trigger 0 + * @arg TIM_TS_ITR1 : Internal Trigger 1 + * @arg TIM_TS_ITR2 : Internal Trigger 2 + * @arg TIM_TS_ITR3 : Internal Trigger 3 + * @arg TIM_TS_TI1F_ED : TI1 Edge Detector + * @arg TIM_TS_TI1FP1 : Filtered Timer Input 1 + * @arg TIM_TS_TI2FP2 : Filtered Timer Input 2 + * @arg TIM_TS_ETRF : External Trigger input + * @retval None + */ +static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint16_t InputTriggerSource) +{ + uint32_t tmpsmcr = 0; + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + /* Reset the TS Bits */ + tmpsmcr &= ~TIM_SMCR_TS; + /* Set the Input Trigger source and the slave mode*/ + tmpsmcr |= InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1; + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} +/** + * @brief Configures the TIMx External Trigger (ETR). + * @param TIMx to select the TIM peripheral + * @param TIM_ExtTRGPrescaler : The external Trigger Prescaler. + * This parameter can be one of the following values: + * @arg TIM_ETRPRESCALER_DIV1: ETRP Prescaler OFF. + * @arg TIM_ETRPRESCALER_DIV2: ETRP frequency divided by 2. + * @arg TIM_ETRPRESCALER_DIV4: ETRP frequency divided by 4. + * @arg TIM_ETRPRESCALER_DIV8: ETRP frequency divided by 8. + * @param TIM_ExtTRGPolarity : The external Trigger Polarity. + * This parameter can be one of the following values: + * @arg TIM_ETRPOLARITY_INVERTED: active low or falling edge active. + * @arg TIM_ETRPOLARITY_NONINVERTED: active high or rising edge active. + * @param ExtTRGFilter : External Trigger Filter. + * This parameter must be a value between 0x00 and 0x0F + * @retval None + */ +static void TIM_ETR_SetConfig(TIM_TypeDef* TIMx, uint32_t TIM_ExtTRGPrescaler, + uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) +{ + uint32_t tmpsmcr = 0; + + tmpsmcr = TIMx->SMCR; + + /* Reset the ETR Bits */ + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + + /* Set the Prescaler, the Filter value and the Polarity */ + tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8))); + + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} + +/** + * @brief Enables or disables the TIM Capture Compare Channel x. + * @param TIMx to select the TIM peripheral + * @param Channel : specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @arg TIM_CHANNEL_4: TIM Channel 4 + * @param ChannelState : specifies the TIM Channel CCxE bit new state. + * This parameter can be: TIM_CCx_ENABLE or TIM_CCx_Disable. + * @retval None + */ +void TIM_CCxChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelState) +{ + uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(TIMx)); + assert_param(IS_TIM_CHANNELS(Channel)); + + tmp = TIM_CCER_CC1E << Channel; + + /* Reset the CCxE Bit */ + TIMx->CCER &= ~tmp; + + /* Set or reset the CCxE Bit */ + TIMx->CCER |= (uint32_t)(ChannelState << Channel); +} + +/** + * @} + */ + +#endif /* HAL_TIM_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,1857 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_tim_ex.c + * @author MCD Application Team + * @version V1.0.4 + * @date 29-April-2016 + * @brief TIM HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Timer Extended peripheral: + * + Time Hall Sensor Interface Initialization + * + Time Hall Sensor Interface Start + * + Time Complementary signal bread and dead time configuration + * + Time Master and Slave synchronization configuration + * + Timer remapping capabilities configuration + @verbatim + ============================================================================== + ##### TIMER Extended features ##### + ============================================================================== + [..] + The Timer Extended features include: + (#) Complementary outputs with programmable dead-time for : + (++) Output Compare + (++) PWM generation (Edge and Center-aligned Mode) + (++) One-pulse mode output + (#) Synchronization circuit to control the timer with external signals and to + interconnect several timers together. + (#) Break input to put the timer output signals in reset state or in a known state. + (#) Supports incremental (quadrature) encoder and hall-sensor circuitry for + positioning purposes + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Initialize the TIM low level resources by implementing the following functions + depending from feature used : + (++) Complementary Output Compare : HAL_TIM_OC_MspInit() + (++) Complementary PWM generation : HAL_TIM_PWM_MspInit() + (++) Complementary One-pulse mode output : HAL_TIM_OnePulse_MspInit() + (++) Hall Sensor output : HAL_TIMEx_HallSensor_MspInit() + + (#) Initialize the TIM low level resources : + (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); + (##) TIM pins configuration + (+++) Enable the clock for the TIM GPIOs using the following function: + __HAL_RCC_GPIOx_CLK_ENABLE(); + (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); + + (#) The external Clock can be configured, if needed (the default clock is the + internal clock from the APBx), using the following function: + HAL_TIM_ConfigClockSource, the clock configuration should be done before + any start function. + + (#) Configure the TIM in the desired functioning mode using one of the + initialization function of this driver: + (++) HAL_TIMEx_HallSensor_Init and HAL_TIMEx_ConfigCommutationEvent: to use the + Timer Hall Sensor Interface and the commutation event with the corresponding + Interrupt and DMA request if needed (Note that One Timer is used to interface + with the Hall sensor Interface and another Timer should be used to use + the commutation event). + + (#) Activate the TIM peripheral using one of the start functions: + (++) Complementary Output Compare : HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), HAL_TIMEx_OCN_Start_IT() + (++) Complementary PWM generation : HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), HAL_TIMEx_PWMN_Start_IT() + (++) Complementary One-pulse mode output : HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT() + (++) Hall Sensor output : HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), HAL_TIMEx_HallSensor_Start_IT(). + + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** +*/ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/** @addtogroup STM32F1xx_HAL_Driver + * @{ + */ + +/** @defgroup TIMEx TIMEx + * @brief TIM Extended HAL module driver + * @{ + */ + +#ifdef HAL_TIM_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ + +#if defined (STM32F100xB) || defined (STM32F100xE) || \ + defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ + defined (STM32F105xC) || defined (STM32F107xC) +/** @defgroup TIMEx_Private_Functions TIMEx Private Functions + * @{ + */ +static void TIM_CCxNChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelNState); +/** + * @} + */ +#endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ + /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ + /* defined(STM32F105xC) || defined(STM32F107xC) */ + +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup TIMEx_Exported_Functions TIMEx Exported Functions + * @{ + */ + + +/** @defgroup TIMEx_Exported_Functions_Group1 Timer Hall Sensor functions + * @brief Timer Hall Sensor functions + * +@verbatim + ============================================================================== + ##### Timer Hall Sensor functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure TIM HAL Sensor. + (+) De-initialize TIM HAL Sensor. + (+) Start the Hall Sensor Interface. + (+) Stop the Hall Sensor Interface. + (+) Start the Hall Sensor Interface and enable interrupts. + (+) Stop the Hall Sensor Interface and disable interrupts. + (+) Start the Hall Sensor Interface and enable DMA transfers. + (+) Stop the Hall Sensor Interface and disable DMA transfers. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Hall Sensor Interface and create the associated handle. + * @param htim : TIM Encoder Interface handle + * @param sConfig : TIM Hall Sensor configuration structure + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef* sConfig) +{ + TIM_OC_InitTypeDef OC_Config; + + /* Check the TIM handle allocation */ + if(htim == NULL) + { + return HAL_ERROR; + } + + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); + + if(htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIMEx_HallSensor_MspInit(htim); + } + + /* Set the TIM state */ + htim->State= HAL_TIM_STATE_BUSY; + + /* Configure the Time base in the Encoder Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the Hall sensor */ + TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + /* Set the IC1PSC value */ + htim->Instance->CCMR1 |= sConfig->IC1Prescaler; + + /* Enable the Hall sensor interface (XOR function of the three inputs) */ + htim->Instance->CR2 |= TIM_CR2_TI1S; + + /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI1F_ED; + + /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_RESET; + + /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/ + OC_Config.OCFastMode = TIM_OCFAST_DISABLE; + OC_Config.OCIdleState = TIM_OCIDLESTATE_RESET; + OC_Config.OCMode = TIM_OCMODE_PWM2; + OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET; + OC_Config.OCNPolarity = TIM_OCNPOLARITY_HIGH; + OC_Config.OCPolarity = TIM_OCPOLARITY_HIGH; + OC_Config.Pulse = sConfig->Commutation_Delay; + + TIM_OC2_SetConfig(htim->Instance, &OC_Config); + + /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2 + register to 101 */ + htim->Instance->CR2 &= ~TIM_CR2_MMS; + htim->Instance->CR2 |= TIM_TRGO_OC2REF; + + /* Initialize the TIM state*/ + htim->State= HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM Hall Sensor interface + * @param htim : TIM Hall Sensor handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIMEx_HallSensor_MspDeInit(htim); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Hall Sensor MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Hall Sensor MSP. + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Hall Sensor Interface. + * @param htim : TIM Hall Sensor handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall sensor Interface. + * @param htim : TIM Hall Sensor handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Hall Sensor Interface in interrupt mode. + * @param htim : TIM Hall Sensor handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + + /* Enable the capture compare Interrupts 1 event */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall Sensor Interface in interrupt mode. + * @param htim : TIM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts event */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Hall Sensor Interface in DMA mode. + * @param htim : TIM Hall Sensor handle + * @param pData : The destination Buffer address. + * @param Length : The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) +{ + /* Check the parameters */ + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + + if((htim->State == HAL_TIM_STATE_BUSY)) + { + return HAL_BUSY; + } + else if((htim->State == HAL_TIM_STATE_READY)) + { + if(((uint32_t)pData == 0 ) && (Length > 0)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Set the DMA Input Capture 1 Callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel for Capture 1*/ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length); + + /* Enable the capture compare 1 Interrupt */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall Sensor Interface in DMA mode. + * @param htim : TIM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + + /* Disable the capture compare Interrupts 1 event */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +#if defined (STM32F100xB) || defined (STM32F100xE) || \ + defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ + defined (STM32F105xC) || defined (STM32F107xC) + +/** @defgroup TIMEx_Exported_Functions_Group2 Timer Complementary Output Compare functions + * @brief Timer Complementary Output Compare functions + * +@verbatim + ============================================================================== + ##### Timer Complementary Output Compare functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary Output Compare/PWM. + (+) Stop the Complementary Output Compare/PWM. + (+) Start the Complementary Output Compare/PWM and enable interrupts. + (+) Stop the Complementary Output Compare/PWM and disable interrupts. + (+) Start the Complementary Output Compare/PWM and enable DMA transfers. + (+) Stop the Complementary Output Compare/PWM and disable DMA transfers. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the TIM Output Compare signal generation on the complementary + * output. + * @param htim : TIM Output Compare handle + * @param Channel : TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Ouput */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation on the complementary + * output. + * @param htim : TIM handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Output Compare signal generation in interrupt mode + * on the complementary output. + * @param htim : TIM OC handle + * @param Channel : TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + } + break; + + default: + break; + } + + /* Enable the TIM Break interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); + + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Ouput */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation in interrupt mode + * on the complementary output. + * @param htim : TIM Output Compare handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + } + break; + + default: + break; + } + + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the TIM Break interrupt (only if no more channel is active) */ + tmpccer = htim->Instance->CCER; + if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == RESET) + { + __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); + } + + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Output Compare signal generation in DMA mode + * on the complementary output. + * @param htim : TIM Output Compare handle + * @param Channel : TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData : The source Buffer address. + * @param Length : The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + if((htim->State == HAL_TIM_STATE_BUSY)) + { + return HAL_BUSY; + } + else if((htim->State == HAL_TIM_STATE_READY)) + { + if(((uint32_t)pData == 0 ) && (Length > 0)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length); + + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length); + + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + case TIM_CHANNEL_3: +{ + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,Length); + + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length); + + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + } + break; + + default: + break; + } + + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Ouput */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation in DMA mode + * on the complementary output. + * @param htim : TIM Output Compare handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + } + break; + + default: + break; + } + + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group3 Timer Complementary PWM functions + * @brief Timer Complementary PWM functions + * +@verbatim + ============================================================================== + ##### Timer Complementary PWM functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary PWM. + (+) Stop the Complementary PWM. + (+) Start the Complementary PWM and enable interrupts. + (+) Stop the Complementary PWM and disable interrupts. + (+) Start the Complementary PWM and enable DMA transfers. + (+) Stop the Complementary PWM and disable DMA transfers. + (+) Start the Complementary Input Capture measurement. + (+) Stop the Complementary Input Capture. + (+) Start the Complementary Input Capture and enable interrupts. + (+) Stop the Complementary Input Capture and disable interrupts. + (+) Start the Complementary Input Capture and enable DMA transfers. + (+) Stop the Complementary Input Capture and disable DMA transfers. + (+) Start the Complementary One Pulse generation. + (+) Stop the Complementary One Pulse. + (+) Start the Complementary One Pulse and enable interrupts. + (+) Stop the Complementary One Pulse and disable interrupts. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the PWM signal generation on the complementary output. + * @param htim : TIM handle + * @param Channel : TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Ouput */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the PWM signal generation on the complementary output. + * @param htim : TIM handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the PWM signal generation in interrupt mode on the + * complementary output. + * @param htim : TIM handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + } + break; + + default: + break; + } + + /* Enable the TIM Break interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); + + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Ouput */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the PWM signal generation in interrupt mode on the + * complementary output. + * @param htim : TIM handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + } + break; + + default: + break; + } + + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the TIM Break interrupt (only if no more channel is active) */ + tmpccer = htim->Instance->CCER; + if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == RESET) + { + __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); + } + + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM PWM signal generation in DMA mode on the + * complementary output + * @param htim : TIM handle + * @param Channel : TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData : The source Buffer address. + * @param Length : The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + if((htim->State == HAL_TIM_STATE_BUSY)) + { + return HAL_BUSY; + } + else if((htim->State == HAL_TIM_STATE_READY)) + { + if(((uint32_t)pData == 0 ) && (Length > 0)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length); + + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length); + + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,Length); + + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Set the DMA Period elapsed callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length); + + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + } + break; + + default: + break; + } + + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Ouput */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM PWM signal generation in DMA mode on the complementary + * output + * @param htim : TIM handle + * @param Channel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + } + break; + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + } + break; + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + } + break; + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + } + break; + + default: + break; + } + + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group4 Timer Complementary One Pulse functions + * @brief Timer Complementary One Pulse functions + * +@verbatim + ============================================================================== + ##### Timer Complementary One Pulse functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary One Pulse generation. + (+) Stop the Complementary One Pulse. + (+) Start the Complementary One Pulse and enable interrupts. + (+) Stop the Complementary One Pulse and disable interrupts. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the TIM One Pulse signal generation on the complemetary + * output. + * @param htim : TIM One Pulse handle + * @param OutputChannel : TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) + { + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Enable the complementary One Pulse output */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); + + /* Enable the Main Ouput */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation on the complementary + * output. + * @param htim : TIM One Pulse handle + * @param OutputChannel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Disable the complementary One Pulse output */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); + + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM One Pulse signal generation in interrupt mode on the + * complementary channel. + * @param htim : TIM One Pulse handle + * @param OutputChannel : TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + + /* Enable the complementary One Pulse output */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); + + /* Enable the Main Ouput */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Return function status */ + return HAL_OK; + } + +/** + * @brief Stops the TIM One Pulse signal generation in interrupt mode on the + * complementary channel. + * @param htim : TIM One Pulse handle + * @param OutputChannel : TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + + /* Disable the complementary One Pulse output */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); + + /* Disable the Main Ouput */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +#endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ + /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ + /* defined(STM32F105xC) || defined(STM32F107xC) */ + +/** @defgroup TIMEx_Exported_Functions_Group5 Peripheral Control functions + * @brief Peripheral Control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Configure the commutation event in case of use of the Hall sensor interface. + (+) Configure Complementary channels, break features and dead time. + (+) Configure Master synchronization. + +@endverbatim + * @{ + */ + +#if defined (STM32F100xB) || defined (STM32F100xE) || \ + defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ + defined (STM32F105xC) || defined (STM32F107xC) + +/** + * @brief Configure the TIM commutation event sequence. + * @note: this function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @param htim : TIM handle + * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource : the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configure the TIM commutation event sequence with interrupt. + * @note: this function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @param htim : TIM handle + * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource : the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Enable the Commutation Interrupt Request */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configure the TIM commutation event sequence with DMA. + * @note: this function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @note: The user should configure the DMA in his own software, in This function only the COMDE bit is set + * @param htim : TIM handle + * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource : the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Enable the Commutation DMA Request */ + /* Set the DMA Commutation Callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError; + + /* Enable the Commutation DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State + * and the AOE(automatic output enable). + * @param htim : TIM handle + * @param sBreakDeadTimeConfig : pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that + * contains the BDTR Register configuration information for the TIM peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, + TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) +{ + /* Check the parameters */ + assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance)); + assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode)); + assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode)); + assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel)); + assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime)); + assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState)); + assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity)); + assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput)); + + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, + the OSSI State, the dead time value and the Automatic Output Enable Bit */ + htim->Instance->BDTR = (uint32_t)sBreakDeadTimeConfig->OffStateRunMode | + sBreakDeadTimeConfig->OffStateIDLEMode | + sBreakDeadTimeConfig->LockLevel | + sBreakDeadTimeConfig->DeadTime | + sBreakDeadTimeConfig->BreakState | + sBreakDeadTimeConfig->BreakPolarity | + sBreakDeadTimeConfig->AutomaticOutput; + + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +#endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ + /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ + /* defined(STM32F105xC) || defined(STM32F107xC) */ + +/** + * @brief Configures the TIM in master mode. + * @param htim : TIM handle. + * @param sMasterConfig : pointer to a TIM_MasterConfigTypeDef structure that + * contains the selected trigger output (TRGO) and the Master/Slave + * mode. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef * sMasterConfig) +{ + /* Check the parameters */ + assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); + assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); + + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Reset the MMS Bits */ + htim->Instance->CR2 &= ~TIM_CR2_MMS; + /* Select the TRGO source */ + htim->Instance->CR2 |= sMasterConfig->MasterOutputTrigger; + + /* Reset the MSM Bit */ + htim->Instance->SMCR &= ~TIM_SMCR_MSM; + /* Set or Reset the MSM Bit */ + htim->Instance->SMCR |= sMasterConfig->MasterSlaveMode; + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group6 Extension Callbacks functions + * @brief Extension Callbacks functions + * +@verbatim + ============================================================================== + ##### Extension Callbacks functions ##### + ============================================================================== + [..] + This section provides Extension TIM callback functions: + (+) Timer Commutation callback + (+) Timer Break callback + +@endverbatim + * @{ + */ + +/** + * @brief Hall commutation changed callback in non blocking mode + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIMEx_CommutationCallback could be implemented in the user file + */ +} + +/** + * @brief Hall Break detection callback in non blocking mode + * @param htim : TIM handle + * @retval None + */ +__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIMEx_BreakCallback could be implemented in the user file + */ +} + +/** + * @brief TIM DMA Commutation callback. + * @param hdma : pointer to DMA handle. + * @retval None + */ +void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef* htim = ( TIM_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + + htim->State= HAL_TIM_STATE_READY; + + HAL_TIMEx_CommutationCallback(htim); +} + +/** + * @} + */ + +#if defined (STM32F100xB) || defined (STM32F100xE) || \ + defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ + defined (STM32F105xC) || defined (STM32F107xC) + +/** @defgroup TIMEx_Exported_Functions_Group7 Extension Peripheral State functions + * @brief Extension Peripheral State functions + * +@verbatim + ============================================================================== + ##### Extension Peripheral State functions ##### + ============================================================================== + [..] + This subsection permit to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the TIM Hall Sensor interface state + * @param htim : TIM Hall Sensor handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @} + */ +#endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ + /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ + /* defined(STM32F105xC) || defined(STM32F107xC) */ + +/** + * @} + */ + +#if defined (STM32F100xB) || defined (STM32F100xE) || \ + defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ + defined (STM32F105xC) || defined (STM32F107xC) + +/** @addtogroup TIMEx_Private_Functions + * @{ + */ + +/** + * @brief Enables or disables the TIM Capture Compare Channel xN. + * @param TIMx to select the TIM peripheral + * @param Channel : specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_Channel_1: TIM Channel 1 + * @arg TIM_Channel_2: TIM Channel 2 + * @arg TIM_Channel_3: TIM Channel 3 + * @param ChannelNState : specifies the TIM Channel CCxNE bit new state. + * This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable. + * @retval None + */ +static void TIM_CCxNChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelNState) +{ + uint32_t tmp = 0; + + tmp = TIM_CCER_CC1NE << Channel; + + /* Reset the CCxNE Bit */ + TIMx->CCER &= ~tmp; + + /* Set or reset the CCxNE Bit */ + TIMx->CCER |= (uint32_t)(ChannelNState << Channel); +} + +/** + * @} + */ + +#endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ + /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ + /* defined(STM32F105xC) || defined(STM32F107xC) */ + +#endif /* HAL_TIM_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/EWARM/Project.eww --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/EWARM/Project.eww Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,7 @@ + + + + $WS_DIR$\f103c8.ewp + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/EWARM/f103c8.ewd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/EWARM/f103c8.ewd Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,493 @@ + + + 2 + + f103c8 + + ARM + + 1 + + C-SPY + 2 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + JLINK_ID + 2 + + 13 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/EWARM/f103c8.ewp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/EWARM/f103c8.ewp Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,8021 @@ + + + 2 + + f103c8 + + ARM + + 1 + + General + 3 + + 21 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 28 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + + Application + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EWARM + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/iar/startup_stm32f103xb.s + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + User + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Src/stm32f1xx_it.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Src/main.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Src/stm32f1xx_hal_msp.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Drivers + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + STM32F1xx_HAL_Driver + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CMSIS + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJ_DIR$/../Src/system_stm32f1xx.c + + + + + + + ICCARM + + 28 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/EWARM/stm32f103xb_flash.icf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/EWARM/stm32f103xb_flash.icf Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0801FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x20004FFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/EWARM/stm32f103xb_sram.icf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/EWARM/stm32f103xb_sram.icf Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x20000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x20000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x200013FF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20001400; +define symbol __ICFEDIT_region_RAM_end__ = 0x20004FFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Inc/main.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Inc/main.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,57 @@ +/** + ****************************************************************************** + * File Name : main.h + * Description : This file contains the common defines of the application + ****************************************************************************** + * + * COPYRIGHT(c) 2017 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + /* Includes ------------------------------------------------------------------*/ + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private define ------------------------------------------------------------*/ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +/** + * @} + */ + +/** + * @} +*/ + +#endif /* __MAIN_H */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Inc/stm32f1xx_hal_conf.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Inc/stm32f1xx_hal_conf.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,350 @@ +/** + ****************************************************************************** + * @file stm32f1xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_CONF_H +#define __STM32F1xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "main.h" +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED +/*#define HAL_ADC_MODULE_ENABLED */ +/*#define HAL_CAN_MODULE_ENABLED */ +/*#define HAL_CEC_MODULE_ENABLED */ +/*#define HAL_CORTEX_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_DMA_MODULE_ENABLED */ +/*#define HAL_ETH_MODULE_ENABLED */ +/*#define HAL_FLASH_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +/*#define HAL_I2C_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_PCCARD_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_HCD_MODULE_ENABLED */ +/*#define HAL_PWR_MODULE_ENABLED */ +/*#define HAL_RCC_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_SDRAM_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_SRAM_MODULE_ENABLED */ +#define HAL_TIM_MODULE_ENABLED +/*#define HAL_UART_MODULE_ENABLED */ +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ + +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0) /*!< tick interrupt priority (lowest by default) */ +#define USE_RTOS 0 +#define PREFETCH_ENABLE 1 + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1 */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2 +#define MAC_ADDR1 0 +#define MAC_ADDR2 0 +#define MAC_ADDR3 0 +#define MAC_ADDR4 0 +#define MAC_ADDR5 0 + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB ((uint32_t)8) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB ((uint32_t)4) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS 0x01U +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY ((uint32_t)0x000000FF) +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFF) + +#define PHY_READ_TO ((uint32_t)0x0000FFFF) +#define PHY_WRITE_TO ((uint32_t)0x0000FFFF) + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f1xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f1xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f1xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f1xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f1xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f1xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f1xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f1xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f1xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f1xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f1xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f1xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f1xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f1xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f1xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f1xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f1xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f1xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f1xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f1xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f1xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f1xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f1xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f1xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f1xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f1xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f1xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f1xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f1xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f1xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Inc/stm32f1xx_it.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Inc/stm32f1xx_it.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,64 @@ +/** + ****************************************************************************** + * @file stm32f1xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * + * COPYRIGHT(c) 2017 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_IT_H +#define __STM32F1xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/STM32F103C8_FLASH.ld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/STM32F103C8_FLASH.ld Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,168 @@ +/* +***************************************************************************** +** + +** File : stm32_flash.ld +** +** Abstract : Linker script for STM32F103C8 Device with +** 64KByte FLASH, 20KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Target : STMicroelectronics STM32 +** +** Environment : Atollic TrueSTUDIO(R) +** +** Distribution: The file is distributed as is, without any warranty +** of any kind. +** +** (c)Copyright Atollic AB. +** You may use this file as-is or modify it according to the needs of your +** project. This file may only be built (assembled or compiled and linked) +** using the Atollic TrueSTUDIO(R) product. The use of this file together +** with other tools than Atollic TrueSTUDIO(R) is not permitted. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20005000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K +FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(4); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(4); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Src/main.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Src/main.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,272 @@ +/** + ****************************************************************************** + * File Name : main.c + * Description : Main program body + ****************************************************************************** + * + * COPYRIGHT(c) 2017 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f1xx_hal.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private variables ---------------------------------------------------------*/ +TIM_HandleTypeDef htim4; + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +void Error_Handler(void); +static void MX_GPIO_Init(void); +static void MX_TIM4_Init(void); +void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); + + +/* USER CODE BEGIN PFP */ +/* Private function prototypes -----------------------------------------------*/ + +/* USER CODE END PFP */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +int main(void) +{ + + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration----------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* Configure the system clock */ + SystemClock_Config(); + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_TIM4_Init(); + + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + + } + /* USER CODE END 3 */ + +} + +/** System Clock Configuration +*/ +void SystemClock_Config(void) +{ + + RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = 16; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) + { + Error_Handler(); + } + + /**Configure the Systick interrupt time + */ + HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); + + /**Configure the Systick + */ + HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); + + /* SysTick_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); +} + +/* TIM4 init function */ +static void MX_TIM4_Init(void) +{ + + TIM_ClockConfigTypeDef sClockSourceConfig; + TIM_MasterConfigTypeDef sMasterConfig; + TIM_OC_InitTypeDef sConfigOC; + + htim4.Instance = TIM4; + htim4.Init.Prescaler = 0; + htim4.Init.CounterMode = TIM_COUNTERMODE_UP; + htim4.Init.Period = 0; + htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + if (HAL_TIM_Base_Init(&htim4) != HAL_OK) + { + Error_Handler(); + } + + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + + if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) + { + Error_Handler(); + } + + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + + HAL_TIM_MspPostInit(&htim4); + +} + +/** Configure pins as + * Analog + * Input + * Output + * EVENT_OUT + * EXTI +*/ +static void MX_GPIO_Init(void) +{ + + GPIO_InitTypeDef GPIO_InitStruct; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); + + /*Configure GPIO pin : PA5 */ + GPIO_InitStruct.Pin = GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @param None + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler */ + /* User can add his own implementation to report the HAL error return state */ + while(1) + { + } + /* USER CODE END Error_Handler */ +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ + +} + +#endif + +/** + * @} + */ + +/** + * @} +*/ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Src/stm32f1xx_hal_msp.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Src/stm32f1xx_hal_msp.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,150 @@ +/** + ****************************************************************************** + * File Name : stm32f1xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * + * COPYRIGHT(c) 2017 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +extern void Error_Handler(void); +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_AFIO_CLK_ENABLE(); + + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); + + /* System interrupt init*/ + /* MemoryManagement_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(MemoryManagement_IRQn, 0, 0); + /* BusFault_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(BusFault_IRQn, 0, 0); + /* UsageFault_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(UsageFault_IRQn, 0, 0); + /* SVCall_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(SVCall_IRQn, 0, 0); + /* DebugMonitor_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DebugMonitor_IRQn, 0, 0); + /* PendSV_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(PendSV_IRQn, 0, 0); + /* SysTick_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); + + /**DISABLE: JTAG-DP Disabled and SW-DP Disabled + */ + __HAL_AFIO_REMAP_SWJ_DISABLE(); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + + if(htim_base->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspInit 0 */ + + /* USER CODE END TIM4_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM4_CLK_ENABLE(); + /* USER CODE BEGIN TIM4_MspInit 1 */ + + /* USER CODE END TIM4_MspInit 1 */ + } + +} + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) +{ + + GPIO_InitTypeDef GPIO_InitStruct; + if(htim->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspPostInit 0 */ + + /* USER CODE END TIM4_MspPostInit 0 */ + + /**TIM4 GPIO Configuration + PB6 ------> TIM4_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM4_MspPostInit 1 */ + + /* USER CODE END TIM4_MspPostInit 1 */ + } + +} + +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) +{ + + if(htim_base->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspDeInit 0 */ + + /* USER CODE END TIM4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM4_CLK_DISABLE(); + } + /* USER CODE BEGIN TIM4_MspDeInit 1 */ + + /* USER CODE END TIM4_MspDeInit 1 */ + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Src/stm32f1xx_it.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Src/stm32f1xx_it.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,189 @@ +/** + ****************************************************************************** + * @file stm32f1xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * + * COPYRIGHT(c) 2017 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" +#include "stm32f1xx.h" +#include "stm32f1xx_it.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M3 Processor Interruption and Exception Handlers */ +/******************************************************************************/ + +/** +* @brief This function handles Non maskable interrupt. +*/ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** +* @brief This function handles Hard fault interrupt. +*/ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + } + /* USER CODE BEGIN HardFault_IRQn 1 */ + + /* USER CODE END HardFault_IRQn 1 */ +} + +/** +* @brief This function handles Memory management fault. +*/ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + } + /* USER CODE BEGIN MemoryManagement_IRQn 1 */ + + /* USER CODE END MemoryManagement_IRQn 1 */ +} + +/** +* @brief This function handles Prefetch fault, memory access fault. +*/ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + } + /* USER CODE BEGIN BusFault_IRQn 1 */ + + /* USER CODE END BusFault_IRQn 1 */ +} + +/** +* @brief This function handles Undefined instruction or illegal state. +*/ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + } + /* USER CODE BEGIN UsageFault_IRQn 1 */ + + /* USER CODE END UsageFault_IRQn 1 */ +} + +/** +* @brief This function handles System service call via SWI instruction. +*/ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** +* @brief This function handles Debug monitor. +*/ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** +* @brief This function handles Pendable request for system service. +*/ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** +* @brief This function handles System tick timer. +*/ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + HAL_SYSTICK_IRQHandler(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F1xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f1xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/Src/system_stm32f1xx.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/Src/system_stm32f1xx.c Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,448 @@ +/** + ****************************************************************************** + * @file system_stm32f1xx.c + * @author MCD Application Team + * @version V4.1.0 + * @date 29-April-2016 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * factors, AHB/APBx prescalers and Flash settings). + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f1xx_xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (8 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f1xx_xx.s" file, to + * configure the system clock before to branch to main program. + * + * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depending on + * the product used), refer to "HSE_VALUE". + * When HSE is used as system clock source, directly or through PLL, and you + * are using different crystal you have to adapt the HSE value to your own + * configuration. + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2016 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f1xx_system + * @{ + */ + +/** @addtogroup STM32F1xx_System_Private_Includes + * @{ + */ + +#include "stm32f1xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Defines + * @{ + */ + +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)8000000) /*!< Default value of the Internal oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSI_VALUE */ + +/*!< Uncomment the following line if you need to use external SRAM */ +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) +/* #define DATA_IN_ExtSRAM */ +#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x0 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Variables + * @{ + */ + +/******************************************************************************* +* Clock Definitions +*******************************************************************************/ +#if defined(STM32F100xB) ||defined(STM32F100xE) + uint32_t SystemCoreClock = 24000000; /*!< System Clock Frequency (Core Clock) */ +#else /*!< HSI Selected as System Clock source */ + uint32_t SystemCoreClock = 72000000; /*!< System Clock Frequency (Core Clock) */ +#endif + +const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ + +/** + * @} + */ + +/** @addtogroup STM32F1xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemCoreClock variable. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +void SystemInit (void) +{ + /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ +#if !defined(STM32F105xC) && !defined(STM32F107xC) + RCC->CFGR &= (uint32_t)0xF8FF0000; +#else + RCC->CFGR &= (uint32_t)0xF0FF0000; +#endif /* STM32F105xC */ + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ + RCC->CFGR &= (uint32_t)0xFF80FFFF; + +#if defined(STM32F105xC) || defined(STM32F107xC) + /* Reset PLL2ON and PLL3ON bits */ + RCC->CR &= (uint32_t)0xEBFFFFFF; + + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x00FF0000; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000; +#elif defined(STM32F100xB) || defined(STM32F100xE) + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000; +#else + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000; +#endif /* STM32F105xC */ + +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) + #ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); + #endif /* DATA_IN_ExtSRAM */ +#endif + +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz or 25 MHz, depending on the product used), user has to ensure + * that HSE_VALUE is same as the real frequency of the crystal used. + * Otherwise, this function may have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t tmp = 0, pllmull = 0, pllsource = 0; + +#if defined(STM32F105xC) || defined(STM32F107xC) + uint32_t prediv1source = 0, prediv1factor = 0, prediv2factor = 0, pll2mull = 0; +#endif /* STM32F105xC */ + +#if defined(STM32F100xB) || defined(STM32F100xE) + uint32_t prediv1factor = 0; +#endif /* STM32F100xB or STM32F100xE */ + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock */ + + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & RCC_CFGR_PLLMULL; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + +#if !defined(STM32F105xC) && !defined(STM32F107xC) + pllmull = ( pllmull >> 18) + 2; + + if (pllsource == 0x00) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; + } + else + { + #if defined(STM32F100xB) || defined(STM32F100xE) + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1; + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + #else + /* HSE selected as PLL clock entry */ + if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) + {/* HSE oscillator clock divided by 2 */ + SystemCoreClock = (HSE_VALUE >> 1) * pllmull; + } + else + { + SystemCoreClock = HSE_VALUE * pllmull; + } + #endif + } +#else + pllmull = pllmull >> 18; + + if (pllmull != 0x0D) + { + pllmull += 2; + } + else + { /* PLL multiplication factor = PLL input clock * 6.5 */ + pllmull = 13 / 2; + } + + if (pllsource == 0x00) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; + } + else + {/* PREDIV1 selected as PLL clock entry */ + + /* Get PREDIV1 clock source and division factor */ + prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC; + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1; + + if (prediv1source == 0) + { + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + } + else + {/* PLL2 clock selected as PREDIV1 clock entry */ + + /* Get PREDIV2 division factor and PLL2 multiplication factor */ + prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4) + 1; + pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8 ) + 2; + SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; + } + } +#endif /* STM32F105xC */ + break; + + default: + SystemCoreClock = HSI_VALUE; + break; + } + + /* Compute HCLK clock frequency ----------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + +#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) +/** + * @brief Setup the external memory controller. Called in startup_stm32f1xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f1xx_xx.s/.c before jump to main. + * This function configures the external SRAM mounted on STM3210E-EVAL + * board (STM32 High density devices). This SRAM will be used as program + * data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmpreg; + /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is + required, then adjust the Register Addresses */ + + /* Enable FSMC clock */ + RCC->AHBENR = 0x00000114; + + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); + + /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ + RCC->APB2ENR = 0x000001E0; + + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN); + + (void)(tmpreg); + +/* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ +/*---------------- SRAM Address lines configuration -------------------------*/ +/*---------------- NOE and NWE configuration --------------------------------*/ +/*---------------- NE3 configuration ----------------------------------------*/ +/*---------------- NBL0, NBL1 configuration ---------------------------------*/ + + GPIOD->CRL = 0x44BB44BB; + GPIOD->CRH = 0xBBBBBBBB; + + GPIOE->CRL = 0xB44444BB; + GPIOE->CRH = 0xBBBBBBBB; + + GPIOF->CRL = 0x44BBBBBB; + GPIOF->CRH = 0xBBBB4444; + + GPIOG->CRL = 0x44BBBBBB; + GPIOG->CRH = 0x444B4B44; + +/*---------------- FSMC Configuration ---------------------------------------*/ +/*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/ + + FSMC_Bank1->BTCR[4] = 0x00001091; + FSMC_Bank1->BTCR[5] = 0x00110212; +} +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/f103c8.elf.launch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/f103c8.elf.launch Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a f103c8/f103c8.ioc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f103c8/f103c8.ioc Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,96 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=false +Mcu.Family=STM32F1 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=TIM4 +Mcu.IPNb=4 +Mcu.Name=STM32F103C(8-B)Tx +Mcu.Package=LQFP48 +Mcu.Pin0=PC14-OSC32_IN +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin2=PD0-OSC_IN +Mcu.Pin3=PD1-OSC_OUT +Mcu.Pin4=PA5 +Mcu.Pin5=PB6 +Mcu.Pin6=VP_SYS_VS_ND +Mcu.Pin7=VP_SYS_VS_Systick +Mcu.Pin8=VP_TIM4_VS_ClockSourceINT +Mcu.PinsNb=9 +Mcu.UserConstants= +Mcu.UserName=STM32F103C8Tx +MxCube.Version=4.18.0 +MxDb.Version=DB.4.0.180 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true +PA5.Locked=true +PA5.Signal=GPIO_Output +PB6.Signal=S_TIM4_CH1 +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PCC.Checker=false +PCC.Line=STM32F103 +PCC.MCU=STM32F103C(8-B)Tx +PCC.MXVersion=4.18.0 +PCC.PartNumber=STM32F103C8Tx +PCC.Seq0=0 +PCC.Series=STM32F1 +PCC.Temperature=25 +PCC.Vdd=3.3 +PD0-OSC_IN.Mode=HSE-External-Oscillator +PD0-OSC_IN.Signal=RCC_OSC_IN +PD1-OSC_OUT.Mode=HSE-External-Oscillator +PD1-OSC_OUT.Signal=RCC_OSC_OUT +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=2 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage=/home/sergey/STM32Cube/Repository/STM32Cube_FW_F1_V1.4.0 +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F103C8Tx +ProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.4.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +ProjectManager.PreviousToolchain=TrueSTUDIO +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=f103c8.ioc +ProjectManager.ProjectName=f103c8 +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=TrueSTUDIO +ProjectManager.ToolChainLocation=/home/sergey/Projects/ARM_workspace_7.0/f103c8 +ProjectManager.UnderRoot=true +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL,2-SystemClock_Config-RCC-false-HAL,3-MX_TIM4_Init-TIM4-false-HAL +RCC.APB1Freq_Value=8000000 +RCC.APB2Freq_Value=8000000 +RCC.FamilyName=M +RCC.IPParameters=APB1Freq_Value,APB2Freq_Value,FamilyName,PLLCLKFreq_Value,PLLMCOFreq_Value,TimSysFreq_Value +RCC.PLLCLKFreq_Value=8000000 +RCC.PLLMCOFreq_Value=4000000 +RCC.TimSysFreq_Value=8000000 +SH.S_TIM4_CH1.0=TIM4_CH1,PWM Generation1 CH1 +SH.S_TIM4_CH1.ConfNb=1 +VP_SYS_VS_ND.Mode=No_Debug +VP_SYS_VS_ND.Signal=SYS_VS_ND +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TIM4_VS_ClockSourceINT.Mode=Internal +VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT +board=f103c8 diff -r a0b14b11ad9f -r 0c59e7a7782a halpp/include/gpio.h --- a/halpp/include/gpio.h Fri Jan 13 02:11:02 2017 +0300 +++ b/halpp/include/gpio.h Mon Jan 16 11:04:47 2017 +0300 @@ -1,14 +1,66 @@ #pragma once namespace halpp { + typedef enum { + GpioSpeedLow = 0, // below 5 MHz + GpioSpeedMedium = 1, // 5-25 MHz + GpioSpeedHigh = 2, // 25-50 MHz + GpioSpeedVeryHigh = 3 // above 50 MHz + } GpioSpeed; - template class TGpio { + typedef enum { + GpioModeInput = 0, + GpioModeOutput = 1, + GpioModeAlternative = 2 + } GpioMode; + + typedef enum { + GpioNoPull = 0, + GpioPullUp = 1, + GpioPullDown = 2, + } GpioPullMode; + + typedef enum { + GpioPushPull = 0, + GpioOpenDrain = 1 + } GpioOutputType; + + template class TGpio { + TDev& m_dev; + + explicit TGpio(const TGpio& ref); public: + TGpio(TDev& dev) : m_dev(dev) { + } + + void SetPinSpeed(unsigned short pin, GpioSpeed speed) { + m_dev.OSPEEDR = (m_dev.OSPEED & (~(3U << (pin * 2)))) | (speed << (pin * 2)); + } + + void SetPinMode(unsigned short pin, GpioMode mode) { + m_dev.MODER = (m_dev.MODER & (~(3U << (pin * 2)))) | (mode << (pin * 2)); + } + + void SetPinPullMode(unsigned short pin, GpioPullMode mode) { + m_dev.PUPDR = (m_dev.PUPDR & (~(3U << (pin * 2)))) | (mode << (pin * 2)); + } + + void SetPinOutputType(unsigned short pin, GpioOutputType type) { + m_dev.OTYPER = (m_dev.OTYPER & (~(1U << pin))) | (type << pin); + } + + void TooglePin(unsigned short pin) { + m_dev.ODR ^= 1U << pin; + } + + void WritePin(unsigned short pin, unsigned short value) { + m_dev.ODR = (m_dev.ODR & (~(1U << pin))) | ((value & 1U) << pin); + } }; - template class TGpioPin { + template class TGpioPin { }; diff -r a0b14b11ad9f -r 0c59e7a7782a halpp/include/rcc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/halpp/include/rcc.h Mon Jan 16 11:04:47 2017 +0300 @@ -0,0 +1,5 @@ +#pragma once + +namespace halpp { + +} diff -r a0b14b11ad9f -r 0c59e7a7782a l476rg-hal-test/src/main.cpp --- a/l476rg-hal-test/src/main.cpp Fri Jan 13 02:11:02 2017 +0300 +++ b/l476rg-hal-test/src/main.cpp Mon Jan 16 11:04:47 2017 +0300 @@ -1,34 +1,34 @@ /* -****************************************************************************** -File: main.c -Info: Generated by Atollic TrueSTUDIO(R) 7.0.1 2017-01-12 + ****************************************************************************** + File: main.c + Info: Generated by Atollic TrueSTUDIO(R) 7.0.1 2017-01-12 -The MIT License (MIT) -Copyright (c) 2009-2016 Atollic AB + The MIT License (MIT) + Copyright (c) 2009-2016 Atollic AB -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: + 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 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. -****************************************************************************** -*/ + 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. + ****************************************************************************** + */ /* Includes */ #include "stm32l4xx.h" -#include "msp.h" +#include "gpio.h" /* Private macro */ /* Private variables */ @@ -36,32 +36,96 @@ /* Private functions */ /** -**=========================================================================== -** -** Abstract: main program -** -**=========================================================================== -*/ -int main(void) -{ - int i = 0; + **=========================================================================== + ** + ** Abstract: main program + ** + **=========================================================================== + */ + +using namespace halpp; + +template class TLed { + TDev& m_dev; +public: + TLed(TDev& dev) : + m_dev(dev) { + + } + + void Init() const { + m_dev.SetPinMode(5, halpp::GpioModeOutput); + m_dev.SetPinOutputType(5, halpp::GpioOutputType::GpioPushPull); + m_dev.SetPinPullMode(5, halpp::GpioPullMode::GpioNoPull); + } + + void Set() const { + m_dev.WritePin(PIN, 1); + } + + void Reset() const { + m_dev.WritePin(PIN, 0); + } + + void Toogle() const { + m_dev.TooglePin(PIN); + } +}; + +class AHB2Bus { +public: + static void Enable(unsigned int flag) { + RCC->AHB2ENR |= flag; + } +}; - /** - * IMPORTANT NOTE! - * The symbol VECT_TAB_SRAM needs to be defined when building the project - * if code has been located to RAM and interrupts are used. - * Otherwise the interrupt table located in flash will be used. - * See also the file and how the SystemInit() function updates - * SCB->VTOR register. - * E.g. SCB->VTOR = 0x20000000; - */ +template class TDevice { +public: + static void Enable() { + TBus::Enable(ENF); + } +}; + +class GpioA : public TGpio, public TDevice { + static GpioA m_instance; + typedef TGpio GpioBase; +public: + + GpioA(GPIO_TypeDef& dev) : GpioBase(dev) { + + } + + static GpioA& instance() { + return m_instance; + } +}; + +GpioA GpioA::m_instance(*GPIOA); + +int main(void) { - /* TODO - Add your application code here */ + /** + * IMPORTANT NOTE! + * The symbol VECT_TAB_SRAM needs to be defined when building the project + * if code has been located to RAM and interrupts are used. + * Otherwise the interrupt table located in flash will be used. + * See also the file and how the SystemInit() function updates + * SCB->VTOR register. + * E.g. SCB->VTOR = 0x20000000; + */ + + /* TODO - Add your application code here */ - /* Infinite loop */ - while (1) - { - Hardware::pwm1.SetPulse(150); - i++; - } + GpioA::Enable(); + + TLed, 5> led1(GpioA::instance()); + led1.Init(); + + /* Infinite loop */ + while (1) { + led1.Toogle(); + + for (int i = 0; i < 1000000; i++) { + } + } } diff -r a0b14b11ad9f -r 0c59e7a7782a l476rg-hal-test/src/msp.cpp --- a/l476rg-hal-test/src/msp.cpp Fri Jan 13 02:11:02 2017 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -#include "msp.h" - -Hardware::PwmChannel1 Hardware::pwm1(*TIM3); diff -r a0b14b11ad9f -r 0c59e7a7782a l476rg/.mxproject --- a/l476rg/.mxproject Fri Jan 13 02:11:02 2017 +0300 +++ b/l476rg/.mxproject Mon Jan 16 11:04:47 2017 +0300 @@ -8,6 +8,6 @@ LibFiles=Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_def.h;Drivers/STM32L4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ramfunc.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_cortex.h;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c;Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l476xx.h;Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h;Drivers/CMSIS/Device/ST/STM32L4xx/Include/system_stm32l4xx.h;Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/system_stm32l4xx.c;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/cmsis_gcc.h; [PreviousUsedTStudioFiles] -SourceFiles=../Src/main.c;../Src/gpio.c;../Src/tim.c;../Src/usart.c;../Src/stm32l4xx_it.c;../Src/stm32l4xx_hal_msp.c;../Src/stm32l4xx_hal_timebase_TIM.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c;../Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/system_stm32l4xx.c;../Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/gcc/startup_stm32l476xx.s; +SourceFiles=../Src/main.c;../Src/gpio.c;../Src/usart.c;../Src/stm32l4xx_it.c;../Src/stm32l4xx_hal_msp.c;../Src/stm32l4xx_hal_timebase_TIM.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c;../Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c;../Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/system_stm32l4xx.c;../Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/gcc/startup_stm32l476xx.s; HeaderPath=../Drivers/STM32L4xx_HAL_Driver/Inc;../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32L4xx/Include;../Drivers/CMSIS/Include; diff -r a0b14b11ad9f -r 0c59e7a7782a l476rg/Inc/tim.h --- a/l476rg/Inc/tim.h Fri Jan 13 02:11:02 2017 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/** - ****************************************************************************** - * File Name : TIM.h - * Description : This file provides code for the configuration - * of the TIM instances. - ****************************************************************************** - * - * COPYRIGHT(c) 2017 STMicroelectronics - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. 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. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __tim_H -#define __tim_H -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32l4xx_hal.h" -#include "main.h" - -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -extern TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN Private defines */ - -/* USER CODE END Private defines */ - -extern void Error_Handler(void); - -void MX_TIM2_Init(void); - -void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); - - -/* USER CODE BEGIN Prototypes */ - -/* USER CODE END Prototypes */ - -#ifdef __cplusplus -} -#endif -#endif /*__ tim_H */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a l476rg/Src/gpio.c --- a/l476rg/Src/gpio.c Fri Jan 13 02:11:02 2017 +0300 +++ b/l476rg/Src/gpio.c Mon Jan 16 11:04:47 2017 +0300 @@ -69,6 +69,16 @@ GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct); + /*Configure GPIO pin : PA5 */ + GPIO_InitStruct.Pin = GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); + } /* USER CODE BEGIN 2 */ diff -r a0b14b11ad9f -r 0c59e7a7782a l476rg/Src/main.c --- a/l476rg/Src/main.c Fri Jan 13 02:11:02 2017 +0300 +++ b/l476rg/Src/main.c Mon Jan 16 11:04:47 2017 +0300 @@ -33,7 +33,6 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "stm32l4xx_hal.h" -#include "tim.h" #include "usart.h" #include "gpio.h" @@ -79,7 +78,6 @@ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); - MX_TIM2_Init(); /* USER CODE BEGIN 2 */ diff -r a0b14b11ad9f -r 0c59e7a7782a l476rg/Src/tim.c --- a/l476rg/Src/tim.c Fri Jan 13 02:11:02 2017 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,150 +0,0 @@ -/** - ****************************************************************************** - * File Name : TIM.c - * Description : This file provides code for the configuration - * of the TIM instances. - ****************************************************************************** - * - * COPYRIGHT(c) 2017 STMicroelectronics - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. 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. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "tim.h" - -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -TIM_HandleTypeDef htim2; - -/* TIM2 init function */ -void MX_TIM2_Init(void) -{ - TIM_MasterConfigTypeDef sMasterConfig; - TIM_OC_InitTypeDef sConfigOC; - - htim2.Instance = TIM2; - htim2.Init.Prescaler = 799; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 99; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 29; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - - HAL_TIM_MspPostInit(&htim2); - -} - -void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle) -{ - - if(tim_pwmHandle->Instance==TIM2) - { - /* USER CODE BEGIN TIM2_MspInit 0 */ - - /* USER CODE END TIM2_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM2_CLK_ENABLE(); - /* USER CODE BEGIN TIM2_MspInit 1 */ - - /* USER CODE END TIM2_MspInit 1 */ - } -} -void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) -{ - - GPIO_InitTypeDef GPIO_InitStruct; - if(timHandle->Instance==TIM2) - { - /* USER CODE BEGIN TIM2_MspPostInit 0 */ - - /* USER CODE END TIM2_MspPostInit 0 */ - - /**TIM2 GPIO Configuration - PA5 ------> TIM2_CH1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_5; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM2_MspPostInit 1 */ - - /* USER CODE END TIM2_MspPostInit 1 */ - } - -} - -void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* tim_pwmHandle) -{ - - if(tim_pwmHandle->Instance==TIM2) - { - /* USER CODE BEGIN TIM2_MspDeInit 0 */ - - /* USER CODE END TIM2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM2_CLK_DISABLE(); - } - /* USER CODE BEGIN TIM2_MspDeInit 1 */ - - /* USER CODE END TIM2_MspDeInit 1 */ -} - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff -r a0b14b11ad9f -r 0c59e7a7782a l476rg/l476rg.elf.launch --- a/l476rg/l476rg.elf.launch Fri Jan 13 02:11:02 2017 +0300 +++ b/l476rg/l476rg.elf.launch Mon Jan 16 11:04:47 2017 +0300 @@ -1,50 +1,50 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r a0b14b11ad9f -r 0c59e7a7782a l476rg/l476rg.ioc --- a/l476rg/l476rg.ioc Fri Jan 13 02:11:02 2017 +0300 +++ b/l476rg/l476rg.ioc Mon Jan 16 11:04:47 2017 +0300 @@ -5,9 +5,8 @@ Mcu.IP0=NVIC Mcu.IP1=RCC Mcu.IP2=SYS -Mcu.IP3=TIM2 -Mcu.IP4=USART2 -Mcu.IPNb=5 +Mcu.IP3=USART2 +Mcu.IPNb=4 Mcu.Name=STM32L476R(C-E-G)Tx Mcu.Package=LQFP64 Mcu.Pin0=PC13 @@ -65,7 +64,7 @@ PA3.Mode=Asynchronous PA3.Signal=USART2_RX PA5.Locked=true -PA5.Signal=S_TIM2_CH1 +PA5.Signal=GPIO_Output PB3.GPIOParameters=GPIO_Label PB3.GPIO_Label=SWO PB3.Locked=true @@ -119,7 +118,7 @@ ProjectManager.TargetToolchain=TrueSTUDIO ProjectManager.ToolChainLocation=/home/sergey/Projects/ARM_workspace_7.0/l476rg ProjectManager.UnderRoot=true -ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL,2-SystemClock_Config-RCC-false-HAL,3-MX_USART2_UART_Init-USART2-false-HAL,4-MX_TIM2_Init-TIM2-false-HAL +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL,2-SystemClock_Config-RCC-false-HAL,3-MX_USART2_UART_Init-USART2-false-HAL RCC.ADCFreq_Value=64000000 RCC.AHBFreq_Value=80000000 RCC.APB1Freq_Value=80000000 @@ -175,12 +174,6 @@ RCC.VCOSAI2OutputFreq_Value=128000000 SH.GPXTI13.0=GPIO_EXTI13 SH.GPXTI13.ConfNb=1 -SH.S_TIM2_CH1.0=TIM2_CH1,PWM Generation1 CH1 -SH.S_TIM2_CH1.ConfNb=1 -TIM2.IPParameters=Prescaler,Period,Pulse-PWM Generation1 CH1 -TIM2.Period=99 -TIM2.Prescaler=799 -TIM2.Pulse-PWM\ Generation1\ CH1=29 USART2.IPParameters=WordLength USART2.WordLength=UART_WORDLENGTH_8B VP_SYS_VS_tim6.Mode=TIM6